diff --git a/.circleci/test.yml b/.circleci/test.yml
index f98014366dd..b20f63ab28e 100644
--- a/.circleci/test.yml
+++ b/.circleci/test.yml
@@ -62,6 +62,7 @@ jobs:
equal: ["3.9.0", << parameters.python >>]
steps:
- run: pip install "protobuf <= 3.20.1" && sudo apt-get update && sudo apt-get -y install libprotobuf-dev protobuf-compiler cmake
+ - run: pip install dsdl
- run:
name: Install mmdet dependencies
# numpy may be downgraded after building pycocotools, which causes `ImportError: numpy.core.multiarray failed to import`
@@ -73,7 +74,9 @@ jobs:
pip install -r requirements/tests.txt -r requirements/optional.txt
pip install --force-reinstall pycocotools
pip install albumentations>=0.3.2 --no-binary imgaug,albumentations
+ pip install -r requirements/tracking.txt
pip install git+https://github.com/cocodataset/panopticapi.git
+ pip install git+https://github.com/JonathonLuiten/TrackEval.git
- run:
name: Build and install
command: |
@@ -91,10 +94,10 @@ jobs:
type: string
cuda:
type: enum
- enum: ["10.1", "10.2", "11.1", "11.7"]
+ enum: ["11.1", "11.7"]
cudnn:
type: integer
- default: 7
+ default: 8
machine:
image: ubuntu-2004-cuda-11.4:202110-01
# docker_layer_caching: true
@@ -121,7 +124,9 @@ jobs:
docker exec mmdetection pip install -r requirements/tests.txt -r requirements/optional.txt
docker exec mmdetection pip install pycocotools
docker exec mmdetection pip install albumentations>=0.3.2 --no-binary imgaug,albumentations
+ docker exec mmdetection pip install -r requirements/tracking.txt
docker exec mmdetection pip install git+https://github.com/cocodataset/panopticapi.git
+ docker exec mmdetection pip install git+https://github.com/JonathonLuiten/TrackEval.git
docker exec mmdetection python -c 'import mmcv; print(mmcv.__version__)'
- run:
name: Build and install
@@ -154,9 +159,9 @@ workflows:
- dev-3.x
- build_cpu:
name: minimum_version_cpu
- torch: 1.6.0
- torchvision: 0.7.0
- python: 3.7.4 # The lowest python 3.7.x version available on CircleCI images
+ torch: 1.8.0
+ torchvision: 0.9.0
+ python: 3.7.16
requires:
- lint
- build_cpu:
@@ -175,7 +180,7 @@ workflows:
torch: 1.8.1
# Use double quotation mark to explicitly specify its type
# as string instead of number
- cuda: "10.2"
+ cuda: "11.1"
requires:
- hold
- build_cuda:
@@ -191,8 +196,8 @@ workflows:
jobs:
- build_cuda:
name: minimum_version_gpu
- torch: 1.6.0
- cuda: "10.1"
+ torch: 1.8.0
+ cuda: "11.1"
filters:
branches:
only:
diff --git a/.dev_scripts/benchmark_full_models.txt b/.dev_scripts/benchmark_full_models.txt
index 5681d1e4ac6..eae7235f550 100644
--- a/.dev_scripts/benchmark_full_models.txt
+++ b/.dev_scripts/benchmark_full_models.txt
@@ -33,12 +33,13 @@ free_anchor/freeanchor_r50_fpn_1x_coco.py
fsaf/fsaf_r50_fpn_1x_coco.py
gcnet/mask-rcnn_r50-gcb-r4-c3-c5_fpn_1x_coco.py
gfl/gfl_r50_fpn_1x_coco.py
+glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py
ghm/retinanet_r50_fpn_ghm-1x_coco.py
gn/mask-rcnn_r50_fpn_gn-all_2x_coco.py
gn+ws/faster-rcnn_r50_fpn_gn-ws-all_1x_coco.py
-grid_rcnn/grid-rcnn_r50_fpn_gn-head_1x_coco.py
+grid_rcnn/grid-rcnn_r50_fpn_gn-head_2x_coco.py
groie/faste-rcnn_r50_fpn_groie_1x_coco.py
-guided_anchoring/ga-faster-rcnn_r50_fpn_1x_coco.py
+guided_anchoring/ga-faster-rcnn_r50-caffe_fpn_1x_coco.py
hrnet/htc_hrnetv2p-w18_20e_coco.py
htc/htc_r50_fpn_1x_coco.py
instaboost/mask-rcnn_r50_fpn_instaboost-4x_coco.py
@@ -50,7 +51,7 @@ mask2former/mask2former_r50_8xb2-lsj-50e_coco.py
mask2former/mask2former_r50_8xb2-lsj-50e_coco-panoptic.py
mask_rcnn/mask-rcnn_r50_fpn_1x_coco.py
maskformer/maskformer_r50_ms-16xb1-75e_coco.py
-ms_rcnn/ms-rcnn_r50_fpn_1x_coco.py
+ms_rcnn/ms-rcnn_r50-caffe_fpn_1x_coco.py
nas_fcos/nas-fcos_r50-caffe_fpn_nashead-gn-head_4xb4-1x_coco.py
nas_fpn/retinanet_r50_nasfpn_crop640-50e_coco.py
paa/paa_r50_fpn_1x_coco.py
@@ -79,9 +80,7 @@ solo/solo_r50_fpn_1x_coco.py
solov2/solov2_r50_fpn_1x_coco.py
sparse_rcnn/sparse-rcnn_r50_fpn_1x_coco.py
ssd/ssd300_coco.py
-strong_baselines/mask-rcnn_r50-caffe_fpn_rpn-2conv_4conv1fc_syncbn-all_amp-lsj-100e_coco.py
swin/mask-rcnn_swin-t-p4-w7_fpn_1x_coco.py
-timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py
tood/tood_r50_fpn_1x_coco.py
tridentnet/tridentnet_r50-caffe_1x_coco.py
vfnet/vfnet_r50_fpn_1x_coco.py
@@ -89,3 +88,9 @@ yolact/yolact_r50_8xb8-55e_coco.py
yolo/yolov3_d53_8xb8-320-273e_coco.py
yolof/yolof_r50-c5_8xb8-1x_coco.py
yolox/yolox_s_8xb8-300e_coco.py
+deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
+mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py
+masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py
+ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
+qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
+strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
diff --git a/.dev_scripts/benchmark_options.py b/.dev_scripts/benchmark_options.py
index 88c510144b5..cdb1f87d792 100644
--- a/.dev_scripts/benchmark_options.py
+++ b/.dev_scripts/benchmark_options.py
@@ -5,8 +5,11 @@
'pip install instaboostfast',
'pip install git+https://github.com/cocodataset/panopticapi.git',
'pip install timm',
- 'pip install mmcls>=1.0.0rc0',
+ 'pip install mmpretrain',
'pip install git+https://github.com/lvis-dataset/lvis-api.git',
+ 'pip install -r ../requirements/multimodal.txt',
+ 'pip install -r ../requirements/tracking.txt',
+ 'pip install git+https://github.com/JonathonLuiten/TrackEval.git',
]
default_floating_range = 0.5
diff --git a/.dev_scripts/benchmark_train_models.txt b/.dev_scripts/benchmark_train_models.txt
index fabcade2714..11173a120e8 100644
--- a/.dev_scripts/benchmark_train_models.txt
+++ b/.dev_scripts/benchmark_train_models.txt
@@ -15,4 +15,6 @@ mask2former/mask2former_r50_8xb2-lsj-50e_coco-panoptic.py
swin/mask-rcnn_swin-t-p4-w7_fpn_1x_coco.py
condinst/condinst_r50_fpn_ms-poly-90k_coco_instance.py
lvis/mask-rcnn_r50_fpn_sample1e-3_ms-1x_lvis-v1.py
-convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py
+mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py
+masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py
+qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
diff --git a/.dev_scripts/gather_models.py b/.dev_scripts/gather_models.py
index 1381f99759a..588d913789b 100644
--- a/.dev_scripts/gather_models.py
+++ b/.dev_scripts/gather_models.py
@@ -1,10 +1,11 @@
# Copyright (c) OpenMMLab. All rights reserved.
import argparse
import glob
-import json
+import os
import os.path as osp
import shutil
import subprocess
+import time
from collections import OrderedDict
import torch
@@ -32,11 +33,15 @@ def process_checkpoint(in_file, out_file):
# remove optimizer for smaller file size
if 'optimizer' in checkpoint:
del checkpoint['optimizer']
+ if 'ema_state_dict' in checkpoint:
+ del checkpoint['ema_state_dict']
# remove ema state_dict
for key in list(checkpoint['state_dict']):
if key.startswith('ema_'):
checkpoint['state_dict'].pop(key)
+ elif key.startswith('data_preprocessor'):
+ checkpoint['state_dict'].pop(key)
# if it is necessary to remove some sensitive data in checkpoint['meta'],
# add the code here.
@@ -52,15 +57,15 @@ def process_checkpoint(in_file, out_file):
def is_by_epoch(config):
cfg = Config.fromfile('./configs/' + config)
- return cfg.runner.type == 'EpochBasedRunner'
+ return cfg.train_cfg.type == 'EpochBasedTrainLoop'
def get_final_epoch_or_iter(config):
cfg = Config.fromfile('./configs/' + config)
- if cfg.runner.type == 'EpochBasedRunner':
- return cfg.runner.max_epochs
+ if cfg.train_cfg.type == 'EpochBasedTrainLoop':
+ return cfg.train_cfg.max_epochs
else:
- return cfg.runner.max_iters
+ return cfg.train_cfg.max_iters
def get_best_epoch_or_iter(exp_dir):
@@ -74,60 +79,22 @@ def get_best_epoch_or_iter(exp_dir):
def get_real_epoch_or_iter(config):
cfg = Config.fromfile('./configs/' + config)
- if cfg.runner.type == 'EpochBasedRunner':
- epoch = cfg.runner.max_epochs
- if cfg.data.train.type == 'RepeatDataset':
- epoch *= cfg.data.train.times
+ if cfg.train_cfg.type == 'EpochBasedTrainLoop':
+ epoch = cfg.train_cfg.max_epochs
return epoch
else:
- return cfg.runner.max_iters
+ return cfg.train_cfg.max_iters
def get_final_results(log_json_path,
epoch_or_iter,
- results_lut,
+ results_lut='coco/bbox_mAP',
by_epoch=True):
result_dict = dict()
- last_val_line = None
- last_train_line = None
- last_val_line_idx = -1
- last_train_line_idx = -1
- with open(log_json_path, 'r') as f:
- for i, line in enumerate(f.readlines()):
- log_line = json.loads(line)
- if 'mode' not in log_line.keys():
- continue
-
- if by_epoch:
- if (log_line['mode'] == 'train'
- and log_line['epoch'] == epoch_or_iter):
- result_dict['memory'] = log_line['memory']
-
- if (log_line['mode'] == 'val'
- and log_line['epoch'] == epoch_or_iter):
- result_dict.update({
- key: log_line[key]
- for key in results_lut if key in log_line
- })
- return result_dict
- else:
- if log_line['mode'] == 'train':
- last_train_line_idx = i
- last_train_line = log_line
-
- if log_line and log_line['mode'] == 'val':
- last_val_line_idx = i
- last_val_line = log_line
-
- # bug: max_iters = 768, last_train_line['iter'] = 750
- assert last_val_line_idx == last_train_line_idx + 1, \
- 'Log file is incomplete'
- result_dict['memory'] = last_train_line['memory']
- result_dict.update({
- key: last_val_line[key]
- for key in results_lut if key in last_val_line
- })
-
+ with open(log_json_path) as f:
+ r = f.readlines()[-1]
+ last_metric = r.split(',')[0].split(': ')[-1].strip()
+ result_dict[results_lut] = last_metric
return result_dict
@@ -150,6 +117,16 @@ def get_dataset_name(config):
return name_map[cfg.dataset_type]
+def find_last_dir(model_dir):
+ dst_times = []
+ for time_stamp in os.scandir(model_dir):
+ if osp.isdir(time_stamp):
+ dst_time = time.mktime(
+ time.strptime(time_stamp.name, '%Y%m%d_%H%M%S'))
+ dst_times.append([dst_time, time_stamp.name])
+ return max(dst_times, key=lambda x: x[0])[1]
+
+
def convert_model_info_to_pwc(model_infos):
pwc_files = {}
for model in model_infos:
@@ -160,9 +137,7 @@ def convert_model_info_to_pwc(model_infos):
pwc_model_info['Config'] = osp.join('configs', model['config'])
# get metadata
- memory = round(model['results']['memory'] / 1024, 1)
meta_data = OrderedDict()
- meta_data['Training Memory (GB)'] = memory
if 'epochs' in model:
meta_data['Epochs'] = get_real_epoch_or_iter(model['config'])
else:
@@ -198,7 +173,7 @@ def convert_model_info_to_pwc(model_infos):
Metrics={'PQ': metric}))
pwc_model_info['Results'] = results
- link_string = 'https://download.openmmlab.com/mmdetection/v2.0/'
+ link_string = 'https://download.openmmlab.com/mmdetection/v3.0/'
link_string += '{}/{}'.format(model['config'].rstrip('.py'),
osp.split(model['model_path'])[-1])
pwc_model_info['Weights'] = link_string
@@ -214,9 +189,13 @@ def parse_args():
parser.add_argument(
'root',
type=str,
+ default='work_dirs',
help='root path of benchmarked models to be gathered')
parser.add_argument(
- 'out', type=str, help='output path of gathered models to be stored')
+ '--out',
+ type=str,
+ default='gather',
+ help='output path of gathered models to be stored')
parser.add_argument(
'--best',
action='store_true',
@@ -262,32 +241,22 @@ def main():
continue
# get the latest logs
- log_json_path = list(
- sorted(glob.glob(osp.join(exp_dir, '*.log.json'))))[-1]
- log_txt_path = list(sorted(glob.glob(osp.join(exp_dir, '*.log'))))[-1]
- cfg = Config.fromfile('./configs/' + used_config)
- results_lut = cfg.evaluation.metric
- if not isinstance(results_lut, list):
- results_lut = [results_lut]
- # case when using VOC, the evaluation key is only 'mAP'
- # when using Panoptic Dataset, the evaluation key is 'PQ'.
- for i, key in enumerate(results_lut):
- if 'mAP' not in key and 'PQ' not in key:
- results_lut[i] = key + '_mAP'
- model_performance = get_final_results(log_json_path,
- final_epoch_or_iter, results_lut,
- by_epoch)
+ latest_exp_name = find_last_dir(exp_dir)
+ latest_exp_json = osp.join(exp_dir, latest_exp_name, 'vis_data',
+ latest_exp_name + '.json')
+
+ model_performance = get_final_results(
+ latest_exp_json, final_epoch_or_iter, by_epoch=by_epoch)
if model_performance is None:
continue
- model_time = osp.split(log_txt_path)[-1].split('.')[0]
model_info = dict(
config=used_config,
results=model_performance,
- model_time=model_time,
final_model=final_model,
- log_json_path=osp.split(log_json_path)[-1])
+ latest_exp_json=latest_exp_json,
+ latest_exp_name=latest_exp_name)
model_info['epochs' if by_epoch else 'iterations'] =\
final_epoch_or_iter
model_infos.append(model_info)
@@ -300,7 +269,7 @@ def main():
model_name = osp.split(model['config'])[-1].split('.')[0]
- model_name += '_' + model['model_time']
+ model_name += '_' + model['latest_exp_name']
publish_model_path = osp.join(model_publish_dir, model_name)
trained_model_path = osp.join(models_root, model['config'],
model['final_model'])
@@ -310,13 +279,8 @@ def main():
publish_model_path)
# copy log
- shutil.copy(
- osp.join(models_root, model['config'], model['log_json_path']),
- osp.join(model_publish_dir, f'{model_name}.log.json'))
- shutil.copy(
- osp.join(models_root, model['config'],
- model['log_json_path'].rstrip('.json')),
- osp.join(model_publish_dir, f'{model_name}.log'))
+ shutil.copy(model['latest_exp_json'],
+ osp.join(model_publish_dir, f'{model_name}.log.json'))
# copy config to guarantee reproducibility
config_path = model['config']
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 8f8e28983ff..7a9f0d901f4 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -21,5 +21,5 @@ If this PR introduces a new feature, it is better to list some use cases here, a
1. Pre-commit or other linting tools are used to fix the potential lint issues.
2. The modification is covered by complete unit tests. If not, please add more unit test to ensure the correctness.
-3. If the modification has potential influence on downstream projects, this PR should be tested with downstream projects, like MMDet or MMCls.
+3. If the modification has potential influence on downstream projects, this PR should be tested with downstream projects, like MMDet or MMPreTrain.
4. The documentation has been modified accordingly, like docstring or example tutorials.
diff --git a/.readthedocs.yml b/.readthedocs.yml
index 6cfbf5d310f..9b597978585 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -1,9 +1,14 @@
version: 2
-formats: all
+build:
+ os: ubuntu-22.04
+ tools:
+ python: "3.8"
+
+formats:
+ - epub
python:
- version: 3.7
install:
- requirements: requirements/docs.txt
- requirements: requirements/readthedocs.txt
diff --git a/MANIFEST.in b/MANIFEST.in
index 6300b224c7a..7398e6a6465 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,6 +1,7 @@
include requirements/*.txt
include mmdet/VERSION
include mmdet/.mim/model-index.yml
+include mmdet/.mim/dataset-index.yml
include mmdet/.mim/demo/*/*
recursive-include mmdet/.mim/configs *.py *.yml
recursive-include mmdet/.mim/tools *.sh *.py
diff --git a/README.md b/README.md
index 1718b0c868a..89748a970d0 100644
--- a/README.md
+++ b/README.md
@@ -61,12 +61,16 @@ English | [简体中文](README_zh-CN.md)
+
+
+
+
## Introduction
MMDetection is an open source object detection toolbox based on PyTorch. It is
a part of the [OpenMMLab](https://openmmlab.com/) project.
-The main branch works with **PyTorch 1.6+**.
+The main branch works with **PyTorch 1.8+**.
@@ -114,11 +118,12 @@ We are excited to announce our latest work on real-time object recognition tasks
-**v3.0.0** was released in 6/4/2023:
+**v3.1.0** was released in 30/6/2023:
-- Release MMDetection 3.0.0 official version
-- Support Semi-automatic annotation Base [Label-Studio](projects/LabelStudio) (#10039)
-- Support [EfficientDet](projects/EfficientDet) in projects (#9810)
+- Supports tracking algorithms including multi-object tracking (MOT) algorithms SORT, DeepSORT, StrongSORT, OCSORT, ByteTrack, QDTrack, and video instance segmentation (VIS) algorithm MaskTrackRCNN, Mask2Former-VIS.
+- Support [ViTDet](projects/ViTDet)
+- Supports inference and evaluation of multimodal algorithms [GLIP](configs/glip) and [XDecoder](projects/XDecoder), and also supports datasets such as COCO semantic segmentation, COCO Caption, ADE20k general segmentation, and RefCOCO. GLIP fine-tuning will be supported in the future.
+- Provides a [gradio demo](https://github.com/open-mmlab/mmdetection/blob/dev-3.x/projects/gradio_demo/README.md) for image type tasks of MMDetection, making it easy for users to experience.
## Installation
@@ -230,6 +235,7 @@ Results and models are available in the [model zoo](docs/en/model_zoo.md).
Conditional DETR (ICCV'2021)
DAB-DETR (ICLR'2022)
DINO (ICLR'2023)
+ GLIP (CVPR'2022)
DiffusionDet (ArXiv'2023)
EfficientDet (CVPR'2020)
Detic (ECCV'2022)
@@ -412,8 +418,8 @@ This project is released under the [Apache 2.0 license](LICENSE).
- [MMEngine](https://github.com/open-mmlab/mmengine): OpenMMLab foundational library for training deep learning models.
- [MMCV](https://github.com/open-mmlab/mmcv): OpenMMLab foundational library for computer vision.
-- [MIM](https://github.com/open-mmlab/mim): MIM installs OpenMMLab packages.
-- [MMClassification](https://github.com/open-mmlab/mmclassification): OpenMMLab image classification toolbox and benchmark.
+- [MMPreTrain](https://github.com/open-mmlab/mmpretrain): OpenMMLab pre-training toolbox and benchmark.
+- [MMagic](https://github.com/open-mmlab/mmagic): Open**MM**Lab **A**dvanced, **G**enerative and **I**ntelligent **C**reation toolbox.
- [MMDetection](https://github.com/open-mmlab/mmdetection): OpenMMLab detection toolbox and benchmark.
- [MMDetection3D](https://github.com/open-mmlab/mmdetection3d): OpenMMLab's next-generation platform for general 3D object detection.
- [MMRotate](https://github.com/open-mmlab/mmrotate): OpenMMLab rotated object detection toolbox and benchmark.
@@ -431,3 +437,6 @@ This project is released under the [Apache 2.0 license](LICENSE).
- [MMEditing](https://github.com/open-mmlab/mmediting): OpenMMLab image and video editing toolbox.
- [MMGeneration](https://github.com/open-mmlab/mmgeneration): OpenMMLab image and video generative models toolbox.
- [MMDeploy](https://github.com/open-mmlab/mmdeploy): OpenMMLab model deployment framework.
+- [MIM](https://github.com/open-mmlab/mim): MIM installs OpenMMLab packages.
+- [MMEval](https://github.com/open-mmlab/mmeval): A unified evaluation library for multiple machine learning libraries.
+- [Playground](https://github.com/open-mmlab/playground): A central hub for gathering and showcasing amazing projects built upon OpenMMLab.
diff --git a/README_zh-CN.md b/README_zh-CN.md
index 80392acd69f..7f2713dec75 100644
--- a/README_zh-CN.md
+++ b/README_zh-CN.md
@@ -61,11 +61,15 @@
+
+
+
+
## 简介
MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [OpenMMLab](https://openmmlab.com/) 项目的一部分。
-主分支代码目前支持 PyTorch 1.6 以上的版本。
+主分支代码目前支持 PyTorch 1.8 及其以上的版本。
@@ -113,11 +117,12 @@ MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [Ope
-**v3.0.0** 版本已经在 2023.4.6 发布:
+**v3.1.0** 版本已经在 2023.6.30 发布:
-- 发布 MMDetection 3.0.0 正式版
-- 基于 [Label-Studio](projects/LabelStudio) 支持半自动标注流程
-- projects 中支持了 [EfficientDet](projects/EfficientDet)
+- 支持 Tracking 类算法,包括多目标跟踪 MOT 算法 SORT、DeepSORT、StrongSORT、OCSORT、ByteTrack、QDTrack 和视频实例分割 VIS 算法 MaskTrackRCNN、Mask2Former-VIS。
+- 支持 [ViTDet](projects/ViTDet)
+- 支持多模态开放检测算法 [GLIP](configs/glip) 和 [XDecoder](projects/XDecoder) 推理和评估,并同时支持了 COCO 语义分割、COCO Caption、ADE20k 通用分割、RefCOCO 等数据集。后续将支持 GLIP 微调
+- 提供了包括 MMDetection 图片任务的 [gradio demo](https://github.com/open-mmlab/mmdetection/blob/dev-3.x/projects/gradio_demo/README.md),方便用户快速体验
## 安装
@@ -231,6 +236,7 @@ MMDetection 是一个基于 PyTorch 的目标检测开源工具箱。它是 [Ope
Conditional DETR (ICCV'2021)
DAB-DETR (ICLR'2022)
DINO (ICLR'2023)
+ GLIP (CVPR'2022)
DiffusionDet (ArXiv'2023)
EfficientDet (CVPR'2020)
Detic (ECCV'2022)
@@ -412,8 +418,8 @@ MMDetection 是一款由来自不同高校和企业的研发人员共同参与
- [MMEngine](https://github.com/open-mmlab/mmengine): OpenMMLab 深度学习模型训练基础库
- [MMCV](https://github.com/open-mmlab/mmcv): OpenMMLab 计算机视觉基础库
-- [MIM](https://github.com/open-mmlab/mim): MIM 是 OpenMMlab 项目、算法、模型的统一入口
-- [MMClassification](https://github.com/open-mmlab/mmclassification): OpenMMLab 图像分类工具箱
+- [MMPreTrain](https://github.com/open-mmlab/mmpretrain): OpenMMLab 深度学习预训练工具箱
+- [MMagic](https://github.com/open-mmlab/mmagic): OpenMMLab 新一代人工智能内容生成(AIGC)工具箱
- [MMDetection](https://github.com/open-mmlab/mmdetection): OpenMMLab 目标检测工具箱
- [MMDetection3D](https://github.com/open-mmlab/mmdetection3d): OpenMMLab 新一代通用 3D 目标检测平台
- [MMRotate](https://github.com/open-mmlab/mmrotate): OpenMMLab 旋转框检测工具箱与测试基准
@@ -431,6 +437,9 @@ MMDetection 是一款由来自不同高校和企业的研发人员共同参与
- [MMEditing](https://github.com/open-mmlab/mmediting): OpenMMLab 图像视频编辑工具箱
- [MMGeneration](https://github.com/open-mmlab/mmgeneration): OpenMMLab 图片视频生成模型工具箱
- [MMDeploy](https://github.com/open-mmlab/mmdeploy): OpenMMLab 模型部署框架
+- [MIM](https://github.com/open-mmlab/mim): OpenMMlab 项目、算法、模型的统一入口
+- [MMEval](https://github.com/open-mmlab/mmeval): 统一开放的跨框架算法评测库
+- [Playground](https://github.com/open-mmlab/playground): 收集和展示 OpenMMLab 相关的前沿、有趣的社区项目
## 欢迎加入 OpenMMLab 社区
diff --git a/configs/_base_/datasets/ade20k_instance.py b/configs/_base_/datasets/ade20k_instance.py
new file mode 100644
index 00000000000..57f657aa67f
--- /dev/null
+++ b/configs/_base_/datasets/ade20k_instance.py
@@ -0,0 +1,53 @@
+# dataset settings
+dataset_type = 'ADE20KInstanceDataset'
+data_root = 'data/ADEChallengeData2016/'
+
+# Example to use different file client
+# Method 1: simply set the data root and let the file I/O module
+# automatically infer from prefix (not support LMDB and Memcache yet)
+
+# data_root = 's3://openmmlab/datasets/detection/ADEChallengeData2016/'
+
+# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6
+# backend_args = dict(
+# backend='petrel',
+# path_mapping=dict({
+# './data/': 's3://openmmlab/datasets/detection/',
+# 'data/': 's3://openmmlab/datasets/detection/'
+# }))
+backend_args = None
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(2560, 640), keep_ratio=True),
+ # If you don't have a gt annotation, delete the pipeline
+ dict(type='LoadAnnotations', with_bbox=True, with_mask=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor'))
+]
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='ade20k_instance_val.json',
+ data_prefix=dict(img='images/validation'),
+ test_mode=True,
+ pipeline=test_pipeline,
+ backend_args=backend_args))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(
+ type='CocoMetric',
+ ann_file=data_root + 'ade20k_instance_val.json',
+ metric=['bbox', 'segm'],
+ format_only=False,
+ backend_args=backend_args)
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/ade20k_panoptic.py b/configs/_base_/datasets/ade20k_panoptic.py
new file mode 100644
index 00000000000..7be5ddd7f07
--- /dev/null
+++ b/configs/_base_/datasets/ade20k_panoptic.py
@@ -0,0 +1,38 @@
+# dataset settings
+dataset_type = 'ADE20KPanopticDataset'
+data_root = 'data/ADEChallengeData2016/'
+
+backend_args = None
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(2560, 640), keep_ratio=True),
+ dict(type='LoadPanopticAnnotations', backend_args=backend_args),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor'))
+]
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=0,
+ persistent_workers=False,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='ade20k_panoptic_val.json',
+ data_prefix=dict(img='images/validation/', seg='ade20k_panoptic_val/'),
+ test_mode=True,
+ pipeline=test_pipeline,
+ backend_args=backend_args))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(
+ type='CocoPanopticMetric',
+ ann_file=data_root + 'ade20k_panoptic_val.json',
+ seg_prefix=data_root + 'ade20k_panoptic_val/',
+ backend_args=backend_args)
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/ade20k_semantic.py b/configs/_base_/datasets/ade20k_semantic.py
new file mode 100644
index 00000000000..522a7757041
--- /dev/null
+++ b/configs/_base_/datasets/ade20k_semantic.py
@@ -0,0 +1,48 @@
+dataset_type = 'ADE20KSegDataset'
+data_root = 'data/ADEChallengeData2016/'
+
+# Example to use different file client
+# Method 1: simply set the data root and let the file I/O module
+# automatically infer from prefix (not support LMDB and Memcache yet)
+
+# data_root = 's3://openmmlab/datasets/detection/ADEChallengeData2016/'
+
+# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6
+# backend_args = dict(
+# backend='petrel',
+# path_mapping=dict({
+# './data/': 's3://openmmlab/datasets/detection/',
+# 'data/': 's3://openmmlab/datasets/detection/'
+# }))
+backend_args = None
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(2048, 512), keep_ratio=True),
+ dict(
+ type='LoadAnnotations',
+ with_bbox=False,
+ with_mask=False,
+ with_seg=True,
+ reduce_zero_label=True),
+ dict(
+ type='PackDetInputs', meta_keys=('img_path', 'ori_shape', 'img_shape'))
+]
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(
+ img_path='images/validation',
+ seg_map_path='annotations/validation'),
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(type='SemSegMetric', iou_metrics=['mIoU'])
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/coco_caption.py b/configs/_base_/datasets/coco_caption.py
new file mode 100644
index 00000000000..a1bd8983139
--- /dev/null
+++ b/configs/_base_/datasets/coco_caption.py
@@ -0,0 +1,60 @@
+# data settings
+
+dataset_type = 'CocoCaptionDataset'
+data_root = 'data/coco/'
+
+# Example to use different file client
+# Method 1: simply set the data root and let the file I/O module
+# automatically infer from prefix (not support LMDB and Memcache yet)
+
+# data_root = 's3://openmmlab/datasets/detection/coco/'
+
+# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6
+# backend_args = dict(
+# backend='petrel',
+# path_mapping=dict({
+# './data/': 's3://openmmlab/datasets/detection/',
+# 'data/': 's3://openmmlab/datasets/detection/'
+# }))
+backend_args = None
+
+test_pipeline = [
+ dict(
+ type='LoadImageFromFile',
+ imdecode_backend='pillow',
+ backend_args=backend_args),
+ dict(
+ type='Resize',
+ scale=(224, 224),
+ interpolation='bicubic',
+ backend='pillow'),
+ dict(type='PackInputs', meta_keys=['image_id']),
+]
+
+# ann_file download from
+# train dataset: https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_train.json # noqa
+# val dataset: https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_val.json # noqa
+# test dataset: https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_test.json # noqa
+# val evaluator: https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_val_gt.json # noqa
+# test evaluator: https://storage.googleapis.com/sfr-vision-language-research/datasets/coco_karpathy_test_gt.json # noqa
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='annotations/coco_karpathy_val.json',
+ pipeline=test_pipeline,
+ ))
+
+val_evaluator = dict(
+ type='COCOCaptionMetric',
+ ann_file=data_root + 'annotations/coco_karpathy_val_gt.json',
+)
+
+# # If you want standard test, please manually configure the test dataset
+test_dataloader = val_dataloader
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/coco_panoptic.py b/configs/_base_/datasets/coco_panoptic.py
index 2d75660f4b4..0b95b619e68 100644
--- a/configs/_base_/datasets/coco_panoptic.py
+++ b/configs/_base_/datasets/coco_panoptic.py
@@ -1,12 +1,12 @@
# dataset settings
dataset_type = 'CocoPanopticDataset'
-# data_root = 'data/coco/'
+data_root = 'data/coco/'
# Example to use different file client
# Method 1: simply set the data root and let the file I/O module
# automatically infer from prefix (not support LMDB and Memcache yet)
-data_root = 's3://openmmlab/datasets/detection/coco/'
+# data_root = 's3://openmmlab/datasets/detection/coco/'
# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6
# backend_args = dict(
diff --git a/configs/_base_/datasets/coco_semantic.py b/configs/_base_/datasets/coco_semantic.py
new file mode 100644
index 00000000000..944bbbaeaeb
--- /dev/null
+++ b/configs/_base_/datasets/coco_semantic.py
@@ -0,0 +1,78 @@
+# dataset settings
+dataset_type = 'CocoSegDataset'
+data_root = 'data/coco/'
+
+# Example to use different file client
+# Method 1: simply set the data root and let the file I/O module
+# automatically infer from prefix (not support LMDB and Memcache yet)
+
+# data_root = 's3://openmmlab/datasets/detection/coco/'
+
+# Method 2: Use `backend_args`, `file_client_args` in versions before 3.0.0rc6
+# backend_args = dict(
+# backend='petrel',
+# path_mapping=dict({
+# './data/': 's3://openmmlab/datasets/detection/',
+# 'data/': 's3://openmmlab/datasets/detection/'
+# }))
+backend_args = None
+
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(
+ type='LoadAnnotations',
+ with_bbox=False,
+ with_label=False,
+ with_seg=True),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(
+ type='LoadAnnotations',
+ with_bbox=False,
+ with_label=False,
+ with_seg=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_path', 'ori_shape', 'img_shape', 'scale_factor'))
+]
+
+# For stuffthingmaps_semseg, please refer to
+# `docs/en/user_guides/dataset_prepare.md`
+train_dataloader = dict(
+ batch_size=2,
+ num_workers=2,
+ persistent_workers=True,
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ batch_sampler=dict(type='AspectRatioBatchSampler'),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(
+ img_path='train2017/',
+ seg_map_path='stuffthingmaps_semseg/train2017/'),
+ pipeline=train_pipeline))
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(
+ img_path='val2017/',
+ seg_map_path='stuffthingmaps_semseg/val2017/'),
+ pipeline=test_pipeline))
+
+test_dataloader = val_dataloader
+
+val_evaluator = dict(type='SemSegMetric', iou_metrics=['mIoU'])
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/dsdl.py b/configs/_base_/datasets/dsdl.py
new file mode 100644
index 00000000000..1f19e5e498b
--- /dev/null
+++ b/configs/_base_/datasets/dsdl.py
@@ -0,0 +1,62 @@
+dataset_type = 'DSDLDetDataset'
+data_root = 'path to dataset folder'
+train_ann = 'path to train yaml file'
+val_ann = 'path to val yaml file'
+
+backend_args = None
+# backend_args = dict(
+# backend='petrel',
+# path_mapping=dict({
+# './data/': "s3://open_data/",
+# 'data/': "s3://open_data/"
+# }))
+
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ # If you don't have a gt annotation, delete the pipeline
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'instances'))
+]
+
+train_dataloader = dict(
+ batch_size=2,
+ num_workers=2,
+ persistent_workers=True,
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ batch_sampler=dict(type='AspectRatioBatchSampler'),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file=train_ann,
+ filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline))
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file=val_ann,
+ test_mode=True,
+ pipeline=test_pipeline))
+
+test_dataloader = val_dataloader
+
+val_evaluator = dict(type='CocoMetric', metric='bbox')
+# val_evaluator = dict(type='VOCMetric', metric='mAP', eval_mode='11points')
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/isaid_instance.py b/configs/_base_/datasets/isaid_instance.py
new file mode 100644
index 00000000000..09ddcab02bd
--- /dev/null
+++ b/configs/_base_/datasets/isaid_instance.py
@@ -0,0 +1,59 @@
+# dataset settings
+dataset_type = 'iSAIDDataset'
+data_root = 'data/iSAID/'
+backend_args = None
+
+# Please see `projects/iSAID/README.md` for data preparation
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadAnnotations', with_bbox=True, with_mask=True),
+ dict(type='Resize', scale=(800, 800), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(800, 800), keep_ratio=True),
+ dict(type='LoadAnnotations', with_bbox=True, with_mask=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor'))
+]
+train_dataloader = dict(
+ batch_size=2,
+ num_workers=2,
+ persistent_workers=True,
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ batch_sampler=dict(type='AspectRatioBatchSampler'),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='train/instancesonly_filtered_train.json',
+ data_prefix=dict(img='train/images/'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ pipeline=train_pipeline,
+ backend_args=backend_args))
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='val/instancesonly_filtered_val.json',
+ data_prefix=dict(img='val/images/'),
+ test_mode=True,
+ pipeline=test_pipeline,
+ backend_args=backend_args))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(
+ type='CocoMetric',
+ ann_file=data_root + 'val/instancesonly_filtered_val.json',
+ metric=['bbox', 'segm'],
+ format_only=False,
+ backend_args=backend_args)
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/mot_challenge.py b/configs/_base_/datasets/mot_challenge.py
new file mode 100644
index 00000000000..ce2828ef70a
--- /dev/null
+++ b/configs/_base_/datasets/mot_challenge.py
@@ -0,0 +1,90 @@
+# dataset settings
+dataset_type = 'MOTChallengeDataset'
+data_root = 'data/MOT17/'
+img_scale = (1088, 1088)
+
+backend_args = None
+# data pipeline
+train_pipeline = [
+ dict(
+ type='UniformRefFrameSample',
+ num_ref_imgs=1,
+ frame_range=10,
+ filter_key_img=True),
+ dict(
+ type='TransformBroadcaster',
+ share_random_params=True,
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadTrackAnnotations'),
+ dict(
+ type='RandomResize',
+ scale=img_scale,
+ ratio_range=(0.8, 1.2),
+ keep_ratio=True,
+ clip_object_border=False),
+ dict(type='PhotoMetricDistortion')
+ ]),
+ dict(
+ type='TransformBroadcaster',
+ # different cropped positions for different frames
+ share_random_params=False,
+ transforms=[
+ dict(
+ type='RandomCrop', crop_size=img_scale, bbox_clip_border=False)
+ ]),
+ dict(
+ type='TransformBroadcaster',
+ share_random_params=True,
+ transforms=[
+ dict(type='RandomFlip', prob=0.5),
+ ]),
+ dict(type='PackTrackInputs')
+]
+
+test_pipeline = [
+ dict(
+ type='TransformBroadcaster',
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=img_scale, keep_ratio=True),
+ dict(type='LoadTrackAnnotations')
+ ]),
+ dict(type='PackTrackInputs')
+]
+
+# dataloader
+train_dataloader = dict(
+ batch_size=2,
+ num_workers=2,
+ persistent_workers=True,
+ sampler=dict(type='TrackImgSampler'), # image-based sampling
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ visibility_thr=-1,
+ ann_file='annotations/half-train_cocoformat.json',
+ data_prefix=dict(img_path='train'),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=train_pipeline))
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ # Now we support two ways to test, image_based and video_based
+ # if you want to use video_based sampling, you can use as follows
+ # sampler=dict(type='DefaultSampler', shuffle=False, round_up=False),
+ sampler=dict(type='TrackImgSampler'), # image-based sampling
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='annotations/half-val_cocoformat.json',
+ data_prefix=dict(img_path='train'),
+ test_mode=True,
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+# evaluator
+val_evaluator = dict(
+ type='MOTChallengeMetric', metric=['HOTA', 'CLEAR', 'Identity'])
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/mot_challenge_det.py b/configs/_base_/datasets/mot_challenge_det.py
new file mode 100644
index 00000000000..a988572c383
--- /dev/null
+++ b/configs/_base_/datasets/mot_challenge_det.py
@@ -0,0 +1,66 @@
+# dataset settings
+dataset_type = 'CocoDataset'
+data_root = 'data/MOT17/'
+
+backend_args = None
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args, to_float32=True),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='RandomResize',
+ scale=(1088, 1088),
+ ratio_range=(0.8, 1.2),
+ keep_ratio=True,
+ clip_object_border=False),
+ dict(type='PhotoMetricDistortion'),
+ dict(type='RandomCrop', crop_size=(1088, 1088), bbox_clip_border=False),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1088, 1088), keep_ratio=True),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor'))
+]
+
+train_dataloader = dict(
+ batch_size=2,
+ num_workers=2,
+ persistent_workers=True,
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ batch_sampler=dict(type='AspectRatioBatchSampler'),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='annotations/half-train_cocoformat.json',
+ data_prefix=dict(img='train/'),
+ metainfo=dict(classes=('pedestrian', )),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ pipeline=train_pipeline))
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='annotations/half-val_cocoformat.json',
+ data_prefix=dict(img='train/'),
+ metainfo=dict(classes=('pedestrian', )),
+ test_mode=True,
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(
+ type='CocoMetric',
+ ann_file=data_root + 'annotations/half-val_cocoformat.json',
+ metric='bbox',
+ format_only=False)
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/mot_challenge_reid.py b/configs/_base_/datasets/mot_challenge_reid.py
new file mode 100644
index 00000000000..57a95b531f3
--- /dev/null
+++ b/configs/_base_/datasets/mot_challenge_reid.py
@@ -0,0 +1,61 @@
+# dataset settings
+dataset_type = 'ReIDDataset'
+data_root = 'data/MOT17/'
+
+backend_args = None
+# data pipeline
+train_pipeline = [
+ dict(
+ type='TransformBroadcaster',
+ share_random_params=False,
+ transforms=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=backend_args,
+ to_float32=True),
+ dict(
+ type='Resize',
+ scale=(128, 256),
+ keep_ratio=False,
+ clip_object_border=False),
+ dict(type='RandomFlip', prob=0.5, direction='horizontal'),
+ ]),
+ dict(type='PackReIDInputs', meta_keys=('flip', 'flip_direction'))
+]
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args, to_float32=True),
+ dict(type='Resize', scale=(128, 256), keep_ratio=False),
+ dict(type='PackReIDInputs')
+]
+
+# dataloader
+train_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ triplet_sampler=dict(num_ids=8, ins_per_id=4),
+ data_prefix=dict(img_path='reid/imgs'),
+ ann_file='reid/meta/train_80.txt',
+ pipeline=train_pipeline))
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ triplet_sampler=None,
+ data_prefix=dict(img_path='reid/imgs'),
+ ann_file='reid/meta/val_20.txt',
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+# evaluator
+val_evaluator = dict(type='ReIDMetrics', metric=['mAP', 'CMC'])
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/refcoco+.py b/configs/_base_/datasets/refcoco+.py
new file mode 100644
index 00000000000..ae0278ddf6c
--- /dev/null
+++ b/configs/_base_/datasets/refcoco+.py
@@ -0,0 +1,55 @@
+# dataset settings
+dataset_type = 'RefCocoDataset'
+data_root = 'data/coco/'
+
+backend_args = None
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(
+ type='LoadAnnotations',
+ with_mask=True,
+ with_bbox=False,
+ with_seg=False,
+ with_label=False),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'gt_masks', 'text'))
+]
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(img_path='train2014/'),
+ ann_file='refcoco+/instances.json',
+ split_file='refcoco+/refs(unc).p',
+ split='val',
+ text_mode='select_first',
+ pipeline=test_pipeline))
+
+test_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(img_path='train2014/'),
+ ann_file='refcoco+/instances.json',
+ split_file='refcoco+/refs(unc).p',
+ split='testA', # or 'testB'
+ text_mode='select_first',
+ pipeline=test_pipeline))
+
+val_evaluator = dict(type='RefSegMetric', metric=['cIoU', 'mIoU'])
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/refcoco.py b/configs/_base_/datasets/refcoco.py
new file mode 100644
index 00000000000..7b6caefa9a4
--- /dev/null
+++ b/configs/_base_/datasets/refcoco.py
@@ -0,0 +1,55 @@
+# dataset settings
+dataset_type = 'RefCocoDataset'
+data_root = 'data/coco/'
+
+backend_args = None
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(
+ type='LoadAnnotations',
+ with_mask=True,
+ with_bbox=False,
+ with_seg=False,
+ with_label=False),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'gt_masks', 'text'))
+]
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(img_path='train2014/'),
+ ann_file='refcoco/instances.json',
+ split_file='refcoco/refs(unc).p',
+ split='val',
+ text_mode='select_first',
+ pipeline=test_pipeline))
+
+test_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(img_path='train2014/'),
+ ann_file='refcoco/instances.json',
+ split_file='refcoco/refs(unc).p',
+ split='testA', # or 'testB'
+ text_mode='select_first',
+ pipeline=test_pipeline))
+
+val_evaluator = dict(type='RefSegMetric', metric=['cIoU', 'mIoU'])
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/refcocog.py b/configs/_base_/datasets/refcocog.py
new file mode 100644
index 00000000000..19dbeef1cde
--- /dev/null
+++ b/configs/_base_/datasets/refcocog.py
@@ -0,0 +1,55 @@
+# dataset settings
+dataset_type = 'RefCocoDataset'
+data_root = 'data/coco/'
+
+backend_args = None
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(
+ type='LoadAnnotations',
+ with_mask=True,
+ with_bbox=False,
+ with_seg=False,
+ with_label=False),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'gt_masks', 'text'))
+]
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(img_path='train2014/'),
+ ann_file='refcocog/instances.json',
+ split_file='refcocog/refs(umd).p',
+ split='val',
+ text_mode='select_first',
+ pipeline=test_pipeline))
+
+test_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ data_prefix=dict(img_path='train2014/'),
+ ann_file='refcocog/instances.json',
+ split_file='refcocog/refs(umd).p',
+ split='test',
+ text_mode='select_first',
+ pipeline=test_pipeline))
+
+val_evaluator = dict(type='RefSegMetric', metric=['cIoU', 'mIoU'])
+test_evaluator = val_evaluator
diff --git a/configs/_base_/datasets/youtube_vis.py b/configs/_base_/datasets/youtube_vis.py
new file mode 100644
index 00000000000..ece07cc3879
--- /dev/null
+++ b/configs/_base_/datasets/youtube_vis.py
@@ -0,0 +1,66 @@
+dataset_type = 'YouTubeVISDataset'
+data_root = 'data/youtube_vis_2019/'
+dataset_version = data_root[-5:-1] # 2019 or 2021
+
+backend_args = None
+
+# dataset settings
+train_pipeline = [
+ dict(
+ type='UniformRefFrameSample',
+ num_ref_imgs=1,
+ frame_range=100,
+ filter_key_img=True),
+ dict(
+ type='TransformBroadcaster',
+ share_random_params=True,
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadTrackAnnotations', with_mask=True),
+ dict(type='Resize', scale=(640, 360), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ ]),
+ dict(type='PackTrackInputs')
+]
+
+test_pipeline = [
+ dict(
+ type='TransformBroadcaster',
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(640, 360), keep_ratio=True),
+ dict(type='LoadTrackAnnotations', with_mask=True),
+ ]),
+ dict(type='PackTrackInputs')
+]
+
+# dataloader
+train_dataloader = dict(
+ batch_size=2,
+ num_workers=2,
+ persistent_workers=True,
+ # sampler=dict(type='TrackImgSampler'), # image-based sampling
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ batch_sampler=dict(type='TrackAspectRatioBatchSampler'),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2019_train.json',
+ data_prefix=dict(img_path='train/JPEGImages'),
+ pipeline=train_pipeline))
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ drop_last=False,
+ sampler=dict(type='DefaultSampler', shuffle=False, round_up=False),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2019_valid.json',
+ data_prefix=dict(img_path='valid/JPEGImages'),
+ test_mode=True,
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
diff --git a/configs/bytetrack/README.md b/configs/bytetrack/README.md
new file mode 100644
index 00000000000..30b96f07cec
--- /dev/null
+++ b/configs/bytetrack/README.md
@@ -0,0 +1,132 @@
+# ByteTrack: Multi-Object Tracking by Associating Every Detection Box
+
+## Abstract
+
+
+
+Multi-object tracking (MOT) aims at estimating bounding boxes and identities of objects in videos. Most methods obtain identities by associating detection boxes whose scores are higher than a threshold. The objects with low detection scores, e.g. occluded objects, are simply thrown away, which brings non-negligible true object missing and fragmented trajectories. To solve this problem, we present a simple, effective and generic association method, tracking by associating every detection box instead of only the high score ones. For the low score detection boxes, we utilize their similarities with tracklets to recover true objects and filter out the background detections. When applied to 9 different state-of-the-art trackers, our method achieves consistent improvement on IDF1 score ranging from 1 to 10 points. To put forwards the state-of-the-art performance of MOT, we design a simple and strong tracker, named ByteTrack. For the first time, we achieve 80.3 MOTA, 77.3 IDF1 and 63.1 HOTA on the test set of MOT17 with 30 FPS running speed on a single V100 GPU.
+
+
+
+
+
+
+
+## Citation
+
+
+
+```latex
+@inproceedings{zhang2021bytetrack,
+ title={ByteTrack: Multi-Object Tracking by Associating Every Detection Box},
+ author={Zhang, Yifu and Sun, Peize and Jiang, Yi and Yu, Dongdong and Yuan, Zehuan and Luo, Ping and Liu, Wenyu and Wang, Xinggang},
+ journal={arXiv preprint arXiv:2110.06864},
+ year={2021}
+}
+```
+
+## Results and models on MOT17
+
+Please note that the performance on `MOT17-half-val` is comparable with the performance reported in the manuscript, while the performance on `MOT17-test` is lower than the performance reported in the manuscript.
+
+The reason is that ByteTrack tunes customized hyper-parameters (e.g., image resolution and the high threshold of detection score) for each video in `MOT17-test` set, while we use unified parameters.
+
+| Method | Detector | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :-------: | :------: | :---------------------------: | :------------: | :----: | :------------: | :--: | :--: | :--: | :---: | :---: | :---: | :-------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| ByteTrack | YOLOX-X | CrowdHuman + MOT17-half-train | MOT17-half-val | N | - | 67.5 | 78.6 | 78.5 | 12852 | 21060 | 672 | [config](bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py) | [model](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot17-private-half_20211218_205500-1985c9f0.pth) \| [log](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot17-private-half_20211218_205500.log.json) |
+| ByteTrack | YOLOX-X | CrowdHuman + MOT17-half-train | MOT17-test | N | - | 61.7 | 78.1 | 74.8 | 36705 | 85032 | 2049 | [config](bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17test.py) | [model](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot17-private-half_20211218_205500-1985c9f0.pth) \| [log](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot17-private-half_20211218_205500.log.json) |
+
+## Results and models on MOT20
+
+Since there are only 4 videos in `MOT20-train`, ByteTrack is validated on `MOT17-train` rather than `MOT20-half-train`.
+
+Please note that the MOTA on `MOT20-test` is slightly lower than that reported in the manuscript, because we don't tune the threshold for each video.
+
+| Method | Detector | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :-------: | :------: | :----------------------: | :---------: | :----: | :------------: | :--: | :--: | :--: | :----: | :----: | :---: | :------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| ByteTrack | YOLOX-X | CrowdHuman + MOT20-train | MOT17-train | N | - | 57.3 | 64.9 | 71.8 | 33,747 | 83,385 | 1,263 | [config](bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py) | [model](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot20-private_20220506_101040-9ce38a60.pth) \| [log](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot20-private_20220506_101040.log.json) |
+| ByteTrack | YOLOX-X | CrowdHuman + MOT20-train | MOT20-test | N | - | 61.5 | 77.0 | 75.4 | 33,083 | 84,433 | 1,345 | [config](bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py) | [model](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot20-private_20220506_101040-9ce38a60.pth) \| [log](https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot20-private_20220506_101040.log.json) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+Due to the influence of parameters such as learning rate in default configuration file, we recommend using 8 GPUs for training in order to reproduce accuracy. You can use the following command to start the training.
+
+**3.1 Joint training and tracking**
+
+Some algorithm like ByteTrack, OCSORT don't need reid model, so we provide joint training and tracking for convenient.
+
+```shell
+# Training Bytetrack on crowdhuman and mot17-half-train dataset with following command
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs
+bash tools/dist_train.sh configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 8
+```
+
+**3.2 Separate training and tracking**
+
+Of course, we provide train detector independently like SORT, DeepSORT, StrongSORT. Then use this detector to track.
+
+```shell
+# Training Bytetrack on crowdhuman and mot17-half-train dataset with following command
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs
+bash tools/dist_train.sh configs/bytetrack/yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 8
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 4. Testing and evaluation
+
+### 4.1 Example on MOTxx-halfval dataset
+
+**4.1.1 use joint trained detector to evaluating and testing**
+
+```shell
+bash tools/dist_test_tracking.sh configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 8 --checkpoint ${CHECKPOINT_FILE}
+```
+
+**4.1.2 use separate trained detector to evaluating and testing**
+
+```shell
+bash tools/dist_test_tracking.sh configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 8 --detector ${CHECKPOINT_FILE}
+```
+
+**4.1.3 use video_baesd to evaluating and testing**
+
+we also provide two_ways(img_based or video_based) to evaluating and testing.
+if you want to use video_based to evaluating and testing, you can modify config as follows
+
+```
+val_dataloader = dict(
+ sampler=dict(type='DefaultSampler', shuffle=False, round_up=False))
+```
+
+#### 4.2 Example on MOTxx-test dataset
+
+If you want to get the results of the [MOT Challenge](https://motchallenge.net/) test set, please use the following command to generate result files that can be used for submission. It will be stored in `./mot_17_test_res`, you can modify the saved path in `test_evaluator` of the config.
+
+```shell
+bash tools/dist_test_tracking.sh configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17test.py 8 --checkpoint ${CHECKPOINT_FILE}
+```
+
+If you want to know about more detailed usage of `test_tracking.py/dist_test_tracking.sh/slurm_test_tracking.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 5.Inference
+
+Use a single GPU to predict a video and save it as a video.
+
+```shell
+python demo/mot_demo.py demo/demo_mot.mp4 configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py --checkpoint ${CHECKPOINT_FILE} --out mot.mp4
+```
+
+If you want to know about more detailed usage of `mot_demo.py`, please refer to this [document](../../docs/en/user_guides/tracking_inference.md).
diff --git a/configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py b/configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..24b3f784194
--- /dev/null
+++ b/configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,249 @@
+_base_ = ['../yolox/yolox_x_8xb8-300e_coco.py']
+
+dataset_type = 'MOTChallengeDataset'
+data_root = 'data/MOT17/'
+
+img_scale = (1440, 800) # weight, height
+batch_size = 4
+
+detector = _base_.model
+detector.pop('data_preprocessor')
+detector.bbox_head.update(dict(num_classes=1))
+detector.test_cfg.nms.update(dict(iou_threshold=0.7))
+detector['init_cfg'] = dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_x_8x8_300e_coco/yolox_x_8x8_300e_coco_20211126_140254-1ef88d67.pth' # noqa: E501
+)
+del _base_.model
+
+model = dict(
+ type='ByteTrack',
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ pad_size_divisor=32,
+ # in bytetrack, we provide joint train detector and evaluate tracking
+ # performance, use_det_processor means use independent detector
+ # data_preprocessor. of course, you can train detector independently
+ # like strongsort
+ use_det_processor=True,
+ batch_augments=[
+ dict(
+ type='BatchSyncRandomResize',
+ random_size_range=(576, 1024),
+ size_divisor=32,
+ interval=10)
+ ]),
+ detector=detector,
+ tracker=dict(
+ type='ByteTracker',
+ motion=dict(type='KalmanFilter'),
+ obj_score_thrs=dict(high=0.6, low=0.1),
+ init_track_thr=0.7,
+ weight_iou_with_det_scores=True,
+ match_iou_thrs=dict(high=0.1, low=0.5, tentative=0.3),
+ num_frames_retain=30))
+
+train_pipeline = [
+ dict(
+ type='Mosaic',
+ img_scale=img_scale,
+ pad_val=114.0,
+ bbox_clip_border=False),
+ dict(
+ type='RandomAffine',
+ scaling_ratio_range=(0.1, 2),
+ border=(-img_scale[0] // 2, -img_scale[1] // 2),
+ bbox_clip_border=False),
+ dict(
+ type='MixUp',
+ img_scale=img_scale,
+ ratio_range=(0.8, 1.6),
+ pad_val=114.0,
+ bbox_clip_border=False),
+ dict(type='YOLOXHSVRandomAug'),
+ dict(type='RandomFlip', prob=0.5),
+ dict(
+ type='Resize',
+ scale=img_scale,
+ keep_ratio=True,
+ clip_object_border=False),
+ dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='FilterAnnotations', min_gt_bbox_wh=(1, 1), keep_empty=False),
+ dict(type='PackDetInputs')
+]
+
+test_pipeline = [
+ dict(
+ type='TransformBroadcaster',
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
+ dict(type='Resize', scale=img_scale, keep_ratio=True),
+ dict(
+ type='Pad',
+ size_divisor=32,
+ pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='LoadTrackAnnotations'),
+ ]),
+ dict(type='PackTrackInputs')
+]
+train_dataloader = dict(
+ _delete_=True,
+ batch_size=batch_size,
+ num_workers=4,
+ persistent_workers=True,
+ pin_memory=True,
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ dataset=dict(
+ type='MultiImageMixDataset',
+ dataset=dict(
+ type='ConcatDataset',
+ datasets=[
+ dict(
+ type='CocoDataset',
+ data_root='data/MOT17',
+ ann_file='annotations/half-train_cocoformat.json',
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_train.json',
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_val.json',
+ data_prefix=dict(img='val'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ ]),
+ pipeline=train_pipeline))
+
+val_dataloader = dict(
+ _delete_=True,
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ pin_memory=True,
+ drop_last=False,
+ # video_based
+ # sampler=dict(type='DefaultSampler', shuffle=False, round_up=False),
+ sampler=dict(type='TrackImgSampler'), # image_based
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ ann_file='annotations/half-val_cocoformat.json',
+ data_prefix=dict(img_path='train'),
+ test_mode=True,
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+# optimizer
+# default 8 gpu
+base_lr = 0.001 / 8 * batch_size
+optim_wrapper = dict(optimizer=dict(lr=base_lr))
+
+# some hyper parameters
+# training settings
+max_epochs = 80
+num_last_epochs = 10
+interval = 5
+
+train_cfg = dict(
+ type='EpochBasedTrainLoop',
+ max_epochs=max_epochs,
+ val_begin=70,
+ val_interval=1)
+
+# learning policy
+param_scheduler = [
+ dict(
+ # use quadratic formula to warm up 1 epochs
+ type='QuadraticWarmupLR',
+ by_epoch=True,
+ begin=0,
+ end=1,
+ convert_to_iter_based=True),
+ dict(
+ # use cosine lr from 1 to 70 epoch
+ type='CosineAnnealingLR',
+ eta_min=base_lr * 0.05,
+ begin=1,
+ T_max=max_epochs - num_last_epochs,
+ end=max_epochs - num_last_epochs,
+ by_epoch=True,
+ convert_to_iter_based=True),
+ dict(
+ # use fixed lr during last 10 epochs
+ type='ConstantLR',
+ by_epoch=True,
+ factor=1,
+ begin=max_epochs - num_last_epochs,
+ end=max_epochs,
+ )
+]
+
+custom_hooks = [
+ dict(
+ type='YOLOXModeSwitchHook',
+ num_last_epochs=num_last_epochs,
+ priority=48),
+ dict(type='SyncNormHook', priority=48),
+ dict(
+ type='EMAHook',
+ ema_type='ExpMomentumEMA',
+ momentum=0.0001,
+ update_buffers=True,
+ priority=49)
+]
+
+default_hooks = dict(
+ checkpoint=dict(
+ _delete_=True, type='CheckpointHook', interval=1, max_keep_ckpts=10),
+ visualization=dict(type='TrackVisualizationHook', draw=False))
+
+vis_backends = [dict(type='LocalVisBackend')]
+visualizer = dict(
+ type='TrackLocalVisualizer', vis_backends=vis_backends, name='visualizer')
+
+# evaluator
+val_evaluator = dict(
+ _delete_=True,
+ type='MOTChallengeMetric',
+ metric=['HOTA', 'CLEAR', 'Identity'],
+ postprocess_tracklet_cfg=[
+ dict(type='InterpolateTracklets', min_num_frames=5, max_num_frames=20)
+ ])
+test_evaluator = val_evaluator
+
+# NOTE: `auto_scale_lr` is for automatically scaling LR,
+# USER SHOULD NOT CHANGE ITS VALUES.
+# base_batch_size = (8 GPUs) x (4 samples per GPU)
+auto_scale_lr = dict(base_batch_size=32)
+
+del detector
+del _base_.tta_model
+del _base_.tta_pipeline
+del _base_.train_dataset
diff --git a/configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py b/configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py
new file mode 100644
index 00000000000..9202f5fbda2
--- /dev/null
+++ b/configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py
@@ -0,0 +1,127 @@
+_base_ = [
+ './bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_'
+ 'test-mot17halfval.py'
+]
+
+dataset_type = 'MOTChallengeDataset'
+
+img_scale = (1600, 896) # weight, height
+
+model = dict(
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ use_det_processor=True,
+ pad_size_divisor=32,
+ batch_augments=[
+ dict(type='BatchSyncRandomResize', random_size_range=(640, 1152))
+ ]),
+ tracker=dict(
+ weight_iou_with_det_scores=False,
+ match_iou_thrs=dict(high=0.3),
+ ))
+
+train_pipeline = [
+ dict(
+ type='Mosaic',
+ img_scale=img_scale,
+ pad_val=114.0,
+ bbox_clip_border=True),
+ dict(
+ type='RandomAffine',
+ scaling_ratio_range=(0.1, 2),
+ border=(-img_scale[0] // 2, -img_scale[1] // 2),
+ bbox_clip_border=True),
+ dict(
+ type='MixUp',
+ img_scale=img_scale,
+ ratio_range=(0.8, 1.6),
+ pad_val=114.0,
+ bbox_clip_border=True),
+ dict(type='YOLOXHSVRandomAug'),
+ dict(type='RandomFlip', prob=0.5),
+ dict(
+ type='Resize',
+ scale=img_scale,
+ keep_ratio=True,
+ clip_object_border=True),
+ dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='FilterAnnotations', min_gt_bbox_wh=(1, 1), keep_empty=False),
+ dict(type='PackDetInputs')
+]
+
+test_pipeline = [
+ dict(
+ type='TransformBroadcaster',
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
+ dict(type='Resize', scale=img_scale, keep_ratio=True),
+ dict(
+ type='Pad',
+ size_divisor=32,
+ pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='LoadTrackAnnotations'),
+ ]),
+ dict(type='PackTrackInputs')
+]
+train_dataloader = dict(
+ dataset=dict(
+ type='MultiImageMixDataset',
+ dataset=dict(
+ type='ConcatDataset',
+ datasets=[
+ dict(
+ type='CocoDataset',
+ data_root='data/MOT20',
+ ann_file='annotations/train_cocoformat.json',
+ # TODO: mmdet use img as key, but img_path is needed
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_train.json',
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_val.json',
+ data_prefix=dict(img='val'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ ]),
+ pipeline=train_pipeline))
+val_dataloader = dict(
+ dataset=dict(ann_file='annotations/train_cocoformat.json'))
+
+test_dataloader = dict(
+ dataset=dict(
+ data_root='data/MOT20', ann_file='annotations/test_cocoformat.json'))
+
+test_evaluator = dict(
+ type='MOTChallengeMetrics',
+ postprocess_tracklet_cfg=[
+ dict(type='InterpolateTracklets', min_num_frames=5, max_num_frames=20)
+ ],
+ format_only=True,
+ outfile_prefix='./mot_20_test_res')
diff --git a/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py b/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..9c2119203a4
--- /dev/null
+++ b/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,9 @@
+_base_ = [
+ './bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_'
+ 'test-mot17halfval.py'
+]
+
+# fp16 settings
+optim_wrapper = dict(type='AmpOptimWrapper', loss_scale='dynamic')
+val_cfg = dict(type='ValLoop', fp16=True)
+test_cfg = dict(type='TestLoop', fp16=True)
diff --git a/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17test.py b/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17test.py
new file mode 100644
index 00000000000..3f4427c18bf
--- /dev/null
+++ b/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17test.py
@@ -0,0 +1,17 @@
+_base_ = [
+ './bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-'
+ 'mot17halftrain_test-mot17halfval.py'
+]
+
+test_dataloader = dict(
+ dataset=dict(
+ data_root='data/MOT17/',
+ ann_file='annotations/test_cocoformat.json',
+ data_prefix=dict(img_path='test')))
+test_evaluator = dict(
+ type='MOTChallengeMetrics',
+ postprocess_tracklet_cfg=[
+ dict(type='InterpolateTracklets', min_num_frames=5, max_num_frames=20)
+ ],
+ format_only=True,
+ outfile_prefix='./mot_17_test_res')
diff --git a/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py b/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py
new file mode 100644
index 00000000000..10169997292
--- /dev/null
+++ b/configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py
@@ -0,0 +1,8 @@
+_base_ = [
+ './bytetrack_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py'
+]
+
+# fp16 settings
+optim_wrapper = dict(type='AmpOptimWrapper', loss_scale='dynamic')
+val_cfg = dict(type='ValLoop', fp16=True)
+test_cfg = dict(type='TestLoop', fp16=True)
diff --git a/configs/bytetrack/metafile.yml b/configs/bytetrack/metafile.yml
new file mode 100644
index 00000000000..8ed638cf6dd
--- /dev/null
+++ b/configs/bytetrack/metafile.yml
@@ -0,0 +1,53 @@
+Collections:
+ - Name: ByteTrack
+ Metadata:
+ Training Techniques:
+ - SGD with Momentum
+ Training Resources: 8x V100 GPUs
+ Architecture:
+ - YOLOX
+ Paper:
+ URL: https://arxiv.org/abs/2110.06864
+ Title: ByteTrack Multi-Object Tracking by Associating Every Detection Box
+ README: configs/bytetrack/README.md
+
+Models:
+ - Name: bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval
+ In Collection: ByteTrack
+ Config: configs/bytetrack/bytetrack_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
+ Metadata:
+ Training Data: CrowdHuman + MOT17-half-train
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT17-half-val
+ Metrics:
+ HOTA: 67.5
+ MOTA: 78.6
+ IDF1: 78.5
+ Weights: https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot17-private-half_20211218_205500-1985c9f0.pth
+
+ - Name: bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17test
+ In Collection: ByteTrack
+ Config: configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17test.py
+ Metadata:
+ Training Data: CrowdHuman + MOT17-half-train
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT17-test
+ Metrics:
+ MOTA: 78.1
+ IDF1: 74.8
+ Weights: https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot17-private-half_20211218_205500-1985c9f0.pth
+
+ - Name: bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test
+ In Collection: ByteTrack
+ Config: configs/bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py
+ Metadata:
+ Training Data: CrowdHuman + MOT20-train
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT20-test
+ Metrics:
+ MOTA: 77.0
+ IDF1: 75.4
+ Weights: https://download.openmmlab.com/mmtracking/mot/bytetrack/bytetrack_yolox_x/bytetrack_yolox_x_crowdhuman_mot20-private_20220506_101040-9ce38a60.pth
diff --git a/configs/bytetrack/yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py b/configs/bytetrack/yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..8fc3acd4872
--- /dev/null
+++ b/configs/bytetrack/yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,6 @@
+_base_ = [
+ '../strongsort/yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py' # noqa: E501
+]
+
+# fp16 settings
+optim_wrapper = dict(type='AmpOptimWrapper', loss_scale='dynamic')
diff --git a/configs/centernet/README.md b/configs/centernet/README.md
index d4d83b61119..81e229c62f7 100644
--- a/configs/centernet/README.md
+++ b/configs/centernet/README.md
@@ -30,9 +30,9 @@ Note:
## CenterNet Update
-| Backbone | Style | Lr schd | MS train | Mem (GB) | Box AP | Config | Download |
-| :-------: | :---: | :-----: | :------: | :------: | :----: | :------------------------------------------------------: | :----------------------: |
-| ResNet-50 | caffe | 1x | True | 3.3 | 40.2 | [config](./centernet-update_r50-caffe_fpn_ms-1x_coco.py) | [model](<>) \| [log](<>) |
+| Backbone | Style | Lr schd | MS train | Mem (GB) | Box AP | Config | Download |
+| :-------: | :---: | :-----: | :------: | :------: | :----: | :------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| ResNet-50 | caffe | 1x | True | 3.3 | 40.2 | [config](./centernet-update_r50-caffe_fpn_ms-1x_coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/centernet/centernet-update_r50-caffe_fpn_ms-1x_coco/centernet-update_r50-caffe_fpn_ms-1x_coco_20230512_203845-8306baf2.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/centernet/centernet-update_r50-caffe_fpn_ms-1x_coco/centernet-update_r50-caffe_fpn_ms-1x_coco_20230512_203845.log.json) |
CenterNet Update from the paper of [Probabilistic two-stage detection](https://arxiv.org/abs/2103.07461). The author has updated CenterNet to greatly improve performance and convergence speed.
The [Details](https://github.com/xingyizhou/CenterNet2/blob/master/docs/MODEL_ZOO.md) are as follows:
@@ -44,6 +44,8 @@ The [Details](https://github.com/xingyizhou/CenterNet2/blob/master/docs/MODEL_ZO
- Added FPN neck layers, and assigns objects to FPN levels based on a fixed size range.
- Using standard NMS instead of max pooling
+Note: We found that the performance of the r50 model fluctuates greatly and sometimes it does not converge. If the model does not converge, you can try running it again or reduce the learning rate.
+
## Citation
```latex
diff --git a/configs/centernet/metafile.yml b/configs/centernet/metafile.yml
index 13ea6659d3f..496b8ea22df 100644
--- a/configs/centernet/metafile.yml
+++ b/configs/centernet/metafile.yml
@@ -57,3 +57,4 @@ Models:
Dataset: COCO
Metrics:
box AP: 40.2
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/centernet/centernet-update_r50-caffe_fpn_ms-1x_coco/centernet-update_r50-caffe_fpn_ms-1x_coco_20230512_203845-8306baf2.pth
diff --git a/configs/convnext/README.md b/configs/convnext/README.md
index 44b14205c31..8764327dc69 100644
--- a/configs/convnext/README.md
+++ b/configs/convnext/README.md
@@ -20,10 +20,10 @@ The "Roaring 20s" of visual recognition began with the introduction of Vision Tr
**Note**:
-- ConvNeXt backbone needs to install [MMClassification](https://github.com/open-mmlab/mmclassification) first, which has abundant backbones for downstream tasks.
+- ConvNeXt backbone needs to install [MMPreTrain](https://github.com/open-mmlab/mmpretrain) first, which has abundant backbones for downstream tasks.
```shell
-pip install mmcls>=1.0
+pip install mmpretrain
```
- The performance is unstable. `Cascade Mask R-CNN` may fluctuate about 0.2 mAP.
diff --git a/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py b/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py
index 465209d3863..9a5fbedcaa7 100644
--- a/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py
+++ b/configs/convnext/cascade-mask-rcnn_convnext-s-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py
@@ -1,15 +1,15 @@
_base_ = './cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py' # noqa
-# TODO: delete custom_imports after mmcls supports auto import
-# please install mmcls>=1.0
-# import mmcls.models to trigger register_module in mmcls
-custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False)
+# please install mmpretrain
+# import mmpretrain.models to trigger register_module in mmpretrain
+custom_imports = dict(
+ imports=['mmpretrain.models'], allow_failed_imports=False)
checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-small_3rdparty_32xb128-noema_in1k_20220301-303e75e3.pth' # noqa
model = dict(
backbone=dict(
_delete_=True,
- type='mmcls.ConvNeXt',
+ type='mmpretrain.ConvNeXt',
arch='small',
out_indices=[0, 1, 2, 3],
drop_path_rate=0.6,
diff --git a/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py b/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py
index 1e031e90d52..c92f86838c3 100644
--- a/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py
+++ b/configs/convnext/cascade-mask-rcnn_convnext-t-p4-w7_fpn_4conv1fc-giou_amp-ms-crop-3x_coco.py
@@ -4,16 +4,16 @@
'../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]
-# TODO: delete custom_imports after mmcls supports auto import
-# please install mmcls>=1.0
-# import mmcls.models to trigger register_module in mmcls
-custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False)
+# please install mmpretrain
+# import mmpretrain.models to trigger register_module in mmpretrain
+custom_imports = dict(
+ imports=['mmpretrain.models'], allow_failed_imports=False)
checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-tiny_3rdparty_32xb128-noema_in1k_20220301-795e9634.pth' # noqa
model = dict(
backbone=dict(
_delete_=True,
- type='mmcls.ConvNeXt',
+ type='mmpretrain.ConvNeXt',
arch='tiny',
out_indices=[0, 1, 2, 3],
drop_path_rate=0.4,
diff --git a/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py b/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py
index 23d46e289eb..5792b5b5c5a 100644
--- a/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py
+++ b/configs/convnext/mask-rcnn_convnext-t-p4-w7_fpn_amp-ms-crop-3x_coco.py
@@ -4,16 +4,16 @@
'../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]
-# TODO: delete custom_imports after mmcls supports auto import
-# please install mmcls>=1.0
-# import mmcls.models to trigger register_module in mmcls
-custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False)
+# please install mmpretrain
+# import mmpretrain.models to trigger register_module in mmpretrain
+custom_imports = dict(
+ imports=['mmpretrain.models'], allow_failed_imports=False)
checkpoint_file = 'https://download.openmmlab.com/mmclassification/v0/convnext/downstream/convnext-tiny_3rdparty_32xb128-noema_in1k_20220301-795e9634.pth' # noqa
model = dict(
backbone=dict(
_delete_=True,
- type='mmcls.ConvNeXt',
+ type='mmpretrain.ConvNeXt',
arch='tiny',
out_indices=[0, 1, 2, 3],
drop_path_rate=0.4,
diff --git a/configs/deepsort/README.md b/configs/deepsort/README.md
new file mode 100644
index 00000000000..e50ec17eb55
--- /dev/null
+++ b/configs/deepsort/README.md
@@ -0,0 +1,109 @@
+# Simple online and realtime tracking with a deep association metric
+
+## Abstract
+
+
+
+Simple Online and Realtime Tracking (SORT) is a pragmatic approach to multiple object tracking with a focus on simple, effective algorithms. In this paper, we integrate appearance information to improve the performance of SORT. Due to this extension we are able to track objects through longer periods of occlusions, effectively reducing the number of identity switches. In spirit of the original framework we place much of the computational complexity into an offline pre-training stage where we learn a deep association metric on a largescale person re-identification dataset. During online application, we establish measurement-to-track associations using nearest neighbor queries in visual appearance space. Experimental evaluation shows that our extensions reduce the number of identity switches by 45%, achieving overall competitive performance at high frame rates.
+
+
+
+
+
+
+
+## Results and models on MOT17
+
+Currently we do not support training ReID models for DeepSORT.
+We directly use the ReID model from [Tracktor](https://github.com/phil-bergmann/tracking_wo_bnw). These missed features will be supported in the future.
+
+| Method | Detector | ReID | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :------: | :----------------: | :--: | :--------: | :------: | :----: | :------------: | :--: | :--: | :--: | :---: | :---: | :---: | :--------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| DeepSORT | R50-FasterRCNN-FPN | R50 | half-train | half-val | N | 13.8 | 57.0 | 63.7 | 69.5 | 15063 | 40323 | 3276 | [config](deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py) | [detector](https://download.openmmlab.com/mmtracking/mot/faster_rcnn/faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth) [reid](https://download.openmmlab.com/mmtracking/mot/reid/tracktor_reid_r50_iter25245-a452f51f.pth) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+We implement DeepSORT with independent detector and ReID models.
+Note that, due to the influence of parameters such as learning rate in default configuration file,
+we recommend using 8 GPUs for training in order to reproduce accuracy.
+
+You can train the detector as follows.
+
+```shell script
+# Training Faster R-CNN on mot17-half-train dataset with following command.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_train.sh configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 4. Testing and evaluation
+
+### 4.1 Example on MOTxx-halfval dataset
+
+**4.1.1 use separate trained detector and reid model to evaluating and testing**
+
+```shell
+# Example 1: Test on motXX-half-val set.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_test_tracking.sh configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8 --detector ${DETECTOR_CHECKPOINT_PATH} --reid ${REID_CHECKPOINT_PATH}
+```
+
+**4.1.2 use video_baesd to evaluating and testing**
+
+we also provide two_ways(img_based or video_based) to evaluating and testing.
+if you want to use video_based to evaluating and testing, you can modify config as follows
+
+```
+val_dataloader = dict(
+ sampler=dict(type='DefaultSampler', shuffle=False, round_up=False))
+```
+
+### 4.2 Example on MOTxx-test dataset
+
+If you want to get the results of the [MOT Challenge](https://motchallenge.net/) test set,
+please use the following command to generate result files that can be used for submission.
+It will be stored in `./mot_17_test_res`, you can modify the saved path in `test_evaluator` of the config.
+
+```shell script
+# Example 2: Test on motxx-test set
+# The number after config file represents the number of GPUs used
+bash tools/dist_test_tracking.sh configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test 8 --detector ${DETECTOR_CHECKPOINT_PATH} --reid ${REID_CHECKPOINT_PATH}
+```
+
+If you want to know about more detailed usage of `test_tracking.py/dist_test_tracking.sh/slurm_test_tracking.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 5.Inference
+
+Use a single GPU to predict a video and save it as a video.
+
+```shell
+python demo/mot_demo.py demo/demo_mot.mp4 configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test --detector ${DETECTOR_CHECKPOINT_PATH} --reid ${REID_CHECKPOINT_PATH} --out mot.mp4
+```
+
+## Citation
+
+
+
+```latex
+@inproceedings{wojke2017simple,
+ title={Simple online and realtime tracking with a deep association metric},
+ author={Wojke, Nicolai and Bewley, Alex and Paulus, Dietrich},
+ booktitle={2017 IEEE international conference on image processing (ICIP)},
+ pages={3645--3649},
+ year={2017},
+ organization={IEEE}
+}
+```
diff --git a/configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py b/configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..70d3393829b
--- /dev/null
+++ b/configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,85 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py',
+ '../_base_/datasets/mot_challenge.py', '../_base_/default_runtime.py'
+]
+
+default_hooks = dict(
+ logger=dict(type='LoggerHook', interval=1),
+ visualization=dict(type='TrackVisualizationHook', draw=False))
+
+vis_backends = [dict(type='LocalVisBackend')]
+visualizer = dict(
+ type='TrackLocalVisualizer', vis_backends=vis_backends, name='visualizer')
+# custom hooks
+custom_hooks = [
+ # Synchronize model buffers such as running_mean and running_var in BN
+ # at the end of each epoch
+ dict(type='SyncBuffersHook')
+]
+
+detector = _base_.model
+detector.pop('data_preprocessor')
+detector.rpn_head.bbox_coder.update(dict(clip_border=False))
+detector.roi_head.bbox_head.update(dict(num_classes=1))
+detector.roi_head.bbox_head.bbox_coder.update(dict(clip_border=False))
+detector['init_cfg'] = dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmtracking/mot/faster_rcnn/'
+ 'faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth')
+del _base_.model
+
+model = dict(
+ type='DeepSORT',
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ mean=[123.675, 116.28, 103.53],
+ std=[58.395, 57.12, 57.375],
+ bgr_to_rgb=True,
+ pad_size_divisor=32),
+ detector=detector,
+ reid=dict(
+ type='BaseReID',
+ data_preprocessor=dict(type='mmpretrain.ClsDataPreprocessor'),
+ backbone=dict(
+ type='mmpretrain.ResNet',
+ depth=50,
+ num_stages=4,
+ out_indices=(3, ),
+ style='pytorch'),
+ neck=dict(type='GlobalAveragePooling', kernel_size=(8, 4), stride=1),
+ head=dict(
+ type='LinearReIDHead',
+ num_fcs=1,
+ in_channels=2048,
+ fc_channels=1024,
+ out_channels=128,
+ num_classes=380,
+ loss_cls=dict(type='mmpretrain.CrossEntropyLoss', loss_weight=1.0),
+ loss_triplet=dict(type='TripletLoss', margin=0.3, loss_weight=1.0),
+ norm_cfg=dict(type='BN1d'),
+ act_cfg=dict(type='ReLU')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmtracking/mot/reid/tracktor_reid_r50_iter25245-a452f51f.pth' # noqa: E501
+ )),
+ tracker=dict(
+ type='SORTTracker',
+ motion=dict(type='KalmanFilter', center_only=False),
+ obj_score_thr=0.5,
+ reid=dict(
+ num_samples=10,
+ img_scale=(256, 128),
+ img_norm_cfg=None,
+ match_score_thr=2.0),
+ match_iou_thr=0.5,
+ momentums=None,
+ num_tentatives=2,
+ num_frames_retain=100))
+
+train_dataloader = None
+
+train_cfg = None
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
diff --git a/configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test.py b/configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test.py
new file mode 100644
index 00000000000..687ce7adfcc
--- /dev/null
+++ b/configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test.py
@@ -0,0 +1,15 @@
+_base_ = [
+ './deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain'
+ '_test-mot17halfval.py'
+]
+
+# dataloader
+val_dataloader = dict(
+ dataset=dict(ann_file='annotations/train_cocoformat.json'))
+test_dataloader = dict(
+ dataset=dict(
+ ann_file='annotations/test_cocoformat.json',
+ data_prefix=dict(img_path='test')))
+
+# evaluator
+test_evaluator = dict(format_only=True, outfile_prefix='./mot_17_test_res')
diff --git a/configs/deepsort/metafile.yml b/configs/deepsort/metafile.yml
new file mode 100644
index 00000000000..2feb358e93d
--- /dev/null
+++ b/configs/deepsort/metafile.yml
@@ -0,0 +1,37 @@
+Collections:
+ - Name: DeepSORT
+ Metadata:
+ Training Techniques:
+ - SGD with Momentum
+ Training Resources: 8x V100 GPUs
+ Architecture:
+ - ResNet
+ - FPN
+ Paper:
+ URL: https://arxiv.org/abs/1703.07402
+ Title: Simple Online and Realtime Tracking with a Deep Association Metric
+ README: configs/deepsort/README.md
+
+Models:
+ - Name: deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval
+ In Collection: DeepSORT
+ Config: configs/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
+ Metadata:
+ Training Data: MOT17-half-train
+ inference time (ms/im):
+ - value: 72.5
+ hardware: V100
+ backend: PyTorch
+ batch size: 1
+ mode: FP32
+ resolution: (640, 1088)
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT17-half-val
+ Metrics:
+ MOTA: 63.7
+ IDF1: 69.5
+ HOTA: 57.0
+ Weights:
+ - https://download.openmmlab.com/mmtracking/mot/faster_rcnn/faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth
+ - https://download.openmmlab.com/mmtracking/mot/reid/tracktor_reid_r50_iter25245-a452f51f.pth
diff --git a/configs/dsdl/README.md b/configs/dsdl/README.md
new file mode 100644
index 00000000000..53c8849dc80
--- /dev/null
+++ b/configs/dsdl/README.md
@@ -0,0 +1,61 @@
+# DSDL: Standard Description Language for DataSet
+
+## 1. Abstract
+
+Data is the cornerstone of artificial intelligence. The efficiency of data acquisition, exchange, and application directly impacts the advances in technologies and applications. Over the long history of AI, a vast quantity of data sets have been developed and distributed. However, these datasets are defined in very different forms, which incurs significant overhead when it comes to exchange, integration, and utilization -- it is often the case that one needs to develop a new customized tool or script in order to incorporate a new dataset into a workflow.
+
+To overcome such difficulties, we develop **Data Set Description Language (DSDL)**. More details please visit our [official documents](https://opendatalab.github.io/dsdl-docs/getting_started/overview/), dsdl datasets can be downloaded from our platform [OpenDataLab](https://opendatalab.com/).
+
+## 2. Steps
+
+- install dsdl:
+
+ install by pip:
+
+ ```
+ pip install dsdl
+ ```
+
+ install by source code:
+
+ ```
+ git clone https://github.com/opendatalab/dsdl-sdk.git -b schema-dsdl
+ cd dsdl-sdk
+ python setup.py install
+ ```
+
+- install mmdet and pytorch:
+ please refer this [installation documents](https://mmdetection.readthedocs.io/en/latest/get_started.html).
+
+- train:
+
+ - using single gpu:
+
+ ```
+ python tools/train.py {config_file}
+ ```
+
+ - using slrum:
+
+ ```
+ ./tools/slurm_train.sh {partition} {job_name} {config_file} {work_dir} {gpu_nums}
+ ```
+
+## 3. Test Results
+
+- detection task:
+
+ | Datasets | Model | box AP | Config |
+ | :--------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :----: | :-------------------------: |
+ | VOC07+12 | [model](https://download.openmmlab.com/mmdetection/v2.0/pascal_voc/faster_rcnn_r50_fpn_1x_voc0712/faster_rcnn_r50_fpn_1x_voc0712_20220320_192712-54bef0f3.pth) | 80.3\* | [config](./voc0712.py) |
+ | COCO | [model](https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth) | 37.4 | [config](./coco.py) |
+ | Objects365 | [model](https://download.openmmlab.com/mmdetection/v2.0/objects365/faster_rcnn_r50_fpn_16x4_1x_obj365v2/faster_rcnn_r50_fpn_16x4_1x_obj365v2_20221220_175040-5910b015.pth) | 19.8 | [config](./objects365v2.py) |
+ | OpenImages | [model](https://download.openmmlab.com/mmdetection/v2.0/openimages/faster_rcnn_r50_fpn_32x2_cas_1x_openimages/faster_rcnn_r50_fpn_32x2_cas_1x_openimages_20220306_202424-98c630e5.pth) | 59.9\* | [config](./openimagesv6.py) |
+
+ \*: box AP in voc metric and openimages metric, actually means AP_50.
+
+- instance segmentation task:
+
+ | Datasets | Model | box AP | mask AP | Config |
+ | :------: | :------------------------------------------------------------------------------------------------------------------------------------------: | :----: | :-----: | :--------------------------: |
+ | COCO | [model](https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth) | 38.1 | 34.7 | [config](./coco_instance.py) |
diff --git a/configs/dsdl/coco.py b/configs/dsdl/coco.py
new file mode 100644
index 00000000000..3c9e895e53c
--- /dev/null
+++ b/configs/dsdl/coco.py
@@ -0,0 +1,33 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py',
+ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py',
+ '../_base_/datasets/dsdl.py'
+]
+
+# dsdl dataset settings
+
+# please visit our platform [OpenDataLab](https://opendatalab.com/)
+# to downloaded dsdl dataset.
+data_root = 'data/COCO2017'
+img_prefix = 'original'
+train_ann = 'dsdl/set-train/train.yaml'
+val_ann = 'dsdl/set-val/val.yaml'
+specific_key_path = dict(ignore_flag='./annotations/*/iscrowd')
+
+train_dataloader = dict(
+ dataset=dict(
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=train_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ ))
+
+val_dataloader = dict(
+ dataset=dict(
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=val_ann,
+ data_prefix=dict(img_path=img_prefix),
+ ))
+test_dataloader = val_dataloader
diff --git a/configs/dsdl/coco_instance.py b/configs/dsdl/coco_instance.py
new file mode 100644
index 00000000000..e34f93c97f5
--- /dev/null
+++ b/configs/dsdl/coco_instance.py
@@ -0,0 +1,62 @@
+_base_ = [
+ '../_base_/models/mask-rcnn_r50_fpn.py',
+ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py',
+ '../_base_/datasets/dsdl.py'
+]
+
+# dsdl dataset settings.
+
+# please visit our platform [OpenDataLab](https://opendatalab.com/)
+# to downloaded dsdl dataset.
+data_root = 'data/COCO2017'
+img_prefix = 'original'
+train_ann = 'dsdl/set-train/train.yaml'
+val_ann = 'dsdl/set-val/val.yaml'
+specific_key_path = dict(ignore_flag='./annotations/*/iscrowd')
+
+backend_args = None
+
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadAnnotations', with_bbox=True, with_mask=True),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1333, 800), keep_ratio=True),
+ dict(type='LoadAnnotations', with_bbox=True, with_mask=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'instances'))
+]
+
+train_dataloader = dict(
+ dataset=dict(
+ with_polygon=True,
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=train_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline,
+ ))
+
+val_dataloader = dict(
+ dataset=dict(
+ with_polygon=True,
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=val_ann,
+ data_prefix=dict(img_path=img_prefix),
+ pipeline=test_pipeline,
+ ))
+
+test_dataloader = val_dataloader
+
+val_evaluator = dict(
+ type='CocoMetric', metric=['bbox', 'segm'], format_only=False)
+
+test_evaluator = val_evaluator
diff --git a/configs/dsdl/objects365v2.py b/configs/dsdl/objects365v2.py
new file mode 100644
index 00000000000..d25a2323027
--- /dev/null
+++ b/configs/dsdl/objects365v2.py
@@ -0,0 +1,54 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py',
+ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py',
+ '../_base_/datasets/dsdl.py'
+]
+
+model = dict(roi_head=dict(bbox_head=dict(num_classes=365)))
+
+# dsdl dataset settings
+
+# please visit our platform [OpenDataLab](https://opendatalab.com/)
+# to downloaded dsdl dataset.
+data_root = 'data/Objects365'
+img_prefix = 'original'
+train_ann = 'dsdl/set-train/train.yaml'
+val_ann = 'dsdl/set-val/val.yaml'
+specific_key_path = dict(ignore_flag='./annotations/*/iscrowd')
+
+train_dataloader = dict(
+ dataset=dict(
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=train_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ ))
+
+val_dataloader = dict(
+ dataset=dict(
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=val_ann,
+ data_prefix=dict(img_path=img_prefix),
+ test_mode=True,
+ ))
+test_dataloader = val_dataloader
+
+default_hooks = dict(logger=dict(type='LoggerHook', interval=1000), )
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=3, val_interval=1)
+param_scheduler = [
+ dict(
+ type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=500),
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=12,
+ by_epoch=True,
+ milestones=[1, 2],
+ gamma=0.1)
+]
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001))
diff --git a/configs/dsdl/openimagesv6.py b/configs/dsdl/openimagesv6.py
new file mode 100644
index 00000000000..a65f942a0d4
--- /dev/null
+++ b/configs/dsdl/openimagesv6.py
@@ -0,0 +1,94 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py',
+ '../_base_/schedules/schedule_1x.py',
+ '../_base_/default_runtime.py',
+]
+
+model = dict(roi_head=dict(bbox_head=dict(num_classes=601)))
+
+# dsdl dataset settings
+
+# please visit our platform [OpenDataLab](https://opendatalab.com/)
+# to downloaded dsdl dataset.
+dataset_type = 'DSDLDetDataset'
+data_root = 'data/OpenImages'
+train_ann = 'dsdl/set-train/train.yaml'
+val_ann = 'dsdl/set-val/val.yaml'
+specific_key_path = dict(
+ image_level_labels='./image_labels/*/label',
+ Label='./objects/*/label',
+ is_group_of='./objects/*/isgroupof',
+)
+
+backend_args = dict(
+ backend='petrel',
+ path_mapping=dict({'data/': 's3://open_dataset_original/'}))
+
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(type='Resize', scale=(1024, 800), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1024, 800), keep_ratio=True),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'instances', 'image_level_labels'))
+]
+
+train_dataloader = dict(
+ sampler=dict(type='ClassAwareSampler', num_sample_class=1),
+ dataset=dict(
+ type=dataset_type,
+ with_imagelevel_label=True,
+ with_hierarchy=True,
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=train_ann,
+ filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline))
+
+val_dataloader = dict(
+ dataset=dict(
+ type=dataset_type,
+ with_imagelevel_label=True,
+ with_hierarchy=True,
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=val_ann,
+ test_mode=True,
+ pipeline=test_pipeline))
+
+test_dataloader = val_dataloader
+
+default_hooks = dict(logger=dict(type='LoggerHook', interval=1000), )
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=3, val_interval=1)
+param_scheduler = [
+ dict(
+ type='LinearLR', start_factor=0.001, by_epoch=False, begin=0, end=500),
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=12,
+ by_epoch=True,
+ milestones=[1, 2],
+ gamma=0.1)
+]
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001))
+
+val_evaluator = dict(
+ type='OpenImagesMetric',
+ iou_thrs=0.5,
+ ioa_thrs=0.5,
+ use_group_of=True,
+ get_supercategory=True)
+
+test_evaluator = val_evaluator
diff --git a/configs/dsdl/voc07.py b/configs/dsdl/voc07.py
new file mode 100644
index 00000000000..b7b864714e4
--- /dev/null
+++ b/configs/dsdl/voc07.py
@@ -0,0 +1,94 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py', '../_base_/default_runtime.py'
+]
+
+# model setting
+model = dict(roi_head=dict(bbox_head=dict(num_classes=20)))
+
+# dsdl dataset settings
+
+# please visit our platform [OpenDataLab](https://opendatalab.com/)
+# to downloaded dsdl dataset.
+dataset_type = 'DSDLDetDataset'
+data_root = 'data/VOC07-det'
+img_prefix = 'original'
+train_ann = 'dsdl/set-train/train.yaml'
+val_ann = 'dsdl/set-test/test.yaml'
+
+specific_key_path = dict(ignore_flag='./objects/*/difficult')
+
+backend_args = None
+
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(type='Resize', scale=(1000, 600), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1000, 600), keep_ratio=True),
+ # avoid bboxes being resized
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'instances'))
+]
+train_dataloader = dict(
+ dataset=dict(
+ type=dataset_type,
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=train_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline))
+
+val_dataloader = dict(
+ dataset=dict(
+ type=dataset_type,
+ specific_key_path=specific_key_path,
+ data_root=data_root,
+ ann_file=val_ann,
+ data_prefix=dict(img_path=img_prefix),
+ test_mode=True,
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+# Pascal VOC2007 uses `11points` as default evaluate mode, while PASCAL
+# VOC2012 defaults to use 'area'.
+val_evaluator = dict(type='VOCMetric', metric='mAP', eval_mode='11points')
+# val_evaluator = dict(type='CocoMetric', metric='bbox')
+test_evaluator = val_evaluator
+
+# training schedule, voc dataset is repeated 3 times, in
+# `_base_/datasets/voc0712.py`, so the actual epoch = 4 * 3 = 12
+max_epochs = 12
+train_cfg = dict(
+ type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=3)
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
+
+# learning rate
+param_scheduler = [
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=max_epochs,
+ by_epoch=True,
+ milestones=[9],
+ gamma=0.1)
+]
+
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001))
+
+# Default setting for scaling LR automatically
+# - `enable` means enable scaling LR automatically
+# or not by default.
+# - `base_batch_size` = (8 GPUs) x (2 samples per GPU).
+auto_scale_lr = dict(enable=False, base_batch_size=16)
diff --git a/configs/dsdl/voc0712.py b/configs/dsdl/voc0712.py
new file mode 100644
index 00000000000..9ec1bb8f98e
--- /dev/null
+++ b/configs/dsdl/voc0712.py
@@ -0,0 +1,132 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py',
+ '../_base_/schedules/schedule_1x.py',
+ '../_base_/default_runtime.py',
+ # '../_base_/datasets/dsdl.py'
+]
+
+# model setting
+model = dict(roi_head=dict(bbox_head=dict(num_classes=20)))
+
+# dsdl dataset settings
+
+# please visit our platform [OpenDataLab](https://opendatalab.com/)
+# to downloaded dsdl dataset.
+dataset_type = 'DSDLDetDataset'
+data_root_07 = 'data/VOC07-det'
+data_root_12 = 'data/VOC12-det'
+img_prefix = 'original'
+
+train_ann = 'dsdl/set-train/train.yaml'
+val_ann = 'dsdl/set-val/val.yaml'
+test_ann = 'dsdl/set-test/test.yaml'
+
+backend_args = None
+train_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(type='Resize', scale=(1000, 600), keep_ratio=True),
+ dict(type='RandomFlip', prob=0.5),
+ dict(type='PackDetInputs')
+]
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=backend_args),
+ dict(type='Resize', scale=(1000, 600), keep_ratio=True),
+ # If you don't have a gt annotation, delete the pipeline
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'instances'))
+]
+
+specific_key_path = dict(ignore_flag='./objects/*/difficult', )
+
+train_dataloader = dict(
+ dataset=dict(
+ type='RepeatDataset',
+ times=3,
+ dataset=dict(
+ type='ConcatDataset',
+ datasets=[
+ dict(
+ type=dataset_type,
+ specific_key_path=specific_key_path,
+ data_root=data_root_07,
+ ann_file=train_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(
+ filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline),
+ dict(
+ type=dataset_type,
+ specific_key_path=specific_key_path,
+ data_root=data_root_07,
+ ann_file=val_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(
+ filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline),
+ dict(
+ type=dataset_type,
+ specific_key_path=specific_key_path,
+ data_root=data_root_12,
+ ann_file=train_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(
+ filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline),
+ dict(
+ type=dataset_type,
+ specific_key_path=specific_key_path,
+ data_root=data_root_12,
+ ann_file=val_ann,
+ data_prefix=dict(img_path=img_prefix),
+ filter_cfg=dict(
+ filter_empty_gt=True, min_size=32, bbox_min_size=32),
+ pipeline=train_pipeline),
+ ])))
+
+val_dataloader = dict(
+ dataset=dict(
+ type=dataset_type,
+ specific_key_path=specific_key_path,
+ data_root=data_root_07,
+ ann_file=test_ann,
+ test_mode=True,
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(type='CocoMetric', metric='bbox')
+# val_evaluator = dict(type='VOCMetric', metric='mAP', eval_mode='11points')
+test_evaluator = val_evaluator
+
+# training schedule, voc dataset is repeated 3 times, in
+# `_base_/datasets/voc0712.py`, so the actual epoch = 4 * 3 = 12
+max_epochs = 4
+train_cfg = dict(
+ type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1)
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
+
+# learning rate
+param_scheduler = [
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=max_epochs,
+ by_epoch=True,
+ milestones=[3],
+ gamma=0.1)
+]
+
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0001))
+
+# Default setting for scaling LR automatically
+# - `enable` means enable scaling LR automatically
+# or not by default.
+# - `base_batch_size` = (8 GPUs) x (2 samples per GPU).
+auto_scale_lr = dict(enable=False, base_batch_size=16)
diff --git a/configs/faster_rcnn/faster-rcnn_r50-caffe-c4_ms-1x_coco.py b/configs/faster_rcnn/faster-rcnn_r50-caffe-c4_ms-1x_coco.py
index d4949d04ac2..7e231e86527 100644
--- a/configs/faster_rcnn/faster-rcnn_r50-caffe-c4_ms-1x_coco.py
+++ b/configs/faster_rcnn/faster-rcnn_r50-caffe-c4_ms-1x_coco.py
@@ -5,8 +5,8 @@
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='RandomChoiceResize',
- scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), (1333, 768),
- (1333, 800)],
+ scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),
+ (1333, 768), (1333, 800)],
keep_ratio=True),
dict(type='RandomFlip', prob=0.5),
dict(type='PackDetInputs')
diff --git a/configs/faster_rcnn/faster-rcnn_r50-caffe-dc5_ms-1x_coco.py b/configs/faster_rcnn/faster-rcnn_r50-caffe-dc5_ms-1x_coco.py
index 99a6fcc7d7a..63a68859a85 100644
--- a/configs/faster_rcnn/faster-rcnn_r50-caffe-dc5_ms-1x_coco.py
+++ b/configs/faster_rcnn/faster-rcnn_r50-caffe-dc5_ms-1x_coco.py
@@ -5,8 +5,8 @@
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='RandomChoiceResize',
- scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), (1333, 768),
- (1333, 800)],
+ scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),
+ (1333, 768), (1333, 800)],
keep_ratio=True),
dict(type='RandomFlip', prob=0.5),
dict(type='PackDetInputs')
diff --git a/configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_ms-1x_coco.py b/configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_ms-1x_coco.py
index 7daa03d90a5..59f1633c807 100644
--- a/configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_ms-1x_coco.py
+++ b/configs/faster_rcnn/faster-rcnn_r50-caffe_fpn_ms-1x_coco.py
@@ -19,8 +19,8 @@
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='RandomChoiceResize',
- scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), (1333, 768),
- (1333, 800)],
+ scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),
+ (1333, 768), (1333, 800)],
keep_ratio=True),
dict(type='RandomFlip', prob=0.5),
dict(type='PackDetInputs')
diff --git a/configs/fcos/fcos_r101-caffe_fpn_gn-head_ms-640-800-2x_coco.py b/configs/fcos/fcos_r101-caffe_fpn_gn-head_ms-640-800-2x_coco.py
index 859b45c94b2..286a07a2db2 100644
--- a/configs/fcos/fcos_r101-caffe_fpn_gn-head_ms-640-800-2x_coco.py
+++ b/configs/fcos/fcos_r101-caffe_fpn_gn-head_ms-640-800-2x_coco.py
@@ -14,7 +14,7 @@
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='RandomChoiceResize',
- scale=[(1333, 640), (1333, 800)],
+ scales=[(1333, 640), (1333, 800)],
keep_ratio=True),
dict(type='RandomFlip', prob=0.5),
dict(type='PackDetInputs')
diff --git a/configs/fcos/fcos_r50-caffe_fpn_gn-head_ms-640-800-2x_coco.py b/configs/fcos/fcos_r50-caffe_fpn_gn-head_ms-640-800-2x_coco.py
index 12e9160d812..4d50b4ec6c4 100644
--- a/configs/fcos/fcos_r50-caffe_fpn_gn-head_ms-640-800-2x_coco.py
+++ b/configs/fcos/fcos_r50-caffe_fpn_gn-head_ms-640-800-2x_coco.py
@@ -6,7 +6,7 @@
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='RandomChoiceResize',
- scale=[(1333, 640), (1333, 800)],
+ scales=[(1333, 640), (1333, 800)],
keep_ratio=True),
dict(type='RandomFlip', prob=0.5),
dict(type='PackDetInputs')
diff --git a/configs/fcos/fcos_x101-64x4d_fpn_gn-head_ms-640-800-2x_coco.py b/configs/fcos/fcos_x101-64x4d_fpn_gn-head_ms-640-800-2x_coco.py
index aae1fceea58..503c0e1ce79 100644
--- a/configs/fcos/fcos_x101-64x4d_fpn_gn-head_ms-640-800-2x_coco.py
+++ b/configs/fcos/fcos_x101-64x4d_fpn_gn-head_ms-640-800-2x_coco.py
@@ -28,7 +28,7 @@
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='RandomChoiceResize',
- scale=[(1333, 640), (1333, 800)],
+ scales=[(1333, 640), (1333, 800)],
keep_ratio=True),
dict(type='RandomFlip', prob=0.5),
dict(type='PackDetInputs')
diff --git a/configs/glip/README.md b/configs/glip/README.md
new file mode 100644
index 00000000000..5f7c8d3ccb7
--- /dev/null
+++ b/configs/glip/README.md
@@ -0,0 +1,55 @@
+# GLIP: Grounded Language-Image Pre-training
+
+> [GLIP: Grounded Language-Image Pre-training](https://arxiv.org/abs/2112.03857)
+
+
+
+## Abstract
+
+This paper presents a grounded language-image pre-training (GLIP) model for learning object-level, language-aware, and semantic-rich visual representations. GLIP unifies object detection and phrase grounding for pre-training. The unification brings two benefits: 1) it allows GLIP to learn from both detection and grounding data to improve both tasks and bootstrap a good grounding model; 2) GLIP can leverage massive image-text pairs by generating grounding boxes in a self-training fashion, making the learned representation semantic-rich. In our experiments, we pre-train GLIP on 27M grounding data, including 3M human-annotated and 24M web-crawled image-text pairs. The learned representations demonstrate strong zero-shot and few-shot transferability to various object-level recognition tasks. 1) When directly evaluated on COCO and LVIS (without seeing any images in COCO during pre-training), GLIP achieves 49.8 AP and 26.9 AP, respectively, surpassing many supervised baselines. 2) After fine-tuned on COCO, GLIP achieves 60.8 AP on val and 61.5 AP on test-dev, surpassing prior SoTA. 3) When transferred to 13 downstream object detection tasks, a 1-shot GLIP rivals with a fully-supervised Dynamic Head.
+
+
+
+
+
+## Installation
+
+```shell
+cd $MMDETROOT
+
+# source installation
+pip install -r requirements/multimodal.txt
+
+# or mim installation
+mim install mmdet[multimodal]
+```
+
+```shell
+cd $MMDETROOT
+
+wget https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth
+
+python demo/image_demo.py demo/demo.jpg \
+configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py \
+glip_tiny_a_mmdet-b3654169.pth \
+--texts 'bench . car .'
+```
+
+
+
+
+
+## Results and Models
+
+| Model | Zero-shot or Funetune | COCO mAP | Pre-Train Data | Config | Download |
+| :--------: | :-------------------: | :------: | :------------------------: | :---------------------------------------------------------------------: | :------------------------------------------------------------------------------------------: |
+| GLIP-T (A) | Zero-shot | 43.0 | O365 | [config](glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth) |
+| GLIP-T (B) | Zero-shot | 44.9 | O365 | [config](glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth) |
+| GLIP-T (C) | Zero-shot | 46.7 | O365,GoldG | [config](glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth) |
+| GLIP-T | Zero-shot | 46.4 | O365,GoldG,CC3M,SBU | [config](glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth) |
+| GLIP-L | Zero-shot | 51.3 | FourODs,GoldG,CC3M+12M,SBU | [config](glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth) |
+
+Note:
+
+1. The weights corresponding to the zero-shot model are adopted from the official weights and converted using the [script](../../tools/model_converters/glip_to_mmdet.py). We have not retrained the model for the time being.
+2. We will soon support fine-tuning on COCO.
diff --git a/configs/glip/glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py b/configs/glip/glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py
new file mode 100644
index 00000000000..546ecfe1d51
--- /dev/null
+++ b/configs/glip/glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py
@@ -0,0 +1,12 @@
+_base_ = './glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py'
+
+model = dict(
+ backbone=dict(
+ embed_dims=192,
+ depths=[2, 2, 18, 2],
+ num_heads=[6, 12, 24, 48],
+ window_size=12,
+ drop_path_rate=0.4,
+ ),
+ neck=dict(in_channels=[384, 768, 1536]),
+ bbox_head=dict(early_fuse=True, num_dyhead_blocks=8))
diff --git a/configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py b/configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py
new file mode 100644
index 00000000000..34a818caefc
--- /dev/null
+++ b/configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py
@@ -0,0 +1,90 @@
+_base_ = [
+ '../_base_/datasets/coco_detection.py',
+ '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
+]
+
+lang_model_name = 'bert-base-uncased'
+
+model = dict(
+ type='GLIP',
+ data_preprocessor=dict(
+ type='DetDataPreprocessor',
+ mean=[103.53, 116.28, 123.675],
+ std=[57.375, 57.12, 58.395],
+ bgr_to_rgb=False,
+ pad_size_divisor=32),
+ backbone=dict(
+ type='SwinTransformer',
+ embed_dims=96,
+ depths=[2, 2, 6, 2],
+ num_heads=[3, 6, 12, 24],
+ window_size=7,
+ mlp_ratio=4,
+ qkv_bias=True,
+ qk_scale=None,
+ drop_rate=0.,
+ attn_drop_rate=0.,
+ drop_path_rate=0.2,
+ patch_norm=True,
+ out_indices=(1, 2, 3),
+ with_cp=False,
+ convert_weights=False),
+ neck=dict(
+ type='FPN',
+ in_channels=[192, 384, 768],
+ out_channels=256,
+ start_level=0,
+ relu_before_extra_convs=True,
+ add_extra_convs='on_output',
+ num_outs=5),
+ bbox_head=dict(
+ type='ATSSVLFusionHead',
+ lang_model_name=lang_model_name,
+ num_classes=80,
+ in_channels=256,
+ feat_channels=256,
+ anchor_generator=dict(
+ type='AnchorGenerator',
+ ratios=[1.0],
+ octave_base_scale=8,
+ scales_per_octave=1,
+ strides=[8, 16, 32, 64, 128],
+ center_offset=0.5),
+ bbox_coder=dict(
+ type='DeltaXYWHBBoxCoderForGLIP',
+ target_means=[.0, .0, .0, .0],
+ target_stds=[0.1, 0.1, 0.2, 0.2]),
+ ),
+ language_model=dict(type='BertModel', name=lang_model_name),
+ train_cfg=dict(
+ assigner=dict(type='ATSSAssigner', topk=9),
+ allowed_border=-1,
+ pos_weight=-1,
+ debug=False),
+ test_cfg=dict(
+ nms_pre=1000,
+ min_bbox_size=0,
+ score_thr=0.05,
+ nms=dict(type='nms', iou_threshold=0.6),
+ max_per_img=100))
+
+test_pipeline = [
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args,
+ imdecode_backend='pillow'),
+ dict(
+ type='FixScaleResize',
+ scale=(800, 1333),
+ keep_ratio=True,
+ backend='pillow'),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor', 'text', 'custom_entities'))
+]
+
+val_dataloader = dict(
+ dataset=dict(pipeline=test_pipeline, return_classes=True))
+test_dataloader = val_dataloader
diff --git a/configs/glip/glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py b/configs/glip/glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py
new file mode 100644
index 00000000000..6334e5e3b40
--- /dev/null
+++ b/configs/glip/glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py
@@ -0,0 +1,3 @@
+_base_ = './glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py'
+
+model = dict(bbox_head=dict(early_fuse=True))
diff --git a/configs/glip/glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py b/configs/glip/glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py
new file mode 100644
index 00000000000..24898f4df53
--- /dev/null
+++ b/configs/glip/glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py
@@ -0,0 +1 @@
+_base_ = './glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py'
diff --git a/configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py b/configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py
new file mode 100644
index 00000000000..24898f4df53
--- /dev/null
+++ b/configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py
@@ -0,0 +1 @@
+_base_ = './glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py'
diff --git a/configs/glip/metafile.yml b/configs/glip/metafile.yml
new file mode 100644
index 00000000000..588d1c8d6b8
--- /dev/null
+++ b/configs/glip/metafile.yml
@@ -0,0 +1,66 @@
+Collections:
+ - Name: GLIP
+ Metadata:
+ Training Data: Objects365, GoldG, CC3M, SBU and COCO
+ Training Techniques:
+ - SGD with Momentum
+ - Weight Decay
+ Training Resources: A100 GPUs
+ Architecture:
+ - Swin Transformer
+ - DYHead
+ - BERT
+ Paper:
+ URL: https://arxiv.org/abs/2112.03857
+ Title: 'GLIP: Grounded Language-Image Pre-training'
+ README: configs/glip/README.md
+ Code:
+ URL:
+ Version: v3.0.0
+
+Models:
+ - Name: glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365
+ In Collection: GLIP
+ Config: configs/glip/glip_atss_swin-t_a_fpn_dyhead_pretrain_obj365.py
+ Results:
+ - Task: Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 43.0
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_a_mmdet-b3654169.pth
+ - Name: glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365
+ In Collection: GLIP
+ Config: configs/glip/glip_atss_swin-t_b_fpn_dyhead_pretrain_obj365.py
+ Results:
+ - Task: Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 44.9
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_b_mmdet-6dfbd102.pth
+ - Name: glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg
+ In Collection: GLIP
+ Config: configs/glip/glip_atss_swin-t_c_fpn_dyhead_pretrain_obj365-goldg.py
+ Results:
+ - Task: Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 46.7
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_c_mmdet-2fc427dd.pth
+ - Name: glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub
+ In Collection: GLIP
+ Config: configs/glip/glip_atss_swin-t_fpn_dyhead_pretrain_obj365-goldg-cc3m-sub.py
+ Results:
+ - Task: Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 46.4
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_tiny_mmdet-c24ce662.pth
+ - Name: glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata
+ In Collection: GLIP
+ Config: configs/glip/glip_atss_swin-l_fpn_dyhead_pretrain_mixeddata.py
+ Results:
+ - Task: Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 51.3
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/glip/glip_l_mmdet-abfe026b.pth
diff --git a/configs/mask2former_vis/README.md b/configs/mask2former_vis/README.md
new file mode 100644
index 00000000000..69965729089
--- /dev/null
+++ b/configs/mask2former_vis/README.md
@@ -0,0 +1,81 @@
+# Mask2Former for Video Instance Segmentation
+
+## Abstract
+
+
+
+We find Mask2Former also achieves state-of-the-art performance on video instance segmentation without modifying the architecture, the loss or even the training pipeline. In this report, we show universal image segmentation architectures trivially generalize to video segmentation by directly predicting 3D segmentation volumes. Specifically, Mask2Former sets a new state-of-the-art of 60.4 AP on YouTubeVIS-2019 and 52.6 AP on YouTubeVIS-2021. We believe Mask2Former is also capable of handling video semantic and panoptic segmentation, given its versatility in image segmentation. We hope this will make state-of-theart video segmentation research more accessible and bring more attention to designing universal image and video segmentation architectures.
+
+
+
+
+
+
+
+## Citation
+
+
+
+```latex
+@inproceedings{cheng2021mask2former,
+ title={Masked-attention Mask Transformer for Universal Image Segmentation},
+ author={Bowen Cheng and Ishan Misra and Alexander G. Schwing and Alexander Kirillov and Rohit Girdhar},
+ journal={CVPR},
+ year={2022}
+}
+```
+
+## Results and models of Mask2Former on YouTube-VIS 2021 validation dataset
+
+Note: Codalab has closed the evaluation portal of `YouTube-VIS 2019`, so we do not provide the results of `YouTube-VIS 2019` at present. If you want to evaluate the results of `YouTube-VIS 2021`, at present, you can submit the result to the evaluation portal of `YouTube-VIS 2022`. The value of `AP_S` is the result of `YouTube-VIS 2021`.
+
+| Method | Backbone | Style | Lr schd | Mem (GB) | Inf time (fps) | AP | Config | Download |
+| :----------------------: | :------: | :-----: | :-----: | :------: | :------------: | :--: | :---------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| Mask2Former | R-50 | pytorch | 8e | 6.0 | - | 41.3 | [config](mask2former_r50_8xb2-8e_youtubevis2021.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021/mask2former_r50_8xb2-8e_youtubevis2021_20230426_131833-5d215283.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021/mask2former_r50_8xb2-8e_youtubevis2021_20230426_131833.json) |
+| Mask2Former | R-101 | pytorch | 8e | 7.5 | - | 42.3 | [config](mask2former_r101_8xb2-8e_youtubevis2021.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2021/mask2former_r101_8xb2-8e_youtubevis2021_20220823_092747-8077d115.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/mask2former/mask2former_r101_8xb2-8e_youtubevis2021_20220823_092747.json) |
+| Mask2Former(200 queries) | Swin-L | pytorch | 8e | 18.5 | - | 52.3 | [config](mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/mask2former_vis/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021_20220907_124752-48252603.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/mask2former/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021_20220907_124752.json) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+Due to the influence of parameters such as learning rate in default configuration file, we recommend using 8 GPUs for training in order to reproduce accuracy. You can use the following command to start the training.
+
+```shell
+# Training Mask2Former on YouTube-VIS-2021 dataset with following command.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_train.sh configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py 8
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 4. Testing and evaluation
+
+If you want to get the results of the [YouTube-VOS](https://youtube-vos.org/dataset/vis/) val/test set, please use the following command to generate result files that can be used for submission. It will be stored in `./youtube_vis_results.submission_file.zip`, you can modify the saved path in `test_evaluator` of the config.
+
+```shell
+# The number after config file represents the number of GPUs used.
+bash tools/dist_test_tracking.sh configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py --checkpoint ${CHECKPOINT_PATH}
+```
+
+If you want to know about more detailed usage of `test_tracking.py/dist_test_tracking.sh/slurm_test_tracking.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 5.Inference
+
+Use a single GPU to predict a video and save it as a video.
+
+```shell
+python demo/mot_demo.py demo/demo_mot.mp4 configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py --checkpoint {CHECKPOINT_PATH} --out vis.mp4
+```
+
+If you want to know about more detailed usage of `mot_demo.py`, please refer to this [document](../../docs/en/user_guides/tracking_inference.md).
diff --git a/configs/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2019.py b/configs/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2019.py
new file mode 100644
index 00000000000..3ba4aea8eac
--- /dev/null
+++ b/configs/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2019.py
@@ -0,0 +1,12 @@
+_base_ = './mask2former_r50_8xb2-8e_youtubevis2019.py'
+
+model = dict(
+ backbone=dict(
+ depth=101,
+ init_cfg=dict(type='Pretrained',
+ checkpoint='torchvision://resnet101')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint='https://download.openmmlab.com/mmdetection/v3.0/'
+ 'mask2former/mask2former_r101_8xb2-lsj-50e_coco/'
+ 'mask2former_r101_8xb2-lsj-50e_coco_20220426_100250-ecf181e2.pth'))
diff --git a/configs/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2021.py b/configs/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2021.py
new file mode 100644
index 00000000000..95f9ceeb388
--- /dev/null
+++ b/configs/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2021.py
@@ -0,0 +1,12 @@
+_base_ = './mask2former_r50_8xb2-8e_youtubevis2021.py'
+
+model = dict(
+ backbone=dict(
+ depth=101,
+ init_cfg=dict(type='Pretrained',
+ checkpoint='torchvision://resnet101')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint='https://download.openmmlab.com/mmdetection/v3.0/'
+ 'mask2former/mask2former_r101_8xb2-lsj-50e_coco/'
+ 'mask2former_r101_8xb2-lsj-50e_coco_20220426_100250-ecf181e2.pth'))
diff --git a/configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2019.py b/configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2019.py
new file mode 100644
index 00000000000..8dc03bf97a2
--- /dev/null
+++ b/configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2019.py
@@ -0,0 +1,174 @@
+_base_ = ['../_base_/datasets/youtube_vis.py', '../_base_/default_runtime.py']
+
+num_classes = 40
+num_frames = 2
+model = dict(
+ type='Mask2FormerVideo',
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ mean=[123.675, 116.28, 103.53],
+ std=[58.395, 57.12, 57.375],
+ bgr_to_rgb=True,
+ pad_mask=True,
+ pad_size_divisor=32),
+ backbone=dict(
+ type='ResNet',
+ depth=50,
+ num_stages=4,
+ out_indices=(0, 1, 2, 3),
+ frozen_stages=-1,
+ norm_cfg=dict(type='BN', requires_grad=False),
+ norm_eval=True,
+ style='pytorch',
+ init_cfg=dict(type='Pretrained', checkpoint='torchvision://resnet50')),
+ track_head=dict(
+ type='Mask2FormerTrackHead',
+ in_channels=[256, 512, 1024, 2048], # pass to pixel_decoder inside
+ strides=[4, 8, 16, 32],
+ feat_channels=256,
+ out_channels=256,
+ num_classes=num_classes,
+ num_queries=100,
+ num_frames=num_frames,
+ num_transformer_feat_level=3,
+ pixel_decoder=dict(
+ type='MSDeformAttnPixelDecoder',
+ num_outs=3,
+ norm_cfg=dict(type='GN', num_groups=32),
+ act_cfg=dict(type='ReLU'),
+ encoder=dict( # DeformableDetrTransformerEncoder
+ num_layers=6,
+ layer_cfg=dict( # DeformableDetrTransformerEncoderLayer
+ self_attn_cfg=dict( # MultiScaleDeformableAttention
+ embed_dims=256,
+ num_heads=8,
+ num_levels=3,
+ num_points=4,
+ im2col_step=128,
+ dropout=0.0,
+ batch_first=True),
+ ffn_cfg=dict(
+ embed_dims=256,
+ feedforward_channels=1024,
+ num_fcs=2,
+ ffn_drop=0.0,
+ act_cfg=dict(type='ReLU', inplace=True)))),
+ positional_encoding=dict(num_feats=128, normalize=True)),
+ enforce_decoder_input_project=False,
+ positional_encoding=dict(
+ type='SinePositionalEncoding3D', num_feats=128, normalize=True),
+ transformer_decoder=dict( # Mask2FormerTransformerDecoder
+ return_intermediate=True,
+ num_layers=9,
+ layer_cfg=dict( # Mask2FormerTransformerDecoderLayer
+ self_attn_cfg=dict( # MultiheadAttention
+ embed_dims=256,
+ num_heads=8,
+ dropout=0.0,
+ batch_first=True),
+ cross_attn_cfg=dict( # MultiheadAttention
+ embed_dims=256,
+ num_heads=8,
+ dropout=0.0,
+ batch_first=True),
+ ffn_cfg=dict(
+ embed_dims=256,
+ feedforward_channels=2048,
+ num_fcs=2,
+ ffn_drop=0.0,
+ act_cfg=dict(type='ReLU', inplace=True))),
+ init_cfg=None),
+ loss_cls=dict(
+ type='CrossEntropyLoss',
+ use_sigmoid=False,
+ loss_weight=2.0,
+ reduction='mean',
+ class_weight=[1.0] * num_classes + [0.1]),
+ loss_mask=dict(
+ type='CrossEntropyLoss',
+ use_sigmoid=True,
+ reduction='mean',
+ loss_weight=5.0),
+ loss_dice=dict(
+ type='DiceLoss',
+ use_sigmoid=True,
+ activate=True,
+ reduction='mean',
+ naive_dice=True,
+ eps=1.0,
+ loss_weight=5.0),
+ train_cfg=dict(
+ num_points=12544,
+ oversample_ratio=3.0,
+ importance_sample_ratio=0.75,
+ assigner=dict(
+ type='HungarianAssigner',
+ match_costs=[
+ dict(type='ClassificationCost', weight=2.0),
+ dict(
+ type='CrossEntropyLossCost',
+ weight=5.0,
+ use_sigmoid=True),
+ dict(type='DiceCost', weight=5.0, pred_act=True, eps=1.0)
+ ]),
+ sampler=dict(type='MaskPseudoSampler'))),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint='https://download.openmmlab.com/mmdetection/v3.0/'
+ 'mask2former/mask2former_r50_8xb2-lsj-50e_coco/'
+ 'mask2former_r50_8xb2-lsj-50e_coco_20220506_191028-41b088b6.pth'))
+
+# optimizer
+embed_multi = dict(lr_mult=1.0, decay_mult=0.0)
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(
+ type='AdamW',
+ lr=0.0001,
+ weight_decay=0.05,
+ eps=1e-8,
+ betas=(0.9, 0.999)),
+ paramwise_cfg=dict(
+ custom_keys={
+ 'backbone': dict(lr_mult=0.1, decay_mult=1.0),
+ 'query_embed': embed_multi,
+ 'query_feat': embed_multi,
+ 'level_embed': embed_multi,
+ },
+ norm_decay_mult=0.0),
+ clip_grad=dict(max_norm=0.01, norm_type=2))
+
+# learning policy
+max_iters = 6000
+param_scheduler = dict(
+ type='MultiStepLR',
+ begin=0,
+ end=max_iters,
+ by_epoch=False,
+ milestones=[
+ 4000,
+ ],
+ gamma=0.1)
+# runtime settings
+train_cfg = dict(
+ type='IterBasedTrainLoop', max_iters=max_iters, val_interval=6001)
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
+
+vis_backends = [dict(type='LocalVisBackend')]
+visualizer = dict(
+ type='TrackLocalVisualizer', vis_backends=vis_backends, name='visualizer')
+
+default_hooks = dict(
+ checkpoint=dict(
+ type='CheckpointHook', by_epoch=False, save_last=True, interval=2000),
+ visualization=dict(type='TrackVisualizationHook', draw=False))
+log_processor = dict(type='LogProcessor', window_size=50, by_epoch=False)
+
+# evaluator
+val_evaluator = dict(
+ type='YouTubeVISMetric',
+ metric='youtube_vis_ap',
+ outfile_prefix='./youtube_vis_results',
+ format_only=True)
+test_evaluator = val_evaluator
diff --git a/configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py b/configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py
new file mode 100644
index 00000000000..158fe52d20f
--- /dev/null
+++ b/configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py
@@ -0,0 +1,37 @@
+_base_ = './mask2former_r50_8xb2-8e_youtubevis2019.py'
+
+dataset_type = 'YouTubeVISDataset'
+data_root = 'data/youtube_vis_2021/'
+dataset_version = data_root[-5:-1] # 2019 or 2021
+
+train_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_train.json'))
+
+val_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_valid.json'))
+test_dataloader = val_dataloader
+
+# learning policy
+max_iters = 8000
+param_scheduler = dict(
+ type='MultiStepLR',
+ begin=0,
+ end=max_iters,
+ by_epoch=False,
+ milestones=[
+ 5500,
+ ],
+ gamma=0.1)
+# runtime settings
+train_cfg = dict(
+ type='IterBasedTrainLoop', max_iters=max_iters, val_interval=8001)
+
+default_hooks = dict(
+ checkpoint=dict(
+ type='CheckpointHook', by_epoch=False, save_last=True, interval=500))
diff --git a/configs/mask2former_vis/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021.py b/configs/mask2former_vis/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021.py
new file mode 100644
index 00000000000..94dcccf408d
--- /dev/null
+++ b/configs/mask2former_vis/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021.py
@@ -0,0 +1,64 @@
+_base_ = ['./mask2former_r50_8xb2-8e_youtubevis2021.py']
+depths = [2, 2, 18, 2]
+model = dict(
+ type='Mask2FormerVideo',
+ backbone=dict(
+ _delete_=True,
+ type='SwinTransformer',
+ pretrain_img_size=384,
+ embed_dims=192,
+ depths=depths,
+ num_heads=[6, 12, 24, 48],
+ window_size=12,
+ mlp_ratio=4,
+ qkv_bias=True,
+ qk_scale=None,
+ drop_rate=0.,
+ attn_drop_rate=0.,
+ drop_path_rate=0.3,
+ patch_norm=True,
+ out_indices=(0, 1, 2, 3),
+ with_cp=False,
+ convert_weights=True,
+ frozen_stages=-1,
+ init_cfg=None),
+ track_head=dict(
+ type='Mask2FormerTrackHead',
+ in_channels=[192, 384, 768, 1536],
+ num_queries=200),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v3.0/mask2former/'
+ 'mask2former_swin-l-p4-w12-384-in21k_16xb1-lsj-100e_coco-panoptic/'
+ 'mask2former_swin-l-p4-w12-384-in21k_16xb1-lsj-100e_coco-panoptic_'
+ '20220407_104949-82f8d28d.pth'))
+
+# set all layers in backbone to lr_mult=0.1
+# set all norm layers, position_embeding,
+# query_embeding, level_embeding to decay_multi=0.0
+backbone_norm_multi = dict(lr_mult=0.1, decay_mult=0.0)
+backbone_embed_multi = dict(lr_mult=0.1, decay_mult=0.0)
+embed_multi = dict(lr_mult=1.0, decay_mult=0.0)
+custom_keys = {
+ 'backbone': dict(lr_mult=0.1, decay_mult=1.0),
+ 'backbone.patch_embed.norm': backbone_norm_multi,
+ 'backbone.norm': backbone_norm_multi,
+ 'absolute_pos_embed': backbone_embed_multi,
+ 'relative_position_bias_table': backbone_embed_multi,
+ 'query_embed': embed_multi,
+ 'query_feat': embed_multi,
+ 'level_embed': embed_multi
+}
+custom_keys.update({
+ f'backbone.stages.{stage_id}.blocks.{block_id}.norm': backbone_norm_multi
+ for stage_id, num_blocks in enumerate(depths)
+ for block_id in range(num_blocks)
+})
+custom_keys.update({
+ f'backbone.stages.{stage_id}.downsample.norm': backbone_norm_multi
+ for stage_id in range(len(depths) - 1)
+})
+# optimizer
+optim_wrapper = dict(
+ paramwise_cfg=dict(custom_keys=custom_keys, norm_decay_mult=0.0))
diff --git a/configs/mask2former_vis/metafile.yml b/configs/mask2former_vis/metafile.yml
new file mode 100644
index 00000000000..f5f4bd7c577
--- /dev/null
+++ b/configs/mask2former_vis/metafile.yml
@@ -0,0 +1,53 @@
+Collections:
+ - Name: Mask2Former
+ Metadata:
+ Training Techniques:
+ - AdamW
+ - Weight Decay
+ Training Resources: 8x A100 GPUs
+ Architecture:
+ - Mask2Former
+ Paper:
+ URL: https://arxiv.org/pdf/2112.10764.pdf
+ Title: Mask2Former for Video Instance Segmentation
+ README: configs/mask2former/README.md
+
+Models:
+ - Name: mask2former_r50_8xb2-8e_youtubevis2021
+ In Collection: Mask2Former
+ Config: configs/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021.py
+ Metadata:
+ Training Data: YouTube-VIS 2021
+ Training Memory (GB): 6.0
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2021
+ Metrics:
+ AP: 41.3
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/mask2former_vis/mask2former_r50_8xb2-8e_youtubevis2021/mask2former_r50_8xb2-8e_youtubevis2021_20230426_131833-5d215283.pth
+
+ - Name: mask2former_r101_8xb2-8e_youtubevis2021
+ In Collection: Mask2Former
+ Config: configs/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2021.py
+ Metadata:
+ Training Data: YouTube-VIS 2021
+ Training Memory (GB): 7.5
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2021
+ Metrics:
+ AP: 42.3
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/mask2former_vis/mask2former_r101_8xb2-8e_youtubevis2021/mask2former_r101_8xb2-8e_youtubevis2021_20220823_092747-8077d115.pth
+
+ - Name: mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021.py
+ In Collection: Mask2Former
+ Config: configs/mask2former_vis/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021.py
+ Metadata:
+ Training Data: YouTube-VIS 2021
+ Training Memory (GB): 18.5
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2021
+ Metrics:
+ AP: 52.3
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/mask2former_vis/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021/mask2former_swin-l-p4-w12-384-in21k_8xb2-8e_youtubevis2021_20220907_124752-48252603.pth
diff --git a/configs/maskformer/metafile.yml b/configs/maskformer/metafile.yml
index 14f9354db62..fa58269d51c 100644
--- a/configs/maskformer/metafile.yml
+++ b/configs/maskformer/metafile.yml
@@ -28,7 +28,7 @@ Models:
Dataset: COCO
Metrics:
PQ: 46.9
- Weights: https://download.openmmlab.com/mmdetection/v2.0/maskformer/maskformer_r50_mstrain_16x1_75e_coco/maskformer_r50_mstrain_16x1_75e_coco_20220221_141956-bc2699cb.pth
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/maskformer/maskformer_r50_ms-16xb1-75e_coco/maskformer_r50_ms-16xb1-75e_coco_20230116_095226-baacd858.pth
- Name: maskformer_swin-l-p4-w12_64xb1-ms-300e_coco
In Collection: MaskFormer
Config: configs/maskformer/maskformer_swin-l-p4-w12_64xb1-ms-300e_coco.py
@@ -40,4 +40,4 @@ Models:
Dataset: COCO
Metrics:
PQ: 53.2
- Weights: https://download.openmmlab.com/mmdetection/v2.0/maskformer/maskformer_swin-l-p4-w12_mstrain_64x1_300e_coco/maskformer_swin-l-p4-w12_mstrain_64x1_300e_coco_20220326_221612-061b4eb8.pth
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/maskformer/maskformer_swin-l-p4-w12_64xb1-ms-300e_coco/maskformer_swin-l-p4-w12_64xb1-ms-300e_coco_20220326_221612-c63ab967.pth
diff --git a/configs/masktrack_rcnn/README.md b/configs/masktrack_rcnn/README.md
new file mode 100644
index 00000000000..5cef692a382
--- /dev/null
+++ b/configs/masktrack_rcnn/README.md
@@ -0,0 +1,93 @@
+# Video Instance Segmentation
+
+## Abstract
+
+
+
+In this paper we present a new computer vision task, named video instance segmentation. The goal of this new task is simultaneous detection, segmentation and tracking of instances in videos. In words, it is the first time that the image instance segmentation problem is extended to the video domain. To facilitate research on this new task, we propose a large-scale benchmark called YouTube-VIS, which consists of 2883 high-resolution YouTube videos, a 40-category label set and 131k high-quality instance masks. In addition, we propose a novel algorithm called MaskTrack R-CNN for this task. Our new method introduces a new tracking branch to Mask R-CNN to jointly perform the detection, segmentation and tracking tasks simultaneously. Finally, we evaluate the proposed method and several strong baselines on our new dataset. Experimental results clearly demonstrate the advantages of the proposed algorithm and reveal insight for future improvement. We believe the video instance segmentation task will motivate the community along the line of research for video understanding.
+
+
+
+
+
+
+
+## Citation
+
+
+
+```latex
+@inproceedings{yang2019video,
+ title={Video instance segmentation},
+ author={Yang, Linjie and Fan, Yuchen and Xu, Ning},
+ booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
+ pages={5188--5197},
+ year={2019}
+}
+```
+
+## Results and models of MaskTrack R-CNN on YouTube-VIS 2019 validation dataset
+
+As mentioned in [Issues #6](https://github.com/youtubevos/MaskTrackRCNN/issues/6#issuecomment-502503505) in MaskTrack R-CNN, the result is kind of unstable for different trials, which ranges from 28 AP to 31 AP when using R-50-FPN as backbone.
+The checkpoint provided below is the best one from two experiments.
+
+| Method | Base detector | Backbone | Style | Lr schd | Mem (GB) | Inf time (fps) | AP | Config | Download |
+| :-------------: | :-----------: | :-------: | :-----: | :-----: | :------: | :------------: | :--: | :--------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| MaskTrack R-CNN | Mask R-CNN | R-50-FPN | pytorch | 12e | 1.61 | - | 30.2 | [config](masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py) | [model](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2019/masktrack_rcnn_r50_fpn_12e_youtubevis2019_20211022_194830-6ca6b91e.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2019/masktrack_rcnn_r50_fpn_12e_youtubevis2019_20211022_194830.log.json) |
+| MaskTrack R-CNN | Mask R-CNN | R-101-FPN | pytorch | 12e | 2.27 | - | 32.2 | [config](masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2019.py) | [model](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r101_fpn_12e_youtubevis2019/masktrack_rcnn_r101_fpn_12e_youtubevis2019_20211023_150038-454dc48b.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r101_fpn_12e_youtubevis2019/masktrack_rcnn_r101_fpn_12e_youtubevis2019_20211023_150038.log.json) |
+| MaskTrack R-CNN | Mask R-CNN | X-101-FPN | pytorch | 12e | 3.69 | - | 34.7 | [config](masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2019.py) | [model](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_x101_fpn_12e_youtubevis2019/masktrack_rcnn_x101_fpn_12e_youtubevis2019_20211023_153205-fff7a102.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_x101_fpn_12e_youtubevis2019/masktrack_rcnn_x101_fpn_12e_youtubevis2019_20211023_153205.log.json) |
+
+## Results and models of MaskTrack R-CNN on YouTube-VIS 2021 validation dataset
+
+The checkpoint provided below is the best one from two experiments.
+
+| Method | Base detector | Backbone | Style | Lr schd | Mem (GB) | Inf time (fps) | AP | Config | Download |
+| :-------------: | :-----------: | :-------: | :-----: | :-----: | :------: | :------------: | :--: | :--------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| MaskTrack R-CNN | Mask R-CNN | R-50-FPN | pytorch | 12e | 1.61 | - | 28.7 | [config](masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py) | [model](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2021/masktrack_rcnn_r50_fpn_12e_youtubevis2021_20211026_044948-10da90d9.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2021/masktrack_rcnn_r50_fpn_12e_youtubevis2021_20211026_044948.log.json) |
+| MaskTrack R-CNN | Mask R-CNN | R-101-FPN | pytorch | 12e | 2.27 | - | 31.3 | [config](masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2021.py) | [model](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r101_fpn_12e_youtubevis2021/masktrack_rcnn_r101_fpn_12e_youtubevis2021_20211026_045509-3c49e4f3.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r101_fpn_12e_youtubevis2021/masktrack_rcnn_r101_fpn_12e_youtubevis2021_20211026_045509.log.json) |
+| MaskTrack R-CNN | Mask R-CNN | X-101-FPN | pytorch | 12e | 3.69 | - | 33.5 | [config](masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2021.py) | [model](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_x101_fpn_12e_youtubevis2021/masktrack_rcnn_x101_fpn_12e_youtubevis2021_20211026_095943-90831df4.pth) \| [log](https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_x101_fpn_12e_youtubevis2021/masktrack_rcnn_x101_fpn_12e_youtubevis2021_20211026_095943.log.json) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+Due to the influence of parameters such as learning rate in default configuration file, we recommend using 8 GPUs for training in order to reproduce accuracy. You can use the following command to start the training.
+
+```shell
+# Training MaskTrack R-CNN on YouTube-VIS-2021 dataset with following command.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_train.sh configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py 8
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 4. Testing and evaluation
+
+If you want to get the results of the [YouTube-VOS](https://youtube-vos.org/dataset/vis/) val/test set, please use the following command to generate result files that can be used for submission. It will be stored in `./youtube_vis_results.submission_file.zip`, you can modify the saved path in `test_evaluator` of the config.
+
+```shell
+# The number after config file represents the number of GPUs used.
+bash tools/dist_test_tracking.sh configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py 8 --checkpoint ${CHECKPOINT_PATH}
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 5.Inference
+
+Use a single GPU to predict a video and save it as a video.
+
+```shell
+python demo/mot_demo.py demo/demo_mot.mp4 configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py --checkpoint {CHECKPOINT_PATH} --out vis.mp4
+```
+
+If you want to know about more detailed usage of `mot_demo.py`, please refer to this [document](../../docs/en/user_guides/tracking_inference.md).
diff --git a/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2019.py b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2019.py
new file mode 100644
index 00000000000..4be492d5419
--- /dev/null
+++ b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2019.py
@@ -0,0 +1,12 @@
+_base_ = ['./masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py']
+model = dict(
+ detector=dict(
+ backbone=dict(
+ depth=101,
+ init_cfg=dict(
+ type='Pretrained', checkpoint='torchvision://resnet101')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_fpn_1x_coco/mask_rcnn_r101_fpn_1x_coco_20200204-1efe0ed5.pth' # noqa: E501
+ )))
diff --git a/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2021.py b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2021.py
new file mode 100644
index 00000000000..81bae4af8d8
--- /dev/null
+++ b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2021.py
@@ -0,0 +1,28 @@
+_base_ = ['./masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py']
+model = dict(
+ detector=dict(
+ backbone=dict(
+ depth=101,
+ init_cfg=dict(
+ type='Pretrained', checkpoint='torchvision://resnet101')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r101_fpn_1x_coco/mask_rcnn_r101_fpn_1x_coco_20200204-1efe0ed5.pth' # noqa: E501
+ )))
+
+data_root = 'data/youtube_vis_2021/'
+dataset_version = data_root[-5:-1]
+
+# dataloader
+train_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_train.json'))
+val_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_valid.json'))
+test_dataloader = val_dataloader
diff --git a/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py
new file mode 100644
index 00000000000..db1be7b0ddf
--- /dev/null
+++ b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py
@@ -0,0 +1,130 @@
+_base_ = [
+ '../_base_/models/mask-rcnn_r50_fpn.py',
+ '../_base_/datasets/youtube_vis.py', '../_base_/default_runtime.py'
+]
+
+detector = _base_.model
+detector.pop('data_preprocessor')
+detector.roi_head.bbox_head.update(dict(num_classes=40))
+detector.roi_head.mask_head.update(dict(num_classes=40))
+detector.train_cfg.rpn.sampler.update(dict(num=64))
+detector.train_cfg.rpn_proposal.update(dict(nms_pre=200, max_per_img=200))
+detector.train_cfg.rcnn.sampler.update(dict(num=128))
+detector.test_cfg.rpn.update(dict(nms_pre=200, max_per_img=200))
+detector.test_cfg.rcnn.update(dict(score_thr=0.01))
+detector['init_cfg'] = dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth' # noqa: E501
+)
+del _base_.model
+
+model = dict(
+ type='MaskTrackRCNN',
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ mean=[123.675, 116.28, 103.53],
+ std=[58.395, 57.12, 57.375],
+ bgr_to_rgb=True,
+ pad_mask=True,
+ pad_size_divisor=32),
+ detector=detector,
+ track_head=dict(
+ type='RoITrackHead',
+ roi_extractor=dict(
+ type='SingleRoIExtractor',
+ roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),
+ out_channels=256,
+ featmap_strides=[4, 8, 16, 32]),
+ embed_head=dict(
+ type='RoIEmbedHead',
+ num_fcs=2,
+ roi_feat_size=7,
+ in_channels=256,
+ fc_out_channels=1024),
+ train_cfg=dict(
+ assigner=dict(
+ type='MaxIoUAssigner',
+ pos_iou_thr=0.5,
+ neg_iou_thr=0.5,
+ min_pos_iou=0.5,
+ match_low_quality=True,
+ ignore_iof_thr=-1),
+ sampler=dict(
+ type='RandomSampler',
+ num=128,
+ pos_fraction=0.25,
+ neg_pos_ub=-1,
+ add_gt_as_proposals=True),
+ pos_weight=-1,
+ debug=False)),
+ tracker=dict(
+ type='MaskTrackRCNNTracker',
+ match_weights=dict(det_score=1.0, iou=2.0, det_label=10.0),
+ num_frames_retain=20))
+
+dataset_type = 'YouTubeVISDataset'
+data_root = 'data/youtube_vis_2019/'
+dataset_version = data_root[-5:-1] # 2019 or 2021
+
+# train_dataloader
+train_dataloader = dict(
+ _delete_=True,
+ batch_size=1,
+ num_workers=2,
+ persistent_workers=True,
+ sampler=dict(type='TrackImgSampler'), # image-based sampling
+ batch_sampler=dict(type='TrackAspectRatioBatchSampler'),
+ dataset=dict(
+ type=dataset_type,
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2019_train.json',
+ data_prefix=dict(img_path='train/JPEGImages'),
+ pipeline=_base_.train_pipeline))
+
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(type='SGD', lr=0.00125, momentum=0.9, weight_decay=0.0001),
+ clip_grad=dict(max_norm=35, norm_type=2))
+
+# learning policy
+param_scheduler = [
+ dict(
+ type='LinearLR',
+ start_factor=1.0 / 3.0,
+ by_epoch=False,
+ begin=0,
+ end=500),
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=12,
+ by_epoch=True,
+ milestones=[8, 11],
+ gamma=0.1)
+]
+
+# visualizer
+default_hooks = dict(
+ visualization=dict(type='TrackVisualizationHook', draw=False))
+
+vis_backends = [dict(type='LocalVisBackend')]
+visualizer = dict(
+ type='TrackLocalVisualizer', vis_backends=vis_backends, name='visualizer')
+
+# runtime settings
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=12, val_begin=13)
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
+
+# evaluator
+val_evaluator = dict(
+ type='YouTubeVISMetric',
+ metric='youtube_vis_ap',
+ outfile_prefix='./youtube_vis_results',
+ format_only=True)
+test_evaluator = val_evaluator
+
+del detector
diff --git a/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py
new file mode 100644
index 00000000000..47263d5091c
--- /dev/null
+++ b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py
@@ -0,0 +1,17 @@
+_base_ = ['./masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py']
+
+data_root = 'data/youtube_vis_2021/'
+dataset_version = data_root[-5:-1]
+
+# dataloader
+train_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_train.json'))
+val_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_valid.json'))
+test_dataloader = val_dataloader
diff --git a/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2019.py b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2019.py
new file mode 100644
index 00000000000..e7e3f11e13a
--- /dev/null
+++ b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2019.py
@@ -0,0 +1,16 @@
+_base_ = ['./masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py']
+model = dict(
+ detector=dict(
+ backbone=dict(
+ type='ResNeXt',
+ depth=101,
+ groups=64,
+ base_width=4,
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint='open-mmlab://resnext101_64x4d')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco/mask_rcnn_x101_64x4d_fpn_1x_coco_20200201-9352eb0d.pth' # noqa: E501
+ )))
diff --git a/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2021.py b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2021.py
new file mode 100644
index 00000000000..ea4c8b92483
--- /dev/null
+++ b/configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2021.py
@@ -0,0 +1,32 @@
+_base_ = ['./masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py']
+model = dict(
+ detector=dict(
+ backbone=dict(
+ type='ResNeXt',
+ depth=101,
+ groups=64,
+ base_width=4,
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint='open-mmlab://resnext101_64x4d')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_x101_64x4d_fpn_1x_coco/mask_rcnn_x101_64x4d_fpn_1x_coco_20200201-9352eb0d.pth' # noqa: E501
+ )))
+
+data_root = 'data/youtube_vis_2021/'
+dataset_version = data_root[-5:-1]
+
+# dataloader
+train_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_train.json'))
+val_dataloader = dict(
+ dataset=dict(
+ data_root=data_root,
+ dataset_version=dataset_version,
+ ann_file='annotations/youtube_vis_2021_valid.json'))
+test_dataloader = val_dataloader
diff --git a/configs/masktrack_rcnn/metafile.yml b/configs/masktrack_rcnn/metafile.yml
new file mode 100644
index 00000000000..7a1d71d582d
--- /dev/null
+++ b/configs/masktrack_rcnn/metafile.yml
@@ -0,0 +1,91 @@
+Collections:
+ - Name: MaskTrack R-CNN
+ Metadata:
+ Training Techniques:
+ - SGD with Momentum
+ Training Resources: 8x TiTanXP GPUs
+ Architecture:
+ - ResNet
+ Paper:
+ URL: https://arxiv.org/pdf/1905.04804.pdf
+ Title: Video Instance Segmentation
+ README: configs/masktrack_rcnn/README.md
+
+Models:
+ - Name: masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019
+ In Collection: MaskTrack R-CNN
+ Config: configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2019.py
+ Metadata:
+ Training Data: YouTube-VIS 2019
+ Training Memory (GB): 1.16
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2019
+ Metrics:
+ AP: 30.2
+ Weights: https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2019/masktrack_rcnn_r50_fpn_12e_youtubevis2019_20211022_194830-6ca6b91e.pth
+
+ - Name: masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2019
+ In Collection: MaskTrack R-CNN
+ Config: configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2019.py
+ Metadata:
+ Training Data: YouTube-VIS 2019
+ Training Memory (GB): 2.27
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2019
+ Metrics:
+ AP: 32.2
+ Weights: https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r101_fpn_12e_youtubevis2019/masktrack_rcnn_r101_fpn_12e_youtubevis2019_20211023_150038-454dc48b.pth
+
+ - Name: masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2019
+ In Collection: MaskTrack R-CNN
+ Config: configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2019.py
+ Metadata:
+ Training Data: YouTube-VIS 2019
+ Training Memory (GB): 3.69
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2019
+ Metrics:
+ AP: 34.7
+ Weights: https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_x101_fpn_12e_youtubevis2019/masktrack_rcnn_x101_fpn_12e_youtubevis2019_20211023_153205-fff7a102.pth
+
+ - Name: masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021
+ In Collection: MaskTrack R-CNN
+ Config: configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r50_fpn_8xb1-12e_youtubevis2021.py
+ Metadata:
+ Training Data: YouTube-VIS 2021
+ Training Memory (GB): 1.16
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2021
+ Metrics:
+ AP: 28.7
+ Weights: https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r50_fpn_12e_youtubevis2021/masktrack_rcnn_r50_fpn_12e_youtubevis2021_20211026_044948-10da90d9.pth
+
+ - Name: masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2021
+ In Collection: MaskTrack R-CNN
+ Config: configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_r101_fpn_8xb1-12e_youtubevis2021.py
+ Metadata:
+ Training Data: YouTube-VIS 2021
+ Training Memory (GB): 2.27
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2021
+ Metrics:
+ AP: 31.3
+ Weights: https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_r101_fpn_12e_youtubevis2021/masktrack_rcnn_r101_fpn_12e_youtubevis2021_20211026_045509-3c49e4f3.pth
+
+ - Name: masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2021
+ In Collection: MaskTrack R-CNN
+ Config: configs/masktrack_rcnn/masktrack-rcnn_mask-rcnn_x101_fpn_8xb1-12e_youtubevis2021.py
+ Metadata:
+ Training Data: YouTube-VIS 2021
+ Training Memory (GB): 3.69
+ Results:
+ - Task: Video Instance Segmentation
+ Dataset: YouTube-VIS 2021
+ Metrics:
+ AP: 33.5
+ Weights: https://download.openmmlab.com/mmtracking/vis/masktrack_rcnn/masktrack_rcnn_x101_fpn_12e_youtubevis2021/masktrack_rcnn_x101_fpn_12e_youtubevis2021_20211026_095943-90831df4.pth
diff --git a/configs/ocsort/README.md b/configs/ocsort/README.md
new file mode 100644
index 00000000000..e9b86c6c6c1
--- /dev/null
+++ b/configs/ocsort/README.md
@@ -0,0 +1,56 @@
+# Observation-Centric SORT: Rethinking SORT for Robust Multi-Object Tracking
+
+## Abstract
+
+
+
+Multi-Object Tracking (MOT) has rapidly progressed with the development of object detection and re-identification. However, motion modeling, which facilitates object association by forecasting short-term trajec- tories with past observations, has been relatively under-explored in recent years. Current motion models in MOT typically assume that the object motion is linear in a small time window and needs continuous observations, so these methods are sensitive to occlusions and non-linear motion and require high frame-rate videos. In this work, we show that a simple motion model can obtain state-of-the-art tracking performance without other cues like appearance. We emphasize the role of “observation” when recovering tracks from being lost and reducing the error accumulated by linear motion models during the lost period. We thus name the proposed method as Observation-Centric SORT, OC-SORT for short. It remains simple, online, and real-time but improves robustness over occlusion and non-linear motion. It achieves 63.2 and 62.1 HOTA on MOT17 and MOT20, respectively, surpassing all published methods. It also sets new states of the art on KITTI Pedestrian Tracking and DanceTrack where the object motion is highly non-linear
+
+
+
+
+
+
+
+## Citation
+
+
+
+```latex
+@article{cao2022observation,
+ title={Observation-Centric SORT: Rethinking SORT for Robust Multi-Object Tracking},
+ author={Cao, Jinkun and Weng, Xinshuo and Khirodkar, Rawal and Pang, Jiangmiao and Kitani, Kris},
+ journal={arXiv preprint arXiv:2203.14360},
+ year={2022}
+}
+```
+
+## Results and models on MOT17
+
+The performance on `MOT17-half-val` is comparable with the performance from [the OC-SORT official implementation](https://github.com/noahcao/OC_SORT). We use the same YOLO-X detector weights as in [ByteTrack](https://github.com/open-mmlab/mmtracking/tree/master/configs/mot/bytetrack).
+
+| Method | Detector | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :-----: | :------: | :---------------------: | :------: | :----: | :------------: | :--: | :--: | :--: | :---: | :---: | :---: | :-------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| OC-SORT | YOLOX-X | CrowdHuman + half-train | half-val | N | - | 67.5 | 77.5 | 78.2 | 15987 | 19590 | 855 | [config](ocsort_yolox_x_crowdhuman_mot17-private-half.py) | [model](https://download.openmmlab.com/mmtracking/mot/ocsort/mot_dataset/ocsort_yolox_x_crowdhuman_mot17-private-half_20220813_101618-fe150582.pth) \| [log](https://download.openmmlab.com/mmtracking/mot/ocsort/mot_dataset/ocsort_yolox_x_crowdhuman_mot17-private-half_20220813_101618.log.json) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+OCSORT training is same as Bytetrack, please refer to [document](../../configs/bytetrack/README.md).
+
+### 4. Testing and evaluation
+
+OCSORT evaluation and test are same as Bytetrack, please refer to [document](../../configs/bytetrack/README.md).
+
+### 5.Inference
+
+OCSORT inference is same as Bytetrack, please refer to [document](../../configs/bytetrack/README.md).
diff --git a/configs/ocsort/metafile.yml b/configs/ocsort/metafile.yml
new file mode 100644
index 00000000000..0a31ef108ea
--- /dev/null
+++ b/configs/ocsort/metafile.yml
@@ -0,0 +1,27 @@
+Collections:
+ - Name: OCSORT
+ Metadata:
+ Training Techniques:
+ - SGD with Momentum
+ Training Resources: 8x V100 GPUs
+ Architecture:
+ - YOLOX
+ Paper:
+ URL: https://arxiv.org/abs/2203.14360
+ Title: Observation-Centric SORT Rethinking SORT for Robust Multi-Object Tracking
+ README: configs/ocsort/README.md
+
+Models:
+ - Name: ocsort_yolox_x_crowdhuman_mot17-private-half
+ In Collection: OCSORT
+ Config: configs/ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
+ Metadata:
+ Training Data: CrowdHuman + MOT17-half-train
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT17-half-val
+ Metrics:
+ HOTA: 67.5
+ MOTA: 77.5
+ IDF1: 78.2
+ Weights: https://download.openmmlab.com/mmtracking/mot/ocsort/mot_dataset/ocsort_yolox_x_crowdhuman_mot17-private-half_20220813_101618-fe150582.pth
diff --git a/configs/ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py b/configs/ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..ea04923d6ae
--- /dev/null
+++ b/configs/ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,18 @@
+_base_ = [
+ '../bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py', # noqa: E501
+]
+
+model = dict(
+ type='OCSORT',
+ tracker=dict(
+ _delete_=True,
+ type='OCSORTTracker',
+ motion=dict(type='KalmanFilter'),
+ obj_score_thr=0.3,
+ init_track_thr=0.7,
+ weight_iou_with_det_scores=True,
+ match_iou_thr=0.3,
+ num_tentatives=3,
+ vel_consist_weight=0.2,
+ vel_delta_t=3,
+ num_frames_retain=30))
diff --git a/configs/ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py b/configs/ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py
new file mode 100644
index 00000000000..ea04923d6ae
--- /dev/null
+++ b/configs/ocsort/ocsort_yolox_x_8xb4-amp-80e_crowdhuman-mot20train_test-mot20test.py
@@ -0,0 +1,18 @@
+_base_ = [
+ '../bytetrack/bytetrack_yolox_x_8xb4-amp-80e_crowdhuman-mot17halftrain_test-mot17halfval.py', # noqa: E501
+]
+
+model = dict(
+ type='OCSORT',
+ tracker=dict(
+ _delete_=True,
+ type='OCSORTTracker',
+ motion=dict(type='KalmanFilter'),
+ obj_score_thr=0.3,
+ init_track_thr=0.7,
+ weight_iou_with_det_scores=True,
+ match_iou_thr=0.3,
+ num_tentatives=3,
+ vel_consist_weight=0.2,
+ vel_delta_t=3,
+ num_frames_retain=30))
diff --git a/configs/qdtrack/README.md b/configs/qdtrack/README.md
new file mode 100644
index 00000000000..5a6efe7d3fd
--- /dev/null
+++ b/configs/qdtrack/README.md
@@ -0,0 +1,89 @@
+# Quasi-Dense Similarity Learning for Multiple Object Tracking
+
+## Abstract
+
+
+
+Similarity learning has been recognized as a crucial step for object tracking. However, existing multiple object tracking methods only use sparse ground truth matching as the training objective, while ignoring the majority of the informative regions on the images. In this paper, we present Quasi-Dense Similarity Learning, which densely samples hundreds of region proposals on a pair of images for contrastive learning. We can directly combine this similarity learning with existing detection methods to build Quasi-Dense Tracking (QDTrack) without turning to displacementregression or motion priors. We also find that the resulting distinctive feature space admits a simple nearest neighbor search at the inference time. Despite its simplicity, QD-Track outperforms all existing methods on MOT, BDD100K, Waymo, and TAO tracking benchmarks. It achieves 68.7 MOTA at 20.3 FPS on MOT17 without using external training data. Compared to methods with similar detectors, it boosts almost 10 points of MOTA and significantly decreases the number of ID switches on BDD100K and Waymo datasets.
+
+
+
+
+
+
+
+
+## Results and models on MOT17
+
+| Method | Detector | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :-----: | :----------: | :--------: | :------: | :----: | :------------: | :--: | :--: | :--: | :--: | :---: | :---: | :-------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| QDTrack | Faster R-CNN | half-train | half-val | N | - | 57.1 | 68.1 | 68.6 | 7707 | 42732 | 1083 | [config](qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py) | [model](https://download.openmmlab.com/mmtracking/mot/qdtrack/mot_dataset/qdtrack_faster-rcnn_r50_fpn_4e_mot17_20220315_145635-76f295ef.pth) \| [log](https://download.openmmlab.com/mmtracking/mot/qdtrack/mot_dataset/qdtrack_faster-rcnn_r50_fpn_4e_mot17_20220315_145635.log.json) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+Due to the influence of parameters such as learning rate in default configuration file, we recommend using 8 GPUs for training in order to reproduce accuracy. You can use the following command to start the training.
+
+```shell
+# Training QDTrack on mot17-half-train dataset with following command.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_train.sh configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 4. Testing and evaluation
+
+**4.1 Example on MOTxx-halfval dataset**
+
+```shell
+# Example 1: Test on motXX-half-val set
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_test_tracking.sh configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8 --checkpoint ${CHECKPOINT_PATH}
+```
+
+**4.2 use video_baesd to evaluating and testing**
+we also provide two_ways(img_based or video_based) to evaluating and testing.
+if you want to use video_based to evaluating and testing, you can modify config as follows
+
+```
+val_dataloader = dict(
+ sampler=dict(type='DefaultSampler', shuffle=False, round_up=False))
+```
+
+If you want to know about more detailed usage of `test_tracking.py/dist_test_tracking.sh/slurm_test_tracking.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 5.Inference
+
+Use a single GPU to predict a video and save it as a video.
+
+```shell
+python demo/mot_demo.py demo/demo_mot.mp4 configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py --checkpoint ${CHECKPOINT_PATH} --out mot.mp4
+```
+
+If you want to know about more detailed usage of `mot_demo.py`, please refer to this [document](../../docs/en/user_guides/tracking_inference.md).
+
+## Citation
+
+
+
+```latex
+@inproceedings{pang2021quasi,
+ title={Quasi-dense similarity learning for multiple object tracking},
+ author={Pang, Jiangmiao and Qiu, Linlu and Li, Xia and Chen, Haofeng and Li, Qi and Darrell, Trevor and Yu, Fisher},
+ booktitle={Proceedings of the IEEE/CVF conference on computer vision and pattern recognition},
+ pages={164--173},
+ year={2021}
+}
+```
diff --git a/configs/qdtrack/metafile.yml b/configs/qdtrack/metafile.yml
new file mode 100644
index 00000000000..e5c5504d1bd
--- /dev/null
+++ b/configs/qdtrack/metafile.yml
@@ -0,0 +1,30 @@
+Collections:
+ - Name: QDTrack
+ Metadata:
+ Training Data: MOT17, crowdhuman
+ Training Techniques:
+ - SGD
+ Training Resources: 8x V100 GPUs
+ Architecture:
+ - ResNet
+ Paper:
+ URL: https://arxiv.org/pdf/2006.06664.pdf
+ Title: Quasi-Dense Similarity Learning for Multiple Object Tracking
+ README: configs/qdtrack/README.md
+
+Models:
+ - Name: qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval
+ In Collection: QDTrack
+ Config: configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
+ Metadata:
+ Training Data: MOT17
+ Training Memory (GB): 5.83
+ Epochs: 4
+ Results:
+ - Task: Multi-object Tracking
+ Dataset: MOT17
+ Metrics:
+ HOTA: 57.1
+ MOTA: 68.1
+ IDF1: 68.6
+ Weights: https://download.openmmlab.com/mmtracking/mot/qdtrack/mot_dataset/qdtrack_faster-rcnn_r50_fpn_4e_mot17_20220315_145635-76f295ef.pth
diff --git a/configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_4e_base.py b/configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_4e_base.py
new file mode 100644
index 00000000000..e3c17c3eb97
--- /dev/null
+++ b/configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_4e_base.py
@@ -0,0 +1,118 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py', '../_base_/default_runtime.py'
+]
+
+detector = _base_.model
+detector.pop('data_preprocessor')
+
+detector['backbone'].update(
+ dict(
+ norm_cfg=dict(type='BN', requires_grad=False),
+ style='caffe',
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint='open-mmlab://detectron2/resnet50_caffe')))
+detector.rpn_head.loss_bbox.update(
+ dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0))
+detector.rpn_head.bbox_coder.update(dict(clip_border=False))
+detector.roi_head.bbox_head.update(dict(num_classes=1))
+detector.roi_head.bbox_head.bbox_coder.update(dict(clip_border=False))
+detector['init_cfg'] = dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/'
+ 'faster_rcnn_r50_fpn_1x_coco-person/'
+ 'faster_rcnn_r50_fpn_1x_coco-person_20201216_175929-d022e227.pth'
+ # noqa: E501
+)
+del _base_.model
+
+model = dict(
+ type='QDTrack',
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ mean=[103.530, 116.280, 123.675],
+ std=[1.0, 1.0, 1.0],
+ bgr_to_rgb=False,
+ pad_size_divisor=32),
+ detector=detector,
+ track_head=dict(
+ type='QuasiDenseTrackHead',
+ roi_extractor=dict(
+ type='SingleRoIExtractor',
+ roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),
+ out_channels=256,
+ featmap_strides=[4, 8, 16, 32]),
+ embed_head=dict(
+ type='QuasiDenseEmbedHead',
+ num_convs=4,
+ num_fcs=1,
+ embed_channels=256,
+ norm_cfg=dict(type='GN', num_groups=32),
+ loss_track=dict(type='MultiPosCrossEntropyLoss', loss_weight=0.25),
+ loss_track_aux=dict(
+ type='MarginL2Loss',
+ neg_pos_ub=3,
+ pos_margin=0,
+ neg_margin=0.1,
+ hard_mining=True,
+ loss_weight=1.0)),
+ loss_bbox=dict(type='L1Loss', loss_weight=1.0),
+ train_cfg=dict(
+ assigner=dict(
+ type='MaxIoUAssigner',
+ pos_iou_thr=0.7,
+ neg_iou_thr=0.5,
+ min_pos_iou=0.5,
+ match_low_quality=False,
+ ignore_iof_thr=-1),
+ sampler=dict(
+ type='CombinedSampler',
+ num=256,
+ pos_fraction=0.5,
+ neg_pos_ub=3,
+ add_gt_as_proposals=True,
+ pos_sampler=dict(type='InstanceBalancedPosSampler'),
+ neg_sampler=dict(type='RandomSampler')))),
+ tracker=dict(
+ type='QuasiDenseTracker',
+ init_score_thr=0.9,
+ obj_score_thr=0.5,
+ match_score_thr=0.5,
+ memo_tracklet_frames=30,
+ memo_backdrop_frames=1,
+ memo_momentum=0.8,
+ nms_conf_thr=0.5,
+ nms_backdrop_iou_thr=0.3,
+ nms_class_iou_thr=0.7,
+ with_cats=True,
+ match_metric='bisoftmax'))
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001),
+ clip_grad=dict(max_norm=35, norm_type=2))
+# learning policy
+param_scheduler = [
+ dict(type='MultiStepLR', begin=0, end=4, by_epoch=True, milestones=[3])
+]
+
+# runtime settings
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=4, val_interval=4)
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
+
+default_hooks = dict(
+ logger=dict(type='LoggerHook', interval=50),
+ visualization=dict(type='TrackVisualizationHook', draw=False))
+
+vis_backends = [dict(type='LocalVisBackend')]
+visualizer = dict(
+ type='TrackLocalVisualizer', vis_backends=vis_backends, name='visualizer')
+
+# custom hooks
+custom_hooks = [
+ # Synchronize model buffers such as running_mean and running_var in BN
+ # at the end of each epoch
+ dict(type='SyncBuffersHook')
+]
diff --git a/configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py b/configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..d87604dad6b
--- /dev/null
+++ b/configs/qdtrack/qdtrack_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,14 @@
+_base_ = [
+ './qdtrack_faster-rcnn_r50_fpn_4e_base.py',
+ '../_base_/datasets/mot_challenge.py',
+]
+
+# evaluator
+val_evaluator = [
+ dict(type='CocoVideoMetric', metric=['bbox'], classwise=True),
+ dict(type='MOTChallengeMetric', metric=['HOTA', 'CLEAR', 'Identity'])
+]
+
+test_evaluator = val_evaluator
+# The fluctuation of HOTA is about +-1.
+randomness = dict(seed=6)
diff --git a/configs/reid/README.md b/configs/reid/README.md
new file mode 100644
index 00000000000..a5bfe5ec499
--- /dev/null
+++ b/configs/reid/README.md
@@ -0,0 +1,135 @@
+# Training a ReID Model
+
+You may want to train a ReID model for multiple object tracking or other applications. We support ReID model training in MMDetection, which is built upon [MMPretrain](https://github.com/open-mmlab/mmpretrain).
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Preparation
+
+This section will show how to train a ReID model on standard datasets i.e. MOT17.
+
+We need to download datasets following docs. We use [ReIDDataset](mmdet/datasets/reid_dataset.py) to maintain standard datasets. In this case, you need to convert the official dataset to this style. We provide scripts and the usages as follow:
+
+```python
+python tools/dataset_converters/mot2reid.py -i ./data/MOT17/ -o ./data/MOT17/reid --val-split 0.2 --vis-threshold 0.3
+```
+
+Arguments:
+
+- `--val-split`: Proportion of the validation dataset to the whole ReID dataset.
+- `--vis-threshold`: Threshold of visibility for each person.
+
+The directory of the converted datasets is as follows:
+
+```
+MOT17
+├── train
+├── test
+├── reid
+│ ├── imgs
+│ │ ├── MOT17-02-FRCNN_000002
+│ │ │ ├── 000000.jpg
+│ │ │ ├── 000001.jpg
+│ │ │ ├── ...
+│ │ ├── MOT17-02-FRCNN_000003
+│ │ │ ├── 000000.jpg
+│ │ │ ├── 000001.jpg
+│ │ │ ├── ...
+│ ├── meta
+│ │ ├── train_80.txt
+│ │ ├── val_20.txt
+```
+
+Note: `80` in `train_80.txt` means the proportion of the training dataset to the whole ReID dataset is eighty percent. While the proportion of the validation dataset is twenty percent.
+
+For training, we provide a annotation list `train_80.txt`. Each line of the list constraints a filename and its corresponding ground-truth labels. The format is as follows:
+
+```
+MOT17-05-FRCNN_000110/000018.jpg 0
+MOT17-13-FRCNN_000146/000014.jpg 1
+MOT17-05-FRCNN_000088/000004.jpg 2
+MOT17-02-FRCNN_000009/000081.jpg 3
+```
+
+For validation, The annotation list `val_20.txt` remains the same as format above.
+
+Note: Images in `MOT17/reid/imgs` are cropped from raw images in `MOT17/train` by the corresponding `gt.txt`. The value of ground-truth labels should fall in range `[0, num_classes - 1]`.
+
+### 3. Training
+
+#### Training on a single GPU
+
+```shell
+python tools/train.py configs/reid/reid_r50_8xb32-6e_mot17train80_test-mot17val20.py
+```
+
+#### Training on multiple GPUs
+
+We provide `tools/dist_train.sh` to launch training on multiple GPUs.
+The basic usage is as follows.
+
+```shell
+bash tools/dist_train.sh configs/reid/reid_r50_8xb32-6e_mot17train80_test-mot17val20.py 8
+```
+
+### 4. Customize Dataset
+
+This section will show how to train a ReID model on customize datasets.
+
+### 4.1 Dataset Preparation
+
+You need to convert your customize datasets to existing dataset format.
+
+#### An example of customized dataset
+
+Assume we are going to implement a `Filelist` dataset, which takes filelists for both training and testing. The directory of the dataset is as follows:
+
+```
+Filelist
+├── imgs
+│ ├── person1
+│ │ ├── 000000.jpg
+│ │ ├── 000001.jpg
+│ │ ├── ...
+│ ├── person2
+│ │ ├── 000000.jpg
+│ │ ├── 000001.jpg
+│ │ ├── ...
+├── meta
+│ ├── train.txt
+│ ├── val.txt
+```
+
+The format of annotation list is as follows:
+
+```
+person1/000000.jpg 0
+person1/000001.jpg 0
+person2/000000.jpg 1
+person2/000001.jpg 1
+```
+
+You can directly use [ReIDDataset](mmdet/datasets/reid_dataset.py). In this case, you only need to modify the config as follows:
+
+```python
+# modify the path of annotation files and the image path prefix
+data = dict(
+ train=dict(
+ data_prefix='data/Filelist/imgs',
+ ann_file='data/Filelist/meta/train.txt'),
+ val=dict(
+ data_prefix='data/Filelist/imgs',
+ ann_file='data/Filelist/meta/val.txt'),
+ test=dict(
+ data_prefix='data/Filelist/imgs',
+ ann_file='data/Filelist/meta/val.txt'),
+)
+# modify the number of classes, assume your training set has 100 classes
+model = dict(reid=dict(head=dict(num_classes=100)))
+```
+
+### 4.2 Training
+
+The training stage is the same as `Standard Dataset`.
diff --git a/configs/reid/reid_r50_8xb32-6e_mot15train80_test-mot15val20.py b/configs/reid/reid_r50_8xb32-6e_mot15train80_test-mot15val20.py
new file mode 100644
index 00000000000..4e30b22964d
--- /dev/null
+++ b/configs/reid/reid_r50_8xb32-6e_mot15train80_test-mot15val20.py
@@ -0,0 +1,7 @@
+_base_ = ['./reid_r50_8xb32-6e_mot17train80_test-mot17val20.py']
+model = dict(head=dict(num_classes=368))
+# data
+data_root = 'data/MOT15/'
+train_dataloader = dict(dataset=dict(data_root=data_root))
+val_dataloader = dict(dataset=dict(data_root=data_root))
+test_dataloader = val_dataloader
diff --git a/configs/reid/reid_r50_8xb32-6e_mot16train80_test-mot16val20.py b/configs/reid/reid_r50_8xb32-6e_mot16train80_test-mot16val20.py
new file mode 100644
index 00000000000..468b9bfb245
--- /dev/null
+++ b/configs/reid/reid_r50_8xb32-6e_mot16train80_test-mot16val20.py
@@ -0,0 +1,7 @@
+_base_ = ['./reid_r50_8xb32-6e_mot17train80_test-mot17val20.py']
+model = dict(head=dict(num_classes=371))
+# data
+data_root = 'data/MOT16/'
+train_dataloader = dict(dataset=dict(data_root=data_root))
+val_dataloader = dict(dataset=dict(data_root=data_root))
+test_dataloader = val_dataloader
diff --git a/configs/reid/reid_r50_8xb32-6e_mot17train80_test-mot17val20.py b/configs/reid/reid_r50_8xb32-6e_mot17train80_test-mot17val20.py
new file mode 100644
index 00000000000..83669de7c17
--- /dev/null
+++ b/configs/reid/reid_r50_8xb32-6e_mot17train80_test-mot17val20.py
@@ -0,0 +1,61 @@
+_base_ = [
+ '../_base_/datasets/mot_challenge_reid.py', '../_base_/default_runtime.py'
+]
+model = dict(
+ type='BaseReID',
+ data_preprocessor=dict(
+ type='ReIDDataPreprocessor',
+ mean=[123.675, 116.28, 103.53],
+ std=[58.395, 57.12, 57.375],
+ to_rgb=True),
+ backbone=dict(
+ type='mmpretrain.ResNet',
+ depth=50,
+ num_stages=4,
+ out_indices=(3, ),
+ style='pytorch'),
+ neck=dict(type='GlobalAveragePooling', kernel_size=(8, 4), stride=1),
+ head=dict(
+ type='LinearReIDHead',
+ num_fcs=1,
+ in_channels=2048,
+ fc_channels=1024,
+ out_channels=128,
+ num_classes=380,
+ loss_cls=dict(type='mmpretrain.CrossEntropyLoss', loss_weight=1.0),
+ loss_triplet=dict(type='TripletLoss', margin=0.3, loss_weight=1.0),
+ norm_cfg=dict(type='BN1d'),
+ act_cfg=dict(type='ReLU')),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmclassification/v0/resnet/resnet50_batch256_imagenet_20200708-cfb998bf.pth' # noqa: E501
+ ))
+
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ clip_grad=None,
+ optimizer=dict(type='SGD', lr=0.1, momentum=0.9, weight_decay=0.0001))
+
+# learning policy
+param_scheduler = [
+ dict(
+ type='LinearLR',
+ start_factor=1.0 / 1000,
+ by_epoch=False,
+ begin=0,
+ end=1000),
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=6,
+ by_epoch=True,
+ milestones=[5],
+ gamma=0.1)
+]
+
+# train, val, test setting
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=6, val_interval=1)
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
diff --git a/configs/reid/reid_r50_8xb32-6e_mot20train80_test-mot20val20.py b/configs/reid/reid_r50_8xb32-6e_mot20train80_test-mot20val20.py
new file mode 100644
index 00000000000..8a807996186
--- /dev/null
+++ b/configs/reid/reid_r50_8xb32-6e_mot20train80_test-mot20val20.py
@@ -0,0 +1,10 @@
+_base_ = ['./reid_r50_8xb32-6e_mot17train80_test-mot17val20.py']
+model = dict(head=dict(num_classes=1701))
+# data
+data_root = 'data/MOT20/'
+train_dataloader = dict(dataset=dict(data_root=data_root))
+val_dataloader = dict(dataset=dict(data_root=data_root))
+test_dataloader = val_dataloader
+
+# train, val, test setting
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=6, val_interval=7)
diff --git a/configs/retinanet/retinanet_r50-caffe_fpn_ms-1x_coco.py b/configs/retinanet/retinanet_r50-caffe_fpn_ms-1x_coco.py
index 24b6d60078f..93687d8c27b 100644
--- a/configs/retinanet/retinanet_r50-caffe_fpn_ms-1x_coco.py
+++ b/configs/retinanet/retinanet_r50-caffe_fpn_ms-1x_coco.py
@@ -5,8 +5,8 @@
dict(type='LoadAnnotations', with_bbox=True),
dict(
type='RandomChoiceResize',
- scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736), (1333, 768),
- (1333, 800)],
+ scales=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),
+ (1333, 768), (1333, 800)],
keep_ratio=True),
dict(type='RandomFlip', prob=0.5),
dict(type='PackDetInputs')
diff --git a/configs/rtmdet/README.md b/configs/rtmdet/README.md
index 02c95466cc7..5ea574dd78b 100644
--- a/configs/rtmdet/README.md
+++ b/configs/rtmdet/README.md
@@ -350,7 +350,7 @@ wget -P checkpoint https://download.openmmlab.com/mmdetection/v3.0/rtmdet/rtmdet
python tools/deploy.py \
configs/mmdet/instance-seg/instance-seg_rtmdet-ins_tensorrt_static-640x640.py \
${PATH_TO_MMDET}/configs/rtmdet/rtmdet-ins_s_8xb32-300e_coco.py \
- checkpoint/rtmdet-ins_s_8xb32-300e_coco/rtmdet-ins_s_8xb32-300e_coco_20221121_212604-fdc5d7ec.pth \
+ checkpoint/rtmdet-ins_s_8xb32-300e_coco_20221121_212604-fdc5d7ec.pth \
demo/resources/det.jpg \
--work-dir ./work_dirs/rtmdet-ins \
--device cuda:0 \
diff --git a/configs/rtmdet/classification/README.md b/configs/rtmdet/classification/README.md
index 6aee2c61794..acc127db2ca 100644
--- a/configs/rtmdet/classification/README.md
+++ b/configs/rtmdet/classification/README.md
@@ -4,23 +4,23 @@ In this folder, we provide the imagenet pre-training config of RTMDet's backbone
## Requirements
-To train with these configs, please install [MMClassification 1.x](https://github.com/open-mmlab/mmclassification/tree/1.x) first.
+To train with these configs, please install [MMPreTrain](https://github.com/open-mmlab/mmpretrain) first.
Install by MIM:
```shell
-mim install mmcls>=1.0.0rc0
+mim install mmpretrain
```
or install by pip:
```shell
-pip install mmcls>=1.0.0rc0
+pip install mmpretrain
```
## Prepare Dataset
-To pre-train on ImageNet, you need to prepare the dataset first. Please refer to the [guide](https://mmclassification.readthedocs.io/en/1.x/user_guides/dataset_prepare.html#imagenet).
+To pre-train on ImageNet, you need to prepare the dataset first. Please refer to the [guide](https://mmpretrain.readthedocs.io/en/latest/user_guides/dataset_prepare.html#imagenet).
## How to Train
diff --git a/configs/rtmdet/classification/cspnext-s_8xb256-rsb-a1-600e_in1k.py b/configs/rtmdet/classification/cspnext-s_8xb256-rsb-a1-600e_in1k.py
index 5708a45e632..dcfd2ea47d5 100644
--- a/configs/rtmdet/classification/cspnext-s_8xb256-rsb-a1-600e_in1k.py
+++ b/configs/rtmdet/classification/cspnext-s_8xb256-rsb-a1-600e_in1k.py
@@ -1,7 +1,7 @@
_base_ = [
- 'mmcls::_base_/datasets/imagenet_bs256_rsb_a12.py',
- 'mmcls::_base_/schedules/imagenet_bs2048_rsb.py',
- 'mmcls::_base_/default_runtime.py'
+ 'mmpretrain::_base_/datasets/imagenet_bs256_rsb_a12.py',
+ 'mmpretrain::_base_/schedules/imagenet_bs2048_rsb.py',
+ 'mmpretrain::_base_/default_runtime.py'
]
model = dict(
diff --git a/configs/rtmdet/rtmdet_l_8xb32-300e_coco.py b/configs/rtmdet/rtmdet_l_8xb32-300e_coco.py
index e4c46aadbda..1cce4d89c84 100644
--- a/configs/rtmdet/rtmdet_l_8xb32-300e_coco.py
+++ b/configs/rtmdet/rtmdet_l_8xb32-300e_coco.py
@@ -102,6 +102,7 @@
dict(type='LoadImageFromFile', backend_args={{_base_.backend_args}}),
dict(type='Resize', scale=(640, 640), keep_ratio=True),
dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),
+ dict(type='LoadAnnotations', with_bbox=True),
dict(
type='PackDetInputs',
meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
diff --git a/configs/rtmdet/rtmdet_tta.py b/configs/rtmdet/rtmdet_tta.py
index f7adcbc712a..6dde36de3ff 100644
--- a/configs/rtmdet/rtmdet_tta.py
+++ b/configs/rtmdet/rtmdet_tta.py
@@ -25,6 +25,7 @@
size=(960, 960),
pad_val=dict(img=(114, 114, 114))),
],
+ [dict(type='LoadAnnotations', with_bbox=True)],
[
dict(
type='PackDetInputs',
diff --git a/configs/soft_teacher/README.md b/configs/soft_teacher/README.md
index 2d9019da70f..1fd3d84dc36 100644
--- a/configs/soft_teacher/README.md
+++ b/configs/soft_teacher/README.md
@@ -12,6 +12,15 @@ This paper presents an end-to-end semi-supervised object detection approach, in
+## Results and Models
+
+| Model | Detector | Labeled Dataset | Iteration | box AP | Config | Download |
+| :---------: | :----------: | :-------------: | :-------: | :----: | :-----------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| SoftTeacher | Faster R-CNN | COCO-1% | 180k | 19.9 | [config](./soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.01-coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.01-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230330_233412-3c8f6d4a.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.01-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230330_233412.log.json) |
+| SoftTeacher | Faster R-CNN | COCO-2% | 180k | 24.9 | [config](./soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.02-coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.02-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230331_020244-c0d2c3aa.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.02-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230331_020244.log.json) |
+| SoftTeacher | Faster R-CNN | COCO-5% | 180k | 30.4 | [config](./soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.05-coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.05-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230331_070656-308798ad.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.05-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230331_070656.log.json) |
+| SoftTeacher | Faster R-CNN | COCO-10% | 180k | 33.8 | [config](./soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.1-coco.py) | [model](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.1-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230330_232113-b46f78d0.pth) \| [log](https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.1-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230330_232113.log.json) |
+
## Citation
```latex
diff --git a/configs/soft_teacher/metafile.yml b/configs/soft_teacher/metafile.yml
index a9fb3c2e312..9622acec93a 100644
--- a/configs/soft_teacher/metafile.yml
+++ b/configs/soft_teacher/metafile.yml
@@ -5,7 +5,7 @@ Collections:
Training Techniques:
- SGD with Momentum
- Weight Decay
- Training Resources: 8x V100 GPUs
+ Training Resources: 8x A100 GPUs
Architecture:
- FPN
- ResNet
@@ -16,3 +16,52 @@ Collections:
Code:
URL: https://github.com/open-mmlab/mmdetection/blob/v3.0.0rc1/mmdet/models/detectors/soft_teacher.py#L20
Version: v3.0.0rc1
+
+Models:
+ - Name: soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.01-coco.py
+ In Collection: SoftTeacher
+ Config: configs/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.01-coco.py
+ Metadata:
+ Iterations: 180000
+ Results:
+ - Task: Semi-Supervised Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 19.9
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.01-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230330_233412-3c8f6d4a.pth
+
+ - Name: soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.02-coco.py
+ In Collection: SoftTeacher
+ Config: configs/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.02-coco.py
+ Metadata:
+ Iterations: 180000
+ Results:
+ - Task: Semi-Supervised Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 24.9
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.02-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230331_020244-c0d2c3aa.pth
+
+ - Name: soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.05-coco.py
+ In Collection: SoftTeacher
+ Config: configs/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.05-coco.py
+ Metadata:
+ Iterations: 180000
+ Results:
+ - Task: Semi-Supervised Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 30.4
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.05-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230331_070656-308798ad.pth
+
+ - Name: soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.1-coco.py
+ In Collection: SoftTeacher
+ Config: configs/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.1-coco.py
+ Metadata:
+ Iterations: 180000
+ Results:
+ - Task: Semi-Supervised Object Detection
+ Dataset: COCO
+ Metrics:
+ box AP: 33.8
+ Weights: https://download.openmmlab.com/mmdetection/v3.0/soft_teacher/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0.1-coco/soft-teacher_faster-rcnn_r50-caffe_fpn_180k_semi-0_20230330_232113-b46f78d0.pth
diff --git a/configs/sort/README.md b/configs/sort/README.md
new file mode 100644
index 00000000000..8f035fded78
--- /dev/null
+++ b/configs/sort/README.md
@@ -0,0 +1,108 @@
+# Simple online and realtime tracking
+
+## Abstract
+
+
+
+This paper explores a pragmatic approach to multiple object tracking where the main focus is to associate objects efficiently for online and realtime applications. To this end, detection quality is identified as a key factor influencing tracking performance, where changing the detector can improve tracking by up to 18.9%. Despite only using a rudimentary combination of familiar techniques such as the Kalman Filter and Hungarian algorithm for the tracking components, this approach achieves an accuracy comparable to state-of-the-art online trackers. Furthermore, due to the simplicity of our tracking method, the tracker updates at a rate of 260 Hz which is over 20x faster than other state-of-the-art trackers.
+
+
+
+
+
+
+
+## Citation
+
+
+
+```latex
+@inproceedings{bewley2016simple,
+ title={Simple online and realtime tracking},
+ author={Bewley, Alex and Ge, Zongyuan and Ott, Lionel and Ramos, Fabio and Upcroft, Ben},
+ booktitle={2016 IEEE International Conference on Image Processing (ICIP)},
+ pages={3464--3468},
+ year={2016},
+ organization={IEEE}
+}
+```
+
+## Results and models on MOT17
+
+| Method | Detector | ReID | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :----: | :----------------: | :--: | :--------: | :------: | :----: | :------------: | :--: | :--: | :--: | :---: | :---: | :---: | :----------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------: |
+| SORT | R50-FasterRCNN-FPN | - | half-train | half-val | N | 18.6 | 52.0 | 62.0 | 57.8 | 15150 | 40410 | 5847 | [config](sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py) | [detector](https://download.openmmlab.com/mmtracking/mot/faster_rcnn/faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+We implement SORT with independent detector models.
+Note that, due to the influence of parameters such as learning rate in default configuration file,
+we recommend using 8 GPUs for training in order to reproduce accuracy.
+
+You can train the detector as follows.
+
+```shell script
+# Training Faster R-CNN on mot17-half-train dataset with following command.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_train.sh configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 4. Testing and evaluation
+
+### 4.1 Example on MOTxx-halfval dataset
+
+**4.1.1 use separate trained detector model to evaluating and testing**\*
+
+```shell script
+# Example 1: Test on motXX-half-val set.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_test_tracking.sh configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py 8 --detector ${DETECTOR_CHECKPOINT_PATH}
+```
+
+**4.1.2 use video_baesd to evaluating and testing**
+
+we also provide two_ways(img_based or video_based) to evaluating and testing.
+if you want to use video_based to evaluating and testing, you can modify config as follows
+
+```
+val_dataloader = dict(
+ sampler=dict(type='DefaultSampler', shuffle=False, round_up=False))
+```
+
+### 4.2 Example on MOTxx-test dataset
+
+If you want to get the results of the [MOT Challenge](https://motchallenge.net/) test set,
+please use the following command to generate result files that can be used for submission.
+It will be stored in `./mot_17_test_res`, you can modify the saved path in `test_evaluator` of the config.
+
+```shell script
+# Example 2: Test on motxx-test set
+# The number after config file represents the number of GPUs used
+bash tools/dist_test_tracking.sh configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test.py 8 --detector ${DETECTOR_CHECKPOINT_PATH}
+```
+
+If you want to know about more detailed usage of `test_tracking.py/dist_test_tracking.sh/slurm_test_tracking.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 5.Inference
+
+Use a single GPU to predict a video and save it as a video.
+
+```shell
+python demo/mot_demo.py demo/demo_mot.mp4 configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py --detector ${DETECTOR_CHECKPOINT_PATH} --out mot.mp4
+```
+
+If you want to know about more detailed usage of `mot_demo.py`, please refer to this [document](../../docs/en/user_guides/tracking_inference.md).
diff --git a/configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py b/configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..f1d5b72ce3f
--- /dev/null
+++ b/configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,41 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py',
+ '../_base_/datasets/mot_challenge_det.py', '../_base_/default_runtime.py'
+]
+
+model = dict(
+ rpn_head=dict(
+ bbox_coder=dict(clip_border=False),
+ loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)),
+ roi_head=dict(
+ bbox_head=dict(
+ num_classes=1,
+ bbox_coder=dict(clip_border=False),
+ loss_bbox=dict(type='SmoothL1Loss', loss_weight=1.0))),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_2x_coco/faster_rcnn_r50_fpn_2x_coco_bbox_mAP-0.384_20200504_210434-a5d8aa15.pth' # noqa: E501
+ ))
+
+# training schedule for 4e
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=4, val_interval=1)
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
+
+# learning rate
+param_scheduler = [
+ dict(type='LinearLR', start_factor=0.01, by_epoch=False, begin=0, end=100),
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=4,
+ by_epoch=True,
+ milestones=[3],
+ gamma=0.1)
+]
+
+# optimizer
+optim_wrapper = dict(
+ type='OptimWrapper',
+ optimizer=dict(type='SGD', lr=0.02, momentum=0.9, weight_decay=0.0001))
diff --git a/configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17train.py b/configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17train.py
new file mode 100644
index 00000000000..83647061c7f
--- /dev/null
+++ b/configs/sort/faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17train.py
@@ -0,0 +1,11 @@
+_base_ = ['./faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval']
+# data
+data_root = 'data/MOT17/'
+train_dataloader = dict(
+ dataset=dict(ann_file='annotations/train_cocoformat.json'))
+val_dataloader = dict(
+ dataset=dict(ann_file='annotations/train_cocoformat.json'))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(ann_file=data_root + 'annotations/train_cocoformat.json')
+test_evaluator = val_evaluator
diff --git a/configs/sort/faster-rcnn_r50_fpn_8xb2-8e_mot20halftrain_test-mot20halfval.py b/configs/sort/faster-rcnn_r50_fpn_8xb2-8e_mot20halftrain_test-mot20halfval.py
new file mode 100644
index 00000000000..a6d14ad8be2
--- /dev/null
+++ b/configs/sort/faster-rcnn_r50_fpn_8xb2-8e_mot20halftrain_test-mot20halfval.py
@@ -0,0 +1,29 @@
+_base_ = ['./faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval']
+model = dict(
+ rpn_head=dict(bbox_coder=dict(clip_border=True)),
+ roi_head=dict(
+ bbox_head=dict(bbox_coder=dict(clip_border=True), num_classes=1)))
+# data
+data_root = 'data/MOT20/'
+train_dataloader = dict(dataset=dict(data_root=data_root))
+val_dataloader = dict(dataset=dict(data_root=data_root))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(ann_file=data_root +
+ 'annotations/half-val_cocoformat.json')
+test_evaluator = val_evaluator
+
+# training schedule for 8e
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=8, val_interval=1)
+
+# learning rate
+param_scheduler = [
+ dict(type='LinearLR', start_factor=0.01, by_epoch=False, begin=0, end=100),
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=8,
+ by_epoch=True,
+ milestones=[6],
+ gamma=0.1)
+]
diff --git a/configs/sort/faster-rcnn_r50_fpn_8xb2-8e_mot20train_test-mot20train.py b/configs/sort/faster-rcnn_r50_fpn_8xb2-8e_mot20train_test-mot20train.py
new file mode 100644
index 00000000000..85c859732cb
--- /dev/null
+++ b/configs/sort/faster-rcnn_r50_fpn_8xb2-8e_mot20train_test-mot20train.py
@@ -0,0 +1,32 @@
+_base_ = ['./faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval']
+model = dict(
+ rpn_head=dict(bbox_coder=dict(clip_border=True)),
+ roi_head=dict(
+ bbox_head=dict(bbox_coder=dict(clip_border=True), num_classes=1)))
+# data
+data_root = 'data/MOT20/'
+train_dataloader = dict(
+ dataset=dict(
+ data_root=data_root, ann_file='annotations/train_cocoformat.json'))
+val_dataloader = dict(
+ dataset=dict(
+ data_root=data_root, ann_file='annotations/train_cocoformat.json'))
+test_dataloader = val_dataloader
+
+val_evaluator = dict(ann_file=data_root + 'annotations/train_cocoformat.json')
+test_evaluator = val_evaluator
+
+# training schedule for 8e
+train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=8, val_interval=1)
+
+# learning rate
+param_scheduler = [
+ dict(type='LinearLR', start_factor=0.01, by_epoch=False, begin=0, end=100),
+ dict(
+ type='MultiStepLR',
+ begin=0,
+ end=8,
+ by_epoch=True,
+ milestones=[6],
+ gamma=0.1)
+]
diff --git a/configs/sort/metafile.yml b/configs/sort/metafile.yml
new file mode 100644
index 00000000000..c582ce353df
--- /dev/null
+++ b/configs/sort/metafile.yml
@@ -0,0 +1,35 @@
+Collections:
+ - Name: SORT
+ Metadata:
+ Training Techniques:
+ - SGD with Momentum
+ Training Resources: 8x V100 GPUs
+ Architecture:
+ - ResNet
+ - FPN
+ Paper:
+ URL: https://arxiv.org/abs/1602.00763
+ Title: Simple Online and Realtime Tracking
+ README: configs/sort/README.md
+
+Models:
+ - Name: sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval
+ In Collection: SORT
+ Config: configs/mot/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
+ Metadata:
+ Training Data: MOT17-half-train
+ inference time (ms/im):
+ - value: 53.8
+ hardware: V100
+ backend: PyTorch
+ batch size: 1
+ mode: FP32
+ resolution: (640, 1088)
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT17-half-val
+ Metrics:
+ MOTA: 62.0
+ IDF1: 57.8
+ HOTA: 52.0
+ Weights: https://download.openmmlab.com/mmtracking/mot/faster_rcnn/faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth
diff --git a/configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py b/configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..78acb774ec2
--- /dev/null
+++ b/configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,54 @@
+_base_ = [
+ '../_base_/models/faster-rcnn_r50_fpn.py',
+ '../_base_/datasets/mot_challenge.py', '../_base_/default_runtime.py'
+]
+
+default_hooks = dict(
+ logger=dict(type='LoggerHook', interval=1),
+ visualization=dict(type='TrackVisualizationHook', draw=False))
+
+vis_backends = [dict(type='LocalVisBackend')]
+visualizer = dict(
+ type='TrackLocalVisualizer', vis_backends=vis_backends, name='visualizer')
+
+# custom hooks
+custom_hooks = [
+ # Synchronize model buffers such as running_mean and running_var in BN
+ # at the end of each epoch
+ dict(type='SyncBuffersHook')
+]
+
+detector = _base_.model
+detector.pop('data_preprocessor')
+detector.rpn_head.bbox_coder.update(dict(clip_border=False))
+detector.roi_head.bbox_head.update(dict(num_classes=1))
+detector.roi_head.bbox_head.bbox_coder.update(dict(clip_border=False))
+detector['init_cfg'] = dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmtracking/mot/'
+ 'faster_rcnn/faster-rcnn_r50_fpn_4e_mot17-half-64ee2ed4.pth') # noqa: E501
+del _base_.model
+
+model = dict(
+ type='DeepSORT',
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ mean=[123.675, 116.28, 103.53],
+ std=[58.395, 57.12, 57.375],
+ bgr_to_rgb=True,
+ rgb_to_bgr=False,
+ pad_size_divisor=32),
+ detector=detector,
+ tracker=dict(
+ type='SORTTracker',
+ motion=dict(type='KalmanFilter', center_only=False),
+ obj_score_thr=0.5,
+ match_iou_thr=0.5,
+ reid=None))
+
+train_dataloader = None
+
+train_cfg = None
+val_cfg = dict(type='ValLoop')
+test_cfg = dict(type='TestLoop')
diff --git a/configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test.py b/configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test.py
new file mode 100644
index 00000000000..921652c4430
--- /dev/null
+++ b/configs/sort/sort_faster-rcnn_r50_fpn_8xb2-4e_mot17train_test-mot17test.py
@@ -0,0 +1,15 @@
+_base_ = [
+ './sort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain'
+ '_test-mot17halfval.py'
+]
+
+# dataloader
+val_dataloader = dict(
+ dataset=dict(ann_file='annotations/train_cocoformat.json'))
+test_dataloader = dict(
+ dataset=dict(
+ ann_file='annotations/test_cocoformat.json',
+ data_prefix=dict(img_path='test')))
+
+# evaluator
+test_evaluator = dict(format_only=True, outfile_prefix='./mot_17_test_res')
diff --git a/configs/strongsort/README.md b/configs/strongsort/README.md
new file mode 100644
index 00000000000..8e08413cbc0
--- /dev/null
+++ b/configs/strongsort/README.md
@@ -0,0 +1,108 @@
+# StrongSORT: Make DeepSORT Great Again
+
+## Abstract
+
+
+
+Existing Multi-Object Tracking (MOT) methods can be roughly classified as tracking-by-detection and joint-detection-association paradigms. Although the latter has elicited more attention and demonstrates comparable performance relative to the former, we claim that the tracking-by-detection paradigm is still the optimal solution in terms of tracking accuracy. In this paper, we revisit the classic tracker DeepSORT and upgrade it from various aspects, i.e., detection, embedding and association. The resulting tracker, called StrongSORT, sets new HOTA and IDF1 records on MOT17 and MOT20. We also present two lightweight and plug-and-play algorithms to further refine the tracking results. Firstly, an appearance-free link model (AFLink) is proposed to associate short tracklets into complete trajectories. To the best of our knowledge, this is the first global link model without appearance information. Secondly, we propose Gaussian-smoothed interpolation (GSI) to compensate for missing detections. Instead of ignoring motion information like linear interpolation, GSI is based on the Gaussian process regression algorithm and can achieve more accurate localizations. Moreover, AFLink and GSI can be plugged into various trackers with a negligible extra computational cost (591.9 and 140.9 Hz, respectively, on MOT17). By integrating StrongSORT with the two algorithms, the final tracker StrongSORT++ ranks first on MOT17 and MOT20 in terms of HOTA and IDF1 metrics and surpasses the second-place one by 1.3 - 2.2. Code will be released soon.
+
+
+
+
+
+
+
+## Citation
+
+
+
+```latex
+@article{du2022strongsort,
+ title={Strongsort: Make deepsort great again},
+ author={Du, Yunhao and Song, Yang and Yang, Bo and Zhao, Yanyun},
+ journal={arXiv preprint arXiv:2202.13514},
+ year={2022}
+}
+```
+
+## Results and models on MOT17
+
+| Method | Detector | ReID | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :----------: | :------: | :--: | :---------------------------: | :------------: | :----: | :------------: | :--: | :--: | :--: | :---: | :---: | :---: | :----------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| StrongSORT++ | YOLOX-X | R50 | CrowdHuman + MOT17-half-train | MOT17-half-val | N | - | 70.9 | 78.4 | 83.3 | 15237 | 19035 | 582 | [config](strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py) | [detector](https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/yolox_x_crowdhuman_mot17-private-half_20220812_192036-b6c9ce9a.pth) [reid](https://download.openmmlab.com/mmtracking/mot/reid/reid_r50_6e_mot17-4bf6b63d.pth) [AFLink](https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/aflink_motchallenge_20220812_190310-a7578ad3.pth) |
+
+## Results and models on MOT20
+
+| Method | Detector | ReID | Train Set | Test Set | Public | Inf time (fps) | HOTA | MOTA | IDF1 | FP | FN | IDSw. | Config | Download |
+| :----------: | :------: | :--: | :----------------------: | :--------: | :----: | :------------: | :--: | :--: | :--: | :---: | :---: | :---: | :---------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
+| StrongSORT++ | YOLOX-X | R50 | CrowdHuman + MOT20-train | MOT20-test | N | - | 62.9 | 75.5 | 77.3 | 29043 | 96155 | 1640 | [config](strongsort_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py) | [detector](https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/yolox_x_crowdhuman_mot20-private_20220812_192123-77c014de.pth) [reid](https://download.openmmlab.com/mmtracking/mot/reid/reid_r50_6e_mot20_20210803_212426-c83b1c01.pth) [AFLink](https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/aflink_motchallenge_20220812_190310-a7578ad3.pth) |
+
+## Get started
+
+### 1. Development Environment Setup
+
+Tracking Development Environment Setup can refer to this [document](../../docs/en/get_started.md).
+
+### 2. Dataset Prepare
+
+Tracking Dataset Prepare can refer to this [document](../../docs/en/user_guides/tracking_dataset_prepare.md).
+
+### 3. Training
+
+We implement StrongSORT with independent detector and ReID models.
+Note that, due to the influence of parameters such as learning rate in default configuration file,
+we recommend using 8 GPUs for training in order to reproduce accuracy.
+
+You can train the detector as follows.
+
+```shell script
+# Training YOLOX-X on crowdhuman and mot17-half-train dataset with following command.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_train.sh configs/det/yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 8
+```
+
+And you can train the ReID model as follows.
+
+```shell script
+# Training ReID model on mot17-train80 dataset with following command.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_train.sh configs/reid/reid_r50_8xb32-6e_mot17train80_test-mot17val20.py 8
+```
+
+If you want to know about more detailed usage of `train.py/dist_train.sh/slurm_train.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 4. Testing and evaluation
+
+**2.1 Example on MOTxx-halfval dataset**
+
+```shell script
+# Example 1: Test on motXX-half-val set.
+# The number after config file represents the number of GPUs used. Here we use 8 GPUs.
+bash tools/dist_test_tracking.sh configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py 8 --detector ${CHECKPOINT_PATH} --reid ${CHECKPOINT_PATH}
+```
+
+**2.2 Example on MOTxx-test dataset**
+
+If you want to get the results of the [MOT Challenge](https://motchallenge.net/) test set,
+please use the following command to generate result files that can be used for submission.
+It will be stored in `./mot_20_test_res`, you can modify the saved path in `test_evaluator` of the config.
+
+```shell script
+# Example 2: Test on motxx-test set
+# The number after config file represents the number of GPUs used
+bash tools/dist_test_tracking.sh configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py 8 --detector ${CHECKPOINT_PATH} --reid ${CHECKPOINT_PATH}
+```
+
+If you want to know about more detailed usage of `test_tracking.py/dist_test_tracking.sh/slurm_test_tracking.sh`,
+please refer to this [document](../../docs/en/user_guides/tracking_train_test.md).
+
+### 3.Inference
+
+Use a single GPU to predict a video and save it as a video.
+
+```shell
+python demo/mot_demo.py demo/demo_mot.mp4 configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py --detector ${CHECKPOINT_FILE} --reid ${CHECKPOINT_PATH} --out mot.mp4
+```
+
+If you want to know about more detailed usage of `mot_demo.py`, please refer to this [document](../../docs/en/user_guides/tracking_inference.md).
diff --git a/configs/strongsort/metafile.yml b/configs/strongsort/metafile.yml
new file mode 100644
index 00000000000..08a564b77b8
--- /dev/null
+++ b/configs/strongsort/metafile.yml
@@ -0,0 +1,48 @@
+Collections:
+ - Name: StrongSORT++
+ Metadata:
+ Training Techniques:
+ - SGD with Momentum
+ Training Resources: 8x V100 GPUs
+ Architecture:
+ - ResNet
+ - YOLOX
+ Paper:
+ URL: https://arxiv.org/abs/2202.13514
+ Title: "StrongSORT: Make DeepSORT Great Again"
+ README: configs/strongsort/README.md
+
+Models:
+ - Name: strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval
+ In Collection: StrongSORT++
+ Config: configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
+ Metadata:
+ Training Data: CrowdHuman + MOT17-half-train
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT17-half-val
+ Metrics:
+ MOTA: 78.3
+ IDF1: 83.2
+ HOTA: 70.9
+ Weights:
+ - https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/yolox_x_crowdhuman_mot17-private-half_20220812_192036-b6c9ce9a.pth
+ - https://download.openmmlab.com/mmtracking/mot/reid/reid_r50_6e_mot17-4bf6b63d.pth
+ - https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/aflink_motchallenge_20220812_190310-a7578ad3.pth
+
+ - Name: strongsort_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test
+ In Collection: StrongSORT++
+ Config: configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py
+ Metadata:
+ Training Data: CrowdHuman + MOT20-train
+ Results:
+ - Task: Multiple Object Tracking
+ Dataset: MOT20-test
+ Metrics:
+ MOTA: 75.5
+ IDF1: 77.3
+ HOTA: 62.9
+ Weights:
+ - https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/yolox_x_crowdhuman_mot20-private_20220812_192123-77c014de.pth
+ - https://download.openmmlab.com/mmtracking/mot/reid/reid_r50_6e_mot20_20210803_212426-c83b1c01.pth
+ - https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/aflink_motchallenge_20220812_190310-a7578ad3.pth
diff --git a/configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py b/configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..532e2aee718
--- /dev/null
+++ b/configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,130 @@
+_base_ = [
+ './yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py', # noqa: E501
+]
+
+dataset_type = 'MOTChallengeDataset'
+detector = _base_.model
+detector.pop('data_preprocessor')
+del _base_.model
+
+model = dict(
+ type='StrongSORT',
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ pad_size_divisor=32,
+ batch_augments=[
+ dict(
+ type='BatchSyncRandomResize',
+ random_size_range=(576, 1024),
+ size_divisor=32,
+ interval=10)
+ ]),
+ detector=detector,
+ reid=dict(
+ type='BaseReID',
+ data_preprocessor=dict(type='mmpretrain.ClsDataPreprocessor'),
+ backbone=dict(
+ type='mmpretrain.ResNet',
+ depth=50,
+ num_stages=4,
+ out_indices=(3, ),
+ style='pytorch'),
+ neck=dict(type='GlobalAveragePooling', kernel_size=(8, 4), stride=1),
+ head=dict(
+ type='LinearReIDHead',
+ num_fcs=1,
+ in_channels=2048,
+ fc_channels=1024,
+ out_channels=128,
+ num_classes=380,
+ loss_cls=dict(type='mmpretrain.CrossEntropyLoss', loss_weight=1.0),
+ loss_triplet=dict(type='TripletLoss', margin=0.3, loss_weight=1.0),
+ norm_cfg=dict(type='BN1d'),
+ act_cfg=dict(type='ReLU'))),
+ cmc=dict(
+ type='CameraMotionCompensation',
+ warp_mode='cv2.MOTION_EUCLIDEAN',
+ num_iters=100,
+ stop_eps=0.00001),
+ tracker=dict(
+ type='StrongSORTTracker',
+ motion=dict(type='KalmanFilter', center_only=False, use_nsa=True),
+ obj_score_thr=0.6,
+ reid=dict(
+ num_samples=None,
+ img_scale=(256, 128),
+ img_norm_cfg=dict(
+ mean=[123.675, 116.28, 103.53],
+ std=[58.395, 57.12, 57.375],
+ to_rgb=True),
+ match_score_thr=0.3,
+ motion_weight=0.02,
+ ),
+ match_iou_thr=0.7,
+ momentums=dict(embeds=0.1, ),
+ num_tentatives=2,
+ num_frames_retain=100),
+ postprocess_model=dict(
+ type='AppearanceFreeLink',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmtracking/mot/strongsort/mot_dataset/aflink_motchallenge_20220812_190310-a7578ad3.pth', # noqa: E501
+ temporal_threshold=(0, 30),
+ spatial_threshold=50,
+ confidence_threshold=0.95,
+ ))
+
+train_pipeline = None
+test_pipeline = [
+ dict(
+ type='TransformBroadcaster',
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
+ dict(type='Resize', scale=_base_.img_scale, keep_ratio=True),
+ dict(
+ type='Pad',
+ size_divisor=32,
+ pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='LoadTrackAnnotations'),
+ ]),
+ dict(type='PackTrackInputs')
+]
+
+train_dataloader = None
+val_dataloader = dict(
+ # Now StrongSORT only support video_based sampling
+ sampler=dict(type='DefaultSampler', shuffle=False, round_up=False),
+ dataset=dict(
+ _delete_=True,
+ type=dataset_type,
+ data_root=_base_.data_root,
+ ann_file='annotations/half-val_cocoformat.json',
+ data_prefix=dict(img_path='train'),
+ # when you evaluate track performance, you need to remove metainfo
+ test_mode=True,
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+train_cfg = None
+optim_wrapper = None
+
+# evaluator
+val_evaluator = dict(
+ _delete_=True,
+ type='MOTChallengeMetric',
+ metric=['HOTA', 'CLEAR', 'Identity'],
+ # use_postprocess to support AppearanceFreeLink in val_evaluator
+ use_postprocess=True,
+ postprocess_tracklet_cfg=[
+ dict(
+ type='InterpolateTracklets',
+ min_num_frames=5,
+ max_num_frames=20,
+ use_gsi=True,
+ smooth_tau=10)
+ ])
+test_evaluator = val_evaluator
+
+default_hooks = dict(logger=dict(type='LoggerHook', interval=1))
+
+del _base_.param_scheduler
+del _base_.custom_hooks
diff --git a/configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py b/configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py
new file mode 100644
index 00000000000..eab97063932
--- /dev/null
+++ b/configs/strongsort/strongsort_yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py
@@ -0,0 +1,44 @@
+_base_ = [
+ './strongsort_yolox_x_8xb4-80e_crowdhuman-mot17halftrain'
+ '_test-mot17halfval.py'
+]
+
+img_scale = (1600, 896) # width, height
+
+model = dict(
+ data_preprocessor=dict(
+ type='TrackDataPreprocessor',
+ pad_size_divisor=32,
+ batch_augments=[
+ dict(type='BatchSyncRandomResize', random_size_range=(640, 1152))
+ ]))
+
+test_pipeline = [
+ dict(
+ type='TransformBroadcaster',
+ transforms=[
+ dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
+ dict(type='Resize', scale=img_scale, keep_ratio=True),
+ dict(
+ type='Pad',
+ size_divisor=32,
+ pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='LoadTrackAnnotations'),
+ ]),
+ dict(type='PackTrackInputs')
+]
+
+val_dataloader = dict(
+ dataset=dict(
+ data_root='data/MOT17',
+ ann_file='annotations/train_cocoformat.json',
+ data_prefix=dict(img_path='train'),
+ pipeline=test_pipeline))
+test_dataloader = dict(
+ dataset=dict(
+ data_root='data/MOT20',
+ ann_file='annotations/test_cocoformat.json',
+ data_prefix=dict(img_path='test'),
+ pipeline=test_pipeline))
+
+test_evaluator = dict(format_only=True, outfile_prefix='./mot_20_test_res')
diff --git a/configs/strongsort/yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py b/configs/strongsort/yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
new file mode 100644
index 00000000000..59a52e4394b
--- /dev/null
+++ b/configs/strongsort/yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py
@@ -0,0 +1,188 @@
+_base_ = ['../yolox/yolox_x_8xb8-300e_coco.py']
+
+data_root = 'data/MOT17/'
+
+img_scale = (1440, 800) # width, height
+batch_size = 4
+
+# model settings
+model = dict(
+ bbox_head=dict(num_classes=1),
+ test_cfg=dict(nms=dict(iou_threshold=0.7)),
+ init_cfg=dict(
+ type='Pretrained',
+ checkpoint= # noqa: E251
+ 'https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_x_8x8_300e_coco/yolox_x_8x8_300e_coco_20211126_140254-1ef88d67.pth' # noqa: E501
+ ))
+
+train_pipeline = [
+ dict(
+ type='Mosaic',
+ img_scale=img_scale,
+ pad_val=114.0,
+ bbox_clip_border=False),
+ dict(
+ type='RandomAffine',
+ scaling_ratio_range=(0.1, 2),
+ border=(-img_scale[0] // 2, -img_scale[1] // 2),
+ bbox_clip_border=False),
+ dict(
+ type='MixUp',
+ img_scale=img_scale,
+ ratio_range=(0.8, 1.6),
+ pad_val=114.0,
+ bbox_clip_border=False),
+ dict(type='YOLOXHSVRandomAug'),
+ dict(type='RandomFlip', prob=0.5),
+ dict(
+ type='Resize',
+ scale=img_scale,
+ keep_ratio=True,
+ clip_object_border=False),
+ dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='FilterAnnotations', min_gt_bbox_wh=(1, 1), keep_empty=False),
+ dict(type='PackDetInputs')
+]
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
+ dict(type='Resize', scale=img_scale, keep_ratio=True),
+ dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor'))
+]
+
+train_dataloader = dict(
+ _delete_=True,
+ batch_size=batch_size,
+ num_workers=4,
+ persistent_workers=True,
+ pin_memory=True,
+ sampler=dict(type='DefaultSampler', shuffle=True),
+ dataset=dict(
+ type='MultiImageMixDataset',
+ dataset=dict(
+ type='ConcatDataset',
+ datasets=[
+ dict(
+ type='CocoDataset',
+ data_root=data_root,
+ ann_file='annotations/half-train_cocoformat.json',
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_train.json',
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_val.json',
+ data_prefix=dict(img='val'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ ]),
+ pipeline=train_pipeline))
+
+val_dataloader = dict(
+ batch_size=1,
+ num_workers=2,
+ dataset=dict(
+ data_root=data_root,
+ ann_file='annotations/half-val_cocoformat.json',
+ data_prefix=dict(img='train'),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=test_pipeline))
+test_dataloader = val_dataloader
+
+# training settings
+max_epochs = 80
+num_last_epochs = 10
+interval = 5
+
+train_cfg = dict(max_epochs=max_epochs, val_begin=75, val_interval=1)
+
+# optimizer
+# default 8 gpu
+base_lr = 0.001 / 8 * batch_size
+optim_wrapper = dict(optimizer=dict(lr=base_lr))
+
+# learning rate
+param_scheduler = [
+ dict(
+ type='QuadraticWarmupLR',
+ by_epoch=True,
+ begin=0,
+ end=1,
+ convert_to_iter_based=True),
+ dict(
+ type='CosineAnnealingLR',
+ eta_min=base_lr * 0.05,
+ begin=1,
+ T_max=max_epochs - num_last_epochs,
+ end=max_epochs - num_last_epochs,
+ by_epoch=True,
+ convert_to_iter_based=True),
+ dict(
+ type='ConstantLR',
+ by_epoch=True,
+ factor=1,
+ begin=max_epochs - num_last_epochs,
+ end=max_epochs,
+ )
+]
+
+default_hooks = dict(
+ checkpoint=dict(
+ interval=1,
+ max_keep_ckpts=5 # only keep latest 5 checkpoints
+ ))
+
+custom_hooks = [
+ dict(
+ type='YOLOXModeSwitchHook',
+ num_last_epochs=num_last_epochs,
+ priority=48),
+ dict(type='SyncNormHook', priority=48),
+ dict(
+ type='EMAHook',
+ ema_type='ExpMomentumEMA',
+ momentum=0.0001,
+ update_buffers=True,
+ priority=49)
+]
+
+# evaluator
+val_evaluator = dict(
+ ann_file=data_root + 'annotations/half-val_cocoformat.json',
+ format_only=False)
+test_evaluator = val_evaluator
+
+del _base_.tta_model
+del _base_.tta_pipeline
+del _base_.train_dataset
diff --git a/configs/strongsort/yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py b/configs/strongsort/yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py
new file mode 100644
index 00000000000..d4eb3cb2c98
--- /dev/null
+++ b/configs/strongsort/yolox_x_8xb4-80e_crowdhuman-mot20train_test-mot20test.py
@@ -0,0 +1,108 @@
+_base_ = ['./yolox_x_8xb4-80e_crowdhuman-mot17halftrain_test-mot17halfval.py']
+
+data_root = 'data/MOT20/'
+
+img_scale = (1600, 896) # width, height
+
+# model settings
+model = dict(
+ data_preprocessor=dict(batch_augments=[
+ dict(type='BatchSyncRandomResize', random_size_range=(640, 1152))
+ ]))
+
+train_pipeline = [
+ dict(
+ type='Mosaic',
+ img_scale=img_scale,
+ pad_val=114.0,
+ bbox_clip_border=True),
+ dict(
+ type='RandomAffine',
+ scaling_ratio_range=(0.1, 2),
+ border=(-img_scale[0] // 2, -img_scale[1] // 2),
+ bbox_clip_border=True),
+ dict(
+ type='MixUp',
+ img_scale=img_scale,
+ ratio_range=(0.8, 1.6),
+ pad_val=114.0,
+ bbox_clip_border=True),
+ dict(type='YOLOXHSVRandomAug'),
+ dict(type='RandomFlip', prob=0.5),
+ dict(
+ type='Resize',
+ scale=img_scale,
+ keep_ratio=True,
+ clip_object_border=True),
+ dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='FilterAnnotations', min_gt_bbox_wh=(1, 1), keep_empty=False),
+ dict(type='PackDetInputs')
+]
+
+test_pipeline = [
+ dict(type='LoadImageFromFile', backend_args=_base_.backend_args),
+ dict(type='Resize', scale=img_scale, keep_ratio=True),
+ dict(type='Pad', size_divisor=32, pad_val=dict(img=(114.0, 114.0, 114.0))),
+ dict(type='LoadAnnotations', with_bbox=True),
+ dict(
+ type='PackDetInputs',
+ meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
+ 'scale_factor'))
+]
+
+train_dataloader = dict(
+ dataset=dict(
+ type='MultiImageMixDataset',
+ dataset=dict(
+ type='ConcatDataset',
+ datasets=[
+ dict(
+ type='CocoDataset',
+ data_root=data_root,
+ ann_file='annotations/train_cocoformat.json',
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_train.json',
+ data_prefix=dict(img='train'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ dict(
+ type='CocoDataset',
+ data_root='data/crowdhuman',
+ ann_file='annotations/crowdhuman_val.json',
+ data_prefix=dict(img='val'),
+ filter_cfg=dict(filter_empty_gt=True, min_size=32),
+ metainfo=dict(classes=('pedestrian', )),
+ pipeline=[
+ dict(
+ type='LoadImageFromFile',
+ backend_args=_base_.backend_args),
+ dict(type='LoadAnnotations', with_bbox=True),
+ ]),
+ ]),
+ pipeline=train_pipeline))
+
+val_dataloader = dict(
+ dataset=dict(
+ data_root='data/MOT17', ann_file='annotations/train_cocoformat.json'))
+test_dataloader = val_dataloader
+
+# evaluator
+val_evaluator = dict(ann_file='data/MOT17/annotations/train_cocoformat.json')
+test_evaluator = val_evaluator
diff --git a/configs/timm_example/README.md b/configs/timm_example/README.md
index b4e45b0a6b0..848f8d3c269 100644
--- a/configs/timm_example/README.md
+++ b/configs/timm_example/README.md
@@ -27,22 +27,22 @@ Py**T**orch **Im**age **M**odels (`timm`) is a collection of image models, layer
### Install additional requirements
-MMDetection supports timm backbones via `TIMMBackbone`, a wrapper class in MMClassification.
-Thus, you need to install `mmcls` in addition to timm.
+MMDetection supports timm backbones via `TIMMBackbone`, a wrapper class in MMPretrain.
+Thus, you need to install `mmpretrain` in addition to timm.
If you have already installed requirements for mmdet, run
```shell
pip install 'dataclasses; python_version<"3.7"'
pip install timm
-pip install 'mmcls>=0.20.0'
+pip install mmpretrain
```
-See [this document](https://mmclassification.readthedocs.io/en/latest/install.html) for the details of MMClassification installation.
+See [this document](https://mmpretrain.readthedocs.io/en/latest/get_started.html#installation) for the details of MMPretrain installation.
### Edit config
- See example configs for basic usage.
-- See the documents of [timm feature extraction](https://rwightman.github.io/pytorch-image-models/feature_extraction/#multi-scale-feature-maps-feature-pyramid) and [TIMMBackbone](https://mmclassification.readthedocs.io/en/latest/api.html#mmcls.models.backbones.TIMMBackbone) for details.
+- See the documents of [timm feature extraction](https://rwightman.github.io/pytorch-image-models/feature_extraction/#multi-scale-feature-maps-feature-pyramid) and [TIMMBackbone](https://mmpretrain.readthedocs.io/en/latest/api/generated/mmpretrain.models.backbones.TIMMBackbone.html#mmpretrain.models.backbones.TIMMBackbone) for details.
- Which feature map is output depends on the backbone.
Please check `backbone out_channels` and `backbone out_strides` in your log, and modify `model.neck.in_channels` and `model.backbone.out_indices` if necessary.
- If you use Vision Transformer models that do not support `features_only=True`, add `custom_hooks = []` to your config to disable `NumClassCheckHook`.
diff --git a/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py b/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py
index 433cf5c7bda..b87dddf50f7 100644
--- a/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py
+++ b/configs/timm_example/retinanet_timm-efficientnet-b1_fpn_1x_coco.py
@@ -4,15 +4,15 @@
'../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]
-# TODO: delete custom_imports after mmcls supports auto import
-# please install mmcls>=1.0
-# import mmcls.models to trigger register_module in mmcls
-custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False)
+# please install mmpretrain
+# import mmpretrain.models to trigger register_module in mmpretrain
+custom_imports = dict(
+ imports=['mmpretrain.models'], allow_failed_imports=False)
model = dict(
backbone=dict(
_delete_=True,
- type='mmcls.TIMMBackbone',
+ type='mmpretrain.TIMMBackbone',
model_name='efficientnet_b1',
features_only=True,
pretrained=True,
diff --git a/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py b/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py
index 315284b5074..74e43506959 100644
--- a/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py
+++ b/configs/timm_example/retinanet_timm-tv-resnet50_fpn_1x_coco.py
@@ -4,15 +4,15 @@
'../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]
-# TODO: delete custom_imports after mmcls supports auto import
-# please install mmcls>=1.0
-# import mmcls.models to trigger register_module in mmcls
-custom_imports = dict(imports=['mmcls.models'], allow_failed_imports=False)
+# please install mmpretrain
+# import mmpretrain.models to trigger register_module in mmpretrain
+custom_imports = dict(
+ imports=['mmpretrain.models'], allow_failed_imports=False)
model = dict(
backbone=dict(
_delete_=True,
- type='mmcls.TIMMBackbone',
+ type='mmpretrain.TIMMBackbone',
model_name='tv_resnet50', # ResNet-50 with torchvision weights
features_only=True,
pretrained=True,
diff --git a/dataset-index.yml b/dataset-index.yml
new file mode 100644
index 00000000000..4a8a5c49410
--- /dev/null
+++ b/dataset-index.yml
@@ -0,0 +1,17 @@
+voc2007:
+ dataset: PASCAL_VOC2007
+ download_root: data
+ data_root: data
+ script: tools/dataset_converters/scripts/preprocess_voc2007.sh
+
+voc2012:
+ dataset: PASCAL_VOC2012
+ download_root: data
+ data_root: data
+ script: tools/dataset_converters/scripts/preprocess_voc2012.sh
+
+coco2017:
+ dataset: COCO_2017
+ download_root: data
+ data_root: data/coco
+ script: tools/dataset_converters/scripts/preprocess_coco2017.sh
diff --git a/demo/MMDet_InstanceSeg_Tutorial.ipynb b/demo/MMDet_InstanceSeg_Tutorial.ipynb
index 71b120b8533..4b75cd70290 100644
--- a/demo/MMDet_InstanceSeg_Tutorial.ipynb
+++ b/demo/MMDet_InstanceSeg_Tutorial.ipynb
@@ -1,6 +1,7 @@
{
"cells": [
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "aGYwt_UjIrqp"
@@ -46,6 +47,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "gi9zw03oM4CH"
@@ -55,6 +57,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "3pFYLerc0we1"
@@ -120,6 +123,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "pVqDQAOiKkJK"
@@ -433,6 +437,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -492,6 +497,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "7GrWIJywLV-V"
@@ -507,6 +513,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "E73y5Lru-wBx"
@@ -521,7 +528,7 @@
"\n",
"We recommend the first two methods, as they are usually easier than the third.\n",
"\n",
- "In this tutorial, we give an example that converts the data into COCO format because MMDetection **only support evaluating mask AP of dataset in COCO format for now**. Other methods and more advanced usages can be found in the [doc](https://mmdetection.readthedocs.io/en/latest/tutorials/customize_dataset.html).\n",
+ "In this tutorial, we give an example that converts the data into COCO format because MMDetection **only support evaluating mask AP of dataset in COCO format for now**. Other methods and more advanced usages can be found in the [doc](https://mmdetection.readthedocs.io/en/latest/advanced_guides/customize_dataset.html).\n",
"\n",
"First, let's download the [the balloon dataset](https://github.com/matterport/Mask_RCNN/tree/master/samples/balloon)."
]
@@ -552,6 +559,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
@@ -611,6 +619,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "PMZvtSIl71qi"
@@ -743,6 +752,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "QA1pFg-FeO3l"
@@ -877,6 +887,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "PwqJOpBe-bMj"
@@ -901,6 +912,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "HntziLGq-92Z"
@@ -981,6 +993,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "111W_oZV_3wa"
@@ -1919,6 +1932,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "_vYQF5K2NqqI"
@@ -2106,6 +2120,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "MfQ-yspZLuuI"
@@ -2397,6 +2412,7 @@
]
},
{
+ "attachments": {},
"cell_type": "markdown",
"metadata": {
"id": "6rzruCwFgPXm"
@@ -2435,7 +2451,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.12"
+ "version": "3.8.15"
},
"vscode": {
"interpreter": {
diff --git a/demo/MMDet_Tutorial.ipynb b/demo/MMDet_Tutorial.ipynb
index f3c48e3c4e4..47785506c30 100644
--- a/demo/MMDet_Tutorial.ipynb
+++ b/demo/MMDet_Tutorial.ipynb
@@ -1,5 +1,71 @@
{
"cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "gCMycQ_2U8SA"
+ },
+ "source": [
+ "\n",
+ "
\n",
+ "
\n",
+ "
\n",
+ "
OpenMMLab website \n",
+ "
\n",
+ " \n",
+ " HOT \n",
+ " \n",
+ " \n",
+ " \n",
+ "
OpenMMLab platform \n",
+ "
\n",
+ " \n",
+ " TRY IT OUT \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "\n",
+ "
\n",
+ "\n",
+ "[![PyPI](https://img.shields.io/pypi/v/mmdet)](https://pypi.org/project/mmdet)\n",
+ "[![docs](https://img.shields.io/badge/docs-latest-blue)](https://mmdetection.readthedocs.io/en/latest/)\n",
+ "[![badge](https://github.com/open-mmlab/mmdetection/workflows/build/badge.svg)](https://github.com/open-mmlab/mmdetection/actions)\n",
+ "[![codecov](https://codecov.io/gh/open-mmlab/mmdetection/branch/master/graph/badge.svg)](https://codecov.io/gh/open-mmlab/mmdetection)\n",
+ "[![license](https://img.shields.io/github/license/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/blob/master/LICENSE)\n",
+ "[![open issues](https://isitmaintained.com/badge/open/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues)\n",
+ "[![issue resolution](https://isitmaintained.com/badge/resolution/open-mmlab/mmdetection.svg)](https://github.com/open-mmlab/mmdetection/issues)\n",
+ "\n",
+ "[📘Documentation](https://mmdetection.readthedocs.io/en/3.x/) |\n",
+ "[🛠️Installation](https://mmdetection.readthedocs.io/en/3.x/get_started.html) |\n",
+ "[👀Model Zoo](https://mmdetection.readthedocs.io/en/3.x/model_zoo.html) |\n",
+ "[🆕Update News](https://mmdetection.readthedocs.io/en/3.x/notes/changelog.html) |\n",
+ "[🚀Ongoing Projects](https://github.com/open-mmlab/mmdetection/projects) |\n",
+ "[🤔Reporting Issues](https://github.com/open-mmlab/mmdetection/issues/new/choose)\n",
+ "\n",
+ "
\n",
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
\n",
+ " \n",
+ "
"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {
@@ -9,11 +75,16 @@
"# Object Detection\n",
"\n",
"In this tutorial, you will learn:\n",
- "- the basic structure of Faster R-CNN.\n",
+ "- the basic structure of RTMDet.\n",
"- to perform inference with a MMDetection detector.\n",
"- to train a new detector with a new dataset.\n",
"\n",
- "Let's start!\n"
+ "Let's start!\n",
+ "\n",
+ "```{note}\n",
+ "The commands in this tutorial are mainly for Colab.\n",
+ "You can click the button above, `Open in Colab`, to run this notebook in Colab.\n",
+ "```"
]
},
{
@@ -33,20 +104,20 @@
"base_uri": "https://localhost:8080/"
},
"id": "Wi4LPmsR66sy",
- "outputId": "a5005e9d-afb9-4d06-d51c-2c3fa19687b8"
+ "outputId": "13704ca1-3e1f-4bfc-8638-86458b1effb1"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
+ "name": "stdout",
"text": [
"nvcc: NVIDIA (R) Cuda compiler driver\n",
- "Copyright (c) 2005-2020 NVIDIA Corporation\n",
- "Built on Mon_Oct_12_20:09:46_PDT_2020\n",
- "Cuda compilation tools, release 11.1, V11.1.105\n",
- "Build cuda_11.1.TC455_06.29190527_0\n",
- "gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0\n",
- "Copyright (C) 2017 Free Software Foundation, Inc.\n",
+ "Copyright (c) 2005-2022 NVIDIA Corporation\n",
+ "Built on Wed_Sep_21_10:33:58_PDT_2022\n",
+ "Cuda compilation tools, release 11.8, V11.8.89\n",
+ "Build cuda_11.8.r11.8/compiler.31833905_0\n",
+ "gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0\n",
+ "Copyright (C) 2019 Free Software Foundation, Inc.\n",
"This is free software; see the source for copying conditions. There is NO\n",
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n",
"\n"
@@ -68,97 +139,171 @@
"base_uri": "https://localhost:8080/"
},
"id": "gkGnB9WyHSXB",
- "outputId": "6af7be0b-a75f-4e52-b54b-8d92212f7722"
+ "outputId": "781c6870-be3d-4162-cae1-017ebf0c6043"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
+ "name": "stdout",
"text": [
- "Looking in links: https://download.pytorch.org/whl/torch_stable.html\n",
- "Collecting torch==1.9.0+cu111\n",
- " Downloading https://download.pytorch.org/whl/cu111/torch-1.9.0%2Bcu111-cp37-cp37m-linux_x86_64.whl (2041.3 MB)\n",
- "\u001b[K |█████████████ | 834.1 MB 1.5 MB/s eta 0:13:16tcmalloc: large alloc 1147494400 bytes == 0x55a4587ba000 @ 0x7f26db5db615 0x55a41edd03bc 0x55a41eeb118a 0x55a41edd31cd 0x55a41eec5b3d 0x55a41ee47458 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee472c0 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41edd4f19 0x55a41ee18a79 0x55a41edd3b32 0x55a41ee471dd 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee42eae 0x55a41edd49da 0x55a41ee43108 0x55a41ee4202f\n",
- "\u001b[K |████████████████▌ | 1055.7 MB 1.4 MB/s eta 0:11:52tcmalloc: large alloc 1434370048 bytes == 0x55a49ce10000 @ 0x7f26db5db615 0x55a41edd03bc 0x55a41eeb118a 0x55a41edd31cd 0x55a41eec5b3d 0x55a41ee47458 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee472c0 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41edd4f19 0x55a41ee18a79 0x55a41edd3b32 0x55a41ee471dd 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee42eae 0x55a41edd49da 0x55a41ee43108 0x55a41ee4202f\n",
- "\u001b[K |█████████████████████ | 1336.2 MB 1.3 MB/s eta 0:09:01tcmalloc: large alloc 1792966656 bytes == 0x55a421c42000 @ 0x7f26db5db615 0x55a41edd03bc 0x55a41eeb118a 0x55a41edd31cd 0x55a41eec5b3d 0x55a41ee47458 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee472c0 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41edd4f19 0x55a41ee18a79 0x55a41edd3b32 0x55a41ee471dd 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee42eae 0x55a41edd49da 0x55a41ee43108 0x55a41ee4202f\n",
- "\u001b[K |██████████████████████████▌ | 1691.1 MB 1.3 MB/s eta 0:04:36tcmalloc: large alloc 2241208320 bytes == 0x55a48ca2a000 @ 0x7f26db5db615 0x55a41edd03bc 0x55a41eeb118a 0x55a41edd31cd 0x55a41eec5b3d 0x55a41ee47458 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee472c0 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41eec6986 0x55a41ee43350 0x55a41edd4f19 0x55a41ee18a79 0x55a41edd3b32 0x55a41ee471dd 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee42eae 0x55a41edd49da 0x55a41ee43108 0x55a41ee4202f\n",
- "\u001b[K |████████████████████████████████| 2041.3 MB 1.1 MB/s eta 0:00:01tcmalloc: large alloc 2041348096 bytes == 0x55a51238c000 @ 0x7f26db5da1e7 0x55a41ee065d7 0x55a41edd03bc 0x55a41eeb118a 0x55a41edd31cd 0x55a41eec5b3d 0x55a41ee47458 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41edd49da 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f\n",
- "tcmalloc: large alloc 2551685120 bytes == 0x55a600300000 @ 0x7f26db5db615 0x55a41edd03bc 0x55a41eeb118a 0x55a41edd31cd 0x55a41eec5b3d 0x55a41ee47458 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43108 0x55a41edd49da 0x55a41ee43108 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f 0x55a41edd4aba 0x55a41ee43cd4 0x55a41ee4202f 0x55a41edd5151\n",
- "\u001b[K |████████████████████████████████| 2041.3 MB 7.2 kB/s \n",
- "\u001b[?25hCollecting torchvision==0.10.0+cu111\n",
- " Downloading https://download.pytorch.org/whl/cu111/torchvision-0.10.0%2Bcu111-cp37-cp37m-linux_x86_64.whl (23.2 MB)\n",
- "\u001b[K |████████████████████████████████| 23.2 MB 13.8 MB/s \n",
- "\u001b[?25hRequirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch==1.9.0+cu111) (3.10.0.2)\n",
- "Requirement already satisfied: pillow>=5.3.0 in /usr/local/lib/python3.7/dist-packages (from torchvision==0.10.0+cu111) (7.1.2)\n",
- "Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from torchvision==0.10.0+cu111) (1.19.5)\n",
- "Installing collected packages: torch, torchvision\n",
- " Attempting uninstall: torch\n",
- " Found existing installation: torch 1.10.0+cu111\n",
- " Uninstalling torch-1.10.0+cu111:\n",
- " Successfully uninstalled torch-1.10.0+cu111\n",
- " Attempting uninstall: torchvision\n",
- " Found existing installation: torchvision 0.11.1+cu111\n",
- " Uninstalling torchvision-0.11.1+cu111:\n",
- " Successfully uninstalled torchvision-0.11.1+cu111\n",
- "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
- "torchtext 0.11.0 requires torch==1.10.0, but you have torch 1.9.0+cu111 which is incompatible.\n",
- "torchaudio 0.10.0+cu111 requires torch==1.10.0, but you have torch 1.9.0+cu111 which is incompatible.\u001b[0m\n",
- "Successfully installed torch-1.9.0+cu111 torchvision-0.10.0+cu111\n",
- "Looking in links: https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html\n",
- "Collecting mmcv-full\n",
- " Downloading https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/mmcv_full-1.4.4-cp37-cp37m-manylinux1_x86_64.whl (67.3 MB)\n",
- "\u001b[K |████████████████████████████████| 67.3 MB 1.3 MB/s \n",
- "\u001b[?25hRequirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from mmcv-full) (21.3)\n",
- "Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from mmcv-full) (1.19.5)\n",
- "Requirement already satisfied: pyyaml in /usr/local/lib/python3.7/dist-packages (from mmcv-full) (3.13)\n",
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Collecting openmim\n",
+ " Downloading openmim-0.3.7-py2.py3-none-any.whl (51 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m51.3/51.3 kB\u001b[0m \u001b[31m536.0 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.9/dist-packages (from openmim) (2.27.1)\n",
+ "Collecting model-index\n",
+ " Downloading model_index-0.1.11-py3-none-any.whl (34 kB)\n",
+ "Requirement already satisfied: rich in /usr/local/lib/python3.9/dist-packages (from openmim) (13.3.3)\n",
+ "Requirement already satisfied: tabulate in /usr/local/lib/python3.9/dist-packages (from openmim) (0.8.10)\n",
+ "Requirement already satisfied: pandas in /usr/local/lib/python3.9/dist-packages (from openmim) (1.5.3)\n",
+ "Requirement already satisfied: Click in /usr/local/lib/python3.9/dist-packages (from openmim) (8.1.3)\n",
+ "Collecting colorama\n",
+ " Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)\n",
+ "Requirement already satisfied: pip>=19.3 in /usr/local/lib/python3.9/dist-packages (from openmim) (23.0.1)\n",
+ "Collecting ordered-set\n",
+ " Downloading ordered_set-4.1.0-py3-none-any.whl (7.6 kB)\n",
+ "Requirement already satisfied: markdown in /usr/local/lib/python3.9/dist-packages (from model-index->openmim) (3.4.3)\n",
+ "Requirement already satisfied: pyyaml in /usr/local/lib/python3.9/dist-packages (from model-index->openmim) (6.0)\n",
+ "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.9/dist-packages (from pandas->openmim) (2022.7.1)\n",
+ "Requirement already satisfied: numpy>=1.20.3 in /usr/local/lib/python3.9/dist-packages (from pandas->openmim) (1.22.4)\n",
+ "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.9/dist-packages (from pandas->openmim) (2.8.2)\n",
+ "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (2022.12.7)\n",
+ "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (2.0.12)\n",
+ "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (1.26.15)\n",
+ "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/dist-packages (from requests->openmim) (3.4)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.9/dist-packages (from rich->openmim) (2.14.0)\n",
+ "Requirement already satisfied: markdown-it-py<3.0.0,>=2.2.0 in /usr/local/lib/python3.9/dist-packages (from rich->openmim) (2.2.0)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.9/dist-packages (from markdown-it-py<3.0.0,>=2.2.0->rich->openmim) (0.1.2)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/dist-packages (from python-dateutil>=2.8.1->pandas->openmim) (1.16.0)\n",
+ "Requirement already satisfied: importlib-metadata>=4.4 in /usr/local/lib/python3.9/dist-packages (from markdown->model-index->openmim) (6.3.0)\n",
+ "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.9/dist-packages (from importlib-metadata>=4.4->markdown->model-index->openmim) (3.15.0)\n",
+ "Installing collected packages: ordered-set, colorama, model-index, openmim\n",
+ "Successfully installed colorama-0.4.6 model-index-0.1.11 openmim-0.3.7 ordered-set-4.1.0\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Looking in links: https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/index.html\n",
+ "Collecting mmengine>=0.7.0\n",
+ " Downloading mmengine-0.7.2-py3-none-any.whl (366 kB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m366.9/366.9 kB\u001b[0m \u001b[31m26.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: pyyaml in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (6.0)\n",
+ "Requirement already satisfied: rich in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (13.3.3)\n",
+ "Requirement already satisfied: opencv-python>=3 in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (4.7.0.72)\n",
"Collecting addict\n",
" Downloading addict-2.4.0-py3-none-any.whl (3.8 kB)\n",
- "Requirement already satisfied: opencv-python>=3 in /usr/local/lib/python3.7/dist-packages (from mmcv-full) (4.1.2.30)\n",
+ "Requirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (3.7.1)\n",
"Collecting yapf\n",
" Downloading yapf-0.32.0-py2.py3-none-any.whl (190 kB)\n",
- "\u001b[K |████████████████████████████████| 190 kB 5.1 MB/s \n",
- "\u001b[?25hRequirement already satisfied: Pillow in /usr/local/lib/python3.7/dist-packages (from mmcv-full) (7.1.2)\n",
- "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging->mmcv-full) (3.0.7)\n",
- "Installing collected packages: yapf, addict, mmcv-full\n",
- "Successfully installed addict-2.4.0 mmcv-full-1.4.4 yapf-0.32.0\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m190.2/190.2 kB\u001b[0m \u001b[31m25.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (1.22.4)\n",
+ "Requirement already satisfied: termcolor in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.7.0) (2.2.0)\n",
+ "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (3.0.9)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (4.39.3)\n",
+ "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (1.0.7)\n",
+ "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (8.4.0)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (0.11.0)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (1.4.4)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (23.0)\n",
+ "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (5.12.0)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.7.0) (2.8.2)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.7.0) (2.14.0)\n",
+ "Requirement already satisfied: markdown-it-py<3.0.0,>=2.2.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.7.0) (2.2.0)\n",
+ "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->mmengine>=0.7.0) (3.15.0)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.9/dist-packages (from markdown-it-py<3.0.0,>=2.2.0->rich->mmengine>=0.7.0) (0.1.2)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/dist-packages (from python-dateutil>=2.7->matplotlib->mmengine>=0.7.0) (1.16.0)\n",
+ "Installing collected packages: yapf, addict, mmengine\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "Successfully installed addict-2.4.0 mmengine-0.7.2 yapf-0.32.0\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
+ "Looking in links: https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/index.html\n",
+ "Collecting mmcv>=2.0.0rc4\n",
+ " Downloading https://download.openmmlab.com/mmcv/dist/cu118/torch2.0.0/mmcv-2.0.0-cp39-cp39-manylinux1_x86_64.whl (74.4 MB)\n",
+ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m74.4/74.4 MB\u001b[0m \u001b[31m12.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25hRequirement already satisfied: mmengine>=0.2.0 in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (0.7.2)\n",
+ "Requirement already satisfied: Pillow in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (8.4.0)\n",
+ "Requirement already satisfied: addict in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (2.4.0)\n",
+ "Requirement already satisfied: pyyaml in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (6.0)\n",
+ "Requirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (1.22.4)\n",
+ "Requirement already satisfied: packaging in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (23.0)\n",
+ "Requirement already satisfied: yapf in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (0.32.0)\n",
+ "Requirement already satisfied: opencv-python>=3 in /usr/local/lib/python3.9/dist-packages (from mmcv>=2.0.0rc4) (4.7.0.72)\n",
+ "Requirement already satisfied: termcolor in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.2.0)\n",
+ "Requirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.2.0->mmcv>=2.0.0rc4) (3.7.1)\n",
+ "Requirement already satisfied: rich in /usr/local/lib/python3.9/dist-packages (from mmengine>=0.2.0->mmcv>=2.0.0rc4) (13.3.3)\n",
+ "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (3.0.9)\n",
+ "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (1.0.7)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (4.39.3)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (0.11.0)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.8.2)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (1.4.4)\n",
+ "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (5.12.0)\n",
+ "Requirement already satisfied: markdown-it-py<3.0.0,>=2.2.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.2.0)\n",
+ "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.9/dist-packages (from rich->mmengine>=0.2.0->mmcv>=2.0.0rc4) (2.14.0)\n",
+ "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (3.15.0)\n",
+ "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.9/dist-packages (from markdown-it-py<3.0.0,>=2.2.0->rich->mmengine>=0.2.0->mmcv>=2.0.0rc4) (0.1.2)\n",
+ "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/dist-packages (from python-dateutil>=2.7->matplotlib->mmengine>=0.2.0->mmcv>=2.0.0rc4) (1.16.0)\n",
+ "Installing collected packages: mmcv\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "/usr/local/lib/python3.9/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n",
+ " warnings.warn(\n",
+ "Successfully installed mmcv-2.0.0\n",
"Cloning into 'mmdetection'...\n",
- "remote: Enumerating objects: 22983, done.\u001b[K\n",
- "remote: Counting objects: 100% (25/25), done.\u001b[K\n",
- "remote: Compressing objects: 100% (23/23), done.\u001b[K\n",
- "remote: Total 22983 (delta 4), reused 17 (delta 2), pack-reused 22958\u001b[K\n",
- "Receiving objects: 100% (22983/22983), 25.79 MiB | 34.48 MiB/s, done.\n",
- "Resolving deltas: 100% (16102/16102), done.\n",
+ "remote: Enumerating objects: 35338, done.\u001b[K\n",
+ "remote: Counting objects: 100% (31/31), done.\u001b[K\n",
+ "remote: Compressing objects: 100% (31/31), done.\u001b[K\n",
+ "remote: Total 35338 (delta 2), reused 8 (delta 0), pack-reused 35307\u001b[K\n",
+ "Receiving objects: 100% (35338/35338), 47.30 MiB | 16.88 MiB/s, done.\n",
+ "Resolving deltas: 100% (24919/24919), done.\n",
"/content/mmdetection\n",
+ "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
"Obtaining file:///content/mmdetection\n",
- "Requirement already satisfied: matplotlib in /usr/local/lib/python3.7/dist-packages (from mmdet==2.21.0) (3.2.2)\n",
- "Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from mmdet==2.21.0) (1.19.5)\n",
- "Requirement already satisfied: pycocotools in /usr/local/lib/python3.7/dist-packages (from mmdet==2.21.0) (2.0.4)\n",
- "Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from mmdet==2.21.0) (1.15.0)\n",
+ " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
+ "Requirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (3.7.1)\n",
+ "Requirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (1.22.4)\n",
+ "Requirement already satisfied: pycocotools in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (2.0.6)\n",
+ "Requirement already satisfied: scipy in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (1.10.1)\n",
+ "Requirement already satisfied: shapely in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (2.0.1)\n",
+ "Requirement already satisfied: six in /usr/local/lib/python3.9/dist-packages (from mmdet==3.0.0) (1.16.0)\n",
"Collecting terminaltables\n",
" Downloading terminaltables-3.1.10-py2.py3-none-any.whl (15 kB)\n",
- "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->mmdet==2.21.0) (1.3.2)\n",
- "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->mmdet==2.21.0) (3.0.7)\n",
- "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib->mmdet==2.21.0) (0.11.0)\n",
- "Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib->mmdet==2.21.0) (2.8.2)\n",
+ "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (1.4.4)\n",
+ "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (5.12.0)\n",
+ "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (3.0.9)\n",
+ "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (1.0.7)\n",
+ "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (0.11.0)\n",
+ "Requirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (2.8.2)\n",
+ "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (8.4.0)\n",
+ "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (23.0)\n",
+ "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->mmdet==3.0.0) (4.39.3)\n",
+ "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->mmdet==3.0.0) (3.15.0)\n",
"Installing collected packages: terminaltables, mmdet\n",
" Running setup.py develop for mmdet\n",
- "Successfully installed mmdet-2.21.0 terminaltables-3.1.10\n"
+ "Successfully installed mmdet-3.0.0 terminaltables-3.1.10\n"
]
}
],
"source": [
"# install dependencies: (use cu111 because colab has CUDA 11.1)\n",
- "!pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html\n",
- "\n",
- "# install mmcv-full thus we could use CUDA operators\n",
- "!pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html\n",
+ "%pip install -U openmim\n",
+ "!mim install \"mmengine>=0.7.0\"\n",
+ "!mim install \"mmcv>=2.0.0rc4\"\n",
"\n",
"# Install mmdetection\n",
"!rm -rf mmdetection\n",
"!git clone https://github.com/open-mmlab/mmdetection.git\n",
"%cd mmdetection\n",
"\n",
- "!pip install -e ."
+ "%pip install -e ."
]
},
{
@@ -169,73 +314,61 @@
"base_uri": "https://localhost:8080/"
},
"id": "_YeUiqAoCaoV",
- "outputId": "7f894255-c0a0-4ca7-9083-2cf0e2c0646e"
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "{'CUDA available': True,\n",
- " 'CUDA_HOME': '/usr/local/cuda',\n",
- " 'GCC': 'gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0',\n",
- " 'GPU 0': 'Tesla T4',\n",
- " 'MMCV': '1.4.4',\n",
- " 'MMCV CUDA Compiler': '11.1',\n",
- " 'MMCV Compiler': 'GCC 7.3',\n",
- " 'NVCC': 'Build cuda_11.1.TC455_06.29190527_0',\n",
- " 'OpenCV': '4.1.2',\n",
- " 'PyTorch': '1.9.0+cu111',\n",
- " 'PyTorch compiling details': 'PyTorch built with:\\n - GCC 7.3\\n - C++ Version: 201402\\n - Intel(R) Math Kernel Library Version 2020.0.0 Product Build 20191122 for Intel(R) 64 architecture applications\\n - Intel(R) MKL-DNN v2.1.2 (Git Hash 98be7e8afa711dc9b66c8ff3504129cb82013cdb)\\n - OpenMP 201511 (a.k.a. OpenMP 4.5)\\n - NNPACK is enabled\\n - CPU capability usage: AVX2\\n - CUDA Runtime 11.1\\n - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86\\n - CuDNN 8.0.5\\n - Magma 2.5.2\\n - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.1, CUDNN_VERSION=8.0.5, CXX_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/c++, CXX_FLAGS= -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -fopenmp -DNDEBUG -DUSE_KINETO -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wno-narrowing -Wall -Wextra -Werror=return-type -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wno-unused-function -Wno-unused-result -Wno-unused-local-typedefs -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_VERSION=1.9.0, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=ON, USE_NNPACK=ON, USE_OPENMP=ON, \\n',\n",
- " 'Python': '3.7.12 (default, Jan 15 2022, 18:48:18) [GCC 7.5.0]',\n",
- " 'TorchVision': '0.10.0+cu111',\n",
- " 'sys.platform': 'linux'}"
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "from mmcv import collect_env\n",
- "collect_env()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "6hD0mmMixT0p",
- "outputId": "ac4aaaeb-6b18-4500-c95c-6f781cda76fc"
+ "outputId": "98b02135-08f8-4142-9b59-80056f29192d"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
+ "name": "stdout",
"text": [
- "1.9.0+cu111 True\n",
- "2.21.0\n",
- "11.1\n",
- "GCC 7.3\n"
+ "sys.platform: linux\n",
+ "Python: 3.9.16 (main, Dec 7 2022, 01:11:51) [GCC 9.4.0]\n",
+ "CUDA available: True\n",
+ "numpy_random_seed: 2147483648\n",
+ "GPU 0: Tesla T4\n",
+ "CUDA_HOME: /usr/local/cuda\n",
+ "NVCC: Cuda compilation tools, release 11.8, V11.8.89\n",
+ "GCC: x86_64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0\n",
+ "PyTorch: 2.0.0+cu118\n",
+ "PyTorch compiling details: PyTorch built with:\n",
+ " - GCC 9.3\n",
+ " - C++ Version: 201703\n",
+ " - Intel(R) oneAPI Math Kernel Library Version 2022.2-Product Build 20220804 for Intel(R) 64 architecture applications\n",
+ " - Intel(R) MKL-DNN v2.7.3 (Git Hash 6dbeffbae1f23cbbeae17adb7b5b13f1f37c080e)\n",
+ " - OpenMP 201511 (a.k.a. OpenMP 4.5)\n",
+ " - LAPACK is enabled (usually provided by MKL)\n",
+ " - NNPACK is enabled\n",
+ " - CPU capability usage: AVX2\n",
+ " - CUDA Runtime 11.8\n",
+ " - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90\n",
+ " - CuDNN 8.7\n",
+ " - Magma 2.6.1\n",
+ " - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.8, CUDNN_VERSION=8.7.0, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.0.0, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, \n",
+ "\n",
+ "TorchVision: 0.15.1+cu118\n",
+ "OpenCV: 4.7.0\n",
+ "MMEngine: 0.7.2\n",
+ "MMDetection: 3.0.0+ecac3a7\n"
]
}
],
"source": [
- "# Check Pytorch installation\n",
- "import torch, torchvision\n",
- "print(torch.__version__, torch.cuda.is_available())\n",
+ "from mmengine.utils import get_git_hash\n",
+ "from mmengine.utils.dl_utils import collect_env as collect_base_env\n",
"\n",
- "# Check MMDetection installation\n",
"import mmdet\n",
- "print(mmdet.__version__)\n",
"\n",
- "# Check mmcv installation\n",
- "from mmcv.ops import get_compiling_cuda_version, get_compiler_version\n",
- "print(get_compiling_cuda_version())\n",
- "print(get_compiler_version())"
+ "\n",
+ "def collect_env():\n",
+ " \"\"\"Collect the information of the running environments.\"\"\"\n",
+ " env_info = collect_base_env()\n",
+ " env_info['MMDetection'] = f'{mmdet.__version__}+{get_git_hash()[:7]}'\n",
+ " return env_info\n",
+ "\n",
+ "\n",
+ "if __name__ == '__main__':\n",
+ " for name, val in collect_env().items():\n",
+ " print(f'{name}: {val}')"
]
},
{
@@ -254,435 +387,352 @@
"id": "s99mDGBG1S1z"
},
"source": [
- "### A two-stage detector\n",
- "\n",
- "In this tutorial, we use Faster R-CNN, a simple two-stage detector as an example.\n",
+ "### An efficient Real-Time one-stage detector\n",
"\n",
- "The high-level architecture of Faster R-CNN is shown in the following picture. More details can be found in the [paper](https://arxiv.org/abs/1506.01497).\n",
+ "In this tutorial, we use RTMDet, an efficient Real-Time one-stage detector as an example.\n",
"\n",
- "![faster rcnn](https://pic1.zhimg.com/80/v2-c0172be282021a1029f7b72b51079ffe_1440w.jpg)\n",
+ "The high-level architecture of RTMDet is shown in the following picture. More details can be found in the [paper](https://arxiv.org/abs/2212.07784).\n",
"\n",
- "![mmdet](https://pic2.zhimg.com/v2-e49ebcf931b5cf424ed311338f9ff35d_b.jpg)\n",
+ "![RTMDet](https://user-images.githubusercontent.com/27466624/225922103-404064c1-3cb0-4ab5-9388-79f9517dcdb0.jpg)\n",
"\n",
- "Briefly, it uses a convolutional neural network (CNN) as backbone to extract features from an image. Then, it uses a region proposal network (RPN) to predict proposals, i.e., potential objects. After that, it uses a feature extractor to crop features for the region of interests (RoI), and uses a RoI Head to perform classification and bounding box prediction.\n",
+ "To obtain a more efficient model architecture, MMDetection explore an architecture that has compatible capacities in the backbone and neck, constructed by a basic building block that consists of large-kernel depth-wise convolutions. MMDetection further introduce soft labels when calculating matching costs in the dynamic label assignment to improve accuracy. Together with better training techniques, the resulting object detector, named RTMDet, achieves 52.8% AP on COCO with 300+ FPS on an NVIDIA 3090 GPU, outperforming the current mainstream industrial detectors. RTMDet achieves the best parameter-accuracy trade-off with tiny/small/medium/large/extra-large model sizes for various application scenarios, and obtains new state-of-the-art performance on real-time instance segmentation and rotated object detection. We hope the experimental results can provide new insights into designing versatile real-time object detectors for many object recognition tasks.\n",
"\n"
]
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 4,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "j4doHX4exvS1",
- "outputId": "b42719be-cb70-47a1-867a-56649a794c44"
+ "outputId": "9eb9d460-7e3f-4bbc-f9e6-5823773375d3"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
+ "name": "stdout",
"text": [
- "--2022-02-08 11:29:13-- https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth\n",
- "Resolving download.openmmlab.com (download.openmmlab.com)... 47.252.96.28\n",
- "Connecting to download.openmmlab.com (download.openmmlab.com)|47.252.96.28|:443... connected.\n",
- "HTTP request sent, awaiting response... 200 OK\n",
- "Length: 167291982 (160M) [application/octet-stream]\n",
- "Saving to: ‘checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth’\n",
- "\n",
- "checkpoints/faster_ 100%[===================>] 159.54M 7.92MB/s in 22s \n",
- "\n",
- "2022-02-08 11:29:37 (7.28 MB/s) - ‘checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth’ saved [167291982/167291982]\n",
- "\n"
+ "processing rtmdet_tiny_8xb32-300e_coco...\n",
+ "\u001b[2Kdownloading \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.9/54.9 MiB\u001b[0m \u001b[31m54.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+ "\u001b[?25h\u001b[32mSuccessfully downloaded rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth to /content/mmdetection/checkpoints\u001b[0m\n",
+ "\u001b[32mSuccessfully dumped rtmdet_tiny_8xb32-300e_coco.py to /content/mmdetection/checkpoints\u001b[0m\n"
]
}
],
"source": [
"# We download the pre-trained checkpoints for inference and finetuning.\n",
- "!mkdir checkpoints\n",
- "!wget -c https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth \\\n",
- " -O checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth"
+ "!mkdir ./checkpoints\n",
+ "!mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest ./checkpoints"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "fLgFRMtP91ue"
+ },
+ "source": [
+ "### Inference the detector\n",
+ "\n",
+ "Since the model is successfully created and loaded, let's see how good it is. We use the high-level API `DetInferencer` implemented in the MMDetection. This API is created to ease the inference process. The details of the codes can be found [here](https://github.com/open-mmlab/mmdetection/blob/dev-3.x/mmdet/apis/det_inferencer.py)."
]
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 5,
"metadata": {
"colab": {
- "base_uri": "https://localhost:8080/"
+ "base_uri": "https://localhost:8080/",
+ "height": 244,
+ "referenced_widgets": [
+ "b1188048a1f04c2fa77c0d3829da39bd",
+ "534561e3c4804bae96a30d44493d701d"
+ ]
},
- "id": "8M5KUnX7Np3h",
- "outputId": "a061bced-262e-404f-94c5-6400a75078b3"
+ "id": "Wi6DRpsQPEmV",
+ "outputId": "0b0a14bc-fd10-4ec4-a585-e1ddefc33973"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
+ "name": "stdout",
"text": [
- "load checkpoint from local path: checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth\n"
+ "Loads checkpoint by local backend from path: ./checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth\n",
+ "The model and loaded state dict do not match exactly\n",
+ "\n",
+ "unexpected key in source state_dict: data_preprocessor.mean, data_preprocessor.std\n",
+ "\n",
+ "04/17 10:28:19 - mmengine - WARNING - Failed to search registry with scope \"mmdet\" in the \"function\" registry tree. As a workaround, the current \"function\" registry in \"mmengine\" is used to build instance. This may cause unexpected failure when running the built modules. Please check whether \"mmdet\" is a correct scope, or whether the registry is initialized.\n",
+ "04/17 10:28:19 - mmengine - WARNING - `Visualizer` backend is not initialized because save_dir is None.\n"
]
},
{
+ "output_type": "display_data",
"data": {
"text/plain": [
- "FasterRCNN(\n",
- " (backbone): ResNet(\n",
- " (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n",
- " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n",
- " (layer1): ResLayer(\n",
- " (0): Bottleneck(\n",
- " (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " (downsample): Sequential(\n",
- " (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " )\n",
- " )\n",
- " (1): Bottleneck(\n",
- " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (2): Bottleneck(\n",
- " (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " )\n",
- " (layer2): ResLayer(\n",
- " (0): Bottleneck(\n",
- " (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
- " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " (downsample): Sequential(\n",
- " (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
- " (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " )\n",
- " )\n",
- " (1): Bottleneck(\n",
- " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (2): Bottleneck(\n",
- " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (3): Bottleneck(\n",
- " (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " )\n",
- " (layer3): ResLayer(\n",
- " (0): Bottleneck(\n",
- " (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
- " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " (downsample): Sequential(\n",
- " (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
- " (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " )\n",
- " )\n",
- " (1): Bottleneck(\n",
- " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (2): Bottleneck(\n",
- " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (3): Bottleneck(\n",
- " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (4): Bottleneck(\n",
- " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (5): Bottleneck(\n",
- " (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " )\n",
- " (layer4): ResLayer(\n",
- " (0): Bottleneck(\n",
- " (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
- " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " (downsample): Sequential(\n",
- " (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
- " (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " )\n",
- " )\n",
- " (1): Bottleneck(\n",
- " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " (2): Bottleneck(\n",
- " (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
- " (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
- " (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " )\n",
- " )\n",
- " init_cfg={'type': 'Pretrained', 'checkpoint': 'open-mmlab://detectron2/resnet50_caffe'}\n",
- " (neck): FPN(\n",
- " (lateral_convs): ModuleList(\n",
- " (0): ConvModule(\n",
- " (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))\n",
- " )\n",
- " (1): ConvModule(\n",
- " (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
- " )\n",
- " (2): ConvModule(\n",
- " (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))\n",
- " )\n",
- " (3): ConvModule(\n",
- " (conv): Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))\n",
- " )\n",
- " )\n",
- " (fpn_convs): ModuleList(\n",
- " (0): ConvModule(\n",
- " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
- " )\n",
- " (1): ConvModule(\n",
- " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
- " )\n",
- " (2): ConvModule(\n",
- " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
- " )\n",
- " (3): ConvModule(\n",
- " (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
- " )\n",
- " )\n",
- " )\n",
- " init_cfg={'type': 'Xavier', 'layer': 'Conv2d', 'distribution': 'uniform'}\n",
- " (rpn_head): RPNHead(\n",
- " (loss_cls): CrossEntropyLoss()\n",
- " (loss_bbox): L1Loss()\n",
- " (rpn_conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
- " (rpn_cls): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
- " (rpn_reg): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n",
- " )\n",
- " init_cfg={'type': 'Normal', 'layer': 'Conv2d', 'std': 0.01}\n",
- " (roi_head): StandardRoIHead(\n",
- " (bbox_roi_extractor): SingleRoIExtractor(\n",
- " (roi_layers): ModuleList(\n",
- " (0): RoIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
- " (1): RoIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
- " (2): RoIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
- " (3): RoIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
- " )\n",
- " )\n",
- " (bbox_head): Shared2FCBBoxHead(\n",
- " (loss_cls): CrossEntropyLoss()\n",
- " (loss_bbox): L1Loss()\n",
- " (fc_cls): Linear(in_features=1024, out_features=81, bias=True)\n",
- " (fc_reg): Linear(in_features=1024, out_features=320, bias=True)\n",
- " (shared_convs): ModuleList()\n",
- " (shared_fcs): ModuleList(\n",
- " (0): Linear(in_features=12544, out_features=1024, bias=True)\n",
- " (1): Linear(in_features=1024, out_features=1024, bias=True)\n",
- " )\n",
- " (cls_convs): ModuleList()\n",
- " (cls_fcs): ModuleList()\n",
- " (reg_convs): ModuleList()\n",
- " (reg_fcs): ModuleList()\n",
- " (relu): ReLU(inplace=True)\n",
- " )\n",
- " init_cfg=[{'type': 'Normal', 'std': 0.01, 'override': {'name': 'fc_cls'}}, {'type': 'Normal', 'std': 0.001, 'override': {'name': 'fc_reg'}}, {'type': 'Xavier', 'distribution': 'uniform', 'override': [{'name': 'shared_fcs'}, {'name': 'cls_fcs'}, {'name': 'reg_fcs'}]}]\n",
- " )\n",
- ")"
+ "Output()"
+ ],
+ "application/vnd.jupyter.widget-view+json": {
+ "version_major": 2,
+ "version_minor": 0,
+ "model_id": "b1188048a1f04c2fa77c0d3829da39bd"
+ }
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "/usr/local/lib/python3.9/dist-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming \n",
+ "release, it will be required to pass the indexing argument. (Triggered internally at \n",
+ "../aten/src/ATen/native/TensorShape.cpp:3483.)\n",
+ " return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]\n"
+ ],
+ "text/html": [
+ "/usr/local/lib/python3.9/dist-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming \n",
+ "release, it will be required to pass the indexing argument. (Triggered internally at \n",
+ "../aten/src/ATen/native/TensorShape.cpp:3483.)\n",
+ " return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]\n",
+ " \n"
]
},
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [],
+ "text/html": [
+ " \n"
+ ]
+ },
+ "metadata": {}
+ },
+ {
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\n"
+ ],
+ "text/html": [
+ "\n",
+ " \n"
+ ]
+ },
+ "metadata": {}
}
],
"source": [
- "import mmcv\n",
- "from mmcv.runner import load_checkpoint\n",
- "\n",
- "from mmdet.apis import inference_detector, show_result_pyplot\n",
- "from mmdet.models import build_detector\n",
+ "from mmdet.apis import DetInferencer\n",
"\n",
- "# Choose to use a config and initialize the detector\n",
- "config = 'configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco.py'\n",
+ "# Choose to use a config\n",
+ "model_name = 'rtmdet_tiny_8xb32-300e_coco'\n",
"# Setup a checkpoint file to load\n",
- "checkpoint = 'checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth'\n",
+ "checkpoint = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n",
"\n",
"# Set the device to be used for evaluation\n",
- "device='cuda:0'\n",
- "\n",
- "# Load the config\n",
- "config = mmcv.Config.fromfile(config)\n",
- "# Set pretrained to be None since we do not need pretrained model here\n",
- "config.model.pretrained = None\n",
+ "device = 'cuda:0'\n",
"\n",
- "# Initialize the detector\n",
- "model = build_detector(config.model)\n",
+ "# Initialize the DetInferencer\n",
+ "inferencer = DetInferencer(model_name, checkpoint, device)\n",
"\n",
- "# Load checkpoint\n",
- "checkpoint = load_checkpoint(model, checkpoint, map_location=device)\n",
- "\n",
- "# Set the classes of models for inference\n",
- "model.CLASSES = checkpoint['meta']['CLASSES']\n",
- "\n",
- "# We need to set the model's cfg for inference\n",
- "model.cfg = config\n",
- "\n",
- "# Convert the model to GPU\n",
- "model.to(device)\n",
- "# Convert the model into evaluation mode\n",
- "model.eval()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "fLgFRMtP91ue"
- },
- "source": [
- "From the printed model, we will find that the model does consist of the components that we described earlier. It uses ResNet as its CNN backbone, and has a RPN head and RoI Head. In addition, the model has a neural network module, named neck, directly after the CNN backbone. It is a [feature pyramid network (FPN)](https://arxiv.org/abs/1612.03144) for enhancing the multi-scale features.\n",
- "\n",
- "\n",
- "### Inference the detector\n",
- "\n",
- "Since the model is successfully created and loaded, let's see how good it is. We use the high-level API `inference_detector` implemented in the MMDetection. This API is created to ease the inference process. The details of the codes can be found [here](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/apis/inference.py#L15)."
+ "# Use the detector to do inference\n",
+ "img = './demo/demo.jpg'\n",
+ "result = inferencer(img, out_dir='./output')"
]
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 6,
"metadata": {
"colab": {
- "base_uri": "https://localhost:8080/"
+ "base_uri": "https://localhost:8080/",
+ "height": 1000
},
- "id": "Wi6DRpsQPEmV",
- "outputId": "a0e1e23c-d78c-4381-9f4c-5603c81a0f87"
+ "id": "m6a8T4goU8Sq",
+ "outputId": "68005045-d741-4f53-b59b-16881337bebf"
},
"outputs": [
{
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/content/mmdetection/mmdet/datasets/utils.py:69: UserWarning: \"ImageToTensor\" pipeline is replaced by \"DefaultFormatBundle\" for batch inference. It is recommended to manually replace it in the test data pipeline in your config file.\n",
- " 'data pipeline in your config file.', UserWarning)\n",
- "/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at /pytorch/c10/core/TensorImpl.h:1156.)\n",
- " return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)\n"
- ]
+ "output_type": "display_data",
+ "data": {
+ "text/plain": [
+ "\u001b[1m{\u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[32m'predictions'\u001b[0m: \u001b[1m[\u001b[0m\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m{\u001b[0m\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'bboxes'\u001b[0m: \u001b[1m[\u001b[0m\n",
+ "\u001b[2;32m│ │ │ │ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m221.37188720703125\u001b[0m, \u001b[1;36m176.12808227539062\u001b[0m, \u001b[1;36m456.25811767578125\u001b[0m, \u001b[1;36m383.2401428222656\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ │ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m295.3505859375\u001b[0m, \u001b[1;36m117.18350219726562\u001b[0m, \u001b[1;36m378.571533203125\u001b[0m, \u001b[1;36m150.27117919921875\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ │ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m190.57350158691406\u001b[0m, \u001b[1;36m109.70985412597656\u001b[0m, \u001b[1;36m299.52215576171875\u001b[0m, \u001b[1;36m155.0396270751953\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ │ \u001b[0m\u001b[1m[\u001b[0m\u001b[1;36m431.36944580078125\u001b[0m, \u001b[1;36m104.98468780517578\u001b[0m, \u001b[1;36m484.879150390625\u001b[0m, \u001b[1;36m131.94033813476562\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ │ \u001b[0m\u001b[33m...\u001b[0m +\u001b[1;36m296\u001b[0m\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'labels'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m13\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[1;36m2\u001b[0m, \u001b[33m...\u001b[0m +\u001b[1;36m296\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ │ \u001b[0m\u001b[32m'scores'\u001b[0m: \u001b[1m[\u001b[0m\u001b[1;36m0.8703235387802124\u001b[0m, \u001b[1;36m0.7677358984947205\u001b[0m, \u001b[1;36m0.7427828311920166\u001b[0m, \u001b[1;36m0.6994596123695374\u001b[0m, \u001b[33m...\u001b[0m +\u001b[1;36m296\u001b[0m\u001b[1m]\u001b[0m\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m}\u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[32m'visualization'\u001b[0m: \u001b[1m[\u001b[0m\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1;35marray\u001b[0m\u001b[1m(\u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m28\u001b[0m, \u001b[1;36m48\u001b[0m, \u001b[1;36m13\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m37\u001b[0m, \u001b[1;36m63\u001b[0m, \u001b[1;36m28\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m30\u001b[0m, \u001b[1;36m64\u001b[0m, \u001b[1;36m27\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[33m...\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m23\u001b[0m, \u001b[1;36m47\u001b[0m, \u001b[1;36m31\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m31\u001b[0m, \u001b[1;36m67\u001b[0m, \u001b[1;36m31\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m54\u001b[0m, \u001b[1;36m92\u001b[0m, \u001b[1;36m17\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m23\u001b[0m, \u001b[1;36m42\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m25\u001b[0m, \u001b[1;36m50\u001b[0m, \u001b[1;36m8\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m30\u001b[0m, \u001b[1;36m62\u001b[0m, \u001b[1;36m21\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[33m...\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m92\u001b[0m, \u001b[1;36m114\u001b[0m, \u001b[1;36m102\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m16\u001b[0m, \u001b[1;36m53\u001b[0m, \u001b[1;36m12\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m44\u001b[0m, \u001b[1;36m75\u001b[0m, \u001b[1;36m16\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m20\u001b[0m, \u001b[1;36m50\u001b[0m, \u001b[1;36m0\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m25\u001b[0m, \u001b[1;36m59\u001b[0m, \u001b[1;36m8\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m29\u001b[0m, \u001b[1;36m66\u001b[0m, \u001b[1;36m23\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[33m...\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m47\u001b[0m, \u001b[1;36m70\u001b[0m, \u001b[1;36m44\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m29\u001b[0m, \u001b[1;36m60\u001b[0m, \u001b[1;36m18\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m54\u001b[0m, \u001b[1;36m77\u001b[0m, \u001b[1;36m31\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[33m...\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m63\u001b[0m, \u001b[1;36m68\u001b[0m, \u001b[1;36m45\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m58\u001b[0m, \u001b[1;36m66\u001b[0m, \u001b[1;36m27\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m74\u001b[0m, \u001b[1;36m84\u001b[0m, \u001b[1;36m49\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[33m...\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m32\u001b[0m, \u001b[1;36m46\u001b[0m, \u001b[1;36m23\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m56\u001b[0m, \u001b[1;36m76\u001b[0m, \u001b[1;36m39\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m31\u001b[0m, \u001b[1;36m47\u001b[0m, \u001b[1;36m18\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m60\u001b[0m, \u001b[1;36m66\u001b[0m, \u001b[1;36m40\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m45\u001b[0m, \u001b[1;36m55\u001b[0m, \u001b[1;36m18\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m83\u001b[0m, \u001b[1;36m92\u001b[0m, \u001b[1;36m61\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[33m...\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m63\u001b[0m, \u001b[1;36m77\u001b[0m, \u001b[1;36m54\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m47\u001b[0m, \u001b[1;36m67\u001b[0m, \u001b[1;36m30\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m35\u001b[0m, \u001b[1;36m52\u001b[0m, \u001b[1;36m20\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ \u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m[\u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m64\u001b[0m, \u001b[1;36m70\u001b[0m, \u001b[1;36m42\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m85\u001b[0m, \u001b[1;36m95\u001b[0m, \u001b[1;36m60\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m66\u001b[0m, \u001b[1;36m75\u001b[0m, \u001b[1;36m48\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[33m...\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m37\u001b[0m, \u001b[1;36m51\u001b[0m, \u001b[1;36m28\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m59\u001b[0m, \u001b[1;36m79\u001b[0m, \u001b[1;36m42\u001b[0m\u001b[1m]\u001b[0m,\n",
+ "\u001b[2;32m│ │ \u001b[0m\u001b[1m[\u001b[0m \u001b[1;36m44\u001b[0m, \u001b[1;36m61\u001b[0m, \u001b[1;36m29\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m\u001b[1m]\u001b[0m, \u001b[33mdtype\u001b[0m=\u001b[35muint8\u001b[0m\u001b[1m)\u001b[0m\n",
+ "\u001b[2;32m│ \u001b[0m\u001b[1m]\u001b[0m\n",
+ "\u001b[1m}\u001b[0m\n"
+ ],
+ "text/html": [
+ "{ \n",
+ "│ 'predictions' : [ \n",
+ "│ │ { \n",
+ "│ │ │ 'bboxes' : [ \n",
+ "│ │ │ │ [ 221.37188720703125 , 176.12808227539062 , 456.25811767578125 , 383.2401428222656 ] ,\n",
+ "│ │ │ │ [ 295.3505859375 , 117.18350219726562 , 378.571533203125 , 150.27117919921875 ] ,\n",
+ "│ │ │ │ [ 190.57350158691406 , 109.70985412597656 , 299.52215576171875 , 155.0396270751953 ] ,\n",
+ "│ │ │ │ [ 431.36944580078125 , 104.98468780517578 , 484.879150390625 , 131.94033813476562 ] ,\n",
+ "│ │ │ │ ... +296 \n",
+ "│ │ │ ] ,\n",
+ "│ │ │ 'labels' : [ 13 , 2 , 2 , 2 , ... +296 ] ,\n",
+ "│ │ │ 'scores' : [ 0.8703235387802124 , 0.7677358984947205 , 0.7427828311920166 , 0.6994596123695374 , ... +296 ] \n",
+ "│ │ } \n",
+ "│ ] ,\n",
+ "│ 'visualization' : [ \n",
+ "│ │ array ([[[ 28 , 48 , 13 ] ,\n",
+ "│ │ [ 37 , 63 , 28 ] ,\n",
+ "│ │ [ 30 , 64 , 27 ] ,\n",
+ "│ │ ... ,\n",
+ "│ │ [ 23 , 47 , 31 ] ,\n",
+ "│ │ [ 31 , 67 , 31 ] ,\n",
+ "│ │ [ 54 , 92 , 17 ]] ,\n",
+ "│ \n",
+ "│ [[ 23 , 42 , 0 ] ,\n",
+ "│ │ [ 25 , 50 , 8 ] ,\n",
+ "│ │ [ 30 , 62 , 21 ] ,\n",
+ "│ │ ... ,\n",
+ "│ │ [ 92 , 114 , 102 ] ,\n",
+ "│ │ [ 16 , 53 , 12 ] ,\n",
+ "│ │ [ 44 , 75 , 16 ]] ,\n",
+ "│ \n",
+ "│ [[ 20 , 50 , 0 ] ,\n",
+ "│ │ [ 25 , 59 , 8 ] ,\n",
+ "│ │ [ 29 , 66 , 23 ] ,\n",
+ "│ │ ... ,\n",
+ "│ │ [ 47 , 70 , 44 ] ,\n",
+ "│ │ [ 29 , 60 , 18 ] ,\n",
+ "│ │ [ 54 , 77 , 31 ]] ,\n",
+ "│ \n",
+ "│ ... ,\n",
+ "│ \n",
+ "│ [[ 63 , 68 , 45 ] ,\n",
+ "│ │ [ 58 , 66 , 27 ] ,\n",
+ "│ │ [ 74 , 84 , 49 ] ,\n",
+ "│ │ ... ,\n",
+ "│ │ [ 32 , 46 , 23 ] ,\n",
+ "│ │ [ 56 , 76 , 39 ] ,\n",
+ "│ │ [ 31 , 47 , 18 ]] ,\n",
+ "│ \n",
+ "│ [[ 60 , 66 , 40 ] ,\n",
+ "│ │ [ 45 , 55 , 18 ] ,\n",
+ "│ │ [ 83 , 92 , 61 ] ,\n",
+ "│ │ ... ,\n",
+ "│ │ [ 63 , 77 , 54 ] ,\n",
+ "│ │ [ 47 , 67 , 30 ] ,\n",
+ "│ │ [ 35 , 52 , 20 ]] ,\n",
+ "│ \n",
+ "│ [[ 64 , 70 , 42 ] ,\n",
+ "│ │ [ 85 , 95 , 60 ] ,\n",
+ "│ │ [ 66 , 75 , 48 ] ,\n",
+ "│ │ ... ,\n",
+ "│ │ [ 37 , 51 , 28 ] ,\n",
+ "│ │ [ 59 , 79 , 42 ] ,\n",
+ "│ │ [ 44 , 61 , 29 ]]] , dtype =uint8 ) \n",
+ "│ ] \n",
+ "} \n",
+ " \n"
+ ]
+ },
+ "metadata": {}
}
],
"source": [
- "# Use the detector to do inference\n",
- "img = 'demo/demo.jpg'\n",
- "result = inference_detector(model, img)"
+ "# Show the structure of result dict\n",
+ "from rich.pretty import pprint\n",
+ "pprint(result, max_length=4)"
]
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
- "height": 474
+ "height": 444
},
"id": "UsJU5D-QPX8L",
- "outputId": "b70aceab-d264-4f5e-cdbe-5db1389eeb29"
+ "outputId": "766f3211-301b-4a89-ae9d-898a92181c67"
},
"outputs": [
{
+ "output_type": "execute_result",
"data": {
- "image/png": "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",
"text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
+ ""
+ ],
+ "image/png": "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PC65ydJHW8N6IyiKqh63MGYsIMJgRgzQ1ogCYSgywRTQVZHavahBG3EwMLbM2ZXLF+IgeP2brzsNUE2GP/D/+NE4pmFsMEa//3tffnh758pjTw6GB8ls6Pg4HReXLz3x7rU3prMeIUqcWlpMRkNr9Yuf+IwixGBna+vhctOvBc0KZ8RgABBXGkKojSZMIASApQh6xigANYAKEwipnY60MmXcRecfi/e+ciNwQ0CsrdqYzaiffvzjj0OgF9ud472jr37xjcBpfu2r12ttFDRR7/ignArPpTxLJA54VQUx2t4/3O8dvvxdL3LFl08t7588ure9femxc624u320/2M/+hOvfv0bntfQ08QaCACw2lj4YRH3HAPrMDZP8VPGsEuJ744Go/67b2/vbjsQYoIqo+JWe3qw77puJaQFmqu8qqo4jjmX+7t7m2fPRKuLezv7o15/6dQKN8ogwKVwXR9jnMyyKIq01uPJjDHmMG/u20ySxGGh1awSFhm9uNgVWkSBz8vcj5jRcjaeMEzLShCCG36nUnp5La41G1mWDU8mRVHcubulIfxzf+G/oucuyULevX4rSQcGINetWwyX108dnoyeePqFna2sXV/f3d1FwlTjIvB913fneRhr9cry0rW33/na6+85LsGUAAAa9U5VmskohZYYiV3XwQAqXWGMubQnxxOCvVoH9fvpkEyVVVrLS1cu904mWpuVtQuPtm+Nxsn62sY7b7wHLanX4t7uEVp2z54782DrPsY4SfIwDMbTaeDTTr3Z700w8iBmghtjZVlVccNVFhDlrq2eWjnb2dv9wPZn77z9zunNx1975auPHtyLm2Gu9MEgtdgBqtpY2jgcHY3SZHmpNa2ElCZLq8CFuyeJos3jQYloOMvknb3t8089VkmepGmalNDAwCVGK0ggQLbMEmC1NIDFobW6KMZ114FSJELUlgKRe9BKqVNhwK07O7UoliJdXV3M00JKef/REZfl537qx+/fv1uUhsD2rUe31zc333v/zunTp+vJ7A+/tL+42ppNp2UOPvbCRQzw2urFgqvBLJ0ORlcvXBmOehpIREFWpK6CGKKF5aWy0oUaM9c3ACCIZCUwonleMo/FIUV49u61G52Ov3lm8eBgd6G7Ljn5lk9/7w//8A//zb/1Uz/w/Z/9xV/6vNUmDJxkmu7uPigLWavFBui19cWDg70w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RBza3u6eO25/7ZBD5xeqTrMjm6POgiWEOZTSnrCVf/zxKW3yhLZiYVes7N669XWpQ45OkiRHHHnIxz/5WaLtnIF+0OAQ2LJhLRqJaGdzrykAGEAC1qjfXnvFn/508x9+f8PTjz0zPjkch4kxpqe3S4j81ORIuzW9YP6cRx97+HvfPeeYY46cnp6cGB8FY6SIz/3B2ddedZ1UmREawNx7770/uODCb3zja2+99damTRv27tl3wknHXXn1Fbt27dq0aZPRhR/+4IIrrrrilZdePf64I6+55powal962WXIUFs9OxtSFhYsWjw5OX7woUcvWrRfdxHiON66devwnr1vv/02Y6yvr88S2L17yPO8hQvnD+3apbUeHR231gIYqQVjbFYW0+p0/kds9VzOsb+3L8nSqakpArTT6Th+gIhZKoRIOXNcrxQ29fDw8GGHHvLGK6ubzZgS+YlPfOKC8y8yxtx51+25fBXR11oRgmHYybLMWkMQRZZyRjdt2jRnzpyZmZnFixc//PDD8+bNEyLTWrVb04Wib61mBLTWhVwpiWWWJsuWrXjo4ZeNsZwEaNpK6EK+YG1CeFjKF5qtkDGWhikAeAUXtAGDjPEkzYqBu3jpnHY8yahyKHFpsP+KFTIKA9dvd9jmjXtzuYLITCayXF4nceg7c03mtOqNJJt46+3Row5710UX/UCK9Gc/+9ErL7947bXX7ty5s9lsW20ZByRSmQi0ueDC71x33RWeX5w3b74x6gtf+PzChYs9L3jxxedbndaylfPPP/9CJe3jjz85Njre01s744wzrrz6d+eefxZa1dvbf8455zz44IOMESmzwA8O2P/It95cPzgwx2gwRn3rW9+45prf/utf9//sZz/5+hmfv+SSSyYmJn971TUa2JyB+ZVi7blnXvzn/fd3OlGtVlm8cN7TTz0aRk0pI8rhz7dcj2As0GKh0qjXr7z6egtAECkHoEppc+tfb/zLbQAWCBADnGmQHAxY/eyzLx1z5PE33nyDBvOby3/+3AvP/fDHPxwbGU2zOMsSY6XWkhBCbHDR+edde+0furrLcToFNrngvB/Mm7uEc3ziyUfCZueAlQd897vnLJg779orr73rrrsmJ8fPOPOrt9566yc+8Ylly1cSCm+89vr4+CQA3HXX3//611u1NTf88UYpJSCt1XqrvT0JqGajU2ClNbv3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\n"
},
- "output_type": "display_data"
+ "metadata": {},
+ "execution_count": 7
}
],
"source": [
- "# Let's plot the result\n",
- "show_result_pyplot(model, img, result, score_thr=0.3)"
+ "# Show the output image\n",
+ "from PIL import Image\n",
+ "Image.open('./output/vis/demo.jpg')"
]
},
{
@@ -691,13 +741,15 @@
"id": "7GrWIJywLV-V"
},
"source": [
- "## Train A Detector on A Customized Dataset\n",
+ "## Train with customized datasets\n",
"\n",
- "To train a new detector, there are usually three things to do:\n",
- "1. Support a new dataset\n",
- "2. Modify the config\n",
- "3. Train a new detector\n",
- "\n"
+ "In this part, you will know how to train predefined models with customized datasets and then test it. We use the [balloon dataset](https://github.com/matterport/Mask_RCNN/tree/master/samples/balloon) as an example to describe the whole process.\n",
+ "\n",
+ "The basic steps are as below:\n",
+ "\n",
+ "1. Prepare the customized dataset\n",
+ "2. Prepare a config\n",
+ "3. Train, test, and infer models on the customized dataset.\n"
]
},
{
@@ -706,985 +758,1675 @@
"id": "E73y5Lru-wBx"
},
"source": [
- "### Support a new dataset\n",
+ "### Prepare the customized dataset\n",
+ "\n",
+ "There are three ways to support a new dataset in MMDetection:\n",
"\n",
- "There are three ways to support a new dataset in MMDetection: \n",
- " 1. Reorganize the dataset into a COCO format.\n",
- " 2. Reorganize the dataset into a middle format.\n",
- " 3. Implement a new dataset.\n",
+ "1. Reorganize the dataset into COCO format.\n",
+ "2. Reorganize the dataset into a middle format.\n",
+ "3. Implement a new dataset.\n",
"\n",
- "We recommend the first two methods, as they are usually easier than the third one.\n",
+ "Usually, we recommend using the first two methods which are usually easier than the third.\n",
"\n",
- "In this tutorial, we give an example that converts the data into the formats of existing datasets, e.g. COCO, VOC, etc. Other methods and more advanced usages can be found in the [doc](https://mmdetection.readthedocs.io/en/latest/tutorials/customize_dataset.html#).\n",
+ "In this tutorial, we use the ballon dataset an example of converting the data into COCO format.\n",
"\n",
- "First, let's download a tiny dataset obtained from [KITTI](http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d). We select the first 75 images and their annotations from the 3D object detection dataset (it is the same dataset as the 2D object detection dataset but with 3D annotations). We convert the original images from PNG to JPEG format with 80% quality to reduce the size of the dataset."
+ "**Note**: Datasets and metrics have been decoupled except CityScapes since MMDetection 3.0. Therefore, users can use any kind of evaluation metrics for any format of datasets during validation. For example: evaluate on COCO dataset with VOC metric, or evaluate on OpenImages dataset with both VOC and COCO metrics."
]
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 8,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
- "id": "rHnw5Q_nARXq",
- "outputId": "089f8810-be3a-4627-e3d7-945b3c5cf29e"
+ "id": "sbJhEsckU8UX",
+ "outputId": "b9fdd1b1-5591-41b9-b27c-cadccac9aafa"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
- "text": [
- "--2022-02-08 11:33:06-- https://download.openmmlab.com/mmdetection/data/kitti_tiny.zip\n",
- "Resolving download.openmmlab.com (download.openmmlab.com)... 47.245.16.66\n",
- "Connecting to download.openmmlab.com (download.openmmlab.com)|47.245.16.66|:443... connected.\n",
- "HTTP request sent, awaiting response... 200 OK\n",
- "Length: 6918271 (6.6M) [application/zip]\n",
- "Saving to: ‘kitti_tiny.zip’\n",
- "\n",
- "kitti_tiny.zip 100%[===================>] 6.60M 4.69MB/s in 1.4s \n",
- "\n",
- "2022-02-08 11:33:09 (4.69 MB/s) - ‘kitti_tiny.zip’ saved [6918271/6918271]\n",
- "\n"
- ]
- }
- ],
- "source": [
- "# download, decompress the data\n",
- "!wget https://download.openmmlab.com/mmdetection/data/kitti_tiny.zip\n",
- "!unzip kitti_tiny.zip > /dev/null"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "Wuwxw1oZRtVZ",
- "outputId": "c1cb0332-a381-4685-c692-ea7a6279d65d"
- },
- "outputs": [
- {
"name": "stdout",
- "output_type": "stream",
"text": [
- "Reading package lists...\n",
- "Building dependency tree...\n",
- "Reading state information...\n",
- "The following packages were automatically installed and are no longer required:\n",
- " cuda-command-line-tools-10-0 cuda-command-line-tools-10-1\n",
- " cuda-command-line-tools-11-0 cuda-compiler-10-0 cuda-compiler-10-1\n",
- " cuda-compiler-11-0 cuda-cuobjdump-10-0 cuda-cuobjdump-10-1\n",
- " cuda-cuobjdump-11-0 cuda-cupti-10-0 cuda-cupti-10-1 cuda-cupti-11-0\n",
- " cuda-cupti-dev-11-0 cuda-documentation-10-0 cuda-documentation-10-1\n",
- " cuda-documentation-11-0 cuda-documentation-11-1 cuda-gdb-10-0 cuda-gdb-10-1\n",
- " cuda-gdb-11-0 cuda-gpu-library-advisor-10-0 cuda-gpu-library-advisor-10-1\n",
- " cuda-libraries-10-0 cuda-libraries-10-1 cuda-libraries-11-0\n",
- " cuda-memcheck-10-0 cuda-memcheck-10-1 cuda-memcheck-11-0 cuda-nsight-10-0\n",
- " cuda-nsight-10-1 cuda-nsight-11-0 cuda-nsight-11-1 cuda-nsight-compute-10-0\n",
- " cuda-nsight-compute-10-1 cuda-nsight-compute-11-0 cuda-nsight-compute-11-1\n",
- " cuda-nsight-systems-10-1 cuda-nsight-systems-11-0 cuda-nsight-systems-11-1\n",
- " cuda-nvcc-10-0 cuda-nvcc-10-1 cuda-nvcc-11-0 cuda-nvdisasm-10-0\n",
- " cuda-nvdisasm-10-1 cuda-nvdisasm-11-0 cuda-nvml-dev-10-0 cuda-nvml-dev-10-1\n",
- " cuda-nvml-dev-11-0 cuda-nvprof-10-0 cuda-nvprof-10-1 cuda-nvprof-11-0\n",
- " cuda-nvprune-10-0 cuda-nvprune-10-1 cuda-nvprune-11-0 cuda-nvtx-10-0\n",
- " cuda-nvtx-10-1 cuda-nvtx-11-0 cuda-nvvp-10-0 cuda-nvvp-10-1 cuda-nvvp-11-0\n",
- " cuda-nvvp-11-1 cuda-samples-10-0 cuda-samples-10-1 cuda-samples-11-0\n",
- " cuda-samples-11-1 cuda-sanitizer-11-0 cuda-sanitizer-api-10-1\n",
- " cuda-toolkit-10-0 cuda-toolkit-10-1 cuda-toolkit-11-0 cuda-toolkit-11-1\n",
- " cuda-tools-10-0 cuda-tools-10-1 cuda-tools-11-0 cuda-tools-11-1\n",
- " cuda-visual-tools-10-0 cuda-visual-tools-10-1 cuda-visual-tools-11-0\n",
- " cuda-visual-tools-11-1 default-jre dkms freeglut3 freeglut3-dev\n",
- " keyboard-configuration libargon2-0 libcap2 libcryptsetup12\n",
- " libdevmapper1.02.1 libfontenc1 libidn11 libip4tc0 libjansson4\n",
- " libnvidia-cfg1-510 libnvidia-common-460 libnvidia-common-510\n",
- " libnvidia-extra-510 libnvidia-fbc1-510 libnvidia-gl-510 libpam-systemd\n",
- " libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0 libxfont2\n",
- " libxi-dev libxkbfile1 libxmu-dev libxmu-headers libxnvctrl0 libxtst6\n",
- " nsight-compute-2020.2.1 nsight-compute-2022.1.0 nsight-systems-2020.3.2\n",
- " nsight-systems-2020.3.4 nsight-systems-2021.5.2 nvidia-dkms-510\n",
- " nvidia-kernel-common-510 nvidia-kernel-source-510 nvidia-modprobe\n",
- " nvidia-settings openjdk-11-jre policykit-1 policykit-1-gnome python3-xkit\n",
- " screen-resolution-extra systemd systemd-sysv udev x11-xkb-utils\n",
- " xserver-common xserver-xorg-core-hwe-18.04 xserver-xorg-video-nvidia-510\n",
- "Use 'apt autoremove' to remove them.\n",
- "The following NEW packages will be installed:\n",
- " tree\n",
- "0 upgraded, 1 newly installed, 0 to remove and 39 not upgraded.\n",
- "Need to get 40.7 kB of archives.\n",
- "After this operation, 105 kB of additional disk space will be used.\n",
- "Get:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 tree amd64 1.7.0-5 [40.7 kB]\n",
- "Fetched 40.7 kB in 0s (146 kB/s)\n",
- "Selecting previously unselected package tree.\n",
- "(Reading database ... 155113 files and directories currently installed.)\n",
- "Preparing to unpack .../tree_1.7.0-5_amd64.deb ...\n",
- "Unpacking tree (1.7.0-5) ...\n",
- "Setting up tree (1.7.0-5) ...\n",
- "Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n",
- "kitti_tiny\n",
- "├── training\n",
- "│ ├── image_2\n",
- "│ │ ├── 000000.jpeg\n",
- "│ │ ├── 000001.jpeg\n",
- "│ │ ├── 000002.jpeg\n",
- "│ │ ├── 000003.jpeg\n",
- "│ │ ├── 000004.jpeg\n",
- "│ │ ├── 000005.jpeg\n",
- "│ │ ├── 000006.jpeg\n",
- "│ │ ├── 000007.jpeg\n",
- "│ │ ├── 000008.jpeg\n",
- "│ │ ├── 000009.jpeg\n",
- "│ │ ├── 000010.jpeg\n",
- "│ │ ├── 000011.jpeg\n",
- "│ │ ├── 000012.jpeg\n",
- "│ │ ├── 000013.jpeg\n",
- "│ │ ├── 000014.jpeg\n",
- "│ │ ├── 000015.jpeg\n",
- "│ │ ├── 000016.jpeg\n",
- "│ │ ├── 000017.jpeg\n",
- "│ │ ├── 000018.jpeg\n",
- "│ │ ├── 000019.jpeg\n",
- "│ │ ├── 000020.jpeg\n",
- "│ │ ├── 000021.jpeg\n",
- "│ │ ├── 000022.jpeg\n",
- "│ │ ├── 000023.jpeg\n",
- "│ │ ├── 000024.jpeg\n",
- "│ │ ├── 000025.jpeg\n",
- "│ │ ├── 000026.jpeg\n",
- "│ │ ├── 000027.jpeg\n",
- "│ │ ├── 000028.jpeg\n",
- "│ │ ├── 000029.jpeg\n",
- "│ │ ├── 000030.jpeg\n",
- "│ │ ├── 000031.jpeg\n",
- "│ │ ├── 000032.jpeg\n",
- "│ │ ├── 000033.jpeg\n",
- "│ │ ├── 000034.jpeg\n",
- "│ │ ├── 000035.jpeg\n",
- "│ │ ├── 000036.jpeg\n",
- "│ │ ├── 000037.jpeg\n",
- "│ │ ├── 000038.jpeg\n",
- "│ │ ├── 000039.jpeg\n",
- "│ │ ├── 000040.jpeg\n",
- "│ │ ├── 000041.jpeg\n",
- "│ │ ├── 000042.jpeg\n",
- "│ │ ├── 000043.jpeg\n",
- "│ │ ├── 000044.jpeg\n",
- "│ │ ├── 000045.jpeg\n",
- "│ │ ├── 000046.jpeg\n",
- "│ │ ├── 000047.jpeg\n",
- "│ │ ├── 000048.jpeg\n",
- "│ │ ├── 000049.jpeg\n",
- "│ │ ├── 000050.jpeg\n",
- "│ │ ├── 000051.jpeg\n",
- "│ │ ├── 000052.jpeg\n",
- "│ │ ├── 000053.jpeg\n",
- "│ │ ├── 000054.jpeg\n",
- "│ │ ├── 000055.jpeg\n",
- "│ │ ├── 000056.jpeg\n",
- "│ │ ├── 000057.jpeg\n",
- "│ │ ├── 000058.jpeg\n",
- "│ │ ├── 000059.jpeg\n",
- "│ │ ├── 000060.jpeg\n",
- "│ │ ├── 000061.jpeg\n",
- "│ │ ├── 000062.jpeg\n",
- "│ │ ├── 000063.jpeg\n",
- "│ │ ├── 000064.jpeg\n",
- "│ │ ├── 000065.jpeg\n",
- "│ │ ├── 000066.jpeg\n",
- "│ │ ├── 000067.jpeg\n",
- "│ │ ├── 000068.jpeg\n",
- "│ │ ├── 000069.jpeg\n",
- "│ │ ├── 000070.jpeg\n",
- "│ │ ├── 000071.jpeg\n",
- "│ │ ├── 000072.jpeg\n",
- "│ │ ├── 000073.jpeg\n",
- "│ │ └── 000074.jpeg\n",
- "│ └── label_2\n",
- "│ ├── 000000.txt\n",
- "│ ├── 000001.txt\n",
- "│ ├── 000002.txt\n",
- "│ ├── 000003.txt\n",
- "│ ├── 000004.txt\n",
- "│ ├── 000005.txt\n",
- "│ ├── 000006.txt\n",
- "│ ├── 000007.txt\n",
- "│ ├── 000008.txt\n",
- "│ ├── 000009.txt\n",
- "│ ├── 000010.txt\n",
- "│ ├── 000011.txt\n",
- "│ ├── 000012.txt\n",
- "│ ├── 000013.txt\n",
- "│ ├── 000014.txt\n",
- "│ ├── 000015.txt\n",
- "│ ├── 000016.txt\n",
- "│ ├── 000017.txt\n",
- "│ ├── 000018.txt\n",
- "│ ├── 000019.txt\n",
- "│ ├── 000020.txt\n",
- "│ ├── 000021.txt\n",
- "│ ├── 000022.txt\n",
- "│ ├── 000023.txt\n",
- "│ ├── 000024.txt\n",
- "│ ├── 000025.txt\n",
- "│ ├── 000026.txt\n",
- "│ ├── 000027.txt\n",
- "│ ├── 000028.txt\n",
- "│ ├── 000029.txt\n",
- "│ ├── 000030.txt\n",
- "│ ├── 000031.txt\n",
- "│ ├── 000032.txt\n",
- "│ ├── 000033.txt\n",
- "│ ├── 000034.txt\n",
- "│ ├── 000035.txt\n",
- "│ ├── 000036.txt\n",
- "│ ├── 000037.txt\n",
- "│ ├── 000038.txt\n",
- "│ ├── 000039.txt\n",
- "│ ├── 000040.txt\n",
- "│ ├── 000041.txt\n",
- "│ ├── 000042.txt\n",
- "│ ├── 000043.txt\n",
- "│ ├── 000044.txt\n",
- "│ ├── 000045.txt\n",
- "│ ├── 000046.txt\n",
- "│ ├── 000047.txt\n",
- "│ ├── 000048.txt\n",
- "│ ├── 000049.txt\n",
- "│ ├── 000050.txt\n",
- "│ ├── 000051.txt\n",
- "│ ├── 000052.txt\n",
- "│ ├── 000053.txt\n",
- "│ ├── 000054.txt\n",
- "│ ├── 000055.txt\n",
- "│ ├── 000056.txt\n",
- "│ ├── 000057.txt\n",
- "│ ├── 000058.txt\n",
- "│ ├── 000059.txt\n",
- "│ ├── 000060.txt\n",
- "│ ├── 000061.txt\n",
- "│ ├── 000062.txt\n",
- "│ ├── 000063.txt\n",
- "│ ├── 000064.txt\n",
- "│ ├── 000065.txt\n",
- "│ ├── 000066.txt\n",
- "│ ├── 000067.txt\n",
- "│ ├── 000068.txt\n",
- "│ ├── 000069.txt\n",
- "│ ├── 000070.txt\n",
- "│ ├── 000071.txt\n",
- "│ ├── 000072.txt\n",
- "│ ├── 000073.txt\n",
- "│ └── 000074.txt\n",
- "├── train.txt\n",
- "└── val.txt\n",
- "\n",
- "3 directories, 152 files\n"
+ "Downloading https://download.openmmlab.com/mmyolo/data/balloon_dataset.zip to data/balloon_dataset.zip\n",
+ "100% 36.9M/36.9M [00:01<00:00, 25.0MB/s]\n",
+ "Unzipping balloon_dataset.zip\n"
]
}
],
"source": [
- "# Check the directory structure of the tiny data\n",
- "\n",
- "# Install tree first\n",
- "!apt-get -q install tree\n",
- "!tree kitti_tiny"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 12,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/",
- "height": 304
- },
- "id": "YnQQqzOWzE91",
- "outputId": "baf6a89b-dbb2-4212-9e34-7055a9e2574c"
- },
- "outputs": [
- {
- "data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "# Let's take a look at the dataset image\n",
- "import mmcv\n",
- "import matplotlib.pyplot as plt\n",
- "\n",
- "img = mmcv.imread('kitti_tiny/training/image_2/000073.jpeg')\n",
- "plt.figure(figsize=(15, 10))\n",
- "plt.imshow(mmcv.bgr2rgb(img))\n",
- "plt.show()"
+ "# Download the data and unzip it\n",
+ "!python tools/misc/download_dataset.py --dataset-name balloon --save-dir data --unzip"
]
},
{
"cell_type": "markdown",
"metadata": {
- "id": "PMZvtSIl71qi"
+ "id": "gmMpkzs2U8UY"
},
"source": [
- "After downloading the data, we need to implement a function to convert the KITTI annotation format into the middle format. In this tutorial, we choose to convert them in **`load_annotations`** function in a newly implemented **`KittiTinyDataset`**.\n",
- "\n",
- "Let's take a look at the annotation txt file.\n",
- "\n"
+ "#### COCO annotation format\n",
+ "The necessary keys of COCO format for instance segmentation are as below, for the complete details, please refer [here](https://cocodataset.org/#format-data).\n",
+ "\n",
+ "```json\n",
+ "{\n",
+ " \"images\": [image],\n",
+ " \"annotations\": [annotation],\n",
+ " \"categories\": [category]\n",
+ "}\n",
+ "image = {\n",
+ " \"id\": int,\n",
+ " \"width\": int,\n",
+ " \"height\": int,\n",
+ " \"file_name\": str,\n",
+ "}\n",
+ "annotation = {\n",
+ " \"id\": int,\n",
+ " \"image_id\": int,\n",
+ " \"category_id\": int,\n",
+ " \"segmentation\": RLE or [polygon],\n",
+ " \"area\": float,\n",
+ " \"bbox\": [x,y,width,height], # (x, y) are the coordinates of the upper left corner of the bbox\n",
+ " \"iscrowd\": 0 or 1,\n",
+ "}\n",
+ "categories = [{\n",
+ " \"id\": int,\n",
+ " \"name\": str,\n",
+ " \"supercategory\": str,\n",
+ "}]\n",
+ "```\n",
+ "\n",
+ "Assume we use the balloon dataset.\n",
+ "After downloading the data, we need to implement a function to convert the annotation format into the COCO format. Then we can use implemented `CocoDataset` to load the data and perform training and evaluation.\n",
+ "\n",
+ "If you take a look at the dataset, you will find the dataset format is as below:\n",
+ "\n",
+ "```json\n",
+ "{'base64_img_data': '',\n",
+ " 'file_attributes': {},\n",
+ " 'filename': '34020010494_e5cb88e1c4_k.jpg',\n",
+ " 'fileref': '',\n",
+ " 'regions': {'0': {'region_attributes': {},\n",
+ " 'shape_attributes': {'all_points_x': [1020,\n",
+ " 1000,\n",
+ " 994,\n",
+ " 1003,\n",
+ " 1023,\n",
+ " 1050,\n",
+ " 1089,\n",
+ " 1134,\n",
+ " 1190,\n",
+ " 1265,\n",
+ " 1321,\n",
+ " 1361,\n",
+ " 1403,\n",
+ " 1428,\n",
+ " 1442,\n",
+ " 1445,\n",
+ " 1441,\n",
+ " 1427,\n",
+ " 1400,\n",
+ " 1361,\n",
+ " 1316,\n",
+ " 1269,\n",
+ " 1228,\n",
+ " 1198,\n",
+ " 1207,\n",
+ " 1210,\n",
+ " 1190,\n",
+ " 1177,\n",
+ " 1172,\n",
+ " 1174,\n",
+ " 1170,\n",
+ " 1153,\n",
+ " 1127,\n",
+ " 1104,\n",
+ " 1061,\n",
+ " 1032,\n",
+ " 1020],\n",
+ " 'all_points_y': [963,\n",
+ " 899,\n",
+ " 841,\n",
+ " 787,\n",
+ " 738,\n",
+ " 700,\n",
+ " 663,\n",
+ " 638,\n",
+ " 621,\n",
+ " 619,\n",
+ " 643,\n",
+ " 672,\n",
+ " 720,\n",
+ " 765,\n",
+ " 800,\n",
+ " 860,\n",
+ " 896,\n",
+ " 942,\n",
+ " 990,\n",
+ " 1035,\n",
+ " 1079,\n",
+ " 1112,\n",
+ " 1129,\n",
+ " 1134,\n",
+ " 1144,\n",
+ " 1153,\n",
+ " 1166,\n",
+ " 1166,\n",
+ " 1150,\n",
+ " 1136,\n",
+ " 1129,\n",
+ " 1122,\n",
+ " 1112,\n",
+ " 1084,\n",
+ " 1037,\n",
+ " 989,\n",
+ " 963],\n",
+ " 'name': 'polygon'}}},\n",
+ " 'size': 1115004}\n",
+ "```\n",
+ "\n",
+ "The annotation is a JSON file where each key indicates an image's all annotations.\n",
+ "The code to convert the balloon dataset into coco format is as below.\n",
+ "\n",
+ "Using the function below, users can successfully convert the annotation file into json format, then we can use `CocoDataset` to train and evaluate the model with `CocoMetric`."
]
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
- "id": "n7rwalnPd6e1",
- "outputId": "54bfbfa4-463b-45a0-f77c-a80557c1bd69"
+ "id": "rHnw5Q_nARXq",
+ "outputId": "4b1efb44-f81d-486f-80e6-461a57fe84bc"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
+ "name": "stdout",
"text": [
- "Pedestrian 0.00 0 -0.20 712.40 143.00 810.73 307.92 1.89 0.48 1.20 1.84 1.47 8.41 0.01\n"
+ "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 61/61, 34.8 task/s, elapsed: 2s, ETA: 0s\n",
+ "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 13/13, 22.2 task/s, elapsed: 1s, ETA: 0s\n"
]
}
],
"source": [
- "# Check the label of a single image\n",
- "!cat kitti_tiny/training/label_2/000000.txt"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "QA1pFg-FeO3l"
- },
- "source": [
- "According to the KITTI's documentation, the first column indicates the class of the object, and the 5th to 8th columns indicate the bboxes. We need to read annotations of each image and convert them into middle format that MMDetection can accept, as follows:\n",
- "\n",
- "```python\n",
- "[\n",
- " {\n",
- " 'filename': 'a.jpg',\n",
- " 'width': 1280,\n",
- " 'height': 720,\n",
- " 'ann': {\n",
- " 'bboxes': (n, 4) in (x1, y1, x2, y2) order,\n",
- " 'labels': (n, ),\n",
- " 'bboxes_ignore': (k, 4), (optional field)\n",
- " 'labels_ignore': (k, 4) (optional field)\n",
- " }\n",
- " },\n",
- " ...\n",
- "]\n",
- "```"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {
- "id": "GdSaB2ad0EdX"
- },
- "outputs": [],
- "source": [
- "import copy\n",
"import os.path as osp\n",
- "\n",
"import mmcv\n",
- "import numpy as np\n",
- "\n",
- "from mmdet.datasets.builder import DATASETS\n",
- "from mmdet.datasets.custom import CustomDataset\n",
- "\n",
- "@DATASETS.register_module()\n",
- "class KittiTinyDataset(CustomDataset):\n",
- "\n",
- " CLASSES = ('Car', 'Pedestrian', 'Cyclist')\n",
- "\n",
- " def load_annotations(self, ann_file):\n",
- " cat2label = {k: i for i, k in enumerate(self.CLASSES)}\n",
- " # load image list from file\n",
- " image_list = mmcv.list_from_file(self.ann_file)\n",
- " \n",
- " data_infos = []\n",
- " # convert annotations to middle format\n",
- " for image_id in image_list:\n",
- " filename = f'{self.img_prefix}/{image_id}.jpeg'\n",
- " image = mmcv.imread(filename)\n",
- " height, width = image.shape[:2]\n",
- " \n",
- " data_info = dict(filename=f'{image_id}.jpeg', width=width, height=height)\n",
- " \n",
- " # load annotations\n",
- " label_prefix = self.img_prefix.replace('image_2', 'label_2')\n",
- " lines = mmcv.list_from_file(osp.join(label_prefix, f'{image_id}.txt'))\n",
- " \n",
- " content = [line.strip().split(' ') for line in lines]\n",
- " bbox_names = [x[0] for x in content]\n",
- " bboxes = [[float(info) for info in x[4:8]] for x in content]\n",
- " \n",
- " gt_bboxes = []\n",
- " gt_labels = []\n",
- " gt_bboxes_ignore = []\n",
- " gt_labels_ignore = []\n",
- " \n",
- " # filter 'DontCare'\n",
- " for bbox_name, bbox in zip(bbox_names, bboxes):\n",
- " if bbox_name in cat2label:\n",
- " gt_labels.append(cat2label[bbox_name])\n",
- " gt_bboxes.append(bbox)\n",
- " else:\n",
- " gt_labels_ignore.append(-1)\n",
- " gt_bboxes_ignore.append(bbox)\n",
+ "from mmengine.fileio import dump, load\n",
+ "from mmengine.utils import track_iter_progress\n",
+ "\n",
+ "def convert_balloon_to_coco(ann_file, out_file, image_prefix):\n",
+ " data_infos = load(ann_file)\n",
+ "\n",
+ " annotations = []\n",
+ " images = []\n",
+ " obj_count = 0\n",
+ " for idx, v in enumerate(track_iter_progress(data_infos.values())):\n",
+ " filename = v['filename']\n",
+ " img_path = osp.join(image_prefix, filename)\n",
+ " height, width = mmcv.imread(img_path).shape[:2]\n",
+ "\n",
+ " images.append(\n",
+ " dict(id=idx, file_name=filename, height=height, width=width))\n",
+ " \n",
+ " for _, obj in v['regions'].items():\n",
+ " assert not obj['region_attributes']\n",
+ " obj = obj['shape_attributes']\n",
+ " px = obj['all_points_x']\n",
+ " py = obj['all_points_y']\n",
+ " poly = [(x + 0.5, y + 0.5) for x, y in zip(px, py)]\n",
+ " poly = [p for x in poly for p in x]\n",
+ "\n",
+ " x_min, y_min, x_max, y_max = (min(px), min(py), max(px), max(py))\n",
"\n",
" data_anno = dict(\n",
- " bboxes=np.array(gt_bboxes, dtype=np.float32).reshape(-1, 4),\n",
- " labels=np.array(gt_labels, dtype=np.long),\n",
- " bboxes_ignore=np.array(gt_bboxes_ignore,\n",
- " dtype=np.float32).reshape(-1, 4),\n",
- " labels_ignore=np.array(gt_labels_ignore, dtype=np.long))\n",
- "\n",
- " data_info.update(ann=data_anno)\n",
- " data_infos.append(data_info)\n",
- "\n",
- " return data_infos"
+ " image_id=idx,\n",
+ " id=obj_count,\n",
+ " category_id=0,\n",
+ " bbox=[x_min, y_min, x_max - x_min, y_max - y_min],\n",
+ " area=(x_max - x_min) * (y_max - y_min),\n",
+ " segmentation=[poly],\n",
+ " iscrowd=0)\n",
+ " annotations.append(data_anno)\n",
+ " obj_count += 1\n",
+ "\n",
+ " coco_format_json = dict(\n",
+ " images=images,\n",
+ " annotations=annotations,\n",
+ " categories=[{\n",
+ " 'id': 0,\n",
+ " 'name': 'balloon'\n",
+ " }])\n",
+ " dump(coco_format_json, out_file)\n",
+ "\n",
+ "if __name__ == '__main__':\n",
+ " convert_balloon_to_coco(ann_file='data/balloon/train/via_region_data.json',\n",
+ " out_file='data/balloon/train.json',\n",
+ " image_prefix='data/balloon/train')\n",
+ " convert_balloon_to_coco(ann_file='data/balloon/val/via_region_data.json',\n",
+ " out_file='data/balloon/val.json',\n",
+ " image_prefix='data/balloon/val')"
]
},
{
"cell_type": "markdown",
"metadata": {
- "id": "PwqJOpBe-bMj"
+ "id": "yc9UDp1vU8UZ"
},
"source": [
- "### Modify the config\n",
+ "## Prepare a config\n",
"\n",
- "In the next step, we need to modify the config for the training.\n",
- "To accelerate the process, we finetune a detector using a pre-trained detector."
+ "The second step is to prepare a config thus the dataset could be successfully loaded. Assume that we want to use RTMDet-tiny, the config to train the detector on balloon dataset is as below. Assume the config is under directory `configs/rtmdet/` and named as `rtmdet_tiny_1xb4-20e_balloon.py`, the config is as below.\n"
]
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": 10,
"metadata": {
- "id": "hamZrlnH-YDD"
+ "id": "XjTW6XydU8Ua"
},
"outputs": [],
"source": [
- "from mmcv import Config\n",
- "cfg = Config.fromfile('./configs/faster_rcnn/faster_rcnn_r50_caffe_fpn_mstrain_1x_coco.py')"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "HntziLGq-92Z"
- },
- "source": [
- "Given a config that trains a Faster R-CNN on COCO dataset, we need to modify some values to use it for training Faster R-CNN on KITTI dataset. We modify the config of datasets, learning rate schedules, and runtime settings."
+ "config_balloon = \"\"\"\n",
+ "# Inherit and overwrite part of the config based on this config\n",
+ "_base_ = './rtmdet_tiny_8xb32-300e_coco.py'\n",
+ "\n",
+ "data_root = 'data/balloon/' # dataset root\n",
+ "\n",
+ "train_batch_size_per_gpu = 4\n",
+ "train_num_workers = 2\n",
+ "\n",
+ "max_epochs = 20\n",
+ "stage2_num_epochs = 1\n",
+ "base_lr = 0.00008\n",
+ "\n",
+ "\n",
+ "metainfo = {\n",
+ " 'classes': ('balloon', ),\n",
+ " 'palette': [\n",
+ " (220, 20, 60),\n",
+ " ]\n",
+ "}\n",
+ "\n",
+ "train_dataloader = dict(\n",
+ " batch_size=train_batch_size_per_gpu,\n",
+ " num_workers=train_num_workers,\n",
+ " dataset=dict(\n",
+ " data_root=data_root,\n",
+ " metainfo=metainfo,\n",
+ " data_prefix=dict(img='train/'),\n",
+ " ann_file='train.json'))\n",
+ "\n",
+ "val_dataloader = dict(\n",
+ " dataset=dict(\n",
+ " data_root=data_root,\n",
+ " metainfo=metainfo,\n",
+ " data_prefix=dict(img='val/'),\n",
+ " ann_file='val.json'))\n",
+ "\n",
+ "test_dataloader = val_dataloader\n",
+ "\n",
+ "val_evaluator = dict(ann_file=data_root + 'val.json')\n",
+ "\n",
+ "test_evaluator = val_evaluator\n",
+ "\n",
+ "model = dict(bbox_head=dict(num_classes=1))\n",
+ "\n",
+ "# learning rate\n",
+ "param_scheduler = [\n",
+ " dict(\n",
+ " type='LinearLR',\n",
+ " start_factor=1.0e-5,\n",
+ " by_epoch=False,\n",
+ " begin=0,\n",
+ " end=10),\n",
+ " dict(\n",
+ " # use cosine lr from 10 to 20 epoch\n",
+ " type='CosineAnnealingLR',\n",
+ " eta_min=base_lr * 0.05,\n",
+ " begin=max_epochs // 2,\n",
+ " end=max_epochs,\n",
+ " T_max=max_epochs // 2,\n",
+ " by_epoch=True,\n",
+ " convert_to_iter_based=True),\n",
+ "]\n",
+ "\n",
+ "train_pipeline_stage2 = [\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
+ " dict(type='LoadAnnotations', with_bbox=True),\n",
+ " dict(\n",
+ " type='RandomResize',\n",
+ " scale=(640, 640),\n",
+ " ratio_range=(0.1, 2.0),\n",
+ " keep_ratio=True),\n",
+ " dict(type='RandomCrop', crop_size=(640, 640)),\n",
+ " dict(type='YOLOXHSVRandomAug'),\n",
+ " dict(type='RandomFlip', prob=0.5),\n",
+ " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n",
+ " dict(type='PackDetInputs')\n",
+ "]\n",
+ "\n",
+ "# optimizer\n",
+ "optim_wrapper = dict(\n",
+ " _delete_=True,\n",
+ " type='OptimWrapper',\n",
+ " optimizer=dict(type='AdamW', lr=base_lr, weight_decay=0.05),\n",
+ " paramwise_cfg=dict(\n",
+ " norm_decay_mult=0, bias_decay_mult=0, bypass_duplicate=True))\n",
+ "\n",
+ "default_hooks = dict(\n",
+ " checkpoint=dict(\n",
+ " interval=5,\n",
+ " max_keep_ckpts=2, # only keep latest 2 checkpoints\n",
+ " save_best='auto'\n",
+ " ),\n",
+ " logger=dict(type='LoggerHook', interval=5))\n",
+ "\n",
+ "custom_hooks = [\n",
+ " dict(\n",
+ " type='PipelineSwitchHook',\n",
+ " switch_epoch=max_epochs - stage2_num_epochs,\n",
+ " switch_pipeline=train_pipeline_stage2)\n",
+ "]\n",
+ "\n",
+ "# load COCO pre-trained weight\n",
+ "load_from = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n",
+ "\n",
+ "train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=max_epochs, val_interval=1)\n",
+ "visualizer = dict(vis_backends=[dict(type='LocalVisBackend'),dict(type='TensorboardVisBackend')])\n",
+ "\"\"\"\n",
+ "\n",
+ "with open('./configs/rtmdet/rtmdet_tiny_1xb4-20e_balloon.py', 'w') as f:\n",
+ " f.write(config_balloon)"
]
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
- "id": "pUbwD8uV0PR8",
- "outputId": "76e68abb-6b42-488f-cbca-6da39e094943"
+ "id": "5LNm7LxwZG2w",
+ "outputId": "aac457c5-f915-433d-e98a-85ddd9005543"
},
"outputs": [
{
- "name": "stdout",
"output_type": "stream",
+ "name": "stdout",
"text": [
- "Config:\n",
- "model = dict(\n",
- " type='FasterRCNN',\n",
- " backbone=dict(\n",
- " type='ResNet',\n",
- " depth=50,\n",
- " num_stages=4,\n",
- " out_indices=(0, 1, 2, 3),\n",
- " frozen_stages=1,\n",
- " norm_cfg=dict(type='BN', requires_grad=False),\n",
- " norm_eval=True,\n",
- " style='caffe',\n",
- " init_cfg=dict(\n",
- " type='Pretrained',\n",
- " checkpoint='open-mmlab://detectron2/resnet50_caffe')),\n",
- " neck=dict(\n",
- " type='FPN',\n",
- " in_channels=[256, 512, 1024, 2048],\n",
- " out_channels=256,\n",
- " num_outs=5),\n",
- " rpn_head=dict(\n",
- " type='RPNHead',\n",
- " in_channels=256,\n",
- " feat_channels=256,\n",
- " anchor_generator=dict(\n",
- " type='AnchorGenerator',\n",
- " scales=[8],\n",
- " ratios=[0.5, 1.0, 2.0],\n",
- " strides=[4, 8, 16, 32, 64]),\n",
- " bbox_coder=dict(\n",
- " type='DeltaXYWHBBoxCoder',\n",
- " target_means=[0.0, 0.0, 0.0, 0.0],\n",
- " target_stds=[1.0, 1.0, 1.0, 1.0]),\n",
- " loss_cls=dict(\n",
- " type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),\n",
- " loss_bbox=dict(type='L1Loss', loss_weight=1.0)),\n",
- " roi_head=dict(\n",
- " type='StandardRoIHead',\n",
- " bbox_roi_extractor=dict(\n",
- " type='SingleRoIExtractor',\n",
- " roi_layer=dict(type='RoIAlign', output_size=7, sampling_ratio=0),\n",
- " out_channels=256,\n",
- " featmap_strides=[4, 8, 16, 32]),\n",
- " bbox_head=dict(\n",
- " type='Shared2FCBBoxHead',\n",
- " in_channels=256,\n",
- " fc_out_channels=1024,\n",
- " roi_feat_size=7,\n",
- " num_classes=3,\n",
- " bbox_coder=dict(\n",
- " type='DeltaXYWHBBoxCoder',\n",
- " target_means=[0.0, 0.0, 0.0, 0.0],\n",
- " target_stds=[0.1, 0.1, 0.2, 0.2]),\n",
- " reg_class_agnostic=False,\n",
- " loss_cls=dict(\n",
- " type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),\n",
- " loss_bbox=dict(type='L1Loss', loss_weight=1.0))),\n",
- " train_cfg=dict(\n",
- " rpn=dict(\n",
- " assigner=dict(\n",
- " type='MaxIoUAssigner',\n",
- " pos_iou_thr=0.7,\n",
- " neg_iou_thr=0.3,\n",
- " min_pos_iou=0.3,\n",
- " match_low_quality=True,\n",
- " ignore_iof_thr=-1),\n",
- " sampler=dict(\n",
- " type='RandomSampler',\n",
- " num=256,\n",
- " pos_fraction=0.5,\n",
- " neg_pos_ub=-1,\n",
- " add_gt_as_proposals=False),\n",
- " allowed_border=-1,\n",
- " pos_weight=-1,\n",
- " debug=False),\n",
- " rpn_proposal=dict(\n",
- " nms_pre=2000,\n",
- " max_per_img=1000,\n",
- " nms=dict(type='nms', iou_threshold=0.7),\n",
- " min_bbox_size=0),\n",
- " rcnn=dict(\n",
- " assigner=dict(\n",
- " type='MaxIoUAssigner',\n",
- " pos_iou_thr=0.5,\n",
- " neg_iou_thr=0.5,\n",
- " min_pos_iou=0.5,\n",
- " match_low_quality=False,\n",
- " ignore_iof_thr=-1),\n",
- " sampler=dict(\n",
- " type='RandomSampler',\n",
- " num=512,\n",
- " pos_fraction=0.25,\n",
- " neg_pos_ub=-1,\n",
- " add_gt_as_proposals=True),\n",
- " pos_weight=-1,\n",
- " debug=False)),\n",
- " test_cfg=dict(\n",
- " rpn=dict(\n",
- " nms_pre=1000,\n",
- " max_per_img=1000,\n",
- " nms=dict(type='nms', iou_threshold=0.7),\n",
- " min_bbox_size=0),\n",
- " rcnn=dict(\n",
- " score_thr=0.05,\n",
- " nms=dict(type='nms', iou_threshold=0.5),\n",
- " max_per_img=100)))\n",
- "dataset_type = 'KittiTinyDataset'\n",
- "data_root = 'kitti_tiny/'\n",
- "img_norm_cfg = dict(\n",
- " mean=[103.53, 116.28, 123.675], std=[1.0, 1.0, 1.0], to_rgb=False)\n",
+ "04/17 10:28:35 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - \n",
+ "------------------------------------------------------------\n",
+ "System environment:\n",
+ " sys.platform: linux\n",
+ " Python: 3.9.16 (main, Dec 7 2022, 01:11:51) [GCC 9.4.0]\n",
+ " CUDA available: True\n",
+ " numpy_random_seed: 904036445\n",
+ " GPU 0: Tesla T4\n",
+ " CUDA_HOME: /usr/local/cuda\n",
+ " NVCC: Cuda compilation tools, release 11.8, V11.8.89\n",
+ " GCC: x86_64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0\n",
+ " PyTorch: 2.0.0+cu118\n",
+ " PyTorch compiling details: PyTorch built with:\n",
+ " - GCC 9.3\n",
+ " - C++ Version: 201703\n",
+ " - Intel(R) oneAPI Math Kernel Library Version 2022.2-Product Build 20220804 for Intel(R) 64 architecture applications\n",
+ " - Intel(R) MKL-DNN v2.7.3 (Git Hash 6dbeffbae1f23cbbeae17adb7b5b13f1f37c080e)\n",
+ " - OpenMP 201511 (a.k.a. OpenMP 4.5)\n",
+ " - LAPACK is enabled (usually provided by MKL)\n",
+ " - NNPACK is enabled\n",
+ " - CPU capability usage: AVX2\n",
+ " - CUDA Runtime 11.8\n",
+ " - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86;-gencode;arch=compute_90,code=sm_90\n",
+ " - CuDNN 8.7\n",
+ " - Magma 2.6.1\n",
+ " - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.8, CUDNN_VERSION=8.7.0, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.0.0, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, \n",
+ "\n",
+ " TorchVision: 0.15.1+cu118\n",
+ " OpenCV: 4.7.0\n",
+ " MMEngine: 0.7.2\n",
+ "\n",
+ "Runtime environment:\n",
+ " cudnn_benchmark: False\n",
+ " mp_cfg: {'mp_start_method': 'fork', 'opencv_num_threads': 0}\n",
+ " dist_cfg: {'backend': 'nccl'}\n",
+ " seed: None\n",
+ " Distributed launcher: none\n",
+ " Distributed training: False\n",
+ " GPU number: 1\n",
+ "------------------------------------------------------------\n",
+ "\n",
+ "04/17 10:28:37 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Config:\n",
+ "default_scope = 'mmdet'\n",
+ "default_hooks = dict(\n",
+ " timer=dict(type='IterTimerHook'),\n",
+ " logger=dict(type='LoggerHook', interval=5),\n",
+ " param_scheduler=dict(type='ParamSchedulerHook'),\n",
+ " checkpoint=dict(\n",
+ " type='CheckpointHook', interval=5, max_keep_ckpts=2, save_best='auto'),\n",
+ " sampler_seed=dict(type='DistSamplerSeedHook'),\n",
+ " visualization=dict(type='DetVisualizationHook'))\n",
+ "env_cfg = dict(\n",
+ " cudnn_benchmark=False,\n",
+ " mp_cfg=dict(mp_start_method='fork', opencv_num_threads=0),\n",
+ " dist_cfg=dict(backend='nccl'))\n",
+ "vis_backends = [dict(type='LocalVisBackend')]\n",
+ "visualizer = dict(\n",
+ " type='DetLocalVisualizer',\n",
+ " vis_backends=[\n",
+ " dict(type='LocalVisBackend'),\n",
+ " dict(type='TensorboardVisBackend')\n",
+ " ],\n",
+ " name='visualizer')\n",
+ "log_processor = dict(type='LogProcessor', window_size=50, by_epoch=True)\n",
+ "log_level = 'INFO'\n",
+ "load_from = './checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'\n",
+ "resume = False\n",
+ "train_cfg = dict(\n",
+ " type='EpochBasedTrainLoop',\n",
+ " max_epochs=20,\n",
+ " val_interval=1,\n",
+ " dynamic_intervals=[(280, 1)])\n",
+ "val_cfg = dict(type='ValLoop')\n",
+ "test_cfg = dict(type='TestLoop')\n",
+ "param_scheduler = [\n",
+ " dict(type='LinearLR', start_factor=1e-05, by_epoch=False, begin=0, end=10),\n",
+ " dict(\n",
+ " type='CosineAnnealingLR',\n",
+ " eta_min=4.000000000000001e-06,\n",
+ " begin=10,\n",
+ " end=20,\n",
+ " T_max=10,\n",
+ " by_epoch=True,\n",
+ " convert_to_iter_based=True)\n",
+ "]\n",
+ "optim_wrapper = dict(\n",
+ " type='OptimWrapper',\n",
+ " optimizer=dict(type='AdamW', lr=8e-05, weight_decay=0.05),\n",
+ " paramwise_cfg=dict(\n",
+ " norm_decay_mult=0, bias_decay_mult=0, bypass_duplicate=True))\n",
+ "auto_scale_lr = dict(enable=False, base_batch_size=16)\n",
+ "dataset_type = 'CocoDataset'\n",
+ "data_root = 'data/balloon/'\n",
+ "backend_args = None\n",
"train_pipeline = [\n",
- " dict(type='LoadImageFromFile'),\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
" dict(type='LoadAnnotations', with_bbox=True),\n",
" dict(\n",
- " type='Resize',\n",
- " img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),\n",
- " (1333, 768), (1333, 800)],\n",
- " multiscale_mode='value',\n",
+ " type='CachedMosaic',\n",
+ " img_scale=(640, 640),\n",
+ " pad_val=114.0,\n",
+ " max_cached_images=20,\n",
+ " random_pop=False),\n",
+ " dict(\n",
+ " type='RandomResize',\n",
+ " scale=(1280, 1280),\n",
+ " ratio_range=(0.5, 2.0),\n",
" keep_ratio=True),\n",
- " dict(type='RandomFlip', flip_ratio=0.5),\n",
+ " dict(type='RandomCrop', crop_size=(640, 640)),\n",
+ " dict(type='YOLOXHSVRandomAug'),\n",
+ " dict(type='RandomFlip', prob=0.5),\n",
+ " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n",
" dict(\n",
- " type='Normalize',\n",
- " mean=[103.53, 116.28, 123.675],\n",
- " std=[1.0, 1.0, 1.0],\n",
- " to_rgb=False),\n",
- " dict(type='Pad', size_divisor=32),\n",
- " dict(type='DefaultFormatBundle'),\n",
- " dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])\n",
+ " type='CachedMixUp',\n",
+ " img_scale=(640, 640),\n",
+ " ratio_range=(1.0, 1.0),\n",
+ " max_cached_images=10,\n",
+ " random_pop=False,\n",
+ " pad_val=(114, 114, 114),\n",
+ " prob=0.5),\n",
+ " dict(type='PackDetInputs')\n",
"]\n",
"test_pipeline = [\n",
- " dict(type='LoadImageFromFile'),\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
+ " dict(type='Resize', scale=(640, 640), keep_ratio=True),\n",
+ " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n",
" dict(\n",
- " type='MultiScaleFlipAug',\n",
- " img_scale=(1333, 800),\n",
- " flip=False,\n",
- " transforms=[\n",
- " dict(type='Resize', keep_ratio=True),\n",
- " dict(type='RandomFlip'),\n",
- " dict(\n",
- " type='Normalize',\n",
- " mean=[103.53, 116.28, 123.675],\n",
- " std=[1.0, 1.0, 1.0],\n",
- " to_rgb=False),\n",
- " dict(type='Pad', size_divisor=32),\n",
- " dict(type='ImageToTensor', keys=['img']),\n",
- " dict(type='Collect', keys=['img'])\n",
- " ])\n",
+ " type='PackDetInputs',\n",
+ " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n",
+ " 'scale_factor'))\n",
"]\n",
- "data = dict(\n",
- " samples_per_gpu=2,\n",
- " workers_per_gpu=2,\n",
- " train=dict(\n",
- " type='KittiTinyDataset',\n",
- " ann_file='train.txt',\n",
- " img_prefix='training/image_2',\n",
+ "train_dataloader = dict(\n",
+ " batch_size=4,\n",
+ " num_workers=2,\n",
+ " persistent_workers=True,\n",
+ " sampler=dict(type='DefaultSampler', shuffle=True),\n",
+ " batch_sampler=None,\n",
+ " dataset=dict(\n",
+ " type='CocoDataset',\n",
+ " data_root='data/balloon/',\n",
+ " ann_file='train.json',\n",
+ " data_prefix=dict(img='train/'),\n",
+ " filter_cfg=dict(filter_empty_gt=True, min_size=32),\n",
" pipeline=[\n",
- " dict(type='LoadImageFromFile'),\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
" dict(type='LoadAnnotations', with_bbox=True),\n",
" dict(\n",
- " type='Resize',\n",
- " img_scale=[(1333, 640), (1333, 672), (1333, 704), (1333, 736),\n",
- " (1333, 768), (1333, 800)],\n",
- " multiscale_mode='value',\n",
+ " type='CachedMosaic',\n",
+ " img_scale=(640, 640),\n",
+ " pad_val=114.0,\n",
+ " max_cached_images=20,\n",
+ " random_pop=False),\n",
+ " dict(\n",
+ " type='RandomResize',\n",
+ " scale=(1280, 1280),\n",
+ " ratio_range=(0.5, 2.0),\n",
" keep_ratio=True),\n",
- " dict(type='RandomFlip', flip_ratio=0.5),\n",
+ " dict(type='RandomCrop', crop_size=(640, 640)),\n",
+ " dict(type='YOLOXHSVRandomAug'),\n",
+ " dict(type='RandomFlip', prob=0.5),\n",
" dict(\n",
- " type='Normalize',\n",
- " mean=[103.53, 116.28, 123.675],\n",
- " std=[1.0, 1.0, 1.0],\n",
- " to_rgb=False),\n",
- " dict(type='Pad', size_divisor=32),\n",
- " dict(type='DefaultFormatBundle'),\n",
- " dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])\n",
+ " type='Pad', size=(640, 640),\n",
+ " pad_val=dict(img=(114, 114, 114))),\n",
+ " dict(\n",
+ " type='CachedMixUp',\n",
+ " img_scale=(640, 640),\n",
+ " ratio_range=(1.0, 1.0),\n",
+ " max_cached_images=10,\n",
+ " random_pop=False,\n",
+ " pad_val=(114, 114, 114),\n",
+ " prob=0.5),\n",
+ " dict(type='PackDetInputs')\n",
" ],\n",
- " data_root='kitti_tiny/'),\n",
- " val=dict(\n",
- " type='KittiTinyDataset',\n",
- " ann_file='val.txt',\n",
- " img_prefix='training/image_2',\n",
+ " backend_args=None,\n",
+ " metainfo=dict(classes=('balloon', ), palette=[(220, 20, 60)])),\n",
+ " pin_memory=True)\n",
+ "val_dataloader = dict(\n",
+ " batch_size=5,\n",
+ " num_workers=10,\n",
+ " persistent_workers=True,\n",
+ " drop_last=False,\n",
+ " sampler=dict(type='DefaultSampler', shuffle=False),\n",
+ " dataset=dict(\n",
+ " type='CocoDataset',\n",
+ " data_root='data/balloon/',\n",
+ " ann_file='val.json',\n",
+ " data_prefix=dict(img='val/'),\n",
+ " test_mode=True,\n",
" pipeline=[\n",
- " dict(type='LoadImageFromFile'),\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
+ " dict(type='Resize', scale=(640, 640), keep_ratio=True),\n",
+ " dict(\n",
+ " type='Pad', size=(640, 640),\n",
+ " pad_val=dict(img=(114, 114, 114))),\n",
" dict(\n",
- " type='MultiScaleFlipAug',\n",
- " img_scale=(1333, 800),\n",
- " flip=False,\n",
- " transforms=[\n",
- " dict(type='Resize', keep_ratio=True),\n",
- " dict(type='RandomFlip'),\n",
- " dict(\n",
- " type='Normalize',\n",
- " mean=[103.53, 116.28, 123.675],\n",
- " std=[1.0, 1.0, 1.0],\n",
- " to_rgb=False),\n",
- " dict(type='Pad', size_divisor=32),\n",
- " dict(type='ImageToTensor', keys=['img']),\n",
- " dict(type='Collect', keys=['img'])\n",
- " ])\n",
+ " type='PackDetInputs',\n",
+ " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n",
+ " 'scale_factor'))\n",
" ],\n",
- " data_root='kitti_tiny/'),\n",
- " test=dict(\n",
- " type='KittiTinyDataset',\n",
- " ann_file='train.txt',\n",
- " img_prefix='training/image_2',\n",
+ " backend_args=None,\n",
+ " metainfo=dict(classes=('balloon', ), palette=[(220, 20, 60)])))\n",
+ "test_dataloader = dict(\n",
+ " batch_size=5,\n",
+ " num_workers=10,\n",
+ " persistent_workers=True,\n",
+ " drop_last=False,\n",
+ " sampler=dict(type='DefaultSampler', shuffle=False),\n",
+ " dataset=dict(\n",
+ " type='CocoDataset',\n",
+ " data_root='data/balloon/',\n",
+ " ann_file='val.json',\n",
+ " data_prefix=dict(img='val/'),\n",
+ " test_mode=True,\n",
" pipeline=[\n",
- " dict(type='LoadImageFromFile'),\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
+ " dict(type='Resize', scale=(640, 640), keep_ratio=True),\n",
" dict(\n",
- " type='MultiScaleFlipAug',\n",
- " img_scale=(1333, 800),\n",
- " flip=False,\n",
- " transforms=[\n",
- " dict(type='Resize', keep_ratio=True),\n",
- " dict(type='RandomFlip'),\n",
- " dict(\n",
- " type='Normalize',\n",
- " mean=[103.53, 116.28, 123.675],\n",
- " std=[1.0, 1.0, 1.0],\n",
- " to_rgb=False),\n",
- " dict(type='Pad', size_divisor=32),\n",
- " dict(type='ImageToTensor', keys=['img']),\n",
- " dict(type='Collect', keys=['img'])\n",
- " ])\n",
+ " type='Pad', size=(640, 640),\n",
+ " pad_val=dict(img=(114, 114, 114))),\n",
+ " dict(\n",
+ " type='PackDetInputs',\n",
+ " meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',\n",
+ " 'scale_factor'))\n",
" ],\n",
- " data_root='kitti_tiny/'))\n",
- "evaluation = dict(interval=12, metric='mAP')\n",
- "optimizer = dict(type='SGD', lr=0.0025, momentum=0.9, weight_decay=0.0001)\n",
- "optimizer_config = dict(grad_clip=None)\n",
- "lr_config = dict(\n",
- " policy='step',\n",
- " warmup=None,\n",
- " warmup_iters=500,\n",
- " warmup_ratio=0.001,\n",
- " step=[8, 11])\n",
- "runner = dict(type='EpochBasedRunner', max_epochs=12)\n",
- "checkpoint_config = dict(interval=12)\n",
- "log_config = dict(\n",
- " interval=10,\n",
- " hooks=[dict(type='TextLoggerHook'),\n",
- " dict(type='TensorboardLoggerHook')])\n",
- "custom_hooks = [dict(type='NumClassCheckHook')]\n",
- "dist_params = dict(backend='nccl')\n",
- "log_level = 'INFO'\n",
- "load_from = 'checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth'\n",
- "resume_from = None\n",
- "workflow = [('train', 1)]\n",
- "opencv_num_threads = 0\n",
- "mp_start_method = 'fork'\n",
- "work_dir = './tutorial_exps'\n",
- "seed = 0\n",
- "gpu_ids = range(0, 1)\n",
- "\n"
- ]
- }
- ],
- "source": [
- "from mmdet.apis import set_random_seed\n",
- "\n",
- "# Modify dataset type and path\n",
- "cfg.dataset_type = 'KittiTinyDataset'\n",
- "cfg.data_root = 'kitti_tiny/'\n",
- "\n",
- "cfg.data.test.type = 'KittiTinyDataset'\n",
- "cfg.data.test.data_root = 'kitti_tiny/'\n",
- "cfg.data.test.ann_file = 'train.txt'\n",
- "cfg.data.test.img_prefix = 'training/image_2'\n",
- "\n",
- "cfg.data.train.type = 'KittiTinyDataset'\n",
- "cfg.data.train.data_root = 'kitti_tiny/'\n",
- "cfg.data.train.ann_file = 'train.txt'\n",
- "cfg.data.train.img_prefix = 'training/image_2'\n",
- "\n",
- "cfg.data.val.type = 'KittiTinyDataset'\n",
- "cfg.data.val.data_root = 'kitti_tiny/'\n",
- "cfg.data.val.ann_file = 'val.txt'\n",
- "cfg.data.val.img_prefix = 'training/image_2'\n",
- "\n",
- "# modify num classes of the model in box head\n",
- "cfg.model.roi_head.bbox_head.num_classes = 3\n",
- "# If we need to finetune a model based on a pre-trained detector, we need to\n",
- "# use load_from to set the path of checkpoints.\n",
- "cfg.load_from = 'checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth'\n",
- "\n",
- "# Set up working dir to save files and logs.\n",
- "cfg.work_dir = './tutorial_exps'\n",
- "\n",
- "# The original learning rate (LR) is set for 8-GPU training.\n",
- "# We divide it by 8 since we only use one GPU.\n",
- "cfg.optimizer.lr = 0.02 / 8\n",
- "cfg.lr_config.warmup = None\n",
- "cfg.log_config.interval = 10\n",
- "\n",
- "# Change the evaluation metric since we use customized dataset.\n",
- "cfg.evaluation.metric = 'mAP'\n",
- "# We can set the evaluation interval to reduce the evaluation times\n",
- "cfg.evaluation.interval = 12\n",
- "# We can set the checkpoint saving interval to reduce the storage cost\n",
- "cfg.checkpoint_config.interval = 12\n",
- "\n",
- "# Set seed thus the results are more reproducible\n",
- "cfg.seed = 0\n",
- "set_random_seed(0, deterministic=False)\n",
- "cfg.gpu_ids = range(1)\n",
- "\n",
- "# We can also use tensorboard to log the training process\n",
- "cfg.log_config.hooks = [\n",
- " dict(type='TextLoggerHook'),\n",
- " dict(type='TensorboardLoggerHook')]\n",
- "\n",
- "\n",
- "# We can initialize the logger for training and have a look\n",
- "# at the final config used for training\n",
- "print(f'Config:\\n{cfg.pretty_text}')\n"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "id": "111W_oZV_3wa"
- },
- "source": [
- "### Train a new detector\n",
- "\n",
- "Finally, lets initialize the dataset and detector, then train a new detector! We use the high-level API `train_detector` implemented by MMDetection. This is also used in our training scripts. For details of the implementation, please see [here](https://github.com/open-mmlab/mmdetection/blob/master/mmdet/apis/train.py)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {
- "colab": {
- "base_uri": "https://localhost:8080/"
- },
- "id": "7WBWHu010PN3",
- "outputId": "a7646284-f909-46d6-a360-22160daeb1cc"
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/content/mmdetection/mmdet/datasets/custom.py:180: UserWarning: CustomDataset does not support filtering empty gt images.\n",
- " 'CustomDataset does not support filtering empty gt images.')\n",
- "2022-02-08 11:38:22,273 - mmdet - INFO - load checkpoint from local path: checkpoints/faster_rcnn_r50_caffe_fpn_mstrain_3x_coco_20210526_095054-1f77628b.pth\n",
- "2022-02-08 11:38:22,406 - mmdet - WARNING - The model and loaded state dict do not match exactly\n",
+ " backend_args=None,\n",
+ " metainfo=dict(classes=('balloon', ), palette=[(220, 20, 60)])))\n",
+ "val_evaluator = dict(\n",
+ " type='CocoMetric',\n",
+ " ann_file='data/balloon/val.json',\n",
+ " metric='bbox',\n",
+ " format_only=False,\n",
+ " backend_args=None,\n",
+ " proposal_nums=(100, 1, 10))\n",
+ "test_evaluator = dict(\n",
+ " type='CocoMetric',\n",
+ " ann_file='data/balloon/val.json',\n",
+ " metric='bbox',\n",
+ " format_only=False,\n",
+ " backend_args=None,\n",
+ " proposal_nums=(100, 1, 10))\n",
+ "tta_model = dict(\n",
+ " type='DetTTAModel',\n",
+ " tta_cfg=dict(nms=dict(type='nms', iou_threshold=0.6), max_per_img=100))\n",
+ "img_scales = [(640, 640), (320, 320), (960, 960)]\n",
+ "tta_pipeline = [\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
+ " dict(\n",
+ " type='TestTimeAug',\n",
+ " transforms=[[{\n",
+ " 'type': 'Resize',\n",
+ " 'scale': (640, 640),\n",
+ " 'keep_ratio': True\n",
+ " }, {\n",
+ " 'type': 'Resize',\n",
+ " 'scale': (320, 320),\n",
+ " 'keep_ratio': True\n",
+ " }, {\n",
+ " 'type': 'Resize',\n",
+ " 'scale': (960, 960),\n",
+ " 'keep_ratio': True\n",
+ " }],\n",
+ " [{\n",
+ " 'type': 'RandomFlip',\n",
+ " 'prob': 1.0\n",
+ " }, {\n",
+ " 'type': 'RandomFlip',\n",
+ " 'prob': 0.0\n",
+ " }],\n",
+ " [{\n",
+ " 'type': 'Pad',\n",
+ " 'size': (960, 960),\n",
+ " 'pad_val': {\n",
+ " 'img': (114, 114, 114)\n",
+ " }\n",
+ " }],\n",
+ " [{\n",
+ " 'type':\n",
+ " 'PackDetInputs',\n",
+ " 'meta_keys':\n",
+ " ('img_id', 'img_path', 'ori_shape', 'img_shape',\n",
+ " 'scale_factor', 'flip', 'flip_direction')\n",
+ " }]])\n",
+ "]\n",
+ "model = dict(\n",
+ " type='RTMDet',\n",
+ " data_preprocessor=dict(\n",
+ " type='DetDataPreprocessor',\n",
+ " mean=[103.53, 116.28, 123.675],\n",
+ " std=[57.375, 57.12, 58.395],\n",
+ " bgr_to_rgb=False,\n",
+ " batch_augments=None),\n",
+ " backbone=dict(\n",
+ " type='CSPNeXt',\n",
+ " arch='P5',\n",
+ " expand_ratio=0.5,\n",
+ " deepen_factor=0.167,\n",
+ " widen_factor=0.375,\n",
+ " channel_attention=True,\n",
+ " norm_cfg=dict(type='SyncBN'),\n",
+ " act_cfg=dict(type='SiLU', inplace=True),\n",
+ " init_cfg=dict(\n",
+ " type='Pretrained',\n",
+ " prefix='backbone.',\n",
+ " checkpoint=\n",
+ " 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth'\n",
+ " )),\n",
+ " neck=dict(\n",
+ " type='CSPNeXtPAFPN',\n",
+ " in_channels=[96, 192, 384],\n",
+ " out_channels=96,\n",
+ " num_csp_blocks=1,\n",
+ " expand_ratio=0.5,\n",
+ " norm_cfg=dict(type='SyncBN'),\n",
+ " act_cfg=dict(type='SiLU', inplace=True)),\n",
+ " bbox_head=dict(\n",
+ " type='RTMDetSepBNHead',\n",
+ " num_classes=1,\n",
+ " in_channels=96,\n",
+ " stacked_convs=2,\n",
+ " feat_channels=96,\n",
+ " anchor_generator=dict(\n",
+ " type='MlvlPointGenerator', offset=0, strides=[8, 16, 32]),\n",
+ " bbox_coder=dict(type='DistancePointBBoxCoder'),\n",
+ " loss_cls=dict(\n",
+ " type='QualityFocalLoss',\n",
+ " use_sigmoid=True,\n",
+ " beta=2.0,\n",
+ " loss_weight=1.0),\n",
+ " loss_bbox=dict(type='GIoULoss', loss_weight=2.0),\n",
+ " with_objectness=False,\n",
+ " exp_on_reg=False,\n",
+ " share_conv=True,\n",
+ " pred_kernel_size=1,\n",
+ " norm_cfg=dict(type='SyncBN'),\n",
+ " act_cfg=dict(type='SiLU', inplace=True)),\n",
+ " train_cfg=dict(\n",
+ " assigner=dict(type='DynamicSoftLabelAssigner', topk=13),\n",
+ " allowed_border=-1,\n",
+ " pos_weight=-1,\n",
+ " debug=False),\n",
+ " test_cfg=dict(\n",
+ " nms_pre=30000,\n",
+ " min_bbox_size=0,\n",
+ " score_thr=0.001,\n",
+ " nms=dict(type='nms', iou_threshold=0.65),\n",
+ " max_per_img=300))\n",
+ "train_pipeline_stage2 = [\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
+ " dict(type='LoadAnnotations', with_bbox=True),\n",
+ " dict(\n",
+ " type='RandomResize',\n",
+ " scale=(640, 640),\n",
+ " ratio_range=(0.1, 2.0),\n",
+ " keep_ratio=True),\n",
+ " dict(type='RandomCrop', crop_size=(640, 640)),\n",
+ " dict(type='YOLOXHSVRandomAug'),\n",
+ " dict(type='RandomFlip', prob=0.5),\n",
+ " dict(type='Pad', size=(640, 640), pad_val=dict(img=(114, 114, 114))),\n",
+ " dict(type='PackDetInputs')\n",
+ "]\n",
+ "max_epochs = 20\n",
+ "stage2_num_epochs = 1\n",
+ "base_lr = 8e-05\n",
+ "interval = 10\n",
+ "custom_hooks = [\n",
+ " dict(\n",
+ " type='PipelineSwitchHook',\n",
+ " switch_epoch=19,\n",
+ " switch_pipeline=[\n",
+ " dict(type='LoadImageFromFile', backend_args=None),\n",
+ " dict(type='LoadAnnotations', with_bbox=True),\n",
+ " dict(\n",
+ " type='RandomResize',\n",
+ " scale=(640, 640),\n",
+ " ratio_range=(0.1, 2.0),\n",
+ " keep_ratio=True),\n",
+ " dict(type='RandomCrop', crop_size=(640, 640)),\n",
+ " dict(type='YOLOXHSVRandomAug'),\n",
+ " dict(type='RandomFlip', prob=0.5),\n",
+ " dict(\n",
+ " type='Pad', size=(640, 640),\n",
+ " pad_val=dict(img=(114, 114, 114))),\n",
+ " dict(type='PackDetInputs')\n",
+ " ])\n",
+ "]\n",
+ "checkpoint = 'https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth'\n",
+ "train_batch_size_per_gpu = 4\n",
+ "train_num_workers = 2\n",
+ "metainfo = dict(classes=('balloon', ), palette=[(220, 20, 60)])\n",
+ "launcher = 'none'\n",
+ "work_dir = './work_dirs/rtmdet_tiny_1xb4-20e_balloon'\n",
"\n",
- "size mismatch for roi_head.bbox_head.fc_cls.weight: copying a param with shape torch.Size([81, 1024]) from checkpoint, the shape in current model is torch.Size([4, 1024]).\n",
- "size mismatch for roi_head.bbox_head.fc_cls.bias: copying a param with shape torch.Size([81]) from checkpoint, the shape in current model is torch.Size([4]).\n",
- "size mismatch for roi_head.bbox_head.fc_reg.weight: copying a param with shape torch.Size([320, 1024]) from checkpoint, the shape in current model is torch.Size([12, 1024]).\n",
- "size mismatch for roi_head.bbox_head.fc_reg.bias: copying a param with shape torch.Size([320]) from checkpoint, the shape in current model is torch.Size([12]).\n",
- "2022-02-08 11:38:22,410 - mmdet - INFO - Start running, host: root@503df4019aac, work_dir: /content/mmdetection/tutorial_exps\n",
- "2022-02-08 11:38:22,412 - mmdet - INFO - Hooks will be executed in the following order:\n",
+ "2023-04-17 10:28:39.429834: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
+ "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
+ "2023-04-17 10:28:40.271799: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n",
+ "04/17 10:28:43 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Distributed training is not used, all SyncBatchNorm (SyncBN) layers in the model will be automatically reverted to BatchNormXd layers if they are used.\n",
+ "04/17 10:28:43 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Hooks will be executed in the following order:\n",
"before_run:\n",
- "(VERY_HIGH ) StepLrUpdaterHook \n",
- "(NORMAL ) CheckpointHook \n",
- "(LOW ) EvalHook \n",
- "(VERY_LOW ) TextLoggerHook \n",
- "(VERY_LOW ) TensorboardLoggerHook \n",
+ "(VERY_HIGH ) RuntimeInfoHook \n",
+ "(BELOW_NORMAL) LoggerHook \n",
+ " -------------------- \n",
+ "before_train:\n",
+ "(VERY_HIGH ) RuntimeInfoHook \n",
+ "(NORMAL ) IterTimerHook \n",
+ "(VERY_LOW ) CheckpointHook \n",
" -------------------- \n",
"before_train_epoch:\n",
- "(VERY_HIGH ) StepLrUpdaterHook \n",
- "(NORMAL ) NumClassCheckHook \n",
- "(LOW ) IterTimerHook \n",
- "(LOW ) EvalHook \n",
- "(VERY_LOW ) TextLoggerHook \n",
- "(VERY_LOW ) TensorboardLoggerHook \n",
+ "(VERY_HIGH ) RuntimeInfoHook \n",
+ "(NORMAL ) IterTimerHook \n",
+ "(NORMAL ) DistSamplerSeedHook \n",
+ "(NORMAL ) PipelineSwitchHook \n",
" -------------------- \n",
"before_train_iter:\n",
- "(VERY_HIGH ) StepLrUpdaterHook \n",
- "(LOW ) IterTimerHook \n",
- "(LOW ) EvalHook \n",
+ "(VERY_HIGH ) RuntimeInfoHook \n",
+ "(NORMAL ) IterTimerHook \n",
" -------------------- \n",
"after_train_iter:\n",
- "(ABOVE_NORMAL) OptimizerHook \n",
- "(NORMAL ) CheckpointHook \n",
- "(LOW ) IterTimerHook \n",
- "(LOW ) EvalHook \n",
- "(VERY_LOW ) TextLoggerHook \n",
- "(VERY_LOW ) TensorboardLoggerHook \n",
+ "(VERY_HIGH ) RuntimeInfoHook \n",
+ "(NORMAL ) IterTimerHook \n",
+ "(BELOW_NORMAL) LoggerHook \n",
+ "(LOW ) ParamSchedulerHook \n",
+ "(VERY_LOW ) CheckpointHook \n",
" -------------------- \n",
"after_train_epoch:\n",
- "(NORMAL ) CheckpointHook \n",
- "(LOW ) EvalHook \n",
- "(VERY_LOW ) TextLoggerHook \n",
- "(VERY_LOW ) TensorboardLoggerHook \n",
+ "(NORMAL ) IterTimerHook \n",
+ "(LOW ) ParamSchedulerHook \n",
+ "(VERY_LOW ) CheckpointHook \n",
" -------------------- \n",
"before_val_epoch:\n",
- "(NORMAL ) NumClassCheckHook \n",
- "(LOW ) IterTimerHook \n",
- "(VERY_LOW ) TextLoggerHook \n",
- "(VERY_LOW ) TensorboardLoggerHook \n",
+ "(NORMAL ) IterTimerHook \n",
" -------------------- \n",
"before_val_iter:\n",
- "(LOW ) IterTimerHook \n",
+ "(NORMAL ) IterTimerHook \n",
" -------------------- \n",
"after_val_iter:\n",
- "(LOW ) IterTimerHook \n",
+ "(NORMAL ) IterTimerHook \n",
+ "(NORMAL ) DetVisualizationHook \n",
+ "(BELOW_NORMAL) LoggerHook \n",
" -------------------- \n",
"after_val_epoch:\n",
- "(VERY_LOW ) TextLoggerHook \n",
- "(VERY_LOW ) TensorboardLoggerHook \n",
+ "(VERY_HIGH ) RuntimeInfoHook \n",
+ "(NORMAL ) IterTimerHook \n",
+ "(BELOW_NORMAL) LoggerHook \n",
+ "(LOW ) ParamSchedulerHook \n",
+ "(VERY_LOW ) CheckpointHook \n",
+ " -------------------- \n",
+ "after_train:\n",
+ "(VERY_LOW ) CheckpointHook \n",
+ " -------------------- \n",
+ "before_test_epoch:\n",
+ "(NORMAL ) IterTimerHook \n",
+ " -------------------- \n",
+ "before_test_iter:\n",
+ "(NORMAL ) IterTimerHook \n",
+ " -------------------- \n",
+ "after_test_iter:\n",
+ "(NORMAL ) IterTimerHook \n",
+ "(NORMAL ) DetVisualizationHook \n",
+ "(BELOW_NORMAL) LoggerHook \n",
+ " -------------------- \n",
+ "after_test_epoch:\n",
+ "(VERY_HIGH ) RuntimeInfoHook \n",
+ "(NORMAL ) IterTimerHook \n",
+ "(BELOW_NORMAL) LoggerHook \n",
" -------------------- \n",
"after_run:\n",
- "(VERY_LOW ) TextLoggerHook \n",
- "(VERY_LOW ) TensorboardLoggerHook \n",
+ "(BELOW_NORMAL) LoggerHook \n",
" -------------------- \n",
- "2022-02-08 11:38:22,414 - mmdet - INFO - workflow: [('train', 1)], max: 12 epochs\n",
- "2022-02-08 11:38:22,417 - mmdet - INFO - Checkpoints will be saved to /content/mmdetection/tutorial_exps by HardDiskBackend.\n",
- "2022-02-08 11:38:35,245 - mmdet - INFO - Epoch [1][10/25]\tlr: 2.500e-03, eta: 0:03:51, time: 0.799, data_time: 0.231, memory: 2455, loss_rpn_cls: 0.0254, loss_rpn_bbox: 0.0173, loss_cls: 0.5374, acc: 81.6309, loss_bbox: 0.3946, loss: 0.9746\n",
- "2022-02-08 11:38:38,778 - mmdet - INFO - Epoch [1][20/25]\tlr: 2.500e-03, eta: 0:02:41, time: 0.353, data_time: 0.024, memory: 2455, loss_rpn_cls: 0.0158, loss_rpn_bbox: 0.0119, loss_cls: 0.1778, acc: 93.3789, loss_bbox: 0.3290, loss: 0.5344\n",
- "2022-02-08 11:38:46,422 - mmdet - INFO - Epoch [2][10/25]\tlr: 2.500e-03, eta: 0:02:10, time: 0.576, data_time: 0.230, memory: 2456, loss_rpn_cls: 0.0203, loss_rpn_bbox: 0.0139, loss_cls: 0.1573, acc: 94.4824, loss_bbox: 0.2689, loss: 0.4603\n",
- "2022-02-08 11:38:50,015 - mmdet - INFO - Epoch [2][20/25]\tlr: 2.500e-03, eta: 0:01:58, time: 0.360, data_time: 0.023, memory: 2456, loss_rpn_cls: 0.0127, loss_rpn_bbox: 0.0127, loss_cls: 0.1446, acc: 94.6777, loss_bbox: 0.2154, loss: 0.3854\n",
- "2022-02-08 11:38:57,686 - mmdet - INFO - Epoch [3][10/25]\tlr: 2.500e-03, eta: 0:01:46, time: 0.575, data_time: 0.226, memory: 2456, loss_rpn_cls: 0.0064, loss_rpn_bbox: 0.0104, loss_cls: 0.0943, acc: 96.5039, loss_bbox: 0.1586, loss: 0.2697\n",
- "2022-02-08 11:39:01,390 - mmdet - INFO - Epoch [3][20/25]\tlr: 2.500e-03, eta: 0:01:39, time: 0.370, data_time: 0.024, memory: 2456, loss_rpn_cls: 0.0072, loss_rpn_bbox: 0.0132, loss_cls: 0.1439, acc: 94.6191, loss_bbox: 0.2597, loss: 0.4242\n",
- "2022-02-08 11:39:09,266 - mmdet - INFO - Epoch [4][10/25]\tlr: 2.500e-03, eta: 0:01:31, time: 0.590, data_time: 0.228, memory: 2456, loss_rpn_cls: 0.0057, loss_rpn_bbox: 0.0134, loss_cls: 0.1181, acc: 95.4199, loss_bbox: 0.2243, loss: 0.3616\n",
- "2022-02-08 11:39:13,065 - mmdet - INFO - Epoch [4][20/25]\tlr: 2.500e-03, eta: 0:01:26, time: 0.379, data_time: 0.024, memory: 2456, loss_rpn_cls: 0.0050, loss_rpn_bbox: 0.0117, loss_cls: 0.1196, acc: 95.4004, loss_bbox: 0.2120, loss: 0.3484\n",
- "2022-02-08 11:39:20,854 - mmdet - INFO - Epoch [5][10/25]\tlr: 2.500e-03, eta: 0:01:19, time: 0.582, data_time: 0.228, memory: 2456, loss_rpn_cls: 0.0028, loss_rpn_bbox: 0.0091, loss_cls: 0.1021, acc: 96.1719, loss_bbox: 0.2075, loss: 0.3216\n",
- "2022-02-08 11:39:24,557 - mmdet - INFO - Epoch [5][20/25]\tlr: 2.500e-03, eta: 0:01:14, time: 0.369, data_time: 0.023, memory: 2456, loss_rpn_cls: 0.0030, loss_rpn_bbox: 0.0106, loss_cls: 0.0942, acc: 96.6309, loss_bbox: 0.1926, loss: 0.3003\n",
- "2022-02-08 11:39:32,255 - mmdet - INFO - Epoch [6][10/25]\tlr: 2.500e-03, eta: 0:01:07, time: 0.576, data_time: 0.226, memory: 2456, loss_rpn_cls: 0.0025, loss_rpn_bbox: 0.0081, loss_cls: 0.0787, acc: 97.2363, loss_bbox: 0.1827, loss: 0.2721\n",
- "2022-02-08 11:39:35,900 - mmdet - INFO - Epoch [6][20/25]\tlr: 2.500e-03, eta: 0:01:02, time: 0.364, data_time: 0.023, memory: 2456, loss_rpn_cls: 0.0035, loss_rpn_bbox: 0.0100, loss_cls: 0.0901, acc: 96.5332, loss_bbox: 0.1857, loss: 0.2893\n",
- "2022-02-08 11:39:43,555 - mmdet - INFO - Epoch [7][10/25]\tlr: 2.500e-03, eta: 0:00:56, time: 0.576, data_time: 0.228, memory: 2456, loss_rpn_cls: 0.0023, loss_rpn_bbox: 0.0093, loss_cls: 0.0877, acc: 96.7383, loss_bbox: 0.1736, loss: 0.2730\n",
- "2022-02-08 11:39:47,186 - mmdet - INFO - Epoch [7][20/25]\tlr: 2.500e-03, eta: 0:00:52, time: 0.362, data_time: 0.024, memory: 2456, loss_rpn_cls: 0.0040, loss_rpn_bbox: 0.0112, loss_cls: 0.0889, acc: 96.6699, loss_bbox: 0.1800, loss: 0.2840\n",
- "2022-02-08 11:39:54,874 - mmdet - INFO - Epoch [8][10/25]\tlr: 2.500e-03, eta: 0:00:46, time: 0.575, data_time: 0.227, memory: 2456, loss_rpn_cls: 0.0020, loss_rpn_bbox: 0.0094, loss_cls: 0.0748, acc: 97.0801, loss_bbox: 0.1381, loss: 0.2243\n",
- "2022-02-08 11:39:58,511 - mmdet - INFO - Epoch [8][20/25]\tlr: 2.500e-03, eta: 0:00:41, time: 0.364, data_time: 0.025, memory: 2456, loss_rpn_cls: 0.0031, loss_rpn_bbox: 0.0081, loss_cls: 0.0743, acc: 97.0801, loss_bbox: 0.1635, loss: 0.2489\n",
- "2022-02-08 11:40:06,228 - mmdet - INFO - Epoch [9][10/25]\tlr: 2.500e-04, eta: 0:00:35, time: 0.577, data_time: 0.227, memory: 2456, loss_rpn_cls: 0.0024, loss_rpn_bbox: 0.0085, loss_cls: 0.0649, acc: 97.5781, loss_bbox: 0.1307, loss: 0.2065\n",
- "2022-02-08 11:40:09,873 - mmdet - INFO - Epoch [9][20/25]\tlr: 2.500e-04, eta: 0:00:31, time: 0.365, data_time: 0.025, memory: 2456, loss_rpn_cls: 0.0010, loss_rpn_bbox: 0.0066, loss_cls: 0.0530, acc: 97.9199, loss_bbox: 0.1090, loss: 0.1695\n",
- "2022-02-08 11:40:17,597 - mmdet - INFO - Epoch [10][10/25]\tlr: 2.500e-04, eta: 0:00:25, time: 0.579, data_time: 0.227, memory: 2456, loss_rpn_cls: 0.0041, loss_rpn_bbox: 0.0084, loss_cls: 0.0676, acc: 97.3633, loss_bbox: 0.1367, loss: 0.2168\n",
- "2022-02-08 11:40:21,269 - mmdet - INFO - Epoch [10][20/25]\tlr: 2.500e-04, eta: 0:00:21, time: 0.367, data_time: 0.025, memory: 2456, loss_rpn_cls: 0.0008, loss_rpn_bbox: 0.0055, loss_cls: 0.0593, acc: 97.7246, loss_bbox: 0.1277, loss: 0.1934\n",
- "2022-02-08 11:40:29,010 - mmdet - INFO - Epoch [11][10/25]\tlr: 2.500e-04, eta: 0:00:15, time: 0.579, data_time: 0.228, memory: 2456, loss_rpn_cls: 0.0007, loss_rpn_bbox: 0.0072, loss_cls: 0.0618, acc: 97.5977, loss_bbox: 0.1196, loss: 0.1892\n",
- "2022-02-08 11:40:32,714 - mmdet - INFO - Epoch [11][20/25]\tlr: 2.500e-04, eta: 0:00:11, time: 0.370, data_time: 0.024, memory: 2456, loss_rpn_cls: 0.0011, loss_rpn_bbox: 0.0074, loss_cls: 0.0552, acc: 97.9297, loss_bbox: 0.1246, loss: 0.1883\n",
- "2022-02-08 11:40:40,497 - mmdet - INFO - Epoch [12][10/25]\tlr: 2.500e-05, eta: 0:00:05, time: 0.583, data_time: 0.227, memory: 2456, loss_rpn_cls: 0.0010, loss_rpn_bbox: 0.0060, loss_cls: 0.0563, acc: 97.7637, loss_bbox: 0.1237, loss: 0.1871\n",
- "2022-02-08 11:40:44,191 - mmdet - INFO - Epoch [12][20/25]\tlr: 2.500e-05, eta: 0:00:01, time: 0.369, data_time: 0.024, memory: 2456, loss_rpn_cls: 0.0013, loss_rpn_bbox: 0.0049, loss_cls: 0.0487, acc: 98.0273, loss_bbox: 0.0890, loss: 0.1439\n",
- "2022-02-08 11:40:45,980 - mmdet - INFO - Saving checkpoint at 12 epochs\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 25/25, 9.7 task/s, elapsed: 3s, ETA: 0s\n",
- "---------------iou_thr: 0.5---------------\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "2022-02-08 11:40:51,306 - mmdet - INFO - \n",
- "+------------+-----+------+--------+-------+\n",
- "| class | gts | dets | recall | ap |\n",
- "+------------+-----+------+--------+-------+\n",
- "| Car | 62 | 129 | 0.968 | 0.869 |\n",
- "| Pedestrian | 13 | 38 | 0.846 | 0.752 |\n",
- "| Cyclist | 7 | 51 | 0.571 | 0.123 |\n",
- "+------------+-----+------+--------+-------+\n",
- "| mAP | | | | 0.581 |\n",
- "+------------+-----+------+--------+-------+\n",
- "2022-02-08 11:40:51,309 - mmdet - INFO - Epoch(val) [12][25]\tAP50: 0.5810, mAP: 0.5813\n"
+ "loading annotations into memory...\n",
+ "Done (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.2.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stem.2.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage1.1.attention.fc.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage2.1.attention.fc.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage3.1.attention.fc.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv2.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.1.conv2.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- backbone.stage4.2.attention.fc.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.reduce_layers.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.0.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.top_down_blocks.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.downsamples.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.0.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.main_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.main_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.short_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.short_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.final_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.final_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.depthwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.depthwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.pointwise_conv.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.bottom_up_blocks.1.blocks.0.conv2.pointwise_conv.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.2.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- neck.out_convs.2.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.0.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.1.0.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.1.1.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.1.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.2.0.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.cls_convs.2.1.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.cls_convs.2.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.0.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.1.0.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.1.1.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.1.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.2.0.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.0.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.0.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - bbox_head.reg_convs.2.1.conv is duplicate. It is skipped since bypass_duplicate=True\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.1.bn.weight:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.reg_convs.2.1.bn.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_cls.0.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_cls.1.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_cls.2.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_reg.0.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_reg.1.bias:weight_decay=0.0\n",
+ "04/17 10:28:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - paramwise_options -- bbox_head.rtm_reg.2.bias:weight_decay=0.0\n",
+ "loading annotations into memory...\n",
+ "Done (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "/usr/local/lib/python3.9/dist-packages/torch/utils/data/dataloader.py:561: UserWarning: This DataLoader will create 10 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n",
+ " warnings.warn(_create_warning_msg(\n",
+ "loading annotations into memory...\n",
+ "Done (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "04/17 10:28:46 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - load backbone. in model from: https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth\n",
+ "Loads checkpoint by http backend from path: https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth\n",
+ "Downloading: \"https://download.openmmlab.com/mmdetection/v3.0/rtmdet/cspnext_rsb_pretrain/cspnext-tiny_imagenet_600e.pth\" to /root/.cache/torch/hub/checkpoints/cspnext-tiny_imagenet_600e.pth\n",
+ "100% 31.5M/31.5M [00:01<00:00, 27.2MB/s]\n",
+ "Loads checkpoint by local backend from path: ./checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth\n",
+ "The model and loaded state dict do not match exactly\n",
+ "\n",
+ "size mismatch for bbox_head.rtm_cls.0.weight: copying a param with shape torch.Size([80, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 96, 1, 1]).\n",
+ "size mismatch for bbox_head.rtm_cls.0.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n",
+ "size mismatch for bbox_head.rtm_cls.1.weight: copying a param with shape torch.Size([80, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 96, 1, 1]).\n",
+ "size mismatch for bbox_head.rtm_cls.1.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n",
+ "size mismatch for bbox_head.rtm_cls.2.weight: copying a param with shape torch.Size([80, 96, 1, 1]) from checkpoint, the shape in current model is torch.Size([1, 96, 1, 1]).\n",
+ "size mismatch for bbox_head.rtm_cls.2.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([1]).\n",
+ "unexpected key in source state_dict: data_preprocessor.mean, data_preprocessor.std\n",
+ "\n",
+ "04/17 10:28:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Load checkpoint from ./checkpoints/rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth\n",
+ "04/17 10:28:48 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - \"FileClient\" will be deprecated in future. Please use io functions in https://mmengine.readthedocs.io/en/latest/api/fileio.html#file-io\n",
+ "04/17 10:28:48 - mmengine - \u001b[5m\u001b[4m\u001b[33mWARNING\u001b[0m - \"HardDiskBackend\" is the alias of \"LocalBackend\" and the former will be deprecated in future.\n",
+ "04/17 10:28:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Checkpoints will be saved to /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon.\n",
+ "/usr/local/lib/python3.9/dist-packages/torch/functional.py:504: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at ../aten/src/ATen/native/TensorShape.cpp:3483.)\n",
+ " return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]\n",
+ "04/17 10:28:51 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][ 5/16] lr: 3.5556e-05 eta: 0:03:33 time: 0.6778 data_time: 0.2107 memory: 1422 loss: 2.7197 loss_cls: 2.0437 loss_bbox: 0.6761\n",
+ "04/17 10:28:52 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][10/16] lr: 8.0000e-05 eta: 0:02:31 time: 0.4890 data_time: 0.1117 memory: 1422 loss: 2.7312 loss_cls: 2.0638 loss_bbox: 0.6673\n",
+ "04/17 10:28:54 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [1][15/16] lr: 8.0000e-05 eta: 0:02:05 time: 0.4111 data_time: 0.0774 memory: 1422 loss: 2.7183 loss_cls: 2.0497 loss_bbox: 0.6687\n",
+ "04/17 10:28:54 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "/usr/local/lib/python3.9/dist-packages/torch/utils/data/dataloader.py:561: UserWarning: This DataLoader will create 10 worker processes in total. Our suggested max number of worker in current system is 2, which is smaller than what this DataLoader is going to create. Please be aware that excessive worker creation might get DataLoader running slow or even freeze, lower the worker number to avoid potential slowness/freeze if necessary.\n",
+ " warnings.warn(_create_warning_msg(\n",
+ "04/17 10:28:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.01s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.13s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.044\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.059\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.051\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.076\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.054\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.190\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.488\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.208\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.608\n",
+ "04/17 10:28:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.044 0.059 0.051 0.000 0.076 0.054\n",
+ "04/17 10:28:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [1][3/3] coco/bbox_mAP: 0.0440 coco/bbox_mAP_50: 0.0590 coco/bbox_mAP_75: 0.0510 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.0760 coco/bbox_mAP_l: 0.0540 data_time: 0.1730 time: 0.2618\n",
+ "04/17 10:28:56 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.0440 coco/bbox_mAP at 1 epoch is saved to best_coco_bbox_mAP_epoch_1.pth.\n",
+ "04/17 10:28:59 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][ 5/16] lr: 8.0000e-05 eta: 0:02:09 time: 0.4335 data_time: 0.0945 memory: 1422 loss: 2.7141 loss_cls: 2.0473 loss_bbox: 0.6668\n",
+ "04/17 10:29:02 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][10/16] lr: 8.0000e-05 eta: 0:02:20 time: 0.4791 data_time: 0.1165 memory: 1422 loss: 2.7160 loss_cls: 2.0560 loss_bbox: 0.6600\n",
+ "04/17 10:29:04 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [2][15/16] lr: 8.0000e-05 eta: 0:02:13 time: 0.4614 data_time: 0.0997 memory: 1422 loss: 2.7240 loss_cls: 2.0732 loss_bbox: 0.6507\n",
+ "04/17 10:29:04 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.12s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.128\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.165\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.147\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.081\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.164\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.056\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.320\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.570\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.325\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.683\n",
+ "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.128 0.165 0.147 0.000 0.081 0.164\n",
+ "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [2][3/3] coco/bbox_mAP: 0.1280 coco/bbox_mAP_50: 0.1650 coco/bbox_mAP_75: 0.1470 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.0810 coco/bbox_mAP_l: 0.1640 data_time: 0.1576 time: 0.2254\n",
+ "04/17 10:29:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_1.pth is removed\n",
+ "04/17 10:29:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.1280 coco/bbox_mAP at 2 epoch is saved to best_coco_bbox_mAP_epoch_2.pth.\n",
+ "04/17 10:29:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][ 5/16] lr: 8.0000e-05 eta: 0:02:06 time: 0.4462 data_time: 0.1025 memory: 1422 loss: 2.7154 loss_cls: 2.0725 loss_bbox: 0.6429\n",
+ "04/17 10:29:10 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][10/16] lr: 8.0000e-05 eta: 0:02:01 time: 0.4378 data_time: 0.1003 memory: 1422 loss: 2.7268 loss_cls: 2.0980 loss_bbox: 0.6288\n",
+ "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [3][15/16] lr: 8.0000e-05 eta: 0:01:54 time: 0.4192 data_time: 0.0922 memory: 1422 loss: 2.7336 loss_cls: 2.1177 loss_bbox: 0.6159\n",
+ "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.13s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.308\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.381\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.356\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.098\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.409\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.146\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.370\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.646\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.292\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.800\n",
+ "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.308 0.381 0.356 0.000 0.098 0.409\n",
+ "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [3][3/3] coco/bbox_mAP: 0.3080 coco/bbox_mAP_50: 0.3810 coco/bbox_mAP_75: 0.3560 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.0980 coco/bbox_mAP_l: 0.4090 data_time: 0.1456 time: 0.2063\n",
+ "04/17 10:29:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_2.pth is removed\n",
+ "04/17 10:29:14 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.3080 coco/bbox_mAP at 3 epoch is saved to best_coco_bbox_mAP_epoch_3.pth.\n",
+ "04/17 10:29:17 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][ 5/16] lr: 8.0000e-05 eta: 0:01:54 time: 0.3957 data_time: 0.0830 memory: 1422 loss: 2.7228 loss_cls: 2.1246 loss_bbox: 0.5982\n",
+ "04/17 10:29:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][10/16] lr: 8.0000e-05 eta: 0:01:54 time: 0.4205 data_time: 0.0934 memory: 1422 loss: 2.7104 loss_cls: 2.1374 loss_bbox: 0.5730\n",
+ "04/17 10:29:21 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [4][15/16] lr: 8.0000e-05 eta: 0:01:51 time: 0.4289 data_time: 0.1029 memory: 1422 loss: 2.6786 loss_cls: 2.1263 loss_bbox: 0.5524\n",
+ "04/17 10:29:21 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.12s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.406\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.531\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.449\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.116\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.525\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.166\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.496\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.694\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.533\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.786\n",
+ "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.406 0.531 0.449 0.000 0.116 0.525\n",
+ "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [4][3/3] coco/bbox_mAP: 0.4060 coco/bbox_mAP_50: 0.5310 coco/bbox_mAP_75: 0.4490 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1160 coco/bbox_mAP_l: 0.5250 data_time: 0.1390 time: 0.1964\n",
+ "04/17 10:29:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_3.pth is removed\n",
+ "04/17 10:29:23 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4060 coco/bbox_mAP at 4 epoch is saved to best_coco_bbox_mAP_epoch_4.pth.\n",
+ "04/17 10:29:26 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][ 5/16] lr: 8.0000e-05 eta: 0:01:46 time: 0.4261 data_time: 0.1005 memory: 1422 loss: 2.6337 loss_cls: 2.1077 loss_bbox: 0.5260\n",
+ "04/17 10:29:27 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][10/16] lr: 8.0000e-05 eta: 0:01:43 time: 0.4038 data_time: 0.0969 memory: 1422 loss: 2.5711 loss_cls: 2.0661 loss_bbox: 0.5050\n",
+ "04/17 10:29:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [5][15/16] lr: 8.0000e-05 eta: 0:01:39 time: 0.3730 data_time: 0.0887 memory: 1422 loss: 2.4938 loss_cls: 2.0094 loss_bbox: 0.4844\n",
+ "04/17 10:29:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:29:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 5 epochs\n",
+ "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.01s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.25s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.03s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.426\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.547\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.476\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.110\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.556\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.170\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.508\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.678\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.417\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.803\n",
+ "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.426 0.547 0.476 0.000 0.110 0.556\n",
+ "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [5][3/3] coco/bbox_mAP: 0.4260 coco/bbox_mAP_50: 0.5470 coco/bbox_mAP_75: 0.4760 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1100 coco/bbox_mAP_l: 0.5560 data_time: 0.1361 time: 0.1959\n",
+ "04/17 10:29:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_4.pth is removed\n",
+ "04/17 10:29:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4260 coco/bbox_mAP at 5 epoch is saved to best_coco_bbox_mAP_epoch_5.pth.\n",
+ "04/17 10:29:37 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][ 5/16] lr: 8.0000e-05 eta: 0:01:40 time: 0.4070 data_time: 0.1114 memory: 1422 loss: 2.4067 loss_cls: 1.9395 loss_bbox: 0.4673\n",
+ "04/17 10:29:39 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][10/16] lr: 8.0000e-05 eta: 0:01:37 time: 0.4020 data_time: 0.1043 memory: 1422 loss: 2.3103 loss_cls: 1.8537 loss_bbox: 0.4566\n",
+ "04/17 10:29:40 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [6][15/16] lr: 8.0000e-05 eta: 0:01:33 time: 0.4037 data_time: 0.1089 memory: 1422 loss: 2.2055 loss_cls: 1.7604 loss_bbox: 0.4451\n",
+ "04/17 10:29:40 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.12s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.455\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.579\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.492\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.173\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.584\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.160\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.582\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.702\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.517\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.803\n",
+ "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.455 0.579 0.492 0.000 0.173 0.584\n",
+ "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [6][3/3] coco/bbox_mAP: 0.4550 coco/bbox_mAP_50: 0.5790 coco/bbox_mAP_75: 0.4920 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1730 coco/bbox_mAP_l: 0.5840 data_time: 0.1338 time: 0.1915\n",
+ "04/17 10:29:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_5.pth is removed\n",
+ "04/17 10:29:42 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4550 coco/bbox_mAP at 6 epoch is saved to best_coco_bbox_mAP_epoch_6.pth.\n",
+ "04/17 10:29:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][ 5/16] lr: 8.0000e-05 eta: 0:01:30 time: 0.4004 data_time: 0.1114 memory: 1422 loss: 2.0828 loss_cls: 1.6540 loss_bbox: 0.4288\n",
+ "04/17 10:29:46 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][10/16] lr: 8.0000e-05 eta: 0:01:27 time: 0.3826 data_time: 0.1077 memory: 1422 loss: 1.9577 loss_cls: 1.5354 loss_bbox: 0.4222\n",
+ "04/17 10:29:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [7][15/16] lr: 8.0000e-05 eta: 0:01:24 time: 0.3629 data_time: 0.0973 memory: 1422 loss: 1.8775 loss_cls: 1.4601 loss_bbox: 0.4174\n",
+ "04/17 10:29:48 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.01s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.25s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.03s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.494\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.658\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.558\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.186\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.613\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.174\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.578\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.726\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.575\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.817\n",
+ "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.494 0.658 0.558 0.000 0.186 0.613\n",
+ "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [7][3/3] coco/bbox_mAP: 0.4940 coco/bbox_mAP_50: 0.6580 coco/bbox_mAP_75: 0.5580 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.1860 coco/bbox_mAP_l: 0.6130 data_time: 0.1454 time: 0.2026\n",
+ "04/17 10:29:49 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_6.pth is removed\n",
+ "04/17 10:29:51 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.4940 coco/bbox_mAP at 7 epoch is saved to best_coco_bbox_mAP_epoch_7.pth.\n",
+ "04/17 10:29:54 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][ 5/16] lr: 8.0000e-05 eta: 0:01:22 time: 0.3740 data_time: 0.1034 memory: 1422 loss: 1.7607 loss_cls: 1.3465 loss_bbox: 0.4142\n",
+ "04/17 10:29:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][10/16] lr: 8.0000e-05 eta: 0:01:19 time: 0.3734 data_time: 0.1042 memory: 1422 loss: 1.6590 loss_cls: 1.2527 loss_bbox: 0.4064\n",
+ "04/17 10:29:56 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [8][15/16] lr: 8.0000e-05 eta: 0:01:16 time: 0.3658 data_time: 0.0988 memory: 1422 loss: 1.5863 loss_cls: 1.1838 loss_bbox: 0.4025\n",
+ "04/17 10:29:56 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.542\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.693\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.620\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.231\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.666\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.190\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.618\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.740\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.625\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.819\n",
+ "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.542 0.693 0.620 0.000 0.231 0.666\n",
+ "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [8][3/3] coco/bbox_mAP: 0.5420 coco/bbox_mAP_50: 0.6930 coco/bbox_mAP_75: 0.6200 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2310 coco/bbox_mAP_l: 0.6660 data_time: 0.1422 time: 0.1982\n",
+ "04/17 10:29:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_7.pth is removed\n",
+ "04/17 10:29:59 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.5420 coco/bbox_mAP at 8 epoch is saved to best_coco_bbox_mAP_epoch_8.pth.\n",
+ "04/17 10:30:01 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][ 5/16] lr: 8.0000e-05 eta: 0:01:14 time: 0.3413 data_time: 0.0825 memory: 1422 loss: 1.4943 loss_cls: 1.1003 loss_bbox: 0.3940\n",
+ "04/17 10:30:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][10/16] lr: 8.0000e-05 eta: 0:01:12 time: 0.3545 data_time: 0.0888 memory: 1422 loss: 1.4314 loss_cls: 1.0468 loss_bbox: 0.3846\n",
+ "04/17 10:30:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [9][15/16] lr: 8.0000e-05 eta: 0:01:10 time: 0.3613 data_time: 0.0938 memory: 1422 loss: 1.3590 loss_cls: 0.9855 loss_bbox: 0.3735\n",
+ "04/17 10:30:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:30:06 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.01s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.24s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.03s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.611\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.725\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.689\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.227\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.751\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.214\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.696\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.774\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.633\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.864\n",
+ "04/17 10:30:07 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.611 0.725 0.689 0.000 0.227 0.751\n",
+ "04/17 10:30:07 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [9][3/3] coco/bbox_mAP: 0.6110 coco/bbox_mAP_50: 0.7250 coco/bbox_mAP_75: 0.6890 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2270 coco/bbox_mAP_l: 0.7510 data_time: 0.1471 time: 0.2029\n",
+ "04/17 10:30:07 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_8.pth is removed\n",
+ "04/17 10:30:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6110 coco/bbox_mAP at 9 epoch is saved to best_coco_bbox_mAP_epoch_9.pth.\n",
+ "04/17 10:30:10 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][ 5/16] lr: 8.0000e-05 eta: 0:01:08 time: 0.3742 data_time: 0.0985 memory: 1422 loss: 1.2606 loss_cls: 0.8955 loss_bbox: 0.3651\n",
+ "04/17 10:30:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][10/16] lr: 8.0000e-05 eta: 0:01:05 time: 0.3687 data_time: 0.0901 memory: 1422 loss: 1.2161 loss_cls: 0.8550 loss_bbox: 0.3611\n",
+ "04/17 10:30:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [10][15/16] lr: 8.0000e-05 eta: 0:01:03 time: 0.3582 data_time: 0.0862 memory: 1422 loss: 1.1586 loss_cls: 0.8081 loss_bbox: 0.3505\n",
+ "04/17 10:30:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:30:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 10 epochs\n",
+ "04/17 10:30:15 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.12s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.623\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.741\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.698\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.273\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.761\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.226\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.670\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.768\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.642\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.853\n",
+ "04/17 10:30:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.623 0.741 0.698 0.000 0.273 0.761\n",
+ "04/17 10:30:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [10][3/3] coco/bbox_mAP: 0.6230 coco/bbox_mAP_50: 0.7410 coco/bbox_mAP_75: 0.6980 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2730 coco/bbox_mAP_l: 0.7610 data_time: 0.1447 time: 0.2024\n",
+ "04/17 10:30:16 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_9.pth is removed\n",
+ "04/17 10:30:17 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6230 coco/bbox_mAP at 10 epoch is saved to best_coco_bbox_mAP_epoch_10.pth.\n",
+ "04/17 10:30:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][ 5/16] lr: 7.9883e-05 eta: 0:01:01 time: 0.3772 data_time: 0.0894 memory: 1422 loss: 1.0756 loss_cls: 0.7460 loss_bbox: 0.3297\n",
+ "04/17 10:30:22 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][10/16] lr: 7.9408e-05 eta: 0:01:00 time: 0.3923 data_time: 0.0905 memory: 1422 loss: 1.0549 loss_cls: 0.7295 loss_bbox: 0.3254\n",
+ "04/17 10:30:24 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [11][15/16] lr: 7.8573e-05 eta: 0:00:58 time: 0.4015 data_time: 0.1017 memory: 1422 loss: 1.0355 loss_cls: 0.7114 loss_bbox: 0.3241\n",
+ "04/17 10:30:24 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.645\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.772\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.709\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.231\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.778\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.226\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.686\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.782\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.692\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.856\n",
+ "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.645 0.772 0.709 0.000 0.231 0.778\n",
+ "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [11][3/3] coco/bbox_mAP: 0.6450 coco/bbox_mAP_50: 0.7720 coco/bbox_mAP_75: 0.7090 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2310 coco/bbox_mAP_l: 0.7780 data_time: 0.1423 time: 0.1990\n",
+ "04/17 10:30:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_10.pth is removed\n",
+ "04/17 10:30:26 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6450 coco/bbox_mAP at 11 epoch is saved to best_coco_bbox_mAP_epoch_11.pth.\n",
+ "04/17 10:30:29 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][ 5/16] lr: 7.7107e-05 eta: 0:00:55 time: 0.4071 data_time: 0.1000 memory: 1422 loss: 0.9773 loss_cls: 0.6681 loss_bbox: 0.3092\n",
+ "04/17 10:30:30 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][10/16] lr: 7.5513e-05 eta: 0:00:53 time: 0.4009 data_time: 0.0986 memory: 1422 loss: 0.9503 loss_cls: 0.6470 loss_bbox: 0.3033\n",
+ "04/17 10:30:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [12][15/16] lr: 7.3596e-05 eta: 0:00:50 time: 0.3808 data_time: 0.0966 memory: 1422 loss: 0.9250 loss_cls: 0.6268 loss_bbox: 0.2982\n",
+ "04/17 10:30:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:30:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.12s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.617\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.751\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.696\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.218\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.750\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.210\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.662\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.760\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.633\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844\n",
+ "04/17 10:30:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.617 0.751 0.696 0.000 0.218 0.750\n",
+ "04/17 10:30:33 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [12][3/3] coco/bbox_mAP: 0.6170 coco/bbox_mAP_50: 0.7510 coco/bbox_mAP_75: 0.6960 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2180 coco/bbox_mAP_l: 0.7500 data_time: 0.1405 time: 0.1964\n",
+ "04/17 10:30:36 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [13][ 5/16] lr: 7.0895e-05 eta: 0:00:49 time: 0.4001 data_time: 0.1021 memory: 1422 loss: 0.9386 loss_cls: 0.6415 loss_bbox: 0.2971\n",
+ "04/17 10:30:39 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [13][10/16] lr: 6.8337e-05 eta: 0:00:47 time: 0.4275 data_time: 0.1168 memory: 1422 loss: 0.9174 loss_cls: 0.6254 loss_bbox: 0.2920\n",
+ "04/17 10:30:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [13][15/16] lr: 6.5526e-05 eta: 0:00:45 time: 0.4284 data_time: 0.1216 memory: 1422 loss: 0.9057 loss_cls: 0.6122 loss_bbox: 0.2935\n",
+ "04/17 10:30:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:30:41 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.635\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.755\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.718\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.242\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.771\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.210\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.680\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.774\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.642\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.861\n",
+ "04/17 10:30:42 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.635 0.755 0.718 0.000 0.242 0.771\n",
+ "04/17 10:30:42 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [13][3/3] coco/bbox_mAP: 0.6350 coco/bbox_mAP_50: 0.7550 coco/bbox_mAP_75: 0.7180 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2420 coco/bbox_mAP_l: 0.7710 data_time: 0.1386 time: 0.1939\n",
+ "04/17 10:30:44 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [14][ 5/16] lr: 6.1855e-05 eta: 0:00:43 time: 0.4110 data_time: 0.1137 memory: 1422 loss: 0.9190 loss_cls: 0.6193 loss_bbox: 0.2997\n",
+ "04/17 10:30:45 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [14][10/16] lr: 5.8584e-05 eta: 0:00:40 time: 0.4015 data_time: 0.1135 memory: 1422 loss: 0.9312 loss_cls: 0.6258 loss_bbox: 0.3054\n",
+ "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [14][15/16] lr: 5.5152e-05 eta: 0:00:38 time: 0.3801 data_time: 0.1030 memory: 1422 loss: 0.9122 loss_cls: 0.6111 loss_bbox: 0.3011\n",
+ "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.636\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.739\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.708\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.220\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.782\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.222\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.690\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.788\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.683\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.867\n",
+ "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.636 0.739 0.708 0.000 0.220 0.782\n",
+ "04/17 10:30:47 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [14][3/3] coco/bbox_mAP: 0.6360 coco/bbox_mAP_50: 0.7390 coco/bbox_mAP_75: 0.7080 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2200 coco/bbox_mAP_l: 0.7820 data_time: 0.1371 time: 0.1918\n",
+ "04/17 10:30:50 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [15][ 5/16] lr: 5.0871e-05 eta: 0:00:36 time: 0.3939 data_time: 0.1054 memory: 1422 loss: 0.8896 loss_cls: 0.5903 loss_bbox: 0.2993\n",
+ "04/17 10:30:53 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [15][10/16] lr: 4.7206e-05 eta: 0:00:34 time: 0.4165 data_time: 0.1144 memory: 1422 loss: 0.8796 loss_cls: 0.5829 loss_bbox: 0.2967\n",
+ "04/17 10:30:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [15][15/16] lr: 4.3492e-05 eta: 0:00:32 time: 0.4306 data_time: 0.1161 memory: 1422 loss: 0.8680 loss_cls: 0.5699 loss_bbox: 0.2981\n",
+ "04/17 10:30:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:30:55 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 15 epochs\n",
+ "04/17 10:30:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.01s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.644\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.750\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.701\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.232\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.788\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.224\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.686\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.790\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.692\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.867\n",
+ "04/17 10:30:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.644 0.750 0.701 0.000 0.232 0.788\n",
+ "04/17 10:30:57 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [15][3/3] coco/bbox_mAP: 0.6440 coco/bbox_mAP_50: 0.7500 coco/bbox_mAP_75: 0.7010 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2320 coco/bbox_mAP_l: 0.7880 data_time: 0.1364 time: 0.1922\n",
+ "04/17 10:30:59 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [16][ 5/16] lr: 3.9019e-05 eta: 0:00:30 time: 0.4257 data_time: 0.1152 memory: 1422 loss: 0.8383 loss_cls: 0.5478 loss_bbox: 0.2904\n",
+ "04/17 10:31:01 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [16][10/16] lr: 3.5320e-05 eta: 0:00:28 time: 0.3921 data_time: 0.0945 memory: 1422 loss: 0.8302 loss_cls: 0.5349 loss_bbox: 0.2953\n",
+ "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [16][15/16] lr: 3.1685e-05 eta: 0:00:25 time: 0.3721 data_time: 0.0851 memory: 1422 loss: 0.8413 loss_cls: 0.5464 loss_bbox: 0.2949\n",
+ "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.12s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.01s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.667\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.769\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.741\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.264\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.800\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.218\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.714\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.802\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.708\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.878\n",
+ "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.667 0.769 0.741 0.000 0.264 0.800\n",
+ "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [16][3/3] coco/bbox_mAP: 0.6670 coco/bbox_mAP_50: 0.7690 coco/bbox_mAP_75: 0.7410 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2640 coco/bbox_mAP_l: 0.8000 data_time: 0.1355 time: 0.1909\n",
+ "04/17 10:31:03 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_11.pth is removed\n",
+ "04/17 10:31:05 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6670 coco/bbox_mAP at 16 epoch is saved to best_coco_bbox_mAP_epoch_16.pth.\n",
+ "04/17 10:31:08 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [17][ 5/16] lr: 2.7458e-05 eta: 0:00:23 time: 0.3927 data_time: 0.0868 memory: 1422 loss: 0.8335 loss_cls: 0.5406 loss_bbox: 0.2929\n",
+ "04/17 10:31:10 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [17][10/16] lr: 2.4087e-05 eta: 0:00:21 time: 0.4168 data_time: 0.0975 memory: 1422 loss: 0.8255 loss_cls: 0.5369 loss_bbox: 0.2886\n",
+ "04/17 10:31:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [17][15/16] lr: 2.0888e-05 eta: 0:00:19 time: 0.4215 data_time: 0.0995 memory: 1422 loss: 0.7952 loss_cls: 0.5153 loss_bbox: 0.2799\n",
+ "04/17 10:31:12 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.670\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.769\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.736\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.262\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.811\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.220\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.702\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.796\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.667\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.883\n",
+ "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.670 0.769 0.736 0.000 0.262 0.811\n",
+ "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [17][3/3] coco/bbox_mAP: 0.6700 coco/bbox_mAP_50: 0.7690 coco/bbox_mAP_75: 0.7360 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2620 coco/bbox_mAP_l: 0.8110 data_time: 0.1274 time: 0.1807\n",
+ "04/17 10:31:13 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The previous best checkpoint /content/mmdetection/work_dirs/rtmdet_tiny_1xb4-20e_balloon/best_coco_bbox_mAP_epoch_16.pth is removed\n",
+ "04/17 10:31:14 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - The best checkpoint with 0.6700 coco/bbox_mAP at 17 epoch is saved to best_coco_bbox_mAP_epoch_17.pth.\n",
+ "04/17 10:31:17 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [18][ 5/16] lr: 1.7321e-05 eta: 0:00:17 time: 0.4258 data_time: 0.0986 memory: 1422 loss: 0.8050 loss_cls: 0.5228 loss_bbox: 0.2821\n",
+ "04/17 10:31:18 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [18][10/16] lr: 1.4608e-05 eta: 0:00:15 time: 0.3996 data_time: 0.0886 memory: 1422 loss: 0.8288 loss_cls: 0.5427 loss_bbox: 0.2861\n",
+ "04/17 10:31:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [18][15/16] lr: 1.2158e-05 eta: 0:00:13 time: 0.3710 data_time: 0.0774 memory: 1422 loss: 0.8460 loss_cls: 0.5555 loss_bbox: 0.2906\n",
+ "04/17 10:31:19 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:31:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.657\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.755\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.720\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.243\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.802\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.222\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.696\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.788\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.658\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.875\n",
+ "04/17 10:31:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.657 0.755 0.720 0.000 0.243 0.802\n",
+ "04/17 10:31:20 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [18][3/3] coco/bbox_mAP: 0.6570 coco/bbox_mAP_50: 0.7550 coco/bbox_mAP_75: 0.7200 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2430 coco/bbox_mAP_l: 0.8020 data_time: 0.1262 time: 0.1788\n",
+ "04/17 10:31:23 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [19][ 5/16] lr: 9.5997e-06 eta: 0:00:10 time: 0.3893 data_time: 0.0942 memory: 1422 loss: 0.8529 loss_cls: 0.5586 loss_bbox: 0.2943\n",
+ "04/17 10:31:25 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [19][10/16] lr: 7.8096e-06 eta: 0:00:08 time: 0.3976 data_time: 0.0917 memory: 1422 loss: 0.8404 loss_cls: 0.5487 loss_bbox: 0.2917\n",
+ "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [19][15/16] lr: 6.3487e-06 eta: 0:00:06 time: 0.4112 data_time: 0.0973 memory: 1422 loss: 0.8332 loss_cls: 0.5454 loss_bbox: 0.2878\n",
+ "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.02s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.648\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.758\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.714\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.278\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.786\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.220\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.682\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.788\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.692\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.864\n",
+ "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.648 0.758 0.714 0.000 0.278 0.786\n",
+ "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [19][3/3] coco/bbox_mAP: 0.6480 coco/bbox_mAP_50: 0.7580 coco/bbox_mAP_75: 0.7140 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2780 coco/bbox_mAP_l: 0.7860 data_time: 0.1265 time: 0.1790\n",
+ "04/17 10:31:28 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Switch pipeline now!\n",
+ "04/17 10:31:30 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [20][ 5/16] lr: 5.0499e-06 eta: 0:00:04 time: 0.3946 data_time: 0.0911 memory: 1422 loss: 0.8398 loss_cls: 0.5569 loss_bbox: 0.2829\n",
+ "04/17 10:31:31 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [20][10/16] lr: 4.3584e-06 eta: 0:00:02 time: 0.3541 data_time: 0.0729 memory: 1422 loss: 0.8475 loss_cls: 0.5686 loss_bbox: 0.2789\n",
+ "04/17 10:31:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(train) [20][15/16] lr: 4.0293e-06 eta: 0:00:00 time: 0.3273 data_time: 0.0671 memory: 1422 loss: 0.8943 loss_cls: 0.6161 loss_bbox: 0.2783\n",
+ "04/17 10:31:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Exp name: rtmdet_tiny_1xb4-20e_balloon_20230417_102835\n",
+ "04/17 10:31:32 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Saving checkpoint at 20 epochs\n",
+ "04/17 10:31:34 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Evaluating bbox...\n",
+ "Loading and preparing results...\n",
+ "DONE (t=0.00s)\n",
+ "creating index...\n",
+ "index created!\n",
+ "Running per image evaluation...\n",
+ "Evaluate annotation type *bbox*\n",
+ "DONE (t=0.11s).\n",
+ "Accumulating evaluation results...\n",
+ "DONE (t=0.01s).\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.652\n",
+ " Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.794\n",
+ " Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.750\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.241\n",
+ " Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.785\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.222\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.706\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.782\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.675\n",
+ " Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.861\n",
+ "04/17 10:31:34 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - bbox_mAP_copypaste: 0.652 0.794 0.750 0.000 0.241 0.785\n",
+ "04/17 10:31:34 - mmengine - \u001b[4m\u001b[97mINFO\u001b[0m - Epoch(val) [20][3/3] coco/bbox_mAP: 0.6520 coco/bbox_mAP_50: 0.7940 coco/bbox_mAP_75: 0.7500 coco/bbox_mAP_s: 0.0000 coco/bbox_mAP_m: 0.2410 coco/bbox_mAP_l: 0.7850 data_time: 0.1265 time: 0.1808\n"
]
}
],
"source": [
- "from mmdet.datasets import build_dataset\n",
- "from mmdet.models import build_detector\n",
- "from mmdet.apis import train_detector\n",
- "\n",
- "\n",
- "# Build dataset\n",
- "datasets = [build_dataset(cfg.data.train)]\n",
- "\n",
- "# Build the detector\n",
- "model = build_detector(cfg.model)\n",
- "# Add an attribute for visualization convenience\n",
- "model.CLASSES = datasets[0].CLASSES\n",
- "\n",
- "# Create work_dir\n",
- "mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir))\n",
- "train_detector(model, datasets, cfg, distributed=False, validate=True)"
+ "!python tools/train.py configs/rtmdet/rtmdet_tiny_1xb4-20e_balloon.py"
]
},
{
@@ -1706,14 +2448,14 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": 12,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 821,
"resources": {
"https://localhost:6006/?tensorboardColab=true": {
- "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+CjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFNUUFBQURFQ0FZQUFBREFwbzVyQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUJhYmdBQVdtNEJ4V3NqT0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFCbDBTVVJCVkhpYzdaMTVlRlRWM2NjL3Y1c0ZDVlJ4cVZ0cHRWVzJWbHhmNjFxdGlxMEw5R2w5TlhVQkZFcEZSVEloaEJBRENUZEFNQUVrQ1lzSzdxQjkra0Q3MnFmQldpdnFXN1ZhNjc0aXJlOXJheFgxYlpWV1pUSEwvTjQvNWc0R1NHRHV6TDF6NzUwNW4zODR6TXc1NTh2TS9YSzIzemtIRElHaml6aFBGM0ZlMERvTUlFRUx5R2QwUG9Pd2FBQXVjVjVhaDBXNVZQQjZrTHJ5R1dPSUFGQ2IvdlNqRXFnRyt1endLd2dkd0MxMFVDZlYvRHNZaGZtTE1VUVdVUnVMRWtZRDh4RU8ydjdHam9ad1BzeEhXTXhoSUV1bGxLNXM2c3huakNHeWhDN2dKSlJXNENTZ1p4UDBuSDRKaTVpVTg3amZHZzNHRUw2alRRd0U1Z0dqa1c3ZmQrcUdTTEtXSXNwa01tLzdJTlBnWUF6aEUycFRRaCtxc0tnQytnTHVUYkJyZWl1d21IWWFaRHFmZWlyWUFCaERlSTRxUWlNWEF3c1FEdlBBQkQybE55TFVzNG5ieFNhZXVXcERFbU1JRDlFYk9RRm9SVGh0KzR2K0dDTDU1N05BdWNSNEtpM0JobDB3aHZBQWJlQVFMR3hnQW1ENWFvTHU2Y1NmaXZBTGxFcUo4WTVMNllhZE1JYklBTFVwcG9ockVXWWo3TDM5amV3YUlwbmVqTEtRdldtVWNXeEw2UjlnMkFWamlEVFJ1WXpDb2dYNEJwQTlFM1JQOS96KzM0R1pVc2JLWHFRYmRvTXhoRXUwZ2FNUm1sSE85dkFCLzZPVE90a0RReVRTeWlNbzVSTGp0WjcrSFlhZXNZSVdFQlhVWmorZFN5dndQTXJaSGhXN0VXRWluM0VhVXprVm9SVDRteWNsQytkZzhiSXVaYVhld29HZWxKa0htQlppRDZoTklVV01SMmtBRHZDb1ZkaUtzSmo0cnVzSnVwd1NQcU1LcUVLYzlZdmV5a205emsxQUV3ZlNMS1cwWStnVlk0amRvUFdjZzBVTHdsSGJYOHpjRUdzUnltVGE3bGVjdFltQkZEa3IzT3l3eHAyT0laTHBEUWhUNVRvZTJGM2QrWXd4UkEvb0hBWkJ0N0JzYjFxRkZ5bWdYQ3JkeFNUcElzNEVXaENPM2FYTTlMV3NvNENZWE1NYmJyVGtBOFlRM1ZDYi9naVZ5RTVoMlprWjRpT0VPUnllZnRTcTJsZ01ZRFRLZk9BZ2ozUjFvTnhDSVhVeTBZU1pKekdHd0huZ0xPZUI2eWtzTzcwSEwvSEFpWGY3R25RWi9XbnZ3YkRwYXdTY01QUDlUSmc1R0VPZ3MxTUl5M2Ivc0swalRreHEvT21TYUN1RFVCcVE3VHZ0dk9qV3ZZaFFMdGZrZDVoNTNocENiUmRoMmFrL1ZCdFFLcVNHMzNncXRoZTBsWE9BRnVBb0Q5ZEUxbEpBbWZ3MFA4UE04ODRRYWxNQ3pyUm1xbUhaZTM2UU5pRTA4VG5OWW1kM1dsTnRDdG1YOFlnekxkeTdSamZwUkpoNUVRM3lrL3dLTTg4YlF5Z0lkVnlNeFFMVVpWaDI3Kzkzb3R5Sk1GTnErSWZYbXQyZ2k5aVBRbVlCMXlFVWJuOGpNM084aDFMRFJGYUpvSjRLRGlsNVlRaXQ1UVFrZzdEc25sOTdGSXR5cWVaVlQ4Vm1pQzVoS0VvejRoeHI0MDFYNmxtVW1GekQweDVLRFNVNWJRaXQ0UkNLc05FTXc3SjNmTzB0bEJxWnlScVA1WHFLTG1ZVVFndmlCQjlDcHVaUTRGNDZxSkpKZk9DcDJCQ1JrNFpRbTJJNlBRekxUdnlaQ0svZWh4dWxqTTg5bHV3TGFsUE0vczczQUh0NzFGcHNSbGhJWVc2R21lZWNJWFNHNTJIWmNZVDdFS2JKREQ3MFZtMTIwT1VjUWdjMjRyU1U0TVgzOGhaQ2pVd0lkMHZwbHB3eGhON0FVQXBvQnM3emNBcnlHWlNZMVBHTWgxSURRMjkydHJncXAzbjJIVms4U3B3cDhsTmU4VkJxWUVUZUVHcXpIeDNNUXJnT25ObVZ6SC9zZDRFWjFPYmU3SW9xd2kzT0lRaHdHT0RGOTlXSk9MTnQ0NE9kYmN1VXlCcENiUXJwWUR4NEdwYTlCVmpBbDJpU0NyWjZLRGQwNkhKSzZLUUtTU0hNUE5XMHhTYmlOTEYzZE1QTUkya0lyWEZXYUwwTHkxYmdGeFF3VFdaNnRFRW5JdWppRk1MTTNhWVRZZVlWTWk0N0svWmVFaWxENkV3R0VmYzhMUHM1TE1xbGpqOTRwelI2Nk0yYzZVeEc3QnBtN2piOXhXdnJLS1JNeHJMZU82WCtFZ2xEcU8xRWVTclZDSDIydjVHWklUWUM5V0FPKzBxaU5oWUhPNGN4ZHc4emgweldiUkpSdngzUkNETVB0U0hVeG1Jcm83R2NId2k4YUJYYWdWc3BZYVk1RHJKbmRCbjlzYWpFY3NMTUlSTkRKRW1FbWZjTmQ1aDVhQTJoTjNRTHkvWnVHblV0UWt4cy90ZERxVG1MM3NvZ3hPbWlabTZJWlBvRmxISVp4eE5lYXZXSzBCbENxeGlJMVcyUUIxNjBDaStobE1zY2Z1K3AyRHhCVnpEQ2lZOUtUR0prWm9oa2VpMXhKc3M0L3VxbDFrd0pqU0hVcG9RdHpqUWc5UFdvVlVoczMxelBVbGtUM21ZNkNxaE5JVjl4VGg4Uko4d2NNakVFSkthNWw5Q1h1VkxLWjk0cVRvL0FEYUVnVE9OaXhGa29jditsOXBST1hFdlZUcDAwaFg4Z0Z5WDBkdlpEbVFWTUFnb3lORVF5L1I1Q0RhT0RYd2dOMUJBNmxST3dlZ25MVHQ4UTZ4REtaWTY1dU5CUDlEYUdBWXVRYnJlblp2N2IvUW1MbUl6ZWZwSmgxZ25FRUZydWhHWHY3clJzOTEvcUJ1Sk1sWG5tektGc29yY3pDcHhnU205YWQwV2NNUE54MlE4eno2b2huTzdSTkpSYWhQNDlxbkQvcFg0TTFGUEV6V0xUNmExaVF5cm9YZXhGbkFyZ0JxQy9SK08vVDdDWVF4R0xzeGtHa3ZVV1FpczR6amtONzR3ZVZhUnVpRVJZZGhHVll2Ti9mbWcxdUVPWGN3aUZQb1daWDVHZE1QUEF4aEJheVNpRVZ1RHJyZzJoUElvd1JlYmxSc2h4cnFGM2N3SmR6dGpRdXpXa1IxSEtaYlMvVzNhREhWVGJGTE9aYXhIbUFGL2FRVkhQWDh4YldOUklRMjV0U3NsRlZCSHU5aUhNSE82a2lKbFM2aytZZWVEVHJnQmF4YUhBTEdBQzBtTlRtOWkyV0V5ajJMbTNiVEdYMGVXVVVKemlhZWFwcHplaDFITW95K1FzYjhlTm9UQkVFcTNpUDV4dTFLbU9zc1RHOWk2cVpFSHVibXpQQi9RMkJsTE1QTlRETUhONEU0c0t1WlFIdmRJWktrT0FNeE0xblRFSUYyTmh5enhlQ0ZxVHdUdjBMcjdyaEprZnMvM0Z6TTF4UDNFcTVZck1ZOVJDWndoRDdxTTJGb2M3WWVhU1FaajVqdWtPTEc2aGcxb1p6U2ZwYWpPR01BU0dycVkvVzd1ZFpnNlp0eGJDK3lnMkZuZWtFMlp1REdFSUhMMlBRWFNsRVdhK3V6UThqMFc1bFBLa0d5M0dFSWJRb1Bkd1BzSWloS0ZBcG9hQXhLWDJFK1RIM0ptcUJ0ZTNrR281RTdTY0g3ck5aekRzQ2JtU0I5bkswY0JFNEo5ZUZBa2M2aWFEKzJ0NWxTTlI3dGNZNi9SNng4a0dnMGZJUkRwa0RDdm93eEJnTVdSM0gwczZoaWh5VXVkUXdDc2FvMVd2Nnhhb1p6QjRnSlR5c1l3bVJwemh3Ryt6VmE5N1ExamJEUUZRQkpSUnhIcU5NZFl6VlFhRGc0eGx2WXptZklRZmdQOTc0VE5wSWJvekVMaEh5M2pZZEtNTWZpQ1gwMFlSdzRCeVNIK2RZVSs0TndROUdpS0JNSUlDWHRZcE5Lck5YdW5MTWhoMlJVcHBseXRvUlJnRy9weWw1YTBoRWhTalRPZGZ2SzR4UnFZanltRFlIWElaRzhHZnZkZCtHQ0xKTnhEYWRBcHRXc25YMDZqSFlNZzZYbzBoZHNkSXVuaGRLN0JOTjhvUWRqS2RaVXFWdmlpeitJVFh0SklMMDhodk1HU0ZiTFFRM1RtQ09HdTFnall0NS9BTXlqRVlmTUhQTWNUdUdFa0JiMmlsNlVZWndrVlFob0JrTitwVFh0VnBYT0JSbVFaRFJnUnBpQ1JIb2p5Z1UyblRhdE9OTWdSTHRzY1F2U09NcEpQWHRRcGJKM2U3Rk1WZ3lDTHVEU0UrR1NKQkNjb3MrdkNhVHV0MlpxakJrQ1hDMEdYYUZlRkk0RUd0b2sybk9tZjZHQXhaSUp5RytJTEViSlRwUmhteVJOZ05BVkFDektLRVYzVTYzODl5M1lZOEl3cUdTRElJK0sxVzA2YlQrVnBBR2d3NVRwUU1rVUFaaWJCZXE3SFZwamhRTFlhY0kzcUdTSkRvUm0zalZhM21lMEdMTWVRT1VUVkVrc0VJRCtrTnRPa012aHEwR0VQMGlib2hrb3drem5xdE1kMG9RMmJraWlFQStnR3phT2NWcmVIY29NVVlvb2tyUTJqaTRLZENuN1I0eFJEZ2R6ckRkS01NN25IWFFsd2Rlak4wWnlTd1htZWFibFJlRTNkM0dJSGJMbE5ZdTB1OTBROWxGbDI4ckRNWkViUVlRMWJaakZMUE5oYTV5ZVRPRVB0R3poQUpsS0hBNzNRbUs3V0dnNEtXWS9BVkJWYlJ3U0M1REZ2R3VidUN6WjBoT2lOcWlBUUNqS0dBRFRxVG1OcVI2djRaVWtINUV4YW55YVdNbFRHOG4wNFI3Z3pSRldsREpOa0hvWVV1bnROYVRndGFqTUVUM2tXNGtrczVXVXA1T3BPQzNCbkNyODFCd1hBTXdoTmFaN3BSa1VYWkF0UlR3R0M1bEpVaW1SOWU1czRROFp3eUJDUzdVWVc4cVhYRTlCSUtnaFprU0JGaEZVVU1sc3V3cFpTdDNoWHJBcjJlb1JTdzNsV3AwVXEvaERCSmJKN0NrSmU0YXlHS2NxNkYySmxqZ1NmVlpxWGFIQmkwR0VQMnllY3hSTStvMDQyQ0RWcFBURmViYmxRK1lRelJPd05RV2xqUHN6cWJVNElXWThnT3ViNVM3UVhIb2Z4QjYxbXA4L2h5MEdJTS9tSmFpTlJJZEtNNjJhQnpURGNxbDNGbkNNbjdJTGw5VVZyWXdKOTBMaWNITGNiZ1BhYkxsQTdLOFNoUDZSelRqY28xVEpjcGZSTGRxQzdUamNvbFRBdVJPZnNpdFBBWG50SFpuQlMwR0VObXVETkVlcmNINVFmS0NWZzhwWE5acVRZSEJDM0hrQjZtaGZBV0MyRU1SV3pRQm1KcXA3Vm5QVlJvTXdPQzFwQUp1cHFEM1h6ZTdRKzI1ejBFcnFLamNwYjlnQmFLZVZJYk9TWm9NZW1nU3poVWw3S2NZdVlFclNVZGRCVkQ5R2M4UUFkVDNlUnpPNmgyTisxcXpIRUtTbG5RSXR5Z05zVzZoQmdXYnlKY1RYb25zd1NHM3NlK2VoK05XTHdDN20rbWNyZHJUQ2xLK3lIZk1kOW00REdnalM2ZW9JakgwQnpka3hDblBXZ0pxYUxMR0lYU0N0RzdWMXh0TEk1Z05MQUEwZy9NZEx1Tk1wTXh4TnNvRHdOcjJZZUh4UDdpUWRGS0tvRDdNaWc3dkFnZFFVdllFN3FNWTRuVGduSm0wRnJTUWUvakxPSzBJQnlkYVZudURHRlI1R0pQVWhlSi9RVnJFZHJrSnA3djdZT3lrSjlwSlpkRER0NWhMZUZ0SVhRcCt3TjF4SmtFMFZ0SDBaVjhEWXU1S0dPODZwNjc3ekx0bnMySTB4VXE1TmV5Z0E5Y0tMbWVMcjVMNGdTKzNFSEQxMExvY29wbzV6cmkxQ1BzRTdRZXQraEsraUZNQTZhajdPWGxXTldMTHRQYkNBOGp1M2FGM0NDTi9GV3JhRUNabDNnaG5WSkNTTWdNb1lzWndlZTBBTjhLV290YlZCSHVaUXhLRTdpYlRrMlZkQXp4UlZjb1Rwc3M3cjByNUpvU0ZyQ1pVaEk3MTNJREt4eUcwS1VNcG90RktCZEc4VDhidllzVFdVVXIrTHMzeFowaHVyaWJJdVpMTXgvN0lVWnNPcldTNnhDZXBQdDBYMi83b0tOQm9HTUliV1lBUWpWZFRJSG9SU3ZyUFh3RnVCRVlUUlorZlZlR2tLVzg2WmVRN1hVczVHbWR4bkxnV3Ivcnlnb0JkWm5VeG1KQTV0T1FRYUdyNmN0V3lvQVp3SmV5Vlc4NEYxMjJVWTN3M2g0L0Y0WFdJb0JaSnIySnM5aUhGNEI3aUtJWjdtSVVXM2dEcFpFc21nRkNhZ2had2lkQWhidE0vbWpKbUN5MkVIb1RYOVZtVm1MeEtFUXZaRVR2NUhpOWk4Y1JmZzBjSG9TRzBKNXZLazJzMW1tTVJoamxQck1QZ3RJbEM0YlFCZlREWWhyQ2RHQXZ2K3Z6R3IySC9lbWlEZ2wrUFNTMGhnREE0bnFVczREK2FaY1J2RGw4NnpLcElpemlZb1NGRUwycmluVTVSUlJ6SFYzaFdROEpaWmNwaVRUeERrSzlkd1Y2VmxMcStEVHRxZ3M1a1VVOENhd21pbWE0a3hFVThSSktDNFREREpCbFE2aE5vYnA5TFB2U0Fyem91WmpzbUdNVHlxdGVGcWhOSEtvTFdZN3dSK0JVTDh2T0Jub0hRL1IySG5EaTJyNFp0SjZkOGQwUU9waytPb1VSV2tFcm4vQXVVN2pLVFg2eDZVUzVtc1NDb0QvNFlRN2xBeXpPa2hyZThLekloVnhFQVgrRzZJVmxBK2p0akFkZVE5eUhaV2NMWDc1VW5VSmZuY0lvbmNKS0N2a1FlQmdvQXc1Q2FOWXFCcm9wVCtiekhIQ3pIMXAzcmN5VFV0Nm1nTzlJTlM5N1V0b1hIRU8wWTcyR0VmSnhxMmZpdEp3QktPY2lqRUw1RWRDL2w0ZHJIN3E0QlZ6T0hpa3pFSDRFN3N5VUVlbVo0elVLK2I1TVo2UEhhZ3haSUtNV1FpZXh2OFlZcXpIYVVENGtNY0FidzU1bmhVWnFCVDkyVTVmTTUxTWs5THZQSHFlQTA0MFpvb3RyUStoa0Jtb1pWMnVNTmdwNW44UnE2RWpjeHNrSVM3WFMzU3FxTkhJL3lxOWMxZU1WZTI0dDFsTENlVkxOdjdPZ3h1QVQ3aTV1TCtjaUxONUJXRTdDQkpuc29EdUFPTTJ1Y3ltVElPQ0hibWR6S1BmeVpTNlNDdTl1c2pFRWc5c3J0ZnJoNVp5TWNMbE81WWV1c3N4bkk4b3N6elJraXNVU3VyaFNKb1lqek51UUdjRlAzUWszYXpYN3VzclRseVhBSC8wUmxESUsxTXNNeXNRbUhyQVdnMGNFYndnNGhFNmEzR1FRbXpnV0V5R3cvNVc3VUs2Uld1eUE2amY0UkJnTUFUQkJwL0U5Tnhsa0hxOEFTM3pTc3p2YUVTNlRPbFlFVUxmQlo4SmlDQ0hPY3JWZEJ2SDFvUlo0Mng5SlBiSVpZWlRNWkUwVzZ6UmtrYkFZQW9URDJjeGNWMWxzdGpnaHc5bmdZeXhHU0MyL3kxSjloZ0FJanlFU1ROYnBuTzRtZzh6alFlQVhQdWxKOGc3Q3FUSXo4SUc4d1dmQ1pnaUxPTGVyN1hLVFN5ZVRnWC81STRuMUZIQzYxTExCcC9JTklTSnNoZ0FZd21acTNXUndEa1NiNllPVzV5amlUSm5KMzlNdFFCczR5a3RCQm44Sm95RUFxclNhRTF6bEtPWVc0Q2tQTlR6R1hwd3ROZndqM1FMMFJxWWpWSHFveWVBellUVkVJWEh1MEt0VER3MFJtemdGWElNM2F4Ty9BaTZRNlh5YWJnSGF3R3puMUFoRGhBaXJJUUNPWVFCVmJqTElIRjVGMG9pUDJwRzdnVXZFWmxzNm1WVVJiYUFGY2RmdE00U0RNQnNDb0ZhbnV6eURkQXMyOEQ5cDFTWTBpYzA0c2VsTUo3dXVwb0I1M0E3RTBxcmZFRGhoTjBRZjRBNjlKUFdqU2FTWnJVNUViT29JaWxJcE50VnVCU2JSMVJUd1orNEN4cWRiaGlGNHdtNElVRTdpNjB4MmswWG04UkRDejFQOGVCY3dRV1p6azN0eENkU21tRCt6Qm1GTXVtVVl3a0g0RFFFZ05HZzFSN3JLRTZjYzJMU0hUMzFPWXJ4d1o3clMxS2FFUXRxQUg2VmJoaUU4Uk1NUVVJSnltNXNqYkdRZUg4SnV1MEQvd21LRXpPYitkRVhwQXZvNVpuQVZtR2dJTDFFeEJNQjNxZWFucm5JMGNCdndaQS92Skk2SXNYdDhMeVhVWmdEYldBZWNuVzRaaHZBUkpVT0Fza0JuOE5WVVB5NkpUVHdUU0hTTmtpU09pTEY1S1cwWk5nZFN3SDhESjZkYmhpR2NSTXNRc0RkZDNPb21nOHhsQTdEUStldnJ4UG1PMkx5VnJnQzFPWmdDSGlHQ3Ayc2I5a3pVREFGd2dWWnpoYXNjaGN4RnVac0NUcGVHRk82ZDZBV2R5MkZZUEFFbVBpbFhDZlVwYXJ1aFZXdFk1d3ljOTRpejZqd3Vrd3JWWmpCeDFrSHFYVFpEOUloaUN3R3dQOHJpYkZXbWN4aUd4V01ZTStROFVUVUVLS1Y2QXhmNVhvM044Y1I1SERqVTc3b013Uk5kUXlSWXBqYjcrVlc0enVaRWhJZUJBL3lxd3hBdW9tNklnOW1XZnNqRjd0RFpuSW55Q1Bobk9FUDRpTG9oUUxoS3F6blB5eUsxbnZPSjh5Qlp2Z0hURUR6Uk53U0FzRnlydkhsNDFlWUhLUGNEZmIwb3p4QXRjc01ROERVS3VUSFRRclNPeTRCZmtnZzdOK1FodVdJSWdHdDFCbWVrbTFsdHJrYTRsK2l1elJnOElKY01ZYUhjcGxQY2QzVzBqa25BcmVUVzkyRklnMXg3QUFaVDR1NEFZcTFqT3NKU05BUTNXaHNDSjljTUFjcFVyZVhFbEQ0Nmkzb3dKMlBrTUcrZy9OSk5CbmVHNk9KeEpQUm5teFlRNXc2MWU3L2lTMEYwRnEwb2Rka1Vac2dhbTRCcUNqbE9ScnM3ZnRUVkFGS1c4VGZnK3pxRkVjUnBBWmNuWW1TUDRiUnpBMUMvOHh0cVk5SEpDcFNmQktETDRDOXg0RDZLbUNxbDZSMHdsMWFYU1pwWngxYU9ReWtuNlB2ZWVrT28wVnFHZDM5Skw2R0FUdTVFakJseUR1RlJMSTZUS3hpYnJoa2dnekdFcktCREZ0TktKMGNBaTBtY1hoRW1pb2x6ajlxSlZsQnRpaG5LYW9Rcmd4Wm04SlMzRUVybENzNlJ5M2tsMDhJeUhsVExNajZTVm1JSXc0R0hNaTNQWTQ2amczS2RUQjg2V1FQK1I4Y2Fzc1ptb0o1T2hzc1YzbDFnNDlraWxMU3dIamhQWTF5Q01CODQzS3V5TTBLWXpUNWNCSndTdEJTREp5aHdMNTFVeVRnKzhMcHd6NmRkcFpVMURHQUlRam53aWRmbHAwRmZqQmx5aFdkUlRwT3hqUFhERE9EVE9vVFl0RXN6clJReERGZ0I1dHBhUTBhOGgzSWxZemhKcnVScFB5dnlkV0ZPNXJOUm1wa0luQVQ4d2MrNkREbkpWcUNKdmd5VnExZ3BndnBkWVZZQzJhU1o1eFMrUXdVWEF3dUF3N0pScnlIU3JFV1pMRmZ4MTJ4V21yWFFEUUdWUmF6aE03NkpVRS9DL1FiRHpyeUFjb1pjeFNnWmwxMHpRQUN4VExLQ0xiSVFtd0lHQTZ2QS8yYlFFQWsrQXNycHg3ZGxIRThFSlNLdzRENlp6N3R5RTJPQlV4QnozVzBlMHdFc3BwMGpaQnl0VWhyc0FtL2cwYTZ5a0dmb3gybk9DbkpLQjQ4WmNvWjF3TEV5bnBoTURFY0lVT0NHZ01TRmliS0FsU2hIT09PTHovZVl5UkJsTm1CeG9Zem5YQm5QRzBHTDZVNG9ESkZFRnJKWjVtTlR3RkdJZDh2eGh0RHdNY3BrL3M1Uk1vN2ZCQzJtSjBLNWYxZ2FlUXNvMVdyT2RzTE1oKzhwanlIOHlJVE1ENEx3bTFDMUVEc2pqVHhLQ2NjalRJVDBRM29OaGxRSnRTRUF4S1pUR2xtQk1BU2xDV2dQV3BNaGR3bTlJWkpJSTV0a1B0WEVPUnJDMmY4MFJKL0lHQ0tKekdlRE5ISWhjQzZFYTRiQ0VIMGlaNGdrMHNnNlB1SllKOHc4RkhQWWh1Z1RXVU9BczQxMUhxM0FFYzRGS21IYnhtcUlHSkUyUkJLNWtZL2tSbUxFT1JGNFBHZzlodWlTRTRaSUlvMjhLUE00RS9nQjhIYlFlZ3pSSTZjTWtVUWFhR01MMzBLcEJqNE5XbzhoT3VTa0lRQ2ttYTB5anlZS0dZcWFiYXlHMU1oWlF5UVJtNDNTd0VTVWt4Q2VDbHBQeFBndjR0c3Z2YzhMY3Q0UVNhU0I1NWpONlFpbHdEdEI2d2s1YndMbnl5VCtVeWJuMTFnc2J3d0J6amJXMmF5aGdHRWt6bjNkRnJTbWtQRXhTam4vWkxoTTRyZEJpd21DdkRKRUVySFpJck94c1JnRXJDSUxwem1FbkU1Z0JVVU1rY20waWsxbjBJS0NJaThOa1VSczNwWFpqS1dMczRDWGd0WVRDTW9qeERsT0pqTlJKdkxQb09VRVRWNGJJb25NNGZjSUorVFpOdGEvSUpSS0dTTWt4bXRCaXdrTHhoQU9ZaE1YbTVYQWtaRFQyMWcvUTZrSGhzdGtzeXR4WjR3aGRrSnNQaE1ibXdLR1EwNDlNSEZnRmNxUkVzT1dzcHcxZkVhRWNndHBHSkJhL2dLVWFqM25BTTFFZXh2ck15Z3hLZWVab0lXRUhkTkM3QUdaeFNNb3gwTWt0N0crQzF4SmpGT01HVkxER0NJRnhLWlQ2bGhCbktFa2Jrc0srN1RrRnFDZU9JT2xQRHVIQk9jS3hoQXVFSnVQcFk0WUJReEhlVEJvUFQyZ3dCcTYrS1pNd1pZS2MzNnVXOHdZSWcya2hqZUJDM1FPSTBpMEdNTUNsZ1RDODBCTXBwaHJCekxCdEJBWklMV3M0OHNjRS9CdHJPOGpUT1RmZk51WUlYT01JVEpFSnRJaHRiUmljUVNTMVcyczdjQmlpaGdxVTFnaHRnbHY5d0pqQ0krUUdqNlNHbUxBdDhIMzQ5elhZakZNcGhLVHNsRGM0NWN6bURHRXg4Z01YZ0RPMExtTXdxTFY0K0xmUkRoYnB2S1l4K1VhRFA2ak5pWGF5QmxCNnpDa3p2OERRZDdRck1iTFIxQUFBQUFBU1VWT1JLNUNZSUk9Ij4KCjxzdHlsZT4KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by91WUVDTUtvSGNPOXgxd2RtYnlISW0zLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vc1RkYUE2ajBQc2I5MjBWanYtbXJ6SC1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL19WWUZ4LXM4MjRrWHFfVWwyQkhxWUgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3RuajRTQjZETmJkYVFuc004Q0ZxQlgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL29NTWdmWk1RdGhPcnlRbzluMjJkY3V2dkRpbjFwSzhhS3RlTHBlWjVjMEEud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL0tzX2NWeGlDaXdVV1ZzRldGQTNCam4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vTko0dnhsZ1d3V2JFc3YxOGRBaHFubi1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9pc1otd2JDWE5LQWJuam82X1R3SFRvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by83N0ZYRmpSYkd6TjRhQ3JTRmhsaDNvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9qU04yQ0dWRGJjVnlDbmZKZmpTZGZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1VYNmk0SnhRRG0zZlZUYzFDUHV3cW9YMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vZC02SVlwbE9Gb2NDYWNLenh3WFNPSkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by85N3VhaHhpcVpSb25jQmFDRUkzYVc0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vUHdaYy1ZYklMNDE0d0I5ckIxSUFQWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQ19acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0N3dF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0MxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M2RThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09wWFVxVG8wVWdRUWhHal9TRmRMV0JrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9XeHJYSmEwQzNLZHRDN2xNYWZHNGRSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vY0RLaFJhWG5RVE9WYmFveHdkT3I5eGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vMWhaZjAyUE9BTmgzMmsyVmtnRW9VQmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlBjeW5TTDBxSHFfNmRYN2xLVkJ5WFloamJTcHZjNDdlZTZ4Ul84MEhudy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdlN6dWxmS1NLMExMampmZWF4Y1JFaGtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9LMjNjeFdWVHJJRkQ2REpzRVZpMDdSa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vRmw0eTBRZE94eXlUSEVHTVhYOGtjWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8wZUM2ZmwwNmx1WEVZV3BCU0p2WENJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0kzUzF3c2dTZzlZQ3VyVjZQVWtUT1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by8tTDE0SmswNm02cFVIQi01bVhRUW5ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vSGdvMTNrLXRmU3BuMHFpMVNGZFVmWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1BydTMzcWpTaHBaU21HM3o2Vll3bllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL05ZRFdCZEQ0Z0lxMjZHNVhZYkhzRklYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0X1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0d3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0NkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29IaTMwa3dRV3ZwQ1dxQWh6SGNDU0lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9aTHFLZWVsWWJBVEc2MEVwWkJTRHk0WDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbXg5VWNrNnVCNjNWSUtGWW5FTVhyWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vckd2SGRKbnIybDc1cWIwWU5EOU55SVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vUnhaSmRuemVvM1I1elNleGdlOFVVWkJ3MXhVMXJLcHRKal8wamFuczkyMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vb09lRndaTmxyVGVmekxZbWxWVjFVSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9tYm1ocHJNSDY5Wmk2ZUVQQllWRmhZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVjRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBmWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFF0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBWQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwWWdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGFFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMGREaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMTRzWVlkSmc1ZFUycXpKRVZTdXRhMC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZX1pyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFkxQlcyNlF4cFNqLV9aS21feFQ0aFd3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTRncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTlEaU5zUjVhLTlPZV9JdnB1OFhXbFkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxeC1NMUkxdzVPTWlxblZGOHhCTGhVLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGendYYUFYdXA1bVpsZks2eFJMcmhzY28ud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6d242V3F4by14d3hpbERYUFU4Y2hWVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejFUN2FKTEs2bktwbjM2SU13VGNNTWMud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnpfNzlfWnVVeENpZ00yRGVzcFRuRmF3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6NGdkOU9FUFVDTjNBZFlXMGU4dGF0NC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6OGJJUVNZWm5XTGFXQzlRTkNwVEtfVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9Cjwvc3R5bGU+CgoKCjxzdHlsZT4ubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWJhZGdlLXNtYWxsIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6OXB4fS5tYXQtYmFkZ2UtbGFyZ2UgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZToyNHB4fS5tYXQtaDEsLm1hdC1oZWFkbGluZSwubWF0LXR5cG9ncmFwaHkgaDF7Zm9udDo0MDAgMjRweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDIsLm1hdC10aXRsZSwubWF0LXR5cG9ncmFwaHkgaDJ7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDMsLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0ye2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSwubWF0LWJvZHktMSwubWF0LXR5cG9ncmFwaHl7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5IHAsLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb257Zm9udDo0MDAgMTJweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1kaXNwbGF5LTQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS00e2ZvbnQ6MzAwIDExMnB4LzExMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wNWVtO21hcmdpbjowIDAgNTZweH0ubWF0LWRpc3BsYXktMywubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTN7Zm9udDo0MDAgNTZweC81NnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMmVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTJ7Zm9udDo0MDAgNDVweC80OHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzotMC4wMDVlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0xe2ZvbnQ6NDAwIDM0cHgvNDBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgNjRweH0ubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWJ1dHRvbi10b2dnbGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhcmQtaGVhZGVyIC5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjBweH0ubWF0LWNhcmQtc3VidGl0bGUsLm1hdC1jYXJkLWNvbnRlbnR7Zm9udC1zaXplOjE0cHh9Lm1hdC1jaGVja2JveHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jaGVja2JveC1sYXlvdXQgLm1hdC1jaGVja2JveC1sYWJlbHtsaW5lLWhlaWdodDoyNHB4fS5tYXQtY2hpcHtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29uLm1hdC1pY29uLC5tYXQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29ue2ZvbnQtc2l6ZToxOHB4fS5tYXQtdGFibGV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtaGVhZGVyLWNlbGx7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2VsbCwubWF0LWZvb3Rlci1jZWxse2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2FsZW5kYXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FsZW5kYXItYm9keXtmb250LXNpemU6MTNweH0ubWF0LWNhbGVuZGFyLWJvZHktbGFiZWwsLm1hdC1jYWxlbmRhci1wZXJpb2QtYnV0dG9ue2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlciB0aHtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo0MDB9Lm1hdC1kaWFsb2ctdGl0bGV7Zm9udDo1MDAgMjBweC8zMnB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo0MDB9Lm1hdC1leHBhbnNpb24tcGFuZWwtY29udGVudHtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGR7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTI1O2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29ue2ZvbnQtc2l6ZToxNTAlO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b257aGVpZ2h0OjEuNWVtO3dpZHRoOjEuNWVtfS5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntoZWlnaHQ6MS4xMjVlbTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNWVtIDA7Ym9yZGVyLXRvcDouODQzNzVlbSBzb2xpZCB0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDFweCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMnB4KTstbXMtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjNlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGV7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZSgwKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcmlwcGxlLWVsZW1lbnR7ZGlzcGxheTpub25lfS5jZGstdmlzdWFsbHktaGlkZGVue2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdXRsaW5lOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmV9LmNkay1vdmVybGF5LWNvbnRhaW5lciwuY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0uY2RrLW92ZXJsYXktY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktY29udGFpbmVyOmVtcHR5e2Rpc3BsYXk6bm9uZX0uY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMH0uY2RrLW92ZXJsYXktcGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czphdXRvO2JveC1zaXppbmc6Ym9yZGVyLWJveDt6LWluZGV4OjEwMDA7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6MTAwJX0uY2RrLW92ZXJsYXktYmFja2Ryb3B7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDoxMDAwO3BvaW50ZXItZXZlbnRzOmF1dG87LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AsLmNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTowfS5jZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94e3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxcHg7bWluLWhlaWdodDoxcHh9LmNkay1nbG9iYWwtc2Nyb2xsYmxvY2t7cG9zaXRpb246Zml4ZWQ7d2lkdGg6MTAwJTtvdmVyZmxvdy15OnNjcm9sbH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZ3twYWRkaW5nOjJweCAwICFpbXBvcnRhbnQ7Ym94LXNpemluZzpjb250ZW50LWJveCAhaW1wb3J0YW50O2hlaWdodDphdXRvICFpbXBvcnRhbnQ7b3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnR9dGV4dGFyZWEuY2RrLXRleHRhcmVhLWF1dG9zaXplLW1lYXN1cmluZy1maXJlZm94e3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OjAgIWltcG9ydGFudH1Aa2V5ZnJhbWVzIGNkay10ZXh0LWZpZWxkLWF1dG9maWxsLXN0YXJ0ey8qISovfUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5key8qISovfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6LXdlYmtpdC1hdXRvZmlsbHthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQgMHMgMW1zfS5jZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQ6bm90KDotd2Via2l0LWF1dG9maWxsKXthbmltYXRpb246Y2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIDBzIDFtc30ubWF0LWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3J7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEpfS5tYXQtb3B0aW9ue2NvbG9yOiMyMTIxMjF9Lm1hdC1vcHRpb246aG92ZXI6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKSwubWF0LW9wdGlvbjpmb2N1czpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KTtjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uLm1hdC1vcHRpb24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjU3YzAwfS5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Lm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtb3B0Z3JvdXAtZGlzYWJsZWQgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6IzYxNjE2MX0ubWF0LXBzZXVkby1jaGVja2JveDo6YWZ0ZXJ7Y29sb3I6I2ZmZn0ubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtjb2xvcjojYjBiMGIwfS5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHJpbWFyeSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXdhcm4gLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNDQzMzZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVkLC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZHtiYWNrZ3JvdW5kOiNiMGIwYjB9Lm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojMjEyMTIxfS5tYXQtYmFkZ2V7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1iYWRnZS1oaWRkZW4gLm1hdC1iYWRnZS1jb250ZW50e2Rpc3BsYXk6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7dHJhbnNmb3JtOnNjYWxlKDAuNik7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmV7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeXtjb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4sLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiMwMDB9Lm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntjb2xvcjojMjEyMTIxO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtZmFiLm1hdC1wcmltYXJ5LC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sLm1hdC1mYWIubWF0LXdhcm4sLm1hdC1taW5pLWZhYi5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtbWluaS1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1mbGF0LWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JveC1zaGFkb3c6bm9uZX0ubWF0LWJ1dHRvbi10b2dnbGV7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxO2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfVtkaXI9cnRsXSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzYxNjE2MX0ubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2NvbG9yOiMyMTIxMjF9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojZmZmfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6I2JkYmRiZH0ubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e2xpbmUtaGVpZ2h0OjQ4cHh9Lm1hdC1jYXJke2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtY2FyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC5tYXQtY2FyZC1mbGF0Om5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNhcmQtc3VidGl0bGV7Y29sb3I6IzYxNjE2MX0ubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6I2ZmZn0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojZmZmICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojYjBiMGIwfS5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3ggLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTA7Y29sb3I6IzIxMjEyMX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojMjEyMTIxO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpOmFjdGl2ZXtib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKSAubWF0LWNoaXAtcmVtb3ZlOmhvdmVye29wYWNpdHk6LjU0fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1kaXNhYmxlZHtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7YmFja2dyb3VuZDojMDAwfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtdGFibGV7YmFja2dyb3VuZDojZmZmfS5tYXQtdGFibGUgdGhlYWQsLm1hdC10YWJsZSB0Ym9keSwubWF0LXRhYmxlIHRmb290LG1hdC1oZWFkZXItcm93LG1hdC1yb3csbWF0LWZvb3Rlci1yb3csW21hdC1oZWFkZXItcm93XSxbbWF0LXJvd10sW21hdC1mb290ZXItcm93XSwubWF0LXRhYmxlLXN0aWNreXtiYWNrZ3JvdW5kOmluaGVyaXR9bWF0LXJvdyxtYXQtaGVhZGVyLXJvdyxtYXQtZm9vdGVyLXJvdyx0aC5tYXQtaGVhZGVyLWNlbGwsdGQubWF0LWNlbGwsdGQubWF0LWZvb3Rlci1jZWxse2JvcmRlci1ib3R0b20tY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaGVhZGVyLWNlbGx7Y29sb3I6IzYxNjE2MX0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtjb2xvcjojMjEyMTIxfS5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZSwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOnJnYmEoMCwwLDAsLjU0KX0ubWF0LWNhbGVuZGFyLXRhYmxlLWhlYWRlcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6Izc1NzU3NX0ubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDAsMCwwLC4yNCl9Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS10b2RheTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTgpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI0NSwgMTI0LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX0ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ1LDEyNCwwLC40KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2Y1N2MwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM3NTc1NzV9Lm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojZmZmfX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjojNjE2MTYxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVde2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye2hlaWdodDo0OHB4fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5tYXQtZXhwYW5kZWR7aGVpZ2h0OjY0cHh9Lm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtaGludHtjb2xvcjpyZ2JhKDk3LDk3LDk3LC42KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnQsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOiM2MTYxNjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC40MikgMCUsIHJnYmEoMCwgMCwgMCwgMC40MikgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjA0KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNDIpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtaW52YWxpZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2NvbG9yOnJnYmEoMCwwLDAsLjA2KX0ubWF0LWljb24ubWF0LXByaW1hcnl7Y29sb3I6I2Y1N2MwMH0ubWF0LWljb24ubWF0LWFjY2VudHtjb2xvcjojZmY5ODAwfS5tYXQtaWNvbi5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6IzYxNjE2MX0ubWF0LWlucHV0LWVsZW1lbnQ6ZGlzYWJsZWQsLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojNzU3NTc1fS5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjU3YzAwfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiMyMTIxMjF9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1saXN0LWl0ZW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1saXN0LW9wdGlvbjpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmhvdmVyLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzIxMjEyMX0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtbWVudS1zdWJtZW51LWljb24sLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdIC5tYXQtaWNvbi1uby1jb2xvcntjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLC5tYXQtbWVudS1zdWJtZW51LWljb257Y29sb3I6cmdiYSgwLDAsMCwuNTQpfS5tYXQtbWVudS1pdGVtOmhvdmVyOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksLm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQ6bm90KFtkaXNhYmxlZF0pe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtcGFnaW5hdG9ye2JhY2tncm91bmQ6I2ZmZn0ubWF0LXBhZ2luYXRvciwubWF0LXBhZ2luYXRvci1wYWdlLXNpemUgLm1hdC1zZWxlY3QtdHJpZ2dlcntjb2xvcjojNjE2MTYxfS5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpO2JvcmRlci1yaWdodDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtcGFnaW5hdG9yLWZpcnN0LC5tYXQtcGFnaW5hdG9yLWxhc3R7Ym9yZGVyLXRvcDoycHggc29saWQgcmdiYSgwLDAsMCwuNTQpfS5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcnttaW4taGVpZ2h0OjU2cHh9Lm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmZGRlYmZ9Lm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZkZGViZn0ubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZmZTViZn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmU1YmZ9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiNmY2QwY2R9Lm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZjZDBjZH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSwubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZjU3YzAwfS5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNmZjk4MDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSwubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fS5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojNjE2MTYxfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjU3YzAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnk6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmZjk4MDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2Y0NDMzNn0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2Fybi5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuOmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcmFkaW8tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiMyMTIxMjF9Lm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM3NTc1NzV9Lm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6IzYxNjE2MX0ubWF0LXNlbGVjdC1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1zZWxlY3QtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1wcmltYXJ5IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC1hY2NlbnQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1pbnZhbGlkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6Izc1NzU3NX0ubWF0LWRyYXdlci1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kcmF3ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1kcmF3ZXIubWF0LWRyYXdlci1wdXNoe2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LWRyYXdlcjpub3QoLm1hdC1kcmF3ZXItc2lkZSl7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1kcmF3ZXItc2lkZXtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKX0ubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9W2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLWJhY2tkcm9wLm1hdC1kcmF3ZXItc2hvd257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC42KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjU0KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjU0KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjU0KX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1jaGVja2VkKSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6IzAwMH0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0ubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LWFjY2VudCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjIpfS5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYiwubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCwubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjg3KX0ubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKSAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3ZlciAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuNyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC43KSwgcmdiYSgwLCAwLCAwLCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Lm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjojNjE2MTYxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zZWxlY3RlZCwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZXJyb3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWFjdGl2ZXtjb2xvcjojMjEyMTIxfS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLm1hdC1zdGVwLWxhYmVsLWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1zdGVwcGVyLWhvcml6b250YWwsLm1hdC1zdGVwcGVyLXZlcnRpY2Fse2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXN0ZXBwZXItdmVydGljYWwtbGluZTo6YmVmb3Jle2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZSwubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmFmdGVyLC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVye2hlaWdodDo3MnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyLC5tYXQtdmVydGljYWwtc3RlcHBlci1oZWFkZXJ7cGFkZGluZzoyNHB4IDI0cHh9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXt0b3A6LTE2cHg7Ym90dG9tOi0xNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YmVmb3Jle3RvcDozNnB4fS5tYXQtc3RlcHBlci1sYWJlbC1wb3NpdGlvbi1ib3R0b20gLm1hdC1zdGVwcGVyLWhvcml6b250YWwtbGluZXt0b3A6MzZweH0ubWF0LXNvcnQtaGVhZGVyLWFycm93e2NvbG9yOiM2MTYxNjF9Lm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpfS5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1uYXYtYmFyLC5tYXQtdGFiLWdyb3VwLWludmVydGVkLWhlYWRlciAubWF0LXRhYi1oZWFkZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1ib3R0b206bm9uZX0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2NvbG9yOiMyMTIxMjF9Lm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojMjEyMTIxfS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiM3NTc1NzV9Lm1hdC10YWItZ3JvdXBbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV0gLm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXJbY2xhc3MqPW1hdC1iYWNrZ3JvdW5kLV17Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6bm9uZX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMjQsMTc4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNjcsMzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIyNCwxNzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIwNSwyMTAsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluaywubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX0ubWF0LXRvb2xiYXJ7YmFja2dyb3VuZDojZjU3YzAwO2NvbG9yOiMyMTIxMjF9Lm1hdC10b29sYmFyLm1hdC1wcmltYXJ5e2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtYWNjZW50e2JhY2tncm91bmQ6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtdG9vbGJhci5tYXQtd2FybntiYWNrZ3JvdW5kOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSwubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtdmFsdWUsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LWFycm93LC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6aW5oZXJpdH0ubWF0LXRvb2xiYXIgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn0ubWF0LXRvb2xiYXItbXVsdGlwbGUtcm93c3ttaW4taGVpZ2h0OjY0cHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3toZWlnaHQ6NjRweH1AbWVkaWEobWF4LXdpZHRoOiA1OTlweCl7Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo1NnB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjU2cHh9fS5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfS5tYXQtdHJlZXtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC10cmVlLW5vZGUsLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiMyMTIxMjF9Lm1hdC10cmVlLW5vZGV7bWluLWhlaWdodDo0OHB4fS5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtiYWNrZ3JvdW5kOiMzMjMyMzI7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjojZmY5ODAwfWJvZHl7b3ZlcmZsb3c6aGlkZGVufS5jZGstb3ZlcmxheS1jb250YWluZXJ7Y29udGFpbjpzdHJpY3R9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbil7Y29sb3I6IzE5NzZkMn1hOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKTp2aXNpdGVke2NvbG9yOiM3YjFmYTJ9Ym9keS5kYXJrLW1vZGV7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiM0MmE1ZjV9Ym9keS5kYXJrLW1vZGUgYTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojYmE2OGM4fWJvZHkuZGFyay1tb2RlIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3h7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtYXBwLWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUubWF0LWFwcC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXowe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MXtib3gtc2hhZG93OjBweCAycHggMXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxcHggMXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggM3B4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoye2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejN7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NHtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16NXtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA1cHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Nntib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejd7Ym94LXNoYWRvdzowcHggNHB4IDVweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggN3B4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDJweCAxNnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo4e2JveC1zaGFkb3c6MHB4IDVweCA1cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTRweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OXtib3gtc2hhZG93OjBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA5cHggMTJweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEwe2JveC1zaGFkb3c6MHB4IDZweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEwcHggMTRweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDE4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejExe2JveC1zaGFkb3c6MHB4IDZweCA3cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDExcHggMTVweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNHB4IDIwcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEye2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejEze2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEzcHggMTlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE0e2JveC1zaGFkb3c6MHB4IDdweCA5cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE0cHggMjFweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDI2cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE1e2JveC1zaGFkb3c6MHB4IDhweCA5cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE1cHggMjJweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDI4cHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE2e2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxN3tib3gtc2hhZG93OjBweCA4cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTdweCAyNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzJweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTh7Ym94LXNoYWRvdzowcHggOXB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE4cHggMjhweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM0cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE5e2JveC1zaGFkb3c6MHB4IDlweCAxMnB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOXB4IDI5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMHtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIwcHggMzFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDM4cHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIxe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjFweCAzM3B4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDBweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjJ7Ym94LXNoYWRvdzowcHggMTBweCAxNHB4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMnB4IDM1cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MnB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyM3tib3gtc2hhZG93OjBweCAxMXB4IDE0cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIzcHggMzZweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejI0e2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXRoZW1lLWxvYWRlZC1tYXJrZXJ7ZGlzcGxheTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpe2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZWY2YzAwfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgYm9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1jb250ZW50e291dGxpbmU6c29saWQgMXB4O2JvcmRlci1yYWRpdXM6MH1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWFjY2VudCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS13YXJuIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJhZGdlLWRpc2FibGVkIC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiM2ZTZlNmU7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWJvdHRvbS1zaGVldC1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9ue2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDp0cmFuc3BhcmVudH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e29wYWNpdHk6LjE7YmFja2dyb3VuZC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDdweCA4cHggLTRweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDEycHggMTdweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNXB4IDIycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmR7Ym94LXNoYWRvdzpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxO2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyk7YmFja2dyb3VuZC1jb2xvcjojMDAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmR7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFya3tmaWxsOiMzMDMwMzB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2U6IzMwMzAzMCAhaW1wb3J0YW50fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQ6bm90KC5tYXQtY2hlY2tib3gtY2hlY2tlZCkgLm1hdC1jaGVja2JveC1mcmFtZXtib3JkZXItY29sb3I6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkIC5tYXQtY2hlY2tib3gtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQ6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwe2JhY2tncm91bmQtY29sb3I6IzYxNjE2MTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCk6YWN0aXZle2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOm5vdCgubWF0LWNoaXAtZGlzYWJsZWQpIC5tYXQtY2hpcC1yZW1vdmU6aG92ZXJ7b3BhY2l0eTouNTR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLWRpc2FibGVke29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwOjphZnRlcntiYWNrZ3JvdW5kOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1jaGlwLXJlbW92ZXtjb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LWFjY2VudCAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWJsZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0aGVhZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRib2R5LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGZvb3QsYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LXJvdyxib2R5LmRhcmstbW9kZSBtYXQtZm9vdGVyLXJvdyxib2R5LmRhcmstbW9kZSBbbWF0LWhlYWRlci1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtcm93XSxib2R5LmRhcmstbW9kZSBbbWF0LWZvb3Rlci1yb3ddLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUtc3RpY2t5e2JhY2tncm91bmQ6aW5oZXJpdH1ib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1oZWFkZXItcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIHRoLm1hdC1oZWFkZXItY2VsbCxib2R5LmRhcmstbW9kZSB0ZC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSB0ZC5tYXQtZm9vdGVyLWNlbGx7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1oZWFkZXItY2VsbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNlbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1mb290ZXItY2VsbHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYXJyb3d7ZmlsbDojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyLWRpdmlkZXI6OmFmdGVye2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjI0KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyMzksMTA4LDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC40KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC10b3VjaHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmV7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGUtcmFuZ2UtaW5wdXQtaW5uZXJbZGlzYWJsZWRde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaWFsb2ctY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRpdmlkZXJ7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1yb3d7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSxib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9QG1lZGlhKGhvdmVyOiBub25lKXtib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoLm1hdC1leHBhbmRlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDojNDI0MjQyfX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24taW5kaWNhdG9yOjphZnRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGUsYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaGludHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC1hY2NlbnQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb2N1c2VkOm5vdCgubWF0LWZvcm0tZmllbGQtaW52YWxpZCkubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbC5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1sYWJlbCAubWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2Vye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZXJyb3J7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50IG9wdGlvbntjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50IG9wdGlvbjpkaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWxpc3QtaXRlbS1kaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cyxib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbi1uby1jb2xvcixib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnR7Ym9yZGVyLXRvcDoycHggc29saWQgI2ZmZjtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWRlY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1pbmNyZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZmlyc3QsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6IzYwM2YyNH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6IzYxMzUzMn1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1maWxsOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGV7c3Ryb2tlOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC13YXJuIGNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXNwaW5uZXIubWF0LXdhcm4gY2lyY2xle3N0cm9rZTojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLWlubmVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1wcmltYXJ5OmFjdGl2ZSAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlKSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudDphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4gLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm4ubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtd2FybjphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8taW5uZXItY2lyY2xle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LXZhbHVle2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtcGFuZWx7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtcHJpbWFyeSAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtYWNjZW50IC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkLm1hdC13YXJuIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtaW52YWxpZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWRpc2FibGVkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItY29udGFpbmVye2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2Vye2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLm1hdC1kcmF3ZXItcHVzaHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXI6bm90KC5tYXQtZHJhd2VyLXNpZGUpe2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGV7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItc2lkZS5tYXQtZHJhd2VyLWVuZHtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1sZWZ0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLXJpZ2h0Om5vbmV9Ym9keS5kYXJrLW1vZGUgW2Rpcj1ydGxdIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1iYWNrZHJvcC5tYXQtZHJhd2VyLXNob3due2JhY2tncm91bmQtY29sb3I6cmdiYSgxODksMTg5LDE4OSwuNil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXByaW1hcnkubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC41NCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUubWF0LXdhcm4ubWF0LWNoZWNrZWQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGU6bm90KC5tYXQtY2hlY2tlZCkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWJ7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZS10b2dnbGUtYmFye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyk6aG92ZXIgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykuY2RrLWZvY3VzZWQubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KTtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC1hY2NlbnQgLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWRvbmUsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc2VsZWN0ZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtd2FybiAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZWRpdHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVycm9ye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7Y29sb3I6I2M2YzZjNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlcntib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAtaW52ZXJ0ZWQtaGVhZGVyIC5tYXQtdGFiLWhlYWRlcntib3JkZXItdG9wOjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4xMik7Ym9yZGVyLWJvdHRvbTpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cFtjbGFzcyo9bWF0LWJhY2tncm91bmQtXSAubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhcltjbGFzcyo9bWF0LWJhY2tncm91bmQtXXtib3JkZXItYm90dG9tOm5vbmU7Ym9yZGVyLXRvcDpub25lfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4ubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjUxLDE0MCwwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LXByaW1hcnl7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC1hY2NlbnR7YmFja2dyb3VuZDojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLm1hdC13YXJue2JhY2tncm91bmQ6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC12YWx1ZSxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1zZWxlY3QtYXJyb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjppbmhlcml0fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbHRpcHtiYWNrZ3JvdW5kOnJnYmEoOTcsOTcsOTcsLjkpfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10cmVlLW5vZGUsYm9keS5kYXJrLW1vZGUgLm1hdC1uZXN0ZWQtdHJlZS1ub2Rle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbmFjay1iYXItY29udGFpbmVye2NvbG9yOnJnYmEoMCwwLDAsLjg3KTtiYWNrZ3JvdW5kOiNmYWZhZmE7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbntjb2xvcjppbmhlcml0fQo8L3N0eWxlPgoKPHN0eWxlPgogIGh0bWwsCiAgYm9keSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZm9udC1mYW1pbHk6IFJvYm90bywgc2Fucy1zZXJpZjsKICAgIGNvbG9yOiB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpOwoKICAgIC8qIExlZ2FjeSBtZWNoYW5pc20gdG8gYXZvaWQgaXNzdWVzIHdpdGggc3VicGl4ZWwgYW50aS1hbGlhc2luZyBvbiBtYWNPUy4KICAgICAqCiAgICAgKiBJbiB0aGUgcGFzdCBbMV0sIG1hY09TIHN1YnBpeGVsIEFBIGNhdXNlZCBleGNlc3NpdmUgYm9sZGluZyBmb3IgbGlnaHQtb24tZGFyayB0ZXh0OyB0aGlzIHJ1bGUKICAgICAqIGF2b2lkcyB0aGF0IGJ5IHJlcXVlc3Rpbmcgbm9uLXN1YnBpeGVsIEFBIGFsd2F5cywgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgYmVoYXZpb3IsIHdoaWNoIGlzCiAgICAgKiB0byB1c2Ugc3VicGl4ZWwgQUEgd2hlbiBhdmFpbGFibGUuIFRoZSBvcmlnaW5hbCBpc3N1ZSB3YXMgImZpeGVkIiBieSByZW1vdmluZyBzdWJwaXhlbCBBQSBpbgogICAgICogbWFjT1MgMTQgKE1vamF2ZSksIGJ1dCBmb3IgbGVnYWN5IHJlYXNvbnMgdGhleSBwcmVzZXJ2ZWQgdGhlIGJvbGRpbmcgZWZmZWN0IGFzIGFuIG9wdGlvbi4KICAgICAqIENocm9tZSB0aGVuIGluIHR1cm4gdXBkYXRlZCBpdHMgZm9udCByZW5kZXJpbmcgdG8gYXBwbHkgdGhhdCBib2xkaW5nIGVmZmVjdCBbMl0sIHdoaWNoIG1lYW5zCiAgICAgKiB0aGF0IGV2ZW4gdGhvdWdoIHRoZSBgLXdlYmtpdC1mb250LXNtb290aGluZ2AgZG9jcyBbM10gc3VnZ2VzdCB0aGF0IHNldHRpbmcgYGFudGlhbGlhc2VkYAogICAgICogd291bGQgaGF2ZSBubyBlZmZlY3QgZm9yIHJlY2VudCB2ZXJzaW9ucyBvZiBtYWNPUywgaXQgc3RpbGwgaXMgbmVlZGVkIHRvIGF2b2lkIHRoZSBib2xkaW5nLgogICAgICoKICAgICAqIFsxXTogaHR0cDovL3d3dy5saWdodGVycmEuY29tL2FydGljbGVzL21hY29zeHRleHRhYWJ1Zy8KICAgICAqIFsyXTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODU4ODYxCiAgICAgKiBbM106IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mb250LXNtb290aAogICAgICoKICAgICAqLwoKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogIH0KICBub3NjcmlwdCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgbWF4LXdpZHRoOiA2MDBweDsKICAgIHBhZGRpbmc6IDEwcHg7CiAgfQo8L3N0eWxlPgoKPC9oZWFkPjxib2R5Pjxub3NjcmlwdD4KICAgIDxoMT5UZW5zb3JCb2FyZCByZXF1aXJlcyBKYXZhU2NyaXB0PC9oMT4KICAgIDxwPlBsZWFzZSBlbmFibGUgSmF2YVNjcmlwdCBhbmQgcmVsb2FkIHRoaXMgcGFnZS48L3A+CiAgPC9ub3NjcmlwdD48dGItd2ViYXBwPjwvdGItd2ViYXBwPjxzY3JpcHQgc3JjPSJpbmRleC5qcz9fZmlsZV9oYXNoPTI5YTdkMDNhIj48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==",
+ "data": "PCFkb2N0eXBlIGh0bWw+PG1ldGEgbmFtZT0idGItcmVsYXRpdmUtcm9vdCIgY29udGVudD0iLi8iPjwhZG9jdHlwZSBodG1sPjwhLS0KQGxpY2Vuc2UKQ29weXJpZ2h0IDIwMTkgVGhlIFRlbnNvckZsb3cgQXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwp5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQpkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLApXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZApsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiPgo8dGl0bGU+VGVuc29yQm9hcmQ8L3RpdGxlPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbm9uY2U9ImFmZGZlZWY2NDc1YTQxZjBhY2M4MjBhYzdiNCIgc3JjPSIvL2luamVjdGlvbnMuYWRndWFyZC5vcmc/dHM9MTY4MTcyNDU4ODU5NyZhbXA7dHlwZT1jb250ZW50LXNjcmlwdCZhbXA7ZG1uPWNvbGFiLnJlc2VhcmNoLmdvb2dsZS5jb20mYW1wO3B0aD0lMkZ0dW4lMkZtJTJGZ3B1LXQ0LXMtMzlzeTg5NTIyMnB4eSUyRl9wcm94eSUyRjYwMDYlMkYlM0Z0ZW5zb3Jib2FyZENvbGFiJTNEdHJ1ZSUyNmF1dGh1c2VyJTNEMCZhbXA7YXBwPWNocm9tZS5leGUmYW1wO2Nzcz0zJmFtcDtqcz0xJmFtcDtyZWw9MSZhbXA7cmppPTEmYW1wO3NiZT0xJmFtcDtzdGVhbHRoPTEmYW1wO3VhZz0iPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbm9uY2U9ImFmZGZlZWY2NDc1YTQxZjBhY2M4MjBhYzdiNCIgc3JjPSIvL2luamVjdGlvbnMuYWRndWFyZC5vcmc/dHM9MTY4MTcyNDU4ODU5NyZhbXA7bmFtZT1BZEd1YXJkJTIwQXNzaXN0YW50JmFtcDtuYW1lPUFkR3VhcmQlMjBFeHRyYSZhbXA7dHlwZT11c2VyLXNjcmlwdCI+PC9zY3JpcHQ+PGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQU1RQUFBREVDQVlBQUFEQXBvNXJBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQmFiZ0FBV200QnhXc2pPQUFBQUJsMFJWaDBVMjltZEhkaGNtVUFkM2QzTG1sdWEzTmpZWEJsTG05eVo1dnVQQm9BQUJsMFNVUkJWSGljN1oxNWVGVFYzY2MvdjVzRkNWUnhxVnRwdFZXMlZseGY2MXF0aXEwTDlHbDlOWFVCRkVwRlJUSWhoQkFEQ1RkQU1BRWtDWXNLN3FCOStrRDcycWZCV2l2cVc3VmE2NzRpcmU5cmF4WDFiWlZXWlRITC9ONC81ZzRHU0dEdXpMMXo3NTA1bjM4NHpNdzU1OHZNL1hLMjN6a0hESUdqaXpoUEYzRmUwRG9NSUVFTHlHZDBQb093YUFBdWNWNWFoMFc1VlBCNmtMcnlHV09JQUZDYi92U2pFcWdHK3V6d0t3Z2R3QzEwVUNmVi9Ec1loZm1MTVVRV1VSdUxFa1lEOHhFTzJ2N0dqb1p3UHN4SFdNeGhJRXVsbEs1czZzeG5qQ0d5aEM3Z0pKUlc0Q1NnWnhQMG5INEppNWlVODdqZkdnM0dFTDZqVFF3RTVnR2prVzdmZCtxR1NMS1dJc3BrTW0vN0lOUGdZQXpoRTJwVFFoK3FzS2dDK2dMdVRiQnJlaXV3bUhZYVpEcWZlaXJZQUJoRGVJNHFRaU1YQXdzUUR2UEFCRDJsTnlMVXM0bmJ4U2FldVdwREVtTUlEOUViT1FGb1JUaHQrNHYrR0NMNTU3TkF1Y1I0S2kzQmhsMHdodkFBYmVBUUxHeGdBbUQ1YW9MdTZjU2ZpdkFMbEVxSjhZNUw2WWFkTUliSUFMVXBwb2hyRVdZajdMMzlqZXdhSXBuZWpMS1F2V21VY1d4TDZSOWcyQVZqaURUUnVZekNvZ1g0QnBBOUUzUlA5L3orMzRHWlVzYktYcVFiZG9NeGhFdTBnYU1SbWxITzl2QUIvNk9UT3RrRFF5VFN5aU1vNVJManRaNytIWWFlc1lJV0VCWFVaaitkU3l2d1BNclpIaFc3RVdFaW4zRWFVemtWb1JUNG15Y2xDK2RnOGJJdVphWGV3b0dlbEprSG1CWmlENmhOSVVXTVIya0FEdkNvVmRpS3NKajRydXNKdXB3U1BxTUtxRUtjOVl2ZXlrbTl6azFBRXdmU0xLVzBZK2dWWTRqZG9QV2NnMFVMd2xIYlg4emNFR3NSeW1UYTdsZWN0WW1CRkRrcjNPeXd4cDJPSVpMcERRaFQ1VG9lMkYzZCtZd3hSQS9vSEFaQnQ3QnNiMXFGRnltZ1hDcmR4U1RwSXM0RVdoQ08zYVhNOUxXc280Q1lYTU1iYnJUa0E4WVEzVkNiL2dpVnlFNWgyWmtaNGlPRU9SeWVmdFNxMmxnTVlEVEtmT0FnajNSMW9OeENJWFV5MFlTWkp6R0d3SG5nTE9lQjZ5a3NPNzBITC9IQWlYZjdHblFaL1dudndiRHBhd1NjTVBQOVRKZzVHRU9nczFNSXkzYi9zSzBqVGt4cS9PbVNhQ3VEVUJxUTdUdnR2T2pXdlloUUx0ZmtkNWg1M2hwQ2JSZGgyYWsvVkJ0UUtxU0czM2dxdGhlMGxYT0FGdUFvRDlkRTFsSkFtZncwUDhQTTg4NFFhbE1DenJSbXFtSFplMzZRTmlFMDhUbk5ZbWQzV2xOdEN0bVg4WWd6TGR5N1JqZnBSSmg1RVEzeWsvd0tNODhiUXlnSWRWeU14UUxVWlZoMjcrOTNvdHlKTUZOcStJZlhtdDJnaTlpUFFtWUIxeUVVYm44ak0zTzhoMUxEUkZhSm9KNEtEaWw1WVFpdDVRUWtnN0Rzbmw5N0ZJdHlxZVpWVDhWbWlDNWhLRW96NGh4cjQwMVg2bG1VbUZ6RDB4NUtEU1U1YlFpdDRSQ0tzTkVNdzdKM2ZPMHRsQnFaeVJxUDVYcUtMbVlVUWd2aUJCOUNwdVpRNEY0NnFKSkpmT0NwMkJDUms0WlFtMkk2UFF6TFR2eVpDSy9laHh1bGpNODlsdXdMYWxQTS9zNzNBSHQ3MUZwc1JsaElZVzZHbWVlY0lYU0c1MkhaY1lUN0VLYkpERDcwVm0xMjBPVWNRZ2MyNHJTVTRNWDM4aFpDalV3SWQwdnBscHd4aE43QVVBcG9Cczd6Y0FyeUdaU1kxUEdNaDFJRFEyOTJ0cmdxcDNuMkhWazhTcHdwOGxOZThWQnFZRVRlRUdxekh4M01RcmdPbk5tVnpIL3NkNEVaMU9iZTdJb3F3aTNPSVFod0dPREY5OVdKT0xOdDQ0T2RiY3VVeUJwQ2JRcnBZRHg0R3BhOUJWakFsMmlTQ3JaNktEZDA2SEpLNktRS1NTSE1QTlcweFNiaU5MRjNkTVBNSTJrSXJYRldhTDBMeTFiZ0Z4UXdUV1o2dEVFbkl1amlGTUxNM2FZVFllWVZNaTQ3Sy9aZUVpbEQ2RXdHRWZjOExQczVMTXFsamo5NHB6UjY2TTJjNlV4RzdCcG03amI5eFd2cktLUk14ckxlTzZYK0VnbERxTzFFZVNyVkNIMjJ2NUdaSVRZQzlXQU8rMHFpTmhZSE80Y3hkdzh6aDB6V2JSSlJ2eDNSQ0RNUHRTSFV4bUlybzdHY0h3aThhQlhhZ1ZzcFlhWTVEckpuZEJuOXNhakVjc0xNSVJOREpFbUVtZmNOZDVoNWFBMmhOM1FMeS9adUduVXRRa3hzL3RkRHFUbUwzc29neE9taVptNklaUG9GbEhJWnh4TmVhdldLMEJsQ3F4aUkxVzJRQjE2MENpK2hsTXNjZnUrcDJEeEJWekRDaVk5S1RHSmtab2hrZWkxeEpzczQvdXFsMWt3SmpTSFVwb1F0empRZzlQV29WVWhzMzF6UFVsa1QzbVk2Q3FoTklWOXhUaDhSSjh3Y01qRUVKS2E1bDlDWHVWTEtaOTRxVG8vQURhRWdUT05peEZrb2N2K2w5cFJPWEV2VlRwMDBoWDhnRnlYMGR2WkRtUVZNQWdveU5FUXkvUjVDRGFPRFh3Z04xQkE2bFJPd2VnbkxUdDhRNnhES1pZNjV1TkJQOURhR0FZdVFicmVuWnY3Yi9RbUxtSXplZnBKaDFnbkVFRnJ1aEdYdjdyUnM5MS9xQnVKTWxYbm16S0Zzb3JjekNweGdTbTlhZDBXY01QTngyUTh6ejZvaG5PN1JOSlJhaFA0OXFuRC9wWDRNMUZQRXpXTFQ2YTFpUXlyb1hleEZuQXJnQnFDL1IrTy9UN0NZUXhHTHN4a0drdlVXUWlzNHpqa043NHdlVmFSdWlFUllkaEdWWXZOL2ZtZzF1RU9YY3dpRlBvV1pYNUdkTVBQQXhoQmF5U2lFVnVEcnJnMmhQSW93UmVibFJzaHhycUYzY3dKZHp0alF1eldrUjFIS1piUy9XM2FESFZUYkZMT1pheEhtQUYvYVFWSFBYOHhiV05SSVEyNXRTc2xGVkJIdTlpSE1ITzZraUpsUzZrK1llZURUcmdCYXhhSEFMR0FDMG1OVG05aTJXRXlqMkxtM2JUR1gwZVdVVUp6aWFlYXBwemVoMUhNb3krUXNiOGVOb1RCRUVxM2lQNXh1MUttT3NzVEc5aTZxWkVIdWJtelBCL1EyQmxMTVBOVERNSE40RTRzS3VaUUh2ZElaS2tPQU14TTFuVEVJRjJOaHl6eGVDRnFUd1R2MExyN3JoSmtmcy8zRnpNMXhQM0VxNVlyTVk5UkNad2hEN3FNMkZvYzdZZWFTUVpqNWp1a09MRzZoZzFvWnpTZnBhak9HTUFTR3JxWS9XN3VkWmc2WnR4YkMreWcyRm5la0UyWnVER0VJSEwyUFFYU2xFV2ErdXpROGowVzVsUEtrR3kzR0VJYlFvUGR3UHNJaWhLRkFwb2FBeEtYMkUrVEgzSm1xQnRlM2tHbzVFN1NjSDdyTlp6RHNDYm1TQjluSzBjQkU0SjllRkFrYzZpYUQrMnQ1bFNOUjd0Y1k2L1I2eDhrR2cwZklSRHBrREN2b3d4QmdNV1IzSDBzNmhpaHlVdWRRd0NzYW8xV3Y2eGFvWnpCNGdKVHlzWXdtUnB6aHdHK3pWYTk3UTFqYkRRRlFCSlJSeEhxTk1kWXpWUWFEZzR4bHZZem1mSVFmZ1A5NzRUTnBJYm96RUxoSHkzallkS01NZmlDWDAwWVJ3NEJ5U0grZFlVKzROd1E5R2lLQk1JSUNYdFlwTktyTlh1bkxNaGgyUlVwcGx5dG9SUmdHL3B5bDVhMGhFaFNqVE9kZnZLNHhScVlqeW1EWUhYSVpHOEdmdmRkK0dDTEpOeERhZEFwdFdzblgwNmpIWU1nNlhvMGhkc2RJdW5oZEs3Qk5OOG9RZGpLZFpVcVZ2aWl6K0lUWHRKSUwwOGh2TUdTRmJMUVEzVG1DT0d1MWdqWXQ1L0FNeWpFWWZNSFBNY1R1R0VrQmIyaWw2VVlad2tWUWhvQmtOK3BUWHRWcFhPQlJtUVpEUmdScGlDUkhvanlnVTJuVGF0T05NZ1JMdHNjUXZTT01wSlBYdFFwYkozZTdGTVZneUNMdURTRStHU0pCQ2Nvcyt2Q2FUdXQyWnFqQmtDWEMwR1hhRmVGSTRFR3RvazJuT21mNkdBeFpJSnlHK0lMRWJKVHBSaG15Uk5nTkFWQUN6S0tFVjNVNjM4OXkzWVk4SXdxR1NESUkrSzFXMDZiVCtWcEFHZ3c1VHBRTWtVQVppYkJlcTdIVnBqaFFMWWFjSTNxR1NKRG9SbTNqVmEzbWUwR0xNZVFPVVRWRWtzRUlEK2tOdE9rTXZocTBHRVAwaWJvaGtvd2t6bnF0TWQwb1EyYmtpaUVBK2dHemFPY1ZyZUhjb01VWW9va3JRMmppNEtkQ243UjR4UkRnZHpyRGRLTU03bkhYUWx3ZGVqTjBaeVN3WG1lYWJsUmVFM2QzR0lIYkxsTll1MHU5MFE5bEZsMjhyRE1aRWJRWVExYlpqRkxQTmhhNXllVE9FUHRHemhBSmxLSEE3M1FtSzdXR2c0S1dZL0FWQlZiUndTQzVERnZHdWJ1Q3paMGhPaU5xaUFRQ2pLR0FEVHFUbU5xUjZ2NFpVa0g1RXhhbnlhV01sVEc4bjA0UjdnelJGV2xESk5rSG9ZVXVudE5hVGd0YWpNRVQza1c0a2tzNVdVcDVPcE9DM0JuQ3I4MUJ3WEFNd2hOYVo3cFJrVVhaQXRSVHdHQzVsSlVpbVI5ZTVzNFE4Wnd5QkNTN1VZVzhxWFhFOUJJS2doWmtTQkZoRlVVTWxzdXdwWlN0M2hYckFyMmVvUlN3M2xXcDBVcS9oREJKYko3Q2tKZTRheUdLY3E2RjJKbGpnU2ZWWnFYYUhCaTBHRVAyeWVjeFJNK28wNDJDRFZwUFRGZWJibFErWVF6Uk93TlFXbGpQc3pxYlU0SVdZOGdPdWI1UzdRWEhvZnhCNjFtcDgvaHkwR0lNL21KYWlOUklkS002MmFCelREY3FsM0ZuQ01uN0lMbDlVVnJZd0o5MExpY0hMY2JnUGFiTGxBN0s4U2hQNlJ6VGpjbzFUSmNwZlJMZHFDN1RqY29sVEF1Uk9mc2l0UEFYbnRIWm5CUzBHRU5tdURORWVyY0g1UWZLQ1ZnOHBYTlpxVFlIQkMzSGtCNm1oZkFXQzJFTVJXelFCbUpxcDdWblBWUm9Nd09DMXBBSnVwcUQzWHplN1ErMjV6MEVycUtqY3BiOWdCYUtlVkliT1Nab01lbWdTemhVbDdLY1l1WUVyU1VkZEJWRDlHYzhRQWRUM2VSek82aDJOKzFxekhFS1NsblFJdHlnTnNXNmhCZ1dieUpjVFhvbnN3U0czc2UrZWgrTldMd0M3bSttY3JkclRDbEsreUhmTWQ5bTRER2dqUzZlb0lqSDBCemRreENuUFdnSnFhTExHSVhTQ3RHN1YxeHRMSTVnTkxBQTBnL01kTHVOTXBNeHhOc29Ed05yMlllSHhQN2lRZEZLS29EN01pZzd2QWdkUVV2WUU3cU1ZNG5UZ25KbTBGclNRZS9qTE9LMElCeWRhVm51REdGUjVHSlBVaGVKL1FWckVkcmtKcDd2N1lPeWtKOXBKWmRERHQ1aExlRnRJWFFwK3dOMXhKa0UwVnRIMFpWOERZdTVLR084NnA2Nzd6THRuczJJMHhVcTVOZXlnQTljS0xtZUxyNUw0Z1MrM0VIRDEwTG9jb3BvNXpyaTFDUHNFN1FldCtoSytpRk1BNmFqN09YbFdOV0xMdFBiQ0E4anUzYUYzQ0NOL0ZXcmFFQ1psM2doblZKQ1NNZ01vWXNad2VlMEFOOEtXb3RiVkJIdVpReEtFN2liVGsyVmRBenhSVmNvVHBzczdyMHI1Sm9TRnJDWlVoSTcxM0lES3h5RzBLVU1wb3RGS0JkRzhUOGJ2WXNUV1VVcitMczN4WjBodXJpYkl1WkxNeC83SVVac09yV1M2eENlcFB0MFgyLzdvS05Cb0dNSWJXWUFRalZkVElIb1JTdnJQWHdGdUJFWVRSWitmVmVHa0tXODZaZVE3WFVzNUdtZHhuTGdXci9yeWdvQmRablV4bUpBNXRPUVFhR3I2Y3RXeW9BWndKZXlWVzg0RjEyMlVZM3czaDQvRjRYV0lvQlpKcjJKczlpSEY0QjdpS0laN21JVVczZ0RwWkVzbWdGQ2FnaFp3aWRBaGJ0TS9takptQ3kyRUhvVFg5Vm1WbUx4S0VRdlpFVHY1SGk5aThjUmZnMGNIb1NHMEo1dktrMnMxbW1NUmhqbFByTVBndElsQzRiUUJmVERZaHJDZEdBdnYrdnpHcjJIL2VtaURnbCtQU1MwaGdEQTRucVVzNEQrYVpjUnZEbDg2ektwSWl6aVlvU0ZFTDJyaW5VNVJSUnpIVjNoV1E4SlpaY3BpVFR4RGtLOWR3VjZWbExxK0RUdHFnczVrVVU4Q2F3bWltYTRreEVVOFJKS0M0VERESkJsUTZoTm9icDlMUHZTQXJ6b3VaanNtR01UeXF0ZUZxaE5IS29MV1k3d1IrQlVMOHZPQm5vSFEvUjJIbkRpMnI0WnRKNmQ4ZDBRT3BrK09vVVJXa0Vybi9BdVU3aktUWDZ4NlVTNW1zU0NvRC80WVE3bEF5ek9raHJlOEt6SWhWeEVBWCtHNklWbEEranRqQWRlUTl5SFpXY0xYNzVVblVKZm5jSW9uY0pLQ3ZrUWVCZ29BdzVDYU5ZcUJyb3BUK2J6SEhDekgxcDNyY3lUVXQ2bWdPOUlOUzk3VXRvWEhFTzBZNzJHRWZKeHEyZml0SndCS09jaWpFTDVFZEMvbDRkckg3cTRCVnpPSGlrekVINEU3c3lVRWVtWjR6VUsrYjVNWjZQSGFneFpJS01XUWlleHY4WVlxekhhVUQ0a01jQWJ3NTVuaFVacUJUOTJVNWZNNTFNazlMdlBIcWVBMDQwWm9vdHJRK2hrQm1vWlYydU1OZ3A1bjhScTZFamN4c2tJUzdYUzNTcXFOSEkveXE5YzFlTVZlMjR0MWxMQ2VWTE52N09neHVBVDdpNXVMK2NpTE41QldFN0NCSm5zb0R1QU9NMnVjeW1USU9DSGJtZHpLUGZ5WlM2U0N1OXVzakVFZzlzcnRmcmg1WnlNY0xsTzVZZXVzc3huSThvc3p6Umtpc1VTdXJoU0pvWWp6TnVRR2NGUDNRazNhelg3dXNyVGx5WEFILzBSbERJSzFNc015c1FtSHJBV2cwY0Vid2c0aEU2YTNHUVFtemdXRXlHdy81VzdVSzZSV3V5QTZqZjRSQmdNQVRCQnAvRTlOeGxrSHE4QVMzelNzenZhRVM2VE9sWUVVTGZCWjhKaUNDSE9jclZkQnZIMW9SWjQyeDlKUGJJWllaVE1aRTBXNnpSa2tiQVlBb1REMmN4Y1YxbHN0amdodzluZ1l5eEdTQzIveTFKOWhnQUlqeUVTVE5icG5PNG1nOHpqUWVBWFB1bEo4ZzdDcVRJejhJRzh3V2ZDWmdpTE9MZXI3WEtUU3llVGdYLzVJNG4xRkhDNjFMTEJwL0lOSVNKc2hnQVl3bVpxM1dSd0RrU2I2WU9XNXlqaVRKbkozOU10UUJzNHlrdEJCbjhKb3lFQXFyU2FFMXpsS09ZVzRDa1BOVHpHWHB3dE5md2ozUUwwUnFZalZIcW95ZUF6WVRWRUlYSHUwS3RURHcwUm16Z0ZYSU0zYXhPL0FpNlE2WHlhYmdIYXdHem4xQWhEaEFpcklRQ09ZUUJWYmpMSUhGNUYwb2lQMnBHN2dVdkVabHM2bVZVUmJhQUZjZGZ0TTRTRE1Cc0NvRmFudXp5RGRBczI4RDlwMVNZMGljMDRzZWxNSjd1dXBvQjUzQTdFMHFyZkVEaGhOMFFmNEE2OUpQV2pTYVNaclU1RWJPb0lpbElwTnRWdUJTYlIxUlR3Wis0Q3hxZGJoaUY0d200SVVFN2k2MHgyazBYbThSREN6MVA4ZUJjd1FXWnprM3R4Q2RTbW1EK3pCbUZNdW1VWXdrSDREUUVnTkdnMVI3cktFNmNjMkxTSFQzMU9Zcnh3WjdyUzFLYUVRdHFBSDZWYmhpRThSTU1RVUlKeW01c2piR1FlSDhKdXUwRC93bUtFek9iK2RFWHBBdm81Wm5BVm1HZ0lMMUV4Qk1CM3FlYW5ybkkwY0J2d1pBL3ZKSTZJc1h0OEx5WFVaZ0RiV0FlY25XNFpodkFSSlVPQXNrQm44TlZVUHk2SlRUd1RTSFNOa2lTT2lMRjVLVzBaTmdkU3dIOERKNmRiaGlHY1JNc1FzRGRkM09vbWc4eGxBN0RRK2V2cnhQbU8yTHlWcmdDMU9aZ0NIaUdDcDJzYjlrelVEQUZ3Z1Zaemhhc2NoY3hGdVpzQ1RwZUdGTzZkNkFXZHkyRllQQUVtUGlsWENmVXBhcnVoVld0WTV3eWM5NGl6Nmp3dWt3clZaakJ4MWtIcVhUWkQ5SWhpQ3dHd1A4cmliRldtY3hpR3hXTVlNK1E4VVRVRUtLVjZBeGY1WG8zTjhjUjVIRGpVNzdvTXdSTmRReVJZcGpiNytWVzR6dVpFaEllQkEveXF3eEF1b202SWc5bVdmc2pGN3REWm5JbnlDUGhuT0VQNGlMb2hRTGhLcXpuUHl5SzFudk9KOHlCWnZnSFRFRHpSTndTQXNGeXJ2SGw0MWVZSEtQY0RmYjBvenhBdGNzTVE4RFVLdVRIVFFyU095NEJma2dnN04rUWh1V0lJZ0d0MUJtZWttMWx0cmthNGwraXV6Umc4SUpjTVlhSGNwbFBjZDNXMGprbkFyZVRXOTJGSWcxeDdBQVpUNHU0QVlxMWpPc0pTTkFRM1doc0NKOWNNQWNwVXJlWEVsRDQ2aTNvd0oyUGtNRytnL05KTkJuZUc2T0p4SlBSbm14WVE1dzYxZTcvaVMwRjBGcTBvZGRrVVpzZ2FtNEJxQ2psT1JyczdmdFRWQUZLVzhUZmcrenFGRWNScEFaY25ZbVNQNGJSekExQy84eHRxWTlISkNwU2ZCS0RMNEM5eDRENkttQ3FsNlIwd2wxYVhTWnBaeDFhT1F5a242UHZlZWtPbzBWcUdkMzlKTDZHQVR1NUVqQmx5RHVGUkxJNlRLeGlicmhrZ2d6R0VyS0JERnROS0owY0FpMG1jWGhFbWlvbHpqOXFKVmxCdGlobkthb1FyZ3habThKUzNFRXJsQ3M2Unkza2wwOEl5SGxUTE1qNlNWbUlJdzRHSE1pM1BZNDZqZzNLZFRCODZXUVArUjhjYXNzWm1vSjVPaHNzVjNsMWc0OWtpbExTd0hqaFBZMXlDTUI4NDNLdXlNMEtZelQ1Y0JKd1N0QlNESnlod0w1MVV5VGcrOExwd3o2ZGRwWlUxREdBSVFqbndpZGZscDBGZmpCbHloV2RSVHBPeGpQWERET0RUT29UWXRFc3pyUlF4REZnQjV0cGFRMGE4aDNJbFl6aEpydVJwUHl2eWRXRk81ck5SbXBrSW5BVDh3Yys2RERuSlZxQ0p2Z3lWcTFncGd2cGRZVllDMmFTWjV4UytRd1VYQXd1QXc3SlJyeUhTckVXWkxGZngxMnhXbXJYUURRR1ZSYXpoTTc2SlVFL0MvUWJEenJ5QWNvWmN4U2dabDEwelFBQ3hUTEtDTGJJUW13SUdBNnZBLzJiUUVBaytBc3JweDdkbEhFOEVKU0t3NEQ2Wno3dHlFMk9CVXhCejNXMGUwd0VzcHAwalpCeXRVaHJzQW0vZzBhNnlrR2ZveDJuT0NuSktCNDhaY29aMXdMRXlucGhNREVjSVVPQ0dnTVNGaWJLQWxTaEhPT09Mei9lWXlSQmxObUJ4b1l6blhCblBHMEdMNlU0b0RKRkVGckpaNW1OVHdGR0lkOHZ4aHREd01jcGsvczVSTW83ZkJDMm1KMEs1ZjFnYWVRc28xV3JPZHNMTWgrOHBqeUg4eUlUTUQ0THdtMUMxRURzampUeEtDY2NqVElUMFEzb05obFFKdFNFQXhLWlRHbG1CTUFTbENXZ1BXcE1oZHdtOUlaSklJNXRrUHRYRU9SckMyZjgwUkovSUdDS0p6R2VETkhJaGNDNkVhNGJDRUgwaVo0Z2swc2c2UHVKWUo4dzhGSFBZaHVnVFdVT0FzNDExSHEzQUVjNEZLbUhieG1xSUdKRTJSQks1a1kva1JtTEVPUkY0UEdnOWh1aVNFNFpJSW8yOEtQTTRFL2dCOEhiUWVnelJJNmNNa1VRYWFHTUwzMEtwQmo0TldvOGhPdVNrSVFDa21hMHlqeVlLR1lxYWJheUcxTWhaUXlRUm00M1N3RVNVa3hDZUNscFB4UGd2NHRzdnZjOExjdDRRU2FTQjU1ak42UWlsd0R0QjZ3azVid0xueXlUK1V5Ym4xMWdzYnd3QnpqYlcyYXloZ0dFa3puM2RGclNta1BFeFNqbi9aTGhNNHJkQml3bUN2REpFRXJIWklyT3hzUmdFckNJTHB6bUVuRTVnQlVVTWtjbTBpazFuMElLQ0lpOE5rVVJzM3BYWmpLV0xzNENYZ3RZVENNb2p4RGxPSmpOUkp2TFBvT1VFVFY0Yklvbk00ZmNJSitUWk50YS9JSlJLR1NNa3htdEJpd2tMeGhBT1loTVhtNVhBa1pEVDIxZy9RNmtIaHN0a3N5dHhaNHdoZGtKc1BoTWJtd0tHUTA0OU1IRmdGY3FSRXNPV3NwdzFmRWFFY2d0cEdKQmEvZ0tVYWozbkFNMUVleHZyTXlneEtlZVpvSVdFSGROQzdBR1p4U01veDBNa3Q3RytDMXhKakZPTUdWTERHQ0lGeEtaVDZsaEJuS0VrYmtzSys3VGtGcUNlT0lPbFBEdUhCT2NLeGhBdUVKdVBwWTRZQlF4SGVUQm9QVDJnd0JxNitLWk13WllLYzM2dVc4d1lJZzJraGplQkMzUU9JMGkwR01NQ2xnVEM4MEJNcHBockJ6TEJ0QkFaSUxXczQ4c2NFL0J0ck84alRPVGZmTnVZSVhPTUlUSkVKdElodGJSaWNRU1MxVzJzN2NCaWloZ3FVMWdodGdsdjl3SmpDSStRR2o2U0dtTEF0OEgzNDl6WFlqRk1waEtUc2xEYzQ1Y3ptREdFeDhnTVhnRE8wTG1Nd3FMVjQrTGZSRGhicHZLWXgrVWFEUDZqTmlYYXlCbEI2ekNrenY4RFFkN1FyTWJMUjFBQUFBQUFTVVZPUks1Q1lJST0iPgo8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIGhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTVFBQUFERUNBWUFBQURBcG81ckFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFCYWJnQUFXbTRCeFdzak9BQUFBQmwwUlZoMFUyOW1kSGRoY21VQWQzZDNMbWx1YTNOallYQmxMbTl5WjV2dVBCb0FBQmwwU1VSQlZIaWM3WjE1ZUZUVjNjYy92NXNGQ1ZSeHFWdHB0VlcyVmx4ZjYxcXRpcTBMOUdsOU5YVUJGRXBGUlRJaGhCQURDVGRBTUFFa0NZc0s3cUI5K2tENzJxZkJXaXZxVzdWYTY3NGlyZTlyYXhYMWJaVldaVEhML040LzVnNEdTR0R1ekwxejc1MDVuMzg0ek13NTU4dk0vWEsyM3prSERJR2ppemhQRjNGZTBEb01JRUVMeUdkMFBvT3dhQUF1Y1Y1YWgwVzVWUEI2a0xyeUdXT0lBRkNiL3ZTakVxZ0crdXp3S3dnZHdDMTBVQ2ZWL0RzWWhmbUxNVVFXVVJ1TEVrWUQ4eEVPMnY3R2pvWndQc3hIV014aElFdWxsSzVzNnN4bmpDR3loQzdnSkpSVzRDU2daeFAwbkg0Smk1aVU4N2pmR2czR0VMNmpUUXdFNWdHamtXN2ZkK3FHU0xLV0lzcGtNbS83SU5QZ1lBemhFMnBUUWgrcXNLZ0MrZ0x1VGJCcmVpdXdtSFlhWkRxZmVpcllBQmhEZUk0cVFpTVhBd3NRRHZQQUJEMmxOeUxVczRuYnhTYWV1V3BERW1NSUQ5RWJPUUZvUlRodCs0ditHQ0w1NTdOQXVjUjRLaTNCaGwwd2h2QUFiZUFRTEd4Z0FtRDVhb0x1NmNTZml2QUxsRXFKOFk1TDZZYWRNSWJJQUxVcHBvaHJFV1lqN0wzOWpld2FJcG5lakxLUXZXbVVjV3hMNlI5ZzJBVmppRFRSdVl6Q29nWDRCcEE5RTNSUDkveiszNEdaVXNiS1hxUWJkb014aEV1MGdhTVJtbEhPOXZBQi82T1RPdGtEUXlUU3lpTW81UkxqdFo3K0hZYWVzWUlXRUJYVVpqK2RTeXZ3UE1yWkhoVzdFV0VpbjNFYVV6a1ZvUlQ0bXljbEMrZGc4Ykl1WmFYZXdvR2VsSmtIbUJaaUQ2aE5JVVdNUjJrQUR2Q29WZGlLc0pqNHJ1c0p1cHdTUHFNS3FFS2M5WXZleWttOXprMUFFd2ZTTEtXMFkrZ1ZZNGpkb1BXY2cwVUx3bEhiWDh6Y0VHc1J5bVRhN2xlY3RZbUJGRGtyM095d3hwMk9JWkxwRFFoVDVUb2UyRjNkK1l3eFJBL29IQVpCdDdCc2IxcUZGeW1nWENyZHhTVHBJczRFV2hDTzNhWE05TFdzbzRDWVhNTWJiclRrQThZUTNWQ2IvZ2lWeUU1aDJaa1o0aU9FT1J5ZWZ0U3EybGdNWURUS2ZPQWdqM1Ixb054Q0lYVXkwWVNaSnpHR3dIbmdMT2VCNnlrc083MEhML0hBaVhmN0duUVovV252d2JEcGF3U2NNUFA5VEpnNUdFT2dzMU1JeTNiL3NLMGpUa3hxL09tU2FDdURVQnFRN1R2dHZPald2WWhRTHRma2Q1aDUzaHBDYlJkaDJhay9WQnRRS3FTRzMzZ3F0aGUwbFhPQUZ1QW9EOWRFMWxKQW1mdzBQOFBNODg0UWFsTUN6clJtcW1IWmUzNlFOaUUwOFRuTlltZDNXbE50Q3RtWDhZZ3pMZHk3UmpmcFJKaDVFUTN5ay93S004OGJReWdJZFZ5TXhRTFVaVmgyNys5M290eUpNRk5xK0lmWG10MmdpOWlQUW1ZQjF5RVVibjhqTTNPOGgxTERSRmFKb0o0S0RpbDVZUWl0NVFRa2c3RHNubDk3Rkl0eXFlWlZUOFZtaUM1aEtFb3o0aHhyNDAxWDZsbVVtRnpEMHg1S0RTVTViUWl0NFJDS3NORU13N0ozZk8wdGxCcVp5UnFQNVhxS0xtWVVRZ3ZpQkI5Q3B1WlE0RjQ2cUpKSmZPQ3AyQkNSazRaUW0ySTZQUXpMVHZ5WkNLL2VoeHVsak04OWx1d0xhbFBNL3M3M0FIdDcxRnBzUmxoSVlXNkdtZWVjSVhTRzUySFpjWVQ3RUtiSkRENzBWbTEyME9VY1FnYzI0clNVNE1YMzhoWkNqVXdJZDB2cGxwd3hoTjdBVUFwb0JzN3pjQXJ5R1pTWTFQR01oMUlEUTI5MnRyZ3FwM24ySFZrOFNwd3A4bE5lOFZCcVlFVGVFR3F6SHgzTVFyZ09uTm1Wekgvc2Q0RVoxT2JlN0lvcXdpM09JUWh3R09ERjk5V0pPTE50NDRPZGJjdVV5QnBDYlFycFlEeDRHcGE5QlZqQWwyaVNDclo2S0RkMDZISks2S1FLU1NITVBOVzB4U2JpTkxGM2RNUE1JMmtJclhGV2FMMEx5MWJnRnhRd1RXWjZ0RUVuSXVqaUZNTE0zYVlUWWVZVk1pNDdLL1plRWlsRDZFd0dFZmM4TFBzNUxNcWxqajk0cHpSNjZNMmM2VXhHN0JwbTdqYjl4V3ZyS0tSTXhyTGVPNlgrRWdsRHFPMUVlU3JWQ0gyMnY1R1pJVFlDOVdBTyswcWlOaFlITzRjeGR3OHpoMHpXYlJKUnZ4M1JDRE1QdFNIVXhtSXJvN0djSHdpOGFCWGFnVnNwWWFZNURySm5kQm45c2FqRWNzTE1JUk5ESkVtRW1mY05kNWg1YUEyaE4zUUx5L1p1R25VdFFreHMvdGREcVRtTDNzb2d4T21pWm02SVpQb0ZsSElaeHhOZWF2V0swQmxDcXhpSTFXMlFCMTYwQ2kraGxNc2NmdStwMkR4QlZ6RENpWTlLVEdKa1pvaGtlaTF4SnNzNC91cWwxa3dKalNIVXBvUXR6alFnOVBXb1ZVaHMzMXpQVWxrVDNtWTZDcWhOSVY5eFRoOFJKOHdjTWpFRUpLYTVsOUNYdVZMS1o5NHFUby9BRGFFZ1RPTml4RmtvY3YrbDlwUk9YRXZWVHAwMGhYOGdGeVgwZHZaRG1RVk1BZ295TkVReS9SNUNEYU9EWHdnTjFCQTZsUk93ZWduTFR0OFE2eERLWlk2NXVOQlA5RGFHQVl1UWJyZW5adjdiL1FtTG1JemVmcEpoMWduRUVGcnVoR1h2N3JSczkxL3FCdUpNbFhubXpLRnNvcmN6Q3B4Z1NtOWFkMFdjTVBOeDJROHp6Nm9obk83Uk5KUmFoUDQ5cW5EL3BYNE0xRlBFeldMVDZhMWlReXJvWGV4Rm5BcmdCcUMvUitPL1Q3Q1lReEdMc3hrR2t2VVdRaXM0emprTjc0d2VWYVJ1aUVSWWRoR1ZZdk4vZm1nMXVFT1hjd2lGUG9XWlg1R2RNUFBBeGhCYXlTaUVWdURycmcyaFBJb3dSZWJsUnNoeHJxRjNjd0pkenRqUXV6V2tSMUhLWmJTL1czYURIVlRiRkxPWmF4SG1BRi9hUVZIUFg4eGJXTlJJUTI1dFNzbEZWQkh1OWlITUhPNmtpSmxTNmsrWWVlRFRyZ0JheGFIQUxHQUMwbU5UbTlpMldFeWoyTG0zYlRHWDBlV1VVSnppYWVhcHB6ZWgxSE1veStRc2I4ZU5vVEJFRXEzaVA1eHUxS21Pc3NURzlpNnFaRUh1Ym16UEIvUTJCbExNUE5URE1ITjRFNHNLdVpRSHZkSVpLa09BTXhNMW5URUlGMk5oeXp4ZUNGcVR3VHYwTHI3cmhKa2ZzLzNGek0xeFAzRXE1WXJNWTlSQ1p3aEQ3cU0yRm9jN1llYVNRWmo1anVrT0xHNmhnMW9aelNmcGFqT0dNQVNHcnFZL1c3dWRaZzZadHhiQyt5ZzJGbmVrRTJadURHRUlITDJQUVhTbEVXYSt1elE4ajBXNWxQS2tHeTNHRUliUW9QZHdQc0lpaEtGQXBvYUF4S1gyRStUSDNKbXFCdGUza0dvNUU3U2NIN3JOWnpEc0NibVNCOW5LMGNCRTRKOWVGQWtjNmlhRCsydDVsU05SN3RjWTYvUjZ4OGtHZzBmSVJEcGtEQ3Zvd3hCZ01XUjNIMHM2aGloeVV1ZFF3Q3NhbzFXdjZ4YW9aekI0Z0pUeXNZd21ScHpod0crelZhOTdRMWpiRFFGUUJKUlJ4SHFOTWRZelZRYURnNHhsdll6bWZJUWZnUDk3NFROcElib3pFTGhIeTNqWWRLTU1maUNYMDBZUnc0QnlTSCtkWVUrNE53UTlHaUtCTUlJQ1h0WXBOS3JOWHVuTE1oaDJSVXBwbHl0b1JSZ0cvcHlsNWEwaEVoU2pUT2Rmdks0eFJxWWp5bURZSFhJWkc4R2Z2ZGQrR0NMSk54RGFkQXB0V3NuWDA2akhZTWc2WG8waGRzZEl1bmhkSzdCTk44b1FkaktkWlVxVnZpaXorSVRYdEpJTDA4aHZNR1NGYkxRUTNUbUNPR3UxZ2pZdDUvQU15akVZZk1IUE1jVHVHRWtCYjJpbDZVWVp3a1ZRaG9Ca04rcFRYdFZwWE9CUm1RWkRSZ1JwaUNSSG9qeWdVMm5UYXRPTk1nUkx0c2NRdlNPTXBKUFh0UXBiSjNlN0ZNVmd5Q0x1RFNFK0dTSkJDY29zK3ZDYVR1dDJacWpCa0NYQzBHWGFGZUZJNEVHdG9rMm5PbWY2R0F4WklKeUcrSUxFYkpUcFJobXlSTmdOQVZBQ3pLS0VWM1U2Mzg5eTNZWThJd3FHU0RJSStLMVcwNmJUK1ZwQUdndzVUcFFNa1VBWmliQmVxN0hWcGpoUUxZYWNJM3FHU0pEb1JtM2pWYTNtZTBHTE1lUU9VVFZFa3NFSUQra050T2tNdmhxMEdFUDBpYm9oa293a3pucXRNZDBvUTJia2lpRUErZ0d6YU9jVnJlSGNvTVVZb29rclEyamk0S2RDbjdSNHhSRGdkenJEZEtNTTduSFhRbHdkZWpOMFp5U3dYbWVhYmxSZUUzZDNHSUhiTGxOWXUwdTkwUTlsRmwyOHJETVpFYlFZUTFiWmpGTFBOaGE1eWVUT0VQdEd6aEFKbEtIQTczUW1LN1dHZzRLV1kvQVZCVmJSd1NDNURGdkd1YnVDelowaE9pTnFpQVFDaktHQURUcVRtTnFSNnY0WlVrSDVFeGFueWFXTWxURzhuMDRSN2d6UkZXbERKTmtIb1lVdW50TmFUZ3Rhak1FVDNrVzRra3M1V1VwNU9wT0MzQm5DcjgxQndYQU13aE5hWjdwUmtVWFpBdFJUd0dDNWxKVWltUjllNXM0UThad3lCQ1M3VVlXOHFYWEU5QklLZ2haa1NCRmhGVVVNbHN1d3BaU3QzaFhyQXIyZW9SU3czbFdwMFVxL2hEQkpiSjdDa0plNGF5R0tjcTZGMkpsamdTZlZacVhhSEJpMEdFUDJ5ZWN4Uk0rbzA0MkNEVnBQVEZlYmJsUStZUXpST3dOUVdsalBzenFiVTRJV1k4Z091YjVTN1FYSG9meEI2MW1wOC9oeTBHSU0vbUphaU5SSWRLTTYyYUJ6VERjcWwzRm5DTW43SUxsOVVWcll3SjkwTGljSExjYmdQYWJMbEE3SzhTaFA2UnpUamNvMVRKY3BmUkxkcUM3VGpjb2xUQXVST2ZzaXRQQVhudEhabkJTMEdFTm11RE5FZXJjSDVRZktDVmc4cFhOWnFUWUhCQzNIa0I2bWhmQVdDMkVNUld6UUJtSnFwN1ZuUFZSb013T0MxcEFKdXBxRDNYemU3USsyNXowRXJxS2pjcGI5Z0JhS2VWSWJPU1pvTWVtZ1N6aFVsN0tjWXVZRXJTVWRkQlZEOUdjOFFBZFQzZVJ6TzZoMk4rMXF6SEVLU2xuUUl0eWdOc1c2aEJnV2J5SmNUWG9uc3dTRzNzZStlaCtOV0x3QzdtK21jcmRyVENsSyt5SGZNZDltNERHZ2pTNmVvSWpIMEJ6ZGt4Q25QV2dKcWFMTEdJWFNDdEc3VjF4dExJNWdOTEFBMGcvTWRMdU5NcE14eE5zb0R3TnIyWWVIeFA3aVFkRktLb0Q3TWlnN3ZBZ2RRVXZZRTdxTVk0blRnbkptMEZyU1FlL2pMT0swSUJ5ZGFWbnVER0ZSNUdKUFVoZUovUVZyRWRya0pwN3Y3WU95a0o5cEpaZEREdDVoTGVGdElYUXArd04xeEprRTBWdEgwWlY4RFl1NUtHTzg2cDY3N3pMdG5zMkkweFVxNU5leWdBOWNLTG1lTHI1TDRnUyszRUhEMTBMb2NvcG81enJpMUNQc0U3UWV0K2hLK2lGTUE2YWo3T1hsV05XTEx0UGJDQThqdTNhRjNDQ04vRldyYUVDWmwzZ2huVkpDU01nTW9Zc1p3ZWUwQU44S1dvdGJWQkh1WlF4S0U3aWJUazJWZEF6eFJWY29UcHNzN3IwcjVKb1NGckNaVWhJNzEzSURLeHlHMEtVTXBvdEZLQmRHOFQ4YnZZc1RXVVVyK0xzM3haMGh1cmliSXVaTE14LzdJVVpzT3JXUzZ4Q2VwUHQwWDIvN29LTkJvR01JYldZQVFqVmRUSUhvUlN2clBYd0Z1QkVZVFJaK2ZWZUdrS1c4NlplUTdYVXM1R21keG5MZ1dyL3J5Z29CZFpuVXhtSkE1dE9RUWFHcjZjdFd5b0Fad0pleVZXODRGMTIyVVkzdzNoNC9GNFhXSW9CWkpyMkpzOWlIRjRCN2lLSVo3bUlVVzNnRHBaRXNtZ0ZDYWdoWndpZEFoYnRNL21qSm1DeTJFSG9UWDlWbVZtTHhLRVF2WkVUdjVIaTlpOGNSZmcwY0hvU0cwSjV2S2syczFtbU1SaGpsUHJNUGd0SWxDNGJRQmZURFlockNkR0F2dit2ekdyMkgvZW1pRGdsK1BTUzBoZ0RBNG5xVXM0RCthWmNSdkRsODZ6S3BJaXppWW9TRkVMMnJpblU1UlJSekhWM2hXUThKWlpjcGlUVHhEa0s5ZHdWNlZsTHErRFR0cWdzNWtVVThDYXdtaW1hNGt4RVU4UkpLQzRURERKQmxRNmhOb2JwOUxQdlNBcnpvdVpqc21HTVR5cXRlRnFoTkhLb0xXWTd3UitCVUw4dk9Cbm9IUS9SMkhuRGkycjRadEo2ZDhkMFFPcGsrT29VUldrRXJuL0F1VTdqS1RYNng2VVM1bXNTQ29ELzRZUTdsQXl6T2tocmU4S3pJaFZ4RUFYK0c2SVZsQStqdGpBZGVROXlIWldjTFg3NVVuVUpmbmNJb25jSktDdmtRZUJnb0F3NUNhTllxQnJvcFQrYnpISEN6SDFwM3JjeVRVdDZtZ085SU5TOTdVdG9YSEVPMFk3MkdFZkp4cTJmaXRKd0JLT2NpakVMNUVkQy9sNGRySDdxNEJWek9IaWt6RUg0RTdzeVVFZW1aNHpVSytiNU1aNlBIYWd4WklLTVdRaWV4djhZWXF6SGFVRDRrTWNBYnc1NW5oVVpxQlQ5MlU1Zk01MU1rOUx2UEhxZUEwNDBab290clEraGtCbW9aVjJ1TU5ncDVuOFJxNkVqY3hza0lTN1hTM1NxcU5ISS95cTljMWVNVmUyNHQxbExDZVZMTnY3T2d4dUFUN2k1dUwrY2lMTjVCV0U3Q0JKbnNvRHVBT00ydWN5bVRJT0NIYm1kektQZnlaUzZTQ3U5dXNqRUVnOXNydGZyaDVaeU1jTGxPNVlldXNzeG5JOG9zenpSa2lzVVN1cmhTSm9ZanpOdVFHY0ZQM1FrM2F6WDd1c3JUbHlYQUgvMFJsRElLMU1zTXlzUW1IckFXZzBjRWJ3ZzRoRTZhM0dRUW16Z1dFeUd3LzVXN1VLNlJXdXlBNmpmNFJCZ01BVEJCcC9FOU54bGtIcThBUzN6U3N6dmFFUzZUT2xZRVVMZkJaOEppQ0NIT2NyVmRCdkgxb1JaNDJ4OUpQYklaWVpUTVpFMFc2elJra2JBWUFvVEQyY3hjVjFsc3RqZ2h3OW5nWXl4R1NDMi95MUo5aGdBSWp5RVNUTmJwbk80bWc4empRZUFYUHVsSjhnN0NxVEl6OElHOHdXZkNaZ2lMT0xlcjdYS1RTeWVUZ1gvNUk0bjFGSEM2MUxMQnAvSU5JU0pzaGdBWXdtWnEzV1J3RGtTYjZZT1c1eWppVEpuSjM5TXRRQnM0eWt0QkJuOEpveUVBcXJTYUUxemxLT1lXNENrUE5UekdYcHd0TmZ3ajNRTDBScVlqVkhxb3llQXpZVFZFSVhIdTBLdFREdzBSbXpnRlhJTTNheE8vQWk2UTZYeWFiZ0hhd0d6bjFBaERoQWlySVFDT1lRQlZiakxJSEY1RjBvaVAycEc3Z1V2RVpsczZtVlVSYmFBRmNkZnRNNFNETUJzQ29GYW51enlEZEFzMjhEOXAxU1kwaWMwNHNlbE1KN3V1cG9CNTNBN0UwcXJmRURoaE4wUWY0QTY5SlBXalNhU1pyVTVFYk9vSWlsSXBOdFZ1QlNiUjFSVHdaKzRDeHFkYmhpRjR3bTRJVUU3aTYweDJrMFhtOFJEQ3oxUDhlQmN3UVdaemszdHhDZFNtbUQrekJtRk11bVVZd2tINERRRWdOR2cxUjdyS0U2Y2MyTFNIVDMxT1lyeHdaN3JTMUthRVF0cUFINlZiaGlFOFJNTVFVSUp5bTVzamJHUWVIOEp1dTBEL3dtS0V6T2IrZEVYcEF2bzVabkFWbUdnSUwxRXhCTUIzcWVhbnJuSTBjQnZ3WkEvdkpJNklzWHQ4THlYVVpnRGJXQWVjblc0Wmh2QVJKVU9Bc2tCbjhOVlVQeTZKVFR3VFNIU05raVNPaUxGNUtXMFpOZ2RTd0g4REo2ZGJoaUdjUk1zUXNEZGQzT29tZzh4bEE3RFErZXZyeFBtTzJMeVZyZ0MxT1pnQ0hpR0NwMnNiOWt6VURBRndnVlp6aGFzY2hjeEZ1WnNDVHBlR0ZPNmQ2QVdkeTJGWVBBRW1QaWxYQ2ZVcGFydWhWV3RZNXd5Yzk0aXo2and1a3dyVlpqQngxa0hxWFRaRDlJaGlDd0d3UDhyaWJGV21jeGlHeFdNWU0rUThVVFVFS0tWNkF4ZjVYbzNOOGNSNUhEalU3N29Nd1JOZFF5UllwamI3K1ZXNHp1WkVoSWVCQS95cXd4QXVvbTZJZzltV2ZzakY3dERabklueUNQaG5PRVA0aUxvaFFMaEtxem5QeXlLMW52T0o4eUJadmdIVEVEelJOd1NBc0Z5cnZIbDQxZVlIS1BjRGZiMG96eEF0Y3NNUThEVUt1VEhUUXJTT3k0QmZrZ2c3TitRaHVXSUlnR3QxQm1la20xbHRya2E0bCtpdXpSZzhJSmNNWWFIY3BsUGNkM1cwamtuQXJlVFc5MkZJZzF4N0FBWlQ0dTRBWXExak9zSlNOQVEzV2hzQ0o5Y01BY3BVcmVYRWxENDZpM293SjJQa01HK2cvTkpOQm5lRzZPSnhKUFJubXhZUTV3NjFlNy9pUzBGMEZxMG9kZGtVWnNnYW00QnFDamxPUnJzN2Z0VFZBRktXOFRmZyt6cUZFY1JwQVpjblltU1A0YlJ6QTFDLzh4dHFZOUhKQ3BTZkJLREw0Qzl4NEQ2S21DcWw2UjB3bDFhWFNacFp4MWFPUXlrbjZQdmVla09vMFZxR2QzOUpMNkdBVHU1RWpCbHlEdUZSTEk2VEt4aWJyaGtnZ3pHRXJLQkRGdE5LSjBjQWkwbWNYaEVtaW9semo5cUpWbEJ0aWhuS2FvUXJneFptOEpTM0VFcmxDczZSeTNrbDA4SXlIbFRMTWo2U1ZtSUl3NEdITWkzUFk0NmpnM0tkVEI4NldRUCtSOGNhc3NabW9KNU9oc3NWM2wxZzQ5a2lsTFN3SGpoUFkxeUNNQjg0M0t1eU0wS1l6VDVjQkp3U3RCU0RKeWh3TDUxVXlUZys4THB3ejZkZHBaVTFER0FJUWpud2lkZmxwMEZmakJseWhXZFJUcE94alBYRERPRFRPb1RZdEVzenJSUXhERmdCNXRwYVEwYThoM0lsWXpoSnJ1UnBQeXZ5ZFdGTzVyTlJtcGtJbkFUOHdjKzZERG5KVnFDSnZneVZxMWdwZ3ZwZFlWWUMyYVNaNXhTK1F3VVhBd3VBdzdKUnJ5SFNyRVdaTEZmeDEyeFdtclhRRFFHVlJhemhNNzZKVUUvQy9RYkR6cnlBY29aY3hTZ1psMTB6UUFDeFRMS0NMYklRbXdJR0E2dkEvMmJRRUFrK0FzcnB4N2RsSEU4RUpTS3c0RDZaejd0eUUyT0JVeEJ6M1cwZTB3RXNwcDBqWkJ5dFVocnNBbS9nMGE2eWtHZm94Mm5PQ25KS0I0OFpjb1oxd0xFeW5waE1ERWNJVU9DR2dNU0ZpYktBbFNoSE9PT0x6L2VZeVJCbE5tQnhvWXpuWEJuUEcwR0w2VTRvREpGRUZySlo1bU5Ud0ZHSWQ4dnhodER3TWNway9zNVJNbzdmQkMybUowSzVmMWdhZVFzbzFXck9kc0xNaCs4cGp5SDh5SVRNRDRMd20xQzFFRHNqalR4S0NjY2pUSVQwUTNvTmhsUUp0U0VBeEtaVEdsbUJNQVNsQ1dnUFdwTWhkd205SVpKSUk1dGtQdFhFT1JyQzJmODBSSi9JR0NLSnpHZUROSEloY0M2RWE0YkNFSDBpWjRnazBzZzZQdUpZSjh3OEZIUFlodWdUV1VPQXM0MTFIcTNBRWM0RkttSGJ4bXFJR0pFMlJCSzVrWS9rUm1MRU9SRjRQR2c5aHVpU0U0WklJbzI4S1BNNEUvZ0I4SGJRZWd6Ukk2Y01rVVFhYUdNTDMwS3BCajROV284aE91U2tJUUNrbWEweWp5WUtHWXFhYmF5RzFNaFpReVFSbTQzU3dFU1VreENlQ2xwUHhQZ3Y0dHN2dmM4TGN0NFFTYVNCNTVqTjZRaWx3RHRCNndrNWJ3TG55eVQrVXlibjExZ3Nid3dCempiVzJheWhnR0Vrem4zZEZyU21rUEV4U2puL1pMaE00cmRCaXdtQ3ZESkVFckhaSXJPeHNSZ0VyQ0lMcHptRW5FNWdCVVVNa2NtMGlrMW4wSUtDSWk4TmtVUnMzcFhaaktXTHM0Q1hndFlUQ01vanhEbE9Kak5SSnZMUG9PVUVUVjRiSW9uTTRmY0lKK1RaTnRhL0lKUktHU01reG10Qml3a0x4aEFPWWhNWG01WEFrWkRUMjFnL1E2a0hoc3Rrc3l0eFo0d2hka0pzUGhNYm13S0dRMDQ5TUhGZ0ZjcVJFc09Xc3B3MWZFYUVjZ3RwR0pCYS9nS1VhajNuQU0xRWV4dnJNeWd4S2VlWm9JV0VIZE5DN0FHWnhTTW94ME1rdDdHK0MxeEpqRk9NR1ZMREdDSUZ4S1pUNmxoQm5LRWtia3NLKzdUa0ZxQ2VPSU9sUER1SEJPY0t4aEF1RUp1UHBZNFlCUXhIZVRCb1BUMmd3QnE2K0taTXdaWUtjMzZ1Vzh3WUlnMmtoamVCQzNRT0kwaTBHTU1DbGdUQzgwQk1wcGhyQnpMQnRCQVpJTFdzNDhzY0UvQnRyTzhqVE9UZmZOdVlJWE9NSVRKRUp0SWh0YlJpY1FTUzFXMnM3Y0JpaWhncVUxZ2h0Z2x2OXdKakNJK1FHajZTR21MQXQ4SDM0OXpYWWpGTXBoS1RzbERjNDVjem1ER0V4OGdNWGdETzBMbU13cUxWNCtMZlJEaGJwdktZeCtVYURQNmpOaVhheUJsQjZ6Q2t6djhEUWQ3UXJNYkxSMUFBQUFBQVNVVk9SSzVDWUlJPSI+Cgo8c3R5bGU+CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8nKSwgbG9jYWwoJ1JvYm90by1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vdVlFQ01Lb0hjTzl4MXdkbWJ5SEltMy1fa2Y2QnlZTzZDTFlkQjRIUUUtWS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL3NUZGFBNmowUHNiOTIwVmp2LW1yekgtX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9fVllGeC1zODI0a1hxX1VsMkJIcVlILV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by90bmo0U0I2RE5iZGFRbnNNOENGcUJYLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9vTU1nZlpNUXRoT3J5UW85bjIyZGN1dnZEaW4xcEs4YUt0ZUxwZVo1YzBBLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90bycpLCBsb2NhbCgnUm9ib3RvLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9Lc19jVnhpQ2l3VVdWc0ZXRkEzQmpuLV9rZjZCeVlPNkNMWWRCNEhRRS1ZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvJyksIGxvY2FsKCdSb2JvdG8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL05KNHZ4bGdXd1diRXN2MThkQWhxbm4tX2tmNkJ5WU82Q0xZZEI0SFFFLVkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vaXNaLXdiQ1hOS0FibmpvNl9Ud0hUb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vNzdGWEZqUmJHek40YUNyU0ZobGgzb1gwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8valNOMkNHVkRiY1Z5Q25mSmZqU2RmSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9VWDZpNEp4UURtM2ZWVGMxQ1B1d3FvWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL2QtNklZcGxPRm9jQ2FjS3p4d1hTT0pCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQnKSwgbG9jYWwoJ1JvYm90by1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vOTd1YWh4aXFaUm9uY0JhQ0VJM2FXNFgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkJyksIGxvY2FsKCdSb2JvdG8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL1B3WmMtWWJJTDQxNHdCOXJCMUlBUFlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEJvbGQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tQm9sZEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3Q2TmQ0Y2ZQUmhaUDQ0UTVRQWpjQzE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0NfWnJhUjJUZzh3Mmx6bTdrTE5MMC13LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDd3RfUm02OTFMVGViS2ZZMlprS1NtSS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDM3MC0wM0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDMUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDNGdwOVE4Z2JZcmhxR2xSYXZfSVhmay53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gQm9sZCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1Cb2xkSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vdDZOZDRjZlBSaFpQNDRRNVFBamNDNkU4a000eFdSMV8xYllVUlJvalJHYy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMjRGLCBVKzFFMDAtMUVGRiwgVSsyMEEwLTIwQUIsIFUrMjBBRC0yMENGLCBVKzJDNjAtMkM3RiwgVStBNzIwLUE3RkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBCb2xkIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUJvbGRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by90Nk5kNGNmUFJoWlA0NFE1UUFqY0M5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PcFhVcVRvMFVnUVFoR2pfU0ZkTFdCa0F6NHJZbjQ3WnkycnZpZ1dRZjZ3LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vV3hyWEphMEMzS2R0QzdsTWFmRzRkUmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL2NES2hSYVhuUVRPVmJhb3h3ZE9yOXhrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzFoWmYwMlBPQU5oMzJrMlZrZ0VvVUJrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3ZQY3luU0wwcUhxXzZkWDdsS1ZCeVhZaGpiU3B2YzQ3ZWU2eFJfODBIbncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL3ZTenVsZktTSzBMTGpqZmVheGNSRWhrQXo0clluNDdaeTJydmlnV1FmNncud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vSzIzY3hXVlRySUZENkRKc0VWaTA3UmtBejRyWW40N1p5MnJ2aWdXUWY2dy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0ZsNHkwUWRPeHl5VEhFR01YWDhrY1lYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vMGVDNmZsMDZsdVhFWVdwQlNKdlhDSVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9JM1Mxd3NnU2c5WUN1clY2UFVrVE9ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCcpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0JyksIHVybCgvZm9udC1yb2JvdG8vLUwxNEprMDZtNnBVSEItNW1YUVFuWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQnKSwgbG9jYWwoJ1JvYm90by1MaWdodCcpLCB1cmwoL2ZvbnQtcm9ib3RvL0hnbzEzay10ZlNwbjBxaTFTRmRVZlpCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9QcnUzM3FqU2hwWlNtRzN6NlZZd25ZWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0JyksIGxvY2FsKCdSb2JvdG8tTGlnaHQnKSwgdXJsKC9mb250LXJvYm90by9OWURXQmRENGdJcTI2RzVYWWJIc0ZJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdF9acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdHd0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiAzMDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIExpZ2h0IEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLUxpZ2h0SXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vN204bDdUbEZPLVMzVmtoSHVSMGF0MUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogMzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBMaWdodCBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1MaWdodEl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvLzdtOGw3VGxGTy1TM1ZraEh1UjBhdDZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDMwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTGlnaHQgSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTGlnaHRJdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by83bThsN1RsRk8tUzNWa2hIdVIwYXQ5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0nKSwgbG9jYWwoJ1JvYm90by1NZWRpdW0nKSwgdXJsKC9mb250LXJvYm90by9vSGkzMGt3UVd2cENXcUFoekhjQ1NJWDBoVmd6WlFVZlJEdVpyUHZIM0Q4LndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDAwLTA0NUYsIFUrMDQ5MC0wNDkxLCBVKzA0QjAtMDRCMSwgVSsyMTE2Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vWkxxS2VlbFliQVRHNjBFcFpCU0R5NFgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL214OVVjazZ1QjYzVklLRlluRU1YcllYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL3JHdkhkSm5yMmw3NXFiMFlORDlOeUlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzFGMDAtMUZGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL1J4WkpkbnplbzNSNXpTZXhnZThVVVpCdzF4VTFyS3B0SmpfMGphbnM5MjAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bScpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bScpLCB1cmwoL2ZvbnQtcm9ib3RvL29PZUZ3Wk5sclRlZnpMWW1sVlYxVUlYMGhWZ3paUVVmUkR1WnJQdkgzRDgud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtJyksIHVybCgvZm9udC1yb2JvdG8vbWJtaHByTUg2OVppNmVFUEJZVkZoWVgwaFZnelpRVWZSRHVaclB2SDNEOC53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMi0wMTAzLCBVKzFFQTAtMUVGOSwgVSsyMEFCOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFY0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwZlpyYVIyVGc4dzJsem03a0xOTDAtdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQ2MC0wNTJGLCBVKzIwQjQsIFUrMkRFMC0yREZGLCBVK0E2NDAtQTY5RjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBRdF9SbTY5MUxUZWJLZlkyWmtLU21JLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMzcwLTAzRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nOwogIGZvbnQtc3R5bGU6IGl0YWxpYzsKICBmb250LXdlaWdodDogNTAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNZWRpdW0gSXRhbGljJyksIGxvY2FsKCdSb2JvdG8tTWVkaXVtSXRhbGljJyksIHVybCgvZm9udC1yb2JvdG8vT0xmZkdCVGFGMFhGT1cxZ251SEYwVkJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvJzsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC13ZWlnaHQ6IDUwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTWVkaXVtIEl0YWxpYycpLCBsb2NhbCgnUm9ib3RvLU1lZGl1bUl0YWxpYycpLCB1cmwoL2ZvbnQtcm9ib3RvL09MZmZHQlRhRjBYRk9XMWdudUhGMFlncDlROGdiWXJocUdsUmF2X0lYZmsud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkM2LCBVKzAyREEsIFUrMDJEQywgVSsyMDAwLTIwNkYsIFUrMjA3NCwgVSsyMEFDLCBVKzIyMTIsIFUrMjIxNTsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBhRThrTTR4V1IxXzFiWVVSUm9qUkdjLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAwLTAyNEYsIFUrMUUwMC0xRUZGLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQ0YsIFUrMkM2MC0yQzdGLCBVK0E3MjAtQTdGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byc7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiA1MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1lZGl1bSBJdGFsaWMnKSwgbG9jYWwoJ1JvYm90by1NZWRpdW1JdGFsaWMnKSwgdXJsKC9mb250LXJvYm90by9PTGZmR0JUYUYwWEZPVzFnbnVIRjBkRGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTE0c1lZZEpnNWRVMnF6SkVWU3V0YTAud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0MDAtMDQ1RiwgVSswNDkwLTA0OTEsIFUrMDRCMC0wNEIxLCBVKzIxMTY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWV9acmFSMlRnOHcybHptN2tMTkwwLXcud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzA0NjAtMDUyRiwgVSsyMEI0LCBVKzJERTAtMkRGRiwgVStBNjQwLUE2OUY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWXd0X1JtNjkxTFRlYktmWTJaa0tTbUkud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDQwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubycpLCBsb2NhbCgnUm9ib3RvTW9uby1SZWd1bGFyJyksIHVybCgvZm9udC1yb2JvdG8vaE1xUE5Mc3VfZHl3TWE0Q19ERXBZMUJXMjZReHBTai1fWkttX3hUNGhXdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMUYwMC0xRkZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk0Z3A5UThnYllyaHFHbFJhdl9JWGZrLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMDAwLTAwRkYsIFUrMDEzMSwgVSswMTUyLTAxNTMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMjAwMC0yMDZGLCBVKzIwNzQsIFUrMjBBQywgVSsyMjEyLCBVKzIyMTU7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA0MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8nKSwgbG9jYWwoJ1JvYm90b01vbm8tUmVndWxhcicpLCB1cmwoL2ZvbnQtcm9ib3RvL2hNcVBOTHN1X2R5d01hNENfREVwWTZFOGtNNHhXUjFfMWJZVVJSb2pSR2Mud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNDAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vJyksIGxvY2FsKCdSb2JvdG9Nb25vLVJlZ3VsYXInKSwgdXJsKC9mb250LXJvYm90by9oTXFQTkxzdV9keXdNYTRDX0RFcFk5RGlOc1I1YS05T2VfSXZwdThYV2xZLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswMTAyLTAxMDMsIFUrMUVBMC0xRUY5LCBVKzIwQUI7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6MXgtTTFJMXc1T01pcW5WRjh4QkxoVS53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDQwMC0wNDVGLCBVKzA0OTAtMDQ5MSwgVSswNEIwLTA0QjEsIFUrMjExNjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5Rnp3WGFBWHVwNW1abGZLNnhSTHJoc2NvLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSswNDYwLTA1MkYsIFUrMjBCNCwgVSsyREUwLTJERkYsIFUrQTY0MC1BNjlGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGenduNldxeG8teHd4aWxEWFBVOGNoVlUud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAzNzAtMDNGRjsKfQpAZm9udC1mYWNlIHsKICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJzsKICBmb250LXN0eWxlOiBub3JtYWw7CiAgZm9udC13ZWlnaHQ6IDcwMDsKICBzcmM6IGxvY2FsKCdSb2JvdG8gTW9ubyBCb2xkJyksIGxvY2FsKCdSb2JvdG9Nb25vLUJvbGQnKSwgdXJsKC9mb250LXJvYm90by9ONGR1VmM5QzU4dXdQaVk4XzU5RnoxVDdhSkxLNm5LcG4zNklNd1RjTU1jLndvZmYyKSBmb3JtYXQoJ3dvZmYyJyk7CiAgdW5pY29kZS1yYW5nZTogVSsxRjAwLTFGRkY7Cn0KQGZvbnQtZmFjZSB7CiAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubyc7CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgc3JjOiBsb2NhbCgnUm9ib3RvIE1vbm8gQm9sZCcpLCBsb2NhbCgnUm9ib3RvTW9uby1Cb2xkJyksIHVybCgvZm9udC1yb2JvdG8vTjRkdVZjOUM1OHV3UGlZOF81OUZ6Xzc5X1p1VXhDaWdNMkRlc3BUbkZhdy53b2ZmMikgZm9ybWF0KCd3b2ZmMicpOwogIHVuaWNvZGUtcmFuZ2U6IFUrMDAwMC0wMEZGLCBVKzAxMzEsIFUrMDE1Mi0wMTUzLCBVKzAyQzYsIFUrMDJEQSwgVSswMkRDLCBVKzIwMDAtMjA2RiwgVSsyMDc0LCBVKzIwQUMsIFUrMjIxMiwgVSsyMjE1Owp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejRnZDlPRVBVQ04zQWRZVzBlOHRhdDQud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDAtMDI0RiwgVSsxRTAwLTFFRkYsIFUrMjBBMC0yMEFCLCBVKzIwQUQtMjBDRiwgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGOwp9CkBmb250LWZhY2UgewogIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKICBmb250LXdlaWdodDogNzAwOwogIHNyYzogbG9jYWwoJ1JvYm90byBNb25vIEJvbGQnKSwgbG9jYWwoJ1JvYm90b01vbm8tQm9sZCcpLCB1cmwoL2ZvbnQtcm9ib3RvL040ZHVWYzlDNTh1d1BpWThfNTlGejhiSVFTWVpuV0xhV0M5UU5DcFRLX1Uud29mZjIpIGZvcm1hdCgnd29mZjInKTsKICB1bmljb2RlLXJhbmdlOiBVKzAxMDItMDEwMywgVSsxRUEwLTFFRjksIFUrMjBBQjsKfQo8L3N0eWxlPgoKCgo8c3R5bGU+Lm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtd2VpZ2h0OjYwMDtmb250LXNpemU6MTJweDtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjlweH0ubWF0LWJhZGdlLWxhcmdlIC5tYXQtYmFkZ2UtY29udGVudHtmb250LXNpemU6MjRweH0ubWF0LWgxLC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaGVhZGxpbmUsLm1hdC10eXBvZ3JhcGh5IGgxe2ZvbnQ6NDAwIDI0cHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgyLC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtdGl0bGUsLm1hdC10eXBvZ3JhcGh5IGgye2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWgzLC5tYXQtc3ViaGVhZGluZy0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgzLC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgaDN7Zm9udDo0MDAgMTZweC8yOHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDQsLm1hdC1zdWJoZWFkaW5nLTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDQsLm1hdC10eXBvZ3JhcGh5IC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSBoNHtmb250OjQwMCAxNXB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgLm1hdC1oNSwubWF0LXR5cG9ncmFwaHkgaDV7Zm9udDo0MDAgY2FsYygxNHB4ICogMC44MykvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bWFyZ2luOjAgMCAxMnB4fS5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDYsLm1hdC10eXBvZ3JhcGh5IGg2e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuNjcpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWJvZHktc3Ryb25nLC5tYXQtYm9keS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktc3Ryb25nLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMntmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHksLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEsLm1hdC10eXBvZ3JhcGh5e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYm9keSBwLC5tYXQtYm9keS0xIHAsLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSBwe21hcmdpbjowIDAgMTJweH0ubWF0LXNtYWxsLC5tYXQtY2FwdGlvbiwubWF0LXR5cG9ncmFwaHkgLm1hdC1zbWFsbCwubWF0LXR5cG9ncmFwaHkgLm1hdC1jYXB0aW9ue2ZvbnQ6NDAwIDEycHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZGlzcGxheS00LC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktNHtmb250OjMwMCAxMTJweC8xMTJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDVlbTttYXJnaW46MCAwIDU2cHh9Lm1hdC1kaXNwbGF5LTMsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ze2ZvbnQ6NDAwIDU2cHgvNTZweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDJlbTttYXJnaW46MCAwIDY0cHh9Lm1hdC1kaXNwbGF5LTIsLm1hdC10eXBvZ3JhcGh5IC5tYXQtZGlzcGxheS0ye2ZvbnQ6NDAwIDQ1cHgvNDhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6LTAuMDA1ZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMXtmb250OjQwMCAzNHB4LzQwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDY0cHh9Lm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtYnV0dG9uLC5tYXQtcmFpc2VkLWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbiwubWF0LWZhYiwubWF0LW1pbmktZmFie2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1idXR0b24tdG9nZ2xle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmR7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2FyZC10aXRsZXtmb250LXNpemU6MjRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYXJkLWhlYWRlciAubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjIwcHh9Lm1hdC1jYXJkLXN1YnRpdGxlLC5tYXQtY2FyZC1jb250ZW50e2ZvbnQtc2l6ZToxNHB4fS5tYXQtY2hlY2tib3h7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtY2hlY2tib3gtbGF5b3V0IC5tYXQtY2hlY2tib3gtbGFiZWx7bGluZS1oZWlnaHQ6MjRweH0ubWF0LWNoaXB7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbi5tYXQtaWNvbiwubWF0LWNoaXAgLm1hdC1jaGlwLXJlbW92ZS5tYXQtaWNvbntmb250LXNpemU6MThweH0ubWF0LXRhYmxle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWhlYWRlci1jZWxse2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNlbGwsLm1hdC1mb290ZXItY2VsbHtmb250LXNpemU6MTRweH0ubWF0LWNhbGVuZGFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhbGVuZGFyLWJvZHl7Zm9udC1zaXplOjEzcHh9Lm1hdC1jYWxlbmRhci1ib2R5LWxhYmVsLC5tYXQtY2FsZW5kYXItcGVyaW9kLWJ1dHRvbntmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIgdGh7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZGlhbG9nLXRpdGxle2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnR7Zm9udDo0MDAgMTRweC8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1mb3JtLWZpZWxke2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjEyNTtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3BhZGRpbmctYm90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxLjEyNX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2hlaWdodDoxLjVlbTt3aWR0aDoxLjVlbX0ubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbiAubWF0LWljb257aGVpZ2h0OjEuMTI1ZW07bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e3BhZGRpbmc6LjVlbSAwO2JvcmRlci10b3A6Ljg0Mzc1ZW0gc29saWQgcmdiYSgwLDAsMCwwKX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzVlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4zNDM3NGVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXJ7dG9wOi0wLjg0Mzc1ZW07cGFkZGluZy10b3A6Ljg0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlcntmb250LXNpemU6NzUlO21hcmdpbi10b3A6LjY2NjY2NjY2NjdlbTt0b3A6Y2FsYygxMDAlIC0gMS43OTE2NjY2NjY3ZW0pfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjI1ZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi40Mzc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcjpmb2N1cysubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDFweCk7d2lkdGg6MTMzLjMzMzMzMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwMXB4KTt3aWR0aDoxMzMuMzMzMzQzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDJweCk7d2lkdGg6MTMzLjMzMzM1MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyMmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTIxZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODEyZW0pIHNjYWxlKDAuNzUpfX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi4yNWVtIDAgLjc1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4wOTM3NWVtO21hcmdpbi10b3A6LTAuNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0wLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOjFlbSAwIDFlbSAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RvcDoxLjg0Mzc1ZW07bWFyZ2luLXRvcDotMC4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0Lm1hdC1mb3JtLWZpZWxkLXNob3VsZC1mbG9hdCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc1ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzMzMzMzMzJX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjU5Mzc0ZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNDMzMzMzJX0ubWF0LWdyaWQtdGlsZS1oZWFkZXIsLm1hdC1ncmlkLXRpbGUtZm9vdGVye2ZvbnQtc2l6ZToxNHB4fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmUsLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKSwubWF0LWdyaWQtdGlsZS1mb290ZXIgLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fWlucHV0Lm1hdC1pbnB1dC1lbGVtZW50e21hcmdpbi10b3A6LTAuMDYyNWVtfS5tYXQtbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo0MDB9Lm1hdC1wYWdpbmF0b3IsLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4fS5tYXQtcmFkaW8tYnV0dG9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNlbGVjdHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3QtdHJpZ2dlcntoZWlnaHQ6MS4xMjVlbX0ubWF0LXNsaWRlLXRvZ2dsZS1jb250ZW50e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLC5tYXQtc3RlcHBlci1ob3Jpem9udGFse2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXN0ZXAtbGFiZWx7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtc3RlcC1zdWItbGFiZWwtZXJyb3J7Zm9udC13ZWlnaHQ6bm9ybWFsfS5tYXQtc3RlcC1sYWJlbC1lcnJvcntmb250LXNpemU6MTRweH0ubWF0LXN0ZXAtbGFiZWwtc2VsZWN0ZWR7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdGFiLWdyb3Vwe2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1saW5re2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lm1hdC10b29sYmFyLC5tYXQtdG9vbGJhciBoMSwubWF0LXRvb2xiYXIgaDIsLm1hdC10b29sYmFyIGgzLC5tYXQtdG9vbGJhciBoNCwubWF0LXRvb2xiYXIgaDUsLm1hdC10b29sYmFyIGg2e2ZvbnQ6NTAwIDIwcHgvMzJweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowfS5tYXQtdG9vbHRpcHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEwcHg7cGFkZGluZy10b3A6NnB4O3BhZGRpbmctYm90dG9tOjZweH0ubWF0LXRvb2x0aXAtaGFuZHNldHtmb250LXNpemU6MTRweDtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4fS5tYXQtbGlzdC1pdGVte2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxNnB4fS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTRweH0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3QtaXRlbXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9ue2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1vcHRpb24gLm1hdC1saW5lOm50aC1jaGlsZChuKzIpe2ZvbnQtc2l6ZToxMnB4fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LXN1YmhlYWRlcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtb3B0aW9ue2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTZweH0ubWF0LW9wdGdyb3VwLWxhYmVse2ZvbnQ6NTAwIDE0cHgvMjRweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtc2ltcGxlLXNuYWNrYmFye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTRweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257bGluZS1oZWlnaHQ6MTtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRyZWV7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHh9Lm1hdC1yaXBwbGV7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtcmlwcGxlOm5vdCg6ZW1wdHkpe3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5tYXQtcmlwcGxlLm1hdC1yaXBwbGUtdW5ib3VuZGVke292ZXJmbG93OnZpc2libGV9Lm1hdC1yaXBwbGUtZWxlbWVudHtwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXItcmFkaXVzOjUwJTtwb2ludGVyLWV2ZW50czpub25lO3RyYW5zaXRpb246b3BhY2l0eSx0cmFuc2Zvcm0gMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO3RyYW5zZm9ybTpzY2FsZTNkKDAsIDAsIDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yaXBwbGUtZWxlbWVudHtkaXNwbGF5Om5vbmV9LmNkay12aXN1YWxseS1oaWRkZW57Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjB9W2Rpcj1ydGxdIC5jZGstdmlzdWFsbHktaGlkZGVue2xlZnQ6YXV0bztyaWdodDowfS5jZGstb3ZlcmxheS1jb250YWluZXIsLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3B7dHJhbnNpdGlvbjp2aXNpYmlsaXR5IDFtcyBsaW5lYXIsb3BhY2l0eSAxbXMgbGluZWFyO3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjA7dmlzaWJpbGl0eTp2aXNpYmxlfS5jZGstb3ZlcmxheS1iYWNrZHJvcC1ub29wLWFuaW1hdGlvbnt0cmFuc2l0aW9uOm5vbmV9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3h7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja3twb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfXRleHRhcmVhLmNkay10ZXh0YXJlYS1hdXRvc2l6ZXtyZXNpemU6bm9uZX10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5ne3BhZGRpbmc6MnB4IDAgIWltcG9ydGFudDtib3gtc2l6aW5nOmNvbnRlbnQtYm94ICFpbXBvcnRhbnQ7aGVpZ2h0OmF1dG8gIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudH10ZXh0YXJlYS5jZGstdGV4dGFyZWEtYXV0b3NpemUtbWVhc3VyaW5nLWZpcmVmb3h7cGFkZGluZzoycHggMCAhaW1wb3J0YW50O2JveC1zaXppbmc6Y29udGVudC1ib3ggIWltcG9ydGFudDtoZWlnaHQ6MCAhaW1wb3J0YW50fUBrZXlmcmFtZXMgY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnR7LyohKi99QGtleWZyYW1lcyBjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmR7LyohKi99LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDotd2Via2l0LWF1dG9maWxse2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1zdGFydCAwcyAxbXN9LmNkay10ZXh0LWZpZWxkLWF1dG9maWxsLW1vbml0b3JlZDpub3QoOi13ZWJraXQtYXV0b2ZpbGwpe2FuaW1hdGlvbjpjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1lbmQgMHMgMW1zfS5tYXQtZm9jdXMtaW5kaWNhdG9ye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTp2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXksIG5vbmUpO2JvcmRlcjp2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSB2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1zdHlsZSwgc29saWQpIHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci1yYWRpdXMsIDRweCl9Lm1hdC1mb2N1cy1pbmRpY2F0b3I6Zm9jdXM6OmJlZm9yZXtjb250ZW50OiIifS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmV7LS1tYXQtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXk6IGJsb2NrfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcntwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LW1kYy1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9pbnRlci1ldmVudHM6bm9uZTtkaXNwbGF5OnZhcigtLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXksIG5vbmUpO2JvcmRlcjp2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgdmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXN0eWxlLCBzb2xpZCkgdmFyKC0tbWF0LW1kYy1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tYXQtbWRjLWZvY3VzLWluZGljYXRvci1ib3JkZXItcmFkaXVzLCA0cHgpfS5tYXQtbWRjLWZvY3VzLWluZGljYXRvcjpmb2N1czo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZXstLW1hdC1tZGMtZm9jdXMtaW5kaWNhdG9yLWRpc3BsYXk6IGJsb2NrfS5tYXQtYmFkZ2UtY29udGVudHtmb250LXdlaWdodDo2MDA7Zm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtYmFkZ2Utc21hbGwgLm1hdC1iYWRnZS1jb250ZW50e2ZvbnQtc2l6ZTo5cHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7Zm9udC1zaXplOjI0cHh9Lm1hdC1oMSwubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgxLC5tYXQtdHlwb2dyYXBoeSAubWF0LWhlYWRsaW5lLC5tYXQtdHlwb2dyYXBoeSBoMXtmb250OjQwMCAyNHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMiwubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSAubWF0LWgyLC5tYXQtdHlwb2dyYXBoeSAubWF0LXRpdGxlLC5tYXQtdHlwb2dyYXBoeSBoMntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MCAwIDE2cHh9Lm1hdC1oMywubWF0LXN1YmhlYWRpbmctMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1oMywubWF0LXR5cG9ncmFwaHkgLm1hdC1zdWJoZWFkaW5nLTIsLm1hdC10eXBvZ3JhcGh5IGgze2ZvbnQ6NDAwIDE2cHgvMjhweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO21hcmdpbjowIDAgMTZweH0ubWF0LWg0LC5tYXQtc3ViaGVhZGluZy0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWg0LC5tYXQtdHlwb2dyYXBoeSAubWF0LXN1YmhlYWRpbmctMSwubWF0LXR5cG9ncmFwaHkgaDR7Zm9udDo0MDAgMTVweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCAxNnB4fS5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IC5tYXQtaDUsLm1hdC10eXBvZ3JhcGh5IGg1e2ZvbnQ6NDAwIGNhbGMoMTRweCAqIDAuODMpLzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO21hcmdpbjowIDAgMTJweH0ubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSAubWF0LWg2LC5tYXQtdHlwb2dyYXBoeSBoNntmb250OjQwMCBjYWxjKDE0cHggKiAwLjY3KS8yMHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjttYXJnaW46MCAwIDEycHh9Lm1hdC1ib2R5LXN0cm9uZywubWF0LWJvZHktMiwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LXN0cm9uZywubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTJ7Zm9udDo1MDAgMTRweC8yNHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWx9Lm1hdC1ib2R5LC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHksLm1hdC10eXBvZ3JhcGh5IC5tYXQtYm9keS0xLC5tYXQtdHlwb2dyYXBoeXtmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJvZHkgcCwubWF0LWJvZHktMSBwLC5tYXQtdHlwb2dyYXBoeSAubWF0LWJvZHkgcCwubWF0LXR5cG9ncmFwaHkgLm1hdC1ib2R5LTEgcCwubWF0LXR5cG9ncmFwaHkgcHttYXJnaW46MCAwIDEycHh9Lm1hdC1zbWFsbCwubWF0LWNhcHRpb24sLm1hdC10eXBvZ3JhcGh5IC5tYXQtc21hbGwsLm1hdC10eXBvZ3JhcGh5IC5tYXQtY2FwdGlvbntmb250OjQwMCAxMnB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWRpc3BsYXktNCwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTR7Zm9udDozMDAgMTEycHgvMTEycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjA1ZW07bWFyZ2luOjAgMCA1NnB4fS5tYXQtZGlzcGxheS0zLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktM3tmb250OjQwMCA1NnB4LzU2cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAyZW07bWFyZ2luOjAgMCA2NHB4fS5tYXQtZGlzcGxheS0yLC5tYXQtdHlwb2dyYXBoeSAubWF0LWRpc3BsYXktMntmb250OjQwMCA0NXB4LzQ4cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOi0wLjAwNWVtO21hcmdpbjowIDAgNjRweH0ubWF0LWRpc3BsYXktMSwubWF0LXR5cG9ncmFwaHkgLm1hdC1kaXNwbGF5LTF7Zm9udDo0MDAgMzRweC80MHB4IFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luOjAgMCA2NHB4fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntmb250OjQwMCAxNHB4LzIwcHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWJ1dHRvbiwubWF0LXJhaXNlZC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbiwubWF0LXN0cm9rZWQtYnV0dG9uLC5tYXQtZmxhdC1idXR0b24sLm1hdC1mYWIsLm1hdC1taW5pLWZhYntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtYnV0dG9uLXRvZ2dsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYXJke2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNhcmQtdGl0bGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FyZC1oZWFkZXIgLm1hdC1jYXJkLXRpdGxle2ZvbnQtc2l6ZToyMHB4fS5tYXQtY2FyZC1zdWJ0aXRsZSwubWF0LWNhcmQtY29udGVudHtmb250LXNpemU6MTRweH0ubWF0LWNoZWNrYm94e2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LWNoZWNrYm94LWxheW91dCAubWF0LWNoZWNrYm94LWxhYmVse2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1jaGlwe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWNoaXAgLm1hdC1jaGlwLXRyYWlsaW5nLWljb24ubWF0LWljb24sLm1hdC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUubWF0LWljb257Zm9udC1zaXplOjE4cHh9Lm1hdC10YWJsZXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1oZWFkZXItY2VsbHtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo1MDB9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Zm9udC1zaXplOjE0cHh9Lm1hdC1jYWxlbmRhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1jYWxlbmRhci1ib2R5e2ZvbnQtc2l6ZToxM3B4fS5tYXQtY2FsZW5kYXItYm9keS1sYWJlbCwubWF0LWNhbGVuZGFyLXBlcmlvZC1idXR0b257Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtY2FsZW5kYXItdGFibGUtaGVhZGVyIHRoe2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWRpYWxvZy10aXRsZXtmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1jb250ZW50e2ZvbnQ6NDAwIDE0cHgvMjBweCBSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7bGV0dGVyLXNwYWNpbmc6bm9ybWFsfS5tYXQtZm9ybS1maWVsZHtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xMjU7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LWZvcm0tZmllbGQtd3JhcHBlcntwYWRkaW5nLWJvdHRvbToxLjM0Mzc1ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb257Zm9udC1zaXplOjE1MCU7bGluZS1oZWlnaHQ6MS4xMjV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uLC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntoZWlnaHQ6MS41ZW07d2lkdGg6MS41ZW19Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2hlaWdodDoxLjEyNWVtO2xpbmUtaGVpZ2h0OjEuMTI1fS5tYXQtZm9ybS1maWVsZC1pbmZpeHtwYWRkaW5nOi41ZW0gMDtib3JkZXItdG9wOi44NDM3NWVtIHNvbGlkIHJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjM0MzczZW0pIHNjYWxlKDAuNzUpO3dpZHRoOjEzMy4zMzMzNTMzMzMzJX0ubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyW2xhYmVsXTpub3QoOmxhYmVsLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMzQzNzJlbSkgc2NhbGUoMC43NSk7d2lkdGg6MTMzLjMzMzM2MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye3RvcDotMC44NDM3NWVtO3BhZGRpbmctdG9wOi44NDM3NWVtfS5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS4zNDM3NWVtfS5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym90dG9tOjEuMzQzNzVlbX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7Zm9udC1zaXplOjc1JTttYXJnaW4tdG9wOi42NjY2NjY2NjY3ZW07dG9wOmNhbGMoMTAwJSAtIDEuNzkxNjY2NjY2N2VtKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXdyYXBwZXJ7cGFkZGluZy1ib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouNDM3NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDZweCk7d2lkdGg6MTMzLjMzMzM5MzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEuMjgxMjVlbSkgc2NhbGUoMC43NSkgcGVyc3BlY3RpdmUoMTAwcHgpIHRyYW5zbGF0ZVooMC4wMDEwN3B4KTt3aWR0aDoxMzMuMzMzNDAzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdCAubWF0LWlucHV0LXNlcnZlcltsYWJlbF06bm90KDpsYWJlbC1zaG93bikrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTI1ZW0pIHNjYWxlKDAuNzUpIHBlcnNwZWN0aXZlKDEwMHB4KSB0cmFuc2xhdGVaKDAuMDAxMDhweCk7d2lkdGg6MTMzLjMzMzQxMzMzMzMlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMjgxMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtib3R0b206MS4yNWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7bWFyZ2luLXRvcDouNTQxNjY2NjY2N2VtO3RvcDpjYWxjKDEwMCUgLSAxLjY2NjY2NjY2NjdlbSl9QG1lZGlhIHByaW50ey5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODExNmVtKSBzY2FsZSgwLjc1KX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1hdXRvZmlsbC1jb250cm9sOi13ZWJraXQtYXV0b2ZpbGwrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0xLjI4MTE1ZW0pIHNjYWxlKDAuNzUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS4yODExNGVtKSBzY2FsZSgwLjc1KX19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzouMjVlbSAwIC43NWVtIDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtbGFiZWx7dG9wOjEuMDkzNzVlbTttYXJnaW4tdG9wOi0wLjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3M2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMC41OTM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtaW5maXh7cGFkZGluZzoxZW0gMCAxZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0b3A6MS44NDM3NWVtO21hcmdpbi10b3A6LTAuMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IC5tYXQtaW5wdXQtc2VydmVyOmZvY3VzKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3M2VtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzUzMzMzMyV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbbGFiZWxdOm5vdCg6bGFiZWwtc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMS41OTM3MmVtKSBzY2FsZSgwLjc1KTt3aWR0aDoxMzMuMzMzMzYzMzMzMyV9Lm1hdC1ncmlkLXRpbGUtaGVhZGVyLC5tYXQtZ3JpZC10aWxlLWZvb3Rlcntmb250LXNpemU6MTRweH0ubWF0LWdyaWQtdGlsZS1oZWFkZXIgLm1hdC1saW5lLC5tYXQtZ3JpZC10aWxlLWZvb3RlciAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtZ3JpZC10aWxlLWhlYWRlciAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMiksLm1hdC1ncmlkLXRpbGUtZm9vdGVyIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH1pbnB1dC5tYXQtaW5wdXQtZWxlbWVudHttYXJnaW4tdG9wOi0wLjA2MjVlbX0ubWF0LW1lbnUtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NDAwfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZjtmb250LXNpemU6MTJweH0ubWF0LXJhZGlvLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zZWxlY3R7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmfS5tYXQtc2VsZWN0LXRyaWdnZXJ7aGVpZ2h0OjEuMTI1ZW19Lm1hdC1zbGlkZS10b2dnbGUtY29udGVudHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtc3RlcHBlci12ZXJ0aWNhbCwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1zdGVwLWxhYmVse2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjQwMH0ubWF0LXN0ZXAtc3ViLWxhYmVsLWVycm9ye2ZvbnQtd2VpZ2h0Om5vcm1hbH0ubWF0LXN0ZXAtbGFiZWwtZXJyb3J7Zm9udC1zaXplOjE0cHh9Lm1hdC1zdGVwLWxhYmVsLXNlbGVjdGVke2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LXRhYi1ncm91cHtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5tYXQtdG9vbGJhciwubWF0LXRvb2xiYXIgaDEsLm1hdC10b29sYmFyIGgyLC5tYXQtdG9vbGJhciBoMywubWF0LXRvb2xiYXIgaDQsLm1hdC10b29sYmFyIGg1LC5tYXQtdG9vbGJhciBoNntmb250OjUwMCAyMHB4LzMycHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW46MH0ubWF0LXRvb2x0aXB7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O3BhZGRpbmctdG9wOjZweDtwYWRkaW5nLWJvdHRvbTo2cHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7Zm9udC1zaXplOjE0cHg7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweH0ubWF0LWxpc3QtaXRlbXtmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWZ9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjE2cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LWl0ZW0gLm1hdC1saW5le3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbSAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTZweH0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmU6bnRoLWNoaWxkKG4rMil7Zm9udC1zaXplOjE0cHh9Lm1hdC1saXN0LWJhc2UgLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LWl0ZW17Zm9udC1zaXplOjEycHh9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZXt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3h9Lm1hdC1saXN0LWJhc2VbZGVuc2VdIC5tYXQtbGlzdC1pdGVtIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbntmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1saXN0LW9wdGlvbiAubWF0LWxpbmV7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94fS5tYXQtbGlzdC1iYXNlW2RlbnNlXSAubWF0LWxpc3Qtb3B0aW9uIC5tYXQtbGluZTpudGgtY2hpbGQobisyKXtmb250LXNpemU6MTJweH0ubWF0LWxpc3QtYmFzZVtkZW5zZV0gLm1hdC1zdWJoZWFkZXJ7Zm9udC1mYW1pbHk6Um9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjUwMH0ubWF0LW9wdGlvbntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE2cHh9Lm1hdC1vcHRncm91cC1sYWJlbHtmb250OjUwMCAxNHB4LzI0cHggUm9ib3RvLCAiSGVsdmV0aWNhIE5ldWUiLCBzYW5zLXNlcmlmO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubWF0LXNpbXBsZS1zbmFja2Jhcntmb250LWZhbWlseTpSb2JvdG8sICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHh9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2xpbmUtaGVpZ2h0OjE7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDo1MDB9Lm1hdC10cmVle2ZvbnQtZmFtaWx5OlJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgc2Fucy1zZXJpZn0ubWF0LXRyZWUtbm9kZSwubWF0LW5lc3RlZC10cmVlLW5vZGV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4fS5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xKX0ubWF0LW9wdGlvbntjb2xvcjojMjEyMTIxfS5tYXQtb3B0aW9uOmhvdmVyOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCksLm1hdC1vcHRpb246Zm9jdXM6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX0ubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpe2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtb3B0aW9uLm1hdC1hY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCk7Y29sb3I6IzIxMjEyMX0ubWF0LW9wdGlvbi5tYXQtb3B0aW9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2Y1N2MwMH0ubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmY5ODAwfS5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjQ0MzM2fS5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6IzYxNjE2MX0ubWF0LW9wdGdyb3VwLWRpc2FibGVkIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOiM2MTYxNjF9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye2NvbG9yOiNmZmZ9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7Y29sb3I6I2IwYjBiMH0ubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXByaW1hcnkgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC1hY2NlbnQgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZXtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsLm1hdC13YXJuIC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQubWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCwubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWR7YmFja2dyb3VuZDojYjBiMGIwfS5tYXQtYXBwLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1lbGV2YXRpb24tejB7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejJ7Ym94LXNoYWRvdzowcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMnB4IDJweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16M3tib3gtc2hhZG93OjBweCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAzcHggNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo0e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo1e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDVweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxNHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo2e2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16N3tib3gtc2hhZG93OjBweCA0cHggNXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA3cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMnB4IDE2cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejh7Ym94LXNoYWRvdzowcHggNXB4IDVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOHB4IDEwcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXo5e2JveC1zaGFkb3c6MHB4IDVweCA2cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDlweCAxMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAzcHggMTZweCAycHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTB7Ym94LXNoYWRvdzowcHggNnB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTBweCAxNHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA0cHggMThweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTF7Ym94LXNoYWRvdzowcHggNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTFweCAxNXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA0cHggMjBweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTJ7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTN7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTNweCAxOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTR7Ym94LXNoYWRvdzowcHggN3B4IDlweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTRweCAyMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjZweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTV7Ym94LXNoYWRvdzowcHggOHB4IDlweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTVweCAyMnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMjhweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTZ7Ym94LXNoYWRvdzowcHggOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE2cHggMjRweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejE3e2JveC1zaGFkb3c6MHB4IDhweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxN3B4IDI2cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMnB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoxOHtib3gtc2hhZG93OjBweCA5cHggMTFweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMThweCAyOHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzRweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MTl7Ym94LXNoYWRvdzowcHggOXB4IDEycHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE5cHggMjlweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggN3B4IDM2cHggNnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIwe2JveC1zaGFkb3c6MHB4IDEwcHggMTNweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjBweCAzMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggMzhweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjF7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMXB4IDMzcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCA0MHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZWxldmF0aW9uLXoyMntib3gtc2hhZG93OjBweCAxMHB4IDE0cHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIycHggMzVweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQycHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1lbGV2YXRpb24tejIze2JveC1zaGFkb3c6MHB4IDExcHggMTRweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjNweCAzNnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWVsZXZhdGlvbi16MjR7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtdGhlbWUtbG9hZGVkLW1hcmtlcntkaXNwbGF5Om5vbmV9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWx7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcil7YmFja2dyb3VuZDojZmZmfS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1hY3RpdmUpOm5vdCg6aG92ZXIpOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6IzIxMjEyMX0ubWF0LWJhZGdle3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYmFkZ2UubWF0LWJhZGdle292ZXJmbG93OnZpc2libGV9Lm1hdC1iYWRnZS1oaWRkZW4gLm1hdC1iYWRnZS1jb250ZW50e2Rpc3BsYXk6bm9uZX0ubWF0LWJhZGdlLWNvbnRlbnR7cG9zaXRpb246YWJzb2x1dGU7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gMjAwbXMgZWFzZS1pbi1vdXQ7dHJhbnNmb3JtOnNjYWxlKDAuNik7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm5nLWFuaW1hdGUtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50LC5tYXQtYmFkZ2UtY29udGVudC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1iYWRnZS1jb250ZW50Lm1hdC1iYWRnZS1hY3RpdmV7dHJhbnNmb3JtOm5vbmV9Lm1hdC1iYWRnZS1zbWFsbCAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtsaW5lLWhlaWdodDoxNnB4fS5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LThweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xNnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMTZweH0ubWF0LWJhZGdlLXNtYWxsLm1hdC1iYWRnZS1hZnRlciAubWF0LWJhZGdlLWNvbnRlbnR7cmlnaHQ6LTE2cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTE2cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi04cHh9Lm1hdC1iYWRnZS1zbWFsbC5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi04cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2Utc21hbGwubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LThweH0ubWF0LWJhZGdlLW1lZGl1bSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjJweDtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1hYm92ZSAubWF0LWJhZGdlLWNvbnRlbnR7dG9wOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWxvdyAubWF0LWJhZGdlLWNvbnRlbnR7Ym90dG9tOi0xMXB4fS5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTIycHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbWVkaXVtLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6YXV0bztyaWdodDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0Oi0yMnB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjJweH0ubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0Oi0xMXB4fVtkaXI9cnRsXSAubWF0LWJhZGdlLW1lZGl1bS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYmVmb3JlIC5tYXQtYmFkZ2UtY29udGVudHtsZWZ0OmF1dG87cmlnaHQ6LTExcHh9Lm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTFweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1tZWRpdW0ubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDphdXRvO2xlZnQ6LTExcHh9Lm1hdC1iYWRnZS1sYXJnZSAubWF0LWJhZGdlLWNvbnRlbnR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFib3ZlIC5tYXQtYmFkZ2UtY29udGVudHt0b3A6LTE0cHh9Lm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYmVsb3cgLm1hdC1iYWRnZS1jb250ZW50e2JvdHRvbTotMTRweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTI4cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0yOHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMjhweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMjhweH0ubWF0LWJhZGdlLWxhcmdlLm1hdC1iYWRnZS1vdmVybGFwLm1hdC1iYWRnZS1iZWZvcmUgLm1hdC1iYWRnZS1jb250ZW50e2xlZnQ6LTE0cHh9W2Rpcj1ydGxdIC5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWJlZm9yZSAubWF0LWJhZGdlLWNvbnRlbnR7bGVmdDphdXRvO3JpZ2h0Oi0xNHB4fS5tYXQtYmFkZ2UtbGFyZ2UubWF0LWJhZGdlLW92ZXJsYXAubWF0LWJhZGdlLWFmdGVyIC5tYXQtYmFkZ2UtY29udGVudHtyaWdodDotMTRweH1bZGlyPXJ0bF0gLm1hdC1iYWRnZS1sYXJnZS5tYXQtYmFkZ2Utb3ZlcmxhcC5tYXQtYmFkZ2UtYWZ0ZXIgLm1hdC1iYWRnZS1jb250ZW50e3JpZ2h0OmF1dG87bGVmdDotMTRweH0ubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNTdjMDB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJhZGdlLWNvbnRlbnR7b3V0bGluZTpzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czowfS5tYXQtYmFkZ2UtYWNjZW50IC5tYXQtYmFkZ2UtY29udGVudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LWJhZGdlLXdhcm4gLm1hdC1iYWRnZS1jb250ZW50e2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZjQ0MzM2fS5tYXQtYmFkZ2UtZGlzYWJsZWQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2JkYmRiZDtjb2xvcjojNzU3NTc1fS5tYXQtYm90dG9tLXNoZWV0LWNvbnRhaW5lcntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKTtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b257Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCl9Lm1hdC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5e2NvbG9yOiNmNTdjMDB9Lm1hdC1idXR0b24ubWF0LWFjY2VudCwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50e2NvbG9yOiNmZjk4MDB9Lm1hdC1idXR0b24ubWF0LXdhcm4sLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1pY29uLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5tYXQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1pY29uLWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtvcGFjaXR5Oi4xO2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZDojMDAwfS5tYXQtc3Ryb2tlZC1idXR0b246bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKXtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtZmxhdC1idXR0b24sLm1hdC1yYWlzZWQtYnV0dG9uLC5tYXQtZmFiLC5tYXQtbWluaS1mYWJ7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnksLm1hdC1mYWIubWF0LXByaW1hcnksLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeXtjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudCwubWF0LWZhYi5tYXQtYWNjZW50LC5tYXQtbWluaS1mYWIubWF0LWFjY2VudHtjb2xvcjojZmZmfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtZmFiLm1hdC13YXJuLC5tYXQtbWluaS1mYWIubWF0LXdhcm57Y29sb3I6I2ZmZn0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSwubWF0LWZhYi5tYXQtcHJpbWFyeSwubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsLm1hdC1mYWIubWF0LWFjY2VudCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLC5tYXQtZmFiLm1hdC13YXJuLC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Lm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7Y29sb3I6IzIxMjEyMTtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6c29saWQgMXB4ICNlMGUwZTB9W2Rpcj1ydGxdIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZSsubWF0LWJ1dHRvbi10b2dnbGV7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpub25lO2JvcmRlci10b3A6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiM2MTYxNjF9Lm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojMjEyMTIxfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDAsMCwwLC4yNik7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJke2JhY2tncm91bmQ6I2ZmZn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiNiZGJkYmR9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXI6c29saWQgMXB4ICNlMGUwZTB9Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7bGluZS1oZWlnaHQ6NDhweH0ubWF0LWNhcmR7YmFja2dyb3VuZDojZmZmO2NvbG9yOiMyMTIxMjF9Lm1hdC1jYXJkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC1jYXJkLm1hdC1jYXJkLWZsYXQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtY2FyZC1zdWJ0aXRsZXtjb2xvcjojNjE2MTYxfS5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1jaGVja2JveC1jaGVja21hcmt7ZmlsbDojZmZmfS5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiNmZmYgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXByaW1hcnkgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LWFjY2VudCAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtd2FybiAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLC5tYXQtY2hlY2tib3gtZGlzYWJsZWQubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2IwYjBiMH0ubWF0LWNoZWNrYm94LWRpc2FibGVkOm5vdCgubWF0LWNoZWNrYm94LWNoZWNrZWQpIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOiNiMGIwYjB9Lm1hdC1jaGVja2JveC1kaXNhYmxlZCAubWF0LWNoZWNrYm94LWxhYmVse2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmNTdjMDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNmZjk4MDB9Lm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiMyMTIxMjF9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6IzIxMjEyMTtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWR7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye2JhY2tncm91bmQ6IzAwMH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Lm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fS5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX0ubWF0LXRhYmxle2JhY2tncm91bmQ6I2ZmZn0ubWF0LXRhYmxlIHRoZWFkLC5tYXQtdGFibGUgdGJvZHksLm1hdC10YWJsZSB0Zm9vdCxtYXQtaGVhZGVyLXJvdyxtYXQtcm93LG1hdC1mb290ZXItcm93LFttYXQtaGVhZGVyLXJvd10sW21hdC1yb3ddLFttYXQtZm9vdGVyLXJvd10sLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fW1hdC1yb3csbWF0LWhlYWRlci1yb3csbWF0LWZvb3Rlci1yb3csdGgubWF0LWhlYWRlci1jZWxsLHRkLm1hdC1jZWxsLHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWhlYWRlci1jZWxse2NvbG9yOiM2MTYxNjF9Lm1hdC1jZWxsLC5tYXQtZm9vdGVyLWNlbGx7Y29sb3I6IzIxMjEyMX0ubWF0LWNhbGVuZGFyLWFycm93e2ZpbGw6cmdiYSgwLDAsMCwuNTQpfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQgLm1hdC1jYWxlbmRhci1uZXh0LWJ1dHRvbiwubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLXByZXZpb3VzLWJ1dHRvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOiM2MTYxNjF9Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudCwubWF0LWRhdGUtcmFuZ2UtaW5wdXQtc2VwYXJhdG9ye2NvbG9yOiMyMTIxMjE7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojNzU3NTc1fS5tYXQtY2FsZW5kYXItYm9keS1pbi1wcmV2aWV3e2NvbG9yOnJnYmEoMCwwLDAsLjI0KX0ubWF0LWNhbGVuZGFyLWJvZHktdG9kYXk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4xOCl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NSwxMjQsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDUsIDEyNCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ1LCAxMjQsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjQpfS5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50e2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI1NSwxNTIsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZTo6YmVmb3Jle2JhY2tncm91bmQ6cmdiYSgyNDksMTcxLDAsLjIpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwgMTUyLCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3JlLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjU1LCAxNTIsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2UubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmFmdGVye2JhY2tncm91bmQ6I2E4ZGFiNX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTUyLDAsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4zKX19Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0NCw2Nyw1NCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gW2Rpcj1ydGxdIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1zdGFydDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMjQ0LCA2NywgNTQsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Lm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCwubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZDojNDZhMzVlfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzY7Y29sb3I6I2ZmZn0ubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjQpfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS10b2RheS5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtib3gtc2hhZG93Omluc2V0IDAgMCAwIDFweCAjZmZmfS5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1jYWxlbmRhci1ib2R5LWFjdGl2ZT4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsNjcsNTQsLjMpfUBtZWRpYShob3ZlcjogaG92ZXIpey5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQpOmhvdmVyPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9fS5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoe2JveC1zaGFkb3c6MHB4IDExcHggMTVweCAtN3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA5cHggNDZweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZXtjb2xvcjojZjU3YzAwfS5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWRhdGVwaWNrZXItdG9nZ2xlLWFjdGl2ZS5tYXQtd2Fybntjb2xvcjojZjQ0MzM2fS5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1pbm5lcltkaXNhYmxlZF17Y29sb3I6Izc1NzU3NX0ubWF0LWRpYWxvZy1jb250YWluZXJ7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMjEyMTIxfS5tYXQtZGl2aWRlcntib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbHtiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWV4cGFuc2lvbi1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtYWN0aW9uLXJvd3tib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKSwubWF0LWV4cGFuc2lvbi1wYW5lbCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI6aG92ZXI6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjA0KX1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdCgubWF0LWV4cGFuZGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOiNmZmZ9fS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZXtjb2xvcjojMjEyMTIxfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbiwubWF0LWV4cGFuc2lvbi1pbmRpY2F0b3I6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci10aXRsZSwubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJbYXJpYS1kaXNhYmxlZD10cnVlXSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257Y29sb3I6aW5oZXJpdH0ubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJ7aGVpZ2h0OjQ4cHh9Lm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NjRweH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNil9Lm1hdC1oaW50e2NvbG9yOnJnYmEoOTcsOTcsOTcsLjYpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuODcpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNmNTdjMDB9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2ZmOTgwMH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudCwubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LWVycm9ye2NvbG9yOiNmNDQzMzZ9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojNjE2MTYxfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWhpbnR7Y29sb3I6IzYxNjE2MX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjQyKSAwJSwgcmdiYSgwLCAwLCAwLCAwLjQyKSAzMyUsIHRyYW5zcGFyZW50IDAlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDEwMCU7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQyKX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDAuNDIpIDAlLCByZ2JhKDAsIDAsIDAsIDAuNDIpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMDQpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC40Mil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6Izc1NzU3NX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjU3YzAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM3NTc1NzV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDAsMCwwLC4wNil9Lm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNmNTdjMDB9Lm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2ZmOTgwMH0ubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Lm1hdC1pbnB1dC1lbGVtZW50OmRpc2FibGVkLC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6Izc1NzU3NX0ubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y1N2MwMH0ubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoOTcsOTcsOTcsLjQyKX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSg5Nyw5Nyw5NywuNDIpfS5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1mb3JtLWZpZWxkLm1hdC1hY2NlbnQgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNmZjk4MDB9Lm1hdC1mb3JtLWZpZWxkLm1hdC13YXJuIC5tYXQtaW5wdXQtZWxlbWVudCwubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn0ubWF0LWxpc3QtYmFzZSAubWF0LWxpc3QtaXRlbXtjb2xvcjojMjEyMTIxfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1vcHRpb257Y29sb3I6IzIxMjEyMX0ubWF0LWxpc3QtYmFzZSAubWF0LXN1YmhlYWRlcntjb2xvcjojNjE2MTYxfS5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjojNzU3NTc1fS5tYXQtbGlzdC1vcHRpb246aG92ZXIsLm1hdC1saXN0LW9wdGlvbjpmb2N1cywubWF0LW5hdi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXMsLm1hdC1hY3Rpb24tbGlzdCAubWF0LWxpc3QtaXRlbTpob3ZlciwubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDQpfS5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmhvdmVyLC5tYXQtbGlzdC1zaW5nbGUtc2VsZWN0ZWQtb3B0aW9uOmZvY3Vze2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTIpfS5tYXQtbWVudS1wYW5lbHtiYWNrZ3JvdW5kOiNmZmZ9Lm1hdC1tZW51LXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDRweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfS5tYXQtbWVudS1pdGVte2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKTtjb2xvcjojMjEyMTIxfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1tZW51LXN1Ym1lbnUtaWNvbiwubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF0gLm1hdC1pY29uLW5vLWNvbG9ye2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LW1lbnUtaXRlbSAubWF0LWljb24tbm8tY29sb3IsLm1hdC1tZW51LXN1Ym1lbnUtaWNvbntjb2xvcjpyZ2JhKDAsMCwwLC41NCl9Lm1hdC1tZW51LWl0ZW06aG92ZXI6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLC5tYXQtbWVudS1pdGVtLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdChbZGlzYWJsZWRdKSwubWF0LW1lbnUtaXRlbS1oaWdobGlnaHRlZDpub3QoW2Rpc2FibGVkXSl7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1wYWdpbmF0b3J7YmFja2dyb3VuZDojZmZmfS5tYXQtcGFnaW5hdG9yLC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSAubWF0LXNlbGVjdC10cmlnZ2Vye2NvbG9yOiM2MTYxNjF9Lm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCk7Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1wYWdpbmF0b3ItZmlyc3QsLm1hdC1wYWdpbmF0b3ItbGFzdHtib3JkZXItdG9wOjJweCBzb2xpZCByZ2JhKDAsMCwwLC41NCl9Lm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCwubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1wYWdpbmF0b3ItY29udGFpbmVye21pbi1oZWlnaHQ6NTZweH0ubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZkZGViZn0ubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmRkZWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojZmZlNWJmfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYnVmZmVye2JhY2tncm91bmQtY29sb3I6I2ZmZTViZn0ubWF0LXByb2dyZXNzLWJhci5tYXQtYWNjZW50IC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1iYWNrZ3JvdW5ke2ZpbGw6I2ZjZDBjZH0ubWF0LXByb2dyZXNzLWJhci5tYXQtd2FybiAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojZmNkMGNkfS5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWZpbGw6OmFmdGVye2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xlLC5tYXQtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOiNmNTdjMDB9Lm1hdC1wcm9ncmVzcy1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtYWNjZW50IGNpcmNsZXtzdHJva2U6I2ZmOTgwMH0ubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LXdhcm4gY2lyY2xlLC5tYXQtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGV7c3Ryb2tlOiNmNDQzMzZ9Lm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiM2MTYxNjF9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Lm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2ZmOTgwMH0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1pbm5lci1jaXJjbGV7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24ubWF0LXJhZGlvLWRpc2FibGVkIC5tYXQtcmFkaW8tbGFiZWwtY29udGVudHtjb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6IzIxMjEyMX0ubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDk3LDk3LDk3LC40Mil9Lm1hdC1zZWxlY3QtZGlzYWJsZWQgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6Izc1NzU3NX0ubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6I2ZmZn0ubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjEyKX0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y1N2MwMH0ubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZmY5ODAwfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fS5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn0ubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNzU3NTc1fS5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzIxMjEyMX0ubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpfS5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMCwwLDAsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgwLDAsMCwuMTIpO2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDAsMCwwLC4xMil9Lm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjYpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwxNTIsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NSwxMjQsMCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfS5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjM4KX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn0ubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDUsMTI0LDAsLjIpfS5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfS5tYXQtc2xpZGVyLm1hdC1hY2NlbnQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDE1MiwwLC4yKX0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn0ubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Lm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4yKX0ubWF0LXNsaWRlcjpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4zOCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCwubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMjYpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQ6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZSAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC44Nyl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZy5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjI2KX0ubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZTpub3QoLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZykgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsLjI2KTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgwLDAsMCwuMzgpfS5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKTpob3Zlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZC5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4yNil9Lm1hdC1zbGlkZXItaGFzLXRpY2tzIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC43KX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2JhY2tncm91bmQtaW1hZ2U6cmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwLjcpLCByZ2JhKDAsIDAsIDAsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LXJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMC4wMDAxZGVnLCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDAsIDAsIDAsIDAuNyksIHJnYmEoMCwgMCwgMCwgMC43KSAycHgsIHRyYW5zcGFyZW50IDAsIHRyYW5zcGFyZW50KX0ubWF0LXN0ZXAtaGVhZGVyLmNkay1rZXlib2FyZC1mb2N1c2VkLC5tYXQtc3RlcC1oZWFkZXIuY2RrLXByb2dyYW0tZm9jdXNlZCwubWF0LXN0ZXAtaGVhZGVyOmhvdmVyOm5vdChbYXJpYS1kaXNhYmxlZF0pLC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD1mYWxzZV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4wNCl9Lm1hdC1zdGVwLWhlYWRlcjpob3ZlclthcmlhLWRpc2FibGVkPXRydWVde2N1cnNvcjpkZWZhdWx0fUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1zdGVwLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kOm5vbmV9fS5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWxhYmVsLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLW9wdGlvbmFse2NvbG9yOiM2MTYxNjF9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwO2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtjb2xvcjojZmZmfS5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn0ubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSwubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2Y0NDMzNn0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6IzIxMjEyMX0ubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fS5tYXQtc3RlcHBlci1ob3Jpem9udGFsLC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Lm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9Lm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlciwubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwuMTIpfS5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcntoZWlnaHQ6NzJweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlciwubWF0LXZlcnRpY2FsLXN0ZXBwZXItaGVhZGVye3BhZGRpbmc6MjRweCAyNHB4fS5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7dG9wOi0xNnB4O2JvdHRvbTotMTZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZXt0b3A6MzZweH0ubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7dG9wOjM2cHh9Lm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojNjE2MTYxfS5tYXQtdGFiLW5hdi1iYXIsLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKX0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhciwubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Lm1hdC10YWItbGFiZWwsLm1hdC10YWItbGlua3tjb2xvcjojMjEyMTIxfS5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM3NTc1NzV9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6IzIxMjEyMX0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNzU3NTc1fS5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dPi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Lm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTY3LDM4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtcHJpbWFyeSAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjU3YzAwfS5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeS5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjI0LDE3OCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9Lm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhciwubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTY3LDM4LC4zKX0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtib3JkZXItY29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDIyNCwxNzgsLjMpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn0ubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfS5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Lm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCwubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Lm1hdC10b29sYmFye2JhY2tncm91bmQ6I2Y1N2MwMDtjb2xvcjojMjEyMTIxfS5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNmNTdjMDA7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNmZjk4MDA7Y29sb3I6I2ZmZn0ubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Lm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfS5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdywubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Lm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fS5tYXQtdG9vbGJhci1yb3csLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH0ubWF0LXRvb2xiYXItcm93LC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX0ubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX0ubWF0LXRyZWV7YmFja2dyb3VuZDojZmZmfS5tYXQtdHJlZS1ub2RlLC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtjb2xvcjojMjEyMTIxfS5tYXQtdHJlZS1ub2Rle21pbi1oZWlnaHQ6NDhweH0ubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7YmFja2dyb3VuZDojMzIzMjMyO2JveC1zaGFkb3c6MHB4IDNweCA1cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDZweCAxMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMThweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb257Y29sb3I6I2ZmOTgwMH1ib2R5e292ZXJmbG93OmhpZGRlbn0uY2RrLW92ZXJsYXktY29udGFpbmVye2NvbnRhaW46c3RyaWN0fWE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pe2NvbG9yOiMxOTc2ZDJ9YTpub3QoLm1hdC1idXR0b24sLm1hdC1pY29uLWJ1dHRvbik6dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2Rle2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSBhOm5vdCgubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uKXtjb2xvcjojNDJhNWY1fWJvZHkuZGFyay1tb2RlIGE6bm90KC5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24pOnZpc2l0ZWR7Y29sb3I6I2JhNjhjOH1ib2R5LmRhcmstbW9kZSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbjpob3Zlcjpub3QoLm1hdC1vcHRpb24tZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtb3B0aW9uOmZvY3VzOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSk6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LW9wdGlvbi5tYXQtYWN0aXZle2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRpb24ubWF0LW9wdGlvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXByaW1hcnkgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LW9wdGlvbi1kaXNhYmxlZCl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtb3B0Z3JvdXAtbGFiZWx7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1vcHRncm91cC1kaXNhYmxlZCAubWF0LW9wdGdyb3VwLWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94OjphZnRlcntjb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2NvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wcmltYXJ5IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHNldWRvLWNoZWNrYm94LWNoZWNrZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSxib2R5LmRhcmstbW9kZSAubWF0LWFjY2VudCAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtYWNjZW50IC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7YmFja2dyb3VuZDojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLGJvZHkuZGFyay1tb2RlIC5tYXQtd2FybiAubWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRle2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkLm1hdC1wc2V1ZG8tY2hlY2tib3gtZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1wc2V1ZG8tY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2JhY2tncm91bmQ6IzY4Njg2OH1ib2R5LmRhcmstbW9kZSAubWF0LWFwcC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlLm1hdC1hcHAtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MHtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejF7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16Mntib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoze2JveC1zaGFkb3c6MHB4IDNweCAzcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDNweCA0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejV7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE0cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejZ7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXo3e2JveC1zaGFkb3c6MHB4IDRweCA1cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDdweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16OHtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejl7Ym94LXNoYWRvdzowcHggNXB4IDZweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggOXB4IDEycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDNweCAxNnB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMHtib3gtc2hhZG93OjBweCA2cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMHB4IDE0cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAxOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMXtib3gtc2hhZG93OjBweCA2cHggN3B4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMXB4IDE1cHggMXB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDRweCAyMHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxMntib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxMnB4IDE3cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxM3tib3gtc2hhZG93OjBweCA3cHggOHB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxM3B4IDE5cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNHtib3gtc2hhZG93OjBweCA3cHggOXB4IC00cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNHB4IDIxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDVweCAyNnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNXtib3gtc2hhZG93OjBweCA4cHggOXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNXB4IDIycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAyOHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxNntib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MTd7Ym94LXNoYWRvdzowcHggOHB4IDExcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDE3cHggMjZweCAycHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggNnB4IDMycHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejE4e2JveC1zaGFkb3c6MHB4IDlweCAxMXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxOHB4IDI4cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDdweCAzNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoxOXtib3gtc2hhZG93OjBweCA5cHggMTJweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTlweCAyOXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA3cHggMzZweCA2cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjB7Ym94LXNoYWRvdzowcHggMTBweCAxM3B4IC02cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyMHB4IDMxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDhweCAzOHB4IDdweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyMXtib3gtc2hhZG93OjBweCAxMHB4IDEzcHggLTZweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDIxcHggMzNweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOHB4IDQwcHggN3B4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1lbGV2YXRpb24tejIye2JveC1zaGFkb3c6MHB4IDEwcHggMTRweCAtNnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMjJweCAzNXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA4cHggNDJweCA3cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWVsZXZhdGlvbi16MjN7Ym94LXNoYWRvdzowcHggMTFweCAxNHB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyM3B4IDM2cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZWxldmF0aW9uLXoyNHtib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Lm1hdC10aGVtZS1sb2FkZWQtbWFya2Vye2Rpc3BsYXk6bm9uZX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtYWN0aXZlKTpub3QoOmhvdmVyKXtiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1hdXRvY29tcGxldGUtcGFuZWwgLm1hdC1vcHRpb24ubWF0LXNlbGVjdGVkOm5vdCgubWF0LWFjdGl2ZSk6bm90KDpob3Zlcik6bm90KC5tYXQtb3B0aW9uLWRpc2FibGVkKXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtjb2xvcjojZmZmO2JhY2tncm91bmQ6I2VmNmMwMH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIGJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2UtY29udGVudHtvdXRsaW5lOnNvbGlkIDFweDtib3JkZXItcmFkaXVzOjB9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1hY2NlbnQgLm1hdC1iYWRnZS1jb250ZW50e2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYmFkZ2Utd2FybiAubWF0LWJhZGdlLWNvbnRlbnR7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1iYWRnZS1kaXNhYmxlZCAubWF0LWJhZGdlLWNvbnRlbnR7YmFja2dyb3VuZDojNmU2ZTZlO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1ib3R0b20tc2hlZXQtY29udGFpbmVye2JveC1zaGFkb3c6MHB4IDhweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDZweCAzMHB4IDVweCByZ2JhKDAsIDAsIDAsIDAuMTIpO2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24sYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbntjb2xvcjppbmhlcml0O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnl7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uLm1hdC1wcmltYXJ5IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksYm9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbi5tYXQtd2FybiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LXdhcm4gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LGJvZHkuZGFyay1tb2RlIC5tYXQtc3Ryb2tlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7b3BhY2l0eTouMTtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCl7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbixib2R5LmRhcmstbW9kZSAubWF0LWZhYixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFie2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnl7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtd2Fybixib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtd2Fybi5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeS5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWQubWF0LWJ1dHRvbi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1wcmltYXJ5LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtcHJpbWFyeSxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXdhcm4sYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXdhcm57YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b24ubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LXdhcm4ubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5Lm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWFjY2VudC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZC5tYXQtYnV0dG9uLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LXByaW1hcnkubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC1hY2NlbnQubWF0LWJ1dHRvbi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuLm1hdC1idXR0b24tZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkLm1hdC1idXR0b24tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZmFiLm1hdC1wcmltYXJ5IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1taW5pLWZhYi5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZsYXQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1mYWIubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LW1pbmktZmFiLm1hdC13YXJuIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXN0cm9rZWQtYnV0dG9uOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZmxhdC1idXR0b246bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAzcHggMXB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFpc2VkLWJ1dHRvbjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpOmFjdGl2ZTpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA4cHggMTBweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWlzZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMHB4IDBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNnB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAxOHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZmFiOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCk6YWN0aXZlOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWI6bm90KC5tYXQtYnV0dG9uLWRpc2FibGVkKTphY3RpdmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggN3B4IDhweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTJweCAxN3B4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA1cHggMjJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVkOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWluaS1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmU6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSksYm9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKSxib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93Om5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtZm9jdXMtb3ZlcmxheXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlKy5tYXQtYnV0dG9uLXRvZ2dsZXtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtYnV0dG9uLXRvZ2dsZS12ZXJ0aWNhbCAubWF0LWJ1dHRvbi10b2dnbGUrLm1hdC1idXR0b24tdG9nZ2xle2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOiMyMTIxMjE7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1idXR0b24tdG9nZ2xlLWRpc2FibGVkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmR7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2Vke2JhY2tncm91bmQtY29sb3I6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtc3RhbmRhbG9uZS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLGJvZHkuZGFyay1tb2RlIC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC1hcHBlYXJhbmNlLXN0YW5kYXJke2JvcmRlcjpzb2xpZCAxcHggIzU5NTk1OX1ib2R5LmRhcmstbW9kZSAubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHtsaW5lLWhlaWdodDo0OHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2FyZHtiYWNrZ3JvdW5kOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQ6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDFweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMXB4IDFweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDNweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhcmQubWF0LWNhcmQtZmxhdDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAwcHggMHB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDBweCAwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYXJkLXN1YnRpdGxle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZnJhbWV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2ZpbGw6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZTojMzAzMDMwICFpbXBvcnRhbnR9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS5tYXQtcHJpbWFyeSAubWF0LWNoZWNrYm94LWJhY2tncm91bmQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkLm1hdC1wcmltYXJ5IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC1hY2NlbnQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZC5tYXQtYWNjZW50IC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLm1hdC13YXJuIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWNoZWNrZWQubWF0LXdhcm4gLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94LWRpc2FibGVkLm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOiM2ODY4Njh9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1kaXNhYmxlZDpub3QoLm1hdC1jaGVja2JveC1jaGVja2VkKSAubWF0LWNoZWNrYm94LWZyYW1le2JvcmRlci1jb2xvcjojNjg2ODY4fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3gtY2hlY2tlZDpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWNoZWNrYm94OmFjdGl2ZTpub3QoLm1hdC1jaGVja2JveC1kaXNhYmxlZCkubWF0LXByaW1hcnkgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveDphY3RpdmU6bm90KC5tYXQtY2hlY2tib3gtZGlzYWJsZWQpLm1hdC1hY2NlbnQgLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGVja2JveC1jaGVja2VkOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtY2hlY2tib3g6YWN0aXZlOm5vdCgubWF0LWNoZWNrYm94LWRpc2FibGVkKS5tYXQtd2FybiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQ6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXB7YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcDpub3QoLm1hdC1jaGlwLWRpc2FibGVkKTphY3RpdmV7Ym94LXNoYWRvdzowcHggM3B4IDNweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggM3B4IDRweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDhweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6bm90KC5tYXQtY2hpcC1kaXNhYmxlZCkgLm1hdC1jaGlwLXJlbW92ZTpob3ZlcntvcGFjaXR5Oi41NH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWR7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXA6OmFmdGVye2JhY2tncm91bmQ6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC1wcmltYXJ5IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtcHJpbWFyeSAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jaGlwLm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXNlbGVjdGVkLm1hdC13YXJue2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtd2FybiAubWF0LWNoaXAtcmVtb3Zle2NvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LWNoaXAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtc2VsZWN0ZWQubWF0LXdhcm4gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtY2hpcC1yZW1vdmV7Y29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtY2hpcC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZC5tYXQtYWNjZW50IC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxle2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYmxlIHRoZWFkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFibGUgdGJvZHksYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZSB0Zm9vdCxib2R5LmRhcmstbW9kZSBtYXQtaGVhZGVyLXJvdyxib2R5LmRhcmstbW9kZSBtYXQtcm93LGJvZHkuZGFyay1tb2RlIG1hdC1mb290ZXItcm93LGJvZHkuZGFyay1tb2RlIFttYXQtaGVhZGVyLXJvd10sYm9keS5kYXJrLW1vZGUgW21hdC1yb3ddLGJvZHkuZGFyay1tb2RlIFttYXQtZm9vdGVyLXJvd10sYm9keS5kYXJrLW1vZGUgLm1hdC10YWJsZS1zdGlja3l7YmFja2dyb3VuZDppbmhlcml0fWJvZHkuZGFyay1tb2RlIG1hdC1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWhlYWRlci1yb3csYm9keS5kYXJrLW1vZGUgbWF0LWZvb3Rlci1yb3csYm9keS5kYXJrLW1vZGUgdGgubWF0LWhlYWRlci1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1jZWxsLGJvZHkuZGFyay1tb2RlIHRkLm1hdC1mb290ZXItY2VsbHtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWhlYWRlci1jZWxse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2VsbCxib2R5LmRhcmstbW9kZSAubWF0LWZvb3Rlci1jZWxse2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1hcnJvd3tmaWxsOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudCAubWF0LWNhbGVuZGFyLW5leHQtYnV0dG9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50IC5tYXQtY2FsZW5kYXItcHJldmlvdXMtYnV0dG9ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXItZGl2aWRlcjo6YWZ0ZXJ7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci10YWJsZS1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWxhYmVse2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvcntjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDApfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZGF0ZS1yYW5nZS1pbnB1dC1zZXBhcmF0b3J7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcHJldmlld3tjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4yNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktZGlzYWJsZWQ+Lm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDIzOSwgMTA4LCAwLCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Ym9keS5kYXJrLW1vZGUgLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnR7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlOjpiZWZvcmV7YmFja2dyb3VuZDpyZ2JhKDI0OSwxNzEsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IFtkaXI9cnRsXSAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjM5LCAxMDgsIDAsIDAuMikgNTAlLCByZ2JhKDI0OSwgMTcxLCAwLCAwLjIpIDUwJSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2UtZW5kOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyMzksIDEwOCwgMCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZT4ubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktaW4tY29tcGFyaXNvbi1yYW5nZS5tYXQtY2FsZW5kYXItYm9keS1pbi1yYW5nZTo6YWZ0ZXJ7YmFja2dyb3VuZDojYThkYWI1fWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC1hY2NlbnQgLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQ6IzQ2YTM1ZX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktdG9kYXkubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7Ym94LXNoYWRvdzppbnNldCAwIDAgMCAxcHggI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtYWNjZW50IC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCksYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LWFjY2VudCAubWF0LWNhbGVuZGFyLWJvZHktY2VsbDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWRpc2FibGVkKTpob3Zlcj4ubWF0LWNhbGVuZGFyLWJvZHktY2VsbC1jb250ZW50Om5vdCgubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWQpOm5vdCgubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyMzksMTA4LDAsLjMpfX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ0LDY3LDU0LC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1pZGVudGljYWwsYm9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWluLWNvbXBhcmlzb24tcmFuZ2U6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjQ5LDE3MSwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktY29tcGFyaXNvbi1icmlkZ2Utc3RhcnQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLWVuZDo6YmVmb3Jle2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI0NCwgNjcsIDU0LCAwLjIpIDUwJSwgcmdiYSgyNDksIDE3MSwgMCwgMC4yKSA1MCUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWJyaWRnZS1lbmQ6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiBbZGlyPXJ0bF0gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24tYnJpZGdlLXN0YXJ0OjpiZWZvcmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNDQsIDY3LCA1NCwgMC4yKSA1MCUsIHJnYmEoMjQ5LCAxNzEsIDAsIDAuMikgNTAlKX1ib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAubWF0LWNhbGVuZGFyLWJvZHktaW4tcmFuZ2U+Lm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlLm1hdC1jYWxlbmRhci1ib2R5LWluLXJhbmdlOjphZnRlcntiYWNrZ3JvdW5kOiNhOGRhYjV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1pbi1jb21wYXJpc29uLXJhbmdlPi5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZHtiYWNrZ3JvdW5kOiM0NmEzNWV9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci1jb250ZW50Lm1hdC13YXJuIC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZD4ubWF0LWNhbGVuZGFyLWJvZHktc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LXRvZGF5Lm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVke2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtY2FsZW5kYXItYm9keS1hY3RpdmU+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKSxib2R5LmRhcmstbW9kZSAubWF0LWRhdGVwaWNrZXItY29udGVudC5tYXQtd2FybiAuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWNhbGVuZGFyLWJvZHktYWN0aXZlPi5tYXQtY2FsZW5kYXItYm9keS1jZWxsLWNvbnRlbnQ6bm90KC5tYXQtY2FsZW5kYXItYm9keS1zZWxlY3RlZCk6bm90KC5tYXQtY2FsZW5kYXItYm9keS1jb21wYXJpc29uLWlkZW50aWNhbCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMyl9QG1lZGlhKGhvdmVyOiBob3Zlcil7Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQubWF0LXdhcm4gLm1hdC1jYWxlbmRhci1ib2R5LWNlbGw6bm90KC5tYXQtY2FsZW5kYXItYm9keS1kaXNhYmxlZCk6aG92ZXI+Lm1hdC1jYWxlbmRhci1ib2R5LWNlbGwtY29udGVudDpub3QoLm1hdC1jYWxlbmRhci1ib2R5LXNlbGVjdGVkKTpub3QoLm1hdC1jYWxlbmRhci1ib2R5LWNvbXBhcmlzb24taWRlbnRpY2FsKXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDY3LDU0LC4zKX19Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLWNvbnRlbnQtdG91Y2h7Ym94LXNoYWRvdzowcHggMTFweCAxNXB4IC03cHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCAyNHB4IDM4cHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDlweCA0NnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZle2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlcGlja2VyLXRvZ2dsZS1hY3RpdmUubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZGF0ZXBpY2tlci10b2dnbGUtYWN0aXZlLm1hdC13YXJue2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kYXRlLXJhbmdlLWlucHV0LWlubmVyW2Rpc2FibGVkXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZGlhbG9nLWNvbnRhaW5lcntib3gtc2hhZG93OjBweCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDI0cHggMzhweCAzcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZDojNDI0MjQyO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1kaXZpZGVye2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZGl2aWRlci12ZXJ0aWNhbHtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mjtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsOm5vdChbY2xhc3MqPW1hdC1lbGV2YXRpb24tel0pe2JveC1zaGFkb3c6MHB4IDNweCAxcHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDJweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCA1cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1hY3Rpb24tcm93e2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSksYm9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pe2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfUBtZWRpYShob3Zlcjogbm9uZSl7Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWw6bm90KC5tYXQtZXhwYW5kZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyOmhvdmVye2JhY2tncm91bmQ6IzQyNDI0Mn19Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLWluZGljYXRvcjo6YWZ0ZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0gLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclthcmlhLWRpc2FibGVkPXRydWVdIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlci1kZXNjcmlwdGlvbntjb2xvcjppbmhlcml0fWJvZHkuZGFyay1tb2RlIC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntoZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo2NHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWhpbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudHtjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtd2FybntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKSAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvY3VzZWQ6bm90KC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkKS5tYXQtYWNjZW50IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9jdXNlZDpub3QoLm1hdC1mb3JtLWZpZWxkLWludmFsaWQpLm1hdC13YXJuIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwubWF0LWFjY2VudCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtbGFiZWwgLm1hdC1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZS5tYXQtYWNjZW50e2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWVycm9ye2NvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1oaW50e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSAwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDMzJSwgdHJhbnNwYXJlbnQgMCUpO2JhY2tncm91bmQtc2l6ZTo0cHggMTAwJTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMzMlLCB0cmFuc3BhcmVudCAwJSk7YmFja2dyb3VuZC1zaXplOjRweCAxMDAlO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMDUpfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtbGFiZWx7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNre2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQubWF0LXdhcm4gLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQubWF0LWZvcm0tZmllbGQtaW52YWxpZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1wcmltYXJ5e2NvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLm1hdC1hY2NlbnR7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWljb24ubWF0LXdhcm57Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpkaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtaW5maXg6OmFmdGVye2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50e2NhcmV0LWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50OjpwbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1pbnB1dC1lbGVtZW50Om5vdCgubWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lKSBvcHRpb257Y29sb3I6cmdiYSgwLDAsMCwuODcpfWJvZHkuZGFyay1tb2RlIC5tYXQtaW5wdXQtZWxlbWVudDpub3QoLm1hdC1uYXRpdmUtc2VsZWN0LWlubGluZSkgb3B0aW9uOmRpc2FibGVke2NvbG9yOnJnYmEoMCwwLDAsLjM4KX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWFjY2VudCAubWF0LWlucHV0LWVsZW1lbnR7Y2FyZXQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LXdhcm4gLm1hdC1pbnB1dC1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVte2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LWJhc2UgLm1hdC1saXN0LW9wdGlvbntjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtc3ViaGVhZGVye2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtbGlzdC1iYXNlIC5tYXQtbGlzdC1pdGVtLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpO2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LW9wdGlvbjpob3Zlcixib2R5LmRhcmstbW9kZSAubWF0LWxpc3Qtb3B0aW9uOmZvY3VzLGJvZHkuZGFyay1tb2RlIC5tYXQtbmF2LWxpc3QgLm1hdC1saXN0LWl0ZW06aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1uYXYtbGlzdCAubWF0LWxpc3QtaXRlbTpmb2N1cyxib2R5LmRhcmstbW9kZSAubWF0LWFjdGlvbi1saXN0IC5tYXQtbGlzdC1pdGVtOmhvdmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtYWN0aW9uLWxpc3QgLm1hdC1saXN0LWl0ZW06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4wNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb24sYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246aG92ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1saXN0LXNpbmdsZS1zZWxlY3RlZC1vcHRpb246Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtcGFuZWw6bm90KFtjbGFzcyo9bWF0LWVsZXZhdGlvbi16XSl7Ym94LXNoYWRvdzowcHggMnB4IDRweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggNHB4IDVweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW1bZGlzYWJsZWRdLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LW1lbnUtc3VibWVudS1pY29uLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXSAubWF0LWljb24tbm8tY29sb3J7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0gLm1hdC1pY29uLW5vLWNvbG9yLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1zdWJtZW51LWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LW1lbnUtaXRlbTpob3Zlcjpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0uY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoW2Rpc2FibGVkXSksYm9keS5kYXJrLW1vZGUgLm1hdC1tZW51LWl0ZW0uY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KFtkaXNhYmxlZF0pLGJvZHkuZGFyay1tb2RlIC5tYXQtbWVudS1pdGVtLWhpZ2hsaWdodGVkOm5vdChbZGlzYWJsZWRdKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjA0KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvcntiYWNrZ3JvdW5kOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3IsYm9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplIC5tYXQtc2VsZWN0LXRyaWdnZXJ7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudHtib3JkZXItdG9wOjJweCBzb2xpZCAjZmZmO2JvcmRlci1yaWdodDoycHggc29saWQgI2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci10b3A6MnB4IHNvbGlkICNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1pY29uLWJ1dHRvbltkaXNhYmxlZF0gLm1hdC1wYWdpbmF0b3ItZGVjcmVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtaWNvbi1idXR0b25bZGlzYWJsZWRdIC5tYXQtcGFnaW5hdG9yLWluY3JlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1maXJzdCxib2R5LmRhcmstbW9kZSAubWF0LWljb24tYnV0dG9uW2Rpc2FibGVkXSAubWF0LXBhZ2luYXRvci1sYXN0e2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXBhZ2luYXRvci1jb250YWluZXJ7bWluLWhlaWdodDo1NnB4fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojNjAzZjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItYmFja2dyb3VuZHtmaWxsOiM2MDNmMjR9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LWFjY2VudCAubWF0LXByb2dyZXNzLWJhci1idWZmZXJ7YmFja2dyb3VuZC1jb2xvcjojNjAzZjI0fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC1hY2NlbnQgLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJhY2tncm91bmR7ZmlsbDojNjEzNTMyfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3MtYmFyLm1hdC13YXJuIC5tYXQtcHJvZ3Jlc3MtYmFyLWJ1ZmZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTM1MzJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1wcm9ncmVzcy1iYXIubWF0LXdhcm4gLm1hdC1wcm9ncmVzcy1iYXItZmlsbDo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyIGNpcmNsZXtzdHJva2U6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXByb2dyZXNzLXNwaW5uZXIubWF0LWFjY2VudCBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC1hY2NlbnQgY2lyY2xle3N0cm9rZTojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5tYXQtd2FybiBjaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1zcGlubmVyLm1hdC13YXJuIGNpcmNsZXtzdHJva2U6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1pbm5lci1jaXJjbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXByaW1hcnkubWF0LXJhZGlvLWNoZWNrZWQgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcHJpbWFyeTphY3RpdmUgLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZXtib3JkZXItY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtYWNjZW50IC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQgLm1hdC1yYWRpby1yaXBwbGUgLm1hdC1yaXBwbGUtZWxlbWVudDpub3QoLm1hdC1yYWRpby1wZXJzaXN0ZW50LXJpcHBsZSksYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LWFjY2VudC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLXBlcnNpc3RlbnQtcmlwcGxlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1hY2NlbnQ6YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tb3V0ZXItY2lyY2xle2JvcmRlci1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8taW5uZXItY2lyY2xlLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuIC5tYXQtcmFkaW8tcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUpLGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC13YXJuLm1hdC1yYWRpby1jaGVja2VkIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24ubWF0LXdhcm46YWN0aXZlIC5tYXQtcmFkaW8tcGVyc2lzdGVudC1yaXBwbGV7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZC5tYXQtcmFkaW8tY2hlY2tlZCAubWF0LXJhZGlvLW91dGVyLWNpcmNsZSxib2R5LmRhcmstbW9kZSAubWF0LXJhZGlvLWJ1dHRvbi5tYXQtcmFkaW8tZGlzYWJsZWQgLm1hdC1yYWRpby1vdXRlci1jaXJjbGV7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLXJpcHBsZSAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWlubmVyLWNpcmNsZXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtcmFkaW8tYnV0dG9uLm1hdC1yYWRpby1kaXNhYmxlZCAubWF0LXJhZGlvLWxhYmVsLWNvbnRlbnR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGUgLm1hdC1yYWRpby1idXR0b24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zZWxlY3QtdmFsdWV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC12YWx1ZXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2VsZWN0LXBhbmVse2JhY2tncm91bmQ6IzQyNDI0Mn1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbDpub3QoW2NsYXNzKj1tYXQtZWxldmF0aW9uLXpdKXtib3gtc2hhZG93OjBweCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCAxcHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LXByaW1hcnkgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQubWF0LWZvY3VzZWQubWF0LWFjY2VudCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZC5tYXQtd2FybiAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtZm9ybS1maWVsZCAubWF0LXNlbGVjdC5tYXQtc2VsZWN0LWludmFsaWQgLm1hdC1zZWxlY3QtYXJyb3d7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LWZvcm0tZmllbGQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC1hcnJvd3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLWNvbnRhaW5lcntiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlcntiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDI7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci5tYXQtZHJhd2VyLXB1c2h7YmFja2dyb3VuZC1jb2xvcjojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyOm5vdCgubWF0LWRyYXdlci1zaWRlKXtib3gtc2hhZG93OjBweCA4cHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4yKSwwcHggMTZweCAyNHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMTQpLDBweCA2cHggMzBweCA1cHggcmdiYSgwLCAwLCAwLCAwLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LWRyYXdlci1zaWRle2JvcmRlci1yaWdodDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtZHJhd2VyLXNpZGUubWF0LWRyYXdlci1lbmR7Ym9yZGVyLWxlZnQ6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItcmlnaHQ6bm9uZX1ib2R5LmRhcmstbW9kZSBbZGlyPXJ0bF0gLm1hdC1kcmF3ZXItc2lkZXtib3JkZXItbGVmdDpzb2xpZCAxcHggcmdiYSgyNTUsMjU1LDI1NSwuMTIpO2JvcmRlci1yaWdodDpub25lfWJvZHkuZGFyay1tb2RlIFtkaXI9cnRsXSAubWF0LWRyYXdlci1zaWRlLm1hdC1kcmF3ZXItZW5ke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1kcmF3ZXItYmFja2Ryb3AubWF0LWRyYXdlci1zaG93bntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTg5LDE4OSwxODksLjYpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtcHJpbWFyeS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1wcmltYXJ5Lm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtd2Fybi5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuNTQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC13YXJuLm1hdC1jaGVja2VkIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlOm5vdCgubWF0LWNoZWNrZWQpIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie2JveC1zaGFkb3c6MHB4IDJweCAxcHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksMHB4IDFweCAxcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCksMHB4IDFweCAzcHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMik7YmFja2dyb3VuZC1jb2xvcjojYmRiZGJkfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjUpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10cmFjay1maWxsLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1wcmltYXJ5IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtcHJpbWFyeSAubWF0LXNsaWRlci10aHVtYi1sYWJlbC10ZXh0e2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXByaW1hcnkgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjM5LDEwOCwwLC4yKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LWFjY2VudCAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtYWNjZW50IC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDIzOSwxMDgsMCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYixib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtd2FybiAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXdhcm4gLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC13YXJuIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCw2Nyw1NCwuMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXI6aG92ZXIgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbCxib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLWRpc2FibGVkIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1kaXNhYmxlZDpob3ZlciAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXNsaWRlci5tYXQtc2xpZGVyLW1pbi12YWx1ZS5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWUubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zKTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyIC5tYXQtc2xpZGVyLXRodW1iLGJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLm1hdC1zbGlkZXItbWluLXZhbHVlOm5vdCgubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nKS5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpOmhvdmVyLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWIsYm9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXIubWF0LXNsaWRlci1taW4tdmFsdWU6bm90KC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmcpLmNkay1mb2N1c2VkLm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrc3tiYWNrZ3JvdW5kLWltYWdlOnJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpIDJweCwgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1yZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDAuMDAwMWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7YmFja2dyb3VuZC1pbWFnZTpyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNykgMnB4LCB0cmFuc3BhcmVudCAwLCB0cmFuc3BhcmVudCl9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlcjpob3Zlcjpub3QoW2FyaWEtZGlzYWJsZWRdKSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyOmhvdmVyW2FyaWEtZGlzYWJsZWQ9ZmFsc2Vde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMDQpfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJbYXJpYS1kaXNhYmxlZD10cnVlXXtjdXJzb3I6ZGVmYXVsdH1AbWVkaWEoaG92ZXI6IG5vbmUpe2JvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZDpub25lfX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbCxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1vcHRpb25hbHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29ue2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyk7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIgLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwO2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29ue2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlci5tYXQtYWNjZW50IC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1kb25lLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LWFjY2VudCAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lZGl0e2JhY2tncm91bmQtY29sb3I6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb257Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXNlbGVjdGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcC1oZWFkZXIubWF0LXdhcm4gLm1hdC1zdGVwLWljb24tc3RhdGUtZG9uZSxib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyLm1hdC13YXJuIC5tYXQtc3RlcC1pY29uLXN0YXRlLWVkaXR7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwLWhlYWRlciAubWF0LXN0ZXAtaWNvbi1zdGF0ZS1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Y29sb3I6I2Y0NDMzNn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1hY3RpdmV7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXAtaGVhZGVyIC5tYXQtc3RlcC1sYWJlbC5tYXQtc3RlcC1sYWJlbC1lcnJvcntjb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLGJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbHtiYWNrZ3JvdW5kLWNvbG9yOiM0MjQyNDJ9Ym9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLXZlcnRpY2FsLWxpbmU6OmJlZm9yZXtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC1ob3Jpem9udGFsLXN0ZXBwZXItaGVhZGVyOjphZnRlcixib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItaG9yaXpvbnRhbC1saW5le2JvcmRlci10b3AtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMTIpfWJvZHkuZGFyay1tb2RlIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcntoZWlnaHQ6NzJweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXZlcnRpY2FsLXN0ZXBwZXItaGVhZGVye3BhZGRpbmc6MjRweCAyNHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtc3RlcHBlci12ZXJ0aWNhbC1saW5lOjpiZWZvcmV7dG9wOi0xNnB4O2JvdHRvbTotMTZweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtaG9yaXpvbnRhbC1zdGVwcGVyLWhlYWRlcjo6YWZ0ZXIsYm9keS5kYXJrLW1vZGUgLm1hdC1zdGVwcGVyLWxhYmVsLXBvc2l0aW9uLWJvdHRvbSAubWF0LWhvcml6b250YWwtc3RlcHBlci1oZWFkZXI6OmJlZm9yZXt0b3A6MzZweH1ib2R5LmRhcmstbW9kZSAubWF0LXN0ZXBwZXItbGFiZWwtcG9zaXRpb24tYm90dG9tIC5tYXQtc3RlcHBlci1ob3Jpem9udGFsLWxpbmV7dG9wOjM2cHh9Ym9keS5kYXJrLW1vZGUgLm1hdC1zb3J0LWhlYWRlci1hcnJvd3tjb2xvcjojYzZjNmM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItbmF2LWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC10YWItaGVhZGVye2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEyKTtib3JkZXItYm90dG9tOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGlua3tjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1dPi5tYXQtdGFiLWhlYWRlcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyW2NsYXNzKj1tYXQtYmFja2dyb3VuZC1de2JvcmRlci1ib3R0b206bm9uZTtib3JkZXItdG9wOm5vbmV9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1wcmltYXJ5IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1wcmltYXJ5Lm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXByaW1hcnkubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1MSwxNDAsMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudCAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiNlZjZjMDB9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYWNjZW50Lm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1pbmstYmFyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWFjY2VudC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LXdhcm4gLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCl7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyMDUsMjEwLC4zKX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2FybiAubWF0LWluay1iYXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtd2FybiAubWF0LWluay1iYXJ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtd2Fybi5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtaW5rLWJhcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC13YXJuLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1pbmstYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnkgLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeSAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluayxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5re2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZHtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC40KX1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2JvcmRlci1jb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItY29sb3I6I2ZmZjtvcGFjaXR5Oi40fWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtcHJpbWFyeT4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXByaW1hcnk+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1wcmltYXJ5Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnR7YmFja2dyb3VuZC1jb2xvcjojZmZmO29wYWNpdHk6LjEyfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudCAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQgLm1hdC10YWItbGluay5jZGsta2V5Ym9hcmQtZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50IC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTEsMTQwLDAsLjMpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb257YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmssYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsLm1hdC10YWItZGlzYWJsZWQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmsubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLm1hdC10YWItZGlzYWJsZWR7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNCl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmUsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257Ym9yZGVyLWNvbG9yOiNmZmY7b3BhY2l0eTouNH1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtYWNjZW50Pi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItaGVhZGVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC1hY2NlbnQ+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLWFjY2VudD4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtvcGFjaXR5Oi4xMn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxhYmVsLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1sYWJlbC5jZGstcHJvZ3JhbS1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1wcm9ncmFtLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLWtleWJvYXJkLWZvY3VzZWQ6bm90KC5tYXQtdGFiLWRpc2FibGVkKSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4gLm1hdC10YWItbGFiZWwuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2FybiAubWF0LXRhYi1saW5rLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LXRhYi1kaXNhYmxlZCksYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuIC5tYXQtdGFiLWxpbmsuY2RrLXByb2dyYW0tZm9jdXNlZDpub3QoLm1hdC10YWItZGlzYWJsZWQpe2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjA1LDIxMCwuMyl9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lcixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1saW5rLWNvbnRhaW5lciAubWF0LXRhYi1saW5rLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtdGFiLWxpbmt7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVkLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC10YWItbGluay5tYXQtdGFiLWRpc2FibGVke2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjQpfWJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLWdyb3VwLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3JlLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZSxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyIC5tYXQtZm9jdXMtaW5kaWNhdG9yOjpiZWZvcmV7Ym9yZGVyLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbixib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVkIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb24sYm9keS5kYXJrLW1vZGUgLm1hdC10YWItbmF2LWJhci5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjojZmZmO29wYWNpdHk6LjR9Ym9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1ncm91cC5tYXQtYmFja2dyb3VuZC13YXJuPi5tYXQtdGFiLWxpbmstY29udGFpbmVyIC5tYXQtcmlwcGxlLWVsZW1lbnQsYm9keS5kYXJrLW1vZGUgLm1hdC10YWItZ3JvdXAubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbiAubWF0LXJpcHBsZS1lbGVtZW50LGJvZHkuZGFyay1tb2RlIC5tYXQtdGFiLW5hdi1iYXIubWF0LWJhY2tncm91bmQtd2Fybj4ubWF0LXRhYi1oZWFkZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItbGluay1jb250YWluZXIgLm1hdC1yaXBwbGUtZWxlbWVudCxib2R5LmRhcmstbW9kZSAubWF0LXRhYi1uYXYtYmFyLm1hdC1iYWNrZ3JvdW5kLXdhcm4+Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24gLm1hdC1yaXBwbGUtZWxlbWVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3BhY2l0eTouMTJ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFye2JhY2tncm91bmQ6I2VmNmMwMDtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci5tYXQtcHJpbWFyeXtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LWFjY2VudHtiYWNrZ3JvdW5kOiNlZjZjMDA7Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIubWF0LXdhcm57YmFja2dyb3VuZDojZjQ0MzM2O2NvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9ybS1maWVsZC1yaXBwbGUsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2JhY2tncm91bmQtY29sb3I6Y3VycmVudENvbG9yfWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtbGFiZWwsYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtc2VsZWN0LXZhbHVlLGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhciAubWF0LXNlbGVjdC1hcnJvdyxib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXIgLm1hdC1mb3JtLWZpZWxkLm1hdC1mb2N1c2VkIC5tYXQtc2VsZWN0LWFycm93e2NvbG9yOmluaGVyaXR9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyIC5tYXQtaW5wdXQtZWxlbWVudHtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3J9Ym9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7bWluLWhlaWdodDo2NHB4fWJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1yb3csYm9keS5kYXJrLW1vZGUgLm1hdC10b29sYmFyLXNpbmdsZS1yb3d7aGVpZ2h0OjY0cHh9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpe2JvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1tdWx0aXBsZS1yb3dze21pbi1oZWlnaHQ6NTZweH1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2xiYXItcm93LGJvZHkuZGFyay1tb2RlIC5tYXQtdG9vbGJhci1zaW5nbGUtcm93e2hlaWdodDo1NnB4fX1ib2R5LmRhcmstbW9kZSAubWF0LXRvb2x0aXB7YmFja2dyb3VuZDpyZ2JhKDk3LDk3LDk3LC45KX1ib2R5LmRhcmstbW9kZSAubWF0LXRyZWV7YmFja2dyb3VuZDojNDI0MjQyfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZS1ub2RlLGJvZHkuZGFyay1tb2RlIC5tYXQtbmVzdGVkLXRyZWUtbm9kZXtjb2xvcjojZmZmfWJvZHkuZGFyay1tb2RlIC5tYXQtdHJlZS1ub2Rle21pbi1oZWlnaHQ6NDhweH1ib2R5LmRhcmstbW9kZSAubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Y29sb3I6cmdiYSgwLDAsMCwuODcpO2JhY2tncm91bmQ6I2ZhZmFmYTtib3gtc2hhZG93OjBweCAzcHggNXB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjIpLDBweCA2cHggMTBweCAwcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwwcHggMXB4IDE4cHggMHB4IHJnYmEoMCwgMCwgMCwgMC4xMil9Ym9keS5kYXJrLW1vZGUgLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2NvbG9yOmluaGVyaXR9Cjwvc3R5bGU+Cgo8c3R5bGU+CiAgaHRtbCwKICBib2R5IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgY29sb3I6IHZhcigtLXByaW1hcnktdGV4dC1jb2xvcik7CgogICAgLyogTGVnYWN5IG1lY2hhbmlzbSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBzdWJwaXhlbCBhbnRpLWFsaWFzaW5nIG9uIG1hY09TLgogICAgICoKICAgICAqIEluIHRoZSBwYXN0IFsxXSwgbWFjT1Mgc3VicGl4ZWwgQUEgY2F1c2VkIGV4Y2Vzc2l2ZSBib2xkaW5nIGZvciBsaWdodC1vbi1kYXJrIHRleHQ7IHRoaXMgcnVsZQogICAgICogYXZvaWRzIHRoYXQgYnkgcmVxdWVzdGluZyBub24tc3VicGl4ZWwgQUEgYWx3YXlzLCByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBiZWhhdmlvciwgd2hpY2ggaXMKICAgICAqIHRvIHVzZSBzdWJwaXhlbCBBQSB3aGVuIGF2YWlsYWJsZS4gVGhlIG9yaWdpbmFsIGlzc3VlIHdhcyAiZml4ZWQiIGJ5IHJlbW92aW5nIHN1YnBpeGVsIEFBIGluCiAgICAgKiBtYWNPUyAxNCAoTW9qYXZlKSwgYnV0IGZvciBsZWdhY3kgcmVhc29ucyB0aGV5IHByZXNlcnZlZCB0aGUgYm9sZGluZyBlZmZlY3QgYXMgYW4gb3B0aW9uLgogICAgICogQ2hyb21lIHRoZW4gaW4gdHVybiB1cGRhdGVkIGl0cyBmb250IHJlbmRlcmluZyB0byBhcHBseSB0aGF0IGJvbGRpbmcgZWZmZWN0IFsyXSwgd2hpY2ggbWVhbnMKICAgICAqIHRoYXQgZXZlbiB0aG91Z2ggdGhlIGAtd2Via2l0LWZvbnQtc21vb3RoaW5nYCBkb2NzIFszXSBzdWdnZXN0IHRoYXQgc2V0dGluZyBgYW50aWFsaWFzZWRgCiAgICAgKiB3b3VsZCBoYXZlIG5vIGVmZmVjdCBmb3IgcmVjZW50IHZlcnNpb25zIG9mIG1hY09TLCBpdCBzdGlsbCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGJvbGRpbmcuCiAgICAgKgogICAgICogWzFdOiBodHRwOi8vd3d3LmxpZ2h0ZXJyYS5jb20vYXJ0aWNsZXMvbWFjb3N4dGV4dGFhYnVnLwogICAgICogWzJdOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04NTg4NjEKICAgICAqIFszXTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2ZvbnQtc21vb3RoCiAgICAgKgogICAgICovCgogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgfQogIG5vc2NyaXB0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBtYXgtd2lkdGg6IDYwMHB4OwogICAgcGFkZGluZzogMTBweDsKICB9Cjwvc3R5bGU+Cgo8L2hlYWQ+PGJvZHk+PG5vc2NyaXB0PgogICAgPGgxPlRlbnNvckJvYXJkIHJlcXVpcmVzIEphdmFTY3JpcHQ8L2gxPgogICAgPHA+UGxlYXNlIGVuYWJsZSBKYXZhU2NyaXB0IGFuZCByZWxvYWQgdGhpcyBwYWdlLjwvcD4KICA8L25vc2NyaXB0Pjx0Yi13ZWJhcHA+PC90Yi13ZWJhcHA+PHNjcmlwdCBzcmM9ImluZGV4LmpzP19maWxlX2hhc2g9NDg2ZjM0ZDIiPjwvc2NyaXB0PjwvYm9keT48L2h0bWw+",
"headers": [
[
"content-type",
@@ -1724,20 +2466,20 @@
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/environment": {
- "data": "eyJ2ZXJzaW9uIjogIjIuNy4wIiwgImRhdGFfbG9jYXRpb24iOiAiLi90dXRvcmlhbF9leHBzIiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMC4wLCAiZGVidWciOiB7ImRhdGFfcHJvdmlkZXIiOiAiR3JwY0RhdGFQcm92aWRlcihhZGRyPSdsb2NhbGhvc3Q6NDQ1ODknKSIsICJmbGFncyI6IHsibG9nZGlyIjogIi4vdHV0b3JpYWxfZXhwcyIsICJsb2dkaXJfc3BlYyI6ICIiLCAiaG9zdCI6IG51bGwsICJiaW5kX2FsbCI6IGZhbHNlLCAicG9ydCI6IG51bGwsICJyZXVzZV9wb3J0IjogZmFsc2UsICJsb2FkX2Zhc3QiOiAiYXV0byIsICJleHRyYV9kYXRhX3NlcnZlcl9mbGFncyI6ICIiLCAiZ3JwY19jcmVkc190eXBlIjogImxvY2FsIiwgImdycGNfZGF0YV9wcm92aWRlciI6ICIiLCAicHVyZ2Vfb3JwaGFuZWRfZGF0YSI6IHRydWUsICJkYiI6ICIiLCAiZGJfaW1wb3J0IjogZmFsc2UsICJpbnNwZWN0IjogZmFsc2UsICJ2ZXJzaW9uX3RiIjogZmFsc2UsICJ0YWciOiAiIiwgImV2ZW50X2ZpbGUiOiAiIiwgInBhdGhfcHJlZml4IjogIiIsICJ3aW5kb3dfdGl0bGUiOiAiIiwgIm1heF9yZWxvYWRfdGhyZWFkcyI6IDEsICJyZWxvYWRfaW50ZXJ2YWwiOiA1LjAsICJyZWxvYWRfdGFzayI6ICJhdXRvIiwgInJlbG9hZF9tdWx0aWZpbGUiOiBudWxsLCAicmVsb2FkX211bHRpZmlsZV9pbmFjdGl2ZV9zZWNzIjogODY0MDAsICJnZW5lcmljX2RhdGEiOiAiYXV0byIsICJzYW1wbGVzX3Blcl9wbHVnaW4iOiB7fSwgImN1c3RvbV9wcmVkaWN0X2ZuIjogIiIsICJ3aXRfZGF0YV9kaXIiOiAiIiwgIl9fdGVuc29yYm9hcmRfc3ViY29tbWFuZCI6ICJzZXJ2ZSJ9fX0=",
+ "https://localhost:6006/chart_worker.js?_file_hash=c4417681": {
+ "data": "KCgpPT57dmFyIEgwPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxWMD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgRzA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGFmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFcwPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkscTA9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgY2Y9TWF0aC5wb3csbGY9KG4sdCxlKT0+dCBpbiBuP0gwKG4sdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pOm5bdF09ZSxObz0obix0KT0+e2Zvcih2YXIgZSBpbiB0fHwodD17fSkpVzAuY2FsbCh0LGUpJiZsZihuLGUsdFtlXSk7aWYoYWYpZm9yKHZhciBlIG9mIGFmKHQpKXEwLmNhbGwodCxlKSYmbGYobixlLHRbZV0pO3JldHVybiBufSx1Zj0obix0KT0+VjAobixHMCh0KSk7dmFyIGhmPShuLHQsZSk9Pm5ldyBQcm9taXNlKChpLHIpPT57dmFyIHM9bD0+e3RyeXthKGUubmV4dChsKSl9Y2F0Y2goYyl7cihjKX19LG89bD0+e3RyeXthKGUudGhyb3cobCkpfWNhdGNoKGMpe3IoYyl9fSxhPWw9PmwuZG9uZT9pKGwudmFsdWUpOlByb21pc2UucmVzb2x2ZShsLnZhbHVlKS50aGVuKHMsbyk7YSgoZT1lLmFwcGx5KG4sdCkpLm5leHQoKSl9KTt2YXIgb247KGZ1bmN0aW9uKG4pe25bbi5MSU5FQVI9MF09IkxJTkVBUiIsbltuLkxPRzEwPTFdPSJMT0cxMCIsbltuLlRJTUU9Ml09IlRJTUUifSkob258fChvbj17fSkpO2Z1bmN0aW9uIGFuKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIGlzKG4pe3JldHVybiBuLmxlbmd0aD09PTEmJihuPVgwKG4pKSx7bGVmdDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPDA/aT1zKzE6cj1zfXJldHVybiBpfSxyaWdodDpmdW5jdGlvbih0LGUsaSxyKXtmb3IoaT09bnVsbCYmKGk9MCkscj09bnVsbCYmKHI9dC5sZW5ndGgpO2k8cjspe3ZhciBzPWkrcj4+PjE7bih0W3NdLGUpPjA/cj1zOmk9cysxfXJldHVybiBpfX19ZnVuY3Rpb24gWDAobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFuKG4odCksZSl9fXZhciBmZj1pcyhhbiksZGY9ZmYucmlnaHQsWTA9ZmYubGVmdCxCbj1kZjt2YXIgcGY9QXJyYXkucHJvdG90eXBlLEowPXBmLnNsaWNlLCQwPXBmLm1hcDt2YXIga2w9TWF0aC5zcXJ0KDUwKSxIbD1NYXRoLnNxcnQoMTApLFZsPU1hdGguc3FydCgyKTtmdW5jdGlvbiBycyhuLHQsZSl7dmFyIGkscj0tMSxzLG8sYTtpZih0PSt0LG49K24sZT0rZSxuPT09dCYmZT4wKXJldHVybltuXTtpZigoaT10PG4pJiYocz1uLG49dCx0PXMpLChhPUppKG4sdCxlKSk9PT0wfHwhaXNGaW5pdGUoYSkpcmV0dXJuW107aWYoYT4wKWZvcihuPU1hdGguY2VpbChuL2EpLHQ9TWF0aC5mbG9vcih0L2EpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKHQtbisxKSk7KytyPHM7KW9bcl09KG4rcikqYTtlbHNlIGZvcihuPU1hdGguZmxvb3IobiphKSx0PU1hdGguY2VpbCh0KmEpLG89bmV3IEFycmF5KHM9TWF0aC5jZWlsKG4tdCsxKSk7KytyPHM7KW9bcl09KG4tcikvYTtyZXR1cm4gaSYmby5yZXZlcnNlKCksb31mdW5jdGlvbiBKaShuLHQsZSl7dmFyIGk9KHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSxzPWkvTWF0aC5wb3coMTAscik7cmV0dXJuIHI+PTA/KHM+PWtsPzEwOnM+PUhsPzU6cz49Vmw/MjoxKSpNYXRoLnBvdygxMCxyKTotTWF0aC5wb3coMTAsLXIpLyhzPj1rbD8xMDpzPj1IbD81OnM+PVZsPzI6MSl9ZnVuY3Rpb24gX24obix0LGUpe3ZhciBpPU1hdGguYWJzKHQtbikvTWF0aC5tYXgoMCxlKSxyPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2coaSkvTWF0aC5MTjEwKSkscz1pL3I7cmV0dXJuIHM+PWtsP3IqPTEwOnM+PUhsP3IqPTU6cz49VmwmJihyKj0yKSx0PG4/LXI6cn12YXIgZXg9QXJyYXkucHJvdG90eXBlLnNsaWNlO3ZhciBueD17dmFsdWU6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiB5Zigpe2Zvcih2YXIgbj0wLHQ9YXJndW1lbnRzLmxlbmd0aCxlPXt9LGk7bjx0Oysrbil7aWYoIShpPWFyZ3VtZW50c1tuXSsiIil8fGkgaW4gZXx8L1tccy5dLy50ZXN0KGkpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2kpO2VbaV09W119cmV0dXJuIG5ldyB6byhlKX1mdW5jdGlvbiB6byhuKXt0aGlzLl89bn1mdW5jdGlvbiBpeChuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfXpvLnByb3RvdHlwZT15Zi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnpvLG9uOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5fLGk9aXgobisiIixlKSxyLHM9LTEsbz1pLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytzPG87KWlmKChyPShuPWlbc10pLnR5cGUpJiYocj1yeChlW3JdLG4ubmFtZSkpKXJldHVybiByO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK3M8bzspaWYocj0obj1pW3NdKS50eXBlKWVbcl09eGYoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZih0PT1udWxsKWZvcihyIGluIGUpZVtyXT14ZihlW3JdLG4ubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBuPXt9LHQ9dGhpcy5fO2Zvcih2YXIgZSBpbiB0KW5bZV09dFtlXS5zbGljZSgpO3JldHVybiBuZXcgem8obil9LGNhbGw6ZnVuY3Rpb24obix0KXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBlPW5ldyBBcnJheShyKSxpPTAscixzO2k8cjsrK2kpZVtpXT1hcmd1bWVudHNbaSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KG4pKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK24pO2ZvcihzPXRoaXMuX1tuXSxpPTAscj1zLmxlbmd0aDtpPHI7KytpKXNbaV0udmFsdWUuYXBwbHkodCxlKX0sYXBwbHk6ZnVuY3Rpb24obix0LGUpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKHZhciBpPXRoaXMuX1tuXSxyPTAscz1pLmxlbmd0aDtyPHM7KytyKWlbcl0udmFsdWUuYXBwbHkodCxlKX19O2Z1bmN0aW9uIHJ4KG4sdCl7Zm9yKHZhciBlPTAsaT1uLmxlbmd0aCxyO2U8aTsrK2UpaWYoKHI9bltlXSkubmFtZT09PXQpcmV0dXJuIHIudmFsdWV9ZnVuY3Rpb24geGYobix0LGUpe2Zvcih2YXIgaT0wLHI9bi5sZW5ndGg7aTxyOysraSlpZihuW2ldLm5hbWU9PT10KXtuW2ldPW54LG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBlIT1udWxsJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn12YXIgV2w9eWY7dmFyIFVvPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixxbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6VW8seGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiB3bihuKXt2YXIgdD1uKz0iIixlPXQuaW5kZXhPZigiOiIpO3JldHVybiBlPj0wJiYodD1uLnNsaWNlKDAsZSkpIT09InhtbG5zIiYmKG49bi5zbGljZShlKzEpKSxxbC5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6cWxbdF0sbG9jYWw6bn06bn1mdW5jdGlvbiBzeChuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQsZT10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gZT09PVVvJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1Vbz90LmNyZWF0ZUVsZW1lbnQobik6dC5jcmVhdGVFbGVtZW50TlMoZSxuKX19ZnVuY3Rpb24gb3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gQm8obil7dmFyIHQ9d24obik7cmV0dXJuKHQubG9jYWw/b3g6c3gpKHQpfWZ1bmN0aW9uIGF4KCl7fWZ1bmN0aW9uIGRpKG4pe3JldHVybiBuPT1udWxsP2F4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihuKX19ZnVuY3Rpb24gdmYobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPWRpKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBzPXRbcl0sbz1zLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KG8pLGwsYyx1PTA7dTxvOysrdSkobD1zW3VdKSYmKGM9bi5jYWxsKGwsbC5fX2RhdGFfXyx1LHMpKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxhW3VdPWMpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBseCgpe3JldHVybltdfWZ1bmN0aW9uIG9zKG4pe3JldHVybiBuPT1udWxsP2x4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChuKX19ZnVuY3Rpb24gX2Yobil7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgbz10W3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMsbykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBjZShpLHIpfWZ1bmN0aW9uIGFzKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIHdmKG4pe3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1hcyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgcz10W3JdLG89cy5sZW5ndGgsYT1pW3JdPVtdLGwsYz0wO2M8bzsrK2MpKGw9c1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxzKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgY2UoaSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBPbyhuKXtyZXR1cm4gbmV3IEFycmF5KG4ubGVuZ3RoKX1mdW5jdGlvbiBNZigpe3JldHVybiBuZXcgY2UodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoT28pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGxzKG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWxzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6bHMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX07ZnVuY3Rpb24gYmYobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fXZhciBTZj0iJCI7ZnVuY3Rpb24gY3gobix0LGUsaSxyLHMpe2Zvcih2YXIgbz0wLGEsbD10Lmxlbmd0aCxjPXMubGVuZ3RoO288YzsrK28pKGE9dFtvXSk/KGEuX19kYXRhX189c1tvXSxpW29dPWEpOmVbb109bmV3IGxzKG4sc1tvXSk7Zm9yKDtvPGw7KytvKShhPXRbb10pJiYocltvXT1hKX1mdW5jdGlvbiB1eChuLHQsZSxpLHIscyxvKXt2YXIgYSxsLGM9e30sdT10Lmxlbmd0aCxoPXMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGQ7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYoZlthXT1kPVNmK28uY2FsbChsLGwuX19kYXRhX18sYSx0KSxkIGluIGM/clthXT1sOmNbZF09bCk7Zm9yKGE9MDthPGg7KythKWQ9U2Yrby5jYWxsKG4sc1thXSxhLHMpLChsPWNbZF0pPyhpW2FdPWwsbC5fX2RhdGFfXz1zW2FdLGNbZF09bnVsbCk6ZVthXT1uZXcgbHMobixzW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbZlthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiBFZihuLHQpe2lmKCFuKXJldHVybiBkPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oTCl7ZFsrK2NdPUx9KSxkO3ZhciBlPXQ/dXg6Y3gsaT10aGlzLl9wYXJlbnRzLHI9dGhpcy5fZ3JvdXBzO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1iZihuKSk7Zm9yKHZhciBzPXIubGVuZ3RoLG89bmV3IEFycmF5KHMpLGE9bmV3IEFycmF5KHMpLGw9bmV3IEFycmF5KHMpLGM9MDtjPHM7KytjKXt2YXIgdT1pW2NdLGg9cltjXSxmPWgubGVuZ3RoLGQ9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGc9ZC5sZW5ndGgseD1hW2NdPW5ldyBBcnJheShnKSx2PW9bY109bmV3IEFycmF5KGcpLG09bFtjXT1uZXcgQXJyYXkoZik7ZSh1LGgseCx2LG0sZCx0KTtmb3IodmFyIHA9MCxiPTAsXyxTO3A8ZzsrK3ApaWYoXz14W3BdKXtmb3IocD49YiYmKGI9cCsxKTshKFM9dltiXSkmJisrYjxnOyk7Xy5fbmV4dD1TfHxudWxsfX1yZXR1cm4gbz1uZXcgY2UobyxpKSxvLl9lbnRlcj1hLG8uX2V4aXQ9bCxvfWZ1bmN0aW9uIFRmKCl7cmV0dXJuIG5ldyBjZSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE9vKSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBBZihuLHQsZSl7dmFyIGk9dGhpcy5lbnRlcigpLHI9dGhpcyxzPXRoaXMuZXhpdCgpO3JldHVybiBpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6aS5hcHBlbmQobisiIiksdCE9bnVsbCYmKHI9dChyKSksZT09bnVsbD9zLnJlbW92ZSgpOmUocyksaSYmcj9pLm1lcmdlKHIpLm9yZGVyKCk6cn1mdW5jdGlvbiBDZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgY2Uobyx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBSZigpe2Zvcih2YXIgbj10aGlzLl9ncm91cHMsdD0tMSxlPW4ubGVuZ3RoOysrdDxlOylmb3IodmFyIGk9blt0XSxyPWkubGVuZ3RoLTEscz1pW3JdLG87LS1yPj0wOykobz1pW3JdKSYmKHMmJm8uY29tcGFyZURvY3VtZW50UG9zaXRpb24ocyleNCYmcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHMpLHM9byk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gTGYobil7bnx8KG49aHgpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9uKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLHM9MDtzPGk7KytzKXtmb3IodmFyIG89ZVtzXSxhPW8ubGVuZ3RoLGw9cltzXT1uZXcgQXJyYXkoYSksYyx1PTA7dTxhOysrdSkoYz1vW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgY2Uocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIGh4KG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIFBmKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfWZ1bmN0aW9uIERmKCl7dmFyIG49bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuWysrdF09dGhpc30pLG59ZnVuY3Rpb24gSWYoKXtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLHQ9MCxlPW4ubGVuZ3RoO3Q8ZTsrK3QpZm9yKHZhciBpPW5bdF0scj0wLHM9aS5sZW5ndGg7cjxzOysrcil7dmFyIG89aVtyXTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfWZ1bmN0aW9uIE5mKCl7dmFyIG49MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytufSksbn1mdW5jdGlvbiBGZigpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiB6ZihuKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9MCxpPXQubGVuZ3RoO2U8aTsrK2UpZm9yKHZhciByPXRbZV0scz0wLG89ci5sZW5ndGgsYTtzPG87KytzKShhPXJbc10pJiZuLmNhbGwoYSxhLl9fZGF0YV9fLHMscik7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGR4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gcHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBteChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQpfX1mdW5jdGlvbiBneChuLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX19ZnVuY3Rpb24geHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gVWYobix0KXt2YXIgZT13bihuKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBpPXRoaXMubm9kZSgpO3JldHVybiBlLmxvY2FsP2kuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTppLmdldEF0dHJpYnV0ZShlKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP2UubG9jYWw/ZHg6Zng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ZS5sb2NhbD94eDpneDplLmxvY2FsP214OnB4KShlLHQpKX1mdW5jdGlvbiBrbyhuKXtyZXR1cm4gbi5vd25lckRvY3VtZW50JiZuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fG4uZG9jdW1lbnQmJm58fG4uZGVmYXVsdFZpZXd9ZnVuY3Rpb24geXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gdngobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBfeChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGk9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aT09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpLGUpfX1mdW5jdGlvbiBCZihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/eXg6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/X3g6dngpKG4sdCxlPT1udWxsPyIiOmUpKTpPbih0aGlzLm5vZGUoKSxuKX1mdW5jdGlvbiBPbihuLHQpe3JldHVybiBuLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGtvKG4pLmdldENvbXB1dGVkU3R5bGUobixudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIHd4KG4pe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW25dfX1mdW5jdGlvbiBNeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gYngobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlPT1udWxsP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX19ZnVuY3Rpb24gT2Yobix0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD93eDp0eXBlb2YgdD09ImZ1bmN0aW9uIj9ieDpNeCkobix0KSk6dGhpcy5ub2RlKClbbl19ZnVuY3Rpb24ga2Yobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIFhsKG4pe3JldHVybiBuLmNsYXNzTGlzdHx8bmV3IEhmKG4pfWZ1bmN0aW9uIEhmKG4pe3RoaXMuX25vZGU9bix0aGlzLl9uYW1lcz1rZihuLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfUhmLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dDwwJiYodGhpcy5fbmFtZXMucHVzaChuKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihuKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2Yobik+PTB9fTtmdW5jdGlvbiBWZihuLHQpe2Zvcih2YXIgZT1YbChuKSxpPS0xLHI9dC5sZW5ndGg7KytpPHI7KWUuYWRkKHRbaV0pfWZ1bmN0aW9uIEdmKG4sdCl7Zm9yKHZhciBlPVhsKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gU3gobil7cmV0dXJuIGZ1bmN0aW9uKCl7VmYodGhpcyxuKX19ZnVuY3Rpb24gRXgobil7cmV0dXJuIGZ1bmN0aW9uKCl7R2YodGhpcyxuKX19ZnVuY3Rpb24gVHgobix0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/VmY6R2YpKHRoaXMsbil9fWZ1bmN0aW9uIFdmKG4sdCl7dmFyIGU9a2YobisiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGk9WGwodGhpcy5ub2RlKCkpLHI9LTEscz1lLmxlbmd0aDsrK3I8czspaWYoIWkuY29udGFpbnMoZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/VHg6dD9TeDpFeCkoZSx0KSl9ZnVuY3Rpb24gQXgoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIEN4KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gUngobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIHFmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChuPT1udWxsP0F4Oih0eXBlb2Ygbj09ImZ1bmN0aW9uIj9SeDpDeCkobikpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEx4KCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gUHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gRHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBYZihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobj09bnVsbD9MeDoodHlwZW9mIG49PSJmdW5jdGlvbiI/RHg6UHgpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9ZnVuY3Rpb24gSXgoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gWWYoKXtyZXR1cm4gdGhpcy5lYWNoKEl4KX1mdW5jdGlvbiBOeCgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIFpmKCl7cmV0dXJuIHRoaXMuZWFjaChOeCl9ZnVuY3Rpb24gSmYobil7dmFyIHQ9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX1mdW5jdGlvbiBGeCgpe3JldHVybiBudWxsfWZ1bmN0aW9uICRmKG4sdCl7dmFyIGU9dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpCbyhuKSxpPXQ9PW51bGw/Rng6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpkaSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksaS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9ZnVuY3Rpb24gengoKXt2YXIgbj10aGlzLnBhcmVudE5vZGU7biYmbi5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBLZigpe3JldHVybiB0aGlzLmVhY2goengpfWZ1bmN0aW9uIFV4KCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBCeCgpe3ZhciBuPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShuLHRoaXMubmV4dFNpYmxpbmcpOm59ZnVuY3Rpb24gUWYobil7cmV0dXJuIHRoaXMuc2VsZWN0KG4/Qng6VXgpfWZ1bmN0aW9uIGpmKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgZWQ9e30sWWw9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYodGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gdGR8fChlZD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyIHRkO2Z1bmN0aW9uIE94KG4sdCxlKXtyZXR1cm4gbj1uZChuLHQsZSksZnVuY3Rpb24oaSl7dmFyIHI9aS5yZWxhdGVkVGFyZ2V0Oyghcnx8ciE9PXRoaXMmJiEoci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJm4uY2FsbCh0aGlzLGkpfX1mdW5jdGlvbiBuZChuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPVlsO1lsPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e1lsPXJ9fX1mdW5jdGlvbiBreChuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPSIiLGk9dC5pbmRleE9mKCIuIik7cmV0dXJuIGk+PTAmJihlPXQuc2xpY2UoaSsxKSx0PXQuc2xpY2UoMCxpKSkse3R5cGU6dCxuYW1lOmV9fSl9ZnVuY3Rpb24gSHgobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciBlPTAsaT0tMSxyPXQubGVuZ3RoLHM7ZTxyOysrZSlzPXRbZV0sKCFuLnR5cGV8fHMudHlwZT09PW4udHlwZSkmJnMubmFtZT09PW4ubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIocy50eXBlLHMubGlzdGVuZXIscy5jYXB0dXJlKTp0WysraV09czsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVngobix0LGUpe3ZhciBpPWVkLmhhc093blByb3BlcnR5KG4udHlwZSk/T3g6bmQ7cmV0dXJuIGZ1bmN0aW9uKHIscyxvKXt2YXIgYT10aGlzLl9fb24sbCxjPWkodCxzLG8pO2lmKGEpe2Zvcih2YXIgdT0wLGg9YS5sZW5ndGg7dTxoOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIobi50eXBlLGMsZSksbD17dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6ZX0sYT9hLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gaWQobix0LGUpe3ZhciBpPWt4KG4rIiIpLHIscz1pLmxlbmd0aCxvO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGE9dGhpcy5ub2RlKCkuX19vbjtpZihhKXtmb3IodmFyIGw9MCxjPWEubGVuZ3RoLHU7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPHM7KytyKWlmKChvPWlbcl0pLnR5cGU9PT11LnR5cGUmJm8ubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKGE9dD9WeDpIeCxlPT1udWxsJiYoZT0hMSkscj0wO3I8czsrK3IpdGhpcy5lYWNoKGEoaVtyXSx0LGUpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiByZChuLHQsZSl7dmFyIGk9a28obikscj1pLkN1c3RvbUV2ZW50O3R5cGVvZiByPT0iZnVuY3Rpb24iP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gR3gobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcmQodGhpcyxuLHQpfX1mdW5jdGlvbiBXeChuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiByZCh0aGlzLG4sdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBzZChuLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP1d4Okd4KShuLHQpKX12YXIgcXg9W251bGxdO2Z1bmN0aW9uIGNlKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG9kKCl7cmV0dXJuIG5ldyBjZShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHF4KX1jZS5wcm90b3R5cGU9b2QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjZSxzZWxlY3Q6dmYsc2VsZWN0QWxsOl9mLGZpbHRlcjp3ZixkYXRhOkVmLGVudGVyOk1mLGV4aXQ6VGYsam9pbjpBZixtZXJnZTpDZixvcmRlcjpSZixzb3J0OkxmLGNhbGw6UGYsbm9kZXM6RGYsbm9kZTpJZixzaXplOk5mLGVtcHR5OkZmLGVhY2g6emYsYXR0cjpVZixzdHlsZTpCZixwcm9wZXJ0eTpPZixjbGFzc2VkOldmLHRleHQ6cWYsaHRtbDpYZixyYWlzZTpZZixsb3dlcjpaZixhcHBlbmQ6SmYsaW5zZXJ0OiRmLHJlbW92ZTpLZixjbG9uZTpRZixkYXR1bTpqZixvbjppZCxkaXNwYXRjaDpzZH07dmFyIE1uPW9kO2Z1bmN0aW9uIEhvKG4sdCxlKXtuLnByb3RvdHlwZT10LnByb3RvdHlwZT1lLGUuY29uc3RydWN0b3I9bn1mdW5jdGlvbiBabChuLHQpe3ZhciBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpO2Zvcih2YXIgaSBpbiB0KWVbaV09dFtpXTtyZXR1cm4gZX1mdW5jdGlvbiBocygpe312YXIgY3M9LjcsR289MS9jcywkaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsdXM9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsY249IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLFh4PS9eIyhbMC05YS1mXXszLDh9KSQvLFl4PW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1skaSwkaSwkaV0rIlxcKSQiKSxaeD1uZXcgUmVnRXhwKCJecmdiXFwoIitbY24sY24sY25dKyJcXCkkIiksSng9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1skaSwkaSwkaSx1c10rIlxcKSQiKSwkeD1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW2NuLGNuLGNuLHVzXSsiXFwpJCIpLEt4PW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1cyxjbixjbl0rIlxcKSQiKSxReD1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VzLGNuLGNuLHVzXSsiXFwpJCIpLGFkPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O0hvKGhzLEplLHtjb3B5OmZ1bmN0aW9uKG4pe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsbil9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OmxkLGZvcm1hdEhleDpsZCxmb3JtYXRIc2w6angsZm9ybWF0UmdiOmNkLHRvU3RyaW5nOmNkfSk7ZnVuY3Rpb24gbGQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBqeCgpe3JldHVybiBwZCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBjZCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIEplKG4pe3ZhciB0LGU7cmV0dXJuIG49KG4rIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PVh4LmV4ZWMobikpPyhlPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNiksZT09PTY/dWQodCk6ZT09PTM/bmV3IFVlKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTplPT09OD9Wbyh0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTplPT09ND9Wbyh0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVl4LmV4ZWMobikpP25ldyBVZSh0WzFdLHRbMl0sdFszXSwxKToodD1aeC5leGVjKG4pKT9uZXcgVWUodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9SnguZXhlYyhuKSk/Vm8odFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9JHguZXhlYyhuKSk/Vm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9S3guZXhlYyhuKSk/ZGQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ReC5leGVjKG4pKT9kZCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOmFkLmhhc093blByb3BlcnR5KG4pP3VkKGFkW25dKTpuPT09InRyYW5zcGFyZW50Ij9uZXcgVWUoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB1ZChuKXtyZXR1cm4gbmV3IFVlKG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NSwxKX1mdW5jdGlvbiBWbyhuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IFVlKG4sdCxlLGkpfWZ1bmN0aW9uIHR5KG4pe3JldHVybiBuIGluc3RhbmNlb2YgaHN8fChuPUplKG4pKSxuPyhuPW4ucmdiKCksbmV3IFVlKG4ucixuLmcsbi5iLG4ub3BhY2l0eSkpOm5ldyBVZX1mdW5jdGlvbiBLaShuLHQsZSxpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dHkobik6bmV3IFVlKG4sdCxlLGk9PW51bGw/MTppKX1mdW5jdGlvbiBVZShuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9SG8oVWUsS2ksWmwoaHMse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW49PW51bGw/R286TWF0aC5wb3coR28sbiksbmV3IFVlKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBVZSh0aGlzLnIqbix0aGlzLmcqbix0aGlzLmIqbix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmhkLGZvcm1hdEhleDpoZCxmb3JtYXRSZ2I6ZmQsdG9TdHJpbmc6ZmR9KSk7ZnVuY3Rpb24gaGQoKXtyZXR1cm4iIyIrSmwodGhpcy5yKStKbCh0aGlzLmcpK0psKHRoaXMuYil9ZnVuY3Rpb24gZmQoKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhuPT09MT8iKSI6IiwgIituKyIpIil9ZnVuY3Rpb24gSmwobil7cmV0dXJuIG49TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChuKXx8MCkpLChuPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gZGQobix0LGUsaSl7cmV0dXJuIGk8PTA/bj10PWU9TmFOOmU8PTB8fGU+PTE/bj10PU5hTjp0PD0wJiYobj1OYU4pLG5ldyBsbihuLHQsZSxpKX1mdW5jdGlvbiBwZChuKXtpZihuIGluc3RhbmNlb2YgbG4pcmV0dXJuIG5ldyBsbihuLmgsbi5zLG4ubCxuLm9wYWNpdHkpO2lmKG4gaW5zdGFuY2VvZiBoc3x8KG49SmUobikpLCFuKXJldHVybiBuZXcgbG47aWYobiBpbnN0YW5jZW9mIGxuKXJldHVybiBuO249bi5yZ2IoKTt2YXIgdD1uLnIvMjU1LGU9bi5nLzI1NSxpPW4uYi8yNTUscj1NYXRoLm1pbih0LGUsaSkscz1NYXRoLm1heCh0LGUsaSksbz1OYU4sYT1zLXIsbD0ocytyKS8yO3JldHVybiBhPyh0PT09cz9vPShlLWkpL2ErKGU8aSkqNjplPT09cz9vPShpLXQpL2ErMjpvPSh0LWUpL2ErNCxhLz1sPC41P3MrcjoyLXMtcixvKj02MCk6YT1sPjAmJmw8MT8wOm8sbmV3IGxuKG8sYSxsLG4ub3BhY2l0eSl9ZnVuY3Rpb24gcGkobix0LGUsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3BkKG4pOm5ldyBsbihuLHQsZSxpPT1udWxsPzE6aSl9ZnVuY3Rpb24gbG4obix0LGUsaSl7dGhpcy5oPStuLHRoaXMucz0rdCx0aGlzLmw9K2UsdGhpcy5vcGFjaXR5PStpfUhvKGxuLHBpLFpsKGhzLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP0dvOk1hdGgucG93KEdvLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihuKXtyZXR1cm4gbj1uPT1udWxsP2NzOk1hdGgucG93KGNzLG4pLG5ldyBsbih0aGlzLmgsdGhpcy5zLHRoaXMubCpuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBuPXRoaXMuaCUzNjArKHRoaXMuaDwwKSozNjAsdD1pc05hTihuKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxlPXRoaXMubCxpPWUrKGU8LjU/ZToxLWUpKnQscj0yKmUtaTtyZXR1cm4gbmV3IFVlKCRsKG4+PTI0MD9uLTI0MDpuKzEyMCxyLGkpLCRsKG4scixpKSwkbChuPDEyMD9uKzI0MDpuLTEyMCxyLGkpLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm9wYWNpdHk7cmV0dXJuIG49aXNOYU4obik/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsbikpLChuPT09MT8iaHNsKCI6ImhzbGEoIikrKHRoaXMuaHx8MCkrIiwgIisodGhpcy5zfHwwKSoxMDArIiUsICIrKHRoaXMubHx8MCkqMTAwKyIlIisobj09PTE/IikiOiIsICIrbisiKSIpfX0pKTtmdW5jdGlvbiAkbChuLHQsZSl7cmV0dXJuKG48NjA/dCsoZS10KSpuLzYwOm48MTgwP2U6bjwyNDA/dCsoZS10KSooMjQwLW4pLzYwOnQpKjI1NX1mdW5jdGlvbiBLbChuLHQsZSxpLHIpe3ZhciBzPW4qbixvPXMqbjtyZXR1cm4oKDEtMypuKzMqcy1vKSp0Kyg0LTYqcyszKm8pKmUrKDErMypuKzMqcy0zKm8pKmkrbypyKS82fWZ1bmN0aW9uIG1kKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0scz1uW2krMV0sbz1pPjA/bltpLTFdOjIqci1zLGE9aTx0LTE/bltpKzJdOjIqcy1yO3JldHVybiBLbCgoZS1pL3QpKnQsbyxyLHMsYSl9fWZ1bmN0aW9uIGdkKG4pe3ZhciB0PW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmZsb29yKCgoZSU9MSk8MD8rK2U6ZSkqdCkscj1uWyhpK3QtMSkldF0scz1uW2kldF0sbz1uWyhpKzEpJXRdLGE9blsoaSsyKSV0XTtyZXR1cm4gS2woKGUtaS90KSp0LHIscyxvLGEpfX1mdW5jdGlvbiBRaShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24geGQobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG4rZSp0fX1mdW5jdGlvbiBleShuLHQsZSl7cmV0dXJuIG49TWF0aC5wb3cobixlKSx0PU1hdGgucG93KHQsZSktbixlPTEvZSxmdW5jdGlvbihpKXtyZXR1cm4gTWF0aC5wb3cobitpKnQsZSl9fWZ1bmN0aW9uIHlkKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpRaShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHZkKG4pe3JldHVybihuPStuKT09MT9ibjpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZXkodCxlLG4pOlFpKGlzTmFOKHQpP2U6dCl9fWZ1bmN0aW9uIGJuKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP3hkKG4sZSk6UWkoaXNOYU4obik/dDpuKX12YXIgbWk9ZnVuY3Rpb24gbih0KXt2YXIgZT12ZCh0KTtmdW5jdGlvbiBpKHIscyl7dmFyIG89ZSgocj1LaShyKSkuciwocz1LaShzKSkuciksYT1lKHIuZyxzLmcpLGw9ZShyLmIscy5iKSxjPWJuKHIub3BhY2l0eSxzLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPW8odSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiBfZChuKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSkscz1uZXcgQXJyYXkoZSksbyxhO2ZvcihvPTA7bzxlOysrbylhPUtpKHRbb10pLGlbb109YS5yfHwwLHJbb109YS5nfHwwLHNbb109YS5ifHwwO3JldHVybiBpPW4oaSkscj1uKHIpLHM9bihzKSxhLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gYS5yPWkobCksYS5nPXIobCksYS5iPXMobCksYSsiIn19fXZhciBueT1fZChtZCksaXk9X2QoZ2QpO2Z1bmN0aW9uIHdkKG4sdCl7dHx8KHQ9W10pO3ZhciBlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCkscjtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHI9MDtyPGU7KytyKWlbcl09bltyXSooMS1zKSt0W3JdKnM7cmV0dXJuIGl9fWZ1bmN0aW9uIE1kKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX1mdW5jdGlvbiBiZChuLHQpe3ZhciBlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxzPW5ldyBBcnJheShlKSxvO2ZvcihvPTA7bzxpOysrbylyW29dPWdpKG5bb10sdFtvXSk7Zm9yKDtvPGU7KytvKXNbb109dFtvXTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKG89MDtvPGk7KytvKXNbb109cltvXShhKTtyZXR1cm4gc319ZnVuY3Rpb24gU2Qobix0KXt2YXIgZT1uZXcgRGF0ZTtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGkpe3JldHVybiBlLnNldFRpbWUobiooMS1pKSt0KmkpLGV9fWZ1bmN0aW9uIHllKG4sdCl7cmV0dXJuIG49K24sdD0rdCxmdW5jdGlvbihlKXtyZXR1cm4gbiooMS1lKSt0KmV9fWZ1bmN0aW9uIEVkKG4sdCl7dmFyIGU9e30saT17fSxyOyhuPT09bnVsbHx8dHlwZW9mIG4hPSJvYmplY3QiKSYmKG49e30pLCh0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiKSYmKHQ9e30pO2ZvcihyIGluIHQpciBpbiBuP2Vbcl09Z2kobltyXSx0W3JdKTppW3JdPXRbcl07cmV0dXJuIGZ1bmN0aW9uKHMpe2ZvcihyIGluIGUpaVtyXT1lW3JdKHMpO3JldHVybiBpfX12YXIgamw9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLFFsPW5ldyBSZWdFeHAoamwuc291cmNlLCJnIik7ZnVuY3Rpb24gcnkobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHN5KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19ZnVuY3Rpb24gZnMobix0KXt2YXIgZT1qbC5sYXN0SW5kZXg9UWwubGFzdEluZGV4PTAsaSxyLHMsbz0tMSxhPVtdLGw9W107Zm9yKG49bisiIix0PXQrIiI7KGk9amwuZXhlYyhuKSkmJihyPVFsLmV4ZWModCkpOykocz1yLmluZGV4KT5lJiYocz10LnNsaWNlKGUscyksYVtvXT9hW29dKz1zOmFbKytvXT1zKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbb10/YVtvXSs9cjphWysrb109cjooYVsrK29dPW51bGwsbC5wdXNoKHtpOm8seDp5ZShpLHIpfSkpLGU9UWwubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYocz10LnNsaWNlKGUpLGFbb10/YVtvXSs9czphWysrb109cyksYS5sZW5ndGg8Mj9sWzBdP3N5KGxbMF0ueCk6cnkodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KWFbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBhLmpvaW4oIiIpfSl9ZnVuY3Rpb24gZ2kobix0KXt2YXIgZT10eXBlb2YgdCxpO3JldHVybiB0PT1udWxsfHxlPT09ImJvb2xlYW4iP1FpKHQpOihlPT09Im51bWJlciI/eWU6ZT09PSJzdHJpbmciPyhpPUplKHQpKT8odD1pLG1pKTpmczp0IGluc3RhbmNlb2YgSmU/bWk6dCBpbnN0YW5jZW9mIERhdGU/U2Q6TWQodCk/d2Q6QXJyYXkuaXNBcnJheSh0KT9iZDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/RWQ6eWUpKG4sdCl9ZnVuY3Rpb24gdGMobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKG4qKDEtZSkrdCplKX19dmFyIFRkPTE4MC9NYXRoLlBJLFdvPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9O2Z1bmN0aW9uIGVjKG4sdCxlLGkscixzKXt2YXIgbyxhLGw7cmV0dXJuKG89TWF0aC5zcXJ0KG4qbit0KnQpKSYmKG4vPW8sdC89byksKGw9biplK3QqaSkmJihlLT1uKmwsaS09dCpsKSwoYT1NYXRoLnNxcnQoZSplK2kqaSkpJiYoZS89YSxpLz1hLGwvPWEpLG4qaTx0KmUmJihuPS1uLHQ9LXQsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDpyLHRyYW5zbGF0ZVk6cyxyb3RhdGU6TWF0aC5hdGFuMih0LG4pKlRkLHNrZXdYOk1hdGguYXRhbihsKSpUZCxzY2FsZVg6byxzY2FsZVk6YX19dmFyIGRzLG5jLEFkLHFvO2Z1bmN0aW9uIENkKG4pe3JldHVybiBuPT09Im5vbmUiP1dvOihkc3x8KGRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5jPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxBZD1kb2N1bWVudC5kZWZhdWx0VmlldyksZHMuc3R5bGUudHJhbnNmb3JtPW4sbj1BZC5nZXRDb21wdXRlZFN0eWxlKG5jLmFwcGVuZENoaWxkKGRzKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxuYy5yZW1vdmVDaGlsZChkcyksbj1uLnNsaWNlKDcsLTEpLnNwbGl0KCIsIiksZWMoK25bMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX1mdW5jdGlvbiBSZChuKXtyZXR1cm4gbj09bnVsbD9XbzoocW98fChxbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxxby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbiksKG49cW8udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KG49bi5tYXRyaXgsZWMobi5hLG4uYixuLmMsbi5kLG4uZSxuLmYpKTpXbyl9ZnVuY3Rpb24gTGQobix0LGUsaSl7ZnVuY3Rpb24gcihjKXtyZXR1cm4gYy5sZW5ndGg/Yy5wb3AoKSsiICI6IiJ9ZnVuY3Rpb24gcyhjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsdCxudWxsLGUpO2cucHVzaCh7aTp4LTQseDp5ZShjLGgpfSx7aTp4LTIseDp5ZSh1LGYpfSl9ZWxzZShofHxmKSYmZC5wdXNoKCJ0cmFuc2xhdGUoIitoK3QrZitlKX1mdW5jdGlvbiBvKGMsdSxoLGYpe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxmLnB1c2goe2k6aC5wdXNoKHIoaCkrInJvdGF0ZSgiLG51bGwsaSktMix4OnllKGMsdSl9KSk6dSYmaC5wdXNoKHIoaCkrInJvdGF0ZSgiK3UraSl9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT9mLnB1c2goe2k6aC5wdXNoKHIoaCkrInNrZXdYKCIsbnVsbCxpKS0yLHg6eWUoYyx1KX0pOnUmJmgucHVzaChyKGgpKyJza2V3WCgiK3UraSl9ZnVuY3Rpb24gbChjLHUsaCxmLGQsZyl7aWYoYyE9PWh8fHUhPT1mKXt2YXIgeD1kLnB1c2gocihkKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zy5wdXNoKHtpOngtNCx4OnllKGMsaCl9LHtpOngtMix4OnllKHUsZil9KX1lbHNlKGghPT0xfHxmIT09MSkmJmQucHVzaChyKGQpKyJzY2FsZSgiK2grIiwiK2YrIikiKX1yZXR1cm4gZnVuY3Rpb24oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBjPW4oYyksdT1uKHUpLHMoYy50cmFuc2xhdGVYLGMudHJhbnNsYXRlWSx1LnRyYW5zbGF0ZVgsdS50cmFuc2xhdGVZLGgsZiksbyhjLnJvdGF0ZSx1LnJvdGF0ZSxoLGYpLGEoYy5za2V3WCx1LnNrZXdYLGgsZiksbChjLnNjYWxlWCxjLnNjYWxlWSx1LnNjYWxlWCx1LnNjYWxlWSxoLGYpLGM9dT1udWxsLGZ1bmN0aW9uKGQpe2Zvcih2YXIgZz0tMSx4PWYubGVuZ3RoLHY7KytnPHg7KWhbKHY9ZltnXSkuaV09di54KGQpO3JldHVybiBoLmpvaW4oIiIpfX19dmFyIGljPUxkKENkLCJweCwgIiwicHgpIiwiZGVnKSIpLHJjPUxkKFJkLCIsICIsIikiLCIpIik7ZnVuY3Rpb24gUGQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIGk9bigodD1waSh0KSkuaCwoZT1waShlKSkuaCkscj1ibih0LnMsZS5zKSxzPWJuKHQubCxlLmwpLG89Ym4odC5vcGFjaXR5LGUub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiB0Lmg9aShhKSx0LnM9cihhKSx0Lmw9cyhhKSx0Lm9wYWNpdHk9byhhKSx0KyIifX19dmFyIHNjPVBkKHlkKSxveT1QZChibik7dmFyIGppPTAsbXM9MCxwcz0wLElkPTFlMyxYbyxncyxZbz0wLHhpPTAsWm89MCx4cz10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxOZD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihuKXtzZXRUaW1lb3V0KG4sMTcpfTtmdW5jdGlvbiB0cigpe3JldHVybiB4aXx8KE5kKGF5KSx4aT14cy5ub3coKStabyl9ZnVuY3Rpb24gYXkoKXt4aT0wfWZ1bmN0aW9uIHlzKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH15cy5wcm90b3R5cGU9Sm8ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp5cyxyZXN0YXJ0OmZ1bmN0aW9uKG4sdCxlKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2U9KGU9PW51bGw/dHIoKTorZSkrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmdzIT09dGhpcyYmKGdzP2dzLl9uZXh0PXRoaXM6WG89dGhpcyxncz10aGlzKSx0aGlzLl9jYWxsPW4sdGhpcy5fdGltZT1lLG9jKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLG9jKCkpfX07ZnVuY3Rpb24gSm8obix0LGUpe3ZhciBpPW5ldyB5cztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIEZkKCl7dHIoKSwrK2ppO2Zvcih2YXIgbj1Ybyx0O247KSh0PXhpLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS1qaX1mdW5jdGlvbiBEZCgpe3hpPShZbz14cy5ub3coKSkrWm8samk9bXM9MDt0cnl7RmQoKX1maW5hbGx5e2ppPTAsY3koKSx4aT0wfX1mdW5jdGlvbiBseSgpe3ZhciBuPXhzLm5vdygpLHQ9bi1Zbzt0PklkJiYoWm8tPXQsWW89bil9ZnVuY3Rpb24gY3koKXtmb3IodmFyIG4sdD1YbyxlLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpYbz1lKTtncz1uLG9jKGkpfWZ1bmN0aW9uIG9jKG4pe2lmKCFqaSl7bXMmJihtcz1jbGVhclRpbWVvdXQobXMpKTt2YXIgdD1uLXhpO3Q+MjQ/KG48MS8wJiYobXM9c2V0VGltZW91dChEZCxuLXhzLm5vdygpLVpvKSkscHMmJihwcz1jbGVhckludGVydmFsKHBzKSkpOihwc3x8KFlvPXhzLm5vdygpLHBzPXNldEludGVydmFsKGx5LElkKSksamk9MSxOZChEZCkpfX1mdW5jdGlvbiAkbyhuLHQsZSl7dmFyIGk9bmV3IHlzO3JldHVybiB0PXQ9PW51bGw/MDordCxpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0LGUpLGl9dmFyIHV5PVdsKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLGh5PVtdLFVkPTAsYWM9MSxRbz0yLEtvPTMsemQ9NCxqbz01LHZzPTY7ZnVuY3Rpb24ga24obix0LGUsaSxyLHMpe3ZhciBvPW4uX190cmFuc2l0aW9uO2lmKCFvKW4uX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYoZSBpbiBvKXJldHVybjtmeShuLGUse25hbWU6dCxpbmRleDppLGdyb3VwOnIsb246dXksdHdlZW46aHksdGltZTpzLnRpbWUsZGVsYXk6cy5kZWxheSxkdXJhdGlvbjpzLmR1cmF0aW9uLGVhc2U6cy5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VWR9KX1mdW5jdGlvbiBfcyhuLHQpe3ZhciBlPXVlKG4sdCk7aWYoZS5zdGF0ZT5VZCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBlfWZ1bmN0aW9uIEFlKG4sdCl7dmFyIGU9dWUobix0KTtpZihlLnN0YXRlPktvKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIHVlKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gZnkobix0LGUpe3ZhciBpPW4uX190cmFuc2l0aW9uLHI7aVt0XT1lLGUudGltZXI9Sm8ocywwLGUudGltZSk7ZnVuY3Rpb24gcyhjKXtlLnN0YXRlPWFjLGUudGltZXIucmVzdGFydChvLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZvKGMtZS5kZWxheSl9ZnVuY3Rpb24gbyhjKXt2YXIgdSxoLGYsZDtpZihlLnN0YXRlIT09YWMpcmV0dXJuIGwoKTtmb3IodSBpbiBpKWlmKGQ9aVt1XSxkLm5hbWU9PT1lLm5hbWUpe2lmKGQuc3RhdGU9PT1LbylyZXR1cm4gJG8obyk7ZC5zdGF0ZT09PXpkPyhkLnN0YXRlPXZzLGQudGltZXIuc3RvcCgpLGQub24uY2FsbCgiaW50ZXJydXB0IixuLG4uX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgaVt1XSk6K3U8dCYmKGQuc3RhdGU9dnMsZC50aW1lci5zdG9wKCksZC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZigkbyhmdW5jdGlvbigpe2Uuc3RhdGU9PT1LbyYmKGUuc3RhdGU9emQsZS50aW1lci5yZXN0YXJ0KGEsZS5kZWxheSxlLnRpbWUpLGEoYykpfSksZS5zdGF0ZT1RbyxlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSxlLnN0YXRlPT09UW8pe2ZvcihlLnN0YXRlPUtvLHI9bmV3IEFycmF5KGY9ZS50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKGQ9ZS50d2Vlblt1XS52YWx1ZS5jYWxsKG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApKSYmKHJbKytoXT1kKTtyLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIGEoYyl7Zm9yKHZhciB1PWM8ZS5kdXJhdGlvbj9lLmVhc2UuY2FsbChudWxsLGMvZS5kdXJhdGlvbik6KGUudGltZXIucmVzdGFydChsKSxlLnN0YXRlPWpvLDEpLGg9LTEsZj1yLmxlbmd0aDsrK2g8ZjspcltoXS5jYWxsKG4sdSk7ZS5zdGF0ZT09PWpvJiYoZS5vbi5jYWxsKCJlbmQiLG4sbi5fX2RhdGFfXyxlLmluZGV4LGUuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe2Uuc3RhdGU9dnMsZS50aW1lci5zdG9wKCksZGVsZXRlIGlbdF07Zm9yKHZhciBjIGluIGkpcmV0dXJuO2RlbGV0ZSBuLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gd3Mobix0KXt2YXIgZT1uLl9fdHJhbnNpdGlvbixpLHIscz0hMCxvO2lmKCEhZSl7dD10PT1udWxsP251bGw6dCsiIjtmb3IobyBpbiBlKXtpZigoaT1lW29dKS5uYW1lIT09dCl7cz0hMTtjb250aW51ZX1yPWkuc3RhdGU+UW8mJmkuc3RhdGU8am8saS5zdGF0ZT12cyxpLnRpbWVyLnN0b3AoKSxpLm9uLmNhbGwocj8iaW50ZXJydXB0IjoiY2FuY2VsIixuLG4uX19kYXRhX18saS5pbmRleCxpLmdyb3VwKSxkZWxldGUgZVtvXX1zJiZkZWxldGUgbi5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIEJkKG4pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3cyh0aGlzLG4pfSl9ZnVuY3Rpb24gZHkobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsbikscz1yLnR3ZWVuO2lmKHMhPT1lKXtpPWU9cztmb3IodmFyIG89MCxhPWkubGVuZ3RoO288YTsrK28paWYoaVtvXS5uYW1lPT09dCl7aT1pLnNsaWNlKCksaS5zcGxpY2UobywxKTticmVha319ci50d2Vlbj1pfX1mdW5jdGlvbiBweShuLHQsZSl7dmFyIGkscjtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9QWUodGhpcyxuKSxvPXMudHdlZW47aWYobyE9PWkpe3I9KGk9bykuc2xpY2UoKTtmb3IodmFyIGE9e25hbWU6dCx2YWx1ZTplfSxsPTAsYz1yLmxlbmd0aDtsPGM7KytsKWlmKHJbbF0ubmFtZT09PXQpe3JbbF09YTticmVha31sPT09YyYmci5wdXNoKGEpfXMudHdlZW49cn19ZnVuY3Rpb24gT2Qobix0KXt2YXIgZT10aGlzLl9pZDtpZihuKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT11ZSh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAscz1pLmxlbmd0aCxvO3I8czsrK3IpaWYoKG89aVtyXSkubmFtZT09PW4pcmV0dXJuIG8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9keTpweSkoZSxuLHQpKX1mdW5jdGlvbiBlcihuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPUFlKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gdWUocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gdGEobix0KXt2YXIgZTtyZXR1cm4odHlwZW9mIHQ9PSJudW1iZXIiP3llOnQgaW5zdGFuY2VvZiBKZT9taTooZT1KZSh0KSk/KHQ9ZSxtaSk6ZnMpKG4sdCl9ZnVuY3Rpb24gbXkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9fWZ1bmN0aW9uIGd5KG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24geHkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBvPT09cj9udWxsOm89PT1pP3M6cz10KGk9byxlKX19ZnVuY3Rpb24geXkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09aT9zOnM9dChpPW8sZSl9fWZ1bmN0aW9uIHZ5KG4sdCxlKXt2YXIgaSxyLHM7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG8sYT1lKHRoaXMpLGw7cmV0dXJuIGE9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuKToobz10aGlzLmdldEF0dHJpYnV0ZShuKSxsPWErIiIsbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpKX19ZnVuY3Rpb24gX3kobix0LGUpe3ZhciBpLHIscztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbyxhPWUodGhpcyksbDtyZXR1cm4gYT09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKToobz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCksbD1hKyIiLG89PT1sP251bGw6bz09PWkmJmw9PT1yP3M6KHI9bCxzPXQoaT1vLGEpKSl9fWZ1bmN0aW9uIGtkKG4sdCl7dmFyIGU9d24obiksaT1lPT09InRyYW5zZm9ybSI/cmM6dGE7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKG4sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KGUubG9jYWw/X3k6dnkpKGUsaSxlcih0aGlzLCJhdHRyLiIrbix0KSk6dD09bnVsbD8oZS5sb2NhbD9neTpteSkoZSk6KGUubG9jYWw/eXk6eHkpKGUsaSx0KSl9ZnVuY3Rpb24gd3kobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUobix0LmNhbGwodGhpcyxlKSl9fWZ1bmN0aW9uIE15KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsLHQuY2FsbCh0aGlzLGUpKX19ZnVuY3Rpb24gYnkobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZNeShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gU3kobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PWkmJihlPShpPXMpJiZ3eShuLHMpKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gSGQobix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBpPXduKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/Ynk6U3kpKGksdCkpfWZ1bmN0aW9uIEV5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7X3ModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFR5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtfcyh0aGlzLG4pLmRlbGF5PXR9fWZ1bmN0aW9uIFZkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/RXk6VHkpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmRlbGF5fWZ1bmN0aW9uIEF5KG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7QWUodGhpcyxuKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEN5KG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtBZSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIEdkKG4pe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIG49PSJmdW5jdGlvbiI/QXk6Q3kpKHQsbikpOnVlKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufWZ1bmN0aW9uIFJ5KG4sdCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe0FlKHRoaXMsbikuZWFzZT10fX1mdW5jdGlvbiBXZChuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goUnkodCxuKSk6dWUodGhpcy5ub2RlKCksdCkuZWFzZX1mdW5jdGlvbiBxZChuKXt0eXBlb2YgbiE9ImZ1bmN0aW9uIiYmKG49YXMobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIHM9dFtyXSxvPXMubGVuZ3RoLGE9aVtyXT1bXSxsLGM9MDtjPG87KytjKShsPXNbY10pJiZuLmNhbGwobCxsLl9fZGF0YV9fLGMscykmJmEucHVzaChsKTtyZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX1mdW5jdGlvbiBYZChuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgscj1lLmxlbmd0aCxzPU1hdGgubWluKGksciksbz1uZXcgQXJyYXkoaSksYT0wO2E8czsrK2EpZm9yKHZhciBsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsaD1vW2FdPW5ldyBBcnJheSh1KSxmLGQ9MDtkPHU7KytkKShmPWxbZF18fGNbZF0pJiYoaFtkXT1mKTtmb3IoO2E8aTsrK2Epb1thXT10W2FdO3JldHVybiBuZXcgd2Uobyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIEx5KG4pe3JldHVybihuKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIGU9dC5pbmRleE9mKCIuIik7cmV0dXJuIGU+PTAmJih0PXQuc2xpY2UoMCxlKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gUHkobix0LGUpe3ZhciBpLHIscz1MeSh0KT9fczpBZTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1zKHRoaXMsbiksYT1vLm9uO2EhPT1pJiYocj0oaT1hKS5jb3B5KCkpLm9uKHQsZSksby5vbj1yfX1mdW5jdGlvbiBZZChuLHQpe3ZhciBlPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dWUodGhpcy5ub2RlKCksZSkub24ub24obik6dGhpcy5lYWNoKFB5KGUsbix0KSl9ZnVuY3Rpb24gRHkobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgZSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrZSE9PW4pcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFpkKCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLER5KHRoaXMuX2lkKSl9ZnVuY3Rpb24gSmQobil7dmFyIHQ9dGhpcy5fbmFtZSxlPXRoaXMuX2lkO3R5cGVvZiBuIT0iZnVuY3Rpb24iJiYobj1kaShuKSk7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZvcih2YXIgYT1pW29dLGw9YS5sZW5ndGgsYz1zW29dPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9YVtmXSkmJihoPW4uY2FsbCh1LHUuX19kYXRhX18sZixhKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLGtuKGNbZl0sdCxlLGYsYyx1ZSh1LGUpKSk7cmV0dXJuIG5ldyB3ZShzLHRoaXMuX3BhcmVudHMsdCxlKX1mdW5jdGlvbiAkZChuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7dHlwZW9mIG4hPSJmdW5jdGlvbiImJihuPW9zKG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz1bXSxvPVtdLGE9MDthPHI7KythKWZvcih2YXIgbD1pW2FdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1uLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCksZCxnPXVlKHUsZSkseD0wLHY9Zi5sZW5ndGg7eDx2OysreCkoZD1mW3hdKSYma24oZCx0LGUseCxmLGcpO3MucHVzaChmKSxvLnB1c2godSl9cmV0dXJuIG5ldyB3ZShzLG8sdCxlKX12YXIgSXk9TW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIEtkKCl7cmV0dXJuIG5ldyBJeSh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gTnkobix0KXt2YXIgZSxpLHI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9T24odGhpcyxuKSxvPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pLE9uKHRoaXMsbikpO3JldHVybiBzPT09bz9udWxsOnM9PT1lJiZvPT09aT9yOnI9dChlPXMsaT1vKX19ZnVuY3Rpb24gUWQobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKX19ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpLHI9ZSsiIixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbik7cmV0dXJuIG89PT1yP251bGw6bz09PWk/czpzPXQoaT1vLGUpfX1mdW5jdGlvbiB6eShuLHQsZSl7dmFyIGkscixzO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPU9uKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gYT09bnVsbCYmKGw9YT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKSxPbih0aGlzLG4pKSksbz09PWw/bnVsbDpvPT09aSYmbD09PXI/czoocj1sLHM9dChpPW8sYSkpfX1mdW5jdGlvbiBVeShuLHQpe3ZhciBlLGkscixzPSJzdHlsZS4iK3Qsbz0iZW5kLiIrcyxhO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPUFlKHRoaXMsbiksYz1sLm9uLHU9bC52YWx1ZVtzXT09bnVsbD9hfHwoYT1RZCh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKG8scj11KSxsLm9uPWl9fWZ1bmN0aW9uIGpkKG4sdCxlKXt2YXIgaT0obis9IiIpPT0idHJhbnNmb3JtIj9pYzp0YTtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4obixOeShuLGkpKS5vbigiZW5kLnN0eWxlLiIrbixRZChuKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKG4senkobixpLGVyKHRoaXMsInN0eWxlLiIrbix0KSkpLmVhY2goVXkodGhpcy5faWQsbikpOnRoaXMuc3R5bGVUd2VlbihuLEZ5KG4saSx0KSxlKS5vbigiZW5kLnN0eWxlLiIrbixudWxsKX1mdW5jdGlvbiBCeShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gT3kobix0LGUpe3ZhciBpLHI7ZnVuY3Rpb24gcygpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09ciYmKGk9KHI9bykmJkJ5KG4sbyxlKSksaX1yZXR1cm4gcy5fdmFsdWU9dCxzfWZ1bmN0aW9uIHRwKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLE95KG4sdCxlPT1udWxsPyIiOmUpKX1mdW5jdGlvbiBreShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIEh5KG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIGVwKG4pe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2Ygbj09ImZ1bmN0aW9uIj9IeShlcih0aGlzLCJ0ZXh0IixuKSk6a3kobj09bnVsbD8iIjpuKyIiKSl9ZnVuY3Rpb24gVnkobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9bi5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIEd5KG4pe3ZhciB0LGU7ZnVuY3Rpb24gaSgpe3ZhciByPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiByIT09ZSYmKHQ9KGU9cikmJlZ5KHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9ZnVuY3Rpb24gbnAobil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobj09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LEd5KG4pKX1mdW5jdGlvbiBpcCgpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1lYSgpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgscz0wO3M8cjsrK3MpZm9yKHZhciBvPWlbc10sYT1vLmxlbmd0aCxsLGM9MDtjPGE7KytjKWlmKGw9b1tjXSl7dmFyIHU9dWUobCx0KTtrbihsLG4sZSxjLG8se3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IHdlKGksdGhpcy5fcGFyZW50cyxuLGUpfWZ1bmN0aW9uIHJwKCl7dmFyIG4sdCxlPXRoaXMsaT1lLl9pZCxyPWUuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihzLG8pe3ZhciBhPXt2YWx1ZTpvfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0tcj09PTAmJnMoKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPUFlKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYodD0obj11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIFd5PTA7ZnVuY3Rpb24gd2Uobix0LGUsaSl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9ZSx0aGlzLl9pZD1pfWZ1bmN0aW9uIGxjKG4pe3JldHVybiBNbigpLnRyYW5zaXRpb24obil9ZnVuY3Rpb24gZWEoKXtyZXR1cm4rK1d5fXZhciBucj1Nbi5wcm90b3R5cGU7d2UucHJvdG90eXBlPWxjLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2Usc2VsZWN0OkpkLHNlbGVjdEFsbDokZCxmaWx0ZXI6cWQsbWVyZ2U6WGQsc2VsZWN0aW9uOktkLHRyYW5zaXRpb246aXAsY2FsbDpuci5jYWxsLG5vZGVzOm5yLm5vZGVzLG5vZGU6bnIubm9kZSxzaXplOm5yLnNpemUsZW1wdHk6bnIuZW1wdHksZWFjaDpuci5lYWNoLG9uOllkLGF0dHI6a2QsYXR0clR3ZWVuOkhkLHN0eWxlOmpkLHN0eWxlVHdlZW46dHAsdGV4dDplcCx0ZXh0VHdlZW46bnAscmVtb3ZlOlpkLHR3ZWVuOk9kLGRlbGF5OlZkLGR1cmF0aW9uOkdkLGVhc2U6V2QsZW5kOnJwfTtmdW5jdGlvbiBuYShuKXtyZXR1cm4oKG4qPTIpPD0xP24qbipuOihuLT0yKSpuKm4rMikvMn12YXIgY2M9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOm5hfTtmdW5jdGlvbiBxeShuLHQpe2Zvcih2YXIgZTshKGU9bi5fX3RyYW5zaXRpb24pfHwhKGU9ZVt0XSk7KWlmKCEobj1uLnBhcmVudE5vZGUpKXJldHVybiBjYy50aW1lPXRyKCksY2M7cmV0dXJuIGV9ZnVuY3Rpb24gc3Aobil7dmFyIHQsZTtuIGluc3RhbmNlb2Ygd2U/KHQ9bi5faWQsbj1uLl9uYW1lKToodD1lYSgpLChlPWNjKS50aW1lPXRyKCksbj1uPT1udWxsP251bGw6bisiIik7Zm9yKHZhciBpPXRoaXMuX2dyb3VwcyxyPWkubGVuZ3RoLHM9MDtzPHI7KytzKWZvcih2YXIgbz1pW3NdLGE9by5sZW5ndGgsbCxjPTA7YzxhOysrYykobD1vW2NdKSYma24obCxuLHQsYyxvLGV8fHF5KGwsdCkpO3JldHVybiBuZXcgd2UoaSx0aGlzLl9wYXJlbnRzLG4sdCl9TW4ucHJvdG90eXBlLmludGVycnVwdD1CZDtNbi5wcm90b3R5cGUudHJhbnNpdGlvbj1zcDtmdW5jdGlvbiBvcChuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIFh5KG4pe3JldHVybltvcChuWzBdKSxvcChuWzFdKV19dmFyIEdQPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAodWMpLGlucHV0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PW51bGw/bnVsbDpbWytuWzBdLHRbMF1bMV1dLFsrblsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbiYmW25bMF1bMF0sblsxXVswXV19fSxXUD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBuPT1udWxsP251bGw6W1t0WzBdWzBdLCtuWzBdXSxbdFsxXVswXSwrblsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzFdLG5bMV1bMV1dfX0scVA9e25hbWU6Inh5IixoYW5kbGVzOlsibiIsInciLCJlIiwicyIsIm53IiwibmUiLCJzdyIsInNlIl0ubWFwKHVjKSxpbnB1dDpmdW5jdGlvbihuKXtyZXR1cm4gbj09bnVsbD9udWxsOlh5KG4pfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG59fTtmdW5jdGlvbiB1YyhuKXtyZXR1cm57dHlwZTpufX12YXIgYXA9TWF0aC5QSSxZeT1hcC8yLFp5PWFwKjI7dmFyIEp5PUFycmF5LnByb3RvdHlwZS5zbGljZTt2YXIgQmU9IiQiO2Z1bmN0aW9uIGlhKCl7fWlhLnByb3RvdHlwZT1scC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmlhLGhhczpmdW5jdGlvbihuKXtyZXR1cm4gQmUrbiBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbQmUrbl19LHNldDpmdW5jdGlvbihuLHQpe3JldHVybiB0aGlzW0JlK25dPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PUJlK247cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuIGluIHRoaXMpblswXT09PUJlJiZkZWxldGUgdGhpc1tuXX0sa2V5czpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBufSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4ucHVzaCh0aGlzW3RdKTtyZXR1cm4gbn0sZW50cmllczpmdW5jdGlvbigpe3ZhciBuPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmbi5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIG59LHNpemU6ZnVuY3Rpb24oKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1CZSYmKytuO3JldHVybiBufSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG5bMF09PT1CZSlyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09QmUmJm4odGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07ZnVuY3Rpb24gbHAobix0KXt2YXIgZT1uZXcgaWE7aWYobiBpbnN0YW5jZW9mIGlhKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBpPS0xLHI9bi5sZW5ndGgscztpZih0PT1udWxsKWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KHM9bltpXSxpLG4pLHMpfWVsc2UgaWYobilmb3IodmFyIG8gaW4gbillLnNldChvLG5bb10pO3JldHVybiBlfXZhciB5aT1scDtmdW5jdGlvbiByYSgpe312YXIgdmk9eWkucHJvdG90eXBlO3JhLnByb3RvdHlwZT0keS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnJhLGhhczp2aS5oYXMsYWRkOmZ1bmN0aW9uKG4pe3JldHVybiBuKz0iIix0aGlzW0JlK25dPW4sdGhpc30scmVtb3ZlOnZpLnJlbW92ZSxjbGVhcjp2aS5jbGVhcix2YWx1ZXM6dmkua2V5cyxzaXplOnZpLnNpemUsZW1wdHk6dmkuZW1wdHksZWFjaDp2aS5lYWNofTtmdW5jdGlvbiAkeShuLHQpe3ZhciBlPW5ldyByYTtpZihuIGluc3RhbmNlb2YgcmEpbi5lYWNoKGZ1bmN0aW9uKHMpe2UuYWRkKHMpfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9dmFyIEt5PUFycmF5LnByb3RvdHlwZSxjcD1LeS5zbGljZTt2YXIgVEk9TWF0aC5QSSooMy1NYXRoLnNxcnQoNSkpO2Z1bmN0aW9uIGhwKG4pe3JldHVybiBNYXRoLmFicyhuPU1hdGgucm91bmQobikpPj0xZTIxP24udG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpuLnRvU3RyaW5nKDEwKX1mdW5jdGlvbiBfaShuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiB1bihuKXtyZXR1cm4gbj1faShNYXRoLmFicyhuKSksbj9uWzFdOk5hTn1mdW5jdGlvbiBmcChuLHQpe3JldHVybiBmdW5jdGlvbihlLGkpe2Zvcih2YXIgcj1lLmxlbmd0aCxzPVtdLG89MCxhPW5bMF0sbD0wO3I+MCYmYT4wJiYobCthKzE+aSYmKGE9TWF0aC5tYXgoMSxpLWwpKSxzLnB1c2goZS5zdWJzdHJpbmcoci09YSxyK2EpKSwhKChsKz1hKzEpPmkpKTspYT1uW289KG8rMSklbi5sZW5ndGhdO3JldHVybiBzLnJldmVyc2UoKS5qb2luKHQpfX1mdW5jdGlvbiBkcChuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gblsrZV19KX19dmFyIHR2PS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIEhuKG4pe2lmKCEodD10di5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgc2Eoe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9SG4ucHJvdG90eXBlPXNhLnByb3RvdHlwZTtmdW5jdGlvbiBzYShuKXt0aGlzLmZpbGw9bi5maWxsPT09dm9pZCAwPyIgIjpuLmZpbGwrIiIsdGhpcy5hbGlnbj1uLmFsaWduPT09dm9pZCAwPyI+IjpuLmFsaWduKyIiLHRoaXMuc2lnbj1uLnNpZ249PT12b2lkIDA/Ii0iOm4uc2lnbisiIix0aGlzLnN5bWJvbD1uLnN5bWJvbD09PXZvaWQgMD8iIjpuLnN5bWJvbCsiIix0aGlzLnplcm89ISFuLnplcm8sdGhpcy53aWR0aD1uLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorbi53aWR0aCx0aGlzLmNvbW1hPSEhbi5jb21tYSx0aGlzLnByZWNpc2lvbj1uLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K24ucHJlY2lzaW9uLHRoaXMudHJpbT0hIW4udHJpbSx0aGlzLnR5cGU9bi50eXBlPT09dm9pZCAwPyIiOm4udHlwZSsiIn1zYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodGhpcy53aWR0aD09PXZvaWQgMD8iIjpNYXRoLm1heCgxLHRoaXMud2lkdGh8MCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHRoaXMucHJlY2lzaW9uPT09dm9pZCAwPyIiOiIuIitNYXRoLm1heCgwLHRoaXMucHJlY2lzaW9ufDApKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTtmdW5jdGlvbiBwcChuKXt0OmZvcih2YXIgdD1uLmxlbmd0aCxlPTEsaT0tMSxyO2U8dDsrK2Upc3dpdGNoKG5bZV0pe2Nhc2UiLiI6aT1yPWU7YnJlYWs7Y2FzZSIwIjppPT09MCYmKGk9ZSkscj1lO2JyZWFrO2RlZmF1bHQ6aWYoIStuW2VdKWJyZWFrIHQ7aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP24uc2xpY2UoMCxpKStuLnNsaWNlKHIrMSk6bn12YXIgaGM7ZnVuY3Rpb24gbXAobix0KXt2YXIgZT1faShuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdLHM9ci0oaGM9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSozKSsxLG89aS5sZW5ndGg7cmV0dXJuIHM9PT1vP2k6cz5vP2krbmV3IEFycmF5KHMtbysxKS5qb2luKCIwIik6cz4wP2kuc2xpY2UoMCxzKSsiLiIraS5zbGljZShzKToiMC4iK25ldyBBcnJheSgxLXMpLmpvaW4oIjAiKStfaShuLE1hdGgubWF4KDAsdCtzLTEpKVswXX1mdW5jdGlvbiBmYyhuLHQpe3ZhciBlPV9pKG4sdCk7aWYoIWUpcmV0dXJuIG4rIiI7dmFyIGk9ZVswXSxyPWVbMV07cmV0dXJuIHI8MD8iMC4iK25ldyBBcnJheSgtcikuam9pbigiMCIpK2k6aS5sZW5ndGg+cisxP2kuc2xpY2UoMCxyKzEpKyIuIitpLnNsaWNlKHIrMSk6aStuZXcgQXJyYXkoci1pLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIGRjPXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4obioxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6aHAsZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxnOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9QcmVjaXNpb24odCl9LG86ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24obix0KXtyZXR1cm4gZmMobioxMDAsdCl9LHI6ZmMsczptcCxYOmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnJvdW5kKG4pLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIHBjKG4pe3JldHVybiBufXZhciBncD1BcnJheS5wcm90b3R5cGUubWFwLHhwPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhCNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHlwKG4pe3ZhciB0PW4uZ3JvdXBpbmc9PT12b2lkIDB8fG4udGhvdXNhbmRzPT09dm9pZCAwP3BjOmZwKGdwLmNhbGwobi5ncm91cGluZyxOdW1iZXIpLG4udGhvdXNhbmRzKyIiKSxlPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVswXSsiIixpPW4uY3VycmVuY3k9PT12b2lkIDA/IiI6bi5jdXJyZW5jeVsxXSsiIixyPW4uZGVjaW1hbD09PXZvaWQgMD8iLiI6bi5kZWNpbWFsKyIiLHM9bi5udW1lcmFscz09PXZvaWQgMD9wYzpkcChncC5jYWxsKG4ubnVtZXJhbHMsU3RyaW5nKSksbz1uLnBlcmNlbnQ9PT12b2lkIDA/IiUiOm4ucGVyY2VudCsiIixhPW4ubWludXM9PT12b2lkIDA/Ii0iOm4ubWludXMrIiIsbD1uLm5hbj09PXZvaWQgMD8iTmFOIjpuLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9SG4oaCk7dmFyIGY9aC5maWxsLGQ9aC5hbGlnbixnPWguc2lnbix4PWguc3ltYm9sLHY9aC56ZXJvLG09aC53aWR0aCxwPWguY29tbWEsYj1oLnByZWNpc2lvbixfPWgudHJpbSxTPWgudHlwZTtTPT09Im4iPyhwPSEwLFM9ImciKTpkY1tTXXx8KGI9PT12b2lkIDAmJihiPTEyKSxfPSEwLFM9ImciKSwodnx8Zj09PSIwIiYmZD09PSI9IikmJih2PSEwLGY9IjAiLGQ9Ij0iKTt2YXIgTD14PT09IiQiP2U6eD09PSIjIiYmL1tib3hYXS8udGVzdChTKT8iMCIrUy50b0xvd2VyQ2FzZSgpOiIiLEE9eD09PSIkIj9pOi9bJXBdLy50ZXN0KFMpP286IiIsSD1kY1tTXSx0dD0vW2RlZmdwcnMlXS8udGVzdChTKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KFMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIFgoeSl7dmFyIFI9TCxEPUEsRix6LE47aWYoUz09PSJjIilEPUgoeSkrRCx5PSIiO2Vsc2V7eT0reTt2YXIgVj15PDB8fDEveTwwO2lmKHk9aXNOYU4oeSk/bDpIKE1hdGguYWJzKHkpLGIpLF8mJih5PXBwKHkpKSxWJiYreT09MCYmZyE9PSIrIiYmKFY9ITEpLFI9KFY/Zz09PSIoIj9nOmE6Zz09PSItInx8Zz09PSIoIj8iIjpnKStSLEQ9KFM9PT0icyI/eHBbOCtoYy8zXToiIikrRCsoViYmZz09PSIoIj8iKSI6IiIpLHR0KXtmb3IoRj0tMSx6PXkubGVuZ3RoOysrRjx6OylpZihOPXkuY2hhckNvZGVBdChGKSw0OD5OfHxOPjU3KXtEPShOPT09NDY/cit5LnNsaWNlKEYrMSk6eS5zbGljZShGKSkrRCx5PXkuc2xpY2UoMCxGKTticmVha319fXAmJiF2JiYoeT10KHksMS8wKSk7dmFyIFE9Ui5sZW5ndGgreS5sZW5ndGgrRC5sZW5ndGgsYXQ9UTxtP25ldyBBcnJheShtLVErMSkuam9pbihmKToiIjtzd2l0Y2gocCYmdiYmKHk9dChhdCt5LGF0Lmxlbmd0aD9tLUQubGVuZ3RoOjEvMCksYXQ9IiIpLGQpe2Nhc2UiPCI6eT1SK3krRCthdDticmVhaztjYXNlIj0iOnk9UithdCt5K0Q7YnJlYWs7Y2FzZSJeIjp5PWF0LnNsaWNlKDAsUT1hdC5sZW5ndGg+PjEpK1IreStEK2F0LnNsaWNlKFEpO2JyZWFrO2RlZmF1bHQ6eT1hdCtSK3krRDticmVha31yZXR1cm4gcyh5KX1yZXR1cm4gWC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxYfWZ1bmN0aW9uIHUoaCxmKXt2YXIgZD1jKChoPUhuKGgpLGgudHlwZT0iZiIsaCkpLGc9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHVuKGYpLzMpKSkqMyx4PU1hdGgucG93KDEwLC1nKSx2PXhwWzgrZy8zXTtyZXR1cm4gZnVuY3Rpb24obSl7cmV0dXJuIGQoeCptKSt2fX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBvYSxPZSxhYTttYyh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSk7ZnVuY3Rpb24gbWMobil7cmV0dXJuIG9hPXlwKG4pLE9lPW9hLmZvcm1hdCxhYT1vYS5mb3JtYXRQcmVmaXgsb2F9ZnVuY3Rpb24gZ2Mobil7cmV0dXJuIE1hdGgubWF4KDAsLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geGMobix0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodW4odCkvMykpKSozLXVuKE1hdGguYWJzKG4pKSl9ZnVuY3Rpb24geWMobix0KXtyZXR1cm4gbj1NYXRoLmFicyhuKSx0PU1hdGguYWJzKHQpLW4sTWF0aC5tYXgoMCx1bih0KS11bihuKSkrMX1mdW5jdGlvbiBXZSgpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBldj1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXtyZXR1cm4gaT1pPT1udWxsPzA6K2kscj1yPT1udWxsPzE6K3IsYXJndW1lbnRzLmxlbmd0aD09PTE/KHI9aSxpPTApOnItPWksZnVuY3Rpb24oKXtyZXR1cm4gdCgpKnIraX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciB2Yz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSxyKXt2YXIgcyxvO3JldHVybiBpPWk9PW51bGw/MDoraSxyPXI9PW51bGw/MTorcixmdW5jdGlvbigpe3ZhciBhO2lmKHMhPW51bGwpYT1zLHM9bnVsbDtlbHNlIGRvIHM9dCgpKjItMSxhPXQoKSoyLTEsbz1zKnMrYSphO3doaWxlKCFvfHxvPjEpO3JldHVybiBpK3IqYSpNYXRoLnNxcnQoLTIqTWF0aC5sb2cobykvbyl9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTt2YXIgbnY9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKCl7dmFyIGk9dmMuc291cmNlKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5leHAoaSgpKX19cmV0dXJuIGUuc291cmNlPW4sZX0oV2UpO3ZhciBfYz1mdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAscz0wO3M8aTsrK3Mpcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIGl2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXt2YXIgcj1fYy5zb3VyY2UodCkoaSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShXZSk7dmFyIHJ2PWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4tTWF0aC5sb2coMS10KCkpL2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KFdlKTtmdW5jdGlvbiBQZShuLHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOnRoaXMucmFuZ2Uobik7YnJlYWs7ZGVmYXVsdDp0aGlzLnJhbmdlKHQpLmRvbWFpbihuKTticmVha31yZXR1cm4gdGhpc312YXIgdnA9QXJyYXkucHJvdG90eXBlLGJzPXZwLm1hcCx3aT12cC5zbGljZTtmdW5jdGlvbiBfcChuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gd2Mobil7cmV0dXJuK259dmFyIHdwPVswLDFdO2Z1bmN0aW9uIERlKG4pe3JldHVybiBufWZ1bmN0aW9uIE1jKG4sdCl7cmV0dXJuKHQtPW49K24pP2Z1bmN0aW9uKGUpe3JldHVybihlLW4pL3R9Ol9wKGlzTmFOKHQpP05hTjouNSl9ZnVuY3Rpb24gTXAobil7dmFyIHQ9blswXSxlPW5bbi5sZW5ndGgtMV0saTtyZXR1cm4gdD5lJiYoaT10LHQ9ZSxlPWkpLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUscikpfX1mdW5jdGlvbiBvdihuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0scz10WzBdLG89dFsxXTtyZXR1cm4gcjxpPyhpPU1jKHIsaSkscz1lKG8scykpOihpPU1jKGkscikscz1lKHMsbykpLGZ1bmN0aW9uKGEpe3JldHVybiBzKGkoYSkpfX1mdW5jdGlvbiBhdihuLHQsZSl7dmFyIGk9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTEscj1uZXcgQXJyYXkoaSkscz1uZXcgQXJyYXkoaSksbz0tMTtmb3IobltpXTxuWzBdJiYobj1uLnNsaWNlKCkucmV2ZXJzZSgpLHQ9dC5zbGljZSgpLnJldmVyc2UoKSk7KytvPGk7KXJbb109TWMobltvXSxuW28rMV0pLHNbb109ZSh0W29dLHRbbysxXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBsPUJuKG4sYSwxLGkpLTE7cmV0dXJuIHNbbF0ocltsXShhKSl9fWZ1bmN0aW9uIFZuKG4sdCl7cmV0dXJuIHQuZG9tYWluKG4uZG9tYWluKCkpLnJhbmdlKG4ucmFuZ2UoKSkuaW50ZXJwb2xhdGUobi5pbnRlcnBvbGF0ZSgpKS5jbGFtcChuLmNsYW1wKCkpLnVua25vd24obi51bmtub3duKCkpfWZ1bmN0aW9uIFNzKCl7dmFyIG49d3AsdD13cCxlPWdpLGkscixzLG89RGUsYSxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2F2Om92LGw9Yz1udWxsLGh9ZnVuY3Rpb24gaChmKXtyZXR1cm4gaXNOYU4oZj0rZik/czoobHx8KGw9YShuLm1hcChpKSx0LGUpKSkoaShvKGYpKSl9cmV0dXJuIGguaW52ZXJ0PWZ1bmN0aW9uKGYpe3JldHVybiBvKHIoKGN8fChjPWEodCxuLm1hcChpKSx5ZSkpKShmKSkpfSxoLmRvbWFpbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1icy5jYWxsKGYsd2MpLG89PT1EZXx8KG89TXAobikpLHUoKSk6bi5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXdpLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD13aS5jYWxsKGYpLGU9dGMsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWY/TXAobik6RGUsaCk6byE9PURlfSxoLmludGVycG9sYXRlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWYsdSgpKTplfSxoLnVua25vd249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZixoKTpzfSxmdW5jdGlvbihmLGQpe3JldHVybiBpPWYscj1kLHUoKX19ZnVuY3Rpb24gRXMobix0KXtyZXR1cm4gU3MoKShuLHQpfWZ1bmN0aW9uIGJjKG4sdCxlLGkpe3ZhciByPV9uKG4sdCxlKSxzO3N3aXRjaChpPUhuKGk9PW51bGw/IixmIjppKSxpLnR5cGUpe2Nhc2UicyI6e3ZhciBvPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gaS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXhjKHIsbykpJiYoaS5wcmVjaXNpb249cyksYWEoaSxvKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7aS5wcmVjaXNpb249PW51bGwmJiFpc05hTihzPXljKHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iZSIpKTticmVha31jYXNlImYiOmNhc2UiJSI6e2kucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4ocz1nYyhyKSkmJihpLnByZWNpc2lvbj1zLShpLnR5cGU9PT0iJSIpKjIpO2JyZWFrfX1yZXR1cm4gT2UoaSl9ZnVuY3Rpb24gTWkobil7dmFyIHQ9bi5kb21haW47cmV0dXJuIG4udGlja3M9ZnVuY3Rpb24oZSl7dmFyIGk9dCgpO3JldHVybiBycyhpWzBdLGlbaS5sZW5ndGgtMV0sZT09bnVsbD8xMDplKX0sbi50aWNrRm9ybWF0PWZ1bmN0aW9uKGUsaSl7dmFyIHI9dCgpO3JldHVybiBiYyhyWzBdLHJbci5sZW5ndGgtMV0sZT09bnVsbD8xMDplLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7ZT09bnVsbCYmKGU9MTApO3ZhciBpPXQoKSxyPTAscz1pLmxlbmd0aC0xLG89aVtyXSxhPWlbc10sbDtyZXR1cm4gYTxvJiYobD1vLG89YSxhPWwsbD1yLHI9cyxzPWwpLGw9SmkobyxhLGUpLGw+MD8obz1NYXRoLmZsb29yKG8vbCkqbCxhPU1hdGguY2VpbChhL2wpKmwsbD1KaShvLGEsZSkpOmw8MCYmKG89TWF0aC5jZWlsKG8qbCkvbCxhPU1hdGguZmxvb3IoYSpsKS9sLGw9SmkobyxhLGUpKSxsPjA/KGlbcl09TWF0aC5mbG9vcihvL2wpKmwsaVtzXT1NYXRoLmNlaWwoYS9sKSpsLHQoaSkpOmw8MCYmKGlbcl09TWF0aC5jZWlsKG8qbCkvbCxpW3NdPU1hdGguZmxvb3IoYSpsKS9sLHQoaSkpLG59LG59ZnVuY3Rpb24gaXIoKXt2YXIgbj1FcyhEZSxEZSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLGlyKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksTWkobil9ZnVuY3Rpb24gbGEobix0KXtuPW4uc2xpY2UoKTt2YXIgZT0wLGk9bi5sZW5ndGgtMSxyPW5bZV0scz1uW2ldLG87cmV0dXJuIHM8ciYmKG89ZSxlPWksaT1vLG89cixyPXMscz1vKSxuW2VdPXQuZmxvb3IociksbltpXT10LmNlaWwocyksbn1mdW5jdGlvbiBicChuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gU3Aobil7cmV0dXJuIE1hdGguZXhwKG4pfWZ1bmN0aW9uIGx2KG4pe3JldHVybi1NYXRoLmxvZygtbil9ZnVuY3Rpb24gY3Yobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiB1dihuKXtyZXR1cm4gaXNGaW5pdGUobik/KygiMWUiK24pOm48MD8wOm59ZnVuY3Rpb24gaHYobil7cmV0dXJuIG49PT0xMD91djpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX1mdW5jdGlvbiBmdihuKXtyZXR1cm4gbj09PU1hdGguRT9NYXRoLmxvZzpuPT09MTAmJk1hdGgubG9nMTB8fG49PT0yJiZNYXRoLmxvZzJ8fChuPU1hdGgubG9nKG4pLGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9ufSl9ZnVuY3Rpb24gRXAobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1uKC10KX19ZnVuY3Rpb24gU2Mobil7dmFyIHQ9bihicCxTcCksZT10LmRvbWFpbixpPTEwLHIscztmdW5jdGlvbiBvKCl7cmV0dXJuIHI9ZnYoaSkscz1odihpKSxlKClbMF08MD8ocj1FcChyKSxzPUVwKHMpLG4obHYsY3YpKTpuKGJwLFNwKSx0fXJldHVybiB0LmJhc2U9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2EsbygpKTppfSx0LmRvbWFpbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZShhKSxvKCkpOmUoKX0sdC50aWNrcz1mdW5jdGlvbihhKXt2YXIgbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXSxoOyhoPXU8YykmJihmPWMsYz11LHU9Zik7dmFyIGY9cihjKSxkPXIodSksZyx4LHYsbT1hPT1udWxsPzEwOithLHA9W107aWYoIShpJTEpJiZkLWY8bSl7aWYoZj1NYXRoLnJvdW5kKGYpLTEsZD1NYXRoLnJvdW5kKGQpKzEsYz4wKXtmb3IoO2Y8ZDsrK2YpZm9yKHg9MSxnPXMoZik7eDxpOysreClpZih2PWcqeCwhKHY8Yykpe2lmKHY+dSlicmVhaztwLnB1c2godil9fWVsc2UgZm9yKDtmPGQ7KytmKWZvcih4PWktMSxnPXMoZik7eD49MTstLXgpaWYodj1nKngsISh2PGMpKXtpZih2PnUpYnJlYWs7cC5wdXNoKHYpfX1lbHNlIHA9cnMoZixkLE1hdGgubWluKGQtZixtKSkubWFwKHMpO3JldHVybiBoP3AucmV2ZXJzZSgpOnB9LHQudGlja0Zvcm1hdD1mdW5jdGlvbihhLGwpe2lmKGw9PW51bGwmJihsPWk9PT0xMD8iLjBlIjoiLCIpLHR5cGVvZiBsIT0iZnVuY3Rpb24iJiYobD1PZShsKSksYT09PTEvMClyZXR1cm4gbDthPT1udWxsJiYoYT0xMCk7dmFyIGM9TWF0aC5tYXgoMSxpKmEvdC50aWNrcygpLmxlbmd0aCk7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBoPXUvcyhNYXRoLnJvdW5kKHIodSkpKTtyZXR1cm4gaCppPGktLjUmJihoKj1pKSxoPD1jP2wodSk6IiJ9fSx0Lm5pY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZShsYShlKCkse2Zsb29yOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguZmxvb3IocihhKSkpfSxjZWlsOmZ1bmN0aW9uKGEpe3JldHVybiBzKE1hdGguY2VpbChyKGEpKSl9fSkpfSx0fWZ1bmN0aW9uIFRzKCl7dmFyIG49U2MoU3MoKSkuZG9tYWluKFsxLDEwXSk7cmV0dXJuIG4uY29weT1mdW5jdGlvbigpe3JldHVybiBWbihuLFRzKCkpLmJhc2Uobi5iYXNlKCkpfSxQZS5hcHBseShuLGFyZ3VtZW50cyksbn12YXIgRWM9bmV3IERhdGUsVGM9bmV3IERhdGU7ZnVuY3Rpb24gWXQobix0LGUsaSl7ZnVuY3Rpb24gcihzKXtyZXR1cm4gbihzPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtzKSksc31yZXR1cm4gci5mbG9vcj1mdW5jdGlvbihzKXtyZXR1cm4gbihzPW5ldyBEYXRlKCtzKSksc30sci5jZWlsPWZ1bmN0aW9uKHMpe3JldHVybiBuKHM9bmV3IERhdGUocy0xKSksdChzLDEpLG4ocyksc30sci5yb3VuZD1mdW5jdGlvbihzKXt2YXIgbz1yKHMpLGE9ci5jZWlsKHMpO3JldHVybiBzLW88YS1zP286YX0sci5vZmZzZXQ9ZnVuY3Rpb24ocyxvKXtyZXR1cm4gdChzPW5ldyBEYXRlKCtzKSxvPT1udWxsPzE6TWF0aC5mbG9vcihvKSksc30sci5yYW5nZT1mdW5jdGlvbihzLG8sYSl7dmFyIGw9W10sYztpZihzPXIuY2VpbChzKSxhPWE9PW51bGw/MTpNYXRoLmZsb29yKGEpLCEoczxvKXx8IShhPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtzKSksdChzLGEpLG4ocyk7d2hpbGUoYzxzJiZzPG8pO3JldHVybiBsfSxyLmZpbHRlcj1mdW5jdGlvbihzKXtyZXR1cm4gWXQoZnVuY3Rpb24obyl7aWYobz49bylmb3IoO24obyksIXMobyk7KW8uc2V0VGltZShvLTEpfSxmdW5jdGlvbihvLGEpe2lmKG8+PW8paWYoYTwwKWZvcig7KythPD0wOylmb3IoO3QobywtMSksIXMobyk7KTtlbHNlIGZvcig7LS1hPj0wOylmb3IoO3QobywxKSwhcyhvKTspO30pfSxlJiYoci5jb3VudD1mdW5jdGlvbihzLG8pe3JldHVybiBFYy5zZXRUaW1lKCtzKSxUYy5zZXRUaW1lKCtvKSxuKEVjKSxuKFRjKSxNYXRoLmZsb29yKGUoRWMsVGMpKX0sci5ldmVyeT1mdW5jdGlvbihzKXtyZXR1cm4gcz1NYXRoLmZsb29yKHMpLCFpc0Zpbml0ZShzKXx8IShzPjApP251bGw6cz4xP3IuZmlsdGVyKGk/ZnVuY3Rpb24obyl7cmV0dXJuIGkobyklcz09PTB9OmZ1bmN0aW9uKG8pe3JldHVybiByLmNvdW50KDAsbyklcz09PTB9KTpyfSkscn12YXIgY2E9WXQoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LW59KTtjYS5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLmZsb29yKG4pLCFpc0Zpbml0ZShuKXx8IShuPjApP251bGw6bj4xP1l0KGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvbikqbil9LGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0K2Uqbil9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvbn0pOmNhfTt2YXIgdWE9Y2EsVHA9Y2EucmFuZ2U7dmFyIGJpPTFlMyxTbj02ZTQsQWM9MzZlNSxoYT04NjRlNSxmYT02MDQ4ZTU7dmFyIEFwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KmJpKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9iaX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDU2Vjb25kcygpfSksZGE9QXAsQ3A9QXAucmFuZ2U7dmFyIFJwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KlNuKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9Tbn0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksQ2M9UnAsZHY9UnAucmFuZ2U7dmFyIExwPVl0KGZ1bmN0aW9uKG4pe24uc2V0VGltZShuLW4uZ2V0TWlsbGlzZWNvbmRzKCktbi5nZXRTZWNvbmRzKCkqYmktbi5nZXRNaW51dGVzKCkqU24pfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KkFjKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9BY30sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFJjPUxwLHB2PUxwLnJhbmdlO3ZhciBQcD1ZdChmdW5jdGlvbihuKXtuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktbi5nZXRUaW1lem9uZU9mZnNldCgpKSpTbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERhdGUoKS0xfSkscnI9UHAsbXY9UHAucmFuZ2U7ZnVuY3Rpb24gU2kobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LW4pJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdC0oZS5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqU24pL2ZhfSl9dmFyIEVpPVNpKDApLHNyPVNpKDEpLERwPVNpKDIpLElwPVNpKDMpLEduPVNpKDQpLE5wPVNpKDUpLEZwPVNpKDYpLHpwPUVpLnJhbmdlLGd2PXNyLnJhbmdlLHh2PURwLnJhbmdlLHl2PUlwLnJhbmdlLHZ2PUduLnJhbmdlLF92PU5wLnJhbmdlLHd2PUZwLnJhbmdlO3ZhciBVcD1ZdChmdW5jdGlvbihuKXtuLnNldERhdGUoMSksbi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC5nZXRNb250aCgpLW4uZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLW4uZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9KSxMYz1VcCxNdj1VcC5yYW5nZTt2YXIgUGM9WXQoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtQYy5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4haXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKXx8IShuPjApP251bGw6WXQoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9uKSpuKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStlKm4pfSl9O3ZhciBFbj1QYyxidj1QYy5yYW5nZTt2YXIgQnA9WXQoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvaGF9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSkscGE9QnAsU3Y9QnAucmFuZ2U7ZnVuY3Rpb24gVGkobil7cmV0dXJuIFl0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LW4pJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK2UqNyl9LGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvZmF9KX12YXIgQXM9VGkoMCksb3I9VGkoMSksT3A9VGkoMiksa3A9VGkoMyksV249VGkoNCksSHA9VGkoNSksVnA9VGkoNiksR3A9QXMucmFuZ2UsRXY9b3IucmFuZ2UsVHY9T3AucmFuZ2UsQXY9a3AucmFuZ2UsQ3Y9V24ucmFuZ2UsUnY9SHAucmFuZ2UsTHY9VnAucmFuZ2U7dmFyIERjPVl0KGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSk7RGMuZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIWlzRmluaXRlKG49TWF0aC5mbG9vcihuKSl8fCEobj4wKT9udWxsOll0KGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvbikqbiksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSpuKX0pfTt2YXIgQWk9RGMsUHY9RGMucmFuZ2U7ZnVuY3Rpb24gSWMobil7aWYoMDw9bi55JiZuLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZSgtMSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCk7cmV0dXJuIHQuc2V0RnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpfWZ1bmN0aW9uIE5jKG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoRGF0ZS5VVEMoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKTtyZXR1cm4gdC5zZXRVVENGdWxsWWVhcihuLnkpLHR9cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4ueSxuLm0sbi5kLG4uSCxuLk0sbi5TLG4uTCkpfWZ1bmN0aW9uIENzKG4sdCxlKXtyZXR1cm57eTpuLG06dCxkOmUsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBGYyhuKXt2YXIgdD1uLmRhdGVUaW1lLGU9bi5kYXRlLGk9bi50aW1lLHI9bi5wZXJpb2RzLHM9bi5kYXlzLG89bi5zaG9ydERheXMsYT1uLm1vbnRocyxsPW4uc2hvcnRNb250aHMsYz1ScyhyKSx1PUxzKHIpLGg9UnMocyksZj1McyhzKSxkPVJzKG8pLGc9THMobykseD1ScyhhKSx2PUxzKGEpLG09UnMobCkscD1McyhsKSxiPXthOlYsQTpRLGI6YXQsQjpHLGM6bnVsbCxkOkpwLGU6SnAsZjp0XyxnOnVfLEc6Zl8sSDpLdixJOlF2LGo6anYsTDp0bSxtOmVfLE06bl8scDokLHE6bHQsUTpRcCxzOmpwLFM6aV8sdTpyXyxVOnNfLFY6b18sdzphXyxXOmxfLHg6bnVsbCxYOm51bGwseTpjXyxZOmhfLFo6ZF8sIiUiOktwfSxfPXthOmR0LEE6eHQsYjprLEI6RnQsYzpudWxsLGQ6JHAsZTokcCxmOnhfLGc6QV8sRzpSXyxIOnBfLEk6bV8sajpnXyxMOm5tLG06eV8sTTp2XyxwOm10LHE6U3QsUTpRcCxzOmpwLFM6X18sdTp3XyxVOk1fLFY6Yl8sdzpTXyxXOkVfLHg6bnVsbCxYOm51bGwseTpUXyxZOkNfLFo6TF8sIiUiOktwfSxTPXthOlgsQTp5LGI6UixCOkQsYzpGLGQ6WXAsZTpZcCxmOll2LGc6WHAsRzpxcCxIOlpwLEk6WnAsajpHdixMOlh2LG06VnYsTTpXdixwOnR0LHE6SHYsUTpKdixzOiR2LFM6cXYsdTp6dixVOlV2LFY6QnYsdzpGdixXOk92LHg6eixYOk4seTpYcCxZOnFwLFo6a3YsIiUiOlp2fTtiLng9TChlLGIpLGIuWD1MKGksYiksYi5jPUwodCxiKSxfLng9TChlLF8pLF8uWD1MKGksXyksXy5jPUwodCxfKTtmdW5jdGlvbiBMKEIsc3Qpe3JldHVybiBmdW5jdGlvbihudCl7dmFyIEM9W10saj0tMSxKPTAsaXQ9Qi5sZW5ndGgsZXQsdnQsYnQ7Zm9yKG50IGluc3RhbmNlb2YgRGF0ZXx8KG50PW5ldyBEYXRlKCtudCkpOysrajxpdDspQi5jaGFyQ29kZUF0KGopPT09MzcmJihDLnB1c2goQi5zbGljZShKLGopKSwodnQ9V3BbZXQ9Qi5jaGFyQXQoKytqKV0pIT1udWxsP2V0PUIuY2hhckF0KCsraik6dnQ9ZXQ9PT0iZSI/IiAiOiIwIiwoYnQ9c3RbZXRdKSYmKGV0PWJ0KG50LHZ0KSksQy5wdXNoKGV0KSxKPWorMSk7cmV0dXJuIEMucHVzaChCLnNsaWNlKEosaikpLEMuam9pbigiIil9fWZ1bmN0aW9uIEEoQixzdCl7cmV0dXJuIGZ1bmN0aW9uKG50KXt2YXIgQz1DcygxOTAwLHZvaWQgMCwxKSxqPUgoQyxCLG50Kz0iIiwwKSxKLGl0O2lmKGohPW50Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBDKXJldHVybiBuZXcgRGF0ZShDLlEpO2lmKCJzImluIEMpcmV0dXJuIG5ldyBEYXRlKEMucyoxZTMrKCJMImluIEM/Qy5MOjApKTtpZihzdCYmISgiWiJpbiBDKSYmKEMuWj0wKSwicCJpbiBDJiYoQy5IPUMuSCUxMitDLnAqMTIpLEMubT09PXZvaWQgMCYmKEMubT0icSJpbiBDP0MucTowKSwiViJpbiBDKXtpZihDLlY8MXx8Qy5WPjUzKXJldHVybiBudWxsOyJ3ImluIEN8fChDLnc9MSksIloiaW4gQz8oSj1OYyhDcyhDLnksMCwxKSksaXQ9Si5nZXRVVENEYXkoKSxKPWl0PjR8fGl0PT09MD9vci5jZWlsKEopOm9yKEopLEo9cGEub2Zmc2V0KEosKEMuVi0xKSo3KSxDLnk9Si5nZXRVVENGdWxsWWVhcigpLEMubT1KLmdldFVUQ01vbnRoKCksQy5kPUouZ2V0VVRDRGF0ZSgpKyhDLncrNiklNyk6KEo9SWMoQ3MoQy55LDAsMSkpLGl0PUouZ2V0RGF5KCksSj1pdD40fHxpdD09PTA/c3IuY2VpbChKKTpzcihKKSxKPXJyLm9mZnNldChKLChDLlYtMSkqNyksQy55PUouZ2V0RnVsbFllYXIoKSxDLm09Si5nZXRNb250aCgpLEMuZD1KLmdldERhdGUoKSsoQy53KzYpJTcpfWVsc2UoIlciaW4gQ3x8IlUiaW4gQykmJigidyJpbiBDfHwoQy53PSJ1ImluIEM/Qy51JTc6IlciaW4gQz8xOjApLGl0PSJaImluIEM/TmMoQ3MoQy55LDAsMSkpLmdldFVUQ0RheSgpOkljKENzKEMueSwwLDEpKS5nZXREYXkoKSxDLm09MCxDLmQ9IlciaW4gQz8oQy53KzYpJTcrQy5XKjctKGl0KzUpJTc6Qy53K0MuVSo3LShpdCs2KSU3KTtyZXR1cm4iWiJpbiBDPyhDLkgrPUMuWi8xMDB8MCxDLk0rPUMuWiUxMDAsTmMoQykpOkljKEMpfX1mdW5jdGlvbiBIKEIsc3QsbnQsQyl7Zm9yKHZhciBqPTAsSj1zdC5sZW5ndGgsaXQ9bnQubGVuZ3RoLGV0LHZ0O2o8Sjspe2lmKEM+PWl0KXJldHVybi0xO2lmKGV0PXN0LmNoYXJDb2RlQXQoaisrKSxldD09PTM3KXtpZihldD1zdC5jaGFyQXQoaisrKSx2dD1TW2V0IGluIFdwP3N0LmNoYXJBdChqKyspOmV0XSwhdnR8fChDPXZ0KEIsbnQsQykpPDApcmV0dXJuLTF9ZWxzZSBpZihldCE9bnQuY2hhckNvZGVBdChDKyspKXJldHVybi0xfXJldHVybiBDfWZ1bmN0aW9uIHR0KEIsc3QsbnQpe3ZhciBDPWMuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnA9dVtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYKEIsc3QsbnQpe3ZhciBDPWQuZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9Z1tDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB5KEIsc3QsbnQpe3ZhciBDPWguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLnc9ZltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKEIsc3QsbnQpe3ZhciBDPW0uZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09cFtDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBEKEIsc3QsbnQpe3ZhciBDPXguZXhlYyhzdC5zbGljZShudCkpO3JldHVybiBDPyhCLm09dltDWzBdLnRvTG93ZXJDYXNlKCldLG50K0NbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKEIsc3QsbnQpe3JldHVybiBIKEIsdCxzdCxudCl9ZnVuY3Rpb24geihCLHN0LG50KXtyZXR1cm4gSChCLGUsc3QsbnQpfWZ1bmN0aW9uIE4oQixzdCxudCl7cmV0dXJuIEgoQixpLHN0LG50KX1mdW5jdGlvbiBWKEIpe3JldHVybiBvW0IuZ2V0RGF5KCldfWZ1bmN0aW9uIFEoQil7cmV0dXJuIHNbQi5nZXREYXkoKV19ZnVuY3Rpb24gYXQoQil7cmV0dXJuIGxbQi5nZXRNb250aCgpXX1mdW5jdGlvbiBHKEIpe3JldHVybiBhW0IuZ2V0TW9udGgoKV19ZnVuY3Rpb24gJChCKXtyZXR1cm4gclsrKEIuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBsdChCKXtyZXR1cm4gMSt+fihCLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gZHQoQil7cmV0dXJuIG9bQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24geHQoQil7cmV0dXJuIHNbQi5nZXRVVENEYXkoKV19ZnVuY3Rpb24gayhCKXtyZXR1cm4gbFtCLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEZ0KEIpe3JldHVybiBhW0IuZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gbXQoQil7cmV0dXJuIHJbKyhCLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gU3QoQil7cmV0dXJuIDErfn4oQi5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsYik7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSxwYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMSk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oQil7dmFyIHN0PUwoQis9IiIsXyk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fSx1dGNQYXJzZTpmdW5jdGlvbihCKXt2YXIgc3Q9QShCKz0iIiwhMCk7cmV0dXJuIHN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHN0fX19dmFyIFdwPXsiLSI6IiIsXzoiICIsMDoiMCJ9LHBlPS9eXHMqXGQrLyxEdj0vXiUvLEl2PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCdChuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLHM9ci5sZW5ndGg7cmV0dXJuIGkrKHM8ZT9uZXcgQXJyYXkoZS1zKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiBOdihuKXtyZXR1cm4gbi5yZXBsYWNlKEl2LCJcXCQmIil9ZnVuY3Rpb24gUnMobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKE52KS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gTHMobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24gRnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24genYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpPyhuLnU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVXYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQnYobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlY9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gT3Yobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlc9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcXAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gWHAobix0LGUpe3ZhciBpPXBlLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLnk9K2lbMF0rKCtpWzBdPjY4PzE5MDA6MmUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrdihuLHQsZSl7dmFyIGk9L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShlLGUrNikpO3JldHVybiBpPyhuLlo9aVsxXT8wOi0oaVsyXSsoaVszXXx8IjAwIikpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEh2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPWlbMF0qMy0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5tPWlbMF0tMSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZcChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBacChuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uSD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBXdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uTT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBYdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4uTD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uTD1NYXRoLmZsb29yKGlbMF0vMWUzKSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadihuLHQsZSl7dmFyIGk9RHYuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/ZStpWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBKdihuLHQsZSl7dmFyIGk9cGUuZXhlYyh0LnNsaWNlKGUpKTtyZXR1cm4gaT8obi5RPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uICR2KG4sdCxlKXt2YXIgaT1wZS5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSnAobix0KXtyZXR1cm4gQnQobi5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBLdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBRdihuLHQpe3JldHVybiBCdChuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24ganYobix0KXtyZXR1cm4gQnQoMStyci5jb3VudChFbihuKSxuKSx0LDMpfWZ1bmN0aW9uIHRtKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0XyhuLHQpe3JldHVybiB0bShuLHQpKyIwMDAifWZ1bmN0aW9uIGVfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gbl8obix0KXtyZXR1cm4gQnQobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBpXyhuLHQpe3JldHVybiBCdChuLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIHJfKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiBzXyhuLHQpe3JldHVybiBCdChFaS5jb3VudChFbihuKS0xLG4pLHQsMil9ZnVuY3Rpb24gZW0obil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/R24obik6R24uY2VpbChuKX1mdW5jdGlvbiBvXyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KEduLmNvdW50KEVuKG4pLG4pKyhFbihuKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gYV8obil7cmV0dXJuIG4uZ2V0RGF5KCl9ZnVuY3Rpb24gbF8obix0KXtyZXR1cm4gQnQoc3IuY291bnQoRW4obiktMSxuKSx0LDIpfWZ1bmN0aW9uIGNfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiB1XyhuLHQpe3JldHVybiBuPWVtKG4pLEJ0KG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBoXyhuLHQpe3JldHVybiBCdChuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZl8obix0KXt2YXIgZT1uLmdldERheSgpO3JldHVybiBuPWU+PTR8fGU9PT0wP0duKG4pOkduLmNlaWwobiksQnQobi5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGRfKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4odD4wPyItIjoodCo9LTEsIisiKSkrQnQodC82MHwwLCIwIiwyKStCdCh0JTYwLCIwIiwyKX1mdW5jdGlvbiAkcChuLHQpe3JldHVybiBCdChuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHBfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIG1fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDSG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBnXyhuLHQpe3JldHVybiBCdCgxK3BhLmNvdW50KEFpKG4pLG4pLHQsMyl9ZnVuY3Rpb24gbm0obix0KXtyZXR1cm4gQnQobi5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIHhfKG4sdCl7cmV0dXJuIG5tKG4sdCkrIjAwMCJ9ZnVuY3Rpb24geV8obix0KXtyZXR1cm4gQnQobi5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiB2XyhuLHQpe3JldHVybiBCdChuLmdldFVUQ01pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIF9fKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gd18obil7dmFyIHQ9bi5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE1fKG4sdCl7cmV0dXJuIEJ0KEFzLmNvdW50KEFpKG4pLTEsbiksdCwyKX1mdW5jdGlvbiBpbShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9XbihuKTpXbi5jZWlsKG4pfWZ1bmN0aW9uIGJfKG4sdCl7cmV0dXJuIG49aW0obiksQnQoV24uY291bnQoQWkobiksbikrKEFpKG4pLmdldFVUQ0RheSgpPT09NCksdCwyKX1mdW5jdGlvbiBTXyhuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBFXyhuLHQpe3JldHVybiBCdChvci5jb3VudChBaShuKS0xLG4pLHQsMil9ZnVuY3Rpb24gVF8obix0KXtyZXR1cm4gQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEFfKG4sdCl7cmV0dXJuIG49aW0obiksQnQobi5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIENfKG4sdCl7cmV0dXJuIEJ0KG4uZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBSXyhuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIG49ZT49NHx8ZT09PTA/V24obik6V24uY2VpbChuKSxCdChuLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gTF8oKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIEtwKCl7cmV0dXJuIiUifWZ1bmN0aW9uIFFwKG4pe3JldHVybitufWZ1bmN0aW9uIGpwKG4pe3JldHVybiBNYXRoLmZsb29yKCtuLzFlMyl9dmFyIGFyLG1hLHJtLHNtLG9tO3pjKHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSk7ZnVuY3Rpb24gemMobil7cmV0dXJuIGFyPUZjKG4pLG1hPWFyLmZvcm1hdCxybT1hci5wYXJzZSxzbT1hci51dGNGb3JtYXQsb209YXIudXRjUGFyc2UsYXJ9dmFyIFBzPTFlMyxEcz1Qcyo2MCxJcz1Ecyo2MCxOcz1JcyoyNCxQXz1Ocyo3LGFtPU5zKjMwLFVjPU5zKjM2NTtmdW5jdGlvbiBEXyhuKXtyZXR1cm4gbmV3IERhdGUobil9ZnVuY3Rpb24gSV8obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlPytuOituZXcgRGF0ZSgrbil9ZnVuY3Rpb24gQmMobix0LGUsaSxyLHMsbyxhLGwpe3ZhciBjPUVzKERlLERlKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxkPWwoIjolUyIpLGc9bCgiJUk6JU0iKSx4PWwoIiVJICVwIiksdj1sKCIlYSAlZCIpLG09bCgiJWIgJWQiKSxwPWwoIiVCIiksYj1sKCIlWSIpLF89W1tvLDEsUHNdLFtvLDUsNSpQc10sW28sMTUsMTUqUHNdLFtvLDMwLDMwKlBzXSxbcywxLERzXSxbcyw1LDUqRHNdLFtzLDE1LDE1KkRzXSxbcywzMCwzMCpEc10sW3IsMSxJc10sW3IsMywzKklzXSxbciw2LDYqSXNdLFtyLDEyLDEyKklzXSxbaSwxLE5zXSxbaSwyLDIqTnNdLFtlLDEsUF9dLFt0LDEsYW1dLFt0LDMsMyphbV0sW24sMSxVY11dO2Z1bmN0aW9uIFMoQSl7cmV0dXJuKG8oQSk8QT9mOnMoQSk8QT9kOnIoQSk8QT9nOmkoQSk8QT94OnQoQSk8QT9lKEEpPEE/djptOm4oQSk8QT9wOmIpKEEpfWZ1bmN0aW9uIEwoQSxILHR0LFgpe2lmKEE9PW51bGwmJihBPTEwKSx0eXBlb2YgQT09Im51bWJlciIpe3ZhciB5PU1hdGguYWJzKHR0LUgpL0EsUj1pcyhmdW5jdGlvbihEKXtyZXR1cm4gRFsyXX0pLnJpZ2h0KF8seSk7Uj09PV8ubGVuZ3RoPyhYPV9uKEgvVWMsdHQvVWMsQSksQT1uKTpSPyhSPV9beS9fW1ItMV1bMl08X1tSXVsyXS95P1ItMTpSXSxYPVJbMV0sQT1SWzBdKTooWD1NYXRoLm1heChfbihILHR0LEEpLDEpLEE9YSl9cmV0dXJuIFg9PW51bGw/QTpBLmV2ZXJ5KFgpfXJldHVybiBjLmludmVydD1mdW5jdGlvbihBKXtyZXR1cm4gbmV3IERhdGUodShBKSl9LGMuZG9tYWluPWZ1bmN0aW9uKEEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2goYnMuY2FsbChBLElfKSk6aCgpLm1hcChEXyl9LGMudGlja3M9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpLFg9dHRbMF0seT10dFt0dC5sZW5ndGgtMV0sUj15PFgsRDtyZXR1cm4gUiYmKEQ9WCxYPXkseT1EKSxEPUwoQSxYLHksSCksRD1EP0QucmFuZ2UoWCx5KzEpOltdLFI/RC5yZXZlcnNlKCk6RH0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKEEsSCl7cmV0dXJuIEg9PW51bGw/UzpsKEgpfSxjLm5pY2U9ZnVuY3Rpb24oQSxIKXt2YXIgdHQ9aCgpO3JldHVybihBPUwoQSx0dFswXSx0dFt0dC5sZW5ndGgtMV0sSCkpP2gobGEodHQsQSkpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBWbihjLEJjKG4sdCxlLGkscixzLG8sYSxsKSl9LGN9ZnVuY3Rpb24gRnMoKXtyZXR1cm4gUGUuYXBwbHkoQmMoRW4sTGMsRWkscnIsUmMsQ2MsZGEsdWEsbWEpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE9jKCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gbHIobil7bi5VPW4uQz1uLkw9bi5SPW4uUD1uLk49bnVsbH1PYy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk9jLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49Y20odGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspaT1lLlUsZT09PWkuTD8ocj1pLlIsciYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoenModGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxpLkM9ITAsVXModGhpcyxpKSkpOihyPWkuTCxyJiZyLkM/KGUuQz1yLkM9ITEsaS5DPSEwLG49aSk6KG49PT1lLkwmJihVcyh0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLGkuQz0hMCx6cyh0aGlzLGkpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0PW4uVSxlLGk9bi5MLHI9bi5SLHMsbztpZihpP3I/cz1jbShyKTpzPWk6cz1yLHQ/dC5MPT09bj90Lkw9czp0LlI9czp0aGlzLl89cyxpJiZyPyhvPXMuQyxzLkM9bi5DLHMuTD1pLGkuVT1zLHMhPT1yPyh0PXMuVSxzLlU9bi5VLG49cy5SLHQuTD1uLHMuUj1yLHIuVT1zKToocy5VPXQsdD1zLG49cy5SKSk6KG89bi5DLG49cyksbiYmKG4uVT10KSwhbyl7aWYobiYmbi5DKXtuLkM9ITE7cmV0dXJufWRve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoZT10LlIsZS5DJiYoZS5DPSExLHQuQz0hMCx6cyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxVcyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSx6cyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKGU9dC5MLGUuQyYmKGUuQz0hMSx0LkM9ITAsVXModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsenModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsVXModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O2Z1bmN0aW9uIHpzKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBVcyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gY20obil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufXZhciBrYz1PYztmdW5jdGlvbiBjcihuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxzPW1lLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJkJzKHIsbix0LGUpLGkmJkJzKHIsdCxuLGkpLENlW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLENlW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKHMpLHJ9ZnVuY3Rpb24gdXIobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIEJzKG4sdCxlLGkpeyFuWzBdJiYhblsxXT8oblswXT1pLG4ubGVmdD10LG4ucmlnaHQ9ZSk6bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pfWZ1bmN0aW9uIHpfKG4sdCxlLGkscil7dmFyIHM9blswXSxvPW5bMV0sYT1zWzBdLGw9c1sxXSxjPW9bMF0sdT1vWzFdLGg9MCxmPTEsZD1jLWEsZz11LWwseDtpZih4PXQtYSwhKCFkJiZ4PjApKXtpZih4Lz1kLGQ8MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWVsc2UgaWYoZD4wKXtpZih4PmYpcmV0dXJuO3g+aCYmKGg9eCl9aWYoeD1pLWEsISghZCYmeDwwKSl7aWYoeC89ZCxkPDApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1lbHNlIGlmKGQ+MCl7aWYoeDxoKXJldHVybjt4PGYmJihmPXgpfWlmKHg9ZS1sLCEoIWcmJng+MCkpe2lmKHgvPWcsZzwwKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9ZWxzZSBpZihnPjApe2lmKHg+ZilyZXR1cm47eD5oJiYoaD14KX1pZih4PXItbCwhKCFnJiZ4PDApKXtpZih4Lz1nLGc8MCl7aWYoeD5mKXJldHVybjt4PmgmJihoPXgpfWVsc2UgaWYoZz4wKXtpZih4PGgpcmV0dXJuO3g8ZiYmKGY9eCl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihuWzBdPVthK2gqZCxsK2gqZ10pLGY8MSYmKG5bMV09W2ErZipkLGwrZipnXSkpLCEwfX19fX1mdW5jdGlvbiBVXyhuLHQsZSxpLHIpe3ZhciBzPW5bMV07aWYocylyZXR1cm4hMDt2YXIgbz1uWzBdLGE9bi5sZWZ0LGw9bi5yaWdodCxjPWFbMF0sdT1hWzFdLGg9bFswXSxmPWxbMV0sZD0oYytoKS8yLGc9KHUrZikvMix4LHY7aWYoZj09PXUpe2lmKGQ8dHx8ZD49aSlyZXR1cm47aWYoYz5oKXtpZighbylvPVtkLGVdO2Vsc2UgaWYob1sxXT49cilyZXR1cm47cz1bZCxyXX1lbHNle2lmKCFvKW89W2Qscl07ZWxzZSBpZihvWzFdPGUpcmV0dXJuO3M9W2QsZV19fWVsc2UgaWYoeD0oYy1oKS8oZi11KSx2PWcteCpkLHg8LTF8fHg+MSlpZihjPmgpe2lmKCFvKW89WyhlLXYpL3gsZV07ZWxzZSBpZihvWzFdPj1yKXJldHVybjtzPVsoci12KS94LHJdfWVsc2V7aWYoIW8pbz1bKHItdikveCxyXTtlbHNlIGlmKG9bMV08ZSlyZXR1cm47cz1bKGUtdikveCxlXX1lbHNlIGlmKHU8Zil7aWYoIW8pbz1bdCx4KnQrdl07ZWxzZSBpZihvWzBdPj1pKXJldHVybjtzPVtpLHgqaSt2XX1lbHNle2lmKCFvKW89W2kseCppK3ZdO2Vsc2UgaWYob1swXTx0KXJldHVybjtzPVt0LHgqdCt2XX1yZXR1cm4gblswXT1vLG5bMV09cywhMH1mdW5jdGlvbiB1bShuLHQsZSxpKXtmb3IodmFyIHI9bWUubGVuZ3RoLHM7ci0tOykoIVVfKHM9bWVbcl0sbix0LGUsaSl8fCF6XyhzLG4sdCxlLGkpfHwhKE1hdGguYWJzKHNbMF1bMF0tc1sxXVswXSk+WHR8fE1hdGguYWJzKHNbMF1bMV0tc1sxXVsxXSk+WHQpKSYmZGVsZXRlIG1lW3JdfWZ1bmN0aW9uIGhtKG4pe3JldHVybiBDZVtuLmluZGV4XT17c2l0ZTpuLGhhbGZlZGdlczpbXX19ZnVuY3Rpb24gQl8obix0KXt2YXIgZT1uLnNpdGUsaT10LmxlZnQscj10LnJpZ2h0O3JldHVybiBlPT09ciYmKHI9aSxpPWUpLHI/TWF0aC5hdGFuMihyWzFdLWlbMV0sclswXS1pWzBdKTooZT09PWk/KGk9dFsxXSxyPXRbMF0pOihpPXRbMF0scj10WzFdKSxNYXRoLmF0YW4yKGlbMF0tclswXSxyWzFdLWlbMV0pKX1mdW5jdGlvbiBIYyhuLHQpe3JldHVybiB0WysodC5sZWZ0IT09bi5zaXRlKV19ZnVuY3Rpb24gT18obix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfWZ1bmN0aW9uIGZtKCl7Zm9yKHZhciBuPTAsdD1DZS5sZW5ndGgsZSxpLHIscztuPHQ7KytuKWlmKChlPUNlW25dKSYmKHM9KGk9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBvPW5ldyBBcnJheShzKSxhPW5ldyBBcnJheShzKTtmb3Iocj0wO3I8czsrK3Ipb1tyXT1yLGFbcl09Ql8oZSxtZVtpW3JdXSk7Zm9yKG8uc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBhW2NdLWFbbF19KSxyPTA7cjxzOysrcilhW3JdPWlbb1tyXV07Zm9yKHI9MDtyPHM7KytyKWlbcl09YVtyXX19ZnVuY3Rpb24gZG0obix0LGUsaSl7dmFyIHI9Q2UubGVuZ3RoLHMsbyxhLGwsYyx1LGgsZixkLGcseCx2LG09ITA7Zm9yKHM9MDtzPHI7KytzKWlmKG89Q2Vbc10pe2ZvcihhPW8uc2l0ZSxjPW8uaGFsZmVkZ2VzLGw9Yy5sZW5ndGg7bC0tOyltZVtjW2xdXXx8Yy5zcGxpY2UobCwxKTtmb3IobD0wLHU9Yy5sZW5ndGg7bDx1OylnPU9fKG8sbWVbY1tsXV0pLHg9Z1swXSx2PWdbMV0saD1IYyhvLG1lW2NbKytsJXVdXSksZj1oWzBdLGQ9aFsxXSwoTWF0aC5hYnMoeC1mKT5YdHx8TWF0aC5hYnModi1kKT5YdCkmJihjLnNwbGljZShsLDAsbWUucHVzaCh1cihhLGcsTWF0aC5hYnMoeC1uKTxYdCYmaS12Plh0P1tuLE1hdGguYWJzKGYtbik8WHQ/ZDppXTpNYXRoLmFicyh2LWkpPFh0JiZlLXg+WHQ/W01hdGguYWJzKGQtaSk8WHQ/ZjplLGldOk1hdGguYWJzKHgtZSk8WHQmJnYtdD5YdD9bZSxNYXRoLmFicyhmLWUpPFh0P2Q6dF06TWF0aC5hYnModi10KTxYdCYmeC1uPlh0P1tNYXRoLmFicyhkLXQpPFh0P2Y6bix0XTpudWxsKSktMSksKyt1KTt1JiYobT0hMSl9aWYobSl7dmFyIHAsYixfLFM9MS8wO2ZvcihzPTAsbT1udWxsO3M8cjsrK3MpKG89Q2Vbc10pJiYoYT1vLnNpdGUscD1hWzBdLW4sYj1hWzFdLXQsXz1wKnArYipiLF88UyYmKFM9XyxtPW8pKTtpZihtKXt2YXIgTD1bbix0XSxBPVtuLGldLEg9W2UsaV0sdHQ9W2UsdF07bS5oYWxmZWRnZXMucHVzaChtZS5wdXNoKHVyKGE9bS5zaXRlLEwsQSkpLTEsbWUucHVzaCh1cihhLEEsSCkpLTEsbWUucHVzaCh1cihhLEgsdHQpKS0xLG1lLnB1c2godXIoYSx0dCxMKSktMSl9fWZvcihzPTA7czxyOysrcykobz1DZVtzXSkmJihvLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBDZVtzXSl9dmFyIHBtPVtdLGdhO2Z1bmN0aW9uIGtfKCl7bHIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIENpKG4pe3ZhciB0PW4uUCxlPW4uTjtpZighKCF0fHwhZSkpe3ZhciBpPXQuc2l0ZSxyPW4uc2l0ZSxzPWUuc2l0ZTtpZihpIT09cyl7dmFyIG89clswXSxhPXJbMV0sbD1pWzBdLW8sYz1pWzFdLWEsdT1zWzBdLW8saD1zWzFdLWEsZj0yKihsKmgtYyp1KTtpZighKGY+PS1tbSkpe3ZhciBkPWwqbCtjKmMsZz11KnUraCpoLHg9KGgqZC1jKmcpL2Ysdj0obCpnLXUqZCkvZixtPXBtLnBvcCgpfHxuZXcga187bS5hcmM9bixtLnNpdGU9cixtLng9eCtvLG0ueT0obS5jeT12K2EpK01hdGguc3FydCh4Kngrdip2KSxuLmNpcmNsZT1tO2Zvcih2YXIgcD1udWxsLGI9aHIuXztiOylpZihtLnk8Yi55fHxtLnk9PT1iLnkmJm0ueDw9Yi54KWlmKGIuTCliPWIuTDtlbHNle3A9Yi5QO2JyZWFrfWVsc2UgaWYoYi5SKWI9Yi5SO2Vsc2V7cD1iO2JyZWFrfWhyLmluc2VydChwLG0pLHB8fChnYT1tKX19fX1mdW5jdGlvbiBSaShuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoZ2E9dC5OKSxoci5yZW1vdmUodCkscG0ucHVzaCh0KSxscih0KSxuLmNpcmNsZT1udWxsKX12YXIgeG09W107ZnVuY3Rpb24gSF8oKXtscih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gZ20obil7dmFyIHQ9eG0ucG9wKCl8fG5ldyBIXztyZXR1cm4gdC5zaXRlPW4sdH1mdW5jdGlvbiBWYyhuKXtSaShuKSxMaS5yZW1vdmUobikseG0ucHVzaChuKSxscihuKX1mdW5jdGlvbiB5bShuKXt2YXIgdD1uLmNpcmNsZSxlPXQueCxpPXQuY3kscj1bZSxpXSxzPW4uUCxvPW4uTixhPVtuXTtWYyhuKTtmb3IodmFyIGw9cztsLmNpcmNsZSYmTWF0aC5hYnMoZS1sLmNpcmNsZS54KTxYdCYmTWF0aC5hYnMoaS1sLmNpcmNsZS5jeSk8WHQ7KXM9bC5QLGEudW5zaGlmdChsKSxWYyhsKSxsPXM7YS51bnNoaWZ0KGwpLFJpKGwpO2Zvcih2YXIgYz1vO2MuY2lyY2xlJiZNYXRoLmFicyhlLWMuY2lyY2xlLngpPFh0JiZNYXRoLmFicyhpLWMuY2lyY2xlLmN5KTxYdDspbz1jLk4sYS5wdXNoKGMpLFZjKGMpLGM9bzthLnB1c2goYyksUmkoYyk7dmFyIHU9YS5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1hW2hdLGw9YVtoLTFdLEJzKGMuZWRnZSxsLnNpdGUsYy5zaXRlLHIpO2w9YVswXSxjPWFbdS0xXSxjLmVkZ2U9Y3IobC5zaXRlLGMuc2l0ZSxudWxsLHIpLENpKGwpLENpKGMpfWZ1bmN0aW9uIHZtKG4pe2Zvcih2YXIgdD1uWzBdLGU9blsxXSxpLHIscyxvLGE9TGkuXzthOylpZihzPV9tKGEsZSktdCxzPlh0KWE9YS5MO2Vsc2UgaWYobz10LVZfKGEsZSksbz5YdCl7aWYoIWEuUil7aT1hO2JyZWFrfWE9YS5SfWVsc2V7cz4tWHQ/KGk9YS5QLHI9YSk6bz4tWHQ/KGk9YSxyPWEuTik6aT1yPWE7YnJlYWt9aG0obik7dmFyIGw9Z20obik7aWYoTGkuaW5zZXJ0KGksbCksISghaSYmIXIpKXtpZihpPT09cil7UmkoaSkscj1nbShpLnNpdGUpLExpLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSksQ2koaSksQ2kocik7cmV0dXJufWlmKCFyKXtsLmVkZ2U9Y3IoaS5zaXRlLGwuc2l0ZSk7cmV0dXJufVJpKGkpLFJpKHIpO3ZhciBjPWkuc2l0ZSx1PWNbMF0saD1jWzFdLGY9blswXS11LGQ9blsxXS1oLGc9ci5zaXRlLHg9Z1swXS11LHY9Z1sxXS1oLG09MiooZip2LWQqeCkscD1mKmYrZCpkLGI9eCp4K3YqdixfPVsodipwLWQqYikvbSt1LChmKmIteCpwKS9tK2hdO0JzKHIuZWRnZSxjLGcsXyksbC5lZGdlPWNyKGMsbixudWxsLF8pLHIuZWRnZT1jcihuLGcsbnVsbCxfKSxDaShpKSxDaShyKX19ZnVuY3Rpb24gX20obix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxzPXItdDtpZighcylyZXR1cm4gaTt2YXIgbz1uLlA7aWYoIW8pcmV0dXJuLTEvMDtlPW8uc2l0ZTt2YXIgYT1lWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksaD0xL3MtMS9jLGY9dS9jO3JldHVybiBoPygtZitNYXRoLnNxcnQoZipmLTIqaCoodSp1LygtMipjKS1sK2MvMityLXMvMikpKS9oK2k6KGkrYSkvMn1mdW5jdGlvbiBWXyhuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBfbShlLHQpO3ZhciBpPW4uc2l0ZTtyZXR1cm4gaVsxXT09PXQ/aVswXToxLzB9dmFyIFh0PTFlLTYsbW09MWUtMTIsTGksQ2UsaHIsbWU7ZnVuY3Rpb24gR18obix0LGUpe3JldHVybihuWzBdLWVbMF0pKih0WzFdLW5bMV0pLShuWzBdLXRbMF0pKihlWzFdLW5bMV0pfWZ1bmN0aW9uIFdfKG4sdCl7cmV0dXJuIHRbMV0tblsxXXx8dFswXS1uWzBdfWZ1bmN0aW9uIHhhKG4sdCl7dmFyIGU9bi5zb3J0KFdfKS5wb3AoKSxpLHIscztmb3IobWU9W10sQ2U9bmV3IEFycmF5KG4ubGVuZ3RoKSxMaT1uZXcga2MsaHI9bmV3IGtjOzspaWYocz1nYSxlJiYoIXN8fGVbMV08cy55fHxlWzFdPT09cy55JiZlWzBdPHMueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJih2bShlKSxpPWVbMF0scj1lWzFdKSxlPW4ucG9wKCk7ZWxzZSBpZihzKXltKHMuYXJjKTtlbHNlIGJyZWFrO2lmKGZtKCksdCl7dmFyIG89K3RbMF1bMF0sYT0rdFswXVsxXSxsPSt0WzFdWzBdLGM9K3RbMV1bMV07dW0obyxhLGwsYyksZG0obyxhLGwsYyl9dGhpcy5lZGdlcz1tZSx0aGlzLmNlbGxzPUNlLExpPWhyPW1lPUNlPW51bGx9eGEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4YSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBuPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gSGModCxuW2ldKX0pO3JldHVybiBlLmRhdGE9dC5zaXRlLmRhdGEsZX0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihlLGkpe2lmKCEhKGE9KHM9ZS5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciByPWUuc2l0ZSxzLG89LTEsYSxsLGM9dFtzW2EtMV1dLHU9Yy5sZWZ0PT09cj9jLnJpZ2h0OmMubGVmdDsrK288YTspbD11LGM9dFtzW29dXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQsbCYmdSYmaTxsLmluZGV4JiZpPHUuaW5kZXgmJkdfKHIsbCx1KTwwJiZuLnB1c2goW3IuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxufSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5yaWdodH0pLm1hcChmdW5jdGlvbihuKXtyZXR1cm57c291cmNlOm4ubGVmdC5kYXRhLHRhcmdldDpuLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24obix0LGUpe2Zvcih2YXIgaT10aGlzLHIscz1pLl9mb3VuZHx8MCxvPWkuY2VsbHMubGVuZ3RoLGE7IShhPWkuY2VsbHNbc10pOylpZigrK3M+PW8pcmV0dXJuIG51bGw7dmFyIGw9bi1hLnNpdGVbMF0sYz10LWEuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gYT1pLmNlbGxzW3I9c10scz1udWxsLGEuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9aS5lZGdlc1toXSxkPWYubGVmdDtpZighKChkPT09YS5zaXRlfHwhZCkmJiEoZD1mLnJpZ2h0KSkpe3ZhciBnPW4tZFswXSx4PXQtZFsxXSx2PWcqZyt4Kng7djx1JiYodT12LHM9ZC5pbmRleCl9fSk7d2hpbGUocyE9PW51bGwpO3JldHVybiBpLl9mb3VuZD1yLGU9PW51bGx8fHU8PWUqZT9hLnNpdGU6bnVsbH19O2Z1bmN0aW9uIFBpKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1QaS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBpLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiBuPT09MT90aGlzOm5ldyBQaSh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49PT0wJnQ9PT0wP3RoaXM6bmV3IFBpKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEdjPW5ldyBQaSgxLDAsMCk7V2MucHJvdG90eXBlPVBpLnByb3RvdHlwZTtmdW5jdGlvbiBXYyhuKXtmb3IoOyFuLl9fem9vbTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIEdjO3JldHVybiBuLl9fem9vbX12YXIgYm09MWU0LFNtPS4wMDEsRW09T2UoIi4yfmUiKSxxXz1PZSgiLjR+ciIpLHdtPU9lKCIsfiIpO2Z1bmN0aW9uIE1tKG4pe2lmKG49PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49Ym18fHQ8U20/RW0obik6cV8obil9dmFyIFhjPXtmb3JtYXRUaWNrOk1tLGZvcm1hdFNob3J0Ok1tLGZvcm1hdFJlYWRhYmxlKG4pe2xldCB0PU1hdGguYWJzKG4pO3JldHVybiB0Pj1ibXx8dDxTbT9FbShuKTp3bShuKX0sZm9ybWF0TG9uZzp3bX0sc2s9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjN9KTt2YXIgb2s9T2UoIjAuM35zIiksYWs9T2UoIiwuM35mIik7dmFyIFhfPTFlMyxZXz02MCpYXyxaXz02MCpZXyxKXz0yNCpaXyxsaz0zNjUqSl8sY2s9T2UoIi40fiIpO3ZhciAkXz1GcygpLnRpY2tGb3JtYXQoKSxxYyxUbT17Zm9ybWF0VGljayhuKXtyZXR1cm4gJF8obmV3IERhdGUobikpfSxmb3JtYXRTaG9ydChuKXtyZXR1cm4gbmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcocWMse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMiLHRpbWVab25lTmFtZToic2hvcnQifSl9LGZvcm1hdExvbmcobil7cmV0dXJuIG5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKHFjLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9fTtmdW5jdGlvbiBmcihuKXtzd2l0Y2gobil7Y2FzZSBvbi5MSU5FQVI6cmV0dXJuIG5ldyBZYztjYXNlIG9uLkxPRzEwOnJldHVybiBuZXcgWmM7Y2FzZSBvbi5USU1FOnJldHVybiBuZXcgSmM7ZGVmYXVsdDpsZXQgdD1uO3Rocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHt0fSBub3Qgc3VwcG9ydGVkLmApfX12YXIgS189LjA1LFljPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0Rm9ybWF0dGVyPVhjfXRyYW5zZm9ybSh0LGUsaSl7bGV0W3Isc109dCxvPXMtcixbYSxsXT1lLGM9bC1hO3JldHVybiBvPT09MD9hOmMvbyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiBlPT09MD9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1pcigpLHM9KGktZStOdW1iZXIuRVBTSUxPTikqS18sW28sYV09ci5kb21haW4oW2UtcyxpK3NdKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW28sYV19dGlja3ModCxlKXtyZXR1cm4gaXIoKS5kb21haW4odCkudGlja3MoZSl9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxaYz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1YY310cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGgubG9nMTAodD4wP3Q6TnVtYmVyLk1JTl9WQUxVRSl9dW50cmFuc2Zvcm0odCl7cmV0dXJuIE1hdGguZXhwKHQvTWF0aC5MT0cxMEUpfWZvcndhcmQodCxlLGkpe2lmKGk8PTApcmV0dXJuIGVbMF07bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vO3JldHVybiBpPXRoaXMudHJhbnNmb3JtKGkpLGgvKHUrTnVtYmVyLkVQU0lMT04pKihpLWwpK299cmV2ZXJzZSh0LGUsaSl7bGV0W3Isc109dCxbbyxhXT1lLGw9dGhpcy50cmFuc2Zvcm0ociksdT10aGlzLnRyYW5zZm9ybShzKS1sLGg9YS1vLGY9dS8oaCtOdW1iZXIuRVBTSUxPTikqKGktbykrbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybShmKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoZT5pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2xldCByPU1hdGgubWF4KGUsTnVtYmVyLk1JTl9WQUxVRSkscz1NYXRoLm1heChpLE51bWJlci5NSU5fVkFMVUUpO3JldHVybiBpPD0wP1tOdW1iZXIuTUlOX1ZBTFVFLDFdOltNYXRoLm1heChOdW1iZXIuTUlOX1ZBTFVFLHIqLjUpLHMqMl19dGlja3ModCxlKXtsZXQgaT10WzBdPD0wP051bWJlci5NSU5fVkFMVUU6dFswXSxyPXRbMV08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzFdLHM9VHMoKS5kb21haW4oW2kscl0pLnRpY2tzKGUpO3JldHVybiBzLmxlbmd0aD9zOnR9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCkmJnQ+MH19LEpjPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1GcygpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1UbX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX07ZnVuY3Rpb24gUV8obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fXZhciAkYz0hMTtpZihzZWxmLmhhc093blByb3BlcnR5KCJXZWJHTDJSZW5kZXJpbmdDb250ZXh0IikmJnNlbGYuaGFzT3duUHJvcGVydHkoImRvY3VtZW50Iikpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciIsKCk9PnskYz0hMX0pO2xldCB0PW4uZ2V0Q29udGV4dCgid2ViZ2wyIik7JGM9Qm9vbGVhbih0KX1mdW5jdGlvbiBqXygpe3JldHVybiAkY31mdW5jdGlvbiB0dygpe3JldHVybiBzZWxmLmhhc093blByb3BlcnR5KCJPZmZzY3JlZW5DYW52YXMiKX1mdW5jdGlvbiBldyhuLHQpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gbncobix0KXtyZXR1cm4gbi54WzBdPT09dC54WzBdJiZuLnhbMV09PT10LnhbMV0mJm4ueVswXT09PXQueVswXSYmbi55WzFdPT09dC55WzFdfXZhciBEaT17Y29udmVydFJlY3RUb0V4dGVudDpRXyxpc1dlYkdsMlN1cHBvcnRlZDpqXyxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDp0dyxhcmVQb2x5bGluZXNFcXVhbDpldyxhcmVFeHRlbnRzRXF1YWw6bnd9O3ZhciBkcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMueFNjYWxlPWZyKG9uLkxJTkVBUiksdGhpcy55U2NhbGU9ZnIob24uTElORUFSKSx0aGlzLmRvbUNvbnRhaW5lclJlY3Q9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX0sdGhpcy5sYXN0VXBkYXRlZD0wLHRoaXMuY3VycmVudFZpZXdCb3hSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9fWdldFVwZGF0ZUlkZW50aWZpZXIoKXtyZXR1cm4gdGhpcy5sYXN0VXBkYXRlZH11cGRhdGVJZGVudGlmaWVyKCl7dGhpcy5sYXN0VXBkYXRlZCsrfWlzWUF4aXNQb2ludGVkRG93bigpe3JldHVybiEwfXNldFhTY2FsZSh0KXt0aGlzLnhTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldFlTY2FsZSh0KXt0aGlzLnlTY2FsZT10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfWdldEN1cnJlbnRWaWV3Qm94UmVjdCgpe3JldHVybiB0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdH1zZXRWaWV3Qm94UmVjdCh0KXt0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXNldERvbUNvbnRhaW5lclJlY3QodCl7dGhpcy5kb21Db250YWluZXJSZWN0PXQsdGhpcy51cGRhdGVJZGVudGlmaWVyKCl9dHJhbnNmb3JtRGF0YVRvVWlDb29yZCh0LGUpe2xldCBpPXQscj1EaS5jb252ZXJ0UmVjdFRvRXh0ZW50KHRoaXMuY3VycmVudFZpZXdCb3hSZWN0KTtyZXR1cm5bdGhpcy54U2NhbGUuZm9yd2FyZChyLngsW2kueCxpLngraS53aWR0aF0sZVswXSksdGhpcy55U2NhbGUuZm9yd2FyZChyLnksdGhpcy5pc1lBeGlzUG9pbnRlZERvd24oKT9baS55K2kuaGVpZ2h0LGkueV06W2kueSxpLnkraS5oZWlnaHRdLGVbMV0pXX19O3ZhciBUbjsoZnVuY3Rpb24obil7bltuLlNWRz0wXT0iU1ZHIixuW24uV0VCR0w9MV09IldFQkdMIn0pKFRufHwoVG49e30pKTtmdW5jdGlvbiB5YShuLHQsZSxpKXtsZXR7Y29sb3I6cix2aXNpYmxlOnMsb3BhY2l0eTpvfT1pLGE9bjtyZXR1cm4hYSYmIXM/bnVsbDooYT1hIT1udWxsP2E6dCgpLGE9ZShhKSxhLnN0eWxlLmRpc3BsYXk9cz8iIjoibm9uZSIsYS5zdHlsZS5zdHJva2U9cixhLnN0eWxlLm9wYWNpdHk9U3RyaW5nKG8hPW51bGw/bzoxKSxhKX12YXIgT3M9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5zdmc9dH1mbHVzaCgpe31vblJlc2l6ZSh0KXt9ZGVzdHJveU9iamVjdCh0KXt0aGlzLnN2Zy5yZW1vdmVDaGlsZCh0LmRvbSl9c2V0VXNlRGFya01vZGUodCl7fWNyZWF0ZVBhdGhEU3RyaW5nKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm4iIjtsZXQgZT1uZXcgQXJyYXkodC5sZW5ndGgvMik7ZVswXT1gTSR7dFswXX0sJHt0WzFdfWA7Zm9yKGxldCBpPTE7aTx0Lmxlbmd0aC8yO2krKyllW2ldPWBMJHt0W2kqMl19LCR7dFtpKjIrMV19YDtyZXR1cm4gZS5qb2luKCIiKX1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2xldCByPXlhKHQ9PW51bGw/dm9pZCAwOnQuZG9tLCgpPT57bGV0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtzLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBvPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIHMuc2V0QXR0cmlidXRlKCJkIixvKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChzKSxzfSxzPT57aWYoISh0IT1udWxsJiZ0LmRhdGEpfHwhRGkuYXJlUG9seWxpbmVzRXF1YWwoZSx0PT1udWxsP3ZvaWQgMDp0LmRhdGEpKXtsZXQgbz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO3Muc2V0QXR0cmlidXRlKCJkIixvKX1yZXR1cm4gc30saSk7cmV0dXJuIHI9PT1udWxsP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOnN9PWksbz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrby8zLGUueCtyLzIsZS55K28vMyxlLngsZS55LW8qMi8zXSksbD15YSh0PT1udWxsP3ZvaWQgMDp0LmRvbSwoKT0+e2xldCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIik7Yy5jbGFzc0xpc3QuYWRkKCJ0cmlhbmdsZSIpLGMuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChjKSxjfSxjPT57bGV0IHU9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhhKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoImQiLHUrIloiKSxjfSxpKTtyZXR1cm4gbD09PW51bGw/bnVsbDoobC5zdHlsZS5maWxsPXMse2RvbTpsLGRhdGE6YX0pfWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7Y29sb3I6cixyYWRpdXM6c309aSxvPXlhKHQ9PW51bGw/dm9pZCAwOnQuZG9tLCgpPT57bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImNpcmNsZSIpO3JldHVybiBhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKHMpKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChhKSxhfSxhPT4oYS5zdHlsZS5maWxsPXIsYS5zZXRBdHRyaWJ1dGUoImN4IixTdHJpbmcoZS54KSksYS5zZXRBdHRyaWJ1dGUoImN5IixTdHJpbmcoZS55KSksYS5zZXRBdHRyaWJ1dGUoInIiLFN0cmluZyhzKSksYSksaSk7cmV0dXJuIG89PT1udWxsP251bGw6e2RvbTpvLGRhdGE6ZX19Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLGkscil7aWYoZS55IT09aS55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtsZXR7YWx0aXR1ZGU6cyxjb2xvcjpvfT1yLGE9Mi9NYXRoLnNxcnQoMykqcyxsPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1hLzIsZS55K3MvMixlLngsZS55LXMvMixpLngsaS55LXMvMixpLngrYS8yLGkueStzLzJdKSxjPXlhKHQ9PW51bGw/dm9pZCAwOnQuZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGg9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGgrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGg9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGgrIloiKSx1fSxyKTtyZXR1cm4gYz09PW51bGw/bnVsbDooYy5zdHlsZS5maWxsPW8se2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fTt2YXIgJGg9IjEzNyI7dmFyIGl3PTAsQW09MSxydz0yO3ZhciBsMD0xLHN3PTIsSnM9Myxlbz0wLGhlPTEsSHI9MixjMD0xO3ZhciBqbj0wLEtzPTEsQ209MixSbT0zLExtPTQsb3c9NSxJcj0xMDAsYXc9MTAxLGx3PTEwMixQbT0xMDMsRG09MTA0LGN3PTIwMCx1dz0yMDEsaHc9MjAyLGZ3PTIwMyx1MD0yMDQsaDA9MjA1LGR3PTIwNixwdz0yMDcsbXc9MjA4LGd3PTIwOSx4dz0yMTAseXc9MCx2dz0xLF93PTIsenU9Myx3dz00LE13PTUsYnc9NixTdz03LENsPTAsRXc9MSxUdz0yLHRpPTAsQXc9MSxDdz0yLFJ3PTMsTHc9NCxQdz01LGYwPTMwMCxBbz0zMDEsQ289MzAyLFV1PTMwMyxCdT0zMDQsUmw9MzA2LEtoPTMwNyxPdT0xZTMsVmU9MTAwMSxrdT0xMDAyLGZlPTEwMDMsSW09MTAwNDt2YXIgTm09MTAwNTt2YXIgYmU9MTAwNixEdz0xMDA3O3ZhciBMbD0xMDA4O3ZhciBlaT0xMDA5LEl3PTEwMTAsTnc9MTAxMSxubz0xMDEyLEZ3PTEwMTMsUWE9MTAxNCxVaT0xMDE1LFVyPTEwMTYsenc9MTAxNyxVdz0xMDE4LEJyPTEwMjAsQnc9MTAyMSxSZT0xMDIzLE93PTEwMjQsa3c9MTAyNSxPaT0xMDI2LFZyPTEwMjcsSHc9MTAyOCxWdz0xMDI5LEd3PTEwMzAsV3c9MTAzMSxxdz0xMDMzLEtjPTMzNzc2LFFjPTMzNzc3LGpjPTMzNzc4LHR1PTMzNzc5LEZtPTM1ODQwLHptPTM1ODQxLFVtPTM1ODQyLEJtPTM1ODQzLFh3PTM2MTk2LE9tPTM3NDkyLGttPTM3NDk2LEhtPTM3ODA4LFZtPTM3ODA5LEdtPTM3ODEwLFdtPTM3ODExLHFtPTM3ODEyLFhtPTM3ODEzLFltPTM3ODE0LFptPTM3ODE1LEptPTM3ODE2LCRtPTM3ODE3LEttPTM3ODE4LFFtPTM3ODE5LGptPTM3ODIwLHRnPTM3ODIxLGVnPTM2NDkyLFl3PTIyMDAsWnc9MjIwMSxKdz0yMjAyLGphPTIzMDAsdGw9MjMwMSxldT0yMzAyLE5yPTI0MDAsRnI9MjQwMSxlbD0yNDAyLFFoPTI1MDAsZDA9MjUwMSwkdz0wO3ZhciByaT0zZTMsJHQ9MzAwMSxLdz0zMjAwLFF3PTMyMDEsdHM9MCxqdz0xO3ZhciBudT03NjgwO3ZhciB0TT01MTksaW89MzUwNDQsbmw9MzUwNDg7dmFyIG5nPSIzMDAgZXMiLEh1PTEwMzUsSW49Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LGUpe3RoaXMuX2xpc3RlbmVycz09PXZvaWQgMCYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO2lbdF09PT12b2lkIDAmJihpW3RdPVtdKSxpW3RdLmluZGV4T2YoZSk9PT0tMSYmaVt0XS5wdXNoKGUpfWhhc0V2ZW50TGlzdGVuZXIodCxlKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuITE7bGV0IGk9dGhpcy5fbGlzdGVuZXJzO3JldHVybiBpW3RdIT09dm9pZCAwJiZpW3RdLmluZGV4T2YoZSkhPT0tMX1yZW1vdmVFdmVudExpc3RlbmVyKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnNbdF07aWYociE9PXZvaWQgMCl7bGV0IHM9ci5pbmRleE9mKGUpO3MhPT0tMSYmci5zcGxpY2UocywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBpPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKGkhPT12b2lkIDApe3QudGFyZ2V0PXRoaXM7bGV0IHI9aS5zbGljZSgwKTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspcltzXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSx2ZT1bXTtmb3IobGV0IG49MDtuPDI1NjtuKyspdmVbbl09KG48MTY/IjAiOiIiKStuLnRvU3RyaW5nKDE2KTt2YXIgaXU9TWF0aC5QSS8xODAsVnU9MTgwL01hdGguUEk7ZnVuY3Rpb24gdG4oKXtsZXQgbj1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCx0PU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLGU9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAsaT1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MDtyZXR1cm4odmVbbiYyNTVdK3ZlW24+PjgmMjU1XSt2ZVtuPj4xNiYyNTVdK3ZlW24+PjI0JjI1NV0rIi0iK3ZlW3QmMjU1XSt2ZVt0Pj44JjI1NV0rIi0iK3ZlW3Q+PjE2JjE1fDY0XSt2ZVt0Pj4yNCYyNTVdKyItIit2ZVtlJjYzfDEyOF0rdmVbZT4+OCYyNTVdKyItIit2ZVtlPj4xNiYyNTVdK3ZlW2U+PjI0JjI1NV0rdmVbaSYyNTVdK3ZlW2k+PjgmMjU1XSt2ZVtpPj4xNiYyNTVdK3ZlW2k+PjI0JjI1NV0pLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gSWUobix0LGUpe3JldHVybiBNYXRoLm1heCh0LE1hdGgubWluKGUsbikpfWZ1bmN0aW9uIGVNKG4sdCl7cmV0dXJuKG4ldCt0KSV0fWZ1bmN0aW9uIHJ1KG4sdCxlKXtyZXR1cm4oMS1lKSpuK2UqdH1mdW5jdGlvbiBpZyhuKXtyZXR1cm4obiZuLTEpPT09MCYmbiE9PTB9ZnVuY3Rpb24gbk0obil7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMikpfXZhciBLPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMueD10LHRoaXMueT1lfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnh9c2V0IHdpZHRoKHQpe3RoaXMueD10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy55fXNldCBoZWlnaHQodCl7dGhpcy55PXR9c2V0KHQsZSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRDb21wb25lbnQodCxlKXtzd2l0Y2godCl7Y2FzZSAwOnRoaXMueD1lO2JyZWFrO2Nhc2UgMTp0aGlzLnk9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc31kaXZpZGUodCl7cmV0dXJuIHRoaXMueC89dC54LHRoaXMueS89dC55LHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzBdKmUrclszXSppK3JbNl0sdGhpcy55PXJbMV0qZStyWzRdKmkrcls3XSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzfW1heCh0KXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1heCh0aGlzLnksdC55KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXN9Y2xhbXBMZW5ndGgodCxlKXtsZXQgaT10aGlzLmxlbmd0aCgpO3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcihpfHwxKS5tdWx0aXBseVNjYWxhcihNYXRoLm1heCh0LE1hdGgubWluKGUsaSkpKX1mbG9vcigpe3JldHVybiB0aGlzLng9TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT1NYXRoLmZsb29yKHRoaXMueSksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpc31yb3VuZCgpe3JldHVybiB0aGlzLng9TWF0aC5yb3VuZCh0aGlzLngpLHRoaXMueT1NYXRoLnJvdW5kKHRoaXMueSksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueX1jcm9zcyh0KXtyZXR1cm4gdGhpcy54KnQueS10aGlzLnkqdC54fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueX1sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9YW5nbGUoKXtyZXR1cm4gTWF0aC5hdGFuMigtdGhpcy55LC10aGlzLngpK01hdGguUEl9ZGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMuZGlzdGFuY2VUb1NxdWFyZWQodCkpfWRpc3RhbmNlVG9TcXVhcmVkKHQpe2xldCBlPXRoaXMueC10LngsaT10aGlzLnktdC55O3JldHVybiBlKmUraSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpfXNldExlbmd0aCh0KXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0KX1sZXJwKHQsZSl7cmV0dXJuIHRoaXMueCs9KHQueC10aGlzLngpKmUsdGhpcy55Kz0odC55LXRoaXMueSkqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueX1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gaSE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXN9cm90YXRlQXJvdW5kKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxzPXRoaXMueC10Lngsbz10aGlzLnktdC55O3JldHVybiB0aGlzLng9cyppLW8qcit0LngsdGhpcy55PXMqcitvKmkrdC55LHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueX19O0sucHJvdG90eXBlLmlzVmVjdG9yMj0hMDt2YXIgZGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLHMsbyxhLGwsYyl7bGV0IHU9dGhpcy5lbGVtZW50cztyZXR1cm4gdVswXT10LHVbMV09cix1WzJdPWEsdVszXT1lLHVbNF09cyx1WzVdPWwsdVs2XT1pLHVbN109byx1WzhdPWMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDEsMCwwLDAsMSksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzRdLGVbOF0sZVsxXSxlWzVdLGVbOV0sZVsyXSxlWzZdLGVbMTBdKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLHM9dGhpcy5lbGVtZW50cyxvPWlbMF0sYT1pWzNdLGw9aVs2XSxjPWlbMV0sdT1pWzRdLGg9aVs3XSxmPWlbMl0sZD1pWzVdLGc9aVs4XSx4PXJbMF0sdj1yWzNdLG09cls2XSxwPXJbMV0sYj1yWzRdLF89cls3XSxTPXJbMl0sTD1yWzVdLEE9cls4XTtyZXR1cm4gc1swXT1vKngrYSpwK2wqUyxzWzNdPW8qdithKmIrbCpMLHNbNl09byptK2EqXytsKkEsc1sxXT1jKngrdSpwK2gqUyxzWzRdPWMqdit1KmIraCpMLHNbN109YyptK3UqXytoKkEsc1syXT1mKngrZCpwK2cqUyxzWzVdPWYqditkKmIrZypMLHNbOF09ZiptK2QqXytnKkEsdGhpc31tdWx0aXBseVNjYWxhcih0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxzPXRbM10sbz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XTtyZXR1cm4gZSpvKnUtZSphKmMtaSpzKnUraSphKmwrcipzKmMtcipvKmx9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxzPXRbM10sbz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxoPXUqby1hKmMsZj1hKmwtdSpzLGQ9YypzLW8qbCxnPWUqaCtpKmYrcipkO2lmKGc9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IHg9MS9nO3JldHVybiB0WzBdPWgqeCx0WzFdPShyKmMtdSppKSp4LHRbMl09KGEqaS1yKm8pKngsdFszXT1mKngsdFs0XT0odSplLXIqbCkqeCx0WzVdPShyKnMtYSplKSp4LHRbNl09ZCp4LHRbN109KGkqbC1jKmUpKngsdFs4XT0obyplLWkqcykqeCx0aGlzfXRyYW5zcG9zZSgpe2xldCB0LGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdLHRoaXN9c2V0VXZUcmFuc2Zvcm0odCxlLGkscixzLG8sYSl7bGV0IGw9TWF0aC5jb3MocyksYz1NYXRoLnNpbihzKTtyZXR1cm4gdGhpcy5zZXQoaSpsLGkqYywtaSoobCpvK2MqYSkrbyt0LC1yKmMscipsLC1yKigtYypvK2wqYSkrYStlLDAsMCwxKSx0aGlzfXNjYWxlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSo9dCxpWzNdKj10LGlbNl0qPXQsaVsxXSo9ZSxpWzRdKj1lLGlbN10qPWUsdGhpc31yb3RhdGUodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxyPXRoaXMuZWxlbWVudHMscz1yWzBdLG89clszXSxhPXJbNl0sbD1yWzFdLGM9cls0XSx1PXJbN107cmV0dXJuIHJbMF09ZSpzK2kqbCxyWzNdPWUqbytpKmMscls2XT1lKmEraSp1LHJbMV09LWkqcytlKmwscls0XT0taSpvK2UqYyxyWzddPS1pKmErZSp1LHRoaXN9dHJhbnNsYXRlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSs9dCppWzJdLGlbM10rPXQqaVs1XSxpWzZdKz10KmlbOF0saVsxXSs9ZSppWzJdLGlbNF0rPWUqaVs1XSxpWzddKz1lKmlbOF0sdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9fTtkZS5wcm90b3R5cGUuaXNNYXRyaXgzPSEwO2Z1bmN0aW9uIHAwKG4pe2ZvcihsZXQgdD1uLmxlbmd0aC0xO3Q+PTA7LS10KWlmKG5bdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcm8obil7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbil9dmFyIG0wPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9LCRlPXtoOjAsczowLGw6MH0sdmE9e2g6MCxzOjAsbDowfTtmdW5jdGlvbiBzdShuLHQsZSl7cmV0dXJuIGU8MCYmKGUrPTEpLGU+MSYmKGUtPTEpLGU8MS82P24rKHQtbikqNiplOmU8MS8yP3Q6ZTwyLzM/bisodC1uKSo2KigyLzMtZSk6bn1mdW5jdGlvbiBPcihuKXtyZXR1cm4gbjwuMDQwNDU/biouMDc3Mzk5MzgwODpNYXRoLnBvdyhuKi45NDc4NjcyOTg2Ky4wNTIxMzI3MDE0LDIuNCl9ZnVuY3Rpb24gb3Uobil7cmV0dXJuIG48LjAwMzEzMDg/bioxMi45MjoxLjA1NSpNYXRoLnBvdyhuLC40MTY2NiktLjA1NX12YXIgZnQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3JldHVybiBlPT09dm9pZCAwJiZpPT09dm9pZCAwP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQsZSxpKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6dHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuc2V0SGV4KHQpOnR5cGVvZiB0PT0ic3RyaW5nIiYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KHQmMjU1KS8yNTUsdGhpc31zZXRSR0IodCxlLGkpe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzfXNldEhTTCh0LGUsaSl7aWYodD1lTSh0LDEpLGU9SWUoZSwwLDEpLGk9SWUoaSwwLDEpLGU9PT0wKXRoaXMucj10aGlzLmc9dGhpcy5iPWk7ZWxzZXtsZXQgcj1pPD0uNT9pKigxK2UpOmkrZS1pKmUscz0yKmktcjt0aGlzLnI9c3UocyxyLHQrMS8zKSx0aGlzLmc9c3UocyxyLHQpLHRoaXMuYj1zdShzLHIsdC0xLzMpfXJldHVybiB0aGlzfXNldFN0eWxlKHQpe2Z1bmN0aW9uIGUocil7ciE9PXZvaWQgMCYmcGFyc2VGbG9hdChyKTwxJiZjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBBbHBoYSBjb21wb25lbnQgb2YgIit0KyIgd2lsbCBiZSBpZ25vcmVkLiIpfWxldCBpO2lmKGk9L14oKD86cmdifGhzbClhPylcKChbXlwpXSopXCkvLmV4ZWModCkpe2xldCByLHM9aVsxXSxvPWlbMl07c3dpdGNoKHMpe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKHI9L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChyWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQoclsyXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KHJbM10sMTApKS8yNTUsZShyWzRdKSx0aGlzO2lmKHI9L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhvKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChyWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQoclsyXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KHJbM10sMTApKS8xMDAsZShyWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKHI9L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMobykpe2xldCBhPXBhcnNlRmxvYXQoclsxXSkvMzYwLGw9cGFyc2VJbnQoclsyXSwxMCkvMTAwLGM9cGFyc2VJbnQoclszXSwxMCkvMTAwO3JldHVybiBlKHJbNF0pLHRoaXMuc2V0SFNMKGEsbCxjKX1icmVha319ZWxzZSBpZihpPS9eXCMoW0EtRmEtZlxkXSspJC8uZXhlYyh0KSl7bGV0IHI9aVsxXSxzPXIubGVuZ3RoO2lmKHM9PT0zKXJldHVybiB0aGlzLnI9cGFyc2VJbnQoci5jaGFyQXQoMCkrci5jaGFyQXQoMCksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoci5jaGFyQXQoMSkrci5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoci5jaGFyQXQoMikrci5jaGFyQXQoMiksMTYpLzI1NSx0aGlzO2lmKHM9PT02KXJldHVybiB0aGlzLnI9cGFyc2VJbnQoci5jaGFyQXQoMCkrci5jaGFyQXQoMSksMTYpLzI1NSx0aGlzLmc9cGFyc2VJbnQoci5jaGFyQXQoMikrci5jaGFyQXQoMyksMTYpLzI1NSx0aGlzLmI9cGFyc2VJbnQoci5jaGFyQXQoNCkrci5jaGFyQXQoNSksMTYpLzI1NSx0aGlzfXJldHVybiB0JiZ0Lmxlbmd0aD4wP3RoaXMuc2V0Q29sb3JOYW1lKHQpOnRoaXN9c2V0Q29sb3JOYW1lKHQpe2xldCBlPW0wW3QudG9Mb3dlckNhc2UoKV07cmV0dXJuIGUhPT12b2lkIDA/dGhpcy5zZXRIZXgoZSk6Y29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogVW5rbm93biBjb2xvciAiK3QpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5yLHRoaXMuZyx0aGlzLmIpfWNvcHkodCl7cmV0dXJuIHRoaXMucj10LnIsdGhpcy5nPXQuZyx0aGlzLmI9dC5iLHRoaXN9Y29weVNSR0JUb0xpbmVhcih0KXtyZXR1cm4gdGhpcy5yPU9yKHQuciksdGhpcy5nPU9yKHQuZyksdGhpcy5iPU9yKHQuYiksdGhpc31jb3B5TGluZWFyVG9TUkdCKHQpe3JldHVybiB0aGlzLnI9b3UodC5yKSx0aGlzLmc9b3UodC5nKSx0aGlzLmI9b3UodC5iKSx0aGlzfWNvbnZlcnRTUkdCVG9MaW5lYXIoKXtyZXR1cm4gdGhpcy5jb3B5U1JHQlRvTGluZWFyKHRoaXMpLHRoaXN9Y29udmVydExpbmVhclRvU1JHQigpe3JldHVybiB0aGlzLmNvcHlMaW5lYXJUb1NSR0IodGhpcyksdGhpc31nZXRIZXgoKXtyZXR1cm4gdGhpcy5yKjI1NTw8MTZedGhpcy5nKjI1NTw8OF50aGlzLmIqMjU1PDwwfWdldEhleFN0cmluZygpe3JldHVybigiMDAwMDAwIit0aGlzLmdldEhleCgpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpfWdldEhTTCh0KXtsZXQgZT10aGlzLnIsaT10aGlzLmcscj10aGlzLmIscz1NYXRoLm1heChlLGksciksbz1NYXRoLm1pbihlLGksciksYSxsLGM9KG8rcykvMjtpZihvPT09cylhPTAsbD0wO2Vsc2V7bGV0IHU9cy1vO3N3aXRjaChsPWM8PS41P3UvKHMrbyk6dS8oMi1zLW8pLHMpe2Nhc2UgZTphPShpLXIpL3UrKGk8cj82OjApO2JyZWFrO2Nhc2UgaTphPShyLWUpL3UrMjticmVhaztjYXNlIHI6YT0oZS1pKS91KzQ7YnJlYWt9YS89Nn1yZXR1cm4gdC5oPWEsdC5zPWwsdC5sPWMsdH1nZXRTdHlsZSgpe3JldHVybiJyZ2IoIisodGhpcy5yKjI1NXwwKSsiLCIrKHRoaXMuZyoyNTV8MCkrIiwiKyh0aGlzLmIqMjU1fDApKyIpIn1vZmZzZXRIU0wodCxlLGkpe3JldHVybiB0aGlzLmdldEhTTCgkZSksJGUuaCs9dCwkZS5zKz1lLCRlLmwrPWksdGhpcy5zZXRIU0woJGUuaCwkZS5zLCRlLmwpLHRoaXN9YWRkKHQpe3JldHVybiB0aGlzLnIrPXQucix0aGlzLmcrPXQuZyx0aGlzLmIrPXQuYix0aGlzfWFkZENvbG9ycyh0LGUpe3JldHVybiB0aGlzLnI9dC5yK2Uucix0aGlzLmc9dC5nK2UuZyx0aGlzLmI9dC5iK2UuYix0aGlzfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKz10LHRoaXMuZys9dCx0aGlzLmIrPXQsdGhpc31zdWIodCl7cmV0dXJuIHRoaXMucj1NYXRoLm1heCgwLHRoaXMuci10LnIpLHRoaXMuZz1NYXRoLm1heCgwLHRoaXMuZy10LmcpLHRoaXMuYj1NYXRoLm1heCgwLHRoaXMuYi10LmIpLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMucio9dC5yLHRoaXMuZyo9dC5nLHRoaXMuYio9dC5iLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMucio9dCx0aGlzLmcqPXQsdGhpcy5iKj10LHRoaXN9bGVycCh0LGUpe3JldHVybiB0aGlzLnIrPSh0LnItdGhpcy5yKSplLHRoaXMuZys9KHQuZy10aGlzLmcpKmUsdGhpcy5iKz0odC5iLXRoaXMuYikqZSx0aGlzfWxlcnBDb2xvcnModCxlLGkpe3JldHVybiB0aGlzLnI9dC5yKyhlLnItdC5yKSppLHRoaXMuZz10LmcrKGUuZy10LmcpKmksdGhpcy5iPXQuYisoZS5iLXQuYikqaSx0aGlzfWxlcnBIU0wodCxlKXt0aGlzLmdldEhTTCgkZSksdC5nZXRIU0wodmEpO2xldCBpPXJ1KCRlLmgsdmEuaCxlKSxyPXJ1KCRlLnMsdmEucyxlKSxzPXJ1KCRlLmwsdmEubCxlKTtyZXR1cm4gdGhpcy5zZXRIU0woaSxyLHMpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LnI9PT10aGlzLnImJnQuZz09PXRoaXMuZyYmdC5iPT09dGhpcy5ifWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMucj10W2VdLHRoaXMuZz10W2UrMV0sdGhpcy5iPXRbZSsyXSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMucix0W2UrMV09dGhpcy5nLHRbZSsyXT10aGlzLmIsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMucj10LmdldFgoZSksdGhpcy5nPXQuZ2V0WShlKSx0aGlzLmI9dC5nZXRaKGUpLHQubm9ybWFsaXplZD09PSEwJiYodGhpcy5yLz0yNTUsdGhpcy5nLz0yNTUsdGhpcy5iLz0yNTUpLHRoaXN9dG9KU09OKCl7cmV0dXJuIHRoaXMuZ2V0SGV4KCl9fTtmdC5OQU1FUz1tMDtmdC5wcm90b3R5cGUuaXNDb2xvcj0hMDtmdC5wcm90b3R5cGUucj0xO2Z0LnByb3RvdHlwZS5nPTE7ZnQucHJvdG90eXBlLmI9MTt2YXIgcHIsTm49Y2xhc3N7c3RhdGljIGdldERhdGFVUkwodCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpfHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ9PSJ1bmRlZmluZWQiKXJldHVybiB0LnNyYztsZXQgZTtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpZT10O2Vsc2V7cHI9PT12b2lkIDAmJihwcj1ybygiY2FudmFzIikpLHByLndpZHRoPXQud2lkdGgscHIuaGVpZ2h0PXQuaGVpZ2h0O2xldCBpPXByLmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9pLnB1dEltYWdlRGF0YSh0LDAsMCk6aS5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksZT1wcn1yZXR1cm4gZS53aWR0aD4yMDQ4fHxlLmhlaWdodD4yMDQ4Pyhjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyIsdCksZS50b0RhdGFVUkwoImltYWdlL2pwZWciLC42KSk6ZS50b0RhdGFVUkwoImltYWdlL3BuZyIpfXN0YXRpYyBzUkdCVG9MaW5lYXIodCl7aWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBlPXJvKCJjYW52YXMiKTtlLndpZHRoPXQud2lkdGgsZS5oZWlnaHQ9dC5oZWlnaHQ7bGV0IGk9ZS5nZXRDb250ZXh0KCIyZCIpO2kuZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpO2xldCByPWkuZ2V0SW1hZ2VEYXRhKDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxzPXIuZGF0YTtmb3IobGV0IG89MDtvPHMubGVuZ3RoO28rKylzW29dPU9yKHNbb10vMjU1KSoyNTU7cmV0dXJuIGkucHV0SW1hZ2VEYXRhKHIsMCwwKSxlfWVsc2UgaWYodC5kYXRhKXtsZXQgZT10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGUgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT9lW2ldPU1hdGguZmxvb3IoT3IoZVtpXS8yNTUpKjI1NSk6ZVtpXT1PcihlW2ldKTtyZXR1cm57ZGF0YTplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1lbHNlIHJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuc1JHQlRvTGluZWFyKCk6IFVuc3VwcG9ydGVkIGltYWdlIHR5cGUuIE5vIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gYXBwbGllZC4iKSx0fX0saU09MCxhZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQ9YWUuREVGQVVMVF9JTUFHRSxlPWFlLkRFRkFVTFRfTUFQUElORyxpPVZlLHI9VmUscz1iZSxvPUxsLGE9UmUsbD1laSxjPTEsdT1yaSl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTppTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1pLHRoaXMud3JhcFQ9cix0aGlzLm1hZ0ZpbHRlcj1zLHRoaXMubWluRmlsdGVyPW8sdGhpcy5hbmlzb3Ryb3B5PWMsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPWwsdGhpcy5vZmZzZXQ9bmV3IEsoMCwwKSx0aGlzLnJlcGVhdD1uZXcgSygxLDEpLHRoaXMuY2VudGVyPW5ldyBLKDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgZGUsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPXUsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5uZWVkc1BNUkVNVXBkYXRlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaW1hZ2U9dC5pbWFnZSx0aGlzLm1pcG1hcHM9dC5taXBtYXBzLnNsaWNlKDApLHRoaXMubWFwcGluZz10Lm1hcHBpbmcsdGhpcy53cmFwUz10LndyYXBTLHRoaXMud3JhcFQ9dC53cmFwVCx0aGlzLm1hZ0ZpbHRlcj10Lm1hZ0ZpbHRlcix0aGlzLm1pbkZpbHRlcj10Lm1pbkZpbHRlcix0aGlzLmFuaXNvdHJvcHk9dC5hbmlzb3Ryb3B5LHRoaXMuZm9ybWF0PXQuZm9ybWF0LHRoaXMuaW50ZXJuYWxGb3JtYXQ9dC5pbnRlcm5hbEZvcm1hdCx0aGlzLnR5cGU9dC50eXBlLHRoaXMub2Zmc2V0LmNvcHkodC5vZmZzZXQpLHRoaXMucmVwZWF0LmNvcHkodC5yZXBlYXQpLHRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPXQuZ2VuZXJhdGVNaXBtYXBzLHRoaXMucHJlbXVsdGlwbHlBbHBoYT10LnByZW11bHRpcGx5QWxwaGEsdGhpcy5mbGlwWT10LmZsaXBZLHRoaXMudW5wYWNrQWxpZ25tZW50PXQudW5wYWNrQWxpZ25tZW50LHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9dG9KU09OKHQpe2xldCBlPXQ9PT12b2lkIDB8fHR5cGVvZiB0PT0ic3RyaW5nIjtpZighZSYmdC50ZXh0dXJlc1t0aGlzLnV1aWRdIT09dm9pZCAwKXJldHVybiB0LnRleHR1cmVzW3RoaXMudXVpZF07bGV0IGk9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJUZXh0dXJlIixnZW5lcmF0b3I6IlRleHR1cmUudG9KU09OIn0sdXVpZDp0aGlzLnV1aWQsbmFtZTp0aGlzLm5hbWUsbWFwcGluZzp0aGlzLm1hcHBpbmcscmVwZWF0Olt0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnldLG9mZnNldDpbdGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55XSxjZW50ZXI6W3RoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueV0scm90YXRpb246dGhpcy5yb3RhdGlvbix3cmFwOlt0aGlzLndyYXBTLHRoaXMud3JhcFRdLGZvcm1hdDp0aGlzLmZvcm1hdCx0eXBlOnRoaXMudHlwZSxlbmNvZGluZzp0aGlzLmVuY29kaW5nLG1pbkZpbHRlcjp0aGlzLm1pbkZpbHRlcixtYWdGaWx0ZXI6dGhpcy5tYWdGaWx0ZXIsYW5pc290cm9weTp0aGlzLmFuaXNvdHJvcHksZmxpcFk6dGhpcy5mbGlwWSxwcmVtdWx0aXBseUFscGhhOnRoaXMucHJlbXVsdGlwbHlBbHBoYSx1bnBhY2tBbGlnbm1lbnQ6dGhpcy51bnBhY2tBbGlnbm1lbnR9O2lmKHRoaXMuaW1hZ2UhPT12b2lkIDApe2xldCByPXRoaXMuaW1hZ2U7aWYoci51dWlkPT09dm9pZCAwJiYoci51dWlkPXRuKCkpLCFlJiZ0LmltYWdlc1tyLnV1aWRdPT09dm9pZCAwKXtsZXQgcztpZihBcnJheS5pc0FycmF5KHIpKXtzPVtdO2ZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKylyW29dLmlzRGF0YVRleHR1cmU/cy5wdXNoKGF1KHJbb10uaW1hZ2UpKTpzLnB1c2goYXUocltvXSkpfWVsc2Ugcz1hdShyKTt0LmltYWdlc1tyLnV1aWRdPXt1dWlkOnIudXVpZCx1cmw6c319aS5pbWFnZT1yLnV1aWR9cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZXx8KHQudGV4dHVyZXNbdGhpcy51dWlkXT1pKSxpfWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9dHJhbnNmb3JtVXYodCl7aWYodGhpcy5tYXBwaW5nIT09ZjApcmV0dXJuIHQ7aWYodC5hcHBseU1hdHJpeDModGhpcy5tYXRyaXgpLHQueDwwfHx0Lng+MSlzd2l0Y2godGhpcy53cmFwUyl7Y2FzZSBPdTp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVhaztjYXNlIFZlOnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSBrdTpNYXRoLmFicyhNYXRoLmZsb29yKHQueCklMik9PT0xP3QueD1NYXRoLmNlaWwodC54KS10Lng6dC54PXQueC1NYXRoLmZsb29yKHQueCk7YnJlYWt9aWYodC55PDB8fHQueT4xKXN3aXRjaCh0aGlzLndyYXBUKXtjYXNlIE91OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrO2Nhc2UgVmU6dC55PXQueTwwPzA6MTticmVhaztjYXNlIGt1Ok1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT09PTE/dC55PU1hdGguY2VpbCh0LnkpLXQueTp0Lnk9dC55LU1hdGguZmxvb3IodC55KTticmVha31yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK319O2FlLkRFRkFVTFRfSU1BR0U9dm9pZCAwO2FlLkRFRkFVTFRfTUFQUElORz1mMDthZS5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO2Z1bmN0aW9uIGF1KG4pe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZuIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9Obi5nZXREYXRhVVJMKG4pOm4uZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLmRhdGEpLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LHR5cGU6bi5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9dmFyIFd0PWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9MSl7dGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpcy53PXJ9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxlLGkscil7cmV0dXJuIHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2Nhc2UgMzp0aGlzLnc9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dC53IT09dm9pZCAwP3QudzoxLHRoaXN9YWRkKHQsZSl7cmV0dXJuIGUhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXMuej10LnorZS56LHRoaXMudz10LncrZS53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzLnorPXQueiplLHRoaXMudys9dC53KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpcy56PXQuei1lLnosdGhpcy53PXQudy1lLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXRoaXMudyxvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSppK29bOF0qcitvWzEyXSpzLHRoaXMueT1vWzFdKmUrb1s1XSppK29bOV0qcitvWzEzXSpzLHRoaXMuej1vWzJdKmUrb1s2XSppK29bMTBdKnIrb1sxNF0qcyx0aGlzLnc9b1szXSplK29bN10qaStvWzExXSpyK29bMTVdKnMsdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgZT1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gZTwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10LngvZSx0aGlzLnk9dC55L2UsdGhpcy56PXQuei9lKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgZSxpLHIscyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxoPWxbOF0sZj1sWzFdLGQ9bFs1XSxnPWxbOV0seD1sWzJdLHY9bFs2XSxtPWxbMTBdO2lmKE1hdGguYWJzKHUtZik8LjAxJiZNYXRoLmFicyhoLXgpPC4wMSYmTWF0aC5hYnMoZy12KTwuMDEpe2lmKE1hdGguYWJzKHUrZik8LjEmJk1hdGguYWJzKGgreCk8LjEmJk1hdGguYWJzKGcrdik8LjEmJk1hdGguYWJzKGMrZCttLTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO2U9TWF0aC5QSTtsZXQgYj0oYysxKS8yLF89KGQrMSkvMixTPShtKzEpLzIsTD0odStmKS80LEE9KGgreCkvNCxIPShnK3YpLzQ7cmV0dXJuIGI+XyYmYj5TP2I8LjAxPyhpPTAscj0uNzA3MTA2NzgxLHM9LjcwNzEwNjc4MSk6KGk9TWF0aC5zcXJ0KGIpLHI9TC9pLHM9QS9pKTpfPlM/XzwuMDE/KGk9LjcwNzEwNjc4MSxyPTAscz0uNzA3MTA2NzgxKToocj1NYXRoLnNxcnQoXyksaT1ML3Iscz1IL3IpOlM8LjAxPyhpPS43MDcxMDY3ODEscj0uNzA3MTA2NzgxLHM9MCk6KHM9TWF0aC5zcXJ0KFMpLGk9QS9zLHI9SC9zKSx0aGlzLnNldChpLHIscyxlKSx0aGlzfWxldCBwPU1hdGguc3FydCgodi1nKSoodi1nKSsoaC14KSooaC14KSsoZi11KSooZi11KSk7cmV0dXJuIE1hdGguYWJzKHApPC4wMDEmJihwPTEpLHRoaXMueD0odi1nKS9wLHRoaXMueT0oaC14KS9wLHRoaXMuej0oZi11KS9wLHRoaXMudz1NYXRoLmFjb3MoKGMrZCttLTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oZS53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQsZSl7bGV0IGk9dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIoaXx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihlLGkpKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LGUpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSplLHRoaXMueSs9KHQueS10aGlzLnkpKmUsdGhpcy56Kz0odC56LXRoaXMueikqZSx0aGlzLncrPSh0LnctdGhpcy53KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpcy56PXQueisoZS56LXQueikqaSx0aGlzLnc9dC53KyhlLnctdC53KSppLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy54PXRbZV0sdGhpcy55PXRbZSsxXSx0aGlzLno9dFtlKzJdLHRoaXMudz10W2UrM10sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHRbZSszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSxpKXtyZXR1cm4gaSE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChlKSx0aGlzLnk9dC5nZXRZKGUpLHRoaXMuej10LmdldFooZSksdGhpcy53PXQuZ2V0VyhlKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O1d0LnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIE5lPWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgV3QoMCwwLHQsZSksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyBXdCgwLDAsdCxlKSx0aGlzLnRleHR1cmU9bmV3IGFlKHZvaWQgMCxpLm1hcHBpbmcsaS53cmFwUyxpLndyYXBULGkubWFnRmlsdGVyLGkubWluRmlsdGVyLGkuZm9ybWF0LGkudHlwZSxpLmFuaXNvdHJvcHksaS5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1pLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9pLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQ9aS5pbnRlcm5hbEZvcm1hdCE9PXZvaWQgMD9pLmludGVybmFsRm9ybWF0Om51bGwsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1pLm1pbkZpbHRlciE9PXZvaWQgMD9pLm1pbkZpbHRlcjpiZSx0aGlzLmRlcHRoQnVmZmVyPWkuZGVwdGhCdWZmZXIhPT12b2lkIDA/aS5kZXB0aEJ1ZmZlcjohMCx0aGlzLnN0ZW5jaWxCdWZmZXI9aS5zdGVuY2lsQnVmZmVyIT09dm9pZCAwP2kuc3RlbmNpbEJ1ZmZlcjohMSx0aGlzLmRlcHRoVGV4dHVyZT1pLmRlcHRoVGV4dHVyZSE9PXZvaWQgMD9pLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LGUsaT0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09ZXx8dGhpcy5kZXB0aCE9PWkpJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9aSx0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07TmUucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITA7dmFyIEd1PWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSk7bGV0IHI9dGhpcy50ZXh0dXJlO3RoaXMudGV4dHVyZT1bXTtmb3IobGV0IHM9MDtzPGk7cysrKXRoaXMudGV4dHVyZVtzXT1yLmNsb25lKCl9c2V0U2l6ZSh0LGUsaT0xKXtpZih0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1lfHx0aGlzLmRlcHRoIT09aSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5kZXB0aD1pO2ZvcihsZXQgcj0wLHM9dGhpcy50ZXh0dXJlLmxlbmd0aDtyPHM7cisrKXRoaXMudGV4dHVyZVtyXS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZVtyXS5pbWFnZS5oZWlnaHQ9ZSx0aGlzLnRleHR1cmVbcl0uaW1hZ2UuZGVwdGg9aTt0aGlzLmRpc3Bvc2UoKX1yZXR1cm4gdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsZSksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxlKSx0aGlzfWNvcHkodCl7dGhpcy5kaXNwb3NlKCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5zY2lzc29yLnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpcy50ZXh0dXJlLmxlbmd0aD0wO2ZvcihsZXQgZT0wLGk9dC50ZXh0dXJlLmxlbmd0aDtlPGk7ZSsrKXRoaXMudGV4dHVyZVtlXT10LnRleHR1cmVbZV0uY2xvbmUoKTtyZXR1cm4gdGhpc319O0d1LnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPSEwO3ZhciBzbz1jbGFzcyBleHRlbmRzIE5le2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcih0LGUsaSksdGhpcy5zYW1wbGVzPTQsdGhpcy5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weT1pLmlnbm9yZURlcHRoIT09dm9pZCAwP2kuaWdub3JlRGVwdGg6ITAsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9aS51c2VSZW5kZXJUb1RleHR1cmUhPT12b2lkIDA/aS51c2VSZW5kZXJUb1RleHR1cmU6ITEsdGhpcy51c2VSZW5kZXJidWZmZXI9dGhpcy51c2VSZW5kZXJUb1RleHR1cmU9PT0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtzby5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciBFZT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX3c9cn1zdGF0aWMgc2xlcnAodCxlLGkscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLGkuc2xlcnBRdWF0ZXJuaW9ucyh0LGUscil9c3RhdGljIHNsZXJwRmxhdCh0LGUsaSxyLHMsbyxhKXtsZXQgbD1pW3IrMF0sYz1pW3IrMV0sdT1pW3IrMl0saD1pW3IrM10sZj1zW28rMF0sZD1zW28rMV0sZz1zW28rMl0seD1zW28rM107aWYoYT09PTApe3RbZSswXT1sLHRbZSsxXT1jLHRbZSsyXT11LHRbZSszXT1oO3JldHVybn1pZihhPT09MSl7dFtlKzBdPWYsdFtlKzFdPWQsdFtlKzJdPWcsdFtlKzNdPXg7cmV0dXJufWlmKGghPT14fHxsIT09Znx8YyE9PWR8fHUhPT1nKXtsZXQgdj0xLWEsbT1sKmYrYypkK3UqZytoKngscD1tPj0wPzE6LTEsYj0xLW0qbTtpZihiPk51bWJlci5FUFNJTE9OKXtsZXQgUz1NYXRoLnNxcnQoYiksTD1NYXRoLmF0YW4yKFMsbSpwKTt2PU1hdGguc2luKHYqTCkvUyxhPU1hdGguc2luKGEqTCkvU31sZXQgXz1hKnA7aWYobD1sKnYrZipfLGM9Yyp2K2QqXyx1PXUqditnKl8saD1oKnYreCpfLHY9PT0xLWEpe2xldCBTPTEvTWF0aC5zcXJ0KGwqbCtjKmMrdSp1K2gqaCk7bCo9UyxjKj1TLHUqPVMsaCo9U319dFtlXT1sLHRbZSsxXT1jLHRbZSsyXT11LHRbZSszXT1ofXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LGUsaSxyLHMsbyl7bGV0IGE9aVtyXSxsPWlbcisxXSxjPWlbcisyXSx1PWlbciszXSxoPXNbb10sZj1zW28rMV0sZD1zW28rMl0sZz1zW28rM107cmV0dXJuIHRbZV09YSpnK3UqaCtsKmQtYypmLHRbZSsxXT1sKmcrdSpmK2MqaC1hKmQsdFtlKzJdPWMqZyt1KmQrYSpmLWwqaCx0W2UrM109dSpnLWEqaC1sKmYtYypkLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9ZSx0aGlzLl96PWksdGhpcy5fdz1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LGUpe2lmKCEodCYmdC5pc0V1bGVyKSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBpPXQuX3gscj10Ll95LHM9dC5feixvPXQuX29yZGVyLGE9TWF0aC5jb3MsbD1NYXRoLnNpbixjPWEoaS8yKSx1PWEoci8yKSxoPWEocy8yKSxmPWwoaS8yKSxkPWwoci8yKSxnPWwocy8yKTtzd2l0Y2gobyl7Y2FzZSJYWVoiOnRoaXMuX3g9Zip1KmgrYypkKmcsdGhpcy5feT1jKmQqaC1mKnUqZyx0aGlzLl96PWMqdSpnK2YqZCpoLHRoaXMuX3c9Yyp1KmgtZipkKmc7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9Zip1KmgrYypkKmcsdGhpcy5feT1jKmQqaC1mKnUqZyx0aGlzLl96PWMqdSpnLWYqZCpoLHRoaXMuX3c9Yyp1KmgrZipkKmc7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9Zip1KmgtYypkKmcsdGhpcy5feT1jKmQqaCtmKnUqZyx0aGlzLl96PWMqdSpnK2YqZCpoLHRoaXMuX3c9Yyp1KmgtZipkKmc7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9Zip1KmgtYypkKmcsdGhpcy5feT1jKmQqaCtmKnUqZyx0aGlzLl96PWMqdSpnLWYqZCpoLHRoaXMuX3c9Yyp1KmgrZipkKmc7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9Zip1KmgrYypkKmcsdGhpcy5feT1jKmQqaCtmKnUqZyx0aGlzLl96PWMqdSpnLWYqZCpoLHRoaXMuX3c9Yyp1KmgtZipkKmc7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9Zip1KmgtYypkKmcsdGhpcy5feT1jKmQqaC1mKnUqZyx0aGlzLl96PWMqdSpnK2YqZCpoLHRoaXMuX3c9Yyp1KmgrZipkKmc7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK28pfXJldHVybiBlIT09ITEmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtsZXQgaT1lLzIscj1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5feD10Lngqcix0aGlzLl95PXQueSpyLHRoaXMuX3o9dC56KnIsdGhpcy5fdz1NYXRoLmNvcyhpKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGU9dC5lbGVtZW50cyxpPWVbMF0scj1lWzRdLHM9ZVs4XSxvPWVbMV0sYT1lWzVdLGw9ZVs5XSxjPWVbMl0sdT1lWzZdLGg9ZVsxMF0sZj1pK2EraDtpZihmPjApe2xldCBkPS41L01hdGguc3FydChmKzEpO3RoaXMuX3c9LjI1L2QsdGhpcy5feD0odS1sKSpkLHRoaXMuX3k9KHMtYykqZCx0aGlzLl96PShvLXIpKmR9ZWxzZSBpZihpPmEmJmk+aCl7bGV0IGQ9MipNYXRoLnNxcnQoMStpLWEtaCk7dGhpcy5fdz0odS1sKS9kLHRoaXMuX3g9LjI1KmQsdGhpcy5feT0ocitvKS9kLHRoaXMuX3o9KHMrYykvZH1lbHNlIGlmKGE+aCl7bGV0IGQ9MipNYXRoLnNxcnQoMSthLWktaCk7dGhpcy5fdz0ocy1jKS9kLHRoaXMuX3g9KHIrbykvZCx0aGlzLl95PS4yNSpkLHRoaXMuX3o9KGwrdSkvZH1lbHNle2xldCBkPTIqTWF0aC5zcXJ0KDEraC1pLWEpO3RoaXMuX3c9KG8tcikvZCx0aGlzLl94PShzK2MpL2QsdGhpcy5feT0obCt1KS9kLHRoaXMuX3o9LjI1KmR9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBpPXQuZG90KGUpKzE7cmV0dXJuIGk8TnVtYmVyLkVQU0lMT04/KGk9MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1pKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PWkpKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1pKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKEllKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2xldCBpPXRoaXMuYW5nbGVUbyh0KTtpZihpPT09MClyZXR1cm4gdGhpcztsZXQgcj1NYXRoLm1pbigxLGUvaSk7cmV0dXJuIHRoaXMuc2xlcnAodCxyKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIHQ9PT0wPyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtsZXQgaT10Ll94LHI9dC5feSxzPXQuX3osbz10Ll93LGE9ZS5feCxsPWUuX3ksYz1lLl96LHU9ZS5fdztyZXR1cm4gdGhpcy5feD1pKnUrbyphK3IqYy1zKmwsdGhpcy5feT1yKnUrbypsK3MqYS1pKmMsdGhpcy5fej1zKnUrbypjK2kqbC1yKmEsdGhpcy5fdz1vKnUtaSphLXIqbC1zKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZihlPT09MClyZXR1cm4gdGhpcztpZihlPT09MSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBpPXRoaXMuX3gscj10aGlzLl95LHM9dGhpcy5feixvPXRoaXMuX3csYT1vKnQuX3craSp0Ll94K3IqdC5feStzKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PW8sdGhpcy5feD1pLHRoaXMuX3k9cix0aGlzLl96PXMsdGhpcztsZXQgbD0xLWEqYTtpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IGQ9MS1lO3JldHVybiB0aGlzLl93PWQqbytlKnRoaXMuX3csdGhpcy5feD1kKmkrZSp0aGlzLl94LHRoaXMuX3k9ZCpyK2UqdGhpcy5feSx0aGlzLl96PWQqcytlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksdT1NYXRoLmF0YW4yKGMsYSksaD1NYXRoLnNpbigoMS1lKSp1KS9jLGY9TWF0aC5zaW4oZSp1KS9jO3JldHVybiB0aGlzLl93PW8qaCt0aGlzLl93KmYsdGhpcy5feD1pKmgrdGhpcy5feCpmLHRoaXMuX3k9cipoK3RoaXMuX3kqZix0aGlzLl96PXMqaCt0aGlzLl96KmYsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChlLGkpfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCksZT1NYXRoLnNxcnQoMS10KSxpPU1hdGguc3FydCh0KSxyPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLHM9MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KGUqTWF0aC5jb3MociksaSpNYXRoLnNpbihzKSxpKk1hdGguY29zKHMpLGUqTWF0aC5zaW4ocikpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O0VlLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIFQ9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTApe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pfXNldCh0LGUsaSl7cmV0dXJuIGk9PT12b2lkIDAmJihpPXRoaXMueiksdGhpcy54PXQsdGhpcy55PWUsdGhpcy56PWksdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQsZSl7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9ZTticmVhaztjYXNlIDE6dGhpcy55PWU7YnJlYWs7Y2FzZSAyOnRoaXMuej1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzfXN1Yih0LGUpe3JldHVybiBlIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQsZSkpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCplLngsdGhpcy55PXQueSplLnksdGhpcy56PXQueiplLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihyZy5zZXRGcm9tRXVsZXIodCkpfWFwcGx5QXhpc0FuZ2xlKHQsZSl7cmV0dXJuIHRoaXMuYXBwbHlRdWF0ZXJuaW9uKHJnLnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1szXSppK3NbNl0qcix0aGlzLnk9c1sxXSplK3NbNF0qaStzWzddKnIsdGhpcy56PXNbMl0qZStzWzVdKmkrc1s4XSpyLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnoscz10LmVsZW1lbnRzLG89MS8oc1szXSplK3NbN10qaStzWzExXSpyK3NbMTVdKTtyZXR1cm4gdGhpcy54PShzWzBdKmUrc1s0XSppK3NbOF0qcitzWzEyXSkqbyx0aGlzLnk9KHNbMV0qZStzWzVdKmkrc1s5XSpyK3NbMTNdKSpvLHRoaXMuej0oc1syXSplK3NbNl0qaStzWzEwXSpyK3NbMTRdKSpvLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXQueCxvPXQueSxhPXQueixsPXQudyxjPWwqZStvKnItYSppLHU9bCppK2EqZS1zKnIsaD1sKnIrcyppLW8qZSxmPS1zKmUtbyppLWEqcjtyZXR1cm4gdGhpcy54PWMqbCtmKi1zK3UqLWEtaCotbyx0aGlzLnk9dSpsK2YqLW8raCotcy1jKi1hLHRoaXMuej1oKmwrZiotYStjKi1vLXUqLXMsdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixzPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1zWzBdKmUrc1s0XSppK3NbOF0qcix0aGlzLnk9c1sxXSplK3NbNV0qaStzWzldKnIsdGhpcy56PXNbMl0qZStzWzZdKmkrc1sxMF0qcix0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89ZS54LGE9ZS55LGw9ZS56O3JldHVybiB0aGlzLng9cipsLXMqYSx0aGlzLnk9cypvLWkqbCx0aGlzLno9aSphLXIqbyx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtsZXQgZT10Lmxlbmd0aFNxKCk7aWYoZT09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtsZXQgaT10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoaSl9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIGx1LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKGx1KX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihsdS5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2xldCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZihlPT09MClyZXR1cm4gTWF0aC5QSS8yO2xldCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhJZShpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnkscj10aGlzLnotdC56O3JldHVybiBlKmUraSppK3Iqcn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsaSl7bGV0IHI9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXIqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXIqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtsZXQgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1pLHRoaXMuej1yLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLGUqNCl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cyxlKjMpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIGkhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9cmFuZG9tRGlyZWN0aW9uKCl7bGV0IHQ9KE1hdGgucmFuZG9tKCktLjUpKjIsZT1NYXRoLnJhbmRvbSgpKk1hdGguUEkqMixpPU1hdGguc3FydCgxLWNmKHQsMikpO3JldHVybiB0aGlzLng9aSpNYXRoLmNvcyhlKSx0aGlzLnk9aSpNYXRoLnNpbihlKSx0aGlzLno9dCx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56fX07VC5wcm90b3R5cGUuaXNWZWN0b3IzPSEwO3ZhciBsdT1uZXcgVCxyZz1uZXcgRWUsR2U9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgVCgxLzAsMS8wLDEvMCksZT1uZXcgVCgtMS8wLC0xLzAsLTEvMCkpe3RoaXMubWluPXQsdGhpcy5tYXg9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5taW4uY29weSh0KSx0aGlzLm1heC5jb3B5KGUpLHRoaXN9c2V0RnJvbUFycmF5KHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxzPS0xLzAsbz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQubGVuZ3RoO2w8YztsKz0zKXtsZXQgdT10W2xdLGg9dFtsKzFdLGY9dFtsKzJdO3U8ZSYmKGU9dSksaDxpJiYoaT1oKSxmPHImJihyPWYpLHU+cyYmKHM9dSksaD5vJiYobz1oKSxmPmEmJihhPWYpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChzLG8sYSksdGhpc31zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpe2xldCBlPTEvMCxpPTEvMCxyPTEvMCxzPS0xLzAsbz0tMS8wLGE9LTEvMDtmb3IobGV0IGw9MCxjPXQuY291bnQ7bDxjO2wrKyl7bGV0IHU9dC5nZXRYKGwpLGg9dC5nZXRZKGwpLGY9dC5nZXRaKGwpO3U8ZSYmKGU9dSksaDxpJiYoaT1oKSxmPHImJihyPWYpLHU+cyYmKHM9dSksaD5vJiYobz1oKSxmPmEmJihhPWYpfXJldHVybiB0aGlzLm1pbi5zZXQoZSxpLHIpLHRoaXMubWF4LnNldChzLG8sYSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPUlpLmNvcHkoZSkubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihpKSx0aGlzLm1heC5jb3B5KHQpLmFkZChpKSx0aGlzfXNldEZyb21PYmplY3QodCxlPSExKXtyZXR1cm4gdGhpcy5tYWtlRW1wdHkoKSx0aGlzLmV4cGFuZEJ5T2JqZWN0KHQsZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT10aGlzLm1pbi56PTEvMCx0aGlzLm1heC54PXRoaXMubWF4Lnk9dGhpcy5tYXguej0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueXx8dGhpcy5tYXguejx0aGlzLm1pbi56fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwLDApOnQuYWRkVmVjdG9ycyh0aGlzLm1pbix0aGlzLm1heCkubXVsdGlwbHlTY2FsYXIoLjUpfWdldFNpemUodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWV4cGFuZEJ5T2JqZWN0KHQsZT0hMSl7dC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMSk7bGV0IGk9dC5nZW9tZXRyeTtpZihpIT09dm9pZCAwKWlmKGUmJmkuYXR0cmlidXRlcyE9bnVsbCYmaS5hdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwKXtsZXQgcz1pLmF0dHJpYnV0ZXMucG9zaXRpb247Zm9yKGxldCBvPTAsYT1zLmNvdW50O288YTtvKyspSWkuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLG8pLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmV4cGFuZEJ5UG9pbnQoSWkpfWVsc2UgaS5ib3VuZGluZ0JveD09PW51bGwmJmkuY29tcHV0ZUJvdW5kaW5nQm94KCksY3UuY29weShpLmJvdW5kaW5nQm94KSxjdS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbihjdSk7bGV0IHI9dC5jaGlsZHJlbjtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspdGhpcy5leHBhbmRCeU9iamVjdChyW3NdLGUpO3JldHVybiB0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueXx8dC56PHRoaXMubWluLnp8fHQuej50aGlzLm1heC56KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueSYmdGhpcy5taW4uejw9dC5taW4ueiYmdC5tYXguejw9dGhpcy5tYXguen1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpLCh0LnotdGhpcy5taW4ueikvKHRoaXMubWF4LnotdGhpcy5taW4ueikpfWludGVyc2VjdHNCb3godCl7cmV0dXJuISh0Lm1heC54PHRoaXMubWluLnh8fHQubWluLng+dGhpcy5tYXgueHx8dC5tYXgueTx0aGlzLm1pbi55fHx0Lm1pbi55PnRoaXMubWF4Lnl8fHQubWF4Lno8dGhpcy5taW4uenx8dC5taW4uej50aGlzLm1heC56KX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0aGlzLmNsYW1wUG9pbnQodC5jZW50ZXIsSWkpLElpLmRpc3RhbmNlVG9TcXVhcmVkKHQuY2VudGVyKTw9dC5yYWRpdXMqdC5yYWRpdXN9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlLGk7cmV0dXJuIHQubm9ybWFsLng+MD8oZT10Lm5vcm1hbC54KnRoaXMubWluLngsaT10Lm5vcm1hbC54KnRoaXMubWF4LngpOihlPXQubm9ybWFsLngqdGhpcy5tYXgueCxpPXQubm9ybWFsLngqdGhpcy5taW4ueCksdC5ub3JtYWwueT4wPyhlKz10Lm5vcm1hbC55KnRoaXMubWluLnksaSs9dC5ub3JtYWwueSp0aGlzLm1heC55KTooZSs9dC5ub3JtYWwueSp0aGlzLm1heC55LGkrPXQubm9ybWFsLnkqdGhpcy5taW4ueSksdC5ub3JtYWwuej4wPyhlKz10Lm5vcm1hbC56KnRoaXMubWluLnosaSs9dC5ub3JtYWwueip0aGlzLm1heC56KTooZSs9dC5ub3JtYWwueip0aGlzLm1heC56LGkrPXQubm9ybWFsLnoqdGhpcy5taW4ueiksZTw9LXQuY29uc3RhbnQmJmk+PS10LmNvbnN0YW50fWludGVyc2VjdHNUcmlhbmdsZSh0KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4hMTt0aGlzLmdldENlbnRlcihrcyksX2Euc3ViVmVjdG9ycyh0aGlzLm1heCxrcyksbXIuc3ViVmVjdG9ycyh0LmEsa3MpLGdyLnN1YlZlY3RvcnModC5iLGtzKSx4ci5zdWJWZWN0b3JzKHQuYyxrcykscW4uc3ViVmVjdG9ycyhncixtciksWG4uc3ViVmVjdG9ycyh4cixnciksTmkuc3ViVmVjdG9ycyhtcix4cik7bGV0IGU9WzAsLXFuLnoscW4ueSwwLC1Ybi56LFhuLnksMCwtTmkueixOaS55LHFuLnosMCwtcW4ueCxYbi56LDAsLVhuLngsTmkueiwwLC1OaS54LC1xbi55LHFuLngsMCwtWG4ueSxYbi54LDAsLU5pLnksTmkueCwwXTtyZXR1cm4hdXUoZSxtcixncix4cixfYSl8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIXV1KGUsbXIsZ3IseHIsX2EpKT8hMTood2EuY3Jvc3NWZWN0b3JzKHFuLFhuKSxlPVt3YS54LHdhLnksd2Euel0sdXUoZSxtcixncix4cixfYSkpfWNsYW1wUG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIElpLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1nZXRCb3VuZGluZ1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5nZXRDZW50ZXIodC5jZW50ZXIpLHQucmFkaXVzPXRoaXMuZ2V0U2l6ZShJaSkubGVuZ3RoKCkqLjUsdH1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzLmlzRW1wdHkoKSYmdGhpcy5tYWtlRW1wdHkoKSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc31hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXM6KEFuWzBdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzFdLnNldCh0aGlzLm1pbi54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLEFuWzJdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzNdLnNldCh0aGlzLm1pbi54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLEFuWzRdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzVdLnNldCh0aGlzLm1heC54LHRoaXMubWluLnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLEFuWzZdLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5taW4ueikuYXBwbHlNYXRyaXg0KHQpLEFuWzddLnNldCh0aGlzLm1heC54LHRoaXMubWF4LnksdGhpcy5tYXgueikuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0RnJvbVBvaW50cyhBbiksdGhpcyl9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07R2UucHJvdG90eXBlLmlzQm94Mz0hMDt2YXIgQW49W25ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBULG5ldyBUXSxJaT1uZXcgVCxjdT1uZXcgR2UsbXI9bmV3IFQsZ3I9bmV3IFQseHI9bmV3IFQscW49bmV3IFQsWG49bmV3IFQsTmk9bmV3IFQsa3M9bmV3IFQsX2E9bmV3IFQsd2E9bmV3IFQsRmk9bmV3IFQ7ZnVuY3Rpb24gdXUobix0LGUsaSxyKXtmb3IobGV0IHM9MCxvPW4ubGVuZ3RoLTM7czw9bztzKz0zKXtGaS5mcm9tQXJyYXkobixzKTtsZXQgYT1yLngqTWF0aC5hYnMoRmkueCkrci55Kk1hdGguYWJzKEZpLnkpK3IueipNYXRoLmFicyhGaS56KSxsPXQuZG90KEZpKSxjPWUuZG90KEZpKSx1PWkuZG90KEZpKTtpZihNYXRoLm1heCgtTWF0aC5tYXgobCxjLHUpLE1hdGgubWluKGwsYyx1KSk+YSlyZXR1cm4hMX1yZXR1cm4hMH12YXIgck09bmV3IEdlLHNnPW5ldyBULE1hPW5ldyBULGh1PW5ldyBULHNpPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1lfXNldCh0LGUpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPWUsdGhpc31zZXRGcm9tUG9pbnRzKHQsZSl7bGV0IGk9dGhpcy5jZW50ZXI7ZSE9PXZvaWQgMD9pLmNvcHkoZSk6ck0uc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IHM9MCxvPXQubGVuZ3RoO3M8bztzKyspcj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQodFtzXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LGUpe2xldCBpPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiBlLmNvcHkodCksaT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKGUuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxlLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxlfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtodS5zdWJWZWN0b3JzKHQsdGhpcy5jZW50ZXIpO2xldCBlPWh1Lmxlbmd0aFNxKCk7aWYoZT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IGk9TWF0aC5zcXJ0KGUpLHI9KGktdGhpcy5yYWRpdXMpKi41O3RoaXMuY2VudGVyLmFkZChodS5tdWx0aXBseVNjYWxhcihyL2kpKSx0aGlzLnJhZGl1cys9cn1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5jZW50ZXIuZXF1YWxzKHQuY2VudGVyKT09PSEwP01hLnNldCgwLDAsMSkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpOk1hLnN1YlZlY3RvcnModC5jZW50ZXIsdGhpcy5jZW50ZXIpLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKSx0aGlzLmV4cGFuZEJ5UG9pbnQoc2cuY29weSh0LmNlbnRlcikuYWRkKE1hKSksdGhpcy5leHBhbmRCeVBvaW50KHNnLmNvcHkodC5jZW50ZXIpLnN1YihNYSkpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LENuPW5ldyBULGZ1PW5ldyBULGJhPW5ldyBULFluPW5ldyBULGR1PW5ldyBULFNhPW5ldyBULHB1PW5ldyBULG9pPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCgwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShlKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxDbikpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2Uuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgaT1lLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGk8MD9lLmNvcHkodGhpcy5vcmlnaW4pOmUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgZT1Dbi5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGU8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KTooQ24uY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSxDbi5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsaSxyKXtmdS5jb3B5KHQpLmFkZChlKS5tdWx0aXBseVNjYWxhciguNSksYmEuY29weShlKS5zdWIodCkubm9ybWFsaXplKCksWW4uY29weSh0aGlzLm9yaWdpbikuc3ViKGZ1KTtsZXQgcz10LmRpc3RhbmNlVG8oZSkqLjUsbz0tdGhpcy5kaXJlY3Rpb24uZG90KGJhKSxhPVluLmRvdCh0aGlzLmRpcmVjdGlvbiksbD0tWW4uZG90KGJhKSxjPVluLmxlbmd0aFNxKCksdT1NYXRoLmFicygxLW8qbyksaCxmLGQsZztpZih1PjApaWYoaD1vKmwtYSxmPW8qYS1sLGc9cyp1LGg+PTApaWYoZj49LWcpaWYoZjw9Zyl7bGV0IHg9MS91O2gqPXgsZio9eCxkPWgqKGgrbypmKzIqYSkrZioobypoK2YrMipsKStjfWVsc2UgZj1zLGg9TWF0aC5tYXgoMCwtKG8qZithKSksZD0taCpoK2YqKGYrMipsKStjO2Vsc2UgZj0tcyxoPU1hdGgubWF4KDAsLShvKmYrYSkpLGQ9LWgqaCtmKihmKzIqbCkrYztlbHNlIGY8PS1nPyhoPU1hdGgubWF4KDAsLSgtbypzK2EpKSxmPWg+MD8tczpNYXRoLm1pbihNYXRoLm1heCgtcywtbCkscyksZD0taCpoK2YqKGYrMipsKStjKTpmPD1nPyhoPTAsZj1NYXRoLm1pbihNYXRoLm1heCgtcywtbCkscyksZD1mKihmKzIqbCkrYyk6KGg9TWF0aC5tYXgoMCwtKG8qcythKSksZj1oPjA/czpNYXRoLm1pbihNYXRoLm1heCgtcywtbCkscyksZD0taCpoK2YqKGYrMipsKStjKTtlbHNlIGY9bz4wPy1zOnMsaD1NYXRoLm1heCgwLC0obypmK2EpKSxkPS1oKmgrZiooZisyKmwpK2M7cmV0dXJuIGkmJmkuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaCkuYWRkKHRoaXMub3JpZ2luKSxyJiZyLmNvcHkoYmEpLm11bHRpcGx5U2NhbGFyKGYpLmFkZChmdSksZH1pbnRlcnNlY3RTcGhlcmUodCxlKXtDbi5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgaT1Dbi5kb3QodGhpcy5kaXJlY3Rpb24pLHI9Q24uZG90KENuKS1pKmkscz10LnJhZGl1cyp0LnJhZGl1cztpZihyPnMpcmV0dXJuIG51bGw7bGV0IG89TWF0aC5zcXJ0KHMtciksYT1pLW8sbD1pK287cmV0dXJuIGE8MCYmbDwwP251bGw6YTwwP3RoaXMuYXQobCxlKTp0aGlzLmF0KGEsZSl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgZT10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKGU9PT0wKXJldHVybiB0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik9PT0wPzA6bnVsbDtsZXQgaT0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvZTtyZXR1cm4gaT49MD9pOm51bGx9aW50ZXJzZWN0UGxhbmUodCxlKXtsZXQgaT10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gaT09PW51bGw/bnVsbDp0aGlzLmF0KGksZSl9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCBlPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gZT09PTB8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqZTwwfWludGVyc2VjdEJveCh0LGUpe2xldCBpLHIscyxvLGEsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCx1PTEvdGhpcy5kaXJlY3Rpb24ueSxoPTEvdGhpcy5kaXJlY3Rpb24ueixmPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhpPSh0Lm1pbi54LWYueCkqYyxyPSh0Lm1heC54LWYueCkqYyk6KGk9KHQubWF4LngtZi54KSpjLHI9KHQubWluLngtZi54KSpjKSx1Pj0wPyhzPSh0Lm1pbi55LWYueSkqdSxvPSh0Lm1heC55LWYueSkqdSk6KHM9KHQubWF4LnktZi55KSp1LG89KHQubWluLnktZi55KSp1KSxpPm98fHM+cnx8KChzPml8fGkhPT1pKSYmKGk9cyksKG88cnx8ciE9PXIpJiYocj1vKSxoPj0wPyhhPSh0Lm1pbi56LWYueikqaCxsPSh0Lm1heC56LWYueikqaCk6KGE9KHQubWF4LnotZi56KSpoLGw9KHQubWluLnotZi56KSpoKSxpPmx8fGE+cil8fCgoYT5pfHxpIT09aSkmJihpPWEpLChsPHJ8fHIhPT1yKSYmKHI9bCkscjwwKT9udWxsOnRoaXMuYXQoaT49MD9pOnIsZSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3godCxDbikhPT1udWxsfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxpLHIscyl7ZHUuc3ViVmVjdG9ycyhlLHQpLFNhLnN1YlZlY3RvcnMoaSx0KSxwdS5jcm9zc1ZlY3RvcnMoZHUsU2EpO2xldCBvPXRoaXMuZGlyZWN0aW9uLmRvdChwdSksYTtpZihvPjApe2lmKHIpcmV0dXJuIG51bGw7YT0xfWVsc2UgaWYobzwwKWE9LTEsbz0tbztlbHNlIHJldHVybiBudWxsO1luLnN1YlZlY3RvcnModGhpcy5vcmlnaW4sdCk7bGV0IGw9YSp0aGlzLmRpcmVjdGlvbi5kb3QoU2EuY3Jvc3NWZWN0b3JzKFluLFNhKSk7aWYobDwwKXJldHVybiBudWxsO2xldCBjPWEqdGhpcy5kaXJlY3Rpb24uZG90KGR1LmNyb3NzKFluKSk7aWYoYzwwfHxsK2M+bylyZXR1cm4gbnVsbDtsZXQgdT0tYSpZbi5kb3QocHUpO3JldHVybiB1PDA/bnVsbDp0aGlzLmF0KHUvbyxzKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sd3Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxpLHIscyxvLGEsbCxjLHUsaCxmLGQsZyx4LHYpe2xldCBtPXRoaXMuZWxlbWVudHM7cmV0dXJuIG1bMF09dCxtWzRdPWUsbVs4XT1pLG1bMTJdPXIsbVsxXT1zLG1bNV09byxtWzldPWEsbVsxM109bCxtWzJdPWMsbVs2XT11LG1bMTBdPWgsbVsxNF09ZixtWzNdPWQsbVs3XT1nLG1bMTFdPXgsbVsxNV09dix0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHd0KCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7cmV0dXJuIGVbMF09aVswXSxlWzFdPWlbMV0sZVsyXT1pWzJdLGVbM109aVszXSxlWzRdPWlbNF0sZVs1XT1pWzVdLGVbNl09aVs2XSxlWzddPWlbN10sZVs4XT1pWzhdLGVbOV09aVs5XSxlWzEwXT1pWzEwXSxlWzExXT1pWzExXSxlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSxlWzE1XT1pWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVsxMl09aVsxMl0sZVsxM109aVsxM10sZVsxNF09aVsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChlWzBdLGVbM10sZVs2XSwwLGVbMV0sZVs0XSxlWzddLDAsZVsyXSxlWzVdLGVbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLGUuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLGkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQodC54LGUueCxpLngsMCx0LnksZS55LGkueSwwLHQueixlLnosaS56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHMscj0xL3lyLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxzPTEveXIuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLG89MS95ci5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIGVbMF09aVswXSpyLGVbMV09aVsxXSpyLGVbMl09aVsyXSpyLGVbM109MCxlWzRdPWlbNF0qcyxlWzVdPWlbNV0qcyxlWzZdPWlbNl0qcyxlWzddPTAsZVs4XT1pWzhdKm8sZVs5XT1pWzldKm8sZVsxMF09aVsxMF0qbyxlWzExXT0wLGVbMTJdPTAsZVsxM109MCxlWzE0XT0wLGVbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnkscz10Lnosbz1NYXRoLmNvcyhpKSxhPU1hdGguc2luKGkpLGw9TWF0aC5jb3MociksYz1NYXRoLnNpbihyKSx1PU1hdGguY29zKHMpLGg9TWF0aC5zaW4ocyk7aWYodC5vcmRlcj09PSJYWVoiKXtsZXQgZj1vKnUsZD1vKmgsZz1hKnUseD1hKmg7ZVswXT1sKnUsZVs0XT0tbCpoLGVbOF09YyxlWzFdPWQrZypjLGVbNV09Zi14KmMsZVs5XT0tYSpsLGVbMl09eC1mKmMsZVs2XT1nK2QqYyxlWzEwXT1vKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllYWiIpe2xldCBmPWwqdSxkPWwqaCxnPWMqdSx4PWMqaDtlWzBdPWYreCphLGVbNF09ZyphLWQsZVs4XT1vKmMsZVsxXT1vKmgsZVs1XT1vKnUsZVs5XT0tYSxlWzJdPWQqYS1nLGVbNl09eCtmKmEsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJaWFkiKXtsZXQgZj1sKnUsZD1sKmgsZz1jKnUseD1jKmg7ZVswXT1mLXgqYSxlWzRdPS1vKmgsZVs4XT1nK2QqYSxlWzFdPWQrZyphLGVbNV09byp1LGVbOV09eC1mKmEsZVsyXT0tbypjLGVbNl09YSxlWzEwXT1vKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpZWCIpe2xldCBmPW8qdSxkPW8qaCxnPWEqdSx4PWEqaDtlWzBdPWwqdSxlWzRdPWcqYy1kLGVbOF09ZipjK3gsZVsxXT1sKmgsZVs1XT14KmMrZixlWzldPWQqYy1nLGVbMl09LWMsZVs2XT1hKmwsZVsxMF09bypsfWVsc2UgaWYodC5vcmRlcj09PSJZWlgiKXtsZXQgZj1vKmwsZD1vKmMsZz1hKmwseD1hKmM7ZVswXT1sKnUsZVs0XT14LWYqaCxlWzhdPWcqaCtkLGVbMV09aCxlWzVdPW8qdSxlWzldPS1hKnUsZVsyXT0tYyp1LGVbNl09ZCpoK2csZVsxMF09Zi14Kmh9ZWxzZSBpZih0Lm9yZGVyPT09IlhaWSIpe2xldCBmPW8qbCxkPW8qYyxnPWEqbCx4PWEqYztlWzBdPWwqdSxlWzRdPS1oLGVbOF09Yyp1LGVbMV09ZipoK3gsZVs1XT1vKnUsZVs5XT1kKmgtZyxlWzJdPWcqaC1kLGVbNl09YSp1LGVbMTBdPXgqaCtmfXJldHVybiBlWzNdPTAsZVs3XT0wLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2Uoc00sdCxvTSl9bG9va0F0KHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzO3JldHVybiBrZS5zdWJWZWN0b3JzKHQsZSksa2UubGVuZ3RoU3EoKT09PTAmJihrZS56PTEpLGtlLm5vcm1hbGl6ZSgpLFpuLmNyb3NzVmVjdG9ycyhpLGtlKSxabi5sZW5ndGhTcSgpPT09MCYmKE1hdGguYWJzKGkueik9PT0xP2tlLngrPTFlLTQ6a2Uueis9MWUtNCxrZS5ub3JtYWxpemUoKSxabi5jcm9zc1ZlY3RvcnMoaSxrZSkpLFpuLm5vcm1hbGl6ZSgpLEVhLmNyb3NzVmVjdG9ycyhrZSxabiksclswXT1abi54LHJbNF09RWEueCxyWzhdPWtlLngsclsxXT1abi55LHJbNV09RWEueSxyWzldPWtlLnksclsyXT1abi56LHJbNl09RWEueixyWzEwXT1rZS56LHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gZSE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5TWF0cmljZXModCxlKSk6dGhpcy5tdWx0aXBseU1hdHJpY2VzKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHRoaXMpfW11bHRpcGx5TWF0cmljZXModCxlKXtsZXQgaT10LmVsZW1lbnRzLHI9ZS5lbGVtZW50cyxzPXRoaXMuZWxlbWVudHMsbz1pWzBdLGE9aVs0XSxsPWlbOF0sYz1pWzEyXSx1PWlbMV0saD1pWzVdLGY9aVs5XSxkPWlbMTNdLGc9aVsyXSx4PWlbNl0sdj1pWzEwXSxtPWlbMTRdLHA9aVszXSxiPWlbN10sXz1pWzExXSxTPWlbMTVdLEw9clswXSxBPXJbNF0sSD1yWzhdLHR0PXJbMTJdLFg9clsxXSx5PXJbNV0sUj1yWzldLEQ9clsxM10sRj1yWzJdLHo9cls2XSxOPXJbMTBdLFY9clsxNF0sUT1yWzNdLGF0PXJbN10sRz1yWzExXSwkPXJbMTVdO3JldHVybiBzWzBdPW8qTCthKlgrbCpGK2MqUSxzWzRdPW8qQSthKnkrbCp6K2MqYXQsc1s4XT1vKkgrYSpSK2wqTitjKkcsc1sxMl09byp0dCthKkQrbCpWK2MqJCxzWzFdPXUqTCtoKlgrZipGK2QqUSxzWzVdPXUqQStoKnkrZip6K2QqYXQsc1s5XT11KkgraCpSK2YqTitkKkcsc1sxM109dSp0dCtoKkQrZipWK2QqJCxzWzJdPWcqTCt4KlgrdipGK20qUSxzWzZdPWcqQSt4Knkrdip6K20qYXQsc1sxMF09ZypIK3gqUit2Kk4rbSpHLHNbMTRdPWcqdHQreCpEK3YqVittKiQsc1szXT1wKkwrYipYK18qRitTKlEsc1s3XT1wKkErYip5K18qeitTKmF0LHNbMTFdPXAqSCtiKlIrXypOK1MqRyxzWzE1XT1wKnR0K2IqRCtfKlYrUyokLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxzPXRbMTJdLG89dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGg9dFs2XSxmPXRbMTBdLGQ9dFsxNF0sZz10WzNdLHg9dFs3XSx2PXRbMTFdLG09dFsxNV07cmV0dXJuIGcqKCtzKmwqaC1yKmMqaC1zKmEqZitpKmMqZityKmEqZC1pKmwqZCkreCooK2UqbCpkLWUqYypmK3MqbypmLXIqbypkK3IqYyp1LXMqbCp1KSt2KigrZSpjKmgtZSphKmQtcypvKmgraSpvKmQrcyphKnUtaSpjKnUpK20qKC1yKmEqdS1lKmwqaCtlKmEqZityKm8qaC1pKm8qZitpKmwqdSl9dHJhbnNwb3NlKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlO3JldHVybiBlPXRbMV0sdFsxXT10WzRdLHRbNF09ZSxlPXRbMl0sdFsyXT10WzhdLHRbOF09ZSxlPXRbNl0sdFs2XT10WzldLHRbOV09ZSxlPXRbM10sdFszXT10WzEyXSx0WzEyXT1lLGU9dFs3XSx0WzddPXRbMTNdLHRbMTNdPWUsZT10WzExXSx0WzExXT10WzE0XSx0WzE0XT1lLHRoaXN9c2V0UG9zaXRpb24odCxlLGkpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHQuaXNWZWN0b3IzPyhyWzEyXT10LngsclsxM109dC55LHJbMTRdPXQueik6KHJbMTJdPXQsclsxM109ZSxyWzE0XT1pKSx0aGlzfWludmVydCgpe2xldCB0PXRoaXMuZWxlbWVudHMsZT10WzBdLGk9dFsxXSxyPXRbMl0scz10WzNdLG89dFs0XSxhPXRbNV0sbD10WzZdLGM9dFs3XSx1PXRbOF0saD10WzldLGY9dFsxMF0sZD10WzExXSxnPXRbMTJdLHg9dFsxM10sdj10WzE0XSxtPXRbMTVdLHA9aCp2KmMteCpmKmMreCpsKmQtYSp2KmQtaCpsKm0rYSpmKm0sYj1nKmYqYy11KnYqYy1nKmwqZCtvKnYqZCt1KmwqbS1vKmYqbSxfPXUqeCpjLWcqaCpjK2cqYSpkLW8qeCpkLXUqYSptK28qaCptLFM9ZypoKmwtdSp4KmwtZyphKmYrbyp4KmYrdSphKnYtbypoKnYsTD1lKnAraSpiK3IqXytzKlM7aWYoTD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApO2xldCBBPTEvTDtyZXR1cm4gdFswXT1wKkEsdFsxXT0oeCpmKnMtaCp2KnMteCpyKmQraSp2KmQraCpyKm0taSpmKm0pKkEsdFsyXT0oYSp2KnMteCpsKnMreCpyKmMtaSp2KmMtYSpyKm0raSpsKm0pKkEsdFszXT0oaCpsKnMtYSpmKnMtaCpyKmMraSpmKmMrYSpyKmQtaSpsKmQpKkEsdFs0XT1iKkEsdFs1XT0odSp2KnMtZypmKnMrZypyKmQtZSp2KmQtdSpyKm0rZSpmKm0pKkEsdFs2XT0oZypsKnMtbyp2KnMtZypyKmMrZSp2KmMrbypyKm0tZSpsKm0pKkEsdFs3XT0obypmKnMtdSpsKnMrdSpyKmMtZSpmKmMtbypyKmQrZSpsKmQpKkEsdFs4XT1fKkEsdFs5XT0oZypoKnMtdSp4KnMtZyppKmQrZSp4KmQrdSppKm0tZSpoKm0pKkEsdFsxMF09KG8qeCpzLWcqYSpzK2cqaSpjLWUqeCpjLW8qaSptK2UqYSptKSpBLHRbMTFdPSh1KmEqcy1vKmgqcy11KmkqYytlKmgqYytvKmkqZC1lKmEqZCkqQSx0WzEyXT1TKkEsdFsxM109KHUqeCpyLWcqaCpyK2cqaSpmLWUqeCpmLXUqaSp2K2UqaCp2KSpBLHRbMTRdPShnKmEqci1vKngqci1nKmkqbCtlKngqbCtvKmkqdi1lKmEqdikqQSx0WzE1XT0obypoKnItdSphKnIrdSppKmwtZSpoKmwtbyppKmYrZSphKmYpKkEsdGhpc31zY2FsZSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC54LHI9dC55LHM9dC56O3JldHVybiBlWzBdKj1pLGVbNF0qPXIsZVs4XSo9cyxlWzFdKj1pLGVbNV0qPXIsZVs5XSo9cyxlWzJdKj1pLGVbNl0qPXIsZVsxMF0qPXMsZVszXSo9aSxlWzddKj1yLGVbMTFdKj1zLHRoaXN9Z2V0TWF4U2NhbGVPbkF4aXMoKXtsZXQgdD10aGlzLmVsZW1lbnRzLGU9dFswXSp0WzBdK3RbMV0qdFsxXSt0WzJdKnRbMl0saT10WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSxyPXRbOF0qdFs4XSt0WzldKnRbOV0rdFsxMF0qdFsxMF07cmV0dXJuIE1hdGguc3FydChNYXRoLm1heChlLGkscikpfW1ha2VUcmFuc2xhdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLHQsMCwxLDAsZSwwLDAsMSxpLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWCh0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDAsZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25ZKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KGUsMCxpLDAsMCwxLDAsMCwtaSwwLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbloodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwtaSwwLDAsaSxlLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uQXhpcyh0LGUpe2xldCBpPU1hdGguY29zKGUpLHI9TWF0aC5zaW4oZSkscz0xLWksbz10LngsYT10LnksbD10LnosYz1zKm8sdT1zKmE7cmV0dXJuIHRoaXMuc2V0KGMqbytpLGMqYS1yKmwsYypsK3IqYSwwLGMqYStyKmwsdSphK2ksdSpsLXIqbywwLGMqbC1yKmEsdSpsK3IqbyxzKmwqbCtpLDAsMCwwLDAsMSksdGhpc31tYWtlU2NhbGUodCxlLGkpe3JldHVybiB0aGlzLnNldCh0LDAsMCwwLDAsZSwwLDAsMCwwLGksMCwwLDAsMCwxKSx0aGlzfW1ha2VTaGVhcih0LGUsaSxyLHMsbyl7cmV0dXJuIHRoaXMuc2V0KDEsaSxzLDAsdCwxLG8sMCxlLHIsMSwwLDAsMCwwLDEpLHRoaXN9Y29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxzPWUuX3gsbz1lLl95LGE9ZS5feixsPWUuX3csYz1zK3MsdT1vK28saD1hK2EsZj1zKmMsZD1zKnUsZz1zKmgseD1vKnUsdj1vKmgsbT1hKmgscD1sKmMsYj1sKnUsXz1sKmgsUz1pLngsTD1pLnksQT1pLno7cmV0dXJuIHJbMF09KDEtKHgrbSkpKlMsclsxXT0oZCtfKSpTLHJbMl09KGctYikqUyxyWzNdPTAscls0XT0oZC1fKSpMLHJbNV09KDEtKGYrbSkpKkwscls2XT0oditwKSpMLHJbN109MCxyWzhdPShnK2IpKkEscls5XT0odi1wKSpBLHJbMTBdPSgxLShmK3gpKSpBLHJbMTFdPTAsclsxMl09dC54LHJbMTNdPXQueSxyWzE0XT10LnosclsxNV09MSx0aGlzfWRlY29tcG9zZSh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cyxzPXlyLnNldChyWzBdLHJbMV0sclsyXSkubGVuZ3RoKCksbz15ci5zZXQocls0XSxyWzVdLHJbNl0pLmxlbmd0aCgpLGE9eXIuc2V0KHJbOF0scls5XSxyWzEwXSkubGVuZ3RoKCk7dGhpcy5kZXRlcm1pbmFudCgpPDAmJihzPS1zKSx0Lng9clsxMl0sdC55PXJbMTNdLHQuej1yWzE0XSxLZS5jb3B5KHRoaXMpO2xldCBjPTEvcyx1PTEvbyxoPTEvYTtyZXR1cm4gS2UuZWxlbWVudHNbMF0qPWMsS2UuZWxlbWVudHNbMV0qPWMsS2UuZWxlbWVudHNbMl0qPWMsS2UuZWxlbWVudHNbNF0qPXUsS2UuZWxlbWVudHNbNV0qPXUsS2UuZWxlbWVudHNbNl0qPXUsS2UuZWxlbWVudHNbOF0qPWgsS2UuZWxlbWVudHNbOV0qPWgsS2UuZWxlbWVudHNbMTBdKj1oLGUuc2V0RnJvbVJvdGF0aW9uTWF0cml4KEtlKSxpLng9cyxpLnk9byxpLno9YSx0aGlzfW1ha2VQZXJzcGVjdGl2ZSh0LGUsaSxyLHMsbyl7bz09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZVBlcnNwZWN0aXZlKCkgaGFzIGJlZW4gcmVkZWZpbmVkIGFuZCBoYXMgYSBuZXcgc2lnbmF0dXJlLiBQbGVhc2UgY2hlY2sgdGhlIGRvY3MuIik7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTIqcy8oZS10KSxjPTIqcy8oaS1yKSx1PShlK3QpLyhlLXQpLGg9KGkrcikvKGktciksZj0tKG8rcykvKG8tcyksZD0tMipvKnMvKG8tcyk7cmV0dXJuIGFbMF09bCxhWzRdPTAsYVs4XT11LGFbMTJdPTAsYVsxXT0wLGFbNV09YyxhWzldPWgsYVsxM109MCxhWzJdPTAsYVs2XT0wLGFbMTBdPWYsYVsxNF09ZCxhWzNdPTAsYVs3XT0wLGFbMTFdPS0xLGFbMTVdPTAsdGhpc31tYWtlT3J0aG9ncmFwaGljKHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLmVsZW1lbnRzLGw9MS8oZS10KSxjPTEvKGktciksdT0xLyhvLXMpLGg9KGUrdCkqbCxmPShpK3IpKmMsZD0obytzKSp1O3JldHVybiBhWzBdPTIqbCxhWzRdPTAsYVs4XT0wLGFbMTJdPS1oLGFbMV09MCxhWzVdPTIqYyxhWzldPTAsYVsxM109LWYsYVsyXT0wLGFbNl09MCxhWzEwXT0tMip1LGFbMTRdPS1kLGFbM109MCxhWzddPTAsYVsxMV09MCxhWzE1XT0xLHRoaXN9ZXF1YWxzKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO2ZvcihsZXQgcj0wO3I8MTY7cisrKWlmKGVbcl0hPT1pW3JdKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LGU9MCl7Zm9yKGxldCBpPTA7aTwxNjtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHRbZSs5XT1pWzldLHRbZSsxMF09aVsxMF0sdFtlKzExXT1pWzExXSx0W2UrMTJdPWlbMTJdLHRbZSsxM109aVsxM10sdFtlKzE0XT1pWzE0XSx0W2UrMTVdPWlbMTVdLHR9fTt3dC5wcm90b3R5cGUuaXNNYXRyaXg0PSEwO3ZhciB5cj1uZXcgVCxLZT1uZXcgd3Qsc009bmV3IFQoMCwwLDApLG9NPW5ldyBUKDEsMSwxKSxabj1uZXcgVCxFYT1uZXcgVCxrZT1uZXcgVCxvZz1uZXcgd3QsYWc9bmV3IEVlLGFpPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wLHI9YWkuRGVmYXVsdE9yZGVyKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yfWdldCB4KCl7cmV0dXJuIHRoaXMuX3h9c2V0IHgodCl7dGhpcy5feD10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeSgpe3JldHVybiB0aGlzLl95fXNldCB5KHQpe3RoaXMuX3k9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHooKXtyZXR1cm4gdGhpcy5fen1zZXQgeih0KXt0aGlzLl96PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCBvcmRlcigpe3JldHVybiB0aGlzLl9vcmRlcn1zZXQgb3JkZXIodCl7dGhpcy5fb3JkZXI9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl9vcmRlcj1yLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX29yZGVyKX1jb3B5KHQpe3JldHVybiB0aGlzLl94PXQuX3gsdGhpcy5feT10Ll95LHRoaXMuX3o9dC5feix0aGlzLl9vcmRlcj10Ll9vcmRlcix0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCxlPXRoaXMuX29yZGVyLGk9ITApe2xldCByPXQuZWxlbWVudHMscz1yWzBdLG89cls0XSxhPXJbOF0sbD1yWzFdLGM9cls1XSx1PXJbOV0saD1yWzJdLGY9cls2XSxkPXJbMTBdO3N3aXRjaChlKXtjYXNlIlhZWiI6dGhpcy5feT1NYXRoLmFzaW4oSWUoYSwtMSwxKSksTWF0aC5hYnMoYSk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxkKSx0aGlzLl96PU1hdGguYXRhbjIoLW8scykpOih0aGlzLl94PU1hdGguYXRhbjIoZixjKSx0aGlzLl96PTApO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PU1hdGguYXNpbigtSWUodSwtMSwxKSksTWF0aC5hYnModSk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMihhLGQpLHRoaXMuX3o9TWF0aC5hdGFuMihsLGMpKToodGhpcy5feT1NYXRoLmF0YW4yKC1oLHMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9TWF0aC5hc2luKEllKGYsLTEsMSkpLE1hdGguYWJzKGYpPC45OTk5OTk5Pyh0aGlzLl95PU1hdGguYXRhbjIoLWgsZCksdGhpcy5fej1NYXRoLmF0YW4yKC1vLGMpKToodGhpcy5feT0wLHRoaXMuX3o9TWF0aC5hdGFuMihsLHMpKTticmVhaztjYXNlIlpZWCI6dGhpcy5feT1NYXRoLmFzaW4oLUllKGgsLTEsMSkpLE1hdGguYWJzKGgpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZixkKSx0aGlzLl96PU1hdGguYXRhbjIobCxzKSk6KHRoaXMuX3g9MCx0aGlzLl96PU1hdGguYXRhbjIoLW8sYykpO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl96PU1hdGguYXNpbihJZShsLC0xLDEpKSxNYXRoLmFicyhsKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGMpLHRoaXMuX3k9TWF0aC5hdGFuMigtaCxzKSk6KHRoaXMuX3g9MCx0aGlzLl95PU1hdGguYXRhbjIoYSxkKSk7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3o9TWF0aC5hc2luKC1JZShvLC0xLDEpKSxNYXRoLmFicyhvKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKGYsYyksdGhpcy5feT1NYXRoLmF0YW4yKGEscykpOih0aGlzLl94PU1hdGguYXRhbjIoLXUsZCksdGhpcy5feT0wKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuRXVsZXI6IC5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2UpfXJldHVybiB0aGlzLl9vcmRlcj1lLGk9PT0hMCYmdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbVF1YXRlcm5pb24odCxlLGkpe3JldHVybiBvZy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeChvZyxlLGkpfXNldEZyb21WZWN0b3IzKHQsZT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuc2V0KHQueCx0LnksdC56LGUpfXJlb3JkZXIodCl7cmV0dXJuIGFnLnNldEZyb21FdWxlcih0aGlzKSx0aGlzLnNldEZyb21RdWF0ZXJuaW9uKGFnLHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHRbM10hPT12b2lkIDAmJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IFQodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTthaS5wcm90b3R5cGUuaXNFdWxlcj0hMDthaS5EZWZhdWx0T3JkZXI9IlhZWiI7YWkuUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTt2YXIgaWw9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPSgxPDx0fDApPj4+MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybih0aGlzLm1hc2smdC5tYXNrKSE9PTB9aXNFbmFibGVkKHQpe3JldHVybih0aGlzLm1hc2smKDE8PHR8MCkpIT09MH19LGFNPTAsbGc9bmV3IFQsdnI9bmV3IEVlLFJuPW5ldyB3dCxUYT1uZXcgVCxIcz1uZXcgVCxsTT1uZXcgVCxjTT1uZXcgRWUsY2c9bmV3IFQoMSwwLDApLHVnPW5ldyBUKDAsMSwwKSxoZz1uZXcgVCgwLDAsMSksdU09e3R5cGU6ImFkZGVkIn0sZmc9e3R5cGU6InJlbW92ZWQifSxrdD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTphTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPWt0LkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBULGU9bmV3IGFpLGk9bmV3IEVlLHI9bmV3IFQoMSwxLDEpO2Z1bmN0aW9uIHMoKXtpLnNldEZyb21FdWxlcihlLCExKX1mdW5jdGlvbiBvKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9ZS5fb25DaGFuZ2UocyksaS5fb25DaGFuZ2UobyksT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7cG9zaXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnR9LHJvdGF0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTplfSxxdWF0ZXJuaW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTppfSxzY2FsZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0sbW9kZWxWaWV3TWF0cml4Ont2YWx1ZTpuZXcgd3R9LG5vcm1hbE1hdHJpeDp7dmFsdWU6bmV3IGRlfX0pLHRoaXMubWF0cml4PW5ldyB3dCx0aGlzLm1hdHJpeFdvcmxkPW5ldyB3dCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9a3QuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHRoaXMubGF5ZXJzPW5ldyBpbCx0aGlzLnZpc2libGU9ITAsdGhpcy5jYXN0U2hhZG93PSExLHRoaXMucmVjZWl2ZVNoYWRvdz0hMSx0aGlzLmZydXN0dW1DdWxsZWQ9ITAsdGhpcy5yZW5kZXJPcmRlcj0wLHRoaXMuYW5pbWF0aW9ucz1bXSx0aGlzLnVzZXJEYXRhPXt9fW9uQmVmb3JlUmVuZGVyKCl7fW9uQWZ0ZXJSZW5kZXIoKXt9YXBwbHlNYXRyaXg0KHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLm1hdHJpeC5wcmVtdWx0aXBseSh0KSx0aGlzLm1hdHJpeC5kZWNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSl9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkodCksdGhpc31zZXRSb3RhdGlvbkZyb21BeGlzQW5nbGUodCxlKXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0LGUpfXNldFJvdGF0aW9uRnJvbUV1bGVyKHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIodCwhMCl9c2V0Um90YXRpb25Gcm9tTWF0cml4KHQpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgodCl9c2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbih0KXt0aGlzLnF1YXRlcm5pb24uY29weSh0KX1yb3RhdGVPbkF4aXModCxlKXtyZXR1cm4gdnIuc2V0RnJvbUF4aXNBbmdsZSh0LGUpLHRoaXMucXVhdGVybmlvbi5tdWx0aXBseSh2ciksdGhpc31yb3RhdGVPbldvcmxkQXhpcyh0LGUpe3JldHVybiB2ci5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHZyKSx0aGlzfXJvdGF0ZVgodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGNnLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHVnLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKGhnLHQpfXRyYW5zbGF0ZU9uQXhpcyh0LGUpe3JldHVybiBsZy5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKGxnLm11bHRpcGx5U2NhbGFyKGUpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGNnLHQpfXRyYW5zbGF0ZVkodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHVnLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKGhnLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChSbi5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxlLGkpe3QuaXNWZWN0b3IzP1RhLmNvcHkodCk6VGEuc2V0KHQsZSxpKTtsZXQgcj10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxIcy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCksdGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P1JuLmxvb2tBdChIcyxUYSx0aGlzLnVwKTpSbi5sb29rQXQoVGEsSHMsdGhpcy51cCksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChSbiksciYmKFJuLmV4dHJhY3RSb3RhdGlvbihyLm1hdHJpeFdvcmxkKSx2ci5zZXRGcm9tUm90YXRpb25NYXRyaXgoUm4pLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh2ci5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdGhpcy5hZGQoYXJndW1lbnRzW2VdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8odC5wYXJlbnQhPT1udWxsJiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KHVNKSk6Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0QuYWRkOiBvYmplY3Qgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLk9iamVjdDNELiIsdCksdGhpcyl9cmVtb3ZlKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSl7Zm9yKGxldCBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl0aGlzLnJlbW92ZShhcmd1bWVudHNbaV0pO3JldHVybiB0aGlzfWxldCBlPXRoaXMuY2hpbGRyZW4uaW5kZXhPZih0KTtyZXR1cm4gZSE9PS0xJiYodC5wYXJlbnQ9bnVsbCx0aGlzLmNoaWxkcmVuLnNwbGljZShlLDEpLHQuZGlzcGF0Y2hFdmVudChmZykpLHRoaXN9cmVtb3ZlRnJvbVBhcmVudCgpe2xldCB0PXRoaXMucGFyZW50O3JldHVybiB0IT09bnVsbCYmdC5yZW1vdmUodGhpcyksdGhpc31jbGVhcigpe2ZvcihsZXQgdD0wO3Q8dGhpcy5jaGlsZHJlbi5sZW5ndGg7dCsrKXtsZXQgZT10aGlzLmNoaWxkcmVuW3RdO2UucGFyZW50PW51bGwsZS5kaXNwYXRjaEV2ZW50KGZnKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksUm4uY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSx0LnBhcmVudCE9PW51bGwmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksUm4ubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChSbiksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IG89dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gb319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShIcyx0LGxNKSx0fWdldFdvcmxkU2NhbGUodCl7cmV0dXJuIHRoaXMudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4V29ybGQuZGVjb21wb3NlKEhzLGNNLHQpLHR9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoZVs4XSxlWzldLGVbMTBdKS5ub3JtYWxpemUoKX1yYXljYXN0KCl7fXRyYXZlcnNlKHQpe3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZSh0KX10cmF2ZXJzZVZpc2libGUodCl7aWYodGhpcy52aXNpYmxlPT09ITEpcmV0dXJuO3QodGhpcyk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS50cmF2ZXJzZVZpc2libGUodCl9dHJhdmVyc2VBbmNlc3RvcnModCl7bGV0IGU9dGhpcy5wYXJlbnQ7ZSE9PW51bGwmJih0KGUpLGUudHJhdmVyc2VBbmNlc3RvcnModCkpfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LmNvbXBvc2UodGhpcy5wb3NpdGlvbix0aGlzLnF1YXRlcm5pb24sdGhpcy5zY2FsZSksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3RoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSwodGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlfHx0KSYmKHRoaXMucGFyZW50PT09bnVsbD90aGlzLm1hdHJpeFdvcmxkLmNvcHkodGhpcy5tYXRyaXgpOnRoaXMubWF0cml4V29ybGQubXVsdGlwbHlNYXRyaWNlcyh0aGlzLnBhcmVudC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeCksdGhpcy5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSExLHQ9ITApO2xldCBlPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpPHI7aSsrKWVbaV0udXBkYXRlTWF0cml4V29ybGQodCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtsZXQgaT10aGlzLnBhcmVudDtpZih0PT09ITAmJmkhPT1udWxsJiZpLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5wYXJlbnQ9PT1udWxsP3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSxlPT09ITApe2xldCByPXRoaXMuY2hpbGRyZW47Zm9yKGxldCBzPTAsbz1yLmxlbmd0aDtzPG87cysrKXJbc10udXBkYXRlV29ybGRNYXRyaXgoITEsITApfX10b0pTT04odCl7bGV0IGU9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciLGk9e307ZSYmKHQ9e2dlb21ldHJpZXM6e30sbWF0ZXJpYWxzOnt9LHRleHR1cmVzOnt9LGltYWdlczp7fSxzaGFwZXM6e30sc2tlbGV0b25zOnt9LGFuaW1hdGlvbnM6e319LGkubWV0YWRhdGE9e3ZlcnNpb246NC41LHR5cGU6Ik9iamVjdCIsZ2VuZXJhdG9yOiJPYmplY3QzRC50b0pTT04ifSk7bGV0IHI9e307ci51dWlkPXRoaXMudXVpZCxyLnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYoci5uYW1lPXRoaXMubmFtZSksdGhpcy5jYXN0U2hhZG93PT09ITAmJihyLmNhc3RTaGFkb3c9ITApLHRoaXMucmVjZWl2ZVNoYWRvdz09PSEwJiYoci5yZWNlaXZlU2hhZG93PSEwKSx0aGlzLnZpc2libGU9PT0hMSYmKHIudmlzaWJsZT0hMSksdGhpcy5mcnVzdHVtQ3VsbGVkPT09ITEmJihyLmZydXN0dW1DdWxsZWQ9ITEpLHRoaXMucmVuZGVyT3JkZXIhPT0wJiYoci5yZW5kZXJPcmRlcj10aGlzLnJlbmRlck9yZGVyKSxKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSE9PSJ7fSImJihyLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHIubGF5ZXJzPXRoaXMubGF5ZXJzLm1hc2ssci5tYXRyaXg9dGhpcy5tYXRyaXgudG9BcnJheSgpLHRoaXMubWF0cml4QXV0b1VwZGF0ZT09PSExJiYoci5tYXRyaXhBdXRvVXBkYXRlPSExKSx0aGlzLmlzSW5zdGFuY2VkTWVzaCYmKHIudHlwZT0iSW5zdGFuY2VkTWVzaCIsci5jb3VudD10aGlzLmNvdW50LHIuaW5zdGFuY2VNYXRyaXg9dGhpcy5pbnN0YW5jZU1hdHJpeC50b0pTT04oKSx0aGlzLmluc3RhbmNlQ29sb3IhPT1udWxsJiYoci5pbnN0YW5jZUNvbG9yPXRoaXMuaW5zdGFuY2VDb2xvci50b0pTT04oKSkpO2Z1bmN0aW9uIHMoYSxsKXtyZXR1cm4gYVtsLnV1aWRdPT09dm9pZCAwJiYoYVtsLnV1aWRdPWwudG9KU09OKHQpKSxsLnV1aWR9aWYodGhpcy5pc1NjZW5lKXRoaXMuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZC5pc0NvbG9yP3IuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKCk6dGhpcy5iYWNrZ3JvdW5kLmlzVGV4dHVyZSYmKHIuYmFja2dyb3VuZD10aGlzLmJhY2tncm91bmQudG9KU09OKHQpLnV1aWQpKSx0aGlzLmVudmlyb25tZW50JiZ0aGlzLmVudmlyb25tZW50LmlzVGV4dHVyZSYmKHIuZW52aXJvbm1lbnQ9dGhpcy5lbnZpcm9ubWVudC50b0pTT04odCkudXVpZCk7ZWxzZSBpZih0aGlzLmlzTWVzaHx8dGhpcy5pc0xpbmV8fHRoaXMuaXNQb2ludHMpe3IuZ2VvbWV0cnk9cyh0Lmdlb21ldHJpZXMsdGhpcy5nZW9tZXRyeSk7bGV0IGE9dGhpcy5nZW9tZXRyeS5wYXJhbWV0ZXJzO2lmKGEhPT12b2lkIDAmJmEuc2hhcGVzIT09dm9pZCAwKXtsZXQgbD1hLnNoYXBlcztpZihBcnJheS5pc0FycmF5KGwpKWZvcihsZXQgYz0wLHU9bC5sZW5ndGg7Yzx1O2MrKyl7bGV0IGg9bFtjXTtzKHQuc2hhcGVzLGgpfWVsc2Ugcyh0LnNoYXBlcyxsKX19aWYodGhpcy5pc1NraW5uZWRNZXNoJiYoci5iaW5kTW9kZT10aGlzLmJpbmRNb2RlLHIuYmluZE1hdHJpeD10aGlzLmJpbmRNYXRyaXgudG9BcnJheSgpLHRoaXMuc2tlbGV0b24hPT12b2lkIDAmJihzKHQuc2tlbGV0b25zLHRoaXMuc2tlbGV0b24pLHIuc2tlbGV0b249dGhpcy5za2VsZXRvbi51dWlkKSksdGhpcy5tYXRlcmlhbCE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KHRoaXMubWF0ZXJpYWwpKXtsZXQgYT1bXTtmb3IobGV0IGw9MCxjPXRoaXMubWF0ZXJpYWwubGVuZ3RoO2w8YztsKyspYS5wdXNoKHModC5tYXRlcmlhbHMsdGhpcy5tYXRlcmlhbFtsXSkpO3IubWF0ZXJpYWw9YX1lbHNlIHIubWF0ZXJpYWw9cyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsKTtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD4wKXtyLmNoaWxkcmVuPVtdO2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHJlbi5sZW5ndGg7YSsrKXIuY2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2FdLnRvSlNPTih0KS5vYmplY3QpfWlmKHRoaXMuYW5pbWF0aW9ucy5sZW5ndGg+MCl7ci5hbmltYXRpb25zPVtdO2ZvcihsZXQgYT0wO2E8dGhpcy5hbmltYXRpb25zLmxlbmd0aDthKyspe2xldCBsPXRoaXMuYW5pbWF0aW9uc1thXTtyLmFuaW1hdGlvbnMucHVzaChzKHQuYW5pbWF0aW9ucyxsKSl9fWlmKGUpe2xldCBhPW8odC5nZW9tZXRyaWVzKSxsPW8odC5tYXRlcmlhbHMpLGM9byh0LnRleHR1cmVzKSx1PW8odC5pbWFnZXMpLGg9byh0LnNoYXBlcyksZj1vKHQuc2tlbGV0b25zKSxkPW8odC5hbmltYXRpb25zKTthLmxlbmd0aD4wJiYoaS5nZW9tZXRyaWVzPWEpLGwubGVuZ3RoPjAmJihpLm1hdGVyaWFscz1sKSxjLmxlbmd0aD4wJiYoaS50ZXh0dXJlcz1jKSx1Lmxlbmd0aD4wJiYoaS5pbWFnZXM9dSksaC5sZW5ndGg+MCYmKGkuc2hhcGVzPWgpLGYubGVuZ3RoPjAmJihpLnNrZWxldG9ucz1mKSxkLmxlbmd0aD4wJiYoaS5hbmltYXRpb25zPWQpfXJldHVybiBpLm9iamVjdD1yLGk7ZnVuY3Rpb24gbyhhKXtsZXQgbD1bXTtmb3IobGV0IGMgaW4gYSl7bGV0IHU9YVtjXTtkZWxldGUgdS5tZXRhZGF0YSxsLnB1c2godSl9cmV0dXJuIGx9fWNsb25lKHQpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLGU9PT0hMClmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl7bGV0IHI9dC5jaGlsZHJlbltpXTt0aGlzLmFkZChyLmNsb25lKCkpfXJldHVybiB0aGlzfX07a3QuRGVmYXVsdFVwPW5ldyBUKDAsMSwwKTtrdC5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZT0hMDtrdC5wcm90b3R5cGUuaXNPYmplY3QzRD0hMDt2YXIgUWU9bmV3IFQsTG49bmV3IFQsbXU9bmV3IFQsUG49bmV3IFQsX3I9bmV3IFQsd3I9bmV3IFQsZGc9bmV3IFQsZ3U9bmV3IFQseHU9bmV3IFQseXU9bmV3IFQscmU9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBULGk9bmV3IFQpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1pfXN0YXRpYyBnZXROb3JtYWwodCxlLGkscil7ci5zdWJWZWN0b3JzKGksZSksUWUuc3ViVmVjdG9ycyh0LGUpLHIuY3Jvc3MoUWUpO2xldCBzPXIubGVuZ3RoU3EoKTtyZXR1cm4gcz4wP3IubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQocykpOnIuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQsZSxpLHIscyl7UWUuc3ViVmVjdG9ycyhyLGUpLExuLnN1YlZlY3RvcnMoaSxlKSxtdS5zdWJWZWN0b3JzKHQsZSk7bGV0IG89UWUuZG90KFFlKSxhPVFlLmRvdChMbiksbD1RZS5kb3QobXUpLGM9TG4uZG90KExuKSx1PUxuLmRvdChtdSksaD1vKmMtYSphO2lmKGg9PT0wKXJldHVybiBzLnNldCgtMiwtMSwtMSk7bGV0IGY9MS9oLGQ9KGMqbC1hKnUpKmYsZz0obyp1LWEqbCkqZjtyZXR1cm4gcy5zZXQoMS1kLWcsZyxkKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscixQbiksUG4ueD49MCYmUG4ueT49MCYmUG4ueCtQbi55PD0xfXN0YXRpYyBnZXRVVih0LGUsaSxyLHMsbyxhLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLFBuKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKHMsUG4ueCksbC5hZGRTY2FsZWRWZWN0b3IobyxQbi55KSxsLmFkZFNjYWxlZFZlY3RvcihhLFBuLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLGkscil7cmV0dXJuIFFlLnN1YlZlY3RvcnMoaSxlKSxMbi5zdWJWZWN0b3JzKHQsZSksUWUuY3Jvc3MoTG4pLmRvdChyKTwwfXNldCh0LGUsaSl7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KGkpLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbaV0pLHRoaXMuYy5jb3B5KHRbcl0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYS5jb3B5KHQuYSksdGhpcy5iLmNvcHkodC5iKSx0aGlzLmMuY29weSh0LmMpLHRoaXN9Z2V0QXJlYSgpe3JldHVybiBRZS5zdWJWZWN0b3JzKHRoaXMuYyx0aGlzLmIpLExuLnN1YlZlY3RvcnModGhpcy5hLHRoaXMuYiksUWUuY3Jvc3MoTG4pLmxlbmd0aCgpKi41fWdldE1pZHBvaW50KHQpe3JldHVybiB0LmFkZFZlY3RvcnModGhpcy5hLHRoaXMuYikuYWRkKHRoaXMuYykubXVsdGlwbHlTY2FsYXIoMS8zKX1nZXROb3JtYWwodCl7cmV0dXJuIHJlLmdldE5vcm1hbCh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1nZXRQbGFuZSh0KXtyZXR1cm4gdC5zZXRGcm9tQ29wbGFuYXJQb2ludHModGhpcy5hLHRoaXMuYix0aGlzLmMpfWdldEJhcnljb29yZCh0LGUpe3JldHVybiByZS5nZXRCYXJ5Y29vcmQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxlKX1nZXRVVih0LGUsaSxyLHMpe3JldHVybiByZS5nZXRVVih0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUsaSxyLHMpfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHJlLmNvbnRhaW5zUG9pbnQodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyl9aXNGcm9udEZhY2luZyh0KXtyZXR1cm4gcmUuaXNGcm9udEZhY2luZyh0aGlzLmEsdGhpcy5iLHRoaXMuYyx0KX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNUcmlhbmdsZSh0aGlzKX1jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSl7bGV0IGk9dGhpcy5hLHI9dGhpcy5iLHM9dGhpcy5jLG8sYTtfci5zdWJWZWN0b3JzKHIsaSksd3Iuc3ViVmVjdG9ycyhzLGkpLGd1LnN1YlZlY3RvcnModCxpKTtsZXQgbD1fci5kb3QoZ3UpLGM9d3IuZG90KGd1KTtpZihsPD0wJiZjPD0wKXJldHVybiBlLmNvcHkoaSk7eHUuc3ViVmVjdG9ycyh0LHIpO2xldCB1PV9yLmRvdCh4dSksaD13ci5kb3QoeHUpO2lmKHU+PTAmJmg8PXUpcmV0dXJuIGUuY29weShyKTtsZXQgZj1sKmgtdSpjO2lmKGY8PTAmJmw+PTAmJnU8PTApcmV0dXJuIG89bC8obC11KSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKF9yLG8pO3l1LnN1YlZlY3RvcnModCxzKTtsZXQgZD1fci5kb3QoeXUpLGc9d3IuZG90KHl1KTtpZihnPj0wJiZkPD1nKXJldHVybiBlLmNvcHkocyk7bGV0IHg9ZCpjLWwqZztpZih4PD0wJiZjPj0wJiZnPD0wKXJldHVybiBhPWMvKGMtZyksZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3Rvcih3cixhKTtsZXQgdj11KmctZCpoO2lmKHY8PTAmJmgtdT49MCYmZC1nPj0wKXJldHVybiBkZy5zdWJWZWN0b3JzKHMsciksYT0oaC11KS8oaC11KyhkLWcpKSxlLmNvcHkocikuYWRkU2NhbGVkVmVjdG9yKGRnLGEpO2xldCBtPTEvKHYreCtmKTtyZXR1cm4gbz14Km0sYT1mKm0sZS5jb3B5KGkpLmFkZFNjYWxlZFZlY3RvcihfcixvKS5hZGRTY2FsZWRWZWN0b3Iod3IsYSl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX0saE09MCx4ZT1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpoTSsrfSksdGhpcy51dWlkPXRuKCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iTWF0ZXJpYWwiLHRoaXMuZm9nPSEwLHRoaXMuYmxlbmRpbmc9S3MsdGhpcy5zaWRlPWVvLHRoaXMudmVydGV4Q29sb3JzPSExLHRoaXMub3BhY2l0eT0xLHRoaXMudHJhbnNwYXJlbnQ9ITEsdGhpcy5ibGVuZFNyYz11MCx0aGlzLmJsZW5kRHN0PWgwLHRoaXMuYmxlbmRFcXVhdGlvbj1Jcix0aGlzLmJsZW5kU3JjQWxwaGE9bnVsbCx0aGlzLmJsZW5kRHN0QWxwaGE9bnVsbCx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT1udWxsLHRoaXMuZGVwdGhGdW5jPXp1LHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9dE0sdGhpcy5zdGVuY2lsUmVmPTAsdGhpcy5zdGVuY2lsRnVuY01hc2s9MjU1LHRoaXMuc3RlbmNpbEZhaWw9bnUsdGhpcy5zdGVuY2lsWkZhaWw9bnUsdGhpcy5zdGVuY2lsWlBhc3M9bnUsdGhpcy5zdGVuY2lsV3JpdGU9ITEsdGhpcy5jbGlwcGluZ1BsYW5lcz1udWxsLHRoaXMuY2xpcEludGVyc2VjdGlvbj0hMSx0aGlzLmNsaXBTaGFkb3dzPSExLHRoaXMuc2hhZG93U2lkZT1udWxsLHRoaXMuY29sb3JXcml0ZT0hMCx0aGlzLmFscGhhV3JpdGU9ITAsdGhpcy5wcmVjaXNpb249bnVsbCx0aGlzLnBvbHlnb25PZmZzZXQ9ITEsdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yPTAsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9MCx0aGlzLmRpdGhlcmluZz0hMSx0aGlzLmFscGhhVG9Db3ZlcmFnZT0hMSx0aGlzLnByZW11bHRpcGxpZWRBbHBoYT0hMSx0aGlzLnZpc2libGU9ITAsdGhpcy50b25lTWFwcGVkPSEwLHRoaXMudXNlckRhdGE9e30sdGhpcy52ZXJzaW9uPTAsdGhpcy5fYWxwaGFUZXN0PTB9Z2V0IGFscGhhVGVzdCgpe3JldHVybiB0aGlzLl9hbHBoYVRlc3R9c2V0IGFscGhhVGVzdCh0KXt0aGlzLl9hbHBoYVRlc3Q+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9hbHBoYVRlc3Q9dH1vbkJ1aWxkKCl7fW9uQmVmb3JlUmVuZGVyKCl7fW9uQmVmb3JlQ29tcGlsZSgpe31jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKXtyZXR1cm4gdGhpcy5vbkJlZm9yZUNvbXBpbGUudG9TdHJpbmcoKX1zZXRWYWx1ZXModCl7aWYodCE9PXZvaWQgMClmb3IobGV0IGUgaW4gdCl7bGV0IGk9dFtlXTtpZihpPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAnIitlKyInIHBhcmFtZXRlciBpcyB1bmRlZmluZWQuIik7Y29udGludWV9aWYoZT09PSJzaGFkaW5nIil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz1pPT09YzA7Y29udGludWV9bGV0IHI9dGhpc1tlXTtpZihyPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKTtjb250aW51ZX1yJiZyLmlzQ29sb3I/ci5zZXQoaSk6ciYmci5pc1ZlY3RvcjMmJmkmJmkuaXNWZWN0b3IzP3IuY29weShpKTp0aGlzW2VdPWl9fXRvSlNPTih0KXtsZXQgZT10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7ZSYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBpPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O2kudXVpZD10aGlzLnV1aWQsaS50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKGkubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKGkuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdGhpcy5yb3VnaG5lc3MhPT12b2lkIDAmJihpLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdGhpcy5tZXRhbG5lc3MhPT12b2lkIDAmJihpLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdGhpcy5zaGVlbiE9PXZvaWQgMCYmKGkuc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKGkuc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hlZW5Sb3VnaG5lc3MhPT12b2lkIDAmJihpLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKGkuZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmdGhpcy5lbWlzc2l2ZUludGVuc2l0eSE9PTEmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKGkuc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdGhpcy5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKGkuc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hpbmluZXNzIT09dm9pZCAwJiYoaS5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHRoaXMuY2xlYXJjb2F0IT09dm9pZCAwJiYoaS5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKGkubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYoaS5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYoaS5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKGkubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxpLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYoaS5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLGkuYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYoaS5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxpLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKGkubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLGkubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsaS5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKGkuZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLGkuZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxpLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihpLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihpLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKGkuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKGkuZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHRoaXMuY29tYmluZSE9PXZvaWQgMCYmKGkuY29tYmluZT10aGlzLmNvbWJpbmUpKSx0aGlzLmVudk1hcEludGVuc2l0eSE9PXZvaWQgMCYmKGkuZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx0aGlzLnJlZmxlY3Rpdml0eSE9PXZvaWQgMCYmKGkucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx0aGlzLnJlZnJhY3Rpb25SYXRpbyE9PXZvaWQgMCYmKGkucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKGkuZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdGhpcy50cmFuc21pc3Npb24hPT12b2lkIDAmJihpLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKGkudHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRoaWNrbmVzcyE9PXZvaWQgMCYmKGkudGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYoaS50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHRoaXMuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmKGkuYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2l6ZSE9PXZvaWQgMCYmKGkuc2l6ZT10aGlzLnNpemUpLHRoaXMuc2hhZG93U2lkZSE9PW51bGwmJihpLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx0aGlzLnNpemVBdHRlbnVhdGlvbiE9PXZvaWQgMCYmKGkuc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSx0aGlzLmJsZW5kaW5nIT09S3MmJihpLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLHRoaXMuc2lkZSE9PWVvJiYoaS5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihpLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihpLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSx0aGlzLnRyYW5zcGFyZW50PT09ITAmJihpLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLGkuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLGkuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LGkuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsaS5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxpLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLGkuc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLGkuc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssaS5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLGkuc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsaS5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssaS5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLGkuc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLGkuc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJnRoaXMucm90YXRpb24hPT0wJiYoaS5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSx0aGlzLnBvbHlnb25PZmZzZXQ9PT0hMCYmKGkucG9seWdvbk9mZnNldD0hMCksdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yIT09MCYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLHRoaXMucG9seWdvbk9mZnNldFVuaXRzIT09MCYmKGkucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmdGhpcy5saW5ld2lkdGghPT0xJiYoaS5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHRoaXMuZGFzaFNpemUhPT12b2lkIDAmJihpLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHRoaXMuZ2FwU2l6ZSE9PXZvaWQgMCYmKGkuZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHRoaXMuc2NhbGUhPT12b2lkIDAmJihpLnNjYWxlPXRoaXMuc2NhbGUpLHRoaXMuZGl0aGVyaW5nPT09ITAmJihpLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKGkuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSx0aGlzLmFscGhhVG9Db3ZlcmFnZT09PSEwJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPT09ITAmJihpLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksdGhpcy53aXJlZnJhbWU9PT0hMCYmKGkud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLHRoaXMud2lyZWZyYW1lTGluZWNhcCE9PSJyb3VuZCImJihpLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSx0aGlzLndpcmVmcmFtZUxpbmVqb2luIT09InJvdW5kIiYmKGkud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksdGhpcy5mbGF0U2hhZGluZz09PSEwJiYoaS5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSx0aGlzLnZpc2libGU9PT0hMSYmKGkudmlzaWJsZT0hMSksdGhpcy50b25lTWFwcGVkPT09ITEmJihpLnRvbmVNYXBwZWQ9ITEpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSk7ZnVuY3Rpb24gcihzKXtsZXQgbz1bXTtmb3IobGV0IGEgaW4gcyl7bGV0IGw9c1thXTtkZWxldGUgbC5tZXRhZGF0YSxvLnB1c2gobCl9cmV0dXJuIG99aWYoZSl7bGV0IHM9cih0LnRleHR1cmVzKSxvPXIodC5pbWFnZXMpO3MubGVuZ3RoPjAmJihpLnRleHR1cmVzPXMpLG8ubGVuZ3RoPjAmJihpLmltYWdlcz1vKX1yZXR1cm4gaX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgZT10LmNsaXBwaW5nUGxhbmVzLGk9bnVsbDtpZihlIT09bnVsbCl7bGV0IHI9ZS5sZW5ndGg7aT1uZXcgQXJyYXkocik7Zm9yKGxldCBzPTA7cyE9PXI7KytzKWlbc109ZVtzXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPWksdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK319O3hlLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBraT1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9Q2wsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07a2kucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7dmFyIEp0PW5ldyBULEFhPW5ldyBLLFF0PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD10IT09dm9pZCAwP3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9aT09PSEwLHRoaXMudXNhZ2U9aW8sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAscz10aGlzLml0ZW1TaXplO3I8cztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgZnQpLGVbaSsrXT1vLnIsZVtpKytdPW8uZyxlW2krK109by5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgSyksZVtpKytdPW8ueCxlW2krK109by55fXJldHVybiB0aGlzfWNvcHlWZWN0b3Izc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLHM9dC5sZW5ndGg7cjxzO3IrKyl7bGV0IG89dFtyXTtvPT09dm9pZCAwJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjNzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIsciksbz1uZXcgVCksZVtpKytdPW8ueCxlW2krK109by55LGVbaSsrXT1vLnp9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjRzQXJyYXkodCl7bGV0IGU9dGhpcy5hcnJheSxpPTA7Zm9yKGxldCByPTAscz10Lmxlbmd0aDtyPHM7cisrKXtsZXQgbz10W3JdO289PT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yNHNBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixyKSxvPW5ldyBXdCksZVtpKytdPW8ueCxlW2krK109by55LGVbaSsrXT1vLnosZVtpKytdPW8ud31yZXR1cm4gdGhpc31hcHBseU1hdHJpeDModCl7aWYodGhpcy5pdGVtU2l6ZT09PTIpZm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspQWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLEFhLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZKGUsQWEueCxBYS55KTtlbHNlIGlmKHRoaXMuaXRlbVNpemU9PT0zKWZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0LmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcyxlKSxKdC5hcHBseU1hdHJpeDModCksdGhpcy5zZXRYWVooZSxKdC54LEp0LnksSnQueik7cmV0dXJuIHRoaXN9YXBwbHlNYXRyaXg0KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUp0Lng9dGhpcy5nZXRYKGUpLEp0Lnk9dGhpcy5nZXRZKGUpLEp0Lno9dGhpcy5nZXRaKGUpLEp0LmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylKdC54PXRoaXMuZ2V0WChlKSxKdC55PXRoaXMuZ2V0WShlKSxKdC56PXRoaXMuZ2V0WihlKSxKdC5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLEp0LngsSnQueSxKdC56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspSnQueD10aGlzLmdldFgoZSksSnQueT10aGlzLmdldFkoZSksSnQuej10aGlzLmdldFooZSksSnQudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsSnQueCxKdC55LEp0LnopO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV19c2V0WCh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZV09ZSx0aGlzfWdldFkodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzFdfXNldFkodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV09ZSx0aGlzfWdldFoodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzJdfXNldFoodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl09ZSx0aGlzfWdldFcodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplKzNdfXNldFcodCxlKXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM109ZSx0aGlzfXNldFhZKHQsZSxpKXtyZXR1cm4gdCo9dGhpcy5pdGVtU2l6ZSx0aGlzLmFycmF5W3QrMF09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxyKXtyZXR1cm4gdCo9dGhpcy5pdGVtU2l6ZSx0aGlzLmFycmF5W3QrMF09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixzKXtyZXR1cm4gdCo9dGhpcy5pdGVtU2l6ZSx0aGlzLmFycmF5W3QrMF09ZSx0aGlzLmFycmF5W3QrMV09aSx0aGlzLmFycmF5W3QrMl09cix0aGlzLmFycmF5W3QrM109cyx0aGlzfW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYXJyYXksdGhpcy5pdGVtU2l6ZSkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLmFycmF5KSxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH07cmV0dXJuIHRoaXMubmFtZSE9PSIiJiYodC5uYW1lPXRoaXMubmFtZSksdGhpcy51c2FnZSE9PWlvJiYodC51c2FnZT10aGlzLnVzYWdlKSwodGhpcy51cGRhdGVSYW5nZS5vZmZzZXQhPT0wfHx0aGlzLnVwZGF0ZVJhbmdlLmNvdW50IT09LTEpJiYodC51cGRhdGVSYW5nZT10aGlzLnVwZGF0ZVJhbmdlKSx0fX07UXQucHJvdG90eXBlLmlzQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBybD1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19O3ZhciBzbD1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCksZSxpKX19LFd1PWNsYXNzIGV4dGVuZHMgUXR7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxlLGkpfX07V3UucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgZWU9Y2xhc3MgZXh0ZW5kcyBRdHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IEZsb2F0MzJBcnJheSh0KSxlLGkpfX07dmFyIGZNPTAscWU9bmV3IHd0LHZ1PW5ldyBrdCxNcj1uZXcgVCxIZT1uZXcgR2UsVnM9bmV3IEdlLGdlPW5ldyBULEh0PWNsYXNzIGV4dGVuZHMgSW57Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOmZNKyt9KSx0aGlzLnV1aWQ9dG4oKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPSExLHRoaXMuZ3JvdXBzPVtdLHRoaXMuYm91bmRpbmdCb3g9bnVsbCx0aGlzLmJvdW5kaW5nU3BoZXJlPW51bGwsdGhpcy5kcmF3UmFuZ2U9e3N0YXJ0OjAsY291bnQ6MS8wfSx0aGlzLnVzZXJEYXRhPXt9fWdldEluZGV4KCl7cmV0dXJuIHRoaXMuaW5kZXh9c2V0SW5kZXgodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dGhpcy5pbmRleD1uZXcocDAodCk/c2w6cmwpKHQsMSk6dGhpcy5pbmRleD10LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1lLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF0hPT12b2lkIDB9YWRkR3JvdXAodCxlLGk9MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDplLG1hdGVyaWFsSW5kZXg6aX0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQsZSl7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1lfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247ZSE9PXZvaWQgMCYmKGUuYXBwbHlNYXRyaXg0KHQpLGUubmVlZHNVcGRhdGU9ITApO2xldCBpPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYoaSE9PXZvaWQgMCl7bGV0IHM9bmV3IGRlKCkuZ2V0Tm9ybWFsTWF0cml4KHQpO2kuYXBwbHlOb3JtYWxNYXRyaXgocyksaS5uZWVkc1VwZGF0ZT0hMH1sZXQgcj10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gciE9PXZvaWQgMCYmKHIudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHIubmVlZHNVcGRhdGU9ITApLHRoaXMuYm91bmRpbmdCb3ghPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdTcGhlcmUhPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31yb3RhdGVYKHQpe3JldHVybiBxZS5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIHFlLm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQocWUpLHRoaXN9cm90YXRlWih0KXtyZXR1cm4gcWUubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc310cmFuc2xhdGUodCxlLGkpe3JldHVybiBxZS5tYWtlVHJhbnNsYXRpb24odCxlLGkpLHRoaXMuYXBwbHlNYXRyaXg0KHFlKSx0aGlzfXNjYWxlKHQsZSxpKXtyZXR1cm4gcWUubWFrZVNjYWxlKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChxZSksdGhpc31sb29rQXQodCl7cmV0dXJuIHZ1Lmxvb2tBdCh0KSx2dS51cGRhdGVNYXRyaXgoKSx0aGlzLmFwcGx5TWF0cml4NCh2dS5tYXRyaXgpLHRoaXN9Y2VudGVyKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoTXIpLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKE1yLngsTXIueSxNci56KSx0aGlzfXNldEZyb21Qb2ludHModCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKXtsZXQgcz10W2ldO2UucHVzaChzLngscy55LHMuenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGUsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7dGhpcy5ib3VuZGluZ0JveD09PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PW5ldyBHZSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IFQoLTEvMCwtMS8wLC0xLzApLG5ldyBUKDEvMCwxLzAsMS8wKSk7cmV0dXJufWlmKHQhPT12b2lkIDApe2lmKHRoaXMuYm91bmRpbmdCb3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxlKWZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyl7bGV0IHM9ZVtpXTtIZS5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHMpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KGdlLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sSGUubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoZ2UpLGdlLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsSGUubWF4KSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoZ2UpKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEhlLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KEhlLm1heCkpfX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7dGhpcy5ib3VuZGluZ1NwaGVyZT09PW51bGwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBzaSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IFQsMS8wKTtyZXR1cm59aWYodCl7bGV0IGk9dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7aWYoSGUuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxlKWZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7bGV0IGE9ZVtzXTtWcy5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKGEpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KGdlLmFkZFZlY3RvcnMoSGUubWluLFZzLm1pbiksSGUuZXhwYW5kQnlQb2ludChnZSksZ2UuYWRkVmVjdG9ycyhIZS5tYXgsVnMubWF4KSxIZS5leHBhbmRCeVBvaW50KGdlKSk6KEhlLmV4cGFuZEJ5UG9pbnQoVnMubWluKSxIZS5leHBhbmRCeVBvaW50KFZzLm1heCkpfUhlLmdldENlbnRlcihpKTtsZXQgcj0wO2ZvcihsZXQgcz0wLG89dC5jb3VudDtzPG87cysrKWdlLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxzKSxyPU1hdGgubWF4KHIsaS5kaXN0YW5jZVRvU3F1YXJlZChnZSkpO2lmKGUpZm9yKGxldCBzPTAsbz1lLmxlbmd0aDtzPG87cysrKXtsZXQgYT1lW3NdLGw9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtmb3IobGV0IGM9MCx1PWEuY291bnQ7Yzx1O2MrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYyksbCYmKE1yLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxjKSxnZS5hZGQoTXIpKSxyPU1hdGgubWF4KHIsaS5kaXN0YW5jZVRvU3F1YXJlZChnZSkpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChyKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX1jb21wdXRlVGFuZ2VudHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5hdHRyaWJ1dGVzO2lmKHQ9PT1udWxsfHxlLnBvc2l0aW9uPT09dm9pZCAwfHxlLm5vcm1hbD09PXZvaWQgMHx8ZS51dj09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7cmV0dXJufWxldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LHM9ZS5ub3JtYWwuYXJyYXksbz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMztlLnRhbmdlbnQ9PT12b2lkIDAmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgUXQobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgWD0wO1g8YTtYKyspY1tYXT1uZXcgVCx1W1hdPW5ldyBUO2xldCBoPW5ldyBULGY9bmV3IFQsZD1uZXcgVCxnPW5ldyBLLHg9bmV3IEssdj1uZXcgSyxtPW5ldyBULHA9bmV3IFQ7ZnVuY3Rpb24gYihYLHksUil7aC5mcm9tQXJyYXkocixYKjMpLGYuZnJvbUFycmF5KHIseSozKSxkLmZyb21BcnJheShyLFIqMyksZy5mcm9tQXJyYXkobyxYKjIpLHguZnJvbUFycmF5KG8seSoyKSx2LmZyb21BcnJheShvLFIqMiksZi5zdWIoaCksZC5zdWIoaCkseC5zdWIoZyksdi5zdWIoZyk7bGV0IEQ9MS8oeC54KnYueS12LngqeC55KTshaXNGaW5pdGUoRCl8fChtLmNvcHkoZikubXVsdGlwbHlTY2FsYXIodi55KS5hZGRTY2FsZWRWZWN0b3IoZCwteC55KS5tdWx0aXBseVNjYWxhcihEKSxwLmNvcHkoZCkubXVsdGlwbHlTY2FsYXIoeC54KS5hZGRTY2FsZWRWZWN0b3IoZiwtdi54KS5tdWx0aXBseVNjYWxhcihEKSxjW1hdLmFkZChtKSxjW3ldLmFkZChtKSxjW1JdLmFkZChtKSx1W1hdLmFkZChwKSx1W3ldLmFkZChwKSx1W1JdLmFkZChwKSl9bGV0IF89dGhpcy5ncm91cHM7Xy5sZW5ndGg9PT0wJiYoXz1be3N0YXJ0OjAsY291bnQ6aS5sZW5ndGh9XSk7Zm9yKGxldCBYPTAseT1fLmxlbmd0aDtYPHk7KytYKXtsZXQgUj1fW1hdLEQ9Ui5zdGFydCxGPVIuY291bnQ7Zm9yKGxldCB6PUQsTj1EK0Y7ejxOO3orPTMpYihpW3orMF0saVt6KzFdLGlbeisyXSl9bGV0IFM9bmV3IFQsTD1uZXcgVCxBPW5ldyBULEg9bmV3IFQ7ZnVuY3Rpb24gdHQoWCl7QS5mcm9tQXJyYXkocyxYKjMpLEguY29weShBKTtsZXQgeT1jW1hdO1MuY29weSh5KSxTLnN1YihBLm11bHRpcGx5U2NhbGFyKEEuZG90KHkpKSkubm9ybWFsaXplKCksTC5jcm9zc1ZlY3RvcnMoSCx5KTtsZXQgRD1MLmRvdCh1W1hdKTwwPy0xOjE7bFtYKjRdPVMueCxsW1gqNCsxXT1TLnksbFtYKjQrMl09Uy56LGxbWCo0KzNdPUR9Zm9yKGxldCBYPTAseT1fLmxlbmd0aDtYPHk7KytYKXtsZXQgUj1fW1hdLEQ9Ui5zdGFydCxGPVIuY291bnQ7Zm9yKGxldCB6PUQsTj1EK0Y7ejxOO3orPTMpdHQoaVt6KzBdKSx0dChpW3orMV0pLHR0KGlbeisyXSl9fWNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl7bGV0IHQ9dGhpcy5pbmRleCxlPXRoaXMuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2lmKGUhPT12b2lkIDApe2xldCBpPXRoaXMuZ2V0QXR0cmlidXRlKCJub3JtYWwiKTtpZihpPT09dm9pZCAwKWk9bmV3IFF0KG5ldyBGbG9hdDMyQXJyYXkoZS5jb3VudCozKSwzKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixpKTtlbHNlIGZvcihsZXQgZj0wLGQ9aS5jb3VudDtmPGQ7ZisrKWkuc2V0WFlaKGYsMCwwLDApO2xldCByPW5ldyBULHM9bmV3IFQsbz1uZXcgVCxhPW5ldyBULGw9bmV3IFQsYz1uZXcgVCx1PW5ldyBULGg9bmV3IFQ7aWYodClmb3IobGV0IGY9MCxkPXQuY291bnQ7ZjxkO2YrPTMpe2xldCBnPXQuZ2V0WChmKzApLHg9dC5nZXRYKGYrMSksdj10LmdldFgoZisyKTtyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxnKSxzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx4KSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx2KSx1LnN1YlZlY3RvcnMobyxzKSxoLnN1YlZlY3RvcnMocixzKSx1LmNyb3NzKGgpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLGcpLGwuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHgpLGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHYpLGEuYWRkKHUpLGwuYWRkKHUpLGMuYWRkKHUpLGkuc2V0WFlaKGcsYS54LGEueSxhLnopLGkuc2V0WFlaKHgsbC54LGwueSxsLnopLGkuc2V0WFlaKHYsYy54LGMueSxjLnopfWVsc2UgZm9yKGxldCBmPTAsZD1lLmNvdW50O2Y8ZDtmKz0zKXIuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLGYrMCkscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZisxKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxmKzIpLHUuc3ViVmVjdG9ycyhvLHMpLGguc3ViVmVjdG9ycyhyLHMpLHUuY3Jvc3MoaCksaS5zZXRYWVooZiswLHUueCx1LnksdS56KSxpLnNldFhZWihmKzEsdS54LHUueSx1LnopLGkuc2V0WFlaKGYrMix1LngsdS55LHUueik7dGhpcy5ub3JtYWxpemVOb3JtYWxzKCksaS5uZWVkc1VwZGF0ZT0hMH19bWVyZ2UodCxlKXtpZighKHQmJnQuaXNCdWZmZXJHZW9tZXRyeSkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IGdlb21ldHJ5IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5CdWZmZXJHZW9tZXRyeS4iLHQpO3JldHVybn1lPT09dm9pZCAwJiYoZT0wLGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogT3ZlcndyaXRpbmcgb3JpZ2luYWwgZ2VvbWV0cnksIHN0YXJ0aW5nIGF0IG9mZnNldD0wLiBVc2UgQnVmZmVyR2VvbWV0cnlVdGlscy5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoKSBmb3IgbG9zc2xlc3MgbWVyZ2UuIikpO2xldCBpPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IHIgaW4gaSl7aWYodC5hdHRyaWJ1dGVzW3JdPT09dm9pZCAwKWNvbnRpbnVlO2xldCBvPWlbcl0uYXJyYXksYT10LmF0dHJpYnV0ZXNbcl0sbD1hLmFycmF5LGM9YS5pdGVtU2l6ZSplLHU9TWF0aC5taW4obC5sZW5ndGgsby5sZW5ndGgtYyk7Zm9yKGxldCBoPTAsZj1jO2g8dTtoKyssZisrKW9bZl09bFtoXX1yZXR1cm4gdGhpc31ub3JtYWxpemVOb3JtYWxzKCl7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLm5vcm1hbDtmb3IobGV0IGU9MCxpPXQuY291bnQ7ZTxpO2UrKylnZS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksZ2Uubm9ybWFsaXplKCksdC5zZXRYWVooZSxnZS54LGdlLnksZ2Uueil9dG9Ob25JbmRleGVkKCl7ZnVuY3Rpb24gdChhLGwpe2xldCBjPWEuYXJyYXksdT1hLml0ZW1TaXplLGg9YS5ub3JtYWxpemVkLGY9bmV3IGMuY29uc3RydWN0b3IobC5sZW5ndGgqdSksZD0wLGc9MDtmb3IobGV0IHg9MCx2PWwubGVuZ3RoO3g8djt4Kyspe2EuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT9kPWxbeF0qYS5kYXRhLnN0cmlkZSthLm9mZnNldDpkPWxbeF0qdTtmb3IobGV0IG09MDttPHU7bSsrKWZbZysrXT1jW2QrK119cmV0dXJuIG5ldyBRdChmLHUsaCl9aWYodGhpcy5pbmRleD09PW51bGwpcmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkudG9Ob25JbmRleGVkKCk6IEJ1ZmZlckdlb21ldHJ5IGlzIGFscmVhZHkgbm9uLWluZGV4ZWQuIiksdGhpcztsZXQgZT1uZXcgSHQsaT10aGlzLmluZGV4LmFycmF5LHI9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiByKXtsZXQgbD1yW2FdLGM9dChsLGkpO2Uuc2V0QXR0cmlidXRlKGEsYyl9bGV0IHM9dGhpcy5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBhIGluIHMpe2xldCBsPVtdLGM9c1thXTtmb3IobGV0IHU9MCxoPWMubGVuZ3RoO3U8aDt1Kyspe2xldCBmPWNbdV0sZD10KGYsaSk7bC5wdXNoKGQpfWUubW9ycGhBdHRyaWJ1dGVzW2FdPWx9ZS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBvPXRoaXMuZ3JvdXBzO2ZvcihsZXQgYT0wLGw9by5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9b1thXTtlLmFkZEdyb3VwKGMuc3RhcnQsYy5jb3VudCxjLm1hdGVyaWFsSW5kZXgpfXJldHVybiBlfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2lmKHQudXVpZD10aGlzLnV1aWQsdC50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKHQubmFtZT10aGlzLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYodC51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSx0aGlzLnBhcmFtZXRlcnMhPT12b2lkIDApe2xldCBsPXRoaXMucGFyYW1ldGVycztmb3IobGV0IGMgaW4gbClsW2NdIT09dm9pZCAwJiYodFtjXT1sW2NdKTtyZXR1cm4gdH10LmRhdGE9e2F0dHJpYnV0ZXM6e319O2xldCBlPXRoaXMuaW5kZXg7ZSE9PW51bGwmJih0LmRhdGEuaW5kZXg9e3R5cGU6ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYXJyYXkpfSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbCBpbiBpKXtsZXQgYz1pW2xdO3QuZGF0YS5hdHRyaWJ1dGVzW2xdPWMudG9KU09OKHQuZGF0YSl9bGV0IHI9e30scz0hMTtmb3IobGV0IGwgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2xldCBjPXRoaXMubW9ycGhBdHRyaWJ1dGVzW2xdLHU9W107Zm9yKGxldCBoPTAsZj1jLmxlbmd0aDtoPGY7aCsrKXtsZXQgZD1jW2hdO3UucHVzaChkLnRvSlNPTih0LmRhdGEpKX11Lmxlbmd0aD4wJiYocltsXT11LHM9ITApfXMmJih0LmRhdGEubW9ycGhBdHRyaWJ1dGVzPXIsdC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpO2xldCBvPXRoaXMuZ3JvdXBzO28ubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobykpKTtsZXQgYT10aGlzLmJvdW5kaW5nU3BoZXJlO3JldHVybiBhIT09bnVsbCYmKHQuZGF0YS5ib3VuZGluZ1NwaGVyZT17Y2VudGVyOmEuY2VudGVyLnRvQXJyYXkoKSxyYWRpdXM6YS5yYWRpdXN9KSx0fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMuaW5kZXg9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9e30sdGhpcy5tb3JwaEF0dHJpYnV0ZXM9e30sdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbDtsZXQgZT17fTt0aGlzLm5hbWU9dC5uYW1lO2xldCBpPXQuaW5kZXg7aSE9PW51bGwmJnRoaXMuc2V0SW5kZXgoaS5jbG9uZShlKSk7bGV0IHI9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgYyBpbiByKXtsZXQgdT1yW2NdO3RoaXMuc2V0QXR0cmlidXRlKGMsdS5jbG9uZShlKSl9bGV0IHM9dC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIHMpe2xldCB1PVtdLGg9c1tjXTtmb3IobGV0IGY9MCxkPWgubGVuZ3RoO2Y8ZDtmKyspdS5wdXNoKGhbZl0uY2xvbmUoZSkpO3RoaXMubW9ycGhBdHRyaWJ1dGVzW2NdPXV9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT10Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBvPXQuZ3JvdXBzO2ZvcihsZXQgYz0wLHU9by5sZW5ndGg7Yzx1O2MrKyl7bGV0IGg9b1tjXTt0aGlzLmFkZEdyb3VwKGguc3RhcnQsaC5jb3VudCxoLm1hdGVyaWFsSW5kZXgpfWxldCBhPXQuYm91bmRpbmdCb3g7YSE9PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PWEuY2xvbmUoKSk7bGV0IGw9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gbCE9PW51bGwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPWwuY2xvbmUoKSksdGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dC5kcmF3UmFuZ2Uuc3RhcnQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9dC5kcmF3UmFuZ2UuY291bnQsdGhpcy51c2VyRGF0YT10LnVzZXJEYXRhLHQucGFyYW1ldGVycyE9PXZvaWQgMCYmKHRoaXMucGFyYW1ldGVycz1PYmplY3QuYXNzaWduKHt9LHQucGFyYW1ldGVycykpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19O0h0LnByb3RvdHlwZS5pc0J1ZmZlckdlb21ldHJ5PSEwO3ZhciBwZz1uZXcgd3QsYnI9bmV3IG9pLF91PW5ldyBzaSxKbj1uZXcgVCwkbj1uZXcgVCxLbj1uZXcgVCx3dT1uZXcgVCxNdT1uZXcgVCxidT1uZXcgVCxDYT1uZXcgVCxSYT1uZXcgVCxMYT1uZXcgVCxQYT1uZXcgSyxEYT1uZXcgSyxJYT1uZXcgSyxTdT1uZXcgVCxOYT1uZXcgVCxvZT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQ9bmV3IEh0LGU9bmV3IGtpKXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaCIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdC5tb3JwaFRhcmdldEluZmx1ZW5jZXMhPT12b2lkIDAmJih0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5zbGljZSgpKSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSE9PXZvaWQgMCYmKHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PU9iamVjdC5hc3NpZ24oe30sdC5tb3JwaFRhcmdldERpY3Rpb25hcnkpKSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCBlPXQubW9ycGhBdHRyaWJ1dGVzLGk9T2JqZWN0LmtleXMoZSk7aWYoaS5sZW5ndGg+MCl7bGV0IHI9ZVtpWzBdXTtpZihyIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IHM9MCxvPXIubGVuZ3RoO3M8bztzKyspe2xldCBhPXJbc10ubmFtZXx8U3RyaW5nKHMpO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbYV09c319fX1lbHNle2xldCBlPXQubW9ycGhUYXJnZXRzO2UhPT12b2lkIDAmJmUubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gudXBkYXRlTW9ycGhUYXJnZXRzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdGVyaWFsLHM9dGhpcy5tYXRyaXhXb3JsZDtpZihyPT09dm9pZCAwfHwoaS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksX3UuY29weShpLmJvdW5kaW5nU3BoZXJlKSxfdS5hcHBseU1hdHJpeDQocyksdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShfdSk9PT0hMSl8fChwZy5jb3B5KHMpLmludmVydCgpLGJyLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChwZyksaS5ib3VuZGluZ0JveCE9PW51bGwmJmJyLmludGVyc2VjdHNCb3goaS5ib3VuZGluZ0JveCk9PT0hMSkpcmV0dXJuO2xldCBvO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGE9aS5pbmRleCxsPWkuYXR0cmlidXRlcy5wb3NpdGlvbixjPWkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLHU9aS5tb3JwaFRhcmdldHNSZWxhdGl2ZSxoPWkuYXR0cmlidXRlcy51dixmPWkuYXR0cmlidXRlcy51djIsZD1pLmdyb3VwcyxnPWkuZHJhd1JhbmdlO2lmKGEhPT1udWxsKWlmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCB4PTAsdj1kLmxlbmd0aDt4PHY7eCsrKXtsZXQgbT1kW3hdLHA9clttLm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgobS5zdGFydCxnLnN0YXJ0KSxfPU1hdGgubWluKGEuY291bnQsTWF0aC5taW4obS5zdGFydCttLmNvdW50LGcuc3RhcnQrZy5jb3VudCkpO2ZvcihsZXQgUz1iLEw9XztTPEw7Uys9Myl7bGV0IEE9YS5nZXRYKFMpLEg9YS5nZXRYKFMrMSksdHQ9YS5nZXRYKFMrMik7bz1GYSh0aGlzLHAsdCxicixsLGMsdSxoLGYsQSxILHR0KSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihTLzMpLG8uZmFjZS5tYXRlcmlhbEluZGV4PW0ubWF0ZXJpYWxJbmRleCxlLnB1c2gobykpfX1lbHNle2xldCB4PU1hdGgubWF4KDAsZy5zdGFydCksdj1NYXRoLm1pbihhLmNvdW50LGcuc3RhcnQrZy5jb3VudCk7Zm9yKGxldCBtPXgscD12O208cDttKz0zKXtsZXQgYj1hLmdldFgobSksXz1hLmdldFgobSsxKSxTPWEuZ2V0WChtKzIpO289RmEodGhpcyxyLHQsYnIsbCxjLHUsaCxmLGIsXyxTKSxvJiYoby5mYWNlSW5kZXg9TWF0aC5mbG9vcihtLzMpLGUucHVzaChvKSl9fWVsc2UgaWYobCE9PXZvaWQgMClpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgeD0wLHY9ZC5sZW5ndGg7eDx2O3grKyl7bGV0IG09ZFt4XSxwPXJbbS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KG0uc3RhcnQsZy5zdGFydCksXz1NYXRoLm1pbihsLmNvdW50LE1hdGgubWluKG0uc3RhcnQrbS5jb3VudCxnLnN0YXJ0K2cuY291bnQpKTtmb3IobGV0IFM9YixMPV87UzxMO1MrPTMpe2xldCBBPVMsSD1TKzEsdHQ9UysyO289RmEodGhpcyxwLHQsYnIsbCxjLHUsaCxmLEEsSCx0dCksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IoUy8zKSxvLmZhY2UubWF0ZXJpYWxJbmRleD1tLm1hdGVyaWFsSW5kZXgsZS5wdXNoKG8pKX19ZWxzZXtsZXQgeD1NYXRoLm1heCgwLGcuc3RhcnQpLHY9TWF0aC5taW4obC5jb3VudCxnLnN0YXJ0K2cuY291bnQpO2ZvcihsZXQgbT14LHA9djttPHA7bSs9Myl7bGV0IGI9bSxfPW0rMSxTPW0rMjtvPUZhKHRoaXMscix0LGJyLGwsYyx1LGgsZixiLF8sUyksbyYmKG8uZmFjZUluZGV4PU1hdGguZmxvb3IobS8zKSxlLnB1c2gobykpfX19ZWxzZSBpLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fTtvZS5wcm90b3R5cGUuaXNNZXNoPSEwO2Z1bmN0aW9uIGRNKG4sdCxlLGkscixzLG8sYSl7bGV0IGw7aWYodC5zaWRlPT09aGU/bD1pLmludGVyc2VjdFRyaWFuZ2xlKG8scyxyLCEwLGEpOmw9aS5pbnRlcnNlY3RUcmlhbmdsZShyLHMsbyx0LnNpZGUhPT1IcixhKSxsPT09bnVsbClyZXR1cm4gbnVsbDtOYS5jb3B5KGEpLE5hLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhOYSk7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6TmEuY2xvbmUoKSxvYmplY3Q6bn19ZnVuY3Rpb24gRmEobix0LGUsaSxyLHMsbyxhLGwsYyx1LGgpe0puLmZyb21CdWZmZXJBdHRyaWJ1dGUocixjKSwkbi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsdSksS24uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGgpO2xldCBmPW4ubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKHMmJmYpe0NhLnNldCgwLDAsMCksUmEuc2V0KDAsMCwwKSxMYS5zZXQoMCwwLDApO2ZvcihsZXQgZz0wLHg9cy5sZW5ndGg7Zzx4O2crKyl7bGV0IHY9ZltnXSxtPXNbZ107diE9PTAmJih3dS5mcm9tQnVmZmVyQXR0cmlidXRlKG0sYyksTXUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShtLHUpLGJ1LmZyb21CdWZmZXJBdHRyaWJ1dGUobSxoKSxvPyhDYS5hZGRTY2FsZWRWZWN0b3Iod3UsdiksUmEuYWRkU2NhbGVkVmVjdG9yKE11LHYpLExhLmFkZFNjYWxlZFZlY3RvcihidSx2KSk6KENhLmFkZFNjYWxlZFZlY3Rvcih3dS5zdWIoSm4pLHYpLFJhLmFkZFNjYWxlZFZlY3RvcihNdS5zdWIoJG4pLHYpLExhLmFkZFNjYWxlZFZlY3RvcihidS5zdWIoS24pLHYpKSl9Sm4uYWRkKENhKSwkbi5hZGQoUmEpLEtuLmFkZChMYSl9bi5pc1NraW5uZWRNZXNoJiYobi5ib25lVHJhbnNmb3JtKGMsSm4pLG4uYm9uZVRyYW5zZm9ybSh1LCRuKSxuLmJvbmVUcmFuc2Zvcm0oaCxLbikpO2xldCBkPWRNKG4sdCxlLGksSm4sJG4sS24sU3UpO2lmKGQpe2EmJihQYS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYyksRGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLElhLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxoKSxkLnV2PXJlLmdldFVWKFN1LEpuLCRuLEtuLFBhLERhLElhLG5ldyBLKSksbCYmKFBhLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxjKSxEYS5mcm9tQnVmZmVyQXR0cmlidXRlKGwsdSksSWEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGgpLGQudXYyPXJlLmdldFVWKFN1LEpuLCRuLEtuLFBhLERhLElhLG5ldyBLKSk7bGV0IGc9e2E6YyxiOnUsYzpoLG5vcm1hbDpuZXcgVCxtYXRlcmlhbEluZGV4OjB9O3JlLmdldE5vcm1hbChKbiwkbixLbixnLm5vcm1hbCksZC5mYWNlPWd9cmV0dXJuIGR9dmFyIEhpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD0xLGU9MSxpPTEscj0xLHM9MSxvPTEpe3N1cGVyKCksdGhpcy50eXBlPSJCb3hHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOmksd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOnMsZGVwdGhTZWdtZW50czpvfTtsZXQgYT10aGlzO3I9TWF0aC5mbG9vcihyKSxzPU1hdGguZmxvb3Iocyksbz1NYXRoLmZsb29yKG8pO2xldCBsPVtdLGM9W10sdT1bXSxoPVtdLGY9MCxkPTA7ZygieiIsInkiLCJ4IiwtMSwtMSxpLGUsdCxvLHMsMCksZygieiIsInkiLCJ4IiwxLC0xLGksZSwtdCxvLHMsMSksZygieCIsInoiLCJ5IiwxLDEsdCxpLGUscixvLDIpLGcoIngiLCJ6IiwieSIsMSwtMSx0LGksLWUscixvLDMpLGcoIngiLCJ5IiwieiIsMSwtMSx0LGUsaSxyLHMsNCksZygieCIsInkiLCJ6IiwtMSwtMSx0LGUsLWkscixzLDUpLHRoaXMuc2V0SW5kZXgobCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgZWUoYywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IGVlKHUsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKGgsMikpO2Z1bmN0aW9uIGcoeCx2LG0scCxiLF8sUyxMLEEsSCx0dCl7bGV0IFg9Xy9BLHk9Uy9ILFI9Xy8yLEQ9Uy8yLEY9TC8yLHo9QSsxLE49SCsxLFY9MCxRPTAsYXQ9bmV3IFQ7Zm9yKGxldCBHPTA7RzxOO0crKyl7bGV0ICQ9Ryp5LUQ7Zm9yKGxldCBsdD0wO2x0PHo7bHQrKyl7bGV0IGR0PWx0KlgtUjthdFt4XT1kdCpwLGF0W3ZdPSQqYixhdFttXT1GLGMucHVzaChhdC54LGF0LnksYXQueiksYXRbeF09MCxhdFt2XT0wLGF0W21dPUw+MD8xOi0xLHUucHVzaChhdC54LGF0LnksYXQueiksaC5wdXNoKGx0L0EpLGgucHVzaCgxLUcvSCksVis9MX19Zm9yKGxldCBHPTA7RzxIO0crKylmb3IobGV0ICQ9MDskPEE7JCsrKXtsZXQgbHQ9ZiskK3oqRyxkdD1mKyQreiooRysxKSx4dD1mKygkKzEpK3oqKEcrMSksaz1mKygkKzEpK3oqRztsLnB1c2gobHQsZHQsayksbC5wdXNoKGR0LHh0LGspLFErPTZ9YS5hZGRHcm91cChkLFEsdHQpLGQrPVEsZis9Vn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSGkodC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQuZGVwdGhTZWdtZW50cyl9fTtmdW5jdGlvbiBHcihuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7dFtlXT17fTtmb3IobGV0IGkgaW4gbltlXSl7bGV0IHI9bltlXVtpXTtyJiYoci5pc0NvbG9yfHxyLmlzTWF0cml4M3x8ci5pc01hdHJpeDR8fHIuaXNWZWN0b3IyfHxyLmlzVmVjdG9yM3x8ci5pc1ZlY3RvcjR8fHIuaXNUZXh0dXJlfHxyLmlzUXVhdGVybmlvbik/dFtlXVtpXT1yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT90W2VdW2ldPXIuc2xpY2UoKTp0W2VdW2ldPXJ9fXJldHVybiB0fWZ1bmN0aW9uIE1lKG4pe2xldCB0PXt9O2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1HcihuW2VdKTtmb3IobGV0IHIgaW4gaSl0W3JdPWlbcl19cmV0dXJuIHR9dmFyIHBNPXtjbG9uZTpHcixtZXJnZTpNZX0sbU09YHZvaWQgbWFpbigpIHsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAsZ009YHZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDEuMCwgMC4wLCAwLjAsIDEuMCApOwp9YCxGbj1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkZXJNYXRlcmlhbCIsdGhpcy5kZWZpbmVzPXt9LHRoaXMudW5pZm9ybXM9e30sdGhpcy52ZXJ0ZXhTaGFkZXI9bU0sdGhpcy5mcmFnbWVudFNoYWRlcj1nTSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx0IT09dm9pZCAwJiYodC5hdHRyaWJ1dGVzIT09dm9pZCAwJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1Hcih0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7ZS5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLGUudW5pZm9ybXM9e307Zm9yKGxldCByIGluIHRoaXMudW5pZm9ybXMpe2xldCBvPXRoaXMudW5pZm9ybXNbcl0udmFsdWU7byYmby5pc1RleHR1cmU/ZS51bmlmb3Jtc1tyXT17dHlwZToidCIsdmFsdWU6by50b0pTT04odCkudXVpZH06byYmby5pc0NvbG9yP2UudW5pZm9ybXNbcl09e3R5cGU6ImMiLHZhbHVlOm8uZ2V0SGV4KCl9Om8mJm8uaXNWZWN0b3IyP2UudW5pZm9ybXNbcl09e3R5cGU6InYyIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc1ZlY3RvcjM/ZS51bmlmb3Jtc1tyXT17dHlwZToidjMiLHZhbHVlOm8udG9BcnJheSgpfTpvJiZvLmlzVmVjdG9yND9lLnVuaWZvcm1zW3JdPXt0eXBlOiJ2NCIsdmFsdWU6by50b0FycmF5KCl9Om8mJm8uaXNNYXRyaXgzP2UudW5pZm9ybXNbcl09e3R5cGU6Im0zIix2YWx1ZTpvLnRvQXJyYXkoKX06byYmby5pc01hdHJpeDQ/ZS51bmlmb3Jtc1tyXT17dHlwZToibTQiLHZhbHVlOm8udG9BcnJheSgpfTplLnVuaWZvcm1zW3JdPXt2YWx1ZTpvfX1PYmplY3Qua2V5cyh0aGlzLmRlZmluZXMpLmxlbmd0aD4wJiYoZS5kZWZpbmVzPXRoaXMuZGVmaW5lcyksZS52ZXJ0ZXhTaGFkZXI9dGhpcy52ZXJ0ZXhTaGFkZXIsZS5mcmFnbWVudFNoYWRlcj10aGlzLmZyYWdtZW50U2hhZGVyO2xldCBpPXt9O2ZvcihsZXQgciBpbiB0aGlzLmV4dGVuc2lvbnMpdGhpcy5leHRlbnNpb25zW3JdPT09ITAmJihpW3JdPSEwKTtyZXR1cm4gT2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJihlLmV4dGVuc2lvbnM9aSksZX19O0ZuLnByb3RvdHlwZS5pc1NoYWRlck1hdGVyaWFsPSEwO3ZhciBvbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhbWVyYSIsdGhpcy5tYXRyaXhXb3JsZEludmVyc2U9bmV3IHd0LHRoaXMucHJvamVjdGlvbk1hdHJpeD1uZXcgd3QsdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZT1uZXcgd3R9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5tYXRyaXhXb3JsZEludmVyc2UuY29weSh0Lm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5wcm9qZWN0aW9uTWF0cml4LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodC5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksdGhpc31nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldCgtZVs4XSwtZVs5XSwtZVsxMF0pLm5vcm1hbGl6ZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dXBkYXRlV29ybGRNYXRyaXgodCxlKXtzdXBlci51cGRhdGVXb3JsZE1hdHJpeCh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07b28ucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBTZT1jbGFzcyBleHRlbmRzIG9ve2NvbnN0cnVjdG9yKHQ9NTAsZT0xLGk9LjEscj0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9aSx0aGlzLmZhcj1yLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz10LnZpZXc9PT1udWxsP251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgZT0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PVZ1KjIqTWF0aC5hdGFuKGUpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oaXUqLjUqdGhpcy5mb3YpO3JldHVybiAuNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90fWdldEVmZmVjdGl2ZUZPVigpe3JldHVybiBWdSoyKk1hdGguYXRhbihNYXRoLnRhbihpdSouNSp0aGlzLmZvdikvdGhpcy56b29tKX1nZXRGaWxtV2lkdGgoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UqTWF0aC5taW4odGhpcy5hc3BlY3QsMSl9Z2V0RmlsbUhlaWdodCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZS9NYXRoLm1heCh0aGlzLmFzcGVjdCwxKX1zZXRWaWV3T2Zmc2V0KHQsZSxpLHIscyxvKXt0aGlzLmFzcGVjdD10L2UsdGhpcy52aWV3PT09bnVsbCYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1zLHRoaXMudmlldy5oZWlnaHQ9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXt0aGlzLnZpZXchPT1udWxsJiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD10aGlzLm5lYXIsZT10Kk1hdGgudGFuKGl1Ki41KnRoaXMuZm92KS90aGlzLnpvb20saT0yKmUscj10aGlzLmFzcGVjdCppLHM9LS41KnIsbz10aGlzLnZpZXc7aWYodGhpcy52aWV3IT09bnVsbCYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBsPW8uZnVsbFdpZHRoLGM9by5mdWxsSGVpZ2h0O3MrPW8ub2Zmc2V0WCpyL2wsZS09by5vZmZzZXRZKmkvYyxyKj1vLndpZHRoL2wsaSo9by5oZWlnaHQvY31sZXQgYT10aGlzLmZpbG1PZmZzZXQ7YSE9PTAmJihzKz10KmEvdGhpcy5nZXRGaWxtV2lkdGgoKSksdGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShzLHMrcixlLGUtaSx0LHRoaXMuZmFyKSx0aGlzLnByb2plY3Rpb25NYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5wcm9qZWN0aW9uTWF0cml4KS5pbnZlcnQoKX10b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5mb3Y9dGhpcy5mb3YsZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubmVhcj10aGlzLm5lYXIsZS5vYmplY3QuZmFyPXRoaXMuZmFyLGUub2JqZWN0LmZvY3VzPXRoaXMuZm9jdXMsZS5vYmplY3QuYXNwZWN0PXRoaXMuYXNwZWN0LHRoaXMudmlldyE9PW51bGwmJihlLm9iamVjdC52aWV3PU9iamVjdC5hc3NpZ24oe30sdGhpcy52aWV3KSksZS5vYmplY3QuZmlsbUdhdWdlPXRoaXMuZmlsbUdhdWdlLGUub2JqZWN0LmZpbG1PZmZzZXQ9dGhpcy5maWxtT2Zmc2V0LGV9fTtTZS5wcm90b3R5cGUuaXNQZXJzcGVjdGl2ZUNhbWVyYT0hMDt2YXIgU3I9OTAsRXI9MSxhbz1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQsZSxpKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsaS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DdWJlQ2FtZXJhOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgYW4gaW5zdGFuY2Ugb2YgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0IGFzIHRoaXJkIHBhcmFtZXRlci4iKTtyZXR1cm59dGhpcy5yZW5kZXJUYXJnZXQ9aTtsZXQgcj1uZXcgU2UoU3IsRXIsdCxlKTtyLmxheWVycz10aGlzLmxheWVycyxyLnVwLnNldCgwLC0xLDApLHIubG9va0F0KG5ldyBUKDEsMCwwKSksdGhpcy5hZGQocik7bGV0IHM9bmV3IFNlKFNyLEVyLHQsZSk7cy5sYXllcnM9dGhpcy5sYXllcnMscy51cC5zZXQoMCwtMSwwKSxzLmxvb2tBdChuZXcgVCgtMSwwLDApKSx0aGlzLmFkZChzKTtsZXQgbz1uZXcgU2UoU3IsRXIsdCxlKTtvLmxheWVycz10aGlzLmxheWVycyxvLnVwLnNldCgwLDAsMSksby5sb29rQXQobmV3IFQoMCwxLDApKSx0aGlzLmFkZChvKTtsZXQgYT1uZXcgU2UoU3IsRXIsdCxlKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsLTEpLGEubG9va0F0KG5ldyBUKDAsLTEsMCkpLHRoaXMuYWRkKGEpO2xldCBsPW5ldyBTZShTcixFcix0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IFQoMCwwLDEpKSx0aGlzLmFkZChsKTtsZXQgYz1uZXcgU2UoU3IsRXIsdCxlKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBUKDAsMCwtMSkpLHRoaXMuYWRkKGMpfXVwZGF0ZSh0LGUpe3RoaXMucGFyZW50PT09bnVsbCYmdGhpcy51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCBpPXRoaXMucmVuZGVyVGFyZ2V0LFtyLHMsbyxhLGwsY109dGhpcy5jaGlsZHJlbix1PXQueHIuZW5hYmxlZCxoPXQuZ2V0UmVuZGVyVGFyZ2V0KCk7dC54ci5lbmFibGVkPSExO2xldCBmPWkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM7aS50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz0hMSx0LnNldFJlbmRlclRhcmdldChpLDApLHQucmVuZGVyKGUsciksdC5zZXRSZW5kZXJUYXJnZXQoaSwxKSx0LnJlbmRlcihlLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMiksdC5yZW5kZXIoZSxvKSx0LnNldFJlbmRlclRhcmdldChpLDMpLHQucmVuZGVyKGUsYSksdC5zZXRSZW5kZXJUYXJnZXQoaSw0KSx0LnJlbmRlcihlLGwpLGkudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9Zix0LnNldFJlbmRlclRhcmdldChpLDUpLHQucmVuZGVyKGUsYyksdC5zZXRSZW5kZXJUYXJnZXQoaCksdC54ci5lbmFibGVkPXUsaS50ZXh0dXJlLm5lZWRzUE1SRU1VcGRhdGU9ITB9fSxXcj1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQsZSxpLHIscyxvLGEsbCxjLHUpe3Q9dCE9PXZvaWQgMD90OltdLGU9ZSE9PXZvaWQgMD9lOkFvLHN1cGVyKHQsZSxpLHIscyxvLGEsbCxjLHUpLHRoaXMuZmxpcFk9ITF9Z2V0IGltYWdlcygpe3JldHVybiB0aGlzLmltYWdlfXNldCBpbWFnZXModCl7dGhpcy5pbWFnZT10fX07V3IucHJvdG90eXBlLmlzQ3ViZVRleHR1cmU9ITA7dmFyIG9sPWNsYXNzIGV4dGVuZHMgTmV7Y29uc3RydWN0b3IodCxlLGkpe051bWJlci5pc0ludGVnZXIoZSkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQ3ViZVJlbmRlclRhcmdldDogY29uc3RydWN0b3Igc2lnbmF0dXJlIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKSIpLGU9aSksc3VwZXIodCx0LGUpLGU9ZXx8e30sdGhpcy50ZXh0dXJlPW5ldyBXcih2b2lkIDAsZS5tYXBwaW5nLGUud3JhcFMsZS53cmFwVCxlLm1hZ0ZpbHRlcixlLm1pbkZpbHRlcixlLmZvcm1hdCxlLnR5cGUsZS5hbmlzb3Ryb3B5LGUuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9lLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyIT09dm9pZCAwP2UubWluRmlsdGVyOmJlfWZyb21FcXVpcmVjdGFuZ3VsYXJUZXh0dXJlKHQsZSl7dGhpcy50ZXh0dXJlLnR5cGU9ZS50eXBlLHRoaXMudGV4dHVyZS5mb3JtYXQ9UmUsdGhpcy50ZXh0dXJlLmVuY29kaW5nPWUuZW5jb2RpbmcsdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1lLmdlbmVyYXRlTWlwbWFwcyx0aGlzLnRleHR1cmUubWluRmlsdGVyPWUubWluRmlsdGVyLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9ZS5tYWdGaWx0ZXI7bGV0IGk9e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6YAoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJdmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHsKCgkJCQkJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7CgoJCQkJfQoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCgkJCQkJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCQkJCQkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgoJCQkJfQoJCQlgLGZyYWdtZW50U2hhZGVyOmAKCgkJCQl1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7CgoJCQkJdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKCgkJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJCXZvaWQgbWFpbigpIHsKCgkJCQkJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoKCQkJCQl2ZWMyIHNhbXBsZVVWID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uICk7CgoJCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApOwoKCQkJCX0KCQkJYH0scj1uZXcgSGkoNSw1LDUpLHM9bmV3IEZuKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpHcihpLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6aS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aS5mcmFnbWVudFNoYWRlcixzaWRlOmhlLGJsZW5kaW5nOmpufSk7cy51bmlmb3Jtcy50RXF1aXJlY3QudmFsdWU9ZTtsZXQgbz1uZXcgb2UocixzKSxhPWUubWluRmlsdGVyO3JldHVybiBlLm1pbkZpbHRlcj09PUxsJiYoZS5taW5GaWx0ZXI9YmUpLG5ldyBhbygxLDEwLHRoaXMpLnVwZGF0ZSh0LG8pLGUubWluRmlsdGVyPWEsby5nZW9tZXRyeS5kaXNwb3NlKCksby5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LGUsaSxyKXtsZXQgcz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgbz0wO288NjtvKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxvKSx0LmNsZWFyKGUsaSxyKTt0LnNldFJlbmRlclRhcmdldChzKX19O29sLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgRXU9bmV3IFQseE09bmV3IFQseU09bmV3IGRlLGplPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IFQoMSwwLDApLGU9MCl7dGhpcy5ub3JtYWw9dCx0aGlzLmNvbnN0YW50PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD1lLHRoaXN9c2V0Q29tcG9uZW50cyh0LGUsaSxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuc2V0KHQsZSxpKSx0aGlzLmNvbnN0YW50PXIsdGhpc31zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0LGUpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9LWUuZG90KHRoaXMubm9ybWFsKSx0aGlzfXNldEZyb21Db3BsYW5hclBvaW50cyh0LGUsaSl7bGV0IHI9RXUuc3ViVmVjdG9ycyhpLGUpLmNyb3NzKHhNLnN1YlZlY3RvcnModCxlKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQocix0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2xldCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQsZSl7bGV0IGk9dC5kZWx0YShFdSkscj10aGlzLm5vcm1hbC5kb3QoaSk7aWYocj09PTApcmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpPT09MD9lLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgcz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9yO3JldHVybiBzPDB8fHM+MT9udWxsOmUuY29weShpKS5tdWx0aXBseVNjYWxhcihzKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IGU9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksaT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIGU8MCYmaT4wfHxpPDAmJmU+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxlKXtsZXQgaT1lfHx5TS5nZXROb3JtYWxNYXRyaXgodCkscj10aGlzLmNvcGxhbmFyUG9pbnQoRXUpLmFwcGx5TWF0cml4NCh0KSxzPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhpKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0tci5kb3QocyksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07amUucHJvdG90eXBlLmlzUGxhbmU9ITA7dmFyIFRyPW5ldyBzaSx6YT1uZXcgVCxxcj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqZSxlPW5ldyBqZSxpPW5ldyBqZSxyPW5ldyBqZSxzPW5ldyBqZSxvPW5ldyBqZSl7dGhpcy5wbGFuZXM9W3QsZSxpLHIscyxvXX1zZXQodCxlLGkscixzLG8pe2xldCBhPXRoaXMucGxhbmVzO3JldHVybiBhWzBdLmNvcHkodCksYVsxXS5jb3B5KGUpLGFbMl0uY29weShpKSxhWzNdLmNvcHkociksYVs0XS5jb3B5KHMpLGFbNV0uY29weShvKSx0aGlzfWNvcHkodCl7bGV0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBpPTA7aTw2O2krKyllW2ldLmNvcHkodC5wbGFuZXNbaV0pO3JldHVybiB0aGlzfXNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHQpe2xldCBlPXRoaXMucGxhbmVzLGk9dC5lbGVtZW50cyxyPWlbMF0scz1pWzFdLG89aVsyXSxhPWlbM10sbD1pWzRdLGM9aVs1XSx1PWlbNl0saD1pWzddLGY9aVs4XSxkPWlbOV0sZz1pWzEwXSx4PWlbMTFdLHY9aVsxMl0sbT1pWzEzXSxwPWlbMTRdLGI9aVsxNV07cmV0dXJuIGVbMF0uc2V0Q29tcG9uZW50cyhhLXIsaC1sLHgtZixiLXYpLm5vcm1hbGl6ZSgpLGVbMV0uc2V0Q29tcG9uZW50cyhhK3IsaCtsLHgrZixiK3YpLm5vcm1hbGl6ZSgpLGVbMl0uc2V0Q29tcG9uZW50cyhhK3MsaCtjLHgrZCxiK20pLm5vcm1hbGl6ZSgpLGVbM10uc2V0Q29tcG9uZW50cyhhLXMsaC1jLHgtZCxiLW0pLm5vcm1hbGl6ZSgpLGVbNF0uc2V0Q29tcG9uZW50cyhhLW8saC11LHgtZyxiLXApLm5vcm1hbGl6ZSgpLGVbNV0uc2V0Q29tcG9uZW50cyhhK28saCt1LHgrZyxiK3ApLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtsZXQgZT10Lmdlb21ldHJ5O3JldHVybiBlLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmZS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxUci5jb3B5KGUuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoVHIpfWludGVyc2VjdHNTcHJpdGUodCl7cmV0dXJuIFRyLmNlbnRlci5zZXQoMCwwLDApLFRyLnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3NixUci5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFRyKX1pbnRlcnNlY3RzU3BoZXJlKHQpe2xldCBlPXRoaXMucGxhbmVzLGk9dC5jZW50ZXIscj0tdC5yYWRpdXM7Zm9yKGxldCBzPTA7czw2O3MrKylpZihlW3NdLmRpc3RhbmNlVG9Qb2ludChpKTxyKXJldHVybiExO3JldHVybiEwfWludGVyc2VjdHNCb3godCl7bGV0IGU9dGhpcy5wbGFuZXM7Zm9yKGxldCBpPTA7aTw2O2krKyl7bGV0IHI9ZVtpXTtpZih6YS54PXIubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsemEueT1yLm5vcm1hbC55PjA/dC5tYXgueTp0Lm1pbi55LHphLno9ci5ub3JtYWwuej4wP3QubWF4Lno6dC5taW4ueixyLmRpc3RhbmNlVG9Qb2ludCh6YSk8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspaWYoZVtpXS5kaXN0YW5jZVRvUG9pbnQodCk8MClyZXR1cm4hMTtyZXR1cm4hMH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBnMCgpe2xldCBuPW51bGwsdD0hMSxlPW51bGwsaT1udWxsO2Z1bmN0aW9uIHIocyxvKXtlKHMsbyksaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZShyKX1yZXR1cm57c3RhcnQ6ZnVuY3Rpb24oKXt0IT09ITAmJmUhPT1udWxsJiYoaT1uLnJlcXVlc3RBbmltYXRpb25GcmFtZShyKSx0PSEwKX0sc3RvcDpmdW5jdGlvbigpe24uY2FuY2VsQW5pbWF0aW9uRnJhbWUoaSksdD0hMX0sc2V0QW5pbWF0aW9uTG9vcDpmdW5jdGlvbihzKXtlPXN9LHNldENvbnRleHQ6ZnVuY3Rpb24ocyl7bj1zfX19ZnVuY3Rpb24gdk0obix0KXtsZXQgZT10LmlzV2ViR0wyLGk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gcihjLHUpe2xldCBoPWMuYXJyYXksZj1jLnVzYWdlLGQ9bi5jcmVhdGVCdWZmZXIoKTtuLmJpbmRCdWZmZXIodSxkKSxuLmJ1ZmZlckRhdGEodSxoLGYpLGMub25VcGxvYWRDYWxsYmFjaygpO2xldCBnPTUxMjY7cmV0dXJuIGggaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXk/Zz01MTI2OmggaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXk/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVuc3VwcG9ydGVkIGRhdGEgYnVmZmVyIGZvcm1hdDogRmxvYXQ2NEFycmF5LiIpOmggaW5zdGFuY2VvZiBVaW50MTZBcnJheT9jLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT9lP2c9NTEzMTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVXNhZ2Ugb2YgRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZSByZXF1aXJlcyBXZWJHTDIuIik6Zz01MTIzOmggaW5zdGFuY2VvZiBJbnQxNkFycmF5P2c9NTEyMjpoIGluc3RhbmNlb2YgVWludDMyQXJyYXk/Zz01MTI1OmggaW5zdGFuY2VvZiBJbnQzMkFycmF5P2c9NTEyNDpoIGluc3RhbmNlb2YgSW50OEFycmF5P2c9NTEyMDooaCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fGggaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkmJihnPTUxMjEpLHtidWZmZXI6ZCx0eXBlOmcsYnl0ZXNQZXJFbGVtZW50OmguQllURVNfUEVSX0VMRU1FTlQsdmVyc2lvbjpjLnZlcnNpb259fWZ1bmN0aW9uIHMoYyx1LGgpe2xldCBmPXUuYXJyYXksZD11LnVwZGF0ZVJhbmdlO24uYmluZEJ1ZmZlcihoLGMpLGQuY291bnQ9PT0tMT9uLmJ1ZmZlclN1YkRhdGEoaCwwLGYpOihlP24uYnVmZmVyU3ViRGF0YShoLGQub2Zmc2V0KmYuQllURVNfUEVSX0VMRU1FTlQsZixkLm9mZnNldCxkLmNvdW50KTpuLmJ1ZmZlclN1YkRhdGEoaCxkLm9mZnNldCpmLkJZVEVTX1BFUl9FTEVNRU5ULGYuc3ViYXJyYXkoZC5vZmZzZXQsZC5vZmZzZXQrZC5jb3VudCkpLGQuY291bnQ9LTEpfWZ1bmN0aW9uIG8oYyl7cmV0dXJuIGMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKSxpLmdldChjKX1mdW5jdGlvbiBhKGMpe2MuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgdT1pLmdldChjKTt1JiYobi5kZWxldGVCdWZmZXIodS5idWZmZXIpLGkuZGVsZXRlKGMpKX1mdW5jdGlvbiBsKGMsdSl7aWYoYy5pc0dMQnVmZmVyQXR0cmlidXRlKXtsZXQgZj1pLmdldChjKTsoIWZ8fGYudmVyc2lvbjxjLnZlcnNpb24pJiZpLnNldChjLHtidWZmZXI6Yy5idWZmZXIsdHlwZTpjLnR5cGUsYnl0ZXNQZXJFbGVtZW50OmMuZWxlbWVudFNpemUsdmVyc2lvbjpjLnZlcnNpb259KTtyZXR1cm59Yy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpO2xldCBoPWkuZ2V0KGMpO2g9PT12b2lkIDA/aS5zZXQoYyxyKGMsdSkpOmgudmVyc2lvbjxjLnZlcnNpb24mJihzKGguYnVmZmVyLGMsdSksaC52ZXJzaW9uPWMudmVyc2lvbil9cmV0dXJue2dldDpvLHJlbW92ZTphLHVwZGF0ZTpsfX12YXIgbG89Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PTEsZT0xLGk9MSxyPTEpe3N1cGVyKCksdGhpcy50eXBlPSJQbGFuZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsd2lkdGhTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOnJ9O2xldCBzPXQvMixvPWUvMixhPU1hdGguZmxvb3IoaSksbD1NYXRoLmZsb29yKHIpLGM9YSsxLHU9bCsxLGg9dC9hLGY9ZS9sLGQ9W10sZz1bXSx4PVtdLHY9W107Zm9yKGxldCBtPTA7bTx1O20rKyl7bGV0IHA9bSpmLW87Zm9yKGxldCBiPTA7YjxjO2IrKyl7bGV0IF89YipoLXM7Zy5wdXNoKF8sLXAsMCkseC5wdXNoKDAsMCwxKSx2LnB1c2goYi9hKSx2LnB1c2goMS1tL2wpfX1mb3IobGV0IG09MDttPGw7bSsrKWZvcihsZXQgcD0wO3A8YTtwKyspe2xldCBiPXArYyptLF89cCtjKihtKzEpLFM9cCsxK2MqKG0rMSksTD1wKzErYyptO2QucHVzaChiLF8sTCksZC5wdXNoKF8sUyxMKX10aGlzLnNldEluZGV4KGQpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZSh4LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZSh2LDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBsbyh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LF9NPWAjaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nOwojZW5kaWZgLHdNPWAjaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxNTT1gI2lmZGVmIFVTRV9BTFBIQVRFU1QKCWlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkOwojZW5kaWZgLGJNPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJdW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7CiNlbmRpZmAsU009YCNpZmRlZiBVU0VfQU9NQVAKCWZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uOwoJI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBTVEFOREFSRCApCgkJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjZW5kaWYKI2VuZGlmYCxFTT1gI2lmZGVmIFVTRV9BT01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYW9NYXA7Cgl1bmlmb3JtIGZsb2F0IGFvTWFwSW50ZW5zaXR5OwojZW5kaWZgLFRNPSJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLEFNPWB2ZWMzIG9iamVjdE5vcm1hbCA9IHZlYzMoIG5vcm1hbCApOwojaWZkZWYgVVNFX1RBTkdFTlQKCXZlYzMgb2JqZWN0VGFuZ2VudCA9IHZlYzMoIHRhbmdlbnQueHl6ICk7CiNlbmRpZmAsQ009YHZlYzMgQlJERl9MYW1iZXJ0KCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciApIHsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogZGlmZnVzZUNvbG9yOwp9CnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkgewoJZmxvYXQgZnJlc25lbCA9IGV4cDIoICggLSA1LjU1NDczICogZG90VkggLSA2Ljk4MzE2ICkgKiBkb3RWSCApOwoJcmV0dXJuIGYwICogKCAxLjAgLSBmcmVzbmVsICkgKyAoIGY5MCAqIGZyZXNuZWwgKTsKfQpmbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7CglmbG9hdCBhMiA9IHBvdzIoIGFscGhhICk7CglmbG9hdCBndiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7CglmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7CglyZXR1cm4gMC41IC8gbWF4KCBndiArIGdsLCBFUFNJTE9OICk7Cn0KZmxvYXQgRF9HR1goIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROSCApIHsKCWZsb2F0IGEyID0gcG93MiggYWxwaGEgKTsKCWZsb2F0IGRlbm9tID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDsKCXJldHVybiBSRUNJUFJPQ0FMX1BJICogYTIgLyBwb3cyKCBkZW5vbSApOwp9CnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTsKCXZlYzMgRiA9IEZfU2NobGljayggZjAsIGY5MCwgZG90VkggKTsKCWZsb2F0IFYgPSBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTsKCWZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7CglyZXR1cm4gRiAqICggViAqIEQgKTsKfQp2ZWMyIExUQ19VdiggY29uc3QgaW4gdmVjMyBOLCBjb25zdCBpbiB2ZWMzIFYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDsKCWNvbnN0IGZsb2F0IExVVF9TQ0FMRSA9ICggTFVUX1NJWkUgLSAxLjAgKSAvIExVVF9TSVpFOwoJY29uc3QgZmxvYXQgTFVUX0JJQVMgPSAwLjUgLyBMVVRfU0laRTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7Cgl2ZWMyIHV2ID0gdmVjMiggcm91Z2huZXNzLCBzcXJ0KCAxLjAgLSBkb3ROViApICk7Cgl1diA9IHV2ICogTFVUX1NDQUxFICsgTFVUX0JJQVM7CglyZXR1cm4gdXY7Cn0KZmxvYXQgTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCBjb25zdCBpbiB2ZWMzIGYgKSB7CglmbG9hdCBsID0gbGVuZ3RoKCBmICk7CglyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7Cn0KdmVjMyBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgdjEsIGNvbnN0IGluIHZlYzMgdjIgKSB7CglmbG9hdCB4ID0gZG90KCB2MSwgdjIgKTsKCWZsb2F0IHkgPSBhYnMoIHggKTsKCWZsb2F0IGEgPSAwLjg1NDM5ODUgKyAoIDAuNDk2NTE1NSArIDAuMDE0NTIwNiAqIHkgKSAqIHk7CglmbG9hdCBiID0gMy40MTc1OTQwICsgKCA0LjE2MTY3MjQgKyB5ICkgKiB5OwoJZmxvYXQgdiA9IGEgLyBiOwoJZmxvYXQgdGhldGFfc2ludGhldGEgPSAoIHggPiAwLjAgKSA/IHYgOiAwLjUgKiBpbnZlcnNlc3FydCggbWF4KCAxLjAgLSB4ICogeCwgMWUtNyApICkgLSB2OwoJcmV0dXJuIGNyb3NzKCB2MSwgdjIgKSAqIHRoZXRhX3NpbnRoZXRhOwp9CnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkgewoJdmVjMyB2MSA9IHJlY3RDb29yZHNbIDEgXSAtIHJlY3RDb29yZHNbIDAgXTsKCXZlYzMgdjIgPSByZWN0Q29vcmRzWyAzIF0gLSByZWN0Q29vcmRzWyAwIF07Cgl2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApOwoJaWYoIGRvdCggbGlnaHROb3JtYWwsIFAgLSByZWN0Q29vcmRzWyAwIF0gKSA8IDAuMCApIHJldHVybiB2ZWMzKCAwLjAgKTsKCXZlYzMgVDEsIFQyOwoJVDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTsKCVQyID0gLSBjcm9zcyggTiwgVDEgKTsKCW1hdDMgbWF0ID0gbUludiAqIHRyYW5zcG9zZU1hdDMoIG1hdDMoIFQxLCBUMiwgTiApICk7Cgl2ZWMzIGNvb3Jkc1sgNCBdOwoJY29vcmRzWyAwIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDAgXSAtIFAgKTsKCWNvb3Jkc1sgMSBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAxIF0gLSBQICk7Cgljb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApOwoJY29vcmRzWyAzIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDMgXSAtIFAgKTsKCWNvb3Jkc1sgMCBdID0gbm9ybWFsaXplKCBjb29yZHNbIDAgXSApOwoJY29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7Cgljb29yZHNbIDIgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAyIF0gKTsKCWNvb3Jkc1sgMyBdID0gbm9ybWFsaXplKCBjb29yZHNbIDMgXSApOwoJdmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAwIF0sIGNvb3Jkc1sgMSBdICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAxIF0sIGNvb3Jkc1sgMiBdICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7Cgl2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAzIF0sIGNvb3Jkc1sgMCBdICk7CglmbG9hdCByZXN1bHQgPSBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIHZlY3RvckZvcm1GYWN0b3IgKTsKCXJldHVybiB2ZWMzKCByZXN1bHQgKTsKfQpmbG9hdCBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICkgewoJcmV0dXJuIDAuMjU7Cn0KZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkgewoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KCBkb3ROSCwgc2hpbmluZXNzICk7Cn0KdmVjMyBCUkRGX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc2hpbmluZXNzICkgewoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IGRvdFZIID0gc2F0dXJhdGUoIGRvdCggdmlld0RpciwgaGFsZkRpciApICk7Cgl2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTsKCWZsb2F0IEcgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7CglmbG9hdCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7CglyZXR1cm4gRiAqICggRyAqIEQgKTsKfQojaWYgZGVmaW5lZCggVVNFX1NIRUVOICkKZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkgewoJZmxvYXQgYWxwaGEgPSBwb3cyKCByb3VnaG5lc3MgKTsKCWZsb2F0IGludkFscGhhID0gMS4wIC8gYWxwaGE7CglmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7CglmbG9hdCBzaW4yaCA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApOwoJcmV0dXJuICggMi4wICsgaW52QWxwaGEgKSAqIHBvdyggc2luMmgsIGludkFscGhhICogMC41ICkgLyAoIDIuMCAqIFBJICk7Cn0KZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7CglyZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTsKfQp2ZWMzIEJSREZfU2hlZW4oIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIHZlYzMgc2hlZW5Db2xvciwgY29uc3QgaW4gZmxvYXQgc2hlZW5Sb3VnaG5lc3MgKSB7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTsKCWZsb2F0IEQgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApOwoJZmxvYXQgViA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7CglyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTsKfQojZW5kaWZgLFJNPWAjaWZkZWYgVVNFX0JVTVBNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7Cgl1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTsKCXZlYzIgZEhkeHlfZndkKCkgewoJCXZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTsKCQl2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7CgkJZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54OwoJCWZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsOwoJCWZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsOwoJCXJldHVybiB2ZWMyKCBkQngsIGRCeSApOwoJfQoJdmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdk4gPSBzdXJmX25vcm07CgkJdmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApOwoJCXZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTsKCQlmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjsKCQl2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7Cgl9CiNlbmRpZmAsTE09YCNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMAoJdmVjNCBwbGFuZTsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHsKCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJaWYgKCBkb3QoIHZDbGlwUG9zaXRpb24sIHBsYW5lLnh5eiApID4gcGxhbmUudyApIGRpc2NhcmQ7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2lmIFVOSU9OX0NMSVBQSU5HX1BMQU5FUyA8IE5VTV9DTElQUElOR19QTEFORVMKCQlib29sIGNsaXBwZWQgPSB0cnVlOwoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IFVOSU9OX0NMSVBQSU5HX1BMQU5FUzsgaSA8IE5VTV9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJCXBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTsKCQkJY2xpcHBlZCA9ICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSAmJiBjbGlwcGVkOwoJCX0KCQkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJCWlmICggY2xpcHBlZCApIGRpc2NhcmQ7CgkjZW5kaWYKI2VuZGlmYCxQTT1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjsKCXVuaWZvcm0gdmVjNCBjbGlwcGluZ1BsYW5lc1sgTlVNX0NMSVBQSU5HX1BMQU5FUyBdOwojZW5kaWZgLERNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwojZW5kaWZgLElNPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZDbGlwUG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwojZW5kaWZgLE5NPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCWRpZmZ1c2VDb2xvciAqPSB2Q29sb3I7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApCglkaWZmdXNlQ29sb3IucmdiICo9IHZDb2xvcjsKI2VuZGlmYCxGTT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCx6TT1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2YXJ5aW5nIHZlYzMgdkNvbG9yOwojZW5kaWZgLFVNPWAjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkKCXZDb2xvciA9IHZlYzQoIDEuMCApOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApCgl2Q29sb3IgPSB2ZWMzKCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfQ09MT1IKCXZDb2xvciAqPSBjb2xvcjsKI2VuZGlmCiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUgoJdkNvbG9yLnh5eiAqPSBpbnN0YW5jZUNvbG9yLnh5ejsKI2VuZGlmYCxCTT1gI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5MwojZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NgojZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2CiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDcKI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1CiNkZWZpbmUgRVBTSUxPTiAxZS02CiNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgojZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApCmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH0KZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9CmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH0KZmxvYXQgbWF4MyggY29uc3QgaW4gdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9CmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9CmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7Cgljb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7CgloaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTsKCXJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApOwp9CiNpZmRlZiBISUdIX1BSRUNJU0lPTgoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgeyByZXR1cm4gbGVuZ3RoKCB2ICk7IH0KI2Vsc2UKCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsKCQlmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApOwoJCXJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDsKCX0KI2VuZGlmCnN0cnVjdCBJbmNpZGVudExpZ2h0IHsKCXZlYzMgY29sb3I7Cgl2ZWMzIGRpcmVjdGlvbjsKCWJvb2wgdmlzaWJsZTsKfTsKc3RydWN0IFJlZmxlY3RlZExpZ2h0IHsKCXZlYzMgZGlyZWN0RGlmZnVzZTsKCXZlYzMgZGlyZWN0U3BlY3VsYXI7Cgl2ZWMzIGluZGlyZWN0RGlmZnVzZTsKCXZlYzMgaW5kaXJlY3RTcGVjdWxhcjsKfTsKc3RydWN0IEdlb21ldHJpY0NvbnRleHQgewoJdmVjMyBwb3NpdGlvbjsKCXZlYzMgbm9ybWFsOwoJdmVjMyB2aWV3RGlyOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgp9Owp2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7Cn0KdmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTsKfQptYXQzIHRyYW5zcG9zZU1hdDMoIGNvbnN0IGluIG1hdDMgbSApIHsKCW1hdDMgdG1wOwoJdG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7Cgl0bXBbIDEgXSA9IHZlYzMoIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTsKCXRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApOwoJcmV0dXJuIHRtcDsKfQpmbG9hdCBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgewoJdmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApOwoJcmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7Cn0KYm9vbCBpc1BlcnNwZWN0aXZlTWF0cml4KCBtYXQ0IG0gKSB7CglyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7Cn0KdmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHsKCWZsb2F0IHUgPSBhdGFuKCBkaXIueiwgZGlyLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41OwoJZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41OwoJcmV0dXJuIHZlYzIoIHUsIHYgKTsKfWAsT009YCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFX1VWCgkjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjAKCSNkZWZpbmUgY3ViZVVWX21pbk1pcExldmVsIDQuMAoJI2RlZmluZSBjdWJlVVZfbWF4VGlsZVNpemUgMjU2LjAKCSNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjAKCWZsb2F0IGdldEZhY2UoIHZlYzMgZGlyZWN0aW9uICkgewoJCXZlYzMgYWJzRGlyZWN0aW9uID0gYWJzKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmYWNlID0gLSAxLjA7CgkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi56ICkgewoJCQlpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKQoJCQkJZmFjZSA9IGRpcmVjdGlvbi54ID4gMC4wID8gMC4wIDogMy4wOwoJCQllbHNlCgkJCQlmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7CgkJfSBlbHNlIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueiA+IDAuMCA/IDIuMCA6IDUuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0KCQlyZXR1cm4gZmFjZTsKCX0KCXZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkgewoJCXZlYzIgdXY7CgkJaWYgKCBmYWNlID09IDAuMCApIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7CgkJfSBlbHNlIHsKCQkJdXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTsKCQl9CgkJcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTsKCX0KCXZlYzMgYmlsaW5lYXJDdWJlVVYoIHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBtaXBJbnQgKSB7CgkJZmxvYXQgZmFjZSA9IGdldEZhY2UoIGRpcmVjdGlvbiApOwoJCWZsb2F0IGZpbHRlckludCA9IG1heCggY3ViZVVWX21pbk1pcExldmVsIC0gbWlwSW50LCAwLjAgKTsKCQltaXBJbnQgPSBtYXgoIG1pcEludCwgY3ViZVVWX21pbk1pcExldmVsICk7CgkJZmxvYXQgZmFjZVNpemUgPSBleHAyKCBtaXBJbnQgKTsKCQlmbG9hdCB0ZXhlbFNpemUgPSAxLjAgLyAoIDMuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZSApOwoJCXZlYzIgdXYgPSBnZXRVViggZGlyZWN0aW9uLCBmYWNlICkgKiAoIGZhY2VTaXplIC0gMS4wICkgKyAwLjU7CgkJaWYgKCBmYWNlID4gMi4wICkgewoJCQl1di55ICs9IGZhY2VTaXplOwoJCQlmYWNlIC09IDMuMDsKCQl9CgkJdXYueCArPSBmYWNlICogZmFjZVNpemU7CgkJaWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7CgkJCXV2LnkgKz0gMi4wICogY3ViZVVWX21heFRpbGVTaXplOwoJCX0KCQl1di55ICs9IGZpbHRlckludCAqIDIuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTsKCQl1di54ICs9IDMuMCAqIG1heCggMC4wLCBjdWJlVVZfbWF4VGlsZVNpemUgLSAyLjAgKiBmYWNlU2l6ZSApOwoJCXV2ICo9IHRleGVsU2l6ZTsKCQlyZXR1cm4gdGV4dHVyZTJEKCBlbnZNYXAsIHV2ICkucmdiOwoJfQoJI2RlZmluZSByMCAxLjAKCSNkZWZpbmUgdjAgMC4zMzkKCSNkZWZpbmUgbTAgLSAyLjAKCSNkZWZpbmUgcjEgMC44CgkjZGVmaW5lIHYxIDAuMjc2CgkjZGVmaW5lIG0xIC0gMS4wCgkjZGVmaW5lIHI0IDAuNAoJI2RlZmluZSB2NCAwLjA0NgoJI2RlZmluZSBtNCAyLjAKCSNkZWZpbmUgcjUgMC4zMDUKCSNkZWZpbmUgdjUgMC4wMTYKCSNkZWZpbmUgbTUgMy4wCgkjZGVmaW5lIHI2IDAuMjEKCSNkZWZpbmUgdjYgMC4wMDM4CgkjZGVmaW5lIG02IDQuMAoJZmxvYXQgcm91Z2huZXNzVG9NaXAoIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSAwLjA7CgkJaWYgKCByb3VnaG5lc3MgPj0gcjEgKSB7CgkJCW1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7CgkJCW1pcCA9ICggcjEgLSByb3VnaG5lc3MgKSAqICggbTQgLSBtMSApIC8gKCByMSAtIHI0ICkgKyBtMTsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjUgKSB7CgkJCW1pcCA9ICggcjQgLSByb3VnaG5lc3MgKSAqICggbTUgLSBtNCApIC8gKCByNCAtIHI1ICkgKyBtNDsKCQl9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjYgKSB7CgkJCW1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTsKCQl9IGVsc2UgewoJCQltaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTsJCX0KCQlyZXR1cm4gbWlwOwoJfQoJdmVjNCB0ZXh0dXJlQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIHNhbXBsZURpciwgZmxvYXQgcm91Z2huZXNzICkgewoJCWZsb2F0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIG0wLCBjdWJlVVZfbWF4TWlwTGV2ZWwgKTsKCQlmbG9hdCBtaXBGID0gZnJhY3QoIG1pcCApOwoJCWZsb2F0IG1pcEludCA9IGZsb29yKCBtaXAgKTsKCQl2ZWMzIGNvbG9yMCA9IGJpbGluZWFyQ3ViZVVWKCBlbnZNYXAsIHNhbXBsZURpciwgbWlwSW50ICk7CgkJaWYgKCBtaXBGID09IDAuMCApIHsKCQkJcmV0dXJuIHZlYzQoIGNvbG9yMCwgMS4wICk7CgkJfSBlbHNlIHsKCQkJdmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApOwoJCQlyZXR1cm4gdmVjNCggbWl4KCBjb2xvcjAsIGNvbG9yMSwgbWlwRiApLCAxLjAgKTsKCQl9Cgl9CiNlbmRpZmAsa009YHZlYzMgdHJhbnNmb3JtZWROb3JtYWwgPSBvYmplY3ROb3JtYWw7CiNpZmRlZiBVU0VfSU5TVEFOQ0lORwoJbWF0MyBtID0gbWF0MyggaW5zdGFuY2VNYXRyaXggKTsKCXRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTsKCXRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsOwojZW5kaWYKdHJhbnNmb3JtZWROb3JtYWwgPSBub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDsKI2lmZGVmIEZMSVBfU0lERUQKCXRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDsKI2VuZGlmCiNpZmRlZiBVU0VfVEFOR0VOVAoJdmVjMyB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAoIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2lmZGVmIEZMSVBfU0lERUQKCQl0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDsKCSNlbmRpZgojZW5kaWZgLEhNPWAjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhczsKI2VuZGlmYCxWTT1gI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCXRyYW5zZm9ybWVkICs9IG5vcm1hbGl6ZSggb2JqZWN0Tm9ybWFsICkgKiAoIHRleHR1cmUyRCggZGlzcGxhY2VtZW50TWFwLCB2VXYgKS54ICogZGlzcGxhY2VtZW50U2NhbGUgKyBkaXNwbGFjZW1lbnRCaWFzICk7CiNlbmRpZmAsR009YCNpZmRlZiBVU0VfRU1JU1NJVkVNQVAKCXZlYzQgZW1pc3NpdmVDb2xvciA9IHRleHR1cmUyRCggZW1pc3NpdmVNYXAsIHZVdiApOwoJdG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiOwojZW5kaWZgLFdNPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDsKI2VuZGlmYCxxTT0iZ2xfRnJhZ0NvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZ2xfRnJhZ0NvbG9yICk7IixYTT1gdmVjNCBMaW5lYXJUb0xpbmVhciggaW4gdmVjNCB2YWx1ZSApIHsKCXJldHVybiB2YWx1ZTsKfQp2ZWM0IExpbmVhclRvc1JHQiggaW4gdmVjNCB2YWx1ZSApIHsKCXJldHVybiB2ZWM0KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzKCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMyggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMyggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTsKfWAsWU09YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmVjMyBjYW1lcmFUb0ZyYWc7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTsKCQl9IGVsc2UgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkjZW5kaWYKCSNlbHNlCgkJdmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7CgkjZWxzZQoJCXZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApCgkJb3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5OwoJI2VuZGlmCiNlbmRpZmAsWk09YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTsKCXVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDsKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7CgkjZWxzZQoJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCSNlbmRpZgoJCiNlbmRpZmAsSk09YCNpZmRlZiBVU0VfRU5WTUFQCgl1bmlmb3JtIGZsb2F0IHJlZmxlY3Rpdml0eTsKCSNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApCgkJI2RlZmluZSBFTlZfV09STERQT1MKCSNlbmRpZgoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbHNlCgkJdmFyeWluZyB2ZWMzIHZSZWZsZWN0OwoJI2VuZGlmCiNlbmRpZmAsJE09YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApCgkJI2RlZmluZSBFTlZfV09STERQT1MKCSNlbmRpZgoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCQoJCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMzIHZSZWZsZWN0OwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCiNlbmRpZmAsS009YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKCSNlbHNlCgkJdmVjMyBjYW1lcmFUb1ZlcnRleDsKCQlpZiAoIGlzT3J0aG9ncmFwaGljICkgewoJCQljYW1lcmFUb1ZlcnRleCA9IG5vcm1hbGl6ZSggdmVjMyggLSB2aWV3TWF0cml4WyAwIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAxIF1bIDIgXSwgLSB2aWV3TWF0cml4WyAyIF1bIDIgXSApICk7CgkJfSBlbHNlIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJdlJlZmxlY3QgPSByZWZsZWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2UmVmbGVjdCA9IHJlZnJhY3QoIGNhbWVyYVRvVmVydGV4LCB3b3JsZE5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxRTT1gI2lmZGVmIFVTRV9GT0cKCXZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56OwojZW5kaWZgLGpNPWAjaWZkZWYgVVNFX0ZPRwoJdmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7CiNlbmRpZmAsdGI9YCNpZmRlZiBVU0VfRk9HCgkjaWZkZWYgRk9HX0VYUDIKCQlmbG9hdCBmb2dGYWN0b3IgPSAxLjAgLSBleHAoIC0gZm9nRGVuc2l0eSAqIGZvZ0RlbnNpdHkgKiB2Rm9nRGVwdGggKiB2Rm9nRGVwdGggKTsKCSNlbHNlCgkJZmxvYXQgZm9nRmFjdG9yID0gc21vb3Roc3RlcCggZm9nTmVhciwgZm9nRmFyLCB2Rm9nRGVwdGggKTsKCSNlbmRpZgoJZ2xfRnJhZ0NvbG9yLnJnYiA9IG1peCggZ2xfRnJhZ0NvbG9yLnJnYiwgZm9nQ29sb3IsIGZvZ0ZhY3RvciApOwojZW5kaWZgLGViPWAjaWZkZWYgVVNFX0ZPRwoJdW5pZm9ybSB2ZWMzIGZvZ0NvbG9yOwoJdmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7CgkjaWZkZWYgRk9HX0VYUDIKCQl1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7CgkjZWxzZQoJCXVuaWZvcm0gZmxvYXQgZm9nTmVhcjsKCQl1bmlmb3JtIGZsb2F0IGZvZ0ZhcjsKCSNlbmRpZgojZW5kaWZgLG5iPWAjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDsKI2VuZGlmCnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHsKCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7Cgl2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApOwoJI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJCXJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTsKCSNlbHNlCgkJcmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTsKCSNlbmRpZgp9YCxpYj1gI2lmZGVmIFVTRV9MSUdIVE1BUAoJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTCgkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwojZW5kaWZgLHJiPWAjaWZkZWYgVVNFX0xJR0hUTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBsaWdodE1hcDsKCXVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7CiNlbmRpZmAsc2I9YHZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApOwpHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6OwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApOwpHZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTsKYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsOwpiYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7CnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTsKCXZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CmZsb2F0IGRvdE5MOwp2ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7Cgl2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQl2SW5kaXJlY3RGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZmAsb2I9YHVuaWZvcm0gYm9vbCByZWNlaXZlU2hhZG93Owp1bmlmb3JtIHZlYzMgYW1iaWVudExpZ2h0Q29sb3I7CnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07CnZlYzMgc2hHZXRJcnJhZGlhbmNlQXQoIGluIHZlYzMgbm9ybWFsLCBpbiB2ZWMzIHNoQ29lZmZpY2llbnRzWyA5IF0gKSB7CglmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56OwoJdmVjMyByZXN1bHQgPSBzaENvZWZmaWNpZW50c1sgMCBdICogMC44ODYyMjc7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDEgXSAqIDIuMCAqIDAuNTExNjY0ICogeTsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAzIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHg7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDQgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDYgXSAqICggMC43NDMxMjUgKiB6ICogeiAtIDAuMjQ3NzA4ICk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDcgXSAqIDIuMCAqIDAuNDI5MDQzICogeCAqIHo7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7CglyZXR1cm4gcmVzdWx0Owp9CnZlYzMgZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgbGlnaHRQcm9iZVsgOSBdLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCXZlYzMgaXJyYWRpYW5jZSA9IHNoR2V0SXJyYWRpYW5jZUF0KCB3b3JsZE5vcm1hbCwgbGlnaHRQcm9iZSApOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KdmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkgewoJdmVjMyBpcnJhZGlhbmNlID0gYW1iaWVudExpZ2h0Q29sb3I7CglyZXR1cm4gaXJyYWRpYW5jZTsKfQpmbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHsKCSNpZiBkZWZpbmVkICggUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyApCgkJZmxvYXQgZGlzdGFuY2VGYWxsb2ZmID0gMS4wIC8gbWF4KCBwb3coIGxpZ2h0RGlzdGFuY2UsIGRlY2F5RXhwb25lbnQgKSwgMC4wMSApOwoJCWlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgKSB7CgkJCWRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApOwoJCX0KCQlyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmOwoJI2Vsc2UKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICYmIGRlY2F5RXhwb25lbnQgPiAwLjAgKSB7CgkJCXJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7CgkJfQoJCXJldHVybiAxLjA7CgkjZW5kaWYKfQpmbG9hdCBnZXRTcG90QXR0ZW51YXRpb24oIGNvbnN0IGluIGZsb2F0IGNvbmVDb3NpbmUsIGNvbnN0IGluIGZsb2F0IHBlbnVtYnJhQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBhbmdsZUNvc2luZSApIHsKCXJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTsKfQojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCglzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCX07Cgl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHQgZGlyZWN0aW9uYWxMaWdodHNbIE5VTV9ESVJfTElHSFRTIF07Cgl2b2lkIGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBjb25zdCBpbiBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCWxpZ2h0LmNvbG9yID0gZGlyZWN0aW9uYWxMaWdodC5jb2xvcjsKCQlsaWdodC5kaXJlY3Rpb24gPSBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbjsKCQlsaWdodC52aXNpYmxlID0gdHJ1ZTsKCX0KI2VuZGlmCiNpZiBOVU1fUE9JTlRfTElHSFRTID4gMAoJc3RydWN0IFBvaW50TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCX07Cgl1bmlmb3JtIFBvaW50TGlnaHQgcG9pbnRMaWdodHNbIE5VTV9QT0lOVF9MSUdIVFMgXTsKCXZvaWQgZ2V0UG9pbnRMaWdodEluZm8oIGNvbnN0IGluIFBvaW50TGlnaHQgcG9pbnRMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgb3V0IEluY2lkZW50TGlnaHQgbGlnaHQgKSB7CgkJdmVjMyBsVmVjdG9yID0gcG9pbnRMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQlsaWdodC5jb2xvciA9IHBvaW50TGlnaHQuY29sb3I7CgkJbGlnaHQuY29sb3IgKj0gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggbGlnaHREaXN0YW5jZSwgcG9pbnRMaWdodC5kaXN0YW5jZSwgcG9pbnRMaWdodC5kZWNheSApOwoJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7Cgl9CiNlbmRpZgojaWYgTlVNX1NQT1RfTElHSFRTID4gMAoJc3RydWN0IFNwb3RMaWdodCB7CgkJdmVjMyBwb3NpdGlvbjsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIGNvbG9yOwoJCWZsb2F0IGRpc3RhbmNlOwoJCWZsb2F0IGRlY2F5OwoJCWZsb2F0IGNvbmVDb3M7CgkJZmxvYXQgcGVudW1icmFDb3M7Cgl9OwoJdW5pZm9ybSBTcG90TGlnaHQgc3BvdExpZ2h0c1sgTlVNX1NQT1RfTElHSFRTIF07Cgl2b2lkIGdldFNwb3RMaWdodEluZm8oIGNvbnN0IGluIFNwb3RMaWdodCBzcG90TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIGdlb21ldHJ5LnBvc2l0aW9uOwoJCWxpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggbFZlY3RvciApOwoJCWZsb2F0IGFuZ2xlQ29zID0gZG90KCBsaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBzcG90QXR0ZW51YXRpb24gPSBnZXRTcG90QXR0ZW51YXRpb24oIHNwb3RMaWdodC5jb25lQ29zLCBzcG90TGlnaHQucGVudW1icmFDb3MsIGFuZ2xlQ29zICk7CgkJaWYgKCBzcG90QXR0ZW51YXRpb24gPiAwLjAgKSB7CgkJCWZsb2F0IGxpZ2h0RGlzdGFuY2UgPSBsZW5ndGgoIGxWZWN0b3IgKTsKCQkJbGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247CgkJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHNwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5ICk7CgkJCWxpZ2h0LnZpc2libGUgPSAoIGxpZ2h0LmNvbG9yICE9IHZlYzMoIDAuMCApICk7CgkJfSBlbHNlIHsKCQkJbGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTsKCQkJbGlnaHQudmlzaWJsZSA9IGZhbHNlOwoJCX0KCX0KI2VuZGlmCiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXN0cnVjdCBSZWN0QXJlYUxpZ2h0IHsKCQl2ZWMzIGNvbG9yOwoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBoYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0OwoJfTsKCXVuaWZvcm0gc2FtcGxlcjJEIGx0Y18xOwl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjsKCXVuaWZvcm0gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0c1sgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgXTsKI2VuZGlmCiNpZiBOVU1fSEVNSV9MSUdIVFMgPiAwCglzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHsKCQl2ZWMzIGRpcmVjdGlvbjsKCQl2ZWMzIHNreUNvbG9yOwoJCXZlYzMgZ3JvdW5kQ29sb3I7Cgl9OwoJdW5pZm9ybSBIZW1pc3BoZXJlTGlnaHQgaGVtaXNwaGVyZUxpZ2h0c1sgTlVNX0hFTUlfTElHSFRTIF07Cgl2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkgewoJCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTsKCQlmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41OwoJCXZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7CgkJcmV0dXJuIGlycmFkaWFuY2U7Cgl9CiNlbmRpZmAsYWI9YCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkKCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZSQUNUSU9OCgkJdW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87CgkjZW5kaWYKCXZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7CgkJI2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKQoJCQl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJCXZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHdvcmxkTm9ybWFsLCAxLjAgKTsKCQkJcmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5OwoJCSNlbHNlCgkJCXJldHVybiB2ZWMzKCAwLjAgKTsKCQkjZW5kaWYKCX0KCXZlYzMgZ2V0SUJMUmFkaWFuY2UoIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCQkjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJCXZlYzMgcmVmbGVjdFZlYzsKCQkJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT04KCQkJCXJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApOwoJCQkJcmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTsKCQkJI2Vsc2UKCQkJCXJlZmxlY3RWZWMgPSByZWZyYWN0KCAtIHZpZXdEaXIsIG5vcm1hbCwgcmVmcmFjdGlvblJhdGlvICk7CgkJCSNlbmRpZgoJCQlyZWZsZWN0VmVjID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggcmVmbGVjdFZlYywgdmlld01hdHJpeCApOwoJCQl2ZWM0IGVudk1hcENvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCByb3VnaG5lc3MgKTsKCQkJcmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTsKCQkjZWxzZQoJCQlyZXR1cm4gdmVjMyggMC4wICk7CgkJI2VuZGlmCgl9CiNlbmRpZmAsbGI9YFRvb25NYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtgLGNiPWB2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKc3RydWN0IFRvb25NYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKfTsKdm9pZCBSRV9EaXJlY3RfVG9vbiggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEdyYWRpZW50SXJyYWRpYW5jZSggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9Ub29uKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1Rvb24KI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9Ub29uCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLHViPWBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWw7Cm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7Cm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjsKbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgPSBzaGluaW5lc3M7Cm1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGggPSBzcGVjdWxhclN0cmVuZ3RoO2AsaGI9YHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwpzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7CglmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwp9Owp2b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X0JsaW5uUGhvbmcKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGZiPWBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsOwptYXRlcmlhbC5kaWZmdXNlQ29sb3IgPSBkaWZmdXNlQ29sb3IucmdiICogKCAxLjAgLSBtZXRhbG5lc3NGYWN0b3IgKTsKdmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApOwpmbG9hdCBnZW9tZXRyeVJvdWdobmVzcyA9IG1heCggbWF4KCBkeHkueCwgZHh5LnkgKSwgZHh5LnogKTsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO21hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApOwojaWZkZWYgSU9SCgkjaWZkZWYgU1BFQ1VMQVIKCQlmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5OwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7CgkJI2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUAoJCQlzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFySW50ZW5zaXR5TWFwLCB2VXYgKS5hOwoJCSNlbmRpZgoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCQlzcGVjdWxhckNvbG9yRmFjdG9yICo9IHRleHR1cmUyRCggc3BlY3VsYXJDb2xvck1hcCwgdlV2ICkucmdiOwoJCSNlbmRpZgoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTsKCSNlbHNlCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSAxLjA7CgkJdmVjMyBzcGVjdWxhckNvbG9yRmFjdG9yID0gdmVjMyggMS4wICk7CgkJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CgkjZW5kaWYKCW1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBpb3IgLSAxLjAgKSAvICggaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7CiNlbHNlCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCB2ZWMzKCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwoJbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVAoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gY2xlYXJjb2F0OwoJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gY2xlYXJjb2F0Um91Z2huZXNzOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJCW1hdGVyaWFsLmNsZWFyY29hdCAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdE1hcCwgdlV2ICkueDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgkJbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9IHRleHR1cmUyRCggY2xlYXJjb2F0Um91Z2huZXNzTWFwLCB2VXYgKS55OwoJI2VuZGlmCgltYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7CW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1heCggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAwLjA1MjUgKTsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTsKI2VuZGlmCiNpZmRlZiBVU0VfU0hFRU4KCW1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJbWF0ZXJpYWwuc2hlZW5Db2xvciAqPSB0ZXh0dXJlMkQoIHNoZWVuQ29sb3JNYXAsIHZVdiApLnJnYjsKCSNlbmRpZgoJbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApOwoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICo9IHRleHR1cmUyRCggc2hlZW5Sb3VnaG5lc3NNYXAsIHZVdiApLmE7CgkjZW5kaWYKI2VuZGlmYCxkYj1gc3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7CglmbG9hdCByb3VnaG5lc3M7Cgl2ZWMzIHNwZWN1bGFyQ29sb3I7CglmbG9hdCBzcGVjdWxhckY5MDsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgY2xlYXJjb2F0OwoJCWZsb2F0IGNsZWFyY29hdFJvdWdobmVzczsKCQl2ZWMzIGNsZWFyY29hdEYwOwoJCWZsb2F0IGNsZWFyY29hdEY5MDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXZlYzMgc2hlZW5Db2xvcjsKCQlmbG9hdCBzaGVlblJvdWdobmVzczsKCSNlbmRpZgp9Owp2ZWMzIGNsZWFyY29hdFNwZWN1bGFyID0gdmVjMyggMC4wICk7CnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApOwpmbG9hdCBJQkxTaGVlbkJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcykgewoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJZmxvYXQgcjIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7CglmbG9hdCBhID0gcm91Z2huZXNzIDwgMC4yNSA/IC0zMzkuMiAqIHIyICsgMTYxLjQgKiByb3VnaG5lc3MgLSAyNS45IDogLTguNDggKiByMiArIDE0LjMgKiByb3VnaG5lc3MgLSA5Ljk1OwoJZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyOwoJZmxvYXQgREcgPSBleHAoIGEgKiBkb3ROViArIGIgKSArICggcm91Z2huZXNzIDwgMC4yNSA/IDAuMCA6IDAuMSAqICggcm91Z2huZXNzIC0gMC4yNSApICk7CglyZXR1cm4gc2F0dXJhdGUoIERHICogUkVDSVBST0NBTF9QSSApOwp9CnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7Cgljb25zdCB2ZWM0IGMwID0gdmVjNCggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTsKCWNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApOwoJdmVjNCByID0gcm91Z2huZXNzICogYzAgKyBjMTsKCWZsb2F0IGEwMDQgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55OwoJdmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3OwoJcmV0dXJuIGZhYjsKfQp2ZWMzIEVudmlyb25tZW50QlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJdmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7CglyZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTsKfQp2b2lkIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlciApIHsKCXZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJdmVjMyBGc3NFc3MgPSBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55OwoJZmxvYXQgRXNzID0gZmFiLnggKyBmYWIueTsKCWZsb2F0IEVtcyA9IDEuMCAtIEVzczsKCXZlYzMgRmF2ZyA9IHNwZWN1bGFyQ29sb3IgKyAoIDEuMCAtIHNwZWN1bGFyQ29sb3IgKSAqIDAuMDQ3NjE5Owl2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTsKCXNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzOwoJbXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtczsKfQojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCgl2b2lkIFJFX0RpcmVjdF9SZWN0QXJlYV9QaHlzaWNhbCggY29uc3QgaW4gUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCQl2ZWMzIG5vcm1hbCA9IGdlb21ldHJ5Lm5vcm1hbDsKCQl2ZWMzIHZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyOwoJCXZlYzMgcG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjsKCQl2ZWMzIGxpZ2h0UG9zID0gcmVjdEFyZWFMaWdodC5wb3NpdGlvbjsKCQl2ZWMzIGhhbGZXaWR0aCA9IHJlY3RBcmVhTGlnaHQuaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodCA9IHJlY3RBcmVhTGlnaHQuaGFsZkhlaWdodDsKCQl2ZWMzIGxpZ2h0Q29sb3IgPSByZWN0QXJlYUxpZ2h0LmNvbG9yOwoJCWZsb2F0IHJvdWdobmVzcyA9IG1hdGVyaWFsLnJvdWdobmVzczsKCQl2ZWMzIHJlY3RDb29yZHNbIDQgXTsKCQlyZWN0Q29vcmRzWyAwIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7CQlyZWN0Q29vcmRzWyAxIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCAtIGhhbGZIZWlnaHQ7CgkJcmVjdENvb3Jkc1sgMiBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0OwoJCXJlY3RDb29yZHNbIDMgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoICsgaGFsZkhlaWdodDsKCQl2ZWMyIHV2ID0gTFRDX1V2KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApOwoJCXZlYzQgdDEgPSB0ZXh0dXJlMkQoIGx0Y18xLCB1diApOwoJCXZlYzQgdDIgPSB0ZXh0dXJlMkQoIGx0Y18yLCB1diApOwoJCW1hdDMgbUludiA9IG1hdDMoCgkJCXZlYzMoIHQxLngsIDAsIHQxLnkgKSwKCQkJdmVjMyggICAgMCwgMSwgICAgMCApLAoJCQl2ZWMzKCB0MS56LCAwLCB0MS53ICkKCQkpOwoJCXZlYzMgZnJlc25lbCA9ICggbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciAqIHQyLnggKyAoIHZlYzMoIDEuMCApIC0gbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApICogdDIueSApOwoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGxpZ2h0Q29sb3IgKiBmcmVzbmVsICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtSW52LCByZWN0Q29vcmRzICk7CgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBsaWdodENvbG9yICogbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogTFRDX0V2YWx1YXRlKCBub3JtYWwsIHZpZXdEaXIsIHBvc2l0aW9uLCBtYXQzKCAxLjAgKSwgcmVjdENvb3JkcyApOwoJfQojZW5kaWYKdm9pZCBSRV9EaXJlY3RfUGh5c2ljYWwoIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBkb3ROTGNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApOwoJCXZlYzMgY2NJcnJhZGlhbmNlID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJCWNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQlzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKfQp2b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHsKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJY2xlYXJjb2F0U3BlY3VsYXIgKz0gY2xlYXJjb2F0UmFkaWFuY2UgKiBFbnZpcm9ubWVudEJSREYoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU0hFRU4KCQlzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7CgkjZW5kaWYKCXZlYzMgc2luZ2xlU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApOwoJdmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlID0gaXJyYWRpYW5jZSAqIFJFQ0lQUk9DQUxfUEk7Cgljb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MsIHNpbmdsZVNjYXR0ZXJpbmcsIG11bHRpU2NhdHRlcmluZyApOwoJdmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZSAqIHNpbmdsZVNjYXR0ZXJpbmc7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9QaHlzaWNhbAojZGVmaW5lIFJFX0RpcmVjdF9SZWN0QXJlYQkJUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwKI2RlZmluZSBSRV9JbmRpcmVjdFNwZWN1bGFyCQlSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsCmZsb2F0IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggY29uc3QgaW4gZmxvYXQgZG90TlYsIGNvbnN0IGluIGZsb2F0IGFtYmllbnRPY2NsdXNpb24sIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCXJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7Cn1gLHBiPWAKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJUG9pbnRMaWdodCBwb2ludExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApCgkJcG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJU3BvdExpZ2h0IHNwb3RMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKQoJCXNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdOwoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApCgkJZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKQoJUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7CgkJcmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07CgkJUkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgl2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CglpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKQoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJCWlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJdmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApOwojZW5kaWZgLG1iPWAjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlICkKCSNpZmRlZiBVU0VfTElHSFRNQVAKCQl2ZWM0IGxpZ2h0TWFwVGV4ZWwgPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJdmVjMyBsaWdodE1hcElycmFkaWFuY2UgPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCQlsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7CgkJI2VuZGlmCgkJaXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7CgkjZW5kaWYKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKSAmJiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQlpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCApOwoJI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsZ2I9YCNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdERpZmZ1c2UgKQoJUkVfSW5kaXJlY3REaWZmdXNlKCBpcnJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7CiNlbmRpZgojaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApCglSRV9JbmRpcmVjdFNwZWN1bGFyKCByYWRpYW5jZSwgaWJsSXJyYWRpYW5jZSwgY2xlYXJjb2F0UmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKI2VuZGlmYCx4Yj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJZ2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41OwojZW5kaWZgLHliPWAjaWYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGICkgJiYgZGVmaW5lZCggVVNFX0xPR0RFUFRIQlVGX0VYVCApCgl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7Cgl2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7Cgl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwojZW5kaWZgLHZiPWAjaWZkZWYgVVNFX0xPR0RFUFRIQlVGCgkjaWZkZWYgVVNFX0xPR0RFUFRIQlVGX0VYVAoJCXZhcnlpbmcgZmxvYXQgdkZyYWdEZXB0aDsKCQl2YXJ5aW5nIGZsb2F0IHZJc1BlcnNwZWN0aXZlOwoJI2Vsc2UKCQl1bmlmb3JtIGZsb2F0IGxvZ0RlcHRoQnVmRkM7CgkjZW5kaWYKI2VuZGlmYCxfYj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udzsKCQl2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTsKCSNlbHNlCgkJaWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7CgkJCWdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDsKCQkJZ2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53OwoJCX0KCSNlbmRpZgojZW5kaWZgLHdiPWAjaWZkZWYgVVNFX01BUAoJdmVjNCBzYW1wbGVkRGlmZnVzZUNvbG9yID0gdGV4dHVyZTJEKCBtYXAsIHZVdiApOwoJI2lmZGVmIERFQ09ERV9WSURFT19URVhUVVJFCgkJc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQoIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzMoIDAuMDUyMTMyNzAxNCApLCB2ZWMzKCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMyggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzMoIDAuMDQwNDUgKSApICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci53ICk7CgkjZW5kaWYKCWRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yOwojZW5kaWZgLE1iPWAjaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWZgLGJiPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCglkaWZmdXNlQ29sb3IgKj0gdGV4dHVyZTJEKCBtYXAsIHV2ICk7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7CiNlbmRpZmAsU2I9YCNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQICkKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhbHBoYU1hcDsKI2VuZGlmYCxFYj1gZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzOwojaWZkZWYgVVNFX01FVEFMTkVTU01BUAoJdmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTsKCW1ldGFsbmVzc0ZhY3RvciAqPSB0ZXhlbE1ldGFsbmVzcy5iOwojZW5kaWZgLFRiPWAjaWZkZWYgVVNFX01FVEFMTkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwOwojZW5kaWZgLEFiPWAjaWZkZWYgVVNFX01PUlBITk9STUFMUwoJb2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJaWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTsKCQl9CgkjZWxzZQoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTsKCSNlbmRpZgojZW5kaWZgLENiPWAjaWZkZWYgVVNFX01PUlBIVEFSR0VUUwoJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07CgkJdW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlOwoJCXVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTsKCQl2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkgewoJCQlmbG9hdCB0ZXhlbEluZGV4ID0gZmxvYXQoIHZlcnRleEluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICk7CgkJCWZsb2F0IHkgPSBmbG9vciggdGV4ZWxJbmRleCAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnggKTsKCQkJZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDsKCQkJdmVjMyBtb3JwaFVWID0gdmVjMyggKCB4ICsgMC41ICkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54LCB5IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueSwgbW9ycGhUYXJnZXRJbmRleCApOwoJCQlyZXR1cm4gdGV4dHVyZSggbW9ycGhUYXJnZXRzVGV4dHVyZSwgbW9ycGhVViApLnh5ejsKCQl9CgkjZWxzZQoJCSNpZm5kZWYgVVNFX01PUlBITk9STUFMUwoJCQl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgOCBdOwoJCSNlbHNlCgkJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmYCxSYj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbHNlCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbmRpZgoJCX0KCSNlbHNlCgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsTGI9YGZsb2F0IGZhY2VEaXJlY3Rpb24gPSBnbF9Gcm9udEZhY2luZyA/IDEuMCA6IC0gMS4wOwojaWZkZWYgRkxBVF9TSEFERUQKCXZlYzMgZmR4ID0gdmVjMyggZEZkeCggdlZpZXdQb3NpdGlvbi54ICksIGRGZHgoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7Cgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggY3Jvc3MoIGZkeCwgZmR5ICkgKTsKI2Vsc2UKCXZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCB2Tm9ybWFsICk7CgkjaWZkZWYgRE9VQkxFX1NJREVECgkJbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmVjMyB0YW5nZW50ID0gbm9ybWFsaXplKCB2VGFuZ2VudCApOwoJCXZlYzMgYml0YW5nZW50ID0gbm9ybWFsaXplKCB2Qml0YW5nZW50ICk7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJCWJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247CgkJI2VuZGlmCgkJI2lmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApCgkJCW1hdDMgdlRCTiA9IG1hdDMoIHRhbmdlbnQsIGJpdGFuZ2VudCwgbm9ybWFsICk7CgkJI2VuZGlmCgkjZW5kaWYKI2VuZGlmCnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7YCxQYj1gI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUAoJbm9ybWFsID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCSNpZmRlZiBGTElQX1NJREVECgkJbm9ybWFsID0gLSBub3JtYWw7CgkjZW5kaWYKCSNpZmRlZiBET1VCTEVfU0lERUQKCQlub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uOwoJI2VuZGlmCglub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApOwojZWxpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgltYXBOLnh5ICo9IG5vcm1hbFNjYWxlOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJbm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogbWFwTiApOwoJI2Vsc2UKCQlub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTsKCSNlbmRpZgojZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApCglub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTsKI2VuZGlmYCxEYj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxJYj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxOYj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdk5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTsKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTsKCQl2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApOwoJI2VuZGlmCiNlbmRpZmAsRmI9YCNpZmRlZiBVU0VfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7CiNlbmRpZgojaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCgl1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OwojZW5kaWYKI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApICkKCXZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApOwoJCXZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7CgkJdmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTsKCQl2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApOwoJCXZlYzMgTiA9IHN1cmZfbm9ybTsKCQl2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApOwoJCXZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7CgkJdmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDsKCQl2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55OwoJCWZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7CgkJZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7Cgl9CiNlbmRpZmAsemI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl2ZWMzIGNsZWFyY29hdE5vcm1hbCA9IGdlb21ldHJ5Tm9ybWFsOwojZW5kaWZgLFViPWAjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAKCXZlYzMgY2xlYXJjb2F0TWFwTiA9IHRleHR1cmUyRCggY2xlYXJjb2F0Tm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7CgljbGVhcmNvYXRNYXBOLnh5ICo9IGNsZWFyY29hdE5vcm1hbFNjYWxlOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJY2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApOwoJI2Vsc2UKCQljbGVhcmNvYXROb3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBjbGVhcmNvYXROb3JtYWwsIGNsZWFyY29hdE1hcE4sIGZhY2VEaXJlY3Rpb24gKTsKCSNlbmRpZgojZW5kaWZgLEJiPWAjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTsKI2VuZGlmYCxPYj1gI2lmZGVmIE9QQVFVRQpkaWZmdXNlQ29sb3IuYSA9IDEuMDsKI2VuZGlmCiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCmRpZmZ1c2VDb2xvci5hICo9IHRyYW5zbWlzc2lvbkFscGhhICsgMC4xOwojZW5kaWYKZ2xfRnJhZ0NvbG9yID0gdmVjNCggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtgLGtiPWB2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7CglyZXR1cm4gbm9ybWFsaXplKCBub3JtYWwgKSAqIDAuNSArIDAuNTsKfQp2ZWMzIHVucGFja1JHQlRvTm9ybWFsKCBjb25zdCBpbiB2ZWMzIHJnYiApIHsKCXJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wOwp9CmNvbnN0IGZsb2F0IFBhY2tVcHNjYWxlID0gMjU2LiAvIDI1NS47Y29uc3QgZmxvYXQgVW5wYWNrRG93bnNjYWxlID0gMjU1LiAvIDI1Ni47CmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7CmNvbnN0IHZlYzQgVW5wYWNrRmFjdG9ycyA9IFVucGFja0Rvd25zY2FsZSAvIHZlYzQoIFBhY2tGYWN0b3JzLCAxLiApOwpjb25zdCBmbG9hdCBTaGlmdFJpZ2h0OCA9IDEuIC8gMjU2LjsKdmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7Cgl2ZWM0IHIgPSB2ZWM0KCBmcmFjdCggdiAqIFBhY2tGYWN0b3JzICksIHYgKTsKCXIueXp3IC09IHIueHl6ICogU2hpZnRSaWdodDg7CXJldHVybiByICogUGFja1Vwc2NhbGU7Cn0KZmxvYXQgdW5wYWNrUkdCQVRvRGVwdGgoIGNvbnN0IGluIHZlYzQgdiApIHsKCXJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTsKfQp2ZWM0IHBhY2sySGFsZlRvUkdCQSggdmVjMiB2ICkgewoJdmVjNCByID0gdmVjNCggdi54LCBmcmFjdCggdi54ICogMjU1LjAgKSwgdi55LCBmcmFjdCggdi55ICogMjU1LjAgKSApOwoJcmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTsKfQp2ZWMyIHVucGFja1JHQkFUbzJIYWxmKCB2ZWM0IHYgKSB7CglyZXR1cm4gdmVjMiggdi54ICsgKCB2LnkgLyAyNTUuMCApLCB2LnogKyAoIHYudyAvIDI1NS4wICkgKTsKfQpmbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCB2aWV3WiArIG5lYXIgKSAvICggbmVhciAtIGZhciApOwp9CmZsb2F0IG9ydGhvZ3JhcGhpY0RlcHRoVG9WaWV3WiggY29uc3QgaW4gZmxvYXQgbGluZWFyQ2xpcFosIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjsKfQpmbG9hdCB2aWV3WlRvUGVyc3BlY3RpdmVEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoICggbmVhciArIHZpZXdaICkgKiBmYXIgKSAvICggKCBmYXIgLSBuZWFyICkgKiB2aWV3WiApOwp9CmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggbmVhciAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIGludkNsaXBaIC0gZmFyICk7Cn1gLEhiPWAjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQQoJZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTsKI2VuZGlmYCxWYj1gdmVjNCBtdlBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwojaWZkZWYgVVNFX0lOU1RBTkNJTkcKCW12UG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIG12UG9zaXRpb247CiNlbmRpZgptdlBvc2l0aW9uID0gbW9kZWxWaWV3TWF0cml4ICogbXZQb3NpdGlvbjsKZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtgLEdiPWAjaWZkZWYgRElUSEVSSU5HCglnbF9GcmFnQ29sb3IucmdiID0gZGl0aGVyaW5nKCBnbF9GcmFnQ29sb3IucmdiICk7CiNlbmRpZmAsV2I9YCNpZmRlZiBESVRIRVJJTkcKCXZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkgewoJCWZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTsKCQl2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApOwoJCWRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7CgkJcmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjsKCX0KI2VuZGlmYCxxYj1gZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzOwojaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTsKCXJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nOwojZW5kaWZgLFhiPWAjaWZkZWYgVVNFX1JPVUdITkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgcm91Z2huZXNzTWFwOwojZW5kaWZgLFliPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYUZhcjsKCQl9OwoJCXVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHsKCQlyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTsKCX0KCXZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkgewoJCXJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTsKCX0KCWZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApewoJCWZsb2F0IG9jY2x1c2lvbiA9IDEuMDsKCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApOwoJCWZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7CgkJaWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHsKCQkJZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggOwoJCQlmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApOwoJCQlmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApOwkJCXNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApOwkJCW9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApOwoJCX0KCQlyZXR1cm4gb2NjbHVzaW9uOwoJfQoJZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHsKCQlmbG9hdCBzaGFkb3cgPSAxLjA7CgkJc2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7CgkJc2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzOwoJCWJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTsKCQlib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7CgkJYnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApOwoJCWJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7CgkJaWYgKCBmcnVzdHVtVGVzdCApIHsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MiA9IGR4MCAvIDIuMDsKCQkJZmxvYXQgZHkyID0gZHkwIC8gMi4wOwoJCQlmbG9hdCBkeDMgPSBkeDEgLyAyLjA7CgkJCWZsb2F0IGR5MyA9IGR5MSAvIDIuMDsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56ICkKCQkJKSAqICggMS4wIC8gMTcuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4ID0gdGV4ZWxTaXplLng7CgkJCWZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7CgkJCXZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTsKCQkJdmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApOwoJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgZi55ICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJc2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2Vsc2UKCQkJc2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbmRpZgoJCX0KCQlyZXR1cm4gc2hhZG93OwoJfQoJdmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkgewoJCXZlYzMgYWJzViA9IGFicyggdiApOwoJCWZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApOwoJCWFic1YgKj0gc2NhbGVUb0N1YmU7CgkJdiAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApOwoJCXZlYzIgcGxhbmFyID0gdi54eTsKCQlmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZOwoJCWZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDsKCQlpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7CgkJCWlmICggdi56ID4gMC4wICkKCQkJCXBsYW5hci54ID0gNC4wIC0gdi54OwoJCX0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7CgkJCXBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDsKCQl9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApOwoJCQlwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wOwoJCQlwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wOwoJCX0KCQlyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7Cgl9CglmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHsKCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApOwoJCXZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6OwoJCWZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7CQlkcCArPSBzaGFkb3dCaWFzOwoJCXZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJdmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55OwoJCQlyZXR1cm4gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxzZQoJCQlyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCxaYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJfTsKCQl1bmlmb3JtIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHBvaW50U2hhZG93TWF0cml4WyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2UG9pbnRTaGFkb3dDb29yZFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFOZWFyOwoJCQlmbG9hdCBzaGFkb3dDYW1lcmFGYXI7CgkJfTsKCQl1bmlmb3JtIFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvd3NbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkjZW5kaWYKI2VuZGlmYCxKYj1gI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCXZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjsKCSNlbmRpZgoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogZGlyZWN0aW9uYWxMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7CgkJdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSA9IGRpcmVjdGlvbmFsU2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBzcG90TGlnaHRTaGFkb3dzWyBpIF0uc2hhZG93Tm9ybWFsQmlhcywgMCApOwoJCXZTcG90U2hhZG93Q29vcmRbIGkgXSA9IHNwb3RTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzaGFkb3dXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbiArIHZlYzQoIHNoYWRvd1dvcmxkTm9ybWFsICogcG9pbnRMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7CgkJdlBvaW50U2hhZG93Q29vcmRbIGkgXSA9IHBvaW50U2hhZG93TWF0cml4WyBpIF0gKiBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgojZW5kaWZgLCRiPWBmbG9hdCBnZXRTaGFkb3dNYXNrKCkgewoJZmxvYXQgc2hhZG93ID0gMS4wOwoJI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2VuZGlmCglyZXR1cm4gc2hhZG93Owp9YCxLYj1gI2lmZGVmIFVTRV9TS0lOTklORwoJbWF0NCBib25lTWF0WCA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC54ICk7CgltYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTsKCW1hdDQgYm9uZU1hdFogPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueiApOwoJbWF0NCBib25lTWF0VyA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC53ICk7CiNlbmRpZmAsUWI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCXVuaWZvcm0gbWF0NCBiaW5kTWF0cml4OwoJdW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlOwoJI2lmZGVmIEJPTkVfVEVYVFVSRQoJCXVuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlOwoJCXVuaWZvcm0gaW50IGJvbmVUZXh0dXJlU2l6ZTsKCQltYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7CgkJCWZsb2F0IGogPSBpICogNC4wOwoJCQlmbG9hdCB4ID0gbW9kKCBqLCBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTsKCQkJZmxvYXQgeSA9IGZsb29yKCBqIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7CgkJCWZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApOwoJCQlmbG9hdCBkeSA9IDEuMCAvIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKTsKCQkJeSA9IGR5ICogKCB5ICsgMC41ICk7CgkJCXZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTsKCQkJdmVjNCB2MiA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMS41ICksIHkgKSApOwoJCQl2ZWM0IHYzID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAyLjUgKSwgeSApICk7CgkJCXZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTsKCQkJbWF0NCBib25lID0gbWF0NCggdjEsIHYyLCB2MywgdjQgKTsKCQkJcmV0dXJuIGJvbmU7CgkJfQoJI2Vsc2UKCQl1bmlmb3JtIG1hdDQgYm9uZU1hdHJpY2VzWyBNQVhfQk9ORVMgXTsKCQltYXQ0IGdldEJvbmVNYXRyaXgoIGNvbnN0IGluIGZsb2F0IGkgKSB7CgkJCW1hdDQgYm9uZSA9IGJvbmVNYXRyaWNlc1sgaW50KGkpIF07CgkJCXJldHVybiBib25lOwoJCX0KCSNlbmRpZgojZW5kaWZgLGpiPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwoJdmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7Cglza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDsKCXNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55OwoJc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7Cglza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudzsKCXRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7CiNlbmRpZmAsdDE9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnggKiBib25lTWF0WDsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC55ICogYm9uZU1hdFk7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LncgKiBib25lTWF0VzsKCXNraW5NYXRyaXggPSBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBiaW5kTWF0cml4OwoJb2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlvYmplY3RUYW5nZW50ID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6OwoJI2VuZGlmCiNlbmRpZmAsZTE9YGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7CiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVAKCXZlYzQgdGV4ZWxTcGVjdWxhciA9IHRleHR1cmUyRCggc3BlY3VsYXJNYXAsIHZVdiApOwoJc3BlY3VsYXJTdHJlbmd0aCA9IHRleGVsU3BlY3VsYXIucjsKI2Vsc2UKCXNwZWN1bGFyU3RyZW5ndGggPSAxLjA7CiNlbmRpZmAsbjE9YCNpZmRlZiBVU0VfU1BFQ1VMQVJNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwOwojZW5kaWZgLGkxPWAjaWYgZGVmaW5lZCggVE9ORV9NQVBQSU5HICkKCWdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApOwojZW5kaWZgLHIxPWAjaWZuZGVmIHNhdHVyYXRlCiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKQojZW5kaWYKdW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlOwp2ZWMzIExpbmVhclRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJcmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjsKfQp2ZWMzIFJlaW5oYXJkVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlOwoJcmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7Cn0KdmVjMyBPcHRpbWl6ZWRDaW5lb25Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7Cgljb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTsKCXJldHVybiBwb3coICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMC41ICkgKSAvICggY29sb3IgKiAoIDYuMiAqIGNvbG9yICsgMS43ICkgKyAwLjA2ICksIHZlYzMoIDIuMiApICk7Cn0KdmVjMyBSUlRBbmRPRFRGaXQoIHZlYzMgdiApIHsKCXZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3OwoJdmVjMyBiID0gdiAqICggMC45ODM3MjkgKiB2ICsgMC40MzI5NTEwICkgKyAwLjIzODA4MTsKCXJldHVybiBhIC8gYjsKfQp2ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCWNvbnN0IG1hdDMgQUNFU0lucHV0TWF0ID0gbWF0MygKCQl2ZWMzKCAwLjU5NzE5LCAwLjA3NjAwLCAwLjAyODQwICksCQl2ZWMzKCAwLjM1NDU4LCAwLjkwODM0LCAwLjEzMzgzICksCgkJdmVjMyggMC4wNDgyMywgMC4wMTU2NiwgMC44Mzc3NyApCgkpOwoJY29uc3QgbWF0MyBBQ0VTT3V0cHV0TWF0ID0gbWF0MygKCQl2ZWMzKCAgMS42MDQ3NSwgLTAuMTAyMDgsIC0wLjAwMzI3ICksCQl2ZWMzKCAtMC41MzEwOCwgIDEuMTA4MTMsIC0wLjA3Mjc2ICksCgkJdmVjMyggLTAuMDczNjcsIC0wLjAwNjA1LCAgMS4wNzYwMiApCgkpOwoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZSAvIDAuNjsKCWNvbG9yID0gQUNFU0lucHV0TWF0ICogY29sb3I7Cgljb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTsKCWNvbG9yID0gQUNFU091dHB1dE1hdCAqIGNvbG9yOwoJcmV0dXJuIHNhdHVyYXRlKCBjb2xvciApOwp9CnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfWAsczE9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCglmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDsKCWZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjsKCWZsb2F0IHRoaWNrbmVzc0ZhY3RvciA9IHRoaWNrbmVzczsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXRoaWNrbmVzc0ZhY3RvciAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZzsKCSNlbmRpZgoJdmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjsKCXZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTsKCXZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJdmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKAoJCW4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwKCQlwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3RvciwKCQlhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7Cgl0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgdHJhbnNtaXNzaW9uRmFjdG9yICk7Cgl0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKI2VuZGlmYCxvMT1gI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uOwoJdW5pZm9ybSBmbG9hdCB0aGlja25lc3M7Cgl1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2U7Cgl1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDsKCSNlbmRpZgoJdW5pZm9ybSB2ZWMyIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOwoJdW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDsKCXVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsKCXVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OwoJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJdmVjMyBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCApIHsKCQl2ZWMzIHJlZnJhY3Rpb25WZWN0b3IgPSByZWZyYWN0KCAtIHYsIG5vcm1hbGl6ZSggbiApLCAxLjAgLyBpb3IgKTsKCQl2ZWMzIG1vZGVsU2NhbGU7CgkJbW9kZWxTY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS55ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMSBdLnh5eiApICk7CgkJbW9kZWxTY2FsZS56ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMiBdLnh5eiApICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggcmVmcmFjdGlvblZlY3RvciApICogdGhpY2tuZXNzICogbW9kZWxTY2FsZTsKCX0KCWZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkgewoJCXJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApOwoJfQoJdmVjNCBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGNvbnN0IGluIHZlYzIgZnJhZ0Nvb3JkLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlmbG9hdCBmcmFtZWJ1ZmZlckxvZCA9IGxvZzIoIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnggKSAqIGFwcGx5SW9yVG9Sb3VnaG5lc3MoIHJvdWdobmVzcywgaW9yICk7CgkJI2lmZGVmIFRFWFRVUkVfTE9EX0VYVAoJCQlyZXR1cm4gdGV4dHVyZTJETG9kRVhUKCB0cmFuc21pc3Npb25TYW1wbGVyTWFwLCBmcmFnQ29vcmQueHksIGZyYW1lYnVmZmVyTG9kICk7CgkJI2Vsc2UKCQkJcmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbmRpZgoJfQoJdmVjMyBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCBjb25zdCBpbiB2ZWMzIHJhZGlhbmNlLCBjb25zdCBpbiBmbG9hdCB0cmFuc21pc3Npb25EaXN0YW5jZSwgY29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkgewoJCWlmICggYXR0ZW51YXRpb25EaXN0YW5jZSA9PSAwLjAgKSB7CgkJCXJldHVybiByYWRpYW5jZTsKCQl9IGVsc2UgewoJCQl2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJCQl2ZWMzIHRyYW5zbWl0dGFuY2UgPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7CQkJcmV0dXJuIHRyYW5zbWl0dGFuY2UgKiByYWRpYW5jZTsKCQl9Cgl9Cgl2ZWM0IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oIGNvbnN0IGluIHZlYzMgbiwgY29uc3QgaW4gdmVjMyB2LCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yLAoJCWNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIHZlYzMgcG9zaXRpb24sIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXgsCgkJY29uc3QgaW4gbWF0NCB2aWV3TWF0cml4LCBjb25zdCBpbiBtYXQ0IHByb2pNYXRyaXgsIGNvbnN0IGluIGZsb2F0IGlvciwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLAoJCWNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQl2ZWMzIHRyYW5zbWlzc2lvblJheSA9IGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggbiwgdiwgdGhpY2tuZXNzLCBpb3IsIG1vZGVsTWF0cml4ICk7CgkJdmVjMyByZWZyYWN0ZWRSYXlFeGl0ID0gcG9zaXRpb24gKyB0cmFuc21pc3Npb25SYXk7CgkJdmVjNCBuZGNQb3MgPSBwcm9qTWF0cml4ICogdmlld01hdHJpeCAqIHZlYzQoIHJlZnJhY3RlZFJheUV4aXQsIDEuMCApOwoJCXZlYzIgcmVmcmFjdGlvbkNvb3JkcyA9IG5kY1Bvcy54eSAvIG5kY1Bvcy53OwoJCXJlZnJhY3Rpb25Db29yZHMgKz0gMS4wOwoJCXJlZnJhY3Rpb25Db29yZHMgLz0gMi4wOwoJCXZlYzQgdHJhbnNtaXR0ZWRMaWdodCA9IGdldFRyYW5zbWlzc2lvblNhbXBsZSggcmVmcmFjdGlvbkNvb3Jkcywgcm91Z2huZXNzLCBpb3IgKTsKCQl2ZWMzIGF0dGVudWF0ZWRDb2xvciA9IGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHRyYW5zbWl0dGVkTGlnaHQucmdiLCBsZW5ndGgoIHRyYW5zbWlzc2lvblJheSApLCBhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7CgkJdmVjMyBGID0gRW52aXJvbm1lbnRCUkRGKCBuLCB2LCBzcGVjdWxhckNvbG9yLCBzcGVjdWxhckY5MCwgcm91Z2huZXNzICk7CgkJcmV0dXJuIHZlYzQoICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTsKCX0KI2VuZGlmYCxhMT1gI2lmICggZGVmaW5lZCggVVNFX1VWICkgJiYgISBkZWZpbmVkKCBVVlNfVkVSVEVYX09OTFkgKSApCgl2YXJ5aW5nIHZlYzIgdlV2OwojZW5kaWZgLGwxPWAjaWZkZWYgVVNFX1VWCgkjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZCgkJdmVjMiB2VXY7CgkjZWxzZQoJCXZhcnlpbmcgdmVjMiB2VXY7CgkjZW5kaWYKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmYCxjMT1gI2lmZGVmIFVTRV9VVgoJdlV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIHV2LCAxICkgKS54eTsKI2VuZGlmYCx1MT1gI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApCgl2YXJ5aW5nIHZlYzIgdlV2MjsKI2VuZGlmYCxoMT1gI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApCglhdHRyaWJ1dGUgdmVjMiB1djI7Cgl2YXJ5aW5nIHZlYzIgdlV2MjsKCXVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07CiNlbmRpZmAsZjE9YCNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKQoJdlV2MiA9ICggdXYyVHJhbnNmb3JtICogdmVjMyggdXYyLCAxICkgKS54eTsKI2VuZGlmYCxkMT1gI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkKCBESVNUQU5DRSApIHx8IGRlZmluZWQgKCBVU0VfU0hBRE9XTUFQICkgfHwgZGVmaW5lZCAoIFVTRV9UUkFOU01JU1NJT04gKQoJdmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwoJI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgkJd29ybGRQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjsKCSNlbmRpZgoJd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjsKI2VuZGlmYCxwMT1gdmFyeWluZyB2ZWMyIHZVdjsKdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwp2b2lkIG1haW4oKSB7Cgl2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5OwoJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTsKfWAsbTE9YHVuaWZvcm0gc2FtcGxlcjJEIHQyRDsKdmFyeWluZyB2ZWMyIHZVdjsKdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0MkQsIHZVdiApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsZzE9YHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJZ2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7Cn1gLHgxPWAjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50Pgp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCXZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJZ2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7CglnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5OwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAseTE9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4KdmFyeWluZyB2ZWMyIHZIaWdoUHJlY2lzaW9uWlc7CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2lmZGVmIFVTRV9ESVNQTEFDRU1FTlRNQVAKCQkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2VuZGlmCgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZIaWdoUHJlY2lzaW9uWlcgPSBnbF9Qb3NpdGlvbi56dzsKfWAsdjE9YCNpZiBERVBUSF9QQUNLSU5HID09IDMyMDAKCXVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2YXJ5aW5nIHZlYzIgdkhpZ2hQcmVjaXNpb25aVzsKdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwCgkJZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5OwoJI2VuZGlmCgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCWZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTsKCSNpZiBERVBUSF9QQUNLSU5HID09IDMyMDAKCQlnbF9GcmFnQ29sb3IgPSB2ZWM0KCB2ZWMzKCAxLjAgLSBmcmFnQ29vcmRaICksIG9wYWNpdHkgKTsKCSNlbGlmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMQoJCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZnJhZ0Nvb3JkWiApOwoJI2VuZGlmCn1gLF8xPWAjZGVmaW5lIERJU1RBTkNFCnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKfWAsdzE9YCNkZWZpbmUgRElTVEFOQ0UKdW5pZm9ybSB2ZWMzIHJlZmVyZW5jZVBvc2l0aW9uOwp1bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTsKdW5pZm9ybSBmbG9hdCBmYXJEaXN0YW5jZTsKdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4gKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggMS4wICk7CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCWZsb2F0IGRpc3QgPSBsZW5ndGgoIHZXb3JsZFBvc2l0aW9uIC0gcmVmZXJlbmNlUG9zaXRpb24gKTsKCWRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTsKCWRpc3QgPSBzYXR1cmF0ZSggZGlzdCApOwoJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBkaXN0ICk7Cn1gLE0xPWB2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgp2b2lkIG1haW4oKSB7Cgl2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApOwoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KfWAsYjE9YHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxTMT1gdW5pZm9ybSBmbG9hdCBzY2FsZTsKYXR0cmlidXRlIGZsb2F0IGxpbmVEaXN0YW5jZTsKdmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7Cgl2TGluZURpc3RhbmNlID0gc2NhbGUgKiBsaW5lRGlzdGFuY2U7CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsRTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnVuaWZvcm0gZmxvYXQgZGFzaFNpemU7CnVuaWZvcm0gZmxvYXQgdG90YWxTaXplOwp2YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+CglpZiAoIG1vZCggdkxpbmVEaXN0YW5jZSwgdG90YWxTaXplICkgPiBkYXNoU2l6ZSApIHsKCQlkaXNjYXJkOwoJfQoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+Cn1gLFQxPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKQoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxBMT1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxzcGVjdWxhcm1hcF9mcmFnbWVudD4KCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7CgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsPSB0ZXh0dXJlMkQoIGxpZ2h0TWFwLCB2VXYyICk7CgkJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2ZWMzKCAxLjAgKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGRpZmZ1c2VDb2xvci5yZ2I7Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxDMT1gI2RlZmluZSBMQU1CRVJUCnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDsKdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250OwojaWZkZWYgRE9VQkxFX1NJREVECgl2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjazsKCXZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGxpZ2h0c19sYW1iZXJ0X3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLFIxPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDsKdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250OwojaWZkZWYgRE9VQkxFX1NJREVECgl2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjazsKCXZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDsKCSNlbmRpZgoJI2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTsKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxMMT1gI2RlZmluZSBNQVRDQVAKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6Owp9YCxQMT1gI2RlZmluZSBNQVRDQVAKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwOwp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJdmVjMyB2aWV3RGlyID0gbm9ybWFsaXplKCB2Vmlld1Bvc2l0aW9uICk7Cgl2ZWMzIHggPSBub3JtYWxpemUoIHZlYzMoIHZpZXdEaXIueiwgMC4wLCAtIHZpZXdEaXIueCApICk7Cgl2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApOwoJdmVjMiB1diA9IHZlYzIoIGRvdCggeCwgbm9ybWFsICksIGRvdCggeSwgbm9ybWFsICkgKSAqIDAuNDk1ICsgMC41OwoJI2lmZGVmIFVTRV9NQVRDQVAKCQl2ZWM0IG1hdGNhcENvbG9yID0gdGV4dHVyZTJEKCBtYXRjYXAsIHV2ICk7CgkjZWxzZQoJCXZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7CgkjZW5kaWYKCXZlYzMgb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2IgKiBtYXRjYXBDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLEQxPWAjZGVmaW5lIE5PUk1BTAojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CiNlbmRpZgp9YCxJMT1gI2RlZmluZSBOT1JNQUwKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHBhY2tOb3JtYWxUb1JHQiggbm9ybWFsICksIG9wYWNpdHkgKTsKfWAsTjE9YCNkZWZpbmUgUEhPTkcKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxlbnZtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsRjE9YCNkZWZpbmUgUEhPTkcKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSB2ZWMzIHNwZWN1bGFyOwp1bmlmb3JtIGZsb2F0IHNoaW5pbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCx6MT1gI2RlZmluZSBTVEFOREFSRAp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2lmZGVmIFVTRV9UUkFOU01JU1NJT04KCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2VuZGlmCiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y29sb3JfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCXZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6OwoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6OwojZW5kaWYKfWAsVTE9YCNkZWZpbmUgU1RBTkRBUkQKI2lmZGVmIFBIWVNJQ0FMCgkjZGVmaW5lIElPUgoJI2RlZmluZSBTUEVDVUxBUgojZW5kaWYKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSBmbG9hdCByb3VnaG5lc3M7CnVuaWZvcm0gZmxvYXQgbWV0YWxuZXNzOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZmRlZiBJT1IKCXVuaWZvcm0gZmxvYXQgaW9yOwojZW5kaWYKI2lmZGVmIFNQRUNVTEFSCgl1bmlmb3JtIGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5OwoJdW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7CgkjaWZkZWYgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJJbnRlbnNpdHlNYXA7CgkjZW5kaWYKCSNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7CgkjZW5kaWYKI2VuZGlmCiNpZmRlZiBVU0VfQ0xFQVJDT0FUCgl1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDsKCXVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzOwojZW5kaWYKI2lmZGVmIFVTRV9TSEVFTgoJdW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7Cgl1bmlmb3JtIGZsb2F0IHNoZWVuUm91Z2huZXNzOwoJI2lmZGVmIFVTRV9TSEVFTkNPTE9STUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Db2xvck1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTlJPVUdITkVTU01BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuUm91Z2huZXNzTWFwOwoJI2VuZGlmCiNlbmRpZgp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsZWFyY29hdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8cm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWV0YWxuZXNzbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfcGh5c2ljYWxfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIHRvdGFsRGlmZnVzZSA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7Cgl2ZWMzIHRvdGFsU3BlY3VsYXIgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXI7CgkjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTsKCSNpZmRlZiBVU0VfU0hFRU4KCQlmbG9hdCBzaGVlbkVuZXJneUNvbXAgPSAxLjAgLSAwLjE1NyAqIG1heDMoIG1hdGVyaWFsLnNoZWVuQ29sb3IgKTsKCQlvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqIHNoZWVuRW5lcmd5Q29tcCArIHNoZWVuU3BlY3VsYXI7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUCgkJZmxvYXQgZG90TlZjYyA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7CgkJdmVjMyBGY2MgPSBGX1NjaGxpY2soIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIGRvdE5WY2MgKTsKCQlvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDsKCSNlbmRpZgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxCMT1gI2RlZmluZSBUT09OCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxPMT1gI2RlZmluZSBUT09OCnVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIHZlYzMgZW1pc3NpdmU7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfbWFwcz4KCSNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLGsxPWB1bmlmb3JtIGZsb2F0IHNpemU7CnVuaWZvcm0gZmxvYXQgc2NhbGU7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCWdsX1BvaW50U2l6ZSA9IHNpemU7CgkjaWZkZWYgVVNFX1NJWkVBVFRFTlVBVElPTgoJCWJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTsKCQlpZiAoIGlzUGVyc3BlY3RpdmUgKSBnbF9Qb2ludFNpemUgKj0gKCBzY2FsZSAvIC0gbXZQb3NpdGlvbi56ICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsSDE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfcGFydGljbGVfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsVjE9YCNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsRzE9YHVuaWZvcm0gdmVjMyBjb2xvcjsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFza19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBjb2xvciwgb3BhY2l0eSAqICggMS4wIC0gZ2V0U2hhZG93TWFzaygpICkgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxXMT1gdW5pZm9ybSBmbG9hdCByb3RhdGlvbjsKdW5pZm9ybSB2ZWMyIGNlbnRlcjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+Cgl2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTsKCXZlYzIgc2NhbGU7CglzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTsKCXNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApOwoJI2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56OwoJI2VuZGlmCgl2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlOwoJdmVjMiByb3RhdGVkUG9zaXRpb247Cglyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7Cglyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7CgltdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAscTE9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApOwoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCW91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50Pgp9YCxQdD17YWxwaGFtYXBfZnJhZ21lbnQ6X00sYWxwaGFtYXBfcGFyc19mcmFnbWVudDp3TSxhbHBoYXRlc3RfZnJhZ21lbnQ6TU0sYWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ6Yk0sYW9tYXBfZnJhZ21lbnQ6U00sYW9tYXBfcGFyc19mcmFnbWVudDpFTSxiZWdpbl92ZXJ0ZXg6VE0sYmVnaW5ub3JtYWxfdmVydGV4OkFNLGJzZGZzOkNNLGJ1bXBtYXBfcGFyc19mcmFnbWVudDpSTSxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ6TE0sY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6UE0sY2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4OkRNLGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg6SU0sY29sb3JfZnJhZ21lbnQ6Tk0sY29sb3JfcGFyc19mcmFnbWVudDpGTSxjb2xvcl9wYXJzX3ZlcnRleDp6TSxjb2xvcl92ZXJ0ZXg6VU0sY29tbW9uOkJNLGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudDpPTSxkZWZhdWx0bm9ybWFsX3ZlcnRleDprTSxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6SE0sZGlzcGxhY2VtZW50bWFwX3ZlcnRleDpWTSxlbWlzc2l2ZW1hcF9mcmFnbWVudDpHTSxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OldNLGVuY29kaW5nc19mcmFnbWVudDpxTSxlbmNvZGluZ3NfcGFyc19mcmFnbWVudDpYTSxlbnZtYXBfZnJhZ21lbnQ6WU0sZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OlpNLGVudm1hcF9wYXJzX2ZyYWdtZW50OkpNLGVudm1hcF9wYXJzX3ZlcnRleDokTSxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudDphYixlbnZtYXBfdmVydGV4OktNLGZvZ192ZXJ0ZXg6UU0sZm9nX3BhcnNfdmVydGV4OmpNLGZvZ19mcmFnbWVudDp0Yixmb2dfcGFyc19mcmFnbWVudDplYixncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50Om5iLGxpZ2h0bWFwX2ZyYWdtZW50OmliLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6cmIsbGlnaHRzX2xhbWJlcnRfdmVydGV4OnNiLGxpZ2h0c19wYXJzX2JlZ2luOm9iLGxpZ2h0c190b29uX2ZyYWdtZW50OmxiLGxpZ2h0c190b29uX3BhcnNfZnJhZ21lbnQ6Y2IsbGlnaHRzX3Bob25nX2ZyYWdtZW50OnViLGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50OmhiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDpmYixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDpkYixsaWdodHNfZnJhZ21lbnRfYmVnaW46cGIsbGlnaHRzX2ZyYWdtZW50X21hcHM6bWIsbGlnaHRzX2ZyYWdtZW50X2VuZDpnYixsb2dkZXB0aGJ1Zl9mcmFnbWVudDp4Yixsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50OnliLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OnZiLGxvZ2RlcHRoYnVmX3ZlcnRleDpfYixtYXBfZnJhZ21lbnQ6d2IsbWFwX3BhcnNfZnJhZ21lbnQ6TWIsbWFwX3BhcnRpY2xlX2ZyYWdtZW50OmJiLG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50OlNiLG1ldGFsbmVzc21hcF9mcmFnbWVudDpFYixtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudDpUYixtb3JwaG5vcm1hbF92ZXJ0ZXg6QWIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6Q2IsbW9ycGh0YXJnZXRfdmVydGV4OlJiLG5vcm1hbF9mcmFnbWVudF9iZWdpbjpMYixub3JtYWxfZnJhZ21lbnRfbWFwczpQYixub3JtYWxfcGFyc19mcmFnbWVudDpEYixub3JtYWxfcGFyc192ZXJ0ZXg6SWIsbm9ybWFsX3ZlcnRleDpOYixub3JtYWxtYXBfcGFyc19mcmFnbWVudDpGYixjbGVhcmNvYXRfbm9ybWFsX2ZyYWdtZW50X2JlZ2luOnpiLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczpVYixjbGVhcmNvYXRfcGFyc19mcmFnbWVudDpCYixvdXRwdXRfZnJhZ21lbnQ6T2IscGFja2luZzprYixwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50OkhiLHByb2plY3RfdmVydGV4OlZiLGRpdGhlcmluZ19mcmFnbWVudDpHYixkaXRoZXJpbmdfcGFyc19mcmFnbWVudDpXYixyb3VnaG5lc3NtYXBfZnJhZ21lbnQ6cWIscm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6WGIsc2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ6WWIsc2hhZG93bWFwX3BhcnNfdmVydGV4OlpiLHNoYWRvd21hcF92ZXJ0ZXg6SmIsc2hhZG93bWFza19wYXJzX2ZyYWdtZW50OiRiLHNraW5iYXNlX3ZlcnRleDpLYixza2lubmluZ19wYXJzX3ZlcnRleDpRYixza2lubmluZ192ZXJ0ZXg6amIsc2tpbm5vcm1hbF92ZXJ0ZXg6dDEsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6ZTEsc3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudDpuMSx0b25lbWFwcGluZ19mcmFnbWVudDppMSx0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OnIxLHRyYW5zbWlzc2lvbl9mcmFnbWVudDpzMSx0cmFuc21pc3Npb25fcGFyc19mcmFnbWVudDpvMSx1dl9wYXJzX2ZyYWdtZW50OmExLHV2X3BhcnNfdmVydGV4OmwxLHV2X3ZlcnRleDpjMSx1djJfcGFyc19mcmFnbWVudDp1MSx1djJfcGFyc192ZXJ0ZXg6aDEsdXYyX3ZlcnRleDpmMSx3b3JsZHBvc192ZXJ0ZXg6ZDEsYmFja2dyb3VuZF92ZXJ0OnAxLGJhY2tncm91bmRfZnJhZzptMSxjdWJlX3ZlcnQ6ZzEsY3ViZV9mcmFnOngxLGRlcHRoX3ZlcnQ6eTEsZGVwdGhfZnJhZzp2MSxkaXN0YW5jZVJHQkFfdmVydDpfMSxkaXN0YW5jZVJHQkFfZnJhZzp3MSxlcXVpcmVjdF92ZXJ0Ok0xLGVxdWlyZWN0X2ZyYWc6YjEsbGluZWRhc2hlZF92ZXJ0OlMxLGxpbmVkYXNoZWRfZnJhZzpFMSxtZXNoYmFzaWNfdmVydDpUMSxtZXNoYmFzaWNfZnJhZzpBMSxtZXNobGFtYmVydF92ZXJ0OkMxLG1lc2hsYW1iZXJ0X2ZyYWc6UjEsbWVzaG1hdGNhcF92ZXJ0OkwxLG1lc2htYXRjYXBfZnJhZzpQMSxtZXNobm9ybWFsX3ZlcnQ6RDEsbWVzaG5vcm1hbF9mcmFnOkkxLG1lc2hwaG9uZ192ZXJ0Ok4xLG1lc2hwaG9uZ19mcmFnOkYxLG1lc2hwaHlzaWNhbF92ZXJ0OnoxLG1lc2hwaHlzaWNhbF9mcmFnOlUxLG1lc2h0b29uX3ZlcnQ6QjEsbWVzaHRvb25fZnJhZzpPMSxwb2ludHNfdmVydDprMSxwb2ludHNfZnJhZzpIMSxzaGFkb3dfdmVydDpWMSxzaGFkb3dfZnJhZzpHMSxzcHJpdGVfdmVydDpXMSxzcHJpdGVfZnJhZzpxMX0sb3Q9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IGZ0KDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBkZX0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEsoMSwxKX19LGRpc3BsYWNlbWVudG1hcDp7ZGlzcGxhY2VtZW50TWFwOnt2YWx1ZTpudWxsfSxkaXNwbGFjZW1lbnRTY2FsZTp7dmFsdWU6MX0sZGlzcGxhY2VtZW50Qmlhczp7dmFsdWU6MH19LHJvdWdobmVzc21hcDp7cm91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfX0sbWV0YWxuZXNzbWFwOnttZXRhbG5lc3NNYXA6e3ZhbHVlOm51bGx9fSxncmFkaWVudG1hcDp7Z3JhZGllbnRNYXA6e3ZhbHVlOm51bGx9fSxmb2c6e2ZvZ0RlbnNpdHk6e3ZhbHVlOjI1ZS01fSxmb2dOZWFyOnt2YWx1ZToxfSxmb2dGYXI6e3ZhbHVlOjJlM30sZm9nQ29sb3I6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9fSxsaWdodHM6e2FtYmllbnRMaWdodENvbG9yOnt2YWx1ZTpbXX0sbGlnaHRQcm9iZTp7dmFsdWU6W119LGRpcmVjdGlvbmFsTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sY29sb3I6e319fSxkaXJlY3Rpb25hbExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sZGlyZWN0aW9uYWxTaGFkb3dNYXA6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbFNoYWRvd01hdHJpeDp7dmFsdWU6W119LHNwb3RMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRpcmVjdGlvbjp7fSxkaXN0YW5jZTp7fSxjb25lQ29zOnt9LHBlbnVtYnJhQ29zOnt9LGRlY2F5Ont9fX0sc3BvdExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9fX0sc3BvdFNoYWRvd01hcDp7dmFsdWU6W119LHNwb3RTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxwb2ludExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sZGVjYXk6e30sZGlzdGFuY2U6e319fSxwb2ludExpZ2h0U2hhZG93czp7dmFsdWU6W10scHJvcGVydGllczp7c2hhZG93Qmlhczp7fSxzaGFkb3dOb3JtYWxCaWFzOnt9LHNoYWRvd1JhZGl1czp7fSxzaGFkb3dNYXBTaXplOnt9LHNoYWRvd0NhbWVyYU5lYXI6e30sc2hhZG93Q2FtZXJhRmFyOnt9fX0scG9pbnRTaGFkb3dNYXA6e3ZhbHVlOltdfSxwb2ludFNoYWRvd01hdHJpeDp7dmFsdWU6W119LGhlbWlzcGhlcmVMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2RpcmVjdGlvbjp7fSxza3lDb2xvcjp7fSxncm91bmRDb2xvcjp7fX19LHJlY3RBcmVhTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSx3aWR0aDp7fSxoZWlnaHQ6e319fSxsdGNfMTp7dmFsdWU6bnVsbH0sbHRjXzI6e3ZhbHVlOm51bGx9fSxwb2ludHM6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LHNpemU6e3ZhbHVlOjF9LHNjYWxlOnt2YWx1ZToxfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgZGV9fSxzcHJpdGU6e2RpZmZ1c2U6e3ZhbHVlOm5ldyBmdCgxNjc3NzIxNSl9LG9wYWNpdHk6e3ZhbHVlOjF9LGNlbnRlcjp7dmFsdWU6bmV3IEsoLjUsLjUpfSxyb3RhdGlvbjp7dmFsdWU6MH0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfX19LGZuPXtiYXNpYzp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZm9nXSksdmVydGV4U2hhZGVyOlB0Lm1lc2hiYXNpY192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2hiYXNpY19mcmFnfSxsYW1iZXJ0Ont1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LnNwZWN1bGFybWFwLG90LmVudm1hcCxvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5mb2csb3QubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IGZ0KDApfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubWVzaGxhbWJlcnRfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNobGFtYmVydF9mcmFnfSxwaG9uZzp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5zcGVjdWxhcm1hcCxvdC5lbnZtYXAsb3QuYW9tYXAsb3QubGlnaHRtYXAsb3QuZW1pc3NpdmVtYXAsb3QuYnVtcG1hcCxvdC5ub3JtYWxtYXAsb3QuZGlzcGxhY2VtZW50bWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9LHNwZWN1bGFyOnt2YWx1ZTpuZXcgZnQoMTExODQ4MSl9LHNoaW5pbmVzczp7dmFsdWU6MzB9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGhvbmdfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGhvbmdfZnJhZ30sc3RhbmRhcmQ6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZW52bWFwLG90LmFvbWFwLG90LmxpZ2h0bWFwLG90LmVtaXNzaXZlbWFwLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5yb3VnaG5lc3NtYXAsb3QubWV0YWxuZXNzbWFwLG90LmZvZyxvdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgZnQoMCl9LHJvdWdobmVzczp7dmFsdWU6MX0sbWV0YWxuZXNzOnt2YWx1ZTowfSxlbnZNYXBJbnRlbnNpdHk6e3ZhbHVlOjF9fV0pLHZlcnRleFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNocGh5c2ljYWxfZnJhZ30sdG9vbjp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5hb21hcCxvdC5saWdodG1hcCxvdC5lbWlzc2l2ZW1hcCxvdC5idW1wbWFwLG90Lm5vcm1hbG1hcCxvdC5kaXNwbGFjZW1lbnRtYXAsb3QuZ3JhZGllbnRtYXAsb3QuZm9nLG90LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBmdCgwKX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2h0b29uX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQubWVzaHRvb25fZnJhZ30sbWF0Y2FwOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCxvdC5mb2cse21hdGNhcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2htYXRjYXBfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNobWF0Y2FwX2ZyYWd9LHBvaW50czp7dW5pZm9ybXM6TWUoW290LnBvaW50cyxvdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6UHQucG9pbnRzX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQucG9pbnRzX2ZyYWd9LGRhc2hlZDp7dW5pZm9ybXM6TWUoW290LmNvbW1vbixvdC5mb2cse3NjYWxlOnt2YWx1ZToxfSxkYXNoU2l6ZTp7dmFsdWU6MX0sdG90YWxTaXplOnt2YWx1ZToyfX1dKSx2ZXJ0ZXhTaGFkZXI6UHQubGluZWRhc2hlZF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmxpbmVkYXNoZWRfZnJhZ30sZGVwdGg6e3VuaWZvcm1zOk1lKFtvdC5jb21tb24sb3QuZGlzcGxhY2VtZW50bWFwXSksdmVydGV4U2hhZGVyOlB0LmRlcHRoX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZGVwdGhfZnJhZ30sbm9ybWFsOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmJ1bXBtYXAsb3Qubm9ybWFsbWFwLG90LmRpc3BsYWNlbWVudG1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hub3JtYWxfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5tZXNobm9ybWFsX2ZyYWd9LHNwcml0ZTp7dW5pZm9ybXM6TWUoW290LnNwcml0ZSxvdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6UHQuc3ByaXRlX3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuc3ByaXRlX2ZyYWd9LGJhY2tncm91bmQ6e3VuaWZvcm1zOnt1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGRlfSx0MkQ6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6UHQuYmFja2dyb3VuZF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LmJhY2tncm91bmRfZnJhZ30sY3ViZTp7dW5pZm9ybXM6TWUoW290LmVudm1hcCx7b3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlB0LmN1YmVfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5jdWJlX2ZyYWd9LGVxdWlyZWN0Ont1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOlB0LmVxdWlyZWN0X3ZlcnQsZnJhZ21lbnRTaGFkZXI6UHQuZXF1aXJlY3RfZnJhZ30sZGlzdGFuY2VSR0JBOnt1bmlmb3JtczpNZShbb3QuY29tbW9uLG90LmRpc3BsYWNlbWVudG1hcCx7cmVmZXJlbmNlUG9zaXRpb246e3ZhbHVlOm5ldyBUfSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjpQdC5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpQdC5kaXN0YW5jZVJHQkFfZnJhZ30sc2hhZG93Ont1bmlmb3JtczpNZShbb3QubGlnaHRzLG90LmZvZyx7Y29sb3I6e3ZhbHVlOm5ldyBmdCgwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOlB0LnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOlB0LnNoYWRvd19mcmFnfX07Zm4ucGh5c2ljYWw9e3VuaWZvcm1zOk1lKFtmbi5zdGFuZGFyZC51bmlmb3Jtcyx7Y2xlYXJjb2F0Ont2YWx1ZTowfSxjbGVhcmNvYXRNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdFJvdWdobmVzczp7dmFsdWU6MH0sY2xlYXJjb2F0Um91Z2huZXNzTWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXROb3JtYWxTY2FsZTp7dmFsdWU6bmV3IEsoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6MH0sc2hlZW5Db2xvcjp7dmFsdWU6bmV3IGZ0KDApfSxzaGVlbkNvbG9yTWFwOnt2YWx1ZTpudWxsfSxzaGVlblJvdWdobmVzczp7dmFsdWU6MX0sc2hlZW5Sb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3IEt9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgZnQoMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IGZ0KDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOlB0Lm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOlB0Lm1lc2hwaHlzaWNhbF9mcmFnfTtmdW5jdGlvbiBYMShuLHQsZSxpLHIscyl7bGV0IG89bmV3IGZ0KDApLGE9cj09PSEwPzA6MSxsLGMsdT1udWxsLGg9MCxmPW51bGw7ZnVuY3Rpb24gZCh4LHYpe2xldCBtPSExLHA9di5pc1NjZW5lPT09ITA/di5iYWNrZ3JvdW5kOm51bGw7cCYmcC5pc1RleHR1cmUmJihwPXQuZ2V0KHApKTtsZXQgYj1uLnhyLF89Yi5nZXRTZXNzaW9uJiZiLmdldFNlc3Npb24oKTtfJiZfLmVudmlyb25tZW50QmxlbmRNb2RlPT09ImFkZGl0aXZlIiYmKHA9bnVsbCkscD09PW51bGw/ZyhvLGEpOnAmJnAuaXNDb2xvciYmKGcocCwxKSxtPSEwKSwobi5hdXRvQ2xlYXJ8fG0pJiZuLmNsZWFyKG4uYXV0b0NsZWFyQ29sb3Isbi5hdXRvQ2xlYXJEZXB0aCxuLmF1dG9DbGVhclN0ZW5jaWwpLHAmJihwLmlzQ3ViZVRleHR1cmV8fHAubWFwcGluZz09PVJsKT8oYz09PXZvaWQgMCYmKGM9bmV3IG9lKG5ldyBIaSgxLDEsMSksbmV3IEZuKHtuYW1lOiJCYWNrZ3JvdW5kQ3ViZU1hdGVyaWFsIix1bmlmb3JtczpHcihmbi5jdWJlLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6Zm4uY3ViZS52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6Zm4uY3ViZS5mcmFnbWVudFNoYWRlcixzaWRlOmhlLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoInV2IiksYy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbihTLEwsQSl7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oQS5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPXAsYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXAuaXNDdWJlVGV4dHVyZSYmcC5pc1JlbmRlclRhcmdldFRleHR1cmU9PT0hMT8tMToxLCh1IT09cHx8aCE9PXAudmVyc2lvbnx8ZiE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXAsaD1wLnZlcnNpb24sZj1uLnRvbmVNYXBwaW5nKSx4LnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTpwJiZwLmlzVGV4dHVyZSYmKGw9PT12b2lkIDAmJihsPW5ldyBvZShuZXcgbG8oMiwyKSxuZXcgRm4oe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6R3IoZm4uYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOmZuLmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOmZuLmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTplbyxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMSxmb2c6ITF9KSksbC5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoIm5vcm1hbCIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLm1hdGVyaWFsLCJtYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy50MkQudmFsdWV9fSksaS51cGRhdGUobCkpLGwubWF0ZXJpYWwudW5pZm9ybXMudDJELnZhbHVlPXAscC5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJnAudXBkYXRlTWF0cml4KCksbC5tYXRlcmlhbC51bmlmb3Jtcy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KHAubWF0cml4KSwodSE9PXB8fGghPT1wLnZlcnNpb258fGYhPT1uLnRvbmVNYXBwaW5nKSYmKGwubWF0ZXJpYWwubmVlZHNVcGRhdGU9ITAsdT1wLGg9cC52ZXJzaW9uLGY9bi50b25lTWFwcGluZykseC51bnNoaWZ0KGwsbC5nZW9tZXRyeSxsLm1hdGVyaWFsLDAsMCxudWxsKSl9ZnVuY3Rpb24gZyh4LHYpe2UuYnVmZmVycy5jb2xvci5zZXRDbGVhcih4LnIseC5nLHguYix2LHMpfXJldHVybntnZXRDbGVhckNvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNldENsZWFyQ29sb3I6ZnVuY3Rpb24oeCx2PTEpe28uc2V0KHgpLGE9dixnKG8sYSl9LGdldENsZWFyQWxwaGE6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJBbHBoYTpmdW5jdGlvbih4KXthPXgsZyhvLGEpfSxyZW5kZXI6ZH19ZnVuY3Rpb24gWTEobix0LGUsaSl7bGV0IHI9bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLHM9aS5pc1dlYkdMMj9udWxsOnQuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLG89aS5pc1dlYkdMMnx8cyE9PW51bGwsYT17fSxsPXgobnVsbCksYz1sO2Z1bmN0aW9uIHUoRCxGLHosTixWKXtsZXQgUT0hMTtpZihvKXtsZXQgYXQ9ZyhOLHosRik7YyE9PWF0JiYoYz1hdCxmKGMub2JqZWN0KSksUT12KE4sViksUSYmbShOLFYpfWVsc2V7bGV0IGF0PUYud2lyZWZyYW1lPT09ITA7KGMuZ2VvbWV0cnkhPT1OLmlkfHxjLnByb2dyYW0hPT16LmlkfHxjLndpcmVmcmFtZSE9PWF0KSYmKGMuZ2VvbWV0cnk9Ti5pZCxjLnByb2dyYW09ei5pZCxjLndpcmVmcmFtZT1hdCxRPSEwKX1ELmlzSW5zdGFuY2VkTWVzaD09PSEwJiYoUT0hMCksViE9PW51bGwmJmUudXBkYXRlKFYsMzQ5NjMpLFEmJihBKEQsRix6LE4pLFYhPT1udWxsJiZuLmJpbmRCdWZmZXIoMzQ5NjMsZS5nZXQoVikuYnVmZmVyKSl9ZnVuY3Rpb24gaCgpe3JldHVybiBpLmlzV2ViR0wyP24uY3JlYXRlVmVydGV4QXJyYXkoKTpzLmNyZWF0ZVZlcnRleEFycmF5T0VTKCl9ZnVuY3Rpb24gZihEKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmJpbmRWZXJ0ZXhBcnJheShEKTpzLmJpbmRWZXJ0ZXhBcnJheU9FUyhEKX1mdW5jdGlvbiBkKEQpe3JldHVybiBpLmlzV2ViR0wyP24uZGVsZXRlVmVydGV4QXJyYXkoRCk6cy5kZWxldGVWZXJ0ZXhBcnJheU9FUyhEKX1mdW5jdGlvbiBnKEQsRix6KXtsZXQgTj16LndpcmVmcmFtZT09PSEwLFY9YVtELmlkXTtWPT09dm9pZCAwJiYoVj17fSxhW0QuaWRdPVYpO2xldCBRPVZbRi5pZF07UT09PXZvaWQgMCYmKFE9e30sVltGLmlkXT1RKTtsZXQgYXQ9UVtOXTtyZXR1cm4gYXQ9PT12b2lkIDAmJihhdD14KGgoKSksUVtOXT1hdCksYXR9ZnVuY3Rpb24geChEKXtsZXQgRj1bXSx6PVtdLE49W107Zm9yKGxldCBWPTA7VjxyO1YrKylGW1ZdPTAseltWXT0wLE5bVl09MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6RixlbmFibGVkQXR0cmlidXRlczp6LGF0dHJpYnV0ZURpdmlzb3JzOk4sb2JqZWN0OkQsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiB2KEQsRil7bGV0IHo9Yy5hdHRyaWJ1dGVzLE49RC5hdHRyaWJ1dGVzLFY9MDtmb3IobGV0IFEgaW4gTil7bGV0IGF0PXpbUV0sRz1OW1FdO2lmKGF0PT09dm9pZCAwfHxhdC5hdHRyaWJ1dGUhPT1HfHxhdC5kYXRhIT09Ry5kYXRhKXJldHVybiEwO1YrK31yZXR1cm4gYy5hdHRyaWJ1dGVzTnVtIT09Vnx8Yy5pbmRleCE9PUZ9ZnVuY3Rpb24gbShELEYpe2xldCB6PXt9LE49RC5hdHRyaWJ1dGVzLFY9MDtmb3IobGV0IFEgaW4gTil7bGV0IGF0PU5bUV0sRz17fTtHLmF0dHJpYnV0ZT1hdCxhdC5kYXRhJiYoRy5kYXRhPWF0LmRhdGEpLHpbUV09RyxWKyt9Yy5hdHRyaWJ1dGVzPXosYy5hdHRyaWJ1dGVzTnVtPVYsYy5pbmRleD1GfWZ1bmN0aW9uIHAoKXtsZXQgRD1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBGPTAsej1ELmxlbmd0aDtGPHo7RisrKURbRl09MH1mdW5jdGlvbiBiKEQpe18oRCwwKX1mdW5jdGlvbiBfKEQsRil7bGV0IHo9Yy5uZXdBdHRyaWJ1dGVzLE49Yy5lbmFibGVkQXR0cmlidXRlcyxWPWMuYXR0cmlidXRlRGl2aXNvcnM7eltEXT0xLE5bRF09PT0wJiYobi5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShEKSxOW0RdPTEpLFZbRF0hPT1GJiYoKGkuaXNXZWJHTDI/bjp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtpLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0oRCxGKSxWW0RdPUYpfWZ1bmN0aW9uIFMoKXtsZXQgRD1jLm5ld0F0dHJpYnV0ZXMsRj1jLmVuYWJsZWRBdHRyaWJ1dGVzO2ZvcihsZXQgej0wLE49Ri5sZW5ndGg7ejxOO3orKylGW3pdIT09RFt6XSYmKG4uZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHopLEZbel09MCl9ZnVuY3Rpb24gTChELEYseixOLFYsUSl7aS5pc1dlYkdMMj09PSEwJiYoej09PTUxMjR8fHo9PT01MTI1KT9uLnZlcnRleEF0dHJpYklQb2ludGVyKEQsRix6LFYsUSk6bi52ZXJ0ZXhBdHRyaWJQb2ludGVyKEQsRix6LE4sVixRKX1mdW5jdGlvbiBBKEQsRix6LE4pe2lmKGkuaXNXZWJHTDI9PT0hMSYmKEQuaXNJbnN0YW5jZWRNZXNofHxOLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpJiZ0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpPT09bnVsbClyZXR1cm47cCgpO2xldCBWPU4uYXR0cmlidXRlcyxRPXouZ2V0QXR0cmlidXRlcygpLGF0PUYuZGVmYXVsdEF0dHJpYnV0ZVZhbHVlcztmb3IobGV0IEcgaW4gUSl7bGV0ICQ9UVtHXTtpZigkLmxvY2F0aW9uPj0wKXtsZXQgbHQ9VltHXTtpZihsdD09PXZvaWQgMCYmKEc9PT0iaW5zdGFuY2VNYXRyaXgiJiZELmluc3RhbmNlTWF0cml4JiYobHQ9RC5pbnN0YW5jZU1hdHJpeCksRz09PSJpbnN0YW5jZUNvbG9yIiYmRC5pbnN0YW5jZUNvbG9yJiYobHQ9RC5pbnN0YW5jZUNvbG9yKSksbHQhPT12b2lkIDApe2xldCBkdD1sdC5ub3JtYWxpemVkLHh0PWx0Lml0ZW1TaXplLGs9ZS5nZXQobHQpO2lmKGs9PT12b2lkIDApY29udGludWU7bGV0IEZ0PWsuYnVmZmVyLG10PWsudHlwZSxTdD1rLmJ5dGVzUGVyRWxlbWVudDtpZihsdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgQj1sdC5kYXRhLHN0PUIuc3RyaWRlLG50PWx0Lm9mZnNldDtpZihCJiZCLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgQz0wO0M8JC5sb2NhdGlvblNpemU7QysrKV8oJC5sb2NhdGlvbitDLEIubWVzaFBlckF0dHJpYnV0ZSk7RC5pc0luc3RhbmNlZE1lc2ghPT0hMCYmTi5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKE4uX21heEluc3RhbmNlQ291bnQ9Qi5tZXNoUGVyQXR0cmlidXRlKkIuY291bnQpfWVsc2UgZm9yKGxldCBDPTA7QzwkLmxvY2F0aW9uU2l6ZTtDKyspYigkLmxvY2F0aW9uK0MpO24uYmluZEJ1ZmZlcigzNDk2MixGdCk7Zm9yKGxldCBDPTA7QzwkLmxvY2F0aW9uU2l6ZTtDKyspTCgkLmxvY2F0aW9uK0MseHQvJC5sb2NhdGlvblNpemUsbXQsZHQsc3QqU3QsKG50K3h0LyQubG9jYXRpb25TaXplKkMpKlN0KX1lbHNle2lmKGx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IEI9MDtCPCQubG9jYXRpb25TaXplO0IrKylfKCQubG9jYXRpb24rQixsdC5tZXNoUGVyQXR0cmlidXRlKTtELmlzSW5zdGFuY2VkTWVzaCE9PSEwJiZOLl9tYXhJbnN0YW5jZUNvdW50PT09dm9pZCAwJiYoTi5fbWF4SW5zdGFuY2VDb3VudD1sdC5tZXNoUGVyQXR0cmlidXRlKmx0LmNvdW50KX1lbHNlIGZvcihsZXQgQj0wO0I8JC5sb2NhdGlvblNpemU7QisrKWIoJC5sb2NhdGlvbitCKTtuLmJpbmRCdWZmZXIoMzQ5NjIsRnQpO2ZvcihsZXQgQj0wO0I8JC5sb2NhdGlvblNpemU7QisrKUwoJC5sb2NhdGlvbitCLHh0LyQubG9jYXRpb25TaXplLG10LGR0LHh0KlN0LHh0LyQubG9jYXRpb25TaXplKkIqU3QpfX1lbHNlIGlmKGF0IT09dm9pZCAwKXtsZXQgZHQ9YXRbR107aWYoZHQhPT12b2lkIDApc3dpdGNoKGR0Lmxlbmd0aCl7Y2FzZSAyOm4udmVydGV4QXR0cmliMmZ2KCQubG9jYXRpb24sZHQpO2JyZWFrO2Nhc2UgMzpuLnZlcnRleEF0dHJpYjNmdigkLmxvY2F0aW9uLGR0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoJC5sb2NhdGlvbixkdCk7YnJlYWs7ZGVmYXVsdDpuLnZlcnRleEF0dHJpYjFmdigkLmxvY2F0aW9uLGR0KX19fX1TKCl9ZnVuY3Rpb24gSCgpe3koKTtmb3IobGV0IEQgaW4gYSl7bGV0IEY9YVtEXTtmb3IobGV0IHogaW4gRil7bGV0IE49Rlt6XTtmb3IobGV0IFYgaW4gTilkKE5bVl0ub2JqZWN0KSxkZWxldGUgTltWXTtkZWxldGUgRlt6XX1kZWxldGUgYVtEXX19ZnVuY3Rpb24gdHQoRCl7aWYoYVtELmlkXT09PXZvaWQgMClyZXR1cm47bGV0IEY9YVtELmlkXTtmb3IobGV0IHogaW4gRil7bGV0IE49Rlt6XTtmb3IobGV0IFYgaW4gTilkKE5bVl0ub2JqZWN0KSxkZWxldGUgTltWXTtkZWxldGUgRlt6XX1kZWxldGUgYVtELmlkXX1mdW5jdGlvbiBYKEQpe2ZvcihsZXQgRiBpbiBhKXtsZXQgej1hW0ZdO2lmKHpbRC5pZF09PT12b2lkIDApY29udGludWU7bGV0IE49eltELmlkXTtmb3IobGV0IFYgaW4gTilkKE5bVl0ub2JqZWN0KSxkZWxldGUgTltWXTtkZWxldGUgeltELmlkXX19ZnVuY3Rpb24geSgpe1IoKSxjIT09bCYmKGM9bCxmKGMub2JqZWN0KSl9ZnVuY3Rpb24gUigpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6dSxyZXNldDp5LHJlc2V0RGVmYXVsdFN0YXRlOlIsZGlzcG9zZTpILHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OnR0LHJlbGVhc2VTdGF0ZXNPZlByb2dyYW06WCxpbml0QXR0cmlidXRlczpwLGVuYWJsZUF0dHJpYnV0ZTpiLGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOlN9fWZ1bmN0aW9uIFoxKG4sdCxlLGkpe2xldCByPWkuaXNXZWJHTDIscztmdW5jdGlvbiBvKGMpe3M9Y31mdW5jdGlvbiBhKGMsdSl7bi5kcmF3QXJyYXlzKHMsYyx1KSxlLnVwZGF0ZSh1LHMsMSl9ZnVuY3Rpb24gbChjLHUsaCl7aWYoaD09PTApcmV0dXJuO2xldCBmLGQ7aWYocilmPW4sZD0iZHJhd0FycmF5c0luc3RhbmNlZCI7ZWxzZSBpZihmPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIiksZD0iZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIixmPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWZbZF0ocyxjLHUsaCksZS51cGRhdGUodSxzLGgpfXRoaXMuc2V0TW9kZT1vLHRoaXMucmVuZGVyPWEsdGhpcy5yZW5kZXJJbnN0YW5jZXM9bH1mdW5jdGlvbiBKMShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gcigpe2lmKGkhPT12b2lkIDApcmV0dXJuIGk7aWYodC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpPT09ITApe2xldCBBPXQuZ2V0KCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTtpPW4uZ2V0UGFyYW1ldGVyKEEuTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKX1lbHNlIGk9MDtyZXR1cm4gaX1mdW5jdGlvbiBzKEEpe2lmKEE9PT0iaGlnaHAiKXtpZihuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzOCkucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM4KS5wcmVjaXNpb24+MClyZXR1cm4iaGlnaHAiO0E9Im1lZGl1bXAifXJldHVybiBBPT09Im1lZGl1bXAiJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBvPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IT0idW5kZWZpbmVkIiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPWUucHJlY2lzaW9uIT09dm9pZCAwP2UucHJlY2lzaW9uOiJoaWdocCIsbD1zKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1vfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT1lLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI9PT0hMCxoPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxmPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxkPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGc9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLHg9bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLHY9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLG09bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLHA9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLGI9Zj4wLF89b3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0IiksUz1iJiZfLEw9bz9uLmdldFBhcmFtZXRlcigzNjE4Myk6MDtyZXR1cm57aXNXZWJHTDI6byxkcmF3QnVmZmVyczpjLGdldE1heEFuaXNvdHJvcHk6cixnZXRNYXhQcmVjaXNpb246cyxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6aCxtYXhWZXJ0ZXhUZXh0dXJlczpmLG1heFRleHR1cmVTaXplOmQsbWF4Q3ViZW1hcFNpemU6ZyxtYXhBdHRyaWJ1dGVzOngsbWF4VmVydGV4VW5pZm9ybXM6dixtYXhWYXJ5aW5nczptLG1heEZyYWdtZW50VW5pZm9ybXM6cCx2ZXJ0ZXhUZXh0dXJlczpiLGZsb2F0RnJhZ21lbnRUZXh0dXJlczpfLGZsb2F0VmVydGV4VGV4dHVyZXM6UyxtYXhTYW1wbGVzOkx9fWZ1bmN0aW9uICQxKG4pe2xldCB0PXRoaXMsZT1udWxsLGk9MCxyPSExLHM9ITEsbz1uZXcgamUsYT1uZXcgZGUsbD17dmFsdWU6bnVsbCxuZWVkc1VwZGF0ZTohMX07dGhpcy51bmlmb3JtPWwsdGhpcy5udW1QbGFuZXM9MCx0aGlzLm51bUludGVyc2VjdGlvbj0wLHRoaXMuaW5pdD1mdW5jdGlvbihoLGYsZCl7bGV0IGc9aC5sZW5ndGghPT0wfHxmfHxpIT09MHx8cjtyZXR1cm4gcj1mLGU9dShoLGQsMCksaT1oLmxlbmd0aCxnfSx0aGlzLmJlZ2luU2hhZG93cz1mdW5jdGlvbigpe3M9ITAsdShudWxsKX0sdGhpcy5lbmRTaGFkb3dzPWZ1bmN0aW9uKCl7cz0hMSxjKCl9LHRoaXMuc2V0U3RhdGU9ZnVuY3Rpb24oaCxmLGQpe2xldCBnPWguY2xpcHBpbmdQbGFuZXMseD1oLmNsaXBJbnRlcnNlY3Rpb24sdj1oLmNsaXBTaGFkb3dzLG09bi5nZXQoaCk7aWYoIXJ8fGc9PT1udWxsfHxnLmxlbmd0aD09PTB8fHMmJiF2KXM/dShudWxsKTpjKCk7ZWxzZXtsZXQgcD1zPzA6aSxiPXAqNCxfPW0uY2xpcHBpbmdTdGF0ZXx8bnVsbDtsLnZhbHVlPV8sXz11KGcsZixiLGQpO2ZvcihsZXQgUz0wO1MhPT1iOysrUylfW1NdPWVbU107bS5jbGlwcGluZ1N0YXRlPV8sdGhpcy5udW1JbnRlcnNlY3Rpb249eD90aGlzLm51bVBsYW5lczowLHRoaXMubnVtUGxhbmVzKz1wfX07ZnVuY3Rpb24gYygpe2wudmFsdWUhPT1lJiYobC52YWx1ZT1lLGwubmVlZHNVcGRhdGU9aT4wKSx0Lm51bVBsYW5lcz1pLHQubnVtSW50ZXJzZWN0aW9uPTB9ZnVuY3Rpb24gdShoLGYsZCxnKXtsZXQgeD1oIT09bnVsbD9oLmxlbmd0aDowLHY9bnVsbDtpZih4IT09MCl7aWYodj1sLnZhbHVlLGchPT0hMHx8dj09PW51bGwpe2xldCBtPWQreCo0LHA9Zi5tYXRyaXhXb3JsZEludmVyc2U7YS5nZXROb3JtYWxNYXRyaXgocCksKHY9PT1udWxsfHx2Lmxlbmd0aDxtKSYmKHY9bmV3IEZsb2F0MzJBcnJheShtKSk7Zm9yKGxldCBiPTAsXz1kO2IhPT14OysrYixfKz00KW8uY29weShoW2JdKS5hcHBseU1hdHJpeDQocCxhKSxvLm5vcm1hbC50b0FycmF5KHYsXyksdltfKzNdPW8uY29uc3RhbnR9bC52YWx1ZT12LGwubmVlZHNVcGRhdGU9ITB9cmV0dXJuIHQubnVtUGxhbmVzPXgsdC5udW1JbnRlcnNlY3Rpb249MCx2fX1mdW5jdGlvbiBLMShuKXtsZXQgdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBlKG8sYSl7cmV0dXJuIGE9PT1VdT9vLm1hcHBpbmc9QW86YT09PUJ1JiYoby5tYXBwaW5nPUNvKSxvfWZ1bmN0aW9uIGkobyl7aWYobyYmby5pc1RleHR1cmUmJm8uaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITEpe2xldCBhPW8ubWFwcGluZztpZihhPT09VXV8fGE9PT1CdSlpZih0LmhhcyhvKSl7bGV0IGw9dC5nZXQobykudGV4dHVyZTtyZXR1cm4gZShsLG8ubWFwcGluZyl9ZWxzZXtsZXQgbD1vLmltYWdlO2lmKGwmJmwuaGVpZ2h0PjApe2xldCBjPW5ldyBvbChsLmhlaWdodC8yKTtyZXR1cm4gYy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShuLG8pLHQuc2V0KG8sYyksby5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKSxlKGMudGV4dHVyZSxvLm1hcHBpbmcpfWVsc2UgcmV0dXJuIG51bGx9fXJldHVybiBvfWZ1bmN0aW9uIHIobyl7bGV0IGE9by50YXJnZXQ7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixyKTtsZXQgbD10LmdldChhKTtsIT09dm9pZCAwJiYodC5kZWxldGUoYSksbC5kaXNwb3NlKCkpfWZ1bmN0aW9uIHMoKXt0PW5ldyBXZWFrTWFwfXJldHVybntnZXQ6aSxkaXNwb3NlOnN9fXZhciBWaT1jbGFzcyBleHRlbmRzIG9ve2NvbnN0cnVjdG9yKHQ9LTEsZT0xLGk9MSxyPS0xLHM9LjEsbz0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiLHRoaXMuem9vbT0xLHRoaXMudmlldz1udWxsLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9ZSx0aGlzLnRvcD1pLHRoaXMuYm90dG9tPXIsdGhpcy5uZWFyPXMsdGhpcy5mYXI9byx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PXQudmlldz09PW51bGw/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc31zZXRWaWV3T2Zmc2V0KHQsZSxpLHIscyxvKXt0aGlzLnZpZXc9PT1udWxsJiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPXMsdGhpcy52aWV3LmhlaWdodD1vLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe3RoaXMudmlldyE9PW51bGwmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxlPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxpPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixyPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMixzPWktdCxvPWkrdCxhPXIrZSxsPXItZTtpZih0aGlzLnZpZXchPT1udWxsJiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGM9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSx1PSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO3MrPWMqdGhpcy52aWV3Lm9mZnNldFgsbz1zK2MqdGhpcy52aWV3LndpZHRoLGEtPXUqdGhpcy52aWV3Lm9mZnNldFksbD1hLXUqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhzLG8sYSxsLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quem9vbT10aGlzLnpvb20sZS5vYmplY3QubGVmdD10aGlzLmxlZnQsZS5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxlLm9iamVjdC50b3A9dGhpcy50b3AsZS5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLGUub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLGUub2JqZWN0LmZhcj10aGlzLmZhcix0aGlzLnZpZXchPT1udWxsJiYoZS5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLGV9fTtWaS5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7dmFyIFhyPWNsYXNzIGV4dGVuZHMgRm57Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fTtYci5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDt2YXIga3I9NCxuaT04LGhuPU1hdGgucG93KDIsbmkpLHgwPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSx5MD1uaS1rcisxK3gwLmxlbmd0aCxBcj0yMCxUdT1uZXcgVmkse19sb2RQbGFuZXM6R3MsX3NpemVMb2RzOm1nLF9zaWdtYXM6VWF9PVExKCksZ2c9bmV3IGZ0LEF1PW51bGwsemk9KDErTWF0aC5zcXJ0KDUpKS8yLENyPTEvemkseGc9W25ldyBUKDEsMSwxKSxuZXcgVCgtMSwxLDEpLG5ldyBUKDEsMSwtMSksbmV3IFQoLTEsMSwtMSksbmV3IFQoMCx6aSxDciksbmV3IFQoMCx6aSwtQ3IpLG5ldyBUKENyLDAsemkpLG5ldyBUKC1DciwwLHppKSxuZXcgVCh6aSxDciwwKSxuZXcgVCgtemksQ3IsMCldLGFsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9ajEoQXIpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LGU9MCxpPS4xLHI9MTAwKXtBdT10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgcz10aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtyZXR1cm4gdGhpcy5fc2NlbmVUb0N1YmVVVih0LGkscixzKSxlPjAmJnRoaXMuX2JsdXIocywwLDAsZSksdGhpcy5fYXBwbHlQTVJFTShzKSx0aGlzLl9jbGVhbnVwKHMpLHN9ZnJvbUVxdWlyZWN0YW5ndWxhcih0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9ZnJvbUN1YmVtYXAodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWNvbXBpbGVDdWJlbWFwU2hhZGVyKCl7dGhpcy5fY3ViZW1hcFNoYWRlcj09PW51bGwmJih0aGlzLl9jdWJlbWFwU2hhZGVyPV9nKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9dmcoKSx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fZXF1aXJlY3RTaGFkZXIpKX1kaXNwb3NlKCl7dGhpcy5fYmx1ck1hdGVyaWFsLmRpc3Bvc2UoKSx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCE9PW51bGwmJnRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0LmRpc3Bvc2UoKSx0aGlzLl9jdWJlbWFwU2hhZGVyIT09bnVsbCYmdGhpcy5fY3ViZW1hcFNoYWRlci5kaXNwb3NlKCksdGhpcy5fZXF1aXJlY3RTaGFkZXIhPT1udWxsJiZ0aGlzLl9lcXVpcmVjdFNoYWRlci5kaXNwb3NlKCk7Zm9yKGxldCB0PTA7dDxHcy5sZW5ndGg7dCsrKUdzW3RdLmRpc3Bvc2UoKX1fY2xlYW51cCh0KXt0aGlzLl9yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQoQXUpLHQuc2Npc3NvclRlc3Q9ITEsQmEodCwwLDAsdC53aWR0aCx0LmhlaWdodCl9X2Zyb21UZXh0dXJlKHQsZSl7QXU9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IGk9ZXx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxpKSx0aGlzLl9hcHBseVBNUkVNKGkpLHRoaXMuX2NsZWFudXAoaSksaX1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCBlPXttYWdGaWx0ZXI6YmUsbWluRmlsdGVyOmJlLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOlVyLGZvcm1hdDpSZSxlbmNvZGluZzpyaSxkZXB0aEJ1ZmZlcjohMX0saT15ZyhlKTtyZXR1cm4gaS5kZXB0aEJ1ZmZlcj0hdCx0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD09PW51bGwmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD15ZyhlKSksaX1fY29tcGlsZU1hdGVyaWFsKHQpe2xldCBlPW5ldyBvZShHc1swXSx0KTt0aGlzLl9yZW5kZXJlci5jb21waWxlKGUsVHUpfV9zY2VuZVRvQ3ViZVVWKHQsZSxpLHIpe2xldCBhPW5ldyBTZSg5MCwxLGUsaSksbD1bMSwtMSwxLDEsMSwxXSxjPVsxLDEsMSwtMSwtMSwtMV0sdT10aGlzLl9yZW5kZXJlcixoPXUuYXV0b0NsZWFyLGY9dS50b25lTWFwcGluZzt1LmdldENsZWFyQ29sb3IoZ2cpLHUudG9uZU1hcHBpbmc9dGksdS5hdXRvQ2xlYXI9ITE7bGV0IGQ9bmV3IGtpKHtuYW1lOiJQTVJFTS5CYWNrZ3JvdW5kIixzaWRlOmhlLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZz1uZXcgb2UobmV3IEhpLGQpLHg9ITEsdj10LmJhY2tncm91bmQ7dj92LmlzQ29sb3ImJihkLmNvbG9yLmNvcHkodiksdC5iYWNrZ3JvdW5kPW51bGwseD0hMCk6KGQuY29sb3IuY29weShnZykseD0hMCk7Zm9yKGxldCBtPTA7bTw2O20rKyl7bGV0IHA9bSUzO3A9PT0wPyhhLnVwLnNldCgwLGxbbV0sMCksYS5sb29rQXQoY1ttXSwwLDApKTpwPT09MT8oYS51cC5zZXQoMCwwLGxbbV0pLGEubG9va0F0KDAsY1ttXSwwKSk6KGEudXAuc2V0KDAsbFttXSwwKSxhLmxvb2tBdCgwLDAsY1ttXSkpLEJhKHIscCpobixtPjI/aG46MCxobixobiksdS5zZXRSZW5kZXJUYXJnZXQocikseCYmdS5yZW5kZXIoZyxhKSx1LnJlbmRlcih0LGEpfWcuZ2VvbWV0cnkuZGlzcG9zZSgpLGcubWF0ZXJpYWwuZGlzcG9zZSgpLHUudG9uZU1hcHBpbmc9Zix1LmF1dG9DbGVhcj1oLHQuYmFja2dyb3VuZD12fV90ZXh0dXJlVG9DdWJlVVYodCxlKXtsZXQgaT10aGlzLl9yZW5kZXJlcixyPXQubWFwcGluZz09PUFvfHx0Lm1hcHBpbmc9PT1DbztyPyh0aGlzLl9jdWJlbWFwU2hhZGVyPT09bnVsbCYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9X2coKSksdGhpcy5fY3ViZW1hcFNoYWRlci51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSk6dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9dmcoKSk7bGV0IHM9cj90aGlzLl9jdWJlbWFwU2hhZGVyOnRoaXMuX2VxdWlyZWN0U2hhZGVyLG89bmV3IG9lKEdzWzBdLHMpLGE9cy51bmlmb3JtczthLmVudk1hcC52YWx1ZT10LHJ8fGEudGV4ZWxTaXplLnZhbHVlLnNldCgxL3QuaW1hZ2Uud2lkdGgsMS90LmltYWdlLmhlaWdodCksQmEoZSwwLDAsMypobiwyKmhuKSxpLnNldFJlbmRlclRhcmdldChlKSxpLnJlbmRlcihvLFR1KX1fYXBwbHlQTVJFTSh0KXtsZXQgZT10aGlzLl9yZW5kZXJlcixpPWUuYXV0b0NsZWFyO2UuYXV0b0NsZWFyPSExO2ZvcihsZXQgcj0xO3I8eTA7cisrKXtsZXQgcz1NYXRoLnNxcnQoVWFbcl0qVWFbcl0tVWFbci0xXSpVYVtyLTFdKSxvPXhnWyhyLTEpJXhnLmxlbmd0aF07dGhpcy5fYmx1cih0LHItMSxyLHMsbyl9ZS5hdXRvQ2xlYXI9aX1fYmx1cih0LGUsaSxyLHMpe2xldCBvPXRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0O3RoaXMuX2hhbGZCbHVyKHQsbyxlLGksciwibGF0aXR1ZGluYWwiLHMpLHRoaXMuX2hhbGZCbHVyKG8sdCxpLGksciwibG9uZ2l0dWRpbmFsIixzKX1faGFsZkJsdXIodCxlLGkscixzLG8sYSl7bGV0IGw9dGhpcy5fcmVuZGVyZXIsYz10aGlzLl9ibHVyTWF0ZXJpYWw7byE9PSJsYXRpdHVkaW5hbCImJm8hPT0ibG9uZ2l0dWRpbmFsIiYmY29uc29sZS5lcnJvcigiYmx1ciBkaXJlY3Rpb24gbXVzdCBiZSBlaXRoZXIgbGF0aXR1ZGluYWwgb3IgbG9uZ2l0dWRpbmFsISIpO2xldCB1PTMsaD1uZXcgb2UoR3Nbcl0sYyksZj1jLnVuaWZvcm1zLGQ9bWdbaV0tMSxnPWlzRmluaXRlKHMpP01hdGguUEkvKDIqZCk6MipNYXRoLlBJLygyKkFyLTEpLHg9cy9nLHY9aXNGaW5pdGUocyk/MStNYXRoLmZsb29yKHUqeCk6QXI7dj5BciYmY29uc29sZS53YXJuKGBzaWdtYVJhZGlhbnMsICR7c30sIGlzIHRvbyBsYXJnZSBhbmQgd2lsbCBjbGlwLCBhcyBpdCByZXF1ZXN0ZWQgJHt2fSBzYW1wbGVzIHdoZW4gdGhlIG1heGltdW0gaXMgc2V0IHRvICR7QXJ9YCk7bGV0IG09W10scD0wO2ZvcihsZXQgTD0wO0w8QXI7KytMKXtsZXQgQT1ML3gsSD1NYXRoLmV4cCgtQSpBLzIpO20ucHVzaChIKSxMPT09MD9wKz1IOkw8diYmKHArPTIqSCl9Zm9yKGxldCBMPTA7TDxtLmxlbmd0aDtMKyspbVtMXT1tW0xdL3A7Zi5lbnZNYXAudmFsdWU9dC50ZXh0dXJlLGYuc2FtcGxlcy52YWx1ZT12LGYud2VpZ2h0cy52YWx1ZT1tLGYubGF0aXR1ZGluYWwudmFsdWU9bz09PSJsYXRpdHVkaW5hbCIsYSYmKGYucG9sZUF4aXMudmFsdWU9YSksZi5kVGhldGEudmFsdWU9ZyxmLm1pcEludC52YWx1ZT1uaS1pO2xldCBiPW1nW3JdLF89MypNYXRoLm1heCgwLGhuLTIqYiksUz0ocj09PTA/MDoyKmhuKSsyKmIqKHI+bmkta3I/ci1uaStrcjowKTtCYShlLF8sUywzKmIsMipiKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihoLFR1KX19O2Z1bmN0aW9uIFExKCl7bGV0IG49W10sdD1bXSxlPVtdLGk9bmk7Zm9yKGxldCByPTA7cjx5MDtyKyspe2xldCBzPU1hdGgucG93KDIsaSk7dC5wdXNoKHMpO2xldCBvPTEvcztyPm5pLWtyP289eDBbci1uaStrci0xXTpyPT09MCYmKG89MCksZS5wdXNoKG8pO2xldCBhPTEvKHMtMSksbD0tYS8yLGM9MSthLzIsdT1bbCxsLGMsbCxjLGMsbCxsLGMsYyxsLGNdLGg9NixmPTYsZD0zLGc9Mix4PTEsdj1uZXcgRmxvYXQzMkFycmF5KGQqZipoKSxtPW5ldyBGbG9hdDMyQXJyYXkoZypmKmgpLHA9bmV3IEZsb2F0MzJBcnJheSh4KmYqaCk7Zm9yKGxldCBfPTA7XzxoO18rKyl7bGV0IFM9XyUzKjIvMy0xLEw9Xz4yPzA6LTEsQT1bUyxMLDAsUysyLzMsTCwwLFMrMi8zLEwrMSwwLFMsTCwwLFMrMi8zLEwrMSwwLFMsTCsxLDBdO3Yuc2V0KEEsZCpmKl8pLG0uc2V0KHUsZypmKl8pO2xldCBIPVtfLF8sXyxfLF8sX107cC5zZXQoSCx4KmYqXyl9bGV0IGI9bmV3IEh0O2Iuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFF0KHYsZCkpLGIuc2V0QXR0cmlidXRlKCJ1diIsbmV3IFF0KG0sZykpLGIuc2V0QXR0cmlidXRlKCJmYWNlSW5kZXgiLG5ldyBRdChwLHgpKSxuLnB1c2goYiksaT5rciYmaS0tfXJldHVybntfbG9kUGxhbmVzOm4sX3NpemVMb2RzOnQsX3NpZ21hczplfX1mdW5jdGlvbiB5ZyhuKXtsZXQgdD1uZXcgTmUoMypobiwzKmhuLG4pO3JldHVybiB0LnRleHR1cmUubWFwcGluZz1SbCx0LnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2Iix0LnNjaXNzb3JUZXN0PSEwLHR9ZnVuY3Rpb24gQmEobix0LGUsaSxyKXtuLnZpZXdwb3J0LnNldCh0LGUsaSxyKSxuLnNjaXNzb3Iuc2V0KHQsZSxpLHIpfWZ1bmN0aW9uIGoxKG4pe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkobiksZT1uZXcgVCgwLDEsMCk7cmV0dXJuIG5ldyBYcih7bmFtZToiU3BoZXJpY2FsR2F1c3NpYW5CbHVyIixkZWZpbmVzOntufSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjpqaCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSBpbnQgc2FtcGxlczsKCQkJdW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07CgkJCXVuaWZvcm0gYm9vbCBsYXRpdHVkaW5hbDsKCQkJdW5pZm9ybSBmbG9hdCBkVGhldGE7CgkJCXVuaWZvcm0gZmxvYXQgbWlwSW50OwoJCQl1bmlmb3JtIHZlYzMgcG9sZUF4aXM7CgoJCQkjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVYKCQkJI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KCgkJCXZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkgewoKCQkJCWZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApOwoJCQkJLy8gUm9kcmlndWVzJyBheGlzLWFuZ2xlIHJvdGF0aW9uCgkJCQl2ZWMzIHNhbXBsZURpcmVjdGlvbiA9IHZPdXRwdXREaXJlY3Rpb24gKiBjb3NUaGV0YQoJCQkJCSsgY3Jvc3MoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqIHNpbiggdGhldGEgKQoJCQkJCSsgYXhpcyAqIGRvdCggYXhpcywgdk91dHB1dERpcmVjdGlvbiApICogKCAxLjAgLSBjb3NUaGV0YSApOwoKCQkJCXJldHVybiBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXJlY3Rpb24sIG1pcEludCApOwoKCQkJfQoKCQkJdm9pZCBtYWluKCkgewoKCQkJCXZlYzMgYXhpcyA9IGxhdGl0dWRpbmFsID8gcG9sZUF4aXMgOiBjcm9zcyggcG9sZUF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKTsKCgkJCQlpZiAoIGFsbCggZXF1YWwoIGF4aXMsIHZlYzMoIDAuMCApICkgKSApIHsKCgkJCQkJYXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApOwoKCQkJCX0KCgkJCQlheGlzID0gbm9ybWFsaXplKCBheGlzICk7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIDAgXSAqIGdldFNhbXBsZSggMC4wLCBheGlzICk7CgoJCQkJZm9yICggaW50IGkgPSAxOyBpIDwgbjsgaSsrICkgewoKCQkJCQlpZiAoIGkgPj0gc2FtcGxlcyApIHsKCgkJCQkJCWJyZWFrOwoKCQkJCQl9CgoJCQkJCWZsb2F0IHRoZXRhID0gZFRoZXRhICogZmxvYXQoIGkgKTsKCQkJCQlnbF9GcmFnQ29sb3IucmdiICs9IHdlaWdodHNbIGkgXSAqIGdldFNhbXBsZSggLTEuMCAqIHRoZXRhLCBheGlzICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIHRoZXRhLCBheGlzICk7CgoJCQkJfQoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiB2Zygpe2xldCBuPW5ldyBLKDEsMSk7cmV0dXJuIG5ldyBYcih7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6bn19LHZlcnRleFNoYWRlcjpqaCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDsKCQkJdW5pZm9ybSB2ZWMyIHRleGVsU2l6ZTsKCgkJCSNpbmNsdWRlIDxjb21tb24+CgoJCQl2b2lkIG1haW4oKSB7CgoJCQkJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7CgoJCQkJdmVjMyBvdXRwdXREaXJlY3Rpb24gPSBub3JtYWxpemUoIHZPdXRwdXREaXJlY3Rpb24gKTsKCQkJCXZlYzIgdXYgPSBlcXVpcmVjdFV2KCBvdXRwdXREaXJlY3Rpb24gKTsKCgkJCQl2ZWMyIGYgPSBmcmFjdCggdXYgLyB0ZXhlbFNpemUgLSAwLjUgKTsKCQkJCXV2IC09IGYgKiB0ZXhlbFNpemU7CgkJCQl2ZWMzIHRsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggKz0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnkgKz0gdGV4ZWxTaXplLnk7CgkJCQl2ZWMzIGJyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCQkJCXV2LnggLT0gdGV4ZWxTaXplLng7CgkJCQl2ZWMzIGJsID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjsKCgkJCQl2ZWMzIHRtID0gbWl4KCB0bCwgdHIsIGYueCApOwoJCQkJdmVjMyBibSA9IG1peCggYmwsIGJyLCBmLnggKTsKCQkJCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7CgoJCQl9CgkJYCxibGVuZGluZzpqbixkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfWZ1bmN0aW9uIF9nKCl7cmV0dXJuIG5ldyBYcih7bmFtZToiQ3ViZW1hcFRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX19LHZlcnRleFNoYWRlcjpqaCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6am4sZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBqaCgpe3JldHVybmAKCgkJcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CgkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQlhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsKCQlhdHRyaWJ1dGUgdmVjMiB1djsKCQlhdHRyaWJ1dGUgZmxvYXQgZmFjZUluZGV4OwoKCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJLy8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvbgoJCXZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkgewoKCQkJdXYgPSAyLjAgKiB1diAtIDEuMDsKCgkJCXZlYzMgZGlyZWN0aW9uID0gdmVjMyggdXYsIDEuMCApOwoKCQkJaWYgKCBmYWNlID09IDAuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC11LCAxLCAtdiApIHBvcyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHsKCgkJCQlkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHoKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtMSwgdiwgLXUgKSBuZWcgeAoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTsKCQkJCWRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDUuMCApIHsKCgkJCQlkaXJlY3Rpb24ueiAqPSAtMS4wOyAvLyAoIHUsIHYsIC0xICkgbmVnIHoKCgkJCX0KCgkJCXJldHVybiBkaXJlY3Rpb247CgoJCX0KCgkJdm9pZCBtYWluKCkgewoKCQkJdk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApOwoJCQlnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKCgkJfQoJYH1mdW5jdGlvbiB0UyhuKXtsZXQgdD1uZXcgV2Vha01hcCxlPW51bGw7ZnVuY3Rpb24gaShhKXtpZihhJiZhLmlzVGV4dHVyZSl7bGV0IGw9YS5tYXBwaW5nLGM9bD09PVV1fHxsPT09QnUsdT1sPT09QW98fGw9PT1DbztpZihjfHx1KWlmKGEuaXNSZW5kZXJUYXJnZXRUZXh0dXJlJiZhLm5lZWRzUE1SRU1VcGRhdGU9PT0hMCl7YS5uZWVkc1BNUkVNVXBkYXRlPSExO2xldCBoPXQuZ2V0KGEpO3JldHVybiBlPT09bnVsbCYmKGU9bmV3IGFsKG4pKSxoPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEsaCk6ZS5mcm9tQ3ViZW1hcChhLGgpLHQuc2V0KGEsaCksaC50ZXh0dXJlfWVsc2V7aWYodC5oYXMoYSkpcmV0dXJuIHQuZ2V0KGEpLnRleHR1cmU7e2xldCBoPWEuaW1hZ2U7aWYoYyYmaCYmaC5oZWlnaHQ+MHx8dSYmaCYmcihoKSl7ZT09PW51bGwmJihlPW5ldyBhbChuKSk7bGV0IGY9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIoYSk6ZS5mcm9tQ3ViZW1hcChhKTtyZXR1cm4gdC5zZXQoYSxmKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLGYudGV4dHVyZX1lbHNlIHJldHVybiBudWxsfX19cmV0dXJuIGF9ZnVuY3Rpb24gcihhKXtsZXQgbD0wLGM9Njtmb3IobGV0IHU9MDt1PGM7dSsrKWFbdV0hPT12b2lkIDAmJmwrKztyZXR1cm4gbD09PWN9ZnVuY3Rpb24gcyhhKXtsZXQgbD1hLnRhcmdldDtsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpO2xldCBjPXQuZ2V0KGwpO2MhPT12b2lkIDAmJih0LmRlbGV0ZShsKSxjLmRpc3Bvc2UoKSl9ZnVuY3Rpb24gbygpe3Q9bmV3IFdlYWtNYXAsZSE9PW51bGwmJihlLmRpc3Bvc2UoKSxlPW51bGwpfXJldHVybntnZXQ6aSxkaXNwb3NlOm99fWZ1bmN0aW9uIGVTKG4pe2xldCB0PXt9O2Z1bmN0aW9uIGUoaSl7aWYodFtpXSE9PXZvaWQgMClyZXR1cm4gdFtpXTtsZXQgcjtzd2l0Y2goaSl7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6cj1uLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxuLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6cj1uLmdldEV4dGVuc2lvbihpKX1yZXR1cm4gdFtpXT1yLHJ9cmV0dXJue2hhczpmdW5jdGlvbihpKXtyZXR1cm4gZShpKSE9PW51bGx9LGluaXQ6ZnVuY3Rpb24oaSl7aS5pc1dlYkdMMj9lKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KGUoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxlKCJPRVNfdGV4dHVyZV9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxlKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLGUoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLGUoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxlKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGUoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSksZSgiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIiksZSgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiksZSgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihpKXtsZXQgcj1lKGkpO3JldHVybiByPT09bnVsbCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK2krIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxyfX19ZnVuY3Rpb24gblMobix0LGUsaSl7bGV0IHI9e30scz1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKGgpe2xldCBmPWgudGFyZ2V0O2YuaW5kZXghPT1udWxsJiZ0LnJlbW92ZShmLmluZGV4KTtmb3IobGV0IGcgaW4gZi5hdHRyaWJ1dGVzKXQucmVtb3ZlKGYuYXR0cmlidXRlc1tnXSk7Zi5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKSxkZWxldGUgcltmLmlkXTtsZXQgZD1zLmdldChmKTtkJiYodC5yZW1vdmUoZCkscy5kZWxldGUoZikpLGkucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkoZiksZi5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PT09ITAmJmRlbGV0ZSBmLl9tYXhJbnN0YW5jZUNvdW50LGUubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIHJbZi5pZF09PT0hMHx8KGYuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbykscltmLmlkXT0hMCxlLm1lbW9yeS5nZW9tZXRyaWVzKyspLGZ9ZnVuY3Rpb24gbChoKXtsZXQgZj1oLmF0dHJpYnV0ZXM7Zm9yKGxldCBnIGluIGYpdC51cGRhdGUoZltnXSwzNDk2Mik7bGV0IGQ9aC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBnIGluIGQpe2xldCB4PWRbZ107Zm9yKGxldCB2PTAsbT14Lmxlbmd0aDt2PG07disrKXQudXBkYXRlKHhbdl0sMzQ5NjIpfX1mdW5jdGlvbiBjKGgpe2xldCBmPVtdLGQ9aC5pbmRleCxnPWguYXR0cmlidXRlcy5wb3NpdGlvbix4PTA7aWYoZCE9PW51bGwpe2xldCBwPWQuYXJyYXk7eD1kLnZlcnNpb247Zm9yKGxldCBiPTAsXz1wLmxlbmd0aDtiPF87Yis9Myl7bGV0IFM9cFtiKzBdLEw9cFtiKzFdLEE9cFtiKzJdO2YucHVzaChTLEwsTCxBLEEsUyl9fWVsc2V7bGV0IHA9Zy5hcnJheTt4PWcudmVyc2lvbjtmb3IobGV0IGI9MCxfPXAubGVuZ3RoLzMtMTtiPF87Yis9Myl7bGV0IFM9YiswLEw9YisxLEE9YisyO2YucHVzaChTLEwsTCxBLEEsUyl9fWxldCB2PW5ldyhwMChmKT9zbDpybCkoZiwxKTt2LnZlcnNpb249eDtsZXQgbT1zLmdldChoKTttJiZ0LnJlbW92ZShtKSxzLnNldChoLHYpfWZ1bmN0aW9uIHUoaCl7bGV0IGY9cy5nZXQoaCk7aWYoZil7bGV0IGQ9aC5pbmRleDtkIT09bnVsbCYmZi52ZXJzaW9uPGQudmVyc2lvbiYmYyhoKX1lbHNlIGMoaCk7cmV0dXJuIHMuZ2V0KGgpfXJldHVybntnZXQ6YSx1cGRhdGU6bCxnZXRXaXJlZnJhbWVBdHRyaWJ1dGU6dX19ZnVuY3Rpb24gaVMobix0LGUsaSl7bGV0IHI9aS5pc1dlYkdMMixzO2Z1bmN0aW9uIG8oZil7cz1mfWxldCBhLGw7ZnVuY3Rpb24gYyhmKXthPWYudHlwZSxsPWYuYnl0ZXNQZXJFbGVtZW50fWZ1bmN0aW9uIHUoZixkKXtuLmRyYXdFbGVtZW50cyhzLGQsYSxmKmwpLGUudXBkYXRlKGQscywxKX1mdW5jdGlvbiBoKGYsZCxnKXtpZihnPT09MClyZXR1cm47bGV0IHgsdjtpZihyKXg9bix2PSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYoeD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLHY9ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIix4PT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn14W3ZdKHMsZCxhLGYqbCxnKSxlLnVwZGF0ZShkLHMsZyl9dGhpcy5zZXRNb2RlPW8sdGhpcy5zZXRJbmRleD1jLHRoaXMucmVuZGVyPXUsdGhpcy5yZW5kZXJJbnN0YW5jZXM9aH1mdW5jdGlvbiByUyhuKXtsZXQgdD17Z2VvbWV0cmllczowLHRleHR1cmVzOjB9LGU9e2ZyYW1lOjAsY2FsbHM6MCx0cmlhbmdsZXM6MCxwb2ludHM6MCxsaW5lczowfTtmdW5jdGlvbiBpKHMsbyxhKXtzd2l0Y2goZS5jYWxscysrLG8pe2Nhc2UgNDplLnRyaWFuZ2xlcys9YSoocy8zKTticmVhaztjYXNlIDE6ZS5saW5lcys9YSoocy8yKTticmVhaztjYXNlIDM6ZS5saW5lcys9YSoocy0xKTticmVhaztjYXNlIDI6ZS5saW5lcys9YSpzO2JyZWFrO2Nhc2UgMDplLnBvaW50cys9YSpzO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLG8pO2JyZWFrfX1mdW5jdGlvbiByKCl7ZS5mcmFtZSsrLGUuY2FsbHM9MCxlLnRyaWFuZ2xlcz0wLGUucG9pbnRzPTAsZS5saW5lcz0wfXJldHVybnttZW1vcnk6dCxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpyLHVwZGF0ZTppfX12YXIgY289Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPWZlLHRoaXMubWluRmlsdGVyPWZlLHRoaXMud3JhcFI9VmUsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07Y28ucHJvdG90eXBlLmlzRGF0YVRleHR1cmUyREFycmF5PSEwO2Z1bmN0aW9uIHNTKG4sdCl7cmV0dXJuIG5bMF0tdFswXX1mdW5jdGlvbiBvUyhuLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhuWzFdKX1mdW5jdGlvbiB3ZyhuLHQpe2xldCBlPTEsaT10LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU/dC5kYXRhLmFycmF5OnQuYXJyYXk7aSBpbnN0YW5jZW9mIEludDhBcnJheT9lPTEyNzppIGluc3RhbmNlb2YgSW50MTZBcnJheT9lPTMyNzY3OmkgaW5zdGFuY2VvZiBJbnQzMkFycmF5P2U9MjE0NzQ4MzY0Nzpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTE1vcnBodGFyZ2V0czogVW5zdXBwb3J0ZWQgbW9ycGggYXR0cmlidXRlIGRhdGEgdHlwZTogIixpKSxuLmRpdmlkZVNjYWxhcihlKX1mdW5jdGlvbiBhUyhuLHQsZSl7bGV0IGk9e30scj1uZXcgRmxvYXQzMkFycmF5KDgpLHM9bmV3IFdlYWtNYXAsbz1uZXcgVCxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtmdW5jdGlvbiBsKGMsdSxoLGYpe2xldCBkPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKHQuaXNXZWJHTDI9PT0hMCl7bGV0IGc9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLHg9cy5nZXQodSk7aWYoeD09PXZvaWQgMHx8eC5jb3VudCE9PWcpe2xldCBSPWZ1bmN0aW9uKCl7WC5kaXNwb3NlKCkscy5kZWxldGUodSksdS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixSKX07eCE9PXZvaWQgMCYmeC50ZXh0dXJlLmRpc3Bvc2UoKTtsZXQgcD11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwhPT12b2lkIDAsYj11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixfPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbHx8W10sUz11LmF0dHJpYnV0ZXMucG9zaXRpb24uY291bnQsTD1wPT09ITA/MjoxLEE9UypMLEg9MTtBPnQubWF4VGV4dHVyZVNpemUmJihIPU1hdGguY2VpbChBL3QubWF4VGV4dHVyZVNpemUpLEE9dC5tYXhUZXh0dXJlU2l6ZSk7bGV0IHR0PW5ldyBGbG9hdDMyQXJyYXkoQSpIKjQqZyksWD1uZXcgY28odHQsQSxILGcpO1guZm9ybWF0PVJlLFgudHlwZT1VaSxYLm5lZWRzVXBkYXRlPSEwO2xldCB5PUwqNDtmb3IobGV0IEQ9MDtEPGc7RCsrKXtsZXQgRj1iW0RdLHo9X1tEXSxOPUEqSCo0KkQ7Zm9yKGxldCBWPTA7VjxGLmNvdW50O1YrKyl7by5mcm9tQnVmZmVyQXR0cmlidXRlKEYsViksRi5ub3JtYWxpemVkPT09ITAmJndnKG8sRik7bGV0IFE9Vip5O3R0W04rUSswXT1vLngsdHRbTitRKzFdPW8ueSx0dFtOK1ErMl09by56LHR0W04rUSszXT0wLHA9PT0hMCYmKG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh6LFYpLHoubm9ybWFsaXplZD09PSEwJiZ3ZyhvLHopLHR0W04rUSs0XT1vLngsdHRbTitRKzVdPW8ueSx0dFtOK1ErNl09by56LHR0W04rUSs3XT0wKX19eD17Y291bnQ6Zyx0ZXh0dXJlOlgsc2l6ZTpuZXcgSyhBLEgpfSxzLnNldCh1LHgpLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsUil9bGV0IHY9MDtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl2Kz1kW3BdO2xldCBtPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXY7Zi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsbSksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsZCksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmUiLHgudGV4dHVyZSxlKSxmLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLHguc2l6ZSl9ZWxzZXtsZXQgZz1kPT09dm9pZCAwPzA6ZC5sZW5ndGgseD1pW3UuaWRdO2lmKHg9PT12b2lkIDB8fHgubGVuZ3RoIT09Zyl7eD1bXTtmb3IobGV0IF89MDtfPGc7XysrKXhbX109W18sMF07aVt1LmlkXT14fWZvcihsZXQgXz0wO188ZztfKyspe2xldCBTPXhbX107U1swXT1fLFNbMV09ZFtfXX14LnNvcnQob1MpO2ZvcihsZXQgXz0wO188ODtfKyspXzxnJiZ4W19dWzFdPyhhW19dWzBdPXhbX11bMF0sYVtfXVsxXT14W19dWzFdKTooYVtfXVswXT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixhW19dWzFdPTApO2Euc29ydChzUyk7bGV0IHY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwscD0wO2ZvcihsZXQgXz0wO188ODtfKyspe2xldCBTPWFbX10sTD1TWzBdLEE9U1sxXTtMIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJkE/KHYmJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXykhPT12W0xdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK18sdltMXSksbSYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitfKSE9PW1bTF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXyxtW0xdKSxyW19dPUEscCs9QSk6KHYmJnUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrXyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitfKSxtJiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK18pPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrXykscltfXT0wKX1sZXQgYj11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1wO2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLGIpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShuLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLHIpfX1yZXR1cm57dXBkYXRlOmx9fWZ1bmN0aW9uIGxTKG4sdCxlLGkpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHMobCl7bGV0IGM9aS5yZW5kZXIuZnJhbWUsdT1sLmdlb21ldHJ5LGg9dC5nZXQobCx1KTtyZXR1cm4gci5nZXQoaCkhPT1jJiYodC51cGRhdGUoaCksci5zZXQoaCxjKSksbC5pc0luc3RhbmNlZE1lc2gmJihsLmhhc0V2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpPT09ITEmJmwuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksZS51cGRhdGUobC5pbnN0YW5jZU1hdHJpeCwzNDk2MiksbC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmZS51cGRhdGUobC5pbnN0YW5jZUNvbG9yLDM0OTYyKSksaH1mdW5jdGlvbiBvKCl7cj1uZXcgV2Vha01hcH1mdW5jdGlvbiBhKGwpe2xldCBjPWwudGFyZ2V0O2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksZS5yZW1vdmUoYy5pbnN0YW5jZU1hdHJpeCksYy5pbnN0YW5jZUNvbG9yIT09bnVsbCYmZS5yZW1vdmUoYy5pbnN0YW5jZUNvbG9yKX1yZXR1cm57dXBkYXRlOnMsZGlzcG9zZTpvfX12YXIgbGw9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPWZlLHRoaXMubWluRmlsdGVyPWZlLHRoaXMud3JhcFI9VmUsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07bGwucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgdjA9bmV3IGFlLF8wPW5ldyBjbyx3MD1uZXcgbGwsTTA9bmV3IFdyLE1nPVtdLGJnPVtdLFNnPW5ldyBGbG9hdDMyQXJyYXkoMTYpLEVnPW5ldyBGbG9hdDMyQXJyYXkoOSksVGc9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBlcyhuLHQsZSl7bGV0IGk9blswXTtpZihpPD0wfHxpPjApcmV0dXJuIG47bGV0IHI9dCplLHM9TWdbcl07aWYocz09PXZvaWQgMCYmKHM9bmV3IEZsb2F0MzJBcnJheShyKSxNZ1tyXT1zKSx0IT09MCl7aS50b0FycmF5KHMsMCk7Zm9yKGxldCBvPTEsYT0wO28hPT10OysrbylhKz1lLG5bb10udG9BcnJheShzLGEpfXJldHVybiBzfWZ1bmN0aW9uIExlKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspaWYobltlXSE9PXRbZV0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVGUobix0KXtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspbltlXT10W2VdfWZ1bmN0aW9uIFBsKG4sdCl7bGV0IGU9YmdbdF07ZT09PXZvaWQgMCYmKGU9bmV3IEludDMyQXJyYXkodCksYmdbdF09ZSk7Zm9yKGxldCBpPTA7aSE9PXQ7KytpKWVbaV09bi5hbGxvY2F0ZVRleHR1cmVVbml0KCk7cmV0dXJuIGV9ZnVuY3Rpb24gY1Mobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWYodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gdVMobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHQueCE9PXZvaWQgMCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueSkmJihuLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksZVswXT10LngsZVsxXT10LnkpO2Vsc2V7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxUZShlLHQpfX1mdW5jdGlvbiBoUyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodC54IT09dm9pZCAwKShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56KSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LngsdC55LHQueiksZVswXT10LngsZVsxXT10LnksZVsyXT10LnopO2Vsc2UgaWYodC5yIT09dm9pZCAwKShlWzBdIT09dC5yfHxlWzFdIT09dC5nfHxlWzJdIT09dC5iKSYmKG4udW5pZm9ybTNmKHRoaXMuYWRkcix0LnIsdC5nLHQuYiksZVswXT10LnIsZVsxXT10LmcsZVsyXT10LmIpO2Vsc2V7aWYoTGUoZSx0KSlyZXR1cm47bi51bmlmb3JtM2Z2KHRoaXMuYWRkcix0KSxUZShlLHQpfX1mdW5jdGlvbiBmUyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7aWYodC54IT09dm9pZCAwKShlWzBdIT09dC54fHxlWzFdIT09dC55fHxlWzJdIT09dC56fHxlWzNdIT09dC53KSYmKG4udW5pZm9ybTRmKHRoaXMuYWRkcix0LngsdC55LHQueix0LncpLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56LGVbM109dC53KTtlbHNle2lmKExlKGUsdCkpcmV0dXJuO24udW5pZm9ybTRmdih0aGlzLmFkZHIsdCksVGUoZSx0KX19ZnVuY3Rpb24gZFMobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZihpPT09dm9pZCAwKXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLFRlKGUsdCl9ZWxzZXtpZihMZShlLGkpKXJldHVybjtUZy5zZXQoaSksbi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxUZyksVGUoZSxpKX19ZnVuY3Rpb24gcFMobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZihpPT09dm9pZCAwKXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLFRlKGUsdCl9ZWxzZXtpZihMZShlLGkpKXJldHVybjtFZy5zZXQoaSksbi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxFZyksVGUoZSxpKX19ZnVuY3Rpb24gbVMobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZihpPT09dm9pZCAwKXtpZihMZShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLFRlKGUsdCl9ZWxzZXtpZihMZShlLGkpKXJldHVybjtTZy5zZXQoaSksbi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxTZyksVGUoZSxpKX19ZnVuY3Rpb24gZ1Mobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24geFMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIHlTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiB2UyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTRpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gX1Mobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMXVpKHRoaXMuYWRkcix0KSxlWzBdPXQpfWZ1bmN0aW9uIHdTKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtMZShlLHQpfHwobi51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCksVGUoZSx0KSl9ZnVuY3Rpb24gTVMobix0KXtsZXQgZT10aGlzLmNhY2hlO0xlKGUsdCl8fChuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxUZShlLHQpKX1mdW5jdGlvbiBiUyhuLHQpe2xldCBlPXRoaXMuY2FjaGU7TGUoZSx0KXx8KG4udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpLFRlKGUsdCkpfWZ1bmN0aW9uIFNTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlMkQodHx8djAscil9ZnVuY3Rpb24gRVMobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2V0VGV4dHVyZTNEKHR8fHcwLHIpfWZ1bmN0aW9uIFRTKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxNMCxyKX1mdW5jdGlvbiBBUyhuLHQsZSl7bGV0IGk9dGhpcy5jYWNoZSxyPWUuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO2lbMF0hPT1yJiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHIpLGlbMF09ciksZS5zZXRUZXh0dXJlMkRBcnJheSh0fHxfMCxyKX1mdW5jdGlvbiBDUyhuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBjUztjYXNlIDM1NjY0OnJldHVybiB1UztjYXNlIDM1NjY1OnJldHVybiBoUztjYXNlIDM1NjY2OnJldHVybiBmUztjYXNlIDM1Njc0OnJldHVybiBkUztjYXNlIDM1Njc1OnJldHVybiBwUztjYXNlIDM1Njc2OnJldHVybiBtUztjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gZ1M7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB4UztjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIHlTO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gdlM7Y2FzZSA1MTI1OnJldHVybiBfUztjYXNlIDM2Mjk0OnJldHVybiB3UztjYXNlIDM2Mjk1OnJldHVybiBNUztjYXNlIDM2Mjk2OnJldHVybiBiUztjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIFNTO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBFUztjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiBUUztjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBBU319ZnVuY3Rpb24gUlMobix0KXtuLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIExTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsMik7bi51bmlmb3JtMmZ2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBQUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDMpO24udW5pZm9ybTNmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gRFMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIElTKG4sdCl7bGV0IGU9ZXModCx0aGlzLnNpemUsNCk7bi51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBOUyhuLHQpe2xldCBlPWVzKHQsdGhpcy5zaXplLDkpO24udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gRlMobix0KXtsZXQgZT1lcyh0LHRoaXMuc2l6ZSwxNik7bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiB6UyhuLHQpe24udW5pZm9ybTFpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gVVMobix0KXtuLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEJTKG4sdCl7bi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBPUyhuLHQpe24udW5pZm9ybTRpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24ga1Mobix0KXtuLnVuaWZvcm0xdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBIUyhuLHQpe24udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFZTKG4sdCl7bi51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gR1Mobix0KXtuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBXUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2FmZVNldFRleHR1cmUyRCh0W3NdfHx2MCxyW3NdKX1mdW5jdGlvbiBxUyhuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1QbChlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBzPTA7cyE9PWk7KytzKWUuc2V0VGV4dHVyZTNEKHRbc118fHcwLHJbc10pfWZ1bmN0aW9uIFhTKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPVBsKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IHM9MDtzIT09aTsrK3MpZS5zYWZlU2V0VGV4dHVyZUN1YmUodFtzXXx8TTAscltzXSl9ZnVuY3Rpb24gWVMobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9UGwoZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgcz0wO3MhPT1pOysrcyllLnNldFRleHR1cmUyREFycmF5KHRbc118fF8wLHJbc10pfWZ1bmN0aW9uIFpTKG4pe3N3aXRjaChuKXtjYXNlIDUxMjY6cmV0dXJuIFJTO2Nhc2UgMzU2NjQ6cmV0dXJuIExTO2Nhc2UgMzU2NjU6cmV0dXJuIFBTO2Nhc2UgMzU2NjY6cmV0dXJuIERTO2Nhc2UgMzU2NzQ6cmV0dXJuIElTO2Nhc2UgMzU2NzU6cmV0dXJuIE5TO2Nhc2UgMzU2NzY6cmV0dXJuIEZTO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiB6UztjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIFVTO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gQlM7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBPUztjYXNlIDUxMjU6cmV0dXJuIGtTO2Nhc2UgMzYyOTQ6cmV0dXJuIEhTO2Nhc2UgMzYyOTU6cmV0dXJuIFZTO2Nhc2UgMzYyOTY6cmV0dXJuIEdTO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gV1M7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIHFTO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIFhTO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIFlTfX1mdW5jdGlvbiBKUyhuLHQsZSl7dGhpcy5pZD1uLHRoaXMuYWRkcj1lLHRoaXMuY2FjaGU9W10sdGhpcy5zZXRWYWx1ZT1DUyh0LnR5cGUpfWZ1bmN0aW9uIGIwKG4sdCxlKXt0aGlzLmlkPW4sdGhpcy5hZGRyPWUsdGhpcy5jYWNoZT1bXSx0aGlzLnNpemU9dC5zaXplLHRoaXMuc2V0VmFsdWU9WlModC50eXBlKX1iMC5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24obil7bGV0IHQ9dGhpcy5jYWNoZTtuIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZ0Lmxlbmd0aCE9PW4ubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KG4ubGVuZ3RoKSksVGUodCxuKX07ZnVuY3Rpb24gUzAobil7dGhpcy5pZD1uLHRoaXMuc2VxPVtdLHRoaXMubWFwPXt9fVMwLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dGhpcy5zZXE7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3Ipe2xldCBvPWlbcl07by5zZXRWYWx1ZShuLHRbby5pZF0sZSl9fTt2YXIgQ3U9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIEFnKG4sdCl7bi5zZXEucHVzaCh0KSxuLm1hcFt0LmlkXT10fWZ1bmN0aW9uICRTKG4sdCxlKXtsZXQgaT1uLm5hbWUscj1pLmxlbmd0aDtmb3IoQ3UubGFzdEluZGV4PTA7Oyl7bGV0IHM9Q3UuZXhlYyhpKSxvPUN1Lmxhc3RJbmRleCxhPXNbMV0sbD1zWzJdPT09Il0iLGM9c1szXTtpZihsJiYoYT1hfDApLGM9PT12b2lkIDB8fGM9PT0iWyImJm8rMj09PXIpe0FnKGUsYz09PXZvaWQgMD9uZXcgSlMoYSxuLHQpOm5ldyBiMChhLG4sdCkpO2JyZWFrfWVsc2V7bGV0IGg9ZS5tYXBbYV07aD09PXZvaWQgMCYmKGg9bmV3IFMwKGEpLEFnKGUsaCkpLGU9aH19fWZ1bmN0aW9uIGlpKG4sdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IGU9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgaT0wO2k8ZTsrK2kpe2xldCByPW4uZ2V0QWN0aXZlVW5pZm9ybSh0LGkpLHM9bi5nZXRVbmlmb3JtTG9jYXRpb24odCxyLm5hbWUpOyRTKHIscyx0aGlzKX19aWkucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPXRoaXMubWFwW3RdO3IhPT12b2lkIDAmJnIuc2V0VmFsdWUobixlLGkpfTtpaS5wcm90b3R5cGUuc2V0T3B0aW9uYWw9ZnVuY3Rpb24obix0LGUpe2xldCBpPXRbZV07aSE9PXZvaWQgMCYmdGhpcy5zZXRWYWx1ZShuLGUsaSl9O2lpLnVwbG9hZD1mdW5jdGlvbihuLHQsZSxpKXtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3IhPT1zOysrcil7bGV0IG89dFtyXSxhPWVbby5pZF07YS5uZWVkc1VwZGF0ZSE9PSExJiZvLnNldFZhbHVlKG4sYS52YWx1ZSxpKX19O2lpLnNlcVdpdGhWYWx1ZT1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1uW2ldO3MuaWQgaW4gdCYmZS5wdXNoKHMpfXJldHVybiBlfTtmdW5jdGlvbiBDZyhuLHQsZSl7bGV0IGk9bi5jcmVhdGVTaGFkZXIodCk7cmV0dXJuIG4uc2hhZGVyU291cmNlKGksZSksbi5jb21waWxlU2hhZGVyKGkpLGl9dmFyIEtTPTA7ZnVuY3Rpb24gUVMobil7bGV0IHQ9bi5zcGxpdChgCmApO2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09ZSsxKyI6ICIrdFtlXTtyZXR1cm4gdC5qb2luKGAKYCl9ZnVuY3Rpb24galMobil7c3dpdGNoKG4pe2Nhc2Ugcmk6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlICR0OnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLG4pLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fWZ1bmN0aW9uIFJnKG4sdCxlKXtsZXQgaT1uLmdldFNoYWRlclBhcmFtZXRlcih0LDM1NzEzKSxyPW4uZ2V0U2hhZGVySW5mb0xvZyh0KS50cmltKCk7cmV0dXJuIGkmJnI9PT0iIj8iIjplLnRvVXBwZXJDYXNlKCkrYAoKYCtyK2AKCmArUVMobi5nZXRTaGFkZXJTb3VyY2UodCkpfWZ1bmN0aW9uIHRFKG4sdCl7bGV0IGU9alModCk7cmV0dXJuInZlYzQgIituKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrZVswXStlWzFdKyI7IH0ifWZ1bmN0aW9uIGVFKG4sdCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgQXc6ZT0iTGluZWFyIjticmVhaztjYXNlIEN3OmU9IlJlaW5oYXJkIjticmVhaztjYXNlIFJ3OmU9Ik9wdGltaXplZENpbmVvbiI7YnJlYWs7Y2FzZSBMdzplPSJBQ0VTRmlsbWljIjticmVhaztjYXNlIFB3OmU9IkN1c3RvbSI7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgdG9uZU1hcHBpbmc6Iix0KSxlPSJMaW5lYXIifXJldHVybiJ2ZWMzICIrbisiKCB2ZWMzIGNvbG9yICkgeyByZXR1cm4gIitlKyJUb25lTWFwcGluZyggY29sb3IgKTsgfSJ9ZnVuY3Rpb24gbkUobil7cmV0dXJuW24uZXh0ZW5zaW9uRGVyaXZhdGl2ZXN8fG4uZW52TWFwQ3ViZVVWfHxuLmJ1bXBNYXB8fG4udGFuZ2VudFNwYWNlTm9ybWFsTWFwfHxuLmNsZWFyY29hdE5vcm1hbE1hcHx8bi5mbGF0U2hhZGluZ3x8bi5zaGFkZXJJRD09PSJwaHlzaWNhbCI/IiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlIjoiIiwobi5leHRlbnNpb25GcmFnRGVwdGh8fG4ubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcikmJm4ucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNleHRlbnNpb24gR0xfRVhUX2ZyYWdfZGVwdGggOiBlbmFibGUiOiIiLG4uZXh0ZW5zaW9uRHJhd0J1ZmZlcnMmJm4ucmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVycz8iI2V4dGVuc2lvbiBHTF9FWFRfZHJhd19idWZmZXJzIDogcmVxdWlyZSI6IiIsKG4uZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8bi5lbnZNYXB8fG4udHJhbnNtaXNzaW9uKSYmbi5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNleHRlbnNpb24gR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA6IGVuYWJsZSI6IiJdLmZpbHRlcigkcykuam9pbihgCmApfWZ1bmN0aW9uIGlFKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBpbiBuKXtsZXQgaT1uW2VdO2khPT0hMSYmdC5wdXNoKCIjZGVmaW5lICIrZSsiICIraSl9cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIHJFKG4sdCl7bGV0IGU9e30saT1uLmdldFByb2dyYW1QYXJhbWV0ZXIodCwzNTcyMSk7Zm9yKGxldCByPTA7cjxpO3IrKyl7bGV0IHM9bi5nZXRBY3RpdmVBdHRyaWIodCxyKSxvPXMubmFtZSxhPTE7cy50eXBlPT09MzU2NzQmJihhPTIpLHMudHlwZT09PTM1Njc1JiYoYT0zKSxzLnR5cGU9PT0zNTY3NiYmKGE9NCksZVtvXT17dHlwZTpzLnR5cGUsbG9jYXRpb246bi5nZXRBdHRyaWJMb2NhdGlvbih0LG8pLGxvY2F0aW9uU2l6ZTphfX1yZXR1cm4gZX1mdW5jdGlvbiAkcyhuKXtyZXR1cm4gbiE9PSIifWZ1bmN0aW9uIExnKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyx0Lm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csdC5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLHQubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyx0Lm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyx0Lm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLHQubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csdC5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLHQubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIFBnKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgc0U9L15bIFx0XSojaW5jbHVkZSArPChbXHdcZC4vXSspPi9nbTtmdW5jdGlvbiBxdShuKXtyZXR1cm4gbi5yZXBsYWNlKHNFLG9FKX1mdW5jdGlvbiBvRShuLHQpe2xldCBlPVB0W3RdO2lmKGU9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW4gbm90IHJlc29sdmUgI2luY2x1ZGUgPCIrdCsiPiIpO3JldHVybiBxdShlKX12YXIgYUU9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxsRT0vI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxzK2ZvclxzKlwoXHMqaW50XHMraVxzKj1ccyooXGQrKVxzKjtccyppXHMqPFxzKihcZCspXHMqO1xzKmlccypcK1wrXHMqXClccyp7KFtcc1xTXSs/KX1ccysjcHJhZ21hIHVucm9sbF9sb29wX2VuZC9nO2Z1bmN0aW9uIERnKG4pe3JldHVybiBuLnJlcGxhY2UobEUsRTApLnJlcGxhY2UoYUUsY0UpfWZ1bmN0aW9uIGNFKG4sdCxlLGkpe3JldHVybiBjb25zb2xlLndhcm4oIldlYkdMUHJvZ3JhbTogI3ByYWdtYSB1bnJvbGxfbG9vcCBzaGFkZXIgc3ludGF4IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydCBzeW50YXggaW5zdGVhZC4iKSxFMChuLHQsZSxpKX1mdW5jdGlvbiBFMChuLHQsZSxpKXtsZXQgcj0iIjtmb3IobGV0IHM9cGFyc2VJbnQodCk7czxwYXJzZUludChlKTtzKyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrcysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2cscyk7cmV0dXJuIHJ9ZnVuY3Rpb24gSWcobil7bGV0IHQ9InByZWNpc2lvbiAiK24ucHJlY2lzaW9uK2AgZmxvYXQ7CnByZWNpc2lvbiBgK24ucHJlY2lzaW9uKyIgaW50OyI7cmV0dXJuIG4ucHJlY2lzaW9uPT09ImhpZ2hwIj90Kz1gCiNkZWZpbmUgSElHSF9QUkVDSVNJT05gOm4ucHJlY2lzaW9uPT09Im1lZGl1bXAiP3QrPWAKI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OYDpuLnByZWNpc2lvbj09PSJsb3dwIiYmKHQrPWAKI2RlZmluZSBMT1dfUFJFQ0lTSU9OYCksdH1mdW5jdGlvbiB1RShuKXtsZXQgdD0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiBuLnNoYWRvd01hcFR5cGU9PT1sMD90PSJTSEFET1dNQVBfVFlQRV9QQ0YiOm4uc2hhZG93TWFwVHlwZT09PXN3P3Q9IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIjpuLnNoYWRvd01hcFR5cGU9PT1KcyYmKHQ9IlNIQURPV01BUF9UWVBFX1ZTTSIpLHR9ZnVuY3Rpb24gaEUobil7bGV0IHQ9IkVOVk1BUF9UWVBFX0NVQkUiO2lmKG4uZW52TWFwKXN3aXRjaChuLmVudk1hcE1vZGUpe2Nhc2UgQW86Y2FzZSBDbzp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIFJsOmNhc2UgS2g6dD0iRU5WTUFQX1RZUEVfQ1VCRV9VViI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gZkUobil7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKG4uZW52TWFwKXN3aXRjaChuLmVudk1hcE1vZGUpe2Nhc2UgQ286Y2FzZSBLaDp0PSJFTlZNQVBfTU9ERV9SRUZSQUNUSU9OIjticmVha31yZXR1cm4gdH1mdW5jdGlvbiBkRShuKXtsZXQgdD0iRU5WTUFQX0JMRU5ESU5HX05PTkUiO2lmKG4uZW52TWFwKXN3aXRjaChuLmNvbWJpbmUpe2Nhc2UgQ2w6dD0iRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZIjticmVhaztjYXNlIEV3OnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgVHc6dD0iRU5WTUFQX0JMRU5ESU5HX0FERCI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gcEUobix0LGUsaSl7bGV0IHI9bi5nZXRDb250ZXh0KCkscz1lLmRlZmluZXMsbz1lLnZlcnRleFNoYWRlcixhPWUuZnJhZ21lbnRTaGFkZXIsbD11RShlKSxjPWhFKGUpLHU9ZkUoZSksaD1kRShlKSxmPWUuaXNXZWJHTDI/IiI6bkUoZSksZD1pRShzKSxnPXIuY3JlYXRlUHJvZ3JhbSgpLHgsdixtPWUuZ2xzbFZlcnNpb24/IiN2ZXJzaW9uICIrZS5nbHNsVmVyc2lvbitgCmA6IiI7ZS5pc1Jhd1NoYWRlck1hdGVyaWFsPyh4PVtkXS5maWx0ZXIoJHMpLmpvaW4oYApgKSx4Lmxlbmd0aD4wJiYoeCs9YApgKSx2PVtmLGRdLmZpbHRlcigkcykuam9pbihgCmApLHYubGVuZ3RoPjAmJih2Kz1gCmApKTooeD1bSWcoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZCxlLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLGUuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBNQVhfQk9ORVMgIitlLm1heEJvbmVzLGUudXNlRm9nJiZlLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixlLnVzZUZvZyYmZS5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixlLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuZGlzcGxhY2VtZW50TWFwJiZlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsZS5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGUuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixlLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLGUucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGUubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGUuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixlLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixlLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixlLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixlLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLGUuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLGUudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsZS52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixlLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixlLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixlLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsZS51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsZS5tb3JwaE5vcm1hbHMmJmUuZmxhdFNoYWRpbmc9PT0hMT8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixlLm1vcnBoVGFyZ2V0cyYmZS5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRSI6IiIsZS5tb3JwaFRhcmdldHMmJmUuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICIrZS5tb3JwaFRhcmdldHNDb3VudDoiIixlLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsZS5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsZS5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiCWF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIglhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCIJYXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCIJYXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCIJYXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCIJI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsiLCIJI2Vsc2UiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCIJI2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIglhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIixgCmBdLmZpbHRlcigkcykuam9pbihgCmApLHY9W2YsSWcoZSksIiNkZWZpbmUgU0hBREVSX05BTUUgIitlLnNoYWRlck5hbWUsZCxlLnVzZUZvZyYmZS5mb2c/IiNkZWZpbmUgVVNFX0ZPRyI6IiIsZS51c2VGb2cmJmUuZm9nRXhwMj8iI2RlZmluZSBGT0dfRVhQMiI6IiIsZS5tYXA/IiNkZWZpbmUgVVNFX01BUCI6IiIsZS5tYXRjYXA/IiNkZWZpbmUgVVNFX01BVENBUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgVVNFX0VOVk1BUCI6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIitjOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrdToiIixlLmVudk1hcD8iI2RlZmluZSAiK2g6IiIsZS5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLGUuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixlLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsZS5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixlLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixlLm5vcm1hbE1hcCYmZS5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixlLmNsZWFyY29hdD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUIjoiIixlLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixlLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsZS5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLGUuc3BlY3VsYXJNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSTUFQIjoiIixlLnNwZWN1bGFySW50ZW5zaXR5TWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUCI6IiIsZS5zcGVjdWxhckNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUkNPTE9STUFQIjoiIixlLnJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfUk9VR0hORVNTTUFQIjoiIixlLm1ldGFsbmVzc01hcD8iI2RlZmluZSBVU0VfTUVUQUxORVNTTUFQIjoiIixlLmFscGhhTWFwPyIjZGVmaW5lIFVTRV9BTFBIQU1BUCI6IiIsZS5hbHBoYVRlc3Q/IiNkZWZpbmUgVVNFX0FMUEhBVEVTVCI6IiIsZS5zaGVlbj8iI2RlZmluZSBVU0VfU0hFRU4iOiIiLGUuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsZS5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLGUudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLGUudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLGUudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLGUuZGVjb2RlVmlkZW9UZXh0dXJlPyIjZGVmaW5lIERFQ09ERV9WSURFT19URVhUVVJFIjoiIixlLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixlLnZlcnRleENvbG9yc3x8ZS5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0NPTE9SIjoiIixlLnZlcnRleEFscGhhcz8iI2RlZmluZSBVU0VfQ09MT1JfQUxQSEEiOiIiLGUudmVydGV4VXZzPyIjZGVmaW5lIFVTRV9VViI6IiIsZS51dnNWZXJ0ZXhPbmx5PyIjZGVmaW5lIFVWU19WRVJURVhfT05MWSI6IiIsZS5ncmFkaWVudE1hcD8iI2RlZmluZSBVU0VfR1JBRElFTlRNQVAiOiIiLGUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLGUuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixlLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixlLnByZW11bHRpcGxpZWRBbHBoYT8iI2RlZmluZSBQUkVNVUxUSVBMSUVEX0FMUEhBIjoiIixlLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPyIjZGVmaW5lIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcj8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUYiOiIiLGUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2RlZmluZSBVU0VfTE9HREVQVEhCVUZfRVhUIjoiIiwoZS5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcCkmJmUucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZGVmaW5lIFRFWFRVUkVfTE9EX0VYVCI6IiIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IixlLnRvbmVNYXBwaW5nIT09dGk/IiNkZWZpbmUgVE9ORV9NQVBQSU5HIjoiIixlLnRvbmVNYXBwaW5nIT09dGk/UHQudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIixlLnRvbmVNYXBwaW5nIT09dGk/ZUUoInRvbmVNYXBwaW5nIixlLnRvbmVNYXBwaW5nKToiIixlLmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLGUuYWxwaGFXcml0ZT8iIjoiI2RlZmluZSBPUEFRVUUiLFB0LmVuY29kaW5nc19wYXJzX2ZyYWdtZW50LHRFKCJsaW5lYXJUb091dHB1dFRleGVsIixlLm91dHB1dEVuY29kaW5nKSxlLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrZS5kZXB0aFBhY2tpbmc6IiIsYApgXS5maWx0ZXIoJHMpLmpvaW4oYApgKSksbz1xdShvKSxvPUxnKG8sZSksbz1QZyhvLGUpLGE9cXUoYSksYT1MZyhhLGUpLGE9UGcoYSxlKSxvPURnKG8pLGE9RGcoYSksZS5pc1dlYkdMMiYmZS5pc1Jhd1NoYWRlck1hdGVyaWFsIT09ITAmJihtPWAjdmVyc2lvbiAzMDAgZXMKYCx4PVsicHJlY2lzaW9uIG1lZGl1bXAgc2FtcGxlcjJEQXJyYXk7IiwiI2RlZmluZSBhdHRyaWJ1dGUgaW4iLCIjZGVmaW5lIHZhcnlpbmcgb3V0IiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSJdLmpvaW4oYApgKStgCmAreCx2PVsiI2RlZmluZSB2YXJ5aW5nIGluIixlLmdsc2xWZXJzaW9uPT09bmc/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLGUuZ2xzbFZlcnNpb249PT1uZz8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbihgCmApK2AKYCt2KTtsZXQgcD1tK3grbyxiPW0rdithLF89Q2cociwzNTYzMyxwKSxTPUNnKHIsMzU2MzIsYik7aWYoci5hdHRhY2hTaGFkZXIoZyxfKSxyLmF0dGFjaFNoYWRlcihnLFMpLGUuaW5kZXgwQXR0cmlidXRlTmFtZSE9PXZvaWQgMD9yLmJpbmRBdHRyaWJMb2NhdGlvbihnLDAsZS5pbmRleDBBdHRyaWJ1dGVOYW1lKTplLm1vcnBoVGFyZ2V0cz09PSEwJiZyLmJpbmRBdHRyaWJMb2NhdGlvbihnLDAsInBvc2l0aW9uIiksci5saW5rUHJvZ3JhbShnKSxuLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgSD1yLmdldFByb2dyYW1JbmZvTG9nKGcpLnRyaW0oKSx0dD1yLmdldFNoYWRlckluZm9Mb2coXykudHJpbSgpLFg9ci5nZXRTaGFkZXJJbmZvTG9nKFMpLnRyaW0oKSx5PSEwLFI9ITA7aWYoci5nZXRQcm9ncmFtUGFyYW1ldGVyKGcsMzU3MTQpPT09ITEpe3k9ITE7bGV0IEQ9UmcocixfLCJ2ZXJ0ZXgiKSxGPVJnKHIsUywiZnJhZ21lbnQiKTtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFByb2dyYW06IFNoYWRlciBFcnJvciAiK3IuZ2V0RXJyb3IoKSsiIC0gVkFMSURBVEVfU1RBVFVTICIrci5nZXRQcm9ncmFtUGFyYW1ldGVyKGcsMzU3MTUpK2AKClByb2dyYW0gSW5mbyBMb2c6IGArSCtgCmArRCtgCmArRil9ZWxzZSBIIT09IiI/Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFByb2dyYW0gSW5mbyBMb2c6IixIKToodHQ9PT0iInx8WD09PSIiKSYmKFI9ITEpO1ImJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTp5LHByb2dyYW1Mb2c6SCx2ZXJ0ZXhTaGFkZXI6e2xvZzp0dCxwcmVmaXg6eH0sZnJhZ21lbnRTaGFkZXI6e2xvZzpYLHByZWZpeDp2fX0pfXIuZGVsZXRlU2hhZGVyKF8pLHIuZGVsZXRlU2hhZGVyKFMpO2xldCBMO3RoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gTD09PXZvaWQgMCYmKEw9bmV3IGlpKHIsZykpLEx9O2xldCBBO3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQT09PXZvaWQgMCYmKEE9ckUocixnKSksQX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aS5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLHIuZGVsZXRlUHJvZ3JhbShnKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9ZS5zaGFkZXJOYW1lLHRoaXMuaWQ9S1MrKyx0aGlzLmNhY2hlS2V5PXQsdGhpcy51c2VkVGltZXM9MSx0aGlzLnByb2dyYW09Zyx0aGlzLnZlcnRleFNoYWRlcj1fLHRoaXMuZnJhZ21lbnRTaGFkZXI9Uyx0aGlzfXZhciBtRT0wLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgZT10LnZlcnRleFNoYWRlcixpPXQuZnJhZ21lbnRTaGFkZXIscj10aGlzLl9nZXRTaGFkZXJTdGFnZShlKSxzPXRoaXMuX2dldFNoYWRlclN0YWdlKGkpLG89dGhpcy5fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KTtyZXR1cm4gby5oYXMocik9PT0hMSYmKG8uYWRkKHIpLHIudXNlZFRpbWVzKyspLG8uaGFzKHMpPT09ITEmJihvLmFkZChzKSxzLnVzZWRUaW1lcysrKSx0aGlzfXJlbW92ZSh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KHQpO2ZvcihsZXQgaSBvZiBlKWkudXNlZFRpbWVzLS0saS51c2VkVGltZXM9PT0wJiZ0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZSh0KSx0aGlzfWdldFZlcnRleFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlcikuaWR9Z2V0RnJhZ21lbnRTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC5mcmFnbWVudFNoYWRlcikuaWR9ZGlzcG9zZSgpe3RoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKSx0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKX1fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGU7cmV0dXJuIGUuaGFzKHQpPT09ITEmJmUuc2V0KHQsbmV3IFNldCksZS5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCBlPXRoaXMuc2hhZGVyQ2FjaGU7aWYoZS5oYXModCk9PT0hMSl7bGV0IGk9bmV3IFl1O2Uuc2V0KHQsaSl9cmV0dXJuIGUuZ2V0KHQpfX0sWXU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPW1FKyssdGhpcy51c2VkVGltZXM9MH19O2Z1bmN0aW9uIGdFKG4sdCxlLGkscixzLG8pe2xldCBhPW5ldyBpbCxsPW5ldyBYdSxjPVtdLHU9ci5pc1dlYkdMMixoPXIubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixmPXIuZmxvYXRWZXJ0ZXhUZXh0dXJlcyxkPXIubWF4VmVydGV4VW5pZm9ybXMsZz1yLnZlcnRleFRleHR1cmVzLHg9ci5wcmVjaXNpb24sdj17TWVzaERlcHRoTWF0ZXJpYWw6ImRlcHRoIixNZXNoRGlzdGFuY2VNYXRlcmlhbDoiZGlzdGFuY2VSR0JBIixNZXNoTm9ybWFsTWF0ZXJpYWw6Im5vcm1hbCIsTWVzaEJhc2ljTWF0ZXJpYWw6ImJhc2ljIixNZXNoTGFtYmVydE1hdGVyaWFsOiJsYW1iZXJ0IixNZXNoUGhvbmdNYXRlcmlhbDoicGhvbmciLE1lc2hUb29uTWF0ZXJpYWw6InRvb24iLE1lc2hTdGFuZGFyZE1hdGVyaWFsOiJwaHlzaWNhbCIsTWVzaFBoeXNpY2FsTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoTWF0Y2FwTWF0ZXJpYWw6Im1hdGNhcCIsTGluZUJhc2ljTWF0ZXJpYWw6ImJhc2ljIixMaW5lRGFzaGVkTWF0ZXJpYWw6ImRhc2hlZCIsUG9pbnRzTWF0ZXJpYWw6InBvaW50cyIsU2hhZG93TWF0ZXJpYWw6InNoYWRvdyIsU3ByaXRlTWF0ZXJpYWw6InNwcml0ZSJ9O2Z1bmN0aW9uIG0oeSl7bGV0IEQ9eS5za2VsZXRvbi5ib25lcztpZihmKXJldHVybiAxMDI0O3tsZXQgej1NYXRoLmZsb29yKChkLTIwKS80KSxOPU1hdGgubWluKHosRC5sZW5ndGgpO3JldHVybiBOPEQubGVuZ3RoPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFNrZWxldG9uIGhhcyAiK0QubGVuZ3RoKyIgYm9uZXMuIFRoaXMgR1BVIHN1cHBvcnRzICIrTisiLiIpLDApOk59fWZ1bmN0aW9uIHAoeSxSLEQsRix6KXtsZXQgTj1GLmZvZyxWPXkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9GLmVudmlyb25tZW50Om51bGwsUT0oeS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2U6dCkuZ2V0KHkuZW52TWFwfHxWKSxhdD12W3kudHlwZV0sRz16LmlzU2tpbm5lZE1lc2g/bSh6KTowO3kucHJlY2lzaW9uIT09bnVsbCYmKHg9ci5nZXRNYXhQcmVjaXNpb24oeS5wcmVjaXNpb24pLHghPT15LnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLHkucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIseCwiaW5zdGVhZC4iKSk7bGV0ICQsbHQsZHQseHQ7aWYoYXQpe2xldCBCPWZuW2F0XTskPUIudmVydGV4U2hhZGVyLGx0PUIuZnJhZ21lbnRTaGFkZXJ9ZWxzZSAkPXkudmVydGV4U2hhZGVyLGx0PXkuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoeSksZHQ9bC5nZXRWZXJ0ZXhTaGFkZXJJRCh5KSx4dD1sLmdldEZyYWdtZW50U2hhZGVySUQoeSk7bGV0IGs9bi5nZXRSZW5kZXJUYXJnZXQoKSxGdD15LmFscGhhVGVzdD4wLG10PXkuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6YXQsc2hhZGVyTmFtZTp5LnR5cGUsdmVydGV4U2hhZGVyOiQsZnJhZ21lbnRTaGFkZXI6bHQsZGVmaW5lczp5LmRlZmluZXMsY3VzdG9tVmVydGV4U2hhZGVySUQ6ZHQsY3VzdG9tRnJhZ21lbnRTaGFkZXJJRDp4dCxpc1Jhd1NoYWRlck1hdGVyaWFsOnkuaXNSYXdTaGFkZXJNYXRlcmlhbD09PSEwLGdsc2xWZXJzaW9uOnkuZ2xzbFZlcnNpb24scHJlY2lzaW9uOngsaW5zdGFuY2luZzp6LmlzSW5zdGFuY2VkTWVzaD09PSEwLGluc3RhbmNpbmdDb2xvcjp6LmlzSW5zdGFuY2VkTWVzaD09PSEwJiZ6Lmluc3RhbmNlQ29sb3IhPT1udWxsLHN1cHBvcnRzVmVydGV4VGV4dHVyZXM6ZyxvdXRwdXRFbmNvZGluZzprPT09bnVsbD9uLm91dHB1dEVuY29kaW5nOmsuaXNYUlJlbmRlclRhcmdldD09PSEwP2sudGV4dHVyZS5lbmNvZGluZzpyaSxtYXA6ISF5Lm1hcCxtYXRjYXA6ISF5Lm1hdGNhcCxlbnZNYXA6ISFRLGVudk1hcE1vZGU6USYmUS5tYXBwaW5nLGVudk1hcEN1YmVVVjohIVEmJihRLm1hcHBpbmc9PT1SbHx8US5tYXBwaW5nPT09S2gpLGxpZ2h0TWFwOiEheS5saWdodE1hcCxhb01hcDohIXkuYW9NYXAsZW1pc3NpdmVNYXA6ISF5LmVtaXNzaXZlTWFwLGJ1bXBNYXA6ISF5LmJ1bXBNYXAsbm9ybWFsTWFwOiEheS5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6eS5ub3JtYWxNYXBUeXBlPT09ancsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOnkubm9ybWFsTWFwVHlwZT09PXRzLGRlY29kZVZpZGVvVGV4dHVyZTohIXkubWFwJiZ5Lm1hcC5pc1ZpZGVvVGV4dHVyZT09PSEwJiZ5Lm1hcC5lbmNvZGluZz09PSR0LGNsZWFyY29hdDptdCxjbGVhcmNvYXRNYXA6bXQmJiEheS5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOm10JiYhIXkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLGNsZWFyY29hdE5vcm1hbE1hcDptdCYmISF5LmNsZWFyY29hdE5vcm1hbE1hcCxkaXNwbGFjZW1lbnRNYXA6ISF5LmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISF5LnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISF5Lm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIXkuc3BlY3VsYXJNYXAsc3BlY3VsYXJJbnRlbnNpdHlNYXA6ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwLHNwZWN1bGFyQ29sb3JNYXA6ISF5LnNwZWN1bGFyQ29sb3JNYXAsYWxwaGFNYXA6ISF5LmFscGhhTWFwLGFscGhhVGVzdDpGdCxhbHBoYVdyaXRlOnkuYWxwaGFXcml0ZXx8eS50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIXkuZ3JhZGllbnRNYXAsc2hlZW46eS5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISF5LnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISF5LnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjp5LnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIXkudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIXkudGhpY2tuZXNzTWFwLGNvbWJpbmU6eS5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEheS5ub3JtYWxNYXAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6eS52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOnkudmVydGV4Q29sb3JzPT09ITAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3ImJnouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsdmVydGV4VXZzOiEheS5tYXB8fCEheS5idW1wTWFwfHwhIXkubm9ybWFsTWFwfHwhIXkuc3BlY3VsYXJNYXB8fCEheS5hbHBoYU1hcHx8ISF5LmVtaXNzaXZlTWFwfHwhIXkucm91Z2huZXNzTWFwfHwhIXkubWV0YWxuZXNzTWFwfHwhIXkuY2xlYXJjb2F0TWFwfHwhIXkuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHwhIXkuY2xlYXJjb2F0Tm9ybWFsTWFwfHwhIXkuZGlzcGxhY2VtZW50TWFwfHwhIXkudHJhbnNtaXNzaW9uTWFwfHwhIXkudGhpY2tuZXNzTWFwfHwhIXkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEheS5zcGVjdWxhckNvbG9yTWFwfHwhIXkuc2hlZW5Db2xvck1hcHx8ISF5LnNoZWVuUm91Z2huZXNzTWFwLHV2c1ZlcnRleE9ubHk6ISghIXkubWFwfHwhIXkuYnVtcE1hcHx8ISF5Lm5vcm1hbE1hcHx8ISF5LnNwZWN1bGFyTWFwfHwhIXkuYWxwaGFNYXB8fCEheS5lbWlzc2l2ZU1hcHx8ISF5LnJvdWdobmVzc01hcHx8ISF5Lm1ldGFsbmVzc01hcHx8ISF5LmNsZWFyY29hdE5vcm1hbE1hcHx8eS50cmFuc21pc3Npb24+MHx8ISF5LnRyYW5zbWlzc2lvbk1hcHx8ISF5LnRoaWNrbmVzc01hcHx8ISF5LnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIXkuc3BlY3VsYXJDb2xvck1hcHx8eS5zaGVlbj4wfHwhIXkuc2hlZW5Db2xvck1hcHx8ISF5LnNoZWVuUm91Z2huZXNzTWFwKSYmISF5LmRpc3BsYWNlbWVudE1hcCxmb2c6ISFOLHVzZUZvZzp5LmZvZyxmb2dFeHAyOk4mJk4uaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEheS5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246eS5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpoLHNraW5uaW5nOnouaXNTa2lubmVkTWVzaD09PSEwJiZHPjAsbWF4Qm9uZXM6Ryx1c2VWZXJ0ZXhUZXh0dXJlOmYsbW9ycGhUYXJnZXRzOiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixtb3JwaE5vcm1hbHM6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxtb3JwaFRhcmdldHNDb3VudDohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/ei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoOjAsbnVtRGlyTGlnaHRzOlIuZGlyZWN0aW9uYWwubGVuZ3RoLG51bVBvaW50TGlnaHRzOlIucG9pbnQubGVuZ3RoLG51bVNwb3RMaWdodHM6Ui5zcG90Lmxlbmd0aCxudW1SZWN0QXJlYUxpZ2h0czpSLnJlY3RBcmVhLmxlbmd0aCxudW1IZW1pTGlnaHRzOlIuaGVtaS5sZW5ndGgsbnVtRGlyTGlnaHRTaGFkb3dzOlIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoLG51bVBvaW50TGlnaHRTaGFkb3dzOlIucG9pbnRTaGFkb3dNYXAubGVuZ3RoLG51bVNwb3RMaWdodFNoYWRvd3M6Ui5zcG90U2hhZG93TWFwLmxlbmd0aCxudW1DbGlwcGluZ1BsYW5lczpvLm51bVBsYW5lcyxudW1DbGlwSW50ZXJzZWN0aW9uOm8ubnVtSW50ZXJzZWN0aW9uLGRpdGhlcmluZzp5LmRpdGhlcmluZyxzaGFkb3dNYXBFbmFibGVkOm4uc2hhZG93TWFwLmVuYWJsZWQmJkQubGVuZ3RoPjAsc2hhZG93TWFwVHlwZTpuLnNoYWRvd01hcC50eXBlLHRvbmVNYXBwaW5nOnkudG9uZU1hcHBlZD9uLnRvbmVNYXBwaW5nOnRpLHBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzOm4ucGh5c2ljYWxseUNvcnJlY3RMaWdodHMscHJlbXVsdGlwbGllZEFscGhhOnkucHJlbXVsdGlwbGllZEFscGhhLGRvdWJsZVNpZGVkOnkuc2lkZT09PUhyLGZsaXBTaWRlZDp5LnNpZGU9PT1oZSxkZXB0aFBhY2tpbmc6eS5kZXB0aFBhY2tpbmchPT12b2lkIDA/eS5kZXB0aFBhY2tpbmc6ITEsaW5kZXgwQXR0cmlidXRlTmFtZTp5LmluZGV4MEF0dHJpYnV0ZU5hbWUsZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6eS5leHRlbnNpb25zJiZ5LmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMsZXh0ZW5zaW9uRnJhZ0RlcHRoOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLmZyYWdEZXB0aCxleHRlbnNpb25EcmF3QnVmZmVyczp5LmV4dGVuc2lvbnMmJnkuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOnkuZXh0ZW5zaW9ucyYmeS5leHRlbnNpb25zLnNoYWRlclRleHR1cmVMT0QscmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6dXx8aS5oYXMoIkVYVF9mcmFnX2RlcHRoIikscmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczp1fHxpLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIikscmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOnV8fGkuaGFzKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIiksY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OnkuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl9fWZ1bmN0aW9uIGIoeSl7bGV0IFI9W107aWYoeS5zaGFkZXJJRD9SLnB1c2goeS5zaGFkZXJJRCk6KFIucHVzaCh5LmN1c3RvbVZlcnRleFNoYWRlcklEKSxSLnB1c2goeS5jdXN0b21GcmFnbWVudFNoYWRlcklEKSkseS5kZWZpbmVzIT09dm9pZCAwKWZvcihsZXQgRCBpbiB5LmRlZmluZXMpUi5wdXNoKEQpLFIucHVzaCh5LmRlZmluZXNbRF0pO3JldHVybiB5LmlzUmF3U2hhZGVyTWF0ZXJpYWw9PT0hMSYmKF8oUix5KSxTKFIseSksUi5wdXNoKG4ub3V0cHV0RW5jb2RpbmcpKSxSLnB1c2goeS5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLFIuam9pbigpfWZ1bmN0aW9uIF8oeSxSKXt5LnB1c2goUi5wcmVjaXNpb24pLHkucHVzaChSLm91dHB1dEVuY29kaW5nKSx5LnB1c2goUi5lbnZNYXBNb2RlKSx5LnB1c2goUi5jb21iaW5lKSx5LnB1c2goUi52ZXJ0ZXhVdnMpLHkucHVzaChSLmZvZ0V4cDIpLHkucHVzaChSLnNpemVBdHRlbnVhdGlvbikseS5wdXNoKFIubWF4Qm9uZXMpLHkucHVzaChSLm1vcnBoVGFyZ2V0c0NvdW50KSx5LnB1c2goUi5udW1EaXJMaWdodHMpLHkucHVzaChSLm51bVBvaW50TGlnaHRzKSx5LnB1c2goUi5udW1TcG90TGlnaHRzKSx5LnB1c2goUi5udW1IZW1pTGlnaHRzKSx5LnB1c2goUi5udW1SZWN0QXJlYUxpZ2h0cykseS5wdXNoKFIubnVtRGlyTGlnaHRTaGFkb3dzKSx5LnB1c2goUi5udW1Qb2ludExpZ2h0U2hhZG93cykseS5wdXNoKFIubnVtU3BvdExpZ2h0U2hhZG93cykseS5wdXNoKFIuc2hhZG93TWFwVHlwZSkseS5wdXNoKFIudG9uZU1hcHBpbmcpLHkucHVzaChSLm51bUNsaXBwaW5nUGxhbmVzKSx5LnB1c2goUi5udW1DbGlwSW50ZXJzZWN0aW9uKSx5LnB1c2goUi5hbHBoYVdyaXRlKX1mdW5jdGlvbiBTKHksUil7YS5kaXNhYmxlQWxsKCksUi5pc1dlYkdMMiYmYS5lbmFibGUoMCksUi5zdXBwb3J0c1ZlcnRleFRleHR1cmVzJiZhLmVuYWJsZSgxKSxSLmluc3RhbmNpbmcmJmEuZW5hYmxlKDIpLFIuaW5zdGFuY2luZ0NvbG9yJiZhLmVuYWJsZSgzKSxSLm1hcCYmYS5lbmFibGUoNCksUi5tYXRjYXAmJmEuZW5hYmxlKDUpLFIuZW52TWFwJiZhLmVuYWJsZSg2KSxSLmVudk1hcEN1YmVVViYmYS5lbmFibGUoNyksUi5saWdodE1hcCYmYS5lbmFibGUoOCksUi5hb01hcCYmYS5lbmFibGUoOSksUi5lbWlzc2l2ZU1hcCYmYS5lbmFibGUoMTApLFIuYnVtcE1hcCYmYS5lbmFibGUoMTEpLFIubm9ybWFsTWFwJiZhLmVuYWJsZSgxMiksUi5vYmplY3RTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTMpLFIudGFuZ2VudFNwYWNlTm9ybWFsTWFwJiZhLmVuYWJsZSgxNCksUi5jbGVhcmNvYXQmJmEuZW5hYmxlKDE1KSxSLmNsZWFyY29hdE1hcCYmYS5lbmFibGUoMTYpLFIuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiZhLmVuYWJsZSgxNyksUi5jbGVhcmNvYXROb3JtYWxNYXAmJmEuZW5hYmxlKDE4KSxSLmRpc3BsYWNlbWVudE1hcCYmYS5lbmFibGUoMTkpLFIuc3BlY3VsYXJNYXAmJmEuZW5hYmxlKDIwKSxSLnJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLFIubWV0YWxuZXNzTWFwJiZhLmVuYWJsZSgyMiksUi5ncmFkaWVudE1hcCYmYS5lbmFibGUoMjMpLFIuYWxwaGFNYXAmJmEuZW5hYmxlKDI0KSxSLmFscGhhVGVzdCYmYS5lbmFibGUoMjUpLFIudmVydGV4Q29sb3JzJiZhLmVuYWJsZSgyNiksUi52ZXJ0ZXhBbHBoYXMmJmEuZW5hYmxlKDI3KSxSLnZlcnRleFV2cyYmYS5lbmFibGUoMjgpLFIudmVydGV4VGFuZ2VudHMmJmEuZW5hYmxlKDI5KSxSLnV2c1ZlcnRleE9ubHkmJmEuZW5hYmxlKDMwKSxSLmZvZyYmYS5lbmFibGUoMzEpLHkucHVzaChhLm1hc2spLGEuZGlzYWJsZUFsbCgpLFIudXNlRm9nJiZhLmVuYWJsZSgwKSxSLmZsYXRTaGFkaW5nJiZhLmVuYWJsZSgxKSxSLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmEuZW5hYmxlKDIpLFIuc2tpbm5pbmcmJmEuZW5hYmxlKDMpLFIudXNlVmVydGV4VGV4dHVyZSYmYS5lbmFibGUoNCksUi5tb3JwaFRhcmdldHMmJmEuZW5hYmxlKDUpLFIubW9ycGhOb3JtYWxzJiZhLmVuYWJsZSg2KSxSLnByZW11bHRpcGxpZWRBbHBoYSYmYS5lbmFibGUoNyksUi5zaGFkb3dNYXBFbmFibGVkJiZhLmVuYWJsZSg4KSxSLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzJiZhLmVuYWJsZSg5KSxSLmRvdWJsZVNpZGVkJiZhLmVuYWJsZSgxMCksUi5mbGlwU2lkZWQmJmEuZW5hYmxlKDExKSxSLmRlcHRoUGFja2luZyYmYS5lbmFibGUoMTIpLFIuZGl0aGVyaW5nJiZhLmVuYWJsZSgxMyksUi5zcGVjdWxhckludGVuc2l0eU1hcCYmYS5lbmFibGUoMTQpLFIuc3BlY3VsYXJDb2xvck1hcCYmYS5lbmFibGUoMTUpLFIudHJhbnNtaXNzaW9uJiZhLmVuYWJsZSgxNiksUi50cmFuc21pc3Npb25NYXAmJmEuZW5hYmxlKDE3KSxSLnRoaWNrbmVzc01hcCYmYS5lbmFibGUoMTgpLFIuc2hlZW4mJmEuZW5hYmxlKDE5KSxSLnNoZWVuQ29sb3JNYXAmJmEuZW5hYmxlKDIwKSxSLnNoZWVuUm91Z2huZXNzTWFwJiZhLmVuYWJsZSgyMSksUi5kZWNvZGVWaWRlb1RleHR1cmUmJmEuZW5hYmxlKDIyKSx5LnB1c2goYS5tYXNrKX1mdW5jdGlvbiBMKHkpe2xldCBSPXZbeS50eXBlXSxEO2lmKFIpe2xldCBGPWZuW1JdO0Q9cE0uY2xvbmUoRi51bmlmb3Jtcyl9ZWxzZSBEPXkudW5pZm9ybXM7cmV0dXJuIER9ZnVuY3Rpb24gQSh5LFIpe2xldCBEO2ZvcihsZXQgRj0wLHo9Yy5sZW5ndGg7Rjx6O0YrKyl7bGV0IE49Y1tGXTtpZihOLmNhY2hlS2V5PT09Uil7RD1OLCsrRC51c2VkVGltZXM7YnJlYWt9fXJldHVybiBEPT09dm9pZCAwJiYoRD1uZXcgcEUobixSLHkscyksYy5wdXNoKEQpKSxEfWZ1bmN0aW9uIEgoeSl7aWYoLS15LnVzZWRUaW1lcz09PTApe2xldCBSPWMuaW5kZXhPZih5KTtjW1JdPWNbYy5sZW5ndGgtMV0sYy5wb3AoKSx5LmRlc3Ryb3koKX19ZnVuY3Rpb24gdHQoeSl7bC5yZW1vdmUoeSl9ZnVuY3Rpb24gWCgpe2wuZGlzcG9zZSgpfXJldHVybntnZXRQYXJhbWV0ZXJzOnAsZ2V0UHJvZ3JhbUNhY2hlS2V5OmIsZ2V0VW5pZm9ybXM6TCxhY3F1aXJlUHJvZ3JhbTpBLHJlbGVhc2VQcm9ncmFtOkgscmVsZWFzZVNoYWRlckNhY2hlOnR0LHByb2dyYW1zOmMsZGlzcG9zZTpYfX1mdW5jdGlvbiB4RSgpe2xldCBuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQocyl7bGV0IG89bi5nZXQocyk7cmV0dXJuIG89PT12b2lkIDAmJihvPXt9LG4uc2V0KHMsbykpLG99ZnVuY3Rpb24gZShzKXtuLmRlbGV0ZShzKX1mdW5jdGlvbiBpKHMsbyxhKXtuLmdldChzKVtvXT1hfWZ1bmN0aW9uIHIoKXtuPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxyZW1vdmU6ZSx1cGRhdGU6aSxkaXNwb3NlOnJ9fWZ1bmN0aW9uIHlFKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9uLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6bi56IT09dC56P24uei10Lno6bi5pZC10LmlkfWZ1bmN0aW9uIE5nKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLnohPT10Lno/dC56LW4uejpuLmlkLXQuaWR9ZnVuY3Rpb24gRmcoKXtsZXQgbj1bXSx0PTAsZT1bXSxpPVtdLHI9W107ZnVuY3Rpb24gcygpe3Q9MCxlLmxlbmd0aD0wLGkubGVuZ3RoPTAsci5sZW5ndGg9MH1mdW5jdGlvbiBvKGgsZixkLGcseCx2KXtsZXQgbT1uW3RdO3JldHVybiBtPT09dm9pZCAwPyhtPXtpZDpoLmlkLG9iamVjdDpoLGdlb21ldHJ5OmYsbWF0ZXJpYWw6ZCxncm91cE9yZGVyOmcscmVuZGVyT3JkZXI6aC5yZW5kZXJPcmRlcix6OngsZ3JvdXA6dn0sblt0XT1tKToobS5pZD1oLmlkLG0ub2JqZWN0PWgsbS5nZW9tZXRyeT1mLG0ubWF0ZXJpYWw9ZCxtLmdyb3VwT3JkZXI9ZyxtLnJlbmRlck9yZGVyPWgucmVuZGVyT3JkZXIsbS56PXgsbS5ncm91cD12KSx0KyssbX1mdW5jdGlvbiBhKGgsZixkLGcseCx2KXtsZXQgbT1vKGgsZixkLGcseCx2KTtkLnRyYW5zbWlzc2lvbj4wP2kucHVzaChtKTpkLnRyYW5zcGFyZW50PT09ITA/ci5wdXNoKG0pOmUucHVzaChtKX1mdW5jdGlvbiBsKGgsZixkLGcseCx2KXtsZXQgbT1vKGgsZixkLGcseCx2KTtkLnRyYW5zbWlzc2lvbj4wP2kudW5zaGlmdChtKTpkLnRyYW5zcGFyZW50PT09ITA/ci51bnNoaWZ0KG0pOmUudW5zaGlmdChtKX1mdW5jdGlvbiBjKGgsZil7ZS5sZW5ndGg+MSYmZS5zb3J0KGh8fHlFKSxpLmxlbmd0aD4xJiZpLnNvcnQoZnx8TmcpLHIubGVuZ3RoPjEmJnIuc29ydChmfHxOZyl9ZnVuY3Rpb24gdSgpe2ZvcihsZXQgaD10LGY9bi5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9bltoXTtpZihkLmlkPT09bnVsbClicmVhaztkLmlkPW51bGwsZC5vYmplY3Q9bnVsbCxkLmdlb21ldHJ5PW51bGwsZC5tYXRlcmlhbD1udWxsLGQuZ3JvdXA9bnVsbH19cmV0dXJue29wYXF1ZTplLHRyYW5zbWlzc2l2ZTppLHRyYW5zcGFyZW50OnIsaW5pdDpzLHB1c2g6YSx1bnNoaWZ0OmwsZmluaXNoOnUsc29ydDpjfX1mdW5jdGlvbiB2RSgpe2xldCBuPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQoaSxyKXtsZXQgcztyZXR1cm4gbi5oYXMoaSk9PT0hMT8ocz1uZXcgRmcsbi5zZXQoaSxbc10pKTpyPj1uLmdldChpKS5sZW5ndGg/KHM9bmV3IEZnLG4uZ2V0KGkpLnB1c2gocykpOnM9bi5nZXQoaSlbcl0sc31mdW5jdGlvbiBlKCl7bj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQsZGlzcG9zZTplfX1mdW5jdGlvbiBfRSgpe2xldCBuPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoblt0LmlkXSE9PXZvaWQgMClyZXR1cm4gblt0LmlkXTtsZXQgZTtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmU9e2RpcmVjdGlvbjpuZXcgVCxjb2xvcjpuZXcgZnR9O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgVCxkaXJlY3Rpb246bmV3IFQsY29sb3I6bmV3IGZ0LGRpc3RhbmNlOjAsY29uZUNvczowLHBlbnVtYnJhQ29zOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgVCxjb2xvcjpuZXcgZnQsZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyBULHNreUNvbG9yOm5ldyBmdCxncm91bmRDb2xvcjpuZXcgZnR9O2JyZWFrO2Nhc2UiUmVjdEFyZWFMaWdodCI6ZT17Y29sb3I6bmV3IGZ0LHBvc2l0aW9uOm5ldyBULGhhbGZXaWR0aDpuZXcgVCxoYWxmSGVpZ2h0Om5ldyBUfTticmVha31yZXR1cm4gblt0LmlkXT1lLGV9fX1mdW5jdGlvbiB3RSgpe2xldCBuPXt9O3JldHVybntnZXQ6ZnVuY3Rpb24odCl7aWYoblt0LmlkXSE9PXZvaWQgMClyZXR1cm4gblt0LmlkXTtsZXQgZTtzd2l0Y2godC50eXBlKXtjYXNlIkRpcmVjdGlvbmFsTGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgS307YnJlYWs7Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgS307YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjplPXtzaGFkb3dCaWFzOjAsc2hhZG93Tm9ybWFsQmlhczowLHNoYWRvd1JhZGl1czoxLHNoYWRvd01hcFNpemU6bmV3IEssc2hhZG93Q2FtZXJhTmVhcjoxLHNoYWRvd0NhbWVyYUZhcjoxZTN9O2JyZWFrfXJldHVybiBuW3QuaWRdPWUsZX19fXZhciBNRT0wO2Z1bmN0aW9uIGJFKG4sdCl7cmV0dXJuKHQuY2FzdFNoYWRvdz8xOjApLShuLmNhc3RTaGFkb3c/MTowKX1mdW5jdGlvbiBTRShuLHQpe2xldCBlPW5ldyBfRSxpPXdFKCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgVCk7bGV0IHM9bmV3IFQsbz1uZXcgd3QsYT1uZXcgd3Q7ZnVuY3Rpb24gbCh1LGgpe2xldCBmPTAsZD0wLGc9MDtmb3IobGV0IHR0PTA7dHQ8OTt0dCsrKXIucHJvYmVbdHRdLnNldCgwLDAsMCk7bGV0IHg9MCx2PTAsbT0wLHA9MCxiPTAsXz0wLFM9MCxMPTA7dS5zb3J0KGJFKTtsZXQgQT1oIT09ITA/TWF0aC5QSToxO2ZvcihsZXQgdHQ9MCxYPXUubGVuZ3RoO3R0PFg7dHQrKyl7bGV0IHk9dVt0dF0sUj15LmNvbG9yLEQ9eS5pbnRlbnNpdHksRj15LmRpc3RhbmNlLHo9eS5zaGFkb3cmJnkuc2hhZG93Lm1hcD95LnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKHkuaXNBbWJpZW50TGlnaHQpZis9Ui5yKkQqQSxkKz1SLmcqRCpBLGcrPVIuYipEKkE7ZWxzZSBpZih5LmlzTGlnaHRQcm9iZSlmb3IobGV0IE49MDtOPDk7TisrKXIucHJvYmVbTl0uYWRkU2NhbGVkVmVjdG9yKHkuc2guY29lZmZpY2llbnRzW05dLEQpO2Vsc2UgaWYoeS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBOPWUuZ2V0KHkpO2lmKE4uY29sb3IuY29weSh5LmNvbG9yKS5tdWx0aXBseVNjYWxhcih5LmludGVuc2l0eSpBKSx5LmNhc3RTaGFkb3cpe2xldCBWPXkuc2hhZG93LFE9aS5nZXQoeSk7US5zaGFkb3dCaWFzPVYuYmlhcyxRLnNoYWRvd05vcm1hbEJpYXM9Vi5ub3JtYWxCaWFzLFEuc2hhZG93UmFkaXVzPVYucmFkaXVzLFEuc2hhZG93TWFwU2l6ZT1WLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1t4XT1RLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXBbeF09eixyLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W3hdPXkuc2hhZG93Lm1hdHJpeCxfKyt9ci5kaXJlY3Rpb25hbFt4XT1OLHgrK31lbHNlIGlmKHkuaXNTcG90TGlnaHQpe2xldCBOPWUuZ2V0KHkpO2lmKE4ucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHkubWF0cml4V29ybGQpLE4uY29sb3IuY29weShSKS5tdWx0aXBseVNjYWxhcihEKkEpLE4uZGlzdGFuY2U9RixOLmNvbmVDb3M9TWF0aC5jb3MoeS5hbmdsZSksTi5wZW51bWJyYUNvcz1NYXRoLmNvcyh5LmFuZ2xlKigxLXkucGVudW1icmEpKSxOLmRlY2F5PXkuZGVjYXkseS5jYXN0U2hhZG93KXtsZXQgVj15LnNoYWRvdyxRPWkuZ2V0KHkpO1Euc2hhZG93Qmlhcz1WLmJpYXMsUS5zaGFkb3dOb3JtYWxCaWFzPVYubm9ybWFsQmlhcyxRLnNoYWRvd1JhZGl1cz1WLnJhZGl1cyxRLnNoYWRvd01hcFNpemU9Vi5tYXBTaXplLHIuc3BvdFNoYWRvd1ttXT1RLHIuc3BvdFNoYWRvd01hcFttXT16LHIuc3BvdFNoYWRvd01hdHJpeFttXT15LnNoYWRvdy5tYXRyaXgsTCsrfXIuc3BvdFttXT1OLG0rK31lbHNlIGlmKHkuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgTj1lLmdldCh5KTtOLmNvbG9yLmNvcHkoUikubXVsdGlwbHlTY2FsYXIoRCksTi5oYWxmV2lkdGguc2V0KHkud2lkdGgqLjUsMCwwKSxOLmhhbGZIZWlnaHQuc2V0KDAseS5oZWlnaHQqLjUsMCksci5yZWN0QXJlYVtwXT1OLHArK31lbHNlIGlmKHkuaXNQb2ludExpZ2h0KXtsZXQgTj1lLmdldCh5KTtpZihOLmNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoeS5pbnRlbnNpdHkqQSksTi5kaXN0YW5jZT15LmRpc3RhbmNlLE4uZGVjYXk9eS5kZWNheSx5LmNhc3RTaGFkb3cpe2xldCBWPXkuc2hhZG93LFE9aS5nZXQoeSk7US5zaGFkb3dCaWFzPVYuYmlhcyxRLnNoYWRvd05vcm1hbEJpYXM9Vi5ub3JtYWxCaWFzLFEuc2hhZG93UmFkaXVzPVYucmFkaXVzLFEuc2hhZG93TWFwU2l6ZT1WLm1hcFNpemUsUS5zaGFkb3dDYW1lcmFOZWFyPVYuY2FtZXJhLm5lYXIsUS5zaGFkb3dDYW1lcmFGYXI9Vi5jYW1lcmEuZmFyLHIucG9pbnRTaGFkb3dbdl09USxyLnBvaW50U2hhZG93TWFwW3ZdPXosci5wb2ludFNoYWRvd01hdHJpeFt2XT15LnNoYWRvdy5tYXRyaXgsUysrfXIucG9pbnRbdl09Tix2Kyt9ZWxzZSBpZih5LmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgTj1lLmdldCh5KTtOLnNreUNvbG9yLmNvcHkoeS5jb2xvcikubXVsdGlwbHlTY2FsYXIoRCpBKSxOLmdyb3VuZENvbG9yLmNvcHkoeS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoRCpBKSxyLmhlbWlbYl09TixiKyt9fXA+MCYmKHQuaXNXZWJHTDJ8fG4uaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSEwPyhyLnJlY3RBcmVhTFRDMT1vdC5MVENfRkxPQVRfMSxyLnJlY3RBcmVhTFRDMj1vdC5MVENfRkxPQVRfMik6bi5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMD8oci5yZWN0QXJlYUxUQzE9b3QuTFRDX0hBTEZfMSxyLnJlY3RBcmVhTFRDMj1vdC5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksci5hbWJpZW50WzBdPWYsci5hbWJpZW50WzFdPWQsci5hbWJpZW50WzJdPWc7bGV0IEg9ci5oYXNoOyhILmRpcmVjdGlvbmFsTGVuZ3RoIT09eHx8SC5wb2ludExlbmd0aCE9PXZ8fEguc3BvdExlbmd0aCE9PW18fEgucmVjdEFyZWFMZW5ndGghPT1wfHxILmhlbWlMZW5ndGghPT1ifHxILm51bURpcmVjdGlvbmFsU2hhZG93cyE9PV98fEgubnVtUG9pbnRTaGFkb3dzIT09U3x8SC5udW1TcG90U2hhZG93cyE9PUwpJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9eCxyLnNwb3QubGVuZ3RoPW0sci5yZWN0QXJlYS5sZW5ndGg9cCxyLnBvaW50Lmxlbmd0aD12LHIuaGVtaS5sZW5ndGg9YixyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1fLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPV8sci5wb2ludFNoYWRvdy5sZW5ndGg9UyxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1TLHIuc3BvdFNoYWRvdy5sZW5ndGg9TCxyLnNwb3RTaGFkb3dNYXAubGVuZ3RoPUwsci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9XyxyLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1TLHIuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9TCxILmRpcmVjdGlvbmFsTGVuZ3RoPXgsSC5wb2ludExlbmd0aD12LEguc3BvdExlbmd0aD1tLEgucmVjdEFyZWFMZW5ndGg9cCxILmhlbWlMZW5ndGg9YixILm51bURpcmVjdGlvbmFsU2hhZG93cz1fLEgubnVtUG9pbnRTaGFkb3dzPVMsSC5udW1TcG90U2hhZG93cz1MLHIudmVyc2lvbj1NRSsrKX1mdW5jdGlvbiBjKHUsaCl7bGV0IGY9MCxkPTAsZz0wLHg9MCx2PTAsbT1oLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IHA9MCxiPXUubGVuZ3RoO3A8YjtwKyspe2xldCBfPXVbcF07aWYoXy5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBTPXIuZGlyZWN0aW9uYWxbZl07Uy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLHMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8udGFyZ2V0Lm1hdHJpeFdvcmxkKSxTLmRpcmVjdGlvbi5zdWIocyksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLGYrK31lbHNlIGlmKF8uaXNTcG90TGlnaHQpe2xldCBTPXIuc3BvdFtnXTtTLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihfLm1hdHJpeFdvcmxkKSxTLnBvc2l0aW9uLmFwcGx5TWF0cml4NChtKSxTLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCkscy5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy50YXJnZXQubWF0cml4V29ybGQpLFMuZGlyZWN0aW9uLnN1YihzKSxTLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24obSksZysrfWVsc2UgaWYoXy5pc1JlY3RBcmVhTGlnaHQpe2xldCBTPXIucmVjdEFyZWFbeF07Uy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5wb3NpdGlvbi5hcHBseU1hdHJpeDQobSksYS5pZGVudGl0eSgpLG8uY29weShfLm1hdHJpeFdvcmxkKSxvLnByZW11bHRpcGx5KG0pLGEuZXh0cmFjdFJvdGF0aW9uKG8pLFMuaGFsZldpZHRoLnNldChfLndpZHRoKi41LDAsMCksUy5oYWxmSGVpZ2h0LnNldCgwLF8uaGVpZ2h0Ki41LDApLFMuaGFsZldpZHRoLmFwcGx5TWF0cml4NChhKSxTLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGEpLHgrK31lbHNlIGlmKF8uaXNQb2ludExpZ2h0KXtsZXQgUz1yLnBvaW50W2RdO1MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKF8ubWF0cml4V29ybGQpLFMucG9zaXRpb24uYXBwbHlNYXRyaXg0KG0pLGQrK31lbHNlIGlmKF8uaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBTPXIuaGVtaVt2XTtTLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oXy5tYXRyaXhXb3JsZCksUy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKG0pLFMuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHYrK319fXJldHVybntzZXR1cDpsLHNldHVwVmlldzpjLHN0YXRlOnJ9fWZ1bmN0aW9uIHpnKG4sdCl7bGV0IGU9bmV3IFNFKG4sdCksaT1bXSxyPVtdO2Z1bmN0aW9uIHMoKXtpLmxlbmd0aD0wLHIubGVuZ3RoPTB9ZnVuY3Rpb24gbyhoKXtpLnB1c2goaCl9ZnVuY3Rpb24gYShoKXtyLnB1c2goaCl9ZnVuY3Rpb24gbChoKXtlLnNldHVwKGksaCl9ZnVuY3Rpb24gYyhoKXtlLnNldHVwVmlldyhpLGgpfXJldHVybntpbml0OnMsc3RhdGU6e2xpZ2h0c0FycmF5Omksc2hhZG93c0FycmF5OnIsbGlnaHRzOmV9LHNldHVwTGlnaHRzOmwsc2V0dXBMaWdodHNWaWV3OmMscHVzaExpZ2h0Om8scHVzaFNoYWRvdzphfX1mdW5jdGlvbiBFRShuLHQpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGkocyxvPTApe2xldCBhO3JldHVybiBlLmhhcyhzKT09PSExPyhhPW5ldyB6ZyhuLHQpLGUuc2V0KHMsW2FdKSk6bz49ZS5nZXQocykubGVuZ3RoPyhhPW5ldyB6ZyhuLHQpLGUuZ2V0KHMpLnB1c2goYSkpOmE9ZS5nZXQocylbb10sYX1mdW5jdGlvbiByKCl7ZT1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OmksZGlzcG9zZTpyfX12YXIgY2w9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPUt3LHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlcHRoUGFja2luZz10LmRlcHRoUGFja2luZyx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpc319O2NsLnByb3RvdHlwZS5pc01lc2hEZXB0aE1hdGVyaWFsPSEwO3ZhciB1bD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGlzdGFuY2VNYXRlcmlhbCIsdGhpcy5yZWZlcmVuY2VQb3NpdGlvbj1uZXcgVCx0aGlzLm5lYXJEaXN0YW5jZT0xLHRoaXMuZmFyRGlzdGFuY2U9MWUzLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5yZWZlcmVuY2VQb3NpdGlvbi5jb3B5KHQucmVmZXJlbmNlUG9zaXRpb24pLHRoaXMubmVhckRpc3RhbmNlPXQubmVhckRpc3RhbmNlLHRoaXMuZmFyRGlzdGFuY2U9dC5mYXJEaXN0YW5jZSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpc319O3VsLnByb3RvdHlwZS5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPSEwO3ZhciBURT1gdm9pZCBtYWluKCkgewoJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLEFFPWB1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzczsKdW5pZm9ybSB2ZWMyIHJlc29sdXRpb247CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwojaW5jbHVkZSA8cGFja2luZz4Kdm9pZCBtYWluKCkgewoJY29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApOwoJZmxvYXQgbWVhbiA9IDAuMDsKCWZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDsKCWZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTsKCWZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wOwoJZm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7CgkJZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlOwoJCSNpZmRlZiBIT1JJWk9OVEFMX1BBU1MKCQkJdmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRpc3RyaWJ1dGlvbi54OwoJCQlzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7CgkJI2Vsc2UKCQkJZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRlcHRoOwoJCQlzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDsKCQkjZW5kaWYKCX0KCW1lYW4gPSBtZWFuIC8gc2FtcGxlczsKCXNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7CglmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7Cn1gO2Z1bmN0aW9uIFQwKG4sdCxlKXtsZXQgaT1uZXcgcXIscj1uZXcgSyxzPW5ldyBLLG89bmV3IFd0LGE9bmV3IGNsKHtkZXB0aFBhY2tpbmc6UXd9KSxsPW5ldyB1bCxjPXt9LHU9ZS5tYXhUZXh0dXJlU2l6ZSxoPXswOmhlLDE6ZW8sMjpIcn0sZj1uZXcgRm4oe2RlZmluZXM6e1ZTTV9TQU1QTEVTOjh9LHVuaWZvcm1zOntzaGFkb3dfcGFzczp7dmFsdWU6bnVsbH0scmVzb2x1dGlvbjp7dmFsdWU6bmV3IEt9LHJhZGl1czp7dmFsdWU6NH19LHZlcnRleFNoYWRlcjpURSxmcmFnbWVudFNoYWRlcjpBRX0pLGQ9Zi5jbG9uZSgpO2QuZGVmaW5lcy5IT1JJWk9OVEFMX1BBU1M9MTtsZXQgZz1uZXcgSHQ7Zy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgUXQobmV3IEZsb2F0MzJBcnJheShbLTEsLTEsLjUsMywtMSwuNSwtMSwzLC41XSksMykpO2xldCB4PW5ldyBvZShnLGYpLHY9dGhpczt0aGlzLmVuYWJsZWQ9ITEsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy50eXBlPWwwLHRoaXMucmVuZGVyPWZ1bmN0aW9uKF8sUyxMKXtpZih2LmVuYWJsZWQ9PT0hMXx8di5hdXRvVXBkYXRlPT09ITEmJnYubmVlZHNVcGRhdGU9PT0hMXx8Xy5sZW5ndGg9PT0wKXJldHVybjtsZXQgQT1uLmdldFJlbmRlclRhcmdldCgpLEg9bi5nZXRBY3RpdmVDdWJlRmFjZSgpLHR0PW4uZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKSxYPW4uc3RhdGU7WC5zZXRCbGVuZGluZyhqbiksWC5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLFguYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxYLnNldFNjaXNzb3JUZXN0KCExKTtmb3IobGV0IHk9MCxSPV8ubGVuZ3RoO3k8Ujt5Kyspe2xldCBEPV9beV0sRj1ELnNoYWRvdztpZihGPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMU2hhZG93TWFwOiIsRCwiaGFzIG5vIHNoYWRvdy4iKTtjb250aW51ZX1pZihGLmF1dG9VcGRhdGU9PT0hMSYmRi5uZWVkc1VwZGF0ZT09PSExKWNvbnRpbnVlO3IuY29weShGLm1hcFNpemUpO2xldCB6PUYuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseSh6KSxzLmNvcHkoRi5tYXBTaXplKSwoci54PnV8fHIueT51KSYmKHIueD51JiYocy54PU1hdGguZmxvb3IodS96LngpLHIueD1zLngqei54LEYubWFwU2l6ZS54PXMueCksci55PnUmJihzLnk9TWF0aC5mbG9vcih1L3oueSksci55PXMueSp6LnksRi5tYXBTaXplLnk9cy55KSksRi5tYXA9PT1udWxsJiYhRi5pc1BvaW50TGlnaHRTaGFkb3cmJnRoaXMudHlwZT09PUpzKXtsZXQgVj17bWluRmlsdGVyOmJlLG1hZ0ZpbHRlcjpiZSxmb3JtYXQ6UmV9O0YubWFwPW5ldyBOZShyLngsci55LFYpLEYubWFwLnRleHR1cmUubmFtZT1ELm5hbWUrIi5zaGFkb3dNYXAiLEYubWFwUGFzcz1uZXcgTmUoci54LHIueSxWKSxGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9aWYoRi5tYXA9PT1udWxsKXtsZXQgVj17bWluRmlsdGVyOmZlLG1hZ0ZpbHRlcjpmZSxmb3JtYXQ6UmV9O0YubWFwPW5ldyBOZShyLngsci55LFYpLEYubWFwLnRleHR1cmUubmFtZT1ELm5hbWUrIi5zaGFkb3dNYXAiLEYuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1uLnNldFJlbmRlclRhcmdldChGLm1hcCksbi5jbGVhcigpO2xldCBOPUYuZ2V0Vmlld3BvcnRDb3VudCgpO2ZvcihsZXQgVj0wO1Y8TjtWKyspe2xldCBRPUYuZ2V0Vmlld3BvcnQoVik7by5zZXQocy54KlEueCxzLnkqUS55LHMueCpRLnoscy55KlEudyksWC52aWV3cG9ydChvKSxGLnVwZGF0ZU1hdHJpY2VzKEQsViksaT1GLmdldEZydXN0dW0oKSxiKFMsTCxGLmNhbWVyYSxELHRoaXMudHlwZSl9IUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1KcyYmbShGLEwpLEYubmVlZHNVcGRhdGU9ITF9di5uZWVkc1VwZGF0ZT0hMSxuLnNldFJlbmRlclRhcmdldChBLEgsdHQpfTtmdW5jdGlvbiBtKF8sUyl7bGV0IEw9dC51cGRhdGUoeCk7Zi5kZWZpbmVzLlZTTV9TQU1QTEVTIT09Xy5ibHVyU2FtcGxlcyYmKGYuZGVmaW5lcy5WU01fU0FNUExFUz1fLmJsdXJTYW1wbGVzLGQuZGVmaW5lcy5WU01fU0FNUExFUz1fLmJsdXJTYW1wbGVzLGYubmVlZHNVcGRhdGU9ITAsZC5uZWVkc1VwZGF0ZT0hMCksZi51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1fLm1hcC50ZXh0dXJlLGYudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1fLm1hcFNpemUsZi51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Xy5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoXy5tYXBQYXNzKSxuLmNsZWFyKCksbi5yZW5kZXJCdWZmZXJEaXJlY3QoUyxudWxsLEwsZix4LG51bGwpLGQudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Xy5tYXBQYXNzLnRleHR1cmUsZC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPV8ubWFwU2l6ZSxkLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1fLnJhZGl1cyxuLnNldFJlbmRlclRhcmdldChfLm1hcCksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KFMsbnVsbCxMLGQseCxudWxsKX1mdW5jdGlvbiBwKF8sUyxMLEEsSCx0dCxYKXtsZXQgeT1udWxsLFI9QS5pc1BvaW50TGlnaHQ9PT0hMD9fLmN1c3RvbURpc3RhbmNlTWF0ZXJpYWw6Xy5jdXN0b21EZXB0aE1hdGVyaWFsO2lmKFIhPT12b2lkIDA/eT1SOnk9QS5pc1BvaW50TGlnaHQ9PT0hMD9sOmEsbi5sb2NhbENsaXBwaW5nRW5hYmxlZCYmTC5jbGlwU2hhZG93cz09PSEwJiZMLmNsaXBwaW5nUGxhbmVzLmxlbmd0aCE9PTB8fEwuZGlzcGxhY2VtZW50TWFwJiZMLmRpc3BsYWNlbWVudFNjYWxlIT09MHx8TC5hbHBoYU1hcCYmTC5hbHBoYVRlc3Q+MCl7bGV0IEQ9eS51dWlkLEY9TC51dWlkLHo9Y1tEXTt6PT09dm9pZCAwJiYoej17fSxjW0RdPXopO2xldCBOPXpbRl07Tj09PXZvaWQgMCYmKE49eS5jbG9uZSgpLHpbRl09TikseT1OfXJldHVybiB5LnZpc2libGU9TC52aXNpYmxlLHkud2lyZWZyYW1lPUwud2lyZWZyYW1lLFg9PT1Kcz95LnNpZGU9TC5zaGFkb3dTaWRlIT09bnVsbD9MLnNoYWRvd1NpZGU6TC5zaWRlOnkuc2lkZT1MLnNoYWRvd1NpZGUhPT1udWxsP0wuc2hhZG93U2lkZTpoW0wuc2lkZV0seS5hbHBoYU1hcD1MLmFscGhhTWFwLHkuYWxwaGFUZXN0PUwuYWxwaGFUZXN0LHkuY2xpcFNoYWRvd3M9TC5jbGlwU2hhZG93cyx5LmNsaXBwaW5nUGxhbmVzPUwuY2xpcHBpbmdQbGFuZXMseS5jbGlwSW50ZXJzZWN0aW9uPUwuY2xpcEludGVyc2VjdGlvbix5LmRpc3BsYWNlbWVudE1hcD1MLmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlPUwuZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzPUwuZGlzcGxhY2VtZW50Qmlhcyx5LndpcmVmcmFtZUxpbmV3aWR0aD1MLndpcmVmcmFtZUxpbmV3aWR0aCx5LmxpbmV3aWR0aD1MLmxpbmV3aWR0aCxBLmlzUG9pbnRMaWdodD09PSEwJiZ5LmlzTWVzaERpc3RhbmNlTWF0ZXJpYWw9PT0hMCYmKHkucmVmZXJlbmNlUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEEubWF0cml4V29ybGQpLHkubmVhckRpc3RhbmNlPUgseS5mYXJEaXN0YW5jZT10dCkseX1mdW5jdGlvbiBiKF8sUyxMLEEsSCl7aWYoXy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKF8ubGF5ZXJzLnRlc3QoUy5sYXllcnMpJiYoXy5pc01lc2h8fF8uaXNMaW5lfHxfLmlzUG9pbnRzKSYmKF8uY2FzdFNoYWRvd3x8Xy5yZWNlaXZlU2hhZG93JiZIPT09SnMpJiYoIV8uZnJ1c3R1bUN1bGxlZHx8aS5pbnRlcnNlY3RzT2JqZWN0KF8pKSl7Xy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhMLm1hdHJpeFdvcmxkSW52ZXJzZSxfLm1hdHJpeFdvcmxkKTtsZXQgeT10LnVwZGF0ZShfKSxSPV8ubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheShSKSl7bGV0IEQ9eS5ncm91cHM7Zm9yKGxldCBGPTAsej1ELmxlbmd0aDtGPHo7RisrKXtsZXQgTj1EW0ZdLFY9UltOLm1hdGVyaWFsSW5kZXhdO2lmKFYmJlYudmlzaWJsZSl7bGV0IFE9cChfLHksVixBLEwubmVhcixMLmZhcixIKTtuLnJlbmRlckJ1ZmZlckRpcmVjdChMLG51bGwseSxRLF8sTil9fX1lbHNlIGlmKFIudmlzaWJsZSl7bGV0IEQ9cChfLHksUixBLEwubmVhcixMLmZhcixIKTtuLnJlbmRlckJ1ZmZlckRpcmVjdChMLG51bGwseSxELF8sbnVsbCl9fWxldCBYPV8uY2hpbGRyZW47Zm9yKGxldCB5PTAsUj1YLmxlbmd0aDt5PFI7eSsrKWIoWFt5XSxTLEwsQSxIKX19ZnVuY3Rpb24gQ0Uobix0LGUpe2xldCBpPWUuaXNXZWJHTDI7ZnVuY3Rpb24gcigpe2xldCBQPSExLHB0PW5ldyBXdCxodD1udWxsLEV0PW5ldyBXdCgwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihZKXtodCE9PVkmJiFQJiYobi5jb2xvck1hc2soWSxZLFksWSksaHQ9WSl9LHNldExvY2tlZDpmdW5jdGlvbihZKXtQPVl9LHNldENsZWFyOmZ1bmN0aW9uKFksTXQsRHQsanQsemUpe3plPT09ITAmJihZKj1qdCxNdCo9anQsRHQqPWp0KSxwdC5zZXQoWSxNdCxEdCxqdCksRXQuZXF1YWxzKHB0KT09PSExJiYobi5jbGVhckNvbG9yKFksTXQsRHQsanQpLEV0LmNvcHkocHQpKX0scmVzZXQ6ZnVuY3Rpb24oKXtQPSExLGh0PW51bGwsRXQuc2V0KC0xLDAsMCwwKX19fWZ1bmN0aW9uIHMoKXtsZXQgUD0hMSxwdD1udWxsLGh0PW51bGwsRXQ9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihZKXtZP2soMjkyOSk6RnQoMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oWSl7cHQhPT1ZJiYhUCYmKG4uZGVwdGhNYXNrKFkpLHB0PVkpfSxzZXRGdW5jOmZ1bmN0aW9uKFkpe2lmKGh0IT09WSl7aWYoWSlzd2l0Y2goWSl7Y2FzZSB5dzpuLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2Ugdnc6bi5kZXB0aEZ1bmMoNTE5KTticmVhaztjYXNlIF93Om4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSB6dTpuLmRlcHRoRnVuYyg1MTUpO2JyZWFrO2Nhc2Ugd3c6bi5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIE13Om4uZGVwdGhGdW5jKDUxOCk7YnJlYWs7Y2FzZSBidzpuLmRlcHRoRnVuYyg1MTYpO2JyZWFrO2Nhc2UgU3c6bi5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0Om4uZGVwdGhGdW5jKDUxNSl9ZWxzZSBuLmRlcHRoRnVuYyg1MTUpO2h0PVl9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWSl7UD1ZfSxzZXRDbGVhcjpmdW5jdGlvbihZKXtFdCE9PVkmJihuLmNsZWFyRGVwdGgoWSksRXQ9WSl9LHJlc2V0OmZ1bmN0aW9uKCl7UD0hMSxwdD1udWxsLGh0PW51bGwsRXQ9bnVsbH19fWZ1bmN0aW9uIG8oKXtsZXQgUD0hMSxwdD1udWxsLGh0PW51bGwsRXQ9bnVsbCxZPW51bGwsTXQ9bnVsbCxEdD1udWxsLGp0PW51bGwsemU9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihuZSl7UHx8KG5lP2soMjk2MCk6RnQoMjk2MCkpfSxzZXRNYXNrOmZ1bmN0aW9uKG5lKXtwdCE9PW5lJiYhUCYmKG4uc3RlbmNpbE1hc2sobmUpLHB0PW5lKX0sc2V0RnVuYzpmdW5jdGlvbihuZSxlbix5bil7KGh0IT09bmV8fEV0IT09ZW58fFkhPT15bikmJihuLnN0ZW5jaWxGdW5jKG5lLGVuLHluKSxodD1uZSxFdD1lbixZPXluKX0sc2V0T3A6ZnVuY3Rpb24obmUsZW4seW4peyhNdCE9PW5lfHxEdCE9PWVufHxqdCE9PXluKSYmKG4uc3RlbmNpbE9wKG5lLGVuLHluKSxNdD1uZSxEdD1lbixqdD15bil9LHNldExvY2tlZDpmdW5jdGlvbihuZSl7UD1uZX0sc2V0Q2xlYXI6ZnVuY3Rpb24obmUpe3plIT09bmUmJihuLmNsZWFyU3RlbmNpbChuZSksemU9bmUpfSxyZXNldDpmdW5jdGlvbigpe1A9ITEscHQ9bnVsbCxodD1udWxsLEV0PW51bGwsWT1udWxsLE10PW51bGwsRHQ9bnVsbCxqdD1udWxsLHplPW51bGx9fX1sZXQgYT1uZXcgcixsPW5ldyBzLGM9bmV3IG8sdT17fSxoPXt9LGY9bmV3IFdlYWtNYXAsZD1bXSxnPW51bGwseD0hMSx2PW51bGwsbT1udWxsLHA9bnVsbCxiPW51bGwsXz1udWxsLFM9bnVsbCxMPW51bGwsQT0hMSxIPW51bGwsdHQ9bnVsbCxYPW51bGwseT1udWxsLFI9bnVsbCxEPW4uZ2V0UGFyYW1ldGVyKDM1NjYxKSxGPSExLHo9MCxOPW4uZ2V0UGFyYW1ldGVyKDc5MzgpO04uaW5kZXhPZigiV2ViR0wiKSE9PS0xPyh6PXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKE4pWzFdKSxGPXo+PTEpOk4uaW5kZXhPZigiT3BlbkdMIEVTIikhPT0tMSYmKHo9cGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXGQpLy5leGVjKE4pWzFdKSxGPXo+PTIpO2xldCBWPW51bGwsUT17fSxhdD1uLmdldFBhcmFtZXRlcigzMDg4KSxHPW4uZ2V0UGFyYW1ldGVyKDI5NzgpLCQ9bmV3IFd0KCkuZnJvbUFycmF5KGF0KSxsdD1uZXcgV3QoKS5mcm9tQXJyYXkoRyk7ZnVuY3Rpb24gZHQoUCxwdCxodCl7bGV0IEV0PW5ldyBVaW50OEFycmF5KDQpLFk9bi5jcmVhdGVUZXh0dXJlKCk7bi5iaW5kVGV4dHVyZShQLFkpLG4udGV4UGFyYW1ldGVyaShQLDEwMjQxLDk3MjgpLG4udGV4UGFyYW1ldGVyaShQLDEwMjQwLDk3MjgpO2ZvcihsZXQgTXQ9MDtNdDxodDtNdCsrKW4udGV4SW1hZ2UyRChwdCtNdCwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLEV0KTtyZXR1cm4gWX1sZXQgeHQ9e307eHRbMzU1M109ZHQoMzU1MywzNTUzLDEpLHh0WzM0MDY3XT1kdCgzNDA2NywzNDA2OSw2KSxhLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxrKDI5MjkpLGwuc2V0RnVuYyh6dSksSighMSksaXQoQW0pLGsoMjg4NCksQyhqbik7ZnVuY3Rpb24gayhQKXt1W1BdIT09ITAmJihuLmVuYWJsZShQKSx1W1BdPSEwKX1mdW5jdGlvbiBGdChQKXt1W1BdIT09ITEmJihuLmRpc2FibGUoUCksdVtQXT0hMSl9ZnVuY3Rpb24gbXQoUCxwdCl7cmV0dXJuIGhbUF0hPT1wdD8obi5iaW5kRnJhbWVidWZmZXIoUCxwdCksaFtQXT1wdCxpJiYoUD09PTM2MDA5JiYoaFszNjE2MF09cHQpLFA9PT0zNjE2MCYmKGhbMzYwMDldPXB0KSksITApOiExfWZ1bmN0aW9uIFN0KFAscHQpe2xldCBodD1kLEV0PSExO2lmKFApaWYoaHQ9Zi5nZXQocHQpLGh0PT09dm9pZCAwJiYoaHQ9W10sZi5zZXQocHQsaHQpKSxQLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpe2xldCBZPVAudGV4dHVyZTtpZihodC5sZW5ndGghPT1ZLmxlbmd0aHx8aHRbMF0hPT0zNjA2NCl7Zm9yKGxldCBNdD0wLER0PVkubGVuZ3RoO010PER0O010KyspaHRbTXRdPTM2MDY0K010O2h0Lmxlbmd0aD1ZLmxlbmd0aCxFdD0hMH19ZWxzZSBodFswXSE9PTM2MDY0JiYoaHRbMF09MzYwNjQsRXQ9ITApO2Vsc2UgaHRbMF0hPT0xMDI5JiYoaHRbMF09MTAyOSxFdD0hMCk7RXQmJihlLmlzV2ViR0wyP24uZHJhd0J1ZmZlcnMoaHQpOnQuZ2V0KCJXRUJHTF9kcmF3X2J1ZmZlcnMiKS5kcmF3QnVmZmVyc1dFQkdMKGh0KSl9ZnVuY3Rpb24gQihQKXtyZXR1cm4gZyE9PVA/KG4udXNlUHJvZ3JhbShQKSxnPVAsITApOiExfWxldCBzdD17W0lyXTozMjc3NCxbYXddOjMyNzc4LFtsd106MzI3Nzl9O2lmKGkpc3RbUG1dPTMyNzc1LHN0W0RtXT0zMjc3NjtlbHNle2xldCBQPXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7UCE9PW51bGwmJihzdFtQbV09UC5NSU5fRVhULHN0W0RtXT1QLk1BWF9FWFQpfWxldCBudD17W2N3XTowLFt1d106MSxbaHddOjc2OCxbdTBdOjc3MCxbeHddOjc3NixbbXddOjc3NCxbZHddOjc3MixbZnddOjc2OSxbaDBdOjc3MSxbZ3ddOjc3NSxbcHddOjc3M307ZnVuY3Rpb24gQyhQLHB0LGh0LEV0LFksTXQsRHQsanQpe2lmKFA9PT1qbil7eD09PSEwJiYoRnQoMzA0MikseD0hMSk7cmV0dXJufWlmKHg9PT0hMSYmKGsoMzA0MikseD0hMCksUCE9PW93KXtpZihQIT09dnx8anQhPT1BKXtpZigobSE9PUlyfHxfIT09SXIpJiYobi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxtPUlyLF89SXIpLGp0KXN3aXRjaChQKXtjYXNlIEtzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgQ206bi5ibGVuZEZ1bmMoMSwxKTticmVhaztjYXNlIFJtOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIExtOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixQKTticmVha31lbHNlIHN3aXRjaChQKXtjYXNlIEtzOm4uYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBDbTpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSBSbTpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSBMbTpuLmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLFApO2JyZWFrfXA9bnVsbCxiPW51bGwsUz1udWxsLEw9bnVsbCx2PVAsQT1qdH1yZXR1cm59WT1ZfHxwdCxNdD1NdHx8aHQsRHQ9RHR8fEV0LChwdCE9PW18fFkhPT1fKSYmKG4uYmxlbmRFcXVhdGlvblNlcGFyYXRlKHN0W3B0XSxzdFtZXSksbT1wdCxfPVkpLChodCE9PXB8fEV0IT09Ynx8TXQhPT1TfHxEdCE9PUwpJiYobi5ibGVuZEZ1bmNTZXBhcmF0ZShudFtodF0sbnRbRXRdLG50W010XSxudFtEdF0pLHA9aHQsYj1FdCxTPU10LEw9RHQpLHY9UCxBPW51bGx9ZnVuY3Rpb24gaihQLHB0KXtQLnNpZGU9PT1Icj9GdCgyODg0KTprKDI4ODQpO2xldCBodD1QLnNpZGU9PT1oZTtwdCYmKGh0PSFodCksSihodCksUC5ibGVuZGluZz09PUtzJiZQLnRyYW5zcGFyZW50PT09ITE/Qyhqbik6QyhQLmJsZW5kaW5nLFAuYmxlbmRFcXVhdGlvbixQLmJsZW5kU3JjLFAuYmxlbmREc3QsUC5ibGVuZEVxdWF0aW9uQWxwaGEsUC5ibGVuZFNyY0FscGhhLFAuYmxlbmREc3RBbHBoYSxQLnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKFAuZGVwdGhGdW5jKSxsLnNldFRlc3QoUC5kZXB0aFRlc3QpLGwuc2V0TWFzayhQLmRlcHRoV3JpdGUpLGEuc2V0TWFzayhQLmNvbG9yV3JpdGUpO2xldCBFdD1QLnN0ZW5jaWxXcml0ZTtjLnNldFRlc3QoRXQpLEV0JiYoYy5zZXRNYXNrKFAuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKFAuc3RlbmNpbEZ1bmMsUC5zdGVuY2lsUmVmLFAuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKFAuc3RlbmNpbEZhaWwsUC5zdGVuY2lsWkZhaWwsUC5zdGVuY2lsWlBhc3MpKSx2dChQLnBvbHlnb25PZmZzZXQsUC5wb2x5Z29uT2Zmc2V0RmFjdG9yLFAucG9seWdvbk9mZnNldFVuaXRzKSxQLmFscGhhVG9Db3ZlcmFnZT09PSEwP2soMzI5MjYpOkZ0KDMyOTI2KX1mdW5jdGlvbiBKKFApe0ghPT1QJiYoUD9uLmZyb250RmFjZSgyMzA0KTpuLmZyb250RmFjZSgyMzA1KSxIPVApfWZ1bmN0aW9uIGl0KFApe1AhPT1pdz8oaygyODg0KSxQIT09dHQmJihQPT09QW0/bi5jdWxsRmFjZSgxMDI5KTpQPT09cnc/bi5jdWxsRmFjZSgxMDI4KTpuLmN1bGxGYWNlKDEwMzIpKSk6RnQoMjg4NCksdHQ9UH1mdW5jdGlvbiBldChQKXtQIT09WCYmKEYmJm4ubGluZVdpZHRoKFApLFg9UCl9ZnVuY3Rpb24gdnQoUCxwdCxodCl7UD8oaygzMjgyMyksKHkhPT1wdHx8UiE9PWh0KSYmKG4ucG9seWdvbk9mZnNldChwdCxodCkseT1wdCxSPWh0KSk6RnQoMzI4MjMpfWZ1bmN0aW9uIGJ0KFApe1A/aygzMDg5KTpGdCgzMDg5KX1mdW5jdGlvbiBJdChQKXtQPT09dm9pZCAwJiYoUD0zMzk4NCtELTEpLFYhPT1QJiYobi5hY3RpdmVUZXh0dXJlKFApLFY9UCl9ZnVuY3Rpb24gWnQoUCxwdCl7Vj09PW51bGwmJkl0KCk7bGV0IGh0PVFbVl07aHQ9PT12b2lkIDAmJihodD17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LFFbVl09aHQpLChodC50eXBlIT09UHx8aHQudGV4dHVyZSE9PXB0KSYmKG4uYmluZFRleHR1cmUoUCxwdHx8eHRbUF0pLGh0LnR5cGU9UCxodC50ZXh0dXJlPXB0KX1mdW5jdGlvbiBxdCgpe2xldCBQPVFbVl07UCE9PXZvaWQgMCYmUC50eXBlIT09dm9pZCAwJiYobi5iaW5kVGV4dHVyZShQLnR5cGUsbnVsbCksUC50eXBlPXZvaWQgMCxQLnRleHR1cmU9dm9pZCAwKX1mdW5jdGlvbiBFKCl7dHJ5e24uY29tcHJlc3NlZFRleEltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gdygpe3RyeXtuLnRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gcSgpe3RyeXtuLnRleFN1YkltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gcnQoKXt0cnl7bi5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBndCgpe3RyeXtuLnRleFN0b3JhZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiBXKCl7dHJ5e24udGV4U3RvcmFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChQKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsUCl9fWZ1bmN0aW9uIF90KCl7dHJ5e24udGV4SW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goUCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLFApfX1mdW5jdGlvbiB5dCgpe3RyeXtuLnRleEltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKFApe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixQKX19ZnVuY3Rpb24gdXQoUCl7JC5lcXVhbHMoUCk9PT0hMSYmKG4uc2Npc3NvcihQLngsUC55LFAueixQLncpLCQuY29weShQKSl9ZnVuY3Rpb24gY3QoUCl7bHQuZXF1YWxzKFApPT09ITEmJihuLnZpZXdwb3J0KFAueCxQLnksUC56LFAudyksbHQuY29weShQKSl9ZnVuY3Rpb24gQXQoKXtuLmRpc2FibGUoMzA0Miksbi5kaXNhYmxlKDI4ODQpLG4uZGlzYWJsZSgyOTI5KSxuLmRpc2FibGUoMzI4MjMpLG4uZGlzYWJsZSgzMDg5KSxuLmRpc2FibGUoMjk2MCksbi5kaXNhYmxlKDMyOTI2KSxuLmJsZW5kRXF1YXRpb24oMzI3NzQpLG4uYmxlbmRGdW5jKDEsMCksbi5ibGVuZEZ1bmNTZXBhcmF0ZSgxLDAsMSwwKSxuLmNvbG9yTWFzayghMCwhMCwhMCwhMCksbi5jbGVhckNvbG9yKDAsMCwwLDApLG4uZGVwdGhNYXNrKCEwKSxuLmRlcHRoRnVuYyg1MTMpLG4uY2xlYXJEZXB0aCgxKSxuLnN0ZW5jaWxNYXNrKDQyOTQ5NjcyOTUpLG4uc3RlbmNpbEZ1bmMoNTE5LDAsNDI5NDk2NzI5NSksbi5zdGVuY2lsT3AoNzY4MCw3NjgwLDc2ODApLG4uY2xlYXJTdGVuY2lsKDApLG4uY3VsbEZhY2UoMTAyOSksbi5mcm9udEZhY2UoMjMwNSksbi5wb2x5Z29uT2Zmc2V0KDAsMCksbi5hY3RpdmVUZXh0dXJlKDMzOTg0KSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKSxpPT09ITAmJihuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSxudWxsKSxuLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSksbi51c2VQcm9ncmFtKG51bGwpLG4ubGluZVdpZHRoKDEpLG4uc2Npc3NvcigwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSxuLnZpZXdwb3J0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLHU9e30sVj1udWxsLFE9e30saD17fSxmPW5ldyBXZWFrTWFwLGQ9W10sZz1udWxsLHg9ITEsdj1udWxsLG09bnVsbCxwPW51bGwsYj1udWxsLF89bnVsbCxTPW51bGwsTD1udWxsLEE9ITEsSD1udWxsLHR0PW51bGwsWD1udWxsLHk9bnVsbCxSPW51bGwsJC5zZXQoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbHQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGEucmVzZXQoKSxsLnJlc2V0KCksYy5yZXNldCgpfXJldHVybntidWZmZXJzOntjb2xvcjphLGRlcHRoOmwsc3RlbmNpbDpjfSxlbmFibGU6ayxkaXNhYmxlOkZ0LGJpbmRGcmFtZWJ1ZmZlcjptdCxkcmF3QnVmZmVyczpTdCx1c2VQcm9ncmFtOkIsc2V0QmxlbmRpbmc6QyxzZXRNYXRlcmlhbDpqLHNldEZsaXBTaWRlZDpKLHNldEN1bGxGYWNlOml0LHNldExpbmVXaWR0aDpldCxzZXRQb2x5Z29uT2Zmc2V0OnZ0LHNldFNjaXNzb3JUZXN0OmJ0LGFjdGl2ZVRleHR1cmU6SXQsYmluZFRleHR1cmU6WnQsdW5iaW5kVGV4dHVyZTpxdCxjb21wcmVzc2VkVGV4SW1hZ2UyRDpFLHRleEltYWdlMkQ6X3QsdGV4SW1hZ2UzRDp5dCx0ZXhTdG9yYWdlMkQ6Z3QsdGV4U3RvcmFnZTNEOlcsdGV4U3ViSW1hZ2UyRDp3LHRleFN1YkltYWdlM0Q6cSxjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRDpydCxzY2lzc29yOnV0LHZpZXdwb3J0OmN0LHJlc2V0OkF0fX1mdW5jdGlvbiBSRShuLHQsZSxpLHIscyxvKXtsZXQgYT1yLmlzV2ViR0wyLGw9ci5tYXhUZXh0dXJlcyxjPXIubWF4Q3ViZW1hcFNpemUsdT1yLm1heFRleHR1cmVTaXplLGg9ci5tYXhTYW1wbGVzLGQ9dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpP3QuZ2V0KCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKTp2b2lkIDAsZz1uZXcgV2Vha01hcCx4LHY9ITE7dHJ5e3Y9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyE9InVuZGVmaW5lZCImJm5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpIT09bnVsbH1jYXRjaChFKXt9ZnVuY3Rpb24gbShFLHcpe3JldHVybiB2P25ldyBPZmZzY3JlZW5DYW52YXMoRSx3KTpybygiY2FudmFzIil9ZnVuY3Rpb24gcChFLHcscSxydCl7bGV0IGd0PTE7aWYoKEUud2lkdGg+cnR8fEUuaGVpZ2h0PnJ0KSYmKGd0PXJ0L01hdGgubWF4KEUud2lkdGgsRS5oZWlnaHQpKSxndDwxfHx3PT09ITApaWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZFIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmRSBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZFIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBXPXc/bk06TWF0aC5mbG9vcixfdD1XKGd0KkUud2lkdGgpLHl0PVcoZ3QqRS5oZWlnaHQpO3g9PT12b2lkIDAmJih4PW0oX3QseXQpKTtsZXQgdXQ9cT9tKF90LHl0KTp4O3JldHVybiB1dC53aWR0aD1fdCx1dC5oZWlnaHQ9eXQsdXQuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoRSwwLDAsX3QseXQpLGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBoYXMgYmVlbiByZXNpemVkIGZyb20gKCIrRS53aWR0aCsieCIrRS5oZWlnaHQrIikgdG8gKCIrX3QrIngiK3l0KyIpLiIpLHV0fWVsc2UgcmV0dXJuImRhdGEiaW4gRSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBJbWFnZSBpbiBEYXRhVGV4dHVyZSBpcyB0b28gYmlnICgiK0Uud2lkdGgrIngiK0UuaGVpZ2h0KyIpLiIpLEU7cmV0dXJuIEV9ZnVuY3Rpb24gYihFKXtyZXR1cm4gaWcoRS53aWR0aCkmJmlnKEUuaGVpZ2h0KX1mdW5jdGlvbiBfKEUpe3JldHVybiBhPyExOkUud3JhcFMhPT1WZXx8RS53cmFwVCE9PVZlfHxFLm1pbkZpbHRlciE9PWZlJiZFLm1pbkZpbHRlciE9PWJlfWZ1bmN0aW9uIFMoRSx3KXtyZXR1cm4gRS5nZW5lcmF0ZU1pcG1hcHMmJncmJkUubWluRmlsdGVyIT09ZmUmJkUubWluRmlsdGVyIT09YmV9ZnVuY3Rpb24gTChFKXtuLmdlbmVyYXRlTWlwbWFwKEUpfWZ1bmN0aW9uIEEoRSx3LHEscnQsZ3Q9ITEpe2lmKGE9PT0hMSlyZXR1cm4gdztpZihFIT09bnVsbCl7aWYobltFXSE9PXZvaWQgMClyZXR1cm4gbltFXTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrRSsiJyIpfWxldCBXPXc7cmV0dXJuIHc9PT02NDAzJiYocT09PTUxMjYmJihXPTMzMzI2KSxxPT09NTEzMSYmKFc9MzMzMjUpLHE9PT01MTIxJiYoVz0zMzMyMSkpLHc9PT0zMzMxOSYmKHE9PT01MTI2JiYoVz0zMzMyOCkscT09PTUxMzEmJihXPTMzMzI3KSxxPT09NTEyMSYmKFc9MzMzMjMpKSx3PT09NjQwOCYmKHE9PT01MTI2JiYoVz0zNDgzNikscT09PTUxMzEmJihXPTM0ODQyKSxxPT09NTEyMSYmKFc9cnQ9PT0kdCYmZ3Q9PT0hMT8zNTkwNzozMjg1NikscT09PTMyODE5JiYoVz0zMjg1NCkscT09PTMyODIwJiYoVz0zMjg1NSkpLChXPT09MzMzMjV8fFc9PT0zMzMyNnx8Vz09PTMzMzI3fHxXPT09MzMzMjh8fFc9PT0zNDg0Mnx8Vz09PTM0ODM2KSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxXfWZ1bmN0aW9uIEgoRSx3LHEpe3JldHVybiBTKEUscSk9PT0hMHx8RS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmRS5taW5GaWx0ZXIhPT1mZSYmRS5taW5GaWx0ZXIhPT1iZT9NYXRoLmxvZzIoTWF0aC5tYXgody53aWR0aCx3LmhlaWdodCkpKzE6RS5taXBtYXBzIT09dm9pZCAwJiZFLm1pcG1hcHMubGVuZ3RoPjA/RS5taXBtYXBzLmxlbmd0aDpFLmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkoRS5pbWFnZSk/dy5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIHR0KEUpe3JldHVybiBFPT09ZmV8fEU9PT1JbXx8RT09PU5tPzk3Mjg6OTcyOX1mdW5jdGlvbiBYKEUpe2xldCB3PUUudGFyZ2V0O3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsWCksUih3KSx3LmlzVmlkZW9UZXh0dXJlJiZnLmRlbGV0ZSh3KSxvLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIHkoRSl7bGV0IHc9RS50YXJnZXQ7dy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIix5KSxEKHcpfWZ1bmN0aW9uIFIoRSl7bGV0IHc9aS5nZXQoRSk7dy5fX3dlYmdsSW5pdCE9PXZvaWQgMCYmKG4uZGVsZXRlVGV4dHVyZSh3Ll9fd2ViZ2xUZXh0dXJlKSxpLnJlbW92ZShFKSl9ZnVuY3Rpb24gRChFKXtsZXQgdz1FLnRleHR1cmUscT1pLmdldChFKSxydD1pLmdldCh3KTtpZighIUUpe2lmKHJ0Ll9fd2ViZ2xUZXh0dXJlIT09dm9pZCAwJiYobi5kZWxldGVUZXh0dXJlKHJ0Ll9fd2ViZ2xUZXh0dXJlKSxvLm1lbW9yeS50ZXh0dXJlcy0tKSxFLmRlcHRoVGV4dHVyZSYmRS5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLEUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpZm9yKGxldCBndD0wO2d0PDY7Z3QrKyluLmRlbGV0ZUZyYW1lYnVmZmVyKHEuX193ZWJnbEZyYW1lYnVmZmVyW2d0XSkscS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKHEuX193ZWJnbERlcHRoYnVmZmVyW2d0XSk7ZWxzZSBuLmRlbGV0ZUZyYW1lYnVmZmVyKHEuX193ZWJnbEZyYW1lYnVmZmVyKSxxLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsRGVwdGhidWZmZXIpLHEuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyJiZuLmRlbGV0ZUZyYW1lYnVmZmVyKHEuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIocS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihxLl9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcik7aWYoRS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzKWZvcihsZXQgZ3Q9MCxXPXcubGVuZ3RoO2d0PFc7Z3QrKyl7bGV0IF90PWkuZ2V0KHdbZ3RdKTtfdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShfdC5fX3dlYmdsVGV4dHVyZSksby5tZW1vcnkudGV4dHVyZXMtLSksaS5yZW1vdmUod1tndF0pfWkucmVtb3ZlKHcpLGkucmVtb3ZlKEUpfX1sZXQgRj0wO2Z1bmN0aW9uIHooKXtGPTB9ZnVuY3Rpb24gTigpe2xldCBFPUY7cmV0dXJuIEU+PWwmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogVHJ5aW5nIHRvIHVzZSAiK0UrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxGKz0xLEV9ZnVuY3Rpb24gVihFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUuaXNWaWRlb1RleHR1cmUmJmV0KEUpLEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7bGV0IHJ0PUUuaW1hZ2U7aWYocnQ9PT12b2lkIDApY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNlIGlmKHJ0LmNvbXBsZXRlPT09ITEpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIik7ZWxzZXtrKHEsRSx3KTtyZXR1cm59fWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDM1NTMscS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gUShFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7ayhxLEUsdyk7cmV0dXJufWUuYWN0aXZlVGV4dHVyZSgzMzk4NCt3KSxlLmJpbmRUZXh0dXJlKDM1ODY2LHEuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIGF0KEUsdyl7bGV0IHE9aS5nZXQoRSk7aWYoRS52ZXJzaW9uPjAmJnEuX192ZXJzaW9uIT09RS52ZXJzaW9uKXtrKHEsRSx3KTtyZXR1cm59ZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3cpLGUuYmluZFRleHR1cmUoMzI4NzkscS5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gRyhFLHcpe2xldCBxPWkuZ2V0KEUpO2lmKEUudmVyc2lvbj4wJiZxLl9fdmVyc2lvbiE9PUUudmVyc2lvbil7RnQocSxFLHcpO3JldHVybn1lLmFjdGl2ZVRleHR1cmUoMzM5ODQrdyksZS5iaW5kVGV4dHVyZSgzNDA2NyxxLl9fd2ViZ2xUZXh0dXJlKX1sZXQgJD17W091XToxMDQ5NyxbVmVdOjMzMDcxLFtrdV06MzM2NDh9LGx0PXtbZmVdOjk3MjgsW0ltXTo5OTg0LFtObV06OTk4NixbYmVdOjk3MjksW0R3XTo5OTg1LFtMbF06OTk4N307ZnVuY3Rpb24gZHQoRSx3LHEpe2lmKHE/KG4udGV4UGFyYW1ldGVyaShFLDEwMjQyLCRbdy53cmFwU10pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQzLCRbdy53cmFwVF0pLChFPT09MzI4Nzl8fEU9PT0zNTg2NikmJm4udGV4UGFyYW1ldGVyaShFLDMyODgyLCRbdy53cmFwUl0pLG4udGV4UGFyYW1ldGVyaShFLDEwMjQwLGx0W3cubWFnRmlsdGVyXSksbi50ZXhQYXJhbWV0ZXJpKEUsMTAyNDEsbHRbdy5taW5GaWx0ZXJdKSk6KG4udGV4UGFyYW1ldGVyaShFLDEwMjQyLDMzMDcxKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MywzMzA3MSksKEU9PT0zMjg3OXx8RT09PTM1ODY2KSYmbi50ZXhQYXJhbWV0ZXJpKEUsMzI4ODIsMzMwNzEpLCh3LndyYXBTIT09VmV8fHcud3JhcFQhPT1WZSkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxuLnRleFBhcmFtZXRlcmkoRSwxMDI0MCx0dCh3Lm1hZ0ZpbHRlcikpLG4udGV4UGFyYW1ldGVyaShFLDEwMjQxLHR0KHcubWluRmlsdGVyKSksdy5taW5GaWx0ZXIhPT1mZSYmdy5taW5GaWx0ZXIhPT1iZSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgcnQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKHcudHlwZT09PVVpJiZ0LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMXx8YT09PSExJiZ3LnR5cGU9PT1VciYmdC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMSlyZXR1cm47KHcuYW5pc290cm9weT4xfHxpLmdldCh3KS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKG4udGV4UGFyYW1ldGVyZihFLHJ0LlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULE1hdGgubWluKHcuYW5pc290cm9weSxyLmdldE1heEFuaXNvdHJvcHkoKSkpLGkuZ2V0KHcpLl9fY3VycmVudEFuaXNvdHJvcHk9dy5hbmlzb3Ryb3B5KX19ZnVuY3Rpb24geHQoRSx3KXtFLl9fd2ViZ2xJbml0PT09dm9pZCAwJiYoRS5fX3dlYmdsSW5pdD0hMCx3LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLFgpLEUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCksby5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gayhFLHcscSl7bGV0IHJ0PTM1NTM7dy5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKHJ0PTM1ODY2KSx3LmlzRGF0YVRleHR1cmUzRCYmKHJ0PTMyODc5KSx4dChFLHcpLGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtxKSxlLmJpbmRUZXh0dXJlKHJ0LEUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsdy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSx3LnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyx3LnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgZ3Q9Xyh3KSYmYih3LmltYWdlKT09PSExLFc9cCh3LmltYWdlLGd0LCExLHUpO1c9dnQodyxXKTtsZXQgX3Q9YihXKXx8YSx5dD1zLmNvbnZlcnQody5mb3JtYXQsdy5lbmNvZGluZyksdXQ9cy5jb252ZXJ0KHcudHlwZSksY3Q9QSh3LmludGVybmFsRm9ybWF0LHl0LHV0LHcuZW5jb2Rpbmcsdy5pc1ZpZGVvVGV4dHVyZSk7ZHQocnQsdyxfdCk7bGV0IEF0LFA9dy5taXBtYXBzLHB0PWEmJncuaXNWaWRlb1RleHR1cmUhPT0hMCxodD1FLl9fdmVyc2lvbj09PXZvaWQgMCxFdD1IKHcsVyxfdCk7aWYody5pc0RlcHRoVGV4dHVyZSljdD02NDAyLGE/dy50eXBlPT09VWk/Y3Q9MzYwMTI6dy50eXBlPT09UWE/Y3Q9MzMxOTA6dy50eXBlPT09QnI/Y3Q9MzUwNTY6Y3Q9MzMxODk6dy50eXBlPT09VWkmJmNvbnNvbGUuZXJyb3IoIldlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLiIpLHcuZm9ybWF0PT09T2kmJmN0PT09NjQwMiYmdy50eXBlIT09bm8mJncudHlwZSE9PVFhJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBlIGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuIiksdy50eXBlPW5vLHV0PXMuY29udmVydCh3LnR5cGUpKSx3LmZvcm1hdD09PVZyJiZjdD09PTY0MDImJihjdD0zNDA0MSx3LnR5cGUhPT1CciYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSx3LnR5cGU9QnIsdXQ9cy5jb252ZXJ0KHcudHlwZSkpKSxwdCYmaHQ/ZS50ZXhTdG9yYWdlMkQoMzU1MywxLGN0LFcud2lkdGgsVy5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LG51bGwpO2Vsc2UgaWYody5pc0RhdGFUZXh0dXJlKWlmKFAubGVuZ3RoPjAmJl90KXtwdCYmaHQmJmUudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsUFswXS53aWR0aCxQWzBdLmhlaWdodCk7Zm9yKGxldCBZPTAsTXQ9UC5sZW5ndGg7WTxNdDtZKyspQXQ9UFtZXSxwdD9lLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxBdC53aWR0aCxBdC5oZWlnaHQseXQsdXQsQXQuZGF0YSk6ZS50ZXhJbWFnZTJEKDM1NTMsWSxjdCxBdC53aWR0aCxBdC5oZWlnaHQsMCx5dCx1dCxBdC5kYXRhKTt3LmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIHB0PyhodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxXLndpZHRoLFcuaGVpZ2h0KSxlLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxXLndpZHRoLFcuaGVpZ2h0LHl0LHV0LFcuZGF0YSkpOmUudGV4SW1hZ2UyRCgzNTUzLDAsY3QsVy53aWR0aCxXLmhlaWdodCwwLHl0LHV0LFcuZGF0YSk7ZWxzZSBpZih3LmlzQ29tcHJlc3NlZFRleHR1cmUpe3B0JiZodCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxFdCxjdCxQWzBdLndpZHRoLFBbMF0uaGVpZ2h0KTtmb3IobGV0IFk9MCxNdD1QLmxlbmd0aDtZPE10O1krKylBdD1QW1ldLHcuZm9ybWF0IT09UmU/eXQhPT1udWxsP3B0P2UuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxZLDAsMCxBdC53aWR0aCxBdC5oZWlnaHQseXQsQXQuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAsQXQuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6cHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAsQXQud2lkdGgsQXQuaGVpZ2h0LHl0LHV0LEF0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QsQXQud2lkdGgsQXQuaGVpZ2h0LDAseXQsdXQsQXQuZGF0YSl9ZWxzZSBpZih3LmlzRGF0YVRleHR1cmUyREFycmF5KXB0PyhodCYmZS50ZXhTdG9yYWdlM0QoMzU4NjYsRXQsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoKSxlLnRleFN1YkltYWdlM0QoMzU4NjYsMCwwLDAsMCxXLndpZHRoLFcuaGVpZ2h0LFcuZGVwdGgseXQsdXQsVy5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLDAseXQsdXQsVy5kYXRhKTtlbHNlIGlmKHcuaXNEYXRhVGV4dHVyZTNEKXB0PyhodCYmZS50ZXhTdG9yYWdlM0QoMzI4NzksRXQsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoKSxlLnRleFN1YkltYWdlM0QoMzI4NzksMCwwLDAsMCxXLndpZHRoLFcuaGVpZ2h0LFcuZGVwdGgseXQsdXQsVy5kYXRhKSk6ZS50ZXhJbWFnZTNEKDMyODc5LDAsY3QsVy53aWR0aCxXLmhlaWdodCxXLmRlcHRoLDAseXQsdXQsVy5kYXRhKTtlbHNlIGlmKHcuaXNGcmFtZWJ1ZmZlclRleHR1cmUpcHQmJmh0P2UudGV4U3RvcmFnZTJEKDM1NTMsRXQsY3QsVy53aWR0aCxXLmhlaWdodCk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxjdCxXLndpZHRoLFcuaGVpZ2h0LDAseXQsdXQsbnVsbCk7ZWxzZSBpZihQLmxlbmd0aD4wJiZfdCl7cHQmJmh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFBbMF0ud2lkdGgsUFswXS5oZWlnaHQpO2ZvcihsZXQgWT0wLE10PVAubGVuZ3RoO1k8TXQ7WSsrKUF0PVBbWV0scHQ/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsWSwwLDAseXQsdXQsQXQpOmUudGV4SW1hZ2UyRCgzNTUzLFksY3QseXQsdXQsQXQpO3cuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgcHQ/KGh0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLEV0LGN0LFcud2lkdGgsVy5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLHl0LHV0LFcpKTplLnRleEltYWdlMkQoMzU1MywwLGN0LHl0LHV0LFcpO1ModyxfdCkmJkwocnQpLEUuX192ZXJzaW9uPXcudmVyc2lvbix3Lm9uVXBkYXRlJiZ3Lm9uVXBkYXRlKHcpfWZ1bmN0aW9uIEZ0KEUsdyxxKXtpZih3LmltYWdlLmxlbmd0aCE9PTYpcmV0dXJuO3h0KEUsdyksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K3EpLGUuYmluZFRleHR1cmUoMzQwNjcsRS5fX3dlYmdsVGV4dHVyZSksbi5waXhlbFN0b3JlaSgzNzQ0MCx3LmZsaXBZKSxuLnBpeGVsU3RvcmVpKDM3NDQxLHcucHJlbXVsdGlwbHlBbHBoYSksbi5waXhlbFN0b3JlaSgzMzE3LHcudW5wYWNrQWxpZ25tZW50KSxuLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBydD13JiYody5pc0NvbXByZXNzZWRUZXh0dXJlfHx3LmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGd0PXcuaW1hZ2VbMF0mJncuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxXPVtdO2ZvcihsZXQgWT0wO1k8NjtZKyspIXJ0JiYhZ3Q/V1tZXT1wKHcuaW1hZ2VbWV0sITEsITAsYyk6V1tZXT1ndD93LmltYWdlW1ldLmltYWdlOncuaW1hZ2VbWV0sV1tZXT12dCh3LFdbWV0pO2xldCBfdD1XWzBdLHl0PWIoX3QpfHxhLHV0PXMuY29udmVydCh3LmZvcm1hdCx3LmVuY29kaW5nKSxjdD1zLmNvbnZlcnQody50eXBlKSxBdD1BKHcuaW50ZXJuYWxGb3JtYXQsdXQsY3Qsdy5lbmNvZGluZyksUD1hJiZ3LmlzVmlkZW9UZXh0dXJlIT09ITAscHQ9RS5fX3ZlcnNpb249PT12b2lkIDAsaHQ9SCh3LF90LHl0KTtkdCgzNDA2Nyx3LHl0KTtsZXQgRXQ7aWYocnQpe1AmJnB0JiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxodCxBdCxfdC53aWR0aCxfdC5oZWlnaHQpO2ZvcihsZXQgWT0wO1k8NjtZKyspe0V0PVdbWV0ubWlwbWFwcztmb3IobGV0IE10PTA7TXQ8RXQubGVuZ3RoO010Kyspe2xldCBEdD1FdFtNdF07dy5mb3JtYXQhPT1SZT91dCE9PW51bGw/UD9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1ksTXQsMCwwLER0LndpZHRoLER0LmhlaWdodCx1dCxEdC5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM0MDY5K1ksTXQsQXQsRHQud2lkdGgsRHQuaGVpZ2h0LDAsRHQuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOlA/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksTXQsMCwwLER0LndpZHRoLER0LmhlaWdodCx1dCxjdCxEdC5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCxBdCxEdC53aWR0aCxEdC5oZWlnaHQsMCx1dCxjdCxEdC5kYXRhKX19fWVsc2V7RXQ9dy5taXBtYXBzLFAmJnB0JiYoRXQubGVuZ3RoPjAmJmh0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsaHQsQXQsV1swXS53aWR0aCxXWzBdLmhlaWdodCkpO2ZvcihsZXQgWT0wO1k8NjtZKyspaWYoZ3Qpe1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksMCwwLDAsV1tZXS53aWR0aCxXW1ldLmhlaWdodCx1dCxjdCxXW1ldLmRhdGEpOmUudGV4SW1hZ2UyRCgzNDA2OStZLDAsQXQsV1tZXS53aWR0aCxXW1ldLmhlaWdodCwwLHV0LGN0LFdbWV0uZGF0YSk7Zm9yKGxldCBNdD0wO010PEV0Lmxlbmd0aDtNdCsrKXtsZXQganQ9RXRbTXRdLmltYWdlW1ldLmltYWdlO1A/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1ksTXQrMSwwLDAsanQud2lkdGgsanQuaGVpZ2h0LHV0LGN0LGp0LmRhdGEpOmUudGV4SW1hZ2UyRCgzNDA2OStZLE10KzEsQXQsanQud2lkdGgsanQuaGVpZ2h0LDAsdXQsY3QsanQuZGF0YSl9fWVsc2V7UD9lLnRleFN1YkltYWdlMkQoMzQwNjkrWSwwLDAsMCx1dCxjdCxXW1ldKTplLnRleEltYWdlMkQoMzQwNjkrWSwwLEF0LHV0LGN0LFdbWV0pO2ZvcihsZXQgTXQ9MDtNdDxFdC5sZW5ndGg7TXQrKyl7bGV0IER0PUV0W010XTtQP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStZLE10KzEsMCwwLHV0LGN0LER0LmltYWdlW1ldKTplLnRleEltYWdlMkQoMzQwNjkrWSxNdCsxLEF0LHV0LGN0LER0LmltYWdlW1ldKX19fVModyx5dCkmJkwoMzQwNjcpLEUuX192ZXJzaW9uPXcudmVyc2lvbix3Lm9uVXBkYXRlJiZ3Lm9uVXBkYXRlKHcpfWZ1bmN0aW9uIG10KEUsdyxxLHJ0LGd0KXtsZXQgVz1zLmNvbnZlcnQocS5mb3JtYXQscS5lbmNvZGluZyksX3Q9cy5jb252ZXJ0KHEudHlwZSkseXQ9QShxLmludGVybmFsRm9ybWF0LFcsX3QscS5lbmNvZGluZyk7aS5nZXQodykuX19oYXNFeHRlcm5hbFRleHR1cmVzfHwoZ3Q9PT0zMjg3OXx8Z3Q9PT0zNTg2Nj9lLnRleEltYWdlM0QoZ3QsMCx5dCx3LndpZHRoLHcuaGVpZ2h0LHcuZGVwdGgsMCxXLF90LG51bGwpOmUudGV4SW1hZ2UyRChndCwwLHl0LHcud2lkdGgsdy5oZWlnaHQsMCxXLF90LG51bGwpKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxFKSx3LnVzZVJlbmRlclRvVGV4dHVyZT9kLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAscnQsZ3QsaS5nZXQocSkuX193ZWJnbFRleHR1cmUsMCxpdCh3KSk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxydCxndCxpLmdldChxKS5fX3dlYmdsVGV4dHVyZSwwKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBTdChFLHcscSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLEUpLHcuZGVwdGhCdWZmZXImJiF3LnN0ZW5jaWxCdWZmZXIpe2xldCBydD0zMzE4OTtpZihxfHx3LnVzZVJlbmRlclRvVGV4dHVyZSl7bGV0IGd0PXcuZGVwdGhUZXh0dXJlO2d0JiZndC5pc0RlcHRoVGV4dHVyZSYmKGd0LnR5cGU9PT1VaT9ydD0zNjAxMjpndC50eXBlPT09UWEmJihydD0zMzE5MCkpO2xldCBXPWl0KHcpO3cudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLFcscnQsdy53aWR0aCx3LmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVyxydCx3LndpZHRoLHcuaGVpZ2h0KX1lbHNlIG4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxydCx3LndpZHRoLHcuaGVpZ2h0KTtuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDk2LDM2MTYxLEUpfWVsc2UgaWYody5kZXB0aEJ1ZmZlciYmdy5zdGVuY2lsQnVmZmVyKXtsZXQgcnQ9aXQodyk7cSYmdy51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEscnQsMzUwNTYsdy53aWR0aCx3LmhlaWdodCk6dy51c2VSZW5kZXJUb1RleHR1cmU/ZC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEscnQsMzUwNTYsdy53aWR0aCx3LmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLHcud2lkdGgsdy5oZWlnaHQpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsRSl9ZWxzZXtsZXQgcnQ9dy5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPT09ITA/dy50ZXh0dXJlWzBdOncudGV4dHVyZSxndD1zLmNvbnZlcnQocnQuZm9ybWF0LHJ0LmVuY29kaW5nKSxXPXMuY29udmVydChydC50eXBlKSxfdD1BKHJ0LmludGVybmFsRm9ybWF0LGd0LFcscnQuZW5jb2RpbmcpLHl0PWl0KHcpO3EmJncudXNlUmVuZGVyYnVmZmVyP24ucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLHl0LF90LHcud2lkdGgsdy5oZWlnaHQpOncudXNlUmVuZGVyVG9UZXh0dXJlP2QucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLHl0LF90LHcud2lkdGgsdy5oZWlnaHQpOm4ucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxfdCx3LndpZHRoLHcuaGVpZ2h0KX1uLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCl9ZnVuY3Rpb24gQihFLHcpe2lmKHcmJncuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsRSksISh3LmRlcHRoVGV4dHVyZSYmdy5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpKXRocm93IG5ldyBFcnJvcigicmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFRIUkVFLkRlcHRoVGV4dHVyZSIpOyghaS5nZXQody5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlfHx3LmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aCE9PXcud2lkdGh8fHcuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodCE9PXcuaGVpZ2h0KSYmKHcuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoPXcud2lkdGgsdy5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0PXcuaGVpZ2h0LHcuZGVwdGhUZXh0dXJlLm5lZWRzVXBkYXRlPSEwKSxWKHcuZGVwdGhUZXh0dXJlLDApO2xldCBydD1pLmdldCh3LmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsZ3Q9aXQodyk7aWYody5kZXB0aFRleHR1cmUuZm9ybWF0PT09T2kpdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMscnQsMCxndCk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLHJ0LDApO2Vsc2UgaWYody5kZXB0aFRleHR1cmUuZm9ybWF0PT09VnIpdy51c2VSZW5kZXJUb1RleHR1cmU/ZC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDMzMzA2LDM1NTMscnQsMCxndCk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzMzMwNiwzNTUzLHJ0LDApO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKX1mdW5jdGlvbiBzdChFKXtsZXQgdz1pLmdldChFKSxxPUUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9PT0hMDtpZihFLmRlcHRoVGV4dHVyZSYmIXcuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYocSl0aHJvdyBuZXcgRXJyb3IoInRhcmdldC5kZXB0aFRleHR1cmUgbm90IHN1cHBvcnRlZCBpbiBDdWJlIHJlbmRlciB0YXJnZXRzIik7Qih3Ll9fd2ViZ2xGcmFtZWJ1ZmZlcixFKX1lbHNlIGlmKHEpe3cuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgcnQ9MDtydDw2O3J0KyspZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdy5fX3dlYmdsRnJhbWVidWZmZXJbcnRdKSx3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcltydF09bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxTdCh3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcltydF0sRSwhMSl9ZWxzZSBlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCx3Ll9fd2ViZ2xGcmFtZWJ1ZmZlciksdy5fX3dlYmdsRGVwdGhidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxTdCh3Ll9fd2ViZ2xEZXB0aGJ1ZmZlcixFLCExKTtlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1mdW5jdGlvbiBudChFLHcscSl7bGV0IHJ0PWkuZ2V0KEUpO3chPT12b2lkIDAmJm10KHJ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcixFLEUudGV4dHVyZSwzNjA2NCwzNTUzKSxxIT09dm9pZCAwJiZzdChFKX1mdW5jdGlvbiBDKEUpe2xldCB3PUUudGV4dHVyZSxxPWkuZ2V0KEUpLHJ0PWkuZ2V0KHcpO0UuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIseSksRS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIT09ITAmJihydC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKHJ0Ll9fd2ViZ2xUZXh0dXJlPW4uY3JlYXRlVGV4dHVyZSgpKSxydC5fX3ZlcnNpb249dy52ZXJzaW9uLG8ubWVtb3J5LnRleHR1cmVzKyspO2xldCBndD1FLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PT09ITAsVz1FLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMCxfdD13LmlzRGF0YVRleHR1cmUzRHx8dy5pc0RhdGFUZXh0dXJlMkRBcnJheSx5dD1iKEUpfHxhO2lmKGd0KXtxLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1bXTtmb3IobGV0IHV0PTA7dXQ8Njt1dCsrKXEuX193ZWJnbEZyYW1lYnVmZmVyW3V0XT1uLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihxLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1uLmNyZWF0ZUZyYW1lYnVmZmVyKCksVylpZihyLmRyYXdCdWZmZXJzKXtsZXQgdXQ9RS50ZXh0dXJlO2ZvcihsZXQgY3Q9MCxBdD11dC5sZW5ndGg7Y3Q8QXQ7Y3QrKyl7bGV0IFA9aS5nZXQodXRbY3RdKTtQLl9fd2ViZ2xUZXh0dXJlPT09dm9pZCAwJiYoUC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSxvLm1lbW9yeS50ZXh0dXJlcysrKX19ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIgb3IgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbi4iKTtlbHNlIGlmKEUudXNlUmVuZGVyYnVmZmVyKWlmKGEpe3EuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLG4uYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxxLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcik7bGV0IHV0PXMuY29udmVydCh3LmZvcm1hdCx3LmVuY29kaW5nKSxjdD1zLmNvbnZlcnQody50eXBlKSxBdD1BKHcuaW50ZXJuYWxGb3JtYXQsdXQsY3Qsdy5lbmNvZGluZyksUD1pdChFKTtuLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxQLEF0LEUud2lkdGgsRS5oZWlnaHQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLHEuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxuLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDM2MDY0LDM2MTYxLHEuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksRS5kZXB0aEJ1ZmZlciYmKHEuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCksU3QocS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsRSwhMCkpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoZ3Qpe2UuYmluZFRleHR1cmUoMzQwNjcscnQuX193ZWJnbFRleHR1cmUpLGR0KDM0MDY3LHcseXQpO2ZvcihsZXQgdXQ9MDt1dDw2O3V0KyspbXQocS5fX3dlYmdsRnJhbWVidWZmZXJbdXRdLEUsdywzNjA2NCwzNDA2OSt1dCk7Uyh3LHl0KSYmTCgzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihXKXtsZXQgdXQ9RS50ZXh0dXJlO2ZvcihsZXQgY3Q9MCxBdD11dC5sZW5ndGg7Y3Q8QXQ7Y3QrKyl7bGV0IFA9dXRbY3RdLHB0PWkuZ2V0KFApO2UuYmluZFRleHR1cmUoMzU1MyxwdC5fX3dlYmdsVGV4dHVyZSksZHQoMzU1MyxQLHl0KSxtdChxLl9fd2ViZ2xGcmFtZWJ1ZmZlcixFLFAsMzYwNjQrY3QsMzU1MyksUyhQLHl0KSYmTCgzNTUzKX1lLnVuYmluZFRleHR1cmUoKX1lbHNle2xldCB1dD0zNTUzO190JiYoYT91dD13LmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksZS5iaW5kVGV4dHVyZSh1dCxydC5fX3dlYmdsVGV4dHVyZSksZHQodXQsdyx5dCksbXQocS5fX3dlYmdsRnJhbWVidWZmZXIsRSx3LDM2MDY0LHV0KSxTKHcseXQpJiZMKHV0KSxlLnVuYmluZFRleHR1cmUoKX1FLmRlcHRoQnVmZmVyJiZzdChFKX1mdW5jdGlvbiBqKEUpe2xldCB3PWIoRSl8fGEscT1FLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMD9FLnRleHR1cmU6W0UudGV4dHVyZV07Zm9yKGxldCBydD0wLGd0PXEubGVuZ3RoO3J0PGd0O3J0Kyspe2xldCBXPXFbcnRdO2lmKFMoVyx3KSl7bGV0IF90PUUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1Myx5dD1pLmdldChXKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKF90LHl0KSxMKF90KSxlLnVuYmluZFRleHR1cmUoKX19fWZ1bmN0aW9uIEooRSl7aWYoRS51c2VSZW5kZXJidWZmZXIpaWYoYSl7bGV0IHc9RS53aWR0aCxxPUUuaGVpZ2h0LHJ0PTE2Mzg0LGd0PVszNjA2NF0sVz1FLnN0ZW5jaWxCdWZmZXI/MzMzMDY6MzYwOTY7RS5kZXB0aEJ1ZmZlciYmZ3QucHVzaChXKSxFLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwoRS5kZXB0aEJ1ZmZlciYmKHJ0fD0yNTYpLEUuc3RlbmNpbEJ1ZmZlciYmKHJ0fD0xMDI0KSk7bGV0IF90PWkuZ2V0KEUpO2UuYmluZEZyYW1lYnVmZmVyKDM2MDA4LF90Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5iaW5kRnJhbWVidWZmZXIoMzYwMDksX3QuX193ZWJnbEZyYW1lYnVmZmVyKSxFLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYobi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW1ddKSxuLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOSxbV10pKSxuLmJsaXRGcmFtZWJ1ZmZlcigwLDAsdyxxLDAsMCx3LHEscnQsOTcyOCksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsZ3QpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LF90Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcil9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKX1mdW5jdGlvbiBpdChFKXtyZXR1cm4gYSYmKEUudXNlUmVuZGVyYnVmZmVyfHxFLnVzZVJlbmRlclRvVGV4dHVyZSk/TWF0aC5taW4oaCxFLnNhbXBsZXMpOjB9ZnVuY3Rpb24gZXQoRSl7bGV0IHc9by5yZW5kZXIuZnJhbWU7Zy5nZXQoRSkhPT13JiYoZy5zZXQoRSx3KSxFLnVwZGF0ZSgpKX1mdW5jdGlvbiB2dChFLHcpe2xldCBxPUUuZW5jb2RpbmcscnQ9RS5mb3JtYXQsZ3Q9RS50eXBlO3JldHVybiBFLmlzQ29tcHJlc3NlZFRleHR1cmU9PT0hMHx8RS5pc1ZpZGVvVGV4dHVyZT09PSEwfHxFLmZvcm1hdD09PUh1fHxxIT09cmkmJihxPT09JHQ/YT09PSExP3QuaGFzKCJFWFRfc1JHQiIpPT09ITAmJnJ0PT09UmU/KEUuZm9ybWF0PUh1LEUubWluRmlsdGVyPWJlLEUuZ2VuZXJhdGVNaXBtYXBzPSExKTp3PU5uLnNSR0JUb0xpbmVhcih3KToocnQhPT1SZXx8Z3QhPT1laSkmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xUZXh0dXJlczogc1JHQiBlbmNvZGVkIHRleHR1cmVzIGhhdmUgdG8gdXNlIFJHQkFGb3JtYXQgYW5kIFVuc2lnbmVkQnl0ZVR5cGUuIik6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xUZXh0dXJlczogVW5zdXBwb3J0ZWQgdGV4dHVyZSBlbmNvZGluZzoiLHEpKSx3fWxldCBidD0hMSxJdD0hMTtmdW5jdGlvbiBadChFLHcpe0UmJkUuaXNXZWJHTFJlbmRlclRhcmdldCYmKGJ0PT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxidD0hMCksRT1FLnRleHR1cmUpLFYoRSx3KX1mdW5jdGlvbiBxdChFLHcpe0UmJkUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJihJdD09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLEl0PSEwKSxFPUUudGV4dHVyZSksRyhFLHcpfXRoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1OLHRoaXMucmVzZXRUZXh0dXJlVW5pdHM9eix0aGlzLnNldFRleHR1cmUyRD1WLHRoaXMuc2V0VGV4dHVyZTJEQXJyYXk9USx0aGlzLnNldFRleHR1cmUzRD1hdCx0aGlzLnNldFRleHR1cmVDdWJlPUcsdGhpcy5yZWJpbmRUZXh0dXJlcz1udCx0aGlzLnNldHVwUmVuZGVyVGFyZ2V0PUMsdGhpcy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXA9aix0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PUosdGhpcy5zZXR1cERlcHRoUmVuZGVyYnVmZmVyPXN0LHRoaXMuc2V0dXBGcmFtZUJ1ZmZlclRleHR1cmU9bXQsdGhpcy5zYWZlU2V0VGV4dHVyZTJEPVp0LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPXF0fWZ1bmN0aW9uIExFKG4sdCxlKXtsZXQgaT1lLmlzV2ViR0wyO2Z1bmN0aW9uIHIocyxvPW51bGwpe2xldCBhO2lmKHM9PT1laSlyZXR1cm4gNTEyMTtpZihzPT09encpcmV0dXJuIDMyODE5O2lmKHM9PT1VdylyZXR1cm4gMzI4MjA7aWYocz09PUl3KXJldHVybiA1MTIwO2lmKHM9PT1OdylyZXR1cm4gNTEyMjtpZihzPT09bm8pcmV0dXJuIDUxMjM7aWYocz09PUZ3KXJldHVybiA1MTI0O2lmKHM9PT1RYSlyZXR1cm4gNTEyNTtpZihzPT09VWkpcmV0dXJuIDUxMjY7aWYocz09PVVyKXJldHVybiBpPzUxMzE6KGE9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxhIT09bnVsbD9hLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKHM9PT1CdylyZXR1cm4gNjQwNjtpZihzPT09UmUpcmV0dXJuIDY0MDg7aWYocz09PU93KXJldHVybiA2NDA5O2lmKHM9PT1rdylyZXR1cm4gNjQxMDtpZihzPT09T2kpcmV0dXJuIDY0MDI7aWYocz09PVZyKXJldHVybiAzNDA0MTtpZihzPT09SHcpcmV0dXJuIDY0MDM7aWYocz09PUh1KXJldHVybiBhPXQuZ2V0KCJFWFRfc1JHQiIpLGEhPT1udWxsP2EuU1JHQl9BTFBIQV9FWFQ6bnVsbDtpZihzPT09VncpcmV0dXJuIDM2MjQ0O2lmKHM9PT1HdylyZXR1cm4gMzMzMTk7aWYocz09PVd3KXJldHVybiAzMzMyMDtpZihzPT09cXcpcmV0dXJuIDM2MjQ5O2lmKHM9PT1LY3x8cz09PVFjfHxzPT09amN8fHM9PT10dSlpZihvPT09JHQpaWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLGEhPT1udWxsKXtpZihzPT09S2MpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYocz09PVFjKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKHM9PT1qYylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZihzPT09dHUpcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIiksYSE9PW51bGwpe2lmKHM9PT1LYylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKHM9PT1RYylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZihzPT09amMpcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYocz09PXR1KXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PUZtfHxzPT09em18fHM9PT1VbXx8cz09PUJtKWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpLGEhPT1udWxsKXtpZihzPT09Rm0pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRztpZihzPT09em0pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZihzPT09VW0pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc7aWYocz09PUJtKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HfWVsc2UgcmV0dXJuIG51bGw7aWYocz09PVh3KXJldHVybiBhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLGEhPT1udWxsP2EuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKHM9PT1PbXx8cz09PWttKWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKSxhIT09bnVsbCl7aWYocz09PU9tKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0VUQzI6YS5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZihzPT09a20pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOmEuQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQ31lbHNlIHJldHVybiBudWxsO2lmKHM9PT1IbXx8cz09PVZtfHxzPT09R218fHM9PT1XbXx8cz09PXFtfHxzPT09WG18fHM9PT1ZbXx8cz09PVptfHxzPT09Sm18fHM9PT0kbXx8cz09PUttfHxzPT09UW18fHM9PT1qbXx8cz09PXRnKWlmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIiksYSE9PW51bGwpe2lmKHM9PT1IbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZihzPT09Vm0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI7aWYocz09PUdtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO2lmKHM9PT1XbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZihzPT09cW0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI7aWYocz09PVhtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO2lmKHM9PT1ZbSlyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZihzPT09Wm0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI7aWYocz09PUptKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7aWYocz09PSRtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYocz09PUttKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI7aWYocz09PVFtKXJldHVybiBvPT09JHQ/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtpZihzPT09am0pcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKHM9PT10ZylyZXR1cm4gbz09PSR0P2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFJ9ZWxzZSByZXR1cm4gbnVsbDtpZihzPT09ZWcpaWYoYT10LmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLGEhPT1udWxsKXtpZihzPT09ZWcpcmV0dXJuIG89PT0kdD9hLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9CUFRDX1VOT1JNX0VYVDphLkNPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNX0VYVH1lbHNlIHJldHVybiBudWxsO2lmKHM9PT1CcilyZXR1cm4gaT8zNDA0MjooYT10LmdldCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLGEhPT1udWxsP2EuVU5TSUdORURfSU5UXzI0XzhfV0VCR0w6bnVsbCl9cmV0dXJue2NvbnZlcnQ6cn19dmFyIGhsPWNsYXNzIGV4dGVuZHMgU2V7Y29uc3RydWN0b3IodD1bXSl7c3VwZXIoKSx0aGlzLmNhbWVyYXM9dH19O2hsLnByb3RvdHlwZS5pc0FycmF5Q2FtZXJhPSEwO3ZhciBCaT1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9Ikdyb3VwIn19O0JpLnByb3RvdHlwZS5pc0dyb3VwPSEwO3ZhciBQRT17dHlwZToibW92ZSJ9LFFzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1nZXRIYW5kU3BhY2UoKXtyZXR1cm4gdGhpcy5faGFuZD09PW51bGwmJih0aGlzLl9oYW5kPW5ldyBCaSx0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5faGFuZC52aXNpYmxlPSExLHRoaXMuX2hhbmQuam9pbnRzPXt9LHRoaXMuX2hhbmQuaW5wdXRTdGF0ZT17cGluY2hpbmc6ITF9KSx0aGlzLl9oYW5kfWdldFRhcmdldFJheVNwYWNlKCl7cmV0dXJuIHRoaXMuX3RhcmdldFJheT09PW51bGwmJih0aGlzLl90YXJnZXRSYXk9bmV3IEJpLHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExLHRoaXMuX3RhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkubGluZWFyVmVsb2NpdHk9bmV3IFQsdGhpcy5fdGFyZ2V0UmF5Lmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkuYW5ndWxhclZlbG9jaXR5PW5ldyBUKSx0aGlzLl90YXJnZXRSYXl9Z2V0R3JpcFNwYWNlKCl7cmV0dXJuIHRoaXMuX2dyaXA9PT1udWxsJiYodGhpcy5fZ3JpcD1uZXcgQmksdGhpcy5fZ3JpcC5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX2dyaXAudmlzaWJsZT0hMSx0aGlzLl9ncmlwLmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX2dyaXAubGluZWFyVmVsb2NpdHk9bmV3IFQsdGhpcy5fZ3JpcC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5hbmd1bGFyVmVsb2NpdHk9bmV3IFQpLHRoaXMuX2dyaXB9ZGlzcGF0Y2hFdmVudCh0KXtyZXR1cm4gdGhpcy5fdGFyZ2V0UmF5IT09bnVsbCYmdGhpcy5fdGFyZ2V0UmF5LmRpc3BhdGNoRXZlbnQodCksdGhpcy5fZ3JpcCE9PW51bGwmJnRoaXMuX2dyaXAuZGlzcGF0Y2hFdmVudCh0KSx0aGlzLl9oYW5kIT09bnVsbCYmdGhpcy5faGFuZC5kaXNwYXRjaEV2ZW50KHQpLHRoaXN9ZGlzY29ubmVjdCh0KXtyZXR1cm4gdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNjb25uZWN0ZWQiLGRhdGE6dH0pLHRoaXMuX3RhcmdldFJheSE9PW51bGwmJih0aGlzLl90YXJnZXRSYXkudmlzaWJsZT0hMSksdGhpcy5fZ3JpcCE9PW51bGwmJih0aGlzLl9ncmlwLnZpc2libGU9ITEpLHRoaXMuX2hhbmQhPT1udWxsJiYodGhpcy5faGFuZC52aXNpYmxlPSExKSx0aGlzfXVwZGF0ZSh0LGUsaSl7bGV0IHI9bnVsbCxzPW51bGwsbz1udWxsLGE9dGhpcy5fdGFyZ2V0UmF5LGw9dGhpcy5fZ3JpcCxjPXRoaXMuX2hhbmQ7aWYodCYmZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSE9PSJ2aXNpYmxlLWJsdXJyZWQiKWlmKGEhPT1udWxsJiYocj1lLmdldFBvc2UodC50YXJnZXRSYXlTcGFjZSxpKSxyIT09bnVsbCYmKGEubWF0cml4LmZyb21BcnJheShyLnRyYW5zZm9ybS5tYXRyaXgpLGEubWF0cml4LmRlY29tcG9zZShhLnBvc2l0aW9uLGEucm90YXRpb24sYS5zY2FsZSksci5saW5lYXJWZWxvY2l0eT8oYS5oYXNMaW5lYXJWZWxvY2l0eT0hMCxhLmxpbmVhclZlbG9jaXR5LmNvcHkoci5saW5lYXJWZWxvY2l0eSkpOmEuaGFzTGluZWFyVmVsb2NpdHk9ITEsci5hbmd1bGFyVmVsb2NpdHk/KGEuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGEuYW5ndWxhclZlbG9jaXR5LmNvcHkoci5hbmd1bGFyVmVsb2NpdHkpKTphLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLmRpc3BhdGNoRXZlbnQoUEUpKSksYyYmdC5oYW5kKXtvPSEwO2ZvcihsZXQgeCBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCB2PWUuZ2V0Sm9pbnRQb3NlKHgsaSk7aWYoYy5qb2ludHNbeC5qb2ludE5hbWVdPT09dm9pZCAwKXtsZXQgcD1uZXcgQmk7cC5tYXRyaXhBdXRvVXBkYXRlPSExLHAudmlzaWJsZT0hMSxjLmpvaW50c1t4LmpvaW50TmFtZV09cCxjLmFkZChwKX1sZXQgbT1jLmpvaW50c1t4LmpvaW50TmFtZV07diE9PW51bGwmJihtLm1hdHJpeC5mcm9tQXJyYXkodi50cmFuc2Zvcm0ubWF0cml4KSxtLm1hdHJpeC5kZWNvbXBvc2UobS5wb3NpdGlvbixtLnJvdGF0aW9uLG0uc2NhbGUpLG0uam9pbnRSYWRpdXM9di5yYWRpdXMpLG0udmlzaWJsZT12IT09bnVsbH1sZXQgdT1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLGg9Yy5qb2ludHNbInRodW1iLXRpcCJdLGY9dS5wb3NpdGlvbi5kaXN0YW5jZVRvKGgucG9zaXRpb24pLGQ9LjAyLGc9LjAwNTtjLmlucHV0U3RhdGUucGluY2hpbmcmJmY+ZCtnPyhjLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWMuaW5wdXRTdGF0ZS5waW5jaGluZyYmZjw9ZC1nJiYoYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBsIT09bnVsbCYmdC5ncmlwU3BhY2UmJihzPWUuZ2V0UG9zZSh0LmdyaXBTcGFjZSxpKSxzIT09bnVsbCYmKGwubWF0cml4LmZyb21BcnJheShzLnRyYW5zZm9ybS5tYXRyaXgpLGwubWF0cml4LmRlY29tcG9zZShsLnBvc2l0aW9uLGwucm90YXRpb24sbC5zY2FsZSkscy5saW5lYXJWZWxvY2l0eT8obC5oYXNMaW5lYXJWZWxvY2l0eT0hMCxsLmxpbmVhclZlbG9jaXR5LmNvcHkocy5saW5lYXJWZWxvY2l0eSkpOmwuaGFzTGluZWFyVmVsb2NpdHk9ITEscy5hbmd1bGFyVmVsb2NpdHk/KGwuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGwuYW5ndWxhclZlbG9jaXR5LmNvcHkocy5hbmd1bGFyVmVsb2NpdHkpKTpsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBhIT09bnVsbCYmKGEudmlzaWJsZT1yIT09bnVsbCksbCE9PW51bGwmJihsLnZpc2libGU9cyE9PW51bGwpLGMhPT1udWxsJiYoYy52aXNpYmxlPW8hPT1udWxsKSx0aGlzfX0sdW89Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyx1KXtpZih1PXUhPT12b2lkIDA/dTpPaSx1IT09T2kmJnUhPT1Wcil0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7aT09PXZvaWQgMCYmdT09PU9pJiYoaT1ubyksaT09PXZvaWQgMCYmdT09PVZyJiYoaT1Cciksc3VwZXIobnVsbCxyLHMsbyxhLGwsdSxpLGMpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmV9LHRoaXMubWFnRmlsdGVyPWEhPT12b2lkIDA/YTpmZSx0aGlzLm1pbkZpbHRlcj1sIT09dm9pZCAwP2w6ZmUsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19O3VvLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDt2YXIgWnU9Y2xhc3MgZXh0ZW5kcyBJbntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCk7bGV0IGk9dGhpcyxyPW51bGwscz0xLG89bnVsbCxhPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGg9bnVsbCxmPW51bGwsZD0hMSxnPW51bGwseD1lLmdldENvbnRleHRBdHRyaWJ1dGVzKCksdj1udWxsLG09bnVsbCxwPVtdLGI9bmV3IE1hcCxfPW5ldyBTZTtfLmxheWVycy5lbmFibGUoMSksXy52aWV3cG9ydD1uZXcgV3Q7bGV0IFM9bmV3IFNlO1MubGF5ZXJzLmVuYWJsZSgyKSxTLnZpZXdwb3J0PW5ldyBXdDtsZXQgTD1bXyxTXSxBPW5ldyBobDtBLmxheWVycy5lbmFibGUoMSksQS5sYXllcnMuZW5hYmxlKDIpO2xldCBIPW51bGwsdHQ9bnVsbDt0aGlzLmNhbWVyYUF1dG9VcGRhdGU9ITAsdGhpcy5lbmFibGVkPSExLHRoaXMuaXNQcmVzZW50aW5nPSExLHRoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihHKXtsZXQgJD1wW0ddO3JldHVybiAkPT09dm9pZCAwJiYoJD1uZXcgUXMscFtHXT0kKSwkLmdldFRhcmdldFJheVNwYWNlKCl9LHRoaXMuZ2V0Q29udHJvbGxlckdyaXA9ZnVuY3Rpb24oRyl7bGV0ICQ9cFtHXTtyZXR1cm4gJD09PXZvaWQgMCYmKCQ9bmV3IFFzLHBbR109JCksJC5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKEcpe2xldCAkPXBbR107cmV0dXJuICQ9PT12b2lkIDAmJigkPW5ldyBRcyxwW0ddPSQpLCQuZ2V0SGFuZFNwYWNlKCl9O2Z1bmN0aW9uIFgoRyl7bGV0ICQ9Yi5nZXQoRy5pbnB1dFNvdXJjZSk7JCYmJC5kaXNwYXRjaEV2ZW50KHt0eXBlOkcudHlwZSxkYXRhOkcuaW5wdXRTb3VyY2V9KX1mdW5jdGlvbiB5KCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKEcsJCl7Ry5kaXNjb25uZWN0KCQpfSksYi5jbGVhcigpLEg9bnVsbCx0dD1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KHYpLGY9bnVsbCxoPW51bGwsdT1udWxsLHI9bnVsbCxtPW51bGwsYXQuc3RvcCgpLGkuaXNQcmVzZW50aW5nPSExLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX10aGlzLnNldEZyYW1lYnVmZmVyU2NhbGVGYWN0b3I9ZnVuY3Rpb24oRyl7cz1HLGkuaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKEcpe2E9RyxpLmlzUHJlc2VudGluZz09PSEwJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYlhSTWFuYWdlcjogQ2Fubm90IGNoYW5nZSByZWZlcmVuY2Ugc3BhY2UgdHlwZSB3aGlsZSBwcmVzZW50aW5nLiIpfSx0aGlzLmdldFJlZmVyZW5jZVNwYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIG99LHRoaXMuZ2V0QmFzZUxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIGghPT1udWxsP2g6Zn0sdGhpcy5nZXRCaW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LHRoaXMuZ2V0RnJhbWU9ZnVuY3Rpb24oKXtyZXR1cm4gZ30sdGhpcy5nZXRTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHRoaXMuc2V0U2Vzc2lvbj1mdW5jdGlvbihHKXtyZXR1cm4gaGYodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKHI9RyxyIT09bnVsbCl7aWYodj10LmdldFJlbmRlclRhcmdldCgpLHIuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0IixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVuZCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplIixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsWCksci5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplZW5kIixYKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVuZCIseSksci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dHNvdXJjZXNjaGFuZ2UiLFIpLHgueHJDb21wYXRpYmxlIT09ITAmJih5aWVsZCBlLm1ha2VYUkNvbXBhdGlibGUoKSksci5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDB8fHQuY2FwYWJpbGl0aWVzLmlzV2ViR0wyPT09ITEpe2xldCAkPXthbnRpYWxpYXM6ci5yZW5kZXJTdGF0ZS5sYXllcnM9PT12b2lkIDA/eC5hbnRpYWxpYXM6ITAsYWxwaGE6eC5hbHBoYSxkZXB0aDp4LmRlcHRoLHN0ZW5jaWw6eC5zdGVuY2lsLGZyYW1lYnVmZmVyU2NhbGVGYWN0b3I6c307Zj1uZXcgWFJXZWJHTExheWVyKHIsZSwkKSxyLnVwZGF0ZVJlbmRlclN0YXRlKHtiYXNlTGF5ZXI6Zn0pLG09bmV3IE5lKGYuZnJhbWVidWZmZXJXaWR0aCxmLmZyYW1lYnVmZmVySGVpZ2h0LHtmb3JtYXQ6UmUsdHlwZTplaSxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9ZWxzZXtkPXguYW50aWFsaWFzO2xldCAkPW51bGwsbHQ9bnVsbCxkdD1udWxsO3guZGVwdGgmJihkdD14LnN0ZW5jaWw/MzUwNTY6MzMxOTAsJD14LnN0ZW5jaWw/VnI6T2ksbHQ9eC5zdGVuY2lsP0JyOm5vKTtsZXQgeHQ9e2NvbG9yRm9ybWF0OnQub3V0cHV0RW5jb2Rpbmc9PT0kdD8zNTkwNzozMjg1NixkZXB0aEZvcm1hdDpkdCxzY2FsZUZhY3RvcjpzfTt1PW5ldyBYUldlYkdMQmluZGluZyhyLGUpLGg9dS5jcmVhdGVQcm9qZWN0aW9uTGF5ZXIoeHQpLHIudXBkYXRlUmVuZGVyU3RhdGUoe2xheWVyczpbaF19KSxkP209bmV3IHNvKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCx7Zm9ybWF0OlJlLHR5cGU6ZWksZGVwdGhUZXh0dXJlOm5ldyB1byhoLnRleHR1cmVXaWR0aCxoLnRleHR1cmVIZWlnaHQsbHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsJCksc3RlbmNpbEJ1ZmZlcjp4LnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyx1c2VSZW5kZXJUb1RleHR1cmU6bCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSk6bT1uZXcgTmUoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UmUsdHlwZTplaSxkZXB0aFRleHR1cmU6bmV3IHVvKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxsdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwkKSxzdGVuY2lsQnVmZmVyOnguc3RlbmNpbCxpZ25vcmVEZXB0aDpoLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1tLmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSksbz15aWVsZCByLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShhKSxhdC5zZXRDb250ZXh0KHIpLGF0LnN0YXJ0KCksaS5pc1ByZXNlbnRpbmc9ITAsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fSl9O2Z1bmN0aW9uIFIoRyl7bGV0ICQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBsdD0wO2x0PHAubGVuZ3RoO2x0KyspYi5zZXQoJFtsdF0scFtsdF0pO2ZvcihsZXQgbHQ9MDtsdDxHLnJlbW92ZWQubGVuZ3RoO2x0Kyspe2xldCBkdD1HLnJlbW92ZWRbbHRdLHh0PWIuZ2V0KGR0KTt4dCYmKHh0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpkdH0pLGIuZGVsZXRlKGR0KSl9Zm9yKGxldCBsdD0wO2x0PEcuYWRkZWQubGVuZ3RoO2x0Kyspe2xldCBkdD1HLmFkZGVkW2x0XSx4dD1iLmdldChkdCk7eHQmJnh0LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImNvbm5lY3RlZCIsZGF0YTpkdH0pfX1sZXQgRD1uZXcgVCxGPW5ldyBUO2Z1bmN0aW9uIHooRywkLGx0KXtELnNldEZyb21NYXRyaXhQb3NpdGlvbigkLm1hdHJpeFdvcmxkKSxGLnNldEZyb21NYXRyaXhQb3NpdGlvbihsdC5tYXRyaXhXb3JsZCk7bGV0IGR0PUQuZGlzdGFuY2VUbyhGKSx4dD0kLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsaz1sdC5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEZ0PXh0WzE0XS8oeHRbMTBdLTEpLG10PXh0WzE0XS8oeHRbMTBdKzEpLFN0PSh4dFs5XSsxKS94dFs1XSxCPSh4dFs5XS0xKS94dFs1XSxzdD0oeHRbOF0tMSkveHRbMF0sbnQ9KGtbOF0rMSkva1swXSxDPUZ0KnN0LGo9RnQqbnQsSj1kdC8oLXN0K250KSxpdD1KKi1zdDskLm1hdHJpeFdvcmxkLmRlY29tcG9zZShHLnBvc2l0aW9uLEcucXVhdGVybmlvbixHLnNjYWxlKSxHLnRyYW5zbGF0ZVgoaXQpLEcudHJhbnNsYXRlWihKKSxHLm1hdHJpeFdvcmxkLmNvbXBvc2UoRy5wb3NpdGlvbixHLnF1YXRlcm5pb24sRy5zY2FsZSksRy5tYXRyaXhXb3JsZEludmVyc2UuY29weShHLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtsZXQgZXQ9RnQrSix2dD1tdCtKLGJ0PUMtaXQsSXQ9aisoZHQtaXQpLFp0PVN0Km10L3Z0KmV0LHF0PUIqbXQvdnQqZXQ7Ry5wcm9qZWN0aW9uTWF0cml4Lm1ha2VQZXJzcGVjdGl2ZShidCxJdCxadCxxdCxldCx2dCl9ZnVuY3Rpb24gTihHLCQpeyQ9PT1udWxsP0cubWF0cml4V29ybGQuY29weShHLm1hdHJpeCk6Ry5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKCQubWF0cml4V29ybGQsRy5tYXRyaXgpLEcubWF0cml4V29ybGRJbnZlcnNlLmNvcHkoRy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24oRyl7aWYocj09PW51bGwpcmV0dXJuO0EubmVhcj1TLm5lYXI9Xy5uZWFyPUcubmVhcixBLmZhcj1TLmZhcj1fLmZhcj1HLmZhciwoSCE9PUEubmVhcnx8dHQhPT1BLmZhcikmJihyLnVwZGF0ZVJlbmRlclN0YXRlKHtkZXB0aE5lYXI6QS5uZWFyLGRlcHRoRmFyOkEuZmFyfSksSD1BLm5lYXIsdHQ9QS5mYXIpO2xldCAkPUcucGFyZW50LGx0PUEuY2FtZXJhcztOKEEsJCk7Zm9yKGxldCB4dD0wO3h0PGx0Lmxlbmd0aDt4dCsrKU4obHRbeHRdLCQpO0EubWF0cml4V29ybGQuZGVjb21wb3NlKEEucG9zaXRpb24sQS5xdWF0ZXJuaW9uLEEuc2NhbGUpLEcucG9zaXRpb24uY29weShBLnBvc2l0aW9uKSxHLnF1YXRlcm5pb24uY29weShBLnF1YXRlcm5pb24pLEcuc2NhbGUuY29weShBLnNjYWxlKSxHLm1hdHJpeC5jb3B5KEEubWF0cml4KSxHLm1hdHJpeFdvcmxkLmNvcHkoQS5tYXRyaXhXb3JsZCk7bGV0IGR0PUcuY2hpbGRyZW47Zm9yKGxldCB4dD0wLGs9ZHQubGVuZ3RoO3h0PGs7eHQrKylkdFt4dF0udXBkYXRlTWF0cml4V29ybGQoITApO2x0Lmxlbmd0aD09PTI/eihBLF8sUyk6QS5wcm9qZWN0aW9uTWF0cml4LmNvcHkoXy5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gQX0sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtpZihoIT09bnVsbClyZXR1cm4gaC5maXhlZEZvdmVhdGlvbjtpZihmIT09bnVsbClyZXR1cm4gZi5maXhlZEZvdmVhdGlvbn0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24oRyl7aCE9PW51bGwmJihoLmZpeGVkRm92ZWF0aW9uPUcpLGYhPT1udWxsJiZmLmZpeGVkRm92ZWF0aW9uIT09dm9pZCAwJiYoZi5maXhlZEZvdmVhdGlvbj1HKX07bGV0IFY9bnVsbDtmdW5jdGlvbiBRKEcsJCl7aWYoYz0kLmdldFZpZXdlclBvc2UobyksZz0kLGMhPT1udWxsKXtsZXQgZHQ9Yy52aWV3cztmIT09bnVsbCYmKHQuc2V0UmVuZGVyVGFyZ2V0RnJhbWVidWZmZXIobSxmLmZyYW1lYnVmZmVyKSx0LnNldFJlbmRlclRhcmdldChtKSk7bGV0IHh0PSExO2R0Lmxlbmd0aCE9PUEuY2FtZXJhcy5sZW5ndGgmJihBLmNhbWVyYXMubGVuZ3RoPTAseHQ9ITApO2ZvcihsZXQgaz0wO2s8ZHQubGVuZ3RoO2srKyl7bGV0IEZ0PWR0W2tdLG10PW51bGw7aWYoZiE9PW51bGwpbXQ9Zi5nZXRWaWV3cG9ydChGdCk7ZWxzZXtsZXQgQj11LmdldFZpZXdTdWJJbWFnZShoLEZ0KTttdD1CLnZpZXdwb3J0LGs9PT0wJiYodC5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcyhtLEIuY29sb3JUZXh0dXJlLGguaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOkIuZGVwdGhTdGVuY2lsVGV4dHVyZSksdC5zZXRSZW5kZXJUYXJnZXQobSkpfWxldCBTdD1MW2tdO1N0Lm1hdHJpeC5mcm9tQXJyYXkoRnQudHJhbnNmb3JtLm1hdHJpeCksU3QucHJvamVjdGlvbk1hdHJpeC5mcm9tQXJyYXkoRnQucHJvamVjdGlvbk1hdHJpeCksU3Qudmlld3BvcnQuc2V0KG10LngsbXQueSxtdC53aWR0aCxtdC5oZWlnaHQpLGs9PT0wJiZBLm1hdHJpeC5jb3B5KFN0Lm1hdHJpeCkseHQ9PT0hMCYmQS5jYW1lcmFzLnB1c2goU3QpfX1sZXQgbHQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBkdD0wO2R0PHAubGVuZ3RoO2R0Kyspe2xldCB4dD1wW2R0XSxrPWx0W2R0XTt4dC51cGRhdGUoaywkLG8pfVYmJlYoRywkKSxnPW51bGx9bGV0IGF0PW5ldyBnMDthdC5zZXRBbmltYXRpb25Mb29wKFEpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihHKXtWPUd9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBERShuKXtmdW5jdGlvbiB0KG0scCl7bS5mb2dDb2xvci52YWx1ZS5jb3B5KHAuY29sb3IpLHAuaXNGb2c/KG0uZm9nTmVhci52YWx1ZT1wLm5lYXIsbS5mb2dGYXIudmFsdWU9cC5mYXIpOnAuaXNGb2dFeHAyJiYobS5mb2dEZW5zaXR5LnZhbHVlPXAuZGVuc2l0eSl9ZnVuY3Rpb24gZShtLHAsYixfLFMpe3AuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKG0scCk6cC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkobSxwKSxsKG0scCkpOnAuaXNNZXNoVG9vbk1hdGVyaWFsPyhpKG0scCksdShtLHApKTpwLmlzTWVzaFBob25nTWF0ZXJpYWw/KGkobSxwKSxjKG0scCkpOnAuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD8oaShtLHApLHAuaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD9mKG0scCxTKTpoKG0scCkpOnAuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KGkobSxwKSxkKG0scCkpOnAuaXNNZXNoRGVwdGhNYXRlcmlhbD8oaShtLHApLGcobSxwKSk6cC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKG0scCkseChtLHApKTpwLmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKG0scCksdihtLHApKTpwLmlzTGluZUJhc2ljTWF0ZXJpYWw/KHIobSxwKSxwLmlzTGluZURhc2hlZE1hdGVyaWFsJiZzKG0scCkpOnAuaXNQb2ludHNNYXRlcmlhbD9vKG0scCxiLF8pOnAuaXNTcHJpdGVNYXRlcmlhbD9hKG0scCk6cC5pc1NoYWRvd01hdGVyaWFsPyhtLmNvbG9yLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSk6cC5pc1NoYWRlck1hdGVyaWFsJiYocC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfWZ1bmN0aW9uIGkobSxwKXttLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5LHAuY29sb3ImJm0uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLHAuZW1pc3NpdmUmJm0uZW1pc3NpdmUudmFsdWUuY29weShwLmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcihwLmVtaXNzaXZlSW50ZW5zaXR5KSxwLm1hcCYmKG0ubWFwLnZhbHVlPXAubWFwKSxwLmFscGhhTWFwJiYobS5hbHBoYU1hcC52YWx1ZT1wLmFscGhhTWFwKSxwLnNwZWN1bGFyTWFwJiYobS5zcGVjdWxhck1hcC52YWx1ZT1wLnNwZWN1bGFyTWFwKSxwLmFscGhhVGVzdD4wJiYobS5hbHBoYVRlc3QudmFsdWU9cC5hbHBoYVRlc3QpO2xldCBiPW4uZ2V0KHApLmVudk1hcDtiJiYobS5lbnZNYXAudmFsdWU9YixtLmZsaXBFbnZNYXAudmFsdWU9Yi5pc0N1YmVUZXh0dXJlJiZiLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEsbS5yZWZsZWN0aXZpdHkudmFsdWU9cC5yZWZsZWN0aXZpdHksbS5pb3IudmFsdWU9cC5pb3IsbS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9cC5yZWZyYWN0aW9uUmF0aW8pLHAubGlnaHRNYXAmJihtLmxpZ2h0TWFwLnZhbHVlPXAubGlnaHRNYXAsbS5saWdodE1hcEludGVuc2l0eS52YWx1ZT1wLmxpZ2h0TWFwSW50ZW5zaXR5KSxwLmFvTWFwJiYobS5hb01hcC52YWx1ZT1wLmFvTWFwLG0uYW9NYXBJbnRlbnNpdHkudmFsdWU9cC5hb01hcEludGVuc2l0eSk7bGV0IF87cC5tYXA/Xz1wLm1hcDpwLnNwZWN1bGFyTWFwP189cC5zcGVjdWxhck1hcDpwLmRpc3BsYWNlbWVudE1hcD9fPXAuZGlzcGxhY2VtZW50TWFwOnAubm9ybWFsTWFwP189cC5ub3JtYWxNYXA6cC5idW1wTWFwP189cC5idW1wTWFwOnAucm91Z2huZXNzTWFwP189cC5yb3VnaG5lc3NNYXA6cC5tZXRhbG5lc3NNYXA/Xz1wLm1ldGFsbmVzc01hcDpwLmFscGhhTWFwP189cC5hbHBoYU1hcDpwLmVtaXNzaXZlTWFwP189cC5lbWlzc2l2ZU1hcDpwLmNsZWFyY29hdE1hcD9fPXAuY2xlYXJjb2F0TWFwOnAuY2xlYXJjb2F0Tm9ybWFsTWFwP189cC5jbGVhcmNvYXROb3JtYWxNYXA6cC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/Xz1wLmNsZWFyY29hdFJvdWdobmVzc01hcDpwLnNwZWN1bGFySW50ZW5zaXR5TWFwP189cC5zcGVjdWxhckludGVuc2l0eU1hcDpwLnNwZWN1bGFyQ29sb3JNYXA/Xz1wLnNwZWN1bGFyQ29sb3JNYXA6cC50cmFuc21pc3Npb25NYXA/Xz1wLnRyYW5zbWlzc2lvbk1hcDpwLnRoaWNrbmVzc01hcD9fPXAudGhpY2tuZXNzTWFwOnAuc2hlZW5Db2xvck1hcD9fPXAuc2hlZW5Db2xvck1hcDpwLnNoZWVuUm91Z2huZXNzTWFwJiYoXz1wLnNoZWVuUm91Z2huZXNzTWFwKSxfIT09dm9pZCAwJiYoXy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoXz1fLnRleHR1cmUpLF8ubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZfLnVwZGF0ZU1hdHJpeCgpLG0udXZUcmFuc2Zvcm0udmFsdWUuY29weShfLm1hdHJpeCkpO2xldCBTO3AuYW9NYXA/Uz1wLmFvTWFwOnAubGlnaHRNYXAmJihTPXAubGlnaHRNYXApLFMhPT12b2lkIDAmJihTLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihTPVMudGV4dHVyZSksUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCksbS51djJUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpfWZ1bmN0aW9uIHIobSxwKXttLmRpZmZ1c2UudmFsdWUuY29weShwLmNvbG9yKSxtLm9wYWNpdHkudmFsdWU9cC5vcGFjaXR5fWZ1bmN0aW9uIHMobSxwKXttLmRhc2hTaXplLnZhbHVlPXAuZGFzaFNpemUsbS50b3RhbFNpemUudmFsdWU9cC5kYXNoU2l6ZStwLmdhcFNpemUsbS5zY2FsZS52YWx1ZT1wLnNjYWxlfWZ1bmN0aW9uIG8obSxwLGIsXyl7bS5kaWZmdXNlLnZhbHVlLmNvcHkocC5jb2xvciksbS5vcGFjaXR5LnZhbHVlPXAub3BhY2l0eSxtLnNpemUudmFsdWU9cC5zaXplKmIsbS5zY2FsZS52YWx1ZT1fKi41LHAubWFwJiYobS5tYXAudmFsdWU9cC5tYXApLHAuYWxwaGFNYXAmJihtLmFscGhhTWFwLnZhbHVlPXAuYWxwaGFNYXApLHAuYWxwaGFUZXN0PjAmJihtLmFscGhhVGVzdC52YWx1ZT1wLmFscGhhVGVzdCk7bGV0IFM7cC5tYXA/Uz1wLm1hcDpwLmFscGhhTWFwJiYoUz1wLmFscGhhTWFwKSxTIT09dm9pZCAwJiYoUy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJlMudXBkYXRlTWF0cml4KCksbS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KFMubWF0cml4KSl9ZnVuY3Rpb24gYShtLHApe20uZGlmZnVzZS52YWx1ZS5jb3B5KHAuY29sb3IpLG0ub3BhY2l0eS52YWx1ZT1wLm9wYWNpdHksbS5yb3RhdGlvbi52YWx1ZT1wLnJvdGF0aW9uLHAubWFwJiYobS5tYXAudmFsdWU9cC5tYXApLHAuYWxwaGFNYXAmJihtLmFscGhhTWFwLnZhbHVlPXAuYWxwaGFNYXApLHAuYWxwaGFUZXN0PjAmJihtLmFscGhhVGVzdC52YWx1ZT1wLmFscGhhVGVzdCk7bGV0IGI7cC5tYXA/Yj1wLm1hcDpwLmFscGhhTWFwJiYoYj1wLmFscGhhTWFwKSxiIT09dm9pZCAwJiYoYi5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJmIudXBkYXRlTWF0cml4KCksbS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGIubWF0cml4KSl9ZnVuY3Rpb24gbChtLHApe3AuZW1pc3NpdmVNYXAmJihtLmVtaXNzaXZlTWFwLnZhbHVlPXAuZW1pc3NpdmVNYXApfWZ1bmN0aW9uIGMobSxwKXttLnNwZWN1bGFyLnZhbHVlLmNvcHkocC5zcGVjdWxhciksbS5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgocC5zaGluaW5lc3MsMWUtNCkscC5lbWlzc2l2ZU1hcCYmKG0uZW1pc3NpdmVNYXAudmFsdWU9cC5lbWlzc2l2ZU1hcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB1KG0scCl7cC5ncmFkaWVudE1hcCYmKG0uZ3JhZGllbnRNYXAudmFsdWU9cC5ncmFkaWVudE1hcCkscC5lbWlzc2l2ZU1hcCYmKG0uZW1pc3NpdmVNYXAudmFsdWU9cC5lbWlzc2l2ZU1hcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBoKG0scCl7bS5yb3VnaG5lc3MudmFsdWU9cC5yb3VnaG5lc3MsbS5tZXRhbG5lc3MudmFsdWU9cC5tZXRhbG5lc3MscC5yb3VnaG5lc3NNYXAmJihtLnJvdWdobmVzc01hcC52YWx1ZT1wLnJvdWdobmVzc01hcCkscC5tZXRhbG5lc3NNYXAmJihtLm1ldGFsbmVzc01hcC52YWx1ZT1wLm1ldGFsbmVzc01hcCkscC5lbWlzc2l2ZU1hcCYmKG0uZW1pc3NpdmVNYXAudmFsdWU9cC5lbWlzc2l2ZU1hcCkscC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldChwKS5lbnZNYXAmJihtLmVudk1hcEludGVuc2l0eS52YWx1ZT1wLmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gZihtLHAsYil7aChtLHApLG0uaW9yLnZhbHVlPXAuaW9yLHAuc2hlZW4+MCYmKG0uc2hlZW5Db2xvci52YWx1ZS5jb3B5KHAuc2hlZW5Db2xvcikubXVsdGlwbHlTY2FsYXIocC5zaGVlbiksbS5zaGVlblJvdWdobmVzcy52YWx1ZT1wLnNoZWVuUm91Z2huZXNzLHAuc2hlZW5Db2xvck1hcCYmKG0uc2hlZW5Db2xvck1hcC52YWx1ZT1wLnNoZWVuQ29sb3JNYXApLHAuc2hlZW5Sb3VnaG5lc3NNYXAmJihtLnNoZWVuUm91Z2huZXNzTWFwLnZhbHVlPXAuc2hlZW5Sb3VnaG5lc3NNYXApKSxwLmNsZWFyY29hdD4wJiYobS5jbGVhcmNvYXQudmFsdWU9cC5jbGVhcmNvYXQsbS5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9cC5jbGVhcmNvYXRSb3VnaG5lc3MscC5jbGVhcmNvYXRNYXAmJihtLmNsZWFyY29hdE1hcC52YWx1ZT1wLmNsZWFyY29hdE1hcCkscC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJihtLmNsZWFyY29hdFJvdWdobmVzc01hcC52YWx1ZT1wLmNsZWFyY29hdFJvdWdobmVzc01hcCkscC5jbGVhcmNvYXROb3JtYWxNYXAmJihtLmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkocC5jbGVhcmNvYXROb3JtYWxTY2FsZSksbS5jbGVhcmNvYXROb3JtYWxNYXAudmFsdWU9cC5jbGVhcmNvYXROb3JtYWxNYXAscC5zaWRlPT09aGUmJm0uY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSxwLnRyYW5zbWlzc2lvbj4wJiYobS50cmFuc21pc3Npb24udmFsdWU9cC50cmFuc21pc3Npb24sbS50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPWIudGV4dHVyZSxtLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChiLndpZHRoLGIuaGVpZ2h0KSxwLnRyYW5zbWlzc2lvbk1hcCYmKG0udHJhbnNtaXNzaW9uTWFwLnZhbHVlPXAudHJhbnNtaXNzaW9uTWFwKSxtLnRoaWNrbmVzcy52YWx1ZT1wLnRoaWNrbmVzcyxwLnRoaWNrbmVzc01hcCYmKG0udGhpY2tuZXNzTWFwLnZhbHVlPXAudGhpY2tuZXNzTWFwKSxtLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9cC5hdHRlbnVhdGlvbkRpc3RhbmNlLG0uYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHAuYXR0ZW51YXRpb25Db2xvcikpLG0uc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9cC5zcGVjdWxhckludGVuc2l0eSxtLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weShwLnNwZWN1bGFyQ29sb3IpLHAuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihtLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXAuc3BlY3VsYXJJbnRlbnNpdHlNYXApLHAuc3BlY3VsYXJDb2xvck1hcCYmKG0uc3BlY3VsYXJDb2xvck1hcC52YWx1ZT1wLnNwZWN1bGFyQ29sb3JNYXApfWZ1bmN0aW9uIGQobSxwKXtwLm1hdGNhcCYmKG0ubWF0Y2FwLnZhbHVlPXAubWF0Y2FwKSxwLmJ1bXBNYXAmJihtLmJ1bXBNYXAudmFsdWU9cC5idW1wTWFwLG0uYnVtcFNjYWxlLnZhbHVlPXAuYnVtcFNjYWxlLHAuc2lkZT09PWhlJiYobS5idW1wU2NhbGUudmFsdWUqPS0xKSkscC5ub3JtYWxNYXAmJihtLm5vcm1hbE1hcC52YWx1ZT1wLm5vcm1hbE1hcCxtLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkocC5ub3JtYWxTY2FsZSkscC5zaWRlPT09aGUmJm0ubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHAuZGlzcGxhY2VtZW50TWFwJiYobS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9cC5kaXNwbGFjZW1lbnRNYXAsbS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1wLmRpc3BsYWNlbWVudFNjYWxlLG0uZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1wLmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGcobSxwKXtwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB4KG0scCl7cC5kaXNwbGFjZW1lbnRNYXAmJihtLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1wLmRpc3BsYWNlbWVudE1hcCxtLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXAuZGlzcGxhY2VtZW50U2NhbGUsbS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXAuZGlzcGxhY2VtZW50QmlhcyksbS5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KHAucmVmZXJlbmNlUG9zaXRpb24pLG0ubmVhckRpc3RhbmNlLnZhbHVlPXAubmVhckRpc3RhbmNlLG0uZmFyRGlzdGFuY2UudmFsdWU9cC5mYXJEaXN0YW5jZX1mdW5jdGlvbiB2KG0scCl7cC5idW1wTWFwJiYobS5idW1wTWFwLnZhbHVlPXAuYnVtcE1hcCxtLmJ1bXBTY2FsZS52YWx1ZT1wLmJ1bXBTY2FsZSxwLnNpZGU9PT1oZSYmKG0uYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHAubm9ybWFsTWFwJiYobS5ub3JtYWxNYXAudmFsdWU9cC5ub3JtYWxNYXAsbS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHAubm9ybWFsU2NhbGUpLHAuc2lkZT09PWhlJiZtLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxwLmRpc3BsYWNlbWVudE1hcCYmKG0uZGlzcGxhY2VtZW50TWFwLnZhbHVlPXAuZGlzcGxhY2VtZW50TWFwLG0uZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9cC5kaXNwbGFjZW1lbnRTY2FsZSxtLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9cC5kaXNwbGFjZW1lbnRCaWFzKX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOnQscmVmcmVzaE1hdGVyaWFsVW5pZm9ybXM6ZX19ZnVuY3Rpb24gSUUoKXtsZXQgbj1ybygiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59ZnVuY3Rpb24gVnQobj17fSl7bGV0IHQ9bi5jYW52YXMhPT12b2lkIDA/bi5jYW52YXM6SUUoKSxlPW4uY29udGV4dCE9PXZvaWQgMD9uLmNvbnRleHQ6bnVsbCxpPW4uYWxwaGEhPT12b2lkIDA/bi5hbHBoYTohMSxyPW4uZGVwdGghPT12b2lkIDA/bi5kZXB0aDohMCxzPW4uc3RlbmNpbCE9PXZvaWQgMD9uLnN0ZW5jaWw6ITAsbz1uLmFudGlhbGlhcyE9PXZvaWQgMD9uLmFudGlhbGlhczohMSxhPW4ucHJlbXVsdGlwbGllZEFscGhhIT09dm9pZCAwP24ucHJlbXVsdGlwbGllZEFscGhhOiEwLGw9bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIhPT12b2lkIDA/bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITEsYz1uLnBvd2VyUHJlZmVyZW5jZSE9PXZvaWQgMD9uLnBvd2VyUHJlZmVyZW5jZToiZGVmYXVsdCIsdT1uLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQhPT12b2lkIDA/bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLGg9bnVsbCxmPW51bGwsZD1bXSxnPVtdO3RoaXMuZG9tRWxlbWVudD10LHRoaXMuZGVidWc9e2NoZWNrU2hhZGVyRXJyb3JzOiEwfSx0aGlzLmF1dG9DbGVhcj0hMCx0aGlzLmF1dG9DbGVhckNvbG9yPSEwLHRoaXMuYXV0b0NsZWFyRGVwdGg9ITAsdGhpcy5hdXRvQ2xlYXJTdGVuY2lsPSEwLHRoaXMuc29ydE9iamVjdHM9ITAsdGhpcy5jbGlwcGluZ1BsYW5lcz1bXSx0aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkPSExLHRoaXMub3V0cHV0RW5jb2Rpbmc9cmksdGhpcy5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz0hMSx0aGlzLnRvbmVNYXBwaW5nPXRpLHRoaXMudG9uZU1hcHBpbmdFeHBvc3VyZT0xO2xldCB4PXRoaXMsdj0hMSxtPTAscD0wLGI9bnVsbCxfPS0xLFM9bnVsbCxMPW5ldyBXdCxBPW5ldyBXdCxIPW51bGwsdHQ9dC53aWR0aCxYPXQuaGVpZ2h0LHk9MSxSPW51bGwsRD1udWxsLEY9bmV3IFd0KDAsMCx0dCxYKSx6PW5ldyBXdCgwLDAsdHQsWCksTj0hMSxWPW5ldyBxcixRPSExLGF0PSExLEc9bnVsbCwkPW5ldyB3dCxsdD1uZXcgVCxkdD17YmFja2dyb3VuZDpudWxsLGZvZzpudWxsLGVudmlyb25tZW50Om51bGwsb3ZlcnJpZGVNYXRlcmlhbDpudWxsLGlzU2NlbmU6ITB9O2Z1bmN0aW9uIHh0KCl7cmV0dXJuIGI9PT1udWxsP3k6MX1sZXQgaz1lO2Z1bmN0aW9uIEZ0KE0sSSl7Zm9yKGxldCBPPTA7TzxNLmxlbmd0aDtPKyspe2xldCBVPU1bT10sWj10LmdldENvbnRleHQoVSxJKTtpZihaIT09bnVsbClyZXR1cm4gWn1yZXR1cm4gbnVsbH10cnl7bGV0IE09e2FscGhhOiEwLGRlcHRoOnIsc3RlbmNpbDpzLGFudGlhbGlhczpvLHByZW11bHRpcGxpZWRBbHBoYTphLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpsLHBvd2VyUHJlZmVyZW5jZTpjLGZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6dX07aWYoInNldEF0dHJpYnV0ZSJpbiB0JiZ0LnNldEF0dHJpYnV0ZSgiZGF0YS1lbmdpbmUiLGB0aHJlZS5qcyByJHskaH1gKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEF0LCExKSx0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixQLCExKSxrPT09bnVsbCl7bGV0IEk9WyJ3ZWJnbDIiLCJ3ZWJnbCIsImV4cGVyaW1lbnRhbC13ZWJnbCJdO2lmKHguaXNXZWJHTDFSZW5kZXJlcj09PSEwJiZJLnNoaWZ0KCksaz1GdChJLE0pLGs9PT1udWxsKXRocm93IEZ0KEkpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9ay5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQ9PT12b2lkIDAmJihrLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdD1mdW5jdGlvbigpe3JldHVybntyYW5nZU1pbjoxLHJhbmdlTWF4OjEscHJlY2lzaW9uOjF9fSl9Y2F0Y2goTSl7dGhyb3cgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlcjogIitNLm1lc3NhZ2UpLE19bGV0IG10LFN0LEIsc3QsbnQsQyxqLEosaXQsZXQsdnQsYnQsSXQsWnQscXQsRSx3LHEscnQsZ3QsVyxfdCx5dDtmdW5jdGlvbiB1dCgpe210PW5ldyBlUyhrKSxTdD1uZXcgSjEoayxtdCxuKSxtdC5pbml0KFN0KSxfdD1uZXcgTEUoayxtdCxTdCksQj1uZXcgQ0UoayxtdCxTdCksc3Q9bmV3IHJTKGspLG50PW5ldyB4RSxDPW5ldyBSRShrLG10LEIsbnQsU3QsX3Qsc3QpLGo9bmV3IEsxKHgpLEo9bmV3IHRTKHgpLGl0PW5ldyB2TShrLFN0KSx5dD1uZXcgWTEoayxtdCxpdCxTdCksZXQ9bmV3IG5TKGssaXQsc3QseXQpLHZ0PW5ldyBsUyhrLGV0LGl0LHN0KSxydD1uZXcgYVMoayxTdCxDKSxFPW5ldyAkMShudCksYnQ9bmV3IGdFKHgsaixKLG10LFN0LHl0LEUpLEl0PW5ldyBERShudCksWnQ9bmV3IHZFLHF0PW5ldyBFRShtdCxTdCkscT1uZXcgWDEoeCxqLEIsdnQsaSxhKSx3PW5ldyBUMCh4LHZ0LFN0KSxndD1uZXcgWjEoayxtdCxzdCxTdCksVz1uZXcgaVMoayxtdCxzdCxTdCksc3QucHJvZ3JhbXM9YnQucHJvZ3JhbXMseC5jYXBhYmlsaXRpZXM9U3QseC5leHRlbnNpb25zPW10LHgucHJvcGVydGllcz1udCx4LnJlbmRlckxpc3RzPVp0LHguc2hhZG93TWFwPXcseC5zdGF0ZT1CLHguaW5mbz1zdH11dCgpO2xldCBjdD1uZXcgWnUoeCxrKTt0aGlzLnhyPWN0LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBrfSx0aGlzLmdldENvbnRleHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGsuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKX0sdGhpcy5mb3JjZUNvbnRleHRMb3NzPWZ1bmN0aW9uKCl7bGV0IE09bXQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtNJiZNLmxvc2VDb250ZXh0KCl9LHRoaXMuZm9yY2VDb250ZXh0UmVzdG9yZT1mdW5jdGlvbigpe2xldCBNPW10LmdldCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7TSYmTS5yZXN0b3JlQ29udGV4dCgpfSx0aGlzLmdldFBpeGVsUmF0aW89ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5zZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKE0pe00hPT12b2lkIDAmJih5PU0sdGhpcy5zZXRTaXplKHR0LFgsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKE0pe3JldHVybiBNLnNldCh0dCxYKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKE0sSSxPKXtpZihjdC5pc1ByZXNlbnRpbmcpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuJ3QgY2hhbmdlIHNpemUgd2hpbGUgVlIgZGV2aWNlIGlzIHByZXNlbnRpbmcuIik7cmV0dXJufXR0PU0sWD1JLHQud2lkdGg9TWF0aC5mbG9vcihNKnkpLHQuaGVpZ2h0PU1hdGguZmxvb3IoSSp5KSxPIT09ITEmJih0LnN0eWxlLndpZHRoPU0rInB4Iix0LnN0eWxlLmhlaWdodD1JKyJweCIpLHRoaXMuc2V0Vmlld3BvcnQoMCwwLE0sSSl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uc2V0KHR0KnksWCp5KS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKE0sSSxPKXt0dD1NLFg9SSx5PU8sdC53aWR0aD1NYXRoLmZsb29yKE0qTyksdC5oZWlnaHQ9TWF0aC5mbG9vcihJKk8pLHRoaXMuc2V0Vmlld3BvcnQoMCwwLE0sSSl9LHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0PWZ1bmN0aW9uKE0pe3JldHVybiBNLmNvcHkoTCl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uY29weShGKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihNLEksTyxVKXtNLmlzVmVjdG9yND9GLnNldChNLngsTS55LE0ueixNLncpOkYuc2V0KE0sSSxPLFUpLEIudmlld3BvcnQoTC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKHkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uY29weSh6KX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKE0sSSxPLFUpe00uaXNWZWN0b3I0P3ouc2V0KE0ueCxNLnksTS56LE0udyk6ei5zZXQoTSxJLE8sVSksQi5zY2lzc29yKEEuY29weSh6KS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBOfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKE0pe0Iuc2V0U2Npc3NvclRlc3QoTj1NKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKE0pe1I9TX0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oTSl7RD1NfSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oTSl7cmV0dXJuIE0uY29weShxLmdldENsZWFyQ29sb3IoKSl9LHRoaXMuc2V0Q2xlYXJDb2xvcj1mdW5jdGlvbigpe3Euc2V0Q2xlYXJDb2xvci5hcHBseShxLGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBxLmdldENsZWFyQWxwaGEoKX0sdGhpcy5zZXRDbGVhckFscGhhPWZ1bmN0aW9uKCl7cS5zZXRDbGVhckFscGhhLmFwcGx5KHEsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihNLEksTyl7bGV0IFU9MDsoTT09PXZvaWQgMHx8TSkmJihVfD0xNjM4NCksKEk9PT12b2lkIDB8fEkpJiYoVXw9MjU2KSwoTz09PXZvaWQgMHx8TykmJihVfD0xMDI0KSxrLmNsZWFyKFUpfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsQXQsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLFAsITEpLFp0LmRpc3Bvc2UoKSxxdC5kaXNwb3NlKCksbnQuZGlzcG9zZSgpLGouZGlzcG9zZSgpLEouZGlzcG9zZSgpLHZ0LmRpc3Bvc2UoKSx5dC5kaXNwb3NlKCksYnQuZGlzcG9zZSgpLGN0LmRpc3Bvc2UoKSxjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLER0KSxjdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixqdCksRyYmKEcuZGlzcG9zZSgpLEc9bnVsbCksemUuc3RvcCgpfTtmdW5jdGlvbiBBdChNKXtNLnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSx2PSEwfWZ1bmN0aW9uIFAoKXtjb25zb2xlLmxvZygiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ29udGV4dCBSZXN0b3JlZC4iKSx2PSExO2xldCBNPXN0LmF1dG9SZXNldCxJPXcuZW5hYmxlZCxPPXcuYXV0b1VwZGF0ZSxVPXcubmVlZHNVcGRhdGUsWj13LnR5cGU7dXQoKSxzdC5hdXRvUmVzZXQ9TSx3LmVuYWJsZWQ9SSx3LmF1dG9VcGRhdGU9Tyx3Lm5lZWRzVXBkYXRlPVUsdy50eXBlPVp9ZnVuY3Rpb24gcHQoTSl7bGV0IEk9TS50YXJnZXQ7SS5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixwdCksaHQoSSl9ZnVuY3Rpb24gaHQoTSl7RXQoTSksbnQucmVtb3ZlKE0pfWZ1bmN0aW9uIEV0KE0pe2xldCBJPW50LmdldChNKS5wcm9ncmFtcztJIT09dm9pZCAwJiYoSS5mb3JFYWNoKGZ1bmN0aW9uKE8pe2J0LnJlbGVhc2VQcm9ncmFtKE8pfSksTS5pc1NoYWRlck1hdGVyaWFsJiZidC5yZWxlYXNlU2hhZGVyQ2FjaGUoTSkpfXRoaXMucmVuZGVyQnVmZmVyRGlyZWN0PWZ1bmN0aW9uKE0sSSxPLFUsWixUdCl7ST09PW51bGwmJihJPWR0KTtsZXQgQ3Q9Wi5pc01lc2gmJloubWF0cml4V29ybGQuZGV0ZXJtaW5hbnQoKTwwLEx0PUIwKE0sSSxPLFUsWik7Qi5zZXRNYXRlcmlhbChVLEN0KTtsZXQgUnQ9Ty5pbmRleCxHdD1PLmF0dHJpYnV0ZXMucG9zaXRpb247aWYoUnQ9PT1udWxsKXtpZihHdD09PXZvaWQgMHx8R3QuY291bnQ9PT0wKXJldHVybn1lbHNlIGlmKFJ0LmNvdW50PT09MClyZXR1cm47bGV0IHp0PTE7VS53aXJlZnJhbWU9PT0hMCYmKFJ0PWV0LmdldFdpcmVmcmFtZUF0dHJpYnV0ZShPKSx6dD0yKSx5dC5zZXR1cChaLFUsTHQsTyxSdCk7bGV0IFV0LGllPWd0O1J0IT09bnVsbCYmKFV0PWl0LmdldChSdCksaWU9VyxpZS5zZXRJbmRleChVdCkpO2xldCBmaT1SdCE9PW51bGw/UnQuY291bnQ6R3QuY291bnQsWmk9Ty5kcmF3UmFuZ2Uuc3RhcnQqenQsT3Q9Ty5kcmF3UmFuZ2UuY291bnQqenQsbm49VHQhPT1udWxsP1R0LnN0YXJ0Knp0OjAsbGU9VHQhPT1udWxsP1R0LmNvdW50Knp0OjEvMCxybj1NYXRoLm1heChaaSxubiksSW89TWF0aC5taW4oZmksWmkrT3Qsbm4rbGUpLTEsc249TWF0aC5tYXgoMCxJby1ybisxKTtpZihzbiE9PTApe2lmKFouaXNNZXNoKVUud2lyZWZyYW1lPT09ITA/KEIuc2V0TGluZVdpZHRoKFUud2lyZWZyYW1lTGluZXdpZHRoKnh0KCkpLGllLnNldE1vZGUoMSkpOmllLnNldE1vZGUoNCk7ZWxzZSBpZihaLmlzTGluZSl7bGV0IHZuPVUubGluZXdpZHRoO3ZuPT09dm9pZCAwJiYodm49MSksQi5zZXRMaW5lV2lkdGgodm4qeHQoKSksWi5pc0xpbmVTZWdtZW50cz9pZS5zZXRNb2RlKDEpOlouaXNMaW5lTG9vcD9pZS5zZXRNb2RlKDIpOmllLnNldE1vZGUoMyl9ZWxzZSBaLmlzUG9pbnRzP2llLnNldE1vZGUoMCk6Wi5pc1Nwcml0ZSYmaWUuc2V0TW9kZSg0KTtpZihaLmlzSW5zdGFuY2VkTWVzaClpZS5yZW5kZXJJbnN0YW5jZXMocm4sc24sWi5jb3VudCk7ZWxzZSBpZihPLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkpe2xldCB2bj1NYXRoLm1pbihPLmluc3RhbmNlQ291bnQsTy5fbWF4SW5zdGFuY2VDb3VudCk7aWUucmVuZGVySW5zdGFuY2VzKHJuLHNuLHZuKX1lbHNlIGllLnJlbmRlcihybixzbil9fSx0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oTSxJKXtmPXF0LmdldChNKSxmLmluaXQoKSxnLnB1c2goZiksTS50cmF2ZXJzZVZpc2libGUoZnVuY3Rpb24oTyl7Ty5pc0xpZ2h0JiZPLmxheWVycy50ZXN0KEkubGF5ZXJzKSYmKGYucHVzaExpZ2h0KE8pLE8uY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KE8pKX0pLGYuc2V0dXBMaWdodHMoeC5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyksTS50cmF2ZXJzZShmdW5jdGlvbihPKXtsZXQgVT1PLm1hdGVyaWFsO2lmKFUpaWYoQXJyYXkuaXNBcnJheShVKSlmb3IobGV0IFo9MDtaPFUubGVuZ3RoO1orKyl7bGV0IFR0PVVbWl07T2woVHQsTSxPKX1lbHNlIE9sKFUsTSxPKX0pLGcucG9wKCksZj1udWxsfTtsZXQgWT1udWxsO2Z1bmN0aW9uIE10KE0pe1kmJlkoTSl9ZnVuY3Rpb24gRHQoKXt6ZS5zdG9wKCl9ZnVuY3Rpb24ganQoKXt6ZS5zdGFydCgpfWxldCB6ZT1uZXcgZzA7emUuc2V0QW5pbWF0aW9uTG9vcChNdCksdHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJnplLnNldENvbnRleHQod2luZG93KSx0aGlzLnNldEFuaW1hdGlvbkxvb3A9ZnVuY3Rpb24oTSl7WT1NLGN0LnNldEFuaW1hdGlvbkxvb3AoTSksTT09PW51bGw/emUuc3RvcCgpOnplLnN0YXJ0KCl9LGN0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsRHQpLGN0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLGp0KSx0aGlzLnJlbmRlcj1mdW5jdGlvbihNLEkpe2lmKEkhPT12b2lkIDAmJkkuaXNDYW1lcmEhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpO3JldHVybn1pZih2PT09ITApcmV0dXJuO00uYXV0b1VwZGF0ZT09PSEwJiZNLnVwZGF0ZU1hdHJpeFdvcmxkKCksSS5wYXJlbnQ9PT1udWxsJiZJLnVwZGF0ZU1hdHJpeFdvcmxkKCksY3QuZW5hYmxlZD09PSEwJiZjdC5pc1ByZXNlbnRpbmc9PT0hMCYmKGN0LmNhbWVyYUF1dG9VcGRhdGU9PT0hMCYmY3QudXBkYXRlQ2FtZXJhKEkpLEk9Y3QuZ2V0Q2FtZXJhKCkpLE0uaXNTY2VuZT09PSEwJiZNLm9uQmVmb3JlUmVuZGVyKHgsTSxJLGIpLGY9cXQuZ2V0KE0sZy5sZW5ndGgpLGYuaW5pdCgpLGcucHVzaChmKSwkLm11bHRpcGx5TWF0cmljZXMoSS5wcm9qZWN0aW9uTWF0cml4LEkubWF0cml4V29ybGRJbnZlcnNlKSxWLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCQpLGF0PXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsUT1FLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxhdCxJKSxoPVp0LmdldChNLGQubGVuZ3RoKSxoLmluaXQoKSxkLnB1c2goaCksbmUoTSxJLDAseC5zb3J0T2JqZWN0cyksaC5maW5pc2goKSx4LnNvcnRPYmplY3RzPT09ITAmJmguc29ydChSLEQpLFE9PT0hMCYmRS5iZWdpblNoYWRvd3MoKTtsZXQgTz1mLnN0YXRlLnNoYWRvd3NBcnJheTtpZih3LnJlbmRlcihPLE0sSSksUT09PSEwJiZFLmVuZFNoYWRvd3MoKSx0aGlzLmluZm8uYXV0b1Jlc2V0PT09ITAmJnRoaXMuaW5mby5yZXNldCgpLHEucmVuZGVyKGgsTSksZi5zZXR1cExpZ2h0cyh4LnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxJLmlzQXJyYXlDYW1lcmEpe2xldCBVPUkuY2FtZXJhcztmb3IobGV0IFo9MCxUdD1VLmxlbmd0aDtaPFR0O1orKyl7bGV0IEN0PVVbWl07ZW4oaCxNLEN0LEN0LnZpZXdwb3J0KX19ZWxzZSBlbihoLE0sSSk7YiE9PW51bGwmJihDLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KGIpLEMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKGIpKSxNLmlzU2NlbmU9PT0hMCYmTS5vbkFmdGVyUmVuZGVyKHgsTSxJKSxCLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQi5idWZmZXJzLmRlcHRoLnNldE1hc2soITApLEIuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSxCLnNldFBvbHlnb25PZmZzZXQoITEpLHl0LnJlc2V0RGVmYXVsdFN0YXRlKCksXz0tMSxTPW51bGwsZy5wb3AoKSxnLmxlbmd0aD4wP2Y9Z1tnLmxlbmd0aC0xXTpmPW51bGwsZC5wb3AoKSxkLmxlbmd0aD4wP2g9ZFtkLmxlbmd0aC0xXTpoPW51bGx9O2Z1bmN0aW9uIG5lKE0sSSxPLFUpe2lmKE0udmlzaWJsZT09PSExKXJldHVybjtpZihNLmxheWVycy50ZXN0KEkubGF5ZXJzKSl7aWYoTS5pc0dyb3VwKU89TS5yZW5kZXJPcmRlcjtlbHNlIGlmKE0uaXNMT0QpTS5hdXRvVXBkYXRlPT09ITAmJk0udXBkYXRlKEkpO2Vsc2UgaWYoTS5pc0xpZ2h0KWYucHVzaExpZ2h0KE0pLE0uY2FzdFNoYWRvdyYmZi5wdXNoU2hhZG93KE0pO2Vsc2UgaWYoTS5pc1Nwcml0ZSl7aWYoIU0uZnJ1c3R1bUN1bGxlZHx8Vi5pbnRlcnNlY3RzU3ByaXRlKE0pKXtVJiZsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KCQpO2xldCBDdD12dC51cGRhdGUoTSksTHQ9TS5tYXRlcmlhbDtMdC52aXNpYmxlJiZoLnB1c2goTSxDdCxMdCxPLGx0LnosbnVsbCl9fWVsc2UgaWYoKE0uaXNNZXNofHxNLmlzTGluZXx8TS5pc1BvaW50cykmJihNLmlzU2tpbm5lZE1lc2gmJk0uc2tlbGV0b24uZnJhbWUhPT1zdC5yZW5kZXIuZnJhbWUmJihNLnNrZWxldG9uLnVwZGF0ZSgpLE0uc2tlbGV0b24uZnJhbWU9c3QucmVuZGVyLmZyYW1lKSwhTS5mcnVzdHVtQ3VsbGVkfHxWLmludGVyc2VjdHNPYmplY3QoTSkpKXtVJiZsdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oTS5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KCQpO2xldCBDdD12dC51cGRhdGUoTSksTHQ9TS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KEx0KSl7bGV0IFJ0PUN0Lmdyb3Vwcztmb3IobGV0IEd0PTAsenQ9UnQubGVuZ3RoO0d0PHp0O0d0Kyspe2xldCBVdD1SdFtHdF0saWU9THRbVXQubWF0ZXJpYWxJbmRleF07aWUmJmllLnZpc2libGUmJmgucHVzaChNLEN0LGllLE8sbHQueixVdCl9fWVsc2UgTHQudmlzaWJsZSYmaC5wdXNoKE0sQ3QsTHQsTyxsdC56LG51bGwpfX1sZXQgVHQ9TS5jaGlsZHJlbjtmb3IobGV0IEN0PTAsTHQ9VHQubGVuZ3RoO0N0PEx0O0N0KyspbmUoVHRbQ3RdLEksTyxVKX1mdW5jdGlvbiBlbihNLEksTyxVKXtsZXQgWj1NLm9wYXF1ZSxUdD1NLnRyYW5zbWlzc2l2ZSxDdD1NLnRyYW5zcGFyZW50O2Yuc2V0dXBMaWdodHNWaWV3KE8pLFR0Lmxlbmd0aD4wJiZ5bihaLEksTyksVSYmQi52aWV3cG9ydChMLmNvcHkoVSkpLFoubGVuZ3RoPjAmJkRvKFosSSxPKSxUdC5sZW5ndGg+MCYmRG8oVHQsSSxPKSxDdC5sZW5ndGg+MCYmRG8oQ3QsSSxPKX1mdW5jdGlvbiB5bihNLEksTyl7aWYoRz09PW51bGwpe2xldCBDdD1vPT09ITAmJlN0LmlzV2ViR0wyPT09ITA/c286TmU7Rz1uZXcgQ3QoMTAyNCwxMDI0LHtnZW5lcmF0ZU1pcG1hcHM6ITAsdHlwZTpfdC5jb252ZXJ0KFVyKSE9PW51bGw/VXI6ZWksbWluRmlsdGVyOkxsLG1hZ0ZpbHRlcjpmZSx3cmFwUzpWZSx3cmFwVDpWZSx1c2VSZW5kZXJUb1RleHR1cmU6bXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0pfWxldCBVPXguZ2V0UmVuZGVyVGFyZ2V0KCk7eC5zZXRSZW5kZXJUYXJnZXQoRykseC5jbGVhcigpO2xldCBaPXgudG9uZU1hcHBpbmc7eC50b25lTWFwcGluZz10aSxEbyhNLEksTykseC50b25lTWFwcGluZz1aLEMudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoRyksQy51cGRhdGVSZW5kZXJUYXJnZXRNaXBtYXAoRykseC5zZXRSZW5kZXJUYXJnZXQoVSl9ZnVuY3Rpb24gRG8oTSxJLE8pe2xldCBVPUkuaXNTY2VuZT09PSEwP0kub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2ZvcihsZXQgWj0wLFR0PU0ubGVuZ3RoO1o8VHQ7WisrKXtsZXQgQ3Q9TVtaXSxMdD1DdC5vYmplY3QsUnQ9Q3QuZ2VvbWV0cnksR3Q9VT09PW51bGw/Q3QubWF0ZXJpYWw6VSx6dD1DdC5ncm91cDtMdC5sYXllcnMudGVzdChPLmxheWVycykmJlUwKEx0LEksTyxSdCxHdCx6dCl9fWZ1bmN0aW9uIFUwKE0sSSxPLFUsWixUdCl7TS5vbkJlZm9yZVJlbmRlcih4LEksTyxVLFosVHQpLE0ubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoTy5tYXRyaXhXb3JsZEludmVyc2UsTS5tYXRyaXhXb3JsZCksTS5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KE0ubW9kZWxWaWV3TWF0cml4KSxaLm9uQmVmb3JlUmVuZGVyKHgsSSxPLFUsTSxUdCksWi50cmFuc3BhcmVudD09PSEwJiZaLnNpZGU9PT1Icj8oWi5zaWRlPWhlLFoubmVlZHNVcGRhdGU9ITAseC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxaLnNpZGU9ZW8sWi5uZWVkc1VwZGF0ZT0hMCx4LnJlbmRlckJ1ZmZlckRpcmVjdChPLEksVSxaLE0sVHQpLFouc2lkZT1Icik6eC5yZW5kZXJCdWZmZXJEaXJlY3QoTyxJLFUsWixNLFR0KSxNLm9uQWZ0ZXJSZW5kZXIoeCxJLE8sVSxaLFR0KX1mdW5jdGlvbiBPbChNLEksTyl7SS5pc1NjZW5lIT09ITAmJihJPWR0KTtsZXQgVT1udC5nZXQoTSksWj1mLnN0YXRlLmxpZ2h0cyxUdD1mLnN0YXRlLnNoYWRvd3NBcnJheSxDdD1aLnN0YXRlLnZlcnNpb24sTHQ9YnQuZ2V0UGFyYW1ldGVycyhNLFouc3RhdGUsVHQsSSxPKSxSdD1idC5nZXRQcm9ncmFtQ2FjaGVLZXkoTHQpLEd0PVUucHJvZ3JhbXM7VS5lbnZpcm9ubWVudD1NLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SS5lbnZpcm9ubWVudDpudWxsLFUuZm9nPUkuZm9nLFUuZW52TWFwPShNLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/SjpqKS5nZXQoTS5lbnZNYXB8fFUuZW52aXJvbm1lbnQpLEd0PT09dm9pZCAwJiYoTS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixwdCksR3Q9bmV3IE1hcCxVLnByb2dyYW1zPUd0KTtsZXQgenQ9R3QuZ2V0KFJ0KTtpZih6dCE9PXZvaWQgMCl7aWYoVS5jdXJyZW50UHJvZ3JhbT09PXp0JiZVLmxpZ2h0c1N0YXRlVmVyc2lvbj09PUN0KXJldHVybiBvZihNLEx0KSx6dH1lbHNlIEx0LnVuaWZvcm1zPWJ0LmdldFVuaWZvcm1zKE0pLE0ub25CdWlsZChPLEx0LHgpLE0ub25CZWZvcmVDb21waWxlKEx0LHgpLHp0PWJ0LmFjcXVpcmVQcm9ncmFtKEx0LFJ0KSxHdC5zZXQoUnQsenQpLFUudW5pZm9ybXM9THQudW5pZm9ybXM7bGV0IFV0PVUudW5pZm9ybXM7KCFNLmlzU2hhZGVyTWF0ZXJpYWwmJiFNLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fE0uY2xpcHBpbmc9PT0hMCkmJihVdC5jbGlwcGluZ1BsYW5lcz1FLnVuaWZvcm0pLG9mKE0sTHQpLFUubmVlZHNMaWdodHM9azAoTSksVS5saWdodHNTdGF0ZVZlcnNpb249Q3QsVS5uZWVkc0xpZ2h0cyYmKFV0LmFtYmllbnRMaWdodENvbG9yLnZhbHVlPVouc3RhdGUuYW1iaWVudCxVdC5saWdodFByb2JlLnZhbHVlPVouc3RhdGUucHJvYmUsVXQuZGlyZWN0aW9uYWxMaWdodHMudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbCxVdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1aLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LFV0LnNwb3RMaWdodHMudmFsdWU9Wi5zdGF0ZS5zcG90LFV0LnNwb3RMaWdodFNoYWRvd3MudmFsdWU9Wi5zdGF0ZS5zcG90U2hhZG93LFV0LnJlY3RBcmVhTGlnaHRzLnZhbHVlPVouc3RhdGUucmVjdEFyZWEsVXQubHRjXzEudmFsdWU9Wi5zdGF0ZS5yZWN0QXJlYUxUQzEsVXQubHRjXzIudmFsdWU9Wi5zdGF0ZS5yZWN0QXJlYUxUQzIsVXQucG9pbnRMaWdodHMudmFsdWU9Wi5zdGF0ZS5wb2ludCxVdC5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93LFV0LmhlbWlzcGhlcmVMaWdodHMudmFsdWU9Wi5zdGF0ZS5oZW1pLFV0LmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPVouc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsVXQuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9Wi5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeCxVdC5zcG90U2hhZG93TWFwLnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvd01hcCxVdC5zcG90U2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxVdC5wb2ludFNoYWRvd01hcC52YWx1ZT1aLnN0YXRlLnBvaW50U2hhZG93TWFwLFV0LnBvaW50U2hhZG93TWF0cml4LnZhbHVlPVouc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO2xldCBpZT16dC5nZXRVbmlmb3JtcygpLGZpPWlpLnNlcVdpdGhWYWx1ZShpZS5zZXEsVXQpO3JldHVybiBVLmN1cnJlbnRQcm9ncmFtPXp0LFUudW5pZm9ybXNMaXN0PWZpLHp0fWZ1bmN0aW9uIG9mKE0sSSl7bGV0IE89bnQuZ2V0KE0pO08ub3V0cHV0RW5jb2Rpbmc9SS5vdXRwdXRFbmNvZGluZyxPLmluc3RhbmNpbmc9SS5pbnN0YW5jaW5nLE8uc2tpbm5pbmc9SS5za2lubmluZyxPLm1vcnBoVGFyZ2V0cz1JLm1vcnBoVGFyZ2V0cyxPLm1vcnBoTm9ybWFscz1JLm1vcnBoTm9ybWFscyxPLm1vcnBoVGFyZ2V0c0NvdW50PUkubW9ycGhUYXJnZXRzQ291bnQsTy5udW1DbGlwcGluZ1BsYW5lcz1JLm51bUNsaXBwaW5nUGxhbmVzLE8ubnVtSW50ZXJzZWN0aW9uPUkubnVtQ2xpcEludGVyc2VjdGlvbixPLnZlcnRleEFscGhhcz1JLnZlcnRleEFscGhhcyxPLnZlcnRleFRhbmdlbnRzPUkudmVydGV4VGFuZ2VudHMsTy50b25lTWFwcGluZz1JLnRvbmVNYXBwaW5nfWZ1bmN0aW9uIEIwKE0sSSxPLFUsWil7SS5pc1NjZW5lIT09ITAmJihJPWR0KSxDLnJlc2V0VGV4dHVyZVVuaXRzKCk7bGV0IFR0PUkuZm9nLEN0PVUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9JLmVudmlyb25tZW50Om51bGwsTHQ9Yj09PW51bGw/eC5vdXRwdXRFbmNvZGluZzpiLmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9iLnRleHR1cmUuZW5jb2Rpbmc6cmksUnQ9KFUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9KOmopLmdldChVLmVudk1hcHx8Q3QpLEd0PVUudmVydGV4Q29sb3JzPT09ITAmJiEhTy5hdHRyaWJ1dGVzLmNvbG9yJiZPLmF0dHJpYnV0ZXMuY29sb3IuaXRlbVNpemU9PT00LHp0PSEhVS5ub3JtYWxNYXAmJiEhTy5hdHRyaWJ1dGVzLnRhbmdlbnQsVXQ9ISFPLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixpZT0hIU8ubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxmaT1PLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj9PLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxaaT1VLnRvbmVNYXBwZWQ/eC50b25lTWFwcGluZzp0aSxPdD1udC5nZXQoVSksbm49Zi5zdGF0ZS5saWdodHM7aWYoUT09PSEwJiYoYXQ9PT0hMHx8TSE9PVMpKXtsZXQgWmU9TT09PVMmJlUuaWQ9PT1fO0Uuc2V0U3RhdGUoVSxNLFplKX1sZXQgbGU9ITE7VS52ZXJzaW9uPT09T3QuX192ZXJzaW9uPyhPdC5uZWVkc0xpZ2h0cyYmT3QubGlnaHRzU3RhdGVWZXJzaW9uIT09bm4uc3RhdGUudmVyc2lvbnx8T3Qub3V0cHV0RW5jb2RpbmchPT1MdHx8Wi5pc0luc3RhbmNlZE1lc2gmJk90Lmluc3RhbmNpbmc9PT0hMXx8IVouaXNJbnN0YW5jZWRNZXNoJiZPdC5pbnN0YW5jaW5nPT09ITB8fFouaXNTa2lubmVkTWVzaCYmT3Quc2tpbm5pbmc9PT0hMXx8IVouaXNTa2lubmVkTWVzaCYmT3Quc2tpbm5pbmc9PT0hMHx8T3QuZW52TWFwIT09UnR8fFUuZm9nJiZPdC5mb2chPT1UdHx8T3QubnVtQ2xpcHBpbmdQbGFuZXMhPT12b2lkIDAmJihPdC5udW1DbGlwcGluZ1BsYW5lcyE9PUUubnVtUGxhbmVzfHxPdC5udW1JbnRlcnNlY3Rpb24hPT1FLm51bUludGVyc2VjdGlvbil8fE90LnZlcnRleEFscGhhcyE9PUd0fHxPdC52ZXJ0ZXhUYW5nZW50cyE9PXp0fHxPdC5tb3JwaFRhcmdldHMhPT1VdHx8T3QubW9ycGhOb3JtYWxzIT09aWV8fE90LnRvbmVNYXBwaW5nIT09Wml8fFN0LmlzV2ViR0wyPT09ITAmJk90Lm1vcnBoVGFyZ2V0c0NvdW50IT09ZmkpJiYobGU9ITApOihsZT0hMCxPdC5fX3ZlcnNpb249VS52ZXJzaW9uKTtsZXQgcm49T3QuY3VycmVudFByb2dyYW07bGU9PT0hMCYmKHJuPU9sKFUsSSxaKSk7bGV0IElvPSExLHNuPSExLHZuPSExLF9lPXJuLmdldFVuaWZvcm1zKCksbnM9T3QudW5pZm9ybXM7aWYoQi51c2VQcm9ncmFtKHJuLnByb2dyYW0pJiYoSW89ITAsc249ITAsdm49ITApLFUuaWQhPT1fJiYoXz1VLmlkLHNuPSEwKSxJb3x8UyE9PU0pe2lmKF9lLnNldFZhbHVlKGssInByb2plY3Rpb25NYXRyaXgiLE0ucHJvamVjdGlvbk1hdHJpeCksU3QubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmX2Uuc2V0VmFsdWUoaywibG9nRGVwdGhCdWZGQyIsMi8oTWF0aC5sb2coTS5mYXIrMSkvTWF0aC5MTjIpKSxTIT09TSYmKFM9TSxzbj0hMCx2bj0hMCksVS5pc1NoYWRlck1hdGVyaWFsfHxVLmlzTWVzaFBob25nTWF0ZXJpYWx8fFUuaXNNZXNoVG9vbk1hdGVyaWFsfHxVLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fFUuZW52TWFwKXtsZXQgWmU9X2UubWFwLmNhbWVyYVBvc2l0aW9uO1plIT09dm9pZCAwJiZaZS5zZXRWYWx1ZShrLGx0LnNldEZyb21NYXRyaXhQb3NpdGlvbihNLm1hdHJpeFdvcmxkKSl9KFUuaXNNZXNoUGhvbmdNYXRlcmlhbHx8VS5pc01lc2hUb29uTWF0ZXJpYWx8fFUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxVLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fFUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8VS5pc1NoYWRlck1hdGVyaWFsKSYmX2Uuc2V0VmFsdWUoaywiaXNPcnRob2dyYXBoaWMiLE0uaXNPcnRob2dyYXBoaWNDYW1lcmE9PT0hMCksKFUuaXNNZXNoUGhvbmdNYXRlcmlhbHx8VS5pc01lc2hUb29uTWF0ZXJpYWx8fFUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxVLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fFUuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8VS5pc1NoYWRlck1hdGVyaWFsfHxVLmlzU2hhZG93TWF0ZXJpYWx8fFouaXNTa2lubmVkTWVzaCkmJl9lLnNldFZhbHVlKGssInZpZXdNYXRyaXgiLE0ubWF0cml4V29ybGRJbnZlcnNlKX1pZihaLmlzU2tpbm5lZE1lc2gpe19lLnNldE9wdGlvbmFsKGssWiwiYmluZE1hdHJpeCIpLF9lLnNldE9wdGlvbmFsKGssWiwiYmluZE1hdHJpeEludmVyc2UiKTtsZXQgWmU9Wi5za2VsZXRvbjtaZSYmKFN0LmZsb2F0VmVydGV4VGV4dHVyZXM/KFplLmJvbmVUZXh0dXJlPT09bnVsbCYmWmUuY29tcHV0ZUJvbmVUZXh0dXJlKCksX2Uuc2V0VmFsdWUoaywiYm9uZVRleHR1cmUiLFplLmJvbmVUZXh0dXJlLEMpLF9lLnNldFZhbHVlKGssImJvbmVUZXh0dXJlU2l6ZSIsWmUuYm9uZVRleHR1cmVTaXplKSk6X2Uuc2V0T3B0aW9uYWwoayxaZSwiYm9uZU1hdHJpY2VzIikpfXJldHVybiEhTyYmKE8ubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uIT09dm9pZCAwfHxPLm1vcnBoQXR0cmlidXRlcy5ub3JtYWwhPT12b2lkIDApJiZydC51cGRhdGUoWixPLFUscm4pLChzbnx8T3QucmVjZWl2ZVNoYWRvdyE9PVoucmVjZWl2ZVNoYWRvdykmJihPdC5yZWNlaXZlU2hhZG93PVoucmVjZWl2ZVNoYWRvdyxfZS5zZXRWYWx1ZShrLCJyZWNlaXZlU2hhZG93IixaLnJlY2VpdmVTaGFkb3cpKSxzbiYmKF9lLnNldFZhbHVlKGssInRvbmVNYXBwaW5nRXhwb3N1cmUiLHgudG9uZU1hcHBpbmdFeHBvc3VyZSksT3QubmVlZHNMaWdodHMmJk8wKG5zLHZuKSxUdCYmVS5mb2cmJkl0LnJlZnJlc2hGb2dVbmlmb3JtcyhucyxUdCksSXQucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMobnMsVSx5LFgsRyksaWkudXBsb2FkKGssT3QudW5pZm9ybXNMaXN0LG5zLEMpKSxVLmlzU2hhZGVyTWF0ZXJpYWwmJlUudW5pZm9ybXNOZWVkVXBkYXRlPT09ITAmJihpaS51cGxvYWQoayxPdC51bmlmb3Jtc0xpc3QsbnMsQyksVS51bmlmb3Jtc05lZWRVcGRhdGU9ITEpLFUuaXNTcHJpdGVNYXRlcmlhbCYmX2Uuc2V0VmFsdWUoaywiY2VudGVyIixaLmNlbnRlciksX2Uuc2V0VmFsdWUoaywibW9kZWxWaWV3TWF0cml4IixaLm1vZGVsVmlld01hdHJpeCksX2Uuc2V0VmFsdWUoaywibm9ybWFsTWF0cml4IixaLm5vcm1hbE1hdHJpeCksX2Uuc2V0VmFsdWUoaywibW9kZWxNYXRyaXgiLFoubWF0cml4V29ybGQpLHJufWZ1bmN0aW9uIE8wKE0sSSl7TS5hbWJpZW50TGlnaHRDb2xvci5uZWVkc1VwZGF0ZT1JLE0ubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT1JLE0uZGlyZWN0aW9uYWxMaWdodHMubmVlZHNVcGRhdGU9SSxNLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPUksTS5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1JLE0ucG9pbnRMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9SSxNLnNwb3RMaWdodHMubmVlZHNVcGRhdGU9SSxNLnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9SSxNLnJlY3RBcmVhTGlnaHRzLm5lZWRzVXBkYXRlPUksTS5oZW1pc3BoZXJlTGlnaHRzLm5lZWRzVXBkYXRlPUl9ZnVuY3Rpb24gazAoTSl7cmV0dXJuIE0uaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxNLmlzTWVzaFRvb25NYXRlcmlhbHx8TS5pc01lc2hQaG9uZ01hdGVyaWFsfHxNLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fE0uaXNTaGFkb3dNYXRlcmlhbHx8TS5pc1NoYWRlck1hdGVyaWFsJiZNLmxpZ2h0cz09PSEwfXRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gbX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBwfSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBifSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKE0sSSxPKXtudC5nZXQoTS50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZT1JLG50LmdldChNLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9TztsZXQgVT1udC5nZXQoTSk7VS5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsVS5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJihVLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXI9Tz09PXZvaWQgMCxVLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fE0udXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxNLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxNLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKE0sSSl7bGV0IE89bnQuZ2V0KE0pO08uX193ZWJnbEZyYW1lYnVmZmVyPUksTy5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj1JPT09dm9pZCAwfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihNLEk9MCxPPTApe2I9TSxtPUkscD1PO2xldCBVPSEwO2lmKE0pe2xldCBSdD1udC5nZXQoTSk7UnQuX191c2VEZWZhdWx0RnJhbWVidWZmZXIhPT12b2lkIDA/KEIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLFU9ITEpOlJ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj09PXZvaWQgMD9DLnNldHVwUmVuZGVyVGFyZ2V0KE0pOlJ0Ll9faGFzRXh0ZXJuYWxUZXh0dXJlcyYmQy5yZWJpbmRUZXh0dXJlcyhNLG50LmdldChNLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLG50LmdldChNLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUpfWxldCBaPW51bGwsVHQ9ITEsQ3Q9ITE7aWYoTSl7bGV0IFJ0PU0udGV4dHVyZTsoUnQuaXNEYXRhVGV4dHVyZTNEfHxSdC5pc0RhdGFUZXh0dXJlMkRBcnJheSkmJihDdD0hMCk7bGV0IEd0PW50LmdldChNKS5fX3dlYmdsRnJhbWVidWZmZXI7TS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8oWj1HdFtJXSxUdD0hMCk6TS51c2VSZW5kZXJidWZmZXI/Wj1udC5nZXQoTSkuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyOlo9R3QsTC5jb3B5KE0udmlld3BvcnQpLEEuY29weShNLnNjaXNzb3IpLEg9TS5zY2lzc29yVGVzdH1lbHNlIEwuY29weShGKS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpLEEuY29weSh6KS5tdWx0aXBseVNjYWxhcih5KS5mbG9vcigpLEg9TjtpZihCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxaKSYmU3QuZHJhd0J1ZmZlcnMmJlUmJkIuZHJhd0J1ZmZlcnMoTSxaKSxCLnZpZXdwb3J0KEwpLEIuc2Npc3NvcihBKSxCLnNldFNjaXNzb3JUZXN0KEgpLFR0KXtsZXQgUnQ9bnQuZ2V0KE0udGV4dHVyZSk7ay5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA2NCwzNDA2OStJLFJ0Ll9fd2ViZ2xUZXh0dXJlLE8pfWVsc2UgaWYoQ3Qpe2xldCBSdD1udC5nZXQoTS50ZXh0dXJlKSxHdD1JfHwwO2suZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoMzYxNjAsMzYwNjQsUnQuX193ZWJnbFRleHR1cmUsT3x8MCxHdCl9Xz0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKE0sSSxPLFUsWixUdCxDdCl7aWYoIShNJiZNLmlzV2ViR0xSZW5kZXJUYXJnZXQpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQuIik7cmV0dXJufWxldCBMdD1udC5nZXQoTSkuX193ZWJnbEZyYW1lYnVmZmVyO2lmKE0uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJkN0IT09dm9pZCAwJiYoTHQ9THRbQ3RdKSxMdCl7Qi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsTHQpO3RyeXtsZXQgUnQ9TS50ZXh0dXJlLEd0PVJ0LmZvcm1hdCx6dD1SdC50eXBlO2lmKEd0IT09UmUmJl90LmNvbnZlcnQoR3QpIT09ay5nZXRQYXJhbWV0ZXIoMzU3MzkpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlbmRlclRhcmdldCBpcyBub3QgaW4gUkdCQSBvciBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGZvcm1hdC4iKTtyZXR1cm59bGV0IFV0PXp0PT09VXImJihtdC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIpfHxTdC5pc1dlYkdMMiYmbXQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IikpO2lmKHp0IT09ZWkmJl90LmNvbnZlcnQoenQpIT09ay5nZXRQYXJhbWV0ZXIoMzU3MzgpJiYhKHp0PT09VWkmJihTdC5pc1dlYkdMMnx8bXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHxtdC5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKSkmJiFVdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpO3JldHVybn1rLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApPT09MzYwNTM/ST49MCYmSTw9TS53aWR0aC1VJiZPPj0wJiZPPD1NLmhlaWdodC1aJiZrLnJlYWRQaXhlbHMoSSxPLFUsWixfdC5jb252ZXJ0KEd0KSxfdC5jb252ZXJ0KHp0KSxUdCk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IFJ0PWIhPT1udWxsP250LmdldChiKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtCLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxSdCl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oTSxJLE89MCl7aWYoSS5pc0ZyYW1lYnVmZmVyVGV4dHVyZSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO3JldHVybn1sZXQgVT1NYXRoLnBvdygyLC1PKSxaPU1hdGguZmxvb3IoSS5pbWFnZS53aWR0aCpVKSxUdD1NYXRoLmZsb29yKEkuaW1hZ2UuaGVpZ2h0KlUpO0Muc2V0VGV4dHVyZTJEKEksMCksay5jb3B5VGV4U3ViSW1hZ2UyRCgzNTUzLE8sMCwwLE0ueCxNLnksWixUdCksQi51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmU9ZnVuY3Rpb24oTSxJLE8sVT0wKXtsZXQgWj1JLmltYWdlLndpZHRoLFR0PUkuaW1hZ2UuaGVpZ2h0LEN0PV90LmNvbnZlcnQoTy5mb3JtYXQpLEx0PV90LmNvbnZlcnQoTy50eXBlKTtDLnNldFRleHR1cmUyRChPLDApLGsucGl4ZWxTdG9yZWkoMzc0NDAsTy5mbGlwWSksay5waXhlbFN0b3JlaSgzNzQ0MSxPLnByZW11bHRpcGx5QWxwaGEpLGsucGl4ZWxTdG9yZWkoMzMxNyxPLnVucGFja0FsaWdubWVudCksSS5pc0RhdGFUZXh0dXJlP2sudGV4U3ViSW1hZ2UyRCgzNTUzLFUsTS54LE0ueSxaLFR0LEN0LEx0LEkuaW1hZ2UuZGF0YSk6SS5pc0NvbXByZXNzZWRUZXh0dXJlP2suY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxVLE0ueCxNLnksSS5taXBtYXBzWzBdLndpZHRoLEkubWlwbWFwc1swXS5oZWlnaHQsQ3QsSS5taXBtYXBzWzBdLmRhdGEpOmsudGV4U3ViSW1hZ2UyRCgzNTUzLFUsTS54LE0ueSxDdCxMdCxJLmltYWdlKSxVPT09MCYmTy5nZW5lcmF0ZU1pcG1hcHMmJmsuZ2VuZXJhdGVNaXBtYXAoMzU1MyksQi51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmUzRD1mdW5jdGlvbihNLEksTyxVLFo9MCl7aWYoeC5pc1dlYkdMMVJlbmRlcmVyKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogY2FuIG9ubHkgYmUgdXNlZCB3aXRoIFdlYkdMMi4iKTtyZXR1cm59bGV0IFR0PU0ubWF4LngtTS5taW4ueCsxLEN0PU0ubWF4LnktTS5taW4ueSsxLEx0PU0ubWF4LnotTS5taW4ueisxLFJ0PV90LmNvbnZlcnQoVS5mb3JtYXQpLEd0PV90LmNvbnZlcnQoVS50eXBlKSx6dDtpZihVLmlzRGF0YVRleHR1cmUzRClDLnNldFRleHR1cmUzRChVLDApLHp0PTMyODc5O2Vsc2UgaWYoVS5pc0RhdGFUZXh0dXJlMkRBcnJheSlDLnNldFRleHR1cmUyREFycmF5KFUsMCksenQ9MzU4NjY7ZWxzZXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogb25seSBzdXBwb3J0cyBUSFJFRS5EYXRhVGV4dHVyZTNEIGFuZCBUSFJFRS5EYXRhVGV4dHVyZTJEQXJyYXkuIik7cmV0dXJufWsucGl4ZWxTdG9yZWkoMzc0NDAsVS5mbGlwWSksay5waXhlbFN0b3JlaSgzNzQ0MSxVLnByZW11bHRpcGx5QWxwaGEpLGsucGl4ZWxTdG9yZWkoMzMxNyxVLnVucGFja0FsaWdubWVudCk7bGV0IFV0PWsuZ2V0UGFyYW1ldGVyKDMzMTQpLGllPWsuZ2V0UGFyYW1ldGVyKDMyODc4KSxmaT1rLmdldFBhcmFtZXRlcigzMzE2KSxaaT1rLmdldFBhcmFtZXRlcigzMzE1KSxPdD1rLmdldFBhcmFtZXRlcigzMjg3Nyksbm49Ty5pc0NvbXByZXNzZWRUZXh0dXJlP08ubWlwbWFwc1swXTpPLmltYWdlO2sucGl4ZWxTdG9yZWkoMzMxNCxubi53aWR0aCksay5waXhlbFN0b3JlaSgzMjg3OCxubi5oZWlnaHQpLGsucGl4ZWxTdG9yZWkoMzMxNixNLm1pbi54KSxrLnBpeGVsU3RvcmVpKDMzMTUsTS5taW4ueSksay5waXhlbFN0b3JlaSgzMjg3NyxNLm1pbi56KSxPLmlzRGF0YVRleHR1cmV8fE8uaXNEYXRhVGV4dHVyZTNEP2sudGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LEd0LG5uLmRhdGEpOk8uaXNDb21wcmVzc2VkVGV4dHVyZT8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q6IHVudGVzdGVkIHN1cHBvcnQgZm9yIGNvbXByZXNzZWQgc3JjVGV4dHVyZS4iKSxrLmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKHp0LFosSS54LEkueSxJLnosVHQsQ3QsTHQsUnQsbm4uZGF0YSkpOmsudGV4U3ViSW1hZ2UzRCh6dCxaLEkueCxJLnksSS56LFR0LEN0LEx0LFJ0LEd0LG5uKSxrLnBpeGVsU3RvcmVpKDMzMTQsVXQpLGsucGl4ZWxTdG9yZWkoMzI4NzgsaWUpLGsucGl4ZWxTdG9yZWkoMzMxNixmaSksay5waXhlbFN0b3JlaSgzMzE1LFppKSxrLnBpeGVsU3RvcmVpKDMyODc3LE90KSxaPT09MCYmVS5nZW5lcmF0ZU1pcG1hcHMmJmsuZ2VuZXJhdGVNaXBtYXAoenQpLEIudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmluaXRUZXh0dXJlPWZ1bmN0aW9uKE0pe0Muc2V0VGV4dHVyZTJEKE0sMCksQi51bmJpbmRUZXh0dXJlKCl9LHRoaXMucmVzZXRTdGF0ZT1mdW5jdGlvbigpe209MCxwPTAsYj1udWxsLEIucmVzZXQoKSx5dC5yZXNldCgpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fIT0idW5kZWZpbmVkIiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9VnQucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJlcj0hMDt2YXIgSnU9Y2xhc3MgZXh0ZW5kcyBWdHt9O0p1LnByb3RvdHlwZS5pc1dlYkdMMVJlbmRlcmVyPSEwO3ZhciBobz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MjVlLTUpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBmdCh0KSx0aGlzLmRlbnNpdHk9ZX1jbG9uZSgpe3JldHVybiBuZXcgaG8odGhpcy5jb2xvcix0aGlzLmRlbnNpdHkpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2dFeHAyIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLGRlbnNpdHk6dGhpcy5kZW5zaXR5fX19O2hvLnByb3RvdHlwZS5pc0ZvZ0V4cDI9ITA7dmFyIGZvPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0xLGk9MWUzKXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgZnQodCksdGhpcy5uZWFyPWUsdGhpcy5mYXI9aX1jbG9uZSgpe3JldHVybiBuZXcgZm8odGhpcy5jb2xvcix0aGlzLm5lYXIsdGhpcy5mYXIpfXRvSlNPTigpe3JldHVybnt0eXBlOiJGb2ciLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksbmVhcjp0aGlzLm5lYXIsZmFyOnRoaXMuZmFyfX19O2ZvLnByb3RvdHlwZS5pc0ZvZz0hMDt2YXIgWXI9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJTY2VuZSIsdGhpcy5iYWNrZ3JvdW5kPW51bGwsdGhpcy5lbnZpcm9ubWVudD1udWxsLHRoaXMuZm9nPW51bGwsdGhpcy5vdmVycmlkZU1hdGVyaWFsPW51bGwsdGhpcy5hdXRvVXBkYXRlPSEwLHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18hPSJ1bmRlZmluZWQiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0LmJhY2tncm91bmQhPT1udWxsJiYodGhpcy5iYWNrZ3JvdW5kPXQuYmFja2dyb3VuZC5jbG9uZSgpKSx0LmVudmlyb25tZW50IT09bnVsbCYmKHRoaXMuZW52aXJvbm1lbnQ9dC5lbnZpcm9ubWVudC5jbG9uZSgpKSx0LmZvZyE9PW51bGwmJih0aGlzLmZvZz10LmZvZy5jbG9uZSgpKSx0Lm92ZXJyaWRlTWF0ZXJpYWwhPT1udWxsJiYodGhpcy5vdmVycmlkZU1hdGVyaWFsPXQub3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpKSx0aGlzLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiB0aGlzLmZvZyE9PW51bGwmJihlLm9iamVjdC5mb2c9dGhpcy5mb2cudG9KU09OKCkpLGV9fTtZci5wcm90b3R5cGUuaXNTY2VuZT0hMDt2YXIgR2k9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmFycmF5PXQsdGhpcy5zdHJpZGU9ZSx0aGlzLmNvdW50PXQhPT12b2lkIDA/dC5sZW5ndGgvZTowLHRoaXMudXNhZ2U9aW8sdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wLHRoaXMudXVpZD10bigpfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5jb3VudD10LmNvdW50LHRoaXMuc3RyaWRlPXQuc3RyaWRlLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LGUsaSl7dCo9dGhpcy5zdHJpZGUsaSo9ZS5zdHJpZGU7Zm9yKGxldCByPTAscz10aGlzLnN0cmlkZTtyPHM7cisrKXRoaXMuYXJyYXlbdCtyXT1lLmFycmF5W2krcl07cmV0dXJuIHRoaXN9c2V0KHQsZT0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxlKSx0aGlzfWNsb25lKHQpe3QuYXJyYXlCdWZmZXJzPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnM9e30pLHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPT09dm9pZCAwJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9dG4oKSksdC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPXRoaXMuYXJyYXkuc2xpY2UoMCkuYnVmZmVyKTtsZXQgZT1uZXcgdGhpcy5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF0pLGk9bmV3IHRoaXMuY29uc3RydWN0b3IoZSx0aGlzLnN0cmlkZSk7cmV0dXJuIGkuc2V0VXNhZ2UodGhpcy51c2FnZSksaX1vblVwbG9hZCh0KXtyZXR1cm4gdGhpcy5vblVwbG9hZENhbGxiYWNrPXQsdGhpc310b0pTT04odCl7cmV0dXJuIHQuYXJyYXlCdWZmZXJzPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnM9e30pLHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPT09dm9pZCAwJiYodGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9dG4oKSksdC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPT09dm9pZCAwJiYodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5LmJ1ZmZlcikpKSx7dXVpZDp0aGlzLnV1aWQsYnVmZmVyOnRoaXMuYXJyYXkuYnVmZmVyLl91dWlkLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLHN0cmlkZTp0aGlzLnN0cmlkZX19fTtHaS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgc2U9bmV3IFQsV2k9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscj0hMSl7dGhpcy5uYW1lPSIiLHRoaXMuZGF0YT10LHRoaXMuaXRlbVNpemU9ZSx0aGlzLm9mZnNldD1pLHRoaXMubm9ybWFsaXplZD1yPT09ITB9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuZGF0YS5jb3VudH1nZXQgYXJyYXkoKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5fXNldCBuZWVkc1VwZGF0ZSh0KXt0aGlzLmRhdGEubmVlZHNVcGRhdGU9dH1hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsaT10aGlzLmRhdGEuY291bnQ7ZTxpO2UrKylzZS54PXRoaXMuZ2V0WChlKSxzZS55PXRoaXMuZ2V0WShlKSxzZS56PXRoaXMuZ2V0WihlKSxzZS5hcHBseU1hdHJpeDQodCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspc2UueD10aGlzLmdldFgoZSksc2UueT10aGlzLmdldFkoZSksc2Uuej10aGlzLmdldFooZSksc2UuYXBwbHlOb3JtYWxNYXRyaXgodCksdGhpcy5zZXRYWVooZSxzZS54LHNlLnksc2Uueik7cmV0dXJuIHRoaXN9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKXNlLng9dGhpcy5nZXRYKGUpLHNlLnk9dGhpcy5nZXRZKGUpLHNlLno9dGhpcy5nZXRaKGUpLHNlLnRyYW5zZm9ybURpcmVjdGlvbih0KSx0aGlzLnNldFhZWihlLHNlLngsc2UueSxzZS56KTtyZXR1cm4gdGhpc31zZXRYKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdPWUsdGhpc31zZXRZKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV09ZSx0aGlzfXNldFoodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXT1lLHRoaXN9c2V0Vyh0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdPWUsdGhpc31nZXRYKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0XX1nZXRZKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzFdfWdldFoodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMl19Z2V0Vyh0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCszXX1zZXRYWSh0LGUsaSl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzfXNldFhZWih0LGUsaSxyKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXMuZGF0YS5hcnJheVt0KzJdPXIsdGhpc31zZXRYWVpXKHQsZSxpLHIscyl7cmV0dXJuIHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0LHRoaXMuZGF0YS5hcnJheVt0KzBdPWUsdGhpcy5kYXRhLmFycmF5W3QrMV09aSx0aGlzLmRhdGEuYXJyYXlbdCsyXT1yLHRoaXMuZGF0YS5hcnJheVt0KzNdPXMsdGhpc31jbG9uZSh0KXtpZih0PT09dm9pZCAwKXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUuY2xvbmUoKTogQ2xvbmluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgcz0wO3M8dGhpcy5pdGVtU2l6ZTtzKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK3NdKX1yZXR1cm4gbmV3IFF0KG5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKGUpLHRoaXMuaXRlbVNpemUsdGhpcy5ub3JtYWxpemVkKX1lbHNlIHJldHVybiB0LmludGVybGVhdmVkQnVmZmVycz09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgV2kodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX10b0pTT04odCl7aWYodD09PXZvaWQgMCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgcz0wO3M8dGhpcy5pdGVtU2l6ZTtzKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK3NdKX1yZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTplLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX1lbHNlIHJldHVybiB0LmludGVybGVhdmVkQnVmZmVycz09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09PT12b2lkIDAmJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLnRvSlNPTih0KSkse2lzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU6ITAsaXRlbVNpemU6dGhpcy5pdGVtU2l6ZSxkYXRhOnRoaXMuZGF0YS51dWlkLG9mZnNldDp0aGlzLm9mZnNldCxub3JtYWxpemVkOnRoaXMubm9ybWFsaXplZH19fTtXaS5wcm90b3R5cGUuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgZmw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnJvdGF0aW9uPTAsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMuc2l6ZUF0dGVudWF0aW9uPXQuc2l6ZUF0dGVudWF0aW9uLHRoaXN9fTtmbC5wcm90b3R5cGUuaXNTcHJpdGVNYXRlcmlhbD0hMDt2YXIgUnIsV3M9bmV3IFQsTHI9bmV3IFQsUHI9bmV3IFQsRHI9bmV3IEsscXM9bmV3IEssQTA9bmV3IHd0LE9hPW5ldyBULFhzPW5ldyBULGthPW5ldyBULFVnPW5ldyBLLFJ1PW5ldyBLLEJnPW5ldyBLLCR1PWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodCl7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZSIsUnI9PT12b2lkIDApe1JyPW5ldyBIdDtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KFstLjUsLS41LDAsMCwwLC41LC0uNSwwLDEsMCwuNSwuNSwwLDEsMSwtLjUsLjUsMCwwLDFdKSxpPW5ldyBHaShlLDUpO1JyLnNldEluZGV4KFswLDEsMiwwLDIsM10pLFJyLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBXaShpLDMsMCwhMSkpLFJyLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBXaShpLDIsMywhMSkpfXRoaXMuZ2VvbWV0cnk9UnIsdGhpcy5tYXRlcmlhbD10IT09dm9pZCAwP3Q6bmV3IGZsLHRoaXMuY2VudGVyPW5ldyBLKC41LC41KX1yYXljYXN0KHQsZSl7dC5jYW1lcmE9PT1udWxsJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksTHIuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLEEwLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLFByLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmdGhpcy5tYXRlcmlhbC5zaXplQXR0ZW51YXRpb249PT0hMSYmTHIubXVsdGlwbHlTY2FsYXIoLVByLnopO2xldCBpPXRoaXMubWF0ZXJpYWwucm90YXRpb24scixzO2khPT0wJiYocz1NYXRoLmNvcyhpKSxyPU1hdGguc2luKGkpKTtsZXQgbz10aGlzLmNlbnRlcjtIYShPYS5zZXQoLS41LC0uNSwwKSxQcixvLExyLHIscyksSGEoWHMuc2V0KC41LC0uNSwwKSxQcixvLExyLHIscyksSGEoa2Euc2V0KC41LC41LDApLFByLG8sTHIscixzKSxVZy5zZXQoMCwwKSxSdS5zZXQoMSwwKSxCZy5zZXQoMSwxKTtsZXQgYT10LnJheS5pbnRlcnNlY3RUcmlhbmdsZShPYSxYcyxrYSwhMSxXcyk7aWYoYT09PW51bGwmJihIYShYcy5zZXQoLS41LC41LDApLFByLG8sTHIscixzKSxSdS5zZXQoMCwxKSxhPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKE9hLGthLFhzLCExLFdzKSxhPT09bnVsbCkpcmV0dXJuO2xldCBsPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKFdzKTtsPHQubmVhcnx8bD50LmZhcnx8ZS5wdXNoKHtkaXN0YW5jZTpsLHBvaW50OldzLmNsb25lKCksdXY6cmUuZ2V0VVYoV3MsT2EsWHMsa2EsVWcsUnUsQmcsbmV3IEspLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdC5jZW50ZXIhPT12b2lkIDAmJnRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzfX07JHUucHJvdG90eXBlLmlzU3ByaXRlPSEwO2Z1bmN0aW9uIEhhKG4sdCxlLGkscixzKXtEci5zdWJWZWN0b3JzKG4sZSkuYWRkU2NhbGFyKC41KS5tdWx0aXBseShpKSxyIT09dm9pZCAwPyhxcy54PXMqRHIueC1yKkRyLnkscXMueT1yKkRyLngrcypEci55KTpxcy5jb3B5KERyKSxuLmNvcHkodCksbi54Kz1xcy54LG4ueSs9cXMueSxuLmFwcGx5TWF0cml4NChBMCl9dmFyIE9nPW5ldyBULGtnPW5ldyBXdCxIZz1uZXcgV3QsTkU9bmV3IFQsVmc9bmV3IHd0LGRsPWNsYXNzIGV4dGVuZHMgb2V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iU2tpbm5lZE1lc2giLHRoaXMuYmluZE1vZGU9ImF0dGFjaGVkIix0aGlzLmJpbmRNYXRyaXg9bmV3IHd0LHRoaXMuYmluZE1hdHJpeEludmVyc2U9bmV3IHd0fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5iaW5kTW9kZT10LmJpbmRNb2RlLHRoaXMuYmluZE1hdHJpeC5jb3B5KHQuYmluZE1hdHJpeCksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHQuYmluZE1hdHJpeEludmVyc2UpLHRoaXMuc2tlbGV0b249dC5za2VsZXRvbix0aGlzfWJpbmQodCxlKXt0aGlzLnNrZWxldG9uPXQsZT09PXZvaWQgMCYmKHRoaXMudXBkYXRlTWF0cml4V29ybGQoITApLHRoaXMuc2tlbGV0b24uY2FsY3VsYXRlSW52ZXJzZXMoKSxlPXRoaXMubWF0cml4V29ybGQpLHRoaXMuYmluZE1hdHJpeC5jb3B5KGUpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weShlKS5pbnZlcnQoKX1wb3NlKCl7dGhpcy5za2VsZXRvbi5wb3NlKCl9bm9ybWFsaXplU2tpbldlaWdodHMoKXtsZXQgdD1uZXcgV3QsZT10aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuc2tpbldlaWdodDtmb3IobGV0IGk9MCxyPWUuY291bnQ7aTxyO2krKyl7dC54PWUuZ2V0WChpKSx0Lnk9ZS5nZXRZKGkpLHQuej1lLmdldFooaSksdC53PWUuZ2V0VyhpKTtsZXQgcz0xL3QubWFuaGF0dGFuTGVuZ3RoKCk7cyE9PTEvMD90Lm11bHRpcGx5U2NhbGFyKHMpOnQuc2V0KDEsMCwwLDApLGUuc2V0WFlaVyhpLHQueCx0LnksdC56LHQudyl9fXVwZGF0ZU1hdHJpeFdvcmxkKHQpe3N1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpLHRoaXMuYmluZE1vZGU9PT0iYXR0YWNoZWQiP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTp0aGlzLmJpbmRNb2RlPT09ImRldGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5iaW5kTWF0cml4KS5pbnZlcnQoKTpjb25zb2xlLndhcm4oIlRIUkVFLlNraW5uZWRNZXNoOiBVbnJlY29nbml6ZWQgYmluZE1vZGU6ICIrdGhpcy5iaW5kTW9kZSl9Ym9uZVRyYW5zZm9ybSh0LGUpe2xldCBpPXRoaXMuc2tlbGV0b24scj10aGlzLmdlb21ldHJ5O2tnLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxIZy5mcm9tQnVmZmVyQXR0cmlidXRlKHIuYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLE9nLmNvcHkoZSkuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeCksZS5zZXQoMCwwLDApO2ZvcihsZXQgcz0wO3M8NDtzKyspe2xldCBvPUhnLmdldENvbXBvbmVudChzKTtpZihvIT09MCl7bGV0IGE9a2cuZ2V0Q29tcG9uZW50KHMpO1ZnLm11bHRpcGx5TWF0cmljZXMoaS5ib25lc1thXS5tYXRyaXhXb3JsZCxpLmJvbmVJbnZlcnNlc1thXSksZS5hZGRTY2FsZWRWZWN0b3IoTkUuY29weShPZykuYXBwbHlNYXRyaXg0KFZnKSxvKX19cmV0dXJuIGUuYXBwbHlNYXRyaXg0KHRoaXMuYmluZE1hdHJpeEludmVyc2UpfX07ZGwucHJvdG90eXBlLmlzU2tpbm5lZE1lc2g9ITA7dmFyIEt1PWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQm9uZSJ9fTtLdS5wcm90b3R5cGUuaXNCb25lPSEwO3ZhciBRdT1jbGFzcyBleHRlbmRzIGFle2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIscyxvLGEsbCxjPWZlLHU9ZmUsaCxmKXtzdXBlcihudWxsLG8sYSxsLGMsdSxyLHMsaCxmKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O1F1LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBwbz1jbGFzcyBleHRlbmRzIFF0e2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7dHlwZW9mIGk9PSJudW1iZXIiJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtwby5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIEdnPW5ldyB3dCxXZz1uZXcgd3QsVmE9W10sWXM9bmV3IG9lLGp1PWNsYXNzIGV4dGVuZHMgb2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgcG8obmV3IEZsb2F0MzJBcnJheShpKjE2KSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSx0Lmluc3RhbmNlQ29sb3IhPT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LHQqMyl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihZcy5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LFlzLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsWXMubWF0ZXJpYWwhPT12b2lkIDApZm9yKGxldCBzPTA7czxyO3MrKyl7dGhpcy5nZXRNYXRyaXhBdChzLEdnKSxXZy5tdWx0aXBseU1hdHJpY2VzKGksR2cpLFlzLm1hdHJpeFdvcmxkPVdnLFlzLnJheWNhc3QodCxWYSk7Zm9yKGxldCBvPTAsYT1WYS5sZW5ndGg7bzxhO28rKyl7bGV0IGw9VmFbb107bC5pbnN0YW5jZUlkPXMsbC5vYmplY3Q9dGhpcyxlLnB1c2gobCl9VmEubGVuZ3RoPTB9fXNldENvbG9yQXQodCxlKXt0aGlzLmluc3RhbmNlQ29sb3I9PT1udWxsJiYodGhpcy5pbnN0YW5jZUNvbG9yPW5ldyBwbyhuZXcgRmxvYXQzMkFycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQqMyksMykpLGUudG9BcnJheSh0aGlzLmluc3RhbmNlQ29sb3IuYXJyYXksdCozKX1zZXRNYXRyaXhBdCh0LGUpe2UudG9BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LHQqMTYpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07anUucHJvdG90eXBlLmlzSW5zdGFuY2VkTWVzaD0hMDt2YXIgem49Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUJhc2ljTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLmxpbmV3aWR0aD0xLHRoaXMubGluZWNhcD0icm91bmQiLHRoaXMubGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLmxpbmV3aWR0aD10LmxpbmV3aWR0aCx0aGlzLmxpbmVjYXA9dC5saW5lY2FwLHRoaXMubGluZWpvaW49dC5saW5lam9pbix0aGlzfX07em4ucHJvdG90eXBlLmlzTGluZUJhc2ljTWF0ZXJpYWw9ITA7dmFyIHFnPW5ldyBULFhnPW5ldyBULFlnPW5ldyB3dCxMdT1uZXcgb2ksR2E9bmV3IHNpLG1vPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodD1uZXcgSHQsZT1uZXcgem4pe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZih0LmluZGV4PT09bnVsbCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9WzBdO2ZvcihsZXQgcj0xLHM9ZS5jb3VudDtyPHM7cisrKXFnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyLTEpLFhnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxpW3JdPWlbci0xXSxpW3JdKz1xZy5kaXN0YW5jZVRvKFhnKTt0LnNldEF0dHJpYnV0ZSgibGluZURpc3RhbmNlIixuZXcgZWUoaSwxKSl9ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQscz10LnBhcmFtcy5MaW5lLnRocmVzaG9sZCxvPWkuZHJhd1JhbmdlO2lmKGkuYm91bmRpbmdTcGhlcmU9PT1udWxsJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLEdhLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksR2EuYXBwbHlNYXRyaXg0KHIpLEdhLnJhZGl1cys9cyx0LnJheS5pbnRlcnNlY3RzU3BoZXJlKEdhKT09PSExKXJldHVybjtZZy5jb3B5KHIpLmludmVydCgpLEx1LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChZZyk7bGV0IGE9cy8oKHRoaXMuc2NhbGUueCt0aGlzLnNjYWxlLnkrdGhpcy5zY2FsZS56KS8zKSxsPWEqYSxjPW5ldyBULHU9bmV3IFQsaD1uZXcgVCxmPW5ldyBULGQ9dGhpcy5pc0xpbmVTZWdtZW50cz8yOjE7aWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZz1pLmluZGV4LHY9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGchPT1udWxsKXtsZXQgbT1NYXRoLm1heCgwLG8uc3RhcnQpLHA9TWF0aC5taW4oZy5jb3VudCxvLnN0YXJ0K28uY291bnQpO2ZvcihsZXQgYj1tLF89cC0xO2I8XztiKz1kKXtsZXQgUz1nLmdldFgoYiksTD1nLmdldFgoYisxKTtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUodixTKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUodixMKSxMdS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxmLGgpPmwpY29udGludWU7Zi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IEg9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZik7SDx0Lm5lYXJ8fEg+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6SCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fWVsc2V7bGV0IG09TWF0aC5tYXgoMCxvLnN0YXJ0KSxwPU1hdGgubWluKHYuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGI9bSxfPXAtMTtiPF87Yis9ZCl7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHYsYiksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHYsYisxKSxMdS5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxmLGgpPmwpY29udGludWU7Zi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IEw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZik7TDx0Lm5lYXJ8fEw+dC5mYXJ8fGUucHVzaCh7ZGlzdGFuY2U6TCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHIhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKyl7bGV0IGE9cltzXS5uYW1lfHxTdHJpbmcocyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1zfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7ZSE9PXZvaWQgMCYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTttby5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBaZz1uZXcgVCxKZz1uZXcgVCxnbz1jbGFzcyBleHRlbmRzIG1ve2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkxpbmVTZWdtZW50cyJ9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZih0LmluZGV4PT09bnVsbCl7bGV0IGU9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLGk9W107Zm9yKGxldCByPTAscz1lLmNvdW50O3I8cztyKz0yKVpnLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxKZy5mcm9tQnVmZmVyQXR0cmlidXRlKGUscisxKSxpW3JdPXI9PT0wPzA6aVtyLTFdLGlbcisxXT1pW3JdK1pnLmRpc3RhbmNlVG8oSmcpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBlZShpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O2dvLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMDt2YXIgdGg9Y2xhc3MgZXh0ZW5kcyBtb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fTt0aC5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDt2YXIgcGw9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07cGwucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7dmFyICRnPW5ldyB3dCxlaD1uZXcgb2ksV2E9bmV3IHNpLHFhPW5ldyBULG5oPWNsYXNzIGV4dGVuZHMga3R7Y29uc3RydWN0b3IodD1uZXcgSHQsZT1uZXcgcGwpe3N1cGVyKCksdGhpcy50eXBlPSJQb2ludHMiLHRoaXMuZ2VvbWV0cnk9dCx0aGlzLm1hdGVyaWFsPWUsdGhpcy51cGRhdGVNb3JwaFRhcmdldHMoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc31yYXljYXN0KHQsZSl7bGV0IGk9dGhpcy5nZW9tZXRyeSxyPXRoaXMubWF0cml4V29ybGQscz10LnBhcmFtcy5Qb2ludHMudGhyZXNob2xkLG89aS5kcmF3UmFuZ2U7aWYoaS5ib3VuZGluZ1NwaGVyZT09PW51bGwmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksV2EuY29weShpLmJvdW5kaW5nU3BoZXJlKSxXYS5hcHBseU1hdHJpeDQociksV2EucmFkaXVzKz1zLHQucmF5LmludGVyc2VjdHNTcGhlcmUoV2EpPT09ITEpcmV0dXJuOyRnLmNvcHkocikuaW52ZXJ0KCksZWguY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KCRnKTtsZXQgYT1zLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGM9aS5pbmRleCxoPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihjIT09bnVsbCl7bGV0IGY9TWF0aC5tYXgoMCxvLnN0YXJ0KSxkPU1hdGgubWluKGMuY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGc9Zix4PWQ7Zzx4O2crKyl7bGV0IHY9Yy5nZXRYKGcpO3FhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaCx2KSxLZyhxYSx2LGwscix0LGUsdGhpcyl9fWVsc2V7bGV0IGY9TWF0aC5tYXgoMCxvLnN0YXJ0KSxkPU1hdGgubWluKGguY291bnQsby5zdGFydCtvLmNvdW50KTtmb3IobGV0IGc9Zix4PWQ7Zzx4O2crKylxYS5mcm9tQnVmZmVyQXR0cmlidXRlKGgsZyksS2cocWEsZyxsLHIsdCxlLHRoaXMpfX1lbHNlIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHIhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgcz0wLG89ci5sZW5ndGg7czxvO3MrKyl7bGV0IGE9cltzXS5uYW1lfHxTdHJpbmcocyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1zfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7ZSE9PXZvaWQgMCYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpIGRvZXMgbm90IHN1cHBvcnQgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX19O25oLnByb3RvdHlwZS5pc1BvaW50cz0hMDtmdW5jdGlvbiBLZyhuLHQsZSxpLHIscyxvKXtsZXQgYT1laC5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyBUO2VoLmNsb3Nlc3RQb2ludFRvUG9pbnQobixsKSxsLmFwcGx5TWF0cml4NChpKTtsZXQgYz1yLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhsKTtpZihjPHIubmVhcnx8Yz5yLmZhcilyZXR1cm47cy5wdXNoKHtkaXN0YW5jZTpjLGRpc3RhbmNlVG9SYXk6TWF0aC5zcXJ0KGEpLHBvaW50OmwsaW5kZXg6dCxmYWNlOm51bGwsb2JqZWN0Om99KX19dmFyIGloPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMpe3N1cGVyKHQsZSxpLHIscyxvLGEsbCxjKSx0aGlzLm1pbkZpbHRlcj1vIT09dm9pZCAwP286YmUsdGhpcy5tYWdGaWx0ZXI9cyE9PXZvaWQgMD9zOmJlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExO2xldCB1PXRoaXM7ZnVuY3Rpb24gaCgpe3UubmVlZHNVcGRhdGU9ITAsdC5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKGgpfSJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09PSExJiZ0LnJlYWR5U3RhdGU+PXQuSEFWRV9DVVJSRU5UX0RBVEEmJih0aGlzLm5lZWRzVXBkYXRlPSEwKX19O2loLnByb3RvdHlwZS5pc1ZpZGVvVGV4dHVyZT0hMDt2YXIgcmg9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OmV9KSx0aGlzLmZvcm1hdD1pLHRoaXMubWFnRmlsdGVyPWZlLHRoaXMubWluRmlsdGVyPWZlLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fTtyaC5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITA7dmFyIHNoPWNsYXNzIGV4dGVuZHMgYWV7Y29uc3RydWN0b3IodCxlLGkscixzLG8sYSxsLGMsdSxoLGYpe3N1cGVyKG51bGwsbyxhLGwsYyx1LHIscyxoLGYpLHRoaXMuaW1hZ2U9e3dpZHRoOmUsaGVpZ2h0Oml9LHRoaXMubWlwbWFwcz10LHRoaXMuZmxpcFk9ITEsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITF9fTtzaC5wcm90b3R5cGUuaXNDb21wcmVzc2VkVGV4dHVyZT0hMDt2YXIgb2g9Y2xhc3MgZXh0ZW5kcyBhZXtjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyxhLGwsYyl7c3VwZXIodCxlLGkscixzLG8sYSxsLGMpLHRoaXMubmVlZHNVcGRhdGU9ITB9fTtvaC5wcm90b3R5cGUuaXNDYW52YXNUZXh0dXJlPSEwO3ZhciBacj1jbGFzcyBleHRlbmRzIEh0e2NvbnN0cnVjdG9yKHQ9MSxlPTgsaT0wLHI9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ2lyY2xlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsc2VnbWVudHM6ZSx0aGV0YVN0YXJ0OmksdGhldGFMZW5ndGg6cn0sZT1NYXRoLm1heCgzLGUpO2xldCBzPVtdLG89W10sYT1bXSxsPVtdLGM9bmV3IFQsdT1uZXcgSztvLnB1c2goMCwwLDApLGEucHVzaCgwLDAsMSksbC5wdXNoKC41LC41KTtmb3IobGV0IGg9MCxmPTM7aDw9ZTtoKyssZis9Myl7bGV0IGQ9aStoL2UqcjtjLng9dCpNYXRoLmNvcyhkKSxjLnk9dCpNYXRoLnNpbihkKSxvLnB1c2goYy54LGMueSxjLnopLGEucHVzaCgwLDAsMSksdS54PShvW2ZdL3QrMSkvMix1Lnk9KG9bZisxXS90KzEpLzIsbC5wdXNoKHUueCx1LnkpfWZvcihsZXQgaD0xO2g8PWU7aCsrKXMucHVzaChoLGgrMSwwKTt0aGlzLnNldEluZGV4KHMpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKG8sMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBlZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBlZShsLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBacih0LnJhZGl1cyx0LnNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19O3ZhciBTaz1uZXcgVCxFaz1uZXcgVCxUaz1uZXcgVCxBaz1uZXcgcmU7dmFyIEZlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy50eXBlPSJDdXJ2ZSIsdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9MjAwfWdldFBvaW50KCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3VydmU6IC5nZXRQb2ludCgpIG5vdCBpbXBsZW1lbnRlZC4iKSxudWxsfWdldFBvaW50QXQodCxlKXtsZXQgaT10aGlzLmdldFV0b1RtYXBwaW5nKHQpO3JldHVybiB0aGlzLmdldFBvaW50KGksZSl9Z2V0UG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnQoaS90KSk7cmV0dXJuIGV9Z2V0U3BhY2VkUG9pbnRzKHQ9NSl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTw9dDtpKyspZS5wdXNoKHRoaXMuZ2V0UG9pbnRBdChpL3QpKTtyZXR1cm4gZX1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldExlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX1nZXRMZW5ndGhzKHQ9dGhpcy5hcmNMZW5ndGhEaXZpc2lvbnMpe2lmKHRoaXMuY2FjaGVBcmNMZW5ndGhzJiZ0aGlzLmNhY2hlQXJjTGVuZ3Rocy5sZW5ndGg9PT10KzEmJiF0aGlzLm5lZWRzVXBkYXRlKXJldHVybiB0aGlzLmNhY2hlQXJjTGVuZ3Roczt0aGlzLm5lZWRzVXBkYXRlPSExO2xldCBlPVtdLGkscj10aGlzLmdldFBvaW50KDApLHM9MDtlLnB1c2goMCk7Zm9yKGxldCBvPTE7bzw9dDtvKyspaT10aGlzLmdldFBvaW50KG8vdCkscys9aS5kaXN0YW5jZVRvKHIpLGUucHVzaChzKSxyPWk7cmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzPWUsZX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmdldExlbmd0aHMoKX1nZXRVdG9UbWFwcGluZyh0LGUpe2xldCBpPXRoaXMuZ2V0TGVuZ3RocygpLHI9MCxzPWkubGVuZ3RoLG87ZT9vPWU6bz10Kmlbcy0xXTtsZXQgYT0wLGw9cy0xLGM7Zm9yKDthPD1sOylpZihyPU1hdGguZmxvb3IoYSsobC1hKS8yKSxjPWlbcl0tbyxjPDApYT1yKzE7ZWxzZSBpZihjPjApbD1yLTE7ZWxzZXtsPXI7YnJlYWt9aWYocj1sLGlbcl09PT1vKXJldHVybiByLyhzLTEpO2xldCB1PWlbcl0sZj1pW3IrMV0tdSxkPShvLXUpL2Y7cmV0dXJuKHIrZCkvKHMtMSl9Z2V0VGFuZ2VudCh0LGUpe2xldCByPXQtMWUtNCxzPXQrMWUtNDtyPDAmJihyPTApLHM+MSYmKHM9MSk7bGV0IG89dGhpcy5nZXRQb2ludChyKSxhPXRoaXMuZ2V0UG9pbnQocyksbD1lfHwoby5pc1ZlY3RvcjI/bmV3IEs6bmV3IFQpO3JldHVybiBsLmNvcHkoYSkuc3ViKG8pLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyBULHI9W10scz1bXSxvPVtdLGE9bmV3IFQsbD1uZXcgd3Q7Zm9yKGxldCBkPTA7ZDw9dDtkKyspe2xldCBnPWQvdDtyW2RdPXRoaXMuZ2V0VGFuZ2VudEF0KGcsbmV3IFQpfXNbMF09bmV3IFQsb1swXT1uZXcgVDtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoclswXS54KSxoPU1hdGguYWJzKHJbMF0ueSksZj1NYXRoLmFicyhyWzBdLnopO3U8PWMmJihjPXUsaS5zZXQoMSwwLDApKSxoPD1jJiYoYz1oLGkuc2V0KDAsMSwwKSksZjw9YyYmaS5zZXQoMCwwLDEpLGEuY3Jvc3NWZWN0b3JzKHJbMF0saSkubm9ybWFsaXplKCksc1swXS5jcm9zc1ZlY3RvcnMoclswXSxhKSxvWzBdLmNyb3NzVmVjdG9ycyhyWzBdLHNbMF0pO2ZvcihsZXQgZD0xO2Q8PXQ7ZCsrKXtpZihzW2RdPXNbZC0xXS5jbG9uZSgpLG9bZF09b1tkLTFdLmNsb25lKCksYS5jcm9zc1ZlY3RvcnMocltkLTFdLHJbZF0pLGEubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe2Eubm9ybWFsaXplKCk7bGV0IGc9TWF0aC5hY29zKEllKHJbZC0xXS5kb3QocltkXSksLTEsMSkpO3NbZF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhhLGcpKX1vW2RdLmNyb3NzVmVjdG9ycyhyW2RdLHNbZF0pfWlmKGU9PT0hMCl7bGV0IGQ9TWF0aC5hY29zKEllKHNbMF0uZG90KHNbdF0pLC0xLDEpKTtkLz10LHJbMF0uZG90KGEuY3Jvc3NWZWN0b3JzKHNbMF0sc1t0XSkpPjAmJihkPS1kKTtmb3IobGV0IGc9MTtnPD10O2crKylzW2ddLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMocltnXSxkKmcpKSxvW2ddLmNyb3NzVmVjdG9ycyhyW2ddLHNbZ10pfXJldHVybnt0YW5nZW50czpyLG5vcm1hbHM6cyxiaW5vcm1hbHM6b319Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319LEpyPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IodD0wLGU9MCxpPTEscj0xLHM9MCxvPU1hdGguUEkqMixhPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9ZSx0aGlzLnhSYWRpdXM9aSx0aGlzLnlSYWRpdXM9cix0aGlzLmFTdGFydEFuZ2xlPXMsdGhpcy5hRW5kQW5nbGU9byx0aGlzLmFDbG9ja3dpc2U9YSx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQsZSl7bGV0IGk9ZXx8bmV3IEsscj1NYXRoLlBJKjIscz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLG89TWF0aC5hYnMocyk8TnVtYmVyLkVQU0lMT047Zm9yKDtzPDA7KXMrPXI7Zm9yKDtzPnI7KXMtPXI7czxOdW1iZXIuRVBTSUxPTiYmKG8/cz0wOnM9ciksdGhpcy5hQ2xvY2t3aXNlPT09ITAmJiFvJiYocz09PXI/cz0tcjpzPXMtcik7bGV0IGE9dGhpcy5hU3RhcnRBbmdsZSt0KnMsbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhhKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKGEpO2lmKHRoaXMuYVJvdGF0aW9uIT09MCl7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGg9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLGY9bC10aGlzLmFYLGQ9Yy10aGlzLmFZO2w9Zip1LWQqaCt0aGlzLmFYLGM9ZipoK2QqdSt0aGlzLmFZfXJldHVybiBpLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O0pyLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgbWw9Y2xhc3MgZXh0ZW5kcyBKcntjb25zdHJ1Y3Rvcih0LGUsaSxyLHMsbyl7c3VwZXIodCxlLGksaSxyLHMsbyksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTttbC5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDtmdW5jdGlvbiB0Zigpe2xldCBuPTAsdD0wLGU9MCxpPTA7ZnVuY3Rpb24gcihzLG8sYSxsKXtuPXMsdD1hLGU9LTMqcyszKm8tMiphLWwsaT0yKnMtMipvK2ErbH1yZXR1cm57aW5pdENhdG11bGxSb206ZnVuY3Rpb24ocyxvLGEsbCxjKXtyKG8sYSxjKihhLXMpLGMqKGwtbykpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24ocyxvLGEsbCxjLHUsaCl7bGV0IGY9KG8tcykvYy0oYS1zKS8oYyt1KSsoYS1vKS91LGQ9KGEtbykvdS0obC1vKS8odStoKSsobC1hKS9oO2YqPXUsZCo9dSxyKG8sYSxmLGQpfSxjYWxjOmZ1bmN0aW9uKHMpe2xldCBvPXMqcyxhPW8qcztyZXR1cm4gbit0KnMrZSpvK2kqYX19fXZhciBYYT1uZXcgVCxQdT1uZXcgdGYsRHU9bmV3IHRmLEl1PW5ldyB0ZixnbD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9W10sZT0hMSxpPSJjZW50cmlwZXRhbCIscj0uNSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNhdG11bGxSb21DdXJ2ZTMiLHRoaXMucG9pbnRzPXQsdGhpcy5jbG9zZWQ9ZSx0aGlzLmN1cnZlVHlwZT1pLHRoaXMudGVuc2lvbj1yfWdldFBvaW50KHQsZT1uZXcgVCl7bGV0IGk9ZSxyPXRoaXMucG9pbnRzLHM9ci5sZW5ndGgsbz0ocy0odGhpcy5jbG9zZWQ/MDoxKSkqdCxhPU1hdGguZmxvb3IobyksbD1vLWE7dGhpcy5jbG9zZWQ/YSs9YT4wPzA6KE1hdGguZmxvb3IoTWF0aC5hYnMoYSkvcykrMSkqczpsPT09MCYmYT09PXMtMSYmKGE9cy0yLGw9MSk7bGV0IGMsdTt0aGlzLmNsb3NlZHx8YT4wP2M9clsoYS0xKSVzXTooWGEuc3ViVmVjdG9ycyhyWzBdLHJbMV0pLmFkZChyWzBdKSxjPVhhKTtsZXQgaD1yW2Elc10sZj1yWyhhKzEpJXNdO2lmKHRoaXMuY2xvc2VkfHxhKzI8cz91PXJbKGErMiklc106KFhhLnN1YlZlY3RvcnMocltzLTFdLHJbcy0yXSkuYWRkKHJbcy0xXSksdT1YYSksdGhpcy5jdXJ2ZVR5cGU9PT0iY2VudHJpcGV0YWwifHx0aGlzLmN1cnZlVHlwZT09PSJjaG9yZGFsIil7bGV0IGQ9dGhpcy5jdXJ2ZVR5cGU9PT0iY2hvcmRhbCI/LjU6LjI1LGc9TWF0aC5wb3coYy5kaXN0YW5jZVRvU3F1YXJlZChoKSxkKSx4PU1hdGgucG93KGguZGlzdGFuY2VUb1NxdWFyZWQoZiksZCksdj1NYXRoLnBvdyhmLmRpc3RhbmNlVG9TcXVhcmVkKHUpLGQpO3g8MWUtNCYmKHg9MSksZzwxZS00JiYoZz14KSx2PDFlLTQmJih2PXgpLFB1LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsZyx4LHYpLER1LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksZyx4LHYpLEl1LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLnosaC56LGYueix1LnosZyx4LHYpfWVsc2UgdGhpcy5jdXJ2ZVR5cGU9PT0iY2F0bXVsbHJvbSImJihQdS5pbml0Q2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsdGhpcy50ZW5zaW9uKSxEdS5pbml0Q2F0bXVsbFJvbShjLnksaC55LGYueSx1LnksdGhpcy50ZW5zaW9uKSxJdS5pbml0Q2F0bXVsbFJvbShjLnosaC56LGYueix1LnosdGhpcy50ZW5zaW9uKSk7cmV0dXJuIGkuc2V0KFB1LmNhbGMobCksRHUuY2FsYyhsKSxJdS5jYWxjKGwpKSxpfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKHIuY2xvbmUoKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLnBvaW50c1tlXTt0LnBvaW50cy5wdXNoKHIudG9BcnJheSgpKX1yZXR1cm4gdC5jbG9zZWQ9dGhpcy5jbG9zZWQsdC5jdXJ2ZVR5cGU9dGhpcy5jdXJ2ZVR5cGUsdC50ZW5zaW9uPXRoaXMudGVuc2lvbix0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2gobmV3IFQoKS5mcm9tQXJyYXkocikpfXJldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9fTtnbC5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzPSEwO2Z1bmN0aW9uIFFnKG4sdCxlLGkscil7bGV0IHM9KGktdCkqLjUsbz0oci1lKSouNSxhPW4qbixsPW4qYTtyZXR1cm4oMiplLTIqaStzK28pKmwrKC0zKmUrMyppLTIqcy1vKSphK3MqbitlfWZ1bmN0aW9uIEZFKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqdH1mdW5jdGlvbiB6RShuLHQpe3JldHVybiAyKigxLW4pKm4qdH1mdW5jdGlvbiBVRShuLHQpe3JldHVybiBuKm4qdH1mdW5jdGlvbiBqcyhuLHQsZSxpKXtyZXR1cm4gRkUobix0KSt6RShuLGUpK1VFKG4saSl9ZnVuY3Rpb24gQkUobix0KXtsZXQgZT0xLW47cmV0dXJuIGUqZSplKnR9ZnVuY3Rpb24gT0Uobix0KXtsZXQgZT0xLW47cmV0dXJuIDMqZSplKm4qdH1mdW5jdGlvbiBrRShuLHQpe3JldHVybiAzKigxLW4pKm4qbip0fWZ1bmN0aW9uIEhFKG4sdCl7cmV0dXJuIG4qbipuKnR9ZnVuY3Rpb24gdG8obix0LGUsaSxyKXtyZXR1cm4gQkUobix0KStPRShuLGUpK2tFKG4saSkrSEUobixyKX12YXIgeG89Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEssaT1uZXcgSyxyPW5ldyBLKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgSyl7bGV0IGk9ZSxyPXRoaXMudjAscz10aGlzLnYxLG89dGhpcy52MixhPXRoaXMudjM7cmV0dXJuIGkuc2V0KHRvKHQsci54LHMueCxvLngsYS54KSx0byh0LHIueSxzLnksby55LGEueSkpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07eG8ucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZT0hMDt2YXIgeGw9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBULGU9bmV3IFQsaT1uZXcgVCxyPW5ldyBUKXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZTMiLHRoaXMudjA9dCx0aGlzLnYxPWUsdGhpcy52Mj1pLHRoaXMudjM9cn1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldCh0byh0LHIueCxzLngsby54LGEueCksdG8odCxyLnkscy55LG8ueSxhLnkpLHRvKHQsci56LHMueixvLnosYS56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTt4bC5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgJHI9Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEspe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPWV9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lO3JldHVybiB0PT09MT9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Z2V0VGFuZ2VudCh0LGUpe2xldCBpPWV8fG5ldyBLO3JldHVybiBpLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLm5vcm1hbGl6ZSgpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07JHIucHJvdG90eXBlLmlzTGluZUN1cnZlPSEwO3ZhciBhaD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZTMiLHRoaXMuaXNMaW5lQ3VydmUzPSEwLHRoaXMudjE9dCx0aGlzLnYyPWV9Z2V0UG9pbnQodCxlPW5ldyBUKXtsZXQgaT1lO3JldHVybiB0PT09MT9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX0seW89Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PW5ldyBLLGU9bmV3IEssaT1uZXcgSyl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3IEspe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIGkuc2V0KGpzKHQsci54LHMueCxvLngpLGpzKHQsci55LHMueSxvLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3lvLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciB5bD1jbGFzcyBleHRlbmRzIEZle2NvbnN0cnVjdG9yKHQ9bmV3IFQsZT1uZXcgVCxpPW5ldyBUKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3IFQpe2xldCBpPWUscj10aGlzLnYwLHM9dGhpcy52MSxvPXRoaXMudjI7cmV0dXJuIGkuc2V0KGpzKHQsci54LHMueCxvLngpLGpzKHQsci55LHMueSxvLnkpLGpzKHQsci56LHMueixvLnopKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3lsLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgdm89Y2xhc3MgZXh0ZW5kcyBGZXtjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxlPW5ldyBLKXtsZXQgaT1lLHI9dGhpcy5wb2ludHMscz0oci5sZW5ndGgtMSkqdCxvPU1hdGguZmxvb3IocyksYT1zLW8sbD1yW289PT0wP286by0xXSxjPXJbb10sdT1yW28+ci5sZW5ndGgtMj9yLmxlbmd0aC0xOm8rMV0saD1yW28+ci5sZW5ndGgtMz9yLmxlbmd0aC0xOm8rMl07cmV0dXJuIGkuc2V0KFFnKGEsbC54LGMueCx1LngsaC54KSxRZyhhLGwueSxjLnksdS55LGgueSkpLGl9Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXRoaXMucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLnBvaW50c1tlXTt0LnBvaW50cy5wdXNoKHIudG9BcnJheSgpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBLKCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpc319O3ZvLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBDMD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxBcmNDdXJ2ZTptbCxDYXRtdWxsUm9tQ3VydmUzOmdsLEN1YmljQmV6aWVyQ3VydmU6eG8sQ3ViaWNCZXppZXJDdXJ2ZTM6eGwsRWxsaXBzZUN1cnZlOkpyLExpbmVDdXJ2ZTokcixMaW5lQ3VydmUzOmFoLFF1YWRyYXRpY0JlemllckN1cnZlOnlvLFF1YWRyYXRpY0JlemllckN1cnZlMzp5bCxTcGxpbmVDdXJ2ZTp2b30pLGxoPWNsYXNzIGV4dGVuZHMgRmV7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iQ3VydmVQYXRoIix0aGlzLmN1cnZlcz1bXSx0aGlzLmF1dG9DbG9zZT0hMX1hZGQodCl7dGhpcy5jdXJ2ZXMucHVzaCh0KX1jbG9zZVBhdGgoKXtsZXQgdD10aGlzLmN1cnZlc1swXS5nZXRQb2ludCgwKSxlPXRoaXMuY3VydmVzW3RoaXMuY3VydmVzLmxlbmd0aC0xXS5nZXRQb2ludCgxKTt0LmVxdWFscyhlKXx8dGhpcy5jdXJ2ZXMucHVzaChuZXcgJHIoZSx0KSl9Z2V0UG9pbnQodCxlKXtsZXQgaT10KnRoaXMuZ2V0TGVuZ3RoKCkscj10aGlzLmdldEN1cnZlTGVuZ3RocygpLHM9MDtmb3IoO3M8ci5sZW5ndGg7KXtpZihyW3NdPj1pKXtsZXQgbz1yW3NdLWksYT10aGlzLmN1cnZlc1tzXSxsPWEuZ2V0TGVuZ3RoKCksYz1sPT09MD8wOjEtby9sO3JldHVybiBhLmdldFBvaW50QXQoYyxlKX1zKyt9cmV0dXJuIG51bGx9Z2V0TGVuZ3RoKCl7bGV0IHQ9dGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKTtyZXR1cm4gdFt0Lmxlbmd0aC0xXX11cGRhdGVBcmNMZW5ndGhzKCl7dGhpcy5uZWVkc1VwZGF0ZT0hMCx0aGlzLmNhY2hlTGVuZ3Rocz1udWxsLHRoaXMuZ2V0Q3VydmVMZW5ndGhzKCl9Z2V0Q3VydmVMZW5ndGhzKCl7aWYodGhpcy5jYWNoZUxlbmd0aHMmJnRoaXMuY2FjaGVMZW5ndGhzLmxlbmd0aD09PXRoaXMuY3VydmVzLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM7bGV0IHQ9W10sZT0wO2ZvcihsZXQgaT0wLHI9dGhpcy5jdXJ2ZXMubGVuZ3RoO2k8cjtpKyspZSs9dGhpcy5jdXJ2ZXNbaV0uZ2V0TGVuZ3RoKCksdC5wdXNoKGUpO3JldHVybiB0aGlzLmNhY2hlTGVuZ3Rocz10LHR9Z2V0U3BhY2VkUG9pbnRzKHQ9NDApe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8PXQ7aSsrKWUucHVzaCh0aGlzLmdldFBvaW50KGkvdCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5wdXNoKGVbMF0pLGV9Z2V0UG9pbnRzKHQ9MTIpe2xldCBlPVtdLGk7Zm9yKGxldCByPTAscz10aGlzLmN1cnZlcztyPHMubGVuZ3RoO3IrKyl7bGV0IG89c1tyXSxhPW8mJm8uaXNFbGxpcHNlQ3VydmU/dCoyOm8mJihvLmlzTGluZUN1cnZlfHxvLmlzTGluZUN1cnZlMyk/MTpvJiZvLmlzU3BsaW5lQ3VydmU/dCpvLnBvaW50cy5sZW5ndGg6dCxsPW8uZ2V0UG9pbnRzKGEpO2ZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXtsZXQgdT1sW2NdO2kmJmkuZXF1YWxzKHUpfHwoZS5wdXNoKHUpLGk9dSl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaChyLmNsb25lKCkpfXJldHVybiB0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXRoaXMuY3VydmVzW2VdO3QuY3VydmVzLnB1c2goci50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaChuZXcgQzBbci50eXBlXSgpLmZyb21KU09OKHIpKX1yZXR1cm4gdGhpc319LF9vPWNsYXNzIGV4dGVuZHMgbGh7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyBLLHQmJnRoaXMuc2V0RnJvbVBvaW50cyh0KX1zZXRGcm9tUG9pbnRzKHQpe3RoaXMubW92ZVRvKHRbMF0ueCx0WzBdLnkpO2ZvcihsZXQgZT0xLGk9dC5sZW5ndGg7ZTxpO2UrKyl0aGlzLmxpbmVUbyh0W2VdLngsdFtlXS55KTtyZXR1cm4gdGhpc31tb3ZlVG8odCxlKXtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuc2V0KHQsZSksdGhpc31saW5lVG8odCxlKXtsZXQgaT1uZXcgJHIodGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgSyh0LGUpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxlLGkscil7bGV0IHM9bmV3IHlvKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEsodCxlKSxuZXcgSyhpLHIpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChzKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQoaSxyKSx0aGlzfWJlemllckN1cnZlVG8odCxlLGkscixzLG8pe2xldCBhPW5ldyB4byh0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBLKHQsZSksbmV3IEsoaSxyKSxuZXcgSyhzLG8pKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChhKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQocyxvKSx0aGlzfXNwbGluZVRocnUodCl7bGV0IGU9W3RoaXMuY3VycmVudFBvaW50LmNsb25lKCldLmNvbmNhdCh0KSxpPW5ldyB2byhlKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHRbdC5sZW5ndGgtMV0pLHRoaXN9YXJjKHQsZSxpLHIscyxvKXtsZXQgYT10aGlzLmN1cnJlbnRQb2ludC54LGw9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNhcmModCthLGUrbCxpLHIscyxvKSx0aGlzfWFic2FyYyh0LGUsaSxyLHMsbyl7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0LGUsaSxpLHIscyxvKSx0aGlzfWVsbGlwc2UodCxlLGkscixzLG8sYSxsKXtsZXQgYz10aGlzLmN1cnJlbnRQb2ludC54LHU9dGhpcy5jdXJyZW50UG9pbnQueTtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQrYyxlK3UsaSxyLHMsbyxhLGwpLHRoaXN9YWJzZWxsaXBzZSh0LGUsaSxyLHMsbyxhLGwpe2xldCBjPW5ldyBKcih0LGUsaSxyLHMsbyxhLGwpO2lmKHRoaXMuY3VydmVzLmxlbmd0aD4wKXtsZXQgaD1jLmdldFBvaW50KDApO2guZXF1YWxzKHRoaXMuY3VycmVudFBvaW50KXx8dGhpcy5saW5lVG8oaC54LGgueSl9dGhpcy5jdXJ2ZXMucHVzaChjKTtsZXQgdT1jLmdldFBvaW50KDEpO3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHUpLHRoaXN9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmN1cnJlbnRQb2ludC5jb3B5KHQuY3VycmVudFBvaW50KSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LmN1cnJlbnRQb2ludD10aGlzLmN1cnJlbnRQb2ludC50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5jdXJyZW50UG9pbnQuZnJvbUFycmF5KHQuY3VycmVudFBvaW50KSx0aGlzfX0sVW49Y2xhc3MgZXh0ZW5kcyBfb3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLnV1aWQ9dG4oKSx0aGlzLnR5cGU9IlNoYXBlIix0aGlzLmhvbGVzPVtdfWdldFBvaW50c0hvbGVzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dGhpcy5ob2xlcy5sZW5ndGg7aTxyO2krKyllW2ldPXRoaXMuaG9sZXNbaV0uZ2V0UG9pbnRzKHQpO3JldHVybiBlfWV4dHJhY3RQb2ludHModCl7cmV0dXJue3NoYXBlOnRoaXMuZ2V0UG9pbnRzKHQpLGhvbGVzOnRoaXMuZ2V0UG9pbnRzSG9sZXModCl9fWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgZT0wLGk9dC5ob2xlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5ob2xlc1tlXTt0aGlzLmhvbGVzLnB1c2goci5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnV1aWQ9dGhpcy51dWlkLHQuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10aGlzLmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10aGlzLmhvbGVzW2VdO3QuaG9sZXMucHVzaChyLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnV1aWQ9dC51dWlkLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LmhvbGVzW2VdO3RoaXMuaG9sZXMucHVzaChuZXcgX28oKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxWRT17dHJpYW5ndWxhdGU6ZnVuY3Rpb24obix0LGU9Mil7bGV0IGk9dCYmdC5sZW5ndGgscj1pP3RbMF0qZTpuLmxlbmd0aCxzPVIwKG4sMCxyLGUsITApLG89W107aWYoIXN8fHMubmV4dD09PXMucHJldilyZXR1cm4gbztsZXQgYSxsLGMsdSxoLGYsZDtpZihpJiYocz1ZRShuLHQscyxlKSksbi5sZW5ndGg+ODAqZSl7YT1jPW5bMF0sbD11PW5bMV07Zm9yKGxldCBnPWU7ZzxyO2crPWUpaD1uW2ddLGY9bltnKzFdLGg8YSYmKGE9aCksZjxsJiYobD1mKSxoPmMmJihjPWgpLGY+dSYmKHU9Zik7ZD1NYXRoLm1heChjLWEsdS1sKSxkPWQhPT0wPzEvZDowfXJldHVybiB3byhzLG8sZSxhLGwsZCksb319O2Z1bmN0aW9uIFIwKG4sdCxlLGkscil7bGV0IHMsbztpZihyPT09clQobix0LGUsaSk+MClmb3Iocz10O3M8ZTtzKz1pKW89amcocyxuW3NdLG5bcysxXSxvKTtlbHNlIGZvcihzPWUtaTtzPj10O3MtPWkpbz1qZyhzLG5bc10sbltzKzFdLG8pO3JldHVybiBvJiZEbChvLG8ubmV4dCkmJihibyhvKSxvPW8ubmV4dCksb31mdW5jdGlvbiBsaShuLHQpe2lmKCFuKXJldHVybiBuO3R8fCh0PW4pO2xldCBlPW4saTtkbyBpZihpPSExLCFlLnN0ZWluZXImJihEbChlLGUubmV4dCl8fHRlKGUucHJldixlLGUubmV4dCk9PT0wKSl7aWYoYm8oZSksZT10PWUucHJldixlPT09ZS5uZXh0KWJyZWFrO2k9ITB9ZWxzZSBlPWUubmV4dDt3aGlsZShpfHxlIT09dCk7cmV0dXJuIHR9ZnVuY3Rpb24gd28obix0LGUsaSxyLHMsbyl7aWYoIW4pcmV0dXJuOyFvJiZzJiZRRShuLGkscixzKTtsZXQgYT1uLGwsYztmb3IoO24ucHJldiE9PW4ubmV4dDspe2lmKGw9bi5wcmV2LGM9bi5uZXh0LHM/V0UobixpLHIscyk6R0Uobikpe3QucHVzaChsLmkvZSksdC5wdXNoKG4uaS9lKSx0LnB1c2goYy5pL2UpLGJvKG4pLG49Yy5uZXh0LGE9Yy5uZXh0O2NvbnRpbnVlfWlmKG49YyxuPT09YSl7bz9vPT09MT8obj1xRShsaShuKSx0LGUpLHdvKG4sdCxlLGkscixzLDIpKTpvPT09MiYmWEUobix0LGUsaSxyLHMpOndvKGxpKG4pLHQsZSxpLHIscywxKTticmVha319fWZ1bmN0aW9uIEdFKG4pe2xldCB0PW4ucHJldixlPW4saT1uLm5leHQ7aWYodGUodCxlLGkpPj0wKXJldHVybiExO2xldCByPW4ubmV4dC5uZXh0O2Zvcig7ciE9PW4ucHJldjspe2lmKHpyKHQueCx0LnksZS54LGUueSxpLngsaS55LHIueCxyLnkpJiZ0ZShyLnByZXYscixyLm5leHQpPj0wKXJldHVybiExO3I9ci5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIFdFKG4sdCxlLGkpe2xldCByPW4ucHJldixzPW4sbz1uLm5leHQ7aWYodGUocixzLG8pPj0wKXJldHVybiExO2xldCBhPXIueDxzLng/ci54PG8ueD9yLng6by54OnMueDxvLng/cy54Om8ueCxsPXIueTxzLnk/ci55PG8ueT9yLnk6by55OnMueTxvLnk/cy55Om8ueSxjPXIueD5zLng/ci54Pm8ueD9yLng6by54OnMueD5vLng/cy54Om8ueCx1PXIueT5zLnk/ci55Pm8ueT9yLnk6by55OnMueT5vLnk/cy55Om8ueSxoPWNoKGEsbCx0LGUsaSksZj1jaChjLHUsdCxlLGkpLGQ9bi5wcmV2WixnPW4ubmV4dFo7Zm9yKDtkJiZkLno+PWgmJmcmJmcuejw9Zjspe2lmKGQhPT1uLnByZXYmJmQhPT1uLm5leHQmJnpyKHIueCxyLnkscy54LHMueSxvLngsby55LGQueCxkLnkpJiZ0ZShkLnByZXYsZCxkLm5leHQpPj0wfHwoZD1kLnByZXZaLGchPT1uLnByZXYmJmchPT1uLm5leHQmJnpyKHIueCxyLnkscy54LHMueSxvLngsby55LGcueCxnLnkpJiZ0ZShnLnByZXYsZyxnLm5leHQpPj0wKSlyZXR1cm4hMTtnPWcubmV4dFp9Zm9yKDtkJiZkLno+PWg7KXtpZihkIT09bi5wcmV2JiZkIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxkLngsZC55KSYmdGUoZC5wcmV2LGQsZC5uZXh0KT49MClyZXR1cm4hMTtkPWQucHJldlp9Zm9yKDtnJiZnLno8PWY7KXtpZihnIT09bi5wcmV2JiZnIT09bi5uZXh0JiZ6cihyLngsci55LHMueCxzLnksby54LG8ueSxnLngsZy55KSYmdGUoZy5wcmV2LGcsZy5uZXh0KT49MClyZXR1cm4hMTtnPWcubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gcUUobix0LGUpe2xldCBpPW47ZG97bGV0IHI9aS5wcmV2LHM9aS5uZXh0Lm5leHQ7IURsKHIscykmJkwwKHIsaSxpLm5leHQscykmJk1vKHIscykmJk1vKHMscikmJih0LnB1c2goci5pL2UpLHQucHVzaChpLmkvZSksdC5wdXNoKHMuaS9lKSxibyhpKSxibyhpLm5leHQpLGk9bj1zKSxpPWkubmV4dH13aGlsZShpIT09bik7cmV0dXJuIGxpKGkpfWZ1bmN0aW9uIFhFKG4sdCxlLGkscixzKXtsZXQgbz1uO2Rve2xldCBhPW8ubmV4dC5uZXh0O2Zvcig7YSE9PW8ucHJldjspe2lmKG8uaSE9PWEuaSYmZVQobyxhKSl7bGV0IGw9UDAobyxhKTtvPWxpKG8sby5uZXh0KSxsPWxpKGwsbC5uZXh0KSx3byhvLHQsZSxpLHIscyksd28obCx0LGUsaSxyLHMpO3JldHVybn1hPWEubmV4dH1vPW8ubmV4dH13aGlsZShvIT09bil9ZnVuY3Rpb24gWUUobix0LGUsaSl7bGV0IHI9W10scyxvLGEsbCxjO2ZvcihzPTAsbz10Lmxlbmd0aDtzPG87cysrKWE9dFtzXSppLGw9czxvLTE/dFtzKzFdKmk6bi5sZW5ndGgsYz1SMChuLGEsbCxpLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxyLnB1c2godFQoYykpO2ZvcihyLnNvcnQoWkUpLHM9MDtzPHIubGVuZ3RoO3MrKylKRShyW3NdLGUpLGU9bGkoZSxlLm5leHQpO3JldHVybiBlfWZ1bmN0aW9uIFpFKG4sdCl7cmV0dXJuIG4ueC10Lnh9ZnVuY3Rpb24gSkUobix0KXtpZih0PSRFKG4sdCksdCl7bGV0IGU9UDAodCxuKTtsaSh0LHQubmV4dCksbGkoZSxlLm5leHQpfX1mdW5jdGlvbiAkRShuLHQpe2xldCBlPXQsaT1uLngscj1uLnkscz0tMS8wLG87ZG97aWYocjw9ZS55JiZyPj1lLm5leHQueSYmZS5uZXh0LnkhPT1lLnkpe2xldCBmPWUueCsoci1lLnkpKihlLm5leHQueC1lLngpLyhlLm5leHQueS1lLnkpO2lmKGY8PWkmJmY+cyl7aWYocz1mLGY9PT1pKXtpZihyPT09ZS55KXJldHVybiBlO2lmKHI9PT1lLm5leHQueSlyZXR1cm4gZS5uZXh0fW89ZS54PGUubmV4dC54P2U6ZS5uZXh0fX1lPWUubmV4dH13aGlsZShlIT09dCk7aWYoIW8pcmV0dXJuIG51bGw7aWYoaT09PXMpcmV0dXJuIG87bGV0IGE9byxsPW8ueCxjPW8ueSx1PTEvMCxoO2U9bztkbyBpPj1lLngmJmUueD49bCYmaSE9PWUueCYmenIocjxjP2k6cyxyLGwsYyxyPGM/czppLHIsZS54LGUueSkmJihoPU1hdGguYWJzKHItZS55KS8oaS1lLngpLE1vKGUsbikmJihoPHV8fGg9PT11JiYoZS54Pm8ueHx8ZS54PT09by54JiZLRShvLGUpKSkmJihvPWUsdT1oKSksZT1lLm5leHQ7d2hpbGUoZSE9PWEpO3JldHVybiBvfWZ1bmN0aW9uIEtFKG4sdCl7cmV0dXJuIHRlKG4ucHJldixuLHQucHJldik8MCYmdGUodC5uZXh0LG4sbi5uZXh0KTwwfWZ1bmN0aW9uIFFFKG4sdCxlLGkpe2xldCByPW47ZG8gci56PT09bnVsbCYmKHIuej1jaChyLngsci55LHQsZSxpKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHQ7d2hpbGUociE9PW4pO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsakUocil9ZnVuY3Rpb24gakUobil7bGV0IHQsZSxpLHIscyxvLGEsbCxjPTE7ZG97Zm9yKGU9bixuPW51bGwscz1udWxsLG89MDtlOyl7Zm9yKG8rKyxpPWUsYT0wLHQ9MDt0PGMmJihhKyssaT1pLm5leHRaLCEhaSk7dCsrKTtmb3IobD1jO2E+MHx8bD4wJiZpOylhIT09MCYmKGw9PT0wfHwhaXx8ZS56PD1pLnopPyhyPWUsZT1lLm5leHRaLGEtLSk6KHI9aSxpPWkubmV4dFosbC0tKSxzP3MubmV4dFo9cjpuPXIsci5wcmV2Wj1zLHM9cjtlPWl9cy5uZXh0Wj1udWxsLGMqPTJ9d2hpbGUobz4xKTtyZXR1cm4gbn1mdW5jdGlvbiBjaChuLHQsZSxpLHIpe3JldHVybiBuPTMyNzY3KihuLWUpKnIsdD0zMjc2NyoodC1pKSpyLG49KG58bjw8OCkmMTY3MTE5MzUsbj0obnxuPDw0KSYyNTI2NDUxMzUsbj0obnxuPDwyKSY4NTg5OTM0NTksbj0obnxuPDwxKSYxNDMxNjU1NzY1LHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LG58dDw8MX1mdW5jdGlvbiB0VChuKXtsZXQgdD1uLGU9bjtkbyh0Lng8ZS54fHx0Lng9PT1lLngmJnQueTxlLnkpJiYoZT10KSx0PXQubmV4dDt3aGlsZSh0IT09bik7cmV0dXJuIGV9ZnVuY3Rpb24genIobix0LGUsaSxyLHMsbyxhKXtyZXR1cm4oci1vKSoodC1hKS0obi1vKSoocy1hKT49MCYmKG4tbykqKGktYSktKGUtbykqKHQtYSk+PTAmJihlLW8pKihzLWEpLShyLW8pKihpLWEpPj0wfWZ1bmN0aW9uIGVUKG4sdCl7cmV0dXJuIG4ubmV4dC5pIT09dC5pJiZuLnByZXYuaSE9PXQuaSYmIW5UKG4sdCkmJihNbyhuLHQpJiZNbyh0LG4pJiZpVChuLHQpJiYodGUobi5wcmV2LG4sdC5wcmV2KXx8dGUobix0LnByZXYsdCkpfHxEbChuLHQpJiZ0ZShuLnByZXYsbixuLm5leHQpPjAmJnRlKHQucHJldix0LHQubmV4dCk+MCl9ZnVuY3Rpb24gdGUobix0LGUpe3JldHVybih0Lnktbi55KSooZS54LXQueCktKHQueC1uLngpKihlLnktdC55KX1mdW5jdGlvbiBEbChuLHQpe3JldHVybiBuLng9PT10LngmJm4ueT09PXQueX1mdW5jdGlvbiBMMChuLHQsZSxpKXtsZXQgcj1aYSh0ZShuLHQsZSkpLHM9WmEodGUobix0LGkpKSxvPVphKHRlKGUsaSxuKSksYT1aYSh0ZShlLGksdCkpO3JldHVybiEhKHIhPT1zJiZvIT09YXx8cj09PTAmJllhKG4sZSx0KXx8cz09PTAmJllhKG4saSx0KXx8bz09PTAmJllhKGUsbixpKXx8YT09PTAmJllhKGUsdCxpKSl9ZnVuY3Rpb24gWWEobix0LGUpe3JldHVybiB0Lng8PU1hdGgubWF4KG4ueCxlLngpJiZ0Lng+PU1hdGgubWluKG4ueCxlLngpJiZ0Lnk8PU1hdGgubWF4KG4ueSxlLnkpJiZ0Lnk+PU1hdGgubWluKG4ueSxlLnkpfWZ1bmN0aW9uIFphKG4pe3JldHVybiBuPjA/MTpuPDA/LTE6MH1mdW5jdGlvbiBuVChuLHQpe2xldCBlPW47ZG97aWYoZS5pIT09bi5pJiZlLm5leHQuaSE9PW4uaSYmZS5pIT09dC5pJiZlLm5leHQuaSE9PXQuaSYmTDAoZSxlLm5leHQsbix0KSlyZXR1cm4hMDtlPWUubmV4dH13aGlsZShlIT09bik7cmV0dXJuITF9ZnVuY3Rpb24gTW8obix0KXtyZXR1cm4gdGUobi5wcmV2LG4sbi5uZXh0KTwwP3RlKG4sdCxuLm5leHQpPj0wJiZ0ZShuLG4ucHJldix0KT49MDp0ZShuLHQsbi5wcmV2KTwwfHx0ZShuLG4ubmV4dCx0KTwwfWZ1bmN0aW9uIGlUKG4sdCl7bGV0IGU9bixpPSExLHI9KG4ueCt0LngpLzIscz0obi55K3QueSkvMjtkbyBlLnk+cyE9ZS5uZXh0Lnk+cyYmZS5uZXh0LnkhPT1lLnkmJnI8KGUubmV4dC54LWUueCkqKHMtZS55KS8oZS5uZXh0LnktZS55KStlLngmJihpPSFpKSxlPWUubmV4dDt3aGlsZShlIT09bik7cmV0dXJuIGl9ZnVuY3Rpb24gUDAobix0KXtsZXQgZT1uZXcgdWgobi5pLG4ueCxuLnkpLGk9bmV3IHVoKHQuaSx0LngsdC55KSxyPW4ubmV4dCxzPXQucHJldjtyZXR1cm4gbi5uZXh0PXQsdC5wcmV2PW4sZS5uZXh0PXIsci5wcmV2PWUsaS5uZXh0PWUsZS5wcmV2PWkscy5uZXh0PWksaS5wcmV2PXMsaX1mdW5jdGlvbiBqZyhuLHQsZSxpKXtsZXQgcj1uZXcgdWgobix0LGUpO3JldHVybiBpPyhyLm5leHQ9aS5uZXh0LHIucHJldj1pLGkubmV4dC5wcmV2PXIsaS5uZXh0PXIpOihyLnByZXY9cixyLm5leHQ9cikscn1mdW5jdGlvbiBibyhuKXtuLm5leHQucHJldj1uLnByZXYsbi5wcmV2Lm5leHQ9bi5uZXh0LG4ucHJldlomJihuLnByZXZaLm5leHRaPW4ubmV4dFopLG4ubmV4dFomJihuLm5leHRaLnByZXZaPW4ucHJldlopfWZ1bmN0aW9uIHVoKG4sdCxlKXt0aGlzLmk9bix0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiByVChuLHQsZSxpKXtsZXQgcj0wO2ZvcihsZXQgcz10LG89ZS1pO3M8ZTtzKz1pKXIrPShuW29dLW5bc10pKihuW3MrMV0rbltvKzFdKSxvPXM7cmV0dXJuIHJ9dmFyIGRuPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCBlPXQubGVuZ3RoLGk9MDtmb3IobGV0IHI9ZS0xLHM9MDtzPGU7cj1zKyspaSs9dFtyXS54KnRbc10ueS10W3NdLngqdFtyXS55O3JldHVybiBpKi41fXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4gZG4uYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQsZSl7bGV0IGk9W10scj1bXSxzPVtdO3QwKHQpLGUwKGksdCk7bGV0IG89dC5sZW5ndGg7ZS5mb3JFYWNoKHQwKTtmb3IobGV0IGw9MDtsPGUubGVuZ3RoO2wrKylyLnB1c2gobyksbys9ZVtsXS5sZW5ndGgsZTAoaSxlW2xdKTtsZXQgYT1WRS50cmlhbmd1bGF0ZShpLHIpO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9MylzLnB1c2goYS5zbGljZShsLGwrMykpO3JldHVybiBzfX07ZnVuY3Rpb24gdDAobil7bGV0IHQ9bi5sZW5ndGg7dD4yJiZuW3QtMV0uZXF1YWxzKG5bMF0pJiZuLnBvcCgpfWZ1bmN0aW9uIGUwKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspbi5wdXNoKHRbZV0ueCksbi5wdXNoKHRbZV0ueSl9dmFyIGNpPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IodD1uZXcgVW4oW25ldyBLKC41LC41KSxuZXcgSygtLjUsLjUpLG5ldyBLKC0uNSwtLjUpLG5ldyBLKC41LC0uNSldKSxlPXt9KXtzdXBlcigpLHRoaXMudHlwZT0iRXh0cnVkZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LG9wdGlvbnM6ZX0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2xldCBpPXRoaXMscj1bXSxzPVtdO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXTtvKGMpfXRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IGVlKHMsMikpLHRoaXMuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtmdW5jdGlvbiBvKGEpe2xldCBsPVtdLGM9ZS5jdXJ2ZVNlZ21lbnRzIT09dm9pZCAwP2UuY3VydmVTZWdtZW50czoxMix1PWUuc3RlcHMhPT12b2lkIDA/ZS5zdGVwczoxLGg9ZS5kZXB0aCE9PXZvaWQgMD9lLmRlcHRoOjEsZj1lLmJldmVsRW5hYmxlZCE9PXZvaWQgMD9lLmJldmVsRW5hYmxlZDohMCxkPWUuYmV2ZWxUaGlja25lc3MhPT12b2lkIDA/ZS5iZXZlbFRoaWNrbmVzczouMixnPWUuYmV2ZWxTaXplIT09dm9pZCAwP2UuYmV2ZWxTaXplOmQtLjEseD1lLmJldmVsT2Zmc2V0IT09dm9pZCAwP2UuYmV2ZWxPZmZzZXQ6MCx2PWUuYmV2ZWxTZWdtZW50cyE9PXZvaWQgMD9lLmJldmVsU2VnbWVudHM6MyxtPWUuZXh0cnVkZVBhdGgscD1lLlVWR2VuZXJhdG9yIT09dm9pZCAwP2UuVVZHZW5lcmF0b3I6c1Q7ZS5hbW91bnQhPT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksaD1lLmFtb3VudCk7bGV0IGIsXz0hMSxTLEwsQSxIO20mJihiPW0uZ2V0U3BhY2VkUG9pbnRzKHUpLF89ITAsZj0hMSxTPW0uY29tcHV0ZUZyZW5ldEZyYW1lcyh1LCExKSxMPW5ldyBULEE9bmV3IFQsSD1uZXcgVCksZnx8KHY9MCxkPTAsZz0wLHg9MCk7bGV0IHR0PWEuZXh0cmFjdFBvaW50cyhjKSxYPXR0LnNoYXBlLHk9dHQuaG9sZXM7aWYoIWRuLmlzQ2xvY2tXaXNlKFgpKXtYPVgucmV2ZXJzZSgpO2ZvcihsZXQgQz0wLGo9eS5sZW5ndGg7QzxqO0MrKyl7bGV0IEo9eVtDXTtkbi5pc0Nsb2NrV2lzZShKKSYmKHlbQ109Si5yZXZlcnNlKCkpfX1sZXQgRD1kbi50cmlhbmd1bGF0ZVNoYXBlKFgseSksRj1YO2ZvcihsZXQgQz0wLGo9eS5sZW5ndGg7QzxqO0MrKyl7bGV0IEo9eVtDXTtYPVguY29uY2F0KEopfWZ1bmN0aW9uIHooQyxqLEope3JldHVybiBqfHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLGouY2xvbmUoKS5tdWx0aXBseVNjYWxhcihKKS5hZGQoQyl9bGV0IE49WC5sZW5ndGgsVj1ELmxlbmd0aDtmdW5jdGlvbiBRKEMsaixKKXtsZXQgaXQsZXQsdnQsYnQ9Qy54LWoueCxJdD1DLnktai55LFp0PUoueC1DLngscXQ9Si55LUMueSxFPWJ0KmJ0K0l0Kkl0LHc9YnQqcXQtSXQqWnQ7aWYoTWF0aC5hYnModyk+TnVtYmVyLkVQU0lMT04pe2xldCBxPU1hdGguc3FydChFKSxydD1NYXRoLnNxcnQoWnQqWnQrcXQqcXQpLGd0PWoueC1JdC9xLFc9ai55K2J0L3EsX3Q9Si54LXF0L3J0LHl0PUoueStadC9ydCx1dD0oKF90LWd0KSpxdC0oeXQtVykqWnQpLyhidCpxdC1JdCpadCk7aXQ9Z3QrYnQqdXQtQy54LGV0PVcrSXQqdXQtQy55O2xldCBjdD1pdCppdCtldCpldDtpZihjdDw9MilyZXR1cm4gbmV3IEsoaXQsZXQpO3Z0PU1hdGguc3FydChjdC8yKX1lbHNle2xldCBxPSExO2J0Pk51bWJlci5FUFNJTE9OP1p0Pk51bWJlci5FUFNJTE9OJiYocT0hMCk6YnQ8LU51bWJlci5FUFNJTE9OP1p0PC1OdW1iZXIuRVBTSUxPTiYmKHE9ITApOk1hdGguc2lnbihJdCk9PT1NYXRoLnNpZ24ocXQpJiYocT0hMCkscT8oaXQ9LUl0LGV0PWJ0LHZ0PU1hdGguc3FydChFKSk6KGl0PWJ0LGV0PUl0LHZ0PU1hdGguc3FydChFLzIpKX1yZXR1cm4gbmV3IEsoaXQvdnQsZXQvdnQpfWxldCBhdD1bXTtmb3IobGV0IEM9MCxqPUYubGVuZ3RoLEo9ai0xLGl0PUMrMTtDPGo7QysrLEorKyxpdCsrKUo9PT1qJiYoSj0wKSxpdD09PWomJihpdD0wKSxhdFtDXT1RKEZbQ10sRltKXSxGW2l0XSk7bGV0IEc9W10sJCxsdD1hdC5jb25jYXQoKTtmb3IobGV0IEM9MCxqPXkubGVuZ3RoO0M8ajtDKyspe2xldCBKPXlbQ107JD1bXTtmb3IobGV0IGl0PTAsZXQ9Si5sZW5ndGgsdnQ9ZXQtMSxidD1pdCsxO2l0PGV0O2l0KyssdnQrKyxidCsrKXZ0PT09ZXQmJih2dD0wKSxidD09PWV0JiYoYnQ9MCksJFtpdF09UShKW2l0XSxKW3Z0XSxKW2J0XSk7Ry5wdXNoKCQpLGx0PWx0LmNvbmNhdCgkKX1mb3IobGV0IEM9MDtDPHY7QysrKXtsZXQgaj1DL3YsSj1kKk1hdGguY29zKGoqTWF0aC5QSS8yKSxpdD1nKk1hdGguc2luKGoqTWF0aC5QSS8yKSt4O2ZvcihsZXQgZXQ9MCx2dD1GLmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eihGW2V0XSxhdFtldF0saXQpO210KGJ0LngsYnQueSwtSil9Zm9yKGxldCBldD0wLHZ0PXkubGVuZ3RoO2V0PHZ0O2V0Kyspe2xldCBidD15W2V0XTskPUdbZXRdO2ZvcihsZXQgSXQ9MCxadD1idC5sZW5ndGg7SXQ8WnQ7SXQrKyl7bGV0IHF0PXooYnRbSXRdLCRbSXRdLGl0KTttdChxdC54LHF0LnksLUopfX19bGV0IGR0PWcreDtmb3IobGV0IEM9MDtDPE47QysrKXtsZXQgaj1mP3ooWFtDXSxsdFtDXSxkdCk6WFtDXTtfPyhBLmNvcHkoUy5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihqLngpLEwuY29weShTLmJpbm9ybWFsc1swXSkubXVsdGlwbHlTY2FsYXIoai55KSxILmNvcHkoYlswXSkuYWRkKEEpLmFkZChMKSxtdChILngsSC55LEgueikpOm10KGoueCxqLnksMCl9Zm9yKGxldCBDPTE7Qzw9dTtDKyspZm9yKGxldCBqPTA7ajxOO2orKyl7bGV0IEo9Zj96KFhbal0sbHRbal0sZHQpOlhbal07Xz8oQS5jb3B5KFMubm9ybWFsc1tDXSkubXVsdGlwbHlTY2FsYXIoSi54KSxMLmNvcHkoUy5iaW5vcm1hbHNbQ10pLm11bHRpcGx5U2NhbGFyKEoueSksSC5jb3B5KGJbQ10pLmFkZChBKS5hZGQoTCksbXQoSC54LEgueSxILnopKTptdChKLngsSi55LGgvdSpDKX1mb3IobGV0IEM9di0xO0M+PTA7Qy0tKXtsZXQgaj1DL3YsSj1kKk1hdGguY29zKGoqTWF0aC5QSS8yKSxpdD1nKk1hdGguc2luKGoqTWF0aC5QSS8yKSt4O2ZvcihsZXQgZXQ9MCx2dD1GLmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eihGW2V0XSxhdFtldF0saXQpO210KGJ0LngsYnQueSxoK0opfWZvcihsZXQgZXQ9MCx2dD15Lmxlbmd0aDtldDx2dDtldCsrKXtsZXQgYnQ9eVtldF07JD1HW2V0XTtmb3IobGV0IEl0PTAsWnQ9YnQubGVuZ3RoO0l0PFp0O0l0Kyspe2xldCBxdD16KGJ0W0l0XSwkW0l0XSxpdCk7Xz9tdChxdC54LHF0LnkrYlt1LTFdLnksYlt1LTFdLngrSik6bXQocXQueCxxdC55LGgrSil9fX14dCgpLGsoKTtmdW5jdGlvbiB4dCgpe2xldCBDPXIubGVuZ3RoLzM7aWYoZil7bGV0IGo9MCxKPU4qajtmb3IobGV0IGl0PTA7aXQ8VjtpdCsrKXtsZXQgZXQ9RFtpdF07U3QoZXRbMl0rSixldFsxXStKLGV0WzBdK0opfWo9dSt2KjIsSj1OKmo7Zm9yKGxldCBpdD0wO2l0PFY7aXQrKyl7bGV0IGV0PURbaXRdO1N0KGV0WzBdK0osZXRbMV0rSixldFsyXStKKX19ZWxzZXtmb3IobGV0IGo9MDtqPFY7aisrKXtsZXQgSj1EW2pdO1N0KEpbMl0sSlsxXSxKWzBdKX1mb3IobGV0IGo9MDtqPFY7aisrKXtsZXQgSj1EW2pdO1N0KEpbMF0rTip1LEpbMV0rTip1LEpbMl0rTip1KX19aS5hZGRHcm91cChDLHIubGVuZ3RoLzMtQywwKX1mdW5jdGlvbiBrKCl7bGV0IEM9ci5sZW5ndGgvMyxqPTA7RnQoRixqKSxqKz1GLmxlbmd0aDtmb3IobGV0IEo9MCxpdD15Lmxlbmd0aDtKPGl0O0orKyl7bGV0IGV0PXlbSl07RnQoZXQsaiksais9ZXQubGVuZ3RofWkuYWRkR3JvdXAoQyxyLmxlbmd0aC8zLUMsMSl9ZnVuY3Rpb24gRnQoQyxqKXtsZXQgSj1DLmxlbmd0aDtmb3IoOy0tSj49MDspe2xldCBpdD1KLGV0PUotMTtldDwwJiYoZXQ9Qy5sZW5ndGgtMSk7Zm9yKGxldCB2dD0wLGJ0PXUrdioyO3Z0PGJ0O3Z0Kyspe2xldCBJdD1OKnZ0LFp0PU4qKHZ0KzEpLHF0PWoraXQrSXQsRT1qK2V0K0l0LHc9aitldCtadCxxPWoraXQrWnQ7QihxdCxFLHcscSl9fX1mdW5jdGlvbiBtdChDLGosSil7bC5wdXNoKEMpLGwucHVzaChqKSxsLnB1c2goSil9ZnVuY3Rpb24gU3QoQyxqLEope3N0KEMpLHN0KGopLHN0KEopO2xldCBpdD1yLmxlbmd0aC8zLGV0PXAuZ2VuZXJhdGVUb3BVVihpLHIsaXQtMyxpdC0yLGl0LTEpO250KGV0WzBdKSxudChldFsxXSksbnQoZXRbMl0pfWZ1bmN0aW9uIEIoQyxqLEosaXQpe3N0KEMpLHN0KGopLHN0KGl0KSxzdChqKSxzdChKKSxzdChpdCk7bGV0IGV0PXIubGVuZ3RoLzMsdnQ9cC5nZW5lcmF0ZVNpZGVXYWxsVVYoaSxyLGV0LTYsZXQtMyxldC0yLGV0LTEpO250KHZ0WzBdKSxudCh2dFsxXSksbnQodnRbM10pLG50KHZ0WzFdKSxudCh2dFsyXSksbnQodnRbM10pfWZ1bmN0aW9uIHN0KEMpe3IucHVzaChsW0MqMyswXSksci5wdXNoKGxbQyozKzFdKSxyLnB1c2gobFtDKjMrMl0pfWZ1bmN0aW9uIG50KEMpe3MucHVzaChDLngpLHMucHVzaChDLnkpfX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCksZT10aGlzLnBhcmFtZXRlcnMuc2hhcGVzLGk9dGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnM7cmV0dXJuIG9UKGUsaSx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IHM9MCxvPXQuc2hhcGVzLmxlbmd0aDtzPG87cysrKXtsZXQgYT1lW3Quc2hhcGVzW3NdXTtpLnB1c2goYSl9bGV0IHI9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiByIT09dm9pZCAwJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPW5ldyBDMFtyLnR5cGVdKCkuZnJvbUpTT04ocikpLG5ldyBjaShpLHQub3B0aW9ucyl9fSxzVD17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihuLHQsZSxpLHIpe2xldCBzPXRbZSozXSxvPXRbZSozKzFdLGE9dFtpKjNdLGw9dFtpKjMrMV0sYz10W3IqM10sdT10W3IqMysxXTtyZXR1cm5bbmV3IEsocyxvKSxuZXcgSyhhLGwpLG5ldyBLKGMsdSldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24obix0LGUsaSxyLHMpe2xldCBvPXRbZSozXSxhPXRbZSozKzFdLGw9dFtlKjMrMl0sYz10W2kqM10sdT10W2kqMysxXSxoPXRbaSozKzJdLGY9dFtyKjNdLGQ9dFtyKjMrMV0sZz10W3IqMysyXSx4PXRbcyozXSx2PXRbcyozKzFdLG09dFtzKjMrMl07cmV0dXJuIE1hdGguYWJzKGEtdSk8TWF0aC5hYnMoby1jKT9bbmV3IEsobywxLWwpLG5ldyBLKGMsMS1oKSxuZXcgSyhmLDEtZyksbmV3IEsoeCwxLW0pXTpbbmV3IEsoYSwxLWwpLG5ldyBLKHUsMS1oKSxuZXcgSyhkLDEtZyksbmV3IEsodiwxLW0pXX19O2Z1bmN0aW9uIG9UKG4sdCxlKXtpZihlLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9bltpXTtlLnNoYXBlcy5wdXNoKHMudXVpZCl9ZWxzZSBlLnNoYXBlcy5wdXNoKG4udXVpZCk7cmV0dXJuIHQuZXh0cnVkZVBhdGghPT12b2lkIDAmJihlLm9wdGlvbnMuZXh0cnVkZVBhdGg9dC5leHRydWRlUGF0aC50b0pTT04oKSksZX12YXIgcWk9Y2xhc3MgZXh0ZW5kcyBIdHtjb25zdHJ1Y3Rvcih0PW5ldyBVbihbbmV3IEsoMCwuNSksbmV3IEsoLS41LC0uNSksbmV3IEsoLjUsLS41KV0pLGU9MTIpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LGN1cnZlU2VnbWVudHM6ZX07bGV0IGk9W10scj1bXSxzPVtdLG89W10sYT0wLGw9MDtpZihBcnJheS5pc0FycmF5KHQpPT09ITEpYyh0KTtlbHNlIGZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWModFt1XSksdGhpcy5hZGRHcm91cChhLGwsdSksYSs9bCxsPTA7dGhpcy5zZXRJbmRleChpKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBlZShyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgZWUocywzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgZWUobywyKSk7ZnVuY3Rpb24gYyh1KXtsZXQgaD1yLmxlbmd0aC8zLGY9dS5leHRyYWN0UG9pbnRzKGUpLGQ9Zi5zaGFwZSxnPWYuaG9sZXM7ZG4uaXNDbG9ja1dpc2UoZCk9PT0hMSYmKGQ9ZC5yZXZlcnNlKCkpO2ZvcihsZXQgdj0wLG09Zy5sZW5ndGg7djxtO3YrKyl7bGV0IHA9Z1t2XTtkbi5pc0Nsb2NrV2lzZShwKT09PSEwJiYoZ1t2XT1wLnJldmVyc2UoKSl9bGV0IHg9ZG4udHJpYW5ndWxhdGVTaGFwZShkLGcpO2ZvcihsZXQgdj0wLG09Zy5sZW5ndGg7djxtO3YrKyl7bGV0IHA9Z1t2XTtkPWQuY29uY2F0KHApfWZvcihsZXQgdj0wLG09ZC5sZW5ndGg7djxtO3YrKyl7bGV0IHA9ZFt2XTtyLnB1c2gocC54LHAueSwwKSxzLnB1c2goMCwwLDEpLG8ucHVzaChwLngscC55KX1mb3IobGV0IHY9MCxtPXgubGVuZ3RoO3Y8bTt2Kyspe2xldCBwPXhbdl0sYj1wWzBdK2gsXz1wWzFdK2gsUz1wWzJdK2g7aS5wdXNoKGIsXyxTKSxsKz0zfX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCksZT10aGlzLnBhcmFtZXRlcnMuc2hhcGVzO3JldHVybiBhVChlLHQpfXN0YXRpYyBmcm9tSlNPTih0LGUpe2xldCBpPVtdO2ZvcihsZXQgcj0wLHM9dC5zaGFwZXMubGVuZ3RoO3I8cztyKyspe2xldCBvPWVbdC5zaGFwZXNbcl1dO2kucHVzaChvKX1yZXR1cm4gbmV3IHFpKGksdC5jdXJ2ZVNlZ21lbnRzKX19O2Z1bmN0aW9uIGFUKG4sdCl7aWYodC5zaGFwZXM9W10sQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MCxpPW4ubGVuZ3RoO2U8aTtlKyspe2xldCByPW5bZV07dC5zaGFwZXMucHVzaChyLnV1aWQpfWVsc2UgdC5zaGFwZXMucHVzaChuLnV1aWQpO3JldHVybiB0fXZhciBoaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFkb3dNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgZnQoMCksdGhpcy50cmFuc3BhcmVudD0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzfX07aGgucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITA7dmFyIHZsPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5yb3VnaG5lc3M9MSx0aGlzLm1ldGFsbmVzcz0wLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IGZ0KDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07dmwucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7dmFyIGZoPWNsYXNzIGV4dGVuZHMgdmx7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBJZSgyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5pb3I9KDErLjQqZSkvKDEtLjQqZSl9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyBmdCgwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgZnQoMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyBmdCgxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX07ZmgucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITA7dmFyIGRoPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hQaG9uZ01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5zcGVjdWxhcj1uZXcgZnQoMTExODQ4MSksdGhpcy5zaGluaW5lc3M9MzAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgZnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXRzLHRoaXMubm9ybWFsU2NhbGU9bmV3IEsoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5zcGVjdWxhci5jb3B5KHQuc3BlY3VsYXIpLHRoaXMuc2hpbmluZXNzPXQuc2hpbmluZXNzLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O2RoLnByb3RvdHlwZS5pc01lc2hQaG9uZ01hdGVyaWFsPSEwO3ZhciBwaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtUT09OOiIifSx0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuZ3JhZGllbnRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgZnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXRzLHRoaXMubm9ybWFsU2NhbGU9bmV3IEsoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07cGgucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDt2YXIgbWg9Y2xhc3MgZXh0ZW5kcyB4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaE5vcm1hbE1hdGVyaWFsIix0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPXRzLHRoaXMubm9ybWFsU2NhbGU9bmV3IEsoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07bWgucHJvdG90eXBlLmlzTWVzaE5vcm1hbE1hdGVyaWFsPSEwO3ZhciBnaD1jbGFzcyBleHRlbmRzIHhle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTGFtYmVydE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBmdCgxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgZnQoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLnNwZWN1bGFyTWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZW52TWFwPW51bGwsdGhpcy5jb21iaW5lPUNsLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O2doLnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITA7dmFyIHhoPWNsYXNzIGV4dGVuZHMgeGV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy50eXBlPSJNZXNoTWF0Y2FwTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IGZ0KDE2Nzc3MjE1KSx0aGlzLm1hdGNhcD1udWxsLHRoaXMubWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT10cyx0aGlzLm5vcm1hbFNjYWxlPW5ldyBLKDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e01BVENBUDoiIn0sdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWF0Y2FwPXQubWF0Y2FwLHRoaXMubWFwPXQubWFwLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07eGgucHJvdG90eXBlLmlzTWVzaE1hdGNhcE1hdGVyaWFsPSEwO3ZhciB5aD1jbGFzcyBleHRlbmRzIHpue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lRGFzaGVkTWF0ZXJpYWwiLHRoaXMuc2NhbGU9MSx0aGlzLmRhc2hTaXplPTMsdGhpcy5nYXBTaXplPTEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNjYWxlPXQuc2NhbGUsdGhpcy5kYXNoU2l6ZT10LmRhc2hTaXplLHRoaXMuZ2FwU2l6ZT10LmdhcFNpemUsdGhpc319O3loLnByb3RvdHlwZS5pc0xpbmVEYXNoZWRNYXRlcmlhbD0hMDt2YXIgS3Q9e2FycmF5U2xpY2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBLdC5pc1R5cGVkQXJyYXkobik/bmV3IG4uY29uc3RydWN0b3Iobi5zdWJhcnJheSh0LGUhPT12b2lkIDA/ZTpuLmxlbmd0aCkpOm4uc2xpY2UodCxlKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4hbnx8IWUmJm4uY29uc3RydWN0b3I9PT10P246dHlwZW9mIHQuQllURVNfUEVSX0VMRU1FTlQ9PSJudW1iZXIiP25ldyB0KG4pOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHQocixzKXtyZXR1cm4gbltyXS1uW3NdfWxldCBlPW4ubGVuZ3RoLGk9bmV3IEFycmF5KGUpO2ZvcihsZXQgcj0wO3IhPT1lOysrcilpW3JdPXI7cmV0dXJuIGkuc29ydCh0KSxpfSxzb3J0ZWRBcnJheTpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5sZW5ndGgscj1uZXcgbi5jb25zdHJ1Y3RvcihpKTtmb3IobGV0IHM9MCxvPTA7byE9PWk7KytzKXtsZXQgYT1lW3NdKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKXJbbysrXT1uW2ErbF19cmV0dXJuIHJ9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTEscz1uWzBdO2Zvcig7cyE9PXZvaWQgMCYmc1tpXT09PXZvaWQgMDspcz1uW3IrK107aWYocz09PXZvaWQgMClyZXR1cm47bGV0IG89c1tpXTtpZihvIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkobykpZG8gbz1zW2ldLG8hPT12b2lkIDAmJih0LnB1c2gocy50aW1lKSxlLnB1c2guYXBwbHkoZSxvKSkscz1uW3IrK107d2hpbGUocyE9PXZvaWQgMCk7ZWxzZSBpZihvLnRvQXJyYXkhPT12b2lkIDApZG8gbz1zW2ldLG8hPT12b2lkIDAmJih0LnB1c2gocy50aW1lKSxvLnRvQXJyYXkoZSxlLmxlbmd0aCkpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApO2Vsc2UgZG8gbz1zW2ldLG8hPT12b2lkIDAmJih0LnB1c2gocy50aW1lKSxlLnB1c2gobykpLHM9bltyKytdO3doaWxlKHMhPT12b2lkIDApfSxzdWJjbGlwOmZ1bmN0aW9uKG4sdCxlLGkscj0zMCl7bGV0IHM9bi5jbG9uZSgpO3MubmFtZT10O2xldCBvPVtdO2ZvcihsZXQgbD0wO2w8cy50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9cy50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGg9W10sZj1bXTtmb3IobGV0IGQ9MDtkPGMudGltZXMubGVuZ3RoOysrZCl7bGV0IGc9Yy50aW1lc1tkXSpyO2lmKCEoZzxlfHxnPj1pKSl7aC5wdXNoKGMudGltZXNbZF0pO2ZvcihsZXQgeD0wO3g8dTsrK3gpZi5wdXNoKGMudmFsdWVzW2QqdSt4XSl9fWgubGVuZ3RoIT09MCYmKGMudGltZXM9S3QuY29udmVydEFycmF5KGgsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9S3QuY29udmVydEFycmF5KGYsYy52YWx1ZXMuY29uc3RydWN0b3IpLG8ucHVzaChjKSl9cy50cmFja3M9bztsZXQgYT0xLzA7Zm9yKGxldCBsPTA7bDxzLnRyYWNrcy5sZW5ndGg7KytsKWE+cy50cmFja3NbbF0udGltZXNbMF0mJihhPXMudHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPHMudHJhY2tzLmxlbmd0aDsrK2wpcy50cmFja3NbbF0uc2hpZnQoLTEqYSk7cmV0dXJuIHMucmVzZXREdXJhdGlvbigpLHN9LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24obix0PTAsZT1uLGk9MzApe2k8PTAmJihpPTMwKTtsZXQgcj1lLnRyYWNrcy5sZW5ndGgscz10L2k7Zm9yKGxldCBvPTA7bzxyOysrbyl7bGV0IGE9ZS50cmFja3Nbb10sbD1hLlZhbHVlVHlwZU5hbWU7aWYobD09PSJib29sInx8bD09PSJzdHJpbmciKWNvbnRpbnVlO2xldCBjPW4udHJhY2tzLmZpbmQoZnVuY3Rpb24obSl7cmV0dXJuIG0ubmFtZT09PWEubmFtZSYmbS5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKGM9PT12b2lkIDApY29udGludWU7bGV0IHU9MCxoPWEuZ2V0VmFsdWVTaXplKCk7YS5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9aC8zKTtsZXQgZj0wLGQ9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoZj1kLzMpO2xldCBnPWEudGltZXMubGVuZ3RoLTEseDtpZihzPD1hLnRpbWVzWzBdKXtsZXQgbT11LHA9aC11O3g9S3QuYXJyYXlTbGljZShhLnZhbHVlcyxtLHApfWVsc2UgaWYocz49YS50aW1lc1tnXSl7bGV0IG09ZypoK3UscD1tK2gtdTt4PUt0LmFycmF5U2xpY2UoYS52YWx1ZXMsbSxwKX1lbHNle2xldCBtPWEuY3JlYXRlSW50ZXJwb2xhbnQoKSxwPXUsYj1oLXU7bS5ldmFsdWF0ZShzKSx4PUt0LmFycmF5U2xpY2UobS5yZXN1bHRCdWZmZXIscCxiKX1sPT09InF1YXRlcm5pb24iJiZuZXcgRWUoKS5mcm9tQXJyYXkoeCkubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheSh4KTtsZXQgdj1jLnRpbWVzLmxlbmd0aDtmb3IobGV0IG09MDttPHY7KyttKXtsZXQgcD1tKmQrZjtpZihsPT09InF1YXRlcm5pb24iKUVlLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGMudmFsdWVzLHAseCwwLGMudmFsdWVzLHApO2Vsc2V7bGV0IGI9ZC1mKjI7Zm9yKGxldCBfPTA7XzxiOysrXyljLnZhbHVlc1twK19dLT14W19dfX19cmV0dXJuIG4uYmxlbmRNb2RlPWQwLG59fSxwbj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnBhcmFtZXRlclBvc2l0aW9ucz10LHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5yZXN1bHRCdWZmZXI9ciE9PXZvaWQgMD9yOm5ldyBlLmNvbnN0cnVjdG9yKGkpLHRoaXMuc2FtcGxlVmFsdWVzPWUsdGhpcy52YWx1ZVNpemU9aSx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5EZWZhdWx0U2V0dGluZ3NfPXt9fWV2YWx1YXRlKHQpe2xldCBlPXRoaXMucGFyYW1ldGVyUG9zaXRpb25zLGk9dGhpcy5fY2FjaGVkSW5kZXgscj1lW2ldLHM9ZVtpLTFdO3Q6e2U6e2xldCBvO246e2k6aWYoISh0PHIpKXtmb3IobGV0IGE9aSsyOzspe2lmKHI9PT12b2lkIDApe2lmKHQ8cylicmVhayBpO3JldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHQscyl9aWYoaT09PWEpYnJlYWs7aWYocz1yLHI9ZVsrK2ldLHQ8cilicmVhayBlfW89ZS5sZW5ndGg7YnJlYWsgbn1pZighKHQ+PXMpKXtsZXQgYT1lWzFdO3Q8YSYmKGk9MixzPWEpO2ZvcihsZXQgbD1pLTI7Oyl7aWYocz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYoaT09PWwpYnJlYWs7aWYocj1zLHM9ZVstLWktMV0sdD49cylicmVhayBlfW89aSxpPTA7YnJlYWsgbn1icmVhayB0fWZvcig7aTxvOyl7bGV0IGE9aStvPj4+MTt0PGVbYV0/bz1hOmk9YSsxfWlmKHI9ZVtpXSxzPWVbaS0xXSxzPT09dm9pZCAwKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZihyPT09dm9pZCAwKXJldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLHMsdCl9dGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmludGVydmFsQ2hhbmdlZF8oaSxzLHIpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhpLHMsdCxyKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IGU9dGhpcy5yZXN1bHRCdWZmZXIsaT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLHM9dCpyO2ZvcihsZXQgbz0wO28hPT1yOysrbyllW29dPWlbcytvXTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O3BuLnByb3RvdHlwZS5iZWZvcmVTdGFydF89cG4ucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87cG4ucHJvdG90eXBlLmFmdGVyRW5kXz1wbi5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgdmg9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6TnIsZW5kaW5nRW5kOk5yfX1pbnRlcnZhbENoYW5nZWRfKHQsZSxpKXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxzPXQtMixvPXQrMSxhPXJbc10sbD1yW29dO2lmKGE9PT12b2lkIDApc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2UgRnI6cz10LGE9MiplLWk7YnJlYWs7Y2FzZSBlbDpzPXIubGVuZ3RoLTIsYT1lK3Jbc10tcltzKzFdO2JyZWFrO2RlZmF1bHQ6cz10LGE9aX1pZihsPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ0VuZCl7Y2FzZSBGcjpvPXQsbD0yKmktZTticmVhaztjYXNlIGVsOm89MSxsPWkrclsxXS1yWzBdO2JyZWFrO2RlZmF1bHQ6bz10LTEsbD1lfWxldCBjPShpLWUpKi41LHU9dGhpcy52YWx1ZVNpemU7dGhpcy5fd2VpZ2h0UHJldj1jLyhlLWEpLHRoaXMuX3dlaWdodE5leHQ9Yy8obC1pKSx0aGlzLl9vZmZzZXRQcmV2PXMqdSx0aGlzLl9vZmZzZXROZXh0PW8qdX1pbnRlcnBvbGF0ZV8odCxlLGkscil7bGV0IHM9dGhpcy5yZXN1bHRCdWZmZXIsbz10aGlzLnNhbXBsZVZhbHVlcyxhPXRoaXMudmFsdWVTaXplLGw9dCphLGM9bC1hLHU9dGhpcy5fb2Zmc2V0UHJldixoPXRoaXMuX29mZnNldE5leHQsZj10aGlzLl93ZWlnaHRQcmV2LGQ9dGhpcy5fd2VpZ2h0TmV4dCxnPShpLWUpLyhyLWUpLHg9ZypnLHY9eCpnLG09LWYqdisyKmYqeC1mKmcscD0oMStmKSp2KygtMS41LTIqZikqeCsoLS41K2YpKmcrMSxiPSgtMS1kKSp2KygxLjUrZCkqeCsuNSpnLF89ZCp2LWQqeDtmb3IobGV0IFM9MDtTIT09YTsrK1Mpc1tTXT1tKm9bdStTXStwKm9bYytTXStiKm9bbCtTXStfKm9baCtTXTtyZXR1cm4gc319LF9sPWNsYXNzIGV4dGVuZHMgcG57Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBzPXRoaXMucmVzdWx0QnVmZmVyLG89dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PShpLWUpLyhyLWUpLGg9MS11O2ZvcihsZXQgZj0wO2YhPT1hOysrZilzW2ZdPW9bYytmXSpoK29bbCtmXSp1O3JldHVybiBzfX0sX2g9Y2xhc3MgZXh0ZW5kcyBwbntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKX1pbnRlcnBvbGF0ZV8odCl7cmV0dXJuIHRoaXMuY29weVNhbXBsZVZhbHVlXyh0LTEpfX0sWGU9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIG5hbWUgaXMgdW5kZWZpbmVkIik7aWYoZT09PXZvaWQgMHx8ZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogbm8ga2V5ZnJhbWVzIGluIHRyYWNrIG5hbWVkICIrdCk7dGhpcy5uYW1lPXQsdGhpcy50aW1lcz1LdC5jb252ZXJ0QXJyYXkoZSx0aGlzLlRpbWVCdWZmZXJUeXBlKSx0aGlzLnZhbHVlcz1LdC5jb252ZXJ0QXJyYXkoaSx0aGlzLlZhbHVlQnVmZmVyVHlwZSksdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHJ8fHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9dC5jb25zdHJ1Y3RvcixpO2lmKGUudG9KU09OIT09dGhpcy50b0pTT04paT1lLnRvSlNPTih0KTtlbHNle2k9e25hbWU6dC5uYW1lLHRpbWVzOkt0LmNvbnZlcnRBcnJheSh0LnRpbWVzLEFycmF5KSx2YWx1ZXM6S3QuY29udmVydEFycmF5KHQudmFsdWVzLEFycmF5KX07bGV0IHI9dC5nZXRJbnRlcnBvbGF0aW9uKCk7ciE9PXQuRGVmYXVsdEludGVycG9sYXRpb24mJihpLmludGVycG9sYXRpb249cil9cmV0dXJuIGkudHlwZT10LlZhbHVlVHlwZU5hbWUsaX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZSh0KXtyZXR1cm4gbmV3IF9oKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBfbCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoKHQpe3JldHVybiBuZXcgdmgodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfXNldEludGVycG9sYXRpb24odCl7bGV0IGU7c3dpdGNoKHQpe2Nhc2UgamE6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgdGw6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjticmVhaztjYXNlIGV1OmU9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg7YnJlYWt9aWYoZT09PXZvaWQgMCl7bGV0IGk9InVuc3VwcG9ydGVkIGludGVycG9sYXRpb24gZm9yICIrdGhpcy5WYWx1ZVR5cGVOYW1lKyIga2V5ZnJhbWUgdHJhY2sgbmFtZWQgIit0aGlzLm5hbWU7aWYodGhpcy5jcmVhdGVJbnRlcnBvbGFudD09PXZvaWQgMClpZih0IT09dGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoaSk7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLGkpLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9ZSx0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiBqYTtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyOnJldHVybiB0bDtjYXNlIHRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoOnJldHVybiBldX19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZih0IT09MCl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKHQhPT0xKXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LGUpe2xldCBpPXRoaXMudGltZXMscj1pLmxlbmd0aCxzPTAsbz1yLTE7Zm9yKDtzIT09ciYmaVtzXTx0OykrK3M7Zm9yKDtvIT09LTEmJmlbb10+ZTspLS1vO2lmKCsrbyxzIT09MHx8byE9PXIpe3M+PW8mJihvPU1hdGgubWF4KG8sMSkscz1vLTEpO2xldCBhPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1LdC5hcnJheVNsaWNlKGkscyxvKSx0aGlzLnZhbHVlcz1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzLHMqYSxvKmEpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBJbnZhbGlkIHZhbHVlIHNpemUgaW4gdHJhY2suIix0aGlzKSx0PSExKTtsZXQgaT10aGlzLnRpbWVzLHI9dGhpcy52YWx1ZXMscz1pLmxlbmd0aDtzPT09MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRyYWNrIGlzIGVtcHR5LiIsdGhpcyksdD0hMSk7bGV0IG89bnVsbDtmb3IobGV0IGE9MDthIT09czthKyspe2xldCBsPWlbYV07aWYodHlwZW9mIGw9PSJudW1iZXIiJiZpc05hTihsKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVGltZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGEsbCksdD0hMTticmVha31pZihvIT09bnVsbCYmbz5sKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBPdXQgb2Ygb3JkZXIga2V5cy4iLHRoaXMsYSxsLG8pLHQ9ITE7YnJlYWt9bz1sfWlmKHIhPT12b2lkIDAmJkt0LmlzVHlwZWRBcnJheShyKSlmb3IobGV0IGE9MCxsPXIubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9clthXTtpZihpc05hTihjKSl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVmFsdWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxhLGMpLHQ9ITE7YnJlYWt9fXJldHVybiB0fW9wdGltaXplKCl7bGV0IHQ9S3QuYXJyYXlTbGljZSh0aGlzLnRpbWVzKSxlPUt0LmFycmF5U2xpY2UodGhpcy52YWx1ZXMpLGk9dGhpcy5nZXRWYWx1ZVNpemUoKSxyPXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpPT09ZXUscz10Lmxlbmd0aC0xLG89MTtmb3IobGV0IGE9MTthPHM7KythKXtsZXQgbD0hMSxjPXRbYV0sdT10W2ErMV07aWYoYyE9PXUmJihhIT09MXx8YyE9PXRbMF0pKWlmKHIpbD0hMDtlbHNle2xldCBoPWEqaSxmPWgtaSxkPWgraTtmb3IobGV0IGc9MDtnIT09aTsrK2cpe2xldCB4PWVbaCtnXTtpZih4IT09ZVtmK2ddfHx4IT09ZVtkK2ddKXtsPSEwO2JyZWFrfX19aWYobCl7aWYoYSE9PW8pe3Rbb109dFthXTtsZXQgaD1hKmksZj1vKmk7Zm9yKGxldCBkPTA7ZCE9PWk7KytkKWVbZitkXT1lW2grZF19KytvfX1pZihzPjApe3Rbb109dFtzXTtmb3IobGV0IGE9cyppLGw9byppLGM9MDtjIT09aTsrK2MpZVtsK2NdPWVbYStjXTsrK299cmV0dXJuIG8hPT10Lmxlbmd0aD8odGhpcy50aW1lcz1LdC5hcnJheVNsaWNlKHQsMCxvKSx0aGlzLnZhbHVlcz1LdC5hcnJheVNsaWNlKGUsMCxvKmkpKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPWUpLHRoaXN9Y2xvbmUoKXtsZXQgdD1LdC5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1LdC5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLGk9dGhpcy5jb25zdHJ1Y3RvcixyPW5ldyBpKHRoaXMubmFtZSx0LGUpO3JldHVybiByLmNyZWF0ZUludGVycG9sYW50PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQscn19O1hlLnByb3RvdHlwZS5UaW1lQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7WGUucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1GbG9hdDMyQXJyYXk7WGUucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPXRsO3ZhciB1aT1jbGFzcyBleHRlbmRzIFhle307dWkucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImJvb2wiO3VpLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXk7dWkucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPWphO3VpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwO3VpLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciB3bD1jbGFzcyBleHRlbmRzIFhle307d2wucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgS3I9Y2xhc3MgZXh0ZW5kcyBYZXt9O0tyLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciB3aD1jbGFzcyBleHRlbmRzIHBue2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgcz10aGlzLnJlc3VsdEJ1ZmZlcixvPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD0oaS1lKS8oci1lKSxjPXQqYTtmb3IobGV0IHU9YythO2MhPT11O2MrPTQpRWUuc2xlcnBGbGF0KHMsMCxvLGMtYSxvLGMsbCk7cmV0dXJuIHN9fSxYaT1jbGFzcyBleHRlbmRzIFhle0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IHdoKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O1hpLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIjtYaS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249dGw7WGkucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIGhpPWNsYXNzIGV4dGVuZHMgWGV7fTtoaS5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ic3RyaW5nIjtoaS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O2hpLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1qYTtoaS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDtoaS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgUXI9Y2xhc3MgZXh0ZW5kcyBYZXt9O1FyLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJ2ZWN0b3IiO3ZhciBNbD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEsaSxyPVFoKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1pLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1yLHRoaXMudXVpZD10bigpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj0xLyh0LmZwc3x8MSk7Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvIT09YTsrK28pZS5wdXNoKGNUKGlbb10pLnNjYWxlKHIpKTtsZXQgcz1uZXcgdGhpcyh0Lm5hbWUsdC5kdXJhdGlvbixlLHQuYmxlbmRNb2RlKTtyZXR1cm4gcy51dWlkPXQudXVpZCxzfXN0YXRpYyB0b0pTT04odCl7bGV0IGU9W10saT10LnRyYWNrcyxyPXtuYW1lOnQubmFtZSxkdXJhdGlvbjp0LmR1cmF0aW9uLHRyYWNrczplLHV1aWQ6dC51dWlkLGJsZW5kTW9kZTp0LmJsZW5kTW9kZX07Zm9yKGxldCBzPTAsbz1pLmxlbmd0aDtzIT09bzsrK3MpZS5wdXNoKFhlLnRvSlNPTihpW3NdKSk7cmV0dXJuIHJ9c3RhdGljIENyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKHQsZSxpLHIpe2xldCBzPWUubGVuZ3RoLG89W107Zm9yKGxldCBhPTA7YTxzO2ErKyl7bGV0IGw9W10sYz1bXTtsLnB1c2goKGErcy0xKSVzLGEsKGErMSklcyksYy5wdXNoKDAsMSwwKTtsZXQgdT1LdC5nZXRLZXlmcmFtZU9yZGVyKGwpO2w9S3Quc29ydGVkQXJyYXkobCwxLHUpLGM9S3Quc29ydGVkQXJyYXkoYywxLHUpLCFyJiZsWzBdPT09MCYmKGwucHVzaChzKSxjLnB1c2goY1swXSkpLG8ucHVzaChuZXcgS3IoIi5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIitlW2FdLm5hbWUrIl0iLGwsYykuc2NhbGUoMS9pKSl9cmV0dXJuIG5ldyB0aGlzKHQsLTEsbyl9c3RhdGljIGZpbmRCeU5hbWUodCxlKXtsZXQgaT10O2lmKCFBcnJheS5pc0FycmF5KHQpKXtsZXQgcj10O2k9ci5nZW9tZXRyeSYmci5nZW9tZXRyeS5hbmltYXRpb25zfHxyLmFuaW1hdGlvbnN9Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaWYoaVtyXS5uYW1lPT09ZSlyZXR1cm4gaVtyXTtyZXR1cm4gbnVsbH1zdGF0aWMgQ3JlYXRlQ2xpcHNGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZXModCxlLGkpe2xldCByPXt9LHM9L14oW1x3LV0qPykoW1xkXSspJC87Zm9yKGxldCBhPTAsbD10Lmxlbmd0aDthPGw7YSsrKXtsZXQgYz10W2FdLHU9Yy5uYW1lLm1hdGNoKHMpO2lmKHUmJnUubGVuZ3RoPjEpe2xldCBoPXVbMV0sZj1yW2hdO2Z8fChyW2hdPWY9W10pLGYucHVzaChjKX19bGV0IG89W107Zm9yKGxldCBhIGluIHIpby5wdXNoKHRoaXMuQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UoYSxyW2FdLGUsaSkpO3JldHVybiBvfXN0YXRpYyBwYXJzZUFuaW1hdGlvbih0LGUpe2lmKCF0KXJldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25DbGlwOiBObyBhbmltYXRpb24gaW4gSlNPTkxvYWRlciBkYXRhLiIpLG51bGw7bGV0IGk9ZnVuY3Rpb24oaCxmLGQsZyx4KXtpZihkLmxlbmd0aCE9PTApe2xldCB2PVtdLG09W107S3QuZmxhdHRlbkpTT04oZCx2LG0sZyksdi5sZW5ndGghPT0wJiZ4LnB1c2gobmV3IGgoZix2LG0pKX19LHI9W10scz10Lm5hbWV8fCJkZWZhdWx0IixvPXQuZnBzfHwzMCxhPXQuYmxlbmRNb2RlLGw9dC5sZW5ndGh8fC0xLGM9dC5oaWVyYXJjaHl8fFtdO2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKXtsZXQgZj1jW2hdLmtleXM7aWYoISghZnx8Zi5sZW5ndGg9PT0wKSlpZihmWzBdLm1vcnBoVGFyZ2V0cyl7bGV0IGQ9e30sZztmb3IoZz0wO2c8Zi5sZW5ndGg7ZysrKWlmKGZbZ10ubW9ycGhUYXJnZXRzKWZvcihsZXQgeD0wO3g8ZltnXS5tb3JwaFRhcmdldHMubGVuZ3RoO3grKylkW2ZbZ10ubW9ycGhUYXJnZXRzW3hdXT0tMTtmb3IobGV0IHggaW4gZCl7bGV0IHY9W10sbT1bXTtmb3IobGV0IHA9MDtwIT09ZltnXS5tb3JwaFRhcmdldHMubGVuZ3RoOysrcCl7bGV0IGI9ZltnXTt2LnB1c2goYi50aW1lKSxtLnB1c2goYi5tb3JwaFRhcmdldD09PXg/MTowKX1yLnB1c2gobmV3IEtyKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VbIit4KyJdIix2LG0pKX1sPWQubGVuZ3RoKihvfHwxKX1lbHNle2xldCBkPSIuYm9uZXNbIitlW2hdLm5hbWUrIl0iO2koUXIsZCsiLnBvc2l0aW9uIixmLCJwb3MiLHIpLGkoWGksZCsiLnF1YXRlcm5pb24iLGYsInJvdCIsciksaShRcixkKyIuc2NhbGUiLGYsInNjbCIscil9fXJldHVybiByLmxlbmd0aD09PTA/bnVsbDpuZXcgdGhpcyhzLGwscixhKX1yZXNldER1cmF0aW9uKCl7bGV0IHQ9dGhpcy50cmFja3MsZT0wO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz10aGlzLnRyYWNrc1tpXTtlPU1hdGgubWF4KGUscy50aW1lc1tzLnRpbWVzLmxlbmd0aC0xXSl9cmV0dXJuIHRoaXMuZHVyYXRpb249ZSx0aGlzfXRyaW0oKXtmb3IobGV0IHQ9MDt0PHRoaXMudHJhY2tzLmxlbmd0aDt0KyspdGhpcy50cmFja3NbdF0udHJpbSgwLHRoaXMuZHVyYXRpb24pO3JldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITA7Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQ9dCYmdGhpcy50cmFja3NbZV0udmFsaWRhdGUoKTtyZXR1cm4gdH1vcHRpbWl6ZSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS5vcHRpbWl6ZSgpO3JldHVybiB0aGlzfWNsb25lKCl7bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTx0aGlzLnRyYWNrcy5sZW5ndGg7ZSsrKXQucHVzaCh0aGlzLnRyYWNrc1tlXS5jbG9uZSgpKTtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5uYW1lLHRoaXMuZHVyYXRpb24sdCx0aGlzLmJsZW5kTW9kZSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IudG9KU09OKHRoaXMpfX07ZnVuY3Rpb24gbFQobil7c3dpdGNoKG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlIjpjYXNlImZsb2F0IjpjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpyZXR1cm4gS3I7Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBRcjtjYXNlImNvbG9yIjpyZXR1cm4gd2w7Y2FzZSJxdWF0ZXJuaW9uIjpyZXR1cm4gWGk7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiB1aTtjYXNlInN0cmluZyI6cmV0dXJuIGhpfXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrbil9ZnVuY3Rpb24gY1Qobil7aWYobi50eXBlPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1sVChuLnR5cGUpO2lmKG4udGltZXM9PT12b2lkIDApe2xldCBlPVtdLGk9W107S3QuZmxhdHRlbkpTT04obi5rZXlzLGUsaSwidmFsdWUiKSxuLnRpbWVzPWUsbi52YWx1ZXM9aX1yZXR1cm4gdC5wYXJzZSE9PXZvaWQgMD90LnBhcnNlKG4pOm5ldyB0KG4ubmFtZSxuLnRpbWVzLG4udmFsdWVzLG4uaW50ZXJwb2xhdGlvbil9dmFyIGpyPXtlbmFibGVkOiExLGZpbGVzOnt9LGFkZDpmdW5jdGlvbihuLHQpe3RoaXMuZW5hYmxlZCE9PSExJiYodGhpcy5maWxlc1tuXT10KX0sZ2V0OmZ1bmN0aW9uKG4pe2lmKHRoaXMuZW5hYmxlZCE9PSExKXJldHVybiB0aGlzLmZpbGVzW25dfSxyZW1vdmU6ZnVuY3Rpb24obil7ZGVsZXRlIHRoaXMuZmlsZXNbbl19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5maWxlcz17fX19LE1oPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgcj10aGlzLHM9ITEsbz0wLGE9MCxsLGM9W107dGhpcy5vblN0YXJ0PXZvaWQgMCx0aGlzLm9uTG9hZD10LHRoaXMub25Qcm9ncmVzcz1lLHRoaXMub25FcnJvcj1pLHRoaXMuaXRlbVN0YXJ0PWZ1bmN0aW9uKHUpe2ErKyxzPT09ITEmJnIub25TdGFydCE9PXZvaWQgMCYmci5vblN0YXJ0KHUsbyxhKSxzPSEwfSx0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24odSl7bysrLHIub25Qcm9ncmVzcyE9PXZvaWQgMCYmci5vblByb2dyZXNzKHUsbyxhKSxvPT09YSYmKHM9ITEsci5vbkxvYWQhPT12b2lkIDAmJnIub25Mb2FkKCkpfSx0aGlzLml0ZW1FcnJvcj1mdW5jdGlvbih1KXtyLm9uRXJyb3IhPT12b2lkIDAmJnIub25FcnJvcih1KX0sdGhpcy5yZXNvbHZlVVJMPWZ1bmN0aW9uKHUpe3JldHVybiBsP2wodSk6dX0sdGhpcy5zZXRVUkxNb2RpZmllcj1mdW5jdGlvbih1KXtyZXR1cm4gbD11LHRoaXN9LHRoaXMuYWRkSGFuZGxlcj1mdW5jdGlvbih1LGgpe3JldHVybiBjLnB1c2godSxoKSx0aGlzfSx0aGlzLnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24odSl7bGV0IGg9Yy5pbmRleE9mKHUpO3JldHVybiBoIT09LTEmJmMuc3BsaWNlKGgsMiksdGhpc30sdGhpcy5nZXRIYW5kbGVyPWZ1bmN0aW9uKHUpe2ZvcihsZXQgaD0wLGY9Yy5sZW5ndGg7aDxmO2grPTIpe2xldCBkPWNbaF0sZz1jW2grMV07aWYoZC5nbG9iYWwmJihkLmxhc3RJbmRleD0wKSxkLnRlc3QodSkpcmV0dXJuIGd9cmV0dXJuIG51bGx9fX0sdVQ9bmV3IE1oLG1uPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj10IT09dm9pZCAwP3Q6dVQsdGhpcy5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnBhdGg9IiIsdGhpcy5yZXNvdXJjZVBhdGg9IiIsdGhpcy5yZXF1ZXN0SGVhZGVyPXt9fWxvYWQoKXt9bG9hZEFzeW5jKHQsZSl7bGV0IGk9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixzKXtpLmxvYWQodCxyLGUscyl9KX1wYXJzZSgpe31zZXRDcm9zc09yaWdpbih0KXtyZXR1cm4gdGhpcy5jcm9zc09yaWdpbj10LHRoaXN9c2V0V2l0aENyZWRlbnRpYWxzKHQpe3JldHVybiB0aGlzLndpdGhDcmVkZW50aWFscz10LHRoaXN9c2V0UGF0aCh0KXtyZXR1cm4gdGhpcy5wYXRoPXQsdGhpc31zZXRSZXNvdXJjZVBhdGgodCl7cmV0dXJuIHRoaXMucmVzb3VyY2VQYXRoPXQsdGhpc31zZXRSZXF1ZXN0SGVhZGVyKHQpe3JldHVybiB0aGlzLnJlcXVlc3RIZWFkZXI9dCx0aGlzfX0sRG49e30sYmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBzPWpyLmdldCh0KTtpZihzIT09dm9pZCAwKXJldHVybiB0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoKCk9PntlJiZlKHMpLHRoaXMubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2lmKERuW3RdIT09dm9pZCAwKXtEblt0XS5wdXNoKHtvbkxvYWQ6ZSxvblByb2dyZXNzOmksb25FcnJvcjpyfSk7cmV0dXJufURuW3RdPVtdLERuW3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aSxvbkVycm9yOnJ9KTtsZXQgbz1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxhPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChvKS50aGVuKGM9PntpZihjLnN0YXR1cz09PTIwMHx8Yy5zdGF0dXM9PT0wKXtpZihjLnN0YXR1cz09PTAmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJ1bmRlZmluZWQifHxjLmJvZHkuZ2V0UmVhZGVyPT09dm9pZCAwKXJldHVybiBjO2xldCB1PURuW3RdLGg9Yy5ib2R5LmdldFJlYWRlcigpLGY9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxkPWY/cGFyc2VJbnQoZik6MCxnPWQhPT0wLHg9MCx2PW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQobSl7cCgpO2Z1bmN0aW9uIHAoKXtoLnJlYWQoKS50aGVuKCh7ZG9uZTpiLHZhbHVlOl99KT0+e2lmKGIpbS5jbG9zZSgpO2Vsc2V7eCs9Xy5ieXRlTGVuZ3RoO2xldCBTPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6Zyxsb2FkZWQ6eCx0b3RhbDpkfSk7Zm9yKGxldCBMPTAsQT11Lmxlbmd0aDtMPEE7TCsrKXtsZXQgSD11W0xdO0gub25Qcm9ncmVzcyYmSC5vblByb2dyZXNzKFMpfW0uZW5xdWV1ZShfKSxwKCl9fSl9fX0pO3JldHVybiBuZXcgUmVzcG9uc2Uodil9ZWxzZSB0aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+bmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKGE9PT12b2lkIDApcmV0dXJuIGMudGV4dCgpO3tsZXQgaD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSksZj1oJiZoWzFdP2hbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsZD1uZXcgVGV4dERlY29kZXIoZik7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGc9PmQuZGVjb2RlKGcpKX19fSkudGhlbihjPT57anIuYWRkKHQsYyk7bGV0IHU9RG5bdF07ZGVsZXRlIERuW3RdO2ZvcihsZXQgaD0wLGY9dS5sZW5ndGg7aDxmO2grKyl7bGV0IGQ9dVtoXTtkLm9uTG9hZCYmZC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PURuW3RdO2lmKHU9PT12b2lkIDApdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBEblt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBkPXVbaF07ZC5vbkVycm9yJiZkLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX07dmFyIGJsPWNsYXNzIGV4dGVuZHMgbW57Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXt0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBzPXRoaXMsbz1qci5nZXQodCk7aWYobyE9PXZvaWQgMClyZXR1cm4gcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZShvKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztsZXQgYT1ybygiaW1nIik7ZnVuY3Rpb24gbCgpe3UoKSxqci5hZGQodCx0aGlzKSxlJiZlKHRoaXMpLHMubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIGMoaCl7dSgpLHImJnIoaCkscy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxzLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiB1KCl7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKX1yZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjLCExKSx0LnN1YnN0cigwLDUpIT09ImRhdGE6IiYmdGhpcy5jcm9zc09yaWdpbiE9PXZvaWQgMCYmKGEuY3Jvc3NPcmlnaW49dGhpcy5jcm9zc09yaWdpbikscy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxhLnNyYz10LGF9fSxTaD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IHM9bmV3IFdyLG89bmV3IGJsKHRoaXMubWFuYWdlcik7by5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKSxvLnNldFBhdGgodGhpcy5wYXRoKTtsZXQgYT0wO2Z1bmN0aW9uIGwoYyl7by5sb2FkKHRbY10sZnVuY3Rpb24odSl7cy5pbWFnZXNbY109dSxhKyssYT09PTYmJihzLm5lZWRzVXBkYXRlPSEwLGUmJmUocykpfSx2b2lkIDAscil9Zm9yKGxldCBjPTA7Yzx0Lmxlbmd0aDsrK2MpbChjKTtyZXR1cm4gc319O3ZhciBFaD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IHM9bmV3IGFlLG89bmV3IGJsKHRoaXMubWFuYWdlcik7cmV0dXJuIG8uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksby5zZXRQYXRoKHRoaXMucGF0aCksby5sb2FkKHQsZnVuY3Rpb24oYSl7cy5pbWFnZT1hLHMubmVlZHNVcGRhdGU9ITAsZSE9PXZvaWQgMCYmZShzKX0saSxyKSxzfX0sWWU9Y2xhc3MgZXh0ZW5kcyBrdHtjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpZ2h0Iix0aGlzLmNvbG9yPW5ldyBmdCh0KSx0aGlzLmludGVuc2l0eT1lfWRpc3Bvc2UoKXt9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpLGUub2JqZWN0LmludGVuc2l0eT10aGlzLmludGVuc2l0eSx0aGlzLmdyb3VuZENvbG9yIT09dm9pZCAwJiYoZS5vYmplY3QuZ3JvdW5kQ29sb3I9dGhpcy5ncm91bmRDb2xvci5nZXRIZXgoKSksdGhpcy5kaXN0YW5jZSE9PXZvaWQgMCYmKGUub2JqZWN0LmRpc3RhbmNlPXRoaXMuZGlzdGFuY2UpLHRoaXMuYW5nbGUhPT12b2lkIDAmJihlLm9iamVjdC5hbmdsZT10aGlzLmFuZ2xlKSx0aGlzLmRlY2F5IT09dm9pZCAwJiYoZS5vYmplY3QuZGVjYXk9dGhpcy5kZWNheSksdGhpcy5wZW51bWJyYSE9PXZvaWQgMCYmKGUub2JqZWN0LnBlbnVtYnJhPXRoaXMucGVudW1icmEpLHRoaXMuc2hhZG93IT09dm9pZCAwJiYoZS5vYmplY3Quc2hhZG93PXRoaXMuc2hhZG93LnRvSlNPTigpKSxlfX07WWUucHJvdG90eXBlLmlzTGlnaHQ9ITA7dmFyIFRoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShrdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgZnQoZSl9Y29weSh0KXtyZXR1cm4gWWUucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX07VGgucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciBuMD1uZXcgd3QsaTA9bmV3IFQscjA9bmV3IFQsU289Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jYW1lcmE9dCx0aGlzLmJpYXM9MCx0aGlzLm5vcm1hbEJpYXM9MCx0aGlzLnJhZGl1cz0xLHRoaXMuYmx1clNhbXBsZXM9OCx0aGlzLm1hcFNpemU9bmV3IEsoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcgd3QsdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgcXIsdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBLKDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IFd0KDAsMCwxLDEpXX1nZXRWaWV3cG9ydENvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9Z2V0RnJ1c3R1bSgpe3JldHVybiB0aGlzLl9mcnVzdHVtfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCBlPXRoaXMuY2FtZXJhLGk9dGhpcy5tYXRyaXg7aTAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLGUucG9zaXRpb24uY29weShpMCkscjAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxlLmxvb2tBdChyMCksZS51cGRhdGVNYXRyaXhXb3JsZCgpLG4wLm11bHRpcGx5TWF0cmljZXMoZS5wcm9qZWN0aW9uTWF0cml4LGUubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4wKSxpLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxpLm11bHRpcGx5KGUucHJvamVjdGlvbk1hdHJpeCksaS5tdWx0aXBseShlLm1hdHJpeFdvcmxkSW52ZXJzZSl9Z2V0Vmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1t0XX1nZXRGcmFtZUV4dGVudHMoKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfWRpc3Bvc2UoKXt0aGlzLm1hcCYmdGhpcy5tYXAuZGlzcG9zZSgpLHRoaXMubWFwUGFzcyYmdGhpcy5tYXBQYXNzLmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gdGhpcy5iaWFzIT09MCYmKHQuYmlhcz10aGlzLmJpYXMpLHRoaXMubm9ybWFsQmlhcyE9PTAmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSx0aGlzLnJhZGl1cyE9PTEmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKHRoaXMubWFwU2l6ZS54IT09NTEyfHx0aGlzLm1hcFNpemUueSE9PTUxMikmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sU2w9Y2xhc3MgZXh0ZW5kcyBTb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBTZSg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPVZ1KjIqdC5hbmdsZSp0aGlzLmZvY3VzLHI9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQscz10LmRpc3RhbmNlfHxlLmZhcjsoaSE9PWUuZm92fHxyIT09ZS5hc3BlY3R8fHMhPT1lLmZhcikmJihlLmZvdj1pLGUuYXNwZWN0PXIsZS5mYXI9cyxlLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O1NsLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMDt2YXIgQWg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9TWF0aC5QSS8zLHM9MCxvPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShrdC5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IGt0LHRoaXMuZGlzdGFuY2U9aSx0aGlzLmFuZ2xlPXIsdGhpcy5wZW51bWJyYT1zLHRoaXMuZGVjYXk9byx0aGlzLnNoYWRvdz1uZXcgU2x9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07QWgucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciBzMD1uZXcgd3QsWnM9bmV3IFQsTnU9bmV3IFQsRWw9Y2xhc3MgZXh0ZW5kcyBTb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBTZSg5MCwxLC41LDUwMCkpLHRoaXMuX2ZyYW1lRXh0ZW50cz1uZXcgSyg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBXdCgyLDEsMSwxKSxuZXcgV3QoMCwxLDEsMSksbmV3IFd0KDMsMSwxLDEpLG5ldyBXdCgxLDEsMSwxKSxuZXcgV3QoMywwLDEsMSksbmV3IFd0KDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3IFQoMSwwLDApLG5ldyBUKC0xLDAsMCksbmV3IFQoMCwwLDEpLG5ldyBUKDAsMCwtMSksbmV3IFQoMCwxLDApLG5ldyBUKDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyBUKDAsMSwwKSxuZXcgVCgwLDEsMCksbmV3IFQoMCwxLDApLG5ldyBUKDAsMSwwKSxuZXcgVCgwLDAsMSksbmV3IFQoMCwwLC0xKV19dXBkYXRlTWF0cmljZXModCxlPTApe2xldCBpPXRoaXMuY2FtZXJhLHI9dGhpcy5tYXRyaXgscz10LmRpc3RhbmNlfHxpLmZhcjtzIT09aS5mYXImJihpLmZhcj1zLGkudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxacy5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksaS5wb3NpdGlvbi5jb3B5KFpzKSxOdS5jb3B5KGkucG9zaXRpb24pLE51LmFkZCh0aGlzLl9jdWJlRGlyZWN0aW9uc1tlXSksaS51cC5jb3B5KHRoaXMuX2N1YmVVcHNbZV0pLGkubG9va0F0KE51KSxpLnVwZGF0ZU1hdHJpeFdvcmxkKCksci5tYWtlVHJhbnNsYXRpb24oLVpzLngsLVpzLnksLVpzLnopLHMwLm11bHRpcGx5TWF0cmljZXMoaS5wcm9qZWN0aW9uTWF0cml4LGkubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHMwKX19O0VsLnByb3RvdHlwZS5pc1BvaW50TGlnaHRTaGFkb3c9ITA7dmFyIENoPWNsYXNzIGV4dGVuZHMgWWV7Y29uc3RydWN0b3IodCxlLGk9MCxyPTEpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJQb2ludExpZ2h0Iix0aGlzLmRpc3RhbmNlPWksdGhpcy5kZWNheT1yLHRoaXMuc2hhZG93PW5ldyBFbH1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqNCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyg0Kk1hdGguUEkpfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMuc2hhZG93PXQuc2hhZG93LmNsb25lKCksdGhpc319O0NoLnByb3RvdHlwZS5pc1BvaW50TGlnaHQ9ITA7dmFyIFRsPWNsYXNzIGV4dGVuZHMgU297Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVmkoLTUsNSw1LC01LC41LDUwMCkpfX07VGwucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodFNoYWRvdz0hMDt2YXIgUmg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoa3QuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBrdCx0aGlzLnNoYWRvdz1uZXcgVGx9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07UmgucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodD0hMDt2YXIgTGg9Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJBbWJpZW50TGlnaHQifX07TGgucHJvdG90eXBlLmlzQW1iaWVudExpZ2h0PSEwO3ZhciBQaD1jbGFzcyBleHRlbmRzIFlle2NvbnN0cnVjdG9yKHQsZSxpPTEwLHI9MTApe3N1cGVyKHQsZSksdGhpcy50eXBlPSJSZWN0QXJlYUxpZ2h0Iix0aGlzLndpZHRoPWksdGhpcy5oZWlnaHQ9cn1nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqdGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJfXNldCBwb3dlcih0KXt0aGlzLmludGVuc2l0eT10Lyh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Qud2lkdGg9dGhpcy53aWR0aCxlLm9iamVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQsZX19O1BoLnByb3RvdHlwZS5pc1JlY3RBcmVhTGlnaHQ9ITA7dmFyIEFsPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jb2VmZmljaWVudHM9W107Zm9yKGxldCB0PTA7dDw5O3QrKyl0aGlzLmNvZWZmaWNpZW50cy5wdXNoKG5ldyBUKX1zZXQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5jb3B5KHRbZV0pO3JldHVybiB0aGlzfXplcm8oKXtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzW3RdLnNldCgwLDAsMCk7cmV0dXJuIHRoaXN9Z2V0QXQodCxlKXtsZXQgaT10Lngscj10Lnkscz10Lnosbz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KG9bMF0pLm11bHRpcGx5U2NhbGFyKC4yODIwOTUpLGUuYWRkU2NhbGVkVmVjdG9yKG9bMV0sLjQ4ODYwMypyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzJdLC40ODg2MDMqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1szXSwuNDg4NjAzKmkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNF0sMS4wOTI1NDgqKGkqcikpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNV0sMS4wOTI1NDgqKHIqcykpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNl0sLjMxNTM5MiooMypzKnMtMSkpLGUuYWRkU2NhbGVkVmVjdG9yKG9bN10sMS4wOTI1NDgqKGkqcykpLGUuYWRkU2NhbGVkVmVjdG9yKG9bOF0sLjU0NjI3NCooaSppLXIqcikpLGV9Z2V0SXJyYWRpYW5jZUF0KHQsZSl7bGV0IGk9dC54LHI9dC55LHM9dC56LG89dGhpcy5jb2VmZmljaWVudHM7cmV0dXJuIGUuY29weShvWzBdKS5tdWx0aXBseVNjYWxhciguODg2MjI3KSxlLmFkZFNjYWxlZFZlY3RvcihvWzFdLDIqLjUxMTY2NCpyKSxlLmFkZFNjYWxlZFZlY3RvcihvWzJdLDIqLjUxMTY2NCpzKSxlLmFkZFNjYWxlZFZlY3RvcihvWzNdLDIqLjUxMTY2NCppKSxlLmFkZFNjYWxlZFZlY3RvcihvWzRdLDIqLjQyOTA0MyppKnIpLGUuYWRkU2NhbGVkVmVjdG9yKG9bNV0sMiouNDI5MDQzKnIqcyksZS5hZGRTY2FsZWRWZWN0b3Iob1s2XSwuNzQzMTI1KnMqcy0uMjQ3NzA4KSxlLmFkZFNjYWxlZFZlY3RvcihvWzddLDIqLjQyOTA0MyppKnMpLGUuYWRkU2NhbGVkVmVjdG9yKG9bOF0sLjQyOTA0MyooaSppLXIqcikpLGV9YWRkKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0uYWRkKHQuY29lZmZpY2llbnRzW2VdKTtyZXR1cm4gdGhpc31hZGRTY2FsZWRTSCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0uYWRkU2NhbGVkVmVjdG9yKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfXNjYWxlKHQpe2ZvcihsZXQgZT0wO2U8OTtlKyspdGhpcy5jb2VmZmljaWVudHNbZV0ubXVsdGlwbHlTY2FsYXIodCk7cmV0dXJuIHRoaXN9bGVycCh0LGUpe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5jb2VmZmljaWVudHNbaV0ubGVycCh0LmNvZWZmaWNpZW50c1tpXSxlKTtyZXR1cm4gdGhpc31lcXVhbHModCl7Zm9yKGxldCBlPTA7ZTw5O2UrKylpZighdGhpcy5jb2VmZmljaWVudHNbZV0uZXF1YWxzKHQuY29lZmZpY2llbnRzW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH1jb3B5KHQpe3JldHVybiB0aGlzLnNldCh0LmNvZWZmaWNpZW50cyl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWZyb21BcnJheSh0LGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLmZyb21BcnJheSh0LGUrciozKTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10sZT0wKXtsZXQgaT10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IHI9MDtyPDk7cisrKWlbcl0udG9BcnJheSh0LGUrciozKTtyZXR1cm4gdH1zdGF0aWMgZ2V0QmFzaXNBdCh0LGUpe2xldCBpPXQueCxyPXQueSxzPXQuejtlWzBdPS4yODIwOTUsZVsxXT0uNDg4NjAzKnIsZVsyXT0uNDg4NjAzKnMsZVszXT0uNDg4NjAzKmksZVs0XT0xLjA5MjU0OCppKnIsZVs1XT0xLjA5MjU0OCpyKnMsZVs2XT0uMzE1MzkyKigzKnMqcy0xKSxlWzddPTEuMDkyNTQ4KmkqcyxlWzhdPS41NDYyNzQqKGkqaS1yKnIpfX07QWwucHJvdG90eXBlLmlzU3BoZXJpY2FsSGFybW9uaWNzMz0hMDt2YXIgRW89Y2xhc3MgZXh0ZW5kcyBZZXtjb25zdHJ1Y3Rvcih0PW5ldyBBbCxlPTEpe3N1cGVyKHZvaWQgMCxlKSx0aGlzLnNoPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnNoLmNvcHkodC5zaCksdGhpc31mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5pbnRlbnNpdHk9dC5pbnRlbnNpdHksdGhpcy5zaC5mcm9tQXJyYXkodC5zaCksdGhpc310b0pTT04odCl7bGV0IGU9c3VwZXIudG9KU09OKHQpO3JldHVybiBlLm9iamVjdC5zaD10aGlzLnNoLnRvQXJyYXkoKSxlfX07RW8ucHJvdG90eXBlLmlzTGlnaHRQcm9iZT0hMDt2YXIgRGg9Y2xhc3N7c3RhdGljIGRlY29kZVRleHQodCl7aWYodHlwZW9mIFRleHREZWNvZGVyIT0idW5kZWZpbmVkIilyZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2goaSl7cmV0dXJuIGV9fXN0YXRpYyBleHRyYWN0VXJsQmFzZSh0KXtsZXQgZT10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIGU9PT0tMT8iLi8iOnQuc3Vic3RyKDAsZSsxKX1zdGF0aWMgcmVzb2x2ZVVSTCh0LGUpe3JldHVybiB0eXBlb2YgdCE9InN0cmluZyJ8fHQ9PT0iIj8iIjooL15odHRwcz86XC9cLy9pLnRlc3QoZSkmJi9eXC8vLnRlc3QodCkmJihlPWUucmVwbGFjZSgvKF5odHRwcz86XC9cL1teXC9dKykuKi9pLCIkMSIpKSwvXihodHRwcz86KT9cL1wvL2kudGVzdCh0KXx8L15kYXRhOi4qLC4qJC9pLnRlc3QodCl8fC9eYmxvYjouKiQvaS50ZXN0KHQpP3Q6ZSt0KX19LEloPWNsYXNzIGV4dGVuZHMgSHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiLHRoaXMuaW5zdGFuY2VDb3VudD0xLzB9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlQ291bnQ9dC5pbnN0YW5jZUNvdW50LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTih0aGlzKTtyZXR1cm4gdC5pbnN0YW5jZUNvdW50PXRoaXMuaW5zdGFuY2VDb3VudCx0LmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITAsdH19O0loLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwO3ZhciBOaD1jbGFzcyBleHRlbmRzIG1ue2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcD09InVuZGVmaW5lZCImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGNyZWF0ZUltYWdlQml0bWFwKCkgbm90IHN1cHBvcnRlZC4iKSx0eXBlb2YgZmV0Y2g9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBmZXRjaCgpIG5vdCBzdXBwb3J0ZWQuIiksdGhpcy5vcHRpb25zPXtwcmVtdWx0aXBseUFscGhhOiJub25lIn19c2V0T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5vcHRpb25zPXQsdGhpc31sb2FkKHQsZSxpLHIpe3Q9PT12b2lkIDAmJih0PSIiKSx0aGlzLnBhdGghPT12b2lkIDAmJih0PXRoaXMucGF0aCt0KSx0PXRoaXMubWFuYWdlci5yZXNvbHZlVVJMKHQpO2xldCBzPXRoaXMsbz1qci5nZXQodCk7aWYobyE9PXZvaWQgMClyZXR1cm4gcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZSYmZShvKSxzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztsZXQgYT17fTthLmNyZWRlbnRpYWxzPXRoaXMuY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj8ic2FtZS1vcmlnaW4iOiJpbmNsdWRlIixhLmhlYWRlcnM9dGhpcy5yZXF1ZXN0SGVhZGVyLGZldGNoKHQsYSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gbC5ibG9iKCl9KS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBjcmVhdGVJbWFnZUJpdG1hcChsLE9iamVjdC5hc3NpZ24ocy5vcHRpb25zLHtjb2xvclNwYWNlQ29udmVyc2lvbjoibm9uZSJ9KSl9KS50aGVuKGZ1bmN0aW9uKGwpe2pyLmFkZCh0LGwpLGUmJmUobCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9KS5jYXRjaChmdW5jdGlvbihsKXtyJiZyKGwpLHMubWFuYWdlci5pdGVtRXJyb3IodCkscy5tYW5hZ2VyLml0ZW1FbmQodCl9KSxzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfX07TmgucHJvdG90eXBlLmlzSW1hZ2VCaXRtYXBMb2FkZXI9ITA7dmFyIEphLGhUPXtnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEphPT09dm9pZCAwJiYoSmE9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxKYX0sc2V0Q29udGV4dDpmdW5jdGlvbihuKXtKYT1ufX0sRmg9Y2xhc3MgZXh0ZW5kcyBtbntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBzPXRoaXMsbz1uZXcgYmgodGhpcy5tYW5hZ2VyKTtvLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxvLnNldFBhdGgodGhpcy5wYXRoKSxvLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxvLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksby5sb2FkKHQsZnVuY3Rpb24oYSl7dHJ5e2xldCBsPWEuc2xpY2UoMCk7aFQuZ2V0Q29udGV4dCgpLmRlY29kZUF1ZGlvRGF0YShsLGZ1bmN0aW9uKHUpe2UodSl9KX1jYXRjaChsKXtyP3IobCk6Y29uc29sZS5lcnJvcihsKSxzLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0saSxyKX19LHpoPWNsYXNzIGV4dGVuZHMgRW97Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodm9pZCAwLGkpO2xldCByPW5ldyBmdCgpLnNldCh0KSxzPW5ldyBmdCgpLnNldChlKSxvPW5ldyBUKHIucixyLmcsci5iKSxhPW5ldyBUKHMucixzLmcscy5iKSxsPU1hdGguc3FydChNYXRoLlBJKSxjPWwqTWF0aC5zcXJ0KC43NSk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uY29weShvKS5hZGQoYSkubXVsdGlwbHlTY2FsYXIobCksdGhpcy5zaC5jb2VmZmljaWVudHNbMV0uY29weShvKS5zdWIoYSkubXVsdGlwbHlTY2FsYXIoYyl9fTt6aC5wcm90b3R5cGUuaXNIZW1pc3BoZXJlTGlnaHRQcm9iZT0hMDt2YXIgVWg9Y2xhc3MgZXh0ZW5kcyBFb3tjb25zdHJ1Y3Rvcih0LGU9MSl7c3VwZXIodm9pZCAwLGUpO2xldCBpPW5ldyBmdCgpLnNldCh0KTt0aGlzLnNoLmNvZWZmaWNpZW50c1swXS5zZXQoaS5yLGkuZyxpLmIpLm11bHRpcGx5U2NhbGFyKDIqTWF0aC5zcXJ0KE1hdGguUEkpKX19O1VoLnByb3RvdHlwZS5pc0FtYmllbnRMaWdodFByb2JlPSEwO3ZhciBCaD1jbGFzcyBleHRlbmRzIGt0e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpbyIsdGhpcy5saXN0ZW5lcj10LHRoaXMuY29udGV4dD10LmNvbnRleHQsdGhpcy5nYWluPXRoaXMuY29udGV4dC5jcmVhdGVHYWluKCksdGhpcy5nYWluLmNvbm5lY3QodC5nZXRJbnB1dCgpKSx0aGlzLmF1dG9wbGF5PSExLHRoaXMuYnVmZmVyPW51bGwsdGhpcy5kZXR1bmU9MCx0aGlzLmxvb3A9ITEsdGhpcy5sb29wU3RhcnQ9MCx0aGlzLmxvb3BFbmQ9MCx0aGlzLm9mZnNldD0wLHRoaXMuZHVyYXRpb249dm9pZCAwLHRoaXMucGxheWJhY2tSYXRlPTEsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITAsdGhpcy5zb3VyY2U9bnVsbCx0aGlzLnNvdXJjZVR5cGU9ImVtcHR5Iix0aGlzLl9zdGFydGVkQXQ9MCx0aGlzLl9wcm9ncmVzcz0wLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLmZpbHRlcnM9W119Z2V0T3V0cHV0KCl7cmV0dXJuIHRoaXMuZ2Fpbn1zZXROb2RlU291cmNlKHQpe3JldHVybiB0aGlzLmhhc1BsYXliYWNrQ29udHJvbD0hMSx0aGlzLnNvdXJjZVR5cGU9ImF1ZGlvTm9kZSIsdGhpcy5zb3VyY2U9dCx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldE1lZGlhRWxlbWVudFNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYVN0cmVhbVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJtZWRpYVN0cmVhbU5vZGUiLHRoaXMuc291cmNlPXRoaXMuY29udGV4dC5jcmVhdGVNZWRpYVN0cmVhbVNvdXJjZSh0KSx0aGlzLmNvbm5lY3QoKSx0aGlzfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzLnNvdXJjZVR5cGU9ImJ1ZmZlciIsdGhpcy5hdXRvcGxheSYmdGhpcy5wbGF5KCksdGhpc31wbGF5KHQ9MCl7aWYodGhpcy5pc1BsYXlpbmc9PT0hMCl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO3JldHVybn1pZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn10aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5fcHJvZ3Jlc3MrPU1hdGgubWF4KHRoaXMuY29udGV4dC5jdXJyZW50VGltZS10aGlzLl9zdGFydGVkQXQsMCkqdGhpcy5wbGF5YmFja1JhdGUsdGhpcy5sb29wPT09ITAmJih0aGlzLl9wcm9ncmVzcz10aGlzLl9wcm9ncmVzcyUodGhpcy5kdXJhdGlvbnx8dGhpcy5idWZmZXIuZHVyYXRpb24pKSx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExKSx0aGlzfXN0b3AoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLnNvdXJjZS5zdG9wKCksdGhpcy5zb3VyY2Uub25lbmRlZD1udWxsLHRoaXMuaXNQbGF5aW5nPSExLHRoaXN9Y29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmNvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5jb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSEwLHRoaXN9ZGlzY29ubmVjdCgpe2lmKHRoaXMuZmlsdGVycy5sZW5ndGg+MCl7dGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmZpbHRlcnNbMF0pO2ZvcihsZXQgdD0xLGU9dGhpcy5maWx0ZXJzLmxlbmd0aDt0PGU7dCsrKXRoaXMuZmlsdGVyc1t0LTFdLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzW3RdKTt0aGlzLmZpbHRlcnNbdGhpcy5maWx0ZXJzLmxlbmd0aC0xXS5kaXNjb25uZWN0KHRoaXMuZ2V0T3V0cHV0KCkpfWVsc2UgdGhpcy5zb3VyY2UuZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKTtyZXR1cm4gdGhpcy5fY29ubmVjdGVkPSExLHRoaXN9Z2V0RmlsdGVycygpe3JldHVybiB0aGlzLmZpbHRlcnN9c2V0RmlsdGVycyh0KXtyZXR1cm4gdHx8KHQ9W10pLHRoaXMuX2Nvbm5lY3RlZD09PSEwPyh0aGlzLmRpc2Nvbm5lY3QoKSx0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXMuY29ubmVjdCgpKTp0aGlzLmZpbHRlcnM9dC5zbGljZSgpLHRoaXN9c2V0RGV0dW5lKHQpe2lmKHRoaXMuZGV0dW5lPXQsdGhpcy5zb3VyY2UuZGV0dW5lIT09dm9pZCAwKXJldHVybiB0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLnBsYXliYWNrUmF0ZT10LHRoaXMuaXNQbGF5aW5nPT09ITAmJnRoaXMuc291cmNlLnBsYXliYWNrUmF0ZS5zZXRUYXJnZXRBdFRpbWUodGhpcy5wbGF5YmFja1JhdGUsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc31nZXRQbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5wbGF5YmFja1JhdGV9b25FbmRlZCgpe3RoaXMuaXNQbGF5aW5nPSExfWdldExvb3AoKXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMT8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMubG9vcD10LHRoaXMuaXNQbGF5aW5nPT09ITAmJih0aGlzLnNvdXJjZS5sb29wPXRoaXMubG9vcCksdGhpc31zZXRMb29wU3RhcnQodCl7cmV0dXJuIHRoaXMubG9vcFN0YXJ0PXQsdGhpc31zZXRMb29wRW5kKHQpe3JldHVybiB0aGlzLmxvb3BFbmQ9dCx0aGlzfWdldFZvbHVtZSgpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi52YWx1ZX1zZXRWb2x1bWUodCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnNldFRhcmdldEF0VGltZSh0LHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9fTt2YXIgT2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTIwNDgpe3RoaXMuYW5hbHlzZXI9dC5jb250ZXh0LmNyZWF0ZUFuYWx5c2VyKCksdGhpcy5hbmFseXNlci5mZnRTaXplPWUsdGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHRoaXMuYW5hbHlzZXIuZnJlcXVlbmN5QmluQ291bnQpLHQuZ2V0T3V0cHV0KCkuY29ubmVjdCh0aGlzLmFuYWx5c2VyKX1nZXRGcmVxdWVuY3lEYXRhKCl7cmV0dXJuIHRoaXMuYW5hbHlzZXIuZ2V0Qnl0ZUZyZXF1ZW5jeURhdGEodGhpcy5kYXRhKSx0aGlzLmRhdGF9Z2V0QXZlcmFnZUZyZXF1ZW5jeSgpe2xldCB0PTAsZT10aGlzLmdldEZyZXF1ZW5jeURhdGEoKTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0Kz1lW2ldO3JldHVybiB0L2UubGVuZ3RofX0sa2g9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuYmluZGluZz10LHRoaXMudmFsdWVTaXplPWk7bGV0IHIscyxvO3N3aXRjaChlKXtjYXNlInF1YXRlcm5pb24iOnI9dGhpcy5fc2xlcnAscz10aGlzLl9zbGVycEFkZGl0aXZlLG89dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24sdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheShpKjYpLHRoaXMuX3dvcmtJbmRleD01O2JyZWFrO2Nhc2Uic3RyaW5nIjpjYXNlImJvb2wiOnI9dGhpcy5fc2VsZWN0LHM9dGhpcy5fc2VsZWN0LG89dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyLHRoaXMuYnVmZmVyPW5ldyBBcnJheShpKjUpO2JyZWFrO2RlZmF1bHQ6cj10aGlzLl9sZXJwLHM9dGhpcy5fbGVycEFkZGl0aXZlLG89dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMsdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheShpKjUpfXRoaXMuX21peEJ1ZmZlclJlZ2lvbj1yLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlPXMsdGhpcy5fc2V0SWRlbnRpdHk9byx0aGlzLl9vcmlnSW5kZXg9Myx0aGlzLl9hZGRJbmRleD00LHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsdGhpcy51c2VDb3VudD0wLHRoaXMucmVmZXJlbmNlQ291bnQ9MH1hY2N1bXVsYXRlKHQsZSl7bGV0IGk9dGhpcy5idWZmZXIscj10aGlzLnZhbHVlU2l6ZSxzPXQqcityLG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKG89PT0wKXtmb3IobGV0IGE9MDthIT09cjsrK2EpaVtzK2FdPWlbYV07bz1lfWVsc2V7bys9ZTtsZXQgYT1lL287dGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscywwLGEscil9dGhpcy5jdW11bGF0aXZlV2VpZ2h0PW99YWNjdW11bGF0ZUFkZGl0aXZlKHQpe2xldCBlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX2FkZEluZGV4O3RoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPT09MCYmdGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShlLHIsMCx0LGkpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlKz10fWFwcGx5KHQpe2xldCBlPXRoaXMudmFsdWVTaXplLGk9dGhpcy5idWZmZXIscj10KmUrZSxzPXRoaXMuY3VtdWxhdGl2ZVdlaWdodCxvPXRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlLGE9dGhpcy5iaW5kaW5nO2lmKHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsczwxKXtsZXQgbD1lKnRoaXMuX29yaWdJbmRleDt0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxyLGwsMS1zLGUpfW8+MCYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoaSxyLHRoaXMuX2FkZEluZGV4KmUsMSxlKTtmb3IobGV0IGw9ZSxjPWUrZTtsIT09YzsrK2wpaWYoaVtsXSE9PWlbbCtlXSl7YS5zZXRWYWx1ZShpLHIpO2JyZWFrfX1zYXZlT3JpZ2luYWxTdGF0ZSgpe2xldCB0PXRoaXMuYmluZGluZyxlPXRoaXMuYnVmZmVyLGk9dGhpcy52YWx1ZVNpemUscj1pKnRoaXMuX29yaWdJbmRleDt0LmdldFZhbHVlKGUscik7Zm9yKGxldCBzPWksbz1yO3MhPT1vOysrcyllW3NdPWVbcitzJWldO3RoaXMuX3NldElkZW50aXR5KCksdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MH1yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpe2xldCB0PXRoaXMudmFsdWVTaXplKjM7dGhpcy5iaW5kaW5nLnNldFZhbHVlKHRoaXMuYnVmZmVyLHQpfV9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpe2xldCB0PXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplLGU9dCt0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9dDtpPGU7aSsrKXRoaXMuYnVmZmVyW2ldPTB9X3NldEFkZGl0aXZlSWRlbnRpdHlRdWF0ZXJuaW9uKCl7dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMoKSx0aGlzLmJ1ZmZlclt0aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZSszXT0xfV9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIoKXtsZXQgdD10aGlzLl9vcmlnSW5kZXgqdGhpcy52YWx1ZVNpemUsZT10aGlzLl9hZGRJbmRleCp0aGlzLnZhbHVlU2l6ZTtmb3IobGV0IGk9MDtpPHRoaXMudmFsdWVTaXplO2krKyl0aGlzLmJ1ZmZlcltlK2ldPXRoaXMuYnVmZmVyW3QraV19X3NlbGVjdCh0LGUsaSxyLHMpe2lmKHI+PS41KWZvcihsZXQgbz0wO28hPT1zOysrbyl0W2Urb109dFtpK29dfV9zbGVycCh0LGUsaSxyKXtFZS5zbGVycEZsYXQodCxlLHQsZSx0LGkscil9X3NsZXJwQWRkaXRpdmUodCxlLGkscixzKXtsZXQgbz10aGlzLl93b3JrSW5kZXgqcztFZS5tdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LG8sdCxlLHQsaSksRWUuc2xlcnBGbGF0KHQsZSx0LGUsdCxvLHIpfV9sZXJwKHQsZSxpLHIscyl7bGV0IG89MS1yO2ZvcihsZXQgYT0wO2EhPT1zOysrYSl7bGV0IGw9ZSthO3RbbF09dFtsXSpvK3RbaSthXSpyfX1fbGVycEFkZGl0aXZlKHQsZSxpLHIscyl7Zm9yKGxldCBvPTA7byE9PXM7KytvKXtsZXQgYT1lK287dFthXT10W2FdK3RbaStvXSpyfX19LGVmPSJcXFtcXF1cXC46XFwvIixmVD1uZXcgUmVnRXhwKCJbIitlZisiXSIsImciKSxuZj0iW14iK2VmKyJdIixkVD0iW14iK2VmLnJlcGxhY2UoIlxcLiIsIiIpKyJdIixwVD0vKCg/OldDK1tcLzpdKSopLy5zb3VyY2UucmVwbGFjZSgiV0MiLG5mKSxtVD0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixkVCksZ1Q9Lyg/OlwuKFdDKykoPzpcWyguKylcXSk/KT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsbmYpLHhUPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixuZikseVQ9bmV3IFJlZ0V4cCgiXiIrcFQrbVQrZ1QreFQrIiQiKSx2VD1bIm1hdGVyaWFsIiwibWF0ZXJpYWxzIiwiYm9uZXMiXSxIaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9aXx8TnQucGFyc2VUcmFja05hbWUoZSk7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8oZSxyKX1nZXRWYWx1ZSh0LGUpe3RoaXMuYmluZCgpO2xldCBpPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxyPXRoaXMuX2JpbmRpbmdzW2ldO3IhPT12b2lkIDAmJnIuZ2V0VmFsdWUodCxlKX1zZXRWYWx1ZSh0LGUpe2xldCBpPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18scz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXS5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IGU9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLGk9dC5sZW5ndGg7ZSE9PWk7KytlKXRbZV0uYmluZCgpfXVuYmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18saT10Lmxlbmd0aDtlIT09aTsrK2UpdFtlXS51bmJpbmQoKX19LE50PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnBhdGg9ZSx0aGlzLnBhcnNlZFBhdGg9aXx8TnQucGFyc2VUcmFja05hbWUoZSksdGhpcy5ub2RlPU50LmZpbmROb2RlKHQsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8dCx0aGlzLnJvb3ROb2RlPXQsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH1zdGF0aWMgY3JlYXRlKHQsZSxpKXtyZXR1cm4gdCYmdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBOdC5Db21wb3NpdGUodCxlLGkpOm5ldyBOdCh0LGUsaSl9c3RhdGljIHNhbml0aXplTm9kZU5hbWUodCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoZlQsIiIpfXN0YXRpYyBwYXJzZVRyYWNrTmFtZSh0KXtsZXQgZT15VC5leGVjKHQpO2lmKCFlKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBDYW5ub3QgcGFyc2UgdHJhY2tOYW1lOiAiK3QpO2xldCBpPXtub2RlTmFtZTplWzJdLG9iamVjdE5hbWU6ZVszXSxvYmplY3RJbmRleDplWzRdLHByb3BlcnR5TmFtZTplWzVdLHByb3BlcnR5SW5kZXg6ZVs2XX0scj1pLm5vZGVOYW1lJiZpLm5vZGVOYW1lLmxhc3RJbmRleE9mKCIuIik7aWYociE9PXZvaWQgMCYmciE9PS0xKXtsZXQgcz1pLm5vZGVOYW1lLnN1YnN0cmluZyhyKzEpO3ZULmluZGV4T2YocykhPT0tMSYmKGkubm9kZU5hbWU9aS5ub2RlTmFtZS5zdWJzdHJpbmcoMCxyKSxpLm9iamVjdE5hbWU9cyl9aWYoaS5wcm9wZXJ0eU5hbWU9PT1udWxsfHxpLnByb3BlcnR5TmFtZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIit0KTtyZXR1cm4gaX1zdGF0aWMgZmluZE5vZGUodCxlKXtpZighZXx8ZT09PSIifHxlPT09Ii4ifHxlPT09LTF8fGU9PT10Lm5hbWV8fGU9PT10LnV1aWQpcmV0dXJuIHQ7aWYodC5za2VsZXRvbil7bGV0IGk9dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKGUpO2lmKGkhPT12b2lkIDApcmV0dXJuIGl9aWYodC5jaGlsZHJlbil7bGV0IGk9ZnVuY3Rpb24ocyl7Zm9yKGxldCBvPTA7bzxzLmxlbmd0aDtvKyspe2xldCBhPXNbb107aWYoYS5uYW1lPT09ZXx8YS51dWlkPT09ZSlyZXR1cm4gYTtsZXQgbD1pKGEuY2hpbGRyZW4pO2lmKGwpcmV0dXJuIGx9cmV0dXJuIG51bGx9LHI9aSh0LmNoaWxkcmVuKTtpZihyKXJldHVybiByfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdCh0LGUpe3RbZV09dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheSh0LGUpe2xldCBpPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHI9MCxzPWkubGVuZ3RoO3IhPT1zOysrcil0W2UrK109aVtyXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KHQsZSl7dFtlXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KHQsZSl9X3NldFZhbHVlX2RpcmVjdCh0LGUpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W2VdfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheSh0LGUpe2xldCBpPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IHI9MCxzPWkubGVuZ3RoO3IhPT1zOysrcilpW3JdPXRbZSsrXX1fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXtsZXQgaT10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCByPTAscz1pLmxlbmd0aDtyIT09czsrK3IpaVtyXT10W2UrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtlXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxlKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W2VdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKHQsZSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LGUpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LGUpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxlKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKHQsZSl7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZSh0LGUpfV9zZXRWYWx1ZV91bmJvdW5kKHQsZSl7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZSh0LGUpfWJpbmQoKXtsZXQgdD10aGlzLm5vZGUsZT10aGlzLnBhcnNlZFBhdGgsaT1lLm9iamVjdE5hbWUscj1lLnByb3BlcnR5TmFtZSxzPWUucHJvcGVydHlJbmRleDtpZih0fHwodD1OdC5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLGUubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT10KSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO3JldHVybn1pZihpKXtsZXQgYz1lLm9iamVjdEluZGV4O3N3aXRjaChpKXtjYXNlIm1hdGVyaWFscyI6aWYoIXQubWF0ZXJpYWwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7cmV0dXJufWlmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO3JldHVybn10PXQubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCF0LnNrZWxldG9uKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3JldHVybn10PXQuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5uYW1lPT09Yyl7Yz11O2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodFtpXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO3JldHVybn10PXRbaV19aWYoYyE9PXZvaWQgMCl7aWYodFtjXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyx0KTtyZXR1cm59dD10W2NdfX1sZXQgbz10W3JdO2lmKG89PT12b2lkIDApe2xldCBjPWUubm9kZU5hbWU7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitjKyIuIityKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO3JldHVybn1sZXQgYT10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD10LHQubmVlZHNVcGRhdGUhPT12b2lkIDA/YT10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlIT09dm9pZCAwJiYoYT10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGw9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYocyE9PXZvaWQgMCl7aWYocj09PSJtb3JwaFRhcmdldEluZmx1ZW5jZXMiKXtpZighdC5nZW9tZXRyeSl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtyZXR1cm59aWYodC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXtpZighdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3JldHVybn10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXSE9PXZvaWQgMCYmKHM9dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10pfWVsc2V7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO3JldHVybn19bD10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9byx0aGlzLnByb3BlcnR5SW5kZXg9c31lbHNlIG8uZnJvbUFycmF5IT09dm9pZCAwJiZvLnRvQXJyYXkhPT12b2lkIDA/KGw9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9byk6QXJyYXkuaXNBcnJheShvKT8obD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1vKTp0aGlzLnByb3BlcnR5TmFtZT1yO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2xdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tsXVthXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX07TnQuQ29tcG9zaXRlPUhoO050LnByb3RvdHlwZS5CaW5kaW5nVHlwZT17RGlyZWN0OjAsRW50aXJlQXJyYXk6MSxBcnJheUVsZW1lbnQ6MixIYXNGcm9tVG9BcnJheTozfTtOdC5wcm90b3R5cGUuVmVyc2lvbmluZz17Tm9uZTowLE5lZWRzVXBkYXRlOjEsTWF0cml4V29ybGROZWVkc1VwZGF0ZToyfTtOdC5wcm90b3R5cGUuR2V0dGVyQnlCaW5kaW5nVHlwZT1bTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9kaXJlY3QsTnQucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheSxOdC5wcm90b3R5cGUuX2dldFZhbHVlX2FycmF5RWxlbWVudCxOdC5wcm90b3R5cGUuX2dldFZhbHVlX3RvQXJyYXldO050LnByb3RvdHlwZS5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZz1bW050LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtOdC5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUsTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnQsTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TmVlZHNVcGRhdGUsTnQucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheUVsZW1lbnRfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW050LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5LE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlLE50LnByb3RvdHlwZS5fc2V0VmFsdWVfZnJvbUFycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdXTt2YXIgVmg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnV1aWQ9dG4oKSx0aGlzLl9vYmplY3RzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksdGhpcy5uQ2FjaGVkT2JqZWN0c189MDtsZXQgdD17fTt0aGlzLl9pbmRpY2VzQnlVVUlEPXQ7Zm9yKGxldCBpPTAscj1hcmd1bWVudHMubGVuZ3RoO2khPT1yOysraSl0W2FyZ3VtZW50c1tpXS51dWlkXT1pO3RoaXMuX3BhdGhzPVtdLHRoaXMuX3BhcnNlZFBhdGhzPVtdLHRoaXMuX2JpbmRpbmdzPVtdLHRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aD17fTtsZXQgZT10aGlzO3RoaXMuc3RhdHM9e29iamVjdHM6e2dldCB0b3RhbCgpe3JldHVybiBlLl9vYmplY3RzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHRoaXMudG90YWwtZS5uQ2FjaGVkT2JqZWN0c199fSxnZXQgYmluZGluZ3NQZXJPYmplY3QoKXtyZXR1cm4gZS5fYmluZGluZ3MubGVuZ3RofX19YWRkKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsaT10aGlzLl9wYXRocyxyPXRoaXMuX3BhcnNlZFBhdGhzLHM9dGhpcy5fYmluZGluZ3Msbz1zLmxlbmd0aCxhLGw9dC5sZW5ndGgsYz10aGlzLm5DYWNoZWRPYmplY3RzXztmb3IobGV0IHU9MCxoPWFyZ3VtZW50cy5sZW5ndGg7dSE9PWg7Kyt1KXtsZXQgZj1hcmd1bWVudHNbdV0sZD1mLnV1aWQsZz1lW2RdO2lmKGc9PT12b2lkIDApe2c9bCsrLGVbZF09Zyx0LnB1c2goZik7Zm9yKGxldCB4PTAsdj1vO3ghPT12OysreClzW3hdLnB1c2gobmV3IE50KGYsaVt4XSxyW3hdKSl9ZWxzZSBpZihnPGMpe2E9dFtnXTtsZXQgeD0tLWMsdj10W3hdO2Vbdi51dWlkXT1nLHRbZ109dixlW2RdPXgsdFt4XT1mO2ZvcihsZXQgbT0wLHA9bzttIT09cDsrK20pe2xldCBiPXNbbV0sXz1iW3hdLFM9YltnXTtiW2ddPV8sUz09PXZvaWQgMCYmKFM9bmV3IE50KGYsaVttXSxyW21dKSksYlt4XT1TfX1lbHNlIHRbZ10hPT1hJiZjb25zb2xlLmVycm9yKCJUSFJFRS5BbmltYXRpb25PYmplY3RHcm91cDogRGlmZmVyZW50IG9iamVjdHMgd2l0aCB0aGUgc2FtZSBVVUlEIGRldGVjdGVkLiBDbGVhbiB0aGUgY2FjaGVzIG9yIHJlY3JlYXRlIHlvdXIgaW5mcmFzdHJ1Y3R1cmUgd2hlbiByZWxvYWRpbmcgc2NlbmVzLiIpfXRoaXMubkNhY2hlZE9iamVjdHNfPWN9cmVtb3ZlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsaT10aGlzLl9iaW5kaW5ncyxyPWkubGVuZ3RoLHM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCBvPTAsYT1hcmd1bWVudHMubGVuZ3RoO28hPT1hOysrbyl7bGV0IGw9YXJndW1lbnRzW29dLGM9bC51dWlkLHU9ZVtjXTtpZih1IT09dm9pZCAwJiZ1Pj1zKXtsZXQgaD1zKyssZj10W2hdO2VbZi51dWlkXT11LHRbdV09ZixlW2NdPWgsdFtoXT1sO2ZvcihsZXQgZD0wLGc9cjtkIT09ZzsrK2Qpe2xldCB4PWlbZF0sdj14W2hdLG09eFt1XTt4W3VdPXYseFtoXT1tfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189c311bmNhY2hlKCl7bGV0IHQ9dGhpcy5fb2JqZWN0cyxlPXRoaXMuX2luZGljZXNCeVVVSUQsaT10aGlzLl9iaW5kaW5ncyxyPWkubGVuZ3RoLHM9dGhpcy5uQ2FjaGVkT2JqZWN0c18sbz10Lmxlbmd0aDtmb3IobGV0IGE9MCxsPWFyZ3VtZW50cy5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1hcmd1bWVudHNbYV0sdT1jLnV1aWQsaD1lW3VdO2lmKGghPT12b2lkIDApaWYoZGVsZXRlIGVbdV0saDxzKXtsZXQgZj0tLXMsZD10W2ZdLGc9LS1vLHg9dFtnXTtlW2QudXVpZF09aCx0W2hdPWQsZVt4LnV1aWRdPWYsdFtmXT14LHQucG9wKCk7Zm9yKGxldCB2PTAsbT1yO3YhPT1tOysrdil7bGV0IHA9aVt2XSxiPXBbZl0sXz1wW2ddO3BbaF09YixwW2ZdPV8scC5wb3AoKX19ZWxzZXtsZXQgZj0tLW8sZD10W2ZdO2Y+MCYmKGVbZC51dWlkXT1oKSx0W2hdPWQsdC5wb3AoKTtmb3IobGV0IGc9MCx4PXI7ZyE9PXg7KytnKXtsZXQgdj1pW2ddO3ZbaF09dltmXSx2LnBvcCgpfX19dGhpcy5uQ2FjaGVkT2JqZWN0c189c31zdWJzY3JpYmVfKHQsZSl7bGV0IGk9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLHI9aVt0XSxzPXRoaXMuX2JpbmRpbmdzO2lmKHIhPT12b2lkIDApcmV0dXJuIHNbcl07bGV0IG89dGhpcy5fcGF0aHMsYT10aGlzLl9wYXJzZWRQYXRocyxsPXRoaXMuX29iamVjdHMsYz1sLmxlbmd0aCx1PXRoaXMubkNhY2hlZE9iamVjdHNfLGg9bmV3IEFycmF5KGMpO3I9cy5sZW5ndGgsaVt0XT1yLG8ucHVzaCh0KSxhLnB1c2goZSkscy5wdXNoKGgpO2ZvcihsZXQgZj11LGQ9bC5sZW5ndGg7ZiE9PWQ7KytmKXtsZXQgZz1sW2ZdO2hbZl09bmV3IE50KGcsdCxlKX1yZXR1cm4gaH11bnN1YnNjcmliZV8odCl7bGV0IGU9dGhpcy5fYmluZGluZ3NJbmRpY2VzQnlQYXRoLGk9ZVt0XTtpZihpIT09dm9pZCAwKXtsZXQgcj10aGlzLl9wYXRocyxzPXRoaXMuX3BhcnNlZFBhdGhzLG89dGhpcy5fYmluZGluZ3MsYT1vLmxlbmd0aC0xLGw9b1thXSxjPXRbYV07ZVtjXT1pLG9baV09bCxvLnBvcCgpLHNbaV09c1thXSxzLnBvcCgpLHJbaV09clthXSxyLnBvcCgpfX19O1ZoLnByb3RvdHlwZS5pc0FuaW1hdGlvbk9iamVjdEdyb3VwPSEwO3ZhciBHaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1udWxsLHI9ZS5ibGVuZE1vZGUpe3RoaXMuX21peGVyPXQsdGhpcy5fY2xpcD1lLHRoaXMuX2xvY2FsUm9vdD1pLHRoaXMuYmxlbmRNb2RlPXI7bGV0IHM9ZS50cmFja3Msbz1zLmxlbmd0aCxhPW5ldyBBcnJheShvKSxsPXtlbmRpbmdTdGFydDpOcixlbmRpbmdFbmQ6TnJ9O2ZvcihsZXQgYz0wO2MhPT1vOysrYyl7bGV0IHU9c1tjXS5jcmVhdGVJbnRlcnBvbGFudChudWxsKTthW2NdPXUsdS5zZXR0aW5ncz1sfXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M9bCx0aGlzLl9pbnRlcnBvbGFudHM9YSx0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzPW5ldyBBcnJheShvKSx0aGlzLl9jYWNoZUluZGV4PW51bGwsdGhpcy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PW51bGwsdGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ9bnVsbCx0aGlzLmxvb3A9WncsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJnRoaXMudGltZVNjYWxlIT09MCYmdGhpcy5fc3RhcnRUaW1lPT09bnVsbCYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxlKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1lLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxlLGkpe2lmKHQuZmFkZU91dChlKSx0aGlzLmZhZGVJbihlKSxpKXtsZXQgcj10aGlzLl9jbGlwLmR1cmF0aW9uLHM9dC5fY2xpcC5kdXJhdGlvbixvPXMvcixhPXIvczt0LndhcnAoMSxvLGUpLHRoaXMud2FycChhLDEsZSl9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxlLGkpe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxlLGkpfXN0b3BGYWRpbmcoKXtsZXQgdD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31zZXRFZmZlY3RpdmVUaW1lU2NhbGUodCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXQsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6dCx0aGlzLnN0b3BXYXJwaW5nKCl9Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX1zZXREdXJhdGlvbih0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi90LHRoaXMuc3RvcFdhcnBpbmcoKX1zeW5jV2l0aCh0KXtyZXR1cm4gdGhpcy50aW1lPXQudGltZSx0aGlzLnRpbWVTY2FsZT10LnRpbWVTY2FsZSx0aGlzLnN0b3BXYXJwaW5nKCl9aGFsdCh0KXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLHQpfXdhcnAodCxlLGkpe2xldCByPXRoaXMuX21peGVyLHM9ci50aW1lLG89dGhpcy50aW1lU2NhbGUsYT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDthPT09bnVsbCYmKGE9ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PWEpO2xldCBsPWEucGFyYW1ldGVyUG9zaXRpb25zLGM9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIGxbMF09cyxsWzFdPXMraSxjWzBdPXQvbyxjWzFdPWUvbyx0aGlzfXN0b3BXYXJwaW5nKCl7bGV0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQsZSxpLHIpe2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuX3VwZGF0ZVdlaWdodCh0KTtyZXR1cm59bGV0IHM9dGhpcy5fc3RhcnRUaW1lO2lmKHMhPT1udWxsKXtsZXQgbD0odC1zKSppO2lmKGw8MHx8aT09PTApcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLGU9aSpsfWUqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgbz10aGlzLl91cGRhdGVUaW1lKGUpLGE9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKGE+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2UgZDA6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShvKSxjW3VdLmFjY3VtdWxhdGVBZGRpdGl2ZShhKTticmVhaztjYXNlIFFoOmRlZmF1bHQ6Zm9yKGxldCB1PTAsaD1sLmxlbmd0aDt1IT09aDsrK3UpbFt1XS5ldmFsdWF0ZShvKSxjW3VdLmFjY3VtdWxhdGUocixhKX19fV91cGRhdGVXZWlnaHQodCl7bGV0IGU9MDtpZih0aGlzLmVuYWJsZWQpe2U9dGhpcy53ZWlnaHQ7bGV0IGk9dGhpcy5fd2VpZ2h0SW50ZXJwb2xhbnQ7aWYoaSE9PW51bGwpe2xldCByPWkuZXZhbHVhdGUodClbMF07ZSo9cix0PmkucGFyYW1ldGVyUG9zaXRpb25zWzFdJiYodGhpcy5zdG9wRmFkaW5nKCkscj09PTAmJih0aGlzLmVuYWJsZWQ9ITEpKX19cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVdlaWdodD1lLGV9X3VwZGF0ZVRpbWVTY2FsZSh0KXtsZXQgZT0wO2lmKCF0aGlzLnBhdXNlZCl7ZT10aGlzLnRpbWVTY2FsZTtsZXQgaT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtpIT09bnVsbCYmKGUqPWkuZXZhbHVhdGUodClbMF0sdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcFdhcnBpbmcoKSxlPT09MD90aGlzLnBhdXNlZD0hMDp0aGlzLnRpbWVTY2FsZT1lKSl9cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT1lLGV9X3VwZGF0ZVRpbWUodCl7bGV0IGU9dGhpcy5fY2xpcC5kdXJhdGlvbixpPXRoaXMubG9vcCxyPXRoaXMudGltZSt0LHM9dGhpcy5fbG9vcENvdW50LG89aT09PUp3O2lmKHQ9PT0wKXJldHVybiBzPT09LTE/cjpvJiYocyYxKT09PTE/ZS1yOnI7aWYoaT09PVl3KXtzPT09LTEmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7dDp7aWYocj49ZSlyPWU7ZWxzZSBpZihyPDApcj0wO2Vsc2V7dGhpcy50aW1lPXI7YnJlYWsgdH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYocz09PS0xJiYodD49MD8ocz0wLHRoaXMuX3NldEVuZGluZ3MoITAsdGhpcy5yZXBldGl0aW9ucz09PTAsbykpOnRoaXMuX3NldEVuZGluZ3ModGhpcy5yZXBldGl0aW9ucz09PTAsITAsbykpLHI+PWV8fHI8MCl7bGV0IGE9TWF0aC5mbG9vcihyL2UpO3ItPWUqYSxzKz1NYXRoLmFicyhhKTtsZXQgbD10aGlzLnJlcGV0aXRpb25zLXM7aWYobDw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxyPXQ+MD9lOjAsdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYobD09PTEpe2xldCBjPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGMsIWMsbyl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLG8pO3RoaXMuX2xvb3BDb3VudD1zLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTphfSl9fWVsc2UgdGhpcy50aW1lPXI7aWYobyYmKHMmMSk9PT0xKXJldHVybiBlLXJ9cmV0dXJuIHJ9X3NldEVuZGluZ3ModCxlLGkpe2xldCByPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7aT8oci5lbmRpbmdTdGFydD1GcixyLmVuZGluZ0VuZD1Gcik6KHQ/ci5lbmRpbmdTdGFydD10aGlzLnplcm9TbG9wZUF0U3RhcnQ/RnI6TnI6ci5lbmRpbmdTdGFydD1lbCxlP3IuZW5kaW5nRW5kPXRoaXMuemVyb1Nsb3BlQXRFbmQ/RnI6TnI6ci5lbmRpbmdFbmQ9ZWwpfV9zY2hlZHVsZUZhZGluZyh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIscz1yLnRpbWUsbz10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtvPT09bnVsbCYmKG89ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PW8pO2xldCBhPW8ucGFyYW1ldGVyUG9zaXRpb25zLGw9by5zYW1wbGVWYWx1ZXM7cmV0dXJuIGFbMF09cyxsWzBdPWUsYVsxXT1zK3QsbFsxXT1pLHRoaXN9fSxXaD1jbGFzcyBleHRlbmRzIElue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LGUpe2xldCBpPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxyPXQuX2NsaXAudHJhY2tzLHM9ci5sZW5ndGgsbz10Ll9wcm9wZXJ0eUJpbmRpbmdzLGE9dC5faW50ZXJwb2xhbnRzLGw9aS51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt1PT09dm9pZCAwJiYodT17fSxjW2xdPXUpO2ZvcihsZXQgaD0wO2ghPT1zOysraCl7bGV0IGY9cltoXSxkPWYubmFtZSxnPXVbZF07aWYoZyE9PXZvaWQgMCkrK2cucmVmZXJlbmNlQ291bnQsb1toXT1nO2Vsc2V7aWYoZz1vW2hdLGchPT12b2lkIDApe2cuX2NhY2hlSW5kZXg9PT1udWxsJiYoKytnLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhnLGwsZCkpO2NvbnRpbnVlfWxldCB4PWUmJmUuX3Byb3BlcnR5QmluZGluZ3NbaF0uYmluZGluZy5wYXJzZWRQYXRoO2c9bmV3IGtoKE50LmNyZWF0ZShpLGQseCksZi5WYWx1ZVR5cGVOYW1lLGYuZ2V0VmFsdWVTaXplKCkpLCsrZy5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZyxsLGQpLG9baF09Z31hW2hdLnJlc3VsdEJ1ZmZlcj1nLmJ1ZmZlcn19X2FjdGl2YXRlQWN0aW9uKHQpe2lmKCF0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7aWYodC5fY2FjaGVJbmRleD09PW51bGwpe2xldCBpPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQscj10Ll9jbGlwLnV1aWQscz10aGlzLl9hY3Rpb25zQnlDbGlwW3JdO3RoaXMuX2JpbmRBY3Rpb24odCxzJiZzLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxyLGkpfWxldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBzPWVbaV07cy51c2VDb3VudCsrPT09MCYmKHRoaXMuX2xlbmRCaW5kaW5nKHMpLHMuc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCBlPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBpPTAscj1lLmxlbmd0aDtpIT09cjsrK2kpe2xldCBzPWVbaV07LS1zLnVzZUNvdW50PT09MCYmKHMucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcocykpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKHQpfX1faW5pdE1lbW9yeU1hbmFnZXIoKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2xldCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtsZXQgZT10Ll9jYWNoZUluZGV4O3JldHVybiBlIT09bnVsbCYmZTx0aGlzLl9uQWN0aXZlQWN0aW9uc31fYWRkSW5hY3RpdmVBY3Rpb24odCxlLGkpe2xldCByPXRoaXMuX2FjdGlvbnMscz10aGlzLl9hY3Rpb25zQnlDbGlwLG89c1tlXTtpZihvPT09dm9pZCAwKW89e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsc1tlXT1vO2Vsc2V7bGV0IGE9by5rbm93bkFjdGlvbnM7dC5fYnlDbGlwQ2FjaGVJbmRleD1hLmxlbmd0aCxhLnB1c2godCl9dC5fY2FjaGVJbmRleD1yLmxlbmd0aCxyLnB1c2godCksby5hY3Rpb25CeVJvb3RbaV09dH1fcmVtb3ZlSW5hY3RpdmVBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPWVbZS5sZW5ndGgtMV0scj10Ll9jYWNoZUluZGV4O2kuX2NhY2hlSW5kZXg9cixlW3JdPWksZS5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7bGV0IHM9dC5fY2xpcC51dWlkLG89dGhpcy5fYWN0aW9uc0J5Q2xpcCxhPW9bc10sbD1hLmtub3duQWN0aW9ucyxjPWxbbC5sZW5ndGgtMV0sdT10Ll9ieUNsaXBDYWNoZUluZGV4O2MuX2J5Q2xpcENhY2hlSW5kZXg9dSxsW3VdPWMsbC5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGw7bGV0IGg9YS5hY3Rpb25CeVJvb3QsZj0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkO2RlbGV0ZSBoW2ZdLGwubGVuZ3RoPT09MCYmZGVsZXRlIG9bc10sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgcz1lW2ldOy0tcy5yZWZlcmVuY2VDb3VudD09PTAmJnRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhzKX19X2xlbmRBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQuX2NhY2hlSW5kZXgscj10aGlzLl9uQWN0aXZlQWN0aW9ucysrLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X3Rha2VCYWNrQWN0aW9uKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10Ll9jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxzPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxzLl9jYWNoZUluZGV4PWksZVtpXT1zfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxlLGkpe2xldCByPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxzPXRoaXMuX2JpbmRpbmdzLG89cltlXTtvPT09dm9pZCAwJiYobz17fSxyW2VdPW8pLG9baV09dCx0Ll9jYWNoZUluZGV4PXMubGVuZ3RoLHMucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5iaW5kaW5nLHI9aS5yb290Tm9kZS51dWlkLHM9aS5wYXRoLG89dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLGE9b1tyXSxsPWVbZS5sZW5ndGgtMV0sYz10Ll9jYWNoZUluZGV4O2wuX2NhY2hlSW5kZXg9YyxlW2NdPWwsZS5wb3AoKSxkZWxldGUgYVtzXSxPYmplY3Qua2V5cyhhKS5sZW5ndGg9PT0wJiZkZWxldGUgb1tyXX1fbGVuZEJpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10Ll9jYWNoZUluZGV4LHI9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKysscz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fY2FjaGVJbmRleD1pLGVbaV09c31fdGFrZUJhY2tCaW5kaW5nKHQpe2xldCBlPXRoaXMuX2JpbmRpbmdzLGk9dC5fY2FjaGVJbmRleCxyPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLHM9ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LHMuX2NhY2hlSW5kZXg9aSxlW2ldPXN9X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtsZXQgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGU9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxpPXRbZV07cmV0dXJuIGk9PT12b2lkIDAmJihpPW5ldyBfbChuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSxpLl9fY2FjaGVJbmRleD1lLHRbZV09aSksaX1fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCl7bGV0IGU9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxpPXQuX19jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxzPWVbcl07dC5fX2NhY2hlSW5kZXg9cixlW3JdPXQscy5fX2NhY2hlSW5kZXg9aSxlW2ldPXN9Y2xpcEFjdGlvbih0LGUsaSl7bGV0IHI9ZXx8dGhpcy5fcm9vdCxzPXIudXVpZCxvPXR5cGVvZiB0PT0ic3RyaW5nIj9NbC5maW5kQnlOYW1lKHIsdCk6dCxhPW8hPT1udWxsP28udXVpZDp0LGw9dGhpcy5fYWN0aW9uc0J5Q2xpcFthXSxjPW51bGw7aWYoaT09PXZvaWQgMCYmKG8hPT1udWxsP2k9by5ibGVuZE1vZGU6aT1RaCksbCE9PXZvaWQgMCl7bGV0IGg9bC5hY3Rpb25CeVJvb3Rbc107aWYoaCE9PXZvaWQgMCYmaC5ibGVuZE1vZGU9PT1pKXJldHVybiBoO2M9bC5rbm93bkFjdGlvbnNbMF0sbz09PW51bGwmJihvPWMuX2NsaXApfWlmKG89PT1udWxsKXJldHVybiBudWxsO2xldCB1PW5ldyBHaCh0aGlzLG8sZSxpKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUsYSxzKSx1fWV4aXN0aW5nQWN0aW9uKHQsZSl7bGV0IGk9ZXx8dGhpcy5fcm9vdCxyPWkudXVpZCxzPXR5cGVvZiB0PT0ic3RyaW5nIj9NbC5maW5kQnlOYW1lKGksdCk6dCxvPXM/cy51dWlkOnQsYT10aGlzLl9hY3Rpb25zQnlDbGlwW29dO3JldHVybiBhIT09dm9pZCAwJiZhLmFjdGlvbkJ5Um9vdFtyXXx8bnVsbH1zdG9wQWxsQWN0aW9uKCl7bGV0IHQ9dGhpcy5fYWN0aW9ucyxlPXRoaXMuX25BY3RpdmVBY3Rpb25zO2ZvcihsZXQgaT1lLTE7aT49MDstLWkpdFtpXS5zdG9wKCk7cmV0dXJuIHRoaXN9dXBkYXRlKHQpe3QqPXRoaXMudGltZVNjYWxlO2xldCBlPXRoaXMuX2FjdGlvbnMsaT10aGlzLl9uQWN0aXZlQWN0aW9ucyxyPXRoaXMudGltZSs9dCxzPU1hdGguc2lnbih0KSxvPXRoaXMuX2FjY3VJbmRleF49MTtmb3IobGV0IGM9MDtjIT09aTsrK2MpZVtjXS5fdXBkYXRlKHIsdCxzLG8pO2xldCBhPXRoaXMuX2JpbmRpbmdzLGw9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzO2ZvcihsZXQgYz0wO2MhPT1sOysrYylhW2NdLmFwcGx5KG8pO3JldHVybiB0aGlzfXNldFRpbWUodCl7dGhpcy50aW1lPTA7Zm9yKGxldCBlPTA7ZTx0aGlzLl9hY3Rpb25zLmxlbmd0aDtlKyspdGhpcy5fYWN0aW9uc1tlXS50aW1lPTA7cmV0dXJuIHRoaXMudXBkYXRlKHQpfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdH11bmNhY2hlQ2xpcCh0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC51dWlkLHI9dGhpcy5fYWN0aW9uc0J5Q2xpcCxzPXJbaV07aWYocyE9PXZvaWQgMCl7bGV0IG89cy5rbm93bkFjdGlvbnM7Zm9yKGxldCBhPTAsbD1vLmxlbmd0aDthIT09bDsrK2Epe2xldCBjPW9bYV07dGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihjKTtsZXQgdT1jLl9jYWNoZUluZGV4LGg9ZVtlLmxlbmd0aC0xXTtjLl9jYWNoZUluZGV4PW51bGwsYy5fYnlDbGlwQ2FjaGVJbmRleD1udWxsLGguX2NhY2hlSW5kZXg9dSxlW3VdPWgsZS5wb3AoKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUJpbmRpbmdzRm9yQWN0aW9uKGMpfWRlbGV0ZSByW2ldfX11bmNhY2hlUm9vdCh0KXtsZXQgZT10LnV1aWQsaT10aGlzLl9hY3Rpb25zQnlDbGlwO2ZvcihsZXQgbyBpbiBpKXtsZXQgYT1pW29dLmFjdGlvbkJ5Um9vdCxsPWFbZV07bCE9PXZvaWQgMCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obCkpfWxldCByPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxzPXJbZV07aWYocyE9PXZvaWQgMClmb3IobGV0IG8gaW4gcyl7bGV0IGE9c1tvXTthLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGEpfX11bmNhY2hlQWN0aW9uKHQsZSl7bGV0IGk9dGhpcy5leGlzdGluZ0FjdGlvbih0LGUpO2khPT1udWxsJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihpKSl9fTtXaC5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgVG89Y2xhc3N7Y29uc3RydWN0b3IodCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IFRvKHRoaXMudmFsdWUuY2xvbmU9PT12b2lkIDA/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX0scWg9Y2xhc3MgZXh0ZW5kcyBHaXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih0LGUpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfWNsb25lKHQpe2xldCBlPXN1cGVyLmNsb25lKHQpO3JldHVybiBlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwLGUubWVzaFBlckF0dHJpYnV0ZT10aGlzLm1lc2hQZXJBdHRyaWJ1dGUsZX19O3FoLnByb3RvdHlwZS5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBYaD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLHMpe3RoaXMuYnVmZmVyPXQsdGhpcy50eXBlPWUsdGhpcy5pdGVtU2l6ZT1pLHRoaXMuZWxlbWVudFNpemU9cix0aGlzLmNvdW50PXMsdGhpcy52ZXJzaW9uPTB9c2V0IG5lZWRzVXBkYXRlKHQpe3Q9PT0hMCYmdGhpcy52ZXJzaW9uKyt9c2V0QnVmZmVyKHQpe3JldHVybiB0aGlzLmJ1ZmZlcj10LHRoaXN9c2V0VHlwZSh0LGUpe3JldHVybiB0aGlzLnR5cGU9dCx0aGlzLmVsZW1lbnRTaXplPWUsdGhpc31zZXRJdGVtU2l6ZSh0KXtyZXR1cm4gdGhpcy5pdGVtU2l6ZT10LHRoaXN9c2V0Q291bnQodCl7cmV0dXJuIHRoaXMuY291bnQ9dCx0aGlzfX07WGgucHJvdG90eXBlLmlzR0xCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIG8wPW5ldyBLLFlpPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IEsoMS8wLDEvMCksZT1uZXcgSygtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShlKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9bzAuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubWluLmNvcHkodC5taW4pLHRoaXMubWF4LmNvcHkodC5tYXgpLHRoaXN9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMubWluLng9dGhpcy5taW4ueT0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PS0xLzAsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMubWF4Lng8dGhpcy5taW4ueHx8dGhpcy5tYXgueTx0aGlzLm1pbi55fWdldENlbnRlcih0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDApOnQuc3ViVmVjdG9ycyh0aGlzLm1heCx0aGlzLm1pbil9ZXhwYW5kQnlQb2ludCh0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQpLHRoaXMubWF4Lm1heCh0KSx0aGlzfWV4cGFuZEJ5VmVjdG9yKHQpe3JldHVybiB0aGlzLm1pbi5zdWIodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXhwYW5kQnlTY2FsYXIodCl7cmV0dXJuIHRoaXMubWluLmFkZFNjYWxhcigtdCksdGhpcy5tYXguYWRkU2NhbGFyKHQpLHRoaXN9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4hKHQueDx0aGlzLm1pbi54fHx0Lng+dGhpcy5tYXgueHx8dC55PHRoaXMubWluLnl8fHQueT50aGlzLm1heC55KX1jb250YWluc0JveCh0KXtyZXR1cm4gdGhpcy5taW4ueDw9dC5taW4ueCYmdC5tYXgueDw9dGhpcy5tYXgueCYmdGhpcy5taW4ueTw9dC5taW4ueSYmdC5tYXgueTw9dGhpcy5tYXgueX1nZXRQYXJhbWV0ZXIodCxlKXtyZXR1cm4gZS5zZXQoKHQueC10aGlzLm1pbi54KS8odGhpcy5tYXgueC10aGlzLm1pbi54KSwodC55LXRoaXMubWluLnkpLyh0aGlzLm1heC55LXRoaXMubWluLnkpKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55KX1jbGFtcFBvaW50KHQsZSl7cmV0dXJuIGUuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBvMC5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLm1pbi5hZGQodCksdGhpcy5tYXguYWRkKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm1pbi5lcXVhbHModGhpcy5taW4pJiZ0Lm1heC5lcXVhbHModGhpcy5tYXgpfX07WWkucHJvdG90eXBlLmlzQm94Mj0hMDt2YXIgYTA9bmV3IFQsJGE9bmV3IFQsWWg9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgVCxlPW5ldyBUKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQpLHRoaXMuZW5kLmNvcHkoZSksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodC5zdGFydCksdGhpcy5lbmQuY29weSh0LmVuZCksdGhpc31nZXRDZW50ZXIodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9ZGVsdGEodCl7cmV0dXJuIHQuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX1kaXN0YW5jZVNxKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfWRpc3RhbmNlKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUbyh0aGlzLmVuZCl9YXQodCxlKXtyZXR1cm4gdGhpcy5kZWx0YShlKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5zdGFydCl9Y2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LGUpe2EwLnN1YlZlY3RvcnModCx0aGlzLnN0YXJ0KSwkYS5zdWJWZWN0b3JzKHRoaXMuZW5kLHRoaXMuc3RhcnQpO2xldCBpPSRhLmRvdCgkYSkscz0kYS5kb3QoYTApL2k7cmV0dXJuIGUmJihzPUllKHMsMCwxKSksc31jbG9zZXN0UG9pbnRUb1BvaW50KHQsZSxpKXtsZXQgcj10aGlzLmNsb3Nlc3RQb2ludFRvUG9pbnRQYXJhbWV0ZXIodCxlKTtyZXR1cm4gdGhpcy5kZWx0YShpKS5tdWx0aXBseVNjYWxhcihyKS5hZGQodGhpcy5zdGFydCl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLnN0YXJ0LmFwcGx5TWF0cml4NCh0KSx0aGlzLmVuZC5hcHBseU1hdHJpeDQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQuc3RhcnQuZXF1YWxzKHRoaXMuc3RhcnQpJiZ0LmVuZC5lcXVhbHModGhpcy5lbmQpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O3ZhciBRbj1uZXcgVCxLYT1uZXcgd3QsRnU9bmV3IHd0LFpoPWNsYXNzIGV4dGVuZHMgZ297Y29uc3RydWN0b3IodCl7bGV0IGU9RDAodCksaT1uZXcgSHQscj1bXSxzPVtdLG89bmV3IGZ0KDAsMCwxKSxhPW5ldyBmdCgwLDEsMCk7Zm9yKGxldCBjPTA7YzxlLmxlbmd0aDtjKyspe2xldCB1PWVbY107dS5wYXJlbnQmJnUucGFyZW50LmlzQm9uZSYmKHIucHVzaCgwLDAsMCksci5wdXNoKDAsMCwwKSxzLnB1c2goby5yLG8uZyxvLmIpLHMucHVzaChhLnIsYS5nLGEuYikpfWkuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKHIsMykpLGkuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGVlKHMsMykpO2xldCBsPW5ldyB6bih7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KTtzdXBlcihpLGwpLHRoaXMudHlwZT0iU2tlbGV0b25IZWxwZXIiLHRoaXMuaXNTa2VsZXRvbkhlbHBlcj0hMCx0aGlzLnJvb3Q9dCx0aGlzLmJvbmVzPWUsdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITF9dXBkYXRlTWF0cml4V29ybGQodCl7bGV0IGU9dGhpcy5ib25lcyxpPXRoaXMuZ2VvbWV0cnkscj1pLmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKTtGdS5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBzPTAsbz0wO3M8ZS5sZW5ndGg7cysrKXtsZXQgYT1lW3NdO2EucGFyZW50JiZhLnBhcmVudC5pc0JvbmUmJihLYS5tdWx0aXBseU1hdHJpY2VzKEZ1LGEubWF0cml4V29ybGQpLFFuLnNldEZyb21NYXRyaXhQb3NpdGlvbihLYSksci5zZXRYWVoobyxRbi54LFFuLnksUW4ueiksS2EubXVsdGlwbHlNYXRyaWNlcyhGdSxhLnBhcmVudC5tYXRyaXhXb3JsZCksUW4uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEthKSxyLnNldFhZWihvKzEsUW4ueCxRbi55LFFuLnopLG8rPTIpfWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLm5lZWRzVXBkYXRlPSEwLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX07ZnVuY3Rpb24gRDAobil7bGV0IHQ9W107biYmbi5pc0JvbmUmJnQucHVzaChuKTtmb3IobGV0IGU9MDtlPG4uY2hpbGRyZW4ubGVuZ3RoO2UrKyl0LnB1c2guYXBwbHkodCxEMChuLmNoaWxkcmVuW2VdKSk7cmV0dXJuIHR9dmFyIEpoPWNsYXNzIGV4dGVuZHMgZ297Y29uc3RydWN0b3IodD0xMCxlPTEwLGk9NDQ3MzkyNCxyPTg5NDc4NDgpe2k9bmV3IGZ0KGkpLHI9bmV3IGZ0KHIpO2xldCBzPWUvMixvPXQvZSxhPXQvMixsPVtdLGM9W107Zm9yKGxldCBmPTAsZD0wLGc9LWE7Zjw9ZTtmKyssZys9byl7bC5wdXNoKC1hLDAsZyxhLDAsZyksbC5wdXNoKGcsMCwtYSxnLDAsYSk7bGV0IHg9Zj09PXM/aTpyO3gudG9BcnJheShjLGQpLGQrPTMseC50b0FycmF5KGMsZCksZCs9Myx4LnRvQXJyYXkoYyxkKSxkKz0zLHgudG9BcnJheShjLGQpLGQrPTN9bGV0IHU9bmV3IEh0O3Uuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IGVlKGwsMykpLHUuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IGVlKGMsMykpO2xldCBoPW5ldyB6bih7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KTtzdXBlcih1LGgpLHRoaXMudHlwZT0iR3JpZEhlbHBlciJ9fTt2YXIgX1Q9bmV3IEZsb2F0MzJBcnJheSgxKSxDaz1uZXcgSW50MzJBcnJheShfVC5idWZmZXIpO0ZlLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmdldFBvaW50PXQsbn07X28ucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKG4pfTtKaC5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfTtaaC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9O21uLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksRGguZXh0cmFjdFVybEJhc2Uobil9O21uLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fTtZaS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX07WWkucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtZaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07WWkucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKG4pfTtHZS5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX07R2UucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtHZS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX07R2UucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9O0dlLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX07c2kucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9O3FyLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4pfTtZaC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkxpbmUzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIobil9O2RlLnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KG4sdCl9O2RlLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXgzKHRoaXMpfTtkZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtkZS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXgzKCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXgzKHRoaXMpfTtkZS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07ZGUucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShuKS5pbnZlcnQoKX07d3QucHJvdG90eXBlLmV4dHJhY3RQb3NpdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZXh0cmFjdFBvc2l0aW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuY29weVBvc2l0aW9uKCkuIiksdGhpcy5jb3B5UG9zaXRpb24obil9O3d0LnByb3RvdHlwZS5mbGF0dGVuVG9BcnJheU9mZnNldD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5mbGF0dGVuVG9BcnJheU9mZnNldCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudG9BcnJheSgpIGluc3RlYWQuIiksdGhpcy50b0FycmF5KG4sdCl9O3d0LnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRQb3NpdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnNldEZyb21NYXRyaXhQb3NpdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuZXcgVCgpLnNldEZyb21NYXRyaXhDb2x1bW4odGhpcywzKX07d3QucHJvdG90eXBlLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbigpLiIpLHRoaXMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24obil9O3d0LnByb3RvdHlwZS5tdWx0aXBseVRvQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVRvQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX07d3QucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yND1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3I0KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVBeGlzPWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy50cmFuc2Zvcm1EaXJlY3Rpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbi50cmFuc2Zvcm1EaXJlY3Rpb24odGhpcyl9O3d0LnByb3RvdHlwZS5jcm9zc1ZlY3Rvcj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuY3Jvc3NWZWN0b3IoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX07d3QucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlWD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVYKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07d3QucHJvdG90eXBlLnJvdGF0ZVk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5yb3RhdGVaPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVooKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUucm90YXRlQnlBeGlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZUJ5QXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3d0LnByb3RvdHlwZS5hcHBseVRvQnVmZmVyQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvQnVmZmVyQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGF0dHJpYnV0ZS5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksbi5hcHBseU1hdHJpeDQodGhpcyl9O3d0LnByb3RvdHlwZS5hcHBseVRvVmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9WZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTt3dC5wcm90b3R5cGUubWFrZUZydXN0dW09ZnVuY3Rpb24obix0LGUsaSxyLHMpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlRnJ1c3R1bSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAubWFrZVBlcnNwZWN0aXZlKCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIG5lYXIsIGZhciApIGluc3RlYWQuIiksdGhpcy5tYWtlUGVyc3BlY3RpdmUobix0LGksZSxyLHMpfTt3dC5wcm90b3R5cGUuZ2V0SW52ZXJzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0SW52ZXJzZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBtYXRyaXhJbnYuY29weSggbWF0cml4ICkuaW52ZXJ0KCk7IGluc3RlYWQuIiksdGhpcy5jb3B5KG4pLmludmVydCgpfTtqZS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25MaW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBsYW5lOiAuaXNJbnRlcnNlY3Rpb25MaW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0xpbmUoKS4iKSx0aGlzLmludGVyc2VjdHNMaW5lKG4pfTtFZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgaXMgbm93IHZlY3Rvci5hcHBseVF1YXRlcm5pb24oIHF1YXRlcm5pb24gKSBpbnN0ZWFkLiIpLG4uYXBwbHlRdWF0ZXJuaW9uKHRoaXMpfTtFZS5wcm90b3R5cGUuaW52ZXJzZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5pbnZlcnNlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBpbnZlcnQoKS4iKSx0aGlzLmludmVydCgpfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25Cb3goKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzQm94KCkuIiksdGhpcy5pbnRlcnNlY3RzQm94KG4pfTtvaS5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25QbGFuZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1BsYW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzUGxhbmUobil9O29pLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9O3JlLnByb3RvdHlwZS5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5hcmVhKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QXJlYSgpLiIpLHRoaXMuZ2V0QXJlYSgpfTtyZS5wcm90b3R5cGUuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSx0aGlzLmdldEJhcnljb29yZChuLHQpfTtyZS5wcm90b3R5cGUubWlkcG9pbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5taWRwb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE1pZHBvaW50KCkuIiksdGhpcy5nZXRNaWRwb2ludChuKX07cmUucHJvdG90eXBlbm9ybWFsPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksdGhpcy5nZXROb3JtYWwobil9O3JlLnByb3RvdHlwZS5wbGFuZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLnBsYW5lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0UGxhbmUoKS4iKSx0aGlzLmdldFBsYW5lKG4pfTtyZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0LGUsaSxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHJlLmdldEJhcnljb29yZChuLHQsZSxpLHIpfTtyZS5ub3JtYWw9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSxyZS5nZXROb3JtYWwobix0LGUsaSl9O1VuLnByb3RvdHlwZS5leHRyYWN0QWxsUG9pbnRzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cmFjdEFsbFBvaW50cygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuZXh0cmFjdFBvaW50cygpIGluc3RlYWQuIiksdGhpcy5leHRyYWN0UG9pbnRzKG4pfTtVbi5wcm90b3R5cGUuZXh0cnVkZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJ1ZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXh0cnVkZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgY2kodGhpcyxuKX07VW4ucHJvdG90eXBlLm1ha2VHZW9tZXRyeT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLm1ha2VHZW9tZXRyeSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBTaGFwZUdlb21ldHJ5KCkgaW5zdGVhZC4iKSxuZXcgcWkodGhpcyxuKX07Sy5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX07Sy5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9O0sucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtULnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfTtULnByb3RvdHlwZS5zZXRFdWxlckZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuVmVjdG9yMzogLnNldEV1bGVyRnJvbVF1YXRlcm5pb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVF1YXRlcm5pb24oKSBpbnN0ZWFkLiIpfTtULnByb3RvdHlwZS5nZXRQb3NpdGlvbkZyb21NYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFBvc2l0aW9uRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhQb3NpdGlvbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKG4pfTtULnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKG4pfTtULnByb3RvdHlwZS5nZXRDb2x1bW5Gcm9tTWF0cml4PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldENvbHVtbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4Q29sdW1uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsbil9O1QucHJvdG90eXBlLmFwcGx5UHJvamVjdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlQcm9qZWN0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5hcHBseU1hdHJpeDQoIG0gKSBpbnN0ZWFkLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfTtULnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfTtULnByb3RvdHlwZS5kaXN0YW5jZVRvTWFuaGF0dGFuPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5kaXN0YW5jZVRvTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuRGlzdGFuY2VUbygpLiIpLHRoaXMubWFuaGF0dGFuRGlzdGFuY2VUbyhuKX07VC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O1d0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfTtXdC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9O2t0LnByb3RvdHlwZS5nZXRDaGlsZEJ5TmFtZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmdldENoaWxkQnlOYW1lKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0T2JqZWN0QnlOYW1lKCkuIiksdGhpcy5nZXRPYmplY3RCeU5hbWUobil9O2t0LnByb3RvdHlwZS5yZW5kZXJEZXB0aD1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5yZW5kZXJEZXB0aCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnJlbmRlck9yZGVyLCBpbnN0ZWFkLiIpfTtrdC5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC50cmFuc2xhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnRyYW5zbGF0ZU9uQXhpcyggYXhpcywgZGlzdGFuY2UgKSBpbnN0ZWFkLiIpLHRoaXMudHJhbnNsYXRlT25BeGlzKHQsbil9O2t0LnByb3RvdHlwZS5nZXRXb3JsZFJvdGF0aW9uPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRXb3JsZFJvdGF0aW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLk9iamVjdDNELmdldFdvcmxkUXVhdGVybmlvbiggdGFyZ2V0ICkgaW5zdGVhZC4iKX07a3QucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa3QucHJvdG90eXBlLHtldWxlck9yZGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmV1bGVyT3JkZXIgaXMgbm93IC5yb3RhdGlvbi5vcmRlci4iKSx0aGlzLnJvdGF0aW9uLm9yZGVyPW59fSx1c2VRdWF0ZXJuaW9uOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudXNlUXVhdGVybmlvbiBoYXMgYmVlbiByZW1vdmVkLiBUaGUgbGlicmFyeSBub3cgdXNlcyBxdWF0ZXJuaW9ucyBieSBkZWZhdWx0LiIpfX19KTtvZS5wcm90b3R5cGUuc2V0RHJhd01vZGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuc2V0RHJhd01vZGUoKSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvZS5wcm90b3R5cGUse2RyYXdNb2RlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIiksJHd9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiBUcmFuc2Zvcm0geW91ciBnZW9tZXRyeSB2aWEgQnVmZmVyR2VvbWV0cnlVdGlscy50b1RyaWFuZ2xlc0RyYXdNb2RlKCkgaWYgbmVjZXNzYXJ5LiIpfX19KTtkbC5wcm90b3R5cGUuaW5pdEJvbmVzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tpbm5lZE1lc2g6IGluaXRCb25lcygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1NlLnByb3RvdHlwZS5zZXRMZW5zPWZ1bmN0aW9uKG4sdCl7Y29uc29sZS53YXJuKCJUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYS5zZXRMZW5zIGlzIGRlcHJlY2F0ZWQuIFVzZSAuc2V0Rm9jYWxMZW5ndGggYW5kIC5maWxtR2F1Z2UgZm9yIGEgcGhvdG9ncmFwaGljIHNldHVwLiIpLHQhPT12b2lkIDAmJih0aGlzLmZpbG1HYXVnZT10KSx0aGlzLnNldEZvY2FsTGVuZ3RoKG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhZZS5wcm90b3R5cGUse29ubHlTaGFkb3c6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5vbmx5U2hhZG93IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dDYW1lcmFGb3Y6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRm92IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mb3YuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZvdj1ufX0sc2hhZG93Q2FtZXJhTGVmdDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFMZWZ0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5sZWZ0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5sZWZ0PW59fSxzaGFkb3dDYW1lcmFSaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFSaWdodCBpcyBub3cgLnNoYWRvdy5jYW1lcmEucmlnaHQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnJpZ2h0PW59fSxzaGFkb3dDYW1lcmFUb3A6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVG9wIGlzIG5vdyAuc2hhZG93LmNhbWVyYS50b3AuIiksdGhpcy5zaGFkb3cuY2FtZXJhLnRvcD1ufX0sc2hhZG93Q2FtZXJhQm90dG9tOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUJvdHRvbSBpcyBub3cgLnNoYWRvdy5jYW1lcmEuYm90dG9tLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5ib3R0b209bn19LHNoYWRvd0NhbWVyYU5lYXI6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTmVhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEubmVhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubmVhcj1ufX0sc2hhZG93Q2FtZXJhRmFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZhciBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZmFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mYXI9bn19LHNoYWRvd0NhbWVyYVZpc2libGU6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFWaXNpYmxlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQ2FtZXJhSGVscGVyKCBsaWdodC5zaGFkb3cuY2FtZXJhICkgaW5zdGVhZC4iKX19LHNoYWRvd0JpYXM6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93QmlhcyBpcyBub3cgLnNoYWRvdy5iaWFzLiIpLHRoaXMuc2hhZG93LmJpYXM9bn19LHNoYWRvd0RhcmtuZXNzOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93RGFya25lc3MgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd01hcFdpZHRoOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcFdpZHRoIGlzIG5vdyAuc2hhZG93Lm1hcFNpemUud2lkdGguIiksdGhpcy5zaGFkb3cubWFwU2l6ZS53aWR0aD1ufX0sc2hhZG93TWFwSGVpZ2h0OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd01hcEhlaWdodCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLmhlaWdodC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLmhlaWdodD1ufX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhRdC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAubGVuZ3RoIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuY291bnQgaW5zdGVhZC4iKSx0aGlzLmFycmF5Lmxlbmd0aH19LGR5bmFtaWM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMudXNhZ2U9PT1ubH0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG5sKX19fSk7UXQucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2Uobj09PSEwP25sOmlvKSx0aGlzfTtRdC5wcm90b3R5cGUuY29weUluZGljZXNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmNvcHlJbmRpY2VzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxRdC5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfTtIdC5wcm90b3R5cGUuYWRkSW5kZXg9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEluZGV4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0SW5kZXgoKS4iKSx0aGlzLnNldEluZGV4KG4pfTtIdC5wcm90b3R5cGUuYWRkQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRBdHRyaWJ1dGUoKS4iKSwhKHQmJnQuaXNCdWZmZXJBdHRyaWJ1dGUpJiYhKHQmJnQuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSk/KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRBdHRyaWJ1dGUoKSBub3cgZXhwZWN0cyAoIG5hbWUsIGF0dHJpYnV0ZSApLiIpLHRoaXMuc2V0QXR0cmlidXRlKG4sbmV3IFF0KGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pKSk6bj09PSJpbmRleCI/KGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnkuYWRkQXR0cmlidXRlOiBVc2UgLnNldEluZGV4KCkgZm9yIGluZGV4IGF0dHJpYnV0ZS4iKSx0aGlzLnNldEluZGV4KHQpLHRoaXMpOnRoaXMuc2V0QXR0cmlidXRlKG4sdCl9O0h0LnByb3RvdHlwZS5hZGREcmF3Q2FsbD1mdW5jdGlvbihuLHQsZSl7ZSE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIGluZGV4T2Zmc2V0LiIpLGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIGlzIG5vdyAuYWRkR3JvdXAoKS4iKSx0aGlzLmFkZEdyb3VwKG4sdCl9O0h0LnByb3RvdHlwZS5jbGVhckRyYXdDYWxscz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jbGVhckRyYXdDYWxscygpIGlzIG5vdyAuY2xlYXJHcm91cHMoKS4iKSx0aGlzLmNsZWFyR3JvdXBzKCl9O0h0LnByb3RvdHlwZS5jb21wdXRlT2Zmc2V0cz1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlT2Zmc2V0cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O0h0LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5yZW1vdmVBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5kZWxldGVBdHRyaWJ1dGUoKS4iKSx0aGlzLmRlbGV0ZUF0dHJpYnV0ZShuKX07SHQucHJvdG90eXBlLmFwcGx5TWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYXBwbHlNYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5hcHBseU1hdHJpeDQoKS4iKSx0aGlzLmFwcGx5TWF0cml4NChuKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSHQucHJvdG90eXBlLHtkcmF3Y2FsbHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmRyYXdjYWxscyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fSxvZmZzZXRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLm9mZnNldHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX19KTtHaS5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKG49PT0hMD9ubDppbyksdGhpc307R2kucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXRBcnJheSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgQnVmZmVyR2VvbWV0cnkgLnNldEF0dHJpYnV0ZSB0byByZXBsYWNlL3Jlc2l6ZSBhdHRyaWJ1dGUgYnVmZmVycyIpfTtjaS5wcm90b3R5cGUuZ2V0QXJyYXlzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuZ2V0QXJyYXlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07Y2kucHJvdG90eXBlLmFkZFNoYXBlTGlzdD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlTGlzdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2NpLnByb3RvdHlwZS5hZGRTaGFwZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmFkZFNoYXBlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07WXIucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZTogLmRpc3Bvc2UoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtUby5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiAub25VcGRhdGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2Ugb2JqZWN0Lm9uQmVmb3JlUmVuZGVyKCkgaW5zdGVhZC4iKSx0aGlzfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4ZS5wcm90b3R5cGUse3dyYXBBcm91bmQ6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwQXJvdW5kIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxvdmVyZHJhdzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sd3JhcFJHQjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC53cmFwUkdCIGhhcyBiZWVuIHJlbW92ZWQuIiksbmV3IGZ0fX0sc2hhZGluZzp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIiksdGhpcy5mbGF0U2hhZGluZz1uPT09YzB9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm4ucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KTtWdC5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfTtWdC5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfTtWdC5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfTtWdC5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX07VnQucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufTtWdC5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX07VnQucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9O1Z0LnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX07VnQucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX07VnQucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfTtWdC5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9O1Z0LnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfTtWdC5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VnQucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtWdC5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O1Z0LnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZ0LnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9bj09PSEwPyR0OnJpfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVDAucHJvdG90eXBlLHtjdWxsRmFjZTp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLmN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX0scmVuZGVyUmV2ZXJzZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJSZXZlcnNlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclNpbmdsZVNpZGVkOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyU2luZ2xlU2lkZWQgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE5lLnByb3RvdHlwZSx7d3JhcFM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwU30sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwUyBpcyBub3cgLnRleHR1cmUud3JhcFMuIiksdGhpcy50ZXh0dXJlLndyYXBTPW59fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBUIGlzIG5vdyAudGV4dHVyZS53cmFwVC4iKSx0aGlzLnRleHR1cmUud3JhcFQ9bn19LG1hZ0ZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1hZ0ZpbHRlciBpcyBub3cgLnRleHR1cmUubWFnRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5tYWdGaWx0ZXI9bn19LG1pbkZpbHRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm1pbkZpbHRlciBpcyBub3cgLnRleHR1cmUubWluRmlsdGVyLiIpLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9bn19LGFuaXNvdHJvcHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5hbmlzb3Ryb3B5IGlzIG5vdyAudGV4dHVyZS5hbmlzb3Ryb3B5LiIpLHRoaXMudGV4dHVyZS5hbmlzb3Ryb3B5PW59fSxvZmZzZXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5vZmZzZXQgaXMgbm93IC50ZXh0dXJlLm9mZnNldC4iKSx0aGlzLnRleHR1cmUub2Zmc2V0PW59fSxyZXBlYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5yZXBlYXQgaXMgbm93IC50ZXh0dXJlLnJlcGVhdC4iKSx0aGlzLnRleHR1cmUucmVwZWF0PW59fSxmb3JtYXQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5mb3JtYXQgaXMgbm93IC50ZXh0dXJlLmZvcm1hdC4iKSx0aGlzLnRleHR1cmUuZm9ybWF0PW59fSx0eXBlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAudHlwZSBpcyBub3cgLnRleHR1cmUudHlwZS4iKSx0aGlzLnRleHR1cmUudHlwZT1ufX0sZ2VuZXJhdGVNaXBtYXBzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZ2VuZXJhdGVNaXBtYXBzIGlzIG5vdyAudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHMuIiksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1ufX19KTtCaC5wcm90b3R5cGUubG9hZD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiAubG9hZCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQXVkaW9Mb2FkZXIgaW5zdGVhZC4iKTtsZXQgdD10aGlzO3JldHVybiBuZXcgRmgoKS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfTtPaC5wcm90b3R5cGUuZ2V0RGF0YT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvQW5hbHlzZXI6IC5nZXREYXRhKCkgaXMgbm93IC5nZXRGcmVxdWVuY3lEYXRhKCkuIiksdGhpcy5nZXRGcmVxdWVuY3lEYXRhKCl9O2FvLnByb3RvdHlwZS51cGRhdGVDdWJlTWFwPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLnVwZGF0ZUN1YmVNYXAoKSBpcyBub3cgLnVwZGF0ZSgpLiIpLHRoaXMudXBkYXRlKG4sdCl9O2FvLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdWJlQ2FtZXJhOiAuY2xlYXIoKSBpcyBub3cgLnJlbmRlclRhcmdldC5jbGVhcigpLiIpLHRoaXMucmVuZGVyVGFyZ2V0LmNsZWFyKG4sdCxlLGkpfTtObi5jcm9zc09yaWdpbj12b2lkIDA7Tm4ubG9hZFRleHR1cmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5UZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgRWg7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgcz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKHMubWFwcGluZz10KSxzfTtObi5sb2FkVGV4dHVyZUN1YmU9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuQ3ViZVRleHR1cmVMb2FkZXIoKSBpbnN0ZWFkLiIpO2xldCByPW5ldyBTaDtyLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2xldCBzPXIubG9hZChuLGUsdm9pZCAwLGkpO3JldHVybiB0JiYocy5tYXBwaW5nPXQpLHN9O05uLmxvYWRDb21wcmVzc2VkVGV4dHVyZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5ERFNMb2FkZXIgaW5zdGVhZC4iKX07Tm4ubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkltYWdlVXRpbHMubG9hZENvbXByZXNzZWRUZXh0dXJlQ3ViZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O3R5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18hPSJ1bmRlZmluZWQiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJlZ2lzdGVyIix7ZGV0YWlsOntyZXZpc2lvbjokaH19KSk7dHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCImJih3aW5kb3cuX19USFJFRV9fP2NvbnNvbGUud2FybigiV0FSTklORzogTXVsdGlwbGUgaW5zdGFuY2VzIG9mIFRocmVlLmpzIGJlaW5nIGltcG9ydGVkLiIpOndpbmRvdy5fX1RIUkVFX189JGgpO2Z1bmN0aW9uIHJmKG4sdCxlKXtpZihlPT09MSlyZXR1cm4gbmV3IGZ0KHQpO2xldCBpPXBpKHQpO2lmKCFpKXRocm93IG5ldyBFcnJvcihgZDMgZmFpbGVkIHRvIHJlY29nbml6ZSB0aGUgY29sb3I6ICR7dH1gKTtyZXR1cm4gbmV3IGZ0KHNjKGksbikoMS1lKSl9dmFyIGduOyhmdW5jdGlvbihuKXtuW24uQ0lSQ0xFPTBdPSJDSVJDTEUiLG5bbi5MSU5FPTFdPSJMSU5FIixuW24uVFJJQU5HTEU9Ml09IlRSSUFOR0xFIixuW24uVFJBUEVaT0lEPTNdPSJUUkFQRVpPSUQifSkoZ258fChnbj17fSkpO2Z1bmN0aW9uIE4wKG4sdCl7bGV0IGU9dC5sZW5ndGgvMixpPW4uYXR0cmlidXRlcy5wb3NpdGlvbjsoIWl8fGkuY291bnQhPT1lKjMpJiYoaT1uZXcgUXQobmV3IEZsb2F0MzJBcnJheShlKjMpLDMpLG4uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsaSkpO2xldCByPWkuYXJyYXk7Zm9yKGxldCBzPTA7czxlO3MrKylyW3MqM109dFtzKjJdLHJbcyozKzFdPXRbcyoyKzFdO2kubmVlZHNVcGRhdGU9ITAsbi5zZXREcmF3UmFuZ2UoMCxlKjMpLG4uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl9ZnVuY3Rpb24gRjAobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPWkqMiozLHM9ciozLG89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghb3x8by5jb3VudCE9PXIpJiYobz1uZXcgUXQobmV3IEZsb2F0MzJBcnJheShzKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG8pKTtsZXQgYT1vLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsaCxmXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxkPW5ldyBLKGMsdSksZz1uZXcgSyhoLGYpLHg9bmV3IEsoaC1jLGYtdSksdj1uZXcgSygteC55LHgueCkuc2V0TGVuZ3RoKGUvMiksbT1kLmNsb25lKCkuYWRkKHYpLHA9ZC5jbG9uZSgpLnN1Yih2KSxiPWcuY2xvbmUoKS5hZGQodiksXz1nLmNsb25lKCkuc3ViKHYpLFM9W20ueCxtLnksMCxwLngscC55LDAsYi54LGIueSwwLGIueCxiLnksMCxwLngscC55LDAsXy54LF8ueSwwXTthLnNldChTLGwqUy5sZW5ndGgpfW8ubmVlZHNVcGRhdGU9ITAsbi5zZXREcmF3UmFuZ2UoMCxzKSxuLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfWZ1bmN0aW9uIElsKG4sdCxlLGkpe2xldHt2aXNpYmxlOnIsY29sb3I6cyxvcGFjaXR5Om99PWk7aWYoQXJyYXkuaXNBcnJheSh0Lm1hdGVyaWFsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFyaWFudCBlcnJvcjogb25seSBleHBlY3Qgb25lIG1hdGVyaWFsIG9uIGFuIG9iamVjdCIpO2xldCBhPXQubWF0ZXJpYWw7aWYoYS52aXNpYmxlIT09ciYmKGEudmlzaWJsZT1yLGEubmVlZHNVcGRhdGU9ITApLCFyKXJldHVybiExO2xldCBsPXJmKG4scyxvIT1udWxsP286MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgd1Q9e2NyZWF0ZVNjZW5lOigpPT5uZXcgWXJ9LFJvPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnNjZW5lPXdULmNyZWF0ZVNjZW5lKCksdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLERpLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IFZ0KHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2Ygb2Upe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe3ZhciB1O2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6c309aTtpZighdCl7bGV0IGg9cmYodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvciwodT1pLm9wYWNpdHkpIT1udWxsP3U6MSksZj1uZXcgSHQsZD1uZXcgem4oe2NvbG9yOmh9KSxnPW5ldyBvZShmLGQpO3JldHVybiBkLnZpc2libGU9cixGMChmLGUscyksdGhpcy5zY2VuZS5hZGQoZykse3R5cGU6Z24uTElORSxkYXRhOmUsb2JqM2Q6Zyx3aWR0aDpzfX1sZXR7ZGF0YTpvLG9iajNkOmEsd2lkdGg6bH09dDtyZXR1cm4gSWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IsYSxoPT4oKHMhPT1sfHwhb3x8IURpLmFyZVBvbHlsaW5lc0VxdWFsKG8sZSkpJiZGMChoLGUscyksaCksaSk/e3R5cGU6Z24uTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpzfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5OnN9PWUsbz1yZih0aGlzLmJhY2tncm91bmRDb2xvcixyLHMhPW51bGw/czoxKSxhPW5ldyBraSh7Y29sb3I6byx2aXNpYmxlOml9KTtyZXR1cm4gbmV3IG9lKHQsYSl9Y3JlYXRlT3JVcGRhdGVUcmlhbmdsZU9iamVjdCh0LGUsaSl7bGV0e3NpemU6cn09aSxzPXIqTWF0aC5zcXJ0KDMpLzIsbz1uZXcgRmxvYXQzMkFycmF5KFtlLngtci8yLGUueS1zLzMsZS54K3IvMixlLnktcy8zLGUueCxlLnkrcyoyLzNdKTtpZighdCl7bGV0IGw9bmV3IEh0O04wKGwsbyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIGM9PT1udWxsP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOmduLlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIElsKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KE4wKGwsbyksbCksaSk/e3R5cGU6Z24uVFJJQU5HTEUsZGF0YTplLG9iajNkOnQub2JqM2R9OnR9Y3JlYXRlT3JVcGRhdGVDaXJjbGVPYmplY3QodCxlLGkpe2xldHtyYWRpdXM6cn09aSxzPW5ldyBacihpLnJhZGl1cyk7aWYoIXQpe2xldCBhPXRoaXMuY3JlYXRlTWVzaChzLGkpO3JldHVybiBhPT09bnVsbD9udWxsOihhLnBvc2l0aW9uLnNldChlLngsZS55LDApLHRoaXMuc2NlbmUuYWRkKGEpLHt0eXBlOmduLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6YX0pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgpPT5zLGkpPyh0Lm9iajNkLnBvc2l0aW9uLnNldChlLngsZS55LDApLHt0eXBlOmduLkNJUkNMRSxkYXRhOntsb2M6ZSxyYWRpdXM6cn0sb2JqM2Q6dC5vYmozZH0pOnR9Y3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodCxlLGkscil7aWYoZS55IT09aS55KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnB1dCBlcnJvcjogc3RhcnQueSAhPSBlbmQueS4iKTtsZXR7YWx0aXR1ZGU6c309cixvPTIvTWF0aC5zcXJ0KDMpKnMsYT1uZXcgVW4oW25ldyBLKGUueC1vLzIsZS55LXMvMiksbmV3IEsoZS54LGUueStzLzIpLG5ldyBLKGkueCxpLnkrcy8yKSxuZXcgSyhpLngrby8yLGkueS1zLzIpXSk7YS5hdXRvQ2xvc2U9ITA7bGV0IGw9bmV3IHFpKGEpO2lmKCF0KXtsZXQgdT10aGlzLmNyZWF0ZU1lc2gobCxyKTtyZXR1cm4gdT09PW51bGw/bnVsbDoodGhpcy5zY2VuZS5hZGQodSkse3R5cGU6Z24uVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dX0pfXJldHVybiBJbCh0aGlzLmJhY2tncm91bmRDb2xvcix0Lm9iajNkLCgpPT5sLHIpP3t0eXBlOmduLlRSQVBFWk9JRCxkYXRhOltlLGldLG9iajNkOnQub2JqM2R9OnR9Zmx1c2goKXt0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLHRoaXMuY29vcmRpbmF0b3IuZ2V0Q2FtZXJhKCkpfWRpc3Bvc2UoKXt0aGlzLnJlbmRlcmVyLmRpc3Bvc2UoKX19O3ZhciBObD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBzPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7cyYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LHMpfX07dmFyIHNmPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wcmV2RnJhbWVDYWNoZT1uZXcgTWFwLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcH1nZXRGcm9tUHJldmlvdXNGcmFtZSh0KXtsZXQgZT10aGlzLnByZXZGcmFtZUNhY2hlLmdldCh0KTtyZXR1cm4gZSE9bnVsbD9lOm51bGx9c2V0VG9DdXJyZW50RnJhbWUodCxlKXt0aGlzLmN1cnJGcmFtZUNhY2hlLnNldCh0LGUpfWZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCl7bGV0IHQ9W107Zm9yKGxldFtlLGldb2YgdGhpcy5wcmV2RnJhbWVDYWNoZS5lbnRyaWVzKCkpdGhpcy5jdXJyRnJhbWVDYWNoZS5oYXMoZSl8fHQucHVzaChpKTtyZXR1cm4gdGhpcy5wcmV2RnJhbWVDYWNoZT10aGlzLmN1cnJGcmFtZUNhY2hlLHRoaXMuY3VyckZyYW1lQ2FjaGU9bmV3IE1hcCx0fX0sRmw9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBzZix0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGwsdGhpcy5sYXlvdXQ9e3g6MCx3aWR0aDoxLHk6MCxoZWlnaHQ6MX0sdGhpcy5nZXRNZXRhZGF0YU1hcEltcGw9dC5nZXRNZXRhZGF0YU1hcCx0aGlzLmNvb3JkaW5hdG9yPXQuY29vcmRpbmF0b3IsdGhpcy5yZW5kZXJlcj10LnJlbmRlcmVyLHRoaXMucGFpbnRCcnVzaD1uZXcgTmwodGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLCEhdGhpcy5wYWludERpcnR5KXt0aGlzLnJlZHJhdygpO2ZvcihsZXQgdCBvZiB0aGlzLnJlbmRlckNhY2hlLmZpbmFsaXplRnJhbWVBbmRHZXRSZW1vdmVkKCkpdGhpcy5yZW5kZXJlci5kZXN0cm95T2JqZWN0KHQpO3RoaXMucGFpbnREaXJ0eT0hMX19aXNDb29yZGluYXRlVXBkYXRlZCgpe3JldHVybiB0aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSE9PXRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXJ9Y2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpe3RoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbH1zZXREYXRhKHQpe3RoaXMuY2xlYXJDb29yZGluYXRlSWRlbnRpZmllcigpLHRoaXMucmF3U2VyaWVzRGF0YT10fXRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpe2lmKCF0aGlzLmlzQ29vcmRpbmF0ZVVwZGF0ZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5nZXRMYXlvdXRSZWN0KCk7dGhpcy5zZXJpZXM9bmV3IEFycmF5KHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGgpO2ZvcihsZXQgZT0wO2U8dGhpcy5yYXdTZXJpZXNEYXRhLmxlbmd0aDtlKyspe2xldCBpPXRoaXMucmF3U2VyaWVzRGF0YVtlXTt0aGlzLnNlcmllc1tlXT17aWQ6aS5pZCxwb2x5bGluZTpuZXcgRmxvYXQzMkFycmF5KGkucG9pbnRzLmxlbmd0aCoyKX07Zm9yKGxldCByPTA7cjxpLnBvaW50cy5sZW5ndGg7cisrKXtsZXRbcyxvXT10aGlzLmNvb3JkaW5hdG9yLnRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxbaS5wb2ludHNbcl0ueCxpLnBvaW50c1tyXS55XSk7dGhpcy5zZXJpZXNbZV0ucG9seWxpbmVbcioyXT1zLHRoaXMuc2VyaWVzW2VdLnBvbHlsaW5lW3IqMisxXT1vfX10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPXRoaXMuY29vcmRpbmF0b3IuZ2V0VXBkYXRlSWRlbnRpZmllcigpLHRoaXMubWFya0FzUGFpbnREaXJ0eSgpfX07dmFyIExvOyhmdW5jdGlvbihuKXtuW24uTlVNQkVSPTBdPSJOVU1CRVIiLG5bbi5OQU49MV09Ik5BTiJ9KShMb3x8KExvPXt9KSk7dmFyIHpsPWNsYXNzIGV4dGVuZHMgRmx7cmVjb3JkUGFydGl0aW9uKHQsZSxpKXtyZXR1cm4gdD97dHlwZTpMby5OVU1CRVIscG9seWxpbmU6ZX06e3R5cGU6TG8uTkFOLHBvbHlsaW5lOmUubWFwKChyLHMpPT5pc05hTihyKT9zJTI9PT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLHM9dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxvPXt4OnNbMF0seTpzWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGg9aXNOYU4oYyl8fGlzTmFOKHUpO2ghPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksYT09PW51bGw/e3g6Yyx5OnV9OmEpKSxpPWwpLGh8fChhPXt4OmMseTp1fSkscj1ofXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYSE9bnVsbD9hOm8pKSxlfXJlZHJhdygpe3ZhciB0LGUsaTtmb3IobGV0IHIgb2YgdGhpcy5zZXJpZXMpe2xldCBvPXRoaXMuZ2V0TWV0YWRhdGFNYXAoKVtyLmlkXTtpZighbyljb250aW51ZTtpZihyLnBvbHlsaW5lLmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7ci5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IGE9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZShyLnBvbHlsaW5lKTtmb3IobGV0W2wse3R5cGU6Yyxwb2x5bGluZTp1fV1vZiBhLmVudHJpZXMoKSlpZihjPT09TG8uTlVNQkVSKXUubGVuZ3RoPT09Mj90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIixyLmlkLGxdKSx7eDp1WzBdLHk6dVsxXX0se2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eToodD1vLm9wYWNpdHkpIT1udWxsP3Q6MSxyYWRpdXM6NH0pOnRoaXMucGFpbnRCcnVzaC5zZXRMaW5lKEpTT04uc3RyaW5naWZ5KFsibGluZSIsci5pZCxsXSksdSx7Y29sb3I6by5jb2xvcix2aXNpYmxlOm8udmlzaWJsZSxvcGFjaXR5OihlPW8ub3BhY2l0eSkhPW51bGw/ZToxLHdpZHRoOjJ9KTtlbHNlIGlmKCFvLmF1eClmb3IobGV0IGg9MDtoPHUubGVuZ3RoO2grPTIpdGhpcy5wYWludEJydXNoLnNldFRyaWFuZ2xlKEpTT04uc3RyaW5naWZ5KFsiTmFOIixyLmlkLHVbaF0sdVtoKzFdXSkse3g6dVtoXSx5OnVbaCsxXX0se2NvbG9yOm8uY29sb3IsdmlzaWJsZTpvLnZpc2libGUsb3BhY2l0eTooaT1vLm9wYWNpdHkpIT1udWxsP2k6MSxzaXplOjEyfSl9fX07dmFyIFVsPWNsYXNzIGV4dGVuZHMgZHJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY2FtZXJhPW5ldyBWaSgwLDFlMywxZTMsMCwwLDEwMCl9aXNZQXhpc1BvaW50ZWREb3duKCl7cmV0dXJuITF9c2V0RG9tQ29udGFpbmVyUmVjdCh0KXtzdXBlci5zZXREb21Db250YWluZXJSZWN0KHQpLHRoaXMuY2FtZXJhLmxlZnQ9dC54LHRoaXMuY2FtZXJhLnJpZ2h0PXQueCt0LndpZHRoLHRoaXMuY2FtZXJhLnRvcD10LnkrdC5oZWlnaHQsdGhpcy5jYW1lcmEuYm90dG9tPXQueSx0aGlzLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Z2V0Q2FtZXJhKCl7cmV0dXJuIHRoaXMuY2FtZXJhfX07dmFyIE1UPXtyZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bj0+c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9LEJsPWNsYXNze2NvbnN0cnVjdG9yKHQpe3N3aXRjaCh0aGlzLm1ldGFkYXRhTWFwPXt9LHRoaXMuc2hvdWxkUmVwYWludD0hMSx0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUpe2Nhc2UgVG4uU1ZHOnt0aGlzLmNvb3JkaW5hdG9yPW5ldyBkcix0aGlzLnJlbmRlcmVyPW5ldyBPcyh0LmNvbnRhaW5lcik7YnJlYWt9Y2FzZSBUbi5XRUJHTDp7bGV0IGU9bmV3IFVsO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBSbyh0LmNvbnRhaW5lcixlLHQuZGV2aWNlUGl4ZWxSYXRpbyx0LmNhbGxiYWNrcy5vbkNvbnRleHRMb3N0KTticmVha319dGhpcy5yZW5kZXJlci5zZXRVc2VEYXJrTW9kZSh0LnVzZURhcmtNb2RlKSx0aGlzLnNlcmllc0xpbmVWaWV3PW5ldyB6bCh7cmVuZGVyZXI6dGhpcy5yZW5kZXJlcixjb29yZGluYXRvcjp0aGlzLmNvb3JkaW5hdG9yLGdldE1ldGFkYXRhTWFwOigpPT50aGlzLm1ldGFkYXRhTWFwfSksdGhpcy5yZXNpemUodC5kb21EaW1lbnNpb24pfWRpc3Bvc2UoKXt9c2V0WFNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFhTY2FsZShmcih0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRZU2NhbGVUeXBlKHQpe3RoaXMuY29vcmRpbmF0b3Iuc2V0WVNjYWxlKGZyKHQpKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXJlc2l6ZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldERvbUNvbnRhaW5lclJlY3QoTm8oe3g6MCx5OjB9LHQpKSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKE5vKHt4OjAseTowfSx0KSksdGhpcy5zZXJpZXNMaW5lVmlldy5zZXRMYXlvdXRSZWN0KHVmKE5vKHt9LHQpLHt4OjAseTowfSkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IHM9dGhpcy5tZXRhZGF0YU1hcFtpXTsoIXN8fHIuY29sb3IhPT1zLmNvbG9yfHxyLnZpc2libGUhPT1zLnZpc2libGV8fHIub3BhY2l0eSE9PXMub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLE1ULnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fTtmdW5jdGlvbiB6MChuKXtsZXR7ZmxhdHRlbmVkU2VyaWVzOnQsaWRzQW5kTGVuZ3RoczplfT1uLGk9bmV3IEZsb2F0NjRBcnJheSh0KSxyPVtdO2lmKGkubGVuZ3RoJTIhPT0wKXRocm93IG5ldyBFcnJvcigiYGZsYXR0ZW5lZFNlcmllc2AgbXVzdCBoYXZlIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzIik7bGV0IHM9MDtmb3IobGV0e2lkOm8sbGVuZ3RoOmF9b2YgZSl7bGV0IGw9W107Zm9yKGxldCBjPTA7YzxhO2MrKylsLnB1c2goe3g6aVtzKytdLHk6aVtzKytdfSk7ci5wdXNoKHtpZDpvLHBvaW50czpsfSl9cmV0dXJuIHJ9dmFyIHhuOyhmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KSh4bnx8KHhuPXt9KSk7dmFyIFBvOyhmdW5jdGlvbihuKXtuW24uT05fUkVEUkFXX0VORD0wXT0iT05fUkVEUkFXX0VORCIsbltuLk9OX0NPTlRFWFRfTE9TVD0xXT0iT05fQ09OVEVYVF9MT1NUIn0pKFBvfHwoUG89e30pKTtzZWxmLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntiVChuLnBvcnRzWzBdLG4uZGF0YSl9KTtmdW5jdGlvbiBiVChuLHQpe2xldHtjYW52YXM6ZSxkZXZpY2VQaXhlbFJhdGlvOmksZGltOnIscmVuZGVyZXJUeXBlOnMsdXNlRGFya01vZGU6b309dCxhPXtvbkRyYXdFbmQ6KCk9PntuLnBvc3RNZXNzYWdlKHt0eXBlOlBvLk9OX1JFRFJBV19FTkR9KX0sb25Db250ZXh0TG9zdDooKT0+e24ucG9zdE1lc3NhZ2Uoe3R5cGU6UG8uT05fQ09OVEVYVF9MT1NUfSl9fSxsO3N3aXRjaChzKXtjYXNlIFRuLldFQkdMOmw9e3R5cGU6VG4uV0VCR0wsZG9tRGltZW5zaW9uOnIsY2FsbGJhY2tzOmEsY29udGFpbmVyOmUsZGV2aWNlUGl4ZWxSYXRpbzppLHVzZURhcmtNb2RlOm99O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogY2Fubm90IGhhdmUgT2Zmc2NyZWVuIGNoYXJ0IGZvciByZW5kZXJlciB0eXBlOiAke3N9YCl9bGV0IGM9bmV3IEJsKGwpO24ub25tZXNzYWdlPWZ1bmN0aW9uKHUpe2xldCBoPXUuZGF0YTtzd2l0Y2goaC50eXBlKXtjYXNlIHhuLlNFUklFU19EQVRBX1VQREFURUQ6e2xldCBmPXowKGguY29tcGFjdERhdGFTZXJpZXMpO2Muc2V0RGF0YShmKTticmVha31jYXNlIHhuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEOntjLnNldE1ldGFkYXRhKGgubWV0YWRhdGEpO2JyZWFrfWNhc2UgeG4uVklFV19CT1hfVVBEQVRFRDp7Yy5zZXRWaWV3Qm94KGguZXh0ZW50KTticmVha31jYXNlIHhuLkRPTV9SRVNJWkVEOntjLnJlc2l6ZShoLmRpbSk7YnJlYWt9Y2FzZSB4bi5EQVJLX01PREVfVVBEQVRFRDp7Yy5zZXRVc2VEYXJrTW9kZShoLnVzZURhcmtNb2RlKTticmVha31jYXNlIHhuLlNDQUxFX1VQREFURUQ6e3N3aXRjaChoLmF4aXMpe2Nhc2UieCI6Yy5zZXRYU2NhbGVUeXBlKGguc2NhbGVUeXBlKTticmVhaztjYXNlInkiOmMuc2V0WVNjYWxlVHlwZShoLnNjYWxlVHlwZSk7YnJlYWs7ZGVmYXVsdDpsZXQgZj1oLmF4aXM7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFVua25vd24gYXhpczogJHtmfWApfWJyZWFrfWNhc2UgeG4uRElTUE9TRUQ6e2MuZGlzcG9zZSgpO2JyZWFrfX19fX0pKCk7Ci8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgMjAxMC0yMDIyIFRocmVlLmpzIEF1dGhvcnMKICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVAogKi8KLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hhcnRfd29ya2VyLmpzLm1hcAo=",
"headers": [
[
"content-type",
- "application/json"
+ "text/javascript; charset=utf-8"
]
],
"ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=learning_rate": {
- "data": "W1sxNjQ0MzIwMzE1LjI1MDE2OCwgMTAsIDAuMDAyNDk5OTk5OTQ0MTIwNjQ1NV0sIFsxNjQ0MzIwMzE4Ljc4MTA0NDIsIDIwLCAwLjAwMjQ5OTk5OTk0NDEyMDY0NTVdLCBbMTY0NDMyMDMyNi40MjY0MzE3LCAzNSwgMC4wMDI0OTk5OTk5NDQxMjA2NDU1XSwgWzE2NDQzMjAzMzAuMDE3NzMyLCA0NSwgMC4wMDI0OTk5OTk5NDQxMjA2NDU1XSwgWzE2NDQzMjAzMzcuNjkwNDMxLCA2MCwgMC4wMDI0OTk5OTk5NDQxMjA2NDU1XSwgWzE2NDQzMjAzNDEuMzkzMTUxLCA3MCwgMC4wMDI0OTk5OTk5NDQxMjA2NDU1XSwgWzE2NDQzMjAzNDkuMjcxNzQ3NiwgODUsIDAuMDAyNDk5OTk5OTQ0MTIwNjQ1NV0sIFsxNjQ0MzIwMzUzLjA2Nzk3OTgsIDk1LCAwLjAwMjQ5OTk5OTk0NDEyMDY0NTVdLCBbMTY0NDMyMDM2MC44NTgzMTE0LCAxMTAsIDAuMDAyNDk5OTk5OTQ0MTIwNjQ1NV0sIFsxNjQ0MzIwMzY0LjU1OTk1NDYsIDEyMCwgMC4wMDI0OTk5OTk5NDQxMjA2NDU1XSwgWzE2NDQzMjAzNzIuMjYwMzEzLCAxMzUsIDAuMDAyNDk5OTk5OTQ0MTIwNjQ1NV0sIFsxNjQ0MzIwMzc1LjkwMzAzMSwgMTQ1LCAwLjAwMjQ5OTk5OTk0NDEyMDY0NTVdLCBbMTY0NDMyMDM4My41NTk2MjY4LCAxNjAsIDAuMDAyNDk5OTk5OTQ0MTIwNjQ1NV0sIFsxNjQ0MzIwMzg3LjE4OTYxNywgMTcwLCAwLjAwMjQ5OTk5OTk0NDEyMDY0NTVdLCBbMTY0NDMyMDM5NC44Nzg4Njk1LCAxODUsIDAuMDAyNDk5OTk5OTQ0MTIwNjQ1NV0sIFsxNjQ0MzIwMzk4LjUxNDQ4NjYsIDE5NSwgMC4wMDI0OTk5OTk5NDQxMjA2NDU1XSwgWzE2NDQzMjA0MDYuMjMyNTMzNSwgMjEwLCAwLjAwMDI1MDAwMDAxMTg3NDM2MjhdLCBbMTY0NDMyMDQwOS44Nzc1MTM2LCAyMjAsIDAuMDAwMjUwMDAwMDExODc0MzYyOF0sIFsxNjQ0MzIwNDE3LjYwMzAyNjIsIDIzNSwgMC4wMDAyNTAwMDAwMTE4NzQzNjI4XSwgWzE2NDQzMjA0MjEuMjcyMTIwNywgMjQ1LCAwLjAwMDI1MDAwMDAxMTg3NDM2MjhdLCBbMTY0NDMyMDQyOS4wMTQzNDU2LCAyNjAsIDAuMDAwMjUwMDAwMDExODc0MzYyOF0sIFsxNjQ0MzIwNDMyLjcxNzUzNTcsIDI3MCwgMC4wMDAyNTAwMDAwMTE4NzQzNjI4XSwgWzE2NDQzMjA0NDAuNTAyNjQyNiwgMjg1LCAyLjQ5OTk5OTkzNjg0NDY4OGUtMDVdLCBbMTY0NDMyMDQ0NC4xOTQ4ODI5LCAyOTUsIDIuNDk5OTk5OTM2ODQ0Njg4ZS0wNV0sIFsxNjQ0MzIwNDUxLjMxNTQwNDcsIDMwMSwgMi40OTk5OTk5MzY4NDQ2ODhlLTA1XV0=",
+ "https://localhost:6006/data/environment": {
+ "data": "eyJ2ZXJzaW9uIjogIjIuMTIuMSIsICJkYXRhX2xvY2F0aW9uIjogIi4vd29ya19kaXJzIiwgIndpbmRvd190aXRsZSI6ICIiLCAiZXhwZXJpbWVudF9uYW1lIjogIiIsICJleHBlcmltZW50X2Rlc2NyaXB0aW9uIjogIiIsICJjcmVhdGlvbl90aW1lIjogMCwgImRlYnVnIjogeyJkYXRhX3Byb3ZpZGVyIjogIk11bHRpcGxleGVyRGF0YVByb3ZpZGVyKGxvZ2Rpcj0nLi93b3JrX2RpcnMnKSIsICJmbGFncyI6IHsibG9nZGlyIjogIi4vd29ya19kaXJzIiwgImxvZ2Rpcl9zcGVjIjogIiIsICJob3N0IjogbnVsbCwgImJpbmRfYWxsIjogZmFsc2UsICJwb3J0IjogbnVsbCwgInJldXNlX3BvcnQiOiBmYWxzZSwgImxvYWRfZmFzdCI6ICJhdXRvIiwgImV4dHJhX2RhdGFfc2VydmVyX2ZsYWdzIjogIiIsICJncnBjX2NyZWRzX3R5cGUiOiAibG9jYWwiLCAiZ3JwY19kYXRhX3Byb3ZpZGVyIjogIiIsICJwdXJnZV9vcnBoYW5lZF9kYXRhIjogdHJ1ZSwgImRiIjogIiIsICJkYl9pbXBvcnQiOiBmYWxzZSwgImluc3BlY3QiOiBmYWxzZSwgInZlcnNpb25fdGIiOiBmYWxzZSwgInRhZyI6ICIiLCAiZXZlbnRfZmlsZSI6ICIiLCAicGF0aF9wcmVmaXgiOiAiIiwgIndpbmRvd190aXRsZSI6ICIiLCAibWF4X3JlbG9hZF90aHJlYWRzIjogMSwgInJlbG9hZF9pbnRlcnZhbCI6IDUuMCwgInJlbG9hZF90YXNrIjogImF1dG8iLCAicmVsb2FkX211bHRpZmlsZSI6IG51bGwsICJyZWxvYWRfbXVsdGlmaWxlX2luYWN0aXZlX3NlY3MiOiA4NjQwMCwgImdlbmVyaWNfZGF0YSI6ICJhdXRvIiwgInNhbXBsZXNfcGVyX3BsdWdpbiI6IHt9LCAiZGV0ZWN0X2ZpbGVfcmVwbGFjZW1lbnQiOiBudWxsLCAiY3VzdG9tX3ByZWRpY3RfZm4iOiAiIiwgIndpdF9kYXRhX2RpciI6ICIiLCAiX190ZW5zb3Jib2FyZF9zdWJjb21tYW5kIjogInNlcnZlIn19fQ==",
"headers": [
[
"content-type",
@@ -1748,8 +2490,8 @@
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=momentum": {
- "data": "W1sxNjQ0MzIwMzE1LjI1MDIyOSwgMTAsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwMzE4Ljc4MTA3NzQsIDIwLCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDMyNi40MjY0NzI0LCAzNSwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjAzMzAuMDE3NzY1LCA0NSwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjAzMzcuNjkwNDgxMiwgNjAsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwMzQxLjM5MzE4NjMsIDcwLCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDM0OS4yNzE3OTU1LCA4NSwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjAzNTMuMDY4MDE0OSwgOTUsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwMzYwLjg1ODM1NjUsIDExMCwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjAzNjQuNTU5OTkwMiwgMTIwLCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDM3Mi4yNjAzNjU1LCAxMzUsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwMzc1LjkwMzA2NjYsIDE0NSwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjAzODMuNTU5NjY3MywgMTYwLCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDM4Ny4xODk2NDk2LCAxNzAsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwMzk0Ljg3ODk1NywgMTg1LCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDM5OC41MTQ1MjQ1LCAxOTUsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwNDA2LjIzMjU3OSwgMjEwLCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDQwOS44Nzc1NDgyLCAyMjAsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwNDE3LjYwMzA3MTUsIDIzNSwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjA0MjEuMjcyMTU2NSwgMjQ1LCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDQyOS4wMTQ0MDEsIDI2MCwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjA0MzIuNzE3NTczNCwgMjcwLCAwLjg5OTk5OTk3NjE1ODE0MjFdLCBbMTY0NDMyMDQ0MC41MDI2ODQsIDI4NSwgMC44OTk5OTk5NzYxNTgxNDIxXSwgWzE2NDQzMjA0NDQuMTk0OTIzLCAyOTUsIDAuODk5OTk5OTc2MTU4MTQyMV0sIFsxNjQ0MzIwNDUxLjMxNTQ2NDUsIDMwMSwgMC44OTk5OTk5NzYxNTgxNDIxXV0=",
+ "https://localhost:6006/data/plugins_listing": {
+ "data": "eyJ0aW1lc2VyaWVzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJUaW1lIFNlcmllcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJOR19DT01QT05FTlQifX0sICJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkaXN0cmlidXRpb25zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIn19LCAiaGlzdG9ncmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhpc3RvZ3JhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQifX0sICJ0ZXh0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJ0ZXh0IiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi10ZXh0LWRhc2hib2FyZCJ9fSwgInByX2N1cnZlcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlBSIEN1cnZlcyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtcHItY3VydmUtZGFzaGJvYXJkIn19LCAicHJvZmlsZV9yZWRpcmVjdCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlByb2ZpbGUiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByb2ZpbGUtcmVkaXJlY3QtZGFzaGJvYXJkIn19LCAiaHBhcmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhwYXJhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhwYXJhbXMtZGFzaGJvYXJkIn19LCAibWVzaCI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIm1lc2giLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogIm1lc2gtZGFzaGJvYXJkIn19LCAicHJvamVjdG9yIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJwcm9qZWN0b3IiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi9wcm9qZWN0b3IvaW5kZXguanMifX0sICJ3aGF0aWYiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJXaGF0LUlmIFRvb2wiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiSUZSQU1FIiwgIm1vZHVsZV9wYXRoIjogIi9kYXRhL3BsdWdpbi93aGF0aWYvaW5kZXguanMifX19",
"headers": [
[
"content-type",
@@ -1760,8 +2502,8 @@
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=train%2Facc": {
- "data": "W1sxNjQ0MzIwMzE1LjI1MDA0OCwgMTAsIDgxLjYzMDg1OTM3NV0sIFsxNjQ0MzIwMzE4Ljc4MDkyODYsIDIwLCA5My4zNzg5MDYyNV0sIFsxNjQ0MzIwMzI2LjQyNjMwOCwgMzUsIDk0LjQ4MjQyMTg3NV0sIFsxNjQ0MzIwMzMwLjAxNzYxNjMsIDQ1LCA5NC42Nzc3MzQzNzVdLCBbMTY0NDMyMDMzNy42OTAyODc2LCA2MCwgOTYuNTAzOTA2MjVdLCBbMTY0NDMyMDM0MS4zOTMwMzY0LCA3MCwgOTQuNjE5MTQwNjI1XSwgWzE2NDQzMjAzNDkuMjcxNTkxMiwgODUsIDk1LjQxOTkyMTg3NV0sIFsxNjQ0MzIwMzUzLjA2Nzg3ODIsIDk1LCA5NS40MDAzOTA2MjVdLCBbMTY0NDMyMDM2MC44NTgxNTY3LCAxMTAsIDk2LjE3MTg3NV0sIFsxNjQ0MzIwMzY0LjU1OTgyNSwgMTIwLCA5Ni42MzA4NTkzNzVdLCBbMTY0NDMyMDM3Mi4yNjAxMzczLCAxMzUsIDk3LjIzNjMyODEyNV0sIFsxNjQ0MzIwMzc1LjkwMjkxNiwgMTQ1LCA5Ni41MzMyMDMxMjVdLCBbMTY0NDMyMDM4My41NTk1LCAxNjAsIDk2LjczODI4MTI1XSwgWzE2NDQzMjAzODcuMTg5NDk4NywgMTcwLCA5Ni42Njk5MjE4NzVdLCBbMTY0NDMyMDM5NC44NzgyNjI1LCAxODUsIDk3LjA4MDA3ODEyNV0sIFsxNjQ0MzIwMzk4LjUxNDM3MiwgMTk1LCA5Ny4wODAwNzgxMjVdLCBbMTY0NDMyMDQwNi4yMzI0MDM4LCAyMTAsIDk3LjU3ODEyNV0sIFsxNjQ0MzIwNDA5Ljg3NzM5MjUsIDIyMCwgOTcuOTE5OTIxODc1XSwgWzE2NDQzMjA0MTcuNjAyODk5OCwgMjM1LCA5Ny4zNjMyODEyNV0sIFsxNjQ0MzIwNDIxLjI3MjAxMDMsIDI0NSwgOTcuNzI0NjA5Mzc1XSwgWzE2NDQzMjA0MjkuMDE0MTU0LCAyNjAsIDk3LjU5NzY1NjI1XSwgWzE2NDQzMjA0MzIuNzE3NDEsIDI3MCwgOTcuOTI5Njg3NV0sIFsxNjQ0MzIwNDQwLjUwMjUxOTEsIDI4NSwgOTcuNzYzNjcxODc1XSwgWzE2NDQzMjA0NDQuMTk0MTc3NCwgMjk1LCA5OC4wMjczNDM3NV1d",
+ "https://localhost:6006/data/runs": {
+ "data": "WyJydG1kZXRfdGlueV8xeGI0LTIwZV9iYWxsb29uLzIwMjMwNDE3XzEwMjgzNS92aXNfZGF0YSJd",
"headers": [
[
"content-type",
@@ -1772,8 +2514,8 @@
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=train%2Floss": {
- "data": "W1sxNjQ0MzIwMzE1LjI1MDExMDEsIDEwLCAwLjk3NDY0NzU4MTU3NzMwMV0sIFsxNjQ0MzIwMzE4Ljc4MTAwNjgsIDIwLCAwLjUzNDQ0NTk0MTQ0ODIxMTddLCBbMTY0NDMyMDMyNi40MjYzNzczLCAzNSwgMC40NjAyNjc5NjEwMjUyMzgwNF0sIFsxNjQ0MzIwMzMwLjAxNzY5NDUsIDQ1LCAwLjM4NTM2NDY4MTQ4MjMxNTA2XSwgWzE2NDQzMjAzMzcuNjkwMzYyNSwgNjAsIDAuMjY5NzI0MjQ5ODM5NzgyN10sIFsxNjQ0MzIwMzQxLjM5MzExMjQsIDcwLCAwLjQyNDE2MDc0ODcyMDE2OTA3XSwgWzE2NDQzMjAzNDkuMjcxNjg3LCA4NSwgMC4zNjE2MTU0Nzg5OTI0NjIxNl0sIFsxNjQ0MzIwMzUzLjA2Nzk0NSwgOTUsIDAuMzQ4MzUyNzAwNDcxODc4MDVdLCBbMTY0NDMyMDM2MC44NTgyNDksIDExMCwgMC4zMjE1NjMwMDU0NDczODc3XSwgWzE2NDQzMjAzNjQuNTU5OTAyLCAxMjAsIDAuMzAwMzQ3ODY0NjI3ODM4MTNdLCBbMTY0NDMyMDM3Mi4yNjAyNDQxLCAxMzUsIDAuMjcyMTA4MTk3MjEyMjE5MjRdLCBbMTY0NDMyMDM3NS45MDI5OTEzLCAxNDUsIDAuMjg5MzEzODgyNTg5MzQwMl0sIFsxNjQ0MzIwMzgzLjU1OTU2ODQsIDE2MCwgMC4yNzI5Nzk4ODUzMzk3MzY5NF0sIFsxNjQ0MzIwMzg3LjE4OTU4MjYsIDE3MCwgMC4yODQwMTA0OTk3MTU4MDUwNV0sIFsxNjQ0MzIwMzk0Ljg3ODMyODMsIDE4NSwgMC4yMjQyNzY3MjE0Nzc1MDg1NF0sIFsxNjQ0MzIwMzk4LjUxNDQ0NzcsIDE5NSwgMC4yNDg5NDc3MDk3OTg4MTI4N10sIFsxNjQ0MzIwNDA2LjIzMjQ3MzYsIDIxMCwgMC4yMDY1MTExMzk4Njk2ODk5NF0sIFsxNjQ0MzIwNDA5Ljg3NzQ3ODQsIDIyMCwgMC4xNjk0OTEyNDYzNDI2NTldLCBbMTY0NDMyMDQxNy42MDI5NzE4LCAyMzUsIDAuMjE2ODM1OTE2MDQyMzI3ODhdLCBbMTY0NDMyMDQyMS4yNzIwODIzLCAyNDUsIDAuMTkzMzczNDU2NTk3MzI4MTldLCBbMTY0NDMyMDQyOS4wMTQyNzk4LCAyNjAsIDAuMTg5MjM4NjIyNzg0NjE0NTZdLCBbMTY0NDMyMDQzMi43MTc0OTY2LCAyNzAsIDAuMTg4MjYzNzU5MDE2OTkwNjZdLCBbMTY0NDMyMDQ0MC41MDI1ODU2LCAyODUsIDAuMTg3MDg2MzI4ODY0MDk3Nl0sIFsxNjQ0MzIwNDQ0LjE5NDg0MSwgMjk1LCAwLjE0Mzg1ODY0MTM4NjAzMjFdXQ==",
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/tags": {
+ "data": "eyJzY2FsYXJzIjogeyJydW5UYWdJbmZvIjogeyJydG1kZXRfdGlueV8xeGI0LTIwZV9iYWxsb29uLzIwMjMwNDE3XzEwMjgzNS92aXNfZGF0YSI6IFsiY29jby9iYm94X21BUCIsICJjb2NvL2Jib3hfbUFQXzUwIiwgImNvY28vYmJveF9tQVBfNzUiLCAiY29jby9iYm94X21BUF9sIiwgImNvY28vYmJveF9tQVBfbSIsICJjb2NvL2Jib3hfbUFQX3MiLCAiZGF0YV90aW1lIiwgImVwb2NoIiwgImxvc3MiLCAibG9zc19iYm94IiwgImxvc3NfY2xzIiwgImxyIiwgIm1lbW9yeSIsICJ0aW1lIl19LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaGlzdG9ncmFtcyI6IHsicnVuVGFnSW5mbyI6IHt9LCAidGFnRGVzY3JpcHRpb25zIjoge319LCAiaW1hZ2VzIjogeyJ0YWdEZXNjcmlwdGlvbnMiOiB7fSwgInRhZ1J1blNhbXBsZWRJbmZvIjoge319fQ==",
"headers": [
[
"content-type",
@@ -1784,8 +2526,8 @@
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=train%2Floss_bbox": {
- "data": "W1sxNjQ0MzIwMzE1LjI1MDA3OTIsIDEwLCAwLjM5NDU1Mjg1NjY4MzczMTFdLCBbMTY0NDMyMDMxOC43ODA5NjgyLCAyMCwgMC4zMjg5NTAzNzUzMTg1MjcyXSwgWzE2NDQzMjAzMjYuNDI2MzQzNywgMzUsIDAuMjY4ODc0MDQ5MTg2NzA2NTRdLCBbMTY0NDMyMDMzMC4wMTc2NTYzLCA0NSwgMC4yMTUzNTYxMTE1MjY0ODkyNl0sIFsxNjQ0MzIwMzM3LjY5MDMyNTcsIDYwLCAwLjE1ODYwNDc3MDg5ODgxODk3XSwgWzE2NDQzMjAzNDEuMzkzMDc1LCA3MCwgMC4yNTk3MzQ4OTg4MDU2MTgzXSwgWzE2NDQzMjAzNDkuMjcxNjQzNCwgODUsIDAuMjI0MzQ1NDYwNTM0MDk1NzZdLCBbMTY0NDMyMDM1My4wNjc5MTE2LCA5NSwgMC4yMTE5OTQ1Mjg3NzA0NDY3OF0sIFsxNjQ0MzIwMzYwLjg1ODE5NDYsIDExMCwgMC4yMDc0NTU1MTU4NjE1MTEyM10sIFsxNjQ0MzIwMzY0LjU1OTg2NDUsIDEyMCwgMC4xOTI1NzU4NDIxNDIxMDUxXSwgWzE2NDQzMjAzNzIuMjYwMTgzMywgMTM1LCAwLjE4Mjc0MTcwMTYwMjkzNThdLCBbMTY0NDMyMDM3NS45MDI5NTQ4LCAxNDUsIDAuMTg1NjgxMTY0MjY0Njc4OTZdLCBbMTY0NDMyMDM4My41NTk1MzY3LCAxNjAsIDAuMTczNjMxNzU3NDk3Nzg3NDhdLCBbMTY0NDMyMDM4Ny4xODk1NDg3LCAxNzAsIDAuMTc5OTUyOTc5MDg3ODI5Nl0sIFsxNjQ0MzIwMzk0Ljg3ODI5NTcsIDE4NSwgMC4xMzgxNDIwMzQ0MTE0MzAzNl0sIFsxNjQ0MzIwMzk4LjUxNDQxMDcsIDE5NSwgMC4xNjM0NzIzMDk3MDg1OTUyOF0sIFsxNjQ0MzIwNDA2LjIzMjQ0MDUsIDIxMCwgMC4xMzA3MDIyMjczNTQwNDk2OF0sIFsxNjQ0MzIwNDA5Ljg3NzQ0MjYsIDIyMCwgMC4xMDkwMTMyMzcwNTkxMTYzNl0sIFsxNjQ0MzIwNDE3LjYwMjkzNiwgMjM1LCAwLjEzNjc0MDIwNzY3MjExOTE0XSwgWzE2NDQzMjA0MjEuMjcyMDQ2MywgMjQ1LCAwLjEyNzc0NzQ0NjI5ODU5OTI0XSwgWzE2NDQzMjA0MjkuMDE0MjMzNCwgMjYwLCAwLjExOTU3MTkwOTMwODQzMzUzXSwgWzE2NDQzMjA0MzIuNzE3NDU5LCAyNzAsIDAuMTI0NTcxMDcwMDc1MDM1MV0sIFsxNjQ0MzIwNDQwLjUwMjU1NDQsIDI4NSwgMC4xMjM2OTEzNTAyMjE2MzM5MV0sIFsxNjQ0MzIwNDQ0LjE5NDc0ODksIDI5NSwgMC4wODg5ODMyODk4OTc0NDE4Nl1d",
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP%22%7D%5D": {
+ "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVAiLCAicnVuVG9TZXJpZXMiOiB7InJ0bWRldF90aW55XzF4YjQtMjBlX2JhbGxvb24vMjAyMzA0MTdfMTAyODM1L3Zpc19kYXRhIjogW3sid2FsbFRpbWUiOiAxNjgxNzI3MzM1LjQ0MjIzNzksICJzdGVwIjogMSwgInZhbHVlIjogMC4wNDM5OTk5OTk3NjE1ODE0Mn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzQ1LjYzOTAwNTcsICJzdGVwIjogMiwgInZhbHVlIjogMC4xMjgwMDAwMDYwNzk2NzM3N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODcxOTIsICJzdGVwIjogMywgInZhbHVlIjogMC4zMDc5OTk5OTgzMzEwNjk5NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzYyLjQ5MTM0OSwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQwNTk5OTk4ODMxNzQ4OTZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA0NDAyLCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDI1OTk5OTk5MDQ2MzI1N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzgxLjQyNjk5MSwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjQ1NTAwMDAxMzExMzAyMTg1fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODkuNTM3NDE4OCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjQ5Mzk5OTk4Nzg0MDY1MjQ3fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczOTcuNjg0OTgxLCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuNTQxOTk5OTk1NzA4NDY1Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDA3LjAzMzE4MSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjYxMTAwMDAwMTQzMDUxMTV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQxNi4wMzkzMTk1LCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjYyMzAwMDAyNTc0OTIwNjV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQyNS42NTUyMzgyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjY0NDk5OTk4MDkyNjUxMzd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQzMy4wMDQyMzY1LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjYxNjk5OTk4Mzc4NzUzNjZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Mi4wNDk3MzIyLCAic3RlcCI6IDEzLCAidmFsdWUiOiAwLjYzNDk5OTk5MDQ2MzI1Njh9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Ny45MzQ3MzksICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNjM1OTk5OTc3NTg4NjUzNn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDU3Ljk3NTI4NTMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNjQzOTk5OTkzODAxMTE2OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDYzLjgyNTkzMTgsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNjY2OTk5OTk1NzA4NDY1Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDczLjQ2ODcxMDIsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNjcwMDAwMDE2Njg5MzAwNX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDgwLjc4OTkzNzUsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNjU3MDAwMDA1MjQ1MjA4N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyMzkyOCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC42NDgwMDAwMDE5MDczNDg2fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0OTQuNTY5MzkzLCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjY1MjAwMDAxMDAxMzU4MDN9XX19XQ==",
"headers": [
[
"content-type",
@@ -1796,8 +2538,8 @@
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=train%2Floss_cls": {
- "data": "W1sxNjQ0MzIwMzE1LjI1MDAxNDMsIDEwLCAwLjUzNzM1MzI3NzIwNjQyMDldLCBbMTY0NDMyMDMxOC43ODA4NzY2LCAyMCwgMC4xNzc3NzM2MjQ2NTg1ODQ2XSwgWzE2NDQzMjAzMjYuNDI2MjY2NCwgMzUsIDAuMTU3Mjc3NTg0MDc1OTI3NzNdLCBbMTY0NDMyMDMzMC4wMTc1NzQ1LCA0NSwgMC4xNDQ1NjYyMzc5MjY0ODMxNV0sIFsxNjQ0MzIwMzM3LjY5MDI0MzUsIDYwLCAwLjA5NDM0NTcwMzcyMTA0NjQ1XSwgWzE2NDQzMjAzNDEuMzkyOTk2LCA3MCwgMC4xNDM5MzkzMTYyNzI3MzU2XSwgWzE2NDQzMjAzNDkuMjcxNDkzNywgODUsIDAuMTE4MTM2MzkxMDQzNjYzMDJdLCBbMTY0NDMyMDM1My4wNjc4NDEsIDk1LCAwLjExOTU5MzQ0ODkzNjkzOTI0XSwgWzE2NDQzMjAzNjAuODU4MTE4LCAxMTAsIDAuMTAyMTQyNDMwODQxOTIyNzZdLCBbMTY0NDMyMDM2NC41NTk3ODYsIDEyMCwgMC4wOTQyMDg1NzU3ODUxNjAwNl0sIFsxNjQ0MzIwMzcyLjI2MDA2OCwgMTM1LCAwLjA3ODc0OTUzMDAxNzM3NTk1XSwgWzE2NDQzMjAzNzUuOTAyODc0NSwgMTQ1LCAwLjA5MDEzMjcyMDc2ODQ1MTY5XSwgWzE2NDQzMjAzODMuNTU5NDYwMiwgMTYwLCAwLjA4Nzc0MjM1MDk5NTU0MDYyXSwgWzE2NDQzMjAzODcuMTg5NDU3NCwgMTcwLCAwLjA4ODg3ODQ4MjU4MDE4NDk0XSwgWzE2NDQzMjAzOTQuODc4MjE0MSwgMTg1LCAwLjA3NDgxMDEyNDkzMzcxOTY0XSwgWzE2NDQzMjAzOTguNTE0MzMwNiwgMTk1LCAwLjA3NDMxNzE4NzA3MDg0NjU2XSwgWzE2NDQzMjA0MDYuMjMyMzU1NCwgMjEwLCAwLjA2NDg4NzM3NDYzOTUxMTExXSwgWzE2NDQzMjA0MDkuODc3MzUyMiwgMjIwLCAwLjA1Mjk1NDY5MjM5MzU0MTMzNl0sIFsxNjQ0MzIwNDE3LjYwMjg2MiwgMjM1LCAwLjA2NzU5ODU3Mzg2MzUwNjMyXSwgWzE2NDQzMjA0MjEuMjcxOTcyNywgMjQ1LCAwLjA1OTI4NDc5ODgwMDk0NTI4XSwgWzE2NDQzMjA0MjkuMDE0MDA2NCwgMjYwLCAwLjA2MTc3NzE0ODM5NTc3Njc1XSwgWzE2NDQzMjA0MzIuNzE3MzY5MywgMjcwLCAwLjA1NTIzNzQwODcyNzQwNzQ1NV0sIFsxNjQ0MzIwNDQwLjUwMjQ3OSwgMjg1LCAwLjA1NjMyNjE4NDQyMTc3NzcyNV0sIFsxNjQ0MzIwNDQ0LjE5NDEzODUsIDI5NSwgMC4wNDg2Njc0MzgzMjgyNjYxNDRdXQ==",
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_50%22%7D%5D": {
+ "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfNTAiLCAicnVuVG9TZXJpZXMiOiB7InJ0bWRldF90aW55XzF4YjQtMjBlX2JhbGxvb24vMjAyMzA0MTdfMTAyODM1L3Zpc19kYXRhIjogW3sid2FsbFRpbWUiOiAxNjgxNzI3MzM1LjQ0MjQ1MDMsICJzdGVwIjogMSwgInZhbHVlIjogMC4wNTkwMDAwMDAzNTc2Mjc4N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzQ1LjYzOTEwOTYsICJzdGVwIjogMiwgInZhbHVlIjogMC4xNjUwMDAwMDY1NTY1MTA5M30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODgxNDgsICJzdGVwIjogMywgInZhbHVlIjogMC4zODEwMDAwMTIxNTkzNDc1M30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzYyLjQ5MTQ1MDgsICJzdGVwIjogNCwgInZhbHVlIjogMC41MzEwMDAwMTgxMTk4MTJ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA2MTc2LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNTQ2OTk5OTkwOTQwMDk0fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODEuNDI3MDg5NywgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjU3ODk5OTk5NjE4NTMwMjd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4OS41Mzc1NDI4LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjU3OTk5OTkyMzcwNjA1NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3Mzk3LjY4NTA4NTMsICJzdGVwIjogOCwgInZhbHVlIjogMC42OTMwMDAwMTg1OTY2NDkyfSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MDcuMDMzMzAyNSwgInN0ZXAiOiA5LCAidmFsdWUiOiAwLjcyNTAwMDAyMzg0MTg1Nzl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQxNi4wMzk0NTQyLCAic3RlcCI6IDEwLCAidmFsdWUiOiAwLjc0MDk5OTk5NjY2MjEzOTl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQyNS42NTUzNTAyLCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjc3MjAwMDAxNDc4MTk1MTl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQzMy4wMDQzMzczLCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc1MDk5OTk4NzEyNTM5Njd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Mi4wNDk4MjUsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzU0OTk5OTk1MjMxNjI4NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQ3LjkzNDgzMTEsICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNzM5MDAwMDIyNDExMzQ2NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDU3Ljk3NTQwNTIsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ2My44MjYwMjU3LCAic3RlcCI6IDE2LCAidmFsdWUiOiAwLjc2ODk5OTk5MzgwMTExNjl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ3My40Njg4MDgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzY4OTk5OTkzODAxMTE2OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDgwLjc5MDAzMzgsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzU0OTk5OTk1MjMxNjI4NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyNDAyNTUsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNzU4MDAwMDE2MjEyNDYzNH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDk0LjU2OTUyMywgInN0ZXAiOiAyMCwgInZhbHVlIjogMC43OTQwMDAwMjk1NjM5MDM4fV19fV0=",
"headers": [
[
"content-type",
@@ -1808,153 +2550,130 @@
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=train%2Floss_rpn_bbox": {
- "data": "W1sxNjQ0MzIwMzE1LjI0OTk2MjYsIDEwLCAwLjAxNzI5NTM3MzYwMzcwMTU5XSwgWzE2NDQzMjAzMTguNzgwODI5NywgMjAsIDAuMDExOTM2NjMwMTIyMzYzNTY3XSwgWzE2NDQzMjAzMjYuNDI2MTg3LCAzNSwgMC4wMTM4NTU5NTY0OTQ4MDgxOTddLCBbMTY0NDMyMDMzMC4wMTc1MjQ3LCA0NSwgMC4wMTI3MDM3OTU5MTczMzIxNzJdLCBbMTY0NDMyMDMzNy42OTAxNjkzLCA2MCwgMC4wMTAzODk3MTcyOTU3NjU4NzddLCBbMTY0NDMyMDM0MS4zOTI5NDI3LCA3MCwgMC4wMTMyMzY2MDA5MDU2NTY4MTVdLCBbMTY0NDMyMDM0OS4yNzA0Mjg0LCA4NSwgMC4wMTM0MTcxNTE3NTY1ODQ2NDRdLCBbMTY0NDMyMDM1My4wNjc3OTMxLCA5NSwgMC4wMTE3NDY5MzM2ODM3NTMwMTRdLCBbMTY0NDMyMDM2MC44NTgwNjY4LCAxMTAsIDAuMDA5MTM3NjU2NTM5Njc4NTc0XSwgWzE2NDQzMjAzNjQuNTU5NzM4NiwgMTIwLCAwLjAxMDU5MDI4MjI2ODgyMjE5M10sIFsxNjQ0MzIwMzcyLjI1OTYxNDUsIDEzNSwgMC4wMDgxMzc2NzY4NjQ4NjI0NDJdLCBbMTY0NDMyMDM3NS45MDI4MjI3LCAxNDUsIDAuMDEwMDA2NDY0MDg2NDcyOTg4XSwgWzE2NDQzMjAzODMuNTU5Mzg2NywgMTYwLCAwLjAwOTM0NDg2MzcwNTMzNzA0OF0sIFsxNjQ0MzIwMzg3LjE4OTM5MjYsIDE3MCwgMC4wMTEyMjc3NjMyNTc5MjA3NDJdLCBbMTY0NDMyMDM5NC44NzgxNDE0LCAxODUsIDAuMDA5MzYxMDM5ODQ3MTM1NTQ0XSwgWzE2NDQzMjAzOTguNTE0MjgxLCAxOTUsIDAuMDA4MDg0NDMwMzU5MzAzOTUxXSwgWzE2NDQzMjA0MDYuMjMyMjg4NCwgMjEwLCAwLjAwODUzMzAxMDI1OTI3MDY2OF0sIFsxNjQ0MzIwNDA5Ljg3NzMwMjYsIDIyMCwgMC4wMDY1NTUxMjc5MTEyNjk2NjVdLCBbMTY0NDMyMDQxNy42MDI4MDgsIDIzNSwgMC4wMDg0MTQ2NTk2NDkxMzM2ODJdLCBbMTY0NDMyMDQyMS4yNzE5Mjc4LCAyNDUsIDAuMDA1NTI1NDMwNjY0NDIwMTI4XSwgWzE2NDQzMjA0MjkuMDEzOTQ5NCwgMjYwLCAwLjAwNzE4OTA4NDc3NTc0NTg2OV0sIFsxNjQ0MzIwNDMyLjcxNzMxOTMsIDI3MCwgMC4wMDczNTk3NjU5MzU2ODkyMTFdLCBbMTY0NDMyMDQ0MC41MDI0MDk3LCAyODUsIDAuMDA2MDM4NTM5NTc3Mjc1NTE1XSwgWzE2NDQzMjA0NDQuMTk0MDk0NCwgMjk1LCAwLjAwNDg5MDcyNTQ4MjI1NTIyXV0=",
+ "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": {
+ "data": "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",
"headers": [
[
"content-type",
- "application/json"
+ "font/woff2"
]
],
"ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/scalars?run=tf_logs&tag=train%2Floss_rpn_cls": {
- "data": "W1sxNjQ0MzIwMzE1LjI0OTc1NzgsIDEwLCAwLjAyNTQ0NjA1NzMxOTY0MTExM10sIFsxNjQ0MzIwMzE4Ljc4MDcyNiwgMjAsIDAuMDE1Nzg1MzI1MzE4NTc0OTA1XSwgWzE2NDQzMjAzMjYuNDI1OTY4LCAzNSwgMC4wMjAyNjAzNDMzMjgxMTgzMjRdLCBbMTY0NDMyMDMzMC4wMTc0MDQ2LCA0NSwgMC4wMTI3Mzg1MzQyNDkzNjUzM10sIFsxNjQ0MzIwMzM3LjY4OTk2NDUsIDYwLCAwLjAwNjM4NDAzNzQzNTA1NDc3OV0sIFsxNjQ0MzIwMzQxLjM5MjgxNTgsIDcwLCAwLjAwNzI0OTkyOTk0MjE5MDY0N10sIFsxNjQ0MzIwMzQ5LjI3MDE3NjQsIDg1LCAwLjAwNTcxNjQ3OTM4MzQwOTAyM10sIFsxNjQ0MzIwMzUzLjA2NzY4NzMsIDk1LCAwLjAwNTAxNzgwMzUxNjIzODkyOF0sIFsxNjQ0MzIwMzYwLjg1Nzg1LCAxMTAsIDAuMDAyODI3NDAxMjcyOTUyNTU2Nl0sIFsxNjQ0MzIwMzY0LjU1OTYzOSwgMTIwLCAwLjAwMjk3MzE0NTU3MjQ2ODYzODRdLCBbMTY0NDMyMDM3Mi4yNTkzNjEsIDEzNSwgMC4wMDI0NzkzMDQ3OTIzNTk0NzEzXSwgWzE2NDQzMjAzNzUuOTAyNzA1NywgMTQ1LCAwLjAwMzQ5MzUyODU4MDI5MzA1OTNdLCBbMTY0NDMyMDM4My41NTkxMjY5LCAxNjAsIDAuMDAyMjYwODkxNzIwNjUyNTgwM10sIFsxNjQ0MzIwMzg3LjE4OTI4OTgsIDE3MCwgMC4wMDM5NTEyOTY2NzU5NTAyODldLCBbMTY0NDMyMDM5NC44Nzc5MTU5LCAxODUsIDAuMDAxOTYzNTE0ODM0NjQyNDEwM10sIFsxNjQ0MzIwMzk4LjUxNDE0NDQsIDE5NSwgMC4wMDMwNzM3NjMzMzUxMjM2NThdLCBbMTY0NDMyMDQwNi4yMzE5ODksIDIxMCwgMC4wMDIzODg1MzI1MDYzMDE5OTldLCBbMTY0NDMyMDQwOS44NzcxNjYzLCAyMjAsIDAuMDAwOTY4MTg2NTM0MDA5ODczOV0sIFsxNjQ0MzIwNDE3LjYwMjU3ODYsIDIzNSwgMC4wMDQwODI0ODEzNzY4MjY3NjNdLCBbMTY0NDMyMDQyMS4yNzE4MjY1LCAyNDUsIDAuMDAwODE1Nzg4NjMzMTkwMDk1NF0sIFsxNjQ0MzIwNDI5LjAxMzc2NzcsIDI2MCwgMC4wMDA3MDA0ODU2MDE1NTU1NTYxXSwgWzE2NDQzMjA0MzIuNzE3MTY4NiwgMjcwLCAwLjAwMTA5NTUwOTUwNTgzMDcwNTJdLCBbMTY0NDMyMDQ0MC41MDIxNzU2LCAyODUsIDAuMDAxMDMwMjQ5NDA0NzIwOTYyXSwgWzE2NDQzMjA0NDQuMTkzOTgxMiwgMjk1LCAwLjAwMTMxNzE4NDQxODQzOTg2NTFdXQ==",
+ "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": {
+ "data": "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",
"headers": [
[
"content-type",
- "application/json"
+ "font/woff2"
]
],
"ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugin/scalars/tags": {
- "data": "eyJ0Zl9sb2dzIjogeyJ0cmFpbi9sb3NzX2NscyI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAidmFsL21BUCI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAidHJhaW4vbG9zc19iYm94IjogeyJkaXNwbGF5TmFtZSI6ICIiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJ0cmFpbi9hY2MiOiB7ImRpc3BsYXlOYW1lIjogIiIsICJkZXNjcmlwdGlvbiI6ICIifSwgInZhbC9BUDUwIjogeyJkaXNwbGF5TmFtZSI6ICIiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJtb21lbnR1bSI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAidHJhaW4vbG9zcyI6IHsiZGlzcGxheU5hbWUiOiAiIiwgImRlc2NyaXB0aW9uIjogIiJ9LCAidHJhaW4vbG9zc19ycG5fY2xzIjogeyJkaXNwbGF5TmFtZSI6ICIiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJsZWFybmluZ19yYXRlIjogeyJkaXNwbGF5TmFtZSI6ICIiLCAiZGVzY3JpcHRpb24iOiAiIn0sICJ0cmFpbi9sb3NzX3Jwbl9iYm94IjogeyJkaXNwbGF5TmFtZSI6ICIiLCAiZGVzY3JpcHRpb24iOiAiIn19fQ==",
+ "https://localhost:6006/font-roboto/vPcynSL0qHq_6dX7lKVByXYhjbSpvc47ee6xR_80Hnw.woff2": {
+ "data": "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",
"headers": [
[
"content-type",
- "application/json"
+ "font/woff2"
]
],
"ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/plugins_listing": {
- "data": "eyJzY2FsYXJzIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IHRydWUsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJzY2FsYXJzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1zY2FsYXItZGFzaGJvYXJkIn19LCAiY3VzdG9tX3NjYWxhcnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJDdXN0b20gU2NhbGFycyIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtY3VzdG9tLXNjYWxhci1kYXNoYm9hcmQifX0sICJpbWFnZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJpbWFnZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWltYWdlLWRhc2hib2FyZCJ9fSwgImF1ZGlvIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiYXVkaW8iLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWF1ZGlvLWRhc2hib2FyZCJ9fSwgImRlYnVnZ2VyLXYyIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiRGVidWdnZXIgVjIiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiTkdfQ09NUE9ORU5UIn19LCAiZ3JhcGhzIjogeyJkaXNhYmxlX3JlbG9hZCI6IHRydWUsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJncmFwaHMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWdyYXBoLWRhc2hib2FyZCJ9fSwgImRpc3RyaWJ1dGlvbnMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJkaXN0cmlidXRpb25zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIn19LCAiaGlzdG9ncmFtcyI6IHsiZGlzYWJsZV9yZWxvYWQiOiBmYWxzZSwgImVuYWJsZWQiOiBmYWxzZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogImhpc3RvZ3JhbXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLWhpc3RvZ3JhbS1kYXNoYm9hcmQifX0sICJ0ZXh0IjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAidGV4dCIsICJsb2FkaW5nX21lY2hhbmlzbSI6IHsidHlwZSI6ICJDVVNUT01fRUxFTUVOVCIsICJlbGVtZW50X25hbWUiOiAidGYtdGV4dC1kYXNoYm9hcmQifX0sICJwcl9jdXJ2ZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQUiBDdXJ2ZXMiLCAibG9hZGluZ19tZWNoYW5pc20iOiB7InR5cGUiOiAiQ1VTVE9NX0VMRU1FTlQiLCAiZWxlbWVudF9uYW1lIjogInRmLXByLWN1cnZlLWRhc2hib2FyZCJ9fSwgInByb2ZpbGVfcmVkaXJlY3QiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJQcm9maWxlIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCJ9fSwgImhwYXJhbXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJocGFyYW1zIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJ0Zi1ocGFyYW1zLWRhc2hib2FyZCJ9fSwgIm1lc2giOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogZmFsc2UsICJyZW1vdmVfZG9tIjogZmFsc2UsICJ0YWJfbmFtZSI6ICJtZXNoIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIkNVU1RPTV9FTEVNRU5UIiwgImVsZW1lbnRfbmFtZSI6ICJtZXNoLWRhc2hib2FyZCJ9fSwgInRpbWVzZXJpZXMiOiB7ImRpc2FibGVfcmVsb2FkIjogZmFsc2UsICJlbmFibGVkIjogdHJ1ZSwgInJlbW92ZV9kb20iOiBmYWxzZSwgInRhYl9uYW1lIjogIlRpbWUgU2VyaWVzIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIk5HX0NPTVBPTkVOVCJ9fSwgInByb2plY3RvciI6IHsiZGlzYWJsZV9yZWxvYWQiOiB0cnVlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAicHJvamVjdG9yIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIklGUkFNRSIsICJtb2R1bGVfcGF0aCI6ICIvZGF0YS9wbHVnaW4vcHJvamVjdG9yL2luZGV4LmpzIn19LCAid2hhdGlmIjogeyJkaXNhYmxlX3JlbG9hZCI6IGZhbHNlLCAiZW5hYmxlZCI6IGZhbHNlLCAicmVtb3ZlX2RvbSI6IGZhbHNlLCAidGFiX25hbWUiOiAiV2hhdC1JZiBUb29sIiwgImxvYWRpbmdfbWVjaGFuaXNtIjogeyJ0eXBlIjogIklGUkFNRSIsICJtb2R1bGVfcGF0aCI6ICIvZGF0YS9wbHVnaW4vd2hhdGlmL2luZGV4LmpzIn19fQ==",
+ "https://localhost:6006/icon_bundle.svg": {
+ "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hhbmdlX2hpc3RvcnlfMjRweCI+PHBhdGggZD0iTTEyIDcuNzdMMTguMzkgMThINS42MUwxMiA3Ljc3TTEyIDRMMiAyMGgyMEwxMiA0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fbGVmdF8yNHB4Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjaGV2cm9uX3JpZ2h0XzI0cHgiPjxwYXRoIGQ9Ik0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJjbGVhcl8yNHB4Ij48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImNsb3NlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNvbnRlbnRfY29weV8yNHB4Ij48cGF0aCBkPSJNMTYgMUg0Yy0xLjEgMC0yIC45LTIgMnYxNGgyVjNoMTJWMXptMyA0SDhjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTFjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxNkg4VjdoMTF2MTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRhcmtfbW9kZV8yNHB4Ij48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48cGF0aCBkPSJNMTIsM2MtNC45NywwLTksNC4wMy05LDlzNC4wMyw5LDksOXM5LTQuMDMsOS05YzAtMC40Ni0wLjA0LTAuOTItMC4xLTEuMzZjLTAuOTgsMS4zNy0yLjU4LDIuMjYtNC40LDIuMjYgYy0yLjk4LDAtNS40LTIuNDItNS40LTUuNGMwLTEuODEsMC44OS0zLjQyLDIuMjYtNC40QzEyLjkyLDMuMDQsMTIuNDYsMywxMiwzTDEyLDN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZG9uZV8yNHB4Ij48cGF0aCBkPSJNOSAxNi4yTDQuOCAxMmwtMS40IDEuNEw5IDE5IDIxIDdsLTEuNC0xLjRMOSAxNi4yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImRyYWdfaW5kaWNhdG9yXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMSAxOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTIgLjktMiAyLTIgMiAuOSAyIDJ6bS0yLThjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wLTZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem02IDRjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImVkaXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXJyb3JfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTJoMnYyem0wLTRoLTJWN2gydjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX2xlc3NfMjRweCI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImV4cGFuZF9tb3JlXzI0cHgiPjxwYXRoIGQ9Ik0xNi41OSA4LjU5TDEyIDEzLjE3IDcuNDEgOC41OSA2IDEwbDYgNiA2LTZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImZpbHRlcl9hbHRfMjRweCI+PGc+PHBhdGggZD0iTTAsMGgyNCBNMjQsMjRIMCIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik00LjI1LDUuNjFDNi4yNyw4LjIsMTAsMTMsMTAsMTN2NmMwLDAuNTUsMC40NSwxLDEsMWgyYzAuNTUsMCwxLTAuNDUsMS0xdi02YzAsMCwzLjcyLTQuOCw1Ljc0LTcuMzkgQzIwLjI1LDQuOTUsMTkuNzgsNCwxOC45NSw0SDUuMDRDNC4yMSw0LDMuNzQsNC45NSw0LjI1LDUuNjF6Ii8+PHBhdGggZD0iTTAsMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImZsYWdfMjRweCI+PHBhdGggZD0iTTE0LjQgNkwxNCA0SDV2MTdoMnYtN2g1LjZsLjQgMmg3VjZ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRINXY1aDV2LTJIN3YtM3ptLTItNGgyVjdoM1Y1SDV2NXptMTIgN2gtM3YyaDV2LTVoLTJ2M3pNMTQgNXYyaDN2M2gyVjVoLTV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZnVsbHNjcmVlbl9leGl0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNSAxNmgzdjNoMnYtNUg1djJ6bTMtOEg1djJoNVY1SDh2M3ptNiAxMWgydi0zaDN2LTJoLTV2NXptMi0xMVY1aC0ydjVoNVY4aC0zeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImdldF9hcHBfMjRweCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJncm91cF93b3JrXzI0cHgiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyek04IDE3LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41ek05LjUgOGMwLTEuMzggMS4xMi0yLjUgMi41LTIuNXMyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjVTOS41IDkuMzggOS41IDh6bTYuNSA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImhlbHBfb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJpbWFnZV9zZWFyY2hfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOCAxM3Y3SDRWNmg1LjAyYy4wNS0uNzEuMjItMS4zOC40OC0ySDRjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTVsLTItMnptLTEuNSA1aC0xMWwyLjc1LTMuNTMgMS45NiAyLjM2IDIuNzUtMy41NHptMi44LTkuMTFjLjQ0LS43LjctMS41MS43LTIuMzlDMjAgNC4wMSAxNy45OSAyIDE1LjUgMlMxMSA0LjAxIDExIDYuNXMyLjAxIDQuNSA0LjQ5IDQuNWMuODggMCAxLjctLjI2IDIuMzktLjdMMjEgMTMuNDIgMjIuNDIgMTIgMTkuMyA4Ljg5ek0xNS41IDlDMTQuMTIgOSAxMyA3Ljg4IDEzIDYuNVMxNC4xMiA0IDE1LjUgNCAxOCA1LjEyIDE4IDYuNSAxNi44OCA5IDE1LjUgOXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJpbmZvX291dGxpbmVfMjRweCI+PHBhdGggZD0iTTExIDE3aDJ2LTZoLTJ2NnptMS0xNUM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LThzMy41OS04IDgtOCA4IDMuNTkgOCA4LTMuNTkgOC04IDh6TTExIDloMlY3aC0ydjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNiw5VjRsMSwwYzAuNTUsMCwxLTAuNDUsMS0xdjBjMC0wLjU1LTAuNDUtMS0xLTFIN0M2LjQ1LDIsNiwyLjQ1LDYsM3YwIGMwLDAuNTUsMC40NSwxLDEsMWwxLDB2NWMwLDEuNjYtMS4zNCwzLTMsM2gwdjJoNS45N3Y3bDEsMWwxLTF2LTdIMTl2LTJoMEMxNy4zNCwxMiwxNiwxMC42NiwxNiw5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJrZWVwX291dGxpbmVfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PC9nPjxnPjxwYXRoIGQ9Ik0xNCw0djVjMCwxLjEyLDAuMzcsMi4xNiwxLDNIOWMwLjY1LTAuODYsMS0xLjksMS0zVjRIMTQgTTE3LDJIN0M2LjQ1LDIsNiwyLjQ1LDYsM2MwLDAuNTUsMC40NSwxLDEsMWMwLDAsMCwwLDAsMGwxLDB2NSBjMCwxLjY2LTEuMzQsMy0zLDN2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmMwLDAsMCwwLDAsMGMtMS42NiwwLTMtMS4zNC0zLTNWNGwxLDBjMCwwLDAsMCwwLDBjMC41NSwwLDEtMC40NSwxLTEgQzE4LDIuNDUsMTcuNTUsMiwxNywyTDE3LDJ6Ii8+PC9nPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaWdodF9tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiw3Yy0yLjc2LDAtNSwyLjI0LTUsNXMyLjI0LDUsNSw1czUtMi4yNCw1LTVTMTQuNzYsNywxMiw3TDEyLDd6IE0yLDEzbDIsMGMwLjU1LDAsMS0wLjQ1LDEtMXMtMC40NS0xLTEtMWwtMiwwIGMtMC41NSwwLTEsMC40NS0xLDFTMS40NSwxMywyLDEzeiBNMjAsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDBjLTAuNTUsMC0xLDAuNDUtMSwxUzE5LjQ1LDEzLDIwLDEzeiBNMTEsMnYyIGMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xVjJjMC0wLjU1LTAuNDUtMS0xLTFTMTEsMS40NSwxMSwyeiBNMTEsMjB2MmMwLDAuNTUsMC40NSwxLDEsMXMxLTAuNDUsMS0xdi0yYzAtMC41NS0wLjQ1LTEtMS0xIEMxMS40NSwxOSwxMSwxOS40NSwxMSwyMHogTTUuOTksNC41OGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxbDEuMDYsMS4wNiBjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBzMC4zOS0xLjAzLDAtMS40MUw1Ljk5LDQuNTh6IE0xOC4zNiwxNi45NWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxIGwxLjA2LDEuMDZjMC4zOSwwLjM5LDEuMDMsMC4zOSwxLjQxLDBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFMMTguMzYsMTYuOTV6IE0xOS40Miw1Ljk5YzAuMzktMC4zOSwwLjM5LTEuMDMsMC0xLjQxIGMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEwxOS40Miw1Ljk5eiBNNy4wNSwxOC4zNiBjMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDFjLTAuMzktMC4zOS0xLjAzLTAuMzktMS40MSwwbC0xLjA2LDEuMDZjLTAuMzksMC4zOS0wLjM5LDEuMDMsMCwxLjQxczEuMDMsMC4zOSwxLjQxLDBMNy4wNSwxOC4zNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibGluZV93ZWlnaHRfMjRweCI+PGc+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0IiB4PSIwIi8+PC9nPjxnPjxnPjxnPjxwYXRoIGQ9Ik0zLDE3aDE4di0ySDNWMTd6IE0zLDIwaDE4di0xSDNWMjB6IE0zLDEzaDE4di0zSDNWMTN6IE0zLDR2NGgxOFY0SDN6Ii8+PC9nPjwvZz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibW9yZV92ZXJ0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgOGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ibm90aWZpY2F0aW9uc19ub25lXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIgMjJjMS4xIDAgMi0uOSAyLTJoLTRjMCAxLjEuOSAyIDIgMnptNi02di01YzAtMy4wNy0xLjYzLTUuNjQtNC41LTYuMzJWNGMwLS44My0uNjctMS41LTEuNS0xLjVzLTEuNS42Ny0xLjUgMS41di42OEM3LjY0IDUuMzYgNiA3LjkyIDYgMTF2NWwtMiAydjFoMTZ2LTFsLTItMnptLTIgMUg4di02YzAtMi40OCAxLjUxLTQuNSA0LTQuNXM0IDIuMDIgNCA0LjV2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJwYWxldHRlXzI0cHgiPjxwYXRoIGQ9Ik0xMiAzYy00Ljk3IDAtOSA0LjAzLTkgOXM0LjAzIDkgOSA5Yy44MyAwIDEuNS0uNjcgMS41LTEuNSAwLS4zOS0uMTUtLjc0LS4zOS0xLjAxLS4yMy0uMjYtLjM4LS42MS0uMzgtLjk5IDAtLjgzLjY3LTEuNSAxLjUtMS41SDE2YzIuNzYgMCA1LTIuMjQgNS01IDAtNC40Mi00LjAzLTgtOS04em0tNS41IDljLS44MyAwLTEuNS0uNjctMS41LTEuNVM1LjY3IDkgNi41IDkgOCA5LjY3IDggMTAuNSA3LjMzIDEyIDYuNSAxMnptMy00QzguNjcgOCA4IDcuMzMgOCA2LjVTOC42NyA1IDkuNSA1czEuNS42NyAxLjUgMS41UzEwLjMzIDggOS41IDh6bTUgMGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzEzLjY3IDUgMTQuNSA1czEuNS42NyAxLjUgMS41UzE1LjMzIDggMTQuNSA4em0zIDRjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxNi42NyA5IDE3LjUgOXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0icmVmcmVzaF8yNHB4Ij48cGF0aCBkPSJNMTcuNjUgNi4zNUMxNi4yIDQuOSAxNC4yMSA0IDEyIDRjLTQuNDIgMC03Ljk5IDMuNTgtNy45OSA4czMuNTcgOCA3Ljk5IDhjMy43MyAwIDYuODQtMi41NSA3LjczLTZoLTIuMDhjLS44MiAyLjMzLTMuMDQgNC01LjY1IDQtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNmMxLjY2IDAgMy4xNC42OSA0LjIyIDEuNzhMMTMgMTFoN1Y0bC0yLjM1IDIuMzV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2VhcmNoXzI0cHgiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InNldHRpbmdzXzI0cHgiPjxwYXRoIGQ9Ik0xOS40MyAxMi45OGMuMDQtLjMyLjA3LS42NC4wNy0uOThzLS4wMy0uNjYtLjA3LS45OGwyLjExLTEuNjVjLjE5LS4xNS4yNC0uNDIuMTItLjY0bC0yLTMuNDZjLS4xMi0uMjItLjM5LS4zLS42MS0uMjJsLTIuNDkgMWMtLjUyLS40LTEuMDgtLjczLTEuNjktLjk4bC0uMzgtMi42NUMxNC40NiAyLjE4IDE0LjI1IDIgMTQgMmgtNGMtLjI1IDAtLjQ2LjE4LS40OS40MmwtLjM4IDIuNjVjLS42MS4yNS0xLjE3LjU5LTEuNjkuOThsLTIuNDktMWMtLjIzLS4wOS0uNDkgMC0uNjEuMjJsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4cy4wMy42Ni4wNy45OGwtMi4xMSAxLjY1Yy0uMTkuMTUtLjI0LjQyLS4xMi42NGwyIDMuNDZjLjEyLjIyLjM5LjMuNjEuMjJsMi40OS0xYy41Mi40IDEuMDguNzMgMS42OS45OGwuMzggMi42NWMuMDMuMjQuMjQuNDIuNDkuNDJoNGMuMjUgMCAuNDYtLjE4LjQ5LS40MmwuMzgtMi42NWMuNjEtLjI1IDEuMTctLjU5IDEuNjktLjk4bDIuNDkgMWMuMjMuMDkuNDkgMCAuNjEtLjIybDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6TTEyIDE1LjVjLTEuOTMgMC0zLjUtMS41Ny0zLjUtMy41czEuNTctMy41IDMuNS0zLjUgMy41IDEuNTcgMy41IDMuNS0xLjU3IDMuNS0zLjUgMy41eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX2JhY2t1cF9yZXN0b3JlXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTQgMTJjMC0xLjEtLjktMi0yLTJzLTIgLjktMiAyIC45IDIgMiAyIDItLjkgMi0yem0tMi05Yy00Ljk3IDAtOSA0LjAzLTkgOUgwbDQgNCA0LTRINWMwLTMuODcgMy4xMy03IDctN3M3IDMuMTMgNyA3LTMuMTMgNy03IDdjLTEuNTEgMC0yLjkxLS40OS00LjA2LTEuM2wtMS40MiAxLjQ0QzguMDQgMjAuMyA5Ljk0IDIxIDEyIDIxYzQuOTcgMCA5LTQuMDMgOS05cy00LjAzLTktOS05eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9InNldHRpbmdzX292ZXJzY2FuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMTIuMDEgNS41TDEwIDhoNGwtMS45OS0yLjV6TTE4IDEwdjRsMi41LTEuOTlMMTggMTB6TTYgMTBsLTIuNSAyLjAxTDYgMTR2LTR6bTggNmgtNGwyLjAxIDIuNUwxNCAxNnptNy0xM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTYuMDFIM1Y0Ljk5aDE4djE0LjAyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InZpc2liaWxpdHlfb2ZmXzI0cHgiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJ3YXJuaW5nXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiIvPjwvc3ZnPjwvZGVmcz48L3N2Zz4K",
"headers": [
[
"content-type",
- "application/json"
+ "image/svg+xml; charset=utf-8"
]
],
"ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/data/runs": {
- "data": "WyJ0Zl9sb2dzIl0=",
+ "https://localhost:6006/index.js?_file_hash=486f34d2": {
+ "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLy8gQ29weXJpZ2h0IDIwMTQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLy8gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgohZnVuY3Rpb24oKXt2YXIgYT17fSxiPXt9LGM9e307IWZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGE7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1hW2NdO3JldHVybiBifWZ1bmN0aW9uIGQoKXt0aGlzLl9kZWxheT0wLHRoaXMuX2VuZERlbGF5PTAsdGhpcy5fZmlsbD0ibm9uZSIsdGhpcy5faXRlcmF0aW9uU3RhcnQ9MCx0aGlzLl9pdGVyYXRpb25zPTEsdGhpcy5fZHVyYXRpb249MCx0aGlzLl9wbGF5YmFja1JhdGU9MSx0aGlzLl9kaXJlY3Rpb249Im5vcm1hbCIsdGhpcy5fZWFzaW5nPSJsaW5lYXIiLHRoaXMuX2Vhc2luZ0Z1bmN0aW9uPXh9ZnVuY3Rpb24gZSgpe3JldHVybiBhLmlzRGVwcmVjYXRlZCgiSW52YWxpZCB0aW1pbmcgaW5wdXRzIiwiMjAxNi0wMy0wMiIsIlR5cGVFcnJvciBleGNlcHRpb25zIHdpbGwgYmUgdGhyb3duIGluc3RlYWQuIiwhMCl9ZnVuY3Rpb24gZihiLGMsZSl7dmFyIGY9bmV3IGQ7cmV0dXJuIGMmJihmLmZpbGw9ImJvdGgiLGYuZHVyYXRpb249ImF1dG8iKSwibnVtYmVyIiE9dHlwZW9mIGJ8fGlzTmFOKGIpP3ZvaWQgMCE9PWImJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGIpLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoImF1dG8iIT1iW2NdKXtpZigoIm51bWJlciI9PXR5cGVvZiBmW2NdfHwiZHVyYXRpb24iPT1jKSYmKCJudW1iZXIiIT10eXBlb2YgYltjXXx8aXNOYU4oYltjXSkpKXJldHVybjtpZigiZmlsbCI9PWMmJi0xPT12LmluZGV4T2YoYltjXSkpcmV0dXJuO2lmKCJkaXJlY3Rpb24iPT1jJiYtMT09dy5pbmRleE9mKGJbY10pKXJldHVybjtpZigicGxheWJhY2tSYXRlIj09YyYmMSE9PWJbY10mJmEuaXNEZXByZWNhdGVkKCJBbmltYXRpb25FZmZlY3RUaW1pbmcucGxheWJhY2tSYXRlIiwiMjAxNC0xMS0yOCIsIlVzZSBBbmltYXRpb24ucGxheWJhY2tSYXRlIGluc3RlYWQuIikpcmV0dXJuO2ZbY109YltjXX19KTpmLmR1cmF0aW9uPWIsZn1mdW5jdGlvbiBnKGEpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYSYmKGE9aXNOYU4oYSk/e2R1cmF0aW9uOjB9OntkdXJhdGlvbjphfSksYX1mdW5jdGlvbiBoKGIsYyl7cmV0dXJuIGI9YS5udW1lcmljVGltaW5nVG9PYmplY3QoYiksZihiLGMpfWZ1bmN0aW9uIGkoYSxiLGMsZCl7cmV0dXJuIGE8MHx8YT4xfHxjPDB8fGM+MT94OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGYoYSxiLGMpe3JldHVybiAzKmEqKDEtYykqKDEtYykqYyszKmIqKDEtYykqYypjK2MqYypjfWlmKGU8PTApe3ZhciBnPTA7cmV0dXJuIGE+MD9nPWIvYTohYiYmYz4wJiYoZz1kL2MpLGcqZX1pZihlPj0xKXt2YXIgaD0wO3JldHVybiBjPDE/aD0oZC0xKS8oYy0xKToxPT1jJiZhPDEmJihoPShiLTEpLyhhLTEpKSwxK2gqKGUtMSl9Zm9yKHZhciBpPTAsaj0xO2k8ajspe3ZhciBrPShpK2opLzIsbD1mKGEsYyxrKTtpZihNYXRoLmFicyhlLWwpPDFlLTUpcmV0dXJuIGYoYixkLGspO2w8ZT9pPWs6aj1rfXJldHVybiBmKGIsZCxrKX19ZnVuY3Rpb24gaihhLGIpe3JldHVybiBmdW5jdGlvbihjKXtpZihjPj0xKXJldHVybiAxO3ZhciBkPTEvYTtyZXR1cm4oYys9YipkKS1jJWR9fWZ1bmN0aW9uIGsoYSl7Q3x8KEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUpLEMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb249IiIsQy5hbmltYXRpb25UaW1pbmdGdW5jdGlvbj1hO3ZhciBiPUMuYW5pbWF0aW9uVGltaW5nRnVuY3Rpb247aWYoIiI9PWImJmUoKSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIiBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgZWFzaW5nIik7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtpZigibGluZWFyIj09YSlyZXR1cm4geDt2YXIgYj1FLmV4ZWMoYSk7aWYoYilyZXR1cm4gaS5hcHBseSh0aGlzLGIuc2xpY2UoMSkubWFwKE51bWJlcikpO3ZhciBjPUYuZXhlYyhhKTtpZihjKXJldHVybiBqKE51bWJlcihjWzFdKSxBKTt2YXIgZD1HLmV4ZWMoYSk7cmV0dXJuIGQ/aihOdW1iZXIoZFsxXSkse3N0YXJ0OnksbWlkZGxlOnosZW5kOkF9W2RbMl1dKTpCW2FdfHx4fWZ1bmN0aW9uIG0oYSl7cmV0dXJuIE1hdGguYWJzKG4oYSkvYS5wbGF5YmFja1JhdGUpfWZ1bmN0aW9uIG4oYSl7cmV0dXJuIDA9PT1hLmR1cmF0aW9ufHwwPT09YS5pdGVyYXRpb25zPzA6YS5kdXJhdGlvbiphLml0ZXJhdGlvbnN9ZnVuY3Rpb24gbyhhLGIsYyl7aWYobnVsbD09YilyZXR1cm4gSDt2YXIgZD1jLmRlbGF5K2ErYy5lbmREZWxheTtyZXR1cm4gYjxNYXRoLm1pbihjLmRlbGF5LGQpP0k6Yj49TWF0aC5taW4oYy5kZWxheSthLGQpP0o6S31mdW5jdGlvbiBwKGEsYixjLGQsZSl7c3dpdGNoKGQpe2Nhc2UgSTpyZXR1cm4iYmFja3dhcmRzIj09Ynx8ImJvdGgiPT1iPzA6bnVsbDtjYXNlIEs6cmV0dXJuIGMtZTtjYXNlIEo6cmV0dXJuImZvcndhcmRzIj09Ynx8ImJvdGgiPT1iP2E6bnVsbDtjYXNlIEg6cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHEoYSxiLGMsZCxlKXt2YXIgZj1lO3JldHVybiAwPT09YT9iIT09SSYmKGYrPWMpOmYrPWQvYSxmfWZ1bmN0aW9uIHIoYSxiLGMsZCxlLGYpe3ZhciBnPWE9PT0xLzA/YiUxOmElMTtyZXR1cm4gMCE9PWd8fGMhPT1KfHwwPT09ZHx8MD09PWUmJjAhPT1mfHwoZz0xKSxnfWZ1bmN0aW9uIHMoYSxiLGMsZCl7cmV0dXJuIGE9PT1KJiZiPT09MS8wPzEvMDoxPT09Yz9NYXRoLmZsb29yKGQpLTE6TWF0aC5mbG9vcihkKX1mdW5jdGlvbiB0KGEsYixjKXt2YXIgZD1hO2lmKCJub3JtYWwiIT09YSYmInJldmVyc2UiIT09YSl7dmFyIGU9YjsiYWx0ZXJuYXRlLXJldmVyc2UiPT09YSYmKGUrPTEpLGQ9Im5vcm1hbCIsZSE9PTEvMCYmZSUyIT0wJiYoZD0icmV2ZXJzZSIpfXJldHVybiJub3JtYWwiPT09ZD9jOjEtY31mdW5jdGlvbiB1KGEsYixjKXt2YXIgZD1vKGEsYixjKSxlPXAoYSxjLmZpbGwsYixkLGMuZGVsYXkpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO3ZhciBmPXEoYy5kdXJhdGlvbixkLGMuaXRlcmF0aW9ucyxlLGMuaXRlcmF0aW9uU3RhcnQpLGc9cihmLGMuaXRlcmF0aW9uU3RhcnQsZCxjLml0ZXJhdGlvbnMsZSxjLmR1cmF0aW9uKSxoPXMoZCxjLml0ZXJhdGlvbnMsZyxmKSxpPXQoYy5kaXJlY3Rpb24saCxnKTtyZXR1cm4gYy5fZWFzaW5nRnVuY3Rpb24oaSl9dmFyIHY9ImJhY2t3YXJkc3xmb3J3YXJkc3xib3RofG5vbmUiLnNwbGl0KCJ8Iiksdz0icmV2ZXJzZXxhbHRlcm5hdGV8YWx0ZXJuYXRlLXJldmVyc2UiLnNwbGl0KCJ8IikseD1mdW5jdGlvbihhKXtyZXR1cm4gYX07ZC5wcm90b3R5cGU9e19zZXRNZW1iZXI6ZnVuY3Rpb24oYixjKXt0aGlzWyJfIitiXT1jLHRoaXMuX2VmZmVjdCYmKHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXRbYl09Yyx0aGlzLl9lZmZlY3QuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KHRoaXMuX2VmZmVjdC5fdGltaW5nSW5wdXQpLHRoaXMuX2VmZmVjdC5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX2VmZmVjdC5fdGltaW5nKSx0aGlzLl9lZmZlY3QuX2FuaW1hdGlvbiYmdGhpcy5fZWZmZWN0Ll9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCkpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IGRlbGF5KGEpe3RoaXMuX3NldE1lbWJlcigiZGVsYXkiLGEpfSxnZXQgZGVsYXkoKXtyZXR1cm4gdGhpcy5fZGVsYXl9LHNldCBlbmREZWxheShhKXt0aGlzLl9zZXRNZW1iZXIoImVuZERlbGF5IixhKX0sZ2V0IGVuZERlbGF5KCl7cmV0dXJuIHRoaXMuX2VuZERlbGF5fSxzZXQgZmlsbChhKXt0aGlzLl9zZXRNZW1iZXIoImZpbGwiLGEpfSxnZXQgZmlsbCgpe3JldHVybiB0aGlzLl9maWxsfSxzZXQgaXRlcmF0aW9uU3RhcnQoYSl7aWYoKGlzTmFOKGEpfHxhPDApJiZlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0aW9uU3RhcnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9uU3RhcnQiLGEpfSxnZXQgaXRlcmF0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy5faXRlcmF0aW9uU3RhcnR9LHNldCBkdXJhdGlvbihhKXtpZigiYXV0byIhPWEmJihpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoImR1cmF0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIG9yIGF1dG8sIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiZHVyYXRpb24iLGEpfSxnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldCBkaXJlY3Rpb24oYSl7dGhpcy5fc2V0TWVtYmVyKCJkaXJlY3Rpb24iLGEpfSxnZXQgZGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbn0sc2V0IGVhc2luZyhhKXt0aGlzLl9lYXNpbmdGdW5jdGlvbj1sKGsoYSkpLHRoaXMuX3NldE1lbWJlcigiZWFzaW5nIixhKX0sZ2V0IGVhc2luZygpe3JldHVybiB0aGlzLl9lYXNpbmd9LHNldCBpdGVyYXRpb25zKGEpe2lmKChpc05hTihhKXx8YTwwKSYmZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIml0ZXJhdGlvbnMgbXVzdCBiZSBub24tbmVnYXRpdmUsIHJlY2VpdmVkOiAiK2EpO3RoaXMuX3NldE1lbWJlcigiaXRlcmF0aW9ucyIsYSl9LGdldCBpdGVyYXRpb25zKCl7cmV0dXJuIHRoaXMuX2l0ZXJhdGlvbnN9fTt2YXIgeT0xLHo9LjUsQT0wLEI9e2Vhc2U6aSguMjUsLjEsLjI1LDEpLCJlYXNlLWluIjppKC40MiwwLDEsMSksImVhc2Utb3V0IjppKDAsMCwuNTgsMSksImVhc2UtaW4tb3V0IjppKC40MiwwLC41OCwxKSwic3RlcC1zdGFydCI6aigxLHkpLCJzdGVwLW1pZGRsZSI6aigxLHopLCJzdGVwLWVuZCI6aigxLEEpfSxDPW51bGwsRD0iXFxzKigtP1xcZCtcXC4/XFxkKnwtP1xcLlxcZCspXFxzKiIsRT1uZXcgUmVnRXhwKCJjdWJpYy1iZXppZXJcXCgiK0QrIiwiK0QrIiwiK0QrIiwiK0QrIlxcKSIpLEY9L3N0ZXBzXChccyooXGQrKVxzKlwpLyxHPS9zdGVwc1woXHMqKFxkKylccyosXHMqKHN0YXJ0fG1pZGRsZXxlbmQpXHMqXCkvLEg9MCxJPTEsSj0yLEs9MzthLmNsb25lVGltaW5nSW5wdXQ9YyxhLm1ha2VUaW1pbmc9ZixhLm51bWVyaWNUaW1pbmdUb09iamVjdD1nLGEubm9ybWFsaXplVGltaW5nSW5wdXQ9aCxhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uPW0sYS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcz11LGEuY2FsY3VsYXRlUGhhc2U9byxhLm5vcm1hbGl6ZUVhc2luZz1rLGEucGFyc2VFYXNpbmdGdW5jdGlvbj1sfShhKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXtyZXR1cm4gYSBpbiBrP2tbYV1bYl18fGI6Yn1mdW5jdGlvbiBkKGEpe3JldHVybiJkaXNwbGF5Ij09PWF8fDA9PT1hLmxhc3RJbmRleE9mKCJhbmltYXRpb24iLDApfHwwPT09YS5sYXN0SW5kZXhPZigidHJhbnNpdGlvbiIsMCl9ZnVuY3Rpb24gZShhLGIsZSl7aWYoIWQoYSkpe3ZhciBmPWhbYV07aWYoZil7aS5zdHlsZVthXT1iO2Zvcih2YXIgZyBpbiBmKXt2YXIgaj1mW2ddLGs9aS5zdHlsZVtqXTtlW2pdPWMoaixrKX19ZWxzZSBlW2FdPWMoYSxiKX19ZnVuY3Rpb24gZihhKXt2YXIgYj1bXTtmb3IodmFyIGMgaW4gYSlpZighKGMgaW5bImVhc2luZyIsIm9mZnNldCIsImNvbXBvc2l0ZSJdKSl7dmFyIGQ9YVtjXTtBcnJheS5pc0FycmF5KGQpfHwoZD1bZF0pO2Zvcih2YXIgZSxmPWQubGVuZ3RoLGc9MDtnPGY7ZysrKWU9e30sZS5vZmZzZXQ9Im9mZnNldCJpbiBhP2Eub2Zmc2V0OjE9PWY/MTpnLyhmLTEpLCJlYXNpbmciaW4gYSYmKGUuZWFzaW5nPWEuZWFzaW5nKSwiY29tcG9zaXRlImluIGEmJihlLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZSksZVtjXT1kW2ddLGIucHVzaChlKX1yZXR1cm4gYi5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEub2Zmc2V0LWIub2Zmc2V0fSksYn1mdW5jdGlvbiBnKGIpe2Z1bmN0aW9uIGMoKXt2YXIgYT1kLmxlbmd0aDtudWxsPT1kW2EtMV0ub2Zmc2V0JiYoZFthLTFdLm9mZnNldD0xKSxhPjEmJm51bGw9PWRbMF0ub2Zmc2V0JiYoZFswXS5vZmZzZXQ9MCk7Zm9yKHZhciBiPTAsYz1kWzBdLm9mZnNldCxlPTE7ZTxhO2UrKyl7dmFyIGY9ZFtlXS5vZmZzZXQ7aWYobnVsbCE9Zil7Zm9yKHZhciBnPTE7ZzxlLWI7ZysrKWRbYitnXS5vZmZzZXQ9YysoZi1jKSpnLyhlLWIpO2I9ZSxjPWZ9fX1pZihudWxsPT1iKXJldHVybltdO3dpbmRvdy5TeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmQXJyYXkucHJvdG90eXBlLmZyb20mJmJbU3ltYm9sLml0ZXJhdG9yXSYmKGI9QXJyYXkuZnJvbShiKSksQXJyYXkuaXNBcnJheShiKXx8KGI9ZihiKSk7Zm9yKHZhciBkPWIubWFwKGZ1bmN0aW9uKGIpe3ZhciBjPXt9O2Zvcih2YXIgZCBpbiBiKXt2YXIgZj1iW2RdO2lmKCJvZmZzZXQiPT1kKXtpZihudWxsIT1mKXtpZihmPU51bWJlcihmKSwhaXNGaW5pdGUoZikpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIG51bWJlcnMuIik7aWYoZjwwfHxmPjEpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5ZnJhbWUgb2Zmc2V0cyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iKX19ZWxzZSBpZigiY29tcG9zaXRlIj09ZCl7aWYoImFkZCI9PWZ8fCJhY2N1bXVsYXRlIj09Zil0aHJvd3t0eXBlOkRPTUV4Y2VwdGlvbi5OT1RfU1VQUE9SVEVEX0VSUixuYW1lOiJOb3RTdXBwb3J0ZWRFcnJvciIsbWVzc2FnZToiYWRkIGNvbXBvc2l0aW5nIGlzIG5vdCBzdXBwb3J0ZWQifTtpZigicmVwbGFjZSIhPWYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBjb21wb3NpdGUgbW9kZSAiK2YrIi4iKX1lbHNlIGY9ImVhc2luZyI9PWQ/YS5ub3JtYWxpemVFYXNpbmcoZik6IiIrZjtlKGQsZixjKX1yZXR1cm4gdm9pZCAwPT1jLm9mZnNldCYmKGMub2Zmc2V0PW51bGwpLHZvaWQgMD09Yy5lYXNpbmcmJihjLmVhc2luZz0ibGluZWFyIiksY30pLGc9ITAsaD0tMS8wLGk9MDtpPGQubGVuZ3RoO2krKyl7dmFyIGo9ZFtpXS5vZmZzZXQ7aWYobnVsbCE9ail7aWYoajxoKXRocm93IG5ldyBUeXBlRXJyb3IoIktleWZyYW1lcyBhcmUgbm90IGxvb3NlbHkgc29ydGVkIGJ5IG9mZnNldC4gU29ydCBvciBzcGVjaWZ5IG9mZnNldHMuIik7aD1qfWVsc2UgZz0hMX1yZXR1cm4gZD1kLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5vZmZzZXQ+PTAmJmEub2Zmc2V0PD0xfSksZ3x8YygpLGR9dmFyIGg9e2JhY2tncm91bmQ6WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJiYWNrZ3JvdW5kU2l6ZSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kQXR0YWNobWVudCIsImJhY2tncm91bmRPcmlnaW4iLCJiYWNrZ3JvdW5kQ2xpcCIsImJhY2tncm91bmRDb2xvciJdLGJvcmRlcjpbImJvcmRlclRvcENvbG9yIiwiYm9yZGVyVG9wU3R5bGUiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbUNvbG9yIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRDb2xvciIsImJvcmRlckxlZnRTdHlsZSIsImJvcmRlckxlZnRXaWR0aCJdLGJvcmRlckJvdHRvbTpbImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJCb3R0b21Db2xvciJdLGJvcmRlckNvbG9yOlsiYm9yZGVyVG9wQ29sb3IiLCJib3JkZXJSaWdodENvbG9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0Q29sb3IiXSxib3JkZXJMZWZ0OlsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIl0sYm9yZGVyUmFkaXVzOlsiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJib3JkZXJCb3R0b21MZWZ0UmFkaXVzIl0sYm9yZGVyUmlnaHQ6WyJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiXSxib3JkZXJUb3A6WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiXSxib3JkZXJXaWR0aDpbImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIl0sZmxleDpbImZsZXhHcm93IiwiZmxleFNocmluayIsImZsZXhCYXNpcyJdLGZvbnQ6WyJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250U3R5bGUiLCJmb250VmFyaWFudCIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0Il0sbWFyZ2luOlsibWFyZ2luVG9wIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5MZWZ0Il0sb3V0bGluZTpbIm91dGxpbmVDb2xvciIsIm91dGxpbmVTdHlsZSIsIm91dGxpbmVXaWR0aCJdLHBhZGRpbmc6WyJwYWRkaW5nVG9wIiwicGFkZGluZ1JpZ2h0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdMZWZ0Il19LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiZGl2Iiksaj17dGhpbjoiMXB4IixtZWRpdW06IjNweCIsdGhpY2s6IjVweCJ9LGs9e2JvcmRlckJvdHRvbVdpZHRoOmosYm9yZGVyTGVmdFdpZHRoOmosYm9yZGVyUmlnaHRXaWR0aDpqLGJvcmRlclRvcFdpZHRoOmosZm9udFNpemU6eyJ4eC1zbWFsbCI6IjYwJSIsIngtc21hbGwiOiI3NSUiLHNtYWxsOiI4OSUiLG1lZGl1bToiMTAwJSIsbGFyZ2U6IjEyMCUiLCJ4LWxhcmdlIjoiMTUwJSIsInh4LWxhcmdlIjoiMjAwJSJ9LGZvbnRXZWlnaHQ6e25vcm1hbDoiNDAwIixib2xkOiI3MDAifSxvdXRsaW5lV2lkdGg6aix0ZXh0U2hhZG93Ontub25lOiIwcHggMHB4IDBweCB0cmFuc3BhcmVudCJ9LGJveFNoYWRvdzp7bm9uZToiMHB4IDBweCAwcHggMHB4IHRyYW5zcGFyZW50In19O2EuY29udmVydFRvQXJyYXlGb3JtPWYsYS5ub3JtYWxpemVLZXlmcmFtZXM9Z30oYSksZnVuY3Rpb24oYSl7dmFyIGI9e307YS5pc0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiLGc9bmV3IERhdGUsaD1uZXcgRGF0ZShjKTtyZXR1cm4gaC5zZXRNb250aChoLmdldE1vbnRoKCkrMyksIShnPGgmJihhIGluIGJ8fGNvbnNvbGUud2FybigiV2ViIEFuaW1hdGlvbnM6ICIrYSsiICIrZisiIGRlcHJlY2F0ZWQgYW5kIHdpbGwgc3RvcCB3b3JraW5nIG9uICIraC50b0RhdGVTdHJpbmcoKSsiLiAiK2QpLGJbYV09ITAsMSkpfSxhLmRlcHJlY2F0ZWQ9ZnVuY3Rpb24oYixjLGQsZSl7dmFyIGY9ZT8iYXJlIjoiaXMiO2lmKGEuaXNEZXByZWNhdGVkKGIsYyxkLGUpKXRocm93IG5ldyBFcnJvcihiKyIgIitmKyIgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIitkKX19KGEpLGZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFuaW1hdGUpe3ZhciBjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hbmltYXRlKFtdLDApLGQ9ITA7aWYoYyYmKGQ9ITEsInBsYXl8Y3VycmVudFRpbWV8cGF1c2V8cmV2ZXJzZXxwbGF5YmFja1JhdGV8Y2FuY2VsfGZpbmlzaHxzdGFydFRpbWV8cGxheVN0YXRlIi5zcGxpdCgifCIpLmZvckVhY2goZnVuY3Rpb24oYSl7dm9pZCAwPT09Y1thXSYmKGQ9ITApfSkpLCFkKXJldHVybn0hZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKylmb3IodmFyIGQgaW4gYVtjXSlpZigib2Zmc2V0IiE9ZCYmImVhc2luZyIhPWQmJiJjb21wb3NpdGUiIT1kKXt2YXIgZT17b2Zmc2V0OmFbY10ub2Zmc2V0LGVhc2luZzphW2NdLmVhc2luZyx2YWx1ZTphW2NdW2RdfTtiW2RdPWJbZF18fFtdLGJbZF0ucHVzaChlKX1mb3IodmFyIGYgaW4gYil7dmFyIGc9YltmXTtpZigwIT1nWzBdLm9mZnNldHx8MSE9Z1tnLmxlbmd0aC0xXS5vZmZzZXQpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uTk9UX1NVUFBPUlRFRF9FUlIsbmFtZToiTm90U3VwcG9ydGVkRXJyb3IiLG1lc3NhZ2U6IlBhcnRpYWwga2V5ZnJhbWVzIGFyZSBub3Qgc3VwcG9ydGVkIn19cmV0dXJuIGJ9ZnVuY3Rpb24gZShjKXt2YXIgZD1bXTtmb3IodmFyIGUgaW4gYylmb3IodmFyIGY9Y1tlXSxnPTA7ZzxmLmxlbmd0aC0xO2crKyl7dmFyIGg9ZyxpPWcrMSxqPWZbaF0ub2Zmc2V0LGs9ZltpXS5vZmZzZXQsbD1qLG09azswPT1nJiYobD0tMS8wLDA9PWsmJihpPWgpKSxnPT1mLmxlbmd0aC0yJiYobT0xLzAsMT09aiYmKGg9aSkpLGQucHVzaCh7YXBwbHlGcm9tOmwsYXBwbHlUbzptLHN0YXJ0T2Zmc2V0OmZbaF0ub2Zmc2V0LGVuZE9mZnNldDpmW2ldLm9mZnNldCxlYXNpbmdGdW5jdGlvbjphLnBhcnNlRWFzaW5nRnVuY3Rpb24oZltoXS5lYXNpbmcpLHByb3BlcnR5OmUsaW50ZXJwb2xhdGlvbjpiLnByb3BlcnR5SW50ZXJwb2xhdGlvbihlLGZbaF0udmFsdWUsZltpXS52YWx1ZSl9KX1yZXR1cm4gZC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3RhcnRPZmZzZXQtYi5zdGFydE9mZnNldH0pLGR9Yi5jb252ZXJ0RWZmZWN0SW5wdXQ9ZnVuY3Rpb24oYyl7dmFyIGY9YS5ub3JtYWxpemVLZXlmcmFtZXMoYyksZz1kKGYpLGg9ZShnKTtyZXR1cm4gZnVuY3Rpb24oYSxjKXtpZihudWxsIT1jKWguZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjPj1hLmFwcGx5RnJvbSYmYzxhLmFwcGx5VG99KS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWMtZC5zdGFydE9mZnNldCxmPWQuZW5kT2Zmc2V0LWQuc3RhcnRPZmZzZXQsZz0wPT1mPzA6ZC5lYXNpbmdGdW5jdGlvbihlL2YpO2IuYXBwbHkoYSxkLnByb3BlcnR5LGQuaW50ZXJwb2xhdGlvbihnKSl9KTtlbHNlIGZvcih2YXIgZCBpbiBnKSJvZmZzZXQiIT1kJiYiZWFzaW5nIiE9ZCYmImNvbXBvc2l0ZSIhPWQmJmIuY2xlYXIoYSxkKX19fShhLGIpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3JldHVybiBhLnJlcGxhY2UoLy0oLikvZyxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiBlKGEsYixjKXtoW2NdPWhbY118fFtdLGhbY10ucHVzaChbYSxiXSl9ZnVuY3Rpb24gZihhLGIsYyl7Zm9yKHZhciBmPTA7ZjxjLmxlbmd0aDtmKyspe2UoYSxiLGQoY1tmXSkpfX1mdW5jdGlvbiBnKGMsZSxmKXt2YXIgZz1jOy8tLy50ZXN0KGMpJiYhYS5pc0RlcHJlY2F0ZWQoIkh5cGhlbmF0ZWQgcHJvcGVydHkgbmFtZXMiLCIyMDE2LTAzLTIyIiwiVXNlIGNhbWVsQ2FzZSBpbnN0ZWFkLiIsITApJiYoZz1kKGMpKSwiaW5pdGlhbCIhPWUmJiJpbml0aWFsIiE9Znx8KCJpbml0aWFsIj09ZSYmKGU9aVtnXSksImluaXRpYWwiPT1mJiYoZj1pW2ddKSk7Zm9yKHZhciBqPWU9PWY/W106aFtnXSxrPTA7aiYmazxqLmxlbmd0aDtrKyspe3ZhciBsPWpba11bMF0oZSksbT1qW2tdWzBdKGYpO2lmKHZvaWQgMCE9PWwmJnZvaWQgMCE9PW0pe3ZhciBuPWpba11bMV0obCxtKTtpZihuKXt2YXIgbz1iLkludGVycG9sYXRpb24uYXBwbHkobnVsbCxuKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIDA9PWE/ZToxPT1hP2Y6byhhKX19fX1yZXR1cm4gYi5JbnRlcnBvbGF0aW9uKCExLCEwLGZ1bmN0aW9uKGEpe3JldHVybiBhP2Y6ZX0pfXZhciBoPXt9O2IuYWRkUHJvcGVydGllc0hhbmRsZXI9Zjt2YXIgaT17YmFja2dyb3VuZENvbG9yOiJ0cmFuc3BhcmVudCIsYmFja2dyb3VuZFBvc2l0aW9uOiIwJSAwJSIsYm9yZGVyQm90dG9tQ29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyQm90dG9tTGVmdFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21SaWdodFJhZGl1czoiMHB4Iixib3JkZXJCb3R0b21XaWR0aDoiM3B4Iixib3JkZXJMZWZ0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyTGVmdFdpZHRoOiIzcHgiLGJvcmRlclJpZ2h0Q29sb3I6ImN1cnJlbnRDb2xvciIsYm9yZGVyUmlnaHRXaWR0aDoiM3B4Iixib3JkZXJTcGFjaW5nOiIycHgiLGJvcmRlclRvcENvbG9yOiJjdXJyZW50Q29sb3IiLGJvcmRlclRvcExlZnRSYWRpdXM6IjBweCIsYm9yZGVyVG9wUmlnaHRSYWRpdXM6IjBweCIsYm9yZGVyVG9wV2lkdGg6IjNweCIsYm90dG9tOiJhdXRvIixjbGlwOiJyZWN0KDBweCwgMHB4LCAwcHgsIDBweCkiLGNvbG9yOiJibGFjayIsZm9udFNpemU6IjEwMCUiLGZvbnRXZWlnaHQ6IjQwMCIsaGVpZ2h0OiJhdXRvIixsZWZ0OiJhdXRvIixsZXR0ZXJTcGFjaW5nOiJub3JtYWwiLGxpbmVIZWlnaHQ6IjEyMCUiLG1hcmdpbkJvdHRvbToiMHB4IixtYXJnaW5MZWZ0OiIwcHgiLG1hcmdpblJpZ2h0OiIwcHgiLG1hcmdpblRvcDoiMHB4IixtYXhIZWlnaHQ6Im5vbmUiLG1heFdpZHRoOiJub25lIixtaW5IZWlnaHQ6IjBweCIsbWluV2lkdGg6IjBweCIsb3BhY2l0eToiMS4wIixvdXRsaW5lQ29sb3I6ImludmVydCIsb3V0bGluZU9mZnNldDoiMHB4IixvdXRsaW5lV2lkdGg6IjNweCIscGFkZGluZ0JvdHRvbToiMHB4IixwYWRkaW5nTGVmdDoiMHB4IixwYWRkaW5nUmlnaHQ6IjBweCIscGFkZGluZ1RvcDoiMHB4IixyaWdodDoiYXV0byIsc3Ryb2tlRGFzaGFycmF5OiJub25lIixzdHJva2VEYXNob2Zmc2V0OiIwcHgiLHRleHRJbmRlbnQ6IjBweCIsdGV4dFNoYWRvdzoiMHB4IDBweCAwcHggdHJhbnNwYXJlbnQiLHRvcDoiYXV0byIsdHJhbnNmb3JtOiIiLHZlcnRpY2FsQWxpZ246IjBweCIsdmlzaWJpbGl0eToidmlzaWJsZSIsd2lkdGg6ImF1dG8iLHdvcmRTcGFjaW5nOiJub3JtYWwiLHpJbmRleDoiYXV0byJ9O2IucHJvcGVydHlJbnRlcnBvbGF0aW9uPWd9KGEsYiksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYil7dmFyIGM9YS5jYWxjdWxhdGVBY3RpdmVEdXJhdGlvbihiKSxkPWZ1bmN0aW9uKGQpe3JldHVybiBhLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGMsZCxiKX07cmV0dXJuIGQuX3RvdGFsRHVyYXRpb249Yi5kZWxheStjK2IuZW5kRGVsYXksZH1iLktleWZyYW1lRWZmZWN0PWZ1bmN0aW9uKGMsZSxmLGcpe3ZhciBoLGk9ZChhLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGYpKSxqPWIuY29udmVydEVmZmVjdElucHV0KGUpLGs9ZnVuY3Rpb24oKXtqKGMsaCl9O3JldHVybiBrLl91cGRhdGU9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT0oaD1pKGEpKX0say5fY2xlYXI9ZnVuY3Rpb24oKXtqKGMsbnVsbCl9LGsuX2hhc1NhbWVUYXJnZXQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGM9PT1hfSxrLl90YXJnZXQ9YyxrLl90b3RhbER1cmF0aW9uPWkuX3RvdGFsRHVyYXRpb24say5faWQ9ZyxrfX0oYSxiKSxmdW5jdGlvbihhLGIpe2EuYXBwbHk9ZnVuY3Rpb24oYixjLGQpe2Iuc3R5bGVbYS5wcm9wZXJ0eU5hbWUoYyldPWR9LGEuY2xlYXI9ZnVuY3Rpb24oYixjKXtiLnN0eWxlW2EucHJvcGVydHlOYW1lKGMpXT0iIn19KGIpLGZ1bmN0aW9uKGEpe3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGEudGltZWxpbmUuX3BsYXkoYS5LZXlmcmFtZUVmZmVjdCh0aGlzLGIsYyxkKSl9fShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiLGQpe2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiBhKigxLWQpK2IqZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBiKXJldHVybiBkPC41P2E6YjtpZihhLmxlbmd0aD09Yi5sZW5ndGgpe2Zvcih2YXIgZT1bXSxmPTA7ZjxhLmxlbmd0aDtmKyspZS5wdXNoKGMoYVtmXSxiW2ZdLGQpKTtyZXR1cm4gZX10aHJvdyJNaXNtYXRjaGVkIGludGVycG9sYXRpb24gYXJndW1lbnRzICIrYSsiOiIrYn1hLkludGVycG9sYXRpb249ZnVuY3Rpb24oYSxiLGQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZChjKGEsYixlKSl9fX0oYiksZnVuY3Rpb24oYSxiLGMpe2Euc2VxdWVuY2VOdW1iZXI9MDt2YXIgZD1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImZpbmlzaCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfTtiLkFuaW1hdGlvbj1mdW5jdGlvbihiKXt0aGlzLmlkPSIiLGImJmIuX2lkJiYodGhpcy5pZD1iLl9pZCksdGhpcy5fc2VxdWVuY2VOdW1iZXI9YS5zZXF1ZW5jZU51bWJlcisrLHRoaXMuX2N1cnJlbnRUaW1lPTAsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3BsYXliYWNrUmF0ZT0xLHRoaXMuX2luVGltZWxpbmU9ITAsdGhpcy5fZmluaXNoZWRGbGFnPSEwLHRoaXMub25maW5pc2g9bnVsbCx0aGlzLl9maW5pc2hIYW5kbGVycz1bXSx0aGlzLl9lZmZlY3Q9Yix0aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgwKSx0aGlzLl9pZGxlPSEwLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfZW5zdXJlQWxpdmU6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZTwwJiYwPT09dGhpcy5jdXJyZW50VGltZT90aGlzLl9pbkVmZmVjdD10aGlzLl9lZmZlY3QuX3VwZGF0ZSgtMSk6dGhpcy5faW5FZmZlY3Q9dGhpcy5fZWZmZWN0Ll91cGRhdGUodGhpcy5jdXJyZW50VGltZSksdGhpcy5faW5UaW1lbGluZXx8IXRoaXMuX2luRWZmZWN0JiZ0aGlzLl9maW5pc2hlZEZsYWd8fCh0aGlzLl9pblRpbWVsaW5lPSEwLGIudGltZWxpbmUuX2FuaW1hdGlvbnMucHVzaCh0aGlzKSl9LF90aWNrQ3VycmVudFRpbWU6ZnVuY3Rpb24oYSxiKXthIT10aGlzLl9jdXJyZW50VGltZSYmKHRoaXMuX2N1cnJlbnRUaW1lPWEsdGhpcy5faXNGaW5pc2hlZCYmIWImJih0aGlzLl9jdXJyZW50VGltZT10aGlzLl9wbGF5YmFja1JhdGU+MD90aGlzLl90b3RhbER1cmF0aW9uOjApLHRoaXMuX2Vuc3VyZUFsaXZlKCkpfSxnZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5faWRsZXx8dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nP251bGw6dGhpcy5fY3VycmVudFRpbWV9LHNldCBjdXJyZW50VGltZShhKXthPSthLGlzTmFOKGEpfHwoYi5yZXN0YXJ0KCksdGhpcy5fcGF1c2VkfHxudWxsPT10aGlzLl9zdGFydFRpbWV8fCh0aGlzLl9zdGFydFRpbWU9dGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtYS90aGlzLl9wbGF5YmFja1JhdGUpLHRoaXMuX2N1cnJlbnRUaW1lUGVuZGluZz0hMSx0aGlzLl9jdXJyZW50VGltZSE9YSYmKHRoaXMuX2lkbGUmJih0aGlzLl9pZGxlPSExLHRoaXMuX3BhdXNlZD0hMCksdGhpcy5fdGlja0N1cnJlbnRUaW1lKGEsITApLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKSl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lfSxzZXQgc3RhcnRUaW1lKGEpe2E9K2EsaXNOYU4oYSl8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZXx8KHRoaXMuX3N0YXJ0VGltZT1hLHRoaXMuX3RpY2tDdXJyZW50VGltZSgodGhpcy5fdGltZWxpbmUuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSksYi5hcHBseURpcnRpZWRBbmltYXRpb24odGhpcykpfSxnZXQgcGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMuX3BsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXtpZihhIT10aGlzLl9wbGF5YmFja1JhdGUpe3ZhciBjPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fcGxheWJhY2tSYXRlPWEsdGhpcy5fc3RhcnRUaW1lPW51bGwsInBhdXNlZCIhPXRoaXMucGxheVN0YXRlJiYiaWRsZSIhPXRoaXMucGxheVN0YXRlJiYodGhpcy5fZmluaXNoZWRGbGFnPSExLHRoaXMuX2lkbGU9ITEsdGhpcy5fZW5zdXJlQWxpdmUoKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSksbnVsbCE9YyYmKHRoaXMuY3VycmVudFRpbWU9Yyl9fSxnZXQgX2lzRmluaXNoZWQoKXtyZXR1cm4hdGhpcy5faWRsZSYmKHRoaXMuX3BsYXliYWNrUmF0ZT4wJiZ0aGlzLl9jdXJyZW50VGltZT49dGhpcy5fdG90YWxEdXJhdGlvbnx8dGhpcy5fcGxheWJhY2tSYXRlPDAmJnRoaXMuX2N1cnJlbnRUaW1lPD0wKX0sZ2V0IF90b3RhbER1cmF0aW9uKCl7cmV0dXJuIHRoaXMuX2VmZmVjdC5fdG90YWxEdXJhdGlvbn0sZ2V0IHBsYXlTdGF0ZSgpe3JldHVybiB0aGlzLl9pZGxlPyJpZGxlIjpudWxsPT10aGlzLl9zdGFydFRpbWUmJiF0aGlzLl9wYXVzZWQmJjAhPXRoaXMucGxheWJhY2tSYXRlfHx0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc/InBlbmRpbmciOnRoaXMuX3BhdXNlZD8icGF1c2VkIjp0aGlzLl9pc0ZpbmlzaGVkPyJmaW5pc2hlZCI6InJ1bm5pbmcifSxfcmV3aW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5fcGxheWJhY2tSYXRlPj0wKXRoaXMuX2N1cnJlbnRUaW1lPTA7ZWxzZXtpZighKHRoaXMuX3RvdGFsRHVyYXRpb248MS8wKSl0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCJVbmFibGUgdG8gcmV3aW5kIG5lZ2F0aXZlIHBsYXliYWNrIHJhdGUgYW5pbWF0aW9uIHdpdGggaW5maW5pdGUgZHVyYXRpb24iLCJJbnZhbGlkU3RhdGVFcnJvciIpO3RoaXMuX2N1cnJlbnRUaW1lPXRoaXMuX3RvdGFsRHVyYXRpb259fSxwbGF5OmZ1bmN0aW9uKCl7dGhpcy5fcGF1c2VkPSExLCh0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl9pZGxlKSYmKHRoaXMuX3Jld2luZCgpLHRoaXMuX3N0YXJ0VGltZT1udWxsKSx0aGlzLl9maW5pc2hlZEZsYWc9ITEsdGhpcy5faWRsZT0hMSx0aGlzLl9lbnN1cmVBbGl2ZSgpLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX2lzRmluaXNoZWR8fHRoaXMuX3BhdXNlZHx8dGhpcy5faWRsZT90aGlzLl9pZGxlJiYodGhpcy5fcmV3aW5kKCksdGhpcy5faWRsZT0hMSk6dGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSEwLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuX3BhdXNlZD0hMH0sZmluaXNoOmZ1bmN0aW9uKCl7dGhpcy5faWRsZXx8KHRoaXMuY3VycmVudFRpbWU9dGhpcy5fcGxheWJhY2tSYXRlPjA/dGhpcy5fdG90YWxEdXJhdGlvbjowLHRoaXMuX3N0YXJ0VGltZT10aGlzLl90b3RhbER1cmF0aW9uLXRoaXMuY3VycmVudFRpbWUsdGhpcy5fY3VycmVudFRpbWVQZW5kaW5nPSExLGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uKHRoaXMpKX0sY2FuY2VsOmZ1bmN0aW9uKCl7dGhpcy5faW5FZmZlY3QmJih0aGlzLl9pbkVmZmVjdD0hMSx0aGlzLl9pZGxlPSEwLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9maW5pc2hlZEZsYWc9ITAsdGhpcy5fY3VycmVudFRpbWU9MCx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLl9lZmZlY3QuX3VwZGF0ZShudWxsKSxiLmFwcGx5RGlydGllZEFuaW1hdGlvbih0aGlzKSl9LHJldmVyc2U6ZnVuY3Rpb24oKXt0aGlzLnBsYXliYWNrUmF0ZSo9LTEsdGhpcy5wbGF5KCl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXsiZnVuY3Rpb24iPT10eXBlb2YgYiYmImZpbmlzaCI9PWEmJnRoaXMuX2ZpbmlzaEhhbmRsZXJzLnB1c2goYil9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXtpZigiZmluaXNoIj09YSl7dmFyIGM9dGhpcy5fZmluaXNoSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9maW5pc2hIYW5kbGVycy5zcGxpY2UoYywxKX19LF9maXJlRXZlbnRzOmZ1bmN0aW9uKGEpe2lmKHRoaXMuX2lzRmluaXNoZWQpe2lmKCF0aGlzLl9maW5pc2hlZEZsYWcpe3ZhciBiPW5ldyBkKHRoaXMsdGhpcy5fY3VycmVudFRpbWUsYSksYz10aGlzLl9maW5pc2hIYW5kbGVycy5jb25jYXQodGhpcy5vbmZpbmlzaD9bdGhpcy5vbmZpbmlzaF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGIudGFyZ2V0LGIpfSl9LDApLHRoaXMuX2ZpbmlzaGVkRmxhZz0hMH19ZWxzZSB0aGlzLl9maW5pc2hlZEZsYWc9ITF9LF90aWNrOmZ1bmN0aW9uKGEsYil7dGhpcy5faWRsZXx8dGhpcy5fcGF1c2VkfHwobnVsbD09dGhpcy5fc3RhcnRUaW1lP2ImJih0aGlzLnN0YXJ0VGltZT1hLXRoaXMuX2N1cnJlbnRUaW1lL3RoaXMucGxheWJhY2tSYXRlKTp0aGlzLl9pc0ZpbmlzaGVkfHx0aGlzLl90aWNrQ3VycmVudFRpbWUoKGEtdGhpcy5fc3RhcnRUaW1lKSp0aGlzLnBsYXliYWNrUmF0ZSkpLGImJih0aGlzLl9jdXJyZW50VGltZVBlbmRpbmc9ITEsdGhpcy5fZmlyZUV2ZW50cyhhKSl9LGdldCBfbmVlZHNUaWNrKCl7cmV0dXJuIHRoaXMucGxheVN0YXRlIGlue3BlbmRpbmc6MSxydW5uaW5nOjF9fHwhdGhpcy5fZmluaXNoZWRGbGFnfSxfdGFyZ2V0QW5pbWF0aW9uczpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2VmZmVjdC5fdGFyZ2V0O3JldHVybiBhLl9hY3RpdmVBbmltYXRpb25zfHwoYS5fYWN0aXZlQW5pbWF0aW9ucz1bXSksYS5fYWN0aXZlQW5pbWF0aW9uc30sX21hcmtUYXJnZXQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl90YXJnZXRBbmltYXRpb25zKCk7LTE9PT1hLmluZGV4T2YodGhpcykmJmEucHVzaCh0aGlzKX0sX3VubWFya1RhcmdldDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX3RhcmdldEFuaW1hdGlvbnMoKSxiPWEuaW5kZXhPZih0aGlzKTstMSE9PWImJmEuc3BsaWNlKGIsMSl9fX0oYSxiKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1qO2o9W10sYTxxLmN1cnJlbnRUaW1lJiYoYT1xLmN1cnJlbnRUaW1lKSxxLl9hbmltYXRpb25zLnNvcnQoZSkscS5fYW5pbWF0aW9ucz1oKGEsITAscS5fYW5pbWF0aW9ucylbMF0sYi5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMV0oYSl9KSxnKCksbD12b2lkIDB9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBhLl9zZXF1ZW5jZU51bWJlci1iLl9zZXF1ZW5jZU51bWJlcn1mdW5jdGlvbiBmKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXdpbmRvdy5wZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlLm5vdygpOjB9ZnVuY3Rpb24gZygpe28uZm9yRWFjaChmdW5jdGlvbihhKXthKCl9KSxvLmxlbmd0aD0wfWZ1bmN0aW9uIGgoYSxjLGQpe3A9ITAsbj0hMSxiLnRpbWVsaW5lLmN1cnJlbnRUaW1lPWEsbT0hMTt2YXIgZT1bXSxmPVtdLGc9W10saD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IuX3RpY2soYSxjKSxiLl9pbkVmZmVjdD8oZi5wdXNoKGIuX2VmZmVjdCksYi5fbWFya1RhcmdldCgpKTooZS5wdXNoKGIuX2VmZmVjdCksYi5fdW5tYXJrVGFyZ2V0KCkpLGIuX25lZWRzVGljayYmKG09ITApO3ZhciBkPWIuX2luRWZmZWN0fHxiLl9uZWVkc1RpY2s7Yi5faW5UaW1lbGluZT1kLGQ/Zy5wdXNoKGIpOmgucHVzaChiKX0pLG8ucHVzaC5hcHBseShvLGUpLG8ucHVzaC5hcHBseShvLGYpLG0mJnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLHA9ITEsW2csaF19dmFyIGk9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSxqPVtdLGs9MDt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uKGEpe3ZhciBiPWsrKztyZXR1cm4gMD09ai5sZW5ndGgmJmkoZCksai5wdXNoKFtiLGFdKSxifSx3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7ai5mb3JFYWNoKGZ1bmN0aW9uKGIpe2JbMF09PWEmJihiWzFdPWZ1bmN0aW9uKCl7fSl9KX0sZi5wcm90b3R5cGU9e19wbGF5OmZ1bmN0aW9uKGMpe2MuX3RpbWluZz1hLm5vcm1hbGl6ZVRpbWluZ0lucHV0KGMudGltaW5nKTt2YXIgZD1uZXcgYi5BbmltYXRpb24oYyk7cmV0dXJuIGQuX2lkbGU9ITEsZC5fdGltZWxpbmU9dGhpcyx0aGlzLl9hbmltYXRpb25zLnB1c2goZCksYi5yZXN0YXJ0KCksYi5hcHBseURpcnRpZWRBbmltYXRpb24oZCksZH19O3ZhciBsPXZvaWQgMCxtPSExLG49ITE7Yi5yZXN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG18fChtPSEwLHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe30pLG49ITApLG59LGIuYXBwbHlEaXJ0aWVkQW5pbWF0aW9uPWZ1bmN0aW9uKGEpe2lmKCFwKXthLl9tYXJrVGFyZ2V0KCk7dmFyIGM9YS5fdGFyZ2V0QW5pbWF0aW9ucygpO2Muc29ydChlKSxoKGIudGltZWxpbmUuY3VycmVudFRpbWUsITEsYy5zbGljZSgpKVsxXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXEuX2FuaW1hdGlvbnMuaW5kZXhPZihhKTstMSE9PWImJnEuX2FuaW1hdGlvbnMuc3BsaWNlKGIsMSl9KSxnKCl9fTt2YXIgbz1bXSxwPSExLHE9bmV3IGY7Yi50aW1lbGluZT1xfShhLGIpLGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1hLmV4ZWMoYik7aWYoYylyZXR1cm4gYz1hLmlnbm9yZUNhc2U/Y1swXS50b0xvd2VyQ2FzZSgpOmNbMF0sW2MsYi5zdWJzdHIoYy5sZW5ndGgpXX1mdW5jdGlvbiBjKGEsYil7Yj1iLnJlcGxhY2UoL15ccyovLCIiKTt2YXIgYz1hKGIpO2lmKGMpcmV0dXJuW2NbMF0sY1sxXS5yZXBsYWNlKC9eXHMqLywiIildfWZ1bmN0aW9uIGQoYSxkLGUpe2E9Yy5iaW5kKG51bGwsYSk7Zm9yKHZhciBmPVtdOzspe3ZhciBnPWEoZSk7aWYoIWcpcmV0dXJuW2YsZV07aWYoZi5wdXNoKGdbMF0pLGU9Z1sxXSwhKGc9YihkLGUpKXx8IiI9PWdbMV0pcmV0dXJuW2YsZV07ZT1nWzFdfX1mdW5jdGlvbiBlKGEsYil7Zm9yKHZhciBjPTAsZD0wO2Q8Yi5sZW5ndGgmJighL1xzfCwvLnRlc3QoYltkXSl8fDAhPWMpO2QrKylpZigiKCI9PWJbZF0pYysrO2Vsc2UgaWYoIikiPT1iW2RdJiYoYy0tLDA9PWMmJmQrKyxjPD0wKSlicmVhazt2YXIgZT1hKGIuc3Vic3RyKDAsZCkpO3JldHVybiB2b2lkIDA9PWU/dm9pZCAwOltlLGIuc3Vic3RyKGQpXX1mdW5jdGlvbiBmKGEsYil7Zm9yKHZhciBjPWEsZD1iO2MmJmQ7KWM+ZD9jJT1kOmQlPWM7cmV0dXJuIGM9YSpiLyhjK2QpfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWEoYik7cmV0dXJuIGMmJihjWzBdPXZvaWQgMCksY319ZnVuY3Rpb24gaChhLGIpe3JldHVybiBmdW5jdGlvbihjKXtyZXR1cm4gYShjKXx8W2IsY119fWZ1bmN0aW9uIGkoYixjKXtmb3IodmFyIGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1hLmNvbnN1bWVUcmltbWVkKGJbZV0sYyk7aWYoIWZ8fCIiPT1mWzBdKXJldHVybjt2b2lkIDAhPT1mWzBdJiZkLnB1c2goZlswXSksYz1mWzFdfWlmKCIiPT1jKXJldHVybiBkfWZ1bmN0aW9uIGooYSxiLGMsZCxlKXtmb3IodmFyIGc9W10saD1bXSxpPVtdLGo9ZihkLmxlbmd0aCxlLmxlbmd0aCksaz0wO2s8ajtrKyspe3ZhciBsPWIoZFtrJWQubGVuZ3RoXSxlW2slZS5sZW5ndGhdKTtpZighbClyZXR1cm47Zy5wdXNoKGxbMF0pLGgucHVzaChsWzFdKSxpLnB1c2gobFsyXSl9cmV0dXJuW2csaCxmdW5jdGlvbihiKXt2YXIgZD1iLm1hcChmdW5jdGlvbihhLGIpe3JldHVybiBpW2JdKGEpfSkuam9pbihjKTtyZXR1cm4gYT9hKGQpOmR9XX1mdW5jdGlvbiBrKGEsYixjKXtmb3IodmFyIGQ9W10sZT1bXSxmPVtdLGc9MCxoPTA7aDxjLmxlbmd0aDtoKyspaWYoImZ1bmN0aW9uIj09dHlwZW9mIGNbaF0pe3ZhciBpPWNbaF0oYVtnXSxiW2crK10pO2QucHVzaChpWzBdKSxlLnB1c2goaVsxXSksZi5wdXNoKGlbMl0pfWVsc2UhZnVuY3Rpb24oYSl7ZC5wdXNoKCExKSxlLnB1c2goITEpLGYucHVzaChmdW5jdGlvbigpe3JldHVybiBjW2FdfSl9KGgpO3JldHVybltkLGUsZnVuY3Rpb24oYSl7Zm9yKHZhciBiPSIiLGM9MDtjPGEubGVuZ3RoO2MrKyliKz1mW2NdKGFbY10pO3JldHVybiBifV19YS5jb25zdW1lVG9rZW49YixhLmNvbnN1bWVUcmltbWVkPWMsYS5jb25zdW1lUmVwZWF0ZWQ9ZCxhLmNvbnN1bWVQYXJlbnRoZXNpc2VkPWUsYS5pZ25vcmU9ZyxhLm9wdGlvbmFsPWgsYS5jb25zdW1lTGlzdD1pLGEubWVyZ2VOZXN0ZWRSZXBlYXRlZD1qLmJpbmQobnVsbCxudWxsKSxhLm1lcmdlV3JhcHBlZE5lc3RlZFJlcGVhdGVkPWosYS5tZXJnZUxpc3Q9a30oYiksZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihiKXtmdW5jdGlvbiBjKGIpe3ZhciBjPWEuY29uc3VtZVRva2VuKC9eaW5zZXQvaSxiKTtyZXR1cm4gYz8oZC5pbnNldD0hMCxjKTooYz1hLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYikpPyhkLmxlbmd0aHMucHVzaChjWzBdKSxjKTooYz1hLmNvbnN1bWVDb2xvcihiKSxjPyhkLmNvbG9yPWNbMF0sYyk6dm9pZCAwKX12YXIgZD17aW5zZXQ6ITEsbGVuZ3RoczpbXSxjb2xvcjpudWxsfSxlPWEuY29uc3VtZVJlcGVhdGVkKGMsL14vLGIpO2lmKGUmJmVbMF0ubGVuZ3RoKXJldHVybltkLGVbMV1dfWZ1bmN0aW9uIGMoYyl7dmFyIGQ9YS5jb25zdW1lUmVwZWF0ZWQoYiwvXiwvLGMpO2lmKGQmJiIiPT1kWzFdKXJldHVybiBkWzBdfWZ1bmN0aW9uIGQoYixjKXtmb3IoO2IubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYi5sZW5ndGhzLnB1c2goe3B4OjB9KTtmb3IoO2MubGVuZ3Rocy5sZW5ndGg8TWF0aC5tYXgoYi5sZW5ndGhzLmxlbmd0aCxjLmxlbmd0aHMubGVuZ3RoKTspYy5sZW5ndGhzLnB1c2goe3B4OjB9KTtpZihiLmluc2V0PT1jLmluc2V0JiYhIWIuY29sb3I9PSEhYy5jb2xvcil7Zm9yKHZhciBkLGU9W10sZj1bW10sMF0sZz1bW10sMF0saD0wO2g8Yi5sZW5ndGhzLmxlbmd0aDtoKyspe3ZhciBpPWEubWVyZ2VEaW1lbnNpb25zKGIubGVuZ3Roc1toXSxjLmxlbmd0aHNbaF0sMj09aCk7ZlswXS5wdXNoKGlbMF0pLGdbMF0ucHVzaChpWzFdKSxlLnB1c2goaVsyXSl9aWYoYi5jb2xvciYmYy5jb2xvcil7dmFyIGo9YS5tZXJnZUNvbG9ycyhiLmNvbG9yLGMuY29sb3IpO2ZbMV09alswXSxnWzFdPWpbMV0sZD1qWzJdfXJldHVybltmLGcsZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWIuaW5zZXQ/Imluc2V0ICI6IiAiLGY9MDtmPGUubGVuZ3RoO2YrKyljKz1lW2ZdKGFbMF1bZl0pKyIgIjtyZXR1cm4gZCYmKGMrPWQoYVsxXSkpLGN9XX19ZnVuY3Rpb24gZShiLGMsZCxlKXtmdW5jdGlvbiBmKGEpe3JldHVybntpbnNldDphLGNvbG9yOlswLDAsMCwwXSxsZW5ndGhzOlt7cHg6MH0se3B4OjB9LHtweDowfSx7cHg6MH1dfX1mb3IodmFyIGc9W10saD1bXSxpPTA7aTxkLmxlbmd0aHx8aTxlLmxlbmd0aDtpKyspe3ZhciBqPWRbaV18fGYoZVtpXS5pbnNldCksaz1lW2ldfHxmKGRbaV0uaW5zZXQpO2cucHVzaChqKSxoLnB1c2goayl9cmV0dXJuIGEubWVyZ2VOZXN0ZWRSZXBlYXRlZChiLGMsZyxoKX12YXIgZj1lLmJpbmQobnVsbCxkLCIsICIpO2EuYWRkUHJvcGVydGllc0hhbmRsZXIoYyxmLFsiYm94LXNoYWRvdyIsInRleHQtc2hhZG93Il0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGEudG9GaXhlZCgzKS5yZXBsYWNlKC8wKyQvLCIiKS5yZXBsYWNlKC9cLiQvLCIiKX1mdW5jdGlvbiBkKGEsYixjKXtyZXR1cm4gTWF0aC5taW4oYixNYXRoLm1heChhLGMpKX1mdW5jdGlvbiBlKGEpe2lmKC9eXHMqWy0rXT8oXGQqXC4pP1xkK1xzKiQvLnRlc3QoYSkpcmV0dXJuIE51bWJlcihhKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuW2EsYixjXX1mdW5jdGlvbiBnKGEsYil7aWYoMCE9YSlyZXR1cm4gaSgwLDEvMCkoYSxiKX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChkKDEsMS8wLGEpKX1dfWZ1bmN0aW9uIGkoYSxiKXtyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm5bZSxmLGZ1bmN0aW9uKGUpe3JldHVybiBjKGQoYSxiLGUpKX1dfX1mdW5jdGlvbiBqKGEpe3ZhciBiPWEudHJpbSgpLnNwbGl0KC9ccypbXHMsXVxzKi8pO2lmKDAhPT1iLmxlbmd0aCl7Zm9yKHZhciBjPVtdLGQ9MDtkPGIubGVuZ3RoO2QrKyl7dmFyIGY9ZShiW2RdKTtpZih2b2lkIDA9PT1mKXJldHVybjtjLnB1c2goZil9cmV0dXJuIGN9fWZ1bmN0aW9uIGsoYSxiKXtpZihhLmxlbmd0aD09Yi5sZW5ndGgpcmV0dXJuW2EsYixmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoYykuam9pbigiICIpfV19ZnVuY3Rpb24gbChhLGIpe3JldHVyblthLGIsTWF0aC5yb3VuZF19YS5jbGFtcD1kLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaixrLFsic3Ryb2tlLWRhc2hhcnJheSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEvMCksWyJib3JkZXItaW1hZ2Utd2lkdGgiLCJsaW5lLWhlaWdodCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaSgwLDEpLFsib3BhY2l0eSIsInNoYXBlLWltYWdlLXRocmVzaG9sZCJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsZyxbImZsZXgtZ3JvdyIsImZsZXgtc2hyaW5rIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoZSxoLFsib3JwaGFucyIsIndpZG93cyJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsbCxbInotaW5kZXgiXSksYS5wYXJzZU51bWJlcj1lLGEucGFyc2VOdW1iZXJMaXN0PWosYS5tZXJnZU51bWJlcnM9ZixhLm51bWJlclRvU3RyaW5nPWN9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhLGIpe2lmKCJ2aXNpYmxlIj09YXx8InZpc2libGUiPT1iKXJldHVyblswLDEsZnVuY3Rpb24oYyl7cmV0dXJuIGM8PTA/YTpjPj0xP2I6InZpc2libGUifV19YS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihTdHJpbmcsYyxbInZpc2liaWxpdHkiXSl9KGIpLGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gYyhhKXthPWEudHJpbSgpLGYuZmlsbFN0eWxlPSIjMDAwIixmLmZpbGxTdHlsZT1hO3ZhciBiPWYuZmlsbFN0eWxlO2lmKGYuZmlsbFN0eWxlPSIjZmZmIixmLmZpbGxTdHlsZT1hLGI9PWYuZmlsbFN0eWxlKXtmLmZpbGxSZWN0KDAsMCwxLDEpO3ZhciBjPWYuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGE7Zi5jbGVhclJlY3QoMCwwLDEsMSk7dmFyIGQ9Y1szXS8yNTU7cmV0dXJuW2NbMF0qZCxjWzFdKmQsY1syXSpkLGRdfX1mdW5jdGlvbiBkKGIsYyl7cmV0dXJuW2IsYyxmdW5jdGlvbihiKXtmdW5jdGlvbiBjKGEpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxhKSl9aWYoYlszXSlmb3IodmFyIGQ9MDtkPDM7ZCsrKWJbZF09TWF0aC5yb3VuZChjKGJbZF0vYlszXSkpO3JldHVybiBiWzNdPWEubnVtYmVyVG9TdHJpbmcoYS5jbGFtcCgwLDEsYlszXSkpLCJyZ2JhKCIrYi5qb2luKCIsIikrIikifV19dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiwiY2FudmFzIik7ZS53aWR0aD1lLmhlaWdodD0xO3ZhciBmPWUuZ2V0Q29udGV4dCgiMmQiKTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGMsZCxbImJhY2tncm91bmQtY29sb3IiLCJib3JkZXItYm90dG9tLWNvbG9yIiwiYm9yZGVyLWxlZnQtY29sb3IiLCJib3JkZXItcmlnaHQtY29sb3IiLCJib3JkZXItdG9wLWNvbG9yIiwiY29sb3IiLCJmaWxsIiwiZmxvb2QtY29sb3IiLCJsaWdodGluZy1jb2xvciIsIm91dGxpbmUtY29sb3IiLCJzdG9wLWNvbG9yIiwic3Ryb2tlIiwidGV4dC1kZWNvcmF0aW9uLWNvbG9yIl0pLGEuY29uc3VtZUNvbG9yPWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGMpLGEubWVyZ2VDb2xvcnM9ZH0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2Z1bmN0aW9uIGIoKXt2YXIgYj1oLmV4ZWMoYSk7Zz1iP2JbMF06dm9pZCAwfWZ1bmN0aW9uIGMoKXt2YXIgYT1OdW1iZXIoZyk7cmV0dXJuIGIoKSxhfWZ1bmN0aW9uIGQoKXtpZigiKCIhPT1nKXJldHVybiBjKCk7YigpO3ZhciBhPWYoKTtyZXR1cm4iKSIhPT1nP05hTjooYigpLGEpfWZ1bmN0aW9uIGUoKXtmb3IodmFyIGE9ZCgpOyIqIj09PWd8fCIvIj09PWc7KXt2YXIgYz1nO2IoKTt2YXIgZT1kKCk7IioiPT09Yz9hKj1lOmEvPWV9cmV0dXJuIGF9ZnVuY3Rpb24gZigpe2Zvcih2YXIgYT1lKCk7IisiPT09Z3x8Ii0iPT09Zzspe3ZhciBjPWc7YigpO3ZhciBkPWUoKTsiKyI9PT1jP2ErPWQ6YS09ZH1yZXR1cm4gYX12YXIgZyxoPS8oW1wrXC1cd1wuXSt8W1woXClcKlwvXSkvZztyZXR1cm4gYigpLGYoKX1mdW5jdGlvbiBkKGEsYil7aWYoIjAiPT0oYj1iLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSYmInB4Ii5zZWFyY2goYSk+PTApcmV0dXJue3B4OjB9O2lmKC9eW14oXSokfF5jYWxjLy50ZXN0KGIpKXtiPWIucmVwbGFjZSgvY2FsY1woL2csIigiKTt2YXIgZD17fTtiPWIucmVwbGFjZShhLGZ1bmN0aW9uKGEpe3JldHVybiBkW2FdPW51bGwsIlUiK2F9KTtmb3IodmFyIGU9IlUoIithLnNvdXJjZSsiKSIsZj1iLnJlcGxhY2UoL1stK10/KFxkKlwuKT9cZCsoW0VlXVstK10/XGQrKT8vZywiTiIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiTiIrZSwiZyIpLCJEIikucmVwbGFjZSgvXHNbKy1dXHMvZywiTyIpLnJlcGxhY2UoL1xzL2csIiIpLGc9Wy9OXCooRCkvZywvKE58RClbKlwvXU4vZywvKE58RClPXDEvZywvXCgoTnxEKVwpL2ddLGg9MDtoPGcubGVuZ3RoOylnW2hdLnRlc3QoZik/KGY9Zi5yZXBsYWNlKGdbaF0sIiQxIiksaD0wKTpoKys7aWYoIkQiPT1mKXtmb3IodmFyIGkgaW4gZCl7dmFyIGo9YyhiLnJlcGxhY2UobmV3IFJlZ0V4cCgiVSIraSwiZyIpLCIiKS5yZXBsYWNlKG5ldyBSZWdFeHAoZSwiZyIpLCIqMCIpKTtpZighaXNGaW5pdGUoaikpcmV0dXJuO2RbaV09an1yZXR1cm4gZH19fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gZihhLGIsITApfWZ1bmN0aW9uIGYoYixjLGQpe3ZhciBlLGY9W107Zm9yKGUgaW4gYilmLnB1c2goZSk7Zm9yKGUgaW4gYylmLmluZGV4T2YoZSk8MCYmZi5wdXNoKGUpO3JldHVybiBiPWYubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBiW2FdfHwwfSksYz1mLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gY1thXXx8MH0pLFtiLGMsZnVuY3Rpb24oYil7dmFyIGM9Yi5tYXAoZnVuY3Rpb24oYyxlKXtyZXR1cm4gMT09Yi5sZW5ndGgmJmQmJihjPU1hdGgubWF4KGMsMCkpLGEubnVtYmVyVG9TdHJpbmcoYykrZltlXX0pLmpvaW4oIiArICIpO3JldHVybiBiLmxlbmd0aD4xPyJjYWxjKCIrYysiKSI6Y31dfXZhciBnPSJweHxlbXxleHxjaHxyZW18dnd8dmh8dm1pbnx2bWF4fGNtfG1tfGlufHB0fHBjIixoPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZywiZyIpKSxpPWQuYmluZChudWxsLG5ldyBSZWdFeHAoZysifCUiLCJnIikpLGo9ZC5iaW5kKG51bGwsL2RlZ3xyYWR8Z3JhZHx0dXJuL2cpO2EucGFyc2VMZW5ndGg9aCxhLnBhcnNlTGVuZ3RoT3JQZXJjZW50PWksYS5jb25zdW1lTGVuZ3RoT3JQZXJjZW50PWEuY29uc3VtZVBhcmVudGhlc2lzZWQuYmluZChudWxsLGkpLGEucGFyc2VBbmdsZT1qLGEubWVyZ2VEaW1lbnNpb25zPWY7dmFyIGs9YS5jb25zdW1lUGFyZW50aGVzaXNlZC5iaW5kKG51bGwsaCksbD1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxrLC9eLyksbT1hLmNvbnN1bWVSZXBlYXRlZC5iaW5kKHZvaWQgMCxsLC9eLC8pO2EuY29uc3VtZVNpemVQYWlyTGlzdD1tO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPW0oYSk7aWYoYiYmIiI9PWJbMV0pcmV0dXJuIGJbMF19LG89YS5tZXJnZU5lc3RlZFJlcGVhdGVkLmJpbmQodm9pZCAwLGUsIiAiKSxwPWEubWVyZ2VOZXN0ZWRSZXBlYXRlZC5iaW5kKHZvaWQgMCxvLCIsIik7YS5tZXJnZU5vbk5lZ2F0aXZlU2l6ZVBhaXI9byxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKG4scCxbImJhY2tncm91bmQtc2l6ZSJdKSxhLmFkZFByb3BlcnRpZXNIYW5kbGVyKGksZSxbImJvcmRlci1ib3R0b20td2lkdGgiLCJib3JkZXItaW1hZ2Utd2lkdGgiLCJib3JkZXItbGVmdC13aWR0aCIsImJvcmRlci1yaWdodC13aWR0aCIsImJvcmRlci10b3Atd2lkdGgiLCJmbGV4LWJhc2lzIiwiZm9udC1zaXplIiwiaGVpZ2h0IiwibGluZS1oZWlnaHQiLCJtYXgtaGVpZ2h0IiwibWF4LXdpZHRoIiwib3V0bGluZS13aWR0aCIsIndpZHRoIl0pLGEuYWRkUHJvcGVydGllc0hhbmRsZXIoaSxmLFsiYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyIsImJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzIiwiYm9yZGVyLXRvcC1sZWZ0LXJhZGl1cyIsImJvcmRlci10b3AtcmlnaHQtcmFkaXVzIiwiYm90dG9tIiwibGVmdCIsImxldHRlci1zcGFjaW5nIiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0IiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLXRvcCIsIm1pbi1oZWlnaHQiLCJtaW4td2lkdGgiLCJvdXRsaW5lLW9mZnNldCIsInBhZGRpbmctYm90dG9tIiwicGFkZGluZy1sZWZ0IiwicGFkZGluZy1yaWdodCIsInBhZGRpbmctdG9wIiwicGVyc3BlY3RpdmUiLCJyaWdodCIsInNoYXBlLW1hcmdpbiIsInN0cm9rZS1kYXNob2Zmc2V0IiwidGV4dC1pbmRlbnQiLCJ0b3AiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndvcmQtc3BhY2luZyJdKX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGIpe3JldHVybiBhLmNvbnN1bWVMZW5ndGhPclBlcmNlbnQoYil8fGEuY29uc3VtZVRva2VuKC9eYXV0by8sYil9ZnVuY3Rpb24gZChiKXt2YXIgZD1hLmNvbnN1bWVMaXN0KFthLmlnbm9yZShhLmNvbnN1bWVUb2tlbi5iaW5kKG51bGwsL15yZWN0LykpLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwoLykpLGEuY29uc3VtZVJlcGVhdGVkLmJpbmQobnVsbCxjLC9eLC8pLGEuaWdub3JlKGEuY29uc3VtZVRva2VuLmJpbmQobnVsbCwvXlwpLykpXSxiKTtpZihkJiY0PT1kWzBdLmxlbmd0aClyZXR1cm4gZFswXX1mdW5jdGlvbiBlKGIsYyl7cmV0dXJuImF1dG8iPT1ifHwiYXV0byI9PWM/WyEwLCExLGZ1bmN0aW9uKGQpe3ZhciBlPWQ/YjpjO2lmKCJhdXRvIj09ZSlyZXR1cm4iYXV0byI7dmFyIGY9YS5tZXJnZURpbWVuc2lvbnMoZSxlKTtyZXR1cm4gZlsyXShmWzBdKX1dOmEubWVyZ2VEaW1lbnNpb25zKGIsYyl9ZnVuY3Rpb24gZihhKXtyZXR1cm4icmVjdCgiK2ErIikifXZhciBnPWEubWVyZ2VXcmFwcGVkTmVzdGVkUmVwZWF0ZWQuYmluZChudWxsLGYsZSwiLCAiKTthLnBhcnNlQm94PWQsYS5tZXJnZUJveGVzPWcsYS5hZGRQcm9wZXJ0aWVzSGFuZGxlcihkLGcsWyJjbGlwIl0pfShiKSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPTA7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhPT09az9iW2MrK106YX0pfX1mdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYil7aWYoIm5vbmUiPT0oYj1iLnRvTG93ZXJDYXNlKCkudHJpbSgpKSlyZXR1cm5bXTtmb3IodmFyIGMsZD0vXHMqKFx3KylcKChbXildKilcKS9nLGU9W10sZj0wO2M9ZC5leGVjKGIpOyl7aWYoYy5pbmRleCE9ZilyZXR1cm47Zj1jLmluZGV4K2NbMF0ubGVuZ3RoO3ZhciBnPWNbMV0saD1uW2ddO2lmKCFoKXJldHVybjt2YXIgaT1jWzJdLnNwbGl0KCIsIiksaj1oWzBdO2lmKGoubGVuZ3RoPGkubGVuZ3RoKXJldHVybjtmb3IodmFyIGs9W10sbz0wO288ai5sZW5ndGg7bysrKXt2YXIgcCxxPWlbb10scj1qW29dO2lmKHZvaWQgMD09PShwPXE/e0E6ZnVuY3Rpb24oYil7cmV0dXJuIjAiPT1iLnRyaW0oKT9tOmEucGFyc2VBbmdsZShiKX0sTjphLnBhcnNlTnVtYmVyLFQ6YS5wYXJzZUxlbmd0aE9yUGVyY2VudCxMOmEucGFyc2VMZW5ndGh9W3IudG9VcHBlckNhc2UoKV0ocSk6e2E6bSxuOmtbMF0sdDpsfVtyXSkpcmV0dXJuO2sucHVzaChwKX1pZihlLnB1c2goe3Q6ZyxkOmt9KSxkLmxhc3RJbmRleD09Yi5sZW5ndGgpcmV0dXJuIGV9fWZ1bmN0aW9uIGYoYSl7cmV0dXJuIGEudG9GaXhlZCg2KS5yZXBsYWNlKCIuMDAwMDAwIiwiIil9ZnVuY3Rpb24gZyhiLGMpe2lmKGIuZGVjb21wb3NpdGlvblBhaXIhPT1jKXtiLmRlY29tcG9zaXRpb25QYWlyPWM7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbihiKX1pZihjLmRlY29tcG9zaXRpb25QYWlyIT09Yil7Yy5kZWNvbXBvc2l0aW9uUGFpcj1iO3ZhciBlPWEubWFrZU1hdHJpeERlY29tcG9zaXRpb24oYyl9cmV0dXJuIG51bGw9PWRbMF18fG51bGw9PWVbMF0/W1shMV0sWyEwXSxmdW5jdGlvbihhKXtyZXR1cm4gYT9jWzBdLmQ6YlswXS5kfV06KGRbMF0ucHVzaCgwKSxlWzBdLnB1c2goMSksW2QsZSxmdW5jdGlvbihiKXt2YXIgYz1hLnF1YXQoZFswXVszXSxlWzBdWzNdLGJbNV0pO3JldHVybiBhLmNvbXBvc2VNYXRyaXgoYlswXSxiWzFdLGJbMl0sYyxiWzRdKS5tYXAoZikuam9pbigiLCIpfV0pfWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEucmVwbGFjZSgvW3h5XS8sIiIpfWZ1bmN0aW9uIGkoYSl7cmV0dXJuIGEucmVwbGFjZSgvKHh8eXx6fDNkKT8kLywiM2QiKX1mdW5jdGlvbiBqKGIsYyl7dmFyIGQ9YS5tYWtlTWF0cml4RGVjb21wb3NpdGlvbiYmITAsZT0hMTtpZighYi5sZW5ndGh8fCFjLmxlbmd0aCl7Yi5sZW5ndGh8fChlPSEwLGI9YyxjPVtdKTtmb3IodmFyIGY9MDtmPGIubGVuZ3RoO2YrKyl7dmFyIGo9YltmXS50LGs9YltmXS5kLGw9InNjYWxlIj09ai5zdWJzdHIoMCw1KT8xOjA7Yy5wdXNoKHt0OmosZDprLm1hcChmdW5jdGlvbihhKXtpZigibnVtYmVyIj09dHlwZW9mIGEpcmV0dXJuIGw7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpYltjXT1sO3JldHVybiBifSl9KX19dmFyIG09ZnVuY3Rpb24oYSxiKXtyZXR1cm4icGVyc3BlY3RpdmUiPT1hJiYicGVyc3BlY3RpdmUiPT1ifHwoIm1hdHJpeCI9PWF8fCJtYXRyaXgzZCI9PWEpJiYoIm1hdHJpeCI9PWJ8fCJtYXRyaXgzZCI9PWIpfSxvPVtdLHA9W10scT1bXTtpZihiLmxlbmd0aCE9Yy5sZW5ndGgpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dfWVsc2UgZm9yKHZhciBmPTA7ZjxiLmxlbmd0aDtmKyspe3ZhciBqLHM9YltmXS50LHQ9Y1tmXS50LHU9YltmXS5kLHY9Y1tmXS5kLHc9bltzXSx4PW5bdF07aWYobShzLHQpKXtpZighZClyZXR1cm47dmFyIHI9ZyhbYltmXV0sW2NbZl1dKTtvLnB1c2goclswXSkscC5wdXNoKHJbMV0pLHEucHVzaChbIm1hdHJpeCIsW3JbMl1dXSl9ZWxzZXtpZihzPT10KWo9cztlbHNlIGlmKHdbMl0mJnhbMl0mJmgocyk9PWgodCkpaj1oKHMpLHU9d1syXSh1KSx2PXhbMl0odik7ZWxzZXtpZighd1sxXXx8IXhbMV18fGkocykhPWkodCkpe2lmKCFkKXJldHVybjt2YXIgcj1nKGIsYyk7bz1bclswXV0scD1bclsxXV0scT1bWyJtYXRyaXgiLFtyWzJdXV1dO2JyZWFrfWo9aShzKSx1PXdbMV0odSksdj14WzFdKHYpfWZvcih2YXIgeT1bXSx6PVtdLEE9W10sQj0wO0I8dS5sZW5ndGg7QisrKXt2YXIgQz0ibnVtYmVyIj09dHlwZW9mIHVbQl0/YS5tZXJnZU51bWJlcnM6YS5tZXJnZURpbWVuc2lvbnMscj1DKHVbQl0sdltCXSk7eVtCXT1yWzBdLHpbQl09clsxXSxBLnB1c2goclsyXSl9by5wdXNoKHkpLHAucHVzaCh6KSxxLnB1c2goW2osQV0pfX1pZihlKXt2YXIgRD1vO289cCxwPUR9cmV0dXJuW28scCxmdW5jdGlvbihhKXtyZXR1cm4gYS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm1hcChmdW5jdGlvbihhLGMpe3JldHVybiBxW2JdWzFdW2NdKGEpfSkuam9pbigiLCIpO3JldHVybiJtYXRyaXgiPT1xW2JdWzBdJiYxNj09Yy5zcGxpdCgiLCIpLmxlbmd0aCYmKHFbYl1bMF09Im1hdHJpeDNkIikscVtiXVswXSsiKCIrYysiKSJ9KS5qb2luKCIgIil9XX12YXIgaz1udWxsLGw9e3B4OjB9LG09e2RlZzowfSxuPXttYXRyaXg6WyJOTk5OTk4iLFtrLGssMCwwLGssaywwLDAsMCwwLDEsMCxrLGssMCwxXSxkXSxtYXRyaXgzZDpbIk5OTk5OTk5OTk5OTk5OTk4iLGRdLHJvdGF0ZTpbIkEiXSxyb3RhdGV4OlsiQSJdLHJvdGF0ZXk6WyJBIl0scm90YXRlejpbIkEiXSxyb3RhdGUzZDpbIk5OTkEiXSxwZXJzcGVjdGl2ZTpbIkwiXSxzY2FsZTpbIk5uIixjKFtrLGssMV0pLGRdLHNjYWxleDpbIk4iLGMoW2ssMSwxXSksYyhbaywxXSldLHNjYWxleTpbIk4iLGMoWzEsaywxXSksYyhbMSxrXSldLHNjYWxlejpbIk4iLGMoWzEsMSxrXSldLHNjYWxlM2Q6WyJOTk4iLGRdLHNrZXc6WyJBYSIsbnVsbCxkXSxza2V3eDpbIkEiLG51bGwsYyhbayxtXSldLHNrZXd5OlsiQSIsbnVsbCxjKFttLGtdKV0sdHJhbnNsYXRlOlsiVHQiLGMoW2ssayxsXSksZF0sdHJhbnNsYXRleDpbIlQiLGMoW2ssbCxsXSksYyhbayxsXSldLHRyYW5zbGF0ZXk6WyJUIixjKFtsLGssbF0pLGMoW2wsa10pXSx0cmFuc2xhdGV6OlsiTCIsYyhbbCxsLGtdKV0sdHJhbnNsYXRlM2Q6WyJUVEwiLGRdfTthLmFkZFByb3BlcnRpZXNIYW5kbGVyKGUsaixbInRyYW5zZm9ybSJdKSxhLnRyYW5zZm9ybVRvU3ZnTWF0cml4PWZ1bmN0aW9uKGIpe3ZhciBjPWEudHJhbnNmb3JtTGlzdFRvTWF0cml4KGUoYikpO3JldHVybiJtYXRyaXgoIitmKGNbMF0pKyIgIitmKGNbMV0pKyIgIitmKGNbNF0pKyIgIitmKGNbNV0pKyIgIitmKGNbMTJdKSsiICIrZihjWzEzXSkrIikifX0oYiksZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7Yi5jb25jYXQoW2FdKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2IgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlJiYoZFthXT1iKSxlW2JdPWF9KX12YXIgZD17fSxlPXt9O2MoInRyYW5zZm9ybSIsWyJ3ZWJraXRUcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKSxjKCJ0cmFuc2Zvcm1PcmlnaW4iLFsid2Via2l0VHJhbnNmb3JtT3JpZ2luIl0pLGMoInBlcnNwZWN0aXZlIixbIndlYmtpdFBlcnNwZWN0aXZlIl0pLGMoInBlcnNwZWN0aXZlT3JpZ2luIixbIndlYmtpdFBlcnNwZWN0aXZlT3JpZ2luIl0pLGEucHJvcGVydHlOYW1lPWZ1bmN0aW9uKGEpe3JldHVybiBkW2FdfHxhfSxhLnVucHJlZml4ZWRQcm9wZXJ0eU5hbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGVbYV18fGF9fShiKX0oKSxmdW5jdGlvbigpe2lmKHZvaWQgMD09PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLmFuaW1hdGUoW10pLm9uY2FuY2VsKXt2YXIgYTtpZih3aW5kb3cucGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdyl2YXIgYT1mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX07ZWxzZSB2YXIgYT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdygpfTt2YXIgYj1mdW5jdGlvbihhLGIsYyl7dGhpcy50YXJnZXQ9YSx0aGlzLmN1cnJlbnRUaW1lPWIsdGhpcy50aW1lbGluZVRpbWU9Yyx0aGlzLnR5cGU9ImNhbmNlbCIsdGhpcy5idWJibGVzPSExLHRoaXMuY2FuY2VsYWJsZT0hMSx0aGlzLmN1cnJlbnRUYXJnZXQ9YSx0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITEsdGhpcy5ldmVudFBoYXNlPUV2ZW50LkFUX1RBUkdFVCx0aGlzLnRpbWVTdGFtcD1EYXRlLm5vdygpfSxjPXdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlO3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGQsZSl7dmFyIGY9Yy5jYWxsKHRoaXMsZCxlKTtmLl9jYW5jZWxIYW5kbGVycz1bXSxmLm9uY2FuY2VsPW51bGw7dmFyIGc9Zi5jYW5jZWw7Zi5jYW5jZWw9ZnVuY3Rpb24oKXtnLmNhbGwodGhpcyk7dmFyIGM9bmV3IGIodGhpcyxudWxsLGEoKSksZD10aGlzLl9jYW5jZWxIYW5kbGVycy5jb25jYXQodGhpcy5vbmNhbmNlbD9bdGhpcy5vbmNhbmNlbF06W10pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jYWxsKGMudGFyZ2V0LGMpfSl9LDApfTt2YXIgaD1mLmFkZEV2ZW50TGlzdGVuZXI7Zi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYil7ImZ1bmN0aW9uIj09dHlwZW9mIGImJiJjYW5jZWwiPT1hP3RoaXMuX2NhbmNlbEhhbmRsZXJzLnB1c2goYik6aC5jYWxsKHRoaXMsYSxiKX07dmFyIGk9Zi5yZW1vdmVFdmVudExpc3RlbmVyO3JldHVybiBmLnJlbW92ZUV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24oYSxiKXtpZigiY2FuY2VsIj09YSl7dmFyIGM9dGhpcy5fY2FuY2VsSGFuZGxlcnMuaW5kZXhPZihiKTtjPj0wJiZ0aGlzLl9jYW5jZWxIYW5kbGVycy5zcGxpY2UoYywxKX1lbHNlIGkuY2FsbCh0aGlzLGEsYil9LGZ9fX0oKSxmdW5jdGlvbihhKXt2YXIgYj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYz1udWxsLGQ9ITE7dHJ5e3ZhciBlPWdldENvbXB1dGVkU3R5bGUoYikuZ2V0UHJvcGVydHlWYWx1ZSgib3BhY2l0eSIpLGY9IjAiPT1lPyIxIjoiMCI7Yz1iLmFuaW1hdGUoe29wYWNpdHk6W2YsZl19LHtkdXJhdGlvbjoxfSksYy5jdXJyZW50VGltZT0wLGQ9Z2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKCJvcGFjaXR5Iik9PWZ9Y2F0Y2goYSl7fWZpbmFsbHl7YyYmYy5jYW5jZWwoKX1pZighZCl7dmFyIGc9d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU7d2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYixjKXtyZXR1cm4gd2luZG93LlN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZBcnJheS5wcm90b3R5cGUuZnJvbSYmYltTeW1ib2wuaXRlcmF0b3JdJiYoYj1BcnJheS5mcm9tKGIpKSxBcnJheS5pc0FycmF5KGIpfHxudWxsPT09Ynx8KGI9YS5jb252ZXJ0VG9BcnJheUZvcm0oYikpLGcuY2FsbCh0aGlzLGIsYyl9fX0oYSksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dmFyIGM9Yi50aW1lbGluZTtjLmN1cnJlbnRUaW1lPWEsYy5fZGlzY2FyZEFuaW1hdGlvbnMoKSwwPT1jLl9hbmltYXRpb25zLmxlbmd0aD9mPSExOnJlcXVlc3RBbmltYXRpb25GcmFtZShkKX12YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lO3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoZnVuY3Rpb24oYyl7Yi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYShjKSxiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKX0pfSxiLkFuaW1hdGlvblRpbWVsaW5lPWZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW9ucz1bXSx0aGlzLmN1cnJlbnRUaW1lPXZvaWQgMH0sYi5BbmltYXRpb25UaW1lbGluZS5wcm90b3R5cGU9e2dldEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlzY2FyZEFuaW1hdGlvbnMoKSx0aGlzLl9hbmltYXRpb25zLnNsaWNlKCl9LF91cGRhdGVBbmltYXRpb25zUHJvbWlzZXM6ZnVuY3Rpb24oKXtiLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXM9Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYS5fdXBkYXRlUHJvbWlzZXMoKX0pfSxfZGlzY2FyZEFuaW1hdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKSx0aGlzLl9hbmltYXRpb25zPXRoaXMuX2FuaW1hdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiJmaW5pc2hlZCIhPWEucGxheVN0YXRlJiYiaWRsZSIhPWEucGxheVN0YXRlfSl9LF9wbGF5OmZ1bmN0aW9uKGEpe3ZhciBjPW5ldyBiLkFuaW1hdGlvbihhLHRoaXMpO3JldHVybiB0aGlzLl9hbmltYXRpb25zLnB1c2goYyksYi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrKCksYy5fdXBkYXRlUHJvbWlzZXMoKSxjLl9hbmltYXRpb24ucGxheSgpLGMuX3VwZGF0ZVByb21pc2VzKCksY30scGxheTpmdW5jdGlvbihhKXtyZXR1cm4gYSYmYS5yZW1vdmUoKSx0aGlzLl9wbGF5KGEpfX07dmFyIGY9ITE7Yi5yZXN0YXJ0V2ViQW5pbWF0aW9uc05leHRUaWNrPWZ1bmN0aW9uKCl7Znx8KGY9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGQpKX07dmFyIGc9bmV3IGIuQW5pbWF0aW9uVGltZWxpbmU7Yi50aW1lbGluZT1nO3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LmRvY3VtZW50LCJ0aW1lbGluZSIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ319KX1jYXRjaChhKXt9dHJ5e3dpbmRvdy5kb2N1bWVudC50aW1lbGluZT1nfWNhdGNoKGEpe319KDAsYyksZnVuY3Rpb24oYSxiLGMpe2IuYW5pbWF0aW9uc1dpdGhQcm9taXNlcz1bXSxiLkFuaW1hdGlvbj1mdW5jdGlvbihiLGMpe2lmKHRoaXMuaWQ9IiIsYiYmYi5faWQmJih0aGlzLmlkPWIuX2lkKSx0aGlzLmVmZmVjdD1iLGImJihiLl9hbmltYXRpb249dGhpcyksIWMpdGhyb3cgbmV3IEVycm9yKCJBbmltYXRpb24gd2l0aCBudWxsIHRpbWVsaW5lIGlzIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLl90aW1lbGluZT1jLHRoaXMuX3NlcXVlbmNlTnVtYmVyPWEuc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9ob2xkVGltZT0wLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9pc0dyb3VwPSExLHRoaXMuX2FuaW1hdGlvbj1udWxsLHRoaXMuX2NoaWxkQW5pbWF0aW9ucz1bXSx0aGlzLl9jYWxsYmFjaz1udWxsLHRoaXMuX29sZFBsYXlTdGF0ZT0iaWRsZSIsdGhpcy5fcmVidWlsZFVuZGVybHlpbmdBbmltYXRpb24oKSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0sYi5BbmltYXRpb24ucHJvdG90eXBlPXtfdXBkYXRlUHJvbWlzZXM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9vbGRQbGF5U3RhdGUsYj10aGlzLnBsYXlTdGF0ZTtyZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0UmVhZHlQcm9taXNlKCksdGhpcy5fcmVhZHlQcm9taXNlPXZvaWQgMCk6InBlbmRpbmciPT1hP3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2UoKToicGVuZGluZyI9PWImJih0aGlzLl9yZWFkeVByb21pc2U9dm9pZCAwKSksdGhpcy5fZmluaXNoZWRQcm9taXNlJiZiIT09YSYmKCJpZGxlIj09Yj8odGhpcy5fcmVqZWN0RmluaXNoZWRQcm9taXNlKCksdGhpcy5fZmluaXNoZWRQcm9taXNlPXZvaWQgMCk6ImZpbmlzaGVkIj09Yj90aGlzLl9yZXNvbHZlRmluaXNoZWRQcm9taXNlKCk6ImZpbmlzaGVkIj09YSYmKHRoaXMuX2ZpbmlzaGVkUHJvbWlzZT12b2lkIDApKSx0aGlzLl9vbGRQbGF5U3RhdGU9dGhpcy5wbGF5U3RhdGUsdGhpcy5fcmVhZHlQcm9taXNlfHx0aGlzLl9maW5pc2hlZFByb21pc2V9LF9yZWJ1aWxkVW5kZXJseWluZ0FuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGEsYyxkLGUsZj0hIXRoaXMuX2FuaW1hdGlvbjtmJiYoYT10aGlzLnBsYXliYWNrUmF0ZSxjPXRoaXMuX3BhdXNlZCxkPXRoaXMuc3RhcnRUaW1lLGU9dGhpcy5jdXJyZW50VGltZSx0aGlzLl9hbmltYXRpb24uY2FuY2VsKCksdGhpcy5fYW5pbWF0aW9uLl93cmFwcGVyPW51bGwsdGhpcy5fYW5pbWF0aW9uPW51bGwpLCghdGhpcy5lZmZlY3R8fHRoaXMuZWZmZWN0IGluc3RhbmNlb2Ygd2luZG93LktleWZyYW1lRWZmZWN0KSYmKHRoaXMuX2FuaW1hdGlvbj1iLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdCh0aGlzLmVmZmVjdCksYi5iaW5kQW5pbWF0aW9uRm9yS2V5ZnJhbWVFZmZlY3QodGhpcykpLCh0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdHx8dGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuR3JvdXBFZmZlY3QpJiYodGhpcy5fYW5pbWF0aW9uPWIubmV3VW5kZXJseWluZ0FuaW1hdGlvbkZvckdyb3VwKHRoaXMuZWZmZWN0KSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cCh0aGlzKSksdGhpcy5lZmZlY3QmJnRoaXMuZWZmZWN0Ll9vbnNhbXBsZSYmYi5iaW5kQW5pbWF0aW9uRm9yQ3VzdG9tRWZmZWN0KHRoaXMpLGYmJigxIT1hJiYodGhpcy5wbGF5YmFja1JhdGU9YSksbnVsbCE9PWQ/dGhpcy5zdGFydFRpbWU9ZDpudWxsIT09ZT90aGlzLmN1cnJlbnRUaW1lPWU6bnVsbCE9PXRoaXMuX2hvbGRUaW1lJiYodGhpcy5jdXJyZW50VGltZT10aGlzLl9ob2xkVGltZSksYyYmdGhpcy5wYXVzZSgpKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxfdXBkYXRlQ2hpbGRyZW46ZnVuY3Rpb24oKXtpZih0aGlzLmVmZmVjdCYmImlkbGUiIT10aGlzLnBsYXlTdGF0ZSl7dmFyIGE9dGhpcy5lZmZlY3QuX3RpbWluZy5kZWxheTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMuZm9yRWFjaChmdW5jdGlvbihjKXt0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oYyxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMuZWZmZWN0KSl9LmJpbmQodGhpcykpfX0sX3NldEV4dGVybmFsQW5pbWF0aW9uOmZ1bmN0aW9uKGEpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKWZvcih2YXIgYj0wO2I8dGhpcy5lZmZlY3QuY2hpbGRyZW4ubGVuZ3RoO2IrKyl0aGlzLmVmZmVjdC5jaGlsZHJlbltiXS5fYW5pbWF0aW9uPWEsdGhpcy5fY2hpbGRBbmltYXRpb25zW2JdLl9zZXRFeHRlcm5hbEFuaW1hdGlvbihhKX0sX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9uczpmdW5jdGlvbigpe2lmKHRoaXMuZWZmZWN0JiZ0aGlzLl9pc0dyb3VwKXt2YXIgYT10aGlzLmVmZmVjdC5fdGltaW5nLmRlbGF5O3RoaXMuX3JlbW92ZUNoaWxkQW5pbWF0aW9ucygpLHRoaXMuZWZmZWN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yi50aW1lbGluZS5fcGxheShjKTt0aGlzLl9jaGlsZEFuaW1hdGlvbnMucHVzaChkKSxkLnBsYXliYWNrUmF0ZT10aGlzLnBsYXliYWNrUmF0ZSx0aGlzLl9wYXVzZWQmJmQucGF1c2UoKSxjLl9hbmltYXRpb249dGhpcy5lZmZlY3QuX2FuaW1hdGlvbix0aGlzLl9hcnJhbmdlQ2hpbGRyZW4oZCxhKSx0aGlzLmVmZmVjdCBpbnN0YW5jZW9mIHdpbmRvdy5TZXF1ZW5jZUVmZmVjdCYmKGErPWIuZ3JvdXBDaGlsZER1cmF0aW9uKGMpKX0uYmluZCh0aGlzKSl9fSxfYXJyYW5nZUNoaWxkcmVuOmZ1bmN0aW9uKGEsYil7bnVsbD09PXRoaXMuc3RhcnRUaW1lP2EuY3VycmVudFRpbWU9dGhpcy5jdXJyZW50VGltZS1iL3RoaXMucGxheWJhY2tSYXRlOmEuc3RhcnRUaW1lIT09dGhpcy5zdGFydFRpbWUrYi90aGlzLnBsYXliYWNrUmF0ZSYmKGEuc3RhcnRUaW1lPXRoaXMuc3RhcnRUaW1lK2IvdGhpcy5wbGF5YmFja1JhdGUpfSxnZXQgdGltZWxpbmUoKXtyZXR1cm4gdGhpcy5fdGltZWxpbmV9LGdldCBwbGF5U3RhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uP3RoaXMuX2FuaW1hdGlvbi5wbGF5U3RhdGU6ImlkbGUifSxnZXQgZmluaXNoZWQoKXtyZXR1cm4gd2luZG93LlByb21pc2U/KHRoaXMuX2ZpbmlzaGVkUHJvbWlzZXx8KC0xPT1iLmFuaW1hdGlvbnNXaXRoUHJvbWlzZXMuaW5kZXhPZih0aGlzKSYmYi5hbmltYXRpb25zV2l0aFByb21pc2VzLnB1c2godGhpcyksdGhpcy5fZmluaXNoZWRQcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGEsYil7dGhpcy5fcmVzb2x2ZUZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2EodGhpcyl9LHRoaXMuX3JlamVjdEZpbmlzaGVkUHJvbWlzZT1mdW5jdGlvbigpe2Ioe3R5cGU6RE9NRXhjZXB0aW9uLkFCT1JUX0VSUixuYW1lOiJBYm9ydEVycm9yIn0pfX0uYmluZCh0aGlzKSksImZpbmlzaGVkIj09dGhpcy5wbGF5U3RhdGUmJnRoaXMuX3Jlc29sdmVGaW5pc2hlZFByb21pc2UoKSksdGhpcy5fZmluaXNoZWRQcm9taXNlKTooY29uc29sZS53YXJuKCJBbmltYXRpb24gUHJvbWlzZXMgcmVxdWlyZSBKYXZhU2NyaXB0IFByb21pc2UgY29uc3RydWN0b3IiKSxudWxsKX0sZ2V0IHJlYWR5KCl7cmV0dXJuIHdpbmRvdy5Qcm9taXNlPyh0aGlzLl9yZWFkeVByb21pc2V8fCgtMT09Yi5hbmltYXRpb25zV2l0aFByb21pc2VzLmluZGV4T2YodGhpcykmJmIuYW5pbWF0aW9uc1dpdGhQcm9taXNlcy5wdXNoKHRoaXMpLHRoaXMuX3JlYWR5UHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihhLGIpe3RoaXMuX3Jlc29sdmVSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXthKHRoaXMpfSx0aGlzLl9yZWplY3RSZWFkeVByb21pc2U9ZnVuY3Rpb24oKXtiKHt0eXBlOkRPTUV4Y2VwdGlvbi5BQk9SVF9FUlIsbmFtZToiQWJvcnRFcnJvciJ9KX19LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9PXRoaXMucGxheVN0YXRlJiZ0aGlzLl9yZXNvbHZlUmVhZHlQcm9taXNlKCkpLHRoaXMuX3JlYWR5UHJvbWlzZSk6KGNvbnNvbGUud2FybigiQW5pbWF0aW9uIFByb21pc2VzIHJlcXVpcmUgSmF2YVNjcmlwdCBQcm9taXNlIGNvbnN0cnVjdG9yIiksbnVsbCl9LGdldCBvbmZpbmlzaCgpe3JldHVybiB0aGlzLl9hbmltYXRpb24ub25maW5pc2h9LHNldCBvbmZpbmlzaChhKXt0aGlzLl9hbmltYXRpb24ub25maW5pc2g9ImZ1bmN0aW9uIj09dHlwZW9mIGE/ZnVuY3Rpb24oYil7Yi50YXJnZXQ9dGhpcyxhLmNhbGwodGhpcyxiKX0uYmluZCh0aGlzKTphfSxnZXQgb25jYW5jZWwoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsfSxzZXQgb25jYW5jZWwoYSl7dGhpcy5fYW5pbWF0aW9uLm9uY2FuY2VsPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2Z1bmN0aW9uKGIpe2IudGFyZ2V0PXRoaXMsYS5jYWxsKHRoaXMsYil9LmJpbmQodGhpcyk6YX0sZ2V0IGN1cnJlbnRUaW1lKCl7dGhpcy5fdXBkYXRlUHJvbWlzZXMoKTt2YXIgYT10aGlzLl9hbmltYXRpb24uY3VycmVudFRpbWU7cmV0dXJuIHRoaXMuX3VwZGF0ZVByb21pc2VzKCksYX0sc2V0IGN1cnJlbnRUaW1lKGEpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmN1cnJlbnRUaW1lPWlzRmluaXRlKGEpP2E6TWF0aC5zaWduKGEpKk51bWJlci5NQVhfVkFMVUUsdGhpcy5fcmVnaXN0ZXIoKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYixjKXtiLmN1cnJlbnRUaW1lPWEtY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBzdGFydFRpbWUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnN0YXJ0VGltZX0sc2V0IHN0YXJ0VGltZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5zdGFydFRpbWU9aXNGaW5pdGUoYSk/YTpNYXRoLnNpZ24oYSkqTnVtYmVyLk1BWF9WQUxVRSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiLGMpe2Iuc3RhcnRUaW1lPWErY30pLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGdldCBwbGF5YmFja1JhdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZX0sc2V0IHBsYXliYWNrUmF0ZShhKXt0aGlzLl91cGRhdGVQcm9taXNlcygpO3ZhciBiPXRoaXMuY3VycmVudFRpbWU7dGhpcy5fYW5pbWF0aW9uLnBsYXliYWNrUmF0ZT1hLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihiKXtiLnBsYXliYWNrUmF0ZT1hfSksbnVsbCE9PWImJih0aGlzLmN1cnJlbnRUaW1lPWIpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LHBsYXk6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9hbmltYXRpb24ucGxheSgpLC0xPT10aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5pbmRleE9mKHRoaXMpJiZ0aGlzLl90aW1lbGluZS5fYW5pbWF0aW9ucy5wdXNoKHRoaXMpLHRoaXMuX3JlZ2lzdGVyKCksYi5hd2FpdFN0YXJ0VGltZSh0aGlzKSx0aGlzLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7dmFyIGI9YS5jdXJyZW50VGltZTthLnBsYXkoKSxhLmN1cnJlbnRUaW1lPWJ9KSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxwYXVzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5jdXJyZW50VGltZSYmKHRoaXMuX2hvbGRUaW1lPXRoaXMuY3VycmVudFRpbWUpLHRoaXMuX2FuaW1hdGlvbi5wYXVzZSgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fZm9yRWFjaENoaWxkKGZ1bmN0aW9uKGEpe2EucGF1c2UoKX0pLHRoaXMuX3BhdXNlZD0hMCx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVQcm9taXNlcygpLHRoaXMuX2FuaW1hdGlvbi5maW5pc2goKSx0aGlzLl9yZWdpc3RlcigpLHRoaXMuX3VwZGF0ZVByb21pc2VzKCl9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCksdGhpcy5fYW5pbWF0aW9uLmNhbmNlbCgpLHRoaXMuX3JlZ2lzdGVyKCksdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCksdGhpcy5fdXBkYXRlUHJvbWlzZXMoKX0scmV2ZXJzZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVByb21pc2VzKCk7dmFyIGE9dGhpcy5jdXJyZW50VGltZTt0aGlzLl9hbmltYXRpb24ucmV2ZXJzZSgpLHRoaXMuX2ZvckVhY2hDaGlsZChmdW5jdGlvbihhKXthLnJldmVyc2UoKX0pLG51bGwhPT1hJiYodGhpcy5jdXJyZW50VGltZT1hKSx0aGlzLl91cGRhdGVQcm9taXNlcygpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YjsiZnVuY3Rpb24iPT10eXBlb2YgYiYmKGM9ZnVuY3Rpb24oYSl7YS50YXJnZXQ9dGhpcyxiLmNhbGwodGhpcyxhKX0uYmluZCh0aGlzKSxiLl93cmFwcGVyPWMpLHRoaXMuX2FuaW1hdGlvbi5hZGRFdmVudExpc3RlbmVyKGEsYyl9LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLl9hbmltYXRpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGImJmIuX3dyYXBwZXJ8fGIpfSxfcmVtb3ZlQ2hpbGRBbmltYXRpb25zOmZ1bmN0aW9uKCl7Zm9yKDt0aGlzLl9jaGlsZEFuaW1hdGlvbnMubGVuZ3RoOyl0aGlzLl9jaGlsZEFuaW1hdGlvbnMucG9wKCkuY2FuY2VsKCl9LF9mb3JFYWNoQ2hpbGQ6ZnVuY3Rpb24oYil7dmFyIGM9MDtpZih0aGlzLmVmZmVjdC5jaGlsZHJlbiYmdGhpcy5fY2hpbGRBbmltYXRpb25zLmxlbmd0aDx0aGlzLmVmZmVjdC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuX2NvbnN0cnVjdENoaWxkQW5pbWF0aW9ucygpLHRoaXMuX2NoaWxkQW5pbWF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2IuY2FsbCh0aGlzLGEsYyksdGhpcy5lZmZlY3QgaW5zdGFuY2VvZiB3aW5kb3cuU2VxdWVuY2VFZmZlY3QmJihjKz1hLmVmZmVjdC5hY3RpdmVEdXJhdGlvbil9LmJpbmQodGhpcykpLCJwZW5kaW5nIiE9dGhpcy5wbGF5U3RhdGUpe3ZhciBkPXRoaXMuZWZmZWN0Ll90aW1pbmcsZT10aGlzLmN1cnJlbnRUaW1lO251bGwhPT1lJiYoZT1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZCksZSxkKSksKG51bGw9PWV8fGlzTmFOKGUpKSYmdGhpcy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCl9fX0sd2luZG93LkFuaW1hdGlvbj1iLkFuaW1hdGlvbn0oYSxjKSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChiKXt0aGlzLl9mcmFtZXM9YS5ub3JtYWxpemVLZXlmcmFtZXMoYil9ZnVuY3Rpb24gZSgpe2Zvcih2YXIgYT0hMTtpLmxlbmd0aDspaS5zaGlmdCgpLl91cGRhdGVDaGlsZHJlbigpLGE9ITA7cmV0dXJuIGF9dmFyIGY9ZnVuY3Rpb24oYSl7aWYoYS5fYW5pbWF0aW9uPXZvaWQgMCxhIGluc3RhbmNlb2Ygd2luZG93LlNlcXVlbmNlRWZmZWN0fHxhIGluc3RhbmNlb2Ygd2luZG93Lkdyb3VwRWZmZWN0KWZvcih2YXIgYj0wO2I8YS5jaGlsZHJlbi5sZW5ndGg7YisrKWYoYS5jaGlsZHJlbltiXSl9O2IucmVtb3ZlTXVsdGk9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGEubGVuZ3RoO2MrKyl7dmFyIGQ9YVtjXTtkLl9wYXJlbnQ/KC0xPT1iLmluZGV4T2YoZC5fcGFyZW50KSYmYi5wdXNoKGQuX3BhcmVudCksZC5fcGFyZW50LmNoaWxkcmVuLnNwbGljZShkLl9wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkKSwxKSxkLl9wYXJlbnQ9bnVsbCxmKGQpKTpkLl9hbmltYXRpb24mJmQuX2FuaW1hdGlvbi5lZmZlY3Q9PWQmJihkLl9hbmltYXRpb24uY2FuY2VsKCksZC5fYW5pbWF0aW9uLmVmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSksZC5fYW5pbWF0aW9uLl9jYWxsYmFjayYmKGQuX2FuaW1hdGlvbi5fY2FsbGJhY2suX2FuaW1hdGlvbj1udWxsKSxkLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCksZihkKSl9Zm9yKGM9MDtjPGIubGVuZ3RoO2MrKyliW2NdLl9yZWJ1aWxkKCl9LGIuS2V5ZnJhbWVFZmZlY3Q9ZnVuY3Rpb24oYixjLGUsZil7cmV0dXJuIHRoaXMudGFyZ2V0PWIsdGhpcy5fcGFyZW50PW51bGwsZT1hLm51bWVyaWNUaW1pbmdUb09iamVjdChlKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoZSksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoZSksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGUsITEsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBjPyhhLmRlcHJlY2F0ZWQoIkN1c3RvbSBLZXlmcmFtZUVmZmVjdCIsIjIwMTUtMDYtMjIiLCJVc2UgS2V5ZnJhbWVFZmZlY3Qub25zYW1wbGUgaW5zdGVhZC4iKSx0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzPWMpOnRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM9bmV3IGQoYyksdGhpcy5fa2V5ZnJhbWVzPWMsdGhpcy5hY3RpdmVEdXJhdGlvbj1hLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKHRoaXMuX3RpbWluZyksdGhpcy5faWQ9Zix0aGlzfSxiLktleWZyYW1lRWZmZWN0LnByb3RvdHlwZT17Z2V0RnJhbWVzOmZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX25vcm1hbGl6ZWRLZXlmcmFtZXM/dGhpcy5fbm9ybWFsaXplZEtleWZyYW1lczp0aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLl9mcmFtZXN9LHNldCBvbnNhbXBsZShhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5nZXRGcmFtZXMoKSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgb25zYW1wbGUgb24gY3VzdG9tIGVmZmVjdCBLZXlmcmFtZUVmZmVjdCBpcyBub3Qgc3VwcG9ydGVkLiIpO3RoaXMuX29uc2FtcGxlPWEsdGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxjbG9uZTpmdW5jdGlvbigpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmdldEZyYW1lcygpKXRocm93IG5ldyBFcnJvcigiQ2xvbmluZyBjdXN0b20gZWZmZWN0cyBpcyBub3Qgc3VwcG9ydGVkLiIpO3ZhciBiPW5ldyBLZXlmcmFtZUVmZmVjdCh0aGlzLnRhcmdldCxbXSxhLmNsb25lVGltaW5nSW5wdXQodGhpcy5fdGltaW5nSW5wdXQpLHRoaXMuX2lkKTtyZXR1cm4gYi5fbm9ybWFsaXplZEtleWZyYW1lcz10aGlzLl9ub3JtYWxpemVkS2V5ZnJhbWVzLGIuX2tleWZyYW1lcz10aGlzLl9rZXlmcmFtZXMsYn0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX07dmFyIGc9RWxlbWVudC5wcm90b3R5cGUuYW5pbWF0ZTtFbGVtZW50LnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9IiI7cmV0dXJuIGMmJmMuaWQmJihkPWMuaWQpLGIudGltZWxpbmUuX3BsYXkobmV3IGIuS2V5ZnJhbWVFZmZlY3QodGhpcyxhLGMsZCkpfTt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKTtiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXtpZihhKXt2YXIgYj1hLnRhcmdldHx8aCxjPWEuX2tleWZyYW1lczsiZnVuY3Rpb24iPT10eXBlb2YgYyYmKGM9W10pO3ZhciBkPWEuX3RpbWluZ0lucHV0O2QuaWQ9YS5faWR9ZWxzZSB2YXIgYj1oLGM9W10sZD0wO3JldHVybiBnLmFwcGx5KGIsW2MsZF0pfSxiLmJpbmRBbmltYXRpb25Gb3JLZXlmcmFtZUVmZmVjdD1mdW5jdGlvbihhKXthLmVmZmVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIGEuZWZmZWN0Ll9ub3JtYWxpemVkS2V5ZnJhbWVzJiZiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3QoYSl9O3ZhciBpPVtdO2IuYXdhaXRTdGFydFRpbWU9ZnVuY3Rpb24oYSl7bnVsbD09PWEuc3RhcnRUaW1lJiZhLl9pc0dyb3VwJiYoMD09aS5sZW5ndGgmJnJlcXVlc3RBbmltYXRpb25GcmFtZShlKSxpLnB1c2goYSkpfTt2YXIgaj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZTtPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCJnZXRDb21wdXRlZFN0eWxlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtiLnRpbWVsaW5lLl91cGRhdGVBbmltYXRpb25zUHJvbWlzZXMoKTt2YXIgYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZSgpJiYoYT1qLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYi50aW1lbGluZS5fdXBkYXRlQW5pbWF0aW9uc1Byb21pc2VzKCksYX19KSx3aW5kb3cuS2V5ZnJhbWVFZmZlY3Q9Yi5LZXlmcmFtZUVmZmVjdCx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuZ2V0QW5pbWF0aW9ucz1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC50aW1lbGluZS5nZXRBbmltYXRpb25zKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT09YS5lZmZlY3QmJmEuZWZmZWN0LnRhcmdldD09dGhpc30uYmluZCh0aGlzKSl9fShhLGMpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe2EuX3JlZ2lzdGVyZWR8fChhLl9yZWdpc3RlcmVkPSEwLGcucHVzaChhKSxofHwoaD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSkpKX1mdW5jdGlvbiBlKGEpe3ZhciBiPWc7Zz1bXSxiLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fc2VxdWVuY2VOdW1iZXItYi5fc2VxdWVuY2VOdW1iZXJ9KSxiPWIuZmlsdGVyKGZ1bmN0aW9uKGEpe2EoKTt2YXIgYj1hLl9hbmltYXRpb24/YS5fYW5pbWF0aW9uLnBsYXlTdGF0ZToiaWRsZSI7cmV0dXJuInJ1bm5pbmciIT1iJiYicGVuZGluZyIhPWImJihhLl9yZWdpc3RlcmVkPSExKSxhLl9yZWdpc3RlcmVkfSksZy5wdXNoLmFwcGx5KGcsYiksZy5sZW5ndGg/KGg9ITAscmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpKTpoPSExfXZhciBmPShkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJkaXYiKSwwKTtiLmJpbmRBbmltYXRpb25Gb3JDdXN0b21FZmZlY3Q9ZnVuY3Rpb24oYil7dmFyIGMsZT1iLmVmZmVjdC50YXJnZXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgYi5lZmZlY3QuZ2V0RnJhbWVzKCk7Yz1nP2IuZWZmZWN0LmdldEZyYW1lcygpOmIuZWZmZWN0Ll9vbnNhbXBsZTt2YXIgaD1iLmVmZmVjdC50aW1pbmcsaT1udWxsO2g9YS5ub3JtYWxpemVUaW1pbmdJbnB1dChoKTt2YXIgaj1mdW5jdGlvbigpe3ZhciBkPWouX2FuaW1hdGlvbj9qLl9hbmltYXRpb24uY3VycmVudFRpbWU6bnVsbDtudWxsIT09ZCYmKGQ9YS5jYWxjdWxhdGVJdGVyYXRpb25Qcm9ncmVzcyhhLmNhbGN1bGF0ZUFjdGl2ZUR1cmF0aW9uKGgpLGQsaCksaXNOYU4oZCkmJihkPW51bGwpKSxkIT09aSYmKGc/YyhkLGUsYi5lZmZlY3QpOmMoZCxiLmVmZmVjdCxiLmVmZmVjdC5fYW5pbWF0aW9uKSksaT1kfTtqLl9hbmltYXRpb249YixqLl9yZWdpc3RlcmVkPSExLGouX3NlcXVlbmNlTnVtYmVyPWYrKyxiLl9jYWxsYmFjaz1qLGQoail9O3ZhciBnPVtdLGg9ITE7Yi5BbmltYXRpb24ucHJvdG90eXBlLl9yZWdpc3Rlcj1mdW5jdGlvbigpe3RoaXMuX2NhbGxiYWNrJiZkKHRoaXMuX2NhbGxiYWNrKX19KGEsYyksZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7cmV0dXJuIGEuX3RpbWluZy5kZWxheSthLmFjdGl2ZUR1cmF0aW9uK2EuX3RpbWluZy5lbmREZWxheX1mdW5jdGlvbiBlKGIsYyxkKXt0aGlzLl9pZD1kLHRoaXMuX3BhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49Ynx8W10sdGhpcy5fcmVwYXJlbnQodGhpcy5jaGlsZHJlbiksYz1hLm51bWVyaWNUaW1pbmdUb09iamVjdChjKSx0aGlzLl90aW1pbmdJbnB1dD1hLmNsb25lVGltaW5nSW5wdXQoYyksdGhpcy5fdGltaW5nPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYywhMCksdGhpcy50aW1pbmc9YS5tYWtlVGltaW5nKGMsITAsdGhpcyksdGhpcy50aW1pbmcuX2VmZmVjdD10aGlzLCJhdXRvIj09PXRoaXMuX3RpbWluZy5kdXJhdGlvbiYmKHRoaXMuX3RpbWluZy5kdXJhdGlvbj10aGlzLmFjdGl2ZUR1cmF0aW9uKX13aW5kb3cuU2VxdWVuY2VFZmZlY3Q9ZnVuY3Rpb24oKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sd2luZG93Lkdyb3VwRWZmZWN0PWZ1bmN0aW9uKCl7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlPXtfaXNBbmNlc3RvcjpmdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcztudWxsIT09Yjspe2lmKGI9PWEpcmV0dXJuITA7Yj1iLl9wYXJlbnR9cmV0dXJuITF9LF9yZWJ1aWxkOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXM7YTspImF1dG8iPT09YS50aW1pbmcuZHVyYXRpb24mJihhLl90aW1pbmcuZHVyYXRpb249YS5hY3RpdmVEdXJhdGlvbiksYT1hLl9wYXJlbnQ7dGhpcy5fYW5pbWF0aW9uJiZ0aGlzLl9hbmltYXRpb24uX3JlYnVpbGRVbmRlcmx5aW5nQW5pbWF0aW9uKCl9LF9yZXBhcmVudDpmdW5jdGlvbihhKXtiLnJlbW92ZU11bHRpKGEpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWFbY10uX3BhcmVudD10aGlzfSxfcHV0Q2hpbGQ6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9Yj8iQ2Fubm90IGFwcGVuZCBhbiBhbmNlc3RvciBvciBzZWxmIjoiQ2Fubm90IHByZXBlbmQgYW4gYW5jZXN0b3Igb3Igc2VsZiIsZD0wO2Q8YS5sZW5ndGg7ZCsrKWlmKHRoaXMuX2lzQW5jZXN0b3IoYVtkXSkpdGhyb3d7dHlwZTpET01FeGNlcHRpb24uSElFUkFSQ0hZX1JFUVVFU1RfRVJSLG5hbWU6IkhpZXJhcmNoeVJlcXVlc3RFcnJvciIsbWVzc2FnZTpjfTtmb3IodmFyIGQ9MDtkPGEubGVuZ3RoO2QrKyliP3RoaXMuY2hpbGRyZW4ucHVzaChhW2RdKTp0aGlzLmNoaWxkcmVuLnVuc2hpZnQoYVtkXSk7dGhpcy5fcmVwYXJlbnQoYSksdGhpcy5fcmVidWlsZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wdXRDaGlsZChhcmd1bWVudHMsITApfSxwcmVwZW5kOmZ1bmN0aW9uKCl7dGhpcy5fcHV0Q2hpbGQoYXJndW1lbnRzLCExKX0sZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY2hpbGRyZW5bMF06bnVsbH0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNoaWxkcmVuW3RoaXMuY2hpbGRyZW4ubGVuZ3RoLTFdOm51bGx9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWEuY2xvbmVUaW1pbmdJbnB1dCh0aGlzLl90aW1pbmdJbnB1dCksYz1bXSxkPTA7ZDx0aGlzLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5wdXNoKHRoaXMuY2hpbGRyZW5bZF0uY2xvbmUoKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBHcm91cEVmZmVjdD9uZXcgR3JvdXBFZmZlY3QoYyxiKTpuZXcgU2VxdWVuY2VFZmZlY3QoYyxiKX0scmVtb3ZlOmZ1bmN0aW9uKCl7Yi5yZW1vdmVNdWx0aShbdGhpc10pfX0sd2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LlNlcXVlbmNlRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YSs9ZChiKX0pLE1hdGgubWF4KGEsMCl9fSksd2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Lkdyb3VwRWZmZWN0LnByb3RvdHlwZSwiYWN0aXZlRHVyYXRpb24iLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYil7YT1NYXRoLm1heChhLGQoYikpfSksYX19KSxiLm5ld1VuZGVybHlpbmdBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihjKXt2YXIgZCxlPW51bGwsZj1mdW5jdGlvbihiKXt2YXIgYz1kLl93cmFwcGVyO2lmKGMmJiJwZW5kaW5nIiE9Yy5wbGF5U3RhdGUmJmMuZWZmZWN0KXJldHVybiBudWxsPT1iP3ZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCk6MD09YiYmYy5wbGF5YmFja1JhdGU8MCYmKGV8fChlPWEubm9ybWFsaXplVGltaW5nSW5wdXQoYy5lZmZlY3QudGltaW5nKSksYj1hLmNhbGN1bGF0ZUl0ZXJhdGlvblByb2dyZXNzKGEuY2FsY3VsYXRlQWN0aXZlRHVyYXRpb24oZSksLTEsZSksaXNOYU4oYil8fG51bGw9PWIpPyhjLl9mb3JFYWNoQ2hpbGQoZnVuY3Rpb24oYSl7YS5jdXJyZW50VGltZT0tMX0pLHZvaWQgYy5fcmVtb3ZlQ2hpbGRBbmltYXRpb25zKCkpOnZvaWQgMH0sZz1uZXcgS2V5ZnJhbWVFZmZlY3QobnVsbCxbXSxjLl90aW1pbmcsYy5faWQpO3JldHVybiBnLm9uc2FtcGxlPWYsZD1iLnRpbWVsaW5lLl9wbGF5KGcpfSxiLmJpbmRBbmltYXRpb25Gb3JHcm91cD1mdW5jdGlvbihhKXthLl9hbmltYXRpb24uX3dyYXBwZXI9YSxhLl9pc0dyb3VwPSEwLGIuYXdhaXRTdGFydFRpbWUoYSksYS5fY29uc3RydWN0Q2hpbGRBbmltYXRpb25zKCksYS5fc2V0RXh0ZXJuYWxBbmltYXRpb24oYSl9LGIuZ3JvdXBDaGlsZER1cmF0aW9uPWR9KGEsYyl9KCk7KCgpPT57dmFyIGQxZT1PYmplY3QuY3JlYXRlO3ZhciBCTT1PYmplY3QuZGVmaW5lUHJvcGVydHksbTFlPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGcxZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLF8xZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx5MWU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsaGR0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsdjFlPU9iamVjdC5nZXRQcm90b3R5cGVPZixwZHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx4MWU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgRUk9TWF0aC5wb3csZmR0PShlLHQscik9PnQgaW4gZT9CTShlLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ9KTplW3RdPXIsS2w9KGUsdCk9Pntmb3IodmFyIHIgaW4gdHx8KHQ9e30pKXBkdC5jYWxsKHQscikmJmZkdChlLHIsdFtyXSk7aWYoaGR0KWZvcih2YXIgciBvZiBoZHQodCkpeDFlLmNhbGwodCxyKSYmZmR0KGUscix0W3JdKTtyZXR1cm4gZX0sTXg9KGUsdCk9Pm0xZShlLF8xZSh0KSk7dmFyIEV4PShlPT50eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0eXBlb2YgUHJveHkhPSJ1bmRlZmluZWQiP25ldyBQcm94eShlLHtnZXQ6KHQscik9Pih0eXBlb2YgcmVxdWlyZSE9InVuZGVmaW5lZCI/cmVxdWlyZTp0KVtyXX0pOmUpKGZ1bmN0aW9uKGUpe2lmKHR5cGVvZiByZXF1aXJlIT0idW5kZWZpbmVkIilyZXR1cm4gcmVxdWlyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhyb3cgbmV3IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrZSsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KTt2YXIgTT0oZSx0KT0+KCk9PihlJiYodD1lKGU9MCkpLHQpO3ZhciBIPShlLHQpPT4oKT0+KHR8fGUoKHQ9e2V4cG9ydHM6e319KS5leHBvcnRzLHQpLHQuZXhwb3J0cyksS3M9KGUsdCk9Pntmb3IodmFyIHIgaW4gdClCTShlLHIse2dldDp0W3JdLGVudW1lcmFibGU6ITB9KX0sZGR0PShlLHQscixuKT0+e2lmKHQmJnR5cGVvZiB0PT0ib2JqZWN0Inx8dHlwZW9mIHQ9PSJmdW5jdGlvbiIpZm9yKGxldCBpIG9mIHkxZSh0KSkhcGR0LmNhbGwoZSxpKSYmaSE9PXImJkJNKGUsaSx7Z2V0OigpPT50W2ldLGVudW1lcmFibGU6IShuPWcxZSh0LGkpKXx8bi5lbnVtZXJhYmxlfSk7cmV0dXJuIGV9O3ZhciBFZT0oZSx0LHIpPT4ocj1lIT1udWxsP2QxZSh2MWUoZSkpOnt9LGRkdCh0fHwhZXx8IWUuX19lc01vZHVsZT9CTShyLCJkZWZhdWx0Iix7dmFsdWU6ZSxlbnVtZXJhYmxlOiEwfSk6cixlKSksVXQ9ZT0+ZGR0KEJNKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxlKTt2YXIgUmk9KGUsdCxyKT0+bmV3IFByb21pc2UoKG4saSk9Pnt2YXIgbz1sPT57dHJ5e3Moci5uZXh0KGwpKX1jYXRjaChjKXtpKGMpfX0sYT1sPT57dHJ5e3Moci50aHJvdyhsKSl9Y2F0Y2goYyl7aShjKX19LHM9bD0+bC5kb25lP24obC52YWx1ZSk6UHJvbWlzZS5yZXNvbHZlKGwudmFsdWUpLnRoZW4obyxhKTtzKChyPXIuYXBwbHkoZSx0KSkubmV4dCgpKX0pO3ZhciBPZHQ9SCgobF9yLEFJKT0+e3ZhciBtZHQsZ2R0LF9kdCx5ZHQsdmR0LHhkdCxiZHQsd2R0LFNkdCxUSSx1RyxNZHQsRWR0LFRkdCxUeCxDZHQsQWR0LFBkdCxJZHQsTGR0LGtkdCxSZHQsTmR0LERkdCxDSTsoZnVuY3Rpb24oZSl7dmFyIHQ9dHlwZW9mIGdsb2JhbD09Im9iamVjdCI/Z2xvYmFsOnR5cGVvZiBzZWxmPT0ib2JqZWN0Ij9zZWxmOnR5cGVvZiB0aGlzPT0ib2JqZWN0Ij90aGlzOnt9O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKCJ0c2xpYiIsWyJleHBvcnRzIl0sZnVuY3Rpb24obil7ZShyKHQscihuKSkpfSk6dHlwZW9mIEFJPT0ib2JqZWN0IiYmdHlwZW9mIEFJLmV4cG9ydHM9PSJvYmplY3QiP2Uocih0LHIoQUkuZXhwb3J0cykpKTplKHIodCkpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbiE9PXQmJih0eXBlb2YgT2JqZWN0LmNyZWF0ZT09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk6bi5fX2VzTW9kdWxlPSEwKSxmdW5jdGlvbihvLGEpe3JldHVybiBuW29dPWk/aShvLGEpOmF9fX0pKGZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihuLGkpe24uX19wcm90b19fPWl9fHxmdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYobltvXT1pW29dKX07bWR0PWZ1bmN0aW9uKG4saSl7aWYodHlwZW9mIGkhPSJmdW5jdGlvbiImJmkhPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7dChuLGkpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPW59bi5wcm90b3R5cGU9aT09PW51bGw/T2JqZWN0LmNyZWF0ZShpKTooby5wcm90b3R5cGU9aS5wcm90b3R5cGUsbmV3IG8pfSxnZHQ9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24obil7Zm9yKHZhciBpLG89MSxhPWFyZ3VtZW50cy5sZW5ndGg7bzxhO28rKyl7aT1hcmd1bWVudHNbb107Zm9yKHZhciBzIGluIGkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscykmJihuW3NdPWlbc10pfXJldHVybiBufSxfZHQ9ZnVuY3Rpb24obixpKXt2YXIgbz17fTtmb3IodmFyIGEgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixhKSYmaS5pbmRleE9mKGEpPDAmJihvW2FdPW5bYV0pO2lmKG4hPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgcz0wLGE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtzPGEubGVuZ3RoO3MrKylpLmluZGV4T2YoYVtzXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG4sYVtzXSkmJihvW2Fbc11dPW5bYVtzXV0pO3JldHVybiBvfSx5ZHQ9ZnVuY3Rpb24obixpLG8sYSl7dmFyIHM9YXJndW1lbnRzLmxlbmd0aCxsPXM8Mz9pOmE9PT1udWxsP2E9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpLG8pOmEsYztpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0LmRlY29yYXRlPT0iZnVuY3Rpb24iKWw9UmVmbGVjdC5kZWNvcmF0ZShuLGksbyxhKTtlbHNlIGZvcih2YXIgdT1uLmxlbmd0aC0xO3U+PTA7dS0tKShjPW5bdV0pJiYobD0oczwzP2MobCk6cz4zP2MoaSxvLGwpOmMoaSxvKSl8fGwpO3JldHVybiBzPjMmJmwmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLG8sbCksbH0sdmR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aShvLGEsbil9fSx4ZHQ9ZnVuY3Rpb24obixpKXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG4saSl9LGJkdD1mdW5jdGlvbihuLGksbyxhKXtmdW5jdGlvbiBzKGwpe3JldHVybiBsIGluc3RhbmNlb2Ygbz9sOm5ldyBvKGZ1bmN0aW9uKGMpe2MobCl9KX1yZXR1cm4gbmV3KG98fChvPVByb21pc2UpKShmdW5jdGlvbihsLGMpe2Z1bmN0aW9uIHUocCl7dHJ5e2YoYS5uZXh0KHApKX1jYXRjaChkKXtjKGQpfX1mdW5jdGlvbiBoKHApe3RyeXtmKGEudGhyb3cocCkpfWNhdGNoKGQpe2MoZCl9fWZ1bmN0aW9uIGYocCl7cC5kb25lP2wocC52YWx1ZSk6cyhwLnZhbHVlKS50aGVuKHUsaCl9ZigoYT1hLmFwcGx5KG4saXx8W10pKS5uZXh0KCkpfSl9LHdkdD1mdW5jdGlvbihuLGkpe3ZhciBvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihsWzBdJjEpdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119LGEscyxsLGM7cmV0dXJuIGM9e25leHQ6dSgwKSx0aHJvdzp1KDEpLHJldHVybjp1KDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoY1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxjO2Z1bmN0aW9uIHUoZil7cmV0dXJuIGZ1bmN0aW9uKHApe3JldHVybiBoKFtmLHBdKX19ZnVuY3Rpb24gaChmKXtpZihhKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2MmJihjPTAsZlswXSYmKG89MCkpLG87KXRyeXtpZihhPTEscyYmKGw9ZlswXSYyP3MucmV0dXJuOmZbMF0/cy50aHJvd3x8KChsPXMucmV0dXJuKSYmbC5jYWxsKHMpLDApOnMubmV4dCkmJiEobD1sLmNhbGwocyxmWzFdKSkuZG9uZSlyZXR1cm4gbDtzd2l0Y2gocz0wLGwmJihmPVtmWzBdJjIsbC52YWx1ZV0pLGZbMF0pe2Nhc2UgMDpjYXNlIDE6bD1mO2JyZWFrO2Nhc2UgNDpyZXR1cm4gby5sYWJlbCsrLHt2YWx1ZTpmWzFdLGRvbmU6ITF9O2Nhc2UgNTpvLmxhYmVsKysscz1mWzFdLGY9WzBdO2NvbnRpbnVlO2Nhc2UgNzpmPW8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKGw9by50cnlzLCEobD1sLmxlbmd0aD4wJiZsW2wubGVuZ3RoLTFdKSYmKGZbMF09PT02fHxmWzBdPT09Mikpe289MDtjb250aW51ZX1pZihmWzBdPT09MyYmKCFsfHxmWzFdPmxbMF0mJmZbMV08bFszXSkpe28ubGFiZWw9ZlsxXTticmVha31pZihmWzBdPT09NiYmby5sYWJlbDxsWzFdKXtvLmxhYmVsPWxbMV0sbD1mO2JyZWFrfWlmKGwmJm8ubGFiZWw8bFsyXSl7by5sYWJlbD1sWzJdLG8ub3BzLnB1c2goZik7YnJlYWt9bFsyXSYmby5vcHMucG9wKCksby50cnlzLnBvcCgpO2NvbnRpbnVlfWY9aS5jYWxsKG4sbyl9Y2F0Y2gocCl7Zj1bNixwXSxzPTB9ZmluYWxseXthPWw9MH1pZihmWzBdJjUpdGhyb3cgZlsxXTtyZXR1cm57dmFsdWU6ZlswXT9mWzFdOnZvaWQgMCxkb25lOiEwfX19LFNkdD1mdW5jdGlvbihuLGkpe2Zvcih2YXIgbyBpbiBuKW8hPT0iZGVmYXVsdCImJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSxvKSYmQ0koaSxuLG8pfSxDST1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG4saSxvLGEpe2E9PT12b2lkIDAmJihhPW8pO3ZhciBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaSxvKTsoIXN8fCgiZ2V0ImluIHM/IWkuX19lc01vZHVsZTpzLndyaXRhYmxlfHxzLmNvbmZpZ3VyYWJsZSkpJiYocz17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaVtvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixhLHMpfTpmdW5jdGlvbihuLGksbyxhKXthPT09dm9pZCAwJiYoYT1vKSxuW2FdPWlbb119LFRJPWZ1bmN0aW9uKG4pe3ZhciBpPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJlN5bWJvbC5pdGVyYXRvcixvPWkmJm5baV0sYT0wO2lmKG8pcmV0dXJuIG8uY2FsbChuKTtpZihuJiZ0eXBlb2Ygbi5sZW5ndGg9PSJudW1iZXIiKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmE+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2ErK10sZG9uZTohbn19fTt0aHJvdyBuZXcgVHlwZUVycm9yKGk/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSx1Rz1mdW5jdGlvbihuLGkpe3ZhciBvPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gbjt2YXIgYT1vLmNhbGwobikscyxsPVtdLGM7dHJ5e2Zvcig7KGk9PT12b2lkIDB8fGktLSA+MCkmJiEocz1hLm5leHQoKSkuZG9uZTspbC5wdXNoKHMudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e3MmJiFzLmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sTWR0PWZ1bmN0aW9uKCl7Zm9yKHZhciBuPVtdLGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKW49bi5jb25jYXQodUcoYXJndW1lbnRzW2ldKSk7cmV0dXJuIG59LEVkdD1mdW5jdGlvbigpe2Zvcih2YXIgbj0wLGk9MCxvPWFyZ3VtZW50cy5sZW5ndGg7aTxvO2krKyluKz1hcmd1bWVudHNbaV0ubGVuZ3RoO2Zvcih2YXIgYT1BcnJheShuKSxzPTAsaT0wO2k8bztpKyspZm9yKHZhciBsPWFyZ3VtZW50c1tpXSxjPTAsdT1sLmxlbmd0aDtjPHU7YysrLHMrKylhW3NdPWxbY107cmV0dXJuIGF9LFRkdD1mdW5jdGlvbihuLGksbyl7aWYob3x8YXJndW1lbnRzLmxlbmd0aD09PTIpZm9yKHZhciBhPTAscz1pLmxlbmd0aCxsO2E8czthKyspKGx8fCEoYSBpbiBpKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChpLDAsYSkpLGxbYV09aVthXSk7cmV0dXJuIG4uY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGkpKX0sVHg9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBUeD8odGhpcy52PW4sdGhpcyk6bmV3IFR4KG4pfSxDZHQ9ZnVuY3Rpb24obixpLG8pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgYT1vLmFwcGx5KG4saXx8W10pLHMsbD1bXTtyZXR1cm4gcz17fSxjKCJuZXh0IiksYygidGhyb3ciKSxjKCJyZXR1cm4iKSxzW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxzO2Z1bmN0aW9uIGMoZyl7YVtnXSYmKHNbZ109ZnVuY3Rpb24oXyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHkseCl7bC5wdXNoKFtnLF8seSx4XSk+MXx8dShnLF8pfSl9KX1mdW5jdGlvbiB1KGcsXyl7dHJ5e2goYVtnXShfKSl9Y2F0Y2goeSl7ZChsWzBdWzNdLHkpfX1mdW5jdGlvbiBoKGcpe2cudmFsdWUgaW5zdGFuY2VvZiBUeD9Qcm9taXNlLnJlc29sdmUoZy52YWx1ZS52KS50aGVuKGYscCk6ZChsWzBdWzJdLGcpfWZ1bmN0aW9uIGYoZyl7dSgibmV4dCIsZyl9ZnVuY3Rpb24gcChnKXt1KCJ0aHJvdyIsZyl9ZnVuY3Rpb24gZChnLF8pe2coXyksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxBZHQ9ZnVuY3Rpb24obil7dmFyIGksbztyZXR1cm4gaT17fSxhKCJuZXh0IiksYSgidGhyb3ciLGZ1bmN0aW9uKHMpe3Rocm93IHN9KSxhKCJyZXR1cm4iKSxpW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKHMsbCl7aVtzXT1uW3NdP2Z1bmN0aW9uKGMpe3JldHVybihvPSFvKT97dmFsdWU6VHgobltzXShjKSksZG9uZTpzPT09InJldHVybiJ9Omw/bChjKTpjfTpsfX0sUGR0PWZ1bmN0aW9uKG4pe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgaT1uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSxvO3JldHVybiBpP2kuY2FsbChuKToobj10eXBlb2YgVEk9PSJmdW5jdGlvbiI/VEkobik6bltTeW1ib2wuaXRlcmF0b3JdKCksbz17fSxhKCJuZXh0IiksYSgidGhyb3ciKSxhKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBhKGwpe29bbF09bltsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsaCl7Yz1uW2xdKGMpLHModSxoLGMuZG9uZSxjLnZhbHVlKX0pfX1mdW5jdGlvbiBzKGwsYyx1LGgpe1Byb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKGYpe2woe3ZhbHVlOmYsZG9uZTp1fSl9LGMpfX0sSWR0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkobiwicmF3Iix7dmFsdWU6aX0pOm4ucmF3PWksbn07dmFyIHI9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppfSl9OmZ1bmN0aW9uKG4saSl7bi5kZWZhdWx0PWl9O0xkdD1mdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIGk9e307aWYobiE9bnVsbClmb3IodmFyIG8gaW4gbilvIT09ImRlZmF1bHQiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmQ0koaSxuLG8pO3JldHVybiByKGksbiksaX0sa2R0PWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX0sUmR0PWZ1bmN0aW9uKG4saSxvLGEpe2lmKG89PT0iYSImJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKHR5cGVvZiBpPT0iZnVuY3Rpb24iP24hPT1pfHwhYTohaS5oYXMobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIG89PT0ibSI/YTpvPT09ImEiP2EuY2FsbChuKTphP2EudmFsdWU6aS5nZXQobil9LE5kdD1mdW5jdGlvbihuLGksbyxhLHMpe2lmKGE9PT0ibSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7aWYoYT09PSJhIiYmIXMpdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyIik7aWYodHlwZW9mIGk9PSJmdW5jdGlvbiI/biE9PWl8fCFzOiFpLmhhcyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpO3JldHVybiBhPT09ImEiP3MuY2FsbChuLG8pOnM/cy52YWx1ZT1vOmkuc2V0KG4sbyksb30sRGR0PWZ1bmN0aW9uKG4saSl7aWYoaT09PW51bGx8fHR5cGVvZiBpIT0ib2JqZWN0IiYmdHlwZW9mIGkhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3QiKTtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/aT09PW46bi5oYXMoaSl9LGUoIl9fZXh0ZW5kcyIsbWR0KSxlKCJfX2Fzc2lnbiIsZ2R0KSxlKCJfX3Jlc3QiLF9kdCksZSgiX19kZWNvcmF0ZSIseWR0KSxlKCJfX3BhcmFtIix2ZHQpLGUoIl9fbWV0YWRhdGEiLHhkdCksZSgiX19hd2FpdGVyIixiZHQpLGUoIl9fZ2VuZXJhdG9yIix3ZHQpLGUoIl9fZXhwb3J0U3RhciIsU2R0KSxlKCJfX2NyZWF0ZUJpbmRpbmciLENJKSxlKCJfX3ZhbHVlcyIsVEkpLGUoIl9fcmVhZCIsdUcpLGUoIl9fc3ByZWFkIixNZHQpLGUoIl9fc3ByZWFkQXJyYXlzIixFZHQpLGUoIl9fc3ByZWFkQXJyYXkiLFRkdCksZSgiX19hd2FpdCIsVHgpLGUoIl9fYXN5bmNHZW5lcmF0b3IiLENkdCksZSgiX19hc3luY0RlbGVnYXRvciIsQWR0KSxlKCJfX2FzeW5jVmFsdWVzIixQZHQpLGUoIl9fbWFrZVRlbXBsYXRlT2JqZWN0IixJZHQpLGUoIl9faW1wb3J0U3RhciIsTGR0KSxlKCJfX2ltcG9ydERlZmF1bHQiLGtkdCksZSgiX19jbGFzc1ByaXZhdGVGaWVsZEdldCIsUmR0KSxlKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixOZHQpLGUoIl9fY2xhc3NQcml2YXRlRmllbGRJbiIsRGR0KX0pfSk7dmFyIE9lPUgoKFJ4LCRNKT0+eyhmdW5jdGlvbigpe3ZhciBlLHQ9IjQuMTcuMjEiLHI9MjAwLG49IlVuc3VwcG9ydGVkIGNvcmUtanMgdXNlLiBUcnkgaHR0cHM6Ly9ucG1zLmlvL3NlYXJjaD9xPXBvbnlmaWxsLiIsaT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiIsbz0iSW52YWxpZCBgdmFyaWFibGVgIG9wdGlvbiBwYXNzZWQgaW50byBgXy50ZW1wbGF0ZWAiLGE9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLHM9NTAwLGw9Il9fbG9kYXNoX3BsYWNlaG9sZGVyX18iLGM9MSx1PTIsaD00LGY9MSxwPTIsZD0xLGc9MixfPTQseT04LHg9MTYsYj0zMixTPTY0LEM9MTI4LFA9MjU2LGs9NTEyLE89MzAsRD0iLi4uIixCPTgwMCxJPTE2LEw9MSxSPTIsRj0zLHo9MS8wLFU9OTAwNzE5OTI1NDc0MDk5MSxXPTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MixaPTAvMCxydD00Mjk0OTY3Mjk1LG90PXJ0LTEsc3Q9cnQ+Pj4xLFN0PVtbImFyeSIsQ10sWyJiaW5kIixkXSxbImJpbmRLZXkiLGddLFsiY3VycnkiLHldLFsiY3VycnlSaWdodCIseF0sWyJmbGlwIixrXSxbInBhcnRpYWwiLGJdLFsicGFydGlhbFJpZ2h0IixTXSxbInJlYXJnIixQXV0sYnQ9IltvYmplY3QgQXJndW1lbnRzXSIsTXQ9IltvYmplY3QgQXJyYXldIixsdD0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsS3Q9IltvYmplY3QgQm9vbGVhbl0iLF90PSJbb2JqZWN0IERhdGVdIixjdD0iW29iamVjdCBET01FeGNlcHRpb25dIixYPSJbb2JqZWN0IEVycm9yXSIsZXQ9IltvYmplY3QgRnVuY3Rpb25dIixkdD0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLHE9IltvYmplY3QgTWFwXSIscHQ9IltvYmplY3QgTnVtYmVyXSIsaHQ9IltvYmplY3QgTnVsbF0iLHd0PSJbb2JqZWN0IE9iamVjdF0iLGt0PSJbb2JqZWN0IFByb21pc2VdIixpZT0iW29iamVjdCBQcm94eV0iLGVlPSJbb2JqZWN0IFJlZ0V4cF0iLExlPSJbb2JqZWN0IFNldF0iLGFyPSJbb2JqZWN0IFN0cmluZ10iLGZyPSJbb2JqZWN0IFN5bWJvbF0iLHR0PSJbb2JqZWN0IFVuZGVmaW5lZF0iLCQ9IltvYmplY3QgV2Vha01hcF0iLEl0PSJbb2JqZWN0IFdlYWtTZXRdIiwkdD0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLGhlPSJbb2JqZWN0IERhdGFWaWV3XSIsVHQ9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsYmU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsbnQ9IltvYmplY3QgSW50OEFycmF5XSIsQ3Q9IltvYmplY3QgSW50MTZBcnJheV0iLFd0PSJbb2JqZWN0IEludDMyQXJyYXldIixmZT0iW29iamVjdCBVaW50OEFycmF5XSIsYXQ9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIixzZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFF0PSJbb2JqZWN0IFVpbnQzMkFycmF5XSIsQ2U9L1xiX19wIFwrPSAnJzsvZyxQdD0vXGIoX19wIFwrPSkgJycgXCsvZyxOdD0vKF9fZVwoLio/XCl8XGJfX3RcKSkgXCtcbicnOy9nLHplPS8mKD86YW1wfGx0fGd0fHF1b3R8IzM5KTsvZyx5bj0vWyY8PiInXS9nLFdpPVJlZ0V4cCh6ZS5zb3VyY2UpLEFyPVJlZ0V4cCh5bi5zb3VyY2UpLFBhPS88JS0oW1xzXFNdKz8pJT4vZyxobz0vPCUoW1xzXFNdKz8pJT4vZyxJYT0vPCU9KFtcc1xTXSs/KSU+L2csbHg9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sY209L15cdyokLyxKMD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjbj0vW1xcXiQuKis/KClbXF17fXxdL2csY3g9UmVnRXhwKGNuLnNvdXJjZSkscnA9L15ccysvLEs9L1xzLyxndD0vXHsoPzpcblwvXCogXFt3cmFwcGVkIHdpdGggLitcXSBcKlwvKT9cbj8vLEV0PS9ce1xuXC9cKiBcW3dyYXBwZWQgd2l0aCAoLispXF0gXCovLHh0PS8sPyAmIC8sRnQ9L1teXHgwMC1ceDJmXHgzYS1ceDQwXHg1Yi1ceDYwXHg3Yi1ceDdmXSsvZyxWZT0vWygpPSx7fVxbXF1cL1xzXS8sVWU9L1xcKFxcKT8vZyx0cj0vXCRceyhbXlxcfV0qKD86XFwuW15cXH1dKikqKVx9L2csS2U9L1x3KiQvLFhyPS9eWy0rXTB4WzAtOWEtZl0rJC9pLF9yPS9eMGJbMDFdKyQvaSxQcj0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxYbj0vXjBvWzAtN10rJC9pLG5wPS9eKD86MHxbMS05XVxkKikkLyx1bT0vW1x4YzAtXHhkNlx4ZDgtXHhmNlx4ZjgtXHhmZlx1MDEwMC1cdTAxN2ZdL2csbXI9LygkXikvLEZsPS9bJ1xuXHJcdTIwMjhcdTIwMjlcXF0vZywkbj0iXFx1ZDgwMC1cXHVkZmZmIixCbD0iXFx1MDMwMC1cXHUwMzZmIix1eD0iXFx1ZmUyMC1cXHVmZTJmIixIbD0iXFx1MjBkMC1cXHUyMGZmIixWbD1CbCt1eCtIbCxZaT0iXFx1MjcwMC1cXHUyN2JmIixobT0iYS16XFx4ZGYtXFx4ZjZcXHhmOC1cXHhmZiIscXM9IlxceGFjXFx4YjFcXHhkN1xceGY3IixocGU9IlxceDAwLVxceDJmXFx4M2EtXFx4NDBcXHg1Yi1cXHg2MFxceDdiLVxceGJmIixmcGU9IlxcdTIwMDAtXFx1MjA2ZiIscHBlPSIgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDAiLHFodD0iQS1aXFx4YzAtXFx4ZDZcXHhkOC1cXHhkZSIsR2h0PSJcXHVmZTBlXFx1ZmUwZiIsV2h0PXFzK2hwZStmcGUrcHBlLHRxPSJbJ1x1MjAxOV0iLGRwZT0iWyIrJG4rIl0iLFlodD0iWyIrV2h0KyJdIixCNj0iWyIrVmwrIl0iLGpodD0iXFxkKyIsbXBlPSJbIitZaSsiXSIsWGh0PSJbIitobSsiXSIsJGh0PSJbXiIrJG4rV2h0K2podCtZaStobStxaHQrIl0iLGVxPSJcXHVkODNjW1xcdWRmZmItXFx1ZGZmZl0iLGdwZT0iKD86IitCNisifCIrZXErIikiLEtodD0iW14iKyRuKyJdIixycT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsbnE9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLGh4PSJbIitxaHQrIl0iLFpodD0iXFx1MjAwZCIsSmh0PSIoPzoiK1hodCsifCIrJGh0KyIpIixfcGU9Iig/OiIraHgrInwiKyRodCsiKSIsUWh0PSIoPzoiK3RxKyIoPzpkfGxsfG18cmV8c3x0fHZlKSk/Iix0ZnQ9Iig/OiIrdHErIig/OkR8TEx8TXxSRXxTfFR8VkUpKT8iLGVmdD1ncGUrIj8iLHJmdD0iWyIrR2h0KyJdPyIseXBlPSIoPzoiK1podCsiKD86IitbS2h0LHJxLG5xXS5qb2luKCJ8IikrIikiK3JmdCtlZnQrIikqIix2cGU9IlxcZCooPzoxc3R8Mm5kfDNyZHwoPyFbMTIzXSlcXGR0aCkoPz1cXGJ8W0EtWl9dKSIseHBlPSJcXGQqKD86MVNUfDJORHwzUkR8KD8hWzEyM10pXFxkVEgpKD89XFxifFthLXpfXSkiLG5mdD1yZnQrZWZ0K3lwZSxicGU9Iig/OiIrW21wZSxycSxucV0uam9pbigifCIpKyIpIituZnQsd3BlPSIoPzoiK1tLaHQrQjYrIj8iLEI2LHJxLG5xLGRwZV0uam9pbigifCIpKyIpIixTcGU9UmVnRXhwKHRxLCJnIiksTXBlPVJlZ0V4cChCNiwiZyIpLGlxPVJlZ0V4cChlcSsiKD89IitlcSsiKXwiK3dwZStuZnQsImciKSxFcGU9UmVnRXhwKFtoeCsiPyIrWGh0KyIrIitRaHQrIig/PSIrW1lodCxoeCwiJCJdLmpvaW4oInwiKSsiKSIsX3BlKyIrIit0ZnQrIig/PSIrW1lodCxoeCtKaHQsIiQiXS5qb2luKCJ8IikrIikiLGh4KyI/IitKaHQrIisiK1FodCxoeCsiKyIrdGZ0LHhwZSx2cGUsamh0LGJwZV0uam9pbigifCIpLCJnIiksVHBlPVJlZ0V4cCgiWyIrWmh0KyRuK1ZsK0dodCsiXSIpLENwZT0vW2Etel1bQS1aXXxbQS1aXXsyfVthLXpdfFswLTldW2EtekEtWl18W2EtekEtWl1bMC05XXxbXmEtekEtWjAtOSBdLyxBcGU9WyJBcnJheSIsIkJ1ZmZlciIsIkRhdGFWaWV3IiwiRGF0ZSIsIkVycm9yIiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiRnVuY3Rpb24iLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIk1hcCIsIk1hdGgiLCJPYmplY3QiLCJQcm9taXNlIiwiUmVnRXhwIiwiU2V0IiwiU3RyaW5nIiwiU3ltYm9sIiwiVHlwZUVycm9yIiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIldlYWtNYXAiLCJfIiwiY2xlYXJUaW1lb3V0IiwiaXNGaW5pdGUiLCJwYXJzZUludCIsInNldFRpbWVvdXQiXSxQcGU9LTEsUm49e307Um5bVHRdPVJuW2JlXT1SbltudF09Um5bQ3RdPVJuW1d0XT1SbltmZV09Um5bYXRdPVJuW3NlXT1SbltRdF09ITAsUm5bYnRdPVJuW010XT1SblskdF09Um5bS3RdPVJuW2hlXT1SbltfdF09Um5bWF09Um5bZXRdPVJuW3FdPVJuW3B0XT1Sblt3dF09Um5bZWVdPVJuW0xlXT1Sblthcl09Um5bJF09ITE7dmFyIFRuPXt9O1RuW2J0XT1UbltNdF09VG5bJHRdPVRuW2hlXT1UbltLdF09VG5bX3RdPVRuW1R0XT1UbltiZV09VG5bbnRdPVRuW0N0XT1UbltXdF09VG5bcV09VG5bcHRdPVRuW3d0XT1UbltlZV09VG5bTGVdPVRuW2FyXT1Ubltmcl09VG5bZmVdPVRuW2F0XT1UbltzZV09VG5bUXRdPSEwLFRuW1hdPVRuW2V0XT1UblskXT0hMTt2YXIgSXBlPXtcdTAwQzA6IkEiLFx1MDBDMToiQSIsXHUwMEMyOiJBIixcdTAwQzM6IkEiLFx1MDBDNDoiQSIsXHUwMEM1OiJBIixcdTAwRTA6ImEiLFx1MDBFMToiYSIsXHUwMEUyOiJhIixcdTAwRTM6ImEiLFx1MDBFNDoiYSIsXHUwMEU1OiJhIixcdTAwQzc6IkMiLFx1MDBFNzoiYyIsXHUwMEQwOiJEIixcdTAwRjA6ImQiLFx1MDBDODoiRSIsXHUwMEM5OiJFIixcdTAwQ0E6IkUiLFx1MDBDQjoiRSIsXHUwMEU4OiJlIixcdTAwRTk6ImUiLFx1MDBFQToiZSIsXHUwMEVCOiJlIixcdTAwQ0M6IkkiLFx1MDBDRDoiSSIsXHUwMENFOiJJIixcdTAwQ0Y6IkkiLFx1MDBFQzoiaSIsXHUwMEVEOiJpIixcdTAwRUU6ImkiLFx1MDBFRjoiaSIsXHUwMEQxOiJOIixcdTAwRjE6Im4iLFx1MDBEMjoiTyIsXHUwMEQzOiJPIixcdTAwRDQ6Ik8iLFx1MDBENToiTyIsXHUwMEQ2OiJPIixcdTAwRDg6Ik8iLFx1MDBGMjoibyIsXHUwMEYzOiJvIixcdTAwRjQ6Im8iLFx1MDBGNToibyIsXHUwMEY2OiJvIixcdTAwRjg6Im8iLFx1MDBEOToiVSIsXHUwMERBOiJVIixcdTAwREI6IlUiLFx1MDBEQzoiVSIsXHUwMEY5OiJ1IixcdTAwRkE6InUiLFx1MDBGQjoidSIsXHUwMEZDOiJ1IixcdTAwREQ6IlkiLFx1MDBGRDoieSIsXHUwMEZGOiJ5IixcdTAwQzY6IkFlIixcdTAwRTY6ImFlIixcdTAwREU6IlRoIixcdTAwRkU6InRoIixcdTAwREY6InNzIixcdTAxMDA6IkEiLFx1MDEwMjoiQSIsXHUwMTA0OiJBIixcdTAxMDE6ImEiLFx1MDEwMzoiYSIsXHUwMTA1OiJhIixcdTAxMDY6IkMiLFx1MDEwODoiQyIsXHUwMTBBOiJDIixcdTAxMEM6IkMiLFx1MDEwNzoiYyIsXHUwMTA5OiJjIixcdTAxMEI6ImMiLFx1MDEwRDoiYyIsXHUwMTBFOiJEIixcdTAxMTA6IkQiLFx1MDEwRjoiZCIsXHUwMTExOiJkIixcdTAxMTI6IkUiLFx1MDExNDoiRSIsXHUwMTE2OiJFIixcdTAxMTg6IkUiLFx1MDExQToiRSIsXHUwMTEzOiJlIixcdTAxMTU6ImUiLFx1MDExNzoiZSIsXHUwMTE5OiJlIixcdTAxMUI6ImUiLFx1MDExQzoiRyIsXHUwMTFFOiJHIixcdTAxMjA6IkciLFx1MDEyMjoiRyIsXHUwMTFEOiJnIixcdTAxMUY6ImciLFx1MDEyMToiZyIsXHUwMTIzOiJnIixcdTAxMjQ6IkgiLFx1MDEyNjoiSCIsXHUwMTI1OiJoIixcdTAxMjc6ImgiLFx1MDEyODoiSSIsXHUwMTJBOiJJIixcdTAxMkM6IkkiLFx1MDEyRToiSSIsXHUwMTMwOiJJIixcdTAxMjk6ImkiLFx1MDEyQjoiaSIsXHUwMTJEOiJpIixcdTAxMkY6ImkiLFx1MDEzMToiaSIsXHUwMTM0OiJKIixcdTAxMzU6ImoiLFx1MDEzNjoiSyIsXHUwMTM3OiJrIixcdTAxMzg6ImsiLFx1MDEzOToiTCIsXHUwMTNCOiJMIixcdTAxM0Q6IkwiLFx1MDEzRjoiTCIsXHUwMTQxOiJMIixcdTAxM0E6ImwiLFx1MDEzQzoibCIsXHUwMTNFOiJsIixcdTAxNDA6ImwiLFx1MDE0MjoibCIsXHUwMTQzOiJOIixcdTAxNDU6Ik4iLFx1MDE0NzoiTiIsXHUwMTRBOiJOIixcdTAxNDQ6Im4iLFx1MDE0NjoibiIsXHUwMTQ4OiJuIixcdTAxNEI6Im4iLFx1MDE0QzoiTyIsXHUwMTRFOiJPIixcdTAxNTA6Ik8iLFx1MDE0RDoibyIsXHUwMTRGOiJvIixcdTAxNTE6Im8iLFx1MDE1NDoiUiIsXHUwMTU2OiJSIixcdTAxNTg6IlIiLFx1MDE1NToiciIsXHUwMTU3OiJyIixcdTAxNTk6InIiLFx1MDE1QToiUyIsXHUwMTVDOiJTIixcdTAxNUU6IlMiLFx1MDE2MDoiUyIsXHUwMTVCOiJzIixcdTAxNUQ6InMiLFx1MDE1RjoicyIsXHUwMTYxOiJzIixcdTAxNjI6IlQiLFx1MDE2NDoiVCIsXHUwMTY2OiJUIixcdTAxNjM6InQiLFx1MDE2NToidCIsXHUwMTY3OiJ0IixcdTAxNjg6IlUiLFx1MDE2QToiVSIsXHUwMTZDOiJVIixcdTAxNkU6IlUiLFx1MDE3MDoiVSIsXHUwMTcyOiJVIixcdTAxNjk6InUiLFx1MDE2QjoidSIsXHUwMTZEOiJ1IixcdTAxNkY6InUiLFx1MDE3MToidSIsXHUwMTczOiJ1IixcdTAxNzQ6IlciLFx1MDE3NToidyIsXHUwMTc2OiJZIixcdTAxNzc6InkiLFx1MDE3ODoiWSIsXHUwMTc5OiJaIixcdTAxN0I6IloiLFx1MDE3RDoiWiIsXHUwMTdBOiJ6IixcdTAxN0M6InoiLFx1MDE3RToieiIsXHUwMTMyOiJJSiIsXHUwMTMzOiJpaiIsXHUwMTUyOiJPZSIsXHUwMTUzOiJvZSIsXHUwMTQ5OiInbiIsXHUwMTdGOiJzIn0sTHBlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxrcGU9eyImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+IiwiJnF1b3Q7IjonIicsIiYjMzk7IjoiJyJ9LFJwZT17IlxcIjoiXFwiLCInIjoiJyIsIlxuIjoibiIsIlxyIjoiciIsIlx1MjAyOCI6InUyMDI4IiwiXHUyMDI5IjoidTIwMjkifSxOcGU9cGFyc2VGbG9hdCxEcGU9cGFyc2VJbnQsaWZ0PXR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbCxPcGU9dHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixmbz1pZnR8fE9wZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvcT10eXBlb2YgUng9PSJvYmplY3QiJiZSeCYmIVJ4Lm5vZGVUeXBlJiZSeCxRMD1vcSYmdHlwZW9mICRNPT0ib2JqZWN0IiYmJE0mJiEkTS5ub2RlVHlwZSYmJE0sb2Z0PVEwJiZRMC5leHBvcnRzPT09b3EsYXE9b2Z0JiZpZnQucHJvY2VzcyxVbD1mdW5jdGlvbigpe3RyeXt2YXIgdXQ9UTAmJlEwLnJlcXVpcmUmJlEwLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdXR8fGFxJiZhcS5iaW5kaW5nJiZhcS5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2goQXQpe319KCksYWZ0PVVsJiZVbC5pc0FycmF5QnVmZmVyLHNmdD1VbCYmVWwuaXNEYXRlLGxmdD1VbCYmVWwuaXNNYXAsY2Z0PVVsJiZVbC5pc1JlZ0V4cCx1ZnQ9VWwmJlVsLmlzU2V0LGhmdD1VbCYmVWwuaXNUeXBlZEFycmF5O2Z1bmN0aW9uIEdzKHV0LEF0LHZ0KXtzd2l0Y2godnQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHV0LmNhbGwoQXQpO2Nhc2UgMTpyZXR1cm4gdXQuY2FsbChBdCx2dFswXSk7Y2FzZSAyOnJldHVybiB1dC5jYWxsKEF0LHZ0WzBdLHZ0WzFdKTtjYXNlIDM6cmV0dXJuIHV0LmNhbGwoQXQsdnRbMF0sdnRbMV0sdnRbMl0pfXJldHVybiB1dC5hcHBseShBdCx2dCl9ZnVuY3Rpb24genBlKHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrV2U8JHI7KXt2YXIgamk9dXRbV2VdO0F0KGdlLGppLHZ0KGppKSx1dCl9cmV0dXJuIGdlfWZ1bmN0aW9uIHFsKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoOysrdnQ8Z2UmJkF0KHV0W3Z0XSx2dCx1dCkhPT0hMTspO3JldHVybiB1dH1mdW5jdGlvbiBGcGUodXQsQXQpe2Zvcih2YXIgdnQ9dXQ9PW51bGw/MDp1dC5sZW5ndGg7dnQtLSYmQXQodXRbdnRdLHZ0LHV0KSE9PSExOyk7cmV0dXJuIHV0fWZ1bmN0aW9uIGZmdCh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZighQXQodXRbdnRdLHZ0LHV0KSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBmbSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdO0F0KGppLHZ0LHV0KSYmKCRyW1dlKytdPWppKX1yZXR1cm4gJHJ9ZnVuY3Rpb24gSDYodXQsQXQpe3ZhciB2dD11dD09bnVsbD8wOnV0Lmxlbmd0aDtyZXR1cm4hIXZ0JiZmeCh1dCxBdCwwKT4tMX1mdW5jdGlvbiBzcSh1dCxBdCx2dCl7Zm9yKHZhciBnZT0tMSxXZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK2dlPFdlOylpZih2dChBdCx1dFtnZV0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEtuKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0PT1udWxsPzA6dXQubGVuZ3RoLFdlPUFycmF5KGdlKTsrK3Z0PGdlOylXZVt2dF09QXQodXRbdnRdLHZ0LHV0KTtyZXR1cm4gV2V9ZnVuY3Rpb24gcG0odXQsQXQpe2Zvcih2YXIgdnQ9LTEsZ2U9QXQubGVuZ3RoLFdlPXV0Lmxlbmd0aDsrK3Z0PGdlOyl1dFtXZSt2dF09QXRbdnRdO3JldHVybiB1dH1mdW5jdGlvbiBscSh1dCxBdCx2dCxnZSl7dmFyIFdlPS0xLCRyPXV0PT1udWxsPzA6dXQubGVuZ3RoO2ZvcihnZSYmJHImJih2dD11dFsrK1dlXSk7KytXZTwkcjspdnQ9QXQodnQsdXRbV2VdLFdlLHV0KTtyZXR1cm4gdnR9ZnVuY3Rpb24gQnBlKHV0LEF0LHZ0LGdlKXt2YXIgV2U9dXQ9PW51bGw/MDp1dC5sZW5ndGg7Zm9yKGdlJiZXZSYmKHZ0PXV0Wy0tV2VdKTtXZS0tOyl2dD1BdCh2dCx1dFtXZV0sV2UsdXQpO3JldHVybiB2dH1mdW5jdGlvbiBjcSh1dCxBdCl7Zm9yKHZhciB2dD0tMSxnZT11dD09bnVsbD8wOnV0Lmxlbmd0aDsrK3Z0PGdlOylpZihBdCh1dFt2dF0sdnQsdXQpKXJldHVybiEwO3JldHVybiExfXZhciBIcGU9dXEoImxlbmd0aCIpO2Z1bmN0aW9uIFZwZSh1dCl7cmV0dXJuIHV0LnNwbGl0KCIiKX1mdW5jdGlvbiBVcGUodXQpe3JldHVybiB1dC5tYXRjaChGdCl8fFtdfWZ1bmN0aW9uIHBmdCh1dCxBdCx2dCl7dmFyIGdlO3JldHVybiB2dCh1dCxmdW5jdGlvbihXZSwkcixqaSl7aWYoQXQoV2UsJHIsamkpKXJldHVybiBnZT0kciwhMX0pLGdlfWZ1bmN0aW9uIFY2KHV0LEF0LHZ0LGdlKXtmb3IodmFyIFdlPXV0Lmxlbmd0aCwkcj12dCsoZ2U/MTotMSk7Z2U/JHItLTorKyRyPFdlOylpZihBdCh1dFskcl0sJHIsdXQpKXJldHVybiAkcjtyZXR1cm4tMX1mdW5jdGlvbiBmeCh1dCxBdCx2dCl7cmV0dXJuIEF0PT09QXQ/dGRlKHV0LEF0LHZ0KTpWNih1dCxkZnQsdnQpfWZ1bmN0aW9uIHFwZSh1dCxBdCx2dCxnZSl7Zm9yKHZhciBXZT12dC0xLCRyPXV0Lmxlbmd0aDsrK1dlPCRyOylpZihnZSh1dFtXZV0sQXQpKXJldHVybiBXZTtyZXR1cm4tMX1mdW5jdGlvbiBkZnQodXQpe3JldHVybiB1dCE9PXV0fWZ1bmN0aW9uIG1mdCh1dCxBdCl7dmFyIHZ0PXV0PT1udWxsPzA6dXQubGVuZ3RoO3JldHVybiB2dD9mcSh1dCxBdCkvdnQ6Wn1mdW5jdGlvbiB1cSh1dCl7cmV0dXJuIGZ1bmN0aW9uKEF0KXtyZXR1cm4gQXQ9PW51bGw/ZTpBdFt1dF19fWZ1bmN0aW9uIGhxKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dD09bnVsbD9lOnV0W0F0XX19ZnVuY3Rpb24gZ2Z0KHV0LEF0LHZ0LGdlLFdlKXtyZXR1cm4gV2UodXQsZnVuY3Rpb24oJHIsamksdm4pe3Z0PWdlPyhnZT0hMSwkcik6QXQodnQsJHIsamksdm4pfSksdnR9ZnVuY3Rpb24gR3BlKHV0LEF0KXt2YXIgdnQ9dXQubGVuZ3RoO2Zvcih1dC5zb3J0KEF0KTt2dC0tOyl1dFt2dF09dXRbdnRdLnZhbHVlO3JldHVybiB1dH1mdW5jdGlvbiBmcSh1dCxBdCl7Zm9yKHZhciB2dCxnZT0tMSxXZT11dC5sZW5ndGg7KytnZTxXZTspe3ZhciAkcj1BdCh1dFtnZV0pOyRyIT09ZSYmKHZ0PXZ0PT09ZT8kcjp2dCskcil9cmV0dXJuIHZ0fWZ1bmN0aW9uIHBxKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPUFycmF5KHV0KTsrK3Z0PHV0OylnZVt2dF09QXQodnQpO3JldHVybiBnZX1mdW5jdGlvbiBXcGUodXQsQXQpe3JldHVybiBLbihBdCxmdW5jdGlvbih2dCl7cmV0dXJuW3Z0LHV0W3Z0XV19KX1mdW5jdGlvbiBfZnQodXQpe3JldHVybiB1dCYmdXQuc2xpY2UoMCxiZnQodXQpKzEpLnJlcGxhY2UocnAsIiIpfWZ1bmN0aW9uIFdzKHV0KXtyZXR1cm4gZnVuY3Rpb24oQXQpe3JldHVybiB1dChBdCl9fWZ1bmN0aW9uIGRxKHV0LEF0KXtyZXR1cm4gS24oQXQsZnVuY3Rpb24odnQpe3JldHVybiB1dFt2dF19KX1mdW5jdGlvbiBNTSh1dCxBdCl7cmV0dXJuIHV0LmhhcyhBdCl9ZnVuY3Rpb24geWZ0KHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aDsrK3Z0PGdlJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gdmZ0KHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aDt2dC0tJiZmeChBdCx1dFt2dF0sMCk+LTE7KTtyZXR1cm4gdnR9ZnVuY3Rpb24gWXBlKHV0LEF0KXtmb3IodmFyIHZ0PXV0Lmxlbmd0aCxnZT0wO3Z0LS07KXV0W3Z0XT09PUF0JiYrK2dlO3JldHVybiBnZX12YXIganBlPWhxKElwZSksWHBlPWhxKExwZSk7ZnVuY3Rpb24gJHBlKHV0KXtyZXR1cm4iXFwiK1JwZVt1dF19ZnVuY3Rpb24gS3BlKHV0LEF0KXtyZXR1cm4gdXQ9PW51bGw/ZTp1dFtBdF19ZnVuY3Rpb24gcHgodXQpe3JldHVybiBUcGUudGVzdCh1dCl9ZnVuY3Rpb24gWnBlKHV0KXtyZXR1cm4gQ3BlLnRlc3QodXQpfWZ1bmN0aW9uIEpwZSh1dCl7Zm9yKHZhciBBdCx2dD1bXTshKEF0PXV0Lm5leHQoKSkuZG9uZTspdnQucHVzaChBdC52YWx1ZSk7cmV0dXJuIHZ0fWZ1bmN0aW9uIG1xKHV0KXt2YXIgQXQ9LTEsdnQ9QXJyYXkodXQuc2l6ZSk7cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oZ2UsV2Upe3Z0WysrQXRdPVtXZSxnZV19KSx2dH1mdW5jdGlvbiB4ZnQodXQsQXQpe3JldHVybiBmdW5jdGlvbih2dCl7cmV0dXJuIHV0KEF0KHZ0KSl9fWZ1bmN0aW9uIGRtKHV0LEF0KXtmb3IodmFyIHZ0PS0xLGdlPXV0Lmxlbmd0aCxXZT0wLCRyPVtdOysrdnQ8Z2U7KXt2YXIgamk9dXRbdnRdOyhqaT09PUF0fHxqaT09PWwpJiYodXRbdnRdPWwsJHJbV2UrK109dnQpfXJldHVybiAkcn1mdW5jdGlvbiBVNih1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1nZX0pLHZ0fWZ1bmN0aW9uIFFwZSh1dCl7dmFyIEF0PS0xLHZ0PUFycmF5KHV0LnNpemUpO3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGdlKXt2dFsrK0F0XT1bZ2UsZ2VdfSksdnR9ZnVuY3Rpb24gdGRlKHV0LEF0LHZ0KXtmb3IodmFyIGdlPXZ0LTEsV2U9dXQubGVuZ3RoOysrZ2U8V2U7KWlmKHV0W2dlXT09PUF0KXJldHVybiBnZTtyZXR1cm4tMX1mdW5jdGlvbiBlZGUodXQsQXQsdnQpe2Zvcih2YXIgZ2U9dnQrMTtnZS0tOylpZih1dFtnZV09PT1BdClyZXR1cm4gZ2U7cmV0dXJuIGdlfWZ1bmN0aW9uIGR4KHV0KXtyZXR1cm4gcHgodXQpP25kZSh1dCk6SHBlKHV0KX1mdW5jdGlvbiB0dSh1dCl7cmV0dXJuIHB4KHV0KT9pZGUodXQpOlZwZSh1dCl9ZnVuY3Rpb24gYmZ0KHV0KXtmb3IodmFyIEF0PXV0Lmxlbmd0aDtBdC0tJiZLLnRlc3QodXQuY2hhckF0KEF0KSk7KTtyZXR1cm4gQXR9dmFyIHJkZT1ocShrcGUpO2Z1bmN0aW9uIG5kZSh1dCl7Zm9yKHZhciBBdD1pcS5sYXN0SW5kZXg9MDtpcS50ZXN0KHV0KTspKytBdDtyZXR1cm4gQXR9ZnVuY3Rpb24gaWRlKHV0KXtyZXR1cm4gdXQubWF0Y2goaXEpfHxbXX1mdW5jdGlvbiBvZGUodXQpe3JldHVybiB1dC5tYXRjaChFcGUpfHxbXX12YXIgYWRlPWZ1bmN0aW9uIHV0KEF0KXtBdD1BdD09bnVsbD9mbzptbS5kZWZhdWx0cyhmby5PYmplY3QoKSxBdCxtbS5waWNrKGZvLEFwZSkpO3ZhciB2dD1BdC5BcnJheSxnZT1BdC5EYXRlLFdlPUF0LkVycm9yLCRyPUF0LkZ1bmN0aW9uLGppPUF0Lk1hdGgsdm49QXQuT2JqZWN0LGdxPUF0LlJlZ0V4cCxzZGU9QXQuU3RyaW5nLEdsPUF0LlR5cGVFcnJvcixxNj12dC5wcm90b3R5cGUsbGRlPSRyLnByb3RvdHlwZSxteD12bi5wcm90b3R5cGUsRzY9QXRbIl9fY29yZS1qc19zaGFyZWRfXyJdLFc2PWxkZS50b1N0cmluZyx1bj1teC5oYXNPd25Qcm9wZXJ0eSxjZGU9MCx3ZnQ9ZnVuY3Rpb24oKXt2YXIgbT0vW14uXSskLy5leGVjKEc2JiZHNi5rZXlzJiZHNi5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIG0/IlN5bWJvbChzcmMpXzEuIittOiIifSgpLFk2PW14LnRvU3RyaW5nLHVkZT1XNi5jYWxsKHZuKSxoZGU9Zm8uXyxmZGU9Z3EoIl4iK1c2LmNhbGwodW4pLnJlcGxhY2UoY24sIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksajY9b2Z0P0F0LkJ1ZmZlcjplLGdtPUF0LlN5bWJvbCxYNj1BdC5VaW50OEFycmF5LFNmdD1qNj9qNi5hbGxvY1Vuc2FmZTplLCQ2PXhmdCh2bi5nZXRQcm90b3R5cGVPZix2biksTWZ0PXZuLmNyZWF0ZSxFZnQ9bXgucHJvcGVydHlJc0VudW1lcmFibGUsSzY9cTYuc3BsaWNlLFRmdD1nbT9nbS5pc0NvbmNhdFNwcmVhZGFibGU6ZSxFTT1nbT9nbS5pdGVyYXRvcjplLHRfPWdtP2dtLnRvU3RyaW5nVGFnOmUsWjY9ZnVuY3Rpb24oKXt0cnl7dmFyIG09b18odm4sImRlZmluZVByb3BlcnR5Iik7cmV0dXJuIG0oe30sIiIse30pLG19Y2F0Y2godil7fX0oKSxwZGU9QXQuY2xlYXJUaW1lb3V0IT09Zm8uY2xlYXJUaW1lb3V0JiZBdC5jbGVhclRpbWVvdXQsZGRlPWdlJiZnZS5ub3chPT1mby5EYXRlLm5vdyYmZ2Uubm93LG1kZT1BdC5zZXRUaW1lb3V0IT09Zm8uc2V0VGltZW91dCYmQXQuc2V0VGltZW91dCxKNj1qaS5jZWlsLFE2PWppLmZsb29yLF9xPXZuLmdldE93blByb3BlcnR5U3ltYm9scyxnZGU9ajY/ajYuaXNCdWZmZXI6ZSxDZnQ9QXQuaXNGaW5pdGUsX2RlPXE2LmpvaW4seWRlPXhmdCh2bi5rZXlzLHZuKSxYaT1qaS5tYXgscmE9amkubWluLHZkZT1nZS5ub3cseGRlPUF0LnBhcnNlSW50LEFmdD1qaS5yYW5kb20sYmRlPXE2LnJldmVyc2UseXE9b18oQXQsIkRhdGFWaWV3IiksVE09b18oQXQsIk1hcCIpLHZxPW9fKEF0LCJQcm9taXNlIiksZ3g9b18oQXQsIlNldCIpLENNPW9fKEF0LCJXZWFrTWFwIiksQU09b18odm4sImNyZWF0ZSIpLHRJPUNNJiZuZXcgQ00sX3g9e30sd2RlPWFfKHlxKSxTZGU9YV8oVE0pLE1kZT1hXyh2cSksRWRlPWFfKGd4KSxUZGU9YV8oQ00pLGVJPWdtP2dtLnByb3RvdHlwZTplLFBNPWVJP2VJLnZhbHVlT2Y6ZSxQZnQ9ZUk/ZUkudG9TdHJpbmc6ZTtmdW5jdGlvbiBHKG0pe2lmKGxpKG0pJiYhJGUobSkmJiEobSBpbnN0YW5jZW9mIGdyKSl7aWYobSBpbnN0YW5jZW9mIFdsKXJldHVybiBtO2lmKHVuLmNhbGwobSwiX193cmFwcGVkX18iKSlyZXR1cm4gSXB0KG0pfXJldHVybiBuZXcgV2wobSl9dmFyIHl4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe31yZXR1cm4gZnVuY3Rpb24odil7aWYoIXJpKHYpKXJldHVybnt9O2lmKE1mdClyZXR1cm4gTWZ0KHYpO20ucHJvdG90eXBlPXY7dmFyIFQ9bmV3IG07cmV0dXJuIG0ucHJvdG90eXBlPWUsVH19KCk7ZnVuY3Rpb24gckkoKXt9ZnVuY3Rpb24gV2wobSx2KXt0aGlzLl9fd3JhcHBlZF9fPW0sdGhpcy5fX2FjdGlvbnNfXz1bXSx0aGlzLl9fY2hhaW5fXz0hIXYsdGhpcy5fX2luZGV4X189MCx0aGlzLl9fdmFsdWVzX189ZX1HLnRlbXBsYXRlU2V0dGluZ3M9e2VzY2FwZTpQYSxldmFsdWF0ZTpobyxpbnRlcnBvbGF0ZTpJYSx2YXJpYWJsZToiIixpbXBvcnRzOntfOkd9fSxHLnByb3RvdHlwZT1ySS5wcm90b3R5cGUsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9RyxXbC5wcm90b3R5cGU9eXgockkucHJvdG90eXBlKSxXbC5wcm90b3R5cGUuY29uc3RydWN0b3I9V2w7ZnVuY3Rpb24gZ3IobSl7dGhpcy5fX3dyYXBwZWRfXz1tLHRoaXMuX19hY3Rpb25zX189W10sdGhpcy5fX2Rpcl9fPTEsdGhpcy5fX2ZpbHRlcmVkX189ITEsdGhpcy5fX2l0ZXJhdGVlc19fPVtdLHRoaXMuX190YWtlQ291bnRfXz1ydCx0aGlzLl9fdmlld3NfXz1bXX1mdW5jdGlvbiBDZGUoKXt2YXIgbT1uZXcgZ3IodGhpcy5fX3dyYXBwZWRfXyk7cmV0dXJuIG0uX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyksbS5fX2Rpcl9fPXRoaXMuX19kaXJfXyxtLl9fZmlsdGVyZWRfXz10aGlzLl9fZmlsdGVyZWRfXyxtLl9faXRlcmF0ZWVzX189cHModGhpcy5fX2l0ZXJhdGVlc19fKSxtLl9fdGFrZUNvdW50X189dGhpcy5fX3Rha2VDb3VudF9fLG0uX192aWV3c19fPXBzKHRoaXMuX192aWV3c19fKSxtfWZ1bmN0aW9uIEFkZSgpe2lmKHRoaXMuX19maWx0ZXJlZF9fKXt2YXIgbT1uZXcgZ3IodGhpcyk7bS5fX2Rpcl9fPS0xLG0uX19maWx0ZXJlZF9fPSEwfWVsc2UgbT10aGlzLmNsb25lKCksbS5fX2Rpcl9fKj0tMTtyZXR1cm4gbX1mdW5jdGlvbiBQZGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fLnZhbHVlKCksdj10aGlzLl9fZGlyX18sVD0kZShtKSxOPXY8MCxWPVQ/bS5sZW5ndGg6MCxZPVZtZSgwLFYsdGhpcy5fX3ZpZXdzX18pLEo9WS5zdGFydCxpdD1ZLmVuZCxmdD1pdC1KLER0PU4/aXQ6Si0xLE90PXRoaXMuX19pdGVyYXRlZXNfXyxWdD1PdC5sZW5ndGgsb2U9MCxUZT1yYShmdCx0aGlzLl9fdGFrZUNvdW50X18pO2lmKCFUfHwhTiYmVj09ZnQmJlRlPT1mdClyZXR1cm4gUWZ0KG0sdGhpcy5fX2FjdGlvbnNfXyk7dmFyIE5lPVtdO3Q6Zm9yKDtmdC0tJiZvZTxUZTspe0R0Kz12O2Zvcih2YXIgZXI9LTEsRGU9bVtEdF07KytlcjxWdDspe3ZhciBwcj1PdFtlcl0seXI9cHIuaXRlcmF0ZWUsWHM9cHIudHlwZSxSYT15cihEZSk7aWYoWHM9PVIpRGU9UmE7ZWxzZSBpZighUmEpe2lmKFhzPT1MKWNvbnRpbnVlIHQ7YnJlYWsgdH19TmVbb2UrK109RGV9cmV0dXJuIE5lfWdyLnByb3RvdHlwZT15eChySS5wcm90b3R5cGUpLGdyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ncjtmdW5jdGlvbiBlXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBJZGUoKXt0aGlzLl9fZGF0YV9fPUFNP0FNKG51bGwpOnt9LHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIExkZShtKXt2YXIgdj10aGlzLmhhcyhtKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bbV07cmV0dXJuIHRoaXMuc2l6ZS09dj8xOjAsdn1mdW5jdGlvbiBrZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXztpZihBTSl7dmFyIFQ9dlttXTtyZXR1cm4gVD09PWE/ZTpUfXJldHVybiB1bi5jYWxsKHYsbSk/dlttXTplfWZ1bmN0aW9uIFJkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fO3JldHVybiBBTT92W21dIT09ZTp1bi5jYWxsKHYsbSl9ZnVuY3Rpb24gTmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhtKT8wOjEsVFttXT1BTSYmdj09PWU/YTp2LHRoaXN9ZV8ucHJvdG90eXBlLmNsZWFyPUlkZSxlXy5wcm90b3R5cGUuZGVsZXRlPUxkZSxlXy5wcm90b3R5cGUuZ2V0PWtkZSxlXy5wcm90b3R5cGUuaGFzPVJkZSxlXy5wcm90b3R5cGUuc2V0PU5kZTtmdW5jdGlvbiBpcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBEZGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWZ1bmN0aW9uIE9kZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9bkkodixtKTtpZihUPDApcmV0dXJuITE7dmFyIE49di5sZW5ndGgtMTtyZXR1cm4gVD09Tj92LnBvcCgpOks2LmNhbGwodixULDEpLC0tdGhpcy5zaXplLCEwfWZ1bmN0aW9uIHpkZShtKXt2YXIgdj10aGlzLl9fZGF0YV9fLFQ9bkkodixtKTtyZXR1cm4gVDwwP2U6dltUXVsxXX1mdW5jdGlvbiBGZGUobSl7cmV0dXJuIG5JKHRoaXMuX19kYXRhX18sbSk+LTF9ZnVuY3Rpb24gQmRlKG0sdil7dmFyIFQ9dGhpcy5fX2RhdGFfXyxOPW5JKFQsbSk7cmV0dXJuIE48MD8oKyt0aGlzLnNpemUsVC5wdXNoKFttLHZdKSk6VFtOXVsxXT12LHRoaXN9aXAucHJvdG90eXBlLmNsZWFyPURkZSxpcC5wcm90b3R5cGUuZGVsZXRlPU9kZSxpcC5wcm90b3R5cGUuZ2V0PXpkZSxpcC5wcm90b3R5cGUuaGFzPUZkZSxpcC5wcm90b3R5cGUuc2V0PUJkZTtmdW5jdGlvbiBvcChtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdjxUOyl7dmFyIE49bVt2XTt0aGlzLnNldChOWzBdLE5bMV0pfX1mdW5jdGlvbiBIZGUoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBlXyxtYXA6bmV3KFRNfHxpcCksc3RyaW5nOm5ldyBlX319ZnVuY3Rpb24gVmRlKG0pe3ZhciB2PW1JKHRoaXMsbSkuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemUtPXY/MTowLHZ9ZnVuY3Rpb24gVWRlKG0pe3JldHVybiBtSSh0aGlzLG0pLmdldChtKX1mdW5jdGlvbiBxZGUobSl7cmV0dXJuIG1JKHRoaXMsbSkuaGFzKG0pfWZ1bmN0aW9uIEdkZShtLHYpe3ZhciBUPW1JKHRoaXMsbSksTj1ULnNpemU7cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplKz1ULnNpemU9PU4/MDoxLHRoaXN9b3AucHJvdG90eXBlLmNsZWFyPUhkZSxvcC5wcm90b3R5cGUuZGVsZXRlPVZkZSxvcC5wcm90b3R5cGUuZ2V0PVVkZSxvcC5wcm90b3R5cGUuaGFzPXFkZSxvcC5wcm90b3R5cGUuc2V0PUdkZTtmdW5jdGlvbiByXyhtKXt2YXIgdj0tMSxUPW09PW51bGw/MDptLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgb3A7Kyt2PFQ7KXRoaXMuYWRkKG1bdl0pfWZ1bmN0aW9uIFdkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQobSxhKSx0aGlzfWZ1bmN0aW9uIFlkZShtKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMobSl9cl8ucHJvdG90eXBlLmFkZD1yXy5wcm90b3R5cGUucHVzaD1XZGUscl8ucHJvdG90eXBlLmhhcz1ZZGU7ZnVuY3Rpb24gZXUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXz1uZXcgaXAobSk7dGhpcy5zaXplPXYuc2l6ZX1mdW5jdGlvbiBqZGUoKXt0aGlzLl9fZGF0YV9fPW5ldyBpcCx0aGlzLnNpemU9MH1mdW5jdGlvbiBYZGUobSl7dmFyIHY9dGhpcy5fX2RhdGFfXyxUPXYuZGVsZXRlKG0pO3JldHVybiB0aGlzLnNpemU9di5zaXplLFR9ZnVuY3Rpb24gJGRlKG0pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChtKX1mdW5jdGlvbiBLZGUobSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKG0pfWZ1bmN0aW9uIFpkZShtLHYpe3ZhciBUPXRoaXMuX19kYXRhX187aWYoVCBpbnN0YW5jZW9mIGlwKXt2YXIgTj1ULl9fZGF0YV9fO2lmKCFUTXx8Ti5sZW5ndGg8ci0xKXJldHVybiBOLnB1c2goW20sdl0pLHRoaXMuc2l6ZT0rK1Quc2l6ZSx0aGlzO1Q9dGhpcy5fX2RhdGFfXz1uZXcgb3AoTil9cmV0dXJuIFQuc2V0KG0sdiksdGhpcy5zaXplPVQuc2l6ZSx0aGlzfWV1LnByb3RvdHlwZS5jbGVhcj1qZGUsZXUucHJvdG90eXBlLmRlbGV0ZT1YZGUsZXUucHJvdG90eXBlLmdldD0kZGUsZXUucHJvdG90eXBlLmhhcz1LZGUsZXUucHJvdG90eXBlLnNldD1aZGU7ZnVuY3Rpb24gSWZ0KG0sdil7dmFyIFQ9JGUobSksTj0hVCYmc18obSksVj0hVCYmIU4mJmJtKG0pLFk9IVQmJiFOJiYhViYmd3gobSksSj1UfHxOfHxWfHxZLGl0PUo/cHEobS5sZW5ndGgsc2RlKTpbXSxmdD1pdC5sZW5ndGg7Zm9yKHZhciBEdCBpbiBtKSh2fHx1bi5jYWxsKG0sRHQpKSYmIShKJiYoRHQ9PSJsZW5ndGgifHxWJiYoRHQ9PSJvZmZzZXQifHxEdD09InBhcmVudCIpfHxZJiYoRHQ9PSJidWZmZXIifHxEdD09ImJ5dGVMZW5ndGgifHxEdD09ImJ5dGVPZmZzZXQiKXx8Y3AoRHQsZnQpKSkmJml0LnB1c2goRHQpO3JldHVybiBpdH1mdW5jdGlvbiBMZnQobSl7dmFyIHY9bS5sZW5ndGg7cmV0dXJuIHY/bVtJcSgwLHYtMSldOmV9ZnVuY3Rpb24gSmRlKG0sdil7cmV0dXJuIGdJKHBzKG0pLG5fKHYsMCxtLmxlbmd0aCkpfWZ1bmN0aW9uIFFkZShtKXtyZXR1cm4gZ0kocHMobSkpfWZ1bmN0aW9uIHhxKG0sdixUKXsoVCE9PWUmJiFydShtW3ZdLFQpfHxUPT09ZSYmISh2IGluIG0pKSYmYXAobSx2LFQpfWZ1bmN0aW9uIElNKG0sdixUKXt2YXIgTj1tW3ZdOyghKHVuLmNhbGwobSx2KSYmcnUoTixUKSl8fFQ9PT1lJiYhKHYgaW4gbSkpJiZhcChtLHYsVCl9ZnVuY3Rpb24gbkkobSx2KXtmb3IodmFyIFQ9bS5sZW5ndGg7VC0tOylpZihydShtW1RdWzBdLHYpKXJldHVybiBUO3JldHVybi0xfWZ1bmN0aW9uIHRtZShtLHYsVCxOKXtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7dihOLFYsVChWKSxKKX0pLE59ZnVuY3Rpb24ga2Z0KG0sdil7cmV0dXJuIG0mJmdoKHYscG8odiksbSl9ZnVuY3Rpb24gZW1lKG0sdil7cmV0dXJuIG0mJmdoKHYsbXModiksbSl9ZnVuY3Rpb24gYXAobSx2LFQpe3Y9PSJfX3Byb3RvX18iJiZaNj9aNihtLHYse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOlQsd3JpdGFibGU6ITB9KTptW3ZdPVR9ZnVuY3Rpb24gYnEobSx2KXtmb3IodmFyIFQ9LTEsTj12Lmxlbmd0aCxWPXZ0KE4pLFk9bT09bnVsbDsrK1Q8TjspVltUXT1ZP2U6ZUcobSx2W1RdKTtyZXR1cm4gVn1mdW5jdGlvbiBuXyhtLHYsVCl7cmV0dXJuIG09PT1tJiYoVCE9PWUmJihtPW08PVQ/bTpUKSx2IT09ZSYmKG09bT49dj9tOnYpKSxtfWZ1bmN0aW9uIFlsKG0sdixULE4sVixZKXt2YXIgSixpdD12JmMsZnQ9diZ1LER0PXYmaDtpZihUJiYoSj1WP1QobSxOLFYsWSk6VChtKSksSiE9PWUpcmV0dXJuIEo7aWYoIXJpKG0pKXJldHVybiBtO3ZhciBPdD0kZShtKTtpZihPdCl7aWYoSj1xbWUobSksIWl0KXJldHVybiBwcyhtLEopfWVsc2V7dmFyIFZ0PW5hKG0pLG9lPVZ0PT1ldHx8VnQ9PWR0O2lmKGJtKG0pKXJldHVybiBycHQobSxpdCk7aWYoVnQ9PXd0fHxWdD09YnR8fG9lJiYhVil7aWYoSj1mdHx8b2U/e306YnB0KG0pLCFpdClyZXR1cm4gZnQ/a21lKG0sZW1lKEosbSkpOkxtZShtLGtmdChKLG0pKX1lbHNle2lmKCFUbltWdF0pcmV0dXJuIFY/bTp7fTtKPUdtZShtLFZ0LGl0KX19WXx8KFk9bmV3IGV1KTt2YXIgVGU9WS5nZXQobSk7aWYoVGUpcmV0dXJuIFRlO1kuc2V0KG0sSiksS3B0KG0pP20uZm9yRWFjaChmdW5jdGlvbihEZSl7Si5hZGQoWWwoRGUsdixULERlLG0sWSkpfSk6WHB0KG0pJiZtLmZvckVhY2goZnVuY3Rpb24oRGUscHIpe0ouc2V0KHByLFlsKERlLHYsVCxwcixtLFkpKX0pO3ZhciBOZT1EdD9mdD9WcTpIcTpmdD9tczpwbyxlcj1PdD9lOk5lKG0pO3JldHVybiBxbChlcnx8bSxmdW5jdGlvbihEZSxwcil7ZXImJihwcj1EZSxEZT1tW3ByXSksSU0oSixwcixZbChEZSx2LFQscHIsbSxZKSl9KSxKfWZ1bmN0aW9uIHJtZShtKXt2YXIgdj1wbyhtKTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFJmdChULG0sdil9fWZ1bmN0aW9uIFJmdChtLHYsVCl7dmFyIE49VC5sZW5ndGg7aWYobT09bnVsbClyZXR1cm4hTjtmb3IobT12bihtKTtOLS07KXt2YXIgVj1UW05dLFk9dltWXSxKPW1bVl07aWYoSj09PWUmJiEoViBpbiBtKXx8IVkoSikpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gTmZ0KG0sdixUKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHpNKGZ1bmN0aW9uKCl7bS5hcHBseShlLFQpfSx2KX1mdW5jdGlvbiBMTShtLHYsVCxOKXt2YXIgVj0tMSxZPUg2LEo9ITAsaXQ9bS5sZW5ndGgsZnQ9W10sRHQ9di5sZW5ndGg7aWYoIWl0KXJldHVybiBmdDtUJiYodj1Lbih2LFdzKFQpKSksTj8oWT1zcSxKPSExKTp2Lmxlbmd0aD49ciYmKFk9TU0sSj0hMSx2PW5ldyByXyh2KSk7dDpmb3IoOysrVjxpdDspe3ZhciBPdD1tW1ZdLFZ0PVQ9PW51bGw/T3Q6VChPdCk7aWYoT3Q9Tnx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1EdDtvZS0tOylpZih2W29lXT09PVZ0KWNvbnRpbnVlIHQ7ZnQucHVzaChPdCl9ZWxzZSBZKHYsVnQsTil8fGZ0LnB1c2goT3QpfXJldHVybiBmdH12YXIgX209c3B0KG1oKSxEZnQ9c3B0KFNxLCEwKTtmdW5jdGlvbiBubWUobSx2KXt2YXIgVD0hMDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9ISF2KE4sVixZKSxUfSksVH1mdW5jdGlvbiBpSShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5sZW5ndGg7KytOPFY7KXt2YXIgWT1tW05dLEo9dihZKTtpZihKIT1udWxsJiYoaXQ9PT1lP0o9PT1KJiYhanMoSik6VChKLGl0KSkpdmFyIGl0PUosZnQ9WX1yZXR1cm4gZnR9ZnVuY3Rpb24gaW1lKG0sdixULE4pe3ZhciBWPW0ubGVuZ3RoO2ZvcihUPVFlKFQpLFQ8MCYmKFQ9LVQ+Vj8wOlYrVCksTj1OPT09ZXx8Tj5WP1Y6UWUoTiksTjwwJiYoTis9ViksTj1UPk4/MDpKcHQoTik7VDxOOyltW1QrK109djtyZXR1cm4gbX1mdW5jdGlvbiBPZnQobSx2KXt2YXIgVD1bXTtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7dihOLFYsWSkmJlQucHVzaChOKX0pLFR9ZnVuY3Rpb24gUm8obSx2LFQsTixWKXt2YXIgWT0tMSxKPW0ubGVuZ3RoO2ZvcihUfHwoVD1ZbWUpLFZ8fChWPVtdKTsrK1k8Sjspe3ZhciBpdD1tW1ldO3Y+MCYmVChpdCk/dj4xP1JvKGl0LHYtMSxULE4sVik6cG0oVixpdCk6Tnx8KFZbVi5sZW5ndGhdPWl0KX1yZXR1cm4gVn12YXIgd3E9bHB0KCksemZ0PWxwdCghMCk7ZnVuY3Rpb24gbWgobSx2KXtyZXR1cm4gbSYmd3EobSx2LHBvKX1mdW5jdGlvbiBTcShtLHYpe3JldHVybiBtJiZ6ZnQobSx2LHBvKX1mdW5jdGlvbiBvSShtLHYpe3JldHVybiBmbSh2LGZ1bmN0aW9uKFQpe3JldHVybiB1cChtW1RdKX0pfWZ1bmN0aW9uIGlfKG0sdil7dj12bSh2LG0pO2Zvcih2YXIgVD0wLE49di5sZW5ndGg7bSE9bnVsbCYmVDxOOyltPW1bX2godltUKytdKV07cmV0dXJuIFQmJlQ9PU4/bTplfWZ1bmN0aW9uIEZmdChtLHYsVCl7dmFyIE49dihtKTtyZXR1cm4gJGUobSk/TjpwbShOLFQobSkpfWZ1bmN0aW9uIExhKG0pe3JldHVybiBtPT1udWxsP209PT1lP3R0Omh0OnRfJiZ0XyBpbiB2bihtKT9IbWUobSk6UW1lKG0pfWZ1bmN0aW9uIE1xKG0sdil7cmV0dXJuIG0+dn1mdW5jdGlvbiBvbWUobSx2KXtyZXR1cm4gbSE9bnVsbCYmdW4uY2FsbChtLHYpfWZ1bmN0aW9uIGFtZShtLHYpe3JldHVybiBtIT1udWxsJiZ2IGluIHZuKG0pfWZ1bmN0aW9uIHNtZShtLHYsVCl7cmV0dXJuIG0+PXJhKHYsVCkmJm08WGkodixUKX1mdW5jdGlvbiBFcShtLHYsVCl7Zm9yKHZhciBOPVQ/c3E6SDYsVj1tWzBdLmxlbmd0aCxZPW0ubGVuZ3RoLEo9WSxpdD12dChZKSxmdD0xLzAsRHQ9W107Si0tOyl7dmFyIE90PW1bSl07SiYmdiYmKE90PUtuKE90LFdzKHYpKSksZnQ9cmEoT3QubGVuZ3RoLGZ0KSxpdFtKXT0hVCYmKHZ8fFY+PTEyMCYmT3QubGVuZ3RoPj0xMjApP25ldyByXyhKJiZPdCk6ZX1PdD1tWzBdO3ZhciBWdD0tMSxvZT1pdFswXTt0OmZvcig7KytWdDxWJiZEdC5sZW5ndGg8ZnQ7KXt2YXIgVGU9T3RbVnRdLE5lPXY/dihUZSk6VGU7aWYoVGU9VHx8VGUhPT0wP1RlOjAsIShvZT9NTShvZSxOZSk6TihEdCxOZSxUKSkpe2ZvcihKPVk7LS1KOyl7dmFyIGVyPWl0W0pdO2lmKCEoZXI/TU0oZXIsTmUpOk4obVtKXSxOZSxUKSkpY29udGludWUgdH1vZSYmb2UucHVzaChOZSksRHQucHVzaChUZSl9fXJldHVybiBEdH1mdW5jdGlvbiBsbWUobSx2LFQsTil7cmV0dXJuIG1oKG0sZnVuY3Rpb24oVixZLEope3YoTixUKFYpLFksSil9KSxOfWZ1bmN0aW9uIGtNKG0sdixUKXt2PXZtKHYsbSksbT1FcHQobSx2KTt2YXIgTj1tPT1udWxsP206bVtfaChYbCh2KSldO3JldHVybiBOPT1udWxsP2U6R3MoTixtLFQpfWZ1bmN0aW9uIEJmdChtKXtyZXR1cm4gbGkobSkmJkxhKG0pPT1idH1mdW5jdGlvbiBjbWUobSl7cmV0dXJuIGxpKG0pJiZMYShtKT09JHR9ZnVuY3Rpb24gdW1lKG0pe3JldHVybiBsaShtKSYmTGEobSk9PV90fWZ1bmN0aW9uIFJNKG0sdixULE4sVil7cmV0dXJuIG09PT12PyEwOm09PW51bGx8fHY9PW51bGx8fCFsaShtKSYmIWxpKHYpP20hPT1tJiZ2IT09djpobWUobSx2LFQsTixSTSxWKX1mdW5jdGlvbiBobWUobSx2LFQsTixWLFkpe3ZhciBKPSRlKG0pLGl0PSRlKHYpLGZ0PUo/TXQ6bmEobSksRHQ9aXQ/TXQ6bmEodik7ZnQ9ZnQ9PWJ0P3d0OmZ0LER0PUR0PT1idD93dDpEdDt2YXIgT3Q9ZnQ9PXd0LFZ0PUR0PT13dCxvZT1mdD09RHQ7aWYob2UmJmJtKG0pKXtpZighYm0odikpcmV0dXJuITE7Sj0hMCxPdD0hMX1pZihvZSYmIU90KXJldHVybiBZfHwoWT1uZXcgZXUpLEp8fHd4KG0pP3lwdChtLHYsVCxOLFYsWSk6Rm1lKG0sdixmdCxULE4sVixZKTtpZighKFQmZikpe3ZhciBUZT1PdCYmdW4uY2FsbChtLCJfX3dyYXBwZWRfXyIpLE5lPVZ0JiZ1bi5jYWxsKHYsIl9fd3JhcHBlZF9fIik7aWYoVGV8fE5lKXt2YXIgZXI9VGU/bS52YWx1ZSgpOm0sRGU9TmU/di52YWx1ZSgpOnY7cmV0dXJuIFl8fChZPW5ldyBldSksVihlcixEZSxULE4sWSl9fXJldHVybiBvZT8oWXx8KFk9bmV3IGV1KSxCbWUobSx2LFQsTixWLFkpKTohMX1mdW5jdGlvbiBmbWUobSl7cmV0dXJuIGxpKG0pJiZuYShtKT09cX1mdW5jdGlvbiBUcShtLHYsVCxOKXt2YXIgVj1ULmxlbmd0aCxZPVYsSj0hTjtpZihtPT1udWxsKXJldHVybiFZO2ZvcihtPXZuKG0pO1YtLTspe3ZhciBpdD1UW1ZdO2lmKEomJml0WzJdP2l0WzFdIT09bVtpdFswXV06IShpdFswXWluIG0pKXJldHVybiExfWZvcig7KytWPFk7KXtpdD1UW1ZdO3ZhciBmdD1pdFswXSxEdD1tW2Z0XSxPdD1pdFsxXTtpZihKJiZpdFsyXSl7aWYoRHQ9PT1lJiYhKGZ0IGluIG0pKXJldHVybiExfWVsc2V7dmFyIFZ0PW5ldyBldTtpZihOKXZhciBvZT1OKER0LE90LGZ0LG0sdixWdCk7aWYoIShvZT09PWU/Uk0oT3QsRHQsZnxwLE4sVnQpOm9lKSlyZXR1cm4hMX19cmV0dXJuITB9ZnVuY3Rpb24gSGZ0KG0pe2lmKCFyaShtKXx8WG1lKG0pKXJldHVybiExO3ZhciB2PXVwKG0pP2ZkZTpQcjtyZXR1cm4gdi50ZXN0KGFfKG0pKX1mdW5jdGlvbiBwbWUobSl7cmV0dXJuIGxpKG0pJiZMYShtKT09ZWV9ZnVuY3Rpb24gZG1lKG0pe3JldHVybiBsaShtKSYmbmEobSk9PUxlfWZ1bmN0aW9uIG1tZShtKXtyZXR1cm4gbGkobSkmJndJKG0ubGVuZ3RoKSYmISFSbltMYShtKV19ZnVuY3Rpb24gVmZ0KG0pe3JldHVybiB0eXBlb2YgbT09ImZ1bmN0aW9uIj9tOm09PW51bGw/Z3M6dHlwZW9mIG09PSJvYmplY3QiPyRlKG0pP0dmdChtWzBdLG1bMV0pOnFmdChtKTpjZHQobSl9ZnVuY3Rpb24gQ3EobSl7aWYoIU9NKG0pKXJldHVybiB5ZGUobSk7dmFyIHY9W107Zm9yKHZhciBUIGluIHZuKG0pKXVuLmNhbGwobSxUKSYmVCE9ImNvbnN0cnVjdG9yIiYmdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIGdtZShtKXtpZighcmkobSkpcmV0dXJuIEptZShtKTt2YXIgdj1PTShtKSxUPVtdO2Zvcih2YXIgTiBpbiBtKU49PSJjb25zdHJ1Y3RvciImJih2fHwhdW4uY2FsbChtLE4pKXx8VC5wdXNoKE4pO3JldHVybiBUfWZ1bmN0aW9uIEFxKG0sdil7cmV0dXJuIG08dn1mdW5jdGlvbiBVZnQobSx2KXt2YXIgVD0tMSxOPWRzKG0pP3Z0KG0ubGVuZ3RoKTpbXTtyZXR1cm4gX20obSxmdW5jdGlvbihWLFksSil7TlsrK1RdPXYoVixZLEopfSksTn1mdW5jdGlvbiBxZnQobSl7dmFyIHY9cXEobSk7cmV0dXJuIHYubGVuZ3RoPT0xJiZ2WzBdWzJdP1NwdCh2WzBdWzBdLHZbMF1bMV0pOmZ1bmN0aW9uKFQpe3JldHVybiBUPT09bXx8VHEoVCxtLHYpfX1mdW5jdGlvbiBHZnQobSx2KXtyZXR1cm4gV3EobSkmJndwdCh2KT9TcHQoX2gobSksdik6ZnVuY3Rpb24oVCl7dmFyIE49ZUcoVCxtKTtyZXR1cm4gTj09PWUmJk49PT12P3JHKFQsbSk6Uk0odixOLGZ8cCl9fWZ1bmN0aW9uIGFJKG0sdixULE4sVil7bSE9PXYmJndxKHYsZnVuY3Rpb24oWSxKKXtpZihWfHwoVj1uZXcgZXUpLHJpKFkpKV9tZShtLHYsSixULGFJLE4sVik7ZWxzZXt2YXIgaXQ9Tj9OKGpxKG0sSiksWSxKKyIiLG0sdixWKTplO2l0PT09ZSYmKGl0PVkpLHhxKG0sSixpdCl9fSxtcyl9ZnVuY3Rpb24gX21lKG0sdixULE4sVixZLEope3ZhciBpdD1qcShtLFQpLGZ0PWpxKHYsVCksRHQ9Si5nZXQoZnQpO2lmKER0KXt4cShtLFQsRHQpO3JldHVybn12YXIgT3Q9WT9ZKGl0LGZ0LFQrIiIsbSx2LEopOmUsVnQ9T3Q9PT1lO2lmKFZ0KXt2YXIgb2U9JGUoZnQpLFRlPSFvZSYmYm0oZnQpLE5lPSFvZSYmIVRlJiZ3eChmdCk7T3Q9ZnQsb2V8fFRlfHxOZT8kZShpdCk/T3Q9aXQ6YmkoaXQpP090PXBzKGl0KTpUZT8oVnQ9ITEsT3Q9cnB0KGZ0LCEwKSk6TmU/KFZ0PSExLE90PW5wdChmdCwhMCkpOk90PVtdOkZNKGZ0KXx8c18oZnQpPyhPdD1pdCxzXyhpdCk/T3Q9UXB0KGl0KTooIXJpKGl0KXx8dXAoaXQpKSYmKE90PWJwdChmdCkpKTpWdD0hMX1WdCYmKEouc2V0KGZ0LE90KSxWKE90LGZ0LE4sWSxKKSxKLmRlbGV0ZShmdCkpLHhxKG0sVCxPdCl9ZnVuY3Rpb24gV2Z0KG0sdil7dmFyIFQ9bS5sZW5ndGg7aWYoISFUKXJldHVybiB2Kz12PDA/VDowLGNwKHYsVCk/bVt2XTplfWZ1bmN0aW9uIFlmdChtLHYsVCl7di5sZW5ndGg/dj1Lbih2LGZ1bmN0aW9uKFkpe3JldHVybiAkZShZKT9mdW5jdGlvbihKKXtyZXR1cm4gaV8oSixZLmxlbmd0aD09PTE/WVswXTpZKX06WX0pOnY9W2dzXTt2YXIgTj0tMTt2PUtuKHYsV3Moa2UoKSkpO3ZhciBWPVVmdChtLGZ1bmN0aW9uKFksSixpdCl7dmFyIGZ0PUtuKHYsZnVuY3Rpb24oRHQpe3JldHVybiBEdChZKX0pO3JldHVybntjcml0ZXJpYTpmdCxpbmRleDorK04sdmFsdWU6WX19KTtyZXR1cm4gR3BlKFYsZnVuY3Rpb24oWSxKKXtyZXR1cm4gSW1lKFksSixUKX0pfWZ1bmN0aW9uIHltZShtLHYpe3JldHVybiBqZnQobSx2LGZ1bmN0aW9uKFQsTil7cmV0dXJuIHJHKG0sTil9KX1mdW5jdGlvbiBqZnQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9e307KytOPFY7KXt2YXIgSj12W05dLGl0PWlfKG0sSik7VChpdCxKKSYmTk0oWSx2bShKLG0pLGl0KX1yZXR1cm4gWX1mdW5jdGlvbiB2bWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBpXyh2LG0pfX1mdW5jdGlvbiBQcShtLHYsVCxOKXt2YXIgVj1OP3FwZTpmeCxZPS0xLEo9di5sZW5ndGgsaXQ9bTtmb3IobT09PXYmJih2PXBzKHYpKSxUJiYoaXQ9S24obSxXcyhUKSkpOysrWTxKOylmb3IodmFyIGZ0PTAsRHQ9dltZXSxPdD1UP1QoRHQpOkR0OyhmdD1WKGl0LE90LGZ0LE4pKT4tMTspaXQhPT1tJiZLNi5jYWxsKGl0LGZ0LDEpLEs2LmNhbGwobSxmdCwxKTtyZXR1cm4gbX1mdW5jdGlvbiBYZnQobSx2KXtmb3IodmFyIFQ9bT92Lmxlbmd0aDowLE49VC0xO1QtLTspe3ZhciBWPXZbVF07aWYoVD09Tnx8ViE9PVkpe3ZhciBZPVY7Y3AoVik/SzYuY2FsbChtLFYsMSk6UnEobSxWKX19cmV0dXJuIG19ZnVuY3Rpb24gSXEobSx2KXtyZXR1cm4gbStRNihBZnQoKSoodi1tKzEpKX1mdW5jdGlvbiB4bWUobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9WGkoSjYoKHYtbSkvKFR8fDEpKSwwKSxKPXZ0KFkpO1ktLTspSltOP1k6KytWXT1tLG0rPVQ7cmV0dXJuIEp9ZnVuY3Rpb24gTHEobSx2KXt2YXIgVD0iIjtpZighbXx8djwxfHx2PlUpcmV0dXJuIFQ7ZG8gdiUyJiYoVCs9bSksdj1RNih2LzIpLHYmJihtKz1tKTt3aGlsZSh2KTtyZXR1cm4gVH1mdW5jdGlvbiBucihtLHYpe3JldHVybiBYcShNcHQobSx2LGdzKSxtKyIiKX1mdW5jdGlvbiBibWUobSl7cmV0dXJuIExmdChTeChtKSl9ZnVuY3Rpb24gd21lKG0sdil7dmFyIFQ9U3gobSk7cmV0dXJuIGdJKFQsbl8odiwwLFQubGVuZ3RoKSl9ZnVuY3Rpb24gTk0obSx2LFQsTil7aWYoIXJpKG0pKXJldHVybiBtO3Y9dm0odixtKTtmb3IodmFyIFY9LTEsWT12Lmxlbmd0aCxKPVktMSxpdD1tO2l0IT1udWxsJiYrK1Y8WTspe3ZhciBmdD1faCh2W1ZdKSxEdD1UO2lmKGZ0PT09Il9fcHJvdG9fXyJ8fGZ0PT09ImNvbnN0cnVjdG9yInx8ZnQ9PT0icHJvdG90eXBlIilyZXR1cm4gbTtpZihWIT1KKXt2YXIgT3Q9aXRbZnRdO0R0PU4/TihPdCxmdCxpdCk6ZSxEdD09PWUmJihEdD1yaShPdCk/T3Q6Y3AodltWKzFdKT9bXTp7fSl9SU0oaXQsZnQsRHQpLGl0PWl0W2Z0XX1yZXR1cm4gbX12YXIgJGZ0PXRJP2Z1bmN0aW9uKG0sdil7cmV0dXJuIHRJLnNldChtLHYpLG19OmdzLFNtZT1aNj9mdW5jdGlvbihtLHYpe3JldHVybiBaNihtLCJ0b1N0cmluZyIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOmlHKHYpLHdyaXRhYmxlOiEwfSl9OmdzO2Z1bmN0aW9uIE1tZShtKXtyZXR1cm4gZ0koU3gobSkpfWZ1bmN0aW9uIGpsKG0sdixUKXt2YXIgTj0tMSxWPW0ubGVuZ3RoO3Y8MCYmKHY9LXY+Vj8wOlYrdiksVD1UPlY/VjpULFQ8MCYmKFQrPVYpLFY9dj5UPzA6VC12Pj4+MCx2Pj4+PTA7Zm9yKHZhciBZPXZ0KFYpOysrTjxWOylZW05dPW1bTit2XTtyZXR1cm4gWX1mdW5jdGlvbiBFbWUobSx2KXt2YXIgVDtyZXR1cm4gX20obSxmdW5jdGlvbihOLFYsWSl7cmV0dXJuIFQ9dihOLFYsWSksIVR9KSwhIVR9ZnVuY3Rpb24gc0kobSx2LFQpe3ZhciBOPTAsVj1tPT1udWxsP046bS5sZW5ndGg7aWYodHlwZW9mIHY9PSJudW1iZXIiJiZ2PT09diYmVjw9c3Qpe2Zvcig7TjxWOyl7dmFyIFk9TitWPj4+MSxKPW1bWV07SiE9PW51bGwmJiFqcyhKKSYmKFQ/Sjw9djpKPHYpP049WSsxOlY9WX1yZXR1cm4gVn1yZXR1cm4ga3EobSx2LGdzLFQpfWZ1bmN0aW9uIGtxKG0sdixULE4pe3ZhciBWPTAsWT1tPT1udWxsPzA6bS5sZW5ndGg7aWYoWT09PTApcmV0dXJuIDA7dj1UKHYpO2Zvcih2YXIgSj12IT09dixpdD12PT09bnVsbCxmdD1qcyh2KSxEdD12PT09ZTtWPFk7KXt2YXIgT3Q9UTYoKFYrWSkvMiksVnQ9VChtW090XSksb2U9VnQhPT1lLFRlPVZ0PT09bnVsbCxOZT1WdD09PVZ0LGVyPWpzKFZ0KTtpZihKKXZhciBEZT1OfHxOZTtlbHNlIER0P0RlPU5lJiYoTnx8b2UpOml0P0RlPU5lJiZvZSYmKE58fCFUZSk6ZnQ/RGU9TmUmJm9lJiYhVGUmJihOfHwhZXIpOlRlfHxlcj9EZT0hMTpEZT1OP1Z0PD12OlZ0PHY7RGU/Vj1PdCsxOlk9T3R9cmV0dXJuIHJhKFksb3QpfWZ1bmN0aW9uIEtmdChtLHYpe2Zvcih2YXIgVD0tMSxOPW0ubGVuZ3RoLFY9MCxZPVtdOysrVDxOOyl7dmFyIEo9bVtUXSxpdD12P3YoSik6SjtpZighVHx8IXJ1KGl0LGZ0KSl7dmFyIGZ0PWl0O1lbVisrXT1KPT09MD8wOkp9fXJldHVybiBZfWZ1bmN0aW9uIFpmdChtKXtyZXR1cm4gdHlwZW9mIG09PSJudW1iZXIiP206anMobSk/WjorbX1mdW5jdGlvbiBZcyhtKXtpZih0eXBlb2YgbT09InN0cmluZyIpcmV0dXJuIG07aWYoJGUobSkpcmV0dXJuIEtuKG0sWXMpKyIiO2lmKGpzKG0pKXJldHVybiBQZnQ/UGZ0LmNhbGwobSk6IiI7dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiB5bShtLHYsVCl7dmFyIE49LTEsVj1INixZPW0ubGVuZ3RoLEo9ITAsaXQ9W10sZnQ9aXQ7aWYoVClKPSExLFY9c3E7ZWxzZSBpZihZPj1yKXt2YXIgRHQ9dj9udWxsOk9tZShtKTtpZihEdClyZXR1cm4gVTYoRHQpO0o9ITEsVj1NTSxmdD1uZXcgcl99ZWxzZSBmdD12P1tdOml0O3Q6Zm9yKDsrK048WTspe3ZhciBPdD1tW05dLFZ0PXY/dihPdCk6T3Q7aWYoT3Q9VHx8T3QhPT0wP090OjAsSiYmVnQ9PT1WdCl7Zm9yKHZhciBvZT1mdC5sZW5ndGg7b2UtLTspaWYoZnRbb2VdPT09VnQpY29udGludWUgdDt2JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KX1lbHNlIFYoZnQsVnQsVCl8fChmdCE9PWl0JiZmdC5wdXNoKFZ0KSxpdC5wdXNoKE90KSl9cmV0dXJuIGl0fWZ1bmN0aW9uIFJxKG0sdil7cmV0dXJuIHY9dm0odixtKSxtPUVwdChtLHYpLG09PW51bGx8fGRlbGV0ZSBtW19oKFhsKHYpKV19ZnVuY3Rpb24gSmZ0KG0sdixULE4pe3JldHVybiBOTShtLHYsVChpXyhtLHYpKSxOKX1mdW5jdGlvbiBsSShtLHYsVCxOKXtmb3IodmFyIFY9bS5sZW5ndGgsWT1OP1Y6LTE7KE4/WS0tOisrWTxWKSYmdihtW1ldLFksbSk7KTtyZXR1cm4gVD9qbChtLE4/MDpZLE4/WSsxOlYpOmpsKG0sTj9ZKzE6MCxOP1Y6WSl9ZnVuY3Rpb24gUWZ0KG0sdil7dmFyIFQ9bTtyZXR1cm4gVCBpbnN0YW5jZW9mIGdyJiYoVD1ULnZhbHVlKCkpLGxxKHYsZnVuY3Rpb24oTixWKXtyZXR1cm4gVi5mdW5jLmFwcGx5KFYudGhpc0FyZyxwbShbTl0sVi5hcmdzKSl9LFQpfWZ1bmN0aW9uIE5xKG0sdixUKXt2YXIgTj1tLmxlbmd0aDtpZihOPDIpcmV0dXJuIE4/eW0obVswXSk6W107Zm9yKHZhciBWPS0xLFk9dnQoTik7KytWPE47KWZvcih2YXIgSj1tW1ZdLGl0PS0xOysraXQ8TjspaXQhPVYmJihZW1ZdPUxNKFlbVl18fEosbVtpdF0sdixUKSk7cmV0dXJuIHltKFJvKFksMSksdixUKX1mdW5jdGlvbiB0cHQobSx2LFQpe2Zvcih2YXIgTj0tMSxWPW0ubGVuZ3RoLFk9di5sZW5ndGgsSj17fTsrK048Vjspe3ZhciBpdD1OPFk/dltOXTplO1QoSixtW05dLGl0KX1yZXR1cm4gSn1mdW5jdGlvbiBEcShtKXtyZXR1cm4gYmkobSk/bTpbXX1mdW5jdGlvbiBPcShtKXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bTpnc31mdW5jdGlvbiB2bShtLHYpe3JldHVybiAkZShtKT9tOldxKG0sdik/W21dOlBwdChvbihtKSl9dmFyIFRtZT1ucjtmdW5jdGlvbiB4bShtLHYsVCl7dmFyIE49bS5sZW5ndGg7cmV0dXJuIFQ9VD09PWU/TjpULCF2JiZUPj1OP206amwobSx2LFQpfXZhciBlcHQ9cGRlfHxmdW5jdGlvbihtKXtyZXR1cm4gZm8uY2xlYXJUaW1lb3V0KG0pfTtmdW5jdGlvbiBycHQobSx2KXtpZih2KXJldHVybiBtLnNsaWNlKCk7dmFyIFQ9bS5sZW5ndGgsTj1TZnQ/U2Z0KFQpOm5ldyBtLmNvbnN0cnVjdG9yKFQpO3JldHVybiBtLmNvcHkoTiksTn1mdW5jdGlvbiB6cShtKXt2YXIgdj1uZXcgbS5jb25zdHJ1Y3RvcihtLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWDYodikuc2V0KG5ldyBYNihtKSksdn1mdW5jdGlvbiBDbWUobSx2KXt2YXIgVD12P3pxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5ieXRlTGVuZ3RoKX1mdW5jdGlvbiBBbWUobSl7dmFyIHY9bmV3IG0uY29uc3RydWN0b3IobS5zb3VyY2UsS2UuZXhlYyhtKSk7cmV0dXJuIHYubGFzdEluZGV4PW0ubGFzdEluZGV4LHZ9ZnVuY3Rpb24gUG1lKG0pe3JldHVybiBQTT92bihQTS5jYWxsKG0pKTp7fX1mdW5jdGlvbiBucHQobSx2KXt2YXIgVD12P3pxKG0uYnVmZmVyKTptLmJ1ZmZlcjtyZXR1cm4gbmV3IG0uY29uc3RydWN0b3IoVCxtLmJ5dGVPZmZzZXQsbS5sZW5ndGgpfWZ1bmN0aW9uIGlwdChtLHYpe2lmKG0hPT12KXt2YXIgVD1tIT09ZSxOPW09PT1udWxsLFY9bT09PW0sWT1qcyhtKSxKPXYhPT1lLGl0PXY9PT1udWxsLGZ0PXY9PT12LER0PWpzKHYpO2lmKCFpdCYmIUR0JiYhWSYmbT52fHxZJiZKJiZmdCYmIWl0JiYhRHR8fE4mJkomJmZ0fHwhVCYmZnR8fCFWKXJldHVybiAxO2lmKCFOJiYhWSYmIUR0JiZtPHZ8fER0JiZUJiZWJiYhTiYmIVl8fGl0JiZUJiZWfHwhSiYmVnx8IWZ0KXJldHVybi0xfXJldHVybiAwfWZ1bmN0aW9uIEltZShtLHYsVCl7Zm9yKHZhciBOPS0xLFY9bS5jcml0ZXJpYSxZPXYuY3JpdGVyaWEsSj1WLmxlbmd0aCxpdD1ULmxlbmd0aDsrK048Sjspe3ZhciBmdD1pcHQoVltOXSxZW05dKTtpZihmdCl7aWYoTj49aXQpcmV0dXJuIGZ0O3ZhciBEdD1UW05dO3JldHVybiBmdCooRHQ9PSJkZXNjIj8tMToxKX19cmV0dXJuIG0uaW5kZXgtdi5pbmRleH1mdW5jdGlvbiBvcHQobSx2LFQsTil7Zm9yKHZhciBWPS0xLFk9bS5sZW5ndGgsSj1ULmxlbmd0aCxpdD0tMSxmdD12Lmxlbmd0aCxEdD1YaShZLUosMCksT3Q9dnQoZnQrRHQpLFZ0PSFOOysraXQ8ZnQ7KU90W2l0XT12W2l0XTtmb3IoOysrVjxKOykoVnR8fFY8WSkmJihPdFtUW1ZdXT1tW1ZdKTtmb3IoO0R0LS07KU90W2l0KytdPW1bVisrXTtyZXR1cm4gT3R9ZnVuY3Rpb24gYXB0KG0sdixULE4pe2Zvcih2YXIgVj0tMSxZPW0ubGVuZ3RoLEo9LTEsaXQ9VC5sZW5ndGgsZnQ9LTEsRHQ9di5sZW5ndGgsT3Q9WGkoWS1pdCwwKSxWdD12dChPdCtEdCksb2U9IU47KytWPE90OylWdFtWXT1tW1ZdO2Zvcih2YXIgVGU9VjsrK2Z0PER0OylWdFtUZStmdF09dltmdF07Zm9yKDsrK0o8aXQ7KShvZXx8VjxZKSYmKFZ0W1RlK1RbSl1dPW1bVisrXSk7cmV0dXJuIFZ0fWZ1bmN0aW9uIHBzKG0sdil7dmFyIFQ9LTEsTj1tLmxlbmd0aDtmb3Iodnx8KHY9dnQoTikpOysrVDxOOyl2W1RdPW1bVF07cmV0dXJuIHZ9ZnVuY3Rpb24gZ2gobSx2LFQsTil7dmFyIFY9IVQ7VHx8KFQ9e30pO2Zvcih2YXIgWT0tMSxKPXYubGVuZ3RoOysrWTxKOyl7dmFyIGl0PXZbWV0sZnQ9Tj9OKFRbaXRdLG1baXRdLGl0LFQsbSk6ZTtmdD09PWUmJihmdD1tW2l0XSksVj9hcChULGl0LGZ0KTpJTShULGl0LGZ0KX1yZXR1cm4gVH1mdW5jdGlvbiBMbWUobSx2KXtyZXR1cm4gZ2gobSxHcShtKSx2KX1mdW5jdGlvbiBrbWUobSx2KXtyZXR1cm4gZ2gobSx2cHQobSksdil9ZnVuY3Rpb24gY0kobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVj0kZShUKT96cGU6dG1lLFk9dj92KCk6e307cmV0dXJuIFYoVCxtLGtlKE4sMiksWSl9fWZ1bmN0aW9uIHZ4KG0pe3JldHVybiBucihmdW5jdGlvbih2LFQpe3ZhciBOPS0xLFY9VC5sZW5ndGgsWT1WPjE/VFtWLTFdOmUsSj1WPjI/VFsyXTplO2ZvcihZPW0ubGVuZ3RoPjMmJnR5cGVvZiBZPT0iZnVuY3Rpb24iPyhWLS0sWSk6ZSxKJiZrYShUWzBdLFRbMV0sSikmJihZPVY8Mz9lOlksVj0xKSx2PXZuKHYpOysrTjxWOyl7dmFyIGl0PVRbTl07aXQmJm0odixpdCxOLFkpfXJldHVybiB2fSl9ZnVuY3Rpb24gc3B0KG0sdil7cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD09bnVsbClyZXR1cm4gVDtpZighZHMoVCkpcmV0dXJuIG0oVCxOKTtmb3IodmFyIFY9VC5sZW5ndGgsWT12P1Y6LTEsSj12bihUKTsodj9ZLS06KytZPFYpJiZOKEpbWV0sWSxKKSE9PSExOyk7cmV0dXJuIFR9fWZ1bmN0aW9uIGxwdChtKXtyZXR1cm4gZnVuY3Rpb24odixULE4pe2Zvcih2YXIgVj0tMSxZPXZuKHYpLEo9Tih2KSxpdD1KLmxlbmd0aDtpdC0tOyl7dmFyIGZ0PUpbbT9pdDorK1ZdO2lmKFQoWVtmdF0sZnQsWSk9PT0hMSlicmVha31yZXR1cm4gdn19ZnVuY3Rpb24gUm1lKG0sdixUKXt2YXIgTj12JmQsVj1ETShtKTtmdW5jdGlvbiBZKCl7dmFyIEo9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgWT9WOm07cmV0dXJuIEouYXBwbHkoTj9UOnRoaXMsYXJndW1lbnRzKX1yZXR1cm4gWX1mdW5jdGlvbiBjcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3Y9b24odik7dmFyIFQ9cHgodik/dHUodik6ZSxOPVQ/VFswXTp2LmNoYXJBdCgwKSxWPVQ/eG0oVCwxKS5qb2luKCIiKTp2LnNsaWNlKDEpO3JldHVybiBOW21dKCkrVn19ZnVuY3Rpb24geHgobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBscShzZHQoYWR0KHYpLnJlcGxhY2UoU3BlLCIiKSksbSwiIil9fWZ1bmN0aW9uIERNKG0pe3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWFyZ3VtZW50cztzd2l0Y2godi5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG07Y2FzZSAxOnJldHVybiBuZXcgbSh2WzBdKTtjYXNlIDI6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSk7Y2FzZSA0OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdKTtjYXNlIDU6cmV0dXJuIG5ldyBtKHZbMF0sdlsxXSx2WzJdLHZbM10sdls0XSk7Y2FzZSA2OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSk7Y2FzZSA3OnJldHVybiBuZXcgbSh2WzBdLHZbMV0sdlsyXSx2WzNdLHZbNF0sdls1XSx2WzZdKX12YXIgVD15eChtLnByb3RvdHlwZSksTj1tLmFwcGx5KFQsdik7cmV0dXJuIHJpKE4pP046VH19ZnVuY3Rpb24gTm1lKG0sdixUKXt2YXIgTj1ETShtKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsSj12dChZKSxpdD1ZLGZ0PWJ4KFYpO2l0LS07KUpbaXRdPWFyZ3VtZW50c1tpdF07dmFyIER0PVk8MyYmSlswXSE9PWZ0JiZKW1ktMV0hPT1mdD9bXTpkbShKLGZ0KTtpZihZLT1EdC5sZW5ndGgsWTxUKXJldHVybiBkcHQobSx2LHVJLFYucGxhY2Vob2xkZXIsZSxKLER0LGUsZSxULVkpO3ZhciBPdD10aGlzJiZ0aGlzIT09Zm8mJnRoaXMgaW5zdGFuY2VvZiBWP046bTtyZXR1cm4gR3MoT3QsdGhpcyxKKX1yZXR1cm4gVn1mdW5jdGlvbiB1cHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYsVCxOKXt2YXIgVj12bih2KTtpZighZHModikpe3ZhciBZPWtlKFQsMyk7dj1wbyh2KSxUPWZ1bmN0aW9uKGl0KXtyZXR1cm4gWShWW2l0XSxpdCxWKX19dmFyIEo9bSh2LFQsTik7cmV0dXJuIEo+LTE/VltZP3ZbSl06Sl06ZX19ZnVuY3Rpb24gaHB0KG0pe3JldHVybiBscChmdW5jdGlvbih2KXt2YXIgVD12Lmxlbmd0aCxOPVQsVj1XbC5wcm90b3R5cGUudGhydTtmb3IobSYmdi5yZXZlcnNlKCk7Ti0tOyl7dmFyIFk9dltOXTtpZih0eXBlb2YgWSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7aWYoViYmIUomJmRJKFkpPT0id3JhcHBlciIpdmFyIEo9bmV3IFdsKFtdLCEwKX1mb3IoTj1KP046VDsrK048VDspe1k9dltOXTt2YXIgaXQ9ZEkoWSksZnQ9aXQ9PSJ3cmFwcGVyIj9VcShZKTplO2Z0JiZZcShmdFswXSkmJmZ0WzFdPT0oQ3x5fGJ8UCkmJiFmdFs0XS5sZW5ndGgmJmZ0WzldPT0xP0o9SltkSShmdFswXSldLmFwcGx5KEosZnRbM10pOko9WS5sZW5ndGg9PTEmJllxKFkpP0pbaXRdKCk6Si50aHJ1KFkpfXJldHVybiBmdW5jdGlvbigpe3ZhciBEdD1hcmd1bWVudHMsT3Q9RHRbMF07aWYoSiYmRHQubGVuZ3RoPT0xJiYkZShPdCkpcmV0dXJuIEoucGxhbnQoT3QpLnZhbHVlKCk7Zm9yKHZhciBWdD0wLG9lPVQ/dltWdF0uYXBwbHkodGhpcyxEdCk6T3Q7KytWdDxUOylvZT12W1Z0XS5jYWxsKHRoaXMsb2UpO3JldHVybiBvZX19KX1mdW5jdGlvbiB1SShtLHYsVCxOLFYsWSxKLGl0LGZ0LER0KXt2YXIgT3Q9diZDLFZ0PXYmZCxvZT12JmcsVGU9diYoeXx4KSxOZT12JmssZXI9b2U/ZTpETShtKTtmdW5jdGlvbiBEZSgpe2Zvcih2YXIgcHI9YXJndW1lbnRzLmxlbmd0aCx5cj12dChwciksWHM9cHI7WHMtLTspeXJbWHNdPWFyZ3VtZW50c1tYc107aWYoVGUpdmFyIFJhPWJ4KERlKSwkcz1ZcGUoeXIsUmEpO2lmKE4mJih5cj1vcHQoeXIsTixWLFRlKSksWSYmKHlyPWFwdCh5cixZLEosVGUpKSxwci09JHMsVGUmJnByPER0KXt2YXIgd2k9ZG0oeXIsUmEpO3JldHVybiBkcHQobSx2LHVJLERlLnBsYWNlaG9sZGVyLFQseXIsd2ksaXQsZnQsRHQtcHIpfXZhciBudT1WdD9UOnRoaXMsZnA9b2U/bnVbbV06bTtyZXR1cm4gcHI9eXIubGVuZ3RoLGl0P3lyPXRnZSh5cixpdCk6TmUmJnByPjEmJnlyLnJldmVyc2UoKSxPdCYmZnQ8cHImJih5ci5sZW5ndGg9ZnQpLHRoaXMmJnRoaXMhPT1mbyYmdGhpcyBpbnN0YW5jZW9mIERlJiYoZnA9ZXJ8fERNKGZwKSksZnAuYXBwbHkobnUseXIpfXJldHVybiBEZX1mdW5jdGlvbiBmcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXtyZXR1cm4gbG1lKFQsbSx2KE4pLHt9KX19ZnVuY3Rpb24gaEkobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCxOKXt2YXIgVjtpZihUPT09ZSYmTj09PWUpcmV0dXJuIHY7aWYoVCE9PWUmJihWPVQpLE4hPT1lKXtpZihWPT09ZSlyZXR1cm4gTjt0eXBlb2YgVD09InN0cmluZyJ8fHR5cGVvZiBOPT0ic3RyaW5nIj8oVD1ZcyhUKSxOPVlzKE4pKTooVD1aZnQoVCksTj1aZnQoTikpLFY9bShULE4pfXJldHVybiBWfX1mdW5jdGlvbiBGcShtKXtyZXR1cm4gbHAoZnVuY3Rpb24odil7cmV0dXJuIHY9S24odixXcyhrZSgpKSksbnIoZnVuY3Rpb24oVCl7dmFyIE49dGhpcztyZXR1cm4gbSh2LGZ1bmN0aW9uKFYpe3JldHVybiBHcyhWLE4sVCl9KX0pfSl9ZnVuY3Rpb24gZkkobSx2KXt2PXY9PT1lPyIgIjpZcyh2KTt2YXIgVD12Lmxlbmd0aDtpZihUPDIpcmV0dXJuIFQ/THEodixtKTp2O3ZhciBOPUxxKHYsSjYobS9keCh2KSkpO3JldHVybiBweCh2KT94bSh0dShOKSwwLG0pLmpvaW4oIiIpOk4uc2xpY2UoMCxtKX1mdW5jdGlvbiBEbWUobSx2LFQsTil7dmFyIFY9diZkLFk9RE0obSk7ZnVuY3Rpb24gSigpe2Zvcih2YXIgaXQ9LTEsZnQ9YXJndW1lbnRzLmxlbmd0aCxEdD0tMSxPdD1OLmxlbmd0aCxWdD12dChPdCtmdCksb2U9dGhpcyYmdGhpcyE9PWZvJiZ0aGlzIGluc3RhbmNlb2YgSj9ZOm07KytEdDxPdDspVnRbRHRdPU5bRHRdO2Zvcig7ZnQtLTspVnRbRHQrK109YXJndW1lbnRzWysraXRdO3JldHVybiBHcyhvZSxWP1Q6dGhpcyxWdCl9cmV0dXJuIEp9ZnVuY3Rpb24gcHB0KG0pe3JldHVybiBmdW5jdGlvbih2LFQsTil7cmV0dXJuIE4mJnR5cGVvZiBOIT0ibnVtYmVyIiYma2EodixULE4pJiYoVD1OPWUpLHY9aHAodiksVD09PWU/KFQ9dix2PTApOlQ9aHAoVCksTj1OPT09ZT92PFQ/MTotMTpocChOKSx4bWUodixULE4sbSl9fWZ1bmN0aW9uIHBJKG0pe3JldHVybiBmdW5jdGlvbih2LFQpe3JldHVybiB0eXBlb2Ygdj09InN0cmluZyImJnR5cGVvZiBUPT0ic3RyaW5nInx8KHY9JGwodiksVD0kbChUKSksbSh2LFQpfX1mdW5jdGlvbiBkcHQobSx2LFQsTixWLFksSixpdCxmdCxEdCl7dmFyIE90PXYmeSxWdD1PdD9KOmUsb2U9T3Q/ZTpKLFRlPU90P1k6ZSxOZT1PdD9lOlk7dnw9T3Q/YjpTLHYmPX4oT3Q/UzpiKSx2Jl98fCh2Jj1+KGR8ZykpO3ZhciBlcj1bbSx2LFYsVGUsVnQsTmUsb2UsaXQsZnQsRHRdLERlPVQuYXBwbHkoZSxlcik7cmV0dXJuIFlxKG0pJiZUcHQoRGUsZXIpLERlLnBsYWNlaG9sZGVyPU4sQ3B0KERlLG0sdil9ZnVuY3Rpb24gQnEobSl7dmFyIHY9amlbbV07cmV0dXJuIGZ1bmN0aW9uKFQsTil7aWYoVD0kbChUKSxOPU49PW51bGw/MDpyYShRZShOKSwyOTIpLE4mJkNmdChUKSl7dmFyIFY9KG9uKFQpKyJlIikuc3BsaXQoImUiKSxZPXYoVlswXSsiZSIrKCtWWzFdK04pKTtyZXR1cm4gVj0ob24oWSkrImUiKS5zcGxpdCgiZSIpLCsoVlswXSsiZSIrKCtWWzFdLU4pKX1yZXR1cm4gdihUKX19dmFyIE9tZT1neCYmMS9VNihuZXcgZ3goWywtMF0pKVsxXT09ej9mdW5jdGlvbihtKXtyZXR1cm4gbmV3IGd4KG0pfTpzRztmdW5jdGlvbiBtcHQobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3ZhciBUPW5hKHYpO3JldHVybiBUPT1xP21xKHYpOlQ9PUxlP1FwZSh2KTpXcGUodixtKHYpKX19ZnVuY3Rpb24gc3AobSx2LFQsTixWLFksSixpdCl7dmFyIGZ0PXYmZztpZighZnQmJnR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2YXIgRHQ9Tj9OLmxlbmd0aDowO2lmKER0fHwodiY9fihifFMpLE49Vj1lKSxKPUo9PT1lP0o6WGkoUWUoSiksMCksaXQ9aXQ9PT1lP2l0OlFlKGl0KSxEdC09Vj9WLmxlbmd0aDowLHYmUyl7dmFyIE90PU4sVnQ9VjtOPVY9ZX12YXIgb2U9ZnQ/ZTpVcShtKSxUZT1bbSx2LFQsTixWLE90LFZ0LFksSixpdF07aWYob2UmJlptZShUZSxvZSksbT1UZVswXSx2PVRlWzFdLFQ9VGVbMl0sTj1UZVszXSxWPVRlWzRdLGl0PVRlWzldPVRlWzldPT09ZT9mdD8wOm0ubGVuZ3RoOlhpKFRlWzldLUR0LDApLCFpdCYmdiYoeXx4KSYmKHYmPX4oeXx4KSksIXZ8fHY9PWQpdmFyIE5lPVJtZShtLHYsVCk7ZWxzZSB2PT15fHx2PT14P05lPU5tZShtLHYsaXQpOih2PT1ifHx2PT0oZHxiKSkmJiFWLmxlbmd0aD9OZT1EbWUobSx2LFQsTik6TmU9dUkuYXBwbHkoZSxUZSk7dmFyIGVyPW9lPyRmdDpUcHQ7cmV0dXJuIENwdChlcihOZSxUZSksbSx2KX1mdW5jdGlvbiBncHQobSx2LFQsTil7cmV0dXJuIG09PT1lfHxydShtLG14W1RdKSYmIXVuLmNhbGwoTixUKT92Om19ZnVuY3Rpb24gX3B0KG0sdixULE4sVixZKXtyZXR1cm4gcmkobSkmJnJpKHYpJiYoWS5zZXQodixtKSxhSShtLHYsZSxfcHQsWSksWS5kZWxldGUodikpLG19ZnVuY3Rpb24gem1lKG0pe3JldHVybiBGTShtKT9lOm19ZnVuY3Rpb24geXB0KG0sdixULE4sVixZKXt2YXIgSj1UJmYsaXQ9bS5sZW5ndGgsZnQ9di5sZW5ndGg7aWYoaXQhPWZ0JiYhKEomJmZ0Pml0KSlyZXR1cm4hMTt2YXIgRHQ9WS5nZXQobSksT3Q9WS5nZXQodik7aWYoRHQmJk90KXJldHVybiBEdD09diYmT3Q9PW07dmFyIFZ0PS0xLG9lPSEwLFRlPVQmcD9uZXcgcl86ZTtmb3IoWS5zZXQobSx2KSxZLnNldCh2LG0pOysrVnQ8aXQ7KXt2YXIgTmU9bVtWdF0sZXI9dltWdF07aWYoTil2YXIgRGU9Sj9OKGVyLE5lLFZ0LHYsbSxZKTpOKE5lLGVyLFZ0LG0sdixZKTtpZihEZSE9PWUpe2lmKERlKWNvbnRpbnVlO29lPSExO2JyZWFrfWlmKFRlKXtpZighY3EodixmdW5jdGlvbihwcix5cil7aWYoIU1NKFRlLHlyKSYmKE5lPT09cHJ8fFYoTmUscHIsVCxOLFkpKSlyZXR1cm4gVGUucHVzaCh5cil9KSl7b2U9ITE7YnJlYWt9fWVsc2UgaWYoIShOZT09PWVyfHxWKE5lLGVyLFQsTixZKSkpe29lPSExO2JyZWFrfX1yZXR1cm4gWS5kZWxldGUobSksWS5kZWxldGUodiksb2V9ZnVuY3Rpb24gRm1lKG0sdixULE4sVixZLEope3N3aXRjaChUKXtjYXNlIGhlOmlmKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHxtLmJ5dGVPZmZzZXQhPXYuYnl0ZU9mZnNldClyZXR1cm4hMTttPW0uYnVmZmVyLHY9di5idWZmZXI7Y2FzZSAkdDpyZXR1cm4hKG0uYnl0ZUxlbmd0aCE9di5ieXRlTGVuZ3RofHwhWShuZXcgWDYobSksbmV3IFg2KHYpKSk7Y2FzZSBLdDpjYXNlIF90OmNhc2UgcHQ6cmV0dXJuIHJ1KCttLCt2KTtjYXNlIFg6cmV0dXJuIG0ubmFtZT09di5uYW1lJiZtLm1lc3NhZ2U9PXYubWVzc2FnZTtjYXNlIGVlOmNhc2UgYXI6cmV0dXJuIG09PXYrIiI7Y2FzZSBxOnZhciBpdD1tcTtjYXNlIExlOnZhciBmdD1OJmY7aWYoaXR8fChpdD1VNiksbS5zaXplIT12LnNpemUmJiFmdClyZXR1cm4hMTt2YXIgRHQ9Si5nZXQobSk7aWYoRHQpcmV0dXJuIER0PT12O058PXAsSi5zZXQobSx2KTt2YXIgT3Q9eXB0KGl0KG0pLGl0KHYpLE4sVixZLEopO3JldHVybiBKLmRlbGV0ZShtKSxPdDtjYXNlIGZyOmlmKFBNKXJldHVybiBQTS5jYWxsKG0pPT1QTS5jYWxsKHYpfXJldHVybiExfWZ1bmN0aW9uIEJtZShtLHYsVCxOLFYsWSl7dmFyIEo9VCZmLGl0PUhxKG0pLGZ0PWl0Lmxlbmd0aCxEdD1IcSh2KSxPdD1EdC5sZW5ndGg7aWYoZnQhPU90JiYhSilyZXR1cm4hMTtmb3IodmFyIFZ0PWZ0O1Z0LS07KXt2YXIgb2U9aXRbVnRdO2lmKCEoSj9vZSBpbiB2OnVuLmNhbGwodixvZSkpKXJldHVybiExfXZhciBUZT1ZLmdldChtKSxOZT1ZLmdldCh2KTtpZihUZSYmTmUpcmV0dXJuIFRlPT12JiZOZT09bTt2YXIgZXI9ITA7WS5zZXQobSx2KSxZLnNldCh2LG0pO2Zvcih2YXIgRGU9SjsrK1Z0PGZ0Oyl7b2U9aXRbVnRdO3ZhciBwcj1tW29lXSx5cj12W29lXTtpZihOKXZhciBYcz1KP04oeXIscHIsb2UsdixtLFkpOk4ocHIseXIsb2UsbSx2LFkpO2lmKCEoWHM9PT1lP3ByPT09eXJ8fFYocHIseXIsVCxOLFkpOlhzKSl7ZXI9ITE7YnJlYWt9RGV8fChEZT1vZT09ImNvbnN0cnVjdG9yIil9aWYoZXImJiFEZSl7dmFyIFJhPW0uY29uc3RydWN0b3IsJHM9di5jb25zdHJ1Y3RvcjtSYSE9JHMmJiJjb25zdHJ1Y3RvciJpbiBtJiYiY29uc3RydWN0b3IiaW4gdiYmISh0eXBlb2YgUmE9PSJmdW5jdGlvbiImJlJhIGluc3RhbmNlb2YgUmEmJnR5cGVvZiAkcz09ImZ1bmN0aW9uIiYmJHMgaW5zdGFuY2VvZiAkcykmJihlcj0hMSl9cmV0dXJuIFkuZGVsZXRlKG0pLFkuZGVsZXRlKHYpLGVyfWZ1bmN0aW9uIGxwKG0pe3JldHVybiBYcShNcHQobSxlLFJwdCksbSsiIil9ZnVuY3Rpb24gSHEobSl7cmV0dXJuIEZmdChtLHBvLEdxKX1mdW5jdGlvbiBWcShtKXtyZXR1cm4gRmZ0KG0sbXMsdnB0KX12YXIgVXE9dEk/ZnVuY3Rpb24obSl7cmV0dXJuIHRJLmdldChtKX06c0c7ZnVuY3Rpb24gZEkobSl7Zm9yKHZhciB2PW0ubmFtZSsiIixUPV94W3ZdLE49dW4uY2FsbChfeCx2KT9ULmxlbmd0aDowO04tLTspe3ZhciBWPVRbTl0sWT1WLmZ1bmM7aWYoWT09bnVsbHx8WT09bSlyZXR1cm4gVi5uYW1lfXJldHVybiB2fWZ1bmN0aW9uIGJ4KG0pe3ZhciB2PXVuLmNhbGwoRywicGxhY2Vob2xkZXIiKT9HOm07cmV0dXJuIHYucGxhY2Vob2xkZXJ9ZnVuY3Rpb24ga2UoKXt2YXIgbT1HLml0ZXJhdGVlfHxvRztyZXR1cm4gbT1tPT09b0c/VmZ0Om0sYXJndW1lbnRzLmxlbmd0aD9tKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pOm19ZnVuY3Rpb24gbUkobSx2KXt2YXIgVD1tLl9fZGF0YV9fO3JldHVybiBqbWUodik/VFt0eXBlb2Ygdj09InN0cmluZyI/InN0cmluZyI6Imhhc2giXTpULm1hcH1mdW5jdGlvbiBxcShtKXtmb3IodmFyIHY9cG8obSksVD12Lmxlbmd0aDtULS07KXt2YXIgTj12W1RdLFY9bVtOXTt2W1RdPVtOLFYsd3B0KFYpXX1yZXR1cm4gdn1mdW5jdGlvbiBvXyhtLHYpe3ZhciBUPUtwZShtLHYpO3JldHVybiBIZnQoVCk/VDplfWZ1bmN0aW9uIEhtZShtKXt2YXIgdj11bi5jYWxsKG0sdF8pLFQ9bVt0X107dHJ5e21bdF9dPWU7dmFyIE49ITB9Y2F0Y2goWSl7fXZhciBWPVk2LmNhbGwobSk7cmV0dXJuIE4mJih2P21bdF9dPVQ6ZGVsZXRlIG1bdF9dKSxWfXZhciBHcT1fcT9mdW5jdGlvbihtKXtyZXR1cm4gbT09bnVsbD9bXToobT12bihtKSxmbShfcShtKSxmdW5jdGlvbih2KXtyZXR1cm4gRWZ0LmNhbGwobSx2KX0pKX06bEcsdnB0PV9xP2Z1bmN0aW9uKG0pe2Zvcih2YXIgdj1bXTttOylwbSh2LEdxKG0pKSxtPSQ2KG0pO3JldHVybiB2fTpsRyxuYT1MYTsoeXEmJm5hKG5ldyB5cShuZXcgQXJyYXlCdWZmZXIoMSkpKSE9aGV8fFRNJiZuYShuZXcgVE0pIT1xfHx2cSYmbmEodnEucmVzb2x2ZSgpKSE9a3R8fGd4JiZuYShuZXcgZ3gpIT1MZXx8Q00mJm5hKG5ldyBDTSkhPSQpJiYobmE9ZnVuY3Rpb24obSl7dmFyIHY9TGEobSksVD12PT13dD9tLmNvbnN0cnVjdG9yOmUsTj1UP2FfKFQpOiIiO2lmKE4pc3dpdGNoKE4pe2Nhc2Ugd2RlOnJldHVybiBoZTtjYXNlIFNkZTpyZXR1cm4gcTtjYXNlIE1kZTpyZXR1cm4ga3Q7Y2FzZSBFZGU6cmV0dXJuIExlO2Nhc2UgVGRlOnJldHVybiAkfXJldHVybiB2fSk7ZnVuY3Rpb24gVm1lKG0sdixUKXtmb3IodmFyIE49LTEsVj1ULmxlbmd0aDsrK048Vjspe3ZhciBZPVRbTl0sSj1ZLnNpemU7c3dpdGNoKFkudHlwZSl7Y2FzZSJkcm9wIjptKz1KO2JyZWFrO2Nhc2UiZHJvcFJpZ2h0Ijp2LT1KO2JyZWFrO2Nhc2UidGFrZSI6dj1yYSh2LG0rSik7YnJlYWs7Y2FzZSJ0YWtlUmlnaHQiOm09WGkobSx2LUopO2JyZWFrfX1yZXR1cm57c3RhcnQ6bSxlbmQ6dn19ZnVuY3Rpb24gVW1lKG0pe3ZhciB2PW0ubWF0Y2goRXQpO3JldHVybiB2P3ZbMV0uc3BsaXQoeHQpOltdfWZ1bmN0aW9uIHhwdChtLHYsVCl7dj12bSh2LG0pO2Zvcih2YXIgTj0tMSxWPXYubGVuZ3RoLFk9ITE7KytOPFY7KXt2YXIgSj1faCh2W05dKTtpZighKFk9bSE9bnVsbCYmVChtLEopKSlicmVhazttPW1bSl19cmV0dXJuIFl8fCsrTiE9Vj9ZOihWPW09PW51bGw/MDptLmxlbmd0aCwhIVYmJndJKFYpJiZjcChKLFYpJiYoJGUobSl8fHNfKG0pKSl9ZnVuY3Rpb24gcW1lKG0pe3ZhciB2PW0ubGVuZ3RoLFQ9bmV3IG0uY29uc3RydWN0b3Iodik7cmV0dXJuIHYmJnR5cGVvZiBtWzBdPT0ic3RyaW5nIiYmdW4uY2FsbChtLCJpbmRleCIpJiYoVC5pbmRleD1tLmluZGV4LFQuaW5wdXQ9bS5pbnB1dCksVH1mdW5jdGlvbiBicHQobSl7cmV0dXJuIHR5cGVvZiBtLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhT00obSk/eXgoJDYobSkpOnt9fWZ1bmN0aW9uIEdtZShtLHYsVCl7dmFyIE49bS5jb25zdHJ1Y3Rvcjtzd2l0Y2godil7Y2FzZSAkdDpyZXR1cm4genEobSk7Y2FzZSBLdDpjYXNlIF90OnJldHVybiBuZXcgTigrbSk7Y2FzZSBoZTpyZXR1cm4gQ21lKG0sVCk7Y2FzZSBUdDpjYXNlIGJlOmNhc2UgbnQ6Y2FzZSBDdDpjYXNlIFd0OmNhc2UgZmU6Y2FzZSBhdDpjYXNlIHNlOmNhc2UgUXQ6cmV0dXJuIG5wdChtLFQpO2Nhc2UgcTpyZXR1cm4gbmV3IE47Y2FzZSBwdDpjYXNlIGFyOnJldHVybiBuZXcgTihtKTtjYXNlIGVlOnJldHVybiBBbWUobSk7Y2FzZSBMZTpyZXR1cm4gbmV3IE47Y2FzZSBmcjpyZXR1cm4gUG1lKG0pfX1mdW5jdGlvbiBXbWUobSx2KXt2YXIgVD12Lmxlbmd0aDtpZighVClyZXR1cm4gbTt2YXIgTj1ULTE7cmV0dXJuIHZbTl09KFQ+MT8iJiAiOiIiKSt2W05dLHY9di5qb2luKFQ+Mj8iLCAiOiIgIiksbS5yZXBsYWNlKGd0LGB7Ci8qIFt3cmFwcGVkIHdpdGggYCt2K2BdICovCmApfWZ1bmN0aW9uIFltZShtKXtyZXR1cm4gJGUobSl8fHNfKG0pfHwhIShUZnQmJm0mJm1bVGZ0XSl9ZnVuY3Rpb24gY3AobSx2KXt2YXIgVD10eXBlb2YgbTtyZXR1cm4gdj12PT1udWxsP1U6diwhIXYmJihUPT0ibnVtYmVyInx8VCE9InN5bWJvbCImJm5wLnRlc3QobSkpJiZtPi0xJiZtJTE9PTAmJm08dn1mdW5jdGlvbiBrYShtLHYsVCl7aWYoIXJpKFQpKXJldHVybiExO3ZhciBOPXR5cGVvZiB2O3JldHVybihOPT0ibnVtYmVyIj9kcyhUKSYmY3AodixULmxlbmd0aCk6Tj09InN0cmluZyImJnYgaW4gVCk/cnUoVFt2XSxtKTohMX1mdW5jdGlvbiBXcShtLHYpe2lmKCRlKG0pKXJldHVybiExO3ZhciBUPXR5cGVvZiBtO3JldHVybiBUPT0ibnVtYmVyInx8VD09InN5bWJvbCJ8fFQ9PSJib29sZWFuInx8bT09bnVsbHx8anMobSk/ITA6Y20udGVzdChtKXx8IWx4LnRlc3QobSl8fHYhPW51bGwmJm0gaW4gdm4odil9ZnVuY3Rpb24gam1lKG0pe3ZhciB2PXR5cGVvZiBtO3JldHVybiB2PT0ic3RyaW5nInx8dj09Im51bWJlciJ8fHY9PSJzeW1ib2wifHx2PT0iYm9vbGVhbiI/bSE9PSJfX3Byb3RvX18iOm09PT1udWxsfWZ1bmN0aW9uIFlxKG0pe3ZhciB2PWRJKG0pLFQ9R1t2XTtpZih0eXBlb2YgVCE9ImZ1bmN0aW9uInx8ISh2IGluIGdyLnByb3RvdHlwZSkpcmV0dXJuITE7aWYobT09PVQpcmV0dXJuITA7dmFyIE49VXEoVCk7cmV0dXJuISFOJiZtPT09TlswXX1mdW5jdGlvbiBYbWUobSl7cmV0dXJuISF3ZnQmJndmdCBpbiBtfXZhciAkbWU9RzY/dXA6Y0c7ZnVuY3Rpb24gT00obSl7dmFyIHY9bSYmbS5jb25zdHJ1Y3RvcixUPXR5cGVvZiB2PT0iZnVuY3Rpb24iJiZ2LnByb3RvdHlwZXx8bXg7cmV0dXJuIG09PT1UfWZ1bmN0aW9uIHdwdChtKXtyZXR1cm4gbT09PW0mJiFyaShtKX1mdW5jdGlvbiBTcHQobSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIFQ9PW51bGw/ITE6VFttXT09PXYmJih2IT09ZXx8bSBpbiB2bihUKSl9fWZ1bmN0aW9uIEttZShtKXt2YXIgdj14SShtLGZ1bmN0aW9uKE4pe3JldHVybiBULnNpemU9PT1zJiZULmNsZWFyKCksTn0pLFQ9di5jYWNoZTtyZXR1cm4gdn1mdW5jdGlvbiBabWUobSx2KXt2YXIgVD1tWzFdLE49dlsxXSxWPVR8TixZPVY8KGR8Z3xDKSxKPU49PUMmJlQ9PXl8fE49PUMmJlQ9PVAmJm1bN10ubGVuZ3RoPD12WzhdfHxOPT0oQ3xQKSYmdls3XS5sZW5ndGg8PXZbOF0mJlQ9PXk7aWYoIShZfHxKKSlyZXR1cm4gbTtOJmQmJihtWzJdPXZbMl0sVnw9VCZkPzA6Xyk7dmFyIGl0PXZbM107aWYoaXQpe3ZhciBmdD1tWzNdO21bM109ZnQ/b3B0KGZ0LGl0LHZbNF0pOml0LG1bNF09ZnQ/ZG0obVszXSxsKTp2WzRdfXJldHVybiBpdD12WzVdLGl0JiYoZnQ9bVs1XSxtWzVdPWZ0P2FwdChmdCxpdCx2WzZdKTppdCxtWzZdPWZ0P2RtKG1bNV0sbCk6dls2XSksaXQ9dls3XSxpdCYmKG1bN109aXQpLE4mQyYmKG1bOF09bVs4XT09bnVsbD92WzhdOnJhKG1bOF0sdls4XSkpLG1bOV09PW51bGwmJihtWzldPXZbOV0pLG1bMF09dlswXSxtWzFdPVYsbX1mdW5jdGlvbiBKbWUobSl7dmFyIHY9W107aWYobSE9bnVsbClmb3IodmFyIFQgaW4gdm4obSkpdi5wdXNoKFQpO3JldHVybiB2fWZ1bmN0aW9uIFFtZShtKXtyZXR1cm4gWTYuY2FsbChtKX1mdW5jdGlvbiBNcHQobSx2LFQpe3JldHVybiB2PVhpKHY9PT1lP20ubGVuZ3RoLTE6diwwKSxmdW5jdGlvbigpe2Zvcih2YXIgTj1hcmd1bWVudHMsVj0tMSxZPVhpKE4ubGVuZ3RoLXYsMCksSj12dChZKTsrK1Y8WTspSltWXT1OW3YrVl07Vj0tMTtmb3IodmFyIGl0PXZ0KHYrMSk7KytWPHY7KWl0W1ZdPU5bVl07cmV0dXJuIGl0W3ZdPVQoSiksR3MobSx0aGlzLGl0KX19ZnVuY3Rpb24gRXB0KG0sdil7cmV0dXJuIHYubGVuZ3RoPDI/bTppXyhtLGpsKHYsMCwtMSkpfWZ1bmN0aW9uIHRnZShtLHYpe2Zvcih2YXIgVD1tLmxlbmd0aCxOPXJhKHYubGVuZ3RoLFQpLFY9cHMobSk7Ti0tOyl7dmFyIFk9dltOXTttW05dPWNwKFksVCk/VltZXTplfXJldHVybiBtfWZ1bmN0aW9uIGpxKG0sdil7aWYoISh2PT09ImNvbnN0cnVjdG9yIiYmdHlwZW9mIG1bdl09PSJmdW5jdGlvbiIpJiZ2IT0iX19wcm90b19fIilyZXR1cm4gbVt2XX12YXIgVHB0PUFwdCgkZnQpLHpNPW1kZXx8ZnVuY3Rpb24obSx2KXtyZXR1cm4gZm8uc2V0VGltZW91dChtLHYpfSxYcT1BcHQoU21lKTtmdW5jdGlvbiBDcHQobSx2LFQpe3ZhciBOPXYrIiI7cmV0dXJuIFhxKG0sV21lKE4sZWdlKFVtZShOKSxUKSkpfWZ1bmN0aW9uIEFwdChtKXt2YXIgdj0wLFQ9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgTj12ZGUoKSxWPUktKE4tVCk7aWYoVD1OLFY+MCl7aWYoKyt2Pj1CKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSB2PTA7cmV0dXJuIG0uYXBwbHkoZSxhcmd1bWVudHMpfX1mdW5jdGlvbiBnSShtLHYpe3ZhciBUPS0xLE49bS5sZW5ndGgsVj1OLTE7Zm9yKHY9dj09PWU/Tjp2OysrVDx2Oyl7dmFyIFk9SXEoVCxWKSxKPW1bWV07bVtZXT1tW1RdLG1bVF09Sn1yZXR1cm4gbS5sZW5ndGg9dixtfXZhciBQcHQ9S21lKGZ1bmN0aW9uKG0pe3ZhciB2PVtdO3JldHVybiBtLmNoYXJDb2RlQXQoMCk9PT00NiYmdi5wdXNoKCIiKSxtLnJlcGxhY2UoSjAsZnVuY3Rpb24oVCxOLFYsWSl7di5wdXNoKFY/WS5yZXBsYWNlKFVlLCIkMSIpOk58fFQpfSksdn0pO2Z1bmN0aW9uIF9oKG0pe2lmKHR5cGVvZiBtPT0ic3RyaW5nInx8anMobSkpcmV0dXJuIG07dmFyIHY9bSsiIjtyZXR1cm4gdj09IjAiJiYxL209PS16PyItMCI6dn1mdW5jdGlvbiBhXyhtKXtpZihtIT1udWxsKXt0cnl7cmV0dXJuIFc2LmNhbGwobSl9Y2F0Y2godil7fXRyeXtyZXR1cm4gbSsiIn1jYXRjaCh2KXt9fXJldHVybiIifWZ1bmN0aW9uIGVnZShtLHYpe3JldHVybiBxbChTdCxmdW5jdGlvbihUKXt2YXIgTj0iXy4iK1RbMF07diZUWzFdJiYhSDYobSxOKSYmbS5wdXNoKE4pfSksbS5zb3J0KCl9ZnVuY3Rpb24gSXB0KG0pe2lmKG0gaW5zdGFuY2VvZiBncilyZXR1cm4gbS5jbG9uZSgpO3ZhciB2PW5ldyBXbChtLl9fd3JhcHBlZF9fLG0uX19jaGFpbl9fKTtyZXR1cm4gdi5fX2FjdGlvbnNfXz1wcyhtLl9fYWN0aW9uc19fKSx2Ll9faW5kZXhfXz1tLl9faW5kZXhfXyx2Ll9fdmFsdWVzX189bS5fX3ZhbHVlc19fLHZ9ZnVuY3Rpb24gcmdlKG0sdixUKXsoVD9rYShtLHYsVCk6dj09PWUpP3Y9MTp2PVhpKFFlKHYpLDApO3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTnx8djwxKXJldHVybltdO2Zvcih2YXIgVj0wLFk9MCxKPXZ0KEo2KE4vdikpO1Y8TjspSltZKytdPWpsKG0sVixWKz12KTtyZXR1cm4gSn1mdW5jdGlvbiBuZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49MCxWPVtdOysrdjxUOyl7dmFyIFk9bVt2XTtZJiYoVltOKytdPVkpfXJldHVybiBWfWZ1bmN0aW9uIGlnZSgpe3ZhciBtPWFyZ3VtZW50cy5sZW5ndGg7aWYoIW0pcmV0dXJuW107Zm9yKHZhciB2PXZ0KG0tMSksVD1hcmd1bWVudHNbMF0sTj1tO04tLTspdltOLTFdPWFyZ3VtZW50c1tOXTtyZXR1cm4gcG0oJGUoVCk/cHMoVCk6W1RdLFJvKHYsMSkpfXZhciBvZ2U9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gYmkobSk/TE0obSxSbyh2LDEsYmksITApKTpbXX0pLGFnZT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPVhsKHYpO3JldHVybiBiaShUKSYmKFQ9ZSksYmkobSk/TE0obSxSbyh2LDEsYmksITApLGtlKFQsMikpOltdfSksc2dlPW5yKGZ1bmN0aW9uKG0sdil7dmFyIFQ9WGwodik7cmV0dXJuIGJpKFQpJiYoVD1lKSxiaShtKT9MTShtLFJvKHYsMSxiaSwhMCksZSxUKTpbXX0pO2Z1bmN0aW9uIGxnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBjZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gTj8odj1UfHx2PT09ZT8xOlFlKHYpLHY9Ti12LGpsKG0sMCx2PDA/MDp2KSk6W119ZnVuY3Rpb24gdWdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2xJKG0sa2UodiwzKSwhMCwhMCk6W119ZnVuY3Rpb24gaGdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP2xJKG0sa2UodiwzKSwhMCk6W119ZnVuY3Rpb24gZmdlKG0sdixULE4pe3ZhciBWPW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gVj8oVCYmdHlwZW9mIFQhPSJudW1iZXIiJiZrYShtLHYsVCkmJihUPTAsTj1WKSxpbWUobSx2LFQsTikpOltdfWZ1bmN0aW9uIExwdChtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO2lmKCFOKXJldHVybi0xO3ZhciBWPVQ9PW51bGw/MDpRZShUKTtyZXR1cm4gVjwwJiYoVj1YaShOK1YsMCkpLFY2KG0sa2UodiwzKSxWKX1mdW5jdGlvbiBrcHQobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1OLTE7cmV0dXJuIFQhPT1lJiYoVj1RZShUKSxWPVQ8MD9YaShOK1YsMCk6cmEoVixOLTEpKSxWNihtLGtlKHYsMyksViwhMCl9ZnVuY3Rpb24gUnB0KG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9SbyhtLDEpOltdfWZ1bmN0aW9uIHBnZShtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/Um8obSx6KTpbXX1mdW5jdGlvbiBkZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIFQ/KHY9dj09PWU/MTpRZSh2KSxSbyhtLHYpKTpbXX1mdW5jdGlvbiBtZ2UobSl7Zm9yKHZhciB2PS0xLFQ9bT09bnVsbD8wOm0ubGVuZ3RoLE49e307Kyt2PFQ7KXt2YXIgVj1tW3ZdO05bVlswXV09VlsxXX1yZXR1cm4gTn1mdW5jdGlvbiBOcHQobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP21bMF06ZX1mdW5jdGlvbiBnZ2UobSx2LFQpe3ZhciBOPW09PW51bGw/MDptLmxlbmd0aDtpZighTilyZXR1cm4tMTt2YXIgVj1UPT1udWxsPzA6UWUoVCk7cmV0dXJuIFY8MCYmKFY9WGkoTitWLDApKSxmeChtLHYsVil9ZnVuY3Rpb24gX2dlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDAsLTEpOltdfXZhciB5Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9S24obSxEcSk7cmV0dXJuIHYubGVuZ3RoJiZ2WzBdPT09bVswXT9FcSh2KTpbXX0pLHZnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKSxUPUtuKG0sRHEpO3JldHVybiB2PT09WGwoVCk/dj1lOlQucG9wKCksVC5sZW5ndGgmJlRbMF09PT1tWzBdP0VxKFQsa2UodiwyKSk6W119KSx4Z2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSksVD1LbihtLERxKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsdiYmVC5wb3AoKSxULmxlbmd0aCYmVFswXT09PW1bMF0/RXEoVCxlLHYpOltdfSk7ZnVuY3Rpb24gYmdlKG0sdil7cmV0dXJuIG09PW51bGw/IiI6X2RlLmNhbGwobSx2KX1mdW5jdGlvbiBYbChtKXt2YXIgdj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIHY/bVt2LTFdOmV9ZnVuY3Rpb24gd2dlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7aWYoIU4pcmV0dXJuLTE7dmFyIFY9TjtyZXR1cm4gVCE9PWUmJihWPVFlKFQpLFY9VjwwP1hpKE4rViwwKTpyYShWLE4tMSkpLHY9PT12P2VkZShtLHYsVik6VjYobSxkZnQsViwhMCl9ZnVuY3Rpb24gU2dlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP1dmdChtLFFlKHYpKTplfXZhciBNZ2U9bnIoRHB0KTtmdW5jdGlvbiBEcHQobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP1BxKG0sdik6bX1mdW5jdGlvbiBFZ2UobSx2LFQpe3JldHVybiBtJiZtLmxlbmd0aCYmdiYmdi5sZW5ndGg/UHEobSx2LGtlKFQsMikpOm19ZnVuY3Rpb24gVGdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGgmJnYmJnYubGVuZ3RoP1BxKG0sdixlLFQpOm19dmFyIENnZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aCxOPWJxKG0sdik7cmV0dXJuIFhmdChtLEtuKHYsZnVuY3Rpb24oVil7cmV0dXJuIGNwKFYsVCk/K1Y6Vn0pLnNvcnQoaXB0KSksTn0pO2Z1bmN0aW9uIEFnZShtLHYpe3ZhciBUPVtdO2lmKCEobSYmbS5sZW5ndGgpKXJldHVybiBUO3ZhciBOPS0xLFY9W10sWT1tLmxlbmd0aDtmb3Iodj1rZSh2LDMpOysrTjxZOyl7dmFyIEo9bVtOXTt2KEosTixtKSYmKFQucHVzaChKKSxWLnB1c2goTikpfXJldHVybiBYZnQobSxWKSxUfWZ1bmN0aW9uICRxKG0pe3JldHVybiBtPT1udWxsP206YmRlLmNhbGwobSl9ZnVuY3Rpb24gUGdlKG0sdixUKXt2YXIgTj1tPT1udWxsPzA6bS5sZW5ndGg7cmV0dXJuIE4/KFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpPyh2PTAsVD1OKToodj12PT1udWxsPzA6UWUodiksVD1UPT09ZT9OOlFlKFQpKSxqbChtLHYsVCkpOltdfWZ1bmN0aW9uIElnZShtLHYpe3JldHVybiBzSShtLHYpfWZ1bmN0aW9uIExnZShtLHYsVCl7cmV0dXJuIGtxKG0sdixrZShULDIpKX1mdW5jdGlvbiBrZ2UobSx2KXt2YXIgVD1tPT1udWxsPzA6bS5sZW5ndGg7aWYoVCl7dmFyIE49c0kobSx2KTtpZihOPFQmJnJ1KG1bTl0sdikpcmV0dXJuIE59cmV0dXJuLTF9ZnVuY3Rpb24gUmdlKG0sdil7cmV0dXJuIHNJKG0sdiwhMCl9ZnVuY3Rpb24gTmdlKG0sdixUKXtyZXR1cm4ga3EobSx2LGtlKFQsMiksITApfWZ1bmN0aW9uIERnZShtLHYpe3ZhciBUPW09PW51bGw/MDptLmxlbmd0aDtpZihUKXt2YXIgTj1zSShtLHYsITApLTE7aWYocnUobVtOXSx2KSlyZXR1cm4gTn1yZXR1cm4tMX1mdW5jdGlvbiBPZ2UobSl7cmV0dXJuIG0mJm0ubGVuZ3RoP0tmdChtKTpbXX1mdW5jdGlvbiB6Z2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/S2Z0KG0sa2UodiwyKSk6W119ZnVuY3Rpb24gRmdlKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aDtyZXR1cm4gdj9qbChtLDEsdik6W119ZnVuY3Rpb24gQmdlKG0sdixUKXtyZXR1cm4gbSYmbS5sZW5ndGg/KHY9VHx8dj09PWU/MTpRZSh2KSxqbChtLDAsdjwwPzA6dikpOltdfWZ1bmN0aW9uIEhnZShtLHYsVCl7dmFyIE49bT09bnVsbD8wOm0ubGVuZ3RoO3JldHVybiBOPyh2PVR8fHY9PT1lPzE6UWUodiksdj1OLXYsamwobSx2PDA/MDp2LE4pKTpbXX1mdW5jdGlvbiBWZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/bEkobSxrZSh2LDMpLCExLCEwKTpbXX1mdW5jdGlvbiBVZ2UobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/bEkobSxrZSh2LDMpKTpbXX12YXIgcWdlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiB5bShSbyhtLDEsYmksITApKX0pLEdnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gYmkodikmJih2PWUpLHltKFJvKG0sMSxiaSwhMCksa2UodiwyKSl9KSxXZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLHltKFJvKG0sMSxiaSwhMCksZSx2KX0pO2Z1bmN0aW9uIFlnZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/eW0obSk6W119ZnVuY3Rpb24gamdlKG0sdil7cmV0dXJuIG0mJm0ubGVuZ3RoP3ltKG0sa2UodiwyKSk6W119ZnVuY3Rpb24gWGdlKG0sdil7cmV0dXJuIHY9dHlwZW9mIHY9PSJmdW5jdGlvbiI/djplLG0mJm0ubGVuZ3RoP3ltKG0sZSx2KTpbXX1mdW5jdGlvbiBLcShtKXtpZighKG0mJm0ubGVuZ3RoKSlyZXR1cm5bXTt2YXIgdj0wO3JldHVybiBtPWZtKG0sZnVuY3Rpb24oVCl7aWYoYmkoVCkpcmV0dXJuIHY9WGkoVC5sZW5ndGgsdiksITB9KSxwcSh2LGZ1bmN0aW9uKFQpe3JldHVybiBLbihtLHVxKFQpKX0pfWZ1bmN0aW9uIE9wdChtLHYpe2lmKCEobSYmbS5sZW5ndGgpKXJldHVybltdO3ZhciBUPUtxKG0pO3JldHVybiB2PT1udWxsP1Q6S24oVCxmdW5jdGlvbihOKXtyZXR1cm4gR3ModixlLE4pfSl9dmFyICRnZT1ucihmdW5jdGlvbihtLHYpe3JldHVybiBiaShtKT9MTShtLHYpOltdfSksS2dlPW5yKGZ1bmN0aW9uKG0pe3JldHVybiBOcShmbShtLGJpKSl9KSxaZ2U9bnIoZnVuY3Rpb24obSl7dmFyIHY9WGwobSk7cmV0dXJuIGJpKHYpJiYodj1lKSxOcShmbShtLGJpKSxrZSh2LDIpKX0pLEpnZT1ucihmdW5jdGlvbihtKXt2YXIgdj1YbChtKTtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsTnEoZm0obSxiaSksZSx2KX0pLFFnZT1ucihLcSk7ZnVuY3Rpb24gdDBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxJTSl9ZnVuY3Rpb24gZTBlKG0sdil7cmV0dXJuIHRwdChtfHxbXSx2fHxbXSxOTSl9dmFyIHIwZT1ucihmdW5jdGlvbihtKXt2YXIgdj1tLmxlbmd0aCxUPXY+MT9tW3YtMV06ZTtyZXR1cm4gVD10eXBlb2YgVD09ImZ1bmN0aW9uIj8obS5wb3AoKSxUKTplLE9wdChtLFQpfSk7ZnVuY3Rpb24genB0KG0pe3ZhciB2PUcobSk7cmV0dXJuIHYuX19jaGFpbl9fPSEwLHZ9ZnVuY3Rpb24gbjBlKG0sdil7cmV0dXJuIHYobSksbX1mdW5jdGlvbiBfSShtLHYpe3JldHVybiB2KG0pfXZhciBpMGU9bHAoZnVuY3Rpb24obSl7dmFyIHY9bS5sZW5ndGgsVD12P21bMF06MCxOPXRoaXMuX193cmFwcGVkX18sVj1mdW5jdGlvbihZKXtyZXR1cm4gYnEoWSxtKX07cmV0dXJuIHY+MXx8dGhpcy5fX2FjdGlvbnNfXy5sZW5ndGh8fCEoTiBpbnN0YW5jZW9mIGdyKXx8IWNwKFQpP3RoaXMudGhydShWKTooTj1OLnNsaWNlKFQsK1QrKHY/MTowKSksTi5fX2FjdGlvbnNfXy5wdXNoKHtmdW5jOl9JLGFyZ3M6W1ZdLHRoaXNBcmc6ZX0pLG5ldyBXbChOLHRoaXMuX19jaGFpbl9fKS50aHJ1KGZ1bmN0aW9uKFkpe3JldHVybiB2JiYhWS5sZW5ndGgmJlkucHVzaChlKSxZfSkpfSk7ZnVuY3Rpb24gbzBlKCl7cmV0dXJuIHpwdCh0aGlzKX1mdW5jdGlvbiBhMGUoKXtyZXR1cm4gbmV3IFdsKHRoaXMudmFsdWUoKSx0aGlzLl9fY2hhaW5fXyl9ZnVuY3Rpb24gczBlKCl7dGhpcy5fX3ZhbHVlc19fPT09ZSYmKHRoaXMuX192YWx1ZXNfXz1acHQodGhpcy52YWx1ZSgpKSk7dmFyIG09dGhpcy5fX2luZGV4X18+PXRoaXMuX192YWx1ZXNfXy5sZW5ndGgsdj1tP2U6dGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO3JldHVybntkb25lOm0sdmFsdWU6dn19ZnVuY3Rpb24gbDBlKCl7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gYzBlKG0pe2Zvcih2YXIgdixUPXRoaXM7VCBpbnN0YW5jZW9mIHJJOyl7dmFyIE49SXB0KFQpO04uX19pbmRleF9fPTAsTi5fX3ZhbHVlc19fPWUsdj9WLl9fd3JhcHBlZF9fPU46dj1OO3ZhciBWPU47VD1ULl9fd3JhcHBlZF9ffXJldHVybiBWLl9fd3JhcHBlZF9fPW0sdn1mdW5jdGlvbiB1MGUoKXt2YXIgbT10aGlzLl9fd3JhcHBlZF9fO2lmKG0gaW5zdGFuY2VvZiBncil7dmFyIHY9bTtyZXR1cm4gdGhpcy5fX2FjdGlvbnNfXy5sZW5ndGgmJih2PW5ldyBncih0aGlzKSksdj12LnJldmVyc2UoKSx2Ll9fYWN0aW9uc19fLnB1c2goe2Z1bmM6X0ksYXJnczpbJHFdLHRoaXNBcmc6ZX0pLG5ldyBXbCh2LHRoaXMuX19jaGFpbl9fKX1yZXR1cm4gdGhpcy50aHJ1KCRxKX1mdW5jdGlvbiBoMGUoKXtyZXR1cm4gUWZ0KHRoaXMuX193cmFwcGVkX18sdGhpcy5fX2FjdGlvbnNfXyl9dmFyIGYwZT1jSShmdW5jdGlvbihtLHYsVCl7dW4uY2FsbChtLFQpPysrbVtUXTphcChtLFQsMSl9KTtmdW5jdGlvbiBwMGUobSx2LFQpe3ZhciBOPSRlKG0pP2ZmdDpubWU7cmV0dXJuIFQmJmthKG0sdixUKSYmKHY9ZSksTihtLGtlKHYsMykpfWZ1bmN0aW9uIGQwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciBtMGU9dXB0KExwdCksZzBlPXVwdChrcHQpO2Z1bmN0aW9uIF8wZShtLHYpe3JldHVybiBSbyh5SShtLHYpLDEpfWZ1bmN0aW9uIHkwZShtLHYpe3JldHVybiBSbyh5SShtLHYpLHopfWZ1bmN0aW9uIHYwZShtLHYsVCl7cmV0dXJuIFQ9VD09PWU/MTpRZShUKSxSbyh5SShtLHYpLFQpfWZ1bmN0aW9uIEZwdChtLHYpe3ZhciBUPSRlKG0pP3FsOl9tO3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gQnB0KG0sdil7dmFyIFQ9JGUobSk/RnBlOkRmdDtyZXR1cm4gVChtLGtlKHYsMykpfXZhciB4MGU9Y0koZnVuY3Rpb24obSx2LFQpe3VuLmNhbGwobSxUKT9tW1RdLnB1c2godik6YXAobSxULFt2XSl9KTtmdW5jdGlvbiBiMGUobSx2LFQsTil7bT1kcyhtKT9tOlN4KG0pLFQ9VCYmIU4/UWUoVCk6MDt2YXIgVj1tLmxlbmd0aDtyZXR1cm4gVDwwJiYoVD1YaShWK1QsMCkpLFNJKG0pP1Q8PVYmJm0uaW5kZXhPZih2LFQpPi0xOiEhViYmZngobSx2LFQpPi0xfXZhciB3MGU9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPS0xLFY9dHlwZW9mIHY9PSJmdW5jdGlvbiIsWT1kcyhtKT92dChtLmxlbmd0aCk6W107cmV0dXJuIF9tKG0sZnVuY3Rpb24oSil7WVsrK05dPVY/R3ModixKLFQpOmtNKEosdixUKX0pLFl9KSxTMGU9Y0koZnVuY3Rpb24obSx2LFQpe2FwKG0sVCx2KX0pO2Z1bmN0aW9uIHlJKG0sdil7dmFyIFQ9JGUobSk/S246VWZ0O3JldHVybiBUKG0sa2UodiwzKSl9ZnVuY3Rpb24gTTBlKG0sdixULE4pe3JldHVybiBtPT1udWxsP1tdOigkZSh2KXx8KHY9dj09bnVsbD9bXTpbdl0pLFQ9Tj9lOlQsJGUoVCl8fChUPVQ9PW51bGw/W106W1RdKSxZZnQobSx2LFQpKX12YXIgRTBlPWNJKGZ1bmN0aW9uKG0sdixUKXttW1Q/MDoxXS5wdXNoKHYpfSxmdW5jdGlvbigpe3JldHVybltbXSxbXV19KTtmdW5jdGlvbiBUMGUobSx2LFQpe3ZhciBOPSRlKG0pP2xxOmdmdCxWPWFyZ3VtZW50cy5sZW5ndGg8MztyZXR1cm4gTihtLGtlKHYsNCksVCxWLF9tKX1mdW5jdGlvbiBDMGUobSx2LFQpe3ZhciBOPSRlKG0pP0JwZTpnZnQsVj1hcmd1bWVudHMubGVuZ3RoPDM7cmV0dXJuIE4obSxrZSh2LDQpLFQsVixEZnQpfWZ1bmN0aW9uIEEwZShtLHYpe3ZhciBUPSRlKG0pP2ZtOk9mdDtyZXR1cm4gVChtLGJJKGtlKHYsMykpKX1mdW5jdGlvbiBQMGUobSl7dmFyIHY9JGUobSk/TGZ0OmJtZTtyZXR1cm4gdihtKX1mdW5jdGlvbiBJMGUobSx2LFQpeyhUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodik7dmFyIE49JGUobSk/SmRlOndtZTtyZXR1cm4gTihtLHYpfWZ1bmN0aW9uIEwwZShtKXt2YXIgdj0kZShtKT9RZGU6TW1lO3JldHVybiB2KG0pfWZ1bmN0aW9uIGswZShtKXtpZihtPT1udWxsKXJldHVybiAwO2lmKGRzKG0pKXJldHVybiBTSShtKT9keChtKTptLmxlbmd0aDt2YXIgdj1uYShtKTtyZXR1cm4gdj09cXx8dj09TGU/bS5zaXplOkNxKG0pLmxlbmd0aH1mdW5jdGlvbiBSMGUobSx2LFQpe3ZhciBOPSRlKG0pP2NxOkVtZTtyZXR1cm4gVCYma2EobSx2LFQpJiYodj1lKSxOKG0sa2UodiwzKSl9dmFyIE4wZT1ucihmdW5jdGlvbihtLHYpe2lmKG09PW51bGwpcmV0dXJuW107dmFyIFQ9di5sZW5ndGg7cmV0dXJuIFQ+MSYma2EobSx2WzBdLHZbMV0pP3Y9W106VD4yJiZrYSh2WzBdLHZbMV0sdlsyXSkmJih2PVt2WzBdXSksWWZ0KG0sUm8odiwxKSxbXSl9KSx2ST1kZGV8fGZ1bmN0aW9uKCl7cmV0dXJuIGZvLkRhdGUubm93KCl9O2Z1bmN0aW9uIEQwZShtLHYpe2lmKHR5cGVvZiB2IT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gbT1RZShtKSxmdW5jdGlvbigpe2lmKC0tbTwxKXJldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gSHB0KG0sdixUKXtyZXR1cm4gdj1UP2U6dix2PW0mJnY9PW51bGw/bS5sZW5ndGg6dixzcChtLEMsZSxlLGUsZSx2KX1mdW5jdGlvbiBWcHQobSx2KXt2YXIgVDtpZih0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIG09UWUobSksZnVuY3Rpb24oKXtyZXR1cm4tLW0+MCYmKFQ9di5hcHBseSh0aGlzLGFyZ3VtZW50cykpLG08PTEmJih2PWUpLFR9fXZhciBacT1ucihmdW5jdGlvbihtLHYsVCl7dmFyIE49ZDtpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChacSkpO058PWJ9cmV0dXJuIHNwKG0sTix2LFQsVil9KSxVcHQ9bnIoZnVuY3Rpb24obSx2LFQpe3ZhciBOPWR8ZztpZihULmxlbmd0aCl7dmFyIFY9ZG0oVCxieChVcHQpKTtOfD1ifXJldHVybiBzcCh2LE4sbSxULFYpfSk7ZnVuY3Rpb24gcXB0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seSxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9cXB0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gR3B0KG0sdixUKXt2PVQ/ZTp2O3ZhciBOPXNwKG0seCxlLGUsZSxlLGUsdik7cmV0dXJuIE4ucGxhY2Vob2xkZXI9R3B0LnBsYWNlaG9sZGVyLE59ZnVuY3Rpb24gV3B0KG0sdixUKXt2YXIgTixWLFksSixpdCxmdCxEdD0wLE90PSExLFZ0PSExLG9lPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTt2PSRsKHYpfHwwLHJpKFQpJiYoT3Q9ISFULmxlYWRpbmcsVnQ9Im1heFdhaXQiaW4gVCxZPVZ0P1hpKCRsKFQubWF4V2FpdCl8fDAsdik6WSxvZT0idHJhaWxpbmciaW4gVD8hIVQudHJhaWxpbmc6b2UpO2Z1bmN0aW9uIFRlKHdpKXt2YXIgbnU9TixmcD1WO3JldHVybiBOPVY9ZSxEdD13aSxKPW0uYXBwbHkoZnAsbnUpLEp9ZnVuY3Rpb24gTmUod2kpe3JldHVybiBEdD13aSxpdD16TShwcix2KSxPdD9UZSh3aSk6Sn1mdW5jdGlvbiBlcih3aSl7dmFyIG51PXdpLWZ0LGZwPXdpLUR0LHVkdD12LW51O3JldHVybiBWdD9yYSh1ZHQsWS1mcCk6dWR0fWZ1bmN0aW9uIERlKHdpKXt2YXIgbnU9d2ktZnQsZnA9d2ktRHQ7cmV0dXJuIGZ0PT09ZXx8bnU+PXZ8fG51PDB8fFZ0JiZmcD49WX1mdW5jdGlvbiBwcigpe3ZhciB3aT12SSgpO2lmKERlKHdpKSlyZXR1cm4geXIod2kpO2l0PXpNKHByLGVyKHdpKSl9ZnVuY3Rpb24geXIod2kpe3JldHVybiBpdD1lLG9lJiZOP1RlKHdpKTooTj1WPWUsSil9ZnVuY3Rpb24gWHMoKXtpdCE9PWUmJmVwdChpdCksRHQ9MCxOPWZ0PVY9aXQ9ZX1mdW5jdGlvbiBSYSgpe3JldHVybiBpdD09PWU/Sjp5cih2SSgpKX1mdW5jdGlvbiAkcygpe3ZhciB3aT12SSgpLG51PURlKHdpKTtpZihOPWFyZ3VtZW50cyxWPXRoaXMsZnQ9d2ksbnUpe2lmKGl0PT09ZSlyZXR1cm4gTmUoZnQpO2lmKFZ0KXJldHVybiBlcHQoaXQpLGl0PXpNKHByLHYpLFRlKGZ0KX1yZXR1cm4gaXQ9PT1lJiYoaXQ9ek0ocHIsdikpLEp9cmV0dXJuICRzLmNhbmNlbD1Ycywkcy5mbHVzaD1SYSwkc312YXIgTzBlPW5yKGZ1bmN0aW9uKG0sdil7cmV0dXJuIE5mdChtLDEsdil9KSx6MGU9bnIoZnVuY3Rpb24obSx2LFQpe3JldHVybiBOZnQobSwkbCh2KXx8MCxUKX0pO2Z1bmN0aW9uIEYwZShtKXtyZXR1cm4gc3AobSxrKX1mdW5jdGlvbiB4SShtLHYpe2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24ifHx2IT1udWxsJiZ0eXBlb2YgdiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7dmFyIFQ9ZnVuY3Rpb24oKXt2YXIgTj1hcmd1bWVudHMsVj12P3YuYXBwbHkodGhpcyxOKTpOWzBdLFk9VC5jYWNoZTtpZihZLmhhcyhWKSlyZXR1cm4gWS5nZXQoVik7dmFyIEo9bS5hcHBseSh0aGlzLE4pO3JldHVybiBULmNhY2hlPVkuc2V0KFYsSil8fFksSn07cmV0dXJuIFQuY2FjaGU9bmV3KHhJLkNhY2hlfHxvcCksVH14SS5DYWNoZT1vcDtmdW5jdGlvbiBiSShtKXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9YXJndW1lbnRzO3N3aXRjaCh2Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiFtLmNhbGwodGhpcyk7Y2FzZSAxOnJldHVybiFtLmNhbGwodGhpcyx2WzBdKTtjYXNlIDI6cmV0dXJuIW0uY2FsbCh0aGlzLHZbMF0sdlsxXSk7Y2FzZSAzOnJldHVybiFtLmNhbGwodGhpcyx2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIW0uYXBwbHkodGhpcyx2KX19ZnVuY3Rpb24gQjBlKG0pe3JldHVybiBWcHQoMixtKX12YXIgSDBlPVRtZShmdW5jdGlvbihtLHYpe3Y9di5sZW5ndGg9PTEmJiRlKHZbMF0pP0tuKHZbMF0sV3Moa2UoKSkpOktuKFJvKHYsMSksV3Moa2UoKSkpO3ZhciBUPXYubGVuZ3RoO3JldHVybiBucihmdW5jdGlvbihOKXtmb3IodmFyIFY9LTEsWT1yYShOLmxlbmd0aCxUKTsrK1Y8WTspTltWXT12W1ZdLmNhbGwodGhpcyxOW1ZdKTtyZXR1cm4gR3MobSx0aGlzLE4pfSl9KSxKcT1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoSnEpKTtyZXR1cm4gc3AobSxiLGUsdixUKX0pLFlwdD1ucihmdW5jdGlvbihtLHYpe3ZhciBUPWRtKHYsYngoWXB0KSk7cmV0dXJuIHNwKG0sUyxlLHYsVCl9KSxWMGU9bHAoZnVuY3Rpb24obSx2KXtyZXR1cm4gc3AobSxQLGUsZSxlLHYpfSk7ZnVuY3Rpb24gVTBlKG0sdil7aWYodHlwZW9mIG0hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEdsKGkpO3JldHVybiB2PXY9PT1lP3Y6UWUodiksbnIobSx2KX1mdW5jdGlvbiBxMGUobSx2KXtpZih0eXBlb2YgbSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgR2woaSk7cmV0dXJuIHY9dj09bnVsbD8wOlhpKFFlKHYpLDApLG5yKGZ1bmN0aW9uKFQpe3ZhciBOPVRbdl0sVj14bShULDAsdik7cmV0dXJuIE4mJnBtKFYsTiksR3MobSx0aGlzLFYpfSl9ZnVuY3Rpb24gRzBlKG0sdixUKXt2YXIgTj0hMCxWPSEwO2lmKHR5cGVvZiBtIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm4gcmkoVCkmJihOPSJsZWFkaW5nImluIFQ/ISFULmxlYWRpbmc6TixWPSJ0cmFpbGluZyJpbiBUPyEhVC50cmFpbGluZzpWKSxXcHQobSx2LHtsZWFkaW5nOk4sbWF4V2FpdDp2LHRyYWlsaW5nOlZ9KX1mdW5jdGlvbiBXMGUobSl7cmV0dXJuIEhwdChtLDEpfWZ1bmN0aW9uIFkwZShtLHYpe3JldHVybiBKcShPcSh2KSxtKX1mdW5jdGlvbiBqMGUoKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bXTt2YXIgbT1hcmd1bWVudHNbMF07cmV0dXJuICRlKG0pP206W21dfWZ1bmN0aW9uIFgwZShtKXtyZXR1cm4gWWwobSxoKX1mdW5jdGlvbiAkMGUobSx2KXtyZXR1cm4gdj10eXBlb2Ygdj09ImZ1bmN0aW9uIj92OmUsWWwobSxoLHYpfWZ1bmN0aW9uIEswZShtKXtyZXR1cm4gWWwobSxjfGgpfWZ1bmN0aW9uIFowZShtLHYpe3JldHVybiB2PXR5cGVvZiB2PT0iZnVuY3Rpb24iP3Y6ZSxZbChtLGN8aCx2KX1mdW5jdGlvbiBKMGUobSx2KXtyZXR1cm4gdj09bnVsbHx8UmZ0KG0sdixwbyh2KSl9ZnVuY3Rpb24gcnUobSx2KXtyZXR1cm4gbT09PXZ8fG0hPT1tJiZ2IT09dn12YXIgUTBlPXBJKE1xKSx0X2U9cEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbT49dn0pLHNfPUJmdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0JmdDpmdW5jdGlvbihtKXtyZXR1cm4gbGkobSkmJnVuLmNhbGwobSwiY2FsbGVlIikmJiFFZnQuY2FsbChtLCJjYWxsZWUiKX0sJGU9dnQuaXNBcnJheSxlX2U9YWZ0P1dzKGFmdCk6Y21lO2Z1bmN0aW9uIGRzKG0pe3JldHVybiBtIT1udWxsJiZ3SShtLmxlbmd0aCkmJiF1cChtKX1mdW5jdGlvbiBiaShtKXtyZXR1cm4gbGkobSkmJmRzKG0pfWZ1bmN0aW9uIHJfZShtKXtyZXR1cm4gbT09PSEwfHxtPT09ITF8fGxpKG0pJiZMYShtKT09S3R9dmFyIGJtPWdkZXx8Y0csbl9lPXNmdD9XcyhzZnQpOnVtZTtmdW5jdGlvbiBpX2UobSl7cmV0dXJuIGxpKG0pJiZtLm5vZGVUeXBlPT09MSYmIUZNKG0pfWZ1bmN0aW9uIG9fZShtKXtpZihtPT1udWxsKXJldHVybiEwO2lmKGRzKG0pJiYoJGUobSl8fHR5cGVvZiBtPT0ic3RyaW5nInx8dHlwZW9mIG0uc3BsaWNlPT0iZnVuY3Rpb24ifHxibShtKXx8d3gobSl8fHNfKG0pKSlyZXR1cm4hbS5sZW5ndGg7dmFyIHY9bmEobSk7aWYodj09cXx8dj09TGUpcmV0dXJuIW0uc2l6ZTtpZihPTShtKSlyZXR1cm4hQ3EobSkubGVuZ3RoO2Zvcih2YXIgVCBpbiBtKWlmKHVuLmNhbGwobSxUKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBhX2UobSx2KXtyZXR1cm4gUk0obSx2KX1mdW5jdGlvbiBzX2UobSx2LFQpe1Q9dHlwZW9mIFQ9PSJmdW5jdGlvbiI/VDplO3ZhciBOPVQ/VChtLHYpOmU7cmV0dXJuIE49PT1lP1JNKG0sdixlLFQpOiEhTn1mdW5jdGlvbiBRcShtKXtpZighbGkobSkpcmV0dXJuITE7dmFyIHY9TGEobSk7cmV0dXJuIHY9PVh8fHY9PWN0fHx0eXBlb2YgbS5tZXNzYWdlPT0ic3RyaW5nIiYmdHlwZW9mIG0ubmFtZT09InN0cmluZyImJiFGTShtKX1mdW5jdGlvbiBsX2UobSl7cmV0dXJuIHR5cGVvZiBtPT0ibnVtYmVyIiYmQ2Z0KG0pfWZ1bmN0aW9uIHVwKG0pe2lmKCFyaShtKSlyZXR1cm4hMTt2YXIgdj1MYShtKTtyZXR1cm4gdj09ZXR8fHY9PWR0fHx2PT1sdHx8dj09aWV9ZnVuY3Rpb24ganB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm09PVFlKG0pfWZ1bmN0aW9uIHdJKG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciImJm0+LTEmJm0lMT09MCYmbTw9VX1mdW5jdGlvbiByaShtKXt2YXIgdj10eXBlb2YgbTtyZXR1cm4gbSE9bnVsbCYmKHY9PSJvYmplY3QifHx2PT0iZnVuY3Rpb24iKX1mdW5jdGlvbiBsaShtKXtyZXR1cm4gbSE9bnVsbCYmdHlwZW9mIG09PSJvYmplY3QifXZhciBYcHQ9bGZ0P1dzKGxmdCk6Zm1lO2Z1bmN0aW9uIGNfZShtLHYpe3JldHVybiBtPT09dnx8VHEobSx2LHFxKHYpKX1mdW5jdGlvbiB1X2UobSx2LFQpe3JldHVybiBUPXR5cGVvZiBUPT0iZnVuY3Rpb24iP1Q6ZSxUcShtLHYscXEodiksVCl9ZnVuY3Rpb24gaF9lKG0pe3JldHVybiAkcHQobSkmJm0hPSttfWZ1bmN0aW9uIGZfZShtKXtpZigkbWUobSkpdGhyb3cgbmV3IFdlKG4pO3JldHVybiBIZnQobSl9ZnVuY3Rpb24gcF9lKG0pe3JldHVybiBtPT09bnVsbH1mdW5jdGlvbiBkX2UobSl7cmV0dXJuIG09PW51bGx9ZnVuY3Rpb24gJHB0KG0pe3JldHVybiB0eXBlb2YgbT09Im51bWJlciJ8fGxpKG0pJiZMYShtKT09cHR9ZnVuY3Rpb24gRk0obSl7aWYoIWxpKG0pfHxMYShtKSE9d3QpcmV0dXJuITE7dmFyIHY9JDYobSk7aWYodj09PW51bGwpcmV0dXJuITA7dmFyIFQ9dW4uY2FsbCh2LCJjb25zdHJ1Y3RvciIpJiZ2LmNvbnN0cnVjdG9yO3JldHVybiB0eXBlb2YgVD09ImZ1bmN0aW9uIiYmVCBpbnN0YW5jZW9mIFQmJlc2LmNhbGwoVCk9PXVkZX12YXIgdEc9Y2Z0P1dzKGNmdCk6cG1lO2Z1bmN0aW9uIG1fZShtKXtyZXR1cm4ganB0KG0pJiZtPj0tVSYmbTw9VX12YXIgS3B0PXVmdD9Xcyh1ZnQpOmRtZTtmdW5jdGlvbiBTSShtKXtyZXR1cm4gdHlwZW9mIG09PSJzdHJpbmcifHwhJGUobSkmJmxpKG0pJiZMYShtKT09YXJ9ZnVuY3Rpb24ganMobSl7cmV0dXJuIHR5cGVvZiBtPT0ic3ltYm9sInx8bGkobSkmJkxhKG0pPT1mcn12YXIgd3g9aGZ0P1dzKGhmdCk6bW1lO2Z1bmN0aW9uIGdfZShtKXtyZXR1cm4gbT09PWV9ZnVuY3Rpb24gX19lKG0pe3JldHVybiBsaShtKSYmbmEobSk9PSR9ZnVuY3Rpb24geV9lKG0pe3JldHVybiBsaShtKSYmTGEobSk9PUl0fXZhciB2X2U9cEkoQXEpLHhfZT1wSShmdW5jdGlvbihtLHYpe3JldHVybiBtPD12fSk7ZnVuY3Rpb24gWnB0KG0pe2lmKCFtKXJldHVybltdO2lmKGRzKG0pKXJldHVybiBTSShtKT90dShtKTpwcyhtKTtpZihFTSYmbVtFTV0pcmV0dXJuIEpwZShtW0VNXSgpKTt2YXIgdj1uYShtKSxUPXY9PXE/bXE6dj09TGU/VTY6U3g7cmV0dXJuIFQobSl9ZnVuY3Rpb24gaHAobSl7aWYoIW0pcmV0dXJuIG09PT0wP206MDtpZihtPSRsKG0pLG09PT16fHxtPT09LXope3ZhciB2PW08MD8tMToxO3JldHVybiB2Kld9cmV0dXJuIG09PT1tP206MH1mdW5jdGlvbiBRZShtKXt2YXIgdj1ocChtKSxUPXYlMTtyZXR1cm4gdj09PXY/VD92LVQ6djowfWZ1bmN0aW9uIEpwdChtKXtyZXR1cm4gbT9uXyhRZShtKSwwLHJ0KTowfWZ1bmN0aW9uICRsKG0pe2lmKHR5cGVvZiBtPT0ibnVtYmVyIilyZXR1cm4gbTtpZihqcyhtKSlyZXR1cm4gWjtpZihyaShtKSl7dmFyIHY9dHlwZW9mIG0udmFsdWVPZj09ImZ1bmN0aW9uIj9tLnZhbHVlT2YoKTptO209cmkodik/disiIjp2fWlmKHR5cGVvZiBtIT0ic3RyaW5nIilyZXR1cm4gbT09PTA/bTorbTttPV9mdChtKTt2YXIgVD1fci50ZXN0KG0pO3JldHVybiBUfHxYbi50ZXN0KG0pP0RwZShtLnNsaWNlKDIpLFQ/Mjo4KTpYci50ZXN0KG0pP1o6K219ZnVuY3Rpb24gUXB0KG0pe3JldHVybiBnaChtLG1zKG0pKX1mdW5jdGlvbiBiX2UobSl7cmV0dXJuIG0/bl8oUWUobSksLVUsVSk6bT09PTA/bTowfWZ1bmN0aW9uIG9uKG0pe3JldHVybiBtPT1udWxsPyIiOllzKG0pfXZhciB3X2U9dngoZnVuY3Rpb24obSx2KXtpZihPTSh2KXx8ZHModikpe2doKHYscG8odiksbSk7cmV0dXJufWZvcih2YXIgVCBpbiB2KXVuLmNhbGwodixUKSYmSU0obSxULHZbVF0pfSksdGR0PXZ4KGZ1bmN0aW9uKG0sdil7Z2godixtcyh2KSxtKX0pLE1JPXZ4KGZ1bmN0aW9uKG0sdixULE4pe2doKHYsbXModiksbSxOKX0pLFNfZT12eChmdW5jdGlvbihtLHYsVCxOKXtnaCh2LHBvKHYpLG0sTil9KSxNX2U9bHAoYnEpO2Z1bmN0aW9uIEVfZShtLHYpe3ZhciBUPXl4KG0pO3JldHVybiB2PT1udWxsP1Q6a2Z0KFQsdil9dmFyIFRfZT1ucihmdW5jdGlvbihtLHYpe209dm4obSk7dmFyIFQ9LTEsTj12Lmxlbmd0aCxWPU4+Mj92WzJdOmU7Zm9yKFYmJmthKHZbMF0sdlsxXSxWKSYmKE49MSk7KytUPE47KWZvcih2YXIgWT12W1RdLEo9bXMoWSksaXQ9LTEsZnQ9Si5sZW5ndGg7KytpdDxmdDspe3ZhciBEdD1KW2l0XSxPdD1tW0R0XTsoT3Q9PT1lfHxydShPdCxteFtEdF0pJiYhdW4uY2FsbChtLER0KSkmJihtW0R0XT1ZW0R0XSl9cmV0dXJuIG19KSxDX2U9bnIoZnVuY3Rpb24obSl7cmV0dXJuIG0ucHVzaChlLF9wdCksR3MoZWR0LGUsbSl9KTtmdW5jdGlvbiBBX2UobSx2KXtyZXR1cm4gcGZ0KG0sa2UodiwzKSxtaCl9ZnVuY3Rpb24gUF9lKG0sdil7cmV0dXJuIHBmdChtLGtlKHYsMyksU3EpfWZ1bmN0aW9uIElfZShtLHYpe3JldHVybiBtPT1udWxsP206d3EobSxrZSh2LDMpLG1zKX1mdW5jdGlvbiBMX2UobSx2KXtyZXR1cm4gbT09bnVsbD9tOnpmdChtLGtlKHYsMyksbXMpfWZ1bmN0aW9uIGtfZShtLHYpe3JldHVybiBtJiZtaChtLGtlKHYsMykpfWZ1bmN0aW9uIFJfZShtLHYpe3JldHVybiBtJiZTcShtLGtlKHYsMykpfWZ1bmN0aW9uIE5fZShtKXtyZXR1cm4gbT09bnVsbD9bXTpvSShtLHBvKG0pKX1mdW5jdGlvbiBEX2UobSl7cmV0dXJuIG09PW51bGw/W106b0kobSxtcyhtKSl9ZnVuY3Rpb24gZUcobSx2LFQpe3ZhciBOPW09PW51bGw/ZTppXyhtLHYpO3JldHVybiBOPT09ZT9UOk59ZnVuY3Rpb24gT19lKG0sdil7cmV0dXJuIG0hPW51bGwmJnhwdChtLHYsb21lKX1mdW5jdGlvbiByRyhtLHYpe3JldHVybiBtIT1udWxsJiZ4cHQobSx2LGFtZSl9dmFyIHpfZT1mcHQoZnVuY3Rpb24obSx2LFQpe3YhPW51bGwmJnR5cGVvZiB2LnRvU3RyaW5nIT0iZnVuY3Rpb24iJiYodj1ZNi5jYWxsKHYpKSxtW3ZdPVR9LGlHKGdzKSksRl9lPWZwdChmdW5jdGlvbihtLHYsVCl7diE9bnVsbCYmdHlwZW9mIHYudG9TdHJpbmchPSJmdW5jdGlvbiImJih2PVk2LmNhbGwodikpLHVuLmNhbGwobSx2KT9tW3ZdLnB1c2goVCk6bVt2XT1bVF19LGtlKSxCX2U9bnIoa00pO2Z1bmN0aW9uIHBvKG0pe3JldHVybiBkcyhtKT9JZnQobSk6Q3EobSl9ZnVuY3Rpb24gbXMobSl7cmV0dXJuIGRzKG0pP0lmdChtLCEwKTpnbWUobSl9ZnVuY3Rpb24gSF9lKG0sdil7dmFyIFQ9e307cmV0dXJuIHY9a2UodiwzKSxtaChtLGZ1bmN0aW9uKE4sVixZKXthcChULHYoTixWLFkpLE4pfSksVH1mdW5jdGlvbiBWX2UobSx2KXt2YXIgVD17fTtyZXR1cm4gdj1rZSh2LDMpLG1oKG0sZnVuY3Rpb24oTixWLFkpe2FwKFQsVix2KE4sVixZKSl9KSxUfXZhciBVX2U9dngoZnVuY3Rpb24obSx2LFQpe2FJKG0sdixUKX0pLGVkdD12eChmdW5jdGlvbihtLHYsVCxOKXthSShtLHYsVCxOKX0pLHFfZT1scChmdW5jdGlvbihtLHYpe3ZhciBUPXt9O2lmKG09PW51bGwpcmV0dXJuIFQ7dmFyIE49ITE7dj1Lbih2LGZ1bmN0aW9uKFkpe3JldHVybiBZPXZtKFksbSksTnx8KE49WS5sZW5ndGg+MSksWX0pLGdoKG0sVnEobSksVCksTiYmKFQ9WWwoVCxjfHV8aCx6bWUpKTtmb3IodmFyIFY9di5sZW5ndGg7Vi0tOylScShULHZbVl0pO3JldHVybiBUfSk7ZnVuY3Rpb24gR19lKG0sdil7cmV0dXJuIHJkdChtLGJJKGtlKHYpKSl9dmFyIFdfZT1scChmdW5jdGlvbihtLHYpe3JldHVybiBtPT1udWxsP3t9OnltZShtLHYpfSk7ZnVuY3Rpb24gcmR0KG0sdil7aWYobT09bnVsbClyZXR1cm57fTt2YXIgVD1LbihWcShtKSxmdW5jdGlvbihOKXtyZXR1cm5bTl19KTtyZXR1cm4gdj1rZSh2KSxqZnQobSxULGZ1bmN0aW9uKE4sVil7cmV0dXJuIHYoTixWWzBdKX0pfWZ1bmN0aW9uIFlfZShtLHYsVCl7dj12bSh2LG0pO3ZhciBOPS0xLFY9di5sZW5ndGg7Zm9yKFZ8fChWPTEsbT1lKTsrK048Vjspe3ZhciBZPW09PW51bGw/ZTptW19oKHZbTl0pXTtZPT09ZSYmKE49VixZPVQpLG09dXAoWSk/WS5jYWxsKG0pOll9cmV0dXJuIG19ZnVuY3Rpb24gal9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOk5NKG0sdixUKX1mdW5jdGlvbiBYX2UobSx2LFQsTil7cmV0dXJuIE49dHlwZW9mIE49PSJmdW5jdGlvbiI/TjplLG09PW51bGw/bTpOTShtLHYsVCxOKX12YXIgbmR0PW1wdChwbyksaWR0PW1wdChtcyk7ZnVuY3Rpb24gJF9lKG0sdixUKXt2YXIgTj0kZShtKSxWPU58fGJtKG0pfHx3eChtKTtpZih2PWtlKHYsNCksVD09bnVsbCl7dmFyIFk9bSYmbS5jb25zdHJ1Y3RvcjtWP1Q9Tj9uZXcgWTpbXTpyaShtKT9UPXVwKFkpP3l4KCQ2KG0pKTp7fTpUPXt9fXJldHVybihWP3FsOm1oKShtLGZ1bmN0aW9uKEosaXQsZnQpe3JldHVybiB2KFQsSixpdCxmdCl9KSxUfWZ1bmN0aW9uIEtfZShtLHYpe3JldHVybiBtPT1udWxsPyEwOlJxKG0sdil9ZnVuY3Rpb24gWl9lKG0sdixUKXtyZXR1cm4gbT09bnVsbD9tOkpmdChtLHYsT3EoVCkpfWZ1bmN0aW9uIEpfZShtLHYsVCxOKXtyZXR1cm4gTj10eXBlb2YgTj09ImZ1bmN0aW9uIj9OOmUsbT09bnVsbD9tOkpmdChtLHYsT3EoVCksTil9ZnVuY3Rpb24gU3gobSl7cmV0dXJuIG09PW51bGw/W106ZHEobSxwbyhtKSl9ZnVuY3Rpb24gUV9lKG0pe3JldHVybiBtPT1udWxsP1tdOmRxKG0sbXMobSkpfWZ1bmN0aW9uIHR5ZShtLHYsVCl7cmV0dXJuIFQ9PT1lJiYoVD12LHY9ZSksVCE9PWUmJihUPSRsKFQpLFQ9VD09PVQ/VDowKSx2IT09ZSYmKHY9JGwodiksdj12PT09dj92OjApLG5fKCRsKG0pLHYsVCl9ZnVuY3Rpb24gZXllKG0sdixUKXtyZXR1cm4gdj1ocCh2KSxUPT09ZT8oVD12LHY9MCk6VD1ocChUKSxtPSRsKG0pLHNtZShtLHYsVCl9ZnVuY3Rpb24gcnllKG0sdixUKXtpZihUJiZ0eXBlb2YgVCE9ImJvb2xlYW4iJiZrYShtLHYsVCkmJih2PVQ9ZSksVD09PWUmJih0eXBlb2Ygdj09ImJvb2xlYW4iPyhUPXYsdj1lKTp0eXBlb2YgbT09ImJvb2xlYW4iJiYoVD1tLG09ZSkpLG09PT1lJiZ2PT09ZT8obT0wLHY9MSk6KG09aHAobSksdj09PWU/KHY9bSxtPTApOnY9aHAodikpLG0+dil7dmFyIE49bTttPXYsdj1OfWlmKFR8fG0lMXx8diUxKXt2YXIgVj1BZnQoKTtyZXR1cm4gcmEobStWKih2LW0rTnBlKCIxZS0iKygoVisiIikubGVuZ3RoLTEpKSksdil9cmV0dXJuIElxKG0sdil9dmFyIG55ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIHY9di50b0xvd2VyQ2FzZSgpLG0rKFQ/b2R0KHYpOnYpfSk7ZnVuY3Rpb24gb2R0KG0pe3JldHVybiBuRyhvbihtKS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBhZHQobSl7cmV0dXJuIG09b24obSksbSYmbS5yZXBsYWNlKHVtLGpwZSkucmVwbGFjZShNcGUsIiIpfWZ1bmN0aW9uIGl5ZShtLHYsVCl7bT1vbihtKSx2PVlzKHYpO3ZhciBOPW0ubGVuZ3RoO1Q9VD09PWU/TjpuXyhRZShUKSwwLE4pO3ZhciBWPVQ7cmV0dXJuIFQtPXYubGVuZ3RoLFQ+PTAmJm0uc2xpY2UoVCxWKT09dn1mdW5jdGlvbiBveWUobSl7cmV0dXJuIG09b24obSksbSYmQXIudGVzdChtKT9tLnJlcGxhY2UoeW4sWHBlKTptfWZ1bmN0aW9uIGF5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZjeC50ZXN0KG0pP20ucmVwbGFjZShjbiwiXFwkJiIpOm19dmFyIHN5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/Ii0iOiIiKSt2LnRvTG93ZXJDYXNlKCl9KSxseWU9eHgoZnVuY3Rpb24obSx2LFQpe3JldHVybiBtKyhUPyIgIjoiIikrdi50b0xvd2VyQ2FzZSgpfSksY3llPWNwdCgidG9Mb3dlckNhc2UiKTtmdW5jdGlvbiB1eWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7aWYoIXZ8fE4+PXYpcmV0dXJuIG07dmFyIFY9KHYtTikvMjtyZXR1cm4gZkkoUTYoViksVCkrbStmSShKNihWKSxUKX1mdW5jdGlvbiBoeWUobSx2LFQpe209b24obSksdj1RZSh2KTt2YXIgTj12P2R4KG0pOjA7cmV0dXJuIHYmJk48dj9tK2ZJKHYtTixUKTptfWZ1bmN0aW9uIGZ5ZShtLHYsVCl7bT1vbihtKSx2PVFlKHYpO3ZhciBOPXY/ZHgobSk6MDtyZXR1cm4gdiYmTjx2P2ZJKHYtTixUKSttOm19ZnVuY3Rpb24gcHllKG0sdixUKXtyZXR1cm4gVHx8dj09bnVsbD92PTA6diYmKHY9K3YpLHhkZShvbihtKS5yZXBsYWNlKHJwLCIiKSx2fHwwKX1mdW5jdGlvbiBkeWUobSx2LFQpe3JldHVybihUP2thKG0sdixUKTp2PT09ZSk/dj0xOnY9UWUodiksTHEob24obSksdil9ZnVuY3Rpb24gbXllKCl7dmFyIG09YXJndW1lbnRzLHY9b24obVswXSk7cmV0dXJuIG0ubGVuZ3RoPDM/djp2LnJlcGxhY2UobVsxXSxtWzJdKX12YXIgZ3llPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iXyI6IiIpK3YudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIF95ZShtLHYsVCl7cmV0dXJuIFQmJnR5cGVvZiBUIT0ibnVtYmVyIiYma2EobSx2LFQpJiYodj1UPWUpLFQ9VD09PWU/cnQ6VD4+PjAsVD8obT1vbihtKSxtJiYodHlwZW9mIHY9PSJzdHJpbmcifHx2IT1udWxsJiYhdEcodikpJiYodj1Zcyh2KSwhdiYmcHgobSkpP3htKHR1KG0pLDAsVCk6bS5zcGxpdCh2LFQpKTpbXX12YXIgeXllPXh4KGZ1bmN0aW9uKG0sdixUKXtyZXR1cm4gbSsoVD8iICI6IiIpK25HKHYpfSk7ZnVuY3Rpb24gdnllKG0sdixUKXtyZXR1cm4gbT1vbihtKSxUPVQ9PW51bGw/MDpuXyhRZShUKSwwLG0ubGVuZ3RoKSx2PVlzKHYpLG0uc2xpY2UoVCxUK3YubGVuZ3RoKT09dn1mdW5jdGlvbiB4eWUobSx2LFQpe3ZhciBOPUcudGVtcGxhdGVTZXR0aW5ncztUJiZrYShtLHYsVCkmJih2PWUpLG09b24obSksdj1NSSh7fSx2LE4sZ3B0KTt2YXIgVj1NSSh7fSx2LmltcG9ydHMsTi5pbXBvcnRzLGdwdCksWT1wbyhWKSxKPWRxKFYsWSksaXQsZnQsRHQ9MCxPdD12LmludGVycG9sYXRlfHxtcixWdD0iX19wICs9ICciLG9lPWdxKCh2LmVzY2FwZXx8bXIpLnNvdXJjZSsifCIrT3Quc291cmNlKyJ8IisoT3Q9PT1JYT90cjptcikuc291cmNlKyJ8Iisodi5ldmFsdWF0ZXx8bXIpLnNvdXJjZSsifCQiLCJnIiksVGU9Ii8vIyBzb3VyY2VVUkw9IisodW4uY2FsbCh2LCJzb3VyY2VVUkwiKT8odi5zb3VyY2VVUkwrIiIpLnJlcGxhY2UoL1xzL2csIiAiKToibG9kYXNoLnRlbXBsYXRlU291cmNlc1siKyArK1BwZSsiXSIpK2AKYDttLnJlcGxhY2Uob2UsZnVuY3Rpb24oRGUscHIseXIsWHMsUmEsJHMpe3JldHVybiB5cnx8KHlyPVhzKSxWdCs9bS5zbGljZShEdCwkcykucmVwbGFjZShGbCwkcGUpLHByJiYoaXQ9ITAsVnQrPWAnICsKX19lKGArcHIrYCkgKwonYCksUmEmJihmdD0hMCxWdCs9YCc7CmArUmErYDsKX19wICs9ICdgKSx5ciYmKFZ0Kz1gJyArCigoX190ID0gKGAreXIrYCkpID09IG51bGwgPyAnJyA6IF9fdCkgKwonYCksRHQ9JHMrRGUubGVuZ3RoLERlfSksVnQrPWAnOwpgO3ZhciBOZT11bi5jYWxsKHYsInZhcmlhYmxlIikmJnYudmFyaWFibGU7aWYoIU5lKVZ0PWB3aXRoIChvYmopIHsKYCtWdCtgCn0KYDtlbHNlIGlmKFZlLnRlc3QoTmUpKXRocm93IG5ldyBXZShvKTtWdD0oZnQ/VnQucmVwbGFjZShDZSwiIik6VnQpLnJlcGxhY2UoUHQsIiQxIikucmVwbGFjZShOdCwiJDE7IiksVnQ9ImZ1bmN0aW9uKCIrKE5lfHwib2JqIikrYCkgewpgKyhOZT8iIjpgb2JqIHx8IChvYmogPSB7fSk7CmApKyJ2YXIgX190LCBfX3AgPSAnJyIrKGl0PyIsIF9fZSA9IF8uZXNjYXBlIjoiIikrKGZ0P2AsIF9faiA9IEFycmF5LnByb3RvdHlwZS5qb2luOwpmdW5jdGlvbiBwcmludCgpIHsgX19wICs9IF9fai5jYWxsKGFyZ3VtZW50cywgJycpIH0KYDpgOwpgKStWdCtgcmV0dXJuIF9fcAp9YDt2YXIgZXI9bGR0KGZ1bmN0aW9uKCl7cmV0dXJuICRyKFksVGUrInJldHVybiAiK1Z0KS5hcHBseShlLEopfSk7aWYoZXIuc291cmNlPVZ0LFFxKGVyKSl0aHJvdyBlcjtyZXR1cm4gZXJ9ZnVuY3Rpb24gYnllKG0pe3JldHVybiBvbihtKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHd5ZShtKXtyZXR1cm4gb24obSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBTeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gX2Z0KG0pO2lmKCFtfHwhKHY9WXModikpKXJldHVybiBtO3ZhciBOPXR1KG0pLFY9dHUodiksWT15ZnQoTixWKSxKPXZmdChOLFYpKzE7cmV0dXJuIHhtKE4sWSxKKS5qb2luKCIiKX1mdW5jdGlvbiBNeWUobSx2LFQpe2lmKG09b24obSksbSYmKFR8fHY9PT1lKSlyZXR1cm4gbS5zbGljZSgwLGJmdChtKSsxKTtpZighbXx8ISh2PVlzKHYpKSlyZXR1cm4gbTt2YXIgTj10dShtKSxWPXZmdChOLHR1KHYpKSsxO3JldHVybiB4bShOLDAsVikuam9pbigiIil9ZnVuY3Rpb24gRXllKG0sdixUKXtpZihtPW9uKG0pLG0mJihUfHx2PT09ZSkpcmV0dXJuIG0ucmVwbGFjZShycCwiIik7aWYoIW18fCEodj1Zcyh2KSkpcmV0dXJuIG07dmFyIE49dHUobSksVj15ZnQoTix0dSh2KSk7cmV0dXJuIHhtKE4sVikuam9pbigiIil9ZnVuY3Rpb24gVHllKG0sdil7dmFyIFQ9TyxOPUQ7aWYocmkodikpe3ZhciBWPSJzZXBhcmF0b3IiaW4gdj92LnNlcGFyYXRvcjpWO1Q9Imxlbmd0aCJpbiB2P1FlKHYubGVuZ3RoKTpULE49Im9taXNzaW9uImluIHY/WXModi5vbWlzc2lvbik6Tn1tPW9uKG0pO3ZhciBZPW0ubGVuZ3RoO2lmKHB4KG0pKXt2YXIgSj10dShtKTtZPUoubGVuZ3RofWlmKFQ+PVkpcmV0dXJuIG07dmFyIGl0PVQtZHgoTik7aWYoaXQ8MSlyZXR1cm4gTjt2YXIgZnQ9Sj94bShKLDAsaXQpLmpvaW4oIiIpOm0uc2xpY2UoMCxpdCk7aWYoVj09PWUpcmV0dXJuIGZ0K047aWYoSiYmKGl0Kz1mdC5sZW5ndGgtaXQpLHRHKFYpKXtpZihtLnNsaWNlKGl0KS5zZWFyY2goVikpe3ZhciBEdCxPdD1mdDtmb3IoVi5nbG9iYWx8fChWPWdxKFYuc291cmNlLG9uKEtlLmV4ZWMoVikpKyJnIikpLFYubGFzdEluZGV4PTA7RHQ9Vi5leGVjKE90KTspdmFyIFZ0PUR0LmluZGV4O2Z0PWZ0LnNsaWNlKDAsVnQ9PT1lP2l0OlZ0KX19ZWxzZSBpZihtLmluZGV4T2YoWXMoViksaXQpIT1pdCl7dmFyIG9lPWZ0Lmxhc3RJbmRleE9mKFYpO29lPi0xJiYoZnQ9ZnQuc2xpY2UoMCxvZSkpfXJldHVybiBmdCtOfWZ1bmN0aW9uIEN5ZShtKXtyZXR1cm4gbT1vbihtKSxtJiZXaS50ZXN0KG0pP20ucmVwbGFjZSh6ZSxyZGUpOm19dmFyIEF5ZT14eChmdW5jdGlvbihtLHYsVCl7cmV0dXJuIG0rKFQ/IiAiOiIiKSt2LnRvVXBwZXJDYXNlKCl9KSxuRz1jcHQoInRvVXBwZXJDYXNlIik7ZnVuY3Rpb24gc2R0KG0sdixUKXtyZXR1cm4gbT1vbihtKSx2PVQ/ZTp2LHY9PT1lP1pwZShtKT9vZGUobSk6VXBlKG0pOm0ubWF0Y2godil8fFtdfXZhciBsZHQ9bnIoZnVuY3Rpb24obSx2KXt0cnl7cmV0dXJuIEdzKG0sZSx2KX1jYXRjaChUKXtyZXR1cm4gUXEoVCk/VDpuZXcgV2UoVCl9fSksUHllPWxwKGZ1bmN0aW9uKG0sdil7cmV0dXJuIHFsKHYsZnVuY3Rpb24oVCl7VD1faChUKSxhcChtLFQsWnEobVtUXSxtKSl9KSxtfSk7ZnVuY3Rpb24gSXllKG0pe3ZhciB2PW09PW51bGw/MDptLmxlbmd0aCxUPWtlKCk7cmV0dXJuIG09dj9LbihtLGZ1bmN0aW9uKE4pe2lmKHR5cGVvZiBOWzFdIT0iZnVuY3Rpb24iKXRocm93IG5ldyBHbChpKTtyZXR1cm5bVChOWzBdKSxOWzFdXX0pOltdLG5yKGZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0tMTsrK1Y8djspe3ZhciBZPW1bVl07aWYoR3MoWVswXSx0aGlzLE4pKXJldHVybiBHcyhZWzFdLHRoaXMsTil9fSl9ZnVuY3Rpb24gTHllKG0pe3JldHVybiBybWUoWWwobSxjKSl9ZnVuY3Rpb24gaUcobSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG19fWZ1bmN0aW9uIGt5ZShtLHYpe3JldHVybiBtPT1udWxsfHxtIT09bT92Om19dmFyIFJ5ZT1ocHQoKSxOeWU9aHB0KCEwKTtmdW5jdGlvbiBncyhtKXtyZXR1cm4gbX1mdW5jdGlvbiBvRyhtKXtyZXR1cm4gVmZ0KHR5cGVvZiBtPT0iZnVuY3Rpb24iP206WWwobSxjKSl9ZnVuY3Rpb24gRHllKG0pe3JldHVybiBxZnQoWWwobSxjKSl9ZnVuY3Rpb24gT3llKG0sdil7cmV0dXJuIEdmdChtLFlsKHYsYykpfXZhciB6eWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKFQsbSx2KX19KSxGeWU9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIGtNKG0sVCx2KX19KTtmdW5jdGlvbiBhRyhtLHYsVCl7dmFyIE49cG8odiksVj1vSSh2LE4pO1Q9PW51bGwmJiEocmkodikmJihWLmxlbmd0aHx8IU4ubGVuZ3RoKSkmJihUPXYsdj1tLG09dGhpcyxWPW9JKHYscG8odikpKTt2YXIgWT0hKHJpKFQpJiYiY2hhaW4iaW4gVCl8fCEhVC5jaGFpbixKPXVwKG0pO3JldHVybiBxbChWLGZ1bmN0aW9uKGl0KXt2YXIgZnQ9dltpdF07bVtpdF09ZnQsSiYmKG0ucHJvdG90eXBlW2l0XT1mdW5jdGlvbigpe3ZhciBEdD10aGlzLl9fY2hhaW5fXztpZihZfHxEdCl7dmFyIE90PW0odGhpcy5fX3dyYXBwZWRfXyksVnQ9T3QuX19hY3Rpb25zX189cHModGhpcy5fX2FjdGlvbnNfXyk7cmV0dXJuIFZ0LnB1c2goe2Z1bmM6ZnQsYXJnczphcmd1bWVudHMsdGhpc0FyZzptfSksT3QuX19jaGFpbl9fPUR0LE90fXJldHVybiBmdC5hcHBseShtLHBtKFt0aGlzLnZhbHVlKCldLGFyZ3VtZW50cykpfSl9KSxtfWZ1bmN0aW9uIEJ5ZSgpe3JldHVybiBmby5fPT09dGhpcyYmKGZvLl89aGRlKSx0aGlzfWZ1bmN0aW9uIHNHKCl7fWZ1bmN0aW9uIEh5ZShtKXtyZXR1cm4gbT1RZShtKSxucihmdW5jdGlvbih2KXtyZXR1cm4gV2Z0KHYsbSl9KX12YXIgVnllPUZxKEtuKSxVeWU9RnEoZmZ0KSxxeWU9RnEoY3EpO2Z1bmN0aW9uIGNkdChtKXtyZXR1cm4gV3EobSk/dXEoX2gobSkpOnZtZShtKX1mdW5jdGlvbiBHeWUobSl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBtPT1udWxsP2U6aV8obSx2KX19dmFyIFd5ZT1wcHQoKSxZeWU9cHB0KCEwKTtmdW5jdGlvbiBsRygpe3JldHVybltdfWZ1bmN0aW9uIGNHKCl7cmV0dXJuITF9ZnVuY3Rpb24ganllKCl7cmV0dXJue319ZnVuY3Rpb24gWHllKCl7cmV0dXJuIiJ9ZnVuY3Rpb24gJHllKCl7cmV0dXJuITB9ZnVuY3Rpb24gS3llKG0sdil7aWYobT1RZShtKSxtPDF8fG0+VSlyZXR1cm5bXTt2YXIgVD1ydCxOPXJhKG0scnQpO3Y9a2UodiksbS09cnQ7Zm9yKHZhciBWPXBxKE4sdik7KytUPG07KXYoVCk7cmV0dXJuIFZ9ZnVuY3Rpb24gWnllKG0pe3JldHVybiAkZShtKT9LbihtLF9oKTpqcyhtKT9bbV06cHMoUHB0KG9uKG0pKSl9ZnVuY3Rpb24gSnllKG0pe3ZhciB2PSsrY2RlO3JldHVybiBvbihtKSt2fXZhciBReWU9aEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSt2fSwwKSx0MWU9QnEoImNlaWwiKSxlMWU9aEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbS92fSwxKSxyMWU9QnEoImZsb29yIik7ZnVuY3Rpb24gbjFlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9pSShtLGdzLE1xKTplfWZ1bmN0aW9uIGkxZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9pSShtLGtlKHYsMiksTXEpOmV9ZnVuY3Rpb24gbzFlKG0pe3JldHVybiBtZnQobSxncyl9ZnVuY3Rpb24gYTFlKG0sdil7cmV0dXJuIG1mdChtLGtlKHYsMikpfWZ1bmN0aW9uIHMxZShtKXtyZXR1cm4gbSYmbS5sZW5ndGg/aUkobSxncyxBcSk6ZX1mdW5jdGlvbiBsMWUobSx2KXtyZXR1cm4gbSYmbS5sZW5ndGg/aUkobSxrZSh2LDIpLEFxKTplfXZhciBjMWU9aEkoZnVuY3Rpb24obSx2KXtyZXR1cm4gbSp2fSwxKSx1MWU9QnEoInJvdW5kIiksaDFlPWhJKGZ1bmN0aW9uKG0sdil7cmV0dXJuIG0tdn0sMCk7ZnVuY3Rpb24gZjFlKG0pe3JldHVybiBtJiZtLmxlbmd0aD9mcShtLGdzKTowfWZ1bmN0aW9uIHAxZShtLHYpe3JldHVybiBtJiZtLmxlbmd0aD9mcShtLGtlKHYsMikpOjB9cmV0dXJuIEcuYWZ0ZXI9RDBlLEcuYXJ5PUhwdCxHLmFzc2lnbj13X2UsRy5hc3NpZ25Jbj10ZHQsRy5hc3NpZ25JbldpdGg9TUksRy5hc3NpZ25XaXRoPVNfZSxHLmF0PU1fZSxHLmJlZm9yZT1WcHQsRy5iaW5kPVpxLEcuYmluZEFsbD1QeWUsRy5iaW5kS2V5PVVwdCxHLmNhc3RBcnJheT1qMGUsRy5jaGFpbj16cHQsRy5jaHVuaz1yZ2UsRy5jb21wYWN0PW5nZSxHLmNvbmNhdD1pZ2UsRy5jb25kPUl5ZSxHLmNvbmZvcm1zPUx5ZSxHLmNvbnN0YW50PWlHLEcuY291bnRCeT1mMGUsRy5jcmVhdGU9RV9lLEcuY3Vycnk9cXB0LEcuY3VycnlSaWdodD1HcHQsRy5kZWJvdW5jZT1XcHQsRy5kZWZhdWx0cz1UX2UsRy5kZWZhdWx0c0RlZXA9Q19lLEcuZGVmZXI9TzBlLEcuZGVsYXk9ejBlLEcuZGlmZmVyZW5jZT1vZ2UsRy5kaWZmZXJlbmNlQnk9YWdlLEcuZGlmZmVyZW5jZVdpdGg9c2dlLEcuZHJvcD1sZ2UsRy5kcm9wUmlnaHQ9Y2dlLEcuZHJvcFJpZ2h0V2hpbGU9dWdlLEcuZHJvcFdoaWxlPWhnZSxHLmZpbGw9ZmdlLEcuZmlsdGVyPWQwZSxHLmZsYXRNYXA9XzBlLEcuZmxhdE1hcERlZXA9eTBlLEcuZmxhdE1hcERlcHRoPXYwZSxHLmZsYXR0ZW49UnB0LEcuZmxhdHRlbkRlZXA9cGdlLEcuZmxhdHRlbkRlcHRoPWRnZSxHLmZsaXA9RjBlLEcuZmxvdz1SeWUsRy5mbG93UmlnaHQ9TnllLEcuZnJvbVBhaXJzPW1nZSxHLmZ1bmN0aW9ucz1OX2UsRy5mdW5jdGlvbnNJbj1EX2UsRy5ncm91cEJ5PXgwZSxHLmluaXRpYWw9X2dlLEcuaW50ZXJzZWN0aW9uPXlnZSxHLmludGVyc2VjdGlvbkJ5PXZnZSxHLmludGVyc2VjdGlvbldpdGg9eGdlLEcuaW52ZXJ0PXpfZSxHLmludmVydEJ5PUZfZSxHLmludm9rZU1hcD13MGUsRy5pdGVyYXRlZT1vRyxHLmtleUJ5PVMwZSxHLmtleXM9cG8sRy5rZXlzSW49bXMsRy5tYXA9eUksRy5tYXBLZXlzPUhfZSxHLm1hcFZhbHVlcz1WX2UsRy5tYXRjaGVzPUR5ZSxHLm1hdGNoZXNQcm9wZXJ0eT1PeWUsRy5tZW1vaXplPXhJLEcubWVyZ2U9VV9lLEcubWVyZ2VXaXRoPWVkdCxHLm1ldGhvZD16eWUsRy5tZXRob2RPZj1GeWUsRy5taXhpbj1hRyxHLm5lZ2F0ZT1iSSxHLm50aEFyZz1IeWUsRy5vbWl0PXFfZSxHLm9taXRCeT1HX2UsRy5vbmNlPUIwZSxHLm9yZGVyQnk9TTBlLEcub3Zlcj1WeWUsRy5vdmVyQXJncz1IMGUsRy5vdmVyRXZlcnk9VXllLEcub3ZlclNvbWU9cXllLEcucGFydGlhbD1KcSxHLnBhcnRpYWxSaWdodD1ZcHQsRy5wYXJ0aXRpb249RTBlLEcucGljaz1XX2UsRy5waWNrQnk9cmR0LEcucHJvcGVydHk9Y2R0LEcucHJvcGVydHlPZj1HeWUsRy5wdWxsPU1nZSxHLnB1bGxBbGw9RHB0LEcucHVsbEFsbEJ5PUVnZSxHLnB1bGxBbGxXaXRoPVRnZSxHLnB1bGxBdD1DZ2UsRy5yYW5nZT1XeWUsRy5yYW5nZVJpZ2h0PVl5ZSxHLnJlYXJnPVYwZSxHLnJlamVjdD1BMGUsRy5yZW1vdmU9QWdlLEcucmVzdD1VMGUsRy5yZXZlcnNlPSRxLEcuc2FtcGxlU2l6ZT1JMGUsRy5zZXQ9al9lLEcuc2V0V2l0aD1YX2UsRy5zaHVmZmxlPUwwZSxHLnNsaWNlPVBnZSxHLnNvcnRCeT1OMGUsRy5zb3J0ZWRVbmlxPU9nZSxHLnNvcnRlZFVuaXFCeT16Z2UsRy5zcGxpdD1feWUsRy5zcHJlYWQ9cTBlLEcudGFpbD1GZ2UsRy50YWtlPUJnZSxHLnRha2VSaWdodD1IZ2UsRy50YWtlUmlnaHRXaGlsZT1WZ2UsRy50YWtlV2hpbGU9VWdlLEcudGFwPW4wZSxHLnRocm90dGxlPUcwZSxHLnRocnU9X0ksRy50b0FycmF5PVpwdCxHLnRvUGFpcnM9bmR0LEcudG9QYWlyc0luPWlkdCxHLnRvUGF0aD1aeWUsRy50b1BsYWluT2JqZWN0PVFwdCxHLnRyYW5zZm9ybT0kX2UsRy51bmFyeT1XMGUsRy51bmlvbj1xZ2UsRy51bmlvbkJ5PUdnZSxHLnVuaW9uV2l0aD1XZ2UsRy51bmlxPVlnZSxHLnVuaXFCeT1qZ2UsRy51bmlxV2l0aD1YZ2UsRy51bnNldD1LX2UsRy51bnppcD1LcSxHLnVuemlwV2l0aD1PcHQsRy51cGRhdGU9Wl9lLEcudXBkYXRlV2l0aD1KX2UsRy52YWx1ZXM9U3gsRy52YWx1ZXNJbj1RX2UsRy53aXRob3V0PSRnZSxHLndvcmRzPXNkdCxHLndyYXA9WTBlLEcueG9yPUtnZSxHLnhvckJ5PVpnZSxHLnhvcldpdGg9SmdlLEcuemlwPVFnZSxHLnppcE9iamVjdD10MGUsRy56aXBPYmplY3REZWVwPWUwZSxHLnppcFdpdGg9cjBlLEcuZW50cmllcz1uZHQsRy5lbnRyaWVzSW49aWR0LEcuZXh0ZW5kPXRkdCxHLmV4dGVuZFdpdGg9TUksYUcoRyxHKSxHLmFkZD1ReWUsRy5hdHRlbXB0PWxkdCxHLmNhbWVsQ2FzZT1ueWUsRy5jYXBpdGFsaXplPW9kdCxHLmNlaWw9dDFlLEcuY2xhbXA9dHllLEcuY2xvbmU9WDBlLEcuY2xvbmVEZWVwPUswZSxHLmNsb25lRGVlcFdpdGg9WjBlLEcuY2xvbmVXaXRoPSQwZSxHLmNvbmZvcm1zVG89SjBlLEcuZGVidXJyPWFkdCxHLmRlZmF1bHRUbz1reWUsRy5kaXZpZGU9ZTFlLEcuZW5kc1dpdGg9aXllLEcuZXE9cnUsRy5lc2NhcGU9b3llLEcuZXNjYXBlUmVnRXhwPWF5ZSxHLmV2ZXJ5PXAwZSxHLmZpbmQ9bTBlLEcuZmluZEluZGV4PUxwdCxHLmZpbmRLZXk9QV9lLEcuZmluZExhc3Q9ZzBlLEcuZmluZExhc3RJbmRleD1rcHQsRy5maW5kTGFzdEtleT1QX2UsRy5mbG9vcj1yMWUsRy5mb3JFYWNoPUZwdCxHLmZvckVhY2hSaWdodD1CcHQsRy5mb3JJbj1JX2UsRy5mb3JJblJpZ2h0PUxfZSxHLmZvck93bj1rX2UsRy5mb3JPd25SaWdodD1SX2UsRy5nZXQ9ZUcsRy5ndD1RMGUsRy5ndGU9dF9lLEcuaGFzPU9fZSxHLmhhc0luPXJHLEcuaGVhZD1OcHQsRy5pZGVudGl0eT1ncyxHLmluY2x1ZGVzPWIwZSxHLmluZGV4T2Y9Z2dlLEcuaW5SYW5nZT1leWUsRy5pbnZva2U9Ql9lLEcuaXNBcmd1bWVudHM9c18sRy5pc0FycmF5PSRlLEcuaXNBcnJheUJ1ZmZlcj1lX2UsRy5pc0FycmF5TGlrZT1kcyxHLmlzQXJyYXlMaWtlT2JqZWN0PWJpLEcuaXNCb29sZWFuPXJfZSxHLmlzQnVmZmVyPWJtLEcuaXNEYXRlPW5fZSxHLmlzRWxlbWVudD1pX2UsRy5pc0VtcHR5PW9fZSxHLmlzRXF1YWw9YV9lLEcuaXNFcXVhbFdpdGg9c19lLEcuaXNFcnJvcj1RcSxHLmlzRmluaXRlPWxfZSxHLmlzRnVuY3Rpb249dXAsRy5pc0ludGVnZXI9anB0LEcuaXNMZW5ndGg9d0ksRy5pc01hcD1YcHQsRy5pc01hdGNoPWNfZSxHLmlzTWF0Y2hXaXRoPXVfZSxHLmlzTmFOPWhfZSxHLmlzTmF0aXZlPWZfZSxHLmlzTmlsPWRfZSxHLmlzTnVsbD1wX2UsRy5pc051bWJlcj0kcHQsRy5pc09iamVjdD1yaSxHLmlzT2JqZWN0TGlrZT1saSxHLmlzUGxhaW5PYmplY3Q9Rk0sRy5pc1JlZ0V4cD10RyxHLmlzU2FmZUludGVnZXI9bV9lLEcuaXNTZXQ9S3B0LEcuaXNTdHJpbmc9U0ksRy5pc1N5bWJvbD1qcyxHLmlzVHlwZWRBcnJheT13eCxHLmlzVW5kZWZpbmVkPWdfZSxHLmlzV2Vha01hcD1fX2UsRy5pc1dlYWtTZXQ9eV9lLEcuam9pbj1iZ2UsRy5rZWJhYkNhc2U9c3llLEcubGFzdD1YbCxHLmxhc3RJbmRleE9mPXdnZSxHLmxvd2VyQ2FzZT1seWUsRy5sb3dlckZpcnN0PWN5ZSxHLmx0PXZfZSxHLmx0ZT14X2UsRy5tYXg9bjFlLEcubWF4Qnk9aTFlLEcubWVhbj1vMWUsRy5tZWFuQnk9YTFlLEcubWluPXMxZSxHLm1pbkJ5PWwxZSxHLnN0dWJBcnJheT1sRyxHLnN0dWJGYWxzZT1jRyxHLnN0dWJPYmplY3Q9anllLEcuc3R1YlN0cmluZz1YeWUsRy5zdHViVHJ1ZT0keWUsRy5tdWx0aXBseT1jMWUsRy5udGg9U2dlLEcubm9Db25mbGljdD1CeWUsRy5ub29wPXNHLEcubm93PXZJLEcucGFkPXV5ZSxHLnBhZEVuZD1oeWUsRy5wYWRTdGFydD1meWUsRy5wYXJzZUludD1weWUsRy5yYW5kb209cnllLEcucmVkdWNlPVQwZSxHLnJlZHVjZVJpZ2h0PUMwZSxHLnJlcGVhdD1keWUsRy5yZXBsYWNlPW15ZSxHLnJlc3VsdD1ZX2UsRy5yb3VuZD11MWUsRy5ydW5JbkNvbnRleHQ9dXQsRy5zYW1wbGU9UDBlLEcuc2l6ZT1rMGUsRy5zbmFrZUNhc2U9Z3llLEcuc29tZT1SMGUsRy5zb3J0ZWRJbmRleD1JZ2UsRy5zb3J0ZWRJbmRleEJ5PUxnZSxHLnNvcnRlZEluZGV4T2Y9a2dlLEcuc29ydGVkTGFzdEluZGV4PVJnZSxHLnNvcnRlZExhc3RJbmRleEJ5PU5nZSxHLnNvcnRlZExhc3RJbmRleE9mPURnZSxHLnN0YXJ0Q2FzZT15eWUsRy5zdGFydHNXaXRoPXZ5ZSxHLnN1YnRyYWN0PWgxZSxHLnN1bT1mMWUsRy5zdW1CeT1wMWUsRy50ZW1wbGF0ZT14eWUsRy50aW1lcz1LeWUsRy50b0Zpbml0ZT1ocCxHLnRvSW50ZWdlcj1RZSxHLnRvTGVuZ3RoPUpwdCxHLnRvTG93ZXI9YnllLEcudG9OdW1iZXI9JGwsRy50b1NhZmVJbnRlZ2VyPWJfZSxHLnRvU3RyaW5nPW9uLEcudG9VcHBlcj13eWUsRy50cmltPVN5ZSxHLnRyaW1FbmQ9TXllLEcudHJpbVN0YXJ0PUV5ZSxHLnRydW5jYXRlPVR5ZSxHLnVuZXNjYXBlPUN5ZSxHLnVuaXF1ZUlkPUp5ZSxHLnVwcGVyQ2FzZT1BeWUsRy51cHBlckZpcnN0PW5HLEcuZWFjaD1GcHQsRy5lYWNoUmlnaHQ9QnB0LEcuZmlyc3Q9TnB0LGFHKEcsZnVuY3Rpb24oKXt2YXIgbT17fTtyZXR1cm4gbWgoRyxmdW5jdGlvbih2LFQpe3VuLmNhbGwoRy5wcm90b3R5cGUsVCl8fChtW1RdPXYpfSksbX0oKSx7Y2hhaW46ITF9KSxHLlZFUlNJT049dCxxbChbImJpbmQiLCJiaW5kS2V5IiwiY3VycnkiLCJjdXJyeVJpZ2h0IiwicGFydGlhbCIsInBhcnRpYWxSaWdodCJdLGZ1bmN0aW9uKG0pe0dbbV0ucGxhY2Vob2xkZXI9R30pLHFsKFsiZHJvcCIsInRha2UiXSxmdW5jdGlvbihtLHYpe2dyLnByb3RvdHlwZVttXT1mdW5jdGlvbihUKXtUPVQ9PT1lPzE6WGkoUWUoVCksMCk7dmFyIE49dGhpcy5fX2ZpbHRlcmVkX18mJiF2P25ldyBncih0aGlzKTp0aGlzLmNsb25lKCk7cmV0dXJuIE4uX19maWx0ZXJlZF9fP04uX190YWtlQ291bnRfXz1yYShULE4uX190YWtlQ291bnRfXyk6Ti5fX3ZpZXdzX18ucHVzaCh7c2l6ZTpyYShULHJ0KSx0eXBlOm0rKE4uX19kaXJfXzwwPyJSaWdodCI6IiIpfSksTn0sZ3IucHJvdG90eXBlW20rIlJpZ2h0Il09ZnVuY3Rpb24oVCl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpW21dKFQpLnJldmVyc2UoKX19KSxxbChbImZpbHRlciIsIm1hcCIsInRha2VXaGlsZSJdLGZ1bmN0aW9uKG0sdil7dmFyIFQ9disxLE49VD09THx8VD09Rjtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oVil7dmFyIFk9dGhpcy5jbG9uZSgpO3JldHVybiBZLl9faXRlcmF0ZWVzX18ucHVzaCh7aXRlcmF0ZWU6a2UoViwzKSx0eXBlOlR9KSxZLl9fZmlsdGVyZWRfXz1ZLl9fZmlsdGVyZWRfX3x8TixZfX0pLHFsKFsiaGVhZCIsImxhc3QiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJ0YWtlIisodj8iUmlnaHQiOiIiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tUXSgxKS52YWx1ZSgpWzBdfX0pLHFsKFsiaW5pdGlhbCIsInRhaWwiXSxmdW5jdGlvbihtLHYpe3ZhciBUPSJkcm9wIisodj8iIjoiUmlnaHQiKTtnci5wcm90b3R5cGVbbV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ZpbHRlcmVkX18/bmV3IGdyKHRoaXMpOnRoaXNbVF0oMSl9fSksZ3IucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWx0ZXIoZ3MpfSxnci5wcm90b3R5cGUuZmluZD1mdW5jdGlvbihtKXtyZXR1cm4gdGhpcy5maWx0ZXIobSkuaGVhZCgpfSxnci5wcm90b3R5cGUuZmluZExhc3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMucmV2ZXJzZSgpLmZpbmQobSl9LGdyLnByb3RvdHlwZS5pbnZva2VNYXA9bnIoZnVuY3Rpb24obSx2KXtyZXR1cm4gdHlwZW9mIG09PSJmdW5jdGlvbiI/bmV3IGdyKHRoaXMpOnRoaXMubWFwKGZ1bmN0aW9uKFQpe3JldHVybiBrTShULG0sdil9KX0pLGdyLnByb3RvdHlwZS5yZWplY3Q9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuZmlsdGVyKGJJKGtlKG0pKSl9LGdyLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihtLHYpe209UWUobSk7dmFyIFQ9dGhpcztyZXR1cm4gVC5fX2ZpbHRlcmVkX18mJihtPjB8fHY8MCk/bmV3IGdyKFQpOihtPDA/VD1ULnRha2VSaWdodCgtbSk6bSYmKFQ9VC5kcm9wKG0pKSx2IT09ZSYmKHY9UWUodiksVD12PDA/VC5kcm9wUmlnaHQoLXYpOlQudGFrZSh2LW0pKSxUKX0sZ3IucHJvdG90eXBlLnRha2VSaWdodFdoaWxlPWZ1bmN0aW9uKG0pe3JldHVybiB0aGlzLnJldmVyc2UoKS50YWtlV2hpbGUobSkucmV2ZXJzZSgpfSxnci5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRha2UocnQpfSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD0vXig/OmZpbHRlcnxmaW5kfG1hcHxyZWplY3QpfFdoaWxlJC8udGVzdCh2KSxOPS9eKD86aGVhZHxsYXN0KSQvLnRlc3QodiksVj1HW04/InRha2UiKyh2PT0ibGFzdCI/IlJpZ2h0IjoiIik6dl0sWT1OfHwvXmZpbmQvLnRlc3Qodik7IVZ8fChHLnByb3RvdHlwZVt2XT1mdW5jdGlvbigpe3ZhciBKPXRoaXMuX193cmFwcGVkX18saXQ9Tj9bMV06YXJndW1lbnRzLGZ0PUogaW5zdGFuY2VvZiBncixEdD1pdFswXSxPdD1mdHx8JGUoSiksVnQ9ZnVuY3Rpb24ocHIpe3ZhciB5cj1WLmFwcGx5KEcscG0oW3ByXSxpdCkpO3JldHVybiBOJiZvZT95clswXTp5cn07T3QmJlQmJnR5cGVvZiBEdD09ImZ1bmN0aW9uIiYmRHQubGVuZ3RoIT0xJiYoZnQ9T3Q9ITEpO3ZhciBvZT10aGlzLl9fY2hhaW5fXyxUZT0hIXRoaXMuX19hY3Rpb25zX18ubGVuZ3RoLE5lPVkmJiFvZSxlcj1mdCYmIVRlO2lmKCFZJiZPdCl7Sj1lcj9KOm5ldyBncih0aGlzKTt2YXIgRGU9bS5hcHBseShKLGl0KTtyZXR1cm4gRGUuX19hY3Rpb25zX18ucHVzaCh7ZnVuYzpfSSxhcmdzOltWdF0sdGhpc0FyZzplfSksbmV3IFdsKERlLG9lKX1yZXR1cm4gTmUmJmVyP20uYXBwbHkodGhpcyxpdCk6KERlPXRoaXMudGhydShWdCksTmU/Tj9EZS52YWx1ZSgpWzBdOkRlLnZhbHVlKCk6RGUpfSl9KSxxbChbInBvcCIsInB1c2giLCJzaGlmdCIsInNvcnQiLCJzcGxpY2UiLCJ1bnNoaWZ0Il0sZnVuY3Rpb24obSl7dmFyIHY9cTZbbV0sVD0vXig/OnB1c2h8c29ydHx1bnNoaWZ0KSQvLnRlc3QobSk/InRhcCI6InRocnUiLE49L14oPzpwb3B8c2hpZnQpJC8udGVzdChtKTtHLnByb3RvdHlwZVttXT1mdW5jdGlvbigpe3ZhciBWPWFyZ3VtZW50cztpZihOJiYhdGhpcy5fX2NoYWluX18pe3ZhciBZPXRoaXMudmFsdWUoKTtyZXR1cm4gdi5hcHBseSgkZShZKT9ZOltdLFYpfXJldHVybiB0aGlzW1RdKGZ1bmN0aW9uKEope3JldHVybiB2LmFwcGx5KCRlKEopP0o6W10sVil9KX19KSxtaChnci5wcm90b3R5cGUsZnVuY3Rpb24obSx2KXt2YXIgVD1HW3ZdO2lmKFQpe3ZhciBOPVQubmFtZSsiIjt1bi5jYWxsKF94LE4pfHwoX3hbTl09W10pLF94W05dLnB1c2goe25hbWU6dixmdW5jOlR9KX19KSxfeFt1SShlLGcpLm5hbWVdPVt7bmFtZToid3JhcHBlciIsZnVuYzplfV0sZ3IucHJvdG90eXBlLmNsb25lPUNkZSxnci5wcm90b3R5cGUucmV2ZXJzZT1BZGUsZ3IucHJvdG90eXBlLnZhbHVlPVBkZSxHLnByb3RvdHlwZS5hdD1pMGUsRy5wcm90b3R5cGUuY2hhaW49bzBlLEcucHJvdG90eXBlLmNvbW1pdD1hMGUsRy5wcm90b3R5cGUubmV4dD1zMGUsRy5wcm90b3R5cGUucGxhbnQ9YzBlLEcucHJvdG90eXBlLnJldmVyc2U9dTBlLEcucHJvdG90eXBlLnRvSlNPTj1HLnByb3RvdHlwZS52YWx1ZU9mPUcucHJvdG90eXBlLnZhbHVlPWgwZSxHLnByb3RvdHlwZS5maXJzdD1HLnByb3RvdHlwZS5oZWFkLEVNJiYoRy5wcm90b3R5cGVbRU1dPWwwZSksR30sbW09YWRlKCk7dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kPyhmby5fPW1tLGRlZmluZShmdW5jdGlvbigpe3JldHVybiBtbX0pKTpRMD8oKFEwLmV4cG9ydHM9bW0pLl89bW0sb3EuXz1tbSk6Zm8uXz1tbX0pLmNhbGwoUngpfSk7ZnVuY3Rpb24gZl90KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IFo5KHIpfWZ1bmN0aW9uIFo5KGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGgyZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGYyZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIGhfdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09dTJlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgdTJlLHZzLHBfdD1NKCgpPT57dTJlPXt2YWx1ZTpmdW5jdGlvbigpe319O1o5LnByb3RvdHlwZT1mX3QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpaOSxvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPWgyZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPWYyZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09aF90KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09aF90KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBaOShlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07dnM9Zl90fSk7dmFyIGttPU0oKCk9PntwX3QoKX0pO2Z1bmN0aW9uIHlZKGUpe3JldHVybitlfXZhciB3MXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZZKGUpe3JldHVybiBlKmV9ZnVuY3Rpb24geFkoZSl7cmV0dXJuIGUqKDItZSl9ZnVuY3Rpb24gUEwoZSl7cmV0dXJuKChlKj0yKTw9MT9lKmU6LS1lKigyLWUpKzEpLzJ9dmFyIFMxdD1NKCgpPT57fSk7ZnVuY3Rpb24gYlkoZSl7cmV0dXJuIGUqZSplfWZ1bmN0aW9uIHdZKGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiB4cyhlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgTTF0PU0oKCk9Pnt9KTt2YXIgU1ksTVksRVksSUwsRTF0PU0oKCk9PntTWT0zLE1ZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oU1kpLEVZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiAxLU1hdGgucG93KDEtbix0KX1yZXR1cm4gci5leHBvbmVudD1lLHJ9KFNZKSxJTD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPD0xP01hdGgucG93KG4sdCk6Mi1NYXRoLnBvdygyLW4sdCkpLzJ9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShTWSl9KTtmdW5jdGlvbiBUWShlKXtyZXR1cm4rZT09MT8xOjEtTWF0aC5jb3MoZSpDMXQpfWZ1bmN0aW9uIENZKGUpe3JldHVybiBNYXRoLnNpbihlKkMxdCl9ZnVuY3Rpb24gTEwoZSl7cmV0dXJuKDEtTWF0aC5jb3MoVDF0KmUpKS8yfXZhciBUMXQsQzF0LEExdD1NKCgpPT57VDF0PU1hdGguUEksQzF0PVQxdC8yfSk7ZnVuY3Rpb24gRGgoZSl7cmV0dXJuKE1hdGgucG93KDIsLTEwKmUpLS4wMDA5NzY1NjI1KSoxLjAwMDk3NzUxNzEwNjU0OTR9dmFyIEFZPU0oKCk9Pnt9KTtmdW5jdGlvbiBQWShlKXtyZXR1cm4gRGgoMS0rZSl9ZnVuY3Rpb24gSVkoZSl7cmV0dXJuIDEtRGgoZSl9ZnVuY3Rpb24ga0woZSl7cmV0dXJuKChlKj0yKTw9MT9EaCgxLWUpOjItRGgoZS0xKSkvMn12YXIgUDF0PU0oKCk9PntBWSgpfSk7ZnVuY3Rpb24gTFkoZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX1mdW5jdGlvbiBrWShlKXtyZXR1cm4gTWF0aC5zcXJ0KDEtIC0tZSplKX1mdW5jdGlvbiBSTChlKXtyZXR1cm4oKGUqPTIpPD0xPzEtTWF0aC5zcXJ0KDEtZSplKTpNYXRoLnNxcnQoMS0oZS09MikqZSkrMSkvMn12YXIgSTF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBOWShlKXtyZXR1cm4gMS1QXygxLWUpfWZ1bmN0aW9uIFBfKGUpe3JldHVybihlPStlKTxSWT9OTCplKmU6ZTxvU2U/TkwqKGUtPWlTZSkqZSthU2U6ZTxsU2U/TkwqKGUtPXNTZSkqZStjU2U6TkwqKGUtPXVTZSkqZStoU2V9ZnVuY3Rpb24gRFkoZSl7cmV0dXJuKChlKj0yKTw9MT8xLVBfKDEtZSk6UF8oZS0xKSsxKS8yfXZhciBSWSxpU2Usb1NlLGFTZSxzU2UsbFNlLGNTZSx1U2UsaFNlLE5MLEwxdD1NKCgpPT57Ulk9LjM2MzYzNjM2MzYzNjM2MzY1LGlTZT02LzExLG9TZT04LzExLGFTZT0zLzQsc1NlPTkvMTEsbFNlPTEwLzExLGNTZT0xNS8xNix1U2U9MjEvMjIsaFNlPTYzLzY0LE5MPTEvUlkvUll9KTt2YXIgT1kselksRlksREwsazF0PU0oKCk9PntPWT0xLjcwMTU4LHpZPWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybihuPStuKSpuKih0KihuLTEpK24pfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9ZKSxGWT1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4tLW4qbiooKG4rMSkqdCtuKSsxfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9ZKSxETD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4oKG4qPTIpPDE/bipuKigodCsxKSpuLXQpOihuLT0yKSpuKigodCsxKSpuK3QpKzIpLzJ9cmV0dXJuIHIub3ZlcnNob290PWUscn0oT1kpfSk7dmFyIFNiLEJZLEhZLFZZLE9MLFVZLFIxdD1NKCgpPT57QVkoKTtTYj0yKk1hdGguUEksQlk9MSxIWT0uMyxWWT1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gdCpEaCgtIC0tbykqTWF0aC5zaW4oKG4tbykvcil9cmV0dXJuIGkuYW1wbGl0dWRlPWZ1bmN0aW9uKG8pe3JldHVybiBlKG8scipTYil9LGkucGVyaW9kPWZ1bmN0aW9uKG8pe3JldHVybiBlKHQsbyl9LGl9KEJZLEhZKSxPTD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1TYik7ZnVuY3Rpb24gaShvKXtyZXR1cm4gMS10KkRoKG89K28pKk1hdGguc2luKChvK24pL3IpfXJldHVybiBpLmFtcGxpdHVkZT1mdW5jdGlvbihvKXtyZXR1cm4gZShvLHIqU2IpfSxpLnBlcmlvZD1mdW5jdGlvbihvKXtyZXR1cm4gZSh0LG8pfSxpfShCWSxIWSksVVk9ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPU1hdGguYXNpbigxLyh0PU1hdGgubWF4KDEsdCkpKSooci89U2IpO2Z1bmN0aW9uIGkobyl7cmV0dXJuKChvPW8qMi0xKTwwP3QqRGgoLW8pKk1hdGguc2luKChuLW8pL3IpOjItdCpEaChvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKlNiKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oQlksSFkpfSk7dmFyIE4xdD17fTtLcyhOMXQse2Vhc2VCYWNrOigpPT5ETCxlYXNlQmFja0luOigpPT56WSxlYXNlQmFja0luT3V0OigpPT5ETCxlYXNlQmFja091dDooKT0+RlksZWFzZUJvdW5jZTooKT0+UF8sZWFzZUJvdW5jZUluOigpPT5OWSxlYXNlQm91bmNlSW5PdXQ6KCk9PkRZLGVhc2VCb3VuY2VPdXQ6KCk9PlBfLGVhc2VDaXJjbGU6KCk9PlJMLGVhc2VDaXJjbGVJbjooKT0+TFksZWFzZUNpcmNsZUluT3V0OigpPT5STCxlYXNlQ2lyY2xlT3V0OigpPT5rWSxlYXNlQ3ViaWM6KCk9PnhzLGVhc2VDdWJpY0luOigpPT5iWSxlYXNlQ3ViaWNJbk91dDooKT0+eHMsZWFzZUN1YmljT3V0OigpPT53WSxlYXNlRWxhc3RpYzooKT0+T0wsZWFzZUVsYXN0aWNJbjooKT0+VlksZWFzZUVsYXN0aWNJbk91dDooKT0+VVksZWFzZUVsYXN0aWNPdXQ6KCk9Pk9MLGVhc2VFeHA6KCk9PmtMLGVhc2VFeHBJbjooKT0+UFksZWFzZUV4cEluT3V0OigpPT5rTCxlYXNlRXhwT3V0OigpPT5JWSxlYXNlTGluZWFyOigpPT55WSxlYXNlUG9seTooKT0+SUwsZWFzZVBvbHlJbjooKT0+TVksZWFzZVBvbHlJbk91dDooKT0+SUwsZWFzZVBvbHlPdXQ6KCk9PkVZLGVhc2VRdWFkOigpPT5QTCxlYXNlUXVhZEluOigpPT52WSxlYXNlUXVhZEluT3V0OigpPT5QTCxlYXNlUXVhZE91dDooKT0+eFksZWFzZVNpbjooKT0+TEwsZWFzZVNpbkluOigpPT5UWSxlYXNlU2luSW5PdXQ6KCk9PkxMLGVhc2VTaW5PdXQ6KCk9PkNZfSk7dmFyIElfPU0oKCk9Pnt3MXQoKTtTMXQoKTtNMXQoKTtFMXQoKTtBMXQoKTtQMXQoKTtJMXQoKTtMMXQoKTtrMXQoKTtSMXQoKX0pO2Z1bmN0aW9uIFdMKCl7fWZ1bmN0aW9uIFgxdChlLHQpe3ZhciByPW5ldyBXTDtpZihlIGluc3RhbmNlb2YgV0wpZS5lYWNoKGZ1bmN0aW9uKHMsbCl7ci5zZXQobCxzKX0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG49LTEsaT1lLmxlbmd0aCxvO2lmKHQ9PW51bGwpZm9yKDsrK248aTspci5zZXQobixlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuc2V0KHQobz1lW25dLG4sZSksbyl9ZWxzZSBpZihlKWZvcih2YXIgYSBpbiBlKXIuc2V0KGEsZVthXSk7cmV0dXJuIHJ9dmFyIGVsLEppLFlMPU0oKCk9PntlbD0iJCI7V0wucHJvdG90eXBlPVgxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOldMLGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZWwrZSBpbiB0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbZWwrZV19LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzW2VsK2VdPXQsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWVsK2U7cmV0dXJuIHQgaW4gdGhpcyYmZGVsZXRlIHRoaXNbdF19LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpZVswXT09PWVsJiZkZWxldGUgdGhpc1tlXX0sa2V5czpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHQuc2xpY2UoMSkpO3JldHVybiBlfSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUucHVzaCh0aGlzW3RdKTtyZXR1cm4gZX0sZW50cmllczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmZS5wdXNoKHtrZXk6dC5zbGljZSgxKSx2YWx1ZTp0aGlzW3RdfSk7cmV0dXJuIGV9LHNpemU6ZnVuY3Rpb24oKXt2YXIgZT0wO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1lbCYmKytlO3JldHVybiBlfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzKWlmKGVbMF09PT1lbClyZXR1cm4hMTtyZXR1cm4hMH0sZWFjaDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09ZWwmJmUodGhpc1t0XSx0LnNsaWNlKDEpLHRoaXMpfX07Smk9WDF0fSk7ZnVuY3Rpb24gWjF0KCl7dmFyIGU9W10sdD1bXSxyLG4saTtmdW5jdGlvbiBvKHMsbCxjLHUpe2lmKGw+PWUubGVuZ3RoKXJldHVybiByIT1udWxsJiZzLnNvcnQociksbiE9bnVsbD9uKHMpOnM7Zm9yKHZhciBoPS0xLGY9cy5sZW5ndGgscD1lW2wrK10sZCxnLF89SmkoKSx5LHg9YygpOysraDxmOykoeT1fLmdldChkPXAoZz1zW2hdKSsiIikpP3kucHVzaChnKTpfLnNldChkLFtnXSk7cmV0dXJuIF8uZWFjaChmdW5jdGlvbihiLFMpe3UoeCxTLG8oYixsLGMsdSkpfSkseH1mdW5jdGlvbiBhKHMsbCl7aWYoKytsPmUubGVuZ3RoKXJldHVybiBzO3ZhciBjLHU9dFtsLTFdO3JldHVybiBuIT1udWxsJiZsPj1lLmxlbmd0aD9jPXMuZW50cmllcygpOihjPVtdLHMuZWFjaChmdW5jdGlvbihoLGYpe2MucHVzaCh7a2V5OmYsdmFsdWVzOmEoaCxsKX0pfSkpLHUhPW51bGw/Yy5zb3J0KGZ1bmN0aW9uKGgsZil7cmV0dXJuIHUoaC5rZXksZi5rZXkpfSk6Y31yZXR1cm4gaT17b2JqZWN0OmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCxQU2UsSVNlKX0sbWFwOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMsMCwkMXQsSzF0KX0sZW50cmllczpmdW5jdGlvbihzKXtyZXR1cm4gYShvKHMsMCwkMXQsSzF0KSwwKX0sa2V5OmZ1bmN0aW9uKHMpe3JldHVybiBlLnB1c2gocyksaX0sc29ydEtleXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHRbZS5sZW5ndGgtMV09cyxpfSxzb3J0VmFsdWVzOmZ1bmN0aW9uKHMpe3JldHVybiByPXMsaX0scm9sbHVwOmZ1bmN0aW9uKHMpe3JldHVybiBuPXMsaX19fWZ1bmN0aW9uIFBTZSgpe3JldHVybnt9fWZ1bmN0aW9uIElTZShlLHQscil7ZVt0XT1yfWZ1bmN0aW9uICQxdCgpe3JldHVybiBKaSgpfWZ1bmN0aW9uIEsxdChlLHQscil7ZS5zZXQodCxyKX12YXIgSjF0PU0oKCk9PntZTCgpfSk7ZnVuY3Rpb24gakwoKXt9ZnVuY3Rpb24gUTF0KGUsdCl7dmFyIHI9bmV3IGpMO2lmKGUgaW5zdGFuY2VvZiBqTCllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIga18sdHZ0LGV2dD1NKCgpPT57WUwoKTtrXz1KaS5wcm90b3R5cGU7akwucHJvdG90eXBlPVExdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmpMLGhhczprXy5oYXMsYWRkOmZ1bmN0aW9uKGUpe3JldHVybiBlKz0iIix0aGlzW2VsK2VdPWUsdGhpc30scmVtb3ZlOmtfLnJlbW92ZSxjbGVhcjprXy5jbGVhcix2YWx1ZXM6a18ua2V5cyxzaXplOmtfLnNpemUsZW1wdHk6a18uZW1wdHksZWFjaDprXy5lYWNofTt0dnQ9UTF0fSk7ZnVuY3Rpb24gWEwoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBydnQ9TSgoKT0+e30pO2Z1bmN0aW9uIG52dChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIGl2dD1NKCgpPT57fSk7ZnVuY3Rpb24gb3Z0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBhdnQ9TSgoKT0+e30pO3ZhciBUYj1NKCgpPT57SjF0KCk7ZXZ0KCk7WUwoKTtydnQoKTtpdnQoKTthdnQoKX0pO2Z1bmN0aW9uIGR2dChlKXtyZXR1cm4gbmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK2UubWFwKGZ1bmN0aW9uKHQscil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpKyI6IGRbIityKyddIHx8ICIiJ30pLmpvaW4oIiwiKSsifSIpfWZ1bmN0aW9uIEJTZShlLHQpe3ZhciByPWR2dChlKTtyZXR1cm4gZnVuY3Rpb24obixpKXtyZXR1cm4gdChyKG4pLGksZSl9fWZ1bmN0aW9uIHB2dChlKXt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXtmb3IodmFyIGkgaW4gbilpIGluIHR8fHIucHVzaCh0W2ldPWkpfSkscn1mdW5jdGlvbiB3cyhlLHQpe3ZhciByPWUrIiIsbj1yLmxlbmd0aDtyZXR1cm4gbjx0P25ldyBBcnJheSh0LW4rMSkuam9pbigwKStyOnJ9ZnVuY3Rpb24gSFNlKGUpe3JldHVybiBlPDA/Ii0iK3dzKC1lLDYpOmU+OTk5OT8iKyIrd3MoZSw2KTp3cyhlLDQpfWZ1bmN0aW9uIFZTZShlKXt2YXIgdD1lLmdldFVUQ0hvdXJzKCkscj1lLmdldFVUQ01pbnV0ZXMoKSxuPWUuZ2V0VVRDU2Vjb25kcygpLGk9ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtyZXR1cm4gaXNOYU4oZSk/IkludmFsaWQgRGF0ZSI6SFNlKGUuZ2V0VVRDRnVsbFllYXIoKSw0KSsiLSIrd3MoZS5nZXRVVENNb250aCgpKzEsMikrIi0iK3dzKGUuZ2V0VVRDRGF0ZSgpLDIpKyhpPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyIuIit3cyhpLDMpKyJaIjpuPyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyI6Iit3cyhuLDIpKyJaIjpyfHx0PyJUIit3cyh0LDIpKyI6Iit3cyhyLDIpKyJaIjoiIil9ZnVuY3Rpb24gV20oZSl7dmFyIHQ9bmV3IFJlZ0V4cCgnWyInK2UrYApccl1gKSxyPWUuY2hhckNvZGVBdCgwKTtmdW5jdGlvbiBuKGgsZil7dmFyIHAsZCxnPWkoaCxmdW5jdGlvbihfLHkpe2lmKHApcmV0dXJuIHAoXyx5LTEpO2Q9XyxwPWY/QlNlKF8sZik6ZHZ0KF8pfSk7cmV0dXJuIGcuY29sdW1ucz1kfHxbXSxnfWZ1bmN0aW9uIGkoaCxmKXt2YXIgcD1bXSxkPWgubGVuZ3RoLGc9MCxfPTAseSx4PWQ8PTAsYj0hMTtoLmNoYXJDb2RlQXQoZC0xKT09PVZFJiYtLWQsaC5jaGFyQ29kZUF0KGQtMSk9PT1paiYmLS1kO2Z1bmN0aW9uIFMoKXtpZih4KXJldHVybiByajtpZihiKXJldHVybiBiPSExLGZ2dDt2YXIgUCxrPWcsTztpZihoLmNoYXJDb2RlQXQoayk9PT1uail7Zm9yKDtnKys8ZCYmaC5jaGFyQ29kZUF0KGcpIT09bmp8fGguY2hhckNvZGVBdCgrK2cpPT09bmo7KTtyZXR1cm4oUD1nKT49ZD94PSEwOihPPWguY2hhckNvZGVBdChnKyspKT09PVZFP2I9ITA6Tz09PWlqJiYoYj0hMCxoLmNoYXJDb2RlQXQoZyk9PT1WRSYmKytnKSxoLnNsaWNlKGsrMSxQLTEpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO2c8ZDspe2lmKChPPWguY2hhckNvZGVBdChQPWcrKykpPT09VkUpYj0hMDtlbHNlIGlmKE89PT1pailiPSEwLGguY2hhckNvZGVBdChnKT09PVZFJiYrK2c7ZWxzZSBpZihPIT09ciljb250aW51ZTtyZXR1cm4gaC5zbGljZShrLFApfXJldHVybiB4PSEwLGguc2xpY2UoayxkKX1mb3IoOyh5PVMoKSkhPT1yajspe2Zvcih2YXIgQz1bXTt5IT09ZnZ0JiZ5IT09cmo7KUMucHVzaCh5KSx5PVMoKTtmJiYoQz1mKEMsXysrKSk9PW51bGx8fHAucHVzaChDKX1yZXR1cm4gcH1mdW5jdGlvbiBvKGgsZil7cmV0dXJuIGgubWFwKGZ1bmN0aW9uKHApe3JldHVybiBmLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gdShwW2RdKX0pLmpvaW4oZSl9KX1mdW5jdGlvbiBhKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXB2dChoKSksW2YubWFwKHUpLmpvaW4oZSldLmNvbmNhdChvKGgsZikpLmpvaW4oYApgKX1mdW5jdGlvbiBzKGgsZil7cmV0dXJuIGY9PW51bGwmJihmPXB2dChoKSksbyhoLGYpLmpvaW4oYApgKX1mdW5jdGlvbiBsKGgpe3JldHVybiBoLm1hcChjKS5qb2luKGAKYCl9ZnVuY3Rpb24gYyhoKXtyZXR1cm4gaC5tYXAodSkuam9pbihlKX1mdW5jdGlvbiB1KGgpe3JldHVybiBoPT1udWxsPyIiOmggaW5zdGFuY2VvZiBEYXRlP1ZTZShoKTp0LnRlc3QoaCs9IiIpPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aH1yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6YSxmb3JtYXRCb2R5OnMsZm9ybWF0Um93czpsLGZvcm1hdFJvdzpjLGZvcm1hdFZhbHVlOnV9fXZhciBmdnQscmosbmosVkUsaWosUUw9TSgoKT0+e2Z2dD17fSxyaj17fSxuaj0zNCxWRT0xMCxpaj0xM30pO3ZhciBSXyxDYixtdnQsZ3Z0LF92dCx5dnQsdnZ0LHh2dCxidnQ9TSgoKT0+e1FMKCk7Ul89V20oIiwiKSxDYj1SXy5wYXJzZSxtdnQ9Ul8ucGFyc2VSb3dzLGd2dD1SXy5mb3JtYXQsX3Z0PVJfLmZvcm1hdEJvZHkseXZ0PVJfLmZvcm1hdFJvd3MsdnZ0PVJfLmZvcm1hdFJvdyx4dnQ9Ul8uZm9ybWF0VmFsdWV9KTt2YXIgTl8sQWIsd3Z0LFN2dCxNdnQsRXZ0LFR2dCxDdnQsQXZ0PU0oKCk9PntRTCgpO05fPVdtKCIJIiksQWI9Tl8ucGFyc2Usd3Z0PU5fLnBhcnNlUm93cyxTdnQ9Tl8uZm9ybWF0LE12dD1OXy5mb3JtYXRCb2R5LEV2dD1OXy5mb3JtYXRSb3dzLFR2dD1OXy5mb3JtYXRSb3csQ3Z0PU5fLmZvcm1hdFZhbHVlfSk7ZnVuY3Rpb24gb2ooZSl7Zm9yKHZhciB0IGluIGUpe3ZhciByPWVbdF0udHJpbSgpLG4saTtpZighcilyPW51bGw7ZWxzZSBpZihyPT09InRydWUiKXI9ITA7ZWxzZSBpZihyPT09ImZhbHNlIilyPSExO2Vsc2UgaWYocj09PSJOYU4iKXI9TmFOO2Vsc2UgaWYoIWlzTmFOKG49K3IpKXI9bjtlbHNlIGlmKGk9ci5tYXRjaCgvXihbLStdXGR7Mn0pP1xkezR9KC1cZHsyfSgtXGR7Mn0pPyk/KFRcZHsyfTpcZHsyfSg6XGR7Mn0oXC5cZHszfSk/KT8oWnxbLStdXGR7Mn06XGR7Mn0pPyk/JC8pKVVTZSYmISFpWzRdJiYhaVs3XSYmKHI9ci5yZXBsYWNlKC8tL2csIi8iKS5yZXBsYWNlKC9ULywiICIpKSxyPW5ldyBEYXRlKHIpO2Vsc2UgY29udGludWU7ZVt0XT1yfXJldHVybiBlfXZhciBVU2UsUHZ0PU0oKCk9PntVU2U9bmV3IERhdGUoIjIwMTktMDEtMDFUMDA6MDAiKS5nZXRIb3VycygpfHxuZXcgRGF0ZSgiMjAxOS0wNy0wMVQwMDowMCIpLmdldEhvdXJzKCl9KTt2YXIgVUU9TSgoKT0+e1FMKCk7YnZ0KCk7QXZ0KCk7UHZ0KCl9KTt2YXIgcGU9e307S3MocGUse19fYXNzaWduOigpPT5wNWUsX19hc3luY0RlbGVnYXRvcjooKT0+UzVlLF9fYXN5bmNHZW5lcmF0b3I6KCk9Pnc1ZSxfX2FzeW5jVmFsdWVzOigpPT5NNWUsX19hd2FpdDooKT0+VjUsX19hd2FpdGVyOigpPT55NWUsX19kZWNvcmF0ZTooKT0+bTVlLF9fZXhwb3J0U3RhcjooKT0+eDVlLF9fZXh0ZW5kczooKT0+ZjVlLF9fZ2VuZXJhdG9yOigpPT52NWUsX19tYWtlVGVtcGxhdGVPYmplY3Q6KCk9PkU1ZSxfX21ldGFkYXRhOigpPT5fNWUsX19wYXJhbTooKT0+ZzVlLF9fcmVhZDooKT0+SjN0LF9fcmVzdDooKT0+ZDVlLF9fc3ByZWFkOigpPT5iNWUsX192YWx1ZXM6KCk9PnYkfSk7ZnVuY3Rpb24gZjVlKGUsdCl7aDVlKGUsdCk7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9ZX1lLnByb3RvdHlwZT10PT09bnVsbD9PYmplY3QuY3JlYXRlKHQpOihyLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgcil9ZnVuY3Rpb24gZDVlKGUsdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJnQuaW5kZXhPZihuKTwwJiYocltuXT1lW25dKTtpZihlIT1udWxsJiZ0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIilmb3IodmFyIGk9MCxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7aTxuLmxlbmd0aDtpKyspdC5pbmRleE9mKG5baV0pPDAmJihyW25baV1dPWVbbltpXV0pO3JldHVybiByfWZ1bmN0aW9uIG01ZShlLHQscixuKXt2YXIgaT1hcmd1bWVudHMubGVuZ3RoLG89aTwzP3Q6bj09PW51bGw/bj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQscik6bixhO2lmKHR5cGVvZiBSZWZsZWN0PT0ib2JqZWN0IiYmdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGU9PSJmdW5jdGlvbiIpbz1SZWZsZWN0LmRlY29yYXRlKGUsdCxyLG4pO2Vsc2UgZm9yKHZhciBzPWUubGVuZ3RoLTE7cz49MDtzLS0pKGE9ZVtzXSkmJihvPShpPDM/YShvKTppPjM/YSh0LHIsbyk6YSh0LHIpKXx8byk7cmV0dXJuIGk+MyYmbyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQscixvKSxvfWZ1bmN0aW9uIGc1ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3QocixuLGUpfX1mdW5jdGlvbiBfNWUoZSx0KXtpZih0eXBlb2YgUmVmbGVjdD09Im9iamVjdCImJnR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhPT0iZnVuY3Rpb24iKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGUsdCl9ZnVuY3Rpb24geTVlKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShjKXt0cnl7bChuLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIHMoYyl7dHJ5e2wobi50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/aShjLnZhbHVlKTpuZXcgcihmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihhLHMpfWwoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfWZ1bmN0aW9uIHY1ZShlLHQpe3ZhciByPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZihvWzBdJjEpdGhyb3cgb1sxXTtyZXR1cm4gb1sxXX0sdHJ5czpbXSxvcHM6W119LG4saSxvLGE7cmV0dXJuIGE9e25leHQ6cygwKSx0aHJvdzpzKDEpLHJldHVybjpzKDIpfSx0eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiYoYVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhO2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBsKFtjLHVdKX19ZnVuY3Rpb24gbChjKXtpZihuKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3I7KXRyeXtpZihuPTEsaSYmKG89aVtjWzBdJjI/InJldHVybiI6Y1swXT8idGhyb3ciOiJuZXh0Il0pJiYhKG89by5jYWxsKGksY1sxXSkpLmRvbmUpcmV0dXJuIG87c3dpdGNoKGk9MCxvJiYoYz1bMCxvLnZhbHVlXSksY1swXSl7Y2FzZSAwOmNhc2UgMTpvPWM7YnJlYWs7Y2FzZSA0OnJldHVybiByLmxhYmVsKysse3ZhbHVlOmNbMV0sZG9uZTohMX07Y2FzZSA1OnIubGFiZWwrKyxpPWNbMV0sYz1bMF07Y29udGludWU7Y2FzZSA3OmM9ci5vcHMucG9wKCksci50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYobz1yLnRyeXMsIShvPW8ubGVuZ3RoPjAmJm9bby5sZW5ndGgtMV0pJiYoY1swXT09PTZ8fGNbMF09PT0yKSl7cj0wO2NvbnRpbnVlfWlmKGNbMF09PT0zJiYoIW98fGNbMV0+b1swXSYmY1sxXTxvWzNdKSl7ci5sYWJlbD1jWzFdO2JyZWFrfWlmKGNbMF09PT02JiZyLmxhYmVsPG9bMV0pe3IubGFiZWw9b1sxXSxvPWM7YnJlYWt9aWYobyYmci5sYWJlbDxvWzJdKXtyLmxhYmVsPW9bMl0sci5vcHMucHVzaChjKTticmVha31vWzJdJiZyLm9wcy5wb3AoKSxyLnRyeXMucG9wKCk7Y29udGludWV9Yz10LmNhbGwoZSxyKX1jYXRjaCh1KXtjPVs2LHVdLGk9MH1maW5hbGx5e249bz0wfWlmKGNbMF0mNSl0aHJvdyBjWzFdO3JldHVybnt2YWx1ZTpjWzBdP2NbMV06dm9pZCAwLGRvbmU6ITB9fX1mdW5jdGlvbiB4NWUoZSx0KXtmb3IodmFyIHIgaW4gZSl0Lmhhc093blByb3BlcnR5KHIpfHwodFtyXT1lW3JdKX1mdW5jdGlvbiB2JChlKXt2YXIgdD10eXBlb2YgU3ltYm9sPT0iZnVuY3Rpb24iJiZlW1N5bWJvbC5pdGVyYXRvcl0scj0wO3JldHVybiB0P3QuY2FsbChlKTp7bmV4dDpmdW5jdGlvbigpe3JldHVybiBlJiZyPj1lLmxlbmd0aCYmKGU9dm9pZCAwKSx7dmFsdWU6ZSYmZVtyKytdLGRvbmU6IWV9fX19ZnVuY3Rpb24gSjN0KGUsdCl7dmFyIHI9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmZVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFyKXJldHVybiBlO3ZhciBuPXIuY2FsbChlKSxpLG89W10sYTt0cnl7Zm9yKDsodD09PXZvaWQgMHx8dC0tID4wKSYmIShpPW4ubmV4dCgpKS5kb25lOylvLnB1c2goaS52YWx1ZSl9Y2F0Y2gocyl7YT17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKHI9bi5yZXR1cm4pJiZyLmNhbGwobil9ZmluYWxseXtpZihhKXRocm93IGEuZXJyb3J9fXJldHVybiBvfWZ1bmN0aW9uIGI1ZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllPWUuY29uY2F0KEozdChhcmd1bWVudHNbdF0pKTtyZXR1cm4gZX1mdW5jdGlvbiBWNShlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFY1Pyh0aGlzLnY9ZSx0aGlzKTpuZXcgVjUoZSl9ZnVuY3Rpb24gdzVlKGUsdCxyKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG49ci5hcHBseShlLHR8fFtdKSxpLG89W107cmV0dXJuIGk9e30sYSgibmV4dCIpLGEoInRocm93IiksYSgicmV0dXJuIiksaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saTtmdW5jdGlvbiBhKGYpe25bZl0mJihpW2ZdPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGcpe28ucHVzaChbZixwLGQsZ10pPjF8fHMoZixwKX0pfSl9ZnVuY3Rpb24gcyhmLHApe3RyeXtsKG5bZl0ocCkpfWNhdGNoKGQpe2gob1swXVszXSxkKX19ZnVuY3Rpb24gbChmKXtmLnZhbHVlIGluc3RhbmNlb2YgVjU/UHJvbWlzZS5yZXNvbHZlKGYudmFsdWUudikudGhlbihjLHUpOmgob1swXVsyXSxmKX1mdW5jdGlvbiBjKGYpe3MoIm5leHQiLGYpfWZ1bmN0aW9uIHUoZil7cygidGhyb3ciLGYpfWZ1bmN0aW9uIGgoZixwKXtmKHApLG8uc2hpZnQoKSxvLmxlbmd0aCYmcyhvWzBdWzBdLG9bMF1bMV0pfX1mdW5jdGlvbiBTNWUoZSl7dmFyIHQscjtyZXR1cm4gdD17fSxuKCJuZXh0IiksbigidGhyb3ciLGZ1bmN0aW9uKGkpe3Rocm93IGl9KSxuKCJyZXR1cm4iKSx0W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdDtmdW5jdGlvbiBuKGksbyl7ZVtpXSYmKHRbaV09ZnVuY3Rpb24oYSl7cmV0dXJuKHI9IXIpP3t2YWx1ZTpWNShlW2ldKGEpKSxkb25lOmk9PT0icmV0dXJuIn06bz9vKGEpOmF9KX19ZnVuY3Rpb24gTTVlKGUpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIgdD1lW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gdD90LmNhbGwoZSk6dHlwZW9mIHYkPT0iZnVuY3Rpb24iP3YkKGUpOmVbU3ltYm9sLml0ZXJhdG9yXSgpfWZ1bmN0aW9uIEU1ZShlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9dmFyIGg1ZSxwNWUsZGU9TSgoKT0+e2g1ZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX07cDVlPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoO248aTtuKyspe3I9YXJndW1lbnRzW25dO2Zvcih2YXIgbyBpbiByKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLG8pJiYodFtvXT1yW29dKX1yZXR1cm4gdH19KTt2YXIgUTN0LHRNdD1NKCgpPT57UTN0PSI0LjEzLjAifSk7ZnVuY3Rpb24gX2MoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIHB5PU0oKCk9Pnt9KTtmdW5jdGlvbiBvUihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1UNWUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBUNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9jKGUodCkscil9fXZhciB4JD1NKCgpPT57cHkoKX0pO3ZhciBlTXQsYiQsck10LGFSLHckPU0oKCk9PntweSgpO3gkKCk7ZU10PW9SKF9jKSxiJD1lTXQucmlnaHQsck10PWVNdC5sZWZ0LGFSPWIkfSk7ZnVuY3Rpb24gbk10KGUsdCl7dD09bnVsbCYmKHQ9UyQpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24gUyQoZSx0KXtyZXR1cm5bZSx0XX12YXIgTSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlNdChlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPVMkKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfXZhciBvTXQ9TSgoKT0+e00kKCl9KTtmdW5jdGlvbiBhTXQoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59dmFyIHNNdD1NKCgpPT57fSk7ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgbDI9TSgoKT0+e30pO2Z1bmN0aW9uIHNSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPWFsKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1hbCh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfXZhciBFJD1NKCgpPT57bDIoKX0pO2Z1bmN0aW9uIGxSKGUsdCl7dmFyIHI9c1IoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfXZhciBUJD1NKCgpPT57RSQoKX0pO2Z1bmN0aW9uIGNSKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIEMkPU0oKCk9Pnt9KTt2YXIgbE10LGNNdCx1TXQsQSQ9TSgoKT0+e2xNdD1BcnJheS5wcm90b3R5cGUsY010PWxNdC5zbGljZSx1TXQ9bE10Lm1hcH0pO2Z1bmN0aW9uIFU1KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgaE10PU0oKCk9Pnt9KTtmdW5jdGlvbiBmTXQoZSl7cmV0dXJuIGV9dmFyIHBNdD1NKCgpPT57fSk7ZnVuY3Rpb24gdVIoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIFAkPU0oKCk9Pnt9KTtmdW5jdGlvbiBkTXQoZSx0LHIpe3ZhciBuLGk9LTEsbyxhLHM7aWYodD0rdCxlPStlLHI9K3IsZT09PXQmJnI+MClyZXR1cm5bZV07aWYoKG49dDxlKSYmKG89ZSxlPXQsdD1vKSwocz1SJChlLHQscikpPT09MHx8IWlzRmluaXRlKHMpKXJldHVybltdO2lmKHM+MClmb3IoZT1NYXRoLmNlaWwoZS9zKSx0PU1hdGguZmxvb3IodC9zKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbCh0LWUrMSkpOysraTxvOylhW2ldPShlK2kpKnM7ZWxzZSBmb3IoZT1NYXRoLmZsb29yKGUqcyksdD1NYXRoLmNlaWwodCpzKSxhPW5ldyBBcnJheShvPU1hdGguY2VpbChlLXQrMSkpOysraTxvOylhW2ldPShlLWkpL3M7cmV0dXJuIG4mJmEucmV2ZXJzZSgpLGF9ZnVuY3Rpb24gUiQoZSx0LHIpe3ZhciBuPSh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksbz1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhvPj1JJD8xMDpvPj1MJD81Om8+PWskPzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8obz49SSQ/MTA6bz49TCQ/NTpvPj1rJD8yOjEpfWZ1bmN0aW9uIGhSKGUsdCxyKXt2YXIgbj1NYXRoLmFicyh0LWUpL01hdGgubWF4KDAsciksaT1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCkpLG89bi9pO3JldHVybiBvPj1JJD9pKj0xMDpvPj1MJD9pKj01Om8+PWskJiYoaSo9MiksdDxlPy1pOml9dmFyIEkkLEwkLGskLE4kPU0oKCk9PntJJD1NYXRoLnNxcnQoNTApLEwkPU1hdGguc3FydCgxMCksayQ9TWF0aC5zcXJ0KDIpfSk7ZnVuY3Rpb24gZlIoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZyhlLmxlbmd0aCkvTWF0aC5MTjIpKzF9dmFyIEQkPU0oKCk9Pnt9KTtmdW5jdGlvbiBtTXQoKXt2YXIgZT1mTXQsdD1jUixyPWZSO2Z1bmN0aW9uIG4oaSl7dmFyIG8sYT1pLmxlbmd0aCxzLGw9bmV3IEFycmF5KGEpO2ZvcihvPTA7bzxhOysrbylsW29dPWUoaVtvXSxvLGkpO3ZhciBjPXQobCksdT1jWzBdLGg9Y1sxXSxmPXIobCx1LGgpO0FycmF5LmlzQXJyYXkoZil8fChmPWhSKHUsaCxmKSxmPXVSKE1hdGguY2VpbCh1L2YpKmYsTWF0aC5mbG9vcihoL2YpKmYsZikpO2Zvcih2YXIgcD1mLmxlbmd0aDtmWzBdPD11OylmLnNoaWZ0KCksLS1wO2Zvcig7ZltwLTFdPmg7KWYucG9wKCksLS1wO3ZhciBkPW5ldyBBcnJheShwKzEpLGc7Zm9yKG89MDtvPD1wOysrbylnPWRbb109W10sZy54MD1vPjA/ZltvLTFdOnUsZy54MT1vPHA/ZltvXTpoO2ZvcihvPTA7bzxhOysrbylzPWxbb10sdTw9cyYmczw9aCYmZFthUihmLHMsMCxwKV0ucHVzaChpW29dKTtyZXR1cm4gZH1yZXR1cm4gbi52YWx1ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOlU1KGkpLG4pOmV9LG4uZG9tYWluPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6VTUoW2lbMF0saVsxXV0pLG4pOnR9LG4udGhyZXNob2xkcz1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkFycmF5LmlzQXJyYXkoaSk/VTUoY010LmNhbGwoaSkpOlU1KGkpLG4pOnJ9LG59dmFyIGdNdD1NKCgpPT57QSQoKTt3JCgpO2hNdCgpO0MkKCk7cE10KCk7UCQoKTtOJCgpO0QkKCl9KTtmdW5jdGlvbiBkeShlLHQscil7aWYocj09bnVsbCYmKHI9YWwpLCEhKG49ZS5sZW5ndGgpKXtpZigodD0rdCk8PTB8fG48MilyZXR1cm4rcihlWzBdLDAsZSk7aWYodD49MSlyZXR1cm4rcihlW24tMV0sbi0xLGUpO3ZhciBuLGk9KG4tMSkqdCxvPU1hdGguZmxvb3IoaSksYT0rcihlW29dLG8sZSkscz0rcihlW28rMV0sbysxLGUpO3JldHVybiBhKyhzLWEpKihpLW8pfX12YXIgcFI9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBfTXQoZSx0LHIpe3JldHVybiBlPXVNdC5jYWxsKGUsYWwpLnNvcnQoX2MpLE1hdGguY2VpbCgoci10KS8oMiooZHkoZSwuNzUpLWR5KGUsLjI1KSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgeU10PU0oKCk9PntBJCgpO3B5KCk7bDIoKTtwUigpfSk7ZnVuY3Rpb24gdk10KGUsdCxyKXtyZXR1cm4gTWF0aC5jZWlsKChyLXQpLygzLjUqbFIoZSkqTWF0aC5wb3coZS5sZW5ndGgsLTEvMykpKX12YXIgeE10PU0oKCk9PntUJCgpfSk7ZnVuY3Rpb24gYk10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG87aWYodD09bnVsbCl7Zm9yKDsrK248cjspaWYoKGk9ZVtuXSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9ZVtuXSkhPW51bGwmJmk+byYmKG89aSl9ZWxzZSBmb3IoOysrbjxyOylpZigoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+PWkpZm9yKG89aTsrK248cjspKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPm8mJihvPWkpO3JldHVybiBvfXZhciB3TXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNNdChlLHQpe3ZhciByPWUubGVuZ3RoLG49cixpPS0xLG8sYT0wO2lmKHQ9PW51bGwpZm9yKDsrK2k8cjspaXNOYU4obz1hbChlW2ldKSk/LS1uOmErPW87ZWxzZSBmb3IoOysraTxyOylpc05hTihvPWFsKHQoZVtpXSxpLGUpKSk/LS1uOmErPW87aWYobilyZXR1cm4gYS9ufXZhciBNTXQ9TSgoKT0+e2wyKCl9KTtmdW5jdGlvbiBFTXQoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbz1bXTtpZih0PT1udWxsKWZvcig7KytuPHI7KWlzTmFOKGk9YWwoZVtuXSkpfHxvLnB1c2goaSk7ZWxzZSBmb3IoOysrbjxyOylpc05hTihpPWFsKHQoZVtuXSxuLGUpKSl8fG8ucHVzaChpKTtyZXR1cm4gZHkoby5zb3J0KF9jKSwuNSl9dmFyIFRNdD1NKCgpPT57cHkoKTtsMigpO3BSKCl9KTtmdW5jdGlvbiBDTXQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHIsbj0tMSxpPTAsbyxhOysrbjx0OylpKz1lW25dLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkoaSk7LS10Pj0wOylmb3IoYT1lW3RdLHI9YS5sZW5ndGg7LS1yPj0wOylvWy0taV09YVtyXTtyZXR1cm4gb312YXIgQU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBkUihlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvO2lmKHQ9PW51bGwpe2Zvcig7KytuPHI7KWlmKChpPWVbbl0pIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiZvPmkmJihvPWkpfWVsc2UgZm9yKDsrK248cjspaWYoKGk9dChlW25dLG4sZSkpIT1udWxsJiZpPj1pKWZvcihvPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmbz5pJiYobz1pKTtyZXR1cm4gb312YXIgTyQ9TSgoKT0+e30pO2Z1bmN0aW9uIFBNdChlLHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09ZVt0W3JdXTtyZXR1cm4gbn12YXIgSU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBMTXQoZSx0KXtpZighIShyPWUubGVuZ3RoKSl7dmFyIHIsbj0wLGk9MCxvLGE9ZVtpXTtmb3IodD09bnVsbCYmKHQ9X2MpOysrbjxyOykodChvPWVbbl0sYSk8MHx8dChhLGEpIT09MCkmJihhPW8saT1uKTtpZih0KGEsYSk9PT0wKXJldHVybiBpfX12YXIga010PU0oKCk9PntweSgpfSk7ZnVuY3Rpb24gUk10KGUsdCxyKXtmb3IodmFyIG49KHI9PW51bGw/ZS5sZW5ndGg6ciktKHQ9dD09bnVsbD8wOit0KSxpLG87bjspbz1NYXRoLnJhbmRvbSgpKm4tLXwwLGk9ZVtuK3RdLGVbbit0XT1lW28rdF0sZVtvK3RdPWk7cmV0dXJuIGV9dmFyIE5NdD1NKCgpPT57fSk7ZnVuY3Rpb24gRE10KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89MDtpZih0PT1udWxsKWZvcig7KytuPHI7KShpPStlW25dKSYmKG8rPWkpO2Vsc2UgZm9yKDsrK248cjspKGk9K3QoZVtuXSxuLGUpKSYmKG8rPWkpO3JldHVybiBvfXZhciBPTXQ9TSgoKT0+e30pO2Z1bmN0aW9uIG1SKGUpe2lmKCEobz1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciB0PS0xLHI9ZFIoZSxDNWUpLG49bmV3IEFycmF5KHIpOysrdDxyOylmb3IodmFyIGk9LTEsbyxhPW5bdF09bmV3IEFycmF5KG8pOysraTxvOylhW2ldPWVbaV1bdF07cmV0dXJuIG59ZnVuY3Rpb24gQzVlKGUpe3JldHVybiBlLmxlbmd0aH12YXIgeiQ9TSgoKT0+e08kKCl9KTtmdW5jdGlvbiB6TXQoKXtyZXR1cm4gbVIoYXJndW1lbnRzKX12YXIgRk10PU0oKCk9Pnt6JCgpfSk7dmFyIEJNdD1NKCgpPT57dyQoKTtweSgpO3gkKCk7b010KCk7c010KCk7VCQoKTtDJCgpO2dNdCgpO3lNdCgpO3hNdCgpO0QkKCk7d010KCk7TU10KCk7VE10KCk7QU10KCk7TyQoKTtNJCgpO0lNdCgpO3BSKCk7UCQoKTtrTXQoKTtOTXQoKTtPTXQoKTtOJCgpO3okKCk7RSQoKTtGTXQoKX0pO3ZhciBnUixITXQ9TSgoKT0+e2dSPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFZNdChlKXtyZXR1cm4gZX12YXIgVU10PU0oKCk9Pnt9KTtmdW5jdGlvbiBBNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgiKyhlKy41KSsiLDApIn1mdW5jdGlvbiBQNWUoZSl7cmV0dXJuInRyYW5zbGF0ZSgwLCIrKGUrLjUpKyIpIn1mdW5jdGlvbiBJNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybitlKHQpfX1mdW5jdGlvbiBMNWUoZSl7dmFyIHQ9TWF0aC5tYXgoMCxlLmJhbmR3aWR0aCgpLTEpLzI7cmV0dXJuIGUucm91bmQoKSYmKHQ9TWF0aC5yb3VuZCh0KSksZnVuY3Rpb24ocil7cmV0dXJuK2UocikrdH19ZnVuY3Rpb24gazVlKCl7cmV0dXJuIXRoaXMuX19heGlzfWZ1bmN0aW9uIHZSKGUsdCl7dmFyIHI9W10sbj1udWxsLGk9bnVsbCxvPTYsYT02LHM9MyxsPWU9PT1fUnx8ZT09PXE1Py0xOjEsYz1lPT09cTV8fGU9PT15Uj8ieCI6InkiLHU9ZT09PV9SfHxlPT09RiQ/QTVlOlA1ZTtmdW5jdGlvbiBoKGYpe3ZhciBwPW49PW51bGw/dC50aWNrcz90LnRpY2tzLmFwcGx5KHQscik6dC5kb21haW4oKTpuLGQ9aT09bnVsbD90LnRpY2tGb3JtYXQ/dC50aWNrRm9ybWF0LmFwcGx5KHQscik6Vk10OmksZz1NYXRoLm1heChvLDApK3MsXz10LnJhbmdlKCkseT0rX1swXSsuNSx4PStfW18ubGVuZ3RoLTFdKy41LGI9KHQuYmFuZHdpZHRoP0w1ZTpJNWUpKHQuY29weSgpKSxTPWYuc2VsZWN0aW9uP2Yuc2VsZWN0aW9uKCk6ZixDPVMuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFA9Uy5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShwLHQpLm9yZGVyKCksaz1QLmV4aXQoKSxPPVAuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRpY2siKSxEPVAuc2VsZWN0KCJsaW5lIiksQj1QLnNlbGVjdCgidGV4dCIpO0M9Qy5tZXJnZShDLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsIiMwMDAiKS5hdHRyKGMrIjIiLGwqbykpLEI9Qi5tZXJnZShPLmFwcGVuZCgidGV4dCIpLmF0dHIoImZpbGwiLCIjMDAwIikuYXR0cihjLGwqZykuYXR0cigiZHkiLGU9PT1fUj8iMGVtIjplPT09RiQ/IjAuNzFlbSI6IjAuMzJlbSIpKSxmIT09UyYmKEM9Qy50cmFuc2l0aW9uKGYpLFA9UC50cmFuc2l0aW9uKGYpLEQ9RC50cmFuc2l0aW9uKGYpLEI9Qi50cmFuc2l0aW9uKGYpLGs9ay50cmFuc2l0aW9uKGYpLmF0dHIoIm9wYWNpdHkiLHFNdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gaXNGaW5pdGUoST1iKEkpKT91KEkpOnRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKX0pLE8uYXR0cigib3BhY2l0eSIscU10KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3ZhciBMPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoTCYmaXNGaW5pdGUoTD1MKEkpKT9MOmIoSSkpfSkpLGsucmVtb3ZlKCksQy5hdHRyKCJkIixlPT09cTV8fGU9PXlSPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYSksUC5hdHRyKCJvcGFjaXR5IiwxKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKEkpe3JldHVybiB1KGIoSSkpfSksRC5hdHRyKGMrIjIiLGwqbyksQi5hdHRyKGMsbCpnKS50ZXh0KGQpLFMuZmlsdGVyKGs1ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsZT09PXlSPyJzdGFydCI6ZT09PXE1PyJlbmQiOiJtaWRkbGUiKSxTLmVhY2goZnVuY3Rpb24oKXt0aGlzLl9fYXhpcz1ifSl9cmV0dXJuIGguc2NhbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZixoKTp0fSxoLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHI9Z1IuY2FsbChhcmd1bWVudHMpLGh9LGgudGlja0FyZ3VtZW50cz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mPT1udWxsP1tdOmdSLmNhbGwoZiksaCk6ci5zbGljZSgpfSxoLnRpY2tWYWx1ZXM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Zj09bnVsbD9udWxsOmdSLmNhbGwoZiksaCk6biYmbi5zbGljZSgpfSxoLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ZixoKTppfSxoLnRpY2tTaXplPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWE9K2YsaCk6b30saC50aWNrU2l6ZUlubmVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStmLGgpOm99LGgudGlja1NpemVPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rZixoKTphfSxoLnRpY2tQYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPStmLGgpOnN9LGh9ZnVuY3Rpb24gR010KGUpe3JldHVybiB2UihfUixlKX1mdW5jdGlvbiBXTXQoZSl7cmV0dXJuIHZSKHlSLGUpfWZ1bmN0aW9uIFlNdChlKXtyZXR1cm4gdlIoRiQsZSl9ZnVuY3Rpb24gak10KGUpe3JldHVybiB2UihxNSxlKX12YXIgX1IseVIsRiQscTUscU10LFhNdD1NKCgpPT57SE10KCk7VU10KCk7X1I9MSx5Uj0yLEYkPTMscTU9NCxxTXQ9MWUtNn0pO3ZhciAkTXQ9TSgoKT0+e1hNdCgpfSk7ZnVuY3Rpb24gWk10KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IHhSKHIpfWZ1bmN0aW9uIHhSKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIE41ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIEQ1ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEtNdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09UjVlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgUjVlLEc1LEpNdD1NKCgpPT57UjVlPXt2YWx1ZTpmdW5jdGlvbigpe319O3hSLnByb3RvdHlwZT1aTXQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4UixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPU41ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPUQ1ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09S010KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09S010KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyB4UihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07RzU9Wk10fSk7dmFyIEIkPU0oKCk9PntKTXQoKX0pO3ZhciBiUixIJCxWJD1NKCgpPT57YlI9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEgkPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpiUix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gVnAoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksSCQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkgkW3RdLGxvY2FsOmV9OmV9dmFyIHdSPU0oKCk9PntWJCgpfSk7ZnVuY3Rpb24gTzVlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09YlImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PWJSP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiB6NWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gU1IoZSl7dmFyIHQ9VnAoZSk7cmV0dXJuKHQubG9jYWw/ejVlOk81ZSkodCl9dmFyIFUkPU0oKCk9Pnt3UigpO1YkKCl9KTtmdW5jdGlvbiBGNWUoKXt9ZnVuY3Rpb24gbXkoZSl7cmV0dXJuIGU9PW51bGw/RjVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihlKX19dmFyIE1SPU0oKCk9Pnt9KTtmdW5jdGlvbiBRTXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgcGkobix0aGlzLl9wYXJlbnRzKX12YXIgdEV0PU0oKCk9Pnt3dSgpO01SKCl9KTtmdW5jdGlvbiBCNWUoKXtyZXR1cm5bXX1mdW5jdGlvbiBXNShlKXtyZXR1cm4gZT09bnVsbD9CNWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgcSQ9TSgoKT0+e30pO2Z1bmN0aW9uIGVFdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VzUoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IHBpKG4saSl9dmFyIHJFdD1NKCgpPT57d3UoKTtxJCgpfSk7ZnVuY3Rpb24gWTUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIEckPU0oKCk9Pnt9KTtmdW5jdGlvbiBuRXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVk1KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBwaShuLHRoaXMuX3BhcmVudHMpfXZhciBpRXQ9TSgoKT0+e3d1KCk7RyQoKX0pO2Z1bmN0aW9uIEVSKGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBXJD1NKCgpPT57fSk7ZnVuY3Rpb24gb0V0KCl7cmV0dXJuIG5ldyBwaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChFUiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gajUoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFkkPU0oKCk9PntXJCgpO3d1KCk7ajUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpqNSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIGFFdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIHNFdD1NKCgpPT57fSk7ZnVuY3Rpb24gSDVlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyBqNShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gVjVlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9bEV0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9bEV0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IGo1KGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gY0V0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9WNWU6SDVlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9YUV0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBwaShhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGxFdCx1RXQ9TSgoKT0+e3d1KCk7WSQoKTtzRXQoKTtsRXQ9IiQifSk7ZnVuY3Rpb24gaEV0KCl7cmV0dXJuIG5ldyBwaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKEVSKSx0aGlzLl9wYXJlbnRzKX12YXIgZkV0PU0oKCk9PntXJCgpO3d1KCl9KTtmdW5jdGlvbiBwRXQoZSx0LHIpe3ZhciBuPXRoaXMuZW50ZXIoKSxpPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKG4pOm4uYXBwZW5kKGUrIiIpLHQhPW51bGwmJihpPXQoaSkpLHI9PW51bGw/by5yZW1vdmUoKTpyKG8pLG4mJmk/bi5tZXJnZShpKS5vcmRlcigpOml9dmFyIGRFdD1NKCgpPT57fSk7ZnVuY3Rpb24gbUV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj1lLl9ncm91cHMsbj10Lmxlbmd0aCxpPXIubGVuZ3RoLG89TWF0aC5taW4obixpKSxhPW5ldyBBcnJheShuKSxzPTA7czxvOysrcylmb3IodmFyIGw9dFtzXSxjPXJbc10sdT1sLmxlbmd0aCxoPWFbc109bmV3IEFycmF5KHUpLGYscD0wO3A8dTsrK3ApKGY9bFtwXXx8Y1twXSkmJihoW3BdPWYpO2Zvcig7czxuOysrcylhW3NdPXRbc107cmV0dXJuIG5ldyBwaShhLHRoaXMuX3BhcmVudHMpfXZhciBnRXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiBfRXQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfXZhciB5RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZFdChlKXtlfHwoZT1VNWUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgcGkoaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIFU1ZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn12YXIgeEV0PU0oKCk9Pnt3dSgpfSk7ZnVuY3Rpb24gYkV0KCl7dmFyIGU9YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxlLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfXZhciB3RXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNFdCgpe3ZhciBlPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZVsrK3RdPXRoaXN9KSxlfXZhciBNRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVFdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0wLHI9ZS5sZW5ndGg7dDxyOysrdClmb3IodmFyIG49ZVt0XSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKXt2YXIgYT1uW2ldO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9dmFyIFRFdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ0V0KCl7dmFyIGU9MDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7KytlfSksZX12YXIgQUV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQRXQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9dmFyIElFdD1NKCgpPT57fSk7ZnVuY3Rpb24gTEV0KGUpe2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxvPTAsYT1pLmxlbmd0aCxzO288YTsrK28pKHM9aVtvXSkmJmUuY2FsbChzLHMuX19kYXRhX18sbyxpKTtyZXR1cm4gdGhpc312YXIga0V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBxNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIEc1ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFc1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKGUsdCl9fWZ1bmN0aW9uIFk1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHQpfX1mdW5jdGlvbiBqNWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUscil9fWZ1bmN0aW9uIFg1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOnRoaXMuc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLHIpfX1mdW5jdGlvbiBSRXQoZSx0KXt2YXIgcj1WcChlKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybiByLmxvY2FsP24uZ2V0QXR0cmlidXRlTlMoci5zcGFjZSxyLmxvY2FsKTpuLmdldEF0dHJpYnV0ZShyKX1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3IubG9jYWw/RzVlOnE1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9yLmxvY2FsP1g1ZTpqNWU6ci5sb2NhbD9ZNWU6VzVlKShyLHQpKX12YXIgTkV0PU0oKCk9Pnt3UigpfSk7ZnVuY3Rpb24gVFIoZSl7cmV0dXJuIGUub3duZXJEb2N1bWVudCYmZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxlLmRvY3VtZW50JiZlfHxlLmRlZmF1bHRWaWV3fXZhciBqJD1NKCgpPT57fSk7ZnVuY3Rpb24gJDVlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIEs1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIFo1ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBERXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsPyQ1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9aNWU6SzVlKShlLHQscj09bnVsbD8iIjpyKSk6YWcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gYWcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxUUihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgWCQ9TSgoKT0+e2okKCl9KTtmdW5jdGlvbiBKNWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbZV19fWZ1bmN0aW9uIFE1ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbZV09dH19ZnVuY3Rpb24gdFRlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD9kZWxldGUgdGhpc1tlXTp0aGlzW2VdPXJ9fWZ1bmN0aW9uIE9FdChlLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP0o1ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90VGU6UTVlKShlLHQpKTp0aGlzLm5vZGUoKVtlXX12YXIgekV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGRXQoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uICQkKGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IEJFdChlKX1mdW5jdGlvbiBCRXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPUZFdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIEhFdChlLHQpe2Zvcih2YXIgcj0kJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIFZFdChlLHQpe2Zvcih2YXIgcj0kJChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIucmVtb3ZlKHRbbl0pfWZ1bmN0aW9uIGVUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtIRXQodGhpcyxlKX19ZnVuY3Rpb24gclRlKGUpe3JldHVybiBmdW5jdGlvbigpe1ZFdCh0aGlzLGUpfX1mdW5jdGlvbiBuVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXsodC5hcHBseSh0aGlzLGFyZ3VtZW50cyk/SEV0OlZFdCkodGhpcyxlKX19ZnVuY3Rpb24gVUV0KGUsdCl7dmFyIHI9RkV0KGUrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPSQkKHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP25UZTp0P2VUZTpyVGUpKHIsdCkpfXZhciBxRXQ9TSgoKT0+e0JFdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBpVGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG9UZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIGFUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gR0V0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2lUZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/YVRlOm9UZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBXRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHNUZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGxUZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBjVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBZRXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/c1RlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9jVGU6bFRlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBqRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVUZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBYRXQoKXtyZXR1cm4gdGhpcy5lYWNoKHVUZSl9dmFyICRFdD1NKCgpPT57fSk7ZnVuY3Rpb24gaFRlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gS0V0KCl7cmV0dXJuIHRoaXMuZWFjaChoVGUpfXZhciBaRXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEpFdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlNSKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBRRXQ9TSgoKT0+e1UkKCl9KTtmdW5jdGlvbiBmVGUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB0NXQoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlNSKGUpLG49dD09bnVsbD9mVGU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpteSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIGU1dD1NKCgpPT57VSQoKTtNUigpfSk7ZnVuY3Rpb24gcFRlKCl7dmFyIGU9dGhpcy5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcjV0KCl7cmV0dXJuIHRoaXMuZWFjaChwVGUpfXZhciBuNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRUZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCExKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gbVRlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITApLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBpNXQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/bVRlOmRUZSl9dmFyIG81dD1NKCgpPT57fSk7ZnVuY3Rpb24gYTV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgczV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBnVGUoZSx0LHIpe3JldHVybiBlPXU1dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiB1NXQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT13cjt3cj1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXt3cj1pfX19ZnVuY3Rpb24gX1RlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiB5VGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gdlRlKGUsdCxyKXt2YXIgbj1jNXQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9nVGU6dTV0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGg1dChlLHQscil7dmFyIG49X1RlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD92VGU6eVRlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEskKGUsdCxyLG4pe3ZhciBpPXdyO2Uuc291cmNlRXZlbnQ9d3Isd3I9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3dyPWl9fXZhciBjNXQsd3IsbDV0LENSPU0oKCk9PntjNXQ9e30sd3I9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYobDV0PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluIGw1dHx8KGM1dD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSl9KTtmdW5jdGlvbiBmNXQoZSx0LHIpe3ZhciBuPVRSKGUpLGk9bi5DdXN0b21FdmVudDt0eXBlb2YgaT09ImZ1bmN0aW9uIj9pPW5ldyBpKHQscik6KGk9bi5kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxyPyhpLmluaXRFdmVudCh0LHIuYnViYmxlcyxyLmNhbmNlbGFibGUpLGkuZGV0YWlsPXIuZGV0YWlsKTppLmluaXRFdmVudCh0LCExLCExKSksZS5kaXNwYXRjaEV2ZW50KGkpfWZ1bmN0aW9uIHhUZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmNXQodGhpcyxlLHQpfX1mdW5jdGlvbiBiVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZjV0KHRoaXMsZSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHA1dChlLHQpe3JldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP2JUZTp4VGUpKGUsdCkpfXZhciBkNXQ9TSgoKT0+e2okKCl9KTtmdW5jdGlvbiBwaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBtNXQoKXtyZXR1cm4gbmV3IHBpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sWiQpfXZhciBaJCxVcCx3dT1NKCgpPT57dEV0KCk7ckV0KCk7aUV0KCk7dUV0KCk7WSQoKTtmRXQoKTtkRXQoKTtnRXQoKTt5RXQoKTt4RXQoKTt3RXQoKTtNRXQoKTtURXQoKTtBRXQoKTtJRXQoKTtrRXQoKTtORXQoKTtYJCgpO3pFdCgpO3FFdCgpO1dFdCgpO2pFdCgpOyRFdCgpO1pFdCgpO1FFdCgpO2U1dCgpO241dCgpO281dCgpO3M1dCgpO0NSKCk7ZDV0KCk7WiQ9W251bGxdO3BpLnByb3RvdHlwZT1tNXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpwaSxzZWxlY3Q6UU10LHNlbGVjdEFsbDplRXQsZmlsdGVyOm5FdCxkYXRhOmNFdCxlbnRlcjpvRXQsZXhpdDpoRXQsam9pbjpwRXQsbWVyZ2U6bUV0LG9yZGVyOl9FdCxzb3J0OnZFdCxjYWxsOmJFdCxub2RlczpTRXQsbm9kZTpFRXQsc2l6ZTpDRXQsZW1wdHk6UEV0LGVhY2g6TEV0LGF0dHI6UkV0LHN0eWxlOkRFdCxwcm9wZXJ0eTpPRXQsY2xhc3NlZDpVRXQsdGV4dDpHRXQsaHRtbDpZRXQscmFpc2U6WEV0LGxvd2VyOktFdCxhcHBlbmQ6SkV0LGluc2VydDp0NXQscmVtb3ZlOnI1dCxjbG9uZTppNXQsZGF0dW06YTV0LG9uOmg1dCxkaXNwYXRjaDpwNXR9O1VwPW01dH0pO2Z1bmN0aW9uIHFwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IHBpKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgcGkoW1tlXV0sWiQpfXZhciBnNXQ9TSgoKT0+e3d1KCl9KTtmdW5jdGlvbiBfNXQoKXtmb3IodmFyIGU9d3IsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgeTV0PU0oKCk9PntDUigpfSk7ZnVuY3Rpb24gdjV0KGUsdCl7dmFyIHI9ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYoci5jcmVhdGVTVkdQb2ludCl7dmFyIG49ci5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBuLng9dC5jbGllbnRYLG4ueT10LmNsaWVudFksbj1uLm1hdHJpeFRyYW5zZm9ybShlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSksW24ueCxuLnldfXZhciBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1pLmxlZnQtZS5jbGllbnRMZWZ0LHQuY2xpZW50WS1pLnRvcC1lLmNsaWVudFRvcF19dmFyIHg1dD1NKCgpPT57fSk7ZnVuY3Rpb24gQVIoZSl7dmFyIHQ9XzV0KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLHY1dChlLHQpfXZhciBiNXQ9TSgoKT0+e3k1dCgpO3g1dCgpfSk7dmFyIEVzPU0oKCk9PntHJCgpO2I1dCgpO3dSKCk7ZzV0KCk7d3UoKTtNUigpO3EkKCk7WCQoKTtDUigpfSk7ZnVuY3Rpb24gUFIoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciB3NXQ9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBKJChlKXt2YXIgdD1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXFwKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsUFIsITApOyJvbnNlbGVjdHN0YXJ0ImluIHQ/ci5vbigic2VsZWN0c3RhcnQuZHJhZyIsUFIsITApOih0Ll9fbm9zZWxlY3Q9dC5zdHlsZS5Nb3pVc2VyU2VsZWN0LHQuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfWZ1bmN0aW9uIFEkKGUsdCl7dmFyIHI9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbj1xcChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO3QmJihuLm9uKCJjbGljay5kcmFnIixQUiwhMCksc2V0VGltZW91dChmdW5jdGlvbigpe24ub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gcj9uLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooci5zdHlsZS5Nb3pVc2VyU2VsZWN0PXIuX19ub3NlbGVjdCxkZWxldGUgci5fX25vc2VsZWN0KX12YXIgUzV0PU0oKCk9PntFcygpO3c1dCgpfSk7dmFyIE01dD1NKCgpPT57UzV0KCl9KTtmdW5jdGlvbiBJUihlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gdEsoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIEU1dD1NKCgpPT57fSk7ZnVuY3Rpb24gSzUoKXt9ZnVuY3Rpb24gQzV0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gUFRlKCl7cmV0dXJuIFI1dCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBBNXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBTdShlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD13VGUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9QNXQodCk6cj09PTM/bmV3IHNsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9MUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9MUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVNUZS5leGVjKGUpKT9uZXcgc2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9TVRlLmV4ZWMoZSkpP25ldyBzbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1FVGUuZXhlYyhlKSk/TFIodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9VFRlLmV4ZWMoZSkpP0xSKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PUNUZS5leGVjKGUpKT9rNXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1BVGUuZXhlYyhlKSk/azV0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6VDV0Lmhhc093blByb3BlcnR5KGUpP1A1dChUNXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBzbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFA1dChlKXtyZXR1cm4gbmV3IHNsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBMUihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHNsKGUsdCxyLG4pfWZ1bmN0aW9uIElUZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEs1fHwoZT1TdShlKSksZT8oZT1lLnJnYigpLG5ldyBzbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgc2x9ZnVuY3Rpb24gdTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0lUZShlKTpuZXcgc2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIHNsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBJNXQoKXtyZXR1cm4iIyIrZUsodGhpcy5yKStlSyh0aGlzLmcpK2VLKHRoaXMuYil9ZnVuY3Rpb24gTDV0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIGVLKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIGs1dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEtoKGUsdCxyLG4pfWZ1bmN0aW9uIFI1dChlKXtpZihlIGluc3RhbmNlb2YgS2gpcmV0dXJuIG5ldyBLaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBLNXx8KGU9U3UoZSkpLCFlKXJldHVybiBuZXcgS2g7aWYoZSBpbnN0YW5jZW9mIEtoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEtoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gTjV0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9SNXQoZSk6bmV3IEtoKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBLaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gcksoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIFg1LGtSLGMyLCQ1LFpoLHdUZSxTVGUsTVRlLEVUZSxUVGUsQ1RlLEFUZSxUNXQsRDV0PU0oKCk9PntFNXQoKTtYNT0uNyxrUj0xL1g1LGMyPSJcXHMqKFsrLV0/XFxkKylcXHMqIiwkNT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixaaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsd1RlPS9eIyhbMC05YS1mXXszLDh9KSQvLFNUZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbYzIsYzIsYzJdKyJcXCkkIiksTVRlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1taaCxaaCxaaF0rIlxcKSQiKSxFVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tjMixjMixjMiwkNV0rIlxcKSQiKSxUVGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1taaCxaaCxaaCwkNV0rIlxcKSQiKSxDVGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrWyQ1LFpoLFpoXSsiXFwpJCIpLEFUZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrWyQ1LFpoLFpoLCQ1XSsiXFwpJCIpLFQ1dD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtJUihLNSxTdSx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpDNXQsZm9ybWF0SGV4OkM1dCxmb3JtYXRIc2w6UFRlLGZvcm1hdFJnYjpBNXQsdG9TdHJpbmc6QTV0fSk7SVIoc2wsdTIsdEsoSzUse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/a1I6TWF0aC5wb3coa1IsZSksbmV3IHNsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1g1Ok1hdGgucG93KFg1LGUpLG5ldyBzbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4Okk1dCxmb3JtYXRIZXg6STV0LGZvcm1hdFJnYjpMNXQsdG9TdHJpbmc6TDV0fSkpO0lSKEtoLE41dCx0SyhLNSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9rUjpNYXRoLnBvdyhrUixlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9YNTpNYXRoLnBvdyhYNSxlKSxuZXcgS2godGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBzbChySyhlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxySyhlLGksbikscksoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgUlI9TSgoKT0+e0Q1dCgpfSk7ZnVuY3Rpb24gbksoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBPNXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIG5LKChyLW4vdCkqdCxhLGksbyxzKX19dmFyIGlLPU0oKCk9Pnt9KTtmdW5jdGlvbiB6NXQoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBuSygoci1uL3QpKnQsaSxvLGEscyl9fXZhciBGNXQ9TSgoKT0+e2lLKCl9KTtmdW5jdGlvbiBaNShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG9LPU0oKCk9Pnt9KTtmdW5jdGlvbiBMVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBrVGUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBCNXQoZSl7cmV0dXJuKGU9K2UpPT0xP05SOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9rVGUodCxyLGUpOlo1KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIE5SKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP0xUZShlLHIpOlo1KGlzTmFOKGUpP3Q6ZSl9dmFyIEg1dD1NKCgpPT57b0soKX0pO2Z1bmN0aW9uIFY1dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPXUyKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBneSxSVGUsTlRlLGFLPU0oKCk9PntSUigpO2lLKCk7RjV0KCk7SDV0KCk7Z3k9ZnVuY3Rpb24gZSh0KXt2YXIgcj1CNXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9dTIoaSkpLnIsKG89dTIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1OUihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7UlRlPVY1dChPNXQpLE5UZT1WNXQoejV0KX0pO2Z1bmN0aW9uIFU1dChlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiBxNXQoZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXZhciBHNXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFc1dChlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPV95KGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFk1dD1NKCgpPT57RFIoKX0pO2Z1bmN0aW9uIGo1dChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19dmFyIFg1dD1NKCgpPT57fSk7ZnVuY3Rpb24gVWEoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIEo1PU0oKCk9Pnt9KTtmdW5jdGlvbiAkNXQoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1feShlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBLNXQ9TSgoKT0+e0RSKCl9KTtmdW5jdGlvbiBEVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIE9UZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIFE1KGUsdCl7dmFyIHI9bEsubGFzdEluZGV4PXNLLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPWxLLmV4ZWMoZSkpJiYoaT1zSy5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6VWEobixpKX0pKSxyPXNLLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9PVGUobFswXS54KTpEVGUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIGxLLHNLLGNLPU0oKCk9PntKNSgpO2xLPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxzSz1uZXcgUmVnRXhwKGxLLnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gX3koZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP1o1KHQpOihyPT09Im51bWJlciI/VWE6cj09PSJzdHJpbmciPyhuPVN1KHQpKT8odD1uLGd5KTpRNTp0IGluc3RhbmNlb2YgU3U/Z3k6dCBpbnN0YW5jZW9mIERhdGU/ajV0OnE1dCh0KT9VNXQ6QXJyYXkuaXNBcnJheSh0KT9XNXQ6dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpPyQ1dDpVYSkoZSx0KX12YXIgRFI9TSgoKT0+e1JSKCk7YUsoKTtZNXQoKTtYNXQoKTtKNSgpO0s1dCgpO2NLKCk7b0soKTtHNXQoKX0pO2Z1bmN0aW9uIHVLKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKlo1dCxza2V3WDpNYXRoLmF0YW4obCkqWjV0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgWjV0LE9SLEo1dD1NKCgpPT57WjV0PTE4MC9NYXRoLlBJLE9SPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gdFR0KGUpe3JldHVybiBlPT09Im5vbmUiP09SOih0VHx8KHRUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGhLPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxRNXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHRULnN0eWxlLnRyYW5zZm9ybT1lLGU9UTV0LmdldENvbXB1dGVkU3R5bGUoaEsuYXBwZW5kQ2hpbGQodFQpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLGhLLnJlbW92ZUNoaWxkKHRUKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSx1SygrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIGVUdChlKXtyZXR1cm4gZT09bnVsbD9PUjooelJ8fCh6Uj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx6Ui5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9elIudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsdUsoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpPUil9dmFyIHRULGhLLFE1dCx6UixyVHQ9TSgoKT0+e0o1dCgpfSk7ZnVuY3Rpb24gblR0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6VWEoYyxoKX0se2k6Zy0yLHg6VWEodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpVYShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlVhKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpVYShjLGgpfSx7aTpnLTIseDpVYSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBmSyxwSyxpVHQ9TSgoKT0+e0o1KCk7clR0KCk7Zks9blR0KHRUdCwicHgsICIsInB4KSIsImRlZykiKSxwSz1uVHQoZVR0LCIsICIsIikiLCIpIil9KTt2YXIgZVQ9TSgoKT0+e0RSKCk7SjUoKTtjSygpO2lUdCgpO2FLKCl9KTtmdW5jdGlvbiBmMigpe3JldHVybiB5eXx8KHNUdCh6VGUpLHl5PW9ULm5vdygpK0hSKX1mdW5jdGlvbiB6VGUoKXt5eT0wfWZ1bmN0aW9uIGFUKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBWUihlLHQscil7dmFyIG49bmV3IGFUO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gbFR0KCl7ZjIoKSwrK2gyO2Zvcih2YXIgZT1GUix0O2U7KSh0PXl5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1oMn1mdW5jdGlvbiBvVHQoKXt5eT0oQlI9b1Qubm93KCkpK0hSLGgyPW5UPTA7dHJ5e2xUdCgpfWZpbmFsbHl7aDI9MCxCVGUoKSx5eT0wfX1mdW5jdGlvbiBGVGUoKXt2YXIgZT1vVC5ub3coKSx0PWUtQlI7dD5hVHQmJihIUi09dCxCUj1lKX1mdW5jdGlvbiBCVGUoKXtmb3IodmFyIGUsdD1GUixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpGUj1yKTtpVD1lLGRLKG4pfWZ1bmN0aW9uIGRLKGUpe2lmKCFoMil7blQmJihuVD1jbGVhclRpbWVvdXQoblQpKTt2YXIgdD1lLXl5O3Q+MjQ/KGU8MS8wJiYoblQ9c2V0VGltZW91dChvVHQsZS1vVC5ub3coKS1IUikpLHJUJiYoclQ9Y2xlYXJJbnRlcnZhbChyVCkpKTooclR8fChCUj1vVC5ub3coKSxyVD1zZXRJbnRlcnZhbChGVGUsYVR0KSksaDI9MSxzVHQob1R0KSl9fXZhciBoMixuVCxyVCxhVHQsRlIsaVQsQlIseXksSFIsb1Qsc1R0LG1LPU0oKCk9PntoMj0wLG5UPTAsclQ9MCxhVHQ9MWUzLEJSPTAseXk9MCxIUj0wLG9UPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHNUdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTthVC5wcm90b3R5cGU9VlIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphVCxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/ZjIoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJmlUIT09dGhpcyYmKGlUP2lULl9uZXh0PXRoaXM6RlI9dGhpcyxpVD10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLGRLKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGRLKCkpfX19KTtmdW5jdGlvbiBVUihlLHQscil7dmFyIG49bmV3IGFUO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIGNUdD1NKCgpPT57bUsoKX0pO3ZhciBnSz1NKCgpPT57bUsoKTtjVHQoKX0pO2Z1bmN0aW9uIHNnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47VVRlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpIVGUsdHdlZW46VlRlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOmhUdH0pfWZ1bmN0aW9uIGxUKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPmhUdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIHFhKGUsdCl7dmFyIHI9UWkoZSx0KTtpZihyLnN0YXRlPnFSKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiByfWZ1bmN0aW9uIFFpKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gVVRlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPVZSKG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1fSyxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PV9LKXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09cVIpcmV0dXJuIFVSKGEpO3Auc3RhdGU9PT11VHQ/KHAuc3RhdGU9c1QscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKTordTx0JiYocC5zdGF0ZT1zVCxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImNhbmNlbCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pfWlmKFVSKGZ1bmN0aW9uKCl7ci5zdGF0ZT09PXFSJiYoci5zdGF0ZT11VHQsci50aW1lci5yZXN0YXJ0KHMsci5kZWxheSxyLnRpbWUpLHMoYykpfSksci5zdGF0ZT1HUixyLm9uLmNhbGwoInN0YXJ0IixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxyLnN0YXRlPT09R1Ipe2ZvcihyLnN0YXRlPXFSLGk9bmV3IEFycmF5KGY9ci50d2Vlbi5sZW5ndGgpLHU9MCxoPS0xO3U8ZjsrK3UpKHA9ci50d2Vlblt1XS52YWx1ZS5jYWxsKGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApKSYmKGlbKytoXT1wKTtpLmxlbmd0aD1oKzF9fWZ1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PWM8ci5kdXJhdGlvbj9yLmVhc2UuY2FsbChudWxsLGMvci5kdXJhdGlvbik6KHIudGltZXIucmVzdGFydChsKSxyLnN0YXRlPVdSLDEpLGg9LTEsZj1pLmxlbmd0aDsrK2g8ZjspaVtoXS5jYWxsKGUsdSk7ci5zdGF0ZT09PVdSJiYoci5vbi5jYWxsKCJlbmQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLGwoKSl9ZnVuY3Rpb24gbCgpe3Iuc3RhdGU9c1Qsci50aW1lci5zdG9wKCksZGVsZXRlIG5bdF07Zm9yKHZhciBjIGluIG4pcmV0dXJuO2RlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIEhUZSxWVGUsaFR0LF9LLEdSLHFSLHVUdCxXUixzVCxUcz1NKCgpPT57QiQoKTtnSygpO0hUZT1HNSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxWVGU9W10saFR0PTAsX0s9MSxHUj0yLHFSPTMsdVR0PTQsV1I9NSxzVD02fSk7ZnVuY3Rpb24gcDIoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGksbz0hMCxhO2lmKCEhcil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoYSBpbiByKXtpZigobj1yW2FdKS5uYW1lIT09dCl7bz0hMTtjb250aW51ZX1pPW4uc3RhdGU+R1ImJm4uc3RhdGU8V1Isbi5zdGF0ZT1zVCxuLnRpbWVyLnN0b3AoKSxuLm9uLmNhbGwoaT8iaW50ZXJydXB0IjoiY2FuY2VsIixlLGUuX19kYXRhX18sbi5pbmRleCxuLmdyb3VwKSxkZWxldGUgclthXX1vJiZkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciB5Sz1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGZUdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cDIodGhpcyxlKX0pfXZhciBwVHQ9TSgoKT0+e3lLKCl9KTtmdW5jdGlvbiBxVGUoZSx0KXt2YXIgcixuO3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXFhKHRoaXMsZSksbz1pLnR3ZWVuO2lmKG8hPT1yKXtuPXI9bztmb3IodmFyIGE9MCxzPW4ubGVuZ3RoO2E8czsrK2EpaWYoblthXS5uYW1lPT09dCl7bj1uLnNsaWNlKCksbi5zcGxpY2UoYSwxKTticmVha319aS50d2Vlbj1ufX1mdW5jdGlvbiBHVGUoZSx0LHIpe3ZhciBuLGk7aWYodHlwZW9mIHIhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXFhKHRoaXMsZSksYT1vLnR3ZWVuO2lmKGEhPT1uKXtpPShuPWEpLnNsaWNlKCk7Zm9yKHZhciBzPXtuYW1lOnQsdmFsdWU6cn0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbClpZihpW2xdLm5hbWU9PT10KXtpW2xdPXM7YnJlYWt9bD09PWMmJmkucHVzaChzKX1vLnR3ZWVuPWl9fWZ1bmN0aW9uIGRUdChlLHQpe3ZhciByPXRoaXMuX2lkO2lmKGUrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBuPVFpKHRoaXMubm9kZSgpLHIpLnR3ZWVuLGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlpZigoYT1uW2ldKS5uYW1lPT09ZSlyZXR1cm4gYS52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKCh0PT1udWxsP3FUZTpHVGUpKHIsZSx0KSl9ZnVuY3Rpb24gZDIoZSx0LHIpe3ZhciBuPWUuX2lkO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1xYSh0aGlzLG4pOyhpLnZhbHVlfHwoaS52YWx1ZT17fSkpW3RdPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaSl7cmV0dXJuIFFpKGksbikudmFsdWVbdF19fXZhciBjVD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIFlSKGUsdCl7dmFyIHI7cmV0dXJuKHR5cGVvZiB0PT0ibnVtYmVyIj9VYTp0IGluc3RhbmNlb2YgU3U/Z3k6KHI9U3UodCkpPyh0PXIsZ3kpOlE1KShlLHQpfXZhciB2Sz1NKCgpPT57UlIoKTtlVCgpfSk7ZnVuY3Rpb24gV1RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBZVGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBqVGUoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gWFRlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiAkVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBLVGUoZSx0LHIpe3ZhciBuLGksbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYSxzPXIodGhpcyksbDtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTooYT10aGlzLmdldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIG1UdChlLHQpe3ZhciByPVZwKGUpLG49cj09PSJ0cmFuc2Zvcm0iP3BLOllSO3JldHVybiB0aGlzLmF0dHJUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyhyLmxvY2FsP0tUZTokVGUpKHIsbixkMih0aGlzLCJhdHRyLiIrZSx0KSk6dD09bnVsbD8oci5sb2NhbD9ZVGU6V1RlKShyKTooci5sb2NhbD9YVGU6alRlKShyLG4sdCkpfXZhciBnVHQ9TSgoKT0+e2VUKCk7RXMoKTtjVCgpO3ZLKCl9KTtmdW5jdGlvbiBaVGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIEpUZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIFFUZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJkpUZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gdENlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmWlRlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBfVHQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPVZwKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/UVRlOnRDZSkobix0KSl9dmFyIHlUdD1NKCgpPT57RXMoKX0pO2Z1bmN0aW9uIGVDZShlLHQpe3JldHVybiBmdW5jdGlvbigpe2xUKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiByQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe2xUKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gdlR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZUNlOnJDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIHhUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIG5DZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBpQ2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe3FhKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gYlR0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/bkNlOmlDZSkodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIHdUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIG9DZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtxYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gU1R0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChvQ2UodCxlKSk6UWkodGhpcy5ub2RlKCksdCkuZWFzZX12YXIgTVR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gRVR0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ZNShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgdWEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBUVHQ9TSgoKT0+e0VzKCk7R3AoKX0pO2Z1bmN0aW9uIENUdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgdWEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBBVHQ9TSgoKT0+e0dwKCl9KTtmdW5jdGlvbiBhQ2UoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiBzQ2UoZSx0LHIpe3ZhciBuLGksbz1hQ2UodCk/bFQ6cWE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gUFR0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9RaSh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goc0NlKHIsZSx0KSl9dmFyIElUdD1NKCgpPT57VHMoKX0pO2Z1bmN0aW9uIGxDZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gTFR0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGxDZSh0aGlzLl9pZCkpfXZhciBrVHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFJUdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPW15KGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsc2coY1tmXSx0LHIsZixjLFFpKHUscikpKTtyZXR1cm4gbmV3IHVhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBOVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gRFR0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9VzUoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9UWkodSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZzZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IHVhKG8sYSx0LHIpfXZhciBPVHQ9TSgoKT0+e0VzKCk7R3AoKTtUcygpfSk7ZnVuY3Rpb24gelR0KCl7cmV0dXJuIG5ldyBjQ2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciBjQ2UsRlR0PU0oKCk9PntFcygpO2NDZT1VcC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiB1Q2UoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89YWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLGFnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gQlR0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGhDZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9YWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIGZDZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWFnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxhZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBwQ2UoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1xYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9QlR0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gSFR0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9mSzpZUjtyZXR1cm4gdD09bnVsbD90aGlzLnN0eWxlVHdlZW4oZSx1Q2UoZSxuKSkub24oImVuZC5zdHlsZS4iK2UsQlR0KGUpKTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90aGlzLnN0eWxlVHdlZW4oZSxmQ2UoZSxuLGQyKHRoaXMsInN0eWxlLiIrZSx0KSkpLmVhY2gocENlKHRoaXMuX2lkLGUpKTp0aGlzLnN0eWxlVHdlZW4oZSxoQ2UoZSxuLHQpLHIpLm9uKCJlbmQuc3R5bGUuIitlLG51bGwpfXZhciBWVHQ9TSgoKT0+e2VUKCk7RXMoKTtUcygpO2NUKCk7dksoKX0pO2Z1bmN0aW9uIGRDZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LmNhbGwodGhpcyxuKSxyKX19ZnVuY3Rpb24gbUNlKGUsdCxyKXt2YXIgbixpO2Z1bmN0aW9uIG8oKXt2YXIgYT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gYSE9PWkmJihuPShpPWEpJiZkQ2UoZSxhLHIpKSxufXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24gVVR0KGUsdCxyKXt2YXIgbj0ic3R5bGUuIisoZSs9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4obj10aGlzLnR3ZWVuKG4pKSYmbi5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihuLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihuLG1DZShlLHQscj09bnVsbD8iIjpyKSl9dmFyIHFUdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gX0NlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEdUdChlKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsdHlwZW9mIGU9PSJmdW5jdGlvbiI/X0NlKGQyKHRoaXMsInRleHQiLGUpKTpnQ2UoZT09bnVsbD8iIjplKyIiKSl9dmFyIFdUdD1NKCgpPT57Y1QoKX0pO2Z1bmN0aW9uIHlDZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpcy50ZXh0Q29udGVudD1lLmNhbGwodGhpcyx0KX19ZnVuY3Rpb24gdkNlKGUpe3ZhciB0LHI7ZnVuY3Rpb24gbigpe3ZhciBpPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpIT09ciYmKHQ9KHI9aSkmJnlDZShpKSksdH1yZXR1cm4gbi5fdmFsdWU9ZSxufWZ1bmN0aW9uIFlUdChlKXt2YXIgdD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybih0PXRoaXMudHdlZW4odCkpJiZ0Ll92YWx1ZTtpZihlPT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHQsbnVsbCk7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKHQsdkNlKGUpKX12YXIgalR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBYVHQoKXtmb3IodmFyIGU9dGhpcy5fbmFtZSx0PXRoaXMuX2lkLHI9alIoKSxuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYylpZihsPWFbY10pe3ZhciB1PVFpKGwsdCk7c2cobCxlLHIsYyxhLHt0aW1lOnUudGltZSt1LmRlbGF5K3UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjp1LmR1cmF0aW9uLGVhc2U6dS5lYXNlfSl9cmV0dXJuIG5ldyB1YShuLHRoaXMuX3BhcmVudHMsZSxyKX12YXIgJFR0PU0oKCk9PntHcCgpO1RzKCl9KTtmdW5jdGlvbiBLVHQoKXt2YXIgZSx0LHI9dGhpcyxuPXIuX2lkLGk9ci5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8sYSl7dmFyIHM9e3ZhbHVlOmF9LGw9e3ZhbHVlOmZ1bmN0aW9uKCl7LS1pPT09MCYmbygpfX07ci5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9cWEodGhpcyxuKSx1PWMub247dSE9PWUmJih0PShlPXUpLmNvcHkoKSx0Ll8uY2FuY2VsLnB1c2gocyksdC5fLmludGVycnVwdC5wdXNoKHMpLHQuXy5lbmQucHVzaChsKSksYy5vbj10fSl9KX12YXIgWlR0PU0oKCk9PntUcygpfSk7ZnVuY3Rpb24gdWEoZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIHhLKGUpe3JldHVybiBVcCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24galIoKXtyZXR1cm4rK3hDZX12YXIgeENlLG0yLEdwPU0oKCk9PntFcygpO2dUdCgpO3lUdCgpO3hUdCgpO3dUdCgpO01UdCgpO1RUdCgpO0FUdCgpO0lUdCgpO2tUdCgpO05UdCgpO09UdCgpO0ZUdCgpO1ZUdCgpO3FUdCgpO1dUdCgpO2pUdCgpOyRUdCgpO2NUKCk7WlR0KCk7eENlPTA7bTI9VXAucHJvdG90eXBlO3VhLnByb3RvdHlwZT14Sy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnVhLHNlbGVjdDpSVHQsc2VsZWN0QWxsOkRUdCxmaWx0ZXI6RVR0LG1lcmdlOkNUdCxzZWxlY3Rpb246elR0LHRyYW5zaXRpb246WFR0LGNhbGw6bTIuY2FsbCxub2RlczptMi5ub2Rlcyxub2RlOm0yLm5vZGUsc2l6ZTptMi5zaXplLGVtcHR5Om0yLmVtcHR5LGVhY2g6bTIuZWFjaCxvbjpQVHQsYXR0cjptVHQsYXR0clR3ZWVuOl9UdCxzdHlsZTpIVHQsc3R5bGVUd2VlbjpVVHQsdGV4dDpHVHQsdGV4dFR3ZWVuOllUdCxyZW1vdmU6TFR0LHR3ZWVuOmRUdCxkZWxheTp2VHQsZHVyYXRpb246YlR0LGVhc2U6U1R0LGVuZDpLVHR9fSk7ZnVuY3Rpb24gYkNlKGUsdCl7Zm9yKHZhciByOyEocj1lLl9fdHJhbnNpdGlvbil8fCEocj1yW3RdKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuIGJLLnRpbWU9ZjIoKSxiSztyZXR1cm4gcn1mdW5jdGlvbiBKVHQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgdWE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1qUigpLChyPWJLKS50aW1lPWYyKCksZT1lPT1udWxsP251bGw6ZSsiIik7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89MDtvPGk7KytvKWZvcih2YXIgYT1uW29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmc2cobCxlLHQsYyxhLHJ8fGJDZShsLHQpKTtyZXR1cm4gbmV3IHVhKG4sdGhpcy5fcGFyZW50cyxlLHQpfXZhciBiSyxRVHQ9TSgoKT0+e0dwKCk7VHMoKTtJXygpO2dLKCk7Yks9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOnhzfX0pO3ZhciB0Q3Q9TSgoKT0+e0VzKCk7cFR0KCk7UVR0KCk7VXAucHJvdG90eXBlLmludGVycnVwdD1mVHQ7VXAucHJvdG90eXBlLnRyYW5zaXRpb249SlR0fSk7dmFyIGVDdD1NKCgpPT57R3AoKTtUcygpfSk7dmFyIHJDdD1NKCgpPT57dEN0KCk7R3AoKTtlQ3QoKTt5SygpfSk7ZnVuY3Rpb24gd0soZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBuQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGlDdChlLHQscil7dGhpcy50YXJnZXQ9ZSx0aGlzLnR5cGU9dCx0aGlzLnNlbGVjdGlvbj1yfXZhciBvQ3Q9TSgoKT0+e30pO2Z1bmN0aW9uIFNLKCl7d3Iuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gdVQoKXt3ci5wcmV2ZW50RGVmYXVsdCgpLHdyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBhQ3Q9TSgoKT0+e0VzKCl9KTtmdW5jdGlvbiBoVChlKXtyZXR1cm57dHlwZTplfX1mdW5jdGlvbiBFQ2UoKXtyZXR1cm4hd3IuYnV0dG9ufWZ1bmN0aW9uIFRDZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBFSyhlKXtmb3IoOyFlLl9fYnJ1c2g7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybjtyZXR1cm4gZS5fX2JydXNofWZ1bmN0aW9uIFRLKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gdUN0KGUpe3ZhciB0PWUuX19icnVzaDtyZXR1cm4gdD90LmRpbS5vdXRwdXQodC5zZWxlY3Rpb24pOm51bGx9ZnVuY3Rpb24gaEN0KCl7cmV0dXJuIENLKFhSKX1mdW5jdGlvbiBmQ3QoKXtyZXR1cm4gQ0soJFIpfWZ1bmN0aW9uIHBDdCgpe3JldHVybiBDSyh3Q2UpfWZ1bmN0aW9uIENLKGUpe3ZhciB0PVRDZSxyPUVDZSxuPUc1KGEsInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxpPTYsbztmdW5jdGlvbiBhKGYpe3ZhciBwPWYucHJvcGVydHkoIl9fYnJ1c2giLGgpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtoVCgib3ZlcmxheSIpXSk7cC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KS5tZXJnZShwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9RUsodGhpcykuZXh0ZW50O3FwKHRoaXMpLmF0dHIoIngiLGdbMF1bMF0pLmF0dHIoInkiLGdbMF1bMV0pLmF0dHIoIndpZHRoIixnWzFdWzBdLWdbMF1bMF0pLmF0dHIoImhlaWdodCIsZ1sxXVsxXS1nWzBdWzFdKX0pLGYuc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbaFQoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsV3Auc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGQ9Zi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihnKXtyZXR1cm4gZy50eXBlfSk7ZC5leGl0KCkucmVtb3ZlKCksZC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihnKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitnLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGcpe3JldHVybiBXcFtnLnR5cGVdfSksZi5lYWNoKHMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpLm9uKCJtb3VzZWRvd24uYnJ1c2ggdG91Y2hzdGFydC5icnVzaCIsdSl9YS5tb3ZlPWZ1bmN0aW9uKGYscCl7Zi5zZWxlY3Rpb24/Zi5vbigic3RhcnQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKS5zdGFydCgpfSkub24oImludGVycnVwdC5icnVzaCBlbmQuYnJ1c2giLGZ1bmN0aW9uKCl7bCh0aGlzLGFyZ3VtZW50cykuZW5kKCl9KS50d2VlbigiYnJ1c2giLGZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxnPWQuX19icnVzaCxfPWwoZCxhcmd1bWVudHMpLHk9Zy5zZWxlY3Rpb24seD1lLmlucHV0KHR5cGVvZiBwPT0iZnVuY3Rpb24iP3AuYXBwbHkodGhpcyxhcmd1bWVudHMpOnAsZy5leHRlbnQpLGI9X3koeSx4KTtmdW5jdGlvbiBTKEMpe2cuc2VsZWN0aW9uPUM9PT0xJiZUSyh4KT9udWxsOmIoQykscy5jYWxsKGQpLF8uYnJ1c2goKX1yZXR1cm4geSYmeD9TOlMoMSl9KTpmLmVhY2goZnVuY3Rpb24oKXt2YXIgZD10aGlzLGc9YXJndW1lbnRzLF89ZC5fX2JydXNoLHk9ZS5pbnB1dCh0eXBlb2YgcD09ImZ1bmN0aW9uIj9wLmFwcGx5KGQsZyk6cCxfLmV4dGVudCkseD1sKGQsZykuYmVmb3Jlc3RhcnQoKTtwMihkKSxfLnNlbGVjdGlvbj15PT1udWxsfHxUSyh5KT9udWxsOnkscy5jYWxsKGQpLHguc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9O2Z1bmN0aW9uIHMoKXt2YXIgZj1xcCh0aGlzKSxwPUVLKHRoaXMpLnNlbGVjdGlvbjtwPyhmLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixwWzBdWzBdKS5hdHRyKCJ5IixwWzBdWzFdKS5hdHRyKCJ3aWR0aCIscFsxXVswXS1wWzBdWzBdKS5hdHRyKCJoZWlnaHQiLHBbMV1bMV0tcFswXVsxXSksZi5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVtkLnR5cGUubGVuZ3RoLTFdPT09ImUiP3BbMV1bMF0taS8yOnBbMF1bMF0taS8yfSkuYXR0cigieSIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZVswXT09PSJzIj9wWzFdWzFdLWkvMjpwWzBdWzFdLWkvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbihkKXtyZXR1cm4gZC50eXBlPT09Im4ifHxkLnR5cGU9PT0icyI/cFsxXVswXS1wWzBdWzBdK2k6aX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oZCl7cmV0dXJuIGQudHlwZT09PSJlInx8ZC50eXBlPT09InciP3BbMV1bMV0tcFswXVsxXStpOml9KSk6Zi5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIGwoZixwKXtyZXR1cm4gZi5fX2JydXNoLmVtaXR0ZXJ8fG5ldyBjKGYscCl9ZnVuY3Rpb24gYyhmLHApe3RoaXMudGhhdD1mLHRoaXMuYXJncz1wLHRoaXMuc3RhdGU9Zi5fX2JydXNoLHRoaXMuYWN0aXZlPTB9Yy5wcm90b3R5cGU9e2JlZm9yZXN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuKyt0aGlzLmFjdGl2ZT09PTEmJih0aGlzLnN0YXRlLmVtaXR0ZXI9dGhpcyx0aGlzLnN0YXJ0aW5nPSEwKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0aW5nJiYodGhpcy5zdGFydGluZz0hMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LGJydXNoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW1pdCgiYnJ1c2giKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4tLXRoaXMuYWN0aXZlPT09MCYmKGRlbGV0ZSB0aGlzLnN0YXRlLmVtaXR0ZXIsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihmKXtLJChuZXcgaUN0KGEsZixlLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG4uYXBwbHksbixbZix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiB1KCl7aWYod3IudG91Y2hlcyl7aWYod3IuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPHdyLnRvdWNoZXMubGVuZ3RoKXJldHVybiB1VCgpfWVsc2UgaWYobylyZXR1cm47aWYoIXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgZj10aGlzLHA9d3IudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsZD0od3IubWV0YUtleT9wPSJvdmVybGF5IjpwKT09PSJzZWxlY3Rpb24iP3NDdDp3ci5hbHRLZXk/XzI6ZzIsZz1lPT09JFI/bnVsbDpTQ2VbcF0sXz1lPT09WFI/bnVsbDpNQ2VbcF0seT1FSyhmKSx4PXkuZXh0ZW50LGI9eS5zZWxlY3Rpb24sUz14WzBdWzBdLEMsUCxrPXhbMF1bMV0sTyxELEI9eFsxXVswXSxJLEwsUj14WzFdWzFdLEYseixVLFcsWixydD1nJiZfJiZ3ci5zaGlmdEtleSxvdCxzdCxTdD1BUihmKSxidD1TdCxNdD1sKGYsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpO3A9PT0ib3ZlcmxheSI/eS5zZWxlY3Rpb249Yj1bW0M9ZT09PSRSP1M6U3RbMF0sTz1lPT09WFI/azpTdFsxXV0sW0k9ZT09PSRSP0I6QyxGPWU9PT1YUj9SOk9dXTooQz1iWzBdWzBdLE89YlswXVsxXSxJPWJbMV1bMF0sRj1iWzFdWzFdKSxQPUMsRD1PLEw9SSx6PUY7dmFyIGx0PXFwKGYpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLEt0PWx0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFdwW3BdKTtpZih3ci50b3VjaGVzKWx0Lm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGN0LCEwKS5vbigidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2giLGV0LCEwKTtlbHNle3ZhciBfdD1xcCh3ci52aWV3KS5vbigia2V5ZG93bi5icnVzaCIsZHQsITApLm9uKCJrZXl1cC5icnVzaCIscSwhMCkub24oIm1vdXNlbW92ZS5icnVzaCIsY3QsITApLm9uKCJtb3VzZXVwLmJydXNoIixldCwhMCk7SiQod3Iudmlldyl9U0soKSxwMihmKSxzLmNhbGwoZiksTXQuc3RhcnQoKTtmdW5jdGlvbiBjdCgpe3ZhciBwdD1BUihmKTtydCYmIW90JiYhc3QmJihNYXRoLmFicyhwdFswXS1idFswXSk+TWF0aC5hYnMocHRbMV0tYnRbMV0pP3N0PSEwOm90PSEwKSxidD1wdCxaPSEwLHVUKCksWCgpfWZ1bmN0aW9uIFgoKXt2YXIgcHQ7c3dpdGNoKFU9YnRbMF0tU3RbMF0sVz1idFsxXS1TdFsxXSxkKXtjYXNlIE1LOmNhc2Ugc0N0OntnJiYoVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1JLFUpKSxQPUMrVSxMPUkrVSksXyYmKFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItRixXKSksRD1PK1csej1GK1cpO2JyZWFrfWNhc2UgZzI6e2c8MD8oVT1NYXRoLm1heChTLUMsTWF0aC5taW4oQi1DLFUpKSxQPUMrVSxMPUkpOmc+MCYmKFU9TWF0aC5tYXgoUy1JLE1hdGgubWluKEItSSxVKSksUD1DLEw9SStVKSxfPDA/KFc9TWF0aC5tYXgoay1PLE1hdGgubWluKFItTyxXKSksRD1PK1csej1GKTpfPjAmJihXPU1hdGgubWF4KGstRixNYXRoLm1pbihSLUYsVykpLEQ9Tyx6PUYrVyk7YnJlYWt9Y2FzZSBfMjp7ZyYmKFA9TWF0aC5tYXgoUyxNYXRoLm1pbihCLEMtVSpnKSksTD1NYXRoLm1heChTLE1hdGgubWluKEIsSStVKmcpKSksXyYmKEQ9TWF0aC5tYXgoayxNYXRoLm1pbihSLE8tVypfKSksej1NYXRoLm1heChrLE1hdGgubWluKFIsRitXKl8pKSk7YnJlYWt9fUw8UCYmKGcqPS0xLHB0PUMsQz1JLEk9cHQscHQ9UCxQPUwsTD1wdCxwIGluIGxDdCYmS3QuYXR0cigiY3Vyc29yIixXcFtwPWxDdFtwXV0pKSx6PEQmJihfKj0tMSxwdD1PLE89RixGPXB0LHB0PUQsRD16LHo9cHQscCBpbiBjQ3QmJkt0LmF0dHIoImN1cnNvciIsV3BbcD1jQ3RbcF1dKSkseS5zZWxlY3Rpb24mJihiPXkuc2VsZWN0aW9uKSxvdCYmKFA9YlswXVswXSxMPWJbMV1bMF0pLHN0JiYoRD1iWzBdWzFdLHo9YlsxXVsxXSksKGJbMF1bMF0hPT1QfHxiWzBdWzFdIT09RHx8YlsxXVswXSE9PUx8fGJbMV1bMV0hPT16KSYmKHkuc2VsZWN0aW9uPVtbUCxEXSxbTCx6XV0scy5jYWxsKGYpLE10LmJydXNoKCkpfWZ1bmN0aW9uIGV0KCl7aWYoU0soKSx3ci50b3VjaGVzKXtpZih3ci50b3VjaGVzLmxlbmd0aClyZXR1cm47byYmY2xlYXJUaW1lb3V0KG8pLG89c2V0VGltZW91dChmdW5jdGlvbigpe289bnVsbH0sNTAwKSxsdC5vbigidG91Y2htb3ZlLmJydXNoIHRvdWNoZW5kLmJydXNoIHRvdWNoY2FuY2VsLmJydXNoIixudWxsKX1lbHNlIFEkKHdyLnZpZXcsWiksX3Qub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2x0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksS3QuYXR0cigiY3Vyc29yIixXcC5vdmVybGF5KSx5LnNlbGVjdGlvbiYmKGI9eS5zZWxlY3Rpb24pLFRLKGIpJiYoeS5zZWxlY3Rpb249bnVsbCxzLmNhbGwoZikpLE10LmVuZCgpfWZ1bmN0aW9uIGR0KCl7c3dpdGNoKHdyLmtleUNvZGUpe2Nhc2UgMTY6e3J0PWcmJl87YnJlYWt9Y2FzZSAxODp7ZD09PWcyJiYoZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMixYKCkpO2JyZWFrfWNhc2UgMzI6eyhkPT09ZzJ8fGQ9PT1fMikmJihnPDA/ST1MLVU6Zz4wJiYoQz1QLVUpLF88MD9GPXotVzpfPjAmJihPPUQtVyksZD1NSyxLdC5hdHRyKCJjdXJzb3IiLFdwLnNlbGVjdGlvbiksWCgpKTticmVha31kZWZhdWx0OnJldHVybn11VCgpfWZ1bmN0aW9uIHEoKXtzd2l0Y2god3Iua2V5Q29kZSl7Y2FzZSAxNjp7cnQmJihvdD1zdD1ydD0hMSxYKCkpO2JyZWFrfWNhc2UgMTg6e2Q9PT1fMiYmKGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMixYKCkpO2JyZWFrfWNhc2UgMzI6e2Q9PT1NSyYmKHdyLmFsdEtleT8oZyYmKEk9TC1VKmcsQz1QK1UqZyksXyYmKEY9ei1XKl8sTz1EK1cqXyksZD1fMik6KGc8MD9JPUw6Zz4wJiYoQz1QKSxfPDA/Rj16Ol8+MCYmKE89RCksZD1nMiksS3QuYXR0cigiY3Vyc29yIixXcFtwXSksWCgpKTticmVha31kZWZhdWx0OnJldHVybn11VCgpfX1mdW5jdGlvbiBoKCl7dmFyIGY9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiBmLmV4dGVudD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxmLmRpbT1lLGZ9cmV0dXJuIGEuZXh0ZW50PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6d0soW1srZlswXVswXSwrZlswXVsxXV0sWytmWzFdWzBdLCtmWzFdWzFdXV0pLGEpOnR9LGEuZmlsdGVyPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6d0soISFmKSxhKTpyfSxhLmhhbmRsZVNpemU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2YsYSk6aX0sYS5vbj1mdW5jdGlvbigpe3ZhciBmPW4ub24uYXBwbHkobixhcmd1bWVudHMpO3JldHVybiBmPT09bj9hOmZ9LGF9dmFyIHNDdCxNSyxnMixfMixYUiwkUix3Q2UsV3AsbEN0LGNDdCxTQ2UsTUNlLGRDdD1NKCgpPT57QiQoKTtNNXQoKTtlVCgpO0VzKCk7ckN0KCk7bkN0KCk7b0N0KCk7YUN0KCk7c0N0PXtuYW1lOiJkcmFnIn0sTUs9e25hbWU6InNwYWNlIn0sZzI9e25hbWU6ImhhbmRsZSJ9LF8yPXtuYW1lOiJjZW50ZXIifSxYUj17bmFtZToieCIsaGFuZGxlczpbImUiLCJ3Il0ubWFwKGhUKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlJiZbW2VbMF0sdFswXVsxXV0sW2VbMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzBdLGVbMV1bMF1dfX0sJFI9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChoVCksaW5wdXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmW1t0WzBdWzBdLGVbMF1dLFt0WzFdWzBdLGVbMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZbZVswXVsxXSxlWzFdWzFdXX19LHdDZT17bmFtZToieHkiLGhhbmRsZXM6WyJuIiwiZSIsInMiLCJ3IiwibnciLCJuZSIsInNlIiwic3ciXS5tYXAoaFQpLGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxXcD17b3ZlcmxheToiY3Jvc3NoYWlyIixzZWxlY3Rpb246Im1vdmUiLG46Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sbEN0PXtlOiJ3Iix3OiJlIixudzoibmUiLG5lOiJudyIsc2U6InN3Iixzdzoic2UifSxjQ3Q9e246InMiLHM6Im4iLG53OiJzdyIsbmU6InNlIixzZToibmUiLHN3OiJudyJ9LFNDZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46bnVsbCxlOjEsczpudWxsLHc6LTEsbnc6LTEsbmU6MSxzZToxLHN3Oi0xfSxNQ2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOi0xLGU6bnVsbCxzOjEsdzpudWxsLG53Oi0xLG5lOi0xLHNlOjEsc3c6MX19KTt2YXIgbUN0PU0oKCk9PntkQ3QoKX0pO2Z1bmN0aW9uIGxnKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciB2eT1NKCgpPT57fSk7ZnVuY3Rpb24gQUsoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9Q0NlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gQ0NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBsZyhlKHQpLHIpfX12YXIgUEs9TSgoKT0+e3Z5KCl9KTt2YXIgZ0N0LEFDZSxQQ2UsSUs9TSgoKT0+e3Z5KCk7UEsoKTtnQ3Q9QUsobGcpLEFDZT1nQ3QucmlnaHQsUENlPWdDdC5sZWZ0fSk7dmFyIExLPU0oKCk9Pnt9KTt2YXIgX0N0PU0oKCk9PntMSygpfSk7dmFyIHlDdD1NKCgpPT57fSk7dmFyIHkyPU0oKCk9Pnt9KTt2YXIga0s9TSgoKT0+e3kyKCl9KTt2YXIgUks9TSgoKT0+e2tLKCl9KTt2YXIgTks9TSgoKT0+e30pO3ZhciB2Q3QsTENlLGtDZSxESz1NKCgpPT57dkN0PUFycmF5LnByb3RvdHlwZSxMQ2U9dkN0LnNsaWNlLGtDZT12Q3QubWFwfSk7dmFyIHhDdD1NKCgpPT57fSk7dmFyIGJDdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlQoZSx0LHIpe2U9K2UsdD0rdCxyPShpPWFyZ3VtZW50cy5sZW5ndGgpPDI/KHQ9ZSxlPTAsMSk6aTwzPzE6K3I7Zm9yKHZhciBuPS0xLGk9TWF0aC5tYXgoMCxNYXRoLmNlaWwoKHQtZSkvcikpfDAsbz1uZXcgQXJyYXkoaSk7KytuPGk7KW9bbl09ZStuKnI7cmV0dXJuIG99dmFyIE9LPU0oKCk9Pnt9KTt2YXIgZmxuLHBsbixkbG4seks9TSgoKT0+e2Zsbj1NYXRoLnNxcnQoNTApLHBsbj1NYXRoLnNxcnQoMTApLGRsbj1NYXRoLnNxcnQoMil9KTt2YXIgRks9TSgoKT0+e30pO3ZhciB3Q3Q9TSgoKT0+e0RLKCk7SUsoKTt4Q3QoKTtOSygpO2JDdCgpO09LKCk7eksoKTtGSygpfSk7dmFyIFpSPU0oKCk9Pnt5MigpfSk7dmFyIE1DdD1NKCgpPT57REsoKTt2eSgpO3kyKCk7WlIoKX0pO3ZhciBFQ3Q9TSgoKT0+e1JLKCl9KTt2YXIgVEN0PU0oKCk9Pnt9KTt2YXIgQ0N0PU0oKCk9Pnt5MigpfSk7dmFyIEFDdD1NKCgpPT57dnkoKTt5MigpO1pSKCl9KTt2YXIgUEN0PU0oKCk9Pnt9KTt2YXIgQks9TSgoKT0+e30pO3ZhciBJQ3Q9TSgoKT0+e30pO3ZhciBMQ3Q9TSgoKT0+e3Z5KCl9KTt2YXIga0N0PU0oKCk9Pnt9KTt2YXIgUkN0PU0oKCk9Pnt9KTt2YXIgSEs9TSgoKT0+e0JLKCl9KTt2YXIgTkN0PU0oKCk9PntISygpfSk7dmFyIERDdD1NKCgpPT57SUsoKTt2eSgpO1BLKCk7X0N0KCk7eUN0KCk7UksoKTtOSygpO3dDdCgpO01DdCgpO0VDdCgpO0ZLKCk7VEN0KCk7Q0N0KCk7QUN0KCk7UEN0KCk7QksoKTtMSygpO0lDdCgpO1pSKCk7T0soKTtMQ3QoKTtrQ3QoKTtSQ3QoKTt6SygpO0hLKCk7a0soKTtOQ3QoKX0pO3ZhciBWSyxVSyxPQ3QscFQscUssR0ssV0s9TSgoKT0+e1ZLPU1hdGguY29zLFVLPU1hdGguc2luLE9DdD1NYXRoLlBJLHBUPU9DdC8yLHFLPU9DdCoyLEdLPU1hdGgubWF4fSk7ZnVuY3Rpb24gSENlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gekN0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1mVChhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChmVChhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9R0soMCxxSy1lKmEpL3AsXz1wP2U6cUsvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9R0soMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPUhDZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgRkN0PU0oKCk9PntEQ3QoKTtXSygpfSk7dmFyIEJDdCxIQ3Q9TSgoKT0+e0JDdD1BcnJheS5wcm90b3R5cGUuc2xpY2V9KTtmdW5jdGlvbiBKUihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFZDdD1NKCgpPT57fSk7ZnVuY3Rpb24gWEsoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBVQ3QoKXtyZXR1cm4gbmV3IFhLfXZhciBZSyxqSyx4eSxWQ2UsJEsscUN0PU0oKCk9PntZSz1NYXRoLlBJLGpLPTIqWUsseHk9MWUtNixWQ2U9aksteHk7WEsucHJvdG90eXBlPVVDdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhLLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD54eSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnh5KXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFlLLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPnh5JiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPnh5fHxNYXRoLmFicyh0aGlzLl95MS1jKT54eSkmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJWpLK2pLKSxoPlZDZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD54eSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49WUspKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTskSz1VQ3R9KTt2YXIgR0N0PU0oKCk9PntxQ3QoKX0pO2Z1bmN0aW9uIFVDZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gcUNlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBHQ2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIFdDZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIFlDZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBXQ3QoKXt2YXIgZT1VQ2UsdD1xQ2Uscj1HQ2Usbj1XQ2UsaT1ZQ2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUJDdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLXBULHA9aS5hcHBseSh0aGlzLGwpLXBULGQ9aCpWSyhmKSxnPWgqVUsoZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLXBULHg9aS5hcHBseSh0aGlzLGwpLXBUO2lmKG98fChvPXM9JEsoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKlZLKHkpLF8qVUsoeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkpSKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpKUigrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkpSKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9dmFyIFlDdD1NKCgpPT57SEN0KCk7VkN0KCk7V0soKTtHQ3QoKX0pO3ZhciBqQ3Q9TSgoKT0+e0ZDdCgpO1lDdCgpfSk7ZnVuY3Rpb24gUVIoKXt9ZnVuY3Rpb24gWEN0KGUsdCl7dmFyIHI9bmV3IFFSO2lmKGUgaW5zdGFuY2VvZiBRUillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgbGwsYnksdE49TSgoKT0+e2xsPSIkIjtRUi5wcm90b3R5cGU9WEN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UVIsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBsbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tsbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbbGwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9bGwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09bGwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWxsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWxsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1sbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtieT1YQ3R9KTtmdW5jdGlvbiBaQ3QoKXt2YXIgZT1bXSx0PVtdLHIsbixpO2Z1bmN0aW9uIG8ocyxsLGMsdSl7aWYobD49ZS5sZW5ndGgpcmV0dXJuIHIhPW51bGwmJnMuc29ydChyKSxuIT1udWxsP24ocyk6cztmb3IodmFyIGg9LTEsZj1zLmxlbmd0aCxwPWVbbCsrXSxkLGcsXz1ieSgpLHkseD1jKCk7KytoPGY7KSh5PV8uZ2V0KGQ9cChnPXNbaF0pKyIiKSk/eS5wdXNoKGcpOl8uc2V0KGQsW2ddKTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGIsUyl7dSh4LFMsbyhiLGwsYyx1KSl9KSx4fWZ1bmN0aW9uIGEocyxsKXtpZigrK2w+ZS5sZW5ndGgpcmV0dXJuIHM7dmFyIGMsdT10W2wtMV07cmV0dXJuIG4hPW51bGwmJmw+PWUubGVuZ3RoP2M9cy5lbnRyaWVzKCk6KGM9W10scy5lYWNoKGZ1bmN0aW9uKGgsZil7Yy5wdXNoKHtrZXk6Zix2YWx1ZXM6YShoLGwpfSl9KSksdSE9bnVsbD9jLnNvcnQoZnVuY3Rpb24oaCxmKXtyZXR1cm4gdShoLmtleSxmLmtleSl9KTpjfXJldHVybiBpPXtvYmplY3Q6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLGpDZSxYQ2UpfSxtYXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocywwLCRDdCxLQ3QpfSxlbnRyaWVzOmZ1bmN0aW9uKHMpe3JldHVybiBhKG8ocywwLCRDdCxLQ3QpLDApfSxrZXk6ZnVuY3Rpb24ocyl7cmV0dXJuIGUucHVzaChzKSxpfSxzb3J0S2V5czpmdW5jdGlvbihzKXtyZXR1cm4gdFtlLmxlbmd0aC0xXT1zLGl9LHNvcnRWYWx1ZXM6ZnVuY3Rpb24ocyl7cmV0dXJuIHI9cyxpfSxyb2xsdXA6ZnVuY3Rpb24ocyl7cmV0dXJuIG49cyxpfX19ZnVuY3Rpb24gakNlKCl7cmV0dXJue319ZnVuY3Rpb24gWENlKGUsdCxyKXtlW3RdPXJ9ZnVuY3Rpb24gJEN0KCl7cmV0dXJuIGJ5KCl9ZnVuY3Rpb24gS0N0KGUsdCxyKXtlLnNldCh0LHIpfXZhciBKQ3Q9TSgoKT0+e3ROKCl9KTtmdW5jdGlvbiBlTigpe31mdW5jdGlvbiBRQ3QoZSx0KXt2YXIgcj1uZXcgZU47aWYoZSBpbnN0YW5jZW9mIGVOKWUuZWFjaChmdW5jdGlvbihvKXtyLmFkZChvKX0pO2Vsc2UgaWYoZSl7dmFyIG49LTEsaT1lLmxlbmd0aDtpZih0PT1udWxsKWZvcig7KytuPGk7KXIuYWRkKGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5hZGQodChlW25dLG4sZSkpfXJldHVybiByfXZhciB3eSx0QXQsZUF0PU0oKCk9Pnt0TigpO3d5PWJ5LnByb3RvdHlwZTtlTi5wcm90b3R5cGU9UUN0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZU4saGFzOnd5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbbGwrZV09ZSx0aGlzfSxyZW1vdmU6d3kucmVtb3ZlLGNsZWFyOnd5LmNsZWFyLHZhbHVlczp3eS5rZXlzLHNpemU6d3kuc2l6ZSxlbXB0eTp3eS5lbXB0eSxlYWNoOnd5LmVhY2h9O3RBdD1RQ3R9KTtmdW5jdGlvbiByQXQoZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fXZhciBuQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlBdChlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2goZVtyXSk7cmV0dXJuIHR9dmFyIG9BdD1NKCgpPT57fSk7ZnVuY3Rpb24gYUF0KGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaCh7a2V5OnIsdmFsdWU6ZVtyXX0pO3JldHVybiB0fXZhciBzQXQ9TSgoKT0+e30pO3ZhciBsQXQ9TSgoKT0+e0pDdCgpO2VBdCgpO3ROKCk7bkF0KCk7b0F0KCk7c0F0KCl9KTtmdW5jdGlvbiBZcChlLHQscil7ZS5wcm90b3R5cGU9dC5wcm90b3R5cGU9cixyLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gY2coZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIHJOPU0oKCk9Pnt9KTtmdW5jdGlvbiB0Zigpe31mdW5jdGlvbiB4MihlKXt2YXIgdDtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9JENlLmV4ZWMoZSkpPyh0PXBhcnNlSW50KHRbMV0sMTYpLG5ldyB0byh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSkpOih0PUtDZS5leGVjKGUpKT91QXQocGFyc2VJbnQodFsxXSwxNikpOih0PVpDZS5leGVjKGUpKT9uZXcgdG8odFsxXSx0WzJdLHRbM10sMSk6KHQ9SkNlLmV4ZWMoZSkpP25ldyB0byh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1RQ2UuZXhlYyhlKSk/aEF0KHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PXRBZS5leGVjKGUpKT9oQXQodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9ZUFlLmV4ZWMoZSkpP2ZBdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PXJBZS5leGVjKGUpKT9mQXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTpjQXQuaGFzT3duUHJvcGVydHkoZSk/dUF0KGNBdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IHRvKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdUF0KGUpe3JldHVybiBuZXcgdG8oZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIGhBdChlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IHRvKGUsdCxyLG4pfWZ1bmN0aW9uIG1UKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGZ8fChlPXgyKGUpKSxlPyhlPWUucmdiKCksbmV3IHRvKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyB0b31mdW5jdGlvbiBaSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bVQoZSk6bmV3IHRvKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiB0byhlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gZkF0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgSmgoZSx0LHIsbil9ZnVuY3Rpb24gbkFlKGUpe2lmKGUgaW5zdGFuY2VvZiBKaClyZXR1cm4gbmV3IEpoKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIHRmfHwoZT14MihlKSksIWUpcmV0dXJuIG5ldyBKaDtpZihlIGluc3RhbmNlb2YgSmgpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgSmgoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKSyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bkFlKGUpOm5ldyBKaChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gSmgoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEtLKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciB1ZyxTeSx2MixkVCxRaCwkQ2UsS0NlLFpDZSxKQ2UsUUNlLHRBZSxlQWUsckFlLGNBdCxuTj1NKCgpPT57ck4oKTt1Zz0uNyxTeT0xL3VnLHYyPSJcXHMqKFsrLV0/XFxkKylcXHMqIixkVD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixRaD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsJENlPS9eIyhbMC05YS1mXXszfSkkLyxLQ2U9L14jKFswLTlhLWZdezZ9KSQvLFpDZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbdjIsdjIsdjJdKyJcXCkkIiksSkNlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tRaCxRaCxRaF0rIlxcKSQiKSxRQ2U9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1t2Mix2Mix2MixkVF0rIlxcKSQiKSx0QWU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tRaCxRaCxRaCxkVF0rIlxcKSQiKSxlQWU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2RULFFoLFFoXSsiXFwpJCIpLHJBZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW2RULFFoLFFoLGRUXSsiXFwpJCIpLGNBdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtZcCh0Zix4Mix7ZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifX0pO1lwKHRvLFpLLGNnKHRmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1N5Ok1hdGgucG93KFN5LGUpLG5ldyB0byh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD91ZzpNYXRoLnBvdyh1ZyxlKSxuZXcgdG8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIDA8PXRoaXMuciYmdGhpcy5yPD0yNTUmJjA8PXRoaXMuZyYmdGhpcy5nPD0yNTUmJjA8PXRoaXMuYiYmdGhpcy5iPD0yNTUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSx0b1N0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7WXAoSmgsSkssY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IEpoKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgdG8oS0soZT49MjQwP2UtMjQwOmUrMTIwLGksbiksS0soZSxpLG4pLEtLKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9fSkpfSk7dmFyIGlOLG9OLFFLPU0oKCk9PntpTj1NYXRoLlBJLzE4MCxvTj0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIGlaKGUpe2lmKGUgaW5zdGFuY2VvZiBqcClyZXR1cm4gbmV3IGpwKGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhnKXt2YXIgdD1lLmgqaU47cmV0dXJuIG5ldyBqcChlLmwsTWF0aC5jb3ModCkqZS5jLE1hdGguc2luKHQpKmUuYyxlLm9wYWNpdHkpfWUgaW5zdGFuY2VvZiB0b3x8KGU9bVQoZSkpO3ZhciByPW5aKGUuciksbj1uWihlLmcpLGk9blooZS5iKSxvPXRaKCguNDEyNDU2NCpyKy4zNTc1NzYxKm4rLjE4MDQzNzUqaSkvcEF0KSxhPXRaKCguMjEyNjcyOSpyKy43MTUxNTIyKm4rLjA3MjE3NSppKS9kQXQpLHM9dFooKC4wMTkzMzM5KnIrLjExOTE5MipuKy45NTAzMDQxKmkpL21BdCk7cmV0dXJuIG5ldyBqcCgxMTYqYS0xNiw1MDAqKG8tYSksMjAwKihhLXMpLGUub3BhY2l0eSl9ZnVuY3Rpb24gc04oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2laKGUpOm5ldyBqcChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24ganAoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHRaKGUpe3JldHVybiBlPmlBZT9NYXRoLnBvdyhlLDEvMyk6ZS9fQXQrZ0F0fWZ1bmN0aW9uIGVaKGUpe3JldHVybiBlPmIyP2UqZSplOl9BdCooZS1nQXQpfWZ1bmN0aW9uIHJaKGUpe3JldHVybiAyNTUqKGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gblooZSl7cmV0dXJuKGUvPTI1NSk8PS4wNDA0NT9lLzEyLjkyOk1hdGgucG93KChlKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gb0FlKGUpe2lmKGUgaW5zdGFuY2VvZiBoZylyZXR1cm4gbmV3IGhnKGUuaCxlLmMsZS5sLGUub3BhY2l0eSk7ZSBpbnN0YW5jZW9mIGpwfHwoZT1pWihlKSk7dmFyIHQ9TWF0aC5hdGFuMihlLmIsZS5hKSpvTjtyZXR1cm4gbmV3IGhnKHQ8MD90KzM2MDp0LE1hdGguc3FydChlLmEqZS5hK2UuYiplLmIpLGUubCxlLm9wYWNpdHkpfWZ1bmN0aW9uIG9aKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9vQWUoZSk6bmV3IGhnKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoZyhlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGFOLHBBdCxkQXQsbUF0LGdBdCxiMixfQXQsaUFlLHlBdD1NKCgpPT57ck4oKTtuTigpO1FLKCk7YU49MTgscEF0PS45NTA0NyxkQXQ9MSxtQXQ9MS4wODg4MyxnQXQ9NC8yOSxiMj02LzI5LF9BdD0zKmIyKmIyLGlBZT1iMipiMipiMjtZcChqcCxzTixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBqcCh0aGlzLmwrYU4qKGU9PW51bGw/MTplKSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGpwKHRoaXMubC1hTiooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9lOmUrdGhpcy5hLzUwMCxyPWlzTmFOKHRoaXMuYik/ZTplLXRoaXMuYi8yMDA7cmV0dXJuIGU9ZEF0KmVaKGUpLHQ9cEF0KmVaKHQpLHI9bUF0KmVaKHIpLG5ldyB0byhyWigzLjI0MDQ1NDIqdC0xLjUzNzEzODUqZS0uNDk4NTMxNCpyKSxyWigtLjk2OTI2Nip0KzEuODc2MDEwOCplKy4wNDE1NTYqciksclooLjA1NTY0MzQqdC0uMjA0MDI1OSplKzEuMDU3MjI1MipyKSx0aGlzLm9wYWNpdHkpfX0pKTtZcChoZyxvWixjZyh0Zix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoZyh0aGlzLmgsdGhpcy5jLHRoaXMubCthTiooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGhnKHRoaXMuaCx0aGlzLmMsdGhpcy5sLWFOKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGlaKHRoaXMpLnJnYigpfX0pKX0pO2Z1bmN0aW9uIGFBZShlKXtpZihlIGluc3RhbmNlb2YgTXkpcmV0dXJuIG5ldyBNeShlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiB0b3x8KGU9bVQoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShiQXQqbit2QXQqdC14QXQqcikvKGJBdCt2QXQteEF0KSxvPW4taSxhPShnVCooci1pKS1zWipvKS9sTixzPU1hdGguc3FydChhKmErbypvKS8oZ1QqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSpvTi0xMjA6TmFOO3JldHVybiBuZXcgTXkobDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gY04oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2FBZShlKTpuZXcgTXkoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIE15KGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn12YXIgd0F0LGFaLHNaLGxOLGdULHZBdCx4QXQsYkF0LFNBdD1NKCgpPT57ck4oKTtuTigpO1FLKCk7d0F0PS0uMTQ4NjEsYVo9MS43ODI3NyxzWj0tLjI5MjI3LGxOPS0uOTA2NDksZ1Q9MS45NzI5NCx2QXQ9Z1QqbE4seEF0PWdUKmFaLGJBdD1hWipzWi1sTip3QXQ7WXAoTXksY04sY2codGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/U3k6TWF0aC5wb3coU3ksZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dWc6TWF0aC5wb3codWcsZSksbmV3IE15KHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9aXNOYU4odGhpcy5oKT8wOih0aGlzLmgrMTIwKSppTix0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgdG8oMjU1Kih0K3IqKHdBdCpuK2FaKmkpKSwyNTUqKHQrciooc1oqbitsTippKSksMjU1Kih0K3IqKGdUKm4pKSx0aGlzLm9wYWNpdHkpfX0pKX0pO3ZhciBNQXQ9TSgoKT0+e25OKCk7eUF0KCk7U0F0KCl9KTtmdW5jdGlvbiBUQXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHIpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IHVOKHIpfWZ1bmN0aW9uIHVOKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIGxBZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGNBZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEVBdChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09c0FlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgc0FlLENBdCxBQXQ9TSgoKT0+e3NBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTt1Ti5wcm90b3R5cGU9VEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dU4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1sQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1jQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUVBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUVBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgdU4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O0NBdD1UQXR9KTt2YXIgUEF0PU0oKCk9PntBQXQoKX0pO2Z1bmN0aW9uIExBdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBoTihyKX1mdW5jdGlvbiBoTihlKXt0aGlzLl89ZX1mdW5jdGlvbiBoQWUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBmQWUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBJQXQoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPXVBZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIHVBZSxsWixrQXQ9TSgoKT0+e3VBZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtoTi5wcm90b3R5cGU9TEF0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6aE4sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1oQWUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1mQWUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPUlBdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPUlBdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgaE4oZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O2xaPUxBdH0pO3ZhciBSQXQ9TSgoKT0+e2tBdCgpfSk7dmFyIGZOLGNaLHVaPU0oKCk9PntmTj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsY1o9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOmZOLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBwTihlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxjWi5oYXNPd25Qcm9wZXJ0eSh0KT97c3BhY2U6Y1pbdF0sbG9jYWw6ZX06ZX12YXIgaFo9TSgoKT0+e3VaKCl9KTtmdW5jdGlvbiBwQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1mTiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09Zk4/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIGRBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBkTihlKXt2YXIgdD1wTihlKTtyZXR1cm4odC5sb2NhbD9kQWU6cEFlKSh0KX12YXIgZlo9TSgoKT0+e2haKCk7dVooKX0pO2Z1bmN0aW9uIG1BZSgpe31mdW5jdGlvbiBtTihlKXtyZXR1cm4gZT09bnVsbD9tQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgcFo9TSgoKT0+e30pO2Z1bmN0aW9uIE5BdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9bU4oZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBkaShuLHRoaXMuX3BhcmVudHMpfXZhciBEQXQ9TSgoKT0+e2VmKCk7cFooKX0pO2Z1bmN0aW9uIGdBZSgpe3JldHVybltdfWZ1bmN0aW9uIE9BdChlKXtyZXR1cm4gZT09bnVsbD9nQWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX12YXIgekF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGQXQoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPU9BdChlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgZGkobixpKX12YXIgQkF0PU0oKCk9PntlZigpO3pBdCgpfSk7ZnVuY3Rpb24gSEF0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBWQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVBdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SEF0KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBkaShuLHRoaXMuX3BhcmVudHMpfXZhciBxQXQ9TSgoKT0+e2VmKCk7VkF0KCl9KTtmdW5jdGlvbiBnTihlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgZFo9TSgoKT0+e30pO2Z1bmN0aW9uIEdBdCgpe3JldHVybiBuZXcgZGkodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoZ04pLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIF9UKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBtWj1NKCgpPT57ZFooKTtlZigpO19ULnByb3RvdHlwZT17Y29uc3RydWN0b3I6X1QsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBXQXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBZQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9BZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgX1QoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHlBZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPWpBdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPWpBdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyBfVChlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFhBdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/eUFlOl9BZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPVdBdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgZGkoYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBqQXQsJEF0PU0oKCk9PntlZigpO21aKCk7WUF0KCk7akF0PSIkIn0pO2Z1bmN0aW9uIEtBdCgpe3JldHVybiBuZXcgZGkodGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChnTiksdGhpcy5fcGFyZW50cyl9dmFyIFpBdD1NKCgpPT57ZFooKTtlZigpfSk7ZnVuY3Rpb24gSkF0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBRQXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHQ0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgZGkoYSx0aGlzLl9wYXJlbnRzKX12YXIgZTR0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24gcjR0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgbjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBpNHQoZSl7ZXx8KGU9dkFlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IGRpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiB2QWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIG80dD1NKCgpPT57ZWYoKX0pO2Z1bmN0aW9uIGE0dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgczR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsNHQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgYzR0PU0oKCk9Pnt9KTtmdW5jdGlvbiB1NHQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBoNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGY0dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIHA0dD1NKCgpPT57fSk7ZnVuY3Rpb24gZDR0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBtNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGc0dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIF80dD1NKCgpPT57fSk7ZnVuY3Rpb24geEFlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBiQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiB3QWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBTQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gTUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBFQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24geTR0KGUsdCl7dmFyIHI9cE4oZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP2JBZTp4QWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9FQWU6TUFlOnIubG9jYWw/U0FlOndBZSkocix0KSl9dmFyIHY0dD1NKCgpPT57aFooKX0pO2Z1bmN0aW9uIF9OKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgZ1o9TSgoKT0+e30pO2Z1bmN0aW9uIFRBZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBDQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBBQWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24geDR0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9UQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/QUFlOkNBZSkoZSx0LHI9PW51bGw/IiI6cikpOlBBZSh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBQQWUoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxfTihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgYjR0PU0oKCk9PntnWigpfSk7ZnVuY3Rpb24gSUFlKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBMQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIGtBZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiB3NHQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9JQWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/a0FlOkxBZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIFM0dD1NKCgpPT57fSk7ZnVuY3Rpb24gTTR0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBfWihlKXtyZXR1cm4gZS5jbGFzc0xpc3R8fG5ldyBFNHQoZSl9ZnVuY3Rpb24gRTR0KGUpe3RoaXMuX25vZGU9ZSx0aGlzLl9uYW1lcz1NNHQoZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBUNHQoZSx0KXtmb3IodmFyIHI9X1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBDNHQoZSx0KXtmb3IodmFyIHI9X1ooZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBSQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7VDR0KHRoaXMsZSl9fWZ1bmN0aW9uIE5BZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtDNHQodGhpcyxlKX19ZnVuY3Rpb24gREFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP1Q0dDpDNHQpKHRoaXMsZSl9fWZ1bmN0aW9uIEE0dChlLHQpe3ZhciByPU00dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1fWih0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9EQWU6dD9SQWU6TkFlKShyLHQpKX12YXIgUDR0PU0oKCk9PntFNHQucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0PDAmJih0aGlzLl9uYW1lcy5wdXNoKGUpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UodCwxKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihlKT49MH19fSk7ZnVuY3Rpb24gT0FlKCl7dGhpcy50ZXh0Q29udGVudD0iIn1mdW5jdGlvbiB6QWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBGQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50ZXh0Q29udGVudD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIEk0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9PQWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0ZBZTp6QWUpKGUpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH12YXIgTDR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCQWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBIQWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9ZX19ZnVuY3Rpb24gVkFlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gazR0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0JBZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/VkFlOkhBZSkoZSkpOnRoaXMubm9kZSgpLmlubmVySFRNTH12YXIgUjR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVQWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gTjR0KCl7cmV0dXJuIHRoaXMuZWFjaChVQWUpfXZhciBENHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFBZSgpe3RoaXMucHJldmlvdXNTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIE80dCgpe3JldHVybiB0aGlzLmVhY2gocUFlKX12YXIgejR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGNHQoZSl7dmFyIHQ9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpkTihlKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZCh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX12YXIgQjR0PU0oKCk9PntmWigpfSk7ZnVuY3Rpb24gR0FlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gSDR0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpkTihlKSxuPXQ9PW51bGw/R0FlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bU4odCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBWNHQ9TSgoKT0+e2ZaKCk7cFooKX0pO2Z1bmN0aW9uIFdBZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIFU0dCgpe3JldHVybiB0aGlzLmVhY2goV0FlKX12YXIgcTR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBZQWUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGpBZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gRzR0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP2pBZTpZQWUpfXZhciBXNHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFk0dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIGo0dD1NKCgpPT57fSk7ZnVuY3Rpb24gWEFlKGUsdCxyKXtyZXR1cm4gZT1LNHQoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gSzR0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9c247c249bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7c249aX19fWZ1bmN0aW9uICRBZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gS0FlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFpBZShlLHQscil7dmFyIG49JDR0Lmhhc093blByb3BlcnR5KGUudHlwZSk/WEFlOks0dDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBaNHQoZSx0LHIpe3ZhciBuPSRBZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/WkFlOktBZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiB5TihlLHQscixuKXt2YXIgaT1zbjtlLnNvdXJjZUV2ZW50PXNuLHNuPWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtzbj1pfX12YXIgJDR0LHNuLFg0dCx2Tj1NKCgpPT57JDR0PXt9LHNuPW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKFg0dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBYNHR8fCgkNHQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gSjR0KGUsdCxyKXt2YXIgbj1fTihlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBKQWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSjR0KHRoaXMsZSx0KX19ZnVuY3Rpb24gUUFlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEo0dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBRNHQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9RQWU6SkFlKShlLHQpKX12YXIgdFB0PU0oKCk9PntnWigpfSk7ZnVuY3Rpb24gZGkoZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24gdDRlKCl7cmV0dXJuIG5ldyBkaShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLHlaKX12YXIgeVosZWY9TSgoKT0+e0RBdCgpO0JBdCgpO3FBdCgpOyRBdCgpO21aKCk7WkF0KCk7UUF0KCk7ZTR0KCk7bjR0KCk7bzR0KCk7czR0KCk7YzR0KCk7aDR0KCk7cDR0KCk7bTR0KCk7XzR0KCk7djR0KCk7YjR0KCk7UzR0KCk7UDR0KCk7TDR0KCk7UjR0KCk7RDR0KCk7ejR0KCk7QjR0KCk7VjR0KCk7cTR0KCk7VzR0KCk7ajR0KCk7dk4oKTt0UHQoKTt5Wj1bbnVsbF07ZGkucHJvdG90eXBlPXQ0ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRpLHNlbGVjdDpOQXQsc2VsZWN0QWxsOkZBdCxmaWx0ZXI6VUF0LGRhdGE6WEF0LGVudGVyOkdBdCxleGl0OktBdCxqb2luOkpBdCxtZXJnZTp0NHQsb3JkZXI6cjR0LHNvcnQ6aTR0LGNhbGw6YTR0LG5vZGVzOmw0dCxub2RlOnU0dCxzaXplOmY0dCxlbXB0eTpkNHQsZWFjaDpnNHQsYXR0cjp5NHQsc3R5bGU6eDR0LHByb3BlcnR5Onc0dCxjbGFzc2VkOkE0dCx0ZXh0Okk0dCxodG1sOms0dCxyYWlzZTpONHQsbG93ZXI6TzR0LGFwcGVuZDpGNHQsaW5zZXJ0Okg0dCxyZW1vdmU6VTR0LGNsb25lOkc0dCxkYXR1bTpZNHQsb246WjR0LGRpc3BhdGNoOlE0dH19KTtmdW5jdGlvbiBFeShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP25ldyBkaShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGRpKFtbZV1dLHlaKX12YXIgZVB0PU0oKCk9PntlZigpfSk7ZnVuY3Rpb24geE4oKXtmb3IodmFyIGU9c24sdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgdlo9TSgoKT0+e3ZOKCl9KTtmdW5jdGlvbiBiTihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciB4Wj1NKCgpPT57fSk7ZnVuY3Rpb24gYlooZSl7dmFyIHQ9eE4oKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksYk4oZSx0KX12YXIgclB0PU0oKCk9Pnt2WigpO3haKCl9KTtmdW5jdGlvbiB3WihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9eE4oKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBiTihlLG8pO3JldHVybiBudWxsfXZhciBuUHQ9TSgoKT0+e3ZaKCk7eFooKX0pO3ZhciB3Tj1NKCgpPT57clB0KCk7ZVB0KCk7blB0KCk7dk4oKX0pO2Z1bmN0aW9uIFNOKCl7c24uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZmcoKXtzbi5wcmV2ZW50RGVmYXVsdCgpLHNuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBTWj1NKCgpPT57d04oKX0pO2Z1bmN0aW9uIE1OKGUpe3ZhciB0PWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHI9RXkoZSkub24oImRyYWdzdGFydC5kcmFnIixmZywhMCk7Im9uc2VsZWN0c3RhcnQiaW4gdD9yLm9uKCJzZWxlY3RzdGFydC5kcmFnIixmZywhMCk6KHQuX19ub3NlbGVjdD10LnN0eWxlLk1velVzZXJTZWxlY3QsdC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9ZnVuY3Rpb24gRU4oZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPUV5KGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLGZnLCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBNWj1NKCgpPT57d04oKTtTWigpfSk7ZnVuY3Rpb24geVQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBpUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHZUKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfXZhciBvUHQ9TSgoKT0+e3ZULnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9fSk7ZnVuY3Rpb24gZTRlKCl7cmV0dXJuIXNuLmJ1dHRvbn1mdW5jdGlvbiByNGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlfWZ1bmN0aW9uIG40ZShlKXtyZXR1cm4gZT09bnVsbD97eDpzbi54LHk6c24ueX06ZX1mdW5jdGlvbiBpNGUoKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gYVB0KCl7dmFyIGU9ZTRlLHQ9cjRlLHI9bjRlLG49aTRlLGk9e30sbz1sWigic3RhcnQiLCJkcmFnIiwiZW5kIiksYT0wLHMsbCxjLHUsaD0wO2Z1bmN0aW9uIGYoUyl7Uy5vbigibW91c2Vkb3duLmRyYWciLHApLmZpbHRlcihuKS5vbigidG91Y2hzdGFydC5kcmFnIixfKS5vbigidG91Y2htb3ZlLmRyYWciLHkpLm9uKCJ0b3VjaGVuZC5kcmFnIHRvdWNoY2FuY2VsLmRyYWciLHgpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBwKCl7aWYoISh1fHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpKXt2YXIgUz1iKCJtb3VzZSIsdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksYlosdGhpcyxhcmd1bWVudHMpOyFTfHwoRXkoc24udmlldykub24oIm1vdXNlbW92ZS5kcmFnIixkLCEwKS5vbigibW91c2V1cC5kcmFnIixnLCEwKSxNTihzbi52aWV3KSxTTigpLGM9ITEscz1zbi5jbGllbnRYLGw9c24uY2xpZW50WSxTKCJzdGFydCIpKX19ZnVuY3Rpb24gZCgpe2lmKGZnKCksIWMpe3ZhciBTPXNuLmNsaWVudFgtcyxDPXNuLmNsaWVudFktbDtjPVMqUytDKkM+aH1pLm1vdXNlKCJkcmFnIil9ZnVuY3Rpb24gZygpe0V5KHNuLnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyBtb3VzZXVwLmRyYWciLG51bGwpLEVOKHNuLnZpZXcsYyksZmcoKSxpLm1vdXNlKCJlbmQiKX1mdW5jdGlvbiBfKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFM9c24uY2hhbmdlZFRvdWNoZXMsQz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxQPVMubGVuZ3RoLGssTztmb3Ioaz0wO2s8UDsrK2spKE89YihTW2tdLmlkZW50aWZpZXIsQyx3Wix0aGlzLGFyZ3VtZW50cykpJiYoU04oKSxPKCJzdGFydCIpKX19ZnVuY3Rpb24geSgpe3ZhciBTPXNuLmNoYW5nZWRUb3VjaGVzLEM9Uy5sZW5ndGgsUCxrO2ZvcihQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoZmcoKSxrKCJkcmFnIikpfWZ1bmN0aW9uIHgoKXt2YXIgUz1zbi5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IodSYmY2xlYXJUaW1lb3V0KHUpLHU9c2V0VGltZW91dChmdW5jdGlvbigpe3U9bnVsbH0sNTAwKSxQPTA7UDxDOysrUCkoaz1pW1NbUF0uaWRlbnRpZmllcl0pJiYoU04oKSxrKCJlbmQiKSl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe3ZhciBEPVAoQyxTKSxCLEksTCxSPW8uY29weSgpO2lmKCEheU4obmV3IHZUKGYsImJlZm9yZXN0YXJ0IixCLFMsYSxEWzBdLERbMV0sMCwwLFIpLGZ1bmN0aW9uKCl7cmV0dXJuKHNuLnN1YmplY3Q9Qj1yLmFwcGx5KGssTykpPT1udWxsPyExOihJPUIueC1EWzBdfHwwLEw9Qi55LURbMV18fDAsITApfSkpcmV0dXJuIGZ1bmN0aW9uIEYoeil7dmFyIFU9RCxXO3N3aXRjaCh6KXtjYXNlInN0YXJ0IjppW1NdPUYsVz1hKys7YnJlYWs7Y2FzZSJlbmQiOmRlbGV0ZSBpW1NdLC0tYTtjYXNlImRyYWciOkQ9UChDLFMpLFc9YTticmVha315TihuZXcgdlQoZix6LEIsUyxXLERbMF0rSSxEWzFdK0wsRFswXS1VWzBdLERbMV0tVVsxXSxSKSxSLmFwcGx5LFIsW3osayxPXSl9fXJldHVybiBmLmZpbHRlcj1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnlUKCEhUyksZik6ZX0sZi5jb250YWluZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp5VChTKSxmKTp0fSxmLnN1YmplY3Q9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIFM9PSJmdW5jdGlvbiI/Uzp5VChTKSxmKTpyfSxmLnRvdWNoYWJsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgUz09ImZ1bmN0aW9uIj9TOnlUKCEhUyksZik6bn0sZi5vbj1mdW5jdGlvbigpe3ZhciBTPW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBTPT09bz9mOlN9LGYuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0oUz0rUykqUyxmKTpNYXRoLnNxcnQoaCl9LGZ9dmFyIHNQdD1NKCgpPT57UkF0KCk7d04oKTtNWigpO1NaKCk7aVB0KCk7b1B0KCl9KTt2YXIgbFB0PU0oKCk9PntzUHQoKTtNWigpfSk7ZnVuY3Rpb24gdVB0KGUpe3JldHVybiBuZXcgRnVuY3Rpb24oImQiLCJyZXR1cm4geyIrZS5tYXAoZnVuY3Rpb24odCxyKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCkrIjogZFsiK3IrIl0ifSkuam9pbigiLCIpKyJ9Iil9ZnVuY3Rpb24gbzRlKGUsdCl7dmFyIHI9dVB0KGUpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiB0KHIobiksaSxlKX19ZnVuY3Rpb24gYTRlKGUpe3ZhciB0PU9iamVjdC5jcmVhdGUobnVsbCkscj1bXTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2Zvcih2YXIgaSBpbiBuKWkgaW4gdHx8ci5wdXNoKHRbaV09aSl9KSxyfWZ1bmN0aW9uIHcyKGUpe3ZhciB0PW5ldyBSZWdFeHAoJ1siJytlK2AKXHJdYCkscj1lLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gbihjLHUpe3ZhciBoLGYscD1pKGMsZnVuY3Rpb24oZCxnKXtpZihoKXJldHVybiBoKGQsZy0xKTtmPWQsaD11P280ZShkLHUpOnVQdChkKX0pO3JldHVybiBwLmNvbHVtbnM9Znx8W10scH1mdW5jdGlvbiBpKGMsdSl7dmFyIGg9W10sZj1jLmxlbmd0aCxwPTAsZD0wLGcsXz1mPD0wLHk9ITE7Yy5jaGFyQ29kZUF0KGYtMSk9PT14VCYmLS1mLGMuY2hhckNvZGVBdChmLTEpPT09Q1omJi0tZjtmdW5jdGlvbiB4KCl7aWYoXylyZXR1cm4gRVo7aWYoeSlyZXR1cm4geT0hMSxjUHQ7dmFyIFMsQz1wLFA7aWYoYy5jaGFyQ29kZUF0KEMpPT09VFope2Zvcig7cCsrPGYmJmMuY2hhckNvZGVBdChwKSE9PVRafHxjLmNoYXJDb2RlQXQoKytwKT09PVRaOyk7cmV0dXJuKFM9cCk+PWY/Xz0hMDooUD1jLmNoYXJDb2RlQXQocCsrKSk9PT14VD95PSEwOlA9PT1DWiYmKHk9ITAsYy5jaGFyQ29kZUF0KHApPT09eFQmJisrcCksYy5zbGljZShDKzEsUy0xKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtwPGY7KXtpZigoUD1jLmNoYXJDb2RlQXQoUz1wKyspKT09PXhUKXk9ITA7ZWxzZSBpZihQPT09Q1opeT0hMCxjLmNoYXJDb2RlQXQocCk9PT14VCYmKytwO2Vsc2UgaWYoUCE9PXIpY29udGludWU7cmV0dXJuIGMuc2xpY2UoQyxTKX1yZXR1cm4gXz0hMCxjLnNsaWNlKEMsZil9Zm9yKDsoZz14KCkpIT09RVo7KXtmb3IodmFyIGI9W107ZyE9PWNQdCYmZyE9PUVaOyliLnB1c2goZyksZz14KCk7dSYmKGI9dShiLGQrKykpPT1udWxsfHxoLnB1c2goYil9cmV0dXJuIGh9ZnVuY3Rpb24gbyhjLHUpe3JldHVybiB1PT1udWxsJiYodT1hNGUoYykpLFt1Lm1hcChsKS5qb2luKGUpXS5jb25jYXQoYy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIHUubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBsKGhbZl0pfSkuam9pbihlKX0pKS5qb2luKGAKYCl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5tYXAocykuam9pbihgCmApfWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGMubWFwKGwpLmpvaW4oZSl9ZnVuY3Rpb24gbChjKXtyZXR1cm4gYz09bnVsbD8iIjp0LnRlc3QoYys9IiIpPyciJytjLnJlcGxhY2UoLyIvZywnIiInKSsnIic6Y31yZXR1cm57cGFyc2U6bixwYXJzZVJvd3M6aSxmb3JtYXQ6byxmb3JtYXRSb3dzOmF9fXZhciBjUHQsRVosVFoseFQsQ1osVE49TSgoKT0+e2NQdD17fSxFWj17fSxUWj0zNCx4VD0xMCxDWj0xM30pO3ZhciBDTixoUHQsZlB0LHBQdCxkUHQsbVB0PU0oKCk9PntUTigpO0NOPXcyKCIsIiksaFB0PUNOLnBhcnNlLGZQdD1DTi5wYXJzZVJvd3MscFB0PUNOLmZvcm1hdCxkUHQ9Q04uZm9ybWF0Um93c30pO3ZhciBBTixnUHQsX1B0LHlQdCx2UHQseFB0PU0oKCk9PntUTigpO0FOPXcyKCIJIiksZ1B0PUFOLnBhcnNlLF9QdD1BTi5wYXJzZVJvd3MseVB0PUFOLmZvcm1hdCx2UHQ9QU4uZm9ybWF0Um93c30pO3ZhciBiUHQ9TSgoKT0+e1ROKCk7bVB0KCk7eFB0KCl9KTtmdW5jdGlvbiB3UHQoZSl7cmV0dXJuK2V9dmFyIFNQdD1NKCgpPT57fSk7ZnVuY3Rpb24gTVB0KGUpe3JldHVybiBlKmV9ZnVuY3Rpb24gRVB0KGUpe3JldHVybiBlKigyLWUpfWZ1bmN0aW9uIEFaKGUpe3JldHVybigoZSo9Mik8PTE/ZSplOi0tZSooMi1lKSsxKS8yfXZhciBUUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIENQdChlKXtyZXR1cm4gZSplKmV9ZnVuY3Rpb24gQVB0KGUpe3JldHVybi0tZSplKmUrMX1mdW5jdGlvbiBQWihlKXtyZXR1cm4oKGUqPTIpPD0xP2UqZSplOihlLT0yKSplKmUrMikvMn12YXIgUFB0PU0oKCk9Pnt9KTt2YXIgSVosSVB0LExQdCxMWixrUHQ9TSgoKT0+e0laPTMsSVB0PWZ1bmN0aW9uIGUodCl7dD0rdDtmdW5jdGlvbiByKG4pe3JldHVybiBNYXRoLnBvdyhuLHQpfXJldHVybiByLmV4cG9uZW50PWUscn0oSVopLExQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gMS1NYXRoLnBvdygxLW4sdCl9cmV0dXJuIHIuZXhwb25lbnQ9ZSxyfShJWiksTFo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTw9MT9NYXRoLnBvdyhuLHQpOjItTWF0aC5wb3coMi1uLHQpKS8yfXJldHVybiByLmV4cG9uZW50PWUscn0oSVopfSk7ZnVuY3Rpb24gRFB0KGUpe3JldHVybiAxLU1hdGguY29zKGUqTlB0KX1mdW5jdGlvbiBPUHQoZSl7cmV0dXJuIE1hdGguc2luKGUqTlB0KX1mdW5jdGlvbiBrWihlKXtyZXR1cm4oMS1NYXRoLmNvcyhSUHQqZSkpLzJ9dmFyIFJQdCxOUHQselB0PU0oKCk9PntSUHQ9TWF0aC5QSSxOUHQ9UlB0LzJ9KTtmdW5jdGlvbiBGUHQoZSl7cmV0dXJuIE1hdGgucG93KDIsMTAqZS0xMCl9ZnVuY3Rpb24gQlB0KGUpe3JldHVybiAxLU1hdGgucG93KDIsLTEwKmUpfWZ1bmN0aW9uIFJaKGUpe3JldHVybigoZSo9Mik8PTE/TWF0aC5wb3coMiwxMCplLTEwKToyLU1hdGgucG93KDIsMTAtMTAqZSkpLzJ9dmFyIEhQdD1NKCgpPT57fSk7ZnVuY3Rpb24gVlB0KGUpe3JldHVybiAxLU1hdGguc3FydCgxLWUqZSl9ZnVuY3Rpb24gVVB0KGUpe3JldHVybiBNYXRoLnNxcnQoMS0gLS1lKmUpfWZ1bmN0aW9uIE5aKGUpe3JldHVybigoZSo9Mik8PTE/MS1NYXRoLnNxcnQoMS1lKmUpOk1hdGguc3FydCgxLShlLT0yKSplKSsxKS8yfXZhciBxUHQ9TSgoKT0+e30pO2Z1bmN0aW9uIEdQdChlKXtyZXR1cm4gMS1TMigxLWUpfWZ1bmN0aW9uIFMyKGUpe3JldHVybihlPStlKTxEWj9QTiplKmU6ZTxsNGU/UE4qKGUtPXM0ZSkqZStjNGU6ZTxoNGU/UE4qKGUtPXU0ZSkqZStmNGU6UE4qKGUtPXA0ZSkqZStkNGV9ZnVuY3Rpb24gV1B0KGUpe3JldHVybigoZSo9Mik8PTE/MS1TMigxLWUpOlMyKGUtMSkrMSkvMn12YXIgRFosczRlLGw0ZSxjNGUsdTRlLGg0ZSxmNGUscDRlLGQ0ZSxQTixZUHQ9TSgoKT0+e0RaPS4zNjM2MzYzNjM2MzYzNjM2NSxzNGU9Ni8xMSxsNGU9OC8xMSxjNGU9My80LHU0ZT05LzExLGg0ZT0xMC8xMSxmNGU9MTUvMTYscDRlPTIxLzIyLGQ0ZT02My82NCxQTj0xL0RaL0RafSk7dmFyIE9aLGpQdCxYUHQselosJFB0PU0oKCk9PntPWj0xLjcwMTU4LGpQdD1mdW5jdGlvbiBlKHQpe3Q9K3Q7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbipuKigodCsxKSpuLXQpfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9aKSxYUHQ9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuLS1uKm4qKCh0KzEpKm4rdCkrMX1yZXR1cm4gci5vdmVyc2hvb3Q9ZSxyfShPWikselo9ZnVuY3Rpb24gZSh0KXt0PSt0O2Z1bmN0aW9uIHIobil7cmV0dXJuKChuKj0yKTwxP24qbiooKHQrMSkqbi10KToobi09MikqbiooKHQrMSkqbit0KSsyKS8yfXJldHVybiByLm92ZXJzaG9vdD1lLHJ9KE9aKX0pO3ZhciBNMixGWixCWixLUHQsSFosWlB0LEpQdD1NKCgpPT57TTI9MipNYXRoLlBJLEZaPTEsQlo9LjMsS1B0PWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiB0Kk1hdGgucG93KDIsMTAqLS1vKSpNYXRoLnNpbigobi1vKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlosQlopLEhaPWZ1bmN0aW9uIGUodCxyKXt2YXIgbj1NYXRoLmFzaW4oMS8odD1NYXRoLm1heCgxLHQpKSkqKHIvPU0yKTtmdW5jdGlvbiBpKG8pe3JldHVybiAxLXQqTWF0aC5wb3coMiwtMTAqKG89K28pKSpNYXRoLnNpbigobytuKS9yKX1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlosQlopLFpQdD1mdW5jdGlvbiBlKHQscil7dmFyIG49TWF0aC5hc2luKDEvKHQ9TWF0aC5tYXgoMSx0KSkpKihyLz1NMik7ZnVuY3Rpb24gaShvKXtyZXR1cm4oKG89byoyLTEpPDA/dCpNYXRoLnBvdygyLDEwKm8pKk1hdGguc2luKChuLW8pL3IpOjItdCpNYXRoLnBvdygyLC0xMCpvKSpNYXRoLnNpbigobitvKS9yKSkvMn1yZXR1cm4gaS5hbXBsaXR1ZGU9ZnVuY3Rpb24obyl7cmV0dXJuIGUobyxyKk0yKX0saS5wZXJpb2Q9ZnVuY3Rpb24obyl7cmV0dXJuIGUodCxvKX0saX0oRlosQlopfSk7dmFyIFFQdD1NKCgpPT57U1B0KCk7VFB0KCk7UFB0KCk7a1B0KCk7elB0KCk7SFB0KCk7cVB0KCk7WVB0KCk7JFB0KCk7SlB0KCl9KTtmdW5jdGlvbiB0NnQoZSx0KXt2YXIgcjtlPT1udWxsJiYoZT0wKSx0PT1udWxsJiYodD0wKTtmdW5jdGlvbiBuKCl7dmFyIGksbz1yLmxlbmd0aCxhLHM9MCxsPTA7Zm9yKGk9MDtpPG87KytpKWE9cltpXSxzKz1hLngsbCs9YS55O2ZvcihzPXMvby1lLGw9bC9vLXQsaT0wO2k8bzsrK2kpYT1yW2ldLGEueC09cyxhLnktPWx9cmV0dXJuIG4uaW5pdGlhbGl6ZT1mdW5jdGlvbihpKXtyPWl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0raSxuKTplfSxuLnk9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2ksbik6dH0sbn12YXIgZTZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFR5PU0oKCk9Pnt9KTtmdW5jdGlvbiBNdSgpe3JldHVybihNYXRoLnJhbmRvbSgpLS41KSoxZS02fXZhciBJTj1NKCgpPT57fSk7ZnVuY3Rpb24gcjZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gbjZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gbjZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIGk2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrciluNnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG82dD1NKCgpPT57fSk7ZnVuY3Rpb24gYTZ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBzNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGw2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBjNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHU2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgaDZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgTE49TSgoKT0+e30pO2Z1bmN0aW9uIGY2dChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBTbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IFNvKHBbM10sXyx5LGwsYyksbmV3IFNvKHBbMl0sYSx5LF8sYyksbmV3IFNvKHBbMV0sXyxzLGwseSksbmV3IFNvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHA2dD1NKCgpPT57TE4oKX0pO2Z1bmN0aW9uIGQ2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBtNnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciBnNnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF82dCgpe3JldHVybiB0aGlzLl9yb290fXZhciB5NnQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIHg2dD1NKCgpPT57fSk7ZnVuY3Rpb24gYjZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBTbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgU28oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgU28oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgU28oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgU28oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIHc2dD1NKCgpPT57TE4oKX0pO2Z1bmN0aW9uIFM2dChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgU28odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgU28obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgU28obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgU28obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgU28obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgTTZ0PU0oKCk9PntMTigpfSk7ZnVuY3Rpb24gRTZ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIFQ2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIEM2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQTZ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIFA2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIEk2dD1NKCgpPT57fSk7ZnVuY3Rpb24gQ3koZSx0LHIpe3ZhciBuPW5ldyBWWih0PT1udWxsP0U2dDp0LHI9PW51bGw/QTZ0OnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gZT09bnVsbD9uOm4uYWRkQWxsKGUpfWZ1bmN0aW9uIFZaKGUsdCxyLG4saSxvKXt0aGlzLl94PWUsdGhpcy5feT10LHRoaXMuX3gwPXIsdGhpcy5feTA9bix0aGlzLl94MT1pLHRoaXMuX3kxPW8sdGhpcy5fcm9vdD12b2lkIDB9ZnVuY3Rpb24gTDZ0KGUpe2Zvcih2YXIgdD17ZGF0YTplLmRhdGF9LHI9dDtlPWUubmV4dDspcj1yLm5leHQ9e2RhdGE6ZS5kYXRhfTtyZXR1cm4gdH12YXIgR2EsazZ0PU0oKCk9PntvNnQoKTtzNnQoKTtjNnQoKTtoNnQoKTtwNnQoKTtnNnQoKTt5NnQoKTt4NnQoKTt3NnQoKTtNNnQoKTtDNnQoKTtJNnQoKTtHYT1DeS5wcm90b3R5cGU9VloucHJvdG90eXBlO0dhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVloodGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSx0PXRoaXMuX3Jvb3QscixuO2lmKCF0KXJldHVybiBlO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5fcm9vdD1MNnQodCksZTtmb3Iocj1be3NvdXJjZTp0LHRhcmdldDplLl9yb290PW5ldyBBcnJheSg0KX1dO3Q9ci5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkobj10LnNvdXJjZVtpXSkmJihuLmxlbmd0aD9yLnB1c2goe3NvdXJjZTpuLHRhcmdldDp0LnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTp0LnRhcmdldFtpXT1MNnQobikpO3JldHVybiBlfTtHYS5hZGQ9cjZ0O0dhLmFkZEFsbD1pNnQ7R2EuY292ZXI9YTZ0O0dhLmRhdGE9bDZ0O0dhLmV4dGVudD11NnQ7R2EuZmluZD1mNnQ7R2EucmVtb3ZlPWQ2dDtHYS5yZW1vdmVBbGw9bTZ0O0dhLnJvb3Q9XzZ0O0dhLnNpemU9djZ0O0dhLnZpc2l0PWI2dDtHYS52aXNpdEFmdGVyPVM2dDtHYS54PVQ2dDtHYS55PVA2dH0pO3ZhciBVWj1NKCgpPT57azZ0KCl9KTtmdW5jdGlvbiBtNGUoZSl7cmV0dXJuIGUueCtlLnZ4fWZ1bmN0aW9uIGc0ZShlKXtyZXR1cm4gZS55K2Uudnl9ZnVuY3Rpb24gUjZ0KGUpe3ZhciB0LHIsbj0xLGk9MTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9Rm4oZT09bnVsbD8xOitlKSk7ZnVuY3Rpb24gbygpe2Zvcih2YXIgbCxjPXQubGVuZ3RoLHUsaCxmLHAsZCxnLF89MDtfPGk7KytfKWZvcih1PUN5KHQsbTRlLGc0ZSkudmlzaXRBZnRlcihhKSxsPTA7bDxjOysrbCloPXRbbF0sZD1yW2guaW5kZXhdLGc9ZCpkLGY9aC54K2gudngscD1oLnkraC52eSx1LnZpc2l0KHkpO2Z1bmN0aW9uIHkoeCxiLFMsQyxQKXt2YXIgaz14LmRhdGEsTz14LnIsRD1kK087aWYoayl7aWYoay5pbmRleD5oLmluZGV4KXt2YXIgQj1mLWsueC1rLnZ4LEk9cC1rLnktay52eSxMPUIqQitJKkk7TDxEKkQmJihCPT09MCYmKEI9TXUoKSxMKz1CKkIpLEk9PT0wJiYoST1NdSgpLEwrPUkqSSksTD0oRC0oTD1NYXRoLnNxcnQoTCkpKS9MKm4saC52eCs9KEIqPUwpKihEPShPKj1PKS8oZytPKSksaC52eSs9KEkqPUwpKkQsay52eC09QiooRD0xLUQpLGsudnktPUkqRCl9cmV0dXJufXJldHVybiBiPmYrRHx8QzxmLUR8fFM+cCtEfHxQPHAtRH19ZnVuY3Rpb24gYShsKXtpZihsLmRhdGEpcmV0dXJuIGwucj1yW2wuZGF0YS5pbmRleF07Zm9yKHZhciBjPWwucj0wO2M8NDsrK2MpbFtjXSYmbFtjXS5yPmwuciYmKGwucj1sW2NdLnIpfWZ1bmN0aW9uIHMoKXtpZighIXQpe3ZhciBsLGM9dC5sZW5ndGgsdTtmb3Iocj1uZXcgQXJyYXkoYyksbD0wO2w8YzsrK2wpdT10W2xdLHJbdS5pbmRleF09K2UodSxsLHQpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKGwpe3Q9bCxzKCl9LG8uaXRlcmF0aW9ucz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rbCxvKTppfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStsLG8pOm59LG8ucmFkaXVzPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBsPT0iZnVuY3Rpb24iP2w6Rm4oK2wpLHMoKSxvKTplfSxvfXZhciBONnQ9TSgoKT0+e1R5KCk7SU4oKTtVWigpfSk7ZnVuY3Rpb24ga04oKXt9ZnVuY3Rpb24gRDZ0KGUsdCl7dmFyIHI9bmV3IGtOO2lmKGUgaW5zdGFuY2VvZiBrTillLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgY2wscGcsUk49TSgoKT0+e2NsPSIkIjtrTi5wcm90b3R5cGU9RDZ0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6a04saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBjbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tjbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbY2wrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9Y2wrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09Y2wmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWNsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWNsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1jbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtwZz1ENnR9KTt2YXIgTzZ0PU0oKCk9PntSTigpfSk7ZnVuY3Rpb24gTk4oKXt9ZnVuY3Rpb24gXzRlKGUsdCl7dmFyIHI9bmV3IE5OO2lmKGUgaW5zdGFuY2VvZiBOTillLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgQXksejZ0PU0oKCk9PntSTigpO0F5PXBnLnByb3RvdHlwZTtOTi5wcm90b3R5cGU9XzRlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Tk4saGFzOkF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbY2wrZV09ZSx0aGlzfSxyZW1vdmU6QXkucmVtb3ZlLGNsZWFyOkF5LmNsZWFyLHZhbHVlczpBeS5rZXlzLHNpemU6QXkuc2l6ZSxlbXB0eTpBeS5lbXB0eSxlYWNoOkF5LmVhY2h9fSk7dmFyIEY2dD1NKCgpPT57fSk7dmFyIEI2dD1NKCgpPT57fSk7dmFyIEg2dD1NKCgpPT57fSk7dmFyIHFaPU0oKCk9PntPNnQoKTt6NnQoKTtSTigpO0Y2dCgpO0I2dCgpO0g2dCgpfSk7ZnVuY3Rpb24geTRlKGUpe3JldHVybiBlLmluZGV4fWZ1bmN0aW9uIFY2dChlLHQpe3ZhciByPWUuZ2V0KHQpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit0KTtyZXR1cm4gcn1mdW5jdGlvbiBVNnQoZSl7dmFyIHQ9eTRlLHI9dSxuLGk9Rm4oMzApLG8sYSxzLGwsYz0xO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KGcpe3JldHVybiAxL01hdGgubWluKHNbZy5zb3VyY2UuaW5kZXhdLHNbZy50YXJnZXQuaW5kZXhdKX1mdW5jdGlvbiBoKGcpe2Zvcih2YXIgXz0wLHk9ZS5sZW5ndGg7XzxjOysrXylmb3IodmFyIHg9MCxiLFMsQyxQLGssTyxEO3g8eTsrK3gpYj1lW3hdLFM9Yi5zb3VyY2UsQz1iLnRhcmdldCxQPUMueCtDLnZ4LVMueC1TLnZ4fHxNdSgpLGs9Qy55K0MudnktUy55LVMudnl8fE11KCksTz1NYXRoLnNxcnQoUCpQK2sqayksTz0oTy1vW3hdKS9PKmcqblt4XSxQKj1PLGsqPU8sQy52eC09UCooRD1sW3hdKSxDLnZ5LT1rKkQsUy52eCs9UCooRD0xLUQpLFMudnkrPWsqRH1mdW5jdGlvbiBmKCl7aWYoISFhKXt2YXIgZyxfPWEubGVuZ3RoLHk9ZS5sZW5ndGgseD1wZyhhLHQpLGI7Zm9yKGc9MCxzPW5ldyBBcnJheShfKTtnPHk7KytnKWI9ZVtnXSxiLmluZGV4PWcsdHlwZW9mIGIuc291cmNlIT0ib2JqZWN0IiYmKGIuc291cmNlPVY2dCh4LGIuc291cmNlKSksdHlwZW9mIGIudGFyZ2V0IT0ib2JqZWN0IiYmKGIudGFyZ2V0PVY2dCh4LGIudGFyZ2V0KSksc1tiLnNvdXJjZS5pbmRleF09KHNbYi5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbYi50YXJnZXQuaW5kZXhdPShzW2IudGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoZz0wLGw9bmV3IEFycmF5KHkpO2c8eTsrK2cpYj1lW2ddLGxbZ109c1tiLnNvdXJjZS5pbmRleF0vKHNbYi5zb3VyY2UuaW5kZXhdK3NbYi50YXJnZXQuaW5kZXhdKTtuPW5ldyBBcnJheSh5KSxwKCksbz1uZXcgQXJyYXkoeSksZCgpfX1mdW5jdGlvbiBwKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZyluW2ddPStyKGVbZ10sZyxlKX1mdW5jdGlvbiBkKCl7aWYoISFhKWZvcih2YXIgZz0wLF89ZS5sZW5ndGg7ZzxfOysrZylvW2ddPStpKGVbZ10sZyxlKX1yZXR1cm4gaC5pbml0aWFsaXplPWZ1bmN0aW9uKGcpe2E9ZyxmKCl9LGgubGlua3M9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZyxmKCksaCk6ZX0saC5pZD1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1nLGgpOnR9LGguaXRlcmF0aW9ucz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0rZyxoKTpjfSxoLnN0cmVuZ3RoPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6Rm4oK2cpLHAoKSxoKTpyfSxoLmRpc3RhbmNlPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2c6Rm4oK2cpLGQoKSxoKTppfSxofXZhciBxNnQ9TSgoKT0+e1R5KCk7SU4oKTtxWigpfSk7ZnVuY3Rpb24gVzZ0KCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLHI9e30sbjtlPHQ7KytlKXtpZighKG49YXJndW1lbnRzW2VdKyIiKXx8biBpbiByfHwvW1xzLl0vLnRlc3QobikpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrbik7cltuXT1bXX1yZXR1cm4gbmV3IEROKHIpfWZ1bmN0aW9uIEROKGUpe3RoaXMuXz1lfWZ1bmN0aW9uIHg0ZShlLHQpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24ocil7dmFyIG49IiIsaT1yLmluZGV4T2YoIi4iKTtpZihpPj0wJiYobj1yLnNsaWNlKGkrMSkscj1yLnNsaWNlKDAsaSkpLHImJiF0Lmhhc093blByb3BlcnR5KHIpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3IpO3JldHVybnt0eXBlOnIsbmFtZTpufX0pfWZ1bmN0aW9uIGI0ZShlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaTtyPG47KytyKWlmKChpPWVbcl0pLm5hbWU9PT10KXJldHVybiBpLnZhbHVlfWZ1bmN0aW9uIEc2dChlLHQscil7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKWlmKGVbbl0ubmFtZT09PXQpe2Vbbl09djRlLGU9ZS5zbGljZSgwLG4pLmNvbmNhdChlLnNsaWNlKG4rMSkpO2JyZWFrfXJldHVybiByIT1udWxsJiZlLnB1c2goe25hbWU6dCx2YWx1ZTpyfSksZX12YXIgdjRlLEdaLFk2dD1NKCgpPT57djRlPXt2YWx1ZTpmdW5jdGlvbigpe319O0ROLnByb3RvdHlwZT1XNnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpETixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPXg0ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPWI0ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09RzZ0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09RzZ0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBETihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07R1o9VzZ0fSk7dmFyIGo2dD1NKCgpPT57WTZ0KCl9KTtmdW5jdGlvbiBqWigpe3JldHVybiBQeXx8KEs2dCh3NGUpLFB5PU1ULm5vdygpK0ZOKX1mdW5jdGlvbiB3NGUoKXtQeT0wfWZ1bmN0aW9uIFdaKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBCTihlLHQscil7dmFyIG49bmV3IFdaO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gWjZ0KCl7alooKSwrK0UyO2Zvcih2YXIgZT1PTix0O2U7KSh0PVB5LWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1FMn1mdW5jdGlvbiBYNnQoKXtQeT0oek49TVQubm93KCkpK0ZOLEUyPXdUPTA7dHJ5e1o2dCgpfWZpbmFsbHl7RTI9MCxNNGUoKSxQeT0wfX1mdW5jdGlvbiBTNGUoKXt2YXIgZT1NVC5ub3coKSx0PWUtek47dD4kNnQmJihGTi09dCx6Tj1lKX1mdW5jdGlvbiBNNGUoKXtmb3IodmFyIGUsdD1PTixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjpPTj1yKTtTVD1lLFlaKG4pfWZ1bmN0aW9uIFlaKGUpe2lmKCFFMil7d1QmJih3VD1jbGVhclRpbWVvdXQod1QpKTt2YXIgdD1lLVB5O3Q+MjQ/KGU8MS8wJiYod1Q9c2V0VGltZW91dChYNnQsZS1NVC5ub3coKS1GTikpLGJUJiYoYlQ9Y2xlYXJJbnRlcnZhbChiVCkpKTooYlR8fCh6Tj1NVC5ub3coKSxiVD1zZXRJbnRlcnZhbChTNGUsJDZ0KSksRTI9MSxLNnQoWDZ0KSl9fXZhciBFMix3VCxiVCwkNnQsT04sU1Qsek4sUHksRk4sTVQsSzZ0LEo2dD1NKCgpPT57RTI9MCx3VD0wLGJUPTAsJDZ0PTFlMyx6Tj0wLFB5PTAsRk49MCxNVD10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxLNnQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07V1oucHJvdG90eXBlPUJOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6V1oscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP2paKCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZTVCE9PXRoaXMmJihTVD9TVC5fbmV4dD10aGlzOk9OPXRoaXMsU1Q9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixZWigpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxZWigpKX19fSk7dmFyIFE2dD1NKCgpPT57SjZ0KCl9KTtmdW5jdGlvbiB0SXQoZSl7cmV0dXJuIGUueH1mdW5jdGlvbiBlSXQoZSl7cmV0dXJuIGUueX1mdW5jdGlvbiBySXQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1wZygpLGw9Qk4odSksYz1HWigidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKCl7dmFyIGQsZz1lLmxlbmd0aCxfO2ZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbih5KXt5KHIpfSksZD0wO2Q8ZzsrK2QpXz1lW2RdLF8uZng9PW51bGw/Xy54Kz1fLnZ4Kj1hOihfLng9Xy5meCxfLnZ4PTApLF8uZnk9PW51bGw/Xy55Kz1fLnZ5Kj1hOihfLnk9Xy5meSxfLnZ5PTApfWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxpc05hTihfLngpfHxpc05hTihfLnkpKXt2YXIgeT1FNGUqTWF0aC5zcXJ0KGQpLHg9ZCpUNGU7Xy54PXkqTWF0aC5jb3MoeCksXy55PXkqTWF0aC5zaW4oeCl9KGlzTmFOKF8udngpfHxpc05hTihfLnZ5KSkmJihfLnZ4PV8udnk9MCl9fWZ1bmN0aW9uIHAoZCl7cmV0dXJuIGQuaW5pdGlhbGl6ZSYmZC5pbml0aWFsaXplKGUpLGR9cmV0dXJuIGYoKSx0PXt0aWNrOmgscmVzdGFydDpmdW5jdGlvbigpe3JldHVybiBsLnJlc3RhcnQodSksdH0sc3RvcDpmdW5jdGlvbigpe3JldHVybiBsLnN0b3AoKSx0fSxub2RlczpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1kLGYoKSxzLmVhY2gocCksdCk6ZX0sYWxwaGE6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2QsdCk6cn0sYWxwaGFNaW46ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2QsdCk6bn0sYWxwaGFEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rZCx0KToraX0sYWxwaGFUYXJnZXQ6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K2QsdCk6b30sdmVsb2NpdHlEZWNheTpmdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0xLWQsdCk6MS1hfSxmb3JjZTpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGc9PW51bGw/cy5yZW1vdmUoZCk6cy5zZXQoZCxwKGcpKSx0KTpzLmdldChkKX0sZmluZDpmdW5jdGlvbihkLGcsXyl7dmFyIHk9MCx4PWUubGVuZ3RoLGIsUyxDLFAsaztmb3IoXz09bnVsbD9fPTEvMDpfKj1fLHk9MDt5PHg7Kyt5KVA9ZVt5XSxiPWQtUC54LFM9Zy1QLnksQz1iKmIrUypTLEM8XyYmKGs9UCxfPUMpO3JldHVybiBrfSxvbjpmdW5jdGlvbihkLGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/KGMub24oZCxnKSx0KTpjLm9uKGQpfX19dmFyIEU0ZSxUNGUsWFo9TSgoKT0+e2o2dCgpO3FaKCk7UTZ0KCk7RTRlPTEwLFQ0ZT1NYXRoLlBJKigzLU1hdGguc3FydCg1KSl9KTtmdW5jdGlvbiBuSXQoKXt2YXIgZSx0LHIsbj1GbigtMzApLGksbz0xLGE9MS8wLHM9LjgxO2Z1bmN0aW9uIGwoZil7dmFyIHAsZD1lLmxlbmd0aCxnPUN5KGUsdEl0LGVJdCkudmlzaXRBZnRlcih1KTtmb3Iocj1mLHA9MDtwPGQ7KytwKXQ9ZVtwXSxnLnZpc2l0KGgpfWZ1bmN0aW9uIGMoKXtpZighIWUpe3ZhciBmLHA9ZS5sZW5ndGgsZDtmb3IoaT1uZXcgQXJyYXkocCksZj0wO2Y8cDsrK2YpZD1lW2ZdLGlbZC5pbmRleF09K24oZCxmLGUpfX1mdW5jdGlvbiB1KGYpe3ZhciBwPTAsZCxnLF89MCx5LHgsYjtpZihmLmxlbmd0aCl7Zm9yKHk9eD1iPTA7Yjw0OysrYikoZD1mW2JdKSYmKGc9TWF0aC5hYnMoZC52YWx1ZSkpJiYocCs9ZC52YWx1ZSxfKz1nLHkrPWcqZC54LHgrPWcqZC55KTtmLng9eS9fLGYueT14L199ZWxzZXtkPWYsZC54PWQuZGF0YS54LGQueT1kLmRhdGEueTtkbyBwKz1pW2QuZGF0YS5pbmRleF07d2hpbGUoZD1kLm5leHQpfWYudmFsdWU9cH1mdW5jdGlvbiBoKGYscCxkLGcpe2lmKCFmLnZhbHVlKXJldHVybiEwO3ZhciBfPWYueC10LngseT1mLnktdC55LHg9Zy1wLGI9XypfK3kqeTtpZih4KngvczxiKXJldHVybiBiPGEmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSksdC52eCs9XypmLnZhbHVlKnIvYix0LnZ5Kz15KmYudmFsdWUqci9iKSwhMDtpZihmLmxlbmd0aHx8Yj49YSlyZXR1cm47KGYuZGF0YSE9PXR8fGYubmV4dCkmJihfPT09MCYmKF89TXUoKSxiKz1fKl8pLHk9PT0wJiYoeT1NdSgpLGIrPXkqeSksYjxvJiYoYj1NYXRoLnNxcnQobypiKSkpO2RvIGYuZGF0YSE9PXQmJih4PWlbZi5kYXRhLmluZGV4XSpyL2IsdC52eCs9Xyp4LHQudnkrPXkqeCk7d2hpbGUoZj1mLm5leHQpfXJldHVybiBsLmluaXRpYWxpemU9ZnVuY3Rpb24oZil7ZT1mLGMoKX0sbC5zdHJlbmd0aD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOkZuKCtmKSxjKCksbCk6bn0sbC5kaXN0YW5jZU1pbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1mKmYsbCk6TWF0aC5zcXJ0KG8pfSxsLmRpc3RhbmNlTWF4PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWYqZixsKTpNYXRoLnNxcnQoYSl9LGwudGhldGE9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9ZipmLGwpOk1hdGguc3FydChzKX0sbH12YXIgaUl0PU0oKCk9PntUeSgpO0lOKCk7VVooKTtYWigpfSk7ZnVuY3Rpb24gb0l0KGUsdCxyKXt2YXIgbixpPUZuKC4xKSxvLGE7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUZuKCtlKSksdD09bnVsbCYmKHQ9MCkscj09bnVsbCYmKHI9MCk7ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9MCxoPW4ubGVuZ3RoO3U8aDsrK3Upe3ZhciBmPW5bdV0scD1mLngtdHx8MWUtNixkPWYueS1yfHwxZS02LGc9TWF0aC5zcXJ0KHAqcCtkKmQpLF89KGFbdV0tZykqb1t1XSpjL2c7Zi52eCs9cCpfLGYudnkrPWQqX319ZnVuY3Rpb24gbCgpe2lmKCEhbil7dmFyIGMsdT1uLmxlbmd0aDtmb3Iobz1uZXcgQXJyYXkodSksYT1uZXcgQXJyYXkodSksYz0wO2M8dTsrK2MpYVtjXT0rZShuW2NdLGMsbiksb1tjXT1pc05hTihhW2NdKT8wOitpKG5bY10sYyxuKX19cmV0dXJuIHMuaW5pdGlhbGl6ZT1mdW5jdGlvbihjKXtuPWMsbCgpfSxzLnN0cmVuZ3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6Rm4oK2MpLGwoKSxzKTppfSxzLnJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkZuKCtjKSxsKCkscyk6ZX0scy54PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStjLHMpOnR9LHMueT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rYyxzKTpyfSxzfXZhciBhSXQ9TSgoKT0+e1R5KCl9KTtmdW5jdGlvbiBzSXQoZSl7dmFyIHQ9Rm4oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1GbihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6Rm4oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpGbigrcyksYSgpLG8pOmV9LG99dmFyIGxJdD1NKCgpPT57VHkoKX0pO2Z1bmN0aW9uIGNJdChlKXt2YXIgdD1GbiguMSkscixuLGk7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUZuKGU9PW51bGw/MDorZSkpO2Z1bmN0aW9uIG8ocyl7Zm9yKHZhciBsPTAsYz1yLmxlbmd0aCx1O2w8YzsrK2wpdT1yW2xdLHUudnkrPShpW2xdLXUueSkqbltsXSpzfWZ1bmN0aW9uIGEoKXtpZighIXIpe3ZhciBzLGw9ci5sZW5ndGg7Zm9yKG49bmV3IEFycmF5KGwpLGk9bmV3IEFycmF5KGwpLHM9MDtzPGw7KytzKW5bc109aXNOYU4oaVtzXT0rZShyW3NdLHMscikpPzA6K3QocltzXSxzLHIpfX1yZXR1cm4gby5pbml0aWFsaXplPWZ1bmN0aW9uKHMpe3I9cyxhKCl9LG8uc3RyZW5ndGg9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpGbigrcyksYSgpLG8pOnR9LG8ueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkZuKCtzKSxhKCksbyk6ZX0sb312YXIgdUl0PU0oKCk9PntUeSgpfSk7dmFyIGhJdD1NKCgpPT57ZTZ0KCk7TjZ0KCk7cTZ0KCk7aUl0KCk7YUl0KCk7WFooKTtsSXQoKTt1SXQoKX0pO2Z1bmN0aW9uIEl5KGUsdCl7aWYoKHI9KGU9dD9lLnRvRXhwb25lbnRpYWwodC0xKTplLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49ZS5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCtlLnNsaWNlKHIrMSldfXZhciBITj1NKCgpPT57fSk7ZnVuY3Rpb24gcmYoZSl7cmV0dXJuIGU9SXkoTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59dmFyIEVUPU0oKCk9PntITigpfSk7ZnVuY3Rpb24gZkl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fXZhciBwSXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRJdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIG1JdD1NKCgpPT57fSk7ZnVuY3Rpb24gZ0l0KGUsdCl7ZT1lLnRvUHJlY2lzaW9uKHQpO3Q6Zm9yKHZhciByPWUubGVuZ3RoLG49MSxpPS0xLG87bjxyOysrbilzd2l0Y2goZVtuXSl7Y2FzZSIuIjppPW89bjticmVhaztjYXNlIjAiOmk9PT0wJiYoaT1uKSxvPW47YnJlYWs7Y2FzZSJlIjpicmVhayB0O2RlZmF1bHQ6aT4wJiYoaT0wKTticmVha31yZXR1cm4gaT4wP2Uuc2xpY2UoMCxpKStlLnNsaWNlKG8rMSk6ZX12YXIgX0l0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5SXQoZSx0KXt2YXIgcj1JeShlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdLG89aS0oJFo9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGkvMykpKSozKSsxLGE9bi5sZW5ndGg7cmV0dXJuIG89PT1hP246bz5hP24rbmV3IEFycmF5KG8tYSsxKS5qb2luKCIwIik6bz4wP24uc2xpY2UoMCxvKSsiLiIrbi5zbGljZShvKToiMC4iK25ldyBBcnJheSgxLW8pLmpvaW4oIjAiKStJeShlLE1hdGgubWF4KDAsdCtvLTEpKVswXX12YXIgJFosS1o9TSgoKT0+e0hOKCl9KTtmdW5jdGlvbiBaWihlLHQpe3ZhciByPUl5KGUsdCk7aWYoIXIpcmV0dXJuIGUrIiI7dmFyIG49clswXSxpPXJbMV07cmV0dXJuIGk8MD8iMC4iK25ldyBBcnJheSgtaSkuam9pbigiMCIpK246bi5sZW5ndGg+aSsxP24uc2xpY2UoMCxpKzEpKyIuIituLnNsaWNlKGkrMSk6bituZXcgQXJyYXkoaS1uLmxlbmd0aCsyKS5qb2luKCIwIil9dmFyIHZJdD1NKCgpPT57SE4oKX0pO3ZhciBWTixKWj1NKCgpPT57X0l0KCk7S1ooKTt2SXQoKTtWTj17IiI6Z0l0LCIlIjpmdW5jdGlvbihlLHQpe3JldHVybihlKjEwMCkudG9GaXhlZCh0KX0sYjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygyKX0sYzpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIn0sZDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxMCl9LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFpaKGUqMTAwLHQpfSxyOlpaLHM6eUl0LFg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMTYpfX19KTtmdW5jdGlvbiBMeShlKXtyZXR1cm4gbmV3IFFaKGUpfWZ1bmN0aW9uIFFaKGUpe2lmKCEodD1DNGUuZXhlYyhlKSkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdDogIitlKTt2YXIgdCxyPXRbMV18fCIgIixuPXRbMl18fCI+IixpPXRbM118fCItIixvPXRbNF18fCIiLGE9ISF0WzVdLHM9dFs2XSYmK3RbNl0sbD0hIXRbN10sYz10WzhdJiYrdFs4XS5zbGljZSgxKSx1PXRbOV18fCIiO3U9PT0ibiI/KGw9ITAsdT0iZyIpOlZOW3VdfHwodT0iIiksKGF8fHI9PT0iMCImJm49PT0iPSIpJiYoYT0hMCxyPSIwIixuPSI9IiksdGhpcy5maWxsPXIsdGhpcy5hbGlnbj1uLHRoaXMuc2lnbj1pLHRoaXMuc3ltYm9sPW8sdGhpcy56ZXJvPWEsdGhpcy53aWR0aD1zLHRoaXMuY29tbWE9bCx0aGlzLnByZWNpc2lvbj1jLHRoaXMudHlwZT11fXZhciBDNGUsdEo9TSgoKT0+e0paKCk7QzRlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLVwoIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KFthLXolXSk/JC9pO0x5LnByb3RvdHlwZT1RWi5wcm90b3R5cGU7UVoucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PW51bGw/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09bnVsbD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrdGhpcy50eXBlfX0pO2Z1bmN0aW9uIGVKKGUpe3JldHVybiBlfXZhciB4SXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFVOKGUpe3ZhciB0PWUuZ3JvdXBpbmcmJmUudGhvdXNhbmRzP2ZJdChlLmdyb3VwaW5nLGUudGhvdXNhbmRzKTplSixyPWUuY3VycmVuY3ksbj1lLmRlY2ltYWwsaT1lLm51bWVyYWxzP2RJdChlLm51bWVyYWxzKTplSixvPWUucGVyY2VudHx8IiUiO2Z1bmN0aW9uIGEobCl7bD1MeShsKTt2YXIgYz1sLmZpbGwsdT1sLmFsaWduLGg9bC5zaWduLGY9bC5zeW1ib2wscD1sLnplcm8sZD1sLndpZHRoLGc9bC5jb21tYSxfPWwucHJlY2lzaW9uLHk9bC50eXBlLHg9Zj09PSIkIj9yWzBdOmY9PT0iIyImJi9bYm94WF0vLnRlc3QoeSk/IjAiK3kudG9Mb3dlckNhc2UoKToiIixiPWY9PT0iJCI/clsxXTovWyVwXS8udGVzdCh5KT9vOiIiLFM9Vk5beV0sQz0heXx8L1tkZWZncHJzJV0vLnRlc3QoeSk7Xz1fPT1udWxsP3k/NjoxMjovW2dwcnNdLy50ZXN0KHkpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsXykpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsXykpO2Z1bmN0aW9uIFAoayl7dmFyIE89eCxEPWIsQixJLEw7aWYoeT09PSJjIilEPVMoaykrRCxrPSIiO2Vsc2V7az0razt2YXIgUj1rPDA7aWYoaz1TKE1hdGguYWJzKGspLF8pLFImJitrPT0wJiYoUj0hMSksTz0oUj9oPT09IigiP2g6Ii0iOmg9PT0iLSJ8fGg9PT0iKCI/IiI6aCkrTyxEPSh5PT09InMiP2JJdFs4KyRaLzNdOiIiKStEKyhSJiZoPT09IigiPyIpIjoiIiksQyl7Zm9yKEI9LTEsST1rLmxlbmd0aDsrK0I8STspaWYoTD1rLmNoYXJDb2RlQXQoQiksNDg+THx8TD41Nyl7RD0oTD09PTQ2P24ray5zbGljZShCKzEpOmsuc2xpY2UoQikpK0Qsaz1rLnNsaWNlKDAsQik7YnJlYWt9fX1nJiYhcCYmKGs9dChrLDEvMCkpO3ZhciBGPU8ubGVuZ3RoK2subGVuZ3RoK0QubGVuZ3RoLHo9RjxkP25ldyBBcnJheShkLUYrMSkuam9pbihjKToiIjtzd2l0Y2goZyYmcCYmKGs9dCh6K2ssei5sZW5ndGg/ZC1ELmxlbmd0aDoxLzApLHo9IiIpLHUpe2Nhc2UiPCI6az1PK2srRCt6O2JyZWFrO2Nhc2UiPSI6az1PK3oraytEO2JyZWFrO2Nhc2UiXiI6az16LnNsaWNlKDAsRj16Lmxlbmd0aD4+MSkrTytrK0Qrei5zbGljZShGKTticmVhaztkZWZhdWx0Oms9eitPK2srRDticmVha31yZXR1cm4gaShrKX1yZXR1cm4gUC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBsKyIifSxQfWZ1bmN0aW9uIHMobCxjKXt2YXIgdT1hKChsPUx5KGwpLGwudHlwZT0iZiIsbCkpLGg9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHJmKGMpLzMpKSkqMyxmPU1hdGgucG93KDEwLC1oKSxwPWJJdFs4K2gvM107cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiB1KGYqZCkrcH19cmV0dXJue2Zvcm1hdDphLGZvcm1hdFByZWZpeDpzfX12YXIgYkl0LHJKPU0oKCk9PntFVCgpO3BJdCgpO21JdCgpO3RKKCk7SlooKTtLWigpO3hJdCgpO2JJdD1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4QjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXX0pO2Z1bmN0aW9uIEdOKGUpe3JldHVybiBxTj1VTihlKSxuSj1xTi5mb3JtYXQsaUo9cU4uZm9ybWF0UHJlZml4LHFOfXZhciBxTixuSixpSix3SXQ9TSgoKT0+e3JKKCk7R04oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSl9KTtmdW5jdGlvbiBTSXQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXJmKE1hdGguYWJzKGUpKSl9dmFyIE1JdD1NKCgpPT57RVQoKX0pO2Z1bmN0aW9uIEVJdChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihyZih0KS8zKSkpKjMtcmYoTWF0aC5hYnMoZSkpKX12YXIgVEl0PU0oKCk9PntFVCgpfSk7ZnVuY3Rpb24gQ0l0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAscmYodCktcmYoZSkpKzF9dmFyIEFJdD1NKCgpPT57RVQoKX0pO3ZhciBQSXQ9TSgoKT0+e3dJdCgpO3JKKCk7dEooKTtNSXQoKTtUSXQoKTtBSXQoKX0pO2Z1bmN0aW9uIENzKCl7cmV0dXJuIG5ldyBZTn1mdW5jdGlvbiBZTigpe3RoaXMucmVzZXQoKX1mdW5jdGlvbiBJSXQoZSx0LHIpe3ZhciBuPWUucz10K3IsaT1uLXQsbz1uLWk7ZS50PXQtbysoci1pKX12YXIgV04sa3k9TSgoKT0+e1lOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WU4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXtJSXQoV04sZSx0aGlzLnQpLElJdCh0aGlzLFdOLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1XTi50OnRoaXMucz1XTi50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O1dOPW5ldyBZTn0pO2Z1bmN0aW9uICROKGUpe3JldHVybiBlPjE/MDplPC0xP3JyOk1hdGguYWNvcyhlKX1mdW5jdGlvbiBKbihlKXtyZXR1cm4gZT4xP0JuOmU8LTE/LUJuOk1hdGguYXNpbihlKX1mdW5jdGlvbiBhSihlKXtyZXR1cm4oZT1KdChlLzIpKSplfXZhciBjZSxvSixycixCbixUMixCaSxVcix3ZSxZZSx5YyxTbixhZSxUVCxqTixSeSxYTixKdCxkZyxScixDMixscj1NKCgpPT57Y2U9MWUtNixvSj0xZS0xMixycj1NYXRoLlBJLEJuPXJyLzIsVDI9cnIvNCxCaT1ycioyLFVyPTE4MC9ycix3ZT1yci8xODAsWWU9TWF0aC5hYnMseWM9TWF0aC5hdGFuLFNuPU1hdGguYXRhbjIsYWU9TWF0aC5jb3MsVFQ9TWF0aC5jZWlsLGpOPU1hdGguZXhwLFJ5PU1hdGgubG9nLFhOPU1hdGgucG93LEp0PU1hdGguc2luLGRnPU1hdGguc2lnbnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfSxScj1NYXRoLnNxcnQsQzI9TWF0aC50YW59KTtmdW5jdGlvbiBxcigpe312YXIgWHA9TSgoKT0+e30pO2Z1bmN0aW9uIEtOKGUsdCl7ZSYma0l0Lmhhc093blByb3BlcnR5KGUudHlwZSkmJmtJdFtlLnR5cGVdKGUsdCl9ZnVuY3Rpb24gc0ooZSx0LHIpe3ZhciBuPS0xLGk9ZS5sZW5ndGgtcixvO2Zvcih0LmxpbmVTdGFydCgpOysrbjxpOylvPWVbbl0sdC5wb2ludChvWzBdLG9bMV0sb1syXSk7dC5saW5lRW5kKCl9ZnVuY3Rpb24gUkl0KGUsdCl7dmFyIHI9LTEsbj1lLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK3I8bjspc0ooZVtyXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIE1vKGUsdCl7ZSYmTEl0Lmhhc093blByb3BlcnR5KGUudHlwZSk/TEl0W2UudHlwZV0oZSx0KTpLTihlLHQpfXZhciBMSXQsa0l0LG1nPU0oKCk9PntMSXQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtLTihlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspS04ocltuXS5nZW9tZXRyeSx0KX19LGtJdD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe3NKKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylzSihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtSSXQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylSSXQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KUtOKHJbbl0sdCl9fX0pO2Z1bmN0aW9uIEE0ZSgpe0V1LnBvaW50PUk0ZX1mdW5jdGlvbiBQNGUoKXtPSXQoTkl0LERJdCl9ZnVuY3Rpb24gSTRlKGUsdCl7RXUucG9pbnQ9T0l0LE5JdD1lLERJdD10LGUqPXdlLHQqPXdlLGxKPWUsY0o9YWUodD10LzIrVDIpLHVKPUp0KHQpfWZ1bmN0aW9uIE9JdChlLHQpe2UqPXdlLHQqPXdlLHQ9dC8yK1QyO3ZhciByPWUtbEosbj1yPj0wPzE6LTEsaT1uKnIsbz1hZSh0KSxhPUp0KHQpLHM9dUoqYSxsPWNKKm8rcyphZShpKSxjPXMqbipKdChpKTtDVC5hZGQoU24oYyxsKSksbEo9ZSxjSj1vLHVKPWF9ZnVuY3Rpb24gekl0KGUpe3JldHVybiBaTi5yZXNldCgpLE1vKGUsRXUpLFpOKjJ9dmFyIENULFpOLE5JdCxESXQsbEosY0osdUosRXUsaEo9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO21nKCk7Q1Q9Q3MoKSxaTj1DcygpLEV1PXtwb2ludDpxcixsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtDVC5yZXNldCgpLEV1LmxpbmVTdGFydD1BNGUsRXUubGluZUVuZD1QNGV9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rQ1Q7Wk4uYWRkKGU8MD9CaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PXFyfSxzcGhlcmU6ZnVuY3Rpb24oKXtaTi5hZGQoQmkpfX19KTtmdW5jdGlvbiBOeShlKXtyZXR1cm5bU24oZVsxXSxlWzBdKSxKbihlWzJdKV19ZnVuY3Rpb24gdmMoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1hZShyKTtyZXR1cm5bbiphZSh0KSxuKkp0KHQpLEp0KHIpXX1mdW5jdGlvbiBBVChlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiAkcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gSk4oZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBQVChlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gRHkoZSl7dmFyIHQ9UnIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBBMj1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIGZKKGUsdCl7Z2cucHVzaChacD1bbWk9ZSxFaT1lXSksdDxobCYmKGhsPXQpLHQ+eGMmJih4Yz10KX1mdW5jdGlvbiBxSXQoZSx0KXt2YXIgcj12YyhbZSp3ZSx0KndlXSk7aWYoUDIpe3ZhciBuPSRwKFAyLHIpLGk9W25bMV0sLW5bMF0sMF0sbz0kcChpLG4pO0R5KG8pLG89Tnkobyk7dmFyIGE9ZS1PeSxzPWE+MD8xOi0xLGw9b1swXSpVcipzLGMsdT1ZZShhKT4xODA7dV4ocypPeTxsJiZsPHMqZSk/KGM9b1sxXSpVcixjPnhjJiYoeGM9YykpOihsPShsKzM2MCklMzYwLTE4MCx1XihzKk95PGwmJmw8cyplKT8oYz0tb1sxXSpVcixjPGhsJiYoaGw9YykpOih0PGhsJiYoaGw9dCksdD54YyYmKHhjPXQpKSksdT9lPE95P3VsKG1pLGUpPnVsKG1pLEVpKSYmKEVpPWUpOnVsKGUsRWkpPnVsKG1pLEVpKSYmKG1pPWUpOkVpPj1taT8oZTxtaSYmKG1pPWUpLGU+RWkmJihFaT1lKSk6ZT5PeT91bChtaSxlKT51bChtaSxFaSkmJihFaT1lKTp1bChlLEVpKT51bChtaSxFaSkmJihtaT1lKX1lbHNlIGdnLnB1c2goWnA9W21pPWUsRWk9ZV0pO3Q8aGwmJihobD10KSx0PnhjJiYoeGM9dCksUDI9cixPeT1lfWZ1bmN0aW9uIEZJdCgpe0twLnBvaW50PXFJdH1mdW5jdGlvbiBCSXQoKXtacFswXT1taSxacFsxXT1FaSxLcC5wb2ludD1mSixQMj1udWxsfWZ1bmN0aW9uIEdJdChlLHQpe2lmKFAyKXt2YXIgcj1lLU95O0lULmFkZChZZShyKT4xODA/cisocj4wPzM2MDotMzYwKTpyKX1lbHNlIFZJdD1lLFVJdD10O0V1LnBvaW50KGUsdCkscUl0KGUsdCl9ZnVuY3Rpb24gTDRlKCl7RXUubGluZVN0YXJ0KCl9ZnVuY3Rpb24gazRlKCl7R0l0KFZJdCxVSXQpLEV1LmxpbmVFbmQoKSxZZShJVCk+Y2UmJihtaT0tKEVpPTE4MCkpLFpwWzBdPW1pLFpwWzFdPUVpLFAyPW51bGx9ZnVuY3Rpb24gdWwoZSx0KXtyZXR1cm4odC09ZSk8MD90KzM2MDp0fWZ1bmN0aW9uIFI0ZShlLHQpe3JldHVybiBlWzBdLXRbMF19ZnVuY3Rpb24gSEl0KGUsdCl7cmV0dXJuIGVbMF08PWVbMV0/ZVswXTw9dCYmdDw9ZVsxXTp0PGVbMF18fGVbMV08dH1mdW5jdGlvbiBXSXQoZSl7dmFyIHQscixuLGksbyxhLHM7aWYoeGM9RWk9LShtaT1obD0xLzApLGdnPVtdLE1vKGUsS3ApLHI9Z2cubGVuZ3RoKXtmb3IoZ2cuc29ydChSNGUpLHQ9MSxuPWdnWzBdLG89W25dO3Q8cjsrK3QpaT1nZ1t0XSxISXQobixpWzBdKXx8SEl0KG4saVsxXSk/KHVsKG5bMF0saVsxXSk+dWwoblswXSxuWzFdKSYmKG5bMV09aVsxXSksdWwoaVswXSxuWzFdKT51bChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6by5wdXNoKG49aSk7Zm9yKGE9LTEvMCxyPW8ubGVuZ3RoLTEsdD0wLG49b1tyXTt0PD1yO249aSwrK3QpaT1vW3RdLChzPXVsKG5bMV0saVswXSkpPmEmJihhPXMsbWk9aVswXSxFaT1uWzFdKX1yZXR1cm4gZ2c9WnA9bnVsbCxtaT09PTEvMHx8aGw9PT0xLzA/W1tOYU4sTmFOXSxbTmFOLE5hTl1dOltbbWksaGxdLFtFaSx4Y11dfXZhciBtaSxobCxFaSx4YyxPeSxWSXQsVUl0LFAyLElULGdnLFpwLEtwLFlJdD1NKCgpPT57a3koKTtoSigpO0EyKCk7bHIoKTttZygpO0lUPUNzKCksS3A9e3BvaW50OmZKLGxpbmVTdGFydDpGSXQsbGluZUVuZDpCSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7S3AucG9pbnQ9R0l0LEtwLmxpbmVTdGFydD1MNGUsS3AubGluZUVuZD1rNGUsSVQucmVzZXQoKSxFdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0V1LnBvbHlnb25FbmQoKSxLcC5wb2ludD1mSixLcC5saW5lU3RhcnQ9Rkl0LEtwLmxpbmVFbmQ9Qkl0LENUPDA/KG1pPS0oRWk9MTgwKSxobD0tKHhjPTkwKSk6SVQ+Y2U/eGM9OTA6SVQ8LWNlJiYoaGw9LTkwKSxacFswXT1taSxacFsxXT1FaX19fSk7ZnVuY3Rpb24gZ0ooZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtrVChyKmFlKGUpLHIqSnQoZSksSnQodCkpfWZ1bmN0aW9uIGtUKGUsdCxyKXsrK0xULHREKz0oZS10RCkvTFQsZUQrPSh0LWVEKS9MVCxyRCs9KHItckQpL0xUfWZ1bmN0aW9uIGpJdCgpe1R1LnBvaW50PU40ZX1mdW5jdGlvbiBONGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksVHUucG9pbnQ9RDRlLGtUKFdhLFlhLGphKX1mdW5jdGlvbiBENGUoZSx0KXtlKj13ZSx0Kj13ZTt2YXIgcj1hZSh0KSxuPXIqYWUoZSksaT1yKkp0KGUpLG89SnQodCksYT1TbihScigoYT1ZYSpvLWphKmkpKmErKGE9amEqbi1XYSpvKSphKyhhPVdhKmktWWEqbikqYSksV2EqbitZYSppK2phKm8pO1FOKz1hLG5EKz1hKihXYSsoV2E9bikpLGlEKz1hKihZYSsoWWE9aSkpLG9EKz1hKihqYSsoamE9bykpLGtUKFdhLFlhLGphKX1mdW5jdGlvbiBYSXQoKXtUdS5wb2ludD1nSn1mdW5jdGlvbiBPNGUoKXtUdS5wb2ludD1GNGV9ZnVuY3Rpb24gejRlKCl7Wkl0KCRJdCxLSXQpLFR1LnBvaW50PWdKfWZ1bmN0aW9uIEY0ZShlLHQpeyRJdD1lLEtJdD10LGUqPXdlLHQqPXdlLFR1LnBvaW50PVpJdDt2YXIgcj1hZSh0KTtXYT1yKmFlKGUpLFlhPXIqSnQoZSksamE9SnQodCksa1QoV2EsWWEsamEpfWZ1bmN0aW9uIFpJdChlLHQpe2UqPXdlLHQqPXdlO3ZhciByPWFlKHQpLG49ciphZShlKSxpPXIqSnQoZSksbz1KdCh0KSxhPVlhKm8tamEqaSxzPWphKm4tV2EqbyxsPVdhKmktWWEqbixjPVJyKGEqYStzKnMrbCpsKSx1PUpuKGMpLGg9YyYmLXUvYztwSis9aCphLGRKKz1oKnMsbUorPWgqbCxRTis9dSxuRCs9dSooV2ErKFdhPW4pKSxpRCs9dSooWWErKFlhPWkpKSxvRCs9dSooamErKGphPW8pKSxrVChXYSxZYSxqYSl9ZnVuY3Rpb24gSkl0KGUpe0xUPVFOPXREPWVEPXJEPW5EPWlEPW9EPXBKPWRKPW1KPTAsTW8oZSxUdSk7dmFyIHQ9cEoscj1kSixuPW1KLGk9dCp0K3IqcituKm47cmV0dXJuIGk8b0omJih0PW5ELHI9aUQsbj1vRCxRTjxjZSYmKHQ9dEQscj1lRCxuPXJEKSxpPXQqdCtyKnIrbipuLGk8b0opP1tOYU4sTmFOXTpbU24ocix0KSpVcixKbihuL1JyKGkpKSpVcl19dmFyIExULFFOLHRELGVELHJELG5ELGlELG9ELHBKLGRKLG1KLCRJdCxLSXQsV2EsWWEsamEsVHUsUUl0PU0oKCk9PntscigpO1hwKCk7bWcoKTtUdT17c3BoZXJlOnFyLHBvaW50OmdKLGxpbmVTdGFydDpqSXQsbGluZUVuZDpYSXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7VHUubGluZVN0YXJ0PU80ZSxUdS5saW5lRW5kPXo0ZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1R1LmxpbmVTdGFydD1qSXQsVHUubGluZUVuZD1YSXR9fX0pO2Z1bmN0aW9uIHp5KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgdDl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhRChlLHQpe2Z1bmN0aW9uIHIobixpKXtyZXR1cm4gbj1lKG4saSksdChuWzBdLG5bMV0pfXJldHVybiBlLmludmVydCYmdC5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybiBuPXQuaW52ZXJ0KG4saSksbiYmZS5pbnZlcnQoblswXSxuWzFdKX0pLHJ9dmFyIF9KPU0oKCk9Pnt9KTtmdW5jdGlvbiB5SihlLHQpe3JldHVybltlPnJyP2UtQmk6ZTwtcnI/ZStCaTplLHRdfWZ1bmN0aW9uIFJUKGUsdCxyKXtyZXR1cm4oZSU9QmkpP3R8fHI/YUQocjl0KGUpLG45dCh0LHIpKTpyOXQoZSk6dHx8cj9uOXQodCxyKTp5Sn1mdW5jdGlvbiBlOXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+cnI/dC1CaTp0PC1ycj90K0JpOnQscl19fWZ1bmN0aW9uIHI5dChlKXt2YXIgdD1lOXQoZSk7cmV0dXJuIHQuaW52ZXJ0PWU5dCgtZSksdH1mdW5jdGlvbiBuOXQoZSx0KXt2YXIgcj1hZShlKSxuPUp0KGUpLGk9YWUodCksbz1KdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZipyK3UqbjtyZXR1cm5bU24oaCppLXAqbyx1KnItZipuKSxKbihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9YWUobCksdT1hZShzKSpjLGg9SnQocykqYyxmPUp0KGwpLHA9ZippLWgqbztyZXR1cm5bU24oaCppK2Yqbyx1KnIrcCpuKSxKbihwKnItdSpuKV19LGF9ZnVuY3Rpb24gc0QoZSl7ZT1SVChlWzBdKndlLGVbMV0qd2UsZS5sZW5ndGg+Mj9lWzJdKndlOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKndlLHJbMV0qd2UpLHJbMF0qPVVyLHJbMV0qPVVyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qd2UsclsxXSp3ZSksclswXSo9VXIsclsxXSo9VXIscn0sdH12YXIgTlQ9TSgoKT0+e19KKCk7bHIoKTt5Si5pbnZlcnQ9eUp9KTtmdW5jdGlvbiB2SihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1hZSh0KSxzPUp0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKkJpLG89dC1sLzIpOihpPWk5dChhLGkpLG89aTl0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qQmkpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1OeShbYSwtcyphZSh1KSwtcypKdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gaTl0KGUsdCl7dD12Yyh0KSx0WzBdLT1lLER5KHQpO3ZhciByPSROKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrQmktY2UpJUJpfWZ1bmN0aW9uIG85dCgpe3ZhciBlPXp5KFswLDBdKSx0PXp5KDkwKSxyPXp5KDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj1VcixsWzFdKj1Vcn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSp3ZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKndlO3JldHVybiBuPVtdLGk9UlQoLWxbMF0qd2UsLWxbMV0qd2UsMCkuaW52ZXJ0LHZKKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDp6eShbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOnp5KCtsKSxzKTpyfSxzfXZhciB4Sj1NKCgpPT57QTIoKTt0OXQoKTtscigpO05UKCl9KTtmdW5jdGlvbiBsRCgpe3ZhciBlPVtdLHQ7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKFtyLG5dKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOnFyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fXZhciBiSj1NKCgpPT57WHAoKX0pO2Z1bmN0aW9uIEkyKGUsdCl7cmV0dXJuIFllKGVbMF0tdFswXSk8Y2UmJlllKGVbMV0tdFsxXSk8Y2V9dmFyIHdKPU0oKCk9PntscigpfSk7ZnVuY3Rpb24gY0QoZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiB1RChlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKEkyKF8seSkpe2ZvcihpLmxpbmVTdGFydCgpLHM9MDtzPGc7KytzKWkucG9pbnQoKF89ZFtzXSlbMF0sX1sxXSk7aS5saW5lRW5kKCk7cmV0dXJufW8ucHVzaCh4PW5ldyBjRChfLGQsbnVsbCwhMCkpLGEucHVzaCh4Lm89bmV3IGNEKF8sbnVsbCx4LCExKSksby5wdXNoKHg9bmV3IGNEKHksZCxudWxsLCExKSksYS5wdXNoKHgubz1uZXcgY0QoeSxudWxsLHgsITApKX19KSwhIW8ubGVuZ3RoKXtmb3IoYS5zb3J0KHQpLGE5dChvKSxhOXQoYSkscz0wLGw9YS5sZW5ndGg7czxsOysrcylhW3NdLmU9cj0hcjtmb3IodmFyIGM9b1swXSx1LGg7Oyl7Zm9yKHZhciBmPWMscD0hMDtmLnY7KWlmKChmPWYubik9PT1jKXJldHVybjt1PWYueixpLmxpbmVTdGFydCgpO2Rve2lmKGYudj1mLm8udj0hMCxmLmUpe2lmKHApZm9yKHM9MCxsPXUubGVuZ3RoO3M8bDsrK3MpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYubi54LDEsaSk7Zj1mLm59ZWxzZXtpZihwKWZvcih1PWYucC56LHM9dS5sZW5ndGgtMTtzPj0wOy0tcylpLnBvaW50KChoPXVbc10pWzBdLGhbMV0pO2Vsc2UgbihmLngsZi5wLngsLTEsaSk7Zj1mLnB9Zj1mLm8sdT1mLnoscD0hcH13aGlsZSghZi52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGE5dChlKXtpZighISh0PWUubGVuZ3RoKSl7Zm9yKHZhciB0LHI9MCxuPWVbMF0saTsrK3I8dDspbi5uPWk9ZVtyXSxpLnA9bixuPWk7bi5uPWk9ZVswXSxpLnA9bn19dmFyIFNKPU0oKCk9Pnt3SigpfSk7ZnVuY3Rpb24gaEQoZSx0KXt2YXIgcj10WzBdLG49dFsxXSxpPVtKdChyKSwtYWUociksMF0sbz0wLGE9MDtNSi5yZXNldCgpO2Zvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsOysrcylpZighISh1PShjPWVbc10pLmxlbmd0aCkpZm9yKHZhciBjLHUsaD1jW3UtMV0sZj1oWzBdLHA9aFsxXS8yK1QyLGQ9SnQocCksZz1hZShwKSxfPTA7Xzx1OysrXyxmPXgsZD1TLGc9QyxoPXkpe3ZhciB5PWNbX10seD15WzBdLGI9eVsxXS8yK1QyLFM9SnQoYiksQz1hZShiKSxQPXgtZixrPVA+PTA/MTotMSxPPWsqUCxEPU8+cnIsQj1kKlM7aWYoTUouYWRkKFNuKEIqaypKdChPKSxnKkMrQiphZShPKSkpLG8rPUQ/UCtrKkJpOlAsRF5mPj1yXng+PXIpe3ZhciBJPSRwKHZjKGgpLHZjKHkpKTtEeShJKTt2YXIgTD0kcChpLEkpO0R5KEwpO3ZhciBSPShEXlA+PTA/LTE6MSkqSm4oTFsyXSk7KG4+Unx8bj09PVImJihJWzBdfHxJWzFdKSkmJihhKz1EXlA+PTA/MTotMSl9fXJldHVybihvPC1jZXx8bzxjZSYmTUo8LWNlKV5hJjF9dmFyIE1KLEVKPU0oKCk9PntreSgpO0EyKCk7bHIoKTtNSj1DcygpfSk7ZnVuY3Rpb24gX2coZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIEZ5PU0oKCk9Pnt9KTtmdW5jdGlvbiBUSihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1CNGUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBCNGUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIF9nKGUodCkscil9fXZhciBDSj1NKCgpPT57RnkoKX0pO3ZhciBzOXQsSDRlLFY0ZSxBSj1NKCgpPT57RnkoKTtDSigpO3M5dD1USihfZyksSDRlPXM5dC5yaWdodCxWNGU9czl0LmxlZnR9KTt2YXIgUEo9TSgoKT0+e30pO3ZhciBsOXQ9TSgoKT0+e1BKKCl9KTt2YXIgYzl0PU0oKCk9Pnt9KTt2YXIgTDI9TSgoKT0+e30pO3ZhciBJSj1NKCgpPT57TDIoKX0pO3ZhciBMSj1NKCgpPT57SUooKX0pO3ZhciBrSj1NKCgpPT57fSk7dmFyIHU5dCxxNGUsRzRlLFJKPU0oKCk9Pnt1OXQ9QXJyYXkucHJvdG90eXBlLHE0ZT11OXQuc2xpY2UsRzRlPXU5dC5tYXB9KTt2YXIgaDl0PU0oKCk9Pnt9KTt2YXIgZjl0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKcChlLHQscil7ZT0rZSx0PSt0LHI9KGk9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1lLGU9MCwxKTppPDM/MTorcjtmb3IodmFyIG49LTEsaT1NYXRoLm1heCgwLE1hdGguY2VpbCgodC1lKS9yKSl8MCxvPW5ldyBBcnJheShpKTsrK248aTspb1tuXT1lK24qcjtyZXR1cm4gb312YXIgTko9TSgoKT0+e30pO3ZhciBiMG4sdzBuLFMwbixESj1NKCgpPT57YjBuPU1hdGguc3FydCg1MCksdzBuPU1hdGguc3FydCgxMCksUzBuPU1hdGguc3FydCgyKX0pO3ZhciBPSj1NKCgpPT57fSk7dmFyIHA5dD1NKCgpPT57UkooKTtBSigpO2g5dCgpO2tKKCk7Zjl0KCk7TkooKTtESigpO09KKCl9KTt2YXIgcEQ9TSgoKT0+e0wyKCl9KTt2YXIgbTl0PU0oKCk9PntSSigpO0Z5KCk7TDIoKTtwRCgpfSk7dmFyIGc5dD1NKCgpPT57TEooKX0pO3ZhciBfOXQ9TSgoKT0+e30pO3ZhciB5OXQ9TSgoKT0+e0wyKCl9KTt2YXIgdjl0PU0oKCk9PntGeSgpO0wyKCk7cEQoKX0pO2Z1bmN0aW9uIERUKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99dmFyIHg5dD1NKCgpPT57fSk7dmFyIHpKPU0oKCk9Pnt9KTt2YXIgYjl0PU0oKCk9Pnt9KTt2YXIgdzl0PU0oKCk9PntGeSgpfSk7dmFyIFM5dD1NKCgpPT57fSk7dmFyIE05dD1NKCgpPT57fSk7dmFyIEZKPU0oKCk9Pnt6SigpfSk7dmFyIEU5dD1NKCgpPT57RkooKX0pO3ZhciBkRD1NKCgpPT57QUooKTtGeSgpO0NKKCk7bDl0KCk7Yzl0KCk7TEooKTtrSigpO3A5dCgpO205dCgpO2c5dCgpO09KKCk7Xzl0KCk7eTl0KCk7djl0KCk7eDl0KCk7ekooKTtQSigpO2I5dCgpO3BEKCk7TkooKTt3OXQoKTtTOXQoKTtNOXQoKTtESigpO0ZKKCk7SUooKTtFOXQoKX0pO2Z1bmN0aW9uIG1EKGUsdCxyLG4pe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10KGkpLGE9bEQoKSxzPXQoYSksbD0hMSxjLHUsaCxmPXtwb2ludDpwLGxpbmVTdGFydDpnLGxpbmVFbmQ6Xyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmLnBvaW50PXksZi5saW5lU3RhcnQ9eCxmLmxpbmVFbmQ9Yix1PVtdLGM9W119LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmLnBvaW50PXAsZi5saW5lU3RhcnQ9ZyxmLmxpbmVFbmQ9Xyx1PURUKHUpO3ZhciBTPWhEKGMsbik7dS5sZW5ndGg/KGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLHVEKHUsUTRlLFMscixpKSk6UyYmKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSksbCYmKGkucG9seWdvbkVuZCgpLGw9ITEpLHU9Yz1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCkscihudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19O2Z1bmN0aW9uIHAoUyxDKXtlKFMsQykmJmkucG9pbnQoUyxDKX1mdW5jdGlvbiBkKFMsQyl7by5wb2ludChTLEMpfWZ1bmN0aW9uIGcoKXtmLnBvaW50PWQsby5saW5lU3RhcnQoKX1mdW5jdGlvbiBfKCl7Zi5wb2ludD1wLG8ubGluZUVuZCgpfWZ1bmN0aW9uIHkoUyxDKXtoLnB1c2goW1MsQ10pLHMucG9pbnQoUyxDKX1mdW5jdGlvbiB4KCl7cy5saW5lU3RhcnQoKSxoPVtdfWZ1bmN0aW9uIGIoKXt5KGhbMF1bMF0saFswXVsxXSkscy5saW5lRW5kKCk7dmFyIFM9cy5jbGVhbigpLEM9YS5yZXN1bHQoKSxQLGs9Qy5sZW5ndGgsTyxELEI7aWYoaC5wb3AoKSxjLnB1c2goaCksaD1udWxsLCEhayl7aWYoUyYxKXtpZihEPUNbMF0sKE89RC5sZW5ndGgtMSk+MCl7Zm9yKGx8fChpLnBvbHlnb25TdGFydCgpLGw9ITApLGkubGluZVN0YXJ0KCksUD0wO1A8TzsrK1ApaS5wb2ludCgoQj1EW1BdKVswXSxCWzFdKTtpLmxpbmVFbmQoKX1yZXR1cm59az4xJiZTJjImJkMucHVzaChDLnBvcCgpLmNvbmNhdChDLnNoaWZ0KCkpKSx1LnB1c2goQy5maWx0ZXIoSjRlKSl9fXJldHVybiBmfX1mdW5jdGlvbiBKNGUoZSl7cmV0dXJuIGUubGVuZ3RoPjF9ZnVuY3Rpb24gUTRlKGUsdCl7cmV0dXJuKChlPWUueClbMF08MD9lWzFdLUJuLWNlOkJuLWVbMV0pLSgodD10LngpWzBdPDA/dFsxXS1Cbi1jZTpCbi10WzFdKX12YXIgQko9TSgoKT0+e2JKKCk7U0ooKTtscigpO0VKKCk7ZEQoKX0pO2Z1bmN0aW9uIHRQZShlKXt2YXIgdD1OYU4scj1OYU4sbj1OYU4saTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKSxpPTF9LHBvaW50OmZ1bmN0aW9uKG8sYSl7dmFyIHM9bz4wP3JyOi1ycixsPVllKG8tdCk7WWUobC1ycik8Y2U/KGUucG9pbnQodCxyPShyK2EpLzI+MD9CbjotQm4pLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxlLnBvaW50KG8sciksaT0wKTpuIT09cyYmbD49cnImJihZZSh0LW4pPGNlJiYodC09bipjZSksWWUoby1zKTxjZSYmKG8tPXMqY2UpLHI9ZVBlKHQscixvLGEpLGUucG9pbnQobixyKSxlLmxpbmVFbmQoKSxlLmxpbmVTdGFydCgpLGUucG9pbnQocyxyKSxpPTApLGUucG9pbnQodD1vLHI9YSksbj1zfSxsaW5lRW5kOmZ1bmN0aW9uKCl7ZS5saW5lRW5kKCksdD1yPU5hTn0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi1pfX19ZnVuY3Rpb24gZVBlKGUsdCxyLG4pe3ZhciBpLG8sYT1KdChlLXIpO3JldHVybiBZZShhKT5jZT95YygoSnQodCkqKG89YWUobikpKkp0KHIpLUp0KG4pKihpPWFlKHQpKSpKdChlKSkvKGkqbyphKSk6KHQrbikvMn1mdW5jdGlvbiByUGUoZSx0LHIsbil7dmFyIGk7aWYoZT09bnVsbClpPXIqQm4sbi5wb2ludCgtcnIsaSksbi5wb2ludCgwLGkpLG4ucG9pbnQocnIsaSksbi5wb2ludChyciwwKSxuLnBvaW50KHJyLC1pKSxuLnBvaW50KDAsLWkpLG4ucG9pbnQoLXJyLC1pKSxuLnBvaW50KC1yciwwKSxuLnBvaW50KC1ycixpKTtlbHNlIGlmKFllKGVbMF0tdFswXSk+Y2Upe3ZhciBvPWVbMF08dFswXT9ycjotcnI7aT1yKm8vMixuLnBvaW50KC1vLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KG8saSl9ZWxzZSBuLnBvaW50KHRbMF0sdFsxXSl9dmFyIE9ULEhKPU0oKCk9PntCSigpO2xyKCk7T1Q9bUQoZnVuY3Rpb24oKXtyZXR1cm4hMH0sdFBlLHJQZSxbLXJyLC1Cbl0pfSk7ZnVuY3Rpb24gZ0QoZSl7dmFyIHQ9YWUoZSkscj02KndlLG49dD4wLGk9WWUodCk+Y2U7ZnVuY3Rpb24gbyh1LGgsZixwKXt2SihwLGUscixmLHUsaCl9ZnVuY3Rpb24gYSh1LGgpe3JldHVybiBhZSh1KSphZShoKT50fWZ1bmN0aW9uIHModSl7dmFyIGgsZixwLGQsZztyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZD1wPSExLGc9MX0scG9pbnQ6ZnVuY3Rpb24oXyx5KXt2YXIgeD1bXyx5XSxiLFM9YShfLHkpLEM9bj9TPzA6YyhfLHkpOlM/YyhfKyhfPDA/cnI6LXJyKSx5KTowO2lmKCFoJiYoZD1wPVMpJiZ1LmxpbmVTdGFydCgpLFMhPT1wJiYoYj1sKGgseCksKCFifHxJMihoLGIpfHxJMih4LGIpKSYmKHhbMF0rPWNlLHhbMV0rPWNlLFM9YSh4WzBdLHhbMV0pKSksUyE9PXApZz0wLFM/KHUubGluZVN0YXJ0KCksYj1sKHgsaCksdS5wb2ludChiWzBdLGJbMV0pKTooYj1sKGgseCksdS5wb2ludChiWzBdLGJbMV0pLHUubGluZUVuZCgpKSxoPWI7ZWxzZSBpZihpJiZoJiZuXlMpe3ZhciBQOyEoQyZmKSYmKFA9bCh4LGgsITApKSYmKGc9MCxuPyh1LmxpbmVTdGFydCgpLHUucG9pbnQoUFswXVswXSxQWzBdWzFdKSx1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCkpOih1LnBvaW50KFBbMV1bMF0sUFsxXVsxXSksdS5saW5lRW5kKCksdS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSkpKX1TJiYoIWh8fCFJMihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPXZjKHUpLGQ9dmMoaCksZz1bMSwwLDBdLF89JHAocCxkKSx5PUFUKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD0kcChnLF8pLGs9UFQoZyxTKSxPPVBUKF8sQyk7Sk4oayxPKTt2YXIgRD1QLEI9QVQoayxEKSxJPUFUKEQsRCksTD1CKkItSSooQVQoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPVJyKEwpLEY9UFQoRCwoLUItUikvSSk7aWYoSk4oRixrKSxGPU55KEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1ZZShvdC1ycik8Y2UsU3Q9c3R8fG90PGNlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoWWUoRlswXS16KTxjZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+cnJeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9UFQoRCwoLUIrUikvSSk7cmV0dXJuIEpOKGJ0LGspLFtGLE55KGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOnJyLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIG1EKGEscyxvLG4/WzAsLWVdOlstcnIsZS1ycl0pfXZhciBWSj1NKCgpPT57QTIoKTt4SigpO2xyKCk7d0ooKTtCSigpfSk7ZnVuY3Rpb24gVDl0KGUsdCxyLG4saSxvKXt2YXIgYT1lWzBdLHM9ZVsxXSxsPXRbMF0sYz10WzFdLHU9MCxoPTEsZj1sLWEscD1jLXMsZDtpZihkPXItYSwhKCFmJiZkPjApKXtpZihkLz1mLGY8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYoZj4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1pLWEsISghZiYmZDwwKSl7aWYoZC89ZixmPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKGY+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWlmKGQ9bi1zLCEoIXAmJmQ+MCkpe2lmKGQvPXAscDwwKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9ZWxzZSBpZihwPjApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1pZihkPW8tcywhKCFwJiZkPDApKXtpZihkLz1wLHA8MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWVsc2UgaWYocD4wKXtpZihkPHUpcmV0dXJuO2Q8aCYmKGg9ZCl9cmV0dXJuIHU+MCYmKGVbMF09YSt1KmYsZVsxXT1zK3UqcCksaDwxJiYodFswXT1hK2gqZix0WzFdPXMraCpwKSwhMH19fX19dmFyIEM5dD1NKCgpPT57fSk7ZnVuY3Rpb24gUXAoZSx0LHIsbil7ZnVuY3Rpb24gaShjLHUpe3JldHVybiBlPD1jJiZjPD1yJiZ0PD11JiZ1PD1ufWZ1bmN0aW9uIG8oYyx1LGgsZil7dmFyIHA9MCxkPTA7aWYoYz09bnVsbHx8KHA9YShjLGgpKSE9PShkPWEodSxoKSl8fGwoYyx1KTwwXmg+MClkbyBmLnBvaW50KHA9PT0wfHxwPT09Mz9lOnIscD4xP246dCk7d2hpbGUoKHA9KHAraCs0KSU0KSE9PWQpO2Vsc2UgZi5wb2ludCh1WzBdLHVbMV0pfWZ1bmN0aW9uIGEoYyx1KXtyZXR1cm4gWWUoY1swXS1lKTxjZT91PjA/MDozOlllKGNbMF0tcik8Y2U/dT4wPzI6MTpZZShjWzFdLXQpPGNlP3U+MD8xOjA6dT4wPzM6Mn1mdW5jdGlvbiBzKGMsdSl7cmV0dXJuIGwoYy54LHUueCl9ZnVuY3Rpb24gbChjLHUpe3ZhciBoPWEoYywxKSxmPWEodSwxKTtyZXR1cm4gaCE9PWY/aC1mOmg9PT0wP3VbMV0tY1sxXTpoPT09MT9jWzBdLXVbMF06aD09PTI/Y1sxXS11WzFdOnVbMF0tY1swXX1yZXR1cm4gZnVuY3Rpb24oYyl7dmFyIHU9YyxoPWxEKCksZixwLGQsZyxfLHkseCxiLFMsQyxQLGs9e3BvaW50Ok8sbGluZVN0YXJ0OkwsbGluZUVuZDpSLHBvbHlnb25TdGFydDpCLHBvbHlnb25FbmQ6SX07ZnVuY3Rpb24gTyh6LFUpe2koeixVKSYmdS5wb2ludCh6LFUpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIHo9MCxVPTAsVz1wLmxlbmd0aDtVPFc7KytVKWZvcih2YXIgWj1wW1VdLHJ0PTEsb3Q9Wi5sZW5ndGgsc3Q9WlswXSxTdCxidCxNdD1zdFswXSxsdD1zdFsxXTtydDxvdDsrK3J0KVN0PU10LGJ0PWx0LHN0PVpbcnRdLE10PXN0WzBdLGx0PXN0WzFdLGJ0PD1uP2x0Pm4mJihNdC1TdCkqKG4tYnQpPihsdC1idCkqKGUtU3QpJiYrK3o6bHQ8PW4mJihNdC1TdCkqKG4tYnQpPChsdC1idCkqKGUtU3QpJiYtLXo7cmV0dXJuIHp9ZnVuY3Rpb24gQigpe3U9aCxmPVtdLHA9W10sUD0hMH1mdW5jdGlvbiBJKCl7dmFyIHo9RCgpLFU9UCYmeixXPShmPURUKGYpKS5sZW5ndGg7KFV8fFcpJiYoYy5wb2x5Z29uU3RhcnQoKSxVJiYoYy5saW5lU3RhcnQoKSxvKG51bGwsbnVsbCwxLGMpLGMubGluZUVuZCgpKSxXJiZ1RChmLHMseixvLGMpLGMucG9seWdvbkVuZCgpKSx1PWMsZj1wPWQ9bnVsbH1mdW5jdGlvbiBMKCl7ay5wb2ludD1GLHAmJnAucHVzaChkPVtdKSxDPSEwLFM9ITEseD1iPU5hTn1mdW5jdGlvbiBSKCl7ZiYmKEYoZyxfKSx5JiZTJiZoLnJlam9pbigpLGYucHVzaChoLnJlc3VsdCgpKSksay5wb2ludD1PLFMmJnUubGluZUVuZCgpfWZ1bmN0aW9uIEYoeixVKXt2YXIgVz1pKHosVSk7aWYocCYmZC5wdXNoKFt6LFVdKSxDKWc9eixfPVUseT1XLEM9ITEsVyYmKHUubGluZVN0YXJ0KCksdS5wb2ludCh6LFUpKTtlbHNlIGlmKFcmJlMpdS5wb2ludCh6LFUpO2Vsc2V7dmFyIFo9W3g9TWF0aC5tYXgoX0QsTWF0aC5taW4oelQseCkpLGI9TWF0aC5tYXgoX0QsTWF0aC5taW4oelQsYikpXSxydD1bej1NYXRoLm1heChfRCxNYXRoLm1pbih6VCx6KSksVT1NYXRoLm1heChfRCxNYXRoLm1pbih6VCxVKSldO1Q5dChaLHJ0LGUsdCxyLG4pPyhTfHwodS5saW5lU3RhcnQoKSx1LnBvaW50KFpbMF0sWlsxXSkpLHUucG9pbnQocnRbMF0scnRbMV0pLFd8fHUubGluZUVuZCgpLFA9ITEpOlcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSxQPSExKX14PXosYj1VLFM9V31yZXR1cm4ga319dmFyIHpULF9ELEZUPU0oKCk9PntscigpO2JKKCk7Qzl0KCk7U0ooKTtkRCgpO3pUPTFlOSxfRD0telR9KTtmdW5jdGlvbiBBOXQoKXt2YXIgZT0wLHQ9MCxyPTk2MCxuPTUwMCxpLG8sYTtyZXR1cm4gYT17c3RyZWFtOmZ1bmN0aW9uKHMpe3JldHVybiBpJiZvPT09cz9pOmk9UXAoZSx0LHIsbikobz1zKX0sZXh0ZW50OmZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPStzWzBdWzBdLHQ9K3NbMF1bMV0scj0rc1sxXVswXSxuPStzWzFdWzFdLGk9bz1udWxsLGEpOltbZSx0XSxbcixuXV19fX12YXIgUDl0PU0oKCk9PntGVCgpfSk7ZnVuY3Rpb24gblBlKCl7azIucG9pbnQ9b1BlLGsyLmxpbmVFbmQ9aVBlfWZ1bmN0aW9uIGlQZSgpe2syLnBvaW50PWsyLmxpbmVFbmQ9cXJ9ZnVuY3Rpb24gb1BlKGUsdCl7ZSo9d2UsdCo9d2UscUo9ZSx5RD1KdCh0KSx2RD1hZSh0KSxrMi5wb2ludD1hUGV9ZnVuY3Rpb24gYVBlKGUsdCl7ZSo9d2UsdCo9d2U7dmFyIHI9SnQodCksbj1hZSh0KSxpPVllKGUtcUopLG89YWUoaSksYT1KdChpKSxzPW4qYSxsPXZEKnIteUQqbipvLGM9eUQqcit2RCpuKm87VUouYWRkKFNuKFJyKHMqcytsKmwpLGMpKSxxSj1lLHlEPXIsdkQ9bn1mdW5jdGlvbiB4RChlKXtyZXR1cm4gVUoucmVzZXQoKSxNbyhlLGsyKSwrVUp9dmFyIFVKLHFKLHlELHZELGsyLEdKPU0oKCk9PntreSgpO2xyKCk7WHAoKTttZygpO1VKPUNzKCksazI9e3NwaGVyZTpxcixwb2ludDpxcixsaW5lU3RhcnQ6blBlLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OnFyLHBvbHlnb25FbmQ6cXJ9fSk7ZnVuY3Rpb24gQnkoZSx0KXtyZXR1cm4gV0pbMF09ZSxXSlsxXT10LHhEKHNQZSl9dmFyIFdKLHNQZSxZSj1NKCgpPT57R0ooKTtXSj1bbnVsbCxudWxsXSxzUGU9e3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOldKfX0pO2Z1bmN0aW9uIGJEKGUsdCl7cmV0dXJuIGUmJkw5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0w5dFtlLnR5cGVdKGUsdCk6ITF9ZnVuY3Rpb24gazl0KGUsdCl7cmV0dXJuIEJ5KGUsdCk9PT0wfWZ1bmN0aW9uIFI5dChlLHQpe3ZhciByPUJ5KGVbMF0sZVsxXSksbj1CeShlWzBdLHQpLGk9QnkodCxlWzFdKTtyZXR1cm4gbitpPD1yK2NlfWZ1bmN0aW9uIE45dChlLHQpe3JldHVybiEhaEQoZS5tYXAobFBlKSxEOXQodCkpfWZ1bmN0aW9uIGxQZShlKXtyZXR1cm4gZT1lLm1hcChEOXQpLGUucG9wKCksZX1mdW5jdGlvbiBEOXQoZSl7cmV0dXJuW2VbMF0qd2UsZVsxXSp3ZV19ZnVuY3Rpb24gTzl0KGUsdCl7cmV0dXJuKGUmJkk5dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0k5dFtlLnR5cGVdOmJEKShlLHQpfXZhciBJOXQsTDl0LHo5dD1NKCgpPT57RUooKTtZSigpO2xyKCk7STl0PXtGZWF0dXJlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGJEKGUuZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihiRChyW25dLmdlb21ldHJ5LHQpKXJldHVybiEwO3JldHVybiExfX0sTDl0PXtTcGhlcmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gazl0KGUuY29vcmRpbmF0ZXMsdCl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKGs5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFI5dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aUxpbmVTdHJpbmc6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFI5dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIE45dChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKE45dChyW25dLHQpKXJldHVybiEwO3JldHVybiExfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5nZW9tZXRyaWVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoYkQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19fSk7ZnVuY3Rpb24gRjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW2ksb119KX19ZnVuY3Rpb24gQjl0KGUsdCxyKXt2YXIgbj1KcChlLHQtY2UscikuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5tYXAoZnVuY3Rpb24obyl7cmV0dXJuW28saV19KX19ZnVuY3Rpb24gd0QoKXt2YXIgZSx0LHIsbixpLG8sYSxzLGw9MTAsYz1sLHU9OTAsaD0zNjAsZixwLGQsZyxfPTIuNTtmdW5jdGlvbiB5KCl7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6eCgpfX1mdW5jdGlvbiB4KCl7cmV0dXJuIEpwKFRUKG4vdSkqdSxyLHUpLm1hcChkKS5jb25jYXQoSnAoVFQocy9oKSpoLGEsaCkubWFwKGcpKS5jb25jYXQoSnAoVFQodC9sKSpsLGUsbCkuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJXUpPmNlfSkubWFwKGYpKS5jb25jYXQoSnAoVFQoby9jKSpjLGksYykuZmlsdGVyKGZ1bmN0aW9uKGIpe3JldHVybiBZZShiJWgpPmNlfSkubWFwKHApKX1yZXR1cm4geS5saW5lcz1mdW5jdGlvbigpe3JldHVybiB4KCkubWFwKGZ1bmN0aW9uKGIpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpifX0pfSx5Lm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2QobikuY29uY2F0KGcoYSkuc2xpY2UoMSksZChyKS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LHkuZXh0ZW50PWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuZXh0ZW50TWFqb3IoYikuZXh0ZW50TWlub3IoYik6eS5leHRlbnRNaW5vcigpfSx5LmV4dGVudE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStiWzBdWzBdLHI9K2JbMV1bMF0scz0rYlswXVsxXSxhPStiWzFdWzFdLG4+ciYmKGI9bixuPXIscj1iKSxzPmEmJihiPXMscz1hLGE9YikseS5wcmVjaXNpb24oXykpOltbbixzXSxbcixhXV19LHkuZXh0ZW50TWlub3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2JbMF1bMF0sZT0rYlsxXVswXSxvPStiWzBdWzFdLGk9K2JbMV1bMV0sdD5lJiYoYj10LHQ9ZSxlPWIpLG8+aSYmKGI9byxvPWksaT1iKSx5LnByZWNpc2lvbihfKSk6W1t0LG9dLFtlLGldXX0seS5zdGVwPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3kuc3RlcE1ham9yKGIpLnN0ZXBNaW5vcihiKTp5LnN0ZXBNaW5vcigpfSx5LnN0ZXBNYWpvcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0rYlswXSxoPStiWzFdLHkpOlt1LGhdfSx5LnN0ZXBNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rYlswXSxjPStiWzFdLHkpOltsLGNdfSx5LnByZWNpc2lvbj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oXz0rYixmPUY5dChvLGksOTApLHA9Qjl0KHQsZSxfKSxkPUY5dChzLGEsOTApLGc9Qjl0KG4scixfKSx5KTpffSx5LmV4dGVudE1ham9yKFtbLTE4MCwtOTArY2VdLFsxODAsOTAtY2VdXSkuZXh0ZW50TWlub3IoW1stMTgwLC04MC1jZV0sWzE4MCw4MCtjZV1dKX1mdW5jdGlvbiBIOXQoKXtyZXR1cm4gd0QoKSgpfXZhciBWOXQ9TSgoKT0+e2REKCk7bHIoKX0pO2Z1bmN0aW9uIFU5dChlLHQpe3ZhciByPWVbMF0qd2Usbj1lWzFdKndlLGk9dFswXSp3ZSxvPXRbMV0qd2UsYT1hZShuKSxzPUp0KG4pLGw9YWUobyksYz1KdChvKSx1PWEqYWUociksaD1hKkp0KHIpLGY9bCphZShpKSxwPWwqSnQoaSksZD0yKkpuKFJyKGFKKG8tbikrYSpsKmFKKGktcikpKSxnPUp0KGQpLF89ZD9mdW5jdGlvbih5KXt2YXIgeD1KdCh5Kj1kKS9nLGI9SnQoZC15KS9nLFM9Yip1K3gqZixDPWIqaCt4KnAsUD1iKnMreCpjO3JldHVybltTbihDLFMpKlVyLFNuKFAsUnIoUypTK0MqQykpKlVyXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipVcixuKlVyXX07cmV0dXJuIF8uZGlzdGFuY2U9ZCxffXZhciBxOXQ9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBuZihlKXtyZXR1cm4gZX12YXIgU0Q9TSgoKT0+e30pO2Z1bmN0aW9uIGNQZSgpe3lnLnBvaW50PXVQZX1mdW5jdGlvbiB1UGUoZSx0KXt5Zy5wb2ludD1ZOXQsRzl0PSRKPWUsVzl0PUtKPXR9ZnVuY3Rpb24gWTl0KGUsdCl7WEouYWRkKEtKKmUtJEoqdCksJEo9ZSxLSj10fWZ1bmN0aW9uIGhQZSgpe1k5dChHOXQsVzl0KX12YXIgakosWEosRzl0LFc5dCwkSixLSix5ZyxaSixqOXQ9TSgoKT0+e2t5KCk7bHIoKTtYcCgpO2pKPUNzKCksWEo9Q3MoKSx5Zz17cG9pbnQ6cXIsbGluZVN0YXJ0OnFyLGxpbmVFbmQ6cXIscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7eWcubGluZVN0YXJ0PWNQZSx5Zy5saW5lRW5kPWhQZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3lnLmxpbmVTdGFydD15Zy5saW5lRW5kPXlnLnBvaW50PXFyLGpKLmFkZChZZShYSikpLFhKLnJlc2V0KCl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPWpKLzI7cmV0dXJuIGpKLnJlc2V0KCksZX19O1pKPXlnfSk7ZnVuY3Rpb24gcFBlKGUsdCl7ZTxSMiYmKFIyPWUpLGU+QlQmJihCVD1lKSx0PE1EJiYoTUQ9dCksdD5FRCYmKEVEPXQpfXZhciBSMixNRCxCVCxFRCxmUGUsTjIsSko9TSgoKT0+e1hwKCk7UjI9MS8wLE1EPVIyLEJUPS1SMixFRD1CVCxmUGU9e3BvaW50OnBQZSxsaW5lU3RhcnQ6cXIsbGluZUVuZDpxcixwb2x5Z29uU3RhcnQ6cXIscG9seWdvbkVuZDpxcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW1IyLE1EXSxbQlQsRURdXTtyZXR1cm4gQlQ9RUQ9LShNRD1SMj0xLzApLGV9fTtOMj1mUGV9KTtmdW5jdGlvbiBIeShlLHQpe1FKKz1lLHRRKz10LCsrSFR9ZnVuY3Rpb24gWDl0KCl7Q3UucG9pbnQ9ZFBlfWZ1bmN0aW9uIGRQZShlLHQpe0N1LnBvaW50PW1QZSxIeShvZj1lLGFmPXQpfWZ1bmN0aW9uIG1QZShlLHQpe3ZhciByPWUtb2Ysbj10LWFmLGk9UnIocipyK24qbik7VEQrPWkqKG9mK2UpLzIsQ0QrPWkqKGFmK3QpLzIsRDIrPWksSHkob2Y9ZSxhZj10KX1mdW5jdGlvbiAkOXQoKXtDdS5wb2ludD1IeX1mdW5jdGlvbiBnUGUoKXtDdS5wb2ludD15UGV9ZnVuY3Rpb24gX1BlKCl7Sjl0KEs5dCxaOXQpfWZ1bmN0aW9uIHlQZShlLHQpe0N1LnBvaW50PUo5dCxIeShLOXQ9b2Y9ZSxaOXQ9YWY9dCl9ZnVuY3Rpb24gSjl0KGUsdCl7dmFyIHI9ZS1vZixuPXQtYWYsaT1ScihyKnIrbipuKTtURCs9aSoob2YrZSkvMixDRCs9aSooYWYrdCkvMixEMis9aSxpPWFmKmUtb2YqdCxlUSs9aSoob2YrZSksclErPWkqKGFmK3QpLFZUKz1pKjMsSHkob2Y9ZSxhZj10KX12YXIgUUosdFEsSFQsVEQsQ0QsRDIsZVEsclEsVlQsSzl0LFo5dCxvZixhZixDdSxuUSxROXQ9TSgoKT0+e2xyKCk7UUo9MCx0UT0wLEhUPTAsVEQ9MCxDRD0wLEQyPTAsZVE9MCxyUT0wLFZUPTAsQ3U9e3BvaW50Okh5LGxpbmVTdGFydDpYOXQsbGluZUVuZDokOXQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Q3UubGluZVN0YXJ0PWdQZSxDdS5saW5lRW5kPV9QZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe0N1LnBvaW50PUh5LEN1LmxpbmVTdGFydD1YOXQsQ3UubGluZUVuZD0kOXR9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPVZUP1tlUS9WVCxyUS9WVF06RDI/W1REL0QyLENEL0QyXTpIVD9bUUovSFQsdFEvSFRdOltOYU4sTmFOXTtyZXR1cm4gUUo9dFE9SFQ9VEQ9Q0Q9RDI9ZVE9clE9VlQ9MCxlfX07blE9Q3V9KTtmdW5jdGlvbiBBRChlKXt0aGlzLl9jb250ZXh0PWV9dmFyIHRMdD1NKCgpPT57bHIoKTtYcCgpO0FELnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxCaSk7YnJlYWt9fX0scmVzdWx0OnFyfX0pO2Z1bmN0aW9uIHZQZShlLHQpe1BELnBvaW50PW5MdCxlTHQ9VVQ9ZSxyTHQ9cVQ9dH1mdW5jdGlvbiBuTHQoZSx0KXtVVC09ZSxxVC09dCxvUS5hZGQoUnIoVVQqVVQrcVQqcVQpKSxVVD1lLHFUPXR9dmFyIG9RLGlRLGVMdCxyTHQsVVQscVQsUEQsYVEsaUx0PU0oKCk9PntreSgpO2xyKCk7WHAoKTtvUT1DcygpLFBEPXtwb2ludDpxcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtQRC5wb2ludD12UGV9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtpUSYmbkx0KGVMdCxyTHQpLFBELnBvaW50PXFyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtpUT0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2lRPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStvUTtyZXR1cm4gb1EucmVzZXQoKSxlfX07YVE9UER9KTtmdW5jdGlvbiBJRCgpe3RoaXMuX3N0cmluZz1bXX1mdW5jdGlvbiBvTHQoZSl7cmV0dXJuIm0wLCIrZSsiYSIrZSsiLCIrZSsiIDAgMSwxIDAsIistMiplKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKzIqZSsieiJ9dmFyIGFMdD1NKCgpPT57SUQucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOm9MdCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPW9MdCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19fSk7ZnVuY3Rpb24gc0x0KGUsdCl7dmFyIHI9NC41LG4saTtmdW5jdGlvbiBvKGEpe3JldHVybiBhJiYodHlwZW9mIHI9PSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMoK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxNbyhhLG4oaSkpKSxpLnJlc3VsdCgpfXJldHVybiBvLmFyZWE9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihaSikpLFpKLnJlc3VsdCgpfSxvLm1lYXN1cmU9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihhUSkpLGFRLnJlc3VsdCgpfSxvLmJvdW5kcz1mdW5jdGlvbihhKXtyZXR1cm4gTW8oYSxuKE4yKSksTjIucmVzdWx0KCl9LG8uY2VudHJvaWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIE1vKGEsbihuUSkpLG5RLnJlc3VsdCgpfSxvLnByb2plY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49YT09bnVsbD8oZT1udWxsLG5mKTooZT1hKS5zdHJlYW0sbyk6ZX0sby5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWE9PW51bGw/KHQ9bnVsbCxuZXcgSUQpOm5ldyBBRCh0PWEpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiZpLnBvaW50UmFkaXVzKHIpLG8pOnR9LG8ucG9pbnRSYWRpdXM9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGE9PSJmdW5jdGlvbiI/YTooaS5wb2ludFJhZGl1cygrYSksK2EpLG8pOnJ9LG8ucHJvamVjdGlvbihlKS5jb250ZXh0KHQpfXZhciBsTHQ9TSgoKT0+e1NEKCk7bWcoKTtqOXQoKTtKSigpO1E5dCgpO3RMdCgpO2lMdCgpO2FMdCgpfSk7ZnVuY3Rpb24gY0x0KGUpe3JldHVybntzdHJlYW06dmcoZSl9fWZ1bmN0aW9uIHZnKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgc1E7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIHNRKCl7fXZhciBHVD1NKCgpPT57c1EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzUSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUsdCl9LHNwaGVyZTpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uRW5kKCl9fX0pO2Z1bmN0aW9uIGxRKGUsdCxyKXt2YXIgbj1lLmNsaXBFeHRlbnQmJmUuY2xpcEV4dGVudCgpO3JldHVybiBlLnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxuIT1udWxsJiZlLmNsaXBFeHRlbnQobnVsbCksTW8ocixlLnN0cmVhbShOMikpLHQoTjIucmVzdWx0KCkpLG4hPW51bGwmJmUuY2xpcEV4dGVudChuKSxlfWZ1bmN0aW9uIFZ5KGUsdCxyKXtyZXR1cm4gbFEoZSxmdW5jdGlvbihuKXt2YXIgaT10WzFdWzBdLXRbMF1bMF0sbz10WzFdWzFdLXRbMF1bMV0sYT1NYXRoLm1pbihpLyhuWzFdWzBdLW5bMF1bMF0pLG8vKG5bMV1bMV0tblswXVsxXSkpLHM9K3RbMF1bMF0rKGktYSooblsxXVswXStuWzBdWzBdKSkvMixsPSt0WzBdWzFdKyhvLWEqKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtzLGxdKX0scil9ZnVuY3Rpb24gTzIoZSx0LHIpe3JldHVybiBWeShlLFtbMCwwXSx0XSxyKX1mdW5jdGlvbiB6MihlLHQscil7cmV0dXJuIGxRKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzBdLW5bMF1bMF0pLGE9KGktbyooblsxXVswXStuWzBdWzBdKSkvMixzPS1vKm5bMF1bMV07ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9ZnVuY3Rpb24gRjIoZSx0LHIpe3JldHVybiBsUShlLGZ1bmN0aW9uKG4pe3ZhciBpPSt0LG89aS8oblsxXVsxXS1uWzBdWzFdKSxhPS1vKm5bMF1bMF0scz0oaS1vKihuWzFdWzFdK25bMF1bMV0pKS8yO2Uuc2NhbGUoMTUwKm8pLnRyYW5zbGF0ZShbYSxzXSl9LHIpfXZhciBMRD1NKCgpPT57bWcoKTtKSigpfSk7ZnVuY3Rpb24gY1EoZSx0KXtyZXR1cm4rdD93UGUoZSx0KTpiUGUoZSl9ZnVuY3Rpb24gYlBlKGUpe3JldHVybiB2Zyh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt0PWUodCxyKSx0aGlzLnN0cmVhbS5wb2ludCh0WzBdLHRbMV0pfX0pfWZ1bmN0aW9uIHdQZShlLHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzLGwsYyx1LGgsZixwLGQsZyxfKXt2YXIgeT1jLW4seD11LWksYj15KnkreCp4O2lmKGI+NCp0JiZnLS0pe3ZhciBTPWErZixDPXMrcCxQPWwrZCxrPVJyKFMqUytDKkMrUCpQKSxPPUpuKFAvPWspLEQ9WWUoWWUoUCktMSk8Y2V8fFllKG8taCk8Y2U/KG8raCkvMjpTbihDLFMpLEI9ZShELE8pLEk9QlswXSxMPUJbMV0sUj1JLW4sRj1MLWksej14KlIteSpGOyh6KnovYj50fHxZZSgoeSpSK3gqRikvYi0uNSk+LjN8fGEqZitzKnArbCpkPHhQZSkmJihyKG4saSxvLGEscyxsLEksTCxELFMvPWssQy89ayxQLGcsXyksXy5wb2ludChJLEwpLHIoSSxMLEQsUyxDLFAsYyx1LGgsZixwLGQsZyxfKSl9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgaSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXz17cG9pbnQ6eSxsaW5lU3RhcnQ6eCxsaW5lRW5kOlMscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7bi5wb2x5Z29uU3RhcnQoKSxfLmxpbmVTdGFydD1DfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bi5wb2x5Z29uRW5kKCksXy5saW5lU3RhcnQ9eH19O2Z1bmN0aW9uIHkoTyxEKXtPPWUoTyxEKSxuLnBvaW50KE9bMF0sT1sxXSl9ZnVuY3Rpb24geCgpe2g9TmFOLF8ucG9pbnQ9YixuLmxpbmVTdGFydCgpfWZ1bmN0aW9uIGIoTyxEKXt2YXIgQj12YyhbTyxEXSksST1lKE8sRCk7cihoLGYsdSxwLGQsZyxoPUlbMF0sZj1JWzFdLHU9TyxwPUJbMF0sZD1CWzFdLGc9QlsyXSx1THQsbiksbi5wb2ludChoLGYpfWZ1bmN0aW9uIFMoKXtfLnBvaW50PXksbi5saW5lRW5kKCl9ZnVuY3Rpb24gQygpe3goKSxfLnBvaW50PVAsXy5saW5lRW5kPWt9ZnVuY3Rpb24gUChPLEQpe2IoaT1PLEQpLG89aCxhPWYscz1wLGw9ZCxjPWcsXy5wb2ludD1ifWZ1bmN0aW9uIGsoKXtyKGgsZix1LHAsZCxnLG8sYSxpLHMsbCxjLHVMdCxuKSxfLmxpbmVFbmQ9UyxTKCl9cmV0dXJuIF99fXZhciB1THQseFBlLGhMdD1NKCgpPT57QTIoKTtscigpO0dUKCk7dUx0PTE2LHhQZT1hZSgzMCp3ZSl9KTtmdW5jdGlvbiBNUGUoZSl7cmV0dXJuIHZnKHtwb2ludDpmdW5jdGlvbih0LHIpe3ZhciBuPWUodCxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX1mdW5jdGlvbiBlbyhlKXtyZXR1cm4gV1QoZnVuY3Rpb24oKXtyZXR1cm4gZX0pKCl9ZnVuY3Rpb24gV1QoZSl7dmFyIHQscj0xNTAsbj00ODAsaT0yNTAsbyxhLHM9MCxsPTAsYz0wLHU9MCxoPTAsZixwLGQ9bnVsbCxnPU9ULF89bnVsbCx5LHgsYixTPW5mLEM9LjUsUD1jUShJLEMpLGssTztmdW5jdGlvbiBEKEYpe3JldHVybiBGPXAoRlswXSp3ZSxGWzFdKndlKSxbRlswXSpyK28sYS1GWzFdKnJdfWZ1bmN0aW9uIEIoRil7cmV0dXJuIEY9cC5pbnZlcnQoKEZbMF0tbykvciwoYS1GWzFdKS9yKSxGJiZbRlswXSpVcixGWzFdKlVyXX1mdW5jdGlvbiBJKEYseil7cmV0dXJuIEY9dChGLHopLFtGWzBdKnIrbyxhLUZbMV0qcl19RC5zdHJlYW09ZnVuY3Rpb24oRil7cmV0dXJuIGsmJk89PT1GP2s6az1TUGUoTVBlKGYpKGcoUChTKE89RikpKSkpfSxELnByZWNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9RixkPXZvaWQgMCxSKCkpOmd9LEQucG9zdGNsaXA9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9RixfPXk9eD1iPW51bGwsUigpKTpTfSxELmNsaXBBbmdsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0rRj9nRChkPUYqd2UpOihkPW51bGwsT1QpLFIoKSk6ZCpVcn0sRC5jbGlwRXh0ZW50PWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPUY9PW51bGw/KF89eT14PWI9bnVsbCxuZik6UXAoXz0rRlswXVswXSx5PStGWzBdWzFdLHg9K0ZbMV1bMF0sYj0rRlsxXVsxXSksUigpKTpfPT1udWxsP251bGw6W1tfLHldLFt4LGJdXX0sRC5zY2FsZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rRixMKCkpOnJ9LEQudHJhbnNsYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStGWzBdLGk9K0ZbMV0sTCgpKTpbbixpXX0sRC5jZW50ZXI9ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9RlswXSUzNjAqd2UsbD1GWzFdJTM2MCp3ZSxMKCkpOltzKlVyLGwqVXJdfSxELnJvdGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1GWzBdJTM2MCp3ZSx1PUZbMV0lMzYwKndlLGg9Ri5sZW5ndGg+Mj9GWzJdJTM2MCp3ZTowLEwoKSk6W2MqVXIsdSpVcixoKlVyXX0sRC5wcmVjaXNpb249ZnVuY3Rpb24oRil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFA9Y1EoSSxDPUYqRiksUigpKTpScihDKX0sRC5maXRFeHRlbnQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gVnkoRCxGLHopfSxELmZpdFNpemU9ZnVuY3Rpb24oRix6KXtyZXR1cm4gTzIoRCxGLHopfSxELmZpdFdpZHRoPWZ1bmN0aW9uKEYseil7cmV0dXJuIHoyKEQsRix6KX0sRC5maXRIZWlnaHQ9ZnVuY3Rpb24oRix6KXtyZXR1cm4gRjIoRCxGLHopfTtmdW5jdGlvbiBMKCl7cD1hRChmPVJUKGMsdSxoKSx0KTt2YXIgRj10KHMsbCk7cmV0dXJuIG89bi1GWzBdKnIsYT1pK0ZbMV0qcixSKCl9ZnVuY3Rpb24gUigpe3JldHVybiBrPU89bnVsbCxEfXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLEQuaW52ZXJ0PXQuaW52ZXJ0JiZCLEwoKX19dmFyIFNQZSxBdT1NKCgpPT57SEooKTtWSigpO0ZUKCk7X0ooKTtTRCgpO2xyKCk7TlQoKTtHVCgpO0xEKCk7aEx0KCk7U1BlPXZnKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqd2UsdCp3ZSl9fSl9KTtmdW5jdGlvbiBCMihlKXt2YXIgdD0wLHI9cnIvMyxuPVdUKGUpLGk9bih0LHIpO3JldHVybiBpLnBhcmFsbGVscz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQ9b1swXSp3ZSxyPW9bMV0qd2UpOlt0KlVyLHIqVXJdfSxpfXZhciBrRD1NKCgpPT57bHIoKTtBdSgpfSk7ZnVuY3Rpb24gZkx0KGUpe3ZhciB0PWFlKGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LEp0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3QsSm4oaSp0KV19LHJ9dmFyIHBMdD1NKCgpPT57bHIoKX0pO2Z1bmN0aW9uIHVRKGUsdCl7dmFyIHI9SnQoZSksbj0ocitKdCh0KSkvMjtpZihZZShuKTxjZSlyZXR1cm4gZkx0KGUpO3ZhciBpPTErciooMipuLXIpLG89UnIoaSkvbjtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9UnIoaS0yKm4qSnQobCkpL247cmV0dXJuW2MqSnQocyo9biksby1jKmFlKHMpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocyxsKXt2YXIgYz1vLWw7cmV0dXJuW1NuKHMsWWUoYykpL24qZGcoYyksSm4oKGktKHMqcytjKmMpKm4qbikvKDIqbikpXX0sYX1mdW5jdGlvbiBVeSgpe3JldHVybiBCMih1USkuc2NhbGUoMTU1LjQyNCkuY2VudGVyKFswLDMzLjY0NDJdKX12YXIgUkQ9TSgoKT0+e2xyKCk7a0QoKTtwTHQoKX0pO2Z1bmN0aW9uIE5EKCl7cmV0dXJuIFV5KCkucGFyYWxsZWxzKFsyOS41LDQ1LjVdKS5zY2FsZSgxMDcwKS50cmFuc2xhdGUoWzQ4MCwyNTBdKS5yb3RhdGUoWzk2LDBdKS5jZW50ZXIoWy0uNiwzOC43XSl9dmFyIGhRPU0oKCk9PntSRCgpfSk7ZnVuY3Rpb24gRVBlKGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybntwb2ludDpmdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0tMTsrK2k8dDspZVtpXS5wb2ludChyLG4pfSxzcGhlcmU6ZnVuY3Rpb24oKXtmb3IodmFyIHI9LTE7KytyPHQ7KWVbcl0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5wb2x5Z29uRW5kKCl9fX1mdW5jdGlvbiBkTHQoKXt2YXIgZSx0LHI9TkQoKSxuLGk9VXkoKS5yb3RhdGUoWzE1NCwwXSkuY2VudGVyKFstMiw1OC41XSkucGFyYWxsZWxzKFs1NSw2NV0pLG8sYT1VeSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxzLGwsYz17cG9pbnQ6ZnVuY3Rpb24oZixwKXtsPVtmLHBdfX07ZnVuY3Rpb24gdShmKXt2YXIgcD1mWzBdLGQ9ZlsxXTtyZXR1cm4gbD1udWxsLG4ucG9pbnQocCxkKSxsfHwoby5wb2ludChwLGQpLGwpfHwocy5wb2ludChwLGQpLGwpfXUuaW52ZXJ0PWZ1bmN0aW9uKGYpe3ZhciBwPXIuc2NhbGUoKSxkPXIudHJhbnNsYXRlKCksZz0oZlswXS1kWzBdKS9wLF89KGZbMV0tZFsxXSkvcDtyZXR1cm4oXz49LjEyJiZfPC4yMzQmJmc+PS0uNDI1JiZnPC0uMjE0P2k6Xz49LjE2NiYmXzwuMjM0JiZnPj0tLjIxNCYmZzwtLjExNT9hOnIpLmludmVydChmKX0sdS5zdHJlYW09ZnVuY3Rpb24oZil7cmV0dXJuIGUmJnQ9PT1mP2U6ZT1FUGUoW3Iuc3RyZWFtKHQ9ZiksaS5zdHJlYW0oZiksYS5zdHJlYW0oZildKX0sdS5wcmVjaXNpb249ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIucHJlY2lzaW9uKGYpLGkucHJlY2lzaW9uKGYpLGEucHJlY2lzaW9uKGYpLGgoKSk6ci5wcmVjaXNpb24oKX0sdS5zY2FsZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5zY2FsZShmKSxpLnNjYWxlKGYqLjM1KSxhLnNjYWxlKGYpLHUudHJhbnNsYXRlKHIudHJhbnNsYXRlKCkpKTpyLnNjYWxlKCl9LHUudHJhbnNsYXRlPWZ1bmN0aW9uKGYpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByLnRyYW5zbGF0ZSgpO3ZhciBwPXIuc2NhbGUoKSxkPStmWzBdLGc9K2ZbMV07cmV0dXJuIG49ci50cmFuc2xhdGUoZikuY2xpcEV4dGVudChbW2QtLjQ1NSpwLGctLjIzOCpwXSxbZCsuNDU1KnAsZysuMjM4KnBdXSkuc3RyZWFtKGMpLG89aS50cmFuc2xhdGUoW2QtLjMwNypwLGcrLjIwMSpwXSkuY2xpcEV4dGVudChbW2QtLjQyNSpwK2NlLGcrLjEyKnArY2VdLFtkLS4yMTQqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYykscz1hLnRyYW5zbGF0ZShbZC0uMjA1KnAsZysuMjEyKnBdKS5jbGlwRXh0ZW50KFtbZC0uMjE0KnArY2UsZysuMTY2KnArY2VdLFtkLS4xMTUqcC1jZSxnKy4yMzQqcC1jZV1dKS5zdHJlYW0oYyksaCgpfSx1LmZpdEV4dGVudD1mdW5jdGlvbihmLHApe3JldHVybiBWeSh1LGYscCl9LHUuZml0U2l6ZT1mdW5jdGlvbihmLHApe3JldHVybiBPMih1LGYscCl9LHUuZml0V2lkdGg9ZnVuY3Rpb24oZixwKXtyZXR1cm4gejIodSxmLHApfSx1LmZpdEhlaWdodD1mdW5jdGlvbihmLHApe3JldHVybiBGMih1LGYscCl9O2Z1bmN0aW9uIGgoKXtyZXR1cm4gZT10PW51bGwsdX1yZXR1cm4gdS5zY2FsZSgxMDcwKX12YXIgbUx0PU0oKCk9PntscigpO2hRKCk7UkQoKTtMRCgpfSk7ZnVuY3Rpb24gREQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49YWUodCksaT1hZShyKSxvPWUobippKTtyZXR1cm5bbyppKkp0KHQpLG8qSnQocildfX1mdW5jdGlvbiBzZihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1Scih0KnQrcipyKSxpPWUobiksbz1KdChpKSxhPWFlKGkpO3JldHVybltTbih0Km8sbiphKSxKbihuJiZyKm8vbildfX12YXIgSDI9TSgoKT0+e2xyKCl9KTtmdW5jdGlvbiBnTHQoKXtyZXR1cm4gZW8oT0QpLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE4MC0uMDAxKX12YXIgT0QsX0x0PU0oKCk9PntscigpO0gyKCk7QXUoKTtPRD1ERChmdW5jdGlvbihlKXtyZXR1cm4gUnIoMi8oMStlKSl9KTtPRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqSm4oZS8yKX0pfSk7ZnVuY3Rpb24geUx0KCl7cmV0dXJuIGVvKHpEKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTgwLS4wMDEpfXZhciB6RCx2THQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO3pEPUREKGZ1bmN0aW9uKGUpe3JldHVybihlPSROKGUpKSYmZS9KdChlKX0pO3pELmludmVydD1zZihmdW5jdGlvbihlKXtyZXR1cm4gZX0pfSk7ZnVuY3Rpb24gcXkoZSx0KXtyZXR1cm5bZSxSeShDMigoQm4rdCkvMikpXX1mdW5jdGlvbiB4THQoKXtyZXR1cm4gZlEocXkpLnNjYWxlKDk2MS9CaSl9ZnVuY3Rpb24gZlEoZSl7dmFyIHQ9ZW8oZSkscj10LmNlbnRlcixuPXQuc2NhbGUsaT10LnRyYW5zbGF0ZSxvPXQuY2xpcEV4dGVudCxhPW51bGwscyxsLGM7dC5zY2FsZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obihoKSx1KCkpOm4oKX0sdC50cmFuc2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGkoaCksdSgpKTppKCl9LHQuY2VudGVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyKGgpLHUoKSk6cigpfSx0LmNsaXBFeHRlbnQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9PW51bGw/YT1zPWw9Yz1udWxsOihhPStoWzBdWzBdLHM9K2hbMF1bMV0sbD0raFsxXVswXSxjPStoWzFdWzFdKSx1KCkpOmE9PW51bGw/bnVsbDpbW2Esc10sW2wsY11dfTtmdW5jdGlvbiB1KCl7dmFyIGg9cnIqbigpLGY9dChzRCh0LnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gbyhhPT1udWxsP1tbZlswXS1oLGZbMV0taF0sW2ZbMF0raCxmWzFdK2hdXTplPT09cXk/W1tNYXRoLm1heChmWzBdLWgsYSksc10sW01hdGgubWluKGZbMF0raCxsKSxjXV06W1thLE1hdGgubWF4KGZbMV0taCxzKV0sW2wsTWF0aC5taW4oZlsxXStoLGMpXV0pfXJldHVybiB1KCl9dmFyIEZEPU0oKCk9PntscigpO05UKCk7QXUoKTtxeS5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZSwyKnljKGpOKHQpKS1Cbl19fSk7ZnVuY3Rpb24gQkQoZSl7cmV0dXJuIEMyKChCbitlKS8yKX1mdW5jdGlvbiBwUShlLHQpe3ZhciByPWFlKGUpLG49ZT09PXQ/SnQoZSk6Unkoci9hZSh0KSkvUnkoQkQodCkvQkQoZSkpLGk9cipYTihCRChlKSxuKS9uO2lmKCFuKXJldHVybiBxeTtmdW5jdGlvbiBvKGEscyl7aT4wP3M8LUJuK2NlJiYocz0tQm4rY2UpOnM+Qm4tY2UmJihzPUJuLWNlKTt2YXIgbD1pL1hOKEJEKHMpLG4pO3JldHVybltsKkp0KG4qYSksaS1sKmFlKG4qYSldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWRnKG4pKlJyKGEqYStsKmwpO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLDIqeWMoWE4oaS9jLDEvbikpLUJuXX0sb31mdW5jdGlvbiBiTHQoKXtyZXR1cm4gQjIocFEpLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9dmFyIHdMdD1NKCgpPT57bHIoKTtrRCgpO0ZEKCl9KTtmdW5jdGlvbiBHeShlLHQpe3JldHVybltlLHRdfWZ1bmN0aW9uIFNMdCgpe3JldHVybiBlbyhHeSkuc2NhbGUoMTUyLjYzKX12YXIgZFE9TSgoKT0+e0F1KCk7R3kuaW52ZXJ0PUd5fSk7ZnVuY3Rpb24gbVEoZSx0KXt2YXIgcj1hZShlKSxuPWU9PT10P0p0KGUpOihyLWFlKHQpKS8odC1lKSxpPXIvbitlO2lmKFllKG4pPGNlKXJldHVybiBHeTtmdW5jdGlvbiBvKGEscyl7dmFyIGw9aS1zLGM9biphO3JldHVybltsKkp0KGMpLGktbCphZShjKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKGEscyl7dmFyIGw9aS1zO3JldHVybltTbihhLFllKGwpKS9uKmRnKGwpLGktZGcobikqUnIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIE1MdCgpe3JldHVybiBCMihtUSkuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgRUx0PU0oKCk9PntscigpO2tEKCk7ZFEoKX0pO2Z1bmN0aW9uIEhEKGUsdCl7dmFyIHI9YWUodCksbj1hZShlKSpyO3JldHVybltyKkp0KGUpL24sSnQodCkvbl19ZnVuY3Rpb24gVEx0KCl7cmV0dXJuIGVvKEhEKS5zY2FsZSgxNDQuMDQ5KS5jbGlwQW5nbGUoNjApfXZhciBDTHQ9TSgoKT0+e2xyKCk7SDIoKTtBdSgpO0hELmludmVydD1zZih5Yyl9KTtmdW5jdGlvbiBWRChlLHQscixuKXtyZXR1cm4gZT09PTEmJnQ9PT0xJiZyPT09MCYmbj09PTA/bmY6dmcoe3BvaW50OmZ1bmN0aW9uKGksbyl7dGhpcy5zdHJlYW0ucG9pbnQoaSplK3Isbyp0K24pfX0pfWZ1bmN0aW9uIEFMdCgpe3ZhciBlPTEsdD0wLHI9MCxuPTEsaT0xLG89bmYsYT1udWxsLHMsbCxjLHU9bmYsaCxmLHA7ZnVuY3Rpb24gZCgpe3JldHVybiBoPWY9bnVsbCxwfXJldHVybiBwPXtzdHJlYW06ZnVuY3Rpb24oZyl7cmV0dXJuIGgmJmY9PT1nP2g6aD1vKHUoZj1nKSl9LHBvc3RjbGlwOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PWcsYT1zPWw9Yz1udWxsLGQoKSk6dX0sY2xpcEV4dGVudDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1nPT1udWxsPyhhPXM9bD1jPW51bGwsbmYpOlFwKGE9K2dbMF1bMF0scz0rZ1swXVsxXSxsPStnWzFdWzBdLGM9K2dbMV1bMV0pLGQoKSk6YT09bnVsbD9udWxsOltbYSxzXSxbbCxjXV19LHNjYWxlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVZEKChlPStnKSpuLGUqaSx0LHIpLGQoKSk6ZX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVZEKGUqbixlKmksdD0rZ1swXSxyPStnWzFdKSxkKCkpOlt0LHJdfSxyZWZsZWN0WDpmdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1WRChlKihuPWc/LTE6MSksZSppLHQsciksZCgpKTpuPDB9LHJlZmxlY3RZOmZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPVZEKGUqbixlKihpPWc/LTE6MSksdCxyKSxkKCkpOmk8MH0sZml0RXh0ZW50OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIFZ5KHAsZyxfKX0sZml0U2l6ZTpmdW5jdGlvbihnLF8pe3JldHVybiBPMihwLGcsXyl9LGZpdFdpZHRoOmZ1bmN0aW9uKGcsXyl7cmV0dXJuIHoyKHAsZyxfKX0sZml0SGVpZ2h0OmZ1bmN0aW9uKGcsXyl7cmV0dXJuIEYyKHAsZyxfKX19fXZhciBQTHQ9TSgoKT0+e0ZUKCk7U0QoKTtHVCgpO0xEKCl9KTtmdW5jdGlvbiBVRChlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBJTHQoKXtyZXR1cm4gZW8oVUQpLnNjYWxlKDE3NS4yOTUpfXZhciBMTHQ9TSgoKT0+e0F1KCk7bHIoKTtVRC5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoWWUoaSk+Y2UmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX19KTtmdW5jdGlvbiBxRChlLHQpe3JldHVyblthZSh0KSpKdChlKSxKdCh0KV19ZnVuY3Rpb24ga0x0KCl7cmV0dXJuIGVvKHFEKS5zY2FsZSgyNDkuNSkuY2xpcEFuZ2xlKDkwK2NlKX12YXIgUkx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtxRC5pbnZlcnQ9c2YoSm4pfSk7ZnVuY3Rpb24gR0QoZSx0KXt2YXIgcj1hZSh0KSxuPTErYWUoZSkqcjtyZXR1cm5bcipKdChlKS9uLEp0KHQpL25dfWZ1bmN0aW9uIE5MdCgpe3JldHVybiBlbyhHRCkuc2NhbGUoMjUwKS5jbGlwQW5nbGUoMTQyKX12YXIgREx0PU0oKCk9PntscigpO0gyKCk7QXUoKTtHRC5pbnZlcnQ9c2YoZnVuY3Rpb24oZSl7cmV0dXJuIDIqeWMoZSl9KX0pO2Z1bmN0aW9uIFdEKGUsdCl7cmV0dXJuW1J5KEMyKChCbit0KS8yKSksLWVdfWZ1bmN0aW9uIE9MdCgpe3ZhciBlPWZRKFdEKSx0PWUuY2VudGVyLHI9ZS5yb3RhdGU7cmV0dXJuIGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoWy1uWzFdLG5bMF1dKToobj10KCksW25bMV0sLW5bMF1dKX0sZS5yb3RhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cihbblswXSxuWzFdLG4ubGVuZ3RoPjI/blsyXSs5MDo5MF0pOihuPXIoKSxbblswXSxuWzFdLG5bMl0tOTBdKX0scihbMCwwLDkwXSkuc2NhbGUoMTU5LjE1NSl9dmFyIHpMdD1NKCgpPT57bHIoKTtGRCgpO1dELmludmVydD1mdW5jdGlvbihlLHQpe3JldHVyblstdCwyKnljKGpOKGUpKS1Cbl19fSk7dmFyIEZMdD1NKCgpPT57aEooKTtZSXQoKTtRSXQoKTt4SigpO0hKKCk7VkooKTtQOXQoKTtGVCgpO3o5dCgpO1lKKCk7Vjl0KCk7cTl0KCk7R0ooKTtsTHQoKTtoUSgpO21MdCgpO19MdCgpO3ZMdCgpO3dMdCgpO1JEKCk7RUx0KCk7ZFEoKTtDTHQoKTtQTHQoKTtBdSgpO0ZEKCk7TEx0KCk7Ukx0KCk7REx0KCk7ekx0KCk7TlQoKTttZygpO0dUKCl9KTtmdW5jdGlvbiBUUGUoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gQ1BlKGUpe3JldHVybiBlLnJlZHVjZShBUGUsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gQVBlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIFBQZShlKXtyZXR1cm4gMStlLnJlZHVjZShJUGUsMCl9ZnVuY3Rpb24gSVBlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBMUGUoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIGtQZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gQkx0KCl7dmFyIGU9VFBlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1DUGUocCksZi55PVBQZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1MUGUobyksYz1rUGUobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9dmFyIEhMdD1NKCgpPT57fSk7ZnVuY3Rpb24gUlBlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFZMdCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihSUGUpfXZhciBVTHQ9TSgoKT0+e30pO2Z1bmN0aW9uIHFMdChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc312YXIgR0x0PU0oKCk9Pnt9KTtmdW5jdGlvbiBXTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc312YXIgWUx0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqTHQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9dmFyIFhMdD1NKCgpPT57fSk7ZnVuY3Rpb24gJEx0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9dmFyIEtMdD1NKCgpPT57fSk7ZnVuY3Rpb24gWkx0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9dmFyIEpMdD1NKCgpPT57fSk7ZnVuY3Rpb24gUUx0KGUpe2Zvcih2YXIgdD10aGlzLHI9TlBlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gTlBlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX12YXIgdGt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBla3QoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9dmFyIHJrdD1NKCgpPT57fSk7ZnVuY3Rpb24gbmt0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfXZhciBpa3Q9TSgoKT0+e30pO2Z1bmN0aW9uIG9rdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX12YXIgYWt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBza3QoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9dmFyIGxrdD1NKCgpPT57fSk7ZnVuY3Rpb24gWVQoZSx0KXt2YXIgcj1uZXcgeGcoZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1PUGUpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyB4ZyhzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKGdRKX1mdW5jdGlvbiBEUGUoKXtyZXR1cm4gWVQodGhpcykuZWFjaEJlZm9yZSh6UGUpfWZ1bmN0aW9uIE9QZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiB6UGUoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIGdRKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24geGcoZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9dmFyIFlEPU0oKCk9PntVTHQoKTtHTHQoKTtZTHQoKTtYTHQoKTtLTHQoKTtKTHQoKTt0a3QoKTtya3QoKTtpa3QoKTtha3QoKTtsa3QoKTt4Zy5wcm90b3R5cGU9WVQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp4Zyxjb3VudDpWTHQsZWFjaDpxTHQsZWFjaEFmdGVyOmpMdCxlYWNoQmVmb3JlOldMdCxzdW06JEx0LHNvcnQ6Wkx0LHBhdGg6UUx0LGFuY2VzdG9yczpla3QsZGVzY2VuZGFudHM6bmt0LGxlYXZlczpva3QsbGlua3M6c2t0LGNvcHk6RFBlfX0pO2Z1bmN0aW9uIHVrdChlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscixuO3Q7KW49TWF0aC5yYW5kb20oKSp0LS18MCxyPWVbdF0sZVt0XT1lW25dLGVbbl09cjtyZXR1cm4gZX12YXIgY2t0LGhrdD1NKCgpPT57Y2t0PUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIFhEKGUpe2Zvcih2YXIgdD0wLHI9KGU9dWt0KGNrdC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJmZrdChvLGkpPysrdDoobz1CUGUobj1GUGUobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBGUGUoZSx0KXt2YXIgcixuO2lmKF9RKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoakQodCxlW3JdKSYmX1EoalQoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKGpEKGpUKGVbcl0sZVtuXSksdCkmJmpEKGpUKGVbcl0sdCksZVtuXSkmJmpEKGpUKGVbbl0sdCksZVtyXSkmJl9RKHBrdChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gakQoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gZmt0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gX1EoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighZmt0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQlBlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBIUGUoZVswXSk7Y2FzZSAyOnJldHVybiBqVChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gcGt0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gSFBlKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24galQoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIHBrdChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fXZhciB5UT1NKCgpPT57aGt0KCl9KTtmdW5jdGlvbiBka3QoZSx0LHIpe3ZhciBuPWUueCxpPWUueSxvPXQucityLnIsYT1lLnIrci5yLHM9dC54LW4sbD10LnktaSxjPXMqcytsKmw7aWYoYyl7dmFyIHU9LjUrKChhKj1hKS0obyo9bykpLygyKmMpLGg9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMipvKihhK2MpLShhLT1jKSphLW8qbykpLygyKmMpO3IueD1uK3UqcytoKmwsci55PWkrdSpsLWgqc31lbHNlIHIueD1uK2Esci55PWl9ZnVuY3Rpb24gbWt0KGUsdCl7dmFyIHI9dC54LWUueCxuPXQueS1lLnksaT1lLnIrdC5yO3JldHVybiBpKmktMWUtNj5yKnIrbipufWZ1bmN0aW9uIGdrdChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiAkRChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gdlEoZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7ZGt0KHIsdCxuPWVbMl0pLHQ9bmV3ICREKHQpLHI9bmV3ICREKHIpLG49bmV3ICREKG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtka3QodC5fLHIuXyxuPWVbc10pLG49bmV3ICREKG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYobWt0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYobWt0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWdrdCh0KTsobj1uLm5leHQpIT09cjspKGE9Z2t0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj1YRCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiBfa3QoZSl7cmV0dXJuIHZRKGUpLGV9dmFyIHhRPU0oKCk9Pnt5USgpfSk7ZnVuY3Rpb24geWt0KGUpe3JldHVybiBlPT1udWxsP251bGw6VjIoZSl9ZnVuY3Rpb24gVjIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfXZhciBLRD1NKCgpPT57fSk7ZnVuY3Rpb24gdGQoKXtyZXR1cm4gMH1mdW5jdGlvbiBiZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIGJRPU0oKCk9Pnt9KTtmdW5jdGlvbiBWUGUoZSl7cmV0dXJuIE1hdGguc3FydChlLnZhbHVlKX1mdW5jdGlvbiBia3QoKXt2YXIgZT1udWxsLHQ9MSxyPTEsbj10ZDtmdW5jdGlvbiBpKG8pe3JldHVybiBvLng9dC8yLG8ueT1yLzIsZT9vLmVhY2hCZWZvcmUodmt0KGUpKS5lYWNoQWZ0ZXIod1EobiwuNSkpLmVhY2hCZWZvcmUoeGt0KDEpKTpvLmVhY2hCZWZvcmUodmt0KFZQZSkpLmVhY2hBZnRlcih3USh0ZCwxKSkuZWFjaEFmdGVyKHdRKG4sby5yL01hdGgubWluKHQscikpKS5lYWNoQmVmb3JlKHhrdChNYXRoLm1pbih0LHIpLygyKm8ucikpKSxvfXJldHVybiBpLnJhZGl1cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT15a3QobyksaSk6ZX0saS5zaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStvWzBdLHI9K29bMV0saSk6W3Qscl19LGkucGFkZGluZz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOmJnKCtvKSxpKTpufSxpfWZ1bmN0aW9uIHZrdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8KHQucj1NYXRoLm1heCgwLCtlKHQpfHwwKSl9fWZ1bmN0aW9uIHdRKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKG49ci5jaGlsZHJlbil7dmFyIG4saSxvPW4ubGVuZ3RoLGE9ZShyKSp0fHwwLHM7aWYoYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yKz1hO2lmKHM9dlEobiksYSlmb3IoaT0wO2k8bzsrK2kpbltpXS5yLT1hO3Iucj1zK2F9fX1mdW5jdGlvbiB4a3QoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQucGFyZW50O3Qucio9ZSxyJiYodC54PXIueCtlKnQueCx0Lnk9ci55K2UqdC55KX19dmFyIHdrdD1NKCgpPT57eFEoKTtLRCgpO2JRKCl9KTtmdW5jdGlvbiBaRChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9dmFyIFNRPU0oKCk9Pnt9KTtmdW5jdGlvbiBsZihlLHQscixuLGkpe2Zvcih2YXIgbz1lLmNoaWxkcmVuLGEscz0tMSxsPW8ubGVuZ3RoLGM9ZS52YWx1ZSYmKG4tdCkvZS52YWx1ZTsrK3M8bDspYT1vW3NdLGEueTA9cixhLnkxPWksYS54MD10LGEueDE9dCs9YS52YWx1ZSpjfXZhciBVMj1NKCgpPT57fSk7ZnVuY3Rpb24gU2t0KCl7dmFyIGU9MSx0PTEscj0wLG49ITE7ZnVuY3Rpb24gaShhKXt2YXIgcz1hLmhlaWdodCsxO3JldHVybiBhLngwPWEueTA9cixhLngxPWUsYS55MT10L3MsYS5lYWNoQmVmb3JlKG8odCxzKSksbiYmYS5lYWNoQmVmb3JlKFpEKSxhfWZ1bmN0aW9uIG8oYSxzKXtyZXR1cm4gZnVuY3Rpb24obCl7bC5jaGlsZHJlbiYmbGYobCxsLngwLGEqKGwuZGVwdGgrMSkvcyxsLngxLGEqKGwuZGVwdGgrMikvcyk7dmFyIGM9bC54MCx1PWwueTAsaD1sLngxLXIsZj1sLnkxLXI7aDxjJiYoYz1oPShjK2gpLzIpLGY8dSYmKHU9Zj0odStmKS8yKSxsLngwPWMsbC55MD11LGwueDE9aCxsLnkxPWZ9fXJldHVybiBpLnJvdW5kPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEhYSxpKTpufSxpLnNpemU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2FbMF0sdD0rYVsxXSxpKTpbZSx0XX0saS5wYWRkaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLGkpOnJ9LGl9dmFyIE1rdD1NKCgpPT57U1EoKTtVMigpfSk7ZnVuY3Rpb24gcVBlKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIEdQZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBDa3QoKXt2YXIgZT1xUGUsdD1HUGU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IHhnKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9RWt0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP1RrdDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtFa3QraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1Ua3QpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1VUGUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKGdRKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1WMihuKSxyKTp0fSxyfXZhciBFa3QsVVBlLFRrdCxBa3Q9TSgoKT0+e0tEKCk7WUQoKTtFa3Q9IiQiLFVQZT17ZGVwdGg6LTF9LFRrdD17fX0pO2Z1bmN0aW9uIFdQZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBNUShlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIEVRKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gWVBlKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIGpQZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBYUGUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gSkQoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1mdW5jdGlvbiAkUGUoZSl7Zm9yKHZhciB0PW5ldyBKRChlLDApLHIsbj1bdF0saSxvLGEscztyPW4ucG9wKCk7KWlmKG89ci5fLmNoaWxkcmVuKWZvcihyLmNoaWxkcmVuPW5ldyBBcnJheShzPW8ubGVuZ3RoKSxhPXMtMTthPj0wOy0tYSluLnB1c2goaT1yLmNoaWxkcmVuW2FdPW5ldyBKRChvW2FdLGEpKSxpLnBhcmVudD1yO3JldHVybih0LnBhcmVudD1uZXcgSkQobnVsbCwwKSkuY2hpbGRyZW49W3RdLHR9ZnVuY3Rpb24gUGt0KCl7dmFyIGU9V1BlLHQ9MSxyPTEsbj1udWxsO2Z1bmN0aW9uIGkoYyl7dmFyIHU9JFBlKGMpO2lmKHUuZWFjaEFmdGVyKG8pLHUucGFyZW50Lm09LXUueix1LmVhY2hCZWZvcmUoYSksbiljLmVhY2hCZWZvcmUobCk7ZWxzZXt2YXIgaD1jLGY9YyxwPWM7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueDxoLngmJihoPXgpLHgueD5mLngmJihmPXgpLHguZGVwdGg+cC5kZXB0aCYmKHA9eCl9KTt2YXIgZD1oPT09Zj8xOmUoaCxmKS8yLGc9ZC1oLngsXz10LyhmLngrZCtnKSx5PXIvKHAuZGVwdGh8fDEpO2MuZWFjaEJlZm9yZShmdW5jdGlvbih4KXt4Lng9KHgueCtnKSpfLHgueT14LmRlcHRoKnl9KX1yZXR1cm4gY31mdW5jdGlvbiBvKGMpe3ZhciB1PWMuY2hpbGRyZW4saD1jLnBhcmVudC5jaGlsZHJlbixmPWMuaT9oW2MuaS0xXTpudWxsO2lmKHUpe2pQZShjKTt2YXIgcD0odVswXS56K3VbdS5sZW5ndGgtMV0ueikvMjtmPyhjLno9Zi56K2UoYy5fLGYuXyksYy5tPWMuei1wKTpjLno9cH1lbHNlIGYmJihjLno9Zi56K2UoYy5fLGYuXykpO2MucGFyZW50LkE9cyhjLGYsYy5wYXJlbnQuQXx8aFswXSl9ZnVuY3Rpb24gYShjKXtjLl8ueD1jLnorYy5wYXJlbnQubSxjLm0rPWMucGFyZW50Lm19ZnVuY3Rpb24gcyhjLHUsaCl7aWYodSl7Zm9yKHZhciBmPWMscD1jLGQ9dSxnPWYucGFyZW50LmNoaWxkcmVuWzBdLF89Zi5tLHk9cC5tLHg9ZC5tLGI9Zy5tLFM7ZD1FUShkKSxmPU1RKGYpLGQmJmY7KWc9TVEoZykscD1FUShwKSxwLmE9YyxTPWQueit4LWYuei1fK2UoZC5fLGYuXyksUz4wJiYoWVBlKFhQZShkLGMsaCksYyxTKSxfKz1TLHkrPVMpLHgrPWQubSxfKz1mLm0sYis9Zy5tLHkrPXAubTtkJiYhRVEocCkmJihwLnQ9ZCxwLm0rPXgteSksZiYmIU1RKGcpJiYoZy50PWYsZy5tKz1fLWIsaD1jKX1yZXR1cm4gaH1mdW5jdGlvbiBsKGMpe2MueCo9dCxjLnk9Yy5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9YyxpKTplfSxpLnNpemU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsdD0rY1swXSxyPStjWzFdLGkpOm4/bnVsbDpbdCxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCx0PStjWzBdLHI9K2NbMV0saSk6bj9bdCxyXTpudWxsfSxpfXZhciBJa3Q9TSgoKT0+e1lEKCk7SkQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeGcucHJvdG90eXBlKX0pO2Z1bmN0aW9uIHdnKGUsdCxyLG4saSl7Zm9yKHZhciBvPWUuY2hpbGRyZW4sYSxzPS0xLGw9by5sZW5ndGgsYz1lLnZhbHVlJiYoaS1yKS9lLnZhbHVlOysrczxsOylhPW9bc10sYS54MD10LGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9dmFyIFhUPU0oKCk9Pnt9KTtmdW5jdGlvbiBDUShlLHQscixuLGksbyl7Zm9yKHZhciBhPVtdLHM9dC5jaGlsZHJlbixsLGMsdT0wLGg9MCxmPXMubGVuZ3RoLHAsZCxnPXQudmFsdWUsXyx5LHgsYixTLEMsUDt1PGY7KXtwPWktcixkPW8tbjtkbyBfPXNbaCsrXS52YWx1ZTt3aGlsZSghXyYmaDxmKTtmb3IoeT14PV8sQz1NYXRoLm1heChkL3AscC9kKS8oZyplKSxQPV8qXypDLFM9TWF0aC5tYXgoeC9QLFAveSk7aDxmOysraCl7aWYoXys9Yz1zW2hdLnZhbHVlLGM8eSYmKHk9YyksYz54JiYoeD1jKSxQPV8qXypDLGI9TWF0aC5tYXgoeC9QLFAveSksYj5TKXtfLT1jO2JyZWFrfVM9Yn1hLnB1c2gobD17dmFsdWU6XyxkaWNlOnA8ZCxjaGlsZHJlbjpzLnNsaWNlKHUsaCl9KSxsLmRpY2U/bGYobCxyLG4saSxnP24rPWQqXy9nOm8pOndnKGwscixuLGc/cis9cCpfL2c6aSxvKSxnLT1fLHU9aH1yZXR1cm4gYX12YXIgVFEsUUQsdE89TSgoKT0+e1UyKCk7WFQoKTtUUT0oMStNYXRoLnNxcnQoNSkpLzI7UUQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7Q1EodCxuLGksbyxhLHMpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KFRRKX0pO2Z1bmN0aW9uIExrdCgpe3ZhciBlPVFELHQ9ITEscj0xLG49MSxpPVswXSxvPXRkLGE9dGQscz10ZCxsPXRkLGM9dGQ7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKFpEKSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VjIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpiZygrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOmJnKCtmKSx1KTpjfSx1fXZhciBra3Q9TSgoKT0+e1NRKCk7dE8oKTtLRCgpO2JRKCl9KTtmdW5jdGlvbiBSa3QoZSx0LHIsbixpKXt2YXIgbz1lLmNoaWxkcmVuLGEscz1vLmxlbmd0aCxsLGM9bmV3IEFycmF5KHMrMSk7Zm9yKGNbMF09bD1hPTA7YTxzOysrYSljW2ErMV09bCs9b1thXS52YWx1ZTt1KDAscyxlLnZhbHVlLHQscixuLGkpO2Z1bmN0aW9uIHUoaCxmLHAsZCxnLF8seSl7aWYoaD49Zi0xKXt2YXIgeD1vW2hdO3gueDA9ZCx4LnkwPWcseC54MT1fLHgueTE9eTtyZXR1cm59Zm9yKHZhciBiPWNbaF0sUz1wLzIrYixDPWgrMSxQPWYtMTtDPFA7KXt2YXIgaz1DK1A+Pj4xO2Nba108Uz9DPWsrMTpQPWt9Uy1jW0MtMV08Y1tDXS1TJiZoKzE8QyYmLS1DO3ZhciBPPWNbQ10tYixEPXAtTztpZihfLWQ+eS1nKXt2YXIgQj0oZCpEK18qTykvcDt1KGgsQyxPLGQsZyxCLHkpLHUoQyxmLEQsQixnLF8seSl9ZWxzZXt2YXIgST0oZypEK3kqTykvcDt1KGgsQyxPLGQsZyxfLEkpLHUoQyxmLEQsZCxJLF8seSl9fX12YXIgTmt0PU0oKCk9Pnt9KTtmdW5jdGlvbiBEa3QoZSx0LHIsbixpKXsoZS5kZXB0aCYxP3dnOmxmKShlLHQscixuLGkpfXZhciBPa3Q9TSgoKT0+e1UyKCk7WFQoKX0pO3ZhciB6a3QsRmt0PU0oKCk9PntVMigpO1hUKCk7dE8oKTt6a3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSxvLGEscyl7aWYoKGw9bi5fc3F1YXJpZnkpJiZsLnJhdGlvPT09dClmb3IodmFyIGwsYyx1LGgsZj0tMSxwLGQ9bC5sZW5ndGgsZz1uLnZhbHVlOysrZjxkOyl7Zm9yKGM9bFtmXSx1PWMuY2hpbGRyZW4saD1jLnZhbHVlPTAscD11Lmxlbmd0aDtoPHA7KytoKWMudmFsdWUrPXVbaF0udmFsdWU7Yy5kaWNlP2xmKGMsaSxvLGEsbys9KHMtbykqYy52YWx1ZS9nKTp3ZyhjLGksbyxpKz0oYS1pKSpjLnZhbHVlL2cscyksZy09Yy52YWx1ZX1lbHNlIG4uX3NxdWFyaWZ5PWw9Q1EodCxuLGksbyxhLHMpLGwucmF0aW89dH1yZXR1cm4gci5yYXRpbz1mdW5jdGlvbihuKXtyZXR1cm4gZSgobj0rbik+MT9uOjEpfSxyfShUUSl9KTt2YXIgQmt0PU0oKCk9PntITHQoKTtZRCgpO3drdCgpO3hRKCk7eVEoKTtNa3QoKTtBa3QoKTtJa3QoKTtra3QoKTtOa3QoKTtVMigpO1hUKCk7T2t0KCk7dE8oKTtGa3QoKX0pO2Z1bmN0aW9uIGVkKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBTZyhlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgZU89TSgoKT0+e30pO2Z1bmN0aW9uIGhmKCl7fWZ1bmN0aW9uIFZrdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIG42ZSgpe3JldHVybiBqa3QodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gVWt0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gRWcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9S1BlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/cWt0KHQpOnI9PT0zP25ldyBybyh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/ck8odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/ck8odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1aUGUuZXhlYyhlKSk/bmV3IHJvKHRbMV0sdFsyXSx0WzNdLDEpOih0PUpQZS5leGVjKGUpKT9uZXcgcm8odFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9UVBlLmV4ZWMoZSkpP3JPKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PXQ2ZS5leGVjKGUpKT9yTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1lNmUuZXhlYyhlKSk/WWt0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9cjZlLmV4ZWMoZSkpP1lrdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOkhrdC5oYXNPd25Qcm9wZXJ0eShlKT9xa3QoSGt0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgcm8oTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBxa3QoZSl7cmV0dXJuIG5ldyBybyhlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gck8oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBybyhlLHQscixuKX1mdW5jdGlvbiBLVChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksZT8oZT1lLnJnYigpLG5ldyBybyhlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgcm99ZnVuY3Rpb24gRzIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0tUKGUpOm5ldyBybyhlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcm8oZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEdrdCgpe3JldHVybiIjIitBUSh0aGlzLnIpK0FRKHRoaXMuZykrQVEodGhpcy5iKX1mdW5jdGlvbiBXa3QoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gQVEoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gWWt0KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgY2YoZSx0LHIsbil9ZnVuY3Rpb24gamt0KGUpe2lmKGUgaW5zdGFuY2VvZiBjZilyZXR1cm4gbmV3IGNmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGhmfHwoZT1FZyhlKSksIWUpcmV0dXJuIG5ldyBjZjtpZihlIGluc3RhbmNlb2YgY2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgY2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/amt0KGUpOm5ldyBjZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gY2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIFBRKGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBNZyxXeSxxMiwkVCx1ZixLUGUsWlBlLEpQZSxRUGUsdDZlLGU2ZSxyNmUsSGt0LG5PPU0oKCk9PntlTygpO01nPS43LFd5PTEvTWcscTI9IlxccyooWystXT9cXGQrKVxccyoiLCRUPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLHVmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixLUGU9L14jKFswLTlhLWZdezMsOH0pJC8sWlBlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1txMixxMixxMl0rIlxcKSQiKSxKUGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW3VmLHVmLHVmXSsiXFwpJCIpLFFQZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3EyLHEyLHEyLCRUXSsiXFwpJCIpLHQ2ZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW3VmLHVmLHVmLCRUXSsiXFwpJCIpLGU2ZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbJFQsdWYsdWZdKyJcXCkkIikscjZlPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbJFQsdWYsdWYsJFRdKyJcXCkkIiksSGt0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2VkKGhmLEVnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OlZrdCxmb3JtYXRIZXg6Vmt0LGZvcm1hdEhzbDpuNmUsZm9ybWF0UmdiOlVrdCx0b1N0cmluZzpVa3R9KTtlZChybyxHMixTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9XeTpNYXRoLnBvdyhXeSxlKSxuZXcgcm8odGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IHJvKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6R2t0LGZvcm1hdEhleDpHa3QsZm9ybWF0UmdiOldrdCx0b1N0cmluZzpXa3R9KSk7ZWQoY2YsWlQsU2coaGYse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/V3k6TWF0aC5wb3coV3ksZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/TWc6TWF0aC5wb3coTWcsZSksbmV3IGNmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgcm8oUFEoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksUFEoZSxpLG4pLFBRKGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIGlPLG9PLElRPU0oKCk9PntpTz1NYXRoLlBJLzE4MCxvTz0xODAvTWF0aC5QSX0pO2Z1bmN0aW9uIFFrdChlKXtpZihlIGluc3RhbmNlb2YgZmYpcmV0dXJuIG5ldyBmZihlLmwsZS5hLGUuYixlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiByZClyZXR1cm4gdDh0KGUpO2UgaW5zdGFuY2VvZiByb3x8KGU9S1QoZSkpO3ZhciB0PU5RKGUucikscj1OUShlLmcpLG49TlEoZS5iKSxpPUxRKCguMjIyNTA0NSp0Ky43MTY4Nzg2KnIrLjA2MDYxNjkqbikvJGt0KSxvLGE7cmV0dXJuIHQ9PT1yJiZyPT09bj9vPWE9aToobz1MUSgoLjQzNjA3NDcqdCsuMzg1MDY0OSpyKy4xNDMwODA0Km4pL1hrdCksYT1MUSgoLjAxMzkzMjIqdCsuMDk3MTA0NSpyKy43MTQxNzMzKm4pL0trdCkpLG5ldyBmZigxMTYqaS0xNiw1MDAqKG8taSksMjAwKihpLWEpLGUub3BhY2l0eSl9ZnVuY3Rpb24gWTIoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP1FrdChlKTpuZXcgZmYoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGZmKGUsdCxyLG4pe3RoaXMubD0rZSx0aGlzLmE9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBMUShlKXtyZXR1cm4gZT5pNmU/TWF0aC5wb3coZSwxLzMpOmUvSmt0K1prdH1mdW5jdGlvbiBrUShlKXtyZXR1cm4gZT5XMj9lKmUqZTpKa3QqKGUtWmt0KX1mdW5jdGlvbiBSUShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIE5RKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIG82ZShlKXtpZihlIGluc3RhbmNlb2YgcmQpcmV0dXJuIG5ldyByZChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBmZnx8KGU9UWt0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgcmQoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqb087cmV0dXJuIG5ldyByZCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiBKVChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/bzZlKGUpOm5ldyByZChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gcmQoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMuYz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIHQ4dChlKXtpZihpc05hTihlLmgpKXJldHVybiBuZXcgZmYoZS5sLDAsMCxlLm9wYWNpdHkpO3ZhciB0PWUuaCppTztyZXR1cm4gbmV3IGZmKGUubCxNYXRoLmNvcyh0KSplLmMsTWF0aC5zaW4odCkqZS5jLGUub3BhY2l0eSl9dmFyIGFPLFhrdCwka3QsS2t0LFprdCxXMixKa3QsaTZlLGU4dD1NKCgpPT57ZU8oKTtuTygpO0lRKCk7YU89MTgsWGt0PS45NjQyMiwka3Q9MSxLa3Q9LjgyNTIxLFprdD00LzI5LFcyPTYvMjksSmt0PTMqVzIqVzIsaTZlPVcyKlcyKlcyO2VkKGZmLFkyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGZmKHRoaXMubCthTyooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgZmYodGhpcy5sLWFPKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1Ya3Qqa1EodCksZT0ka3Qqa1EoZSkscj1La3Qqa1EociksbmV3IHJvKFJRKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLFJRKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksUlEoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtlZChyZCxKVCxTZyhoZix7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyByZCh0aGlzLmgsdGhpcy5jLHRoaXMubCthTyooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHJkKHRoaXMuaCx0aGlzLmMsdGhpcy5sLWFPKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHQ4dCh0aGlzKS5yZ2IoKX19KSl9KTtmdW5jdGlvbiBhNmUoZSl7aWYoZSBpbnN0YW5jZW9mIFl5KXJldHVybiBuZXcgWXkoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2Ygcm98fChlPUtUKGUpKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT0oaTh0Km4rcjh0KnQtbjh0KnIpLyhpOHQrcjh0LW44dCksbz1uLWksYT0oUVQqKHItaSktT1Eqbykvc08scz1NYXRoLnNxcnQoYSphK28qbykvKFFUKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKGEsbykqb08tMTIwOk5hTjtyZXR1cm4gbmV3IFl5KGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uIGoyKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9hNmUoZSk6bmV3IFl5KGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBZeShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIG84dCxEUSxPUSxzTyxRVCxyOHQsbjh0LGk4dCxhOHQ9TSgoKT0+e2VPKCk7bk8oKTtJUSgpO284dD0tLjE0ODYxLERRPTEuNzgyNzcsT1E9LS4yOTIyNyxzTz0tLjkwNjQ5LFFUPTEuOTcyOTQscjh0PVFUKnNPLG44dD1RVCpEUSxpOHQ9RFEqT1Etc08qbzh0O2VkKFl5LGoyLFNnKGhmLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP1d5Ok1hdGgucG93KFd5LGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP01nOk1hdGgucG93KE1nLGUpLG5ldyBZeSh0aGlzLmgsdGhpcy5zLHRoaXMubCplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciBlPWlzTmFOKHRoaXMuaCk/MDoodGhpcy5oKzEyMCkqaU8sdD0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyp0KigxLXQpLG49TWF0aC5jb3MoZSksaT1NYXRoLnNpbihlKTtyZXR1cm4gbmV3IHJvKDI1NSoodCtyKihvOHQqbitEUSppKSksMjU1Kih0K3IqKE9RKm4rc08qaSkpLDI1NSoodCtyKihRVCpuKSksdGhpcy5vcGFjaXR5KX19KSl9KTt2YXIgank9TSgoKT0+e25PKCk7ZTh0KCk7YTh0KCl9KTtmdW5jdGlvbiB6UShlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGxPKGUpe3ZhciB0PWUubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXI8PTA/cj0wOnI+PTE/KHI9MSx0LTEpOk1hdGguZmxvb3Iocip0KSxpPWVbbl0sbz1lW24rMV0sYT1uPjA/ZVtuLTFdOjIqaS1vLHM9bjx0LTE/ZVtuKzJdOjIqby1pO3JldHVybiB6USgoci1uL3QpKnQsYSxpLG8scyl9fXZhciBjTz1NKCgpPT57fSk7ZnVuY3Rpb24gdU8oZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiB6USgoci1uL3QpKnQsaSxvLGEscyl9fXZhciBGUT1NKCgpPT57Y08oKX0pO2Z1bmN0aW9uIFgyKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgQlE9TSgoKT0+e30pO2Z1bmN0aW9uIHM4dChlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHM2ZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uICQyKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP3M4dChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6WDIoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBsOHQoZSl7cmV0dXJuKGU9K2UpPT0xP1FuOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9zNmUodCxyLGUpOlgyKGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIFFuKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP3M4dChlLHIpOlgyKGlzTmFOKGUpP3Q6ZSl9dmFyIEsyPU0oKCk9PntCUSgpfSk7ZnVuY3Rpb24gYzh0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9RzIodFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHRDLHU4dCxoOHQsSFE9TSgoKT0+e2p5KCk7Y08oKTtGUSgpO0syKCk7dEM9ZnVuY3Rpb24gZSh0KXt2YXIgcj1sOHQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9RzIoaSkpLnIsKG89RzIobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1RbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7dTh0PWM4dChsTyksaDh0PWM4dCh1Tyl9KTtmdW5jdGlvbiBoTyhlLHQpe3ZhciByPXQ/dC5sZW5ndGg6MCxuPWU/TWF0aC5taW4ocixlLmxlbmd0aCk6MCxpPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShyKSxhO2ZvcihhPTA7YTxuOysrYSlpW2FdPVoyKGVbYV0sdFthXSk7Zm9yKDthPHI7KythKW9bYV09dFthXTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKGE9MDthPG47KythKW9bYV09aVthXShzKTtyZXR1cm4gb319dmFyIFZRPU0oKCk9PntmTygpfSk7ZnVuY3Rpb24gcE8oZSx0KXt2YXIgcj1uZXcgRGF0ZTtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKG4pe3JldHVybiByLnNldFRpbWUoZSt0Km4pLHJ9fXZhciBVUT1NKCgpPT57fSk7ZnVuY3Rpb24gQXMoZSx0KXtyZXR1cm4gZT0rZSx0LT1lLGZ1bmN0aW9uKHIpe3JldHVybiBlK3Qqcn19dmFyIGVDPU0oKCk9Pnt9KTtmdW5jdGlvbiBkTyhlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPVoyKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIHFRPU0oKCk9PntmTygpfSk7ZnVuY3Rpb24gbDZlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBjNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBtTyhlLHQpe3ZhciByPVdRLmxhc3RJbmRleD1HUS5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1XUS5leGVjKGUpKSYmKGk9R1EuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OkFzKG4saSl9KSkscj1HUS5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/YzZlKGxbMF0ueCk6bDZlKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBXUSxHUSxZUT1NKCgpPT57ZUMoKTtXUT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csR1E9bmV3IFJlZ0V4cChXUS5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIFoyKGUsdCl7dmFyIHI9dHlwZW9mIHQsbjtyZXR1cm4gdD09bnVsbHx8cj09PSJib29sZWFuIj9YMih0KToocj09PSJudW1iZXIiP0FzOnI9PT0ic3RyaW5nIj8obj1FZyh0KSk/KHQ9bix0Qyk6bU86dCBpbnN0YW5jZW9mIEVnP3RDOnQgaW5zdGFuY2VvZiBEYXRlP3BPOkFycmF5LmlzQXJyYXkodCk/aE86dHlwZW9mIHQudmFsdWVPZiE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmchPSJmdW5jdGlvbiJ8fGlzTmFOKHQpP2RPOkFzKShlLHQpfXZhciBmTz1NKCgpPT57ankoKTtIUSgpO1ZRKCk7VVEoKTtlQygpO3FRKCk7WVEoKTtCUSgpfSk7ZnVuY3Rpb24gZjh0KGUsdCl7cmV0dXJuIGU9K2UsdC09ZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlK3Qqcil9fXZhciBwOHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGpRKGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKmQ4dCxza2V3WDpNYXRoLmF0YW4obCkqZDh0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgZDh0LGdPLG04dD1NKCgpPT57ZDh0PTE4MC9NYXRoLlBJLGdPPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gXzh0KGUpe3JldHVybiBlPT09Im5vbmUiP2dPOihyQ3x8KHJDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLFhRPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxnOHQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLHJDLnN0eWxlLnRyYW5zZm9ybT1lLGU9Zzh0LmdldENvbXB1dGVkU3R5bGUoWFEuYXBwZW5kQ2hpbGQockMpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLFhRLnJlbW92ZUNoaWxkKHJDKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxqUSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIHk4dChlKXtyZXR1cm4gZT09bnVsbD9nTzooX098fChfTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxfTy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9X08udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsalEoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpnTyl9dmFyIHJDLFhRLGc4dCxfTyx2OHQ9TSgoKT0+e204dCgpfSk7ZnVuY3Rpb24geDh0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6QXMoYyxoKX0se2k6Zy0yLHg6QXModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpBcyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OkFzKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpBcyhjLGgpfSx7aTpnLTIseDpBcyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBiOHQsdzh0LFM4dD1NKCgpPT57ZUMoKTt2OHQoKTtiOHQ9eDh0KF84dCwicHgsICIsInB4KSIsImRlZykiKSx3OHQ9eDh0KHk4dCwiLCAiLCIpIiwiKSIpfSk7ZnVuY3Rpb24gRTh0KGUpe3JldHVybigoZT1NYXRoLmV4cChlKSkrMS9lKS8yfWZ1bmN0aW9uIGg2ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpLTEvZSkvMn1mdW5jdGlvbiBmNmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpfWZ1bmN0aW9uIFQ4dChlLHQpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxvPXRbMF0sYT10WzFdLHM9dFsyXSxsPW8tcixjPWEtbix1PWwqbCtjKmMsaCxmO2lmKHU8dTZlKWY9TWF0aC5sb2cocy9pKS9uQyxoPWZ1bmN0aW9uKHgpe3JldHVybltyK3gqbCxuK3gqYyxpKk1hdGguZXhwKG5DKngqZildfTtlbHNle3ZhciBwPU1hdGguc3FydCh1KSxkPShzKnMtaSppK004dCp1KS8oMippKiRRKnApLGc9KHMqcy1pKmktTTh0KnUpLygyKnMqJFEqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL25DLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9RTh0KF8pLEM9aS8oJFEqcCkqKFMqZjZlKG5DKmIrXyktaDZlKF8pKTtyZXR1cm5bcitDKmwsbitDKmMsaSpTL0U4dChuQypiK18pXX19cmV0dXJuIGguZHVyYXRpb249ZioxZTMsaH12YXIgbkMsJFEsTTh0LHU2ZSxDOHQ9TSgoKT0+e25DPU1hdGguU1FSVDIsJFE9MixNOHQ9NCx1NmU9MWUtMTJ9KTtmdW5jdGlvbiBBOHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSgodD1aVCh0KSkuaCwocj1aVChyKSkuaCksaT1Rbih0LnMsci5zKSxvPVFuKHQubCxyLmwpLGE9UW4odC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiB0Lmg9bihzKSx0LnM9aShzKSx0Lmw9byhzKSx0Lm9wYWNpdHk9YShzKSx0KyIifX19dmFyIFA4dCxJOHQsTDh0PU0oKCk9PntqeSgpO0syKCk7UDh0PUE4dCgkMiksSTh0PUE4dChRbil9KTtmdW5jdGlvbiBLUShlLHQpe3ZhciByPVFuKChlPVkyKGUpKS5sLCh0PVkyKHQpKS5sKSxuPVFuKGUuYSx0LmEpLGk9UW4oZS5iLHQuYiksbz1RbihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fXZhciBrOHQ9TSgoKT0+e2p5KCk7SzIoKX0pO2Z1bmN0aW9uIFI4dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PUpUKHQpKS5oLChyPUpUKHIpKS5oKSxpPVFuKHQuYyxyLmMpLG89UW4odC5sLHIubCksYT1Rbih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgTjh0LEQ4dCxPOHQ9TSgoKT0+e2p5KCk7SzIoKTtOOHQ9Ujh0KCQyKSxEOHQ9Ujh0KFFuKX0pO2Z1bmN0aW9uIHo4dChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPWoyKGkpKS5oLChvPWoyKG8pKS5oKSxzPVFuKGkucyxvLnMpLGw9UW4oaS5sLG8ubCksYz1RbihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEY4dCxCOHQsSDh0PU0oKCk9PntqeSgpO0syKCk7Rjh0PXo4dCgkMiksQjh0PXo4dChRbil9KTtmdW5jdGlvbiBWOHQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn12YXIgVTh0PU0oKCk9Pnt9KTt2YXIgcTh0PU0oKCk9PntmTygpO1ZRKCk7Y08oKTtGUSgpO1VRKCk7ZUMoKTtxUSgpO3A4dCgpO1lRKCk7Uzh0KCk7Qzh0KCk7SFEoKTtMOHQoKTtrOHQoKTtPOHQoKTtIOHQoKTtVOHQoKX0pO2Z1bmN0aW9uIFFRKCl7dGhpcy5feDA9dGhpcy5feTA9dGhpcy5feDE9dGhpcy5feTE9bnVsbCx0aGlzLl89IiJ9ZnVuY3Rpb24gRzh0KCl7cmV0dXJuIG5ldyBRUX12YXIgWlEsSlEsWHkscDZlLFc4dCxZOHQ9TSgoKT0+e1pRPU1hdGguUEksSlE9MipaUSxYeT0xZS02LHA2ZT1KUS1YeTtRUS5wcm90b3R5cGU9Rzh0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UVEsbW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5feDEhPT1udWxsJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24oZSx0KXt0aGlzLl8rPSJMIisodGhpcy5feDE9K2UpKyIsIisodGhpcy5feTE9K3QpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9IlEiKyArZSsiLCIrICt0KyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXt0aGlzLl8rPSJDIisgK2UrIiwiKyArdCsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rbyl9LGFyY1RvOmZ1bmN0aW9uKGUsdCxyLG4saSl7ZT0rZSx0PSt0LHI9K3Isbj0rbixpPStpO3ZhciBvPXRoaXMuX3gxLGE9dGhpcy5feTEscz1yLWUsbD1uLXQsYz1vLWUsdT1hLXQsaD1jKmMrdSp1O2lmKGk8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIitpKTtpZih0aGlzLl94MT09PW51bGwpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZSBpZihoPlh5KWlmKCEoTWF0aC5hYnModSpzLWwqYyk+WHkpfHwhaSl0aGlzLl8rPSJMIisodGhpcy5feDE9ZSkrIiwiKyh0aGlzLl95MT10KTtlbHNle3ZhciBmPXItbyxwPW4tYSxkPXMqcytsKmwsZz1mKmYrcCpwLF89TWF0aC5zcXJ0KGQpLHk9TWF0aC5zcXJ0KGgpLHg9aSpNYXRoLnRhbigoWlEtTWF0aC5hY29zKChkK2gtZykvKDIqXyp5KSkpLzIpLGI9eC95LFM9eC9fO01hdGguYWJzKGItMSk+WHkmJih0aGlzLl8rPSJMIisoZStiKmMpKyIsIisodCtiKnUpKSx0aGlzLl8rPSJBIitpKyIsIitpKyIsMCwwLCIrICsodSpmPmMqcCkrIiwiKyh0aGlzLl94MT1lK1MqcykrIiwiKyh0aGlzLl95MT10K1MqbCl9fSxhcmM6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2U9K2UsdD0rdCxyPStyO3ZhciBhPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGw9ZSthLGM9dCtzLHU9MV5vLGg9bz9uLWk6aS1uO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIityKTt0aGlzLl94MT09PW51bGw/dGhpcy5fKz0iTSIrbCsiLCIrYzooTWF0aC5hYnModGhpcy5feDEtbCk+WHl8fE1hdGguYWJzKHRoaXMuX3kxLWMpPlh5KSYmKHRoaXMuXys9IkwiK2wrIiwiK2MpLHImJihoPDAmJihoPWglSlErSlEpLGg+cDZlP3RoaXMuXys9IkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisoZS1hKSsiLCIrKHQtcykrIkEiK3IrIiwiK3IrIiwwLDEsIit1KyIsIisodGhpcy5feDE9bCkrIiwiKyh0aGlzLl95MT1jKTpoPlh5JiYodGhpcy5fKz0iQSIrcisiLCIrcisiLDAsIisgKyhoPj1aUSkrIiwiK3UrIiwiKyh0aGlzLl94MT1lK3IqTWF0aC5jb3MoaSkpKyIsIisodGhpcy5feTE9dCtyKk1hdGguc2luKGkpKSkpfSxyZWN0OmZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCkrImgiKyArcisidiIrICtuKyJoIistcisiWiJ9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O1c4dD1HOHR9KTt2YXIgajh0PU0oKCk9PntZOHQoKX0pO2Z1bmN0aW9uIFg4dChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuLGk9ZVtyLTFdLG89MDsrK3Q8cjspbj1pLGk9ZVt0XSxvKz1uWzFdKmlbMF0tblswXSppWzFdO3JldHVybiBvLzJ9dmFyICQ4dD1NKCgpPT57fSk7ZnVuY3Rpb24gSzh0KGUpe2Zvcih2YXIgdD0tMSxyPWUubGVuZ3RoLG49MCxpPTAsbyxhPWVbci0xXSxzLGw9MDsrK3Q8cjspbz1hLGE9ZVt0XSxsKz1zPW9bMF0qYVsxXS1hWzBdKm9bMV0sbis9KG9bMF0rYVswXSkqcyxpKz0ob1sxXSthWzFdKSpzO3JldHVybiBsKj0zLFtuL2wsaS9sXX12YXIgWjh0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOHQoZSx0LHIpe3JldHVybih0WzBdLWVbMF0pKihyWzFdLWVbMV0pLSh0WzFdLWVbMV0pKihyWzBdLWVbMF0pfXZhciBROHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGQ2ZShlLHQpe3JldHVybiBlWzBdLXRbMF18fGVbMV0tdFsxXX1mdW5jdGlvbiB0UnQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9WzAsMV0sbj0yLGk9MjtpPHQ7KytpKXtmb3IoO24+MSYmSjh0KGVbcltuLTJdXSxlW3Jbbi0xXV0sZVtpXSk8PTA7KS0tbjtyW24rK109aX1yZXR1cm4gci5zbGljZSgwLG4pfWZ1bmN0aW9uIGVSdChlKXtpZigocj1lLmxlbmd0aCk8MylyZXR1cm4gbnVsbDt2YXIgdCxyLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpO2Zvcih0PTA7dDxyOysrdCluW3RdPVsrZVt0XVswXSwrZVt0XVsxXSx0XTtmb3Iobi5zb3J0KGQ2ZSksdD0wO3Q8cjsrK3QpaVt0XT1bblt0XVswXSwtblt0XVsxXV07dmFyIG89dFJ0KG4pLGE9dFJ0KGkpLHM9YVswXT09PW9bMF0sbD1hW2EubGVuZ3RoLTFdPT09b1tvLmxlbmd0aC0xXSxjPVtdO2Zvcih0PW8ubGVuZ3RoLTE7dD49MDstLXQpYy5wdXNoKGVbbltvW3RdXVsyXV0pO2Zvcih0PStzO3Q8YS5sZW5ndGgtbDsrK3QpYy5wdXNoKGVbblthW3RdXVsyXV0pO3JldHVybiBjfXZhciByUnQ9TSgoKT0+e1E4dCgpfSk7ZnVuY3Rpb24gblJ0KGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49ZVtyLTFdLGk9dFswXSxvPXRbMV0sYT1uWzBdLHM9blsxXSxsLGMsdT0hMSxoPTA7aDxyOysraCluPWVbaF0sbD1uWzBdLGM9blsxXSxjPm8hPXM+byYmaTwoYS1sKSooby1jKS8ocy1jKStsJiYodT0hdSksYT1sLHM9YztyZXR1cm4gdX12YXIgaVJ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBvUnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbj1lW3ItMV0saSxvLGE9blswXSxzPW5bMV0sbD0wOysrdDxyOylpPWEsbz1zLG49ZVt0XSxhPW5bMF0scz1uWzFdLGktPWEsby09cyxsKz1NYXRoLnNxcnQoaSppK28qbyk7cmV0dXJuIGx9dmFyIGFSdD1NKCgpPT57fSk7dmFyIHNSdD1NKCgpPT57JDh0KCk7Wjh0KCk7clJ0KCk7aVJ0KCk7YVJ0KCl9KTtmdW5jdGlvbiBsUnQoZSl7dmFyIHQ9K3RoaXMuX3guY2FsbChudWxsLGUpLHI9K3RoaXMuX3kuY2FsbChudWxsLGUpO3JldHVybiBjUnQodGhpcy5jb3Zlcih0LHIpLHQscixlKX1mdW5jdGlvbiBjUnQoZSx0LHIsbil7aWYoaXNOYU4odCl8fGlzTmFOKHIpKXJldHVybiBlO3ZhciBpLG89ZS5fcm9vdCxhPXtkYXRhOm59LHM9ZS5feDAsbD1lLl95MCxjPWUuX3gxLHU9ZS5feTEsaCxmLHAsZCxnLF8seSx4O2lmKCFvKXJldHVybiBlLl9yb290PWEsZTtmb3IoO28ubGVuZ3RoOylpZigoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9ZixpPW8sIShvPW9beT1fPDwxfGddKSlyZXR1cm4gaVt5XT1hLGU7aWYocD0rZS5feC5jYWxsKG51bGwsby5kYXRhKSxkPStlLl95LmNhbGwobnVsbCxvLmRhdGEpLHQ9PT1wJiZyPT09ZClyZXR1cm4gYS5uZXh0PW8saT9pW3ldPWE6ZS5fcm9vdD1hLGU7ZG8gaT1pP2lbeV09bmV3IEFycmF5KDQpOmUuX3Jvb3Q9bmV3IEFycmF5KDQpLChnPXQ+PShoPShzK2MpLzIpKT9zPWg6Yz1oLChfPXI+PShmPShsK3UpLzIpKT9sPWY6dT1mO3doaWxlKCh5PV88PDF8Zyk9PT0oeD0oZD49Zik8PDF8cD49aCkpO3JldHVybiBpW3hdPW8saVt5XT1hLGV9ZnVuY3Rpb24gdVJ0KGUpe3ZhciB0LHIsbj1lLmxlbmd0aCxpLG8sYT1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD0xLzAsYz0xLzAsdT0tMS8wLGg9LTEvMDtmb3Iocj0wO3I8bjsrK3IpaXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwsdD1lW3JdKSl8fGlzTmFOKG89K3RoaXMuX3kuY2FsbChudWxsLHQpKXx8KGFbcl09aSxzW3JdPW8saTxsJiYobD1pKSxpPnUmJih1PWkpLG88YyYmKGM9byksbz5oJiYoaD1vKSk7Zm9yKHU8bCYmKGw9dGhpcy5feDAsdT10aGlzLl94MSksaDxjJiYoYz10aGlzLl95MCxoPXRoaXMuX3kxKSx0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrciljUnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9dmFyIGhSdD1NKCgpPT57fSk7ZnVuY3Rpb24gZlJ0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZSBpZihyPmV8fGU+aXx8bj50fHx0Pm8pe3ZhciBhPWktcixzPXRoaXMuX3Jvb3QsbCxjO3N3aXRjaChjPSh0PChuK28pLzIpPDwxfGU8KHIraSkvMil7Y2FzZSAwOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIsaT1yK2Esbz1uK2EsZT5pfHx0Pm8pO2JyZWFrfWNhc2UgMTp7ZG8gbD1uZXcgQXJyYXkoNCksbFtjXT1zLHM9bDt3aGlsZShhKj0yLHI9aS1hLG89bithLHI+ZXx8dD5vKTticmVha31jYXNlIDI6e2RvIGw9bmV3IEFycmF5KDQpLGxbY109cyxzPWw7d2hpbGUoYSo9MixpPXIrYSxuPW8tYSxlPml8fG4+dCk7YnJlYWt9Y2FzZSAzOntkbyBsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sO3doaWxlKGEqPTIscj1pLWEsbj1vLWEscj5lfHxuPnQpO2JyZWFrfX10aGlzLl9yb290JiZ0aGlzLl9yb290Lmxlbmd0aCYmKHRoaXMuX3Jvb3Q9cyl9ZWxzZSByZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfXZhciBwUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGRSdCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfXZhciBtUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX12YXIgX1J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBFbyhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX12YXIgeU89TSgoKT0+e30pO2Z1bmN0aW9uIHlSdChlLHQscil7dmFyIG4saT10aGlzLl94MCxvPXRoaXMuX3kwLGEscyxsLGMsdT10aGlzLl94MSxoPXRoaXMuX3kxLGY9W10scD10aGlzLl9yb290LGQsZztmb3IocCYmZi5wdXNoKG5ldyBFbyhwLGksbyx1LGgpKSxyPT1udWxsP3I9MS8wOihpPWUtcixvPXQtcix1PWUrcixoPXQrcixyKj1yKTtkPWYucG9wKCk7KWlmKCEoIShwPWQubm9kZSl8fChhPWQueDApPnV8fChzPWQueTApPmh8fChsPWQueDEpPGl8fChjPWQueTEpPG8pKWlmKHAubGVuZ3RoKXt2YXIgXz0oYStsKS8yLHk9KHMrYykvMjtmLnB1c2gobmV3IEVvKHBbM10sXyx5LGwsYyksbmV3IEVvKHBbMl0sYSx5LF8sYyksbmV3IEVvKHBbMV0sXyxzLGwseSksbmV3IEVvKHBbMF0sYSxzLF8seSkpLChnPSh0Pj15KTw8MXxlPj1fKSYmKGQ9ZltmLmxlbmd0aC0xXSxmW2YubGVuZ3RoLTFdPWZbZi5sZW5ndGgtMS1nXSxmW2YubGVuZ3RoLTEtZ109ZCl9ZWxzZXt2YXIgeD1lLSt0aGlzLl94LmNhbGwobnVsbCxwLmRhdGEpLGI9dC0rdGhpcy5feS5jYWxsKG51bGwscC5kYXRhKSxTPXgqeCtiKmI7aWYoUzxyKXt2YXIgQz1NYXRoLnNxcnQocj1TKTtpPWUtQyxvPXQtQyx1PWUrQyxoPXQrQyxuPXAuZGF0YX19cmV0dXJuIG59dmFyIHZSdD1NKCgpPT57eU8oKX0pO2Z1bmN0aW9uIHhSdChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiBiUnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfXZhciB3UnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFNSdCgpe3JldHVybiB0aGlzLl9yb290fXZhciBNUnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVSdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9dmFyIFRSdD1NKCgpPT57fSk7ZnVuY3Rpb24gQ1J0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyBFbyhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgRW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgRW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgRW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgRW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9dmFyIEFSdD1NKCgpPT57eU8oKX0pO2Z1bmN0aW9uIFBSdChlKXt2YXIgdD1bXSxyPVtdLG47Zm9yKHRoaXMuX3Jvb3QmJnQucHVzaChuZXcgRW8odGhpcy5fcm9vdCx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO249dC5wb3AoKTspe3ZhciBpPW4ubm9kZTtpZihpLmxlbmd0aCl7dmFyIG8sYT1uLngwLHM9bi55MCxsPW4ueDEsYz1uLnkxLHU9KGErbCkvMixoPShzK2MpLzI7KG89aVswXSkmJnQucHVzaChuZXcgRW8obyxhLHMsdSxoKSksKG89aVsxXSkmJnQucHVzaChuZXcgRW8obyx1LHMsbCxoKSksKG89aVsyXSkmJnQucHVzaChuZXcgRW8obyxhLGgsdSxjKSksKG89aVszXSkmJnQucHVzaChuZXcgRW8obyx1LGgsbCxjKSl9ci5wdXNoKG4pfWZvcig7bj1yLnBvcCgpOyllKG4ubm9kZSxuLngwLG4ueTAsbi54MSxuLnkxKTtyZXR1cm4gdGhpc312YXIgSVJ0PU0oKCk9Pnt5TygpfSk7ZnVuY3Rpb24gTFJ0KGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uIGtSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD1lLHRoaXMpOnRoaXMuX3h9dmFyIFJSdD1NKCgpPT57fSk7ZnVuY3Rpb24gTlJ0KGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIERSdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT1lLHRoaXMpOnRoaXMuX3l9dmFyIE9SdD1NKCgpPT57fSk7ZnVuY3Rpb24gdk8oZSx0LHIpe3ZhciBuPW5ldyB0dHQodD09bnVsbD9MUnQ6dCxyPT1udWxsP05SdDpyLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIGU9PW51bGw/bjpuLmFkZEFsbChlKX1mdW5jdGlvbiB0dHQoZSx0LHIsbixpLG8pe3RoaXMuX3g9ZSx0aGlzLl95PXQsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiB6UnQoZSl7Zm9yKHZhciB0PXtkYXRhOmUuZGF0YX0scj10O2U9ZS5uZXh0OylyPXIubmV4dD17ZGF0YTplLmRhdGF9O3JldHVybiB0fXZhciBYYSxGUnQ9TSgoKT0+e2hSdCgpO3BSdCgpO21SdCgpO19SdCgpO3ZSdCgpO3dSdCgpO01SdCgpO1RSdCgpO0FSdCgpO0lSdCgpO1JSdCgpO09SdCgpO1hhPXZPLnByb3RvdHlwZT10dHQucHJvdG90eXBlO1hhLmNvcHk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgdHR0KHRoaXMuX3gsdGhpcy5feSx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSksdD10aGlzLl9yb290LHIsbjtpZighdClyZXR1cm4gZTtpZighdC5sZW5ndGgpcmV0dXJuIGUuX3Jvb3Q9elJ0KHQpLGU7Zm9yKHI9W3tzb3VyY2U6dCx0YXJnZXQ6ZS5fcm9vdD1uZXcgQXJyYXkoNCl9XTt0PXIucG9wKCk7KWZvcih2YXIgaT0wO2k8NDsrK2kpKG49dC5zb3VyY2VbaV0pJiYobi5sZW5ndGg/ci5wdXNoKHtzb3VyY2U6bix0YXJnZXQ6dC50YXJnZXRbaV09bmV3IEFycmF5KDQpfSk6dC50YXJnZXRbaV09elJ0KG4pKTtyZXR1cm4gZX07WGEuYWRkPWxSdDtYYS5hZGRBbGw9dVJ0O1hhLmNvdmVyPWZSdDtYYS5kYXRhPWRSdDtYYS5leHRlbnQ9Z1J0O1hhLmZpbmQ9eVJ0O1hhLnJlbW92ZT14UnQ7WGEucmVtb3ZlQWxsPWJSdDtYYS5yb290PVNSdDtYYS5zaXplPUVSdDtYYS52aXNpdD1DUnQ7WGEudmlzaXRBZnRlcj1QUnQ7WGEueD1rUnQ7WGEueT1EUnR9KTt2YXIgQlJ0PU0oKCk9PntGUnQoKX0pO3ZhciBIUnQsVlJ0PU0oKCk9PntIUnQ9W10uc2xpY2V9KTtmdW5jdGlvbiBldHQoZSl7dGhpcy5fc2l6ZT1lLHRoaXMuX2NhbGw9dGhpcy5fZXJyb3I9bnVsbCx0aGlzLl90YXNrcz1bXSx0aGlzLl9kYXRhPVtdLHRoaXMuX3dhaXRpbmc9dGhpcy5fYWN0aXZlPXRoaXMuX2VuZGVkPXRoaXMuX3N0YXJ0PTB9ZnVuY3Rpb24gVVJ0KGUpe2lmKCFlLl9zdGFydCl0cnl7ZzZlKGUpfWNhdGNoKHQpe2lmKGUuX3Rhc2tzW2UuX2VuZGVkK2UuX2FjdGl2ZS0xXSlydHQoZSx0KTtlbHNlIGlmKCFlLl9kYXRhKXRocm93IHR9fWZ1bmN0aW9uIGc2ZShlKXtmb3IoO2UuX3N0YXJ0PWUuX3dhaXRpbmcmJmUuX2FjdGl2ZTxlLl9zaXplOyl7dmFyIHQ9ZS5fZW5kZWQrZS5fYWN0aXZlLHI9ZS5fdGFza3NbdF0sbj1yLmxlbmd0aC0xLGk9cltuXTtyW25dPV82ZShlLHQpLC0tZS5fd2FpdGluZywrK2UuX2FjdGl2ZSxyPWkuYXBwbHkobnVsbCxyKSxlLl90YXNrc1t0XSYmKGUuX3Rhc2tzW3RdPXJ8fG02ZSl9fWZ1bmN0aW9uIF82ZShlLHQpe3JldHVybiBmdW5jdGlvbihyLG4peyFlLl90YXNrc1t0XXx8KC0tZS5fYWN0aXZlLCsrZS5fZW5kZWQsZS5fdGFza3NbdF09bnVsbCxlLl9lcnJvcj09bnVsbCYmKHIhPW51bGw/cnR0KGUscik6KGUuX2RhdGFbdF09bixlLl93YWl0aW5nP1VSdChlKTp4TyhlKSkpKX19ZnVuY3Rpb24gcnR0KGUsdCl7dmFyIHI9ZS5fdGFza3MubGVuZ3RoLG47Zm9yKGUuX2Vycm9yPXQsZS5fZGF0YT12b2lkIDAsZS5fd2FpdGluZz1OYU47LS1yPj0wOylpZigobj1lLl90YXNrc1tyXSkmJihlLl90YXNrc1tyXT1udWxsLG4uYWJvcnQpKXRyeXtuLmFib3J0KCl9Y2F0Y2goaSl7fWUuX2FjdGl2ZT1OYU4seE8oZSl9ZnVuY3Rpb24geE8oZSl7aWYoIWUuX2FjdGl2ZSYmZS5fY2FsbCl7dmFyIHQ9ZS5fZGF0YTtlLl9kYXRhPXZvaWQgMCxlLl9jYWxsKGUuX2Vycm9yLHQpfX1mdW5jdGlvbiBiTyhlKXtpZihlPT1udWxsKWU9MS8wO2Vsc2UgaWYoISgoZT0rZSk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb25jdXJyZW5jeSIpO3JldHVybiBuZXcgZXR0KGUpfXZhciBtNmUscVJ0PU0oKCk9PntWUnQoKTttNmU9e307ZXR0LnByb3RvdHlwZT1iTy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmV0dCxkZWZlcjpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2siKTtpZih0aGlzLl9jYWxsKXRocm93IG5ldyBFcnJvcigiZGVmZXIgYWZ0ZXIgYXdhaXQiKTtpZih0aGlzLl9lcnJvciE9bnVsbClyZXR1cm4gdGhpczt2YXIgdD1IUnQuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHQucHVzaChlKSwrK3RoaXMuX3dhaXRpbmcsdGhpcy5fdGFza3MucHVzaCh0KSxVUnQodGhpcyksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXJyb3I9PW51bGwmJnJ0dCh0aGlzLG5ldyBFcnJvcigiYWJvcnQiKSksdGhpc30sYXdhaXQ6ZnVuY3Rpb24oZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrIik7aWYodGhpcy5fY2FsbCl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIGF3YWl0Iik7cmV0dXJuIHRoaXMuX2NhbGw9ZnVuY3Rpb24odCxyKXtlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyKSl9LHhPKHRoaXMpLHRoaXN9LGF3YWl0QWxsOmZ1bmN0aW9uKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjayIpO2lmKHRoaXMuX2NhbGwpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSBhd2FpdCIpO3JldHVybiB0aGlzLl9jYWxsPWUseE8odGhpcyksdGhpc319fSk7dmFyIEdSdD1NKCgpPT57cVJ0KCl9KTtmdW5jdGlvbiBiYygpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciAkeT1NKCgpPT57fSk7dmFyIFdSdCxZUnQ9TSgoKT0+eyR5KCk7V1J0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPW49PW51bGw/MDorbixpPWk9PW51bGw/MToraSxhcmd1bWVudHMubGVuZ3RoPT09MT8oaT1uLG49MCk6aS09bixmdW5jdGlvbigpe3JldHVybiB0KCkqaStufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgd08sbnR0PU0oKCk9PnskeSgpO3dPPWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuLGkpe3ZhciBvLGE7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGZ1bmN0aW9uKCl7dmFyIHM7aWYobyE9bnVsbClzPW8sbz1udWxsO2Vsc2UgZG8gbz10KCkqMi0xLHM9dCgpKjItMSxhPW8qbytzKnM7d2hpbGUoIWF8fGE+MSk7cmV0dXJuIG4raSpzKk1hdGguc3FydCgtMipNYXRoLmxvZyhhKS9hKX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIGpSdCxYUnQ9TSgoKT0+eyR5KCk7bnR0KCk7alJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcigpe3ZhciBuPXdPLnNvdXJjZSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKG4oKSl9fXJldHVybiByLnNvdXJjZT1lLHJ9KGJjKX0pO3ZhciBTTyxpdHQ9TSgoKT0+eyR5KCk7U089ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT0wLG89MDtvPG47KytvKWkrPXQoKTtyZXR1cm4gaX19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyICRSdCxLUnQ9TSgoKT0+eyR5KCk7aXR0KCk7JFJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXt2YXIgaT1TTy5zb3VyY2UodCkobik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkoKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShiYyl9KTt2YXIgWlJ0LEpSdD1NKCgpPT57JHkoKTtaUnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybi1NYXRoLmxvZygxLXQoKSkvbn19cmV0dXJuIHIuc291cmNlPWUscn0oYmMpfSk7dmFyIFFSdD1NKCgpPT57WVJ0KCk7bnR0KCk7WFJ0KCk7S1J0KCk7aXR0KCk7SlJ0KCl9KTtmdW5jdGlvbiBKMihlLHQpe3ZhciByLG49dnMoImJlZm9yZXNlbmQiLCJwcm9ncmVzcyIsImxvYWQiLCJlcnJvciIpLGksbz1KaSgpLGE9bmV3IFhNTEh0dHBSZXF1ZXN0LHM9bnVsbCxsPW51bGwsYyx1LGg9MDt0eXBlb2YgWERvbWFpblJlcXVlc3QhPSJ1bmRlZmluZWQiJiYhKCJ3aXRoQ3JlZGVudGlhbHMiaW4gYSkmJi9eKGh0dHAocyk/Oik/XC9cLy8udGVzdChlKSYmKGE9bmV3IFhEb21haW5SZXF1ZXN0KSwib25sb2FkImluIGE/YS5vbmxvYWQ9YS5vbmVycm9yPWEub250aW1lb3V0PWY6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24ocCl7YS5yZWFkeVN0YXRlPjMmJmYocCl9O2Z1bmN0aW9uIGYocCl7dmFyIGQ9YS5zdGF0dXMsZztpZighZCYmdjZlKGEpfHxkPj0yMDAmJmQ8MzAwfHxkPT09MzA0KXtpZihjKXRyeXtnPWMuY2FsbChyLGEpfWNhdGNoKF8pe24uY2FsbCgiZXJyb3IiLHIsXyk7cmV0dXJufWVsc2UgZz1hO24uY2FsbCgibG9hZCIscixnKX1lbHNlIG4uY2FsbCgiZXJyb3IiLHIscCl9aWYoYS5vbnByb2dyZXNzPWZ1bmN0aW9uKHApe24uY2FsbCgicHJvZ3Jlc3MiLHIscCl9LHI9e2hlYWRlcjpmdW5jdGlvbihwLGQpe3JldHVybiBwPShwKyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9vLmdldChwKTooZD09bnVsbD9vLnJlbW92ZShwKTpvLnNldChwLGQrIiIpLHIpfSxtaW1lVHlwZTpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1wPT1udWxsP251bGw6cCsiIixyKTppfSxyZXNwb25zZVR5cGU6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9cCxyKTp1fSx0aW1lb3V0OmZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPStwLHIpOmh9LHVzZXI6ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MT9zOihzPXA9PW51bGw/bnVsbDpwKyIiLHIpfSxwYXNzd29yZDpmdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP2w6KGw9cD09bnVsbD9udWxsOnArIiIscil9LHJlc3BvbnNlOmZ1bmN0aW9uKHApe3JldHVybiBjPXAscn0sZ2V0OmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHIuc2VuZCgiR0VUIixwLGQpfSxwb3N0OmZ1bmN0aW9uKHAsZCl7cmV0dXJuIHIuc2VuZCgiUE9TVCIscCxkKX0sc2VuZDpmdW5jdGlvbihwLGQsZyl7cmV0dXJuIGEub3BlbihwLGUsITAscyxsKSxpIT1udWxsJiYhby5oYXMoImFjY2VwdCIpJiZvLnNldCgiYWNjZXB0IixpKyIsKi8qIiksYS5zZXRSZXF1ZXN0SGVhZGVyJiZvLmVhY2goZnVuY3Rpb24oXyx5KXthLnNldFJlcXVlc3RIZWFkZXIoeSxfKX0pLGkhPW51bGwmJmEub3ZlcnJpZGVNaW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlKGkpLHUhPW51bGwmJihhLnJlc3BvbnNlVHlwZT11KSxoPjAmJihhLnRpbWVvdXQ9aCksZz09bnVsbCYmdHlwZW9mIGQ9PSJmdW5jdGlvbiImJihnPWQsZD1udWxsKSxnIT1udWxsJiZnLmxlbmd0aD09PTEmJihnPXk2ZShnKSksZyE9bnVsbCYmci5vbigiZXJyb3IiLGcpLm9uKCJsb2FkIixmdW5jdGlvbihfKXtnKG51bGwsXyl9KSxuLmNhbGwoImJlZm9yZXNlbmQiLHIsYSksYS5zZW5kKGQ9PW51bGw/bnVsbDpkKSxyfSxhYm9ydDpmdW5jdGlvbigpe3JldHVybiBhLmFib3J0KCkscn0sb246ZnVuY3Rpb24oKXt2YXIgcD1uLm9uLmFwcGx5KG4sYXJndW1lbnRzKTtyZXR1cm4gcD09PW4/cjpwfX0sdCE9bnVsbCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO3JldHVybiByLmdldCh0KX1yZXR1cm4gcn1mdW5jdGlvbiB5NmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0PT1udWxsP3I6bnVsbCl9fWZ1bmN0aW9uIHY2ZShlKXt2YXIgdD1lLnJlc3BvbnNlVHlwZTtyZXR1cm4gdCYmdCE9PSJ0ZXh0Ij9lLnJlc3BvbnNlOmUucmVzcG9uc2VUZXh0fXZhciBNTz1NKCgpPT57VGIoKTtrbSgpfSk7ZnVuY3Rpb24gVGcoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXt2YXIgaT1KMihyKS5taW1lVHlwZShlKS5yZXNwb25zZSh0KTtpZihuIT1udWxsKXtpZih0eXBlb2YgbiE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbik7cmV0dXJuIGkuZ2V0KG4pfXJldHVybiBpfX12YXIgaUM9TSgoKT0+e01PKCl9KTt2YXIgdE50LGVOdD1NKCgpPT57aUMoKTt0TnQ9VGcoInRleHQvaHRtbCIsZnVuY3Rpb24oZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGUucmVzcG9uc2VUZXh0KX0pfSk7dmFyIHJOdCxuTnQ9TSgoKT0+e2lDKCk7ck50PVRnKCJhcHBsaWNhdGlvbi9qc29uIixmdW5jdGlvbihlKXtyZXR1cm4gSlNPTi5wYXJzZShlLnJlc3BvbnNlVGV4dCl9KX0pO3ZhciBpTnQsb050PU0oKCk9PntpQygpO2lOdD1UZygidGV4dC9wbGFpbiIsZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVzcG9uc2VUZXh0fSl9KTt2YXIgYU50LHNOdD1NKCgpPT57aUMoKTthTnQ9VGcoImFwcGxpY2F0aW9uL3htbCIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXNwb25zZVhNTDtpZighdCl0aHJvdyBuZXcgRXJyb3IoInBhcnNlIGVycm9yIik7cmV0dXJuIHR9KX0pO2Z1bmN0aW9uIEVPKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPW4sbj1udWxsKTt2YXIgbz1KMihyKS5taW1lVHlwZShlKTtyZXR1cm4gby5yb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5yZXNwb25zZSh4NmUodCxuPWEpKTpufSxvLnJvdyhuKSxpP28uZ2V0KGkpOm99fWZ1bmN0aW9uIHg2ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZShyLnJlc3BvbnNlVGV4dCx0KX19dmFyIG90dD1NKCgpPT57TU8oKX0pO3ZhciBsTnQsY050PU0oKCk9PntVRSgpO290dCgpO2xOdD1FTygidGV4dC9jc3YiLENiKX0pO3ZhciB1TnQsaE50PU0oKCk9PntVRSgpO290dCgpO3VOdD1FTygidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIsQWIpfSk7dmFyIGZOdD1NKCgpPT57TU8oKTtlTnQoKTtuTnQoKTtvTnQoKTtzTnQoKTtjTnQoKTtoTnQoKX0pO2Z1bmN0aW9uIHBmKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBLeT1NKCgpPT57fSk7ZnVuY3Rpb24gb0MoZSl7cmV0dXJuIGUubGVuZ3RoPT09MSYmKGU9YjZlKGUpKSx7bGVmdDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPDA/bj1vKzE6aT1vfXJldHVybiBufSxyaWdodDpmdW5jdGlvbih0LHIsbixpKXtmb3Iobj09bnVsbCYmKG49MCksaT09bnVsbCYmKGk9dC5sZW5ndGgpO248aTspe3ZhciBvPW4raT4+PjE7ZSh0W29dLHIpPjA/aT1vOm49bysxfXJldHVybiBufX19ZnVuY3Rpb24gYjZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBwZihlKHQpLHIpfX12YXIgYXR0PU0oKCk9PntLeSgpfSk7dmFyIHBOdCxkTnQsdzZlLGRmLHN0dD1NKCgpPT57S3koKTthdHQoKTtwTnQ9b0MocGYpLGROdD1wTnQucmlnaHQsdzZlPXBOdC5sZWZ0LGRmPWROdH0pO3ZhciBsdHQ9TSgoKT0+e30pO3ZhciBtTnQ9TSgoKT0+e2x0dCgpfSk7dmFyIGdOdD1NKCgpPT57fSk7ZnVuY3Rpb24gUTIoZSl7cmV0dXJuIGU9PT1udWxsP05hTjorZX12YXIgdHc9TSgoKT0+e30pO3ZhciBjdHQ9TSgoKT0+e3R3KCl9KTt2YXIgdXR0PU0oKCk9PntjdHQoKX0pO3ZhciBodHQ9TSgoKT0+e30pO3ZhciBfTnQsTTZlLEU2ZSxmdHQ9TSgoKT0+e19OdD1BcnJheS5wcm90b3R5cGUsTTZlPV9OdC5zbGljZSxFNmU9X050Lm1hcH0pO3ZhciB5TnQ9TSgoKT0+e30pO3ZhciB2TnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFRPKGUsdCxyKXtlPStlLHQ9K3Qscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyh0PWUsZT0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPU1hdGgubWF4KDAsTWF0aC5jZWlsKCh0LWUpL3IpKXwwLG89bmV3IEFycmF5KGkpOysrbjxpOylvW25dPWUrbipyO3JldHVybiBvfXZhciBwdHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGFDKGUsdCxyKXt2YXIgbixpPS0xLG8sYSxzO2lmKHQ9K3QsZT0rZSxyPStyLGU9PT10JiZyPjApcmV0dXJuW2VdO2lmKChuPXQ8ZSkmJihvPWUsZT10LHQ9byksKHM9ZXcoZSx0LHIpKT09PTB8fCFpc0Zpbml0ZShzKSlyZXR1cm5bXTtpZihzPjApZm9yKGU9TWF0aC5jZWlsKGUvcyksdD1NYXRoLmZsb29yKHQvcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwodC1lKzEpKTsrK2k8bzspYVtpXT0oZStpKSpzO2Vsc2UgZm9yKGU9TWF0aC5mbG9vcihlKnMpLHQ9TWF0aC5jZWlsKHQqcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwoZS10KzEpKTsrK2k8bzspYVtpXT0oZS1pKS9zO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfWZ1bmN0aW9uIGV3KGUsdCxyKXt2YXIgbj0odC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApLG89bi9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49ZHR0PzEwOm8+PW10dD81Om8+PWd0dD8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PWR0dD8xMDpvPj1tdHQ/NTpvPj1ndHQ/MjoxKX1mdW5jdGlvbiBaeShlLHQscil7dmFyIG49TWF0aC5hYnModC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApKSxvPW4vaTtyZXR1cm4gbz49ZHR0P2kqPTEwOm8+PW10dD9pKj01Om8+PWd0dCYmKGkqPTIpLHQ8ZT8taTppfXZhciBkdHQsbXR0LGd0dCxfdHQ9TSgoKT0+e2R0dD1NYXRoLnNxcnQoNTApLG10dD1NYXRoLnNxcnQoMTApLGd0dD1NYXRoLnNxcnQoMil9KTt2YXIgeXR0PU0oKCk9Pnt9KTt2YXIgeE50PU0oKCk9PntmdHQoKTtzdHQoKTt5TnQoKTtodHQoKTt2TnQoKTtwdHQoKTtfdHQoKTt5dHQoKX0pO2Z1bmN0aW9uIHNDKGUsdCxyKXtpZihyPT1udWxsJiYocj1RMiksISEobj1lLmxlbmd0aCkpe2lmKCh0PSt0KTw9MHx8bjwyKXJldHVybityKGVbMF0sMCxlKTtpZih0Pj0xKXJldHVybityKGVbbi0xXSxuLTEsZSk7dmFyIG4saT0obi0xKSp0LG89TWF0aC5mbG9vcihpKSxhPStyKGVbb10sbyxlKSxzPStyKGVbbysxXSxvKzEsZSk7cmV0dXJuIGErKHMtYSkqKGktbyl9fXZhciBDTz1NKCgpPT57dHcoKX0pO3ZhciBiTnQ9TSgoKT0+e2Z0dCgpO0t5KCk7dHcoKTtDTygpfSk7dmFyIHdOdD1NKCgpPT57dXR0KCl9KTt2YXIgU050PU0oKCk9Pnt9KTt2YXIgTU50PU0oKCk9Pnt0dygpfSk7dmFyIEVOdD1NKCgpPT57S3koKTt0dygpO0NPKCl9KTt2YXIgVE50PU0oKCk9Pnt9KTt2YXIgdnR0PU0oKCk9Pnt9KTt2YXIgQ050PU0oKCk9Pnt9KTt2YXIgQU50PU0oKCk9PntLeSgpfSk7dmFyIFBOdD1NKCgpPT57fSk7dmFyIElOdD1NKCgpPT57fSk7dmFyIHh0dD1NKCgpPT57dnR0KCl9KTt2YXIgTE50PU0oKCk9Pnt4dHQoKX0pO3ZhciBtZj1NKCgpPT57c3R0KCk7S3koKTthdHQoKTttTnQoKTtnTnQoKTt1dHQoKTtodHQoKTt4TnQoKTtiTnQoKTt3TnQoKTt5dHQoKTtTTnQoKTtNTnQoKTtFTnQoKTtUTnQoKTt2dHQoKTtsdHQoKTtDTnQoKTtDTygpO3B0dCgpO0FOdCgpO1BOdCgpO0lOdCgpO190dCgpO3h0dCgpO2N0dCgpO0xOdCgpfSk7ZnVuY3Rpb24gQU8oKXt9ZnVuY3Rpb24ga050KGUsdCl7dmFyIHI9bmV3IEFPO2lmKGUgaW5zdGFuY2VvZiBBTyllLmVhY2goZnVuY3Rpb24ocyxsKXtyLnNldChsLHMpfSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbj0tMSxpPWUubGVuZ3RoLG87aWYodD09bnVsbClmb3IoOysrbjxpOylyLnNldChuLGVbbl0pO2Vsc2UgZm9yKDsrK248aTspci5zZXQodChvPWVbbl0sbixlKSxvKX1lbHNlIGlmKGUpZm9yKHZhciBhIGluIGUpci5zZXQoYSxlW2FdKTtyZXR1cm4gcn12YXIgZmwsSnksUE89TSgoKT0+e2ZsPSIkIjtBTy5wcm90b3R5cGU9a050LnByb3RvdHlwZT17Y29uc3RydWN0b3I6QU8saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBmbCtlIGluIHRoaXN9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpc1tmbCtlXX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXNbZmwrZV09dCx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZmwrZTtyZXR1cm4gdCBpbiB0aGlzJiZkZWxldGUgdGhpc1t0XX0sY2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcyllWzBdPT09ZmwmJmRlbGV0ZSB0aGlzW2VdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2godC5zbGljZSgxKSk7cmV0dXJuIGV9LHZhbHVlczpmdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1mbCYmZS5wdXNoKHRoaXNbdF0pO3JldHVybiBlfSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIGU9W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiZlLnB1c2goe2tleTp0LnNsaWNlKDEpLHZhbHVlOnRoaXNbdF19KTtyZXR1cm4gZX0sc2l6ZTpmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PWZsJiYrK2U7cmV0dXJuIGV9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMpaWYoZVswXT09PWZsKXJldHVybiExO3JldHVybiEwfSxlYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzKXRbMF09PT1mbCYmZSh0aGlzW3RdLHQuc2xpY2UoMSksdGhpcyl9fTtKeT1rTnR9KTt2YXIgUk50PU0oKCk9PntQTygpfSk7ZnVuY3Rpb24gSU8oKXt9ZnVuY3Rpb24gTDZlKGUsdCl7dmFyIHI9bmV3IElPO2lmKGUgaW5zdGFuY2VvZiBJTyllLmVhY2goZnVuY3Rpb24obyl7ci5hZGQobyl9KTtlbHNlIGlmKGUpe3ZhciBuPS0xLGk9ZS5sZW5ndGg7aWYodD09bnVsbClmb3IoOysrbjxpOylyLmFkZChlW25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKHQoZVtuXSxuLGUpKX1yZXR1cm4gcn12YXIgUXksTk50PU0oKCk9PntQTygpO1F5PUp5LnByb3RvdHlwZTtJTy5wcm90b3R5cGU9TDZlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6SU8saGFzOlF5LmhhcyxhZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrPSIiLHRoaXNbZmwrZV09ZSx0aGlzfSxyZW1vdmU6UXkucmVtb3ZlLGNsZWFyOlF5LmNsZWFyLHZhbHVlczpReS5rZXlzLHNpemU6UXkuc2l6ZSxlbXB0eTpReS5lbXB0eSxlYWNoOlF5LmVhY2h9fSk7dmFyIEROdD1NKCgpPT57fSk7dmFyIE9OdD1NKCgpPT57fSk7dmFyIHpOdD1NKCgpPT57fSk7dmFyIEZOdD1NKCgpPT57Uk50KCk7Tk50KCk7UE8oKTtETnQoKTtPTnQoKTt6TnQoKX0pO3ZhciBCTnQscncscGwsQ2c9TSgoKT0+e0JOdD1BcnJheS5wcm90b3R5cGUscnc9Qk50Lm1hcCxwbD1CTnQuc2xpY2V9KTtmdW5jdGlvbiBudyhlKXt2YXIgdD1KeSgpLHI9W10sbj1MTztlPWU9PW51bGw/W106cGwuY2FsbChlKTtmdW5jdGlvbiBpKG8pe3ZhciBhPW8rIiIscz10LmdldChhKTtpZighcyl7aWYobiE9PUxPKXJldHVybiBuO3Quc2V0KGEscz1yLnB1c2gobykpfXJldHVybiBlWyhzLTEpJWUubGVuZ3RoXX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obyl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIuc2xpY2UoKTtyPVtdLHQ9SnkoKTtmb3IodmFyIGE9LTEscz1vLmxlbmd0aCxsLGM7KythPHM7KXQuaGFzKGM9KGw9b1thXSkrIiIpfHx0LnNldChjLHIucHVzaChsKSk7cmV0dXJuIGl9LGkucmFuZ2U9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9cGwuY2FsbChvKSxpKTplLnNsaWNlKCl9LGkudW5rbm93bj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1vLGkpOm59LGkuY29weT1mdW5jdGlvbigpe3JldHVybiBudygpLmRvbWFpbihyKS5yYW5nZShlKS51bmtub3duKG4pfSxpfXZhciBMTyxidHQ9TSgoKT0+e0ZOdCgpO0NnKCk7TE89e25hbWU6ImltcGxpY2l0In19KTtmdW5jdGlvbiBsQygpe3ZhciBlPW53KCkudW5rbm93bih2b2lkIDApLHQ9ZS5kb21haW4scj1lLnJhbmdlLG49WzAsMV0saSxvLGE9ITEscz0wLGw9MCxjPS41O2RlbGV0ZSBlLnVua25vd247ZnVuY3Rpb24gdSgpe3ZhciBoPXQoKS5sZW5ndGgsZj1uWzFdPG5bMF0scD1uW2YtMF0sZD1uWzEtZl07aT0oZC1wKS9NYXRoLm1heCgxLGgtcytsKjIpLGEmJihpPU1hdGguZmxvb3IoaSkpLHArPShkLXAtaSooaC1zKSkqYyxvPWkqKDEtcyksYSYmKHA9TWF0aC5yb3VuZChwKSxvPU1hdGgucm91bmQobykpO3ZhciBnPVRPKGgpLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gcCtpKl99KTtyZXR1cm4gcihmP2cucmV2ZXJzZSgpOmcpfXJldHVybiBlLmRvbWFpbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChoKSx1KCkpOnQoKX0sZS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1bK2hbMF0sK2hbMV1dLHUoKSk6bi5zbGljZSgpfSxlLnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49WytoWzBdLCtoWzFdXSxhPSEwLHUoKX0sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gb30sZS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LGUucm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISFoLHUoKSk6YX0sZS5wYWRkaW5nPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWw9TWF0aC5tYXgoMCxNYXRoLm1pbigxLGgpKSx1KCkpOnN9LGUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpzfSxlLnBhZGRpbmdPdXRlcj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6bH0sZS5hbGlnbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsaCkpLHUoKSk6Y30sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGxDKCkuZG9tYWluKHQoKSkucmFuZ2Uobikucm91bmQoYSkucGFkZGluZ0lubmVyKHMpLnBhZGRpbmdPdXRlcihsKS5hbGlnbihjKX0sdSgpfWZ1bmN0aW9uIEhOdChlKXt2YXIgdD1lLmNvcHk7cmV0dXJuIGUucGFkZGluZz1lLnBhZGRpbmdPdXRlcixkZWxldGUgZS5wYWRkaW5nSW5uZXIsZGVsZXRlIGUucGFkZGluZ091dGVyLGUuY29weT1mdW5jdGlvbigpe3JldHVybiBITnQodCgpKX0sZX1mdW5jdGlvbiBWTnQoKXtyZXR1cm4gSE50KGxDKCkucGFkZGluZ0lubmVyKDEpKX12YXIgVU50PU0oKCk9PnttZigpO2J0dCgpfSk7ZnVuY3Rpb24gaXcoZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGNDKGUsdCl7dmFyIHI9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSk7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByfXZhciB3dHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGUxKCl7fWZ1bmN0aW9uIEdOdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIEI2ZSgpe3JldHVybiBLTnQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gV050KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gUGcoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9azZlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/WU50KHQpOnI9PT0zP25ldyBoYSh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/a08odD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/a08odD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1SNmUuZXhlYyhlKSk/bmV3IGhhKHRbMV0sdFsyXSx0WzNdLDEpOih0PU42ZS5leGVjKGUpKT9uZXcgaGEodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9RDZlLmV4ZWMoZSkpP2tPKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PU82ZS5leGVjKGUpKT9rTyh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD16NmUuZXhlYyhlKSk/JE50KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9RjZlLmV4ZWMoZSkpPyROdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOnFOdC5oYXNPd25Qcm9wZXJ0eShlKT9ZTnQocU50W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgaGEoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBZTnQoZSl7cmV0dXJuIG5ldyBoYShlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24ga08oZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBoYShlLHQscixuKX1mdW5jdGlvbiBFdHQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBlMXx8KGU9UGcoZSkpLGU/KGU9ZS5yZ2IoKSxuZXcgaGEoZS5yLGUuZyxlLmIsZS5vcGFjaXR5KSk6bmV3IGhhfWZ1bmN0aW9uIGF3KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9FdHQoZSk6bmV3IGhhKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBoYShlLHQscixuKXt0aGlzLnI9K2UsdGhpcy5nPSt0LHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gak50KCl7cmV0dXJuIiMiK1N0dCh0aGlzLnIpK1N0dCh0aGlzLmcpK1N0dCh0aGlzLmIpfWZ1bmN0aW9uIFhOdCgpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJyZ2IoIjoicmdiYSgiKStNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMucil8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5nKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmIpfHwwKSkrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX1mdW5jdGlvbiBTdHQoZSl7cmV0dXJuIGU9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChlKXx8MCkpLChlPDE2PyIwIjoiIikrZS50b1N0cmluZygxNil9ZnVuY3Rpb24gJE50KGUsdCxyLG4pe3JldHVybiBuPD0wP2U9dD1yPU5hTjpyPD0wfHxyPj0xP2U9dD1OYU46dDw9MCYmKGU9TmFOKSxuZXcgZ2YoZSx0LHIsbil9ZnVuY3Rpb24gS050KGUpe2lmKGUgaW5zdGFuY2VvZiBnZilyZXR1cm4gbmV3IGdmKGUuaCxlLnMsZS5sLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIGUxfHwoZT1QZyhlKSksIWUpcmV0dXJuIG5ldyBnZjtpZihlIGluc3RhbmNlb2YgZ2YpcmV0dXJuIGU7ZT1lLnJnYigpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPU1hdGgubWluKHQscixuKSxvPU1hdGgubWF4KHQscixuKSxhPU5hTixzPW8taSxsPShvK2kpLzI7cmV0dXJuIHM/KHQ9PT1vP2E9KHItbikvcysocjxuKSo2OnI9PT1vP2E9KG4tdCkvcysyOmE9KHQtcikvcys0LHMvPWw8LjU/bytpOjItby1pLGEqPTYwKTpzPWw+MCYmbDwxPzA6YSxuZXcgZ2YoYSxzLGwsZS5vcGFjaXR5KX1mdW5jdGlvbiBaTnQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0tOdChlKTpuZXcgZ2YoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGdmKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBNdHQoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIEFnLHQxLG93LHVDLF9mLGs2ZSxSNmUsTjZlLEQ2ZSxPNmUsejZlLEY2ZSxxTnQsVHR0PU0oKCk9Pnt3dHQoKTtBZz0uNyx0MT0xL0FnLG93PSJcXHMqKFsrLV0/XFxkKylcXHMqIix1Qz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixfZj0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsazZlPS9eIyhbMC05YS1mXXszLDh9KSQvLFI2ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbb3csb3csb3ddKyJcXCkkIiksTjZlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tfZixfZixfZl0rIlxcKSQiKSxENmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tvdyxvdyxvdyx1Q10rIlxcKSQiKSxPNmU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tfZixfZixfZix1Q10rIlxcKSQiKSx6NmU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW3VDLF9mLF9mXSsiXFwpJCIpLEY2ZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW3VDLF9mLF9mLHVDXSsiXFwpJCIpLHFOdD17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtpdyhlMSxQZyx7Y29weTpmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGUpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpHTnQsZm9ybWF0SGV4OkdOdCxmb3JtYXRIc2w6QjZlLGZvcm1hdFJnYjpXTnQsdG9TdHJpbmc6V050fSk7aXcoaGEsYXcsY0MoZTEse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/dDE6TWF0aC5wb3codDEsZSksbmV3IGhhKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP0FnOk1hdGgucG93KEFnLGUpLG5ldyBoYSh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmpOdCxmb3JtYXRIZXg6ak50LGZvcm1hdFJnYjpYTnQsdG9TdHJpbmc6WE50fSkpO2l3KGdmLFpOdCxjQyhlMSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90MTpNYXRoLnBvdyh0MSxlKSxuZXcgZ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9BZzpNYXRoLnBvdyhBZyxlKSxuZXcgZ2YodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBoYShNdHQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksTXR0KGUsaSxuKSxNdHQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgSk50LFFOdCx0RHQ9TSgoKT0+e0pOdD1NYXRoLlBJLzE4MCxRTnQ9MTgwL01hdGguUEl9KTtmdW5jdGlvbiBINmUoZSl7aWYoZSBpbnN0YW5jZW9mIHIxKXJldHVybiBuZXcgcjEoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtlIGluc3RhbmNlb2YgaGF8fChlPUV0dChlKSk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9KG5EdCpuK2VEdCp0LXJEdCpyKS8obkR0K2VEdC1yRHQpLG89bi1pLGE9KGhDKihyLWkpLUF0dCpvKS9STyxzPU1hdGguc3FydChhKmErbypvKS8oaEMqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSpRTnQtMTIwOk5hTjtyZXR1cm4gbmV3IHIxKGw8MD9sKzM2MDpsLHMsaSxlLm9wYWNpdHkpfWZ1bmN0aW9uICRhKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9INmUoZSk6bmV3IHIxKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiByMShlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259dmFyIGlEdCxDdHQsQXR0LFJPLGhDLGVEdCxyRHQsbkR0LG9EdD1NKCgpPT57d3R0KCk7VHR0KCk7dER0KCk7aUR0PS0uMTQ4NjEsQ3R0PTEuNzgyNzcsQXR0PS0uMjkyMjcsUk89LS45MDY0OSxoQz0xLjk3Mjk0LGVEdD1oQypSTyxyRHQ9aEMqQ3R0LG5EdD1DdHQqQXR0LVJPKmlEdDtpdyhyMSwkYSxjQyhlMSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD90MTpNYXRoLnBvdyh0MSxlKSxuZXcgcjEodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9BZzpNYXRoLnBvdyhBZyxlKSxuZXcgcjEodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKkpOdCx0PSt0aGlzLmwscj1pc05hTih0aGlzLnMpPzA6dGhpcy5zKnQqKDEtdCksbj1NYXRoLmNvcyhlKSxpPU1hdGguc2luKGUpO3JldHVybiBuZXcgaGEoMjU1Kih0K3IqKGlEdCpuK0N0dCppKSksMjU1Kih0K3IqKEF0dCpuK1JPKmkpKSwyNTUqKHQrciooaEMqbikpLHRoaXMub3BhY2l0eSl9fSkpfSk7dmFyIHN3PU0oKCk9PntUdHQoKTtvRHQoKX0pO2Z1bmN0aW9uIFB0dChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGFEdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gUHR0KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIEl0dD1NKCgpPT57fSk7ZnVuY3Rpb24gc0R0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gUHR0KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIGxEdD1NKCgpPT57SXR0KCl9KTtmdW5jdGlvbiBsdyhlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIEx0dD1NKCgpPT57fSk7ZnVuY3Rpb24gY0R0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlK3IqdH19ZnVuY3Rpb24gVjZlKGUsdCxyKXtyZXR1cm4gZT1NYXRoLnBvdyhlLHIpLHQ9TWF0aC5wb3codCxyKS1lLHI9MS9yLGZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnBvdyhlK24qdCxyKX19ZnVuY3Rpb24gdUR0KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2NEdChlLHI+MTgwfHxyPC0xODA/ci0zNjAqTWF0aC5yb3VuZChyLzM2MCk6cik6bHcoaXNOYU4oZSk/dDplKX1mdW5jdGlvbiBoRHQoZSl7cmV0dXJuKGU9K2UpPT0xP25kOmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9WNmUodCxyLGUpOmx3KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIG5kKGUsdCl7dmFyIHI9dC1lO3JldHVybiByP2NEdChlLHIpOmx3KGlzTmFOKGUpP3Q6ZSl9dmFyIGt0dD1NKCgpPT57THR0KCl9KTtmdW5jdGlvbiBmRHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1hdyh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgUnR0LGE1bixzNW4scER0PU0oKCk9PntzdygpO0l0dCgpO2xEdCgpO2t0dCgpO1J0dD1mdW5jdGlvbiBlKHQpe3ZhciByPWhEdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1hdyhpKSkuciwobz1hdyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPW5kKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTthNW49ZkR0KGFEdCksczVuPWZEdChzRHQpfSk7ZnVuY3Rpb24gZER0KGUsdCl7dHx8KHQ9W10pO3ZhciByPWU/TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpOjAsbj10LnNsaWNlKCksaTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGk9MDtpPHI7KytpKW5baV09ZVtpXSooMS1vKSt0W2ldKm87cmV0dXJuIG59fWZ1bmN0aW9uIG1EdChlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9dmFyIGdEdD1NKCgpPT57fSk7ZnVuY3Rpb24gX0R0KGUsdCl7dmFyIHI9dD90Lmxlbmd0aDowLG49ZT9NYXRoLm1pbihyLGUubGVuZ3RoKTowLGk9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KHIpLGE7Zm9yKGE9MDthPG47KythKWlbYV09bjEoZVthXSx0W2FdKTtmb3IoO2E8cjsrK2Epb1thXT10W2FdO3JldHVybiBmdW5jdGlvbihzKXtmb3IoYT0wO2E8bjsrK2Epb1thXT1pW2FdKHMpO3JldHVybiBvfX12YXIgeUR0PU0oKCk9PntOTygpfSk7ZnVuY3Rpb24gdkR0KGUsdCl7dmFyIHI9bmV3IERhdGU7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihuKXtyZXR1cm4gci5zZXRUaW1lKGUqKDEtbikrdCpuKSxyfX12YXIgeER0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5ZihlLHQpe3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24ocil7cmV0dXJuIGUqKDEtcikrdCpyfX12YXIgRE89TSgoKT0+e30pO2Z1bmN0aW9uIGJEdChlLHQpe3ZhciByPXt9LG49e30saTsoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0IikmJihlPXt9KSwodD09PW51bGx8fHR5cGVvZiB0IT0ib2JqZWN0IikmJih0PXt9KTtmb3IoaSBpbiB0KWkgaW4gZT9yW2ldPW4xKGVbaV0sdFtpXSk6bltpXT10W2ldO3JldHVybiBmdW5jdGlvbihvKXtmb3IoaSBpbiByKW5baV09cltpXShvKTtyZXR1cm4gbn19dmFyIHdEdD1NKCgpPT57Tk8oKX0pO2Z1bmN0aW9uIFU2ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gcTZlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KSsiIn19ZnVuY3Rpb24gU0R0KGUsdCl7dmFyIHI9RHR0Lmxhc3RJbmRleD1OdHQubGFzdEluZGV4PTAsbixpLG8sYT0tMSxzPVtdLGw9W107Zm9yKGU9ZSsiIix0PXQrIiI7KG49RHR0LmV4ZWMoZSkpJiYoaT1OdHQuZXhlYyh0KSk7KShvPWkuaW5kZXgpPnImJihvPXQuc2xpY2UocixvKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLChuPW5bMF0pPT09KGk9aVswXSk/c1thXT9zW2FdKz1pOnNbKythXT1pOihzWysrYV09bnVsbCxsLnB1c2goe2k6YSx4OnlmKG4saSl9KSkscj1OdHQubGFzdEluZGV4O3JldHVybiByPHQubGVuZ3RoJiYobz10LnNsaWNlKHIpLHNbYV0/c1thXSs9bzpzWysrYV09bykscy5sZW5ndGg8Mj9sWzBdP3E2ZShsWzBdLngpOlU2ZSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIHU9MCxoO3U8dDsrK3Upc1soaD1sW3VdKS5pXT1oLngoYyk7cmV0dXJuIHMuam9pbigiIil9KX12YXIgRHR0LE50dCxNRHQ9TSgoKT0+e0RPKCk7RHR0PS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxOdHQ9bmV3IFJlZ0V4cChEdHQuc291cmNlLCJnIil9KTtmdW5jdGlvbiBuMShlLHQpe3ZhciByPXR5cGVvZiB0LG47cmV0dXJuIHQ9PW51bGx8fHI9PT0iYm9vbGVhbiI/bHcodCk6KHI9PT0ibnVtYmVyIj95ZjpyPT09InN0cmluZyI/KG49UGcodCkpPyh0PW4sUnR0KTpTRHQ6dCBpbnN0YW5jZW9mIFBnP1J0dDp0IGluc3RhbmNlb2YgRGF0ZT92RHQ6bUR0KHQpP2REdDpBcnJheS5pc0FycmF5KHQpP19EdDp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/YkR0OnlmKShlLHQpfXZhciBOTz1NKCgpPT57c3coKTtwRHQoKTt5RHQoKTt4RHQoKTtETygpO3dEdCgpO01EdCgpO0x0dCgpO2dEdCgpfSk7ZnVuY3Rpb24gT3R0KGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlKigxLXIpK3Qqcil9fXZhciBFRHQ9TSgoKT0+e30pO2Z1bmN0aW9uIFREdChlKXtyZXR1cm4gZnVuY3Rpb24gdChyKXtyPStyO2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT1lKChpPSRhKGkpKS5oLChvPSRhKG8pKS5oKSxzPW5kKGkucyxvLnMpLGw9bmQoaS5sLG8ubCksYz1uZChpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkuaD1hKHUpLGkucz1zKHUpLGkubD1sKE1hdGgucG93KHUscikpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPXQsbn0oMSl9dmFyIEc2ZSxjdyxDRHQ9TSgoKT0+e3N3KCk7a3R0KCk7RzZlPVREdCh1RHQpLGN3PVREdChuZCl9KTt2YXIgdXc9TSgoKT0+e05PKCk7RE8oKTtFRHQoKTtDRHQoKX0pO2Z1bmN0aW9uIGh3KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT089TSgoKT0+e30pO2Z1bmN0aW9uIHpPKGUpe3JldHVybitlfXZhciB6dHQ9TSgoKT0+e30pO2Z1bmN0aW9uIGZDKGUsdCl7cmV0dXJuKHQtPWU9K2UpP2Z1bmN0aW9uKHIpe3JldHVybihyLWUpL3R9Omh3KHQpfWZ1bmN0aW9uIFc2ZShlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQ9K3Qscj0rcik7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBpPD10PzA6aT49cj8xOm4oaSl9fX1mdW5jdGlvbiBZNmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49ZSh0PSt0LHI9K3IpO3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaTw9MD90Omk+PTE/cjpuKGkpfX19ZnVuY3Rpb24gajZlKGUsdCxyLG4pe3ZhciBpPWVbMF0sbz1lWzFdLGE9dFswXSxzPXRbMV07cmV0dXJuIG88aT8oaT1yKG8saSksYT1uKHMsYSkpOihpPXIoaSxvKSxhPW4oYSxzKSksZnVuY3Rpb24obCl7cmV0dXJuIGEoaShsKSl9fWZ1bmN0aW9uIFg2ZShlLHQscixuKXt2YXIgaT1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCktMSxvPW5ldyBBcnJheShpKSxhPW5ldyBBcnJheShpKSxzPS0xO2ZvcihlW2ldPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCksdD10LnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8aTspb1tzXT1yKGVbc10sZVtzKzFdKSxhW3NdPW4odFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihsKXt2YXIgYz1kZihlLGwsMSxpKS0xO3JldHVybiBhW2NdKG9bY10obCkpfX1mdW5jdGlvbiBJZyhlLHQpe3JldHVybiB0LmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKX1mdW5jdGlvbiBpZChlLHQpe3ZhciByPUFEdCxuPUFEdCxpPW4xLG89ITEsYSxzLGw7ZnVuY3Rpb24gYygpe3JldHVybiBhPU1hdGgubWluKHIubGVuZ3RoLG4ubGVuZ3RoKT4yP1g2ZTpqNmUscz1sPW51bGwsdX1mdW5jdGlvbiB1KGgpe3JldHVybihzfHwocz1hKHIsbixvP1c2ZShlKTplLGkpKSkoK2gpfXJldHVybiB1LmludmVydD1mdW5jdGlvbihoKXtyZXR1cm4obHx8KGw9YShuLHIsZkMsbz9ZNmUodCk6dCkpKSgraCl9LHUuZG9tYWluPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXJ3LmNhbGwoaCx6TyksYygpKTpyLnNsaWNlKCl9LHUucmFuZ2U9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49cGwuY2FsbChoKSxjKCkpOm4uc2xpY2UoKX0sdS5yYW5nZVJvdW5kPWZ1bmN0aW9uKGgpe3JldHVybiBuPXBsLmNhbGwoaCksaT1PdHQsYygpfSx1LmNsYW1wPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSEhaCxjKCkpOm99LHUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9aCxjKCkpOml9LGMoKX12YXIgQUR0LHBDPU0oKCk9PnttZigpO3V3KCk7Q2coKTtPTygpO3p0dCgpO0FEdD1bMCwxXX0pO2Z1bmN0aW9uIFBEdChlKXtyZXR1cm4gTWF0aC5hYnMoZT1NYXRoLnJvdW5kKGUpKT49MWUyMT9lLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6ZS50b1N0cmluZygxMCl9ZnVuY3Rpb24gaTEoZSx0KXtpZigocj0oZT10P2UudG9FeHBvbmVudGlhbCh0LTEpOmUudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj1lLnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK2Uuc2xpY2UocisxKV19dmFyIGRDPU0oKCk9Pnt9KTtmdW5jdGlvbiB2ZihlKXtyZXR1cm4gZT1pMShNYXRoLmFicyhlKSksZT9lWzFdOk5hTn12YXIgbUM9TSgoKT0+e2RDKCl9KTtmdW5jdGlvbiBJRHQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtmb3IodmFyIGk9ci5sZW5ndGgsbz1bXSxhPTAscz1lWzBdLGw9MDtpPjAmJnM+MCYmKGwrcysxPm4mJihzPU1hdGgubWF4KDEsbi1sKSksby5wdXNoKHIuc3Vic3RyaW5nKGktPXMsaStzKSksISgobCs9cysxKT5uKSk7KXM9ZVthPShhKzEpJWUubGVuZ3RoXTtyZXR1cm4gby5yZXZlcnNlKCkuam9pbih0KX19dmFyIExEdD1NKCgpPT57fSk7ZnVuY3Rpb24ga0R0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKHIpe3JldHVybiBlWytyXX0pfX12YXIgUkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBMZyhlKXtpZighKHQ9JDZlLmV4ZWMoZSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrZSk7dmFyIHQ7cmV0dXJuIG5ldyBGTyh7ZmlsbDp0WzFdLGFsaWduOnRbMl0sc2lnbjp0WzNdLHN5bWJvbDp0WzRdLHplcm86dFs1XSx3aWR0aDp0WzZdLGNvbW1hOnRbN10scHJlY2lzaW9uOnRbOF0mJnRbOF0uc2xpY2UoMSksdHJpbTp0WzldLHR5cGU6dFsxMF19KX1mdW5jdGlvbiBGTyhlKXt0aGlzLmZpbGw9ZS5maWxsPT09dm9pZCAwPyIgIjplLmZpbGwrIiIsdGhpcy5hbGlnbj1lLmFsaWduPT09dm9pZCAwPyI+IjplLmFsaWduKyIiLHRoaXMuc2lnbj1lLnNpZ249PT12b2lkIDA/Ii0iOmUuc2lnbisiIix0aGlzLnN5bWJvbD1lLnN5bWJvbD09PXZvaWQgMD8iIjplLnN5bWJvbCsiIix0aGlzLnplcm89ISFlLnplcm8sdGhpcy53aWR0aD1lLndpZHRoPT09dm9pZCAwP3ZvaWQgMDorZS53aWR0aCx0aGlzLmNvbW1hPSEhZS5jb21tYSx0aGlzLnByZWNpc2lvbj1lLnByZWNpc2lvbj09PXZvaWQgMD92b2lkIDA6K2UucHJlY2lzaW9uLHRoaXMudHJpbT0hIWUudHJpbSx0aGlzLnR5cGU9ZS50eXBlPT09dm9pZCAwPyIiOmUudHlwZSsiIn12YXIgJDZlLEZ0dD1NKCgpPT57JDZlPS9eKD86KC4pPyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO0xnLnByb3RvdHlwZT1GTy5wcm90b3R5cGU7Rk8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHRoaXMud2lkdGg9PT12b2lkIDA/IiI6TWF0aC5tYXgoMSx0aGlzLndpZHRofDApKSsodGhpcy5jb21tYT8iLCI6IiIpKyh0aGlzLnByZWNpc2lvbj09PXZvaWQgMD8iIjoiLiIrTWF0aC5tYXgoMCx0aGlzLnByZWNpc2lvbnwwKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX19KTtmdW5jdGlvbiBORHQoZSl7dDpmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49LTEsaTtyPHQ7KytyKXN3aXRjaChlW3JdKXtjYXNlIi4iOm49aT1yO2JyZWFrO2Nhc2UiMCI6bj09PTAmJihuPXIpLGk9cjticmVhaztkZWZhdWx0OmlmKCErZVtyXSlicmVhayB0O24+MCYmKG49MCk7YnJlYWt9cmV0dXJuIG4+MD9lLnNsaWNlKDAsbikrZS5zbGljZShpKzEpOmV9dmFyIEREdD1NKCgpPT57fSk7ZnVuY3Rpb24gT0R0KGUsdCl7dmFyIHI9aTEoZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXSxvPWktKEJ0dD1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaS8zKSkpKjMpKzEsYT1uLmxlbmd0aDtyZXR1cm4gbz09PWE/bjpvPmE/bituZXcgQXJyYXkoby1hKzEpLmpvaW4oIjAiKTpvPjA/bi5zbGljZSgwLG8pKyIuIituLnNsaWNlKG8pOiIwLiIrbmV3IEFycmF5KDEtbykuam9pbigiMCIpK2kxKGUsTWF0aC5tYXgoMCx0K28tMSkpWzBdfXZhciBCdHQsSHR0PU0oKCk9PntkQygpfSk7ZnVuY3Rpb24gVnR0KGUsdCl7dmFyIHI9aTEoZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXTtyZXR1cm4gaTwwPyIwLiIrbmV3IEFycmF5KC1pKS5qb2luKCIwIikrbjpuLmxlbmd0aD5pKzE/bi5zbGljZSgwLGkrMSkrIi4iK24uc2xpY2UoaSsxKTpuK25ldyBBcnJheShpLW4ubGVuZ3RoKzIpLmpvaW4oIjAiKX12YXIgekR0PU0oKCk9PntkQygpfSk7dmFyIFV0dCxGRHQ9TSgoKT0+e2RDKCk7SHR0KCk7ekR0KCk7VXR0PXsiJSI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZSoxMDApLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQoZSkudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrIiJ9LGQ6UER0LGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b0V4cG9uZW50aWFsKHQpfSxmOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9GaXhlZCh0KX0sZzpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvUHJlY2lzaW9uKHQpfSxvOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDgpfSxwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFZ0dChlKjEwMCx0KX0scjpWdHQsczpPRHQsWDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZygxNil9fX0pO2Z1bmN0aW9uIHF0dChlKXtyZXR1cm4gZX12YXIgQkR0PU0oKCk9Pnt9KTtmdW5jdGlvbiBVRHQoZSl7dmFyIHQ9ZS5ncm91cGluZz09PXZvaWQgMHx8ZS50aG91c2FuZHM9PT12b2lkIDA/cXR0OklEdChIRHQuY2FsbChlLmdyb3VwaW5nLE51bWJlciksZS50aG91c2FuZHMrIiIpLHI9ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzBdKyIiLG49ZS5jdXJyZW5jeT09PXZvaWQgMD8iIjplLmN1cnJlbmN5WzFdKyIiLGk9ZS5kZWNpbWFsPT09dm9pZCAwPyIuIjplLmRlY2ltYWwrIiIsbz1lLm51bWVyYWxzPT09dm9pZCAwP3F0dDprRHQoSER0LmNhbGwoZS5udW1lcmFscyxTdHJpbmcpKSxhPWUucGVyY2VudD09PXZvaWQgMD8iJSI6ZS5wZXJjZW50KyIiLHM9ZS5taW51cz09PXZvaWQgMD8iLSI6ZS5taW51cysiIixsPWUubmFuPT09dm9pZCAwPyJOYU4iOmUubmFuKyIiO2Z1bmN0aW9uIGMoaCl7aD1MZyhoKTt2YXIgZj1oLmZpbGwscD1oLmFsaWduLGQ9aC5zaWduLGc9aC5zeW1ib2wsXz1oLnplcm8seT1oLndpZHRoLHg9aC5jb21tYSxiPWgucHJlY2lzaW9uLFM9aC50cmltLEM9aC50eXBlO0M9PT0ibiI/KHg9ITAsQz0iZyIpOlV0dFtDXXx8KGI9PT12b2lkIDAmJihiPTEyKSxTPSEwLEM9ImciKSwoX3x8Zj09PSIwIiYmcD09PSI9IikmJihfPSEwLGY9IjAiLHA9Ij0iKTt2YXIgUD1nPT09IiQiP3I6Zz09PSIjIiYmL1tib3hYXS8udGVzdChDKT8iMCIrQy50b0xvd2VyQ2FzZSgpOiIiLGs9Zz09PSIkIj9uOi9bJXBdLy50ZXN0KEMpP2E6IiIsTz1VdHRbQ10sRD0vW2RlZmdwcnMlXS8udGVzdChDKTtiPWI9PT12b2lkIDA/NjovW2dwcnNdLy50ZXN0KEMpP01hdGgubWF4KDEsTWF0aC5taW4oMjEsYikpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsYikpO2Z1bmN0aW9uIEIoSSl7dmFyIEw9UCxSPWssRix6LFU7aWYoQz09PSJjIilSPU8oSSkrUixJPSIiO2Vsc2V7ST0rSTt2YXIgVz1JPDB8fDEvSTwwO2lmKEk9aXNOYU4oSSk/bDpPKE1hdGguYWJzKEkpLGIpLFMmJihJPU5EdChJKSksVyYmK0k9PTAmJmQhPT0iKyImJihXPSExKSxMPShXP2Q9PT0iKCI/ZDpzOmQ9PT0iLSJ8fGQ9PT0iKCI/IiI6ZCkrTCxSPShDPT09InMiP1ZEdFs4K0J0dC8zXToiIikrUisoVyYmZD09PSIoIj8iKSI6IiIpLEQpe2ZvcihGPS0xLHo9SS5sZW5ndGg7KytGPHo7KWlmKFU9SS5jaGFyQ29kZUF0KEYpLDQ4PlV8fFU+NTcpe1I9KFU9PT00Nj9pK0kuc2xpY2UoRisxKTpJLnNsaWNlKEYpKStSLEk9SS5zbGljZSgwLEYpO2JyZWFrfX19eCYmIV8mJihJPXQoSSwxLzApKTt2YXIgWj1MLmxlbmd0aCtJLmxlbmd0aCtSLmxlbmd0aCxydD1aPHk/bmV3IEFycmF5KHktWisxKS5qb2luKGYpOiIiO3N3aXRjaCh4JiZfJiYoST10KHJ0K0kscnQubGVuZ3RoP3ktUi5sZW5ndGg6MS8wKSxydD0iIikscCl7Y2FzZSI8IjpJPUwrSStSK3J0O2JyZWFrO2Nhc2UiPSI6ST1MK3J0K0krUjticmVhaztjYXNlIl4iOkk9cnQuc2xpY2UoMCxaPXJ0Lmxlbmd0aD4+MSkrTCtJK1IrcnQuc2xpY2UoWik7YnJlYWs7ZGVmYXVsdDpJPXJ0K0wrSStSO2JyZWFrfXJldHVybiBvKEkpfXJldHVybiBCLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGgrIiJ9LEJ9ZnVuY3Rpb24gdShoLGYpe3ZhciBwPWMoKGg9TGcoaCksaC50eXBlPSJmIixoKSksZD1NYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IodmYoZikvMykpKSozLGc9TWF0aC5wb3coMTAsLWQpLF89VkR0WzgrZC8zXTtyZXR1cm4gZnVuY3Rpb24oeSl7cmV0dXJuIHAoZyp5KStffX1yZXR1cm57Zm9ybWF0OmMsZm9ybWF0UHJlZml4OnV9fXZhciBIRHQsVkR0LHFEdD1NKCgpPT57bUMoKTtMRHQoKTtSRHQoKTtGdHQoKTtERHQoKTtGRHQoKTtIdHQoKTtCRHQoKTtIRHQ9QXJyYXkucHJvdG90eXBlLm1hcCxWRHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceEI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl19KTtmdW5jdGlvbiBHdHQoZSl7cmV0dXJuIEJPPVVEdChlKSxmdz1CTy5mb3JtYXQsSE89Qk8uZm9ybWF0UHJlZml4LEJPfXZhciBCTyxmdyxITyxHRHQ9TSgoKT0+e3FEdCgpO0d0dCh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSl9KTtmdW5jdGlvbiBXdHQoZSl7cmV0dXJuIE1hdGgubWF4KDAsLXZmKE1hdGguYWJzKGUpKSl9dmFyIFdEdD1NKCgpPT57bUMoKX0pO2Z1bmN0aW9uIFl0dChlLHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcih2Zih0KS8zKSkpKjMtdmYoTWF0aC5hYnMoZSkpKX12YXIgWUR0PU0oKCk9PnttQygpfSk7ZnVuY3Rpb24ganR0KGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAsdmYodCktdmYoZSkpKzF9dmFyIGpEdD1NKCgpPT57bUMoKX0pO3ZhciBYdHQ9TSgoKT0+e0dEdCgpO0Z0dCgpO1dEdCgpO1lEdCgpO2pEdCgpfSk7ZnVuY3Rpb24gWER0KGUsdCxyKXt2YXIgbj1lWzBdLGk9ZVtlLmxlbmd0aC0xXSxvPVp5KG4saSx0PT1udWxsPzEwOnQpLGE7c3dpdGNoKHI9TGcocj09bnVsbD8iLGYiOnIpLHIudHlwZSl7Y2FzZSJzIjp7dmFyIHM9TWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnMoaSkpO3JldHVybiByLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9WXR0KG8scykpJiYoci5wcmVjaXNpb249YSksSE8ocixzKX1jYXNlIiI6Y2FzZSJlIjpjYXNlImciOmNhc2UicCI6Y2FzZSJyIjp7ci5wcmVjaXNpb249PW51bGwmJiFpc05hTihhPWp0dChvLE1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKGkpKSkpJiYoci5wcmVjaXNpb249YS0oci50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntyLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKGE9V3R0KG8pKSYmKHIucHJlY2lzaW9uPWEtKHIudHlwZT09PSIlIikqMik7YnJlYWt9fXJldHVybiBmdyhyKX12YXIgJER0PU0oKCk9PnttZigpO1h0dCgpfSk7ZnVuY3Rpb24gb2QoZSl7dmFyIHQ9ZS5kb21haW47cmV0dXJuIGUudGlja3M9ZnVuY3Rpb24ocil7dmFyIG49dCgpO3JldHVybiBhQyhuWzBdLG5bbi5sZW5ndGgtMV0scj09bnVsbD8xMDpyKX0sZS50aWNrRm9ybWF0PWZ1bmN0aW9uKHIsbil7cmV0dXJuIFhEdCh0KCkscixuKX0sZS5uaWNlPWZ1bmN0aW9uKHIpe3I9PW51bGwmJihyPTEwKTt2YXIgbj10KCksaT0wLG89bi5sZW5ndGgtMSxhPW5baV0scz1uW29dLGw7cmV0dXJuIHM8YSYmKGw9YSxhPXMscz1sLGw9aSxpPW8sbz1sKSxsPWV3KGEscyxyKSxsPjA/KGE9TWF0aC5mbG9vcihhL2wpKmwscz1NYXRoLmNlaWwocy9sKSpsLGw9ZXcoYSxzLHIpKTpsPDAmJihhPU1hdGguY2VpbChhKmwpL2wscz1NYXRoLmZsb29yKHMqbCkvbCxsPWV3KGEscyxyKSksbD4wPyhuW2ldPU1hdGguZmxvb3IoYS9sKSpsLG5bb109TWF0aC5jZWlsKHMvbCkqbCx0KG4pKTpsPDAmJihuW2ldPU1hdGguY2VpbChhKmwpL2wsbltvXT1NYXRoLmZsb29yKHMqbCkvbCx0KG4pKSxlfSxlfWZ1bmN0aW9uIFZPKCl7dmFyIGU9aWQoZkMseWYpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoZSxWTygpKX0sb2QoZSl9dmFyIHB3PU0oKCk9PnttZigpO3V3KCk7cEMoKTskRHQoKX0pO2Z1bmN0aW9uIFVPKCl7dmFyIGU9WzAsMV07ZnVuY3Rpb24gdChyKXtyZXR1cm4rcn1yZXR1cm4gdC5pbnZlcnQ9dCx0LmRvbWFpbj10LnJhbmdlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXJ3LmNhbGwocix6TyksdCk6ZS5zbGljZSgpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gVU8oKS5kb21haW4oZSl9LG9kKHQpfXZhciBLRHQ9TSgoKT0+e0NnKCk7cHcoKTt6dHQoKX0pO2Z1bmN0aW9uIHFPKGUsdCl7ZT1lLnNsaWNlKCk7dmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lW3JdLG89ZVtuXSxhO3JldHVybiBvPGkmJihhPXIscj1uLG49YSxhPWksaT1vLG89YSksZVtyXT10LmZsb29yKGkpLGVbbl09dC5jZWlsKG8pLGV9dmFyICR0dD1NKCgpPT57fSk7ZnVuY3Rpb24gSzZlKGUsdCl7cmV0dXJuKHQ9TWF0aC5sb2codC9lKSk/ZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubG9nKHIvZSkvdH06aHcodCl9ZnVuY3Rpb24gWjZlKGUsdCl7cmV0dXJuIGU8MD9mdW5jdGlvbihyKXtyZXR1cm4tTWF0aC5wb3coLXQscikqTWF0aC5wb3coLWUsMS1yKX06ZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgucG93KHQscikqTWF0aC5wb3coZSwxLXIpfX1mdW5jdGlvbiBKNmUoZSl7cmV0dXJuIGlzRmluaXRlKGUpPysoIjFlIitlKTplPDA/MDplfWZ1bmN0aW9uIFpEdChlKXtyZXR1cm4gZT09PTEwP0o2ZTplPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhlLHQpfX1mdW5jdGlvbiBKRHQoZSl7cmV0dXJuIGU9PT1NYXRoLkU/TWF0aC5sb2c6ZT09PTEwJiZNYXRoLmxvZzEwfHxlPT09MiYmTWF0aC5sb2cyfHwoZT1NYXRoLmxvZyhlKSxmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvZX0pfWZ1bmN0aW9uIFFEdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLWUoLXQpfX1mdW5jdGlvbiBHTygpe3ZhciBlPWlkKEs2ZSxaNmUpLmRvbWFpbihbMSwxMF0pLHQ9ZS5kb21haW4scj0xMCxuPUpEdCgxMCksaT1aRHQoMTApO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbj1KRHQociksaT1aRHQociksdCgpWzBdPDAmJihuPVFEdChuKSxpPVFEdChpKSksZX1yZXR1cm4gZS5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSthLG8oKSk6cn0sZS5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoYSksbygpKTp0KCl9LGUudGlja3M9ZnVuY3Rpb24oYSl7dmFyIHM9dCgpLGw9c1swXSxjPXNbcy5sZW5ndGgtMV0sdTsodT1jPGwpJiYoaD1sLGw9YyxjPWgpO3ZhciBoPW4obCksZj1uKGMpLHAsZCxnLF89YT09bnVsbD8xMDorYSx5PVtdO2lmKCEociUxKSYmZi1oPF8pe2lmKGg9TWF0aC5yb3VuZChoKS0xLGY9TWF0aC5yb3VuZChmKSsxLGw+MCl7Zm9yKDtoPGY7KytoKWZvcihkPTEscD1pKGgpO2Q8cjsrK2QpaWYoZz1wKmQsIShnPGwpKXtpZihnPmMpYnJlYWs7eS5wdXNoKGcpfX1lbHNlIGZvcig7aDxmOysraClmb3IoZD1yLTEscD1pKGgpO2Q+PTE7LS1kKWlmKGc9cCpkLCEoZzxsKSl7aWYoZz5jKWJyZWFrO3kucHVzaChnKX19ZWxzZSB5PWFDKGgsZixNYXRoLm1pbihmLWgsXykpLm1hcChpKTtyZXR1cm4gdT95LnJldmVyc2UoKTp5fSxlLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxzKXtpZihzPT1udWxsJiYocz1yPT09MTA/Ii4wZSI6IiwiKSx0eXBlb2YgcyE9ImZ1bmN0aW9uIiYmKHM9ZncocykpLGE9PT0xLzApcmV0dXJuIHM7YT09bnVsbCYmKGE9MTApO3ZhciBsPU1hdGgubWF4KDEsciphL2UudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbihjKXt2YXIgdT1jL2koTWF0aC5yb3VuZChuKGMpKSk7cmV0dXJuIHUqcjxyLS41JiYodSo9ciksdTw9bD9zKGMpOiIifX0sZS5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHQocU8odCgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gaShNYXRoLmZsb29yKG4oYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gaShNYXRoLmNlaWwobihhKSkpfX0pKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIElnKGUsR08oKS5iYXNlKHIpKX0sZX12YXIgdE90PU0oKCk9PnttZigpO1h0dCgpO09PKCk7JHR0KCk7cEMoKX0pO2Z1bmN0aW9uIGR3KGUsdCl7cmV0dXJuIGU8MD8tTWF0aC5wb3coLWUsdCk6TWF0aC5wb3coZSx0KX1mdW5jdGlvbiBnQygpe3ZhciBlPTEsdD1pZChuLGkpLHI9dC5kb21haW47ZnVuY3Rpb24gbihvLGEpe3JldHVybihhPWR3KGEsZSktKG89ZHcobyxlKSkpP2Z1bmN0aW9uKHMpe3JldHVybihkdyhzLGUpLW8pL2F9Omh3KGEpfWZ1bmN0aW9uIGkobyxhKXtyZXR1cm4gYT1kdyhhLGUpLShvPWR3KG8sZSkpLGZ1bmN0aW9uKHMpe3JldHVybiBkdyhvK2EqcywxL2UpfX1yZXR1cm4gdC5leHBvbmVudD1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rbyxyKHIoKSkpOmV9LHQuY29weT1mdW5jdGlvbigpe3JldHVybiBJZyh0LGdDKCkuZXhwb25lbnQoZSkpfSxvZCh0KX1mdW5jdGlvbiBlT3QoKXtyZXR1cm4gZ0MoKS5leHBvbmVudCguNSl9dmFyIHJPdD1NKCgpPT57T08oKTtwdygpO3BDKCl9KTtmdW5jdGlvbiBXTygpe3ZhciBlPVtdLHQ9W10scj1bXTtmdW5jdGlvbiBuKCl7dmFyIG89MCxhPU1hdGgubWF4KDEsdC5sZW5ndGgpO2ZvcihyPW5ldyBBcnJheShhLTEpOysrbzxhOylyW28tMV09c0MoZSxvL2EpO3JldHVybiBpfWZ1bmN0aW9uIGkobyl7aWYoIWlzTmFOKG89K28pKXJldHVybiB0W2RmKHIsbyldfXJldHVybiBpLmludmVydEV4dGVudD1mdW5jdGlvbihvKXt2YXIgYT10LmluZGV4T2Yobyk7cmV0dXJuIGE8MD9bTmFOLE5hTl06W2E+MD9yW2EtMV06ZVswXSxhPHIubGVuZ3RoP3JbYV06ZVtlLmxlbmd0aC0xXV19LGkuZG9tYWluPWZ1bmN0aW9uKG8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIGE9MCxzPW8ubGVuZ3RoLGw7YTxzOysrYSlsPW9bYV0sbCE9bnVsbCYmIWlzTmFOKGw9K2wpJiZlLnB1c2gobCk7cmV0dXJuIGUuc29ydChwZiksbigpfSxpLnJhbmdlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXBsLmNhbGwobyksbigpKTp0LnNsaWNlKCl9LGkucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFdPKCkuZG9tYWluKGUpLnJhbmdlKHQpfSxpfXZhciBuT3Q9TSgoKT0+e21mKCk7Q2coKX0pO2Z1bmN0aW9uIFlPKCl7dmFyIGU9MCx0PTEscj0xLG49Wy41XSxpPVswLDFdO2Z1bmN0aW9uIG8ocyl7aWYoczw9cylyZXR1cm4gaVtkZihuLHMsMCxyKV19ZnVuY3Rpb24gYSgpe3ZhciBzPS0xO2ZvcihuPW5ldyBBcnJheShyKTsrK3M8cjspbltzXT0oKHMrMSkqdC0ocy1yKSplKS8ocisxKTtyZXR1cm4gb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3NbMF0sdD0rc1sxXSxhKCkpOltlLHRdfSxvLnJhbmdlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPShpPXBsLmNhbGwocykpLmxlbmd0aC0xLGEoKSk6aS5zbGljZSgpfSxvLmludmVydEV4dGVudD1mdW5jdGlvbihzKXt2YXIgbD1pLmluZGV4T2Yocyk7cmV0dXJuIGw8MD9bTmFOLE5hTl06bDwxP1tlLG5bMF1dOmw+PXI/W25bci0xXSx0XTpbbltsLTFdLG5bbF1dfSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gWU8oKS5kb21haW4oW2UsdF0pLnJhbmdlKGkpfSxvZChvKX12YXIgaU90PU0oKCk9PnttZigpO0NnKCk7cHcoKX0pO2Z1bmN0aW9uIGpPKCl7dmFyIGU9Wy41XSx0PVswLDFdLHI9MTtmdW5jdGlvbiBuKGkpe2lmKGk8PWkpcmV0dXJuIHRbZGYoZSxpLDAscildfXJldHVybiBuLmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wbC5jYWxsKGkpLHI9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgtMSksbik6ZS5zbGljZSgpfSxuLnJhbmdlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXBsLmNhbGwoaSkscj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aC0xKSxuKTp0LnNsaWNlKCl9LG4uaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGkpe3ZhciBvPXQuaW5kZXhPZihpKTtyZXR1cm5bZVtvLTFdLGVbb11dfSxuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gak8oKS5kb21haW4oZSkucmFuZ2UodCl9LG59dmFyIG9PdD1NKCgpPT57bWYoKTtDZygpfSk7ZnVuY3Rpb24gTnIoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb30saS5jZWlsPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoby0xKSksdChvLDEpLGUobyksb30saS5yb3VuZD1mdW5jdGlvbihvKXt2YXIgYT1pKG8pLHM9aS5jZWlsKG8pO3JldHVybiBvLWE8cy1vP2E6c30saS5vZmZzZXQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdChvPW5ldyBEYXRlKCtvKSxhPT1udWxsPzE6TWF0aC5mbG9vcihhKSksb30saS5yYW5nZT1mdW5jdGlvbihvLGEscyl7dmFyIGw9W10sYztpZihvPWkuY2VpbChvKSxzPXM9PW51bGw/MTpNYXRoLmZsb29yKHMpLCEobzxhKXx8IShzPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtvKSksdChvLHMpLGUobyk7d2hpbGUoYzxvJiZvPGEpO3JldHVybiBsfSxpLmZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4gTnIoZnVuY3Rpb24oYSl7aWYoYT49YSlmb3IoO2UoYSksIW8oYSk7KWEuc2V0VGltZShhLTEpfSxmdW5jdGlvbihhLHMpe2lmKGE+PWEpaWYoczwwKWZvcig7KytzPD0wOylmb3IoO3QoYSwtMSksIW8oYSk7KTtlbHNlIGZvcig7LS1zPj0wOylmb3IoO3QoYSwxKSwhbyhhKTspO30pfSxyJiYoaS5jb3VudD1mdW5jdGlvbihvLGEpe3JldHVybiBLdHQuc2V0VGltZSgrbyksWnR0LnNldFRpbWUoK2EpLGUoS3R0KSxlKFp0dCksTWF0aC5mbG9vcihyKEt0dCxadHQpKX0saS5ldmVyeT1mdW5jdGlvbihvKXtyZXR1cm4gbz1NYXRoLmZsb29yKG8pLCFpc0Zpbml0ZShvKXx8IShvPjApP251bGw6bz4xP2kuZmlsdGVyKG4/ZnVuY3Rpb24oYSl7cmV0dXJuIG4oYSklbz09PTB9OmZ1bmN0aW9uKGEpe3JldHVybiBpLmNvdW50KDAsYSklbz09PTB9KTppfSksaX12YXIgS3R0LFp0dCxLYT1NKCgpPT57S3R0PW5ldyBEYXRlLFp0dD1uZXcgRGF0ZX0pO3ZhciBYTyxtdyxhT3Qsc090PU0oKCk9PntLYSgpO1hPPU5yKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7WE8uZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9OcihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpYT307bXc9WE8sYU90PVhPLnJhbmdlfSk7dmFyIG8xLHdjLGd3LCRPLEtPLHhmPU0oKCk9PntvMT0xZTMsd2M9NmU0LGd3PTM2ZTUsJE89ODY0ZTUsS089NjA0OGU1fSk7dmFyIGxPdCxfdyxjT3QsdU90PU0oKCk9PntLYSgpO3hmKCk7bE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCkpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Km8xKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9vMX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDU2Vjb25kcygpfSksX3c9bE90LGNPdD1sT3QucmFuZ2V9KTt2YXIgaE90LEp0dCxRNmUsZk90PU0oKCk9PntLYSgpO3hmKCk7aE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShlLWUuZ2V0TWlsbGlzZWNvbmRzKCktZS5nZXRTZWNvbmRzKCkqbzEpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KndjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS93Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TWludXRlcygpfSksSnR0PWhPdCxRNmU9aE90LnJhbmdlfSk7dmFyIHBPdCxRdHQsdEllLGRPdD1NKCgpPT57S2EoKTt4ZigpO3BPdD1OcihmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpKm8xLWUuZ2V0TWludXRlcygpKndjKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpndyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvZ3d9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9KSxRdHQ9cE90LHRJZT1wT3QucmFuZ2V9KTt2YXIgbU90LHl3LGVJZSxnT3Q9TSgoKT0+e0thKCk7eGYoKTttT3Q9TnIoZnVuY3Rpb24oZSl7ZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldERhdGUoZS5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZS0odC5nZXRUaW1lem9uZU9mZnNldCgpLWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkqd2MpLyRPfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXREYXRlKCktMX0pLHl3PW1PdCxlSWU9bU90LnJhbmdlfSk7ZnVuY3Rpb24gYTEoZSl7cmV0dXJuIE5yKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqd2MpL0tPfSl9dmFyIHMxLHZ3LF9PdCx5T3Qsa2csdk90LHhPdCxiT3QsckllLG5JZSxpSWUsb0llLGFJZSxzSWUsd090PU0oKCk9PntLYSgpO3hmKCk7czE9YTEoMCksdnc9YTEoMSksX090PWExKDIpLHlPdD1hMSgzKSxrZz1hMSg0KSx2T3Q9YTEoNSkseE90PWExKDYpLGJPdD1zMS5yYW5nZSxySWU9dncucmFuZ2UsbkllPV9PdC5yYW5nZSxpSWU9eU90LnJhbmdlLG9JZT1rZy5yYW5nZSxhSWU9dk90LnJhbmdlLHNJZT14T3QucmFuZ2V9KTt2YXIgU090LHRldCxsSWUsTU90PU0oKCk9PntLYSgpO1NPdD1OcihmdW5jdGlvbihlKXtlLnNldERhdGUoMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldE1vbnRoKGUuZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRNb250aCgpLWUuZ2V0TW9udGgoKSsodC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1vbnRoKCl9KSx0ZXQ9U090LGxJZT1TT3QucmFuZ2V9KTt2YXIgZWV0LGFkLGNJZSxFT3Q9TSgoKT0+e0thKCk7ZWV0PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7ZWV0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpOcihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07YWQ9ZWV0LGNJZT1lZXQucmFuZ2V9KTt2YXIgVE90LHJldCx1SWUsQ090PU0oKCk9PntLYSgpO3hmKCk7VE90PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDU2Vjb25kcygwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KndjKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS93Y30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTWludXRlcygpfSkscmV0PVRPdCx1SWU9VE90LnJhbmdlfSk7dmFyIEFPdCxuZXQsaEllLFBPdD1NKCgpPT57S2EoKTt4ZigpO0FPdD1OcihmdW5jdGlvbihlKXtlLnNldFVUQ01pbnV0ZXMoMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0Kmd3KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9nd30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDSG91cnMoKX0pLG5ldD1BT3QsaEllPUFPdC5yYW5nZX0pO3ZhciBJT3QseHcsZkllLExPdD1NKCgpPT57S2EoKTt4ZigpO0lPdD1OcihmdW5jdGlvbihlKXtlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS8kT30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRGF0ZSgpLTF9KSx4dz1JT3QsZkllPUlPdC5yYW5nZX0pO2Z1bmN0aW9uIGwxKGUpe3JldHVybiBOcihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1lKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL0tPfSl9dmFyIGMxLGJ3LGtPdCxST3QsUmcsTk90LERPdCxPT3QscEllLGRJZSxtSWUsZ0llLF9JZSx5SWUsek90PU0oKCk9PntLYSgpO3hmKCk7YzE9bDEoMCksYnc9bDEoMSksa090PWwxKDIpLFJPdD1sMSgzKSxSZz1sMSg0KSxOT3Q9bDEoNSksRE90PWwxKDYpLE9PdD1jMS5yYW5nZSxwSWU9YncucmFuZ2UsZEllPWtPdC5yYW5nZSxtSWU9Uk90LnJhbmdlLGdJZT1SZy5yYW5nZSxfSWU9Tk90LnJhbmdlLHlJZT1ET3QucmFuZ2V9KTt2YXIgRk90LGlldCx2SWUsQk90PU0oKCk9PntLYSgpO0ZPdD1OcihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSxpZXQ9Rk90LHZJZT1GT3QucmFuZ2V9KTt2YXIgb2V0LHNkLHhJZSxIT3Q9TSgoKT0+e0thKCk7b2V0PU5yKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTW9udGgoMCwxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpfSk7b2V0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpOcihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07c2Q9b2V0LHhJZT1vZXQucmFuZ2V9KTt2YXIgWk89TSgoKT0+e3NPdCgpO3VPdCgpO2ZPdCgpO2RPdCgpO2dPdCgpO3dPdCgpO01PdCgpO0VPdCgpO0NPdCgpO1BPdCgpO0xPdCgpO3pPdCgpO0JPdCgpO0hPdCgpfSk7ZnVuY3Rpb24gYWV0KGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKX1mdW5jdGlvbiBzZXQoZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQygtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpO3JldHVybiB0LnNldFVUQ0Z1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSl9ZnVuY3Rpb24gX0MoZSx0LHIpe3JldHVybnt5OmUsbTp0LGQ6cixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIGNldChlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz15QyhpKSx1PXZDKGkpLGg9eUMobyksZj12QyhvKSxwPXlDKGEpLGQ9dkMoYSksZz15QyhzKSxfPXZDKHMpLHk9eUMobCkseD12QyhsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDpZT3QsZTpZT3QsZjpxSWUsZzpRSWUsRzplOWUsSDpISWUsSTpWSWUsajpVSWUsTDpaT3QsbTpHSWUsTTpXSWUscDpzdCxxOlN0LFE6JE90LHM6S090LFM6WUllLHU6akllLFU6WEllLFY6JEllLHc6S0llLFc6WkllLHg6bnVsbCxYOm51bGwseTpKSWUsWTp0OWUsWjpyOWUsIiUiOlhPdH0sUz17YTpidCxBOk10LGI6bHQsQjpLdCxjOm51bGwsZDpqT3QsZTpqT3QsZjphOWUsZzpnOWUsRzp5OWUsSDpuOWUsSTppOWUsajpvOWUsTDpRT3QsbTpzOWUsTTpsOWUscDpfdCxxOmN0LFE6JE90LHM6S090LFM6YzllLHU6dTllLFU6aDllLFY6ZjllLHc6cDllLFc6ZDllLHg6bnVsbCxYOm51bGwseTptOWUsWTpfOWUsWjp2OWUsIiUiOlhPdH0sQz17YTpCLEE6SSxiOkwsQjpSLGM6RixkOkdPdCxlOkdPdCxmOk9JZSxnOnFPdCxHOlVPdCxIOldPdCxJOldPdCxqOmtJZSxMOkRJZSxtOkxJZSxNOlJJZSxwOkQscTpJSWUsUTpGSWUsczpCSWUsUzpOSWUsdTpFSWUsVTpUSWUsVjpDSWUsdzpNSWUsVzpBSWUseDp6LFg6VSx5OnFPdCxZOlVPdCxaOlBJZSwiJSI6ekllfTtiLng9UChyLGIpLGIuWD1QKG4sYiksYi5jPVAodCxiKSxTLng9UChyLFMpLFMuWD1QKG4sUyksUy5jPVAodCxTKTtmdW5jdGlvbiBQKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9W10scHQ9LTEsaHQ9MCx3dD1YLmxlbmd0aCxrdCxpZSxlZTtmb3IoZHQgaW5zdGFuY2VvZiBEYXRlfHwoZHQ9bmV3IERhdGUoK2R0KSk7KytwdDx3dDspWC5jaGFyQ29kZUF0KHB0KT09PTM3JiYocS5wdXNoKFguc2xpY2UoaHQscHQpKSwoaWU9Vk90W2t0PVguY2hhckF0KCsrcHQpXSkhPW51bGw/a3Q9WC5jaGFyQXQoKytwdCk6aWU9a3Q9PT0iZSI/IiAiOiIwIiwoZWU9ZXRba3RdKSYmKGt0PWVlKGR0LGllKSkscS5wdXNoKGt0KSxodD1wdCsxKTtyZXR1cm4gcS5wdXNoKFguc2xpY2UoaHQscHQpKSxxLmpvaW4oIiIpfX1mdW5jdGlvbiBrKFgsZXQpe3JldHVybiBmdW5jdGlvbihkdCl7dmFyIHE9X0MoMTkwMCx2b2lkIDAsMSkscHQ9TyhxLFgsZHQrPSIiLDApLGh0LHd0O2lmKHB0IT1kdC5sZW5ndGgpcmV0dXJuIG51bGw7aWYoIlEiaW4gcSlyZXR1cm4gbmV3IERhdGUocS5RKTtpZigicyJpbiBxKXJldHVybiBuZXcgRGF0ZShxLnMqMWUzKygiTCJpbiBxP3EuTDowKSk7aWYoZXQmJiEoIloiaW4gcSkmJihxLlo9MCksInAiaW4gcSYmKHEuSD1xLkglMTIrcS5wKjEyKSxxLm09PT12b2lkIDAmJihxLm09InEiaW4gcT9xLnE6MCksIlYiaW4gcSl7aWYocS5WPDF8fHEuVj41MylyZXR1cm4gbnVsbDsidyJpbiBxfHwocS53PTEpLCJaImluIHE/KGh0PXNldChfQyhxLnksMCwxKSksd3Q9aHQuZ2V0VVRDRGF5KCksaHQ9d3Q+NHx8d3Q9PT0wP2J3LmNlaWwoaHQpOmJ3KGh0KSxodD14dy5vZmZzZXQoaHQsKHEuVi0xKSo3KSxxLnk9aHQuZ2V0VVRDRnVsbFllYXIoKSxxLm09aHQuZ2V0VVRDTW9udGgoKSxxLmQ9aHQuZ2V0VVRDRGF0ZSgpKyhxLncrNiklNyk6KGh0PWFldChfQyhxLnksMCwxKSksd3Q9aHQuZ2V0RGF5KCksaHQ9d3Q+NHx8d3Q9PT0wP3Z3LmNlaWwoaHQpOnZ3KGh0KSxodD15dy5vZmZzZXQoaHQsKHEuVi0xKSo3KSxxLnk9aHQuZ2V0RnVsbFllYXIoKSxxLm09aHQuZ2V0TW9udGgoKSxxLmQ9aHQuZ2V0RGF0ZSgpKyhxLncrNiklNyl9ZWxzZSgiVyJpbiBxfHwiVSJpbiBxKSYmKCJ3ImluIHF8fChxLnc9InUiaW4gcT9xLnUlNzoiVyJpbiBxPzE6MCksd3Q9IloiaW4gcT9zZXQoX0MocS55LDAsMSkpLmdldFVUQ0RheSgpOmFldChfQyhxLnksMCwxKSkuZ2V0RGF5KCkscS5tPTAscS5kPSJXImluIHE/KHEudys2KSU3K3EuVyo3LSh3dCs1KSU3OnEudytxLlUqNy0od3QrNiklNyk7cmV0dXJuIloiaW4gcT8ocS5IKz1xLlovMTAwfDAscS5NKz1xLlolMTAwLHNldChxKSk6YWV0KHEpfX1mdW5jdGlvbiBPKFgsZXQsZHQscSl7Zm9yKHZhciBwdD0wLGh0PWV0Lmxlbmd0aCx3dD1kdC5sZW5ndGgsa3QsaWU7cHQ8aHQ7KXtpZihxPj13dClyZXR1cm4tMTtpZihrdD1ldC5jaGFyQ29kZUF0KHB0KyspLGt0PT09Mzcpe2lmKGt0PWV0LmNoYXJBdChwdCsrKSxpZT1DW2t0IGluIFZPdD9ldC5jaGFyQXQocHQrKyk6a3RdLCFpZXx8KHE9aWUoWCxkdCxxKSk8MClyZXR1cm4tMX1lbHNlIGlmKGt0IT1kdC5jaGFyQ29kZUF0KHErKykpcmV0dXJuLTF9cmV0dXJuIHF9ZnVuY3Rpb24gRChYLGV0LGR0KXt2YXIgcT1jLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5wPXVbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQihYLGV0LGR0KXt2YXIgcT1wLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWRbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gSShYLGV0LGR0KXt2YXIgcT1oLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC53PWZbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTChYLGV0LGR0KXt2YXIgcT15LmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPXhbcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUihYLGV0LGR0KXt2YXIgcT1nLmV4ZWMoZXQuc2xpY2UoZHQpKTtyZXR1cm4gcT8oWC5tPV9bcVswXS50b0xvd2VyQ2FzZSgpXSxkdCtxWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRihYLGV0LGR0KXtyZXR1cm4gTyhYLHQsZXQsZHQpfWZ1bmN0aW9uIHooWCxldCxkdCl7cmV0dXJuIE8oWCxyLGV0LGR0KX1mdW5jdGlvbiBVKFgsZXQsZHQpe3JldHVybiBPKFgsbixldCxkdCl9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gYVtYLmdldERheSgpXX1mdW5jdGlvbiBaKFgpe3JldHVybiBvW1guZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KFgpe3JldHVybiBsW1guZ2V0TW9udGgoKV19ZnVuY3Rpb24gb3QoWCl7cmV0dXJuIHNbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBzdChYKXtyZXR1cm4gaVsrKFguZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChYKXtyZXR1cm4gMSt+fihYLmdldE1vbnRoKCkvMyl9ZnVuY3Rpb24gYnQoWCl7cmV0dXJuIGFbWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoWCl7cmV0dXJuIG9bWC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gbHQoWCl7cmV0dXJuIGxbWC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChYKXtyZXR1cm4gc1tYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIF90KFgpe3JldHVybiBpWysoWC5nZXRVVENIb3VycygpPj0xMildfWZ1bmN0aW9uIGN0KFgpe3JldHVybiAxK35+KFguZ2V0VVRDTW9udGgoKS8zKX1yZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLGIpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0scGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITEpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFgpe3ZhciBldD1QKFgrPSIiLFMpO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH0sdXRjUGFyc2U6ZnVuY3Rpb24oWCl7dmFyIGV0PWsoWCs9IiIsITApO3JldHVybiBldC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBYfSxldH19fWZ1bmN0aW9uIEdyKGUsdCxyKXt2YXIgbj1lPDA/Ii0iOiIiLGk9KG4/LWU6ZSkrIiIsbz1pLmxlbmd0aDtyZXR1cm4gbisobzxyP25ldyBBcnJheShyLW8rMSkuam9pbih0KStpOmkpfWZ1bmN0aW9uIFNJZShlKXtyZXR1cm4gZS5yZXBsYWNlKHdJZSwiXFwkJiIpfWZ1bmN0aW9uIHlDKGUpe3JldHVybiBuZXcgUmVnRXhwKCJeKD86IitlLm1hcChTSWUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiB2QyhlKXtmb3IodmFyIHQ9e30scj0tMSxuPWUubGVuZ3RoOysrcjxuOyl0W2Vbcl0udG9Mb3dlckNhc2UoKV09cjtyZXR1cm4gdH1mdW5jdGlvbiBNSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRUllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS51PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFRJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBDSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlY9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQUllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5XPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFVPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscis0KSk7cmV0dXJuIG4/KGUueT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBxT3QoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLnk9K25bMF0rKCtuWzBdPjY4PzE5MDA6MmUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBQSWUoZSx0LHIpe3ZhciBuPS9eKFopfChbKy1dXGRcZCkoPzo6PyhcZFxkKSk/Ly5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5aPW5bMV0/MDotKG5bMl0rKG5bM118fCIwMCIpKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnE9blswXSozLTMscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTEllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5tPW5bMF0tMSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHT3QoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga0llKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8oZS5tPTAsZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFdPdChlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuSD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLk09K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTkllKGUsdCxyKXt2YXIgbj1Uby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5TPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIERJZShlLHQscil7dmFyIG49VG8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUuTD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBPSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLkw9TWF0aC5mbG9vcihuWzBdLzFlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gekllKGUsdCxyKXt2YXIgbj1iSWUuZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/cituWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBGSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUuUT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCSWUoZSx0LHIpe3ZhciBuPVRvLmV4ZWModC5zbGljZShyKSk7cmV0dXJuIG4/KGUucz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBZT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXREYXRlKCksdCwyKX1mdW5jdGlvbiBISWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRIb3VycygpLHQsMil9ZnVuY3Rpb24gVkllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0SG91cnMoKSUxMnx8MTIsdCwyKX1mdW5jdGlvbiBVSWUoZSx0KXtyZXR1cm4gR3IoMSt5dy5jb3VudChhZChlKSxlKSx0LDMpfWZ1bmN0aW9uIFpPdChlLHQpe3JldHVybiBHcihlLmdldE1pbGxpc2Vjb25kcygpLHQsMyl9ZnVuY3Rpb24gcUllKGUsdCl7cmV0dXJuIFpPdChlLHQpKyIwMDAifWZ1bmN0aW9uIEdJZShlLHQpe3JldHVybiBHcihlLmdldE1vbnRoKCkrMSx0LDIpfWZ1bmN0aW9uIFdJZShlLHQpe3JldHVybiBHcihlLmdldE1pbnV0ZXMoKSx0LDIpfWZ1bmN0aW9uIFlJZShlLHQpe3JldHVybiBHcihlLmdldFNlY29uZHMoKSx0LDIpfWZ1bmN0aW9uIGpJZShlKXt2YXIgdD1lLmdldERheSgpO3JldHVybiB0PT09MD83OnR9ZnVuY3Rpb24gWEllKGUsdCl7cmV0dXJuIEdyKHMxLmNvdW50KGFkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBKT3QoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD49NHx8dD09PTA/a2coZSk6a2cuY2VpbChlKX1mdW5jdGlvbiAkSWUoZSx0KXtyZXR1cm4gZT1KT3QoZSksR3Ioa2cuY291bnQoYWQoZSksZSkrKGFkKGUpLmdldERheSgpPT09NCksdCwyKX1mdW5jdGlvbiBLSWUoZSl7cmV0dXJuIGUuZ2V0RGF5KCl9ZnVuY3Rpb24gWkllKGUsdCl7cmV0dXJuIEdyKHZ3LmNvdW50KGFkKGUpLTEsZSksdCwyKX1mdW5jdGlvbiBKSWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFFJZShlLHQpe3JldHVybiBlPUpPdChlKSxHcihlLmdldEZ1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gdDllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBlOWUoZSx0KXt2YXIgcj1lLmdldERheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP2tnKGUpOmtnLmNlaWwoZSksR3IoZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIHI5ZShlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHQ+MD8iLSI6KHQqPS0xLCIrIikpK0dyKHQvNjB8MCwiMCIsMikrR3IodCU2MCwiMCIsMil9ZnVuY3Rpb24gak90KGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRGF0ZSgpLHQsMil9ZnVuY3Rpb24gbjllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIGk5ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gbzllKGUsdCl7cmV0dXJuIEdyKDEreHcuY291bnQoc2QoZSksZSksdCwzKX1mdW5jdGlvbiBRT3QoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIGE5ZShlLHQpe3JldHVybiBRT3QoZSx0KSsiMDAwIn1mdW5jdGlvbiBzOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBsOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBjOWUoZSx0KXtyZXR1cm4gR3IoZS5nZXRVVENTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB1OWUoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIGg5ZShlLHQpe3JldHVybiBHcihjMS5jb3VudChzZChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gdDd0KGUpe3ZhciB0PWUuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ+PTR8fHQ9PT0wP1JnKGUpOlJnLmNlaWwoZSl9ZnVuY3Rpb24gZjllKGUsdCl7cmV0dXJuIGU9dDd0KGUpLEdyKFJnLmNvdW50KHNkKGUpLGUpKyhzZChlKS5nZXRVVENEYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gcDllKGUpe3JldHVybiBlLmdldFVUQ0RheSgpfWZ1bmN0aW9uIGQ5ZShlLHQpe3JldHVybiBHcihidy5jb3VudChzZChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gbTllKGUsdCl7cmV0dXJuIEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBnOWUoZSx0KXtyZXR1cm4gZT10N3QoZSksR3IoZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIF85ZShlLHQpe3JldHVybiBHcihlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24geTllKGUsdCl7dmFyIHI9ZS5nZXRVVENEYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD9SZyhlKTpSZy5jZWlsKGUpLEdyKGUuZ2V0VVRDRnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiB2OWUoKXtyZXR1cm4iKzAwMDAifWZ1bmN0aW9uIFhPdCgpe3JldHVybiIlIn1mdW5jdGlvbiAkT3QoZSl7cmV0dXJuK2V9ZnVuY3Rpb24gS090KGUpe3JldHVybiBNYXRoLmZsb29yKCtlLzFlMyl9dmFyIFZPdCxUbyxiSWUsd0llLGU3dD1NKCgpPT57Wk8oKTtWT3Q9eyItIjoiIixfOiIgIiwwOiIwIn0sVG89L15ccypcZCsvLGJJZT0vXiUvLHdJZT0vW1xcXiQqKz98W1xdKCkue31dL2d9KTtmdW5jdGlvbiB1ZXQoZSl7cmV0dXJuIHd3PWNldChlKSxKTz13dy5mb3JtYXQscjd0PXd3LnBhcnNlLFFPPXd3LnV0Y0Zvcm1hdCxuN3Q9d3cudXRjUGFyc2Usd3d9dmFyIHd3LEpPLHI3dCxRTyxuN3QsaTd0PU0oKCk9PntlN3QoKTt1ZXQoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KX0pO3ZhciBoZXQ9TSgoKT0+e2k3dCgpfSk7ZnVuY3Rpb24gYjllKGUpe3JldHVybiBuZXcgRGF0ZShlKX1mdW5jdGlvbiB3OWUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEYXRlPytlOituZXcgRGF0ZSgrZSl9ZnVuY3Rpb24gdDcoZSx0LHIsbixpLG8sYSxzLGwpe3ZhciBjPWlkKGZDLHlmKSx1PWMuaW52ZXJ0LGg9Yy5kb21haW4sZj1sKCIuJUwiKSxwPWwoIjolUyIpLGQ9bCgiJUk6JU0iKSxnPWwoIiVJICVwIiksXz1sKCIlYSAlZCIpLHk9bCgiJWIgJWQiKSx4PWwoIiVCIiksYj1sKCIlWSIpLFM9W1thLDEseENdLFthLDUsNSp4Q10sW2EsMTUsMTUqeENdLFthLDMwLDMwKnhDXSxbbywxLGJDXSxbbyw1LDUqYkNdLFtvLDE1LDE1KmJDXSxbbywzMCwzMCpiQ10sW2ksMSx3Q10sW2ksMywzKndDXSxbaSw2LDYqd0NdLFtpLDEyLDEyKndDXSxbbiwxLFNDXSxbbiwyLDIqU0NdLFtyLDEseDllXSxbdCwxLG83dF0sW3QsMywzKm83dF0sW2UsMSxmZXRdXTtmdW5jdGlvbiBDKGspe3JldHVybihhKGspPGs/ZjpvKGspPGs/cDppKGspPGs/ZDpuKGspPGs/Zzp0KGspPGs/cihrKTxrP186eTplKGspPGs/eDpiKShrKX1mdW5jdGlvbiBQKGssTyxELEIpe2lmKGs9PW51bGwmJihrPTEwKSx0eXBlb2Ygaz09Im51bWJlciIpe3ZhciBJPU1hdGguYWJzKEQtTykvayxMPW9DKGZ1bmN0aW9uKFIpe3JldHVybiBSWzJdfSkucmlnaHQoUyxJKTtMPT09Uy5sZW5ndGg/KEI9WnkoTy9mZXQsRC9mZXQsayksaz1lKTpMPyhMPVNbSS9TW0wtMV1bMl08U1tMXVsyXS9JP0wtMTpMXSxCPUxbMV0saz1MWzBdKTooQj1NYXRoLm1heChaeShPLEQsayksMSksaz1zKX1yZXR1cm4gQj09bnVsbD9rOmsuZXZlcnkoQil9cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKGspe3JldHVybiBuZXcgRGF0ZSh1KGspKX0sYy5kb21haW49ZnVuY3Rpb24oayl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aChydy5jYWxsKGssdzllKSk6aCgpLm1hcChiOWUpfSxjLnRpY2tzPWZ1bmN0aW9uKGssTyl7dmFyIEQ9aCgpLEI9RFswXSxJPURbRC5sZW5ndGgtMV0sTD1JPEIsUjtyZXR1cm4gTCYmKFI9QixCPUksST1SKSxSPVAoayxCLEksTyksUj1SP1IucmFuZ2UoQixJKzEpOltdLEw/Ui5yZXZlcnNlKCk6Un0sYy50aWNrRm9ybWF0PWZ1bmN0aW9uKGssTyl7cmV0dXJuIE89PW51bGw/QzpsKE8pfSxjLm5pY2U9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCk7cmV0dXJuKGs9UChrLERbMF0sRFtELmxlbmd0aC0xXSxPKSk/aChxTyhELGspKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWcoYyx0NyhlLHQscixuLGksbyxhLHMsbCkpfSxjfWZ1bmN0aW9uIGE3dCgpe3JldHVybiB0NyhhZCx0ZXQsczEseXcsUXR0LEp0dCxfdyxtdyxKTykuZG9tYWluKFtuZXcgRGF0ZSgyZTMsMCwxKSxuZXcgRGF0ZSgyZTMsMCwyKV0pfXZhciB4QyxiQyx3QyxTQyx4OWUsbzd0LGZldCxwZXQ9TSgoKT0+e21mKCk7dXcoKTtaTygpO2hldCgpO0NnKCk7cEMoKTskdHQoKTt4Qz0xZTMsYkM9eEMqNjAsd0M9YkMqNjAsU0M9d0MqMjQseDllPVNDKjcsbzd0PVNDKjMwLGZldD1TQyozNjV9KTtmdW5jdGlvbiBzN3QoKXtyZXR1cm4gdDcoc2QsaWV0LGMxLHh3LG5ldCxyZXQsX3csbXcsUU8pLmRvbWFpbihbRGF0ZS5VVEMoMmUzLDAsMSksRGF0ZS5VVEMoMmUzLDAsMildKX12YXIgbDd0PU0oKCk9PntwZXQoKTtoZXQoKTtaTygpfSk7ZnVuY3Rpb24gZGwoZSl7cmV0dXJuIGUubWF0Y2goLy57Nn0vZykubWFwKGZ1bmN0aW9uKHQpe3JldHVybiIjIit0fSl9dmFyIFN3PU0oKCk9Pnt9KTt2YXIgYzd0LHU3dD1NKCgpPT57U3coKTtjN3Q9ZGwoIjFmNzdiNGZmN2YwZTJjYTAyY2Q2MjcyODk0NjdiZDhjNTY0YmUzNzdjMjdmN2Y3ZmJjYmQyMjE3YmVjZiIpfSk7dmFyIGg3dCxmN3Q9TSgoKT0+e1N3KCk7aDd0PWRsKCIzOTNiNzk1MjU0YTM2YjZlY2Y5YzllZGU2Mzc5Mzk4Y2EyNTJiNWNmNmJjZWRiOWM4YzZkMzFiZDllMzllN2JhNTJlN2NiOTQ4NDNjMzlhZDQ5NGFkNjYxNmJlNzk2OWM3YjQxNzNhNTUxOTRjZTZkYmRkZTllZDYiKX0pO3ZhciBwN3QsZDd0PU0oKCk9PntTdygpO3A3dD1kbCgiMzE4MmJkNmJhZWQ2OWVjYWUxYzZkYmVmZTY1NTBkZmQ4ZDNjZmRhZTZiZmRkMGEyMzFhMzU0NzRjNDc2YTFkOTliYzdlOWMwNzU2YmIxOWU5YWM4YmNiZGRjZGFkYWViNjM2MzYzOTY5Njk2YmRiZGJkZDlkOWQ5Iil9KTt2YXIgbTd0LGc3dD1NKCgpPT57U3coKTttN3Q9ZGwoIjFmNzdiNGFlYzdlOGZmN2YwZWZmYmI3ODJjYTAyYzk4ZGY4YWQ2MjcyOGZmOTg5Njk0NjdiZGM1YjBkNThjNTY0YmM0OWM5NGUzNzdjMmY3YjZkMjdmN2Y3ZmM3YzdjN2JjYmQyMmRiZGI4ZDE3YmVjZjllZGFlNSIpfSk7dmFyIF83dCx5N3Q9TSgoKT0+e3N3KCk7dXcoKTtfN3Q9Y3coJGEoMzAwLC41LDApLCRhKC0yNDAsLjUsMSkpfSk7ZnVuY3Rpb24gYjd0KGUpeyhlPDB8fGU+MSkmJihlLT1NYXRoLmZsb29yKGUpKTt2YXIgdD1NYXRoLmFicyhlLS41KTtyZXR1cm4gZTcuaD0zNjAqZS0xMDAsZTcucz0xLjUtMS41KnQsZTcubD0uOC0uOSp0LGU3KyIifXZhciB2N3QseDd0LGU3LHc3dD1NKCgpPT57c3coKTt1dygpO3Y3dD1jdygkYSgtMTAwLC43NSwuMzUpLCRhKDgwLDEuNSwuOCkpLHg3dD1jdygkYSgyNjAsLjc1LC4zNSksJGEoODAsMS41LC44KSksZTc9JGEoKX0pO2Z1bmN0aW9uIHI3KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKHQtMSxNYXRoLmZsb29yKHIqdCkpKV19fXZhciBTN3QsTTd0LEU3dCxUN3QsQzd0PU0oKCk9PntTdygpO1M3dD1yNyhkbCgiNDQwMTU0NDQwMjU2NDUwNDU3NDUwNTU5NDYwNzVhNDYwODVjNDYwYTVkNDYwYjVlNDcwZDYwNDcwZTYxNDcxMDYzNDcxMTY0NDcxMzY1NDgxNDY3NDgxNjY4NDgxNzY5NDgxODZhNDgxYTZjNDgxYjZkNDgxYzZlNDgxZDZmNDgxZjcwNDgyMDcxNDgyMTczNDgyMzc0NDgyNDc1NDgyNTc2NDgyNjc3NDgyODc4NDgyOTc5NDcyYTdhNDcyYzdhNDcyZDdiNDcyZTdjNDcyZjdkNDYzMDdlNDYzMjdlNDYzMzdmNDYzNDgwNDUzNTgxNDUzNzgxNDUzODgyNDQzOTgzNDQzYTgzNDQzYjg0NDMzZDg0NDMzZTg1NDIzZjg1NDI0MDg2NDI0MTg2NDE0Mjg3NDE0NDg3NDA0NTg4NDA0Njg4M2Y0Nzg4M2Y0ODg5M2U0OTg5M2U0YTg5M2U0YzhhM2Q0ZDhhM2Q0ZThhM2M0ZjhhM2M1MDhiM2I1MThiM2I1MjhiM2E1MzhiM2E1NDhjMzk1NThjMzk1NjhjMzg1ODhjMzg1OThjMzc1YThjMzc1YjhkMzY1YzhkMzY1ZDhkMzU1ZThkMzU1ZjhkMzQ2MDhkMzQ2MThkMzM2MjhkMzM2MzhkMzI2NDhlMzI2NThlMzE2NjhlMzE2NzhlMzE2ODhlMzA2OThlMzA2YThlMmY2YjhlMmY2YzhlMmU2ZDhlMmU2ZThlMmU2ZjhlMmQ3MDhlMmQ3MThlMmM3MThlMmM3MjhlMmM3MzhlMmI3NDhlMmI3NThlMmE3NjhlMmE3NzhlMmE3ODhlMjk3OThlMjk3YThlMjk3YjhlMjg3YzhlMjg3ZDhlMjc3ZThlMjc3ZjhlMjc4MDhlMjY4MThlMjY4MjhlMjY4MjhlMjU4MzhlMjU4NDhlMjU4NThlMjQ4NjhlMjQ4NzhlMjM4ODhlMjM4OThlMjM4YThkMjI4YjhkMjI4YzhkMjI4ZDhkMjE4ZThkMjE4ZjhkMjE5MDhkMjE5MThjMjA5MjhjMjA5MjhjMjA5MzhjMWY5NDhjMWY5NThiMWY5NjhiMWY5NzhiMWY5ODhiMWY5OThhMWY5YThhMWU5YjhhMWU5Yzg5MWU5ZDg5MWY5ZTg5MWY5Zjg4MWZhMDg4MWZhMTg4MWZhMTg3MWZhMjg3MjBhMzg2MjBhNDg2MjFhNTg1MjFhNjg1MjJhNzg1MjJhODg0MjNhOTgzMjRhYTgzMjVhYjgyMjVhYzgyMjZhZDgxMjdhZDgxMjhhZTgwMjlhZjdmMmFiMDdmMmNiMTdlMmRiMjdkMmViMzdjMmZiNDdjMzFiNTdiMzJiNjdhMzRiNjc5MzViNzc5MzdiODc4MzhiOTc3M2FiYTc2M2JiYjc1M2RiYzc0M2ZiYzczNDBiZDcyNDJiZTcxNDRiZjcwNDZjMDZmNDhjMTZlNGFjMTZkNGNjMjZjNGVjMzZiNTBjNDZhNTJjNTY5NTRjNTY4NTZjNjY3NThjNzY1NWFjODY0NWNjODYzNWVjOTYyNjBjYTYwNjNjYjVmNjVjYjVlNjdjYzVjNjljZDViNmNjZDVhNmVjZTU4NzBjZjU3NzNkMDU2NzVkMDU0NzdkMTUzN2FkMTUxN2NkMjUwN2ZkMzRlODFkMzRkODRkNDRiODZkNTQ5ODlkNTQ4OGJkNjQ2OGVkNjQ1OTBkNzQzOTNkNzQxOTVkODQwOThkODNlOWJkOTNjOWRkOTNiYTBkYTM5YTJkYTM3YTVkYjM2YThkYjM0YWFkYzMyYWRkYzMwYjBkZDJmYjJkZDJkYjVkZTJiYjhkZTI5YmFkZTI4YmRkZjI2YzBkZjI1YzJkZjIzYzVlMDIxYzhlMDIwY2FlMTFmY2RlMTFkZDBlMTFjZDJlMjFiZDVlMjFhZDhlMjE5ZGFlMzE5ZGRlMzE4ZGZlMzE4ZTJlNDE4ZTVlNDE5ZTdlNDE5ZWFlNTFhZWNlNTFiZWZlNTFjZjFlNTFkZjRlNjFlZjZlNjIwZjhlNjIxZmJlNzIzZmRlNzI1IikpLE03dD1yNyhkbCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTA5MDIwMjBiMDIwMjBkMDMwMzBmMDMwMzEyMDQwNDE0MDUwNDE2MDYwNTE4MDYwNTFhMDcwNjFjMDgwNzFlMDkwNzIwMGEwODIyMGIwOTI0MGMwOTI2MGQwYTI5MGUwYjJiMTAwYjJkMTEwYzJmMTIwZDMxMTMwZDM0MTQwZTM2MTUwZTM4MTYwZjNiMTgwZjNkMTkxMDNmMWExMDQyMWMxMDQ0MWQxMTQ3MWUxMTQ5MjAxMTRiMjExMTRlMjIxMTUwMjQxMjUzMjUxMjU1MjcxMjU4MjkxMTVhMmExMTVjMmMxMTVmMmQxMTYxMmYxMTYzMzExMTY1MzMxMDY3MzQxMDY5MzYxMDZiMzgxMDZjMzkwZjZlM2IwZjcwM2QwZjcxM2YwZjcyNDAwZjc0NDIwZjc1NDQwZjc2NDUxMDc3NDcxMDc4NDkxMDc4NGExMDc5NGMxMTdhNGUxMTdiNGYxMjdiNTExMjdjNTIxMzdjNTQxMzdkNTYxNDdkNTcxNTdlNTkxNTdlNWExNjdlNWMxNjdmNWQxNzdmNWYxODdmNjAxODgwNjIxOTgwNjQxYTgwNjUxYTgwNjcxYjgwNjgxYzgxNmExYzgxNmIxZDgxNmQxZDgxNmUxZTgxNzAxZjgxNzIxZjgxNzMyMDgxNzUyMTgxNzYyMTgxNzgyMjgxNzkyMjgyN2IyMzgyN2MyMzgyN2UyNDgyODAyNTgyODEyNTgxODMyNjgxODQyNjgxODYyNzgxODgyNzgxODkyODgxOGIyOTgxOGMyOTgxOGUyYTgxOTAyYTgxOTEyYjgxOTMyYjgwOTQyYzgwOTYyYzgwOTgyZDgwOTkyZDgwOWIyZTdmOWMyZTdmOWUyZjdmYTAyZjdmYTEzMDdlYTMzMDdlYTUzMTdlYTYzMTdkYTgzMjdkYWEzMzdkYWIzMzdjYWQzNDdjYWUzNDdiYjAzNTdiYjIzNTdiYjMzNjdhYjUzNjdhYjczNzc5YjgzNzc5YmEzODc4YmMzOTc4YmQzOTc3YmYzYTc3YzAzYTc2YzIzYjc1YzQzYzc1YzUzYzc0YzczZDczYzgzZTczY2EzZTcyY2MzZjcxY2Q0MDcxY2Y0MDcwZDA0MTZmZDI0MjZmZDM0MzZlZDU0NDZkZDY0NTZjZDg0NTZjZDk0NjZiZGI0NzZhZGM0ODY5ZGU0OTY4ZGY0YTY4ZTA0YzY3ZTI0ZDY2ZTM0ZTY1ZTQ0ZjY0ZTU1MDY0ZTc1MjYzZTg1MzYyZTk1NDYyZWE1NjYxZWI1NzYwZWM1ODYwZWQ1YTVmZWU1YjVlZWY1ZDVlZjA1ZjVlZjE2MDVkZjI2MjVkZjI2NDVjZjM2NTVjZjQ2NzVjZjQ2OTVjZjU2YjVjZjY2YzVjZjY2ZTVjZjc3MDVjZjc3MjVjZjg3NDVjZjg3NjVjZjk3ODVkZjk3OTVkZjk3YjVkZmE3ZDVlZmE3ZjVlZmE4MTVmZmI4MzVmZmI4NTYwZmI4NzYxZmM4OTYxZmM4YTYyZmM4YzYzZmM4ZTY0ZmM5MDY1ZmQ5MjY2ZmQ5NDY3ZmQ5NjY4ZmQ5ODY5ZmQ5YTZhZmQ5YjZiZmU5ZDZjZmU5ZjZkZmVhMTZlZmVhMzZmZmVhNTcxZmVhNzcyZmVhOTczZmVhYTc0ZmVhYzc2ZmVhZTc3ZmViMDc4ZmViMjdhZmViNDdiZmViNjdjZmViNzdlZmViOTdmZmViYjgxZmViZDgyZmViZjg0ZmVjMTg1ZmVjMjg3ZmVjNDg4ZmVjNjhhZmVjODhjZmVjYThkZmVjYzhmZmVjZDkwZmVjZjkyZmVkMTk0ZmVkMzk1ZmVkNTk3ZmVkNzk5ZmVkODlhZmRkYTljZmRkYzllZmRkZWEwZmRlMGExZmRlMmEzZmRlM2E1ZmRlNWE3ZmRlN2E5ZmRlOWFhZmRlYmFjZmNlY2FlZmNlZWIwZmNmMGIyZmNmMmI0ZmNmNGI2ZmNmNmI4ZmNmN2I5ZmNmOWJiZmNmYmJkZmNmZGJmIikpLEU3dD1yNyhkbCgiMDAwMDA0MDEwMDA1MDEwMTA2MDEwMTA4MDIwMTBhMDIwMjBjMDIwMjBlMDMwMjEwMDQwMzEyMDQwMzE0MDUwNDE3MDYwNDE5MDcwNTFiMDgwNTFkMDkwNjFmMGEwNzIyMGIwNzI0MGMwODI2MGQwODI5MGUwOTJiMTAwOTJkMTEwYTMwMTIwYTMyMTQwYjM0MTUwYjM3MTYwYjM5MTgwYzNjMTkwYzNlMWIwYzQxMWMwYzQzMWUwYzQ1MWYwYzQ4MjEwYzRhMjMwYzRjMjQwYzRmMjYwYzUxMjgwYjUzMjkwYjU1MmIwYjU3MmQwYjU5MmYwYTViMzEwYTVjMzIwYTVlMzQwYTVmMzYwOTYxMzgwOTYyMzkwOTYzM2IwOTY0M2QwOTY1M2UwOTY2NDAwYTY3NDIwYTY4NDQwYTY4NDUwYTY5NDcwYjZhNDkwYjZhNGEwYzZiNGMwYzZiNGQwZDZjNGYwZDZjNTEwZTZjNTIwZTZkNTQwZjZkNTUwZjZkNTcxMDZlNTkxMDZlNWExMTZlNWMxMjZlNWQxMjZlNWYxMzZlNjExMzZlNjIxNDZlNjQxNTZlNjUxNTZlNjcxNjZlNjkxNjZlNmExNzZlNmMxODZlNmQxODZlNmYxOTZlNzExOTZlNzIxYTZlNzQxYTZlNzUxYjZlNzcxYzZkNzgxYzZkN2ExZDZkN2MxZDZkN2QxZTZkN2YxZTZjODAxZjZjODIyMDZjODQyMDZiODUyMTZiODcyMTZiODgyMjZhOGEyMjZhOGMyMzY5OGQyMzY5OGYyNDY5OTAyNTY4OTIyNTY4OTMyNjY3OTUyNjY3OTcyNzY2OTgyNzY2OWEyODY1OWIyOTY0OWQyOTY0OWYyYTYzYTAyYTYzYTIyYjYyYTMyYzYxYTUyYzYwYTYyZDYwYTgyZTVmYTkyZTVlYWIyZjVlYWQzMDVkYWUzMDVjYjAzMTViYjEzMjVhYjMzMjVhYjQzMzU5YjYzNDU4YjczNTU3YjkzNTU2YmEzNjU1YmMzNzU0YmQzODUzYmYzOTUyYzAzYTUxYzEzYTUwYzMzYjRmYzQzYzRlYzYzZDRkYzczZTRjYzgzZjRiY2E0MDRhY2I0MTQ5Y2M0MjQ4Y2U0MzQ3Y2Y0NDQ2ZDA0NTQ1ZDI0NjQ0ZDM0NzQzZDQ0ODQyZDU0YTQxZDc0YjNmZDg0YzNlZDk0ZDNkZGE0ZTNjZGI1MDNiZGQ1MTNhZGU1MjM4ZGY1MzM3ZTA1NTM2ZTE1NjM1ZTI1NzM0ZTM1OTMzZTQ1YTMxZTU1YzMwZTY1ZDJmZTc1ZTJlZTg2MDJkZTk2MTJiZWE2MzJhZWI2NDI5ZWI2NjI4ZWM2NzI2ZWQ2OTI1ZWU2YTI0ZWY2YzIzZWY2ZTIxZjA2ZjIwZjE3MTFmZjE3MzFkZjI3NDFjZjM3NjFiZjM3ODE5ZjQ3OTE4ZjU3YjE3ZjU3ZDE1ZjY3ZTE0ZjY4MDEzZjc4MjEyZjc4NDEwZjg4NTBmZjg4NzBlZjg4OTBjZjk4YjBiZjk4YzBhZjk4ZTA5ZmE5MDA4ZmE5MjA3ZmE5NDA3ZmI5NjA2ZmI5NzA2ZmI5OTA2ZmI5YjA2ZmI5ZDA3ZmM5ZjA3ZmNhMTA4ZmNhMzA5ZmNhNTBhZmNhNjBjZmNhODBkZmNhYTBmZmNhYzExZmNhZTEyZmNiMDE0ZmNiMjE2ZmNiNDE4ZmJiNjFhZmJiODFkZmJiYTFmZmJiYzIxZmJiZTIzZmFjMDI2ZmFjMjI4ZmFjNDJhZmFjNjJkZjljNzJmZjljOTMyZjljYjM1ZjhjZDM3ZjhjZjNhZjdkMTNkZjdkMzQwZjZkNTQzZjZkNzQ2ZjVkOTQ5ZjVkYjRjZjRkZDRmZjRkZjUzZjRlMTU2ZjNlMzVhZjNlNTVkZjJlNjYxZjJlODY1ZjJlYTY5ZjFlYzZkZjFlZDcxZjFlZjc1ZjFmMTc5ZjJmMjdkZjJmNDgyZjNmNTg2ZjNmNjhhZjRmODhlZjVmOTkyZjZmYTk2ZjhmYjlhZjlmYzlkZmFmZGExZmNmZmE0IikpLFQ3dD1yNyhkbCgiMGQwODg3MTAwNzg4MTMwNzg5MTYwNzhhMTkwNjhjMWIwNjhkMWQwNjhlMjAwNjhmMjIwNjkwMjQwNjkxMjYwNTkxMjgwNTkyMmEwNTkzMmMwNTk0MmUwNTk1MmYwNTk2MzEwNTk3MzMwNTk3MzUwNDk4MzcwNDk5MzgwNDlhM2EwNDlhM2MwNDliM2UwNDljM2YwNDljNDEwNDlkNDMwMzllNDQwMzllNDYwMzlmNDgwMzlmNDkwM2EwNGIwM2ExNGMwMmExNGUwMmEyNTAwMmEyNTEwMmEzNTMwMmEzNTUwMmE0NTYwMWE0NTgwMWE0NTkwMWE1NWIwMWE1NWMwMWE2NWUwMWE2NjAwMWE2NjEwMGE3NjMwMGE3NjQwMGE3NjYwMGE3NjcwMGE4NjkwMGE4NmEwMGE4NmMwMGE4NmUwMGE4NmYwMGE4NzEwMGE4NzIwMWE4NzQwMWE4NzUwMWE4NzcwMWE4NzgwMWE4N2EwMmE4N2IwMmE4N2QwM2E4N2UwM2E4ODAwNGE4ODEwNGE3ODMwNWE3ODQwNWE3ODYwNmE2ODcwN2E2ODgwOGE2OGEwOWE1OGIwYWE1OGQwYmE1OGUwY2E0OGYwZGE0OTEwZWEzOTIwZmEzOTQxMGEyOTUxMWExOTYxM2ExOTgxNGEwOTkxNTlmOWExNjlmOWMxNzllOWQxODlkOWUxOTlkYTAxYTljYTExYjliYTIxZDlhYTMxZTlhYTUxZjk5YTYyMDk4YTcyMTk3YTgyMjk2YWEyMzk1YWIyNDk0YWMyNjk0YWQyNzkzYWUyODkyYjAyOTkxYjEyYTkwYjIyYjhmYjMyYzhlYjQyZThkYjUyZjhjYjYzMDhiYjczMThhYjgzMjg5YmEzMzg4YmIzNDg4YmMzNTg3YmQzNzg2YmUzODg1YmYzOTg0YzAzYTgzYzEzYjgyYzIzYzgxYzMzZDgwYzQzZTdmYzU0MDdlYzY0MTdkYzc0MjdjYzg0MzdiYzk0NDdhY2E0NTdhY2I0Njc5Y2M0Nzc4Y2M0OTc3Y2Q0YTc2Y2U0Yjc1Y2Y0Yzc0ZDA0ZDczZDE0ZTcyZDI0ZjcxZDM1MTcxZDQ1MjcwZDU1MzZmZDU1NDZlZDY1NTZkZDc1NjZjZDg1NzZiZDk1ODZhZGE1YTZhZGE1YjY5ZGI1YzY4ZGM1ZDY3ZGQ1ZTY2ZGU1ZjY1ZGU2MTY0ZGY2MjYzZTA2MzYzZTE2NDYyZTI2NTYxZTI2NjYwZTM2ODVmZTQ2OTVlZTU2YTVkZTU2YjVkZTY2YzVjZTc2ZTViZTc2ZjVhZTg3MDU5ZTk3MTU4ZTk3MjU3ZWE3NDU3ZWI3NTU2ZWI3NjU1ZWM3NzU0ZWQ3OTUzZWQ3YTUyZWU3YjUxZWY3YzUxZWY3ZTUwZjA3ZjRmZjA4MDRlZjE4MTRkZjE4MzRjZjI4NDRiZjM4NTRiZjM4NzRhZjQ4ODQ5ZjQ4OTQ4ZjU4YjQ3ZjU4YzQ2ZjY4ZDQ1ZjY4ZjQ0Zjc5MDQ0Zjc5MTQzZjc5MzQyZjg5NDQxZjg5NTQwZjk5NzNmZjk5ODNlZjk5YTNlZmE5YjNkZmE5YzNjZmE5ZTNiZmI5ZjNhZmJhMTM5ZmJhMjM4ZmNhMzM4ZmNhNTM3ZmNhNjM2ZmNhODM1ZmNhOTM0ZmRhYjMzZmRhYzMzZmRhZTMyZmRhZjMxZmRiMTMwZmRiMjJmZmRiNDJmZmRiNTJlZmViNzJkZmViODJjZmViYTJjZmViYjJiZmViZDJhZmViZTJhZmVjMDI5ZmRjMjI5ZmRjMzI4ZmRjNTI3ZmRjNjI3ZmRjODI3ZmRjYTI2ZmRjYjI2ZmNjZDI1ZmNjZTI1ZmNkMDI1ZmNkMjI1ZmJkMzI0ZmJkNTI0ZmJkNzI0ZmFkODI0ZmFkYTI0ZjlkYzI0ZjlkZDI1ZjhkZjI1ZjhlMTI1ZjdlMjI1ZjdlNDI1ZjZlNjI2ZjZlODI2ZjVlOTI2ZjVlYjI3ZjRlZDI3ZjNlZTI3ZjNmMDI3ZjJmMjI3ZjFmNDI2ZjFmNTI1ZjBmNzI0ZjBmOTIxIikpfSk7ZnVuY3Rpb24gbjcoZSl7dmFyIHQ9MCxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhPShvLXQpLyhyLXQpO3JldHVybiBlKG4/TWF0aC5tYXgoMCxNYXRoLm1pbigxLGEpKTphKX1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K29bMF0scj0rb1sxXSxpKTpbdCxyXX0saS5jbGFtcD1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hIW8saSk6bn0saS5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9byxpKTplfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbjcoZSkuZG9tYWluKFt0LHJdKS5jbGFtcChuKX0sb2QoaSl9dmFyIEE3dD1NKCgpPT57cHcoKX0pO3ZhciBQN3Q9TSgoKT0+e1VOdCgpO0tEdCgpO3B3KCk7dE90KCk7YnR0KCk7ck90KCk7bk90KCk7aU90KCk7b090KCk7cGV0KCk7bDd0KCk7dTd0KCk7Zjd0KCk7ZDd0KCk7Zzd0KCk7eTd0KCk7dzd0KCk7Qzd0KCk7QTd0KCl9KTt2YXIgaTcsTUMsbzc9TSgoKT0+e2k3PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixNQz17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6aTcseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifX0pO2Z1bmN0aW9uIE13KGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLE1DLmhhc093blByb3BlcnR5KHQpP3tzcGFjZTpNQ1t0XSxsb2NhbDplfTplfXZhciBhNz1NKCgpPT57bzcoKX0pO2Z1bmN0aW9uIFM5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PWk3JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1pNz90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gTTllKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIE5nKGUpe3ZhciB0PU13KGUpO3JldHVybih0LmxvY2FsP005ZTpTOWUpKHQpfXZhciBFQz1NKCgpPT57YTcoKTtvNygpfSk7ZnVuY3Rpb24gRTllKCl7fWZ1bmN0aW9uIEV3KGUpe3JldHVybiBlPT1udWxsP0U5ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBzNz1NKCgpPT57fSk7ZnVuY3Rpb24gSTd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1FdyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IEhuKG4sdGhpcy5fcGFyZW50cyl9dmFyIEw3dD1NKCgpPT57U2MoKTtzNygpfSk7ZnVuY3Rpb24gVDllKCl7cmV0dXJuW119ZnVuY3Rpb24gbDcoZSl7cmV0dXJuIGU9PW51bGw/VDllOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIGRldD1NKCgpPT57fSk7ZnVuY3Rpb24gazd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1sNyhlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgSG4obixpKX12YXIgUjd0PU0oKCk9PntTYygpO2RldCgpfSk7dmFyIEQ3dCxUdyxON3QsYzcsbWV0PU0oKCk9PntEN3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19O3R5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJihUdz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsVHcubWF0Y2hlc3x8KE43dD1Udy53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fFR3Lm1zTWF0Y2hlc1NlbGVjdG9yfHxUdy5tb3pNYXRjaGVzU2VsZWN0b3J8fFR3Lm9NYXRjaGVzU2VsZWN0b3IsRDd0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBON3QuY2FsbCh0aGlzLGUpfX0pKTtjNz1EN3R9KTtmdW5jdGlvbiBPN3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWM3KGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09W10sbCxjPTA7YzxhOysrYykobD1vW2NdKSYmZS5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZzLnB1c2gobCk7cmV0dXJuIG5ldyBIbihuLHRoaXMuX3BhcmVudHMpfXZhciB6N3Q9TSgoKT0+e1NjKCk7bWV0KCl9KTtmdW5jdGlvbiB1NyhlKXtyZXR1cm4gbmV3IEFycmF5KGUubGVuZ3RoKX12YXIgZ2V0PU0oKCk9Pnt9KTtmdW5jdGlvbiBGN3QoKXtyZXR1cm4gbmV3IEhuKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKHU3KSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBUQyhlLHQpe3RoaXMub3duZXJEb2N1bWVudD1lLm93bmVyRG9jdW1lbnQsdGhpcy5uYW1lc3BhY2VVUkk9ZS5uYW1lc3BhY2VVUkksdGhpcy5fbmV4dD1udWxsLHRoaXMuX3BhcmVudD1lLHRoaXMuX19kYXRhX189dH12YXIgX2V0PU0oKCk9PntnZXQoKTtTYygpO1RDLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VEMsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoZSx0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoZSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGUpfX19KTtmdW5jdGlvbiBCN3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBIN3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEM5ZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgVEMoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIEE5ZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPVY3dCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPVY3dCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyBUQyhlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIFU3dChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/QTllOkM5ZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUI3dChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgSG4oYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfXZhciBWN3QscTd0PU0oKCk9PntTYygpO19ldCgpO0g3dCgpO1Y3dD0iJCJ9KTtmdW5jdGlvbiBHN3QoKXtyZXR1cm4gbmV3IEhuKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAodTcpLHRoaXMuX3BhcmVudHMpfXZhciBXN3Q9TSgoKT0+e2dldCgpO1NjKCl9KTtmdW5jdGlvbiBZN3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IEhuKGEsdGhpcy5fcGFyZW50cyl9dmFyIGo3dD1NKCgpPT57U2MoKX0pO2Z1bmN0aW9uIFg3dCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0tMSxyPWUubGVuZ3RoOysrdDxyOylmb3IodmFyIG49ZVt0XSxpPW4ubGVuZ3RoLTEsbz1uW2ldLGE7LS1pPj0wOykoYT1uW2ldKSYmKG8mJm8hPT1hLm5leHRTaWJsaW5nJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgJDd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLN3QoZSl7ZXx8KGU9UDllKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IEhuKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBQOWUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIFo3dD1NKCgpPT57U2MoKX0pO2Z1bmN0aW9uIEo3dCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgUTd0PU0oKCk9Pnt9KTtmdW5jdGlvbiB0enQoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgZXp0PU0oKCk9Pnt9KTtmdW5jdGlvbiByenQoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBuenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGl6dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIG96dD1NKCgpPT57fSk7ZnVuY3Rpb24gYXp0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBzenQ9TSgoKT0+e30pO2Z1bmN0aW9uIGx6dChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIGN6dD1NKCgpPT57fSk7ZnVuY3Rpb24gSTllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiBMOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBrOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiBSOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gTjllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBEOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gdXp0KGUsdCl7dmFyIHI9TXcoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP0w5ZTpJOWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9EOWU6TjllOnIubG9jYWw/UjllOms5ZSkocix0KSl9dmFyIGh6dD1NKCgpPT57YTcoKX0pO2Z1bmN0aW9uIEN3KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgaDc9TSgoKT0+e30pO2Z1bmN0aW9uIE85ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiB6OWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSx0LHIpfX1mdW5jdGlvbiBGOWUoZSx0LHIpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249PW51bGw/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsbixyKX19ZnVuY3Rpb24gZnp0KGUsdCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9POWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/RjllOno5ZSkoZSx0LHI9PW51bGw/IiI6cikpOnlldCh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiB5ZXQoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxDdyhlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgdmV0PU0oKCk9PntoNygpfSk7ZnVuY3Rpb24gQjllKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBIOWUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIFY5ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiBwenQoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9COWU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/VjllOkg5ZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIGR6dD1NKCgpPT57fSk7ZnVuY3Rpb24gbXp0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiB4ZXQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgZ3p0KGUpfWZ1bmN0aW9uIGd6dChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9bXp0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gX3p0KGUsdCl7Zm9yKHZhciByPXhldChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIHl6dChlLHQpe2Zvcih2YXIgcj14ZXQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBVOWUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7X3p0KHRoaXMsZSl9fWZ1bmN0aW9uIHE5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt5enQodGhpcyxlKX19ZnVuY3Rpb24gRzllKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP196dDp5enQpKHRoaXMsZSl9fWZ1bmN0aW9uIHZ6dChlLHQpe3ZhciByPW16dChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj14ZXQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/RzllOnQ/VTllOnE5ZSkocix0KSl9dmFyIHh6dD1NKCgpPT57Z3p0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIFc5ZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gWTllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gajllKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBienQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/VzllOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9qOWU6WTllKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIHd6dD1NKCgpPT57fSk7ZnVuY3Rpb24gWDllKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24gJDllKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIEs5ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFN6dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9YOWU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP0s5ZTokOWUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIE16dD1NKCgpPT57fSk7ZnVuY3Rpb24gWjllKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIEV6dCgpe3JldHVybiB0aGlzLmVhY2goWjllKX12YXIgVHp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBKOWUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBDenQoKXtyZXR1cm4gdGhpcy5lYWNoKEo5ZSl9dmFyIEF6dD1NKCgpPT57fSk7ZnVuY3Rpb24gUHp0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6TmcoZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIEl6dD1NKCgpPT57RUMoKX0pO2Z1bmN0aW9uIFE5ZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIEx6dChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6TmcoZSksbj10PT1udWxsP1E5ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90OkV3KHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX12YXIga3p0PU0oKCk9PntFQygpO3M3KCl9KTtmdW5jdGlvbiB0TGUoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBSenQoKXtyZXR1cm4gdGhpcy5lYWNoKHRMZSl9dmFyIE56dD1NKCgpPT57fSk7ZnVuY3Rpb24gZUxlKCl7cmV0dXJuIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5jbG9uZU5vZGUoITEpLHRoaXMubmV4dFNpYmxpbmcpfWZ1bmN0aW9uIHJMZSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuY2xvbmVOb2RlKCEwKSx0aGlzLm5leHRTaWJsaW5nKX1mdW5jdGlvbiBEenQoZSl7cmV0dXJuIHRoaXMuc2VsZWN0KGU/ckxlOmVMZSl9dmFyIE96dD1NKCgpPT57fSk7ZnVuY3Rpb24genp0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixlKTp0aGlzLm5vZGUoKS5fX2RhdGFfX312YXIgRnp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBuTGUoZSx0LHIpe3JldHVybiBlPVZ6dChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBWenQoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1QdTtQdT1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtQdT1pfX19ZnVuY3Rpb24gaUxlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiBvTGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gYUxlKGUsdCxyKXt2YXIgbj1IenQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9uTGU6Vnp0O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIFV6dChlLHQscil7dmFyIG49aUxlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9hTGU6b0xlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHF6dChlLHQscixuKXt2YXIgaT1QdTtlLnNvdXJjZUV2ZW50PVB1LFB1PWU7dHJ5e3JldHVybiB0LmFwcGx5KHIsbil9ZmluYWxseXtQdT1pfX12YXIgSHp0LFB1LEJ6dCxmNz1NKCgpPT57SHp0PXt9LFB1PW51bGw7dHlwZW9mIGRvY3VtZW50IT0idW5kZWZpbmVkIiYmKEJ6dD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIm9ubW91c2VlbnRlciJpbiBCenR8fChIenQ9e21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSkpfSk7ZnVuY3Rpb24gR3p0KGUsdCxyKXt2YXIgbj1DdyhlKSxpPW4uQ3VzdG9tRXZlbnQ7dHlwZW9mIGk9PSJmdW5jdGlvbiI/aT1uZXcgaSh0LHIpOihpPW4uZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iikscj8oaS5pbml0RXZlbnQodCxyLmJ1YmJsZXMsci5jYW5jZWxhYmxlKSxpLmRldGFpbD1yLmRldGFpbCk6aS5pbml0RXZlbnQodCwhMSwhMSkpLGUuZGlzcGF0Y2hFdmVudChpKX1mdW5jdGlvbiBzTGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gR3p0KHRoaXMsZSx0KX19ZnVuY3Rpb24gbExlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEd6dCh0aGlzLGUsdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBXenQoZSx0KXtyZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9sTGU6c0xlKShlLHQpKX12YXIgWXp0PU0oKCk9PntoNygpfSk7ZnVuY3Rpb24gSG4oZSx0KXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXR9ZnVuY3Rpb24ganp0KCl7cmV0dXJuIG5ldyBIbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLENDKX12YXIgQ0MsWHp0LFNjPU0oKCk9PntMN3QoKTtSN3QoKTt6N3QoKTtxN3QoKTtfZXQoKTtXN3QoKTtqN3QoKTskN3QoKTtaN3QoKTtRN3QoKTtlenQoKTtuenQoKTtvenQoKTtzenQoKTtjenQoKTtoenQoKTt2ZXQoKTtkenQoKTt4enQoKTt3enQoKTtNenQoKTtUenQoKTtBenQoKTtJenQoKTtrenQoKTtOenQoKTtPenQoKTtGenQoKTtmNygpO1l6dCgpO0NDPVtudWxsXTtIbi5wcm90b3R5cGU9anp0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6SG4sc2VsZWN0Okk3dCxzZWxlY3RBbGw6azd0LGZpbHRlcjpPN3QsZGF0YTpVN3QsZW50ZXI6Rjd0LGV4aXQ6Rzd0LG1lcmdlOlk3dCxvcmRlcjpYN3Qsc29ydDpLN3QsY2FsbDpKN3Qsbm9kZXM6dHp0LG5vZGU6cnp0LHNpemU6aXp0LGVtcHR5OmF6dCxlYWNoOmx6dCxhdHRyOnV6dCxzdHlsZTpmenQscHJvcGVydHk6cHp0LGNsYXNzZWQ6dnp0LHRleHQ6Ynp0LGh0bWw6U3p0LHJhaXNlOkV6dCxsb3dlcjpDenQsYXBwZW5kOlB6dCxpbnNlcnQ6THp0LHJlbW92ZTpSenQsY2xvbmU6RHp0LGRhdHVtOnp6dCxvbjpVenQsZGlzcGF0Y2g6V3p0fTtYenQ9anp0fSk7ZnVuY3Rpb24gcDcoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgSG4oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBIbihbW2VdXSxDQyl9dmFyIGJldD1NKCgpPT57U2MoKX0pO2Z1bmN0aW9uICR6dChlKXtyZXR1cm4gcDcoTmcoZSkuY2FsbChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKX12YXIgS3p0PU0oKCk9PntFQygpO2JldCgpfSk7ZnVuY3Rpb24gZDcoKXtyZXR1cm4gbmV3IHdldH1mdW5jdGlvbiB3ZXQoKXt0aGlzLl89IkAiKygrK2NMZSkudG9TdHJpbmcoMzYpfXZhciBjTGUsWnp0PU0oKCk9PntjTGU9MDt3ZXQucHJvdG90eXBlPWQ3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6d2V0LGdldDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fOyEodCBpbiBlKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlW3RdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0aGlzLl9dPXR9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fIGluIGUmJmRlbGV0ZSBlW3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319fSk7ZnVuY3Rpb24gQXcoKXtmb3IodmFyIGU9UHUsdDt0PWUuc291cmNlRXZlbnQ7KWU9dDtyZXR1cm4gZX12YXIgbTc9TSgoKT0+e2Y3KCl9KTtmdW5jdGlvbiBEZyhlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciBBQz1NKCgpPT57fSk7ZnVuY3Rpb24gSnp0KGUpe3ZhciB0PUF3KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLERnKGUsdCl9dmFyIFF6dD1NKCgpPT57bTcoKTtBQygpfSk7ZnVuY3Rpb24gdEZ0KGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IEhuKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEhuKFtlPT1udWxsP1tdOmVdLENDKX12YXIgZUZ0PU0oKCk9PntTYygpfSk7ZnVuY3Rpb24gckZ0KGUsdCxyKXthcmd1bWVudHMubGVuZ3RoPDMmJihyPXQsdD1BdygpLmNoYW5nZWRUb3VjaGVzKTtmb3IodmFyIG49MCxpPXQ/dC5sZW5ndGg6MCxvO248aTsrK24paWYoKG89dFtuXSkuaWRlbnRpZmllcj09PXIpcmV0dXJuIERnKGUsbyk7cmV0dXJuIG51bGx9dmFyIG5GdD1NKCgpPT57bTcoKTtBQygpfSk7ZnVuY3Rpb24gaUZ0KGUsdCl7dD09bnVsbCYmKHQ9QXcoKS50b3VjaGVzKTtmb3IodmFyIHI9MCxuPXQ/dC5sZW5ndGg6MCxpPW5ldyBBcnJheShuKTtyPG47KytyKWlbcl09RGcoZSx0W3JdKTtyZXR1cm4gaX12YXIgb0Z0PU0oKCk9PnttNygpO0FDKCl9KTt2YXIgYUZ0PU0oKCk9PntLenQoKTtFQygpO1p6dCgpO21ldCgpO1F6dCgpO2E3KCk7bzcoKTtBQygpO2JldCgpO2VGdCgpO1NjKCk7czcoKTtkZXQoKTt2ZXQoKTtuRnQoKTtvRnQoKTtoNygpO2Y3KCl9KTtmdW5jdGlvbiBUZXQoKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBzRnQoKXtyZXR1cm4gbmV3IFRldH12YXIgTWV0LEVldCx1MSx1TGUsSXUsbEZ0PU0oKCk9PntNZXQ9TWF0aC5QSSxFZXQ9MipNZXQsdTE9MWUtNix1TGU9RWV0LXUxO1RldC5wcm90b3R5cGU9c0Z0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VGV0LG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD51MSlpZighKE1hdGguYWJzKHUqcy1sKmMpPnUxKXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKE1ldC1NYXRoLmFjb3MoKGQraC1nKS8oMipfKnkpKSkvMiksYj14L3ksUz14L187TWF0aC5hYnMoYi0xKT51MSYmKHRoaXMuXys9IkwiKyhlK2IqYykrIiwiKyh0K2IqdSkpLHRoaXMuXys9IkEiK2krIiwiK2krIiwwLDAsIisgKyh1KmY+YypwKSsiLCIrKHRoaXMuX3gxPWUrUypzKSsiLCIrKHRoaXMuX3kxPXQrUypsKX19LGFyYzpmdW5jdGlvbihlLHQscixuLGksbyl7ZT0rZSx0PSt0LHI9K3Isbz0hIW87dmFyIGE9cipNYXRoLmNvcyhuKSxzPXIqTWF0aC5zaW4obiksbD1lK2EsYz10K3MsdT0xXm8saD1vP24taTppLW47aWYocjwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO3RoaXMuX3gxPT09bnVsbD90aGlzLl8rPSJNIitsKyIsIitjOihNYXRoLmFicyh0aGlzLl94MS1sKT51MXx8TWF0aC5hYnModGhpcy5feTEtYyk+dTEpJiYodGhpcy5fKz0iTCIrbCsiLCIrYyksciYmKGg8MCYmKGg9aCVFZXQrRWV0KSxoPnVMZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD51MSYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49TWV0KSsiLCIrdSsiLCIrKHRoaXMuX3gxPWUrcipNYXRoLmNvcyhpKSkrIiwiKyh0aGlzLl95MT10K3IqTWF0aC5zaW4oaSkpKSl9LHJlY3Q6ZnVuY3Rpb24oZSx0LHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPSt0KSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX07SXU9c0Z0fSk7dmFyIFB3PU0oKCk9PntsRnQoKX0pO2Z1bmN0aW9uIEdlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgT2c9TSgoKT0+e30pO2Z1bmN0aW9uIHVGdChlKXtyZXR1cm4gZT4xPzA6ZTwtMT9rdTpNYXRoLmFjb3MoZSl9ZnVuY3Rpb24gQWV0KGUpe3JldHVybiBlPj0xP1BDOmU8PS0xPy1QQzpNYXRoLmFzaW4oZSl9dmFyIENldCxIbyx6ZyxjRnQsZzcsTHUsaDEsQ28sa3UsUEMsTWMsSXc9TSgoKT0+e0NldD1NYXRoLmFicyxIbz1NYXRoLmF0YW4yLHpnPU1hdGguY29zLGNGdD1NYXRoLm1heCxnNz1NYXRoLm1pbixMdT1NYXRoLnNpbixoMT1NYXRoLnNxcnQsQ289MWUtMTIsa3U9TWF0aC5QSSxQQz1rdS8yLE1jPTIqa3V9KTtmdW5jdGlvbiBoTGUoZSl7cmV0dXJuIGUuaW5uZXJSYWRpdXN9ZnVuY3Rpb24gZkxlKGUpe3JldHVybiBlLm91dGVyUmFkaXVzfWZ1bmN0aW9uIHBMZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIGRMZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBtTGUoZSl7cmV0dXJuIGUmJmUucGFkQW5nbGV9ZnVuY3Rpb24gZ0xlKGUsdCxyLG4saSxvLGEscyl7dmFyIGw9ci1lLGM9bi10LHU9YS1pLGg9cy1vLGY9KHUqKHQtbyktaCooZS1pKSkvKGgqbC11KmMpO3JldHVybltlK2YqbCx0K2YqY119ZnVuY3Rpb24gXzcoZSx0LHIsbixpLG8sYSl7dmFyIHM9ZS1yLGw9dC1uLGM9KGE/bzotbykvaDEocypzK2wqbCksdT1jKmwsaD0tYypzLGY9ZSt1LHA9dCtoLGQ9cit1LGc9bitoLF89KGYrZCkvMix5PShwK2cpLzIseD1kLWYsYj1nLXAsUz14KngrYipiLEM9aS1vLFA9ZipnLWQqcCxrPShiPDA/LTE6MSkqaDEoY0Z0KDAsQypDKlMtUCpQKSksTz0oUCpiLXgqaykvUyxEPSgtUCp4LWIqaykvUyxCPShQKmIreCprKS9TLEk9KC1QKngrYiprKS9TLEw9Ty1fLFI9RC15LEY9Qi1fLHo9SS15O3JldHVybiBMKkwrUipSPkYqRit6KnomJihPPUIsRD1JKSx7Y3g6TyxjeTpELHgwMTotdSx5MDE6LWgseDExOk8qKGkvQy0xKSx5MTE6RCooaS9DLTEpfX1mdW5jdGlvbiBoRnQoKXt2YXIgZT1oTGUsdD1mTGUscj1HZSgwKSxuPW51bGwsaT1wTGUsbz1kTGUsYT1tTGUscz1udWxsO2Z1bmN0aW9uIGwoKXt2YXIgYyx1LGg9K2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLGY9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHA9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyktUEMsZD1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1QQyxnPUNldChkLXApLF89ZD5wO2lmKHN8fChzPWM9SXUoKSksZjxoJiYodT1mLGY9aCxoPXUpLCEoZj5Dbykpcy5tb3ZlVG8oMCwwKTtlbHNlIGlmKGc+TWMtQ28pcy5tb3ZlVG8oZip6ZyhwKSxmKkx1KHApKSxzLmFyYygwLDAsZixwLGQsIV8pLGg+Q28mJihzLm1vdmVUbyhoKnpnKGQpLGgqTHUoZCkpLHMuYXJjKDAsMCxoLGQscCxfKSk7ZWxzZXt2YXIgeT1wLHg9ZCxiPXAsUz1kLEM9ZyxQPWcsaz1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKS8yLE89az5DbyYmKG4/K24uYXBwbHkodGhpcyxhcmd1bWVudHMpOmgxKGgqaCtmKmYpKSxEPWc3KENldChmLWgpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxCPUQsST1ELEwsUjtpZihPPkNvKXt2YXIgRj1BZXQoTy9oKkx1KGspKSx6PUFldChPL2YqTHUoaykpOyhDLT1GKjIpPkNvPyhGKj1fPzE6LTEsYis9RixTLT1GKTooQz0wLGI9Uz0ocCtkKS8yKSwoUC09eioyKT5Dbz8oeio9Xz8xOi0xLHkrPXoseC09eik6KFA9MCx5PXg9KHArZCkvMil9dmFyIFU9Zip6Zyh5KSxXPWYqTHUoeSksWj1oKnpnKFMpLHJ0PWgqTHUoUyk7aWYoRD5Dbyl7dmFyIG90PWYqemcoeCksc3Q9ZipMdSh4KSxTdD1oKnpnKGIpLGJ0PWgqTHUoYik7aWYoZzxrdSl7dmFyIE10PUM+Q28/Z0xlKFUsVyxTdCxidCxvdCxzdCxaLHJ0KTpbWixydF0sbHQ9VS1NdFswXSxLdD1XLU10WzFdLF90PW90LU10WzBdLGN0PXN0LU10WzFdLFg9MS9MdSh1RnQoKGx0Kl90K0t0KmN0KS8oaDEobHQqbHQrS3QqS3QpKmgxKF90Kl90K2N0KmN0KSkpLzIpLGV0PWgxKE10WzBdKk10WzBdK010WzFdKk10WzFdKTtCPWc3KEQsKGgtZXQpLyhYLTEpKSxJPWc3KEQsKGYtZXQpLyhYKzEpKX19UD5Dbz9JPkNvPyhMPV83KFN0LGJ0LFUsVyxmLEksXyksUj1fNyhvdCxzdCxaLHJ0LGYsSSxfKSxzLm1vdmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLEk8RD9zLmFyYyhMLmN4LEwuY3ksSSxIbyhMLnkwMSxMLngwMSksSG8oUi55MDEsUi54MDEpLCFfKToocy5hcmMoTC5jeCxMLmN5LEksSG8oTC55MDEsTC54MDEpLEhvKEwueTExLEwueDExKSwhXykscy5hcmMoMCwwLGYsSG8oTC5jeStMLnkxMSxMLmN4K0wueDExKSxIbyhSLmN5K1IueTExLFIuY3grUi54MTEpLCFfKSxzLmFyYyhSLmN4LFIuY3ksSSxIbyhSLnkxMSxSLngxMSksSG8oUi55MDEsUi54MDEpLCFfKSkpOihzLm1vdmVUbyhVLFcpLHMuYXJjKDAsMCxmLHkseCwhXykpOnMubW92ZVRvKFUsVyksIShoPkNvKXx8IShDPkNvKT9zLmxpbmVUbyhaLHJ0KTpCPkNvPyhMPV83KFoscnQsb3Qsc3QsaCwtQixfKSxSPV83KFUsVyxTdCxidCxoLC1CLF8pLHMubGluZVRvKEwuY3grTC54MDEsTC5jeStMLnkwMSksQjxEP3MuYXJjKEwuY3gsTC5jeSxCLEhvKEwueTAxLEwueDAxKSxIbyhSLnkwMSxSLngwMSksIV8pOihzLmFyYyhMLmN4LEwuY3ksQixIbyhMLnkwMSxMLngwMSksSG8oTC55MTEsTC54MTEpLCFfKSxzLmFyYygwLDAsaCxIbyhMLmN5K0wueTExLEwuY3grTC54MTEpLEhvKFIuY3krUi55MTEsUi5jeCtSLngxMSksXykscy5hcmMoUi5jeCxSLmN5LEIsSG8oUi55MTEsUi54MTEpLEhvKFIueTAxLFIueDAxKSwhXykpKTpzLmFyYygwLDAsaCxTLGIsXyl9aWYocy5jbG9zZVBhdGgoKSxjKXJldHVybiBzPW51bGwsYysiInx8bnVsbH1yZXR1cm4gbC5jZW50cm9pZD1mdW5jdGlvbigpe3ZhciBjPSgrZS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMix1PSgraS5hcHBseSh0aGlzLGFyZ3VtZW50cykrICtvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkvMi1rdS8yO3JldHVyblt6Zyh1KSpjLEx1KHUpKmNdfSxsLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOmV9LGwub3V0ZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6dH0sbC5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6cn0sbC5wYWRSYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49Yz09bnVsbD9udWxsOnR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOm59LGwuc3RhcnRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOkdlKCtjKSxsKTppfSxsLmVuZEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6R2UoK2MpLGwpOm99LGwucGFkQW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpHZSgrYyksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPWM9PW51bGw/bnVsbDpjLGwpOnN9LGx9dmFyIGZGdD1NKCgpPT57UHcoKTtPZygpO0l3KCl9KTtmdW5jdGlvbiBwRnQoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIEZnKGUpe3JldHVybiBuZXcgcEZ0KGUpfXZhciBJQz1NKCgpPT57cEZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfX19fSk7ZnVuY3Rpb24gTHcoZSl7cmV0dXJuIGVbMF19ZnVuY3Rpb24ga3coZSl7cmV0dXJuIGVbMV19dmFyIHk3PU0oKCk9Pnt9KTtmdW5jdGlvbiBSdygpe3ZhciBlPUx3LHQ9a3cscj1HZSghMCksbj1udWxsLGk9Rmcsbz1udWxsO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGg9ITEsZjtmb3Iobj09bnVsbCYmKG89aShmPUl1KCkpKSxsPTA7bDw9YzsrK2wpIShsPGMmJnIodT1zW2xdLGwscykpPT09aCYmKChoPSFoKT9vLmxpbmVTdGFydCgpOm8ubGluZUVuZCgpKSxoJiZvLnBvaW50KCtlKHUsbCxzKSwrdCh1LGwscykpO2lmKGYpcmV0dXJuIG89bnVsbCxmKyIifHxudWxsfXJldHVybiBhLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6ZX0sYS55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOnR9LGEuZGVmaW5lZD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCEhcyksYSk6cn0sYS5jdXJ2ZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1zLG4hPW51bGwmJihvPWkobikpLGEpOml9LGEuY29udGV4dD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz09bnVsbD9uPW89bnVsbDpvPWkobj1zKSxhKTpufSxhfXZhciB2Nz1NKCgpPT57UHcoKTtPZygpO0lDKCk7eTcoKX0pO2Z1bmN0aW9uIHg3KCl7dmFyIGU9THcsdD1udWxsLHI9R2UoMCksbj1rdyxpPUdlKCEwKSxvPW51bGwsYT1GZyxzPW51bGw7ZnVuY3Rpb24gbCh1KXt2YXIgaCxmLHAsZD11Lmxlbmd0aCxnLF89ITEseSx4PW5ldyBBcnJheShkKSxiPW5ldyBBcnJheShkKTtmb3Iobz09bnVsbCYmKHM9YSh5PUl1KCkpKSxoPTA7aDw9ZDsrK2gpe2lmKCEoaDxkJiZpKGc9dVtoXSxoLHUpKT09PV8paWYoXz0hXylmPWgscy5hcmVhU3RhcnQoKSxzLmxpbmVTdGFydCgpO2Vsc2V7Zm9yKHMubGluZUVuZCgpLHMubGluZVN0YXJ0KCkscD1oLTE7cD49ZjstLXApcy5wb2ludCh4W3BdLGJbcF0pO3MubGluZUVuZCgpLHMuYXJlYUVuZCgpfV8mJih4W2hdPStlKGcsaCx1KSxiW2hdPStyKGcsaCx1KSxzLnBvaW50KHQ/K3QoZyxoLHUpOnhbaF0sbj8rbihnLGgsdSk6YltoXSkpfWlmKHkpcmV0dXJuIHM9bnVsbCx5KyIifHxudWxsfWZ1bmN0aW9uIGMoKXtyZXR1cm4gUncoKS5kZWZpbmVkKGkpLmN1cnZlKGEpLmNvbnRleHQobyl9cmV0dXJuIGwueD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSx0PW51bGwsbCk6ZX0sbC54MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTplfSxsLngxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OkdlKCt1KSxsKTp0fSxsLnk9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSgrdSksbj1udWxsLGwpOnJ9LGwueTA9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSgrdSksbCk6cn0sbC55MT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj11PT1udWxsP251bGw6dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpHZSgrdSksbCk6bn0sbC5saW5lWDA9bC5saW5lWTA9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShyKX0sbC5saW5lWTE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngoZSkueShuKX0sbC5saW5lWDE9ZnVuY3Rpb24oKXtyZXR1cm4gYygpLngodCkueShyKX0sbC5kZWZpbmVkPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6R2UoISF1KSxsKTppfSxsLmN1cnZlPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXUsbyE9bnVsbCYmKHM9YShvKSksbCk6YX0sbC5jb250ZXh0PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PT1udWxsP289cz1udWxsOnM9YShvPXUpLGwpOm99LGx9dmFyIFBldD1NKCgpPT57UHcoKTtPZygpO0lDKCk7djcoKTt5NygpfSk7ZnVuY3Rpb24gZEZ0KGUsdCl7cmV0dXJuIHQ8ZT8tMTp0PmU/MTp0Pj1lPzA6TmFOfXZhciBtRnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGdGdChlKXtyZXR1cm4gZX12YXIgX0Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiB5RnQoKXt2YXIgZT1nRnQsdD1kRnQscj1udWxsLG49R2UoMCksaT1HZShNYyksbz1HZSgwKTtmdW5jdGlvbiBhKHMpe3ZhciBsLGM9cy5sZW5ndGgsdSxoLGY9MCxwPW5ldyBBcnJheShjKSxkPW5ldyBBcnJheShjKSxnPStuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfPU1hdGgubWluKE1jLE1hdGgubWF4KC1NYyxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1nKSkseSx4PU1hdGgubWluKE1hdGguYWJzKF8pL2Msby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLGI9eCooXzwwPy0xOjEpLFM7Zm9yKGw9MDtsPGM7KytsKShTPWRbcFtsXT1sXT0rZShzW2xdLGwscykpPjAmJihmKz1TKTtmb3IodCE9bnVsbD9wLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gdChkW0NdLGRbUF0pfSk6ciE9bnVsbCYmcC5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIHIoc1tDXSxzW1BdKX0pLGw9MCxoPWY/KF8tYypiKS9mOjA7bDxjOysrbCxnPXkpdT1wW2xdLFM9ZFt1XSx5PWcrKFM+MD9TKmg6MCkrYixkW3VdPXtkYXRhOnNbdV0saW5kZXg6bCx2YWx1ZTpTLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTp5LHBhZEFuZ2xlOnh9O3JldHVybiBkfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOmV9LGEuc29ydFZhbHVlcz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLHI9bnVsbCxhKTp0fSxhLnNvcnQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9cyx0PW51bGwsYSk6cn0sYS5zdGFydEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm59LGEuZW5kQW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHZSgrcyksYSk6aX0sYS5wYWRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTpvfSxhfXZhciB2RnQ9TSgoKT0+e09nKCk7bUZ0KCk7X0Z0KCk7SXcoKX0pO2Z1bmN0aW9uIHhGdChlKXt0aGlzLl9jdXJ2ZT1lfWZ1bmN0aW9uIE53KGUpe2Z1bmN0aW9uIHQocil7cmV0dXJuIG5ldyB4RnQoZShyKSl9cmV0dXJuIHQuX2N1cnZlPWUsdH12YXIgYjcsSWV0PU0oKCk9PntJQygpO2I3PU53KEZnKTt4RnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5fY3VydmUucG9pbnQodCpNYXRoLnNpbihlKSx0Ki1NYXRoLmNvcyhlKSl9fX0pO2Z1bmN0aW9uIER3KGUpe3ZhciB0PWUuY3VydmU7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZS5jdXJ2ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KE53KHIpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIExldCgpe3JldHVybiBEdyhSdygpLmN1cnZlKGI3KSl9dmFyIGtldD1NKCgpPT57SWV0KCk7djcoKX0pO2Z1bmN0aW9uIFJldCgpe3ZhciBlPXg3KCkuY3VydmUoYjcpLHQ9ZS5jdXJ2ZSxyPWUubGluZVgwLG49ZS5saW5lWDEsaT1lLmxpbmVZMCxvPWUubGluZVkxO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUuc3RhcnRBbmdsZT1lLngwLGRlbGV0ZSBlLngwLGUuZW5kQW5nbGU9ZS54MSxkZWxldGUgZS54MSxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmlubmVyUmFkaXVzPWUueTAsZGVsZXRlIGUueTAsZS5vdXRlclJhZGl1cz1lLnkxLGRlbGV0ZSBlLnkxLGUubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRHcocigpKX0sZGVsZXRlIGUubGluZVgwLGUubGluZUVuZEFuZ2xlPWZ1bmN0aW9uKCl7cmV0dXJuIER3KG4oKSl9LGRlbGV0ZSBlLmxpbmVYMSxlLmxpbmVJbm5lclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBEdyhpKCkpfSxkZWxldGUgZS5saW5lWTAsZS5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gRHcobygpKX0sZGVsZXRlIGUubGluZVkxLGUuY3VydmU9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChOdyhhKSk6dCgpLl9jdXJ2ZX0sZX12YXIgYkZ0PU0oKCk9PntJZXQoKTtQZXQoKTtrZXQoKX0pO2Z1bmN0aW9uIGYxKGUsdCl7cmV0dXJuWyh0PSt0KSpNYXRoLmNvcyhlLT1NYXRoLlBJLzIpLHQqTWF0aC5zaW4oZSldfXZhciBOZXQ9TSgoKT0+e30pO3ZhciBMQyxEZXQ9TSgoKT0+e0xDPUFycmF5LnByb3RvdHlwZS5zbGljZX0pO2Z1bmN0aW9uIF9MZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24geUxlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBPZXQoZSl7dmFyIHQ9X0xlLHI9eUxlLG49THcsaT1rdyxvPW51bGw7ZnVuY3Rpb24gYSgpe3ZhciBzLGw9TEMuY2FsbChhcmd1bWVudHMpLGM9dC5hcHBseSh0aGlzLGwpLHU9ci5hcHBseSh0aGlzLGwpO2lmKG98fChvPXM9SXUoKSksZShvLCtuLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK2kuYXBwbHkodGhpcyxsKSwrbi5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtpLmFwcGx5KHRoaXMsbCkpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1zLGEpOnR9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXMsYSk6cn0sYS54PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6R2UoK3MpLGEpOm59LGEueT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdlKCtzKSxhKTppfSxhLmNvbnRleHQ9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89cz09bnVsbD9udWxsOnMsYSk6b30sYX1mdW5jdGlvbiB2TGUoZSx0LHIsbixpKXtlLm1vdmVUbyh0LHIpLGUuYmV6aWVyQ3VydmVUbyh0PSh0K24pLzIscix0LGksbixpKX1mdW5jdGlvbiB4TGUoZSx0LHIsbixpKXtlLm1vdmVUbyh0LHIpLGUuYmV6aWVyQ3VydmVUbyh0LHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBiTGUoZSx0LHIsbixpKXt2YXIgbz1mMSh0LHIpLGE9ZjEodCxyPShyK2kpLzIpLHM9ZjEobixyKSxsPWYxKG4saSk7ZS5tb3ZlVG8ob1swXSxvWzFdKSxlLmJlemllckN1cnZlVG8oYVswXSxhWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfWZ1bmN0aW9uIHdGdCgpe3JldHVybiBPZXQodkxlKX1mdW5jdGlvbiBTRnQoKXtyZXR1cm4gT2V0KHhMZSl9ZnVuY3Rpb24gTUZ0KCl7dmFyIGU9T2V0KGJMZSk7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5yYWRpdXM9ZS55LGRlbGV0ZSBlLnksZX12YXIgRUZ0PU0oKCk9PntQdygpO0RldCgpO09nKCk7eTcoKTtOZXQoKX0pO3ZhciBrQyx6ZXQ9TSgoKT0+e0l3KCk7a0M9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC9rdSk7ZS5tb3ZlVG8ociwwKSxlLmFyYygwLDAsciwwLE1jKX19fSk7dmFyIHc3LEZldD1NKCgpPT57dzc9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC81KS8yO2UubW92ZVRvKC0zKnIsLXIpLGUubGluZVRvKC1yLC1yKSxlLmxpbmVUbygtciwtMypyKSxlLmxpbmVUbyhyLC0zKnIpLGUubGluZVRvKHIsLXIpLGUubGluZVRvKDMqciwtciksZS5saW5lVG8oMypyLHIpLGUubGluZVRvKHIsciksZS5saW5lVG8ociwzKnIpLGUubGluZVRvKC1yLDMqciksZS5saW5lVG8oLXIsciksZS5saW5lVG8oLTMqcixyKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgVEZ0LHdMZSxTNyxCZXQ9TSgoKT0+e1RGdD1NYXRoLnNxcnQoLjMzMzMzMzMzMzMzMzMzMzMpLHdMZT1URnQqMixTNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L3dMZSksbj1yKlRGdDtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLDApLGUubGluZVRvKDAsciksZS5saW5lVG8oLW4sMCksZS5jbG9zZVBhdGgoKX19fSk7dmFyIFNMZSxDRnQsTUxlLEVMZSxNNyxIZXQ9TSgoKT0+e0l3KCk7U0xlPS44OTA4MTMwOTE1MjkyODUyLENGdD1NYXRoLnNpbihrdS8xMCkvTWF0aC5zaW4oNyprdS8xMCksTUxlPU1hdGguc2luKE1jLzEwKSpDRnQsRUxlPS1NYXRoLmNvcyhNYy8xMCkqQ0Z0LE03PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQqU0xlKSxuPU1MZSpyLGk9RUxlKnI7ZS5tb3ZlVG8oMCwtciksZS5saW5lVG8obixpKTtmb3IodmFyIG89MTtvPDU7KytvKXt2YXIgYT1NYypvLzUscz1NYXRoLmNvcyhhKSxsPU1hdGguc2luKGEpO2UubGluZVRvKGwqciwtcypyKSxlLmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfWUuY2xvc2VQYXRoKCl9fX0pO3ZhciBFNyxWZXQ9TSgoKT0+e0U3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQpLG49LXIvMjtlLnJlY3QobixuLHIscil9fX0pO3ZhciBVZXQsVDcscWV0PU0oKCk9PntVZXQ9TWF0aC5zcXJ0KDMpLFQ3PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9LU1hdGguc3FydCh0LyhVZXQqMykpO2UubW92ZVRvKDAscioyKSxlLmxpbmVUbygtVWV0KnIsLXIpLGUubGluZVRvKFVldCpyLC1yKSxlLmNsb3NlUGF0aCgpfX19KTt2YXIgRWMsVGMsR2V0LFRMZSxDNyxXZXQ9TSgoKT0+e0VjPS0uNSxUYz1NYXRoLnNxcnQoMykvMixHZXQ9MS9NYXRoLnNxcnQoMTIpLFRMZT0oR2V0LzIrMSkqMyxDNz17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L1RMZSksbj1yLzIsaT1yKkdldCxvPW4sYT1yKkdldCtyLHM9LW8sbD1hO2UubW92ZVRvKG4saSksZS5saW5lVG8obyxhKSxlLmxpbmVUbyhzLGwpLGUubGluZVRvKEVjKm4tVGMqaSxUYypuK0VjKmkpLGUubGluZVRvKEVjKm8tVGMqYSxUYypvK0VjKmEpLGUubGluZVRvKEVjKnMtVGMqbCxUYypzK0VjKmwpLGUubGluZVRvKEVjKm4rVGMqaSxFYyppLVRjKm4pLGUubGluZVRvKEVjKm8rVGMqYSxFYyphLVRjKm8pLGUubGluZVRvKEVjKnMrVGMqbCxFYypsLVRjKnMpLGUuY2xvc2VQYXRoKCl9fX0pO2Z1bmN0aW9uIFBGdCgpe3ZhciBlPUdlKGtDKSx0PUdlKDY0KSxyPW51bGw7ZnVuY3Rpb24gbigpe3ZhciBpO2lmKHJ8fChyPWk9SXUoKSksZS5hcHBseSh0aGlzLGFyZ3VtZW50cykuZHJhdyhyLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksaSlyZXR1cm4gcj1udWxsLGkrIiJ8fG51bGx9cmV0dXJuIG4udHlwZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkdlKGkpLG4pOmV9LG4uc2l6ZT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOkdlKCtpKSxuKTp0fSxuLmNvbnRleHQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9aT09bnVsbD9udWxsOmksbik6cn0sbn12YXIgQUZ0LElGdD1NKCgpPT57UHcoKTt6ZXQoKTtGZXQoKTtCZXQoKTtIZXQoKTtWZXQoKTtxZXQoKTtXZXQoKTtPZygpO0FGdD1ba0MsdzcsUzcsRTcsTTcsVDcsQzddfSk7ZnVuY3Rpb24gQ2MoKXt9dmFyIFJDPU0oKCk9Pnt9KTtmdW5jdGlvbiBPdyhlLHQscil7ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKCgyKmUuX3gwK2UuX3gxKS8zLCgyKmUuX3kwK2UuX3kxKS8zLChlLl94MCsyKmUuX3gxKS8zLChlLl95MCsyKmUuX3kxKS8zLChlLl94MCs0KmUuX3gxK3QpLzYsKGUuX3kwKzQqZS5feTErcikvNil9ZnVuY3Rpb24gTkMoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIExGdChlKXtyZXR1cm4gbmV3IE5DKGUpfXZhciBEQz1NKCgpPT57TkMucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpPdyh0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpPdyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX19KTtmdW5jdGlvbiBrRnQoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIFJGdChlKXtyZXR1cm4gbmV3IGtGdChlKX12YXIgTkZ0PU0oKCk9PntSQygpO0RDKCk7a0Z0LnByb3RvdHlwZT17YXJlYVN0YXJ0OkNjLGFyZWFFbmQ6Q2MsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDIrMip0aGlzLl94MykvMywodGhpcy5feTIrMip0aGlzLl95MykvMyksdGhpcy5fY29udGV4dC5saW5lVG8oKHRoaXMuX3gzKzIqdGhpcy5feDIpLzMsKHRoaXMuX3kzKzIqdGhpcy5feTIpLzMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAzOnt0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLnBvaW50KHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLnBvaW50KHRoaXMuX3g0LHRoaXMuX3k0KTticmVha319fSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPWUsdGhpcy5feTI9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9ZSx0aGlzLl95ND10LHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK2UpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErdCkvNik7YnJlYWs7ZGVmYXVsdDpPdyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX19KTtmdW5jdGlvbiBERnQoZSl7dGhpcy5fY29udGV4dD1lfWZ1bmN0aW9uIE9GdChlKXtyZXR1cm4gbmV3IERGdChlKX12YXIgekZ0PU0oKCk9PntEQygpO0RGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MStlKS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErdCkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ok93KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fX0pO2Z1bmN0aW9uIEZGdChlLHQpe3RoaXMuX2Jhc2lzPW5ldyBOQyhlKSx0aGlzLl9iZXRhPXR9dmFyIEJGdCxIRnQ9TSgoKT0+e0RDKCk7RkZ0LnByb3RvdHlwZT17bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD1bXSx0aGlzLl95PVtdLHRoaXMuX2Jhc2lzLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5feCx0PXRoaXMuX3kscj1lLmxlbmd0aC0xO2lmKHI+MClmb3IodmFyIG49ZVswXSxpPXRbMF0sbz1lW3JdLW4sYT10W3JdLWkscz0tMSxsOysrczw9cjspbD1zL3IsdGhpcy5fYmFzaXMucG9pbnQodGhpcy5fYmV0YSplW3NdKygxLXRoaXMuX2JldGEpKihuK2wqbyksdGhpcy5fYmV0YSp0W3NdKygxLXRoaXMuX2JldGEpKihpK2wqYSkpO3RoaXMuX3g9dGhpcy5feT1udWxsLHRoaXMuX2Jhc2lzLmxpbmVFbmQoKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLl94LnB1c2goK2UpLHRoaXMuX3kucHVzaCgrdCl9fTtCRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0PT09MT9uZXcgTkMobik6bmV3IEZGdChuLHQpfXJldHVybiByLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguODUpfSk7ZnVuY3Rpb24gencoZSx0LHIpe2UuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLl94MStlLl9rKihlLl94Mi1lLl94MCksZS5feTErZS5fayooZS5feTItZS5feTApLGUuX3gyK2UuX2sqKGUuX3gxLXQpLGUuX3kyK2UuX2sqKGUuX3kxLXIpLGUuX3gyLGUuX3kyKX1mdW5jdGlvbiBBNyhlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9rPSgxLXQpLzZ9dmFyIFZGdCxPQz1NKCgpPT57QTcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnp3KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94MT1lLHRoaXMuX3kxPXQ7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp6dyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07VkZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IEE3KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApfSk7ZnVuY3Rpb24gUDcoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fXZhciBVRnQsWWV0PU0oKCk9PntSQygpO09DKCk7UDcucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz1lLHRoaXMuX3kzPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9ZSx0aGlzLl95ND10KTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT1lLHRoaXMuX3k1PXQ7YnJlYWs7ZGVmYXVsdDp6dyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07VUZ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IFA3KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApfSk7ZnVuY3Rpb24gSTcoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fXZhciBxRnQsamV0PU0oKCk9PntPQygpO0k3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Onp3KHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtxRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgSTcobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCl9KTtmdW5jdGlvbiB6QyhlLHQscil7dmFyIG49ZS5feDEsaT1lLl95MSxvPWUuX3gyLGE9ZS5feTI7aWYoZS5fbDAxX2E+Q28pe3ZhciBzPTIqZS5fbDAxXzJhKzMqZS5fbDAxX2EqZS5fbDEyX2ErZS5fbDEyXzJhLGw9MyplLl9sMDFfYSooZS5fbDAxX2ErZS5fbDEyX2EpO249KG4qcy1lLl94MCplLl9sMTJfMmErZS5feDIqZS5fbDAxXzJhKS9sLGk9KGkqcy1lLl95MCplLl9sMTJfMmErZS5feTIqZS5fbDAxXzJhKS9sfWlmKGUuX2wyM19hPkNvKXt2YXIgYz0yKmUuX2wyM18yYSszKmUuX2wyM19hKmUuX2wxMl9hK2UuX2wxMl8yYSx1PTMqZS5fbDIzX2EqKGUuX2wyM19hK2UuX2wxMl9hKTtvPShvKmMrZS5feDEqZS5fbDIzXzJhLXQqZS5fbDEyXzJhKS91LGE9KGEqYytlLl95MSplLl9sMjNfMmEtciplLl9sMTJfMmEpL3V9ZS5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4saSxvLGEsZS5feDIsZS5feTIpfWZ1bmN0aW9uIEdGdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXZhciBXRnQsTDc9TSgoKT0+e0l3KCk7T0MoKTtHRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDIsdGhpcy5feTIpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7ZGVmYXVsdDp6Qyh0aGlzLGUsdCk7YnJlYWt9dGhpcy5fbDAxX2E9dGhpcy5fbDEyX2EsdGhpcy5fbDEyX2E9dGhpcy5fbDIzX2EsdGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYSx0aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhLHRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O1dGdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IEdGdChuLHQpOm5ldyBBNyhuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpfSk7ZnVuY3Rpb24gWUZ0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9dmFyIGpGdCxYRnQ9TSgoKT0+e1lldCgpO1JDKCk7TDcoKTtZRnQucHJvdG90eXBlPXthcmVhU3RhcnQ6Q2MsYXJlYUVuZDpDYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl94Mz10aGlzLl94ND10aGlzLl94NT10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj10aGlzLl95Mz10aGlzLl95ND10aGlzLl95NT1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAxOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDI6e3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gzLHRoaXMuX3kzKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCksdGhpcy5wb2ludCh0aGlzLl94NSx0aGlzLl95NSk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9ZSx0aGlzLl95Mz10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWUsdGhpcy5feTQ9dCk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9ZSx0aGlzLl95NT10O2JyZWFrO2RlZmF1bHQ6ekModGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtqRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyBZRnQobix0KTpuZXcgUDcobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KX0pO2Z1bmN0aW9uICRGdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fXZhciBLRnQsWkZ0PU0oKCk9PntqZXQoKTtMNygpOyRGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6ekModGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTtLRnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0P25ldyAkRnQobix0KTpuZXcgSTcobiwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KC41KX0pO2Z1bmN0aW9uIEpGdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gUUZ0KGUpe3JldHVybiBuZXcgSkZ0KGUpfXZhciB0QnQ9TSgoKT0+e1JDKCk7SkZ0LnByb3RvdHlwZT17YXJlYVN0YXJ0OkNjLGFyZWFFbmQ6Q2MsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe2U9K2UsdD0rdCx0aGlzLl9wb2ludD90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOih0aGlzLl9wb2ludD0xLHRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCkpfX19KTtmdW5jdGlvbiBlQnQoZSl7cmV0dXJuIGU8MD8tMToxfWZ1bmN0aW9uIHJCdChlLHQscil7dmFyIG49ZS5feDEtZS5feDAsaT10LWUuX3gxLG89KGUuX3kxLWUuX3kwKS8obnx8aTwwJiYtMCksYT0oci1lLl95MSkvKGl8fG48MCYmLTApLHM9KG8qaSthKm4pLyhuK2kpO3JldHVybihlQnQobykrZUJ0KGEpKSpNYXRoLm1pbihNYXRoLmFicyhvKSxNYXRoLmFicyhhKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gbkJ0KGUsdCl7dmFyIHI9ZS5feDEtZS5feDA7cmV0dXJuIHI/KDMqKGUuX3kxLWUuX3kwKS9yLXQpLzI6dH1mdW5jdGlvbiBYZXQoZSx0LHIpe3ZhciBuPWUuX3gwLGk9ZS5feTAsbz1lLl94MSxhPWUuX3kxLHM9KG8tbikvMztlLl9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyp0LG8tcyxhLXMqcixvLGEpfWZ1bmN0aW9uIGs3KGUpe3RoaXMuX2NvbnRleHQ9ZX1mdW5jdGlvbiBpQnQoZSl7dGhpcy5fY29udGV4dD1uZXcgb0J0KGUpfWZ1bmN0aW9uIG9CdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gYUJ0KGUpe3JldHVybiBuZXcgazcoZSl9ZnVuY3Rpb24gc0J0KGUpe3JldHVybiBuZXcgaUJ0KGUpfXZhciBsQnQ9TSgoKT0+e2s3LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpYZXQodGhpcyx0aGlzLl90MCxuQnQodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1OYU47aWYoZT0rZSx0PSt0LCEoZT09PXRoaXMuX3gxJiZ0PT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLFhldCh0aGlzLG5CdCh0aGlzLHI9ckJ0KHRoaXMsZSx0KSkscik7YnJlYWs7ZGVmYXVsdDpYZXQodGhpcyx0aGlzLl90MCxyPXJCdCh0aGlzLGUsdCkpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dCx0aGlzLl90MD1yfX19OyhpQnQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoazcucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24oZSx0KXtrNy5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLHQsZSl9O29CdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubW92ZVRvKHQsZSl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24oZSx0LHIsbixpLG8pe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyh0LGUsbixyLG8saSl9fX0pO2Z1bmN0aW9uIHVCdChlKXt0aGlzLl9jb250ZXh0PWV9ZnVuY3Rpb24gY0J0KGUpe3ZhciB0LHI9ZS5sZW5ndGgtMSxuLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGE9bmV3IEFycmF5KHIpO2ZvcihpWzBdPTAsb1swXT0yLGFbMF09ZVswXSsyKmVbMV0sdD0xO3Q8ci0xOysrdClpW3RdPTEsb1t0XT00LGFbdF09NCplW3RdKzIqZVt0KzFdO2ZvcihpW3ItMV09MixvW3ItMV09NyxhW3ItMV09OCplW3ItMV0rZVtyXSx0PTE7dDxyOysrdCluPWlbdF0vb1t0LTFdLG9bdF0tPW4sYVt0XS09biphW3QtMV07Zm9yKGlbci0xXT1hW3ItMV0vb1tyLTFdLHQ9ci0yO3Q+PTA7LS10KWlbdF09KGFbdF0taVt0KzFdKS9vW3RdO2ZvcihvW3ItMV09KGVbcl0raVtyLTFdKS8yLHQ9MDt0PHItMTsrK3Qpb1t0XT0yKmVbdCsxXS1pW3QrMV07cmV0dXJuW2ksb119ZnVuY3Rpb24gaEJ0KGUpe3JldHVybiBuZXcgdUJ0KGUpfXZhciBmQnQ9TSgoKT0+e3VCdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoO2lmKHIpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlWzBdLHRbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKGVbMF0sdFswXSkscj09PTIpdGhpcy5fY29udGV4dC5saW5lVG8oZVsxXSx0WzFdKTtlbHNlIGZvcih2YXIgbj1jQnQoZSksaT1jQnQodCksbz0wLGE9MTthPHI7KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVtvXSxpWzBdW29dLG5bMV1bb10saVsxXVtvXSxlW2FdLHRbYV0pOyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmcj09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19fSk7ZnVuY3Rpb24gUjcoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5fdD10fWZ1bmN0aW9uIHBCdChlKXtyZXR1cm4gbmV3IFI3KGUsLjUpfWZ1bmN0aW9uIGRCdChlKXtyZXR1cm4gbmV3IFI3KGUsMCl9ZnVuY3Rpb24gbUJ0KGUpe3JldHVybiBuZXcgUjcoZSwxKX12YXIgZ0J0PU0oKCk9PntSNy5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmdGhpcy5fcG9pbnQ9PT0yJiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6e2lmKHRoaXMuX3Q8PTApdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2Vsc2V7dmFyIHI9dGhpcy5feCooMS10aGlzLl90KStlKnRoaXMuX3Q7dGhpcy5fY29udGV4dC5saW5lVG8ocix0aGlzLl95KSx0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHQpfWJyZWFrfX10aGlzLl94PWUsdGhpcy5feT10fX19KTtmdW5jdGlvbiBSdShlLHQpe2lmKChhPWUubGVuZ3RoKT4xKWZvcih2YXIgcj0xLG4saSxvPWVbdFswXV0sYSxzPW8ubGVuZ3RoO3I8YTsrK3IpZm9yKGk9byxvPWVbdFtyXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihpW25dWzFdKT9pW25dWzBdOmlbbl1bMV19dmFyIEZ3PU0oKCk9Pnt9KTtmdW5jdGlvbiBOdShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgQXJyYXkodCk7LS10Pj0wOylyW3RdPXQ7cmV0dXJuIHJ9dmFyIEJ3PU0oKCk9Pnt9KTtmdW5jdGlvbiBDTGUoZSx0KXtyZXR1cm4gZVt0XX1mdW5jdGlvbiBfQnQoKXt2YXIgZT1HZShbXSksdD1OdSxyPVJ1LG49Q0xlO2Z1bmN0aW9uIGkobyl7dmFyIGE9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykscyxsPW8ubGVuZ3RoLGM9YS5sZW5ndGgsdT1uZXcgQXJyYXkoYyksaDtmb3Iocz0wO3M8YzsrK3Mpe2Zvcih2YXIgZj1hW3NdLHA9dVtzXT1uZXcgQXJyYXkobCksZD0wLGc7ZDxsOysrZClwW2RdPWc9WzAsK24ob1tkXSxmLGQsbyldLGcuZGF0YT1vW2RdO3Aua2V5PWZ9Zm9yKHM9MCxoPXQodSk7czxjOysrcyl1W2hbc11dLmluZGV4PXM7cmV0dXJuIHIodSxoKSx1fXJldHVybiBpLmtleXM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpHZShMQy5jYWxsKG8pKSxpKTplfSxpLnZhbHVlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286R2UoK28pLGkpOm59LGkub3JkZXI9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bz09bnVsbD9OdTp0eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOkdlKExDLmNhbGwobykpLGkpOnR9LGkub2Zmc2V0PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW89PW51bGw/UnU6byxpKTpyfSxpfXZhciB5QnQ9TSgoKT0+e0RldCgpO09nKCk7RncoKTtCdygpfSk7ZnVuY3Rpb24gdkJ0KGUsdCl7aWYoKG49ZS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGk9MCxvPWVbMF0ubGVuZ3RoLGE7aTxvOysraSl7Zm9yKGE9cj0wO3I8bjsrK3IpYSs9ZVtyXVtpXVsxXXx8MDtpZihhKWZvcihyPTA7cjxuOysrcillW3JdW2ldWzFdLz1hfVJ1KGUsdCl9fXZhciB4QnQ9TSgoKT0+e0Z3KCl9KTtmdW5jdGlvbiBiQnQoZSx0KXtpZigobD1lLmxlbmd0aCk+MSlmb3IodmFyIHIsbj0wLGksbyxhLHMsbCxjPWVbdFswXV0ubGVuZ3RoO248YzsrK24pZm9yKGE9cz0wLHI9MDtyPGw7KytyKShvPShpPWVbdFtyXV1bbl0pWzFdLWlbMF0pPj0wPyhpWzBdPWEsaVsxXT1hKz1vKTpvPDA/KGlbMV09cyxpWzBdPXMrPW8pOmlbMF09YX12YXIgd0J0PU0oKCk9Pnt9KTtmdW5jdGlvbiBTQnQoZSx0KXtpZigoaT1lLmxlbmd0aCk+MCl7Zm9yKHZhciByPTAsbj1lW3RbMF1dLGksbz1uLmxlbmd0aDtyPG87KytyKXtmb3IodmFyIGE9MCxzPTA7YTxpOysrYSlzKz1lW2FdW3JdWzFdfHwwO25bcl1bMV0rPW5bcl1bMF09LXMvMn1SdShlLHQpfX12YXIgTUJ0PU0oKCk9PntGdygpfSk7ZnVuY3Rpb24gRUJ0KGUsdCl7aWYoISghKChhPWUubGVuZ3RoKT4wKXx8ISgobz0oaT1lW3RbMF1dKS5sZW5ndGgpPjApKSl7Zm9yKHZhciByPTAsbj0xLGksbyxhO248bzsrK24pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxhOysrcyl7Zm9yKHZhciB1PWVbdFtzXV0saD11W25dWzFdfHwwLGY9dVtuLTFdWzFdfHwwLHA9KGgtZikvMixkPTA7ZDxzOysrZCl7dmFyIGc9ZVt0W2RdXSxfPWdbbl1bMV18fDAseT1nW24tMV1bMV18fDA7cCs9Xy15fWwrPWgsYys9cCpofWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIsbCYmKHItPWMvbCl9aVtuLTFdWzFdKz1pW24tMV1bMF09cixSdShlLHQpfX12YXIgVEJ0PU0oKCk9PntGdygpfSk7ZnVuY3Rpb24gTjcoZSl7dmFyIHQ9ZS5tYXAoJGV0KTtyZXR1cm4gTnUoZSkuc29ydChmdW5jdGlvbihyLG4pe3JldHVybiB0W3JdLXRbbl19KX1mdW5jdGlvbiAkZXQoZSl7Zm9yKHZhciB0PTAscj0tMSxuPWUubGVuZ3RoLGk7KytyPG47KShpPStlW3JdWzFdKSYmKHQrPWkpO3JldHVybiB0fXZhciBENz1NKCgpPT57QncoKX0pO2Z1bmN0aW9uIENCdChlKXtyZXR1cm4gTjcoZSkucmV2ZXJzZSgpfXZhciBBQnQ9TSgoKT0+e0Q3KCl9KTtmdW5jdGlvbiBQQnQoZSl7dmFyIHQ9ZS5sZW5ndGgscixuLGk9ZS5tYXAoJGV0KSxvPU51KGUpLnNvcnQoZnVuY3Rpb24odSxoKXtyZXR1cm4gaVtoXS1pW3VdfSksYT0wLHM9MCxsPVtdLGM9W107Zm9yKHI9MDtyPHQ7KytyKW49b1tyXSxhPHM/KGErPWlbbl0sbC5wdXNoKG4pKToocys9aVtuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9dmFyIElCdD1NKCgpPT57QncoKTtENygpfSk7ZnVuY3Rpb24gTEJ0KGUpe3JldHVybiBOdShlKS5yZXZlcnNlKCl9dmFyIGtCdD1NKCgpPT57QncoKX0pO3ZhciBSQnQ9TSgoKT0+e2ZGdCgpO1BldCgpO3Y3KCk7dkZ0KCk7YkZ0KCk7a2V0KCk7TmV0KCk7RUZ0KCk7SUZ0KCk7emV0KCk7RmV0KCk7QmV0KCk7VmV0KCk7SGV0KCk7cWV0KCk7V2V0KCk7TkZ0KCk7ekZ0KCk7REMoKTtIRnQoKTtZZXQoKTtqZXQoKTtPQygpO1hGdCgpO1pGdCgpO0w3KCk7dEJ0KCk7SUMoKTtsQnQoKTtmQnQoKTtnQnQoKTt5QnQoKTt4QnQoKTt3QnQoKTtGdygpO01CdCgpO1RCdCgpO0Q3KCk7QUJ0KCk7SUJ0KCk7QncoKTtrQnQoKX0pO2Z1bmN0aW9uIFNyKGUsdCxyLG4pe2Z1bmN0aW9uIGkobyl7cmV0dXJuIGUobz1uZXcgRGF0ZSgrbykpLG99cmV0dXJuIGkuZmxvb3I9aSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBTcihmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIEtldC5zZXRUaW1lKCtvKSxaZXQuc2V0VGltZSgrYSksZShLZXQpLGUoWmV0KSxNYXRoLmZsb29yKHIoS2V0LFpldCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciBLZXQsWmV0LGZhPU0oKCk9PntLZXQ9bmV3IERhdGUsWmV0PW5ldyBEYXRlfSk7dmFyIE83LEpldCxRZXQsTkJ0PU0oKCk9PntmYSgpO083PVNyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC1lfSk7TzcuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9TWF0aC5mbG9vcihlKSwhaXNGaW5pdGUoZSl8fCEoZT4wKT9udWxsOmU+MT9TcihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L2UpKmUpfSxmdW5jdGlvbih0LHIpe3Quc2V0VGltZSgrdCtyKmUpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL2V9KTpPN307SmV0PU83LFFldD1PNy5yYW5nZX0pO3ZhciBGQyxQcyxiZix6NyxGNyx3Zj1NKCgpPT57RkM9MWUzLFBzPTZlNCxiZj0zNmU1LHo3PTg2NGU1LEY3PTYwNDhlNX0pO3ZhciBEQnQsdHJ0LGVydCxPQnQ9TSgoKT0+e2ZhKCk7d2YoKTtEQnQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKE1hdGguZmxvb3IoZS9GQykqRkMpfSxmdW5jdGlvbihlLHQpe2Uuc2V0VGltZSgrZSt0KkZDKX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9GQ30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDU2Vjb25kcygpfSksdHJ0PURCdCxlcnQ9REJ0LnJhbmdlfSk7dmFyIHpCdCxGQnQsQkJ0LEhCdD1NKCgpPT57ZmEoKTt3ZigpO3pCdD1TcihmdW5jdGlvbihlKXtlLnNldFRpbWUoTWF0aC5mbG9vcihlL1BzKSpQcyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqUHMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL1BzfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNaW51dGVzKCl9KSxGQnQ9ekJ0LEJCdD16QnQucmFuZ2V9KTt2YXIgVkJ0LFVCdCxxQnQsR0J0PU0oKCk9PntmYSgpO3dmKCk7VkJ0PVNyKGZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0VGltZXpvbmVPZmZzZXQoKSpQcyViZjt0PDAmJih0Kz1iZiksZS5zZXRUaW1lKE1hdGguZmxvb3IoKCtlLXQpL2JmKSpiZit0KX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpiZil9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvYmZ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEhvdXJzKCl9KSxVQnQ9VkJ0LHFCdD1WQnQucmFuZ2V9KTt2YXIgV0J0LFlCdCxqQnQsWEJ0PU0oKCk9PntmYSgpO3dmKCk7V0J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUtKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKlBzKS96N30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF0ZSgpLTF9KSxZQnQ9V0J0LGpCdD1XQnQucmFuZ2V9KTtmdW5jdGlvbiBwMShlKXtyZXR1cm4gU3IoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctZSklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldERhdGUodC5nZXREYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10LShyLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpQcykvRjd9KX12YXIgQjcscnJ0LG5ydCxpcnQsb3J0LGFydCxzcnQsbHJ0LCRCdCxLQnQsWkJ0LEpCdCxRQnQsdEh0LGVIdD1NKCgpPT57ZmEoKTt3ZigpO0I3PXAxKDApLHJydD1wMSgxKSxucnQ9cDEoMiksaXJ0PXAxKDMpLG9ydD1wMSg0KSxhcnQ9cDEoNSksc3J0PXAxKDYpLGxydD1CNy5yYW5nZSwkQnQ9cnJ0LnJhbmdlLEtCdD1ucnQucmFuZ2UsWkJ0PWlydC5yYW5nZSxKQnQ9b3J0LnJhbmdlLFFCdD1hcnQucmFuZ2UsdEh0PXNydC5yYW5nZX0pO3ZhciBySHQsbkh0LGlIdCxvSHQ9TSgoKT0+e2ZhKCk7ckh0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZSgxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0TW9udGgoZS5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldE1vbnRoKCktZS5nZXRNb250aCgpKyh0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0TW9udGgoKX0pLG5IdD1ySHQsaUh0PXJIdC5yYW5nZX0pO3ZhciBjcnQsYUh0LHNIdCxsSHQ9TSgoKT0+e2ZhKCk7Y3J0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7Y3J0LmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpTcihmdW5jdGlvbih0KXt0LnNldEZ1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRGdWxsWWVhcigpL2UpKmUpLHQuc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RnVsbFllYXIodC5nZXRGdWxsWWVhcigpK3IqZSl9KX07YUh0PWNydCxzSHQ9Y3J0LnJhbmdlfSk7dmFyIGNIdCx1SHQsaEh0LGZIdD1NKCgpPT57ZmEoKTt3ZigpO2NIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ1NlY29uZHMoMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpQcyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvUHN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01pbnV0ZXMoKX0pLHVIdD1jSHQsaEh0PWNIdC5yYW5nZX0pO3ZhciBwSHQsZEh0LG1IdCxnSHQ9TSgoKT0+e2ZhKCk7d2YoKTtwSHQ9U3IoZnVuY3Rpb24oZSl7ZS5zZXRVVENNaW51dGVzKDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpiZil9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvYmZ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0hvdXJzKCl9KSxkSHQ9cEh0LG1IdD1wSHQucmFuZ2V9KTt2YXIgX0h0LHlIdCx2SHQseEh0PU0oKCk9PntmYSgpO3dmKCk7X0h0PVNyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3o3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLHlIdD1fSHQsdkh0PV9IdC5yYW5nZX0pO2Z1bmN0aW9uIGQxKGUpe3JldHVybiBTcihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1lKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQpL0Y3fSl9dmFyIEg3LHVydCxocnQsZnJ0LHBydCxkcnQsbXJ0LGdydCxiSHQsd0h0LFNIdCxNSHQsRUh0LFRIdCxDSHQ9TSgoKT0+e2ZhKCk7d2YoKTtINz1kMSgwKSx1cnQ9ZDEoMSksaHJ0PWQxKDIpLGZydD1kMSgzKSxwcnQ9ZDEoNCksZHJ0PWQxKDUpLG1ydD1kMSg2KSxncnQ9SDcucmFuZ2UsYkh0PXVydC5yYW5nZSx3SHQ9aHJ0LnJhbmdlLFNIdD1mcnQucmFuZ2UsTUh0PXBydC5yYW5nZSxFSHQ9ZHJ0LnJhbmdlLFRIdD1tcnQucmFuZ2V9KTt2YXIgQUh0LFBIdCxJSHQsTEh0PU0oKCk9PntmYSgpO0FIdD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ01vbnRoKGUuZ2V0VVRDTW9udGgoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpLWUuZ2V0VVRDTW9udGgoKSsodC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKSkqMTJ9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCl9KSxQSHQ9QUh0LElIdD1BSHQucmFuZ2V9KTt2YXIgX3J0LGtIdCxSSHQsTkh0PU0oKCk9PntmYSgpO19ydD1TcihmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO19ydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6U3IoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9lKSplKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStyKmUpfSl9O2tIdD1fcnQsUkh0PV9ydC5yYW5nZX0pO3ZhciBESHQ9TSgoKT0+e2ZhKCk7TkJ0KCk7T0J0KCk7SEJ0KCk7R0J0KCk7WEJ0KCk7ZUh0KCk7b0h0KCk7bEh0KCk7Zkh0KCk7Z0h0KCk7eEh0KCk7Q0h0KCk7TEh0KCk7Tkh0KCl9KTtmdW5jdGlvbiBwYShlLHQscixuKXtmdW5jdGlvbiBpKG8pe3JldHVybiBlKG89YXJndW1lbnRzLmxlbmd0aD09PTA/bmV3IERhdGU6bmV3IERhdGUoK28pKSxvfXJldHVybiBpLmZsb29yPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoK28pKSxvfSxpLmNlaWw9ZnVuY3Rpb24obyl7cmV0dXJuIGUobz1uZXcgRGF0ZShvLTEpKSx0KG8sMSksZShvKSxvfSxpLnJvdW5kPWZ1bmN0aW9uKG8pe3ZhciBhPWkobykscz1pLmNlaWwobyk7cmV0dXJuIG8tYTxzLW8/YTpzfSxpLm9mZnNldD1mdW5jdGlvbihvLGEpe3JldHVybiB0KG89bmV3IERhdGUoK28pLGE9PW51bGw/MTpNYXRoLmZsb29yKGEpKSxvfSxpLnJhbmdlPWZ1bmN0aW9uKG8sYSxzKXt2YXIgbD1bXSxjO2lmKG89aS5jZWlsKG8pLHM9cz09bnVsbD8xOk1hdGguZmxvb3IocyksIShvPGEpfHwhKHM+MCkpcmV0dXJuIGw7ZG8gbC5wdXNoKGM9bmV3IERhdGUoK28pKSx0KG8scyksZShvKTt3aGlsZShjPG8mJm88YSk7cmV0dXJuIGx9LGkuZmlsdGVyPWZ1bmN0aW9uKG8pe3JldHVybiBwYShmdW5jdGlvbihhKXtpZihhPj1hKWZvcig7ZShhKSwhbyhhKTspYS5zZXRUaW1lKGEtMSl9LGZ1bmN0aW9uKGEscyl7aWYoYT49YSlpZihzPDApZm9yKDsrK3M8PTA7KWZvcig7dChhLC0xKSwhbyhhKTspO2Vsc2UgZm9yKDstLXM+PTA7KWZvcig7dChhLDEpLCFvKGEpOyk7fSl9LHImJihpLmNvdW50PWZ1bmN0aW9uKG8sYSl7cmV0dXJuIHlydC5zZXRUaW1lKCtvKSx2cnQuc2V0VGltZSgrYSksZSh5cnQpLGUodnJ0KSxNYXRoLmZsb29yKHIoeXJ0LHZydCkpfSxpLmV2ZXJ5PWZ1bmN0aW9uKG8pe3JldHVybiBvPU1hdGguZmxvb3IobyksIWlzRmluaXRlKG8pfHwhKG8+MCk/bnVsbDpvPjE/aS5maWx0ZXIobj9mdW5jdGlvbihhKXtyZXR1cm4gbihhKSVvPT09MH06ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY291bnQoMCxhKSVvPT09MH0pOml9KSxpfXZhciB5cnQsdnJ0LG0xPU0oKCk9Pnt5cnQ9bmV3IERhdGUsdnJ0PW5ldyBEYXRlfSk7dmFyIFY3LFU3LHE3LEJDPU0oKCk9PntWNz02ZTQsVTc9ODY0ZTUscTc9NjA0OGU1fSk7dmFyIE9IdCxHNyxBTGUsekh0PU0oKCk9PnttMSgpO0JDKCk7T0h0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXREYXRlKGUuZ2V0RGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUtKHQuZ2V0VGltZXpvbmVPZmZzZXQoKS1lLmdldFRpbWV6b25lT2Zmc2V0KCkpKlY3KS9VN30sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RGF0ZSgpLTF9KSxHNz1PSHQsQUxlPU9IdC5yYW5nZX0pO2Z1bmN0aW9uIGcxKGUpe3JldHVybiBwYShmdW5jdGlvbih0KXt0LnNldERhdGUodC5nZXREYXRlKCktKHQuZ2V0RGF5KCkrNy1lKSU3KSx0LnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStyKjcpfSxmdW5jdGlvbih0LHIpe3JldHVybihyLXQtKHIuZ2V0VGltZXpvbmVPZmZzZXQoKS10LmdldFRpbWV6b25lT2Zmc2V0KCkpKlY3KS9xN30pfXZhciBIQyxIdyxGSHQsQkh0LFZ3LEhIdCxWSHQsVUh0LFBMZSxJTGUsTExlLGtMZSxSTGUsTkxlLHFIdD1NKCgpPT57bTEoKTtCQygpO0hDPWcxKDApLEh3PWcxKDEpLEZIdD1nMSgyKSxCSHQ9ZzEoMyksVnc9ZzEoNCksSEh0PWcxKDUpLFZIdD1nMSg2KSxVSHQ9SEMucmFuZ2UsUExlPUh3LnJhbmdlLElMZT1GSHQucmFuZ2UsTExlPUJIdC5yYW5nZSxrTGU9VncucmFuZ2UsUkxlPUhIdC5yYW5nZSxOTGU9Vkh0LnJhbmdlfSk7dmFyIHhydCxfMSxETGUsR0h0PU0oKCk9PnttMSgpO3hydD1wYShmdW5jdGlvbihlKXtlLnNldE1vbnRoKDAsMSksZS5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldEZ1bGxZZWFyKGUuZ2V0RnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpLWUuZ2V0RnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0RnVsbFllYXIoKX0pO3hydC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4haXNGaW5pdGUoZT1NYXRoLmZsb29yKGUpKXx8IShlPjApP251bGw6cGEoZnVuY3Rpb24odCl7dC5zZXRGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0RnVsbFllYXIoKS9lKSplKSx0LnNldE1vbnRoKDAsMSksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldEZ1bGxZZWFyKHQuZ2V0RnVsbFllYXIoKStyKmUpfSl9O18xPXhydCxETGU9eHJ0LnJhbmdlfSk7dmFyIFdIdCxXNyxPTGUsWUh0PU0oKCk9PnttMSgpO0JDKCk7V0h0PXBhKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENEYXRlKGUuZ2V0VVRDRGF0ZSgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL1U3fSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENEYXRlKCktMX0pLFc3PVdIdCxPTGU9V0h0LnJhbmdlfSk7ZnVuY3Rpb24geTEoZSl7cmV0dXJuIHBhKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKS0odC5nZXRVVENEYXkoKSs3LWUpJTcpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvcTd9KX12YXIgVkMsVXcsakh0LFhIdCxxdywkSHQsS0h0LFpIdCx6TGUsRkxlLEJMZSxITGUsVkxlLFVMZSxKSHQ9TSgoKT0+e20xKCk7QkMoKTtWQz15MSgwKSxVdz15MSgxKSxqSHQ9eTEoMiksWEh0PXkxKDMpLHF3PXkxKDQpLCRIdD15MSg1KSxLSHQ9eTEoNiksWkh0PVZDLnJhbmdlLHpMZT1Vdy5yYW5nZSxGTGU9akh0LnJhbmdlLEJMZT1YSHQucmFuZ2UsSExlPXF3LnJhbmdlLFZMZT0kSHQucmFuZ2UsVUxlPUtIdC5yYW5nZX0pO3ZhciBicnQsdjEscUxlLFFIdD1NKCgpPT57bTEoKTticnQ9cGEoZnVuY3Rpb24oZSl7ZS5zZXRVVENNb250aCgwLDEpLGUuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRVVENGdWxsWWVhcihlLmdldFVUQ0Z1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0VVRDRnVsbFllYXIoKS1lLmdldFVUQ0Z1bGxZZWFyKCl9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ0Z1bGxZZWFyKCl9KTticnQuZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOnBhKGZ1bmN0aW9uKHQpe3Quc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcih0LmdldFVUQ0Z1bGxZZWFyKCkvZSkqZSksdC5zZXRVVENNb250aCgwLDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrciplKX0pfTt2MT1icnQscUxlPWJydC5yYW5nZX0pO3ZhciB0VnQ9TSgoKT0+e3pIdCgpO3FIdCgpO0dIdCgpO1lIdCgpO0pIdCgpO1FIdCgpfSk7ZnVuY3Rpb24gR0xlKGUpe2lmKDA8PWUueSYmZS55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKX1mdW5jdGlvbiBZNyhlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIoZS55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhlLnksZS5tLGUuZCxlLkgsZS5NLGUuUyxlLkwpKX1mdW5jdGlvbiBVQyhlKXtyZXR1cm57eTplLG06MCxkOjEsSDowLE06MCxTOjAsTDowfX1mdW5jdGlvbiBXQyhlKXt2YXIgdD1lLmRhdGVUaW1lLHI9ZS5kYXRlLG49ZS50aW1lLGk9ZS5wZXJpb2RzLG89ZS5kYXlzLGE9ZS5zaG9ydERheXMscz1lLm1vbnRocyxsPWUuc2hvcnRNb250aHMsYz1xQyhpKSx1PUdDKGkpLGg9cUMobyksZj1HQyhvKSxwPXFDKGEpLGQ9R0MoYSksZz1xQyhzKSxfPUdDKHMpLHk9cUMobCkseD1HQyhsKSxiPXthOlcsQTpaLGI6cnQsQjpvdCxjOm51bGwsZDppVnQsZTppVnQsZjpka2UsSDpoa2UsSTpma2Usajpwa2UsTDpjVnQsbTpta2UsTTpna2UscDpzdCxROnNWdCxzOmxWdCxTOl9rZSx1OnlrZSxVOnZrZSxWOnhrZSx3OmJrZSxXOndrZSx4Om51bGwsWDpudWxsLHk6U2tlLFk6TWtlLFo6RWtlLCIlIjphVnR9LFM9e2E6U3QsQTpidCxiOk10LEI6bHQsYzpudWxsLGQ6b1Z0LGU6b1Z0LGY6UGtlLEg6VGtlLEk6Q2tlLGo6QWtlLEw6dVZ0LG06SWtlLE06TGtlLHA6S3QsUTpzVnQsczpsVnQsUzpra2UsdTpSa2UsVTpOa2UsVjpEa2UsdzpPa2UsVzp6a2UseDpudWxsLFg6bnVsbCx5OkZrZSxZOkJrZSxaOkhrZSwiJSI6YVZ0fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6clZ0LGU6clZ0LGY6c2tlLEg6blZ0LEk6blZ0LGo6bmtlLEw6YWtlLG06cmtlLE06aWtlLHA6RCxROmNrZSxzOnVrZSxTOm9rZSx1OiRMZSxVOktMZSxWOlpMZSx3OlhMZSxXOkpMZSx4OnosWDpVLHk6dGtlLFk6UUxlLFo6ZWtlLCIlIjpsa2V9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoX3QsY3Qpe3JldHVybiBmdW5jdGlvbihYKXt2YXIgZXQ9W10sZHQ9LTEscT0wLHB0PV90Lmxlbmd0aCxodCx3dCxrdDtmb3IoWCBpbnN0YW5jZW9mIERhdGV8fChYPW5ldyBEYXRlKCtYKSk7KytkdDxwdDspX3QuY2hhckNvZGVBdChkdCk9PT0zNyYmKGV0LnB1c2goX3Quc2xpY2UocSxkdCkpLCh3dD1lVnRbaHQ9X3QuY2hhckF0KCsrZHQpXSkhPW51bGw/aHQ9X3QuY2hhckF0KCsrZHQpOnd0PWh0PT09ImUiPyIgIjoiMCIsKGt0PWN0W2h0XSkmJihodD1rdChYLHd0KSksZXQucHVzaChodCkscT1kdCsxKTtyZXR1cm4gZXQucHVzaChfdC5zbGljZShxLGR0KSksZXQuam9pbigiIil9fWZ1bmN0aW9uIGsoX3QsY3Qpe3JldHVybiBmdW5jdGlvbihYKXt2YXIgZXQ9VUMoMTkwMCksZHQ9TyhldCxfdCxYKz0iIiwwKSxxLHB0O2lmKGR0IT1YLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBldClyZXR1cm4gbmV3IERhdGUoZXQuUSk7aWYoInAiaW4gZXQmJihldC5IPWV0LkglMTIrZXQucCoxMiksIlYiaW4gZXQpe2lmKGV0LlY8MXx8ZXQuVj41MylyZXR1cm4gbnVsbDsidyJpbiBldHx8KGV0Lnc9MSksIloiaW4gZXQ/KHE9WTcoVUMoZXQueSkpLHB0PXEuZ2V0VVRDRGF5KCkscT1wdD40fHxwdD09PTA/VXcuY2VpbChxKTpVdyhxKSxxPVc3Lm9mZnNldChxLChldC5WLTEpKjcpLGV0Lnk9cS5nZXRVVENGdWxsWWVhcigpLGV0Lm09cS5nZXRVVENNb250aCgpLGV0LmQ9cS5nZXRVVENEYXRlKCkrKGV0LncrNiklNyk6KHE9Y3QoVUMoZXQueSkpLHB0PXEuZ2V0RGF5KCkscT1wdD40fHxwdD09PTA/SHcuY2VpbChxKTpIdyhxKSxxPUc3Lm9mZnNldChxLChldC5WLTEpKjcpLGV0Lnk9cS5nZXRGdWxsWWVhcigpLGV0Lm09cS5nZXRNb250aCgpLGV0LmQ9cS5nZXREYXRlKCkrKGV0LncrNiklNyl9ZWxzZSgiVyJpbiBldHx8IlUiaW4gZXQpJiYoInciaW4gZXR8fChldC53PSJ1ImluIGV0P2V0LnUlNzoiVyJpbiBldD8xOjApLHB0PSJaImluIGV0P1k3KFVDKGV0LnkpKS5nZXRVVENEYXkoKTpjdChVQyhldC55KSkuZ2V0RGF5KCksZXQubT0wLGV0LmQ9IlciaW4gZXQ/KGV0LncrNiklNytldC5XKjctKHB0KzUpJTc6ZXQudytldC5VKjctKHB0KzYpJTcpO3JldHVybiJaImluIGV0PyhldC5IKz1ldC5aLzEwMHwwLGV0Lk0rPWV0LlolMTAwLFk3KGV0KSk6Y3QoZXQpfX1mdW5jdGlvbiBPKF90LGN0LFgsZXQpe2Zvcih2YXIgZHQ9MCxxPWN0Lmxlbmd0aCxwdD1YLmxlbmd0aCxodCx3dDtkdDxxOyl7aWYoZXQ+PXB0KXJldHVybi0xO2lmKGh0PWN0LmNoYXJDb2RlQXQoZHQrKyksaHQ9PT0zNyl7aWYoaHQ9Y3QuY2hhckF0KGR0KyspLHd0PUNbaHQgaW4gZVZ0P2N0LmNoYXJBdChkdCsrKTpodF0sIXd0fHwoZXQ9d3QoX3QsWCxldCkpPDApcmV0dXJuLTF9ZWxzZSBpZihodCE9WC5jaGFyQ29kZUF0KGV0KyspKXJldHVybi0xfXJldHVybiBldH1mdW5jdGlvbiBEKF90LGN0LFgpe3ZhciBldD1jLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3QucD11W2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKF90LGN0LFgpe3ZhciBldD1wLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3Qudz1kW2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKF90LGN0LFgpe3ZhciBldD1oLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3Qudz1mW2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKF90LGN0LFgpe3ZhciBldD15LmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3QubT14W2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKF90LGN0LFgpe3ZhciBldD1nLmV4ZWMoY3Quc2xpY2UoWCkpO3JldHVybiBldD8oX3QubT1fW2V0WzBdLnRvTG93ZXJDYXNlKCldLFgrZXRbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKF90LGN0LFgpe3JldHVybiBPKF90LHQsY3QsWCl9ZnVuY3Rpb24geihfdCxjdCxYKXtyZXR1cm4gTyhfdCxyLGN0LFgpfWZ1bmN0aW9uIFUoX3QsY3QsWCl7cmV0dXJuIE8oX3QsbixjdCxYKX1mdW5jdGlvbiBXKF90KXtyZXR1cm4gYVtfdC5nZXREYXkoKV19ZnVuY3Rpb24gWihfdCl7cmV0dXJuIG9bX3QuZ2V0RGF5KCldfWZ1bmN0aW9uIHJ0KF90KXtyZXR1cm4gbFtfdC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChfdCl7cmV0dXJuIHNbX3QuZ2V0TW9udGgoKV19ZnVuY3Rpb24gc3QoX3Qpe3JldHVybiBpWysoX3QuZ2V0SG91cnMoKT49MTIpXX1mdW5jdGlvbiBTdChfdCl7cmV0dXJuIGFbX3QuZ2V0VVRDRGF5KCldfWZ1bmN0aW9uIGJ0KF90KXtyZXR1cm4gb1tfdC5nZXRVVENEYXkoKV19ZnVuY3Rpb24gTXQoX3Qpe3JldHVybiBsW190LmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIGx0KF90KXtyZXR1cm4gc1tfdC5nZXRVVENNb250aCgpXX1mdW5jdGlvbiBLdChfdCl7cmV0dXJuIGlbKyhfdC5nZXRVVENIb3VycygpPj0xMildfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1QKF90Kz0iIixiKTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fSxwYXJzZTpmdW5jdGlvbihfdCl7dmFyIGN0PWsoX3QrPSIiLEdMZSk7cmV0dXJuIGN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIF90fSxjdH0sdXRjRm9ybWF0OmZ1bmN0aW9uKF90KXt2YXIgY3Q9UChfdCs9IiIsUyk7cmV0dXJuIGN0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIF90fSxjdH0sdXRjUGFyc2U6ZnVuY3Rpb24oX3Qpe3ZhciBjdD1rKF90LFk3KTtyZXR1cm4gY3QudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gX3R9LGN0fX19ZnVuY3Rpb24gZ24oZSx0LHIpe3ZhciBuPWU8MD8iLSI6IiIsaT0obj8tZTplKSsiIixvPWkubGVuZ3RoO3JldHVybiBuKyhvPHI/bmV3IEFycmF5KHItbysxKS5qb2luKHQpK2k6aSl9ZnVuY3Rpb24gakxlKGUpe3JldHVybiBlLnJlcGxhY2UoWUxlLCJcXCQmIil9ZnVuY3Rpb24gcUMoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK2UubWFwKGpMZSkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIEdDKGUpe2Zvcih2YXIgdD17fSxyPS0xLG49ZS5sZW5ndGg7KytyPG47KXRbZVtyXS50b0xvd2VyQ2FzZSgpXT1yO3JldHVybiB0fWZ1bmN0aW9uIFhMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiAkTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuPyhlLnU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS0xlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5VPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFpMZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVj0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBKTGUoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlc9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUUxlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzQpKTtyZXR1cm4gbj8oZS55PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHRrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUueT0rblswXSsoK25bMF0+Njg/MTkwMDoyZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGVrZShlLHQscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWModC5zbGljZShyLHIrNikpO3JldHVybiBuPyhlLlo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHJrZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gclZ0KGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG5rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUubT0wLGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuVnQoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG9rZShlLHQscil7dmFyIG49Vm8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBha2UoZSx0LHIpe3ZhciBuPVZvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGxrZShlLHQscil7dmFyIG49V0xlLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gY2tlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdWtlKGUsdCxyKXt2YXIgbj1Wby5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLlE9K25bMF0qMWUzLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGlWdChlLHQpe3JldHVybiBnbihlLmdldERhdGUoKSx0LDIpfWZ1bmN0aW9uIGhrZShlLHQpe3JldHVybiBnbihlLmdldEhvdXJzKCksdCwyKX1mdW5jdGlvbiBma2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIHBrZShlLHQpe3JldHVybiBnbigxK0c3LmNvdW50KF8xKGUpLGUpLHQsMyl9ZnVuY3Rpb24gY1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0TWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBka2UoZSx0KXtyZXR1cm4gY1Z0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gbWtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0TW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gZ2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0TWludXRlcygpLHQsMil9ZnVuY3Rpb24gX2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0U2Vjb25kcygpLHQsMil9ZnVuY3Rpb24geWtlKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiB2a2UoZSx0KXtyZXR1cm4gZ24oSEMuY291bnQoXzEoZSksZSksdCwyKX1mdW5jdGlvbiB4a2UoZSx0KXt2YXIgcj1lLmdldERheSgpO3JldHVybiBlPXI+PTR8fHI9PT0wP1Z3KGUpOlZ3LmNlaWwoZSksZ24oVncuY291bnQoXzEoZSksZSkrKF8xKGUpLmdldERheSgpPT09NCksdCwyKX1mdW5jdGlvbiBia2UoZSl7cmV0dXJuIGUuZ2V0RGF5KCl9ZnVuY3Rpb24gd2tlKGUsdCl7cmV0dXJuIGduKEh3LmNvdW50KF8xKGUpLGUpLHQsMil9ZnVuY3Rpb24gU2tlKGUsdCl7cmV0dXJuIGduKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBNa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIEVrZShlKXt2YXIgdD1lLmdldFRpbWV6b25lT2Zmc2V0KCk7cmV0dXJuKHQ+MD8iLSI6KHQqPS0xLCIrIikpK2duKHQvNjB8MCwiMCIsMikrZ24odCU2MCwiMCIsMil9ZnVuY3Rpb24gb1Z0KGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDRGF0ZSgpLHQsMil9ZnVuY3Rpb24gVGtlKGUsdCl7cmV0dXJuIGduKGUuZ2V0VVRDSG91cnMoKSx0LDIpfWZ1bmN0aW9uIENrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0hvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gQWtlKGUsdCl7cmV0dXJuIGduKDErVzcuY291bnQodjEoZSksZSksdCwzKX1mdW5jdGlvbiB1VnQoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIFBrZShlLHQpe3JldHVybiB1VnQoZSx0KSsiMDAwIn1mdW5jdGlvbiBJa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBMa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBra2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBSa2UoZSl7dmFyIHQ9ZS5nZXRVVENEYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIE5rZShlLHQpe3JldHVybiBnbihWQy5jb3VudCh2MShlKSxlKSx0LDIpfWZ1bmN0aW9uIERrZShlLHQpe3ZhciByPWUuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/cXcoZSk6cXcuY2VpbChlKSxnbihxdy5jb3VudCh2MShlKSxlKSsodjEoZSkuZ2V0VVRDRGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIE9rZShlKXtyZXR1cm4gZS5nZXRVVENEYXkoKX1mdW5jdGlvbiB6a2UoZSx0KXtyZXR1cm4gZ24oVXcuY291bnQodjEoZSksZSksdCwyKX1mdW5jdGlvbiBGa2UoZSx0KXtyZXR1cm4gZ24oZS5nZXRVVENGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIEJrZShlLHQpe3JldHVybiBnbihlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gSGtlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBhVnQoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gc1Z0KGUpe3JldHVybitlfWZ1bmN0aW9uIGxWdChlKXtyZXR1cm4gTWF0aC5mbG9vcigrZS8xZTMpfXZhciBlVnQsVm8sV0xlLFlMZSx3cnQ9TSgoKT0+e3RWdCgpO2VWdD17Ii0iOiIiLF86IiAiLDA6IjAifSxWbz0vXlxzKlxkKy8sV0xlPS9eJS8sWUxlPS9bXFxeJCorP3xbXF0oKS57fV0vZ30pO2Z1bmN0aW9uIGo3KGUpe3JldHVybiBHdz1XQyhlKSxTcnQ9R3cuZm9ybWF0LE1ydD1Hdy5wYXJzZSxZQz1Hdy51dGNGb3JtYXQsakM9R3cudXRjUGFyc2UsR3d9dmFyIEd3LFNydCxNcnQsWUMsakMsWDc9TSgoKT0+e3dydCgpO2o3KHtkYXRlVGltZToiJXgsICVYIixkYXRlOiIlLW0vJS1kLyVZIix0aW1lOiIlLUk6JU06JVMgJXAiLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdfSl9KTtmdW5jdGlvbiBWa2UoZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKX12YXIgRXJ0LFVrZSxoVnQsVHJ0PU0oKCk9PntYNygpO0VydD0iJVktJW0tJWRUJUg6JU06JVMuJUxaIjtVa2U9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/VmtlOllDKEVydCksaFZ0PVVrZX0pO2Z1bmN0aW9uIHFrZShlKXt2YXIgdD1uZXcgRGF0ZShlKTtyZXR1cm4gaXNOYU4odCk/bnVsbDp0fXZhciBHa2UsZlZ0LHBWdD1NKCgpPT57VHJ0KCk7WDcoKTtHa2U9K25ldyBEYXRlKCIyMDAwLTAxLTAxVDAwOjAwOjAwLjAwMFoiKT9xa2U6akMoRXJ0KSxmVnQ9R2tlfSk7dmFyIGRWdD1NKCgpPT57WDcoKTt3cnQoKTtUcnQoKTtwVnQoKX0pO2Z1bmN0aW9uIFl3KCl7cmV0dXJuIHgxfHwoX1Z0KFdrZSkseDE9WkMubm93KCkrWjcpfWZ1bmN0aW9uIFdrZSgpe3gxPTB9ZnVuY3Rpb24gYjEoKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEFydChlLHQscil7dmFyIG49bmV3IGIxO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gUHJ0KCl7WXcoKSwrK1d3O2Zvcih2YXIgZT0kNyx0O2U7KSh0PXgxLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1Xd31mdW5jdGlvbiBtVnQoKXt4MT0oSzc9WkMubm93KCkpK1o3LFd3PSRDPTA7dHJ5e1BydCgpfWZpbmFsbHl7V3c9MCxqa2UoKSx4MT0wfX1mdW5jdGlvbiBZa2UoKXt2YXIgZT1aQy5ub3coKSx0PWUtSzc7dD5nVnQmJihaNy09dCxLNz1lKX1mdW5jdGlvbiBqa2UoKXtmb3IodmFyIGUsdD0kNyxyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjokNz1yKTtLQz1lLENydChuKX1mdW5jdGlvbiBDcnQoZSl7aWYoIVd3KXskQyYmKCRDPWNsZWFyVGltZW91dCgkQykpO3ZhciB0PWUteDE7dD4yND8oZTwxLzAmJigkQz1zZXRUaW1lb3V0KG1WdCxlLVpDLm5vdygpLVo3KSksWEMmJihYQz1jbGVhckludGVydmFsKFhDKSkpOihYQ3x8KEs3PVpDLm5vdygpLFhDPXNldEludGVydmFsKFlrZSxnVnQpKSxXdz0xLF9WdChtVnQpKX19dmFyIFd3LCRDLFhDLGdWdCwkNyxLQyxLNyx4MSxaNyxaQyxfVnQsSjc9TSgoKT0+e1d3PTAsJEM9MCxYQz0wLGdWdD0xZTMsSzc9MCx4MT0wLFo3PTAsWkM9dHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmcGVyZm9ybWFuY2Uubm93P3BlcmZvcm1hbmNlOkRhdGUsX1Z0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwxNyl9O2IxLnByb3RvdHlwZT1BcnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiMSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/WXcoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJktDIT09dGhpcyYmKEtDP0tDLl9uZXh0PXRoaXM6JDc9dGhpcyxLQz10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLENydCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCxDcnQoKSl9fX0pO2Z1bmN0aW9uIHlWdChlLHQscil7dmFyIG49bmV3IGIxO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyIHZWdD1NKCgpPT57SjcoKX0pO2Z1bmN0aW9uIHhWdChlLHQscil7dmFyIG49bmV3IGIxLGk9dDtyZXR1cm4gdD09bnVsbD8obi5yZXN0YXJ0KGUsdCxyKSxuKToodD0rdCxyPXI9PW51bGw/WXcoKTorcixuLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLG4ucmVzdGFydChvLGkrPXQsciksZShhKX0sdCxyKSxuKX12YXIgYlZ0PU0oKCk9PntKNygpfSk7dmFyIHdWdD1NKCgpPT57SjcoKTt2VnQoKTtiVnQoKX0pO3ZhciBRNyxJcnQsTHJ0PU0oKCk9PntRNz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsSXJ0PXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpRNyx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9fSk7ZnVuY3Rpb24gbGQoZSl7dmFyIHQ9ZSs9IiIscj10LmluZGV4T2YoIjoiKTtyZXR1cm4gcj49MCYmKHQ9ZS5zbGljZSgwLHIpKSE9PSJ4bWxucyImJihlPWUuc2xpY2UocisxKSksSXJ0Lmhhc093blByb3BlcnR5KHQpP3tzcGFjZTpJcnRbdF0sbG9jYWw6ZX06ZX12YXIgdHo9TSgoKT0+e0xydCgpfSk7ZnVuY3Rpb24gWGtlKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxyPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiByPT09UTcmJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVE3P3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiAka2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gZXooZSl7dmFyIHQ9bGQoZSk7cmV0dXJuKHQubG9jYWw/JGtlOlhrZSkodCl9dmFyIGtydD1NKCgpPT57dHooKTtMcnQoKX0pO2Z1bmN0aW9uIEtrZSgpe31mdW5jdGlvbiB3MShlKXtyZXR1cm4gZT09bnVsbD9La2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX12YXIgcno9TSgoKT0+e30pO2Z1bmN0aW9uIFNWdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dzEoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1uZXcgQXJyYXkoYSksbCxjLHU9MDt1PGE7Kyt1KShsPW9bdV0pJiYoYz1lLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLHNbdV09Yyk7cmV0dXJuIG5ldyBubyhuLHRoaXMuX3BhcmVudHMpfXZhciBNVnQ9TSgoKT0+e1NmKCk7cnooKX0pO2Z1bmN0aW9uIFprZSgpe3JldHVybltdfWZ1bmN0aW9uIEpDKGUpe3JldHVybiBlPT1udWxsP1prZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fXZhciBScnQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVWdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SkMoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPVtdLGk9W10sbz0wO288cjsrK28pZm9yKHZhciBhPXRbb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiYobi5wdXNoKGUuY2FsbChsLGwuX19kYXRhX18sYyxhKSksaS5wdXNoKGwpKTtyZXR1cm4gbmV3IG5vKG4saSl9dmFyIFRWdD1NKCgpPT57U2YoKTtScnQoKX0pO2Z1bmN0aW9uIFFDKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fXZhciBOcnQ9TSgoKT0+e30pO2Z1bmN0aW9uIENWdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IG5vKG4sdGhpcy5fcGFyZW50cyl9dmFyIEFWdD1NKCgpPT57U2YoKTtOcnQoKX0pO2Z1bmN0aW9uIG56KGUpe3JldHVybiBuZXcgQXJyYXkoZS5sZW5ndGgpfXZhciBEcnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFBWdCgpe3JldHVybiBuZXcgbm8odGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAobnopLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIHRBKGUsdCl7dGhpcy5vd25lckRvY3VtZW50PWUub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1lLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWUsdGhpcy5fX2RhdGFfXz10fXZhciBPcnQ9TSgoKT0+e0RydCgpO1NmKCk7dEEucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0QSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fX0pO2Z1bmN0aW9uIElWdChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIExWdD1NKCgpPT57fSk7ZnVuY3Rpb24gSmtlKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9MCxzLGw9dC5sZW5ndGgsYz1vLmxlbmd0aDthPGM7KythKShzPXRbYV0pPyhzLl9fZGF0YV9fPW9bYV0sblthXT1zKTpyW2FdPW5ldyB0QShlLG9bYV0pO2Zvcig7YTxsOysrYSkocz10W2FdKSYmKGlbYV09cyl9ZnVuY3Rpb24gUWtlKGUsdCxyLG4saSxvLGEpe3ZhciBzLGwsYz17fSx1PXQubGVuZ3RoLGg9by5sZW5ndGgsZj1uZXcgQXJyYXkodSkscDtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJihmW3NdPXA9a1Z0K2EuY2FsbChsLGwuX19kYXRhX18scyx0KSxwIGluIGM/aVtzXT1sOmNbcF09bCk7Zm9yKHM9MDtzPGg7KytzKXA9a1Z0K2EuY2FsbChlLG9bc10scyxvKSwobD1jW3BdKT8obltzXT1sLGwuX19kYXRhX189b1tzXSxjW3BdPW51bGwpOnJbc109bmV3IHRBKGUsb1tzXSk7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiZjW2Zbc11dPT09bCYmKGlbc109bCl9ZnVuY3Rpb24gUlZ0KGUsdCl7aWYoIWUpcmV0dXJuIHA9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihQKXtwWysrY109UH0pLHA7dmFyIHI9dD9Ra2U6SmtlLG49dGhpcy5fcGFyZW50cyxpPXRoaXMuX2dyb3Vwczt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9SVZ0KGUpKTtmb3IodmFyIG89aS5sZW5ndGgsYT1uZXcgQXJyYXkobykscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0wO2M8bzsrK2Mpe3ZhciB1PW5bY10saD1pW2NdLGY9aC5sZW5ndGgscD1lLmNhbGwodSx1JiZ1Ll9fZGF0YV9fLGMsbiksZD1wLmxlbmd0aCxnPXNbY109bmV3IEFycmF5KGQpLF89YVtjXT1uZXcgQXJyYXkoZCkseT1sW2NdPW5ldyBBcnJheShmKTtyKHUsaCxnLF8seSxwLHQpO2Zvcih2YXIgeD0wLGI9MCxTLEM7eDxkOysreClpZihTPWdbeF0pe2Zvcih4Pj1iJiYoYj14KzEpOyEoQz1fW2JdKSYmKytiPGQ7KTtTLl9uZXh0PUN8fG51bGx9fXJldHVybiBhPW5ldyBubyhhLG4pLGEuX2VudGVyPXMsYS5fZXhpdD1sLGF9dmFyIGtWdCxOVnQ9TSgoKT0+e1NmKCk7T3J0KCk7TFZ0KCk7a1Z0PSIkIn0pO2Z1bmN0aW9uIERWdCgpe3JldHVybiBuZXcgbm8odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChueiksdGhpcy5fcGFyZW50cyl9dmFyIE9WdD1NKCgpPT57RHJ0KCk7U2YoKX0pO2Z1bmN0aW9uIHpWdChlLHQscil7dmFyIG49dGhpcy5lbnRlcigpLGk9dGhpcyxvPXRoaXMuZXhpdCgpO3JldHVybiBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6bi5hcHBlbmQoZSsiIiksdCE9bnVsbCYmKGk9dChpKSkscj09bnVsbD9vLnJlbW92ZSgpOnIobyksbiYmaT9uLm1lcmdlKGkpLm9yZGVyKCk6aX12YXIgRlZ0PU0oKCk9Pnt9KTtmdW5jdGlvbiBCVnQoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IG5vKGEsdGhpcy5fcGFyZW50cyl9dmFyIEhWdD1NKCgpPT57U2YoKX0pO2Z1bmN0aW9uIFZWdCgpe2Zvcih2YXIgZT10aGlzLl9ncm91cHMsdD0tMSxyPWUubGVuZ3RoOysrdDxyOylmb3IodmFyIG49ZVt0XSxpPW4ubGVuZ3RoLTEsbz1uW2ldLGE7LS1pPj0wOykoYT1uW2ldKSYmKG8mJmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24obyleNCYmby5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG8pLG89YSk7cmV0dXJuIHRoaXN9dmFyIFVWdD1NKCgpPT57fSk7ZnVuY3Rpb24gcVZ0KGUpe2V8fChlPXQ4ZSk7ZnVuY3Rpb24gdChoLGYpe3JldHVybiBoJiZmP2UoaC5fX2RhdGFfXyxmLl9fZGF0YV9fKTohaC0hZn1mb3IodmFyIHI9dGhpcy5fZ3JvdXBzLG49ci5sZW5ndGgsaT1uZXcgQXJyYXkobiksbz0wO288bjsrK28pe2Zvcih2YXIgYT1yW29dLHM9YS5sZW5ndGgsbD1pW29dPW5ldyBBcnJheShzKSxjLHU9MDt1PHM7Kyt1KShjPWFbdV0pJiYobFt1XT1jKTtsLnNvcnQodCl9cmV0dXJuIG5ldyBubyhpLHRoaXMuX3BhcmVudHMpLm9yZGVyKCl9ZnVuY3Rpb24gdDhlKGUsdCl7cmV0dXJuIGU8dD8tMTplPnQ/MTplPj10PzA6TmFOfXZhciBHVnQ9TSgoKT0+e1NmKCl9KTtmdW5jdGlvbiBXVnQoKXt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9dmFyIFlWdD1NKCgpPT57fSk7ZnVuY3Rpb24galZ0KCl7dmFyIGU9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtlWysrdF09dGhpc30pLGV9dmFyIFhWdD1NKCgpPT57fSk7ZnVuY3Rpb24gJFZ0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KWZvcih2YXIgbj1lW3RdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPW5baV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH12YXIgS1Z0PU0oKCk9Pnt9KTtmdW5jdGlvbiBaVnQoKXt2YXIgZT0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK2V9KSxlfXZhciBKVnQ9TSgoKT0+e30pO2Z1bmN0aW9uIFFWdCgpe3JldHVybiF0aGlzLm5vZGUoKX12YXIgdFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBlVXQoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLG89MCxhPWkubGVuZ3RoLHM7bzxhOysrbykocz1pW29dKSYmZS5jYWxsKHMscy5fX2RhdGFfXyxvLGkpO3JldHVybiB0aGlzfXZhciByVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGU4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gcjhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gbjhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX19ZnVuY3Rpb24gaThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9fWZ1bmN0aW9uIG84ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSxyKX19ZnVuY3Rpb24gYThlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwscil9fWZ1bmN0aW9uIG5VdChlLHQpe3ZhciByPWxkKGUpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuIHIubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhyLnNwYWNlLHIubG9jYWwpOm4uZ2V0QXR0cmlidXRlKHIpfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/ci5sb2NhbD9yOGU6ZThlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3IubG9jYWw/YThlOm84ZTpyLmxvY2FsP2k4ZTpuOGUpKHIsdCkpfXZhciBpVXQ9TSgoKT0+e3R6KCl9KTtmdW5jdGlvbiBpeihlKXtyZXR1cm4gZS5vd25lckRvY3VtZW50JiZlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGUuZG9jdW1lbnQmJmV8fGUuZGVmYXVsdFZpZXd9dmFyIHpydD1NKCgpPT57fSk7ZnVuY3Rpb24gczhlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIGw4ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQscil9fWZ1bmN0aW9uIGM4ZShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj09bnVsbD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoZSxuLHIpfX1mdW5jdGlvbiBvVXQoZSx0LHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKCh0PT1udWxsP3M4ZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj9jOGU6bDhlKShlLHQscj09bnVsbD8iIjpyKSk6QmcodGhpcy5ub2RlKCksZSl9ZnVuY3Rpb24gQmcoZSx0KXtyZXR1cm4gZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxpeihlKS5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX12YXIgRnJ0PU0oKCk9Pnt6cnQoKX0pO2Z1bmN0aW9uIHU4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tlXX19ZnVuY3Rpb24gaDhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tlXT10fX1mdW5jdGlvbiBmOGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP2RlbGV0ZSB0aGlzW2VdOnRoaXNbZV09cn19ZnVuY3Rpb24gYVV0KGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/dThlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP2Y4ZTpoOGUpKGUsdCkpOnRoaXMubm9kZSgpW2VdfXZhciBzVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIGxVdChlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gQnJ0KGUpe3JldHVybiBlLmNsYXNzTGlzdHx8bmV3IGNVdChlKX1mdW5jdGlvbiBjVXQoZSl7dGhpcy5fbm9kZT1lLHRoaXMuX25hbWVzPWxVdChlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIHVVdChlLHQpe2Zvcih2YXIgcj1CcnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBoVXQoZSx0KXtmb3IodmFyIHI9QnJ0KGUpLG49LTEsaT10Lmxlbmd0aDsrK248aTspci5yZW1vdmUodFtuXSl9ZnVuY3Rpb24gcDhlKGUpe3JldHVybiBmdW5jdGlvbigpe3VVdCh0aGlzLGUpfX1mdW5jdGlvbiBkOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7aFV0KHRoaXMsZSl9fWZ1bmN0aW9uIG04ZShlLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT91VXQ6aFV0KSh0aGlzLGUpfX1mdW5jdGlvbiBmVXQoZSx0KXt2YXIgcj1sVXQoZSsiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIG49QnJ0KHRoaXMubm9kZSgpKSxpPS0xLG89ci5sZW5ndGg7KytpPG87KWlmKCFuLmNvbnRhaW5zKHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB0PT0iZnVuY3Rpb24iP204ZTp0P3A4ZTpkOGUpKHIsdCkpfXZhciBwVXQ9TSgoKT0+e2NVdC5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9uYW1lcy5pbmRleE9mKGUpO3Q8MCYmKHRoaXMuX25hbWVzLnB1c2goZSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGUpPj0wfX19KTtmdW5jdGlvbiBnOGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIF84ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHk4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gZFV0KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP2c4ZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/eThlOl84ZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fXZhciBtVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHY4ZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIHg4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBiOGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBnVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/djhlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9iOGU6eDhlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfXZhciBfVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHc4ZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiB5VXQoKXtyZXR1cm4gdGhpcy5lYWNoKHc4ZSl9dmFyIHZVdD1NKCgpPT57fSk7ZnVuY3Rpb24gUzhlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24geFV0KCl7cmV0dXJuIHRoaXMuZWFjaChTOGUpfXZhciBiVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIHdVdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOmV6KGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfXZhciBTVXQ9TSgoKT0+e2tydCgpfSk7ZnVuY3Rpb24gTThlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gTVV0KGUsdCl7dmFyIHI9dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTpleihlKSxuPXQ9PW51bGw/TThlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6dzEodCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHIuYXBwbHkodGhpcyxhcmd1bWVudHMpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfXZhciBFVXQ9TSgoKT0+e2tydCgpO3J6KCl9KTtmdW5jdGlvbiBFOGUoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBUVXQoKXtyZXR1cm4gdGhpcy5lYWNoKEU4ZSl9dmFyIENVdD1NKCgpPT57fSk7ZnVuY3Rpb24gVDhlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBDOGUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEFVdChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9DOGU6VDhlKX12YXIgUFV0PU0oKCk9Pnt9KTtmdW5jdGlvbiBJVXQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBMVXQ9TSgoKT0+e30pO2Z1bmN0aW9uIEE4ZShlLHQscil7cmV0dXJuIGU9TlV0KGUsdCxyKSxmdW5jdGlvbihuKXt2YXIgaT1uLnJlbGF0ZWRUYXJnZXQ7KCFpfHxpIT09dGhpcyYmIShpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHRoaXMpJjgpKSYmZS5jYWxsKHRoaXMsbil9fWZ1bmN0aW9uIE5VdChlLHQscil7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciBpPUhydDtIcnQ9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7SHJ0PWl9fX1mdW5jdGlvbiBQOGUoZSl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgcj0iIixuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPj0wJiYocj10LnNsaWNlKG4rMSksdD10LnNsaWNlKDAsbikpLHt0eXBlOnQsbmFtZTpyfX0pfWZ1bmN0aW9uIEk4ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYoISF0KXtmb3IodmFyIHI9MCxuPS0xLGk9dC5sZW5ndGgsbztyPGk7KytyKW89dFtyXSwoIWUudHlwZXx8by50eXBlPT09ZS50eXBlKSYmby5uYW1lPT09ZS5uYW1lP3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsby5saXN0ZW5lcixvLmNhcHR1cmUpOnRbKytuXT1vOysrbj90Lmxlbmd0aD1uOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBMOGUoZSx0LHIpe3ZhciBuPVJVdC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpP0E4ZTpOVXQ7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXt2YXIgcz10aGlzLl9fb24sbCxjPW4odCxvLGEpO2lmKHMpe2Zvcih2YXIgdT0wLGg9cy5sZW5ndGg7dTxoOysrdSlpZigobD1zW3VdKS50eXBlPT09ZS50eXBlJiZsLm5hbWU9PT1lLm5hbWUpe3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1yKSxsLnZhbHVlPXQ7cmV0dXJufX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoZS50eXBlLGMsciksbD17dHlwZTplLnR5cGUsbmFtZTplLm5hbWUsdmFsdWU6dCxsaXN0ZW5lcjpjLGNhcHR1cmU6cn0scz9zLnB1c2gobCk6dGhpcy5fX29uPVtsXX19ZnVuY3Rpb24gRFV0KGUsdCxyKXt2YXIgbj1QOGUoZSsiIiksaSxvPW4ubGVuZ3RoLGE7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgcz10aGlzLm5vZGUoKS5fX29uO2lmKHMpe2Zvcih2YXIgbD0wLGM9cy5sZW5ndGgsdTtsPGM7KytsKWZvcihpPTAsdT1zW2xdO2k8bzsrK2kpaWYoKGE9bltpXSkudHlwZT09PXUudHlwZSYmYS5uYW1lPT09dS5uYW1lKXJldHVybiB1LnZhbHVlfXJldHVybn1mb3Iocz10P0w4ZTpJOGUscj09bnVsbCYmKHI9ITEpLGk9MDtpPG87KytpKXRoaXMuZWFjaChzKG5baV0sdCxyKSk7cmV0dXJuIHRoaXN9dmFyIFJVdCxIcnQsa1V0LE9VdD1NKCgpPT57UlV0PXt9LEhydD1udWxsO3R5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJihrVXQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4ga1V0fHwoUlV0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKX0pO2Z1bmN0aW9uIHpVdChlLHQscil7dmFyIG49aXooZSksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkodCxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KHQsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KHQsITEsITEpKSxlLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gazhlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHpVdCh0aGlzLGUsdCl9fWZ1bmN0aW9uIFI4ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB6VXQodGhpcyxlLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gRlV0KGUsdCl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/UjhlOms4ZSkoZSx0KSl9dmFyIEJVdD1NKCgpPT57enJ0KCl9KTtmdW5jdGlvbiBubyhlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBIVXQoKXtyZXR1cm4gbmV3IG5vKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sTjhlKX12YXIgTjhlLGNkLFNmPU0oKCk9PntNVnQoKTtUVnQoKTtBVnQoKTtOVnQoKTtPcnQoKTtPVnQoKTtGVnQoKTtIVnQoKTtVVnQoKTtHVnQoKTtZVnQoKTtYVnQoKTtLVnQoKTtKVnQoKTt0VXQoKTtyVXQoKTtpVXQoKTtGcnQoKTtzVXQoKTtwVXQoKTttVXQoKTtfVXQoKTt2VXQoKTtiVXQoKTtTVXQoKTtFVXQoKTtDVXQoKTtQVXQoKTtMVXQoKTtPVXQoKTtCVXQoKTtOOGU9W251bGxdO25vLnByb3RvdHlwZT1IVXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpubyxzZWxlY3Q6U1Z0LHNlbGVjdEFsbDpFVnQsZmlsdGVyOkNWdCxkYXRhOlJWdCxlbnRlcjpQVnQsZXhpdDpEVnQsam9pbjp6VnQsbWVyZ2U6QlZ0LG9yZGVyOlZWdCxzb3J0OnFWdCxjYWxsOldWdCxub2RlczpqVnQsbm9kZTokVnQsc2l6ZTpaVnQsZW1wdHk6UVZ0LGVhY2g6ZVV0LGF0dHI6blV0LHN0eWxlOm9VdCxwcm9wZXJ0eTphVXQsY2xhc3NlZDpmVXQsdGV4dDpkVXQsaHRtbDpnVXQscmFpc2U6eVV0LGxvd2VyOnhVdCxhcHBlbmQ6d1V0LGluc2VydDpNVXQscmVtb3ZlOlRVdCxjbG9uZTpBVXQsZGF0dW06SVV0LG9uOkRVdCxkaXNwYXRjaDpGVXR9O2NkPUhVdH0pO3ZhciBNZj1NKCgpPT57TnJ0KCk7dHooKTtTZigpO3J6KCk7UnJ0KCk7RnJ0KCl9KTtmdW5jdGlvbiBVVXQoKXtmb3IodmFyIGU9MCx0PWFyZ3VtZW50cy5sZW5ndGgscj17fSxuO2U8dDsrK2Upe2lmKCEobj1hcmd1bWVudHNbZV0rIiIpfHxuIGluIHJ8fC9bXHMuXS8udGVzdChuKSl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgdHlwZTogIituKTtyW25dPVtdfXJldHVybiBuZXcgb3oocil9ZnVuY3Rpb24gb3ooZSl7dGhpcy5fPWV9ZnVuY3Rpb24gTzhlKGUsdCl7cmV0dXJuIGUudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihyKXt2YXIgbj0iIixpPXIuaW5kZXhPZigiLiIpO2lmKGk+PTAmJihuPXIuc2xpY2UoaSsxKSxyPXIuc2xpY2UoMCxpKSksciYmIXQuaGFzT3duUHJvcGVydHkocikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrcik7cmV0dXJue3R5cGU6cixuYW1lOm59fSl9ZnVuY3Rpb24gejhlKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aCxpO3I8bjsrK3IpaWYoKGk9ZVtyXSkubmFtZT09PXQpcmV0dXJuIGkudmFsdWV9ZnVuY3Rpb24gVlV0KGUsdCxyKXtmb3IodmFyIG49MCxpPWUubGVuZ3RoO248aTsrK24paWYoZVtuXS5uYW1lPT09dCl7ZVtuXT1EOGUsZT1lLnNsaWNlKDAsbikuY29uY2F0KGUuc2xpY2UobisxKSk7YnJlYWt9cmV0dXJuIHIhPW51bGwmJmUucHVzaCh7bmFtZTp0LHZhbHVlOnJ9KSxlfXZhciBEOGUsVnJ0LHFVdD1NKCgpPT57RDhlPXt2YWx1ZTpmdW5jdGlvbigpe319O296LnByb3RvdHlwZT1VVXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpveixvbjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuXyxuPU84ZShlKyIiLHIpLGksbz0tMSxhPW4ubGVuZ3RoO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKDsrK288YTspaWYoKGk9KGU9bltvXSkudHlwZSkmJihpPXo4ZShyW2ldLGUubmFtZSkpKXJldHVybiBpO3JldHVybn1pZih0IT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrdCk7Zm9yKDsrK288YTspaWYoaT0oZT1uW29dKS50eXBlKXJbaV09VlV0KHJbaV0sZS5uYW1lLHQpO2Vsc2UgaWYodD09bnVsbClmb3IoaSBpbiByKXJbaV09VlV0KHJbaV0sZS5uYW1lLG51bGwpO3JldHVybiB0aGlzfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGU9e30sdD10aGlzLl87Zm9yKHZhciByIGluIHQpZVtyXT10W3JdLnNsaWNlKCk7cmV0dXJuIG5ldyBveihlKX0sY2FsbDpmdW5jdGlvbihlLHQpe2lmKChpPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHI9bmV3IEFycmF5KGkpLG49MCxpLG87bjxpOysrbilyW25dPWFyZ3VtZW50c1tuKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKG89dGhpcy5fW2VdLG49MCxpPW8ubGVuZ3RoO248aTsrK24pb1tuXS52YWx1ZS5hcHBseSh0LHIpfSxhcHBseTpmdW5jdGlvbihlLHQscil7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShlKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIitlKTtmb3IodmFyIG49dGhpcy5fW2VdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpbltpXS52YWx1ZS5hcHBseSh0LHIpfX07VnJ0PVVVdH0pO3ZhciBHVXQ9TSgoKT0+e3FVdCgpfSk7ZnVuY3Rpb24gWHcoKXtyZXR1cm4gUzF8fChqVXQoRjhlKSxTMT1pQS5ub3coKStseil9ZnVuY3Rpb24gRjhlKCl7UzE9MH1mdW5jdGlvbiBvQSgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gY3ooZSx0LHIpe3ZhciBuPW5ldyBvQTtyZXR1cm4gbi5yZXN0YXJ0KGUsdCxyKSxufWZ1bmN0aW9uIFhVdCgpe1h3KCksKytqdztmb3IodmFyIGU9YXosdDtlOykodD1TMS1lLl90aW1lKT49MCYmZS5fY2FsbC5jYWxsKG51bGwsdCksZT1lLl9uZXh0Oy0tand9ZnVuY3Rpb24gV1V0KCl7UzE9KHN6PWlBLm5vdygpKStseixqdz1yQT0wO3RyeXtYVXQoKX1maW5hbGx5e2p3PTAsSDhlKCksUzE9MH19ZnVuY3Rpb24gQjhlKCl7dmFyIGU9aUEubm93KCksdD1lLXN6O3Q+WVV0JiYobHotPXQsc3o9ZSl9ZnVuY3Rpb24gSDhlKCl7Zm9yKHZhciBlLHQ9YXoscixuPTEvMDt0Oyl0Ll9jYWxsPyhuPnQuX3RpbWUmJihuPXQuX3RpbWUpLGU9dCx0PXQuX25leHQpOihyPXQuX25leHQsdC5fbmV4dD1udWxsLHQ9ZT9lLl9uZXh0PXI6YXo9cik7bkE9ZSxVcnQobil9ZnVuY3Rpb24gVXJ0KGUpe2lmKCFqdyl7ckEmJihyQT1jbGVhclRpbWVvdXQockEpKTt2YXIgdD1lLVMxO3Q+MjQ/KGU8MS8wJiYockE9c2V0VGltZW91dChXVXQsZS1pQS5ub3coKS1seikpLGVBJiYoZUE9Y2xlYXJJbnRlcnZhbChlQSkpKTooZUF8fChzej1pQS5ub3coKSxlQT1zZXRJbnRlcnZhbChCOGUsWVV0KSksanc9MSxqVXQoV1V0KSl9fXZhciBqdyxyQSxlQSxZVXQsYXosbkEsc3osUzEsbHosaUEsalV0LHFydD1NKCgpPT57anc9MCxyQT0wLGVBPTAsWVV0PTFlMyxzej0wLFMxPTAsbHo9MCxpQT10eXBlb2YgcGVyZm9ybWFuY2U9PSJvYmplY3QiJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxqVXQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oZSl7c2V0VGltZW91dChlLDE3KX07b0EucHJvdG90eXBlPWN6LnByb3RvdHlwZT17Y29uc3RydWN0b3I6b0EscmVzdGFydDpmdW5jdGlvbihlLHQscil7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtyPShyPT1udWxsP1h3KCk6K3IpKyh0PT1udWxsPzA6K3QpLCF0aGlzLl9uZXh0JiZuQSE9PXRoaXMmJihuQT9uQS5fbmV4dD10aGlzOmF6PXRoaXMsbkE9dGhpcyksdGhpcy5fY2FsbD1lLHRoaXMuX3RpbWU9cixVcnQoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsVXJ0KCkpfX19KTtmdW5jdGlvbiB1eihlLHQscil7dmFyIG49bmV3IG9BO3JldHVybiB0PXQ9PW51bGw/MDordCxuLnJlc3RhcnQoZnVuY3Rpb24oaSl7bi5zdG9wKCksZShpK3QpfSx0LHIpLG59dmFyICRVdD1NKCgpPT57cXJ0KCl9KTt2YXIgR3J0PU0oKCk9PntxcnQoKTskVXQoKX0pO2Z1bmN0aW9uIEhnKGUsdCxyLG4saSxvKXt2YXIgYT1lLl9fdHJhbnNpdGlvbjtpZighYSllLl9fdHJhbnNpdGlvbj17fTtlbHNlIGlmKHIgaW4gYSlyZXR1cm47cThlKGUscix7bmFtZTp0LGluZGV4Om4sZ3JvdXA6aSxvbjpWOGUsdHdlZW46VThlLHRpbWU6by50aW1lLGRlbGF5Om8uZGVsYXksZHVyYXRpb246by5kdXJhdGlvbixlYXNlOm8uZWFzZSx0aW1lcjpudWxsLHN0YXRlOlpVdH0pfWZ1bmN0aW9uIGxBKGUsdCl7dmFyIHI9aW8oZSx0KTtpZihyLnN0YXRlPlpVdCl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiByfWZ1bmN0aW9uIER1KGUsdCl7dmFyIHI9aW8oZSx0KTtpZihyLnN0YXRlPnNBKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc3RhcnRlZCIpO3JldHVybiByfWZ1bmN0aW9uIGlvKGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb247aWYoIXJ8fCEocj1yW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIHJ9ZnVuY3Rpb24gcThlKGUsdCxyKXt2YXIgbj1lLl9fdHJhbnNpdGlvbixpO25bdF09cixyLnRpbWVyPWN6KG8sMCxyLnRpbWUpO2Z1bmN0aW9uIG8oYyl7ci5zdGF0ZT1oeixyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PWh6KXJldHVybiBsKCk7Zm9yKHUgaW4gbilpZihwPW5bdV0scC5uYW1lPT09ci5uYW1lKXtpZihwLnN0YXRlPT09V3J0KXJldHVybiB1eihhKTtwLnN0YXRlPT09S1V0PyhwLnN0YXRlPWFBLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCgiaW50ZXJydXB0IixlLGUuX19kYXRhX18scC5pbmRleCxwLmdyb3VwKSxkZWxldGUgblt1XSk6K3U8dCYmKHAuc3RhdGU9YUEscC50aW1lci5zdG9wKCksZGVsZXRlIG5bdV0pfWlmKHV6KGZ1bmN0aW9uKCl7ci5zdGF0ZT09PVdydCYmKHIuc3RhdGU9S1V0LHIudGltZXIucmVzdGFydChzLHIuZGVsYXksci50aW1lKSxzKGMpKX0pLHIuc3RhdGU9c0Esci5vbi5jYWxsKCJzdGFydCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksci5zdGF0ZT09PXNBKXtmb3Ioci5zdGF0ZT1XcnQsaT1uZXcgQXJyYXkoZj1yLnR3ZWVuLmxlbmd0aCksdT0wLGg9LTE7dTxmOysrdSkocD1yLnR3ZWVuW3VdLnZhbHVlLmNhbGwoZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCkpJiYoaVsrK2hdPXApO2kubGVuZ3RoPWgrMX19ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9YzxyLmR1cmF0aW9uP3IuZWFzZS5jYWxsKG51bGwsYy9yLmR1cmF0aW9uKTooci50aW1lci5yZXN0YXJ0KGwpLHIuc3RhdGU9ZnosMSksaD0tMSxmPWkubGVuZ3RoOysraDxmOylpW2hdLmNhbGwobnVsbCx1KTtyLnN0YXRlPT09ZnomJihyLm9uLmNhbGwoImVuZCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7ci5zdGF0ZT1hQSxyLnRpbWVyLnN0b3AoKSxkZWxldGUgblt0XTtmb3IodmFyIGMgaW4gbilyZXR1cm47ZGVsZXRlIGUuX190cmFuc2l0aW9ufX12YXIgVjhlLFU4ZSxaVXQsaHosc0EsV3J0LEtVdCxmeixhQSxBYz1NKCgpPT57R1V0KCk7R3J0KCk7VjhlPVZydCgic3RhcnQiLCJlbmQiLCJpbnRlcnJ1cHQiKSxVOGU9W10sWlV0PTAsaHo9MSxzQT0yLFdydD0zLEtVdD00LGZ6PTUsYUE9Nn0pO2Z1bmN0aW9uIHB6KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpLG89ITAsYTtpZighIXIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGEgaW4gcil7aWYoKG49clthXSkubmFtZSE9PXQpe289ITE7Y29udGludWV9aT1uLnN0YXRlPnNBJiZuLnN0YXRlPGZ6LG4uc3RhdGU9YUEsbi50aW1lci5zdG9wKCksaSYmbi5vbi5jYWxsKCJpbnRlcnJ1cHQiLGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW2FdfW8mJmRlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFlydD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIEpVdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cHoodGhpcyxlKX0pfXZhciBRVXQ9TSgoKT0+e1lydCgpfSk7ZnVuY3Rpb24gZHooZSx0LHIpe2UucHJvdG90eXBlPXQucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj1lfWZ1bmN0aW9uIGpydChlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn12YXIgdHF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBoQSgpe31mdW5jdGlvbiBycXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBaOGUoKXtyZXR1cm4gbHF0KHRoaXMpLmZvcm1hdEhzbCgpfWZ1bmN0aW9uIG5xdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFZnKGUpe3ZhciB0LHI7cmV0dXJuIGU9KGUrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLCh0PUc4ZS5leGVjKGUpKT8ocj10WzFdLmxlbmd0aCx0PXBhcnNlSW50KHRbMV0sMTYpLHI9PT02P2lxdCh0KTpyPT09Mz9uZXcgbWwodD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCh0JjE1KTw8NHx0JjE1LDEpOnI9PT04P216KHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsKHQmMjU1KS8yNTUpOnI9PT00P216KHQ+PjEyJjE1fHQ+PjgmMjQwLHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwoKHQmMTUpPDw0fHQmMTUpLzI1NSk6bnVsbCk6KHQ9VzhlLmV4ZWMoZSkpP25ldyBtbCh0WzFdLHRbMl0sdFszXSwxKToodD1ZOGUuZXhlYyhlKSk/bmV3IG1sKHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLDEpOih0PWo4ZS5leGVjKGUpKT9teih0WzFdLHRbMl0sdFszXSx0WzRdKToodD1YOGUuZXhlYyhlKSk/bXoodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsdFs0XSk6KHQ9JDhlLmV4ZWMoZSkpP3NxdCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLDEpOih0PUs4ZS5leGVjKGUpKT9zcXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdKTplcXQuaGFzT3duUHJvcGVydHkoZSk/aXF0KGVxdFtlXSk6ZT09PSJ0cmFuc3BhcmVudCI/bmV3IG1sKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gaXF0KGUpe3JldHVybiBuZXcgbWwoZT4+MTYmMjU1LGU+PjgmMjU1LGUmMjU1LDEpfWZ1bmN0aW9uIG16KGUsdCxyLG4pe3JldHVybiBuPD0wJiYoZT10PXI9TmFOKSxuZXcgbWwoZSx0LHIsbil9ZnVuY3Rpb24gSjhlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaEF8fChlPVZnKGUpKSxlPyhlPWUucmdiKCksbmV3IG1sKGUucixlLmcsZS5iLGUub3BhY2l0eSkpOm5ldyBtbH1mdW5jdGlvbiBLdyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/SjhlKGUpOm5ldyBtbChlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gbWwoZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIG9xdCgpe3JldHVybiIjIitYcnQodGhpcy5yKStYcnQodGhpcy5nKStYcnQodGhpcy5iKX1mdW5jdGlvbiBhcXQoKXt2YXIgZT10aGlzLm9wYWNpdHk7cmV0dXJuIGU9aXNOYU4oZSk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLChlPT09MT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKyhlPT09MT8iKSI6IiwgIitlKyIpIil9ZnVuY3Rpb24gWHJ0KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHNxdChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IEVmKGUsdCxyLG4pfWZ1bmN0aW9uIGxxdChlKXtpZihlIGluc3RhbmNlb2YgRWYpcmV0dXJuIG5ldyBFZihlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBoQXx8KGU9VmcoZSkpLCFlKXJldHVybiBuZXcgRWY7aWYoZSBpbnN0YW5jZW9mIEVmKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IEVmKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gY3F0KGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT9scXQoZSk6bmV3IEVmKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBFZihlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5zPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gJHJ0KGUsdCxyKXtyZXR1cm4oZTw2MD90KyhyLXQpKmUvNjA6ZTwxODA/cjplPDI0MD90KyhyLXQpKigyNDAtZSkvNjA6dCkqMjU1fXZhciBjQSxneiwkdyx1QSxUZixHOGUsVzhlLFk4ZSxqOGUsWDhlLCQ4ZSxLOGUsZXF0LHVxdD1NKCgpPT57dHF0KCk7Y0E9LjcsZ3o9MS9jQSwkdz0iXFxzKihbKy1dP1xcZCspXFxzKiIsdUE9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsVGY9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEc4ZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxXOGU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrWyR3LCR3LCR3XSsiXFwpJCIpLFk4ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbVGYsVGYsVGZdKyJcXCkkIiksajhlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbJHcsJHcsJHcsdUFdKyJcXCkkIiksWDhlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbVGYsVGYsVGYsdUFdKyJcXCkkIiksJDhlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1t1QSxUZixUZl0rIlxcKSQiKSxLOGU9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1t1QSxUZixUZix1QV0rIlxcKSQiKSxlcXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZHooaEEsVmcse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cnF0LGZvcm1hdEhleDpycXQsZm9ybWF0SHNsOlo4ZSxmb3JtYXRSZ2I6bnF0LHRvU3RyaW5nOm5xdH0pO2R6KG1sLEt3LGpydChoQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9nejpNYXRoLnBvdyhneixlKSxuZXcgbWwodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/Y0E6TWF0aC5wb3coY0EsZSksbmV3IG1sKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6b3F0LGZvcm1hdEhleDpvcXQsZm9ybWF0UmdiOmFxdCx0b1N0cmluZzphcXR9KSk7ZHooRWYsY3F0LGpydChoQSx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9nejpNYXRoLnBvdyhneixlKSxuZXcgRWYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9jQTpNYXRoLnBvdyhjQSxlKSxuZXcgRWYodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBtbCgkcnQoZT49MjQwP2UtMjQwOmUrMTIwLGksbiksJHJ0KGUsaSxuKSwkcnQoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSl9KTt2YXIgS3J0PU0oKCk9Pnt1cXQoKX0pO2Z1bmN0aW9uIFpydChlLHQscixuLGkpe3ZhciBvPWUqZSxhPW8qZTtyZXR1cm4oKDEtMyplKzMqby1hKSp0Kyg0LTYqbyszKmEpKnIrKDErMyplKzMqby0zKmEpKm4rYSppKS82fWZ1bmN0aW9uIGhxdChlKXt2YXIgdD1lLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1yPD0wP3I9MDpyPj0xPyhyPTEsdC0xKTpNYXRoLmZsb29yKHIqdCksaT1lW25dLG89ZVtuKzFdLGE9bj4wP2Vbbi0xXToyKmktbyxzPW48dC0xP2VbbisyXToyKm8taTtyZXR1cm4gWnJ0KChyLW4vdCkqdCxhLGksbyxzKX19dmFyIEpydD1NKCgpPT57fSk7ZnVuY3Rpb24gZnF0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj1NYXRoLmZsb29yKCgociU9MSk8MD8rK3I6cikqdCksaT1lWyhuK3QtMSkldF0sbz1lW24ldF0sYT1lWyhuKzEpJXRdLHM9ZVsobisyKSV0XTtyZXR1cm4gWnJ0KChyLW4vdCkqdCxpLG8sYSxzKX19dmFyIHBxdD1NKCgpPT57SnJ0KCl9KTtmdW5jdGlvbiBRcnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBkcXQ9TSgoKT0+e30pO2Z1bmN0aW9uIFE4ZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZStyKnR9fWZ1bmN0aW9uIHRSZShlLHQscil7cmV0dXJuIGU9TWF0aC5wb3coZSxyKSx0PU1hdGgucG93KHQsciktZSxyPTEvcixmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5wb3coZStuKnQscil9fWZ1bmN0aW9uIG1xdChlKXtyZXR1cm4oZT0rZSk9PTE/X3o6ZnVuY3Rpb24odCxyKXtyZXR1cm4gci10P3RSZSh0LHIsZSk6UXJ0KGlzTmFOKHQpP3I6dCl9fWZ1bmN0aW9uIF96KGUsdCl7dmFyIHI9dC1lO3JldHVybiByP1E4ZShlLHIpOlFydChpc05hTihlKT90OmUpfXZhciBncXQ9TSgoKT0+e2RxdCgpfSk7ZnVuY3Rpb24gX3F0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhLHM7Zm9yKGE9MDthPHI7KythKXM9S3codFthXSksblthXT1zLnJ8fDAsaVthXT1zLmd8fDAsb1thXT1zLmJ8fDA7cmV0dXJuIG49ZShuKSxpPWUoaSksbz1lKG8pLHMub3BhY2l0eT0xLGZ1bmN0aW9uKGwpe3JldHVybiBzLnI9bihsKSxzLmc9aShsKSxzLmI9byhsKSxzKyIifX19dmFyIHl6LGVSZSxyUmUseXF0PU0oKCk9PntLcnQoKTtKcnQoKTtwcXQoKTtncXQoKTt5ej1mdW5jdGlvbiBlKHQpe3ZhciByPW1xdCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1LdyhpKSkuciwobz1LdyhvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPV96KGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtlUmU9X3F0KGhxdCksclJlPV9xdChmcXQpfSk7ZnVuY3Rpb24gUGMoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19dmFyIHZ6PU0oKCk9Pnt9KTtmdW5jdGlvbiBuUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGlSZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHJudChlLHQpe3ZhciByPWVudC5sYXN0SW5kZXg9dG50Lmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPWVudC5leGVjKGUpKSYmKGk9dG50LmV4ZWModCkpOykobz1pLmluZGV4KT5yJiYobz10LnNsaWNlKHIsbyksc1thXT9zW2FdKz1vOnNbKythXT1vKSwobj1uWzBdKT09PShpPWlbMF0pP3NbYV0/c1thXSs9aTpzWysrYV09aTooc1srK2FdPW51bGwsbC5wdXNoKHtpOmEseDpQYyhuLGkpfSkpLHI9dG50Lmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9pUmUobFswXS54KTpuUmUodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9dmFyIGVudCx0bnQsdnF0PU0oKCk9Pnt2eigpO2VudD0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csdG50PW5ldyBSZWdFeHAoZW50LnNvdXJjZSwiZyIpfSk7ZnVuY3Rpb24gbm50KGUsdCxyLG4saSxvKXt2YXIgYSxzLGw7cmV0dXJuKGE9TWF0aC5zcXJ0KGUqZSt0KnQpKSYmKGUvPWEsdC89YSksKGw9ZSpyK3QqbikmJihyLT1lKmwsbi09dCpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLGUqbjx0KnImJihlPS1lLHQ9LXQsbD0tbCxhPS1hKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6byxyb3RhdGU6TWF0aC5hdGFuMih0LGUpKnhxdCxza2V3WDpNYXRoLmF0YW4obCkqeHF0LHNjYWxlWDphLHNjYWxlWTpzfX12YXIgeHF0LHh6LGJxdD1NKCgpPT57eHF0PTE4MC9NYXRoLlBJLHh6PXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZOjF9fSk7ZnVuY3Rpb24gU3F0KGUpe3JldHVybiBlPT09Im5vbmUiP3h6OihmQXx8KGZBPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGludD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsd3F0PWRvY3VtZW50LmRlZmF1bHRWaWV3KSxmQS5zdHlsZS50cmFuc2Zvcm09ZSxlPXdxdC5nZXRDb21wdXRlZFN0eWxlKGludC5hcHBlbmRDaGlsZChmQSksbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIiksaW50LnJlbW92ZUNoaWxkKGZBKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxubnQoK2VbMF0sK2VbMV0sK2VbMl0sK2VbM10sK2VbNF0sK2VbNV0pKX1mdW5jdGlvbiBNcXQoZSl7cmV0dXJuIGU9PW51bGw/eHo6KGJ6fHwoYno9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksYnouc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGUpLChlPWJ6LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpPyhlPWUubWF0cml4LG5udChlLmEsZS5iLGUuYyxlLmQsZS5lLGUuZikpOnh6KX12YXIgZkEsaW50LHdxdCxieixFcXQ9TSgoKT0+e2JxdCgpfSk7ZnVuY3Rpb24gVHF0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6UGMoYyxoKX0se2k6Zy0yLHg6UGModSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDpQYyhjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OlBjKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDpQYyhjLGgpfSx7aTpnLTIseDpQYyh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBvbnQsYW50LENxdD1NKCgpPT57dnooKTtFcXQoKTtvbnQ9VHF0KFNxdCwicHgsICIsInB4KSIsImRlZykiKSxhbnQ9VHF0KE1xdCwiLCAiLCIpIiwiKSIpfSk7dmFyIHd6PU0oKCk9Pnt2eigpO3ZxdCgpO0NxdCgpO3lxdCgpfSk7ZnVuY3Rpb24gb1JlKGUsdCl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1EdSh0aGlzLGUpLG89aS50d2VlbjtpZihvIT09cil7bj1yPW87Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKWlmKG5bYV0ubmFtZT09PXQpe249bi5zbGljZSgpLG4uc3BsaWNlKGEsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gYVJlKGUsdCxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1EdSh0aGlzLGUpLGE9by50d2VlbjtpZihhIT09bil7aT0obj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTp0LHZhbHVlOnJ9LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09dCl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9by50d2Vlbj1pfX1mdW5jdGlvbiBBcXQoZSx0KXt2YXIgcj10aGlzLl9pZDtpZihlKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1pbyh0aGlzLm5vZGUoKSxyKS50d2VlbixpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpaWYoKGE9bltpXSkubmFtZT09PWUpcmV0dXJuIGEudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9vUmU6YVJlKShyLGUsdCkpfWZ1bmN0aW9uIFp3KGUsdCxyKXt2YXIgbj1lLl9pZDtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9RHUodGhpcyxuKTsoaS52YWx1ZXx8KGkudmFsdWU9e30pKVt0XT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGkpe3JldHVybiBpbyhpLG4pLnZhbHVlW3RdfX12YXIgcEE9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiBTeihlLHQpe3ZhciByO3JldHVybih0eXBlb2YgdD09Im51bWJlciI/UGM6dCBpbnN0YW5jZW9mIFZnP3l6OihyPVZnKHQpKT8odD1yLHl6KTpybnQpKGUsdCl9dmFyIHNudD1NKCgpPT57S3J0KCk7d3ooKX0pO2Z1bmN0aW9uIHNSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gbFJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gY1JlKGUsdCxyKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlKGUpO3JldHVybiBvPT09cj9udWxsOm89PT1uP2k6aT10KG49byxyKX19ZnVuY3Rpb24gdVJlKGUsdCxyKXt2YXIgbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09bj9pOmk9dChuPW8scil9fWZ1bmN0aW9uIGhSZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9cih0aGlzKTtyZXR1cm4gcz09bnVsbD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGUpOihhPXRoaXMuZ2V0QXR0cmlidXRlKGUpLGE9PT1zP251bGw6YT09PW4mJnM9PT1pP286bz10KG49YSxpPXMpKX19ZnVuY3Rpb24gZlJlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOihhPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKSxhPT09cz9udWxsOmE9PT1uJiZzPT09aT9vOm89dChuPWEsaT1zKSl9fWZ1bmN0aW9uIFBxdChlLHQpe3ZhciByPWxkKGUpLG49cj09PSJ0cmFuc2Zvcm0iP2FudDpTejtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oZSx0eXBlb2YgdD09ImZ1bmN0aW9uIj8oci5sb2NhbD9mUmU6aFJlKShyLG4sWncodGhpcywiYXR0ci4iK2UsdCkpOnQ9PW51bGw/KHIubG9jYWw/bFJlOnNSZSkocik6KHIubG9jYWw/dVJlOmNSZSkocixuLHQrIiIpKX12YXIgSXF0PU0oKCk9Pnt3eigpO01mKCk7cEEoKTtzbnQoKX0pO2Z1bmN0aW9uIHBSZShlLHQpe2Z1bmN0aW9uIHIoKXt2YXIgbj10aGlzLGk9dC5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG8pe24uc2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsLGkobykpfX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uIGRSZShlLHQpe2Z1bmN0aW9uIHIoKXt2YXIgbj10aGlzLGk9dC5hcHBseShuLGFyZ3VtZW50cyk7cmV0dXJuIGkmJmZ1bmN0aW9uKG8pe24uc2V0QXR0cmlidXRlKGUsaShvKSl9fXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gTHF0KGUsdCl7dmFyIHI9ImF0dHIuIitlO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgbj1sZChlKTtyZXR1cm4gdGhpcy50d2VlbihyLChuLmxvY2FsP3BSZTpkUmUpKG4sdCkpfXZhciBrcXQ9TSgoKT0+e01mKCl9KTtmdW5jdGlvbiBtUmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtsQSh0aGlzLGUpLmRlbGF5PSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gZ1JlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtsQSh0aGlzLGUpLmRlbGF5PXR9fWZ1bmN0aW9uIFJxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP21SZTpnUmUpKHQsZSkpOmlvKHRoaXMubm9kZSgpLHQpLmRlbGF5fXZhciBOcXQ9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiBfUmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmR1cmF0aW9uPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24geVJlKGUsdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtEdSh0aGlzLGUpLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIERxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKHR5cGVvZiBlPT0iZnVuY3Rpb24iP19SZTp5UmUpKHQsZSkpOmlvKHRoaXMubm9kZSgpLHQpLmR1cmF0aW9ufXZhciBPcXQ9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiB2UmUoZSx0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7RHUodGhpcyxlKS5lYXNlPXR9fWZ1bmN0aW9uIHpxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2godlJlKHQsZSkpOmlvKHRoaXMubm9kZSgpLHQpLmVhc2V9dmFyIEZxdD1NKCgpPT57QWMoKX0pO2Z1bmN0aW9uIEJxdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9UUMoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IFVvKG4sdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX12YXIgSHF0PU0oKCk9PntNZigpO3VkKCl9KTtmdW5jdGlvbiBWcXQoZSl7aWYoZS5faWQhPT10aGlzLl9pZCl0aHJvdyBuZXcgRXJyb3I7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPWUuX2dyb3VwcyxuPXQubGVuZ3RoLGk9ci5sZW5ndGgsbz1NYXRoLm1pbihuLGkpLGE9bmV3IEFycmF5KG4pLHM9MDtzPG87KytzKWZvcih2YXIgbD10W3NdLGM9cltzXSx1PWwubGVuZ3RoLGg9YVtzXT1uZXcgQXJyYXkodSksZixwPTA7cDx1OysrcCkoZj1sW3BdfHxjW3BdKSYmKGhbcF09Zik7Zm9yKDtzPG47KytzKWFbc109dFtzXTtyZXR1cm4gbmV3IFVvKGEsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX12YXIgVXF0PU0oKCk9Pnt1ZCgpfSk7ZnVuY3Rpb24geFJlKGUpe3JldHVybihlKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24odCl7dmFyIHI9dC5pbmRleE9mKCIuIik7cmV0dXJuIHI+PTAmJih0PXQuc2xpY2UoMCxyKSksIXR8fHQ9PT0ic3RhcnQifSl9ZnVuY3Rpb24gYlJlKGUsdCxyKXt2YXIgbixpLG89eFJlKHQpP2xBOkR1O3JldHVybiBmdW5jdGlvbigpe3ZhciBhPW8odGhpcyxlKSxzPWEub247cyE9PW4mJihpPShuPXMpLmNvcHkoKSkub24odCxyKSxhLm9uPWl9fWZ1bmN0aW9uIHFxdChlLHQpe3ZhciByPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/aW8odGhpcy5ub2RlKCkscikub24ub24oZSk6dGhpcy5lYWNoKGJSZShyLGUsdCkpfXZhciBHcXQ9TSgoKT0+e0FjKCl9KTtmdW5jdGlvbiB3UmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgciBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrciE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIFdxdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIix3UmUodGhpcy5faWQpKX12YXIgWXF0PU0oKCk9Pnt9KTtmdW5jdGlvbiBqcXQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT13MShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsYz1vW2FdPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9c1tmXSkmJihoPWUuY2FsbCh1LHUuX19kYXRhX18sZixzKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLEhnKGNbZl0sdCxyLGYsYyxpbyh1LHIpKSk7cmV0dXJuIG5ldyBVbyhvLHRoaXMuX3BhcmVudHMsdCxyKX12YXIgWHF0PU0oKCk9PntNZigpO3VkKCk7QWMoKX0pO2Z1bmN0aW9uICRxdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUpDKGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1bXSxhPVtdLHM9MDtzPGk7KytzKWZvcih2YXIgbD1uW3NdLGM9bC5sZW5ndGgsdSxoPTA7aDxjOysraClpZih1PWxbaF0pe2Zvcih2YXIgZj1lLmNhbGwodSx1Ll9fZGF0YV9fLGgsbCkscCxkPWlvKHUsciksZz0wLF89Zi5sZW5ndGg7ZzxfOysrZykocD1mW2ddKSYmSGcocCx0LHIsZyxmLGQpO28ucHVzaChmKSxhLnB1c2godSl9cmV0dXJuIG5ldyBVbyhvLGEsdCxyKX12YXIgS3F0PU0oKCk9PntNZigpO3VkKCk7QWMoKX0pO2Z1bmN0aW9uIFpxdCgpe3JldHVybiBuZXcgU1JlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX12YXIgU1JlLEpxdD1NKCgpPT57TWYoKTtTUmU9Y2QucHJvdG90eXBlLmNvbnN0cnVjdG9yfSk7ZnVuY3Rpb24gTVJlKGUsdCl7dmFyIHIsbixpO3JldHVybiBmdW5jdGlvbigpe3ZhciBvPUJnKHRoaXMsZSksYT0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxCZyh0aGlzLGUpKTtyZXR1cm4gbz09PWE/bnVsbDpvPT09ciYmYT09PW4/aTppPXQocj1vLG49YSl9fWZ1bmN0aW9uIEVSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpfX1mdW5jdGlvbiBUUmUoZSx0LHIpe3ZhciBuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89QmcodGhpcyxlKTtyZXR1cm4gbz09PXI/bnVsbDpvPT09bj9pOmk9dChuPW8scil9fWZ1bmN0aW9uIENSZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPUJnKHRoaXMsZSkscz1yKHRoaXMpO3JldHVybiBzPT1udWxsJiYocz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxCZyh0aGlzLGUpKSksYT09PXM/bnVsbDphPT09biYmcz09PWk/bzpvPXQobj1hLGk9cyl9fWZ1bmN0aW9uIFFxdChlLHQscil7dmFyIG49KGUrPSIiKT09InRyYW5zZm9ybSI/b250OlN6O3JldHVybiB0PT1udWxsP3RoaXMuc3R5bGVUd2VlbihlLE1SZShlLG4pKS5vbigiZW5kLnN0eWxlLiIrZSxFUmUoZSkpOnRoaXMuc3R5bGVUd2VlbihlLHR5cGVvZiB0PT0iZnVuY3Rpb24iP0NSZShlLG4sWncodGhpcywic3R5bGUuIitlLHQpKTpUUmUoZSxuLHQrIiIpLHIpfXZhciB0R3Q9TSgoKT0+e3d6KCk7TWYoKTtwQSgpO3NudCgpfSk7ZnVuY3Rpb24gQVJlKGUsdCxyKXtmdW5jdGlvbiBuKCl7dmFyIGk9dGhpcyxvPXQuYXBwbHkoaSxhcmd1bWVudHMpO3JldHVybiBvJiZmdW5jdGlvbihhKXtpLnN0eWxlLnNldFByb3BlcnR5KGUsbyhhKSxyKX19cmV0dXJuIG4uX3ZhbHVlPXQsbn1mdW5jdGlvbiBlR3QoZSx0LHIpe3ZhciBuPSJzdHlsZS4iKyhlKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sQVJlKGUsdCxyPT1udWxsPyIiOnIpKX12YXIgckd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBJUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gbkd0KGUpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgZT09ImZ1bmN0aW9uIj9JUmUoWncodGhpcywidGV4dCIsZSkpOlBSZShlPT1udWxsPyIiOmUrIiIpKX12YXIgaUd0PU0oKCk9PntwQSgpfSk7ZnVuY3Rpb24gb0d0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPU16KCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1pbyhsLHQpO0hnKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLGUscil9dmFyIGFHdD1NKCgpPT57dWQoKTtBYygpfSk7ZnVuY3Rpb24gVW8oZSx0LHIsbil7dGhpcy5fZ3JvdXBzPWUsdGhpcy5fcGFyZW50cz10LHRoaXMuX25hbWU9cix0aGlzLl9pZD1ufWZ1bmN0aW9uIEV6KGUpe3JldHVybiBjZCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gTXooKXtyZXR1cm4rK0xSZX12YXIgTFJlLEp3LHVkPU0oKCk9PntNZigpO0lxdCgpO2txdCgpO05xdCgpO09xdCgpO0ZxdCgpO0hxdCgpO1VxdCgpO0dxdCgpO1lxdCgpO1hxdCgpO0txdCgpO0pxdCgpO3RHdCgpO3JHdCgpO2lHdCgpO2FHdCgpO3BBKCk7TFJlPTA7Snc9Y2QucHJvdG90eXBlO1VvLnByb3RvdHlwZT1Fei5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVvLHNlbGVjdDpqcXQsc2VsZWN0QWxsOiRxdCxmaWx0ZXI6QnF0LG1lcmdlOlZxdCxzZWxlY3Rpb246WnF0LHRyYW5zaXRpb246b0d0LGNhbGw6SncuY2FsbCxub2RlczpKdy5ub2Rlcyxub2RlOkp3Lm5vZGUsc2l6ZTpKdy5zaXplLGVtcHR5Okp3LmVtcHR5LGVhY2g6SncuZWFjaCxvbjpxcXQsYXR0cjpQcXQsYXR0clR3ZWVuOkxxdCxzdHlsZTpRcXQsc3R5bGVUd2VlbjplR3QsdGV4dDpuR3QscmVtb3ZlOldxdCx0d2VlbjpBcXQsZGVsYXk6UnF0LGR1cmF0aW9uOkRxdCxlYXNlOnpxdH19KTtmdW5jdGlvbiBrUmUoZSx0KXtmb3IodmFyIHI7IShyPWUuX190cmFuc2l0aW9uKXx8IShyPXJbdF0pOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gbG50LnRpbWU9WHcoKSxsbnQ7cmV0dXJuIHJ9ZnVuY3Rpb24gc0d0KGUpe3ZhciB0LHI7ZSBpbnN0YW5jZW9mIFVvPyh0PWUuX2lkLGU9ZS5fbmFtZSk6KHQ9TXooKSwocj1sbnQpLnRpbWU9WHcoKSxlPWU9PW51bGw/bnVsbDplKyIiKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKShsPWFbY10pJiZIZyhsLGUsdCxjLGEscnx8a1JlKGwsdCkpO3JldHVybiBuZXcgVW8obix0aGlzLl9wYXJlbnRzLGUsdCl9dmFyIGxudCxsR3Q9TSgoKT0+e3VkKCk7QWMoKTtJXygpO0dydCgpO2xudD17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6eHN9fSk7dmFyIGNHdD1NKCgpPT57TWYoKTtRVXQoKTtsR3QoKTtjZC5wcm90b3R5cGUuaW50ZXJydXB0PUpVdDtjZC5wcm90b3R5cGUudHJhbnNpdGlvbj1zR3R9KTtmdW5jdGlvbiB1R3QoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbixuLGk7aWYocil7dD10PT1udWxsP251bGw6dCsiIjtmb3IoaSBpbiByKWlmKChuPXJbaV0pLnN0YXRlPmh6JiZuLm5hbWU9PT10KXJldHVybiBuZXcgVW8oW1tlXV0sUlJlLHQsK2kpfXJldHVybiBudWxsfXZhciBSUmUsaEd0PU0oKCk9Pnt1ZCgpO0FjKCk7UlJlPVtudWxsXX0pO3ZhciBmR3Q9TSgoKT0+e2NHdCgpO3VkKCk7aEd0KCk7WXJ0KCl9KTtmdW5jdGlvbiBjbnQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciBwR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGRHdChlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBtR3QoZSl7cmV0dXJuIGVbMV19dmFyIGdHdD1NKCgpPT57fSk7ZnVuY3Rpb24gdW50KCl7dGhpcy5fPW51bGx9ZnVuY3Rpb24gUXcoZSl7ZS5VPWUuQz1lLkw9ZS5SPWUuUD1lLk49bnVsbH1mdW5jdGlvbiBkQShlLHQpe3ZhciByPXQsbj10LlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gbUEoZSx0KXt2YXIgcj10LG49dC5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIF9HdChlKXtmb3IoO2UuTDspZT1lLkw7cmV0dXJuIGV9dmFyIGhudCxUej1NKCgpPT57dW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dW50LGluc2VydDpmdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihlKXtpZih0LlA9ZSx0Lk49ZS5OLGUuTiYmKGUuTi5QPXQpLGUuTj10LGUuUil7Zm9yKGU9ZS5SO2UuTDspZT1lLkw7ZS5MPXR9ZWxzZSBlLlI9dDtyPWV9ZWxzZSB0aGlzLl8/KGU9X0d0KHRoaXMuXyksdC5QPW51bGwsdC5OPWUsZS5QPWUuTD10LHI9ZSk6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxyPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPXIsdC5DPSEwLGU9dDtyJiZyLkM7KW49ci5VLHI9PT1uLkw/KGk9bi5SLGkmJmkuQz8oci5DPWkuQz0hMSxuLkM9ITAsZT1uKTooZT09PXIuUiYmKGRBKHRoaXMsciksZT1yLHI9ZS5VKSxyLkM9ITEsbi5DPSEwLG1BKHRoaXMsbikpKTooaT1uLkwsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5MJiYobUEodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsZEEodGhpcyxuKSkpLHI9ZS5VO3RoaXMuXy5DPSExfSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZS5OJiYoZS5OLlA9ZS5QKSxlLlAmJihlLlAuTj1lLk4pLGUuTj1lLlA9bnVsbDt2YXIgdD1lLlUscixuPWUuTCxpPWUuUixvLGE7aWYobj9pP289X0d0KGkpOm89bjpvPWksdD90Lkw9PT1lP3QuTD1vOnQuUj1vOnRoaXMuXz1vLG4mJmk/KGE9by5DLG8uQz1lLkMsby5MPW4sbi5VPW8sbyE9PWk/KHQ9by5VLG8uVT1lLlUsZT1vLlIsdC5MPWUsby5SPWksaS5VPW8pOihvLlU9dCx0PW8sZT1vLlIpKTooYT1lLkMsZT1vKSxlJiYoZS5VPXQpLCFhKXtpZihlJiZlLkMpe2UuQz0hMTtyZXR1cm59ZG97aWYoZT09PXRoaXMuXylicmVhaztpZihlPT09dC5MKXtpZihyPXQuUixyLkMmJihyLkM9ITEsdC5DPSEwLGRBKHRoaXMsdCkscj10LlIpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5SfHwhci5SLkMpJiYoci5MLkM9ITEsci5DPSEwLG1BKHRoaXMscikscj10LlIpLHIuQz10LkMsdC5DPXIuUi5DPSExLGRBKHRoaXMsdCksZT10aGlzLl87YnJlYWt9fWVsc2UgaWYocj10Lkwsci5DJiYoci5DPSExLHQuQz0hMCxtQSh0aGlzLHQpLHI9dC5MKSxyLkwmJnIuTC5DfHxyLlImJnIuUi5DKXsoIXIuTHx8IXIuTC5DKSYmKHIuUi5DPSExLHIuQz0hMCxkQSh0aGlzLHIpLHI9dC5MKSxyLkM9dC5DLHQuQz1yLkwuQz0hMSxtQSh0aGlzLHQpLGU9dGhpcy5fO2JyZWFrfXIuQz0hMCxlPXQsdD10LlV9d2hpbGUoIWUuQyk7ZSYmKGUuQz0hMSl9fX07aG50PXVudH0pO2Z1bmN0aW9uIHRTKGUsdCxyLG4pe3ZhciBpPVtudWxsLG51bGxdLG89QW8ucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9ZSxpLnJpZ2h0PXQsciYmZ0EoaSxlLHQsciksbiYmZ0EoaSx0LGUsbiksWmFbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksWmFbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiBlUyhlLHQscil7dmFyIG49W3Qscl07cmV0dXJuIG4ubGVmdD1lLG59ZnVuY3Rpb24gZ0EoZSx0LHIsbil7IWVbMF0mJiFlWzFdPyhlWzBdPW4sZS5sZWZ0PXQsZS5yaWdodD1yKTplLmxlZnQ9PT1yP2VbMV09bjplWzBdPW59ZnVuY3Rpb24gTlJlKGUsdCxyLG4saSl7dmFyIG89ZVswXSxhPWVbMV0scz1vWzBdLGw9b1sxXSxjPWFbMF0sdT1hWzFdLGg9MCxmPTEscD1jLXMsZD11LWwsZztpZihnPXQtcywhKCFwJiZnPjApKXtpZihnLz1wLHA8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYocD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1uLXMsISghcCYmZzwwKSl7aWYoZy89cCxwPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKHA+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWlmKGc9ci1sLCEoIWQmJmc+MCkpe2lmKGcvPWQsZDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihkPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPWktbCwhKCFkJiZnPDApKXtpZihnLz1kLGQ8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYoZD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihlWzBdPVtzK2gqcCxsK2gqZF0pLGY8MSYmKGVbMV09W3MrZipwLGwrZipkXSkpLCEwfX19fX1mdW5jdGlvbiBEUmUoZSx0LHIsbixpKXt2YXIgbz1lWzFdO2lmKG8pcmV0dXJuITA7dmFyIGE9ZVswXSxzPWUubGVmdCxsPWUucmlnaHQsYz1zWzBdLHU9c1sxXSxoPWxbMF0sZj1sWzFdLHA9KGMraCkvMixkPSh1K2YpLzIsZyxfO2lmKGY9PT11KXtpZihwPHR8fHA+PW4pcmV0dXJuO2lmKGM+aCl7aWYoIWEpYT1bcCxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289W3AsaV19ZWxzZXtpZighYSlhPVtwLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVtwLHJdfX1lbHNlIGlmKGc9KGMtaCkvKGYtdSksXz1kLWcqcCxnPC0xfHxnPjEpaWYoYz5oKXtpZighYSlhPVsoci1fKS9nLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bKGktXykvZyxpXX1lbHNle2lmKCFhKWE9WyhpLV8pL2csaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289WyhyLV8pL2cscl19ZWxzZSBpZih1PGYpe2lmKCFhKWE9W3QsZyp0K19dO2Vsc2UgaWYoYVswXT49bilyZXR1cm47bz1bbixnKm4rX119ZWxzZXtpZighYSlhPVtuLGcqbitfXTtlbHNlIGlmKGFbMF08dClyZXR1cm47bz1bdCxnKnQrX119cmV0dXJuIGVbMF09YSxlWzFdPW8sITB9ZnVuY3Rpb24geUd0KGUsdCxyLG4pe2Zvcih2YXIgaT1Bby5sZW5ndGgsbztpLS07KSghRFJlKG89QW9baV0sZSx0LHIsbil8fCFOUmUobyxlLHQscixuKXx8IShNYXRoLmFicyhvWzBdWzBdLW9bMV1bMF0pPldyfHxNYXRoLmFicyhvWzBdWzFdLW9bMV1bMV0pPldyKSkmJmRlbGV0ZSBBb1tpXX12YXIgQ3o9TSgoKT0+e3JTKCl9KTtmdW5jdGlvbiB2R3QoZSl7cmV0dXJuIFphW2UuaW5kZXhdPXtzaXRlOmUsaGFsZmVkZ2VzOltdfX1mdW5jdGlvbiBPUmUoZSx0KXt2YXIgcj1lLnNpdGUsbj10LmxlZnQsaT10LnJpZ2h0O3JldHVybiByPT09aSYmKGk9bixuPXIpLGk/TWF0aC5hdGFuMihpWzFdLW5bMV0saVswXS1uWzBdKToocj09PW4/KG49dFsxXSxpPXRbMF0pOihuPXRbMF0saT10WzFdKSxNYXRoLmF0YW4yKG5bMF0taVswXSxpWzFdLW5bMV0pKX1mdW5jdGlvbiBmbnQoZSx0KXtyZXR1cm4gdFsrKHQubGVmdCE9PWUuc2l0ZSldfWZ1bmN0aW9uIHpSZShlLHQpe3JldHVybiB0WysodC5sZWZ0PT09ZS5zaXRlKV19ZnVuY3Rpb24geEd0KCl7Zm9yKHZhciBlPTAsdD1aYS5sZW5ndGgscixuLGksbztlPHQ7KytlKWlmKChyPVphW2VdKSYmKG89KG49ci5oYWxmZWRnZXMpLmxlbmd0aCkpe3ZhciBhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKTtmb3IoaT0wO2k8bzsrK2kpYVtpXT1pLHNbaV09T1JlKHIsQW9bbltpXV0pO2ZvcihhLnNvcnQoZnVuY3Rpb24obCxjKXtyZXR1cm4gc1tjXS1zW2xdfSksaT0wO2k8bzsrK2kpc1tpXT1uW2FbaV1dO2ZvcihpPTA7aTxvOysraSluW2ldPXNbaV19fWZ1bmN0aW9uIGJHdChlLHQscixuKXt2YXIgaT1aYS5sZW5ndGgsbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8seT0hMDtmb3Iobz0wO288aTsrK28paWYoYT1aYVtvXSl7Zm9yKHM9YS5zaXRlLGM9YS5oYWxmZWRnZXMsbD1jLmxlbmd0aDtsLS07KUFvW2NbbF1dfHxjLnNwbGljZShsLDEpO2ZvcihsPTAsdT1jLmxlbmd0aDtsPHU7KWQ9elJlKGEsQW9bY1tsXV0pLGc9ZFswXSxfPWRbMV0saD1mbnQoYSxBb1tjWysrbCV1XV0pLGY9aFswXSxwPWhbMV0sKE1hdGguYWJzKGctZik+V3J8fE1hdGguYWJzKF8tcCk+V3IpJiYoYy5zcGxpY2UobCwwLEFvLnB1c2goZVMocyxkLE1hdGguYWJzKGctZSk8V3ImJm4tXz5Xcj9bZSxNYXRoLmFicyhmLWUpPFdyP3A6bl06TWF0aC5hYnMoXy1uKTxXciYmci1nPldyP1tNYXRoLmFicyhwLW4pPFdyP2Y6cixuXTpNYXRoLmFicyhnLXIpPFdyJiZfLXQ+V3I/W3IsTWF0aC5hYnMoZi1yKTxXcj9wOnRdOk1hdGguYWJzKF8tdCk8V3ImJmctZT5Xcj9bTWF0aC5hYnMocC10KTxXcj9mOmUsdF06bnVsbCkpLTEpLCsrdSk7dSYmKHk9ITEpfWlmKHkpe3ZhciB4LGIsUyxDPTEvMDtmb3Iobz0wLHk9bnVsbDtvPGk7KytvKShhPVphW29dKSYmKHM9YS5zaXRlLHg9c1swXS1lLGI9c1sxXS10LFM9eCp4K2IqYixTPEMmJihDPVMseT1hKSk7aWYoeSl7dmFyIFA9W2UsdF0saz1bZSxuXSxPPVtyLG5dLEQ9W3IsdF07eS5oYWxmZWRnZXMucHVzaChBby5wdXNoKGVTKHM9eS5zaXRlLFAsaykpLTEsQW8ucHVzaChlUyhzLGssTykpLTEsQW8ucHVzaChlUyhzLE8sRCkpLTEsQW8ucHVzaChlUyhzLEQsUCkpLTEpfX1mb3Iobz0wO288aTsrK28pKGE9WmFbb10pJiYoYS5oYWxmZWRnZXMubGVuZ3RofHxkZWxldGUgWmFbb10pfXZhciBwbnQ9TSgoKT0+e0N6KCk7clMoKX0pO2Z1bmN0aW9uIEZSZSgpe1F3KHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBNMShlKXt2YXIgdD1lLlAscj1lLk47aWYoISghdHx8IXIpKXt2YXIgbj10LnNpdGUsaT1lLnNpdGUsbz1yLnNpdGU7aWYobiE9PW8pe3ZhciBhPWlbMF0scz1pWzFdLGw9blswXS1hLGM9blsxXS1zLHU9b1swXS1hLGg9b1sxXS1zLGY9MioobCpoLWMqdSk7aWYoIShmPj0tU0d0KSl7dmFyIHA9bCpsK2MqYyxkPXUqdStoKmgsZz0oaCpwLWMqZCkvZixfPShsKmQtdSpwKS9mLHk9d0d0LnBvcCgpfHxuZXcgRlJlO3kuYXJjPWUseS5zaXRlPWkseS54PWcrYSx5Lnk9KHkuY3k9XytzKStNYXRoLnNxcnQoZypnK18qXyksZS5jaXJjbGU9eTtmb3IodmFyIHg9bnVsbCxiPW5TLl87YjspaWYoeS55PGIueXx8eS55PT09Yi55JiZ5Lng8PWIueClpZihiLkwpYj1iLkw7ZWxzZXt4PWIuUDticmVha31lbHNlIGlmKGIuUiliPWIuUjtlbHNle3g9YjticmVha31uUy5pbnNlcnQoeCx5KSx4fHwoQXo9eSl9fX19ZnVuY3Rpb24gRTEoZSl7dmFyIHQ9ZS5jaXJjbGU7dCYmKHQuUHx8KEF6PXQuTiksblMucmVtb3ZlKHQpLHdHdC5wdXNoKHQpLFF3KHQpLGUuY2lyY2xlPW51bGwpfXZhciB3R3QsQXosZG50PU0oKCk9PntUeigpO3JTKCk7d0d0PVtdfSk7ZnVuY3Rpb24gQlJlKCl7UXcodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIE1HdChlKXt2YXIgdD1FR3QucG9wKCl8fG5ldyBCUmU7cmV0dXJuIHQuc2l0ZT1lLHR9ZnVuY3Rpb24gbW50KGUpe0UxKGUpLFQxLnJlbW92ZShlKSxFR3QucHVzaChlKSxRdyhlKX1mdW5jdGlvbiBUR3QoZSl7dmFyIHQ9ZS5jaXJjbGUscj10Lngsbj10LmN5LGk9W3Isbl0sbz1lLlAsYT1lLk4scz1bZV07bW50KGUpO2Zvcih2YXIgbD1vO2wuY2lyY2xlJiZNYXRoLmFicyhyLWwuY2lyY2xlLngpPFdyJiZNYXRoLmFicyhuLWwuY2lyY2xlLmN5KTxXcjspbz1sLlAscy51bnNoaWZ0KGwpLG1udChsKSxsPW87cy51bnNoaWZ0KGwpLEUxKGwpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhyLWMuY2lyY2xlLngpPFdyJiZNYXRoLmFicyhuLWMuY2lyY2xlLmN5KTxXcjspYT1jLk4scy5wdXNoKGMpLG1udChjKSxjPWE7cy5wdXNoKGMpLEUxKGMpO3ZhciB1PXMubGVuZ3RoLGg7Zm9yKGg9MTtoPHU7KytoKWM9c1toXSxsPXNbaC0xXSxnQShjLmVkZ2UsbC5zaXRlLGMuc2l0ZSxpKTtsPXNbMF0sYz1zW3UtMV0sYy5lZGdlPXRTKGwuc2l0ZSxjLnNpdGUsbnVsbCxpKSxNMShsKSxNMShjKX1mdW5jdGlvbiBDR3QoZSl7Zm9yKHZhciB0PWVbMF0scj1lWzFdLG4saSxvLGEscz1UMS5fO3M7KWlmKG89QUd0KHMsciktdCxvPldyKXM9cy5MO2Vsc2UgaWYoYT10LUhSZShzLHIpLGE+V3Ipe2lmKCFzLlIpe249czticmVha31zPXMuUn1lbHNle28+LVdyPyhuPXMuUCxpPXMpOmE+LVdyPyhuPXMsaT1zLk4pOm49aT1zO2JyZWFrfXZHdChlKTt2YXIgbD1NR3QoZSk7aWYoVDEuaW5zZXJ0KG4sbCksISghbiYmIWkpKXtpZihuPT09aSl7RTEobiksaT1NR3Qobi5zaXRlKSxUMS5pbnNlcnQobCxpKSxsLmVkZ2U9aS5lZGdlPXRTKG4uc2l0ZSxsLnNpdGUpLE0xKG4pLE0xKGkpO3JldHVybn1pZighaSl7bC5lZGdlPXRTKG4uc2l0ZSxsLnNpdGUpO3JldHVybn1FMShuKSxFMShpKTt2YXIgYz1uLnNpdGUsdT1jWzBdLGg9Y1sxXSxmPWVbMF0tdSxwPWVbMV0taCxkPWkuc2l0ZSxnPWRbMF0tdSxfPWRbMV0taCx5PTIqKGYqXy1wKmcpLHg9ZipmK3AqcCxiPWcqZytfKl8sUz1bKF8qeC1wKmIpL3krdSwoZipiLWcqeCkveStoXTtnQShpLmVkZ2UsYyxkLFMpLGwuZWRnZT10UyhjLGUsbnVsbCxTKSxpLmVkZ2U9dFMoZSxkLG51bGwsUyksTTEobiksTTEoaSl9fWZ1bmN0aW9uIEFHdChlLHQpe3ZhciByPWUuc2l0ZSxuPXJbMF0saT1yWzFdLG89aS10O2lmKCFvKXJldHVybiBuO3ZhciBhPWUuUDtpZighYSlyZXR1cm4tMS8wO3I9YS5zaXRlO3ZhciBzPXJbMF0sbD1yWzFdLGM9bC10O2lmKCFjKXJldHVybiBzO3ZhciB1PXMtbixoPTEvby0xL2MsZj11L2M7cmV0dXJuIGg/KC1mK01hdGguc3FydChmKmYtMipoKih1KnUvKC0yKmMpLWwrYy8yK2ktby8yKSkpL2grbjoobitzKS8yfWZ1bmN0aW9uIEhSZShlLHQpe3ZhciByPWUuTjtpZihyKXJldHVybiBBR3Qocix0KTt2YXIgbj1lLnNpdGU7cmV0dXJuIG5bMV09PT10P25bMF06MS8wfXZhciBFR3QsUEd0PU0oKCk9PntUeigpO3BudCgpO2RudCgpO0N6KCk7clMoKTtFR3Q9W119KTtmdW5jdGlvbiBWUmUoZSx0LHIpe3JldHVybihlWzBdLXJbMF0pKih0WzFdLWVbMV0pLShlWzBdLXRbMF0pKihyWzFdLWVbMV0pfWZ1bmN0aW9uIFVSZShlLHQpe3JldHVybiB0WzFdLWVbMV18fHRbMF0tZVswXX1mdW5jdGlvbiBfQShlLHQpe3ZhciByPWUuc29ydChVUmUpLnBvcCgpLG4saSxvO2ZvcihBbz1bXSxaYT1uZXcgQXJyYXkoZS5sZW5ndGgpLFQxPW5ldyBobnQsblM9bmV3IGhudDs7KWlmKG89QXosciYmKCFvfHxyWzFdPG8ueXx8clsxXT09PW8ueSYmclswXTxvLngpKShyWzBdIT09bnx8clsxXSE9PWkpJiYoQ0d0KHIpLG49clswXSxpPXJbMV0pLHI9ZS5wb3AoKTtlbHNlIGlmKG8pVEd0KG8uYXJjKTtlbHNlIGJyZWFrO2lmKHhHdCgpLHQpe3ZhciBhPSt0WzBdWzBdLHM9K3RbMF1bMV0sbD0rdFsxXVswXSxjPSt0WzFdWzFdO3lHdChhLHMsbCxjKSxiR3QoYSxzLGwsYyl9dGhpcy5lZGdlcz1Bbyx0aGlzLmNlbGxzPVphLFQxPW5TPUFvPVphPW51bGx9dmFyIFdyLFNHdCxUMSxaYSxuUyxBbyxyUz1NKCgpPT57UEd0KCk7cG50KCk7ZG50KCk7Q3ooKTtUeigpO1dyPTFlLTYsU0d0PTFlLTEyO19BLnByb3RvdHlwZT17Y29uc3RydWN0b3I6X0EscG9seWdvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVkZ2VzO3JldHVybiB0aGlzLmNlbGxzLm1hcChmdW5jdGlvbih0KXt2YXIgcj10LmhhbGZlZGdlcy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIGZudCh0LGVbbl0pfSk7cmV0dXJuIHIuZGF0YT10LnNpdGUuZGF0YSxyfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKHIsbil7aWYoISEocz0obz1yLmhhbGZlZGdlcykubGVuZ3RoKSlmb3IodmFyIGk9ci5zaXRlLG8sYT0tMSxzLGwsYz10W29bcy0xXV0sdT1jLmxlZnQ9PT1pP2MucmlnaHQ6Yy5sZWZ0OysrYTxzOylsPXUsYz10W29bYV1dLHU9Yy5sZWZ0PT09aT9jLnJpZ2h0OmMubGVmdCxsJiZ1JiZuPGwuaW5kZXgmJm48dS5pbmRleCYmVlJlKGksbCx1KTwwJiZlLnB1c2goW2kuZGF0YSxsLmRhdGEsdS5kYXRhXSl9KSxlfSxsaW5rczpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZ2VzLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZS5yaWdodH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOmUubGVmdC5kYXRhLHRhcmdldDplLnJpZ2h0LmRhdGF9fSl9LGZpbmQ6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj10aGlzLGksbz1uLl9mb3VuZHx8MCxhPW4uY2VsbHMubGVuZ3RoLHM7IShzPW4uY2VsbHNbb10pOylpZigrK28+PWEpcmV0dXJuIG51bGw7dmFyIGw9ZS1zLnNpdGVbMF0sYz10LXMuc2l0ZVsxXSx1PWwqbCtjKmM7ZG8gcz1uLmNlbGxzW2k9b10sbz1udWxsLHMuaGFsZmVkZ2VzLmZvckVhY2goZnVuY3Rpb24oaCl7dmFyIGY9bi5lZGdlc1toXSxwPWYubGVmdDtpZighKChwPT09cy5zaXRlfHwhcCkmJiEocD1mLnJpZ2h0KSkpe3ZhciBkPWUtcFswXSxnPXQtcFsxXSxfPWQqZCtnKmc7Xzx1JiYodT1fLG89cC5pbmRleCl9fSk7d2hpbGUobyE9PW51bGwpO3JldHVybiBuLl9mb3VuZD1pLHI9PW51bGx8fHU8PXIqcj9zLnNpdGU6bnVsbH19fSk7ZnVuY3Rpb24gSUd0KCl7dmFyIGU9ZEd0LHQ9bUd0LHI9bnVsbDtmdW5jdGlvbiBuKGkpe3JldHVybiBuZXcgX0EoaS5tYXAoZnVuY3Rpb24obyxhKXt2YXIgcz1bTWF0aC5yb3VuZChlKG8sYSxpKS9XcikqV3IsTWF0aC5yb3VuZCh0KG8sYSxpKS9XcikqV3JdO3JldHVybiBzLmluZGV4PWEscy5kYXRhPW8sc30pLHIpfXJldHVybiBuLnBvbHlnb25zPWZ1bmN0aW9uKGkpe3JldHVybiBuKGkpLnBvbHlnb25zKCl9LG4ubGlua3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkubGlua3MoKX0sbi50cmlhbmdsZXM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkudHJpYW5nbGVzKCl9LG4ueD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmNudCgraSksbik6ZX0sbi55PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6Y250KCtpKSxuKTp0fSxuLmV4dGVudD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1sraVswXVswXSwraVswXVsxXV0sWytpWzFdWzBdLCtpWzFdWzFdXV0sbik6ciYmW1tyWzBdWzBdLHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dXX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWzAsMF0sWytpWzBdLCtpWzFdXV0sbik6ciYmW3JbMV1bMF0tclswXVswXSxyWzFdWzFdLXJbMF1bMV1dfSxufXZhciBMR3Q9TSgoKT0+e3BHdCgpO2dHdCgpO3JTKCl9KTt2YXIga0d0PU0oKCk9PntMR3QoKX0pO2Z1bmN0aW9uIE5HdCgpe2Zvcih2YXIgZT0wLHQ9YXJndW1lbnRzLmxlbmd0aCxyPXt9LG47ZTx0OysrZSl7aWYoIShuPWFyZ3VtZW50c1tlXSsiIil8fG4gaW4gcnx8L1tccy5dLy50ZXN0KG4pKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK24pO3Jbbl09W119cmV0dXJuIG5ldyBQeihyKX1mdW5jdGlvbiBQeihlKXt0aGlzLl89ZX1mdW5jdGlvbiBHUmUoZSx0KXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPSIiLGk9ci5pbmRleE9mKCIuIik7aWYoaT49MCYmKG49ci5zbGljZShpKzEpLHI9ci5zbGljZSgwLGkpKSxyJiYhdC5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIityKTtyZXR1cm57dHlwZTpyLG5hbWU6bn19KX1mdW5jdGlvbiBXUmUoZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLGk7cjxuOysrcilpZigoaT1lW3JdKS5uYW1lPT09dClyZXR1cm4gaS52YWx1ZX1mdW5jdGlvbiBSR3QoZSx0LHIpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbilpZihlW25dLm5hbWU9PT10KXtlW25dPXFSZSxlPWUuc2xpY2UoMCxuKS5jb25jYXQoZS5zbGljZShuKzEpKTticmVha31yZXR1cm4gciE9bnVsbCYmZS5wdXNoKHtuYW1lOnQsdmFsdWU6cn0pLGV9dmFyIHFSZSx5QSxER3Q9TSgoKT0+e3FSZT17dmFsdWU6ZnVuY3Rpb24oKXt9fTtQei5wcm90b3R5cGU9Tkd0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6UHosb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl8sbj1HUmUoZSsiIixyKSxpLG89LTEsYT1uLmxlbmd0aDtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcig7KytvPGE7KWlmKChpPShlPW5bb10pLnR5cGUpJiYoaT1XUmUocltpXSxlLm5hbWUpKSlyZXR1cm4gaTtyZXR1cm59aWYodCE9bnVsbCYmdHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK3QpO2Zvcig7KytvPGE7KWlmKGk9KGU9bltvXSkudHlwZSlyW2ldPVJHdChyW2ldLGUubmFtZSx0KTtlbHNlIGlmKHQ9PW51bGwpZm9yKGkgaW4gcilyW2ldPVJHdChyW2ldLGUubmFtZSxudWxsKTtyZXR1cm4gdGhpc30sY29weTpmdW5jdGlvbigpe3ZhciBlPXt9LHQ9dGhpcy5fO2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXS5zbGljZSgpO3JldHVybiBuZXcgUHooZSl9LGNhbGw6ZnVuY3Rpb24oZSx0KXtpZigoaT1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByPW5ldyBBcnJheShpKSxuPTAsaSxvO248aTsrK24pcltuXT1hcmd1bWVudHNbbisyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO2ZvcihvPXRoaXMuX1tlXSxuPTAsaT1vLmxlbmd0aDtuPGk7KytuKW9bbl0udmFsdWUuYXBwbHkodCxyKX0sYXBwbHk6ZnVuY3Rpb24oZSx0LHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoZSkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrZSk7Zm9yKHZhciBuPXRoaXMuX1tlXSxpPTAsbz1uLmxlbmd0aDtpPG87KytpKW5baV0udmFsdWUuYXBwbHkodCxyKX19O3lBPU5HdH0pO3ZhciBnbnQ9TSgoKT0+e0RHdCgpfSk7dmFyIEl6LF9udCx5bnQ9TSgoKT0+e0l6PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixfbnQ9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOkl6LHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn19KTtmdW5jdGlvbiBoZChlKXt2YXIgdD1lKz0iIixyPXQuaW5kZXhPZigiOiIpO3JldHVybiByPj0wJiYodD1lLnNsaWNlKDAscikpIT09InhtbG5zIiYmKGU9ZS5zbGljZShyKzEpKSxfbnQuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOl9udFt0XSxsb2NhbDplfTplfXZhciBMej1NKCgpPT57eW50KCl9KTtmdW5jdGlvbiBZUmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1JeiYmdC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09SXo/dC5jcmVhdGVFbGVtZW50KGUpOnQuY3JlYXRlRWxlbWVudE5TKHIsZSl9fWZ1bmN0aW9uIGpSZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBreihlKXt2YXIgdD1oZChlKTtyZXR1cm4odC5sb2NhbD9qUmU6WVJlKSh0KX12YXIgdm50PU0oKCk9PntMeigpO3ludCgpfSk7ZnVuY3Rpb24gWFJlKCl7fWZ1bmN0aW9uIEMxKGUpe3JldHVybiBlPT1udWxsP1hSZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoZSl9fXZhciBSej1NKCgpPT57fSk7ZnVuY3Rpb24gT0d0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1DMShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPW5ldyBBcnJheShhKSxsLGMsdT0wO3U8YTsrK3UpKGw9b1t1XSkmJihjPWUuY2FsbChsLGwuX19kYXRhX18sdSxvKSkmJigiX19kYXRhX18iaW4gbCYmKGMuX19kYXRhX189bC5fX2RhdGFfXyksc1t1XT1jKTtyZXR1cm4gbmV3IGdpKG4sdGhpcy5fcGFyZW50cyl9dmFyIHpHdD1NKCgpPT57T3UoKTtSeigpfSk7ZnVuY3Rpb24gJFJlKCl7cmV0dXJuW119ZnVuY3Rpb24gdkEoZSl7cmV0dXJuIGU9PW51bGw/JFJlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChlKX19dmFyIHhudD1NKCgpPT57fSk7ZnVuY3Rpb24gRkd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT12QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49W10saT1bXSxvPTA7bzxyOysrbylmb3IodmFyIGE9dFtvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJihuLnB1c2goZS5jYWxsKGwsbC5fX2RhdGFfXyxjLGEpKSxpLnB1c2gobCkpO3JldHVybiBuZXcgZ2kobixpKX12YXIgQkd0PU0oKCk9PntPdSgpO3hudCgpfSk7ZnVuY3Rpb24geEEoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhlKX19dmFyIGJudD1NKCgpPT57fSk7ZnVuY3Rpb24gSEd0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgZ2kobix0aGlzLl9wYXJlbnRzKX12YXIgVkd0PU0oKCk9PntPdSgpO2JudCgpfSk7ZnVuY3Rpb24gTnooZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9dmFyIHdudD1NKCgpPT57fSk7ZnVuY3Rpb24gVUd0KCl7cmV0dXJuIG5ldyBnaSh0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChOeiksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gYkEoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9dmFyIFNudD1NKCgpPT57d250KCk7T3UoKTtiQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmJBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGUsdCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGUpfSxxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChlKX19fSk7ZnVuY3Rpb24gcUd0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgR0d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBLUmUoZSx0LHIsbixpLG8pe2Zvcih2YXIgYT0wLHMsbD10Lmxlbmd0aCxjPW8ubGVuZ3RoO2E8YzsrK2EpKHM9dFthXSk/KHMuX19kYXRhX189b1thXSxuW2FdPXMpOnJbYV09bmV3IGJBKGUsb1thXSk7Zm9yKDthPGw7KythKShzPXRbYV0pJiYoaVthXT1zKX1mdW5jdGlvbiBaUmUoZSx0LHIsbixpLG8sYSl7dmFyIHMsbCxjPXt9LHU9dC5sZW5ndGgsaD1vLmxlbmd0aCxmPW5ldyBBcnJheSh1KSxwO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmKGZbc109cD1XR3QrYS5jYWxsKGwsbC5fX2RhdGFfXyxzLHQpLHAgaW4gYz9pW3NdPWw6Y1twXT1sKTtmb3Iocz0wO3M8aDsrK3MpcD1XR3QrYS5jYWxsKGUsb1tzXSxzLG8pLChsPWNbcF0pPyhuW3NdPWwsbC5fX2RhdGFfXz1vW3NdLGNbcF09bnVsbCk6cltzXT1uZXcgYkEoZSxvW3NdKTtmb3Iocz0wO3M8dTsrK3MpKGw9dFtzXSkmJmNbZltzXV09PT1sJiYoaVtzXT1sKX1mdW5jdGlvbiBZR3QoZSx0KXtpZighZSlyZXR1cm4gcD1uZXcgQXJyYXkodGhpcy5zaXplKCkpLGM9LTEsdGhpcy5lYWNoKGZ1bmN0aW9uKFApe3BbKytjXT1QfSkscDt2YXIgcj10P1pSZTpLUmUsbj10aGlzLl9wYXJlbnRzLGk9dGhpcy5fZ3JvdXBzO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1xR3QoZSkpO2Zvcih2YXIgbz1pLmxlbmd0aCxhPW5ldyBBcnJheShvKSxzPW5ldyBBcnJheShvKSxsPW5ldyBBcnJheShvKSxjPTA7YzxvOysrYyl7dmFyIHU9bltjXSxoPWlbY10sZj1oLmxlbmd0aCxwPWUuY2FsbCh1LHUmJnUuX19kYXRhX18sYyxuKSxkPXAubGVuZ3RoLGc9c1tjXT1uZXcgQXJyYXkoZCksXz1hW2NdPW5ldyBBcnJheShkKSx5PWxbY109bmV3IEFycmF5KGYpO3IodSxoLGcsXyx5LHAsdCk7Zm9yKHZhciB4PTAsYj0wLFMsQzt4PGQ7Kyt4KWlmKFM9Z1t4XSl7Zm9yKHg+PWImJihiPXgrMSk7IShDPV9bYl0pJiYrK2I8ZDspO1MuX25leHQ9Q3x8bnVsbH19cmV0dXJuIGE9bmV3IGdpKGEsbiksYS5fZW50ZXI9cyxhLl9leGl0PWwsYX12YXIgV0d0LGpHdD1NKCgpPT57T3UoKTtTbnQoKTtHR3QoKTtXR3Q9IiQifSk7ZnVuY3Rpb24gWEd0KCl7cmV0dXJuIG5ldyBnaSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKE56KSx0aGlzLl9wYXJlbnRzKX12YXIgJEd0PU0oKCk9Pnt3bnQoKTtPdSgpfSk7ZnVuY3Rpb24gS0d0KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfXZhciBaR3Q9TSgoKT0+e30pO2Z1bmN0aW9uIEpHdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgZ2koYSx0aGlzLl9wYXJlbnRzKX12YXIgUUd0PU0oKCk9PntPdSgpfSk7ZnVuY3Rpb24gdFd0KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PS0xLHI9ZS5sZW5ndGg7Kyt0PHI7KWZvcih2YXIgbj1lW3RdLGk9bi5sZW5ndGgtMSxvPW5baV0sYTstLWk+PTA7KShhPW5baV0pJiYobyYmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihvKV40JiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbyksbz1hKTtyZXR1cm4gdGhpc312YXIgZVd0PU0oKCk9Pnt9KTtmdW5jdGlvbiByV3QoZSl7ZXx8KGU9SlJlKTtmdW5jdGlvbiB0KGgsZil7cmV0dXJuIGgmJmY/ZShoLl9fZGF0YV9fLGYuX19kYXRhX18pOiFoLSFmfWZvcih2YXIgcj10aGlzLl9ncm91cHMsbj1yLmxlbmd0aCxpPW5ldyBBcnJheShuKSxvPTA7bzxuOysrbyl7Zm9yKHZhciBhPXJbb10scz1hLmxlbmd0aCxsPWlbb109bmV3IEFycmF5KHMpLGMsdT0wO3U8czsrK3UpKGM9YVt1XSkmJihsW3VdPWMpO2wuc29ydCh0KX1yZXR1cm4gbmV3IGdpKGksdGhpcy5fcGFyZW50cykub3JkZXIoKX1mdW5jdGlvbiBKUmUoZSx0KXtyZXR1cm4gZTx0Py0xOmU+dD8xOmU+PXQ/MDpOYU59dmFyIG5XdD1NKCgpPT57T3UoKX0pO2Z1bmN0aW9uIGlXdCgpe3ZhciBlPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsZS5hcHBseShudWxsLGFyZ3VtZW50cyksdGhpc312YXIgb1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBhV3QoKXt2YXIgZT1uZXcgQXJyYXkodGhpcy5zaXplKCkpLHQ9LTE7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2VbKyt0XT10aGlzfSksZX12YXIgc1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBsV3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9MCxyPWUubGVuZ3RoO3Q8cjsrK3QpZm9yKHZhciBuPWVbdF0saT0wLG89bi5sZW5ndGg7aTxvOysraSl7dmFyIGE9bltpXTtpZihhKXJldHVybiBhfXJldHVybiBudWxsfXZhciBjV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHVXdCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrZX0pLGV9dmFyIGhXdD1NKCgpPT57fSk7ZnVuY3Rpb24gZld0KCl7cmV0dXJuIXRoaXMubm9kZSgpfXZhciBwV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIGRXdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sbz0wLGE9aS5sZW5ndGgscztvPGE7KytvKShzPWlbb10pJiZlLmNhbGwocyxzLl9fZGF0YV9fLG8saSk7cmV0dXJuIHRoaXN9dmFyIG1XdD1NKCgpPT57fSk7ZnVuY3Rpb24gUVJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpfX1mdW5jdGlvbiB0TmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpfX1mdW5jdGlvbiBlTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHQpfX1mdW5jdGlvbiByTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX19ZnVuY3Rpb24gbk5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTp0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBpTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX19ZnVuY3Rpb24gZ1d0KGUsdCl7dmFyIHI9aGQoZSk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgbj10aGlzLm5vZGUoKTtyZXR1cm4gci5sb2NhbD9uLmdldEF0dHJpYnV0ZU5TKHIuc3BhY2Usci5sb2NhbCk6bi5nZXRBdHRyaWJ1dGUocil9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yLmxvY2FsP3ROZTpRUmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/ci5sb2NhbD9pTmU6bk5lOnIubG9jYWw/ck5lOmVOZSkocix0KSl9dmFyIF9XdD1NKCgpPT57THooKX0pO2Z1bmN0aW9uIER6KGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld312YXIgTW50PU0oKCk9Pnt9KTtmdW5jdGlvbiBvTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gYU5lKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gc05lKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIHlXdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/b05lOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3NOZTphTmUpKGUsdCxyPT1udWxsPyIiOnIpKTpVZyh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBVZyhlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fER6KGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfXZhciBFbnQ9TSgoKT0+e01udCgpfSk7ZnVuY3Rpb24gbE5lKGUpe3JldHVybiBmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2VdfX1mdW5jdGlvbiBjTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzW2VdPXR9fWZ1bmN0aW9uIHVOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/ZGVsZXRlIHRoaXNbZV06dGhpc1tlXT1yfX1mdW5jdGlvbiB2V3QoZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgodD09bnVsbD9sTmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dU5lOmNOZSkoZSx0KSk6dGhpcy5ub2RlKClbZV19dmFyIHhXdD1NKCgpPT57fSk7ZnVuY3Rpb24gYld0KGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBUbnQoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgd1d0KGUpfWZ1bmN0aW9uIHdXdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9Yld0KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gU1d0KGUsdCl7Zm9yKHZhciByPVRudChlKSxuPS0xLGk9dC5sZW5ndGg7KytuPGk7KXIuYWRkKHRbbl0pfWZ1bmN0aW9uIE1XdChlLHQpe2Zvcih2YXIgcj1UbnQoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBoTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7U1d0KHRoaXMsZSl9fWZ1bmN0aW9uIGZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtNV3QodGhpcyxlKX19ZnVuY3Rpb24gcE5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP1NXdDpNV3QpKHRoaXMsZSl9fWZ1bmN0aW9uIEVXdChlLHQpe3ZhciByPWJXdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1UbnQodGhpcy5ub2RlKCkpLGk9LTEsbz1yLmxlbmd0aDsrK2k8bzspaWYoIW4uY29udGFpbnMocltpXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/cE5lOnQ/aE5lOmZOZSkocix0KSl9dmFyIFRXdD1NKCgpPT57d1d0LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fX0pO2Z1bmN0aW9uIGROZSgpe3RoaXMudGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gbU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9ZX19ZnVuY3Rpb24gZ05lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBDV3QoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/ZE5lOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9nTmU6bU5lKShlKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9dmFyIEFXdD1NKCgpPT57fSk7ZnVuY3Rpb24gX05lKCl7dGhpcy5pbm5lckhUTUw9IiJ9ZnVuY3Rpb24geU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPWV9fWZ1bmN0aW9uIHZOZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD10PT1udWxsPyIiOnR9fWZ1bmN0aW9uIFBXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goZT09bnVsbD9fTmU6KHR5cGVvZiBlPT0iZnVuY3Rpb24iP3ZOZTp5TmUpKGUpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9dmFyIElXdD1NKCgpPT57fSk7ZnVuY3Rpb24geE5lKCl7dGhpcy5uZXh0U2libGluZyYmdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpfWZ1bmN0aW9uIExXdCgpe3JldHVybiB0aGlzLmVhY2goeE5lKX12YXIga1d0PU0oKCk9Pnt9KTtmdW5jdGlvbiBiTmUoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBSV3QoKXtyZXR1cm4gdGhpcy5lYWNoKGJOZSl9dmFyIE5XdD1NKCgpPT57fSk7ZnVuY3Rpb24gRFd0KGUpe3ZhciB0PXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6a3ooZSk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9dmFyIE9XdD1NKCgpPT57dm50KCl9KTtmdW5jdGlvbiB3TmUoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiB6V3QoZSx0KXt2YXIgcj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOmt6KGUpLG49dD09bnVsbD93TmU6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpDMSh0KTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9dmFyIEZXdD1NKCgpPT57dm50KCk7UnooKX0pO2Z1bmN0aW9uIFNOZSgpe3ZhciBlPXRoaXMucGFyZW50Tm9kZTtlJiZlLnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIEJXdCgpe3JldHVybiB0aGlzLmVhY2goU05lKX12YXIgSFd0PU0oKCk9Pnt9KTtmdW5jdGlvbiBNTmUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMSksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIEVOZSgpe3ZhciBlPXRoaXMuY2xvbmVOb2RlKCEwKSx0PXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gdD90Lmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpOmV9ZnVuY3Rpb24gVld0KGUpe3JldHVybiB0aGlzLnNlbGVjdChlP0VOZTpNTmUpfXZhciBVV3Q9TSgoKT0+e30pO2Z1bmN0aW9uIHFXdChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsZSk6dGhpcy5ub2RlKCkuX19kYXRhX199dmFyIEdXdD1NKCgpPT57fSk7ZnVuY3Rpb24gVE5lKGUsdCxyKXtyZXR1cm4gZT1qV3QoZSx0LHIpLGZ1bmN0aW9uKG4pe3ZhciBpPW4ucmVsYXRlZFRhcmdldDsoIWl8fGkhPT10aGlzJiYhKGkuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykmOCkpJiZlLmNhbGwodGhpcyxuKX19ZnVuY3Rpb24gald0KGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9WXI7WXI9bjt0cnl7ZS5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyx0LHIpfWZpbmFsbHl7WXI9aX19fWZ1bmN0aW9uIENOZShlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG4+PTAmJihyPXQuc2xpY2UobisxKSx0PXQuc2xpY2UoMCxuKSkse3R5cGU6dCxuYW1lOnJ9fSl9ZnVuY3Rpb24gQU5lKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX19vbjtpZighIXQpe2Zvcih2YXIgcj0wLG49LTEsaT10Lmxlbmd0aCxvO3I8aTsrK3Ipbz10W3JdLCghZS50eXBlfHxvLnR5cGU9PT1lLnR5cGUpJiZvLm5hbWU9PT1lLm5hbWU/dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSxvLmxpc3RlbmVyLG8uY2FwdHVyZSk6dFsrK25dPW87KytuP3QubGVuZ3RoPW46ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIFBOZShlLHQscil7dmFyIG49WVd0Lmhhc093blByb3BlcnR5KGUudHlwZSk/VE5lOmpXdDtyZXR1cm4gZnVuY3Rpb24oaSxvLGEpe3ZhciBzPXRoaXMuX19vbixsLGM9bih0LG8sYSk7aWYocyl7Zm9yKHZhciB1PTAsaD1zLmxlbmd0aDt1PGg7Kyt1KWlmKChsPXNbdV0pLnR5cGU9PT1lLnR5cGUmJmwubmFtZT09PWUubmFtZSl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyLGwuY2FwdHVyZSksdGhpcy5hZGRFdmVudExpc3RlbmVyKGwudHlwZSxsLmxpc3RlbmVyPWMsbC5jYXB0dXJlPXIpLGwudmFsdWU9dDtyZXR1cm59fXRoaXMuYWRkRXZlbnRMaXN0ZW5lcihlLnR5cGUsYyxyKSxsPXt0eXBlOmUudHlwZSxuYW1lOmUubmFtZSx2YWx1ZTp0LGxpc3RlbmVyOmMsY2FwdHVyZTpyfSxzP3MucHVzaChsKTp0aGlzLl9fb249W2xdfX1mdW5jdGlvbiBYV3QoZSx0LHIpe3ZhciBuPUNOZShlKyIiKSxpLG89bi5sZW5ndGgsYTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBzPXRoaXMubm9kZSgpLl9fb247aWYocyl7Zm9yKHZhciBsPTAsYz1zLmxlbmd0aCx1O2w8YzsrK2wpZm9yKGk9MCx1PXNbbF07aTxvOysraSlpZigoYT1uW2ldKS50eXBlPT09dS50eXBlJiZhLm5hbWU9PT11Lm5hbWUpcmV0dXJuIHUudmFsdWV9cmV0dXJufWZvcihzPXQ/UE5lOkFOZSxyPT1udWxsJiYocj0hMSksaT0wO2k8bzsrK2kpdGhpcy5lYWNoKHMobltpXSx0LHIpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBDbnQoZSx0LHIsbil7dmFyIGk9WXI7ZS5zb3VyY2VFdmVudD1ZcixZcj1lO3RyeXtyZXR1cm4gdC5hcHBseShyLG4pfWZpbmFsbHl7WXI9aX19dmFyIFlXdCxZcixXV3QsT3o9TSgoKT0+e1lXdD17fSxZcj1udWxsO3R5cGVvZiBkb2N1bWVudCE9InVuZGVmaW5lZCImJihXV3Q9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJvbm1vdXNlZW50ZXIiaW4gV1d0fHwoWVd0PXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKX0pO2Z1bmN0aW9uICRXdChlLHQscil7dmFyIG49RHooZSksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkodCxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KHQsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KHQsITEsITEpKSxlLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gSU5lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuICRXdCh0aGlzLGUsdCl9fWZ1bmN0aW9uIExOZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiAkV3QodGhpcyxlLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gS1d0KGUsdCl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/TE5lOklOZSkoZSx0KSl9dmFyIFpXdD1NKCgpPT57TW50KCl9KTtmdW5jdGlvbiBnaShlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBKV3QoKXtyZXR1cm4gbmV3IGdpKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sQW50KX12YXIgQW50LGZkLE91PU0oKCk9Pnt6R3QoKTtCR3QoKTtWR3QoKTtqR3QoKTtTbnQoKTskR3QoKTtaR3QoKTtRR3QoKTtlV3QoKTtuV3QoKTtvV3QoKTtzV3QoKTtjV3QoKTtoV3QoKTtwV3QoKTttV3QoKTtfV3QoKTtFbnQoKTt4V3QoKTtUV3QoKTtBV3QoKTtJV3QoKTtrV3QoKTtOV3QoKTtPV3QoKTtGV3QoKTtIV3QoKTtVV3QoKTtHV3QoKTtPeigpO1pXdCgpO0FudD1bbnVsbF07Z2kucHJvdG90eXBlPUpXdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmdpLHNlbGVjdDpPR3Qsc2VsZWN0QWxsOkZHdCxmaWx0ZXI6SEd0LGRhdGE6WUd0LGVudGVyOlVHdCxleGl0OlhHdCxqb2luOktHdCxtZXJnZTpKR3Qsb3JkZXI6dFd0LHNvcnQ6cld0LGNhbGw6aVd0LG5vZGVzOmFXdCxub2RlOmxXdCxzaXplOnVXdCxlbXB0eTpmV3QsZWFjaDpkV3QsYXR0cjpnV3Qsc3R5bGU6eVd0LHByb3BlcnR5OnZXdCxjbGFzc2VkOkVXdCx0ZXh0OkNXdCxodG1sOlBXdCxyYWlzZTpMV3QsbG93ZXI6Uld0LGFwcGVuZDpEV3QsaW5zZXJ0OnpXdCxyZW1vdmU6Qld0LGNsb25lOlZXdCxkYXR1bTpxV3Qsb246WFd0LGRpc3BhdGNoOktXdH07ZmQ9Sld0fSk7ZnVuY3Rpb24gcGQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgZ2koW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBnaShbW2VdXSxBbnQpfXZhciBRV3Q9TSgoKT0+e091KCl9KTtmdW5jdGlvbiB6eigpe2Zvcih2YXIgZT1Zcix0O3Q9ZS5zb3VyY2VFdmVudDspZT10O3JldHVybiBlfXZhciBQbnQ9TSgoKT0+e096KCl9KTtmdW5jdGlvbiBGeihlLHQpe3ZhciByPWUub3duZXJTVkdFbGVtZW50fHxlO2lmKHIuY3JlYXRlU1ZHUG9pbnQpe3ZhciBuPXIuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gbi54PXQuY2xpZW50WCxuLnk9dC5jbGllbnRZLG49bi5tYXRyaXhUcmFuc2Zvcm0oZS5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpLFtuLngsbi55XX12YXIgaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVyblt0LmNsaWVudFgtaS5sZWZ0LWUuY2xpZW50TGVmdCx0LmNsaWVudFktaS50b3AtZS5jbGllbnRUb3BdfXZhciBJbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIGlTKGUpe3ZhciB0PXp6KCk7cmV0dXJuIHQuY2hhbmdlZFRvdWNoZXMmJih0PXQuY2hhbmdlZFRvdWNoZXNbMF0pLEZ6KGUsdCl9dmFyIHRZdD1NKCgpPT57UG50KCk7SW50KCl9KTtmdW5jdGlvbiBCeihlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9enooKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBGeihlLG8pO3JldHVybiBudWxsfXZhciBlWXQ9TSgoKT0+e1BudCgpO0ludCgpfSk7dmFyIElzPU0oKCk9PntibnQoKTt0WXQoKTtMeigpO1FXdCgpO091KCk7UnooKTt4bnQoKTtFbnQoKTtlWXQoKTtPeigpfSk7ZnVuY3Rpb24gSHooKXtZci5wcmV2ZW50RGVmYXVsdCgpLFlyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciByWXQ9TSgoKT0+e0lzKCl9KTtmdW5jdGlvbiBMbnQoZSl7dmFyIHQ9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1wZChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLEh6LCEwKTsib25zZWxlY3RzdGFydCJpbiB0P3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLEh6LCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBrbnQoZSx0KXt2YXIgcj1lLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxuPXBkKGUpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7dCYmKG4ub24oImNsaWNrLmRyYWciLEh6LCEwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bi5vbigiY2xpY2suZHJhZyIsbnVsbCl9LDApKSwib25zZWxlY3RzdGFydCJpbiByP24ub24oInNlbGVjdHN0YXJ0LmRyYWciLG51bGwpOihyLnN0eWxlLk1velVzZXJTZWxlY3Q9ci5fX25vc2VsZWN0LGRlbGV0ZSByLl9fbm9zZWxlY3QpfXZhciBuWXQ9TSgoKT0+e0lzKCk7cll0KCl9KTt2YXIgaVl0PU0oKCk9PntuWXQoKX0pO2Z1bmN0aW9uIFZ6KGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBSbnQoZSx0KXt2YXIgcj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gdClyW25dPXRbbl07cmV0dXJuIHJ9dmFyIG9ZdD1NKCgpPT57fSk7ZnVuY3Rpb24gTUEoKXt9ZnVuY3Rpb24gc1l0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gQk5lKCl7cmV0dXJuIHBZdCh0aGlzKS5mb3JtYXRIc2woKX1mdW5jdGlvbiBsWXQoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBxZyhlKXt2YXIgdCxyO3JldHVybiBlPShlKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1rTmUuZXhlYyhlKSk/KHI9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSxyPT09Nj9jWXQodCk6cj09PTM/bmV3IGdsKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXx0JjI0MCwodCYxNSk8PDR8dCYxNSwxKTpyPT09OD9Veih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCh0JjI1NSkvMjU1KTpyPT09ND9Veih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKCh0JjE1KTw8NHx0JjE1KS8yNTUpOm51bGwpOih0PVJOZS5leGVjKGUpKT9uZXcgZ2wodFsxXSx0WzJdLHRbM10sMSk6KHQ9Tk5lLmV4ZWMoZSkpP25ldyBnbCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCwxKToodD1ETmUuZXhlYyhlKSk/VXoodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9T05lLmV4ZWMoZSkpP1V6KHRbMV0qMjU1LzEwMCx0WzJdKjI1NS8xMDAsdFszXSoyNTUvMTAwLHRbNF0pOih0PXpOZS5leGVjKGUpKT9mWXQodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1GTmUuZXhlYyhlKSk/Zll0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6YVl0Lmhhc093blByb3BlcnR5KGUpP2NZdChhWXRbZV0pOmU9PT0idHJhbnNwYXJlbnQiP25ldyBnbChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIGNZdChlKXtyZXR1cm4gbmV3IGdsKGU+PjE2JjI1NSxlPj44JjI1NSxlJjI1NSwxKX1mdW5jdGlvbiBVeihlLHQscixuKXtyZXR1cm4gbjw9MCYmKGU9dD1yPU5hTiksbmV3IGdsKGUsdCxyLG4pfWZ1bmN0aW9uIEhOZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE1BfHwoZT1xZyhlKSksZT8oZT1lLnJnYigpLG5ldyBnbChlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgZ2x9ZnVuY3Rpb24gYVMoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0hOZShlKTpuZXcgZ2woZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGdsKGUsdCxyLG4pe3RoaXMucj0rZSx0aGlzLmc9K3QsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiB1WXQoKXtyZXR1cm4iIyIrTm50KHRoaXMucikrTm50KHRoaXMuZykrTm50KHRoaXMuYil9ZnVuY3Rpb24gaFl0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIE5udChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGUpfHwwKSksKGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBmWXQoZSx0LHIsbil7cmV0dXJuIG48PTA/ZT10PXI9TmFOOnI8PTB8fHI+PTE/ZT10PU5hTjp0PD0wJiYoZT1OYU4pLG5ldyBDZihlLHQscixuKX1mdW5jdGlvbiBwWXQoZSl7aWYoZSBpbnN0YW5jZW9mIENmKXJldHVybiBuZXcgQ2YoZS5oLGUucyxlLmwsZS5vcGFjaXR5KTtpZihlIGluc3RhbmNlb2YgTUF8fChlPXFnKGUpKSwhZSlyZXR1cm4gbmV3IENmO2lmKGUgaW5zdGFuY2VvZiBDZilyZXR1cm4gZTtlPWUucmdiKCk7dmFyIHQ9ZS5yLzI1NSxyPWUuZy8yNTUsbj1lLmIvMjU1LGk9TWF0aC5taW4odCxyLG4pLG89TWF0aC5tYXgodCxyLG4pLGE9TmFOLHM9by1pLGw9KG8raSkvMjtyZXR1cm4gcz8odD09PW8/YT0oci1uKS9zKyhyPG4pKjY6cj09PW8/YT0obi10KS9zKzI6YT0odC1yKS9zKzQscy89bDwuNT9vK2k6Mi1vLWksYSo9NjApOnM9bD4wJiZsPDE/MDphLG5ldyBDZihhLHMsbCxlLm9wYWNpdHkpfWZ1bmN0aW9uIGRZdChlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/cFl0KGUpOm5ldyBDZihlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gQ2YoZSx0LHIsbil7dGhpcy5oPStlLHRoaXMucz0rdCx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIERudChlLHQscil7cmV0dXJuKGU8NjA/dCsoci10KSplLzYwOmU8MTgwP3I6ZTwyNDA/dCsoci10KSooMjQwLWUpLzYwOnQpKjI1NX12YXIgd0EscXosb1MsU0EsQWYsa05lLFJOZSxOTmUsRE5lLE9OZSx6TmUsRk5lLGFZdCxtWXQ9TSgoKT0+e29ZdCgpO3dBPS43LHF6PTEvd0Esb1M9IlxccyooWystXT9cXGQrKVxccyoiLFNBPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLEFmPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixrTmU9L14jKFswLTlhLWZdezMsOH0pJC8sUk5lPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tvUyxvUyxvU10rIlxcKSQiKSxOTmU9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW0FmLEFmLEFmXSsiXFwpJCIpLEROZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW29TLG9TLG9TLFNBXSsiXFwpJCIpLE9OZT1uZXcgUmVnRXhwKCJecmdiYVxcKCIrW0FmLEFmLEFmLFNBXSsiXFwpJCIpLHpOZT1uZXcgUmVnRXhwKCJeaHNsXFwoIitbU0EsQWYsQWZdKyJcXCkkIiksRk5lPW5ldyBSZWdFeHAoIl5oc2xhXFwoIitbU0EsQWYsQWYsU0FdKyJcXCkkIiksYVl0PXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O1Z6KE1BLHFnLHtjb3B5OmZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsZSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4OnNZdCxmb3JtYXRIZXg6c1l0LGZvcm1hdEhzbDpCTmUsZm9ybWF0UmdiOmxZdCx0b1N0cmluZzpsWXR9KTtWeihnbCxhUyxSbnQoTUEse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/cXo6TWF0aC5wb3cocXosZSksbmV3IGdsKHRoaXMuciplLHRoaXMuZyplLHRoaXMuYiplLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP3dBOk1hdGgucG93KHdBLGUpLG5ldyBnbCh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OnVZdCxmb3JtYXRIZXg6dVl0LGZvcm1hdFJnYjpoWXQsdG9TdHJpbmc6aFl0fSkpO1Z6KENmLGRZdCxSbnQoTUEse2JyaWdodGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/cXo6TWF0aC5wb3cocXosZSksbmV3IENmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWU9PW51bGw/d0E6TWF0aC5wb3cod0EsZSksbmV3IENmKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oJTM2MCsodGhpcy5oPDApKjM2MCx0PWlzTmFOKGUpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLHI9dGhpcy5sLG49cisocjwuNT9yOjEtcikqdCxpPTIqci1uO3JldHVybiBuZXcgZ2woRG50KGU+PTI0MD9lLTI0MDplKzEyMCxpLG4pLERudChlLGksbiksRG50KGU8MTIwP2UrMjQwOmUtMTIwLGksbiksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BhY2l0eTtyZXR1cm4gZT1pc05hTihlKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksKGU9PT0xPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKyh0aGlzLnN8fDApKjEwMCsiJSwgIisodGhpcy5sfHwwKSoxMDArIiUiKyhlPT09MT8iKSI6IiwgIitlKyIpIil9fSkpfSk7dmFyIE9udD1NKCgpPT57bVl0KCl9KTtmdW5jdGlvbiB6bnQoZSx0LHIsbixpKXt2YXIgbz1lKmUsYT1vKmU7cmV0dXJuKCgxLTMqZSszKm8tYSkqdCsoNC02Km8rMyphKSpyKygxKzMqZSszKm8tMyphKSpuK2EqaSkvNn1mdW5jdGlvbiBnWXQoZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIHpudCgoci1uL3QpKnQsYSxpLG8scyl9fXZhciBGbnQ9TSgoKT0+e30pO2Z1bmN0aW9uIF9ZdChlKXt2YXIgdD1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49TWF0aC5mbG9vcigoKHIlPTEpPDA/KytyOnIpKnQpLGk9ZVsobit0LTEpJXRdLG89ZVtuJXRdLGE9ZVsobisxKSV0XSxzPWVbKG4rMikldF07cmV0dXJuIHpudCgoci1uL3QpKnQsaSxvLGEscyl9fXZhciB5WXQ9TSgoKT0+e0ZudCgpfSk7ZnVuY3Rpb24gQm50KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX12YXIgdll0PU0oKCk9Pnt9KTtmdW5jdGlvbiBWTmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBVTmUoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiB4WXQoZSl7cmV0dXJuKGU9K2UpPT0xP0d6OmZ1bmN0aW9uKHQscil7cmV0dXJuIHItdD9VTmUodCxyLGUpOkJudChpc05hTih0KT9yOnQpfX1mdW5jdGlvbiBHeihlLHQpe3ZhciByPXQtZTtyZXR1cm4gcj9WTmUoZSxyKTpCbnQoaXNOYU4oZSk/dDplKX12YXIgYll0PU0oKCk9Pnt2WXQoKX0pO2Z1bmN0aW9uIHdZdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT1uZXcgQXJyYXkociksbz1uZXcgQXJyYXkociksYSxzO2ZvcihhPTA7YTxyOysrYSlzPWFTKHRbYV0pLG5bYV09cy5yfHwwLGlbYV09cy5nfHwwLG9bYV09cy5ifHwwO3JldHVybiBuPWUobiksaT1lKGkpLG89ZShvKSxzLm9wYWNpdHk9MSxmdW5jdGlvbihsKXtyZXR1cm4gcy5yPW4obCkscy5nPWkobCkscy5iPW8obCkscysiIn19fXZhciBXeixxTmUsR05lLFNZdD1NKCgpPT57T250KCk7Rm50KCk7eVl0KCk7Yll0KCk7V3o9ZnVuY3Rpb24gZSh0KXt2YXIgcj14WXQodCk7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPXIoKGk9YVMoaSkpLnIsKG89YVMobykpLnIpLHM9cihpLmcsby5nKSxsPXIoaS5iLG8uYiksYz1HeihpLm9wYWNpdHksby5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGkucj1hKHUpLGkuZz1zKHUpLGkuYj1sKHUpLGkub3BhY2l0eT1jKHUpLGkrIiJ9fXJldHVybiBuLmdhbW1hPWUsbn0oMSk7cU5lPXdZdChnWXQpLEdOZT13WXQoX1l0KX0pO2Z1bmN0aW9uIEljKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gZSooMS1yKSt0KnJ9fXZhciBZej1NKCgpPT57fSk7ZnVuY3Rpb24gV05lKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBZTmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifX1mdW5jdGlvbiBVbnQoZSx0KXt2YXIgcj1WbnQubGFzdEluZGV4PUhudC5sYXN0SW5kZXg9MCxuLGksbyxhPS0xLHM9W10sbD1bXTtmb3IoZT1lKyIiLHQ9dCsiIjsobj1WbnQuZXhlYyhlKSkmJihpPUhudC5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6SWMobixpKX0pKSxyPUhudC5sYXN0SW5kZXg7cmV0dXJuIHI8dC5sZW5ndGgmJihvPXQuc2xpY2Uociksc1thXT9zW2FdKz1vOnNbKythXT1vKSxzLmxlbmd0aDwyP2xbMF0/WU5lKGxbMF0ueCk6V05lKHQpOih0PWwubGVuZ3RoLGZ1bmN0aW9uKGMpe2Zvcih2YXIgdT0wLGg7dTx0OysrdSlzWyhoPWxbdV0pLmldPWgueChjKTtyZXR1cm4gcy5qb2luKCIiKX0pfXZhciBWbnQsSG50LE1ZdD1NKCgpPT57WXooKTtWbnQ9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLEhudD1uZXcgUmVnRXhwKFZudC5zb3VyY2UsImciKX0pO2Z1bmN0aW9uIHFudChlLHQscixuLGksbyl7dmFyIGEscyxsO3JldHVybihhPU1hdGguc3FydChlKmUrdCp0KSkmJihlLz1hLHQvPWEpLChsPWUqcit0Km4pJiYoci09ZSpsLG4tPXQqbCksKHM9TWF0aC5zcXJ0KHIqcituKm4pKSYmKHIvPXMsbi89cyxsLz1zKSxlKm48dCpyJiYoZT0tZSx0PS10LGw9LWwsYT0tYSkse3RyYW5zbGF0ZVg6aSx0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxlKSpFWXQsc2tld1g6TWF0aC5hdGFuKGwpKkVZdCxzY2FsZVg6YSxzY2FsZVk6c319dmFyIEVZdCxqeixUWXQ9TSgoKT0+e0VZdD0xODAvTWF0aC5QSSxqej17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfX0pO2Z1bmN0aW9uIEFZdChlKXtyZXR1cm4gZT09PSJub25lIj9qejooRUF8fChFQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxHbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LENZdD1kb2N1bWVudC5kZWZhdWx0VmlldyksRUEuc3R5bGUudHJhbnNmb3JtPWUsZT1DWXQuZ2V0Q29tcHV0ZWRTdHlsZShHbnQuYXBwZW5kQ2hpbGQoRUEpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLEdudC5yZW1vdmVDaGlsZChFQSksZT1lLnNsaWNlKDcsLTEpLnNwbGl0KCIsIikscW50KCtlWzBdLCtlWzFdLCtlWzJdLCtlWzNdLCtlWzRdLCtlWzVdKSl9ZnVuY3Rpb24gUFl0KGUpe3JldHVybiBlPT1udWxsP2p6OihYenx8KFh6PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFh6LnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixlKSwoZT1Yei50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT8oZT1lLm1hdHJpeCxxbnQoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpqeil9dmFyIEVBLEdudCxDWXQsWHosSVl0PU0oKCk9PntUWXQoKX0pO2Z1bmN0aW9uIExZdChlLHQscixuKXtmdW5jdGlvbiBpKGMpe3JldHVybiBjLmxlbmd0aD9jLnBvcCgpKyIgIjoiIn1mdW5jdGlvbiBvKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaCgidHJhbnNsYXRlKCIsbnVsbCx0LG51bGwscik7ZC5wdXNoKHtpOmctNCx4OkljKGMsaCl9LHtpOmctMix4OkljKHUsZil9KX1lbHNlKGh8fGYpJiZwLnB1c2goInRyYW5zbGF0ZSgiK2grdCtmK3IpfWZ1bmN0aW9uIGEoYyx1LGgsZil7YyE9PXU/KGMtdT4xODA/dSs9MzYwOnUtYz4xODAmJihjKz0zNjApLGYucHVzaCh7aTpoLnB1c2goaShoKSsicm90YXRlKCIsbnVsbCxuKS0yLHg6SWMoYyx1KX0pKTp1JiZoLnB1c2goaShoKSsicm90YXRlKCIrdStuKX1mdW5jdGlvbiBzKGMsdSxoLGYpe2MhPT11P2YucHVzaCh7aTpoLnB1c2goaShoKSsic2tld1goIixudWxsLG4pLTIseDpJYyhjLHUpfSk6dSYmaC5wdXNoKGkoaCkrInNrZXdYKCIrdStuKX1mdW5jdGlvbiBsKGMsdSxoLGYscCxkKXtpZihjIT09aHx8dSE9PWYpe3ZhciBnPXAucHVzaChpKHApKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtkLnB1c2goe2k6Zy00LHg6SWMoYyxoKX0se2k6Zy0yLHg6SWModSxmKX0pfWVsc2UoaCE9PTF8fGYhPT0xKSYmcC5wdXNoKGkocCkrInNjYWxlKCIraCsiLCIrZisiKSIpfXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBoPVtdLGY9W107cmV0dXJuIGM9ZShjKSx1PWUodSksbyhjLnRyYW5zbGF0ZVgsYy50cmFuc2xhdGVZLHUudHJhbnNsYXRlWCx1LnRyYW5zbGF0ZVksaCxmKSxhKGMucm90YXRlLHUucm90YXRlLGgsZikscyhjLnNrZXdYLHUuc2tld1gsaCxmKSxsKGMuc2NhbGVYLGMuc2NhbGVZLHUuc2NhbGVYLHUuc2NhbGVZLGgsZiksYz11PW51bGwsZnVuY3Rpb24ocCl7Zm9yKHZhciBkPS0xLGc9Zi5sZW5ndGgsXzsrK2Q8ZzspaFsoXz1mW2RdKS5pXT1fLngocCk7cmV0dXJuIGguam9pbigiIil9fX12YXIgV250LFludCxrWXQ9TSgoKT0+e1l6KCk7SVl0KCk7V250PUxZdChBWXQsInB4LCAiLCJweCkiLCJkZWcpIiksWW50PUxZdChQWXQsIiwgIiwiKSIsIikiKX0pO2Z1bmN0aW9uIE5ZdChlKXtyZXR1cm4oKGU9TWF0aC5leHAoZSkpKzEvZSkvMn1mdW5jdGlvbiBYTmUoZSl7cmV0dXJuKChlPU1hdGguZXhwKGUpKS0xL2UpLzJ9ZnVuY3Rpb24gJE5lKGUpe3JldHVybigoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKX1mdW5jdGlvbiBYbnQoZSx0KXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sbz10WzBdLGE9dFsxXSxzPXRbMl0sbD1vLXIsYz1hLW4sdT1sKmwrYypjLGgsZjtpZih1PGpOZSlmPU1hdGgubG9nKHMvaSkvVEEsaD1mdW5jdGlvbih4KXtyZXR1cm5bcit4Kmwsbit4KmMsaSpNYXRoLmV4cChUQSp4KmYpXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQodSksZD0ocypzLWkqaStSWXQqdSkvKDIqaSpqbnQqcCksZz0ocypzLWkqaS1SWXQqdSkvKDIqcypqbnQqcCksXz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHk9TWF0aC5sb2coTWF0aC5zcXJ0KGcqZysxKS1nKTtmPSh5LV8pL1RBLGg9ZnVuY3Rpb24oeCl7dmFyIGI9eCpmLFM9Tll0KF8pLEM9aS8oam50KnApKihTKiROZShUQSpiK18pLVhOZShfKSk7cmV0dXJuW3IrQypsLG4rQypjLGkqUy9OWXQoVEEqYitfKV19fXJldHVybiBoLmR1cmF0aW9uPWYqMWUzLGh9dmFyIFRBLGpudCxSWXQsak5lLERZdD1NKCgpPT57VEE9TWF0aC5TUVJUMixqbnQ9MixSWXQ9NCxqTmU9MWUtMTJ9KTt2YXIgQ0E9TSgoKT0+e1l6KCk7TVl0KCk7a1l0KCk7RFl0KCk7U1l0KCl9KTtmdW5jdGlvbiBsUygpe3JldHVybiBBMXx8KEZZdChLTmUpLEExPUxBLm5vdygpK1p6KX1mdW5jdGlvbiBLTmUoKXtBMT0wfWZ1bmN0aW9uIGtBKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBKeihlLHQscil7dmFyIG49bmV3IGtBO3JldHVybiBuLnJlc3RhcnQoZSx0LHIpLG59ZnVuY3Rpb24gQll0KCl7bFMoKSwrK3NTO2Zvcih2YXIgZT0keix0O2U7KSh0PUExLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS1zU31mdW5jdGlvbiBPWXQoKXtBMT0oS3o9TEEubm93KCkpK1p6LHNTPVBBPTA7dHJ5e0JZdCgpfWZpbmFsbHl7c1M9MCxKTmUoKSxBMT0wfX1mdW5jdGlvbiBaTmUoKXt2YXIgZT1MQS5ub3coKSx0PWUtS3o7dD56WXQmJihaei09dCxLej1lKX1mdW5jdGlvbiBKTmUoKXtmb3IodmFyIGUsdD0keixyLG49MS8wO3Q7KXQuX2NhbGw/KG4+dC5fdGltZSYmKG49dC5fdGltZSksZT10LHQ9dC5fbmV4dCk6KHI9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1lP2UuX25leHQ9cjokej1yKTtJQT1lLCRudChuKX1mdW5jdGlvbiAkbnQoZSl7aWYoIXNTKXtQQSYmKFBBPWNsZWFyVGltZW91dChQQSkpO3ZhciB0PWUtQTE7dD4yND8oZTwxLzAmJihQQT1zZXRUaW1lb3V0KE9ZdCxlLUxBLm5vdygpLVp6KSksQUEmJihBQT1jbGVhckludGVydmFsKEFBKSkpOihBQXx8KEt6PUxBLm5vdygpLEFBPXNldEludGVydmFsKFpOZSx6WXQpKSxzUz0xLEZZdChPWXQpKX19dmFyIHNTLFBBLEFBLHpZdCwkeixJQSxLeixBMSxaeixMQSxGWXQsS250PU0oKCk9PntzUz0wLFBBPTAsQUE9MCx6WXQ9MWUzLEt6PTAsQTE9MCxaej0wLExBPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLEZZdD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtrQS5wcm90b3R5cGU9SnoucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprQSxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/bFMoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJklBIT09dGhpcyYmKElBP0lBLl9uZXh0PXRoaXM6JHo9dGhpcyxJQT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLCRudCgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCwkbnQoKSl9fX0pO2Z1bmN0aW9uIFF6KGUsdCxyKXt2YXIgbj1uZXcga0E7cmV0dXJuIHQ9dD09bnVsbD8wOit0LG4ucmVzdGFydChmdW5jdGlvbihpKXtuLnN0b3AoKSxlKGkrdCl9LHQsciksbn12YXIgSFl0PU0oKCk9PntLbnQoKX0pO3ZhciBabnQ9TSgoKT0+e0tudCgpO0hZdCgpfSk7ZnVuY3Rpb24gR2coZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtlRGUoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlFOZSx0d2Vlbjp0RGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6VVl0fSl9ZnVuY3Rpb24gTkEoZSx0KXt2YXIgcj1vbyhlLHQpO2lmKHIuc3RhdGU+VVl0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gSmEoZSx0KXt2YXIgcj1vbyhlLHQpO2lmKHIuc3RhdGU+dEYpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHJ9ZnVuY3Rpb24gb28oZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBlRGUoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9SnoobywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPUpudCxyLnRpbWVyLnJlc3RhcnQoYSxyLmRlbGF5LHIudGltZSksci5kZWxheTw9YyYmYShjLXIuZGVsYXkpfWZ1bmN0aW9uIGEoYyl7dmFyIHUsaCxmLHA7aWYoci5zdGF0ZSE9PUpudClyZXR1cm4gbCgpO2Zvcih1IGluIG4paWYocD1uW3VdLHAubmFtZT09PXIubmFtZSl7aWYocC5zdGF0ZT09PXRGKXJldHVybiBReihhKTtwLnN0YXRlPT09Vll0PyhwLnN0YXRlPVJBLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCgiaW50ZXJydXB0IixlLGUuX19kYXRhX18scC5pbmRleCxwLmdyb3VwKSxkZWxldGUgblt1XSk6K3U8dCYmKHAuc3RhdGU9UkEscC50aW1lci5zdG9wKCkscC5vbi5jYWxsKCJjYW5jZWwiLGUsZS5fX2RhdGFfXyxwLmluZGV4LHAuZ3JvdXApLGRlbGV0ZSBuW3VdKX1pZihReihmdW5jdGlvbigpe3Iuc3RhdGU9PT10RiYmKHIuc3RhdGU9Vll0LHIudGltZXIucmVzdGFydChzLHIuZGVsYXksci50aW1lKSxzKGMpKX0pLHIuc3RhdGU9ZUYsci5vbi5jYWxsKCJzdGFydCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksci5zdGF0ZT09PWVGKXtmb3Ioci5zdGF0ZT10RixpPW5ldyBBcnJheShmPXIudHdlZW4ubGVuZ3RoKSx1PTAsaD0tMTt1PGY7Kyt1KShwPXIudHdlZW5bdV0udmFsdWUuY2FsbChlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSkmJihpWysraF09cCk7aS5sZW5ndGg9aCsxfX1mdW5jdGlvbiBzKGMpe2Zvcih2YXIgdT1jPHIuZHVyYXRpb24/ci5lYXNlLmNhbGwobnVsbCxjL3IuZHVyYXRpb24pOihyLnRpbWVyLnJlc3RhcnQobCksci5zdGF0ZT1yRiwxKSxoPS0xLGY9aS5sZW5ndGg7KytoPGY7KWlbaF0uY2FsbChlLHUpO3Iuc3RhdGU9PT1yRiYmKHIub24uY2FsbCgiZW5kIixlLGUuX19kYXRhX18sci5pbmRleCxyLmdyb3VwKSxsKCkpfWZ1bmN0aW9uIGwoKXtyLnN0YXRlPVJBLHIudGltZXIuc3RvcCgpLGRlbGV0ZSBuW3RdO2Zvcih2YXIgYyBpbiBuKXJldHVybjtkZWxldGUgZS5fX3RyYW5zaXRpb259fXZhciBRTmUsdERlLFVZdCxKbnQsZUYsdEYsVll0LHJGLFJBLExzPU0oKCk9PntnbnQoKTtabnQoKTtRTmU9eUEoInN0YXJ0IiwiZW5kIiwiY2FuY2VsIiwiaW50ZXJydXB0IiksdERlPVtdLFVZdD0wLEpudD0xLGVGPTIsdEY9MyxWWXQ9NCxyRj01LFJBPTZ9KTtmdW5jdGlvbiBQMShlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saSxvPSEwLGE7aWYoISFyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihhIGluIHIpe2lmKChuPXJbYV0pLm5hbWUhPT10KXtvPSExO2NvbnRpbnVlfWk9bi5zdGF0ZT5lRiYmbi5zdGF0ZTxyRixuLnN0YXRlPVJBLG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChpPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW2FdfW8mJmRlbGV0ZSBlLl9fdHJhbnNpdGlvbn19dmFyIFFudD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIHFZdChlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7UDEodGhpcyxlKX0pfXZhciBHWXQ9TSgoKT0+e1FudCgpfSk7ZnVuY3Rpb24gckRlKGUsdCl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1KYSh0aGlzLGUpLG89aS50d2VlbjtpZihvIT09cil7bj1yPW87Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKWlmKG5bYV0ubmFtZT09PXQpe249bi5zbGljZSgpLG4uc3BsaWNlKGEsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gbkRlKGUsdCxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1KYSh0aGlzLGUpLGE9by50d2VlbjtpZihhIT09bil7aT0obj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTp0LHZhbHVlOnJ9LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09dCl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9by50d2Vlbj1pfX1mdW5jdGlvbiBXWXQoZSx0KXt2YXIgcj10aGlzLl9pZDtpZihlKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1vbyh0aGlzLm5vZGUoKSxyKS50d2VlbixpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpaWYoKGE9bltpXSkubmFtZT09PWUpcmV0dXJuIGEudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9yRGU6bkRlKShyLGUsdCkpfWZ1bmN0aW9uIGNTKGUsdCxyKXt2YXIgbj1lLl9pZDtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9SmEodGhpcyxuKTsoaS52YWx1ZXx8KGkudmFsdWU9e30pKVt0XT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGkpe3JldHVybiBvbyhpLG4pLnZhbHVlW3RdfX12YXIgREE9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBuRihlLHQpe3ZhciByO3JldHVybih0eXBlb2YgdD09Im51bWJlciI/SWM6dCBpbnN0YW5jZW9mIHFnP1d6OihyPXFnKHQpKT8odD1yLFd6KTpVbnQpKGUsdCl9dmFyIHRpdD1NKCgpPT57T250KCk7Q0EoKX0pO2Z1bmN0aW9uIGlEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gb0RlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gYURlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdldEF0dHJpYnV0ZShlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIHNEZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gbERlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpLGw7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKTooYT10aGlzLmdldEF0dHJpYnV0ZShlKSxsPXMrIiIsYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpKX19ZnVuY3Rpb24gY0RlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGEscz1yKHRoaXMpLGw7cmV0dXJuIHM9PW51bGw/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6KGE9dGhpcy5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpLGw9cysiIixhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSkpfX1mdW5jdGlvbiBZWXQoZSx0KXt2YXIgcj1oZChlKSxuPXI9PT0idHJhbnNmb3JtIj9ZbnQ6bkY7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KHIubG9jYWw/Y0RlOmxEZSkocixuLGNTKHRoaXMsImF0dHIuIitlLHQpKTp0PT1udWxsPyhyLmxvY2FsP29EZTppRGUpKHIpOihyLmxvY2FsP3NEZTphRGUpKHIsbix0KSl9dmFyIGpZdD1NKCgpPT57Q0EoKTtJcygpO0RBKCk7dGl0KCl9KTtmdW5jdGlvbiB1RGUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGhEZShlLHQpe3JldHVybiBmdW5jdGlvbihyKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0LmNhbGwodGhpcyxyKSl9fWZ1bmN0aW9uIGZEZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJmhEZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gcERlKGUsdCl7dmFyIHIsbjtmdW5jdGlvbiBpKCl7dmFyIG89dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG8hPT1uJiYocj0obj1vKSYmdURlKGUsbykpLHJ9cmV0dXJuIGkuX3ZhbHVlPXQsaX1mdW5jdGlvbiBYWXQoZSx0KXt2YXIgcj0iYXR0ci4iK2U7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihyPXRoaXMudHdlZW4ocikpJiZyLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKHIsbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3ZhciBuPWhkKGUpO3JldHVybiB0aGlzLnR3ZWVuKHIsKG4ubG9jYWw/ZkRlOnBEZSkobix0KSl9dmFyICRZdD1NKCgpPT57SXMoKX0pO2Z1bmN0aW9uIGREZShlLHQpe3JldHVybiBmdW5jdGlvbigpe05BKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBtRGUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe05BKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gS1l0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/ZERlOm1EZSkodCxlKSk6b28odGhpcy5ub2RlKCksdCkuZGVsYXl9dmFyIFpZdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGdEZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0phKHRoaXMsZSkuZHVyYXRpb249K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBfRGUoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0phKHRoaXMsZSkuZHVyYXRpb249dH19ZnVuY3Rpb24gSll0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/Z0RlOl9EZSkodCxlKSk6b28odGhpcy5ub2RlKCksdCkuZHVyYXRpb259dmFyIFFZdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIHlEZShlLHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtKYSh0aGlzLGUpLmVhc2U9dH19ZnVuY3Rpb24gdGp0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCh5RGUodCxlKSk6b28odGhpcy5ub2RlKCksdCkuZWFzZX12YXIgZWp0PU0oKCk9PntMcygpfSk7ZnVuY3Rpb24gcmp0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT14QShlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgZGEobix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBuanQ9TSgoKT0+e0lzKCk7ZGQoKX0pO2Z1bmN0aW9uIGlqdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgZGEoYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfXZhciBvanQ9TSgoKT0+e2RkKCl9KTtmdW5jdGlvbiB2RGUoZSl7cmV0dXJuKGUrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgcj10LmluZGV4T2YoIi4iKTtyZXR1cm4gcj49MCYmKHQ9dC5zbGljZSgwLHIpKSwhdHx8dD09PSJzdGFydCJ9KX1mdW5jdGlvbiB4RGUoZSx0LHIpe3ZhciBuLGksbz12RGUodCk/TkE6SmE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9byh0aGlzLGUpLHM9YS5vbjtzIT09biYmKGk9KG49cykuY29weSgpKS5vbih0LHIpLGEub249aX19ZnVuY3Rpb24gYWp0KGUsdCl7dmFyIHI9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vbyh0aGlzLm5vZGUoKSxyKS5vbi5vbihlKTp0aGlzLmVhY2goeERlKHIsZSx0KSl9dmFyIHNqdD1NKCgpPT57THMoKX0pO2Z1bmN0aW9uIGJEZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciByIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtyIT09ZSlyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19ZnVuY3Rpb24gbGp0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGJEZSh0aGlzLl9pZCkpfXZhciBjanQ9TSgoKT0+e30pO2Z1bmN0aW9uIHVqdChlKXt2YXIgdD10aGlzLl9uYW1lLHI9dGhpcy5faWQ7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPUMxKGUpKTtmb3IodmFyIG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz1uZXcgQXJyYXkoaSksYT0wO2E8aTsrK2EpZm9yKHZhciBzPW5bYV0sbD1zLmxlbmd0aCxjPW9bYV09bmV3IEFycmF5KGwpLHUsaCxmPTA7ZjxsOysrZikodT1zW2ZdKSYmKGg9ZS5jYWxsKHUsdS5fX2RhdGFfXyxmLHMpKSYmKCJfX2RhdGFfXyJpbiB1JiYoaC5fX2RhdGFfXz11Ll9fZGF0YV9fKSxjW2ZdPWgsR2coY1tmXSx0LHIsZixjLG9vKHUscikpKTtyZXR1cm4gbmV3IGRhKG8sdGhpcy5fcGFyZW50cyx0LHIpfXZhciBoanQ9TSgoKT0+e0lzKCk7ZGQoKTtMcygpfSk7ZnVuY3Rpb24gZmp0KGUpe3ZhciB0PXRoaXMuX25hbWUscj10aGlzLl9pZDt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dkEoZSkpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPVtdLGE9W10scz0wO3M8aTsrK3MpZm9yKHZhciBsPW5bc10sYz1sLmxlbmd0aCx1LGg9MDtoPGM7KytoKWlmKHU9bFtoXSl7Zm9yKHZhciBmPWUuY2FsbCh1LHUuX19kYXRhX18saCxsKSxwLGQ9b28odSxyKSxnPTAsXz1mLmxlbmd0aDtnPF87KytnKShwPWZbZ10pJiZHZyhwLHQscixnLGYsZCk7by5wdXNoKGYpLGEucHVzaCh1KX1yZXR1cm4gbmV3IGRhKG8sYSx0LHIpfXZhciBwanQ9TSgoKT0+e0lzKCk7ZGQoKTtMcygpfSk7ZnVuY3Rpb24gZGp0KCl7cmV0dXJuIG5ldyB3RGUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfXZhciB3RGUsbWp0PU0oKCk9PntJcygpO3dEZT1mZC5wcm90b3R5cGUuY29uc3RydWN0b3J9KTtmdW5jdGlvbiBTRGUoZSx0KXt2YXIgcixuLGk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89VWcodGhpcyxlKSxhPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFVnKHRoaXMsZSkpO3JldHVybiBvPT09YT9udWxsOm89PT1yJiZhPT09bj9pOmk9dChyPW8sbj1hKX19ZnVuY3Rpb24gZ2p0KGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSl9fWZ1bmN0aW9uIE1EZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9VWcodGhpcyxlKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIEVEZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPVVnKHRoaXMsZSkscz1yKHRoaXMpLGw9cysiIjtyZXR1cm4gcz09bnVsbCYmKGw9cz0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKSxVZyh0aGlzLGUpKSksYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpfX1mdW5jdGlvbiBURGUoZSx0KXt2YXIgcixuLGksbz0ic3R5bGUuIit0LGE9ImVuZC4iK28scztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1KYSh0aGlzLGUpLGM9bC5vbix1PWwudmFsdWVbb109PW51bGw/c3x8KHM9Z2p0KHQpKTp2b2lkIDA7KGMhPT1yfHxpIT09dSkmJihuPShyPWMpLmNvcHkoKSkub24oYSxpPXUpLGwub249bn19ZnVuY3Rpb24gX2p0KGUsdCxyKXt2YXIgbj0oZSs9IiIpPT0idHJhbnNmb3JtIj9XbnQ6bkY7cmV0dXJuIHQ9PW51bGw/dGhpcy5zdHlsZVR3ZWVuKGUsU0RlKGUsbikpLm9uKCJlbmQuc3R5bGUuIitlLGdqdChlKSk6dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dGhpcy5zdHlsZVR3ZWVuKGUsRURlKGUsbixjUyh0aGlzLCJzdHlsZS4iK2UsdCkpKS5lYWNoKFREZSh0aGlzLl9pZCxlKSk6dGhpcy5zdHlsZVR3ZWVuKGUsTURlKGUsbix0KSxyKS5vbigiZW5kLnN0eWxlLiIrZSxudWxsKX12YXIgeWp0PU0oKCk9PntDQSgpO0lzKCk7THMoKTtEQSgpO3RpdCgpfSk7ZnVuY3Rpb24gQ0RlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQuY2FsbCh0aGlzLG4pLHIpfX1mdW5jdGlvbiBBRGUoZSx0LHIpe3ZhciBuLGk7ZnVuY3Rpb24gbygpe3ZhciBhPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKG49KGk9YSkmJkNEZShlLGEscikpLG59cmV0dXJuIG8uX3ZhbHVlPXQsb31mdW5jdGlvbiB2anQoZSx0LHIpe3ZhciBuPSJzdHlsZS4iKyhlKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sQURlKGUsdCxyPT1udWxsPyIiOnIpKX12YXIgeGp0PU0oKCk9Pnt9KTtmdW5jdGlvbiBQRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiBJRGUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gYmp0KGUpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgZT09ImZ1bmN0aW9uIj9JRGUoY1ModGhpcywidGV4dCIsZSkpOlBEZShlPT1udWxsPyIiOmUrIiIpKX12YXIgd2p0PU0oKCk9PntEQSgpfSk7ZnVuY3Rpb24gTERlKGUpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PWUuY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBrRGUoZSl7dmFyIHQscjtmdW5jdGlvbiBuKCl7dmFyIGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGkhPT1yJiYodD0ocj1pKSYmTERlKGkpKSx0fXJldHVybiBuLl92YWx1ZT1lLG59ZnVuY3Rpb24gU2p0KGUpe3ZhciB0PSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKHQ9dGhpcy50d2Vlbih0KSkmJnQuX3ZhbHVlO2lmKGU9PW51bGwpcmV0dXJuIHRoaXMudHdlZW4odCxudWxsKTtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4odCxrRGUoZSkpfXZhciBNanQ9TSgoKT0+e30pO2Z1bmN0aW9uIEVqdCgpe2Zvcih2YXIgZT10aGlzLl9uYW1lLHQ9dGhpcy5faWQscj1pRigpLG49dGhpcy5fZ3JvdXBzLGk9bi5sZW5ndGgsbz0wO288aTsrK28pZm9yKHZhciBhPW5bb10scz1hLmxlbmd0aCxsLGM9MDtjPHM7KytjKWlmKGw9YVtjXSl7dmFyIHU9b28obCx0KTtHZyhsLGUscixjLGEse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IGRhKG4sdGhpcy5fcGFyZW50cyxlLHIpfXZhciBUanQ9TSgoKT0+e2RkKCk7THMoKX0pO2Z1bmN0aW9uIENqdCgpe3ZhciBlLHQscj10aGlzLG49ci5faWQsaT1yLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxhKXt2YXIgcz17dmFsdWU6YX0sbD17dmFsdWU6ZnVuY3Rpb24oKXstLWk9PT0wJiZvKCl9fTtyLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1KYSh0aGlzLG4pLHU9Yy5vbjt1IT09ZSYmKHQ9KGU9dSkuY29weSgpLHQuXy5jYW5jZWwucHVzaChzKSx0Ll8uaW50ZXJydXB0LnB1c2gocyksdC5fLmVuZC5wdXNoKGwpKSxjLm9uPXR9KX0pfXZhciBBanQ9TSgoKT0+e0xzKCl9KTtmdW5jdGlvbiBkYShlLHQscixuKXt0aGlzLl9ncm91cHM9ZSx0aGlzLl9wYXJlbnRzPXQsdGhpcy5fbmFtZT1yLHRoaXMuX2lkPW59ZnVuY3Rpb24gZWl0KGUpe3JldHVybiBmZCgpLnRyYW5zaXRpb24oZSl9ZnVuY3Rpb24gaUYoKXtyZXR1cm4rK1JEZX12YXIgUkRlLHVTLGRkPU0oKCk9PntJcygpO2pZdCgpOyRZdCgpO1pZdCgpO1FZdCgpO2VqdCgpO25qdCgpO29qdCgpO3NqdCgpO2NqdCgpO2hqdCgpO3BqdCgpO21qdCgpO3lqdCgpO3hqdCgpO3dqdCgpO01qdCgpO1RqdCgpO0RBKCk7QWp0KCk7UkRlPTA7dVM9ZmQucHJvdG90eXBlO2RhLnByb3RvdHlwZT1laXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkYSxzZWxlY3Q6dWp0LHNlbGVjdEFsbDpmanQsZmlsdGVyOnJqdCxtZXJnZTppanQsc2VsZWN0aW9uOmRqdCx0cmFuc2l0aW9uOkVqdCxjYWxsOnVTLmNhbGwsbm9kZXM6dVMubm9kZXMsbm9kZTp1Uy5ub2RlLHNpemU6dVMuc2l6ZSxlbXB0eTp1Uy5lbXB0eSxlYWNoOnVTLmVhY2gsb246YWp0LGF0dHI6WVl0LGF0dHJUd2VlbjpYWXQsc3R5bGU6X2p0LHN0eWxlVHdlZW46dmp0LHRleHQ6Ymp0LHRleHRUd2VlbjpTanQscmVtb3ZlOmxqdCx0d2VlbjpXWXQsZGVsYXk6S1l0LGR1cmF0aW9uOkpZdCxlYXNlOnRqdCxlbmQ6Q2p0fX0pO2Z1bmN0aW9uIE5EZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiByaXQudGltZT1sUygpLHJpdDtyZXR1cm4gcn1mdW5jdGlvbiBQanQoZSl7dmFyIHQscjtlIGluc3RhbmNlb2YgZGE/KHQ9ZS5faWQsZT1lLl9uYW1lKToodD1pRigpLChyPXJpdCkudGltZT1sUygpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkdnKGwsZSx0LGMsYSxyfHxORGUobCx0KSk7cmV0dXJuIG5ldyBkYShuLHRoaXMuX3BhcmVudHMsZSx0KX12YXIgcml0LElqdD1NKCgpPT57ZGQoKTtMcygpO0lfKCk7Wm50KCk7cml0PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTp4c319KTt2YXIgTGp0PU0oKCk9PntJcygpO0dZdCgpO0lqdCgpO2ZkLnByb3RvdHlwZS5pbnRlcnJ1cHQ9cVl0O2ZkLnByb3RvdHlwZS50cmFuc2l0aW9uPVBqdH0pO3ZhciBranQ9TSgoKT0+e2RkKCk7THMoKX0pO3ZhciBSanQ9TSgoKT0+e0xqdCgpO2RkKCk7a2p0KCk7UW50KCl9KTtmdW5jdGlvbiBPQShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIE5qdD1NKCgpPT57fSk7ZnVuY3Rpb24gbml0KGUsdCxyKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMudHJhbnNmb3JtPXJ9dmFyIERqdD1NKCgpPT57fSk7ZnVuY3Rpb24gUGYoZSx0LHIpe3RoaXMuaz1lLHRoaXMueD10LHRoaXMueT1yfWZ1bmN0aW9uIG9GKGUpe3JldHVybiBlLl9fem9vbXx8aFN9dmFyIGhTLGlpdD1NKCgpPT57UGYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQZixzY2FsZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTE/dGhpczpuZXcgUGYodGhpcy5rKmUsdGhpcy54LHRoaXMueSl9LHRyYW5zbGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPT09MCZ0PT09MD90aGlzOm5ldyBQZih0aGlzLmssdGhpcy54K3RoaXMuayplLHRoaXMueSt0aGlzLmsqdCl9LGFwcGx5OmZ1bmN0aW9uKGUpe3JldHVybltlWzBdKnRoaXMuayt0aGlzLngsZVsxXSp0aGlzLmsrdGhpcy55XX0sYXBwbHlYOmZ1bmN0aW9uKGUpe3JldHVybiBlKnRoaXMuayt0aGlzLnh9LGFwcGx5WTpmdW5jdGlvbihlKXtyZXR1cm4gZSp0aGlzLmsrdGhpcy55fSxpbnZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuWyhlWzBdLXRoaXMueCkvdGhpcy5rLChlWzFdLXRoaXMueSkvdGhpcy5rXX0saW52ZXJ0WDpmdW5jdGlvbihlKXtyZXR1cm4oZS10aGlzLngpL3RoaXMua30saW52ZXJ0WTpmdW5jdGlvbihlKXtyZXR1cm4oZS10aGlzLnkpL3RoaXMua30scmVzY2FsZVg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29weSgpLmRvbWFpbihlLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCx0aGlzKS5tYXAoZS5pbnZlcnQsZSkpfSxyZXNjYWxlWTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jb3B5KCkuZG9tYWluKGUucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRZLHRoaXMpLm1hcChlLmludmVydCxlKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuInRyYW5zbGF0ZSgiK3RoaXMueCsiLCIrdGhpcy55KyIpIHNjYWxlKCIrdGhpcy5rKyIpIn19O2hTPW5ldyBQZigxLDAsMCk7b0YucHJvdG90eXBlPVBmLnByb3RvdHlwZX0pO2Z1bmN0aW9uIGFGKCl7WXIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gZlMoKXtZci5wcmV2ZW50RGVmYXVsdCgpLFlyLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfXZhciBPanQ9TSgoKT0+e0lzKCl9KTtmdW5jdGlvbiBERGUoKXtyZXR1cm4hWXIuYnV0dG9ufWZ1bmN0aW9uIE9EZSgpe3ZhciBlPXRoaXMsdCxyO3JldHVybiBlIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oZT1lLm93bmVyU1ZHRWxlbWVudHx8ZSx0PWUud2lkdGguYmFzZVZhbC52YWx1ZSxyPWUuaGVpZ2h0LmJhc2VWYWwudmFsdWUpOih0PWUuY2xpZW50V2lkdGgscj1lLmNsaWVudEhlaWdodCksW1swLDBdLFt0LHJdXX1mdW5jdGlvbiB6anQoKXtyZXR1cm4gdGhpcy5fX3pvb218fGhTfWZ1bmN0aW9uIHpEZSgpe3JldHVybi1Zci5kZWx0YVkqKFlyLmRlbHRhTW9kZT8xMjA6MSkvNTAwfWZ1bmN0aW9uIEZEZSgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBCRGUoZSx0LHIpe3ZhciBuPWUuaW52ZXJ0WCh0WzBdWzBdKS1yWzBdWzBdLGk9ZS5pbnZlcnRYKHRbMV1bMF0pLXJbMV1bMF0sbz1lLmludmVydFkodFswXVsxXSktclswXVsxXSxhPWUuaW52ZXJ0WSh0WzFdWzFdKS1yWzFdWzFdO3JldHVybiBlLnRyYW5zbGF0ZShpPm4/KG4raSkvMjpNYXRoLm1pbigwLG4pfHxNYXRoLm1heCgwLGkpLGE+bz8obythKS8yOk1hdGgubWluKDAsbyl8fE1hdGgubWF4KDAsYSkpfWZ1bmN0aW9uIEZqdCgpe3ZhciBlPUREZSx0PU9EZSxyPUJEZSxuPXpEZSxpPUZEZSxvPVswLDEvMF0sYT1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxzPTI1MCxsPVhudCxjPVtdLHU9eUEoInN0YXJ0Iiwiem9vbSIsImVuZCIpLGgsZixwPTUwMCxkPTE1MCxnPTA7ZnVuY3Rpb24gXyhSKXtSLnByb3BlcnR5KCJfX3pvb20iLHpqdCkub24oIndoZWVsLnpvb20iLGspLm9uKCJtb3VzZWRvd24uem9vbSIsTykub24oImRibGNsaWNrLnpvb20iLEQpLmZpbHRlcihpKS5vbigidG91Y2hzdGFydC56b29tIixCKS5vbigidG91Y2htb3ZlLnpvb20iLEkpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLEwpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1fLnRyYW5zZm9ybT1mdW5jdGlvbihSLEYpe3ZhciB6PVIuc2VsZWN0aW9uP1Iuc2VsZWN0aW9uKCk6Ujt6LnByb3BlcnR5KCJfX3pvb20iLHpqdCksUiE9PXo/UyhSLEYpOnouaW50ZXJydXB0KCkuZWFjaChmdW5jdGlvbigpe0ModGhpcyxhcmd1bWVudHMpLnN0YXJ0KCkuem9vbShudWxsLHR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkYpLmVuZCgpfSl9LF8uc2NhbGVCeT1mdW5jdGlvbihSLEYpe18uc2NhbGVUbyhSLGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5fX3pvb20uayxVPXR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkodGhpcyxhcmd1bWVudHMpOkY7cmV0dXJuIHoqVX0pfSxfLnNjYWxlVG89ZnVuY3Rpb24oUixGKXtfLnRyYW5zZm9ybShSLGZ1bmN0aW9uKCl7dmFyIHo9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksVT10aGlzLl9fem9vbSxXPWIoeiksWj1VLmludmVydChXKSxydD10eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGO3JldHVybiByKHgoeShVLHJ0KSxXLFopLHosYSl9KX0sXy50cmFuc2xhdGVCeT1mdW5jdGlvbihSLEYseil7Xy50cmFuc2Zvcm0oUixmdW5jdGlvbigpe3JldHVybiByKHRoaXMuX196b29tLnRyYW5zbGF0ZSh0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGLHR5cGVvZiB6PT0iZnVuY3Rpb24iP3ouYXBwbHkodGhpcyxhcmd1bWVudHMpOnopLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEpfSl9LF8udHJhbnNsYXRlVG89ZnVuY3Rpb24oUixGLHope18udHJhbnNmb3JtKFIsZnVuY3Rpb24oKXt2YXIgVT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxXPXRoaXMuX196b29tLFo9YihVKTtyZXR1cm4gcihoUy50cmFuc2xhdGUoWlswXSxaWzFdKS5zY2FsZShXLmspLnRyYW5zbGF0ZSh0eXBlb2YgRj09ImZ1bmN0aW9uIj8tRi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LUYsdHlwZW9mIHo9PSJmdW5jdGlvbiI/LXouYXBwbHkodGhpcyxhcmd1bWVudHMpOi16KSxVLGEpfSl9O2Z1bmN0aW9uIHkoUixGKXtyZXR1cm4gRj1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sRikpLEY9PT1SLms/UjpuZXcgUGYoRixSLngsUi55KX1mdW5jdGlvbiB4KFIsRix6KXt2YXIgVT1GWzBdLXpbMF0qUi5rLFc9RlsxXS16WzFdKlIuaztyZXR1cm4gVT09PVIueCYmVz09PVIueT9SOm5ldyBQZihSLmssVSxXKX1mdW5jdGlvbiBiKFIpe3JldHVyblsoK1JbMF1bMF0rICtSWzFdWzBdKS8yLCgrUlswXVsxXSsgK1JbMV1bMV0pLzJdfWZ1bmN0aW9uIFMoUixGLHope1Iub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Qyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXtDKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciBVPXRoaXMsVz1hcmd1bWVudHMsWj1DKFUsVykscnQ9dC5hcHBseShVLFcpLG90PXp8fGIocnQpLHN0PU1hdGgubWF4KHJ0WzFdWzBdLXJ0WzBdWzBdLHJ0WzFdWzFdLXJ0WzBdWzFdKSxTdD1VLl9fem9vbSxidD10eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KFUsVyk6RixNdD1sKFN0LmludmVydChvdCkuY29uY2F0KHN0L1N0LmspLGJ0LmludmVydChvdCkuY29uY2F0KHN0L2J0LmspKTtyZXR1cm4gZnVuY3Rpb24obHQpe2lmKGx0PT09MSlsdD1idDtlbHNle3ZhciBLdD1NdChsdCksX3Q9c3QvS3RbMl07bHQ9bmV3IFBmKF90LG90WzBdLUt0WzBdKl90LG90WzFdLUt0WzFdKl90KX1aLnpvb20obnVsbCxsdCl9fSl9ZnVuY3Rpb24gQyhSLEYpe2Zvcih2YXIgej0wLFU9Yy5sZW5ndGgsVzt6PFU7Kyt6KWlmKChXPWNbel0pLnRoYXQ9PT1SKXJldHVybiBXO3JldHVybiBuZXcgUChSLEYpfWZ1bmN0aW9uIFAoUixGKXt0aGlzLnRoYXQ9Uix0aGlzLmFyZ3M9Rix0aGlzLmluZGV4PS0xLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9dC5hcHBseShSLEYpfVAucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybisrdGhpcy5hY3RpdmU9PT0xJiYodGhpcy5pbmRleD1jLnB1c2godGhpcyktMSx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oUixGKXtyZXR1cm4gdGhpcy5tb3VzZSYmUiE9PSJtb3VzZSImJih0aGlzLm1vdXNlWzFdPUYuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmUiE9PSJ0b3VjaCImJih0aGlzLnRvdWNoMFsxXT1GLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiZSIT09InRvdWNoIiYmKHRoaXMudG91Y2gxWzFdPUYuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhpcy50aGF0Ll9fem9vbT1GLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoYy5zcGxpY2UodGhpcy5pbmRleCwxKSx0aGlzLmluZGV4PS0xLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oUil7Q250KG5ldyBuaXQoXyxSLHRoaXMudGhhdC5fX3pvb20pLHUuYXBwbHksdSxbUix0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fTtmdW5jdGlvbiBrKCl7aWYoIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPXRoaXMuX196b29tLHo9TWF0aC5tYXgob1swXSxNYXRoLm1pbihvWzFdLEYuaypNYXRoLnBvdygyLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLFU9aVModGhpcyk7aWYoUi53aGVlbCkoUi5tb3VzZVswXVswXSE9PVVbMF18fFIubW91c2VbMF1bMV0hPT1VWzFdKSYmKFIubW91c2VbMV09Ri5pbnZlcnQoUi5tb3VzZVswXT1VKSksY2xlYXJUaW1lb3V0KFIud2hlZWwpO2Vsc2V7aWYoRi5rPT09eilyZXR1cm47Ui5tb3VzZT1bVSxGLmludmVydChVKV0sUDEodGhpcyksUi5zdGFydCgpfWZTKCksUi53aGVlbD1zZXRUaW1lb3V0KFcsZCksUi56b29tKCJtb3VzZSIscih4KHkoRix6KSxSLm1vdXNlWzBdLFIubW91c2VbMV0pLFIuZXh0ZW50LGEpKTtmdW5jdGlvbiBXKCl7Ui53aGVlbD1udWxsLFIuZW5kKCl9fWZ1bmN0aW9uIE8oKXtpZihmfHwhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBSPUModGhpcyxhcmd1bWVudHMpLEY9cGQoWXIudmlldykub24oIm1vdXNlbW92ZS56b29tIixaLCEwKS5vbigibW91c2V1cC56b29tIixydCwhMCksej1pUyh0aGlzKSxVPVlyLmNsaWVudFgsVz1Zci5jbGllbnRZO0xudChZci52aWV3KSxhRigpLFIubW91c2U9W3osdGhpcy5fX3pvb20uaW52ZXJ0KHopXSxQMSh0aGlzKSxSLnN0YXJ0KCk7ZnVuY3Rpb24gWigpe2lmKGZTKCksIVIubW92ZWQpe3ZhciBvdD1Zci5jbGllbnRYLVUsc3Q9WXIuY2xpZW50WS1XO1IubW92ZWQ9b3Qqb3Qrc3Qqc3Q+Z31SLnpvb20oIm1vdXNlIixyKHgoUi50aGF0Ll9fem9vbSxSLm1vdXNlWzBdPWlTKFIudGhhdCksUi5tb3VzZVsxXSksUi5leHRlbnQsYSkpfWZ1bmN0aW9uIHJ0KCl7Ri5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxrbnQoWXIudmlldyxSLm1vdmVkKSxmUygpLFIuZW5kKCl9fWZ1bmN0aW9uIEQoKXtpZighIWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUj10aGlzLl9fem9vbSxGPWlTKHRoaXMpLHo9Ui5pbnZlcnQoRiksVT1SLmsqKFlyLnNoaWZ0S2V5Py41OjIpLFc9cih4KHkoUixVKSxGLHopLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEpO2ZTKCkscz4wP3BkKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzKS5jYWxsKFMsVyxGKTpwZCh0aGlzKS5jYWxsKF8udHJhbnNmb3JtLFcpfX1mdW5jdGlvbiBCKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFI9Qyh0aGlzLGFyZ3VtZW50cyksRj1Zci5jaGFuZ2VkVG91Y2hlcyx6LFU9Ri5sZW5ndGgsVyxaLHJ0O2ZvcihhRigpLFc9MDtXPFU7KytXKVo9RltXXSxydD1Ceih0aGlzLEYsWi5pZGVudGlmaWVyKSxydD1bcnQsdGhpcy5fX3pvb20uaW52ZXJ0KHJ0KSxaLmlkZW50aWZpZXJdLFIudG91Y2gwP1IudG91Y2gxfHwoUi50b3VjaDE9cnQpOihSLnRvdWNoMD1ydCx6PSEwKTtpZihoJiYoaD1jbGVhclRpbWVvdXQoaCksIVIudG91Y2gxKSl7Ui5lbmQoKSxydD1wZCh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpLHJ0JiZydC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJufXomJihoPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtoPW51bGx9LHApLFAxKHRoaXMpLFIuc3RhcnQoKSl9fWZ1bmN0aW9uIEkoKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHo9Ri5sZW5ndGgsVSxXLFoscnQ7Zm9yKGZTKCksaCYmKGg9Y2xlYXJUaW1lb3V0KGgpKSxVPTA7VTx6OysrVSlXPUZbVV0sWj1Ceih0aGlzLEYsVy5pZGVudGlmaWVyKSxSLnRvdWNoMCYmUi50b3VjaDBbMl09PT1XLmlkZW50aWZpZXI/Ui50b3VjaDBbMF09WjpSLnRvdWNoMSYmUi50b3VjaDFbMl09PT1XLmlkZW50aWZpZXImJihSLnRvdWNoMVswXT1aKTtpZihXPVIudGhhdC5fX3pvb20sUi50b3VjaDEpe3ZhciBvdD1SLnRvdWNoMFswXSxzdD1SLnRvdWNoMFsxXSxTdD1SLnRvdWNoMVswXSxidD1SLnRvdWNoMVsxXSxNdD0oTXQ9U3RbMF0tb3RbMF0pKk10KyhNdD1TdFsxXS1vdFsxXSkqTXQsbHQ9KGx0PWJ0WzBdLXN0WzBdKSpsdCsobHQ9YnRbMV0tc3RbMV0pKmx0O1c9eShXLE1hdGguc3FydChNdC9sdCkpLFo9WyhvdFswXStTdFswXSkvMiwob3RbMV0rU3RbMV0pLzJdLHJ0PVsoc3RbMF0rYnRbMF0pLzIsKHN0WzFdK2J0WzFdKS8yXX1lbHNlIGlmKFIudG91Y2gwKVo9Ui50b3VjaDBbMF0scnQ9Ui50b3VjaDBbMV07ZWxzZSByZXR1cm47Ui56b29tKCJ0b3VjaCIscih4KFcsWixydCksUi5leHRlbnQsYSkpfWZ1bmN0aW9uIEwoKXt2YXIgUj1DKHRoaXMsYXJndW1lbnRzKSxGPVlyLmNoYW5nZWRUb3VjaGVzLHo9Ri5sZW5ndGgsVSxXO2ZvcihhRigpLGYmJmNsZWFyVGltZW91dChmKSxmPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmPW51bGx9LHApLFU9MDtVPHo7KytVKVc9RltVXSxSLnRvdWNoMCYmUi50b3VjaDBbMl09PT1XLmlkZW50aWZpZXI/ZGVsZXRlIFIudG91Y2gwOlIudG91Y2gxJiZSLnRvdWNoMVsyXT09PVcuaWRlbnRpZmllciYmZGVsZXRlIFIudG91Y2gxO1IudG91Y2gxJiYhUi50b3VjaDAmJihSLnRvdWNoMD1SLnRvdWNoMSxkZWxldGUgUi50b3VjaDEpLFIudG91Y2gwP1IudG91Y2gwWzFdPXRoaXMuX196b29tLmludmVydChSLnRvdWNoMFswXSk6Ui5lbmQoKX1yZXR1cm4gXy53aGVlbERlbHRhPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6T0EoK1IpLF8pOm59LF8uZmlsdGVyPWZ1bmN0aW9uKFIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1I6T0EoISFSKSxfKTplfSxfLnRvdWNoYWJsZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgUj09ImZ1bmN0aW9uIj9SOk9BKCEhUiksXyk6aX0sXy5leHRlbnQ9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIFI9PSJmdW5jdGlvbiI/UjpPQShbWytSWzBdWzBdLCtSWzBdWzFdXSxbK1JbMV1bMF0sK1JbMV1bMV1dXSksXyk6dH0sXy5zY2FsZUV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ob1swXT0rUlswXSxvWzFdPStSWzFdLF8pOltvWzBdLG9bMV1dfSxfLnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYVswXVswXT0rUlswXVswXSxhWzFdWzBdPStSWzFdWzBdLGFbMF1bMV09K1JbMF1bMV0sYVsxXVsxXT0rUlsxXVsxXSxfKTpbW2FbMF1bMF0sYVswXVsxXV0sW2FbMV1bMF0sYVsxXVsxXV1dfSxfLmNvbnN0cmFpbj1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1SLF8pOnJ9LF8uZHVyYXRpb249ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K1IsXyk6c30sXy5pbnRlcnBvbGF0ZT1mdW5jdGlvbihSKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1SLF8pOmx9LF8ub249ZnVuY3Rpb24oKXt2YXIgUj11Lm9uLmFwcGx5KHUsYXJndW1lbnRzKTtyZXR1cm4gUj09PXU/XzpSfSxfLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oUil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9KFI9K1IpKlIsXyk6TWF0aC5zcXJ0KGcpfSxffXZhciBCanQ9TSgoKT0+e2dudCgpO2lZdCgpO0NBKCk7SXMoKTtSanQoKTtOanQoKTtEanQoKTtpaXQoKTtPanQoKX0pO3ZhciBIanQ9TSgoKT0+e0JqdCgpO2lpdCgpfSk7dmFyIE1yPXt9O0tzKE1yLHthY3RpdmU6KCk9PnVHdCxhcmM6KCk9PmhGdCxhcmVhOigpPT54NyxhcmVhUmFkaWFsOigpPT5SZXQsYXNjZW5kaW5nOigpPT5fYyxheGlzQm90dG9tOigpPT5ZTXQsYXhpc0xlZnQ6KCk9PmpNdCxheGlzUmlnaHQ6KCk9PldNdCxheGlzVG9wOigpPT5HTXQsYmlzZWN0OigpPT5hUixiaXNlY3RMZWZ0OigpPT5yTXQsYmlzZWN0UmlnaHQ6KCk9PmIkLGJpc2VjdG9yOigpPT5vUixicnVzaDooKT0+cEN0LGJydXNoU2VsZWN0aW9uOigpPT51Q3QsYnJ1c2hYOigpPT5oQ3QsYnJ1c2hZOigpPT5mQ3QsY2hvcmQ6KCk9PnpDdCxjbGllbnRQb2ludDooKT0+RGcsY2x1c3RlcjooKT0+Qkx0LGNvbG9yOigpPT54MixjcmVhdGU6KCk9PiR6dCxjcmVhdG9yOigpPT5OZyxjcm9zczooKT0+aU10LGNzdjooKT0+bE50LGNzdkZvcm1hdDooKT0+cFB0LGNzdkZvcm1hdFJvd3M6KCk9PmRQdCxjc3ZQYXJzZTooKT0+aFB0LGNzdlBhcnNlUm93czooKT0+ZlB0LGN1YmVoZWxpeDooKT0+Y04sY3VydmVCYXNpczooKT0+TEZ0LGN1cnZlQmFzaXNDbG9zZWQ6KCk9PlJGdCxjdXJ2ZUJhc2lzT3BlbjooKT0+T0Z0LGN1cnZlQnVuZGxlOigpPT5CRnQsY3VydmVDYXJkaW5hbDooKT0+VkZ0LGN1cnZlQ2FyZGluYWxDbG9zZWQ6KCk9PlVGdCxjdXJ2ZUNhcmRpbmFsT3BlbjooKT0+cUZ0LGN1cnZlQ2F0bXVsbFJvbTooKT0+V0Z0LGN1cnZlQ2F0bXVsbFJvbUNsb3NlZDooKT0+akZ0LGN1cnZlQ2F0bXVsbFJvbU9wZW46KCk9PktGdCxjdXJ2ZUxpbmVhcjooKT0+RmcsY3VydmVMaW5lYXJDbG9zZWQ6KCk9PlFGdCxjdXJ2ZU1vbm90b25lWDooKT0+YUJ0LGN1cnZlTW9ub3RvbmVZOigpPT5zQnQsY3VydmVOYXR1cmFsOigpPT5oQnQsY3VydmVTdGVwOigpPT5wQnQsY3VydmVTdGVwQWZ0ZXI6KCk9Pm1CdCxjdXJ2ZVN0ZXBCZWZvcmU6KCk9PmRCdCxjdXN0b21FdmVudDooKT0+cXp0LGRlc2NlbmRpbmc6KCk9PmFNdCxkZXZpYXRpb246KCk9PmxSLGRpc3BhdGNoOigpPT5DQXQsZHJhZzooKT0+YVB0LGRyYWdEaXNhYmxlOigpPT5NTixkcmFnRW5hYmxlOigpPT5FTixkc3ZGb3JtYXQ6KCk9PncyLGVhc2VCYWNrOigpPT56WixlYXNlQmFja0luOigpPT5qUHQsZWFzZUJhY2tJbk91dDooKT0+elosZWFzZUJhY2tPdXQ6KCk9PlhQdCxlYXNlQm91bmNlOigpPT5TMixlYXNlQm91bmNlSW46KCk9PkdQdCxlYXNlQm91bmNlSW5PdXQ6KCk9PldQdCxlYXNlQm91bmNlT3V0OigpPT5TMixlYXNlQ2lyY2xlOigpPT5OWixlYXNlQ2lyY2xlSW46KCk9PlZQdCxlYXNlQ2lyY2xlSW5PdXQ6KCk9Pk5aLGVhc2VDaXJjbGVPdXQ6KCk9PlVQdCxlYXNlQ3ViaWM6KCk9PlBaLGVhc2VDdWJpY0luOigpPT5DUHQsZWFzZUN1YmljSW5PdXQ6KCk9PlBaLGVhc2VDdWJpY091dDooKT0+QVB0LGVhc2VFbGFzdGljOigpPT5IWixlYXNlRWxhc3RpY0luOigpPT5LUHQsZWFzZUVsYXN0aWNJbk91dDooKT0+WlB0LGVhc2VFbGFzdGljT3V0OigpPT5IWixlYXNlRXhwOigpPT5SWixlYXNlRXhwSW46KCk9PkZQdCxlYXNlRXhwSW5PdXQ6KCk9PlJaLGVhc2VFeHBPdXQ6KCk9PkJQdCxlYXNlTGluZWFyOigpPT53UHQsZWFzZVBvbHk6KCk9PkxaLGVhc2VQb2x5SW46KCk9PklQdCxlYXNlUG9seUluT3V0OigpPT5MWixlYXNlUG9seU91dDooKT0+TFB0LGVhc2VRdWFkOigpPT5BWixlYXNlUXVhZEluOigpPT5NUHQsZWFzZVF1YWRJbk91dDooKT0+QVosZWFzZVF1YWRPdXQ6KCk9PkVQdCxlYXNlU2luOigpPT5rWixlYXNlU2luSW46KCk9PkRQdCxlYXNlU2luSW5PdXQ6KCk9PmtaLGVhc2VTaW5PdXQ6KCk9Pk9QdCxlbnRyaWVzOigpPT5hQXQsZXZlbnQ6KCk9PlB1LGV4dGVudDooKT0+Y1IsZm9yY2VDZW50ZXI6KCk9PnQ2dCxmb3JjZUNvbGxpZGU6KCk9PlI2dCxmb3JjZUxpbms6KCk9PlU2dCxmb3JjZU1hbnlCb2R5OigpPT5uSXQsZm9yY2VSYWRpYWw6KCk9Pm9JdCxmb3JjZVNpbXVsYXRpb246KCk9PnJJdCxmb3JjZVg6KCk9PnNJdCxmb3JjZVk6KCk9PmNJdCxmb3JtYXQ6KCk9Pm5KLGZvcm1hdERlZmF1bHRMb2NhbGU6KCk9PkdOLGZvcm1hdExvY2FsZTooKT0+VU4sZm9ybWF0UHJlZml4OigpPT5pSixmb3JtYXRTcGVjaWZpZXI6KCk9Pkx5LGdlb0FsYmVyczooKT0+TkQsZ2VvQWxiZXJzVXNhOigpPT5kTHQsZ2VvQXJlYTooKT0+ekl0LGdlb0F6aW11dGhhbEVxdWFsQXJlYTooKT0+Z0x0LGdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdzooKT0+T0QsZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ6KCk9PnlMdCxnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzooKT0+ekQsZ2VvQm91bmRzOigpPT5XSXQsZ2VvQ2VudHJvaWQ6KCk9PkpJdCxnZW9DaXJjbGU6KCk9Pm85dCxnZW9DbGlwQW50aW1lcmlkaWFuOigpPT5PVCxnZW9DbGlwQ2lyY2xlOigpPT5nRCxnZW9DbGlwRXh0ZW50OigpPT5BOXQsZ2VvQ2xpcFJlY3RhbmdsZTooKT0+UXAsZ2VvQ29uaWNDb25mb3JtYWw6KCk9PmJMdCxnZW9Db25pY0NvbmZvcm1hbFJhdzooKT0+cFEsZ2VvQ29uaWNFcXVhbEFyZWE6KCk9PlV5LGdlb0NvbmljRXF1YWxBcmVhUmF3OigpPT51USxnZW9Db25pY0VxdWlkaXN0YW50OigpPT5NTHQsZ2VvQ29uaWNFcXVpZGlzdGFudFJhdzooKT0+bVEsZ2VvQ29udGFpbnM6KCk9Pk85dCxnZW9EaXN0YW5jZTooKT0+QnksZ2VvRXF1aXJlY3Rhbmd1bGFyOigpPT5TTHQsZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3OigpPT5HeSxnZW9Hbm9tb25pYzooKT0+VEx0LGdlb0dub21vbmljUmF3OigpPT5IRCxnZW9HcmF0aWN1bGU6KCk9PndELGdlb0dyYXRpY3VsZTEwOigpPT5IOXQsZ2VvSWRlbnRpdHk6KCk9PkFMdCxnZW9JbnRlcnBvbGF0ZTooKT0+VTl0LGdlb0xlbmd0aDooKT0+eEQsZ2VvTWVyY2F0b3I6KCk9PnhMdCxnZW9NZXJjYXRvclJhdzooKT0+cXksZ2VvTmF0dXJhbEVhcnRoMTooKT0+SUx0LGdlb05hdHVyYWxFYXJ0aDFSYXc6KCk9PlVELGdlb09ydGhvZ3JhcGhpYzooKT0+a0x0LGdlb09ydGhvZ3JhcGhpY1JhdzooKT0+cUQsZ2VvUGF0aDooKT0+c0x0LGdlb1Byb2plY3Rpb246KCk9PmVvLGdlb1Byb2plY3Rpb25NdXRhdG9yOigpPT5XVCxnZW9Sb3RhdGlvbjooKT0+c0QsZ2VvU3RlcmVvZ3JhcGhpYzooKT0+Tkx0LGdlb1N0ZXJlb2dyYXBoaWNSYXc6KCk9PkdELGdlb1N0cmVhbTooKT0+TW8sZ2VvVHJhbnNmb3JtOigpPT5jTHQsZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yOigpPT5PTHQsZ2VvVHJhbnN2ZXJzZU1lcmNhdG9yUmF3OigpPT5XRCxoY2w6KCk9Pm9aLGhpZXJhcmNoeTooKT0+WVQsaGlzdG9ncmFtOigpPT5tTXQsaHNsOigpPT5KSyxodG1sOigpPT50TnQsaW50ZXJwb2xhdGU6KCk9PloyLGludGVycG9sYXRlQXJyYXk6KCk9PmhPLGludGVycG9sYXRlQmFzaXM6KCk9PmxPLGludGVycG9sYXRlQmFzaXNDbG9zZWQ6KCk9PnVPLGludGVycG9sYXRlQ29vbDooKT0+eDd0LGludGVycG9sYXRlQ3ViZWhlbGl4OigpPT5GOHQsaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0OigpPT5fN3QsaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5COHQsaW50ZXJwb2xhdGVEYXRlOigpPT5wTyxpbnRlcnBvbGF0ZUhjbDooKT0+Tjh0LGludGVycG9sYXRlSGNsTG9uZzooKT0+RDh0LGludGVycG9sYXRlSHNsOigpPT5QOHQsaW50ZXJwb2xhdGVIc2xMb25nOigpPT5JOHQsaW50ZXJwb2xhdGVJbmZlcm5vOigpPT5FN3QsaW50ZXJwb2xhdGVMYWI6KCk9PktRLGludGVycG9sYXRlTWFnbWE6KCk9Pk03dCxpbnRlcnBvbGF0ZU51bWJlcjooKT0+QXMsaW50ZXJwb2xhdGVPYmplY3Q6KCk9PmRPLGludGVycG9sYXRlUGxhc21hOigpPT5UN3QsaW50ZXJwb2xhdGVSYWluYm93OigpPT5iN3QsaW50ZXJwb2xhdGVSZ2I6KCk9PnRDLGludGVycG9sYXRlUmdiQmFzaXM6KCk9PnU4dCxpbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkOigpPT5oOHQsaW50ZXJwb2xhdGVSb3VuZDooKT0+Zjh0LGludGVycG9sYXRlU3RyaW5nOigpPT5tTyxpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzczooKT0+Yjh0LGludGVycG9sYXRlVHJhbnNmb3JtU3ZnOigpPT53OHQsaW50ZXJwb2xhdGVWaXJpZGlzOigpPT5TN3QsaW50ZXJwb2xhdGVXYXJtOigpPT52N3QsaW50ZXJwb2xhdGVab29tOigpPT5UOHQsaW50ZXJydXB0OigpPT5weixpbnRlcnZhbDooKT0+eFZ0LGlzb0Zvcm1hdDooKT0+aFZ0LGlzb1BhcnNlOigpPT5mVnQsanNvbjooKT0+ck50LGtleXM6KCk9PnJBdCxsYWI6KCk9PnNOLGxpbmU6KCk9PlJ3LGxpbmVSYWRpYWw6KCk9PkxldCxsaW5rSG9yaXpvbnRhbDooKT0+d0Z0LGxpbmtSYWRpYWw6KCk9Pk1GdCxsaW5rVmVydGljYWw6KCk9PlNGdCxsb2NhbDooKT0+ZDcsbWFwOigpPT5ieSxtYXRjaGVyOigpPT5jNyxtYXg6KCk9PmJNdCxtZWFuOigpPT5TTXQsbWVkaWFuOigpPT5FTXQsbWVyZ2U6KCk9PkNNdCxtaW46KCk9PmRSLG1vdXNlOigpPT5KenQsbmFtZXNwYWNlOigpPT5NdyxuYW1lc3BhY2VzOigpPT5NQyxuZXN0OigpPT5aQ3Qsbm93OigpPT5ZdyxwYWNrOigpPT5ia3QscGFja0VuY2xvc2U6KCk9PlhELHBhY2tTaWJsaW5nczooKT0+X2t0LHBhaXJzOigpPT5uTXQscGFydGl0aW9uOigpPT5Ta3QscGF0aDooKT0+Vzh0LHBlcm11dGU6KCk9PlBNdCxwaWU6KCk9PnlGdCxwb2ludFJhZGlhbDooKT0+ZjEscG9seWdvbkFyZWE6KCk9Plg4dCxwb2x5Z29uQ2VudHJvaWQ6KCk9Pks4dCxwb2x5Z29uQ29udGFpbnM6KCk9Pm5SdCxwb2x5Z29uSHVsbDooKT0+ZVJ0LHBvbHlnb25MZW5ndGg6KCk9Pm9SdCxwcmVjaXNpb25GaXhlZDooKT0+U0l0LHByZWNpc2lvblByZWZpeDooKT0+RUl0LHByZWNpc2lvblJvdW5kOigpPT5DSXQscXVhZHRyZWU6KCk9PnZPLHF1YW50aWxlOigpPT5keSxxdWFudGl6ZTooKT0+Vjh0LHF1ZXVlOigpPT5iTyxyYWRpYWxBcmVhOigpPT5SZXQscmFkaWFsTGluZTooKT0+TGV0LHJhbmRvbUJhdGVzOigpPT4kUnQscmFuZG9tRXhwb25lbnRpYWw6KCk9PlpSdCxyYW5kb21JcndpbkhhbGw6KCk9PlNPLHJhbmRvbUxvZ05vcm1hbDooKT0+alJ0LHJhbmRvbU5vcm1hbDooKT0+d08scmFuZG9tVW5pZm9ybTooKT0+V1J0LHJhbmdlOigpPT51UixyZXF1ZXN0OigpPT5KMixyZ2I6KCk9PlpLLHJpYmJvbjooKT0+V0N0LHNjYWxlQmFuZDooKT0+bEMsc2NhbGVJZGVudGl0eTooKT0+VU8sc2NhbGVJbXBsaWNpdDooKT0+TE8sc2NhbGVMaW5lYXI6KCk9PlZPLHNjYWxlTG9nOigpPT5HTyxzY2FsZU9yZGluYWw6KCk9Pm53LHNjYWxlUG9pbnQ6KCk9PlZOdCxzY2FsZVBvdzooKT0+Z0Msc2NhbGVRdWFudGlsZTooKT0+V08sc2NhbGVRdWFudGl6ZTooKT0+WU8sc2NhbGVTZXF1ZW50aWFsOigpPT5uNyxzY2FsZVNxcnQ6KCk9PmVPdCxzY2FsZVRocmVzaG9sZDooKT0+ak8sc2NhbGVUaW1lOigpPT5hN3Qsc2NhbGVVdGM6KCk9PnM3dCxzY2FuOigpPT5MTXQsc2NoZW1lQ2F0ZWdvcnkxMDooKT0+Yzd0LHNjaGVtZUNhdGVnb3J5MjA6KCk9Pm03dCxzY2hlbWVDYXRlZ29yeTIwYjooKT0+aDd0LHNjaGVtZUNhdGVnb3J5MjBjOigpPT5wN3Qsc2VsZWN0OigpPT5wNyxzZWxlY3RBbGw6KCk9PnRGdCxzZWxlY3Rpb246KCk9Plh6dCxzZWxlY3RvcjooKT0+RXcsc2VsZWN0b3JBbGw6KCk9Pmw3LHNldDooKT0+dEF0LHNodWZmbGU6KCk9PlJNdCxzdGFjazooKT0+X0J0LHN0YWNrT2Zmc2V0RGl2ZXJnaW5nOigpPT5iQnQsc3RhY2tPZmZzZXRFeHBhbmQ6KCk9PnZCdCxzdGFja09mZnNldE5vbmU6KCk9PlJ1LHN0YWNrT2Zmc2V0U2lsaG91ZXR0ZTooKT0+U0J0LHN0YWNrT2Zmc2V0V2lnZ2xlOigpPT5FQnQsc3RhY2tPcmRlckFzY2VuZGluZzooKT0+Tjcsc3RhY2tPcmRlckRlc2NlbmRpbmc6KCk9PkNCdCxzdGFja09yZGVySW5zaWRlT3V0OigpPT5QQnQsc3RhY2tPcmRlck5vbmU6KCk9Pk51LHN0YWNrT3JkZXJSZXZlcnNlOigpPT5MQnQsc3RyYXRpZnk6KCk9PkNrdCxzdHlsZTooKT0+eWV0LHN1bTooKT0+RE10LHN5bWJvbDooKT0+UEZ0LHN5bWJvbENpcmNsZTooKT0+a0Msc3ltYm9sQ3Jvc3M6KCk9Pnc3LHN5bWJvbERpYW1vbmQ6KCk9PlM3LHN5bWJvbFNxdWFyZTooKT0+RTcsc3ltYm9sU3RhcjooKT0+TTcsc3ltYm9sVHJpYW5nbGU6KCk9PlQ3LHN5bWJvbFd5ZTooKT0+Qzcsc3ltYm9sczooKT0+QUZ0LHRleHQ6KCk9PmlOdCx0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzOigpPT5fTXQsdGhyZXNob2xkU2NvdHQ6KCk9PnZNdCx0aHJlc2hvbGRTdHVyZ2VzOigpPT5mUix0aWNrSW5jcmVtZW50OigpPT5SJCx0aWNrU3RlcDooKT0+aFIsdGlja3M6KCk9PmRNdCx0aW1lRGF5OigpPT5ZQnQsdGltZURheXM6KCk9PmpCdCx0aW1lRm9ybWF0OigpPT5TcnQsdGltZUZvcm1hdERlZmF1bHRMb2NhbGU6KCk9Pmo3LHRpbWVGb3JtYXRMb2NhbGU6KCk9PldDLHRpbWVGcmlkYXk6KCk9PmFydCx0aW1lRnJpZGF5czooKT0+UUJ0LHRpbWVIb3VyOigpPT5VQnQsdGltZUhvdXJzOigpPT5xQnQsdGltZUludGVydmFsOigpPT5Tcix0aW1lTWlsbGlzZWNvbmQ6KCk9PkpldCx0aW1lTWlsbGlzZWNvbmRzOigpPT5RZXQsdGltZU1pbnV0ZTooKT0+RkJ0LHRpbWVNaW51dGVzOigpPT5CQnQsdGltZU1vbmRheTooKT0+cnJ0LHRpbWVNb25kYXlzOigpPT4kQnQsdGltZU1vbnRoOigpPT5uSHQsdGltZU1vbnRoczooKT0+aUh0LHRpbWVQYXJzZTooKT0+TXJ0LHRpbWVTYXR1cmRheTooKT0+c3J0LHRpbWVTYXR1cmRheXM6KCk9PnRIdCx0aW1lU2Vjb25kOigpPT50cnQsdGltZVNlY29uZHM6KCk9PmVydCx0aW1lU3VuZGF5OigpPT5CNyx0aW1lU3VuZGF5czooKT0+bHJ0LHRpbWVUaHVyc2RheTooKT0+b3J0LHRpbWVUaHVyc2RheXM6KCk9PkpCdCx0aW1lVHVlc2RheTooKT0+bnJ0LHRpbWVUdWVzZGF5czooKT0+S0J0LHRpbWVXZWRuZXNkYXk6KCk9PmlydCx0aW1lV2VkbmVzZGF5czooKT0+WkJ0LHRpbWVXZWVrOigpPT5CNyx0aW1lV2Vla3M6KCk9PmxydCx0aW1lWWVhcjooKT0+YUh0LHRpbWVZZWFyczooKT0+c0h0LHRpbWVvdXQ6KCk9PnlWdCx0aW1lcjooKT0+QXJ0LHRpbWVyRmx1c2g6KCk9PlBydCx0b3VjaDooKT0+ckZ0LHRvdWNoZXM6KCk9PmlGdCx0cmFuc2l0aW9uOigpPT5Feix0cmFuc3Bvc2U6KCk9Pm1SLHRyZWU6KCk9PlBrdCx0cmVlbWFwOigpPT5Ma3QsdHJlZW1hcEJpbmFyeTooKT0+Umt0LHRyZWVtYXBEaWNlOigpPT5sZix0cmVlbWFwUmVzcXVhcmlmeTooKT0+emt0LHRyZWVtYXBTbGljZTooKT0+d2csdHJlZW1hcFNsaWNlRGljZTooKT0+RGt0LHRyZWVtYXBTcXVhcmlmeTooKT0+UUQsdHN2OigpPT51TnQsdHN2Rm9ybWF0OigpPT55UHQsdHN2Rm9ybWF0Um93czooKT0+dlB0LHRzdlBhcnNlOigpPT5nUHQsdHN2UGFyc2VSb3dzOigpPT5fUHQsdXRjRGF5OigpPT55SHQsdXRjRGF5czooKT0+dkh0LHV0Y0Zvcm1hdDooKT0+WUMsdXRjRnJpZGF5OigpPT5kcnQsdXRjRnJpZGF5czooKT0+RUh0LHV0Y0hvdXI6KCk9PmRIdCx1dGNIb3VyczooKT0+bUh0LHV0Y01pbGxpc2Vjb25kOigpPT5KZXQsdXRjTWlsbGlzZWNvbmRzOigpPT5RZXQsdXRjTWludXRlOigpPT51SHQsdXRjTWludXRlczooKT0+aEh0LHV0Y01vbmRheTooKT0+dXJ0LHV0Y01vbmRheXM6KCk9PmJIdCx1dGNNb250aDooKT0+UEh0LHV0Y01vbnRoczooKT0+SUh0LHV0Y1BhcnNlOigpPT5qQyx1dGNTYXR1cmRheTooKT0+bXJ0LHV0Y1NhdHVyZGF5czooKT0+VEh0LHV0Y1NlY29uZDooKT0+dHJ0LHV0Y1NlY29uZHM6KCk9PmVydCx1dGNTdW5kYXk6KCk9Pkg3LHV0Y1N1bmRheXM6KCk9PmdydCx1dGNUaHVyc2RheTooKT0+cHJ0LHV0Y1RodXJzZGF5czooKT0+TUh0LHV0Y1R1ZXNkYXk6KCk9PmhydCx1dGNUdWVzZGF5czooKT0+d0h0LHV0Y1dlZG5lc2RheTooKT0+ZnJ0LHV0Y1dlZG5lc2RheXM6KCk9PlNIdCx1dGNXZWVrOigpPT5INyx1dGNXZWVrczooKT0+Z3J0LHV0Y1llYXI6KCk9PmtIdCx1dGNZZWFyczooKT0+Ukh0LHZhbHVlczooKT0+aUF0LHZhcmlhbmNlOigpPT5zUix2ZXJzaW9uOigpPT5RM3Qsdm9yb25vaTooKT0+SUd0LHdpbmRvdzooKT0+Q3cseG1sOigpPT5hTnQsemlwOigpPT56TXQsem9vbTooKT0+Rmp0LHpvb21JZGVudGl0eTooKT0+aFMsem9vbVRyYW5zZm9ybTooKT0+b0Z9KTt2YXIgRXI9TSgoKT0+e3RNdCgpO0JNdCgpOyRNdCgpO21DdCgpO2pDdCgpO2xBdCgpO01BdCgpO1BBdCgpO2xQdCgpO2JQdCgpO1FQdCgpO2hJdCgpO1BJdCgpO0ZMdCgpO0JrdCgpO3E4dCgpO2o4dCgpO3NSdCgpO0JSdCgpO0dSdCgpO1FSdCgpO2ZOdCgpO1A3dCgpO2FGdCgpO1JCdCgpO0RIdCgpO2RWdCgpO3dWdCgpO2ZHdCgpO2tHdCgpO0hqdCgpfSk7dmFyIEdqdD1IKHFqdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocWp0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVmp0PShFcigpLFV0KE1yKSksV2c9Vmp0LFVqdD1WanQ7ZnVuY3Rpb24gSERlKGUsdCl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49V2cuc2VsZWN0KHRoaXMpO2Zvcih2YXIgaSBpbiByKW4uYXR0cihpLHJbaV0pfSl9ZnVuY3Rpb24gVkRlKGUsdCl7Zm9yKHZhciByIGluIHQpZS5hdHRyKHIsdFtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gVURlKGUpe3JldHVybih0eXBlb2YgZT09ImZ1bmN0aW9uIj9IRGU6VkRlKSh0aGlzLGUpfWZ1bmN0aW9uIHFEZShlLHQscil7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGk9V2cuc2VsZWN0KHRoaXMpO2Zvcih2YXIgbyBpbiBuKWkuc3R5bGUobyxuW29dLHIpfSl9ZnVuY3Rpb24gR0RlKGUsdCxyKXtmb3IodmFyIG4gaW4gdCllLnN0eWxlKG4sdFtuXSxyKTtyZXR1cm4gZX1mdW5jdGlvbiBXRGUoZSx0KXtyZXR1cm4odHlwZW9mIGU9PSJmdW5jdGlvbiI/cURlOkdEZSkodGhpcyxlLHQ9PW51bGw/IiI6dCl9ZnVuY3Rpb24gWURlKGUsdCl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49V2cuc2VsZWN0KHRoaXMpO2Zvcih2YXIgaSBpbiByKW4ucHJvcGVydHkoaSxyW2ldKX0pfWZ1bmN0aW9uIGpEZShlLHQpe2Zvcih2YXIgciBpbiB0KWUucHJvcGVydHkocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBYRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP1lEZTpqRGUpKHRoaXMsZSl9ZnVuY3Rpb24gJERlKGUsdCl7cmV0dXJuIGUuZWFjaChmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49V2cuc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oZSk7Zm9yKHZhciBpIGluIHIpbi5hdHRyKGkscltpXSl9KX1mdW5jdGlvbiBLRGUoZSx0KXtmb3IodmFyIHIgaW4gdCllLmF0dHIocix0W3JdKTtyZXR1cm4gZX1mdW5jdGlvbiBaRGUoZSl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iPyREZTpLRGUpKHRoaXMsZSl9ZnVuY3Rpb24gSkRlKGUsdCxyKXtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1XZy5zZWxlY3QodGhpcykudHJhbnNpdGlvbihlKTtmb3IodmFyIG8gaW4gbilpLnN0eWxlKG8sbltvXSxyKX0pfWZ1bmN0aW9uIFFEZShlLHQscil7Zm9yKHZhciBuIGluIHQpZS5zdHlsZShuLHRbbl0scik7cmV0dXJuIGV9ZnVuY3Rpb24gdE9lKGUsdCl7cmV0dXJuKHR5cGVvZiBlPT0iZnVuY3Rpb24iP0pEZTpRRGUpKHRoaXMsZSx0PT1udWxsPyIiOnQpfVdnLnNlbGVjdGlvbi5wcm90b3R5cGUuYXR0cnM9VURlO1dnLnNlbGVjdGlvbi5wcm90b3R5cGUuc3R5bGVzPVdEZTtXZy5zZWxlY3Rpb24ucHJvdG90eXBlLnByb3BlcnRpZXM9WERlO1VqdC50cmFuc2l0aW9uLnByb3RvdHlwZS5hdHRycz1aRGU7VWp0LnRyYW5zaXRpb24ucHJvdG90eXBlLnN0eWxlcz10T2V9KTt2YXIgWWc9SChvaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9pdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdqdD0oRXIoKSxVdChNcikpO2Z1bmN0aW9uIGVPZShlKXtpZihlLmF0dHJzPT1udWxsKWlmKGUubm9kZXM9PW51bGwpe3ZhciB0PVtdO3JldHVybiBlLmVhY2goZnVuY3Rpb24oKXt0LnB1c2godGhpcyl9KSxXanQuc2VsZWN0QWxsKHQpfWVsc2UgcmV0dXJuIFdqdC5zZWxlY3RBbGwoZS5ub2RlcygpKTtlbHNlIHJldHVybiBlfW9pdC5jb2VyY2VFeHRlcm5hbEQzPWVPZX0pO3ZhciBJZj1IKGFpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtmdW5jdGlvbiByT2UoZSl7cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKHQscil7cmV0dXJuIHRbcl09cix0fSx7fSl9YWl0Lm1ha2VFbnVtPXJPZX0pO3ZhciBqanQ9SChzRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc0YsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkcj0oSV8oKSxVdChOMXQpKSxuT2U9WWcoKSxpT2U9SWYoKSxZanQ9e2xpbmVhcjpkci5lYXNlTGluZWFyLHF1YWQ6ZHIuZWFzZVF1YWQscXVhZEluOmRyLmVhc2VRdWFkSW4scXVhZE91dDpkci5lYXNlUXVhZE91dCxxdWFkSW5PdXQ6ZHIuZWFzZVF1YWRJbk91dCxjdWJpYzpkci5lYXNlQ3ViaWMsY3ViaWNJbjpkci5lYXNlQ3ViaWNJbixjdWJpY091dDpkci5lYXNlQ3ViaWNPdXQsY3ViaWNJbk91dDpkci5lYXNlQ3ViaWNJbk91dCxwb2x5OmRyLmVhc2VQb2x5LHBvbHlJbjpkci5lYXNlUG9seUluLHBvbHlPdXQ6ZHIuZWFzZVBvbHlPdXQscG9seUluT3V0OmRyLmVhc2VQb2x5SW5PdXQsc2luOmRyLmVhc2VTaW4sc2luSW46ZHIuZWFzZVNpbkluLHNpbk91dDpkci5lYXNlU2luT3V0LHNpbkluT3V0OmRyLmVhc2VTaW5Jbk91dCxleHA6ZHIuZWFzZUV4cCxleHBJbjpkci5lYXNlRXhwSW4sZXhwT3V0OmRyLmVhc2VFeHBPdXQsZXhwSW5PdXQ6ZHIuZWFzZUV4cEluT3V0LGNpcmNsZTpkci5lYXNlQ2lyY2xlLGNpcmNsZUluOmRyLmVhc2VDaXJjbGVJbixjaXJjbGVPdXQ6ZHIuZWFzZUNpcmNsZU91dCxjaXJjbGVJbk91dDpkci5lYXNlQ2lyY2xlSW5PdXQsYm91bmNlOmRyLmVhc2VCb3VuY2UsYm91bmNlSW46ZHIuZWFzZUJvdW5jZUluLGJvdW5jZU91dDpkci5lYXNlQm91bmNlT3V0LGJvdW5jZUluT3V0OmRyLmVhc2VCb3VuY2VJbk91dCxiYWNrOmRyLmVhc2VCYWNrLGJhY2tJbjpkci5lYXNlQmFja0luLGJhY2tPdXQ6ZHIuZWFzZUJhY2tPdXQsYmFja0luT3V0OmRyLmVhc2VCYWNrSW5PdXQsZWxhc3RpYzpkci5lYXNlRWxhc3RpYyxlbGFzdGljSW46ZHIuZWFzZUVsYXN0aWNJbixlbGFzdGljT3V0OmRyLmVhc2VFbGFzdGljT3V0LGVsYXN0aWNJbk91dDpkci5lYXNlRWxhc3RpY0luT3V0fTtzRi5FYXNlTmFtZT1pT2UubWFrZUVudW0oWyJsaW5lYXIiLCJxdWFkIiwicXVhZEluIiwicXVhZE91dCIsInF1YWRJbk91dCIsImN1YmljIiwiY3ViaWNJbiIsImN1YmljT3V0IiwiY3ViaWNJbk91dCIsInBvbHkiLCJwb2x5SW4iLCJwb2x5T3V0IiwicG9seUluT3V0Iiwic2luIiwic2luSW4iLCJzaW5PdXQiLCJzaW5Jbk91dCIsImV4cCIsImV4cEluIiwiZXhwT3V0IiwiZXhwSW5PdXQiLCJjaXJjbGUiLCJjaXJjbGVJbiIsImNpcmNsZU91dCIsImNpcmNsZUluT3V0IiwiYm91bmNlIiwiYm91bmNlSW4iLCJib3VuY2VPdXQiLCJib3VuY2VJbk91dCIsImJhY2siLCJiYWNrSW4iLCJiYWNrT3V0IiwiYmFja0luT3V0IiwiZWxhc3RpYyIsImVsYXN0aWNJbiIsImVsYXN0aWNPdXQiLCJlbGFzdGljSW5PdXQiXSk7dmFyIG9PZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9zdGFydERlbGF5PWUuX0RFRkFVTFRfU1RBUlRfREVMQVlfTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEdXJhdGlvbj1lLl9ERUZBVUxUX1NURVBfRFVSQVRJT05fTUlMTElTRUNPTkRTLHRoaXMuX3N0ZXBEZWxheT1lLl9ERUZBVUxUX0lURVJBVElWRV9ERUxBWV9NSUxMSVNFQ09ORFMsdGhpcy5fbWF4VG90YWxEdXJhdGlvbj1lLl9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFMsdGhpcy5fZWFzaW5nTW9kZT1lLl9ERUZBVUxUX0VBU0lOR19NT0RFfXJldHVybiBlLnByb3RvdHlwZS50b3RhbFRpbWU9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZ2V0QWRqdXN0ZWRJdGVyYXRpdmVEZWxheSh0KTtyZXR1cm4gdGhpcy5zdGFydERlbGF5KCkrcipNYXRoLm1heCh0LTEsMCkrdGhpcy5zdGVwRHVyYXRpb24oKX0sZS5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXM7dD1uT2UuY29lcmNlRXh0ZXJuYWxEMyh0KTt2YXIgaT10LnNpemUoKSxvPXRoaXMuX2dldEFkanVzdGVkSXRlcmF0aXZlRGVsYXkoaSk7cmV0dXJuIHQudHJhbnNpdGlvbigpLmVhc2UodGhpcy5fZ2V0RWFzZUZhY3RvcnkoKSkuZHVyYXRpb24odGhpcy5zdGVwRHVyYXRpb24oKSkuZGVsYXkoZnVuY3Rpb24oYSxzKXtyZXR1cm4gbi5zdGFydERlbGF5KCkrbypzfSkuYXR0cnMocil9LGUucHJvdG90eXBlLnN0YXJ0RGVsYXk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fc3RhcnREZWxheToodGhpcy5fc3RhcnREZWxheT10LHRoaXMpfSxlLnByb3RvdHlwZS5zdGVwRHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/TWF0aC5taW4odGhpcy5fc3RlcER1cmF0aW9uLHRoaXMuX21heFRvdGFsRHVyYXRpb24pOih0aGlzLl9zdGVwRHVyYXRpb249dCx0aGlzKX0sZS5wcm90b3R5cGUuc3RlcERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX3N0ZXBEZWxheToodGhpcy5fc3RlcERlbGF5PXQsdGhpcyl9LGUucHJvdG90eXBlLm1heFRvdGFsRHVyYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fbWF4VG90YWxEdXJhdGlvbjoodGhpcy5fbWF4VG90YWxEdXJhdGlvbj10LHRoaXMpfSxlLnByb3RvdHlwZS5lYXNpbmdNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXMuX2Vhc2luZ01vZGU6KHRoaXMuX2Vhc2luZ01vZGU9dCx0aGlzKX0sZS5wcm90b3R5cGUuX2dldEVhc2VGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lYXNpbmdNb2RlKCk7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXt2YXIgcj1ZanRbdF07cmV0dXJuIHI9PW51bGw/WWp0LmxpbmVhcjpyfWVsc2UgcmV0dXJuIHR9LGUucHJvdG90eXBlLl9nZXRBZGp1c3RlZEl0ZXJhdGl2ZURlbGF5PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMubWF4VG90YWxEdXJhdGlvbigpLXRoaXMuc3RlcER1cmF0aW9uKCk7cj1NYXRoLm1heChyLDApO3ZhciBuPXIvTWF0aC5tYXgodC0xLDEpO3JldHVybiBNYXRoLm1pbih0aGlzLnN0ZXBEZWxheSgpLG4pfSxlLl9ERUZBVUxUX1NUQVJUX0RFTEFZX01JTExJU0VDT05EUz0wLGUuX0RFRkFVTFRfU1RFUF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MzAwLGUuX0RFRkFVTFRfSVRFUkFUSVZFX0RFTEFZX01JTExJU0VDT05EUz0xNSxlLl9ERUZBVUxUX01BWF9UT1RBTF9EVVJBVElPTl9NSUxMSVNFQ09ORFM9MS8wLGUuX0RFRkFVTFRfRUFTSU5HX01PREU9ImV4cE91dCIsZX0oKTtzRi5FYXNpbmc9b09lfSk7dmFyIFhqdD1IKHNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYU9lPVlnKCksc09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUudG90YWxUaW1lPWZ1bmN0aW9uKHQpe3JldHVybiAwfSxlLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQ9YU9lLmNvZXJjZUV4dGVybmFsRDModCksdC5hdHRycyhyKX0sZX0oKTtzaXQuTnVsbD1zT2V9KTt2YXIgTGY9SChsRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkanQ9KGRlKCksVXQocGUpKTskanQuX19leHBvcnRTdGFyKGpqdCgpLGxGKTskanQuX19leHBvcnRTdGFyKFhqdCgpLGxGKX0pO3ZhciBLanQ9SChsaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGxPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5jYWNoZT17fSx0aGlzLmNvbXB1dGU9dH1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhY2hlLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5jYWNoZVt0XT10aGlzLmNvbXB1dGUodCkpLHRoaXMuY2FjaGVbdF19LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FjaGU9e30sdGhpc30sZX0oKTtsaXQuQ2FjaGU9bE9lfSk7dmFyIFpqdD1IKGNpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoY2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgY09lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5hcnJheUVxPWZ1bmN0aW9uKHQscil7aWYodD09bnVsbHx8cj09bnVsbClyZXR1cm4gdD09PXI7aWYodC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dIT09cltuXSlyZXR1cm4hMTtyZXR1cm4hMH0sZS5vYmpFcT1mdW5jdGlvbih0LHIpe2lmKHQ9PW51bGx8fHI9PW51bGwpcmV0dXJuIHQ9PT1yO3ZhciBuPU9iamVjdC5rZXlzKHQpLnNvcnQoKSxpPU9iamVjdC5rZXlzKHIpLnNvcnQoKSxvPW4ubWFwKGZ1bmN0aW9uKHMpe3JldHVybiB0W3NdfSksYT1pLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcltzXX0pO3JldHVybiBlLmFycmF5RXEobixpKSYmZS5hcnJheUVxKG8sYSl9LGUuc3RyaWN0RXE9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdD09PXJ9LGUuZGVmYXVsdHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXJbbi0xXT1hcmd1bWVudHNbbl07aWYodD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QiKTt2YXIgaT1PYmplY3QodCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvIT1udWxsKWZvcih2YXIgYSBpbiBvKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLGEpJiYoaVthXT1vW2FdKX0pLGl9LGV9KCk7Y2l0Lk1ldGhvZHM9Y09lfSk7dmFyIEpqdD1IKHVpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdU9lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5jb21iaW5lV2hpdGVzcGFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bIFx0XSsvZywiICIpfSxlLmlzTm90RW1wdHlTdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQudHJpbSgpIT09IiJ9LGUudHJpbVN0YXJ0PWZ1bmN0aW9uKHQscil7aWYoIXQpcmV0dXJuIHQ7dmFyIG49dC5zcGxpdCgiIiksaT1yP2Z1bmN0aW9uKG8pe3JldHVybiBvLnNwbGl0KHIpLnNvbWUoZS5pc05vdEVtcHR5U3RyaW5nKX06ZS5pc05vdEVtcHR5U3RyaW5nO3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBpKG8rYSk/bythOm99LCIiKX0sZS50cmltRW5kPWZ1bmN0aW9uKHQscil7aWYoIXQpcmV0dXJuIHQ7dmFyIG49dC5zcGxpdCgiIik7cmV0dXJuIG4ucmV2ZXJzZSgpLG49ZS50cmltU3RhcnQobi5qb2luKCIiKSxyKS5zcGxpdCgiIiksbi5yZXZlcnNlKCksbi5qb2luKCIiKX0sZX0oKTt1aXQuU3RyaW5nTWV0aG9kcz11T2V9KTt2YXIgUWp0PUgoaGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShoaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5Xb3JkRGl2aWRlclJlZ0V4cD1uZXcgUmVnRXhwKCJcXFciKSx0aGlzLldoaXRlc3BhY2VSZWdFeHA9bmV3IFJlZ0V4cCgiXFxzIil9cmV0dXJuIGUucHJvdG90eXBlLnRva2VuaXplPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXM7cmV0dXJuIHQuc3BsaXQoIiIpLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuLnNsaWNlKDAsLTEpLmNvbmNhdChyLnNob3VsZENyZWF0ZU5ld1Rva2VuKG5bbi5sZW5ndGgtMV0saSkpfSxbIiJdKX0sZS5wcm90b3R5cGUuc2hvdWxkQ3JlYXRlTmV3VG9rZW49ZnVuY3Rpb24odCxyKXtpZighdClyZXR1cm5bcl07dmFyIG49dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdGhpcy5XaGl0ZXNwYWNlUmVnRXhwLnRlc3QobikmJnRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KHIpP1t0K3JdOnRoaXMuV2hpdGVzcGFjZVJlZ0V4cC50ZXN0KG4pfHx0aGlzLldoaXRlc3BhY2VSZWdFeHAudGVzdChyKT9bdCxyXTp0aGlzLldvcmREaXZpZGVyUmVnRXhwLnRlc3Qobik/bj09PXI/W3Qrcl06W3Qscl06W3Qrcl19LGV9KCk7aGl0LlRva2VuaXplcj1oT2V9KTt2YXIgcFM9SChjRj0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB1RihlKXtmb3IodmFyIHQgaW4gZSljRi5oYXNPd25Qcm9wZXJ0eSh0KXx8KGNGW3RdPWVbdF0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShjRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dUYoS2p0KCkpO3VGKFpqdCgpKTt1RihKanQoKSk7dUYoUWp0KCkpfSk7dmFyIGVYdD1IKGZpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdFh0PXBTKCksZk9lPXt0ZXh0Um90YXRpb246MCx0ZXh0U2hlYXI6MCx4QWxpZ246ImxlZnQiLHlBbGlnbjoidG9wIn0saEY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt0aGlzLl9tZWFzdXJlcj10LHRoaXMuX3BlbkZhY3Rvcnk9cix0aGlzLl93cmFwcGVyPW59cmV0dXJuIGUucHJvdG90eXBlLm1lYXN1cmVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tZWFzdXJlcj10LHRoaXN9LGUucHJvdG90eXBlLndyYXBwZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3dyYXBwZXI9dCx0aGlzfSxlLnByb3RvdHlwZS5wZW5GYWN0b3J5PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9wZW5GYWN0b3J5PXQsdGhpc30sZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxyLG4saSxvKXtpZihpPT09dm9pZCAwJiYoaT17fSksaT10WHQuTWV0aG9kcy5kZWZhdWx0cyh7fSxmT2UsaSksZS5TdXBwb3J0ZWRSb3RhdGlvbi5pbmRleE9mKGkudGV4dFJvdGF0aW9uKT09PS0xKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgcm90YXRpb24gLSAiK2kudGV4dFJvdGF0aW9uKyIuIFN1cHBvcnRlZCByb3RhdGlvbnMgYXJlICIrZS5TdXBwb3J0ZWRSb3RhdGlvbi5qb2luKCIsICIpKTtpZihpLnRleHRTaGVhciE9bnVsbCYmaS50ZXh0U2hlYXI8LTgwfHxpLnRleHRTaGVhcj44MCl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHNoZWFyIGFuZ2xlIC0gIitpLnRleHRTaGVhcisiLiBNdXN0IGJlIGJldHdlZW4gLTgwIGFuZCA4MCIpO3ZhciBhPU1hdGguYWJzKE1hdGguYWJzKGkudGV4dFJvdGF0aW9uKS05MCk+NDUscz1hP3I6bixsPWE/bjpyLGM9aS50ZXh0U2hlYXIsdT1jKk1hdGguUEkvMTgwLGg9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCxmPWgqTWF0aC50YW4odSkscD1zL01hdGguY29zKHUpLU1hdGguYWJzKGYpLGQ9bCpNYXRoLmNvcyh1KSxnPXRYdC5TdHJpbmdNZXRob2RzLmNvbWJpbmVXaGl0ZXNwYWNlKHQpLF89dGhpcy5fd3JhcHBlcj90aGlzLl93cmFwcGVyLndyYXAoZyx0aGlzLl9tZWFzdXJlcixwLGQpLndyYXBwZWRUZXh0OmcseT1fLnNwbGl0KGAKYCkseD1lLlhPZmZzZXRGYWN0b3JbaS54QWxpZ25dKnAqTWF0aC5zaW4odSksYj1lLllPZmZzZXRGYWN0b3JbaS55QWxpZ25dKihkLXkubGVuZ3RoKmgpLFM9eC1iLEM9WzAsMF0sUD1pLnRleHRSb3RhdGlvbitjO3N3aXRjaChpLnRleHRSb3RhdGlvbil7Y2FzZSA5MDpDPVtyK1MsMF07YnJlYWs7Y2FzZS05MDpDPVstUyxuXTticmVhaztjYXNlIDE4MDpDPVtyLG4rU107YnJlYWs7ZGVmYXVsdDpDPVswLC1TXTticmVha312YXIgaz10aGlzLl9wZW5GYWN0b3J5LmNyZWF0ZVBlbih0LHt0cmFuc2xhdGU6Qyxyb3RhdGU6UH0sbyk7dGhpcy53cml0ZUxpbmVzKHksayxwLGgsZixpLnhBbGlnbiksay5kZXN0cm95IT1udWxsJiZrLmRlc3Ryb3koKX0sZS5wcm90b3R5cGUud3JpdGVMaW5lcz1mdW5jdGlvbih0LHIsbixpLG8sYSl7dC5mb3JFYWNoKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bz4wPyhsKzEpKm86bCpvO3Iud3JpdGUocyxuLGEsYywobCsxKSppKX0pfSxlfSgpO2hGLlhPZmZzZXRGYWN0b3I9e2NlbnRlcjouNSxsZWZ0OjAscmlnaHQ6MX07aEYuWU9mZnNldEZhY3Rvcj17Ym90dG9tOjEsY2VudGVyOi41LHRvcDowfTtoRi5TdXBwb3J0ZWRSb3RhdGlvbj1bLTkwLDAsMTgwLDkwXTtmaXQuV3JpdGVyPWhGfSk7dmFyIHpBPUgoZkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcE9lKGUpe2Zvcih2YXIgdCBpbiBlKWZGLmhhc093blByb3BlcnR5KHQpfHwoZkZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGZGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtwT2UoZVh0KCkpfSk7dmFyIHBpdD1IKHBGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShwRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEZBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5hcHBlbmQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTt2YXIgbz1lLmNyZWF0ZS5hcHBseShlLFtyXS5jb25jYXQobikpO3JldHVybiB0LmFwcGVuZENoaWxkKG8pLG99LGUuY3JlYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7cmV0dXJuIGUuYWRkQ2xhc3Nlcy5hcHBseShlLFtpXS5jb25jYXQocikpLGl9LGUuYWRkQ2xhc3Nlcz1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtyPXIuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpIT1udWxsfSksdC5jbGFzc0xpc3QhPW51bGw/ci5mb3JFYWNoKGZ1bmN0aW9uKGkpe3QuY2xhc3NMaXN0LmFkZChpKX0pOnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsci5qb2luKCIgIikpfSxlLmdldERpbWVuc2lvbnM9ZnVuY3Rpb24odCl7aWYodC5nZXRCb3VuZGluZ0NsaWVudFJlY3QpdHJ5e3ZhciByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoLGk9ci5oZWlnaHQ7cmV0dXJue3dpZHRoOm4saGVpZ2h0Oml9fWNhdGNoKG8pe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LGV9KCk7cEYuSHRtbFV0aWxzPUZBO3ZhciBkT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9dGhpczt0aGlzLmVsZW1lbnQ9dCx0aGlzLmNsYXNzTmFtZT1yLHRoaXMuYWRkVGl0bGU9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBhPUZBLmFwcGVuZChpLmVsZW1lbnQsInNwYW4iLCJ0ZXh0LXRtcCIsaS5jbGFzc05hbWUpO2EudGV4dENvbnRlbnQ9bzt2YXIgcz1GQS5nZXREaW1lbnNpb25zKGEpO3JldHVybiBpLmVsZW1lbnQucmVtb3ZlQ2hpbGQoYSksc319LHRoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKG8sYSxzKXtzPT1udWxsJiYocz1pLmVsZW1lbnQpO3ZhciBsPUZBLmFwcGVuZChzLCJkaXYiLCJ0ZXh0LWJsb2NrIixpLmNsYXNzTmFtZSk7cmV0dXJuIGwuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixsLnN0eWxlLnRyYW5zZm9ybT0idHJhbnNsYXRlKDAsIC0xZW0pICIrKCJ0cmFuc2xhdGUoIithLnRyYW5zbGF0ZVswXSsicHgsICIrYS50cmFuc2xhdGVbMV0rInB4KSAiKSsoInJvdGF0ZSgiK2Eucm90YXRlKyJkZWcpIiksbC5zdHlsZS50cmFuc2Zvcm1PcmlnaW49IjAgMS4yZW0iLGkuYWRkVGl0bGUmJmwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsbyksaS5jcmVhdGVIdG1sTGluZVBlbihsKX19cmV0dXJuIGUucHJvdG90eXBlLnNldEFkZFRpdGxlPWZ1bmN0aW9uKHQpe3RoaXMuYWRkVGl0bGU9dH0sZS5wcm90b3R5cGUuY3JlYXRlSHRtbExpbmVQZW49ZnVuY3Rpb24odCl7cmV0dXJue3dyaXRlOmZ1bmN0aW9uKHIsbixpLG8sYSl7dmFyIHM9RkEuYXBwZW5kKHQsImRpdiIsInRleHQtbGluZSIpO3MudGV4dENvbnRlbnQ9cixzLnN0eWxlLndpZHRoPW4rInB4IixzLnN0eWxlLnRleHRBbGlnbj1pLHMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixzLnN0eWxlLndoaXRlU3BhY2U9Im5vd3JhcCIscy5zdHlsZS50b3A9YSsicHgiLHMuc3R5bGUubGVmdD1vKyJweCJ9fX0sZX0oKTtwRi5IdG1sQ29udGV4dD1kT2V9KTt2YXIgaVh0PUgoZEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbU9lPXpBKCksclh0PXBpdCgpLGpnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5hcHBlbmQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49W10saT0yO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspbltpLTJdPWFyZ3VtZW50c1tpXTt2YXIgbz1lLmNyZWF0ZS5hcHBseShlLFtyXS5jb25jYXQobikpO3JldHVybiB0LmFwcGVuZENoaWxkKG8pLG99LGUuY3JlYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKylyW24tMV09YXJndW1lbnRzW25dO3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhlLlNWR19OUyx0KTtyZXR1cm4gclh0Lkh0bWxVdGlscy5hZGRDbGFzc2VzLmFwcGx5KHJYdC5IdG1sVXRpbHMsW2ldLmNvbmNhdChyKSksaX0sZS5nZXREaW1lbnNpb25zPWZ1bmN0aW9uKHQpe2lmKHQuZ2V0QkJveCl0cnl7dmFyIHI9dC5nZXRCQm94KCksbj1yLndpZHRoLGk9ci5oZWlnaHQ7cmV0dXJue3dpZHRoOm4saGVpZ2h0Oml9fWNhdGNoKG8pe31yZXR1cm57aGVpZ2h0OjAsd2lkdGg6MH19LGV9KCk7amcuU1ZHX05TPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7ZEYuU3ZnVXRpbHM9amc7dmFyIG5YdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzO3RoaXMuZWxlbWVudD10LHRoaXMuY2xhc3NOYW1lPXIsdGhpcy5hZGRUaXRsZUVsZW1lbnQ9bix0aGlzLmNyZWF0ZVJ1bGVyPWZ1bmN0aW9uKCl7dmFyIG89aS5nZXRUZXh0RWxlbWVudHMoaS5lbGVtZW50KSxhPW8ucGFyZW50RWxlbWVudCxzPW8uY29udGFpbmVyRWxlbWVudCxsPW8udGV4dEVsZW1lbnQ7cmV0dXJuIGZ1bmN0aW9uKGMpe2EuYXBwZW5kQ2hpbGQocyksbC50ZXh0Q29udGVudD1jO3ZhciB1PWpnLmdldERpbWVuc2lvbnMobCk7cmV0dXJuIGEucmVtb3ZlQ2hpbGQocyksdX19LHRoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKG8sYSxzKXtzPT1udWxsJiYocz1pLmVsZW1lbnQpO3ZhciBsPWpnLmFwcGVuZChzLCJnIiwidGV4dC1jb250YWluZXIiLGkuY2xhc3NOYW1lKTtpLmFkZFRpdGxlRWxlbWVudCYmKGpnLmFwcGVuZChsLCJ0aXRsZSIpLnRleHRDb250ZW50PW8sbC5zZXRBdHRyaWJ1dGUoInRpdGxlIixvKSk7dmFyIGM9amcuYXBwZW5kKGwsImciLCJ0ZXh0LWFyZWEiKTtyZXR1cm4gYy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2EudHJhbnNsYXRlWzBdKyIsIithLnRyYW5zbGF0ZVsxXSsiKSIrKCJyb3RhdGUoIithLnJvdGF0ZSsiKSIpKSxpLmNyZWF0ZVN2Z0xpbmVQZW4oYyl9fXJldHVybiBlLnByb3RvdHlwZS5zZXRBZGRUaXRsZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dGhpcy5hZGRUaXRsZUVsZW1lbnQ9dH0sZS5wcm90b3R5cGUuY3JlYXRlU3ZnTGluZVBlbj1mdW5jdGlvbih0KXtyZXR1cm57d3JpdGU6ZnVuY3Rpb24ocixuLGksbyxhKXtvKz1uKm1PZS5Xcml0ZXIuWE9mZnNldEZhY3RvcltpXTt2YXIgcz1qZy5hcHBlbmQodCwidGV4dCIsInRleHQtbGluZSIpO3MudGV4dENvbnRlbnQ9cixzLnNldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiLGUuQW5jaG9yTWFwW2ldKSxzLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbysiLCIrYSsiKSIpLHMuc2V0QXR0cmlidXRlKCJ5IiwiLTAuMjVlbSIpfX19LGUucHJvdG90eXBlLmdldFRleHRFbGVtZW50cz1mdW5jdGlvbih0KXtpZih0LnRhZ05hbWU9PT0idGV4dCIpe3ZhciByPXQucGFyZW50RWxlbWVudDtyZXR1cm4gcj09bnVsbCYmKHI9dC5wYXJlbnROb2RlKSxyLnJlbW92ZUNoaWxkKHQpLHtjb250YWluZXJFbGVtZW50OnQscGFyZW50RWxlbWVudDpyLHRleHRFbGVtZW50OnR9fXZhciBuPXQucXVlcnlTZWxlY3RvcigidGV4dCIpO2lmKG4hPW51bGwpe3ZhciByPW4ucGFyZW50RWxlbWVudDtyZXR1cm4gcj09bnVsbCYmKHI9bi5wYXJlbnROb2RlKSxyLnJlbW92ZUNoaWxkKG4pLHtjb250YWluZXJFbGVtZW50Om4scGFyZW50RWxlbWVudDpyLHRleHRFbGVtZW50Om59fXZhciBpPWpnLmNyZWF0ZSgidGV4dCIsdGhpcy5jbGFzc05hbWUpO3JldHVybntjb250YWluZXJFbGVtZW50OmkscGFyZW50RWxlbWVudDp0LHRleHRFbGVtZW50Oml9fSxlfSgpO25YdC5BbmNob3JNYXA9e2NlbnRlcjoibWlkZGxlIixsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9O2RGLlN2Z0NvbnRleHQ9blh0fSk7dmFyIG9YdD1IKGRpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZ09lPXpBKCksX09lPSIjNDQ0Iix5T2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtyPT09dm9pZCAwJiYocj0xMCksbj09PXZvaWQgMCYmKG49e30pO3ZhciBpPXRoaXM7dGhpcy5jdHg9dCx0aGlzLmxpbmVIZWlnaHQ9cix0aGlzLnN0eWxlPW4sdGhpcy5jcmVhdGVSdWxlcj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihvKXtpLmN0eC5mb250PWkuc3R5bGUuZm9udDt2YXIgYT1pLmN0eC5tZWFzdXJlVGV4dChvKS53aWR0aDtyZXR1cm57d2lkdGg6YSxoZWlnaHQ6aS5saW5lSGVpZ2h0fX19LHRoaXMuY3JlYXRlUGVuPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gcz09bnVsbCYmKHM9aS5jdHgpLHMuc2F2ZSgpLHMudHJhbnNsYXRlKGEudHJhbnNsYXRlWzBdLGEudHJhbnNsYXRlWzFdKSxzLnJvdGF0ZShhLnJvdGF0ZSpNYXRoLlBJLzE4MCksaS5jcmVhdGVDYW52YXNQZW4ocyl9LHRoaXMuc3R5bGUuZmlsbD09PXZvaWQgMCYmKHRoaXMuc3R5bGUuZmlsbD1fT2UpfXJldHVybiBlLnByb3RvdHlwZS5jcmVhdGVDYW52YXNQZW49ZnVuY3Rpb24odCl7dmFyIHI9dGhpcztyZXR1cm57ZGVzdHJveTpmdW5jdGlvbigpe3QucmVzdG9yZSgpfSx3cml0ZTpmdW5jdGlvbihuLGksbyxhLHMpe2ErPWkqZ09lLldyaXRlci5YT2Zmc2V0RmFjdG9yW29dLHQudGV4dEFsaWduPW8sci5zdHlsZS5mb250IT1udWxsJiYodC5mb250PXIuc3R5bGUuZm9udCksci5zdHlsZS5maWxsIT1udWxsJiYodC5maWxsU3R5bGU9ci5zdHlsZS5maWxsLHQuZmlsbFRleHQobixhLHMpKSxyLnN0eWxlLnN0cm9rZSE9bnVsbCYmKHQuc3Ryb2tlU3R5bGU9ci5zdHlsZS5maWxsLHQuc3Ryb2tlVGV4dChuLGEscykpfX19LGV9KCk7ZGl0LkNhbnZhc0NvbnRleHQ9eU9lfSk7dmFyIGdpdD1IKG1GPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG1pdChlKXtmb3IodmFyIHQgaW4gZSltRi5oYXNPd25Qcm9wZXJ0eSh0KXx8KG1GW3RdPWVbdF0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShtRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7bWl0KGlYdCgpKTttaXQob1h0KCkpO21pdChwaXQoKSl9KTt2YXIgZ0Y9SChfaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9pdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGFYdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dC5jcmVhdGVSdWxlciE9bnVsbD90aGlzLnJ1bGVyPXQuY3JlYXRlUnVsZXIoKTp0aGlzLnJ1bGVyPXR9cmV0dXJuIGUucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PWUuSEVJR0hUX1RFWFQpLHRoaXMucnVsZXIodCl9LGV9KCk7YVh0LkhFSUdIVF9URVhUPSJiZHBxbCI7X2l0LkFic3RyYWN0TWVhc3VyZXI9YVh0fSk7dmFyIHlpdD1IKEJBPT57InVzZSBzdHJpY3QiO3ZhciB2T2U9QkEmJkJBLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxyKXt0Ll9fcHJvdG9fXz1yfXx8ZnVuY3Rpb24odCxyKXtmb3IodmFyIG4gaW4gcilyLmhhc093blByb3BlcnR5KG4pJiYodFtuXT1yW25dKX07cmV0dXJuIGZ1bmN0aW9uKHQscil7ZSh0LHIpO2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9dC5wcm90b3R5cGU9cj09PW51bGw/T2JqZWN0LmNyZWF0ZShyKToobi5wcm90b3R5cGU9ci5wcm90b3R5cGUsbmV3IG4pfX0oKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQkEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBfRj1nRigpLHhPZT1mdW5jdGlvbihlKXt2T2UodCxlKTtmdW5jdGlvbiB0KHIsbil7bj09PXZvaWQgMCYmKG49ITEpO3ZhciBpPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBpLnVzZUd1YXJkcz1uLGl9cmV0dXJuIHQucHJvdG90eXBlLl9hZGRHdWFyZHM9ZnVuY3Rpb24ocil7cmV0dXJuIF9GLkFic3RyYWN0TWVhc3VyZXIuSEVJR0hUX1RFWFQrcitfRi5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUfSx0LnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24ocixuKXtuPT09dm9pZCAwJiYobj0hMSk7dmFyIGk9dGhpcy51c2VHdWFyZHN8fG58fC9eW1x0IF0kLy50ZXN0KHIpLG89aT90aGlzLl9hZGRHdWFyZHMocik6cixhPWUucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzLG8pO3JldHVybiBhLndpZHRoLT1pPzIqdGhpcy5nZXRHdWFyZFdpZHRoKCk6MCxhfSx0LnByb3RvdHlwZS5tZWFzdXJlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09PXZvaWQgMCYmKHI9X0YuQWJzdHJhY3RNZWFzdXJlci5IRUlHSFRfVEVYVCksci50cmltKCk9PT0iIilyZXR1cm57d2lkdGg6MCxoZWlnaHQ6MH07dmFyIGk9ci50cmltKCkuc3BsaXQoYApgKS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX21lYXN1cmVMaW5lKG8pfSk7cmV0dXJue2hlaWdodDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBvK2EuaGVpZ2h0fSwwKSx3aWR0aDppLnJlZHVjZShmdW5jdGlvbihvLGEpe3JldHVybiBNYXRoLm1heChvLGEud2lkdGgpfSwwKX19LHQucHJvdG90eXBlLmdldEd1YXJkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ndWFyZFdpZHRoPT1udWxsJiYodGhpcy5ndWFyZFdpZHRoPWUucHJvdG90eXBlLm1lYXN1cmUuY2FsbCh0aGlzKS53aWR0aCksdGhpcy5ndWFyZFdpZHRofSx0fShfRi5BYnN0cmFjdE1lYXN1cmVyKTtCQS5NZWFzdXJlcj14T2V9KTt2YXIgdml0PUgoSEE9PnsidXNlIHN0cmljdCI7dmFyIGJPZT1IQSYmSEEuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbih0LHIpe3QuX19wcm90b19fPXJ9fHxmdW5jdGlvbih0LHIpe2Zvcih2YXIgbiBpbiByKXIuaGFzT3duUHJvcGVydHkobikmJih0W25dPXJbbl0pfTtyZXR1cm4gZnVuY3Rpb24odCxyKXtlKHQscik7ZnVuY3Rpb24gbigpe3RoaXMuY29uc3RydWN0b3I9dH10LnByb3RvdHlwZT1yPT09bnVsbD9PYmplY3QuY3JlYXRlKHIpOihuLnByb3RvdHlwZT1yLnByb3RvdHlwZSxuZXcgbil9fSgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShIQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdPZT15aXQoKSxTT2U9ZnVuY3Rpb24oZSl7Yk9lKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlIT09bnVsbCYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fbWVhc3VyZUxpbmUuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fbWVhc3VyZUxpbmU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbWVhc3VyZUNoYXJhY3RlcihvKX0pO3JldHVybntoZWlnaHQ6aS5yZWR1Y2UoZnVuY3Rpb24obyxhKXtyZXR1cm4gTWF0aC5tYXgobyxhLmhlaWdodCl9LDApLHdpZHRoOmkucmVkdWNlKGZ1bmN0aW9uKG8sYSl7cmV0dXJuIG8rYS53aWR0aH0sMCl9fSx0fSh3T2UuTWVhc3VyZXIpO0hBLkNoYXJhY3Rlck1lYXN1cmVyPVNPZX0pO3ZhciB4aXQ9SChWQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTU9lPVZBJiZWQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFZBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRU9lPXBTKCksVE9lPXZpdCgpLENPZT1mdW5jdGlvbihlKXtNT2UodCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gaS5jYWNoZT1uZXcgRU9lLkNhY2hlKGZ1bmN0aW9uKG8pe3JldHVybiBpLl9tZWFzdXJlQ2hhcmFjdGVyTm90RnJvbUNhY2hlKG8pfSksaX1yZXR1cm4gdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXJOb3RGcm9tQ2FjaGU9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9tZWFzdXJlQ2hhcmFjdGVyLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX21lYXN1cmVDaGFyYWN0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHIpfSx0LnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuY2FjaGUuY2xlYXIoKX0sdH0oVE9lLkNoYXJhY3Rlck1lYXN1cmVyKTtWQS5DYWNoZUNoYXJhY3Rlck1lYXN1cmVyPUNPZX0pO3ZhciBzWHQ9SChVQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQU9lPVVBJiZVQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUE9lPXBTKCksSU9lPWdGKCksTE9lPXhpdCgpLGtPZT1mdW5jdGlvbihlKXtBT2UodCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBuLmRpbUNhY2hlPW5ldyBQT2UuQ2FjaGUoZnVuY3Rpb24oaSl7cmV0dXJuIG4uX21lYXN1cmVOb3RGcm9tQ2FjaGUoaSl9KSxufXJldHVybiB0LnByb3RvdHlwZS5fbWVhc3VyZU5vdEZyb21DYWNoZT1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUubWVhc3VyZS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLm1lYXN1cmU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDAmJihyPUlPZS5BYnN0cmFjdE1lYXN1cmVyLkhFSUdIVF9URVhUKSx0aGlzLmRpbUNhY2hlLmdldChyKX0sdC5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLmRpbUNhY2hlLmNsZWFyKCksZS5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKX0sdH0oTE9lLkNhY2hlQ2hhcmFjdGVyTWVhc3VyZXIpO1VBLkNhY2hlTWVhc3VyZXI9a09lfSk7dmFyIGJpdD1IKHlGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHFBKGUpe2Zvcih2YXIgdCBpbiBlKXlGLmhhc093blByb3BlcnR5KHQpfHwoeUZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHlGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtxQShnRigpKTtxQSh4aXQoKSk7cUEoc1h0KCkpO3FBKHZpdCgpKTtxQSh5aXQoKSl9KTt2YXIgU2l0PUgod2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBHQT1wUygpLFJPZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1heExpbmVzKDEvMCksdGhpcy50ZXh0VHJpbW1pbmcoImVsbGlwc2lzIiksdGhpcy5hbGxvd0JyZWFraW5nV29yZHMoITEpLHRoaXMuX3Rva2VuaXplcj1uZXcgR0EuVG9rZW5pemVyLHRoaXMuX2JyZWFraW5nQ2hhcmFjdGVyPSItIn1yZXR1cm4gZS5wcm90b3R5cGUubWF4TGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fbWF4TGluZXM6KHRoaXMuX21heExpbmVzPXQsdGhpcyl9LGUucHJvdG90eXBlLnRleHRUcmltbWluZz1mdW5jdGlvbih0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl90ZXh0VHJpbW1pbmc7aWYodCE9PSJlbGxpcHNpcyImJnQhPT0ibm9uZSIpdGhyb3cgbmV3IEVycm9yKHQrIiAtIHVuc3VwcG9ydGVkIHRleHQgdHJpbW1pbmcgb3B0aW9uLiIpO3JldHVybiB0aGlzLl90ZXh0VHJpbW1pbmc9dCx0aGlzfSxlLnByb3RvdHlwZS5hbGxvd0JyZWFraW5nV29yZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fYWxsb3dCcmVha2luZ1dvcmRzOih0aGlzLl9hbGxvd0JyZWFraW5nV29yZHM9dCx0aGlzKX0sZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih0LHIsbixpKXt2YXIgbz10aGlzO2k9PT12b2lkIDAmJihpPTEvMCk7dmFyIGE9e25vQnJva2VXb3JkczowLG5vTGluZXM6MCxvcmlnaW5hbFRleHQ6dCx0cnVuY2F0ZWRUZXh0OiIiLHdyYXBwZWRUZXh0OiIifSxzPXthdmFpbGFibGVMaW5lczpNYXRoLm1pbihNYXRoLmZsb29yKGkvci5tZWFzdXJlKCkuaGVpZ2h0KSx0aGlzLl9tYXhMaW5lcyksYXZhaWxhYmxlV2lkdGg6bixjYW5GaXRUZXh0OiEwLGN1cnJlbnRMaW5lOiIiLHdyYXBwaW5nOmF9LGw9dC5zcGxpdChgCmApO3JldHVybiBsLnJlZHVjZShmdW5jdGlvbihjLHUsaCl7cmV0dXJuIG8uYnJlYWtMaW5lVG9GaXRXaWR0aChjLHUsaCE9PWwubGVuZ3RoLTEscil9LHMpLndyYXBwaW5nfSxlLnByb3RvdHlwZS5icmVha0xpbmVUb0ZpdFdpZHRoPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXRoaXM7IXQuY2FuRml0VGV4dCYmdC53cmFwcGluZy50cnVuY2F0ZWRUZXh0IT09IiImJih0LndyYXBwaW5nLnRydW5jYXRlZFRleHQrPWAKYCk7dmFyIGE9dGhpcy5fdG9rZW5pemVyLnRva2VuaXplKHIpO3Q9YS5yZWR1Y2UoZnVuY3Rpb24obCxjKXtyZXR1cm4gby53cmFwTmV4dFRva2VuKGMsbCxpKX0sdCk7dmFyIHM9R0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKHQuY3VycmVudExpbmUpO3JldHVybiB0LndyYXBwaW5nLm5vTGluZXMrPSsocyE9PSIiKSx0LndyYXBwaW5nLm5vTGluZXM9PT10LmF2YWlsYWJsZUxpbmVzJiZ0aGlzLl90ZXh0VHJpbW1pbmchPT0ibm9uZSImJm4/dC5jYW5GaXRUZXh0PSExOnQud3JhcHBpbmcud3JhcHBlZFRleHQrPXMsdC5jdXJyZW50TGluZT1gCmAsdH0sZS5wcm90b3R5cGUuY2FuRml0VG9rZW49ZnVuY3Rpb24odCxyLG4pe3ZhciBpPXRoaXMsbz10LnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oYSxzKXtyZXR1cm4gcyE9PXQubGVuZ3RoLTE/YStpLl9icmVha2luZ0NoYXJhY3RlcjphfSk7cmV0dXJuIG4ubWVhc3VyZSh0KS53aWR0aDw9cnx8by5ldmVyeShmdW5jdGlvbihhKXtyZXR1cm4gbi5tZWFzdXJlKGEpLndpZHRoPD1yfSl9LGUucHJvdG90eXBlLmFkZEVsbGlwc2lzPWZ1bmN0aW9uKHQscixuKXtpZih0aGlzLl90ZXh0VHJpbW1pbmc9PT0ibm9uZSIpcmV0dXJue3JlbWFpbmluZ1Rva2VuOiIiLHdyYXBwZWRUb2tlbjp0fTt2YXIgaT10LnN1YnN0cmluZygwKS50cmltKCksbz1uLm1lYXN1cmUoaSkud2lkdGgsYT1uLm1lYXN1cmUoIi4uLiIpLndpZHRoLHM9dC5sZW5ndGg+MCYmdFswXT09PWAKYD9gCmA6IiI7aWYocjw9YSl7dmFyIGw9YS8zLGM9TWF0aC5mbG9vcihyL2wpO3JldHVybntyZW1haW5pbmdUb2tlbjp0LHdyYXBwZWRUb2tlbjpzKyIuLi4iLnN1YnN0cigwLGMpfX1mb3IoO28rYT5yOylpPUdBLlN0cmluZ01ldGhvZHMudHJpbUVuZChpLnN1YnN0cigwLGkubGVuZ3RoLTEpKSxvPW4ubWVhc3VyZShpKS53aWR0aDtyZXR1cm57cmVtYWluaW5nVG9rZW46R0EuU3RyaW5nTWV0aG9kcy50cmltRW5kKHQuc3Vic3RyaW5nKGkubGVuZ3RoKSwiLSIpLnRyaW0oKSx3cmFwcGVkVG9rZW46cytpKyIuLi4ifX0sZS5wcm90b3R5cGUud3JhcE5leHRUb2tlbj1mdW5jdGlvbih0LHIsbil7aWYoIXIuY2FuRml0VGV4dHx8ci5hdmFpbGFibGVMaW5lcz09PXIud3JhcHBpbmcubm9MaW5lc3x8IXRoaXMuY2FuRml0VG9rZW4odCxyLmF2YWlsYWJsZVdpZHRoLG4pKXJldHVybiB0aGlzLmZpbmlzaFdyYXBwaW5nKHQscixuKTtmb3IodmFyIGk9dDtpOyl7dmFyIG89dGhpcy5icmVha1Rva2VuVG9GaXRJbldpZHRoKGksci5jdXJyZW50TGluZSxyLmF2YWlsYWJsZVdpZHRoLG4pO2lmKHIuY3VycmVudExpbmU9by5saW5lLGk9by5yZW1haW5pbmdUb2tlbixpIT1udWxsKWlmKHIud3JhcHBpbmcubm9Ccm9rZVdvcmRzKz0rby5icmVha1dvcmQsKytyLndyYXBwaW5nLm5vTGluZXMsci5hdmFpbGFibGVMaW5lcz09PXIud3JhcHBpbmcubm9MaW5lcyl7dmFyIGE9dGhpcy5hZGRFbGxpcHNpcyhyLmN1cnJlbnRMaW5lLHIuYXZhaWxhYmxlV2lkdGgsbik7cmV0dXJuIHIud3JhcHBpbmcud3JhcHBlZFRleHQrPWEud3JhcHBlZFRva2VuLHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9YS5yZW1haW5pbmdUb2tlbitpLHIuY3VycmVudExpbmU9YApgLHJ9ZWxzZSByLndyYXBwaW5nLndyYXBwZWRUZXh0Kz1HQS5TdHJpbmdNZXRob2RzLnRyaW1FbmQoci5jdXJyZW50TGluZSksci5jdXJyZW50TGluZT1gCmB9cmV0dXJuIHJ9LGUucHJvdG90eXBlLmZpbmlzaFdyYXBwaW5nPWZ1bmN0aW9uKHQscixuKXtpZihyLmNhbkZpdFRleHQmJnIuYXZhaWxhYmxlTGluZXMhPT1yLndyYXBwaW5nLm5vTGluZXMmJnRoaXMuX3RleHRUcmltbWluZyE9PSJub25lIil7dmFyIGk9dGhpcy5hZGRFbGxpcHNpcyhyLmN1cnJlbnRMaW5lK3Qsci5hdmFpbGFibGVXaWR0aCxuKTtyLndyYXBwaW5nLndyYXBwZWRUZXh0Kz1pLndyYXBwZWRUb2tlbixyLndyYXBwaW5nLnRydW5jYXRlZFRleHQrPWkucmVtYWluaW5nVG9rZW4sci53cmFwcGluZy5ub0Jyb2tlV29yZHMrPSsoaS5yZW1haW5pbmdUb2tlbi5sZW5ndGg8dC5sZW5ndGgpLHIud3JhcHBpbmcubm9MaW5lcys9KyhpLndyYXBwZWRUb2tlbi5sZW5ndGg+MCksci5jdXJyZW50TGluZT0iIn1lbHNlIHIud3JhcHBpbmcudHJ1bmNhdGVkVGV4dCs9dDtyZXR1cm4gci5jYW5GaXRUZXh0PSExLHJ9LGUucHJvdG90eXBlLmJyZWFrVG9rZW5Ub0ZpdEluV2lkdGg9ZnVuY3Rpb24odCxyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz10aGlzLl9icmVha2luZ0NoYXJhY3RlciksaS5tZWFzdXJlKHIrdCkud2lkdGg8PW4pcmV0dXJue2JyZWFrV29yZDohMSxsaW5lOnIrdCxyZW1haW5pbmdUb2tlbjpudWxsfTtpZih0LnRyaW0oKT09PSIiKXJldHVybnticmVha1dvcmQ6ITEsbGluZTpyLHJlbWFpbmluZ1Rva2VuOiIifTtpZighdGhpcy5fYWxsb3dCcmVha2luZ1dvcmRzJiZyLnRyaW0oKSE9PSIiKXJldHVybnticmVha1dvcmQ6ITEsbGluZTpyLHJlbWFpbmluZ1Rva2VuOnR9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGgmJmkubWVhc3VyZShyK3Quc3Vic3RyaW5nKDAsYSsxKStvKS53aWR0aDw9bjspKythO3ZhciBzPSIiO3JldHVybiBhPjAmJihzPW8pLHticmVha1dvcmQ6YT4wLGxpbmU6cit0LnN1YnN0cmluZygwLGEpK3MscmVtYWluaW5nVG9rZW46dC5zdWJzdHJpbmcoYSl9fSxlfSgpO3dpdC5XcmFwcGVyPVJPZX0pO3ZhciBjWHQ9SChXQT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTk9lPVdBJiZXQS5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHQscil7dC5fX3Byb3RvX189cn18fGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKHRbbl09cltuXSl9O3JldHVybiBmdW5jdGlvbih0LHIpe2UodCxyKTtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fXQucHJvdG90eXBlPXI9PT1udWxsP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFdBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRE9lPVNpdCgpLGxYdD1mdW5jdGlvbihlKXtOT2UodCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUud3JhcD1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT10aGlzO289PT12b2lkIDAmJihvPTEvMCk7dmFyIHM9ci5zcGxpdChgCmApO2lmKHMubGVuZ3RoPjEpdGhyb3cgbmV3IEVycm9yKCJTaW5nbGVMaW5lV3JhcHBlciBpcyBkZXNpZ25lZCB0byB3b3JrIG9ubHkgb24gc2luZ2xlIGxpbmUiKTt2YXIgbD1mdW5jdGlvbihnKXtyZXR1cm4gZS5wcm90b3R5cGUud3JhcC5jYWxsKGEscixuLGcsbyl9LGM9bChpKTtpZihjLm5vTGluZXM8MilyZXR1cm4gYztmb3IodmFyIHU9MCxoPWksZj0wO2Y8dC5OT19XUkFQX0lURVJBVElPTlMmJmg+dTsrK2Ype3ZhciBwPShoK3UpLzIsZD1sKHApO3RoaXMuYXJlU2FtZVJlc3VsdHMoYyxkKT8oaD1wLGM9ZCk6dT1wfXJldHVybiBjfSx0LnByb3RvdHlwZS5hcmVTYW1lUmVzdWx0cz1mdW5jdGlvbihyLG4pe3JldHVybiByLm5vTGluZXM9PT1uLm5vTGluZXMmJnIudHJ1bmNhdGVkVGV4dD09PW4udHJ1bmNhdGVkVGV4dH0sdH0oRE9lLldyYXBwZXIpO2xYdC5OT19XUkFQX0lURVJBVElPTlM9NTtXQS5TaW5nbGVMaW5lV3JhcHBlcj1sWHR9KTt2YXIgTWl0PUgodkY9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdVh0KGUpe2Zvcih2YXIgdCBpbiBlKXZGLmhhc093blByb3BlcnR5KHQpfHwodkZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHZGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt1WHQoY1h0KCkpO3VYdChTaXQoKSl9KTt2YXIgaFh0PUgoVGl0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBFaXQ9Z2l0KCksT09lPWJpdCgpLHpPZT1NaXQoKSxGT2U9ekEoKSxCT2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3RoaXMuY29udGV4dD10LHRoaXMubWVhc3VyZXI9bmV3IE9PZS5DYWNoZU1lYXN1cmVyKHRoaXMuY29udGV4dCksdGhpcy53cmFwcGVyPW5ldyB6T2UuV3JhcHBlcix0aGlzLndyaXRlcj1uZXcgRk9lLldyaXRlcih0aGlzLm1lYXN1cmVyLHRoaXMuY29udGV4dCx0aGlzLndyYXBwZXIpfXJldHVybiBlLnN2Zz1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBFaXQuU3ZnQ29udGV4dCh0LHIsbikpfSxlLmNhbnZhcz1mdW5jdGlvbih0LHIsbil7cmV0dXJuIG5ldyBlKG5ldyBFaXQuQ2FudmFzQ29udGV4dCh0LHIsbikpfSxlLmh0bWw9ZnVuY3Rpb24odCxyLG4pe3JldHVybiBuZXcgZShuZXcgRWl0Lkh0bWxDb250ZXh0KHQscixuKSl9LGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQscixuLGksbyl7dGhpcy53cml0ZXIud3JpdGUodCxyLG4saSxvKX0sZS5wcm90b3R5cGUuY2xlYXJNZWFzdXJlckNhY2hlPWZ1bmN0aW9uKCl7dGhpcy5tZWFzdXJlci5yZXNldCgpfSxlfSgpO1RpdC5UeXBlc2V0dGVyPUJPZX0pO3ZhciBfbD1IKHhGPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGRTKGUpe2Zvcih2YXIgdCBpbiBlKXhGLmhhc093blByb3BlcnR5KHQpfHwoeEZbdF09ZVt0XSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHhGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtkUyhnaXQoKSk7ZFMoYml0KCkpO2RTKGhYdCgpKTtkUyhwUygpKTtkUyhNaXQoKSk7ZFMoekEoKSl9KTt2YXIgZlh0PUgobVM9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1TLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSE9lPShFcigpLFV0KE1yKSksVk9lPXdpbmRvdy5BcnJheTtmdW5jdGlvbiBVT2UoZSx0KXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0ZW1wdGVkIHRvIGFkZCBhcnJheXMgb2YgdW5lcXVhbCBsZW5ndGgiKTtyZXR1cm4gZS5tYXAoZnVuY3Rpb24ocixuKXtyZXR1cm4gZVtuXSt0W25dfSl9bVMuYWRkPVVPZTtmdW5jdGlvbiBxT2UoZSl7dmFyIHQ9SE9lLnNldCgpLHI9W107cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihuKXt0LmhhcyhTdHJpbmcobikpfHwodC5hZGQoU3RyaW5nKG4pKSxyLnB1c2gobikpfSkscn1tUy51bmlxPXFPZTtmdW5jdGlvbiBHT2UoZSl7cmV0dXJuIFZPZS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfW1TLmZsYXR0ZW49R09lO2Z1bmN0aW9uIFdPZShlLHQpe2Zvcih2YXIgcj1bXSxuPTA7bjx0O24rKylyW25dPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uobik6ZTtyZXR1cm4gcn1tUy5jcmVhdGVGaWxsZWRBcnJheT1XT2V9KTt2YXIgbVh0PUgoWUE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFlBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZFh0PShFcigpLFV0KE1yKSksWU9lPXdpbmRvdy5NYXRoO2Z1bmN0aW9uIGpPZShlLHQpe3ZhciByPXBYdChlKSsuMDUsbj1wWHQodCkrLjA1O3JldHVybiByPm4/ci9uOm4vcn1ZQS5jb250cmFzdD1qT2U7ZnVuY3Rpb24gWE9lKGUsdCl7dmFyIHI9ZFh0LmNvbG9yKGUpLmJyaWdodGVyKHQpO3JldHVybiByLnJnYigpLnRvU3RyaW5nKCl9WUEubGlnaHRlbkNvbG9yPVhPZTtmdW5jdGlvbiAkT2UoZSx0KXtlLmNsYXNzZWQodCwhMCk7dmFyIHI9ZS5zdHlsZSgiYmFja2dyb3VuZC1jb2xvciIpO2lmKHI9PT0idHJhbnNwYXJlbnQiKXJldHVybiBudWxsO3ZhciBuPS9cKCguKylcKS8uZXhlYyhyKTtpZighbilyZXR1cm4gbnVsbDt2YXIgaT1uWzFdLnNwbGl0KCIsIikubWFwKGZ1bmN0aW9uKGEpe3ZhciBzPSthLGw9cy50b1N0cmluZygxNik7cmV0dXJuIHM8MTY/IjAiK2w6bH0pO2lmKGkubGVuZ3RoPT09NCYmaVszXT09PSIwMCIpcmV0dXJuIG51bGw7dmFyIG89IiMiK2kuam9pbigiIik7cmV0dXJuIGUuY2xhc3NlZCh0LCExKSxvfVlBLmNvbG9yVGVzdD0kT2U7ZnVuY3Rpb24gcFh0KGUpe3ZhciB0PWRYdC5yZ2IoZSkscj1mdW5jdGlvbihhKXtyZXR1cm4gYT1hLzI1NSxhPD0uMDM5Mjg/YS8xMi45MjpZT2UucG93KChhKy4wNTUpLzEuMDU1LDIuNCl9LG49cih0LnIpLGk9cih0LmcpLG89cih0LmIpO3JldHVybiAuMjEyNipuKy43MTUyKmkrLjA3MjIqb319KTt2YXIgQWl0PUgoYW89PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGFvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ2l0PShFcigpLFV0KE1yKSksbWE9d2luZG93Lk1hdGg7ZnVuY3Rpb24gS09lKGUsdCl7Zm9yKHZhciByPXQ7ciE9bnVsbCYmciE9PWU7KXI9ci5wYXJlbnROb2RlO3JldHVybiByPT09ZX1hby5jb250YWlucz1LT2U7ZnVuY3Rpb24gX1h0KGUpe3ZhciB0O3RyeXt0PWUubm9kZSgpLmdldEJCb3goKX1jYXRjaChyKXt0PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9fXJldHVybiB0fWFvLmVsZW1lbnRCQm94PV9YdDtmdW5jdGlvbiBaT2UoZSl7aWYoZSBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpcmV0dXJuIF9YdChDaXQuc2VsZWN0KGUpKTtpZihlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpe3ZhciB0PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3g6dC5sZWZ0LHk6dC50b3Asd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHR9fWVsc2UgcmV0dXJue3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH19YW8uZW50aXR5Qm91bmRzPVpPZTthby5TQ1JFRU5fUkVGUkVTSF9SQVRFX01JTExJU0VDT05EUz0xZTMvNjA7ZnVuY3Rpb24gSk9lKGUpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUhPW51bGw/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKTpzZXRUaW1lb3V0KGUsYW8uU0NSRUVOX1JFRlJFU0hfUkFURV9NSUxMSVNFQ09ORFMpfWFvLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsPUpPZTtmdW5jdGlvbiBRT2UoZSl7dmFyIHQ9ZSBpbnN0YW5jZW9mIENpdC5zZWxlY3Rpb24/ZS5ub2RlKCk6ZSxyPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO3JldHVybiBrZihyLCJ3aWR0aCIpK2tmKHIsInBhZGRpbmctbGVmdCIpK2tmKHIsInBhZGRpbmctcmlnaHQiKStrZihyLCJib3JkZXItbGVmdC13aWR0aCIpK2tmKHIsImJvcmRlci1yaWdodC13aWR0aCIpfWFvLmVsZW1lbnRXaWR0aD1RT2U7ZnVuY3Rpb24gdDdlKGUpe3ZhciB0PWUgaW5zdGFuY2VvZiBDaXQuc2VsZWN0aW9uP2Uubm9kZSgpOmUscj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm4ga2YociwiaGVpZ2h0Iikra2YociwicGFkZGluZy10b3AiKStrZihyLCJwYWRkaW5nLWJvdHRvbSIpK2tmKHIsImJvcmRlci10b3Atd2lkdGgiKStrZihyLCJib3JkZXItYm90dG9tLXdpZHRoIil9YW8uZWxlbWVudEhlaWdodD10N2U7dmFyIExjPSJcXHMiLGpBPSIoPzpbLStdP1swLTldKlxcLj9bMC05XSspIix5WHQ9Iig/Oig/OiIrTGMrIissPyIrTGMrIiopfCg/OiwiK0xjKyIqKSkiLGU3ZT1uZXcgUmVnRXhwKCJ0cmFuc2xhdGUiK0xjKyIqXFwoIitMYysiKigiK2pBKyIpKD86Iit5WHQrIigiK2pBKyIpKT8iK0xjKyIqXFwpIikscjdlPW5ldyBSZWdFeHAoInJvdGF0ZSIrTGMrIipcXCgiK0xjKyIqKCIrakErIikiK0xjKyIqXFwpIiksbjdlPW5ldyBSZWdFeHAoInNjYWxlIitMYysiKlxcKCIrTGMrIiooIitqQSsiKSg/OiIreVh0KyIoIitqQSsiKSk/IitMYysiKlxcKSIpO2Z1bmN0aW9uIGk3ZShlKXt2YXIgdD1lN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdLG49dFsyXSxpPW49PT12b2lkIDA/MDpuO3JldHVyblsrciwraV19ZWxzZSByZXR1cm5bMCwwXX1hby5nZXRUcmFuc2xhdGVWYWx1ZXM9aTdlO2Z1bmN0aW9uIG83ZShlKXt2YXIgdD1yN2UuZXhlYyhlLmF0dHIoInRyYW5zZm9ybSIpKTtpZih0IT1udWxsKXt2YXIgcj10WzFdO3JldHVybityfWVsc2UgcmV0dXJuIDB9YW8uZ2V0Um90YXRlPW83ZTtmdW5jdGlvbiBhN2UoZSl7dmFyIHQ9bjdlLmV4ZWMoZS5hdHRyKCJ0cmFuc2Zvcm0iKSk7aWYodCE9bnVsbCl7dmFyIHI9dFsxXSxuPXRbMl07cmV0dXJuWytyLG49PW51bGw/K3I6K25dfWVsc2UgcmV0dXJuWzAsMF19YW8uZ2V0U2NhbGVWYWx1ZXM9YTdlO2Z1bmN0aW9uIHM3ZShlLHQpe3JldHVybiEobWEuZmxvb3IoZS5yaWdodCk8PW1hLmNlaWwodC5sZWZ0KXx8bWEuY2VpbChlLmxlZnQpPj1tYS5mbG9vcih0LnJpZ2h0KXx8bWEuZmxvb3IoZS5ib3R0b20pPD1tYS5jZWlsKHQudG9wKXx8bWEuY2VpbChlLnRvcCk+PW1hLmZsb29yKHQuYm90dG9tKSl9YW8uY2xpZW50UmVjdHNPdmVybGFwPXM3ZTtmdW5jdGlvbiBsN2UoZSx0KXtyZXR1cm57bGVmdDplLmxlZnQtdCx0b3A6ZS50b3AtdCxyaWdodDplLnJpZ2h0K3QsYm90dG9tOmUuYm90dG9tK3Qsd2lkdGg6ZS53aWR0aCt0KjIsaGVpZ2h0OmUuaGVpZ2h0K3QqMn19YW8uZXhwYW5kUmVjdD1sN2U7ZnVuY3Rpb24gYzdlKGUsdCl7cmV0dXJuIG1hLmZsb29yKHQubGVmdCk8PW1hLmNlaWwoZS5sZWZ0KSYmbWEuZmxvb3IodC50b3ApPD1tYS5jZWlsKGUudG9wKSYmbWEuZmxvb3IoZS5yaWdodCk8PW1hLmNlaWwodC5yaWdodCkmJm1hLmZsb29yKGUuYm90dG9tKTw9bWEuY2VpbCh0LmJvdHRvbSl9YW8uY2xpZW50UmVjdEluc2lkZT1jN2U7ZnVuY3Rpb24gdTdlKGUsdCxyLG4pe249PT12b2lkIDAmJihuPS41KTt2YXIgaT1nWHQoZSksbz1nWHQodCk7cmV0dXJuIHIueCtyLndpZHRoPj1pLm1pbi1uJiZyLng8PWkubWF4K24mJnIueStyLmhlaWdodD49by5taW4tbiYmci55PD1vLm1heCtufWFvLmludGVyc2VjdHNCQm94PXU3ZTtmdW5jdGlvbiBnWHQoZSl7aWYodHlwZW9mIGU9PSJudW1iZXIiKXt2YXIgdD1lO3JldHVybnttaW46dCxtYXg6dH19dmFyIHI9ZTtpZihyIGluc3RhbmNlb2YgT2JqZWN0JiYibWluImluIHImJiJtYXgiaW4gcilyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoImlucHV0ICciK2UrIicgY2FuJ3QgYmUgcGFyc2VkIGFzIGFuIFJhbmdlIil9ZnVuY3Rpb24ga2YoZSx0KXt2YXIgcj1lLmdldFByb3BlcnR5VmFsdWUodCksbj1wYXJzZUZsb2F0KHIpO3JldHVybiBufHwwfWZ1bmN0aW9uIGg3ZShlKXtmb3IodmFyIHQ9W107ZSYmZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50Oyl0LnB1c2goZSksZT1lLnBhcmVudEVsZW1lbnQ7cmV0dXJuIHR9YW8uZ2V0SHRtbEVsZW1lbnRBbmNlc3RvcnM9aDdlO2Z1bmN0aW9uIGY3ZShlKXt2YXIgdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpLHI9dC5nZXRQcm9wZXJ0eVZhbHVlKCItd2Via2l0LXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1tb3otdHJhbnNmb3JtIil8fHQuZ2V0UHJvcGVydHlWYWx1ZSgiLW1zLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoIi1vLXRyYW5zZm9ybSIpfHx0LmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpO3JldHVybiBtN2Uocil9YW8uZ2V0RWxlbWVudFRyYW5zZm9ybT1mN2U7dmFyIHA3ZT0vXm1hdHJpeFwoKFteKV0rKVwpJC8sZDdlPS9bLCBdKy87ZnVuY3Rpb24gbTdlKGUpe2lmKGU9PW51bGx8fGU9PT0ibm9uZSIpcmV0dXJuIG51bGw7dmFyIHQ9ZS5tYXRjaChwN2UpO2lmKHQ9PW51bGx8fHQubGVuZ3RoPDIpcmV0dXJuIG51bGw7dmFyIHI9dFsxXS5zcGxpdChkN2UpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gcGFyc2VGbG9hdChuKX0pO3JldHVybiByLmxlbmd0aCE9Nj9udWxsOnJ9fSk7dmFyIFBpdD1IKHNvPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdGPShFcigpLFV0KE1yKSksdlh0PUFpdCgpLG1kPXdpbmRvdy5NYXRoLGc3ZT1bMSwwLDAsMSwwLDBdO2Z1bmN0aW9uIF83ZShlLHQscil7cmV0dXJuIG1kLm1pbih0LHIpPD1lJiZlPD1tZC5tYXgodCxyKX1zby5pblJhbmdlPV83ZTtmdW5jdGlvbiB5N2UoZSx0LHIpe3JldHVybiBtZC5taW4obWQubWF4KHQsZSkscil9c28uY2xhbXA9eTdlO2Z1bmN0aW9uIHY3ZShlLHQscil7dmFyIG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsLGk9bj09bnVsbD90OnIsbz1uPT1udWxsP3dGLm1heChlKTp3Ri5tYXgoZSxuKTtyZXR1cm4gbyE9PXZvaWQgMD9vOml9c28ubWF4PXY3ZTtmdW5jdGlvbiB4N2UoZSx0LHIpe3ZhciBuPXR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6bnVsbCxpPW49PW51bGw/dDpyLG89bj09bnVsbD93Ri5taW4oZSk6d0YubWluKGUsbik7cmV0dXJuIG8hPT12b2lkIDA/bzppfXNvLm1pbj14N2U7ZnVuY3Rpb24gYjdlKGUpe3JldHVybiBlIT09ZX1zby5pc05hTj1iN2U7ZnVuY3Rpb24gdzdlKGUpe3JldHVybiB0eXBlb2YgZT09Im51bWJlciImJmUtZTwxfXNvLmlzVmFsaWROdW1iZXI9dzdlO2Z1bmN0aW9uIFM3ZShlLHQscil7aWYocj09PXZvaWQgMCYmKHI9MSkscj09PTApdGhyb3cgbmV3IEVycm9yKCJzdGVwIGNhbm5vdCBiZSAwIik7Zm9yKHZhciBuPW1kLm1heChtZC5jZWlsKCh0LWUpL3IpLDApLGk9W10sbz0wO288bjsrK28paVtvXT1lK3IqbztyZXR1cm4gaX1zby5yYW5nZT1TN2U7ZnVuY3Rpb24gTTdlKGUsdCl7cmV0dXJuIG1kLnBvdyh0LnktZS55LDIpK21kLnBvdyh0LngtZS54LDIpfXNvLmRpc3RhbmNlU3F1YXJlZD1NN2U7ZnVuY3Rpb24gRTdlKGUpe3JldHVybiBlLzM2MCptZC5QSSoyfXNvLmRlZ3JlZXNUb1JhZGlhbnM9RTdlO2Z1bmN0aW9uIFQ3ZShlLHQpe3JldHVybiB0LnRvcExlZnQueDw9ZS54JiZ0LmJvdHRvbVJpZ2h0Lng+PWUueCYmdC50b3BMZWZ0Lnk8PWUueSYmdC5ib3R0b21SaWdodC55Pj1lLnl9c28ud2l0aGluPVQ3ZTtmdW5jdGlvbiBDN2UoZSx0LHIsbixpLG8sYSxzKXtyZXR1cm4gZTw9aSthJiZpPD1lK3ImJnQ8PW8rcyYmbzw9dCtufXNvLmJvdW5kc0ludGVyc2VjdHM9QzdlO2Z1bmN0aW9uIEE3ZShlKXtmb3IodmFyIHQ9dlh0LmdldEh0bWxFbGVtZW50QW5jZXN0b3JzKGUpLHI9ZzdlLG49bnVsbCxpPTAsbz10O2k8by5sZW5ndGg7aSsrKXt2YXIgYT1vW2ldLHM9dlh0LmdldEVsZW1lbnRUcmFuc2Zvcm0oYSk7aWYocyE9bnVsbCl7dmFyIGw9YS5jbGllbnRXaWR0aC8yLGM9YS5jbGllbnRIZWlnaHQvMjtyPWJGKHIsW2wsY10pLHI9eFh0KHIsYlh0KHMpKSxyPWJGKHIsWy1sLC1jXSl9dmFyIHU9YS5zY3JvbGxMZWZ0LGg9YS5zY3JvbGxUb3A7KG49PT1udWxsfHxhPT09bikmJih1LT1hLm9mZnNldExlZnQrYS5jbGllbnRMZWZ0LGgtPWEub2Zmc2V0VG9wK2EuY2xpZW50VG9wLG49YS5vZmZzZXRQYXJlbnQpLHI9YkYocixbdSxoXSl9cmV0dXJuIHJ9c28uZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybT1BN2U7ZnVuY3Rpb24geFh0KGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzJdKnRbMV0sZVsxXSp0WzBdK2VbM10qdFsxXSxlWzBdKnRbMl0rZVsyXSp0WzNdLGVbMV0qdFsyXStlWzNdKnRbM10sZVswXSp0WzRdK2VbMl0qdFs1XStlWzRdLGVbMV0qdFs0XStlWzNdKnRbNV0rZVs1XV19c28ubXVsdGlwbHlNYXRyaXg9eFh0O2Z1bmN0aW9uIFA3ZShlLHQpe3JldHVyblt0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0rZVswXSx0WzVdK2VbMV1dfXNvLnByZW11bHRpcGx5VHJhbnNsYXRlPVA3ZTtmdW5jdGlvbiBiRihlLHQpe3JldHVybltlWzBdLGVbMV0sZVsyXSxlWzNdLGVbMF0qdFswXStlWzJdKnRbMV0rZVs0XSxlWzFdKnRbMF0rZVszXSp0WzFdK2VbNV1dfXNvLm11bHRpcGx5VHJhbnNsYXRlPWJGO2Z1bmN0aW9uIGJYdChlKXt2YXIgdD1lWzBdKmVbM10tZVsxXSplWzJdO2lmKHQ9PT0wKXRocm93IG5ldyBFcnJvcigic2luZ3VsYXIgbWF0cml4Iik7dmFyIHI9MS90O3JldHVybltyKmVbM10sciotZVsxXSxyKi1lWzJdLHIqZVswXSxyKigtZVszXSplWzRdK2VbMl0qZVs1XSksciooZVsxXSplWzRdKy1lWzBdKmVbNV0pXX1zby5pbnZlcnRNYXRyaXg9Ylh0O2Z1bmN0aW9uIEk3ZShlLHQpe3JldHVybnt4OmVbMF0qdC54K2VbMl0qdC55K2VbNF0seTplWzFdKnQueCtlWzNdKnQueStlWzVdfX1zby5hcHBseVRyYW5zZm9ybT1JN2V9KTt2YXIgd1h0PUgoU0Y9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTDdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5jZWlsKHQubGVuZ3RoLzIpLGk9MDtpPG47aSsrKXJbMF0uaW5zZXJ0KHRbaV0pO2Zvcih2YXIgaT1uO2k8dC5sZW5ndGg7aSsrKXJbMV0uaW5zZXJ0KHRbaV0pfSxlfSgpO1NGLlNwbGl0U3RyYXRlZ3lUcml2aWFsPUw3ZTt2YXIgazdlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxyKXtmb3IodD10LnNsaWNlKCksdGhpcy5jaG9vc2VGaXJzdFNwbGl0KHQscik7dC5sZW5ndGg+MDspdGhpcy5hZGROZXh0KHQscil9LGUucHJvdG90eXBlLmNob29zZUZpcnN0U3BsaXQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49MCxpPTAsbz10Lmxlbmd0aC0xLGE9dC5sZW5ndGgtMSxzPTE7czx0Lmxlbmd0aC0xO3MrKyl7dmFyIGw9dFtzXTtsLmJvdW5kcy54bD50W29dLmJvdW5kcy54bD9vPXM6bC5ib3VuZHMueGg8dFtuXS5ib3VuZHMueGgmJihuPXMpLGwuYm91bmRzLnlsPnRbYV0uYm91bmRzLnlsP2E9czpsLmJvdW5kcy55aDx0W2ldLmJvdW5kcy55aCYmKGk9cyl9dmFyIGM9TWF0aC5hYnModFtuXS5ib3VuZHMueGgtdFtvXS5ib3VuZHMueGwpLHU9TWF0aC5hYnModFtpXS5ib3VuZHMueWgtdFthXS5ib3VuZHMueWwpLGg9Yz51P1tuLG9dOltpLGFdLGY9aFswXSxwPWhbMV07Zj09PXAmJihmPTAscD10Lmxlbmd0aC0xKSxyWzBdLmluc2VydCh0LnNwbGljZShNYXRoLm1heChmLHApLDEpWzBdKSxyWzFdLmluc2VydCh0LnNwbGljZShNYXRoLm1pbihmLHApLDEpWzBdKX0sZS5wcm90b3R5cGUuYWRkTmV4dD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1udWxsLGk9bnVsbCxvPW51bGwsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgcz10W2FdLGw9clswXS51bmlvbkFyZWFEaWZmZXJlbmNlKHMuYm91bmRzKSxjPXJbMV0udW5pb25BcmVhRGlmZmVyZW5jZShzLmJvdW5kcyk7KGw8aXx8bj09bnVsbCkmJihuPWEsaT1sLG89clswXSksYzxpJiYobj1hLGk9YyxvPXJbMV0pfW8uaW5zZXJ0KHQuc3BsaWNlKG4sMSlbMF0pfSxlfSgpO1NGLlNwbGl0U3RyYXRlZ3lMaW5lYXI9azdlfSk7dmFyIExpdD1IKGdkPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFI3ZT13WHQoKSxON2U9NSxEN2U9bmV3IFI3ZS5TcGxpdFN0cmF0ZWd5TGluZWFyLFJmOyhmdW5jdGlvbihlKXtlW2UuUEFTUz0wXT0iUEFTUyIsZVtlLkZBSUw9MV09IkZBSUwiLGVbZS5QQVNTX0FORF9PVkVSV1JJVEU9Ml09IlBBU1NfQU5EX09WRVJXUklURSJ9KShSZj1nZC5RdWVyeVByZWRpY2F0ZVJlc3VsdHx8KGdkLlF1ZXJ5UHJlZGljYXRlUmVzdWx0PXt9KSk7ZnVuY3Rpb24gTUYoZSx0LHIpe3ZhciBuPTEvMCxpPTEvMCxvPTEvMDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIHM9dChhLmJvdW5kcyxlKSxsPXIoYS5ib3VuZHMsZSk7cmV0dXJuIGEudmFsdWUhPW51bGw/czxuPyhuPXMsaT1zLG89bCxSZi5QQVNTX0FORF9PVkVSV1JJVEUpOnM9PT1uP1JmLlBBU1M6UmYuRkFJTDpzPm8/UmYuRkFJTDooaT1NYXRoLm1pbihzLGkpLG89TWF0aC5tYXgobCxvKSxSZi5QQVNTKX19Z2QuY3JlYXRlTWluaW1pemluZ05vZGVQcmVkaWNhdGU9TUY7ZnVuY3Rpb24gSWl0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQobi5ib3VuZHMsZSktdChyLmJvdW5kcyxlKX19Z2QuY3JlYXRlTm9kZVNvcnQ9SWl0O3ZhciBPN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dD09PXZvaWQgMCYmKHQ9TjdlKSxyPT09dm9pZCAwJiYocj1EN2UpLHRoaXMubWF4Tm9kZUNoaWxkcmVuPXQsdGhpcy5zcGxpdFN0cmF0ZWd5PXIsdGhpcy5yb290PW5ldyBFRighMCksdGhpcy5zaXplPTB9cmV0dXJuIGUucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290fSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMucm9vdD1uZXcgRUYoITApLHRoaXMuc2l6ZT0wfSxlLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49dGhpcy5yb290OyFuLmxlYWY7KW49bi5zdWJ0cmVlKHQpO3ZhciBpPUVGLnZhbHVlTm9kZSh0LHIpO2ZvcihuLmluc2VydChpKSx0aGlzLnNpemUrPTE7bi5vdmVyZmxvdyh0aGlzLm1heE5vZGVDaGlsZHJlbik7KW49bi5zcGxpdCh0aGlzLnNwbGl0U3RyYXRlZ3kpLG4ucGFyZW50PT1udWxsJiYodGhpcy5yb290PW4pO3JldHVybiBpfSxlLnByb3RvdHlwZS5sb2NhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVlcnkoZnVuY3Rpb24ocil7cmV0dXJuIHIuY29udGFpbnModCl9KX0sZS5wcm90b3R5cGUubG9jYXRlTmVhcmVzdD1mdW5jdGlvbih0KXt2YXIgcj1NRih0LFFhLmRpc3RhbmNlU3F1YXJlZFRvTmVhckVkZ2UsUWEuZGlzdGFuY2VTcXVhcmVkVG9GYXJFZGdlKSxuPXRoaXMucXVlcnlOb2RlcyhyKTtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkudmFsdWV9KX0sZS5wcm90b3R5cGUubG9jYXRlTmVhcmVzdFg9ZnVuY3Rpb24odCl7dmFyIHI9TUYodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVgsUWEuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVgpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLnNvcnQoSWl0KHQsUWEuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VZKSksbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkudmFsdWV9KX0sZS5wcm90b3R5cGUubG9jYXRlTmVhcmVzdFk9ZnVuY3Rpb24odCl7dmFyIHI9TUYodCxRYS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVksUWEuYWJzb2x1dGVEaXN0YW5jZVRvRmFyRWRnZVkpLG49dGhpcy5xdWVyeU5vZGVzKHIpO3JldHVybiBuLnNvcnQoSWl0KHQsUWEuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKSksbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkudmFsdWV9KX0sZS5wcm90b3R5cGUuaW50ZXJzZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBCb3VuZHMocix0KX0pfSxlLnByb3RvdHlwZS5pbnRlcnNlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiBRYS5pc0JvdW5kc092ZXJsYXBYKHIsdCl9KX0sZS5wcm90b3R5cGUuaW50ZXJzZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5xdWVyeShmdW5jdGlvbihyKXtyZXR1cm4gUWEuaXNCb3VuZHNPdmVybGFwWShyLHQpfSl9LGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQpe3ZhciByPVtdO2lmKHRoaXMucm9vdC5ib3VuZHMhPW51bGwmJiF0KHRoaXMucm9vdC5ib3VuZHMpKXJldHVybiByO2Zvcih2YXIgbj1bdGhpcy5yb290XTtuLmxlbmd0aD4wOylmb3IodmFyIGk9bi5zaGlmdCgpLG89MDtvPGkuZW50cmllcy5sZW5ndGg7bysrKXt2YXIgYT1pLmVudHJpZXNbb107dChhLmJvdW5kcykmJihpLmxlYWY/ci5wdXNoKGEudmFsdWUpOm4ucHVzaChhKSl9cmV0dXJuIHJ9LGUucHJvdG90eXBlLnF1ZXJ5Tm9kZXM9ZnVuY3Rpb24odCl7dmFyIHI9W107aWYodGhpcy5yb290LmJvdW5kcyE9bnVsbCYmdCh0aGlzLnJvb3QpPT09UmYuRkFJTClyZXR1cm4gcjtmb3IodmFyIG49W3RoaXMucm9vdF07bi5sZW5ndGg+MDspZm9yKHZhciBpPW4uc2hpZnQoKSxvPTA7bzxpLmVudHJpZXMubGVuZ3RoO28rKyl7dmFyIGE9aS5lbnRyaWVzW29dLHM9dChhKTtzPT09UmYuUEFTU19BTkRfT1ZFUldSSVRFJiYocj1bXSksKHM9PT1SZi5QQVNTfHxzPT09UmYuUEFTU19BTkRfT1ZFUldSSVRFKSYmKGkubGVhZj9yLnB1c2goYSk6bi5wdXNoKGEpKX1yZXR1cm4gcn0sZX0oKTtnZC5SVHJlZT1PN2U7dmFyIEVGPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt0aGlzLmxlYWY9dCx0aGlzLmJvdW5kcz1udWxsLHRoaXMuZW50cmllcz1bXSx0aGlzLnBhcmVudD1udWxsLHRoaXMudmFsdWU9bnVsbH1yZXR1cm4gZS52YWx1ZU5vZGU9ZnVuY3Rpb24odCxyKXt2YXIgbj1uZXcgZSghMCk7cmV0dXJuIG4uYm91bmRzPXQsbi52YWx1ZT1yLG59LGUucHJvdG90eXBlLm92ZXJmbG93PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVudHJpZXMubGVuZ3RoPnR9LGUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMucHVzaCh0KSx0LnBhcmVudD10aGlzO2Zvcih2YXIgcj10aGlzO3IhPW51bGw7KXIuYm91bmRzPVFhLnVuaW9uQWxsKFtyLmJvdW5kcyx0LmJvdW5kc10pLHI9ci5wYXJlbnQ7cmV0dXJuIHRoaXN9LGUucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmVudHJpZXMuaW5kZXhPZih0KTtpZihyPj0wKXt0aGlzLmVudHJpZXMuc3BsaWNlKHIsMSk7Zm9yKHZhciBuPXRoaXM7biE9bnVsbDspbi5ib3VuZHM9UWEudW5pb25BbGwobi5lbnRyaWVzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS5ib3VuZHN9KSksbj1uLnBhcmVudH1yZXR1cm4gdGhpc30sZS5wcm90b3R5cGUuc3VidHJlZT1mdW5jdGlvbih0KXtmb3IodmFyIHI9MS8wLG49bnVsbCxpPTA7aTx0aGlzLmVudHJpZXMubGVuZ3RoO2krKyl7dmFyIG89dGhpcy5lbnRyaWVzW2ldLGE9by51bmlvbkFyZWFEaWZmZXJlbmNlKHQpOyhhPHJ8fGE9PT1yJiZuIT1udWxsJiZvLmVudHJpZXMubGVuZ3RoPG4uZW50cmllcy5sZW5ndGgpJiYobj1vKX1yZXR1cm4gbn0sZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCl7dGhpcy5wYXJlbnQhPW51bGwmJnRoaXMucGFyZW50LnJlbW92ZSh0aGlzKTt2YXIgcj1bbmV3IGUodGhpcy5sZWFmKSxuZXcgZSh0aGlzLmxlYWYpXTt0LnNwbGl0KHRoaXMuZW50cmllcyxyKTt2YXIgbj10aGlzLnBhcmVudCE9bnVsbD90aGlzLnBhcmVudDpuZXcgZSghMSk7cmV0dXJuIG4uaW5zZXJ0KHJbMF0pLG4uaW5zZXJ0KHJbMV0pLG4ubGVhZj0hMSxufSxlLnByb3RvdHlwZS51bmlvbkFyZWFEaWZmZXJlbmNlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyhRYS51bmlvbih0aGlzLmJvdW5kcyx0KS5hcmVhKCktdGhpcy5ib3VuZHMuYXJlYSgpKX0sZS5wcm90b3R5cGUubWF4RGVwdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZWFmPzE6MSt0aGlzLmVudHJpZXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1heERlcHRoKCl9KS5yZWR1Y2UoZnVuY3Rpb24odCxyKXtyZXR1cm4gTWF0aC5tYXgodCxyKX0pfSxlfSgpO2dkLlJUcmVlTm9kZT1FRjt2YXIgUWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuLGkpe3RoaXMueGw9dCx0aGlzLnlsPXIsdGhpcy54aD1uLHRoaXMueWg9aSx0aGlzLndpZHRoPXRoaXMueGgtdGhpcy54bCx0aGlzLmhlaWdodD10aGlzLnloLXRoaXMueWx9cmV0dXJuIGUueHl3aD1mdW5jdGlvbih0LHIsbixpKXtyZXR1cm4gbmV3IGUodCxyLHQrbixyK2kpfSxlLmVudGl0eUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodC54LHQueSx0LngrdC53aWR0aCx0LnkrdC5oZWlnaHQpfSxlLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gZS5wb2ludFBhaXIodC50b3BMZWZ0LHQuYm90dG9tUmlnaHQpfSxlLnBvaW50UGFpcj1mdW5jdGlvbih0LHIpe3JldHVybiBuZXcgZShNYXRoLm1pbih0Lngsci54KSxNYXRoLm1pbih0Lnksci55KSxNYXRoLm1heCh0Lngsci54KSxNYXRoLm1heCh0Lnksci55KSl9LGUucG9pbnRzPWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJuZWVkIGF0IGxlYXN0IDIgcG9pbnRzIHRvIGNyZWF0ZSBib3VuZHMiKTt2YXIgcj10Lm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS54fSksbj10Lm1hcChmdW5jdGlvbihpKXtyZXR1cm4gaS55fSk7cmV0dXJuIG5ldyBlKHIucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWluKGksbyl9KSxuLnJlZHVjZShmdW5jdGlvbihpLG8pe3JldHVybiBNYXRoLm1pbihpLG8pfSksci5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gTWF0aC5tYXgoaSxvKX0pLG4ucmVkdWNlKGZ1bmN0aW9uKGksbyl7cmV0dXJuIE1hdGgubWF4KGksbyl9KSl9LGUudW5pb249ZnVuY3Rpb24odCxyKXtyZXR1cm4gbmV3IGUoTWF0aC5taW4odC54bCxyLnhsKSxNYXRoLm1pbih0LnlsLHIueWwpLE1hdGgubWF4KHQueGgsci54aCksTWF0aC5tYXgodC55aCxyLnloKSl9LGUudW5pb25BbGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5maWx0ZXIoZnVuY3Rpb24ocil7cmV0dXJuIHIhPW51bGx9KSx0Lmxlbmd0aD09PTA/bnVsbDp0LnJlZHVjZShmdW5jdGlvbihyLG4pe3JldHVybiBlLnVuaW9uKHIsbil9KX0sZS5pc0JvdW5kc092ZXJsYXBCb3VuZHM9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5pc0JvdW5kc092ZXJsYXBYKHQscikmJmUuaXNCb3VuZHNPdmVybGFwWSh0LHIpfSxlLmlzQm91bmRzT3ZlcmxhcFg9ZnVuY3Rpb24odCxyKXtyZXR1cm4hKHQueGg8ci54bCkmJiEodC54bD5yLnhoKX0sZS5pc0JvdW5kc092ZXJsYXBZPWZ1bmN0aW9uKHQscil7cmV0dXJuISh0LnloPHIueWwpJiYhKHQueWw+ci55aCl9LGUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYPWZ1bmN0aW9uKHQscil7dmFyIG49dC53aWR0aC8yLGk9dC54bCtuO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhyLngtaSktbiwwKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVk9ZnVuY3Rpb24odCxyKXt2YXIgbj10LmhlaWdodC8yLGk9dC55bCtuO3JldHVybiBNYXRoLm1heChNYXRoLmFicyhyLnktaSktbiwwKX0sZS5hYnNvbHV0ZURpc3RhbmNlVG9GYXJFZGdlWD1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYWJzb2x1dGVEaXN0YW5jZVRvTmVhckVkZ2VYKHQscik7cmV0dXJuIG49PT0wPzA6bit0LndpZHRofSxlLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VZPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkodCxyKTtyZXR1cm4gbj09PTA/MDpuK3QuaGVpZ2h0fSxlLmRpc3RhbmNlU3F1YXJlZFRvTmVhckVkZ2U9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb05lYXJFZGdlWCh0LHIpLGk9ZS5hYnNvbHV0ZURpc3RhbmNlVG9OZWFyRWRnZVkodCxyKTtyZXR1cm4gbipuK2kqaX0sZS5kaXN0YW5jZVNxdWFyZWRUb0ZhckVkZ2U9ZnVuY3Rpb24odCxyKXt2YXIgbj1lLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VYKHQsciksaT1lLmFic29sdXRlRGlzdGFuY2VUb0ZhckVkZ2VZKHQscik7cmV0dXJuIG4qbitpKml9LGUucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmVhQ2FjaGVkPT1udWxsJiYodGhpcy5hcmVhQ2FjaGVkPSh0aGlzLnhoLXRoaXMueGwpKih0aGlzLnloLXRoaXMueWwpKSx0aGlzLmFyZWFDYWNoZWR9LGUucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnhsPD10LngmJnRoaXMueGg+PXQueCYmdGhpcy55bDw9dC55JiZ0aGlzLnloPj10Lnl9LGV9KCk7Z2QuUlRyZWVCb3VuZHM9UWF9KTt2YXIgRVh0PUgoX2Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9kLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1h0PShFcigpLFV0KE1yKSksejdlPU9lKCksWGc9RmUoKSxGN2U9SWYoKTtfZC5JU3RhY2tpbmdPcmRlcj1GN2UubWFrZUVudW0oWyJ0b3Bkb3duIiwiYm90dG9tdXAiXSk7dmFyIE1YdD13aW5kb3cuTWF0aDtmdW5jdGlvbiBCN2UoZSx0LHIsbil7bj09PXZvaWQgMCYmKG49ImJvdHRvbXVwIik7dmFyIGk9U1h0Lm1hcCgpLG89U1h0Lm1hcCgpLGE9bmV3IFhnLk1hcDtuPT09InRvcGRvd24iJiYoZT1lLnNsaWNlKCksZS5yZXZlcnNlKCkpO2Zvcih2YXIgcz0wLGw9ZTtzPGwubGVuZ3RoO3MrKyl7Zm9yKHZhciBjPWxbc10sdT1uZXcgWGcuTWFwLGg9Yy5kYXRhKCksZj1oLmxlbmd0aCxwPTA7cDxmO3ArKyl7dmFyIGQ9aFtwXSxnPXQoZCxwLGMpLF89X2Qubm9ybWFsaXplS2V5KGcpLHk9K3IoZCxwLGMpLHg9dm9pZCAwLGI9eT49MD9pOm87Yi5oYXMoXyk/KHg9Yi5nZXQoXyksYi5zZXQoXyx4K3kpKTooeD0wLGIuc2V0KF8seSkpLHUuc2V0KF8se29mZnNldDp4LHZhbHVlOnksYXhpc1ZhbHVlOmcsb3JpZ2luYWxEYXR1bTpkLG9yaWdpbmFsRGF0YXNldDpjLG9yaWdpbmFsSW5kZXg6cH0pfWEuc2V0KGMsdSl9cmV0dXJuIGF9X2Quc3RhY2s9QjdlO2Z1bmN0aW9uIEg3ZShlKXt2YXIgdD1uZXcgWGcuTWFwLHI9bmV3IFhnLk1hcDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uZm9yRWFjaChmdW5jdGlvbihpLG8pe3ZhciBhPWkub2Zmc2V0K2kudmFsdWUscz1YZy5NYXRoLm1heChbYSxpLm9mZnNldF0saS5vZmZzZXQpLGw9WGcuTWF0aC5taW4oW2EsaS5vZmZzZXRdLGkub2Zmc2V0KSxjPWkuYXhpc1ZhbHVlO3QuaGFzKG8pP3QuZ2V0KG8pLmV4dGVudDxzJiZ0LnNldChvLHtleHRlbnQ6cyxheGlzVmFsdWU6YyxzdGFja2VkRGF0dW06aX0pOnQuc2V0KG8se2V4dGVudDpzLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSksci5oYXMobyk/ci5nZXQobykuZXh0ZW50PmwmJnIuc2V0KG8se2V4dGVudDpsLGF4aXNWYWx1ZTpjLHN0YWNrZWREYXR1bTppfSk6ci5zZXQobyx7ZXh0ZW50OmwsYXhpc1ZhbHVlOmMsc3RhY2tlZERhdHVtOml9KX0pfSkse21heGltdW1FeHRlbnRzOnQsbWluaW11bUV4dGVudHM6cn19X2Quc3RhY2tlZEV4dGVudHM9SDdlO2Z1bmN0aW9uIFY3ZShlLHQscil7dmFyIG49W107ZS5mb3JFYWNoKGZ1bmN0aW9uKGEscyl7Zm9yKHZhciBsPXMuZGF0YSgpLGM9bC5sZW5ndGgsdT0wO3U8Yzt1Kyspe3ZhciBoPWxbdV07aWYoIShyIT1udWxsJiYhcihoLHUscykpKXt2YXIgZj1hLmdldChfZC5ub3JtYWxpemVLZXkodChoLHUscykpKTtuLnB1c2goZi52YWx1ZStmLm9mZnNldCl9fX0pO3ZhciBpPVhnLk1hdGgubWF4KG4sMCksbz1YZy5NYXRoLm1pbihuLDApO3JldHVybltNWHQubWluKG8sMCksTVh0Lm1heCgwLGkpXX1fZC5zdGFja2VkRXh0ZW50PVY3ZTtfZC5ub3JtYWxpemVLZXk9ejdlLm1lbW9pemUoZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKX0pfSk7dmFyIFhBPUgoVEY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFRGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtURi5TSE9XX1dBUk5JTkdTPSEwO1RGLkFERF9USVRMRV9FTEVNRU5UUz0hMH0pO3ZhciBDRj1IKGdTPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShnUywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFU3ZT1YQSgpO2Z1bmN0aW9uIFRYdChlKXshVTdlLlNIT1dfV0FSTklOR1N8fGNvbnNvbGUud2FybihlKX1nUy53YXJuPVRYdDtmdW5jdGlvbiBDWHQoZSx0KXtmb3IodmFyIHI9W10sbj0yO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTJdPWFyZ3VtZW50c1tuXTtyZXR1cm4gdD09PTA/KGUociksLTEpOndpbmRvdy5zZXRUaW1lb3V0KGUsdCxyKX1nUy5zZXRUaW1lb3V0PUNYdDtmdW5jdGlvbiBxN2UoZSx0LHIpe3ZhciBuPW51bGwsaT1bXSxvPWZ1bmN0aW9uKCl7dC5hcHBseShyLGkpfTtyZXR1cm4gZnVuY3Rpb24oKXtpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KG4pLG49Q1h0KG8sZSl9fWdTLmRlYm91bmNlPXE3ZTtmdW5jdGlvbiBHN2UoZSx0LHIpe3I9PT12b2lkIDAmJihyPSIiKSxUWHQoIk1ldGhvZCAiK2UrIiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIHZlcnNpb24gIit0KyIuIFBsZWFzZSByZWZlciB0byB0aGUgcmVsZWFzZSBub3Rlcy4gIityKX1nUy5kZXByZWNhdGVkPUc3ZX0pO3ZhciBBWHQ9SChraXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGtpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFc3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3RoaXMuZW50cnlJbmRleD10LHRoaXMuZXhpdEluZGV4PXQsdGhpcy5taW5JbmRleD10LHRoaXMubWF4SW5kZXg9dCx0aGlzLmJ1Y2tldFZhbHVlPXIsdGhpcy5taW5WYWx1ZT1uLHRoaXMubWF4VmFsdWU9bn1yZXR1cm4gZS5wcm90b3R5cGUuaXNJbkJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gdD09dGhpcy5idWNrZXRWYWx1ZX0sZS5wcm90b3R5cGUuYWRkVG9CdWNrZXQ9ZnVuY3Rpb24odCxyKXt0PHRoaXMubWluVmFsdWUmJih0aGlzLm1pblZhbHVlPXQsdGhpcy5taW5JbmRleD1yKSx0PnRoaXMubWF4VmFsdWUmJih0aGlzLm1heFZhbHVlPXQsdGhpcy5tYXhJbmRleD1yKSx0aGlzLmV4aXRJbmRleD1yfSxlLnByb3RvdHlwZS5nZXRVbmlxdWVJbmRpY2VzPWZ1bmN0aW9uKCl7dmFyIHQ9W3RoaXMuZW50cnlJbmRleCx0aGlzLm1heEluZGV4LHRoaXMubWluSW5kZXgsdGhpcy5leGl0SW5kZXhdO3JldHVybiB0LmZpbHRlcihmdW5jdGlvbihyLG4pe3JldHVybiBuPT0wfHxyIT10W24tMV19KX0sZX0oKTtraXQuQnVja2V0PVc3ZX0pO3ZhciBOaXQ9SChSaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFJpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFk3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0eXBlb2Ygd2luZG93LlNldD09ImZ1bmN0aW9uIj90aGlzLl9lczZTZXQ9bmV3IHdpbmRvdy5TZXQ6dGhpcy5fdmFsdWVzPVtdLHRoaXMuc2l6ZT0wfXJldHVybiBlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VzNlNldCE9bnVsbD8odGhpcy5fZXM2U2V0LmFkZCh0KSx0aGlzLnNpemU9dGhpcy5fZXM2U2V0LnNpemUsdGhpcyk6KHRoaXMuaGFzKHQpfHwodGhpcy5fdmFsdWVzLnB1c2godCksdGhpcy5zaXplPXRoaXMuX3ZhbHVlcy5sZW5ndGgpLHRoaXMpfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2U2V0IT1udWxsKXt2YXIgcj10aGlzLl9lczZTZXQuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9dGhpcy5fZXM2U2V0LnNpemUscn12YXIgbj10aGlzLl92YWx1ZXMuaW5kZXhPZih0KTtyZXR1cm4gbiE9PS0xPyh0aGlzLl92YWx1ZXMuc3BsaWNlKG4sMSksdGhpcy5zaXplPXRoaXMuX3ZhbHVlcy5sZW5ndGgsITApOiExfSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VzNlNldCE9bnVsbD90aGlzLl9lczZTZXQuaGFzKHQpOnRoaXMuX3ZhbHVlcy5pbmRleE9mKHQpIT09LTF9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO2lmKHRoaXMuX2VzNlNldCE9bnVsbCl7dmFyIGk9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdC5jYWxsKHIsbyxhLG4pfTt0aGlzLl9lczZTZXQuZm9yRWFjaChpLHIpO3JldHVybn10aGlzLl92YWx1ZXMuZm9yRWFjaChmdW5jdGlvbihvKXt0LmNhbGwocixvLG8sbil9KX0sZX0oKTtSaXQuU2V0PVk3ZX0pO3ZhciBQWHQ9SChEaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGo3ZT0oZGUoKSxVdChwZSkpLFg3ZT1OaXQoKSwkN2U9ZnVuY3Rpb24oZSl7ajdlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5jYWxsQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPXRoaXMsbj1bXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyluW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe28uYXBwbHkocixuKX0pLHRoaXN9LHR9KFg3ZS5TZXQpO0RpdC5DYWxsYmFja1NldD0kN2V9KTt2YXIgSVh0PUgoT2l0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPaXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciAkZz1MaXQoKSxLN2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fZW50aXRpZXM9W10sdGhpcy5fcnRyZWU9bmV3ICRnLlJUcmVlfXJldHVybiBlLnByb3RvdHlwZS5hZGRBbGw9ZnVuY3Rpb24odCxyLG4pe2lmKHRoaXMuX2VudGl0aWVzPXRoaXMuX2VudGl0aWVzLmNvbmNhdCh0KSxuIT09dm9pZCAwKWZvcih2YXIgaT0kZy5SVHJlZUJvdW5kcy5ib3VuZHMobiksbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9JGcuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKHIoYSkpOyRnLlJUcmVlQm91bmRzLmlzQm91bmRzT3ZlcmxhcEJvdW5kcyhpLHMpJiZ0aGlzLl9ydHJlZS5pbnNlcnQocyxhKX1lbHNlIGZvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10W29dLHM9JGcuUlRyZWVCb3VuZHMuZW50aXR5Qm91bmRzKHIoYSkpO3RoaXMuX3J0cmVlLmluc2VydChzLGEpfX0sZS5wcm90b3R5cGUuZW50aXR5TmVhcmVzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdCh0KS5wb3AoKX0sZS5wcm90b3R5cGUuZW50aXR5TmVhcmVzdFg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmxvY2F0ZU5lYXJlc3RYKHQpLnBvcCgpfSxlLnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0WT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUubG9jYXRlTmVhcmVzdFkodCkucG9wKCl9LGUucHJvdG90eXBlLmVudGl0aWVzSW5Cb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3J0cmVlLmludGVyc2VjdCgkZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSxlLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WCgkZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSxlLnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcnRyZWUuaW50ZXJzZWN0WSgkZy5SVHJlZUJvdW5kcy5lbnRpdHlCb3VuZHModCkpfSxlLnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbnRpdGllc30sZX0oKTtPaXQuRW50aXR5U3RvcmU9SzdlfSk7dmFyIExYdD1IKHppdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoeml0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWjdlPVBpdCgpLEo3ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0eXBlb2Ygd2luZG93Lk1hcD09ImZ1bmN0aW9uIj90aGlzLl9lczZNYXA9bmV3IHdpbmRvdy5NYXA6dGhpcy5fa2V5VmFsdWVQYWlycz1bXX1yZXR1cm4gZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQscil7aWYoWjdlLmlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiTmFOIG1heSBub3QgYmUgdXNlZCBhcyBhIGtleSB0byB0aGUgTWFwIik7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuc2V0KHQsciksdGhpcztmb3IodmFyIG49MDtuPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO24rKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW25dLmtleT09PXQpcmV0dXJuIHRoaXMuX2tleVZhbHVlUGFpcnNbbl0udmFsdWU9cix0aGlzO3JldHVybiB0aGlzLl9rZXlWYWx1ZVBhaXJzLnB1c2goe2tleTp0LHZhbHVlOnJ9KSx0aGlzfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuZ2V0KHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlyc1tyXS52YWx1ZX0sZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2VzNk1hcCE9bnVsbClyZXR1cm4gdGhpcy5fZXM2TWFwLmhhcyh0KTtmb3IodmFyIHI9MDtyPHRoaXMuX2tleVZhbHVlUGFpcnMubGVuZ3RoO3IrKylpZih0aGlzLl9rZXlWYWx1ZVBhaXJzW3JdLmtleT09PXQpcmV0dXJuITA7cmV0dXJuITF9LGUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzO2lmKHRoaXMuX2VzNk1hcCE9bnVsbCl7dmFyIGk9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdC5jYWxsKHIsbyxhLG4pfTt0aGlzLl9lczZNYXAuZm9yRWFjaChpLHIpO3JldHVybn10aGlzLl9rZXlWYWx1ZVBhaXJzLmZvckVhY2goZnVuY3Rpb24obyl7dC5jYWxsKHIsby52YWx1ZSxvLmtleSxuKX0pfSxlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXM2TWFwIT1udWxsKXJldHVybiB0aGlzLl9lczZNYXAuZGVsZXRlKHQpO2Zvcih2YXIgcj0wO3I8dGhpcy5fa2V5VmFsdWVQYWlycy5sZW5ndGg7cisrKWlmKHRoaXMuX2tleVZhbHVlUGFpcnNbcl0ua2V5PT09dClyZXR1cm4gdGhpcy5fa2V5VmFsdWVQYWlycy5zcGxpY2UociwxKSwhMDtyZXR1cm4hMX0sZX0oKTt6aXQuTWFwPUo3ZX0pO3ZhciBrWHQ9SChGaXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEZpdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZnVuY3Rpb24gUTdlKCl7Zm9yKHZhciBlPVtdLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWVbdF09YXJndW1lbnRzW3RdO2Zvcih2YXIgcj17fSxuPTAsaT1lO248aS5sZW5ndGg7bisrKWZvcih2YXIgbz1pW25dLGE9T2JqZWN0LmtleXMobykscz0wLGw9YTtzPGwubGVuZ3RoO3MrKyl7dmFyIGM9bFtzXTtyW2NdPW9bY119cmV0dXJuIHJ9Rml0LmFzc2lnbj1RN2V9KTt2YXIgRFh0PUgoQUY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEFGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQml0PUZlKCksUlh0PSJfX1Bsb3R0YWJsZV9DbGllbnRUcmFuc2xhdG9yIjtmdW5jdGlvbiB0emUoZSl7dmFyIHQ9ZS5yb290KCkucm9vdEVsZW1lbnQoKS5ub2RlKCkscj10W1JYdF07cmV0dXJuIHI9PW51bGwmJihyPW5ldyBOWHQodCksdFtSWHRdPXIpLHJ9QUYuZ2V0VHJhbnNsYXRvcj10emU7dmFyIE5YdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dGhpcy5fcm9vdEVsZW1lbnQ9dH1yZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZVBvc2l0aW9uPWZ1bmN0aW9uKHQscil7dmFyIG49e3g6dCx5OnJ9LGk9Qml0Lk1hdGguZ2V0Q3VtdWxhdGl2ZVRyYW5zZm9ybSh0aGlzLl9yb290RWxlbWVudCk7aWYoaT09bnVsbClyZXR1cm4gbjt2YXIgbz1CaXQuTWF0aC5hcHBseVRyYW5zZm9ybShpLG4pO3JldHVybiBvfSxlLmlzRXZlbnRJbnNpZGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gQml0LkRPTS5jb250YWlucyh0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSxyLnRhcmdldCl9LGV9KCk7QUYuVHJhbnNsYXRvcj1OWHR9KTt2YXIgRmU9SChxbz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocW8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBLZz0oZGUoKSxVdChwZSkpLGV6ZT1mWHQoKTtxby5BcnJheT1lemU7dmFyIHJ6ZT1tWHQoKTtxby5Db2xvcj1yemU7dmFyIG56ZT1BaXQoKTtxby5ET009bnplO3ZhciBpemU9UGl0KCk7cW8uTWF0aD1pemU7dmFyIG96ZT1MaXQoKTtxby5SVHJlZT1vemU7dmFyIGF6ZT1FWHQoKTtxby5TdGFja2luZz1hemU7dmFyIHN6ZT1DRigpO3FvLldpbmRvdz1zemU7S2cuX19leHBvcnRTdGFyKEFYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoUFh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihZZygpLHFvKTtLZy5fX2V4cG9ydFN0YXIoSVh0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihMWHQoKSxxbyk7S2cuX19leHBvcnRTdGFyKGtYdCgpLHFvKTtLZy5fX2V4cG9ydFN0YXIoTml0KCkscW8pO0tnLl9fZXhwb3J0U3RhcihEWHQoKSxxbyl9KTt2YXIgVml0PUgoJEE9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT1h0PUZlKCksSGl0PVBGKCksbHplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7SGl0LmZsdXNoKCl9LGV9KCk7JEEuSW1tZWRpYXRlPWx6ZTt2YXIgY3plPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7T1h0LkRPTS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVQb2x5ZmlsbChIaXQuZmx1c2gpfSxlfSgpOyRBLkFuaW1hdGlvbkZyYW1lPWN6ZTt2YXIgdXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX3RpbWVvdXRNc2VjPU9YdC5ET00uU0NSRUVOX1JFRlJFU0hfUkFURV9NSUxMSVNFQ09ORFN9cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3NldFRpbWVvdXQoSGl0LmZsdXNoLHRoaXMuX3RpbWVvdXRNc2VjKX0sZX0oKTskQS5UaW1lb3V0PXV6ZX0pO3ZhciBQRj1IKHp1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6dSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF9TPUZlKCksaHplPUlmKCksSUY9Vml0KCksWkE9bmV3IF9TLlNldCxVaXQ9bmV3IF9TLlNldCxMRj0hMSxxaXQ9ITE7enUuUG9saWN5PWh6ZS5tYWtlRW51bShbImltbWVkaWF0ZSIsImFuaW1hdGlvbkZyYW1lIiwidGltZW91dCJdKTt2YXIgS0E9bmV3IElGLkFuaW1hdGlvbkZyYW1lO2Z1bmN0aW9uIGZ6ZShlKXtpZihlPT1udWxsKXJldHVybiBLQTtzd2l0Y2goZSl7Y2FzZSB6dS5Qb2xpY3kuaW1tZWRpYXRlOktBPW5ldyBJRi5JbW1lZGlhdGU7YnJlYWs7Y2FzZSB6dS5Qb2xpY3kuYW5pbWF0aW9uRnJhbWU6S0E9bmV3IElGLkFuaW1hdGlvbkZyYW1lO2JyZWFrO2Nhc2UgenUuUG9saWN5LnRpbWVvdXQ6S0E9bmV3IElGLlRpbWVvdXQ7YnJlYWs7ZGVmYXVsdDpfUy5XaW5kb3cud2FybigiVW5yZWNvZ25pemVkIHJlbmRlclBvbGljeTogIitlKX19enUucmVuZGVyUG9saWN5PWZ6ZTtmdW5jdGlvbiBwemUoZSl7cWl0JiZfUy5XaW5kb3cud2FybigiUmVnaXN0ZXJlZCB0byByZW5kZXIgd2hpbGUgb3RoZXIgY29tcG9uZW50cyBhcmUgZmx1c2hpbmc6IHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQiKSxaQS5hZGQoZSksRlh0KCl9enUucmVnaXN0ZXJUb1JlbmRlcj1wemU7ZnVuY3Rpb24gelh0KGUpe1VpdC5hZGQoZSksWkEuYWRkKGUpLEZYdCgpfXp1LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyPXpYdDtmdW5jdGlvbiBkemUoZSl7elh0KGUpfXp1LnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0PWR6ZTtmdW5jdGlvbiBGWHQoKXtMRnx8KExGPSEwLEtBLnJlbmRlcigpKX1mdW5jdGlvbiBtemUoKXtpZihMRil7VWl0LmZvckVhY2goZnVuY3Rpb24odCl7cmV0dXJuIHQuY29tcHV0ZUxheW91dCgpfSksWkEuZm9yRWFjaChmdW5jdGlvbih0KXtyZXR1cm4gdC5yZW5kZXIoKX0pLHFpdD0hMDt2YXIgZT1uZXcgX1MuU2V0O1pBLmZvckVhY2goZnVuY3Rpb24odCl7dHJ5e3QucmVuZGVySW1tZWRpYXRlbHkoKX1jYXRjaChyKXt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IHJ9LDApLGUuYWRkKHQpfX0pLFVpdD1uZXcgX1MuU2V0LFpBPWUsTEY9ITEscWl0PSExfX16dS5mbHVzaD1temV9KTt2YXIga2M9SChKQT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSkEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBCWHQ9KEVyKCksVXQoTXIpKSxrRj1QRigpLHlTPUZlKCksZ3plPU9lKCksSFh0PVlnKCksVlh0PUlmKCk7SkEuWEFsaWdubWVudD1WWHQubWFrZUVudW0oWyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSk7SkEuWUFsaWdubWVudD1WWHQubWFrZUVudW0oWyJ0b3AiLCJjZW50ZXIiLCJib3R0b20iXSk7dmFyIF96ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9vdmVyZmxvd0hpZGRlbj0hMSx0aGlzLl9vcmlnaW49e3g6MCx5OjB9LHRoaXMuX3hBbGlnbm1lbnQ9ImxlZnQiLHRoaXMuX3lBbGlnbm1lbnQ9InRvcCIsdGhpcy5faXNTZXR1cD0hMSx0aGlzLl9pc0FuY2hvcmVkPSExLHRoaXMuX2Nzc0NsYXNzZXM9bmV3IHlTLlNldCx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25BbmNob3JDYWxsYmFja3M9bmV3IHlTLkNhbGxiYWNrU2V0LHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzPW5ldyB5Uy5DYWxsYmFja1NldCx0aGlzLl9jc3NDbGFzc2VzLmFkZCgiY29tcG9uZW50Iil9cmV0dXJuIGUucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbih0KXtpZih0PUhYdC5jb2VyY2VFeHRlcm5hbEQzKHQpLHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHJldXNlIGRlc3Ryb3koKS1lZCBDb21wb25lbnRzISIpO3JldHVybiB0aGlzLmlzUm9vdCgpJiYodGhpcy5fcm9vdEVsZW1lbnQ9dCx0aGlzLl9yb290RWxlbWVudC5jbGFzc2VkKCJwbG90dGFibGUiLCEwKSksdGhpcy5fZWxlbWVudCE9bnVsbD90Lm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50Lm5vZGUoKSk6KHRoaXMuX2VsZW1lbnQ9dC5hcHBlbmQoImRpdiIpLHRoaXMuX3NldHVwKCkpLHRoaXMuX2lzQW5jaG9yZWQ9ITAsdGhpcy5fb25BbmNob3JDYWxsYmFja3MuY2FsbENhbGxiYWNrcyh0aGlzKSx0aGlzfSxlLnByb3RvdHlwZS5vbkFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdCh0aGlzKSx0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9vbkFuY2hvckNhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9pc1NldHVwfHwodGhpcy5fY3NzQ2xhc3Nlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe3QuX2VsZW1lbnQuY2xhc3NlZChyLCEwKX0pLHRoaXMuX2Nzc0NsYXNzZXM9bmV3IHlTLlNldCx0aGlzLl9iYWNrZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX2NvbnRlbnQ9dGhpcy5fZWxlbWVudC5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoImNvbnRlbnQiLCEwKSx0aGlzLl9mb3JlZ3JvdW5kQ29udGFpbmVyPXRoaXMuX2VsZW1lbnQuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJmb3JlZ3JvdW5kLWNvbnRhaW5lciIsITApLHRoaXMuX292ZXJmbG93SGlkZGVuP3RoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LWhpZGRlbiIsITApOnRoaXMuX2NvbnRlbnQuY2xhc3NlZCgiY29tcG9uZW50LW92ZXJmbG93LXZpc2libGUiLCEwKSx0aGlzLl9pc1NldHVwPSEwKX0sZS5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24odCxyKXtyZXR1cm57bWluV2lkdGg6MCxtaW5IZWlnaHQ6MH19LGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24odCxyLG4pe2lmKHQ9PW51bGx8fHI9PW51bGx8fG49PW51bGwpe2lmKHRoaXMuX2VsZW1lbnQ9PW51bGwpdGhyb3cgbmV3IEVycm9yKCJhbmNob3IoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgY29tcHV0ZUxheW91dCgpIik7aWYodGhpcy5fcm9vdEVsZW1lbnQhPW51bGwpe3Q9e3g6MCx5OjB9O3ZhciBpPXRoaXMuX3Jvb3RFbGVtZW50Lm5vZGUoKTtyPXlTLkRPTS5lbGVtZW50V2lkdGgoaSksbj15Uy5ET00uZWxlbWVudEhlaWdodChpKX1lbHNlIHRocm93IG5ldyBFcnJvcigibnVsbCBhcmd1bWVudHMgY2Fubm90IGJlIHBhc3NlZCB0byBjb21wdXRlTGF5b3V0KCkgb24gYSBub24tcm9vdCwgdW5hbmNob3JlZCBub2RlIil9dmFyIG89dGhpcy5fc2l6ZUZyb21PZmZlcihyLG4pLGE9by5oZWlnaHQscz1vLndpZHRoLGw9ZS5feEFsaWduVG9Qcm9wb3J0aW9uW3RoaXMuX3hBbGlnbm1lbnRdLGM9ZS5feUFsaWduVG9Qcm9wb3J0aW9uW3RoaXMuX3lBbGlnbm1lbnRdLHU9dC54KyhyLXMpKmwsaD10LnkrKG4tYSkqYztyZXR1cm4gdGhpcy5zZXRCb3VuZHMocyxhLHUsaCksdGhpc30sZS5wcm90b3R5cGUuc2V0Qm91bmRzPWZ1bmN0aW9uKHQscixuLGkpe3JldHVybiBuPT09dm9pZCAwJiYobj0wKSxpPT09dm9pZCAwJiYoaT0wKSx0aGlzLl93aWR0aD10LHRoaXMuX2hlaWdodD1yLHRoaXMuX29yaWdpbj17eDpuLHk6aX0sdGhpcy5fZWxlbWVudCE9bnVsbCYmdGhpcy5fZWxlbWVudC5zdHlsZXMoe2xlZnQ6bisicHgiLGhlaWdodDpyKyJweCIsdG9wOmkrInB4Iix3aWR0aDp0KyJweCJ9KSx0aGlzLl9yZXNpemVIYW5kbGVyIT1udWxsJiZ0aGlzLl9yZXNpemVIYW5kbGVyKHt3aWR0aDp0LGhlaWdodDpyfSksdGhpc30sZS5wcm90b3R5cGUuX3NpemVGcm9tT2ZmZXI9ZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLnJlcXVlc3RlZFNwYWNlKHQscik7cmV0dXJue3dpZHRoOnRoaXMuZml4ZWRXaWR0aCgpP01hdGgubWluKHQsbi5taW5XaWR0aCk6dCxoZWlnaHQ6dGhpcy5maXhlZEhlaWdodCgpP01hdGgubWluKHIsbi5taW5IZWlnaHQpOnJ9fSxlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmdGhpcy53aWR0aCgpPj0wJiZ0aGlzLmhlaWdodCgpPj0wJiZrRi5yZWdpc3RlclRvUmVuZGVyKHRoaXMpLHRoaXN9LGUucHJvdG90eXBlLnJlbmRlckxvd1ByaW9yaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyKCl9LGUucHJvdG90eXBlLl9zY2hlZHVsZUNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24oKXt0aGlzLl9pc0FuY2hvcmVkJiZ0aGlzLl9pc1NldHVwJiZrRi5yZWdpc3RlclRvQ29tcHV0ZUxheW91dEFuZFJlbmRlcih0aGlzKX0sZS5wcm90b3R5cGUub25SZXNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZUhhbmRsZXI9dCx0aGlzfSxlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNBbmNob3JlZCYmdGhpcy5faXNTZXR1cCYmKHRoaXMuaXNSb290KCk/dGhpcy5fc2NoZWR1bGVDb21wdXRlTGF5b3V0KCk6dGhpcy5wYXJlbnQoKS5yZWRyYXcoKSksdGhpc30sZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5yZW5kZXJUbz1mdW5jdGlvbih0KXtpZih0aGlzLmRldGFjaCgpLHQhPW51bGwpe3ZhciByPXZvaWQgMDtpZih0eXBlb2YgdD09InN0cmluZyJ8fGd6ZS5pc0VsZW1lbnQodCk/cj1CWHQuc2VsZWN0KHQpOnI9SFh0LmNvZXJjZUV4dGVybmFsRDModCksIXIubm9kZSgpfHxyLm5vZGUoKS5ub2RlTmFtZT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIlBsb3R0YWJsZSByZXF1aXJlcyBhIHZhbGlkIEVsZW1lbnQgdG8gcmVuZGVyVG8iKTtpZihyLm5vZGUoKS5ub2RlTmFtZT09PSJzdmciKXRocm93IG5ldyBFcnJvcigiUGxvdHRhYmxlIDMueCBhbmQgbGF0ZXIgY2FuIG9ubHkgcmVuZGVyVG8gYW4gSFRNTCBjb21wb25lbnQ7IHBhc3MgYSBkaXYgaW5zdGVhZCEiKTt0aGlzLmFuY2hvcihyKX1pZih0aGlzLl9lbGVtZW50PT1udWxsKXRocm93IG5ldyBFcnJvcigiSWYgYSBDb21wb25lbnQgaGFzIG5ldmVyIGJlZW4gcmVuZGVyZWQgYmVmb3JlLCB0aGVuIHJlbmRlclRvIG11c3QgYmUgZ2l2ZW4gYSBub2RlIHRvIHJlbmRlciB0bywgb3IgYSBkMy5TZWxlY3Rpb24sIG9yIGEgc2VsZWN0b3Igc3RyaW5nIik7cmV0dXJuIGtGLnJlZ2lzdGVyVG9Db21wdXRlTGF5b3V0QW5kUmVuZGVyKHRoaXMpLGtGLmZsdXNoKCksdGhpc30sZS5wcm90b3R5cGUueEFsaWdubWVudD1mdW5jdGlvbih0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl94QWxpZ25tZW50O2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGUuX3hBbGlnblRvUHJvcG9ydGlvblt0XT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGFsaWdubWVudDogIit0KTtyZXR1cm4gdGhpcy5feEFsaWdubWVudD10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUueUFsaWdubWVudD1mdW5jdGlvbih0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl95QWxpZ25tZW50O2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGUuX3lBbGlnblRvUHJvcG9ydGlvblt0XT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGFsaWdubWVudDogIit0KTtyZXR1cm4gdGhpcy5feUFsaWdubWVudD10LHRoaXMucmVkcmF3KCksdGhpc30sZS5wcm90b3R5cGUuaGFzQ2xhc3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/ITE6dGhpcy5fZWxlbWVudD09bnVsbD90aGlzLl9jc3NDbGFzc2VzLmhhcyh0KTp0aGlzLl9lbGVtZW50LmNsYXNzZWQodCl9LGUucHJvdG90eXBlLmFkZENsYXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3RoaXM6KHRoaXMuX2VsZW1lbnQ9PW51bGw/dGhpcy5fY3NzQ2xhc3Nlcy5hZGQodCk6dGhpcy5fZWxlbWVudC5jbGFzc2VkKHQsITApLHRoaXMpfSxlLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzOih0aGlzLl9lbGVtZW50PT1udWxsP3RoaXMuX2Nzc0NsYXNzZXMuZGVsZXRlKHQpOnRoaXMuX2VsZW1lbnQuY2xhc3NlZCh0LCExKSx0aGlzKX0sZS5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQobnVsbCksdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fZWxlbWVudC5yZW1vdmUoKSx0aGlzLl9pc0FuY2hvcmVkPSExLHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyksdGhpc30sZS5wcm90b3R5cGUub25EZXRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZEZXRhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX29uRGV0YWNoQ2FsbGJhY2tzLmRlbGV0ZSh0KSx0aGlzfSxlLnByb3RvdHlwZS5wYXJlbnQ9ZnVuY3Rpb24odCl7aWYodD09PXZvaWQgMClyZXR1cm4gdGhpcy5fcGFyZW50O2lmKHQhPT1udWxsJiYhdC5oYXModGhpcykpdGhyb3cgbmV3IEVycm9yKCJQYXNzZWQgaW52YWxpZCBwYXJlbnQiKTtyZXR1cm4gdGhpcy5fcGFyZW50PXQsdGhpc30sZS5wcm90b3R5cGUuYm91bmRzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcmlnaW4oKTtyZXR1cm57dG9wTGVmdDp0LGJvdHRvbVJpZ2h0Ont4OnQueCt0aGlzLndpZHRoKCkseTp0LnkrdGhpcy5oZWlnaHQoKX19fSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuZGV0YWNoKCl9LGUucHJvdG90eXBlLndpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dpZHRofSxlLnByb3RvdHlwZS5oZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVpZ2h0fSxlLnByb3RvdHlwZS5vcmlnaW49ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLl9vcmlnaW4ueCx5OnRoaXMuX29yaWdpbi55fX0sZS5wcm90b3R5cGUub3JpZ2luVG9Sb290PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMub3JpZ2luKCkscj10aGlzLnBhcmVudCgpO3IhPW51bGw7KXt2YXIgbj1yLm9yaWdpbigpO3QueCs9bi54LHQueSs9bi55LHI9ci5wYXJlbnQoKX1yZXR1cm4gdH0sZS5wcm90b3R5cGUucm9vdD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzOyF0LmlzUm9vdCgpOyl0PXQucGFyZW50KCk7cmV0dXJuIHR9LGUucHJvdG90eXBlLmlzUm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpPT1udWxsfSxlLnByb3RvdHlwZS5mb3JlZ3JvdW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvcmVncm91bmRDb250YWluZXJ9LGUucHJvdG90eXBlLmNvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudH0sZS5wcm90b3R5cGUuZWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxlLnByb3RvdHlwZS5yb290RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3QoKS5fcm9vdEVsZW1lbnR9LGUucHJvdG90eXBlLmJhY2tncm91bmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2dyb3VuZENvbnRhaW5lcn0sZS5feEFsaWduVG9Qcm9wb3J0aW9uPXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9LGUuX3lBbGlnblRvUHJvcG9ydGlvbj17dG9wOjAsY2VudGVyOi41LGJvdHRvbToxfSxlfSgpO0pBLkNvbXBvbmVudD1femV9KTt2YXIgQnU9SChGdT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRnUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB2Uz0oRXIoKSxVdChNcikpLHl6ZT0hMTtmdW5jdGlvbiB2emUoZSx0LHIpe2U9PT12b2lkIDAmJihlPTIpLHQ9PT12b2lkIDAmJih0PSIkIikscj09PXZvaWQgMCYmKHI9ITApO3ZhciBuPUdpdChlKTtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89bihNYXRoLmFicyhpKSk7cmV0dXJuIG8hPT0iIiYmKHI/bz10K286bys9dCxpPDAmJihvPSItIitvKSksb319RnUuY3VycmVuY3k9dnplO2Z1bmN0aW9uIEdpdChlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MyksUkYoZSksZnVuY3Rpb24odCl7cmV0dXJuIHQudG9GaXhlZChlKX19RnUuZml4ZWQ9R2l0O2Z1bmN0aW9uIHh6ZShlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MyksUkYoZSksZnVuY3Rpb24odCl7aWYodHlwZW9mIHQ9PSJudW1iZXIiKXt2YXIgcj1NYXRoLnBvdygxMCxlKTtyZXR1cm4gU3RyaW5nKE1hdGgucm91bmQodCpyKS9yKX1lbHNlIHJldHVybiBTdHJpbmcodCl9fUZ1LmdlbmVyYWw9eHplO2Z1bmN0aW9uIGJ6ZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpfX1GdS5pZGVudGl0eT1iemU7ZnVuY3Rpb24gd3plKGUpe2U9PT12b2lkIDAmJihlPTApO3ZhciB0PUdpdChlKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cioxMDAsaT1yLnRvU3RyaW5nKCksbz1NYXRoLnBvdygxMCxpLmxlbmd0aC0oaS5pbmRleE9mKCIuIikrMSkpO3JldHVybiBuPXBhcnNlSW50KChuKm8pLnRvU3RyaW5nKCksMTApL28sdChuKSsiJSJ9fUZ1LnBlcmNlbnRhZ2U9d3plO2Z1bmN0aW9uIFN6ZShlKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9MyksUkYoZSksZnVuY3Rpb24odCl7cmV0dXJuIHZTLmZvcm1hdCgiLiIrZSsicyIpKHQpfX1GdS5zaVN1ZmZpeD1TemU7ZnVuY3Rpb24gTXplKGUpe2U9PT12b2lkIDAmJihlPTMpLFJGKGUpO3ZhciB0PSJLTUJUUSIscj12Uy5mb3JtYXQoIi4iK2UrImUiKSxuPXZTLmZvcm1hdCgiLiIrZSsiZiIpLGk9TWF0aC5wb3coMTAsMyoodC5sZW5ndGgrMSkpLG89TWF0aC5wb3coMTAsLWUpO3JldHVybiBmdW5jdGlvbihhKXt2YXIgcz1NYXRoLmFicyhhKTtpZigoczxvfHxzPj1pKSYmcyE9PTApcmV0dXJuIHIoYSk7Zm9yKHZhciBsPS0xO3M+PU1hdGgucG93KDFlMyxsKzIpJiZsPHQubGVuZ3RoLTE7KWwrKzt2YXIgYz0iIjtyZXR1cm4gbD09PS0xP2M9bihhKTpjPW4oYS9NYXRoLnBvdygxZTMsbCsxKSkrdFtsXSwoYT4wJiZjLnN1YnN0cigwLDQpPT09IjEwMDAifHxhPDAmJmMuc3Vic3RyKDAsNSk9PT0iLTEwMDAiKSYmKGw8dC5sZW5ndGgtMT8obCsrLGM9bihhL01hdGgucG93KDFlMyxsKzEpKSt0W2xdKTpjPXIoYSkpLGN9fUZ1LnNob3J0U2NhbGU9TXplO2Z1bmN0aW9uIEV6ZSgpe3ZhciBlPVt7c3BlY2lmaWVyOiIuJUwiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaWxsaXNlY29uZHMoKSE9PTB9fSx7c3BlY2lmaWVyOiI6JVMiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRTZWNvbmRzKCkhPT0wfX0se3NwZWNpZmllcjoiJUk6JU0iLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNaW51dGVzKCkhPT0wfX0se3NwZWNpZmllcjoiJUkgJXAiLHByZWRpY2F0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRIb3VycygpIT09MH19LHtzcGVjaWZpZXI6IiVhICVkIixwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF5KCkhPT0wJiZ0LmdldERhdGUoKSE9PTF9fSx7c3BlY2lmaWVyOiIlYiAlZCIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldERhdGUoKSE9PTF9fSx7c3BlY2lmaWVyOiIlYiIscHJlZGljYXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1vbnRoKCkhPT0wfX1dO3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1lLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gaS5wcmVkaWNhdGUodCl9KSxuPXIubGVuZ3RoPjA/clswXS5zcGVjaWZpZXI6IiVZIjtyZXR1cm4gdlMudGltZUZvcm1hdChuKSh0KX19RnUubXVsdGlUaW1lPUV6ZTtmdW5jdGlvbiBUemUoZSx0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9eXplKSx0P3ZTLnV0Y0Zvcm1hdChlKTp2Uy50aW1lRm9ybWF0KGUpfUZ1LnRpbWU9VHplO2Z1bmN0aW9uIFJGKGUpe2lmKGU8MHx8ZT4yMCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0dGVyIHByZWNpc2lvbiBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjAiKTtpZihlIT09TWF0aC5mbG9vcihlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiRm9ybWF0dGVyIHByZWNpc2lvbiBtdXN0IGJlIGFuIGludGVnZXIiKX19KTt2YXIgUUE9SChORj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBDemU9KGRlKCksVXQocGUpKSx5ZD0oRXIoKSxVdChNcikpLFdpdD1fbCgpLEF6ZT1rYygpLFVYdD1CdSgpLHhTPUZlKCksUHplPUlmKCk7TkYuQXhpc09yaWVudGF0aW9uPVB6ZS5tYWtlRW51bShbImJvdHRvbSIsImxlZnQiLCJyaWdodCIsInRvcCJdKTt2YXIgSXplPWZ1bmN0aW9uKGUpe0N6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKGkuX2VuZFRpY2tMZW5ndGg9NSxpLl9pbm5lclRpY2tMZW5ndGg9NSxpLl90aWNrTGFiZWxQYWRkaW5nPTEwLGkuX21hcmdpbj0xNSxpLl9zaG93RW5kVGlja0xhYmVscz0hMSxpLl9hbm5vdGF0aW9uc0VuYWJsZWQ9ITEsaS5fYW5ub3RhdGlvblRpZXJDb3VudD0xLHI9PW51bGx8fG49PW51bGwpdGhyb3cgbmV3IEVycm9yKCJBeGlzIHJlcXVpcmVzIGEgc2NhbGUgYW5kIG9yaWVudGF0aW9uIik7cmV0dXJuIGkuX3NjYWxlPXIsaS5vcmllbnRhdGlvbihuKSxpLl9zZXREZWZhdWx0QWxpZ25tZW50KCksaS5hZGRDbGFzcygiYXhpcyIpLGkuaXNIb3Jpem9udGFsKCk/aS5hZGRDbGFzcygieC1heGlzIik6aS5hZGRDbGFzcygieS1heGlzIiksaS5mb3JtYXR0ZXIoVVh0LmlkZW50aXR5KCkpLGkuX3Jlc2NhbGVDYWxsYmFjaz1mdW5jdGlvbihvKXtyZXR1cm4gaS5fcmVzY2FsZSgpfSxpLl9zY2FsZS5vblVwZGF0ZShpLl9yZXNjYWxlQ2FsbGJhY2spLGkuX2Fubm90YXRlZFRpY2tzPVtdLGkuX2Fubm90YXRpb25Gb3JtYXR0ZXI9VVh0LmlkZW50aXR5KCksaX1yZXR1cm4gdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVzY2FsZUNhbGxiYWNrKX0sdC5wcm90b3R5cGUudGlja0xhYmVsRGF0YU9uRWxlbWVudD1mdW5jdGlvbihyKXtpZihyIT1udWxsKXtmb3IodmFyIG47ciE9bnVsbCYmci5jbGFzc0xpc3QmJm49PT12b2lkIDA7KXIuY2xhc3NMaXN0LmNvbnRhaW5zKHQuVElDS19MQUJFTF9DTEFTUyk/bj1yOnI9ci5wYXJlbnROb2RlO3JldHVybiByPT09dm9pZCAwP3ZvaWQgMDp5ZC5zZWxlY3QocikuZGF0dW0oKX19LHQucHJvdG90eXBlLl9jb21wdXRlV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPTAsbz0wO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKG89dGhpcy5fY29tcHV0ZUhlaWdodCgpK3RoaXMuX21hcmdpbix0aGlzLmFubm90YXRpb25zRW5hYmxlZCgpKXt2YXIgYT10aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORztvKz1hKnRoaXMuYW5ub3RhdGlvblRpZXJDb3VudCgpfX1lbHNlIGlmKGk9dGhpcy5fY29tcHV0ZVdpZHRoKCkrdGhpcy5fbWFyZ2luLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqdC5fQU5OT1RBVElPTl9MQUJFTF9QQURESU5HO2krPWEqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCl9cmV0dXJue21pbldpZHRoOmksbWluSGVpZ2h0Om99fSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSG9yaXpvbnRhbCgpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNIb3Jpem9udGFsKCl9LHQucHJvdG90eXBlLl9yZXNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXIoKX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7cmV0dXJuIGUucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKSx0aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3NjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pOnRoaXMuX3NjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMucmVxdWVzdGVkU3BhY2UocixuKTtyZXR1cm4gdGhpcy5pc0hvcml6b250YWwoKT97d2lkdGg6cixoZWlnaHQ6aS5taW5IZWlnaHR9OntoZWlnaHQ6bix3aWR0aDppLm1pbldpZHRofX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdGlja01hcmtDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LlRJQ0tfTUFSS19DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKHQuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApLHRoaXMuX2Jhc2VsaW5lPXRoaXMuY29udGVudCgpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImJhc2VsaW5lIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1saW5lLWNvbnRhaW5lciIsITApLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiYW5ub3RhdGlvbi1jaXJjbGUtY29udGFpbmVyIiwhMCksdGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXJlY3QtY29udGFpbmVyIiwhMCk7dmFyIHI9dGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWxhYmVsLWNvbnRhaW5lciIsITApLG49bmV3IFdpdC5TdmdDb250ZXh0KHIubm9kZSgpKTt0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXI9bmV3IFdpdC5DYWNoZU1lYXN1cmVyKG4pLHRoaXMuX2Fubm90YXRpb25Xcml0ZXI9bmV3IFdpdC5Xcml0ZXIodGhpcy5fYW5ub3RhdGlvbk1lYXN1cmVyLG4pfSx0LnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3JldHVybltdfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxuPXRoaXMuX3RpY2tNYXJrQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrdC5USUNLX01BUktfQ0xBU1MpLmRhdGEociksaT1uLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0LlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2Uobik7cmV0dXJuIGkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCkpLHlkLnNlbGVjdChpLm5vZGVzKClbMF0pLmNsYXNzZWQodC5FTkRfVElDS19NQVJLX0NMQVNTLCEwKS5hdHRycyh0aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goITApKSx5ZC5zZWxlY3QoaS5ub2RlcygpW3IubGVuZ3RoLTFdKS5jbGFzc2VkKHQuRU5EX1RJQ0tfTUFSS19DTEFTUywhMCkuYXR0cnModGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCEwKSksbi5leGl0KCkucmVtb3ZlKCksdGhpcy5fYmFzZWxpbmUuYXR0cnModGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCkpLHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5fZHJhd0Fubm90YXRpb25zKCk6dGhpcy5fcmVtb3ZlQW5ub3RhdGlvbnMoKSx0aGlzfSx0LnByb3RvdHlwZS5hbm5vdGF0ZWRUaWNrcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9hbm5vdGF0ZWRUaWNrczoodGhpcy5fYW5ub3RhdGVkVGlja3M9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5hbm5vdGF0aW9uRm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Fubm90YXRpb25Gb3JtYXR0ZXI6KHRoaXMuX2Fubm90YXRpb25Gb3JtYXR0ZXI9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5hbm5vdGF0aW9uc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fYW5ub3RhdGlvbnNFbmFibGVkOih0aGlzLl9hbm5vdGF0aW9uc0VuYWJsZWQ9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5hbm5vdGF0aW9uVGllckNvdW50PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2Fubm90YXRpb25UaWVyQ291bnQ7aWYocjwwKXRocm93IG5ldyBFcnJvcigiYW5ub3RhdGlvblRpZXJDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGlvblRpZXJDb3VudD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuX2RyYXdBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10Ll9BTk5PVEFUSU9OX0xBQkVMX1BBRERJTkcsaT1uZXcgeFMuTWFwLG89dGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpO28uZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgaz1yLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZShyLmFubm90YXRpb25Gb3JtYXR0ZXIoKShQKSksTz17d2lkdGg6ay53aWR0aCsyKm4saGVpZ2h0OmsuaGVpZ2h0KzIqbn07aS5zZXQoUCxPKX0pO3ZhciBhPXRoaXMuX2Fubm90YXRpb25NZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0KzIqbixzPXRoaXMuX2Fubm90YXRpb25Ub1RpZXIoaSksbD1uZXcgeFMuU2V0LGM9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLmhlaWdodCgpOnRoaXMud2lkdGgoKSx1PXRoaXMuX2NvcmVTaXplKCksaD1NYXRoLm1pbih0aGlzLmFubm90YXRpb25UaWVyQ291bnQoKSxNYXRoLmZsb29yKChjLXUpL2EpKTtzLmZvckVhY2goZnVuY3Rpb24oUCxrKXsoUD09PS0xfHxQPj1oKSYmbC5hZGQoayl9KTt2YXIgZj1mdW5jdGlvbihQLGssTyl7dmFyIEQ9UC5zZWxlY3RBbGwoIi4iK08pLmRhdGEobyksQj1ELmVudGVyKCkuYXBwZW5kKGspLmNsYXNzZWQoTywhMCkubWVyZ2UoRCk7cmV0dXJuIEQuZXhpdCgpLnJlbW92ZSgpLEJ9LHA9ZnVuY3Rpb24oUCl7c3dpdGNoKHIub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOmNhc2UicmlnaHQiOnJldHVybiBzLmdldChQKSphK3U7Y2FzZSJ0b3AiOmNhc2UibGVmdCI6cmV0dXJuIGMtdS1zLmdldChQKSphfX0sZD1mdW5jdGlvbihQKXtyZXR1cm4gci5fc2NhbGUuc2NhbGUoUCl9LGc9ZnVuY3Rpb24oUCl7cmV0dXJuIGwuaGFzKFApPyJoaWRkZW4iOiJ2aXNpYmxlIn0sXztzd2l0Y2godGhpcy5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6Xz0wO2JyZWFrO2Nhc2UidG9wIjpfPXRoaXMuaGVpZ2h0KCk7YnJlYWs7Y2FzZSJsZWZ0IjpfPXRoaXMud2lkdGgoKTticmVha312YXIgeT10aGlzLmlzSG9yaXpvbnRhbCgpO2YodGhpcy5fYW5ub3RhdGlvbkNvbnRhaW5lci5zZWxlY3QoIi5hbm5vdGF0aW9uLWxpbmUtY29udGFpbmVyIiksImxpbmUiLHQuQU5OT1RBVElPTl9MSU5FX0NMQVNTKS5hdHRycyh7eDE6eT9kOl8seDI6eT9kOnAseTE6eT9fOmQseTI6eT9wOmQsdmlzaWJpbGl0eTpnfSksZih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tY2lyY2xlLWNvbnRhaW5lciIpLCJjaXJjbGUiLHQuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1MpLmF0dHJzKHtjeDp5P2Q6XyxjeTp5P186ZCxyOjN9KTt2YXIgeD1mdW5jdGlvbihQKXtzd2l0Y2goci5vcmllbnRhdGlvbigpKXtjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6cmV0dXJuIHAoUCk7Y2FzZSJ0b3AiOmNhc2UibGVmdCI6cmV0dXJuIHAoUCktaS5nZXQoUCkuaGVpZ2h0fX07Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tcmVjdC1jb250YWluZXIiKSwicmVjdCIsdC5BTk5PVEFUSU9OX1JFQ1RfQ0xBU1MpLmF0dHJzKHt4Onk/ZDp4LHk6eT94OmQsd2lkdGg6eT9mdW5jdGlvbihQKXtyZXR1cm4gaS5nZXQoUCkud2lkdGh9OmZ1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS5oZWlnaHR9LGhlaWdodDp5P2Z1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS5oZWlnaHR9OmZ1bmN0aW9uKFApe3JldHVybiBpLmdldChQKS53aWR0aH0sdmlzaWJpbGl0eTpnfSk7dmFyIGI9dGhpcy5fYW5ub3RhdGlvbldyaXRlcixTPXRoaXMuYW5ub3RhdGlvbkZvcm1hdHRlcigpLEM9Zih0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdCgiLmFubm90YXRpb24tbGFiZWwtY29udGFpbmVyIiksImciLHQuQU5OT1RBVElPTl9MQUJFTF9DTEFTUyk7Qy5zZWxlY3RBbGwoIi50ZXh0LWNvbnRhaW5lciIpLnJlbW92ZSgpLEMuYXR0cnMoe3RyYW5zZm9ybTpmdW5jdGlvbihQKXt2YXIgaz15P2QoUCk6eChQKSxPPXk/eChQKTpkKFApO3JldHVybiJ0cmFuc2xhdGUoIitrKyIsIitPKyIpIn0sdmlzaWJpbGl0eTpnfSkuZWFjaChmdW5jdGlvbihQKXtiLndyaXRlKFMoUCkseT9pLmdldChQKS53aWR0aDppLmdldChQKS5oZWlnaHQseT9pLmdldChQKS5oZWlnaHQ6aS5nZXQoUCkud2lkdGgse3hBbGlnbjoiY2VudGVyIix5QWxpZ246ImNlbnRlciIsdGV4dFJvdGF0aW9uOnk/MDo5MH0seWQuc2VsZWN0KHRoaXMpLm5vZGUoKSl9KX0sdC5wcm90b3R5cGUuX2Fubm90YXRlZFRpY2tzVG9SZW5kZXI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fc2NhbGUucmFuZ2UoKTtyZXR1cm4geFMuQXJyYXkudW5pcSh0aGlzLmFubm90YXRlZFRpY2tzKCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpPT1udWxsPyExOnhTLk1hdGguaW5SYW5nZShyLl9zY2FsZS5zY2FsZShpKSxuWzBdLG5bMV0pfSkpfSx0LnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLG49dGhpcy5pc0hvcml6b250YWwoKT90aGlzLl9jb21wdXRlSGVpZ2h0KCk6dGhpcy5fY29tcHV0ZVdpZHRoKCk7cmV0dXJuIE1hdGgubWluKG4scil9LHQucHJvdG90eXBlLl9hbm5vdGF0aW9uVGllckhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodCsyKnQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElOR30sdC5wcm90b3R5cGUuX2Fubm90YXRpb25Ub1RpZXI9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPVtbXV0sbz1uZXcgeFMuTWFwLGE9dGhpcy5pc0hvcml6b250YWwoKT90aGlzLndpZHRoKCk6dGhpcy5oZWlnaHQoKTtyZXR1cm4gdGhpcy5fYW5ub3RhdGVkVGlja3NUb1JlbmRlcigpLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGw9bi5fc2NhbGUuc2NhbGUocyksYz1yLmdldChzKS53aWR0aDtpZihsPDB8fGwrYz5hKXtvLnNldChzLC0xKTtyZXR1cm59Zm9yKHZhciB1PWZ1bmN0aW9uKGYpe3JldHVybiBpW2ZdLnNvbWUoZnVuY3Rpb24ocCl7dmFyIGQ9bi5fc2NhbGUuc2NhbGUocCksZz1yLmdldChwKS53aWR0aDtyZXR1cm4gbCtjPj1kJiZsPD1kK2d9KX0saD0wO3UoaCk7KWgrKyxpLmxlbmd0aD09PWgmJmkucHVzaChbXSk7aVtoXS5wdXNoKHMpLG8uc2V0KHMsaCl9KSxvfSx0LnByb3RvdHlwZS5fcmVtb3ZlQW5ub3RhdGlvbnM9ZnVuY3Rpb24oKXt0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tbGluZSIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1jaXJjbGUiKS5yZW1vdmUoKSx0aGlzLl9hbm5vdGF0aW9uQ29udGFpbmVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tcmVjdCIpLnJlbW92ZSgpLHRoaXMuX2Fubm90YXRpb25Db250YWluZXIuc2VsZWN0QWxsKCIuYW5ub3RhdGlvbi1sYWJlbCIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoPWZ1bmN0aW9uKCl7dmFyIHI9e3gxOjAseTE6MCx4MjowLHkyOjB9O3N3aXRjaCh0aGlzLl9vcmllbnRhdGlvbil7Y2FzZSJib3R0b20iOnIueDI9dGhpcy53aWR0aCgpO2JyZWFrO2Nhc2UidG9wIjpyLngyPXRoaXMud2lkdGgoKSxyLnkxPXRoaXMuaGVpZ2h0KCksci55Mj10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UibGVmdCI6ci54MT10aGlzLndpZHRoKCksci54Mj10aGlzLndpZHRoKCksci55Mj10aGlzLmhlaWdodCgpO2JyZWFrO2Nhc2UicmlnaHQiOnIueTI9dGhpcy5oZWlnaHQoKTticmVha31yZXR1cm4gcn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlVGlja01hcmtBdHRySGFzaD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPSExKTt2YXIgaT17eDE6MCx5MTowLHgyOjAseTI6MH0sbz1mdW5jdGlvbihzKXtyZXR1cm4gbi5fc2NhbGUuc2NhbGUocyl9O3RoaXMuaXNIb3Jpem9udGFsKCk/KGkueDE9byxpLngyPW8pOihpLnkxPW8saS55Mj1vKTt2YXIgYT1yP3RoaXMuX2VuZFRpY2tMZW5ndGg6dGhpcy5faW5uZXJUaWNrTGVuZ3RoO3N3aXRjaCh0aGlzLl9vcmllbnRhdGlvbil7Y2FzZSJib3R0b20iOmkueTI9YTticmVhaztjYXNlInRvcCI6aS55MT10aGlzLmhlaWdodCgpLGkueTI9dGhpcy5oZWlnaHQoKS1hO2JyZWFrO2Nhc2UibGVmdCI6aS54MT10aGlzLndpZHRoKCksaS54Mj10aGlzLndpZHRoKCktYTticmVhaztjYXNlInJpZ2h0IjppLngyPWE7YnJlYWt9cmV0dXJuIGl9LHQucHJvdG90eXBlLl9zZXREZWZhdWx0QWxpZ25tZW50PWZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX29yaWVudGF0aW9uKXtjYXNlImJvdHRvbSI6dGhpcy55QWxpZ25tZW50KCJ0b3AiKTticmVhaztjYXNlInRvcCI6dGhpcy55QWxpZ25tZW50KCJib3R0b20iKTticmVhaztjYXNlImxlZnQiOnRoaXMueEFsaWdubWVudCgicmlnaHQiKTticmVhaztjYXNlInJpZ2h0Ijp0aGlzLnhBbGlnbm1lbnQoImxlZnQiKTticmVha319LHQucHJvdG90eXBlLmlzSG9yaXpvbnRhbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbj09PSJ0b3AifHx0aGlzLl9vcmllbnRhdGlvbj09PSJib3R0b20ifSx0LnByb3RvdHlwZS5nZXRTY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY2FsZX0sdC5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuaW5uZXJUaWNrTGVuZ3RoPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aDtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJpbm5lciB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2lubmVyVGlja0xlbmd0aD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuZW5kVGlja0xlbmd0aD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9lbmRUaWNrTGVuZ3RoO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoImVuZCB0aWNrIGxlbmd0aCBtdXN0IGJlIHBvc2l0aXZlIik7cmV0dXJuIHRoaXMuX2VuZFRpY2tMZW5ndGg9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLl9tYXhMYWJlbFRpY2tMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93RW5kVGlja0xhYmVscygpP01hdGgubWF4KHRoaXMuaW5uZXJUaWNrTGVuZ3RoKCksdGhpcy5lbmRUaWNrTGVuZ3RoKCkpOnRoaXMuaW5uZXJUaWNrTGVuZ3RoKCl9LHQucHJvdG90eXBlLnRpY2tMYWJlbFBhZGRpbmc9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUGFkZGluZztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJ0aWNrIGxhYmVsIHBhZGRpbmcgbXVzdCBiZSBwb3NpdGl2ZSIpO3JldHVybiB0aGlzLl90aWNrTGFiZWxQYWRkaW5nPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5tYXJnaW49ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fbWFyZ2luO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoIm1hcmdpbiBzaXplIG11c3QgYmUgcG9zaXRpdmUiKTtyZXR1cm4gdGhpcy5fbWFyZ2luPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9vcmllbnRhdGlvbjt2YXIgbj1yLnRvTG93ZXJDYXNlKCk7aWYobiE9PSJ0b3AiJiZuIT09ImJvdHRvbSImJm4hPT0ibGVmdCImJm4hPT0icmlnaHQiKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgb3JpZW50YXRpb24iKTtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249bix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnNob3dFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3Nob3dFbmRUaWNrTGFiZWxzOih0aGlzLl9zaG93RW5kVGlja0xhYmVscz1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zaG93QWxsVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy5fdGlja01hcmtDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTUFSS19DTEFTUykuZWFjaChmdW5jdGlvbigpe3lkLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKX0pfSx0LnByb3RvdHlwZS5fc2hvd0FsbFRpY2tMYWJlbHM9ZnVuY3Rpb24oKXt0aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTEFCRUxfQ0xBU1MpLmVhY2goZnVuY3Rpb24oKXt5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0Iil9KX0sdC5wcm90b3R5cGUuX2hpZGVPdmVyZmxvd2luZ1RpY2tMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit0LlRJQ0tfTEFCRUxfQ0xBU1MpO24uZW1wdHkoKXx8bi5lYWNoKGZ1bmN0aW9uKGksbyl7eFMuRE9NLmNsaWVudFJlY3RJbnNpZGUodGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyKXx8eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9KX0sdC5wcm90b3R5cGUuX2hpZGVUaWNrTWFya3NXaXRob3V0TGFiZWw9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19NQVJLX0NMQVNTKSxuPXRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3QuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKG8sYSl7dmFyIHM9eWQuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIHM9PT0iaW5oZXJpdCJ8fHM9PT0idmlzaWJsZSJ9KSxpPW4uZGF0YSgpO3IuZWFjaChmdW5jdGlvbihvLGEpe2kuaW5kZXhPZihvKT09PS0xJiZ5ZC5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGUuY2FsbCh0aGlzKSx0aGlzLl9hbm5vdGF0aW9uTWVhc3VyZXIucmVzZXQoKX0sdC5FTkRfVElDS19NQVJLX0NMQVNTPSJlbmQtdGljay1tYXJrIix0LlRJQ0tfTUFSS19DTEFTUz0idGljay1tYXJrIix0LlRJQ0tfTEFCRUxfQ0xBU1M9InRpY2stbGFiZWwiLHQuQU5OT1RBVElPTl9MSU5FX0NMQVNTPSJhbm5vdGF0aW9uLWxpbmUiLHQuQU5OT1RBVElPTl9SRUNUX0NMQVNTPSJhbm5vdGF0aW9uLXJlY3QiLHQuQU5OT1RBVElPTl9DSVJDTEVfQ0xBU1M9ImFubm90YXRpb24tY2lyY2xlIix0LkFOTk9UQVRJT05fTEFCRUxfQ0xBU1M9ImFubm90YXRpb24tbGFiZWwiLHQuX0FOTk9UQVRJT05fTEFCRUxfUEFERElORz00LHR9KEF6ZS5Db21wb25lbnQpO05GLkF4aXM9SXplfSk7dmFyIEdYdD1IKFhpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWGl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTHplPShkZSgpLFV0KHBlKSksWWl0PShFcigpLFV0KE1yKSksREY9X2woKSxremU9a2MoKSxxWHQ9RmUoKSxqaXQ9UUEoKSxSemU9ZnVuY3Rpb24oZSl7THplLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXtuPT09dm9pZCAwJiYobj0iYm90dG9tIik7dmFyIGk9ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gaS5fdGlja0xhYmVsQW5nbGU9MCxpLl90aWNrTGFiZWxTaGVhckFuZ2xlPTAsaS5hZGRDbGFzcygiY2F0ZWdvcnktYXhpcyIpLGl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LnByb3RvdHlwZSwiX3dyYXBwZXIiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgREYuV3JhcHBlcjtyZXR1cm4gdGhpcy5fdGlja0xhYmVsTWF4TGluZXMhPW51bGwmJnIubWF4TGluZXModGhpcy5fdGlja0xhYmVsTWF4TGluZXMpLHJ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJfd3JpdGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBERi5Xcml0ZXIodGhpcy5fbWVhc3VyZXIsdGhpcy5fdHlwZXNldHRlckNvbnRleHQsdGhpcy5fd3JhcHBlcil9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdHlwZXNldHRlckNvbnRleHQ9bmV3IERGLlN2Z0NvbnRleHQodGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLm5vZGUoKSksdGhpcy5fbWVhc3VyZXI9bmV3IERGLkNhY2hlTWVhc3VyZXIodGhpcy5fdHlwZXNldHRlckNvbnRleHQpfSx0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlZHJhdygpfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuaXNIb3Jpem9udGFsKCk/MDp0aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpK3RoaXMubWFyZ2luKCksbz10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkrdGhpcy5tYXJnaW4oKTowO2lmKHRoaXMuX3NjYWxlLmRvbWFpbigpLmxlbmd0aD09PTApcmV0dXJue21pbldpZHRoOjAsbWluSGVpZ2h0OjB9O2lmKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCkpe3ZhciBhPXRoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCkqdGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCk7dGhpcy5pc0hvcml6b250YWwoKT9vKz1hOmkrPWF9dmFyIHM9dGhpcy5fbWVhc3VyZVRpY2tMYWJlbHMocixuKTtyZXR1cm57bWluV2lkdGg6cy51c2VkV2lkdGgraSxtaW5IZWlnaHQ6cy51c2VkSGVpZ2h0K299fSx0LnByb3RvdHlwZS5fY29yZVNpemU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmlzSG9yaXpvbnRhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy53aWR0aCgpLG49dGhpcy5pc0hvcml6b250YWwoKT90aGlzLnJlcXVlc3RlZFNwYWNlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKS5taW5IZWlnaHQ6dGhpcy5yZXF1ZXN0ZWRTcGFjZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSkubWluV2lkdGgsaT10aGlzLm1hcmdpbigpK3RoaXMuX2Fubm90YXRpb25UaWVySGVpZ2h0KCksbz1uLWk7cmV0dXJuIE1hdGgubWluKG8scil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0RG93bnNhbXBsZUluZm8oKS5kb21haW59LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGt6ZS5Db21wb25lbnQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyLmNhbGwodGhpcyxyLG4pfSx0LnByb3RvdHlwZS5nZXREb3duc2FtcGxlSW5mbz1mdW5jdGlvbihyLG4pe3I9PT12b2lkIDAmJihyPXRoaXMuX3NjYWxlKSxuPT09dm9pZCAwJiYobj1yLmludmVydFJhbmdlKCkpO3ZhciBpPXRoaXMuX3RpY2tMYWJlbEFuZ2xlPT09MD8xOjEvTWF0aC5jb3ModGhpcy5fdGlja0xhYmVsU2hlYXJBbmdsZS8xODAqTWF0aC5QSSksbz10Ll9NSU5JTVVNX1dJRFRIX1BFUl9MQUJFTF9QWCppLGE9TWF0aC5jZWlsKG8vci5zdGVwV2lkdGgoKSk7cmV0dXJue2RvbWFpbjpuLmZpbHRlcihmdW5jdGlvbihzLGwpe3JldHVybiBsJWE9PT0wfSksc3RlcFdpZHRoOmEqci5zdGVwV2lkdGgoKX19LHQucHJvdG90eXBlLnRpY2tMYWJlbEFuZ2xlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RpY2tMYWJlbEFuZ2xlO2lmKHIhPT0wJiZyIT09OTAmJnIhPT0tOTApdGhyb3cgbmV3IEVycm9yKCJBbmdsZSAiK3IrIiBub3Qgc3VwcG9ydGVkOyBvbmx5IDAsIDkwLCBhbmQgLTkwIGFyZSB2YWxpZCB2YWx1ZXMiKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsQW5nbGU9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnRpY2tMYWJlbFNoZWFyQW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsU2hlYXJBbmdsZTtpZihyPC04MHx8cj44MCl0aHJvdyBuZXcgRXJyb3IoIkFuZ2xlICIrcisiIG5vdCBzdXBwb3J0ZWQ7IE11c3QgYmUgYmV0d2VlbiBbLTgwLCA4MF0iKTtyZXR1cm4gdGhpcy5fdGlja0xhYmVsU2hlYXJBbmdsZT1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsTWF4V2lkdGg9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3RpY2tMYWJlbE1heFdpZHRoOih0aGlzLl90aWNrTGFiZWxNYXhXaWR0aD1yLHRoaXMucmVkcmF3KCksdGhpcyl9LHQucHJvdG90eXBlLnRpY2tMYWJlbE1heExpbmVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl90aWNrTGFiZWxNYXhMaW5lczoodGhpcy5fdGlja0xhYmVsTWF4TGluZXM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0LnByb3RvdHlwZS5fdGlja1NwYWNlUmVxdWlyZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCkrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCl9LHQucHJvdG90eXBlLl9kcmF3VGlja3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG8sYTtzd2l0Y2godGhpcy50aWNrTGFiZWxBbmdsZSgpKXtjYXNlIDA6bz17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImNlbnRlciIsYm90dG9tOiJjZW50ZXIifSxhPXtsZWZ0OiJjZW50ZXIiLHJpZ2h0OiJjZW50ZXIiLHRvcDoiYm90dG9tIixib3R0b206InRvcCJ9O2JyZWFrO2Nhc2UgOTA6bz17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6InJpZ2h0Iixib3R0b206ImxlZnQifSxhPXtsZWZ0OiJ0b3AiLHJpZ2h0OiJib3R0b20iLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9O2JyZWFrO2Nhc2UtOTA6bz17bGVmdDoiY2VudGVyIixyaWdodDoiY2VudGVyIix0b3A6ImxlZnQiLGJvdHRvbToicmlnaHQifSxhPXtsZWZ0OiJib3R0b20iLHJpZ2h0OiJ0b3AiLHRvcDoiY2VudGVyIixib3R0b206ImNlbnRlciJ9O2JyZWFrfW4uZWFjaChmdW5jdGlvbihzKXt2YXIgbD1ZaXQuc2VsZWN0KHRoaXMpLGM9aS5pc0hvcml6b250YWwoKT9yOmkud2lkdGgoKS1pLl90aWNrU3BhY2VSZXF1aXJlZCgpLHU9aS5pc0hvcml6b250YWwoKT9pLmhlaWdodCgpLWkuX3RpY2tTcGFjZVJlcXVpcmVkKCk6cixoPXt4QWxpZ246b1tpLm9yaWVudGF0aW9uKCldLHlBbGlnbjphW2kub3JpZW50YXRpb24oKV0sdGV4dFJvdGF0aW9uOmkudGlja0xhYmVsQW5nbGUoKSx0ZXh0U2hlYXI6aS50aWNrTGFiZWxTaGVhckFuZ2xlKCl9O2lmKGkuX3RpY2tMYWJlbE1heFdpZHRoIT1udWxsKXtpZihpLm9yaWVudGF0aW9uKCk9PT0ibGVmdCImJmM+aS5fdGlja0xhYmVsTWF4V2lkdGgpe3ZhciBmPWMtaS5fdGlja0xhYmVsTWF4V2lkdGgscD1sLmF0dHIoInRyYW5zZm9ybSIpKyIgdHJhbnNsYXRlKCIrZisiLCAwKSI7bC5hdHRyKCJ0cmFuc2Zvcm0iLHApfWM9TWF0aC5taW4oYyxpLl90aWNrTGFiZWxNYXhXaWR0aCl9aS5fd3JpdGVyLndyaXRlKGkuZm9ybWF0dGVyKCkocyksYyx1LGgsbC5ub2RlKCkpfSl9LHQucHJvdG90eXBlLl9tZWFzdXJlVGlja0xhYmVscz1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9zY2FsZSxhPW8uY2xvbmVXaXRob3V0UHJvdmlkZXJzKCkucmFuZ2UoWzAsdGhpcy5pc0hvcml6b250YWwoKT9yOm5dKSxzPXRoaXMuZ2V0RG93bnNhbXBsZUluZm8oYSksbD1zLmRvbWFpbixjPXMuc3RlcFdpZHRoLHU9ci10aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpO3RoaXMuaXNIb3Jpem9udGFsKCkmJih1PWMsdGhpcy5fdGlja0xhYmVsQW5nbGUhPT0wJiYodT1uLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLHU9TWF0aC5tYXgodSwwKSk7dmFyIGg9Yzt0aGlzLmlzSG9yaXpvbnRhbCgpJiYoaD1uLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCksdGhpcy5fdGlja0xhYmVsQW5nbGUhPT0wJiYoaD1yLXRoaXMuX3RpY2tTcGFjZVJlcXVpcmVkKCkpLGg9TWF0aC5tYXgoaCwwKSksdGhpcy5fdGlja0xhYmVsTWF4V2lkdGghPW51bGwmJih1PU1hdGgubWluKHUsdGhpcy5fdGlja0xhYmVsTWF4V2lkdGgpKTt2YXIgZj1sLm1hcChmdW5jdGlvbih4KXtyZXR1cm4gaS5fd3JhcHBlci53cmFwKGkuZm9ybWF0dGVyKCkoeCksaS5fbWVhc3VyZXIsdSxoKX0pLHA9dGhpcy5pc0hvcml6b250YWwoKSYmdGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wP1lpdC5zdW06cVh0Lk1hdGgubWF4LGQ9dGhpcy5pc0hvcml6b250YWwoKSYmdGhpcy5fdGlja0xhYmVsQW5nbGU9PT0wP3FYdC5NYXRoLm1heDpZaXQuc3VtLGc9cChmLGZ1bmN0aW9uKHgpe3JldHVybiBpLl9tZWFzdXJlci5tZWFzdXJlKHgud3JhcHBlZFRleHQpLndpZHRofSwwKSxfPWQoZixmdW5jdGlvbih4KXtyZXR1cm4gaS5fbWVhc3VyZXIubWVhc3VyZSh4LndyYXBwZWRUZXh0KS5oZWlnaHR9LDApO3JldHVybiB0aGlzLl90aWNrTGFiZWxBbmdsZSE9PTAmJih5PVtfLGddLGc9eVswXSxfPXlbMV0pLHt1c2VkV2lkdGg6Zyx1c2VkSGVpZ2h0Ol99O3ZhciB5fSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKTt2YXIgbj10aGlzLl9zY2FsZSxpPXRoaXMuZ2V0RG93bnNhbXBsZUluZm8obiksbz1pLmRvbWFpbixhPWkuc3RlcFdpZHRoLHM9YTt0aGlzLmlzSG9yaXpvbnRhbCgpJiZ0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCE9bnVsbCYmKHM9TWF0aC5taW4ocyx0aGlzLl90aWNrTGFiZWxNYXhXaWR0aCkpO3ZhciBsPWZ1bmN0aW9uKHAsZCl7dmFyIGc9bi5zY2FsZShwKS1zLzIsXz1yLmlzSG9yaXpvbnRhbCgpP2c6MCx5PXIuaXNIb3Jpem9udGFsKCk/MDpnO3JldHVybiJ0cmFuc2xhdGUoIitfKyIsIit5KyIpIn0sYz10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIitqaXQuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKG8pLHU9Yy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoaml0LkF4aXMuVElDS19MQUJFTF9DTEFTUywhMCkubWVyZ2UoYyk7Yy5leGl0KCkucmVtb3ZlKCksdS5hdHRyKCJ0cmFuc2Zvcm0iLGwpLHUudGV4dCgiIiksdGhpcy5fZHJhd1RpY2tzKGEsdSk7dmFyIGg9dGhpcy5vcmllbnRhdGlvbigpPT09InJpZ2h0Ij90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjAsZj10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj90aGlzLl90aWNrU3BhY2VSZXF1aXJlZCgpOjA7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitoKyIsIitmKyIpIiksdGhpcy5fc2hvd0FsbFRpY2tNYXJrcygpLHRoaXMuX3Nob3dBbGxUaWNrTGFiZWxzKCksdGhpcy5faGlkZVRpY2tNYXJrc1dpdGhvdXRMYWJlbCgpLHRoaXN9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5pc0hvcml6b250YWwoKXx8dGhpcy5fc2NhbGUucmFuZ2UoWzAsdGhpcy5oZWlnaHQoKV0pLHRoaXN9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHQuX01JTklNVU1fV0lEVEhfUEVSX0xBQkVMX1BYPTE1LHR9KGppdC5BeGlzKTtYaXQuQ2F0ZWdvcnk9UnplfSk7dmFyIFdYdD1IKEtpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoS2l0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTnplPShkZSgpLFV0KHBlKSksT0Y9KEVyKCksVXQoTXIpKSwkaXQ9X2woKSxEemU9QnUoKSxiUz1GZSgpLHdTPVFBKCksT3plPWZ1bmN0aW9uKGUpe056ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gaS5fdGlja0xhYmVsUG9zaXRpb25pbmc9ImNlbnRlciIsaS5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249ITEsaS5mb3JtYXR0ZXIoRHplLmdlbmVyYWwoKSksaX1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyk7dmFyIHI9bmV3ICRpdC5TdmdDb250ZXh0KHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5ub2RlKCksd1MuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTt0aGlzLl9tZWFzdXJlcj1uZXcgJGl0LkNhY2hlTWVhc3VyZXIociksdGhpcy5fd3JhcHBlcj1uZXcgJGl0LldyYXBwZXIoKS5tYXhMaW5lcygxKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVXaWR0aD1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3VzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uP3RoaXMuX2NvbXB1dGVBcHByb3hpbWF0ZVRleHRXaWR0aCgpOnRoaXMuX2NvbXB1dGVFeGFjdFRleHRXaWR0aCgpO3JldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZz09PSJjZW50ZXIiP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3I6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcil9LHQucHJvdG90eXBlLl9jb21wdXRlRXhhY3RUZXh0V2lkdGg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fZ2V0VGlja1ZhbHVlcygpLGk9bi5tYXAoZnVuY3Rpb24obyl7dmFyIGE9ci5mb3JtYXR0ZXIoKShvKTtyZXR1cm4gci5fbWVhc3VyZXIubWVhc3VyZShhKS53aWR0aH0pO3JldHVybiBiUy5NYXRoLm1heChpLDApfSx0LnByb3RvdHlwZS5fY29tcHV0ZUFwcHJveGltYXRlVGV4dFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldFRpY2tWYWx1ZXMoKSxpPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoIk0iKS53aWR0aCxvPW4ubWFwKGZ1bmN0aW9uKGEpe3ZhciBzPXIuZm9ybWF0dGVyKCkoYSk7cmV0dXJuIHMubGVuZ3RoKml9KTtyZXR1cm4gYlMuTWF0aC5tYXgobywwKX0sdC5wcm90b3R5cGUuX2NvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0O3JldHVybiB0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZz09PSJjZW50ZXIiP3RoaXMuX21heExhYmVsVGlja0xlbmd0aCgpK3RoaXMudGlja0xhYmVsUGFkZGluZygpK3I6TWF0aC5tYXgodGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrcil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fc2NhbGUsbj1yLmRvbWFpbigpLGk9blswXTw9blsxXT9uWzBdOm5bMV0sbz1uWzBdPj1uWzFdP25bMF06blsxXTtyZXR1cm4gci50aWNrcygpLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYT49aSYmYTw9b30pfSx0LnByb3RvdHlwZS5fcmVzY2FsZT1mdW5jdGlvbigpe2lmKCEhdGhpcy5faXNTZXR1cCl7aWYoIXRoaXMuaXNIb3Jpem9udGFsKCkpe3ZhciByPXRoaXMuX2NvbXB1dGVXaWR0aCgpO2lmKHI+dGhpcy53aWR0aCgpfHxyPHRoaXMud2lkdGgoKS10aGlzLm1hcmdpbigpKXt0aGlzLnJlZHJhdygpO3JldHVybn19dGhpcy5yZW5kZXIoKX19LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXt4OjAseTowLGR4OiIwZW0iLGR5OiIwLjNlbSJ9LGk9dGhpcy5fbWF4TGFiZWxUaWNrTGVuZ3RoKCksbz10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKSxhPSJtaWRkbGUiLHM9MCxsPTAsYz0wLHU9MDtpZih0aGlzLmlzSG9yaXpvbnRhbCgpKXN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSJsZWZ0IjphPSJlbmQiLHM9LW8sdT1vO2JyZWFrO2Nhc2UiY2VudGVyIjp1PWkrbzticmVhaztjYXNlInJpZ2h0IjphPSJzdGFydCIscz1vLHU9bzticmVha31lbHNlIHN3aXRjaCh0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyl7Y2FzZSJ0b3AiOm4uZHk9Ii0wLjNlbSIsYz1vLGw9LW87YnJlYWs7Y2FzZSJjZW50ZXIiOmM9aStvO2JyZWFrO2Nhc2UiYm90dG9tIjpuLmR5PSIxZW0iLGM9byxsPW87YnJlYWt9dmFyIGg9dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7c3dpdGNoKHRoaXMub3JpZW50YXRpb24oKSl7Y2FzZSJib3R0b20iOm4ueD1oLngxLG4uZHk9IjAuOTVlbSIsbD1oLnkxK3U7YnJlYWs7Y2FzZSJ0b3AiOm4ueD1oLngxLG4uZHk9Ii0uMjVlbSIsbD1oLnkxLXU7YnJlYWs7Y2FzZSJsZWZ0IjphPSJlbmQiLHM9aC54MS1jLG4ueT1oLnkxO2JyZWFrO2Nhc2UicmlnaHQiOmE9InN0YXJ0IixzPWgueDErYyxuLnk9aC55MTticmVha312YXIgZj10aGlzLl9nZXRUaWNrVmFsdWVzKCkscD10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmRhdGEoZik7cC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9cC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQod1MuQXhpcy5USUNLX0xBQkVMX0NMQVNTLCEwKS5tZXJnZShwKTtkLnN0eWxlKCJ0ZXh0LWFuY2hvciIsYSkuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikuYXR0cnMobikudGV4dChmdW5jdGlvbihfKXtyZXR1cm4gci5mb3JtYXR0ZXIoKShfKX0pO3ZhciBnPSJ0cmFuc2xhdGUoIitzKyIsICIrbCsiKSI7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5hdHRyKCJ0cmFuc2Zvcm0iLGcpLHRoaXMuX3Nob3dBbGxUaWNrTWFya3MoKSx0aGlzLnNob3dFbmRUaWNrTGFiZWxzKCl8fHRoaXMuX2hpZGVFbmRUaWNrTGFiZWxzKCksdGhpcy5faGlkZU92ZXJmbG93aW5nVGlja0xhYmVscygpLHRoaXMuX2hpZGVPdmVybGFwcGluZ1RpY2tMYWJlbHMoKSx0aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZyE9PSJjZW50ZXIiJiZ0aGlzLl9oaWRlVGlja01hcmtzV2l0aG91dExhYmVsKCksdGhpc30sdC5wcm90b3R5cGUudGlja0xhYmVsUG9zaXRpb249ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fdGlja0xhYmVsUG9zaXRpb25pbmc7dmFyIG49ci50b0xvd2VyQ2FzZSgpO2lmKHRoaXMuaXNIb3Jpem9udGFsKCkpe2lmKCEobj09PSJsZWZ0Inx8bj09PSJjZW50ZXIifHxuPT09InJpZ2h0IikpdGhyb3cgbmV3IEVycm9yKG4rIiBpcyBub3QgYSB2YWxpZCB0aWNrIGxhYmVsIHBvc2l0aW9uIGZvciBhIGhvcml6b250YWwgTnVtZXJpY0F4aXMiKX1lbHNlIGlmKCEobj09PSJ0b3AifHxuPT09ImNlbnRlciJ8fG49PT0iYm90dG9tIikpdGhyb3cgbmV3IEVycm9yKG4rIiBpcyBub3QgYSB2YWxpZCB0aWNrIGxhYmVsIHBvc2l0aW9uIGZvciBhIHZlcnRpY2FsIE51bWVyaWNBeGlzIik7cmV0dXJuIHRoaXMuX3RpY2tMYWJlbFBvc2l0aW9uaW5nPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS51c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl91c2VzVGV4dFdpZHRoQXBwcm94aW1hdGlvbjoodGhpcy5fdXNlc1RleHRXaWR0aEFwcHJveGltYXRpb249cix0aGlzKX0sdC5wcm90b3R5cGUuX2hpZGVFbmRUaWNrTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5lbGVtZW50KCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5fdGlja0xhYmVsQ29udGFpbmVyLnNlbGVjdEFsbCgiLiIrd1MuQXhpcy5USUNLX0xBQkVMX0NMQVNTKTtpZihuLnNpemUoKSE9PTApe3ZhciBpPW4ubm9kZXMoKVswXTtiUy5ET00uY2xpZW50UmVjdEluc2lkZShpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHIpfHxPRi5zZWxlY3QoaSkuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKTt2YXIgbz1uLm5vZGVzKClbbi5zaXplKCktMV07YlMuRE9NLmNsaWVudFJlY3RJbnNpZGUoby5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyKXx8T0Yuc2VsZWN0KG8pLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9fSx0LnByb3RvdHlwZS5faGlkZU92ZXJsYXBwaW5nVGlja0xhYmVscz1mdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLl90aWNrTGFiZWxDb250YWluZXIuc2VsZWN0QWxsKCIuIit3Uy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLmZpbHRlcihmdW5jdGlvbihvLGEpe3ZhciBzPU9GLnNlbGVjdCh0aGlzKS5zdHlsZSgidmlzaWJpbGl0eSIpO3JldHVybiBzPT09ImluaGVyaXQifHxzPT09InZpc2libGUifSksbj1yLm5vZGVzKCkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfSksaT0xOyF0aGlzLl9oYXNPdmVybGFwV2l0aEludGVydmFsKGksbikmJmk8bi5sZW5ndGg7KWkrPTE7ci5lYWNoKGZ1bmN0aW9uKG8sYSl7dmFyIHM9T0Yuc2VsZWN0KHRoaXMpO2ElaSE9PTAmJnMuc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKX0pfSx0LnByb3RvdHlwZS5faGFzT3ZlcmxhcFdpdGhJbnRlcnZhbD1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10aGlzLl90aWNrTGFiZWxQb3NpdGlvbmluZz09PSJjZW50ZXIiP3RoaXMudGlja0xhYmVsUGFkZGluZygpOnRoaXMudGlja0xhYmVsUGFkZGluZygpKjMsbz1uLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYlMuRE9NLmV4cGFuZFJlY3QoYyxpKX0pLGE9MDthPG8ubGVuZ3RoLXI7YSs9cil7dmFyIHM9b1thXSxsPW9bYStyXTtpZihiUy5ET00uY2xpZW50UmVjdHNPdmVybGFwKHMsbCkpcmV0dXJuITF9cmV0dXJuITB9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHR9KHdTLkF4aXMpO0tpdC5OdW1lcmljPU96ZX0pO3ZhciBZWHQ9SCh6Rj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoekYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB6emU9RmUoKTtmdW5jdGlvbiBGemUoZSl7aWYoZTw9MCl0aHJvdyBuZXcgRXJyb3IoImludGVydmFsIG11c3QgYmUgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQuZG9tYWluKCksbj1NYXRoLm1pbihyWzBdLHJbMV0pLGk9TWF0aC5tYXgoclswXSxyWzFdKSxvPU1hdGguY2VpbChuL2UpKmUsYT1NYXRoLmZsb29yKChpLW8pL2UpKzEscz1uJWU9PT0wP1tdOltuXSxsPXp6ZS5NYXRoLnJhbmdlKDAsYSkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiBvK3UqZX0pLGM9aSVlPT09MD9bXTpbaV07cmV0dXJuIHMuY29uY2F0KGwpLmNvbmNhdChjKX19ekYuaW50ZXJ2YWxUaWNrR2VuZXJhdG9yPUZ6ZTtmdW5jdGlvbiBCemUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZWZhdWx0VGlja3MoKTtyZXR1cm4gdC5maWx0ZXIoZnVuY3Rpb24ocixuKXtyZXR1cm4gciUxPT09MHx8bj09PTB8fG49PT10Lmxlbmd0aC0xfSl9fXpGLmludGVnZXJUaWNrR2VuZXJhdG9yPUJ6ZX0pO3ZhciB0ND1IKEkxPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShJMSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7ZnVuY3Rpb24gSml0KGUsdCxyKXtyZXR1cm4gci0oci1lKSp0fUkxLnpvb21PdXQ9Sml0O2Z1bmN0aW9uIFppdChlLHQscil7cmV0dXJuKGUqdC1yKS8odC0xKX1mdW5jdGlvbiBIemUoZSx0LHIsbixpLG8sYSl7cmV0dXJuIHQ9alh0KGUsdCxuLGkpLFhYdChlLHQscixvLGEpfUkxLmNvbnN0cmFpbmVkWm9vbT1IemU7ZnVuY3Rpb24galh0KGUsdCxyLG4pe3ZhciBpPXQ+MSxvPWk/bjpyO2lmKG89PW51bGwpcmV0dXJuIHQ7dmFyIGE9ZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpLHM9YVswXSxsPWFbMV0sYz1NYXRoLmFicyhsLXMpLHU9aT9NYXRoLm1pbjpNYXRoLm1heDtyZXR1cm4gdSh0LG8vYyl9STEuY29uc3RyYWluWm9vbUV4dGVudHM9alh0O2Z1bmN0aW9uIFhYdChlLHQscixuLGkpe2lmKHQ8PTEpcmV0dXJue2NlbnRlclBvaW50OnIsem9vbUFtb3VudDp0fTtpZihuPT1udWxsJiZpPT1udWxsKXJldHVybntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6dH07dmFyIG89JFh0KGUpLGE9VXplKGUpLHM9YT8xLzA6LTEvMCxsPWE/LTEvMDoxLzA7bj1uPT1udWxsP3M6bixpPWk9PW51bGw/bDppO3ZhciBjPWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSx1PWNbMF0saD1jWzFdLGY9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGkpLHA9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGgpLGQ9Sml0KHAsdCxyKSxnPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbihuKSxfPWUuc2NhbGVUcmFuc2Zvcm1hdGlvbih1KSx5PUppdChfLHQscikseD1NYXRoLmFicyhmLWcpLGI9TWF0aC5hYnMoZC15KTtpZihiPngpe3ZhciBTPShmLWcpLyhwLV8pO2lmKFMhPT0xKXt2YXIgQz1aaXQocCxTLGYpO3JldHVybntjZW50ZXJQb2ludDpDLHpvb21BbW91bnQ6U319ZWxzZSByZXR1cm57Y2VudGVyUG9pbnQ6cix6b29tQW1vdW50OlN9fWVsc2UgcmV0dXJuIGQ+ZiE9bz97Y2VudGVyUG9pbnQ6Wml0KHAsdCxmKSx6b29tQW1vdW50OnR9Onk8ZyE9bz97Y2VudGVyUG9pbnQ6Wml0KF8sdCxnKSx6b29tQW1vdW50OnR9OntjZW50ZXJQb2ludDpyLHpvb21BbW91bnQ6dH19STEuY29uc3RyYWluWm9vbVZhbHVlcz1YWHQ7ZnVuY3Rpb24gVnplKGUsdCxyLG4pe3ZhciBpPWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxvPWlbMF0sYT1pWzFdLHM9JFh0KGUpO2lmKHQ+MCE9PXMpe3ZhciBsPW47aWYobCE9bnVsbCl7dmFyIGM9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGEpLHU9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGwpO3Q9KHM/TWF0aC5tYXg6TWF0aC5taW4pKGMrdCx1KS1jfX1lbHNle3ZhciBsPXI7aWYobCE9bnVsbCl7dmFyIGg9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKG8pLGY9ZS5zY2FsZVRyYW5zZm9ybWF0aW9uKGwpO3Q9KHM/TWF0aC5taW46TWF0aC5tYXgpKGgrdCxmKS1ofX1yZXR1cm4gdH1JMS5jb25zdHJhaW5lZFRyYW5zbGF0aW9uPVZ6ZTtmdW5jdGlvbiAkWHQoZSl7dmFyIHQ9ZS5yYW5nZSgpO3JldHVybiB0WzFdPHRbMF19ZnVuY3Rpb24gVXplKGUpe3ZhciB0PWUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKTtyZXR1cm4gdFsxXTx0WzBdfX0pO3ZhciBMMT1IKFFpdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUWl0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgS1h0PUZlKCkscXplPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2F1dG9Eb21haW5BdXRvbWF0aWNhbGx5PSEwLHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITEsdGhpcy5fdXBkYXRlSWQ9MCx0aGlzLl9jYWxsYmFja3M9bmV3IEtYdC5DYWxsYmFja1NldCx0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycz1uZXcgS1h0LlNldH1yZXR1cm4gZS5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuW119LGUucHJvdG90eXBlLl9nZXRBbGxJbmNsdWRlZFZhbHVlcz1mdW5jdGlvbih0KXt2YXIgcj10aGlzO3Q9PT12b2lkIDAmJih0PSExKTt2YXIgbj1bXTtyZXR1cm4gdGhpcy5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcnMuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pKHIsdCk7bj1uLmNvbmNhdChvKX0pLG59LGUucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sZS5wcm90b3R5cGUub25VcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5hZGQodCksdGhpc30sZS5wcm90b3R5cGUub2ZmVXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jYWxsYmFja3MuZGVsZXRlKHQpLHRoaXN9LGUucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkKyssdGhpcy5fY2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcyl9LGUucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITAsdGhpcy5fc2V0RG9tYWluKHRoaXMuX2dldEV4dGVudCgpKSx0aGlzfSxlLnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlPWZ1bmN0aW9uKCl7dGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHkmJnRoaXMuYXV0b0RvbWFpbigpfSxlLnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHNjYWxlIil9LGUucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LGUucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9nZXREb21haW4oKToodGhpcy5fYXV0b0RvbWFpbkF1dG9tYXRpY2FsbHk9ITEsdGhpcy5fc2V0RG9tYWluKHQpLHRoaXMpfSxlLnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0RG9tYWluIil9LGUucHJvdG90eXBlLl9zZXREb21haW49ZnVuY3Rpb24odCl7dGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzc3x8KHRoaXMuX2RvbWFpbk1vZGlmaWNhdGlvbkluUHJvZ3Jlc3M9ITAsdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKHQpLHRoaXMuX2Rpc3BhdGNoVXBkYXRlKCksdGhpcy5fZG9tYWluTW9kaWZpY2F0aW9uSW5Qcm9ncmVzcz0hMSl9LGUucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfYmFja2luZ0RvbWFpbiIpfSxlLnByb3RvdHlwZS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9nZXRSYW5nZSgpOih0aGlzLl9zZXRSYW5nZSh0KSx0aGlzKX0sZS5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBfZ2V0UmFuZ2UiKX0sZS5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX3NldFJhbmdlIil9LGUucHJvdG90eXBlLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXJzLmFkZCh0KSx0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSxlLnByb3RvdHlwZS5yZW1vdmVJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVycy5kZWxldGUodCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sZS5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9LGV9KCk7UWl0LlNjYWxlPXF6ZX0pO3ZhciByb3Q9SChlb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGVvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEd6ZT0oZGUoKSxVdChwZSkpLEZGPShFcigpLFV0KE1yKSksV3plPXQ0KCksWlh0PUZlKCksWXplPUwxKCksdG90PVswLDFdLGp6ZT1mdW5jdGlvbihlKXtHemUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyLl9yYW5nZT1bMCwxXSxyLl9kM1NjYWxlPUZGLnNjYWxlQmFuZCgpLHIuX2QzU2NhbGUucmFuZ2UodG90KSxyLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGU9RkYuc2NhbGVMaW5lYXIoKSxyLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRvdCk7dmFyIG49LjM7cmV0dXJuIHIuX2lubmVyUGFkZGluZz10Ll9jb252ZXJ0VG9QbG90dGFibGVJbm5lclBhZGRpbmcobiksci5fb3V0ZXJQYWRkaW5nPXQuX2NvbnZlcnRUb1Bsb3R0YWJsZU91dGVyUGFkZGluZyguNSxuKSxyfXJldHVybiB0LnByb3RvdHlwZS5jbG9uZVdpdGhvdXRQcm92aWRlcnM9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdCgpLmRvbWFpbih0aGlzLmRvbWFpbigpKS5yYW5nZSh0aGlzLnJhbmdlKCkpLmlubmVyUGFkZGluZyh0aGlzLmlubmVyUGFkZGluZygpKS5vdXRlclBhZGRpbmcodGhpcy5vdXRlclBhZGRpbmcoKSk7cmV0dXJuIHIuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4odGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbigpKSxyfSx0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXtyZXR1cm4gWlh0LkFycmF5LnVuaXEocil9LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gWlh0LkFycmF5LnVuaXEodGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXMoKSl9LHQucHJvdG90eXBlLmRvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuaW52ZXJ0UmFuZ2U9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztyPT09dm9pZCAwJiYocj10aGlzLnJhbmdlKCkpO3ZhciBpPXRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCksbz10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24oclswXSksYT10aGlzLmludmVydGVkVHJhbnNmb3JtYXRpb24oclsxXSkscz10aGlzLl9kM1NjYWxlLmRvbWFpbigpLGw9cy5tYXAoZnVuY3Rpb24oaCl7cmV0dXJuIG4uX2QzU2NhbGUoaCkraS8yfSksYz1GRi5iaXNlY3QobCxvKSx1PUZGLmJpc2VjdChsLGEpO3JldHVybiBzLnNsaWNlKGMsdSl9LHQucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5yYW5nZS5jYWxsKHRoaXMscil9LHQuX2NvbnZlcnRUb1Bsb3R0YWJsZUlubmVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gMS8oMS1yKS0xfSx0Ll9jb252ZXJ0VG9QbG90dGFibGVPdXRlclBhZGRpbmc9ZnVuY3Rpb24ocixuKXtyZXR1cm4gci8oMS1uKX0sdC5wcm90b3R5cGUuX3NldEJhbmRzPWZ1bmN0aW9uKCl7dmFyIHI9MS0xLygxK3RoaXMuaW5uZXJQYWRkaW5nKCkpLG49dGhpcy5vdXRlclBhZGRpbmcoKS8oMSt0aGlzLmlubmVyUGFkZGluZygpKTt0aGlzLl9kM1NjYWxlLnBhZGRpbmdJbm5lcihyKSx0aGlzLl9kM1NjYWxlLnBhZGRpbmdPdXRlcihuKX0sdC5wcm90b3R5cGUucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jlc2NhbGVCYW5kKHRoaXMuX2QzU2NhbGUuYmFuZHdpZHRoKCkpfSx0LnByb3RvdHlwZS5zdGVwV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzY2FsZUJhbmQodGhpcy5fZDNTY2FsZS5iYW5kd2lkdGgoKSooMSt0aGlzLmlubmVyUGFkZGluZygpKSl9LHQucHJvdG90eXBlLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tYWluKCl9LHQucHJvdG90eXBlLmlubmVyUGFkZGluZz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9pbm5lclBhZGRpbmc6KHRoaXMuX2lubmVyUGFkZGluZz1yLHRoaXMucmFuZ2UodGhpcy5yYW5nZSgpKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5vdXRlclBhZGRpbmc9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fb3V0ZXJQYWRkaW5nOih0aGlzLl9vdXRlclBhZGRpbmc9cix0aGlzLnJhbmdlKHRoaXMucmFuZ2UoKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZDNTY2FsZShyKSt0aGlzLl9kM1NjYWxlLmJhbmR3aWR0aCgpLzI7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZShuKX0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz1mdW5jdGlvbihhKXtyZXR1cm4gaS5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmludmVydChXemUuem9vbU91dChhLHIsbikpfTt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSgpLm1hcChvKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sdC5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihvKXtyZXR1cm4gbi5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmludmVydChvK3IpfTt0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuZG9tYWluKHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5yYW5nZSgpLm1hcChpKSksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sdC5wcm90b3R5cGUuc2NhbGVUcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1RyYW5zZm9ybWF0aW9uU2NhbGUuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0b3R9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZS5kb21haW4oKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLmRvbWFpbihyKSx0aGlzLl9kaXNwYXRjaFVwZGF0ZSgpfSx0LnByb3RvdHlwZS5fZ2V0RG9tYWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbigpfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMuX3NldEJhbmRzKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yYW5nZX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX3JhbmdlPXIsdGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlLnJhbmdlKHIpLHRoaXMuX3NldEJhbmRzKCl9LHQucHJvdG90eXBlLl9yZXNjYWxlQmFuZD1mdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5hYnModGhpcy5fZDNUcmFuc2Zvcm1hdGlvblNjYWxlKHIpLXRoaXMuX2QzVHJhbnNmb3JtYXRpb25TY2FsZSgwKSl9LHR9KFl6ZS5TY2FsZSk7ZW90LkNhdGVnb3J5PWp6ZX0pO3ZhciBKWHQ9SChub3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG5vdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFh6ZT0oZGUoKSxVdChwZSkpLE5mPShFcigpLFV0KE1yKSksU1M9RmUoKSwkemU9TDEoKSxLemU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5jb3VudD0wLHRoaXMudHJhY2tlcj17fX1yZXR1cm4gZS5wcm90b3R5cGUuZ2V0SW5kZXg9ZnVuY3Rpb24odCl7aWYodGhpcy50cmFja2VyW3RdIT1udWxsKXJldHVybiB0aGlzLnRyYWNrZXJbdF07dmFyIHI9dGhpcy5jb3VudDtyZXR1cm4gdGhpcy50cmFja2VyW3RdPXIsdGhpcy5jb3VudCs9MSxyfSxlLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3RoaXMuY291bnQ9MCx0aGlzLnRyYWNrZXI9e319LGV9KCksWnplPWZ1bmN0aW9uKGUpe1h6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztuLl9yYW5nZUxlbmd0aD0xLG4uX3RyYWNrZXI9bmV3IEt6ZTt2YXIgaTtzd2l0Y2gocil7Y2FzZSBudWxsOmNhc2Ugdm9pZCAwOnQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9PW51bGwmJih0Ll9wbG90dGFibGVDb2xvckNhY2hlPXQuX2dldFBsb3R0YWJsZUNvbG9ycygpKSxpPU5mLnNjYWxlT3JkaW5hbCgpLnJhbmdlKHQuX3Bsb3R0YWJsZUNvbG9yQ2FjaGUpO2JyZWFrO2Nhc2UiQ2F0ZWdvcnkxMCI6Y2FzZSJjYXRlZ29yeTEwIjpjYXNlIjEwIjppPU5mLnNjYWxlT3JkaW5hbChOZi5zY2hlbWVDYXRlZ29yeTEwKTticmVhaztjYXNlIkNhdGVnb3J5MjAiOmNhc2UiY2F0ZWdvcnkyMCI6Y2FzZSIyMCI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMCk7YnJlYWs7Y2FzZSJDYXRlZ29yeTIwYiI6Y2FzZSJjYXRlZ29yeTIwYiI6Y2FzZSIyMGIiOmk9TmYuc2NhbGVPcmRpbmFsKE5mLnNjaGVtZUNhdGVnb3J5MjBiKTticmVhaztjYXNlIkNhdGVnb3J5MjBjIjpjYXNlImNhdGVnb3J5MjBjIjpjYXNlIjIwYyI6aT1OZi5zY2FsZU9yZGluYWwoTmYuc2NoZW1lQ2F0ZWdvcnkyMGMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2xvclNjYWxlIHR5cGUiKX1yZXR1cm4gbi5fZDNTY2FsZT1pLG4uX3JhbmdlTGVuZ3RoPW4uX2QzU2NhbGUucmFuZ2UoKS5sZW5ndGgsbn1yZXR1cm4gdC5wcm90b3R5cGUuZXh0ZW50T2ZWYWx1ZXM9ZnVuY3Rpb24ocil7cmV0dXJuIFNTLkFycmF5LnVuaXEocil9LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gU1MuQXJyYXkudW5pcSh0aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpKX0sdC5pbnZhbGlkYXRlQ29sb3JDYWNoZT1mdW5jdGlvbigpe3QuX3Bsb3R0YWJsZUNvbG9yQ2FjaGU9bnVsbH0sdC5fZ2V0UGxvdHRhYmxlQ29sb3JzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPVtdLG49TmYuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJwbG90dGFibGUtY29sb3ItdGVzdGVyIiksaT1TUy5Db2xvci5jb2xvclRlc3QobiwiIiksbz0wLGE9U1MuQ29sb3IuY29sb3JUZXN0KG4sInBsb3R0YWJsZS1jb2xvcnMtMCIpO2EhPW51bGwmJm88dGhpcy5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1MmJiEoYT09PWkmJmE9PT1yW3IubGVuZ3RoLTFdKTspci5wdXNoKGEpLG8rKyxhPVNTLkNvbG9yLmNvbG9yVGVzdChuLCJwbG90dGFibGUtY29sb3JzLSIrbyk7cmV0dXJuIG4ucmVtb3ZlKCkscn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fZDNTY2FsZShyKSxpPXRoaXMuX3RyYWNrZXIuZ2V0SW5kZXgociksbz1NYXRoLmZsb29yKGkvdGhpcy5fcmFuZ2VMZW5ndGgpO2lmKG89PT0wKXJldHVybiBuO3ZhciBhPU1hdGgubG9nKG8qdC5fTE9PUF9MSUdIVEVOX0ZBQ1RPUisxKTtyZXR1cm4gU1MuQ29sb3IubGlnaHRlbkNvbG9yKG4sYSl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcy5fdHJhY2tlci5jbGVhcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKSx0aGlzLl9yYW5nZUxlbmd0aD1yLmxlbmd0aH0sdC5fTE9PUF9MSUdIVEVOX0ZBQ1RPUj0xLjYsdC5fTUFYSU1VTV9DT0xPUlNfRlJPTV9DU1M9MjU2LHR9KCR6ZS5TY2FsZSk7bm90LkNvbG9yPVp6ZX0pO3ZhciB0JHQ9SChpb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEp6ZT0oZGUoKSxVdChwZSkpLE1TPShFcigpLFV0KE1yKSksUVh0PUZlKCksUXplPUwxKCksdEZlPWZ1bmN0aW9uKGUpe0p6ZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJsaW5lYXIiKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7c3dpdGNoKHIpe2Nhc2UibGluZWFyIjpuLl9jb2xvclNjYWxlPU1TLnNjYWxlTGluZWFyKCk7YnJlYWs7Y2FzZSJsb2ciOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVMb2coKTticmVhaztjYXNlInNxcnQiOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVTcXJ0KCk7YnJlYWs7Y2FzZSJwb3ciOm4uX2NvbG9yU2NhbGU9TVMuc2NhbGVQb3coKTticmVha31pZihuLl9jb2xvclNjYWxlPT1udWxsKXRocm93IG5ldyBFcnJvcigidW5rbm93biBRdWFudGl0YXRpdmVTY2FsZSBzY2FsZSB0eXBlICIrcik7cmV0dXJuIG4ucmFuZ2UodC5SRURTKSxufXJldHVybiB0LnByb3RvdHlwZS5leHRlbnRPZlZhbHVlcz1mdW5jdGlvbihyKXt2YXIgbj1NUy5leHRlbnQocik7cmV0dXJuIG5bMF09PW51bGx8fG5bMV09PW51bGw/W106bn0sdC5wcm90b3R5cGUuX2QzSW50ZXJwb2xhdGVkU2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29sb3JTY2FsZS5yYW5nZShbMCwxXSkuaW50ZXJwb2xhdGUodGhpcy5faW50ZXJwb2xhdGVDb2xvcnMoKSl9LHQucHJvdG90eXBlLl9pbnRlcnBvbGF0ZUNvbG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2NvbG9yUmFuZ2U7aWYoci5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIHNjYWxlIGFycmF5cyBtdXN0IGhhdmUgYXQgbGVhc3QgdHdvIGVsZW1lbnRzLiIpO3JldHVybiBmdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihvKXtvPU1hdGgubWF4KDAsTWF0aC5taW4oMSxvKSk7dmFyIGE9byooci5sZW5ndGgtMSkscz1NYXRoLmZsb29yKGEpLGw9TWF0aC5jZWlsKGEpLGM9YS1zO3JldHVybiBNUy5pbnRlcnBvbGF0ZUxhYihyW3NdLHJbbF0pKGMpfX19LHQucHJvdG90eXBlLl9yZXNldFNjYWxlPWZ1bmN0aW9uKCl7dGhpcy5fZDNTY2FsZT10aGlzLl9kM0ludGVycG9sYXRlZFNjYWxlKCksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKX0sdC5wcm90b3R5cGUuYXV0b0RvbWFpbj1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKCk7cmV0dXJuIHIubGVuZ3RoPjAmJnRoaXMuX3NldERvbWFpbihbUVh0Lk1hdGgubWluKHIsMCksUVh0Lk1hdGgubWF4KHIsMCldKSx0aGlzfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZShyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbG9yUmFuZ2V9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9jb2xvclJhbmdlPXIsdGhpcy5fcmVzZXRTY2FsZSgpfSx0LlJFRFM9WyIjRkZGRkZGIiwiI0ZGRjZFMSIsIiNGRUY0QzAiLCIjRkVEOTc2IiwiI0ZFQjI0QyIsIiNGRDhEM0MiLCIjRkM0RTJBIiwiI0UzMUExQyIsIiNCMTAwMjYiXSx0LkJMVUVTPVsiI0ZGRkZGRiIsIiNDQ0ZGRkYiLCIjQTVGRkZEIiwiIzg1RjdGQiIsIiM2RUQzRUYiLCIjNTVBN0UwIiwiIzQxN0ZEMCIsIiMyNTQ1RDMiLCIjMEIwMkUxIl0sdC5QT1NORUc9WyIjMEIwMkUxIiwiIzI1NDVEMyIsIiM0MTdGRDAiLCIjNTVBN0UwIiwiIzZFRDNFRiIsIiM4NUY3RkIiLCIjQTVGRkZEIiwiI0NDRkZGRiIsIiNGRkZGRkYiLCIjRkZGNkUxIiwiI0ZFRjRDMCIsIiNGRUQ5NzYiLCIjRkVCMjRDIiwiI0ZEOEQzQyIsIiNGQzRFMkEiLCIjRTMxQTFDIiwiI0IxMDAyNiJdLHR9KFF6ZS5TY2FsZSk7aW90LkludGVycG9sYXRlZENvbG9yPXRGZX0pO3ZhciB2ZD1IKG9vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkob290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZUZlPShkZSgpLFV0KHBlKSksckZlPShFcigpLFV0KE1yKSksbkZlPXQ0KCksRVM9RmUoKSxpRmU9TDEoKSxvRmU9ZnVuY3Rpb24oZSl7ZUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3RpY2tHZW5lcmF0b3I9ZnVuY3Rpb24obil7cmV0dXJuIG4uZGVmYXVsdFRpY2tzKCl9LHIuX3BhZFByb3BvcnRpb249LjA1LHIuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD0hMCxyLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycz1uZXcgRVMuU2V0LHJ9cmV0dXJuIHQucHJvdG90eXBlLmF1dG9Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9tYWluTWluPW51bGwsdGhpcy5fZG9tYWluTWF4PW51bGwsZS5wcm90b3R5cGUuYXV0b0RvbWFpbi5jYWxsKHRoaXMpLHRoaXN9LHQucHJvdG90eXBlLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGU9ZnVuY3Rpb24oKXtpZih0aGlzLl9kb21haW5NaW4hPW51bGwmJnRoaXMuX2RvbWFpbk1heCE9bnVsbCl7dGhpcy5fc2V0RG9tYWluKFt0aGlzLl9kb21haW5NaW4sdGhpcy5fZG9tYWluTWF4XSk7cmV0dXJufXZhciByPXRoaXMuX2dldEV4dGVudCgpO2lmKHRoaXMuX2RvbWFpbk1pbiE9bnVsbCl7dmFyIG49clsxXTt0aGlzLl9kb21haW5NaW4+PW4mJihuPXRoaXMuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluKFt0aGlzLl9kb21haW5NaW4sdGhpcy5fZG9tYWluTWluXSlbMV0pLHRoaXMuX3NldERvbWFpbihbdGhpcy5fZG9tYWluTWluLG5dKTtyZXR1cm59aWYodGhpcy5fZG9tYWluTWF4IT1udWxsKXt2YXIgaT1yWzBdO3RoaXMuX2RvbWFpbk1heDw9aSYmKGk9dGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4oW3RoaXMuX2RvbWFpbk1heCx0aGlzLl9kb21haW5NYXhdKVswXSksdGhpcy5fc2V0RG9tYWluKFtpLHRoaXMuX2RvbWFpbk1heF0pO3JldHVybn1lLnByb3RvdHlwZS5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlLmNhbGwodGhpcyl9LHQucHJvdG90eXBlLl9nZXRVbmJvdW5kZWRFeHRlbnQ9ZnVuY3Rpb24ocil7cj09PXZvaWQgMCYmKHI9ITEpO3ZhciBuPXRoaXMuX2dldEFsbEluY2x1ZGVkVmFsdWVzKHIpLGk9dGhpcy5fZGVmYXVsdEV4dGVudCgpO2lmKG4ubGVuZ3RoIT09MCl7dmFyIG89W0VTLk1hdGgubWluKG4saVswXSksRVMuTWF0aC5tYXgobixpWzFdKV07aT10aGlzLl9wYWREb21haW4obyl9cmV0dXJuIGl9LHQucHJvdG90eXBlLl9nZXRFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoKTtyZXR1cm4gdGhpcy5fZG9tYWluTWluIT1udWxsJiYoclswXT10aGlzLl9kb21haW5NaW4pLHRoaXMuX2RvbWFpbk1heCE9bnVsbCYmKHJbMV09dGhpcy5fZG9tYWluTWF4KSxyfSx0LnByb3RvdHlwZS5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVycy5hZGQociksdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcj1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcnMuZGVsZXRlKHIpLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXN9LHQucHJvdG90eXBlLnBhZFByb3BvcnRpb249ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcGFkUHJvcG9ydGlvbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJwYWRQcm9wb3J0aW9uIG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7cmV0dXJuIHRoaXMuX3BhZFByb3BvcnRpb249cix0aGlzLmF1dG9Eb21haW5JZkF1dG9tYXRpY01vZGUoKSx0aGlzfSx0LnByb3RvdHlwZS5fcGFkRG9tYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYoclswXS52YWx1ZU9mKCk9PT1yWzFdLnZhbHVlT2YoKSlyZXR1cm4gdGhpcy5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW4ocik7aWYodGhpcy5fcGFkUHJvcG9ydGlvbj09PTApcmV0dXJuIHI7dmFyIGk9dGhpcy5fcGFkUHJvcG9ydGlvbi8yLG89clswXSxhPXJbMV0scz0hMSxsPSExO3RoaXMuX3BhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXJzLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIHA9ZihuKTtwLmZvckVhY2goZnVuY3Rpb24oZCl7ZC52YWx1ZU9mKCk9PT1vLnZhbHVlT2YoKSYmKHM9ITApLGQudmFsdWVPZigpPT09YS52YWx1ZU9mKCkmJihsPSEwKX0pfSk7dmFyIGM9dGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCk7dGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKHIpO3ZhciB1PXM/bzp0aGlzLmludmVydCh0aGlzLnNjYWxlKG8pLSh0aGlzLnNjYWxlKGEpLXRoaXMuc2NhbGUobykpKmkpLGg9bD9hOnRoaXMuaW52ZXJ0KHRoaXMuc2NhbGUoYSkrKHRoaXMuc2NhbGUoYSktdGhpcy5zY2FsZShvKSkqaSk7cmV0dXJuIHRoaXMuX2JhY2tpbmdTY2FsZURvbWFpbihjKSx0aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ/dGhpcy5fbmljZURvbWFpbihbdSxoXSk6W3UsaF19LHQucHJvdG90eXBlLnNuYXBwaW5nRG9tYWluRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zbmFwcGluZ0RvbWFpbkVuYWJsZWQ6KHRoaXMuX3NuYXBwaW5nRG9tYWluRW5hYmxlZD1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJ9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGludmVydCIpfSx0LnByb3RvdHlwZS5kb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHIhPW51bGwmJih0aGlzLl9kb21haW5NaW49clswXSx0aGlzLl9kb21haW5NYXg9clsxXSksZS5wcm90b3R5cGUuZG9tYWluLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuZG9tYWluTWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuZG9tYWluKClbMF06KHRoaXMuX2RvbWFpbk1pbj1yLHRoaXMuYXV0b0RvbWFpbklmQXV0b21hdGljTW9kZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5kb21haW5NYXg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5kb21haW4oKVsxXToodGhpcy5fZG9tYWluTWF4PXIsdGhpcy5hdXRvRG9tYWluSWZBdXRvbWF0aWNNb2RlKCksdGhpcyl9LHQucHJvdG90eXBlLmV4dGVudE9mVmFsdWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXJGZS5leHRlbnQoci5maWx0ZXIoZnVuY3Rpb24oaSl7cmV0dXJuIEVTLk1hdGguaXNWYWxpZE51bWJlcigraSl9KSk7cmV0dXJuIG5bMF09PW51bGx8fG5bMV09PW51bGw/W106bn0sdC5wcm90b3R5cGUuem9vbT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz1mdW5jdGlvbihhKXtyZXR1cm4gaS5pbnZlcnQobkZlLnpvb21PdXQoYSxyLG4pKX07dGhpcy5kb21haW4odGhpcy5yYW5nZSgpLm1hcChvKSl9LHQucHJvdG90eXBlLnBhbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZnVuY3Rpb24obyl7cmV0dXJuIG4uaW52ZXJ0KG8rcil9O3RoaXMuZG9tYWluKHRoaXMucmFuZ2UoKS5tYXAoaSkpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2NhbGVUcmFuc2Zvcm1hdGlvbiIpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgaW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbiIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQiKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGdldFRyYW5zZm9ybWF0aW9uRG9tYWluIil9LHQucHJvdG90eXBlLnNldFRyYW5zZm9ybWF0aW9uRG9tYWluPWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgc2V0VHJhbnNmb3JtYXRpb25Eb21haW4iKX0sdC5wcm90b3R5cGUuX3NldERvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1mdW5jdGlvbihpKXtyZXR1cm4gRVMuTWF0aC5pc05hTihpKXx8aT09PTEvMHx8aT09PS0xLzB9O2lmKG4oclswXSl8fG4oclsxXSkpe0VTLldpbmRvdy53YXJuKCJXYXJuaW5nOiBRdWFudGl0YXRpdmVTY2FsZXMgY2Fubm90IHRha2UgTmFOIG9yIEluZmluaXR5IGFzIGEgZG9tYWluIHZhbHVlLiBJZ25vcmluZy4iKTtyZXR1cm59ZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX2dldERlZmF1bHRUaWNrcyIpfSx0LnByb3RvdHlwZS50aWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90aWNrR2VuZXJhdG9yKHRoaXMpfSx0LnByb3RvdHlwZS5fbmljZURvbWFpbj1mdW5jdGlvbihyLG4pe3Rocm93IG5ldyBFcnJvcigiU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgX25pY2VEb21haW4iKX0sdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIF9kZWZhdWx0RXh0ZW50Iil9LHQucHJvdG90eXBlLnRpY2tHZW5lcmF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fdGlja0dlbmVyYXRvcjoodGhpcy5fdGlja0dlbmVyYXRvcj1yLHRoaXMpfSx0Ll9ERUZBVUxUX05VTV9USUNLUz0xMCx0fShpRmUuU2NhbGUpO29vdC5RdWFudGl0YXRpdmVTY2FsZT1vRmV9KTt2YXIgZSR0PUgoYW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhRmU9KGRlKCksVXQocGUpKSxzRmU9KEVyKCksVXQoTXIpKSxsRmU9dmQoKSxjRmU9ZnVuY3Rpb24oZSl7YUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2QzU2NhbGU9c0ZlLnNjYWxlTGluZWFyKCkscn1yZXR1cm4gdC5wcm90b3R5cGUuX2RlZmF1bHRFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm5bMCwxXX0sdC5wcm90b3R5cGUuX2V4cGFuZFNpbmdsZVZhbHVlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByWzBdPT09clsxXT9bclswXS0xLHJbMV0rMV06cn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYWNraW5nU2NhbGVEb21haW4oKX0sdC5wcm90b3R5cGUuX2JhY2tpbmdTY2FsZURvbWFpbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kM1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM1NjYWxlLmRvbWFpbihyKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUucmFuZ2UoKX0sdC5wcm90b3R5cGUuX3NldFJhbmdlPWZ1bmN0aW9uKHIpe3RoaXMuX2QzU2NhbGUucmFuZ2Uocil9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5pbnZlcnQocil9LHQucHJvdG90eXBlLmRlZmF1bHRUaWNrcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnRpY2tzKHQuX0RFRkFVTFRfTlVNX1RJQ0tTKX0sdC5wcm90b3R5cGUuX25pY2VEb21haW49ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5jb3B5KCkuZG9tYWluKHIpLm5pY2UobikuZG9tYWluKCl9LHR9KGxGZS5RdWFudGl0YXRpdmVTY2FsZSk7YW90LkxpbmVhcj1jRmV9KTt2YXIgciR0PUgoc290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1RmU9KGRlKCksVXQocGUpKSxoRmU9KEVyKCksVXQoTXIpKSxmRmU9dmQoKSxwRmU9ZnVuY3Rpb24oZSl7dUZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7cj09PXZvaWQgMCYmKHI9MTApO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZDNTY2FsZT1oRmUuc2NhbGVMb2coKS5iYXNlKHIpLG4uX3NldERvbWFpbihuLl9kZWZhdWx0RXh0ZW50KCkpLG59cmV0dXJuIHQucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzEsdGhpcy5fZDNTY2FsZS5iYXNlKCldfSx0LnByb3RvdHlwZS5fZXhwYW5kU2luZ2xlVmFsdWVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHJbMF09PT1yWzFdP1tyWzBdL3RoaXMuX2QzU2NhbGUuYmFzZSgpLHJbMV0qdGhpcy5fZDNTY2FsZS5iYXNlKCldOnJ9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlKHIpfSx0LnByb3RvdHlwZS5zY2FsZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnNjYWxlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmludmVydChyKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25FeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKX0sdC5wcm90b3R5cGUuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21haW4oKX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dGhpcy5kb21haW4ocil9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyh0Ll9ERUZBVUxUX05VTV9USUNLUyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuY29weSgpLmRvbWFpbihyKS5uaWNlKCkuZG9tYWluKCl9LHR9KGZGZS5RdWFudGl0YXRpdmVTY2FsZSk7c290LkxvZz1wRmV9KTt2YXIgbiR0PUgoY290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBkRmU9KGRlKCksVXQocGUpKSxlND0oRXIoKSxVdChNcikpLFRTPUZlKCksbG90PWtzKCksbUZlPXZkKCksZ0ZlPWZ1bmN0aW9uKGUpe2RGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPTEwKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fbG9nVGlja0dlbmVyYXRvcj1mdW5jdGlvbihpKXt2YXIgbz1mdW5jdGlvbih4LGIsUyl7cmV0dXJuW3gsYixTXS5zb3J0KGZ1bmN0aW9uKEMsUCl7cmV0dXJuIEMtUH0pWzFdfSxhPVRTLk1hdGgubWluKG4uX3VudHJhbnNmb3JtZWREb21haW4sMCkscz1UUy5NYXRoLm1heChuLl91bnRyYW5zZm9ybWVkRG9tYWluLDApLGw9YSxjPW8oYSxzLC1uLl9waXZvdCksdT1vKGEscyxuLl9waXZvdCksaD1zLGY9bi5fbG9nVGlja3MoLWMsLWwpLm1hcChmdW5jdGlvbih4KXtyZXR1cm4teH0pLnJldmVyc2UoKSxwPW4uX2xvZ1RpY2tzKHUsaCksZD1NYXRoLm1heChhLC1uLl9waXZvdCksZz1NYXRoLm1pbihzLG4uX3Bpdm90KSxfPWU0LnNjYWxlTGluZWFyKCkuZG9tYWluKFtkLGddKS50aWNrcyhuLl9ob3dNYW55VGlja3MoZCxnKSkseT1mLmNvbmNhdChfKS5jb25jYXQocCk7cmV0dXJuIHkubGVuZ3RoPD0xJiYoeT1lNC5zY2FsZUxpbmVhcigpLmRvbWFpbihbYSxzXSkudGlja3MobG90Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUykpLHl9LG4uX2QzU2NhbGU9ZTQuc2NhbGVMaW5lYXIoKSxuLl9iYXNlPXIsbi5fcGl2b3Q9bi5fYmFzZSxuLl9zZXREb21haW4obi5fZGVmYXVsdEV4dGVudCgpKSxuLnRpY2tHZW5lcmF0b3Iobi5fbG9nVGlja0dlbmVyYXRvcikscjw9MSl0aHJvdyBuZXcgRXJyb3IoIk1vZGlmaWVkTG9nU2NhbGU6IFRoZSBiYXNlIG11c3QgYmUgPiAxIik7cmV0dXJuIG59cmV0dXJuIHQucHJvdG90eXBlLl9hZGp1c3RlZExvZz1mdW5jdGlvbihyKXt2YXIgbj1yPDA/LTE6MTtyZXR1cm4gcio9bixyPHRoaXMuX3Bpdm90JiYocis9KHRoaXMuX3Bpdm90LXIpL3RoaXMuX3Bpdm90KSxyPU1hdGgubG9nKHIpL01hdGgubG9nKHRoaXMuX2Jhc2UpLHIqPW4scn0sdC5wcm90b3R5cGUuX2ludmVydGVkQWRqdXN0ZWRMb2c9ZnVuY3Rpb24ocil7dmFyIG49cjwwPy0xOjE7cmV0dXJuIHIqPW4scj1NYXRoLnBvdyh0aGlzLl9iYXNlLHIpLHI8dGhpcy5fcGl2b3QmJihyPXRoaXMuX3Bpdm90KihyLTEpLyh0aGlzLl9waXZvdC0xKSkscio9bixyfSx0LnByb3RvdHlwZS5zY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZDNTY2FsZSh0aGlzLl9hZGp1c3RlZExvZyhyKSl9LHQucHJvdG90eXBlLmludmVydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5faW52ZXJ0ZWRBZGp1c3RlZExvZyh0aGlzLl9kM1NjYWxlLmludmVydChyKSl9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUocil9LHQucHJvdG90eXBlLmludmVydGVkVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbWFpbigpfSx0LnByb3RvdHlwZS5zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbihyKXt0aGlzLmRvbWFpbihyKX0sdC5wcm90b3R5cGUuX2dldERvbWFpbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWlufSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe3RoaXMuX3VudHJhbnNmb3JtZWREb21haW49cjt2YXIgbj1bdGhpcy5fYWRqdXN0ZWRMb2coclswXSksdGhpcy5fYWRqdXN0ZWRMb2coclsxXSldO2UucHJvdG90eXBlLl9zZXREb21haW4uY2FsbCh0aGlzLG4pfSx0LnByb3RvdHlwZS5fYmFja2luZ1NjYWxlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2QzU2NhbGUuZG9tYWluKCk6KHRoaXMuX2QzU2NhbGUuZG9tYWluKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fbG9nVGlja3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5faG93TWFueVRpY2tzKHIsbik7aWYobz09PTApcmV0dXJuW107dmFyIGE9TWF0aC5mbG9vcihNYXRoLmxvZyhyKS9NYXRoLmxvZyh0aGlzLl9iYXNlKSkscz1NYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5sb2codGhpcy5fYmFzZSkpLGw9ZTQucmFuZ2UocyxhLC1NYXRoLmNlaWwoKHMtYSkvbykpLGM9ZTQucmFuZ2UodGhpcy5fYmFzZSwxLC0odGhpcy5fYmFzZS0xKSkubWFwKE1hdGguZmxvb3IpLHU9VFMuQXJyYXkudW5pcShjKSxoPWwubWFwKGZ1bmN0aW9uKGcpe3JldHVybiB1Lm1hcChmdW5jdGlvbihfKXtyZXR1cm4gTWF0aC5wb3coaS5fYmFzZSxnLTEpKl99KX0pLGY9VFMuQXJyYXkuZmxhdHRlbihoKSxwPWYuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiByPD1nJiZnPD1ufSksZD1wLnNvcnQoZnVuY3Rpb24oZyxfKXtyZXR1cm4gZy1ffSk7cmV0dXJuIGR9LHQucHJvdG90eXBlLl9ob3dNYW55VGlja3M9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9hZGp1c3RlZExvZyhUUy5NYXRoLm1pbih0aGlzLl91bnRyYW5zZm9ybWVkRG9tYWluLDApKSxvPXRoaXMuX2FkanVzdGVkTG9nKFRTLk1hdGgubWF4KHRoaXMuX3VudHJhbnNmb3JtZWREb21haW4sMCkpLGE9dGhpcy5fYWRqdXN0ZWRMb2cocikscz10aGlzLl9hZGp1c3RlZExvZyhuKSxsPShzLWEpLyhvLWkpLGM9TWF0aC5jZWlsKGwqbG90Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUyk7cmV0dXJuIGN9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHJ9LHQucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuWzAsdGhpcy5fYmFzZV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXtpZihyWzBdPT09clsxXSl7dmFyIG49clswXTtyZXR1cm4gbj4wP1tuL3RoaXMuX2Jhc2Usbip0aGlzLl9iYXNlXTpuPT09MD9bLXRoaXMuX2Jhc2UsdGhpcy5fYmFzZV06W24qdGhpcy5fYmFzZSxuL3RoaXMuX2Jhc2VdfXJldHVybiByfSx0LnByb3RvdHlwZS5fZ2V0UmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS5yYW5nZSgpfSx0LnByb3RvdHlwZS5fc2V0UmFuZ2U9ZnVuY3Rpb24ocil7dGhpcy5fZDNTY2FsZS5yYW5nZShyKX0sdC5wcm90b3R5cGUuZGVmYXVsdFRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2QzU2NhbGUudGlja3MobG90Lk1vZGlmaWVkTG9nLl9ERUZBVUxUX05VTV9USUNLUyl9LHR9KG1GZS5RdWFudGl0YXRpdmVTY2FsZSk7Y290Lk1vZGlmaWVkTG9nPWdGZX0pO3ZhciBpJHQ9SCh1b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF9GZT0oZGUoKSxVdChwZSkpLGdhPShFcigpLFV0KE1yKSksazE9QkYoKSx5RmU9dmQoKSx2RmU9ZnVuY3Rpb24oZSl7X0ZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2QzU2NhbGU9Z2Euc2NhbGVUaW1lKCksci5hdXRvRG9tYWluKCkscn1yZXR1cm4gdC5wcm90b3R5cGUudGlja0ludGVydmFsPWZ1bmN0aW9uKHIsbixpKXtuPT09dm9pZCAwJiYobj0xKSxpPT09dm9pZCAwJiYoaT0hMSk7dmFyIG89Z2Euc2NhbGVUaW1lKCksYT10LnRpbWVJbnRlcnZhbFRvRDNUaW1lKHIsaSkuZXZlcnkobik7cmV0dXJuIG8uZG9tYWluKHRoaXMuZG9tYWluKCkpLG8ucmFuZ2UodGhpcy5yYW5nZSgpKSxvLnRpY2tzKGEpfSx0LnByb3RvdHlwZS5fc2V0RG9tYWluPWZ1bmN0aW9uKHIpe2lmKHJbMV08clswXSl0aHJvdyBuZXcgRXJyb3IoIlNjYWxlLlRpbWUgZG9tYWluIHZhbHVlcyBtdXN0IGJlIGluIGNocm9ub2xvZ2ljYWwgb3JkZXIiKTtyZXR1cm4gZS5wcm90b3R5cGUuX3NldERvbWFpbi5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9kZWZhdWx0RXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuW25ldyBEYXRlKCIxOTcwLTAxLTAxIiksbmV3IERhdGUoIjE5NzAtMDEtMDIiKV19LHQucHJvdG90eXBlLl9leHBhbmRTaW5nbGVWYWx1ZURvbWFpbj1mdW5jdGlvbihyKXt2YXIgbj1yWzBdLmdldFRpbWUoKSxpPXJbMV0uZ2V0VGltZSgpO2lmKG49PT1pKXt2YXIgbz1uZXcgRGF0ZShuKTtvLnNldERhdGUoby5nZXREYXRlKCktMSk7dmFyIGE9bmV3IERhdGUoaSk7cmV0dXJuIGEuc2V0RGF0ZShhLmdldERhdGUoKSsxKSxbbyxhXX1yZXR1cm4gcn0sdC5wcm90b3R5cGUuc2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUocil9LHQucHJvdG90eXBlLnNjYWxlVHJhbnNmb3JtYXRpb249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuc2NhbGUobmV3IERhdGUocikpfSx0LnByb3RvdHlwZS5pbnZlcnRlZFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmludmVydChyKS5nZXRUaW1lKCl9LHQucHJvdG90eXBlLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fZ2V0VW5ib3VuZGVkRXh0ZW50KCEwKTtyZXR1cm5bclswXS52YWx1ZU9mKCksclsxXS52YWx1ZU9mKCldfSx0LnByb3RvdHlwZS5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbj1mdW5jdGlvbigpe3ZhciByPXRoaXMuZG9tYWluKCk7cmV0dXJuW3JbMF0udmFsdWVPZigpLHJbMV0udmFsdWVPZigpXX0sdC5wcm90b3R5cGUuc2V0VHJhbnNmb3JtYXRpb25Eb21haW49ZnVuY3Rpb24ocil7dmFyIG49clswXSxpPXJbMV07dGhpcy5kb21haW4oW25ldyBEYXRlKG4pLG5ldyBEYXRlKGkpXSl9LHQucHJvdG90eXBlLl9nZXREb21haW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFja2luZ1NjYWxlRG9tYWluKCl9LHQucHJvdG90eXBlLl9iYWNraW5nU2NhbGVEb21haW49ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZDNTY2FsZS5kb21haW4oKToodGhpcy5fZDNTY2FsZS5kb21haW4ociksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRSYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kM1NjYWxlLnJhbmdlKCl9LHQucHJvdG90eXBlLl9zZXRSYW5nZT1mdW5jdGlvbihyKXt0aGlzLl9kM1NjYWxlLnJhbmdlKHIpfSx0LnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2QzU2NhbGUuaW52ZXJ0KHIpfSx0LnByb3RvdHlwZS5kZWZhdWx0VGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZDNTY2FsZS50aWNrcyh0Ll9ERUZBVUxUX05VTV9USUNLUyl9LHQucHJvdG90eXBlLl9uaWNlRG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kM1NjYWxlLmNvcHkoKS5kb21haW4ocikubmljZSgpLmRvbWFpbigpfSx0LnRpbWVJbnRlcnZhbFRvRDNUaW1lPWZ1bmN0aW9uKHIsbil7c3dpdGNoKHIpe2Nhc2UgazEuVGltZUludGVydmFsLnNlY29uZDpyZXR1cm4gbj9nYS51dGNTZWNvbmQ6Z2EudGltZVNlY29uZDtjYXNlIGsxLlRpbWVJbnRlcnZhbC5taW51dGU6cmV0dXJuIG4/Z2EudXRjTWludXRlOmdhLnRpbWVNaW51dGU7Y2FzZSBrMS5UaW1lSW50ZXJ2YWwuaG91cjpyZXR1cm4gbj9nYS51dGNIb3VyOmdhLnRpbWVIb3VyO2Nhc2UgazEuVGltZUludGVydmFsLmRheTpyZXR1cm4gbj9nYS51dGNEYXk6Z2EudGltZURheTtjYXNlIGsxLlRpbWVJbnRlcnZhbC53ZWVrOnJldHVybiBuP2dhLnV0Y1dlZWs6Z2EudGltZVdlZWs7Y2FzZSBrMS5UaW1lSW50ZXJ2YWwubW9udGg6cmV0dXJuIG4/Z2EudXRjTW9udGg6Z2EudGltZU1vbnRoO2Nhc2UgazEuVGltZUludGVydmFsLnllYXI6cmV0dXJuIG4/Z2EudXRjWWVhcjpnYS50aW1lWWVhcjtkZWZhdWx0OnRocm93IEVycm9yKCJUaW1lSW50ZXJ2YWwgc3BlY2lmaWVkIGRvZXMgbm90IGV4aXN0OiAiK3IpfX0sdH0oeUZlLlF1YW50aXRhdGl2ZVNjYWxlKTt1b3QuVGltZT12RmV9KTt2YXIga3M9SChIdT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoSHUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSMT0oZGUoKSxVdChwZSkpLHhGZT1ZWHQoKTtIdS5UaWNrR2VuZXJhdG9ycz14RmU7UjEuX19leHBvcnRTdGFyKHJvdCgpLEh1KTtSMS5fX2V4cG9ydFN0YXIoSlh0KCksSHUpO1IxLl9fZXhwb3J0U3Rhcih0JHQoKSxIdSk7UjEuX19leHBvcnRTdGFyKGUkdCgpLEh1KTtSMS5fX2V4cG9ydFN0YXIociR0KCksSHUpO1IxLl9fZXhwb3J0U3RhcihuJHQoKSxIdSk7UjEuX19leHBvcnRTdGFyKGkkdCgpLEh1KTt2YXIgYkZlPXJvdCgpLHdGZT12ZCgpO2Z1bmN0aW9uIFNGZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHdGZS5RdWFudGl0YXRpdmVTY2FsZXx8ZSBpbnN0YW5jZW9mIGJGZS5DYXRlZ29yeX1IdS5pc1RyYW5zZm9ybWFibGU9U0ZlfSk7dmFyIEJGPUgoU2U9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTUZlPShkZSgpLFV0KHBlKSksVnU9KEVyKCksVXQoTXIpKSxvJHQ9X2woKSxhJHQ9QnUoKSxFRmU9a3MoKSxyND1GZSgpLGhvdD1JZigpLHRzPVFBKCk7U2UuVGltZUludGVydmFsPWhvdC5tYWtlRW51bShbInNlY29uZCIsIm1pbnV0ZSIsImhvdXIiLCJkYXkiLCJ3ZWVrIiwibW9udGgiLCJ5ZWFyIl0pO1NlLlRpbWVBeGlzT3JpZW50YXRpb249aG90Lm1ha2VFbnVtKFsidG9wIiwiYm90dG9tIl0pO1NlLlRpZXJMYWJlbFBvc2l0aW9uPWhvdC5tYWtlRW51bShbImJldHdlZW4iLCJjZW50ZXIiXSk7dmFyIFRGZT1mdW5jdGlvbihlKXtNRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4saSl7dmFyIG89ZS5jYWxsKHRoaXMscixuKXx8dGhpcztyZXR1cm4gby5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPW51bGwsby5fdGllckxhYmVsUG9zaXRpb25zPVtdLG8uX3VzZVVUQz1pLG8uYWRkQ2xhc3MoInRpbWUtYXhpcyIpLG8udGlja0xhYmVsUGFkZGluZyg1KSxvLmF4aXNDb25maWd1cmF0aW9ucyh0Ll9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUyhvLl91c2VVVEMpKSxvLmFubm90YXRpb25Gb3JtYXR0ZXIoYSR0LnRpbWUoIiVhICViICVkLCAlWSIsby5fdXNlVVRDKSksb31yZXR1cm4gdC5wcm90b3R5cGUudGllckxhYmVsUG9zaXRpb25zPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucztpZighci5ldmVyeShmdW5jdGlvbihuKXtyZXR1cm4gbi50b0xvd2VyQ2FzZSgpPT09ImJldHdlZW4ifHxuLnRvTG93ZXJDYXNlKCk9PT0iY2VudGVyIn0pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcG9zaXRpb24gZm9yIHRpZXIgbGFiZWxzIik7cmV0dXJuIHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9ucz1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUubWF4VGltZUludGVydmFsUHJlY2lzaW9uPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbjoodGhpcy5fbWF4VGltZUludGVydmFsUHJlY2lzaW9uPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuY3VycmVudEF4aXNDb25maWd1cmF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XX0sdC5wcm90b3R5cGUuYXhpc0NvbmZpZ3VyYXRpb25zPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uczt0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnM9cix0aGlzLl9udW1UaWVycz1yNC5NYXRoLm1heCh0aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0pLDApLHRoaXMuX2lzQW5jaG9yZWQmJnRoaXMuX3NldHVwRG9tRWxlbWVudHMoKTtmb3IodmFyIG49dGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoKSxpPVtdLG89MDtvPHRoaXMuX251bVRpZXJzO28rKylpLnB1c2gobltvXXx8ImJldHdlZW4iKTtyZXR1cm4gdGhpcy50aWVyTGFiZWxQb3NpdGlvbnMoaSksdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5fZ2V0TW9zdFByZWNpc2VDb25maWd1cmF0aW9uSW5kZXg9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmxlbmd0aDtyZXR1cm4gdGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24oaSxvKXtvPG4mJmkuZXZlcnkoZnVuY3Rpb24oYSl7cmV0dXJuIHIuX2NoZWNrVGltZUF4aXNUaWVyQ29uZmlndXJhdGlvbihhKX0pJiYobj1vKX0pLG49PT10aGlzLl9wb3NzaWJsZVRpbWVBeGlzQ29uZmlndXJhdGlvbnMubGVuZ3RoJiYocjQuV2luZG93Lndhcm4oInpvb21lZCBvdXQgdG9vIGZhcjogY291bGQgbm90IGZpbmQgc3VpdGFibGUgaW50ZXJ2YWwgdG8gZGlzcGxheSBsYWJlbHMiKSwtLW4pLG59LHQucHJvdG90eXBlLm9yaWVudGF0aW9uPWZ1bmN0aW9uKHIpe2lmKHImJihyLnRvTG93ZXJDYXNlKCk9PT0icmlnaHQifHxyLnRvTG93ZXJDYXNlKCk9PT0ibGVmdCIpKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgc3VwcG9ydGVkIG9yaWVudGF0aW9uIGZvciBUaW1lQXhpcyAtIG9ubHkgaG9yaXpvbnRhbCBvcmllbnRhdGlvbnMgYXJlIHN1cHBvcnRlZCIpO3JldHVybiBlLnByb3RvdHlwZS5vcmllbnRhdGlvbi5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLl9jb21wdXRlSGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSgpLmhlaWdodDt0aGlzLl90aWVySGVpZ2h0cz1bXTtmb3IodmFyIG49MDtuPHRoaXMuX251bVRpZXJzO24rKyl0aGlzLl90aWVySGVpZ2h0cy5wdXNoKHIrdGhpcy50aWNrTGFiZWxQYWRkaW5nKCkrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJiZXR3ZWVuIj8wOnRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpKSk7cmV0dXJuIFZ1LnN1bSh0aGlzLl90aWVySGVpZ2h0cyl9LHQucHJvdG90eXBlLl9nZXRJbnRlcnZhbExlbmd0aD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9zY2FsZS5kb21haW4oKVswXSxpPUVGZS5UaW1lLnRpbWVJbnRlcnZhbFRvRDNUaW1lKHIuaW50ZXJ2YWwsdGhpcy5fdXNlVVRDKSxvPWkub2Zmc2V0KG4sci5zdGVwKTtpZihvPnRoaXMuX3NjYWxlLmRvbWFpbigpWzFdKXJldHVybiB0aGlzLndpZHRoKCk7dmFyIGE9TWF0aC5hYnModGhpcy5fc2NhbGUuc2NhbGUobyktdGhpcy5fc2NhbGUuc2NhbGUobikpO3JldHVybiBhfSx0LnByb3RvdHlwZS5fbWF4V2lkdGhGb3JJbnRlcnZhbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fbWVhc3VyZXIubWVhc3VyZShyLmZvcm1hdHRlcih0Ll9MT05HX0RBVEUpKS53aWR0aH0sdC5wcm90b3R5cGUuX2NoZWNrVGltZUF4aXNUaWVyQ29uZmlndXJhdGlvbj1mdW5jdGlvbihyKXtpZih0aGlzLl9tYXhUaW1lSW50ZXJ2YWxQcmVjaXNpb24hPW51bGwpe3ZhciBuPXQuX1NPUlRFRF9USU1FX0lOVEVSVkFMX0lOREVYW3RoaXMuX21heFRpbWVJbnRlcnZhbFByZWNpc2lvbl0saT10Ll9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWFtyLmludGVydmFsXTtpZihuIT1udWxsJiZpIT1udWxsJiZpPG4pcmV0dXJuITF9dmFyIG89dGhpcy5fbWF4V2lkdGhGb3JJbnRlcnZhbChyKSsyKnRoaXMudGlja0xhYmVsUGFkZGluZygpO3JldHVybiBNYXRoLm1pbih0aGlzLl9nZXRJbnRlcnZhbExlbmd0aChyKSx0aGlzLndpZHRoKCkpPj1vfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3ZhciBpPWUucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyLmNhbGwodGhpcyxyLG4pLG89dGhpcy5fdGllckhlaWdodHMucmVkdWNlKGZ1bmN0aW9uKHMsbCxjLHUpe3JldHVybiBzK2w+aS5oZWlnaHQ/czpzK2x9KSxhPXRoaXMubWFyZ2luKCkrKHRoaXMuYW5ub3RhdGlvbnNFbmFibGVkKCk/dGhpcy5hbm5vdGF0aW9uVGllckNvdW50KCkqdGhpcy5fYW5ub3RhdGlvblRpZXJIZWlnaHQoKTowKTtyZXR1cm4gaS5oZWlnaHQ9TWF0aC5taW4oaS5oZWlnaHQsbythKSxpfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zZXR1cERvbUVsZW1lbnRzKCl9LHQucHJvdG90eXBlLl9zZXR1cERvbUVsZW1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIuIit0LlRJTUVfQVhJU19USUVSX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyTGFiZWxDb250YWluZXJzPVtdLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVycz1bXSx0aGlzLl90aWVyQmFzZWxpbmVzPVtdLHRoaXMuX3RpY2tMYWJlbENvbnRhaW5lci5yZW1vdmUoKSx0aGlzLl9iYXNlbGluZS5yZW1vdmUoKTtmb3IodmFyIHI9MDtyPHRoaXMuX251bVRpZXJzOysrcil7dmFyIG49dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LlRJTUVfQVhJU19USUVSX0NMQVNTLCEwKTt0aGlzLl90aWVyTGFiZWxDb250YWluZXJzLnB1c2gobi5hcHBlbmQoImciKS5jbGFzc2VkKHRzLkF4aXMuVElDS19MQUJFTF9DTEFTUysiLWNvbnRhaW5lciIsITApKSx0aGlzLl90aWVyTWFya0NvbnRhaW5lcnMucHVzaChuLmFwcGVuZCgiZyIpLmNsYXNzZWQodHMuQXhpcy5USUNLX01BUktfQ0xBU1MrIi1jb250YWluZXIiLCEwKSksdGhpcy5fdGllckJhc2VsaW5lcy5wdXNoKG4uYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKSl9dmFyIGk9bmV3IG8kdC5TdmdDb250ZXh0KHRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbMF0ubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgbyR0LkNhY2hlTWVhc3VyZXIoaSl9LHQucHJvdG90eXBlLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXM9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3NjYWxlLnRpY2tJbnRlcnZhbChyLmludGVydmFsLHIuc3RlcCx0aGlzLl91c2VVVEMpfSx0LnByb3RvdHlwZS5fZ2V0VGlja1ZhbHVlcz1mdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIHRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XS5yZWR1Y2UoZnVuY3Rpb24obixpKXtyZXR1cm4gbi5jb25jYXQoci5fZ2V0VGlja0ludGVydmFsVmFsdWVzKGkpKX0sW10pfSx0LnByb3RvdHlwZS5fY2xlYW5UaWVycz1mdW5jdGlvbigpe2Zvcih2YXIgcj0wO3I8dGhpcy5fdGllckxhYmVsQ29udGFpbmVycy5sZW5ndGg7cisrKXRoaXMuX3RpZXJMYWJlbENvbnRhaW5lcnNbcl0uc2VsZWN0QWxsKCIuIit0cy5BeGlzLlRJQ0tfTEFCRUxfQ0xBU1MpLnJlbW92ZSgpLHRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19NQVJLX0NMQVNTKS5yZW1vdmUoKSx0aGlzLl90aWVyQmFzZWxpbmVzW3JdLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9LHQucHJvdG90eXBlLl9nZXRUaWNrVmFsdWVzRm9yQ29uZmlndXJhdGlvbj1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9zY2FsZS50aWNrSW50ZXJ2YWwoci5pbnRlcnZhbCxyLnN0ZXAsdGhpcy5fdXNlVVRDKSxpPXRoaXMuX3NjYWxlLmRvbWFpbigpLG89bi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEudmFsdWVPZigpfSk7cmV0dXJuIG8uaW5kZXhPZihpWzBdLnZhbHVlT2YoKSk9PT0tMSYmbi51bnNoaWZ0KGlbMF0pLG8uaW5kZXhPZihpWzFdLnZhbHVlT2YoKSk9PT0tMSYmbi5wdXNoKGlbMV0pLG59LHQucHJvdG90eXBlLl9yZW5kZXJUaWVyTGFiZWxzPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLGE9dGhpcy5fZ2V0VGlja1ZhbHVlc0ZvckNvbmZpZ3VyYXRpb24obikscz1bXTt0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbaV09PT0iYmV0d2VlbiImJm4uc3RlcD09PTE/YS5tYXAoZnVuY3Rpb24oZyxfKXtfKzE+PWEubGVuZ3RofHxzLnB1c2gobmV3IERhdGUoKGFbXysxXS52YWx1ZU9mKCktYVtfXS52YWx1ZU9mKCkpLzIrYVtfXS52YWx1ZU9mKCkpKX0pOnM9YTt2YXIgbD1yLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX0xBQkVMX0NMQVNTKS5kYXRhKHMsZnVuY3Rpb24oZyl7cmV0dXJuIFN0cmluZyhnLnZhbHVlT2YoKSl9KSxjPWwuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHRzLkF4aXMuVElDS19MQUJFTF9DTEFTUywhMCk7Yy5hcHBlbmQoInRleHQiKTt2YXIgdT10aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbaV09PT0iY2VudGVyInx8bi5zdGVwPT09MT8wOnRoaXMudGlja0xhYmVsUGFkZGluZygpLGg7dGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/aD1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKzEpKS10aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTp0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbaV09PT0iY2VudGVyIj9oPXRoaXMuaGVpZ2h0KCktVnUuc3VtKHRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsaSkpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLXRoaXMuX21heExhYmVsVGlja0xlbmd0aCgpOmg9dGhpcy5oZWlnaHQoKS1WdS5zdW0odGhpcy5fdGllckhlaWdodHMuc2xpY2UoMCxpKSktdGhpcy50aWNrTGFiZWxQYWRkaW5nKCk7dmFyIGY9bC5tZXJnZShjKSxwPWYuc2VsZWN0QWxsKCJ0ZXh0Iik7cC5zaXplKCk+MCYmcC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit1KyIsIitoKyIpIiksbC5leGl0KCkucmVtb3ZlKCksZi5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGcpe3JldHVybiJ0cmFuc2xhdGUoIitvLl9zY2FsZS5zY2FsZShnKSsiLDApIn0pO3ZhciBkPXRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tpXT09PSJjZW50ZXIifHxuLnN0ZXA9PT0xPyJtaWRkbGUiOiJzdGFydCI7Zi5zZWxlY3RBbGwoInRleHQiKS50ZXh0KG4uZm9ybWF0dGVyKS5zdHlsZSgidGV4dC1hbmNob3IiLGQpfSx0LnByb3RvdHlwZS5fcmVuZGVyVGlja01hcmtzPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdGllck1hcmtDb250YWluZXJzW25dLnNlbGVjdEFsbCgiLiIrdHMuQXhpcy5USUNLX01BUktfQ0xBU1MpLmRhdGEociksbz1pLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0cy5BeGlzLlRJQ0tfTUFSS19DTEFTUywhMCkubWVyZ2UoaSksYT10aGlzLl9nZW5lcmF0ZVRpY2tNYXJrQXR0ckhhc2goKSxzPXRoaXMuX3RpZXJIZWlnaHRzLnNsaWNlKDAsbikucmVkdWNlKGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwrY30sMCk7dGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/KGEueTE9cyxhLnkyPXMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuaW5uZXJUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKTooYS55MT10aGlzLmhlaWdodCgpLXMsYS55Mj10aGlzLmhlaWdodCgpLShzKyh0aGlzLl90aWVyTGFiZWxQb3NpdGlvbnNbbl09PT0iY2VudGVyIj90aGlzLmlubmVyVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW25dKSkpLG8uYXR0cnMoYSksdGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/KGEueTE9cyxhLnkyPXMrKHRoaXMuX3RpZXJMYWJlbFBvc2l0aW9uc1tuXT09PSJjZW50ZXIiP3RoaXMuZW5kVGlja0xlbmd0aCgpOnRoaXMuX3RpZXJIZWlnaHRzW25dKSk6KGEueTE9dGhpcy5oZWlnaHQoKS1zLGEueTI9dGhpcy5oZWlnaHQoKS0ocysodGhpcy5fdGllckxhYmVsUG9zaXRpb25zW25dPT09ImNlbnRlciI/dGhpcy5lbmRUaWNrTGVuZ3RoKCk6dGhpcy5fdGllckhlaWdodHNbbl0pKSksVnUuc2VsZWN0KG8ubm9kZXMoKVswXSkuYXR0cnMoYSksVnUuc2VsZWN0KG8ubm9kZXMoKVtvLnNpemUoKS0xXSkuYXR0cnMoYSksVnUuc2VsZWN0KG8ubm9kZXMoKVswXSkuY2xhc3NlZCh0cy5BeGlzLkVORF9USUNLX01BUktfQ0xBU1MsITApLFZ1LnNlbGVjdChvLm5vZGVzKClbby5zaXplKCktMV0pLmNsYXNzZWQodHMuQXhpcy5FTkRfVElDS19NQVJLX0NMQVNTLCEwKSxpLmV4aXQoKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl90aWNrTWFya0NvbnRhaW5lci5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19NQVJLX0NMQVNTKS5kYXRhKHIpLGk9bi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQodHMuQXhpcy5USUNLX01BUktfQ0xBU1MsITApLm1lcmdlKG4pLG89dGhpcy5fZ2VuZXJhdGVUaWNrTWFya0F0dHJIYXNoKCk7by55Mj10aGlzLm9yaWVudGF0aW9uKCk9PT0iYm90dG9tIj90aGlzLnRpY2tMYWJlbFBhZGRpbmcoKTp0aGlzLmhlaWdodCgpLXRoaXMudGlja0xhYmVsUGFkZGluZygpLGkuYXR0cnMobyksbi5leGl0KCkucmVtb3ZlKCl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXg8MT9bXTp0aGlzLl9nZXRUaWNrSW50ZXJ2YWxWYWx1ZXModGhpcy5fcG9zc2libGVUaW1lQXhpc0NvbmZpZ3VyYXRpb25zW3RoaXMuX21vc3RQcmVjaXNlQ29uZmlnSW5kZXgtMV1bMF0pfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5fbW9zdFByZWNpc2VDb25maWdJbmRleD10aGlzLl9nZXRNb3N0UHJlY2lzZUNvbmZpZ3VyYXRpb25JbmRleCgpO3ZhciBuPXRoaXMuX3Bvc3NpYmxlVGltZUF4aXNDb25maWd1cmF0aW9uc1t0aGlzLl9tb3N0UHJlY2lzZUNvbmZpZ0luZGV4XTt0aGlzLl9jbGVhblRpZXJzKCksbi5mb3JFYWNoKGZ1bmN0aW9uKGgsZil7cmV0dXJuIHIuX3JlbmRlclRpZXJMYWJlbHMoci5fdGllckxhYmVsQ29udGFpbmVyc1tmXSxoLGYpfSk7Zm9yKHZhciBpPW4ubWFwKGZ1bmN0aW9uKGgsZil7cmV0dXJuIHIuX2dldFRpY2tWYWx1ZXNGb3JDb25maWd1cmF0aW9uKGgpfSksbz0wLGE9MDthPE1hdGgubWF4KG4ubGVuZ3RoLDEpOysrYSl7dmFyIHM9dGhpcy5fZ2VuZXJhdGVCYXNlbGluZUF0dHJIYXNoKCk7cy55MSs9dGhpcy5vcmllbnRhdGlvbigpPT09ImJvdHRvbSI/bzotbyxzLnkyPXMueTEsdGhpcy5fdGllckJhc2VsaW5lc1thXS5hdHRycyhzKS5zdHlsZSgidmlzaWJpbGl0eSIsImluaGVyaXQiKSxvKz10aGlzLl90aWVySGVpZ2h0c1thXX12YXIgbD1bXSxjPXRoaXMuX3NjYWxlLmRvbWFpbigpLHU9dGhpcy5fc2NhbGUuc2NhbGUoY1sxXSktdGhpcy5fc2NhbGUuc2NhbGUoY1swXSk7dGhpcy5fZ2V0SW50ZXJ2YWxMZW5ndGgoblswXSkqMS41Pj11JiYobD10aGlzLl9nZW5lcmF0ZUxhYmVsbGVzc1RpY2tzKCkpLHRoaXMuX3JlbmRlckxhYmVsbGVzc1RpY2tNYXJrcyhsKSx0aGlzLl9oaWRlT3ZlcmZsb3dpbmdUaWVycygpO2Zvcih2YXIgYT0wO2E8bi5sZW5ndGg7KythKXRoaXMuX3JlbmRlclRpY2tNYXJrcyhpW2FdLGEpLHRoaXMuX2hpZGVPdmVybGFwcGluZ0FuZEN1dE9mZkxhYmVscyhhKTtyZXR1cm4gdGhpcy5hbm5vdGF0aW9uc0VuYWJsZWQoKT90aGlzLl9kcmF3QW5ub3RhdGlvbnMoKTp0aGlzLl9yZW1vdmVBbm5vdGF0aW9ucygpLHRoaXN9LHQucHJvdG90eXBlLl9oaWRlT3ZlcmZsb3dpbmdUaWVycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLmhlaWdodCgpLGk9MDt0aGlzLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuVElNRV9BWElTX1RJRVJfQ0xBU1MpLmF0dHIoInZpc2liaWxpdHkiLGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGkrPXIuX3RpZXJIZWlnaHRzW2FdLGk8PW4/ImluaGVyaXQiOiJoaWRkZW4ifSl9LHQucHJvdG90eXBlLl9oaWRlT3ZlcmxhcHBpbmdBbmRDdXRPZmZMYWJlbHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPXRoaXMuZWxlbWVudCgpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPWZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmZsb29yKGkubGVmdCk8PU1hdGguY2VpbCh1LmxlZnQpJiZNYXRoLmZsb29yKGkudG9wKTw9TWF0aC5jZWlsKHUudG9wKSYmTWF0aC5mbG9vcih1LnJpZ2h0KTw9TWF0aC5jZWlsKGkubGVmdCtuLndpZHRoKCkpJiZNYXRoLmZsb29yKHUuYm90dG9tKTw9TWF0aC5jZWlsKGkudG9wK24uaGVpZ2h0KCkpfSxhPXRoaXMuX3RpZXJNYXJrQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19NQVJLX0NMQVNTKS5maWx0ZXIoZnVuY3Rpb24odSxoKXt2YXIgZj1WdS5zZWxlY3QodGhpcykuc3R5bGUoInZpc2liaWxpdHkiKTtyZXR1cm4gZj09PSJ2aXNpYmxlInx8Zj09PSJpbmhlcml0In0pLHM9YS5ub2RlcygpLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gdS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0pLGw9dGhpcy5fdGllckxhYmVsQ29udGFpbmVyc1tyXS5zZWxlY3RBbGwoIi4iK3RzLkF4aXMuVElDS19MQUJFTF9DTEFTUykuZmlsdGVyKGZ1bmN0aW9uKHUsaCl7dmFyIGY9VnUuc2VsZWN0KHRoaXMpLnN0eWxlKCJ2aXNpYmlsaXR5Iik7cmV0dXJuIGY9PT0idmlzaWJsZSJ8fGY9PT0iaW5oZXJpdCJ9KSxjO2wuZWFjaChmdW5jdGlvbih1LGgpe3ZhciBmPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1WdS5zZWxlY3QodGhpcyksZD1zW2hdLGc9c1toKzFdLF89YyE9bnVsbCYmcjQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChmLGMpLHk9ZCE9bnVsbCYmcjQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChmLGQpLHg9ZyE9bnVsbCYmcjQuRE9NLmNsaWVudFJlY3RzT3ZlcmxhcChmLGcpOyFvKGYpfHxffHx5fHx4P3Auc3R5bGUoInZpc2liaWxpdHkiLCJoaWRkZW4iKTooYz1mLHAuc3R5bGUoInZpc2liaWxpdHkiLCJpbmhlcml0IikpfSl9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHQuVElNRV9BWElTX1RJRVJfQ0xBU1M9InRpbWUtYXhpcy10aWVyIix0Ll9TT1JURURfVElNRV9JTlRFUlZBTF9JTkRFWD0oeGQ9e30seGRbU2UuVGltZUludGVydmFsLnNlY29uZF09MCx4ZFtTZS5UaW1lSW50ZXJ2YWwubWludXRlXT0xLHhkW1NlLlRpbWVJbnRlcnZhbC5ob3VyXT0yLHhkW1NlLlRpbWVJbnRlcnZhbC5kYXldPTMseGRbU2UuVGltZUludGVydmFsLndlZWtdPTQseGRbU2UuVGltZUludGVydmFsLm1vbnRoXT01LHhkW1NlLlRpbWVJbnRlcnZhbC55ZWFyXT02LHhkKSx0Ll9ERUZBVUxUX1RJTUVfQVhJU19DT05GSUdVUkFUSU9OUz1mdW5jdGlvbihyKXt2YXIgbj1mdW5jdGlvbihpKXtyZXR1cm4gYSR0LnRpbWUoaSxyKX07cmV0dXJuW1t7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjEsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDo1LGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuc2Vjb25kLHN0ZXA6MTAsZm9ybWF0dGVyOm4oIiVJOiVNOiVTICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5zZWNvbmQsc3RlcDoxNSxmb3JtYXR0ZXI6bigiJUk6JU06JVMgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnNlY29uZCxzdGVwOjMwLGZvcm1hdHRlcjpuKCIlSTolTTolUyAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjUsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5taW51dGUsc3RlcDoxMCxmb3JtYXR0ZXI6bigiJUk6JU0gJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1pbnV0ZSxzdGVwOjE1LGZvcm1hdHRlcjpuKCIlSTolTSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubWludXRlLHN0ZXA6MzAsZm9ybWF0dGVyOm4oIiVJOiVNICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUkgJXAiKX0se2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlZSwgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmhvdXIsc3RlcDozLGZvcm1hdHRlcjpuKCIlSSAlcCIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVCICVlLCAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuaG91cixzdGVwOjYsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5ob3VyLHN0ZXA6MTIsZm9ybWF0dGVyOm4oIiVJICVwIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwuZGF5LHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJWUsICVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC5kYXksc3RlcDoxLGZvcm1hdHRlcjpuKCIlYSAlZSIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLm1vbnRoLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJUIgJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLmRheSxzdGVwOjEsZm9ybWF0dGVyOm4oIiVlIil9LHtpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiAlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlQiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDoxLGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDozLGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwubW9udGgsc3RlcDo2LGZvcm1hdHRlcjpuKCIlYiIpfSx7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoxLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6MSxmb3JtYXR0ZXI6bigiJXkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDo1LGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjI1LGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjUwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjEwMCxmb3JtYXR0ZXI6bigiJVkiKX1dLFt7aW50ZXJ2YWw6U2UuVGltZUludGVydmFsLnllYXIsc3RlcDoyMDAsZm9ybWF0dGVyOm4oIiVZIil9XSxbe2ludGVydmFsOlNlLlRpbWVJbnRlcnZhbC55ZWFyLHN0ZXA6NTAwLGZvcm1hdHRlcjpuKCIlWSIpfV0sW3tpbnRlcnZhbDpTZS5UaW1lSW50ZXJ2YWwueWVhcixzdGVwOjFlMyxmb3JtYXR0ZXI6bigiJVkiKX1dXX0sdC5fTE9OR19EQVRFPW5ldyBEYXRlKDk5OTksOCwyOSwxMiw1OSw5OTk5KSx0fSh0cy5BeGlzKTtTZS5UaW1lPVRGZTt2YXIgeGR9KTt2YXIgcyR0PUgobjQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG40LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZm90PShkZSgpLFV0KHBlKSk7Zm90Ll9fZXhwb3J0U3RhcihHWHQoKSxuNCk7Zm90Ll9fZXhwb3J0U3RhcihXWHQoKSxuNCk7Zm90Ll9fZXhwb3J0U3RhcihCRigpLG40KX0pO3ZhciBpND1IKHBvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgQ0ZlPUZlKCksQUZlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb249e30sdGhpcy5fZXZlbnRUYXJnZXQ9ZG9jdW1lbnQsdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldD17fSx0aGlzLl9jb25uZWN0ZWQ9ITF9cmV0dXJuIGUucHJvdG90eXBlLl9oYXNOb0NhbGxiYWNrcz1mdW5jdGlvbigpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyh0aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0KSxyPTA7cjx0Lmxlbmd0aDtyKyspaWYodGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0W3JdXS5zaXplIT09MClyZXR1cm4hMTtyZXR1cm4hMH0sZS5wcm90b3R5cGUuX2Nvbm5lY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2Nvbm5lY3RlZHx8KE9iamVjdC5rZXlzKHRoaXMuX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb24pLmZvckVhY2goZnVuY3Rpb24ocil7dmFyIG49dC5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbltyXSxpPXI9PT0id2hlZWwiP3twYXNzaXZlOiExfTp2b2lkIDA7dC5fZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihyLG4saSl9KSx0aGlzLl9jb25uZWN0ZWQ9ITApfSxlLnByb3RvdHlwZS5fZGlzY29ubmVjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fY29ubmVjdGVkJiZ0aGlzLl9oYXNOb0NhbGxiYWNrcygpJiYoT2JqZWN0LmtleXModGhpcy5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvbikuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgbj10Ll9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3JdO3QuX2V2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixuKX0pLHRoaXMuX2Nvbm5lY3RlZD0hMSl9LGUucHJvdG90eXBlLl9hZGRDYWxsYmFja0ZvckV2ZW50PWZ1bmN0aW9uKHQscil7dGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XT09bnVsbCYmKHRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF09bmV3IENGZS5DYWxsYmFja1NldCksdGhpcy5fZXZlbnROYW1lVG9DYWxsYmFja1NldFt0XS5hZGQociksdGhpcy5fY29ubmVjdCgpfSxlLnByb3RvdHlwZS5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudD1mdW5jdGlvbih0LHIpe3RoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0hPW51bGwmJnRoaXMuX2V2ZW50TmFtZVRvQ2FsbGJhY2tTZXRbdF0uZGVsZXRlKHIpLHRoaXMuX2Rpc2Nvbm5lY3QoKX0sZS5wcm90b3R5cGUuX2NhbGxDYWxsYmFja3NGb3JFdmVudD1mdW5jdGlvbih0KXtmb3IodmFyIHI9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTt2YXIgaT10aGlzLl9ldmVudE5hbWVUb0NhbGxiYWNrU2V0W3RdO2khPW51bGwmJmkuY2FsbENhbGxiYWNrcy5hcHBseShpLHIpfSxlfSgpO3BvdC5EaXNwYXRjaGVyPUFGZX0pO3ZhciBsJHQ9SChkb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFBGZT0oZGUoKSxVdChwZSkpLElGZT1pNCgpLExGZT1mdW5jdGlvbihlKXtQRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9LRVlET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG4pe3JldHVybiByLl9wcm9jZXNzS2V5ZG93bihuKX0sci5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9LRVlVUF9FVkVOVF9OQU1FXT1mdW5jdGlvbihuKXtyZXR1cm4gci5fcHJvY2Vzc0tleXVwKG4pfSxyfXJldHVybiB0LmdldERpc3BhdGNoZXI9ZnVuY3Rpb24oKXt2YXIgcj1kb2N1bWVudFt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIHI9PW51bGwmJihyPW5ldyB0LGRvY3VtZW50W3QuX0RJU1BBVENIRVJfS0VZXT1yKSxyfSx0LnByb3RvdHlwZS5fcHJvY2Vzc0tleWRvd249ZnVuY3Rpb24ocil7dGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KHQuX0tFWURPV05fRVZFTlRfTkFNRSxyLmtleUNvZGUscil9LHQucHJvdG90eXBlLl9wcm9jZXNzS2V5dXA9ZnVuY3Rpb24ocil7dGhpcy5fY2FsbENhbGxiYWNrc0ZvckV2ZW50KHQuX0tFWVVQX0VWRU5UX05BTUUsci5rZXlDb2RlLHIpfSx0LnByb3RvdHlwZS5vbktleURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZktleURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fS0VZRE9XTl9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uS2V5VXA9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fS0VZVVBfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZLZXlVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9LRVlVUF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQuX0RJU1BBVENIRVJfS0VZPSJfX1Bsb3R0YWJsZV9EaXNwYXRjaGVyX0tleSIsdC5fS0VZRE9XTl9FVkVOVF9OQU1FPSJrZXlkb3duIix0Ll9LRVlVUF9FVkVOVF9OQU1FPSJrZXl1cCIsdH0oSUZlLkRpc3BhdGNoZXIpO2RvdC5LZXk9TEZlfSk7dmFyIHUkdD1IKG1vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobW90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIga0ZlPShkZSgpLFV0KHBlKSksYyR0PUZlKCksUkZlPWk0KCksTkZlPWZ1bmN0aW9uKGUpe2tGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztuLl9sYXN0TW91c2VQb3NpdGlvbj17eDotMSx5Oi0xfSxuLl90cmFuc2xhdG9yPWMkdC5nZXRUcmFuc2xhdG9yKHIpO3ZhciBpPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX01PVVNFTU9WRV9FVkVOVF9OQU1FLCJwYWdlIil9O3JldHVybiBuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX01PVVNFT1ZFUl9FVkVOVF9OQU1FXT1pLG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUVdPWksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRU9VVF9FVkVOVF9OQU1FXT1pLG4uX2V2ZW50VG9Qcm9jZXNzaW5nRnVuY3Rpb25bdC5fTU9VU0VET1dOX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX01PVVNFRE9XTl9FVkVOVF9OQU1FKX0sbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9NT1VTRVVQX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX01PVVNFVVBfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1dIRUVMX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX1dIRUVMX0VWRU5UX05BTUUpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX0RCTENMSUNLX0VWRU5UX05BTUVdPWZ1bmN0aW9uKG8pe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixvLHQuX0RCTENMSUNLX0VWRU5UX05BTUUpfSxufXJldHVybiB0LmdldERpc3BhdGNoZXI9ZnVuY3Rpb24ocil7dmFyIG49ci5yb290KCkucm9vdEVsZW1lbnQoKSxpPW5bdC5fRElTUEFUQ0hFUl9LRVldO3JldHVybiBpPT1udWxsJiYoaT1uZXcgdChyKSxuW3QuX0RJU1BBVENIRVJfS0VZXT1pKSxpfSx0LnByb3RvdHlwZS5vbk1vdXNlTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRU1PVkVfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZNb3VzZU1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZUNhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Nb3VzZURvd249ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fTU9VU0VET1dOX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmTW91c2VEb3duPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX01PVVNFRE9XTl9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uTW91c2VVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmTW91c2VVcD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9NT1VTRVVQX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25XaGVlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9XSEVFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZldoZWVsPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1dIRUVMX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25EYmxDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9EQkxDTElDS19FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRibENsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX0RCTENMSUNLX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUuX21lYXN1cmVBbmREaXNwYXRjaD1mdW5jdGlvbihyLG4saSxvKXtpZihvPT09dm9pZCAwJiYobz0iZWxlbWVudCIpLG8hPT0icGFnZSImJm8hPT0iZWxlbWVudCIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNjb3BlICciK28rIicsIG11c3QgYmUgJ2VsZW1lbnQnIG9yICdwYWdlJyIpO2lmKG89PT0icGFnZSJ8fHRoaXMuZXZlbnRJbnNpZGUocixuKSl7dmFyIGE9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24obi5jbGllbnRYLG4uY2xpZW50WSk7dGhpcy5fbGFzdE1vdXNlUG9zaXRpb249YSx0aGlzLl9jYWxsQ2FsbGJhY2tzRm9yRXZlbnQoaSx0aGlzLmxhc3RNb3VzZVBvc2l0aW9uKCksbil9fSx0LnByb3RvdHlwZS5ldmVudEluc2lkZT1mdW5jdGlvbihyLG4pe3JldHVybiBjJHQuVHJhbnNsYXRvci5pc0V2ZW50SW5zaWRlKHIsbil9LHQucHJvdG90eXBlLmxhc3RNb3VzZVBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9ufSx0Ll9ESVNQQVRDSEVSX0tFWT0iX19QbG90dGFibGVfRGlzcGF0Y2hlcl9Nb3VzZSIsdC5fTU9VU0VPVkVSX0VWRU5UX05BTUU9Im1vdXNlb3ZlciIsdC5fTU9VU0VNT1ZFX0VWRU5UX05BTUU9Im1vdXNlbW92ZSIsdC5fTU9VU0VPVVRfRVZFTlRfTkFNRT0ibW91c2VvdXQiLHQuX01PVVNFRE9XTl9FVkVOVF9OQU1FPSJtb3VzZWRvd24iLHQuX01PVVNFVVBfRVZFTlRfTkFNRT0ibW91c2V1cCIsdC5fV0hFRUxfRVZFTlRfTkFNRT0id2hlZWwiLHQuX0RCTENMSUNLX0VWRU5UX05BTUU9ImRibGNsaWNrIix0fShSRmUuRGlzcGF0Y2hlcik7bW90Lk1vdXNlPU5GZX0pO3ZhciBmJHQ9SChnb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGdvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIERGZT0oZGUoKSxVdChwZSkpLGgkdD1GZSgpLE9GZT1pNCgpLHpGZT1mdW5jdGlvbihlKXtERmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3RyYW5zbGF0b3I9aCR0LmdldFRyYW5zbGF0b3Iociksbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9UT1VDSFNUQVJUX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNITU9WRV9FVkVOVF9OQU1FXT1mdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZUFuZERpc3BhdGNoKHIsaSx0Ll9UT1VDSE1PVkVfRVZFTlRfTkFNRSwicGFnZSIpfSxuLl9ldmVudFRvUHJvY2Vzc2luZ0Z1bmN0aW9uW3QuX1RPVUNIRU5EX0VWRU5UX05BTUVdPWZ1bmN0aW9uKGkpe3JldHVybiBuLl9tZWFzdXJlQW5kRGlzcGF0Y2gocixpLHQuX1RPVUNIRU5EX0VWRU5UX05BTUUsInBhZ2UiKX0sbi5fZXZlbnRUb1Byb2Nlc3NpbmdGdW5jdGlvblt0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FXT1mdW5jdGlvbihpKXtyZXR1cm4gbi5fbWVhc3VyZUFuZERpc3BhdGNoKHIsaSx0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLCJwYWdlIil9LG59cmV0dXJuIHQuZ2V0RGlzcGF0Y2hlcj1mdW5jdGlvbihyKXt2YXIgbj1yLnJvb3QoKS5yb290RWxlbWVudCgpLGk9blt0Ll9ESVNQQVRDSEVSX0tFWV07cmV0dXJuIGk9PW51bGwmJihpPW5ldyB0KHIpLG5bdC5fRElTUEFUQ0hFUl9LRVldPWkpLGl9LHQucHJvdG90eXBlLm9uVG91Y2hTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fYWRkQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSFNUQVJUX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmVG91Y2hTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSFNUQVJUX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub25Ub3VjaE1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUUsciksdGhpc30sdC5wcm90b3R5cGUub2ZmVG91Y2hNb3ZlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9yZW1vdmVDYWxsYmFja0ZvckV2ZW50KHQuX1RPVUNITU9WRV9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uVG91Y2hFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hFTkRfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaEVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSEVORF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLm9uVG91Y2hDYW5jZWw9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FkZENhbGxiYWNrRm9yRXZlbnQodC5fVE9VQ0hDQU5DRUxfRVZFTlRfTkFNRSxyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZUb3VjaENhbmNlbD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2FsbGJhY2tGb3JFdmVudCh0Ll9UT1VDSENBTkNFTF9FVkVOVF9OQU1FLHIpLHRoaXN9LHQucHJvdG90eXBlLl9tZWFzdXJlQW5kRGlzcGF0Y2g9ZnVuY3Rpb24ocixuLGksbyl7aWYobz09PXZvaWQgMCYmKG89ImVsZW1lbnQiKSxvIT09InBhZ2UiJiZvIT09ImVsZW1lbnQiKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzY29wZSAnIitvKyInLCBtdXN0IGJlICdlbGVtZW50JyBvciAncGFnZSciKTtpZighKG89PT0iZWxlbWVudCImJiF0aGlzLmV2ZW50SW5zaWRlKHIsbikpKXtmb3IodmFyIGE9bi5jaGFuZ2VkVG91Y2hlcyxzPXt9LGw9W10sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGg9dS5pZGVudGlmaWVyLGY9dGhpcy5fdHJhbnNsYXRvci5jb21wdXRlUG9zaXRpb24odS5jbGllbnRYLHUuY2xpZW50WSk7ZiE9bnVsbCYmKHNbaF09ZixsLnB1c2goaCkpfWwubGVuZ3RoPjAmJnRoaXMuX2NhbGxDYWxsYmFja3NGb3JFdmVudChpLGwscyxuKX19LHQucHJvdG90eXBlLmV2ZW50SW5zaWRlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGgkdC5UcmFuc2xhdG9yLmlzRXZlbnRJbnNpZGUocixuKX0sdC5fRElTUEFUQ0hFUl9LRVk9Il9fUGxvdHRhYmxlX0Rpc3BhdGNoZXJfVG91Y2giLHQuX1RPVUNIU1RBUlRfRVZFTlRfTkFNRT0idG91Y2hzdGFydCIsdC5fVE9VQ0hNT1ZFX0VWRU5UX05BTUU9InRvdWNobW92ZSIsdC5fVE9VQ0hFTkRfRVZFTlRfTkFNRT0idG91Y2hlbmQiLHQuX1RPVUNIQ0FOQ0VMX0VWRU5UX05BTUU9InRvdWNoY2FuY2VsIix0fShPRmUuRGlzcGF0Y2hlcik7Z290LlRvdWNoPXpGZX0pO3ZhciBOMT1IKG80PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvNCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIF9vdD0oZGUoKSxVdChwZSkpO19vdC5fX2V4cG9ydFN0YXIobCR0KCksbzQpO19vdC5fX2V4cG9ydFN0YXIodSR0KCksbzQpO19vdC5fX2V4cG9ydFN0YXIoZiR0KCksbzQpfSk7dmFyIEQxPUgoeW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5b3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGRmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpczt0aGlzLl9hbmNob3JDYWxsYmFjaz1mdW5jdGlvbihyKXtyZXR1cm4gdC5fYW5jaG9yKHIpfSx0aGlzLl9lbmFibGVkPSEwfXJldHVybiBlLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZGlzY29ubmVjdCgpLHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG89dCx0aGlzLl9jb25uZWN0KCksdGhpc30sZS5wcm90b3R5cGUuZGV0YWNoRnJvbT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kZXRhY2goKX0sZS5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rpc2Nvbm5lY3QoKSx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvPW51bGwsdGhpc30sZS5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXQsdGhpcy5fZW5hYmxlZD90aGlzLl9jb25uZWN0KCk6dGhpcy5fZGlzY29ubmVjdCgpLHRoaXMpfSxlLnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHQpe3RoaXMuX2lzQW5jaG9yZWQ9ITB9LGUucHJvdG90eXBlLl91bmFuY2hvcj1mdW5jdGlvbigpe3RoaXMuX2lzQW5jaG9yZWQ9ITF9LGUucHJvdG90eXBlLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ub3JpZ2luVG9Sb290KCk7cmV0dXJue3g6dC54LXIueCx5OnQueS1yLnl9fSxlLnByb3RvdHlwZS5faXNJbnNpZGVDb21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA8PXQueCYmMDw9dC55JiZ0Lng8PXRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8ud2lkdGgoKSYmdC55PD10aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfSxlLnByb3RvdHlwZS5fY29ubmVjdD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZCgpJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvIT1udWxsJiYhdGhpcy5faXNBbmNob3JlZCYmdGhpcy5fY29tcG9uZW50QXR0YWNoZWRUby5vbkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LGUucHJvdG90eXBlLl9kaXNjb25uZWN0PWZ1bmN0aW9uKCl7dGhpcy5faXNBbmNob3JlZCYmdGhpcy5fdW5hbmNob3IoKSx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvIT1udWxsJiZ0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLm9mZkFuY2hvcih0aGlzLl9hbmNob3JDYWxsYmFjayl9LGV9KCk7eW90LkludGVyYWN0aW9uPUZGZX0pO3ZhciBtJHQ9SCh2b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHZvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEJGZT0oZGUoKSxVdChwZSkpLHAkdD1OMSgpLGQkdD1GZSgpLEhGZT1EMSgpLFZGZT1mdW5jdGlvbihlKXtCRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gci5fY2xpY2tlZERvd249ITEsci5fZG91YmxlQ2xpY2tpbmc9ITEsci5fb25DbGlja0NhbGxiYWNrcz1uZXcgZCR0LkNhbGxiYWNrU2V0LHIuX29uRG91YmxlQ2xpY2tDYWxsYmFja3M9bmV3IGQkdC5DYWxsYmFja1NldCxyLl9tb3VzZURvd25DYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVDbGlja0Rvd24obixpKX0sci5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrVXAobixpKX0sci5fZGJsQ2xpY2tDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9oYW5kbGVEYmxDbGljayhuLGkpfSxyLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24obixpLG8pe3JldHVybiByLl9oYW5kbGVDbGlja0Rvd24oaVtuWzBdXSxvKX0sci5fdG91Y2hFbmRDYWxsYmFjaz1mdW5jdGlvbihuLGksbyl7cmV0dXJuIHIuX2hhbmRsZUNsaWNrVXAoaVtuWzBdXSxvKX0sci5fdG91Y2hDYW5jZWxDYWxsYmFjaz1mdW5jdGlvbihuLGkpe3JldHVybiByLl9jbGlja2VkRG93bj0hMX0scn1yZXR1cm4gdC5wcm90b3R5cGUuX2FuY2hvcj1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fYW5jaG9yLmNhbGwodGhpcyxyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9cCR0Lk1vdXNlLmdldERpc3BhdGNoZXIociksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uRGJsQ2xpY2sodGhpcy5fZGJsQ2xpY2tDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPXAkdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHIpLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaEVuZCh0aGlzLl90b3VjaEVuZENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaENhbmNlbCh0aGlzLl90b3VjaENhbmNlbENhbGxiYWNrKX0sdC5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlVXAodGhpcy5fbW91c2VVcENhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmRGJsQ2xpY2sodGhpcy5fZGJsQ2xpY2tDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5faGFuZGxlQ2xpY2tEb3duPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmKHRoaXMuX2NsaWNrZWREb3duPSEwLHRoaXMuX2NsaWNrZWRQb2ludD1pKX0sdC5wcm90b3R5cGUuX2hhbmRsZUNsaWNrVXA9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLG89dGhpcy5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShyKTt0aGlzLl9jbGlja2VkRG93biYmdC5fcG9pbnRzRXF1YWwobyx0aGlzLl9jbGlja2VkUG9pbnQpJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5fZG91YmxlQ2xpY2tpbmd8fGkuX29uQ2xpY2tDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhvLG4pfSwwKSx0aGlzLl9jbGlja2VkRG93bj0hMX0sdC5wcm90b3R5cGUuX2hhbmRsZURibENsaWNrPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcyxvPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7dGhpcy5fZG91YmxlQ2xpY2tpbmc9ITAsdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG8sbiksc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBpLl9kb3VibGVDbGlja2luZz0hMX0sMCl9LHQuX3BvaW50c0VxdWFsPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHIueD09PW4ueCYmci55PT09bi55fSx0LnByb3RvdHlwZS5vbkNsaWNrPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9vbkNsaWNrQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25DbGlja0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25Eb3VibGVDbGljaz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fb25Eb3VibGVDbGlja0NhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRG91YmxlQ2xpY2s9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX29uRG91YmxlQ2xpY2tDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHR9KEhGZS5JbnRlcmFjdGlvbik7dm90LkNsaWNrPVZGZX0pO3ZhciBfJHQ9SCh4b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHhvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFVGZT0oZGUoKSxVdChwZSkpLGckdD1OMSgpLGE0PUZlKCkscUZlPUQxKCksR0ZlPWZ1bmN0aW9uKGUpe1VGZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5fZHJhZ2dpbmc9ITEsbi5fY29uc3RyYWluZWRUb0NvbXBvbmVudD0hMCxuLl9tb3VzZUZpbHRlcj10Ll9ERUZBVUxUX01PVVNFX0ZJTFRFUixuLl9kcmFnU3RhcnRDYWxsYmFja3M9bmV3IGE0LkNhbGxiYWNrU2V0LG4uX2RyYWdDYWxsYmFja3M9bmV3IGE0LkNhbGxiYWNrU2V0LG4uX2RyYWdFbmRDYWxsYmFja3M9bmV3IGE0LkNhbGxiYWNrU2V0LG4uX21vdXNlRG93bkNhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX3N0YXJ0RHJhZyhpLG8pfSxuLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihpLG8pe3JldHVybiBuLl9kb0RyYWcoaSxvKX0sbi5fbW91c2VVcENhbGxiYWNrPWZ1bmN0aW9uKGksbyl7cmV0dXJuIG4uX2VuZERyYWcoaSxvKX0sbi5fdG91Y2hTdGFydENhbGxiYWNrPWZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gbi5fc3RhcnREcmFnKG9baVswXV0sYSl9LG4uX3RvdWNoTW92ZUNhbGxiYWNrPWZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gbi5fZG9EcmFnKG9baVswXV0sYSl9LG4uX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24oaSxvLGEpe3JldHVybiBuLl9lbmREcmFnKG9baVswXV0sYSl9LG4uX21vdXNlQnV0dG9uPXIhPT12b2lkIDA/cjowLG59cmV0dXJuIHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fbW91c2VEaXNwYXRjaGVyPWckdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlRG93bih0aGlzLl9tb3VzZURvd25DYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZVVwKHRoaXMuX21vdXNlVXBDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPWckdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VEb3duKHRoaXMuX21vdXNlRG93bkNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VNb3ZlKHRoaXMuX21vdXNlTW92ZUNhbGxiYWNrKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmTW91c2VVcCh0aGlzLl9tb3VzZVVwQ2FsbGJhY2spLHRoaXMuX21vdXNlRGlzcGF0Y2hlcj1udWxsLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vZmZUb3VjaFN0YXJ0KHRoaXMuX3RvdWNoU3RhcnRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoTW92ZSh0aGlzLl90b3VjaE1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsfSx0LnByb3RvdHlwZS5fdHJhbnNsYXRlQW5kQ29uc3RyYWluPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7cmV0dXJuIHRoaXMuX2NvbnN0cmFpbmVkVG9Db21wb25lbnQ/e3g6YTQuTWF0aC5jbGFtcChuLngsMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkpLHk6YTQuTWF0aC5jbGFtcChuLnksMCx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpKX06bn0sdC5wcm90b3R5cGUuX3N0YXJ0RHJhZz1mdW5jdGlvbihyLG4pe2lmKCEobiBpbnN0YW5jZW9mIE1vdXNlRXZlbnQmJiF0aGlzLl9tb3VzZUZpbHRlcihuKSkpe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uocik7dGhpcy5faXNJbnNpZGVDb21wb25lbnQoaSkmJihuLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJhZ2dpbmc9ITAsdGhpcy5fZHJhZ09yaWdpbj1pLHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4pKX19LHQucHJvdG90eXBlLl9kb0RyYWc9ZnVuY3Rpb24ocixuKXt0aGlzLl9kcmFnZ2luZyYmdGhpcy5fZHJhZ0NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMuX2RyYWdPcmlnaW4sdGhpcy5fdHJhbnNsYXRlQW5kQ29uc3RyYWluKHIpKX0sdC5wcm90b3R5cGUuX2VuZERyYWc9ZnVuY3Rpb24ocixuKXtuIGluc3RhbmNlb2YgTW91c2VFdmVudCYmbi5idXR0b24hPT10aGlzLl9tb3VzZUJ1dHRvbnx8dGhpcy5fZHJhZ2dpbmcmJih0aGlzLl9kcmFnZ2luZz0hMSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3ModGhpcy5fZHJhZ09yaWdpbix0aGlzLl90cmFuc2xhdGVBbmRDb25zdHJhaW4ocikpKX0sdC5wcm90b3R5cGUuY29uc3RyYWluZWRUb0NvbXBvbmVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50Oih0aGlzLl9jb25zdHJhaW5lZFRvQ29tcG9uZW50PXIsdGhpcyl9LHQucHJvdG90eXBlLm1vdXNlRmlsdGVyPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9tb3VzZUZpbHRlcjoodGhpcy5fbW91c2VGaWx0ZXI9cix0aGlzKX0sdC5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0Ll9ERUZBVUxUX01PVVNFX0ZJTFRFUj1mdW5jdGlvbihyKXtyZXR1cm4gci5idXR0b249PT0wfSx0fShxRmUuSW50ZXJhY3Rpb24pO3hvdC5EcmFnPUdGZX0pO3ZhciBTb3Q9SCh3b3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdGZT0oZGUoKSxVdChwZSkpLHkkdD1OMSgpLGJvdD1GZSgpLFlGZT1EMSgpLGpGZT1mdW5jdGlvbihlKXtXRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gci5fa2V5UHJlc3NDYWxsYmFja3M9e30sci5fa2V5UmVsZWFzZUNhbGxiYWNrcz17fSxyLl9tb3VzZU1vdmVDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4hMX0sci5fZG93bmVkS2V5cz1uZXcgYm90LlNldCxyLl9rZXlEb3duQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlS2V5RG93bkV2ZW50KG4saSl9LHIuX2tleVVwQ2FsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHIuX2hhbmRsZUtleVVwRXZlbnQobil9LHJ9cmV0dXJuIHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPXkkdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlcj15JHQuS2V5LmdldERpc3BhdGNoZXIoKSx0aGlzLl9rZXlEaXNwYXRjaGVyLm9uS2V5RG93bih0aGlzLl9rZXlEb3duQ2FsbGJhY2spLHRoaXMuX2tleURpc3BhdGNoZXIub25LZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKX0sdC5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fcG9zaXRpb25EaXNwYXRjaGVyPW51bGwsdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlEb3duKHRoaXMuX2tleURvd25DYWxsYmFjayksdGhpcy5fa2V5RGlzcGF0Y2hlci5vZmZLZXlVcCh0aGlzLl9rZXlVcENhbGxiYWNrKSx0aGlzLl9rZXlEaXNwYXRjaGVyPW51bGx9LHQucHJvdG90eXBlLl9oYW5kbGVLZXlEb3duRXZlbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHRoaXMuX3Bvc2l0aW9uRGlzcGF0Y2hlci5sYXN0TW91c2VQb3NpdGlvbigpKTt0aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKSYmIW4ucmVwZWF0JiYodGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0mJnRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLmNhbGxDYWxsYmFja3MociksdGhpcy5fZG93bmVkS2V5cy5hZGQocikpfSx0LnByb3RvdHlwZS5faGFuZGxlS2V5VXBFdmVudD1mdW5jdGlvbihyKXt0aGlzLl9kb3duZWRLZXlzLmhhcyhyKSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXSYmdGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXS5jYWxsQ2FsbGJhY2tzKHIpLHRoaXMuX2Rvd25lZEtleXMuZGVsZXRlKHIpfSx0LnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdfHwodGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl09bmV3IGJvdC5DYWxsYmFja1NldCksdGhpcy5fa2V5UHJlc3NDYWxsYmFja3Nbcl0uYWRkKG4pLHRoaXN9LHQucHJvdG90eXBlLm9mZktleVByZXNzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLmRlbGV0ZShuKSx0aGlzLl9rZXlQcmVzc0NhbGxiYWNrc1tyXS5zaXplPT09MCYmZGVsZXRlIHRoaXMuX2tleVByZXNzQ2FsbGJhY2tzW3JdLHRoaXN9LHQucHJvdG90eXBlLm9uS2V5UmVsZWFzZT1mdW5jdGlvbihyLG4pe3JldHVybiB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdfHwodGhpcy5fa2V5UmVsZWFzZUNhbGxiYWNrc1tyXT1uZXcgYm90LkNhbGxiYWNrU2V0KSx0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLmFkZChuKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZLZXlSZWxlYXNlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uZGVsZXRlKG4pLHRoaXMuX2tleVJlbGVhc2VDYWxsYmFja3Nbcl0uc2l6ZT09PTAmJmRlbGV0ZSB0aGlzLl9rZXlSZWxlYXNlQ2FsbGJhY2tzW3JdLHRoaXN9LHR9KFlGZS5JbnRlcmFjdGlvbik7d290LktleT1qRmV9KTt2YXIgdyR0PUgoTW90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShNb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYRmU9KGRlKCksVXQocGUpKSwkRmU9KEVyKCksVXQoTXIpKSx2JHQ9TjEoKSx4JHQ9a3MoKSx5bD1GZSgpLEtGZT1zNCgpLFpGZT1EMSgpLGIkdD10NCgpLEpGZT1mdW5jdGlvbihlKXtYRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyLG4pe3ZhciBpPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gaS5fd2hlZWxGaWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuITB9LGkuX3doZWVsQ2FsbGJhY2s9ZnVuY3Rpb24obyxhKXtyZXR1cm4gaS5faGFuZGxlV2hlZWxFdmVudChvLGEpfSxpLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVUb3VjaFN0YXJ0KG8sYSxzKX0saS5fdG91Y2hNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVQaW5jaChvLGEscyl9LGkuX3RvdWNoRW5kQ2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVUb3VjaEVuZChvLGEscyl9LGkuX3RvdWNoQ2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24obyxhLHMpe3JldHVybiBpLl9oYW5kbGVUb3VjaEVuZChvLGEscyl9LGkuX3BhbkVuZENhbGxiYWNrcz1uZXcgeWwuQ2FsbGJhY2tTZXQsaS5fem9vbUVuZENhbGxiYWNrcz1uZXcgeWwuQ2FsbGJhY2tTZXQsaS5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcz1uZXcgeWwuQ2FsbGJhY2tTZXQsaS5feFNjYWxlcz1uZXcgeWwuU2V0LGkuX3lTY2FsZXM9bmV3IHlsLlNldCxpLl9kcmFnSW50ZXJhY3Rpb249bmV3IEtGZS5EcmFnLGkuX3NldHVwRHJhZ0ludGVyYWN0aW9uKCksaS5fdG91Y2hJZHM9JEZlLm1hcCgpLGkuX21pbkRvbWFpbkV4dGVudHM9bmV3IHlsLk1hcCxpLl9tYXhEb21haW5FeHRlbnRzPW5ldyB5bC5NYXAsaS5fbWluRG9tYWluVmFsdWVzPW5ldyB5bC5NYXAsaS5fbWF4RG9tYWluVmFsdWVzPW5ldyB5bC5NYXAsciE9bnVsbCYmaS5hZGRYU2NhbGUociksbiE9bnVsbCYmaS5hZGRZU2NhbGUobiksaX1yZXR1cm4gdC5wcm90b3R5cGUuZHJhZ0ludGVyYWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdJbnRlcmFjdGlvbn0sdC5wcm90b3R5cGUud2hlZWxGaWx0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMuX3doZWVsRmlsdGVyOih0aGlzLl93aGVlbEZpbHRlcj1yLHRoaXMpfSx0LnByb3RvdHlwZS5wYW49ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLnhTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kucGFuKG4uX2NvbnN0cmFpbmVkVHJhbnNsYXRpb24oaSxyLngpKX0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5wYW4obi5fY29uc3RyYWluZWRUcmFuc2xhdGlvbihpLHIueSkpfSksdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCl9LHQucHJvdG90eXBlLnpvb209ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXM7aT09PXZvaWQgMCYmKGk9ITApO3ZhciBhLHM7cmV0dXJuIG4hPW51bGwmJihhPW4ueCxzPW4ueSxpJiYodGhpcy54U2NhbGVzKCkuZm9yRWFjaChmdW5jdGlvbihsKXt2YXIgYz1vLl9jb25zdHJhaW5lZFpvb20obCxyLGEpO2E9Yy5jZW50ZXJQb2ludCxyPWMuem9vbUFtb3VudH0pLHRoaXMueVNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9by5fY29uc3RyYWluZWRab29tKGwscixzKTtzPWMuY2VudGVyUG9pbnQscj1jLnpvb21BbW91bnR9KSkpLHRoaXMueFNjYWxlcygpLmZvckVhY2goZnVuY3Rpb24obCl7dmFyIGM9bC5yYW5nZSgpLHU9YT09bnVsbD8oY1sxXStjWzBdKS8yOmE7bC56b29tKHIsdSl9KSx0aGlzLnlTY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGwpe3ZhciBjPWwucmFuZ2UoKSx1PXM9PW51bGw/KGNbMV0rY1swXSkvMjpzO2wuem9vbShyLHUpfSksdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKCkse3pvb21BbW91bnQ6cixjZW50ZXJWYWx1ZTp7Y2VudGVyWDphLGNlbnRlclk6c319fSx0LnByb3RvdHlwZS5fYW5jaG9yPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9hbmNob3IuY2FsbCh0aGlzLHIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyhyKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9diR0Lk1vdXNlLmdldERpc3BhdGNoZXIodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uV2hlZWwodGhpcy5fd2hlZWxDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPXYkdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub25Ub3VjaE1vdmUodGhpcy5fdG91Y2hNb3ZlQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoRW5kKHRoaXMuX3RvdWNoRW5kQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spfSx0LnByb3RvdHlwZS5fdW5hbmNob3I9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fdW5hbmNob3IuY2FsbCh0aGlzKSx0aGlzLl9tb3VzZURpc3BhdGNoZXIub2ZmV2hlZWwodGhpcy5fd2hlZWxDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hNb3ZlKHRoaXMuX3RvdWNoTW92ZUNhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXIub2ZmVG91Y2hFbmQodGhpcy5fdG91Y2hFbmRDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoQ2FuY2VsKHRoaXMuX3RvdWNoQ2FuY2VsQ2FsbGJhY2spLHRoaXMuX3RvdWNoRGlzcGF0Y2hlcj1udWxsLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKX0sdC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoU3RhcnQ9ZnVuY3Rpb24ocixuLGkpe2Zvcih2YXIgbz0wO288ci5sZW5ndGgmJnRoaXMuX3RvdWNoSWRzLnNpemUoKTwyO28rKyl7dmFyIGE9cltvXTt0aGlzLl90b3VjaElkcy5zZXQoYS50b1N0cmluZygpLHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoblthXSkpfX0sdC5wcm90b3R5cGUuX2hhbmRsZVBpbmNoPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO2lmKCEodGhpcy5fdG91Y2hJZHMuc2l6ZSgpPDIpKXt2YXIgYT10aGlzLl90b3VjaElkcy52YWx1ZXMoKTtpZighKCF0aGlzLl9pc0luc2lkZUNvbXBvbmVudCh0aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKGFbMF0pKXx8IXRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KHRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2UoYVsxXSkpKSl7dmFyIHM9dC5fcG9pbnREaXN0YW5jZShhWzBdLGFbMV0pO2lmKHMhPT0wKXtyLmZvckVhY2goZnVuY3Rpb24oUyl7by5fdG91Y2hJZHMuaGFzKFMudG9TdHJpbmcoKSkmJm8uX3RvdWNoSWRzLnNldChTLnRvU3RyaW5nKCksby5fdHJhbnNsYXRlVG9Db21wb25lbnRTcGFjZShuW1NdKSl9KTt2YXIgbD10aGlzLl90b3VjaElkcy52YWx1ZXMoKSxjPXQuX3BvaW50RGlzdGFuY2UobFswXSxsWzFdKTtpZihjIT09MCl7dmFyIHU9cy9jLGg9bC5tYXAoZnVuY3Rpb24oUyxDKXtyZXR1cm57eDooUy54LWFbQ10ueCkvdSx5OihTLnktYVtDXS55KS91fX0pLGY9dC5jZW50ZXJQb2ludChhWzBdLGFbMV0pLHA9dGhpcy56b29tKHUsZiksZD1wLmNlbnRlclZhbHVlLGc9cC56b29tQW1vdW50LF89ZC5jZW50ZXJYLHk9ZC5jZW50ZXJZLHg9YS5tYXAoZnVuY3Rpb24oUyxDKXtyZXR1cm57eDpoW0NdLngqZytTLngseTpoW0NdLnkqZytTLnl9fSksYj17eDpfLSh4WzBdLngreFsxXS54KS8yLHk6eS0oeFswXS55K3hbMV0ueSkvMn07dGhpcy5wYW4oYil9fX19fSx0LmNlbnRlclBvaW50PWZ1bmN0aW9uKHIsbil7dmFyIGk9TWF0aC5taW4oci54LG4ueCksbz1NYXRoLm1heChyLngsbi54KSxhPU1hdGgubWluKHIueSxuLnkpLHM9TWF0aC5tYXgoci55LG4ueSk7cmV0dXJue3g6KGkrbykvMix5OihzK2EpLzJ9fSx0Ll9wb2ludERpc3RhbmNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9TWF0aC5taW4oci54LG4ueCksbz1NYXRoLm1heChyLngsbi54KSxhPU1hdGgubWluKHIueSxuLnkpLHM9TWF0aC5tYXgoci55LG4ueSk7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhvLWksMikrTWF0aC5wb3cocy1hLDIpKX0sdC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRW5kPWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO3IuZm9yRWFjaChmdW5jdGlvbihhKXtvLl90b3VjaElkcy5yZW1vdmUoYS50b1N0cmluZygpKX0pLHRoaXMuX3RvdWNoSWRzLnNpemUoKT4wJiZ0aGlzLl96b29tRW5kQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MoKX0sdC5wcm90b3R5cGUuX2hhbmRsZVdoZWVsRXZlbnQ9ZnVuY3Rpb24ocixuKXtpZighIXRoaXMuX3doZWVsRmlsdGVyKG4pKXt2YXIgaT10aGlzLl90cmFuc2xhdGVUb0NvbXBvbmVudFNwYWNlKHIpO2lmKHRoaXMuX2lzSW5zaWRlQ29tcG9uZW50KGkpKXtuLnByZXZlbnREZWZhdWx0KCk7dmFyIG89bi5kZWx0YVkhPT0wP24uZGVsdGFZOm4uZGVsdGFYLGE9byoobi5kZWx0YU1vZGU/dC5fUElYRUxTX1BFUl9MSU5FOjEpLHM9TWF0aC5wb3coMixhKi4wMDIpO3RoaXMuem9vbShzLGkpLHRoaXMuX3pvb21FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfX19LHQucHJvdG90eXBlLl9jb25zdHJhaW5lZFpvb209ZnVuY3Rpb24ocixuLGkpe3JldHVybiBiJHQuY29uc3RyYWluZWRab29tKHIsbixpLHRoaXMubWluRG9tYWluRXh0ZW50KHIpLHRoaXMubWF4RG9tYWluRXh0ZW50KHIpLHRoaXMubWluRG9tYWluVmFsdWUociksdGhpcy5tYXhEb21haW5WYWx1ZShyKSl9LHQucHJvdG90eXBlLl9jb25zdHJhaW5lZFRyYW5zbGF0aW9uPWZ1bmN0aW9uKHIsbil7cmV0dXJuIGIkdC5jb25zdHJhaW5lZFRyYW5zbGF0aW9uKHIsbix0aGlzLm1pbkRvbWFpblZhbHVlKHIpLHRoaXMubWF4RG9tYWluVmFsdWUocikpfSx0LnByb3RvdHlwZS5fc2V0dXBEcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5jb25zdHJhaW5lZFRvQ29tcG9uZW50KCExKTt2YXIgbjt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoZnVuY3Rpb24oKXtyZXR1cm4gbj1udWxsfSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyhmdW5jdGlvbihpLG8pe2lmKCEoci5fdG91Y2hJZHMuc2l6ZSgpPj0yKSl7dmFyIGE9e3g6KG49PW51bGw/aS54Om4ueCktby54LHk6KG49PW51bGw/aS55Om4ueSktby55fTtyLnBhbihhKSxuPW99fSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ0VuZChmdW5jdGlvbigpe3JldHVybiByLl9wYW5FbmRDYWxsYmFja3MuY2FsbENhbGxiYWNrcygpfSl9LHQucHJvdG90eXBlLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLm1pbkRvbWFpbkV4dGVudChyKSE9bnVsbCYmdGhpcy5tYXhEb21haW5FeHRlbnQocikhPW51bGwmJiEociBpbnN0YW5jZW9mIHgkdC5MaW5lYXIpJiYhKHIgaW5zdGFuY2VvZiB4JHQuVGltZSl9LHQucHJvdG90eXBlLnhTY2FsZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT1udWxsKXt2YXIgaT1bXTtyZXR1cm4gdGhpcy5feFNjYWxlcy5mb3JFYWNoKGZ1bmN0aW9uKG8pe2kucHVzaChvKX0pLGl9cmV0dXJuIHRoaXMuX3hTY2FsZXM9bmV3IHlsLlNldCxyLmZvckVhY2goZnVuY3Rpb24obyl7bi5hZGRYU2NhbGUobyl9KSx0aGlzfSx0LnByb3RvdHlwZS55U2NhbGVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7aWYocj09bnVsbCl7dmFyIGk9W107cmV0dXJuIHRoaXMuX3lTY2FsZXMuZm9yRWFjaChmdW5jdGlvbihvKXtpLnB1c2gobyl9KSxpfXJldHVybiB0aGlzLl95U2NhbGVzPW5ldyB5bC5TZXQsci5mb3JFYWNoKGZ1bmN0aW9uKG8pe24uYWRkWVNjYWxlKG8pfSksdGhpc30sdC5wcm90b3R5cGUuYWRkWFNjYWxlPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl94U2NhbGVzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5yZW1vdmVYU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3hTY2FsZXMuZGVsZXRlKHIpLHRoaXMuX21pbkRvbWFpbkV4dGVudHMuZGVsZXRlKHIpLHRoaXMuX21heERvbWFpbkV4dGVudHMuZGVsZXRlKHIpLHRoaXMuX21pbkRvbWFpblZhbHVlcy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5hZGRZU2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3lTY2FsZXMuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZVlTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5feVNjYWxlcy5kZWxldGUociksdGhpcy5fbWluRG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5kZWxldGUociksdGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm1pbkRvbWFpbkV4dGVudD1mdW5jdGlvbihyLG4pe2lmKG49PW51bGwpcmV0dXJuIHRoaXMuX21pbkRvbWFpbkV4dGVudHMuZ2V0KHIpO2lmKG4udmFsdWVPZigpPDApdGhyb3cgbmV3IEVycm9yKCJleHRlbnQgbXVzdCBiZSBub24tbmVnYXRpdmUiKTt2YXIgaT10aGlzLm1heERvbWFpbkV4dGVudChyKTtpZihpIT1udWxsJiZpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKSl0aHJvdyBuZXcgRXJyb3IoIm1pbkRvbWFpbkV4dGVudCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBtYXhEb21haW5FeHRlbnQgZm9yIHRoZSBzYW1lIFNjYWxlIik7cmV0dXJuIHRoaXMuX25vbkxpbmVhclNjYWxlV2l0aEV4dGVudHMocikmJnlsLldpbmRvdy53YXJuKCJQYW5uaW5nIGFuZCB6b29taW5nIHdpdGggZXh0ZW50cyBvbiBhIG5vbmxpbmVhciBzY2FsZSBtYXkgaGF2ZSB1bmludGVuZGVkIGJlaGF2aW9yLiIpLHRoaXMuX21pbkRvbWFpbkV4dGVudHMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUubWF4RG9tYWluRXh0ZW50PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fbWF4RG9tYWluRXh0ZW50cy5nZXQocik7aWYobi52YWx1ZU9mKCk8PTApdGhyb3cgbmV3IEVycm9yKCJleHRlbnQgbXVzdCBiZSBwb3NpdGl2ZSIpO3ZhciBpPXRoaXMubWluRG9tYWluRXh0ZW50KHIpO2lmKGkhPW51bGwmJm4udmFsdWVPZigpPGkudmFsdWVPZigpKXRocm93IG5ldyBFcnJvcigibWF4RG9tYWluRXh0ZW50IG11c3QgYmUgbGFyZ2VyIHRoYW4gbWluRG9tYWluRXh0ZW50IGZvciB0aGUgc2FtZSBTY2FsZSIpO3JldHVybiB0aGlzLl9ub25MaW5lYXJTY2FsZVdpdGhFeHRlbnRzKHIpJiZ5bC5XaW5kb3cud2FybigiUGFubmluZyBhbmQgem9vbWluZyB3aXRoIGV4dGVudHMgb24gYSBub25saW5lYXIgc2NhbGUgbWF5IGhhdmUgdW5pbnRlbmRlZCBiZWhhdmlvci4iKSx0aGlzLl9tYXhEb21haW5FeHRlbnRzLnNldChyLG4pLHRoaXN9LHQucHJvdG90eXBlLm1pbkRvbWFpblZhbHVlPWZ1bmN0aW9uKHIsbil7cmV0dXJuIG49PW51bGw/dGhpcy5fbWluRG9tYWluVmFsdWVzLmdldChyKToodGhpcy5fbWluRG9tYWluVmFsdWVzLnNldChyLG4pLHRoaXMpfSx0LnByb3RvdHlwZS5tYXhEb21haW5WYWx1ZT1mdW5jdGlvbihyLG4pe3JldHVybiBuPT1udWxsP3RoaXMuX21heERvbWFpblZhbHVlcy5nZXQocik6KHRoaXMuX21heERvbWFpblZhbHVlcy5zZXQocixuKSx0aGlzKX0sdC5wcm90b3R5cGUuc2V0TWluTWF4RG9tYWluVmFsdWVzVG89ZnVuY3Rpb24ocil7dGhpcy5fbWluRG9tYWluVmFsdWVzLmRlbGV0ZShyKSx0aGlzLl9tYXhEb21haW5WYWx1ZXMuZGVsZXRlKHIpO3ZhciBuPXIuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKSxpPW5bMF0sbz1uWzFdO3JldHVybiB0aGlzLm1pbkRvbWFpblZhbHVlKHIsaSksdGhpcy5tYXhEb21haW5WYWx1ZShyLG8pLHRoaXN9LHQucHJvdG90eXBlLm9uUGFuRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wYW5FbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlBhbkVuZD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFuRW5kQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vblpvb21FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZlpvb21FbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3pvb21FbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUGFuWm9vbVVwZGF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcGFuWm9vbVVwZGF0ZUNhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5fUElYRUxTX1BFUl9MSU5FPTEyMCx0fShaRmUuSW50ZXJhY3Rpb24pO01vdC5QYW5ab29tPUpGZX0pO3ZhciBNJHQ9SChUb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFRvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFFGZT0oZGUoKSxVdChwZSkpLFMkdD1OMSgpLEVvdD1GZSgpLHRCZT1EMSgpLGVCZT1mdW5jdGlvbihlKXtRRmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUhPT1udWxsJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gci5fb3ZlckNvbXBvbmVudD0hMSxyLl9wb2ludGVyRW50ZXJDYWxsYmFja3M9bmV3IEVvdC5DYWxsYmFja1NldCxyLl9wb2ludGVyTW92ZUNhbGxiYWNrcz1uZXcgRW90LkNhbGxiYWNrU2V0LHIuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzPW5ldyBFb3QuQ2FsbGJhY2tTZXQsci5fbW91c2VNb3ZlQ2FsbGJhY2s9ZnVuY3Rpb24obixpKXtyZXR1cm4gci5faGFuZGxlTW91c2VFdmVudChuLGkpfSxyLl90b3VjaFN0YXJ0Q2FsbGJhY2s9ZnVuY3Rpb24obixpLG8pe3JldHVybiByLl9oYW5kbGVUb3VjaEV2ZW50KGlbblswXV0sbyl9LHJ9cmV0dXJuIHQucHJvdG90eXBlLl9hbmNob3I9ZnVuY3Rpb24ocil7ZS5wcm90b3R5cGUuX2FuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fbW91c2VEaXNwYXRjaGVyPVMkdC5Nb3VzZS5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vbk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fdG91Y2hEaXNwYXRjaGVyPVMkdC5Ub3VjaC5nZXREaXNwYXRjaGVyKHRoaXMuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHRoaXMuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKX0sdC5wcm90b3R5cGUuX3VuYW5jaG9yPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3VuYW5jaG9yLmNhbGwodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9mZk1vdXNlTW92ZSh0aGlzLl9tb3VzZU1vdmVDYWxsYmFjayksdGhpcy5fbW91c2VEaXNwYXRjaGVyPW51bGwsdGhpcy5fdG91Y2hEaXNwYXRjaGVyLm9mZlRvdWNoU3RhcnQodGhpcy5fdG91Y2hTdGFydENhbGxiYWNrKSx0aGlzLl90b3VjaERpc3BhdGNoZXI9bnVsbH0sdC5wcm90b3R5cGUuX2hhbmRsZU1vdXNlRXZlbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9tb3VzZURpc3BhdGNoZXIuZXZlbnRJbnNpZGUodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyxuKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocixpKX0sdC5wcm90b3R5cGUuX2hhbmRsZVRvdWNoRXZlbnQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl90b3VjaERpc3BhdGNoZXIuZXZlbnRJbnNpZGUodGhpcy5fY29tcG9uZW50QXR0YWNoZWRUbyxuKTt0aGlzLl9oYW5kbGVQb2ludGVyRXZlbnQocixpKX0sdC5wcm90b3R5cGUuX2hhbmRsZVBvaW50ZXJFdmVudD1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX3RyYW5zbGF0ZVRvQ29tcG9uZW50U3BhY2Uociksbz10aGlzLl9pc0luc2lkZUNvbXBvbmVudChpKTtvJiZuPyh0aGlzLl9vdmVyQ29tcG9uZW50fHx0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhpKSx0aGlzLl9wb2ludGVyTW92ZUNhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpKTp0aGlzLl9vdmVyQ29tcG9uZW50JiZ0aGlzLl9wb2ludGVyRXhpdENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKGkpLHRoaXMuX292ZXJDb21wb25lbnQ9byYmbn0sdC5wcm90b3R5cGUub25Qb2ludGVyRW50ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFbnRlckNhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmUG9pbnRlckVudGVyPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9wb2ludGVyRW50ZXJDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uUG9pbnRlck1vdmU9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJNb3ZlQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyTW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlck1vdmVDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uUG9pbnRlckV4aXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3BvaW50ZXJFeGl0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZQb2ludGVyRXhpdD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fcG9pbnRlckV4aXRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHR9KHRCZS5JbnRlcmFjdGlvbik7VG90LlBvaW50ZXI9ZUJlfSk7dmFyIHM0PUgoWmc9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFpnLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbDQ9KGRlKCksVXQocGUpKTtsNC5fX2V4cG9ydFN0YXIobSR0KCksWmcpO2w0Ll9fZXhwb3J0U3RhcihfJHQoKSxaZyk7bDQuX19leHBvcnRTdGFyKFNvdCgpLFpnKTtsNC5fX2V4cG9ydFN0YXIodyR0KCksWmcpO2w0Ll9fZXhwb3J0U3RhcihNJHQoKSxaZyk7dmFyIHJCZT10NCgpO1pnLnpvb21PdXQ9ckJlLnpvb21PdXR9KTt2YXIgQ290PUgoYzQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGM0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbkJlPShkZSgpLFV0KHBlKSksSEY9RmUoKSxpQmU9a2MoKSxlczsoZnVuY3Rpb24oZSl7ZVtlLlZBTFVFPTBdPSJWQUxVRSIsZVtlLlBJWEVMPTFdPSJQSVhFTCJ9KShlcz1jNC5Qcm9wZXJ0eU1vZGV8fChjNC5Qcm9wZXJ0eU1vZGU9e30pKTt2YXIgb0JlPWZ1bmN0aW9uKGUpe25CZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9ib3hWaXNpYmxlPSExLHIuX2JveEJvdW5kcz17dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6MCx5OjB9fSxyLl94Qm91bmRzTW9kZT1lcy5QSVhFTCxyLl95Qm91bmRzTW9kZT1lcy5QSVhFTCxyLmFkZENsYXNzKCJzZWxlY3Rpb24tYm94LWxheWVyIiksci5fYWRqdXN0Qm91bmRzQ2FsbGJhY2s9ZnVuY3Rpb24oKXtyLnJlbmRlcigpfSxyLl9vdmVyZmxvd0hpZGRlbj0hMCxyLl94RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxyLl95RXh0ZW50PVt2b2lkIDAsdm9pZCAwXSxyfXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9ib3g9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2VsZWN0aW9uLWJveCIsITApLnJlbW92ZSgpLHRoaXMuX2JveEFyZWE9dGhpcy5fYm94LmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInNlbGVjdGlvbi1hcmVhIiwhMCl9LHQucHJvdG90eXBlLl9zaXplRnJvbU9mZmVyPWZ1bmN0aW9uKHIsbil7cmV0dXJue3dpZHRoOnIsaGVpZ2h0Om59fSx0LnByb3RvdHlwZS5ib3VuZHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZ2V0Qm91bmRzKCk6KHRoaXMuX3NldEJvdW5kcyhyKSx0aGlzLl94Qm91bmRzTW9kZT1lcy5QSVhFTCx0aGlzLl95Qm91bmRzTW9kZT1lcy5QSVhFTCx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXt4Ok1hdGgubWluKHIudG9wTGVmdC54LHIuYm90dG9tUmlnaHQueCkseTpNYXRoLm1pbihyLnRvcExlZnQueSxyLmJvdHRvbVJpZ2h0LnkpfSxpPXt4Ok1hdGgubWF4KHIudG9wTGVmdC54LHIuYm90dG9tUmlnaHQueCkseTpNYXRoLm1heChyLnRvcExlZnQueSxyLmJvdHRvbVJpZ2h0LnkpfTt0aGlzLl9ib3hCb3VuZHM9e3RvcExlZnQ6bixib3R0b21SaWdodDppfX0sdC5wcm90b3R5cGUuX2dldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybnt0b3BMZWZ0Ont4OnRoaXMuX3hCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLnRvcExlZnQueDp0aGlzLl94U2NhbGU9PW51bGw/MDpNYXRoLm1pbih0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzBdKSx0aGlzLnhTY2FsZSgpLnNjYWxlKHRoaXMueEV4dGVudCgpWzFdKSkseTp0aGlzLl95Qm91bmRzTW9kZT09PWVzLlBJWEVMP3RoaXMuX2JveEJvdW5kcy50b3BMZWZ0Lnk6dGhpcy5feVNjYWxlPT1udWxsPzA6TWF0aC5taW4odGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfSxib3R0b21SaWdodDp7eDp0aGlzLl94Qm91bmRzTW9kZT09PWVzLlBJWEVMP3RoaXMuX2JveEJvdW5kcy5ib3R0b21SaWdodC54OnRoaXMuX3hTY2FsZT09bnVsbD8wOk1hdGgubWF4KHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMF0pLHRoaXMueFNjYWxlKCkuc2NhbGUodGhpcy54RXh0ZW50KClbMV0pKSx5OnRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuUElYRUw/dGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0Lnk6dGhpcy5feVNjYWxlPT1udWxsPzA6TWF0aC5tYXgodGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVswXSksdGhpcy55U2NhbGUoKS5zY2FsZSh0aGlzLnlFeHRlbnQoKVsxXSkpfX19LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7aWYoZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9ib3hWaXNpYmxlKXt2YXIgcj10aGlzLmJvdW5kcygpLG49ci50b3BMZWZ0LnksaT1yLmJvdHRvbVJpZ2h0Lnksbz1yLnRvcExlZnQueCxhPXIuYm90dG9tUmlnaHQueDtpZighKEhGLk1hdGguaXNWYWxpZE51bWJlcihuKSYmSEYuTWF0aC5pc1ZhbGlkTnVtYmVyKGkpJiZIRi5NYXRoLmlzVmFsaWROdW1iZXIobykmJkhGLk1hdGguaXNWYWxpZE51bWJlcihhKSkpdGhyb3cgbmV3IEVycm9yKCJib3VuZHMgaGF2ZSBub3QgYmVlbiBwcm9wZXJseSBzZXQiKTt0aGlzLl9ib3hBcmVhLmF0dHJzKHt4Om8seTpuLHdpZHRoOmEtbyxoZWlnaHQ6aS1ufSksdGhpcy5jb250ZW50KCkubm9kZSgpLmFwcGVuZENoaWxkKHRoaXMuX2JveC5ub2RlKCkpfWVsc2UgdGhpcy5fYm94LnJlbW92ZSgpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5ib3hWaXNpYmxlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2JveFZpc2libGU6KHRoaXMuX2JveFZpc2libGU9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLnhTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl94U2NhbGU6KHRoaXMuX3hTY2FsZSE9bnVsbCYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5feFNjYWxlPXIsdGhpcy5feEJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5feFNjYWxlLm9uVXBkYXRlKHRoaXMuX2FkanVzdEJvdW5kc0NhbGxiYWNrKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5feVNjYWxlOih0aGlzLl95U2NhbGUhPW51bGwmJnRoaXMuX3lTY2FsZS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMuX3lTY2FsZT1yLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlZBTFVFLHRoaXMuX3lTY2FsZS5vblVwZGF0ZSh0aGlzLl9hZGp1c3RCb3VuZHNDYWxsYmFjayksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUueEV4dGVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9nZXRYRXh0ZW50KCk6KHRoaXMuX3NldFhFeHRlbnQociksdGhpcy5feEJvdW5kc01vZGU9ZXMuVkFMVUUsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuX2dldFhFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feEJvdW5kc01vZGU9PT1lcy5WQUxVRT90aGlzLl94RXh0ZW50OnRoaXMuX3hTY2FsZT09bnVsbD9bdm9pZCAwLHZvaWQgMF06W3RoaXMuX3hTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLnRvcExlZnQueCksdGhpcy5feFNjYWxlLmludmVydCh0aGlzLl9ib3hCb3VuZHMuYm90dG9tUmlnaHQueCldfSx0LnByb3RvdHlwZS5fc2V0WEV4dGVudD1mdW5jdGlvbihyKXt0aGlzLl94RXh0ZW50PXJ9LHQucHJvdG90eXBlLnlFeHRlbnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZ2V0WUV4dGVudCgpOih0aGlzLl9zZXRZRXh0ZW50KHIpLHRoaXMuX3lCb3VuZHNNb2RlPWVzLlZBTFVFLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9nZXRZRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3lCb3VuZHNNb2RlPT09ZXMuVkFMVUU/dGhpcy5feUV4dGVudDp0aGlzLl95U2NhbGU9PW51bGw/W3ZvaWQgMCx2b2lkIDBdOlt0aGlzLl95U2NhbGUuaW52ZXJ0KHRoaXMuX2JveEJvdW5kcy50b3BMZWZ0LnkpLHRoaXMuX3lTY2FsZS5pbnZlcnQodGhpcy5fYm94Qm91bmRzLmJvdHRvbVJpZ2h0LnkpXX0sdC5wcm90b3R5cGUuX3NldFlFeHRlbnQ9ZnVuY3Rpb24ocil7dGhpcy5feUV4dGVudD1yfSx0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3hTY2FsZSE9bnVsbCYmdGhpcy54U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spLHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy55U2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fYWRqdXN0Qm91bmRzQ2FsbGJhY2spfSx0fShpQmUuQ29tcG9uZW50KTtjNC5TZWxlY3Rpb25Cb3hMYXllcj1vQmV9KTt2YXIgVUY9SChQb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFBvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGFCZT0oZGUoKSxVdChwZSkpLHNCZT1zNCgpLEFvdD1GZSgpLGxCZT1ZZygpLFZGPUlvdCgpLGNCZT1Db3QoKSx1QmU9ZnVuY3Rpb24oZSl7YUJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX2RldGVjdGlvblJhZGl1cz0zLHIuX3Jlc2l6YWJsZT0hMSxyLl9tb3ZhYmxlPSExLHIuX2hhc0Nvcm5lcnM9ITAsci5hZGRDbGFzcygiZHJhZy1ib3gtbGF5ZXIiKSxyLl9kcmFnSW50ZXJhY3Rpb249bmV3IHNCZS5EcmFnLHIuX3NldFVwQ2FsbGJhY2tzKCksci5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHIpLHIuX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgQW90LkNhbGxiYWNrU2V0LHIuX2RyYWdDYWxsYmFja3M9bmV3IEFvdC5DYWxsYmFja1NldCxyLl9kcmFnRW5kQ2FsbGJhY2tzPW5ldyBBb3QuQ2FsbGJhY2tTZXQscn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldFVwQ2FsbGJhY2tzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuLGksbyxhLHM9e25ld0JveDowLHJlc2l6ZToxLG1vdmU6Mn0sbD1zLm5ld0JveCxjPWZ1bmN0aW9uKGYpe249ci5fZ2V0UmVzaXppbmdFZGdlcyhmKTt2YXIgcD1yLmJvdW5kcygpLGQ9cC50b3BMZWZ0Lng8PWYueCYmZi54PD1wLmJvdHRvbVJpZ2h0LngmJnAudG9wTGVmdC55PD1mLnkmJmYueTw9cC5ib3R0b21SaWdodC55O3IuYm94VmlzaWJsZSgpJiYobi50b3B8fG4uYm90dG9tfHxuLmxlZnR8fG4ucmlnaHQpP2w9cy5yZXNpemU6ci5ib3hWaXNpYmxlKCkmJnIubW92YWJsZSgpJiZkP2w9cy5tb3ZlOihsPXMubmV3Qm94LHIuX3NldEJvdW5kcyh7dG9wTGVmdDpmLGJvdHRvbVJpZ2h0OmZ9KSxyLl94Qm91bmRzTW9kZT09PVZGLlByb3BlcnR5TW9kZS5WQUxVRSYmci54U2NhbGUoKSE9bnVsbCYmci5fc2V0WEV4dGVudChbci54U2NhbGUoKS5pbnZlcnQoZi54KSxyLnhTY2FsZSgpLmludmVydChmLngpXSksci5feUJvdW5kc01vZGU9PT1WRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueVNjYWxlKCkhPW51bGwmJnIuX3NldFlFeHRlbnQoW3IueVNjYWxlKCkuaW52ZXJ0KGYueSksci55U2NhbGUoKS5pbnZlcnQoZi55KV0pLHIucmVuZGVyKCkpLHIuYm94VmlzaWJsZSghMCkscD1yLmJvdW5kcygpLGk9e3g6cC50b3BMZWZ0LngseTpwLnRvcExlZnQueX0sbz17eDpwLmJvdHRvbVJpZ2h0LngseTpwLmJvdHRvbVJpZ2h0Lnl9LGE9ZixyLl9kcmFnU3RhcnRDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhwKX0sdT1mdW5jdGlvbihmLHApe3N3aXRjaChsKXtjYXNlIHMubmV3Qm94Om8ueD1wLngsby55PXAueTticmVhaztjYXNlIHMucmVzaXplOm4uYm90dG9tP28ueT1wLnk6bi50b3AmJihpLnk9cC55KSxuLnJpZ2h0P28ueD1wLng6bi5sZWZ0JiYoaS54PXAueCk7YnJlYWs7Y2FzZSBzLm1vdmU6dmFyIGQ9cC54LWEueCxnPXAueS1hLnk7aS54Kz1kLGkueSs9ZyxvLngrPWQsby55Kz1nLGE9cDticmVha31yLl9zZXRCb3VuZHMoe3RvcExlZnQ6aSxib3R0b21SaWdodDpvfSksci5feEJvdW5kc01vZGU9PT1WRi5Qcm9wZXJ0eU1vZGUuVkFMVUUmJnIueFNjYWxlKCkhPW51bGwmJnIuX3NldFhFeHRlbnQoW3IueFNjYWxlKCkuaW52ZXJ0KGkueCksci54U2NhbGUoKS5pbnZlcnQoby54KV0pLHIuX3lCb3VuZHNNb2RlPT09VkYuUHJvcGVydHlNb2RlLlZBTFVFJiZyLnlTY2FsZSgpIT1udWxsJiZyLl9zZXRZRXh0ZW50KFtyLnlTY2FsZSgpLmludmVydChpLnkpLHIueVNjYWxlKCkuaW52ZXJ0KG8ueSldKSxyLnJlbmRlcigpLHIuX2RyYWdDYWxsYmFja3MuY2FsbENhbGxiYWNrcyhyLmJvdW5kcygpKX0saD1mdW5jdGlvbihmLHApe2w9PT1zLm5ld0JveCYmZi54PT09cC54JiZmLnk9PT1wLnkmJnIuYm94VmlzaWJsZSghMSksci5fZHJhZ0VuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHIuYm91bmRzKCkpfTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQoYyksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZyh1KSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnRW5kKGgpLHRoaXMuX2Rpc2Nvbm5lY3RJbnRlcmFjdGlvbj1mdW5jdGlvbigpe3IuX2RyYWdJbnRlcmFjdGlvbi5vZmZEcmFnU3RhcnQoYyksci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWcodSksci5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdFbmQoaCksci5fZHJhZ0ludGVyYWN0aW9uLmRldGFjaCgpfX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKTt2YXIgbj1mdW5jdGlvbigpe3JldHVybiByLl9ib3guYXBwZW5kKCJsaW5lIikuc3R5bGVzKHtvcGFjaXR5OjAsc3Ryb2tlOiJwaW5rIiwicG9pbnRlci1ldmVudHMiOiJ2aXNpYmxlU3Ryb2tlIn0pfTtpZih0aGlzLl9kZXRlY3Rpb25FZGdlVD1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLXRiIiwhMCksdGhpcy5fZGV0ZWN0aW9uRWRnZUI9bigpLmNsYXNzZWQoImRyYWctZWRnZS10YiIsITApLHRoaXMuX2RldGVjdGlvbkVkZ2VMPW4oKS5jbGFzc2VkKCJkcmFnLWVkZ2UtbHIiLCEwKSx0aGlzLl9kZXRlY3Rpb25FZGdlUj1uKCkuY2xhc3NlZCgiZHJhZy1lZGdlLWxyIiwhMCksdGhpcy5faGFzQ29ybmVycyl7dmFyIGk9ZnVuY3Rpb24oKXtyZXR1cm4gci5fYm94LmFwcGVuZCgiY2lyY2xlIikuc3R5bGVzKHtvcGFjaXR5OjAsZmlsbDoicGluayIsInBvaW50ZXItZXZlbnRzIjoidmlzaWJsZUZpbGwifSl9O3RoaXMuX2RldGVjdGlvbkNvcm5lclRMPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci10bCIsITApLHRoaXMuX2RldGVjdGlvbkNvcm5lclRSPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci10ciIsITApLHRoaXMuX2RldGVjdGlvbkNvcm5lckJMPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci1ibCIsITApLHRoaXMuX2RldGVjdGlvbkNvcm5lckJSPWkoKS5jbGFzc2VkKCJkcmFnLWNvcm5lci1iciIsITApfX0sdC5wcm90b3R5cGUuX2dldFJlc2l6aW5nRWRnZXM9ZnVuY3Rpb24ocil7dmFyIG49e3RvcDohMSxib3R0b206ITEsbGVmdDohMSxyaWdodDohMX07aWYoIXRoaXMucmVzaXphYmxlKCkpcmV0dXJuIG47dmFyIGk9dGhpcy5ib3VuZHMoKSxvPWkudG9wTGVmdC55LGE9aS5ib3R0b21SaWdodC55LHM9aS50b3BMZWZ0LngsbD1pLmJvdHRvbVJpZ2h0LngsYz10aGlzLl9kZXRlY3Rpb25SYWRpdXM7cmV0dXJuIHMtYzw9ci54JiZyLng8PWwrYyYmKG4udG9wPW8tYzw9ci55JiZyLnk8PW8rYyxuLmJvdHRvbT1hLWM8PXIueSYmci55PD1hK2MpLG8tYzw9ci55JiZyLnk8PWErYyYmKG4ubGVmdD1zLWM8PXIueCYmci54PD1zK2Msbi5yaWdodD1sLWM8PXIueCYmci54PD1sK2MpLG59LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7aWYoZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLmJveFZpc2libGUoKSl7dmFyIHI9dGhpcy5ib3VuZHMoKSxuPXIudG9wTGVmdC55LGk9ci5ib3R0b21SaWdodC55LG89ci50b3BMZWZ0LngsYT1yLmJvdHRvbVJpZ2h0Lng7dGhpcy5fZGV0ZWN0aW9uRWRnZVQuYXR0cnMoe3gxOm8seTE6bix4MjphLHkyOm4sInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9kZXRlY3Rpb25FZGdlQi5hdHRycyh7eDE6byx5MTppLHgyOmEseTI6aSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXMuX2RldGVjdGlvbkVkZ2VMLmF0dHJzKHt4MTpvLHkxOm4seDI6byx5MjppLCJzdHJva2Utd2lkdGgiOnRoaXMuX2RldGVjdGlvblJhZGl1cyoyfSksdGhpcy5fZGV0ZWN0aW9uRWRnZVIuYXR0cnMoe3gxOmEseTE6bix4MjphLHkyOmksInN0cm9rZS13aWR0aCI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzKjJ9KSx0aGlzLl9oYXNDb3JuZXJzJiYodGhpcy5fZGV0ZWN0aW9uQ29ybmVyVEwuYXR0cnMoe2N4Om8sY3k6bixyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pLHRoaXMuX2RldGVjdGlvbkNvcm5lclRSLmF0dHJzKHtjeDphLGN5Om4scjp0aGlzLl9kZXRlY3Rpb25SYWRpdXN9KSx0aGlzLl9kZXRlY3Rpb25Db3JuZXJCTC5hdHRycyh7Y3g6byxjeTppLHI6dGhpcy5fZGV0ZWN0aW9uUmFkaXVzfSksdGhpcy5fZGV0ZWN0aW9uQ29ybmVyQlIuYXR0cnMoe2N4OmEsY3k6aSxyOnRoaXMuX2RldGVjdGlvblJhZGl1c30pKX1yZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuZGV0ZWN0aW9uUmFkaXVzPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cztpZihyPDApdGhyb3cgbmV3IEVycm9yKCJkZXRlY3Rpb24gcmFkaXVzIGNhbm5vdCBiZSBuZWdhdGl2ZS4iKTtyZXR1cm4gdGhpcy5fZGV0ZWN0aW9uUmFkaXVzPXIsdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5yZXNpemFibGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcmVzaXphYmxlOih0aGlzLl9yZXNpemFibGU9cix0aGlzLl9zZXRSZXNpemFibGVDbGFzc2VzKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT8odGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKSx0aGlzLmFkZENsYXNzKCJ5LXJlc2l6YWJsZSIpKToodGhpcy5yZW1vdmVDbGFzcygieC1yZXNpemFibGUiKSx0aGlzLnJlbW92ZUNsYXNzKCJ5LXJlc2l6YWJsZSIpKX0sdC5wcm90b3R5cGUubW92YWJsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tb3ZhYmxlOih0aGlzLl9tb3ZhYmxlPXIsdGhpcy5fc2V0TW92YWJsZUNsYXNzKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXRNb3ZhYmxlQ2xhc3M9ZnVuY3Rpb24oKXt0aGlzLm1vdmFibGUoKSYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygibW92YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoIm1vdmFibGUiKX0sdC5wcm90b3R5cGUub25EcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZ1N0YXJ0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLm9uRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5hZGQociksdGhpc30sdC5wcm90b3R5cGUub2ZmRHJhZz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ0NhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnRW5kPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5kcmFnSW50ZXJhY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ0ludGVyYWN0aW9ufSx0LnByb3RvdHlwZS5lbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKCk6KHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKHIpLHRoaXMuX3NldFJlc2l6YWJsZUNsYXNzZXModGhpcy5yZXNpemFibGUoKSksdGhpcy5fc2V0TW92YWJsZUNsYXNzKCksdGhpcyl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZHJhZ0VuZENhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLl9kcmFnRW5kQ2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2Rpc2Nvbm5lY3RJbnRlcmFjdGlvbigpfSx0LnByb3RvdHlwZS5kZXRhY2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVzZXRTdGF0ZSgpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5kZXRhY2goKSxlLnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5hbmNob3I9ZnVuY3Rpb24ocil7cmV0dXJuIHI9bEJlLmNvZXJjZUV4dGVybmFsRDMociksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpLGUucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3Jlc2V0U3RhdGU9ZnVuY3Rpb24oKXt0aGlzLmJvdW5kcyh7dG9wTGVmdDp7eDowLHk6MH0sYm90dG9tUmlnaHQ6e3g6MCx5OjB9fSl9LHR9KGNCZS5TZWxlY3Rpb25Cb3hMYXllcik7UG90LkRyYWdCb3hMYXllcj11QmV9KTt2YXIga290PUgoTG90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShMb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBoQmU9KGRlKCksVXQocGUpKSxmQmU9RmUoKSxwQmU9a2MoKSxPMTsoZnVuY3Rpb24oZSl7ZVtlLlZBTFVFPTBdPSJWQUxVRSIsZVtlLlBJWEVMPTFdPSJQSVhFTCJ9KShPMXx8KE8xPXt9KSk7dmFyIGRCZT1mdW5jdGlvbihlKXtoQmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7aWYobi5fbW9kZT1PMS5WQUxVRSxyIT09dC5PUklFTlRBVElPTl9WRVJUSUNBTCYmciE9PXQuT1JJRU5UQVRJT05fSE9SSVpPTlRBTCl0aHJvdyBuZXcgRXJyb3IocisiIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBHdWlkZUxpbmVMYXllciIpO3JldHVybiBuLl9vcmllbnRhdGlvbj1yLG4uX292ZXJmbG93SGlkZGVuPSEwLG4uYWRkQ2xhc3MoImd1aWRlLWxpbmUtbGF5ZXIiKSxuLl9pc1ZlcnRpY2FsKCk/bi5hZGRDbGFzcygidmVydGljYWwiKTpuLmFkZENsYXNzKCJob3Jpem9udGFsIiksbi5fc2NhbGVVcGRhdGVDYWxsYmFjaz1mdW5jdGlvbigpe24uX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSxuLnJlbmRlcigpfSxufXJldHVybiB0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9ndWlkZUxpbmU9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiZ3VpZGUtbGluZSIsITApfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3JldHVybnt3aWR0aDpyLGhlaWdodDpufX0sdC5wcm90b3R5cGUuX2lzVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb249PT10Lk9SSUVOVEFUSU9OX1ZFUlRJQ0FMfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSksdGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMuc2NhbGUoKS5yYW5nZShbMCx0aGlzLndpZHRoKCldKTp0aGlzLnNjYWxlKCkucmFuZ2UoW3RoaXMuaGVpZ2h0KCksMF0pKSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLl9ndWlkZUxpbmUuYXR0cnMoe3gxOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLnBpeGVsUG9zaXRpb24oKTowLHkxOnRoaXMuX2lzVmVydGljYWwoKT8wOnRoaXMucGl4ZWxQb3NpdGlvbigpLHgyOnRoaXMuX2lzVmVydGljYWwoKT90aGlzLnBpeGVsUG9zaXRpb24oKTp0aGlzLndpZHRoKCkseTI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMuaGVpZ2h0KCk6dGhpcy5waXhlbFBvc2l0aW9uKCl9KSx0aGlzfSx0LnByb3RvdHlwZS5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZT1mdW5jdGlvbigpe3RoaXMuc2NhbGUoKSE9bnVsbCYmKHRoaXMuX21vZGU9PT1PMS5WQUxVRSYmdGhpcy52YWx1ZSgpIT1udWxsP3RoaXMuX3BpeGVsUG9zaXRpb249dGhpcy5zY2FsZSgpLnNjYWxlKHRoaXMudmFsdWUoKSk6dGhpcy5fbW9kZT09PU8xLlBJWEVMJiZ0aGlzLnBpeGVsUG9zaXRpb24oKSE9bnVsbCYmKHRoaXMuX3ZhbHVlPXRoaXMuc2NhbGUoKS5pbnZlcnQodGhpcy5waXhlbFBvc2l0aW9uKCkpKSl9LHQucHJvdG90eXBlLl9zZXRQaXhlbFBvc2l0aW9uV2l0aG91dENoYW5naW5nTW9kZT1mdW5jdGlvbihyKXt0aGlzLl9waXhlbFBvc2l0aW9uPXIsdGhpcy5zY2FsZSgpIT1udWxsJiYodGhpcy5fdmFsdWU9dGhpcy5zY2FsZSgpLmludmVydCh0aGlzLnBpeGVsUG9zaXRpb24oKSkpLHRoaXMucmVuZGVyKCl9LHQucHJvdG90eXBlLnNjYWxlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3NjYWxlO3ZhciBuPXRoaXMuX3NjYWxlO3JldHVybiBuIT1udWxsJiZuLm9mZlVwZGF0ZSh0aGlzLl9zY2FsZVVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9zY2FsZT1yLHRoaXMuX3NjYWxlLm9uVXBkYXRlKHRoaXMuX3NjYWxlVXBkYXRlQ2FsbGJhY2spLHRoaXMuX3N5bmNQaXhlbFBvc2l0aW9uQW5kVmFsdWUoKSx0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnZhbHVlPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3ZhbHVlOih0aGlzLl92YWx1ZT1yLHRoaXMuX21vZGU9TzEuVkFMVUUsdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnBpeGVsUG9zaXRpb249ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcGl4ZWxQb3NpdGlvbjtpZighZkJlLk1hdGguaXNWYWxpZE51bWJlcihyKSl0aHJvdyBuZXcgRXJyb3IoInBpeGVsUG9zaXRpb24gbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIiKTtyZXR1cm4gdGhpcy5fcGl4ZWxQb3NpdGlvbj1yLHRoaXMuX21vZGU9TzEuUElYRUwsdGhpcy5fc3luY1BpeGVsUG9zaXRpb25BbmRWYWx1ZSgpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLnNjYWxlKCkhPW51bGwmJnRoaXMuc2NhbGUoKS5vZmZVcGRhdGUodGhpcy5fc2NhbGVVcGRhdGVDYWxsYmFjayl9LHQuT1JJRU5UQVRJT05fVkVSVElDQUw9InZlcnRpY2FsIix0Lk9SSUVOVEFUSU9OX0hPUklaT05UQUw9Imhvcml6b250YWwiLHR9KHBCZS5Db21wb25lbnQpO0xvdC5HdWlkZUxpbmVMYXllcj1kQmV9KTt2YXIgRSR0PUgoTm90PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBtQmU9KGRlKCksVXQocGUpKSxnQmU9a290KCksX0JlPXM0KCksUm90PUZlKCkseUJlPWZ1bmN0aW9uKGUpe21CZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO24uX2RldGVjdGlvblJhZGl1cz0zLG4uX2VuYWJsZWQ9ITAsbi5hZGRDbGFzcygiZHJhZy1saW5lLWxheWVyIiksbi5hZGRDbGFzcygiZW5hYmxlZCIpLG4uX2RyYWdJbnRlcmFjdGlvbj1uZXcgX0JlLkRyYWcsbi5fZHJhZ0ludGVyYWN0aW9uLmF0dGFjaFRvKG4pO3ZhciBpPWZ1bmN0aW9uKGMpe3JldHVybiBuLl9pc1ZlcnRpY2FsKCkmJm4ucGl4ZWxQb3NpdGlvbigpLW4uZGV0ZWN0aW9uUmFkaXVzKCk8PWMueCYmYy54PD1uLnBpeGVsUG9zaXRpb24oKStuLmRldGVjdGlvblJhZGl1cygpfHwhbi5faXNWZXJ0aWNhbCgpJiZuLnBpeGVsUG9zaXRpb24oKS1uLmRldGVjdGlvblJhZGl1cygpPD1jLnkmJmMueTw9bi5waXhlbFBvc2l0aW9uKCkrbi5kZXRlY3Rpb25SYWRpdXMoKX0sbz0hMSxhPWZ1bmN0aW9uKGMpe2koYykmJihvPSEwLG4uX2RyYWdTdGFydENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG4pKX07bi5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZ1N0YXJ0KGEpO3ZhciBzPWZ1bmN0aW9uKGMsdSl7byYmKG4uX3NldFBpeGVsUG9zaXRpb25XaXRob3V0Q2hhbmdpbmdNb2RlKG4uX2lzVmVydGljYWwoKT91Lng6dS55KSxuLl9kcmFnQ2FsbGJhY2tzLmNhbGxDYWxsYmFja3MobikpfTtuLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnKHMpO3ZhciBsPWZ1bmN0aW9uKGMsdSl7byYmKG89ITEsbi5fZHJhZ0VuZENhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKG4pKX07cmV0dXJuIG4uX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQobCksbi5fZGlzY29ubmVjdEludGVyYWN0aW9uPWZ1bmN0aW9uKCl7bi5fZHJhZ0ludGVyYWN0aW9uLm9mZkRyYWdTdGFydChhKSxuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZyhzKSxuLl9kcmFnSW50ZXJhY3Rpb24ub2ZmRHJhZ0VuZChsKSxuLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoKCl9LG4uX2RyYWdTdGFydENhbGxiYWNrcz1uZXcgUm90LkNhbGxiYWNrU2V0LG4uX2RyYWdDYWxsYmFja3M9bmV3IFJvdC5DYWxsYmFja1NldCxuLl9kcmFnRW5kQ2FsbGJhY2tzPW5ldyBSb3QuQ2FsbGJhY2tTZXQsbn1yZXR1cm4gdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fZGV0ZWN0aW9uRWRnZT10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImxpbmUiKS5zdHlsZXMoe29wYWNpdHk6MCxzdHJva2U6InBpbmsiLCJwb2ludGVyLWV2ZW50cyI6InZpc2libGVTdHJva2UifSkuY2xhc3NlZCgiZHJhZy1lZGdlIiwhMCl9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyksdGhpcy5fZGV0ZWN0aW9uRWRnZS5hdHRycyh7eDE6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOjAseTE6dGhpcy5faXNWZXJ0aWNhbCgpPzA6dGhpcy5waXhlbFBvc2l0aW9uKCkseDI6dGhpcy5faXNWZXJ0aWNhbCgpP3RoaXMucGl4ZWxQb3NpdGlvbigpOnRoaXMud2lkdGgoKSx5Mjp0aGlzLl9pc1ZlcnRpY2FsKCk/dGhpcy5oZWlnaHQoKTp0aGlzLnBpeGVsUG9zaXRpb24oKSwic3Ryb2tlLXdpZHRoIjp0aGlzLl9kZXRlY3Rpb25SYWRpdXMqMn0pLHRoaXN9LHQucHJvdG90eXBlLmRldGVjdGlvblJhZGl1cz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9kZXRlY3Rpb25SYWRpdXM7aWYocjwwKXRocm93IG5ldyBFcnJvcigiZGV0ZWN0aW9uIHJhZGl1cyBjYW5ub3QgYmUgbmVnYXRpdmUuIik7cmV0dXJuIHRoaXMuX2RldGVjdGlvblJhZGl1cz1yLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuZW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9lbmFibGVkOih0aGlzLl9lbmFibGVkPXIscj90aGlzLmFkZENsYXNzKCJlbmFibGVkIik6dGhpcy5yZW1vdmVDbGFzcygiZW5hYmxlZCIpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5lbmFibGVkKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5vbkRyYWdTdGFydD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnU3RhcnQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdTdGFydENhbGxiYWNrcy5kZWxldGUociksdGhpc30sdC5wcm90b3R5cGUub25EcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmFkZChyKSx0aGlzfSx0LnByb3RvdHlwZS5vZmZEcmFnPWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9kcmFnQ2FsbGJhY2tzLmRlbGV0ZShyKSx0aGlzfSx0LnByb3RvdHlwZS5vbkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuYWRkKHIpLHRoaXN9LHQucHJvdG90eXBlLm9mZkRyYWdFbmQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKHIpLHRoaXN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9kcmFnU3RhcnRDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ1N0YXJ0Q2FsbGJhY2tzLmRlbGV0ZShuKX0pLHRoaXMuX2RyYWdDYWxsYmFja3MuZm9yRWFjaChmdW5jdGlvbihuKXtyZXR1cm4gci5fZHJhZ0NhbGxiYWNrcy5kZWxldGUobil9KSx0aGlzLl9kcmFnRW5kQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2RyYWdFbmRDYWxsYmFja3MuZGVsZXRlKG4pfSksdGhpcy5fZGlzY29ubmVjdEludGVyYWN0aW9uKCl9LHR9KGdCZS5HdWlkZUxpbmVMYXllcik7Tm90LkRyYWdMaW5lTGF5ZXI9eUJlfSk7dmFyIFQkdD1IKERvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRG90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdkJlPShkZSgpLFV0KHBlKSkseEJlPWtjKCk7ZnVuY3Rpb24gcUYoZSx0LHIpe3ZhciBuPXt9O2lmKHIhPT12b2lkIDApZm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaS0xXSxhPXJbaV07blthXT1vfXJldHVybiBmdW5jdGlvbihzKXt2YXIgbD1lLnNjYWxlKHMpO2lmKCF0KXJldHVybiBsO3ZhciBjLHU9bltzXT09PXZvaWQgMD92b2lkIDA6ZS5zY2FsZShuW3NdKTtyZXR1cm4gdSE9PXZvaWQgMCYmKGM9dSsobC11KS8yKSxjfX12YXIgYkJlPWZ1bmN0aW9uKGUpe3ZCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIsbil7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKCJncmlkbGluZXMiKSxpLl94U2NhbGU9cixpLl95U2NhbGU9bixpLl9yZW5kZXJDYWxsYmFjaz1mdW5jdGlvbihvKXtyZXR1cm4gaS5yZW5kZXIoKX0saS5feFNjYWxlJiZpLl94U2NhbGUub25VcGRhdGUoaS5fcmVuZGVyQ2FsbGJhY2spLGkuX3lTY2FsZSYmaS5feVNjYWxlLm9uVXBkYXRlKGkuX3JlbmRlckNhbGxiYWNrKSxpfXJldHVybiB0LnByb3RvdHlwZS5iZXR3ZWVuWD1mdW5jdGlvbihyKXtyZXR1cm4gcj09PXZvaWQgMD90aGlzLl9iZXR3ZWVuWDoociE9PXRoaXMuX2JldHdlZW5YJiYodGhpcy5fYmV0d2Vlblg9cix0aGlzLnJlbmRlcigpKSx0aGlzKX0sdC5wcm90b3R5cGUuYmV0d2Vlblk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PT12b2lkIDA/dGhpcy5fYmV0d2Vlblk6KHIhPT10aGlzLl9iZXR3ZWVuWSYmKHRoaXMuX2JldHdlZW5ZPXIsdGhpcy5yZW5kZXIoKSksdGhpcyl9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpLHRoaXMuX3hTY2FsZSYmdGhpcy5feFNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksdGhpcy5feVNjYWxlJiZ0aGlzLl95U2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlbmRlckNhbGxiYWNrKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl94TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieC1ncmlkbGluZXMiLCEwKSx0aGlzLl95TGluZXNDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgieS1ncmlkbGluZXMiLCEwKX0sdC5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl9yZWRyYXdYTGluZXMoKSx0aGlzLl9yZWRyYXdZTGluZXMoKSx0aGlzfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3hTY2FsZSE9bnVsbCYmdGhpcy5feFNjYWxlLnJhbmdlKFswLHRoaXMud2lkdGgoKV0pLHRoaXMuX3lTY2FsZSE9bnVsbCYmdGhpcy5feVNjYWxlLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSx0aGlzfSx0LnByb3RvdHlwZS5fcmVkcmF3WExpbmVzPWZ1bmN0aW9uKCl7aWYodGhpcy5feFNjYWxlKXt2YXIgcj10aGlzLmJldHdlZW5YKCksbj10aGlzLl94U2NhbGUudGlja3MoKS5zbGljZShyPzE6MCksaT10aGlzLl94TGluZXNDb250YWluZXIuc2VsZWN0QWxsKCJsaW5lIikuZGF0YShuKSxvPWkuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5tZXJnZShpKTtvLmF0dHIoIngxIixxRih0aGlzLl94U2NhbGUscix0aGlzLl94U2NhbGUudGlja3MoKSkpLmF0dHIoInkxIiwwKS5hdHRyKCJ4MiIscUYodGhpcy5feFNjYWxlLHIsdGhpcy5feFNjYWxlLnRpY2tzKCkpKS5hdHRyKCJ5MiIsdGhpcy5oZWlnaHQoKSkuY2xhc3NlZCgiYmV0d2VlbmxpbmUiLHIpLmNsYXNzZWQoInplcm9saW5lIixmdW5jdGlvbihhKXtyZXR1cm4gYT09PTB9KSxpLmV4aXQoKS5yZW1vdmUoKX19LHQucHJvdG90eXBlLl9yZWRyYXdZTGluZXM9ZnVuY3Rpb24oKXtpZih0aGlzLl95U2NhbGUpe3ZhciByPXRoaXMuYmV0d2VlblkoKSxuPXRoaXMuX3lTY2FsZS50aWNrcygpLnNsaWNlKHI/MTowKSxpPXRoaXMuX3lMaW5lc0NvbnRhaW5lci5zZWxlY3RBbGwoImxpbmUiKS5kYXRhKG4pLG89aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLm1lcmdlKGkpO28uYXR0cigieDEiLDApLmF0dHIoInkxIixxRih0aGlzLl95U2NhbGUscix0aGlzLl95U2NhbGUudGlja3MoKSkpLmF0dHIoIngyIix0aGlzLndpZHRoKCkpLmF0dHIoInkyIixxRih0aGlzLl95U2NhbGUscix0aGlzLl95U2NhbGUudGlja3MoKSkpLmNsYXNzZWQoImJldHdlZW5saW5lIixyKS5jbGFzc2VkKCJ6ZXJvbGluZSIsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT0wfSksaS5leGl0KCkucmVtb3ZlKCl9fSx0fSh4QmUuQ29tcG9uZW50KTtEb3QuR3JpZGxpbmVzPWJCZX0pO3ZhciBHRj1IKE9vdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoT290LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgd0JlPShkZSgpLFV0KHBlKSksU0JlPVlnKCksTUJlPWtjKCksRUJlPWZ1bmN0aW9uKGUpe3dCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9kZXRhY2hDYWxsYmFjaz1mdW5jdGlvbihuKXtyZXR1cm4gci5yZW1vdmUobil9LHJ9cmV0dXJuIHQucHJvdG90eXBlLmFuY2hvcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiByPVNCZS5jb2VyY2VFeHRlcm5hbEQzKHIpLGUucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gaS5hbmNob3Iobi5lbGVtZW50KCkpfSksdGhpc30sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZvckVhY2goZnVuY3Rpb24ocil7cmV0dXJuIHIucmVuZGVyKCl9KSx0aGlzfSx0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJoYXMoKSBpcyBub3QgaW1wbGVtZW50ZWQgb24gQ29tcG9uZW50Q29udGFpbmVyIil9LHQucHJvdG90eXBlLl9hZG9wdEFuZEFuY2hvcj1mdW5jdGlvbihyKXtyLnBhcmVudCh0aGlzKSxyLm9uRGV0YWNoKHRoaXMuX2RldGFjaENhbGxiYWNrKSx0aGlzLl9pc0FuY2hvcmVkJiZyLmFuY2hvcih0aGlzLmVsZW1lbnQoKSl9LHQucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5oYXMocikmJihyLm9mZkRldGFjaCh0aGlzLl9kZXRhY2hDYWxsYmFjayksdGhpcy5fcmVtb3ZlKHIpLHIuZGV0YWNoKCksdGhpcy5yZWRyYXcoKSksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbihyKXtyZXR1cm4hMX0sdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7dGhyb3cgbmV3IEVycm9yKCJfZm9yRWFjaCgpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBDb21wb25lbnRDb250YWluZXIiKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiByLmRlc3Ryb3koKX0pfSx0LnByb3RvdHlwZS5pbnZhbGlkYXRlQ2FjaGU9ZnVuY3Rpb24oKXt0aGlzLl9mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiByLmludmFsaWRhdGVDYWNoZSgpfSl9LHR9KE1CZS5Db21wb25lbnQpO09vdC5Db21wb25lbnRDb250YWluZXI9RUJlfSk7dmFyIEZvdD1IKHpvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoem90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVEJlPShkZSgpLFV0KHBlKSksQyR0PUZlKCksQ0JlPUdGKCksQUJlPWZ1bmN0aW9uKGUpe1RCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPVtdKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX2NvbXBvbmVudHM9W10sbi5hZGRDbGFzcygiY29tcG9uZW50LWdyb3VwIiksci5mb3JFYWNoKGZ1bmN0aW9uKGkpe3JldHVybiBuLmFwcGVuZChpKX0pLG59cmV0dXJuIHQucHJvdG90eXBlLl9mb3JFYWNoPWZ1bmN0aW9uKHIpe3RoaXMuY29tcG9uZW50cygpLmZvckVhY2gocil9LHQucHJvdG90eXBlLmhhcz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5fY29tcG9uZW50cy5pbmRleE9mKHIpPj0wfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMuX2NvbXBvbmVudHMubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBvLnJlcXVlc3RlZFNwYWNlKHIsbil9KTtyZXR1cm57bWluV2lkdGg6QyR0Lk1hdGgubWF4KGksZnVuY3Rpb24obyl7cmV0dXJuIG8ubWluV2lkdGh9LDApLG1pbkhlaWdodDpDJHQuTWF0aC5tYXgoaSxmdW5jdGlvbihvKXtyZXR1cm4gby5taW5IZWlnaHR9LDApfX0sdC5wcm90b3R5cGUuY29tcHV0ZUxheW91dD1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcztyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX2ZvckVhY2goZnVuY3Rpb24oYSl7YS5jb21wdXRlTGF5b3V0KHt4OjAseTowfSxvLndpZHRoKCksby5oZWlnaHQoKSl9KSx0aGlzfSx0LnByb3RvdHlwZS5fc2l6ZUZyb21PZmZlcj1mdW5jdGlvbihyLG4pe3JldHVybnt3aWR0aDpyLGhlaWdodDpufX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiByLmZpeGVkV2lkdGgoKX0pfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLmV2ZXJ5KGZ1bmN0aW9uKHIpe3JldHVybiByLmZpeGVkSGVpZ2h0KCl9KX0sdC5wcm90b3R5cGUuY29tcG9uZW50cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wb25lbnRzLnNsaWNlKCl9LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbCYmIXRoaXMuaGFzKHIpJiYoci5kZXRhY2goKSx0aGlzLl9jb21wb25lbnRzLnB1c2gociksdGhpcy5fYWRvcHRBbmRBbmNob3IociksdGhpcy5yZWRyYXcoKSksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9jb21wb25lbnRzLmluZGV4T2Yocik7cmV0dXJuIG4+PTA/KHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKG4sMSksITApOiExfSx0fShDQmUuQ29tcG9uZW50Q29udGFpbmVyKTt6b3QuR3JvdXA9QUJlfSk7dmFyIEEkdD1IKEJvdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQm90LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgUEJlPShkZSgpLFV0KHBlKSksV0Y9X2woKSxJQmU9WEEoKSxMQmU9QnUoKSxrQmU9RmUoKSxSQmU9a2MoKSxOQmU9ZnVuY3Rpb24oZSl7UEJlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocil7dmFyIG49ZS5jYWxsKHRoaXMpfHx0aGlzO2lmKG4uX3RleHRQYWRkaW5nPTUscj09bnVsbCl0aHJvdyBuZXcgRXJyb3IoIkludGVycG9sYXRlZENvbG9yTGVnZW5kIHJlcXVpcmVzIGEgaW50ZXJwb2xhdGVkQ29sb3JTY2FsZSIpO3JldHVybiBuLl9zY2FsZT1yLG4uX3JlZHJhd0NhbGxiYWNrPWZ1bmN0aW9uKGkpe3JldHVybiBuLnJlZHJhdygpfSxuLl9zY2FsZS5vblVwZGF0ZShuLl9yZWRyYXdDYWxsYmFjayksbi5fZm9ybWF0dGVyPUxCZS5nZW5lcmFsKCksbi5fb3JpZW50YXRpb249Imhvcml6b250YWwiLG4uX2V4cGFuZHM9ITEsbi5hZGRDbGFzcygibGVnZW5kIiksbi5hZGRDbGFzcygiaW50ZXJwb2xhdGVkLWNvbG9yLWxlZ2VuZCIpLG59cmV0dXJuIHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5fc2NhbGUub2ZmVXBkYXRlKHRoaXMuX3JlZHJhd0NhbGxiYWNrKX0sdC5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT09dm9pZCAwP3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXhwYW5kcz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9leHBhbmRzOih0aGlzLl9leHBhbmRzPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5fZW5zdXJlT3JpZW50YXRpb249ZnVuY3Rpb24ocil7aWYocj1yLnRvTG93ZXJDYXNlKCkscj09PSJob3Jpem9udGFsInx8cj09PSJsZWZ0Inx8cj09PSJyaWdodCIpcmV0dXJuIHI7dGhyb3cgbmV3IEVycm9yKCciJytyKyciIGlzIG5vdCBhIHZhbGlkIG9yaWVudGF0aW9uIGZvciBJbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZCcpfSx0LnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9vcmllbnRhdGlvbjoodGhpcy5fb3JpZW50YXRpb249dC5fZW5zdXJlT3JpZW50YXRpb24ociksdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuZml4ZWRXaWR0aD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8dGhpcy5faXNWZXJ0aWNhbCgpfSx0LnByb3RvdHlwZS5maXhlZEhlaWdodD1mdW5jdGlvbigpe3JldHVybiF0aGlzLmV4cGFuZHMoKXx8IXRoaXMuX2lzVmVydGljYWwoKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlVGlja3M9ZnVuY3Rpb24ocil7cj09PXZvaWQgMCYmKHI9dC5fREVGQVVMVF9OVU1fU1dBVENIRVMpO3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpO2lmKHI9PT0xKXJldHVybltuWzBdXTtmb3IodmFyIGk9KG5bMV0tblswXSkvKHItMSksbz1bXSxhPTA7YTxyO2ErKylvLnB1c2goblswXStpKmEpO3JldHVybiBvfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9zd2F0Y2hDb250YWluZXI9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic3dhdGNoLWNvbnRhaW5lciIsITApLHRoaXMuX3N3YXRjaEJvdW5kaW5nQm94PXRoaXMuY29udGVudCgpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoInN3YXRjaC1ib3VuZGluZy1ib3giLCEwKSx0aGlzLl9sb3dlckxhYmVsPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5MRUdFTkRfTEFCRUxfQ0xBU1MsITApLHRoaXMuX3VwcGVyTGFiZWw9dGhpcy5jb250ZW50KCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9MQUJFTF9DTEFTUywhMCk7dmFyIHI9bmV3IFdGLlN2Z0NvbnRleHQodGhpcy5jb250ZW50KCkubm9kZSgpKTt0aGlzLl9tZWFzdXJlcj1uZXcgV0YuTWVhc3VyZXIociksdGhpcy5fd3JhcHBlcj1uZXcgV0YuV3JhcHBlcix0aGlzLl93cml0ZXI9bmV3IFdGLldyaXRlcih0aGlzLl9tZWFzdXJlcixyLHRoaXMuX3dyYXBwZXIpfSx0LnByb3RvdHlwZS5yZXF1ZXN0ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGE9byxzPXRoaXMuX3NjYWxlLmRvbWFpbigpLGw9cy5tYXAoZnVuY3Rpb24ocCl7cmV0dXJuIGkuX21lYXN1cmVyLm1lYXN1cmUoaS5fZm9ybWF0dGVyKHApKS53aWR0aH0pLGMsdSxoPXQuX0RFRkFVTFRfTlVNX1NXQVRDSEVTO2lmKHRoaXMuX2lzVmVydGljYWwoKSl7dmFyIGY9a0JlLk1hdGgubWF4KGwsMCk7dT1hK28rdGhpcy5fdGV4dFBhZGRpbmcrZit0aGlzLl90ZXh0UGFkZGluZyxjPWgqb31lbHNlIGM9YStvK2EsdT10aGlzLl90ZXh0UGFkZGluZytsWzBdK2gqbytsWzFdK3RoaXMuX3RleHRQYWRkaW5nO3JldHVybnttaW5XaWR0aDp1LG1pbkhlaWdodDpjfX0sdC5wcm90b3R5cGUuX2lzVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb3JpZW50YXRpb24hPT0iaG9yaXpvbnRhbCJ9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpO3ZhciBuPXRoaXMuX3NjYWxlLmRvbWFpbigpLGk9dGhpcy5fZm9ybWF0dGVyKG5bMF0pLG89dGhpcy5fbWVhc3VyZXIubWVhc3VyZShpKS53aWR0aCxhPXRoaXMuX2Zvcm1hdHRlcihuWzFdKSxzPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoYSkud2lkdGgsbD10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGM9dGhpcy5fdGV4dFBhZGRpbmcsdT17eDowLHk6MH0saD17eDowLHk6MH0sZj17eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246MH0scD17eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIix0ZXh0Um90YXRpb246MH0sZCxnLF8seSx4PXt4OjAseTowLHdpZHRoOjAsaGVpZ2h0OjB9LGIsUztpZih0aGlzLl9pc1ZlcnRpY2FsKCkpe1M9TWF0aC5mbG9vcih0aGlzLmhlaWdodCgpKTt2YXIgQz1NYXRoLm1heChvLHMpO2I9KHRoaXMud2lkdGgoKS1DLTIqdGhpcy5fdGV4dFBhZGRpbmcpLzIsZD1NYXRoLm1heCh0aGlzLndpZHRoKCktYi0yKmMtQywwKSxnPTEseT1mdW5jdGlvbihMLFIpe3JldHVybiByLmhlaWdodCgpLShSKzEpfSxwLnlBbGlnbj0idG9wIix1Lnk9MCxmLnlBbGlnbj0iYm90dG9tIixoLnk9MCx0aGlzLl9vcmllbnRhdGlvbj09PSJsZWZ0Ij8oXz1mdW5jdGlvbihMLFIpe3JldHVybiBjK0MrY30scC54QWxpZ249InJpZ2h0Iix1Lng9LShiK2QrYyksZi54QWxpZ249InJpZ2h0IixoLng9LShiK2QrYykpOihfPWZ1bmN0aW9uKEwsUil7cmV0dXJuIGJ9LHAueEFsaWduPSJsZWZ0Iix1Lng9YitkK2MsZi54QWxpZ249ImxlZnQiLGgueD1iK2QrYykseC53aWR0aD1kLHguaGVpZ2h0PVMqZ31lbHNlIGI9TWF0aC5tYXgoYywodGhpcy5oZWlnaHQoKS1sKS8yKSxTPU1hdGgubWF4KE1hdGguZmxvb3IodGhpcy53aWR0aCgpLWMqNC1vLXMpLDApLGQ9MSxnPU1hdGgubWF4KHRoaXMuaGVpZ2h0KCktMipiLDApLF89ZnVuY3Rpb24oTCxSKXtyZXR1cm4gTWF0aC5mbG9vcihvKzIqYykrUn0seT1mdW5jdGlvbihMLFIpe3JldHVybiBifSxwLnhBbGlnbj0icmlnaHQiLHUueD0tYyxmLnhBbGlnbj0ibGVmdCIsaC54PWMseC55PWIseC53aWR0aD1TKmQseC5oZWlnaHQ9Zzt4Lng9XyhudWxsLDApLHRoaXMuX3VwcGVyTGFiZWwudGV4dCgiIiksdGhpcy5fd3JpdGVyLndyaXRlKGEsdGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCkscCx0aGlzLl91cHBlckxhYmVsLm5vZGUoKSk7dmFyIFA9InRyYW5zbGF0ZSgiK3UueCsiLCAiK3UueSsiKSI7dGhpcy5fdXBwZXJMYWJlbC5hdHRyKCJ0cmFuc2Zvcm0iLFApLHRoaXMuX2xvd2VyTGFiZWwudGV4dCgiIiksdGhpcy5fd3JpdGVyLndyaXRlKGksdGhpcy53aWR0aCgpLHRoaXMuaGVpZ2h0KCksZix0aGlzLl9sb3dlckxhYmVsLm5vZGUoKSk7dmFyIGs9InRyYW5zbGF0ZSgiK2gueCsiLCAiK2gueSsiKSI7dGhpcy5fbG93ZXJMYWJlbC5hdHRyKCJ0cmFuc2Zvcm0iLGspLHRoaXMuX3N3YXRjaEJvdW5kaW5nQm94LmF0dHJzKHgpO3ZhciBPPXRoaXMuX2dlbmVyYXRlVGlja3MoUyksRD10aGlzLl9zd2F0Y2hDb250YWluZXIuc2VsZWN0QWxsKCJyZWN0LnN3YXRjaCIpLmRhdGEoTyksQj1ELmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic3dhdGNoIiwhMCksST1ELm1lcmdlKEIpO3JldHVybiBELmV4aXQoKS5yZW1vdmUoKSxJLmF0dHJzKHtmaWxsOmZ1bmN0aW9uKEwsUil7cmV0dXJuIHIuX3NjYWxlLnNjYWxlKEwpfSx3aWR0aDpkLGhlaWdodDpnLHg6Xyx5LCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLElCZS5BRERfVElUTEVfRUxFTUVOVFMmJkIuYXBwZW5kKCJ0aXRsZSIpLnRleHQoZnVuY3Rpb24oTCl7cmV0dXJuIHIuX2Zvcm1hdHRlcihMKX0pLHRoaXN9LHQuX0RFRkFVTFRfTlVNX1NXQVRDSEVTPTExLHQuTEVHRU5EX0xBQkVMX0NMQVNTPSJsZWdlbmQtbGFiZWwiLHR9KFJCZS5Db21wb25lbnQpO0JvdC5JbnRlcnBvbGF0ZWRDb2xvckxlZ2VuZD1OQmV9KTt2YXIgVW90PUgodTQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHU0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSG90PShkZSgpLFV0KHBlKSksWUY9X2woKSxEQmU9a2MoKSxWb3Q9ZnVuY3Rpb24oZSl7SG90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXtyPT09dm9pZCAwJiYocj0iIiksbj09PXZvaWQgMCYmKG49MCk7dmFyIGk9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKCJsYWJlbCIpLGkudGV4dChyKSxpLmFuZ2xlKG4pLGkueEFsaWdubWVudCgiY2VudGVyIikueUFsaWdubWVudCgiY2VudGVyIiksaS5fcGFkZGluZz0wLGl9cmV0dXJuIHQucHJvdG90eXBlLnJlcXVlc3RlZFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9dGhpcy5fbWVhc3VyZXIubWVhc3VyZSh0aGlzLl90ZXh0KSxvPSh0aGlzLmFuZ2xlKCk9PT0wP2kud2lkdGg6aS5oZWlnaHQpKzIqdGhpcy5wYWRkaW5nKCksYT0odGhpcy5hbmdsZSgpPT09MD9pLmhlaWdodDppLndpZHRoKSsyKnRoaXMucGFkZGluZygpO3JldHVybnttaW5XaWR0aDpvLG1pbkhlaWdodDphfX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fdGV4dENvbnRhaW5lcj10aGlzLmNvbnRlbnQoKS5hcHBlbmQoImciKTt2YXIgcj1uZXcgWUYuU3ZnQ29udGV4dCh0aGlzLl90ZXh0Q29udGFpbmVyLm5vZGUoKSk7dGhpcy5fbWVhc3VyZXI9bmV3IFlGLkNhY2hlTWVhc3VyZXIociksdGhpcy5fd3JhcHBlcj1uZXcgWUYuV3JhcHBlcix0aGlzLl93cml0ZXI9bmV3IFlGLldyaXRlcih0aGlzLl9tZWFzdXJlcixyLHRoaXMuX3dyYXBwZXIpLHRoaXMudGV4dCh0aGlzLl90ZXh0KX0sdC5wcm90b3R5cGUudGV4dD1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl90ZXh0O2lmKHR5cGVvZiByIT0ic3RyaW5nIil0aHJvdyBuZXcgRXJyb3IoIkxhYmVsLnRleHQoKSBvbmx5IHRha2VzIHN0cmluZ3MgYXMgaW5wdXQiKTtyZXR1cm4gdGhpcy5fdGV4dD1yLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuYW5nbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYW5nbGU7aWYociU9MzYwLHI+MTgwP3ItPTM2MDpyPC0xODAmJihyKz0zNjApLHI9PT0tOTB8fHI9PT0wfHxyPT09OTApdGhpcy5fYW5nbGU9cjtlbHNlIHRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgYW5nbGUgZm9yIExhYmVsIik7cmV0dXJuIHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUucGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wYWRkaW5nO2lmKHI9K3IscjwwKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgcGFkZGluZyB2YWx1ZS4gQ2Fubm90IGJlIGxlc3MgdGhhbiAwLiIpO3JldHVybiB0aGlzLl9wYWRkaW5nPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuITB9LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbCh0aGlzKSx0aGlzLl90ZXh0Q29udGFpbmVyLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpO3ZhciByPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUodGhpcy5fdGV4dCksbj1NYXRoLm1heChNYXRoLm1pbigodGhpcy5oZWlnaHQoKS1yLmhlaWdodCkvMix0aGlzLnBhZGRpbmcoKSksMCksaT1NYXRoLm1heChNYXRoLm1pbigodGhpcy53aWR0aCgpLXIud2lkdGgpLzIsdGhpcy5wYWRkaW5nKCkpLDApO3RoaXMuX3RleHRDb250YWluZXIuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIraSsiLCIrbisiKSIpO3ZhciBvPXRoaXMud2lkdGgoKS0yKmksYT10aGlzLmhlaWdodCgpLTIqbixzPXt4QWxpZ246dGhpcy54QWxpZ25tZW50KCkseUFsaWduOnRoaXMueUFsaWdubWVudCgpLHRleHRSb3RhdGlvbjp0aGlzLmFuZ2xlKCl9O3JldHVybiB0aGlzLl93cml0ZXIud3JpdGUodGhpcy5fdGV4dCxvLGEscyksdGhpc30sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdH0oREJlLkNvbXBvbmVudCk7dTQuTGFiZWw9Vm90O3ZhciBPQmU9ZnVuY3Rpb24oZSl7SG90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKHQuVElUTEVfTEFCRUxfQ0xBU1MpLGl9cmV0dXJuIHQuVElUTEVfTEFCRUxfQ0xBU1M9InRpdGxlLWxhYmVsIix0fShWb3QpO3U0LlRpdGxlTGFiZWw9T0JlO3ZhciB6QmU9ZnVuY3Rpb24oZSl7SG90Ll9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyLG4pfHx0aGlzO3JldHVybiBpLmFkZENsYXNzKHQuQVhJU19MQUJFTF9DTEFTUyksaX1yZXR1cm4gdC5BWElTX0xBQkVMX0NMQVNTPSJheGlzLWxhYmVsIix0fShWb3QpO3U0LkF4aXNMYWJlbD16QmV9KTt2YXIgakY9SChiZD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoYmQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBScz0oRXIoKSxVdChNcikpO2Z1bmN0aW9uIEZCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xDaXJjbGUpLnNpemUoTWF0aC5QSSpNYXRoLnBvdyhlLzIsMikpfX1iZC5jaXJjbGU9RkJlO2Z1bmN0aW9uIEJCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xTcXVhcmUpLnNpemUoTWF0aC5wb3coZSwyKSl9fWJkLnNxdWFyZT1CQmU7ZnVuY3Rpb24gSEJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbENyb3NzKS5zaXplKDUvOSpNYXRoLnBvdyhlLDIpKX19YmQuY3Jvc3M9SEJlO2Z1bmN0aW9uIFZCZSgpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gUnMuc3ltYm9sKCkudHlwZShScy5zeW1ib2xEaWFtb25kKS5zaXplKE1hdGgudGFuKE1hdGguUEkvNikqTWF0aC5wb3coZSwyKS8yKX19YmQuZGlhbW9uZD1WQmU7ZnVuY3Rpb24gVUJlKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBScy5zeW1ib2woKS50eXBlKFJzLnN5bWJvbFRyaWFuZ2xlKS5zaXplKE1hdGguc3FydCgzKSpNYXRoLnBvdyhlLzIsMikpfX1iZC50cmlhbmdsZT1VQmU7dmFyIHFCZT0uODkwODEzMDkxNTI5Mjg1MjtmdW5jdGlvbiBHQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sU3Rhcikuc2l6ZShxQmUqTWF0aC5wb3coZS8yLDIpKX19YmQuc3Rhcj1HQmU7dmFyIFdCZT0oMS9NYXRoLnNxcnQoMTIpLzIrMSkqMztmdW5jdGlvbiBZQmUoKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFJzLnN5bWJvbCgpLnR5cGUoUnMuc3ltYm9sV3llKS5zaXplKFdCZSpNYXRoLnBvdyhlLzIuNCwyKSl9fWJkLnd5ZT1ZQmV9KTt2YXIgUCR0PUgoR290PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHb3QsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBqQmU9KGRlKCksVXQocGUpKSx6MT0oRXIoKSxVdChNcikpLFhGPV9sKCksWEJlPVhBKCksJEJlPUJ1KCksS0JlPWpGKCksSmc9RmUoKSxaQmU9a2MoKSxxb3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXt0PT09dm9pZCAwJiYodD1bXSkscj09PXZvaWQgMCYmKHI9MCksbj09PXZvaWQgMCYmKG49MS8wKSx0aGlzLmNvbHVtbnM9dCx0aGlzLmJvdHRvbVBhZGRpbmc9cix0aGlzLm1heFdpZHRoPW59cmV0dXJuIGUucHJvdG90eXBlLmFkZENvbHVtbj1mdW5jdGlvbih0KXt2YXIgcj10LndpZHRoLG49dGhpcy5nZXRXaWR0aEF2YWlsYWJsZSgpO3Qud2lkdGg9TWF0aC5taW4obixyKSx0aGlzLmNvbHVtbnMucHVzaCh0KX0sZS5wcm90b3R5cGUuZ2V0Qm91bmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10aGlzLmNvbHVtbnNbdF0sbj0wLGk9MDtpPHQ7aSsrKW4rPXRoaXMuY29sdW1uc1tpXS53aWR0aDtyZXR1cm57dG9wTGVmdDp7eDpuLHk6MH0sYm90dG9tUmlnaHQ6e3g6bityLndpZHRoLHk6ci5oZWlnaHR9fX0sZS5wcm90b3R5cGUuZ2V0SGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIEpnLk1hdGgubWF4KHRoaXMuY29sdW1ucy5tYXAoZnVuY3Rpb24odCl7dmFyIHI9dC5oZWlnaHQ7cmV0dXJuIHJ9KSwwKSt0aGlzLmJvdHRvbVBhZGRpbmd9LGUucHJvdG90eXBlLmdldFdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWluKHRoaXMuY29sdW1ucy5yZWR1Y2UoZnVuY3Rpb24odCxyKXt2YXIgbj1yLndpZHRoO3JldHVybiB0K259LDApLHRoaXMubWF4V2lkdGgpfSxlLnByb3RvdHlwZS5nZXRXaWR0aEF2YWlsYWJsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0V2lkdGgoKTtyZXR1cm4gTWF0aC5tYXgodGhpcy5tYXhXaWR0aC10LDApfSxlfSgpLEpCZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7dD09PXZvaWQgMCYmKHQ9MS8wKSxyPT09dm9pZCAwJiYocj0xLzApLG49PT12b2lkIDAmJihuPTApLGk9PT12b2lkIDAmJihpPVtdKSx0aGlzLm1heFdpZHRoPXQsdGhpcy5tYXhIZWlnaHQ9cix0aGlzLnBhZGRpbmc9bix0aGlzLnJvd3M9aX1yZXR1cm4gZS5wcm90b3R5cGUuYWRkUm93PWZ1bmN0aW9uKHQpe3QubWF4V2lkdGg9dGhpcy5tYXhXaWR0aC10aGlzLnBhZGRpbmcqMix0aGlzLnJvd3MucHVzaCh0KX0sZS5wcm90b3R5cGUuZ2V0Q29sdW1uQm91bmRzPWZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5nZXRSb3dCb3VuZHModCksaT10aGlzLnJvd3NbdF0uZ2V0Qm91bmRzKHIpO3JldHVybiBpLnRvcExlZnQueCs9bi50b3BMZWZ0LngsaS5ib3R0b21SaWdodC54Kz1uLnRvcExlZnQueCxpLnRvcExlZnQueSs9bi50b3BMZWZ0LnksaS5ib3R0b21SaWdodC55Kz1uLnRvcExlZnQueSxpfSxlLnByb3RvdHlwZS5nZXRSb3dCb3VuZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciByPXRoaXMucGFkZGluZyxuPXRoaXMucGFkZGluZyxpPTA7aTx0O2krKyluKz10aGlzLnJvd3NbaV0uZ2V0SGVpZ2h0KCk7dmFyIG89e3RvcExlZnQ6e3g6cix5Om59LGJvdHRvbVJpZ2h0Ont4OnIrdGhpcy5yb3dzW3RdLmdldFdpZHRoKCkseTpuK3RoaXMucm93c1t0XS5nZXRIZWlnaHQoKX19O3JldHVybiBvfSxlLnByb3RvdHlwZS5nZXRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4odGhpcy5yb3dzLnJlZHVjZShmdW5jdGlvbih0LHIpe3JldHVybiB0K3IuZ2V0SGVpZ2h0KCl9LDApK3RoaXMucGFkZGluZyoyLHRoaXMubWF4SGVpZ2h0KX0sZS5wcm90b3R5cGUuZ2V0V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oSmcuTWF0aC5tYXgodGhpcy5yb3dzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRXaWR0aCgpfSksMCkrdGhpcy5wYWRkaW5nKjIsdGhpcy5tYXhXaWR0aCl9LGV9KCksUUJlPWZ1bmN0aW9uKGUpe2pCZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9wYWRkaW5nPTUsbi5fcm93Qm90dG9tUGFkZGluZz0zLG4uYWRkQ2xhc3MoImxlZ2VuZCIpLG4ubWF4RW50cmllc1BlclJvdygxKSxyPT1udWxsKXRocm93IG5ldyBFcnJvcigiTGVnZW5kIHJlcXVpcmVzIGEgY29sb3JTY2FsZSIpO3JldHVybiBuLl9jb2xvclNjYWxlPXIsbi5fcmVkcmF3Q2FsbGJhY2s9ZnVuY3Rpb24oaSl7cmV0dXJuIG4ucmVkcmF3KCl9LG4uX2NvbG9yU2NhbGUub25VcGRhdGUobi5fcmVkcmF3Q2FsbGJhY2spLG4uX2Zvcm1hdHRlcj0kQmUuaWRlbnRpdHkoKSxuLm1heExpbmVzUGVyRW50cnkoMSksbi54QWxpZ25tZW50KCJyaWdodCIpLnlBbGlnbm1lbnQoInRvcCIpLG4uY29tcGFyYXRvcihmdW5jdGlvbihpLG8pe3ZhciBhPW4uX2NvbG9yU2NhbGUuZG9tYWluKCkuc2xpY2UoKS5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIG4uX2Zvcm1hdHRlcihzKX0pO3JldHVybiBhLmluZGV4T2YoaSktYS5pbmRleE9mKG8pfSksbi5fc3ltYm9sRmFjdG9yeUFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIEtCZS5jaXJjbGUoKX0sbi5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIDF9LG59cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpO3ZhciByPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5MRUdFTkRfUk9XX0NMQVNTLCEwKSxuPXIuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9FTlRSWV9DTEFTUywhMCk7bi5hcHBlbmQoInRleHQiKTt2YXIgaT1uZXcgWEYuU3ZnQ29udGV4dChyLm5vZGUoKSxudWxsLFhCZS5BRERfVElUTEVfRUxFTUVOVFMpO3RoaXMuX21lYXN1cmVyPW5ldyBYRi5DYWNoZU1lYXN1cmVyKGkpLHRoaXMuX3dyYXBwZXI9bmV3IFhGLldyYXBwZXIoKS5tYXhMaW5lcyh0aGlzLm1heExpbmVzUGVyRW50cnkoKSksdGhpcy5fd3JpdGVyPW5ldyBYRi5Xcml0ZXIodGhpcy5fbWVhc3VyZXIsaSx0aGlzLl93cmFwcGVyKX0sdC5wcm90b3R5cGUuZm9ybWF0dGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Zvcm1hdHRlcjoodGhpcy5fZm9ybWF0dGVyPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUubWF4RW50cmllc1BlclJvdz1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhFbnRyaWVzUGVyUm93Oih0aGlzLl9tYXhFbnRyaWVzUGVyUm93PXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUubWF4TGluZXNQZXJFbnRyeT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9tYXhMaW5lc1BlckVudHJ5Oih0aGlzLl9tYXhMaW5lc1BlckVudHJ5PXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUubWF4V2lkdGg9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbWF4V2lkdGg6KHRoaXMuX21heFdpZHRoPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29tcGFyYXRvcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9jb21wYXJhdG9yOih0aGlzLl9jb21wYXJhdG9yPXIsdGhpcy5yZWRyYXcoKSx0aGlzKX0sdC5wcm90b3R5cGUuY29sb3JTY2FsZT1mdW5jdGlvbihyKXtyZXR1cm4gciE9bnVsbD8odGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spLHRoaXMuX2NvbG9yU2NhbGU9cix0aGlzLl9jb2xvclNjYWxlLm9uVXBkYXRlKHRoaXMuX3JlZHJhd0NhbGxiYWNrKSx0aGlzLnJlZHJhdygpLHRoaXMpOnRoaXMuX2NvbG9yU2NhbGV9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy5fY29sb3JTY2FsZS5vZmZVcGRhdGUodGhpcy5fcmVkcmF3Q2FsbGJhY2spfSx0LnByb3RvdHlwZS5fYnVpbGRMZWdlbmRUYWJsZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXMsbz10aGlzLl9tZWFzdXJlci5tZWFzdXJlKCkuaGVpZ2h0LGE9bmV3IEpCZShyLG4sdGhpcy5fcGFkZGluZykscz10aGlzLl9jb2xvclNjYWxlLmRvbWFpbigpLnNsaWNlKCkuc29ydChmdW5jdGlvbihjLHUpe3JldHVybiBpLl9jb21wYXJhdG9yKGkuX2Zvcm1hdHRlcihjKSxpLl9mb3JtYXR0ZXIodSkpfSksbD1uZXcgcW90O3JldHVybiBhLmFkZFJvdyhsKSxsLmJvdHRvbVBhZGRpbmc9dGhpcy5fcm93Qm90dG9tUGFkZGluZyxzLmZvckVhY2goZnVuY3Rpb24oYyx1KXtsLmNvbHVtbnMubGVuZ3RoLzI9PT1pLm1heEVudHJpZXNQZXJSb3coKSYmKGw9bmV3IHFvdCxsLmJvdHRvbVBhZGRpbmc9aS5fcm93Qm90dG9tUGFkZGluZyxhLmFkZFJvdyhsKSk7dmFyIGg9bC5nZXRXaWR0aEF2YWlsYWJsZSgpLGY9aS5fZm9ybWF0dGVyKGMpLHA9aS5fbWVhc3VyZXIubWVhc3VyZShmKS53aWR0aCxkPWgtby1wPDA7ZCYmbC5jb2x1bW5zLmxlbmd0aD4xJiYobD1uZXcgcW90LGwuYm90dG9tUGFkZGluZz1pLl9yb3dCb3R0b21QYWRkaW5nLGEuYWRkUm93KGwpKTt2YXIgZz17d2lkdGg6byxoZWlnaHQ6byxkYXRhOntuYW1lOmMsdHlwZToic3ltYm9sIn19O2wuYWRkQ29sdW1uKGcpLGg9bC5nZXRXaWR0aEF2YWlsYWJsZSgpO3ZhciBfPU1hdGgubWluKGgscCk7aS5fd3JhcHBlci5tYXhMaW5lcyhpLm1heExpbmVzUGVyRW50cnkoKSk7dmFyIHk9aS5fd3JhcHBlci53cmFwKGYsaS5fbWVhc3VyZXIsXykubm9MaW5lcyx4PXkqbyxiPXt3aWR0aDpfLGhlaWdodDp4LGRhdGE6e25hbWU6Yyx0eXBlOiJ0ZXh0In19O2wuYWRkQ29sdW1uKGIpfSksYX0sdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9idWlsZExlZ2VuZFRhYmxlKEpnLk1hdGgubWluKFt0aGlzLm1heFdpZHRoKCkscl0sciksbik7cmV0dXJue21pbkhlaWdodDppLmdldEhlaWdodCgpLG1pbldpZHRoOmkuZ2V0V2lkdGgoKX19LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZighdGhpcy5faXNTZXR1cClyZXR1cm5bXTt2YXIgaT10aGlzLl9idWlsZExlZ2VuZFRhYmxlKHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpKTtyZXR1cm4gaS5yb3dzLnJlZHVjZShmdW5jdGlvbihvLGEscyl7aWYoby5sZW5ndGghPT0wKXJldHVybiBvO3ZhciBsPWkuZ2V0Um93Qm91bmRzKHMpLGM9SmcuTWF0aC53aXRoaW4ocixsKTtyZXR1cm4gYz9hLmNvbHVtbnMucmVkdWNlKGZ1bmN0aW9uKHUsaCxmKXt2YXIgcD1pLmdldENvbHVtbkJvdW5kcyhzLGYpLGQ9SmcuTWF0aC53aXRoaW4ocixwKTtpZihkKXt2YXIgZz1uLmNvbnRlbnQoKS5zZWxlY3RBbGwoIi4iK3QuTEVHRU5EX1JPV19DTEFTUykubm9kZXMoKVtzXSxfPXoxLnNlbGVjdChnKS5zZWxlY3RBbGwoIi4iK3QuTEVHRU5EX0VOVFJZX0NMQVNTKS5ub2RlcygpW01hdGguZmxvb3IoZi8yKV0seT16MS5zZWxlY3QoXykuc2VsZWN0KCIuIit0LkxFR0VORF9TWU1CT0xfQ0xBU1MpLHg9SmcuRE9NLmdldFRyYW5zbGF0ZVZhbHVlcyh6MS5zZWxlY3QoZykpLGI9SmcuRE9NLmdldFRyYW5zbGF0ZVZhbHVlcyh5KTtyZXR1cm5be2JvdW5kczpKZy5ET00uZWxlbWVudEJCb3goejEuc2VsZWN0KGcpKSxkYXR1bTpoLmRhdGEubmFtZSxwb3NpdGlvbjp7eDp4WzBdK2JbMF0seTp4WzFdK2JbMV19LHNlbGVjdGlvbjp6MS5zZWxlY3QoXyksY29tcG9uZW50Om59XX1yZXR1cm4gdX0sbyk6b30sW10pfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe2UucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5LmNhbGwodGhpcyk7dmFyIHI9dGhpcy5fYnVpbGRMZWdlbmRUYWJsZSh0aGlzLndpZHRoKCksdGhpcy5oZWlnaHQoKSk7dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIG49dGhpcy5jb250ZW50KCkuc2VsZWN0QWxsKCJnLiIrdC5MRUdFTkRfUk9XX0NMQVNTKS5kYXRhKHIucm93cyksaT1uLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9ST1dfQ0xBU1MsITApLm1lcmdlKG4pO24uZXhpdCgpLnJlbW92ZSgpLGkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihhLHMpe3ZhciBsPXIuZ2V0Um93Qm91bmRzKHMpO3JldHVybiJ0cmFuc2xhdGUoIitsLnRvcExlZnQueCsiLCAiK2wudG9wTGVmdC55KyIpIn0pO3ZhciBvPXRoaXM7cmV0dXJuIGkuZWFjaChmdW5jdGlvbihhLHMpe2Zvcih2YXIgbD1bXSxjPTA7YzxhLmNvbHVtbnMubGVuZ3RoO2MrPTIpbC5wdXNoKFthLmNvbHVtbnNbY10sYS5jb2x1bW5zW2MrMV1dKTt2YXIgdT16MS5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLiIrdC5MRUdFTkRfRU5UUllfQ0xBU1MpLmRhdGEobCksaD11LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh0LkxFR0VORF9FTlRSWV9DTEFTUywhMCkubWVyZ2UodSk7aC5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixmdW5jdGlvbihmLHApe3ZhciBkPWZbMF07cmV0dXJuIG8uc3ltYm9sKCkoZC5kYXRhLm5hbWUscykoZC5oZWlnaHQqLjYpKG51bGwpfSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihmLHApe3ZhciBkPWZbMF0sZz1yLnJvd3Nbc10uY29sdW1ucy5pbmRleE9mKGQpLF89ci5nZXRDb2x1bW5Cb3VuZHMocyxnKTtyZXR1cm4idHJhbnNsYXRlKCIrKF8udG9wTGVmdC54K2Qud2lkdGgvMikrIiwgIitkLmhlaWdodC8yKyIpIn0pLmF0dHIoImZpbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBvLl9jb2xvclNjYWxlLnNjYWxlKGZbMF0uZGF0YS5uYW1lKX0pLmF0dHIoIm9wYWNpdHkiLGZ1bmN0aW9uKGYscCl7cmV0dXJuIG8uc3ltYm9sT3BhY2l0eSgpKGZbMF0uZGF0YS5uYW1lLHMpfSkuY2xhc3NlZCh0LkxFR0VORF9TWU1CT0xfQ0xBU1MsITApLGguYXBwZW5kKCJnIikuY2xhc3NlZCgidGV4dC1jb250YWluZXIiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKGYscCl7dmFyIGQ9ZlsxXSxnPXIucm93c1tzXS5jb2x1bW5zLmluZGV4T2YoZCksXz1yLmdldENvbHVtbkJvdW5kcyhzLGcpO3JldHVybiJ0cmFuc2xhdGUoIitfLnRvcExlZnQueCsiLCAwKSJ9KS5lYWNoKGZ1bmN0aW9uKGYscCxkKXt2YXIgZz16MS5zZWxlY3QodGhpcyksXz1mWzFdLHk9e3hBbGlnbjoibGVmdCIseUFsaWduOiJ0b3AiLHRleHRSb3RhdGlvbjowfTtvLl93cml0ZXIud3JpdGUoby5fZm9ybWF0dGVyKF8uZGF0YS5uYW1lKSxfLndpZHRoLG8uaGVpZ2h0KCkseSxnLm5vZGUoKSl9KSx1LmV4aXQoKS5yZW1vdmUoKX0pLHRoaXN9LHQucHJvdG90eXBlLnN5bWJvbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zeW1ib2xGYWN0b3J5QWNjZXNzb3I6KHRoaXMuX3N5bWJvbEZhY3RvcnlBY2Nlc3Nvcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLnN5bWJvbE9wYWNpdHk9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yOih0eXBlb2Ygcj09Im51bWJlciI/dGhpcy5fc3ltYm9sT3BhY2l0eUFjY2Vzc29yPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9OnRoaXMuX3N5bWJvbE9wYWNpdHlBY2Nlc3Nvcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmZpeGVkV2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuZml4ZWRIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdC5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5fbWVhc3VyZXIucmVzZXQoKX0sdC5MRUdFTkRfUk9XX0NMQVNTPSJsZWdlbmQtcm93Iix0LkxFR0VORF9FTlRSWV9DTEFTUz0ibGVnZW5kLWVudHJ5Iix0LkxFR0VORF9TWU1CT0xfQ0xBU1M9ImxlZ2VuZC1zeW1ib2wiLHR9KFpCZS5Db21wb25lbnQpO0dvdC5MZWdlbmQ9UUJlfSk7dmFyIFdvdD1IKCRGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHRIZTsoZnVuY3Rpb24oZSl7ZS5NQUlOPSJtYWluIixlLlJFU0VUPSJyZXNldCJ9KSh0SGU9JEYuQW5pbWF0b3J8fCgkRi5BbmltYXRvcj17fSkpfSk7dmFyIEwkdD1IKChHcW4sSSR0KT0+eyJ1c2Ugc3RyaWN0IjtJJHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCE9bnVsbCYmdHlwZW9mIHQ9PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KHQpPT09ITF9fSk7dmFyIE4kdD1IKChXcW4sUiR0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZUhlPUwkdCgpO2Z1bmN0aW9uIGskdChlKXtyZXR1cm4gZUhlKGUpPT09ITAmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PSJbb2JqZWN0IE9iamVjdF0ifVIkdC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciByLG47cmV0dXJuIShrJHQodCk9PT0hMXx8KHI9dC5jb25zdHJ1Y3Rvcix0eXBlb2YgciE9ImZ1bmN0aW9uIil8fChuPXIucHJvdG90eXBlLGskdChuKT09PSExKXx8bi5oYXNPd25Qcm9wZXJ0eSgiaXNQcm90b3R5cGVPZiIpPT09ITEpfX0pO3ZhciBqb3Q9SChZb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFlvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHJIZT1GZSgpLEQkdD0wLG5IZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0PT09dm9pZCAwJiYodD1bXSkscj09PXZvaWQgMCYmKHI9e30pLHRoaXMuX3VwZGF0ZUlkPUQkdCsrLHRoaXMuX2RhdGE9dCx0aGlzLl9tZXRhZGF0YT1yLHRoaXMuX2NhbGxiYWNrcz1uZXcgckhlLkNhbGxiYWNrU2V0fXJldHVybiBlLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY2FsbGJhY2tzLmFkZCh0KSx0aGlzfSxlLnByb3RvdHlwZS5vZmZVcGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGxiYWNrcy5kZWxldGUodCksdGhpc30sZS5wcm90b3R5cGUuZGF0YT1mdW5jdGlvbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9kYXRhOih0aGlzLl9kYXRhPXQsdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUubWV0YWRhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PW51bGw/dGhpcy5fbWV0YWRhdGE6KHRoaXMuX21ldGFkYXRhPXQsdGhpcy5fZGlzcGF0Y2hVcGRhdGUoKSx0aGlzKX0sZS5wcm90b3R5cGUudXBkYXRlSWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlSWR9LGUucHJvdG90eXBlLl9kaXNwYXRjaFVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUlkPUQkdCsrLHRoaXMuX2NhbGxiYWNrcy5jYWxsQ2FsbGJhY2tzKHRoaXMpfSxlfSgpO1lvdC5EYXRhc2V0PW5IZX0pO3ZhciBLb3Q9SChSYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUmMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYb3Q9KGRlKCksVXQocGUpKSxpSGU9TiR0KCksb0hlPWpvdCgpLGFIZT1MMSgpO2Z1bmN0aW9uICRvdChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGY0P2U6ZSBpbnN0YW5jZW9mIERhdGU/aDQoZS52YWx1ZU9mKCkpOmUgaW5zdGFuY2VvZiBhSGUuU2NhbGU/TyR0KGUpOmUgaW5zdGFuY2VvZiBvSGUuRGF0YXNldD96JHQoZSk6aUhlKGUpP0tGKGUpOkFycmF5LmlzQXJyYXkoZSk/RiR0KGUpOmg0KGUpfVJjLnNpZ249JG90O2Z1bmN0aW9uIE8kdChlKXt2YXIgdD17ZG9tYWluOmUuZG9tYWluKCkscmFuZ2U6ZS5yYW5nZSgpLHVwZGF0ZUlkOmUudXBkYXRlSWQoKSxyZWY6aDQoZSl9O3JldHVybiBLRih0KX1SYy5zaWduU2NhbGU9TyR0O2Z1bmN0aW9uIHokdChlKXt2YXIgdD17cmVmOmg0KGUpLHVwZGF0ZUlkOmUudXBkYXRlSWQoKX07cmV0dXJuIEtGKHQpfVJjLnNpZ25EYXRhc2V0PXokdDtmdW5jdGlvbiBoNChlKXtyZXR1cm4gbmV3IEgkdChlKX1SYy5zaWduUmVmPWg0O2Z1bmN0aW9uIEYkdChlKXtyZXR1cm4gbmV3IEIkdChlLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gJG90KHQpfSkpfVJjLnNpZ25BcnJheT1GJHQ7ZnVuY3Rpb24gS0YoZSl7dmFyIHQ9e307Zm9yKHZhciByIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09JG90KGVbcl0pKTtyZXR1cm4gbmV3IFYkdCh0KX1SYy5zaWduT2JqPUtGO3ZhciBmND1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmlzRGlmZmVyZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj90aGlzLmlzU2lnbmF0dXJlRGlmZmVyZW50KHQpOiEwfSxlfSgpO1JjLlNpZ25hdHVyZT1mNDt2YXIgQiR0PWZ1bmN0aW9uKGUpe1hvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5hcnJheT1yLG59cmV0dXJuIHQucHJvdG90eXBlLmlzU2lnbmF0dXJlRGlmZmVyZW50PWZ1bmN0aW9uKHIpe2lmKHIuYXJyYXkubGVuZ3RoIT09dGhpcy5hcnJheS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjx0aGlzLmFycmF5Lmxlbmd0aDtuKyspaWYodGhpcy5hcnJheVtuXS5pc0RpZmZlcmVudChyLmFycmF5W25dKSlyZXR1cm4hMDtyZXR1cm4hMX0sdH0oZjQpO1JjLkFycmF5U2lnbmF0dXJlPUIkdDt2YXIgSCR0PWZ1bmN0aW9uKGUpe1hvdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gbi5yZWY9cixufXJldHVybiB0LnByb3RvdHlwZS5pc1NpZ25hdHVyZURpZmZlcmVudD1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5yZWYhPT1yLnJlZn0sdH0oZjQpO1JjLlJlZmVyZW5jZVNpZ25hdHVyZT1IJHQ7dmFyIFYkdD1mdW5jdGlvbihlKXtYb3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4ub2JqPXIsbn1yZXR1cm4gdC5wcm90b3R5cGUuaXNTaWduYXR1cmVEaWZmZXJlbnQ9ZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LmtleXModGhpcy5vYmopLGk9T2JqZWN0LmtleXMoci5vYmopO2lmKG4ubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBvPTAsYT1uO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2lmKCFyLm9iai5oYXNPd25Qcm9wZXJ0eShzKXx8dGhpcy5vYmpbc10uaXNEaWZmZXJlbnQoci5vYmpbc10pKXJldHVybiEwfXJldHVybiExfSx0fShmNCk7UmMuT2JqZWN0U2lnbmF0dXJlPVYkdH0pO3ZhciBVJHQ9SChab3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFpvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHNIZT1Lb3QoKTtmdW5jdGlvbiBsSGUoZSl7dmFyIHQ9dm9pZCAwLHIsbj0hMSxpPSExLG89ZnVuY3Rpb24oKXtmb3IodmFyIGE9W10scz0wO3M8YXJndW1lbnRzLmxlbmd0aDtzKyspYVtzXT1hcmd1bWVudHNbc107aWYobilyZXR1cm4gcjt2YXIgbD1zSGUuc2lnbkFycmF5KGEpO3JldHVybiB0PT09dm9pZCAwfHx0LmlzRGlmZmVyZW50KGwpPyhpJiZjb25zb2xlLndhcm4oImNhY2hlIG1pc3MhIGNvbXB1dGluZyIpLHQ9bCxyPWUuYXBwbHkodGhpcyxhKSk6aSYmY29uc29sZS53YXJuKCJjYWNoZSBoaXQhIikscn07cmV0dXJuIG8uZG9Mb2NrZWQ9ZnVuY3Rpb24oYSl7aWYobil0aHJvdyBuZXcgRXJyb3IoIkxvY2tpbmcgYW4gYWxyZWFkeSBsb2NrZWQgbWVtb2l6ZSBmdW5jdGlvbiEiKTtuPSEwO3ZhciBzPWEuYXBwbHkodGhpcyk7cmV0dXJuIG49ITEsc30sby5sb2dQZXJmb3JtYW5jZT1mdW5jdGlvbihhKXtyZXR1cm4gYT09PXZvaWQgMCYmKGE9ITApLGk9YSx0aGlzfSxvfVpvdC5tZW1vaXplPWxIZX0pO3ZhciBXJHQ9SChaRj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWkYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBjSGU9T2UoKSxKb3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmV4aXN0cz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIGRlbGV0ZSB0aGlzLm1hcFt0XSxkZWxldGUgdGhpcy5leGlzdHNbdF0sITB9LGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXBbdF19LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4hIXRoaXMuZXhpc3RzW3RdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXBbdF09cix0aGlzLmV4aXN0c1t0XT0hMCx0aGlzfSxlfSgpLHEkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm1hcD1uZXcgSm90fXJldHVybiBlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubWFwLmdldCh0WzBdKS5nZXQodFsxXSl9LGUucHJvdG90eXBlLmhhcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pJiZ0aGlzLm1hcC5nZXQodFswXSkuaGFzKHRbMV0pfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5tYXAuaGFzKHRbMF0pfHx0aGlzLm1hcC5zZXQodFswXSxuZXcgSm90KSx0aGlzLm1hcC5nZXQodFswXSkuc2V0KHRbMV0sciksdGhpc30sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5oYXModFswXSkmJnRoaXMubWFwLmdldCh0WzBdKS5kZWxldGUodFsxXSksITB9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5tYXA9bmV3IEpvdH0sZS5yZXNvbHZlcj1mdW5jdGlvbih0LHIsbil7cmV0dXJuW24udXBkYXRlSWQoKSxyXX0sZX0oKTtmdW5jdGlvbiBHJHQoZSl7dmFyIHQ9Y0hlLm1lbW9pemUoZSxxJHQucmVzb2x2ZXIpO3JldHVybiB0LmNhY2hlPW5ldyBxJHQsdH1aRi5tZW1vaXplUHJvamVjdG9yPUckdDtmdW5jdGlvbiB1SGUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1HJHQoZVt0XSl9KSxlfVpGLm1lbW9pemVQcm9qZWN0b3JzPXVIZX0pO3ZhciBZJHQ9SChRb3Q9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFFvdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGhIZT1DUygpO2Z1bmN0aW9uIGZIZSgpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTt2YXIgcj1lLnNsaWNlKDAsLTEpLG49ZVtlLmxlbmd0aC0xXSxpPWhIZS5tZW1vaXplKG4pLG89ZnVuY3Rpb24oKXt2YXIgYT10aGlzLHM9ci5tYXAoZnVuY3Rpb24obCl7cmV0dXJuIGwuYXBwbHkoYSl9KTtyZXR1cm4gaS5hcHBseSh2b2lkIDAscyl9O3JldHVybiBvfVFvdC5tZW1UaHVuaz1mSGV9KTt2YXIgQ1M9SChBUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQVMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0YXQ9KGRlKCksVXQocGUpKTt0YXQuX19leHBvcnRTdGFyKFUkdCgpLEFTKTt0YXQuX19leHBvcnRTdGFyKFckdCgpLEFTKTt0YXQuX19leHBvcnRTdGFyKFkkdCgpLEFTKTt2YXIgcEhlPUtvdCgpO0FTLnNpZ249cEhlLnNpZ259KTt2YXIgRjE9SChOYz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTmMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBqJHQ9KEVyKCksVXQoTXIpKSxkSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dGhpcy5fY29udGV4dD10LHRoaXMuX2RyYXdTdGVwPXJ9cmV0dXJuIGUucHJvdG90eXBlLmdldERyYXdTdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYXdTdGVwfSxlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dmFyIG49cltyLmxlbmd0aC0xXS5hdHRyVG9BcHBsaWVkUHJvamVjdG9yO3RoaXMuX2NvbnRleHQuc2F2ZSgpLHRoaXMuX2RyYXdTdGVwKHRoaXMuX2NvbnRleHQsdCxuKSx0aGlzLl9jb250ZXh0LnJlc3RvcmUoKX0sZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlcz1mdW5jdGlvbigpe3JldHVybltdfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt9LGV9KCk7TmMuQ2FudmFzRHJhd2VyPWRIZTtOYy5Db250ZXh0U3R5bGVBdHRycz1bImZpbGwtb3BhY2l0eSIsImZpbGwiLCJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Il07ZnVuY3Rpb24gbUhlKGUsdCxyLG4pe3ZhciBpPU5jLkNvbnRleHRTdHlsZUF0dHJzLmNvbmNhdCh0KTtyZXR1cm4gWCR0KGUsaSxyLG4pfU5jLnJlc29sdmVBdHRyaWJ1dGVzU3Vic2V0V2l0aFN0eWxlcz1tSGU7ZnVuY3Rpb24gWCR0KGUsdCxyLG4pe2Zvcih2YXIgaT17fSxvPTAsYT10O288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dO2UuaGFzT3duUHJvcGVydHkocykmJihpW3NdPWVbc10ocixuKSl9cmV0dXJuIGl9TmMucmVzb2x2ZUF0dHJpYnV0ZXM9WCR0O2Z1bmN0aW9uIGdIZShlKXt2YXIgdD1lLm9wYWNpdHkhPW51bGw/cGFyc2VGbG9hdChlLm9wYWNpdHkpOjEscj1lWyJzdHJva2Utb3BhY2l0eSJdIT1udWxsP3BhcnNlRmxvYXQoZVsic3Ryb2tlLW9wYWNpdHkiXSk6MTtyZXR1cm4gcip0fWZ1bmN0aW9uIF9IZShlKXt2YXIgdD1lLm9wYWNpdHkhPW51bGw/cGFyc2VGbG9hdChlLm9wYWNpdHkpOjEscj1lWyJmaWxsLW9wYWNpdHkiXSE9bnVsbD9wYXJzZUZsb2F0KGVbImZpbGwtb3BhY2l0eSJdKToxO3JldHVybiByKnR9ZnVuY3Rpb24gJCR0KGUpe3JldHVybiBlWyJzdHJva2Utd2lkdGgiXSE9bnVsbD9wYXJzZUZsb2F0KGVbInN0cm9rZS13aWR0aCJdKToxfU5jLmdldFN0cm9rZVdpZHRoPSQkdDtmdW5jdGlvbiBLJHQoZSl7dmFyIHQ9ZVsic3Ryb2tlLWRhc2hhcnJheSJdO2lmKHQhPW51bGwpdHJ5e3JldHVybiB0LnNwbGl0KC9bICxdKy8pLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gcGFyc2VJbnQociwxMCl9KX1jYXRjaChyKXtyZXR1cm4gY29uc29sZS5lcnJvcigiZ2V0U3Ryb2tlRGFzaEFycmF5IGZhaWxlZCB3aXRoOiAiK3IpLFtdfXJldHVybltdfU5jLmdldFN0cm9rZURhc2hBcnJheT1LJHQ7ZnVuY3Rpb24geUhlKGUsdCxyLG4pe2Uuc2F2ZSgpLGUuYmVnaW5QYXRoKCksdC5jb250ZXh0KGUpLHQociksZS5saW5lSm9pbj0icm91bmQiLGVhdChlLG4pLGUucmVzdG9yZSgpfU5jLnJlbmRlckFyZWE9eUhlO2Z1bmN0aW9uIHZIZShlLHQscixuKXtlLnNhdmUoKSxlLmJlZ2luUGF0aCgpLHQuY29udGV4dChlKSx0KHIpLGUubGluZUpvaW49InJvdW5kIixlYXQoZSxuKSxlLnJlc3RvcmUoKX1OYy5yZW5kZXJMaW5lPXZIZTtmdW5jdGlvbiBlYXQoZSx0KXtpZih0LnN0cm9rZSl7ZS5saW5lV2lkdGg9JCR0KHQpO3ZhciByPWokdC5jb2xvcih0LnN0cm9rZSksbj1LJHQodCk7ZS5zZXRMaW5lRGFzaChuKSxyLm9wYWNpdHkqPWdIZSh0KSxlLnN0cm9rZVN0eWxlPXIudG9TdHJpbmcoKSxlLnN0cm9rZSgpfWlmKHQuZmlsbCl7dmFyIGk9aiR0LmNvbG9yKHQuZmlsbCk7aS5vcGFjaXR5Kj1fSGUodCksZS5maWxsU3R5bGU9aS50b1N0cmluZygpLGUuZmlsbCgpfX1OYy5yZW5kZXJQYXRoV2l0aFN0eWxlPWVhdH0pO3ZhciBVdT1IKHJhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeEhlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3RoaXMuX3N2Z0RyYXdlckZhY3Rvcnk9dCx0aGlzLl9jYW52YXNEcmF3ZXJGYWN0b3J5PXJ9cmV0dXJuIGUucHJvdG90eXBlLnVzZVNWRz1mdW5jdGlvbih0KXt0aGlzLl9jdXJyZW50RHJhd2VyIT1udWxsJiZ0aGlzLl9jdXJyZW50RHJhd2VyLnJlbW92ZSgpO3ZhciByPXRoaXMuX3N2Z0RyYXdlckZhY3RvcnkoKTtyLmF0dGFjaFRvKHQpLHRoaXMuX2N1cnJlbnREcmF3ZXI9cn0sZS5wcm90b3R5cGUudXNlQ2FudmFzPWZ1bmN0aW9uKHQpe3RoaXMuX2N1cnJlbnREcmF3ZXIhPW51bGwmJnRoaXMuX2N1cnJlbnREcmF3ZXIucmVtb3ZlKCksdGhpcy5fY3VycmVudERyYXdlcj10aGlzLl9jYW52YXNEcmF3ZXJGYWN0b3J5KHQubm9kZSgpLmdldENvbnRleHQoIjJkIikpfSxlLnByb3RvdHlwZS5nZXREcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3VycmVudERyYXdlcn0sZS5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fY3VycmVudERyYXdlciE9bnVsbCYmdGhpcy5fY3VycmVudERyYXdlci5yZW1vdmUoKX0sZS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LHIpe3RoaXMuX2N1cnJlbnREcmF3ZXIuZHJhdyh0LHIpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnREcmF3ZXIuZ2V0VmlzdWFsUHJpbWl0aXZlcygpfSxlLnByb3RvdHlwZS5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jdXJyZW50RHJhd2VyLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXgodCl9LGV9KCk7cmF0LlByb3h5RHJhd2VyPXhIZX0pO3ZhciBEZj1IKG5hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYkhlPShFcigpLFV0KE1yKSksWiR0PUZlKCksd0hlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3RoaXMuX3Jvb3Q9YkhlLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSx0aGlzLl9jbGFzc05hbWU9cix0aGlzLl9zdmdFbGVtZW50TmFtZT10fXJldHVybiBlLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQscil7dmFyIG49dGhpczt0aGlzLl9jcmVhdGVBbmREZXN0cm95RE9NRWxlbWVudHModCk7Zm9yKHZhciBpPTAsbz1yLmxlbmd0aCxhPWZ1bmN0aW9uKGwpe3ZhciBjPXJbbF07WiR0LldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdTdGVwKGMpfSxpKSxpKz1jLmFuaW1hdG9yLnRvdGFsVGltZSh0Lmxlbmd0aCl9LHM9MDtzPG87cysrKWEocyl9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPT1udWxsJiYodGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVzPXRoaXMuX3NlbGVjdGlvbi5ub2RlcygpKSx0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZXN9LGUucHJvdG90eXBlLmdldFZpc3VhbFByaW1pdGl2ZUF0SW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2RlTWFwPT1udWxsP251bGw6dGhpcy5fY2FjaGVkVmlzdWFsUHJpbWl0aXZlc05vZGVNYXAuZ2V0KHQpfSxlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yb290LnJlbW92ZSgpfSxlLnByb3RvdHlwZS5hdHRhY2hUbz1mdW5jdGlvbih0KXt0Lm5vZGUoKS5hcHBlbmRDaGlsZCh0aGlzLl9yb290Lm5vZGUoKSl9LGUucHJvdG90eXBlLmdldFJvb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm9vdH0sZS5wcm90b3R5cGUuc2VsZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3ZnRWxlbWVudE5hbWV9LGUucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuX2NyZWF0ZUFuZERlc3Ryb3lET01FbGVtZW50cz1mdW5jdGlvbih0KXt2YXIgcj10Lm1hcChmdW5jdGlvbihhLHMpe3JldHVybiBhIT1udWxsP3tkOmEsaTpzfTpudWxsfSksbj1yLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbH0pLGk9dGhpcy5fcm9vdC5zZWxlY3RBbGwodGhpcy5zZWxlY3RvcigpKS5kYXRhKG4pO3RoaXMuX3NlbGVjdGlvbj1pLmVudGVyKCkuYXBwZW5kKHRoaXMuX3N2Z0VsZW1lbnROYW1lKS5tZXJnZShpKSxpLmV4aXQoKS5yZW1vdmUoKTt2YXIgbz1uZXcgWiR0Lk1hcDt0aGlzLl9zZWxlY3Rpb24uZWFjaChmdW5jdGlvbihhKXtvLnNldChhLmksdGhpcyl9KSx0aGlzLl9jYWNoZWRWaXN1YWxQcmltaXRpdmVzTm9kZU1hcD1vLHRoaXMuX2NhY2hlZFZpc3VhbFByaW1pdGl2ZXNOb2Rlcz1udWxsLHRoaXMuX3NlbGVjdGlvbi5kYXRhKHRoaXMuX3NlbGVjdGlvbi5kYXRhKCkubWFwKGZ1bmN0aW9uKGEpe3ZhciBzPWEuZDtyZXR1cm4gc30pKSx0aGlzLl9jbGFzc05hbWUhPW51bGwmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwhMCksdGhpcy5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcyh0aGlzLl9zZWxlY3Rpb24pfSxlLnByb3RvdHlwZS5fZHJhd1N0ZXA9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcyxuPVsiZmlsbCIsInN0cm9rZSJdO24uZm9yRWFjaChmdW5jdGlvbihpKXt0LmF0dHJUb0FwcGxpZWRQcm9qZWN0b3JbaV0hPW51bGwmJnIuX3NlbGVjdGlvbi5hdHRyKGksdC5hdHRyVG9BcHBsaWVkUHJvamVjdG9yW2ldKX0pLHQuYW5pbWF0b3IuYW5pbWF0ZSh0aGlzLl9zZWxlY3Rpb24sdC5hdHRyVG9BcHBsaWVkUHJvamVjdG9yKSx0aGlzLl9jbGFzc05hbWUhPW51bGwmJnRoaXMuX3NlbGVjdGlvbi5jbGFzc2VkKHRoaXMuX2NsYXNzTmFtZSwhMCl9LGV9KCk7bmF0LlNWR0RyYXdlcj13SGV9KTt2YXIgb2F0PUgoaWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBKJHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9dGhpczt0aGlzLnNjYWxlPTAsdGhpcy50cmFuc2xhdGU9MCx0aGlzLmNhY2hlZERvbWFpbj1bbnVsbCxudWxsXSx0aGlzLmxhc3RTZWVuRG9tYWluPVtudWxsLG51bGxdLHRoaXMudXBkYXRlRG9tYWluPWZ1bmN0aW9uKHIpe3QubGFzdFNlZW5Eb21haW49ci5nZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbigpO3ZhciBuPXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0LmNhY2hlZERvbWFpblsxXSktci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzBdKSxpPXIuc2NhbGVUcmFuc2Zvcm1hdGlvbih0Lmxhc3RTZWVuRG9tYWluWzFdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblswXSk7dC5zY2FsZT1uL2l8fDEsdC50cmFuc2xhdGU9ci5zY2FsZVRyYW5zZm9ybWF0aW9uKHQuY2FjaGVkRG9tYWluWzBdKS1yLnNjYWxlVHJhbnNmb3JtYXRpb24odC5sYXN0U2VlbkRvbWFpblswXSkqdC5zY2FsZXx8MH19cmV0dXJuIGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5zY2FsZT0xLHRoaXMudHJhbnNsYXRlPTAsdGhpcy5jYWNoZWREb21haW49dGhpcy5sYXN0U2VlbkRvbWFpbn0sZS5wcm90b3R5cGUuc2V0RG9tYWluPWZ1bmN0aW9uKHQpe3RoaXMuY2FjaGVkRG9tYWluPXQuZ2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKX0sZX0oKSxTSGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7dmFyIG49dGhpczt0aGlzLnJlbmRlckNhbGxiYWNrPXQsdGhpcy5hcHBseVRyYW5zZm9ybUNhbGxiYWNrPXIsdGhpcy5kb21haW5UcmFuc2Zvcm1YPW5ldyBKJHQsdGhpcy5kb21haW5UcmFuc2Zvcm1ZPW5ldyBKJHQsdGhpcy5yZW5kZXJEZWZlcnJlZD1mdW5jdGlvbigpe24uYXBwbHlUcmFuc2Zvcm0oKSxjbGVhclRpbWVvdXQobi50aW1lb3V0VG9rZW4pLG4udGltZW91dFRva2VuPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnJlbmRlckNhbGxiYWNrKCl9LGUuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZKX19cmV0dXJuIGUucHJvdG90eXBlLnNldERvbWFpbnM9ZnVuY3Rpb24odCxyKXt0JiZ0aGlzLmRvbWFpblRyYW5zZm9ybVguc2V0RG9tYWluKHQpLHImJnRoaXMuZG9tYWluVHJhbnNmb3JtWS5zZXREb21haW4ociksdGhpcy5yZW5kZXJEZWZlcnJlZCgpfSxlLnByb3RvdHlwZS51cGRhdGVEb21haW5zPWZ1bmN0aW9uKHQscil7dCYmdGhpcy5kb21haW5UcmFuc2Zvcm1YLnVwZGF0ZURvbWFpbih0KSxyJiZ0aGlzLmRvbWFpblRyYW5zZm9ybVkudXBkYXRlRG9tYWluKHIpLHRoaXMucmVuZGVyRGVmZXJyZWQoKX0sZS5wcm90b3R5cGUucmVzZXRUcmFuc2Zvcm1zPWZ1bmN0aW9uKCl7dGhpcy5kb21haW5UcmFuc2Zvcm1YLnJlc2V0KCksdGhpcy5kb21haW5UcmFuc2Zvcm1ZLnJlc2V0KCksdGhpcy5hcHBseVRyYW5zZm9ybSgpfSxlLnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbigpe3RoaXMuYXBwbHlUcmFuc2Zvcm1DYWxsYmFjayh0aGlzLmRvbWFpblRyYW5zZm9ybVgudHJhbnNsYXRlLHRoaXMuZG9tYWluVHJhbnNmb3JtWS50cmFuc2xhdGUsdGhpcy5kb21haW5UcmFuc2Zvcm1YLnNjYWxlLHRoaXMuZG9tYWluVHJhbnNmb3JtWS5zY2FsZSl9LGUuREVGRVJSRURfUkVOREVSSU5HX0RFTEFZPTIwMCxlfSgpO2lhdC5EZWZlcnJlZFJlbmRlcmVyPVNIZX0pO3ZhciBycz1IKEpGPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIE1IZT0oZGUoKSxVdChwZSkpLHdkPShFcigpLFV0KE1yKSkscDQ9TGYoKSxTZD1GZSgpLFEkdD1Xb3QoKSxhYXQ9Q1MoKSxFSGU9a2MoKSxUSGU9RjEoKSxDSGU9VXUoKSxBSGU9RGYoKSxQSGU9WWcoKSxJSGU9SWYoKSxMSGU9b2F0KCk7SkYuUmVuZGVyZXI9SUhlLm1ha2VFbnVtKFsic3ZnIiwiY2FudmFzIl0pO3ZhciBrSGU9ZnVuY3Rpb24oZSl7TUhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7ci5fZGF0YUNoYW5nZWQ9ITEsci5fYXR0ckV4dGVudHM9e30sci5fYW5pbWF0ZT0hMSxyLl9hbmltYXRvcnM9e30sci5fcHJvcGVydHlFeHRlbnRzPXt9LHIuX3Jlc2V0RW50aXR5U3RvcmU9ZnVuY3Rpb24oKXtyLl9jYWNoZWRFbnRpdHlTdG9yZT12b2lkIDB9LHIuX292ZXJmbG93SGlkZGVuPSEwLHIuYWRkQ2xhc3MoInBsb3QiKSxyLl9kYXRhc2V0VG9EcmF3ZXI9bmV3IFNkLk1hcCxyLl9hdHRyQmluZGluZ3M9d2QubWFwKCksci5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcj1mdW5jdGlvbihpLG8pe3JldHVybiByLl9pbmNsdWRlZFZhbHVlc0ZvclNjYWxlKGksbyl9LHIuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHIucmVuZGVyKCl9LHIuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHIuX29uRGF0YXNldFVwZGF0ZSgpfSxyLl9wcm9wZXJ0eUJpbmRpbmdzPXdkLm1hcCgpO3ZhciBuPW5ldyBwNC5FYXNpbmcoKS5tYXhUb3RhbER1cmF0aW9uKHQuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pO3JldHVybiByLmFuaW1hdG9yKFEkdC5BbmltYXRvci5NQUlOLG4pLHIuYW5pbWF0b3IoUSR0LkFuaW1hdG9yLlJFU0VULG5ldyBwNC5OdWxsKSxyLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmU9U2QuV2luZG93LmRlYm91bmNlKExIZS5EZWZlcnJlZFJlbmRlcmVyLkRFRkVSUkVEX1JFTkRFUklOR19ERUxBWSxyLl9yZXNldEVudGl0eVN0b3JlKSxyfXJldHVybiB0LmdldFRvdGFsRHJhd1RpbWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbi5yZWR1Y2UoZnVuY3Rpb24oaSxvKXtyZXR1cm4gaStvLmFuaW1hdG9yLnRvdGFsVGltZShyLmxlbmd0aCl9LDApfSx0LmFwcGx5RHJhd1N0ZXBzPWZ1bmN0aW9uKHIsbil7dmFyIGk9ci5tYXAoZnVuY3Rpb24obyl7dmFyIGE9by5hdHRyVG9Qcm9qZWN0b3Iscz17fTtyZXR1cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbihsKXtzW2xdPWZ1bmN0aW9uKGMsdSl7cmV0dXJuIGFbbF0oYyx1LG4pfX0pLHthdHRyVG9BcHBsaWVkUHJvamVjdG9yOnMsYW5pbWF0b3I6by5hbmltYXRvcn19KTtyZXR1cm4gaX0sdC5wcm90b3R5cGUuYW5jaG9yPWZ1bmN0aW9uKHIpe3JldHVybiByPVBIZS5jb2VyY2VFeHRlcm5hbEQzKHIpLGUucHJvdG90eXBlLmFuY2hvci5jYWxsKHRoaXMsciksdGhpcy5fZGF0YUNoYW5nZWQ9ITAsdGhpcy5fcmVzZXRFbnRpdHlTdG9yZSgpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0dXA9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3RoaXMuX2lzU2V0dXB8fChlLnByb3RvdHlwZS5fc2V0dXAuY2FsbCh0aGlzKSx0aGlzLl9jYW52YXMhPW51bGwmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9yZW5kZXJBcmVhPXRoaXMuY29udGVudCgpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJlbmRlci1hcmVhIiwhMCksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldChuKX0pKX0sdC5wcm90b3R5cGUuX2FwcGVuZENhbnZhc05vZGU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmVsZW1lbnQoKS5zZWxlY3QoIi5wbG90LWNhbnZhcy1jb250YWluZXIiKTtyLmVtcHR5KCkmJihyPXRoaXMuZWxlbWVudCgpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdC1jYW52YXMtY29udGFpbmVyIiwhMCksci5ub2RlKCkuYXBwZW5kQ2hpbGQodGhpcy5fY2FudmFzLm5vZGUoKSkpfSx0LnByb3RvdHlwZS5zZXRCb3VuZHM9ZnVuY3Rpb24ocixuLGksbyl7aWYoZS5wcm90b3R5cGUuc2V0Qm91bmRzLmNhbGwodGhpcyxyLG4saSxvKSx0aGlzLl91cGRhdGVFeHRlbnRzKCksdGhpcy5fY2FudmFzIT1udWxsKXtpZih0aGlzLl9idWZmZXJDYW52YXMmJiF0aGlzLl9idWZmZXJDYW52YXNWYWxpZCl7dGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoIndpZHRoIix0aGlzLl9jYW52YXMuYXR0cigid2lkdGgiKSksdGhpcy5fYnVmZmVyQ2FudmFzLmF0dHIoImhlaWdodCIsdGhpcy5fY2FudmFzLmF0dHIoImhlaWdodCIpKTt2YXIgYT10aGlzLl9idWZmZXJDYW52YXMubm9kZSgpLmdldENvbnRleHQoIjJkIik7aWYoYSl7dmFyIHM9dGhpcy5fY2FudmFzLm5vZGUoKTtzLndpZHRoPjAmJnMuaGVpZ2h0PjA/YS5jYW52YXMud2lkdGg+MCYmYS5jYW52YXMuaGVpZ2h0PjAmJmEuZHJhd0ltYWdlKHMsMCwwKTpjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmaWxsIGJ1ZmZlciBjYW52YXMgd2l0aCB3aXRoIDB4MCBjYW52YXMiKX10aGlzLl9idWZmZXJDYW52YXNWYWxpZD0hMH12YXIgbD13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyE9bnVsbD93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbzoxO3RoaXMuX2NhbnZhcy5hdHRyKCJ3aWR0aCIscipsKSx0aGlzLl9jYW52YXMuYXR0cigiaGVpZ2h0IixuKmwpO3ZhciBjPXRoaXMuX2NhbnZhcy5ub2RlKCkuZ2V0Q29udGV4dCgiMmQiKTtpZihjJiYoYy5zZXRUcmFuc2Zvcm0obCwwLDAsbCwwLDApLHRoaXMuX2J1ZmZlckNhbnZhcykpe3ZhciB1PXRoaXMuX2J1ZmZlckNhbnZhcy5ub2RlKCk7dS53aWR0aD4wJiZ1LmhlaWdodD4wP2MuY2FudmFzLndpZHRoPjAmJmMuY2FudmFzLmhlaWdodD4wJiZjLmRyYXdJbWFnZSh1LDAsMCxyLG4pOmNvbnNvbGUud2FybigiRmFpbGVkIHRvIGZpbGwgY2FudmFzIHdpdGggMHgwIGJ1ZmZlciBjYW52YXMiKX19cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKSx0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLm9mZlVwZGF0ZShyLl9yZW5kZXJDYWxsYmFjayl9KSx0aGlzLmRhdGFzZXRzKFtdKX0sdC5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZ2V0KHIpO3JldHVybiB0aGlzLnJlbmRlcmVyKCk9PT0ic3ZnIj9uLnVzZVNWRyh0aGlzLl9yZW5kZXJBcmVhKTpuLnVzZUNhbnZhcyh0aGlzLl9jYW52YXMpLG59LHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIG5ldyBDSGUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFIZS5TVkdEcmF3ZXIoInBhdGgiLCIiKX0sZnVuY3Rpb24obil7cmV0dXJuIG5ldyBUSGUuQ2FudmFzRHJhd2VyKG4sZnVuY3Rpb24oKXt9KX0pfSx0LnByb3RvdHlwZS5fZ2V0QW5pbWF0b3I9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKT90aGlzLl9hbmltYXRvcnNbcl18fG5ldyBwNC5OdWxsOm5ldyBwNC5OdWxsfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlRXh0ZW50cygpLHRoaXMuX2RhdGFDaGFuZ2VkPSEwLHRoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKSx0aGlzLnJlbmRlckxvd1ByaW9yaXR5KCl9LHQucHJvdG90eXBlLmF0dHI9ZnVuY3Rpb24ocixuLGkpe3JldHVybiBuPT1udWxsP3RoaXMuX2F0dHJCaW5kaW5ncy5nZXQocik6KHRoaXMuX2JpbmRBdHRyKHIsbixpKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fYmluZFByb3BlcnR5PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHIpLHM9YSE9bnVsbD9hLnNjYWxlOm51bGwsbD10eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmZ1bmN0aW9uKCl7cmV0dXJuIG59O3RoaXMuX3Byb3BlcnR5QmluZGluZ3Muc2V0KHIse2FjY2Vzc29yOmwsc2NhbGU6aSxwb3N0U2NhbGU6b30pLHMhPW51bGwmJnRoaXMuX3VuaW5zdGFsbFNjYWxlRm9yS2V5KHMsciksaSE9bnVsbCYmdGhpcy5faW5zdGFsbFNjYWxlRm9yS2V5KGksciksdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpfSx0LnByb3RvdHlwZS5fYmluZEF0dHI9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX2F0dHJCaW5kaW5ncy5nZXQociksYT1vIT1udWxsP28uc2NhbGU6bnVsbCxzPXR5cGVvZiBuPT0iZnVuY3Rpb24iP246ZnVuY3Rpb24oKXtyZXR1cm4gbn07dGhpcy5fYXR0ckJpbmRpbmdzLnNldChyLHthY2Nlc3NvcjpzLHNjYWxlOml9KSxhIT1udWxsJiZ0aGlzLl91bmluc3RhbGxTY2FsZUZvcktleShhLHIpLGkhPW51bGwmJnRoaXMuX2luc3RhbGxTY2FsZUZvcktleShpLHIpLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKX0sdC5wcm90b3R5cGUuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGU9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yfSx0LnByb3RvdHlwZS5fZ2V0QXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7aWYodGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yPT1udWxsKXt2YXIgcj10aGlzLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3RvcigpO3QuT1BUSU1JWkVfTUVNT0laRV9QUk9KRUNUT1JTJiYocj1hYXQubWVtb2l6ZVByb2plY3RvcnMocikpLHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcj1yfXJldHVybiBTZC5hc3NpZ24oe30sdGhpcy5fY2FjaGVkQXR0clRvUHJvamVjdG9yKX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9e307dGhpcy5fYXR0ckJpbmRpbmdzLmVhY2goZnVuY3Rpb24oaSxvKXtyW29dPXQuX3NjYWxlZEFjY2Vzc29yKGkpfSk7dmFyIG49dGhpcy5fcHJvcGVydHlQcm9qZWN0b3JzKCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZnVuY3Rpb24oaSl7cltpXT09bnVsbCYmKHJbaV09bltpXSl9KSxyfSx0LnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5yZW5kZXJJbW1lZGlhdGVseS5jYWxsKHRoaXMpLHRoaXMuX2lzQW5jaG9yZWQmJih0aGlzLl9wYWludCgpLHRoaXMuX2RhdGFDaGFuZ2VkPSExKSx0aGlzfSx0LnByb3RvdHlwZS5yZW5kZXJMb3dQcmlvcml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJDYWxsYmFjaygpLHRoaXN9LHQucHJvdG90eXBlLmFuaW1hdGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2FuaW1hdGU6KHRoaXMuX2FuaW1hdGU9cix0aGlzKX0sdC5wcm90b3R5cGUuZGV0YWNoPWZ1bmN0aW9uKCl7cmV0dXJuIGUucHJvdG90eXBlLmRldGFjaC5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSx0LnByb3RvdHlwZS5fc2NhbGVzPWZ1bmN0aW9uKCl7dmFyIHI9W107cmV0dXJuIHRoaXMuX2F0dHJCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKG4saSl7dmFyIG89bi5zY2FsZTtvIT1udWxsJiZyLmluZGV4T2Yobyk9PT0tMSYmci5wdXNoKG8pfSksdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKG4saSl7dmFyIG89bi5zY2FsZTtvIT1udWxsJiZyLmluZGV4T2Yobyk9PT0tMSYmci5wdXNoKG8pfSkscn0sdC5wcm90b3R5cGUuX3VwZGF0ZUV4dGVudHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO3RoaXMuX3Jlc2V0RW50aXR5U3RvcmUoKSx0aGlzLl9zY2FsZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLmFkZEluY2x1ZGVkVmFsdWVzUHJvdmlkZXIoci5faW5jbHVkZWRWYWx1ZXNQcm92aWRlcil9KX0sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiBudWxsfSx0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yQXR0cj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHRoaXMuX2F0dHJFeHRlbnRzW3JdPT1udWxsKXt2YXIgaT1hYXQubWVtVGh1bmsoZnVuY3Rpb24oKXtyZXR1cm4gbi5kYXRhc2V0cygpfSxmdW5jdGlvbigpe3JldHVybiBuLl9hdHRyQmluZGluZ3MuZ2V0KHIpfSxmdW5jdGlvbihvLGEpe3JldHVybiBhPT1udWxsfHxhLmFjY2Vzc29yPT1udWxsP251bGw6by5tYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHRLdChzLGEsbnVsbCl9KX0pO3RoaXMuX2F0dHJFeHRlbnRzW3JdPWl9cmV0dXJuIHRoaXMuX2F0dHJFeHRlbnRzW3JdKCl9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHRoaXMuX3Byb3BlcnR5RXh0ZW50c1tyXT09bnVsbCl7dmFyIGk9YWF0Lm1lbVRodW5rKGZ1bmN0aW9uKCl7cmV0dXJuIG4uZGF0YXNldHMoKX0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fcHJvcGVydHlCaW5kaW5ncy5nZXQocil9LGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2ZpbHRlckZvclByb3BlcnR5KHIpfSxmdW5jdGlvbihvLGEscyl7cmV0dXJuIGE9PW51bGx8fGEuYWNjZXNzb3I9PW51bGw/bnVsbDpvLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gdEt0KGwsYSxzKX0pfSk7dGhpcy5fcHJvcGVydHlFeHRlbnRzW3JdPWl9cmV0dXJuIHRoaXMuX3Byb3BlcnR5RXh0ZW50c1tyXSgpfSx0LnByb3RvdHlwZS5faW5jbHVkZWRWYWx1ZXNGb3JTY2FsZT1mdW5jdGlvbihyLG4pe3ZhciBpPXRoaXM7aWYoIXRoaXMuX2lzQW5jaG9yZWQmJiFuKXJldHVybltdO3ZhciBvPVtdO3JldHVybiB0aGlzLl9hdHRyQmluZGluZ3MuZWFjaChmdW5jdGlvbihhLHMpe2lmKGEuc2NhbGU9PT1yKXt2YXIgbD1pLmdldEV4dGVudHNGb3JBdHRyKHMpO2whPW51bGwmJihvPW8uY29uY2F0KHdkLm1lcmdlKGwpKSl9fSksdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5lYWNoKGZ1bmN0aW9uKGEscyl7aWYoYS5zY2FsZT09PXIpe3ZhciBsPWkuZ2V0RXh0ZW50c0ZvclByb3BlcnR5KHMpO2whPW51bGwmJihvPW8uY29uY2F0KHdkLm1lcmdlKGwpKSl9fSksb30sdC5wcm90b3R5cGUuYW5pbWF0b3I9ZnVuY3Rpb24ocixuKXtyZXR1cm4gbj09PXZvaWQgMD90aGlzLl9hbmltYXRvcnNbcl06KHRoaXMuX2FuaW1hdG9yc1tyXT1uLHRoaXMpfSx0LnByb3RvdHlwZS5yZW5kZXJlcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiByPT09dm9pZCAwP3RoaXMuX2NhbnZhcz09bnVsbD8ic3ZnIjoiY2FudmFzIjoodGhpcy5fY2FudmFzPT1udWxsJiZyPT09ImNhbnZhcyI/KHRoaXMuX2NhbnZhcz13ZC5zZWxlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikpLmNsYXNzZWQoInBsb3QtY2FudmFzIiwhMCksdGhpcy5fYnVmZmVyQ2FudmFzPXdkLnNlbGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSksdGhpcy5lbGVtZW50KCkhPW51bGwmJnRoaXMuX2FwcGVuZENhbnZhc05vZGUoKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihpKXtpLnVzZUNhbnZhcyhuLl9jYW52YXMpfSksdGhpcy5yZW5kZXIoKSk6dGhpcy5fY2FudmFzIT1udWxsJiZyPT0ic3ZnIiYmKHRoaXMuX2NhbnZhcy5yZW1vdmUoKSx0aGlzLl9jYW52YXM9bnVsbCx0aGlzLl9idWZmZXJDYW52YXM9bnVsbCx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihpKXtpLnVzZVNWRyhuLl9yZW5kZXJBcmVhKX0pLHRoaXMucmVuZGVyKCkpLHRoaXMpfSx0LnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLl9hZGREYXRhc2V0KHIpLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3RoaXMuX3JlbW92ZURhdGFzZXQocik7dmFyIG49dGhpcy5fY3JlYXRlRHJhd2VyKHIpO3JldHVybiB0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuc2V0KHIsbiksdGhpcy5faXNTZXR1cCYmdGhpcy5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0KHIpLHIub25VcGRhdGUodGhpcy5fb25EYXRhc2V0VXBkYXRlQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuX3JlbW92ZURhdGFzZXQociksdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5pbmRleE9mKHIpPT09LTE/dGhpczoodGhpcy5fcmVtb3ZlRGF0YXNldE5vZGVzKHIpLHIub2ZmVXBkYXRlKHRoaXMuX29uRGF0YXNldFVwZGF0ZUNhbGxiYWNrKSx0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZGVsZXRlKHIpLHRoaXMpfSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2RhdGFzZXRUb0RyYXdlci5nZXQocik7bi5yZW1vdmUoKX0sdC5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPVtdO3JldHVybiB0aGlzLl9kYXRhc2V0VG9EcmF3ZXIuZm9yRWFjaChmdW5jdGlvbihvLGEpe3JldHVybiBpLnB1c2goYSl9KSxyPT1udWxsP2k6KGkuZm9yRWFjaChmdW5jdGlvbihvKXtyZXR1cm4gbi5fcmVtb3ZlRGF0YXNldChvKX0pLHIuZm9yRWFjaChmdW5jdGlvbihvKXtyZXR1cm4gbi5fYWRkRGF0YXNldChvKX0pLHRoaXMuX29uRGF0YXNldFVwZGF0ZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgcDQuTnVsbH1dfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe30sdC5wcm90b3R5cGUuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcyxpPVtdO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyxhKXtmb3IodmFyIHM9bi5fZGF0YXNldFRvRHJhd2VyLmdldChvKSxsPTAsYz1vLmRhdGEoKSx1PWMubGVuZ3RoLGg9ZnVuY3Rpb24ocCl7dmFyIGQ9Y1twXSxnPW4uX3BpeGVsUG9pbnQoZCxwLG8pO2lmKFNkLk1hdGguaXNOYU4oZy54KXx8U2QuTWF0aC5pc05hTihnLnkpKXJldHVybiJjb250aW51ZSI7dmFyIF89bjtpLnB1c2goe2RhdHVtOmQsZ2V0IHBvc2l0aW9uKCl7cmV0dXJuIF8uX3BpeGVsUG9pbnQuY2FsbChfLGQscCxvKX0saW5kZXg6cCxkYXRhc2V0Om8sZGF0YXNldEluZGV4OmEsY29tcG9uZW50Om4sZHJhd2VyOnMsdmFsaWREYXR1bUluZGV4Omx9KSxsKyt9LGY9MDtmPHU7ZisrKWgoZil9KSxpfSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPW5ldyBTZC5NYXA7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiByLnNldChuLG4uZGF0YSgpKX0pLHJ9LHQucHJvdG90eXBlLl9wYWludD1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZGVsZXRlIHRoaXMuX2NhY2hlZEF0dHJUb1Byb2plY3Rvcjt2YXIgbj10aGlzLl9nZW5lcmF0ZURyYXdTdGVwcygpLGk9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLG89dGhpcy5kYXRhc2V0cygpLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gci5fZGF0YXNldFRvRHJhd2VyLmdldCh1KX0pO2lmKHRoaXMucmVuZGVyZXIoKT09PSJjYW52YXMiKXt2YXIgYT10aGlzLl9jYW52YXMubm9kZSgpLHM9YS5nZXRDb250ZXh0KCIyZCIpO3MuY2xlYXJSZWN0KDAsMCxhLmNsaWVudFdpZHRoLGEuY2xpZW50SGVpZ2h0KSx0aGlzLl9idWZmZXJDYW52YXNWYWxpZD0hMX10aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbih1LGgpe3ZhciBmPXQuYXBwbHlEcmF3U3RlcHMobix1KTtvW2hdLmRyYXcoaS5nZXQodSksZil9KTt2YXIgbD10aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKHUsaCl7cmV0dXJuIHQuZ2V0VG90YWxEcmF3VGltZShpLmdldCh1KSxuKX0pLGM9U2QuTWF0aC5tYXgobCwwKTt0aGlzLl9hZGRpdGlvbmFsUGFpbnQoYyl9LHQucHJvdG90eXBlLnNlbGVjdGlvbnM9ZnVuY3Rpb24ocil7dmFyIG49dGhpcztpZihyPT09dm9pZCAwJiYocj10aGlzLmRhdGFzZXRzKCkpLHRoaXMucmVuZGVyZXIoKT09PSJjYW52YXMiKXJldHVybiB3ZC5zZWxlY3RBbGwoKTt2YXIgaT1bXTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW4uX2RhdGFzZXRUb0RyYXdlci5nZXQobyk7aWYoYSE9bnVsbCl7dmFyIHM9YS5nZXRWaXN1YWxQcmltaXRpdmVzKCk7aS5wdXNoLmFwcGx5KGkscyl9fSksd2Quc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5lbnRpdGllcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9nZXRFbnRpdHlTdG9yZShyKS5lbnRpdGllcygpLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KGkpfSl9LHQucHJvdG90eXBlLmZpbHRlckVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIHRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKS5maWx0ZXIocikubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkoaSl9KX0sdC5wcm90b3R5cGUuX2dldEVudGl0eVN0b3JlPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbihhKXtyZXR1cm4gbi5fZW50aXR5Qm91bmRzKGEpfTtpZihyIT09dm9pZCAwKXt2YXIgbz1uZXcgU2QuRW50aXR5U3RvcmU7cmV0dXJuIG8uYWRkQWxsKHRoaXMuX2J1aWxkTGlnaHR3ZWlnaHRQbG90RW50aXRpZXMociksaSx0aGlzLl9sb2NhbE9yaWdpbkJvdW5kcygpKSxvfWVsc2UgaWYodGhpcy5fY2FjaGVkRW50aXR5U3RvcmU9PT12b2lkIDApe3ZhciBvPW5ldyBTZC5FbnRpdHlTdG9yZTtvLmFkZEFsbCh0aGlzLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzKHRoaXMuZGF0YXNldHMoKSksaSx0aGlzLl9sb2NhbE9yaWdpbkJvdW5kcygpKSx0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZT1vfXJldHVybiB0aGlzLl9jYWNoZWRFbnRpdHlTdG9yZX0sdC5wcm90b3R5cGUuX2xvY2FsT3JpZ2luQm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJue3RvcExlZnQ6e3g6MCx5OjB9LGJvdHRvbVJpZ2h0Ont4OnRoaXMud2lkdGgoKSx5OnRoaXMuaGVpZ2h0KCl9fX0sdC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj1yLmRhdHVtLGk9ci5pbmRleCxvPXIuZGF0YXNldCxhPXRoaXMuX3BpeGVsUG9pbnQobixpLG8pLHM9YS54LGw9YS55O3JldHVybnt4OnMseTpsLHdpZHRoOjAsaGVpZ2h0OjB9fSx0LnByb3RvdHlwZS5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5PWZ1bmN0aW9uKHIpe3ZhciBuPXtib3VuZHM6dGhpcy5fZW50aXR5Qm91bmRzKHIpLGNvbXBvbmVudDpyLmNvbXBvbmVudCxkYXRhc2V0OnIuZGF0YXNldCxkYXRhc2V0SW5kZXg6ci5kYXRhc2V0SW5kZXgsZGF0dW06ci5kYXR1bSxpbmRleDpyLmluZGV4LHBvc2l0aW9uOnIucG9zaXRpb24sc2VsZWN0aW9uOndkLnNlbGVjdChyLmRyYXdlci5nZXRWaXN1YWxQcmltaXRpdmVBdEluZGV4KHIudmFsaWREYXR1bUluZGV4KSl9O3JldHVybiBufSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3Rocm93IG5ldyBFcnJvcigicGxvdHMgbXVzdCBpbXBsZW1lbnQgZW50aXRpZXNBdCIpfSx0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXR5TmVhcmVzdChyKTtyZXR1cm4gbj09PXZvaWQgMD92b2lkIDA6dGhpcy5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG4pfSx0LnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKHIsbil7dmFyIGk7aWYobj09bnVsbCl7dmFyIG89cjtpPXt4Om8udG9wTGVmdC54LHk6by50b3BMZWZ0Lnksd2lkdGg6by5ib3R0b21SaWdodC54LW8udG9wTGVmdC54LGhlaWdodDpvLmJvdHRvbVJpZ2h0Lnktby50b3BMZWZ0Lnl9fWVsc2V7dmFyIGE9cjtpPXt4OmEubWluLHk6bi5taW4sd2lkdGg6YS5tYXgtYS5taW4saGVpZ2h0Om4ubWF4LW4ubWlufX1yZXR1cm4gdGhpcy5lbnRpdGllc0luQm91bmRzKGkpfSx0LnByb3RvdHlwZS5lbnRpdGllc0luQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5Cb3VuZHMocik7aWYoISFpKXJldHVybiBpLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfSl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLl9nZXRFbnRpdHlTdG9yZSgpLmVudGl0aWVzSW5YQm91bmRzKHIpO2lmKCEhaSlyZXR1cm4gaS5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIG4uX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShvKX0pfSx0LnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9dGhpcy5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdGllc0luWUJvdW5kcyhyKTtpZighIWkpcmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBuLl9saWdodHdlaWdodFBsb3RFbnRpdHlUb1Bsb3RFbnRpdHkobyl9KX0sdC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHIsbil7ci5vZmZVcGRhdGUodGhpcy5fcmVuZGVyQ2FsbGJhY2spLHIub2ZmVXBkYXRlKHRoaXMuX2RlZmVycmVkUmVzZXRFbnRpdHlTdG9yZSksci5yZW1vdmVJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2luY2x1ZGVkVmFsdWVzUHJvdmlkZXIpfSx0LnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHIsbil7ci5vblVwZGF0ZSh0aGlzLl9yZW5kZXJDYWxsYmFjayksci5vblVwZGF0ZSh0aGlzLl9kZWZlcnJlZFJlc2V0RW50aXR5U3RvcmUpLHIuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9pbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKX0sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3JldHVybnt9fSx0Ll9zY2FsZWRBY2Nlc3Nvcj1mdW5jdGlvbihyKXt2YXIgbj1yLnNjYWxlLGk9ci5hY2Nlc3NvcixvPXIucG9zdFNjYWxlLGE9bj09bnVsbD9pOmZ1bmN0aW9uKGwsYyx1KXtyZXR1cm4gbi5zY2FsZShpKGwsYyx1KSl9LHM9bz09bnVsbD9hOmZ1bmN0aW9uKGwsYyx1KXtyZXR1cm4gbyhhKGwsYyx1KSxsLGMsdSl9O3JldHVybiBzfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7cmV0dXJue3g6MCx5OjB9fSx0LnByb3RvdHlwZS5fYW5pbWF0ZU9uTmV4dFJlbmRlcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmltYXRlJiZ0aGlzLl9kYXRhQ2hhbmdlZH0sdC5PUFRJTUlaRV9NRU1PSVpFX1BST0pFQ1RPUlM9ITEsdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTj02MDAsdH0oRUhlLkNvbXBvbmVudCk7SkYuUGxvdD1rSGU7ZnVuY3Rpb24gdEt0KGUsdCxyKXt2YXIgbj10LmFjY2Vzc29yLGk9dC5zY2FsZTtpZihpPT1udWxsKXJldHVybltdO3ZhciBvPWUuZGF0YSgpO3IhPW51bGwmJihvPW8uZmlsdGVyKGZ1bmN0aW9uKGwsYyl7cmV0dXJuIHIobCxjLGUpfSkpO3ZhciBhPWZ1bmN0aW9uKGwsYyl7cmV0dXJuIG4obCxjLGUpfSxzPW8ubWFwKGEpO3JldHVybiBpLmV4dGVudE9mVmFsdWVzKHMpfX0pO3ZhciBlS3Q9SChzYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHNhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFJIZT0oZGUoKSxVdChwZSkpLE5IZT1ycygpLERIZT1GZSgpLE9IZT1Gb3QoKSx6SGU9ZnVuY3Rpb24oZSl7UkhlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5lbnRpdHlOZWFyZXN0PWZ1bmN0aW9uKHIpe3ZhciBuLGk9MS8wO3JldHVybiB0aGlzLmNvbXBvbmVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW8scz1hLmVudGl0eU5lYXJlc3Qocik7aWYocyE9bnVsbCl7dmFyIGw9REhlLk1hdGguZGlzdGFuY2VTcXVhcmVkKHMucG9zaXRpb24scik7bDw9aSYmKGk9bCxuPXMpfX0pLG59LHQucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihyKXtpZihyIT1udWxsJiYhKHIgaW5zdGFuY2VvZiBOSGUuUGxvdCkpdGhyb3cgbmV3IEVycm9yKCJQbG90IEdyb3VwIG9ubHkgYWNjZXB0cyBwbG90cyIpO3JldHVybiBlLnByb3RvdHlwZS5hcHBlbmQuY2FsbCh0aGlzLHIpLHRoaXN9LHR9KE9IZS5Hcm91cCk7c2F0LlBsb3RHcm91cD16SGV9KTt2YXIgckt0PUgobGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBGSGU9KGRlKCksVXQocGUpKSxxdT0oRXIoKSxVdChNcikpLEdvPUZlKCksQkhlPUdGKCksSEhlPWZ1bmN0aW9uKGUpe0ZIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPVtdKTt2YXIgbj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIG4uX3Jvd1BhZGRpbmc9MCxuLl9jb2x1bW5QYWRkaW5nPTAsbi5fcm93cz1bXSxuLl9yb3dXZWlnaHRzPVtdLG4uX2NvbHVtbldlaWdodHM9W10sbi5fblJvd3M9MCxuLl9uQ29scz0wLG4uX2NhbGN1bGF0ZWRMYXlvdXQ9bnVsbCxuLmFkZENsYXNzKCJ0YWJsZSIpLHIuZm9yRWFjaChmdW5jdGlvbihpLG8pe2kuZm9yRWFjaChmdW5jdGlvbihhLHMpe2EhPW51bGwmJm4uYWRkKGEsbyxzKX0pfSksbn1yZXR1cm4gdC5wcm90b3R5cGUuX2ZvckVhY2g9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjx0aGlzLl9uUm93cztuKyspZm9yKHZhciBpPTA7aTx0aGlzLl9uQ29scztpKyspdGhpcy5fcm93c1tuXVtpXSE9bnVsbCYmcih0aGlzLl9yb3dzW25dW2ldKX0sdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wO248dGhpcy5fblJvd3M7bisrKWZvcih2YXIgaT0wO2k8dGhpcy5fbkNvbHM7aSsrKWlmKHRoaXMuX3Jvd3Nbbl1baV09PT1yKXJldHVybiEwO3JldHVybiExfSx0LnByb3RvdHlwZS5jb21wb25lbnRBdD1mdW5jdGlvbihyLG4pe3JldHVybiByPDB8fHI+PXRoaXMuX25Sb3dzfHxuPDB8fG4+PXRoaXMuX25Db2xzP251bGw6dGhpcy5fcm93c1tyXVtuXX0sdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXRocm93IEVycm9yKCJDYW5ub3QgYWRkIG51bGwgdG8gYSB0YWJsZSBjZWxsIik7aWYoIXRoaXMuaGFzKHIpKXt2YXIgbz10aGlzLl9yb3dzW25dJiZ0aGlzLl9yb3dzW25dW2ldO2lmKG8hPW51bGwpdGhyb3cgbmV3IEVycm9yKCJjZWxsIGlzIG9jY3VwaWVkIik7ci5kZXRhY2goKSx0aGlzLl9uUm93cz1NYXRoLm1heChuKzEsdGhpcy5fblJvd3MpLHRoaXMuX25Db2xzPU1hdGgubWF4KGkrMSx0aGlzLl9uQ29scyksdGhpcy5fcGFkVGFibGVUb1NpemUodGhpcy5fblJvd3MsdGhpcy5fbkNvbHMpLHRoaXMuX3Jvd3Nbbl1baV09cix0aGlzLl9hZG9wdEFuZEFuY2hvcihyKSx0aGlzLnJlZHJhdygpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5fcmVtb3ZlPWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj0wO248dGhpcy5fblJvd3M7bisrKWZvcih2YXIgaT0wO2k8dGhpcy5fbkNvbHM7aSsrKWlmKHRoaXMuX3Jvd3Nbbl1baV09PT1yKXJldHVybiB0aGlzLl9yb3dzW25dW2ldPW51bGwsITA7cmV0dXJuITF9LHQucHJvdG90eXBlLl9pdGVyYXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtpPT09dm9pZCAwJiYoaT0hMSk7Zm9yKHZhciBvPXRoaXMuX3Jvd3MsYT1xdS50cmFuc3Bvc2UodGhpcy5fcm93cykscz1yLXRoaXMuX2NvbHVtblBhZGRpbmcqKHRoaXMuX25Db2xzLTEpLGw9bi10aGlzLl9yb3dQYWRkaW5nKih0aGlzLl9uUm93cy0xKSxjPXQuX2NhbGNDb21wb25lbnRXZWlnaHRzKHRoaXMuX3Jvd1dlaWdodHMsbyxmdW5jdGlvbih6KXtyZXR1cm4gej09bnVsbHx8ei5maXhlZEhlaWdodCgpfSksdT10Ll9jYWxjQ29tcG9uZW50V2VpZ2h0cyh0aGlzLl9jb2x1bW5XZWlnaHRzLGEsZnVuY3Rpb24oeil7cmV0dXJuIHo9PW51bGx8fHouZml4ZWRXaWR0aCgpfSksaD11Lm1hcChmdW5jdGlvbih6KXtyZXR1cm4gej09PTA/LjU6en0pLGY9Yy5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo9PT0wPy41Onp9KSxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShoLHMpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKGYsbCksZz1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Db2xzKSxfPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KDAsdGhpcy5fblJvd3MpLHkseCxiPTAsUyxDLFA7Oyl7dmFyIGs9R28uQXJyYXkuYWRkKF8sZCksTz1Hby5BcnJheS5hZGQoZyxwKTtTPXRoaXMuX2RldGVybWluZUd1YXJhbnRlZXMoTyxrLGkpLGc9Uy5ndWFyYW50ZWVkV2lkdGhzLF89Uy5ndWFyYW50ZWVkSGVpZ2h0cyxDPVMud2FudHNXaWR0aEFyci5zb21lKGZ1bmN0aW9uKHope3JldHVybiB6fSksUD1TLndhbnRzSGVpZ2h0QXJyLnNvbWUoZnVuY3Rpb24oeil7cmV0dXJuIHp9KTt2YXIgRD15LEI9eDt5PXMtcXUuc3VtKFMuZ3VhcmFudGVlZFdpZHRocykseD1sLXF1LnN1bShTLmd1YXJhbnRlZWRIZWlnaHRzKTt2YXIgST12b2lkIDA7Qz8oST1TLndhbnRzV2lkdGhBcnIubWFwKGZ1bmN0aW9uKHope3JldHVybiB6Py4xOjB9KSxJPUdvLkFycmF5LmFkZChJLHUpKTpJPXU7dmFyIEw9dm9pZCAwO1A/KEw9Uy53YW50c0hlaWdodEFyci5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHo/LjE6MH0pLEw9R28uQXJyYXkuYWRkKEwsYykpOkw9YyxwPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShJLHkpLGQ9dC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlKEwseCksYisrO3ZhciBSPXk+MCYmeSE9PUQsRj14PjAmJnghPT1CO2lmKCEoUnx8Ril8fGI+NSlicmVha31yZXR1cm4geT1zLXF1LnN1bShTLmd1YXJhbnRlZWRXaWR0aHMpLHg9bC1xdS5zdW0oUy5ndWFyYW50ZWVkSGVpZ2h0cykscD10Ll9jYWxjUHJvcG9ydGlvbmFsU3BhY2UodSx5KSxkPXQuX2NhbGNQcm9wb3J0aW9uYWxTcGFjZShjLHgpLHtjb2xQcm9wb3J0aW9uYWxTcGFjZTpwLHJvd1Byb3BvcnRpb25hbFNwYWNlOmQsZ3VhcmFudGVlZFdpZHRoczpTLmd1YXJhbnRlZWRXaWR0aHMsZ3VhcmFudGVlZEhlaWdodHM6Uy5ndWFyYW50ZWVkSGVpZ2h0cyx3YW50c1dpZHRoOkMsd2FudHNIZWlnaHQ6UH19LHQucHJvdG90eXBlLl9kZXRlcm1pbmVHdWFyYW50ZWVzPWZ1bmN0aW9uKHIsbixpKXtpPT09dm9pZCAwJiYoaT0hMSk7dmFyIG89R28uQXJyYXkuY3JlYXRlRmlsbGVkQXJyYXkoMCx0aGlzLl9uQ29scyksYT1Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHRoaXMuX25Sb3dzKSxzPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KCExLHRoaXMuX25Db2xzKSxsPUdvLkFycmF5LmNyZWF0ZUZpbGxlZEFycmF5KCExLHRoaXMuX25Sb3dzKTtyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKGZ1bmN0aW9uKGMsdSl7Yy5mb3JFYWNoKGZ1bmN0aW9uKGgsZil7dmFyIHA7aCE9bnVsbD9wPWgucmVxdWVzdGVkU3BhY2UocltmXSxuW3VdKTpwPXttaW5XaWR0aDowLG1pbkhlaWdodDowfTt2YXIgZD1pP01hdGgubWluKHAubWluV2lkdGgscltmXSk6cC5taW5XaWR0aDtvW2ZdPU1hdGgubWF4KG9bZl0sZCk7dmFyIGc9aT9NYXRoLm1pbihwLm1pbkhlaWdodCxuW3VdKTpwLm1pbkhlaWdodDthW3VdPU1hdGgubWF4KGFbdV0sZyk7dmFyIF89cC5taW5XaWR0aD5yW2ZdO3NbZl09c1tmXXx8Xzt2YXIgeT1wLm1pbkhlaWdodD5uW3VdO2xbdV09bFt1XXx8eX0pfSkse2d1YXJhbnRlZWRXaWR0aHM6byxndWFyYW50ZWVkSGVpZ2h0czphLHdhbnRzV2lkdGhBcnI6cyx3YW50c0hlaWdodEFycjpsfX0sdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlZExheW91dD10aGlzLl9pdGVyYXRlTGF5b3V0KHIsbikse21pbldpZHRoOnF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRXaWR0aHMpLG1pbkhlaWdodDpxdS5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkSGVpZ2h0cyl9fSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzO2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgYT1xdS5zdW0odGhpcy5fY2FsY3VsYXRlZExheW91dC5ndWFyYW50ZWVkV2lkdGhzKSxzPXF1LnN1bSh0aGlzLl9jYWxjdWxhdGVkTGF5b3V0Lmd1YXJhbnRlZWRIZWlnaHRzKSxsPXRoaXMuX2NhbGN1bGF0ZWRMYXlvdXQ7KGE+dGhpcy53aWR0aCgpfHxzPnRoaXMuaGVpZ2h0KCkpJiYobD10aGlzLl9pdGVyYXRlTGF5b3V0KHRoaXMud2lkdGgoKSx0aGlzLmhlaWdodCgpLCEwKSk7dmFyIGM9MCx1PUdvLkFycmF5LmFkZChsLnJvd1Byb3BvcnRpb25hbFNwYWNlLGwuZ3VhcmFudGVlZEhlaWdodHMpLGg9R28uQXJyYXkuYWRkKGwuY29sUHJvcG9ydGlvbmFsU3BhY2UsbC5ndWFyYW50ZWVkV2lkdGhzKTtyZXR1cm4gdGhpcy5fcm93cy5mb3JFYWNoKGZ1bmN0aW9uKGYscCl7dmFyIGQ9MDtmLmZvckVhY2goZnVuY3Rpb24oZyxfKXtnIT1udWxsJiZnLmNvbXB1dGVMYXlvdXQoe3g6ZCx5OmN9LGhbX10sdVtwXSksZCs9aFtfXStvLl9jb2x1bW5QYWRkaW5nfSksYys9dVtwXStvLl9yb3dQYWRkaW5nfSksdGhpc30sdC5wcm90b3R5cGUucm93UGFkZGluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9yb3dQYWRkaW5nO2lmKCFHby5NYXRoLmlzVmFsaWROdW1iZXIocil8fHI8MCl0aHJvdyBFcnJvcigicm93UGFkZGluZyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9yb3dQYWRkaW5nPXIsdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5jb2x1bW5QYWRkaW5nPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX2NvbHVtblBhZGRpbmc7aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihyKXx8cjwwKXRocm93IEVycm9yKCJjb2x1bW5QYWRkaW5nIG11c3QgYmUgYSBub24tbmVnYXRpdmUgZmluaXRlIHZhbHVlIik7cmV0dXJuIHRoaXMuX2NvbHVtblBhZGRpbmc9cix0aGlzLnJlZHJhdygpLHRoaXN9LHQucHJvdG90eXBlLnJvd1dlaWdodD1mdW5jdGlvbihyLG4pe2lmKG49PW51bGwpcmV0dXJuIHRoaXMuX3Jvd1dlaWdodHNbcl07aWYoIUdvLk1hdGguaXNWYWxpZE51bWJlcihuKXx8bjwwKXRocm93IEVycm9yKCJyb3dXZWlnaHQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBmaW5pdGUgdmFsdWUiKTtyZXR1cm4gdGhpcy5fcm93V2VpZ2h0c1tyXT1uLHRoaXMucmVkcmF3KCksdGhpc30sdC5wcm90b3R5cGUuY29sdW1uV2VpZ2h0PWZ1bmN0aW9uKHIsbil7aWYobj09bnVsbClyZXR1cm4gdGhpcy5fY29sdW1uV2VpZ2h0c1tyXTtpZighR28uTWF0aC5pc1ZhbGlkTnVtYmVyKG4pfHxuPDApdGhyb3cgRXJyb3IoImNvbHVtbldlaWdodCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGZpbml0ZSB2YWx1ZSIpO3JldHVybiB0aGlzLl9jb2x1bW5XZWlnaHRzW3JdPW4sdGhpcy5yZWRyYXcoKSx0aGlzfSx0LnByb3RvdHlwZS5maXhlZFdpZHRoPWZ1bmN0aW9uKCl7dmFyIHI9cXUudHJhbnNwb3NlKHRoaXMuX3Jvd3MpO3JldHVybiB0Ll9maXhlZFNwYWNlKHIsZnVuY3Rpb24obil7cmV0dXJuIG49PW51bGx8fG4uZml4ZWRXaWR0aCgpfSl9LHQucHJvdG90eXBlLmZpeGVkSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuX2ZpeGVkU3BhY2UodGhpcy5fcm93cyxmdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbHx8ci5maXhlZEhlaWdodCgpfSl9LHQucHJvdG90eXBlLl9wYWRUYWJsZVRvU2l6ZT1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT0wO2k8cjtpKyspe3RoaXMuX3Jvd3NbaV09PT12b2lkIDAmJih0aGlzLl9yb3dzW2ldPVtdLHRoaXMuX3Jvd1dlaWdodHNbaV09bnVsbCk7Zm9yKHZhciBvPTA7bzxuO28rKyl0aGlzLl9yb3dzW2ldW29dPT09dm9pZCAwJiYodGhpcy5fcm93c1tpXVtvXT1udWxsKX1mb3IodmFyIG89MDtvPG47bysrKXRoaXMuX2NvbHVtbldlaWdodHNbb109PT12b2lkIDAmJih0aGlzLl9jb2x1bW5XZWlnaHRzW29dPW51bGwpfSx0Ll9jYWxjQ29tcG9uZW50V2VpZ2h0cz1mdW5jdGlvbihyLG4saSl7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKG8sYSl7aWYobyE9bnVsbClyZXR1cm4gbzt2YXIgcz1uW2FdLm1hcChpKSxsPXMucmVkdWNlKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGMmJnV9LCEwKTtyZXR1cm4gbD8wOjF9KX0sdC5fY2FsY1Byb3BvcnRpb25hbFNwYWNlPWZ1bmN0aW9uKHIsbil7dmFyIGk9cXUuc3VtKHIpO3JldHVybiBpPT09MD9Hby5BcnJheS5jcmVhdGVGaWxsZWRBcnJheSgwLHIubGVuZ3RoKTpyLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gbipvL2l9KX0sdC5fZml4ZWRTcGFjZT1mdW5jdGlvbihyLG4pe3ZhciBpPWZ1bmN0aW9uKGEpe3JldHVybiBhLnJlZHVjZShmdW5jdGlvbihzLGwpe3JldHVybiBzJiZsfSwhMCl9LG89ZnVuY3Rpb24oYSl7cmV0dXJuIGkoYS5tYXAobikpfTtyZXR1cm4gaShyLm1hcChvKSl9LHR9KEJIZS5Db21wb25lbnRDb250YWluZXIpO2xhdC5UYWJsZT1ISGV9KTt2YXIgbkt0PUgoY2F0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBWSGU9KGRlKCksVXQocGUpKSxVSGU9VW90KCkscUhlPTIsR0hlPWZ1bmN0aW9uKGUpe1ZIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZSE9PW51bGwmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiByLl9tYXhMaW5lcz1xSGUscn1yZXR1cm4gdC5wcm90b3R5cGUucmVxdWVzdGVkU3BhY2U9ZnVuY3Rpb24ocixuKXt0aGlzLl93cmFwcGVyLm1heExpbmVzKHRoaXMuX21heExpbmVzKTt2YXIgaT10aGlzLmFuZ2xlKCk9PT0wP3I6bjtpPT09MCYmKGk9MS8wKTt2YXIgbz10aGlzLl93cmFwcGVyLndyYXAodGhpcy5fdGV4dCx0aGlzLl9tZWFzdXJlcixpKSxhPXRoaXMuX21lYXN1cmVyLm1lYXN1cmUoby53cmFwcGVkVGV4dCkscz0odGhpcy5hbmdsZSgpPT09MD9hLndpZHRoOmEuaGVpZ2h0KSsyKnRoaXMucGFkZGluZygpLGw9KHRoaXMuYW5nbGUoKT09PTA/YS5oZWlnaHQ6YS53aWR0aCkrMip0aGlzLnBhZGRpbmcoKTtyZXR1cm57bWluV2lkdGg6cyxtaW5IZWlnaHQ6bH19LHQucHJvdG90eXBlLm1heExpbmVzPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLl9tYXhMaW5lczoodGhpcy5fbWF4TGluZXM9cix0aGlzLnJlZHJhdygpLHRoaXMpfSx0fShVSGUuTGFiZWwpO2NhdC5XcmFwcGVkTGFiZWw9R0hlfSk7dmFyIGlLdD1IKHVhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodWF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgV0hlPShkZSgpLFV0KHBlKSksWUhlPVVGKCksakhlPWZ1bmN0aW9uKGUpe1dIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJ4LWRyYWctYm94LWxheWVyIiksci5faGFzQ29ybmVycz0hMSxyfXJldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldEJvdW5kcyh0aGlzLmJvdW5kcygpKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4OnIudG9wTGVmdC54LHk6MH0sYm90dG9tUmlnaHQ6e3g6ci5ib3R0b21SaWdodC54LHk6dGhpcy5oZWlnaHQoKX19KX0sdC5wcm90b3R5cGUuX3NldFJlc2l6YWJsZUNsYXNzZXM9ZnVuY3Rpb24ocil7ciYmdGhpcy5lbmFibGVkKCk/dGhpcy5hZGRDbGFzcygieC1yZXNpemFibGUiKTp0aGlzLnJlbW92ZUNsYXNzKCJ4LXJlc2l6YWJsZSIpfSx0LnByb3RvdHlwZS55U2NhbGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueVNjYWxlLmNhbGwodGhpcyk7dGhyb3cgbmV3IEVycm9yKCJ5U2NhbGVzIGNhbm5vdCBiZSBzZXQgb24gYW4gWERyYWdCb3hMYXllciIpfSx0LnByb3RvdHlwZS55RXh0ZW50PWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnlFeHRlbnQuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoIlhEcmFnQm94TGF5ZXIgaGFzIG5vIHlFeHRlbnQiKX0sdH0oWUhlLkRyYWdCb3hMYXllcik7dWF0LlhEcmFnQm94TGF5ZXI9akhlfSk7dmFyIG9LdD1IKGhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoaGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgWEhlPShkZSgpLFV0KHBlKSksJEhlPVVGKCksS0hlPWZ1bmN0aW9uKGUpe1hIZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLmFkZENsYXNzKCJ5LWRyYWctYm94LWxheWVyIiksci5faGFzQ29ybmVycz0hMSxyfXJldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldEJvdW5kcyh0aGlzLmJvdW5kcygpKSx0aGlzfSx0LnByb3RvdHlwZS5fc2V0Qm91bmRzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9zZXRCb3VuZHMuY2FsbCh0aGlzLHt0b3BMZWZ0Ont4OjAseTpyLnRvcExlZnQueX0sYm90dG9tUmlnaHQ6e3g6dGhpcy53aWR0aCgpLHk6ci5ib3R0b21SaWdodC55fX0pfSx0LnByb3RvdHlwZS5fc2V0UmVzaXphYmxlQ2xhc3Nlcz1mdW5jdGlvbihyKXtyJiZ0aGlzLmVuYWJsZWQoKT90aGlzLmFkZENsYXNzKCJ5LXJlc2l6YWJsZSIpOnRoaXMucmVtb3ZlQ2xhc3MoInktcmVzaXphYmxlIil9LHQucHJvdG90eXBlLnhTY2FsZT1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54U2NhbGUuY2FsbCh0aGlzKTt0aHJvdyBuZXcgRXJyb3IoInhTY2FsZXMgY2Fubm90IGJlIHNldCBvbiBhbiBZRHJhZ0JveExheWVyIil9LHQucHJvdG90eXBlLnhFeHRlbnQ9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueEV4dGVudC5jYWxsKHRoaXMpO3Rocm93IG5ldyBFcnJvcigiWURyYWdCb3hMYXllciBoYXMgbm8geEV4dGVudCIpfSx0fSgkSGUuRHJhZ0JveExheWVyKTtoYXQuWURyYWdCb3hMYXllcj1LSGV9KTt2YXIgSW90PUgoX2E9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF9hLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgTnM9KGRlKCksVXQocGUpKTtOcy5fX2V4cG9ydFN0YXIoVUYoKSxfYSk7TnMuX19leHBvcnRTdGFyKEUkdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoVCR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihGb3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKGtvdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoQSR0KCksX2EpO05zLl9fZXhwb3J0U3RhcihVb3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKFAkdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIoZUt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihDb3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKHJLdCgpLF9hKTtOcy5fX2V4cG9ydFN0YXIobkt0KCksX2EpO05zLl9fZXhwb3J0U3RhcihpS3QoKSxfYSk7TnMuX19leHBvcnRTdGFyKG9LdCgpLF9hKX0pO3ZhciBwYXQ9SChmYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGZhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFpIZT0oZGUoKSxVdChwZSkpLEpIZT1EZigpLFFIZT1mdW5jdGlvbihlKXtaSGUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImFyYyBmaWxsIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0sdH0oSkhlLlNWR0RyYXdlcik7ZmF0LkFyY1NWR0RyYXdlcj1RSGV9KTt2YXIgbWF0PUgoZGF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0VmU9KGRlKCksVXQocGUpKSxlVmU9RGYoKSxyVmU9ZnVuY3Rpb24oZSl7dFZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsInBhdGgiLCJhcmMgb3V0bGluZSIpfHx0aGlzfXJldHVybiB0LnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0QXR0cmlidXRlcz1mdW5jdGlvbihyKXtyLnN0eWxlKCJmaWxsIiwibm9uZSIpfSx0fShlVmUuU1ZHRHJhd2VyKTtkYXQuQXJjT3V0bGluZVNWR0RyYXdlcj1yVmV9KTt2YXIgZ2F0PUgodEI9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRCLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgblZlPShkZSgpLFV0KHBlKSksUUY9RjEoKSxpVmU9RGYoKSxvVmU9ZnVuY3Rpb24oZSl7blZlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXtyZXR1cm4gZS5jYWxsKHRoaXMsInBhdGgiLCJhcmVhIil8fHRoaXN9cmV0dXJuIHQucHJvdG90eXBlLl9hcHBseURlZmF1bHRBdHRyaWJ1dGVzPWZ1bmN0aW9uKHIpe3Iuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0sdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LHR9KGlWZS5TVkdEcmF3ZXIpO3RCLkFyZWFTVkdEcmF3ZXI9b1ZlO3ZhciBhVmU9WyJvcGFjaXR5IiwiZmlsbCIsImZpbGwtb3BhY2l0eSJdLHNWZT1bIm9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiXTtmdW5jdGlvbiBsVmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBvPVFGLnJlc29sdmVBdHRyaWJ1dGVzKGksYVZlLG5bMF0sMCk7UUYucmVuZGVyQXJlYShyLGUoKSxuWzBdLG8pO3ZhciBhPVFGLnJlc29sdmVBdHRyaWJ1dGVzKGksc1ZlLG5bMF0sMCk7UUYucmVuZGVyTGluZShyLHQoKSxuWzBdLGEpfX10Qi5tYWtlQXJlYUNhbnZhc0RyYXdTdGVwPWxWZX0pO3ZhciByQj1IKGVCPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGNWZT0oZGUoKSxVdChwZSkpLGFLdD1GMSgpLHVWZT1EZigpLGhWZT1mdW5jdGlvbihlKXtjVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsImxpbmUiKXx8dGhpc31yZXR1cm4gdC5wcm90b3R5cGUuX2FwcGx5RGVmYXVsdEF0dHJpYnV0ZXM9ZnVuY3Rpb24ocil7ci5zdHlsZSgiZmlsbCIsIm5vbmUiKX0sdC5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleC5jYWxsKHRoaXMsMCl9LHR9KHVWZS5TVkdEcmF3ZXIpO2VCLkxpbmVTVkdEcmF3ZXI9aFZlO3ZhciBmVmU9WyJvcGFjaXR5Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2Utd2lkdGgiLCJzdHJva2UiLCJzdHJva2UtZGFzaGFycmF5Il07ZnVuY3Rpb24gcFZlKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGk9YUt0LnJlc29sdmVBdHRyaWJ1dGVzKG4sZlZlLHJbMF0sMCk7YUt0LnJlbmRlckxpbmUodCxlKCksclswXSxpKX19ZUIubWFrZUxpbmVDYW52YXNEcmF3U3RlcD1wVmV9KTt2YXIgaUI9SChQUz0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUFMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBzS3Q9KGRlKCksVXQocGUpKSxuQj1GMSgpLGRWZT1EZigpLG1WZT1mdW5jdGlvbihlKXtzS3QuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdChyKXtyPT09dm9pZCAwJiYocj0iIik7dmFyIG49ZS5jYWxsKHRoaXMsInJlY3QiLCIiKXx8dGhpcztyZXR1cm4gbi5fcm9vdENsYXNzTmFtZT1yLG4uX3Jvb3QuY2xhc3NlZChuLl9yb290Q2xhc3NOYW1lLCEwKSxufXJldHVybiB0fShkVmUuU1ZHRHJhd2VyKTtQUy5SZWN0YW5nbGVTVkdEcmF3ZXI9bVZlO3ZhciBnVmU9bkIuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiLCJ3aWR0aCIsImhlaWdodCJdKTtQUy5SZWN0YW5nbGVDYW52YXNEcmF3U3RlcD1mdW5jdGlvbihlLHQscil7ZS5zYXZlKCk7Zm9yKHZhciBuPXQubGVuZ3RoLGk9MDtpPG47aSsrKXt2YXIgbz10W2ldO2lmKG8hPW51bGwpe3ZhciBhPW5CLnJlc29sdmVBdHRyaWJ1dGVzKHIsZ1ZlLG8saSk7ZS5iZWdpblBhdGgoKSxlLnJlY3QoYS54LGEueSxhLndpZHRoLGEuaGVpZ2h0KSxuQi5yZW5kZXJQYXRoV2l0aFN0eWxlKGUsYSl9fWUucmVzdG9yZSgpfTt2YXIgX1ZlPWZ1bmN0aW9uKGUpe3NLdC5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3JldHVybiBlLmNhbGwodGhpcyxyLFBTLlJlY3RhbmdsZUNhbnZhc0RyYXdTdGVwKXx8dGhpc31yZXR1cm4gdH0obkIuQ2FudmFzRHJhd2VyKTtQUy5SZWN0YW5nbGVDYW52YXNEcmF3ZXI9X1ZlfSk7dmFyIHlhdD1IKF9hdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoX2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgeVZlPShkZSgpLFV0KHBlKSksdlZlPURmKCkseFZlPWZ1bmN0aW9uKGUpe3lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7cmV0dXJuIGUuY2FsbCh0aGlzLCJsaW5lIiwiIil8fHRoaXN9cmV0dXJuIHR9KHZWZS5TVkdEcmF3ZXIpO19hdC5TZWdtZW50U1ZHRHJhd2VyPXhWZX0pO3ZhciBsS3Q9SCh2YXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHZhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGJWZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe249PT12b2lkIDAmJihuPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKSx0aGlzLnNjcmVlbldpZHRoPXQsdGhpcy5zY3JlZW5IZWlnaHQ9cix0aGlzLmRldmljZVBpeGVsUmF0aW89bix0aGlzLnBpeGVsV2lkdGg9dCpuLHRoaXMucGl4ZWxIZWlnaHQ9cipuLHRoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksZS5zaXplUGl4ZWxzKHRoaXMuY3R4LHQscixuKX1yZXR1cm4gZS5zaXplUGl4ZWxzPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBvPXQuY2FudmFzO28ud2lkdGg9cippLG8uaGVpZ2h0PW4qaSxvLnN0eWxlLndpZHRoPXIrInB4IixvLnN0eWxlLmhlaWdodD1uKyJweCIsdC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHQuc2NhbGUoaSxpKX0sZS5wcm90b3R5cGUuYmxpdD1mdW5jdGlvbih0LHIsbil7cj09PXZvaWQgMCYmKHI9MCksbj09PXZvaWQgMCYmKG49MCksdC5kcmF3SW1hZ2UodGhpcy5jYW52YXMscixuLHRoaXMuc2NyZWVuV2lkdGgsdGhpcy5zY3JlZW5IZWlnaHQpfSxlLnByb3RvdHlwZS5ibGl0Q2VudGVyPWZ1bmN0aW9uKHQscixuKXtyPT09dm9pZCAwJiYocj0wKSxuPT09dm9pZCAwJiYobj0wKSx0aGlzLmJsaXQodCxNYXRoLmZsb29yKHItdGhpcy5zY3JlZW5XaWR0aC8yKSxNYXRoLmZsb29yKG4tdGhpcy5zY3JlZW5IZWlnaHQvMikpfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCxyLG4pe249PT12b2lkIDAmJihuPSExKTt2YXIgaT10aGlzLmRldmljZVBpeGVsUmF0aW87cmV0dXJuIHRoaXMuc2NyZWVuV2lkdGg9dCx0aGlzLnNjcmVlbkhlaWdodD1yLHRoaXMucGl4ZWxXaWR0aD10KmksdGhpcy5waXhlbEhlaWdodD1yKmksZS5zaXplUGl4ZWxzKHRoaXMuY3R4LHQscixpKSxuJiZ0aGlzLmN0eC50cmFuc2xhdGUodC8yLHQvMiksdGhpc30sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcyxuPXIucGl4ZWxXaWR0aCxpPXIucGl4ZWxIZWlnaHQsbz1yLmN0eDtyZXR1cm4gby5zYXZlKCksby5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHQ9PW51bGw/by5jbGVhclJlY3QoMCwwLG4saSk6KG8uZmlsbFN0eWxlPXQsby5maWxsUmVjdCgwLDAsbixpKSksby5yZXN0b3JlKCksdGhpc30sZS5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3R4LmdldEltYWdlRGF0YSgwLDAsdGhpcy5waXhlbFdpZHRoLHRoaXMucGl4ZWxIZWlnaHQpfSxlfSgpO3ZhdC5DYW52YXNCdWZmZXI9YlZlfSk7dmFyIHhhdD1IKG9CPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShvQiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdWZT0oZGUoKSxVdChwZSkpLGQ0PUYxKCksU1ZlPWxLdCgpLE1WZT1EZigpLEVWZT1mdW5jdGlvbihlKXt3VmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3JldHVybiBlLmNhbGwodGhpcywicGF0aCIsInN5bWJvbCIpfHx0aGlzfXJldHVybiB0fShNVmUuU1ZHRHJhd2VyKTtvQi5TeW1ib2xTVkdEcmF3ZXI9RVZlO3ZhciBUVmU9ZDQuQ29udGV4dFN0eWxlQXR0cnMuY29uY2F0KFsieCIsInkiXSk7ZnVuY3Rpb24gQ1ZlKGUsdCxyLG4pe3ZhciBpPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKG8sYSxzKXtmb3IodmFyIGw9by5jYW52YXMsYz1sLmNsaWVudFdpZHRoLHU9bC5jbGllbnRIZWlnaHQsaD1uPT09dm9pZCAwP25ldyBTVmUuQ2FudmFzQnVmZmVyKDAsMCk6bixmPXQoKSxwPXIoKSxkPW51bGwsZz1udWxsLF89bnVsbCx5PTA7eTxhLmxlbmd0aDt5Kyspe3ZhciB4PWFbeV07aWYoeCE9bnVsbCl7dmFyIGI9ZDQucmVzb2x2ZUF0dHJpYnV0ZXMocyxUVmUseCx5KSxTPXAoeCx5LGUpO2lmKCEhQVZlKGMsdSxiLngsYi55LFMpKXt2YXIgQz1QVmUoZCxiLGQ0LkNvbnRleHRTdHlsZUF0dHJzKSxQPWYoeCx5LGkuX2RhdGFzZXQpO2lmKCEoQyYmXz09UyYmZz09UCkpe3ZhciBrPWQ0LmdldFN0cm9rZVdpZHRoKGIpLE89UytrKzE7KE8+aC5zY3JlZW5XaWR0aHx8Tz5oLnNjcmVlbkhlaWdodCkmJmgucmVzaXplKE8sTywhMCksaC5jbGVhcigpO3ZhciBEPWguY3R4O0QuYmVnaW5QYXRoKCksUChTKS5jb250ZXh0KEQpKG51bGwpLEQuY2xvc2VQYXRoKCksZDQucmVuZGVyUGF0aFdpdGhTdHlsZShELGIpLGc9UCxfPVMsZD1ifWguYmxpdENlbnRlcihvLGIueCxiLnkpfX19fX1vQi5tYWtlU3ltYm9sQ2FudmFzRHJhd1N0ZXA9Q1ZlO2Z1bmN0aW9uIEFWZShlLHQscixuLGkpe3JldHVybiByK2k+PTAmJnItaTw9ZSYmbitpPj0wJiZuLWk8PXR9ZnVuY3Rpb24gUFZlKGUsdCxyKXtpZihlPT1udWxsKXJldHVybiExO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKGVbaV0hPXRbaV0pcmV0dXJuITF9cmV0dXJuITB9fSk7dmFyIEIxPUgoRGM9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KERjLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgT2Y9KGRlKCksVXQocGUpKTtPZi5fX2V4cG9ydFN0YXIocGF0KCksRGMpO09mLl9fZXhwb3J0U3RhcihtYXQoKSxEYyk7T2YuX19leHBvcnRTdGFyKGdhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIoRjEoKSxEYyk7T2YuX19leHBvcnRTdGFyKFV1KCksRGMpO09mLl9fZXhwb3J0U3RhcihyQigpLERjKTtPZi5fX2V4cG9ydFN0YXIoaUIoKSxEYyk7T2YuX19leHBvcnRTdGFyKHlhdCgpLERjKTtPZi5fX2V4cG9ydFN0YXIoRGYoKSxEYyk7T2YuX19leHBvcnRTdGFyKHhhdCgpLERjKX0pO3ZhciBIMT1IKHdhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkod2F0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgSVZlPShkZSgpLFV0KHBlKSksY0t0PWtzKCksYmF0PUZlKCksTFZlPW9hdCgpLG00PXJzKCksa1ZlPWZ1bmN0aW9uKGUpe0lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHIuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITEsci5fZGVmZXJyZWRSZW5kZXJpbmc9ITEsci5fYXBwbHlEZWZlcnJlZFJlbmRlcmluZ1RyYW5zZm9ybT1mdW5jdGlvbihuLGksbyxhKXshci5faXNBbmNob3JlZHx8KHIuX3JlbmRlckFyZWEhPW51bGwmJnIuX3JlbmRlckFyZWEuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbisiLCAiK2krIikgc2NhbGUoIitvKyIsICIrYSsiKSIpLHIuX2NhbnZhcyE9bnVsbCYmci5fY2FudmFzLnN0eWxlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituKyJweCwgIitpKyJweCkgc2NhbGUoIitvKyIsICIrYSsiKSIpKX0sci5hZGRDbGFzcygieHktcGxvdCIpLHIuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YQ2FsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHIuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YKCl9LHIuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s9ZnVuY3Rpb24obil7cmV0dXJuIHIuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZKCl9LHIuX3JlbmRlckNhbGxiYWNrPWZ1bmN0aW9uKCl7aWYoci5kZWZlcnJlZFJlbmRlcmluZygpKXt2YXIgbj1yLngoKSYmci54KCkuc2NhbGUsaT1yLnkoKSYmci55KCkuc2NhbGU7ci5fZGVmZXJyZWRSZW5kZXJlci51cGRhdGVEb21haW5zKG4saSl9ZWxzZSByLnJlbmRlcigpfSxyLl9kZWZlcnJlZFJlbmRlcmVyPW5ldyBMVmUuRGVmZXJyZWRSZW5kZXJlcihmdW5jdGlvbigpe3JldHVybiByLnJlbmRlcigpfSxyLl9hcHBseURlZmVycmVkUmVuZGVyaW5nVHJhbnNmb3JtKSxyfXJldHVybiB0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZlcnJlZFJlbmRlcmluZygpJiZ0aGlzLl9kZWZlcnJlZFJlbmRlcmVyLnJlc2V0VHJhbnNmb3JtcygpLGUucHJvdG90eXBlLnJlbmRlci5jYWxsKHRoaXMpfSx0LnByb3RvdHlwZS5kZWZlcnJlZFJlbmRlcmluZz1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9kZWZlcnJlZFJlbmRlcmluZztpZihyKXt2YXIgbj10aGlzLngoKSYmdGhpcy54KCkuc2NhbGUsaT10aGlzLnkoKSYmdGhpcy55KCkuc2NhbGU7dGhpcy5fZGVmZXJyZWRSZW5kZXJlci5zZXREb21haW5zKG4saSl9cmV0dXJuIHRoaXMuX2RlZmVycmVkUmVuZGVyaW5nPXIsdGhpc30sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4saSl7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWF9LRVkpO3RoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YX0tFWSxyLG4saSk7dmFyIG89dGhpcy53aWR0aCgpO3JldHVybiBuIT1udWxsJiZvIT1udWxsJiZuLnJhbmdlKFswLG9dKSx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVZRXh0ZW50c0FuZEF1dG9kb21haW4oKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1lfS0VZKTt0aGlzLl9iaW5kUHJvcGVydHkodC5fWV9LRVkscixuLGkpO3ZhciBvPXRoaXMuaGVpZ2h0KCk7cmV0dXJuIG4hPW51bGwmJm8hPW51bGwmJihuIGluc3RhbmNlb2YgY0t0LkNhdGVnb3J5P24ucmFuZ2UoWzAsb10pOm4ucmFuZ2UoW28sMF0pKSx0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluJiZ0aGlzLl91cGRhdGVYRXh0ZW50c0FuZEF1dG9kb21haW4oKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXtyZXR1cm4gcj09PSJ4IiYmdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj90aGlzLl9tYWtlRmlsdGVyQnlQcm9wZXJ0eSgieSIpOihyPT09InkifHxyPT09InkwIikmJnRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW4/dGhpcy5fbWFrZUZpbHRlckJ5UHJvcGVydHkoIngiKTpudWxsfSx0LnByb3RvdHlwZS5fbWFrZUZpbHRlckJ5UHJvcGVydHk9ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQocik7aWYobiE9bnVsbCl7dmFyIGk9bi5hY2Nlc3NvcixvPW4uc2NhbGU7aWYobyE9bnVsbClyZXR1cm4gZnVuY3Rpb24oYSxzLGwpe3ZhciBjPW8ucmFuZ2UoKTtyZXR1cm4gYmF0Lk1hdGguaW5SYW5nZShvLnNjYWxlKGkoYSxzLGwpKSxjWzBdLGNbMV0pfX1yZXR1cm4gbnVsbH0sdC5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5PWZ1bmN0aW9uKHIsbil7ZS5wcm90b3R5cGUuX3VuaW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxyLG4pO3ZhciBpPW49PT10Ll9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s7ci5vZmZVcGRhdGUoaSl9LHQucHJvdG90eXBlLl9pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5faW5zdGFsbFNjYWxlRm9yS2V5LmNhbGwodGhpcyxyLG4pO3ZhciBpPW49PT10Ll9YX0tFWT90aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrOnRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2s7ci5vblVwZGF0ZShpKX0sdC5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyksdGhpcy54KCkuc2NhbGUmJnRoaXMueCgpLnNjYWxlLm9mZlVwZGF0ZSh0aGlzLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWENhbGxiYWNrKSx0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUub2ZmVXBkYXRlKHRoaXMuX2FkanVzdFhEb21haW5PbkNoYW5nZUZyb21ZQ2FsbGJhY2spLHRoaXN9LHQucHJvdG90eXBlLmF1dG9yYW5nZU1vZGU9ZnVuY3Rpb24ocil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj8ieCI6dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj8ieSI6Im5vbmUiO3N3aXRjaChyKXtjYXNlIngiOnRoaXMuX2F1dG9BZGp1c3RYU2NhbGVEb21haW49ITAsdGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbj0hMSx0aGlzLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWSgpO2JyZWFrO2Nhc2UieSI6dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbj0hMSx0aGlzLl9hdXRvQWRqdXN0WVNjYWxlRG9tYWluPSEwLHRoaXMuX2FkanVzdFlEb21haW5PbkNoYW5nZUZyb21YKCk7YnJlYWs7Y2FzZSJub25lIjp0aGlzLl9hdXRvQWRqdXN0WFNjYWxlRG9tYWluPSExLHRoaXMuX2F1dG9BZGp1c3RZU2NhbGVEb21haW49ITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2NhbGUgbmFtZSAnIityKyInLCBtdXN0IGJlICd4JywgJ3knIG9yICdub25lJyIpfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtlLnByb3RvdHlwZS5jb21wdXRlTGF5b3V0LmNhbGwodGhpcyxyLG4saSk7dmFyIG89dGhpcy54KCksYT1vJiZvLnNjYWxlO2EhPW51bGwmJmEucmFuZ2UoWzAsdGhpcy53aWR0aCgpXSk7dmFyIHM9dGhpcy55KCksbD1zJiZzLnNjYWxlO3JldHVybiBsIT1udWxsJiYobCBpbnN0YW5jZW9mIGNLdC5DYXRlZ29yeT9sLnJhbmdlKFswLHRoaXMuaGVpZ2h0KCldKTpsLnJhbmdlKFt0aGlzLmhlaWdodCgpLDBdKSksdGhpc30sdC5wcm90b3R5cGUuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbj1mdW5jdGlvbigpe3ZhciByPXRoaXMueCgpLnNjYWxlO3IhPW51bGwmJnIuYXV0b0RvbWFpbigpfSx0LnByb3RvdHlwZS5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy55KCkuc2NhbGU7ciE9bnVsbCYmci5hdXRvRG9tYWluKCl9LHQucHJvdG90eXBlLnNob3dBbGxEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVhFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXMuX3VwZGF0ZVlFeHRlbnRzQW5kQXV0b2RvbWFpbigpLHRoaXN9LHQucHJvdG90eXBlLl9hZGp1c3RZRG9tYWluT25DaGFuZ2VGcm9tWD1mdW5jdGlvbigpeyF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKXx8dGhpcy5fYXV0b0FkanVzdFlTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWUV4dGVudHNBbmRBdXRvZG9tYWluKCl9LHQucHJvdG90eXBlLl9hZGp1c3RYRG9tYWluT25DaGFuZ2VGcm9tWT1mdW5jdGlvbigpeyF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKXx8dGhpcy5fYXV0b0FkanVzdFhTY2FsZURvbWFpbiYmdGhpcy5fdXBkYXRlWEV4dGVudHNBbmRBdXRvZG9tYWluKCl9LHQucHJvdG90eXBlLl9wcm9qZWN0b3JzUmVhZHk9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLngoKSxuPXRoaXMueSgpO3JldHVybiByIT1udWxsJiZyLmFjY2Vzc29yIT1udWxsJiZuIT1udWxsJiZuLmFjY2Vzc29yIT1udWxsfSx0LnByb3RvdHlwZS5fcGl4ZWxQb2ludD1mdW5jdGlvbihyLG4saSl7dmFyIG89bTQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGE9bTQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO3JldHVybnt4Om8ocixuLGkpLHk6YShyLG4saSl9fSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpLGk9dGhpcy5hdHRyKCJkZWZpbmVkIiksbz1mdW5jdGlvbihhLHMsbCl7dmFyIGM9bTQuUGxvdC5fc2NhbGVkQWNjZXNzb3Ioci54KCkpKGEscyxsKSx1PW00LlBsb3QuX3NjYWxlZEFjY2Vzc29yKHIueSgpKShhLHMsbCk7cmV0dXJuIGkmJmkuYWNjZXNzb3IoYSxzLGwpPT09ITE/ITE6YmF0Lk1hdGguaXNWYWxpZE51bWJlcihjKSYmYmF0Lk1hdGguaXNWYWxpZE51bWJlcih1KX07cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe24uc2V0KGEsbi5nZXQoYSkuZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIG8ocyxsLGEpfSkpfSksbn0sdC5fWF9LRVk9IngiLHQuX1lfS0VZPSJ5Iix0fShtNC5QbG90KTt3YXQuWFlQbG90PWtWZX0pO3ZhciBNYXQ9SChzQj0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoc0IsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBSVmU9KGRlKCksVXQocGUpKSx5YT0oRXIoKSxVdChNcikpLE5WZT1MZigpLERWZT1CMSgpLE9WZT1VdSgpLHVLdD1yQigpLHpWZT1rcygpLGFCPXZkKCksUWc9RmUoKSxGVmU9SWYoKSxTYXQ9SVMoKSx2bD1ycygpLEJWZT1IMSgpLGhLdD17bGluZWFyOnlhLmN1cnZlTGluZWFyLGxpbmVhckNsb3NlZDp5YS5jdXJ2ZUxpbmVhckNsb3NlZCxzdGVwOnlhLmN1cnZlU3RlcCxzdGVwQmVmb3JlOnlhLmN1cnZlU3RlcEJlZm9yZSxzdGVwQWZ0ZXI6eWEuY3VydmVTdGVwQWZ0ZXIsYmFzaXM6eWEuY3VydmVCYXNpcyxiYXNpc09wZW46eWEuY3VydmVCYXNpc09wZW4sYmFzaXNDbG9zZWQ6eWEuY3VydmVCYXNpc0Nsb3NlZCxidW5kbGU6eWEuY3VydmVCdW5kbGUsY2FyZGluYWw6eWEuY3VydmVDYXJkaW5hbCxjYXJkaW5hbE9wZW46eWEuY3VydmVDYXJkaW5hbE9wZW4sY2FyZGluYWxDbG9zZWQ6eWEuY3VydmVDYXJkaW5hbENsb3NlZCxtb25vdG9uZTp5YS5jdXJ2ZU1vbm90b25lWH07c0IuQ3VydmVOYW1lPUZWZS5tYWtlRW51bShbImxpbmVhciIsImxpbmVhckNsb3NlZCIsInN0ZXAiLCJzdGVwQmVmb3JlIiwic3RlcEFmdGVyIiwiYmFzaXMiLCJiYXNpc09wZW4iLCJiYXNpc0Nsb3NlZCIsImJ1bmRsZSIsImNhcmRpbmFsIiwiY2FyZGluYWxPcGVuIiwiY2FyZGluYWxDbG9zZWQiLCJtb25vdG9uZSJdKTt2YXIgSFZlPWZ1bmN0aW9uKGUpe1JWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX2N1cnZlPSJsaW5lYXIiLHIuX2F1dG9yYW5nZVNtb290aD0hMSxyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD0hMCxyLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ9ITEsci5fZG93bnNhbXBsaW5nRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJsaW5lLXBsb3QiKTt2YXIgbj1uZXcgTlZlLkVhc2luZztyZXR1cm4gbi5zdGVwRHVyYXRpb24odmwuUGxvdC5fQU5JTUFUSU9OX01BWF9EVVJBVElPTiksbi5lYXNpbmdNb2RlKCJleHBJbk91dCIpLG4ubWF4VG90YWxEdXJhdGlvbih2bC5QbG90Ll9BTklNQVRJT05fTUFYX0RVUkFUSU9OKSxyLmFuaW1hdG9yKFNhdC5BbmltYXRvci5NQUlOLG4pLHIuYXR0cigic3Ryb2tlIixuZXcgelZlLkNvbG9yKCkucmFuZ2UoKVswXSksci5hdHRyKCJzdHJva2Utd2lkdGgiLCIycHgiKSxyfXJldHVybiB0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyk6KGUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbixpKSx0aGlzLl9zZXRTY2FsZVNuYXBwaW5nKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuLGkpe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUuYXV0b3JhbmdlTW9kZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5hdXRvcmFuZ2VNb2RlLmNhbGwodGhpcyk6KGUucHJvdG90eXBlLmF1dG9yYW5nZU1vZGUuY2FsbCh0aGlzLHIpLHRoaXMuX3NldFNjYWxlU25hcHBpbmcoKSx0aGlzKX0sdC5wcm90b3R5cGUuYXV0b3JhbmdlU21vb3RoPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2F1dG9yYW5nZVNtb290aDoodGhpcy5fYXV0b3JhbmdlU21vb3RoPXIsdGhpcy5fc2V0U2NhbGVTbmFwcGluZygpLHRoaXMpfSx0LnByb3RvdHlwZS5fc2V0U2NhbGVTbmFwcGluZz1mdW5jdGlvbigpe3RoaXMuYXV0b3JhbmdlTW9kZSgpPT09IngiJiZ0aGlzLngoKSYmdGhpcy54KCkuc2NhbGUmJnRoaXMueCgpLnNjYWxlIGluc3RhbmNlb2YgYUIuUXVhbnRpdGF0aXZlU2NhbGUmJnRoaXMueCgpLnNjYWxlLnNuYXBwaW5nRG9tYWluRW5hYmxlZCghdGhpcy5hdXRvcmFuZ2VTbW9vdGgoKSksdGhpcy5hdXRvcmFuZ2VNb2RlKCk9PT0ieSImJnRoaXMueSgpJiZ0aGlzLnkoKS5zY2FsZSYmdGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiBhQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy55KCkuc2NhbGUuc25hcHBpbmdEb21haW5FbmFibGVkKCF0aGlzLmF1dG9yYW5nZVNtb290aCgpKX0sdC5wcm90b3R5cGUuY3VydmU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY3VydmU6KHRoaXMuX2N1cnZlPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9kb3duc2FtcGxpbmdFbmFibGVkOih0aGlzLl9kb3duc2FtcGxpbmdFbmFibGVkPXIsdGhpcyl9LHQucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Nyb3BwZWRSZW5kZXJpbmdFbmFibGVkOih0aGlzLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLmNvbGxhcHNlRGVuc2VMaW5lc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkOih0aGlzLl9jb2xsYXBzZURlbnNlVmVydGljYWxMaW5lc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBPVmUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVLdC5MaW5lU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IERWZS5DYW52YXNEcmF3ZXIoaSx1S3QubWFrZUxpbmVDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3JldHVybiBuLl9kM0xpbmVGYWN0b3J5KHIpfSkpfSl9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj1lLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpO2lmKCF0aGlzLl9hdXRvcmFuZ2VTbW9vdGh8fHRoaXMuYXV0b3JhbmdlTW9kZSgpIT09cnx8dGhpcy5hdXRvcmFuZ2VNb2RlKCkhPT0ieCImJnRoaXMuYXV0b3JhbmdlTW9kZSgpIT09InkiKXJldHVybiBuO3ZhciBpPXRoaXMuX2dldEVkZ2VJbnRlcnNlY3Rpb25Qb2ludHMoKSxvO3JldHVybiB0aGlzLmF1dG9yYW5nZU1vZGUoKT09PSJ5Ij9vPWkubGVmdC5jb25jYXQoaS5yaWdodCkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnl9KTpvPWkudG9wLmNvbmNhdChpLmJvdHRvbSkubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnh9KSxuLm1hcChmdW5jdGlvbihhKXtyZXR1cm4geWEuZXh0ZW50KHlhLm1lcmdlKFthLG9dKSl9KX0sdC5wcm90b3R5cGUuX2dldEVkZ2VJbnRlcnNlY3Rpb25Qb2ludHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzO2lmKCEodGhpcy55KCkuc2NhbGUgaW5zdGFuY2VvZiBhQi5RdWFudGl0YXRpdmVTY2FsZSYmdGhpcy54KCkuc2NhbGUgaW5zdGFuY2VvZiBhQi5RdWFudGl0YXRpdmVTY2FsZSkpcmV0dXJue2xlZnQ6W10scmlnaHQ6W10sdG9wOltdLGJvdHRvbTpbXX07dmFyIG49dGhpcy55KCkuc2NhbGUsaT10aGlzLngoKS5zY2FsZSxvPXtsZWZ0OltdLHJpZ2h0OltdLHRvcDpbXSxib3R0b206W119LGE9aS5zY2FsZShpLmRvbWFpbigpWzBdKSxzPWkuc2NhbGUoaS5kb21haW4oKVsxXSksbD1uLnNjYWxlKG4uZG9tYWluKClbMF0pLGM9bi5zY2FsZShuLmRvbWFpbigpWzFdKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24odSl7Zm9yKHZhciBoPXUuZGF0YSgpLGYscCxkLGcsXyx5LHgsYixTPTE7UzxoLmxlbmd0aDtTKyspXz14fHxpLnNjYWxlKHIueCgpLmFjY2Vzc29yKGhbUy0xXSxTLTEsdSkpLHk9Ynx8bi5zY2FsZShyLnkoKS5hY2Nlc3NvcihoW1MtMV0sUy0xLHUpKSx4PWkuc2NhbGUoci54KCkuYWNjZXNzb3IoaFtTXSxTLHUpKSxiPW4uc2NhbGUoci55KCkuYWNjZXNzb3IoaFtTXSxTLHUpKSxfPGE9PWE8PXgmJihmPWEtXyxwPXgtXyxnPWIteSxkPWYqZy9wLG8ubGVmdC5wdXNoKHt4OmEseTpuLmludmVydCh5K2QpfSkpLF88cz09czw9eCYmKGY9cy1fLHA9eC1fLGc9Yi15LGQ9ZipnL3Asby5yaWdodC5wdXNoKHt4OnMseTpuLmludmVydCh5K2QpfSkpLHk8Yz09Yzw9YiYmKHA9eC1fLGQ9Yy15LGc9Yi15LGY9ZCpwL2csby50b3AucHVzaCh7eDppLmludmVydChfK2YpLHk6Y30pKSx5PGw9PWw8PWImJihwPXgtXyxkPWwteSxnPWIteSxmPWQqcC9nLG8uYm90dG9tLnB1c2goe3g6aS5pbnZlcnQoXytmKSx5Omx9KSl9KSxvfSx0LnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnkoKS5zY2FsZS5kb21haW4oKSxuPU1hdGgubWF4KHJbMF0sclsxXSksaT1NYXRoLm1pbihyWzBdLHJbMV0pLG89bjwwJiZufHxpPjAmJml8fDAsYT10aGlzLnkoKS5zY2FsZS5zY2FsZShvKTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3JldHVybiBhfX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3Rvcih2bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSksci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6bixhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihTYXQuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKFNhdC5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpO3JldHVybiBPYmplY3Qua2V5cyhyKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe2lmKG4hPT0iZCIpe3ZhciBpPXJbbl07cltuXT1mdW5jdGlvbihvLGEscyl7cmV0dXJuIG8ubGVuZ3RoPjA/aShvWzBdLGEscyk6bnVsbH19fSkscn0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLmVudGl0eU5lYXJlc3RCeVhUaGVuWShyKTtyZXR1cm4gbiE9bnVsbD9bbl06W119LHQucHJvdG90eXBlLmVudGl0eU5lYXJlc3RCeVhUaGVuWT1mdW5jdGlvbihyKXtmb3IodmFyIG49MS8wLGk9MS8wLG8sYT10aGlzLmJvdW5kcygpLHM9dGhpcy5lbnRpdGllcygpLGw9cy5sZW5ndGgsYz0wO2M8bDtjKyspe3ZhciB1PXNbY107aWYoISFRZy5NYXRoLndpdGhpbih1LnBvc2l0aW9uLGEpKXt2YXIgaD1NYXRoLmFicyhyLngtdS5wb3NpdGlvbi54KSxmPU1hdGguYWJzKHIueS11LnBvc2l0aW9uLnkpOyhoPG58fGg9PT1uJiZmPGkpJiYobz11LG49aCxpPWYpfX1yZXR1cm4gb30sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gci5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IodmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSkscn0sdC5wcm90b3R5cGUuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3I9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzO3JldHVybiBmdW5jdGlvbihvLGEscyl7cmV0dXJuIGkuX2QzTGluZUZhY3RvcnkocyxyLG4pKG8pfX0sdC5wcm90b3R5cGUuX2QzTGluZUZhY3Rvcnk9ZnVuY3Rpb24ocixuLGkpe249PT12b2lkIDAmJihuPXZsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSksaT09PXZvaWQgMCYmKGk9dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKTt2YXIgbz1mdW5jdGlvbihhLHMsbCl7dmFyIGM9bihhLHMsbCksdT1pKGEscyxsKTtyZXR1cm4gUWcuTWF0aC5pc1ZhbGlkTnVtYmVyKGMpJiZRZy5NYXRoLmlzVmFsaWROdW1iZXIodSl9O3JldHVybiB5YS5saW5lKCkueChmdW5jdGlvbihhLHMpe3JldHVybiBuKGEscyxyKX0pLnkoZnVuY3Rpb24oYSxzKXtyZXR1cm4gaShhLHMscil9KS5jdXJ2ZSh0aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKSkuZGVmaW5lZChmdW5jdGlvbihhLHMpe3JldHVybiBvKGEscyxyKX0pfSx0LnByb3RvdHlwZS5fZ2V0Q3VydmVGYWN0b3J5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5jdXJ2ZSgpO2lmKHR5cGVvZiByPT0ic3RyaW5nIil7dmFyIG49aEt0W3JdO3JldHVybiBuPT1udWxsP2hLdC5saW5lYXI6bn1lbHNlIHJldHVybiByfSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1uZXcgUWcuTWFwO3JldHVybiB0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXt2YXIgbz1pLmRhdGEoKTtpZighci5fY3JvcHBlZFJlbmRlcmluZ0VuYWJsZWQmJiFyLl9kb3duc2FtcGxpbmdFbmFibGVkKXtuLnNldChpLFtvXSk7cmV0dXJufWZvcih2YXIgYT1bXSxzPW8ubGVuZ3RoLGw9MDtsPHM7bCsrKWFbbF09bDtyLl9jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZCYmKGE9ci5fZmlsdGVyQ3JvcHBlZFJlbmRlcmluZyhpLGEpKSxyLl9kb3duc2FtcGxpbmdFbmFibGVkJiYoYT1yLl9maWx0ZXJEb3duc2FtcGxpbmcoaSxhKSksci5fY29sbGFwc2VEZW5zZVZlcnRpY2FsTGluZXNFbmFibGVkJiYoYT1yLl9maWx0ZXJEZW5zZUxpbmVzKGksYSkpO2Zvcih2YXIgYz1bXSx1PWEubGVuZ3RoLGw9MDtsPHU7bCsrKXt2YXIgaD1hW2xdO2NbbF09b1toXX1uLnNldChpLFtjXSl9KSxufSx0LnByb3RvdHlwZS5fZmlsdGVyQ3JvcHBlZFJlbmRlcmluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT10aGlzLG89dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGE9dmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLHM9ci5kYXRhKCksbD1bXSxjPWZ1bmN0aW9uKHgsYil7cmV0dXJuIFFnLk1hdGguaW5SYW5nZSh4LDAsaS53aWR0aCgpKSYmUWcuTWF0aC5pblJhbmdlKGIsMCxpLmhlaWdodCgpKX0sdT0wO3U8bi5sZW5ndGg7dSsrKXt2YXIgaD1vKHNbblt1XV0sblt1XSxyKSxmPWEoc1tuW3VdXSxuW3VdLHIpLHA9YyhoLGYpO2lmKCFwJiZuW3UtMV0hPW51bGwmJnNbblt1LTFdXSE9bnVsbCl7dmFyIGQ9byhzW25bdS0xXV0sblt1LTFdLHIpLGc9YShzW25bdS0xXV0sblt1LTFdLHIpO3A9cHx8YyhkLGcpfWlmKCFwJiZuW3UrMV0hPW51bGwmJnNbblt1KzFdXSE9bnVsbCl7dmFyIF89byhzW25bdSsxXV0sblt1KzFdLHIpLHk9YShzW25bdSsxXV0sblt1KzFdLHIpO3A9cHx8YyhfLHkpfXAmJmwucHVzaChuW3VdKX1yZXR1cm4gbH0sdC5wcm90b3R5cGUuX2ZpbHRlckRvd25zYW1wbGluZz1mdW5jdGlvbihyLG4pe2lmKG4ubGVuZ3RoPT09MClyZXR1cm5bXTtmb3IodmFyIGk9ci5kYXRhKCksbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1bblswXV0sbD1mdW5jdGlvbihrLE8pe3ZhciBEPW8oaVtuW2tdXSxuW2tdLHIpLEI9YShpW25ba11dLG5ba10sciksST1vKGlbbltrKzFdXSxuW2srMV0sciksTD1hKGlbbltrKzFdXSxuW2srMV0scik7aWYoTz09PTEvMClyZXR1cm4gTWF0aC5mbG9vcihEKT09PU1hdGguZmxvb3IoSSk7dmFyIFI9QisoSS1EKSpPO3JldHVybiBNYXRoLmZsb29yKEwpPT09TWF0aC5mbG9vcihSKX0sYz0wO2M8bi5sZW5ndGgtMTspe2Zvcih2YXIgdT1uW2NdLGg9byhpW25bY11dLG5bY10sciksZj1hKGlbbltjXV0sbltjXSxyKSxwPW8oaVtuW2MrMV1dLG5bYysxXSxyKSxkPWEoaVtuW2MrMV1dLG5bYysxXSxyKSxnPU1hdGguZmxvb3IoaCk9PT1NYXRoLmZsb29yKHApPzEvMDooZC1mKS8ocC1oKSxfPW5bY10seT1nPT09MS8wP2Y6aCx4PV8sYj15LFM9ITA7YzxuLmxlbmd0aC0xJiYoU3x8bChjLGcpKTspe2MrKyxTPSExO3ZhciBDPWc9PT0xLzA/YShpW25bY11dLG5bY10scik6byhpW25bY11dLG5bY10scik7Qz5iJiYoYj1DLHg9bltjXSksQzx5JiYoeT1DLF89bltjXSl9dmFyIFA9bltjXTtfIT09dSYmcy5wdXNoKF8pLHghPT1fJiZ4IT09dSYmcy5wdXNoKHgpLFAhPT11JiZQIT09XyYmUCE9PXgmJnMucHVzaChQKX1yZXR1cm4gc30sdC5wcm90b3R5cGUuX2ZpbHRlckRlbnNlTGluZXM9ZnVuY3Rpb24ocixuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuW107dmFyIGk9ci5kYXRhKCksbz12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksYT12bC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSkscz1mdW5jdGlvbihjKXtyZXR1cm4gbyhpW2NdLGMscil9LGw9ZnVuY3Rpb24oYyl7cmV0dXJuIGEoaVtjXSxjLHIpfTtyZXR1cm4gdGhpcy5fYnVja2V0QnlYKHIsbixzLGwpfSx0LnByb3RvdHlwZS5fYnVja2V0QnlYPWZ1bmN0aW9uKHIsbixpLG8pe2Zvcih2YXIgYT1bXSxzPXIuZGF0YSgpLGw9bnVsbCxjPW4ubGVuZ3RoLHU9MDt1PD1jOysrdSl7dmFyIGg9blt1XTtpZihzW2hdIT1udWxsKXt2YXIgZj1NYXRoLmZsb29yKGkoaCkpLHA9byhoKTtsPT1udWxsP2w9bmV3IFFnLkJ1Y2tldChoLGYscCk6bC5pc0luQnVja2V0KGYpP2wuYWRkVG9CdWNrZXQocCxoKTooYS5wdXNoLmFwcGx5KGEsbC5nZXRVbmlxdWVJbmRpY2VzKCkpLGw9bmV3IFFnLkJ1Y2tldChoLGYscCkpfX1yZXR1cm4gbCE9bnVsbCYmYS5wdXNoLmFwcGx5KGEsbC5nZXRVbmlxdWVJbmRpY2VzKCkpLGF9LHR9KEJWZS5YWVBsb3QpO3NCLkxpbmU9SFZlfSk7dmFyIENhdD1IKFRhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgVlZlPShkZSgpLFV0KHBlKSksbEI9KEVyKCksVXQoTXIpKSxVVmU9a3MoKSxnND1GZSgpLEVhdD1CMSgpLGZLdD1nYXQoKSxxVmU9VXUoKSxwS3Q9ckIoKSxjQj1JUygpLEdWZT1NYXQoKSxEcz1ycygpLFdWZT1mdW5jdGlvbihlKXtWVmUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5hZGRDbGFzcygiYXJlYS1wbG90Iiksci55MCgwKSxyLmF0dHIoImZpbGwtb3BhY2l0eSIsLjI1KSxyLmF0dHIoImZpbGwiLG5ldyBVVmUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLl9saW5lRHJhd2Vycz1uZXcgZzQuTWFwLHJ9cmV0dXJuIHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pLG4hPW51bGwpe3ZhciBpPXRoaXMueTAoKS5hY2Nlc3NvcjtpIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTBfS0VZLGksbiksdGhpcy5fdXBkYXRlWVNjYWxlKCl9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnkwPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1kwX0tFWSk7dmFyIG49dGhpcy55KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWTBfS0VZLHIsaSksdGhpcy5fdXBkYXRlWVNjYWxlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZS5jYWxsKHRoaXMpLHRoaXMuX3VwZGF0ZVlTY2FsZSgpfSx0LnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiB0aGlzLl9saW5lRHJhd2Vycy5zZXQocixuZXcgRWF0LlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBwS3QuTGluZVNWR0RyYXdlcn0sZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyBFYXQuQ2FudmFzRHJhd2VyKGkscEt0Lm1ha2VMaW5lQ2FudmFzRHJhd1N0ZXAoZnVuY3Rpb24oKXt2YXIgbz1Ecy5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLngoKSksYT1Ecy5QbG90Ll9zY2FsZWRBY2Nlc3NvcihuLnkoKSk7cmV0dXJuIG4uX2QzTGluZUZhY3RvcnkocixvLGEpfSkpfSkpLGUucHJvdG90eXBlLl9hZGREYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xpbmVEcmF3ZXJzLmdldChyKTtyZXR1cm4gdGhpcy5yZW5kZXJlcigpPT09InN2ZyI/bi51c2VTVkcodGhpcy5fcmVuZGVyQXJlYSk6bi51c2VDYW52YXModGhpcy5fY2FudmFzKSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpLHRoaXMuX2xpbmVEcmF3ZXJzLmdldChyKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZW5lcmF0ZUxpbmVEcmF3U3RlcHMoKSxpPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihvKXt2YXIgYT1Ecy5QbG90LmFwcGx5RHJhd1N0ZXBzKG4sbyk7ci5fbGluZURyYXdlcnMuZ2V0KG8pLmRyYXcoaS5nZXQobyksYSl9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGluZURyYXdTdGVwcz1mdW5jdGlvbigpe3ZhciByPVtdO2lmKHRoaXMuX2FuaW1hdGVPbk5leHRSZW5kZXIoKSl7dmFyIG49dGhpcy5fZ2VuZXJhdGVMaW5lQXR0clRvUHJvamVjdG9yKCk7bi5kPXRoaXMuX2NvbnN0cnVjdExpbmVQcm9qZWN0b3IoRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLHRoaXMuX2dldFJlc2V0WUZ1bmN0aW9uKCkpLHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoY0IuQW5pbWF0b3IuUkVTRVQpfSl9cmV0dXJuIHIucHVzaCh7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dlbmVyYXRlTGluZUF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKGNCLkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlTGluZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0TGluZVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpKSxyfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBxVmUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGZLdC5BcmVhU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IEVhdC5DYW52YXNEcmF3ZXIoaSxmS3QubWFrZUFyZWFDYW52YXNEcmF3U3RlcChmdW5jdGlvbigpe3ZhciBvPW4uX2Nvb3JkaW5hdGVQcm9qZWN0b3JzKCksYT1vWzBdLHM9b1sxXSxsPW9bMl0sYz1uLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKGEscyk7cmV0dXJuIG4uX2NyZWF0ZUFyZWFHZW5lcmF0b3IoYSxzLGwsYyxyKX0sZnVuY3Rpb24oKXt2YXIgbz1uLl9jb29yZGluYXRlUHJvamVjdG9ycygpLGE9b1swXSxzPW9bMV0sbD1uLl9jcmVhdGVEZWZpbmVkUHJvamVjdG9yKGEscyk7cmV0dXJuIG4uX2NyZWF0ZVRvcExpbmVHZW5lcmF0b3IoYSxzLGwscil9KSl9KX0sdC5wcm90b3R5cGUuX2dlbmVyYXRlRHJhd1N0ZXBzPWZ1bmN0aW9uKCl7dmFyIHI9W107aWYodGhpcy5fYW5pbWF0ZU9uTmV4dFJlbmRlcigpKXt2YXIgbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtuLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksdGhpcy5fZ2V0UmVzZXRZRnVuY3Rpb24oKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkwKCkpKSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKGNCLkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihjQi5BbmltYXRvci5NQUlOKX0pLHJ9LHQucHJvdG90eXBlLl91cGRhdGVZU2NhbGU9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmdldEV4dGVudHNGb3JQcm9wZXJ0eSgieTAiKSxuPWc0LkFycmF5LmZsYXR0ZW4ociksaT1nNC5BcnJheS51bmlxKG4pLG89aS5sZW5ndGg9PT0xP2lbMF06bnVsbCxhPXRoaXMueSgpLHM9YSYmYS5zY2FsZTtzIT1udWxsJiYodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIhPW51bGwmJihzLnJlbW92ZVBhZGRpbmdFeGNlcHRpb25zUHJvdmlkZXIodGhpcy5fY29uc3RhbnRCYXNlbGluZVZhbHVlUHJvdmlkZXIpLHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyPW51bGwpLG8hPW51bGwmJih0aGlzLl9jb25zdGFudEJhc2VsaW5lVmFsdWVQcm92aWRlcj1mdW5jdGlvbigpe3JldHVybltvXX0scy5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2NvbnN0YW50QmFzZWxpbmVWYWx1ZVByb3ZpZGVyKSkpfSx0LnByb3RvdHlwZS5fZ2V0UmVzZXRZRnVuY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MCgpKX0sdC5wcm90b3R5cGUuX2Nvb3JkaW5hdGVQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuW0RzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxEcy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MCgpKV19LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj10aGlzLl9jb29yZGluYXRlUHJvamVjdG9ycygpLGk9blswXSxvPW5bMV0sYT1uWzJdO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihpLG8sYSkscn0sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO2lmKHI9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSksdGhpcy5yZW5kZXJlcigpPT09ImNhbnZhcyIpcmV0dXJuIGxCLnNlbGVjdEFsbCgpO3ZhciBpPWUucHJvdG90eXBlLnNlbGVjdGlvbnMuY2FsbCh0aGlzLHIpLm5vZGVzKCksbz1yLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gbi5fbGluZURyYXdlcnMuZ2V0KGEpfSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhIT1udWxsfSk7cmV0dXJuIG8uZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gaS5wdXNoLmFwcGx5KGksYS5nZXRWaXN1YWxQcmltaXRpdmVzKCkpfSksbEIuc2VsZWN0QWxsKGkpfSx0LnByb3RvdHlwZS5fY29uc3RydWN0QXJlYVByb2plY3Rvcj1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcyxhPXRoaXMuX2NyZWF0ZURlZmluZWRQcm9qZWN0b3IoRHMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLERzLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSk7cmV0dXJuIGZ1bmN0aW9uKHMsbCxjKXt2YXIgdT1vLl9jcmVhdGVBcmVhR2VuZXJhdG9yKHIsbixpLGEsYyk7cmV0dXJuIHUocyl9fSx0LnByb3RvdHlwZS5fY3JlYXRlRGVmaW5lZFByb2plY3Rvcj1mdW5jdGlvbihyLG4pe3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9cihpLG8sYSksbD1uKGksbyxhKTtyZXR1cm4gZzQuTWF0aC5pc1ZhbGlkTnVtYmVyKHMpJiZnNC5NYXRoLmlzVmFsaWROdW1iZXIobCl9fSx0LnByb3RvdHlwZS5fY3JlYXRlQXJlYUdlbmVyYXRvcj1mdW5jdGlvbihyLG4saSxvLGEpe3ZhciBzPXRoaXMuX2dldEN1cnZlRmFjdG9yeSgpLGw9bEIuYXJlYSgpLngoZnVuY3Rpb24oYyx1KXtyZXR1cm4gcihjLHUsYSl9KS55MShmdW5jdGlvbihjLHUpe3JldHVybiBuKGMsdSxhKX0pLnkwKGZ1bmN0aW9uKGMsdSl7cmV0dXJuIGkoYyx1LGEpfSkuY3VydmUocykuZGVmaW5lZChmdW5jdGlvbihjLHUpe3JldHVybiBvKGMsdSxhKX0pO3JldHVybiBsfSx0LnByb3RvdHlwZS5fY3JlYXRlVG9wTGluZUdlbmVyYXRvcj1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT10aGlzLl9nZXRDdXJ2ZUZhY3RvcnkoKSxzPWxCLmxpbmUoKS54KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIHIobCxjLG8pfSkueShmdW5jdGlvbihsLGMpe3JldHVybiBuKGwsYyxvKX0pLmN1cnZlKGEpLmRlZmluZWQoZnVuY3Rpb24obCxjKXtyZXR1cm4gaShsLGMsbyl9KTtyZXR1cm4gc30sdC5fWTBfS0VZPSJ5MCIsdH0oR1ZlLkxpbmUpO1RhdC5BcmVhPVdWZX0pO3ZhciBfND1IKEd1PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShHdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFlWZT0oZGUoKSxVdChwZSkpLFBhdD0oRXIoKSxVdChNcikpLEFhdD1fbCgpLGpWZT1MZigpLFhWZT1CdSgpLCRWZT1CMSgpLEtWZT1VdSgpLFpWZT1pQigpLEpWZT1DUygpLElhdD1rcygpLGRLdD12ZCgpLHhsPUZlKCksa2F0PUlmKCksbUt0PUlTKCksdUI9cnMoKSxRVmU9SDEoKTtHdS5CYXJPcmllbnRhdGlvbj1rYXQubWFrZUVudW0oWyJ2ZXJ0aWNhbCIsImhvcml6b250YWwiXSk7R3UuTGFiZWxzUG9zaXRpb249a2F0Lm1ha2VFbnVtKFsic3RhcnQiLCJtaWRkbGUiLCJlbmQiLCJvdXRzaWRlIl0pO0d1LkJhckFsaWdubWVudD1rYXQubWFrZUVudW0oWyJzdGFydCIsIm1pZGRsZSIsImVuZCJdKTt2YXIgTGF0PWZ1bmN0aW9uKGUpe1lWZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJ2ZXJ0aWNhbCIpO3ZhciBuPWUuY2FsbCh0aGlzKXx8dGhpcztpZihuLl9sYWJlbEZvcm1hdHRlcj1YVmUuaWRlbnRpdHkoKSxuLl9sYWJlbHNFbmFibGVkPSExLG4uX2xhYmVsc1Bvc2l0aW9uPUd1LkxhYmVsc1Bvc2l0aW9uLmVuZCxuLl9oaWRlQmFyc0lmQW55QXJlVG9vV2lkZT0hMCxuLl9iYXJBbGlnbm1lbnQ9Im1pZGRsZSIsbi5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzPUpWZS5tZW1vaXplKHRVZSksbi5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMCxuLmFkZENsYXNzKCJiYXItcGxvdCIpLHIhPT0idmVydGljYWwiJiZyIT09Imhvcml6b250YWwiKXRocm93IG5ldyBFcnJvcihyKyIgaXMgbm90IGEgdmFsaWQgb3JpZW50YXRpb24gZm9yIFBsb3RzLkJhciIpO3JldHVybiBuLl9pc1ZlcnRpY2FsPXI9PT0idmVydGljYWwiLG4uYW5pbWF0b3IoImJhc2VsaW5lIixuZXcgalZlLk51bGwpLG4uYXR0cigiZmlsbCIsbmV3IElhdC5Db2xvcigpLnJhbmdlKClbMF0pLG4uYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbigpe3JldHVybiBuLl9iYXJQaXhlbFRoaWNrbmVzcygpfSksbi5fbGFiZWxDb25maWc9bmV3IHhsLk1hcCxuLl9iYXNlbGluZVZhbHVlUHJvdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm5bbi5iYXNlbGluZVZhbHVlKCldfSxufXJldHVybiB0LnByb3RvdHlwZS5jb21wdXRlTGF5b3V0PWZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gZS5wcm90b3R5cGUuY29tcHV0ZUxheW91dC5jYWxsKHRoaXMscixuLGkpLHRoaXMuX3VwZGF0ZUV4dGVudHMoKSx0aGlzfSx0LnByb3RvdHlwZS54PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueC5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbiksdGhpcy5fdXBkYXRlVGhpY2tuZXNzQXR0cigpLHRoaXMuX3VwZGF0ZUxlbmd0aFNjYWxlKCksdGhpcyl9LHQucHJvdG90eXBlLnk9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyk6KG49PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik6ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscixuKSx0aGlzLl91cGRhdGVMZW5ndGhTY2FsZSgpLHRoaXMpfSx0LnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKTp0aGlzLngoKX0sdC5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNWZXJ0aWNhbD90aGlzLngoKTp0aGlzLnkoKX0sdC5wcm90b3R5cGUuYmFyRW5kPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX0JBUl9FTkRfS0VZKTt2YXIgbj10aGlzLnBvc2l0aW9uKCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fQkFSX0VORF9LRVkscixpKSx0aGlzLl91cGRhdGVUaGlja25lc3NBdHRyKCksdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzLnJlbmRlcigpLHRoaXN9LHQucHJvdG90eXBlLmJhckFsaWdubWVudD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9iYXJBbGlnbm1lbnQ6KHRoaXMuX2JhckFsaWdubWVudD1yLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5vcmllbnRhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1ZlcnRpY2FsPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwifSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBLVmUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFpWZS5SZWN0YW5nbGVTVkdEcmF3ZXIodC5fQkFSX0FSRUFfQ0xBU1MpfSxmdW5jdGlvbihyKXtyZXR1cm4gbmV3ICRWZS5SZWN0YW5nbGVDYW52YXNEcmF3ZXIocil9KX0sdC5wcm90b3R5cGUuX3NldHVwPWZ1bmN0aW9uKCl7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fYmFzZWxpbmU9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJiYXNlbGluZSIsITApfSx0LnByb3RvdHlwZS5iYXNlbGluZVZhbHVlPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpe2lmKHRoaXMuX2Jhc2VsaW5lVmFsdWUhPW51bGwpcmV0dXJuIHRoaXMuX2Jhc2VsaW5lVmFsdWU7aWYoIXRoaXMuX3Byb2plY3RvcnNSZWFkeSgpKXJldHVybiAwO3ZhciBuPXRoaXMubGVuZ3RoKCkuc2NhbGU7cmV0dXJuIG4mJm4gaW5zdGFuY2VvZiBJYXQuVGltZT9uZXcgRGF0ZSgwKTowfXJldHVybiB0aGlzLl9iYXNlbGluZVZhbHVlPXIsdGhpcy5fdXBkYXRlTGVuZ3RoU2NhbGUoKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS5hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5hZGREYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzfSx0LnByb3RvdHlwZS5fYWRkRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUuX2FkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLnJlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLnJlbW92ZURhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0PWZ1bmN0aW9uKHIpe3JldHVybiBlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuZGF0YXNldHM9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUuZGF0YXNldHMuY2FsbCh0aGlzKTooZS5wcm90b3R5cGUuZGF0YXNldHMuY2FsbCh0aGlzLHIpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLG4hPW51bGwmJih0aGlzLl9sYWJlbHNQb3NpdGlvbj1uKSx0aGlzLl9jbGVhckF0dHJUb1Byb2plY3RvckNhY2hlKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxGb3JtYXR0ZXI6KHRoaXMuX2xhYmVsRm9ybWF0dGVyPXIsdGhpcy5fY2xlYXJBdHRyVG9Qcm9qZWN0b3JDYWNoZSgpLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMsciksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQodC5fTEFCRUxfQVJFQV9DTEFTUywhMCksbz1uZXcgQWF0LlN2Z0NvbnRleHQoaS5ub2RlKCkpLGE9bmV3IEFhdC5DYWNoZU1lYXN1cmVyKG8pLHM9bmV3IEFhdC5Xcml0ZXIoYSxvKTtyZXR1cm4gdGhpcy5fbGFiZWxDb25maWcuc2V0KHIse2xhYmVsQXJlYTppLG1lYXN1cmVyOmEsd3JpdGVyOnN9KSxufSx0LnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzPWZ1bmN0aW9uKHIpe2UucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0Tm9kZXMuY2FsbCh0aGlzLHIpO3ZhciBuPXRoaXMuX2xhYmVsQ29uZmlnLmdldChyKTtuIT1udWxsJiYobi5sYWJlbEFyZWEucmVtb3ZlKCksdGhpcy5fbGFiZWxDb25maWcuZGVsZXRlKHIpKX0sdC5wcm90b3R5cGUuZW50aXR5TmVhcmVzdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZnVuY3Rpb24oKXt2YXIgbz1uLl9pc1ZlcnRpY2FsP24uX2dldEVudGl0eVN0b3JlKCkuZW50aXR5TmVhcmVzdFgocik6bi5fZ2V0RW50aXR5U3RvcmUoKS5lbnRpdHlOZWFyZXN0WShyKTtyZXR1cm4gbz09PXZvaWQgMD92b2lkIDA6bi5fbGlnaHR3ZWlnaHRQbG90RW50aXR5VG9QbG90RW50aXR5KG8pfTtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz90aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoaSk6aSgpfSx0LnByb3RvdHlwZS5lbnRpdGllc0F0PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBuLl9lbnRpdGllc0ludGVyc2VjdGluZyhyLngsci55KX07cmV0dXJuIHRoaXMuX2ZpeGVkQmFyUGl4ZWxUaGlja25lc3M/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzLmRvTG9ja2VkKGkpOmkoKX0sdC5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUuZW50aXRpZXNJbkJvdW5kcy5jYWxsKG4scil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5YQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luWEJvdW5kcy5jYWxsKG4scil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLmVudGl0aWVzSW5ZQm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1mdW5jdGlvbigpe3JldHVybiBlLnByb3RvdHlwZS5lbnRpdGllc0luWUJvdW5kcy5jYWxsKG4scil9O3JldHVybiB0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzP3RoaXMuX2NvbXB1dGVCYXJQaXhlbFRoaWNrbmVzcy5kb0xvY2tlZChpKTppKCl9LHQucHJvdG90eXBlLl9lbnRpdGllc0ludGVyc2VjdGluZz1mdW5jdGlvbihyLG4pe2Zvcih2YXIgaT1bXSxvPXRoaXMuX2dldEVudGl0eVN0b3JlKCkuZW50aXRpZXMoKSxhPW8ubGVuZ3RoLHM9MDtzPGE7cysrKXt2YXIgbD1vW3NdO3hsLkRPTS5pbnRlcnNlY3RzQkJveChyLG4sdGhpcy5fZW50aXR5Qm91bmRzKGwpKSYmaS5wdXNoKHRoaXMuX2xpZ2h0d2VpZ2h0UGxvdEVudGl0eVRvUGxvdEVudGl0eShsKSl9cmV0dXJuIGl9LHQucHJvdG90eXBlLl91cGRhdGVMZW5ndGhTY2FsZT1mdW5jdGlvbigpe2lmKCEhdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpe3ZhciByPXRoaXMubGVuZ3RoKCkuc2NhbGU7ciBpbnN0YW5jZW9mIGRLdC5RdWFudGl0YXRpdmVTY2FsZSYmKHIuYWRkUGFkZGluZ0V4Y2VwdGlvbnNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpLHIuYWRkSW5jbHVkZWRWYWx1ZXNQcm92aWRlcih0aGlzLl9iYXNlbGluZVZhbHVlUHJvdmlkZXIpKX19LHQucHJvdG90eXBlLnJlbmRlckltbWVkaWF0ZWx5PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztyZXR1cm4gdGhpcy5fYmFyUGl4ZWxUaGlja25lc3MoKSx0aGlzLl9jb21wdXRlQmFyUGl4ZWxUaGlja25lc3MuZG9Mb2NrZWQoZnVuY3Rpb24oKXtyZXR1cm4gZS5wcm90b3R5cGUucmVuZGVySW1tZWRpYXRlbHkuY2FsbChyKX0pfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT10aGlzLmxlbmd0aCgpLnNjYWxlLG89aS5zY2FsZSh0aGlzLmJhc2VsaW5lVmFsdWUoKSksYT17eDE6dGhpcy5faXNWZXJ0aWNhbD8wOm8seTE6dGhpcy5faXNWZXJ0aWNhbD9vOjAseDI6dGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6byx5Mjp0aGlzLl9pc1ZlcnRpY2FsP286dGhpcy5oZWlnaHQoKX07dGhpcy5fZ2V0QW5pbWF0b3IoImJhc2VsaW5lIikuYW5pbWF0ZSh0aGlzLl9iYXNlbGluZSxhKSx0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihzKXtyZXR1cm4gbi5fbGFiZWxDb25maWcuZ2V0KHMpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pLHRoaXMuX2xhYmVsc0VuYWJsZWQmJnhsLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scil9LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLGk9ZS5wcm90b3R5cGUuZ2V0RXh0ZW50c0ZvclByb3BlcnR5LmNhbGwodGhpcyxyKSxvO2lmKHI9PT0ieCImJnRoaXMuX2lzVmVydGljYWwpbz10aGlzLngoKTtlbHNlIGlmKHI9PT0ieSImJiF0aGlzLl9pc1ZlcnRpY2FsKW89dGhpcy55KCk7ZWxzZSByZXR1cm4gaTtpZighKG8mJm8uc2NhbGUmJm8uc2NhbGUgaW5zdGFuY2VvZiBkS3QuUXVhbnRpdGF0aXZlU2NhbGUpKXJldHVybiBpO3ZhciBhPW8uc2NhbGUscz10aGlzLl9iYXJQaXhlbFRoaWNrbmVzcygpO3JldHVybiBpPWkubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBQYXQuZXh0ZW50KFthLmludmVydChuLl9nZXRQb3NpdGlvbkF0dHIoYS5zY2FsZShsWzBdKSxzKSksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFswXSkscykrcyksYS5pbnZlcnQobi5fZ2V0UG9zaXRpb25BdHRyKGEuc2NhbGUobFsxXSkscykpLGEuaW52ZXJ0KG4uX2dldFBvc2l0aW9uQXR0cihhLnNjYWxlKGxbMV0pLHMpK3MpXSl9KSxpfSx0LnByb3RvdHlwZS5fZ2V0UG9zaXRpb25BdHRyPWZ1bmN0aW9uKHIsbil7c3dpdGNoKHRoaXMuX2lzVmVydGljYWx8fChyLT1uLG4qPS0xKSx0aGlzLl9iYXJBbGlnbm1lbnQpe2Nhc2Uic3RhcnQiOnJldHVybiByO2Nhc2UiZW5kIjpyZXR1cm4gci1uO2Nhc2UibWlkZGxlIjpkZWZhdWx0OnJldHVybiByLW4vMn19LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMuX2dldERhdGFUb0RyYXcoKSxpPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLG89dGhpcy5kYXRhc2V0cygpLnNvbWUoZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ2V0KGEpLnNvbWUoZnVuY3Rpb24ocyxsKXtyZXR1cm4gcz09bnVsbD8hMTpyLl9kcmF3TGFiZWwocyxsLGEsaSl9KX0pO3RoaXMuX2hpZGVCYXJzSWZBbnlBcmVUb29XaWRlJiZvJiZ0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gci5fbGFiZWxDb25maWcuZ2V0KGEpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPXRoaXMuX2xhYmVsQ29uZmlnLmdldChpKSxzPWEubGFiZWxBcmVhLGw9YS5tZWFzdXJlcixjPWEud3JpdGVyLHU9dGhpcy5sZW5ndGgoKS5hY2Nlc3NvcixoPXUocixuLGkpLGY9dGhpcy5sZW5ndGgoKS5zY2FsZSxwPWYhPW51bGw/Zi5zY2FsZShoKTpoLGQ9ZiE9bnVsbD9mLnNjYWxlKHRoaXMuYmFzZWxpbmVWYWx1ZSgpKTp0aGlzLmJhc2VsaW5lVmFsdWUoKSxnPXt4Om8ueChyLG4saSkseTpvLnkocixuLGkpfSxfPXt3aWR0aDpvLndpZHRoKHIsbixpKSxoZWlnaHQ6by5oZWlnaHQocixuLGkpfSx5PXRoaXMuX2xhYmVsRm9ybWF0dGVyKGgscixuLGkpLHg9bC5tZWFzdXJlKHkpLGI9dGhpcy5fc2hvdWxkU2hvd0xhYmVsT25CYXIoZyxfLHgpLFM9dGhpcy5faXNWZXJ0aWNhbD9wPD1kOnA8ZCxDPXRoaXMuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcyhnLF8seCxiLFMpLFA9Qy5jb250YWluZXJEaW1lbnNpb25zLGs9Qy5sYWJlbENvbnRhaW5lck9yaWdpbixPPUMubGFiZWxPcmlnaW4sRD1DLmFsaWdubWVudCxCPW8uZmlsbChyLG4saSksST10aGlzLl9jcmVhdGVMYWJlbENvbnRhaW5lcihzLGssTyx4LGIsQiksTD17eEFsaWduOkQueCx5QWxpZ246RC55fTtjLndyaXRlKHksUC53aWR0aCxQLmhlaWdodCxMLEkubm9kZSgpKTt2YXIgUj10aGlzLl9pc1ZlcnRpY2FsP18ud2lkdGg8eC53aWR0aDpfLmhlaWdodDx4LmhlaWdodDtyZXR1cm4gUn0sdC5wcm90b3R5cGUuX3Nob3VsZFNob3dMYWJlbE9uQmFyPWZ1bmN0aW9uKHIsbixpKXtpZih0aGlzLl9sYWJlbHNQb3NpdGlvbj09PUd1LkxhYmVsc1Bvc2l0aW9uLm91dHNpZGUpcmV0dXJuITE7dmFyIG89dGhpcy5faXNWZXJ0aWNhbD9yLnk6ci54LGE9dGhpcy5faXNWZXJ0aWNhbD9uLmhlaWdodDpuLndpZHRoLHM9dGhpcy5faXNWZXJ0aWNhbD90aGlzLmhlaWdodCgpOnRoaXMud2lkdGgoKSxsPXRoaXMuX2lzVmVydGljYWw/aS5oZWlnaHQ6aS53aWR0aCxjPW8rYSx1PWE7cmV0dXJuIGM+cz91PXMtbzpvPDAmJih1PWMpLGwrdC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVI8PXV9LHQucHJvdG90eXBlLl9jYWxjdWxhdGVMYWJlbFByb3BlcnRpZXM9ZnVuY3Rpb24ocixuLGksbyxhKXt2YXIgcz10aGlzLGw9dGhpcy5faXNWZXJ0aWNhbD9yLnk6ci54LGM9dGhpcy5faXNWZXJ0aWNhbD9uLmhlaWdodDpuLndpZHRoLHU9dGhpcy5faXNWZXJ0aWNhbD9pLmhlaWdodDppLndpZHRoLGg9ImNlbnRlciIsZj1jLHA9bCxkPWwsZz1mdW5jdGlvbihfKXtzd2l0Y2goXyl7Y2FzZSJ0b3BMZWZ0IjpoPXMuX2lzVmVydGljYWw/InRvcCI6ImxlZnQiLHArPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSLGQrPXQuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSO3JldHVybjtjYXNlImNlbnRlciI6ZCs9KGMrdSkvMjtyZXR1cm47Y2FzZSJib3R0b21SaWdodCI6aD1zLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIscC09dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIsZCs9Zi10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUi11O3JldHVybn19O2lmKG8pc3dpdGNoKHRoaXMuX2xhYmVsc1Bvc2l0aW9uKXtjYXNlIEd1LkxhYmVsc1Bvc2l0aW9uLnN0YXJ0OmcoYT8iYm90dG9tUmlnaHQiOiJ0b3BMZWZ0Iik7YnJlYWs7Y2FzZSBHdS5MYWJlbHNQb3NpdGlvbi5taWRkbGU6ZygiY2VudGVyIik7YnJlYWs7Y2FzZSBHdS5MYWJlbHNQb3NpdGlvbi5lbmQ6ZyhhPyJ0b3BMZWZ0IjoiYm90dG9tUmlnaHQiKTticmVha31lbHNlIGE/KGg9dGhpcy5faXNWZXJ0aWNhbD8idG9wIjoibGVmdCIsZj1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UscC09dC5fTEFCRUxfTUFSR0lOX0lOU0lERV9CQVIrdSxkLT10Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUit1KTooaD10aGlzLl9pc1ZlcnRpY2FsPyJib3R0b20iOiJyaWdodCIsZj1jK3QuX0xBQkVMX01BUkdJTl9JTlNJREVfQkFSK3UsZCs9Yyt0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUik7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOnRoaXMuX2lzVmVydGljYWw/bi53aWR0aDpmLGhlaWdodDp0aGlzLl9pc1ZlcnRpY2FsP2Y6bi5oZWlnaHR9LGxhYmVsQ29udGFpbmVyT3JpZ2luOnt4OnRoaXMuX2lzVmVydGljYWw/ci54OnAseTp0aGlzLl9pc1ZlcnRpY2FsP3A6ci55fSxsYWJlbE9yaWdpbjp7eDp0aGlzLl9pc1ZlcnRpY2FsP3IueCtuLndpZHRoLzItaS53aWR0aC8yOmQseTp0aGlzLl9pc1ZlcnRpY2FsP2Q6ci55K24uaGVpZ2h0LzItaS5oZWlnaHQvMn0sYWxpZ25tZW50Ont4OnRoaXMuX2lzVmVydGljYWw/ImNlbnRlciI6aCx5OnRoaXMuX2lzVmVydGljYWw/aDoiY2VudGVyIn19fSx0LnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24ocixuLGksbyxhLHMpe3ZhciBsPXIuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrbi54KyIsICIrbi55KyIpIik7aWYoYSl7bC5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKTt2YXIgYz14bC5Db2xvci5jb250cmFzdCgid2hpdGUiLHMpKjEuNjx4bC5Db2xvci5jb250cmFzdCgiYmxhY2siLHMpO2wuY2xhc3NlZChjPyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiLCEwKX1lbHNlIGwuY2xhc3NlZCgib2ZmLWJhci1sYWJlbCIsITApO3JldHVybiBsfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9dGhpcy5sZW5ndGgoKS5zY2FsZSxvPWkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGE9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLHM9dGhpcy5faXNWZXJ0aWNhbD8iaGVpZ2h0Ijoid2lkdGgiO25bYV09ZnVuY3Rpb24oKXtyZXR1cm4gb30sbltzXT1mdW5jdGlvbigpe3JldHVybiAwfSxyLnB1c2goe2F0dHJUb1Byb2plY3RvcjpuLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKG1LdC5BbmltYXRvci5SRVNFVCl9KX1yZXR1cm4gci5wdXNoKHthdHRyVG9Qcm9qZWN0b3I6dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IobUt0LkFuaW1hdG9yLk1BSU4pfSkscn0sdC5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPWUucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvci5jYWxsKHRoaXMpLGk9dGhpcy5sZW5ndGgoKS5zY2FsZSxvPWkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpLGE9dGhpcy5faXNWZXJ0aWNhbD8ieSI6IngiLHM9dGhpcy5faXNWZXJ0aWNhbD8ieCI6InkiLGw9dUIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5wb3NpdGlvbigpKSxjPXVCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMubGVuZ3RoKCkpLHU9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBNYXRoLmFicyhvLWMoZCxnLF8pKX0saD1uW3QuX0JBUl9USElDS05FU1NfS0VZXSxmPW4uZ2FwLHA9Zj09bnVsbD9oOmZ1bmN0aW9uKGQsZyxfKXt2YXIgeT1oKGQsZyxfKTtyZXR1cm4geTx0Ll9CQVJfR0FQTEVTU19USFJFU0hPTERfUFg/eTp5LWYoZCxnLF8pfTtyZXR1cm4gbi53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP3A6dSxuLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP3U6cCxuW2FdPWZ1bmN0aW9uKGQsZyxfKXt2YXIgeT1jKGQsZyxfKTtyZXR1cm4geT5vP286eX0sbltzXT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIHIuX2dldFBvc2l0aW9uQXR0cihsKGQsZyxfKSxoKGQsZyxfKSl9LG59LHQucHJvdG90eXBlLl91cGRhdGVUaGlja25lc3NBdHRyPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPXRoaXMucG9zaXRpb24oKSxpPXRoaXMuYmFyRW5kKCk7biE9bnVsbCYmaSE9bnVsbD8odGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcz0hMSx0aGlzLmF0dHIodC5fQkFSX1RISUNLTkVTU19LRVksZnVuY3Rpb24obyxhLHMpe3ZhciBsPW4uYWNjZXNzb3IobyxhLHMpLGM9aS5hY2Nlc3NvcihvLGEscyk7cmV0dXJuIGw9bi5zY2FsZT9uLnNjYWxlLnNjYWxlKGwpOmwsYz1pLnNjYWxlP2kuc2NhbGUuc2NhbGUoYyk6YyxNYXRoLmFicyhjLWwpfSkpOih0aGlzLl9maXhlZEJhclBpeGVsVGhpY2tuZXNzPSEwLHRoaXMuYXR0cih0Ll9CQVJfVEhJQ0tORVNTX0tFWSxmdW5jdGlvbigpe3JldHVybiByLl9iYXJQaXhlbFRoaWNrbmVzcygpfSkpfSx0LnByb3RvdHlwZS5fYmFyUGl4ZWxUaGlja25lc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZml4ZWRCYXJQaXhlbFRoaWNrbmVzcyYmdGhpcy5fcHJvamVjdG9yc1JlYWR5KCk/dGhpcy5fY29tcHV0ZUJhclBpeGVsVGhpY2tuZXNzKHRoaXMucG9zaXRpb24oKSx0aGlzLmRhdGFzZXRzKCksdGhpcy5faXNWZXJ0aWNhbD90aGlzLndpZHRoKCk6dGhpcy5oZWlnaHQoKSk6MH0sdC5wcm90b3R5cGUuZW50aXRpZXM9ZnVuY3Rpb24ocil7aWYocj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKSwhdGhpcy5fcHJvamVjdG9yc1JlYWR5KCkpcmV0dXJuW107dmFyIG49ZS5wcm90b3R5cGUuZW50aXRpZXMuY2FsbCh0aGlzLHIpO3JldHVybiBufSx0LnByb3RvdHlwZS5fZW50aXR5Qm91bmRzPWZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0dW0saT1yLmluZGV4LG89ci5kYXRhc2V0O3JldHVybiB0aGlzLl9waXhlbEJvdW5kcyhuLGksbyl9LHQucHJvdG90eXBlLl9waXhlbEJvdW5kcz1mdW5jdGlvbihyLG4saSl7dmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCk7cmV0dXJue3g6by54KHIsbixpKSx5Om8ueShyLG4saSksd2lkdGg6by53aWR0aChyLG4saSksaGVpZ2h0Om8uaGVpZ2h0KHIsbixpKX19LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz10aGlzLl9waXhlbEJvdW5kcyhyLG4saSksYT0odGhpcy5faXNWZXJ0aWNhbD91Qi5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSk6dUIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpKShyLG4saSkscz0odGhpcy5faXNWZXJ0aWNhbD90aGlzLnkoKS5zY2FsZTp0aGlzLngoKS5zY2FsZSkuc2NhbGUodGhpcy5iYXNlbGluZVZhbHVlKCkpO3JldHVybiB0aGlzLl9waXhlbFBvaW50QmFyKGEscyxvKX0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnRCYXI9ZnVuY3Rpb24ocixuLGkpe3ZhciBvLGE7cmV0dXJuIHRoaXMuX2lzVmVydGljYWw/KG89aS54K2kud2lkdGgvMixhPXI8PW4/aS55OmkueStpLmhlaWdodCk6KG89cj49bj9pLngraS53aWR0aDppLngsYT1pLnkraS5oZWlnaHQvMikse3g6byx5OmF9fSx0LnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXk9ZnVuY3Rpb24ocixuKXtlLnByb3RvdHlwZS5fdW5pbnN0YWxsU2NhbGVGb3JLZXkuY2FsbCh0aGlzLHIsbil9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxuPW5ldyB4bC5NYXAsaT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxvPXRoaXMud2lkdGgoKSxhPXRoaXMuaGVpZ2h0KCk7cmV0dXJuIHRoaXMuZGF0YXNldHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPXMuZGF0YSgpLm1hcChmdW5jdGlvbihjLHUpe3ZhciBoPXIuX2lzRGF0dW1PblNjcmVlbihpLG8sYSxjLHUscyk7cmV0dXJuIGg/YzpudWxsfSk7bi5zZXQocyxsKX0pLG59LHQucHJvdG90eXBlLl9pc0RhdHVtT25TY3JlZW49ZnVuY3Rpb24ocixuLGksbyxhLHMpe3ZhciBsPXIueChvLGEscyksYz1yLnkobyxhLHMpLHU9ci53aWR0aChvLGEscyksaD1yLmhlaWdodChvLGEscyksZj14bC5NYXRoLmlzVmFsaWROdW1iZXIobCkmJnhsLk1hdGguaXNWYWxpZE51bWJlcihjKSYmeGwuTWF0aC5pc1ZhbGlkTnVtYmVyKHUpJiZ4bC5NYXRoLmlzVmFsaWROdW1iZXIoaCk7cmV0dXJuIGY/eGwuTWF0aC5ib3VuZHNJbnRlcnNlY3RzKGwsYyx1LGgsMCwwLG4saSk6ITF9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuaW52YWxpZGF0ZUNhY2hlLmNhbGwodGhpcyksdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24obil7cmV0dXJuIHIuX2xhYmVsQ29uZmlnLmdldChuKS5tZWFzdXJlci5yZXNldCgpfSl9LHQuX0JBUl9USElDS05FU1NfUkFUSU89Ljk1LHQuX0JBUl9HQVBMRVNTX1RIUkVTSE9MRF9QWD0zLHQuX1NJTkdMRV9CQVJfRElNRU5TSU9OX1JBVElPPS40LHQuX0JBUl9BUkVBX0NMQVNTPSJiYXItYXJlYSIsdC5fQkFSX0VORF9LRVk9ImJhckVuZCIsdC5fQkFSX1RISUNLTkVTU19LRVk9IndpZHRoIix0Ll9MQUJFTF9BUkVBX0NMQVNTPSJiYXItbGFiZWwtdGV4dC1hcmVhIix0Ll9MQUJFTF9NQVJHSU5fSU5TSURFX0JBUj0xMCx0fShRVmUuWFlQbG90KTtHdS5CYXI9TGF0O2Z1bmN0aW9uIHRVZShlLHQscil7dmFyIG4saT1lLnNjYWxlO2lmKGkgaW5zdGFuY2VvZiBJYXQuQ2F0ZWdvcnkpbj1pLnJhbmdlQmFuZCgpO2Vsc2V7dmFyIG89ZS5hY2Nlc3NvcixhPVBhdC5zZXQoeGwuQXJyYXkuZmxhdHRlbih0Lm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy5kYXRhKCkubWFwKGZ1bmN0aW9uKHUsaCl7cmV0dXJuIG8odSxoLGMpfSkuZmlsdGVyKGZ1bmN0aW9uKHUpe3JldHVybiB1IT1udWxsfSkubWFwKGZ1bmN0aW9uKHUpe3JldHVybiB1LnZhbHVlT2YoKX0pfSkpKS52YWx1ZXMoKS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuK2N9KTthLnNvcnQoZnVuY3Rpb24oYyx1KXtyZXR1cm4gYy11fSk7dmFyIHM9YS5tYXAoZnVuY3Rpb24oYyl7cmV0dXJuIGkuc2NhbGUoYyl9KSxsPVBhdC5wYWlycyhzKTtuPXhsLk1hdGgubWluKGwsZnVuY3Rpb24oYyx1KXtyZXR1cm4gTWF0aC5hYnMoY1sxXS1jWzBdKX0scipMYXQuX1NJTkdMRV9CQVJfRElNRU5TSU9OX1JBVElPKSxuKj1MYXQuX0JBUl9USElDS05FU1NfUkFUSU99cmV0dXJuIG59fSk7dmFyIF9LdD1IKFJhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgZVVlPShkZSgpLFV0KHBlKSksclVlPWtzKCksblVlPUZlKCksZ0t0PV80KCksaVVlPXJzKCksb1VlPWZ1bmN0aW9uKGUpe2VVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJ2ZXJ0aWNhbCIpO3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBuLl9jbHVzdGVyT2Zmc2V0cz1uZXcgblVlLk1hcCxufXJldHVybiB0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9tYWtlSW5uZXJTY2FsZSgpLG89ZnVuY3Rpb24obCxjKXtyZXR1cm4gaS5yYW5nZUJhbmQoKX07bi53aWR0aD10aGlzLl9pc1ZlcnRpY2FsP286bi53aWR0aCxuLmhlaWdodD10aGlzLl9pc1ZlcnRpY2FsP24uaGVpZ2h0Om87dmFyIGE9bi54LHM9bi55O3JldHVybiBuLng9dGhpcy5faXNWZXJ0aWNhbD9mdW5jdGlvbihsLGMsdSl7cmV0dXJuIGEobCxjLHUpK3IuX2NsdXN0ZXJPZmZzZXRzLmdldCh1KX06ZnVuY3Rpb24obCxjLHUpe3JldHVybiBhKGwsYyx1KX0sbi55PXRoaXMuX2lzVmVydGljYWw/ZnVuY3Rpb24obCxjLHUpe3JldHVybiBzKGwsYyx1KX06ZnVuY3Rpb24obCxjLHUpe3JldHVybiBzKGwsYyx1KStyLl9jbHVzdGVyT2Zmc2V0cy5nZXQodSl9LG59LHQucHJvdG90eXBlLl91cGRhdGVDbHVzdGVyUG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49dGhpcy5fbWFrZUlubmVyU2NhbGUoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpLG8pe3JldHVybiByLl9jbHVzdGVyT2Zmc2V0cy5zZXQoaSxuLnNjYWxlKFN0cmluZyhvKSktbi5yYW5nZUJhbmQoKS8yKX0pfSx0LnByb3RvdHlwZS5fbWFrZUlubmVyU2NhbGU9ZnVuY3Rpb24oKXt2YXIgcj1uZXcgclVlLkNhdGVnb3J5O3IuZG9tYWluKHRoaXMuZGF0YXNldHMoKS5tYXAoZnVuY3Rpb24oaSxvKXtyZXR1cm4gU3RyaW5nKG8pfSkpO3ZhciBuPWlVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmF0dHIoZ0t0LkJhci5fQkFSX1RISUNLTkVTU19LRVkpKTtyZXR1cm4gci5yYW5nZShbMCxuKG51bGwsMCxudWxsKV0pLHJ9LHQucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZUNsdXN0ZXJQb3NpdGlvbigpLGUucHJvdG90eXBlLl9nZXREYXRhVG9EcmF3LmNhbGwodGhpcyl9LHR9KGdLdC5CYXIpO1JhdC5DbHVzdGVyZWRCYXI9b1VlfSk7dmFyIHlLdD1IKERhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgYVVlPShkZSgpLFV0KHBlKSkseTQ9KEVyKCksVXQoTXIpKSxOYXQ9X2woKSxzVWU9TGYoKSxsVWU9QnUoKSxjVWU9a3MoKSxWMT1GZSgpLHVVZT1wYXQoKSxoVWU9bWF0KCksZlVlPVV1KCkscFVlPUNGKCksTWQ9cnMoKSxkVWU9ZnVuY3Rpb24oZSl7YVVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3N0YXJ0QW5nbGU9MCxyLl9lbmRBbmdsZT0yKk1hdGguUEksci5fbGFiZWxGb3JtYXR0ZXI9bFVlLmlkZW50aXR5KCksci5fbGFiZWxzRW5hYmxlZD0hMSxyLmlubmVyUmFkaXVzKDApLHIub3V0ZXJSYWRpdXMoZnVuY3Rpb24oKXt2YXIgbj1yLl9waWVDZW50ZXIoKTtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoci53aWR0aCgpLW4ueCxuLngpLE1hdGgubWF4KHIuaGVpZ2h0KCktbi55LG4ueSkpfSksci5hZGRDbGFzcygicGllLXBsb3QiKSxyLmF0dHIoImZpbGwiLGZ1bmN0aW9uKG4saSl7cmV0dXJuIFN0cmluZyhpKX0sbmV3IGNVZS5Db2xvciksci5fc3Ryb2tlRHJhd2Vycz1uZXcgVjEuTWFwLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe3ZhciByPXRoaXM7ZS5wcm90b3R5cGUuX3NldHVwLmNhbGwodGhpcyksdGhpcy5fc3Ryb2tlRHJhd2Vycy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3JldHVybiBuLmF0dGFjaFRvKHIuX3JlbmRlckFyZWEpfSl9LHQucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQ9ZnVuY3Rpb24ocixuLGkpe2UucHJvdG90eXBlLmNvbXB1dGVMYXlvdXQuY2FsbCh0aGlzLHIsbixpKTt2YXIgbz10aGlzLl9waWVDZW50ZXIoKTt0aGlzLl9yZW5kZXJBcmVhLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK28ueCsiLCIrby55KyIpIik7dmFyIGE9TWF0aC5taW4oTWF0aC5tYXgodGhpcy53aWR0aCgpLW8ueCxvLngpLE1hdGgubWF4KHRoaXMuaGVpZ2h0KCktby55LG8ueSkpO3JldHVybiB0aGlzLmlubmVyUmFkaXVzKCkuc2NhbGUhPW51bGwmJnRoaXMuaW5uZXJSYWRpdXMoKS5zY2FsZS5yYW5nZShbMCxhXSksdGhpcy5vdXRlclJhZGl1cygpLnNjYWxlIT1udWxsJiZ0aGlzLm91dGVyUmFkaXVzKCkuc2NhbGUucmFuZ2UoWzAsYV0pLHRoaXN9LHQucHJvdG90eXBlLmFkZERhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLmFkZERhdGFzZXQuY2FsbCh0aGlzLHIpLHRoaXN9LHQucHJvdG90eXBlLl9hZGREYXRhc2V0PWZ1bmN0aW9uKHIpe2lmKHRoaXMuZGF0YXNldHMoKS5sZW5ndGg9PT0xKXJldHVybiBWMS5XaW5kb3cud2FybigiT25seSBvbmUgZGF0YXNldCBpcyBzdXBwb3J0ZWQgaW4gUGllIHBsb3RzIiksdGhpczt0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSxlLnByb3RvdHlwZS5fYWRkRGF0YXNldC5jYWxsKHRoaXMscik7dmFyIG49bmV3IGhVZS5BcmNPdXRsaW5lU1ZHRHJhd2VyO3JldHVybiB0aGlzLl9pc1NldHVwJiZuLmF0dGFjaFRvKHRoaXMuX3JlbmRlckFyZWEpLHRoaXMuX3N0cm9rZURyYXdlcnMuc2V0KHIsbiksdGhpc30sdC5wcm90b3R5cGUucmVtb3ZlRGF0YXNldD1mdW5jdGlvbihyKXtyZXR1cm4gZS5wcm90b3R5cGUucmVtb3ZlRGF0YXNldC5jYWxsKHRoaXMsciksdGhpc30sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxyKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmdldChyKS5yZW1vdmUoKX0sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXQ9ZnVuY3Rpb24ocil7cmV0dXJuIGUucHJvdG90eXBlLl9yZW1vdmVEYXRhc2V0LmNhbGwodGhpcyxyKSx0aGlzLl9zdHJva2VEcmF3ZXJzLmRlbGV0ZShyKSx0aGlzLl9zdGFydEFuZ2xlcz1bXSx0aGlzLl9lbmRBbmdsZXM9W10sdGhpc30sdC5wcm90b3R5cGUuc2VsZWN0aW9ucz1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3I9PT12b2lkIDAmJihyPXRoaXMuZGF0YXNldHMoKSk7dmFyIGk9ZS5wcm90b3R5cGUuc2VsZWN0aW9ucy5jYWxsKHRoaXMscikubm9kZXMoKTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW4uX3N0cm9rZURyYXdlcnMuZ2V0KG8pO2EhPW51bGwmJmkucHVzaC5hcHBseShpLGEuZ2V0VmlzdWFsUHJpbWl0aXZlcygpKX0pLHk0LnNlbGVjdEFsbChpKX0sdC5wcm90b3R5cGUuX29uRGF0YXNldFVwZGF0ZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpfSx0LnByb3RvdHlwZS5fY3JlYXRlRHJhd2VyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBmVWUuUHJveHlEcmF3ZXIoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHVVZS5BcmNTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHBVZS53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBQaWUgUGxvdCEiKSxudWxsfSl9LHQucHJvdG90eXBlLmVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7cj09PXZvaWQgMCYmKHI9dGhpcy5kYXRhc2V0cygpKTt2YXIgaT1lLnByb3RvdHlwZS5lbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe28ucG9zaXRpb24ueCs9bi53aWR0aCgpLzIsby5wb3NpdGlvbi55Kz1uLmhlaWdodCgpLzI7dmFyIGE9eTQuc2VsZWN0KG4uX3N0cm9rZURyYXdlcnMuZ2V0KG8uZGF0YXNldCkuZ2V0VmlzdWFsUHJpbWl0aXZlQXRJbmRleChvLmluZGV4KSkscz1vO3JldHVybiBzLnN0cm9rZVNlbGVjdGlvbj1hLHN9KX0sdC5wcm90b3R5cGUuc2VjdG9yVmFsdWU9ZnVuY3Rpb24ocixuKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9TRUNUT1JfVkFMVUVfS0VZKToodGhpcy5fYmluZFByb3BlcnR5KHQuX1NFQ1RPUl9WQUxVRV9LRVkscixuKSx0aGlzLl91cGRhdGVQaWVBbmdsZXMoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5pbm5lclJhZGl1cz1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP3RoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX0lOTkVSX1JBRElVU19LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fSU5ORVJfUkFESVVTX0tFWSxyLG4pLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fT1VURVJfUkFESVVTX0tFWSk6KHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9PVVRFUl9SQURJVVNfS0VZLHIsbiksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuc3RhcnRBbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zdGFydEFuZ2xlOih0aGlzLl9zdGFydEFuZ2xlPXIsdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZW5kQW5nbGU9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fZW5kQW5nbGU6KHRoaXMuX2VuZEFuZ2xlPXIsdGhpcy5fdXBkYXRlUGllQW5nbGVzKCksdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUubGFiZWxzRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbHNFbmFibGVkOih0aGlzLl9sYWJlbHNFbmFibGVkPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUubGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxGb3JtYXR0ZXI6KHRoaXMuX2xhYmVsRm9ybWF0dGVyPXIsdGhpcy5yZW5kZXIoKSx0aGlzKX0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj17eDp0aGlzLndpZHRoKCkvMix5OnRoaXMuaGVpZ2h0KCkvMn0saT17eDpyLngtbi54LHk6ci55LW4ueX0sbz10aGlzLl9zbGljZUluZGV4Rm9yUG9pbnQoaSk7cmV0dXJuIG89PW51bGw/W106W3RoaXMuZW50aXRpZXMoKVtvXV19LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLGk9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5pbm5lclJhZGl1cygpKSxvPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMub3V0ZXJSYWRpdXMoKSk7cmV0dXJuIG4uZD1mdW5jdGlvbihhLHMsbCl7cmV0dXJuIHk0LmFyYygpLmlubmVyUmFkaXVzKGkoYSxzLGwpKS5vdXRlclJhZGl1cyhvKGEscyxsKSkuc3RhcnRBbmdsZShyLl9zdGFydEFuZ2xlc1tzXSkuZW5kQW5nbGUoci5fZW5kQW5nbGVzW3NdKShhLHMpfSxufSx0LnByb3RvdHlwZS5fdXBkYXRlUGllQW5nbGVzPWZ1bmN0aW9uKCl7aWYodGhpcy5zZWN0b3JWYWx1ZSgpIT1udWxsJiZ0aGlzLmRhdGFzZXRzKCkubGVuZ3RoIT09MCl7dmFyIHI9TWQuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zZWN0b3JWYWx1ZSgpKSxuPXRoaXMuZGF0YXNldHMoKVswXSxpPXRoaXMuX2dldERhdGFUb0RyYXcoKS5nZXQobiksbz15NC5waWUoKS5zb3J0KG51bGwpLnN0YXJ0QW5nbGUodGhpcy5fc3RhcnRBbmdsZSkuZW5kQW5nbGUodGhpcy5fZW5kQW5nbGUpLnZhbHVlKGZ1bmN0aW9uKGEscyl7cmV0dXJuIHIoYSxzLG4pfSkoaSk7dGhpcy5fc3RhcnRBbmdsZXM9by5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3RhcnRBbmdsZX0pLHRoaXMuX2VuZEFuZ2xlcz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5lbmRBbmdsZX0pfX0sdC5wcm90b3R5cGUuX3BpZUNlbnRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMuX3N0YXJ0QW5nbGU8dGhpcy5fZW5kQW5nbGU/dGhpcy5fc3RhcnRBbmdsZTp0aGlzLl9lbmRBbmdsZSxuPXRoaXMuX3N0YXJ0QW5nbGU8dGhpcy5fZW5kQW5nbGU/dGhpcy5fZW5kQW5nbGU6dGhpcy5fc3RhcnRBbmdsZSxpPU1hdGguc2luKHIpLG89TWF0aC5jb3MociksYT1NYXRoLnNpbihuKSxzPU1hdGguY29zKG4pLGwsYyx1LGg7cmV0dXJuIGk+PTAmJmE+PTA/bz49MCYmcz49MD8obD1vLGM9MCxoPTAsdT1hKTpvPDAmJnM8MD8obD0wLGM9LXMsaD0wLHU9aSk6bz49MCYmczwwPyhsPW8sYz0tcyxoPTAsdT1pKTpvPDAmJnM+PTAmJihsPTEsYz0xLGg9MSx1PU1hdGgubWF4KGksYSkpOmk+PTAmJmE8MD9vPj0wJiZzPj0wPyhsPU1hdGgubWF4KG8scyksYz0xLGg9MSx1PTEpOm88MCYmczwwPyhsPTAsYz0xLGg9LWEsdT1pKTpvPj0wJiZzPDA/KGw9byxjPTEsaD0tYSx1PTEpOm88MCYmcz49MCYmKGw9cyxjPTEsaD0xLHU9aSk6aTwwJiZhPj0wP28+PTAmJnM+PTA/KGw9MSxjPTAsaD0taSx1PWEpOm88MCYmczwwPyhsPTEsYz1NYXRoLm1heCgtbywtcyksaD0xLHU9MSk6bz49MCYmczwwPyhsPTEsYz0tcyxoPS1pLHU9MSk6bzwwJiZzPj0wJiYobD0xLGM9LW8saD0xLHU9YSk6aTwwJiZhPDAmJihvPj0wJiZzPj0wPyhsPXMsYz0wLGg9LWksdT0wKTpvPDAmJnM8MD8obD0wLGM9LW8saD0tYSx1PTApOm8+PTAmJnM8MD8obD0xLGM9MSxoPU1hdGgubWF4KG8sLXMpLHU9MSk6bzwwJiZzPj0wJiYobD1zLGM9LW8saD0xLHU9MCkpLHt4OmgrdT09MD8wOmgvKGgrdSkqdGhpcy53aWR0aCgpLHk6bCtjPT0wPzA6bC8obCtjKSp0aGlzLmhlaWdodCgpfX0sdC5wcm90b3R5cGUuX2dldERhdGFUb0RyYXc9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdy5jYWxsKHRoaXMpO2lmKHRoaXMuZGF0YXNldHMoKS5sZW5ndGg9PT0wKXJldHVybiByO3ZhciBuPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMuc2VjdG9yVmFsdWUoKSksaT10aGlzLmRhdGFzZXRzKClbMF0sbz1yLmdldChpKSxhPW8uZmlsdGVyKGZ1bmN0aW9uKHMsbCl7cmV0dXJuIHQuX2lzVmFsaWREYXRhKG4ocyxsLGkpKX0pO3JldHVybiByLnNldChpLGEpLHJ9LHQuX2lzVmFsaWREYXRhPWZ1bmN0aW9uKHIpe3JldHVybiBWMS5NYXRoLmlzVmFsaWROdW1iZXIocikmJnI+PTB9LHQucHJvdG90eXBlLl9waXhlbFBvaW50PWZ1bmN0aW9uKHIsbixpKXt2YXIgbz1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNlY3RvclZhbHVlKCkpO2lmKCF0Ll9pc1ZhbGlkRGF0YShvKHIsbixpKSkpcmV0dXJue3g6TmFOLHk6TmFOfTt2YXIgYT1NZC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLmlubmVyUmFkaXVzKCkpKHIsbixpKSxzPU1kLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMub3V0ZXJSYWRpdXMoKSkocixuLGkpLGw9KGErcykvMixjPXk0LnBpZSgpLnNvcnQobnVsbCkudmFsdWUoZnVuY3Rpb24ocCxkKXt2YXIgZz1vKHAsZCxpKTtyZXR1cm4gdC5faXNWYWxpZERhdGEoZyk/ZzowfSkuc3RhcnRBbmdsZSh0aGlzLl9zdGFydEFuZ2xlKS5lbmRBbmdsZSh0aGlzLl9lbmRBbmdsZSkoaS5kYXRhKCkpLHU9Y1tuXS5zdGFydEFuZ2xlLGg9Y1tuXS5lbmRBbmdsZSxmPSh1K2gpLzI7cmV0dXJue3g6bCpNYXRoLnNpbihmKSx5Oi1sKk1hdGguY29zKGYpfX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3RoaXMuX3JlbmRlckFyZWEuc2VsZWN0KCIubGFiZWwtYXJlYSIpLnJlbW92ZSgpLHRoaXMuX2xhYmVsc0VuYWJsZWQmJlYxLldpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG4uX2RyYXdMYWJlbHMoKX0scik7dmFyIGk9dGhpcy5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHMoKSxvPXRoaXMuX2dldERhdGFUb0RyYXcoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgcz1NZC5QbG90LmFwcGx5RHJhd1N0ZXBzKGksYSk7bi5fc3Ryb2tlRHJhd2Vycy5nZXQoYSkuZHJhdyhvLmdldChhKSxzKX0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVTdHJva2VEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm5be2F0dHJUb1Byb2plY3RvcjpyLGFuaW1hdG9yOm5ldyBzVWUuTnVsbH1dfSx0LnByb3RvdHlwZS5fc2xpY2VJbmRleEZvclBvaW50PWZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguc3FydChNYXRoLnBvdyhyLngsMikrTWF0aC5wb3coci55LDIpKSxpPU1hdGguYWNvcygtci55L24pO3IueDwwJiYoaT1NYXRoLlBJKjItaSk7Zm9yKHZhciBvLGE9MDthPHRoaXMuX3N0YXJ0QW5nbGVzLmxlbmd0aDthKyspaWYodGhpcy5fc3RhcnRBbmdsZXNbYV08aSYmdGhpcy5fZW5kQW5nbGVzW2FdPmkpe289YTticmVha31pZihvIT09dm9pZCAwKXt2YXIgcz10aGlzLmRhdGFzZXRzKClbMF0sbD1zLmRhdGEoKVtvXSxjPXRoaXMuaW5uZXJSYWRpdXMoKS5hY2Nlc3NvcihsLG8scyksdT10aGlzLm91dGVyUmFkaXVzKCkuYWNjZXNzb3IobCxvLHMpO2lmKG4+YyYmbjx1KXJldHVybiBvfXJldHVybiBudWxsfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLG49dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksaT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxvPW5ldyBOYXQuU3ZnQ29udGV4dChpLm5vZGUoKSksYT1uZXcgTmF0LkNhY2hlTWVhc3VyZXIobykscz1uZXcgTmF0LldyaXRlcihhLG8pLGw9dGhpcy5kYXRhc2V0cygpWzBdLGM9dGhpcy5fZ2V0RGF0YVRvRHJhdygpLmdldChsKSx1PWMubGVuZ3RoLGg9ZnVuY3Rpb24oZCl7dmFyIGc9Y1tkXSxfPWYuc2VjdG9yVmFsdWUoKS5hY2Nlc3NvcihnLGQsbCk7aWYoIVYxLk1hdGguaXNWYWxpZE51bWJlcihfKSlyZXR1cm4iY29udGludWUiO189Zi5fbGFiZWxGb3JtYXR0ZXIoXyxnLGQsbCk7dmFyIHk9YS5tZWFzdXJlKF8pLHg9KGYuX2VuZEFuZ2xlc1tkXStmLl9zdGFydEFuZ2xlc1tkXSkvMixiPWYub3V0ZXJSYWRpdXMoKS5hY2Nlc3NvcihnLGQsbCk7Zi5vdXRlclJhZGl1cygpLnNjYWxlJiYoYj1mLm91dGVyUmFkaXVzKCkuc2NhbGUuc2NhbGUoYikpO3ZhciBTPWYuaW5uZXJSYWRpdXMoKS5hY2Nlc3NvcihnLGQsbCk7Zi5pbm5lclJhZGl1cygpLnNjYWxlJiYoUz1mLmlubmVyUmFkaXVzKCkuc2NhbGUuc2NhbGUoUykpO3ZhciBDPShiK1MpLzIsUD1NYXRoLnNpbih4KSpDLXkud2lkdGgvMixrPS1NYXRoLmNvcyh4KSpDLXkuaGVpZ2h0LzIsTz1be3g6UCx5Omt9LHt4OlAseTprK3kuaGVpZ2h0fSx7eDpQK3kud2lkdGgseTprfSx7eDpQK3kud2lkdGgseTprK3kuaGVpZ2h0fV0sRD1PLmV2ZXJ5KGZ1bmN0aW9uKHope3JldHVybiBNYXRoLmFicyh6LngpPD1yLndpZHRoKCkvMiYmTWF0aC5hYnMoei55KTw9ci5oZWlnaHQoKS8yfSk7aWYoRCl7dmFyIEI9Ty5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHIuX3NsaWNlSW5kZXhGb3JQb2ludCh6KX0pO0Q9Qi5ldmVyeShmdW5jdGlvbih6KXtyZXR1cm4gej09PWR9KX12YXIgST1uLmZpbGwoZyxkLGwpLEw9VjEuQ29sb3IuY29udHJhc3QoIndoaXRlIixJKSoxLjY8VjEuQ29sb3IuY29udHJhc3QoImJsYWNrIixJKSxSPWkuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCIraysiKSIpLEY9TD8iZGFyay1sYWJlbCI6ImxpZ2h0LWxhYmVsIjtSLmNsYXNzZWQoRiwhMCksUi5zdHlsZSgidmlzaWJpbGl0eSIsRD8iaW5oZXJpdCI6ImhpZGRlbiIpLHMud3JpdGUoXyx5LndpZHRoLHkuaGVpZ2h0LHt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifSxSLm5vZGUoKSl9LGY9dGhpcyxwPTA7cDx1O3ArKyloKHApfSx0Ll9JTk5FUl9SQURJVVNfS0VZPSJpbm5lci1yYWRpdXMiLHQuX09VVEVSX1JBRElVU19LRVk9Im91dGVyLXJhZGl1cyIsdC5fU0VDVE9SX1ZBTFVFX0tFWT0ic2VjdG9yLXZhbHVlIix0fShNZC5QbG90KTtEYXQuUGllPWRVZX0pO3ZhciB2S3Q9SCh6YXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHphdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG1VZT0oZGUoKSxVdChwZSkpLGdVZT0oRXIoKSxVdChNcikpLE9hdD1fbCgpLF9VZT1MZigpLHlVZT1CMSgpLHZVZT1VdSgpLHhVZT1pQigpLGhCPWtzKCksT2M9RmUoKSxmQj1ycygpLGJVZT1IMSgpLHdVZT1mdW5jdGlvbihlKXttVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5fbGFiZWxzRW5hYmxlZD0hMSxyLl9sYWJlbD1udWxsLHIuYW5pbWF0b3IoInJlY3RhbmdsZXMiLG5ldyBfVWUuTnVsbCksci5hZGRDbGFzcygicmVjdGFuZ2xlLXBsb3QiKSxyLmF0dHIoImZpbGwiLG5ldyBoQi5Db2xvcigpLnJhbmdlKClbMF0pLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZVZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgeFVlLlJlY3RhbmdsZVNWR0RyYXdlcn0sZnVuY3Rpb24ocil7cmV0dXJuIG5ldyB5VWUuUmVjdGFuZ2xlQ2FudmFzRHJhd2VyKHIpfSl9LHQucHJvdG90eXBlLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3Rvcj1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1lLnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3IuY2FsbCh0aGlzKSxpPWZCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueCgpKSxvPW5bdC5fWDJfS0VZXSxhPWZCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueSgpKSxzPW5bdC5fWTJfS0VZXSxsPXRoaXMueCgpLnNjYWxlLGM9dGhpcy55KCkuc2NhbGU7cmV0dXJuIG8hPW51bGw/KG4ud2lkdGg9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBNYXRoLmFicyhvKHUsaCxmKS1pKHUsaCxmKSl9LG4ueD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGgubWluKG8odSxoLGYpLGkodSxoLGYpKX0pOihuLndpZHRoPWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gci5fcmVjdGFuZ2xlV2lkdGgobCl9LG4ueD1mdW5jdGlvbih1LGgsZil7cmV0dXJuIGkodSxoLGYpLS41Km4ud2lkdGgodSxoLGYpfSkscyE9bnVsbD8obi5oZWlnaHQ9ZnVuY3Rpb24odSxoLGYpe3JldHVybiBNYXRoLmFicyhzKHUsaCxmKS1hKHUsaCxmKSl9LG4ueT1mdW5jdGlvbih1LGgsZil7cmV0dXJuIE1hdGgubWF4KHModSxoLGYpLGEodSxoLGYpKS1uLmhlaWdodCh1LGgsZil9KToobi5oZWlnaHQ9ZnVuY3Rpb24odSxoLGYpe3JldHVybiByLl9yZWN0YW5nbGVXaWR0aChjKX0sbi55PWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gYSh1LGgsZiktLjUqbi5oZWlnaHQodSxoLGYpfSksZGVsZXRlIG5bdC5fWDJfS0VZXSxkZWxldGUgblt0Ll9ZMl9LRVldLG59LHQucHJvdG90eXBlLl9nZW5lcmF0ZURyYXdTdGVwcz1mdW5jdGlvbigpe3JldHVyblt7YXR0clRvUHJvamVjdG9yOnRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGFuaW1hdG9yOnRoaXMuX2dldEFuaW1hdG9yKCJyZWN0YW5nbGVzIil9XX0sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ4Iik6cj09PSJ5MiI/ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieSIpOmUucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuLGkpe2lmKHI9PW51bGwpcmV0dXJuIGUucHJvdG90eXBlLnguY2FsbCh0aGlzKTtpZihuPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbixpKSxuIT1udWxsKXt2YXIgbz10aGlzLngyKCksYT1vJiZvLmFjY2Vzc29yO2EhPW51bGwmJnRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9YMl9LRVksYSxuLG8ucG9zdFNjYWxlKX1yZXR1cm4gbiBpbnN0YW5jZW9mIGhCLkNhdGVnb3J5JiZuLmlubmVyUGFkZGluZygwKS5vdXRlclBhZGRpbmcoMCksdGhpc30sdC5wcm90b3R5cGUueDI9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9YMl9LRVkpO3ZhciBpPXRoaXMueCgpLG89aSYmaS5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1gyX0tFWSxyLG8sbiksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS55PWZ1bmN0aW9uKHIsbixpKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS55LmNhbGwodGhpcyk7aWYobj09bnVsbD9lLnByb3RvdHlwZS55LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4saSksbiE9bnVsbCl7dmFyIG89dGhpcy55MigpLGE9byYmby5hY2Nlc3NvcjthIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWTJfS0VZLGEsbixvLnBvc3RTY2FsZSl9cmV0dXJuIG4gaW5zdGFuY2VvZiBoQi5DYXRlZ29yeSYmbi5pbm5lclBhZGRpbmcoMCkub3V0ZXJQYWRkaW5nKDApLHRoaXN9LHQucHJvdG90eXBlLnkyPWZ1bmN0aW9uKHIsbil7aWYocj09bnVsbClyZXR1cm4gdGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fWTJfS0VZKTt2YXIgaT10aGlzLnkoKSxvPWkmJmkuc2NhbGU7cmV0dXJuIHRoaXMuX2JpbmRQcm9wZXJ0eSh0Ll9ZMl9LRVkscixvLG4pLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm4gdGhpcy5lbnRpdGllcygpLmZpbHRlcihmdW5jdGlvbihpKXt2YXIgbz1pLmRhdHVtLGE9aS5pbmRleCxzPWkuZGF0YXNldCxsPW4ueChvLGEscyksYz1uLnkobyxhLHMpLHU9bi53aWR0aChvLGEscyksaD1uLmhlaWdodChvLGEscyk7cmV0dXJuIGw8PXIueCYmci54PD1sK3UmJmM8PXIueSYmci55PD1jK2h9KX0sdC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihyKXt2YXIgbj1yLmRhdHVtLGk9ci5pbmRleCxvPXIuZGF0YXNldDtyZXR1cm4gdGhpcy5fZW50aXR5QkJveChuLGksbyx0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSl9LHQucHJvdG90eXBlLl9lbnRpdHlCQm94PWZ1bmN0aW9uKHIsbixpLG8pe3JldHVybnt4Om8ueChyLG4saSkseTpvLnkocixuLGkpLHdpZHRoOm8ud2lkdGgocixuLGkpLGhlaWdodDpvLmhlaWdodChyLG4saSl9fSx0LnByb3RvdHlwZS5sYWJlbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9sYWJlbDoodGhpcy5fbGFiZWw9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5sYWJlbHNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2xhYmVsc0VuYWJsZWQ6KHRoaXMuX2xhYmVsc0VuYWJsZWQ9cix0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpO3JldHVybiB0aGlzLngyKCkhPW51bGwmJihyLngyPWZCLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSkpLHRoaXMueTIoKSE9bnVsbCYmKHIueTI9ZkIuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55MigpKSkscn0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGE9by54KHIsbixpKSxzPW8ueShyLG4saSksbD1vLndpZHRoKHIsbixpKSxjPW8uaGVpZ2h0KHIsbixpKSx1PWErbC8yLGg9cytjLzI7cmV0dXJue3g6dSx5Omh9fSx0LnByb3RvdHlwZS5fcmVjdGFuZ2xlV2lkdGg9ZnVuY3Rpb24ocil7aWYociBpbnN0YW5jZW9mIGhCLkNhdGVnb3J5KXJldHVybiByLnJhbmdlQmFuZCgpO3ZhciBuPXI9PT10aGlzLngoKS5zY2FsZT90aGlzLngoKS5hY2Nlc3Nvcjp0aGlzLnkoKS5hY2Nlc3NvcixpPWdVZS5zZXQoT2MuQXJyYXkuZmxhdHRlbih0aGlzLmRhdGFzZXRzKCkubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBjLmRhdGEoKS5tYXAoZnVuY3Rpb24odSxoKXtyZXR1cm4gbih1LGgsYykudmFsdWVPZigpfSl9KSkpLnZhbHVlcygpLm1hcChmdW5jdGlvbihjKXtyZXR1cm4rY30pLG89T2MuTWF0aC5taW4oaSwwKSxhPU9jLk1hdGgubWF4KGksMCkscz1yLnNjYWxlKG8pLGw9ci5zY2FsZShhKTtyZXR1cm4obC1zKS9NYXRoLmFicyhhLW8pfSx0LnByb3RvdHlwZS5fZ2V0RGF0YVRvRHJhdz1mdW5jdGlvbigpe3ZhciByPW5ldyBPYy5NYXAsbj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTtyZXR1cm4gdGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIG89aS5kYXRhKCkubWFwKGZ1bmN0aW9uKGEscyl7dmFyIGw9T2MuTWF0aC5pc1ZhbGlkTnVtYmVyKG4ueChhLHMsaSkpJiZPYy5NYXRoLmlzVmFsaWROdW1iZXIobi55KGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLndpZHRoKGEscyxpKSkmJk9jLk1hdGguaXNWYWxpZE51bWJlcihuLmhlaWdodChhLHMsaSkpO3JldHVybiBsP2E6bnVsbH0pO3Iuc2V0KGksbyl9KSxyfSx0LnByb3RvdHlwZS5fYWRkaXRpb25hbFBhaW50PWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXM7dGhpcy5fcmVuZGVyQXJlYS5zZWxlY3RBbGwoIi5sYWJlbC1hcmVhIikucmVtb3ZlKCksdGhpcy5fbGFiZWxzRW5hYmxlZCYmdGhpcy5sYWJlbCgpIT1udWxsJiZPYy5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3TGFiZWxzKCl9LHIpfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXREYXRhVG9EcmF3KCk7dGhpcy5kYXRhc2V0cygpLmZvckVhY2goZnVuY3Rpb24oaSxvKXtyZXR1cm4gci5fZHJhd0xhYmVsKG4saSxvKX0pfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVsPWZ1bmN0aW9uKHIsbixpKXtmb3IodmFyIG89dGhpcy5fZ2V0QXR0clRvUHJvamVjdG9yKCksYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoImxhYmVsLWFyZWEiLCEwKSxzPW5ldyBPYXQuU3ZnQ29udGV4dChhLm5vZGUoKSksbD1uZXcgT2F0LkNhY2hlTWVhc3VyZXIocyksYz1uZXcgT2F0LldyaXRlcihsLHMpLHU9dGhpcy54KCkuc2NhbGUucmFuZ2UoKSxoPXRoaXMueSgpLnNjYWxlLnJhbmdlKCksZj1NYXRoLm1pbi5hcHBseShudWxsLHUpLHA9TWF0aC5tYXguYXBwbHkobnVsbCx1KSxkPU1hdGgubWluLmFwcGx5KG51bGwsaCksZz1NYXRoLm1heC5hcHBseShudWxsLGgpLF89ci5nZXQobikseT1fLmxlbmd0aCx4PTA7eDx5O3grKyl7dmFyIGI9X1t4XTtpZihiIT1udWxsKXt2YXIgUz0iIit0aGlzLmxhYmVsKCkoYix4LG4pLEM9bC5tZWFzdXJlKFMpLFA9by54KGIseCxuKSxrPW8ueShiLHgsbiksTz1vLndpZHRoKGIseCxuKSxEPW8uaGVpZ2h0KGIseCxuKTtpZihDLmhlaWdodDw9RCYmQy53aWR0aDw9Tyl7dmFyIEI9KE8tQy53aWR0aCkvMixJPShELUMuaGVpZ2h0KS8yO1ArPUIsays9STt2YXIgTD17bWluOlAsbWF4OlArQy53aWR0aH0sUj17bWluOmssbWF4OmsrQy5oZWlnaHR9O2lmKEwubWluPGZ8fEwubWF4PnB8fFIubWluPGR8fFIubWF4Pmd8fHRoaXMuX292ZXJsYXlMYWJlbChMLFIseCxpLHIpKWNvbnRpbnVlO3ZhciBGPW8uZmlsbChiLHgsbiksej1PYy5Db2xvci5jb250cmFzdCgid2hpdGUiLEYpKjEuNjxPYy5Db2xvci5jb250cmFzdCgiYmxhY2siLEYpLFU9YS5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitQKyIsIitrKyIpIiksVz16PyJkYXJrLWxhYmVsIjoibGlnaHQtbGFiZWwiO1UuY2xhc3NlZChXLCEwKSxjLndyaXRlKFMsQy53aWR0aCxDLmhlaWdodCx7eEFsaWduOiJjZW50ZXIiLHlBbGlnbjoiY2VudGVyIn0sVS5ub2RlKCkpfX19fSx0LnByb3RvdHlwZS5fb3ZlcmxheUxhYmVsPWZ1bmN0aW9uKHIsbixpLG8sYSl7Zm9yKHZhciBzPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGw9dGhpcy5kYXRhc2V0cygpLGM9bztjPGwubGVuZ3RoO2MrKylmb3IodmFyIHU9bFtjXSxoPWEuZ2V0KHUpLGY9aC5sZW5ndGgscD1jPT09bz9pKzE6MDtwPGY7cCsrKWlmKE9jLkRPTS5pbnRlcnNlY3RzQkJveChyLG4sdGhpcy5fZW50aXR5QkJveChoW3BdLHAsdSxzKSkpcmV0dXJuITA7cmV0dXJuITF9LHQuX1gyX0tFWT0ieDIiLHQuX1kyX0tFWT0ieTIiLHR9KGJVZS5YWVBsb3QpO3phdC5SZWN0YW5nbGU9d1VlfSk7dmFyIGJLdD1IKFZhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoVmF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgU1VlPShkZSgpLFV0KHBlKSksRmF0PV9sKCksTVVlPUJ1KCksRVVlPWpGKCksVFVlPVV1KCkseEt0PXhhdCgpLENVZT1MZigpLEFVZT1CMSgpLFBVZT1rcygpLEJhdD1GZSgpLEhhdD1JUygpLGJsPXJzKCksSVVlPUgxKCksTFVlPWZ1bmN0aW9uKGUpe1NVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3IuX2xhYmVsRm9ybWF0dGVyPU1VZS5pZGVudGl0eSgpLHIuX2xhYmVsc0VuYWJsZWQ9ITEsci5hZGRDbGFzcygic2NhdHRlci1wbG90Iik7dmFyIG49bmV3IENVZS5FYXNpbmc7bi5zdGFydERlbGF5KDUpLG4uc3RlcER1cmF0aW9uKDI1MCksbi5tYXhUb3RhbER1cmF0aW9uKGJsLlBsb3QuX0FOSU1BVElPTl9NQVhfRFVSQVRJT04pLHIuYW5pbWF0b3IoSGF0LkFuaW1hdG9yLk1BSU4sbiksci5hdHRyKCJvcGFjaXR5IiwuNiksci5hdHRyKCJmaWxsIixuZXcgUFVlLkNvbG9yKCkucmFuZ2UoKVswXSksci5zaXplKDYpO3ZhciBpPUVVZS5jaXJjbGUoKTtyZXR1cm4gci5zeW1ib2woZnVuY3Rpb24oKXtyZXR1cm4gaX0pLHIuX2xhYmVsQ29uZmlnPW5ldyBCYXQuTWFwLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9idWlsZExpZ2h0d2VpZ2h0UGxvdEVudGl0aWVzPWZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMsaT1lLnByb3RvdHlwZS5fYnVpbGRMaWdodHdlaWdodFBsb3RFbnRpdGllcy5jYWxsKHRoaXMscik7cmV0dXJuIGkubWFwKGZ1bmN0aW9uKG8pe3ZhciBhPWJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uc2l6ZSgpKShvLmRhdHVtLG8uaW5kZXgsby5kYXRhc2V0KTtyZXR1cm4gby5kaWFtZXRlcj1hLG99KX0sdC5wcm90b3R5cGUuX2NyZWF0ZURyYXdlcj1mdW5jdGlvbihyKXt2YXIgbj10aGlzO3JldHVybiBuZXcgVFVlLlByb3h5RHJhd2VyKGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyB4S3QuU3ltYm9sU1ZHRHJhd2VyfSxmdW5jdGlvbihpKXtyZXR1cm4gbmV3IEFVZS5DYW52YXNEcmF3ZXIoaSx4S3QubWFrZVN5bWJvbENhbnZhc0RyYXdTdGVwKHIsZnVuY3Rpb24oKXtyZXR1cm4gYmwuUGxvdC5fc2NhbGVkQWNjZXNzb3Iobi5zeW1ib2woKSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGJsLlBsb3QuX3NjYWxlZEFjY2Vzc29yKG4uc2l6ZSgpKX0pKX0pfSx0LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fU0laRV9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fU0laRV9LRVkscixuKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5zeW1ib2w9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fcHJvcGVydHlCaW5kaW5ncy5nZXQodC5fU1lNQk9MX0tFWSk6KHRoaXMuX3Byb3BlcnR5QmluZGluZ3Muc2V0KHQuX1NZTUJPTF9LRVkse2FjY2Vzc29yOnJ9KSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXt2YXIgcj1bXTtpZih0aGlzLl9hbmltYXRlT25OZXh0UmVuZGVyKCkpe3ZhciBuPXRoaXMuX2dldEF0dHJUb1Byb2plY3RvcigpLGk9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSk7bi5kPWZ1bmN0aW9uKG8sYSxzKXtyZXR1cm4gaShvLGEscykoMCkobnVsbCl9LHIucHVzaCh7YXR0clRvUHJvamVjdG9yOm4sYW5pbWF0b3I6dGhpcy5fZ2V0QW5pbWF0b3IoSGF0LkFuaW1hdG9yLlJFU0VUKX0pfXJldHVybiByLnB1c2goe2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjp0aGlzLl9nZXRBbmltYXRvcihIYXQuQW5pbWF0b3IuTUFJTil9KSxyfSx0LnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzPWZ1bmN0aW9uKCl7dmFyIHI9ZS5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycy5jYWxsKHRoaXMpLG49YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGk9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpO3JldHVybiByLng9bixyLnk9aSxyLnRyYW5zZm9ybT1mdW5jdGlvbihvLGEscyl7cmV0dXJuInRyYW5zbGF0ZSgiK24obyxhLHMpKyIsIitpKG8sYSxzKSsiKSJ9LHIuZD10aGlzLl9jb25zdHJ1Y3RTeW1ib2xHZW5lcmF0b3IoKSxyfSx0LnByb3RvdHlwZS5fY29uc3RydWN0U3ltYm9sR2VuZXJhdG9yPWZ1bmN0aW9uKCl7dmFyIHI9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zeW1ib2woKSksbj1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyxhKXtyZXR1cm4gcihpLG8sYSkobihpLG8sYSkpKG51bGwpfX0sdC5wcm90b3R5cGUuX2VudGl0eUJvdW5kcz1mdW5jdGlvbihyKXtyZXR1cm57eDpyLnBvc2l0aW9uLngtci5kaWFtZXRlci8yLHk6ci5wb3NpdGlvbi55LXIuZGlhbWV0ZXIvMix3aWR0aDpyLmRpYW1ldGVyLGhlaWdodDpyLmRpYW1ldGVyfX0sdC5wcm90b3R5cGUuX2VudGl0eVZpc2libGVPblBsb3Q9ZnVuY3Rpb24ocixuKXt2YXIgaT17bWluOm4udG9wTGVmdC54LG1heDpuLmJvdHRvbVJpZ2h0Lnh9LG89e21pbjpuLnRvcExlZnQueSxtYXg6bi5ib3R0b21SaWdodC55fSxhPXRoaXMuX2VudGl0eUJvdW5kcyhyKTtyZXR1cm4gQmF0LkRPTS5pbnRlcnNlY3RzQkJveChpLG8sYSl9LHQucHJvdG90eXBlLmVudGl0aWVzQXQ9ZnVuY3Rpb24ocil7dmFyIG49YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGk9YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpLG89YmwuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy5zaXplKCkpO3JldHVybiB0aGlzLmVudGl0aWVzKCkuZmlsdGVyKGZ1bmN0aW9uKGEpe3ZhciBzPWEuZGF0dW0sbD1hLmluZGV4LGM9YS5kYXRhc2V0LHU9bihzLGwsYyksaD1pKHMsbCxjKSxmPW8ocyxsLGMpO3JldHVybiB1LWYvMjw9ci54JiZyLng8PXUrZi8yJiZoLWYvMjw9ci55JiZyLnk8PWgrZi8yfSl9LHQucHJvdG90eXBlLmxhYmVsc0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/dGhpcy5fbGFiZWxzRW5hYmxlZDoodGhpcy5fbGFiZWxzRW5hYmxlZD1yLHRoaXMuX2NsZWFyQXR0clRvUHJvamVjdG9yQ2FjaGUoKSx0aGlzLnJlbmRlcigpLHRoaXMpfSx0LnByb3RvdHlwZS5fY3JlYXRlTm9kZXNGb3JEYXRhc2V0PWZ1bmN0aW9uKHIpe3ZhciBuPWUucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQuY2FsbCh0aGlzLHIpLGk9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHQuX0xBQkVMX0FSRUFfQ0xBU1MsITApLG89bmV3IEZhdC5TdmdDb250ZXh0KGkubm9kZSgpKSxhPW5ldyBGYXQuQ2FjaGVNZWFzdXJlcihvKSxzPW5ldyBGYXQuV3JpdGVyKGEsbyk7cmV0dXJuIHRoaXMuX2xhYmVsQ29uZmlnLnNldChyLHtsYWJlbEFyZWE6aSxtZWFzdXJlcjphLHdyaXRlcjpzfSksbn0sdC5wcm90b3R5cGUuX3JlbW92ZURhdGFzZXROb2Rlcz1mdW5jdGlvbihyKXtlLnByb3RvdHlwZS5fcmVtb3ZlRGF0YXNldE5vZGVzLmNhbGwodGhpcyxyKTt2YXIgbj10aGlzLl9sYWJlbENvbmZpZy5nZXQocik7biE9bnVsbCYmKG4ubGFiZWxBcmVhLnJlbW92ZSgpLHRoaXMuX2xhYmVsQ29uZmlnLmRlbGV0ZShyKSl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihpKXtyZXR1cm4gbi5fbGFiZWxDb25maWcuZ2V0KGkpLmxhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKX0pLHRoaXMuX2xhYmVsc0VuYWJsZWQmJkJhdC5XaW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybiBuLl9kcmF3TGFiZWxzKCl9LHIpfSx0LnByb3RvdHlwZS5fZHJhd0xhYmVscz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj10aGlzLl9nZXREYXRhVG9EcmF3KCksaT10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKTt0aGlzLmRhdGFzZXRzKCkuZm9yRWFjaChmdW5jdGlvbihvKXtmb3IodmFyIGE9bi5nZXQobykscz1hLmxlbmd0aCxsPTA7bDxzO2wrKyl7dmFyIGM9YVtsXTtjIT1udWxsJiZyLl9kcmF3TGFiZWwoYyxsLG8saSl9fSl9LHQucHJvdG90eXBlLl9kcmF3TGFiZWw9ZnVuY3Rpb24ocixuLGksbyl7aWYoci5sYWJlbCE9bnVsbCl7dmFyIGE9dGhpcy5fbGFiZWxDb25maWcuZ2V0KGkpLHM9YS5sYWJlbEFyZWEsbD1hLm1lYXN1cmVyLGM9YS53cml0ZXIsdT17eDpvLngocixuLGkpLHk6by55KHIsbixpKX0saD1ibC5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnNpemUoKSksZj1oKHIsbixpKSxwPXRoaXMuX2xhYmVsRm9ybWF0dGVyKHIubGFiZWwscixuLGkpLGQ9bC5tZWFzdXJlKHApLGc9dGhpcy5fY2FsY3VsYXRlTGFiZWxQcm9wZXJ0aWVzKHUsZixkKSxfPWcuY29udGFpbmVyRGltZW5zaW9ucyx5PWcubGFiZWxDb250YWluZXJPcmlnaW4seD1nLmxhYmVsT3JpZ2luLGI9Zy5hbGlnbm1lbnQsUz10aGlzLl9jcmVhdGVMYWJlbENvbnRhaW5lcihzLHkseCxkKSxDPXt4QWxpZ246Yi54LHlBbGlnbjpiLnl9O2Mud3JpdGUocCxfLndpZHRoLF8uaGVpZ2h0LEMsUy5ub2RlKCkpfX0sdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUxhYmVsUHJvcGVydGllcz1mdW5jdGlvbihyLG4saSl7dmFyIG89bjxpLmhlaWdodD9uLzIrdC5fTEFCRUxfTUFSR0lOX0ZST01fQlVCQkxFOjA7cmV0dXJue2NvbnRhaW5lckRpbWVuc2lvbnM6e3dpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0fSxsYWJlbENvbnRhaW5lck9yaWdpbjp7eDpyLngtaS53aWR0aC8yLHk6ci55LWkuaGVpZ2h0LzIrb30sbGFiZWxPcmlnaW46e3g6ci54LHk6ci55fSxhbGlnbm1lbnQ6e3g6ImNlbnRlciIseToiY2VudGVyIn19fSx0LnByb3RvdHlwZS5fY3JlYXRlTGFiZWxDb250YWluZXI9ZnVuY3Rpb24ocixuLGksbyl7dmFyIGE9ci5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIituLngrIiwgIituLnkrIikiKTtyZXR1cm4gYS5jbGFzc2VkKCJvbi1iYXItbGFiZWwiLCEwKSxhfSx0Ll9TSVpFX0tFWT0ic2l6ZSIsdC5fU1lNQk9MX0tFWT0ic3ltYm9sIix0Ll9MQUJFTF9BUkVBX0NMQVNTPSJzY2F0dGVyLWxhYmVsLXRleHQtYXJlYSIsdC5fTEFCRUxfTUFSR0lOX0ZST01fQlVCQkxFPTE1LHR9KElVZS5YWVBsb3QpO1ZhdC5TY2F0dGVyPUxVZX0pO3ZhciB3S3Q9SChVYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFVhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGtVZT0oZGUoKSxVdChwZSkpLFJVZT1MZigpLE5VZT1VdSgpLERVZT15YXQoKSxPVWU9a3MoKSx6VWU9Q0YoKSxMUz1ycygpLEZVZT1IMSgpLEJVZT1mdW5jdGlvbihlKXtrVWUuX19leHRlbmRzKHQsZSk7ZnVuY3Rpb24gdCgpe3ZhciByPWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gci5hZGRDbGFzcygic2VnbWVudC1wbG90Iiksci5hdHRyKCJzdHJva2UiLG5ldyBPVWUuQ29sb3IoKS5yYW5nZSgpWzBdKSxyLmF0dHIoInN0cm9rZS13aWR0aCIsIjJweCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLl9jcmVhdGVEcmF3ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE5VZS5Qcm94eURyYXdlcihmdW5jdGlvbigpe3JldHVybiBuZXcgRFVlLlNlZ21lbnRTVkdEcmF3ZXJ9LGZ1bmN0aW9uKCl7cmV0dXJuIHpVZS53YXJuKCJjYW52YXMgcmVuZGVyZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBTZWdtZW50IFBsb3QhIiksbnVsbH0pfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVEcmF3U3RlcHM9ZnVuY3Rpb24oKXtyZXR1cm5be2F0dHJUb1Byb2plY3Rvcjp0aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhbmltYXRvcjpuZXcgUlVlLk51bGx9XX0sdC5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5PWZ1bmN0aW9uKHIpe3JldHVybiByPT09IngyIj9lLnByb3RvdHlwZS5fZmlsdGVyRm9yUHJvcGVydHkuY2FsbCh0aGlzLCJ4Iik6cj09PSJ5MiI/ZS5wcm90b3R5cGUuX2ZpbHRlckZvclByb3BlcnR5LmNhbGwodGhpcywieSIpOmUucHJvdG90eXBlLl9maWx0ZXJGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLng9ZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiBlLnByb3RvdHlwZS54LmNhbGwodGhpcyk7aWYobj09bnVsbCllLnByb3RvdHlwZS54LmNhbGwodGhpcyxyKTtlbHNle2UucHJvdG90eXBlLnguY2FsbCh0aGlzLHIsbik7dmFyIGk9dGhpcy54MigpLG89aSYmaS5hY2Nlc3NvcjtvIT1udWxsJiZ0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLG8sbil9cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLngyPWZ1bmN0aW9uKHIpe2lmKHI9PW51bGwpcmV0dXJuIHRoaXMuX3Byb3BlcnR5QmluZGluZ3MuZ2V0KHQuX1gyX0tFWSk7dmFyIG49dGhpcy54KCksaT1uJiZuLnNjYWxlO3JldHVybiB0aGlzLl9iaW5kUHJvcGVydHkodC5fWDJfS0VZLHIsaSksdGhpcy5yZW5kZXIoKSx0aGlzfSx0LnByb3RvdHlwZS55PWZ1bmN0aW9uKHIsbil7aWYocj09bnVsbClyZXR1cm4gZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpO2lmKG49PW51bGwpZS5wcm90b3R5cGUueS5jYWxsKHRoaXMscik7ZWxzZXtlLnByb3RvdHlwZS55LmNhbGwodGhpcyxyLG4pO3ZhciBpPXRoaXMueTIoKSxvPWkmJmkuYWNjZXNzb3I7byE9bnVsbCYmdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxvLG4pfXJldHVybiB0aGlzfSx0LnByb3RvdHlwZS55Mj1mdW5jdGlvbihyKXtpZihyPT1udWxsKXJldHVybiB0aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9ZMl9LRVkpO3ZhciBuPXRoaXMueSgpLGk9biYmbi5zY2FsZTtyZXR1cm4gdGhpcy5fYmluZFByb3BlcnR5KHQuX1kyX0tFWSxyLGkpLHRoaXMucmVuZGVyKCksdGhpc30sdC5wcm90b3R5cGUuX3Byb3BlcnR5UHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPWUucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnMuY2FsbCh0aGlzKTtyZXR1cm4gci54MT1MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLngoKSksci54Mj10aGlzLngyKCk9PW51bGw/TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpOkxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueDIoKSksci55MT1MUy5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnkoKSksci55Mj10aGlzLnkyKCk9PW51bGw/TFMuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy55KCkpOkxTLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHRoaXMueTIoKSkscn0sdC5wcm90b3R5cGUuZW50aXRpZXNBdD1mdW5jdGlvbihyKXt2YXIgbj10aGlzLmVudGl0eU5lYXJlc3Qocik7cmV0dXJuIG4hPW51bGw/W25dOltdfSx0LnByb3RvdHlwZS5lbnRpdGllc0luPWZ1bmN0aW9uKHIsbil7dmFyIGksbztpZihuPT1udWxsKXt2YXIgYT1yO2k9e21pbjphLnRvcExlZnQueCxtYXg6YS5ib3R0b21SaWdodC54fSxvPXttaW46YS50b3BMZWZ0LnksbWF4OmEuYm90dG9tUmlnaHQueX19ZWxzZSBpPXIsbz1uO3JldHVybiB0aGlzLl9lbnRpdGllc0ludGVyc2VjdGluZyhpLG8pfSx0LnByb3RvdHlwZS5fZW50aXRpZXNJbnRlcnNlY3Rpbmc9ZnVuY3Rpb24ocixuKXtmb3IodmFyIGk9W10sbz10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxhPXRoaXMuZW50aXRpZXMoKSxzPWEubGVuZ3RoLGw9MDtsPHM7bCsrKXt2YXIgYz1hW2xdO3RoaXMuX2xpbmVJbnRlcnNlY3RzQm94KGMscixuLG8pJiZpLnB1c2goYyl9cmV0dXJuIGl9LHQucHJvdG90eXBlLl9saW5lSW50ZXJzZWN0c0JveD1mdW5jdGlvbihyLG4saSxvKXt2YXIgYT10aGlzLHM9by54MShyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KSxsPW8ueDIoci5kYXR1bSxyLmluZGV4LHIuZGF0YXNldCksYz1vLnkxKHIuZGF0dW0sci5pbmRleCxyLmRhdGFzZXQpLHU9by55MihyLmRhdHVtLHIuaW5kZXgsci5kYXRhc2V0KTtpZihuLm1pbjw9cyYmczw9bi5tYXgmJmkubWluPD1jJiZjPD1pLm1heHx8bi5taW48PWwmJmw8PW4ubWF4JiZpLm1pbjw9dSYmdTw9aS5tYXgpcmV0dXJuITA7dmFyIGg9e3g6cyx5OmN9LGY9e3g6bCx5OnV9LHA9W3t4Om4ubWluLHk6aS5taW59LHt4Om4ubWluLHk6aS5tYXh9LHt4Om4ubWF4LHk6aS5tYXh9LHt4Om4ubWF4LHk6aS5taW59XSxkPXAuZmlsdGVyKGZ1bmN0aW9uKGcsXyl7cmV0dXJuIF8hPT0wP2EuX2xpbmVJbnRlcnNlY3RzU2VnbWVudChoLGYsZyxwW18tMV0pJiZhLl9saW5lSW50ZXJzZWN0c1NlZ21lbnQoZyxwW18tMV0saCxmKTohMX0pO3JldHVybiBkLmxlbmd0aD4wfSx0LnByb3RvdHlwZS5fbGluZUludGVyc2VjdHNTZWdtZW50PWZ1bmN0aW9uKHIsbixpLG8pe3ZhciBhPWZ1bmN0aW9uKHMsbCxjKXtyZXR1cm4obC54LXMueCkqKGMueS1sLnkpLShsLnktcy55KSooYy54LWwueCl9O3JldHVybiBhKHIsbixpKSphKHIsbixvKTwwfSx0Ll9YMl9LRVk9IngyIix0Ll9ZMl9LRVk9InkyIix0fShGVWUuWFlQbG90KTtVYXQuU2VnbWVudD1CVWV9KTt2YXIgRUt0PUgocWF0PT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxYXQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBIVWU9KGRlKCksVXQocGUpKSxTS3Q9KEVyKCksVXQoTXIpKSxWVWU9TGYoKSxNS3Q9Q1MoKSx0MD1GZSgpLFVVZT1DYXQoKSxxVWU9cnMoKSxHVWU9ZnVuY3Rpb24oZSl7SFVlLl9fZXh0ZW5kcyh0LGUpO2Z1bmN0aW9uIHQoKXt2YXIgcj1lLmNhbGwodGhpcyl8fHRoaXM7cmV0dXJuIHIuX3N0YWNraW5nUmVzdWx0PU1LdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiByLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIHIueCgpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiByLnkoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gci5fc3RhY2tpbmdPcmRlcn0sZnVuY3Rpb24obixpLG8sYSl7cmV0dXJuIHQwLlN0YWNraW5nLnN0YWNrKG4saSxvLGEpfSksci5fc3RhY2tlZEV4dGVudD1NS3QubWVtVGh1bmsoci5fc3RhY2tpbmdSZXN1bHQsZnVuY3Rpb24oKXtyZXR1cm4gci54KCkuYWNjZXNzb3J9LGZ1bmN0aW9uKCl7cmV0dXJuIHIuX2ZpbHRlckZvclByb3BlcnR5KCJ5Iil9LGZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdDAuU3RhY2tpbmcuc3RhY2tlZEV4dGVudChuLGksbyl9KSxyLl9iYXNlbGluZVZhbHVlPTAsci5fc3RhY2tpbmdPcmRlcj0iYm90dG9tdXAiLHIuYWRkQ2xhc3MoInN0YWNrZWQtYXJlYS1wbG90Iiksci5fYmFzZWxpbmVWYWx1ZVByb3ZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuW3IuX2Jhc2VsaW5lVmFsdWVdfSxyLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkKCExKSxyfXJldHVybiB0LnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD9lLnByb3RvdHlwZS5jcm9wcGVkUmVuZGVyaW5nRW5hYmxlZC5jYWxsKHRoaXMpOnI/KHQwLldpbmRvdy53YXJuKCJXYXJuaW5nOiBTdGFja2VkIEFyZWEgUGxvdCBkb2VzIG5vdCBzdXBwb3J0IGNyb3BwZWQgcmVuZGVyaW5nLiIpLHRoaXMpOmUucHJvdG90eXBlLmNyb3BwZWRSZW5kZXJpbmdFbmFibGVkLmNhbGwodGhpcyxyKX0sdC5wcm90b3R5cGUuX2dldEFuaW1hdG9yPWZ1bmN0aW9uKHIpe3JldHVybiBuZXcgVlVlLk51bGx9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2Jhc2VsaW5lPXRoaXMuX3JlbmRlckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgiYmFzZWxpbmUiLCEwKX0sdC5wcm90b3R5cGUueD1mdW5jdGlvbihyLG4pe3JldHVybiByPT1udWxsP2UucHJvdG90eXBlLnguY2FsbCh0aGlzKToobj09bnVsbD9lLnByb3RvdHlwZS54LmNhbGwodGhpcyxyKTplLnByb3RvdHlwZS54LmNhbGwodGhpcyxyLG4pLHRoaXMuX2NoZWNrU2FtZURvbWFpbigpLHRoaXMpfSx0LnByb3RvdHlwZS55PWZ1bmN0aW9uKHIsbil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUueS5jYWxsKHRoaXMpOihuPT1udWxsP2UucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIpOmUucHJvdG90eXBlLnkuY2FsbCh0aGlzLHIsbiksdGhpcy5fY2hlY2tTYW1lRG9tYWluKCksdGhpcyl9LHQucHJvdG90eXBlLnlPZmZzZXQ9ZnVuY3Rpb24ocixuKXt2YXIgaT10aGlzLl9zdGFja2luZ1Jlc3VsdCgpO2lmKGkhPW51bGwpe3ZhciBvPWkuZ2V0KHIpO2lmKG8hPW51bGwpe3ZhciBhPW8uZ2V0KFN0cmluZyhuKSk7aWYoYSE9bnVsbClyZXR1cm4gYS5vZmZzZXR9fX0sdC5wcm90b3R5cGUuc3RhY2tpbmdPcmRlcj1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9zdGFja2luZ09yZGVyOih0aGlzLl9zdGFja2luZ09yZGVyPXIsdGhpcy5fb25EYXRhc2V0VXBkYXRlKCksdGhpcyl9LHQucHJvdG90eXBlLmRvd25zYW1wbGluZ0VuYWJsZWQ9ZnVuY3Rpb24ocil7cmV0dXJuIHI9PW51bGw/ZS5wcm90b3R5cGUuZG93bnNhbXBsaW5nRW5hYmxlZC5jYWxsKHRoaXMpOih0MC5XaW5kb3cud2FybigiV2FybmluZzogU3RhY2tlZCBBcmVhIFBsb3QgZG9lcyBub3Qgc3VwcG9ydCBkb3duc2FtcGxpbmciKSx0aGlzKX0sdC5wcm90b3R5cGUuX2FkZGl0aW9uYWxQYWludD1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLnNjYWxlLnNjYWxlKHRoaXMuX2Jhc2VsaW5lVmFsdWUpLG49e3gxOjAseTE6cix4Mjp0aGlzLndpZHRoKCkseTI6cn07dGhpcy5fZ2V0QW5pbWF0b3IoImJhc2VsaW5lIikuYW5pbWF0ZSh0aGlzLl9iYXNlbGluZSxuKX0sdC5wcm90b3R5cGUuX3VwZGF0ZVlTY2FsZT1mdW5jdGlvbigpe3ZhciByPXRoaXMueSgpLG49ciYmci5zY2FsZTtuIT1udWxsJiYobi5hZGRQYWRkaW5nRXhjZXB0aW9uc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlciksbi5hZGRJbmNsdWRlZFZhbHVlc1Byb3ZpZGVyKHRoaXMuX2Jhc2VsaW5lVmFsdWVQcm92aWRlcikpfSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NoZWNrU2FtZURvbWFpbigpLGUucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7dmFyIG49InkiO3JldHVybiByPT09bj9bdGhpcy5fc3RhY2tlZEV4dGVudCgpXTplLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fY2hlY2tTYW1lRG9tYWluPWZ1bmN0aW9uKCl7aWYoISF0aGlzLl9wcm9qZWN0b3JzUmVhZHkoKSl7dmFyIHI9dGhpcy5kYXRhc2V0cygpLG49dGhpcy54KCkuYWNjZXNzb3IsaT1yLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gU0t0LnNldChhLmRhdGEoKS5tYXAoZnVuY3Rpb24ocyxsKXtyZXR1cm4gdDAuU3RhY2tpbmcubm9ybWFsaXplS2V5KG4ocyxsLGEpKX0pKS52YWx1ZXMoKX0pLG89dC5fZG9tYWluS2V5cyhyLG4pO2kuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGghPT1vLmxlbmd0aH0pJiZ0MC5XaW5kb3cud2FybigidGhlIGRvbWFpbnMgYWNyb3NzIHRoZSBkYXRhc2V0cyBhcmUgbm90IHRoZSBzYW1lLiBQbG90IG1heSBwcm9kdWNlIHVuaW50ZW5kZWQgYmVoYXZpb3IuIil9fSx0Ll9kb21haW5LZXlzPWZ1bmN0aW9uKHIsbil7dmFyIGk9U0t0LnNldCgpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24obyl7Zm9yKHZhciBhPW8uZGF0YSgpLHM9YS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWFbbF07aS5hZGQobihjLGwsbykpfX0pLGkudmFsdWVzKCl9LHQucHJvdG90eXBlLl9jb29yZGluYXRlUHJvamVjdG9ycz1mdW5jdGlvbigpe3ZhciByPXRoaXMsbj1xVWUuUGxvdC5fc2NhbGVkQWNjZXNzb3IodGhpcy54KCkpLGk9dGhpcy55KCkuYWNjZXNzb3Isbz10aGlzLngoKS5hY2Nlc3NvcixhPWZ1bmN0aW9uKHUsaCxmKXtyZXR1cm4gdDAuU3RhY2tpbmcubm9ybWFsaXplS2V5KG8odSxoLGYpKX0scz10aGlzLl9zdGFja2luZ1Jlc3VsdCgpLGw9ZnVuY3Rpb24odSxoLGYpe3ZhciBwPStpKHUsaCxmKSxkPXMuZ2V0KGYpLmdldChhKHUsaCxmKSkub2Zmc2V0O3JldHVybiByLnkoKS5zY2FsZS5zY2FsZShwK2QpfSxjPWZ1bmN0aW9uKHUsaCxmKXt2YXIgcD1zLmdldChmKS5nZXQoYSh1LGgsZikpLm9mZnNldDtyZXR1cm4gci55KCkuc2NhbGUuc2NhbGUocCl9O3JldHVybltuLGwsY119LHQucHJvdG90eXBlLl9wcm9wZXJ0eVByb2plY3RvcnM9ZnVuY3Rpb24oKXt2YXIgcj1lLnByb3RvdHlwZS5fcHJvcGVydHlQcm9qZWN0b3JzLmNhbGwodGhpcyksbj10aGlzLl9jb29yZGluYXRlUHJvamVjdG9ycygpLGk9blswXSxvPW5bMV0sYT1uWzJdO3JldHVybiByLmQ9dGhpcy5fY29uc3RydWN0QXJlYVByb2plY3RvcihpLG8sYSkscn0sdC5wcm90b3R5cGUuX3BpeGVsUG9pbnQ9ZnVuY3Rpb24ocixuLGkpe3ZhciBvPWUucHJvdG90eXBlLl9waXhlbFBvaW50LmNhbGwodGhpcyxyLG4saSksYT10aGlzLngoKS5hY2Nlc3NvcihyLG4saSkscz10aGlzLnkoKS5hY2Nlc3NvcihyLG4saSksbD10aGlzLnkoKS5zY2FsZS5zY2FsZSgrcyt0aGlzLl9zdGFja2luZ1Jlc3VsdCgpLmdldChpKS5nZXQodDAuU3RhY2tpbmcubm9ybWFsaXplS2V5KGEpKS5vZmZzZXQpO3JldHVybnt4Om8ueCx5Omx9fSx0fShVVWUuQXJlYSk7cWF0LlN0YWNrZWRBcmVhPUdVZX0pO3ZhciBDS3Q9SChZYXQ9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFlhdCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIFdVZT0oZGUoKSxVdChwZSkpLEdhdD1fbCgpLFlVZT1CdSgpLFRLdD1DUygpLHBCPUZlKCksV2F0PV80KCksalVlPXJzKCksWFVlPWZ1bmN0aW9uKGUpe1dVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KHIpe3I9PT12b2lkIDAmJihyPSJ2ZXJ0aWNhbCIpO3ZhciBuPWUuY2FsbCh0aGlzLHIpfHx0aGlzO3JldHVybiBuLl9leHRyZW1hRm9ybWF0dGVyPVlVZS5pZGVudGl0eSgpLG4uX3N0YWNraW5nUmVzdWx0PVRLdC5tZW1UaHVuayhmdW5jdGlvbigpe3JldHVybiBuLmRhdGFzZXRzKCl9LGZ1bmN0aW9uKCl7cmV0dXJuIG4ucG9zaXRpb24oKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gbi5sZW5ndGgoKS5hY2Nlc3Nvcn0sZnVuY3Rpb24oKXtyZXR1cm4gbi5fc3RhY2tpbmdPcmRlcn0sZnVuY3Rpb24oaSxvLGEscyl7cmV0dXJuIHBCLlN0YWNraW5nLnN0YWNrKGksbyxhLHMpfSksbi5fc3RhY2tlZEV4dGVudD1US3QubWVtVGh1bmsobi5fc3RhY2tpbmdSZXN1bHQsZnVuY3Rpb24oKXtyZXR1cm4gbi5wb3NpdGlvbigpLmFjY2Vzc29yfSxmdW5jdGlvbigpe3JldHVybiBuLl9maWx0ZXJGb3JQcm9wZXJ0eShuLl9pc1ZlcnRpY2FsPyJ5IjoieCIpfSxmdW5jdGlvbihpLG8sYSl7cmV0dXJuIHBCLlN0YWNraW5nLnN0YWNrZWRFeHRlbnQoaSxvLGEpfSksbi5hZGRDbGFzcygic3RhY2tlZC1iYXItcGxvdCIpLG4uX3N0YWNraW5nT3JkZXI9ImJvdHRvbXVwIixufXJldHVybiB0LnByb3RvdHlwZS5zdGFja2luZ09yZGVyPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX3N0YWNraW5nT3JkZXI6KHRoaXMuX3N0YWNraW5nT3JkZXI9cix0aGlzLl9vbkRhdGFzZXRVcGRhdGUoKSx0aGlzKX0sdC5wcm90b3R5cGUuZXh0cmVtYUZvcm1hdHRlcj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTA/dGhpcy5fZXh0cmVtYUZvcm1hdHRlcjoodGhpcy5fZXh0cmVtYUZvcm1hdHRlcj1yLHRoaXMucmVuZGVyKCksdGhpcyl9LHQucHJvdG90eXBlLl9zZXR1cD1mdW5jdGlvbigpe2UucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMpLHRoaXMuX2xhYmVsQXJlYT10aGlzLl9yZW5kZXJBcmVhLmFwcGVuZCgiZyIpLmNsYXNzZWQoV2F0LkJhci5fTEFCRUxfQVJFQV9DTEFTUywhMCk7dmFyIHI9bmV3IEdhdC5TdmdDb250ZXh0KHRoaXMuX2xhYmVsQXJlYS5ub2RlKCkpO3RoaXMuX21lYXN1cmVyPW5ldyBHYXQuQ2FjaGVNZWFzdXJlcihyKSx0aGlzLl93cml0ZXI9bmV3IEdhdC5Xcml0ZXIodGhpcy5fbWVhc3VyZXIscil9LHQucHJvdG90eXBlLl9kcmF3TGFiZWxzPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcztlLnByb3RvdHlwZS5fZHJhd0xhYmVscy5jYWxsKHRoaXMpLHRoaXMuX2xhYmVsQXJlYS5zZWxlY3RBbGwoImciKS5yZW1vdmUoKTt2YXIgbj0rdGhpcy5iYXNlbGluZVZhbHVlKCksaT10aGlzLnBvc2l0aW9uKCkuc2NhbGUsbz10aGlzLmxlbmd0aCgpLnNjYWxlLGE9cEIuU3RhY2tpbmcuc3RhY2tlZEV4dGVudHModGhpcy5fc3RhY2tpbmdSZXN1bHQoKSkscz1hLm1heGltdW1FeHRlbnRzLGw9YS5taW5pbXVtRXh0ZW50cyxjPVtdLHU9ZnVuY3Rpb24oZixwLGQpe3ZhciBnPXAudG9wTGVmdCxfPWcueCx5PWcueSx4PXAuYm90dG9tUmlnaHQueC1wLnRvcExlZnQueCxiPXAuYm90dG9tUmlnaHQueS1wLnRvcExlZnQueSxTPXIuX2lzVmVydGljYWw/eD5kOmI+ZDtpZighUyl7dmFyIEM9ci5fbGFiZWxBcmVhLmFwcGVuZCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK18rIiwgIit5KyIpIik7Qy5jbGFzc2VkKCJzdGFja2VkLWJhci1sYWJlbCIsITApO3ZhciBQPXt4QWxpZ246ImNlbnRlciIseUFsaWduOiJjZW50ZXIifTtyLl93cml0ZXIud3JpdGUoZix4LGIsUCxDLm5vZGUoKSl9cmV0dXJuIFN9LGg9ZnVuY3Rpb24oZixwKXt2YXIgZD1yLl9nZW5lcmF0ZUF0dHJUb1Byb2plY3RvcigpLGc9ci53aWR0aCgpLF89ci5oZWlnaHQoKTtmLmZvckVhY2goZnVuY3Rpb24oeSl7aWYoeS5leHRlbnQhPT1uKXt2YXIgeD1yLmV4dHJlbWFGb3JtYXR0ZXIoKSh5LmV4dGVudCksYj1yLl9tZWFzdXJlci5tZWFzdXJlKHgpLFM9eS5zdGFja2VkRGF0dW0sQz1TLm9yaWdpbmFsRGF0dW0sUD1TLm9yaWdpbmFsSW5kZXgsaz1TLm9yaWdpbmFsRGF0YXNldDtpZighci5faXNEYXR1bU9uU2NyZWVuKGQsZyxfLEMsUCxrKSlyZXR1cm47dmFyIE89alVlLlBsb3QuX3NjYWxlZEFjY2Vzc29yKHIuYXR0cihXYXQuQmFyLl9CQVJfVEhJQ0tORVNTX0tFWSkpKEMsUCxrKSxEPW8uc2NhbGUoeS5leHRlbnQpLEI9ci5fZ2V0UG9zaXRpb25BdHRyKGkuc2NhbGUoeS5heGlzVmFsdWUpLE8pK08vMixJPXIuX2lzVmVydGljYWw/e3g6Qix5OkR9Ont4OkQseTpCfSxMPXAoSSxiLE8pLFI9dSh4LHt0b3BMZWZ0OkwsYm90dG9tUmlnaHQ6e3g6TC54K2Iud2lkdGgseTpMLnkrYi5oZWlnaHR9fSxPKTtjLnB1c2goUil9fSl9O2gocyxmdW5jdGlvbihmLHAsZCl7dmFyIGc9ci5faXNWZXJ0aWNhbD9wLndpZHRoOnAuaGVpZ2h0LF89ci5faXNWZXJ0aWNhbD9wLmhlaWdodDpwLndpZHRoO3JldHVybnt4OnIuX2lzVmVydGljYWw/Zi54LWcvMjpmLngrdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVIseTpyLl9pc1ZlcnRpY2FsP2YueS1fOmYueS1nLzJ9fSksaChsLGZ1bmN0aW9uKGYscCxkKXt2YXIgZz1yLl9pc1ZlcnRpY2FsP3Aud2lkdGg6cC5oZWlnaHQsXz1yLl9pc1ZlcnRpY2FsP3AuaGVpZ2h0OnAud2lkdGg7cmV0dXJue3g6ci5faXNWZXJ0aWNhbD9mLngtZy8yOmYueC1fLHk6ci5faXNWZXJ0aWNhbD9mLnkrdC5fRVhUUkVNQV9MQUJFTF9NQVJHSU5fRlJPTV9CQVI6Zi55LWcvMn19KSxjLnNvbWUoZnVuY3Rpb24oZil7cmV0dXJuIGZ9KSYmdGhpcy5fbGFiZWxBcmVhLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCIsbz10aGlzLmxlbmd0aCgpLnNjYWxlLGE9dGhpcy5sZW5ndGgoKS5hY2Nlc3NvcixzPXRoaXMucG9zaXRpb24oKS5hY2Nlc3NvcixsPWZ1bmN0aW9uKGQsZyxfKXtyZXR1cm4gcEIuU3RhY2tpbmcubm9ybWFsaXplS2V5KHMoZCxnLF8pKX0sYz10aGlzLl9zdGFja2luZ1Jlc3VsdCgpLHU9ZnVuY3Rpb24oZCxnLF8pe3JldHVybiBvLnNjYWxlKGMuZ2V0KF8pLmdldChsKGQsZyxfKSkub2Zmc2V0KX0saD1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIG8uc2NhbGUoK2EoZCxnLF8pK2MuZ2V0KF8pLmdldChsKGQsZyxfKSkub2Zmc2V0KX0sZj1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIE1hdGguYWJzKGgoZCxnLF8pLXUoZCxnLF8pKX07blt0aGlzLl9pc1ZlcnRpY2FsPyJoZWlnaHQiOiJ3aWR0aCJdPWY7dmFyIHA9ZnVuY3Rpb24oZCxnLF8pe3JldHVybithKGQsZyxfKTwwP3UoZCxnLF8pOmgoZCxnLF8pfTtyZXR1cm4gbltpXT1mdW5jdGlvbihkLGcsXyl7cmV0dXJuIHIuX2lzVmVydGljYWw/cChkLGcsXyk6cChkLGcsXyktZihkLGcsXyl9LG59LHQucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eT1mdW5jdGlvbihyKXt2YXIgbj10aGlzLl9pc1ZlcnRpY2FsPyJ5IjoieCI7cmV0dXJuIHI9PT1uP1t0aGlzLl9zdGFja2VkRXh0ZW50KCldOmUucHJvdG90eXBlLmdldEV4dGVudHNGb3JQcm9wZXJ0eS5jYWxsKHRoaXMscil9LHQucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZT1mdW5jdGlvbigpe2UucHJvdG90eXBlLmludmFsaWRhdGVDYWNoZS5jYWxsKHRoaXMpLHRoaXMuX21lYXN1cmVyLnJlc2V0KCl9LHQuX0VYVFJFTUFfTEFCRUxfTUFSR0lOX0ZST01fQkFSPTUsdH0oV2F0LkJhcik7WWF0LlN0YWNrZWRCYXI9WFVlfSk7dmFyIEFLdD1IKGphdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoamF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgJFVlPShkZSgpLFV0KHBlKSksS1VlPUZlKCksWlVlPV80KCksSlVlPXJzKCksUVVlPWZ1bmN0aW9uKGUpeyRVZS5fX2V4dGVuZHModCxlKTtmdW5jdGlvbiB0KCl7dmFyIHI9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiByLl9jb25uZWN0b3JzRW5hYmxlZD0hMSxyLmFkZENsYXNzKCJ3YXRlcmZhbGwtcGxvdCIpLHJ9cmV0dXJuIHQucHJvdG90eXBlLmNvbm5lY3RvcnNFbmFibGVkPWZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsP3RoaXMuX2Nvbm5lY3RvcnNFbmFibGVkOih0aGlzLl9jb25uZWN0b3JzRW5hYmxlZD1yLHRoaXMpfSx0LnByb3RvdHlwZS50b3RhbD1mdW5jdGlvbihyKXtyZXR1cm4gcj09bnVsbD90aGlzLl9wcm9wZXJ0eUJpbmRpbmdzLmdldCh0Ll9UT1RBTF9LRVkpOih0aGlzLl9iaW5kUHJvcGVydHkodC5fVE9UQUxfS0VZLHIsbnVsbCksdGhpcyl9LHQucHJvdG90eXBlLl9hZGRpdGlvbmFsUGFpbnQ9ZnVuY3Rpb24ocil7dmFyIG49dGhpczt0aGlzLl9jb25uZWN0b3JBcmVhLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpLHRoaXMuX2Nvbm5lY3RvcnNFbmFibGVkJiZLVWUuV2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4gbi5fZHJhd0Nvbm5lY3RvcnMoKX0scil9LHQucHJvdG90eXBlLl9jcmVhdGVOb2Rlc0ZvckRhdGFzZXQ9ZnVuY3Rpb24ocil7dmFyIG49ZS5wcm90b3R5cGUuX2NyZWF0ZU5vZGVzRm9yRGF0YXNldC5jYWxsKHRoaXMscik7cmV0dXJuIHRoaXMuX2Nvbm5lY3RvckFyZWE9dGhpcy5fcmVuZGVyQXJlYS5hcHBlbmQoImciKS5jbGFzc2VkKHQuX0NPTk5FQ1RPUl9BUkVBX0NMQVNTLCEwKSxufSx0LnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHk9ZnVuY3Rpb24ocil7dmFyIG49InkiO3JldHVybiByPT09bj9bdGhpcy5fZXh0ZW50XTplLnByb3RvdHlwZS5nZXRFeHRlbnRzRm9yUHJvcGVydHkuY2FsbCh0aGlzLHIpfSx0LnByb3RvdHlwZS5fZ2VuZXJhdGVBdHRyVG9Qcm9qZWN0b3I9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLG49ZS5wcm90b3R5cGUuX2dlbmVyYXRlQXR0clRvUHJvamVjdG9yLmNhbGwodGhpcyksaT10aGlzLnkoKS5zY2FsZSxvPUpVZS5QbG90Ll9zY2FsZWRBY2Nlc3Nvcih0aGlzLnRvdGFsKCkpLGE9dGhpcy5hdHRyKCJ5Iik7YT09bnVsbCYmKG4ueT1mdW5jdGlvbihsLGMsdSl7dmFyIGg9ci55KCkuYWNjZXNzb3IobCxjLHUpLGY9byhsLGMsdSk7aWYoZilyZXR1cm4gTWF0aC5taW4oaS5zY2FsZShoKSxpLnNjYWxlKDApKTt2YXIgcD1yLl9zdWJ0b3RhbHNbY107aWYoYz09PTApcmV0dXJuIGg8MD9pLnNjYWxlKHAtaCk6aS5zY2FsZShwKTt2YXIgZD1yLl9zdWJ0b3RhbHNbYy0xXTtyZXR1cm4gcD5kP2kuc2NhbGUocCk6aS5zY2FsZShkKX0pO3ZhciBzPXRoaXMuYXR0cigiaGVpZ2h0Iik7cmV0dXJuIHM9PW51bGwmJihuLmhlaWdodD1mdW5jdGlvbihsLGMsdSl7dmFyIGg9byhsLGMsdSksZj1yLnkoKS5hY2Nlc3NvcihsLGMsdSk7aWYoaClyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShmKS1pLnNjYWxlKDApKTt2YXIgcD1yLl9zdWJ0b3RhbHNbY107aWYoYz09PTApcmV0dXJuIE1hdGguYWJzKGkuc2NhbGUocCktaS5zY2FsZShwLWYpKTt2YXIgZD1yLl9zdWJ0b3RhbHNbYy0xXTtyZXR1cm4gTWF0aC5hYnMoaS5zY2FsZShwKS1pLnNjYWxlKGQpKX0pLG4uY2xhc3M9ZnVuY3Rpb24obCxjLHUpe3ZhciBoPSIiO3IuYXR0cigiY2xhc3MiKSE9bnVsbCYmKGg9ci5hdHRyKCJjbGFzcyIpLmFjY2Vzc29yKGwsYyx1KSsiICIpO3ZhciBmPW8obCxjLHUpO2lmKGYpcmV0dXJuIGgrdC5fQkFSX1RPVEFMX0NMQVNTO3ZhciBwPXIueSgpLmFjY2Vzc29yKGwsYyx1KTtyZXR1cm4gaCsocD4wP3QuX0JBUl9HUk9XVEhfQ0xBU1M6dC5fQkFSX0RFQ0xJTkVfQ0xBU1MpfSxufSx0LnByb3RvdHlwZS5fb25EYXRhc2V0VXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZVN1YnRvdGFscygpLGUucHJvdG90eXBlLl9vbkRhdGFzZXRVcGRhdGUuY2FsbCh0aGlzKSx0aGlzfSx0LnByb3RvdHlwZS5fY2FsY3VsYXRlU3VidG90YWxzQW5kRXh0ZW50PWZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1OdW1iZXIuTUFYX1ZBTFVFLGk9TnVtYmVyLk1JTl9WQUxVRSxvPTAsYT0hMSxzPXIuZGF0YSgpLGw9cy5sZW5ndGgsYz0wO2M8bDtjKyspe3ZhciB1PXNbY10saD10aGlzLnkoKS5hY2Nlc3Nvcih1LGMsciksZj10aGlzLnRvdGFsKCkuYWNjZXNzb3IodSxjLHIpO2lmKCghZnx8Yz09PTApJiYobys9aCksdGhpcy5fc3VidG90YWxzLnB1c2gobyksbzxuJiYobj1vKSxvPmkmJihpPW8pLGYmJihoPG4mJihuPWgpLGg+aSYmKGk9aCkpLCFhJiZmKXtmb3IodmFyIHA9aC1vLGQ9MDtkPHRoaXMuX3N1YnRvdGFscy5sZW5ndGg7ZCsrKXRoaXMuX3N1YnRvdGFsc1tkXSs9cDthPSEwLG8rPXAsbis9cCxpKz1wfX10aGlzLl9leHRlbnQ9W24saV19LHQucHJvdG90eXBlLl9kcmF3Q29ubmVjdG9ycz1mdW5jdGlvbigpe2Zvcih2YXIgcj10aGlzLl9nZXRBdHRyVG9Qcm9qZWN0b3IoKSxuPXRoaXMuZGF0YXNldHMoKVswXSxpPTE7aTxuLmRhdGEoKS5sZW5ndGg7aSsrKXt2YXIgbz1pLTEsYT1uLmRhdGEoKVtpXSxzPW4uZGF0YSgpW29dLGw9ci54KHMsbyxuKSxjPXIueChhLGksbikrci53aWR0aChhLGksbiksdT1yLnkoYSxpLG4pOyh0aGlzLl9zdWJ0b3RhbHNbaV0+MCYmdGhpcy5fc3VidG90YWxzW2ldPnRoaXMuX3N1YnRvdGFsc1tvXXx8dGhpcy5fc3VidG90YWxzW2ldPDAmJnRoaXMuX3N1YnRvdGFsc1tpXT49dGhpcy5fc3VidG90YWxzW29dKSYmKHU9ci55KGEsaSxuKStyLmhlaWdodChhLGksbikpLHRoaXMuX2Nvbm5lY3RvckFyZWEuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCh0Ll9DT05ORUNUT1JfQ0xBU1MsITApLmF0dHIoIngxIixsKS5hdHRyKCJ4MiIsYykuYXR0cigieTEiLHUpLmF0dHIoInkyIix1KX19LHQucHJvdG90eXBlLl91cGRhdGVTdWJ0b3RhbHM9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLmRhdGFzZXRzKCk7aWYoci5sZW5ndGg+MCl7dmFyIG49cltyLmxlbmd0aC0xXTt0aGlzLl9zdWJ0b3RhbHM9bmV3IEFycmF5LHRoaXMuX2NhbGN1bGF0ZVN1YnRvdGFsc0FuZEV4dGVudChuKX19LHQuX0JBUl9ERUNMSU5FX0NMQVNTPSJ3YXRlcmZhbGwtZGVjbGluZSIsdC5fQkFSX0dST1dUSF9DTEFTUz0id2F0ZXJmYWxsLWdyb3d0aCIsdC5fQkFSX1RPVEFMX0NMQVNTPSJ3YXRlcmZhbGwtdG90YWwiLHQuX0NPTk5FQ1RPUl9DTEFTUz0iY29ubmVjdG9yIix0Ll9DT05ORUNUT1JfQVJFQV9DTEFTUz0iY29ubmVjdG9yLWFyZWEiLHQuX1RPVEFMX0tFWT0idG90YWwiLHR9KFpVZS5CYXIpO2phdC5XYXRlcmZhbGw9UVVlfSk7dmFyIElTPUgoT3M9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE9zLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgemM9KGRlKCksVXQocGUpKTt6Yy5fX2V4cG9ydFN0YXIoQ2F0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihfNCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoV290KCksT3MpO3pjLl9fZXhwb3J0U3RhcihfS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKE1hdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoeUt0KCksT3MpO3pjLl9fZXhwb3J0U3Rhcih2S3QoKSxPcyk7emMuX19leHBvcnRTdGFyKGJLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIod0t0KCksT3MpO3pjLl9fZXhwb3J0U3RhcihFS3QoKSxPcyk7emMuX19leHBvcnRTdGFyKENLdCgpLE9zKTt6Yy5fX2V4cG9ydFN0YXIoQUt0KCksT3MpfSk7dmFyIFBLdD1IKFhhdD0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoWGF0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtYYXQudmVyc2lvbj0iMy45LjAifSk7dmFyIHdsPUgobG49PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGxuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRmM9KGRlKCksVXQocGUpKTtHanQoKTt2YXIgdHFlPUxmKCk7bG4uQW5pbWF0b3JzPXRxZTt2YXIgZXFlPXMkdCgpO2xuLkF4ZXM9ZXFlO3ZhciBycWU9SW90KCk7bG4uQ29tcG9uZW50cz1ycWU7dmFyIG5xZT1YQSgpO2xuLkNvbmZpZ3M9bnFlO3ZhciBpcWU9QnUoKTtsbi5Gb3JtYXR0ZXJzPWlxZTt2YXIgb3FlPVBGKCk7bG4uUmVuZGVyQ29udHJvbGxlcj1vcWU7dmFyIGFxZT1WaXQoKTtsbi5SZW5kZXJQb2xpY2llcz1hcWU7dmFyIHNxZT1qRigpO2xuLlN5bWJvbEZhY3Rvcmllcz1zcWU7dmFyIGxxZT1OMSgpO2xuLkRpc3BhdGNoZXJzPWxxZTt2YXIgY3FlPUIxKCk7bG4uRHJhd2Vycz1jcWU7dmFyIHVxZT1zNCgpO2xuLkludGVyYWN0aW9ucz11cWU7dmFyIGhxZT1JUygpO2xuLlBsb3RzPWhxZTt2YXIgZnFlPWtzKCk7bG4uU2NhbGVzPWZxZTt2YXIgcHFlPUZlKCk7bG4uVXRpbHM9cHFlO0ZjLl9fZXhwb3J0U3RhcihRQSgpLGxuKTt2YXIgZHFlPUJGKCk7bG4uVGltZUludGVydmFsPWRxZS5UaW1lSW50ZXJ2YWw7RmMuX19leHBvcnRTdGFyKGtjKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihHRigpLGxuKTtGYy5fX2V4cG9ydFN0YXIoam90KCksbG4pO3ZhciBtcWU9UEt0KCk7bG4udmVyc2lvbj1tcWUudmVyc2lvbjtGYy5fX2V4cG9ydFN0YXIoaTQoKSxsbik7RmMuX19leHBvcnRTdGFyKFV1KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihEMSgpLGxuKTtGYy5fX2V4cG9ydFN0YXIoU290KCksbG4pO0ZjLl9fZXhwb3J0U3RhcihIMSgpLGxuKTtGYy5fX2V4cG9ydFN0YXIocnMoKSxsbik7RmMuX19leHBvcnRTdGFyKHZkKCksbG4pO0ZjLl9fZXhwb3J0U3RhcihMMSgpLGxuKX0pO3ZhciBYS3Q9SCgoS2puLGpLdCk9PntmdW5jdGlvbiBOcWUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfWpLdC5leHBvcnRzPU5xZX0pO3ZhciBZMT1IKChaam4sJEt0KT0+e2Z1bmN0aW9uIERxZShlLHQpe3JldHVybiBlPT09dHx8ZSE9PWUmJnQhPT10fSRLdC5leHBvcnRzPURxZX0pO3ZhciBTND1IKChKam4sS0t0KT0+e3ZhciBPcWU9WTEoKTtmdW5jdGlvbiB6cWUoZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGg7ci0tOylpZihPcWUoZVtyXVswXSx0KSlyZXR1cm4gcjtyZXR1cm4tMX1LS3QuZXhwb3J0cz16cWV9KTt2YXIgSkt0PUgoKFFqbixaS3QpPT57dmFyIEZxZT1TNCgpLEJxZT1BcnJheS5wcm90b3R5cGUsSHFlPUJxZS5zcGxpY2U7ZnVuY3Rpb24gVnFlKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1GcWUodCxlKTtpZihyPDApcmV0dXJuITE7dmFyIG49dC5sZW5ndGgtMTtyZXR1cm4gcj09bj90LnBvcCgpOkhxZS5jYWxsKHQsciwxKSwtLXRoaXMuc2l6ZSwhMH1aS3QuZXhwb3J0cz1WcWV9KTt2YXIgdFp0PUgoKHRYbixRS3QpPT57dmFyIFVxZT1TNCgpO2Z1bmN0aW9uIHFxZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9VXFlKHQsZSk7cmV0dXJuIHI8MD92b2lkIDA6dFtyXVsxXX1RS3QuZXhwb3J0cz1xcWV9KTt2YXIgclp0PUgoKGVYbixlWnQpPT57dmFyIEdxZT1TNCgpO2Z1bmN0aW9uIFdxZShlKXtyZXR1cm4gR3FlKHRoaXMuX19kYXRhX18sZSk+LTF9ZVp0LmV4cG9ydHM9V3FlfSk7dmFyIGladD1IKChyWG4sblp0KT0+e3ZhciBZcWU9UzQoKTtmdW5jdGlvbiBqcWUoZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fLG49WXFlKHIsZSk7cmV0dXJuIG48MD8oKyt0aGlzLnNpemUsci5wdXNoKFtlLHRdKSk6cltuXVsxXT10LHRoaXN9blp0LmV4cG9ydHM9anFlfSk7dmFyIE00PUgoKG5YbixvWnQpPT57dmFyIFhxZT1YS3QoKSwkcWU9Skt0KCksS3FlPXRadCgpLFpxZT1yWnQoKSxKcWU9aVp0KCk7ZnVuY3Rpb24gelMoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19elMucHJvdG90eXBlLmNsZWFyPVhxZTt6Uy5wcm90b3R5cGUuZGVsZXRlPSRxZTt6Uy5wcm90b3R5cGUuZ2V0PUtxZTt6Uy5wcm90b3R5cGUuaGFzPVpxZTt6Uy5wcm90b3R5cGUuc2V0PUpxZTtvWnQuZXhwb3J0cz16U30pO3ZhciBzWnQ9SCgoaVhuLGFadCk9Pnt2YXIgUXFlPU00KCk7ZnVuY3Rpb24gdEdlKCl7dGhpcy5fX2RhdGFfXz1uZXcgUXFlLHRoaXMuc2l6ZT0wfWFadC5leHBvcnRzPXRHZX0pO3ZhciBjWnQ9SCgob1huLGxadCk9PntmdW5jdGlvbiBlR2UoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXQuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemU9dC5zaXplLHJ9bFp0LmV4cG9ydHM9ZUdlfSk7dmFyIGhadD1IKChhWG4sdVp0KT0+e2Z1bmN0aW9uIHJHZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoZSl9dVp0LmV4cG9ydHM9ckdlfSk7dmFyIHBadD1IKChzWG4sZlp0KT0+e2Z1bmN0aW9uIG5HZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9Zlp0LmV4cG9ydHM9bkdlfSk7dmFyIHVzdD1IKChsWG4sZFp0KT0+e3ZhciBpR2U9dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbCYmZ2xvYmFsLk9iamVjdD09PU9iamVjdCYmZ2xvYmFsO2RadC5leHBvcnRzPWlHZX0pO3ZhciBIYz1IKChjWG4sbVp0KT0+e3ZhciBvR2U9dXN0KCksYUdlPXR5cGVvZiBzZWxmPT0ib2JqZWN0IiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsc0dlPW9HZXx8YUdlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpO21adC5leHBvcnRzPXNHZX0pO3ZhciBqMT1IKCh1WG4sZ1p0KT0+e3ZhciBsR2U9SGMoKSxjR2U9bEdlLlN5bWJvbDtnWnQuZXhwb3J0cz1jR2V9KTt2YXIgeFp0PUgoKGhYbix2WnQpPT57dmFyIF9adD1qMSgpLHladD1PYmplY3QucHJvdG90eXBlLHVHZT15WnQuaGFzT3duUHJvcGVydHksaEdlPXladC50b1N0cmluZyxFND1fWnQ/X1p0LnRvU3RyaW5nVGFnOnZvaWQgMDtmdW5jdGlvbiBmR2UoZSl7dmFyIHQ9dUdlLmNhbGwoZSxFNCkscj1lW0U0XTt0cnl7ZVtFNF09dm9pZCAwO3ZhciBuPSEwfWNhdGNoKG8pe312YXIgaT1oR2UuY2FsbChlKTtyZXR1cm4gbiYmKHQ/ZVtFNF09cjpkZWxldGUgZVtFNF0pLGl9dlp0LmV4cG9ydHM9ZkdlfSk7dmFyIHdadD1IKChmWG4sYlp0KT0+e3ZhciBwR2U9T2JqZWN0LnByb3RvdHlwZSxkR2U9cEdlLnRvU3RyaW5nO2Z1bmN0aW9uIG1HZShlKXtyZXR1cm4gZEdlLmNhbGwoZSl9Ylp0LmV4cG9ydHM9bUdlfSk7dmFyIHMwPUgoKHBYbixFWnQpPT57dmFyIFNadD1qMSgpLGdHZT14WnQoKSxfR2U9d1p0KCkseUdlPSJbb2JqZWN0IE51bGxdIix2R2U9IltvYmplY3QgVW5kZWZpbmVkXSIsTVp0PVNadD9TWnQudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHhHZShlKXtyZXR1cm4gZT09bnVsbD9lPT09dm9pZCAwP3ZHZTp5R2U6TVp0JiZNWnQgaW4gT2JqZWN0KGUpP2dHZShlKTpfR2UoZSl9RVp0LmV4cG9ydHM9eEdlfSk7dmFyIE1sPUgoKGRYbixUWnQpPT57ZnVuY3Rpb24gYkdlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBlIT1udWxsJiYodD09Im9iamVjdCJ8fHQ9PSJmdW5jdGlvbiIpfVRadC5leHBvcnRzPWJHZX0pO3ZhciBGUz1IKChtWG4sQ1p0KT0+e3ZhciB3R2U9czAoKSxTR2U9TWwoKSxNR2U9IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLEVHZT0iW29iamVjdCBGdW5jdGlvbl0iLFRHZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLENHZT0iW29iamVjdCBQcm94eV0iO2Z1bmN0aW9uIEFHZShlKXtpZighU0dlKGUpKXJldHVybiExO3ZhciB0PXdHZShlKTtyZXR1cm4gdD09RUdlfHx0PT1UR2V8fHQ9PU1HZXx8dD09Q0dlfUNadC5leHBvcnRzPUFHZX0pO3ZhciBQWnQ9SCgoZ1huLEFadCk9Pnt2YXIgUEdlPUhjKCksSUdlPVBHZVsiX19jb3JlLWpzX3NoYXJlZF9fIl07QVp0LmV4cG9ydHM9SUdlfSk7dmFyIGtadD1IKChfWG4sTFp0KT0+e3ZhciBoc3Q9UFp0KCksSVp0PWZ1bmN0aW9uKCl7dmFyIGU9L1teLl0rJC8uZXhlYyhoc3QmJmhzdC5rZXlzJiZoc3Qua2V5cy5JRV9QUk9UT3x8IiIpO3JldHVybiBlPyJTeW1ib2woc3JjKV8xLiIrZToiIn0oKTtmdW5jdGlvbiBMR2UoZSl7cmV0dXJuISFJWnQmJkladCBpbiBlfUxadC5leHBvcnRzPUxHZX0pO3ZhciBmc3Q9SCgoeVhuLFJadCk9Pnt2YXIga0dlPUZ1bmN0aW9uLnByb3RvdHlwZSxSR2U9a0dlLnRvU3RyaW5nO2Z1bmN0aW9uIE5HZShlKXtpZihlIT1udWxsKXt0cnl7cmV0dXJuIFJHZS5jYWxsKGUpfWNhdGNoKHQpe310cnl7cmV0dXJuIGUrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn1SWnQuZXhwb3J0cz1OR2V9KTt2YXIgRFp0PUgoKHZYbixOWnQpPT57dmFyIERHZT1GUygpLE9HZT1rWnQoKSx6R2U9TWwoKSxGR2U9ZnN0KCksQkdlPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxIR2U9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sVkdlPUZ1bmN0aW9uLnByb3RvdHlwZSxVR2U9T2JqZWN0LnByb3RvdHlwZSxxR2U9VkdlLnRvU3RyaW5nLEdHZT1VR2UuaGFzT3duUHJvcGVydHksV0dlPVJlZ0V4cCgiXiIrcUdlLmNhbGwoR0dlKS5yZXBsYWNlKEJHZSwiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtmdW5jdGlvbiBZR2UoZSl7aWYoIXpHZShlKXx8T0dlKGUpKXJldHVybiExO3ZhciB0PURHZShlKT9XR2U6SEdlO3JldHVybiB0LnRlc3QoRkdlKGUpKX1OWnQuZXhwb3J0cz1ZR2V9KTt2YXIgelp0PUgoKHhYbixPWnQpPT57ZnVuY3Rpb24gakdlKGUsdCl7cmV0dXJuIGU9PW51bGw/dm9pZCAwOmVbdF19T1p0LmV4cG9ydHM9akdlfSk7dmFyIGwwPUgoKGJYbixGWnQpPT57dmFyIFhHZT1EWnQoKSwkR2U9elp0KCk7ZnVuY3Rpb24gS0dlKGUsdCl7dmFyIHI9JEdlKGUsdCk7cmV0dXJuIFhHZShyKT9yOnZvaWQgMH1GWnQuZXhwb3J0cz1LR2V9KTt2YXIgT0I9SCgod1huLEJadCk9Pnt2YXIgWkdlPWwwKCksSkdlPUhjKCksUUdlPVpHZShKR2UsIk1hcCIpO0JadC5leHBvcnRzPVFHZX0pO3ZhciBUND1IKChTWG4sSFp0KT0+e3ZhciB0V2U9bDAoKSxlV2U9dFdlKE9iamVjdCwiY3JlYXRlIik7SFp0LmV4cG9ydHM9ZVdlfSk7dmFyIHFadD1IKChNWG4sVVp0KT0+e3ZhciBWWnQ9VDQoKTtmdW5jdGlvbiByV2UoKXt0aGlzLl9fZGF0YV9fPVZadD9WWnQobnVsbCk6e30sdGhpcy5zaXplPTB9VVp0LmV4cG9ydHM9cldlfSk7dmFyIFdadD1IKChFWG4sR1p0KT0+e2Z1bmN0aW9uIG5XZShlKXt2YXIgdD10aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV07cmV0dXJuIHRoaXMuc2l6ZS09dD8xOjAsdH1HWnQuZXhwb3J0cz1uV2V9KTt2YXIgalp0PUgoKFRYbixZWnQpPT57dmFyIGlXZT1UNCgpLG9XZT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsYVdlPU9iamVjdC5wcm90b3R5cGUsc1dlPWFXZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBsV2UoZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihpV2Upe3ZhciByPXRbZV07cmV0dXJuIHI9PT1vV2U/dm9pZCAwOnJ9cmV0dXJuIHNXZS5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9WVp0LmV4cG9ydHM9bFdlfSk7dmFyICRadD1IKChDWG4sWFp0KT0+e3ZhciBjV2U9VDQoKSx1V2U9T2JqZWN0LnByb3RvdHlwZSxoV2U9dVdlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGZXZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fO3JldHVybiBjV2U/dFtlXSE9PXZvaWQgMDpoV2UuY2FsbCh0LGUpfVhadC5leHBvcnRzPWZXZX0pO3ZhciBaWnQ9SCgoQVhuLEtadCk9Pnt2YXIgcFdlPVQ0KCksZFdlPSJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjtmdW5jdGlvbiBtV2UoZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGUpPzA6MSxyW2VdPXBXZSYmdD09PXZvaWQgMD9kV2U6dCx0aGlzfUtadC5leHBvcnRzPW1XZX0pO3ZhciBRWnQ9SCgoUFhuLEpadCk9Pnt2YXIgZ1dlPXFadCgpLF9XZT1XWnQoKSx5V2U9alp0KCksdldlPSRadCgpLHhXZT1aWnQoKTtmdW5jdGlvbiBCUyhlKXt2YXIgdD0tMSxyPWU9PW51bGw/MDplLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1CUy5wcm90b3R5cGUuY2xlYXI9Z1dlO0JTLnByb3RvdHlwZS5kZWxldGU9X1dlO0JTLnByb3RvdHlwZS5nZXQ9eVdlO0JTLnByb3RvdHlwZS5oYXM9dldlO0JTLnByb3RvdHlwZS5zZXQ9eFdlO0padC5leHBvcnRzPUJTfSk7dmFyIHJKdD1IKChJWG4sZUp0KT0+e3ZhciB0SnQ9UVp0KCksYldlPU00KCksd1dlPU9CKCk7ZnVuY3Rpb24gU1dlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgdEp0LG1hcDpuZXcod1dlfHxiV2UpLHN0cmluZzpuZXcgdEp0fX1lSnQuZXhwb3J0cz1TV2V9KTt2YXIgaUp0PUgoKExYbixuSnQpPT57ZnVuY3Rpb24gTVdlKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiB0PT0ic3RyaW5nInx8dD09Im51bWJlciJ8fHQ9PSJzeW1ib2wifHx0PT0iYm9vbGVhbiI/ZSE9PSJfX3Byb3RvX18iOmU9PT1udWxsfW5KdC5leHBvcnRzPU1XZX0pO3ZhciBDND1IKChrWG4sb0p0KT0+e3ZhciBFV2U9aUp0KCk7ZnVuY3Rpb24gVFdlKGUsdCl7dmFyIHI9ZS5fX2RhdGFfXztyZXR1cm4gRVdlKHQpP3JbdHlwZW9mIHQ9PSJzdHJpbmciPyJzdHJpbmciOiJoYXNoIl06ci5tYXB9b0p0LmV4cG9ydHM9VFdlfSk7dmFyIHNKdD1IKChSWG4sYUp0KT0+e3ZhciBDV2U9QzQoKTtmdW5jdGlvbiBBV2UoZSl7dmFyIHQ9Q1dlKHRoaXMsZSkuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9YUp0LmV4cG9ydHM9QVdlfSk7dmFyIGNKdD1IKChOWG4sbEp0KT0+e3ZhciBQV2U9QzQoKTtmdW5jdGlvbiBJV2UoZSl7cmV0dXJuIFBXZSh0aGlzLGUpLmdldChlKX1sSnQuZXhwb3J0cz1JV2V9KTt2YXIgaEp0PUgoKERYbix1SnQpPT57dmFyIExXZT1DNCgpO2Z1bmN0aW9uIGtXZShlKXtyZXR1cm4gTFdlKHRoaXMsZSkuaGFzKGUpfXVKdC5leHBvcnRzPWtXZX0pO3ZhciBwSnQ9SCgoT1huLGZKdCk9Pnt2YXIgUldlPUM0KCk7ZnVuY3Rpb24gTldlKGUsdCl7dmFyIHI9UldlKHRoaXMsZSksbj1yLnNpemU7cmV0dXJuIHIuc2V0KGUsdCksdGhpcy5zaXplKz1yLnNpemU9PW4/MDoxLHRoaXN9Zkp0LmV4cG9ydHM9TldlfSk7dmFyIHpCPUgoKHpYbixkSnQpPT57dmFyIERXZT1ySnQoKSxPV2U9c0p0KCkseldlPWNKdCgpLEZXZT1oSnQoKSxCV2U9cEp0KCk7ZnVuY3Rpb24gSFMoZSl7dmFyIHQ9LTEscj1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19SFMucHJvdG90eXBlLmNsZWFyPURXZTtIUy5wcm90b3R5cGUuZGVsZXRlPU9XZTtIUy5wcm90b3R5cGUuZ2V0PXpXZTtIUy5wcm90b3R5cGUuaGFzPUZXZTtIUy5wcm90b3R5cGUuc2V0PUJXZTtkSnQuZXhwb3J0cz1IU30pO3ZhciBnSnQ9SCgoRlhuLG1KdCk9Pnt2YXIgSFdlPU00KCksVldlPU9CKCksVVdlPXpCKCkscVdlPTIwMDtmdW5jdGlvbiBHV2UoZSx0KXt2YXIgcj10aGlzLl9fZGF0YV9fO2lmKHIgaW5zdGFuY2VvZiBIV2Upe3ZhciBuPXIuX19kYXRhX187aWYoIVZXZXx8bi5sZW5ndGg8cVdlLTEpcmV0dXJuIG4ucHVzaChbZSx0XSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBVV2Uobil9cmV0dXJuIHIuc2V0KGUsdCksdGhpcy5zaXplPXIuc2l6ZSx0aGlzfW1KdC5leHBvcnRzPUdXZX0pO3ZhciBBND1IKChCWG4sX0p0KT0+e3ZhciBXV2U9TTQoKSxZV2U9c1p0KCksaldlPWNadCgpLFhXZT1oWnQoKSwkV2U9cFp0KCksS1dlPWdKdCgpO2Z1bmN0aW9uIFZTKGUpe3ZhciB0PXRoaXMuX19kYXRhX189bmV3IFdXZShlKTt0aGlzLnNpemU9dC5zaXplfVZTLnByb3RvdHlwZS5jbGVhcj1ZV2U7VlMucHJvdG90eXBlLmRlbGV0ZT1qV2U7VlMucHJvdG90eXBlLmdldD1YV2U7VlMucHJvdG90eXBlLmhhcz0kV2U7VlMucHJvdG90eXBlLnNldD1LV2U7X0p0LmV4cG9ydHM9VlN9KTt2YXIgRkI9SCgoSFhuLHlKdCk9PntmdW5jdGlvbiBaV2UoZSx0KXtmb3IodmFyIHI9LTEsbj1lPT1udWxsPzA6ZS5sZW5ndGg7KytyPG4mJnQoZVtyXSxyLGUpIT09ITE7KTtyZXR1cm4gZX15SnQuZXhwb3J0cz1aV2V9KTt2YXIgcHN0PUgoKFZYbix2SnQpPT57dmFyIEpXZT1sMCgpLFFXZT1mdW5jdGlvbigpe3RyeXt2YXIgZT1KV2UoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBlKHt9LCIiLHt9KSxlfWNhdGNoKHQpe319KCk7dkp0LmV4cG9ydHM9UVdlfSk7dmFyIFA0PUgoKFVYbixiSnQpPT57dmFyIHhKdD1wc3QoKTtmdW5jdGlvbiB0WWUoZSx0LHIpe3Q9PSJfX3Byb3RvX18iJiZ4SnQ/eEp0KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cix3cml0YWJsZTohMH0pOmVbdF09cn1iSnQuZXhwb3J0cz10WWV9KTt2YXIgSTQ9SCgocVhuLHdKdCk9Pnt2YXIgZVllPVA0KCksclllPVkxKCksblllPU9iamVjdC5wcm90b3R5cGUsaVllPW5ZZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBvWWUoZSx0LHIpe3ZhciBuPWVbdF07KCEoaVllLmNhbGwoZSx0KSYmclllKG4scikpfHxyPT09dm9pZCAwJiYhKHQgaW4gZSkpJiZlWWUoZSx0LHIpfXdKdC5leHBvcnRzPW9ZZX0pO3ZhciBVUz1IKChHWG4sU0p0KT0+e3ZhciBhWWU9STQoKSxzWWU9UDQoKTtmdW5jdGlvbiBsWWUoZSx0LHIsbil7dmFyIGk9IXI7cnx8KHI9e30pO2Zvcih2YXIgbz0tMSxhPXQubGVuZ3RoOysrbzxhOyl7dmFyIHM9dFtvXSxsPW4/bihyW3NdLGVbc10scyxyLGUpOnZvaWQgMDtsPT09dm9pZCAwJiYobD1lW3NdKSxpP3NZZShyLHMsbCk6YVllKHIscyxsKX1yZXR1cm4gcn1TSnQuZXhwb3J0cz1sWWV9KTt2YXIgRUp0PUgoKFdYbixNSnQpPT57ZnVuY3Rpb24gY1llKGUsdCl7Zm9yKHZhciByPS0xLG49QXJyYXkoZSk7KytyPGU7KW5bcl09dChyKTtyZXR1cm4gbn1NSnQuZXhwb3J0cz1jWWV9KTt2YXIgWXU9SCgoWVhuLFRKdCk9PntmdW5jdGlvbiB1WWUoZSl7cmV0dXJuIGUhPW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0In1USnQuZXhwb3J0cz11WWV9KTt2YXIgQUp0PUgoKGpYbixDSnQpPT57dmFyIGhZZT1zMCgpLGZZZT1ZdSgpLHBZZT0iW29iamVjdCBBcmd1bWVudHNdIjtmdW5jdGlvbiBkWWUoZSl7cmV0dXJuIGZZZShlKSYmaFllKGUpPT1wWWV9Q0p0LmV4cG9ydHM9ZFllfSk7dmFyIHFTPUgoKFhYbixMSnQpPT57dmFyIFBKdD1BSnQoKSxtWWU9WXUoKSxJSnQ9T2JqZWN0LnByb3RvdHlwZSxnWWU9SUp0Lmhhc093blByb3BlcnR5LF9ZZT1JSnQucHJvcGVydHlJc0VudW1lcmFibGUseVllPVBKdChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP1BKdDpmdW5jdGlvbihlKXtyZXR1cm4gbVllKGUpJiZnWWUuY2FsbChlLCJjYWxsZWUiKSYmIV9ZZS5jYWxsKGUsImNhbGxlZSIpfTtMSnQuZXhwb3J0cz15WWV9KTt2YXIgVGk9SCgoJFhuLGtKdCk9Pnt2YXIgdlllPUFycmF5LmlzQXJyYXk7a0p0LmV4cG9ydHM9dlllfSk7dmFyIE5KdD1IKChLWG4sUkp0KT0+e2Z1bmN0aW9uIHhZZSgpe3JldHVybiExfVJKdC5leHBvcnRzPXhZZX0pO3ZhciBYMT1IKChMNCxHUyk9Pnt2YXIgYlllPUhjKCksd1llPU5KdCgpLHpKdD10eXBlb2YgTDQ9PSJvYmplY3QiJiZMNCYmIUw0Lm5vZGVUeXBlJiZMNCxESnQ9ekp0JiZ0eXBlb2YgR1M9PSJvYmplY3QiJiZHUyYmIUdTLm5vZGVUeXBlJiZHUyxTWWU9REp0JiZESnQuZXhwb3J0cz09PXpKdCxPSnQ9U1llP2JZZS5CdWZmZXI6dm9pZCAwLE1ZZT1PSnQ/T0p0LmlzQnVmZmVyOnZvaWQgMCxFWWU9TVllfHx3WWU7R1MuZXhwb3J0cz1FWWV9KTt2YXIgazQ9SCgoWlhuLEZKdCk9Pnt2YXIgVFllPTkwMDcxOTkyNTQ3NDA5OTEsQ1llPS9eKD86MHxbMS05XVxkKikkLztmdW5jdGlvbiBBWWUoZSx0KXt2YXIgcj10eXBlb2YgZTtyZXR1cm4gdD10PT1udWxsP1RZZTp0LCEhdCYmKHI9PSJudW1iZXIifHxyIT0ic3ltYm9sIiYmQ1llLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1GSnQuZXhwb3J0cz1BWWV9KTt2YXIgQkI9SCgoSlhuLEJKdCk9Pnt2YXIgUFllPTkwMDcxOTkyNTQ3NDA5OTE7ZnVuY3Rpb24gSVllKGUpe3JldHVybiB0eXBlb2YgZT09Im51bWJlciImJmU+LTEmJmUlMT09MCYmZTw9UFllfUJKdC5leHBvcnRzPUlZZX0pO3ZhciBWSnQ9SCgoUVhuLEhKdCk9Pnt2YXIgTFllPXMwKCksa1llPUJCKCksUlllPVl1KCksTlllPSJbb2JqZWN0IEFyZ3VtZW50c10iLERZZT0iW29iamVjdCBBcnJheV0iLE9ZZT0iW29iamVjdCBCb29sZWFuXSIselllPSJbb2JqZWN0IERhdGVdIixGWWU9IltvYmplY3QgRXJyb3JdIixCWWU9IltvYmplY3QgRnVuY3Rpb25dIixIWWU9IltvYmplY3QgTWFwXSIsVlllPSJbb2JqZWN0IE51bWJlcl0iLFVZZT0iW29iamVjdCBPYmplY3RdIixxWWU9IltvYmplY3QgUmVnRXhwXSIsR1llPSJbb2JqZWN0IFNldF0iLFdZZT0iW29iamVjdCBTdHJpbmddIixZWWU9IltvYmplY3QgV2Vha01hcF0iLGpZZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFhZZT0iW29iamVjdCBEYXRhVmlld10iLCRZZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixLWWU9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsWlllPSJbb2JqZWN0IEludDhBcnJheV0iLEpZZT0iW29iamVjdCBJbnQxNkFycmF5XSIsUVllPSJbb2JqZWN0IEludDMyQXJyYXldIix0amU9IltvYmplY3QgVWludDhBcnJheV0iLGVqZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLHJqZT0iW29iamVjdCBVaW50MTZBcnJheV0iLG5qZT0iW29iamVjdCBVaW50MzJBcnJheV0iLFVuPXt9O1VuWyRZZV09VW5bS1llXT1VbltaWWVdPVVuW0pZZV09VW5bUVllXT1Vblt0amVdPVVuW2VqZV09VW5bcmplXT1VbltuamVdPSEwO1VuW05ZZV09VW5bRFllXT1VbltqWWVdPVVuW09ZZV09VW5bWFllXT1Vblt6WWVdPVVuW0ZZZV09VW5bQlllXT1VbltIWWVdPVVuW1ZZZV09VW5bVVllXT1VbltxWWVdPVVuW0dZZV09VW5bV1llXT1VbltZWWVdPSExO2Z1bmN0aW9uIGlqZShlKXtyZXR1cm4gUlllKGUpJiZrWWUoZS5sZW5ndGgpJiYhIVVuW0xZZShlKV19SEp0LmV4cG9ydHM9aWplfSk7dmFyIFI0PUgoKHQkbixVSnQpPT57ZnVuY3Rpb24gb2plKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19VUp0LmV4cG9ydHM9b2plfSk7dmFyIEhCPUgoKE40LFdTKT0+e3ZhciBhamU9dXN0KCkscUp0PXR5cGVvZiBOND09Im9iamVjdCImJk40JiYhTjQubm9kZVR5cGUmJk40LEQ0PXFKdCYmdHlwZW9mIFdTPT0ib2JqZWN0IiYmV1MmJiFXUy5ub2RlVHlwZSYmV1Msc2plPUQ0JiZENC5leHBvcnRzPT09cUp0LGRzdD1zamUmJmFqZS5wcm9jZXNzLGxqZT1mdW5jdGlvbigpe3RyeXt2YXIgZT1ENCYmRDQucmVxdWlyZSYmRDQucmVxdWlyZSgidXRpbCIpLnR5cGVzO3JldHVybiBlfHxkc3QmJmRzdC5iaW5kaW5nJiZkc3QuYmluZGluZygidXRpbCIpfWNhdGNoKHQpe319KCk7V1MuZXhwb3J0cz1samV9KTt2YXIgWVM9SCgoZSRuLFlKdCk9Pnt2YXIgY2plPVZKdCgpLHVqZT1SNCgpLEdKdD1IQigpLFdKdD1HSnQmJkdKdC5pc1R5cGVkQXJyYXksaGplPVdKdD91amUoV0p0KTpjamU7WUp0LmV4cG9ydHM9aGplfSk7dmFyIG1zdD1IKChyJG4sakp0KT0+e3ZhciBmamU9RUp0KCkscGplPXFTKCksZGplPVRpKCksbWplPVgxKCksZ2plPWs0KCksX2plPVlTKCkseWplPU9iamVjdC5wcm90b3R5cGUsdmplPXlqZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB4amUoZSx0KXt2YXIgcj1kamUoZSksbj0hciYmcGplKGUpLGk9IXImJiFuJiZtamUoZSksbz0hciYmIW4mJiFpJiZfamUoZSksYT1yfHxufHxpfHxvLHM9YT9mamUoZS5sZW5ndGgsU3RyaW5nKTpbXSxsPXMubGVuZ3RoO2Zvcih2YXIgYyBpbiBlKSh0fHx2amUuY2FsbChlLGMpKSYmIShhJiYoYz09Imxlbmd0aCJ8fGkmJihjPT0ib2Zmc2V0Inx8Yz09InBhcmVudCIpfHxvJiYoYz09ImJ1ZmZlciJ8fGM9PSJieXRlTGVuZ3RoInx8Yz09ImJ5dGVPZmZzZXQiKXx8Z2plKGMsbCkpKSYmcy5wdXNoKGMpO3JldHVybiBzfWpKdC5leHBvcnRzPXhqZX0pO3ZhciBPND1IKChuJG4sWEp0KT0+e3ZhciBiamU9T2JqZWN0LnByb3RvdHlwZTtmdW5jdGlvbiB3amUoZSl7dmFyIHQ9ZSYmZS5jb25zdHJ1Y3RvcixyPXR5cGVvZiB0PT0iZnVuY3Rpb24iJiZ0LnByb3RvdHlwZXx8YmplO3JldHVybiBlPT09cn1YSnQuZXhwb3J0cz13amV9KTt2YXIgZ3N0PUgoKGkkbiwkSnQpPT57ZnVuY3Rpb24gU2plKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBlKHQocikpfX0kSnQuZXhwb3J0cz1TamV9KTt2YXIgWkp0PUgoKG8kbixLSnQpPT57dmFyIE1qZT1nc3QoKSxFamU9TWplKE9iamVjdC5rZXlzLE9iamVjdCk7S0p0LmV4cG9ydHM9RWplfSk7dmFyIFZCPUgoKGEkbixKSnQpPT57dmFyIFRqZT1PNCgpLENqZT1aSnQoKSxBamU9T2JqZWN0LnByb3RvdHlwZSxQamU9QWplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIElqZShlKXtpZighVGplKGUpKXJldHVybiBDamUoZSk7dmFyIHQ9W107Zm9yKHZhciByIGluIE9iamVjdChlKSlQamUuY2FsbChlLHIpJiZyIT0iY29uc3RydWN0b3IiJiZ0LnB1c2gocik7cmV0dXJuIHR9Skp0LmV4cG9ydHM9SWplfSk7dmFyIEJmPUgoKHMkbixRSnQpPT57dmFyIExqZT1GUygpLGtqZT1CQigpO2Z1bmN0aW9uIFJqZShlKXtyZXR1cm4gZSE9bnVsbCYma2plKGUubGVuZ3RoKSYmIUxqZShlKX1RSnQuZXhwb3J0cz1SamV9KTt2YXIgQWQ9SCgobCRuLHRRdCk9Pnt2YXIgTmplPW1zdCgpLERqZT1WQigpLE9qZT1CZigpO2Z1bmN0aW9uIHpqZShlKXtyZXR1cm4gT2plKGUpP05qZShlKTpEamUoZSl9dFF0LmV4cG9ydHM9emplfSk7dmFyIHJRdD1IKChjJG4sZVF0KT0+e3ZhciBGamU9VVMoKSxCamU9QWQoKTtmdW5jdGlvbiBIamUoZSx0KXtyZXR1cm4gZSYmRmplKHQsQmplKHQpLGUpfWVRdC5leHBvcnRzPUhqZX0pO3ZhciBpUXQ9SCgodSRuLG5RdCk9PntmdW5jdGlvbiBWamUoZSl7dmFyIHQ9W107aWYoZSE9bnVsbClmb3IodmFyIHIgaW4gT2JqZWN0KGUpKXQucHVzaChyKTtyZXR1cm4gdH1uUXQuZXhwb3J0cz1WamV9KTt2YXIgYVF0PUgoKGgkbixvUXQpPT57dmFyIFVqZT1NbCgpLHFqZT1PNCgpLEdqZT1pUXQoKSxXamU9T2JqZWN0LnByb3RvdHlwZSxZamU9V2plLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGpqZShlKXtpZighVWplKGUpKXJldHVybiBHamUoZSk7dmFyIHQ9cWplKGUpLHI9W107Zm9yKHZhciBuIGluIGUpbj09ImNvbnN0cnVjdG9yIiYmKHR8fCFZamUuY2FsbChlLG4pKXx8ci5wdXNoKG4pO3JldHVybiByfW9RdC5leHBvcnRzPWpqZX0pO3ZhciBjMD1IKChmJG4sc1F0KT0+e3ZhciBYamU9bXN0KCksJGplPWFRdCgpLEtqZT1CZigpO2Z1bmN0aW9uIFpqZShlKXtyZXR1cm4gS2plKGUpP1hqZShlLCEwKTokamUoZSl9c1F0LmV4cG9ydHM9WmplfSk7dmFyIGNRdD1IKChwJG4sbFF0KT0+e3ZhciBKamU9VVMoKSxRamU9YzAoKTtmdW5jdGlvbiB0WGUoZSx0KXtyZXR1cm4gZSYmSmplKHQsUWplKHQpLGUpfWxRdC5leHBvcnRzPXRYZX0pO3ZhciBfc3Q9SCgoejQsalMpPT57dmFyIGVYZT1IYygpLHBRdD10eXBlb2YgejQ9PSJvYmplY3QiJiZ6NCYmIXo0Lm5vZGVUeXBlJiZ6NCx1UXQ9cFF0JiZ0eXBlb2YgalM9PSJvYmplY3QiJiZqUyYmIWpTLm5vZGVUeXBlJiZqUyxyWGU9dVF0JiZ1UXQuZXhwb3J0cz09PXBRdCxoUXQ9clhlP2VYZS5CdWZmZXI6dm9pZCAwLGZRdD1oUXQ/aFF0LmFsbG9jVW5zYWZlOnZvaWQgMDtmdW5jdGlvbiBuWGUoZSx0KXtpZih0KXJldHVybiBlLnNsaWNlKCk7dmFyIHI9ZS5sZW5ndGgsbj1mUXQ/ZlF0KHIpOm5ldyBlLmNvbnN0cnVjdG9yKHIpO3JldHVybiBlLmNvcHkobiksbn1qUy5leHBvcnRzPW5YZX0pO3ZhciB5c3Q9SCgoZCRuLGRRdCk9PntmdW5jdGlvbiBpWGUoZSx0KXt2YXIgcj0tMSxuPWUubGVuZ3RoO2Zvcih0fHwodD1BcnJheShuKSk7KytyPG47KXRbcl09ZVtyXTtyZXR1cm4gdH1kUXQuZXhwb3J0cz1pWGV9KTt2YXIgdnN0PUgoKG0kbixtUXQpPT57ZnVuY3Rpb24gb1hlKGUsdCl7Zm9yKHZhciByPS0xLG49ZT09bnVsbD8wOmUubGVuZ3RoLGk9MCxvPVtdOysrcjxuOyl7dmFyIGE9ZVtyXTt0KGEscixlKSYmKG9baSsrXT1hKX1yZXR1cm4gb31tUXQuZXhwb3J0cz1vWGV9KTt2YXIgeHN0PUgoKGckbixnUXQpPT57ZnVuY3Rpb24gYVhlKCl7cmV0dXJuW119Z1F0LmV4cG9ydHM9YVhlfSk7dmFyIFVCPUgoKF8kbix5UXQpPT57dmFyIHNYZT12c3QoKSxsWGU9eHN0KCksY1hlPU9iamVjdC5wcm90b3R5cGUsdVhlPWNYZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxfUXQ9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxoWGU9X1F0P2Z1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP1tdOihlPU9iamVjdChlKSxzWGUoX1F0KGUpLGZ1bmN0aW9uKHQpe3JldHVybiB1WGUuY2FsbChlLHQpfSkpfTpsWGU7eVF0LmV4cG9ydHM9aFhlfSk7dmFyIHhRdD1IKCh5JG4sdlF0KT0+e3ZhciBmWGU9VVMoKSxwWGU9VUIoKTtmdW5jdGlvbiBkWGUoZSx0KXtyZXR1cm4gZlhlKGUscFhlKGUpLHQpfXZRdC5leHBvcnRzPWRYZX0pO3ZhciBxQj1IKCh2JG4sYlF0KT0+e2Z1bmN0aW9uIG1YZShlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk9ZS5sZW5ndGg7KytyPG47KWVbaStyXT10W3JdO3JldHVybiBlfWJRdC5leHBvcnRzPW1YZX0pO3ZhciBGND1IKCh4JG4sd1F0KT0+e3ZhciBnWGU9Z3N0KCksX1hlPWdYZShPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt3UXQuZXhwb3J0cz1fWGV9KTt2YXIgYnN0PUgoKGIkbixTUXQpPT57dmFyIHlYZT1xQigpLHZYZT1GNCgpLHhYZT1VQigpLGJYZT14c3QoKSx3WGU9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxTWGU9d1hlP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXTtlOyl5WGUodCx4WGUoZSkpLGU9dlhlKGUpO3JldHVybiB0fTpiWGU7U1F0LmV4cG9ydHM9U1hlfSk7dmFyIEVRdD1IKCh3JG4sTVF0KT0+e3ZhciBNWGU9VVMoKSxFWGU9YnN0KCk7ZnVuY3Rpb24gVFhlKGUsdCl7cmV0dXJuIE1YZShlLEVYZShlKSx0KX1NUXQuZXhwb3J0cz1UWGV9KTt2YXIgd3N0PUgoKFMkbixUUXQpPT57dmFyIENYZT1xQigpLEFYZT1UaSgpO2Z1bmN0aW9uIFBYZShlLHQscil7dmFyIG49dChlKTtyZXR1cm4gQVhlKGUpP246Q1hlKG4scihlKSl9VFF0LmV4cG9ydHM9UFhlfSk7dmFyIFNzdD1IKChNJG4sQ1F0KT0+e3ZhciBJWGU9d3N0KCksTFhlPVVCKCksa1hlPUFkKCk7ZnVuY3Rpb24gUlhlKGUpe3JldHVybiBJWGUoZSxrWGUsTFhlKX1DUXQuZXhwb3J0cz1SWGV9KTt2YXIgUFF0PUgoKEUkbixBUXQpPT57dmFyIE5YZT13c3QoKSxEWGU9YnN0KCksT1hlPWMwKCk7ZnVuY3Rpb24gelhlKGUpe3JldHVybiBOWGUoZSxPWGUsRFhlKX1BUXQuZXhwb3J0cz16WGV9KTt2YXIgTFF0PUgoKFQkbixJUXQpPT57dmFyIEZYZT1sMCgpLEJYZT1IYygpLEhYZT1GWGUoQlhlLCJEYXRhVmlldyIpO0lRdC5leHBvcnRzPUhYZX0pO3ZhciBSUXQ9SCgoQyRuLGtRdCk9Pnt2YXIgVlhlPWwwKCksVVhlPUhjKCkscVhlPVZYZShVWGUsIlByb21pc2UiKTtrUXQuZXhwb3J0cz1xWGV9KTt2YXIgTXN0PUgoKEEkbixOUXQpPT57dmFyIEdYZT1sMCgpLFdYZT1IYygpLFlYZT1HWGUoV1hlLCJTZXQiKTtOUXQuZXhwb3J0cz1ZWGV9KTt2YXIgT1F0PUgoKFAkbixEUXQpPT57dmFyIGpYZT1sMCgpLFhYZT1IYygpLCRYZT1qWGUoWFhlLCJXZWFrTWFwIik7RFF0LmV4cG9ydHM9JFhlfSk7dmFyIEsxPUgoKEkkbixxUXQpPT57dmFyIEVzdD1MUXQoKSxUc3Q9T0IoKSxDc3Q9UlF0KCksQXN0PU1zdCgpLFBzdD1PUXQoKSxVUXQ9czAoKSxYUz1mc3QoKSx6UXQ9IltvYmplY3QgTWFwXSIsS1hlPSJbb2JqZWN0IE9iamVjdF0iLEZRdD0iW29iamVjdCBQcm9taXNlXSIsQlF0PSJbb2JqZWN0IFNldF0iLEhRdD0iW29iamVjdCBXZWFrTWFwXSIsVlF0PSJbb2JqZWN0IERhdGFWaWV3XSIsWlhlPVhTKEVzdCksSlhlPVhTKFRzdCksUVhlPVhTKENzdCksdCRlPVhTKEFzdCksZSRlPVhTKFBzdCksJDE9VVF0OyhFc3QmJiQxKG5ldyBFc3QobmV3IEFycmF5QnVmZmVyKDEpKSkhPVZRdHx8VHN0JiYkMShuZXcgVHN0KSE9elF0fHxDc3QmJiQxKENzdC5yZXNvbHZlKCkpIT1GUXR8fEFzdCYmJDEobmV3IEFzdCkhPUJRdHx8UHN0JiYkMShuZXcgUHN0KSE9SFF0KSYmKCQxPWZ1bmN0aW9uKGUpe3ZhciB0PVVRdChlKSxyPXQ9PUtYZT9lLmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/WFMocik6IiI7aWYobilzd2l0Y2gobil7Y2FzZSBaWGU6cmV0dXJuIFZRdDtjYXNlIEpYZTpyZXR1cm4gelF0O2Nhc2UgUVhlOnJldHVybiBGUXQ7Y2FzZSB0JGU6cmV0dXJuIEJRdDtjYXNlIGUkZTpyZXR1cm4gSFF0fXJldHVybiB0fSk7cVF0LmV4cG9ydHM9JDF9KTt2YXIgV1F0PUgoKEwkbixHUXQpPT57dmFyIHIkZT1PYmplY3QucHJvdG90eXBlLG4kZT1yJGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gaSRlKGUpe3ZhciB0PWUubGVuZ3RoLHI9bmV3IGUuY29uc3RydWN0b3IodCk7cmV0dXJuIHQmJnR5cGVvZiBlWzBdPT0ic3RyaW5nIiYmbiRlLmNhbGwoZSwiaW5kZXgiKSYmKHIuaW5kZXg9ZS5pbmRleCxyLmlucHV0PWUuaW5wdXQpLHJ9R1F0LmV4cG9ydHM9aSRlfSk7dmFyIElzdD1IKChrJG4sWVF0KT0+e3ZhciBvJGU9SGMoKSxhJGU9byRlLlVpbnQ4QXJyYXk7WVF0LmV4cG9ydHM9YSRlfSk7dmFyIEdCPUgoKFIkbixYUXQpPT57dmFyIGpRdD1Jc3QoKTtmdW5jdGlvbiBzJGUoZSl7dmFyIHQ9bmV3IGUuY29uc3RydWN0b3IoZS5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IGpRdCh0KS5zZXQobmV3IGpRdChlKSksdH1YUXQuZXhwb3J0cz1zJGV9KTt2YXIgS1F0PUgoKE4kbiwkUXQpPT57dmFyIGwkZT1HQigpO2Z1bmN0aW9uIGMkZShlLHQpe3ZhciByPXQ/bCRlKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IocixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKX0kUXQuZXhwb3J0cz1jJGV9KTt2YXIgSlF0PUgoKEQkbixaUXQpPT57dmFyIHUkZT0vXHcqJC87ZnVuY3Rpb24gaCRlKGUpe3ZhciB0PW5ldyBlLmNvbnN0cnVjdG9yKGUuc291cmNlLHUkZS5leGVjKGUpKTtyZXR1cm4gdC5sYXN0SW5kZXg9ZS5sYXN0SW5kZXgsdH1aUXQuZXhwb3J0cz1oJGV9KTt2YXIgbnRlPUgoKE8kbixydGUpPT57dmFyIFFRdD1qMSgpLHR0ZT1RUXQ/UVF0LnByb3RvdHlwZTp2b2lkIDAsZXRlPXR0ZT90dGUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gZiRlKGUpe3JldHVybiBldGU/T2JqZWN0KGV0ZS5jYWxsKGUpKTp7fX1ydGUuZXhwb3J0cz1mJGV9KTt2YXIgTHN0PUgoKHokbixpdGUpPT57dmFyIHAkZT1HQigpO2Z1bmN0aW9uIGQkZShlLHQpe3ZhciByPXQ/cCRlKGUuYnVmZmVyKTplLmJ1ZmZlcjtyZXR1cm4gbmV3IGUuY29uc3RydWN0b3IocixlLmJ5dGVPZmZzZXQsZS5sZW5ndGgpfWl0ZS5leHBvcnRzPWQkZX0pO3ZhciBhdGU9SCgoRiRuLG90ZSk9Pnt2YXIgbSRlPUdCKCksZyRlPUtRdCgpLF8kZT1KUXQoKSx5JGU9bnRlKCksdiRlPUxzdCgpLHgkZT0iW29iamVjdCBCb29sZWFuXSIsYiRlPSJbb2JqZWN0IERhdGVdIix3JGU9IltvYmplY3QgTWFwXSIsUyRlPSJbb2JqZWN0IE51bWJlcl0iLE0kZT0iW29iamVjdCBSZWdFeHBdIixFJGU9IltvYmplY3QgU2V0XSIsVCRlPSJbb2JqZWN0IFN0cmluZ10iLEMkZT0iW29iamVjdCBTeW1ib2xdIixBJGU9IltvYmplY3QgQXJyYXlCdWZmZXJdIixQJGU9IltvYmplY3QgRGF0YVZpZXddIixJJGU9IltvYmplY3QgRmxvYXQzMkFycmF5XSIsTCRlPSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLGskZT0iW29iamVjdCBJbnQ4QXJyYXldIixSJGU9IltvYmplY3QgSW50MTZBcnJheV0iLE4kZT0iW29iamVjdCBJbnQzMkFycmF5XSIsRCRlPSJbb2JqZWN0IFVpbnQ4QXJyYXldIixPJGU9IltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIix6JGU9IltvYmplY3QgVWludDE2QXJyYXldIixGJGU9IltvYmplY3QgVWludDMyQXJyYXldIjtmdW5jdGlvbiBCJGUoZSx0LHIpe3ZhciBuPWUuY29uc3RydWN0b3I7c3dpdGNoKHQpe2Nhc2UgQSRlOnJldHVybiBtJGUoZSk7Y2FzZSB4JGU6Y2FzZSBiJGU6cmV0dXJuIG5ldyBuKCtlKTtjYXNlIFAkZTpyZXR1cm4gZyRlKGUscik7Y2FzZSBJJGU6Y2FzZSBMJGU6Y2FzZSBrJGU6Y2FzZSBSJGU6Y2FzZSBOJGU6Y2FzZSBEJGU6Y2FzZSBPJGU6Y2FzZSB6JGU6Y2FzZSBGJGU6cmV0dXJuIHYkZShlLHIpO2Nhc2UgdyRlOnJldHVybiBuZXcgbjtjYXNlIFMkZTpjYXNlIFQkZTpyZXR1cm4gbmV3IG4oZSk7Y2FzZSBNJGU6cmV0dXJuIF8kZShlKTtjYXNlIEUkZTpyZXR1cm4gbmV3IG47Y2FzZSBDJGU6cmV0dXJuIHkkZShlKX19b3RlLmV4cG9ydHM9QiRlfSk7dmFyIGtzdD1IKChCJG4sbHRlKT0+e3ZhciBIJGU9TWwoKSxzdGU9T2JqZWN0LmNyZWF0ZSxWJGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBmdW5jdGlvbih0KXtpZighSCRlKHQpKXJldHVybnt9O2lmKHN0ZSlyZXR1cm4gc3RlKHQpO2UucHJvdG90eXBlPXQ7dmFyIHI9bmV3IGU7cmV0dXJuIGUucHJvdG90eXBlPXZvaWQgMCxyfX0oKTtsdGUuZXhwb3J0cz1WJGV9KTt2YXIgUnN0PUgoKEgkbixjdGUpPT57dmFyIFUkZT1rc3QoKSxxJGU9RjQoKSxHJGU9TzQoKTtmdW5jdGlvbiBXJGUoZSl7cmV0dXJuIHR5cGVvZiBlLmNvbnN0cnVjdG9yPT0iZnVuY3Rpb24iJiYhRyRlKGUpP1UkZShxJGUoZSkpOnt9fWN0ZS5leHBvcnRzPVckZX0pO3ZhciBodGU9SCgoViRuLHV0ZSk9Pnt2YXIgWSRlPUsxKCksaiRlPVl1KCksWCRlPSJbb2JqZWN0IE1hcF0iO2Z1bmN0aW9uICQkZShlKXtyZXR1cm4gaiRlKGUpJiZZJGUoZSk9PVgkZX11dGUuZXhwb3J0cz0kJGV9KTt2YXIgbXRlPUgoKFUkbixkdGUpPT57dmFyIEskZT1odGUoKSxaJGU9UjQoKSxmdGU9SEIoKSxwdGU9ZnRlJiZmdGUuaXNNYXAsSiRlPXB0ZT9aJGUocHRlKTpLJGU7ZHRlLmV4cG9ydHM9SiRlfSk7dmFyIF90ZT1IKChxJG4sZ3RlKT0+e3ZhciBRJGU9SzEoKSx0S2U9WXUoKSxlS2U9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gcktlKGUpe3JldHVybiB0S2UoZSkmJlEkZShlKT09ZUtlfWd0ZS5leHBvcnRzPXJLZX0pO3ZhciBidGU9SCgoRyRuLHh0ZSk9Pnt2YXIgbktlPV90ZSgpLGlLZT1SNCgpLHl0ZT1IQigpLHZ0ZT15dGUmJnl0ZS5pc1NldCxvS2U9dnRlP2lLZSh2dGUpOm5LZTt4dGUuZXhwb3J0cz1vS2V9KTt2YXIgTnN0PUgoKFckbixFdGUpPT57dmFyIGFLZT1BNCgpLHNLZT1GQigpLGxLZT1JNCgpLGNLZT1yUXQoKSx1S2U9Y1F0KCksaEtlPV9zdCgpLGZLZT15c3QoKSxwS2U9eFF0KCksZEtlPUVRdCgpLG1LZT1Tc3QoKSxnS2U9UFF0KCksX0tlPUsxKCkseUtlPVdRdCgpLHZLZT1hdGUoKSx4S2U9UnN0KCksYktlPVRpKCksd0tlPVgxKCksU0tlPW10ZSgpLE1LZT1NbCgpLEVLZT1idGUoKSxUS2U9QWQoKSxDS2U9YzAoKSxBS2U9MSxQS2U9MixJS2U9NCx3dGU9IltvYmplY3QgQXJndW1lbnRzXSIsTEtlPSJbb2JqZWN0IEFycmF5XSIsa0tlPSJbb2JqZWN0IEJvb2xlYW5dIixSS2U9IltvYmplY3QgRGF0ZV0iLE5LZT0iW29iamVjdCBFcnJvcl0iLFN0ZT0iW29iamVjdCBGdW5jdGlvbl0iLERLZT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLE9LZT0iW29iamVjdCBNYXBdIix6S2U9IltvYmplY3QgTnVtYmVyXSIsTXRlPSJbb2JqZWN0IE9iamVjdF0iLEZLZT0iW29iamVjdCBSZWdFeHBdIixCS2U9IltvYmplY3QgU2V0XSIsSEtlPSJbb2JqZWN0IFN0cmluZ10iLFZLZT0iW29iamVjdCBTeW1ib2xdIixVS2U9IltvYmplY3QgV2Vha01hcF0iLHFLZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLEdLZT0iW29iamVjdCBEYXRhVmlld10iLFdLZT0iW29iamVjdCBGbG9hdDMyQXJyYXldIixZS2U9IltvYmplY3QgRmxvYXQ2NEFycmF5XSIsaktlPSJbb2JqZWN0IEludDhBcnJheV0iLFhLZT0iW29iamVjdCBJbnQxNkFycmF5XSIsJEtlPSJbb2JqZWN0IEludDMyQXJyYXldIixLS2U9IltvYmplY3QgVWludDhBcnJheV0iLFpLZT0iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iLEpLZT0iW29iamVjdCBVaW50MTZBcnJheV0iLFFLZT0iW29iamVjdCBVaW50MzJBcnJheV0iLEFuPXt9O0FuW3d0ZV09QW5bTEtlXT1BbltxS2VdPUFuW0dLZV09QW5ba0tlXT1BbltSS2VdPUFuW1dLZV09QW5bWUtlXT1BbltqS2VdPUFuW1hLZV09QW5bJEtlXT1BbltPS2VdPUFuW3pLZV09QW5bTXRlXT1BbltGS2VdPUFuW0JLZV09QW5bSEtlXT1BbltWS2VdPUFuW0tLZV09QW5bWktlXT1BbltKS2VdPUFuW1FLZV09ITA7QW5bTktlXT1BbltTdGVdPUFuW1VLZV09ITE7ZnVuY3Rpb24gV0IoZSx0LHIsbixpLG8pe3ZhciBhLHM9dCZBS2UsbD10JlBLZSxjPXQmSUtlO2lmKHImJihhPWk/cihlLG4saSxvKTpyKGUpKSxhIT09dm9pZCAwKXJldHVybiBhO2lmKCFNS2UoZSkpcmV0dXJuIGU7dmFyIHU9YktlKGUpO2lmKHUpe2lmKGE9eUtlKGUpLCFzKXJldHVybiBmS2UoZSxhKX1lbHNle3ZhciBoPV9LZShlKSxmPWg9PVN0ZXx8aD09REtlO2lmKHdLZShlKSlyZXR1cm4gaEtlKGUscyk7aWYoaD09TXRlfHxoPT13dGV8fGYmJiFpKXtpZihhPWx8fGY/e306eEtlKGUpLCFzKXJldHVybiBsP2RLZShlLHVLZShhLGUpKTpwS2UoZSxjS2UoYSxlKSl9ZWxzZXtpZighQW5baF0pcmV0dXJuIGk/ZTp7fTthPXZLZShlLGgscyl9fW98fChvPW5ldyBhS2UpO3ZhciBwPW8uZ2V0KGUpO2lmKHApcmV0dXJuIHA7by5zZXQoZSxhKSxFS2UoZSk/ZS5mb3JFYWNoKGZ1bmN0aW9uKF8pe2EuYWRkKFdCKF8sdCxyLF8sZSxvKSl9KTpTS2UoZSkmJmUuZm9yRWFjaChmdW5jdGlvbihfLHkpe2Euc2V0KHksV0IoXyx0LHIseSxlLG8pKX0pO3ZhciBkPWM/bD9nS2U6bUtlOmw/Q0tlOlRLZSxnPXU/dm9pZCAwOmQoZSk7cmV0dXJuIHNLZShnfHxlLGZ1bmN0aW9uKF8seSl7ZyYmKHk9XyxfPWVbeV0pLGxLZShhLHksV0IoXyx0LHIseSxlLG8pKX0pLGF9RXRlLmV4cG9ydHM9V0J9KTt2YXIgQ3RlPUgoKFkkbixUdGUpPT57dmFyIHRaZT1Oc3QoKSxlWmU9NDtmdW5jdGlvbiByWmUoZSl7cmV0dXJuIHRaZShlLGVaZSl9VHRlLmV4cG9ydHM9clplfSk7dmFyIFlCPUgoKGokbixBdGUpPT57ZnVuY3Rpb24gblplKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1BdGUuZXhwb3J0cz1uWmV9KTt2YXIgSXRlPUgoKFgkbixQdGUpPT57ZnVuY3Rpb24gaVplKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7Zm9yKHZhciBpPS0xLG89T2JqZWN0KHQpLGE9bih0KSxzPWEubGVuZ3RoO3MtLTspe3ZhciBsPWFbZT9zOisraV07aWYocihvW2xdLGwsbyk9PT0hMSlicmVha31yZXR1cm4gdH19UHRlLmV4cG9ydHM9aVplfSk7dmFyIGpCPUgoKCQkbixMdGUpPT57dmFyIG9aZT1JdGUoKSxhWmU9b1plKCk7THRlLmV4cG9ydHM9YVplfSk7dmFyIFhCPUgoKEskbixrdGUpPT57dmFyIHNaZT1qQigpLGxaZT1BZCgpO2Z1bmN0aW9uIGNaZShlLHQpe3JldHVybiBlJiZzWmUoZSx0LGxaZSl9a3RlLmV4cG9ydHM9Y1plfSk7dmFyIE50ZT1IKChaJG4sUnRlKT0+e3ZhciB1WmU9QmYoKTtmdW5jdGlvbiBoWmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihyPT1udWxsKXJldHVybiByO2lmKCF1WmUocikpcmV0dXJuIGUocixuKTtmb3IodmFyIGk9ci5sZW5ndGgsbz10P2k6LTEsYT1PYmplY3Qocik7KHQ/by0tOisrbzxpKSYmbihhW29dLG8sYSkhPT0hMTspO3JldHVybiByfX1SdGUuZXhwb3J0cz1oWmV9KTt2YXIgQjQ9SCgoSiRuLER0ZSk9Pnt2YXIgZlplPVhCKCkscFplPU50ZSgpLGRaZT1wWmUoZlplKTtEdGUuZXhwb3J0cz1kWmV9KTt2YXIgdTA9SCgoUSRuLE90ZSk9PntmdW5jdGlvbiBtWmUoZSl7cmV0dXJuIGV9T3RlLmV4cG9ydHM9bVplfSk7dmFyIERzdD1IKCh0S24senRlKT0+e3ZhciBnWmU9dTAoKTtmdW5jdGlvbiBfWmUoZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6Z1plfXp0ZS5leHBvcnRzPV9aZX0pO3ZhciBPc3Q9SCgoZUtuLEZ0ZSk9Pnt2YXIgeVplPUZCKCksdlplPUI0KCkseFplPURzdCgpLGJaZT1UaSgpO2Z1bmN0aW9uIHdaZShlLHQpe3ZhciByPWJaZShlKT95WmU6dlplO3JldHVybiByKGUseFplKHQpKX1GdGUuZXhwb3J0cz13WmV9KTt2YXIgenN0PUgoKHJLbixCdGUpPT57QnRlLmV4cG9ydHM9T3N0KCl9KTt2YXIgVnRlPUgoKG5LbixIdGUpPT57dmFyIFNaZT1CNCgpO2Z1bmN0aW9uIE1aZShlLHQpe3ZhciByPVtdO3JldHVybiBTWmUoZSxmdW5jdGlvbihuLGksbyl7dChuLGksbykmJnIucHVzaChuKX0pLHJ9SHRlLmV4cG9ydHM9TVplfSk7dmFyIHF0ZT1IKChpS24sVXRlKT0+e3ZhciBFWmU9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iO2Z1bmN0aW9uIFRaZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5zZXQoZSxFWmUpLHRoaXN9VXRlLmV4cG9ydHM9VFplfSk7dmFyIFd0ZT1IKChvS24sR3RlKT0+e2Z1bmN0aW9uIENaZShlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9R3RlLmV4cG9ydHM9Q1plfSk7dmFyIEZzdD1IKChhS24sWXRlKT0+e3ZhciBBWmU9ekIoKSxQWmU9cXRlKCksSVplPVd0ZSgpO2Z1bmN0aW9uICRCKGUpe3ZhciB0PS0xLHI9ZT09bnVsbD8wOmUubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBBWmU7Kyt0PHI7KXRoaXMuYWRkKGVbdF0pfSRCLnByb3RvdHlwZS5hZGQ9JEIucHJvdG90eXBlLnB1c2g9UFplOyRCLnByb3RvdHlwZS5oYXM9SVplO1l0ZS5leHBvcnRzPSRCfSk7dmFyIFh0ZT1IKChzS24sanRlKT0+e2Z1bmN0aW9uIExaZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aDsrK3I8bjspaWYodChlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9anRlLmV4cG9ydHM9TFplfSk7dmFyIEJzdD1IKChsS24sJHRlKT0+e2Z1bmN0aW9uIGtaZShlLHQpe3JldHVybiBlLmhhcyh0KX0kdGUuZXhwb3J0cz1rWmV9KTt2YXIgSHN0PUgoKGNLbixLdGUpPT57dmFyIFJaZT1Gc3QoKSxOWmU9WHRlKCksRFplPUJzdCgpLE9aZT0xLHpaZT0yO2Z1bmN0aW9uIEZaZShlLHQscixuLGksbyl7dmFyIGE9ciZPWmUscz1lLmxlbmd0aCxsPXQubGVuZ3RoO2lmKHMhPWwmJiEoYSYmbD5zKSlyZXR1cm4hMTt2YXIgYz1vLmdldChlKSx1PW8uZ2V0KHQpO2lmKGMmJnUpcmV0dXJuIGM9PXQmJnU9PWU7dmFyIGg9LTEsZj0hMCxwPXImelplP25ldyBSWmU6dm9pZCAwO2ZvcihvLnNldChlLHQpLG8uc2V0KHQsZSk7KytoPHM7KXt2YXIgZD1lW2hdLGc9dFtoXTtpZihuKXZhciBfPWE/bihnLGQsaCx0LGUsbyk6bihkLGcsaCxlLHQsbyk7aWYoXyE9PXZvaWQgMCl7aWYoXyljb250aW51ZTtmPSExO2JyZWFrfWlmKHApe2lmKCFOWmUodCxmdW5jdGlvbih5LHgpe2lmKCFEWmUocCx4KSYmKGQ9PT15fHxpKGQseSxyLG4sbykpKXJldHVybiBwLnB1c2goeCl9KSl7Zj0hMTticmVha319ZWxzZSBpZighKGQ9PT1nfHxpKGQsZyxyLG4sbykpKXtmPSExO2JyZWFrfX1yZXR1cm4gby5kZWxldGUoZSksby5kZWxldGUodCksZn1LdGUuZXhwb3J0cz1GWmV9KTt2YXIgSnRlPUgoKHVLbixadGUpPT57ZnVuY3Rpb24gQlplKGUpe3ZhciB0PS0xLHI9QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7clsrK3RdPVtpLG5dfSkscn1adGUuZXhwb3J0cz1CWmV9KTt2YXIgS0I9SCgoaEtuLFF0ZSk9PntmdW5jdGlvbiBIWmUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24obil7clsrK3RdPW59KSxyfVF0ZS5leHBvcnRzPUhaZX0pO3ZhciBpZWU9SCgoZktuLG5lZSk9Pnt2YXIgdGVlPWoxKCksZWVlPUlzdCgpLFZaZT1ZMSgpLFVaZT1Ic3QoKSxxWmU9SnRlKCksR1plPUtCKCksV1plPTEsWVplPTIsalplPSJbb2JqZWN0IEJvb2xlYW5dIixYWmU9IltvYmplY3QgRGF0ZV0iLCRaZT0iW29iamVjdCBFcnJvcl0iLEtaZT0iW29iamVjdCBNYXBdIixaWmU9IltvYmplY3QgTnVtYmVyXSIsSlplPSJbb2JqZWN0IFJlZ0V4cF0iLFFaZT0iW29iamVjdCBTZXRdIix0SmU9IltvYmplY3QgU3RyaW5nXSIsZUplPSJbb2JqZWN0IFN5bWJvbF0iLHJKZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLG5KZT0iW29iamVjdCBEYXRhVmlld10iLHJlZT10ZWU/dGVlLnByb3RvdHlwZTp2b2lkIDAsVnN0PXJlZT9yZWUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gaUplKGUsdCxyLG4saSxvLGEpe3N3aXRjaChyKXtjYXNlIG5KZTppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2UgckplOnJldHVybiEoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fCFvKG5ldyBlZWUoZSksbmV3IGVlZSh0KSkpO2Nhc2UgalplOmNhc2UgWFplOmNhc2UgWlplOnJldHVybiBWWmUoK2UsK3QpO2Nhc2UgJFplOnJldHVybiBlLm5hbWU9PXQubmFtZSYmZS5tZXNzYWdlPT10Lm1lc3NhZ2U7Y2FzZSBKWmU6Y2FzZSB0SmU6cmV0dXJuIGU9PXQrIiI7Y2FzZSBLWmU6dmFyIHM9cVplO2Nhc2UgUVplOnZhciBsPW4mV1plO2lmKHN8fChzPUdaZSksZS5zaXplIT10LnNpemUmJiFsKXJldHVybiExO3ZhciBjPWEuZ2V0KGUpO2lmKGMpcmV0dXJuIGM9PXQ7bnw9WVplLGEuc2V0KGUsdCk7dmFyIHU9VVplKHMoZSkscyh0KSxuLGksbyxhKTtyZXR1cm4gYS5kZWxldGUoZSksdTtjYXNlIGVKZTppZihWc3QpcmV0dXJuIFZzdC5jYWxsKGUpPT1Wc3QuY2FsbCh0KX1yZXR1cm4hMX1uZWUuZXhwb3J0cz1pSmV9KTt2YXIgc2VlPUgoKHBLbixhZWUpPT57dmFyIG9lZT1Tc3QoKSxvSmU9MSxhSmU9T2JqZWN0LnByb3RvdHlwZSxzSmU9YUplLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGxKZShlLHQscixuLGksbyl7dmFyIGE9ciZvSmUscz1vZWUoZSksbD1zLmxlbmd0aCxjPW9lZSh0KSx1PWMubGVuZ3RoO2lmKGwhPXUmJiFhKXJldHVybiExO2Zvcih2YXIgaD1sO2gtLTspe3ZhciBmPXNbaF07aWYoIShhP2YgaW4gdDpzSmUuY2FsbCh0LGYpKSlyZXR1cm4hMX12YXIgcD1vLmdldChlKSxkPW8uZ2V0KHQpO2lmKHAmJmQpcmV0dXJuIHA9PXQmJmQ9PWU7dmFyIGc9ITA7by5zZXQoZSx0KSxvLnNldCh0LGUpO2Zvcih2YXIgXz1hOysraDxsOyl7Zj1zW2hdO3ZhciB5PWVbZl0seD10W2ZdO2lmKG4pdmFyIGI9YT9uKHgseSxmLHQsZSxvKTpuKHkseCxmLGUsdCxvKTtpZighKGI9PT12b2lkIDA/eT09PXh8fGkoeSx4LHIsbixvKTpiKSl7Zz0hMTticmVha31ffHwoXz1mPT0iY29uc3RydWN0b3IiKX1pZihnJiYhXyl7dmFyIFM9ZS5jb25zdHJ1Y3RvcixDPXQuY29uc3RydWN0b3I7UyE9QyYmImNvbnN0cnVjdG9yImluIGUmJiJjb25zdHJ1Y3RvciJpbiB0JiYhKHR5cGVvZiBTPT0iZnVuY3Rpb24iJiZTIGluc3RhbmNlb2YgUyYmdHlwZW9mIEM9PSJmdW5jdGlvbiImJkMgaW5zdGFuY2VvZiBDKSYmKGc9ITEpfXJldHVybiBvLmRlbGV0ZShlKSxvLmRlbGV0ZSh0KSxnfWFlZS5leHBvcnRzPWxKZX0pO3ZhciBtZWU9SCgoZEtuLGRlZSk9Pnt2YXIgVXN0PUE0KCksY0plPUhzdCgpLHVKZT1pZWUoKSxoSmU9c2VlKCksbGVlPUsxKCksY2VlPVRpKCksdWVlPVgxKCksZkplPVlTKCkscEplPTEsaGVlPSJbb2JqZWN0IEFyZ3VtZW50c10iLGZlZT0iW29iamVjdCBBcnJheV0iLFpCPSJbb2JqZWN0IE9iamVjdF0iLGRKZT1PYmplY3QucHJvdG90eXBlLHBlZT1kSmUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbUplKGUsdCxyLG4saSxvKXt2YXIgYT1jZWUoZSkscz1jZWUodCksbD1hP2ZlZTpsZWUoZSksYz1zP2ZlZTpsZWUodCk7bD1sPT1oZWU/WkI6bCxjPWM9PWhlZT9aQjpjO3ZhciB1PWw9PVpCLGg9Yz09WkIsZj1sPT1jO2lmKGYmJnVlZShlKSl7aWYoIXVlZSh0KSlyZXR1cm4hMTthPSEwLHU9ITF9aWYoZiYmIXUpcmV0dXJuIG98fChvPW5ldyBVc3QpLGF8fGZKZShlKT9jSmUoZSx0LHIsbixpLG8pOnVKZShlLHQsbCxyLG4saSxvKTtpZighKHImcEplKSl7dmFyIHA9dSYmcGVlLmNhbGwoZSwiX193cmFwcGVkX18iKSxkPWgmJnBlZS5jYWxsKHQsIl9fd3JhcHBlZF9fIik7aWYocHx8ZCl7dmFyIGc9cD9lLnZhbHVlKCk6ZSxfPWQ/dC52YWx1ZSgpOnQ7cmV0dXJuIG98fChvPW5ldyBVc3QpLGkoZyxfLHIsbixvKX19cmV0dXJuIGY/KG98fChvPW5ldyBVc3QpLGhKZShlLHQscixuLGksbykpOiExfWRlZS5leHBvcnRzPW1KZX0pO3ZhciBxc3Q9SCgobUtuLHllZSk9Pnt2YXIgZ0plPW1lZSgpLGdlZT1ZdSgpO2Z1bmN0aW9uIF9lZShlLHQscixuLGkpe3JldHVybiBlPT09dD8hMDplPT1udWxsfHx0PT1udWxsfHwhZ2VlKGUpJiYhZ2VlKHQpP2UhPT1lJiZ0IT09dDpnSmUoZSx0LHIsbixfZWUsaSl9eWVlLmV4cG9ydHM9X2VlfSk7dmFyIHhlZT1IKChnS24sdmVlKT0+e3ZhciBfSmU9QTQoKSx5SmU9cXN0KCksdkplPTEseEplPTI7ZnVuY3Rpb24gYkplKGUsdCxyLG4pe3ZhciBpPXIubGVuZ3RoLG89aSxhPSFuO2lmKGU9PW51bGwpcmV0dXJuIW87Zm9yKGU9T2JqZWN0KGUpO2ktLTspe3ZhciBzPXJbaV07aWYoYSYmc1syXT9zWzFdIT09ZVtzWzBdXTohKHNbMF1pbiBlKSlyZXR1cm4hMX1mb3IoOysraTxvOyl7cz1yW2ldO3ZhciBsPXNbMF0sYz1lW2xdLHU9c1sxXTtpZihhJiZzWzJdKXtpZihjPT09dm9pZCAwJiYhKGwgaW4gZSkpcmV0dXJuITF9ZWxzZXt2YXIgaD1uZXcgX0plO2lmKG4pdmFyIGY9bihjLHUsbCxlLHQsaCk7aWYoIShmPT09dm9pZCAwP3lKZSh1LGMsdkplfHhKZSxuLGgpOmYpKXJldHVybiExfX1yZXR1cm4hMH12ZWUuZXhwb3J0cz1iSmV9KTt2YXIgR3N0PUgoKF9LbixiZWUpPT57dmFyIHdKZT1NbCgpO2Z1bmN0aW9uIFNKZShlKXtyZXR1cm4gZT09PWUmJiF3SmUoZSl9YmVlLmV4cG9ydHM9U0plfSk7dmFyIFNlZT1IKCh5S24sd2VlKT0+e3ZhciBNSmU9R3N0KCksRUplPUFkKCk7ZnVuY3Rpb24gVEplKGUpe2Zvcih2YXIgdD1FSmUoZSkscj10Lmxlbmd0aDtyLS07KXt2YXIgbj10W3JdLGk9ZVtuXTt0W3JdPVtuLGksTUplKGkpXX1yZXR1cm4gdH13ZWUuZXhwb3J0cz1USmV9KTt2YXIgV3N0PUgoKHZLbixNZWUpPT57ZnVuY3Rpb24gQ0plKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPT1udWxsPyExOnJbZV09PT10JiYodCE9PXZvaWQgMHx8ZSBpbiBPYmplY3QocikpfX1NZWUuZXhwb3J0cz1DSmV9KTt2YXIgVGVlPUgoKHhLbixFZWUpPT57dmFyIEFKZT14ZWUoKSxQSmU9U2VlKCksSUplPVdzdCgpO2Z1bmN0aW9uIExKZShlKXt2YXIgdD1QSmUoZSk7cmV0dXJuIHQubGVuZ3RoPT0xJiZ0WzBdWzJdP0lKZSh0WzBdWzBdLHRbMF1bMV0pOmZ1bmN0aW9uKHIpe3JldHVybiByPT09ZXx8QUplKHIsZSx0KX19RWVlLmV4cG9ydHM9TEplfSk7dmFyIFoxPUgoKGJLbixDZWUpPT57dmFyIGtKZT1zMCgpLFJKZT1ZdSgpLE5KZT0iW29iamVjdCBTeW1ib2xdIjtmdW5jdGlvbiBESmUoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3ltYm9sInx8UkplKGUpJiZrSmUoZSk9PU5KZX1DZWUuZXhwb3J0cz1ESmV9KTt2YXIgSkI9SCgod0tuLEFlZSk9Pnt2YXIgT0plPVRpKCksekplPVoxKCksRkplPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLEJKZT0vXlx3KiQvO2Z1bmN0aW9uIEhKZShlLHQpe2lmKE9KZShlKSlyZXR1cm4hMTt2YXIgcj10eXBlb2YgZTtyZXR1cm4gcj09Im51bWJlciJ8fHI9PSJzeW1ib2wifHxyPT0iYm9vbGVhbiJ8fGU9PW51bGx8fHpKZShlKT8hMDpCSmUudGVzdChlKXx8IUZKZS50ZXN0KGUpfHx0IT1udWxsJiZlIGluIE9iamVjdCh0KX1BZWUuZXhwb3J0cz1ISmV9KTt2YXIgTGVlPUgoKFNLbixJZWUpPT57dmFyIFBlZT16QigpLFZKZT0iRXhwZWN0ZWQgYSBmdW5jdGlvbiI7ZnVuY3Rpb24gWXN0KGUsdCl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiJ8fHQhPW51bGwmJnR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoVkplKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPXQ/dC5hcHBseSh0aGlzLG4pOm5bMF0sbz1yLmNhY2hlO2lmKG8uaGFzKGkpKXJldHVybiBvLmdldChpKTt2YXIgYT1lLmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9by5zZXQoaSxhKXx8byxhfTtyZXR1cm4gci5jYWNoZT1uZXcoWXN0LkNhY2hlfHxQZWUpLHJ9WXN0LkNhY2hlPVBlZTtJZWUuZXhwb3J0cz1Zc3R9KTt2YXIgUmVlPUgoKE1LbixrZWUpPT57dmFyIFVKZT1MZWUoKSxxSmU9NTAwO2Z1bmN0aW9uIEdKZShlKXt2YXIgdD1VSmUoZSxmdW5jdGlvbihuKXtyZXR1cm4gci5zaXplPT09cUplJiZyLmNsZWFyKCksbn0pLHI9dC5jYWNoZTtyZXR1cm4gdH1rZWUuZXhwb3J0cz1HSmV9KTt2YXIgRGVlPUgoKEVLbixOZWUpPT57dmFyIFdKZT1SZWUoKSxZSmU9L1teLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JCkpL2csakplPS9cXChcXCk/L2csWEplPVdKZShmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09NDYmJnQucHVzaCgiIiksZS5yZXBsYWNlKFlKZSxmdW5jdGlvbihyLG4saSxvKXt0LnB1c2goaT9vLnJlcGxhY2UoakplLCIkMSIpOm58fHIpfSksdH0pO05lZS5leHBvcnRzPVhKZX0pO3ZhciBIND1IKChUS24sT2VlKT0+e2Z1bmN0aW9uICRKZShlLHQpe2Zvcih2YXIgcj0tMSxuPWU9PW51bGw/MDplLmxlbmd0aCxpPUFycmF5KG4pOysrcjxuOylpW3JdPXQoZVtyXSxyLGUpO3JldHVybiBpfU9lZS5leHBvcnRzPSRKZX0pO3ZhciBVZWU9SCgoQ0tuLFZlZSk9Pnt2YXIgemVlPWoxKCksS0plPUg0KCksWkplPVRpKCksSkplPVoxKCksUUplPTEvMCxGZWU9emVlP3plZS5wcm90b3R5cGU6dm9pZCAwLEJlZT1GZWU/RmVlLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBIZWUoZSl7aWYodHlwZW9mIGU9PSJzdHJpbmciKXJldHVybiBlO2lmKFpKZShlKSlyZXR1cm4gS0plKGUsSGVlKSsiIjtpZihKSmUoZSkpcmV0dXJuIEJlZT9CZWUuY2FsbChlKToiIjt2YXIgdD1lKyIiO3JldHVybiB0PT0iMCImJjEvZT09LVFKZT8iLTAiOnR9VmVlLmV4cG9ydHM9SGVlfSk7dmFyIGpzdD1IKChBS24scWVlKT0+e3ZhciB0UWU9VWVlKCk7ZnVuY3Rpb24gZVFlKGUpe3JldHVybiBlPT1udWxsPyIiOnRRZShlKX1xZWUuZXhwb3J0cz1lUWV9KTt2YXIgVjQ9SCgoUEtuLEdlZSk9Pnt2YXIgclFlPVRpKCksblFlPUpCKCksaVFlPURlZSgpLG9RZT1qc3QoKTtmdW5jdGlvbiBhUWUoZSx0KXtyZXR1cm4gclFlKGUpP2U6blFlKGUsdCk/W2VdOmlRZShvUWUoZSkpfUdlZS5leHBvcnRzPWFRZX0pO3ZhciAkUz1IKChJS24sV2VlKT0+e3ZhciBzUWU9WjEoKSxsUWU9MS8wO2Z1bmN0aW9uIGNRZShlKXtpZih0eXBlb2YgZT09InN0cmluZyJ8fHNRZShlKSlyZXR1cm4gZTt2YXIgdD1lKyIiO3JldHVybiB0PT0iMCImJjEvZT09LWxRZT8iLTAiOnR9V2VlLmV4cG9ydHM9Y1FlfSk7dmFyIFU0PUgoKExLbixZZWUpPT57dmFyIHVRZT1WNCgpLGhRZT0kUygpO2Z1bmN0aW9uIGZRZShlLHQpe3Q9dVFlKHQsZSk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtlIT1udWxsJiZyPG47KWU9ZVtoUWUodFtyKytdKV07cmV0dXJuIHImJnI9PW4/ZTp2b2lkIDB9WWVlLmV4cG9ydHM9ZlFlfSk7dmFyIFhlZT1IKChrS24samVlKT0+e3ZhciBwUWU9VTQoKTtmdW5jdGlvbiBkUWUoZSx0LHIpe3ZhciBuPWU9PW51bGw/dm9pZCAwOnBRZShlLHQpO3JldHVybiBuPT09dm9pZCAwP3I6bn1qZWUuZXhwb3J0cz1kUWV9KTt2YXIgS2VlPUgoKFJLbiwkZWUpPT57ZnVuY3Rpb24gbVFlKGUsdCl7cmV0dXJuIGUhPW51bGwmJnQgaW4gT2JqZWN0KGUpfSRlZS5leHBvcnRzPW1RZX0pO3ZhciBYc3Q9SCgoTktuLFplZSk9Pnt2YXIgZ1FlPVY0KCksX1FlPXFTKCkseVFlPVRpKCksdlFlPWs0KCkseFFlPUJCKCksYlFlPSRTKCk7ZnVuY3Rpb24gd1FlKGUsdCxyKXt0PWdRZSh0LGUpO2Zvcih2YXIgbj0tMSxpPXQubGVuZ3RoLG89ITE7KytuPGk7KXt2YXIgYT1iUWUodFtuXSk7aWYoIShvPWUhPW51bGwmJnIoZSxhKSkpYnJlYWs7ZT1lW2FdfXJldHVybiBvfHwrK24hPWk/bzooaT1lPT1udWxsPzA6ZS5sZW5ndGgsISFpJiZ4UWUoaSkmJnZRZShhLGkpJiYoeVFlKGUpfHxfUWUoZSkpKX1aZWUuZXhwb3J0cz13UWV9KTt2YXIgJHN0PUgoKERLbixKZWUpPT57dmFyIFNRZT1LZWUoKSxNUWU9WHN0KCk7ZnVuY3Rpb24gRVFlKGUsdCl7cmV0dXJuIGUhPW51bGwmJk1RZShlLHQsU1FlKX1KZWUuZXhwb3J0cz1FUWV9KTt2YXIgdHJlPUgoKE9LbixRZWUpPT57dmFyIFRRZT1xc3QoKSxDUWU9WGVlKCksQVFlPSRzdCgpLFBRZT1KQigpLElRZT1Hc3QoKSxMUWU9V3N0KCksa1FlPSRTKCksUlFlPTEsTlFlPTI7ZnVuY3Rpb24gRFFlKGUsdCl7cmV0dXJuIFBRZShlKSYmSVFlKHQpP0xRZShrUWUoZSksdCk6ZnVuY3Rpb24ocil7dmFyIG49Q1FlKHIsZSk7cmV0dXJuIG49PT12b2lkIDAmJm49PT10P0FRZShyLGUpOlRRZSh0LG4sUlFlfE5RZSl9fVFlZS5leHBvcnRzPURRZX0pO3ZhciBLc3Q9SCgoektuLGVyZSk9PntmdW5jdGlvbiBPUWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PT1udWxsP3ZvaWQgMDp0W2VdfX1lcmUuZXhwb3J0cz1PUWV9KTt2YXIgbnJlPUgoKEZLbixycmUpPT57dmFyIHpRZT1VNCgpO2Z1bmN0aW9uIEZRZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHpRZSh0LGUpfX1ycmUuZXhwb3J0cz1GUWV9KTt2YXIgb3JlPUgoKEJLbixpcmUpPT57dmFyIEJRZT1Lc3QoKSxIUWU9bnJlKCksVlFlPUpCKCksVVFlPSRTKCk7ZnVuY3Rpb24gcVFlKGUpe3JldHVybiBWUWUoZSk/QlFlKFVRZShlKSk6SFFlKGUpfWlyZS5leHBvcnRzPXFRZX0pO3ZhciBIZj1IKChIS24sYXJlKT0+e3ZhciBHUWU9VGVlKCksV1FlPXRyZSgpLFlRZT11MCgpLGpRZT1UaSgpLFhRZT1vcmUoKTtmdW5jdGlvbiAkUWUoZSl7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6ZT09bnVsbD9ZUWU6dHlwZW9mIGU9PSJvYmplY3QiP2pRZShlKT9XUWUoZVswXSxlWzFdKTpHUWUoZSk6WFFlKGUpfWFyZS5leHBvcnRzPSRRZX0pO3ZhciBac3Q9SCgoVktuLHNyZSk9Pnt2YXIgS1FlPXZzdCgpLFpRZT1WdGUoKSxKUWU9SGYoKSxRUWU9VGkoKTtmdW5jdGlvbiB0dHIoZSx0KXt2YXIgcj1RUWUoZSk/S1FlOlpRZTtyZXR1cm4gcihlLEpRZSh0LDMpKX1zcmUuZXhwb3J0cz10dHJ9KTt2YXIgY3JlPUgoKFVLbixscmUpPT57dmFyIGV0cj1PYmplY3QucHJvdG90eXBlLHJ0cj1ldHIuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbnRyKGUsdCl7cmV0dXJuIGUhPW51bGwmJnJ0ci5jYWxsKGUsdCl9bHJlLmV4cG9ydHM9bnRyfSk7dmFyIEpzdD1IKChxS24sdXJlKT0+e3ZhciBpdHI9Y3JlKCksb3RyPVhzdCgpO2Z1bmN0aW9uIGF0cihlLHQpe3JldHVybiBlIT1udWxsJiZvdHIoZSx0LGl0cil9dXJlLmV4cG9ydHM9YXRyfSk7dmFyIGZyZT1IKChHS24saHJlKT0+e3ZhciBzdHI9VkIoKSxsdHI9SzEoKSxjdHI9cVMoKSx1dHI9VGkoKSxodHI9QmYoKSxmdHI9WDEoKSxwdHI9TzQoKSxkdHI9WVMoKSxtdHI9IltvYmplY3QgTWFwXSIsZ3RyPSJbb2JqZWN0IFNldF0iLF90cj1PYmplY3QucHJvdG90eXBlLHl0cj1fdHIuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gdnRyKGUpe2lmKGU9PW51bGwpcmV0dXJuITA7aWYoaHRyKGUpJiYodXRyKGUpfHx0eXBlb2YgZT09InN0cmluZyJ8fHR5cGVvZiBlLnNwbGljZT09ImZ1bmN0aW9uInx8ZnRyKGUpfHxkdHIoZSl8fGN0cihlKSkpcmV0dXJuIWUubGVuZ3RoO3ZhciB0PWx0cihlKTtpZih0PT1tdHJ8fHQ9PWd0cilyZXR1cm4hZS5zaXplO2lmKHB0cihlKSlyZXR1cm4hc3RyKGUpLmxlbmd0aDtmb3IodmFyIHIgaW4gZSlpZih5dHIuY2FsbChlLHIpKXJldHVybiExO3JldHVybiEwfWhyZS5leHBvcnRzPXZ0cn0pO3ZhciBRc3Q9SCgoV0tuLHByZSk9PntmdW5jdGlvbiB4dHIoZSl7cmV0dXJuIGU9PT12b2lkIDB9cHJlLmV4cG9ydHM9eHRyfSk7dmFyIHRsdD1IKChZS24sZHJlKT0+e3ZhciBidHI9QjQoKSx3dHI9QmYoKTtmdW5jdGlvbiBTdHIoZSx0KXt2YXIgcj0tMSxuPXd0cihlKT9BcnJheShlLmxlbmd0aCk6W107cmV0dXJuIGJ0cihlLGZ1bmN0aW9uKGksbyxhKXtuWysrcl09dChpLG8sYSl9KSxufWRyZS5leHBvcnRzPVN0cn0pO3ZhciBlbHQ9SCgoaktuLG1yZSk9Pnt2YXIgTXRyPUg0KCksRXRyPUhmKCksVHRyPXRsdCgpLEN0cj1UaSgpO2Z1bmN0aW9uIEF0cihlLHQpe3ZhciByPUN0cihlKT9NdHI6VHRyO3JldHVybiByKGUsRXRyKHQsMykpfW1yZS5leHBvcnRzPUF0cn0pO3ZhciBfcmU9SCgoWEtuLGdyZSk9PntmdW5jdGlvbiBQdHIoZSx0LHIsbil7dmFyIGk9LTEsbz1lPT1udWxsPzA6ZS5sZW5ndGg7Zm9yKG4mJm8mJihyPWVbKytpXSk7KytpPG87KXI9dChyLGVbaV0saSxlKTtyZXR1cm4gcn1ncmUuZXhwb3J0cz1QdHJ9KTt2YXIgdnJlPUgoKCRLbix5cmUpPT57ZnVuY3Rpb24gSXRyKGUsdCxyLG4saSl7cmV0dXJuIGkoZSxmdW5jdGlvbihvLGEscyl7cj1uPyhuPSExLG8pOnQocixvLGEscyl9KSxyfXlyZS5leHBvcnRzPUl0cn0pO3ZhciBybHQ9SCgoS0tuLHhyZSk9Pnt2YXIgTHRyPV9yZSgpLGt0cj1CNCgpLFJ0cj1IZigpLE50cj12cmUoKSxEdHI9VGkoKTtmdW5jdGlvbiBPdHIoZSx0LHIpe3ZhciBuPUR0cihlKT9MdHI6TnRyLGk9YXJndW1lbnRzLmxlbmd0aDwzO3JldHVybiBuKGUsUnRyKHQsNCkscixpLGt0cil9eHJlLmV4cG9ydHM9T3RyfSk7dmFyIHdyZT1IKChaS24sYnJlKT0+e3ZhciB6dHI9czAoKSxGdHI9VGkoKSxCdHI9WXUoKSxIdHI9IltvYmplY3QgU3RyaW5nXSI7ZnVuY3Rpb24gVnRyKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyJ8fCFGdHIoZSkmJkJ0cihlKSYmenRyKGUpPT1IdHJ9YnJlLmV4cG9ydHM9VnRyfSk7dmFyIE1yZT1IKChKS24sU3JlKT0+e3ZhciBVdHI9S3N0KCkscXRyPVV0cigibGVuZ3RoIik7U3JlLmV4cG9ydHM9cXRyfSk7dmFyIFRyZT1IKChRS24sRXJlKT0+e3ZhciBHdHI9IlxcdWQ4MDAtXFx1ZGZmZiIsV3RyPSJcXHUwMzAwLVxcdTAzNmYiLFl0cj0iXFx1ZmUyMC1cXHVmZTJmIixqdHI9IlxcdTIwZDAtXFx1MjBmZiIsWHRyPVd0citZdHIranRyLCR0cj0iXFx1ZmUwZVxcdWZlMGYiLEt0cj0iXFx1MjAwZCIsWnRyPVJlZ0V4cCgiWyIrS3RyK0d0citYdHIrJHRyKyJdIik7ZnVuY3Rpb24gSnRyKGUpe3JldHVybiBadHIudGVzdChlKX1FcmUuZXhwb3J0cz1KdHJ9KTt2YXIgRHJlPUgoKHRabixOcmUpPT57dmFyIEFyZT0iXFx1ZDgwMC1cXHVkZmZmIixRdHI9IlxcdTAzMDAtXFx1MDM2ZiIsdGVyPSJcXHVmZTIwLVxcdWZlMmYiLGVlcj0iXFx1MjBkMC1cXHUyMGZmIixyZXI9UXRyK3RlcitlZXIsbmVyPSJcXHVmZTBlXFx1ZmUwZiIsaWVyPSJbIitBcmUrIl0iLG5sdD0iWyIrcmVyKyJdIixpbHQ9IlxcdWQ4M2NbXFx1ZGZmYi1cXHVkZmZmXSIsb2VyPSIoPzoiK25sdCsifCIraWx0KyIpIixQcmU9IlteIitBcmUrIl0iLElyZT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsTHJlPSJbXFx1ZDgwMC1cXHVkYmZmXVtcXHVkYzAwLVxcdWRmZmZdIixhZXI9IlxcdTIwMGQiLGtyZT1vZXIrIj8iLFJyZT0iWyIrbmVyKyJdPyIsc2VyPSIoPzoiK2FlcisiKD86IitbUHJlLElyZSxMcmVdLmpvaW4oInwiKSsiKSIrUnJlK2tyZSsiKSoiLGxlcj1ScmUra3JlK3NlcixjZXI9Iig/OiIrW1ByZStubHQrIj8iLG5sdCxJcmUsTHJlLGllcl0uam9pbigifCIpKyIpIixDcmU9UmVnRXhwKGlsdCsiKD89IitpbHQrIil8IitjZXIrbGVyLCJnIik7ZnVuY3Rpb24gdWVyKGUpe2Zvcih2YXIgdD1DcmUubGFzdEluZGV4PTA7Q3JlLnRlc3QoZSk7KSsrdDtyZXR1cm4gdH1OcmUuZXhwb3J0cz11ZXJ9KTt2YXIgenJlPUgoKGVabixPcmUpPT57dmFyIGhlcj1NcmUoKSxmZXI9VHJlKCkscGVyPURyZSgpO2Z1bmN0aW9uIGRlcihlKXtyZXR1cm4gZmVyKGUpP3BlcihlKTpoZXIoZSl9T3JlLmV4cG9ydHM9ZGVyfSk7dmFyIEJyZT1IKChyWm4sRnJlKT0+e3ZhciBtZXI9VkIoKSxnZXI9SzEoKSxfZXI9QmYoKSx5ZXI9d3JlKCksdmVyPXpyZSgpLHhlcj0iW29iamVjdCBNYXBdIixiZXI9IltvYmplY3QgU2V0XSI7ZnVuY3Rpb24gd2VyKGUpe2lmKGU9PW51bGwpcmV0dXJuIDA7aWYoX2VyKGUpKXJldHVybiB5ZXIoZSk/dmVyKGUpOmUubGVuZ3RoO3ZhciB0PWdlcihlKTtyZXR1cm4gdD09eGVyfHx0PT1iZXI/ZS5zaXplOm1lcihlKS5sZW5ndGh9RnJlLmV4cG9ydHM9d2VyfSk7dmFyIFZyZT1IKChuWm4sSHJlKT0+e3ZhciBTZXI9RkIoKSxNZXI9a3N0KCksRWVyPVhCKCksVGVyPUhmKCksQ2VyPUY0KCksQWVyPVRpKCksUGVyPVgxKCksSWVyPUZTKCksTGVyPU1sKCksa2VyPVlTKCk7ZnVuY3Rpb24gUmVyKGUsdCxyKXt2YXIgbj1BZXIoZSksaT1ufHxQZXIoZSl8fGtlcihlKTtpZih0PVRlcih0LDQpLHI9PW51bGwpe3ZhciBvPWUmJmUuY29uc3RydWN0b3I7aT9yPW4/bmV3IG86W106TGVyKGUpP3I9SWVyKG8pP01lcihDZXIoZSkpOnt9OnI9e319cmV0dXJuKGk/U2VyOkVlcikoZSxmdW5jdGlvbihhLHMsbCl7cmV0dXJuIHQocixhLHMsbCl9KSxyfUhyZS5leHBvcnRzPVJlcn0pO3ZhciBXcmU9SCgoaVpuLEdyZSk9Pnt2YXIgVXJlPWoxKCksTmVyPXFTKCksRGVyPVRpKCkscXJlPVVyZT9VcmUuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDtmdW5jdGlvbiBPZXIoZSl7cmV0dXJuIERlcihlKXx8TmVyKGUpfHwhIShxcmUmJmUmJmVbcXJlXSl9R3JlLmV4cG9ydHM9T2VyfSk7dmFyIFFCPUgoKG9abixqcmUpPT57dmFyIHplcj1xQigpLEZlcj1XcmUoKTtmdW5jdGlvbiBZcmUoZSx0LHIsbixpKXt2YXIgbz0tMSxhPWUubGVuZ3RoO2ZvcihyfHwocj1GZXIpLGl8fChpPVtdKTsrK288YTspe3ZhciBzPWVbb107dD4wJiZyKHMpP3Q+MT9ZcmUocyx0LTEscixuLGkpOnplcihpLHMpOm58fChpW2kubGVuZ3RoXT1zKX1yZXR1cm4gaX1qcmUuZXhwb3J0cz1ZcmV9KTt2YXIgJHJlPUgoKGFabixYcmUpPT57ZnVuY3Rpb24gQmVyKGUsdCxyKXtzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZS5jYWxsKHQpO2Nhc2UgMTpyZXR1cm4gZS5jYWxsKHQsclswXSk7Y2FzZSAyOnJldHVybiBlLmNhbGwodCxyWzBdLHJbMV0pO2Nhc2UgMzpyZXR1cm4gZS5jYWxsKHQsclswXSxyWzFdLHJbMl0pfXJldHVybiBlLmFwcGx5KHQscil9WHJlLmV4cG9ydHM9QmVyfSk7dmFyIG9sdD1IKChzWm4sWnJlKT0+e3ZhciBIZXI9JHJlKCksS3JlPU1hdGgubWF4O2Z1bmN0aW9uIFZlcihlLHQscil7cmV0dXJuIHQ9S3JlKHQ9PT12b2lkIDA/ZS5sZW5ndGgtMTp0LDApLGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWFyZ3VtZW50cyxpPS0xLG89S3JlKG4ubGVuZ3RoLXQsMCksYT1BcnJheShvKTsrK2k8bzspYVtpXT1uW3QraV07aT0tMTtmb3IodmFyIHM9QXJyYXkodCsxKTsrK2k8dDspc1tpXT1uW2ldO3JldHVybiBzW3RdPXIoYSksSGVyKGUsdGhpcyxzKX19WnJlLmV4cG9ydHM9VmVyfSk7dmFyIHRuZT1IKChsWm4sUXJlKT0+e3ZhciBVZXI9WUIoKSxKcmU9cHN0KCkscWVyPXUwKCksR2VyPUpyZT9mdW5jdGlvbihlLHQpe3JldHVybiBKcmUoZSwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpVZXIodCksd3JpdGFibGU6ITB9KX06cWVyO1FyZS5leHBvcnRzPUdlcn0pO3ZhciBybmU9SCgoY1puLGVuZSk9Pnt2YXIgV2VyPTgwMCxZZXI9MTYsamVyPURhdGUubm93O2Z1bmN0aW9uIFhlcihlKXt2YXIgdD0wLHI9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1qZXIoKSxpPVllci0obi1yKTtpZihyPW4saT4wKXtpZigrK3Q+PVdlcilyZXR1cm4gYXJndW1lbnRzWzBdfWVsc2UgdD0wO3JldHVybiBlLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX1lbmUuZXhwb3J0cz1YZXJ9KTt2YXIgYWx0PUgoKHVabixubmUpPT57dmFyICRlcj10bmUoKSxLZXI9cm5lKCksWmVyPUtlcigkZXIpO25uZS5leHBvcnRzPVplcn0pO3ZhciBxND1IKChoWm4saW5lKT0+e3ZhciBKZXI9dTAoKSxRZXI9b2x0KCksdHJyPWFsdCgpO2Z1bmN0aW9uIGVycihlLHQpe3JldHVybiB0cnIoUWVyKGUsdCxKZXIpLGUrIiIpfWluZS5leHBvcnRzPWVycn0pO3ZhciBzbHQ9SCgoZlpuLG9uZSk9PntmdW5jdGlvbiBycnIoZSx0LHIsbil7Zm9yKHZhciBpPWUubGVuZ3RoLG89cisobj8xOi0xKTtuP28tLTorK288aTspaWYodChlW29dLG8sZSkpcmV0dXJuIG87cmV0dXJuLTF9b25lLmV4cG9ydHM9cnJyfSk7dmFyIHNuZT1IKChwWm4sYW5lKT0+e2Z1bmN0aW9uIG5ycihlKXtyZXR1cm4gZSE9PWV9YW5lLmV4cG9ydHM9bnJyfSk7dmFyIGNuZT1IKChkWm4sbG5lKT0+e2Z1bmN0aW9uIGlycihlLHQscil7Zm9yKHZhciBuPXItMSxpPWUubGVuZ3RoOysrbjxpOylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX1sbmUuZXhwb3J0cz1pcnJ9KTt2YXIgaG5lPUgoKG1abix1bmUpPT57dmFyIG9ycj1zbHQoKSxhcnI9c25lKCksc3JyPWNuZSgpO2Z1bmN0aW9uIGxycihlLHQscil7cmV0dXJuIHQ9PT10P3NycihlLHQscik6b3JyKGUsYXJyLHIpfXVuZS5leHBvcnRzPWxycn0pO3ZhciBwbmU9SCgoZ1puLGZuZSk9Pnt2YXIgY3JyPWhuZSgpO2Z1bmN0aW9uIHVycihlLHQpe3ZhciByPWU9PW51bGw/MDplLmxlbmd0aDtyZXR1cm4hIXImJmNycihlLHQsMCk+LTF9Zm5lLmV4cG9ydHM9dXJyfSk7dmFyIG1uZT1IKChfWm4sZG5lKT0+e2Z1bmN0aW9uIGhycihlLHQscil7Zm9yKHZhciBuPS0xLGk9ZT09bnVsbD8wOmUubGVuZ3RoOysrbjxpOylpZihyKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuITF9ZG5lLmV4cG9ydHM9aHJyfSk7dmFyIF9uZT1IKCh5Wm4sZ25lKT0+e2Z1bmN0aW9uIGZycigpe31nbmUuZXhwb3J0cz1mcnJ9KTt2YXIgdm5lPUgoKHZabix5bmUpPT57dmFyIGxsdD1Nc3QoKSxwcnI9X25lKCksZHJyPUtCKCksbXJyPTEvMCxncnI9bGx0JiYxL2RycihuZXcgbGx0KFssLTBdKSlbMV09PW1ycj9mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGxsdChlKX06cHJyO3luZS5leHBvcnRzPWdycn0pO3ZhciBibmU9SCgoeFpuLHhuZSk9Pnt2YXIgX3JyPUZzdCgpLHlycj1wbmUoKSx2cnI9bW5lKCkseHJyPUJzdCgpLGJycj12bmUoKSx3cnI9S0IoKSxTcnI9MjAwO2Z1bmN0aW9uIE1ycihlLHQscil7dmFyIG49LTEsaT15cnIsbz1lLmxlbmd0aCxhPSEwLHM9W10sbD1zO2lmKHIpYT0hMSxpPXZycjtlbHNlIGlmKG8+PVNycil7dmFyIGM9dD9udWxsOmJycihlKTtpZihjKXJldHVybiB3cnIoYyk7YT0hMSxpPXhycixsPW5ldyBfcnJ9ZWxzZSBsPXQ/W106czt0OmZvcig7KytuPG87KXt2YXIgdT1lW25dLGg9dD90KHUpOnU7aWYodT1yfHx1IT09MD91OjAsYSYmaD09PWgpe2Zvcih2YXIgZj1sLmxlbmd0aDtmLS07KWlmKGxbZl09PT1oKWNvbnRpbnVlIHQ7dCYmbC5wdXNoKGgpLHMucHVzaCh1KX1lbHNlIGkobCxoLHIpfHwobCE9PXMmJmwucHVzaChoKSxzLnB1c2godSkpfXJldHVybiBzfXhuZS5leHBvcnRzPU1ycn0pO3ZhciBjbHQ9SCgoYlpuLHduZSk9Pnt2YXIgRXJyPUJmKCksVHJyPVl1KCk7ZnVuY3Rpb24gQ3JyKGUpe3JldHVybiBUcnIoZSkmJkVycihlKX13bmUuZXhwb3J0cz1DcnJ9KTt2YXIgTW5lPUgoKHdabixTbmUpPT57dmFyIEFycj1RQigpLFBycj1xNCgpLElycj1ibmUoKSxMcnI9Y2x0KCksa3JyPVBycihmdW5jdGlvbihlKXtyZXR1cm4gSXJyKEFycihlLDEsTHJyLCEwKSl9KTtTbmUuZXhwb3J0cz1rcnJ9KTt2YXIgVG5lPUgoKFNabixFbmUpPT57dmFyIFJycj1INCgpO2Z1bmN0aW9uIE5ycihlLHQpe3JldHVybiBScnIodCxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfUVuZS5leHBvcnRzPU5ycn0pO3ZhciB1bHQ9SCgoTVpuLENuZSk9Pnt2YXIgRHJyPVRuZSgpLE9ycj1BZCgpO2Z1bmN0aW9uIHpycihlKXtyZXR1cm4gZT09bnVsbD9bXTpEcnIoZSxPcnIoZSkpfUNuZS5leHBvcnRzPXpycn0pO3ZhciBFbD1IKChFWm4sQW5lKT0+e3ZhciB0SDtpZih0eXBlb2YgRXg9PSJmdW5jdGlvbiIpdHJ5e3RIPXtjbG9uZTpDdGUoKSxjb25zdGFudDpZQigpLGVhY2g6enN0KCksZmlsdGVyOlpzdCgpLGhhczpKc3QoKSxpc0FycmF5OlRpKCksaXNFbXB0eTpmcmUoKSxpc0Z1bmN0aW9uOkZTKCksaXNVbmRlZmluZWQ6UXN0KCksa2V5czpBZCgpLG1hcDplbHQoKSxyZWR1Y2U6cmx0KCksc2l6ZTpCcmUoKSx0cmFuc2Zvcm06VnJlKCksdW5pb246TW5lKCksdmFsdWVzOnVsdCgpfX1jYXRjaChlKXt9dEh8fCh0SD13aW5kb3cuXyk7QW5lLmV4cG9ydHM9dEh9KTt2YXIgZUg9SCgoQ1puLGtuZSk9PnsidXNlIHN0cmljdCI7dmFyIGplPUVsKCk7a25lLmV4cG9ydHM9Y3I7dmFyIEZycj0iXDAiLEoxPSJcMCIsUG5lPSIBIjtmdW5jdGlvbiBjcihlKXt0aGlzLl9pc0RpcmVjdGVkPWplLmhhcyhlLCJkaXJlY3RlZCIpP2UuZGlyZWN0ZWQ6ITAsdGhpcy5faXNNdWx0aWdyYXBoPWplLmhhcyhlLCJtdWx0aWdyYXBoIik/ZS5tdWx0aWdyYXBoOiExLHRoaXMuX2lzQ29tcG91bmQ9amUuaGFzKGUsImNvbXBvdW5kIik/ZS5jb21wb3VuZDohMSx0aGlzLl9sYWJlbD12b2lkIDAsdGhpcy5fZGVmYXVsdE5vZGVMYWJlbEZuPWplLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuPWplLmNvbnN0YW50KHZvaWQgMCksdGhpcy5fbm9kZXM9e30sdGhpcy5faXNDb21wb3VuZCYmKHRoaXMuX3BhcmVudD17fSx0aGlzLl9jaGlsZHJlbj17fSx0aGlzLl9jaGlsZHJlbltKMV09e30pLHRoaXMuX2luPXt9LHRoaXMuX3ByZWRzPXt9LHRoaXMuX291dD17fSx0aGlzLl9zdWNzPXt9LHRoaXMuX2VkZ2VPYmpzPXt9LHRoaXMuX2VkZ2VMYWJlbHM9e319Y3IucHJvdG90eXBlLl9ub2RlQ291bnQ9MDtjci5wcm90b3R5cGUuX2VkZ2VDb3VudD0wO2NyLnByb3RvdHlwZS5pc0RpcmVjdGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzRGlyZWN0ZWR9O2NyLnByb3RvdHlwZS5pc011bHRpZ3JhcGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNNdWx0aWdyYXBofTtjci5wcm90b3R5cGUuaXNDb21wb3VuZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc0NvbXBvdW5kfTtjci5wcm90b3R5cGUuc2V0R3JhcGg9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2xhYmVsPWUsdGhpc307Y3IucHJvdG90eXBlLmdyYXBoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xhYmVsfTtjci5wcm90b3R5cGUuc2V0RGVmYXVsdE5vZGVMYWJlbD1mdW5jdGlvbihlKXtyZXR1cm4gamUuaXNGdW5jdGlvbihlKXx8KGU9amUuY29uc3RhbnQoZSkpLHRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbj1lLHRoaXN9O2NyLnByb3RvdHlwZS5ub2RlQ291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbm9kZUNvdW50fTtjci5wcm90b3R5cGUubm9kZXM9ZnVuY3Rpb24oKXtyZXR1cm4gamUua2V5cyh0aGlzLl9ub2Rlcyl9O2NyLnByb3RvdHlwZS5zb3VyY2VzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gamUuZmlsdGVyKHRoaXMubm9kZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gamUuaXNFbXB0eShlLl9pblt0XSl9KX07Y3IucHJvdG90eXBlLnNpbmtzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gamUuZmlsdGVyKHRoaXMubm9kZXMoKSxmdW5jdGlvbih0KXtyZXR1cm4gamUuaXNFbXB0eShlLl9vdXRbdF0pfSl9O2NyLnByb3RvdHlwZS5zZXROb2Rlcz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cyxuPXRoaXM7cmV0dXJuIGplLmVhY2goZSxmdW5jdGlvbihpKXtyLmxlbmd0aD4xP24uc2V0Tm9kZShpLHQpOm4uc2V0Tm9kZShpKX0pLHRoaXN9O2NyLnByb3RvdHlwZS5zZXROb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGplLmhhcyh0aGlzLl9ub2RlcyxlKT8oYXJndW1lbnRzLmxlbmd0aD4xJiYodGhpcy5fbm9kZXNbZV09dCksdGhpcyk6KHRoaXMuX25vZGVzW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT90OnRoaXMuX2RlZmF1bHROb2RlTGFiZWxGbihlKSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcGFyZW50W2VdPUoxLHRoaXMuX2NoaWxkcmVuW2VdPXt9LHRoaXMuX2NoaWxkcmVuW0oxXVtlXT0hMCksdGhpcy5faW5bZV09e30sdGhpcy5fcHJlZHNbZV09e30sdGhpcy5fb3V0W2VdPXt9LHRoaXMuX3N1Y3NbZV09e30sKyt0aGlzLl9ub2RlQ291bnQsdGhpcyl9O2NyLnByb3RvdHlwZS5ub2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9ub2Rlc1tlXX07Y3IucHJvdG90eXBlLmhhc05vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGplLmhhcyh0aGlzLl9ub2RlcyxlKX07Y3IucHJvdG90eXBlLnJlbW92ZU5vZGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihqZS5oYXModGhpcy5fbm9kZXMsZSkpe3ZhciByPWZ1bmN0aW9uKG4pe3QucmVtb3ZlRWRnZSh0Ll9lZGdlT2Jqc1tuXSl9O2RlbGV0ZSB0aGlzLl9ub2Rlc1tlXSx0aGlzLl9pc0NvbXBvdW5kJiYodGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoZSksZGVsZXRlIHRoaXMuX3BhcmVudFtlXSxqZS5lYWNoKHRoaXMuY2hpbGRyZW4oZSksZnVuY3Rpb24obil7dC5zZXRQYXJlbnQobil9KSxkZWxldGUgdGhpcy5fY2hpbGRyZW5bZV0pLGplLmVhY2goamUua2V5cyh0aGlzLl9pbltlXSksciksZGVsZXRlIHRoaXMuX2luW2VdLGRlbGV0ZSB0aGlzLl9wcmVkc1tlXSxqZS5lYWNoKGplLmtleXModGhpcy5fb3V0W2VdKSxyKSxkZWxldGUgdGhpcy5fb3V0W2VdLGRlbGV0ZSB0aGlzLl9zdWNzW2VdLC0tdGhpcy5fbm9kZUNvdW50fXJldHVybiB0aGlzfTtjci5wcm90b3R5cGUuc2V0UGFyZW50PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2lzQ29tcG91bmQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc2V0IHBhcmVudCBpbiBhIG5vbi1jb21wb3VuZCBncmFwaCIpO2lmKGplLmlzVW5kZWZpbmVkKHQpKXQ9SjE7ZWxzZXt0Kz0iIjtmb3IodmFyIHI9dDshamUuaXNVbmRlZmluZWQocik7cj10aGlzLnBhcmVudChyKSlpZihyPT09ZSl0aHJvdyBuZXcgRXJyb3IoIlNldHRpbmcgIit0KyIgYXMgcGFyZW50IG9mICIrZSsiIHdvdWxkIGNyZWF0ZSBhIGN5Y2xlIik7dGhpcy5zZXROb2RlKHQpfXJldHVybiB0aGlzLnNldE5vZGUoZSksdGhpcy5fcmVtb3ZlRnJvbVBhcmVudHNDaGlsZExpc3QoZSksdGhpcy5fcGFyZW50W2VdPXQsdGhpcy5fY2hpbGRyZW5bdF1bZV09ITAsdGhpc307Y3IucHJvdG90eXBlLl9yZW1vdmVGcm9tUGFyZW50c0NoaWxkTGlzdD1mdW5jdGlvbihlKXtkZWxldGUgdGhpcy5fY2hpbGRyZW5bdGhpcy5fcGFyZW50W2VdXVtlXX07Y3IucHJvdG90eXBlLnBhcmVudD1mdW5jdGlvbihlKXtpZih0aGlzLl9pc0NvbXBvdW5kKXt2YXIgdD10aGlzLl9wYXJlbnRbZV07aWYodCE9PUoxKXJldHVybiB0fX07Y3IucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKGUpe2lmKGplLmlzVW5kZWZpbmVkKGUpJiYoZT1KMSksdGhpcy5faXNDb21wb3VuZCl7dmFyIHQ9dGhpcy5fY2hpbGRyZW5bZV07aWYodClyZXR1cm4gamUua2V5cyh0KX1lbHNle2lmKGU9PT1KMSlyZXR1cm4gdGhpcy5ub2RlcygpO2lmKHRoaXMuaGFzTm9kZShlKSlyZXR1cm5bXX19O2NyLnByb3RvdHlwZS5wcmVkZWNlc3NvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcHJlZHNbZV07aWYodClyZXR1cm4gamUua2V5cyh0KX07Y3IucHJvdG90eXBlLnN1Y2Nlc3NvcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fc3Vjc1tlXTtpZih0KXJldHVybiBqZS5rZXlzKHQpfTtjci5wcm90b3R5cGUubmVpZ2hib3JzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJlZGVjZXNzb3JzKGUpO2lmKHQpcmV0dXJuIGplLnVuaW9uKHQsdGhpcy5zdWNjZXNzb3JzKGUpKX07Y3IucHJvdG90eXBlLmlzTGVhZj1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpcy5pc0RpcmVjdGVkKCk/dD10aGlzLnN1Y2Nlc3NvcnMoZSk6dD10aGlzLm5laWdoYm9ycyhlKSx0Lmxlbmd0aD09PTB9O2NyLnByb3RvdHlwZS5maWx0ZXJOb2Rlcz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih7ZGlyZWN0ZWQ6dGhpcy5faXNEaXJlY3RlZCxtdWx0aWdyYXBoOnRoaXMuX2lzTXVsdGlncmFwaCxjb21wb3VuZDp0aGlzLl9pc0NvbXBvdW5kfSk7dC5zZXRHcmFwaCh0aGlzLmdyYXBoKCkpO3ZhciByPXRoaXM7amUuZWFjaCh0aGlzLl9ub2RlcyxmdW5jdGlvbihvLGEpe2UoYSkmJnQuc2V0Tm9kZShhLG8pfSksamUuZWFjaCh0aGlzLl9lZGdlT2JqcyxmdW5jdGlvbihvKXt0Lmhhc05vZGUoby52KSYmdC5oYXNOb2RlKG8udykmJnQuc2V0RWRnZShvLHIuZWRnZShvKSl9KTt2YXIgbj17fTtmdW5jdGlvbiBpKG8pe3ZhciBhPXIucGFyZW50KG8pO3JldHVybiBhPT09dm9pZCAwfHx0Lmhhc05vZGUoYSk/KG5bb109YSxhKTphIGluIG4/blthXTppKGEpfXJldHVybiB0aGlzLl9pc0NvbXBvdW5kJiZqZS5lYWNoKHQubm9kZXMoKSxmdW5jdGlvbihvKXt0LnNldFBhcmVudChvLGkobykpfSksdH07Y3IucHJvdG90eXBlLnNldERlZmF1bHRFZGdlTGFiZWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGplLmlzRnVuY3Rpb24oZSl8fChlPWplLmNvbnN0YW50KGUpKSx0aGlzLl9kZWZhdWx0RWRnZUxhYmVsRm49ZSx0aGlzfTtjci5wcm90b3R5cGUuZWRnZUNvdW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VDb3VudH07Y3IucHJvdG90eXBlLmVkZ2VzPWZ1bmN0aW9uKCl7cmV0dXJuIGplLnZhbHVlcyh0aGlzLl9lZGdlT2Jqcyl9O2NyLnByb3RvdHlwZS5zZXRQYXRoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gamUucmVkdWNlKGUsZnVuY3Rpb24oaSxvKXtyZXR1cm4gbi5sZW5ndGg+MT9yLnNldEVkZ2UoaSxvLHQpOnIuc2V0RWRnZShpLG8pLG99KSx0aGlzfTtjci5wcm90b3R5cGUuc2V0RWRnZT1mdW5jdGlvbigpe3ZhciBlLHQscixuLGk9ITEsbz1hcmd1bWVudHNbMF07dHlwZW9mIG89PSJvYmplY3QiJiZvIT09bnVsbCYmInYiaW4gbz8oZT1vLnYsdD1vLncscj1vLm5hbWUsYXJndW1lbnRzLmxlbmd0aD09PTImJihuPWFyZ3VtZW50c1sxXSxpPSEwKSk6KGU9byx0PWFyZ3VtZW50c1sxXSxyPWFyZ3VtZW50c1szXSxhcmd1bWVudHMubGVuZ3RoPjImJihuPWFyZ3VtZW50c1syXSxpPSEwKSksZT0iIitlLHQ9IiIrdCxqZS5pc1VuZGVmaW5lZChyKXx8KHI9IiIrcik7dmFyIGE9RzQodGhpcy5faXNEaXJlY3RlZCxlLHQscik7aWYoamUuaGFzKHRoaXMuX2VkZ2VMYWJlbHMsYSkpcmV0dXJuIGkmJih0aGlzLl9lZGdlTGFiZWxzW2FdPW4pLHRoaXM7aWYoIWplLmlzVW5kZWZpbmVkKHIpJiYhdGhpcy5faXNNdWx0aWdyYXBoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNldCBhIG5hbWVkIGVkZ2Ugd2hlbiBpc011bHRpZ3JhcGggPSBmYWxzZSIpO3RoaXMuc2V0Tm9kZShlKSx0aGlzLnNldE5vZGUodCksdGhpcy5fZWRnZUxhYmVsc1thXT1pP246dGhpcy5fZGVmYXVsdEVkZ2VMYWJlbEZuKGUsdCxyKTt2YXIgcz1CcnIodGhpcy5faXNEaXJlY3RlZCxlLHQscik7cmV0dXJuIGU9cy52LHQ9cy53LE9iamVjdC5mcmVlemUocyksdGhpcy5fZWRnZU9ianNbYV09cyxJbmUodGhpcy5fcHJlZHNbdF0sZSksSW5lKHRoaXMuX3N1Y3NbZV0sdCksdGhpcy5faW5bdF1bYV09cyx0aGlzLl9vdXRbZV1bYV09cyx0aGlzLl9lZGdlQ291bnQrKyx0aGlzfTtjci5wcm90b3R5cGUuZWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/aGx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpHNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKTtyZXR1cm4gdGhpcy5fZWRnZUxhYmVsc1tuXX07Y3IucHJvdG90eXBlLmhhc0VkZ2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg9PT0xP2hsdCh0aGlzLl9pc0RpcmVjdGVkLGFyZ3VtZW50c1swXSk6RzQodGhpcy5faXNEaXJlY3RlZCxlLHQscik7cmV0dXJuIGplLmhhcyh0aGlzLl9lZGdlTGFiZWxzLG4pfTtjci5wcm90b3R5cGUucmVtb3ZlRWRnZT1mdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD09PTE/aGx0KHRoaXMuX2lzRGlyZWN0ZWQsYXJndW1lbnRzWzBdKTpHNCh0aGlzLl9pc0RpcmVjdGVkLGUsdCxyKSxpPXRoaXMuX2VkZ2VPYmpzW25dO3JldHVybiBpJiYoZT1pLnYsdD1pLncsZGVsZXRlIHRoaXMuX2VkZ2VMYWJlbHNbbl0sZGVsZXRlIHRoaXMuX2VkZ2VPYmpzW25dLExuZSh0aGlzLl9wcmVkc1t0XSxlKSxMbmUodGhpcy5fc3Vjc1tlXSx0KSxkZWxldGUgdGhpcy5faW5bdF1bbl0sZGVsZXRlIHRoaXMuX291dFtlXVtuXSx0aGlzLl9lZGdlQ291bnQtLSksdGhpc307Y3IucHJvdG90eXBlLmluRWRnZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLl9pbltlXTtpZihyKXt2YXIgbj1qZS52YWx1ZXMocik7cmV0dXJuIHQ/amUuZmlsdGVyKG4sZnVuY3Rpb24oaSl7cmV0dXJuIGkudj09PXR9KTpufX07Y3IucHJvdG90eXBlLm91dEVkZ2VzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fb3V0W2VdO2lmKHIpe3ZhciBuPWplLnZhbHVlcyhyKTtyZXR1cm4gdD9qZS5maWx0ZXIobixmdW5jdGlvbihpKXtyZXR1cm4gaS53PT09dH0pOm59fTtjci5wcm90b3R5cGUubm9kZUVkZ2VzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5pbkVkZ2VzKGUsdCk7aWYocilyZXR1cm4gci5jb25jYXQodGhpcy5vdXRFZGdlcyhlLHQpKX07ZnVuY3Rpb24gSW5lKGUsdCl7ZVt0XT9lW3RdKys6ZVt0XT0xfWZ1bmN0aW9uIExuZShlLHQpey0tZVt0XXx8ZGVsZXRlIGVbdF19ZnVuY3Rpb24gRzQoZSx0LHIsbil7dmFyIGk9IiIrdCxvPSIiK3I7aWYoIWUmJmk+byl7dmFyIGE9aTtpPW8sbz1hfXJldHVybiBpK1BuZStvK1BuZSsoamUuaXNVbmRlZmluZWQobik/RnJyOm4pfWZ1bmN0aW9uIEJycihlLHQscixuKXt2YXIgaT0iIit0LG89IiIrcjtpZighZSYmaT5vKXt2YXIgYT1pO2k9byxvPWF9dmFyIHM9e3Y6aSx3Om99O3JldHVybiBuJiYocy5uYW1lPW4pLHN9ZnVuY3Rpb24gaGx0KGUsdCl7cmV0dXJuIEc0KGUsdC52LHQudyx0Lm5hbWUpfX0pO3ZhciBObmU9SCgoQVpuLFJuZSk9PntSbmUuZXhwb3J0cz0iMi4xLjgifSk7dmFyIE9uZT1IKChQWm4sRG5lKT0+e0RuZS5leHBvcnRzPXtHcmFwaDplSCgpLHZlcnNpb246Tm5lKCl9fSk7dmFyIEZuZT1IKChJWm4sem5lKT0+e3ZhciBWZj1FbCgpLEhycj1lSCgpO3puZS5leHBvcnRzPXt3cml0ZTpWcnIscmVhZDpHcnJ9O2Z1bmN0aW9uIFZycihlKXt2YXIgdD17b3B0aW9uczp7ZGlyZWN0ZWQ6ZS5pc0RpcmVjdGVkKCksbXVsdGlncmFwaDplLmlzTXVsdGlncmFwaCgpLGNvbXBvdW5kOmUuaXNDb21wb3VuZCgpfSxub2RlczpVcnIoZSksZWRnZXM6cXJyKGUpfTtyZXR1cm4gVmYuaXNVbmRlZmluZWQoZS5ncmFwaCgpKXx8KHQudmFsdWU9VmYuY2xvbmUoZS5ncmFwaCgpKSksdH1mdW5jdGlvbiBVcnIoZSl7cmV0dXJuIFZmLm1hcChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpLG49ZS5wYXJlbnQodCksaT17djp0fTtyZXR1cm4gVmYuaXNVbmRlZmluZWQocil8fChpLnZhbHVlPXIpLFZmLmlzVW5kZWZpbmVkKG4pfHwoaS5wYXJlbnQ9biksaX0pfWZ1bmN0aW9uIHFycihlKXtyZXR1cm4gVmYubWFwKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCksbj17djp0LnYsdzp0Lnd9O3JldHVybiBWZi5pc1VuZGVmaW5lZCh0Lm5hbWUpfHwobi5uYW1lPXQubmFtZSksVmYuaXNVbmRlZmluZWQocil8fChuLnZhbHVlPXIpLG59KX1mdW5jdGlvbiBHcnIoZSl7dmFyIHQ9bmV3IEhycihlLm9wdGlvbnMpLnNldEdyYXBoKGUudmFsdWUpO3JldHVybiBWZi5lYWNoKGUubm9kZXMsZnVuY3Rpb24ocil7dC5zZXROb2RlKHIudixyLnZhbHVlKSxyLnBhcmVudCYmdC5zZXRQYXJlbnQoci52LHIucGFyZW50KX0pLFZmLmVhY2goZS5lZGdlcyxmdW5jdGlvbihyKXt0LnNldEVkZ2Uoe3Y6ci52LHc6ci53LG5hbWU6ci5uYW1lfSxyLnZhbHVlKX0pLHR9fSk7dmFyIEhuZT1IKChMWm4sQm5lKT0+e3ZhciBySD1FbCgpO0JuZS5leHBvcnRzPVdycjtmdW5jdGlvbiBXcnIoZSl7dmFyIHQ9e30scj1bXSxuO2Z1bmN0aW9uIGkobyl7ckguaGFzKHQsbyl8fCh0W29dPSEwLG4ucHVzaChvKSxySC5lYWNoKGUuc3VjY2Vzc29ycyhvKSxpKSxySC5lYWNoKGUucHJlZGVjZXNzb3JzKG8pLGkpKX1yZXR1cm4gckguZWFjaChlLm5vZGVzKCksZnVuY3Rpb24obyl7bj1bXSxpKG8pLG4ubGVuZ3RoJiZyLnB1c2gobil9KSxyfX0pO3ZhciBmbHQ9SCgoa1puLFVuZSk9Pnt2YXIgVm5lPUVsKCk7VW5lLmV4cG9ydHM9VmM7ZnVuY3Rpb24gVmMoKXt0aGlzLl9hcnI9W10sdGhpcy5fa2V5SW5kaWNlcz17fX1WYy5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubGVuZ3RofTtWYy5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmtleX0pfTtWYy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBWbmUuaGFzKHRoaXMuX2tleUluZGljZXMsZSl9O1ZjLnByb3RvdHlwZS5wcmlvcml0eT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9rZXlJbmRpY2VzW2VdO2lmKHQhPT12b2lkIDApcmV0dXJuIHRoaXMuX2Fyclt0XS5wcmlvcml0eX07VmMucHJvdG90eXBlLm1pbj1mdW5jdGlvbigpe2lmKHRoaXMuc2l6ZSgpPT09MCl0aHJvdyBuZXcgRXJyb3IoIlF1ZXVlIHVuZGVyZmxvdyIpO3JldHVybiB0aGlzLl9hcnJbMF0ua2V5fTtWYy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fa2V5SW5kaWNlcztpZihlPVN0cmluZyhlKSwhVm5lLmhhcyhyLGUpKXt2YXIgbj10aGlzLl9hcnIsaT1uLmxlbmd0aDtyZXR1cm4gcltlXT1pLG4ucHVzaCh7a2V5OmUscHJpb3JpdHk6dH0pLHRoaXMuX2RlY3JlYXNlKGkpLCEwfXJldHVybiExfTtWYy5wcm90b3R5cGUucmVtb3ZlTWluPWZ1bmN0aW9uKCl7dGhpcy5fc3dhcCgwLHRoaXMuX2Fyci5sZW5ndGgtMSk7dmFyIGU9dGhpcy5fYXJyLnBvcCgpO3JldHVybiBkZWxldGUgdGhpcy5fa2V5SW5kaWNlc1tlLmtleV0sdGhpcy5faGVhcGlmeSgwKSxlLmtleX07VmMucHJvdG90eXBlLmRlY3JlYXNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fa2V5SW5kaWNlc1tlXTtpZih0PnRoaXMuX2FycltyXS5wcmlvcml0eSl0aHJvdyBuZXcgRXJyb3IoIk5ldyBwcmlvcml0eSBpcyBncmVhdGVyIHRoYW4gY3VycmVudCBwcmlvcml0eS4gS2V5OiAiK2UrIiBPbGQ6ICIrdGhpcy5fYXJyW3JdLnByaW9yaXR5KyIgTmV3OiAiK3QpO3RoaXMuX2FycltyXS5wcmlvcml0eT10LHRoaXMuX2RlY3JlYXNlKHIpfTtWYy5wcm90b3R5cGUuX2hlYXBpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fYXJyLHI9MiplLG49cisxLGk9ZTtyPHQubGVuZ3RoJiYoaT10W3JdLnByaW9yaXR5PHRbaV0ucHJpb3JpdHk/cjppLG48dC5sZW5ndGgmJihpPXRbbl0ucHJpb3JpdHk8dFtpXS5wcmlvcml0eT9uOmkpLGkhPT1lJiYodGhpcy5fc3dhcChlLGkpLHRoaXMuX2hlYXBpZnkoaSkpKX07VmMucHJvdG90eXBlLl9kZWNyZWFzZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fYXJyLHI9dFtlXS5wcmlvcml0eSxuO2UhPT0wJiYobj1lPj4xLCEodFtuXS5wcmlvcml0eTxyKSk7KXRoaXMuX3N3YXAoZSxuKSxlPW59O1ZjLnByb3RvdHlwZS5fc3dhcD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX2FycixuPXRoaXMuX2tleUluZGljZXMsaT1yW2VdLG89clt0XTtyW2VdPW8sclt0XT1pLG5bby5rZXldPWUsbltpLmtleV09dH19KTt2YXIgcGx0PUgoKFJabixxbmUpPT57dmFyIFlycj1FbCgpLGpycj1mbHQoKTtxbmUuZXhwb3J0cz0kcnI7dmFyIFhycj1ZcnIuY29uc3RhbnQoMSk7ZnVuY3Rpb24gJHJyKGUsdCxyLG4pe3JldHVybiBLcnIoZSxTdHJpbmcodCkscnx8WHJyLG58fGZ1bmN0aW9uKGkpe3JldHVybiBlLm91dEVkZ2VzKGkpfSl9ZnVuY3Rpb24gS3JyKGUsdCxyLG4pe3ZhciBpPXt9LG89bmV3IGpycixhLHMsbD1mdW5jdGlvbihjKXt2YXIgdT1jLnYhPT1hP2MudjpjLncsaD1pW3VdLGY9cihjKSxwPXMuZGlzdGFuY2UrZjtpZihmPDApdGhyb3cgbmV3IEVycm9yKCJkaWprc3RyYSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSBlZGdlIHdlaWdodHMuIEJhZCBlZGdlOiAiK2MrIiBXZWlnaHQ6ICIrZik7cDxoLmRpc3RhbmNlJiYoaC5kaXN0YW5jZT1wLGgucHJlZGVjZXNzb3I9YSxvLmRlY3JlYXNlKHUscCkpfTtmb3IoZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9Yz09PXQ/MDpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7aVtjXT17ZGlzdGFuY2U6dX0sby5hZGQoYyx1KX0pO28uc2l6ZSgpPjAmJihhPW8ucmVtb3ZlTWluKCkscz1pW2FdLHMuZGlzdGFuY2UhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOyluKGEpLmZvckVhY2gobCk7cmV0dXJuIGl9fSk7dmFyIFduZT1IKChOWm4sR25lKT0+e3ZhciBacnI9cGx0KCksSnJyPUVsKCk7R25lLmV4cG9ydHM9UXJyO2Z1bmN0aW9uIFFycihlLHQscil7cmV0dXJuIEpyci50cmFuc2Zvcm0oZS5ub2RlcygpLGZ1bmN0aW9uKG4saSl7bltpXT1acnIoZSxpLHQscil9LHt9KX19KTt2YXIgZGx0PUgoKERabixqbmUpPT57dmFyIFluZT1FbCgpO2puZS5leHBvcnRzPXRucjtmdW5jdGlvbiB0bnIoZSl7dmFyIHQ9MCxyPVtdLG49e30saT1bXTtmdW5jdGlvbiBvKGEpe3ZhciBzPW5bYV09e29uU3RhY2s6ITAsbG93bGluazp0LGluZGV4OnQrK307aWYoci5wdXNoKGEpLGUuc3VjY2Vzc29ycyhhKS5mb3JFYWNoKGZ1bmN0aW9uKHUpe1luZS5oYXMobix1KT9uW3VdLm9uU3RhY2smJihzLmxvd2xpbms9TWF0aC5taW4ocy5sb3dsaW5rLG5bdV0uaW5kZXgpKToobyh1KSxzLmxvd2xpbms9TWF0aC5taW4ocy5sb3dsaW5rLG5bdV0ubG93bGluaykpfSkscy5sb3dsaW5rPT09cy5pbmRleCl7dmFyIGw9W10sYztkbyBjPXIucG9wKCksbltjXS5vblN0YWNrPSExLGwucHVzaChjKTt3aGlsZShhIT09Yyk7aS5wdXNoKGwpfX1yZXR1cm4gZS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oYSl7WW5lLmhhcyhuLGEpfHxvKGEpfSksaX19KTt2YXIgJG5lPUgoKE9abixYbmUpPT57dmFyIGVucj1FbCgpLHJucj1kbHQoKTtYbmUuZXhwb3J0cz1ubnI7ZnVuY3Rpb24gbm5yKGUpe3JldHVybiBlbnIuZmlsdGVyKHJucihlKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MXx8dC5sZW5ndGg9PT0xJiZlLmhhc0VkZ2UodFswXSx0WzBdKX0pfX0pO3ZhciBabmU9SCgoelpuLEtuZSk9Pnt2YXIgaW5yPUVsKCk7S25lLmV4cG9ydHM9YW5yO3ZhciBvbnI9aW5yLmNvbnN0YW50KDEpO2Z1bmN0aW9uIGFucihlLHQscil7cmV0dXJuIHNucihlLHR8fG9ucixyfHxmdW5jdGlvbihuKXtyZXR1cm4gZS5vdXRFZGdlcyhuKX0pfWZ1bmN0aW9uIHNucihlLHQscil7dmFyIG49e30saT1lLm5vZGVzKCk7cmV0dXJuIGkuZm9yRWFjaChmdW5jdGlvbihvKXtuW29dPXt9LG5bb11bb109e2Rpc3RhbmNlOjB9LGkuZm9yRWFjaChmdW5jdGlvbihhKXtvIT09YSYmKG5bb11bYV09e2Rpc3RhbmNlOk51bWJlci5QT1NJVElWRV9JTkZJTklUWX0pfSkscihvKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBzPWEudj09PW8/YS53OmEudixsPXQoYSk7bltvXVtzXT17ZGlzdGFuY2U6bCxwcmVkZWNlc3NvcjpvfX0pfSksaS5mb3JFYWNoKGZ1bmN0aW9uKG8pe3ZhciBhPW5bb107aS5mb3JFYWNoKGZ1bmN0aW9uKHMpe3ZhciBsPW5bc107aS5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciB1PWxbb10saD1hW2NdLGY9bFtjXSxwPXUuZGlzdGFuY2UraC5kaXN0YW5jZTtwPGYuZGlzdGFuY2UmJihmLmRpc3RhbmNlPXAsZi5wcmVkZWNlc3Nvcj1oLnByZWRlY2Vzc29yKX0pfSl9KSxufX0pO3ZhciBtbHQ9SCgoRlpuLFFuZSk9Pnt2YXIgVzQ9RWwoKTtRbmUuZXhwb3J0cz1KbmU7Sm5lLkN5Y2xlRXhjZXB0aW9uPW5IO2Z1bmN0aW9uIEpuZShlKXt2YXIgdD17fSxyPXt9LG49W107ZnVuY3Rpb24gaShvKXtpZihXNC5oYXMocixvKSl0aHJvdyBuZXcgbkg7VzQuaGFzKHQsbyl8fChyW29dPSEwLHRbb109ITAsVzQuZWFjaChlLnByZWRlY2Vzc29ycyhvKSxpKSxkZWxldGUgcltvXSxuLnB1c2gobykpfWlmKFc0LmVhY2goZS5zaW5rcygpLGkpLFc0LnNpemUodCkhPT1lLm5vZGVDb3VudCgpKXRocm93IG5ldyBuSDtyZXR1cm4gbn1mdW5jdGlvbiBuSCgpe31uSC5wcm90b3R5cGU9bmV3IEVycm9yfSk7dmFyIHJpZT1IKChCWm4sZWllKT0+e3ZhciB0aWU9bWx0KCk7ZWllLmV4cG9ydHM9bG5yO2Z1bmN0aW9uIGxucihlKXt0cnl7dGllKGUpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiB0aWUuQ3ljbGVFeGNlcHRpb24pcmV0dXJuITE7dGhyb3cgdH1yZXR1cm4hMH19KTt2YXIgZ2x0PUgoKEhabixpaWUpPT57dmFyIGlIPUVsKCk7aWllLmV4cG9ydHM9Y25yO2Z1bmN0aW9uIGNucihlLHQscil7aUguaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgbj0oZS5pc0RpcmVjdGVkKCk/ZS5zdWNjZXNzb3JzOmUubmVpZ2hib3JzKS5iaW5kKGUpLGk9W10sbz17fTtyZXR1cm4gaUguZWFjaCh0LGZ1bmN0aW9uKGEpe2lmKCFlLmhhc05vZGUoYSkpdGhyb3cgbmV3IEVycm9yKCJHcmFwaCBkb2VzIG5vdCBoYXZlIG5vZGU6ICIrYSk7bmllKGUsYSxyPT09InBvc3QiLG8sbixpKX0pLGl9ZnVuY3Rpb24gbmllKGUsdCxyLG4saSxvKXtpSC5oYXMobix0KXx8KG5bdF09ITAscnx8by5wdXNoKHQpLGlILmVhY2goaSh0KSxmdW5jdGlvbihhKXtuaWUoZSxhLHIsbixpLG8pfSksciYmby5wdXNoKHQpKX19KTt2YXIgYWllPUgoKFZabixvaWUpPT57dmFyIHVucj1nbHQoKTtvaWUuZXhwb3J0cz1obnI7ZnVuY3Rpb24gaG5yKGUsdCl7cmV0dXJuIHVucihlLHQsInBvc3QiKX19KTt2YXIgbGllPUgoKFVabixzaWUpPT57dmFyIGZucj1nbHQoKTtzaWUuZXhwb3J0cz1wbnI7ZnVuY3Rpb24gcG5yKGUsdCl7cmV0dXJuIGZucihlLHQsInByZSIpfX0pO3ZhciBoaWU9SCgocVpuLHVpZSk9Pnt2YXIgY2llPUVsKCksZG5yPWVIKCksbW5yPWZsdCgpO3VpZS5leHBvcnRzPWducjtmdW5jdGlvbiBnbnIoZSx0KXt2YXIgcj1uZXcgZG5yLG49e30saT1uZXcgbW5yLG87ZnVuY3Rpb24gYShsKXt2YXIgYz1sLnY9PT1vP2wudzpsLnYsdT1pLnByaW9yaXR5KGMpO2lmKHUhPT12b2lkIDApe3ZhciBoPXQobCk7aDx1JiYobltjXT1vLGkuZGVjcmVhc2UoYyxoKSl9fWlmKGUubm9kZUNvdW50KCk9PT0wKXJldHVybiByO2NpZS5lYWNoKGUubm9kZXMoKSxmdW5jdGlvbihsKXtpLmFkZChsLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSksci5zZXROb2RlKGwpfSksaS5kZWNyZWFzZShlLm5vZGVzKClbMF0sMCk7Zm9yKHZhciBzPSExO2kuc2l6ZSgpPjA7KXtpZihvPWkucmVtb3ZlTWluKCksY2llLmhhcyhuLG8pKXIuc2V0RWRnZShvLG5bb10pO2Vsc2V7aWYocyl0aHJvdyBuZXcgRXJyb3IoIklucHV0IGdyYXBoIGlzIG5vdCBjb25uZWN0ZWQ6ICIrZSk7cz0hMH1lLm5vZGVFZGdlcyhvKS5mb3JFYWNoKGEpfXJldHVybiByfX0pO3ZhciBwaWU9SCgoR1puLGZpZSk9PntmaWUuZXhwb3J0cz17Y29tcG9uZW50czpIbmUoKSxkaWprc3RyYTpwbHQoKSxkaWprc3RyYUFsbDpXbmUoKSxmaW5kQ3ljbGVzOiRuZSgpLGZsb3lkV2Fyc2hhbGw6Wm5lKCksaXNBY3ljbGljOnJpZSgpLHBvc3RvcmRlcjphaWUoKSxwcmVvcmRlcjpsaWUoKSxwcmltOmhpZSgpLHRhcmphbjpkbHQoKSx0b3Bzb3J0Om1sdCgpfX0pO3ZhciBnaWU9SCgoV1puLG1pZSk9Pnt2YXIgZGllPU9uZSgpO21pZS5leHBvcnRzPXtHcmFwaDpkaWUuR3JhcGgsanNvbjpGbmUoKSxhbGc6cGllKCksdmVyc2lvbjpkaWUudmVyc2lvbn19KTt2YXIgVWM9SCgoWVpuLF9pZSk9Pnt2YXIgb0g7aWYodHlwZW9mIEV4PT0iZnVuY3Rpb24iKXRyeXtvSD1naWUoKX1jYXRjaChlKXt9b0h8fChvSD13aW5kb3cuZ3JhcGhsaWIpO19pZS5leHBvcnRzPW9IfSk7dmFyIHZpZT1IKChYWm4seWllKT0+e3ZhciBfbnI9TnN0KCkseW5yPTEsdm5yPTQ7ZnVuY3Rpb24geG5yKGUpe3JldHVybiBfbnIoZSx5bnJ8dm5yKX15aWUuZXhwb3J0cz14bnJ9KTt2YXIgWTQ9SCgoJFpuLHhpZSk9Pnt2YXIgYm5yPVkxKCksd25yPUJmKCksU25yPWs0KCksTW5yPU1sKCk7ZnVuY3Rpb24gRW5yKGUsdCxyKXtpZighTW5yKHIpKXJldHVybiExO3ZhciBuPXR5cGVvZiB0O3JldHVybihuPT0ibnVtYmVyIj93bnIocikmJlNucih0LHIubGVuZ3RoKTpuPT0ic3RyaW5nIiYmdCBpbiByKT9ibnIoclt0XSxlKTohMX14aWUuZXhwb3J0cz1FbnJ9KTt2YXIgU2llPUgoKEtabix3aWUpPT57dmFyIFRucj1xNCgpLENucj1ZMSgpLEFucj1ZNCgpLFBucj1jMCgpLGJpZT1PYmplY3QucHJvdG90eXBlLElucj1iaWUuaGFzT3duUHJvcGVydHksTG5yPVRucihmdW5jdGlvbihlLHQpe2U9T2JqZWN0KGUpO3ZhciByPS0xLG49dC5sZW5ndGgsaT1uPjI/dFsyXTp2b2lkIDA7Zm9yKGkmJkFucih0WzBdLHRbMV0saSkmJihuPTEpOysrcjxuOylmb3IodmFyIG89dFtyXSxhPVBucihvKSxzPS0xLGw9YS5sZW5ndGg7KytzPGw7KXt2YXIgYz1hW3NdLHU9ZVtjXTsodT09PXZvaWQgMHx8Q25yKHUsYmllW2NdKSYmIUluci5jYWxsKGUsYykpJiYoZVtjXT1vW2NdKX1yZXR1cm4gZX0pO3dpZS5leHBvcnRzPUxucn0pO3ZhciBFaWU9SCgoWlpuLE1pZSk9Pnt2YXIga25yPUhmKCksUm5yPUJmKCksTm5yPUFkKCk7ZnVuY3Rpb24gRG5yKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7dmFyIGk9T2JqZWN0KHQpO2lmKCFSbnIodCkpe3ZhciBvPWtucihyLDMpO3Q9Tm5yKHQpLHI9ZnVuY3Rpb24ocyl7cmV0dXJuIG8oaVtzXSxzLGkpfX12YXIgYT1lKHQscixuKTtyZXR1cm4gYT4tMT9pW28/dFthXTphXTp2b2lkIDB9fU1pZS5leHBvcnRzPURucn0pO3ZhciBDaWU9SCgoSlpuLFRpZSk9Pnt2YXIgT25yPS9ccy87ZnVuY3Rpb24gem5yKGUpe2Zvcih2YXIgdD1lLmxlbmd0aDt0LS0mJk9uci50ZXN0KGUuY2hhckF0KHQpKTspO3JldHVybiB0fVRpZS5leHBvcnRzPXpucn0pO3ZhciBQaWU9SCgoUVpuLEFpZSk9Pnt2YXIgRm5yPUNpZSgpLEJucj0vXlxzKy87ZnVuY3Rpb24gSG5yKGUpe3JldHVybiBlJiZlLnNsaWNlKDAsRm5yKGUpKzEpLnJlcGxhY2UoQm5yLCIiKX1BaWUuZXhwb3J0cz1IbnJ9KTt2YXIgUmllPUgoKHRKbixraWUpPT57dmFyIFZucj1QaWUoKSxJaWU9TWwoKSxVbnI9WjEoKSxMaWU9MC8wLHFucj0vXlstK10weFswLTlhLWZdKyQvaSxHbnI9L14wYlswMV0rJC9pLFducj0vXjBvWzAtN10rJC9pLFlucj1wYXJzZUludDtmdW5jdGlvbiBqbnIoZSl7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBlO2lmKFVucihlKSlyZXR1cm4gTGllO2lmKElpZShlKSl7dmFyIHQ9dHlwZW9mIGUudmFsdWVPZj09ImZ1bmN0aW9uIj9lLnZhbHVlT2YoKTplO2U9SWllKHQpP3QrIiI6dH1pZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIGU9PT0wP2U6K2U7ZT1WbnIoZSk7dmFyIHI9R25yLnRlc3QoZSk7cmV0dXJuIHJ8fFduci50ZXN0KGUpP1lucihlLnNsaWNlKDIpLHI/Mjo4KTpxbnIudGVzdChlKT9MaWU6K2V9a2llLmV4cG9ydHM9am5yfSk7dmFyIF9sdD1IKChlSm4sRGllKT0+e3ZhciBYbnI9UmllKCksTmllPTEvMCwkbnI9MTc5NzY5MzEzNDg2MjMxNTdlMjkyO2Z1bmN0aW9uIEtucihlKXtpZighZSlyZXR1cm4gZT09PTA/ZTowO2lmKGU9WG5yKGUpLGU9PT1OaWV8fGU9PT0tTmllKXt2YXIgdD1lPDA/LTE6MTtyZXR1cm4gdCokbnJ9cmV0dXJuIGU9PT1lP2U6MH1EaWUuZXhwb3J0cz1LbnJ9KTt2YXIgemllPUgoKHJKbixPaWUpPT57dmFyIFpucj1fbHQoKTtmdW5jdGlvbiBKbnIoZSl7dmFyIHQ9Wm5yKGUpLHI9dCUxO3JldHVybiB0PT09dD9yP3Qtcjp0OjB9T2llLmV4cG9ydHM9Sm5yfSk7dmFyIEJpZT1IKChuSm4sRmllKT0+e3ZhciBRbnI9c2x0KCksdGlyPUhmKCksZWlyPXppZSgpLHJpcj1NYXRoLm1heDtmdW5jdGlvbiBuaXIoZSx0LHIpe3ZhciBuPWU9PW51bGw/MDplLmxlbmd0aDtpZighbilyZXR1cm4tMTt2YXIgaT1yPT1udWxsPzA6ZWlyKHIpO3JldHVybiBpPDAmJihpPXJpcihuK2ksMCkpLFFucihlLHRpcih0LDMpLGkpfUZpZS5leHBvcnRzPW5pcn0pO3ZhciBWaWU9SCgoaUpuLEhpZSk9Pnt2YXIgaWlyPUVpZSgpLG9pcj1CaWUoKSxhaXI9aWlyKG9pcik7SGllLmV4cG9ydHM9YWlyfSk7dmFyIHlsdD1IKChvSm4sVWllKT0+e3ZhciBzaXI9UUIoKTtmdW5jdGlvbiBsaXIoZSl7dmFyIHQ9ZT09bnVsbD8wOmUubGVuZ3RoO3JldHVybiB0P3NpcihlLDEpOltdfVVpZS5leHBvcnRzPWxpcn0pO3ZhciBHaWU9SCgoYUpuLHFpZSk9Pnt2YXIgY2lyPWpCKCksdWlyPURzdCgpLGhpcj1jMCgpO2Z1bmN0aW9uIGZpcihlLHQpe3JldHVybiBlPT1udWxsP2U6Y2lyKGUsdWlyKHQpLGhpcil9cWllLmV4cG9ydHM9ZmlyfSk7dmFyIFlpZT1IKChzSm4sV2llKT0+e2Z1bmN0aW9uIHBpcihlKXt2YXIgdD1lPT1udWxsPzA6ZS5sZW5ndGg7cmV0dXJuIHQ/ZVt0LTFdOnZvaWQgMH1XaWUuZXhwb3J0cz1waXJ9KTt2YXIgWGllPUgoKGxKbixqaWUpPT57dmFyIGRpcj1QNCgpLG1pcj1YQigpLGdpcj1IZigpO2Z1bmN0aW9uIF9pcihlLHQpe3ZhciByPXt9O3JldHVybiB0PWdpcih0LDMpLG1pcihlLGZ1bmN0aW9uKG4saSxvKXtkaXIocixpLHQobixpLG8pKX0pLHJ9amllLmV4cG9ydHM9X2lyfSk7dmFyIGFIPUgoKGNKbiwkaWUpPT57dmFyIHlpcj1aMSgpO2Z1bmN0aW9uIHZpcihlLHQscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGg7KytuPGk7KXt2YXIgbz1lW25dLGE9dChvKTtpZihhIT1udWxsJiYocz09PXZvaWQgMD9hPT09YSYmIXlpcihhKTpyKGEscykpKXZhciBzPWEsbD1vfXJldHVybiBsfSRpZS5leHBvcnRzPXZpcn0pO3ZhciBaaWU9SCgodUpuLEtpZSk9PntmdW5jdGlvbiB4aXIoZSx0KXtyZXR1cm4gZT50fUtpZS5leHBvcnRzPXhpcn0pO3ZhciBRaWU9SCgoaEpuLEppZSk9Pnt2YXIgYmlyPWFIKCksd2lyPVppZSgpLFNpcj11MCgpO2Z1bmN0aW9uIE1pcihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/YmlyKGUsU2lyLHdpcik6dm9pZCAwfUppZS5leHBvcnRzPU1pcn0pO3ZhciB2bHQ9SCgoZkpuLHRvZSk9Pnt2YXIgRWlyPVA0KCksVGlyPVkxKCk7ZnVuY3Rpb24gQ2lyKGUsdCxyKXsociE9PXZvaWQgMCYmIVRpcihlW3RdLHIpfHxyPT09dm9pZCAwJiYhKHQgaW4gZSkpJiZFaXIoZSx0LHIpfXRvZS5leHBvcnRzPUNpcn0pO3ZhciBub2U9SCgocEpuLHJvZSk9Pnt2YXIgQWlyPXMwKCksUGlyPUY0KCksSWlyPVl1KCksTGlyPSJbb2JqZWN0IE9iamVjdF0iLGtpcj1GdW5jdGlvbi5wcm90b3R5cGUsUmlyPU9iamVjdC5wcm90b3R5cGUsZW9lPWtpci50b1N0cmluZyxOaXI9UmlyLmhhc093blByb3BlcnR5LERpcj1lb2UuY2FsbChPYmplY3QpO2Z1bmN0aW9uIE9pcihlKXtpZighSWlyKGUpfHxBaXIoZSkhPUxpcilyZXR1cm4hMTt2YXIgdD1QaXIoZSk7aWYodD09PW51bGwpcmV0dXJuITA7dmFyIHI9TmlyLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcjtyZXR1cm4gdHlwZW9mIHI9PSJmdW5jdGlvbiImJnIgaW5zdGFuY2VvZiByJiZlb2UuY2FsbChyKT09RGlyfXJvZS5leHBvcnRzPU9pcn0pO3ZhciB4bHQ9SCgoZEpuLGlvZSk9PntmdW5jdGlvbiB6aXIoZSx0KXtpZighKHQ9PT0iY29uc3RydWN0b3IiJiZ0eXBlb2YgZVt0XT09ImZ1bmN0aW9uIikmJnQhPSJfX3Byb3RvX18iKXJldHVybiBlW3RdfWlvZS5leHBvcnRzPXppcn0pO3ZhciBhb2U9SCgobUpuLG9vZSk9Pnt2YXIgRmlyPVVTKCksQmlyPWMwKCk7ZnVuY3Rpb24gSGlyKGUpe3JldHVybiBGaXIoZSxCaXIoZSkpfW9vZS5leHBvcnRzPUhpcn0pO3ZhciBmb2U9SCgoZ0puLGhvZSk9Pnt2YXIgc29lPXZsdCgpLFZpcj1fc3QoKSxVaXI9THN0KCkscWlyPXlzdCgpLEdpcj1Sc3QoKSxsb2U9cVMoKSxjb2U9VGkoKSxXaXI9Y2x0KCksWWlyPVgxKCksamlyPUZTKCksWGlyPU1sKCksJGlyPW5vZSgpLEtpcj1ZUygpLHVvZT14bHQoKSxaaXI9YW9lKCk7ZnVuY3Rpb24gSmlyKGUsdCxyLG4saSxvLGEpe3ZhciBzPXVvZShlLHIpLGw9dW9lKHQsciksYz1hLmdldChsKTtpZihjKXtzb2UoZSxyLGMpO3JldHVybn12YXIgdT1vP28ocyxsLHIrIiIsZSx0LGEpOnZvaWQgMCxoPXU9PT12b2lkIDA7aWYoaCl7dmFyIGY9Y29lKGwpLHA9IWYmJllpcihsKSxkPSFmJiYhcCYmS2lyKGwpO3U9bCxmfHxwfHxkP2NvZShzKT91PXM6V2lyKHMpP3U9cWlyKHMpOnA/KGg9ITEsdT1WaXIobCwhMCkpOmQ/KGg9ITEsdT1VaXIobCwhMCkpOnU9W106JGlyKGwpfHxsb2UobCk/KHU9cyxsb2Uocyk/dT1aaXIocyk6KCFYaXIocyl8fGppcihzKSkmJih1PUdpcihsKSkpOmg9ITF9aCYmKGEuc2V0KGwsdSksaSh1LGwsbixvLGEpLGEuZGVsZXRlKGwpKSxzb2UoZSxyLHUpfWhvZS5leHBvcnRzPUppcn0pO3ZhciBtb2U9SCgoX0puLGRvZSk9Pnt2YXIgUWlyPUE0KCksdG9yPXZsdCgpLGVvcj1qQigpLHJvcj1mb2UoKSxub3I9TWwoKSxpb3I9YzAoKSxvb3I9eGx0KCk7ZnVuY3Rpb24gcG9lKGUsdCxyLG4saSl7ZSE9PXQmJmVvcih0LGZ1bmN0aW9uKG8sYSl7aWYoaXx8KGk9bmV3IFFpciksbm9yKG8pKXJvcihlLHQsYSxyLHBvZSxuLGkpO2Vsc2V7dmFyIHM9bj9uKG9vcihlLGEpLG8sYSsiIixlLHQsaSk6dm9pZCAwO3M9PT12b2lkIDAmJihzPW8pLHRvcihlLGEscyl9fSxpb3IpfWRvZS5leHBvcnRzPXBvZX0pO3ZhciBfb2U9SCgoeUpuLGdvZSk9Pnt2YXIgYW9yPXE0KCksc29yPVk0KCk7ZnVuY3Rpb24gbG9yKGUpe3JldHVybiBhb3IoZnVuY3Rpb24odCxyKXt2YXIgbj0tMSxpPXIubGVuZ3RoLG89aT4xP3JbaS0xXTp2b2lkIDAsYT1pPjI/clsyXTp2b2lkIDA7Zm9yKG89ZS5sZW5ndGg+MyYmdHlwZW9mIG89PSJmdW5jdGlvbiI/KGktLSxvKTp2b2lkIDAsYSYmc29yKHJbMF0sclsxXSxhKSYmKG89aTwzP3ZvaWQgMDpvLGk9MSksdD1PYmplY3QodCk7KytuPGk7KXt2YXIgcz1yW25dO3MmJmUodCxzLG4sbyl9cmV0dXJuIHR9KX1nb2UuZXhwb3J0cz1sb3J9KTt2YXIgdm9lPUgoKHZKbix5b2UpPT57dmFyIGNvcj1tb2UoKSx1b3I9X29lKCksaG9yPXVvcihmdW5jdGlvbihlLHQscil7Y29yKGUsdCxyKX0pO3lvZS5leHBvcnRzPWhvcn0pO3ZhciBibHQ9SCgoeEpuLHhvZSk9PntmdW5jdGlvbiBwb3IoZSx0KXtyZXR1cm4gZTx0fXhvZS5leHBvcnRzPXBvcn0pO3ZhciB3b2U9SCgoYkpuLGJvZSk9Pnt2YXIgZG9yPWFIKCksbW9yPWJsdCgpLGdvcj11MCgpO2Z1bmN0aW9uIF9vcihlKXtyZXR1cm4gZSYmZS5sZW5ndGg/ZG9yKGUsZ29yLG1vcik6dm9pZCAwfWJvZS5leHBvcnRzPV9vcn0pO3ZhciBNb2U9SCgod0puLFNvZSk9Pnt2YXIgeW9yPWFIKCksdm9yPUhmKCkseG9yPWJsdCgpO2Z1bmN0aW9uIGJvcihlLHQpe3JldHVybiBlJiZlLmxlbmd0aD95b3IoZSx2b3IodCwyKSx4b3IpOnZvaWQgMH1Tb2UuZXhwb3J0cz1ib3J9KTt2YXIgVG9lPUgoKFNKbixFb2UpPT57dmFyIHdvcj1IYygpLFNvcj1mdW5jdGlvbigpe3JldHVybiB3b3IuRGF0ZS5ub3coKX07RW9lLmV4cG9ydHM9U29yfSk7dmFyIFBvZT1IKChNSm4sQW9lKT0+e3ZhciBNb3I9STQoKSxFb3I9VjQoKSxUb3I9azQoKSxDb2U9TWwoKSxDb3I9JFMoKTtmdW5jdGlvbiBBb3IoZSx0LHIsbil7aWYoIUNvZShlKSlyZXR1cm4gZTt0PUVvcih0LGUpO2Zvcih2YXIgaT0tMSxvPXQubGVuZ3RoLGE9by0xLHM9ZTtzIT1udWxsJiYrK2k8bzspe3ZhciBsPUNvcih0W2ldKSxjPXI7aWYobD09PSJfX3Byb3RvX18ifHxsPT09ImNvbnN0cnVjdG9yInx8bD09PSJwcm90b3R5cGUiKXJldHVybiBlO2lmKGkhPWEpe3ZhciB1PXNbbF07Yz1uP24odSxsLHMpOnZvaWQgMCxjPT09dm9pZCAwJiYoYz1Db2UodSk/dTpUb3IodFtpKzFdKT9bXTp7fSl9TW9yKHMsbCxjKSxzPXNbbF19cmV0dXJuIGV9QW9lLmV4cG9ydHM9QW9yfSk7dmFyIExvZT1IKChFSm4sSW9lKT0+e3ZhciBQb3I9VTQoKSxJb3I9UG9lKCksTG9yPVY0KCk7ZnVuY3Rpb24ga29yKGUsdCxyKXtmb3IodmFyIG49LTEsaT10Lmxlbmd0aCxvPXt9OysrbjxpOyl7dmFyIGE9dFtuXSxzPVBvcihlLGEpO3IocyxhKSYmSW9yKG8sTG9yKGEsZSkscyl9cmV0dXJuIG99SW9lLmV4cG9ydHM9a29yfSk7dmFyIFJvZT1IKChUSm4sa29lKT0+e3ZhciBSb3I9TG9lKCksTm9yPSRzdCgpO2Z1bmN0aW9uIERvcihlLHQpe3JldHVybiBSb3IoZSx0LGZ1bmN0aW9uKHIsbil7cmV0dXJuIE5vcihlLG4pfSl9a29lLmV4cG9ydHM9RG9yfSk7dmFyIERvZT1IKChDSm4sTm9lKT0+e3ZhciBPb3I9eWx0KCksem9yPW9sdCgpLEZvcj1hbHQoKTtmdW5jdGlvbiBCb3IoZSl7cmV0dXJuIEZvcih6b3IoZSx2b2lkIDAsT29yKSxlKyIiKX1Ob2UuZXhwb3J0cz1Cb3J9KTt2YXIgem9lPUgoKEFKbixPb2UpPT57dmFyIEhvcj1Sb2UoKSxWb3I9RG9lKCksVW9yPVZvcihmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP3t9OkhvcihlLHQpfSk7T29lLmV4cG9ydHM9VW9yfSk7dmFyIEJvZT1IKChQSm4sRm9lKT0+e3ZhciBxb3I9TWF0aC5jZWlsLEdvcj1NYXRoLm1heDtmdW5jdGlvbiBXb3IoZSx0LHIsbil7Zm9yKHZhciBpPS0xLG89R29yKHFvcigodC1lKS8ocnx8MSkpLDApLGE9QXJyYXkobyk7by0tOylhW24/bzorK2ldPWUsZSs9cjtyZXR1cm4gYX1Gb2UuZXhwb3J0cz1Xb3J9KTt2YXIgVm9lPUgoKElKbixIb2UpPT57dmFyIFlvcj1Cb2UoKSxqb3I9WTQoKSx3bHQ9X2x0KCk7ZnVuY3Rpb24gWG9yKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIG4mJnR5cGVvZiBuIT0ibnVtYmVyIiYmam9yKHQscixuKSYmKHI9bj12b2lkIDApLHQ9d2x0KHQpLHI9PT12b2lkIDA/KHI9dCx0PTApOnI9d2x0KHIpLG49bj09PXZvaWQgMD90PHI/MTotMTp3bHQobiksWW9yKHQscixuLGUpfX1Ib2UuZXhwb3J0cz1Yb3J9KTt2YXIgcW9lPUgoKExKbixVb2UpPT57dmFyICRvcj1Wb2UoKSxLb3I9JG9yKCk7VW9lLmV4cG9ydHM9S29yfSk7dmFyIFdvZT1IKChrSm4sR29lKT0+e2Z1bmN0aW9uIFpvcihlLHQpe3ZhciByPWUubGVuZ3RoO2ZvcihlLnNvcnQodCk7ci0tOyllW3JdPWVbcl0udmFsdWU7cmV0dXJuIGV9R29lLmV4cG9ydHM9Wm9yfSk7dmFyIFhvZT1IKChSSm4sam9lKT0+e3ZhciBZb2U9WjEoKTtmdW5jdGlvbiBKb3IoZSx0KXtpZihlIT09dCl7dmFyIHI9ZSE9PXZvaWQgMCxuPWU9PT1udWxsLGk9ZT09PWUsbz1Zb2UoZSksYT10IT09dm9pZCAwLHM9dD09PW51bGwsbD10PT09dCxjPVlvZSh0KTtpZighcyYmIWMmJiFvJiZlPnR8fG8mJmEmJmwmJiFzJiYhY3x8biYmYSYmbHx8IXImJmx8fCFpKXJldHVybiAxO2lmKCFuJiYhbyYmIWMmJmU8dHx8YyYmciYmaSYmIW4mJiFvfHxzJiZyJiZpfHwhYSYmaXx8IWwpcmV0dXJuLTF9cmV0dXJuIDB9am9lLmV4cG9ydHM9Sm9yfSk7dmFyIEtvZT1IKChOSm4sJG9lKT0+e3ZhciBRb3I9WG9lKCk7ZnVuY3Rpb24gdGFyKGUsdCxyKXtmb3IodmFyIG49LTEsaT1lLmNyaXRlcmlhLG89dC5jcml0ZXJpYSxhPWkubGVuZ3RoLHM9ci5sZW5ndGg7KytuPGE7KXt2YXIgbD1Rb3IoaVtuXSxvW25dKTtpZihsKXtpZihuPj1zKXJldHVybiBsO3ZhciBjPXJbbl07cmV0dXJuIGwqKGM9PSJkZXNjIj8tMToxKX19cmV0dXJuIGUuaW5kZXgtdC5pbmRleH0kb2UuZXhwb3J0cz10YXJ9KTt2YXIgSm9lPUgoKERKbixab2UpPT57dmFyIFNsdD1INCgpLGVhcj1VNCgpLHJhcj1IZigpLG5hcj10bHQoKSxpYXI9V29lKCksb2FyPVI0KCksYWFyPUtvZSgpLHNhcj11MCgpLGxhcj1UaSgpO2Z1bmN0aW9uIGNhcihlLHQscil7dC5sZW5ndGg/dD1TbHQodCxmdW5jdGlvbihvKXtyZXR1cm4gbGFyKG8pP2Z1bmN0aW9uKGEpe3JldHVybiBlYXIoYSxvLmxlbmd0aD09PTE/b1swXTpvKX06b30pOnQ9W3Nhcl07dmFyIG49LTE7dD1TbHQodCxvYXIocmFyKSk7dmFyIGk9bmFyKGUsZnVuY3Rpb24obyxhLHMpe3ZhciBsPVNsdCh0LGZ1bmN0aW9uKGMpe3JldHVybiBjKG8pfSk7cmV0dXJue2NyaXRlcmlhOmwsaW5kZXg6KytuLHZhbHVlOm99fSk7cmV0dXJuIGlhcihpLGZ1bmN0aW9uKG8sYSl7cmV0dXJuIGFhcihvLGEscil9KX1ab2UuZXhwb3J0cz1jYXJ9KTt2YXIgZWFlPUgoKE9Kbix0YWUpPT57dmFyIHVhcj1RQigpLGhhcj1Kb2UoKSxmYXI9cTQoKSxRb2U9WTQoKSxwYXI9ZmFyKGZ1bmN0aW9uKGUsdCl7aWYoZT09bnVsbClyZXR1cm5bXTt2YXIgcj10Lmxlbmd0aDtyZXR1cm4gcj4xJiZRb2UoZSx0WzBdLHRbMV0pP3Q9W106cj4yJiZRb2UodFswXSx0WzFdLHRbMl0pJiYodD1bdFswXV0pLGhhcihlLHVhcih0LDEpLFtdKX0pO3RhZS5leHBvcnRzPXBhcn0pO3ZhciBuYWU9SCgoekpuLHJhZSk9Pnt2YXIgZGFyPWpzdCgpLG1hcj0wO2Z1bmN0aW9uIGdhcihlKXt2YXIgdD0rK21hcjtyZXR1cm4gZGFyKGUpK3R9cmFlLmV4cG9ydHM9Z2FyfSk7dmFyIG9hZT1IKChGSm4saWFlKT0+e2Z1bmN0aW9uIF9hcihlLHQscil7Zm9yKHZhciBuPS0xLGk9ZS5sZW5ndGgsbz10Lmxlbmd0aCxhPXt9OysrbjxpOyl7dmFyIHM9bjxvP3Rbbl06dm9pZCAwO3IoYSxlW25dLHMpfXJldHVybiBhfWlhZS5leHBvcnRzPV9hcn0pO3ZhciBzYWU9SCgoQkpuLGFhZSk9Pnt2YXIgeWFyPUk0KCkseGFyPW9hZSgpO2Z1bmN0aW9uIGJhcihlLHQpe3JldHVybiB4YXIoZXx8W10sdHx8W10seWFyKX1hYWUuZXhwb3J0cz1iYXJ9KTt2YXIgcW49SCgoSEpuLGxhZSk9Pnt2YXIgc0g7aWYodHlwZW9mIEV4PT0iZnVuY3Rpb24iKXRyeXtzSD17Y2xvbmVEZWVwOnZpZSgpLGNvbnN0YW50OllCKCksZGVmYXVsdHM6U2llKCksZWFjaDp6c3QoKSxmaWx0ZXI6WnN0KCksZmluZDpWaWUoKSxmbGF0dGVuOnlsdCgpLGZvckVhY2g6T3N0KCksZm9ySW46R2llKCksaGFzOkpzdCgpLGlzVW5kZWZpbmVkOlFzdCgpLGxhc3Q6WWllKCksbWFwOmVsdCgpLG1hcFZhbHVlczpYaWUoKSxtYXg6UWllKCksbWVyZ2U6dm9lKCksbWluOndvZSgpLG1pbkJ5Ok1vZSgpLG5vdzpUb2UoKSxwaWNrOnpvZSgpLHJhbmdlOnFvZSgpLHJlZHVjZTpybHQoKSxzb3J0Qnk6ZWFlKCksdW5pcXVlSWQ6bmFlKCksdmFsdWVzOnVsdCgpLHppcE9iamVjdDpzYWUoKX19Y2F0Y2goZSl7fXNIfHwoc0g9d2luZG93Ll8pO2xhZS5leHBvcnRzPXNIfSk7dmFyIGhhZT1IKChVSm4sdWFlKT0+e3VhZS5leHBvcnRzPWxIO2Z1bmN0aW9uIGxIKCl7dmFyIGU9e307ZS5fbmV4dD1lLl9wcmV2PWUsdGhpcy5fc2VudGluZWw9ZX1sSC5wcm90b3R5cGUuZGVxdWV1ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3NlbnRpbmVsLHQ9ZS5fcHJldjtpZih0IT09ZSlyZXR1cm4gY2FlKHQpLHR9O2xILnByb3RvdHlwZS5lbnF1ZXVlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NlbnRpbmVsO2UuX3ByZXYmJmUuX25leHQmJmNhZShlKSxlLl9uZXh0PXQuX25leHQsdC5fbmV4dC5fcHJldj1lLHQuX25leHQ9ZSxlLl9wcmV2PXR9O2xILnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PXRoaXMuX3NlbnRpbmVsLHI9dC5fcHJldjtyIT09dDspZS5wdXNoKEpTT04uc3RyaW5naWZ5KHIsd2FyKSkscj1yLl9wcmV2O3JldHVybiJbIitlLmpvaW4oIiwgIikrIl0ifTtmdW5jdGlvbiBjYWUoZSl7ZS5fcHJldi5fbmV4dD1lLl9uZXh0LGUuX25leHQuX3ByZXY9ZS5fcHJldixkZWxldGUgZS5fbmV4dCxkZWxldGUgZS5fcHJldn1mdW5jdGlvbiB3YXIoZSx0KXtpZihlIT09Il9uZXh0IiYmZSE9PSJfcHJldiIpcmV0dXJuIHR9fSk7dmFyIHBhZT1IKChxSm4sZmFlKT0+e3ZhciBQZD1xbigpLFNhcj1VYygpLkdyYXBoLE1hcj1oYWUoKTtmYWUuZXhwb3J0cz1UYXI7dmFyIEVhcj1QZC5jb25zdGFudCgxKTtmdW5jdGlvbiBUYXIoZSx0KXtpZihlLm5vZGVDb3VudCgpPD0xKXJldHVybltdO3ZhciByPUFhcihlLHR8fEVhciksbj1DYXIoci5ncmFwaCxyLmJ1Y2tldHMsci56ZXJvSWR4KTtyZXR1cm4gUGQuZmxhdHRlbihQZC5tYXAobixmdW5jdGlvbihpKXtyZXR1cm4gZS5vdXRFZGdlcyhpLnYsaS53KX0pLCEwKX1mdW5jdGlvbiBDYXIoZSx0LHIpe2Zvcih2YXIgbj1bXSxpPXRbdC5sZW5ndGgtMV0sbz10WzBdLGE7ZS5ub2RlQ291bnQoKTspe2Zvcig7YT1vLmRlcXVldWUoKTspTWx0KGUsdCxyLGEpO2Zvcig7YT1pLmRlcXVldWUoKTspTWx0KGUsdCxyLGEpO2lmKGUubm9kZUNvdW50KCkpe2Zvcih2YXIgcz10Lmxlbmd0aC0yO3M+MDstLXMpaWYoYT10W3NdLmRlcXVldWUoKSxhKXtuPW4uY29uY2F0KE1sdChlLHQscixhLCEwKSk7YnJlYWt9fX1yZXR1cm4gbn1mdW5jdGlvbiBNbHQoZSx0LHIsbixpKXt2YXIgbz1pP1tdOnZvaWQgMDtyZXR1cm4gUGQuZm9yRWFjaChlLmluRWRnZXMobi52KSxmdW5jdGlvbihhKXt2YXIgcz1lLmVkZ2UoYSksbD1lLm5vZGUoYS52KTtpJiZvLnB1c2goe3Y6YS52LHc6YS53fSksbC5vdXQtPXMsRWx0KHQscixsKX0pLFBkLmZvckVhY2goZS5vdXRFZGdlcyhuLnYpLGZ1bmN0aW9uKGEpe3ZhciBzPWUuZWRnZShhKSxsPWEudyxjPWUubm9kZShsKTtjLmluLT1zLEVsdCh0LHIsYyl9KSxlLnJlbW92ZU5vZGUobi52KSxvfWZ1bmN0aW9uIEFhcihlLHQpe3ZhciByPW5ldyBTYXIsbj0wLGk9MDtQZC5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihzKXtyLnNldE5vZGUocyx7djpzLGluOjAsb3V0OjB9KX0pLFBkLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHMpe3ZhciBsPXIuZWRnZShzLnYscy53KXx8MCxjPXQocyksdT1sK2M7ci5zZXRFZGdlKHMudixzLncsdSksaT1NYXRoLm1heChpLHIubm9kZShzLnYpLm91dCs9Yyksbj1NYXRoLm1heChuLHIubm9kZShzLncpLmluKz1jKX0pO3ZhciBvPVBkLnJhbmdlKGkrbiszKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE1hcn0pLGE9bisxO3JldHVybiBQZC5mb3JFYWNoKHIubm9kZXMoKSxmdW5jdGlvbihzKXtFbHQobyxhLHIubm9kZShzKSl9KSx7Z3JhcGg6cixidWNrZXRzOm8semVyb0lkeDphfX1mdW5jdGlvbiBFbHQoZSx0LHIpe3Iub3V0P3IuaW4/ZVtyLm91dC1yLmluK3RdLmVucXVldWUocik6ZVtlLmxlbmd0aC0xXS5lbnF1ZXVlKHIpOmVbMF0uZW5xdWV1ZShyKX19KTt2YXIgbWFlPUgoKEdKbixkYWUpPT57InVzZSBzdHJpY3QiO3ZhciBRMT1xbigpLFBhcj1wYWUoKTtkYWUuZXhwb3J0cz17cnVuOklhcix1bmRvOmthcn07ZnVuY3Rpb24gSWFyKGUpe3ZhciB0PWUuZ3JhcGgoKS5hY3ljbGljZXI9PT0iZ3JlZWR5Ij9QYXIoZSxyKGUpKTpMYXIoZSk7UTEuZm9yRWFjaCh0LGZ1bmN0aW9uKG4pe3ZhciBpPWUuZWRnZShuKTtlLnJlbW92ZUVkZ2UobiksaS5mb3J3YXJkTmFtZT1uLm5hbWUsaS5yZXZlcnNlZD0hMCxlLnNldEVkZ2Uobi53LG4udixpLFExLnVuaXF1ZUlkKCJyZXYiKSl9KTtmdW5jdGlvbiByKG4pe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gbi5lZGdlKGkpLndlaWdodH19fWZ1bmN0aW9uIExhcihlKXt2YXIgdD1bXSxyPXt9LG49e307ZnVuY3Rpb24gaShvKXtRMS5oYXMobixvKXx8KG5bb109ITAscltvXT0hMCxRMS5mb3JFYWNoKGUub3V0RWRnZXMobyksZnVuY3Rpb24oYSl7UTEuaGFzKHIsYS53KT90LnB1c2goYSk6aShhLncpfSksZGVsZXRlIHJbb10pfXJldHVybiBRMS5mb3JFYWNoKGUubm9kZXMoKSxpKSx0fWZ1bmN0aW9uIGthcihlKXtRMS5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoci5yZXZlcnNlZCl7ZS5yZW1vdmVFZGdlKHQpO3ZhciBuPXIuZm9yd2FyZE5hbWU7ZGVsZXRlIHIucmV2ZXJzZWQsZGVsZXRlIHIuZm9yd2FyZE5hbWUsZS5zZXRFZGdlKHQudyx0LnYscixuKX19KX19KTt2YXIgbnM9SCgoV0puLHZhZSk9PnsidXNlIHN0cmljdCI7dmFyIFFyPXFuKCksZ2FlPVVjKCkuR3JhcGg7dmFlLmV4cG9ydHM9e2FkZER1bW15Tm9kZTpfYWUsc2ltcGxpZnk6UmFyLGFzTm9uQ29tcG91bmRHcmFwaDpOYXIsc3VjY2Vzc29yV2VpZ2h0czpEYXIscHJlZGVjZXNzb3JXZWlnaHRzOk9hcixpbnRlcnNlY3RSZWN0OnphcixidWlsZExheWVyTWF0cml4OkZhcixub3JtYWxpemVSYW5rczpCYXIscmVtb3ZlRW1wdHlSYW5rczpIYXIsYWRkQm9yZGVyTm9kZTpWYXIsbWF4UmFuazp5YWUscGFydGl0aW9uOlVhcix0aW1lOnFhcixub3RpbWU6R2FyfTtmdW5jdGlvbiBfYWUoZSx0LHIsbil7dmFyIGk7ZG8gaT1Rci51bmlxdWVJZChuKTt3aGlsZShlLmhhc05vZGUoaSkpO3JldHVybiByLmR1bW15PXQsZS5zZXROb2RlKGksciksaX1mdW5jdGlvbiBSYXIoZSl7dmFyIHQ9bmV3IGdhZSgpLnNldEdyYXBoKGUuZ3JhcGgoKSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3Quc2V0Tm9kZShyLGUubm9kZShyKSl9KSxRci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihyKXt2YXIgbj10LmVkZ2Uoci52LHIudyl8fHt3ZWlnaHQ6MCxtaW5sZW46MX0saT1lLmVkZ2Uocik7dC5zZXRFZGdlKHIudixyLncse3dlaWdodDpuLndlaWdodCtpLndlaWdodCxtaW5sZW46TWF0aC5tYXgobi5taW5sZW4saS5taW5sZW4pfSl9KSx0fWZ1bmN0aW9uIE5hcihlKXt2YXIgdD1uZXcgZ2FlKHttdWx0aWdyYXBoOmUuaXNNdWx0aWdyYXBoKCl9KS5zZXRHcmFwaChlLmdyYXBoKCkpO3JldHVybiBRci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXtlLmNoaWxkcmVuKHIpLmxlbmd0aHx8dC5zZXROb2RlKHIsZS5ub2RlKHIpKX0pLFFyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHIpe3Quc2V0RWRnZShyLGUuZWRnZShyKSl9KSx0fWZ1bmN0aW9uIERhcihlKXt2YXIgdD1Rci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPXt9O3JldHVybiBRci5mb3JFYWNoKGUub3V0RWRnZXMociksZnVuY3Rpb24oaSl7bltpLnddPShuW2kud118fDApK2UuZWRnZShpKS53ZWlnaHR9KSxufSk7cmV0dXJuIFFyLnppcE9iamVjdChlLm5vZGVzKCksdCl9ZnVuY3Rpb24gT2FyKGUpe3ZhciB0PVFyLm1hcChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49e307cmV0dXJuIFFyLmZvckVhY2goZS5pbkVkZ2VzKHIpLGZ1bmN0aW9uKGkpe25baS52XT0obltpLnZdfHwwKStlLmVkZ2UoaSkud2VpZ2h0fSksbn0pO3JldHVybiBRci56aXBPYmplY3QoZS5ub2RlcygpLHQpfWZ1bmN0aW9uIHphcihlLHQpe3ZhciByPWUueCxuPWUueSxpPXQueC1yLG89dC55LW4sYT1lLndpZHRoLzIscz1lLmhlaWdodC8yO2lmKCFpJiYhbyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBwb3NzaWJsZSB0byBmaW5kIGludGVyc2VjdGlvbiBpbnNpZGUgb2YgdGhlIHJlY3RhbmdsZSIpO3ZhciBsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmE+TWF0aC5hYnMoaSkqcz8obzwwJiYocz0tcyksbD1zKmkvbyxjPXMpOihpPDAmJihhPS1hKSxsPWEsYz1hKm8vaSkse3g6citsLHk6bitjfX1mdW5jdGlvbiBGYXIoZSl7dmFyIHQ9UXIubWFwKFFyLnJhbmdlKHlhZShlKSsxKSxmdW5jdGlvbigpe3JldHVybltdfSk7cmV0dXJuIFFyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKSxpPW4ucmFuaztRci5pc1VuZGVmaW5lZChpKXx8KHRbaV1bbi5vcmRlcl09cil9KSx0fWZ1bmN0aW9uIEJhcihlKXt2YXIgdD1Rci5taW4oUXIubWFwKGUubm9kZXMoKSxmdW5jdGlvbihyKXtyZXR1cm4gZS5ub2RlKHIpLnJhbmt9KSk7UXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5ub2RlKHIpO1FyLmhhcyhuLCJyYW5rIikmJihuLnJhbmstPXQpfSl9ZnVuY3Rpb24gSGFyKGUpe3ZhciB0PVFyLm1pbihRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKG8pe3JldHVybiBlLm5vZGUobykucmFua30pKSxyPVtdO1FyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG8pe3ZhciBhPWUubm9kZShvKS5yYW5rLXQ7clthXXx8KHJbYV09W10pLHJbYV0ucHVzaChvKX0pO3ZhciBuPTAsaT1lLmdyYXBoKCkubm9kZVJhbmtGYWN0b3I7UXIuZm9yRWFjaChyLGZ1bmN0aW9uKG8sYSl7UXIuaXNVbmRlZmluZWQobykmJmElaSE9PTA/LS1uOm4mJlFyLmZvckVhY2gobyxmdW5jdGlvbihzKXtlLm5vZGUocykucmFuays9bn0pfSl9ZnVuY3Rpb24gVmFyKGUsdCxyLG4pe3ZhciBpPXt3aWR0aDowLGhlaWdodDowfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49NCYmKGkucmFuaz1yLGkub3JkZXI9biksX2FlKGUsImJvcmRlciIsaSx0KX1mdW5jdGlvbiB5YWUoZSl7cmV0dXJuIFFyLm1heChRci5tYXAoZS5ub2RlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUubm9kZSh0KS5yYW5rO2lmKCFRci5pc1VuZGVmaW5lZChyKSlyZXR1cm4gcn0pKX1mdW5jdGlvbiBVYXIoZSx0KXt2YXIgcj17bGhzOltdLHJoczpbXX07cmV0dXJuIFFyLmZvckVhY2goZSxmdW5jdGlvbihuKXt0KG4pP3IubGhzLnB1c2gobik6ci5yaHMucHVzaChuKX0pLHJ9ZnVuY3Rpb24gcWFyKGUsdCl7dmFyIHI9UXIubm93KCk7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtjb25zb2xlLmxvZyhlKyIgdGltZTogIisoUXIubm93KCktcikrIm1zIil9fWZ1bmN0aW9uIEdhcihlLHQpe3JldHVybiB0KCl9fSk7dmFyIHdhZT1IKChZSm4sYmFlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeGFlPXFuKCksV2FyPW5zKCk7YmFlLmV4cG9ydHM9e3J1bjpZYXIsdW5kbzpYYXJ9O2Z1bmN0aW9uIFlhcihlKXtlLmdyYXBoKCkuZHVtbXlDaGFpbnM9W10seGFlLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe2phcihlLHQpfSl9ZnVuY3Rpb24gamFyKGUsdCl7dmFyIHI9dC52LG49ZS5ub2RlKHIpLnJhbmssaT10Lncsbz1lLm5vZGUoaSkucmFuayxhPXQubmFtZSxzPWUuZWRnZSh0KSxsPXMubGFiZWxSYW5rO2lmKG8hPT1uKzEpe2UucmVtb3ZlRWRnZSh0KTt2YXIgYyx1LGg7Zm9yKGg9MCwrK247bjxvOysraCwrK24pcy5wb2ludHM9W10sdT17d2lkdGg6MCxoZWlnaHQ6MCxlZGdlTGFiZWw6cyxlZGdlT2JqOnQscmFuazpufSxjPVdhci5hZGREdW1teU5vZGUoZSwiZWRnZSIsdSwiX2QiKSxuPT09bCYmKHUud2lkdGg9cy53aWR0aCx1LmhlaWdodD1zLmhlaWdodCx1LmR1bW15PSJlZGdlLWxhYmVsIix1LmxhYmVscG9zPXMubGFiZWxwb3MpLGUuc2V0RWRnZShyLGMse3dlaWdodDpzLndlaWdodH0sYSksaD09PTAmJmUuZ3JhcGgoKS5kdW1teUNoYWlucy5wdXNoKGMpLHI9YztlLnNldEVkZ2UocixpLHt3ZWlnaHQ6cy53ZWlnaHR9LGEpfX1mdW5jdGlvbiBYYXIoZSl7eGFlLmZvckVhY2goZS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHQpe3ZhciByPWUubm9kZSh0KSxuPXIuZWRnZUxhYmVsLGk7Zm9yKGUuc2V0RWRnZShyLmVkZ2VPYmosbik7ci5kdW1teTspaT1lLnN1Y2Nlc3NvcnModClbMF0sZS5yZW1vdmVOb2RlKHQpLG4ucG9pbnRzLnB1c2goe3g6ci54LHk6ci55fSksci5kdW1teT09PSJlZGdlLWxhYmVsIiYmKG4ueD1yLngsbi55PXIueSxuLndpZHRoPXIud2lkdGgsbi5oZWlnaHQ9ci5oZWlnaHQpLHQ9aSxyPWUubm9kZSh0KX0pfX0pO3ZhciBqND1IKChqSm4sU2FlKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgY0g9cW4oKTtTYWUuZXhwb3J0cz17bG9uZ2VzdFBhdGg6JGFyLHNsYWNrOkthcn07ZnVuY3Rpb24gJGFyKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobil7dmFyIGk9ZS5ub2RlKG4pO2lmKGNILmhhcyh0LG4pKXJldHVybiBpLnJhbms7dFtuXT0hMDt2YXIgbz1jSC5taW4oY0gubWFwKGUub3V0RWRnZXMobiksZnVuY3Rpb24oYSl7cmV0dXJuIHIoYS53KS1lLmVkZ2UoYSkubWlubGVufSkpO3JldHVybihvPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZfHxvPT09dm9pZCAwfHxvPT09bnVsbCkmJihvPTApLGkucmFuaz1vfWNILmZvckVhY2goZS5zb3VyY2VzKCkscil9ZnVuY3Rpb24gS2FyKGUsdCl7cmV0dXJuIGUubm9kZSh0LncpLnJhbmstZS5ub2RlKHQudikucmFuay1lLmVkZ2UodCkubWlubGVufX0pO3ZhciBUbHQ9SCgoWEpuLE1hZSk9PnsidXNlIHN0cmljdCI7dmFyIHVIPXFuKCksWmFyPVVjKCkuR3JhcGgsaEg9ajQoKS5zbGFjaztNYWUuZXhwb3J0cz1KYXI7ZnVuY3Rpb24gSmFyKGUpe3ZhciB0PW5ldyBaYXIoe2RpcmVjdGVkOiExfSkscj1lLm5vZGVzKClbMF0sbj1lLm5vZGVDb3VudCgpO3Quc2V0Tm9kZShyLHt9KTtmb3IodmFyIGksbztRYXIodCxlKTxuOylpPXRzcih0LGUpLG89dC5oYXNOb2RlKGkudik/aEgoZSxpKTotaEgoZSxpKSxlc3IodCxlLG8pO3JldHVybiB0fWZ1bmN0aW9uIFFhcihlLHQpe2Z1bmN0aW9uIHIobil7dUguZm9yRWFjaCh0Lm5vZGVFZGdlcyhuKSxmdW5jdGlvbihpKXt2YXIgbz1pLnYsYT1uPT09bz9pLnc6bzshZS5oYXNOb2RlKGEpJiYhaEgodCxpKSYmKGUuc2V0Tm9kZShhLHt9KSxlLnNldEVkZ2UobixhLHt9KSxyKGEpKX0pfXJldHVybiB1SC5mb3JFYWNoKGUubm9kZXMoKSxyKSxlLm5vZGVDb3VudCgpfWZ1bmN0aW9uIHRzcihlLHQpe3JldHVybiB1SC5taW5CeSh0LmVkZ2VzKCksZnVuY3Rpb24ocil7aWYoZS5oYXNOb2RlKHIudikhPT1lLmhhc05vZGUoci53KSlyZXR1cm4gaEgodCxyKX0pfWZ1bmN0aW9uIGVzcihlLHQscil7dUguZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24obil7dC5ub2RlKG4pLnJhbmsrPXJ9KX19KTt2YXIga2FlPUgoKCRKbixMYWUpPT57InVzZSBzdHJpY3QiO3ZhciBJZD1xbigpLHJzcj1UbHQoKSxuc3I9ajQoKS5zbGFjayxpc3I9ajQoKS5sb25nZXN0UGF0aCxvc3I9VWMoKS5hbGcucHJlb3JkZXIsYXNyPVVjKCkuYWxnLnBvc3RvcmRlcixzc3I9bnMoKS5zaW1wbGlmeTtMYWUuZXhwb3J0cz10djt0di5pbml0TG93TGltVmFsdWVzPUFsdDt0di5pbml0Q3V0VmFsdWVzPUNsdDt0di5jYWxjQ3V0VmFsdWU9VGFlO3R2LmxlYXZlRWRnZT1BYWU7dHYuZW50ZXJFZGdlPVBhZTt0di5leGNoYW5nZUVkZ2VzPUlhZTtmdW5jdGlvbiB0dihlKXtlPXNzcihlKSxpc3IoZSk7dmFyIHQ9cnNyKGUpO0FsdCh0KSxDbHQodCxlKTtmb3IodmFyIHIsbjtyPUFhZSh0KTspbj1QYWUodCxlLHIpLElhZSh0LGUscixuKX1mdW5jdGlvbiBDbHQoZSx0KXt2YXIgcj1hc3IoZSxlLm5vZGVzKCkpO3I9ci5zbGljZSgwLHIubGVuZ3RoLTEpLElkLmZvckVhY2gocixmdW5jdGlvbihuKXtsc3IoZSx0LG4pfSl9ZnVuY3Rpb24gbHNyKGUsdCxyKXt2YXIgbj1lLm5vZGUociksaT1uLnBhcmVudDtlLmVkZ2UocixpKS5jdXR2YWx1ZT1UYWUoZSx0LHIpfWZ1bmN0aW9uIFRhZShlLHQscil7dmFyIG49ZS5ub2RlKHIpLGk9bi5wYXJlbnQsbz0hMCxhPXQuZWRnZShyLGkpLHM9MDtyZXR1cm4gYXx8KG89ITEsYT10LmVkZ2UoaSxyKSkscz1hLndlaWdodCxJZC5mb3JFYWNoKHQubm9kZUVkZ2VzKHIpLGZ1bmN0aW9uKGwpe3ZhciBjPWwudj09PXIsdT1jP2wudzpsLnY7aWYodSE9PWkpe3ZhciBoPWM9PT1vLGY9dC5lZGdlKGwpLndlaWdodDtpZihzKz1oP2Y6LWYsdXNyKGUscix1KSl7dmFyIHA9ZS5lZGdlKHIsdSkuY3V0dmFsdWU7cys9aD8tcDpwfX19KSxzfWZ1bmN0aW9uIEFsdChlLHQpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9ZS5ub2RlcygpWzBdKSxDYWUoZSx7fSwxLHQpfWZ1bmN0aW9uIENhZShlLHQscixuLGkpe3ZhciBvPXIsYT1lLm5vZGUobik7cmV0dXJuIHRbbl09ITAsSWQuZm9yRWFjaChlLm5laWdoYm9ycyhuKSxmdW5jdGlvbihzKXtJZC5oYXModCxzKXx8KHI9Q2FlKGUsdCxyLHMsbikpfSksYS5sb3c9byxhLmxpbT1yKyssaT9hLnBhcmVudD1pOmRlbGV0ZSBhLnBhcmVudCxyfWZ1bmN0aW9uIEFhZShlKXtyZXR1cm4gSWQuZmluZChlLmVkZ2VzKCksZnVuY3Rpb24odCl7cmV0dXJuIGUuZWRnZSh0KS5jdXR2YWx1ZTwwfSl9ZnVuY3Rpb24gUGFlKGUsdCxyKXt2YXIgbj1yLnYsaT1yLnc7dC5oYXNFZGdlKG4saSl8fChuPXIudyxpPXIudik7dmFyIG89ZS5ub2RlKG4pLGE9ZS5ub2RlKGkpLHM9byxsPSExO28ubGltPmEubGltJiYocz1hLGw9ITApO3ZhciBjPUlkLmZpbHRlcih0LmVkZ2VzKCksZnVuY3Rpb24odSl7cmV0dXJuIGw9PT1FYWUoZSxlLm5vZGUodS52KSxzKSYmbCE9PUVhZShlLGUubm9kZSh1LncpLHMpfSk7cmV0dXJuIElkLm1pbkJ5KGMsZnVuY3Rpb24odSl7cmV0dXJuIG5zcih0LHUpfSl9ZnVuY3Rpb24gSWFlKGUsdCxyLG4pe3ZhciBpPXIudixvPXIudztlLnJlbW92ZUVkZ2UoaSxvKSxlLnNldEVkZ2Uobi52LG4udyx7fSksQWx0KGUpLENsdChlLHQpLGNzcihlLHQpfWZ1bmN0aW9uIGNzcihlLHQpe3ZhciByPUlkLmZpbmQoZS5ub2RlcygpLGZ1bmN0aW9uKGkpe3JldHVybiF0Lm5vZGUoaSkucGFyZW50fSksbj1vc3IoZSxyKTtuPW4uc2xpY2UoMSksSWQuZm9yRWFjaChuLGZ1bmN0aW9uKGkpe3ZhciBvPWUubm9kZShpKS5wYXJlbnQsYT10LmVkZ2UoaSxvKSxzPSExO2F8fChhPXQuZWRnZShvLGkpLHM9ITApLHQubm9kZShpKS5yYW5rPXQubm9kZShvKS5yYW5rKyhzP2EubWlubGVuOi1hLm1pbmxlbil9KX1mdW5jdGlvbiB1c3IoZSx0LHIpe3JldHVybiBlLmhhc0VkZ2UodCxyKX1mdW5jdGlvbiBFYWUoZSx0LHIpe3JldHVybiByLmxvdzw9dC5saW0mJnQubGltPD1yLmxpbX19KTt2YXIgT2FlPUgoKEtKbixEYWUpPT57InVzZSBzdHJpY3QiO3ZhciBoc3I9ajQoKSxOYWU9aHNyLmxvbmdlc3RQYXRoLGZzcj1UbHQoKSxwc3I9a2FlKCk7RGFlLmV4cG9ydHM9ZHNyO2Z1bmN0aW9uIGRzcihlKXtzd2l0Y2goZS5ncmFwaCgpLnJhbmtlcil7Y2FzZSJuZXR3b3JrLXNpbXBsZXgiOlJhZShlKTticmVhaztjYXNlInRpZ2h0LXRyZWUiOmdzcihlKTticmVhaztjYXNlImxvbmdlc3QtcGF0aCI6bXNyKGUpO2JyZWFrO2RlZmF1bHQ6UmFlKGUpfX12YXIgbXNyPU5hZTtmdW5jdGlvbiBnc3IoZSl7TmFlKGUpLGZzcihlKX1mdW5jdGlvbiBSYWUoZSl7cHNyKGUpfX0pO3ZhciBGYWU9SCgoWkpuLHphZSk9Pnt2YXIgUGx0PXFuKCk7emFlLmV4cG9ydHM9X3NyO2Z1bmN0aW9uIF9zcihlKXt2YXIgdD12c3IoZSk7UGx0LmZvckVhY2goZS5ncmFwaCgpLmR1bW15Q2hhaW5zLGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1lLm5vZGUociksaT1uLmVkZ2VPYmosbz15c3IoZSx0LGkudixpLncpLGE9by5wYXRoLHM9by5sY2EsbD0wLGM9YVtsXSx1PSEwO3IhPT1pLnc7KXtpZihuPWUubm9kZShyKSx1KXtmb3IoOyhjPWFbbF0pIT09cyYmZS5ub2RlKGMpLm1heFJhbms8bi5yYW5rOylsKys7Yz09PXMmJih1PSExKX1pZighdSl7Zm9yKDtsPGEubGVuZ3RoLTEmJmUubm9kZShjPWFbbCsxXSkubWluUmFuazw9bi5yYW5rOylsKys7Yz1hW2xdfWUuc2V0UGFyZW50KHIsYykscj1lLnN1Y2Nlc3NvcnMocilbMF19fSl9ZnVuY3Rpb24geXNyKGUsdCxyLG4pe3ZhciBpPVtdLG89W10sYT1NYXRoLm1pbih0W3JdLmxvdyx0W25dLmxvdykscz1NYXRoLm1heCh0W3JdLmxpbSx0W25dLmxpbSksbCxjO2w9cjtkbyBsPWUucGFyZW50KGwpLGkucHVzaChsKTt3aGlsZShsJiYodFtsXS5sb3c+YXx8cz50W2xdLmxpbSkpO2ZvcihjPWwsbD1uOyhsPWUucGFyZW50KGwpKSE9PWM7KW8ucHVzaChsKTtyZXR1cm57cGF0aDppLmNvbmNhdChvLnJldmVyc2UoKSksbGNhOmN9fWZ1bmN0aW9uIHZzcihlKXt2YXIgdD17fSxyPTA7ZnVuY3Rpb24gbihpKXt2YXIgbz1yO1BsdC5mb3JFYWNoKGUuY2hpbGRyZW4oaSksbiksdFtpXT17bG93Om8sbGltOnIrK319cmV0dXJuIFBsdC5mb3JFYWNoKGUuY2hpbGRyZW4oKSxuKSx0fX0pO3ZhciBWYWU9SCgoSkpuLEhhZSk9Pnt2YXIgTGQ9cW4oKSxJbHQ9bnMoKTtIYWUuZXhwb3J0cz17cnVuOnhzcixjbGVhbnVwOlNzcn07ZnVuY3Rpb24geHNyKGUpe3ZhciB0PUlsdC5hZGREdW1teU5vZGUoZSwicm9vdCIse30sIl9yb290Iikscj1ic3IoZSksbj1MZC5tYXgoTGQudmFsdWVzKHIpKS0xLGk9MipuKzE7ZS5ncmFwaCgpLm5lc3RpbmdSb290PXQsTGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24oYSl7ZS5lZGdlKGEpLm1pbmxlbio9aX0pO3ZhciBvPXdzcihlKSsxO0xkLmZvckVhY2goZS5jaGlsZHJlbigpLGZ1bmN0aW9uKGEpe0JhZShlLHQsaSxvLG4scixhKX0pLGUuZ3JhcGgoKS5ub2RlUmFua0ZhY3Rvcj1pfWZ1bmN0aW9uIEJhZShlLHQscixuLGksbyxhKXt2YXIgcz1lLmNoaWxkcmVuKGEpO2lmKCFzLmxlbmd0aCl7YSE9PXQmJmUuc2V0RWRnZSh0LGEse3dlaWdodDowLG1pbmxlbjpyfSk7cmV0dXJufXZhciBsPUlsdC5hZGRCb3JkZXJOb2RlKGUsIl9idCIpLGM9SWx0LmFkZEJvcmRlck5vZGUoZSwiX2JiIiksdT1lLm5vZGUoYSk7ZS5zZXRQYXJlbnQobCxhKSx1LmJvcmRlclRvcD1sLGUuc2V0UGFyZW50KGMsYSksdS5ib3JkZXJCb3R0b209YyxMZC5mb3JFYWNoKHMsZnVuY3Rpb24oaCl7QmFlKGUsdCxyLG4saSxvLGgpO3ZhciBmPWUubm9kZShoKSxwPWYuYm9yZGVyVG9wP2YuYm9yZGVyVG9wOmgsZD1mLmJvcmRlckJvdHRvbT9mLmJvcmRlckJvdHRvbTpoLGc9Zi5ib3JkZXJUb3A/bjoyKm4sXz1wIT09ZD8xOmktb1thXSsxO2Uuc2V0RWRnZShsLHAse3dlaWdodDpnLG1pbmxlbjpfLG5lc3RpbmdFZGdlOiEwfSksZS5zZXRFZGdlKGQsYyx7d2VpZ2h0OmcsbWlubGVuOl8sbmVzdGluZ0VkZ2U6ITB9KX0pLGUucGFyZW50KGEpfHxlLnNldEVkZ2UodCxsLHt3ZWlnaHQ6MCxtaW5sZW46aStvW2FdfSl9ZnVuY3Rpb24gYnNyKGUpe3ZhciB0PXt9O2Z1bmN0aW9uIHIobixpKXt2YXIgbz1lLmNoaWxkcmVuKG4pO28mJm8ubGVuZ3RoJiZMZC5mb3JFYWNoKG8sZnVuY3Rpb24oYSl7cihhLGkrMSl9KSx0W25dPWl9cmV0dXJuIExkLmZvckVhY2goZS5jaGlsZHJlbigpLGZ1bmN0aW9uKG4pe3IobiwxKX0pLHR9ZnVuY3Rpb24gd3NyKGUpe3JldHVybiBMZC5yZWR1Y2UoZS5lZGdlcygpLGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrZS5lZGdlKHIpLndlaWdodH0sMCl9ZnVuY3Rpb24gU3NyKGUpe3ZhciB0PWUuZ3JhcGgoKTtlLnJlbW92ZU5vZGUodC5uZXN0aW5nUm9vdCksZGVsZXRlIHQubmVzdGluZ1Jvb3QsTGQuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIpO24ubmVzdGluZ0VkZ2UmJmUucmVtb3ZlRWRnZShyKX0pfX0pO3ZhciBHYWU9SCgoUUpuLHFhZSk9Pnt2YXIgTGx0PXFuKCksTXNyPW5zKCk7cWFlLmV4cG9ydHM9RXNyO2Z1bmN0aW9uIEVzcihlKXtmdW5jdGlvbiB0KHIpe3ZhciBuPWUuY2hpbGRyZW4ociksaT1lLm5vZGUocik7aWYobi5sZW5ndGgmJkxsdC5mb3JFYWNoKG4sdCksTGx0LmhhcyhpLCJtaW5SYW5rIikpe2kuYm9yZGVyTGVmdD1bXSxpLmJvcmRlclJpZ2h0PVtdO2Zvcih2YXIgbz1pLm1pblJhbmssYT1pLm1heFJhbmsrMTtvPGE7KytvKVVhZShlLCJib3JkZXJMZWZ0IiwiX2JsIixyLGksbyksVWFlKGUsImJvcmRlclJpZ2h0IiwiX2JyIixyLGksbyl9fUxsdC5mb3JFYWNoKGUuY2hpbGRyZW4oKSx0KX1mdW5jdGlvbiBVYWUoZSx0LHIsbixpLG8pe3ZhciBhPXt3aWR0aDowLGhlaWdodDowLHJhbms6byxib3JkZXJUeXBlOnR9LHM9aVt0XVtvLTFdLGw9TXNyLmFkZER1bW15Tm9kZShlLCJib3JkZXIiLGEscik7aVt0XVtvXT1sLGUuc2V0UGFyZW50KGwsbikscyYmZS5zZXRFZGdlKHMsbCx7d2VpZ2h0OjF9KX19KTt2YXIgWGFlPUgoKHRRbixqYWUpPT57InVzZSBzdHJpY3QiO3ZhciBVZj1xbigpO2phZS5leHBvcnRzPXthZGp1c3Q6VHNyLHVuZG86Q3NyfTtmdW5jdGlvbiBUc3IoZSl7dmFyIHQ9ZS5ncmFwaCgpLnJhbmtkaXIudG9Mb3dlckNhc2UoKTsodD09PSJsciJ8fHQ9PT0icmwiKSYmWWFlKGUpfWZ1bmN0aW9uIENzcihlKXt2YXIgdD1lLmdyYXBoKCkucmFua2Rpci50b0xvd2VyQ2FzZSgpOyh0PT09ImJ0Inx8dD09PSJybCIpJiZBc3IoZSksKHQ9PT0ibHIifHx0PT09InJsIikmJihQc3IoZSksWWFlKGUpKX1mdW5jdGlvbiBZYWUoZSl7VWYuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7V2FlKGUubm9kZSh0KSl9KSxVZi5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXtXYWUoZS5lZGdlKHQpKX0pfWZ1bmN0aW9uIFdhZShlKXt2YXIgdD1lLndpZHRoO2Uud2lkdGg9ZS5oZWlnaHQsZS5oZWlnaHQ9dH1mdW5jdGlvbiBBc3IoZSl7VWYuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7a2x0KGUubm9kZSh0KSl9KSxVZi5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7VWYuZm9yRWFjaChyLnBvaW50cyxrbHQpLFVmLmhhcyhyLCJ5IikmJmtsdChyKX0pfWZ1bmN0aW9uIGtsdChlKXtlLnk9LWUueX1mdW5jdGlvbiBQc3IoZSl7VWYuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7Umx0KGUubm9kZSh0KSl9KSxVZi5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7VWYuZm9yRWFjaChyLnBvaW50cyxSbHQpLFVmLmhhcyhyLCJ4IikmJlJsdChyKX0pfWZ1bmN0aW9uIFJsdChlKXt2YXIgdD1lLng7ZS54PWUueSxlLnk9dH19KTt2YXIgS2FlPUgoKGVRbiwkYWUpPT57InVzZSBzdHJpY3QiO3ZhciBrZD1xbigpOyRhZS5leHBvcnRzPUlzcjtmdW5jdGlvbiBJc3IoZSl7dmFyIHQ9e30scj1rZC5maWx0ZXIoZS5ub2RlcygpLGZ1bmN0aW9uKHMpe3JldHVybiFlLmNoaWxkcmVuKHMpLmxlbmd0aH0pLG49a2QubWF4KGtkLm1hcChyLGZ1bmN0aW9uKHMpe3JldHVybiBlLm5vZGUocykucmFua30pKSxpPWtkLm1hcChrZC5yYW5nZShuKzEpLGZ1bmN0aW9uKCl7cmV0dXJuW119KTtmdW5jdGlvbiBvKHMpe2lmKCFrZC5oYXModCxzKSl7dFtzXT0hMDt2YXIgbD1lLm5vZGUocyk7aVtsLnJhbmtdLnB1c2gocyksa2QuZm9yRWFjaChlLnN1Y2Nlc3NvcnMocyksbyl9fXZhciBhPWtkLnNvcnRCeShyLGZ1bmN0aW9uKHMpe3JldHVybiBlLm5vZGUocykucmFua30pO3JldHVybiBrZC5mb3JFYWNoKGEsbyksaX19KTt2YXIgSmFlPUgoKHJRbixaYWUpPT57InVzZSBzdHJpY3QiO3ZhciBoMD1xbigpO1phZS5leHBvcnRzPUxzcjtmdW5jdGlvbiBMc3IoZSx0KXtmb3IodmFyIHI9MCxuPTE7bjx0Lmxlbmd0aDsrK24pcis9a3NyKGUsdFtuLTFdLHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIGtzcihlLHQscil7Zm9yKHZhciBuPWgwLnppcE9iamVjdChyLGgwLm1hcChyLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIHV9KSksaT1oMC5mbGF0dGVuKGgwLm1hcCh0LGZ1bmN0aW9uKGMpe3JldHVybiBoMC5zb3J0QnkoaDAubWFwKGUub3V0RWRnZXMoYyksZnVuY3Rpb24odSl7cmV0dXJue3BvczpuW3Uud10sd2VpZ2h0OmUuZWRnZSh1KS53ZWlnaHR9fSksInBvcyIpfSksITApLG89MTtvPHIubGVuZ3RoOylvPDw9MTt2YXIgYT0yKm8tMTtvLT0xO3ZhciBzPWgwLm1hcChuZXcgQXJyYXkoYSksZnVuY3Rpb24oKXtyZXR1cm4gMH0pLGw9MDtyZXR1cm4gaDAuZm9yRWFjaChpLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIHU9Yy5wb3MrbztzW3VdKz1jLndlaWdodDtmb3IodmFyIGg9MDt1PjA7KXUlMiYmKGgrPXNbdSsxXSksdT11LTE+PjEsc1t1XSs9Yy53ZWlnaHQ7bCs9Yy53ZWlnaHQqaH0pKSxsfX0pO3ZhciBlc2U9SCgoblFuLHRzZSk9Pnt2YXIgUWFlPXFuKCk7dHNlLmV4cG9ydHM9UnNyO2Z1bmN0aW9uIFJzcihlLHQpe3JldHVybiBRYWUubWFwKHQsZnVuY3Rpb24ocil7dmFyIG49ZS5pbkVkZ2VzKHIpO2lmKG4ubGVuZ3RoKXt2YXIgaT1RYWUucmVkdWNlKG4sZnVuY3Rpb24obyxhKXt2YXIgcz1lLmVkZ2UoYSksbD1lLm5vZGUoYS52KTtyZXR1cm57c3VtOm8uc3VtK3Mud2VpZ2h0Kmwub3JkZXIsd2VpZ2h0Om8ud2VpZ2h0K3Mud2VpZ2h0fX0se3N1bTowLHdlaWdodDowfSk7cmV0dXJue3Y6cixiYXJ5Y2VudGVyOmkuc3VtL2kud2VpZ2h0LHdlaWdodDppLndlaWdodH19ZWxzZSByZXR1cm57djpyfX0pfX0pO3ZhciBuc2U9SCgoaVFuLHJzZSk9PnsidXNlIHN0cmljdCI7dmFyIFRsPXFuKCk7cnNlLmV4cG9ydHM9TnNyO2Z1bmN0aW9uIE5zcihlLHQpe3ZhciByPXt9O1RsLmZvckVhY2goZSxmdW5jdGlvbihpLG8pe3ZhciBhPXJbaS52XT17aW5kZWdyZWU6MCxpbjpbXSxvdXQ6W10sdnM6W2kudl0saTpvfTtUbC5pc1VuZGVmaW5lZChpLmJhcnljZW50ZXIpfHwoYS5iYXJ5Y2VudGVyPWkuYmFyeWNlbnRlcixhLndlaWdodD1pLndlaWdodCl9KSxUbC5mb3JFYWNoKHQuZWRnZXMoKSxmdW5jdGlvbihpKXt2YXIgbz1yW2kudl0sYT1yW2kud107IVRsLmlzVW5kZWZpbmVkKG8pJiYhVGwuaXNVbmRlZmluZWQoYSkmJihhLmluZGVncmVlKyssby5vdXQucHVzaChyW2kud10pKX0pO3ZhciBuPVRsLmZpbHRlcihyLGZ1bmN0aW9uKGkpe3JldHVybiFpLmluZGVncmVlfSk7cmV0dXJuIERzcihuKX1mdW5jdGlvbiBEc3IoZSl7dmFyIHQ9W107ZnVuY3Rpb24gcihvKXtyZXR1cm4gZnVuY3Rpb24oYSl7YS5tZXJnZWR8fChUbC5pc1VuZGVmaW5lZChhLmJhcnljZW50ZXIpfHxUbC5pc1VuZGVmaW5lZChvLmJhcnljZW50ZXIpfHxhLmJhcnljZW50ZXI+PW8uYmFyeWNlbnRlcikmJk9zcihvLGEpfX1mdW5jdGlvbiBuKG8pe3JldHVybiBmdW5jdGlvbihhKXthLmluLnB1c2gobyksLS1hLmluZGVncmVlPT09MCYmZS5wdXNoKGEpfX1mb3IoO2UubGVuZ3RoOyl7dmFyIGk9ZS5wb3AoKTt0LnB1c2goaSksVGwuZm9yRWFjaChpLmluLnJldmVyc2UoKSxyKGkpKSxUbC5mb3JFYWNoKGkub3V0LG4oaSkpfXJldHVybiBUbC5tYXAoVGwuZmlsdGVyKHQsZnVuY3Rpb24obyl7cmV0dXJuIW8ubWVyZ2VkfSksZnVuY3Rpb24obyl7cmV0dXJuIFRsLnBpY2sobyxbInZzIiwiaSIsImJhcnljZW50ZXIiLCJ3ZWlnaHQiXSl9KX1mdW5jdGlvbiBPc3IoZSx0KXt2YXIgcj0wLG49MDtlLndlaWdodCYmKHIrPWUuYmFyeWNlbnRlciplLndlaWdodCxuKz1lLndlaWdodCksdC53ZWlnaHQmJihyKz10LmJhcnljZW50ZXIqdC53ZWlnaHQsbis9dC53ZWlnaHQpLGUudnM9dC52cy5jb25jYXQoZS52cyksZS5iYXJ5Y2VudGVyPXIvbixlLndlaWdodD1uLGUuaT1NYXRoLm1pbih0LmksZS5pKSx0Lm1lcmdlZD0hMH19KTt2YXIgYXNlPUgoKG9Rbixvc2UpPT57dmFyIFg0PXFuKCksenNyPW5zKCk7b3NlLmV4cG9ydHM9RnNyO2Z1bmN0aW9uIEZzcihlLHQpe3ZhciByPXpzci5wYXJ0aXRpb24oZSxmdW5jdGlvbih1KXtyZXR1cm4gWDQuaGFzKHUsImJhcnljZW50ZXIiKX0pLG49ci5saHMsaT1YNC5zb3J0Qnkoci5yaHMsZnVuY3Rpb24odSl7cmV0dXJuLXUuaX0pLG89W10sYT0wLHM9MCxsPTA7bi5zb3J0KEJzcighIXQpKSxsPWlzZShvLGksbCksWDQuZm9yRWFjaChuLGZ1bmN0aW9uKHUpe2wrPXUudnMubGVuZ3RoLG8ucHVzaCh1LnZzKSxhKz11LmJhcnljZW50ZXIqdS53ZWlnaHQscys9dS53ZWlnaHQsbD1pc2UobyxpLGwpfSk7dmFyIGM9e3ZzOlg0LmZsYXR0ZW4obywhMCl9O3JldHVybiBzJiYoYy5iYXJ5Y2VudGVyPWEvcyxjLndlaWdodD1zKSxjfWZ1bmN0aW9uIGlzZShlLHQscil7Zm9yKHZhciBuO3QubGVuZ3RoJiYobj1YNC5sYXN0KHQpKS5pPD1yOyl0LnBvcCgpLGUucHVzaChuLnZzKSxyKys7cmV0dXJuIHJ9ZnVuY3Rpb24gQnNyKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB0LmJhcnljZW50ZXI8ci5iYXJ5Y2VudGVyPy0xOnQuYmFyeWNlbnRlcj5yLmJhcnljZW50ZXI/MTplP3IuaS10Lmk6dC5pLXIuaX19fSk7dmFyIGNzZT1IKChhUW4sbHNlKT0+e3ZhciBmMD1xbigpLEhzcj1lc2UoKSxWc3I9bnNlKCksVXNyPWFzZSgpO2xzZS5leHBvcnRzPXNzZTtmdW5jdGlvbiBzc2UoZSx0LHIsbil7dmFyIGk9ZS5jaGlsZHJlbih0KSxvPWUubm9kZSh0KSxhPW8/by5ib3JkZXJMZWZ0OnZvaWQgMCxzPW8/by5ib3JkZXJSaWdodDp2b2lkIDAsbD17fTthJiYoaT1mMC5maWx0ZXIoaSxmdW5jdGlvbihkKXtyZXR1cm4gZCE9PWEmJmQhPT1zfSkpO3ZhciBjPUhzcihlLGkpO2YwLmZvckVhY2goYyxmdW5jdGlvbihkKXtpZihlLmNoaWxkcmVuKGQudikubGVuZ3RoKXt2YXIgZz1zc2UoZSxkLnYscixuKTtsW2Qudl09ZyxmMC5oYXMoZywiYmFyeWNlbnRlciIpJiZHc3IoZCxnKX19KTt2YXIgdT1Wc3IoYyxyKTtxc3IodSxsKTt2YXIgaD1Vc3IodSxuKTtpZihhJiYoaC52cz1mMC5mbGF0dGVuKFthLGgudnMsc10sITApLGUucHJlZGVjZXNzb3JzKGEpLmxlbmd0aCkpe3ZhciBmPWUubm9kZShlLnByZWRlY2Vzc29ycyhhKVswXSkscD1lLm5vZGUoZS5wcmVkZWNlc3NvcnMocylbMF0pO2YwLmhhcyhoLCJiYXJ5Y2VudGVyIil8fChoLmJhcnljZW50ZXI9MCxoLndlaWdodD0wKSxoLmJhcnljZW50ZXI9KGguYmFyeWNlbnRlcipoLndlaWdodCtmLm9yZGVyK3Aub3JkZXIpLyhoLndlaWdodCsyKSxoLndlaWdodCs9Mn1yZXR1cm4gaH1mdW5jdGlvbiBxc3IoZSx0KXtmMC5mb3JFYWNoKGUsZnVuY3Rpb24ocil7ci52cz1mMC5mbGF0dGVuKHIudnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0W25dP3Rbbl0udnM6bn0pLCEwKX0pfWZ1bmN0aW9uIEdzcihlLHQpe2YwLmlzVW5kZWZpbmVkKGUuYmFyeWNlbnRlcik/KGUuYmFyeWNlbnRlcj10LmJhcnljZW50ZXIsZS53ZWlnaHQ9dC53ZWlnaHQpOihlLmJhcnljZW50ZXI9KGUuYmFyeWNlbnRlciplLndlaWdodCt0LmJhcnljZW50ZXIqdC53ZWlnaHQpLyhlLndlaWdodCt0LndlaWdodCksZS53ZWlnaHQrPXQud2VpZ2h0KX19KTt2YXIgaHNlPUgoKHNRbix1c2UpPT57dmFyICQ0PXFuKCksV3NyPVVjKCkuR3JhcGg7dXNlLmV4cG9ydHM9WXNyO2Z1bmN0aW9uIFlzcihlLHQscil7dmFyIG49anNyKGUpLGk9bmV3IFdzcih7Y29tcG91bmQ6ITB9KS5zZXRHcmFwaCh7cm9vdDpufSkuc2V0RGVmYXVsdE5vZGVMYWJlbChmdW5jdGlvbihvKXtyZXR1cm4gZS5ub2RlKG8pfSk7cmV0dXJuICQ0LmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG8pe3ZhciBhPWUubm9kZShvKSxzPWUucGFyZW50KG8pOyhhLnJhbms9PT10fHxhLm1pblJhbms8PXQmJnQ8PWEubWF4UmFuaykmJihpLnNldE5vZGUobyksaS5zZXRQYXJlbnQobyxzfHxuKSwkNC5mb3JFYWNoKGVbcl0obyksZnVuY3Rpb24obCl7dmFyIGM9bC52PT09bz9sLnc6bC52LHU9aS5lZGdlKGMsbyksaD0kNC5pc1VuZGVmaW5lZCh1KT8wOnUud2VpZ2h0O2kuc2V0RWRnZShjLG8se3dlaWdodDplLmVkZ2UobCkud2VpZ2h0K2h9KX0pLCQ0LmhhcyhhLCJtaW5SYW5rIikmJmkuc2V0Tm9kZShvLHtib3JkZXJMZWZ0OmEuYm9yZGVyTGVmdFt0XSxib3JkZXJSaWdodDphLmJvcmRlclJpZ2h0W3RdfSkpfSksaX1mdW5jdGlvbiBqc3IoZSl7Zm9yKHZhciB0O2UuaGFzTm9kZSh0PSQ0LnVuaXF1ZUlkKCJfcm9vdCIpKTspO3JldHVybiB0fX0pO3ZhciBwc2U9SCgobFFuLGZzZSk9Pnt2YXIgWHNyPXFuKCk7ZnNlLmV4cG9ydHM9JHNyO2Z1bmN0aW9uICRzcihlLHQscil7dmFyIG49e30saTtYc3IuZm9yRWFjaChyLGZ1bmN0aW9uKG8pe2Zvcih2YXIgYT1lLnBhcmVudChvKSxzLGw7YTspe2lmKHM9ZS5wYXJlbnQoYSkscz8obD1uW3NdLG5bc109YSk6KGw9aSxpPWEpLGwmJmwhPT1hKXt0LnNldEVkZ2UobCxhKTtyZXR1cm59YT1zfX0pfX0pO3ZhciB5c2U9SCgoY1FuLF9zZSk9PnsidXNlIHN0cmljdCI7dmFyIHAwPXFuKCksS3NyPUthZSgpLFpzcj1KYWUoKSxKc3I9Y3NlKCksUXNyPWhzZSgpLHRscj1wc2UoKSxlbHI9VWMoKS5HcmFwaCxkc2U9bnMoKTtfc2UuZXhwb3J0cz1ybHI7ZnVuY3Rpb24gcmxyKGUpe3ZhciB0PWRzZS5tYXhSYW5rKGUpLHI9bXNlKGUscDAucmFuZ2UoMSx0KzEpLCJpbkVkZ2VzIiksbj1tc2UoZSxwMC5yYW5nZSh0LTEsLTEsLTEpLCJvdXRFZGdlcyIpLGk9S3NyKGUpO2dzZShlLGkpO2Zvcih2YXIgbz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksYSxzPTAsbD0wO2w8NDsrK3MsKytsKXtubHIocyUyP3I6bixzJTQ+PTIpLGk9ZHNlLmJ1aWxkTGF5ZXJNYXRyaXgoZSk7dmFyIGM9WnNyKGUsaSk7YzxvJiYobD0wLGE9cDAuY2xvbmVEZWVwKGkpLG89Yyl9Z3NlKGUsYSl9ZnVuY3Rpb24gbXNlKGUsdCxyKXtyZXR1cm4gcDAubWFwKHQsZnVuY3Rpb24obil7cmV0dXJuIFFzcihlLG4scil9KX1mdW5jdGlvbiBubHIoZSx0KXt2YXIgcj1uZXcgZWxyO3AwLmZvckVhY2goZSxmdW5jdGlvbihuKXt2YXIgaT1uLmdyYXBoKCkucm9vdCxvPUpzcihuLGkscix0KTtwMC5mb3JFYWNoKG8udnMsZnVuY3Rpb24oYSxzKXtuLm5vZGUoYSkub3JkZXI9c30pLHRscihuLHIsby52cyl9KX1mdW5jdGlvbiBnc2UoZSx0KXtwMC5mb3JFYWNoKHQsZnVuY3Rpb24ocil7cDAuZm9yRWFjaChyLGZ1bmN0aW9uKG4saSl7ZS5ub2RlKG4pLm9yZGVyPWl9KX0pfX0pO3ZhciBBc2U9SCgodVFuLENzZSk9PnsidXNlIHN0cmljdCI7dmFyIFhlPXFuKCksaWxyPVVjKCkuR3JhcGgsb2xyPW5zKCk7Q3NlLmV4cG9ydHM9e3Bvc2l0aW9uWDpsbHIsZmluZFR5cGUxQ29uZmxpY3RzOnZzZSxmaW5kVHlwZTJDb25mbGljdHM6eHNlLGFkZENvbmZsaWN0Ok5sdCxoYXNDb25mbGljdDpic2UsdmVydGljYWxBbGlnbm1lbnQ6d3NlLGhvcml6b250YWxDb21wYWN0aW9uOlNzZSxhbGlnbkNvb3JkaW5hdGVzOkVzZSxmaW5kU21hbGxlc3RXaWR0aEFsaWdubWVudDpNc2UsYmFsYW5jZTpUc2V9O2Z1bmN0aW9uIHZzZShlLHQpe3ZhciByPXt9O2Z1bmN0aW9uIG4oaSxvKXt2YXIgYT0wLHM9MCxsPWkubGVuZ3RoLGM9WGUubGFzdChvKTtyZXR1cm4gWGUuZm9yRWFjaChvLGZ1bmN0aW9uKHUsaCl7dmFyIGY9YWxyKGUsdSkscD1mP2Uubm9kZShmKS5vcmRlcjpsOyhmfHx1PT09YykmJihYZS5mb3JFYWNoKG8uc2xpY2UocyxoKzEpLGZ1bmN0aW9uKGQpe1hlLmZvckVhY2goZS5wcmVkZWNlc3NvcnMoZCksZnVuY3Rpb24oZyl7dmFyIF89ZS5ub2RlKGcpLHk9Xy5vcmRlcjsoeTxhfHxwPHkpJiYhKF8uZHVtbXkmJmUubm9kZShkKS5kdW1teSkmJk5sdChyLGcsZCl9KX0pLHM9aCsxLGE9cCl9KSxvfXJldHVybiBYZS5yZWR1Y2UodCxuKSxyfWZ1bmN0aW9uIHhzZShlLHQpe3ZhciByPXt9O2Z1bmN0aW9uIG4obyxhLHMsbCxjKXt2YXIgdTtYZS5mb3JFYWNoKFhlLnJhbmdlKGEscyksZnVuY3Rpb24oaCl7dT1vW2hdLGUubm9kZSh1KS5kdW1teSYmWGUuZm9yRWFjaChlLnByZWRlY2Vzc29ycyh1KSxmdW5jdGlvbihmKXt2YXIgcD1lLm5vZGUoZik7cC5kdW1teSYmKHAub3JkZXI8bHx8cC5vcmRlcj5jKSYmTmx0KHIsZix1KX0pfSl9ZnVuY3Rpb24gaShvLGEpe3ZhciBzPS0xLGwsYz0wO3JldHVybiBYZS5mb3JFYWNoKGEsZnVuY3Rpb24odSxoKXtpZihlLm5vZGUodSkuZHVtbXk9PT0iYm9yZGVyIil7dmFyIGY9ZS5wcmVkZWNlc3NvcnModSk7Zi5sZW5ndGgmJihsPWUubm9kZShmWzBdKS5vcmRlcixuKGEsYyxoLHMsbCksYz1oLHM9bCl9bihhLGMsYS5sZW5ndGgsbCxvLmxlbmd0aCl9KSxhfXJldHVybiBYZS5yZWR1Y2UodCxpKSxyfWZ1bmN0aW9uIGFscihlLHQpe2lmKGUubm9kZSh0KS5kdW1teSlyZXR1cm4gWGUuZmluZChlLnByZWRlY2Vzc29ycyh0KSxmdW5jdGlvbihyKXtyZXR1cm4gZS5ub2RlKHIpLmR1bW15fSl9ZnVuY3Rpb24gTmx0KGUsdCxyKXtpZih0PnIpe3ZhciBuPXQ7dD1yLHI9bn12YXIgaT1lW3RdO2l8fChlW3RdPWk9e30pLGlbcl09ITB9ZnVuY3Rpb24gYnNlKGUsdCxyKXtpZih0PnIpe3ZhciBuPXQ7dD1yLHI9bn1yZXR1cm4gWGUuaGFzKGVbdF0scil9ZnVuY3Rpb24gd3NlKGUsdCxyLG4pe3ZhciBpPXt9LG89e30sYT17fTtyZXR1cm4gWGUuZm9yRWFjaCh0LGZ1bmN0aW9uKHMpe1hlLmZvckVhY2gocyxmdW5jdGlvbihsLGMpe2lbbF09bCxvW2xdPWwsYVtsXT1jfSl9KSxYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7dmFyIGw9LTE7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGMpe3ZhciB1PW4oYyk7aWYodS5sZW5ndGgpe3U9WGUuc29ydEJ5KHUsZnVuY3Rpb24oZyl7cmV0dXJuIGFbZ119KTtmb3IodmFyIGg9KHUubGVuZ3RoLTEpLzIsZj1NYXRoLmZsb29yKGgpLHA9TWF0aC5jZWlsKGgpO2Y8PXA7KytmKXt2YXIgZD11W2ZdO29bY109PT1jJiZsPGFbZF0mJiFic2UocixjLGQpJiYob1tkXT1jLG9bY109aVtjXT1pW2RdLGw9YVtkXSl9fX0pfSkse3Jvb3Q6aSxhbGlnbjpvfX1mdW5jdGlvbiBTc2UoZSx0LHIsbixpKXt2YXIgbz17fSxhPXNscihlLHQscixpKSxzPWk/ImJvcmRlckxlZnQiOiJib3JkZXJSaWdodCI7ZnVuY3Rpb24gbChoLGYpe2Zvcih2YXIgcD1hLm5vZGVzKCksZD1wLnBvcCgpLGc9e307ZDspZ1tkXT9oKGQpOihnW2RdPSEwLHAucHVzaChkKSxwPXAuY29uY2F0KGYoZCkpKSxkPXAucG9wKCl9ZnVuY3Rpb24gYyhoKXtvW2hdPWEuaW5FZGdlcyhoKS5yZWR1Y2UoZnVuY3Rpb24oZixwKXtyZXR1cm4gTWF0aC5tYXgoZixvW3Audl0rYS5lZGdlKHApKX0sMCl9ZnVuY3Rpb24gdShoKXt2YXIgZj1hLm91dEVkZ2VzKGgpLnJlZHVjZShmdW5jdGlvbihkLGcpe3JldHVybiBNYXRoLm1pbihkLG9bZy53XS1hLmVkZ2UoZykpfSxOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpLHA9ZS5ub2RlKGgpO2YhPT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkmJnAuYm9yZGVyVHlwZSE9PXMmJihvW2hdPU1hdGgubWF4KG9baF0sZikpfXJldHVybiBsKGMsYS5wcmVkZWNlc3NvcnMuYmluZChhKSksbCh1LGEuc3VjY2Vzc29ycy5iaW5kKGEpKSxYZS5mb3JFYWNoKG4sZnVuY3Rpb24oaCl7b1toXT1vW3JbaF1dfSksb31mdW5jdGlvbiBzbHIoZSx0LHIsbil7dmFyIGk9bmV3IGlscixvPWUuZ3JhcGgoKSxhPWNscihvLm5vZGVzZXAsby5lZGdlc2VwLG4pO3JldHVybiBYZS5mb3JFYWNoKHQsZnVuY3Rpb24ocyl7dmFyIGw7WGUuZm9yRWFjaChzLGZ1bmN0aW9uKGMpe3ZhciB1PXJbY107aWYoaS5zZXROb2RlKHUpLGwpe3ZhciBoPXJbbF0sZj1pLmVkZ2UoaCx1KTtpLnNldEVkZ2UoaCx1LE1hdGgubWF4KGEoZSxjLGwpLGZ8fDApKX1sPWN9KX0pLGl9ZnVuY3Rpb24gTXNlKGUsdCl7cmV0dXJuIFhlLm1pbkJ5KFhlLnZhbHVlcyh0KSxmdW5jdGlvbihyKXt2YXIgbj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksaT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7cmV0dXJuIFhlLmZvckluKHIsZnVuY3Rpb24obyxhKXt2YXIgcz11bHIoZSxhKS8yO249TWF0aC5tYXgobytzLG4pLGk9TWF0aC5taW4oby1zLGkpfSksbi1pfSl9ZnVuY3Rpb24gRXNlKGUsdCl7dmFyIHI9WGUudmFsdWVzKHQpLG49WGUubWluKHIpLGk9WGUubWF4KHIpO1hlLmZvckVhY2goWyJ1IiwiZCJdLGZ1bmN0aW9uKG8pe1hlLmZvckVhY2goWyJsIiwiciJdLGZ1bmN0aW9uKGEpe3ZhciBzPW8rYSxsPWVbc10sYztpZihsIT09dCl7dmFyIHU9WGUudmFsdWVzKGwpO2M9YT09PSJsIj9uLVhlLm1pbih1KTppLVhlLm1heCh1KSxjJiYoZVtzXT1YZS5tYXBWYWx1ZXMobCxmdW5jdGlvbihoKXtyZXR1cm4gaCtjfSkpfX0pfSl9ZnVuY3Rpb24gVHNlKGUsdCl7cmV0dXJuIFhlLm1hcFZhbHVlcyhlLnVsLGZ1bmN0aW9uKHIsbil7aWYodClyZXR1cm4gZVt0LnRvTG93ZXJDYXNlKCldW25dO3ZhciBpPVhlLnNvcnRCeShYZS5tYXAoZSxuKSk7cmV0dXJuKGlbMV0raVsyXSkvMn0pfWZ1bmN0aW9uIGxscihlKXt2YXIgdD1vbHIuYnVpbGRMYXllck1hdHJpeChlKSxyPVhlLm1lcmdlKHZzZShlLHQpLHhzZShlLHQpKSxuPXt9LGk7WGUuZm9yRWFjaChbInUiLCJkIl0sZnVuY3Rpb24oYSl7aT1hPT09InUiP3Q6WGUudmFsdWVzKHQpLnJldmVyc2UoKSxYZS5mb3JFYWNoKFsibCIsInIiXSxmdW5jdGlvbihzKXtzPT09InIiJiYoaT1YZS5tYXAoaSxmdW5jdGlvbihoKXtyZXR1cm4gWGUudmFsdWVzKGgpLnJldmVyc2UoKX0pKTt2YXIgbD0oYT09PSJ1Ij9lLnByZWRlY2Vzc29yczplLnN1Y2Nlc3NvcnMpLmJpbmQoZSksYz13c2UoZSxpLHIsbCksdT1Tc2UoZSxpLGMucm9vdCxjLmFsaWduLHM9PT0iciIpO3M9PT0iciImJih1PVhlLm1hcFZhbHVlcyh1LGZ1bmN0aW9uKGgpe3JldHVybi1ofSkpLG5bYStzXT11fSl9KTt2YXIgbz1Nc2UoZSxuKTtyZXR1cm4gRXNlKG4sbyksVHNlKG4sZS5ncmFwaCgpLmFsaWduKX1mdW5jdGlvbiBjbHIoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuLGksbyl7dmFyIGE9bi5ub2RlKGkpLHM9bi5ub2RlKG8pLGw9MCxjO2lmKGwrPWEud2lkdGgvMixYZS5oYXMoYSwibGFiZWxwb3MiKSlzd2l0Y2goYS5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmM9LWEud2lkdGgvMjticmVhaztjYXNlInIiOmM9YS53aWR0aC8yO2JyZWFrfWlmKGMmJihsKz1yP2M6LWMpLGM9MCxsKz0oYS5kdW1teT90OmUpLzIsbCs9KHMuZHVtbXk/dDplKS8yLGwrPXMud2lkdGgvMixYZS5oYXMocywibGFiZWxwb3MiKSlzd2l0Y2gocy5sYWJlbHBvcy50b0xvd2VyQ2FzZSgpKXtjYXNlImwiOmM9cy53aWR0aC8yO2JyZWFrO2Nhc2UiciI6Yz0tcy53aWR0aC8yO2JyZWFrfXJldHVybiBjJiYobCs9cj9jOi1jKSxjPTAsbH19ZnVuY3Rpb24gdWxyKGUsdCl7cmV0dXJuIGUubm9kZSh0KS53aWR0aH19KTt2YXIgTHNlPUgoKGhRbixJc2UpPT57InVzZSBzdHJpY3QiO3ZhciBLND1xbigpLFBzZT1ucygpLGhscj1Bc2UoKS5wb3NpdGlvblg7SXNlLmV4cG9ydHM9ZmxyO2Z1bmN0aW9uIGZscihlKXtlPVBzZS5hc05vbkNvbXBvdW5kR3JhcGgoZSkscGxyKGUpLEs0LmZvckVhY2goaGxyKGUpLGZ1bmN0aW9uKHQscil7ZS5ub2RlKHIpLng9dH0pfWZ1bmN0aW9uIHBscihlKXt2YXIgdD1Qc2UuYnVpbGRMYXllck1hdHJpeChlKSxyPWUuZ3JhcGgoKS5yYW5rc2VwLG49MDtLNC5mb3JFYWNoKHQsZnVuY3Rpb24oaSl7dmFyIG89SzQubWF4KEs0Lm1hcChpLGZ1bmN0aW9uKGEpe3JldHVybiBlLm5vZGUoYSkuaGVpZ2h0fSkpO0s0LmZvckVhY2goaSxmdW5jdGlvbihhKXtlLm5vZGUoYSkueT1uK28vMn0pLG4rPW8rcn0pfX0pO3ZhciB6c2U9SCgoZlFuLE9zZSk9PnsidXNlIHN0cmljdCI7dmFyIGlyPXFuKCksa3NlPW1hZSgpLFJzZT13YWUoKSxkbHI9T2FlKCksbWxyPW5zKCkubm9ybWFsaXplUmFua3MsZ2xyPUZhZSgpLF9scj1ucygpLnJlbW92ZUVtcHR5UmFua3MsTnNlPVZhZSgpLHlscj1HYWUoKSxEc2U9WGFlKCksdmxyPXlzZSgpLHhscj1Mc2UoKSxkMD1ucygpLGJscj1VYygpLkdyYXBoO09zZS5leHBvcnRzPXdscjtmdW5jdGlvbiB3bHIoZSx0KXt2YXIgcj10JiZ0LmRlYnVnVGltaW5nP2QwLnRpbWU6ZDAubm90aW1lO3IoImxheW91dCIsZnVuY3Rpb24oKXt2YXIgbj1yKCIgIGJ1aWxkTGF5b3V0R3JhcGgiLGZ1bmN0aW9uKCl7cmV0dXJuIFJscihlKX0pO3IoIiAgcnVuTGF5b3V0IixmdW5jdGlvbigpe1NscihuLHIpfSkscigiICB1cGRhdGVJbnB1dEdyYXBoIixmdW5jdGlvbigpe01scihlLG4pfSl9KX1mdW5jdGlvbiBTbHIoZSx0KXt0KCIgICAgbWFrZVNwYWNlRm9yRWRnZUxhYmVscyIsZnVuY3Rpb24oKXtObHIoZSl9KSx0KCIgICAgcmVtb3ZlU2VsZkVkZ2VzIixmdW5jdGlvbigpe3FscihlKX0pLHQoIiAgICBhY3ljbGljIixmdW5jdGlvbigpe2tzZS5ydW4oZSl9KSx0KCIgICAgbmVzdGluZ0dyYXBoLnJ1biIsZnVuY3Rpb24oKXtOc2UucnVuKGUpfSksdCgiICAgIHJhbmsiLGZ1bmN0aW9uKCl7ZGxyKGQwLmFzTm9uQ29tcG91bmRHcmFwaChlKSl9KSx0KCIgICAgaW5qZWN0RWRnZUxhYmVsUHJveGllcyIsZnVuY3Rpb24oKXtEbHIoZSl9KSx0KCIgICAgcmVtb3ZlRW1wdHlSYW5rcyIsZnVuY3Rpb24oKXtfbHIoZSl9KSx0KCIgICAgbmVzdGluZ0dyYXBoLmNsZWFudXAiLGZ1bmN0aW9uKCl7TnNlLmNsZWFudXAoZSl9KSx0KCIgICAgbm9ybWFsaXplUmFua3MiLGZ1bmN0aW9uKCl7bWxyKGUpfSksdCgiICAgIGFzc2lnblJhbmtNaW5NYXgiLGZ1bmN0aW9uKCl7T2xyKGUpfSksdCgiICAgIHJlbW92ZUVkZ2VMYWJlbFByb3hpZXMiLGZ1bmN0aW9uKCl7emxyKGUpfSksdCgiICAgIG5vcm1hbGl6ZS5ydW4iLGZ1bmN0aW9uKCl7UnNlLnJ1bihlKX0pLHQoIiAgICBwYXJlbnREdW1teUNoYWlucyIsZnVuY3Rpb24oKXtnbHIoZSl9KSx0KCIgICAgYWRkQm9yZGVyU2VnbWVudHMiLGZ1bmN0aW9uKCl7eWxyKGUpfSksdCgiICAgIG9yZGVyIixmdW5jdGlvbigpe3ZscihlKX0pLHQoIiAgICBpbnNlcnRTZWxmRWRnZXMiLGZ1bmN0aW9uKCl7R2xyKGUpfSksdCgiICAgIGFkanVzdENvb3JkaW5hdGVTeXN0ZW0iLGZ1bmN0aW9uKCl7RHNlLmFkanVzdChlKX0pLHQoIiAgICBwb3NpdGlvbiIsZnVuY3Rpb24oKXt4bHIoZSl9KSx0KCIgICAgcG9zaXRpb25TZWxmRWRnZXMiLGZ1bmN0aW9uKCl7V2xyKGUpfSksdCgiICAgIHJlbW92ZUJvcmRlck5vZGVzIixmdW5jdGlvbigpe1VscihlKX0pLHQoIiAgICBub3JtYWxpemUudW5kbyIsZnVuY3Rpb24oKXtSc2UudW5kbyhlKX0pLHQoIiAgICBmaXh1cEVkZ2VMYWJlbENvb3JkcyIsZnVuY3Rpb24oKXtIbHIoZSl9KSx0KCIgICAgdW5kb0Nvb3JkaW5hdGVTeXN0ZW0iLGZ1bmN0aW9uKCl7RHNlLnVuZG8oZSl9KSx0KCIgICAgdHJhbnNsYXRlR3JhcGgiLGZ1bmN0aW9uKCl7RmxyKGUpfSksdCgiICAgIGFzc2lnbk5vZGVJbnRlcnNlY3RzIixmdW5jdGlvbigpe0JscihlKX0pLHQoIiAgICByZXZlcnNlUG9pbnRzIixmdW5jdGlvbigpe1ZscihlKX0pLHQoIiAgICBhY3ljbGljLnVuZG8iLGZ1bmN0aW9uKCl7a3NlLnVuZG8oZSl9KX1mdW5jdGlvbiBNbHIoZSx0KXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihyKXt2YXIgbj1lLm5vZGUociksaT10Lm5vZGUocik7biYmKG4ueD1pLngsbi55PWkueSx0LmNoaWxkcmVuKHIpLmxlbmd0aCYmKG4ud2lkdGg9aS53aWR0aCxuLmhlaWdodD1pLmhlaWdodCkpfSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIpLGk9dC5lZGdlKHIpO24ucG9pbnRzPWkucG9pbnRzLGlyLmhhcyhpLCJ4IikmJihuLng9aS54LG4ueT1pLnkpfSksZS5ncmFwaCgpLndpZHRoPXQuZ3JhcGgoKS53aWR0aCxlLmdyYXBoKCkuaGVpZ2h0PXQuZ3JhcGgoKS5oZWlnaHR9dmFyIEVscj1bIm5vZGVzZXAiLCJlZGdlc2VwIiwicmFua3NlcCIsIm1hcmdpbngiLCJtYXJnaW55Il0sVGxyPXtyYW5rc2VwOjUwLGVkZ2VzZXA6MjAsbm9kZXNlcDo1MCxyYW5rZGlyOiJ0YiJ9LENscj1bImFjeWNsaWNlciIsInJhbmtlciIsInJhbmtkaXIiLCJhbGlnbiJdLEFscj1bIndpZHRoIiwiaGVpZ2h0Il0sUGxyPXt3aWR0aDowLGhlaWdodDowfSxJbHI9WyJtaW5sZW4iLCJ3ZWlnaHQiLCJ3aWR0aCIsImhlaWdodCIsImxhYmVsb2Zmc2V0Il0sTGxyPXttaW5sZW46MSx3ZWlnaHQ6MSx3aWR0aDowLGhlaWdodDowLGxhYmVsb2Zmc2V0OjEwLGxhYmVscG9zOiJyIn0sa2xyPVsibGFiZWxwb3MiXTtmdW5jdGlvbiBSbHIoZSl7dmFyIHQ9bmV3IGJscih7bXVsdGlncmFwaDohMCxjb21wb3VuZDohMH0pLHI9T2x0KGUuZ3JhcGgoKSk7cmV0dXJuIHQuc2V0R3JhcGgoaXIubWVyZ2Uoe30sVGxyLERsdChyLEVsciksaXIucGljayhyLENscikpKSxpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihuKXt2YXIgaT1PbHQoZS5ub2RlKG4pKTt0LnNldE5vZGUobixpci5kZWZhdWx0cyhEbHQoaSxBbHIpLFBscikpLHQuc2V0UGFyZW50KG4sZS5wYXJlbnQobikpfSksaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24obil7dmFyIGk9T2x0KGUuZWRnZShuKSk7dC5zZXRFZGdlKG4saXIubWVyZ2Uoe30sTGxyLERsdChpLElsciksaXIucGljayhpLGtscikpKX0pLHR9ZnVuY3Rpb24gTmxyKGUpe3ZhciB0PWUuZ3JhcGgoKTt0LnJhbmtzZXAvPTIsaXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24ocil7dmFyIG49ZS5lZGdlKHIpO24ubWlubGVuKj0yLG4ubGFiZWxwb3MudG9Mb3dlckNhc2UoKSE9PSJjIiYmKHQucmFua2Rpcj09PSJUQiJ8fHQucmFua2Rpcj09PSJCVCI/bi53aWR0aCs9bi5sYWJlbG9mZnNldDpuLmhlaWdodCs9bi5sYWJlbG9mZnNldCl9KX1mdW5jdGlvbiBEbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpO2lmKHIud2lkdGgmJnIuaGVpZ2h0KXt2YXIgbj1lLm5vZGUodC52KSxpPWUubm9kZSh0LncpLG89e3Jhbms6KGkucmFuay1uLnJhbmspLzIrbi5yYW5rLGU6dH07ZDAuYWRkRHVtbXlOb2RlKGUsImVkZ2UtcHJveHkiLG8sIl9lcCIpfX0pfWZ1bmN0aW9uIE9scihlKXt2YXIgdD0wO2lyLmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKHIpe3ZhciBuPWUubm9kZShyKTtuLmJvcmRlclRvcCYmKG4ubWluUmFuaz1lLm5vZGUobi5ib3JkZXJUb3ApLnJhbmssbi5tYXhSYW5rPWUubm9kZShuLmJvcmRlckJvdHRvbSkucmFuayx0PWlyLm1heCh0LG4ubWF4UmFuaykpfSksZS5ncmFwaCgpLm1heFJhbms9dH1mdW5jdGlvbiB6bHIoZSl7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpO3IuZHVtbXk9PT0iZWRnZS1wcm94eSImJihlLmVkZ2Uoci5lKS5sYWJlbFJhbms9ci5yYW5rLGUucmVtb3ZlTm9kZSh0KSl9KX1mdW5jdGlvbiBGbHIoZSl7dmFyIHQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLHI9MCxuPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPTAsbz1lLmdyYXBoKCksYT1vLm1hcmdpbnh8fDAscz1vLm1hcmdpbnl8fDA7ZnVuY3Rpb24gbChjKXt2YXIgdT1jLngsaD1jLnksZj1jLndpZHRoLHA9Yy5oZWlnaHQ7dD1NYXRoLm1pbih0LHUtZi8yKSxyPU1hdGgubWF4KHIsdStmLzIpLG49TWF0aC5taW4obixoLXAvMiksaT1NYXRoLm1heChpLGgrcC8yKX1pci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihjKXtsKGUubm9kZShjKSl9KSxpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbihjKXt2YXIgdT1lLmVkZ2UoYyk7aXIuaGFzKHUsIngiKSYmbCh1KX0pLHQtPWEsbi09cyxpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbihjKXt2YXIgdT1lLm5vZGUoYyk7dS54LT10LHUueS09bn0pLGlyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKGMpe3ZhciB1PWUuZWRnZShjKTtpci5mb3JFYWNoKHUucG9pbnRzLGZ1bmN0aW9uKGgpe2gueC09dCxoLnktPW59KSxpci5oYXModSwieCIpJiYodS54LT10KSxpci5oYXModSwieSIpJiYodS55LT1uKX0pLG8ud2lkdGg9ci10K2Esby5oZWlnaHQ9aS1uK3N9ZnVuY3Rpb24gQmxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe3ZhciByPWUuZWRnZSh0KSxuPWUubm9kZSh0LnYpLGk9ZS5ub2RlKHQudyksbyxhO3IucG9pbnRzPyhvPXIucG9pbnRzWzBdLGE9ci5wb2ludHNbci5wb2ludHMubGVuZ3RoLTFdKTooci5wb2ludHM9W10sbz1pLGE9biksci5wb2ludHMudW5zaGlmdChkMC5pbnRlcnNlY3RSZWN0KG4sbykpLHIucG9pbnRzLnB1c2goZDAuaW50ZXJzZWN0UmVjdChpLGEpKX0pfWZ1bmN0aW9uIEhscihlKXtpci5mb3JFYWNoKGUuZWRnZXMoKSxmdW5jdGlvbih0KXt2YXIgcj1lLmVkZ2UodCk7aWYoaXIuaGFzKHIsIngiKSlzd2l0Y2goKHIubGFiZWxwb3M9PT0ibCJ8fHIubGFiZWxwb3M9PT0iciIpJiYoci53aWR0aC09ci5sYWJlbG9mZnNldCksci5sYWJlbHBvcyl7Y2FzZSJsIjpyLngtPXIud2lkdGgvMityLmxhYmVsb2Zmc2V0O2JyZWFrO2Nhc2UiciI6ci54Kz1yLndpZHRoLzIrci5sYWJlbG9mZnNldDticmVha319KX1mdW5jdGlvbiBWbHIoZSl7aXIuZm9yRWFjaChlLmVkZ2VzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5lZGdlKHQpO3IucmV2ZXJzZWQmJnIucG9pbnRzLnJldmVyc2UoKX0pfWZ1bmN0aW9uIFVscihlKXtpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtpZihlLmNoaWxkcmVuKHQpLmxlbmd0aCl7dmFyIHI9ZS5ub2RlKHQpLG49ZS5ub2RlKHIuYm9yZGVyVG9wKSxpPWUubm9kZShyLmJvcmRlckJvdHRvbSksbz1lLm5vZGUoaXIubGFzdChyLmJvcmRlckxlZnQpKSxhPWUubm9kZShpci5sYXN0KHIuYm9yZGVyUmlnaHQpKTtyLndpZHRoPU1hdGguYWJzKGEueC1vLngpLHIuaGVpZ2h0PU1hdGguYWJzKGkueS1uLnkpLHIueD1vLngrci53aWR0aC8yLHIueT1uLnkrci5oZWlnaHQvMn19KSxpci5mb3JFYWNoKGUubm9kZXMoKSxmdW5jdGlvbih0KXtlLm5vZGUodCkuZHVtbXk9PT0iYm9yZGVyIiYmZS5yZW1vdmVOb2RlKHQpfSl9ZnVuY3Rpb24gcWxyKGUpe2lyLmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKHQpe2lmKHQudj09PXQudyl7dmFyIHI9ZS5ub2RlKHQudik7ci5zZWxmRWRnZXN8fChyLnNlbGZFZGdlcz1bXSksci5zZWxmRWRnZXMucHVzaCh7ZTp0LGxhYmVsOmUuZWRnZSh0KX0pLGUucmVtb3ZlRWRnZSh0KX19KX1mdW5jdGlvbiBHbHIoZSl7dmFyIHQ9ZDAuYnVpbGRMYXllck1hdHJpeChlKTtpci5mb3JFYWNoKHQsZnVuY3Rpb24ocil7dmFyIG49MDtpci5mb3JFYWNoKHIsZnVuY3Rpb24oaSxvKXt2YXIgYT1lLm5vZGUoaSk7YS5vcmRlcj1vK24saXIuZm9yRWFjaChhLnNlbGZFZGdlcyxmdW5jdGlvbihzKXtkMC5hZGREdW1teU5vZGUoZSwic2VsZmVkZ2UiLHt3aWR0aDpzLmxhYmVsLndpZHRoLGhlaWdodDpzLmxhYmVsLmhlaWdodCxyYW5rOmEucmFuayxvcmRlcjpvKyArK24sZTpzLmUsbGFiZWw6cy5sYWJlbH0sIl9zZSIpfSksZGVsZXRlIGEuc2VsZkVkZ2VzfSl9KX1mdW5jdGlvbiBXbHIoZSl7aXIuZm9yRWFjaChlLm5vZGVzKCksZnVuY3Rpb24odCl7dmFyIHI9ZS5ub2RlKHQpO2lmKHIuZHVtbXk9PT0ic2VsZmVkZ2UiKXt2YXIgbj1lLm5vZGUoci5lLnYpLGk9bi54K24ud2lkdGgvMixvPW4ueSxhPXIueC1pLHM9bi5oZWlnaHQvMjtlLnNldEVkZ2Uoci5lLHIubGFiZWwpLGUucmVtb3ZlTm9kZSh0KSxyLmxhYmVsLnBvaW50cz1be3g6aSsyKmEvMyx5Om8tc30se3g6aSs1KmEvNix5Om8tc30se3g6aSthLHk6b30se3g6aSs1KmEvNix5Om8rc30se3g6aSsyKmEvMyx5Om8rc31dLHIubGFiZWwueD1yLngsci5sYWJlbC55PXIueX19KX1mdW5jdGlvbiBEbHQoZSx0KXtyZXR1cm4gaXIubWFwVmFsdWVzKGlyLnBpY2soZSx0KSxOdW1iZXIpfWZ1bmN0aW9uIE9sdChlKXt2YXIgdD17fTtyZXR1cm4gaXIuZm9yRWFjaChlLGZ1bmN0aW9uKHIsbil7dFtuLnRvTG93ZXJDYXNlKCldPXJ9KSx0fX0pO3ZhciBCc2U9SCgocFFuLEZzZSk9Pnt2YXIgZkg9cW4oKSxZbHI9bnMoKSxqbHI9VWMoKS5HcmFwaDtGc2UuZXhwb3J0cz17ZGVidWdPcmRlcmluZzpYbHJ9O2Z1bmN0aW9uIFhscihlKXt2YXIgdD1ZbHIuYnVpbGRMYXllck1hdHJpeChlKSxyPW5ldyBqbHIoe2NvbXBvdW5kOiEwLG11bHRpZ3JhcGg6ITB9KS5zZXRHcmFwaCh7fSk7cmV0dXJuIGZILmZvckVhY2goZS5ub2RlcygpLGZ1bmN0aW9uKG4pe3Iuc2V0Tm9kZShuLHtsYWJlbDpufSksci5zZXRQYXJlbnQobiwibGF5ZXIiK2Uubm9kZShuKS5yYW5rKX0pLGZILmZvckVhY2goZS5lZGdlcygpLGZ1bmN0aW9uKG4pe3Iuc2V0RWRnZShuLnYsbi53LHt9LG4ubmFtZSl9KSxmSC5mb3JFYWNoKHQsZnVuY3Rpb24obixpKXt2YXIgbz0ibGF5ZXIiK2k7ci5zZXROb2RlKG8se3Jhbms6InNhbWUifSksZkgucmVkdWNlKG4sZnVuY3Rpb24oYSxzKXtyZXR1cm4gci5zZXRFZGdlKGEscyx7c3R5bGU6ImludmlzIn0pLHN9KX0pLHJ9fSk7dmFyIFZzZT1IKChkUW4sSHNlKT0+e0hzZS5leHBvcnRzPSIwLjguNSJ9KTt2YXIgemx0PUgoKG1RbixVc2UpPT57VXNlLmV4cG9ydHM9e2dyYXBobGliOlVjKCksbGF5b3V0OnpzZSgpLGRlYnVnOkJzZSgpLHV0aWw6e3RpbWU6bnMoKS50aW1lLG5vdGltZTpucygpLm5vdGltZX0sdmVyc2lvbjpWc2UoKX19KTt2YXIgemR0PUVlKE9kdCgpLDEpLHtfX2V4dGVuZHM6Y19yLF9fYXNzaWduOnVfcixfX3Jlc3Q6aF9yLF9fZGVjb3JhdGU6RSxfX3BhcmFtOmZfcixfX21ldGFkYXRhOncsX19hd2FpdGVyOnBfcixfX2dlbmVyYXRvcjpkX3IsX19leHBvcnRTdGFyOm1fcixfX2NyZWF0ZUJpbmRpbmc6Z19yLF9fdmFsdWVzOl9fcixfX3JlYWQ6eV9yLF9fc3ByZWFkOnZfcixfX3NwcmVhZEFycmF5czp4X3IsX19zcHJlYWRBcnJheTpiX3IsX19hd2FpdDp3X3IsX19hc3luY0dlbmVyYXRvcjpTX3IsX19hc3luY0RlbGVnYXRvcjpNX3IsX19hc3luY1ZhbHVlczpFX3IsX19tYWtlVGVtcGxhdGVPYmplY3Q6VF9yLF9faW1wb3J0U3RhcjpDX3IsX19pbXBvcnREZWZhdWx0OkFfcixfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OlBfcixfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0OklfcixfX2NsYXNzUHJpdmF0ZUZpZWxkSW46TF9yfT16ZHQuZGVmYXVsdDtmdW5jdGlvbiB5dChlKXtyZXR1cm4gdD0+e2lmKGUpaWYodC5oYXNPd25Qcm9wZXJ0eSgiaXMiKSl7aWYoZSE9PXQuaXMpdGhyb3cgbmV3IEVycm9yKGBjdXN0b20gZWxlbWVudCB0YWcgbmFtZXMgZG8gbm90IG1hdGNoOiAoJHtlfSAhPT0gJHt0LmlzfSlgKX1lbHNlIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJpcyIse3ZhbHVlOmV9KTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQuaXMsdCl9fWZ1bmN0aW9uIEZkdChlLHQscil7ZS5jb25zdHJ1Y3Rvci5oYXNPd25Qcm9wZXJ0eSgicHJvcGVydGllcyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5jb25zdHJ1Y3RvciwicHJvcGVydGllcyIse3ZhbHVlOnt9fSksZS5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW3RdPU9iamVjdC5hc3NpZ24oe30sZS5jb25zdHJ1Y3Rvci5wcm9wZXJ0aWVzW3RdLHIpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuKHQscik9PntGZHQodCxyLGUpfX1mdW5jdGlvbiBCdCguLi5lKXtyZXR1cm4odCxyKT0+e3QuY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoIm9ic2VydmVycyIpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5jb25zdHJ1Y3Rvciwib2JzZXJ2ZXJzIix7dmFsdWU6W119KSx0LmNvbnN0cnVjdG9yLm9ic2VydmVycy5wdXNoKGAke3J9KCR7ZS5qb2luKCIsIil9KWApfX1mdW5jdGlvbiBSdChlLC4uLnQpe3JldHVybihyLG4saSk9PntsZXQgbz1gX19jb21wdXRlJHtufWA7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyx7dmFsdWU6aS5nZXR9KSxpLmdldD12b2lkIDA7bGV0IGE9W2UsLi4udF0uam9pbigiLCIpO0ZkdChyLG4se2NvbXB1dGVkOmAke299KCR7YX0pYH0pfX12YXIgUl9yPUJkdCgoZSx0KT0+ZS5xdWVyeVNlbGVjdG9yKHQpKSxOX3I9QmR0KChlLHQpPT5lLnF1ZXJ5U2VsZWN0b3JBbGwodCkpO2Z1bmN0aW9uIEJkdChlKXtyZXR1cm4gdD0+KHIsbik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkocixuLHtnZXQoKXtyZXR1cm4gZSh0aGlzLnNoYWRvd1Jvb3QsdCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fXdpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV9O3ZhciBiMWU9Lyh1cmxcKCkoW14pXSopKFwpKS9nLHcxZT0vKF5cL1teXC9dKXwoXiMpfCheW1x3LVxkXSo6KS8sUEksWnM7ZnVuY3Rpb24gbF8oZSx0KXtpZihlJiZ3MWUudGVzdChlKXx8ZT09PSIvLyIpcmV0dXJuIGU7aWYoUEk9PT12b2lkIDApe1BJPSExO3RyeXtsZXQgcj1uZXcgVVJMKCJiIiwiaHR0cDovL2EiKTtyLnBhdGhuYW1lPSJjJTIwZCIsUEk9ci5ocmVmPT09Imh0dHA6Ly9hL2MlMjBkIn1jYXRjaChyKXt9fWlmKHR8fCh0PWRvY3VtZW50LmJhc2VVUkl8fHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxQSSl0cnl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfWNhdGNoKHIpe3JldHVybiBlfXJldHVybiBac3x8KFpzPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgidGVtcCIpLFpzLmJhc2U9WnMuY3JlYXRlRWxlbWVudCgiYmFzZSIpLFpzLmhlYWQuYXBwZW5kQ2hpbGQoWnMuYmFzZSksWnMuYW5jaG9yPVpzLmNyZWF0ZUVsZW1lbnQoImEiKSxacy5ib2R5LmFwcGVuZENoaWxkKFpzLmFuY2hvcikpLFpzLmJhc2UuaHJlZj10LFpzLmFuY2hvci5ocmVmPWUsWnMuYW5jaG9yLmhyZWZ8fGV9ZnVuY3Rpb24gSE0oZSx0KXtyZXR1cm4gZS5yZXBsYWNlKGIxZSxmdW5jdGlvbihyLG4saSxvKXtyZXR1cm4gbisiJyIrbF8oaS5yZXBsYWNlKC9bIiddL2csIiIpLHQpKyInIitvfSl9ZnVuY3Rpb24gQ3goZSl7cmV0dXJuIGUuc3Vic3RyaW5nKDAsZS5sYXN0SW5kZXhPZigiLyIpKzEpfXZhciBjXz0hd2luZG93LlNoYWR5RE9NfHwhd2luZG93LlNoYWR5RE9NLmluVXNlLEhfcj1Cb29sZWFuKCF3aW5kb3cuU2hhZHlDU1N8fHdpbmRvdy5TaGFkeUNTUy5uYXRpdmVDc3MpLFZfcj0hd2luZG93LmN1c3RvbUVsZW1lbnRzLnBvbHlmaWxsV3JhcEZsdXNoQ2FsbGJhY2ssSGR0PWNfJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2VTeW5jImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlJiYoKCk9Pnt0cnl7bGV0IGU9bmV3IENTU1N0eWxlU2hlZXQ7ZS5yZXBsYWNlU3luYygiIik7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHQuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHM9W2VdLHQuc2hhZG93Um9vdC5hZG9wdGVkU3R5bGVTaGVldHNbMF09PT1lfWNhdGNoKGUpe3JldHVybiExfX0pKCksVmR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5yb290UGF0aHx8Q3goZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpO3ZhciBWTT13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIuc2FuaXRpemVET01WYWx1ZXx8dm9pZCAwO3ZhciBVZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnNldFBhc3NpdmVUb3VjaEdlc3R1cmVzfHwhMTt2YXIgaXU9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLnN0cmljdFRlbXBsYXRlUG9saWN5fHwhMTt2YXIgcWR0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5hbGxvd1RlbXBsYXRlRnJvbURvbU1vZHVsZXx8ITE7dmFyIHBwPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lPcHRpbWl6YXRpb25zfHwhMTt2YXIgSUk9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmxlZ2FjeVdhcm5pbmdzfHwhMTt2YXIgR2R0PXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zeW5jSW5pdGlhbFJlbmRlcnx8ITE7dmFyIExJPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lVbmRlZmluZWR8fCExO3ZhciBXZHQ9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLm9yZGVyZWRDb21wdXRlZHx8ITE7dmFyIGhHPSEwO3ZhciBmRz13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIucmVtb3ZlTmVzdGVkVGVtcGxhdGVzfHwhMTt2YXIga0k9d2luZG93LlBvbHltZXImJndpbmRvdy5Qb2x5bWVyLmZhc3REb21JZnx8ITE7dmFyIFVNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5zdXBwcmVzc1RlbXBsYXRlTm90aWZpY2F0aW9uc3x8ITE7dmFyIHFNPXdpbmRvdy5Qb2x5bWVyJiZ3aW5kb3cuUG9seW1lci5sZWdhY3lOb09ic2VydmVkQXR0cmlidXRlc3x8ITE7dmFyIFlkdD13aW5kb3cuUG9seW1lciYmd2luZG93LlBvbHltZXIudXNlQWRvcHRlZFN0eWxlU2hlZXRzV2l0aEJ1aWx0Q1NTfHwhMTt2YXIgUzFlPTA7ZnVuY3Rpb24gamR0KCl7fWpkdC5wcm90b3R5cGUuX19taXhpbkFwcGxpY2F0aW9ucztqZHQucHJvdG90eXBlLl9fbWl4aW5TZXQ7dmFyIE5uPWZ1bmN0aW9uKGUpe2xldCB0PWUuX19taXhpbkFwcGxpY2F0aW9uczt0fHwodD1uZXcgV2Vha01hcCxlLl9fbWl4aW5BcHBsaWNhdGlvbnM9dCk7bGV0IHI9UzFlKys7ZnVuY3Rpb24gbihpKXtsZXQgbz1pLl9fbWl4aW5TZXQ7aWYobyYmb1tyXSlyZXR1cm4gaTtsZXQgYT10LHM9YS5nZXQoaSk7aWYoIXMpe3M9ZShpKSxhLnNldChpLHMpO2xldCBsPU9iamVjdC5jcmVhdGUocy5fX21peGluU2V0fHxvfHxudWxsKTtsW3JdPSEwLHMuX19taXhpblNldD1sfXJldHVybiBzfXJldHVybiBufTt2YXIgcEc9e30sS2R0PXt9O2Z1bmN0aW9uIFhkdChlLHQpe3BHW2VdPUtkdFtlLnRvTG93ZXJDYXNlKCldPXR9ZnVuY3Rpb24gJGR0KGUpe3JldHVybiBwR1tlXXx8S2R0W2UudG9Mb3dlckNhc2UoKV19ZnVuY3Rpb24gTTFlKGUpe2UucXVlcnlTZWxlY3Rvcigic3R5bGUiKSYmY29uc29sZS53YXJuKCJkb20tbW9kdWxlICVzIGhhcyBzdHlsZSBvdXRzaWRlIHRlbXBsYXRlIixlLmlkKX12YXIgb3U9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVyblsiaWQiXX1zdGF0aWMgaW1wb3J0KHQscil7aWYodCl7bGV0IG49JGR0KHQpO3JldHVybiBuJiZyP24ucXVlcnlTZWxlY3RvcihyKTpufXJldHVybiBudWxsfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayh0LHIsbixpKXtyIT09biYmdGhpcy5yZWdpc3RlcigpfWdldCBhc3NldHBhdGgoKXtpZighdGhpcy5fX2Fzc2V0cGF0aCl7bGV0IHQ9d2luZG93LkhUTUxJbXBvcnRzJiZIVE1MSW1wb3J0cy5pbXBvcnRGb3JFbGVtZW50P0hUTUxJbXBvcnRzLmltcG9ydEZvckVsZW1lbnQodGhpcyl8fGRvY3VtZW50OnRoaXMub3duZXJEb2N1bWVudCxyPWxfKHRoaXMuZ2V0QXR0cmlidXRlKCJhc3NldHBhdGgiKXx8IiIsdC5iYXNlVVJJKTt0aGlzLl9fYXNzZXRwYXRoPUN4KHIpfXJldHVybiB0aGlzLl9fYXNzZXRwYXRofXJlZ2lzdGVyKHQpe2lmKHQ9dHx8dGhpcy5pZCx0KXtpZihpdSYmJGR0KHQpIT09dm9pZCAwKXRocm93IFhkdCh0LG51bGwpLG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGRvbS1tb2R1bGUgJHt0fSByZS1yZWdpc3RlcmVkYCk7dGhpcy5pZD10LFhkdCh0LHRoaXMpLE0xZSh0aGlzKX19fTtvdS5wcm90b3R5cGUubW9kdWxlcz1wRztjdXN0b21FbGVtZW50cy5kZWZpbmUoImRvbS1tb2R1bGUiLG91KTt2YXIgRTFlPSJsaW5rW3JlbD1pbXBvcnRdW3R5cGV+PWNzc10iLFQxZT0iaW5jbHVkZSIsWmR0PSJzaGFkeS11bnNjb3BlZCI7ZnVuY3Rpb24gZEcoZSl7cmV0dXJuIG91LmltcG9ydChlKX1mdW5jdGlvbiBKZHQoZSl7bGV0IHQ9ZS5ib2R5P2UuYm9keTplLHI9SE0odC50ZXh0Q29udGVudCxlLmJhc2VVUkkpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gbi50ZXh0Q29udGVudD1yLG59ZnVuY3Rpb24gQzFlKGUpe2xldCB0PWUudHJpbSgpLnNwbGl0KC9ccysvKSxyPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXIucHVzaCguLi5BMWUodFtuXSkpO3JldHVybiByfWZ1bmN0aW9uIEExZShlKXtsZXQgdD1kRyhlKTtpZighdClyZXR1cm4gY29uc29sZS53YXJuKCJDb3VsZCBub3QgZmluZCBzdHlsZSBkYXRhIGluIG1vZHVsZSBuYW1lZCIsZSksW107aWYodC5fc3R5bGVzPT09dm9pZCAwKXtsZXQgcj1bXTtyLnB1c2goLi4ubUcodCkpO2xldCBuPXQucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtuJiZyLnB1c2goLi4uUkkobix0LmFzc2V0cGF0aCkpLHQuX3N0eWxlcz1yfXJldHVybiB0Ll9zdHlsZXN9ZnVuY3Rpb24gUkkoZSx0KXtpZighZS5fc3R5bGVzKXtsZXQgcj1bXSxuPWUuY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgbz1uW2ldLGE9by5nZXRBdHRyaWJ1dGUoVDFlKTthJiZyLnB1c2goLi4uQzFlKGEpLmZpbHRlcihmdW5jdGlvbihzLGwsYyl7cmV0dXJuIGMuaW5kZXhPZihzKT09PWx9KSksdCYmKG8udGV4dENvbnRlbnQ9SE0oby50ZXh0Q29udGVudCx0KSksci5wdXNoKG8pfWUuX3N0eWxlcz1yfXJldHVybiBlLl9zdHlsZXN9ZnVuY3Rpb24gUWR0KGUpe2xldCB0PWRHKGUpO3JldHVybiB0P21HKHQpOltdfWZ1bmN0aW9uIG1HKGUpe2xldCB0PVtdLHI9ZS5xdWVyeVNlbGVjdG9yQWxsKEUxZSk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspe2xldCBpPXJbbl07aWYoaS5pbXBvcnQpe2xldCBvPWkuaW1wb3J0LGE9aS5oYXNBdHRyaWJ1dGUoWmR0KTtpZihhJiYhby5fdW5zY29wZWRTdHlsZSl7bGV0IHM9SmR0KG8pO3Muc2V0QXR0cmlidXRlKFpkdCwiIiksby5fdW5zY29wZWRTdHlsZT1zfWVsc2Ugby5fc3R5bGV8fChvLl9zdHlsZT1KZHQobykpO3QucHVzaChhP28uX3Vuc2NvcGVkU3R5bGU6by5fc3R5bGUpfX1yZXR1cm4gdH1mdW5jdGlvbiB0bXQoZSl7bGV0IHQ9ZS50cmltKCkuc3BsaXQoL1xzKy8pLHI9IiI7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspcis9UDFlKHRbbl0pO3JldHVybiByfWZ1bmN0aW9uIFAxZShlKXtsZXQgdD1kRyhlKTtpZih0JiZ0Ll9jc3NUZXh0PT09dm9pZCAwKXtsZXQgcj1MMWUodCksbj10LnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7biYmKHIrPUkxZShuLHQuYXNzZXRwYXRoKSksdC5fY3NzVGV4dD1yfHxudWxsfXJldHVybiB0fHxjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkIixlKSx0JiZ0Ll9jc3NUZXh0fHwiIn1mdW5jdGlvbiBJMWUoZSx0KXtsZXQgcj0iIixuPVJJKGUsdCk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV07by5wYXJlbnROb2RlJiZvLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobykscis9by50ZXh0Q29udGVudH1yZXR1cm4gcn1mdW5jdGlvbiBMMWUoZSl7bGV0IHQ9IiIscj1tRyhlKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl0Kz1yW25dLnRleHRDb250ZW50O3JldHVybiB0fXZhciB1ZT13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoJiZ3aW5kb3cuU2hhZHlET00ud3JhcD93aW5kb3cuU2hhZHlET00ud3JhcDp3aW5kb3cuU2hhZHlET00/ZT0+U2hhZHlET00ucGF0Y2goZSk6ZT0+ZTtmdW5jdGlvbiBOSShlKXtyZXR1cm4gZS5pbmRleE9mKCIuIik+PTB9ZnVuY3Rpb24gYXUoZSl7bGV0IHQ9ZS5pbmRleE9mKCIuIik7cmV0dXJuIHQ9PT0tMT9lOmUuc2xpY2UoMCx0KX1mdW5jdGlvbiBnRyhlLHQpe3JldHVybiBlLmluZGV4T2YodCsiLiIpPT09MH1mdW5jdGlvbiBBeChlLHQpe3JldHVybiB0LmluZGV4T2YoZSsiLiIpPT09MH1mdW5jdGlvbiBkcChlLHQscil7cmV0dXJuIHQrci5zbGljZShlLmxlbmd0aCl9ZnVuY3Rpb24gREkoZSx0KXtyZXR1cm4gZT09PXR8fGdHKGUsdCl8fEF4KGUsdCl9ZnVuY3Rpb24gUHgoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IHQ9W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBuPWVbcl0udG9TdHJpbmcoKS5zcGxpdCgiLiIpO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXQucHVzaChuW2ldKX1yZXR1cm4gdC5qb2luKCIuIil9ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBlbXQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/UHgoZSkuc3BsaXQoIi4iKTplLnRvU3RyaW5nKCkuc3BsaXQoIi4iKX1mdW5jdGlvbiBObyhlLHQscil7bGV0IG49ZSxpPWVtdCh0KTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7aWYoIW4pcmV0dXJuO2xldCBhPWlbb107bj1uW2FdfXJldHVybiByJiYoci5wYXRoPWkuam9pbigiLiIpKSxufWZ1bmN0aW9uIF9HKGUsdCxyKXtsZXQgbj1lLGk9ZW10KHQpLG89aVtpLmxlbmd0aC0xXTtpZihpLmxlbmd0aD4xKXtmb3IobGV0IGE9MDthPGkubGVuZ3RoLTE7YSsrKXtsZXQgcz1pW2FdO2lmKG49bltzXSwhbilyZXR1cm59bltvXT1yfWVsc2Ugblt0XT1yO3JldHVybiBpLmpvaW4oIi4iKX12YXIgT0k9e30sazFlPS8tW2Etel0vZyxSMWU9LyhbQS1aXSkvZztmdW5jdGlvbiB3bShlKXtyZXR1cm4gT0lbZV18fChPSVtlXT1lLmluZGV4T2YoIi0iKTwwP2U6ZS5yZXBsYWNlKGsxZSx0PT50WzFdLnRvVXBwZXJDYXNlKCkpKX1mdW5jdGlvbiBJeChlKXtyZXR1cm4gT0lbZV18fChPSVtlXT1lLnJlcGxhY2UoUjFlLCItJDEiKS50b0xvd2VyQ2FzZSgpKX12YXIgTjFlPTAscm10PTAsTHg9W10sRDFlPTAseUc9ITEsbm10PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtuZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIoTzFlKS5vYnNlcnZlKG5tdCx7Y2hhcmFjdGVyRGF0YTohMH0pO2Z1bmN0aW9uIE8xZSgpe3lHPSExO2xldCBlPUx4Lmxlbmd0aDtmb3IobGV0IHQ9MDt0PGU7dCsrKXtsZXQgcj1MeFt0XTtpZihyKXRyeXtyKCl9Y2F0Y2gobil7c2V0VGltZW91dCgoKT0+e3Rocm93IG59KX19THguc3BsaWNlKDAsZSkscm10Kz1lfXZhciBtbz17YWZ0ZXIoZSl7cmV0dXJue3J1bih0KXtyZXR1cm4gd2luZG93LnNldFRpbWVvdXQodCxlKX0sY2FuY2VsKHQpe3dpbmRvdy5jbGVhclRpbWVvdXQodCl9fX0scnVuKGUsdCl7cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGUsdCl9LGNhbmNlbChlKXt3aW5kb3cuY2xlYXJUaW1lb3V0KGUpfX07dmFyIE5pPXtydW4oZSl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9LGNhbmNlbChlKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZSl9fTt2YXIga3g9e3J1bihlKXtyZXR1cm4gd2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2s/d2luZG93LnJlcXVlc3RJZGxlQ2FsbGJhY2soZSk6d2luZG93LnNldFRpbWVvdXQoZSwxNil9LGNhbmNlbChlKXt3aW5kb3cuY2FuY2VsSWRsZUNhbGxiYWNrP3dpbmRvdy5jYW5jZWxJZGxlQ2FsbGJhY2soZSk6d2luZG93LmNsZWFyVGltZW91dChlKX19O3ZhciBjaT17cnVuKGUpe3JldHVybiB5R3x8KHlHPSEwLG5tdC50ZXh0Q29udGVudD1EMWUrKyksTHgucHVzaChlKSxOMWUrK30sY2FuY2VsKGUpe2xldCB0PWUtcm10O2lmKHQ+PTApe2lmKCFMeFt0XSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgYXN5bmMgaGFuZGxlOiAiK2UpO0x4W3RdPW51bGx9fX07dmFyIHoxZT1jaSx6ST1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIGNyZWF0ZVByb3BlcnRpZXMobil7bGV0IGk9dGhpcy5wcm90b3R5cGU7Zm9yKGxldCBvIGluIG4pbyBpbiBpfHxpLl9jcmVhdGVQcm9wZXJ0eUFjY2Vzc29yKG8pfXN0YXRpYyBhdHRyaWJ1dGVOYW1lRm9yUHJvcGVydHkobil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKX1zdGF0aWMgdHlwZUZvclByb3BlcnR5KG4pe31fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihuLGkpe3RoaXMuX2FkZFByb3BlcnR5VG9BdHRyaWJ1dGVNYXAobiksdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2RhdGFIYXNBY2Nlc3NvciIsdGhpcykpfHwodGhpcy5fX2RhdGFIYXNBY2Nlc3Nvcj1PYmplY3QuYXNzaWduKHt9LHRoaXMuX19kYXRhSGFzQWNjZXNzb3IpKSx0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW25dfHwodGhpcy5fX2RhdGFIYXNBY2Nlc3NvcltuXT0hMCx0aGlzLl9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKG4saSkpfV9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKG4pe3RoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19kYXRhQXR0cmlidXRlcyIsdGhpcykpfHwodGhpcy5fX2RhdGFBdHRyaWJ1dGVzPU9iamVjdC5hc3NpZ24oe30sdGhpcy5fX2RhdGFBdHRyaWJ1dGVzKSk7bGV0IGk9dGhpcy5fX2RhdGFBdHRyaWJ1dGVzW25dO3JldHVybiBpfHwoaT10aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKSx0aGlzLl9fZGF0YUF0dHJpYnV0ZXNbaV09biksaX1fZGVmaW5lUHJvcGVydHlBY2Nlc3NvcihuLGkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLG4se2dldCgpe3JldHVybiB0aGlzLl9fZGF0YVtuXX0sc2V0Omk/ZnVuY3Rpb24oKXt9OmZ1bmN0aW9uKG8pe3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShuLG8sITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfX0pfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fZGF0YUVuYWJsZWQ9ITEsdGhpcy5fX2RhdGFSZWFkeT0hMSx0aGlzLl9fZGF0YUludmFsaWQ9ITEsdGhpcy5fX2RhdGE9e30sdGhpcy5fX2RhdGFQZW5kaW5nPW51bGwsdGhpcy5fX2RhdGFPbGQ9bnVsbCx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHM9bnVsbCx0aGlzLl9fZGF0YUNvdW50ZXI9MCx0aGlzLl9fc2VyaWFsaXppbmc9ITEsdGhpcy5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1yZWFkeSgpe3RoaXMuX19kYXRhUmVhZHk9ITAsdGhpcy5fZmx1c2hQcm9wZXJ0aWVzKCl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7Zm9yKGxldCBuIGluIHRoaXMuX19kYXRhSGFzQWNjZXNzb3IpdGhpcy5oYXNPd25Qcm9wZXJ0eShuKSYmKHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcz10aGlzLl9fZGF0YUluc3RhbmNlUHJvcHN8fHt9LHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wc1tuXT10aGlzW25dLGRlbGV0ZSB0aGlzW25dKX1faW5pdGlhbGl6ZUluc3RhbmNlUHJvcGVydGllcyhuKXtPYmplY3QuYXNzaWduKHRoaXMsbil9X3NldFByb3BlcnR5KG4saSl7dGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4saSkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9X2dldFByb3BlcnR5KG4pe3JldHVybiB0aGlzLl9fZGF0YVtuXX1fc2V0UGVuZGluZ1Byb3BlcnR5KG4saSxvKXtsZXQgYT10aGlzLl9fZGF0YVtuXSxzPXRoaXMuX3Nob3VsZFByb3BlcnR5Q2hhbmdlKG4saSxhKTtyZXR1cm4gcyYmKHRoaXMuX19kYXRhUGVuZGluZ3x8KHRoaXMuX19kYXRhUGVuZGluZz17fSx0aGlzLl9fZGF0YU9sZD17fSksdGhpcy5fX2RhdGFPbGQmJiEobiBpbiB0aGlzLl9fZGF0YU9sZCkmJih0aGlzLl9fZGF0YU9sZFtuXT1hKSx0aGlzLl9fZGF0YVtuXT1pLHRoaXMuX19kYXRhUGVuZGluZ1tuXT1pKSxzfV9pc1Byb3BlcnR5UGVuZGluZyhuKXtyZXR1cm4hISh0aGlzLl9fZGF0YVBlbmRpbmcmJnRoaXMuX19kYXRhUGVuZGluZy5oYXNPd25Qcm9wZXJ0eShuKSl9X2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl7IXRoaXMuX19kYXRhSW52YWxpZCYmdGhpcy5fX2RhdGFSZWFkeSYmKHRoaXMuX19kYXRhSW52YWxpZD0hMCx6MWUucnVuKCgpPT57dGhpcy5fX2RhdGFJbnZhbGlkJiYodGhpcy5fX2RhdGFJbnZhbGlkPSExLHRoaXMuX2ZsdXNoUHJvcGVydGllcygpKX0pKX1fZW5hYmxlUHJvcGVydGllcygpe3RoaXMuX19kYXRhRW5hYmxlZHx8KHRoaXMuX19kYXRhRW5hYmxlZD0hMCx0aGlzLl9fZGF0YUluc3RhbmNlUHJvcHMmJih0aGlzLl9pbml0aWFsaXplSW5zdGFuY2VQcm9wZXJ0aWVzKHRoaXMuX19kYXRhSW5zdGFuY2VQcm9wcyksdGhpcy5fX2RhdGFJbnN0YW5jZVByb3BzPW51bGwpLHRoaXMucmVhZHkoKSl9X2ZsdXNoUHJvcGVydGllcygpe3RoaXMuX19kYXRhQ291bnRlcisrO2xldCBuPXRoaXMuX19kYXRhLGk9dGhpcy5fX2RhdGFQZW5kaW5nLG89dGhpcy5fX2RhdGFPbGQ7dGhpcy5fc2hvdWxkUHJvcGVydGllc0NoYW5nZShuLGksbykmJih0aGlzLl9fZGF0YVBlbmRpbmc9bnVsbCx0aGlzLl9fZGF0YU9sZD1udWxsLHRoaXMuX3Byb3BlcnRpZXNDaGFuZ2VkKG4saSxvKSksdGhpcy5fX2RhdGFDb3VudGVyLS19X3Nob3VsZFByb3BlcnRpZXNDaGFuZ2UobixpLG8pe3JldHVybiBCb29sZWFuKGkpfV9wcm9wZXJ0aWVzQ2hhbmdlZChuLGksbyl7fV9zaG91bGRQcm9wZXJ0eUNoYW5nZShuLGksbyl7cmV0dXJuIG8hPT1pJiYobz09PW98fGk9PT1pKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobixpLG8sYSl7aSE9PW8mJnRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHkobixvKSxzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2smJnN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhuLGksbyxhKX1fYXR0cmlidXRlVG9Qcm9wZXJ0eShuLGksbyl7aWYoIXRoaXMuX19zZXJpYWxpemluZyl7bGV0IGE9dGhpcy5fX2RhdGFBdHRyaWJ1dGVzLHM9YSYmYVtuXXx8bjt0aGlzW3NdPXRoaXMuX2Rlc2VyaWFsaXplVmFsdWUoaSxvfHx0aGlzLmNvbnN0cnVjdG9yLnR5cGVGb3JQcm9wZXJ0eShzKSl9fV9wcm9wZXJ0eVRvQXR0cmlidXRlKG4saSxvKXt0aGlzLl9fc2VyaWFsaXppbmc9ITAsbz1hcmd1bWVudHMubGVuZ3RoPDM/dGhpc1tuXTpvLHRoaXMuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHRoaXMsbyxpfHx0aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShuKSksdGhpcy5fX3NlcmlhbGl6aW5nPSExfV92YWx1ZVRvTm9kZUF0dHJpYnV0ZShuLGksbyl7bGV0IGE9dGhpcy5fc2VyaWFsaXplVmFsdWUoaSk7KG89PT0iY2xhc3MifHxvPT09Im5hbWUifHxvPT09InNsb3QiKSYmKG49dWUobikpLGE9PT12b2lkIDA/bi5yZW1vdmVBdHRyaWJ1dGUobyk6bi5zZXRBdHRyaWJ1dGUobyxhKX1fc2VyaWFsaXplVmFsdWUobil7c3dpdGNoKHR5cGVvZiBuKXtjYXNlImJvb2xlYW4iOnJldHVybiBuPyIiOnZvaWQgMDtkZWZhdWx0OnJldHVybiBuIT1udWxsP24udG9TdHJpbmcoKTp2b2lkIDB9fV9kZXNlcmlhbGl6ZVZhbHVlKG4saSl7c3dpdGNoKGkpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gbiE9PW51bGw7Y2FzZSBOdW1iZXI6cmV0dXJuIE51bWJlcihuKTtkZWZhdWx0OnJldHVybiBufX19cmV0dXJuIHR9KTt2YXIgaW10PXt9LEZJPUhUTUxFbGVtZW50LnByb3RvdHlwZTtmb3IoO0ZJOyl7bGV0IGU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRkkpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWltdFtlW3RdXT0hMDtGST1PYmplY3QuZ2V0UHJvdG90eXBlT2YoRkkpfWZ1bmN0aW9uIEYxZShlLHQpe2lmKCFpbXRbdF0pe2xldCByPWVbdF07ciE9PXZvaWQgMCYmKGUuX19kYXRhP2UuX3NldFBlbmRpbmdQcm9wZXJ0eSh0LHIpOihlLl9fZGF0YVByb3RvP2UuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19kYXRhUHJvdG8iLGUpKXx8KGUuX19kYXRhUHJvdG89T2JqZWN0LmNyZWF0ZShlLl9fZGF0YVByb3RvKSk6ZS5fX2RhdGFQcm90bz17fSxlLl9fZGF0YVByb3RvW3RdPXIpKX19dmFyIEJJPU5uKGU9PntsZXQgdD16SShlKTtjbGFzcyByIGV4dGVuZHMgdHtzdGF0aWMgY3JlYXRlUHJvcGVydGllc0ZvckF0dHJpYnV0ZXMoKXtsZXQgaT10aGlzLm9ic2VydmVkQXR0cmlidXRlcztmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl0aGlzLnByb3RvdHlwZS5fY3JlYXRlUHJvcGVydHlBY2Nlc3Nvcih3bShpW29dKSl9c3RhdGljIGF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShpKXtyZXR1cm4gSXgoaSl9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5fX2RhdGFQcm90byYmKHRoaXMuX2luaXRpYWxpemVQcm90b1Byb3BlcnRpZXModGhpcy5fX2RhdGFQcm90byksdGhpcy5fX2RhdGFQcm90bz1udWxsKSxzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKX1faW5pdGlhbGl6ZVByb3RvUHJvcGVydGllcyhpKXtmb3IobGV0IG8gaW4gaSl0aGlzLl9zZXRQcm9wZXJ0eShvLGlbb10pfV9lbnN1cmVBdHRyaWJ1dGUoaSxvKXtsZXQgYT10aGlzO2EuaGFzQXR0cmlidXRlKGkpfHx0aGlzLl92YWx1ZVRvTm9kZUF0dHJpYnV0ZShhLG8saSl9X3NlcmlhbGl6ZVZhbHVlKGkpe3N3aXRjaCh0eXBlb2YgaSl7Y2FzZSJvYmplY3QiOmlmKGkgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBpLnRvU3RyaW5nKCk7aWYoaSl0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGkpfWNhdGNoKG8pe3JldHVybiIifWRlZmF1bHQ6cmV0dXJuIHN1cGVyLl9zZXJpYWxpemVWYWx1ZShpKX19X2Rlc2VyaWFsaXplVmFsdWUoaSxvKXtsZXQgYTtzd2l0Y2gobyl7Y2FzZSBPYmplY3Q6dHJ5e2E9SlNPTi5wYXJzZShpKX1jYXRjaChzKXthPWl9YnJlYWs7Y2FzZSBBcnJheTp0cnl7YT1KU09OLnBhcnNlKGkpfWNhdGNoKHMpe2E9bnVsbCxjb25zb2xlLndhcm4oYFBvbHltZXI6OkF0dHJpYnV0ZXM6IGNvdWxkbid0IGRlY29kZSBBcnJheSBhcyBKU09OOiAke2l9YCl9YnJlYWs7Y2FzZSBEYXRlOmE9aXNOYU4oaSk/U3RyaW5nKGkpOk51bWJlcihpKSxhPW5ldyBEYXRlKGEpO2JyZWFrO2RlZmF1bHQ6YT1zdXBlci5fZGVzZXJpYWxpemVWYWx1ZShpLG8pO2JyZWFrfXJldHVybiBhfV9kZWZpbmVQcm9wZXJ0eUFjY2Vzc29yKGksbyl7RjFlKHRoaXMsaSksc3VwZXIuX2RlZmluZVByb3BlcnR5QWNjZXNzb3IoaSxvKX1faGFzQWNjZXNzb3IoaSl7cmV0dXJuIHRoaXMuX19kYXRhSGFzQWNjZXNzb3ImJnRoaXMuX19kYXRhSGFzQWNjZXNzb3JbaV19X2lzUHJvcGVydHlQZW5kaW5nKGkpe3JldHVybiBCb29sZWFuKHRoaXMuX19kYXRhUGVuZGluZyYmaSBpbiB0aGlzLl9fZGF0YVBlbmRpbmcpfX1yZXR1cm4gcn0pO3ZhciBCMWU9eyJkb20taWYiOiEwLCJkb20tcmVwZWF0IjohMH0sb210PSExLGFtdD0hMTtmdW5jdGlvbiBIMWUoKXtpZighb210KXtvbXQ9ITA7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtlLnBsYWNlaG9sZGVyPSJhIixhbXQ9ZS5wbGFjZWhvbGRlcj09PWUudGV4dENvbnRlbnR9cmV0dXJuIGFtdH1mdW5jdGlvbiBWMWUoZSl7SDFlKCkmJmUubG9jYWxOYW1lPT09InRleHRhcmVhIiYmZS5wbGFjZWhvbGRlciYmZS5wbGFjZWhvbGRlcj09PWUudGV4dENvbnRlbnQmJihlLnRleHRDb250ZW50PW51bGwpfWZ1bmN0aW9uIFUxZShlKXtsZXQgdD1lLmdldEF0dHJpYnV0ZSgiaXMiKTtpZih0JiZCMWVbdF0pe2xldCByPWU7Zm9yKHIucmVtb3ZlQXR0cmlidXRlKCJpcyIpLGU9ci5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCksci5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlLHIpLGUuYXBwZW5kQ2hpbGQocik7ci5hdHRyaWJ1dGVzLmxlbmd0aDspZS5zZXRBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzWzBdLm5hbWUsci5hdHRyaWJ1dGVzWzBdLnZhbHVlKSxyLnJlbW92ZUF0dHJpYnV0ZShyLmF0dHJpYnV0ZXNbMF0ubmFtZSl9cmV0dXJuIGV9ZnVuY3Rpb24gc210KGUsdCl7bGV0IHI9dC5wYXJlbnRJbmZvJiZzbXQoZSx0LnBhcmVudEluZm8pO2lmKHIpe2ZvcihsZXQgbj1yLmZpcnN0Q2hpbGQsaT0wO247bj1uLm5leHRTaWJsaW5nKWlmKHQucGFyZW50SW5kZXg9PT1pKyspcmV0dXJuIG59ZWxzZSByZXR1cm4gZX1mdW5jdGlvbiBxMWUoZSx0LHIsbil7bi5pZCYmKHRbbi5pZF09cil9ZnVuY3Rpb24gRzFlKGUsdCxyKXtpZihyLmV2ZW50cyYmci5ldmVudHMubGVuZ3RoKWZvcihsZXQgbj0wLGk9ci5ldmVudHMsbztuPGkubGVuZ3RoJiYobz1pW25dKTtuKyspZS5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0LG8ubmFtZSxvLnZhbHVlLGUpfWZ1bmN0aW9uIFcxZShlLHQscixuKXtyLnRlbXBsYXRlSW5mbyYmKHQuX3RlbXBsYXRlSW5mbz1yLnRlbXBsYXRlSW5mbyx0Ll9wYXJlbnRUZW1wbGF0ZUluZm89bil9ZnVuY3Rpb24gWTFlKGUsdCxyKXtyZXR1cm4gZT1lLl9tZXRob2RIb3N0fHxlLGZ1bmN0aW9uKGkpe2Vbcl0/ZVtyXShpLGkuZGV0YWlsKTpjb25zb2xlLndhcm4oImxpc3RlbmVyIG1ldGhvZCBgIityKyJgIG5vdCBkZWZpbmVkIil9fXZhciBsbXQ9Tm4oZT0+e2NsYXNzIHQgZXh0ZW5kcyBle3N0YXRpYyBfcGFyc2VUZW1wbGF0ZShuLGkpe2lmKCFuLl90ZW1wbGF0ZUluZm8pe2xldCBvPW4uX3RlbXBsYXRlSW5mbz17fTtvLm5vZGVJbmZvTGlzdD1bXSxvLm5lc3RlZFRlbXBsYXRlPUJvb2xlYW4oaSksby5zdHJpcFdoaXRlU3BhY2U9aSYmaS5zdHJpcFdoaXRlU3BhY2V8fG4uaGFzQXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiksdGhpcy5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQobixvLHtwYXJlbnQ6bnVsbH0pfXJldHVybiBuLl90ZW1wbGF0ZUluZm99c3RhdGljIF9wYXJzZVRlbXBsYXRlQ29udGVudChuLGksbyl7cmV0dXJuIHRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKG4uY29udGVudCxpLG8pfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5vZGUobixpLG8pe2xldCBhPSExLHM9bjtyZXR1cm4gcy5sb2NhbE5hbWU9PSJ0ZW1wbGF0ZSImJiFzLmhhc0F0dHJpYnV0ZSgicHJlc2VydmUtY29udGVudCIpP2E9dGhpcy5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKHMsaSxvKXx8YTpzLmxvY2FsTmFtZT09PSJzbG90IiYmKGkuaGFzSW5zZXJ0aW9uUG9pbnQ9ITApLFYxZShzKSxzLmZpcnN0Q2hpbGQmJnRoaXMuX3BhcnNlVGVtcGxhdGVDaGlsZE5vZGVzKHMsaSxvKSxzLmhhc0F0dHJpYnV0ZXMmJnMuaGFzQXR0cmlidXRlcygpJiYoYT10aGlzLl9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZXMocyxpLG8pfHxhKSxhfHxvLm5vdGVkfXN0YXRpYyBfcGFyc2VUZW1wbGF0ZUNoaWxkTm9kZXMobixpLG8pe2lmKCEobi5sb2NhbE5hbWU9PT0ic2NyaXB0Inx8bi5sb2NhbE5hbWU9PT0ic3R5bGUiKSlmb3IobGV0IGE9bi5maXJzdENoaWxkLHM9MCxsO2E7YT1sKXtpZihhLmxvY2FsTmFtZT09InRlbXBsYXRlIiYmKGE9VTFlKGEpKSxsPWEubmV4dFNpYmxpbmcsYS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXtsZXQgdT1sO2Zvcig7dSYmdS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFOylhLnRleHRDb250ZW50Kz11LnRleHRDb250ZW50LGw9dS5uZXh0U2libGluZyxuLnJlbW92ZUNoaWxkKHUpLHU9bDtpZihpLnN0cmlwV2hpdGVTcGFjZSYmIWEudGV4dENvbnRlbnQudHJpbSgpKXtuLnJlbW92ZUNoaWxkKGEpO2NvbnRpbnVlfX1sZXQgYz17cGFyZW50SW5kZXg6cyxwYXJlbnRJbmZvOm99O3RoaXMuX3BhcnNlVGVtcGxhdGVOb2RlKGEsaSxjKSYmKGMuaW5mb0luZGV4PWkubm9kZUluZm9MaXN0LnB1c2goYyktMSksYS5wYXJlbnROb2RlJiZzKyt9fXN0YXRpYyBfcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlKG4saSxvKXtsZXQgYT1uLHM9dGhpcy5fcGFyc2VUZW1wbGF0ZShhLGkpO3JldHVybihzLmNvbnRlbnQ9YS5jb250ZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmRDaGlsZChhLmNvbnRlbnQpLG8udGVtcGxhdGVJbmZvPXMsITB9c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZXMobixpLG8pe2xldCBhPSExLHM9QXJyYXkuZnJvbShuLmF0dHJpYnV0ZXMpO2ZvcihsZXQgbD1zLmxlbmd0aC0xLGM7Yz1zW2xdO2wtLSlhPXRoaXMuX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG4saSxvLGMubmFtZSxjLnZhbHVlKXx8YTtyZXR1cm4gYX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKG4saSxvLGEscyl7cmV0dXJuIGEuc2xpY2UoMCwzKT09PSJvbi0iPyhuLnJlbW92ZUF0dHJpYnV0ZShhKSxvLmV2ZW50cz1vLmV2ZW50c3x8W10sby5ldmVudHMucHVzaCh7bmFtZTphLnNsaWNlKDMpLHZhbHVlOnN9KSwhMCk6YT09PSJpZCI/KG8uaWQ9cywhMCk6ITF9c3RhdGljIF9jb250ZW50Rm9yVGVtcGxhdGUobil7bGV0IGk9bi5fdGVtcGxhdGVJbmZvO3JldHVybiBpJiZpLmNvbnRlbnR8fG4uY29udGVudH1fc3RhbXBUZW1wbGF0ZShuLGkpe24mJiFuLmNvbnRlbnQmJndpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlJiZIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKG4pLGk9aXx8dGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZShuKTtsZXQgbz1pLm5vZGVJbmZvTGlzdCxhPWkuY29udGVudHx8bi5jb250ZW50LHM9ZG9jdW1lbnQuaW1wb3J0Tm9kZShhLCEwKTtzLl9fbm9JbnNlcnRpb25Qb2ludD0haS5oYXNJbnNlcnRpb25Qb2ludDtsZXQgbD1zLm5vZGVMaXN0PW5ldyBBcnJheShvLmxlbmd0aCk7cy4kPXt9O2ZvcihsZXQgYz0wLHU9by5sZW5ndGgsaDtjPHUmJihoPW9bY10pO2MrKyl7bGV0IGY9bFtjXT1zbXQocyxoKTtxMWUodGhpcyxzLiQsZixoKSxXMWUodGhpcyxmLGgsaSksRzFlKHRoaXMsZixoKX1yZXR1cm4gcz1zLHN9X2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8sYSl7YT1hfHxuO2xldCBzPVkxZShhLGksbyk7cmV0dXJuIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLHMpLHN9X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8pe24uYWRkRXZlbnRMaXN0ZW5lcihpLG8pfV9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobixpLG8pe24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLG8pfX1yZXR1cm4gdH0pO3ZhciBqTT0wLFhNPVtdLHpyPXtDT01QVVRFOiJfX2NvbXB1dGVFZmZlY3RzIixSRUZMRUNUOiJfX3JlZmxlY3RFZmZlY3RzIixOT1RJRlk6Il9fbm90aWZ5RWZmZWN0cyIsUFJPUEFHQVRFOiJfX3Byb3BhZ2F0ZUVmZmVjdHMiLE9CU0VSVkU6Il9fb2JzZXJ2ZUVmZmVjdHMiLFJFQURfT05MWToiX19yZWFkT25seSJ9LGdtdD0iX19jb21wdXRlSW5mbyIsajFlPS9bQS1aXS87ZnVuY3Rpb24gdkcoZSx0LHIpe2xldCBuPWVbdF07aWYoIW4pbj1lW3RdPXt9O2Vsc2UgaWYoIWUuaGFzT3duUHJvcGVydHkodCkmJihuPWVbdF09T2JqZWN0LmNyZWF0ZShlW3RdKSxyKSlmb3IobGV0IGkgaW4gbil7bGV0IG89bltpXSxhPW5baV09QXJyYXkoby5sZW5ndGgpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKWFbc109b1tzXX1yZXR1cm4gbn1mdW5jdGlvbiBZTShlLHQscixuLGksbyl7aWYodCl7bGV0IGE9ITEscz1qTSsrO2ZvcihsZXQgbCBpbiByKXtsZXQgYz1pP2F1KGwpOmwsdT10W2NdO2lmKHUpZm9yKGxldCBoPTAsZj11Lmxlbmd0aCxwO2g8ZiYmKHA9dVtoXSk7aCsrKSghcC5pbmZvfHxwLmluZm8ubGFzdFJ1biE9PXMpJiYoIWl8fFNHKGwscC50cmlnZ2VyKSkmJihwLmluZm8mJihwLmluZm8ubGFzdFJ1bj1zKSxwLmZuKGUsbCxyLG4scC5pbmZvLGksbyksYT0hMCl9cmV0dXJuIGF9cmV0dXJuITF9ZnVuY3Rpb24gWDFlKGUsdCxyLG4saSxvLGEscyl7bGV0IGw9ITEsYz1hP2F1KG4pOm4sdT10W2NdO2lmKHUpZm9yKGxldCBoPTAsZj11Lmxlbmd0aCxwO2g8ZiYmKHA9dVtoXSk7aCsrKSghcC5pbmZvfHxwLmluZm8ubGFzdFJ1biE9PXIpJiYoIWF8fFNHKG4scC50cmlnZ2VyKSkmJihwLmluZm8mJihwLmluZm8ubGFzdFJ1bj1yKSxwLmZuKGUsbixpLG8scC5pbmZvLGEscyksbD0hMCk7cmV0dXJuIGx9ZnVuY3Rpb24gU0coZSx0KXtpZih0KXtsZXQgcj10Lm5hbWU7cmV0dXJuIHI9PWV8fCEhKHQuc3RydWN0dXJlZCYmZ0cocixlKSl8fCEhKHQud2lsZGNhcmQmJkF4KHIsZSkpfWVsc2UgcmV0dXJuITB9ZnVuY3Rpb24gY210KGUsdCxyLG4saSl7bGV0IG89dHlwZW9mIGkubWV0aG9kPT0ic3RyaW5nIj9lW2kubWV0aG9kXTppLm1ldGhvZCxhPWkucHJvcGVydHk7bz9vLmNhbGwoZSxlLl9fZGF0YVthXSxuW2FdKTppLmR5bmFtaWNGbnx8Y29uc29sZS53YXJuKCJvYnNlcnZlciBtZXRob2QgYCIraS5tZXRob2QrImAgbm90IGRlZmluZWQiKX1mdW5jdGlvbiAkMWUoZSx0LHIsbixpKXtsZXQgbz1lW3pyLk5PVElGWV0sYSxzPWpNKys7Zm9yKGxldCBjIGluIHQpdFtjXSYmKG8mJlgxZShlLG8scyxjLHIsbixpKXx8aSYmSzFlKGUsYyxyKSkmJihhPSEwKTtsZXQgbDthJiYobD1lLl9fZGF0YUhvc3QpJiZsLl9pbnZhbGlkYXRlUHJvcGVydGllcyYmbC5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1mdW5jdGlvbiBLMWUoZSx0LHIpe2xldCBuPWF1KHQpO2lmKG4hPT10KXtsZXQgaT1JeChuKSsiLWNoYW5nZWQiO3JldHVybiBfbXQoZSxpLHJbdF0sdCksITB9cmV0dXJuITF9ZnVuY3Rpb24gX210KGUsdCxyLG4pe2xldCBpPXt2YWx1ZTpyLHF1ZXVlUHJvcGVydHk6ITB9O24mJihpLnBhdGg9biksdWUoZSkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodCx7ZGV0YWlsOml9KSl9ZnVuY3Rpb24gWjFlKGUsdCxyLG4saSxvKXtsZXQgcz0obz9hdSh0KTp0KSE9dD90Om51bGwsbD1zP05vKGUscyk6ZS5fX2RhdGFbdF07cyYmbD09PXZvaWQgMCYmKGw9clt0XSksX210KGUsaS5ldmVudE5hbWUsbCxzKX1mdW5jdGlvbiBKMWUoZSx0LHIsbixpKXtsZXQgbyxhPWUuZGV0YWlsLHM9YSYmYS5wYXRoO3M/KG49ZHAocixuLHMpLG89YSYmYS52YWx1ZSk6bz1lLmN1cnJlbnRUYXJnZXRbcl0sbz1pPyFvOm8sKCF0W3pyLlJFQURfT05MWV18fCF0W3pyLlJFQURfT05MWV1bbl0pJiZ0Ll9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgobixvLCEwLEJvb2xlYW4ocykpJiYoIWF8fCFhLnF1ZXVlUHJvcGVydHkpJiZ0Ll9pbnZhbGlkYXRlUHJvcGVydGllcygpfWZ1bmN0aW9uIFExZShlLHQscixuLGkpe2xldCBvPWUuX19kYXRhW3RdO1ZNJiYobz1WTShvLGkuYXR0ck5hbWUsImF0dHJpYnV0ZSIsZSkpLGUuX3Byb3BlcnR5VG9BdHRyaWJ1dGUodCxpLmF0dHJOYW1lLG8pfWZ1bmN0aW9uIHR2ZShlLHQscixuKXtsZXQgaT1lW3pyLkNPTVBVVEVdO2lmKGkpaWYoV2R0KXtqTSsrO2xldCBvPXJ2ZShlKSxhPVtdO2ZvcihsZXQgbCBpbiB0KXVtdChsLGksYSxvLG4pO2xldCBzO2Zvcig7cz1hLnNoaWZ0KCk7KXltdChlLCIiLHQscixzKSYmdW10KHMubWV0aG9kSW5mbyxpLGEsbyxuKTtPYmplY3QuYXNzaWduKHIsZS5fX2RhdGFPbGQpLE9iamVjdC5hc3NpZ24odCxlLl9fZGF0YVBlbmRpbmcpLGUuX19kYXRhUGVuZGluZz1udWxsfWVsc2V7bGV0IG89dDtmb3IoO1lNKGUsaSxvLHIsbik7KU9iamVjdC5hc3NpZ24ocixlLl9fZGF0YU9sZCksT2JqZWN0LmFzc2lnbih0LGUuX19kYXRhUGVuZGluZyksbz1lLl9fZGF0YVBlbmRpbmcsZS5fX2RhdGFQZW5kaW5nPW51bGx9fXZhciBldmU9KGUsdCxyKT0+e2xldCBuPTAsaT10Lmxlbmd0aC0xLG89LTE7Zm9yKDtuPD1pOyl7bGV0IGE9bitpPj4xLHM9ci5nZXQodFthXS5tZXRob2RJbmZvKS1yLmdldChlLm1ldGhvZEluZm8pO2lmKHM8MCluPWErMTtlbHNlIGlmKHM+MClpPWEtMTtlbHNle289YTticmVha319bzwwJiYobz1pKzEpLHQuc3BsaWNlKG8sMCxlKX0sdW10PShlLHQscixuLGkpPT57bGV0IG89aT9hdShlKTplLGE9dFtvXTtpZihhKWZvcihsZXQgcz0wO3M8YS5sZW5ndGg7cysrKXtsZXQgbD1hW3NdO2wuaW5mby5sYXN0UnVuIT09ak0mJighaXx8U0coZSxsLnRyaWdnZXIpKSYmKGwuaW5mby5sYXN0UnVuPWpNLGV2ZShsLmluZm8scixuKSl9fTtmdW5jdGlvbiBydmUoZSl7bGV0IHQ9ZS5jb25zdHJ1Y3Rvci5fX29yZGVyZWRDb21wdXRlZERlcHM7aWYoIXQpe3Q9bmV3IE1hcDtsZXQgcj1lW3pyLkNPTVBVVEVdLHtjb3VudHM6bixyZWFkeTppLHRvdGFsOm99PW52ZShlKSxhO2Zvcig7YT1pLnNoaWZ0KCk7KXt0LnNldChhLHQuc2l6ZSk7bGV0IHM9clthXTtzJiZzLmZvckVhY2gobD0+e2xldCBjPWwuaW5mby5tZXRob2RJbmZvOy0tbywtLW5bY109PT0wJiZpLnB1c2goYyl9KX1vIT09MCYmY29uc29sZS53YXJuKGBDb21wdXRlZCBncmFwaCBmb3IgJHtlLmxvY2FsTmFtZX0gaW5jb21wbGV0ZTsgY2lyY3VsYXI/YCksZS5jb25zdHJ1Y3Rvci5fX29yZGVyZWRDb21wdXRlZERlcHM9dH1yZXR1cm4gdH1mdW5jdGlvbiBudmUoZSl7bGV0IHQ9ZVtnbXRdLHI9e30sbj1lW3pyLkNPTVBVVEVdLGk9W10sbz0wO2ZvcihsZXQgYSBpbiB0KXtsZXQgcz10W2FdO28rPXJbYV09cy5hcmdzLmZpbHRlcihsPT4hbC5saXRlcmFsKS5sZW5ndGgrKHMuZHluYW1pY0ZuPzE6MCl9Zm9yKGxldCBhIGluIG4pdFthXXx8aS5wdXNoKGEpO3JldHVybntjb3VudHM6cixyZWFkeTppLHRvdGFsOm99fWZ1bmN0aW9uIHltdChlLHQscixuLGkpe2xldCBvPXdHKGUsdCxyLG4saSk7aWYobz09PVhNKXJldHVybiExO2xldCBhPWkubWV0aG9kSW5mbztyZXR1cm4gZS5fX2RhdGFIYXNBY2Nlc3NvciYmZS5fX2RhdGFIYXNBY2Nlc3NvclthXT9lLl9zZXRQZW5kaW5nUHJvcGVydHkoYSxvLCEwKTooZVthXT1vLCExKX1mdW5jdGlvbiBpdmUoZSx0LHIpe2xldCBuPWUuX19kYXRhTGlua2VkUGF0aHM7aWYobil7bGV0IGk7Zm9yKGxldCBvIGluIG4pe2xldCBhPW5bb107QXgobyx0KT8oaT1kcChvLGEsdCksZS5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGksciwhMCwhMCkpOkF4KGEsdCkmJihpPWRwKGEsbyx0KSxlLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgoaSxyLCEwLCEwKSl9fX1mdW5jdGlvbiB4RyhlLHQscixuLGksbyxhKXtyLmJpbmRpbmdzPXIuYmluZGluZ3N8fFtdO2xldCBzPXtraW5kOm4sdGFyZ2V0OmkscGFydHM6byxsaXRlcmFsOmEsaXNDb21wb3VuZDpvLmxlbmd0aCE9PTF9O2lmKHIuYmluZGluZ3MucHVzaChzKSxjdmUocykpe2xldHtldmVudDpjLG5lZ2F0ZTp1fT1zLnBhcnRzWzBdO3MubGlzdGVuZXJFdmVudD1jfHxJeChpKSsiLWNoYW5nZWQiLHMubGlzdGVuZXJOZWdhdGU9dX1sZXQgbD10Lm5vZGVJbmZvTGlzdC5sZW5ndGg7Zm9yKGxldCBjPTA7YzxzLnBhcnRzLmxlbmd0aDtjKyspe2xldCB1PXMucGFydHNbY107dS5jb21wb3VuZEluZGV4PWMsb3ZlKGUsdCxzLHUsbCl9fWZ1bmN0aW9uIG92ZShlLHQscixuLGkpe2lmKCFuLmxpdGVyYWwpaWYoci5raW5kPT09ImF0dHJpYnV0ZSImJnIudGFyZ2V0WzBdPT09Ii0iKWNvbnNvbGUud2FybigiQ2Fubm90IHNldCBhdHRyaWJ1dGUgIityLnRhcmdldCsnIGJlY2F1c2UgIi0iIGlzIG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBzdGFydGluZyBjaGFyYWN0ZXInKTtlbHNle2xldCBvPW4uZGVwZW5kZW5jaWVzLGE9e2luZGV4OmksYmluZGluZzpyLHBhcnQ6bixldmFsdWF0b3I6ZX07Zm9yKGxldCBzPTA7czxvLmxlbmd0aDtzKyspe2xldCBsPW9bc107dHlwZW9mIGw9PSJzdHJpbmciJiYobD14bXQobCksbC53aWxkY2FyZD0hMCksZS5fYWRkVGVtcGxhdGVQcm9wZXJ0eUVmZmVjdCh0LGwucm9vdFByb3BlcnR5LHtmbjphdmUsaW5mbzphLHRyaWdnZXI6bH0pfX19ZnVuY3Rpb24gYXZlKGUsdCxyLG4saSxvLGEpe2xldCBzPWFbaS5pbmRleF0sbD1pLmJpbmRpbmcsYz1pLnBhcnQ7aWYobyYmYy5zb3VyY2UmJnQubGVuZ3RoPmMuc291cmNlLmxlbmd0aCYmbC5raW5kPT0icHJvcGVydHkiJiYhbC5pc0NvbXBvdW5kJiZzLl9faXNQcm9wZXJ0eUVmZmVjdHNDbGllbnQmJnMuX19kYXRhSGFzQWNjZXNzb3ImJnMuX19kYXRhSGFzQWNjZXNzb3JbbC50YXJnZXRdKXtsZXQgdT1yW3RdO3Q9ZHAoYy5zb3VyY2UsbC50YXJnZXQsdCkscy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKHQsdSwhMSwhMCkmJmUuX2VucXVldWVDbGllbnQocyl9ZWxzZXtsZXQgdT1pLmV2YWx1YXRvci5fZXZhbHVhdGVCaW5kaW5nKGUsYyx0LHIsbixvKTt1IT09WE0mJnN2ZShlLHMsbCxjLHUpfX1mdW5jdGlvbiBzdmUoZSx0LHIsbixpKXtpZihpPWx2ZSh0LGkscixuKSxWTSYmKGk9Vk0oaSxyLnRhcmdldCxyLmtpbmQsdCkpLHIua2luZD09ImF0dHJpYnV0ZSIpZS5fdmFsdWVUb05vZGVBdHRyaWJ1dGUodCxpLHIudGFyZ2V0KTtlbHNle2xldCBvPXIudGFyZ2V0O3QuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudCYmdC5fX2RhdGFIYXNBY2Nlc3NvciYmdC5fX2RhdGFIYXNBY2Nlc3NvcltvXT8oIXRbenIuUkVBRF9PTkxZXXx8IXRbenIuUkVBRF9PTkxZXVtvXSkmJnQuX3NldFBlbmRpbmdQcm9wZXJ0eShvLGkpJiZlLl9lbnF1ZXVlQ2xpZW50KHQpOmUuX3NldFVubWFuYWdlZFByb3BlcnR5VG9Ob2RlKHQsbyxpKX19ZnVuY3Rpb24gbHZlKGUsdCxyLG4pe2lmKHIuaXNDb21wb3VuZCl7bGV0IGk9ZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2Vbci50YXJnZXRdO2lbbi5jb21wb3VuZEluZGV4XT10LHQ9aS5qb2luKCIiKX1yZXR1cm4gci5raW5kIT09ImF0dHJpYnV0ZSImJihyLnRhcmdldD09PSJ0ZXh0Q29udGVudCJ8fHIudGFyZ2V0PT09InZhbHVlIiYmKGUubG9jYWxOYW1lPT09ImlucHV0Inx8ZS5sb2NhbE5hbWU9PT0idGV4dGFyZWEiKSkmJih0PXQ9PW51bGw/IiI6dCksdH1mdW5jdGlvbiBjdmUoZSl7cmV0dXJuIEJvb2xlYW4oZS50YXJnZXQpJiZlLmtpbmQhPSJhdHRyaWJ1dGUiJiZlLmtpbmQhPSJ0ZXh0IiYmIWUuaXNDb21wb3VuZCYmZS5wYXJ0c1swXS5tb2RlPT09InsifWZ1bmN0aW9uIHV2ZShlLHQpe2xldHtub2RlTGlzdDpyLG5vZGVJbmZvTGlzdDpufT10O2lmKG4ubGVuZ3RoKWZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXtsZXQgbz1uW2ldLGE9cltpXSxzPW8uYmluZGluZ3M7aWYocylmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXTtodmUoYSxjKSxmdmUoYSxlLGMpfWEuX19kYXRhSG9zdD1lfX1mdW5jdGlvbiBodmUoZSx0KXtpZih0LmlzQ29tcG91bmQpe2xldCByPWUuX19kYXRhQ29tcG91bmRTdG9yYWdlfHwoZS5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9e30pLG49dC5wYXJ0cyxpPW5ldyBBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBhPTA7YTxuLmxlbmd0aDthKyspaVthXT1uW2FdLmxpdGVyYWw7bGV0IG89dC50YXJnZXQ7cltvXT1pLHQubGl0ZXJhbCYmdC5raW5kPT0icHJvcGVydHkiJiYobz09PSJjbGFzc05hbWUiJiYoZT11ZShlKSksZVtvXT10LmxpdGVyYWwpfX1mdW5jdGlvbiBmdmUoZSx0LHIpe2lmKHIubGlzdGVuZXJFdmVudCl7bGV0IG49ci5wYXJ0c1swXTtlLmFkZEV2ZW50TGlzdGVuZXIoci5saXN0ZW5lckV2ZW50LGZ1bmN0aW9uKGkpe0oxZShpLHQsci50YXJnZXQsbi5zb3VyY2Usbi5uZWdhdGUpfSl9fWZ1bmN0aW9uIGhtdChlLHQscixuLGksbyl7bz10LnN0YXRpY3x8byYmKHR5cGVvZiBvIT0ib2JqZWN0Inx8b1t0Lm1ldGhvZE5hbWVdKTtsZXQgYT17bWV0aG9kTmFtZTp0Lm1ldGhvZE5hbWUsYXJnczp0LmFyZ3MsbWV0aG9kSW5mbzppLGR5bmFtaWNGbjpvfTtmb3IobGV0IHM9MCxsO3M8dC5hcmdzLmxlbmd0aCYmKGw9dC5hcmdzW3NdKTtzKyspbC5saXRlcmFsfHxlLl9hZGRQcm9wZXJ0eUVmZmVjdChsLnJvb3RQcm9wZXJ0eSxyLHtmbjpuLGluZm86YSx0cmlnZ2VyOmx9KTtyZXR1cm4gbyYmZS5fYWRkUHJvcGVydHlFZmZlY3QodC5tZXRob2ROYW1lLHIse2ZuOm4saW5mbzphfSksYX1mdW5jdGlvbiB3RyhlLHQscixuLGkpe2xldCBvPWUuX21ldGhvZEhvc3R8fGUsYT1vW2kubWV0aG9kTmFtZV07aWYoYSl7bGV0IHM9ZS5fbWFyc2hhbEFyZ3MoaS5hcmdzLHQscik7cmV0dXJuIHM9PT1YTT9YTTphLmFwcGx5KG8scyl9ZWxzZSBpLmR5bmFtaWNGbnx8Y29uc29sZS53YXJuKCJtZXRob2QgYCIraS5tZXRob2ROYW1lKyJgIG5vdCBkZWZpbmVkIil9dmFyIHB2ZT1bXSx2bXQ9Iig/OlthLXpBLVpfJF1bXFx3LjokXFwtKl0qKSIsZHZlPSIoPzpbLStdP1swLTldKlxcLj9bMC05XSsoPzpbZUVdWy0rXT9bMC05XSspPykiLG12ZT0iKD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSIsZ3ZlPScoPzoiKD86W14iXFxcXF18XFxcXC4pKiIpJyxfdmU9Iig/OiIrbXZlKyJ8IitndmUrIikiLGZtdD0iKD86KCIrdm10KyJ8IitkdmUrInwiK192ZSsiKVxccyopIix5dmU9Iig/OiIrZm10KyIoPzosXFxzKiIrZm10KyIpKikiLHZ2ZT0iKD86XFwoXFxzKig/OiIreXZlKyI/KVxcKVxccyopIix4dmU9IigiK3ZtdCsiXFxzKiIrdnZlKyI/KSIsYnZlPSIoXFxbXFxbfHt7KVxccyoiLHd2ZT0iKD86XV18fX0pIixTdmU9Iig/OighKVxccyopPyIsTXZlPWJ2ZStTdmUreHZlK3d2ZSxwbXQ9bmV3IFJlZ0V4cChNdmUsImciKTtmdW5jdGlvbiBkbXQoZSl7bGV0IHQ9IiI7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspdCs9ZVtyXS5saXRlcmFsfHwiIjtyZXR1cm4gdH1mdW5jdGlvbiBiRyhlKXtsZXQgdD1lLm1hdGNoKC8oW15cc10rPylcKChbXHNcU10qKVwpLyk7aWYodCl7bGV0IG49e21ldGhvZE5hbWU6dFsxXSxzdGF0aWM6ITAsYXJnczpwdmV9O2lmKHRbMl0udHJpbSgpKXtsZXQgaT10WzJdLnJlcGxhY2UoL1xcLC9nLCImY29tbWE7Iikuc3BsaXQoIiwiKTtyZXR1cm4gRXZlKGksbil9ZWxzZSByZXR1cm4gbn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFdmUoZSx0KXtyZXR1cm4gdC5hcmdzPWUubWFwKGZ1bmN0aW9uKHIpe2xldCBuPXhtdChyKTtyZXR1cm4gbi5saXRlcmFsfHwodC5zdGF0aWM9ITEpLG59LHRoaXMpLHR9ZnVuY3Rpb24geG10KGUpe2xldCB0PWUudHJpbSgpLnJlcGxhY2UoLyZjb21tYTsvZywiLCIpLnJlcGxhY2UoL1xcKC4pL2csIiQxIikscj17bmFtZTp0LHZhbHVlOiIiLGxpdGVyYWw6ITF9LG49dFswXTtzd2l0Y2gobj09PSItIiYmKG49dFsxXSksbj49IjAiJiZuPD0iOSImJihuPSIjIiksbil7Y2FzZSInIjpjYXNlJyInOnIudmFsdWU9dC5zbGljZSgxLC0xKSxyLmxpdGVyYWw9ITA7YnJlYWs7Y2FzZSIjIjpyLnZhbHVlPU51bWJlcih0KSxyLmxpdGVyYWw9ITA7YnJlYWt9cmV0dXJuIHIubGl0ZXJhbHx8KHIucm9vdFByb3BlcnR5PWF1KHQpLHIuc3RydWN0dXJlZD1OSSh0KSxyLnN0cnVjdHVyZWQmJihyLndpbGRjYXJkPXQuc2xpY2UoLTIpPT0iLioiLHIud2lsZGNhcmQmJihyLm5hbWU9dC5zbGljZSgwLC0yKSkpKSxyfWZ1bmN0aW9uIG1tdChlLHQscil7bGV0IG49Tm8oZSxyKTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dFtyXSksbn1mdW5jdGlvbiBibXQoZSx0LHIsbil7bGV0IGk9e2luZGV4U3BsaWNlczpufTtMSSYmIWUuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkJiYodC5zcGxpY2VzPWkpLGUubm90aWZ5UGF0aChyKyIuc3BsaWNlcyIsaSksZS5ub3RpZnlQYXRoKHIrIi5sZW5ndGgiLHQubGVuZ3RoKSxMSSYmIWUuX292ZXJyaWRlTGVnYWN5VW5kZWZpbmVkJiYoaS5pbmRleFNwbGljZXM9W10pfWZ1bmN0aW9uIEdNKGUsdCxyLG4saSxvKXtibXQoZSx0LHIsW3tpbmRleDpuLGFkZGVkQ291bnQ6aSxyZW1vdmVkOm8sb2JqZWN0OnQsdHlwZToic3BsaWNlIn1dKX1mdW5jdGlvbiBUdmUoZSl7cmV0dXJuIGVbMF0udG9VcHBlckNhc2UoKStlLnN1YnN0cmluZygxKX12YXIgdV89Tm4oZT0+e2xldCB0PWxtdChCSShlKSk7Y2xhc3MgciBleHRlbmRzIHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pc1Byb3BlcnR5RWZmZWN0c0NsaWVudD0hMCx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSx0aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzLHRoaXMuX19kYXRhVG9Ob3RpZnksdGhpcy5fX2RhdGFMaW5rZWRQYXRocyx0aGlzLl9fZGF0YUhhc1BhdGhzLHRoaXMuX19kYXRhQ29tcG91bmRTdG9yYWdlLHRoaXMuX19kYXRhSG9zdCx0aGlzLl9fZGF0YVRlbXAsdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQsdGhpcy5fX2RhdGEsdGhpcy5fX2RhdGFQZW5kaW5nLHRoaXMuX19kYXRhT2xkLHRoaXMuX19jb21wdXRlRWZmZWN0cyx0aGlzLl9fY29tcHV0ZUluZm8sdGhpcy5fX3JlZmxlY3RFZmZlY3RzLHRoaXMuX19ub3RpZnlFZmZlY3RzLHRoaXMuX19wcm9wYWdhdGVFZmZlY3RzLHRoaXMuX19vYnNlcnZlRWZmZWN0cyx0aGlzLl9fcmVhZE9ubHksdGhpcy5fX3RlbXBsYXRlSW5mbyx0aGlzLl9vdmVycmlkZUxlZ2FjeVVuZGVmaW5lZH1nZXQgUFJPUEVSVFlfRUZGRUNUX1RZUEVTKCl7cmV0dXJuIHpyfV9pbml0aWFsaXplUHJvcGVydGllcygpe3N1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMuX3JlZ2lzdGVySG9zdCgpLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5PSExLHRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9bnVsbCx0aGlzLl9fZGF0YVRvTm90aWZ5PW51bGwsdGhpcy5fX2RhdGFMaW5rZWRQYXRocz1udWxsLHRoaXMuX19kYXRhSGFzUGF0aHM9ITEsdGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2U9dGhpcy5fX2RhdGFDb21wb3VuZFN0b3JhZ2V8fG51bGwsdGhpcy5fX2RhdGFIb3N0PXRoaXMuX19kYXRhSG9zdHx8bnVsbCx0aGlzLl9fZGF0YVRlbXA9e30sdGhpcy5fX2RhdGFDbGllbnRzSW5pdGlhbGl6ZWQ9ITF9X3JlZ2lzdGVySG9zdCgpe2lmKFdNLmxlbmd0aCl7bGV0IGk9V01bV00ubGVuZ3RoLTFdO2kuX2VucXVldWVDbGllbnQodGhpcyksdGhpcy5fX2RhdGFIb3N0PWl9fV9pbml0aWFsaXplUHJvdG9Qcm9wZXJ0aWVzKGkpe3RoaXMuX19kYXRhPU9iamVjdC5jcmVhdGUoaSksdGhpcy5fX2RhdGFQZW5kaW5nPU9iamVjdC5jcmVhdGUoaSksdGhpcy5fX2RhdGFPbGQ9e319X2luaXRpYWxpemVJbnN0YW5jZVByb3BlcnRpZXMoaSl7bGV0IG89dGhpc1t6ci5SRUFEX09OTFldO2ZvcihsZXQgYSBpbiBpKSghb3x8IW9bYV0pJiYodGhpcy5fX2RhdGFQZW5kaW5nPXRoaXMuX19kYXRhUGVuZGluZ3x8e30sdGhpcy5fX2RhdGFPbGQ9dGhpcy5fX2RhdGFPbGR8fHt9LHRoaXMuX19kYXRhW2FdPXRoaXMuX19kYXRhUGVuZGluZ1thXT1pW2FdKX1fYWRkUHJvcGVydHlFZmZlY3QoaSxvLGEpe3RoaXMuX2NyZWF0ZVByb3BlcnR5QWNjZXNzb3IoaSxvPT16ci5SRUFEX09OTFkpO2xldCBzPXZHKHRoaXMsbywhMClbaV07c3x8KHM9dGhpc1tvXVtpXT1bXSkscy5wdXNoKGEpfV9yZW1vdmVQcm9wZXJ0eUVmZmVjdChpLG8sYSl7bGV0IHM9dkcodGhpcyxvLCEwKVtpXSxsPXMuaW5kZXhPZihhKTtsPj0wJiZzLnNwbGljZShsLDEpfV9oYXNQcm9wZXJ0eUVmZmVjdChpLG8pe2xldCBhPXRoaXNbb107cmV0dXJuIEJvb2xlYW4oYSYmYVtpXSl9X2hhc1JlYWRPbmx5RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLlJFQURfT05MWSl9X2hhc05vdGlmeUVmZmVjdChpKXtyZXR1cm4gdGhpcy5faGFzUHJvcGVydHlFZmZlY3QoaSx6ci5OT1RJRlkpfV9oYXNSZWZsZWN0RWZmZWN0KGkpe3JldHVybiB0aGlzLl9oYXNQcm9wZXJ0eUVmZmVjdChpLHpyLlJFRkxFQ1QpfV9oYXNDb21wdXRlZEVmZmVjdChpKXtyZXR1cm4gdGhpcy5faGFzUHJvcGVydHlFZmZlY3QoaSx6ci5DT01QVVRFKX1fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGksbyxhLHMpe2lmKHN8fGF1KEFycmF5LmlzQXJyYXkoaSk/aVswXTppKSE9PWkpe2lmKCFzKXtsZXQgbD1Obyh0aGlzLGkpO2lmKGk9X0codGhpcyxpLG8pLCFpfHwhc3VwZXIuX3Nob3VsZFByb3BlcnR5Q2hhbmdlKGksbyxsKSlyZXR1cm4hMX1pZih0aGlzLl9fZGF0YUhhc1BhdGhzPSEwLHRoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSkpcmV0dXJuIGl2ZSh0aGlzLGksbyksITB9ZWxzZXtpZih0aGlzLl9fZGF0YUhhc0FjY2Vzc29yJiZ0aGlzLl9fZGF0YUhhc0FjY2Vzc29yW2ldKXJldHVybiB0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkoaSxvLGEpO3RoaXNbaV09b31yZXR1cm4hMX1fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUoaSxvLGEpeyhhIT09aVtvXXx8dHlwZW9mIGE9PSJvYmplY3QiKSYmKG89PT0iY2xhc3NOYW1lIiYmKGk9dWUoaSkpLGlbb109YSl9X3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGFIYXNQYXRocyYmTkkoaSksbD1zP3RoaXMuX19kYXRhVGVtcDp0aGlzLl9fZGF0YTtyZXR1cm4gdGhpcy5fc2hvdWxkUHJvcGVydHlDaGFuZ2UoaSxvLGxbaV0pPyh0aGlzLl9fZGF0YVBlbmRpbmd8fCh0aGlzLl9fZGF0YVBlbmRpbmc9e30sdGhpcy5fX2RhdGFPbGQ9e30pLGkgaW4gdGhpcy5fX2RhdGFPbGR8fCh0aGlzLl9fZGF0YU9sZFtpXT10aGlzLl9fZGF0YVtpXSkscz90aGlzLl9fZGF0YVRlbXBbaV09bzp0aGlzLl9fZGF0YVtpXT1vLHRoaXMuX19kYXRhUGVuZGluZ1tpXT1vLChzfHx0aGlzW3pyLk5PVElGWV0mJnRoaXNbenIuTk9USUZZXVtpXSkmJih0aGlzLl9fZGF0YVRvTm90aWZ5PXRoaXMuX19kYXRhVG9Ob3RpZnl8fHt9LHRoaXMuX19kYXRhVG9Ob3RpZnlbaV09YSksITApOiExfV9zZXRQcm9wZXJ0eShpLG8pe3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eShpLG8sITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfV9pbnZhbGlkYXRlUHJvcGVydGllcygpe3RoaXMuX19kYXRhUmVhZHkmJnRoaXMuX2ZsdXNoUHJvcGVydGllcygpfV9lbnF1ZXVlQ2xpZW50KGkpe3RoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9dGhpcy5fX2RhdGFQZW5kaW5nQ2xpZW50c3x8W10saSE9PXRoaXMmJnRoaXMuX19kYXRhUGVuZGluZ0NsaWVudHMucHVzaChpKX1fZmx1c2hDbGllbnRzKCl7dGhpcy5fX2RhdGFDbGllbnRzUmVhZHk/dGhpcy5fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCk6KHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5PSEwLHRoaXMuX3JlYWR5Q2xpZW50cygpLHRoaXMuX19kYXRhUmVhZHk9ITApfV9fZW5hYmxlT3JGbHVzaENsaWVudHMoKXtsZXQgaT10aGlzLl9fZGF0YVBlbmRpbmdDbGllbnRzO2lmKGkpe3RoaXMuX19kYXRhUGVuZGluZ0NsaWVudHM9bnVsbDtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IGE9aVtvXTthLl9fZGF0YUVuYWJsZWQ/YS5fX2RhdGFQZW5kaW5nJiZhLl9mbHVzaFByb3BlcnRpZXMoKTphLl9lbmFibGVQcm9wZXJ0aWVzKCl9fX1fcmVhZHlDbGllbnRzKCl7dGhpcy5fX2VuYWJsZU9yRmx1c2hDbGllbnRzKCl9c2V0UHJvcGVydGllcyhpLG8pe2ZvcihsZXQgYSBpbiBpKShvfHwhdGhpc1t6ci5SRUFEX09OTFldfHwhdGhpc1t6ci5SRUFEX09OTFldW2FdKSYmdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGEsaVthXSwhMCk7dGhpcy5faW52YWxpZGF0ZVByb3BlcnRpZXMoKX1yZWFkeSgpe3RoaXMuX2ZsdXNoUHJvcGVydGllcygpLHRoaXMuX19kYXRhQ2xpZW50c1JlYWR5fHx0aGlzLl9mbHVzaENsaWVudHMoKSx0aGlzLl9fZGF0YVBlbmRpbmcmJnRoaXMuX2ZsdXNoUHJvcGVydGllcygpfV9wcm9wZXJ0aWVzQ2hhbmdlZChpLG8sYSl7bGV0IHM9dGhpcy5fX2RhdGFIYXNQYXRoczt0aGlzLl9fZGF0YUhhc1BhdGhzPSExO2xldCBsO3R2ZSh0aGlzLG8sYSxzKSxsPXRoaXMuX19kYXRhVG9Ob3RpZnksdGhpcy5fX2RhdGFUb05vdGlmeT1udWxsLHRoaXMuX3Byb3BhZ2F0ZVByb3BlcnR5Q2hhbmdlcyhvLGEscyksdGhpcy5fZmx1c2hDbGllbnRzKCksWU0odGhpcyx0aGlzW3pyLlJFRkxFQ1RdLG8sYSxzKSxZTSh0aGlzLHRoaXNbenIuT0JTRVJWRV0sbyxhLHMpLGwmJiQxZSh0aGlzLGwsbyxhLHMpLHRoaXMuX19kYXRhQ291bnRlcj09MSYmKHRoaXMuX19kYXRhVGVtcD17fSl9X3Byb3BhZ2F0ZVByb3BlcnR5Q2hhbmdlcyhpLG8sYSl7dGhpc1t6ci5QUk9QQUdBVEVdJiZZTSh0aGlzLHRoaXNbenIuUFJPUEFHQVRFXSxpLG8sYSksdGhpcy5fX3RlbXBsYXRlSW5mbyYmdGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKHRoaXMuX190ZW1wbGF0ZUluZm8saSxvLGEpfV9ydW5FZmZlY3RzRm9yVGVtcGxhdGUoaSxvLGEscyl7bGV0IGw9KGMsdSk9PntZTSh0aGlzLGkucHJvcGVydHlFZmZlY3RzLGMsYSx1LGkubm9kZUxpc3QpO2ZvcihsZXQgaD1pLmZpcnN0Q2hpbGQ7aDtoPWgubmV4dFNpYmxpbmcpdGhpcy5fcnVuRWZmZWN0c0ZvclRlbXBsYXRlKGgsYyxhLHUpfTtpLnJ1bkVmZmVjdHM/aS5ydW5FZmZlY3RzKGwsbyxzKTpsKG8scyl9bGlua1BhdGhzKGksbyl7aT1QeChpKSxvPVB4KG8pLHRoaXMuX19kYXRhTGlua2VkUGF0aHM9dGhpcy5fX2RhdGFMaW5rZWRQYXRoc3x8e30sdGhpcy5fX2RhdGFMaW5rZWRQYXRoc1tpXT1vfXVubGlua1BhdGhzKGkpe2k9UHgoaSksdGhpcy5fX2RhdGFMaW5rZWRQYXRocyYmZGVsZXRlIHRoaXMuX19kYXRhTGlua2VkUGF0aHNbaV19bm90aWZ5U3BsaWNlcyhpLG8pe2xldCBhPXtwYXRoOiIifSxzPU5vKHRoaXMsaSxhKTtibXQodGhpcyxzLGEucGF0aCxvKX1nZXQoaSxvKXtyZXR1cm4gTm8ob3x8dGhpcyxpKX1zZXQoaSxvLGEpe2E/X0coYSxpLG8pOighdGhpc1t6ci5SRUFEX09OTFldfHwhdGhpc1t6ci5SRUFEX09OTFldW2ldKSYmdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKGksbywhMCkmJnRoaXMuX2ludmFsaWRhdGVQcm9wZXJ0aWVzKCl9cHVzaChpLC4uLm8pe2xldCBhPXtwYXRoOiIifSxzPU5vKHRoaXMsaSxhKSxsPXMubGVuZ3RoLGM9cy5wdXNoKC4uLm8pO3JldHVybiBvLmxlbmd0aCYmR00odGhpcyxzLGEucGF0aCxsLG8ubGVuZ3RoLFtdKSxjfXBvcChpKXtsZXQgbz17cGF0aDoiIn0sYT1Obyh0aGlzLGksbykscz1Cb29sZWFuKGEubGVuZ3RoKSxsPWEucG9wKCk7cmV0dXJuIHMmJkdNKHRoaXMsYSxvLnBhdGgsYS5sZW5ndGgsMCxbbF0pLGx9c3BsaWNlKGksbyxhLC4uLnMpe2xldCBsPXtwYXRoOiIifSxjPU5vKHRoaXMsaSxsKTtvPDA/bz1jLmxlbmd0aC1NYXRoLmZsb29yKC1vKTpvJiYobz1NYXRoLmZsb29yKG8pKTtsZXQgdTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTI/dT1jLnNwbGljZShvKTp1PWMuc3BsaWNlKG8sYSwuLi5zKSwocy5sZW5ndGh8fHUubGVuZ3RoKSYmR00odGhpcyxjLGwucGF0aCxvLHMubGVuZ3RoLHUpLHV9c2hpZnQoaSl7bGV0IG89e3BhdGg6IiJ9LGE9Tm8odGhpcyxpLG8pLHM9Qm9vbGVhbihhLmxlbmd0aCksbD1hLnNoaWZ0KCk7cmV0dXJuIHMmJkdNKHRoaXMsYSxvLnBhdGgsMCwwLFtsXSksbH11bnNoaWZ0KGksLi4ubyl7bGV0IGE9e3BhdGg6IiJ9LHM9Tm8odGhpcyxpLGEpLGw9cy51bnNoaWZ0KC4uLm8pO3JldHVybiBvLmxlbmd0aCYmR00odGhpcyxzLGEucGF0aCwwLG8ubGVuZ3RoLFtdKSxsfW5vdGlmeVBhdGgoaSxvKXtsZXQgYTtpZihhcmd1bWVudHMubGVuZ3RoPT0xKXtsZXQgcz17cGF0aDoiIn07bz1Obyh0aGlzLGkscyksYT1zLnBhdGh9ZWxzZSBBcnJheS5pc0FycmF5KGkpP2E9UHgoaSk6YT1pO3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChhLG8sITAsITApJiZ0aGlzLl9pbnZhbGlkYXRlUHJvcGVydGllcygpfV9jcmVhdGVSZWFkT25seVByb3BlcnR5KGksbyl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5SRUFEX09OTFkpLG8mJih0aGlzWyJfc2V0IitUdmUoaSldPWZ1bmN0aW9uKGEpe3RoaXMuX3NldFByb3BlcnR5KGksYSl9KX1fY3JlYXRlUHJvcGVydHlPYnNlcnZlcihpLG8sYSl7bGV0IHM9e3Byb3BlcnR5OmksbWV0aG9kOm8sZHluYW1pY0ZuOkJvb2xlYW4oYSl9O3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGksenIuT0JTRVJWRSx7Zm46Y210LGluZm86cyx0cmlnZ2VyOntuYW1lOml9fSksYSYmdGhpcy5fYWRkUHJvcGVydHlFZmZlY3Qobyx6ci5PQlNFUlZFLHtmbjpjbXQsaW5mbzpzLHRyaWdnZXI6e25hbWU6b319KX1fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoaSxvKXtsZXQgYT1iRyhpKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBvYnNlcnZlciBleHByZXNzaW9uICciK2krIiciKTtobXQodGhpcyxhLHpyLk9CU0VSVkUsd0csbnVsbCxvKX1fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoaSx6ci5OT1RJRlkse2ZuOloxZSxpbmZvOntldmVudE5hbWU6SXgoaSkrIi1jaGFuZ2VkIixwcm9wZXJ0eTppfX0pfV9jcmVhdGVSZWZsZWN0ZWRQcm9wZXJ0eShpKXtsZXQgbz10aGlzLmNvbnN0cnVjdG9yLmF0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eShpKTtvWzBdPT09Ii0iP2NvbnNvbGUud2FybigiUHJvcGVydHkgIitpKyIgY2Fubm90IGJlIHJlZmxlY3RlZCB0byBhdHRyaWJ1dGUgIitvKycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgc3RhcnRpbmcgYXR0cmlidXRlIG5hbWUuIFVzZSBhIGxvd2VyY2FzZSBmaXJzdCBsZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSBpbnN0ZWFkLicpOnRoaXMuX2FkZFByb3BlcnR5RWZmZWN0KGksenIuUkVGTEVDVCx7Zm46UTFlLGluZm86e2F0dHJOYW1lOm99fSl9X2NyZWF0ZUNvbXB1dGVkUHJvcGVydHkoaSxvLGEpe2xldCBzPWJHKG8pO2lmKCFzKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIGNvbXB1dGVkIGV4cHJlc3Npb24gJyIrbysiJyIpO2xldCBsPWhtdCh0aGlzLHMsenIuQ09NUFVURSx5bXQsaSxhKTt2Ryh0aGlzLGdtdClbaV09bH1fbWFyc2hhbEFyZ3MoaSxvLGEpe2xldCBzPXRoaXMuX19kYXRhLGw9W107Zm9yKGxldCBjPTAsdT1pLmxlbmd0aDtjPHU7YysrKXtsZXR7bmFtZTpoLHN0cnVjdHVyZWQ6Zix3aWxkY2FyZDpwLHZhbHVlOmQsbGl0ZXJhbDpnfT1pW2NdO2lmKCFnKWlmKHApe2xldCBfPUF4KGgsbykseT1tbXQocyxhLF8/bzpoKTtkPXtwYXRoOl8/bzpoLHZhbHVlOnksYmFzZTpfP05vKHMsaCk6eX19ZWxzZSBkPWY/bW10KHMsYSxoKTpzW2hdO2lmKExJJiYhdGhpcy5fb3ZlcnJpZGVMZWdhY3lVbmRlZmluZWQmJmQ9PT12b2lkIDAmJmkubGVuZ3RoPjEpcmV0dXJuIFhNO2xbY109ZH1yZXR1cm4gbH1zdGF0aWMgYWRkUHJvcGVydHlFZmZlY3QoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdChpLG8sYSl9c3RhdGljIGNyZWF0ZVByb3BlcnR5T2JzZXJ2ZXIoaSxvLGEpe3RoaXMucHJvdG90eXBlLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGksbyxhKX1zdGF0aWMgY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoaSxvKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoaSxvKX1zdGF0aWMgY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoaSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZU5vdGlmeWluZ1Byb3BlcnR5KGkpfXN0YXRpYyBjcmVhdGVSZWFkT25seVByb3BlcnR5KGksbyl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlYWRPbmx5UHJvcGVydHkoaSxvKX1zdGF0aWMgY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoaSl7dGhpcy5wcm90b3R5cGUuX2NyZWF0ZVJlZmxlY3RlZFByb3BlcnR5KGkpfXN0YXRpYyBjcmVhdGVDb21wdXRlZFByb3BlcnR5KGksbyxhKXt0aGlzLnByb3RvdHlwZS5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShpLG8sYSl9c3RhdGljIGJpbmRUZW1wbGF0ZShpKXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuX2JpbmRUZW1wbGF0ZShpKX1fYmluZFRlbXBsYXRlKGksbyl7bGV0IGE9dGhpcy5jb25zdHJ1Y3Rvci5fcGFyc2VUZW1wbGF0ZShpKSxzPXRoaXMuX19wcmVCb3VuZFRlbXBsYXRlSW5mbz09YTtpZighcylmb3IobGV0IGwgaW4gYS5wcm9wZXJ0eUVmZmVjdHMpdGhpcy5fY3JlYXRlUHJvcGVydHlBY2Nlc3NvcihsKTtpZihvKWlmKGE9T2JqZWN0LmNyZWF0ZShhKSxhLndhc1ByZUJvdW5kPXMsIXRoaXMuX190ZW1wbGF0ZUluZm8pdGhpcy5fX3RlbXBsYXRlSW5mbz1hO2Vsc2V7bGV0IGw9aS5fcGFyZW50VGVtcGxhdGVJbmZvfHx0aGlzLl9fdGVtcGxhdGVJbmZvLGM9bC5sYXN0Q2hpbGQ7YS5wYXJlbnQ9bCxsLmxhc3RDaGlsZD1hLGEucHJldmlvdXNTaWJsaW5nPWMsYz9jLm5leHRTaWJsaW5nPWE6bC5maXJzdENoaWxkPWF9ZWxzZSB0aGlzLl9fcHJlQm91bmRUZW1wbGF0ZUluZm89YTtyZXR1cm4gYX1zdGF0aWMgX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QoaSxvLGEpe2xldCBzPWkuaG9zdFByb3BzPWkuaG9zdFByb3BzfHx7fTtzW29dPSEwO2xldCBsPWkucHJvcGVydHlFZmZlY3RzPWkucHJvcGVydHlFZmZlY3RzfHx7fTsobFtvXT1sW29dfHxbXSkucHVzaChhKX1fc3RhbXBUZW1wbGF0ZShpLG8pe289b3x8dGhpcy5fYmluZFRlbXBsYXRlKGksITApLFdNLnB1c2godGhpcyk7bGV0IGE9c3VwZXIuX3N0YW1wVGVtcGxhdGUoaSxvKTtpZihXTS5wb3AoKSxvLm5vZGVMaXN0PWEubm9kZUxpc3QsIW8ud2FzUHJlQm91bmQpe2xldCBzPW8uY2hpbGROb2Rlcz1bXTtmb3IobGV0IGw9YS5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5nKXMucHVzaChsKX1yZXR1cm4gYS50ZW1wbGF0ZUluZm89byx1dmUodGhpcyxvKSx0aGlzLl9fZGF0YUNsaWVudHNSZWFkeSYmKHRoaXMuX3J1bkVmZmVjdHNGb3JUZW1wbGF0ZShvLHRoaXMuX19kYXRhLG51bGwsITEpLHRoaXMuX2ZsdXNoQ2xpZW50cygpKSxhfV9yZW1vdmVCb3VuZERvbShpKXtsZXQgbz1pLnRlbXBsYXRlSW5mbyx7cHJldmlvdXNTaWJsaW5nOmEsbmV4dFNpYmxpbmc6cyxwYXJlbnQ6bH09bzthP2EubmV4dFNpYmxpbmc9czpsJiYobC5maXJzdENoaWxkPXMpLHM/cy5wcmV2aW91c1NpYmxpbmc9YTpsJiYobC5sYXN0Q2hpbGQ9YSksby5uZXh0U2libGluZz1vLnByZXZpb3VzU2libGluZz1udWxsO2xldCBjPW8uY2hpbGROb2Rlcztmb3IobGV0IHU9MDt1PGMubGVuZ3RoO3UrKyl7bGV0IGg9Y1t1XTt1ZSh1ZShoKS5wYXJlbnROb2RlKS5yZW1vdmVDaGlsZChoKX19c3RhdGljIF9wYXJzZVRlbXBsYXRlTm9kZShpLG8sYSl7bGV0IHM9dC5fcGFyc2VUZW1wbGF0ZU5vZGUuY2FsbCh0aGlzLGksbyxhKTtpZihpLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREUpe2xldCBsPXRoaXMuX3BhcnNlQmluZGluZ3MoaS50ZXh0Q29udGVudCxvKTtsJiYoaS50ZXh0Q29udGVudD1kbXQobCl8fCIgIix4Ryh0aGlzLG8sYSwidGV4dCIsInRleHRDb250ZW50IixsKSxzPSEwKX1yZXR1cm4gc31zdGF0aWMgX3BhcnNlVGVtcGxhdGVOb2RlQXR0cmlidXRlKGksbyxhLHMsbCl7bGV0IGM9dGhpcy5fcGFyc2VCaW5kaW5ncyhsLG8pO2lmKGMpe2xldCB1PXMsaD0icHJvcGVydHkiO2oxZS50ZXN0KHMpP2g9ImF0dHJpYnV0ZSI6c1tzLmxlbmd0aC0xXT09IiQiJiYocz1zLnNsaWNlKDAsLTEpLGg9ImF0dHJpYnV0ZSIpO2xldCBmPWRtdChjKTtyZXR1cm4gZiYmaD09ImF0dHJpYnV0ZSImJihzPT0iY2xhc3MiJiZpLmhhc0F0dHJpYnV0ZSgiY2xhc3MiKSYmKGYrPSIgIitpLmdldEF0dHJpYnV0ZShzKSksaS5zZXRBdHRyaWJ1dGUocyxmKSksaD09ImF0dHJpYnV0ZSImJnU9PSJkaXNhYmxlLXVwZ3JhZGUkIiYmaS5zZXRBdHRyaWJ1dGUocywiIiksaS5sb2NhbE5hbWU9PT0iaW5wdXQiJiZ1PT09InZhbHVlIiYmaS5zZXRBdHRyaWJ1dGUodSwiIiksaS5yZW1vdmVBdHRyaWJ1dGUodSksaD09PSJwcm9wZXJ0eSImJihzPXdtKHMpKSx4Ryh0aGlzLG8sYSxoLHMsYyxmKSwhMH1lbHNlIHJldHVybiB0Ll9wYXJzZVRlbXBsYXRlTm9kZUF0dHJpYnV0ZS5jYWxsKHRoaXMsaSxvLGEscyxsKX1zdGF0aWMgX3BhcnNlVGVtcGxhdGVOZXN0ZWRUZW1wbGF0ZShpLG8sYSl7bGV0IHM9dC5fcGFyc2VUZW1wbGF0ZU5lc3RlZFRlbXBsYXRlLmNhbGwodGhpcyxpLG8sYSksbD1pLnBhcmVudE5vZGUsYz1hLnRlbXBsYXRlSW5mbyx1PWwubG9jYWxOYW1lPT09ImRvbS1pZiIsaD1sLmxvY2FsTmFtZT09PSJkb20tcmVwZWF0IjtmRyYmKHV8fGgpJiYobC5yZW1vdmVDaGlsZChpKSxhPWEucGFyZW50SW5mbyxhLnRlbXBsYXRlSW5mbz1jLGEubm90ZWQ9ITAscz0hMSk7bGV0IGY9Yy5ob3N0UHJvcHM7aWYoa0kmJnUpZiYmKG8uaG9zdFByb3BzPU9iamVjdC5hc3NpZ24oby5ob3N0UHJvcHN8fHt9LGYpLGZHfHwoYS5wYXJlbnRJbmZvLm5vdGVkPSEwKSk7ZWxzZXtsZXQgcD0ieyI7Zm9yKGxldCBkIGluIGYpe2xldCBnPVt7bW9kZTpwLHNvdXJjZTpkLGRlcGVuZGVuY2llczpbZF0saG9zdFByb3A6ITB9XTt4Ryh0aGlzLG8sYSwicHJvcGVydHkiLCJfaG9zdF8iK2QsZyl9fXJldHVybiBzfXN0YXRpYyBfcGFyc2VCaW5kaW5ncyhpLG8pe2xldCBhPVtdLHM9MCxsO2Zvcig7KGw9cG10LmV4ZWMoaSkpIT09bnVsbDspe2wuaW5kZXg+cyYmYS5wdXNoKHtsaXRlcmFsOmkuc2xpY2UocyxsLmluZGV4KX0pO2xldCBjPWxbMV1bMF0sdT1Cb29sZWFuKGxbMl0pLGg9bFszXS50cmltKCksZj0hMSxwPSIiLGQ9LTE7Yz09InsiJiYoZD1oLmluZGV4T2YoIjo6IikpPjAmJihwPWguc3Vic3RyaW5nKGQrMiksaD1oLnN1YnN0cmluZygwLGQpLGY9ITApO2xldCBnPWJHKGgpLF89W107aWYoZyl7bGV0e2FyZ3M6eSxtZXRob2ROYW1lOnh9PWc7Zm9yKGxldCBTPTA7Uzx5Lmxlbmd0aDtTKyspe2xldCBDPXlbU107Qy5saXRlcmFsfHxfLnB1c2goQyl9bGV0IGI9by5keW5hbWljRm5zOyhiJiZiW3hdfHxnLnN0YXRpYykmJihfLnB1c2goeCksZy5keW5hbWljRm49ITApfWVsc2UgXy5wdXNoKGgpO2EucHVzaCh7c291cmNlOmgsbW9kZTpjLG5lZ2F0ZTp1LGN1c3RvbUV2ZW50OmYsc2lnbmF0dXJlOmcsZGVwZW5kZW5jaWVzOl8sZXZlbnQ6cH0pLHM9cG10Lmxhc3RJbmRleH1pZihzJiZzPGkubGVuZ3RoKXtsZXQgYz1pLnN1YnN0cmluZyhzKTtjJiZhLnB1c2goe2xpdGVyYWw6Y30pfXJldHVybiBhLmxlbmd0aD9hOm51bGx9c3RhdGljIF9ldmFsdWF0ZUJpbmRpbmcoaSxvLGEscyxsLGMpe2xldCB1O3JldHVybiBvLnNpZ25hdHVyZT91PXdHKGksYSxzLGwsby5zaWduYXR1cmUpOmEhPW8uc291cmNlP3U9Tm8oaSxvLnNvdXJjZSk6YyYmTkkoYSk/dT1ObyhpLGEpOnU9aS5fX2RhdGFbYV0sby5uZWdhdGUmJih1PSF1KSx1fX1yZXR1cm4gcn0pLFdNPVtdO3ZhciBDdmU9MDtmdW5jdGlvbiB3bXQoKXtDdmUrK312YXIgQXZlPVtdO2Z1bmN0aW9uIEhJKGUpe0F2ZS5wdXNoKGUpfWZ1bmN0aW9uIFB2ZShlKXtsZXQgdD17fTtmb3IobGV0IHIgaW4gZSl7bGV0IG49ZVtyXTt0W3JdPXR5cGVvZiBuPT0iZnVuY3Rpb24iP3t0eXBlOm59Om59cmV0dXJuIHR9dmFyIFNtdD1ObihlPT57bGV0IHQ9ekkoZSk7ZnVuY3Rpb24gcihvKXtsZXQgYT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7cmV0dXJuIGEucHJvdG90eXBlIGluc3RhbmNlb2YgaT9hOm51bGx9ZnVuY3Rpb24gbihvKXtpZighby5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX293blByb3BlcnRpZXMiLG8pKSl7bGV0IGE9bnVsbDtpZihvLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInByb3BlcnRpZXMiLG8pKSl7bGV0IHM9by5wcm9wZXJ0aWVzO3MmJihhPVB2ZShzKSl9by5fX293blByb3BlcnRpZXM9YX1yZXR1cm4gby5fX293blByb3BlcnRpZXN9Y2xhc3MgaSBleHRlbmRzIHR7c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX29ic2VydmVkQXR0cmlidXRlcyIsdGhpcykpKXtISSh0aGlzLnByb3RvdHlwZSk7bGV0IGE9dGhpcy5fcHJvcGVydGllczt0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzPWE/T2JqZWN0LmtleXMoYSkubWFwKHM9PnRoaXMucHJvdG90eXBlLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKHMpKTpbXX1yZXR1cm4gdGhpcy5fX29ic2VydmVkQXR0cmlidXRlc31zdGF0aWMgZmluYWxpemUoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2ZpbmFsaXplZCIsdGhpcykpKXtsZXQgYT1yKHRoaXMpO2EmJmEuZmluYWxpemUoKSx0aGlzLl9fZmluYWxpemVkPSEwLHRoaXMuX2ZpbmFsaXplQ2xhc3MoKX19c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7bGV0IGE9bih0aGlzKTthJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoYSl9c3RhdGljIGdldCBfcHJvcGVydGllcygpe2lmKCF0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fcHJvcGVydGllcyIsdGhpcykpKXtsZXQgYT1yKHRoaXMpO3RoaXMuX19wcm9wZXJ0aWVzPU9iamVjdC5hc3NpZ24oe30sYSYmYS5fcHJvcGVydGllcyxuKHRoaXMpKX1yZXR1cm4gdGhpcy5fX3Byb3BlcnRpZXN9c3RhdGljIHR5cGVGb3JQcm9wZXJ0eShhKXtsZXQgcz10aGlzLl9wcm9wZXJ0aWVzW2FdO3JldHVybiBzJiZzLnR5cGV9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7d210KCksdGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZW5hYmxlUHJvcGVydGllcygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2smJnN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCl9fXJldHVybiBpfSk7dmFyIE1tdD0iMy40LjEiLFZJPXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLmNzc0J1aWxkLFNtPU5uKGU9PntsZXQgdD1TbXQodV8oZSkpO2Z1bmN0aW9uIHIobCl7aWYoIWwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19wcm9wZXJ0eURlZmF1bHRzIixsKSkpe2wuX19wcm9wZXJ0eURlZmF1bHRzPW51bGw7bGV0IGM9bC5fcHJvcGVydGllcztmb3IobGV0IHUgaW4gYyl7bGV0IGg9Y1t1XTsidmFsdWUiaW4gaCYmKGwuX19wcm9wZXJ0eURlZmF1bHRzPWwuX19wcm9wZXJ0eURlZmF1bHRzfHx7fSxsLl9fcHJvcGVydHlEZWZhdWx0c1t1XT1oKX19cmV0dXJuIGwuX19wcm9wZXJ0eURlZmF1bHRzfWZ1bmN0aW9uIG4obCl7cmV0dXJuIGwuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19vd25PYnNlcnZlcnMiLGwpKXx8KGwuX19vd25PYnNlcnZlcnM9bC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJvYnNlcnZlcnMiLGwpKT9sLm9ic2VydmVyczpudWxsKSxsLl9fb3duT2JzZXJ2ZXJzfWZ1bmN0aW9uIGkobCxjLHUsaCl7dS5jb21wdXRlZCYmKHUucmVhZE9ubHk9ITApLHUuY29tcHV0ZWQmJihsLl9oYXNSZWFkT25seUVmZmVjdChjKT9jb25zb2xlLndhcm4oYENhbm5vdCByZWRlZmluZSBjb21wdXRlZCBwcm9wZXJ0eSAnJHtjfScuYCk6bC5fY3JlYXRlQ29tcHV0ZWRQcm9wZXJ0eShjLHUuY29tcHV0ZWQsaCkpLHUucmVhZE9ubHkmJiFsLl9oYXNSZWFkT25seUVmZmVjdChjKT9sLl9jcmVhdGVSZWFkT25seVByb3BlcnR5KGMsIXUuY29tcHV0ZWQpOnUucmVhZE9ubHk9PT0hMSYmbC5faGFzUmVhZE9ubHlFZmZlY3QoYykmJmNvbnNvbGUud2FybihgQ2Fubm90IG1ha2UgcmVhZE9ubHkgcHJvcGVydHkgJyR7Y30nIG5vbi1yZWFkT25seS5gKSx1LnJlZmxlY3RUb0F0dHJpYnV0ZSYmIWwuX2hhc1JlZmxlY3RFZmZlY3QoYyk/bC5fY3JlYXRlUmVmbGVjdGVkUHJvcGVydHkoYyk6dS5yZWZsZWN0VG9BdHRyaWJ1dGU9PT0hMSYmbC5faGFzUmVmbGVjdEVmZmVjdChjKSYmY29uc29sZS53YXJuKGBDYW5ub3QgbWFrZSByZWZsZWN0ZWQgcHJvcGVydHkgJyR7Y30nIG5vbi1yZWZsZWN0ZWQuYCksdS5ub3RpZnkmJiFsLl9oYXNOb3RpZnlFZmZlY3QoYyk/bC5fY3JlYXRlTm90aWZ5aW5nUHJvcGVydHkoYyk6dS5ub3RpZnk9PT0hMSYmbC5faGFzTm90aWZ5RWZmZWN0KGMpJiZjb25zb2xlLndhcm4oYENhbm5vdCBtYWtlIG5vdGlmeSBwcm9wZXJ0eSAnJHtjfScgbm9uLW5vdGlmeS5gKSx1Lm9ic2VydmVyJiZsLl9jcmVhdGVQcm9wZXJ0eU9ic2VydmVyKGMsdS5vYnNlcnZlcixoW3Uub2JzZXJ2ZXJdKSxsLl9hZGRQcm9wZXJ0eVRvQXR0cmlidXRlTWFwKGMpfWZ1bmN0aW9uIG8obCxjLHUsaCl7aWYoIVZJKXtsZXQgZj1jLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSxwPVJJKGMpLGQ9UWR0KHUpLGc9Yy5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkO2ZvcihsZXQgeT0wO3k8ZC5sZW5ndGg7eSsrKXtsZXQgeD1kW3ldO3gudGV4dENvbnRlbnQ9bC5fcHJvY2Vzc1N0eWxlVGV4dCh4LnRleHRDb250ZW50LGgpLGMuY29udGVudC5pbnNlcnRCZWZvcmUoeCxnKX1sZXQgXz0wO2ZvcihsZXQgeT0wO3k8cC5sZW5ndGg7eSsrKXtsZXQgeD1wW3ldLGI9ZltfXTtiIT09eD8oeD14LmNsb25lTm9kZSghMCksYi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh4LGIpKTpfKysseC50ZXh0Q29udGVudD1sLl9wcm9jZXNzU3R5bGVUZXh0KHgudGV4dENvbnRlbnQsaCl9fWlmKHdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZShjLHUpLFlkdCYmVkkmJkhkdCl7bGV0IGY9Yy5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7aWYoZil7bGV0IHA9IiI7QXJyYXkuZnJvbShmKS5mb3JFYWNoKGQ9PntwKz1kLnRleHRDb250ZW50LGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKX0pLGwuX3N0eWxlU2hlZXQ9bmV3IENTU1N0eWxlU2hlZXQsbC5fc3R5bGVTaGVldC5yZXBsYWNlU3luYyhwKX19fWZ1bmN0aW9uIGEobCl7bGV0IGM9bnVsbDtpZihsJiYoIWl1fHxxZHQpJiYoYz1vdS5pbXBvcnQobCwidGVtcGxhdGUiKSxpdSYmIWMpKXRocm93IG5ldyBFcnJvcihgc3RyaWN0VGVtcGxhdGVQb2xpY3k6IGV4cGVjdGluZyBkb20tbW9kdWxlIG9yIG51bGwgdGVtcGxhdGUgZm9yICR7bH1gKTtyZXR1cm4gY31jbGFzcyBzIGV4dGVuZHMgdHtzdGF0aWMgZ2V0IHBvbHltZXJFbGVtZW50VmVyc2lvbigpe3JldHVybiBNbXR9c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7dC5fZmluYWxpemVDbGFzcy5jYWxsKHRoaXMpO2xldCBjPW4odGhpcyk7YyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoYyx0aGlzLl9wcm9wZXJ0aWVzKSx0aGlzLl9wcmVwYXJlVGVtcGxhdGUoKX1zdGF0aWMgX3ByZXBhcmVUZW1wbGF0ZSgpe2xldCBjPXRoaXMudGVtcGxhdGU7YyYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oY29uc29sZS5lcnJvcigidGVtcGxhdGUgZ2V0dGVyIG11c3QgcmV0dXJuIEhUTUxUZW1wbGF0ZUVsZW1lbnQiKSxjPW51bGwpOnBwfHwoYz1jLmNsb25lTm9kZSghMCkpKSx0aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU9Y31zdGF0aWMgY3JlYXRlUHJvcGVydGllcyhjKXtmb3IobGV0IHUgaW4gYylpKHRoaXMucHJvdG90eXBlLHUsY1t1XSxjKX1zdGF0aWMgY3JlYXRlT2JzZXJ2ZXJzKGMsdSl7bGV0IGg9dGhpcy5wcm90b3R5cGU7Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspaC5fY3JlYXRlTWV0aG9kT2JzZXJ2ZXIoY1tmXSx1KX1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX3RlbXBsYXRlIix0aGlzKSkpe2xldCBjPXRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl90ZW1wbGF0ZSIsdGhpcy5wcm90b3R5cGUpKT90aGlzLnByb3RvdHlwZS5fdGVtcGxhdGU6dm9pZCAwO3RoaXMuX3RlbXBsYXRlPWMhPT12b2lkIDA/Yzp0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoImlzIix0aGlzKSkmJmEodGhpcy5pcyl8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuY29uc3RydWN0b3IudGVtcGxhdGV9cmV0dXJuIHRoaXMuX3RlbXBsYXRlfXN0YXRpYyBzZXQgdGVtcGxhdGUoYyl7dGhpcy5fdGVtcGxhdGU9Y31zdGF0aWMgZ2V0IGltcG9ydFBhdGgoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfaW1wb3J0UGF0aCIsdGhpcykpKXtsZXQgYz10aGlzLmltcG9ydE1ldGE7aWYoYyl0aGlzLl9pbXBvcnRQYXRoPUN4KGMudXJsKTtlbHNle2xldCB1PW91LmltcG9ydCh0aGlzLmlzKTt0aGlzLl9pbXBvcnRQYXRoPXUmJnUuYXNzZXRwYXRofHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yLmltcG9ydFBhdGh9fXJldHVybiB0aGlzLl9pbXBvcnRQYXRofWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl90ZW1wbGF0ZSx0aGlzLl9pbXBvcnRQYXRoLHRoaXMucm9vdFBhdGgsdGhpcy5pbXBvcnRQYXRoLHRoaXMucm9vdCx0aGlzLiR9X2luaXRpYWxpemVQcm9wZXJ0aWVzKCl7dGhpcy5jb25zdHJ1Y3Rvci5maW5hbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2ZpbmFsaXplVGVtcGxhdGUodGhpcy5sb2NhbE5hbWUpLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMucm9vdFBhdGg9VmR0LHRoaXMuaW1wb3J0UGF0aD10aGlzLmNvbnN0cnVjdG9yLmltcG9ydFBhdGg7bGV0IGM9cih0aGlzLmNvbnN0cnVjdG9yKTtpZighIWMpZm9yKGxldCB1IGluIGMpe2xldCBoPWNbdV07aWYodGhpcy5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQodSkpe2xldCBmPXR5cGVvZiBoLnZhbHVlPT0iZnVuY3Rpb24iP2gudmFsdWUuY2FsbCh0aGlzKTpoLnZhbHVlO3RoaXMuX2hhc0FjY2Vzc29yKHUpP3RoaXMuX3NldFBlbmRpbmdQcm9wZXJ0eSh1LGYsITApOnRoaXNbdV09Zn19fV9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChjKXtyZXR1cm4hdGhpcy5oYXNPd25Qcm9wZXJ0eShjKX1zdGF0aWMgX3Byb2Nlc3NTdHlsZVRleHQoYyx1KXtyZXR1cm4gSE0oYyx1KX1zdGF0aWMgX2ZpbmFsaXplVGVtcGxhdGUoYyl7bGV0IHU9dGhpcy5wcm90b3R5cGUuX3RlbXBsYXRlO2lmKHUmJiF1Ll9fcG9seW1lckZpbmFsaXplZCl7dS5fX3BvbHltZXJGaW5hbGl6ZWQ9ITA7bGV0IGg9dGhpcy5pbXBvcnRQYXRoLGY9aD9sXyhoKToiIjtvKHRoaXMsdSxjLGYpLHRoaXMucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUodSl9fWNvbm5lY3RlZENhbGxiYWNrKCl7d2luZG93LlNoYWR5Q1NTJiZ0aGlzLl90ZW1wbGF0ZSYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0aGlzKSxzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpfXJlYWR5KCl7dGhpcy5fdGVtcGxhdGUmJih0aGlzLnJvb3Q9dGhpcy5fc3RhbXBUZW1wbGF0ZSh0aGlzLl90ZW1wbGF0ZSksdGhpcy4kPXRoaXMucm9vdC4kKSxzdXBlci5yZWFkeSgpfV9yZWFkeUNsaWVudHMoKXt0aGlzLl90ZW1wbGF0ZSYmKHRoaXMucm9vdD10aGlzLl9hdHRhY2hEb20odGhpcy5yb290KSksc3VwZXIuX3JlYWR5Q2xpZW50cygpfV9hdHRhY2hEb20oYyl7bGV0IHU9dWUodGhpcyk7aWYodS5hdHRhY2hTaGFkb3cpcmV0dXJuIGM/KHUuc2hhZG93Um9vdHx8KHUuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIixzaGFkeVVwZ3JhZGVGcmFnbWVudDpjfSksdS5zaGFkb3dSb290LmFwcGVuZENoaWxkKGMpLHRoaXMuY29uc3RydWN0b3IuX3N0eWxlU2hlZXQmJih1LnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPVt0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZVNoZWV0XSkpLEdkdCYmd2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00uZmx1c2hJbml0aWFsKHUuc2hhZG93Um9vdCksdS5zaGFkb3dSb290KTpudWxsO3Rocm93IG5ldyBFcnJvcigiU2hhZG93RE9NIG5vdCBhdmFpbGFibGUuIFBvbHltZXJFbGVtZW50IGNhbiBjcmVhdGUgZG9tIGFzIGNoaWxkcmVuIGluc3RlYWQgb2YgaW4gU2hhZG93RE9NIGJ5IHNldHRpbmcgYHRoaXMucm9vdCA9IHRoaXM7YCBiZWZvcmUgYHJlYWR5YC4iKX11cGRhdGVTdHlsZXMoYyl7d2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1Muc3R5bGVTdWJ0cmVlKHRoaXMsYyl9cmVzb2x2ZVVybChjLHUpe3JldHVybiF1JiZ0aGlzLmltcG9ydFBhdGgmJih1PWxfKHRoaXMuaW1wb3J0UGF0aCkpLGxfKGMsdSl9c3RhdGljIF9wYXJzZVRlbXBsYXRlQ29udGVudChjLHUsaCl7cmV0dXJuIHUuZHluYW1pY0Zucz11LmR5bmFtaWNGbnN8fHRoaXMuX3Byb3BlcnRpZXMsdC5fcGFyc2VUZW1wbGF0ZUNvbnRlbnQuY2FsbCh0aGlzLGMsdSxoKX1zdGF0aWMgX2FkZFRlbXBsYXRlUHJvcGVydHlFZmZlY3QoYyx1LGgpe3JldHVybiBJSSYmISh1IGluIHRoaXMuX3Byb3BlcnRpZXMpJiYhKGguaW5mby5wYXJ0LnNpZ25hdHVyZSYmaC5pbmZvLnBhcnQuc2lnbmF0dXJlLnN0YXRpYykmJiFoLmluZm8ucGFydC5ob3N0UHJvcCYmIWMubmVzdGVkVGVtcGxhdGUmJmNvbnNvbGUud2FybihgUHJvcGVydHkgJyR7dX0nIHVzZWQgaW4gdGVtcGxhdGUgYnV0IG5vdCBkZWNsYXJlZCBpbiAncHJvcGVydGllcyc7IGF0dHJpYnV0ZSB3aWxsIG5vdCBiZSBvYnNlcnZlZC5gKSx0Ll9hZGRUZW1wbGF0ZVByb3BlcnR5RWZmZWN0LmNhbGwodGhpcyxjLHUsaCl9fXJldHVybiBzfSk7dmFyIFVJPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dC50b1N0cmluZygpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMudmFsdWV9fTtmdW5jdGlvbiBJdmUoZSl7aWYoZSBpbnN0YW5jZW9mIFVJKXJldHVybiBlLnZhbHVlO3Rocm93IG5ldyBFcnJvcihgbm9uLWxpdGVyYWwgdmFsdWUgcGFzc2VkIHRvIFBvbHltZXIncyBodG1sTGl0ZXJhbCBmdW5jdGlvbjogJHtlfWApfWZ1bmN0aW9uIEx2ZShlKXtpZihlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudClyZXR1cm4gZS5pbm5lckhUTUw7aWYoZSBpbnN0YW5jZW9mIFVJKXJldHVybiBJdmUoZSk7dGhyb3cgbmV3IEVycm9yKGBub24tdGVtcGxhdGUgdmFsdWUgcGFzc2VkIHRvIFBvbHltZXIncyBodG1sIGZ1bmN0aW9uOiAke2V9YCl9dmFyIFE9ZnVuY3Rpb24odCwuLi5yKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiBuLmlubmVySFRNTD1yLnJlZHVjZSgoaSxvLGEpPT5pK0x2ZShvKSt0W2ErMV0sdFswXSksbn07dmFyIG10PVNtKEhUTUxFbGVtZW50KTt2YXIgZnk9RWUoT2UoKSwxKTt2YXIgaF89ISh3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSkscUk7ZnVuY3Rpb24gRW10KGUpe2UmJmUuc2hpbWNzc3Byb3BlcnRpZXM/cUk9ITE6cUk9aF98fEJvb2xlYW4oIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XC82MDF8RWRnZVwvMTUvKSYmd2luZG93LkNTUyYmQ1NTLnN1cHBvcnRzJiZDU1Muc3VwcG9ydHMoImJveC1zaGFkb3ciLCIwIDAgMCB2YXIoLS1mb28pIikpfXZhciBNbTt3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCE9PXZvaWQgMCYmKE1tPXdpbmRvdy5TaGFkeUNTUy5jc3NCdWlsZCk7dmFyIEdJPUJvb2xlYW4od2luZG93LlNoYWR5Q1NTJiZ3aW5kb3cuU2hhZHlDU1MuZGlzYWJsZVJ1bnRpbWUpO3dpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLm5hdGl2ZUNzcyE9PXZvaWQgMD9xST13aW5kb3cuU2hhZHlDU1MubmF0aXZlQ3NzOndpbmRvdy5TaGFkeUNTUz8oRW10KHdpbmRvdy5TaGFkeUNTUyksd2luZG93LlNoYWR5Q1NTPXZvaWQgMCk6RW10KHdpbmRvdy5XZWJDb21wb25lbnRzJiZ3aW5kb3cuV2ViQ29tcG9uZW50cy5mbGFncyk7dmFyIE54PXFJO3ZhciBXST1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhcnQ9MCx0aGlzLmVuZD0wLHRoaXMucHJldmlvdXM9bnVsbCx0aGlzLnBhcmVudD1udWxsLHRoaXMucnVsZXM9bnVsbCx0aGlzLnBhcnNlZENzc1RleHQ9IiIsdGhpcy5jc3NUZXh0PSIiLHRoaXMuYXRSdWxlPSExLHRoaXMudHlwZT0wLHRoaXMua2V5ZnJhbWVzTmFtZT0iIix0aGlzLnNlbGVjdG9yPSIiLHRoaXMucGFyc2VkU2VsZWN0b3I9IiJ9fTtmdW5jdGlvbiBNRyhlKXtyZXR1cm4gZT1rdmUoZSksVG10KFJ2ZShlKSxlKX1mdW5jdGlvbiBrdmUoZSl7cmV0dXJuIGUucmVwbGFjZShncC5jb21tZW50cywiIikucmVwbGFjZShncC5wb3J0LCIiKX1mdW5jdGlvbiBSdmUoZSl7bGV0IHQ9bmV3IFdJO3Quc3RhcnQ9MCx0LmVuZD1lLmxlbmd0aDtsZXQgcj10O2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKylpZihlW25dPT09Q210KXtyLnJ1bGVzfHwoci5ydWxlcz1bXSk7bGV0IG89cixhPW8ucnVsZXNbby5ydWxlcy5sZW5ndGgtMV18fG51bGw7cj1uZXcgV0ksci5zdGFydD1uKzEsci5wYXJlbnQ9byxyLnByZXZpb3VzPWEsby5ydWxlcy5wdXNoKHIpfWVsc2UgZVtuXT09PUFtdCYmKHIuZW5kPW4rMSxyPXIucGFyZW50fHx0KTtyZXR1cm4gdH1mdW5jdGlvbiBUbXQoZSx0KXtsZXQgcj10LnN1YnN0cmluZyhlLnN0YXJ0LGUuZW5kLTEpO2lmKGUucGFyc2VkQ3NzVGV4dD1lLmNzc1RleHQ9ci50cmltKCksZS5wYXJlbnQpe2xldCBpPWUucHJldmlvdXM/ZS5wcmV2aW91cy5lbmQ6ZS5wYXJlbnQuc3RhcnQ7cj10LnN1YnN0cmluZyhpLGUuc3RhcnQtMSkscj1OdmUocikscj1yLnJlcGxhY2UoZ3AubXVsdGlwbGVTcGFjZXMsIiAiKSxyPXIuc3Vic3RyaW5nKHIubGFzdEluZGV4T2YoIjsiKSsxKTtsZXQgbz1lLnBhcnNlZFNlbGVjdG9yPWUuc2VsZWN0b3I9ci50cmltKCk7ZS5hdFJ1bGU9by5pbmRleE9mKEh2ZSk9PT0wLGUuYXRSdWxlP28uaW5kZXhPZihCdmUpPT09MD9lLnR5cGU9bXAuTUVESUFfUlVMRTpvLm1hdGNoKGdwLmtleWZyYW1lc1J1bGUpJiYoZS50eXBlPW1wLktFWUZSQU1FU19SVUxFLGUua2V5ZnJhbWVzTmFtZT1lLnNlbGVjdG9yLnNwbGl0KGdwLm11bHRpcGxlU3BhY2VzKS5wb3AoKSk6by5pbmRleE9mKFBtdCk9PT0wP2UudHlwZT1tcC5NSVhJTl9SVUxFOmUudHlwZT1tcC5TVFlMRV9SVUxFfWxldCBuPWUucnVsZXM7aWYobilmb3IobGV0IGk9MCxvPW4ubGVuZ3RoLGE7aTxvJiYoYT1uW2ldKTtpKyspVG10KGEsdCk7cmV0dXJuIGV9ZnVuY3Rpb24gTnZlKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oKXtsZXQgdD1hcmd1bWVudHNbMV0scj02LXQubGVuZ3RoO2Zvcig7ci0tOyl0PSIwIit0O3JldHVybiJcXCIrdH0pfWZ1bmN0aW9uIEVHKGUsdCxyPSIiKXtsZXQgbj0iIjtpZihlLmNzc1RleHR8fGUucnVsZXMpe2xldCBpPWUucnVsZXM7aWYoaSYmIUR2ZShpKSlmb3IobGV0IG89MCxhPWkubGVuZ3RoLHM7bzxhJiYocz1pW29dKTtvKyspbj1FRyhzLHQsbik7ZWxzZSBuPXQ/ZS5jc3NUZXh0Ok92ZShlLmNzc1RleHQpLG49bi50cmltKCksbiYmKG49IiAgIituK2AKYCl9cmV0dXJuIG4mJihlLnNlbGVjdG9yJiYocis9ZS5zZWxlY3RvcisiICIrQ210K2AKYCkscis9bixlLnNlbGVjdG9yJiYocis9QW10K2AKCmApKSxyfWZ1bmN0aW9uIER2ZShlKXtsZXQgdD1lWzBdO3JldHVybiBCb29sZWFuKHQpJiZCb29sZWFuKHQuc2VsZWN0b3IpJiZ0LnNlbGVjdG9yLmluZGV4T2YoUG10KT09PTB9ZnVuY3Rpb24gT3ZlKGUpe3JldHVybiBlPXp2ZShlKSxGdmUoZSl9ZnVuY3Rpb24genZlKGUpe3JldHVybiBlLnJlcGxhY2UoZ3AuY3VzdG9tUHJvcCwiIikucmVwbGFjZShncC5taXhpblByb3AsIiIpfWZ1bmN0aW9uIEZ2ZShlKXtyZXR1cm4gZS5yZXBsYWNlKGdwLm1peGluQXBwbHksIiIpLnJlcGxhY2UoZ3AudmFyQXBwbHksIiIpfXZhciBtcD17U1RZTEVfUlVMRToxLEtFWUZSQU1FU19SVUxFOjcsTUVESUFfUlVMRTo0LE1JWElOX1JVTEU6MWUzfSxDbXQ9InsiLEFtdD0ifSIsZ3A9e2NvbW1lbnRzOi9cL1wqW14qXSpcKisoW14vKl1bXipdKlwqKykqXC8vZ2ltLHBvcnQ6L0BpbXBvcnRbXjtdKjsvZ2ltLGN1c3RvbVByb3A6Lyg/Ol5bXjtcLVxzfV0rKT8tLVteO3t9XSo/Oltee307XSo/KD86Wztcbl18JCkvZ2ltLG1peGluUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj97W159XSo/fSg/Ols7XG5dfCQpPy9naW0sbWl4aW5BcHBseTovQGFwcGx5XHMqXCg/W14pO10qXCk/XHMqKD86Wztcbl18JCk/L2dpbSx2YXJBcHBseTovW147Ol0qPzpbXjtdKj92YXJcKFteO10qXCkoPzpbO1xuXXwkKT8vZ2ltLGtleWZyYW1lc1J1bGU6L15AW15cc10qa2V5ZnJhbWVzLyxtdWx0aXBsZVNwYWNlczovXHMrL2d9LFBtdD0iLS0iLEJ2ZT0iQG1lZGlhIixIdmU9IkAiO3ZhciBLTT0vKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KCg/OicoPzpcXCd8LikqPyd8Iig/OlxcInwuKSo/InxcKFteKV0qP1wpfFtefTt7XSkrKXxceyhbXn1dKilcfSg/Oig/PVs7XHN9XSl8JCkpL2dpLER4PS8oPzpefFxXKylAYXBwbHlccypcKD8oW14pO1xuXSopXCk/L2dpO3ZhciBJbXQ9L0BtZWRpYVxzKC4qKS87dmFyIExtdD1uZXcgU2V0LFZ2ZT0ic2hhZHktdW5zY29wZWQiO2Z1bmN0aW9uIGttdChlKXtsZXQgdD1lLnRleHRDb250ZW50O2lmKCFMbXQuaGFzKHQpKXtMbXQuYWRkKHQpO2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7ci5zZXRBdHRyaWJ1dGUoInNoYWR5LXVuc2NvcGVkIiwiIiksci50ZXh0Q29udGVudD10LGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocil9fWZ1bmN0aW9uIFJtdChlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoVnZlKX1mdW5jdGlvbiBaTShlLHQpe3JldHVybiBlPyh0eXBlb2YgZT09InN0cmluZyImJihlPU1HKGUpKSx0JiZPeChlLHQpLEVHKGUsTngpKToiIn1mdW5jdGlvbiBURyhlKXtyZXR1cm4hZS5fX2Nzc1J1bGVzJiZlLnRleHRDb250ZW50JiYoZS5fX2Nzc1J1bGVzPU1HKGUudGV4dENvbnRlbnQpKSxlLl9fY3NzUnVsZXN8fG51bGx9ZnVuY3Rpb24gT3goZSx0LHIsbil7aWYoIWUpcmV0dXJuO2xldCBpPSExLG89ZS50eXBlO2lmKG4mJm89PT1tcC5NRURJQV9SVUxFKXtsZXQgcz1lLnNlbGVjdG9yLm1hdGNoKEltdCk7cyYmKHdpbmRvdy5tYXRjaE1lZGlhKHNbMV0pLm1hdGNoZXN8fChpPSEwKSl9bz09PW1wLlNUWUxFX1JVTEU/dChlKTpyJiZvPT09bXAuS0VZRlJBTUVTX1JVTEU/cihlKTpvPT09bXAuTUlYSU5fUlVMRSYmKGk9ITApO2xldCBhPWUucnVsZXM7aWYoYSYmIWkpZm9yKGxldCBzPTAsbD1hLmxlbmd0aCxjO3M8bCYmKGM9YVtzXSk7cysrKU94KGMsdCxyLG4pfWZ1bmN0aW9uIFV2ZShlLHQpe2xldCByPTA7Zm9yKGxldCBuPXQsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT0iKCIpcisrO2Vsc2UgaWYoZVtuXT09PSIpIiYmLS1yPT09MClyZXR1cm4gbjtyZXR1cm4tMX1mdW5jdGlvbiBDRyhlLHQpe2xldCByPWUuaW5kZXhPZigidmFyKCIpO2lmKHI9PT0tMSlyZXR1cm4gdChlLCIiLCIiLCIiKTtsZXQgbj1VdmUoZSxyKzMpLGk9ZS5zdWJzdHJpbmcocis0LG4pLG89ZS5zdWJzdHJpbmcoMCxyKSxhPUNHKGUuc3Vic3RyaW5nKG4rMSksdCkscz1pLmluZGV4T2YoIiwiKTtpZihzPT09LTEpcmV0dXJuIHQobyxpLnRyaW0oKSwiIixhKTtsZXQgbD1pLnN1YnN0cmluZygwLHMpLnRyaW0oKSxjPWkuc3Vic3RyaW5nKHMrMSkudHJpbSgpO3JldHVybiB0KG8sbCxjLGEpfXZhciBuMXI9d2luZG93LlNoYWR5RE9NJiZ3aW5kb3cuU2hhZHlET00ud3JhcHx8KGU9PmUpO2Z1bmN0aW9uIE5tdChlKXtsZXQgdD1lLmxvY2FsTmFtZSxyPSIiLG49IiI7cmV0dXJuIHQ/dC5pbmRleE9mKCItIik+LTE/cj10OihuPXQscj1lLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoImlzIil8fCIiKToocj1lLmlzLG49ZS5leHRlbmRzKSx7aXM6cix0eXBlRXh0ZW5zaW9uOm59fWZ1bmN0aW9uIERtdChlKXtsZXQgdD1bXSxyPWUucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKTtmb3IobGV0IG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXTtSbXQoaSk/aF98fChrbXQoaSksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKToodC5wdXNoKGkudGV4dENvbnRlbnQpLGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSl9cmV0dXJuIHQuam9pbigiIikudHJpbSgpfXZhciBPbXQ9ImNzcy1idWlsZCI7ZnVuY3Rpb24gcXZlKGUpe2lmKE1tIT09dm9pZCAwKXJldHVybiBNbTtpZihlLl9fY3NzQnVpbGQ9PT12b2lkIDApe2xldCB0PWUuZ2V0QXR0cmlidXRlKE9tdCk7aWYodCllLl9fY3NzQnVpbGQ9dDtlbHNle2xldCByPUd2ZShlKTtyIT09IiImJld2ZShlKSxlLl9fY3NzQnVpbGQ9cn19cmV0dXJuIGUuX19jc3NCdWlsZHx8IiJ9ZnVuY3Rpb24gQUcoZSl7cmV0dXJuIHF2ZShlKSE9PSIifWZ1bmN0aW9uIEd2ZShlKXtsZXQgdD1lLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSI/ZS5jb250ZW50LmZpcnN0Q2hpbGQ6ZS5maXJzdENoaWxkO2lmKHQgaW5zdGFuY2VvZiBDb21tZW50KXtsZXQgcj10LnRleHRDb250ZW50LnRyaW0oKS5zcGxpdCgiOiIpO2lmKHJbMF09PT1PbXQpcmV0dXJuIHJbMV19cmV0dXJuIiJ9ZnVuY3Rpb24gV3ZlKGUpe2xldCB0PWUubG9jYWxOYW1lPT09InRlbXBsYXRlIj9lLmNvbnRlbnQuZmlyc3RDaGlsZDplLmZpcnN0Q2hpbGQ7dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIEpNKGUsdCl7Zm9yKGxldCByIGluIHQpcj09PW51bGw/ZS5zdHlsZS5yZW1vdmVQcm9wZXJ0eShyKTplLnN0eWxlLnNldFByb3BlcnR5KHIsdFtyXSl9ZnVuY3Rpb24gWUkoZSx0KXtsZXQgcj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5nZXRQcm9wZXJ0eVZhbHVlKHQpO3JldHVybiByP3IudHJpbSgpOiIifWZ1bmN0aW9uIHptdChlKXtsZXQgdD1EeC50ZXN0KGUpfHxLTS50ZXN0KGUpO3JldHVybiBEeC5sYXN0SW5kZXg9MCxLTS5sYXN0SW5kZXg9MCx0fXZhciBZdmU9LztccyovbSxqdmU9L15ccyooaW5pdGlhbCl8KGluaGVyaXQpXHMqJC8sRm10PS9ccyohaW1wb3J0YW50LyxQRz0iXy1fIjt2YXIgSUc9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9e319c2V0KHQscil7dD10LnRyaW0oKSx0aGlzLl9tYXBbdF09e3Byb3BlcnRpZXM6cixkZXBlbmRhbnRzOnt9fX1nZXQodCl7cmV0dXJuIHQ9dC50cmltKCksdGhpcy5fbWFwW3RdfHxudWxsfX0sakk9bnVsbCxEbz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnJlbnRFbGVtZW50PW51bGwsdGhpcy5fbWVhc3VyZUVsZW1lbnQ9bnVsbCx0aGlzLl9tYXA9bmV3IElHfWRldGVjdE1peGluKHQpe3JldHVybiB6bXQodCl9Z2F0aGVyU3R5bGVzKHQpe2xldCByPURtdCh0LmNvbnRlbnQpO2lmKHIpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIG4udGV4dENvbnRlbnQ9cix0LmNvbnRlbnQuaW5zZXJ0QmVmb3JlKG4sdC5jb250ZW50LmZpcnN0Q2hpbGQpLG59cmV0dXJuIG51bGx9dHJhbnNmb3JtVGVtcGxhdGUodCxyKXt0Ll9nYXRoZXJlZFN0eWxlPT09dm9pZCAwJiYodC5fZ2F0aGVyZWRTdHlsZT10aGlzLmdhdGhlclN0eWxlcyh0KSk7bGV0IG49dC5fZ2F0aGVyZWRTdHlsZTtyZXR1cm4gbj90aGlzLnRyYW5zZm9ybVN0eWxlKG4scik6bnVsbH10cmFuc2Zvcm1TdHlsZSh0LHI9IiIpe2xldCBuPVRHKHQpO3JldHVybiB0aGlzLnRyYW5zZm9ybVJ1bGVzKG4sciksdC50ZXh0Q29udGVudD1aTShuKSxufXRyYW5zZm9ybUN1c3RvbVN0eWxlKHQpe2xldCByPVRHKHQpO3JldHVybiBPeChyLG49PntuLnNlbGVjdG9yPT09Ijpyb290IiYmKG4uc2VsZWN0b3I9Imh0bWwiKSx0aGlzLnRyYW5zZm9ybVJ1bGUobil9KSx0LnRleHRDb250ZW50PVpNKHIpLHJ9dHJhbnNmb3JtUnVsZXModCxyKXt0aGlzLl9jdXJyZW50RWxlbWVudD1yLE94KHQsbj0+e3RoaXMudHJhbnNmb3JtUnVsZShuKX0pLHRoaXMuX2N1cnJlbnRFbGVtZW50PW51bGx9dHJhbnNmb3JtUnVsZSh0KXt0LmNzc1RleHQ9dGhpcy50cmFuc2Zvcm1Dc3NUZXh0KHQucGFyc2VkQ3NzVGV4dCx0KSx0LnNlbGVjdG9yPT09Ijpyb290IiYmKHQuc2VsZWN0b3I9Ijpob3N0ID4gKiIpfXRyYW5zZm9ybUNzc1RleHQodCxyKXtyZXR1cm4gdD10LnJlcGxhY2UoS00sKG4saSxvLGEpPT50aGlzLl9wcm9kdWNlQ3NzUHJvcGVydGllcyhuLGksbyxhLHIpKSx0aGlzLl9jb25zdW1lQ3NzUHJvcGVydGllcyh0LHIpfV9nZXRJbml0aWFsVmFsdWVGb3JQcm9wZXJ0eSh0KXtyZXR1cm4gdGhpcy5fbWVhc3VyZUVsZW1lbnR8fCh0aGlzLl9tZWFzdXJlRWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIiksdGhpcy5fbWVhc3VyZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcHBseS1zaGltLW1lYXN1cmUiLCIiKSx0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5hbGw9ImluaXRpYWwiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5fbWVhc3VyZUVsZW1lbnQpKSx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZWFzdXJlRWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1fZmFsbGJhY2tzRnJvbVByZXZpb3VzUnVsZXModCl7bGV0IHI9dDtmb3IoO3IucGFyZW50OylyPXIucGFyZW50O2xldCBuPXt9LGk9ITE7cmV0dXJuIE94KHIsbz0+e2k9aXx8bz09PXQsIWkmJm8uc2VsZWN0b3I9PT10LnNlbGVjdG9yJiZPYmplY3QuYXNzaWduKG4sdGhpcy5fY3NzVGV4dFRvTWFwKG8ucGFyc2VkQ3NzVGV4dCkpfSksbn1fY29uc3VtZUNzc1Byb3BlcnRpZXModCxyKXtsZXQgbj1udWxsO2Zvcig7bj1EeC5leGVjKHQpOyl7bGV0IGk9blswXSxvPW5bMV0sYT1uLmluZGV4LHM9YStpLmluZGV4T2YoIkBhcHBseSIpLGw9YStpLmxlbmd0aCxjPXQuc2xpY2UoMCxzKSx1PXQuc2xpY2UobCksaD1yP3RoaXMuX2ZhbGxiYWNrc0Zyb21QcmV2aW91c1J1bGVzKHIpOnt9O09iamVjdC5hc3NpZ24oaCx0aGlzLl9jc3NUZXh0VG9NYXAoYykpO2xldCBmPXRoaXMuX2F0QXBwbHlUb0Nzc1Byb3BlcnRpZXMobyxoKTt0PWAke2N9JHtmfSR7dX1gLER4Lmxhc3RJbmRleD1hK2YubGVuZ3RofXJldHVybiB0fV9hdEFwcGx5VG9Dc3NQcm9wZXJ0aWVzKHQscil7dD10LnJlcGxhY2UoWXZlLCIiKTtsZXQgbj1bXSxpPXRoaXMuX21hcC5nZXQodCk7aWYoaXx8KHRoaXMuX21hcC5zZXQodCx7fSksaT10aGlzLl9tYXAuZ2V0KHQpKSxpKXt0aGlzLl9jdXJyZW50RWxlbWVudCYmKGkuZGVwZW5kYW50c1t0aGlzLl9jdXJyZW50RWxlbWVudF09ITApO2xldCBvLGEscyxsPWkucHJvcGVydGllcztmb3IobyBpbiBsKXM9ciYmcltvXSxhPVtvLCI6IHZhcigiLHQsUEcsb10scyYmYS5wdXNoKCIsIixzLnJlcGxhY2UoRm10LCIiKSksYS5wdXNoKCIpIiksRm10LnRlc3QobFtvXSkmJmEucHVzaCgiICFpbXBvcnRhbnQiKSxuLnB1c2goYS5qb2luKCIiKSl9cmV0dXJuIG4uam9pbigiOyAiKX1fcmVwbGFjZUluaXRpYWxPckluaGVyaXQodCxyKXtsZXQgbj1qdmUuZXhlYyhyKTtyZXR1cm4gbiYmKG5bMV0/cj10aGlzLl9nZXRJbml0aWFsVmFsdWVGb3JQcm9wZXJ0eSh0KTpyPSJhcHBseS1zaGltLWluaGVyaXQiKSxyfV9jc3NUZXh0VG9NYXAodCxyPSExKXtsZXQgbj10LnNwbGl0KCI7IiksaSxvLGE9e307Zm9yKGxldCBzPTAsbCxjO3M8bi5sZW5ndGg7cysrKWw9bltzXSxsJiYoYz1sLnNwbGl0KCI6IiksYy5sZW5ndGg+MSYmKGk9Y1swXS50cmltKCksbz1jLnNsaWNlKDEpLmpvaW4oIjoiKSxyJiYobz10aGlzLl9yZXBsYWNlSW5pdGlhbE9ySW5oZXJpdChpLG8pKSxhW2ldPW8pKTtyZXR1cm4gYX1faW52YWxpZGF0ZU1peGluRW50cnkodCl7aWYoISFqSSlmb3IobGV0IHIgaW4gdC5kZXBlbmRhbnRzKXIhPT10aGlzLl9jdXJyZW50RWxlbWVudCYmakkocil9X3Byb2R1Y2VDc3NQcm9wZXJ0aWVzKHQscixuLGksbyl7aWYobiYmQ0cobiwoXyx5KT0+e3kmJnRoaXMuX21hcC5nZXQoeSkmJihpPWBAYXBwbHkgJHt5fTtgKX0pLCFpKXJldHVybiB0O2xldCBhPXRoaXMuX2NvbnN1bWVDc3NQcm9wZXJ0aWVzKCIiK2ksbykscz10LnNsaWNlKDAsdC5pbmRleE9mKCItLSIpKSxsPXRoaXMuX2Nzc1RleHRUb01hcChhLCEwKSxjPWwsdT10aGlzLl9tYXAuZ2V0KHIpLGg9dSYmdS5wcm9wZXJ0aWVzO2g/Yz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoaCksbCk6dGhpcy5fbWFwLnNldChyLGMpO2xldCBmPVtdLHAsZCxnPSExO2ZvcihwIGluIGMpZD1sW3BdLGQ9PT12b2lkIDAmJihkPSJpbml0aWFsIiksaCYmIShwIGluIGgpJiYoZz0hMCksZi5wdXNoKGAke3J9JHtQR30ke3B9OiAke2R9YCk7cmV0dXJuIGcmJnRoaXMuX2ludmFsaWRhdGVNaXhpbkVudHJ5KHUpLHUmJih1LnByb3BlcnRpZXM9YyksbiYmKHM9YCR7dH07JHtzfWApLGAke3N9JHtmLmpvaW4oIjsgIil9O2B9fTtEby5wcm90b3R5cGUuZGV0ZWN0TWl4aW49RG8ucHJvdG90eXBlLmRldGVjdE1peGluO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1TdHlsZT1Eby5wcm90b3R5cGUudHJhbnNmb3JtU3R5bGU7RG8ucHJvdG90eXBlLnRyYW5zZm9ybUN1c3RvbVN0eWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1DdXN0b21TdHlsZTtEby5wcm90b3R5cGUudHJhbnNmb3JtUnVsZXM9RG8ucHJvdG90eXBlLnRyYW5zZm9ybVJ1bGVzO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlPURvLnByb3RvdHlwZS50cmFuc2Zvcm1SdWxlO0RvLnByb3RvdHlwZS50cmFuc2Zvcm1UZW1wbGF0ZT1Eby5wcm90b3R5cGUudHJhbnNmb3JtVGVtcGxhdGU7RG8ucHJvdG90eXBlLl9zZXBhcmF0b3I9UEc7T2JqZWN0LmRlZmluZVByb3BlcnR5KERvLnByb3RvdHlwZSwiaW52YWxpZENhbGxiYWNrIix7Z2V0KCl7cmV0dXJuIGpJfSxzZXQoZSl7akk9ZX19KTt2YXIgQm10PURvO3ZhciBYdmU9e30sUU09WHZlO3ZhciBYST0iX2FwcGx5U2hpbUN1cnJlbnRWZXJzaW9uIix6eD0iX2FwcGx5U2hpbU5leHRWZXJzaW9uIiwkST0iX2FwcGx5U2hpbVZhbGlkYXRpbmdWZXJzaW9uIiwkdmU9UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gSG10KGUpe2xldCB0PVFNW2VdO3QmJkt2ZSh0KX1mdW5jdGlvbiBLdmUoZSl7ZVtYSV09ZVtYSV18fDAsZVskSV09ZVskSV18fDAsZVt6eF09KGVbenhdfHwwKSsxfWZ1bmN0aW9uIExHKGUpe3JldHVybiBlW1hJXT09PWVbenhdfWZ1bmN0aW9uIFZtdChlKXtyZXR1cm4hTEcoZSkmJmVbJEldPT09ZVt6eF19ZnVuY3Rpb24gVW10KGUpe2VbJEldPWVbenhdLGUuX3ZhbGlkYXRpbmd8fChlLl92YWxpZGF0aW5nPSEwLCR2ZS50aGVuKGZ1bmN0aW9uKCl7ZVtYSV09ZVt6eF0sZS5fdmFsaWRhdGluZz0hMX0pKX12YXIga0c9bnVsbCxxbXQ9d2luZG93LkhUTUxJbXBvcnRzJiZ3aW5kb3cuSFRNTEltcG9ydHMud2hlblJlYWR5fHxudWxsLFJHO2Z1bmN0aW9uIEtJKGUpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3FtdD9xbXQoZSk6KGtHfHwoa0c9bmV3IFByb21pc2UodD0+e1JHPXR9KSxkb2N1bWVudC5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIj9SRygpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLCgpPT57ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJlJHKCl9KSksa0cudGhlbihmdW5jdGlvbigpe2UmJmUoKX0pKX0pfXZhciBHbXQ9Il9fc2VlbkJ5U2hhZHlDU1MiLFpJPSJfX3NoYWR5Q1NTQ2FjaGVkU3R5bGUiLEpJPW51bGwsdEU9bnVsbCxabD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY3VzdG9tU3R5bGVzPVtdLHRoaXMuZW5xdWV1ZWQ9ITEsS0koKCk9Pnt3aW5kb3cuU2hhZHlDU1MuZmx1c2hDdXN0b21TdHlsZXMmJndpbmRvdy5TaGFkeUNTUy5mbHVzaEN1c3RvbVN0eWxlcygpfSl9ZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpe3RoaXMuZW5xdWV1ZWR8fCF0RXx8KHRoaXMuZW5xdWV1ZWQ9ITAsS0kodEUpKX1hZGRDdXN0b21TdHlsZSh0KXt0W0dtdF18fCh0W0dtdF09ITAsdGhpcy5jdXN0b21TdHlsZXMucHVzaCh0KSx0aGlzLmVucXVldWVEb2N1bWVudFZhbGlkYXRpb24oKSl9Z2V0U3R5bGVGb3JDdXN0b21TdHlsZSh0KXtpZih0W1pJXSlyZXR1cm4gdFtaSV07bGV0IHI7cmV0dXJuIHQuZ2V0U3R5bGU/cj10LmdldFN0eWxlKCk6cj10LHJ9cHJvY2Vzc1N0eWxlcygpe2xldCB0PXRoaXMuY3VzdG9tU3R5bGVzO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKG5bWkldKWNvbnRpbnVlO2xldCBpPXRoaXMuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZShuKTtpZihpKXtsZXQgbz1pLl9fYXBwbGllZEVsZW1lbnR8fGk7SkkmJkpJKG8pLG5bWkldPW99fXJldHVybiB0fX07WmwucHJvdG90eXBlLmFkZEN1c3RvbVN0eWxlPVpsLnByb3RvdHlwZS5hZGRDdXN0b21TdHlsZTtabC5wcm90b3R5cGUuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZT1abC5wcm90b3R5cGUuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZTtabC5wcm90b3R5cGUucHJvY2Vzc1N0eWxlcz1abC5wcm90b3R5cGUucHJvY2Vzc1N0eWxlcztPYmplY3QuZGVmaW5lUHJvcGVydGllcyhabC5wcm90b3R5cGUse3RyYW5zZm9ybUNhbGxiYWNrOntnZXQoKXtyZXR1cm4gSkl9LHNldChlKXtKST1lfX0sdmFsaWRhdGVDYWxsYmFjazp7Z2V0KCl7cmV0dXJuIHRFfSxzZXQoZSl7bGV0IHQ9ITE7dEV8fCh0PSEwKSx0RT1lLHQmJnRoaXMuZW5xdWV1ZURvY3VtZW50VmFsaWRhdGlvbigpfX19KTt2YXIgZUU9bmV3IEJtdCxORz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2U9bnVsbCxlRS5pbnZhbGlkQ2FsbGJhY2s9SG10fWVuc3VyZSgpe3RoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2V8fHdpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZSYmKHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2U9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLHRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UudHJhbnNmb3JtQ2FsbGJhY2s9dD0+e2VFLnRyYW5zZm9ybUN1c3RvbVN0eWxlKHQpfSx0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLnZhbGlkYXRlQ2FsbGJhY2s9KCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkJiZ0aGlzLmZsdXNoQ3VzdG9tU3R5bGVzKCl9KX0pfXByZXBhcmVUZW1wbGF0ZSh0LHIpe2lmKHRoaXMuZW5zdXJlKCksQUcodCkpcmV0dXJuO1FNW3JdPXQ7bGV0IG49ZUUudHJhbnNmb3JtVGVtcGxhdGUodCxyKTt0Ll9zdHlsZUFzdD1ufWZsdXNoQ3VzdG9tU3R5bGVzKCl7aWYodGhpcy5lbnN1cmUoKSwhdGhpcy5jdXN0b21TdHlsZUludGVyZmFjZSlyZXR1cm47bGV0IHQ9dGhpcy5jdXN0b21TdHlsZUludGVyZmFjZS5wcm9jZXNzU3R5bGVzKCk7aWYoISF0aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXSxpPXRoaXMuY3VzdG9tU3R5bGVJbnRlcmZhY2UuZ2V0U3R5bGVGb3JDdXN0b21TdHlsZShuKTtpJiZlRS50cmFuc2Zvcm1DdXN0b21TdHlsZShpKX10aGlzLmN1c3RvbVN0eWxlSW50ZXJmYWNlLmVucXVldWVkPSExfX1zdHlsZVN1YnRyZWUodCxyKXtpZih0aGlzLmVuc3VyZSgpLHImJkpNKHQsciksdC5zaGFkb3dSb290KXt0aGlzLnN0eWxlRWxlbWVudCh0KTtsZXQgbj10LnNoYWRvd1Jvb3QuY2hpbGRyZW58fHQuc2hhZG93Um9vdC5jaGlsZE5vZGVzO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXRoaXMuc3R5bGVTdWJ0cmVlKG5baV0pfWVsc2V7bGV0IG49dC5jaGlsZHJlbnx8dC5jaGlsZE5vZGVzO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKXRoaXMuc3R5bGVTdWJ0cmVlKG5baV0pfX1zdHlsZUVsZW1lbnQodCl7dGhpcy5lbnN1cmUoKTtsZXR7aXM6cn09Tm10KHQpLG49UU1bcl07aWYoIShuJiZBRyhuKSkmJm4mJiFMRyhuKSl7Vm10KG4pfHwodGhpcy5wcmVwYXJlVGVtcGxhdGUobixyKSxVbXQobikpO2xldCBpPXQuc2hhZG93Um9vdDtpZihpKXtsZXQgbz1pLnF1ZXJ5U2VsZWN0b3IoInN0eWxlIik7byYmKG8uX19jc3NSdWxlcz1uLl9zdHlsZUFzdCxvLnRleHRDb250ZW50PVpNKG4uX3N0eWxlQXN0KSl9fX1zdHlsZURvY3VtZW50KHQpe3RoaXMuZW5zdXJlKCksdGhpcy5zdHlsZVN1YnRyZWUoZG9jdW1lbnQuYm9keSx0KX19O2lmKCF3aW5kb3cuU2hhZHlDU1N8fCF3aW5kb3cuU2hhZHlDU1MuU2NvcGluZ1NoaW0pe2xldCBlPW5ldyBORyx0PXdpbmRvdy5TaGFkeUNTUyYmd2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlO3dpbmRvdy5TaGFkeUNTUz17cHJlcGFyZVRlbXBsYXRlKHIsbixpKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCksZS5wcmVwYXJlVGVtcGxhdGUocixuKX0scHJlcGFyZVRlbXBsYXRlU3R5bGVzKHIsbixpKXt3aW5kb3cuU2hhZHlDU1MucHJlcGFyZVRlbXBsYXRlKHIsbixpKX0scHJlcGFyZVRlbXBsYXRlRG9tKHIsbil7fSxzdHlsZVN1YnRyZWUocixuKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCksZS5zdHlsZVN1YnRyZWUocixuKX0sc3R5bGVFbGVtZW50KHIpe2UuZmx1c2hDdXN0b21TdHlsZXMoKSxlLnN0eWxlRWxlbWVudChyKX0sc3R5bGVEb2N1bWVudChyKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCksZS5zdHlsZURvY3VtZW50KHIpfSxnZXRDb21wdXRlZFN0eWxlVmFsdWUocixuKXtyZXR1cm4gWUkocixuKX0sZmx1c2hDdXN0b21TdHlsZXMoKXtlLmZsdXNoQ3VzdG9tU3R5bGVzKCl9LG5hdGl2ZUNzczpOeCxuYXRpdmVTaGFkb3c6aF8sY3NzQnVpbGQ6TW0sZGlzYWJsZVJ1bnRpbWU6R0l9LHQmJih3aW5kb3cuU2hhZHlDU1MuQ3VzdG9tU3R5bGVJbnRlcmZhY2U9dCl9d2luZG93LlNoYWR5Q1NTLkFwcGx5U2hpbT1lRTt2YXIgc3I9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9hc3luY01vZHVsZT1udWxsLHRoaXMuX2NhbGxiYWNrPW51bGwsdGhpcy5fdGltZXI9bnVsbH1zZXRDb25maWcodCxyKXt0aGlzLl9hc3luY01vZHVsZT10LHRoaXMuX2NhbGxiYWNrPXIsdGhpcy5fdGltZXI9dGhpcy5fYXN5bmNNb2R1bGUucnVuKCgpPT57dGhpcy5fdGltZXI9bnVsbCxyRS5kZWxldGUodGhpcyksdGhpcy5fY2FsbGJhY2soKX0pfWNhbmNlbCgpe3RoaXMuaXNBY3RpdmUoKSYmKHRoaXMuX2NhbmNlbEFzeW5jKCksckUuZGVsZXRlKHRoaXMpKX1fY2FuY2VsQXN5bmMoKXt0aGlzLmlzQWN0aXZlKCkmJih0aGlzLl9hc3luY01vZHVsZS5jYW5jZWwodGhpcy5fdGltZXIpLHRoaXMuX3RpbWVyPW51bGwpfWZsdXNoKCl7dGhpcy5pc0FjdGl2ZSgpJiYodGhpcy5jYW5jZWwoKSx0aGlzLl9jYWxsYmFjaygpKX1pc0FjdGl2ZSgpe3JldHVybiB0aGlzLl90aW1lciE9bnVsbH1zdGF0aWMgZGVib3VuY2UodCxyLG4pe3JldHVybiB0IGluc3RhbmNlb2Ygc3I/dC5fY2FuY2VsQXN5bmMoKTp0PW5ldyBzcix0LnNldENvbmZpZyhyLG4pLHR9fSxyRT1uZXcgU2V0LEpsPWZ1bmN0aW9uKGUpe3JFLmFkZChlKX0sV210PWZ1bmN0aW9uKCl7bGV0IGU9Qm9vbGVhbihyRS5zaXplKTtyZXR1cm4gckUuZm9yRWFjaCh0PT57dHJ5e3QuZmx1c2goKX1jYXRjaChyKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgcn0pfX0pLGV9O3ZhciBGRz10eXBlb2YgZG9jdW1lbnQuaGVhZC5zdHlsZS50b3VjaEFjdGlvbj09InN0cmluZyIsdDk9Il9fcG9seW1lckdlc3R1cmVzIixRST0iX19wb2x5bWVyR2VzdHVyZXNIYW5kbGVkIixPRz0iX19wb2x5bWVyR2VzdHVyZXNUb3VjaEFjdGlvbiIsWW10PTI1LGptdD01LEp2ZT0yLFF2ZT0yNTAwLEptdD1bIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJjbGljayJdLHR4ZT1bMCwxLDQsMl0sZXhlPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgTW91c2VFdmVudCgidGVzdCIse2J1dHRvbnM6MX0pLmJ1dHRvbnM9PT0xfWNhdGNoKGUpe3JldHVybiExfX0oKTtmdW5jdGlvbiBCRyhlKXtyZXR1cm4gSm10LmluZGV4T2YoZSk+LTF9dmFyIEhHPSExOyhmdW5jdGlvbigpe3RyeXtsZXQgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQoKXtIRz0hMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxlKX1jYXRjaChlKXt9fSkoKTtmdW5jdGlvbiBRbXQoZSl7aWYoIShCRyhlKXx8ZT09PSJ0b3VjaGVuZCIpJiZGRyYmSEcmJlVkdClyZXR1cm57cGFzc2l2ZTohMH19dmFyIHRndD1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OltvYV1kfGhvbmUpfEFuZHJvaWQvKSx6Rz1bXSxyeGU9e2J1dHRvbjohMCxpbnB1dDohMCxrZXlnZW46ITAsbWV0ZXI6ITAsb3V0cHV0OiEwLHRleHRhcmVhOiEwLHByb2dyZXNzOiEwLHNlbGVjdDohMH0sbnhlPXtidXR0b246ITAsY29tbWFuZDohMCxmaWVsZHNldDohMCxpbnB1dDohMCxrZXlnZW46ITAsb3B0Z3JvdXA6ITAsb3B0aW9uOiEwLHNlbGVjdDohMCx0ZXh0YXJlYTohMH07ZnVuY3Rpb24gaXhlKGUpe3JldHVybiByeGVbZS5sb2NhbE5hbWVdfHwhMX1mdW5jdGlvbiBveGUoZSl7bGV0IHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5sYWJlbHN8fFtdKTtpZighdC5sZW5ndGgpe3Q9W107bGV0IHI9ZS5nZXRSb290Tm9kZSgpO2lmKGUuaWQpe2xldCBuPXIucXVlcnlTZWxlY3RvckFsbChgbGFiZWxbZm9yID0gJHtlLmlkfV1gKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl0LnB1c2gobltpXSl9fXJldHVybiB0fXZhciBYbXQ9ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5zb3VyY2VDYXBhYmlsaXRpZXM7aWYoISh0JiYhdC5maXJlc1RvdWNoRXZlbnRzKSYmKGVbUUldPXtza2lwOiEwfSxlLnR5cGU9PT0iY2xpY2siKSl7bGV0IHI9ITEsbj1yOShlKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7aWYobltpXS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXtpZihuW2ldLmxvY2FsTmFtZT09PSJsYWJlbCIpekcucHVzaChuW2ldKTtlbHNlIGlmKGl4ZShuW2ldKSl7bGV0IG89b3hlKG5baV0pO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKXI9cnx8ekcuaW5kZXhPZihvW2FdKT4tMX19aWYobltpXT09PWlhLm1vdXNlLnRhcmdldClyZXR1cm59aWYocilyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCl9fTtmdW5jdGlvbiAkbXQoZSl7bGV0IHQ9dGd0P1siY2xpY2siXTpKbXQ7Zm9yKGxldCByPTAsbjtyPHQubGVuZ3RoO3IrKyluPXRbcl0sZT8oekcubGVuZ3RoPTAsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuLFhtdCwhMCkpOmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobixYbXQsITApfWZ1bmN0aW9uIGF4ZShlKXtpZighaEcpcmV0dXJuO2lhLm1vdXNlLm1vdXNlSWdub3JlSm9ifHwkbXQoITApO2xldCB0PWZ1bmN0aW9uKCl7JG10KCksaWEubW91c2UudGFyZ2V0PW51bGwsaWEubW91c2UubW91c2VJZ25vcmVKb2I9bnVsbH07aWEubW91c2UudGFyZ2V0PXI5KGUpWzBdLGlhLm1vdXNlLm1vdXNlSWdub3JlSm9iPXNyLmRlYm91bmNlKGlhLm1vdXNlLm1vdXNlSWdub3JlSm9iLG1vLmFmdGVyKFF2ZSksdCl9ZnVuY3Rpb24gcF8oZSl7bGV0IHQ9ZS50eXBlO2lmKCFCRyh0KSlyZXR1cm4hMTtpZih0PT09Im1vdXNlbW92ZSIpe2xldCByPWUuYnV0dG9ucz09PXZvaWQgMD8xOmUuYnV0dG9ucztyZXR1cm4gZSBpbnN0YW5jZW9mIHdpbmRvdy5Nb3VzZUV2ZW50JiYhZXhlJiYocj10eGVbZS53aGljaF18fDApLEJvb2xlYW4ociYxKX1lbHNlIHJldHVybihlLmJ1dHRvbj09PXZvaWQgMD8wOmUuYnV0dG9uKT09PTB9ZnVuY3Rpb24gc3hlKGUpe2lmKGUudHlwZT09PSJjbGljayIpe2lmKGUuZGV0YWlsPT09MClyZXR1cm4hMDtsZXQgdD1fcChlKTtpZighdC5ub2RlVHlwZXx8dC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiEwO2xldCByPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1lLnBhZ2VYLGk9ZS5wYWdlWTtyZXR1cm4hKG4+PXIubGVmdCYmbjw9ci5yaWdodCYmaT49ci50b3AmJmk8PXIuYm90dG9tKX1yZXR1cm4hMX12YXIgaWE9e21vdXNlOnt0YXJnZXQ6bnVsbCxtb3VzZUlnbm9yZUpvYjpudWxsfSx0b3VjaDp7eDowLHk6MCxpZDotMSxzY3JvbGxEZWNpZGVkOiExfX07ZnVuY3Rpb24gbHhlKGUpe2xldCB0PSJhdXRvIixyPXI5KGUpO2ZvcihsZXQgbj0wLGk7bjxyLmxlbmd0aDtuKyspaWYoaT1yW25dLGlbT0ddKXt0PWlbT0ddO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGVndChlLHQscil7ZS5tb3ZlZm49dCxlLnVwZm49cixkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHQpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHIpfWZ1bmN0aW9uIEZ4KGUpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsZS5tb3ZlZm4pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGUudXBmbiksZS5tb3ZlZm49bnVsbCxlLnVwZm49bnVsbH1oRyYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGF4ZSxIRz97cGFzc2l2ZTohMH06ITEpO3ZhciByOT13aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5ub1BhdGNoP3dpbmRvdy5TaGFkeURPTS5jb21wb3NlZFBhdGg6ZT0+ZS5jb21wb3NlZFBhdGgmJmUuY29tcG9zZWRQYXRoKCl8fFtdLGlFPXt9LGZfPVtdO2Z1bmN0aW9uIGN4ZShlLHQpe2xldCByPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZSx0KSxuPXI7Zm9yKDtuJiZuLnNoYWRvd1Jvb3QmJiF3aW5kb3cuU2hhZHlET007KXtsZXQgaT1uO2lmKG49bi5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQoZSx0KSxpPT09bilicmVhaztuJiYocj1uKX1yZXR1cm4gcn1mdW5jdGlvbiBfcChlKXtsZXQgdD1yOShlKTtyZXR1cm4gdC5sZW5ndGg+MD90WzBdOmUudGFyZ2V0fWZ1bmN0aW9uIHJndChlKXtsZXQgdCxyPWUudHlwZSxpPWUuY3VycmVudFRhcmdldFt0OV07aWYoIWkpcmV0dXJuO2xldCBvPWlbcl07aWYoISFvKXtpZighZVtRSV0mJihlW1FJXT17fSxyLnNsaWNlKDAsNSk9PT0idG91Y2giKSl7ZT1lO2xldCBhPWUuY2hhbmdlZFRvdWNoZXNbMF07aWYocj09PSJ0b3VjaHN0YXJ0IiYmZS50b3VjaGVzLmxlbmd0aD09PTEmJihpYS50b3VjaC5pZD1hLmlkZW50aWZpZXIpLGlhLnRvdWNoLmlkIT09YS5pZGVudGlmaWVyKXJldHVybjtGR3x8KHI9PT0idG91Y2hzdGFydCJ8fHI9PT0idG91Y2htb3ZlIikmJnV4ZShlKX1pZih0PWVbUUldLCF0LnNraXApe2ZvcihsZXQgYT0wLHM7YTxmXy5sZW5ndGg7YSsrKXM9Zl9bYV0sb1tzLm5hbWVdJiYhdFtzLm5hbWVdJiZzLmZsb3cmJnMuZmxvdy5zdGFydC5pbmRleE9mKGUudHlwZSk+LTEmJnMucmVzZXQmJnMucmVzZXQoKTtmb3IobGV0IGE9MCxzO2E8Zl8ubGVuZ3RoO2ErKylzPWZfW2FdLG9bcy5uYW1lXSYmIXRbcy5uYW1lXSYmKHRbcy5uYW1lXT0hMCxzW3JdKGUpKX19fWZ1bmN0aW9uIHV4ZShlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdLHI9ZS50eXBlO2lmKHI9PT0idG91Y2hzdGFydCIpaWEudG91Y2gueD10LmNsaWVudFgsaWEudG91Y2gueT10LmNsaWVudFksaWEudG91Y2guc2Nyb2xsRGVjaWRlZD0hMTtlbHNlIGlmKHI9PT0idG91Y2htb3ZlIil7aWYoaWEudG91Y2guc2Nyb2xsRGVjaWRlZClyZXR1cm47aWEudG91Y2guc2Nyb2xsRGVjaWRlZD0hMDtsZXQgbj1seGUoZSksaT0hMSxvPU1hdGguYWJzKGlhLnRvdWNoLngtdC5jbGllbnRYKSxhPU1hdGguYWJzKGlhLnRvdWNoLnktdC5jbGllbnRZKTtlLmNhbmNlbGFibGUmJihuPT09Im5vbmUiP2k9ITA6bj09PSJwYW4teCI/aT1hPm86bj09PSJwYW4teSImJihpPW8+YSkpLGk/ZS5wcmV2ZW50RGVmYXVsdCgpOmU5KCJ0cmFjayIpfX1mdW5jdGlvbiBFbShlLHQscil7cmV0dXJuIGlFW3RdPyhoeGUoZSx0LHIpLCEwKTohMX1mdW5jdGlvbiBuZ3QoZSx0LHIpe3JldHVybiBpRVt0XT8oZnhlKGUsdCxyKSwhMCk6ITF9ZnVuY3Rpb24gaHhlKGUsdCxyKXtsZXQgbj1pRVt0XSxpPW4uZGVwcyxvPW4ubmFtZSxhPWVbdDldO2F8fChlW3Q5XT1hPXt9KTtmb3IobGV0IHM9MCxsLGM7czxpLmxlbmd0aDtzKyspbD1pW3NdLCEodGd0JiZCRyhsKSYmbCE9PSJjbGljayIpJiYoYz1hW2xdLGN8fChhW2xdPWM9e19jb3VudDowfSksYy5fY291bnQ9PT0wJiZlLmFkZEV2ZW50TGlzdGVuZXIobCxyZ3QsUW10KGwpKSxjW29dPShjW29dfHwwKSsxLGMuX2NvdW50PShjLl9jb3VudHx8MCkrMSk7ZS5hZGRFdmVudExpc3RlbmVyKHQsciksbi50b3VjaEFjdGlvbiYmZF8oZSxuLnRvdWNoQWN0aW9uKX1mdW5jdGlvbiBmeGUoZSx0LHIpe2xldCBuPWlFW3RdLGk9bi5kZXBzLG89bi5uYW1lLGE9ZVt0OV07aWYoYSlmb3IobGV0IHM9MCxsLGM7czxpLmxlbmd0aDtzKyspbD1pW3NdLGM9YVtsXSxjJiZjW29dJiYoY1tvXT0oY1tvXXx8MSktMSxjLl9jb3VudD0oYy5fY291bnR8fDEpLTEsYy5fY291bnQ9PT0wJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxyZ3QsUW10KGwpKSk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKHQscil9ZnVuY3Rpb24gVkcoZSl7Zl8ucHVzaChlKTtmb3IobGV0IHQ9MDt0PGUuZW1pdHMubGVuZ3RoO3QrKylpRVtlLmVtaXRzW3RdXT1lfWZ1bmN0aW9uIHB4ZShlKXtmb3IobGV0IHQ9MCxyO3Q8Zl8ubGVuZ3RoO3QrKyl7cj1mX1t0XTtmb3IobGV0IG49MCxpO248ci5lbWl0cy5sZW5ndGg7bisrKWlmKGk9ci5lbWl0c1tuXSxpPT09ZSlyZXR1cm4gcn1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkXyhlLHQpe0ZHJiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmNpLnJ1bigoKT0+e2Uuc3R5bGUudG91Y2hBY3Rpb249dH0pLGVbT0ddPXR9ZnVuY3Rpb24gVUcoZSx0LHIpe2xldCBuPW5ldyBFdmVudCh0LHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTtpZihuLmRldGFpbD1yLHVlKGUpLmRpc3BhdGNoRXZlbnQobiksbi5kZWZhdWx0UHJldmVudGVkKXtsZXQgaT1yLnByZXZlbnRlcnx8ci5zb3VyY2VFdmVudDtpJiZpLnByZXZlbnREZWZhdWx0JiZpLnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIGU5KGUpe2xldCB0PXB4ZShlKTt0LmluZm8mJih0LmluZm8ucHJldmVudD0hMCl9Vkcoe25hbWU6ImRvd251cCIsZGVwczpbIm1vdXNlZG93biIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbIm1vdXNldXAiLCJ0b3VjaGVuZCJdfSxlbWl0czpbImRvd24iLCJ1cCJdLGluZm86e21vdmVmbjpudWxsLHVwZm46bnVsbH0scmVzZXQ6ZnVuY3Rpb24oKXtGeCh0aGlzLmluZm8pfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoIXBfKGUpKXJldHVybjtsZXQgdD1fcChlKSxyPXRoaXMsbj1mdW5jdGlvbihhKXtwXyhhKXx8KG5FKCJ1cCIsdCxhKSxGeChyLmluZm8pKX0saT1mdW5jdGlvbihhKXtwXyhhKSYmbkUoInVwIix0LGEpLEZ4KHIuaW5mbyl9O2VndCh0aGlzLmluZm8sbixpKSxuRSgiZG93biIsdCxlKX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtuRSgiZG93biIsX3AoZSksZS5jaGFuZ2VkVG91Y2hlc1swXSxlKX0sdG91Y2hlbmQ6ZnVuY3Rpb24oZSl7bkUoInVwIixfcChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpfX0pO2Z1bmN0aW9uIG5FKGUsdCxyLG4peyF0fHxVRyh0LGUse3g6ci5jbGllbnRYLHk6ci5jbGllbnRZLHNvdXJjZUV2ZW50OnIscHJldmVudGVyOm4scHJldmVudDpmdW5jdGlvbihpKXtyZXR1cm4gZTkoaSl9fSl9Vkcoe25hbWU6InRyYWNrIix0b3VjaEFjdGlvbjoibm9uZSIsZGVwczpbIm1vdXNlZG93biIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCJdLGZsb3c6e3N0YXJ0OlsibW91c2Vkb3duIiwidG91Y2hzdGFydCJdLGVuZDpbIm1vdXNldXAiLCJ0b3VjaGVuZCJdfSxlbWl0czpbInRyYWNrIl0saW5mbzp7eDowLHk6MCxzdGF0ZToic3RhcnQiLHN0YXJ0ZWQ6ITEsbW92ZXM6W10sYWRkTW92ZTpmdW5jdGlvbihlKXt0aGlzLm1vdmVzLmxlbmd0aD5KdmUmJnRoaXMubW92ZXMuc2hpZnQoKSx0aGlzLm1vdmVzLnB1c2goZSl9LG1vdmVmbjpudWxsLHVwZm46bnVsbCxwcmV2ZW50OiExfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby5zdGF0ZT0ic3RhcnQiLHRoaXMuaW5mby5zdGFydGVkPSExLHRoaXMuaW5mby5tb3Zlcz1bXSx0aGlzLmluZm8ueD0wLHRoaXMuaW5mby55PTAsdGhpcy5pbmZvLnByZXZlbnQ9ITEsRngodGhpcy5pbmZvKX0sbW91c2Vkb3duOmZ1bmN0aW9uKGUpe2lmKCFwXyhlKSlyZXR1cm47bGV0IHQ9X3AoZSkscj10aGlzLG49ZnVuY3Rpb24oYSl7bGV0IHM9YS5jbGllbnRYLGw9YS5jbGllbnRZO0ttdChyLmluZm8scyxsKSYmKHIuaW5mby5zdGF0ZT1yLmluZm8uc3RhcnRlZD9hLnR5cGU9PT0ibW91c2V1cCI/ImVuZCI6InRyYWNrIjoic3RhcnQiLHIuaW5mby5zdGF0ZT09PSJzdGFydCImJmU5KCJ0YXAiKSxyLmluZm8uYWRkTW92ZSh7eDpzLHk6bH0pLHBfKGEpfHwoci5pbmZvLnN0YXRlPSJlbmQiLEZ4KHIuaW5mbykpLHQmJkRHKHIuaW5mbyx0LGEpLHIuaW5mby5zdGFydGVkPSEwKX0saT1mdW5jdGlvbihhKXtyLmluZm8uc3RhcnRlZCYmbihhKSxGeChyLmluZm8pfTtlZ3QodGhpcy5pbmZvLG4saSksdGhpcy5pbmZvLng9ZS5jbGllbnRYLHRoaXMuaW5mby55PWUuY2xpZW50WX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXtsZXQgdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PXQuY2xpZW50WCx0aGlzLmluZm8ueT10LmNsaWVudFl9LHRvdWNobW92ZTpmdW5jdGlvbihlKXtsZXQgdD1fcChlKSxyPWUuY2hhbmdlZFRvdWNoZXNbMF0sbj1yLmNsaWVudFgsaT1yLmNsaWVudFk7S210KHRoaXMuaW5mbyxuLGkpJiYodGhpcy5pbmZvLnN0YXRlPT09InN0YXJ0IiYmZTkoInRhcCIpLHRoaXMuaW5mby5hZGRNb3ZlKHt4Om4seTppfSksREcodGhpcy5pbmZvLHQsciksdGhpcy5pbmZvLnN0YXRlPSJ0cmFjayIsdGhpcy5pbmZvLnN0YXJ0ZWQ9ITApfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtsZXQgdD1fcChlKSxyPWUuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5pbmZvLnN0YXJ0ZWQmJih0aGlzLmluZm8uc3RhdGU9ImVuZCIsdGhpcy5pbmZvLmFkZE1vdmUoe3g6ci5jbGllbnRYLHk6ci5jbGllbnRZfSksREcodGhpcy5pbmZvLHQscikpfX0pO2Z1bmN0aW9uIEttdChlLHQscil7aWYoZS5wcmV2ZW50KXJldHVybiExO2lmKGUuc3RhcnRlZClyZXR1cm4hMDtsZXQgbj1NYXRoLmFicyhlLngtdCksaT1NYXRoLmFicyhlLnktcik7cmV0dXJuIG4+PWptdHx8aT49am10fWZ1bmN0aW9uIERHKGUsdCxyKXtpZighdClyZXR1cm47bGV0IG49ZS5tb3Zlc1tlLm1vdmVzLmxlbmd0aC0yXSxpPWUubW92ZXNbZS5tb3Zlcy5sZW5ndGgtMV0sbz1pLngtZS54LGE9aS55LWUueSxzLGw9MDtuJiYocz1pLngtbi54LGw9aS55LW4ueSksVUcodCwidHJhY2siLHtzdGF0ZTplLnN0YXRlLHg6ci5jbGllbnRYLHk6ci5jbGllbnRZLGR4Om8sZHk6YSxkZHg6cyxkZHk6bCxzb3VyY2VFdmVudDpyLGhvdmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGN4ZShyLmNsaWVudFgsci5jbGllbnRZKX19KX1WRyh7bmFtZToidGFwIixkZXBzOlsibW91c2Vkb3duIiwiY2xpY2siLCJ0b3VjaHN0YXJ0IiwidG91Y2hlbmQiXSxmbG93OntzdGFydDpbIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxlbmQ6WyJjbGljayIsInRvdWNoZW5kIl19LGVtaXRzOlsidGFwIl0saW5mbzp7eDpOYU4seTpOYU4scHJldmVudDohMX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmluZm8ueD1OYU4sdGhpcy5pbmZvLnk9TmFOLHRoaXMuaW5mby5wcmV2ZW50PSExfSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7cF8oZSkmJih0aGlzLmluZm8ueD1lLmNsaWVudFgsdGhpcy5pbmZvLnk9ZS5jbGllbnRZKX0sY2xpY2s6ZnVuY3Rpb24oZSl7cF8oZSkmJlptdCh0aGlzLmluZm8sZSl9LHRvdWNoc3RhcnQ6ZnVuY3Rpb24oZSl7bGV0IHQ9ZS5jaGFuZ2VkVG91Y2hlc1swXTt0aGlzLmluZm8ueD10LmNsaWVudFgsdGhpcy5pbmZvLnk9dC5jbGllbnRZfSx0b3VjaGVuZDpmdW5jdGlvbihlKXtabXQodGhpcy5pbmZvLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSl9fSk7ZnVuY3Rpb24gWm10KGUsdCxyKXtsZXQgbj1NYXRoLmFicyh0LmNsaWVudFgtZS54KSxpPU1hdGguYWJzKHQuY2xpZW50WS1lLnkpLG89X3Aocnx8dCk7IW98fG54ZVtvLmxvY2FsTmFtZV0mJm8uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfHwoaXNOYU4obil8fGlzTmFOKGkpfHxuPD1ZbXQmJmk8PVltdHx8c3hlKHQpKSYmKGUucHJldmVudHx8VUcobywidGFwIix7eDp0LmNsaWVudFgseTp0LmNsaWVudFksc291cmNlRXZlbnQ6dCxwcmV2ZW50ZXI6cn0pKX12YXIgaWd0PV9wO3ZhciB5aD1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7X2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8pe0VtKG4saSxvKXx8c3VwZXIuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUobixpLG8pfV9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobixpLG8pe25ndChuLGksbyl8fHN1cGVyLl9yZW1vdmVFdmVudExpc3RlbmVyRnJvbU5vZGUobixpLG8pfX1yZXR1cm4gdH0pO3ZhciBkeGU9Lzpob3N0XCg6ZGlyXCgobHRyfHJ0bClcKVwpL2csbXhlPSc6aG9zdChbZGlyPSIkMSJdKScsZ3hlPS8oW1xzXHctI1wuXFtcXVwqXSopOmRpclwoKGx0cnxydGwpXCkvZyxfeGU9Jzpob3N0KFtkaXI9IiQyIl0pICQxJyx5eGU9LzpkaXJcKCg/Omx0cnxydGwpXCkvLGFndD1Cb29sZWFuKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlKSxvRT1bXSxhRT1udWxsLHFHPSIiO2Z1bmN0aW9uIHNndCgpe3FHPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpfWZ1bmN0aW9uIGxndChlKXtlLl9fYXV0b0Rpck9wdE91dHx8ZS5zZXRBdHRyaWJ1dGUoImRpciIscUcpfWZ1bmN0aW9uIGNndCgpe3NndCgpLHFHPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2ZvcihsZXQgZT0wO2U8b0UubGVuZ3RoO2UrKylsZ3Qob0VbZV0pfWZ1bmN0aW9uIHZ4ZSgpe2FFJiZhRS50YWtlUmVjb3JkcygpLmxlbmd0aCYmY2d0KCl9dmFyIHVndD1ObihlPT57YWd0fHxhRXx8KHNndCgpLGFFPW5ldyBNdXRhdGlvbk9ic2VydmVyKGNndCksYUUub2JzZXJ2ZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQse2F0dHJpYnV0ZXM6ITAsYXR0cmlidXRlRmlsdGVyOlsiZGlyIl19KSk7bGV0IHQ9QkkoZSk7Y2xhc3MgciBleHRlbmRzIHR7c3RhdGljIF9wcm9jZXNzU3R5bGVUZXh0KGksbyl7cmV0dXJuIGk9dC5fcHJvY2Vzc1N0eWxlVGV4dC5jYWxsKHRoaXMsaSxvKSwhYWd0JiZ5eGUudGVzdChpKSYmKGk9dGhpcy5fcmVwbGFjZURpckluQ3NzVGV4dChpKSx0aGlzLl9fYWN0aXZhdGVEaXI9ITApLGl9c3RhdGljIF9yZXBsYWNlRGlySW5Dc3NUZXh0KGkpe2xldCBvPWk7cmV0dXJuIG89by5yZXBsYWNlKGR4ZSxteGUpLG89by5yZXBsYWNlKGd4ZSxfeGUpLG99Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19hdXRvRGlyT3B0T3V0PSExfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9fYXV0b0Rpck9wdE91dD10aGlzLmhhc0F0dHJpYnV0ZSgiZGlyIil9Y29ubmVjdGVkQ2FsbGJhY2soKXt0LnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmNvbnN0cnVjdG9yLl9fYWN0aXZhdGVEaXImJih2eGUoKSxvRS5wdXNoKHRoaXMpLGxndCh0aGlzKSl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXtpZih0LnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjayYmc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmNvbnN0cnVjdG9yLl9fYWN0aXZhdGVEaXIpe2xldCBpPW9FLmluZGV4T2YodGhpcyk7aT4tMSYmb0Uuc3BsaWNlKGksMSl9fX1yZXR1cm4gci5fX2FjdGl2YXRlRGlyPSExLHJ9KTt2YXIgbjk9ITEsaGd0PVtdLGZndD1bXTtmdW5jdGlvbiBwZ3QoKXtuOT0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtuOT0hMSx4eGUoaGd0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YnhlKGZndCl9KX0pfWZ1bmN0aW9uIHh4ZShlKXtmb3IoO2UubGVuZ3RoOylkZ3QoZS5zaGlmdCgpKX1mdW5jdGlvbiBieGUoZSl7Zm9yKGxldCB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKWRndChlLnNoaWZ0KCkpfWZ1bmN0aW9uIGRndChlKXtsZXQgdD1lWzBdLHI9ZVsxXSxuPWVbMl07dHJ5e3IuYXBwbHkodCxuKX1jYXRjaChpKXtzZXRUaW1lb3V0KCgpPT57dGhyb3cgaX0pfX1mdW5jdGlvbiBtZ3QoZSx0LHIpe245fHxwZ3QoKSxoZ3QucHVzaChbZSx0LHJdKX1mdW5jdGlvbiBUbShlLHQscil7bjl8fHBndCgpLGZndC5wdXNoKFtlLHQscl0pfWZ1bmN0aW9uIGdndCgpe2RvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKCJ1bnJlc29sdmVkIil9ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJpbnRlcmFjdGl2ZSJ8fGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiP2dndCgpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixnZ3QpO2Z1bmN0aW9uIHNFKGUsdCxyKXtyZXR1cm57aW5kZXg6ZSxyZW1vdmVkOnQsYWRkZWRDb3VudDpyfX12YXIgX2d0PTAseWd0PTEsR0c9MixXRz0zO2Z1bmN0aW9uIHd4ZShlLHQscixuLGksbyl7bGV0IGE9by1pKzEscz1yLXQrMSxsPW5ldyBBcnJheShhKTtmb3IobGV0IGM9MDtjPGE7YysrKWxbY109bmV3IEFycmF5KHMpLGxbY11bMF09Yztmb3IobGV0IGM9MDtjPHM7YysrKWxbMF1bY109Yztmb3IobGV0IGM9MTtjPGE7YysrKWZvcihsZXQgdT0xO3U8czt1KyspaWYoWUcoZVt0K3UtMV0sbltpK2MtMV0pKWxbY11bdV09bFtjLTFdW3UtMV07ZWxzZXtsZXQgaD1sW2MtMV1bdV0rMSxmPWxbY11bdS0xXSsxO2xbY11bdV09aDxmP2g6Zn1yZXR1cm4gbH1mdW5jdGlvbiBTeGUoZSl7bGV0IHQ9ZS5sZW5ndGgtMSxyPWVbMF0ubGVuZ3RoLTEsbj1lW3RdW3JdLGk9W107Zm9yKDt0PjB8fHI+MDspe2lmKHQ9PTApe2kucHVzaChHRyksci0tO2NvbnRpbnVlfWlmKHI9PTApe2kucHVzaChXRyksdC0tO2NvbnRpbnVlfWxldCBvPWVbdC0xXVtyLTFdLGE9ZVt0LTFdW3JdLHM9ZVt0XVtyLTFdLGw7YTxzP2w9YTxvP2E6bzpsPXM8bz9zOm8sbD09bz8obz09bj9pLnB1c2goX2d0KTooaS5wdXNoKHlndCksbj1vKSx0LS0sci0tKTpsPT1hPyhpLnB1c2goV0cpLHQtLSxuPWEpOihpLnB1c2goR0cpLHItLSxuPXMpfXJldHVybiBpLnJldmVyc2UoKSxpfWZ1bmN0aW9uIE14ZShlLHQscixuLGksbyl7bGV0IGE9MCxzPTAsbCxjPU1hdGgubWluKHItdCxvLWkpO2lmKHQ9PTAmJmk9PTAmJihhPUV4ZShlLG4sYykpLHI9PWUubGVuZ3RoJiZvPT1uLmxlbmd0aCYmKHM9VHhlKGUsbixjLWEpKSx0Kz1hLGkrPWEsci09cyxvLT1zLHItdD09MCYmby1pPT0wKXJldHVybltdO2lmKHQ9PXIpe2ZvcihsPXNFKHQsW10sMCk7aTxvOylsLnJlbW92ZWQucHVzaChuW2krK10pO3JldHVybltsXX1lbHNlIGlmKGk9PW8pcmV0dXJuW3NFKHQsW10sci10KV07bGV0IHU9U3hlKHd4ZShlLHQscixuLGksbykpO2w9dm9pZCAwO2xldCBoPVtdLGY9dCxwPWk7Zm9yKGxldCBkPTA7ZDx1Lmxlbmd0aDtkKyspc3dpdGNoKHVbZF0pe2Nhc2UgX2d0OmwmJihoLnB1c2gobCksbD12b2lkIDApLGYrKyxwKys7YnJlYWs7Y2FzZSB5Z3Q6bHx8KGw9c0UoZixbXSwwKSksbC5hZGRlZENvdW50KyssZisrLGwucmVtb3ZlZC5wdXNoKG5bcF0pLHArKzticmVhaztjYXNlIEdHOmx8fChsPXNFKGYsW10sMCkpLGwuYWRkZWRDb3VudCsrLGYrKzticmVhaztjYXNlIFdHOmx8fChsPXNFKGYsW10sMCkpLGwucmVtb3ZlZC5wdXNoKG5bcF0pLHArKzticmVha31yZXR1cm4gbCYmaC5wdXNoKGwpLGh9ZnVuY3Rpb24gRXhlKGUsdCxyKXtmb3IobGV0IG49MDtuPHI7bisrKWlmKCFZRyhlW25dLHRbbl0pKXJldHVybiBuO3JldHVybiByfWZ1bmN0aW9uIFR4ZShlLHQscil7bGV0IG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPTA7Zm9yKDtvPHImJllHKGVbLS1uXSx0Wy0taV0pOylvKys7cmV0dXJuIG99ZnVuY3Rpb24gaTkoZSx0KXtyZXR1cm4gTXhlKGUsMCxlLmxlbmd0aCx0LDAsdC5sZW5ndGgpfWZ1bmN0aW9uIFlHKGUsdCl7cmV0dXJuIGU9PT10fWZ1bmN0aW9uIEJ4KGUpe3JldHVybiBlLmxvY2FsTmFtZT09PSJzbG90In12YXIgdmg9Y2xhc3N7c3RhdGljIGdldEZsYXR0ZW5lZE5vZGVzKGUpe2xldCB0PXVlKGUpO3JldHVybiBCeChlKT8oZT1lLHQuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pKTpBcnJheS5mcm9tKHQuY2hpbGROb2RlcykubWFwKHI9PkJ4KHIpPyhyPXIsdWUocikuYXNzaWduZWROb2Rlcyh7ZmxhdHRlbjohMH0pKTpbcl0pLnJlZHVjZSgocixuKT0+ci5jb25jYXQobiksW10pfWNvbnN0cnVjdG9yKGUsdCl7dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwsdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj1udWxsLHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzLl90YXJnZXQ9ZSx0aGlzLmNhbGxiYWNrPXQsdGhpcy5fZWZmZWN0aXZlTm9kZXM9W10sdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9zY2hlZHVsZWQ9ITEsdGhpcy5fYm91bmRTY2hlZHVsZT0oKT0+e3RoaXMuX3NjaGVkdWxlKCl9LHRoaXMuY29ubmVjdCgpLHRoaXMuX3NjaGVkdWxlKCl9Y29ubmVjdCgpe0J4KHRoaXMuX3RhcmdldCk/dGhpcy5fbGlzdGVuU2xvdHMoW3RoaXMuX3RhcmdldF0pOnVlKHRoaXMuX3RhcmdldCkuY2hpbGRyZW4mJih0aGlzLl9saXN0ZW5TbG90cyh1ZSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuKSx3aW5kb3cuU2hhZHlET00/dGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPXdpbmRvdy5TaGFkeURPTS5vYnNlcnZlQ2hpbGRyZW4odGhpcy5fdGFyZ2V0LGU9Pnt0aGlzLl9wcm9jZXNzTXV0YXRpb25zKGUpfSk6KHRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZT0+e3RoaXMuX3Byb2Nlc3NNdXRhdGlvbnMoZSl9KSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLm9ic2VydmUodGhpcy5fdGFyZ2V0LHtjaGlsZExpc3Q6ITB9KSkpLHRoaXMuX2Nvbm5lY3RlZD0hMH1kaXNjb25uZWN0KCl7QngodGhpcy5fdGFyZ2V0KT90aGlzLl91bmxpc3RlblNsb3RzKFt0aGlzLl90YXJnZXRdKTp1ZSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuJiYodGhpcy5fdW5saXN0ZW5TbG90cyh1ZSh0aGlzLl90YXJnZXQpLmNoaWxkcmVuKSx3aW5kb3cuU2hhZHlET00mJnRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlcj8od2luZG93LlNoYWR5RE9NLnVub2JzZXJ2ZUNoaWxkcmVuKHRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciksdGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyPW51bGwpOnRoaXMuX25hdGl2ZUNoaWxkcmVuT2JzZXJ2ZXImJih0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyPW51bGwpKSx0aGlzLl9jb25uZWN0ZWQ9ITF9X3NjaGVkdWxlKCl7dGhpcy5fc2NoZWR1bGVkfHwodGhpcy5fc2NoZWR1bGVkPSEwLGNpLnJ1bigoKT0+dGhpcy5mbHVzaCgpKSl9X3Byb2Nlc3NNdXRhdGlvbnMoZSl7dGhpcy5fcHJvY2Vzc1Nsb3RNdXRhdGlvbnMoZSksdGhpcy5mbHVzaCgpfV9wcm9jZXNzU2xvdE11dGF0aW9ucyhlKXtpZihlKWZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgcj1lW3RdO3IuYWRkZWROb2RlcyYmdGhpcy5fbGlzdGVuU2xvdHMoci5hZGRlZE5vZGVzKSxyLnJlbW92ZWROb2RlcyYmdGhpcy5fdW5saXN0ZW5TbG90cyhyLnJlbW92ZWROb2Rlcyl9fWZsdXNoKCl7aWYoIXRoaXMuX2Nvbm5lY3RlZClyZXR1cm4hMTt3aW5kb3cuU2hhZHlET00mJlNoYWR5RE9NLmZsdXNoKCksdGhpcy5fbmF0aXZlQ2hpbGRyZW5PYnNlcnZlcj90aGlzLl9wcm9jZXNzU2xvdE11dGF0aW9ucyh0aGlzLl9uYXRpdmVDaGlsZHJlbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpOnRoaXMuX3NoYWR5Q2hpbGRyZW5PYnNlcnZlciYmdGhpcy5fcHJvY2Vzc1Nsb3RNdXRhdGlvbnModGhpcy5fc2hhZHlDaGlsZHJlbk9ic2VydmVyLnRha2VSZWNvcmRzKCkpLHRoaXMuX3NjaGVkdWxlZD0hMTtsZXQgZT17dGFyZ2V0OnRoaXMuX3RhcmdldCxhZGRlZE5vZGVzOltdLHJlbW92ZWROb2RlczpbXX0sdD10aGlzLmNvbnN0cnVjdG9yLmdldEZsYXR0ZW5lZE5vZGVzKHRoaXMuX3RhcmdldCkscj1pOSh0LHRoaXMuX2VmZmVjdGl2ZU5vZGVzKTtmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKylmb3IobGV0IGE9MCxzO2E8by5yZW1vdmVkLmxlbmd0aCYmKHM9by5yZW1vdmVkW2FdKTthKyspZS5yZW1vdmVkTm9kZXMucHVzaChzKTtmb3IobGV0IGk9MCxvO2k8ci5sZW5ndGgmJihvPXJbaV0pO2krKylmb3IobGV0IGE9by5pbmRleDthPG8uaW5kZXgrby5hZGRlZENvdW50O2ErKyllLmFkZGVkTm9kZXMucHVzaCh0W2FdKTt0aGlzLl9lZmZlY3RpdmVOb2Rlcz10O2xldCBuPSExO3JldHVybihlLmFkZGVkTm9kZXMubGVuZ3RofHxlLnJlbW92ZWROb2Rlcy5sZW5ndGgpJiYobj0hMCx0aGlzLmNhbGxiYWNrLmNhbGwodGhpcy5fdGFyZ2V0LGUpKSxufV9saXN0ZW5TbG90cyhlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtCeChyKSYmci5hZGRFdmVudExpc3RlbmVyKCJzbG90Y2hhbmdlIix0aGlzLl9ib3VuZFNjaGVkdWxlKX19X3VubGlzdGVuU2xvdHMoZSl7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspe2xldCByPWVbdF07QngocikmJnIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2xvdGNoYW5nZSIsdGhpcy5fYm91bmRTY2hlZHVsZSl9fX07dmFyIHVpPWZ1bmN0aW9uKCl7bGV0IGUsdDtkbyBlPXdpbmRvdy5TaGFkeURPTSYmU2hhZHlET00uZmx1c2goKSx3aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSYmd2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltLmZsdXNoKCksdD1XbXQoKTt3aGlsZShlfHx0KX07dmFyIEh4PUVsZW1lbnQucHJvdG90eXBlLEN4ZT1IeC5tYXRjaGVzfHxIeC5tYXRjaGVzU2VsZWN0b3J8fEh4Lm1vek1hdGNoZXNTZWxlY3Rvcnx8SHgubXNNYXRjaGVzU2VsZWN0b3J8fEh4Lm9NYXRjaGVzU2VsZWN0b3J8fEh4LndlYmtpdE1hdGNoZXNTZWxlY3RvcixYRz1mdW5jdGlvbihlLHQpe3JldHVybiBDeGUuY2FsbChlLHQpfSxLcj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5pblVzZSYmd2luZG93LlNoYWR5RE9NLnBhdGNoKHQpLHRoaXMubm9kZT10fW9ic2VydmVOb2Rlcyh0KXtyZXR1cm4gbmV3IHZoKHRoaXMubm9kZSx0KX11bm9ic2VydmVOb2Rlcyh0KXt0LmRpc2Nvbm5lY3QoKX1ub3RpZnlPYnNlcnZlcigpe31kZWVwQ29udGFpbnModCl7aWYodWUodGhpcy5ub2RlKS5jb250YWlucyh0KSlyZXR1cm4hMDtsZXQgcj10LG49dC5vd25lckRvY3VtZW50O2Zvcig7ciYmciE9PW4mJnIhPT10aGlzLm5vZGU7KXI9dWUocikucGFyZW50Tm9kZXx8dWUocikuaG9zdDtyZXR1cm4gcj09PXRoaXMubm9kZX1nZXRPd25lclJvb3QoKXtyZXR1cm4gdWUodGhpcy5ub2RlKS5nZXRSb290Tm9kZSgpfWdldERpc3RyaWJ1dGVkTm9kZXMoKXtyZXR1cm4gdGhpcy5ub2RlLmxvY2FsTmFtZT09PSJzbG90Ij91ZSh0aGlzLm5vZGUpLmFzc2lnbmVkTm9kZXMoe2ZsYXR0ZW46ITB9KTpbXX1nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpe2xldCB0PVtdLHI9dWUodGhpcy5ub2RlKS5hc3NpZ25lZFNsb3Q7Zm9yKDtyOyl0LnB1c2gocikscj11ZShyKS5hc3NpZ25lZFNsb3Q7cmV0dXJuIHR9aW1wb3J0Tm9kZSh0LHIpe2xldCBuPXRoaXMubm9kZSBpbnN0YW5jZW9mIERvY3VtZW50P3RoaXMubm9kZTp0aGlzLm5vZGUub3duZXJEb2N1bWVudDtyZXR1cm4gdWUobikuaW1wb3J0Tm9kZSh0LHIpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4gdmguZ2V0RmxhdHRlbmVkTm9kZXModGhpcy5ub2RlKX1xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModCl7bGV0IHI9dGhpcy5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCksbj1bXTtmb3IobGV0IGk9MCxvPXIubGVuZ3RoLGE7aTxvJiYoYT1yW2ldKTtpKyspYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZYRyhhLHQpJiZuLnB1c2goYSk7cmV0dXJuIG59Z2V0IGFjdGl2ZUVsZW1lbnQoKXtsZXQgdD10aGlzLm5vZGU7cmV0dXJuIHQuX2FjdGl2ZUVsZW1lbnQhPT12b2lkIDA/dC5fYWN0aXZlRWxlbWVudDp0LmFjdGl2ZUVsZW1lbnR9fTtmdW5jdGlvbiBBeGUoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtlW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZVtuXS5hcHBseSh0aGlzLm5vZGUsYXJndW1lbnRzKX19fWZ1bmN0aW9uIHZndChlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbl19LGNvbmZpZ3VyYWJsZTohMH0pfX1mdW5jdGlvbiBQeGUoZSx0KXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG49dFtyXTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW25dfSxzZXQ6ZnVuY3Rpb24oaSl7dGhpcy5ub2RlW25dPWl9LGNvbmZpZ3VyYWJsZTohMH0pfX12YXIgbEU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5ldmVudD10fWdldCByb290VGFyZ2V0KCl7cmV0dXJuIHRoaXMucGF0aFswXX1nZXQgbG9jYWxUYXJnZXQoKXtyZXR1cm4gdGhpcy5ldmVudC50YXJnZXR9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5ldmVudC5jb21wb3NlZFBhdGgoKX19O0tyLnByb3RvdHlwZS5jbG9uZU5vZGU7S3IucHJvdG90eXBlLmFwcGVuZENoaWxkO0tyLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7S3IucHJvdG90eXBlLnJlbW92ZUNoaWxkO0tyLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7S3IucHJvdG90eXBlLnNldEF0dHJpYnV0ZTtLci5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlO0tyLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yO0tyLnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsO0tyLnByb3RvdHlwZS5wYXJlbnROb2RlO0tyLnByb3RvdHlwZS5maXJzdENoaWxkO0tyLnByb3RvdHlwZS5sYXN0Q2hpbGQ7S3IucHJvdG90eXBlLm5leHRTaWJsaW5nO0tyLnByb3RvdHlwZS5wcmV2aW91c1NpYmxpbmc7S3IucHJvdG90eXBlLmZpcnN0RWxlbWVudENoaWxkO0tyLnByb3RvdHlwZS5sYXN0RWxlbWVudENoaWxkO0tyLnByb3RvdHlwZS5uZXh0RWxlbWVudFNpYmxpbmc7S3IucHJvdG90eXBlLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7S3IucHJvdG90eXBlLmNoaWxkTm9kZXM7S3IucHJvdG90eXBlLmNoaWxkcmVuO0tyLnByb3RvdHlwZS5jbGFzc0xpc3Q7S3IucHJvdG90eXBlLnRleHRDb250ZW50O0tyLnByb3RvdHlwZS5pbm5lckhUTUw7dmFyIGpHPUtyO2lmKHdpbmRvdy5TaGFkeURPTSYmd2luZG93LlNoYWR5RE9NLmluVXNlJiZ3aW5kb3cuU2hhZHlET00ubm9QYXRjaCYmd2luZG93LlNoYWR5RE9NLldyYXBwZXIpe2NsYXNzIGUgZXh0ZW5kcyB3aW5kb3cuU2hhZHlET00uV3JhcHBlcnt9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoS3IucHJvdG90eXBlKS5mb3JFYWNoKHQ9Pnt0IT0iYWN0aXZlRWxlbWVudCImJihlLnByb3RvdHlwZVt0XT1Lci5wcm90b3R5cGVbdF0pfSksdmd0KGUucHJvdG90eXBlLFsiY2xhc3NMaXN0Il0pLGpHPWUsT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobEUucHJvdG90eXBlLHtsb2NhbFRhcmdldDp7Z2V0KCl7bGV0IHQ9dGhpcy5ldmVudC5jdXJyZW50VGFyZ2V0LHI9dCYmenQodCkuZ2V0T3duZXJSb290KCksbj10aGlzLnBhdGg7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPW5baV07aWYoenQobykuZ2V0T3duZXJSb290KCk9PT1yKXJldHVybiBvfX0sY29uZmlndXJhYmxlOiEwfSxwYXRoOntnZXQoKXtyZXR1cm4gd2luZG93LlNoYWR5RE9NLmNvbXBvc2VkUGF0aCh0aGlzLmV2ZW50KX0sY29uZmlndXJhYmxlOiEwfX0pfWVsc2UgQXhlKEtyLnByb3RvdHlwZSxbImNsb25lTm9kZSIsImFwcGVuZENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicmVtb3ZlQ2hpbGQiLCJyZXBsYWNlQ2hpbGQiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCJdKSx2Z3QoS3IucHJvdG90eXBlLFsicGFyZW50Tm9kZSIsImZpcnN0Q2hpbGQiLCJsYXN0Q2hpbGQiLCJuZXh0U2libGluZyIsInByZXZpb3VzU2libGluZyIsImZpcnN0RWxlbWVudENoaWxkIiwibGFzdEVsZW1lbnRDaGlsZCIsIm5leHRFbGVtZW50U2libGluZyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJjaGlsZE5vZGVzIiwiY2hpbGRyZW4iLCJjbGFzc0xpc3QiXSksUHhlKEtyLnByb3RvdHlwZSxbInRleHRDb250ZW50IiwiaW5uZXJIVE1MIiwiY2xhc3NOYW1lIl0pO3ZhciB6dD1mdW5jdGlvbihlKXtpZihlPWV8fGRvY3VtZW50LGUgaW5zdGFuY2VvZiBqR3x8ZSBpbnN0YW5jZW9mIGxFKXJldHVybiBlO2xldCB0PWUuX19kb21BcGk7cmV0dXJuIHR8fChlIGluc3RhbmNlb2YgRXZlbnQ/dD1uZXcgbEUoZSk6dD1uZXcgakcoZSksZS5fX2RvbUFwaT10KSx0fTt2YXIgJEc9d2luZG93LlNoYWR5RE9NLHhndD13aW5kb3cuU2hhZHlDU1M7ZnVuY3Rpb24gYmd0KGUsdCl7cmV0dXJuIHVlKGUpLmdldFJvb3ROb2RlKCk9PT10fWZ1bmN0aW9uIHdndChlLHQ9ITEpe2lmKCEkR3x8IXhndHx8ISRHLmhhbmRsZXNEeW5hbWljU2NvcGluZylyZXR1cm4gbnVsbDtsZXQgcj14Z3QuU2NvcGluZ1NoaW07aWYoIXIpcmV0dXJuIG51bGw7bGV0IG49ci5zY29wZUZvck5vZGUoZSksaT11ZShlKS5nZXRSb290Tm9kZSgpLG89YT0+e2lmKCFiZ3QoYSxpKSlyZXR1cm47bGV0IHM9QXJyYXkuZnJvbSgkRy5uYXRpdmVNZXRob2RzLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChhLCIqIikpO3MucHVzaChhKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXTtpZighYmd0KGMsaSkpY29udGludWU7bGV0IHU9ci5jdXJyZW50U2NvcGVGb3JOb2RlKGMpO3UhPT1uJiYodSE9PSIiJiZyLnVuc2NvcGVOb2RlKGMsdSksci5zY29wZU5vZGUoYyxuKSl9fTtpZihvKGUpLHQpe2xldCBhPW5ldyBNdXRhdGlvbk9ic2VydmVyKHM9Pntmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXTtmb3IobGV0IHU9MDt1PGMuYWRkZWROb2Rlcy5sZW5ndGg7dSsrKXtsZXQgaD1jLmFkZGVkTm9kZXNbdV07aC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZvKGgpfX19KTtyZXR1cm4gYS5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksYX1lbHNlIHJldHVybiBudWxsfXZhciBLRz0iZGlzYWJsZS11cGdyYWRlIixaRz1lPT57Zm9yKDtlOyl7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCJvYnNlcnZlZEF0dHJpYnV0ZXMiKTtpZih0KXJldHVybiB0LmdldDtlPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLnByb3RvdHlwZSkuY29uc3RydWN0b3J9cmV0dXJuKCk9PltdfSxndnI9Tm4oZT0+e2xldCB0PVNtKGUpLHI9WkcodCk7Y2xhc3MgbiBleHRlbmRzIHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZH1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3JldHVybiByLmNhbGwodGhpcykuY29uY2F0KEtHKX1faW5pdGlhbGl6ZVByb3BlcnRpZXMoKXt0aGlzLmhhc0F0dHJpYnV0ZShLRyk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkPSEwOnN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpfV9lbmFibGVQcm9wZXJ0aWVzKCl7dGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHxzdXBlci5fZW5hYmxlUHJvcGVydGllcygpfV9jYW5BcHBseVByb3BlcnR5RGVmYXVsdChvKXtyZXR1cm4gc3VwZXIuX2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KG8pJiYhKHRoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZCYmdGhpcy5faXNQcm9wZXJ0eVBlbmRpbmcobykpfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhvLGEscyxsKXtvPT1LRz90aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQmJnM9PW51bGwmJihzdXBlci5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITEsdWUodGhpcykuaXNDb25uZWN0ZWQmJnN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCkpOnN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhvLGEscyxsKX1jb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19cmV0dXJuIG59KTt2YXIgbzk9ImRpc2FibGUtdXBncmFkZSIsSXhlPXdpbmRvdy5TaGFkeUNTUyxHdD1ObihlPT57bGV0IHQ9eWgoU20oZSkpLHI9Vkk/dDp1Z3QodCksbj1aRyhyKSxpPXt4OiJwYW4teCIseToicGFuLXkiLG5vbmU6Im5vbmUiLGFsbDoiYXV0byJ9O2NsYXNzIG8gZXh0ZW5kcyBye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmlzQXR0YWNoZWQsdGhpcy5fX2JvdW5kTGlzdGVuZXJzLHRoaXMuX2RlYm91bmNlcnMsdGhpcy5fX2lzVXBncmFkZURpc2FibGVkLHRoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZCx0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlc31zdGF0aWMgZ2V0IGltcG9ydE1ldGEoKXtyZXR1cm4gdGhpcy5wcm90b3R5cGUuaW1wb3J0TWV0YX1jcmVhdGVkKCl7fV9fYXR0cmlidXRlUmVhY3Rpb24ocyxsLGMpeyh0aGlzLl9fZGF0YUF0dHJpYnV0ZXMmJnRoaXMuX19kYXRhQXR0cmlidXRlc1tzXXx8cz09PW85KSYmdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socyxsLGMsbnVsbCl9c2V0QXR0cmlidXRlKHMsbCl7aWYocU0mJiF0aGlzLl9sZWdhY3lGb3JjZU9ic2VydmVkQXR0cmlidXRlcyl7bGV0IGM9dGhpcy5nZXRBdHRyaWJ1dGUocyk7c3VwZXIuc2V0QXR0cmlidXRlKHMsbCksdGhpcy5fX2F0dHJpYnV0ZVJlYWN0aW9uKHMsYyxTdHJpbmcobCkpfWVsc2Ugc3VwZXIuc2V0QXR0cmlidXRlKHMsbCl9cmVtb3ZlQXR0cmlidXRlKHMpe2lmKHFNJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMpe2xldCBsPXRoaXMuZ2V0QXR0cmlidXRlKHMpO3N1cGVyLnJlbW92ZUF0dHJpYnV0ZShzKSx0aGlzLl9fYXR0cmlidXRlUmVhY3Rpb24ocyxsLG51bGwpfWVsc2Ugc3VwZXIucmVtb3ZlQXR0cmlidXRlKHMpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuIHFNJiYhdGhpcy5wcm90b3R5cGUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzPyh0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzIix0aGlzKSl8fCh0aGlzLl9fb2JzZXJ2ZWRBdHRyaWJ1dGVzPVtdLEhJKHRoaXMucHJvdG90eXBlKSksdGhpcy5fX29ic2VydmVkQXR0cmlidXRlcyk6bi5jYWxsKHRoaXMpLmNvbmNhdChvOSl9X2VuYWJsZVByb3BlcnRpZXMoKXt0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWR8fHN1cGVyLl9lbmFibGVQcm9wZXJ0aWVzKCl9X2NhbkFwcGx5UHJvcGVydHlEZWZhdWx0KHMpe3JldHVybiBzdXBlci5fY2FuQXBwbHlQcm9wZXJ0eURlZmF1bHQocykmJiEodGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZ0aGlzLl9pc1Byb3BlcnR5UGVuZGluZyhzKSl9Y29ubmVjdGVkQ2FsbGJhY2soKXt0aGlzLl9fbmVlZHNBdHRyaWJ1dGVzQXRDb25uZWN0ZWQmJnRoaXMuX3Rha2VBdHRyaWJ1dGVzKCksdGhpcy5fX2lzVXBncmFkZURpc2FibGVkfHwoc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmlzQXR0YWNoZWQ9ITAsdGhpcy5hdHRhY2hlZCgpKX1hdHRhY2hlZCgpe31kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3RoaXMuX19pc1VwZ3JhZGVEaXNhYmxlZHx8KHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5pc0F0dGFjaGVkPSExLHRoaXMuZGV0YWNoZWQoKSl9ZGV0YWNoZWQoKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHMsbCxjLHUpe2whPT1jJiYocz09bzk/dGhpcy5fX2lzVXBncmFkZURpc2FibGVkJiZjPT1udWxsJiYodGhpcy5faW5pdGlhbGl6ZVByb3BlcnRpZXMoKSx0aGlzLl9faXNVcGdyYWRlRGlzYWJsZWQ9ITEsdWUodGhpcykuaXNDb25uZWN0ZWQmJnRoaXMuY29ubmVjdGVkQ2FsbGJhY2soKSk6KHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhzLGwsYyx1KSx0aGlzLmF0dHJpYnV0ZUNoYW5nZWQocyxsLGMpKSl9YXR0cmlidXRlQ2hhbmdlZChzLGwsYyl7fV9pbml0aWFsaXplUHJvcGVydGllcygpe2lmKHBwJiZ0aGlzLmhhc0F0dHJpYnV0ZShvOSkpdGhpcy5fX2lzVXBncmFkZURpc2FibGVkPSEwO2Vsc2V7bGV0IHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO3MuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiX19oYXNSZWdpc3RlckZpbmlzaGVkIixzKSl8fCh0aGlzLl9yZWdpc3RlcmVkKCkscy5fX2hhc1JlZ2lzdGVyRmluaXNoZWQ9ITApLHN1cGVyLl9pbml0aWFsaXplUHJvcGVydGllcygpLHRoaXMucm9vdD10aGlzLHRoaXMuY3JlYXRlZCgpLHFNJiYhdGhpcy5fbGVnYWN5Rm9yY2VPYnNlcnZlZEF0dHJpYnV0ZXMmJih0aGlzLmhhc0F0dHJpYnV0ZXMoKT90aGlzLl90YWtlQXR0cmlidXRlcygpOnRoaXMucGFyZW50Tm9kZXx8KHRoaXMuX19uZWVkc0F0dHJpYnV0ZXNBdENvbm5lY3RlZD0hMCkpLHRoaXMuX2FwcGx5TGlzdGVuZXJzKCl9fV90YWtlQXR0cmlidXRlcygpe2xldCBzPXRoaXMuYXR0cmlidXRlcztmb3IobGV0IGw9MCxjPXMubGVuZ3RoO2w8YztsKyspe2xldCB1PXNbbF07dGhpcy5fX2F0dHJpYnV0ZVJlYWN0aW9uKHUubmFtZSxudWxsLHUudmFsdWUpfX1fcmVnaXN0ZXJlZCgpe31yZWFkeSgpe3RoaXMuX2Vuc3VyZUF0dHJpYnV0ZXMoKSxzdXBlci5yZWFkeSgpfV9lbnN1cmVBdHRyaWJ1dGVzKCl7fV9hcHBseUxpc3RlbmVycygpe31zZXJpYWxpemUocyl7cmV0dXJuIHRoaXMuX3NlcmlhbGl6ZVZhbHVlKHMpfWRlc2VyaWFsaXplKHMsbCl7cmV0dXJuIHRoaXMuX2Rlc2VyaWFsaXplVmFsdWUocyxsKX1yZWZsZWN0UHJvcGVydHlUb0F0dHJpYnV0ZShzLGwsYyl7dGhpcy5fcHJvcGVydHlUb0F0dHJpYnV0ZShzLGwsYyl9c2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZShzLGwsYyl7dGhpcy5fdmFsdWVUb05vZGVBdHRyaWJ1dGUoY3x8dGhpcyxzLGwpfWV4dGVuZChzLGwpe2lmKCEocyYmbCkpcmV0dXJuIHN8fGw7bGV0IGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobCk7Zm9yKGxldCB1PTAsaDt1PGMubGVuZ3RoJiYoaD1jW3VdKTt1Kyspe2xldCBmPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxoKTtmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkocyxoLGYpfXJldHVybiBzfW1peGluKHMsbCl7Zm9yKGxldCBjIGluIGwpc1tjXT1sW2NdO3JldHVybiBzfWNoYWluT2JqZWN0KHMsbCl7cmV0dXJuIHMmJmwmJnMhPT1sJiYocy5fX3Byb3RvX189bCksc31pbnN0YW5jZVRlbXBsYXRlKHMpe2xldCBsPXRoaXMuY29uc3RydWN0b3IuX2NvbnRlbnRGb3JUZW1wbGF0ZShzKTtyZXR1cm4gZG9jdW1lbnQuaW1wb3J0Tm9kZShsLCEwKX1maXJlKHMsbCxjKXtjPWN8fHt9LGw9bD09bnVsbD97fTpsO2xldCB1PW5ldyBFdmVudChzLHtidWJibGVzOmMuYnViYmxlcz09PXZvaWQgMD8hMDpjLmJ1YmJsZXMsY2FuY2VsYWJsZTpCb29sZWFuKGMuY2FuY2VsYWJsZSksY29tcG9zZWQ6Yy5jb21wb3NlZD09PXZvaWQgMD8hMDpjLmNvbXBvc2VkfSk7dS5kZXRhaWw9bDtsZXQgaD1jLm5vZGV8fHRoaXM7cmV0dXJuIHVlKGgpLmRpc3BhdGNoRXZlbnQodSksdX1saXN0ZW4ocyxsLGMpe3M9c3x8dGhpcztsZXQgdT10aGlzLl9fYm91bmRMaXN0ZW5lcnN8fCh0aGlzLl9fYm91bmRMaXN0ZW5lcnM9bmV3IFdlYWtNYXApLGg9dS5nZXQocyk7aHx8KGg9e30sdS5zZXQocyxoKSk7bGV0IGY9bCtjO2hbZl18fChoW2ZdPXRoaXMuX2FkZE1ldGhvZEV2ZW50TGlzdGVuZXJUb05vZGUocyxsLGMsdGhpcykpfXVubGlzdGVuKHMsbCxjKXtzPXN8fHRoaXM7bGV0IHU9dGhpcy5fX2JvdW5kTGlzdGVuZXJzJiZ0aGlzLl9fYm91bmRMaXN0ZW5lcnMuZ2V0KHMpLGg9bCtjLGY9dSYmdVtoXTtmJiYodGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lckZyb21Ob2RlKHMsbCxmKSx1W2hdPW51bGwpfXNldFNjcm9sbERpcmVjdGlvbihzLGwpe2RfKGx8fHRoaXMsaVtzXXx8ImF1dG8iKX0kJChzKXtyZXR1cm4gdGhpcy5yb290LnF1ZXJ5U2VsZWN0b3Iocyl9Z2V0IGRvbUhvc3QoKXtsZXQgcz11ZSh0aGlzKS5nZXRSb290Tm9kZSgpO3JldHVybiBzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudD9zLmhvc3Q6c31kaXN0cmlidXRlQ29udGVudCgpe2xldCBsPXp0KHRoaXMpO3dpbmRvdy5TaGFkeURPTSYmbC5zaGFkb3dSb290JiZTaGFkeURPTS5mbHVzaCgpfWdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKXtyZXR1cm4genQodGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpfXF1ZXJ5RGlzdHJpYnV0ZWRFbGVtZW50cyhzKXtyZXR1cm4genQodGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpfWdldEVmZmVjdGl2ZUNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLmZpbHRlcihmdW5jdGlvbihsKXtyZXR1cm4gbC5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFfSl9Z2V0RWZmZWN0aXZlVGV4dENvbnRlbnQoKXtsZXQgcz10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKSxsPVtdO2ZvcihsZXQgYz0wLHU7dT1zW2NdO2MrKyl1Lm5vZGVUeXBlIT09Tm9kZS5DT01NRU5UX05PREUmJmwucHVzaCh1LnRleHRDb250ZW50KTtyZXR1cm4gbC5qb2luKCIiKX1xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKHMpe2xldCBsPXRoaXMucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpO3JldHVybiBsJiZsWzBdfXF1ZXJ5QWxsRWZmZWN0aXZlQ2hpbGRyZW4ocyl7cmV0dXJuIHRoaXMucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHMpfWdldENvbnRlbnRDaGlsZE5vZGVzKHMpe2xldCBsPXRoaXMucm9vdC5xdWVyeVNlbGVjdG9yKHN8fCJzbG90Iik7cmV0dXJuIGw/enQobCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOltdfWdldENvbnRlbnRDaGlsZHJlbihzKXtyZXR1cm4gdGhpcy5nZXRDb250ZW50Q2hpbGROb2RlcyhzKS5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX0pfWlzTGlnaHREZXNjZW5kYW50KHMpe2xldCBsPXRoaXM7cmV0dXJuIGwhPT1zJiZ1ZShsKS5jb250YWlucyhzKSYmdWUobCkuZ2V0Um9vdE5vZGUoKT09PXVlKHMpLmdldFJvb3ROb2RlKCl9aXNMb2NhbERlc2NlbmRhbnQocyl7cmV0dXJuIHRoaXMucm9vdD09PXVlKHMpLmdldFJvb3ROb2RlKCl9c2NvcGVTdWJ0cmVlKHMsbD0hMSl7cmV0dXJuIHdndChzLGwpfWdldENvbXB1dGVkU3R5bGVWYWx1ZShzKXtyZXR1cm4gSXhlLmdldENvbXB1dGVkU3R5bGVWYWx1ZSh0aGlzLHMpfWRlYm91bmNlKHMsbCxjKXtyZXR1cm4gdGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fSx0aGlzLl9kZWJvdW5jZXJzW3NdPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcnNbc10sYz4wP21vLmFmdGVyKGMpOmNpLGwuYmluZCh0aGlzKSl9aXNEZWJvdW5jZXJBY3RpdmUocyl7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fTtsZXQgbD10aGlzLl9kZWJvdW5jZXJzW3NdO3JldHVybiEhKGwmJmwuaXNBY3RpdmUoKSl9Zmx1c2hEZWJvdW5jZXIocyl7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fTtsZXQgbD10aGlzLl9kZWJvdW5jZXJzW3NdO2wmJmwuZmx1c2goKX1jYW5jZWxEZWJvdW5jZXIocyl7dGhpcy5fZGVib3VuY2Vycz10aGlzLl9kZWJvdW5jZXJzfHx7fTtsZXQgbD10aGlzLl9kZWJvdW5jZXJzW3NdO2wmJmwuY2FuY2VsKCl9YXN5bmMocyxsKXtyZXR1cm4gbD4wP21vLnJ1bihzLmJpbmQodGhpcyksbCk6fmNpLnJ1bihzLmJpbmQodGhpcykpfWNhbmNlbEFzeW5jKHMpe3M8MD9jaS5jYW5jZWwofnMpOm1vLmNhbmNlbChzKX1jcmVhdGUocyxsKXtsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHMpO2lmKGwpaWYoYy5zZXRQcm9wZXJ0aWVzKWMuc2V0UHJvcGVydGllcyhsKTtlbHNlIGZvcihsZXQgdSBpbiBsKWNbdV09bFt1XTtyZXR1cm4gY31lbGVtZW50TWF0Y2hlcyhzLGwpe3JldHVybiBYRyhsfHx0aGlzLHMpfXRvZ2dsZUF0dHJpYnV0ZShzLGwpe2xldCBjPXRoaXM7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0zJiYoYz1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg9PTEmJihsPSFjLmhhc0F0dHJpYnV0ZShzKSksbD8odWUoYykuc2V0QXR0cmlidXRlKHMsIiIpLCEwKToodWUoYykucmVtb3ZlQXR0cmlidXRlKHMpLCExKX10b2dnbGVDbGFzcyhzLGwsYyl7Yz1jfHx0aGlzLGFyZ3VtZW50cy5sZW5ndGg9PTEmJihsPSFjLmNsYXNzTGlzdC5jb250YWlucyhzKSksbD9jLmNsYXNzTGlzdC5hZGQocyk6Yy5jbGFzc0xpc3QucmVtb3ZlKHMpfXRyYW5zZm9ybShzLGwpe2w9bHx8dGhpcyxsLnN0eWxlLndlYmtpdFRyYW5zZm9ybT1zLGwuc3R5bGUudHJhbnNmb3JtPXN9dHJhbnNsYXRlM2QocyxsLGMsdSl7dT11fHx0aGlzLHRoaXMudHJhbnNmb3JtKCJ0cmFuc2xhdGUzZCgiK3MrIiwiK2wrIiwiK2MrIikiLHUpfWFycmF5RGVsZXRlKHMsbCl7bGV0IGM7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoYz1zLmluZGV4T2YobCksYz49MClyZXR1cm4gcy5zcGxpY2UoYywxKX1lbHNlIGlmKGM9Tm8odGhpcyxzKS5pbmRleE9mKGwpLGM+PTApcmV0dXJuIHRoaXMuc3BsaWNlKHMsYywxKTtyZXR1cm4gbnVsbH1fbG9nZ2VyKHMsbCl7c3dpdGNoKEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPT09MSYmQXJyYXkuaXNBcnJheShsWzBdKSYmKGw9bFswXSkscyl7Y2FzZSJsb2ciOmNhc2Uid2FybiI6Y2FzZSJlcnJvciI6Y29uc29sZVtzXSguLi5sKX19X2xvZyguLi5zKXt0aGlzLl9sb2dnZXIoImxvZyIscyl9X3dhcm4oLi4ucyl7dGhpcy5fbG9nZ2VyKCJ3YXJuIixzKX1fZXJyb3IoLi4ucyl7dGhpcy5fbG9nZ2VyKCJlcnJvciIscyl9X2xvZ2YocywuLi5sKXtyZXR1cm5bIlslczo6JXNdIix0aGlzLmlzLHMsLi4ubF19fXJldHVybiBvLnByb3RvdHlwZS5pcz0iIixvfSk7dmFyIENtPUVlKE9lKCksMSk7ZnVuY3Rpb24geGgoZSx0KXtsZXQgcj0wLG49MDtmb3IoOzspe2lmKHI9PT1lLmxlbmd0aClyZXR1cm4gbj09PXQubGVuZ3RoPzA6LTE7aWYobj09PXQubGVuZ3RoKXJldHVybiAxO2lmKG1fKGVbcl0pJiZtXyh0W25dKSl7bGV0IGk9cixvPW47cj1TZ3QoZSxyKzEpLG49U2d0KHQsbisxKTtsZXQgYT1wYXJzZUZsb2F0KGUuc2xpY2UoaSxyKSkscz1wYXJzZUZsb2F0KHQuc2xpY2UobyxuKSk7aWYoYTxzKXJldHVybi0xO2lmKGE+cylyZXR1cm4gMTtjb250aW51ZX1pZihKRyhlW3JdKSl7aWYoIUpHKHRbbl0pKXJldHVybi0xfWVsc2V7aWYoSkcodFtuXSkpcmV0dXJuIDE7aWYoZVtyXTx0W25dKXJldHVybi0xO2lmKGVbcl0+dFtuXSlyZXR1cm4gMX1yKyssbisrfX1mdW5jdGlvbiBTZ3QoZSx0KXtsZXQgcjsoZnVuY3Rpb24oaSl7aVtpLk5BVFVSQUw9MF09Ik5BVFVSQUwiLGlbaS5SRUFMPTFdPSJSRUFMIixpW2kuRVhQT05FTlRfU0lHTj0yXT0iRVhQT05FTlRfU0lHTiIsaVtpLkVYUE9ORU5UPTNdPSJFWFBPTkVOVCJ9KShyfHwocj17fSkpO2xldCBuPXIuTkFUVVJBTDtmb3IoO3Q8ZS5sZW5ndGg7dCsrKWlmKG49PT1yLk5BVFVSQUwpe2lmKGVbdF09PT0iLiIpbj1yLlJFQUw7ZWxzZSBpZihlW3RdPT09ImUifHxlW3RdPT09IkUiKW49ci5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIW1fKGVbdF0pKWJyZWFrfWVsc2UgaWYobj09PXIuUkVBTCl7aWYoZVt0XT09PSJlInx8ZVt0XT09PSJFIiluPXIuRVhQT05FTlRfU0lHTjtlbHNlIGlmKCFtXyhlW3RdKSlicmVha31lbHNlIGlmKG49PT1yLkVYUE9ORU5UX1NJR04paWYobV8oZVt0XSl8fGVbdF09PT0iKyJ8fGVbdF09PT0iLSIpbj1yLkVYUE9ORU5UO2Vsc2UgYnJlYWs7ZWxzZSBpZihuPT09ci5FWFBPTkVOVCYmIW1fKGVbdF0pKWJyZWFrO3JldHVybiB0fWZ1bmN0aW9uIG1fKGUpe3JldHVybiIwIjw9ZSYmZTw9IjkifWZ1bmN0aW9uIEpHKGUpe3JldHVybiBlPT09Ii8ifHxlPT09Il8ifHxtXyhlKX12YXIgTHhlPVtdO2Z1bmN0aW9uIGt4ZShlKXtyZXR1cm4gQ20ua2V5cyhlKS5zb3J0KHhoKX1mdW5jdGlvbiAkaShlKXtyZXR1cm4gQ20udW5pb24uYXBwbHkobnVsbCxDbS52YWx1ZXMoZSkpLnNvcnQoeGgpfWZ1bmN0aW9uIFJ4ZShlLHQpe2xldCByPVtdO3JldHVybiB0LmZvckVhY2gobj0+cj1yLmNvbmNhdChlW25dKSksQ20udW5pcShyKS5zb3J0KHhoKX12YXIgRWd0PSJYLVRlbnNvckJvYXJkLUZlYXR1cmUtRmxhZ3MiO3ZhciB0Vz17fTtLcyh0Vyx7Z2V0RmVhdHVyZUZsYWdzOigpPT5EeGUsZ2V0RmVhdHVyZUZsYWdzVG9TZW5kVG9TZXJ2ZXI6KCk9PlFHLGluaXRpYWxpemVGZWF0dXJlRmxhZ3M6KCk9PlRndCxzZXRGZWF0dXJlRmxhZ3M6KCk9Pk54ZX0pO3ZhciBhOSxzOTtUZ3QoKTtmdW5jdGlvbiBUZ3QoKXthOT1udWxsLHM5PW51bGx9ZnVuY3Rpb24gTnhlKGUsdCl7YTk9ZSxzOT10fWZ1bmN0aW9uIER4ZSgpe2lmKGE5PT09bnVsbCl0aHJvdyBFcnJvcigiRmVhdHVyZUZsYWdzIGhhdmUgbm90IHlldCBiZWVuIGRldGVybWluZWQgYnkgVGVuc29yQm9hcmQuIik7cmV0dXJuIGE5fWZ1bmN0aW9uIFFHKCl7aWYoczk9PT1udWxsKXRocm93IEVycm9yKCJGZWF0dXJlRmxhZ3MgaGF2ZSBub3QgeWV0IGJlZW4gZGV0ZXJtaW5lZCBieSBUZW5zb3JCb2FyZC4iKTtyZXR1cm4gczl9dmFyIGw5PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubmFtZT0iUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yIn19LFZ4PWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5uYW1lPSJJbnZhbGlkUmVxdWVzdE9wdGlvbnNFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsVngucHJvdG90eXBlKX19LGNFPWNsYXNzIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpLHRoaXMubWVzc2FnZT1gUmVxdWVzdE5ldHdvcmtFcnJvcjogJHt0LnN0YXR1c30gYXQgJHtyfWAsdGhpcy5uYW1lPSJSZXF1ZXN0TmV0d29ya0Vycm9yIix0aGlzLnJlcT10LHRoaXMudXJsPXJ9fSxBbTsoZnVuY3Rpb24oZSl7ZS5HRVQ9IkdFVCIsZS5QT1NUPSJQT1NUIn0pKEFtfHwoQW09e30pKTt2YXIgVXg9Y2xhc3N7dmFsaWRhdGUoKXtpZih0aGlzLm1ldGhvZFR5cGU9PT1BbS5HRVQmJnRoaXMuYm9keSl0aHJvdyBuZXcgVngoImJvZHkgbXVzdCBiZSBtaXNzaW5nIGZvciBhIEdFVCByZXF1ZXN0LiIpfX0sQWU9Y2xhc3N7Y29uc3RydWN0b3IodD0xZTMscj0zKXt0aGlzLl9xdWV1ZT1bXSx0aGlzLl9uQWN0aXZlUmVxdWVzdHM9MCx0aGlzLl9uU2ltdWx0YW5lb3VzUmVxdWVzdHM9dCx0aGlzLl9tYXhSZXRyaWVzPXJ9cmVxdWVzdCh0LHIpe2xldCBuPXp4ZShyKTtyZXR1cm4gdGhpcy5yZXF1ZXN0V2l0aE9wdGlvbnModCxuKX1yZXF1ZXN0V2l0aE9wdGlvbnModCxyKXtyZXR1cm4gci52YWxpZGF0ZSgpLG5ldyBQcm9taXNlKChpLG8pPT57bGV0IGE9e3Jlc29sdmU6aSxyZWplY3Q6b307dGhpcy5fcXVldWUucHVzaChhKSx0aGlzLmxhdW5jaFJlcXVlc3RzKCl9KS50aGVuKCgpPT50aGlzLnByb21pc2VXaXRoUmV0cmllcyh0LHRoaXMuX21heFJldHJpZXMscikpLnRoZW4oaT0+KHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKSxpKSxpPT4oaS5uYW1lPT09IlJlcXVlc3ROZXR3b3JrRXJyb3IiJiYodGhpcy5fbkFjdGl2ZVJlcXVlc3RzLS0sdGhpcy5sYXVuY2hSZXF1ZXN0cygpKSxQcm9taXNlLnJlamVjdChpKSkpfWZldGNoKHQscil7cmV0dXJuIG5ldyBQcm9taXNlKChuLGkpPT57bGV0IG89e3Jlc29sdmU6bixyZWplY3Q6aX07dGhpcy5fcXVldWUucHVzaChvKSx0aGlzLmxhdW5jaFJlcXVlc3RzKCl9KS50aGVuKCgpPT57bGV0IG49MTtyZXR1cm4gbmV3IFByb21pc2UoaT0+e2xldCBvPSgpPT57ZmV0Y2godCxyKS50aGVuKGE9PntpZighYS5vayYmdGhpcy5fbWF4UmV0cmllcz5uKXtuKyssbygpO3JldHVybn1pKGEpLHRoaXMuX25BY3RpdmVSZXF1ZXN0cy0tLHRoaXMubGF1bmNoUmVxdWVzdHMoKX0pfTtvKCl9KX0pfWNsZWFyUXVldWUoKXt2YXIgdDtmb3IoO3RoaXMuX3F1ZXVlLmxlbmd0aD4wOykodD10aGlzLl9xdWV1ZS5wb3AoKSk9PW51bGx8fHQucmVqZWN0KG5ldyBsOSgiUmVxdWVzdCBjYW5jZWxsZWQgYnkgY2xlYXJRdWV1ZSIpKX1hY3RpdmVSZXF1ZXN0cygpe3JldHVybiB0aGlzLl9uQWN0aXZlUmVxdWVzdHN9b3V0c3RhbmRpbmdSZXF1ZXN0cygpe3JldHVybiB0aGlzLl9uQWN0aXZlUmVxdWVzdHMrdGhpcy5fcXVldWUubGVuZ3RofWxhdW5jaFJlcXVlc3RzKCl7Zm9yKDt0aGlzLl9uQWN0aXZlUmVxdWVzdHM8dGhpcy5fblNpbXVsdGFuZW91c1JlcXVlc3RzJiZ0aGlzLl9xdWV1ZS5sZW5ndGg+MDspdGhpcy5fbkFjdGl2ZVJlcXVlc3RzKyssdGhpcy5fcXVldWUucG9wKCkucmVzb2x2ZSh2b2lkIDApfXByb21pc2VXaXRoUmV0cmllcyh0LHIsbil7dmFyIGk9YT0+YSxvPWE9PnI+MD90aGlzLnByb21pc2VXaXRoUmV0cmllcyh0LHItMSxuKTpQcm9taXNlLnJlamVjdChhKTtyZXR1cm4gdGhpcy5fcHJvbWlzZUZyb21VcmwodCxuKS50aGVuKGksbyl9X3Byb21pc2VGcm9tVXJsKHQscil7cmV0dXJuIG5ldyBQcm9taXNlKChuLGkpPT57bGV0IG89T3hlKHIubWV0aG9kVHlwZSx0LHIud2l0aENyZWRlbnRpYWxzLHIuY29udGVudFR5cGUpO28uc2V0UmVxdWVzdEhlYWRlcihFZ3QsSlNPTi5zdHJpbmdpZnkoUUcoKSkpLG8ub25sb2FkPWZ1bmN0aW9uKCl7by5zdGF0dXM9PT0yMDA/bihKU09OLnBhcnNlKG8ucmVzcG9uc2VUZXh0KSk6aShuZXcgY0Uobyx0KSl9LG8ub25lcnJvcj1mdW5jdGlvbigpe2kobmV3IGNFKG8sdCkpfSxyLmJvZHk/by5zZW5kKHIuYm9keSk6by5zZW5kKCl9KX19O2Z1bmN0aW9uIE94ZShlLHQscixuKXtsZXQgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGkub3BlbihlLHQpLHImJihpLndpdGhDcmVkZW50aWFscz1yKSxuJiZpLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsbiksaX1mdW5jdGlvbiB6eGUoZSl7bGV0IHQ9bmV3IFV4O3JldHVybiBlPyh0Lm1ldGhvZFR5cGU9QW0uUE9TVCx0LmJvZHk9RnhlKGUpLHQpOih0Lm1ldGhvZFR5cGU9QW0uR0VULHQpfWZ1bmN0aW9uIEZ4ZShlKXtsZXQgdD1uZXcgRm9ybURhdGE7Zm9yKGxldFtyLG5db2YgT2JqZWN0LmVudHJpZXMoZSkpe2xldCBpPUFycmF5LmlzQXJyYXkobik/bjpbbl07Zm9yKGxldCBvIG9mIGkpdC5hcHBlbmQocixvKX1yZXR1cm4gdH12YXIgQ2d0PSJleHBlcmltZW50YWxQbHVnaW4iLEJ4ZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLEFndD1QZ3QoKTtmdW5jdGlvbiBQZ3QoZT0iZGF0YSIsdD1CeGUpe3JldHVybiBlW2UubGVuZ3RoLTFdPT09Ii8iJiYoZT1lLnNsaWNlKDAsZS5sZW5ndGgtMSkpLHtlbnZpcm9ubWVudDooKT0+cXgoZSwiL2Vudmlyb25tZW50IiksZXhwZXJpbWVudHM6KCk9PnF4KGUsIi9leHBlcmltZW50cyIpLHBsdWdpblJvdXRlOihyLG4saSk9PnF4KGUrIi9wbHVnaW4iLGAvJHtyfSR7bn1gLGkpLHBsdWdpbnNMaXN0aW5nOigpPT5xeChlLCIvcGx1Z2luc19saXN0aW5nIixlVyh7W0NndF06dC5nZXRBbGwoQ2d0KX0pKSxydW5zOigpPT5xeChlLCIvcnVucyIpLHJ1bnNGb3JFeHBlcmltZW50OnI9PnF4KGUsIi9leHBlcmltZW50X3J1bnMiLGVXKHtleHBlcmltZW50OlN0cmluZyhyKX0pKX19ZnVuY3Rpb24gdmUoKXtyZXR1cm4gQWd0fWZ1bmN0aW9uIEh4ZShlKXtpZihlPT1udWxsKXRocm93IG5ldyBFcnJvcigiUm91dGVyIHJlcXVpcmVkLCBidXQgZ290OiAiK2UpO0FndD1lfWZ1bmN0aW9uIHF4KGUsdCxyPW5ldyBVUkxTZWFyY2hQYXJhbXMpe2xldCBuPWUrdDtyZXR1cm4gU3RyaW5nKHIpJiYobis9KHQuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iKStTdHJpbmcocikpLG59ZnVuY3Rpb24gZVcoZT17fSl7bGV0IHQ9T2JqZWN0LmtleXMoZSkuc29ydCgpLmZpbHRlcihuPT5lW25dKSxyPW5ldyBVUkxTZWFyY2hQYXJhbXM7cmV0dXJuIHQuZm9yRWFjaChuPT57bGV0IGk9ZVtuXTsoQXJyYXkuaXNBcnJheShpKT9pOltpXSkuZm9yRWFjaChhPT5yLmFwcGVuZChuLGEpKX0pLHJ9dmFyIGM5PUVlKE9lKCksMSk7dmFyIE5hOyhmdW5jdGlvbihlKXtlW2UuU0VBUkNIX1JFU1VMVFM9MF09IlNFQVJDSF9SRVNVTFRTIixlW2UuUFJFRklYX0dST1VQPTFdPSJQUkVGSVhfR1JPVVAifSkoTmF8fChOYT17fSkpO2Z1bmN0aW9uIFZ4ZShlLHQpe2xldCByPSgoKT0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KX1jYXRjaChuKXtyZXR1cm4gbnVsbH19KSgpO3JldHVybntuYW1lOnQsbWV0YWRhdGE6e3R5cGU6TmEuU0VBUkNIX1JFU1VMVFMsdmFsaWRSZWdleDohIXIsdW5pdmVyc2FsUmVnZXg6dD09PSIuKiJ9LGl0ZW1zOnI/ZS5maWx0ZXIobj0+bi5tYXRjaChyKSk6W119fWZ1bmN0aW9uIFV4ZShlLHQ9Ii8iKXtsZXQgcj1bXSxuPXt9O3JldHVybiBlLmZvckVhY2goaT0+e2xldCBvPWkuaW5kZXhPZih0KSxhPW8+PTA/aS5zbGljZSgwLG8pOmk7aWYoIW5bYV0pe2xldCBzPXtuYW1lOmEsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQfSxpdGVtczpbXX07blthXT1zLHIucHVzaChzKX1uW2FdLml0ZW1zLnB1c2goaSl9KSxyfWZ1bmN0aW9uIHF4ZShlLHQ9IiIpe2xldCByPVtWeGUoZSx0KV0sbj1VeGUoZSk7cmV0dXJuIEFycmF5KCkuY29uY2F0KHIsbil9ZnVuY3Rpb24gdUUoZSx0LHIpe2xldCBuPSRpKGUpLGk9cXhlKG4sciksbz1HeGUoYzkucGljayhlLHQpKTtyZXR1cm4gaS5tYXAoKHtuYW1lOmEsbWV0YWRhdGE6cyxpdGVtczpsfSk9Pih7bmFtZTphLG1ldGFkYXRhOnMsaXRlbXM6bC5tYXAoYz0+KHt0YWc6YyxydW5zOihvLmdldChjKXx8W10pLnNsaWNlKCl9KSl9KSl9ZnVuY3Rpb24gR3hlKGUpe2xldCB0PW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e2Vbcl0uZm9yRWFjaChuPT57bGV0IGk9dC5nZXQobil8fFtdO2kucHVzaChyKSx0LnNldChuLGkpfSl9KSx0fWZ1bmN0aW9uIFd4ZShlLHQpe2xldCByPXhoKGUudGFnLHQudGFnKTtyZXR1cm4gciE9MD9yOnhoKGUucnVuLHQucnVuKX1mdW5jdGlvbiBRbChlLHQscil7bGV0IG49dUUoZSx0LHIpO2Z1bmN0aW9uIGkobyl7bGV0IGE9YzkuZmxhdHRlbihvLml0ZW1zLm1hcCgoe3RhZzpzLHJ1bnM6bH0pPT5sLm1hcChjPT4oe3RhZzpzLHJ1bjpjfSkpKSk7cmV0dXJuIGEuc29ydChXeGUpLHtuYW1lOm8ubmFtZSxtZXRhZGF0YTpvLm1ldGFkYXRhLGl0ZW1zOmF9fXJldHVybiBuLm1hcChpKX12YXIgdVc9e307S3ModVcse0lyb25SZXNpemFibGVCZWhhdmlvcjooKT0+SnN9KTt2YXIgWXhlPXthdHRhY2hlZDohMCxkZXRhY2hlZDohMCxyZWFkeTohMCxjcmVhdGVkOiEwLGJlZm9yZVJlZ2lzdGVyOiEwLHJlZ2lzdGVyZWQ6ITAsYXR0cmlidXRlQ2hhbmdlZDohMCxsaXN0ZW5lcnM6ITAsaG9zdEF0dHJpYnV0ZXM6ITB9LFJndD17YXR0YWNoZWQ6ITAsZGV0YWNoZWQ6ITAscmVhZHk6ITAsY3JlYXRlZDohMCxiZWZvcmVSZWdpc3RlcjohMCxyZWdpc3RlcmVkOiEwLGF0dHJpYnV0ZUNoYW5nZWQ6ITAsYmVoYXZpb3JzOiEwLF9ub0FjY2Vzc29yczohMH0sanhlPU9iamVjdC5hc3NpZ24oe2xpc3RlbmVyczohMCxob3N0QXR0cmlidXRlczohMCxwcm9wZXJ0aWVzOiEwLG9ic2VydmVyczohMH0sUmd0KTtmdW5jdGlvbiBYeGUoZSx0LHIpe2xldCBuPWUuX25vQWNjZXNzb3JzLGk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspe2xldCBhPWlbb107aWYoIShhIGluIHIpKWlmKG4pdFthXT1lW2FdO2Vsc2V7bGV0IHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGEpO3MmJihzLmNvbmZpZ3VyYWJsZT0hMCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxhLHMpKX19fWZ1bmN0aW9uIE5ndChlLHQpe3JldHVybiB6Z3Qoe30sR3QodCksZSl9ZnVuY3Rpb24gJHhlKGUsdCxyKXtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKylEZ3QoZSx0W25dLHIsanhlKX1mdW5jdGlvbiBEZ3QoZSx0LHIsbil7WHhlKHQsZSxuKTtmb3IobGV0IGkgaW4gWXhlKXRbaV0mJihyW2ldPXJbaV18fFtdLHJbaV0ucHVzaCh0W2ldKSl9ZnVuY3Rpb24gT2d0KGUsdCxyKXt0PXR8fFtdO2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKXtsZXQgaT1lW25dO2k/QXJyYXkuaXNBcnJheShpKT9PZ3QoaSx0KTp0LmluZGV4T2YoaSk8MCYmKCFyfHxyLmluZGV4T2YoaSk8MCkmJnQudW5zaGlmdChpKTpjb25zb2xlLndhcm4oImJlaGF2aW9yIGlzIG51bGwsIGNoZWNrIGZvciBtaXNzaW5nIG9yIDQwNCBpbXBvcnQiKX1yZXR1cm4gdH1mdW5jdGlvbiBMZ3QoZSx0KXtmb3IobGV0IHIgaW4gdCl7bGV0IG49ZVtyXSxpPXRbcl07ISgidmFsdWUiaW4gaSkmJm4mJiJ2YWx1ZSJpbiBuP2Vbcl09T2JqZWN0LmFzc2lnbih7dmFsdWU6bi52YWx1ZX0saSk6ZVtyXT1pfX12YXIga2d0PUd0KEhUTUxFbGVtZW50KTtmdW5jdGlvbiB6Z3QoZSx0LHIpe2xldCBuLGk9e307Y2xhc3MgbyBleHRlbmRzIHR7c3RhdGljIF9maW5hbGl6ZUNsYXNzKCl7aWYoIXRoaXMuaGFzT3duUHJvcGVydHkoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiZ2VuZXJhdGVkRnJvbSIsdGhpcykpKXQuX2ZpbmFsaXplQ2xhc3MuY2FsbCh0aGlzKTtlbHNle2lmKG4pZm9yKGxldCBsPTAsYztsPG4ubGVuZ3RoO2wrKyljPW5bbF0sYy5wcm9wZXJ0aWVzJiZ0aGlzLmNyZWF0ZVByb3BlcnRpZXMoYy5wcm9wZXJ0aWVzKSxjLm9ic2VydmVycyYmdGhpcy5jcmVhdGVPYnNlcnZlcnMoYy5vYnNlcnZlcnMsYy5wcm9wZXJ0aWVzKTtlLnByb3BlcnRpZXMmJnRoaXMuY3JlYXRlUHJvcGVydGllcyhlLnByb3BlcnRpZXMpLGUub2JzZXJ2ZXJzJiZ0aGlzLmNyZWF0ZU9ic2VydmVycyhlLm9ic2VydmVycyxlLnByb3BlcnRpZXMpLHRoaXMuX3ByZXBhcmVUZW1wbGF0ZSgpfX1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtsZXQgbD17fTtpZihuKWZvcihsZXQgYz0wO2M8bi5sZW5ndGg7YysrKUxndChsLG5bY10ucHJvcGVydGllcyk7cmV0dXJuIExndChsLGUucHJvcGVydGllcyksbH1zdGF0aWMgZ2V0IG9ic2VydmVycygpe2xldCBsPVtdO2lmKG4pZm9yKGxldCBjPTAsdTtjPG4ubGVuZ3RoO2MrKyl1PW5bY10sdS5vYnNlcnZlcnMmJihsPWwuY29uY2F0KHUub2JzZXJ2ZXJzKSk7cmV0dXJuIGUub2JzZXJ2ZXJzJiYobD1sLmNvbmNhdChlLm9ic2VydmVycykpLGx9Y3JlYXRlZCgpe3N1cGVyLmNyZWF0ZWQoKTtsZXQgbD1pLmNyZWF0ZWQ7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9X3JlZ2lzdGVyZWQoKXtsZXQgbD1vLnByb3RvdHlwZTtpZighbC5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfX2hhc1JlZ2lzdGVyRmluaXNoZWQiLGwpKSl7bC5fX2hhc1JlZ2lzdGVyRmluaXNoZWQ9ITAsc3VwZXIuX3JlZ2lzdGVyZWQoKSxwcCYmYShsKTtsZXQgYz1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyksdT1pLmJlZm9yZVJlZ2lzdGVyO2lmKHUpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKyspdVtoXS5jYWxsKGMpO2lmKHU9aS5yZWdpc3RlcmVkLHUpZm9yKGxldCBoPTA7aDx1Lmxlbmd0aDtoKyspdVtoXS5jYWxsKGMpfX1fYXBwbHlMaXN0ZW5lcnMoKXtzdXBlci5fYXBwbHlMaXN0ZW5lcnMoKTtsZXQgbD1pLmxpc3RlbmVycztpZihsKWZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXtsZXQgdT1sW2NdO2lmKHUpZm9yKGxldCBoIGluIHUpdGhpcy5fYWRkTWV0aG9kRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLGgsdVtoXSl9fV9lbnN1cmVBdHRyaWJ1dGVzKCl7bGV0IGw9aS5ob3N0QXR0cmlidXRlcztpZihsKWZvcihsZXQgYz1sLmxlbmd0aC0xO2M+PTA7Yy0tKXtsZXQgdT1sW2NdO2ZvcihsZXQgaCBpbiB1KXRoaXMuX2Vuc3VyZUF0dHJpYnV0ZShoLHVbaF0pfXN1cGVyLl9lbnN1cmVBdHRyaWJ1dGVzKCl9cmVhZHkoKXtzdXBlci5yZWFkeSgpO2xldCBsPWkucmVhZHk7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9YXR0YWNoZWQoKXtzdXBlci5hdHRhY2hlZCgpO2xldCBsPWkuYXR0YWNoZWQ7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9ZGV0YWNoZWQoKXtzdXBlci5kZXRhY2hlZCgpO2xldCBsPWkuZGV0YWNoZWQ7aWYobClmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKylsW2NdLmNhbGwodGhpcyl9YXR0cmlidXRlQ2hhbmdlZChsLGMsdSl7c3VwZXIuYXR0cmlidXRlQ2hhbmdlZCgpO2xldCBoPWkuYXR0cmlidXRlQ2hhbmdlZDtpZihoKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWhbZl0uY2FsbCh0aGlzLGwsYyx1KX19aWYocil7QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKTtsZXQgcz10LnByb3RvdHlwZS5iZWhhdmlvcnM7bj1PZ3QocixudWxsLHMpLG8ucHJvdG90eXBlLmJlaGF2aW9ycz1zP3MuY29uY2F0KHIpOm59bGV0IGE9cz0+e24mJiR4ZShzLG4saSksRGd0KHMsZSxpLFJndCl9O3JldHVybiBwcHx8YShvLnByb3RvdHlwZSksby5nZW5lcmF0ZWRGcm9tPWUsb312YXIgdTk9ZnVuY3Rpb24oZSx0KXtlfHxjb25zb2xlLndhcm4oIlBvbHltZXIuQ2xhc3MgcmVxdWlyZXMgYGluZm9gIGFyZ3VtZW50Iik7bGV0IHI9dD90KGtndCk6a2d0O3JldHVybiByPXpndChlLHIsZS5iZWhhdmlvcnMpLHIuaXM9ci5wcm90b3R5cGUuaXM9ZS5pcyxyfTt2YXIgWXQ9ZnVuY3Rpb24oZSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBlPT0iZnVuY3Rpb24iP3Q9ZTp0PVl0LkNsYXNzKGUpLGUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzJiYodC5wcm90b3R5cGUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzPWUuX2xlZ2FjeUZvcmNlT2JzZXJ2ZWRBdHRyaWJ1dGVzKSxjdXN0b21FbGVtZW50cy5kZWZpbmUodC5pcyx0KSx0fTtZdC5DbGFzcz11OTtmdW5jdGlvbiByVyhlLHQscixuLGkpe2xldCBvO2kmJihvPXR5cGVvZiByPT0ib2JqZWN0IiYmciE9PW51bGwsbyYmKG49ZS5fX2RhdGFUZW1wW3RdKSk7bGV0IGE9biE9PXImJihuPT09bnx8cj09PXIpO3JldHVybiBvJiZhJiYoZS5fX2RhdGFUZW1wW3RdPXIpLGF9dmFyIEd4PU5uKGU9PntjbGFzcyB0IGV4dGVuZHMgZXtfc2hvdWxkUHJvcGVydHlDaGFuZ2UobixpLG8pe3JldHVybiByVyh0aGlzLG4saSxvLCEwKX19cmV0dXJuIHR9KSxoOT1ObihlPT57Y2xhc3MgdCBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue211dGFibGVEYXRhOkJvb2xlYW59fV9zaG91bGRQcm9wZXJ0eUNoYW5nZShuLGksbyl7cmV0dXJuIHJXKHRoaXMsbixpLG8sdGhpcy5tdXRhYmxlRGF0YSl9fXJldHVybiB0fSk7R3guX211dGFibGVQcm9wZXJ0eUNoYW5nZT1yVzt2YXIgblc9bnVsbDtmdW5jdGlvbiBpVygpe3JldHVybiBuV31pVy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShIVE1MVGVtcGxhdGVFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmlXLHdyaXRhYmxlOiEwfX0pO3ZhciBCZ3Q9dV8oaVcpLEt4ZT1HeChCZ3QpO2Z1bmN0aW9uIFp4ZShlLHQpe25XPWUsT2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdC5wcm90b3R5cGUpLG5ldyB0LG5XPW51bGx9dmFyIEp4ZT11XyhjbGFzc3t9KTtmdW5jdGlvbiBvVyhlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgbj10W3JdO2lmKEJvb2xlYW4oZSkhPUJvb2xlYW4obi5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pKWlmKG4ubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSllPyhuLl9fcG9seW1lclRleHRDb250ZW50X189bi50ZXh0Q29udGVudCxuLnRleHRDb250ZW50PSIiKTpuLnRleHRDb250ZW50PW4uX19wb2x5bWVyVGV4dENvbnRlbnRfXztlbHNlIGlmKG4ubG9jYWxOYW1lPT09InNsb3QiKWlmKGUpbi5fX3BvbHltZXJSZXBsYWNlZF9fPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImhpZGRlbi1zbG90IiksdWUodWUobikucGFyZW50Tm9kZSkucmVwbGFjZUNoaWxkKG4uX19wb2x5bWVyUmVwbGFjZWRfXyxuKTtlbHNle2xldCBpPW4uX19wb2x5bWVyUmVwbGFjZWRfXztpJiZ1ZSh1ZShpKS5wYXJlbnROb2RlKS5yZXBsYWNlQ2hpbGQobixpKX1lbHNlIG4uc3R5bGUmJihlPyhuLl9fcG9seW1lckRpc3BsYXlfXz1uLnN0eWxlLmRpc3BsYXksbi5zdHlsZS5kaXNwbGF5PSJub25lIik6bi5zdHlsZS5kaXNwbGF5PW4uX19wb2x5bWVyRGlzcGxheV9fKTtuLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz1lLG4uX3Nob3dIaWRlQ2hpbGRyZW4mJm4uX3Nob3dIaWRlQ2hpbGRyZW4oZSl9fXZhciBiaD1jbGFzcyBleHRlbmRzIEp4ZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2NvbmZpZ3VyZVByb3BlcnRpZXModCksdGhpcy5yb290PXRoaXMuX3N0YW1wVGVtcGxhdGUodGhpcy5fX2RhdGFIb3N0KTtsZXQgcj1bXTt0aGlzLmNoaWxkcmVuPXI7Zm9yKGxldCBpPXRoaXMucm9vdC5maXJzdENoaWxkO2k7aT1pLm5leHRTaWJsaW5nKXIucHVzaChpKSxpLl9fdGVtcGxhdGl6ZUluc3RhbmNlPXRoaXM7dGhpcy5fX3RlbXBsYXRpemVPd25lciYmdGhpcy5fX3RlbXBsYXRpemVPd25lci5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18mJnRoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oITApO2xldCBuPXRoaXMuX190ZW1wbGF0aXplT3B0aW9uczsodCYmbi5pbnN0YW5jZVByb3BzfHwhbi5pbnN0YW5jZVByb3BzKSYmdGhpcy5fZW5hYmxlUHJvcGVydGllcygpfV9jb25maWd1cmVQcm9wZXJ0aWVzKHQpe2lmKHRoaXMuX190ZW1wbGF0aXplT3B0aW9ucy5mb3J3YXJkSG9zdFByb3ApZm9yKGxldCBuIGluIHRoaXMuX19ob3N0UHJvcHMpdGhpcy5fc2V0UGVuZGluZ1Byb3BlcnR5KG4sdGhpcy5fX2RhdGFIb3N0WyJfaG9zdF8iK25dKTtmb3IobGV0IG4gaW4gdCl0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHkobix0W25dKX1mb3J3YXJkSG9zdFByb3AodCxyKXt0aGlzLl9zZXRQZW5kaW5nUHJvcGVydHlPclBhdGgodCxyLCExLCEwKSYmdGhpcy5fX2RhdGFIb3N0Ll9lbnF1ZXVlQ2xpZW50KHRoaXMpfV9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHQscixuKXtpZih0aGlzLl9tZXRob2RIb3N0JiZ0aGlzLl9fdGVtcGxhdGl6ZU9wdGlvbnMucGFyZW50TW9kZWwpdGhpcy5fbWV0aG9kSG9zdC5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0LHIsaT0+e2kubW9kZWw9dGhpcyxuKGkpfSk7ZWxzZXtsZXQgaT10aGlzLl9fZGF0YUhvc3QuX19kYXRhSG9zdDtpJiZpLl9hZGRFdmVudExpc3RlbmVyVG9Ob2RlKHQscixuKX19X3Nob3dIaWRlQ2hpbGRyZW4odCl7b1codCx0aGlzLmNoaWxkcmVuKX1fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxyLG4pe3QuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fJiZ0Lm5vZGVUeXBlPT1Ob2RlLlRFWFRfTk9ERSYmcj09InRleHRDb250ZW50Ij90Ll9fcG9seW1lclRleHRDb250ZW50X189bjpzdXBlci5fc2V0VW5tYW5hZ2VkUHJvcGVydHlUb05vZGUodCxyLG4pfWdldCBwYXJlbnRNb2RlbCgpe2xldCB0PXRoaXMuX19wYXJlbnRNb2RlbDtpZighdCl7bGV0IHI7dD10aGlzO2RvIHQ9dC5fX2RhdGFIb3N0Ll9fZGF0YUhvc3Q7d2hpbGUoKHI9dC5fX3RlbXBsYXRpemVPcHRpb25zKSYmIXIucGFyZW50TW9kZWwpO3RoaXMuX19wYXJlbnRNb2RlbD10fXJldHVybiB0fWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuITB9fTtiaC5wcm90b3R5cGUuX19kYXRhSG9zdDtiaC5wcm90b3R5cGUuX190ZW1wbGF0aXplT3B0aW9ucztiaC5wcm90b3R5cGUuX21ldGhvZEhvc3Q7YmgucHJvdG90eXBlLl9fdGVtcGxhdGl6ZU93bmVyO2JoLnByb3RvdHlwZS5fX2hvc3RQcm9wczt2YXIgUXhlPUd4KGJoKTtmdW5jdGlvbiBGZ3QoZSl7bGV0IHQ9ZS5fX2RhdGFIb3N0O3JldHVybiB0JiZ0Ll9tZXRob2RIb3N0fHx0fWZ1bmN0aW9uIHRiZShlLHQscil7bGV0IG49ci5tdXRhYmxlRGF0YT9ReGU6Ymg7dGMubWl4aW4mJihuPXRjLm1peGluKG4pKTtsZXQgaT1jbGFzcyBleHRlbmRzIG57fTtyZXR1cm4gaS5wcm90b3R5cGUuX190ZW1wbGF0aXplT3B0aW9ucz1yLGkucHJvdG90eXBlLl9iaW5kVGVtcGxhdGUoZSksbmJlKGksZSx0LHIpLGl9ZnVuY3Rpb24gZWJlKGUsdCxyLG4pe2xldCBpPXIuZm9yd2FyZEhvc3RQcm9wO2lmKGkmJnQuaGFzSG9zdFByb3BzKXtsZXQgbz1lLmxvY2FsTmFtZT09InRlbXBsYXRlIixhPXQudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M7aWYoIWEpe2lmKG8pe2xldCBsPXIubXV0YWJsZURhdGE/S3hlOkJndDtjbGFzcyBjIGV4dGVuZHMgbHt9YT10LnRlbXBsYXRpemVUZW1wbGF0ZUNsYXNzPWN9ZWxzZXtsZXQgbD1lLmNvbnN0cnVjdG9yO2NsYXNzIGMgZXh0ZW5kcyBse31hPXQudGVtcGxhdGl6ZVRlbXBsYXRlQ2xhc3M9Y31sZXQgcz10Lmhvc3RQcm9wcztmb3IobGV0IGwgaW4gcylhLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QoIl9ob3N0XyIrbCxhLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuUFJPUEFHQVRFLHtmbjpyYmUobCxpKX0pLGEucHJvdG90eXBlLl9jcmVhdGVOb3RpZnlpbmdQcm9wZXJ0eSgiX2hvc3RfIitsKTtJSSYmbiYmYWJlKHQscixuKX1pZihlLl9fZGF0YVByb3RvJiZPYmplY3QuYXNzaWduKGUuX19kYXRhLGUuX19kYXRhUHJvdG8pLG8pWnhlKGUsYSksZS5fX2RhdGFUZW1wPXt9LGUuX19kYXRhUGVuZGluZz1udWxsLGUuX19kYXRhT2xkPW51bGwsZS5fZW5hYmxlUHJvcGVydGllcygpO2Vsc2V7T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsYS5wcm90b3R5cGUpO2xldCBzPXQuaG9zdFByb3BzO2ZvcihsZXQgbCBpbiBzKWlmKGw9Il9ob3N0XyIrbCxsIGluIGUpe2xldCBjPWVbbF07ZGVsZXRlIGVbbF0sZS5fX2RhdGFbbF09Y319fX1mdW5jdGlvbiByYmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24obixpLG8pe3QuY2FsbChuLl9fdGVtcGxhdGl6ZU93bmVyLGkuc3Vic3RyaW5nKDYpLG9baV0pfX1mdW5jdGlvbiBuYmUoZSx0LHIsbil7bGV0IGk9ci5ob3N0UHJvcHN8fHt9O2ZvcihsZXQgbyBpbiBuLmluc3RhbmNlUHJvcHMpe2RlbGV0ZSBpW29dO2xldCBhPW4ubm90aWZ5SW5zdGFuY2VQcm9wO2EmJmUucHJvdG90eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdChvLGUucHJvdG90eXBlLlBST1BFUlRZX0VGRkVDVF9UWVBFUy5OT1RJRlkse2ZuOmliZShvLGEpfSl9aWYobi5mb3J3YXJkSG9zdFByb3AmJnQuX19kYXRhSG9zdClmb3IobGV0IG8gaW4gaSlyLmhhc0hvc3RQcm9wc3x8KHIuaGFzSG9zdFByb3BzPSEwKSxlLnByb3RvdHlwZS5fYWRkUHJvcGVydHlFZmZlY3QobyxlLnByb3RvdHlwZS5QUk9QRVJUWV9FRkZFQ1RfVFlQRVMuTk9USUZZLHtmbjpvYmUoKX0pfWZ1bmN0aW9uIGliZShlLHQpe3JldHVybiBmdW5jdGlvbihuLGksbyl7dC5jYWxsKG4uX190ZW1wbGF0aXplT3duZXIsbixpLG9baV0pfX1mdW5jdGlvbiBvYmUoKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3QuX19kYXRhSG9zdC5fc2V0UGVuZGluZ1Byb3BlcnR5T3JQYXRoKCJfaG9zdF8iK3IsbltyXSwhMCwhMCl9fWZ1bmN0aW9uIHRjKGUsdCxyKXtpZihpdSYmIUZndChlKSl0aHJvdyBuZXcgRXJyb3IoInN0cmljdFRlbXBsYXRlUG9saWN5OiB0ZW1wbGF0ZSBvd25lciBub3QgdHJ1c3RlZCIpO2lmKHI9cnx8e30sZS5fX3RlbXBsYXRpemVPd25lcil0aHJvdyBuZXcgRXJyb3IoIkEgPHRlbXBsYXRlPiBjYW4gb25seSBiZSB0ZW1wbGF0aXplZCBvbmNlIik7ZS5fX3RlbXBsYXRpemVPd25lcj10O2xldCBpPSh0P3QuY29uc3RydWN0b3I6YmgpLl9wYXJzZVRlbXBsYXRlKGUpLG89aS50ZW1wbGF0aXplSW5zdGFuY2VDbGFzcztvfHwobz10YmUoZSxpLHIpLGkudGVtcGxhdGl6ZUluc3RhbmNlQ2xhc3M9byk7bGV0IGE9Rmd0KGUpO2ViZShlLGkscixhKTtsZXQgcz1jbGFzcyBleHRlbmRzIG97fTtyZXR1cm4gcy5wcm90b3R5cGUuX21ldGhvZEhvc3Q9YSxzLnByb3RvdHlwZS5fX2RhdGFIb3N0PWUscy5wcm90b3R5cGUuX190ZW1wbGF0aXplT3duZXI9dCxzLnByb3RvdHlwZS5fX2hvc3RQcm9wcz1pLmhvc3RQcm9wcyxzPXMsc31mdW5jdGlvbiBhYmUoZSx0LHIpe2xldCBuPXIuY29uc3RydWN0b3IuX3Byb3BlcnRpZXMse3Byb3BlcnR5RWZmZWN0czppfT1lLHtpbnN0YW5jZVByb3BzOm99PXQ7Zm9yKGxldCBhIGluIGkpaWYoIW5bYV0mJiEobyYmb1thXSkpe2xldCBzPWlbYV07Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKyspe2xldHtwYXJ0OmN9PXNbbF0uaW5mbztpZighKGMuc2lnbmF0dXJlJiZjLnNpZ25hdHVyZS5zdGF0aWMpKXtjb25zb2xlLndhcm4oYFByb3BlcnR5ICcke2F9JyB1c2VkIGluIHRlbXBsYXRlIGJ1dCBub3QgZGVjbGFyZWQgaW4gJ3Byb3BlcnRpZXMnOyBhdHRyaWJ1dGUgd2lsbCBub3QgYmUgb2JzZXJ2ZWQuYCk7YnJlYWt9fX19ZnVuY3Rpb24gZjkoZSx0KXtsZXQgcjtmb3IoO3Q7KWlmKHI9dC5fX2RhdGFIb3N0P3Q6dC5fX3RlbXBsYXRpemVJbnN0YW5jZSlpZihyLl9fZGF0YUhvc3QhPWUpdD1yLl9fZGF0YUhvc3Q7ZWxzZSByZXR1cm4gcjtlbHNlIHQ9dWUodCkucGFyZW50Tm9kZTtyZXR1cm4gbnVsbH12YXIgSGd0PXt0ZW1wbGF0aXplKGUsdCl7dGhpcy5fdGVtcGxhdGl6ZXJUZW1wbGF0ZT1lLHRoaXMuY3Rvcj10YyhlLHRoaXMse211dGFibGVEYXRhOkJvb2xlYW4odCkscGFyZW50TW9kZWw6dGhpcy5fcGFyZW50TW9kZWwsaW5zdGFuY2VQcm9wczp0aGlzLl9pbnN0YW5jZVByb3BzLGZvcndhcmRIb3N0UHJvcDp0aGlzLl9mb3J3YXJkSG9zdFByb3BWMixub3RpZnlJbnN0YW5jZVByb3A6dGhpcy5fbm90aWZ5SW5zdGFuY2VQcm9wVjJ9KX0sc3RhbXAoZSl7cmV0dXJuIG5ldyB0aGlzLmN0b3IoZSl9LG1vZGVsRm9yRWxlbWVudChlKXtyZXR1cm4gZjkodGhpcy5fdGVtcGxhdGl6ZXJUZW1wbGF0ZSxlKX19O3ZhciBWZ3Q9ITE7ZnVuY3Rpb24gV3goKXtpZihwcCYmIWNfKXtpZighVmd0KXtWZ3Q9ITA7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtlLnRleHRDb250ZW50PSJkb20tYmluZCxkb20taWYsZG9tLXJlcGVhdHtkaXNwbGF5Om5vbmU7fSIsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChlKX1yZXR1cm4hMH1yZXR1cm4hMX12YXIgc2JlPXloKGg5KHVfKEhUTUxFbGVtZW50KSkpLGFXPWNsYXNzIGV4dGVuZHMgc2Jle3N0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7cmV0dXJuWyJtdXRhYmxlLWRhdGEiXX1jb25zdHJ1Y3Rvcigpe2lmKHN1cGVyKCksaXUpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogZG9tLWJpbmQgbm90IGFsbG93ZWQiKTt0aGlzLnJvb3Q9bnVsbCx0aGlzLiQ9bnVsbCx0aGlzLl9fY2hpbGRyZW49bnVsbH1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4saSl7dGhpcy5tdXRhYmxlRGF0YT0hMH1jb25uZWN0ZWRDYWxsYmFjaygpe1d4KCl8fCh0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbmRlcigpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5fX3JlbW92ZUNoaWxkcmVuKCl9X19pbnNlcnRDaGlsZHJlbigpe3VlKHVlKHRoaXMpLnBhcmVudE5vZGUpLmluc2VydEJlZm9yZSh0aGlzLnJvb3QsdGhpcyl9X19yZW1vdmVDaGlsZHJlbigpe2lmKHRoaXMuX19jaGlsZHJlbilmb3IobGV0IHQ9MDt0PHRoaXMuX19jaGlsZHJlbi5sZW5ndGg7dCsrKXRoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLl9fY2hpbGRyZW5bdF0pfXJlbmRlcigpe2xldCB0O2lmKCF0aGlzLl9fY2hpbGRyZW4pe2lmKHQ9dHx8dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLCF0KXtsZXQgcj1uZXcgTXV0YXRpb25PYnNlcnZlcigoKT0+e2lmKHQ9dGhpcy5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpLHQpci5kaXNjb25uZWN0KCksdGhpcy5yZW5kZXIoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiZG9tLWJpbmQgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIil9KTtyLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OiEwfSk7cmV0dXJufXRoaXMucm9vdD10aGlzLl9zdGFtcFRlbXBsYXRlKHQpLHRoaXMuJD10aGlzLnJvb3QuJCx0aGlzLl9fY2hpbGRyZW49W107Zm9yKGxldCByPXRoaXMucm9vdC5maXJzdENoaWxkO3I7cj1yLm5leHRTaWJsaW5nKXRoaXMuX19jaGlsZHJlblt0aGlzLl9fY2hpbGRyZW4ubGVuZ3RoXT1yO3RoaXMuX2VuYWJsZVByb3BlcnRpZXMoKX10aGlzLl9faW5zZXJ0Q2hpbGRyZW4oKSx0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkb20tY2hhbmdlIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZSgiZG9tLWJpbmQiLGFXKTt2YXIgbGJlPWg5KG10KSxwOT1jbGFzcyBleHRlbmRzIGxiZXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImRvbS1yZXBlYXQifXN0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gbnVsbH1zdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LGl0ZW1zSW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6Iml0ZW1zSW5kZXgifSxzb3J0Ont0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX3NvcnRDaGFuZ2VkIn0sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOiJfX2ZpbHRlckNoYW5nZWQifSxvYnNlcnZlOnt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX19vYnNlcnZlQ2hhbmdlZCJ9LGRlbGF5Ok51bWJlcixyZW5kZXJlZEl0ZW1Db3VudDp7dHlwZTpOdW1iZXIsbm90aWZ5OiFVTSxyZWFkT25seTohMH0saW5pdGlhbENvdW50Ont0eXBlOk51bWJlcn0sdGFyZ2V0RnJhbWVyYXRlOnt0eXBlOk51bWJlcix2YWx1ZToyMH0sX3RhcmdldEZyYW1lVGltZTp7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9fY29tcHV0ZUZyYW1lVGltZSh0YXJnZXRGcmFtZXJhdGUpIn0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59LHJldXNlQ2h1bmtlZEluc3RhbmNlczp7dHlwZTpCb29sZWFufX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9faXRlbXNDaGFuZ2VkKGl0ZW1zLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pbnN0YW5jZXM9W10sdGhpcy5fX3JlbmRlckRlYm91bmNlcj1udWxsLHRoaXMuX19pdGVtc0lkeFRvSW5zdElkeD17fSx0aGlzLl9fY2h1bmtDb3VudD1udWxsLHRoaXMuX19yZW5kZXJTdGFydFRpbWU9bnVsbCx0aGlzLl9faXRlbXNBcnJheUNoYW5nZWQ9ITEsdGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVuaz0hMSx0aGlzLl9fc2hvdWxkQ29udGludWVDaHVua2luZz0hMSx0aGlzLl9fY2h1bmtpbmdJZD0wLHRoaXMuX19zb3J0Rm49bnVsbCx0aGlzLl9fZmlsdGVyRm49bnVsbCx0aGlzLl9fb2JzZXJ2ZVBhdGhzPW51bGwsdGhpcy5fX2N0b3I9bnVsbCx0aGlzLl9faXNEZXRhY2hlZD0hMCx0aGlzLnRlbXBsYXRlPW51bGwsdGhpcy5fdGVtcGxhdGVJbmZvfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9faXNEZXRhY2hlZD0hMDtmb3IobGV0IHQ9MDt0PHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO3QrKyl0aGlzLl9fZGV0YWNoSW5zdGFuY2UodCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtpZihzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLFd4KCl8fCh0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLl9faXNEZXRhY2hlZCl7dGhpcy5fX2lzRGV0YWNoZWQ9ITE7bGV0IHQ9dWUodWUodGhpcykucGFyZW50Tm9kZSk7Zm9yKGxldCByPTA7cjx0aGlzLl9faW5zdGFuY2VzLmxlbmd0aDtyKyspdGhpcy5fX2F0dGFjaEluc3RhbmNlKHIsdCl9fV9fZW5zdXJlVGVtcGxhdGl6ZWQoKXtpZighdGhpcy5fX2N0b3Ipe2xldCB0PXRoaXMscj10aGlzLnRlbXBsYXRlPXQuX3RlbXBsYXRlSW5mbz90OnRoaXMucXVlcnlTZWxlY3RvcigidGVtcGxhdGUiKTtpZighcil7bGV0IGk9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCk9PntpZih0aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIikpaS5kaXNjb25uZWN0KCksdGhpcy5fX3JlbmRlcigpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJkb20tcmVwZWF0IHJlcXVpcmVzIGEgPHRlbXBsYXRlPiBjaGlsZCIpfSk7cmV0dXJuIGkub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSwhMX1sZXQgbj17fTtuW3RoaXMuYXNdPSEwLG5bdGhpcy5pbmRleEFzXT0hMCxuW3RoaXMuaXRlbXNJbmRleEFzXT0hMCx0aGlzLl9fY3Rvcj10YyhyLHRoaXMse211dGFibGVEYXRhOnRoaXMubXV0YWJsZURhdGEscGFyZW50TW9kZWw6ITAsaW5zdGFuY2VQcm9wczpuLGZvcndhcmRIb3N0UHJvcDpmdW5jdGlvbihpLG8pe2xldCBhPXRoaXMuX19pbnN0YW5jZXM7Zm9yKGxldCBzPTAsbDtzPGEubGVuZ3RoJiYobD1hW3NdKTtzKyspbC5mb3J3YXJkSG9zdFByb3AoaSxvKX0sbm90aWZ5SW5zdGFuY2VQcm9wOmZ1bmN0aW9uKGksbyxhKXtpZihESSh0aGlzLmFzLG8pKXtsZXQgcz1pW3RoaXMuaXRlbXNJbmRleEFzXTtvPT10aGlzLmFzJiYodGhpcy5pdGVtc1tzXT1hKTtsZXQgbD1kcCh0aGlzLmFzLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtzfWAsbyk7dGhpcy5ub3RpZnlQYXRoKGwsYSl9fX0pfXJldHVybiEwfV9fZ2V0TWV0aG9kSG9zdCgpe3JldHVybiB0aGlzLl9fZGF0YUhvc3QuX21ldGhvZEhvc3R8fHRoaXMuX19kYXRhSG9zdH1fX2Z1bmN0aW9uRnJvbVByb3BlcnR5VmFsdWUodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXtsZXQgcj10LG49dGhpcy5fX2dldE1ldGhvZEhvc3QoKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbltyXS5hcHBseShuLGFyZ3VtZW50cyl9fXJldHVybiB0fV9fc29ydENoYW5nZWQodCl7dGhpcy5fX3NvcnRGbj10aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZSh0KSx0aGlzLml0ZW1zJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X19maWx0ZXJDaGFuZ2VkKHQpe3RoaXMuX19maWx0ZXJGbj10aGlzLl9fZnVuY3Rpb25Gcm9tUHJvcGVydHlWYWx1ZSh0KSx0aGlzLml0ZW1zJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X19jb21wdXRlRnJhbWVUaW1lKHQpe3JldHVybiBNYXRoLmNlaWwoMWUzL3QpfV9fb2JzZXJ2ZUNoYW5nZWQoKXt0aGlzLl9fb2JzZXJ2ZVBhdGhzPXRoaXMub2JzZXJ2ZSYmdGhpcy5vYnNlcnZlLnJlcGxhY2UoIi4qIiwiLiIpLnNwbGl0KCIgIil9X19oYW5kbGVPYnNlcnZlZFBhdGhzKHQpe2lmKHRoaXMuX19zb3J0Rm58fHRoaXMuX19maWx0ZXJGbil7aWYoIXQpdGhpcy5fX2RlYm91bmNlUmVuZGVyKHRoaXMuX19yZW5kZXIsdGhpcy5kZWxheSk7ZWxzZSBpZih0aGlzLl9fb2JzZXJ2ZVBhdGhzKXtsZXQgcj10aGlzLl9fb2JzZXJ2ZVBhdGhzO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQuaW5kZXhPZihyW25dKT09PTAmJnRoaXMuX19kZWJvdW5jZVJlbmRlcih0aGlzLl9fcmVuZGVyLHRoaXMuZGVsYXkpfX19X19pdGVtc0NoYW5nZWQodCl7dGhpcy5pdGVtcyYmIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykmJmNvbnNvbGUud2FybigiZG9tLXJlcGVhdCBleHBlY3RlZCBhcnJheSBmb3IgYGl0ZW1zYCwgZm91bmQiLHRoaXMuaXRlbXMpLHRoaXMuX19oYW5kbGVJdGVtUGF0aCh0LnBhdGgsdC52YWx1ZSl8fCh0LnBhdGg9PT0iaXRlbXMiJiYodGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkPSEwKSx0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcikpfV9fZGVib3VuY2VSZW5kZXIodCxyPTApe3RoaXMuX19yZW5kZXJEZWJvdW5jZXI9c3IuZGVib3VuY2UodGhpcy5fX3JlbmRlckRlYm91bmNlcixyPjA/bW8uYWZ0ZXIocik6Y2ksdC5iaW5kKHRoaXMpKSxKbCh0aGlzLl9fcmVuZGVyRGVib3VuY2VyKX1yZW5kZXIoKXt0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlciksdWkoKX1fX3JlbmRlcigpe2lmKCF0aGlzLl9fZW5zdXJlVGVtcGxhdGl6ZWQoKSlyZXR1cm47bGV0IHQ9dGhpcy5pdGVtc3x8W10scj10aGlzLl9fc29ydEFuZEZpbHRlckl0ZW1zKHQpLG49dGhpcy5fX2NhbGN1bGF0ZUxpbWl0KHIubGVuZ3RoKTt0aGlzLl9fdXBkYXRlSW5zdGFuY2VzKHQsbixyKSx0aGlzLmluaXRpYWxDb3VudCYmKHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bmt8fHRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nKSYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19jaHVua2luZ0lkKSx0aGlzLl9fY2h1bmtpbmdJZD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMuX19jb250aW51ZUNodW5raW5nKCkpKSx0aGlzLl9zZXRSZW5kZXJlZEl0ZW1Db3VudCh0aGlzLl9faW5zdGFuY2VzLmxlbmd0aCksKCFVTXx8dGhpcy5ub3RpZnlEb21DaGFuZ2UpJiZ0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkb20tY2hhbmdlIix7YnViYmxlczohMCxjb21wb3NlZDohMH0pKX1fX3NvcnRBbmRGaWx0ZXJJdGVtcyh0KXtsZXQgcj1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXJbbl09bjtyZXR1cm4gdGhpcy5fX2ZpbHRlckZuJiYocj1yLmZpbHRlcigobixpLG8pPT50aGlzLl9fZmlsdGVyRm4odFtuXSxpLG8pKSksdGhpcy5fX3NvcnRGbiYmci5zb3J0KChuLGkpPT50aGlzLl9fc29ydEZuKHRbbl0sdFtpXSkpLHJ9X19jYWxjdWxhdGVMaW1pdCh0KXtsZXQgcj10LG49dGhpcy5fX2luc3RhbmNlcy5sZW5ndGg7aWYodGhpcy5pbml0aWFsQ291bnQpe2xldCBpOyF0aGlzLl9fY2h1bmtDb3VudHx8dGhpcy5fX2l0ZW1zQXJyYXlDaGFuZ2VkJiYhdGhpcy5yZXVzZUNodW5rZWRJbnN0YW5jZXM/KHI9TWF0aC5taW4odCx0aGlzLmluaXRpYWxDb3VudCksaT1NYXRoLm1heChyLW4sMCksdGhpcy5fX2NodW5rQ291bnQ9aXx8MSk6KGk9TWF0aC5taW4oTWF0aC5tYXgodC1uLDApLHRoaXMuX19jaHVua0NvdW50KSxyPU1hdGgubWluKG4raSx0KSksdGhpcy5fX3Nob3VsZE1lYXN1cmVDaHVuaz1pPT09dGhpcy5fX2NodW5rQ291bnQsdGhpcy5fX3Nob3VsZENvbnRpbnVlQ2h1bmtpbmc9cjx0LHRoaXMuX19yZW5kZXJTdGFydFRpbWU9cGVyZm9ybWFuY2Uubm93KCl9cmV0dXJuIHRoaXMuX19pdGVtc0FycmF5Q2hhbmdlZD0hMSxyfV9fY29udGludWVDaHVua2luZygpe2lmKHRoaXMuX19zaG91bGRNZWFzdXJlQ2h1bmspe2xldCB0PXBlcmZvcm1hbmNlLm5vdygpLXRoaXMuX19yZW5kZXJTdGFydFRpbWUscj10aGlzLl90YXJnZXRGcmFtZVRpbWUvdDt0aGlzLl9fY2h1bmtDb3VudD1NYXRoLnJvdW5kKHRoaXMuX19jaHVua0NvdW50KnIpfHwxfXRoaXMuX19zaG91bGRDb250aW51ZUNodW5raW5nJiZ0aGlzLl9fZGVib3VuY2VSZW5kZXIodGhpcy5fX3JlbmRlcil9X191cGRhdGVJbnN0YW5jZXModCxyLG4pe2xldCBpPXRoaXMuX19pdGVtc0lkeFRvSW5zdElkeD17fSxvO2ZvcihvPTA7bzxyO28rKyl7bGV0IGE9dGhpcy5fX2luc3RhbmNlc1tvXSxzPW5bb10sbD10W3NdO2lbc109byxhPyhhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5hcyxsKSxhLl9zZXRQZW5kaW5nUHJvcGVydHkodGhpcy5pbmRleEFzLG8pLGEuX3NldFBlbmRpbmdQcm9wZXJ0eSh0aGlzLml0ZW1zSW5kZXhBcyxzKSxhLl9mbHVzaFByb3BlcnRpZXMoKSk6dGhpcy5fX2luc2VydEluc3RhbmNlKGwsbyxzKX1mb3IobGV0IGE9dGhpcy5fX2luc3RhbmNlcy5sZW5ndGgtMTthPj1vO2EtLSl0aGlzLl9fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UoYSl9X19kZXRhY2hJbnN0YW5jZSh0KXtsZXQgcj10aGlzLl9faW5zdGFuY2VzW3RdLG49dWUoci5yb290KTtmb3IobGV0IGk9MDtpPHIuY2hpbGRyZW4ubGVuZ3RoO2krKyl7bGV0IG89ci5jaGlsZHJlbltpXTtuLmFwcGVuZENoaWxkKG8pfXJldHVybiByfV9fYXR0YWNoSW5zdGFuY2UodCxyKXtsZXQgbj10aGlzLl9faW5zdGFuY2VzW3RdO3IuaW5zZXJ0QmVmb3JlKG4ucm9vdCx0aGlzKX1fX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKHQpe3RoaXMuX19kZXRhY2hJbnN0YW5jZSh0KSx0aGlzLl9faW5zdGFuY2VzLnNwbGljZSh0LDEpfV9fc3RhbXBJbnN0YW5jZSh0LHIsbil7bGV0IGk9e307cmV0dXJuIGlbdGhpcy5hc109dCxpW3RoaXMuaW5kZXhBc109cixpW3RoaXMuaXRlbXNJbmRleEFzXT1uLG5ldyB0aGlzLl9fY3RvcihpKX1fX2luc2VydEluc3RhbmNlKHQscixuKXtsZXQgaT10aGlzLl9fc3RhbXBJbnN0YW5jZSh0LHIsbiksbz10aGlzLl9faW5zdGFuY2VzW3IrMV0sYT1vP28uY2hpbGRyZW5bMF06dGhpcztyZXR1cm4gdWUodWUodGhpcykucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKGkucm9vdCxhKSx0aGlzLl9faW5zdGFuY2VzW3JdPWksaX1fc2hvd0hpZGVDaGlsZHJlbih0KXtmb3IobGV0IHI9MDtyPHRoaXMuX19pbnN0YW5jZXMubGVuZ3RoO3IrKyl0aGlzLl9faW5zdGFuY2VzW3JdLl9zaG93SGlkZUNoaWxkcmVuKHQpfV9faGFuZGxlSXRlbVBhdGgodCxyKXtsZXQgbj10LnNsaWNlKDYpLGk9bi5pbmRleE9mKCIuIiksbz1pPDA/bjpuLnN1YnN0cmluZygwLGkpO2lmKG89PXBhcnNlSW50KG8sMTApKXtsZXQgYT1pPDA/IiI6bi5zdWJzdHJpbmcoaSsxKTt0aGlzLl9faGFuZGxlT2JzZXJ2ZWRQYXRocyhhKTtsZXQgcz10aGlzLl9faXRlbXNJZHhUb0luc3RJZHhbb10sbD10aGlzLl9faW5zdGFuY2VzW3NdO2lmKGwpe2xldCBjPXRoaXMuYXMrKGE/Ii4iK2E6IiIpO2wuX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChjLHIsITEsITApLGwuX2ZsdXNoUHJvcGVydGllcygpfXJldHVybiEwfX1pdGVtRm9yRWxlbWVudCh0KXtsZXQgcj10aGlzLm1vZGVsRm9yRWxlbWVudCh0KTtyZXR1cm4gciYmclt0aGlzLmFzXX1pbmRleEZvckVsZW1lbnQodCl7bGV0IHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCk7cmV0dXJuIHImJnJbdGhpcy5pbmRleEFzXX1tb2RlbEZvckVsZW1lbnQodCl7cmV0dXJuIGY5KHRoaXMudGVtcGxhdGUsdCl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUocDkuaXMscDkpO3ZhciBkOT1jbGFzcyBleHRlbmRzIG10e3N0YXRpYyBnZXQgaXMoKXtyZXR1cm4iZG9tLWlmIn1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2lmOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9fZGVib3VuY2VSZW5kZXIifSxyZXN0YW1wOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9fZGVib3VuY2VSZW5kZXIifSxub3RpZnlEb21DaGFuZ2U6e3R5cGU6Qm9vbGVhbn19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9fcmVuZGVyRGVib3VuY2VyPW51bGwsdGhpcy5fbGFzdElmPSExLHRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fPSExLHRoaXMuX190ZW1wbGF0ZSx0aGlzLl90ZW1wbGF0ZUluZm99X19kZWJvdW5jZVJlbmRlcigpe3RoaXMuX19yZW5kZXJEZWJvdW5jZXI9c3IuZGVib3VuY2UodGhpcy5fX3JlbmRlckRlYm91bmNlcixjaSwoKT0+dGhpcy5fX3JlbmRlcigpKSxKbCh0aGlzLl9fcmVuZGVyRGVib3VuY2VyKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7bGV0IHQ9dWUodGhpcykucGFyZW50Tm9kZTsoIXR8fHQubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmIXVlKHQpLmhvc3QpJiZ0aGlzLl9fdGVhcmRvd25JbnN0YW5jZSgpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxXeCgpfHwodGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5pZiYmdGhpcy5fX2RlYm91bmNlUmVuZGVyKCl9X19lbnN1cmVUZW1wbGF0ZSgpe2lmKCF0aGlzLl9fdGVtcGxhdGUpe2xldCB0PXRoaXMscj10Ll90ZW1wbGF0ZUluZm8/dDp1ZSh0KS5xdWVyeVNlbGVjdG9yKCJ0ZW1wbGF0ZSIpO2lmKCFyKXtsZXQgbj1uZXcgTXV0YXRpb25PYnNlcnZlcigoKT0+e2lmKHVlKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIikpbi5kaXNjb25uZWN0KCksdGhpcy5fX3JlbmRlcigpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJkb20taWYgcmVxdWlyZXMgYSA8dGVtcGxhdGU+IGNoaWxkIil9KTtyZXR1cm4gbi5vYnNlcnZlKHRoaXMse2NoaWxkTGlzdDohMH0pLCExfXRoaXMuX190ZW1wbGF0ZT1yfXJldHVybiEwfV9fZW5zdXJlSW5zdGFuY2UoKXtsZXQgdD11ZSh0aGlzKS5wYXJlbnROb2RlO2lmKHRoaXMuX19oYXNJbnN0YW5jZSgpKXtsZXQgcj10aGlzLl9fZ2V0SW5zdGFuY2VOb2RlcygpO2lmKHImJnIubGVuZ3RoJiZ1ZSh0aGlzKS5wcmV2aW91c1NpYmxpbmchPT1yW3IubGVuZ3RoLTFdKWZvcihsZXQgaT0wLG87aTxyLmxlbmd0aCYmKG89cltpXSk7aSsrKXVlKHQpLmluc2VydEJlZm9yZShvLHRoaXMpfWVsc2V7aWYoIXR8fCF0aGlzLl9fZW5zdXJlVGVtcGxhdGUoKSlyZXR1cm4hMTt0aGlzLl9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl9cmV0dXJuITB9cmVuZGVyKCl7dWkoKX1fX3JlbmRlcigpe2lmKHRoaXMuaWYpe2lmKCF0aGlzLl9fZW5zdXJlSW5zdGFuY2UoKSlyZXR1cm59ZWxzZSB0aGlzLnJlc3RhbXAmJnRoaXMuX190ZWFyZG93bkluc3RhbmNlKCk7dGhpcy5fc2hvd0hpZGVDaGlsZHJlbigpLCghVU18fHRoaXMubm90aWZ5RG9tQ2hhbmdlKSYmdGhpcy5pZiE9dGhpcy5fbGFzdElmJiYodGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZG9tLWNoYW5nZSIse2J1YmJsZXM6ITAsY29tcG9zZWQ6ITB9KSksdGhpcy5fbGFzdElmPXRoaXMuaWYpfV9faGFzSW5zdGFuY2UoKXt9X19nZXRJbnN0YW5jZU5vZGVzKCl7fV9fY3JlYXRlQW5kSW5zZXJ0SW5zdGFuY2UodCl7fV9fdGVhcmRvd25JbnN0YW5jZSgpe31fc2hvd0hpZGVDaGlsZHJlbigpe319LHNXPWNsYXNzIGV4dGVuZHMgZDl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19zeW5jSW5mbz1udWxsfV9faGFzSW5zdGFuY2UoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9faW5zdGFuY2UpfV9fZ2V0SW5zdGFuY2VOb2Rlcygpe3JldHVybiB0aGlzLl9faW5zdGFuY2UudGVtcGxhdGVJbmZvLmNoaWxkTm9kZXN9X19jcmVhdGVBbmRJbnNlcnRJbnN0YW5jZSh0KXtsZXQgcj10aGlzLl9fZGF0YUhvc3R8fHRoaXM7aWYoaXUmJiF0aGlzLl9fZGF0YUhvc3QpdGhyb3cgbmV3IEVycm9yKCJzdHJpY3RUZW1wbGF0ZVBvbGljeTogdGVtcGxhdGUgb3duZXIgbm90IHRydXN0ZWQiKTtsZXQgbj1yLl9iaW5kVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlLCEwKTtuLnJ1bkVmZmVjdHM9KGksbyxhKT0+e2xldCBzPXRoaXMuX19zeW5jSW5mbztpZih0aGlzLmlmKXMmJih0aGlzLl9fc3luY0luZm89bnVsbCx0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCksbz1PYmplY3QuYXNzaWduKHMuY2hhbmdlZFByb3BzLG8pKSxpKG8sYSk7ZWxzZSBpZih0aGlzLl9faW5zdGFuY2UpaWYoc3x8KHM9dGhpcy5fX3N5bmNJbmZvPXtydW5FZmZlY3RzOmksY2hhbmdlZFByb3BzOnt9fSksYSlmb3IobGV0IGwgaW4gbyl7bGV0IGM9YXUobCk7cy5jaGFuZ2VkUHJvcHNbY109dGhpcy5fX2RhdGFIb3N0W2NdfWVsc2UgT2JqZWN0LmFzc2lnbihzLmNoYW5nZWRQcm9wcyxvKX0sdGhpcy5fX2luc3RhbmNlPXIuX3N0YW1wVGVtcGxhdGUodGhpcy5fX3RlbXBsYXRlLG4pLHVlKHQpLmluc2VydEJlZm9yZSh0aGlzLl9faW5zdGFuY2UsdGhpcyl9X19zeW5jSG9zdFByb3BlcnRpZXMoKXtsZXQgdD10aGlzLl9fc3luY0luZm87dCYmKHRoaXMuX19zeW5jSW5mbz1udWxsLHQucnVuRWZmZWN0cyh0LmNoYW5nZWRQcm9wcywhMSkpfV9fdGVhcmRvd25JbnN0YW5jZSgpe2xldCB0PXRoaXMuX19kYXRhSG9zdHx8dGhpczt0aGlzLl9faW5zdGFuY2UmJih0Ll9yZW1vdmVCb3VuZERvbSh0aGlzLl9faW5zdGFuY2UpLHRoaXMuX19pbnN0YW5jZT1udWxsLHRoaXMuX19zeW5jSW5mbz1udWxsKX1fc2hvd0hpZGVDaGlsZHJlbigpe2xldCB0PXRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9ffHwhdGhpcy5pZjt0aGlzLl9faW5zdGFuY2UmJkJvb2xlYW4odGhpcy5fX2luc3RhbmNlLl9faGlkZGVuKSE9PXQmJih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW49dCxvVyh0LHRoaXMuX19pbnN0YW5jZS50ZW1wbGF0ZUluZm8uY2hpbGROb2RlcykpLHR8fHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKX19LGxXPWNsYXNzIGV4dGVuZHMgZDl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19jdG9yPW51bGwsdGhpcy5fX2luc3RhbmNlPW51bGwsdGhpcy5fX2ludmFsaWRQcm9wcz1udWxsfV9faGFzSW5zdGFuY2UoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9faW5zdGFuY2UpfV9fZ2V0SW5zdGFuY2VOb2Rlcygpe3JldHVybiB0aGlzLl9faW5zdGFuY2UuY2hpbGRyZW59X19jcmVhdGVBbmRJbnNlcnRJbnN0YW5jZSh0KXt0aGlzLl9fY3Rvcnx8KHRoaXMuX19jdG9yPXRjKHRoaXMuX190ZW1wbGF0ZSx0aGlzLHttdXRhYmxlRGF0YTohMCxmb3J3YXJkSG9zdFByb3A6ZnVuY3Rpb24ocixuKXt0aGlzLl9faW5zdGFuY2UmJih0aGlzLmlmP3RoaXMuX19pbnN0YW5jZS5mb3J3YXJkSG9zdFByb3AocixuKToodGhpcy5fX2ludmFsaWRQcm9wcz10aGlzLl9faW52YWxpZFByb3BzfHxPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX19pbnZhbGlkUHJvcHNbYXUocildPSEwKSl9fSkpLHRoaXMuX19pbnN0YW5jZT1uZXcgdGhpcy5fX2N0b3IsdWUodCkuaW5zZXJ0QmVmb3JlKHRoaXMuX19pbnN0YW5jZS5yb290LHRoaXMpfV9fdGVhcmRvd25JbnN0YW5jZSgpe2lmKHRoaXMuX19pbnN0YW5jZSl7bGV0IHQ9dGhpcy5fX2luc3RhbmNlLmNoaWxkcmVuO2lmKHQmJnQubGVuZ3RoKXtsZXQgcj11ZSh0WzBdKS5wYXJlbnROb2RlO2lmKHIpe3I9dWUocik7Zm9yKGxldCBuPTAsaTtuPHQubGVuZ3RoJiYoaT10W25dKTtuKyspci5yZW1vdmVDaGlsZChpKX19dGhpcy5fX2ludmFsaWRQcm9wcz1udWxsLHRoaXMuX19pbnN0YW5jZT1udWxsfX1fX3N5bmNIb3N0UHJvcGVydGllcygpe2xldCB0PXRoaXMuX19pbnZhbGlkUHJvcHM7aWYodCl7dGhpcy5fX2ludmFsaWRQcm9wcz1udWxsO2ZvcihsZXQgciBpbiB0KXRoaXMuX19pbnN0YW5jZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHIsdGhpcy5fX2RhdGFIb3N0W3JdKTt0aGlzLl9faW5zdGFuY2UuX2ZsdXNoUHJvcGVydGllcygpfX1fc2hvd0hpZGVDaGlsZHJlbigpe2xldCB0PXRoaXMuX19oaWRlVGVtcGxhdGVDaGlsZHJlbl9ffHwhdGhpcy5pZjt0aGlzLl9faW5zdGFuY2UmJkJvb2xlYW4odGhpcy5fX2luc3RhbmNlLl9faGlkZGVuKSE9PXQmJih0aGlzLl9faW5zdGFuY2UuX19oaWRkZW49dCx0aGlzLl9faW5zdGFuY2UuX3Nob3dIaWRlQ2hpbGRyZW4odCkpLHR8fHRoaXMuX19zeW5jSG9zdFByb3BlcnRpZXMoKX19LFVndD1rST9zVzpsVztjdXN0b21FbGVtZW50cy5kZWZpbmUoVWd0LmlzLFVndCk7dmFyIGNiZT1ObihlPT57bGV0IHQ9U20oZSk7Y2xhc3MgciBleHRlbmRzIHR7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2l0ZW1zOnt0eXBlOkFycmF5fSxtdWx0aTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxzZWxlY3RlZDp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sdG9nZ2xlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX191cGRhdGVTZWxlY3Rpb24obXVsdGksIGl0ZW1zLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX19sYXN0SXRlbXM9bnVsbCx0aGlzLl9fbGFzdE11bHRpPW51bGwsdGhpcy5fX3NlbGVjdGVkTWFwPW51bGx9X191cGRhdGVTZWxlY3Rpb24oaSxvKXtsZXQgYT1vLnBhdGg7aWYoYT09SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpKXtsZXQgcz1vLmJhc2V8fFtdLGw9dGhpcy5fX2xhc3RJdGVtcyxjPXRoaXMuX19sYXN0TXVsdGk7aWYoaSE9PWMmJnRoaXMuY2xlYXJTZWxlY3Rpb24oKSxsKXtsZXQgdT1pOShzLGwpO3RoaXMuX19hcHBseVNwbGljZXModSl9dGhpcy5fX2xhc3RJdGVtcz1zLHRoaXMuX19sYXN0TXVsdGk9aX1lbHNlIGlmKG8ucGF0aD09YCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS5zcGxpY2VzYCl0aGlzLl9fYXBwbHlTcGxpY2VzKG8udmFsdWUuaW5kZXhTcGxpY2VzKTtlbHNle2xldCBzPWEuc2xpY2UoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS5gLmxlbmd0aCksbD1wYXJzZUludChzLDEwKTtzLmluZGV4T2YoIi4iKTwwJiZzPT1sJiZ0aGlzLl9fZGVzZWxlY3RDaGFuZ2VkSWR4KGwpfX1fX2FwcGx5U3BsaWNlcyhpKXtsZXQgbz10aGlzLl9fc2VsZWN0ZWRNYXA7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspe2xldCBsPWlbc107by5mb3JFYWNoKChjLHUpPT57YzxsLmluZGV4fHwoYz49bC5pbmRleCtsLnJlbW92ZWQubGVuZ3RoP28uc2V0KHUsYytsLmFkZGVkQ291bnQtbC5yZW1vdmVkLmxlbmd0aCk6by5zZXQodSwtMSkpfSk7Zm9yKGxldCBjPTA7YzxsLmFkZGVkQ291bnQ7YysrKXtsZXQgdT1sLmluZGV4K2M7by5oYXModGhpcy5pdGVtc1t1XSkmJm8uc2V0KHRoaXMuaXRlbXNbdV0sdSl9fXRoaXMuX191cGRhdGVMaW5rcygpO2xldCBhPTA7by5mb3JFYWNoKChzLGwpPT57czwwPyh0aGlzLm11bHRpP3RoaXMuc3BsaWNlKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxhLDEpOnRoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCxvLmRlbGV0ZShsKSk6YSsrfSl9X191cGRhdGVMaW5rcygpe2lmKHRoaXMuX19kYXRhTGlua2VkUGF0aHM9e30sdGhpcy5tdWx0aSl7bGV0IGk9MDt0aGlzLl9fc2VsZWN0ZWRNYXAuZm9yRWFjaChvPT57bz49MCYmdGhpcy5saW5rUGF0aHMoYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke299YCxgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyl9LiR7aSsrfWApfSl9ZWxzZSB0aGlzLl9fc2VsZWN0ZWRNYXAuZm9yRWFjaChpPT57dGhpcy5saW5rUGF0aHMoSlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgic2VsZWN0ZWQiLHRoaXMpLGAke0pTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIml0ZW1zIix0aGlzKX0uJHtpfWApLHRoaXMubGlua1BhdGhzKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkSXRlbSIsdGhpcyksYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke2l9YCl9KX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX19kYXRhTGlua2VkUGF0aHM9e30sdGhpcy5fX3NlbGVjdGVkTWFwPW5ldyBNYXAsdGhpcy5zZWxlY3RlZD10aGlzLm11bHRpP1tdOm51bGwsdGhpcy5zZWxlY3RlZEl0ZW09bnVsbH1pc1NlbGVjdGVkKGkpe3JldHVybiB0aGlzLl9fc2VsZWN0ZWRNYXAuaGFzKGkpfWlzSW5kZXhTZWxlY3RlZChpKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkKHRoaXMuaXRlbXNbaV0pfV9fZGVzZWxlY3RDaGFuZ2VkSWR4KGkpe2xldCBvPXRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGkpO2lmKG8+PTApe2xldCBhPTA7dGhpcy5fX3NlbGVjdGVkTWFwLmZvckVhY2goKHMsbCk9PntvPT1hKysmJnRoaXMuZGVzZWxlY3QobCl9KX19X19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KGkpe2xldCBvPXRoaXMuX19kYXRhTGlua2VkUGF0aHNbYCR7SlNDb21waWxlcl9yZW5hbWVQcm9wZXJ0eSgiaXRlbXMiLHRoaXMpfS4ke2l9YF07aWYobylyZXR1cm4gcGFyc2VJbnQoby5zbGljZShgJHtKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJzZWxlY3RlZCIsdGhpcyl9LmAubGVuZ3RoKSwxMCl9ZGVzZWxlY3QoaSl7bGV0IG89dGhpcy5fX3NlbGVjdGVkTWFwLmdldChpKTtpZihvPj0wKXt0aGlzLl9fc2VsZWN0ZWRNYXAuZGVsZXRlKGkpO2xldCBhO3RoaXMubXVsdGkmJihhPXRoaXMuX19zZWxlY3RlZEluZGV4Rm9ySXRlbUluZGV4KG8pKSx0aGlzLl9fdXBkYXRlTGlua3MoKSx0aGlzLm11bHRpP3RoaXMuc3BsaWNlKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxhLDEpOnRoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEl0ZW09bnVsbH19ZGVzZWxlY3RJbmRleChpKXt0aGlzLmRlc2VsZWN0KHRoaXMuaXRlbXNbaV0pfXNlbGVjdChpKXt0aGlzLnNlbGVjdEluZGV4KHRoaXMuaXRlbXMuaW5kZXhPZihpKSl9c2VsZWN0SW5kZXgoaSl7bGV0IG89dGhpcy5pdGVtc1tpXTt0aGlzLmlzU2VsZWN0ZWQobyk/dGhpcy50b2dnbGUmJnRoaXMuZGVzZWxlY3RJbmRleChpKToodGhpcy5tdWx0aXx8dGhpcy5fX3NlbGVjdGVkTWFwLmNsZWFyKCksdGhpcy5fX3NlbGVjdGVkTWFwLnNldChvLGkpLHRoaXMuX191cGRhdGVMaW5rcygpLHRoaXMubXVsdGk/dGhpcy5wdXNoKEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoInNlbGVjdGVkIix0aGlzKSxvKTp0aGlzLnNlbGVjdGVkPXRoaXMuc2VsZWN0ZWRJdGVtPW8pfX1yZXR1cm4gcn0pO3ZhciB1YmU9Y2JlKG10KSxtOT1jbGFzcyBleHRlbmRzIHViZXtzdGF0aWMgZ2V0IGlzKCl7cmV0dXJuImFycmF5LXNlbGVjdG9yIn1zdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIG51bGx9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUobTkuaXMsbTkpO3ZhciBnOT1uZXcgWmw7d2luZG93LlNoYWR5Q1NTfHwod2luZG93LlNoYWR5Q1NTPXtwcmVwYXJlVGVtcGxhdGUoZSx0LHIpe30scHJlcGFyZVRlbXBsYXRlRG9tKGUsdCl7fSxwcmVwYXJlVGVtcGxhdGVTdHlsZXMoZSx0LHIpe30sc3R5bGVTdWJ0cmVlKGUsdCl7ZzkucHJvY2Vzc1N0eWxlcygpLEpNKGUsdCl9LHN0eWxlRWxlbWVudChlKXtnOS5wcm9jZXNzU3R5bGVzKCl9LHN0eWxlRG9jdW1lbnQoZSl7ZzkucHJvY2Vzc1N0eWxlcygpLEpNKGRvY3VtZW50LmJvZHksZSl9LGdldENvbXB1dGVkU3R5bGVWYWx1ZShlLHQpe3JldHVybiBZSShlLHQpfSxmbHVzaEN1c3RvbVN0eWxlcygpe30sbmF0aXZlQ3NzOk54LG5hdGl2ZVNoYWRvdzpoXyxjc3NCdWlsZDpNbSxkaXNhYmxlUnVudGltZTpHSX0pO3dpbmRvdy5TaGFkeUNTUy5DdXN0b21TdHlsZUludGVyZmFjZT1nOTt2YXIgcWd0PSJpbmNsdWRlIixoYmU9d2luZG93LlNoYWR5Q1NTLkN1c3RvbVN0eWxlSW50ZXJmYWNlLGNXPWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX3N0eWxlPW51bGwsaGJlLmFkZEN1c3RvbVN0eWxlKHRoaXMpfWdldFN0eWxlKCl7aWYodGhpcy5fc3R5bGUpcmV0dXJuIHRoaXMuX3N0eWxlO2xldCB0PXRoaXMucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtpZighdClyZXR1cm4gbnVsbDt0aGlzLl9zdHlsZT10O2xldCByPXQuZ2V0QXR0cmlidXRlKHFndCk7cmV0dXJuIHImJih0LnJlbW92ZUF0dHJpYnV0ZShxZ3QpLHQudGV4dENvbnRlbnQ9dG10KHIpK3QudGV4dENvbnRlbnQpLHRoaXMub3duZXJEb2N1bWVudCE9PXdpbmRvdy5kb2N1bWVudCYmd2luZG93LmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcyksdGhpcy5fc3R5bGV9fTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCJjdXN0b20tc3R5bGUiLGNXKTt2YXIgR2d0O0dndD1HeC5fbXV0YWJsZVByb3BlcnR5Q2hhbmdlO3ZhciBXZ3Q9e3Byb3BlcnRpZXM6e211dGFibGVEYXRhOkJvb2xlYW59LF9zaG91bGRQcm9wZXJ0eUNoYW5nZShlLHQscil7cmV0dXJuIEdndCh0aGlzLGUsdCxyLHRoaXMubXV0YWJsZURhdGEpfX07dmFyIERhPUd0KEhUTUxFbGVtZW50KS5wcm90b3R5cGU7dmFyIF85PW5ldyBTZXQsSnM9e3Byb3BlcnRpZXM6e19wYXJlbnRSZXNpemFibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfcGFyZW50UmVzaXphYmxlQ2hhbmdlZCJ9LF9ub3RpZnlpbmdEZXNjZW5kYW50Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiOiJfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnMifSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faW50ZXJlc3RlZFJlc2l6YWJsZXM9W10sdGhpcy5fYm91bmROb3RpZnlSZXNpemU9dGhpcy5ub3RpZnlSZXNpemUuYmluZCh0aGlzKSx0aGlzLl9ib3VuZE9uRGVzY2VuZGFudElyb25SZXNpemU9dGhpcy5fb25EZXNjZW5kYW50SXJvblJlc2l6ZS5iaW5kKHRoaXMpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zKCl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50UmVzaXphYmxlP3RoaXMuX3BhcmVudFJlc2l6YWJsZS5zdG9wUmVzaXplTm90aWZpY2F0aW9uc0Zvcih0aGlzKTooXzkuZGVsZXRlKHRoaXMpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKSksdGhpcy5fcGFyZW50UmVzaXphYmxlPW51bGx9LG5vdGlmeVJlc2l6ZTpmdW5jdGlvbigpeyF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9pbnRlcmVzdGVkUmVzaXphYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXMucmVzaXplclNob3VsZE5vdGlmeShlKSYmdGhpcy5fbm90aWZ5RGVzY2VuZGFudChlKX0sdGhpcyksdGhpcy5fZmlyZVJlc2l6ZSgpKX0sYXNzaWduUGFyZW50UmVzaXphYmxlOmZ1bmN0aW9uKGUpe3RoaXMuX3BhcmVudFJlc2l6YWJsZSYmdGhpcy5fcGFyZW50UmVzaXphYmxlLnN0b3BSZXNpemVOb3RpZmljYXRpb25zRm9yKHRoaXMpLHRoaXMuX3BhcmVudFJlc2l6YWJsZT1lLGUmJmUuX2ludGVyZXN0ZWRSZXNpemFibGVzLmluZGV4T2YodGhpcyk9PT0tMSYmKGUuX2ludGVyZXN0ZWRSZXNpemFibGVzLnB1c2godGhpcyksZS5fc3Vic2NyaWJlSXJvblJlc2l6ZSh0aGlzKSl9LHN0b3BSZXNpemVOb3RpZmljYXRpb25zRm9yOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzLmluZGV4T2YoZSk7dD4tMSYmKHRoaXMuX2ludGVyZXN0ZWRSZXNpemFibGVzLnNwbGljZSh0LDEpLHRoaXMuX3Vuc3Vic2NyaWJlSXJvblJlc2l6ZShlKSl9LF9zdWJzY3JpYmVJcm9uUmVzaXplOmZ1bmN0aW9uKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMuX2JvdW5kT25EZXNjZW5kYW50SXJvblJlc2l6ZSl9LF91bnN1YnNjcmliZUlyb25SZXNpemU6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJpcm9uLXJlc2l6ZSIsdGhpcy5fYm91bmRPbkRlc2NlbmRhbnRJcm9uUmVzaXplKX0scmVzaXplclNob3VsZE5vdGlmeTpmdW5jdGlvbihlKXtyZXR1cm4hMH0sX29uRGVzY2VuZGFudElyb25SZXNpemU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fbm90aWZ5aW5nRGVzY2VuZGFudCl7ZS5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm59Y198fHRoaXMuX2ZpcmVSZXNpemUoKX0sX2ZpcmVSZXNpemU6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImlyb24tcmVzaXplIixudWxsLHtub2RlOnRoaXMsYnViYmxlczohMX0pfSxfb25Jcm9uUmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDt0IT09dGhpcyYmKHQuYXNzaWduUGFyZW50UmVzaXphYmxlKHRoaXMpLHRoaXMuX25vdGlmeURlc2NlbmRhbnQodCksZS5zdG9wUHJvcGFnYXRpb24oKSl9LF9wYXJlbnRSZXNpemFibGVDaGFuZ2VkOmZ1bmN0aW9uKGUpe2UmJndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2JvdW5kTm90aWZ5UmVzaXplKX0sX25vdGlmeURlc2NlbmRhbnQ6ZnVuY3Rpb24oZSl7IXRoaXMuaXNBdHRhY2hlZHx8KHRoaXMuX25vdGlmeWluZ0Rlc2NlbmRhbnQ9ITAsZS5ub3RpZnlSZXNpemUoKSx0aGlzLl9ub3RpZnlpbmdEZXNjZW5kYW50PSExKX0sX3JlcXVlc3RSZXNpemVOb3RpZmljYXRpb25zOmZ1bmN0aW9uKCl7aWYoISF0aGlzLmlzQXR0YWNoZWQpaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJsb2FkaW5nIil7dmFyIGU9dGhpcy5fcmVxdWVzdFJlc2l6ZU5vdGlmaWNhdGlvbnMuYmluZCh0aGlzKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbiB0KCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVhZHlzdGF0ZWNoYW5nZSIsdCksZSgpfSl9ZWxzZSB0aGlzLl9maW5kUGFyZW50KCksdGhpcy5fcGFyZW50UmVzaXphYmxlP3RoaXMuX3BhcmVudFJlc2l6YWJsZS5faW50ZXJlc3RlZFJlc2l6YWJsZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0IT09dGhpcyYmdC5fZmluZFBhcmVudCgpfSx0aGlzKTooXzkuZm9yRWFjaChmdW5jdGlvbih0KXt0IT09dGhpcyYmdC5fZmluZFBhcmVudCgpfSx0aGlzKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9ib3VuZE5vdGlmeVJlc2l6ZSksdGhpcy5ub3RpZnlSZXNpemUoKSl9LF9maW5kUGFyZW50OmZ1bmN0aW9uKCl7dGhpcy5hc3NpZ25QYXJlbnRSZXNpemFibGUobnVsbCksdGhpcy5maXJlKCJpcm9uLXJlcXVlc3QtcmVzaXplLW5vdGlmaWNhdGlvbnMiLG51bGwse25vZGU6dGhpcyxidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSx0aGlzLl9wYXJlbnRSZXNpemFibGU/XzkuZGVsZXRlKHRoaXMpOl85LmFkZCh0aGlzKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLWlyb24tY29sbGFwc2UtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMzAwbXMpOwogICAgICAgIC8qIFNhZmFyaSAxMCBuZWVkcyB0aGlzIHByb3BlcnR5IHByZWZpeGVkIHRvIGNvcnJlY3RseSBhcHBseSB0aGUgY3VzdG9tIHByb3BlcnR5ICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1pcm9uLWNvbGxhcHNlLXRyYW5zaXRpb24tZHVyYXRpb24sIDMwMG1zKTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgOmhvc3QoLmlyb24tY29sbGFwc2UtY2xvc2VkKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1jb2xsYXBzZS1vcGVuZWQpKSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tY29sbGFwc2UiLGJlaGF2aW9yczpbSnNdLHByb3BlcnRpZXM6e2hvcml6b250YWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2hvcml6b250YWxDaGFuZ2VkIn0sb3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LHRyYW5zaXRpb25pbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITB9LG5vQW5pbWF0aW9uOnt0eXBlOkJvb2xlYW59LF9kZXNpcmVkU2l6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxnZXQgZGltZW5zaW9uKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbD8id2lkdGgiOiJoZWlnaHQifSxnZXQgX2RpbWVuc2lvbk1heCgpe3JldHVybiB0aGlzLmhvcml6b250YWw/Im1heFdpZHRoIjoibWF4SGVpZ2h0In0sZ2V0IF9kaW1lbnNpb25NYXhDc3MoKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsPyJtYXgtd2lkdGgiOiJtYXgtaGVpZ2h0In0saG9zdEF0dHJpYnV0ZXM6e3JvbGU6Imdyb3VwIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0sbGlzdGVuZXJzOnt0cmFuc2l0aW9uZW5kOiJfb25UcmFuc2l0aW9uRW5kIn0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9IXRoaXMub3BlbmVkfSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD0hMX0sdXBkYXRlU2l6ZTpmdW5jdGlvbihlLHQpe2U9ZT09PSJhdXRvIj8iIjplO3ZhciByPXQmJiF0aGlzLm5vQW5pbWF0aW9uJiZ0aGlzLmlzQXR0YWNoZWQmJnRoaXMuX2Rlc2lyZWRTaXplIT09ZTtpZih0aGlzLl9kZXNpcmVkU2l6ZT1lLHRoaXMuX3VwZGF0ZVRyYW5zaXRpb24oITEpLHIpe3ZhciBuPXRoaXMuX2NhbGNTaXplKCk7ZT09PSIiJiYodGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPSIiLGU9dGhpcy5fY2FsY1NpemUoKSksdGhpcy5zdHlsZVt0aGlzLl9kaW1lbnNpb25NYXhdPW4sdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsdGhpcy5fdXBkYXRlVHJhbnNpdGlvbighMCkscj1lIT09bn10aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09ZSxyfHx0aGlzLl90cmFuc2l0aW9uRW5kKCl9LGVuYWJsZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7RGEuX3dhcm4oImBlbmFibGVUcmFuc2l0aW9uKClgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgbm9BbmltYXRpb25gIGluc3RlYWQuIiksdGhpcy5ub0FuaW1hdGlvbj0hZX0sX3VwZGF0ZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7dGhpcy5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249ZSYmIXRoaXMubm9BbmltYXRpb24/IiI6IjBzIn0sX2hvcml6b250YWxDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS50cmFuc2l0aW9uUHJvcGVydHk9dGhpcy5fZGltZW5zaW9uTWF4Q3NzO3ZhciBlPXRoaXMuX2RpbWVuc2lvbk1heD09PSJtYXhXaWR0aCI/Im1heEhlaWdodCI6Im1heFdpZHRoIjt0aGlzLnN0eWxlW2VdPSIiLHRoaXMudXBkYXRlU2l6ZSh0aGlzLm9wZW5lZD8iYXV0byI6IjBweCIsITEpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsIXRoaXMub3BlbmVkKSx0aGlzLl9zZXRUcmFuc2l0aW9uaW5nKCEwKSx0aGlzLnRvZ2dsZUNsYXNzKCJpcm9uLWNvbGxhcHNlLWNsb3NlZCIsITEpLHRoaXMudG9nZ2xlQ2xhc3MoImlyb24tY29sbGFwc2Utb3BlbmVkIiwhMSksdGhpcy51cGRhdGVTaXplKHRoaXMub3BlbmVkPyJhdXRvIjoiMHB4IiwhMCksdGhpcy5vcGVuZWQmJnRoaXMuZm9jdXMoKX0sX3RyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlW3RoaXMuX2RpbWVuc2lvbk1heF09dGhpcy5fZGVzaXJlZFNpemUsdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1jbG9zZWQiLCF0aGlzLm9wZW5lZCksdGhpcy50b2dnbGVDbGFzcygiaXJvbi1jb2xsYXBzZS1vcGVuZWQiLHRoaXMub3BlbmVkKSx0aGlzLl91cGRhdGVUcmFuc2l0aW9uKCExKSx0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX3NldFRyYW5zaXRpb25pbmcoITEpfSxfb25UcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe3p0KGUpLnJvb3RUYXJnZXQ9PT10aGlzJiZ0aGlzLl90cmFuc2l0aW9uRW5kKCl9LF9jYWxjU2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuZGltZW5zaW9uXSsicHgifX0pO3ZhciBZZ3Q9UWAKLyogTW9zdCBjb21tb24gdXNlZCBmbGV4IHN0eWxlcyovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmxheW91dC5ob3Jpem9udGFsLAogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5pbmxpbmUgewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9CgogICAgICAubGF5b3V0Lmhvcml6b250YWwgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsIHsKICAgICAgICAtbXMtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLmxheW91dC53cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5uby13cmFwIHsKICAgICAgICAtbXMtZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXIsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXItanVzdGlmaWVkLAogICAgICAubGF5b3V0LmNlbnRlci1jZW50ZXIgewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmxleCB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC1hdXRvIHsKICAgICAgICAtbXMtZmxleDogMSAxIGF1dG87CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxIDEgYXV0bzsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgfQoKICAgICAgLmZsZXgtbm9uZSB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBCYXNpYyBmbGV4Ym94IHJldmVyc2Ugc3R5bGVzICovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtcmV2ZXJzZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAubGF5b3V0Lmhvcml6b250YWwtcmV2ZXJzZSwKICAgICAgLmxheW91dC52ZXJ0aWNhbC1yZXZlcnNlIHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmxheW91dC5ob3Jpem9udGFsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LnZlcnRpY2FsLXJldmVyc2UgewogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAgICB9CgogICAgICAubGF5b3V0LndyYXAtcmV2ZXJzZSB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcC1yZXZlcnNlOwogICAgICAgIC13ZWJraXQtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBGbGV4Ym94IGFsaWdubWVudCAqLwo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1mbGV4LWFsaWdubWVudCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAvKioKICAgICAgICogQWxpZ25tZW50IGluIGNyb3NzIGF4aXMuCiAgICAgICAqLwogICAgICAubGF5b3V0LnN0YXJ0IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLmxheW91dC5jZW50ZXIsCiAgICAgIC5sYXlvdXQuY2VudGVyLWNlbnRlciB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQgewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAubGF5b3V0LmJhc2VsaW5lIHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9CgogICAgICAvKioKICAgICAgICogQWxpZ25tZW50IGluIG1haW4gYXhpcy4KICAgICAgICovCiAgICAgIC5sYXlvdXQuc3RhcnQtanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBzdGFydDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWp1c3RpZmllZCwKICAgICAgLmxheW91dC5jZW50ZXItY2VudGVyIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQtanVzdGlmaWVkIHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuYXJvdW5kLWp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogZGlzdHJpYnV0ZTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICB9CgogICAgICAubGF5b3V0Lmp1c3RpZmllZCB7CiAgICAgICAgLW1zLWZsZXgtcGFjazoganVzdGlmeTsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTZWxmIGFsaWdubWVudC4KICAgICAgICovCiAgICAgIC5zZWxmLXN0YXJ0IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLnNlbGYtY2VudGVyIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogY2VudGVyOwogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGYtZW5kIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLnNlbGYtc3RyZXRjaCB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5zZWxmLWJhc2VsaW5lIHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgICBhbGlnbi1zZWxmOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIG11bHRpLWxpbmUgYWxpZ25tZW50IGluIG1haW4gYXhpcy4KICAgICAgICovCiAgICAgIC5sYXlvdXQuc3RhcnQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBzdGFydDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgfQoKICAgICAgLmxheW91dC5lbmQtYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBlbmQ7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgIH0KCiAgICAgIC5sYXlvdXQuY2VudGVyLWFsaWduZWQgewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogY2VudGVyOyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAubGF5b3V0LmJldHdlZW4tYWxpZ25lZCB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBqdXN0aWZ5OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubGF5b3V0LmFyb3VuZC1hbGlnbmVkIHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGRpc3RyaWJ1dGU7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgovKiBOb24tZmxleGJveCBwb3NpdGlvbmluZyBoZWxwZXIgc3R5bGVzICovCjxkb20tbW9kdWxlIGlkPSJpcm9uLWZsZXgtZmFjdG9ycyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuZmxleCwKICAgICAgLmZsZXgtMSB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9CgogICAgICAuZmxleC0yIHsKICAgICAgICAtbXMtZmxleDogMjsKICAgICAgICAtd2Via2l0LWZsZXg6IDI7CiAgICAgICAgZmxleDogMjsKICAgICAgfQoKICAgICAgLmZsZXgtMyB7CiAgICAgICAgLW1zLWZsZXg6IDM7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAzOwogICAgICAgIGZsZXg6IDM7CiAgICAgIH0KCiAgICAgIC5mbGV4LTQgewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9CgogICAgICAuZmxleC01IHsKICAgICAgICAtbXMtZmxleDogNTsKICAgICAgICAtd2Via2l0LWZsZXg6IDU7CiAgICAgICAgZmxleDogNTsKICAgICAgfQoKICAgICAgLmZsZXgtNiB7CiAgICAgICAgLW1zLWZsZXg6IDY7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA2OwogICAgICAgIGZsZXg6IDY7CiAgICAgIH0KCiAgICAgIC5mbGV4LTcgewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9CgogICAgICAuZmxleC04IHsKICAgICAgICAtbXMtZmxleDogODsKICAgICAgICAtd2Via2l0LWZsZXg6IDg7CiAgICAgICAgZmxleDogODsKICAgICAgfQoKICAgICAgLmZsZXgtOSB7CiAgICAgICAgLW1zLWZsZXg6IDk7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA5OwogICAgICAgIGZsZXg6IDk7CiAgICAgIH0KCiAgICAgIC5mbGV4LTEwIHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfQoKICAgICAgLmZsZXgtMTEgewogICAgICAgIC1tcy1mbGV4OiAxMTsKICAgICAgICAtd2Via2l0LWZsZXg6IDExOwogICAgICAgIGZsZXg6IDExOwogICAgICB9CgogICAgICAuZmxleC0xMiB7CiAgICAgICAgLW1zLWZsZXg6IDEyOwogICAgICAgIC13ZWJraXQtZmxleDogMTI7CiAgICAgICAgZmxleDogMTI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPgo8ZG9tLW1vZHVsZSBpZD0iaXJvbi1wb3NpdGlvbmluZyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAuYmxvY2sgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaW52aXNpYmxlIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnJlbGF0aXZlIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIGJvZHkuZnVsbGJsZWVkIHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgfQoKICAgICAgLnNjcm9sbCB7CiAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAvKiBmaXhlZCBwb3NpdGlvbiAqLwogICAgICAuZml4ZWQtYm90dG9tLAogICAgICAuZml4ZWQtbGVmdCwKICAgICAgLmZpeGVkLXJpZ2h0LAogICAgICAuZml4ZWQtdG9wIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIH0KCiAgICAgIC5maXhlZC10b3AgewogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtcmlnaHQgewogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5maXhlZC1ib3R0b20gewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CgogICAgICAuZml4ZWQtbGVmdCB7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KYDtZZ3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChZZ3QuY29udGVudCk7dmFyIGpndD1RYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CjwvY3VzdG9tLXN0eWxlPgo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLS1sYXlvdXQ6IHsKICAgICAgICBkaXNwbGF5OiAtbXMtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWlubGluZTogewogICAgICAgIGRpc3BsYXk6IC1tcy1pbmxpbmUtZmxleGJveDsKICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWlubGluZS1mbGV4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtaG9yaXpvbnRhbDogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH07CgogICAgICAtLWxheW91dC1ob3Jpem9udGFsLXJldmVyc2U6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWw6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CgogICAgICAgIC1tcy1mbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIC13ZWJraXQtZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtdmVydGljYWwtcmV2ZXJzZTogewogICAgICAgIEBhcHBseSAtLWxheW91dDsKCiAgICAgICAgLW1zLWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICAtd2Via2l0LWZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwOiB7CiAgICAgICAgLW1zLWZsZXgtd3JhcDogd3JhcDsKICAgICAgICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH07CgogICAgICAtLWxheW91dC13cmFwLXJldmVyc2U6IHsKICAgICAgICAtbXMtZmxleC13cmFwOiB3cmFwLXJldmVyc2U7CiAgICAgICAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtYXV0bzogewogICAgICAgIC1tcy1mbGV4OiAxIDEgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMSBhdXRvOwogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC1ub25lOiB7CiAgICAgICAgLW1zLWZsZXg6IG5vbmU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiBub25lOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4OiB7CiAgICAgICAgLW1zLWZsZXg6IDEgMSAwLjAwMDAwMDAwMXB4OwogICAgICAgIC13ZWJraXQtZmxleDogMTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIC13ZWJraXQtZmxleC1iYXNpczogMC4wMDAwMDAwMDFweDsKICAgICAgICBmbGV4LWJhc2lzOiAwLjAwMDAwMDAwMXB4OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC0yOiB7CiAgICAgICAgLW1zLWZsZXg6IDI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAyOwogICAgICAgIGZsZXg6IDI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTM6IHsKICAgICAgICAtbXMtZmxleDogMzsKICAgICAgICAtd2Via2l0LWZsZXg6IDM7CiAgICAgICAgZmxleDogMzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNDogewogICAgICAgIC1tcy1mbGV4OiA0OwogICAgICAgIC13ZWJraXQtZmxleDogNDsKICAgICAgICBmbGV4OiA0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC01OiB7CiAgICAgICAgLW1zLWZsZXg6IDU7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA1OwogICAgICAgIGZsZXg6IDU7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTY6IHsKICAgICAgICAtbXMtZmxleDogNjsKICAgICAgICAtd2Via2l0LWZsZXg6IDY7CiAgICAgICAgZmxleDogNjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtNzogewogICAgICAgIC1tcy1mbGV4OiA3OwogICAgICAgIC13ZWJraXQtZmxleDogNzsKICAgICAgICBmbGV4OiA3OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZmxleC04OiB7CiAgICAgICAgLW1zLWZsZXg6IDg7CiAgICAgICAgLXdlYmtpdC1mbGV4OiA4OwogICAgICAgIGZsZXg6IDg7CiAgICAgIH07CgogICAgICAtLWxheW91dC1mbGV4LTk6IHsKICAgICAgICAtbXMtZmxleDogOTsKICAgICAgICAtd2Via2l0LWZsZXg6IDk7CiAgICAgICAgZmxleDogOTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTA6IHsKICAgICAgICAtbXMtZmxleDogMTA7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMDsKICAgICAgICBmbGV4OiAxMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTE6IHsKICAgICAgICAtbXMtZmxleDogMTE7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMTsKICAgICAgICBmbGV4OiAxMTsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZsZXgtMTI6IHsKICAgICAgICAtbXMtZmxleDogMTI7CiAgICAgICAgLXdlYmtpdC1mbGV4OiAxMjsKICAgICAgICBmbGV4OiAxMjsKICAgICAgfTsKCiAgICAgIC8qIGFsaWdubWVudCBpbiBjcm9zcyBheGlzICovCgogICAgICAtLWxheW91dC1zdGFydDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyOiB7CiAgICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWVuZDogewogICAgICAgIC1tcy1mbGV4LWFsaWduOiBlbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtYmFzZWxpbmU6IHsKICAgICAgICAtbXMtZmxleC1hbGlnbjogYmFzZWxpbmU7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICB9OwoKICAgICAgLyogYWxpZ25tZW50IGluIG1haW4gYXhpcyAqLwoKICAgICAgLS1sYXlvdXQtc3RhcnQtanVzdGlmaWVkOiB7CiAgICAgICAgLW1zLWZsZXgtcGFjazogc3RhcnQ7CiAgICAgICAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDogewogICAgICAgIC1tcy1mbGV4LXBhY2s6IGVuZDsKICAgICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBkaXN0cmlidXRlOwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7CiAgICAgIH07CgogICAgICAtLWxheW91dC1qdXN0aWZpZWQ6IHsKICAgICAgICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5OwogICAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1jZW50ZXI6IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItanVzdGlmaWVkOwogICAgICB9OwoKICAgICAgLyogc2VsZiBhbGlnbm1lbnQgKi8KCiAgICAgIC0tbGF5b3V0LXNlbGYtc3RhcnQ6IHsKICAgICAgICAtbXMtYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7CiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNlbGYtY2VudGVyOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWVuZDogewogICAgICAgIC1tcy1hbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgICAgICAtd2Via2l0LWFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtc2VsZi1zdHJldGNoOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIH07CgogICAgICAtLWxheW91dC1zZWxmLWJhc2VsaW5lOiB7CiAgICAgICAgLW1zLWFsaWduLXNlbGY6IGJhc2VsaW5lOwogICAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgICAgYWxpZ24tc2VsZjogYmFzZWxpbmU7CiAgICAgIH07CgogICAgICAvKiBtdWx0aS1saW5lIGFsaWdubWVudCBpbiBtYWluIGF4aXMgKi8KCiAgICAgIC0tbGF5b3V0LXN0YXJ0LWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IHN0YXJ0OyAgLyogSUUxMCAqLwogICAgICAgIC1tcy1hbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZW5kLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGVuZDsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWNlbnRlci1hbGlnbmVkOiB7CiAgICAgICAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAtd2Via2l0LWFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgIH07CgogICAgICAtLWxheW91dC1iZXR3ZWVuLWFsaWduZWQ6IHsKICAgICAgICAtbXMtZmxleC1saW5lLXBhY2s6IGp1c3RpZnk7ICAvKiBJRTEwICovCiAgICAgICAgLW1zLWFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgLXdlYmtpdC1hbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH07CgogICAgICAtLWxheW91dC1hcm91bmQtYWxpZ25lZDogewogICAgICAgIC1tcy1mbGV4LWxpbmUtcGFjazogZGlzdHJpYnV0ZTsgIC8qIElFMTAgKi8KICAgICAgICAtbXMtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIC13ZWJraXQtYWxpZ24tY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDsKICAgICAgfTsKCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgICAgICAgICBPdGhlciBMYXlvdXQKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAgIC0tbGF5b3V0LWJsb2NrOiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH07CgogICAgICAtLWxheW91dC1pbnZpc2libGU6IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXJlbGF0aXZlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9OwoKICAgICAgLS1sYXlvdXQtZml0OiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LXNjcm9sbDogewogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZ1bGxibGVlZDogewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICB9OwoKICAgICAgLyogZml4ZWQgcG9zaXRpb24gKi8KCiAgICAgIC0tbGF5b3V0LWZpeGVkLXRvcDogewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgfTsKCiAgICAgIC0tbGF5b3V0LWZpeGVkLXJpZ2h0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1ib3R0b206IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH07CgogICAgICAtLWxheW91dC1maXhlZC1sZWZ0OiB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfTsKCiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtqZ3Quc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChqZ3QuY29udGVudCk7dmFyIFhndD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO1hndC50ZXh0Q29udGVudD0iW2hpZGRlbl0geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0iO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoWGd0KTt2YXIgZ289Y2xhc3N7Y29uc3RydWN0b3IodCl7Z29bIiAiXSh0KSx0aGlzLnR5cGU9dCYmdC50eXBlfHwiZGVmYXVsdCIsdGhpcy5rZXk9dCYmdC5rZXksdCYmInZhbHVlImluIHQmJih0aGlzLnZhbHVlPXQudmFsdWUpfWdldCB2YWx1ZSgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMua2V5O2lmKHQmJnIpcmV0dXJuIGdvLnR5cGVzW3RdJiZnby50eXBlc1t0XVtyXX1zZXQgdmFsdWUodCl7dmFyIHI9dGhpcy50eXBlLG49dGhpcy5rZXk7ciYmbiYmKHI9Z28udHlwZXNbcl09Z28udHlwZXNbcl18fHt9LHQ9PW51bGw/ZGVsZXRlIHJbbl06cltuXT10KX1nZXQgbGlzdCgpe3ZhciB0PXRoaXMudHlwZTtpZih0KXt2YXIgcj1nby50eXBlc1t0aGlzLnR5cGVdO3JldHVybiByP09iamVjdC5rZXlzKHIpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gZmJlW3RoaXMudHlwZV1bbl19LHRoaXMpOltdfX1ieUtleSh0KXtyZXR1cm4gdGhpcy5rZXk9dCx0aGlzLnZhbHVlfX07Z29bIiAiXT1mdW5jdGlvbigpe307Z28udHlwZXM9e307dmFyIGZiZT1nby50eXBlcztZdCh7aXM6Imlyb24tbWV0YSIscHJvcGVydGllczp7dHlwZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImRlZmF1bHQifSxrZXk6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSxzZWxmOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9zZWxmQ2hhbmdlZCJ9LF9fbWV0YTp7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfX2NvbXB1dGVNZXRhKHR5cGUsIGtleSwgdmFsdWUpIn19LGhvc3RBdHRyaWJ1dGVzOntoaWRkZW46ITB9LF9fY29tcHV0ZU1ldGE6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW5ldyBnbyh7dHlwZTplLGtleTp0fSk7cmV0dXJuIHIhPT12b2lkIDAmJnIhPT1uLnZhbHVlP24udmFsdWU9cjp0aGlzLnZhbHVlIT09bi52YWx1ZSYmKHRoaXMudmFsdWU9bi52YWx1ZSksbn0sZ2V0IGxpc3QoKXtyZXR1cm4gdGhpcy5fX21ldGEmJnRoaXMuX19tZXRhLmxpc3R9LF9zZWxmQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiYodGhpcy52YWx1ZT10aGlzKX0sYnlLZXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBnbyh7dHlwZTp0aGlzLnR5cGUsa2V5OmV9KS52YWx1ZX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKCiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKCiAgICAgICAgZmlsbDogdmFyKC0taXJvbi1pY29uLWZpbGwtY29sb3IsIGN1cnJlbnRjb2xvcik7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS1pcm9uLWljb24tc3Ryb2tlLWNvbG9yLCBub25lKTsKCiAgICAgICAgd2lkdGg6IHZhcigtLWlyb24taWNvbi13aWR0aCwgMjRweCk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1pcm9uLWljb24taGVpZ2h0LCAyNHB4KTsKICAgICAgICBAYXBwbHkgLS1pcm9uLWljb247CiAgICAgIH0KCiAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KYCxpczoiaXJvbi1pY29uIixwcm9wZXJ0aWVzOntpY29uOnt0eXBlOlN0cmluZ30sdGhlbWU6e3R5cGU6U3RyaW5nfSxzcmM6e3R5cGU6U3RyaW5nfSxfbWV0YTp7dmFsdWU6RGEuY3JlYXRlKCJpcm9uLW1ldGEiLHt0eXBlOiJpY29uc2V0In0pfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUljb24oX21ldGEsIGlzQXR0YWNoZWQpIiwiX3VwZGF0ZUljb24odGhlbWUsIGlzQXR0YWNoZWQpIiwiX3NyY0NoYW5nZWQoc3JjLCBpc0F0dGFjaGVkKSIsIl9pY29uQ2hhbmdlZChpY29uLCBpc0F0dGFjaGVkKSJdLF9ERUZBVUxUX0lDT05TRVQ6Imljb25zIixfaWNvbkNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9KGV8fCIiKS5zcGxpdCgiOiIpO3RoaXMuX2ljb25OYW1lPXQucG9wKCksdGhpcy5faWNvbnNldE5hbWU9dC5wb3AoKXx8dGhpcy5fREVGQVVMVF9JQ09OU0VULHRoaXMuX3VwZGF0ZUljb24oKX0sX3NyY0NoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fdXBkYXRlSWNvbigpfSxfdXNlc0ljb25zZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29ufHwhdGhpcy5zcmN9LF91cGRhdGVJY29uOmZ1bmN0aW9uKCl7dGhpcy5fdXNlc0ljb25zZXQoKT8odGhpcy5faW1nJiZ0aGlzLl9pbWcucGFyZW50Tm9kZSYmenQodGhpcy5yb290KS5yZW1vdmVDaGlsZCh0aGlzLl9pbWcpLHRoaXMuX2ljb25OYW1lPT09IiI/dGhpcy5faWNvbnNldCYmdGhpcy5faWNvbnNldC5yZW1vdmVJY29uKHRoaXMpOnRoaXMuX2ljb25zZXROYW1lJiZ0aGlzLl9tZXRhJiYodGhpcy5faWNvbnNldD10aGlzLl9tZXRhLmJ5S2V5KHRoaXMuX2ljb25zZXROYW1lKSx0aGlzLl9pY29uc2V0Pyh0aGlzLl9pY29uc2V0LmFwcGx5SWNvbih0aGlzLHRoaXMuX2ljb25OYW1lLHRoaXMudGhlbWUpLHRoaXMudW5saXN0ZW4od2luZG93LCJpcm9uLWljb25zZXQtYWRkZWQiLCJfdXBkYXRlSWNvbiIpKTp0aGlzLmxpc3Rlbih3aW5kb3csImlyb24taWNvbnNldC1hZGRlZCIsIl91cGRhdGVJY29uIikpKToodGhpcy5faWNvbnNldCYmdGhpcy5faWNvbnNldC5yZW1vdmVJY29uKHRoaXMpLHRoaXMuX2ltZ3x8KHRoaXMuX2ltZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSx0aGlzLl9pbWcuc3R5bGUud2lkdGg9IjEwMCUiLHRoaXMuX2ltZy5zdHlsZS5oZWlnaHQ9IjEwMCUiLHRoaXMuX2ltZy5kcmFnZ2FibGU9ITEpLHRoaXMuX2ltZy5zcmM9dGhpcy5zcmMsenQodGhpcy5yb290KS5hcHBlbmRDaGlsZCh0aGlzLl9pbWcpKX19KTtZdCh7aXM6Imlyb24taWNvbnNldC1zdmciLHByb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfbmFtZUNoYW5nZWQifSxzaXplOnt0eXBlOk51bWJlcix2YWx1ZToyNH0scnRsTWlycm9yaW5nOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHVzZUdsb2JhbFJ0bEF0dHJpYnV0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX21ldGE9bmV3IGdvKHt0eXBlOiJpY29uc2V0IixrZXk6bnVsbCx2YWx1ZTpudWxsfSl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIn0sZ2V0SWNvbk5hbWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ljb25zPXRoaXMuX2NyZWF0ZUljb25NYXAoKSxPYmplY3Qua2V5cyh0aGlzLl9pY29ucykubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm5hbWUrIjoiK2V9LHRoaXMpfSxhcHBseUljb246ZnVuY3Rpb24oZSx0KXt0aGlzLnJlbW92ZUljb24oZSk7dmFyIHI9dGhpcy5fY2xvbmVJY29uKHQsdGhpcy5ydGxNaXJyb3JpbmcmJnRoaXMuX3RhcmdldElzUlRMKGUpKTtpZihyKXt2YXIgbj16dChlLnJvb3R8fGUpO3JldHVybiBuLmluc2VydEJlZm9yZShyLG4uY2hpbGROb2Rlc1swXSksZS5fc3ZnSWNvbj1yfXJldHVybiBudWxsfSxyZW1vdmVJY29uOmZ1bmN0aW9uKGUpe2UuX3N2Z0ljb24mJih6dChlLnJvb3R8fGUpLnJlbW92ZUNoaWxkKGUuX3N2Z0ljb24pLGUuX3N2Z0ljb249bnVsbCl9LF90YXJnZXRJc1JUTDpmdW5jdGlvbihlKXtpZih0aGlzLl9fdGFyZ2V0SXNSVEw9PW51bGwpaWYodGhpcy51c2VHbG9iYWxSdGxBdHRyaWJ1dGUpe3ZhciB0PWRvY3VtZW50LmJvZHkmJmRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJkaXIiKT9kb2N1bWVudC5ib2R5OmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9fdGFyZ2V0SXNSVEw9dC5nZXRBdHRyaWJ1dGUoImRpciIpPT09InJ0bCJ9ZWxzZSBlJiZlLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUmJihlPWUuaG9zdCksdGhpcy5fX3RhcmdldElzUlRMPWUmJndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLmRpcmVjdGlvbj09PSJydGwiO3JldHVybiB0aGlzLl9fdGFyZ2V0SXNSVEx9LF9uYW1lQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX21ldGEudmFsdWU9bnVsbCx0aGlzLl9tZXRhLmtleT10aGlzLm5hbWUsdGhpcy5fbWV0YS52YWx1ZT10aGlzLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLmZpcmUoImlyb24taWNvbnNldC1hZGRlZCIsdGhpcyx7bm9kZTp3aW5kb3d9KX0pfSxfY3JlYXRlSWNvbk1hcDpmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIHp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdC5pZF09dH0pLGV9LF9jbG9uZUljb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5faWNvbnM9dGhpcy5faWNvbnN8fHRoaXMuX2NyZWF0ZUljb25NYXAoKSx0aGlzLl9wcmVwYXJlU3ZnQ2xvbmUodGhpcy5faWNvbnNbZV0sdGhpcy5zaXplLHQpfSxfcHJlcGFyZVN2Z0Nsb25lOmZ1bmN0aW9uKGUsdCxyKXtpZihlKXt2YXIgbj1lLmNsb25lTm9kZSghMCksaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIiksbz1uLmdldEF0dHJpYnV0ZSgidmlld0JveCIpfHwiMCAwICIrdCsiICIrdCxhPSJwb2ludGVyLWV2ZW50czogbm9uZTsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IjtyZXR1cm4gciYmbi5oYXNBdHRyaWJ1dGUoIm1pcnJvci1pbi1ydGwiKSYmKGErPSItd2Via2l0LXRyYW5zZm9ybTpzY2FsZSgtMSwxKTt0cmFuc2Zvcm06c2NhbGUoLTEsMSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7IiksaS5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLG8pLGkuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQgbWVldCIpLGkuc2V0QXR0cmlidXRlKCJmb2N1c2FibGUiLCJmYWxzZSIpLGkuc3R5bGUuY3NzVGV4dD1hLGkuYXBwZW5kQ2hpbGQobikucmVtb3ZlQXR0cmlidXRlKCJpZCIpLGl9cmV0dXJuIG51bGx9fSk7dmFyIHBiZT1RYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9ImltYWdlIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSJhZGQtYS1waG90byI+PHBhdGggZD0iTTMgNFYxaDJ2M2gzdjJINXYzSDNWNkgwVjRoM3ptMyA2VjdoM1Y0aDdsMS44MyAySDIxYzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDVjLTEuMSAwLTItLjktMi0yVjEwaDN6bTcgOWMyLjc2IDAgNS0yLjI0IDUtNXMtMi4yNC01LTUtNS01IDIuMjQtNSA1IDIuMjQgNSA1IDV6bS0zLjItNWMwIDEuNzcgMS40MyAzLjIgMy4yIDMuMnMzLjItMS40MyAzLjItMy4yLTEuNDMtMy4yLTMuMi0zLjItMy4yIDEuNDMtMy4yIDMuMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtdG8tcGhvdG9zIj48cGF0aCBkPSJNNCA2SDJ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZ6bTE2LTRIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tMSA5aC00djRoLTJ2LTRIOVY5aDRWNWgydjRoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkanVzdCI+PHBhdGggZD0iTTEyIDJDNi40OSAyIDIgNi40OSAyIDEyczQuNDkgMTAgMTAgMTAgMTAtNC40OSAxMC0xMFMxNy41MSAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0zLThjMCAxLjY2LTEuMzQgMy0zIDNzLTMtMS4zNC0zLTMgMS4zNC0zIDMtMyAzIDEuMzQgMyAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lzdGFudCI+PHBhdGggZD0iTTE5IDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmg0bDMgMyAzLTNoNGMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tNS4xMiAxMC44OEwxMiAxN2wtMS44OC00LjEyTDYgMTFsNC4xMi0xLjg4TDEyIDVsMS44OCA0LjEyTDE4IDExbC00LjEyIDEuODh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaXN0YW50LXBob3RvIj48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhdWRpb3RyYWNrIj48cGF0aCBkPSJNMTIgM3Y5LjI4Yy0uNDctLjE3LS45Ny0uMjgtMS41LS4yOEM4LjAxIDEyIDYgMTQuMDEgNiAxNi41UzguMDEgMjEgMTAuNSAyMWMyLjMxIDAgNC4yLTEuNzUgNC40NS00SDE1VjZoNFYzaC03eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItY2lyY3VsYXIiPjxwYXRoIGQ9Ik0xMCA5Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAgNGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xek03IDkuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bTMgN2MtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bS0zLTNjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0zLTZjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0xNCA5Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtMS41Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXptMyA2Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC00Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6bTItMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptMC0zLjVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLWxpbmVhciI+PHBhdGggZD0iTTUgMTcuNWMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNS42NyAxLjUgMS41IDEuNXpNOSAxM2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wLTRjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXpNMyAyMWgxOHYtMkgzdjJ6TTUgOS41Yy44MyAwIDEuNS0uNjcgMS41LTEuNVM1LjgzIDYuNSA1IDYuNSAzLjUgNy4xNyAzLjUgOCA0LjE3IDkuNSA1IDkuNXptMCA0Yy44MyAwIDEuNS0uNjcgMS41LTEuNXMtLjY3LTEuNS0xLjUtMS41LTEuNS42Ny0xLjUgMS41LjY3IDEuNSAxLjUgMS41ek05IDE3Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTgtLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41ek0zIDN2MmgxOFYzSDN6bTE0IDUuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bTAgNGMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTEzIDljLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMCA0Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAgNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJsdXItb2ZmIj48cGF0aCBkPSJNMTQgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0tLjIgNC40OGwuMi4wMmMuODMgMCAxLjUtLjY3IDEuNS0xLjVzLS42Ny0xLjUtMS41LTEuNS0xLjUuNjctMS41IDEuNWwuMDIuMmMuMDkuNjcuNjEgMS4xOSAxLjI4IDEuMjh6TTE0IDMuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6bS00IDBjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0xMSA3Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTAgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem04IDhjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC00Yy41NSAwIDEtLjQ1IDEtMXMtLjQ1LTEtMS0xLTEgLjQ1LTEgMSAuNDUgMSAxIDF6bTAtNGMuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0tNCAxMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNMi41IDUuMjdsMy43OCAzLjc4TDYgOWMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTFjMC0uMS0uMDMtLjE5LS4wNi0uMjhsMi44MSAyLjgxYy0uNzEuMTEtMS4yNS43My0xLjI1IDEuNDcgMCAuODMuNjcgMS41IDEuNSAxLjUuNzQgMCAxLjM2LS41NCAxLjQ3LTEuMjVsMi44MSAyLjgxYy0uMDktLjAzLS4xOC0uMDYtLjI4LS4wNi0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMWMwLS4xLS4wMy0uMTktLjA2LS4yOGwzLjc4IDMuNzhMMjAgMjAuMjMgMy43NyA0IDIuNSA1LjI3ek0xMCAxN2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0xMS0zLjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek02IDEzYy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6TTMgOS41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXptNyAxMWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6TTYgMTdjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptLTMtMy41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJibHVyLW9uIj48cGF0aCBkPSJNNiAxM2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMC04Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bS0zIC41Yy0uMjggMC0uNS4yMi0uNS41cy4yMi41LjUuNS41LS4yMi41LS41LS4yMi0uNS0uNS0uNXpNNiA1Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTE1IDUuNWMuMjggMCAuNS0uMjIuNS0uNXMtLjIyLS41LS41LS41LS41LjIyLS41LjUuMjIuNS41LjV6TTE0IDdjLjU1IDAgMS0uNDUgMS0xcy0uNDUtMS0xLTEtMSAuNDUtMSAxIC40NSAxIDEgMXptMC0zLjVjLjI4IDAgLjUtLjIyLjUtLjVzLS4yMi0uNS0uNS0uNS0uNS4yMi0uNS41LjIyLjUuNS41em0tMTEgMTBjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em03IDdjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41em0wLTE3Yy4yOCAwIC41LS4yMi41LS41cy0uMjItLjUtLjUtLjUtLjUuMjItLjUuNS4yMi41LjUuNXpNMTAgN2MuNTUgMCAxLS40NSAxLTFzLS40NS0xLTEtMS0xIC40NS0xIDEgLjQ1IDEgMSAxem0wIDUuNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6bTggLjVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMCA0Yy0uNTUgMC0xIC40NS0xIDFzLjQ1IDEgMSAxIDEtLjQ1IDEtMS0uNDUtMS0xLTF6bTAtOGMtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wLTRjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptMyA4LjVjLS4yOCAwLS41LjIyLS41LjVzLjIyLjUuNS41LjUtLjIyLjUtLjUtLjIyLS41LS41LS41ek0xNCAxN2MtLjU1IDAtMSAuNDUtMSAxcy40NSAxIDEgMSAxLS40NSAxLTEtLjQ1LTEtMS0xem0wIDMuNWMtLjI4IDAtLjUuMjItLjUuNXMuMjIuNS41LjUuNS0uMjIuNS0uNS0uMjItLjUtLjUtLjV6bS00LTEyYy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptMCA4LjVjLS41NSAwLTEgLjQ1LTEgMXMuNDUgMSAxIDEgMS0uNDUgMS0xLS40NS0xLTEtMXptNC00LjVjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41em0wLTRjLS44MyAwLTEuNS42Ny0xLjUgMS41cy42NyAxLjUgMS41IDEuNSAxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtMSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiPjwvY2lyY2xlPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtMiI+PHBhdGggZD0iTTEwIDJjLTEuODIgMC0zLjUzLjUtNSAxLjM1QzcuOTkgNS4wOCAxMCA4LjMgMTAgMTJzLTIuMDEgNi45Mi01IDguNjVDNi40NyAyMS41IDguMTggMjIgMTAgMjJjNS41MiAwIDEwLTQuNDggMTAtMTBTMTUuNTIgMiAxMCAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtMyI+PHBhdGggZD0iTTkgMmMtMS4wNSAwLTIuMDUuMTYtMyAuNDYgNC4wNiAxLjI3IDcgNS4wNiA3IDkuNTQgMCA0LjQ4LTIuOTQgOC4yNy03IDkuNTQuOTUuMyAxLjk1LjQ2IDMgLjQ2IDUuNTIgMCAxMC00LjQ4IDEwLTEwUzE0LjUyIDIgOSAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNCI+PHBhdGggZD0iTTIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5TDIzLjMxIDEyIDIwIDguNjl6TTEyIDE4Yy0uODkgMC0xLjc0LS4yLTIuNS0uNTVDMTEuNTYgMTYuNSAxMyAxNC40MiAxMyAxMnMtMS40NC00LjUtMy41LTUuNDVDMTAuMjYgNi4yIDExLjExIDYgMTIgNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJicmlnaHRuZXNzLTUiPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThjLTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTYgNiAyLjY5IDYgNi0yLjY5IDYtNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNiI+PHBhdGggZD0iTTIwIDE1LjMxTDIzLjMxIDEyIDIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5ek0xMiAxOFY2YzMuMzEgMCA2IDIuNjkgNiA2cy0yLjY5IDYtNiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJyaWdodG5lc3MtNyI+PHBhdGggZD0iTTIwIDguNjlWNGgtNC42OUwxMiAuNjkgOC42OSA0SDR2NC42OUwuNjkgMTIgNCAxNS4zMVYyMGg0LjY5TDEyIDIzLjMxIDE1LjMxIDIwSDIwdi00LjY5TDIzLjMxIDEyIDIwIDguNjl6TTEyIDE4Yy0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02IDYgMi42OSA2IDYtMi42OSA2LTYgNnptMC0xMGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYnJva2VuLWltYWdlIj48cGF0aCBkPSJNMjEgNXY2LjU5bC0zLTMuMDEtNCA0LjAxLTQtNC00IDQtMy0zLjAxVjVjMC0xLjEuOS0yIDItMmgxNGMxLjEgMCAyIC45IDIgMnptLTMgNi40MmwzIDMuMDFWMTljMCAxLjEtLjkgMi0yIDJINWMtMS4xIDAtMi0uOS0yLTJ2LTYuNThsMyAyLjk5IDQtNCA0IDQgNC0zLjk5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJydXNoIj48cGF0aCBkPSJNNyAxNGMtMS42NiAwLTMgMS4zNC0zIDMgMCAxLjMxLTEuMTYgMi0yIDIgLjkyIDEuMjIgMi40OSAyIDQgMiAyLjIxIDAgNC0xLjc5IDQtNCAwLTEuNjYtMS4zNC0zLTMtM3ptMTMuNzEtOS4zN2wtMS4zNC0xLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMEw5IDEyLjI1IDExLjc1IDE1bDguOTYtOC45NmMuMzktLjM5LjM5LTEuMDIgMC0xLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJ1cnN0LW1vZGUiPjxwYXRoIGQ9Ik0xIDVoMnYxNEgxem00IDBoMnYxNEg1em0xNyAwSDEwYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoMTJjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xek0xMSAxN2wyLjUtMy4xNUwxNS4yOSAxNmwyLjUtMy4yMkwyMSAxN0gxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEiPjxwYXRoIGQ9Ik05LjQgMTAuNWw0Ljc3LTguMjZDMTMuNDcgMi4wOSAxMi43NSAyIDEyIDJjLTIuNCAwLTQuNi44NS02LjMyIDIuMjVsMy42NiA2LjM1LjA2LS4xek0yMS41NCA5Yy0uOTItMi45Mi0zLjE1LTUuMjYtNi02LjM0TDExLjg4IDloOS42NnptLjI2IDFoLTcuNDlsLjI5LjUgNC43NiA4LjI1QzIxIDE2Ljk3IDIyIDE0LjYxIDIyIDEyYzAtLjY5LS4wNy0xLjM1LS4yLTJ6TTguNTQgMTJsLTMuOS02Ljc1QzMuMDEgNy4wMyAyIDkuMzkgMiAxMmMwIC42OS4wNyAxLjM1LjIgMmg3LjQ5bC0xLjE1LTJ6bS02LjA4IDNjLjkyIDIuOTIgMy4xNSA1LjI2IDYgNi4zNEwxMi4xMiAxNUgyLjQ2em0xMS4yNyAwbC0zLjkgNi43NmMuNy4xNSAxLjQyLjI0IDIuMTcuMjQgMi40IDAgNC42LS44NSA2LjMyLTIuMjVsLTMuNjYtNi4zNS0uOTMgMS42eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1hbHQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjMuMiI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMkw3LjE3IDRINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDJIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FtZXJhLWZyb250Ij48cGF0aCBkPSJNMTAgMjBINXYyaDV2MmwzLTMtMy0zdjJ6bTQgMHYyaDV2LTJoLTV6TTEyIDhjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTEuOTkuOS0xLjk5IDJTMTAuOSA4IDEyIDh6bTUtOEg3QzUuOSAwIDUgLjkgNSAydjE0YzAgMS4xLjkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWMmMwLTEuMS0uOS0yLTItMnpNNyAyaDEwdjEwLjVjMC0xLjY3LTMuMzMtMi41LTUtMi41cy01IC44My01IDIuNVYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1yZWFyIj48cGF0aCBkPSJNMTAgMjBINXYyaDV2MmwzLTMtMy0zdjJ6bTQgMHYyaDV2LTJoLTV6bTMtMjBIN0M1LjkgMCA1IC45IDUgMnYxNGMwIDEuMS45IDIgMiAyaDEwYzEuMSAwIDItLjkgMi0yVjJjMC0xLjEtLjktMi0yLTJ6bS01IDZjLTEuMTEgMC0yLS45LTItMnMuODktMiAxLjk5LTIgMiAuOSAyIDJDMTQgNS4xIDEzLjEgNiAxMiA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhbWVyYS1yb2xsIj48cGF0aCBkPSJNMTQgNWMwLTEuMS0uOS0yLTItMmgtMVYyYzAtLjU1LS40NS0xLTEtMUg2Yy0uNTUgMC0xIC40NS0xIDF2MUg0Yy0xLjEgMC0yIC45LTIgMnYxNWMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJoOFY1aC04em0tMiAxM2gtMnYtMmgydjJ6bTAtOWgtMlY3aDJ2MnptNCA5aC0ydi0yaDJ2MnptMC05aC0yVjdoMnYyem00IDloLTJ2LTJoMnYyem0wLTloLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2VudGVyLWZvY3VzLXN0cm9uZyI+PHBhdGggZD0iTTEyIDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0tNyA3SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2VudGVyLWZvY3VzLXdlYWsiPjxwYXRoIGQ9Ik01IDE1SDN2NGMwIDEuMS45IDIgMiAyaDR2LTJINXYtNHpNNSA1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnY0aDJWNXptMTQtMmgtNHYyaDR2NGgyVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6TTEyIDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbGxlY3Rpb25zIj48cGF0aCBkPSJNMjIgMTZWNGMwLTEuMS0uOS0yLTItMkg4Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yem0tMTEtNGwyLjAzIDIuNzFMMTYgMTFsNCA1SDhsMy00ek0yIDZ2MTRjMCAxLjEuOSAyIDIgMmgxNHYtMkg0VjZIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xsZWN0aW9ucy1ib29rbWFyayI+PHBhdGggZD0iTTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xNi00SDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptMCAxMGwtMi41LTEuNUwxNSAxMlY0aDV2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb2xvci1sZW5zIj48cGF0aCBkPSJNMTIgM2MtNC45NyAwLTkgNC4wMy05IDlzNC4wMyA5IDkgOWMuODMgMCAxLjUtLjY3IDEuNS0xLjUgMC0uMzktLjE1LS43NC0uMzktMS4wMS0uMjMtLjI2LS4zOC0uNjEtLjM4LS45OSAwLS44My42Ny0xLjUgMS41LTEuNUgxNmMyLjc2IDAgNS0yLjI0IDUtNSAwLTQuNDItNC4wMy04LTktOHptLTUuNSA5Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTNS42NyA5IDYuNSA5IDggOS42NyA4IDEwLjUgNy4zMyAxMiA2LjUgMTJ6bTMtNEM4LjY3IDggOCA3LjMzIDggNi41UzguNjcgNSA5LjUgNXMxLjUuNjcgMS41IDEuNVMxMC4zMyA4IDkuNSA4em01IDBjLS44MyAwLTEuNS0uNjctMS41LTEuNVMxMy42NyA1IDE0LjUgNXMxLjUuNjcgMS41IDEuNVMxNS4zMyA4IDE0LjUgOHptMyA0Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTYuNjcgOSAxNy41IDlzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbG9yaXplIj48cGF0aCBkPSJNMjAuNzEgNS42M2wtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMy4xMiAzLjEyLTEuOTMtMS45MS0xLjQxIDEuNDEgMS40MiAxLjQyTDMgMTYuMjVWMjFoNC43NWw4LjkyLTguOTIgMS40MiAxLjQyIDEuNDEtMS40MS0xLjkyLTEuOTIgMy4xMi0zLjEyYy40LS40LjQtMS4wMy4wMS0xLjQyek02LjkyIDE5TDUgMTcuMDhsOC4wNi04LjA2IDEuOTIgMS45Mkw2LjkyIDE5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbXBhcmUiPjxwYXRoIGQ9Ik0xMCAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoNXYyaDJWMWgtMnYyem0wIDE1SDVsNS02djZ6bTktMTVoLTV2Mmg1djEzbC01LTZ2OWg1YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY29udHJvbC1wb2ludCI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwIDEwLTQuNDkgMTAtMTBTMTcuNTEgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250cm9sLXBvaW50LWR1cGxpY2F0ZSI+PHBhdGggZD0iTTE2IDhoLTJ2M2gtM3YyaDN2M2gydi0zaDN2LTJoLTN6TTIgMTJjMC0yLjc5IDEuNjQtNS4yIDQuMDEtNi4zMlYzLjUyQzIuNTIgNC43NiAwIDguMDkgMCAxMnMyLjUyIDcuMjQgNi4wMSA4LjQ4di0yLjE2QzMuNjQgMTcuMiAyIDE0Ljc5IDIgMTJ6bTEzLTljLTQuOTYgMC05IDQuMDQtOSA5czQuMDQgOSA5IDkgOS00LjA0IDktOS00LjA0LTktOS05em0wIDE2Yy0zLjg2IDAtNy0zLjE0LTctN3MzLjE0LTcgNy03IDcgMy4xNCA3IDctMy4xNCA3LTcgN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wIj48cGF0aCBkPSJNMTcgMTVoMlY3YzAtMS4xLS45LTItMi0ySDl2Mmg4djh6TTcgMTdWMUg1djRIMXYyaDR2MTBjMCAxLjEuOSAyIDIgMmgxMHY0aDJ2LTRoNHYtMkg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtMTYtOSI+PHBhdGggZD0iTTE5IDZINWMtMS4xIDAtMiAuOS0yIDJ2OGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTBINVY4aDE0djh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC0zLTIiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg1VjZoMTR2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC01LTQiPjxwYXRoIGQ9Ik0xOSA1SDVjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnptMCAxMkg1VjdoMTR2MTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC03LTUiPjxwYXRoIGQ9Ik0xOSA3SDVjLTEuMSAwLTIgLjktMiAydjZjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY5YzAtMS4xLS45LTItMi0yem0wIDhINVY5aDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1kaW4iPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1mcmVlIj48cGF0aCBkPSJNMyA1djRoMlY1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnptMiAxMEgzdjRjMCAxLjEuOSAyIDIgMmg0di0ySDV2LTR6bTE0IDRoLTR2Mmg0YzEuMSAwIDItLjkgMi0ydi00aC0ydjR6bTAtMTZoLTR2Mmg0djRoMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3AtbGFuZHNjYXBlIj48cGF0aCBkPSJNMTkgNUg1Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTJINVY3aDE0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNyb3Atb3JpZ2luYWwiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNkg1VjVoMTR2MTR6bS01LjA0LTYuNzFsLTIuNzUgMy41NC0xLjk2LTIuMzZMNi41IDE3aDExbC0zLjU0LTQuNzF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1wb3J0cmFpdCI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDdWNWgxMHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcm9wLXJvdGF0ZSI+PHBhdGggZD0iTTcuNDcgMjEuNDlDNC4yIDE5LjkzIDEuODYgMTYuNzYgMS41IDEzSDBjLjUxIDYuMTYgNS42NiAxMSAxMS45NSAxMSAuMjMgMCAuNDQtLjAyLjY2LS4wM0w4LjggMjAuMTVsLTEuMzMgMS4zNHpNMTIuMDUgMGMtLjIzIDAtLjQ0LjAyLS42Ni4wNGwzLjgxIDMuODEgMS4zMy0xLjMzQzE5LjggNC4wNyAyMi4xNCA3LjI0IDIyLjUgMTFIMjRjLS41MS02LjE2LTUuNjYtMTEtMTEuOTUtMTF6TTE2IDE0aDJWOGMwLTEuMTEtLjktMi0yLTJoLTZ2Mmg2djZ6bS04IDJWNEg2djJINHYyaDJ2OGMwIDEuMS44OSAyIDIgMmg4djJoMnYtMmgydi0ySDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JvcC1zcXVhcmUiPjxwYXRoIGQ9Ik0xOCA0SDZjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNEg2VjZoMTJ2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGVoYXplIj48cGF0aCBkPSJNMiAxNS41djJoMjB2LTJIMnptMC01djJoMjB2LTJIMnptMC01djJoMjB2LTJIMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZXRhaWxzIj48cGF0aCBkPSJNMyA0bDkgMTYgOS0xNkgzem0zLjM4IDJoMTEuMjVMMTIgMTYgNi4zOCA2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVkaXQiPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUiPjxwYXRoIGQ9Ik0xNSAxN3YyaDJ2LTJoMnYtMmgtMnYtMmgtMnYyaC0ydjJoMnptNS0xNUg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTUgNWg2djJINVY1em0xNSAxNUg0TDIwIDR2MTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtbmVnLTEiPjxwYXRoIGQ9Ik00IDExdjJoOHYtMkg0em0xNSA3aC0yVjcuMzhMMTQgOC40VjYuN0wxOC43IDVoLjN2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtbmVnLTIiPjxwYXRoIGQ9Ik0xNS4wNSAxNi4yOWwyLjg2LTMuMDdjLjM4LS4zOS43Mi0uNzkgMS4wNC0xLjE4LjMyLS4zOS41OS0uNzguODItMS4xNy4yMy0uMzkuNDEtLjc4LjU0LTEuMTdzLjE5LS43OS4xOS0xLjE4YzAtLjUzLS4wOS0xLjAyLS4yNy0xLjQ2LS4xOC0uNDQtLjQ0LS44MS0uNzgtMS4xMS0uMzQtLjMxLS43Ny0uNTQtMS4yNi0uNzEtLjUxLS4xNi0xLjA4LS4yNC0xLjcyLS4yNC0uNjkgMC0xLjMxLjExLTEuODUuMzItLjU0LjIxLTEgLjUxLTEuMzYuODgtLjM3LjM3LS42NS44LS44NCAxLjMtLjE4LjQ3LS4yNy45Ny0uMjggMS41aDIuMTRjLjAxLS4zMS4wNS0uNi4xMy0uODcuMDktLjI5LjIzLS41NC40LS43NS4xOC0uMjEuNDEtLjM3LjY4LS40OS4yNy0uMTIuNi0uMTguOTYtLjE4LjMxIDAgLjU4LjA1LjgxLjE1LjIzLjEuNDMuMjUuNTkuNDMuMTYuMTguMjguNC4zNy42NS4wOC4yNS4xMy41Mi4xMy44MSAwIC4yMi0uMDMuNDMtLjA4LjY1LS4wNi4yMi0uMTUuNDUtLjI5LjctLjE0LjI1LS4zMi41My0uNTYuODMtLjIzLjMtLjUyLjY1LS44OCAxLjAzbC00LjE3IDQuNTVWMThIMjF2LTEuNzFoLTUuOTV6TTIgMTF2Mmg4di0ySDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXhwb3N1cmUtcGx1cy0xIj48cGF0aCBkPSJNMTAgN0g4djRINHYyaDR2NGgydi00aDR2LTJoLTRWN3ptMTAgMTFoLTJWNy4zOEwxNSA4LjRWNi43TDE5LjcgNWguM3YxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBvc3VyZS1wbHVzLTIiPjxwYXRoIGQ9Ik0xNi4wNSAxNi4yOWwyLjg2LTMuMDdjLjM4LS4zOS43Mi0uNzkgMS4wNC0xLjE4LjMyLS4zOS41OS0uNzguODItMS4xNy4yMy0uMzkuNDEtLjc4LjU0LTEuMTcuMTMtLjM5LjE5LS43OS4xOS0xLjE4IDAtLjUzLS4wOS0xLjAyLS4yNy0xLjQ2LS4xOC0uNDQtLjQ0LS44MS0uNzgtMS4xMS0uMzQtLjMxLS43Ny0uNTQtMS4yNi0uNzEtLjUxLS4xNi0xLjA4LS4yNC0xLjcyLS4yNC0uNjkgMC0xLjMxLjExLTEuODUuMzItLjU0LjIxLTEgLjUxLTEuMzYuODgtLjM3LjM3LS42NS44LS44NCAxLjMtLjE4LjQ3LS4yNy45Ny0uMjggMS41aDIuMTRjLjAxLS4zMS4wNS0uNi4xMy0uODcuMDktLjI5LjIzLS41NC40LS43NS4xOC0uMjEuNDEtLjM3LjY4LS40OS4yNy0uMTIuNi0uMTguOTYtLjE4LjMxIDAgLjU4LjA1LjgxLjE1LjIzLjEuNDMuMjUuNTkuNDMuMTYuMTguMjguNC4zNy42NS4wOC4yNS4xMy41Mi4xMy44MSAwIC4yMi0uMDMuNDMtLjA4LjY1LS4wNi4yMi0uMTUuNDUtLjI5LjctLjE0LjI1LS4zMi41My0uNTYuODMtLjIzLjMtLjUyLjY1LS44OCAxLjAzbC00LjE3IDQuNTVWMThIMjJ2LTEuNzFoLTUuOTV6TTggN0g2djRIMnYyaDR2NGgydi00aDR2LTJIOFY3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cG9zdXJlLXplcm8iPjxwYXRoIGQ9Ik0xNi4xNCAxMi41YzAgMS0uMSAxLjg1LS4zIDIuNTUtLjIuNy0uNDggMS4yNy0uODMgMS43LS4zNi40NC0uNzkuNzUtMS4zLjk1LS41MS4yLTEuMDcuMy0xLjcuMy0uNjIgMC0xLjE4LS4xLTEuNjktLjMtLjUxLS4yLS45NS0uNTEtMS4zMS0uOTUtLjM2LS40NC0uNjUtMS4wMS0uODUtMS43LS4yLS43LS4zLTEuNTUtLjMtMi41NXYtMi4wNGMwLTEgLjEtMS44NS4zLTIuNTUuMi0uNy40OC0xLjI2Ljg0LTEuNjkuMzYtLjQzLjgtLjc0IDEuMzEtLjkzQzEwLjgxIDUuMSAxMS4zOCA1IDEyIDVjLjYzIDAgMS4xOS4xIDEuNy4yOS41MS4xOS45NS41IDEuMzEuOTMuMzYuNDMuNjQuOTkuODQgMS42OS4yLjcuMyAxLjU0LjMgMi41NXYyLjA0em0tMi4xMS0yLjM2YzAtLjY0LS4wNS0xLjE4LS4xMy0xLjYyLS4wOS0uNDQtLjIyLS43OS0uNC0xLjA2LS4xNy0uMjctLjM5LS40Ni0uNjQtLjU4LS4yNS0uMTMtLjU0LS4xOS0uODYtLjE5LS4zMiAwLS42MS4wNi0uODYuMThzLS40Ny4zMS0uNjQuNThjLS4xNy4yNy0uMzEuNjItLjQgMS4wNnMtLjEzLjk4LS4xMyAxLjYydjIuNjdjMCAuNjQuMDUgMS4xOC4xNCAxLjYyLjA5LjQ1LjIzLjgxLjQgMS4wOXMuMzkuNDguNjQuNjEuNTQuMTkuODcuMTljLjMzIDAgLjYyLS4wNi44Ny0uMTlzLjQ2LS4zMy42My0uNjFjLjE3LS4yOC4zLS42NC4zOS0xLjA5LjA5LS40NS4xMy0uOTkuMTMtMS42MnYtMi42NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXIiPjxwYXRoIGQ9Ik0xNS45NiAxMC4yOWwtMi43NSAzLjU0LTEuOTYtMi4zNkw4LjUgMTVoMTFsLTMuNTQtNC43MXpNMyA1SDF2MTZjMCAxLjEuOSAyIDIgMmgxNnYtMkgzVjV6bTE4LTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItMSI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xMSAxMGgyVjVoLTR2Mmgydjh6bTctMTRIN2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTItMi0yem0wIDE2SDdWM2gxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItMiI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS00LTRoLTR2LTJoMmMxLjEgMCAyLS44OSAyLTJWN2MwLTEuMTEtLjktMi0yLTJoLTR2Mmg0djJoLTJjLTEuMSAwLTIgLjg5LTIgMnY0aDZ2LTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTMiPjxwYXRoIGQ9Ik0yMSAxSDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6TTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xNCA4di0xLjVjMC0uODMtLjY3LTEuNS0xLjUtMS41LjgzIDAgMS41LS42NyAxLjUtMS41VjdjMC0xLjExLS45LTItMi0yaC00djJoNHYyaC0ydjJoMnYyaC00djJoNGMxLjEgMCAyLS44OSAyLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTQiPjxwYXRoIGQ9Ik0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTIgMTBoMlY1aC0ydjRoLTJWNWgtMnY2aDR2NHptNi0xNEg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci01Ij48cGF0aCBkPSJNMjEgMUg3Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjNjMC0xLjEtLjktMi0yLTJ6bTAgMTZIN1YzaDE0djE0ek0zIDVIMXYxNmMwIDEuMS45IDIgMiAyaDE2di0ySDNWNXptMTQgOHYtMmMwLTEuMTEtLjktMi0yLTJoLTJWN2g0VjVoLTZ2Nmg0djJoLTR2Mmg0YzEuMSAwIDItLjg5IDItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNiI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS04LTJoMmMxLjEgMCAyLS44OSAyLTJ2LTJjMC0xLjExLS45LTItMi0yaC0yVjdoNFY1aC00Yy0xLjEgMC0yIC44OS0yIDJ2NmMwIDEuMTEuOSAyIDIgMnptMC00aDJ2MmgtMnYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItNyI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS04LTJsNC04VjVoLTZ2Mmg0bC00IDhoMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItOCI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6bS04LTJoMmMxLjEgMCAyLS44OSAyLTJ2LTEuNWMwLS44My0uNjctMS41LTEuNS0xLjUuODMgMCAxLjUtLjY3IDEuNS0xLjVWN2MwLTEuMTEtLjktMi0yLTJoLTJjLTEuMSAwLTIgLjg5LTIgMnYxLjVjMCAuODMuNjcgMS41IDEuNSAxLjUtLjgzIDAtMS41LjY3LTEuNSAxLjVWMTNjMCAxLjExLjkgMiAyIDJ6bTAtOGgydjJoLTJWN3ptMCA0aDJ2MmgtMnYtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItOSI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6TTE1IDVoLTJjLTEuMSAwLTIgLjg5LTIgMnYyYzAgMS4xMS45IDIgMiAyaDJ2MmgtNHYyaDRjMS4xIDAgMi0uODkgMi0yVjdjMC0xLjExLS45LTItMi0yem0wIDRoLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLTktcGx1cyI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xMSA3VjhjMC0xLjExLS45LTItMi0yaC0xYy0xLjEgMC0yIC44OS0yIDJ2MWMwIDEuMTEuOSAyIDIgMmgxdjFIOXYyaDNjMS4xIDAgMi0uODkgMi0yem0tMy0zVjhoMXYxaC0xem0xMC04SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCA4aC0yVjdoLTJ2MmgtMnYyaDJ2Mmgydi0yaDJ2Nkg3VjNoMTR2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItYi1hbmQtdyI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2bC03LTh2OEg1bDctOFY1aDd2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWNlbnRlci1mb2N1cyI+PHBhdGggZD0iTTUgMTVIM3Y0YzAgMS4xLjkgMiAyIDJoNHYtMkg1di00ek01IDVoNFYzSDVjLTEuMSAwLTIgLjktMiAydjRoMlY1em0xNC0yaC00djJoNHY0aDJWNWMwLTEuMS0uOS0yLTItMnptMCAxNmgtNHYyaDRjMS4xIDAgMi0uOSAyLTJ2LTRoLTJ2NHpNMTIgOWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWRyYW1hIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNjEgNS42NCA1LjM2IDguMDQgMi4zNSA4LjM2IDAgMTAuOSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xOSAxOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDRoMmMwLTIuNzYtMS44Ni01LjA4LTQuNC01Ljc4QzguNjEgNi44OCAxMC4yIDYgMTIgNmMzLjAzIDAgNS41IDIuNDcgNS41IDUuNXYuNUgxOWMxLjY1IDAgMyAxLjM1IDMgM3MtMS4zNSAzLTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItZnJhbWVzIj48cGF0aCBkPSJNMjAgNGgtNGwtNC00LTQgNEg0Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTZINFY2aDQuNTJsMy41Mi0zLjVMMTUuNTIgNkgyMHYxNHpNMTggOEg2djEwaDEyIj48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLWhkciI+PHBhdGggZD0iTTE0IDZsLTMuNzUgNSAyLjg1IDMuOC0xLjYgMS4yQzkuODEgMTMuNzUgNyAxMCA3IDEwbC02IDhoMjJMMTQgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWx0ZXItbm9uZSI+PHBhdGggZD0iTTMgNUgxdjE2YzAgMS4xLjkgMiAyIDJoMTZ2LTJIM1Y1em0xOC00SDdjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWM2MwLTEuMS0uOS0yLTItMnptMCAxNkg3VjNoMTR2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLXRpbHQtc2hpZnQiPjxwYXRoIGQ9Ik0xMSA0LjA3VjIuMDVjLTIuMDEuMi0zLjg0IDEtNS4zMiAyLjIxTDcuMSA1LjY5YzEuMTEtLjg2IDIuNDQtMS40NCAzLjktMS42MnptNy4zMi4xOUMxNi44NCAzLjA1IDE1LjAxIDIuMjUgMTMgMi4wNXYyLjAyYzEuNDYuMTggMi43OS43NiAzLjkgMS42MmwxLjQyLTEuNDN6TTE5LjkzIDExaDIuMDJjLS4yLTIuMDEtMS0zLjg0LTIuMjEtNS4zMkwxOC4zMSA3LjFjLjg2IDEuMTEgMS40NCAyLjQ0IDEuNjIgMy45ek01LjY5IDcuMUw0LjI2IDUuNjhDMy4wNSA3LjE2IDIuMjUgOC45OSAyLjA1IDExaDIuMDJjLjE4LTEuNDYuNzYtMi43OSAxLjYyLTMuOXpNNC4wNyAxM0gyLjA1Yy4yIDIuMDEgMSAzLjg0IDIuMjEgNS4zMmwxLjQzLTEuNDNjLS44Ni0xLjEtMS40NC0yLjQzLTEuNjItMy44OXpNMTUgMTJjMC0xLjY2LTEuMzQtMy0zLTNzLTMgMS4zNC0zIDMgMS4zNCAzIDMgMyAzLTEuMzQgMy0zem0zLjMxIDQuOWwxLjQzIDEuNDNjMS4yMS0xLjQ4IDIuMDEtMy4zMiAyLjIxLTUuMzJoLTIuMDJjLS4xOCAxLjQ1LS43NiAyLjc4LTEuNjIgMy44OXpNMTMgMTkuOTN2Mi4wMmMyLjAxLS4yIDMuODQtMSA1LjMyLTIuMjFsLTEuNDMtMS40M2MtMS4xLjg2LTIuNDMgMS40NC0zLjg5IDEuNjJ6bS03LjMyLS4xOUM3LjE2IDIwLjk1IDkgMjEuNzUgMTEgMjEuOTV2LTIuMDJjLTEuNDYtLjE4LTIuNzktLjc2LTMuOS0xLjYybC0xLjQyIDEuNDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsdGVyLXZpbnRhZ2UiPjxwYXRoIGQ9Ik0xOC43IDEyLjRjLS4yOC0uMTYtLjU3LS4yOS0uODYtLjQuMjktLjExLjU4LS4yNC44Ni0uNCAxLjkyLTEuMTEgMi45OS0zLjEyIDMtNS4xOS0xLjc5LTEuMDMtNC4wNy0xLjExLTYgMC0uMjguMTYtLjU0LjM1LS43OC41NC4wNS0uMzEuMDgtLjYzLjA4LS45NSAwLTIuMjItMS4yMS00LjE1LTMtNS4xOUMxMC4yMSAxLjg1IDkgMy43OCA5IDZjMCAuMzIuMDMuNjQuMDguOTUtLjI0LS4yLS41LS4zOS0uNzgtLjU1LTEuOTItMS4xMS00LjItMS4wMy02IDAgMCAyLjA3IDEuMDcgNC4wOCAzIDUuMTkuMjguMTYuNTcuMjkuODYuNC0uMjkuMTEtLjU4LjI0LS44Ni40LTEuOTIgMS4xMS0yLjk5IDMuMTItMyA1LjE5IDEuNzkgMS4wMyA0LjA3IDEuMTEgNiAwIC4yOC0uMTYuNTQtLjM1Ljc4LS41NC0uMDUuMzItLjA4LjY0LS4wOC45NiAwIDIuMjIgMS4yMSA0LjE1IDMgNS4xOSAxLjc5LTEuMDQgMy0yLjk3IDMtNS4xOSAwLS4zMi0uMDMtLjY0LS4wOC0uOTUuMjQuMi41LjM4Ljc4LjU0IDEuOTIgMS4xMSA0LjIgMS4wMyA2IDAtLjAxLTIuMDctMS4wOC00LjA4LTMtNS4xOXpNMTIgMTZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTQgNCAxLjc5IDQgNC0xLjc5IDQtNCA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXJlIj48cGF0aCBkPSJNNyAxMUgxdjJoNnYtMnptMi4xNy0zLjI0TDcuMDUgNS42NCA1LjY0IDcuMDVsMi4xMiAyLjEyIDEuNDEtMS40MXpNMTMgMWgtMnY2aDJWMXptNS4zNiA2LjA1bC0xLjQxLTEuNDEtMi4xMiAyLjEyIDEuNDEgMS40MSAyLjEyLTIuMTJ6TTE3IDExdjJoNnYtMmgtNnptLTUtMmMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6bTIuODMgNy4yNGwyLjEyIDIuMTIgMS40MS0xLjQxLTIuMTItMi4xMi0xLjQxIDEuNDF6bS05LjE5LjcxbDEuNDEgMS40MSAyLjEyLTIuMTItMS40MS0xLjQxLTIuMTIgMi4xMnpNMTEgMjNoMnYtNmgtMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsYXNoLWF1dG8iPjxwYXRoIGQ9Ik0zIDJ2MTJoM3Y5bDctMTJIOWw0LTlIM3ptMTYgMGgtMmwtMy4yIDloMS45bC43LTJoMy4ybC43IDJoMS45TDE5IDJ6bS0yLjE1IDUuNjVMMTggNGwxLjE1IDMuNjVoLTIuM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFzaC1vZmYiPjxwYXRoIGQ9Ik0zLjI3IDNMMiA0LjI3bDUgNVYxM2gzdjlsMy41OC02LjE0TDE3LjczIDIwIDE5IDE4LjczIDMuMjcgM3pNMTcgMTBoLTRsNC04SDd2Mi4xOGw4LjQ2IDguNDZMMTcgMTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxhc2gtb24iPjxwYXRoIGQ9Ik03IDJ2MTFoM3Y5bDctMTJoLTRsNC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZsaXAiPjxwYXRoIGQ9Ik0xNSAyMWgydi0yaC0ydjJ6bTQtMTJoMlY3aC0ydjJ6TTMgNXYxNGMwIDEuMS45IDIgMiAyaDR2LTJINVY1aDRWM0g1Yy0xLjEgMC0yIC45LTIgMnptMTYtMnYyaDJjMC0xLjEtLjktMi0yLTJ6bS04IDIwaDJWMWgtMnYyMnptOC02aDJ2LTJoLTJ2MnpNMTUgNWgyVjNoLTJ2MnptNCA4aDJ2LTJoLTJ2MnptMCA4YzEuMSAwIDItLjkgMi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JhZGllbnQiPjxwYXRoIGQ9Ik0xMSA5aDJ2MmgtMnptLTIgMmgydjJIOXptNCAwaDJ2MmgtMnptMi0yaDJ2MmgtMnpNNyA5aDJ2Mkg3em0xMi02SDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnpNOSAxOEg3di0yaDJ2MnptNCAwaC0ydi0yaDJ2MnptNCAwaC0ydi0yaDJ2MnptMi03aC0ydjJoMnYyaC0ydi0yaC0ydjJoLTJ2LTJoLTJ2Mkg5di0ySDd2Mkg1di0yaDJ2LTJINVY1aDE0djZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JhaW4iPjxwYXRoIGQ9Ik0xMCAxMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6TTYgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTEyLThjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0tNCA4Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptNC00Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptLTQtNGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS00LTRjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdyaWQtb2ZmIj48cGF0aCBkPSJNOCA0djEuNDVsMiAyVjRoNHY0aC0zLjQ1bDIgMkgxNHYxLjQ1bDIgMlYxMGg0djRoLTMuNDVsMiAySDIwdjEuNDVsMiAyVjRjMC0xLjEtLjktMi0yLTJINC41NWwyIDJIOHptOCAwaDR2NGgtNFY0ek0xLjI3IDEuMjdMMCAyLjU1bDIgMlYyMGMwIDEuMS45IDIgMiAyaDE1LjQ2bDIgMiAxLjI3LTEuMjdMMS4yNyAxLjI3ek0xMCAxMi41NUwxMS40NSAxNEgxMHYtMS40NXptLTYtNkw1LjQ1IDhINFY2LjU1ek04IDIwSDR2LTRoNHY0em0wLTZINHYtNGgzLjQ1bC41NS41NVYxNHptNiA2aC00di00aDMuNDVsLjU1LjU0VjIwem0yIDB2LTEuNDZMMTcuNDYgMjBIMTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JpZC1vbiI+PHBhdGggZD0iTTIwIDJINGMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek04IDIwSDR2LTRoNHY0em0wLTZINHYtNGg0djR6bTAtNkg0VjRoNHY0em02IDEyaC00di00aDR2NHptMC02aC00di00aDR2NHptMC02aC00VjRoNHY0em02IDEyaC00di00aDR2NHptMC02aC00di00aDR2NHptMC02aC00VjRoNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci1vZmYiPjxwYXRoIGQ9Ik0xNy41IDE1di0yaDEuMWwuOSAySDIxbC0uOS0yLjFjLjUtLjIuOS0uOC45LTEuNHYtMWMwLS44LS43LTEuNS0xLjUtMS41SDE2djQuOWwxLjEgMS4xaC40em0wLTQuNWgydjFoLTJ2LTF6bS00LjUgMHYuNGwxLjUgMS41di0xLjljMC0uOC0uNy0xLjUtMS41LTEuNWgtMS45bDEuNSAxLjVoLjR6bS0zLjUtMWwtNy03LTEuMSAxTDYuOSA5aC0uNHYyaC0yVjlIM3Y2aDEuNXYtMi41aDJWMTVIOHYtNC45bDEuNSAxLjVWMTVoMy40bDcuNiA3LjYgMS4xLTEuMS0xMi4xLTEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhkci1vbiI+PHBhdGggZD0iTTIxIDExLjV2LTFjMC0uOC0uNy0xLjUtMS41LTEuNUgxNnY2aDEuNXYtMmgxLjFsLjkgMkgyMWwtLjktMi4xYy41LS4zLjktLjguOS0xLjR6bS0xLjUgMGgtMnYtMWgydjF6bS0xMy0uNWgtMlY5SDN2NmgxLjV2LTIuNWgyVjE1SDhWOUg2LjV2MnpNMTMgOUg5LjV2NkgxM2MuOCAwIDEuNS0uNyAxLjUtMS41di0zYzAtLjgtLjctMS41LTEuNS0xLjV6bTAgNC41aC0ydi0zaDJ2M3oiPjwvcGF0aD48L2c+CjxnIGlkPSJoZHItc3Ryb25nIj48cGF0aCBkPSJNMTcgNmMtMy4zMSAwLTYgMi42OS02IDZzMi42OSA2IDYgNiA2LTIuNjkgNi02LTIuNjktNi02LTZ6TTUgOGMtMi4yMSAwLTQgMS43OS00IDRzMS43OSA0IDQgNCA0LTEuNzkgNC00LTEuNzktNC00LTR6bTAgNmMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGRyLXdlYWsiPjxwYXRoIGQ9Ik01IDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0xMi0yYy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2IDYtMi42OSA2LTYtMi42OS02LTYtNnptMCAxMGMtMi4yMSAwLTQtMS43OS00LTRzMS43OS00IDQtNCA0IDEuNzkgNCA0LTEuNzkgNC00IDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVhbGluZyI+PHBhdGggZD0iTTE3LjczIDEyLjAybDMuOTgtMy45OGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC00LjM0LTQuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0zLjk4IDMuOThMOCAyLjI5QzcuOCAyLjEgNy41NSAyIDcuMjkgMmMtLjI1IDAtLjUxLjEtLjcuMjlMMi4yNSA2LjYzYy0uMzkuMzktLjM5IDEuMDIgMCAxLjQxbDMuOTggMy45OEwyLjI1IDE2Yy0uMzkuMzktLjM5IDEuMDIgMCAxLjQxbDQuMzQgNC4zNGMuMzkuMzkgMS4wMi4zOSAxLjQxIDBsMy45OC0zLjk4IDMuOTggMy45OGMuMi4yLjQ1LjI5LjcxLjI5LjI2IDAgLjUxLS4xLjcxLS4yOWw0LjM0LTQuMzRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMy45OS0zLjk4ek0xMiA5Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bS00LjcxIDEuOTZMMy42NiA3LjM0bDMuNjMtMy42MyAzLjYyIDMuNjItMy42MiAzLjYzek0xMCAxM2MtLjU1IDAtMS0uNDUtMS0xcy40NS0xIDEtMSAxIC40NSAxIDEtLjQ1IDEtMSAxem0yIDJjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptMi00Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTIuNjYgOS4zNGwtMy42My0zLjYyIDMuNjMtMy42MyAzLjYyIDMuNjItMy42MiAzLjYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImltYWdlIj48cGF0aCBkPSJNMjEgMTlWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yek04LjUgMTMuNWwyLjUgMy4wMUwxNC41IDEybDQuNSA2SDVsMy41LTQuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbWFnZS1hc3BlY3QtcmF0aW8iPjxwYXRoIGQ9Ik0xNiAxMGgtMnYyaDJ2LTJ6bTAgNGgtMnYyaDJ2LTJ6bS04LTRINnYyaDJ2LTJ6bTQgMGgtMnYyaDJ2LTJ6bTgtNkg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTRINFY2aDE2djEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImlzbyI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek01LjUgNy41aDJ2LTJIOXYyaDJWOUg5djJINy41VjloLTJWNy41ek0xOSAxOUg1TDE5IDV2MTR6bS0yLTJ2LTEuNWgtNVYxN2g1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhbmRzY2FwZSI+PHBhdGggZD0iTTE0IDZsLTMuNzUgNSAyLjg1IDMuOC0xLjYgMS4yQzkuODEgMTMuNzUgNyAxMCA3IDEwbC02IDhoMjJMMTQgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsZWFrLWFkZCI+PHBhdGggZD0iTTYgM0gzdjNjMS42NiAwIDMtMS4zNCAzLTN6bTggMGgtMmMwIDQuOTctNC4wMyA5LTkgOXYyYzYuMDggMCAxMS00LjkzIDExLTExem0tNCAwSDhjMCAyLjc2LTIuMjQgNS01IDV2MmMzLjg3IDAgNy0zLjEzIDctN3ptMCAxOGgyYzAtNC45NyA0LjAzLTkgOS05di0yYy02LjA3IDAtMTEgNC45My0xMSAxMXptOCAwaDN2LTNjLTEuNjYgMC0zIDEuMzQtMyAzem0tNCAwaDJjMC0yLjc2IDIuMjQtNSA1LTV2LTJjLTMuODcgMC03IDMuMTMtNyA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxlYWstcmVtb3ZlIj48cGF0aCBkPSJNMTAgM0g4YzAgLjM3LS4wNC43Mi0uMTIgMS4wNmwxLjU5IDEuNTlDOS44MSA0Ljg0IDEwIDMuOTQgMTAgM3pNMyA0LjI3bDIuODQgMi44NEM1LjAzIDcuNjcgNC4wNiA4IDMgOHYyYzEuNjEgMCAzLjA5LS41NSA0LjI3LTEuNDZMOC43IDkuOTdDNy4xNCAxMS4yNCA1LjE2IDEyIDMgMTJ2MmMyLjcxIDAgNS4xOS0uOTkgNy4xMS0yLjYybDIuNSAyLjVDMTAuOTkgMTUuODEgMTAgMTguMjkgMTAgMjFoMmMwLTIuMTYuNzYtNC4xNCAyLjAzLTUuNjlsMS40MyAxLjQzQzE0LjU1IDE3LjkxIDE0IDE5LjM5IDE0IDIxaDJjMC0xLjA2LjMzLTIuMDMuODktMi44NEwxOS43MyAyMSAyMSAxOS43MyA0LjI3IDMgMyA0LjI3ek0xNCAzaC0yYzAgMS41LS4zNyAyLjkxLTEuMDIgNC4xNmwxLjQ2IDEuNDZDMTMuNDIgNi45OCAxNCA1LjA2IDE0IDN6bTUuOTQgMTMuMTJjLjM0LS4wOC42OS0uMTIgMS4wNi0uMTJ2LTJjLS45NCAwLTEuODQuMTktMi42Ni41MmwxLjYgMS42em0tNC41Ni00LjU2bDEuNDYgMS40NkMxOC4wOSAxMi4zNyAxOS41IDEyIDIxIDEydi0yYy0yLjA2IDAtMy45OC41OC01LjYyIDEuNTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGVucyI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGlua2VkLWNhbWVyYSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxNCIgcj0iMy4yIj48L2NpcmNsZT48cGF0aCBkPSJNMTYgMy4zM2MyLjU4IDAgNC42NyAyLjA5IDQuNjcgNC42N0gyMmMwLTMuMzEtMi42OS02LTYtNnYxLjMzTTE2IDZjMS4xMSAwIDIgLjg5IDIgMmgxLjMzYzAtMS44NC0xLjQ5LTMuMzMtMy4zMy0zLjMzVjYiPjwvcGF0aD48cGF0aCBkPSJNMTcgOWMwLTEuMTEtLjg5LTItMi0yVjRIOUw3LjE3IDZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY5aC01em0tNSAxMGMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3MiPjxwYXRoIGQ9Ik0xMiAxMGMtMy44NiAwLTcgMy4xNC03IDdoMmMwLTIuNzYgMi4yNC01IDUtNXM1IDIuMjQgNSA1aDJjMC0zLjg2LTMuMTQtNy03LTd6bTAtNEM1LjkzIDYgMSAxMC45MyAxIDE3aDJjMC00Ljk2IDQuMDQtOSA5LTlzOSA0LjA0IDkgOWgyYzAtNi4wNy00LjkzLTExLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTMiPjxwYXRoIGQ9Ik0xOS4wMSAzaC0xNGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA3LjVjMCAuODMtLjY3IDEuNS0xLjUgMS41LjgzIDAgMS41LjY3IDEuNSAxLjVWMTVjMCAxLjExLS45IDItMiAyaC00di0yaDR2LTJoLTJ2LTJoMlY5aC00VjdoNGMxLjEgMCAyIC44OSAyIDJ2MS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLTQiPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgMTRoLTJ2LTRIOVY3aDJ2NGgyVjdoMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy01Ij48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS00IDZoLTR2MmgyYzEuMSAwIDIgLjg5IDIgMnYyYzAgMS4xMS0uOSAyLTIgMkg5di0yaDR2LTJIOVY3aDZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb29rcy02Ij48cGF0aCBkPSJNMTEgMTVoMnYtMmgtMnYyem04LTEySDVjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTQgNmgtNHYyaDJjMS4xIDAgMiAuODkgMiAydjJjMCAxLjExLS45IDItMiAyaC0yYy0xLjEgMC0yLS44OS0yLTJWOWMwLTEuMTEuOS0yIDItMmg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibG9va3Mtb25lIj48cGF0aCBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS01IDE0aC0yVjloLTJWN2g0djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxvb2tzLXR3byI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNCA4YzAgMS4xMS0uOSAyLTIgMmgtMnYyaDR2Mkg5di00YzAtMS4xMS45LTIgMi0yaDJWOUg5VjdoNGMxLjEgMCAyIC44OSAyIDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3VwZSI+PHBhdGggZD0iTTEzIDdoLTJ2NEg3djJoNHY0aDJ2LTRoNHYtMmgtNFY3em0tMS01QzYuNDkgMiAyIDYuNDkgMiAxMnM0LjQ5IDEwIDEwIDEwaDhjMS4xIDAgMi0uOSAyLTJ2LThjMC01LjUxLTQuNDktMTAtMTAtMTB6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vbm9jaHJvbWUtcGhvdG9zIj48cGF0aCBkPSJNMjAgNWgtMy4yTDE1IDNIOUw3LjIgNUg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bTAgMTRoLTh2LTFjLTIuOCAwLTUtMi4yLTUtNXMyLjItNSA1LTVWN2g4djEyem0tMy02YzAtMi44LTIuMi01LTUtNXYxLjhjMS44IDAgMy4yIDEuNCAzLjIgMy4ycy0xLjQgMy4yLTMuMiAzLjJWMThjMi44IDAgNS0yLjIgNS01em0tOC4yIDBjMCAxLjggMS40IDMuMiAzLjIgMy4yVjkuOGMtMS44IDAtMy4yIDEuNC0zLjIgMy4yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdmllLWNyZWF0aW9uIj48cGF0aCBkPSJNMTggNGwyIDRoLTNsLTItNGgtMmwyIDRoLTNsLTItNEg4bDIgNEg3TDUgNEg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY0aC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdmllLWZpbHRlciI+PHBhdGggZD0iTTE4IDRsMiAzaC0zbC0yLTNoLTJsMiAzaC0zbC0yLTNIOGwyIDNIN0w1IDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNGgtNHptLTYuNzUgMTEuMjVMMTAgMThsLTEuMjUtMi43NUw2IDE0bDIuNzUtMS4yNUwxMCAxMGwxLjI1IDIuNzVMMTQgMTRsLTIuNzUgMS4yNXptNS42OS0zLjMxTDE2IDE0bC0uOTQtMi4wNkwxMyAxMWwyLjA2LS45NEwxNiA4bC45NCAyLjA2TDE5IDExbC0yLjA2Ljk0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im11c2ljLW5vdGUiPjxwYXRoIGQ9Ik0xMiAzdjEwLjU1Yy0uNTktLjM0LTEuMjctLjU1LTItLjU1LTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNFY3aDRWM2gtNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXR1cmUiPjxwYXRoIGQ9Ik0xMyAxNi4xMmMzLjQ3LS40MSA2LjE3LTMuMzYgNi4xNy02Ljk1IDAtMy44Ny0zLjEzLTctNy03cy03IDMuMTMtNyA3YzAgMy40NyAyLjUyIDYuMzQgNS44MyA2Ljg5VjIwSDV2MmgxNHYtMmgtNnYtMy44OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXR1cmUtcGVvcGxlIj48cGF0aCBkPSJNMjIuMTcgOS4xN2MwLTMuODctMy4xMy03LTctN3MtNyAzLjEzLTcgN2MwIDMuNDcgMi41MiA2LjM0IDUuODMgNi44OVYyMEg2di0zaDF2LTRjMC0uNTUtLjQ1LTEtMS0xSDNjLS41NSAwLTEgLjQ1LTEgMXY0aDF2NWgxNnYtMmgtM3YtMy44OGMzLjQ3LS40MSA2LjE3LTMuMzYgNi4xNy02Ljk1ek00LjUgMTFjLjgzIDAgMS41LS42NyAxLjUtMS41UzUuMzMgOCA0LjUgOCAzIDguNjcgMyA5LjUgMy42NyAxMSA0LjUgMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmF2aWdhdGUtYmVmb3JlIj48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJuYXZpZ2F0ZS1uZXh0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFsZXR0ZSI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYSI+PHBhdGggZD0iTTIzIDE4VjZjMC0xLjEtLjktMi0yLTJIM2MtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnpNOC41IDEyLjVsMi41IDMuMDFMMTQuNSAxMWw0LjUgNkg1bDMuNS00LjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtZmlzaC1leWUiPjxwYXRoIGQ9Ik0xMiAyQzYuNDcgMiAyIDYuNDcgMiAxMnM0LjQ3IDEwIDEwIDEwIDEwLTQuNDcgMTAtMTBTMTcuNTMgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW5vcmFtYS1ob3Jpem9udGFsIj48cGF0aCBkPSJNMjAgNi41NHYxMC45MWMtMi42LS43Ny01LjI4LTEuMTYtOC0xLjE2LTIuNzIgMC01LjQuMzktOCAxLjE2VjYuNTRjMi42Ljc3IDUuMjggMS4xNiA4IDEuMTYgMi43Mi4wMSA1LjQtLjM4IDgtMS4xNk0yMS40MyA0Yy0uMSAwLS4yLjAyLS4zMS4wNkMxOC4xOCA1LjE2IDE1LjA5IDUuNyAxMiA1LjdjLTMuMDkgMC02LjE4LS41NS05LjEyLTEuNjQtLjExLS4wNC0uMjItLjA2LS4zMS0uMDYtLjM0IDAtLjU3LjIzLS41Ny42M3YxNC43NWMwIC4zOS4yMy42Mi41Ny42Mi4xIDAgLjItLjAyLjMxLS4wNiAyLjk0LTEuMSA2LjAzLTEuNjQgOS4xMi0xLjY0IDMuMDkgMCA2LjE4LjU1IDkuMTIgMS42NC4xMS4wNC4yMS4wNi4zMS4wNi4zMyAwIC41Ny0uMjMuNTctLjYzVjQuNjNjMC0uNC0uMjQtLjYzLS41Ny0uNjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGFub3JhbWEtdmVydGljYWwiPjxwYXRoIGQ9Ik0xOS45NCAyMS4xMmMtMS4xLTIuOTQtMS42NC02LjAzLTEuNjQtOS4xMiAwLTMuMDkuNTUtNi4xOCAxLjY0LTkuMTIuMDQtLjExLjA2LS4yMi4wNi0uMzEgMC0uMzQtLjIzLS41Ny0uNjMtLjU3SDQuNjNjLS40IDAtLjYzLjIzLS42My41NyAwIC4xLjAyLjIuMDYuMzFDNS4xNiA1LjgyIDUuNzEgOC45MSA1LjcxIDEyYzAgMy4wOS0uNTUgNi4xOC0xLjY0IDkuMTItLjA1LjExLS4wNy4yMi0uMDcuMzEgMCAuMzMuMjMuNTcuNjMuNTdoMTQuNzVjLjM5IDAgLjYzLS4yNC42My0uNTctLjAxLS4xLS4wMy0uMi0uMDctLjMxek02LjU0IDIwYy43Ny0yLjYgMS4xNi01LjI4IDEuMTYtOCAwLTIuNzItLjM5LTUuNC0xLjE2LThoMTAuOTFjLS43NyAyLjYtMS4xNiA1LjI4LTEuMTYgOCAwIDIuNzIuMzkgNS40IDEuMTYgOEg2LjU0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhbm9yYW1hLXdpZGUtYW5nbGUiPjxwYXRoIGQ9Ik0xMiA2YzIuNDUgMCA0LjcxLjIgNy4yOS42NC40NyAxLjc4LjcxIDMuNTguNzEgNS4zNiAwIDEuNzgtLjI0IDMuNTgtLjcxIDUuMzYtMi41OC40NC00Ljg0LjY0LTcuMjkuNjRzLTQuNzEtLjItNy4yOS0uNjRDNC4yNCAxNS41OCA0IDEzLjc4IDQgMTJjMC0xLjc4LjI0LTMuNTguNzEtNS4zNkM3LjI5IDYuMiA5LjU1IDYgMTIgNm0wLTJjLTIuNzMgMC01LjIyLjI0LTcuOTUuNzJsLS45My4xNi0uMjUuOUMyLjI5IDcuODUgMiA5LjkzIDIgMTJzLjI5IDQuMTUuODcgNi4yMmwuMjUuODkuOTMuMTZjMi43My40OSA1LjIyLjczIDcuOTUuNzNzNS4yMi0uMjQgNy45NS0uNzJsLjkzLS4xNi4yNS0uODljLjU4LTIuMDguODctNC4xNi44Ny02LjIzcy0uMjktNC4xNS0uODctNi4yMmwtLjI1LS44OS0uOTMtLjE2QzE3LjIyIDQuMjQgMTQuNzMgNCAxMiA0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvIj48cGF0aCBkPSJNMjEgMTlWNWMwLTEuMS0uOS0yLTItMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yek04LjUgMTMuNWwyLjUgMy4wMUwxNC41IDEybDQuNSA2SDVsMy41LTQuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1hbGJ1bSI+PHBhdGggZD0iTTE4IDJINmMtMS4xIDAtMiAuOS0yIDJ2MTZjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yek02IDRoNXY4bC0yLjUtMS41TDYgMTJWNHptMCAxNWwzLTMuODYgMi4xNCAyLjU4IDMtMy44NkwxOCAxOUg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWNhbWVyYSI+PGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMy4yIj48L2NpcmNsZT48cGF0aCBkPSJNOSAyTDcuMTcgNEg0Yy0xLjEgMC0yIC45LTIgMnYxMmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJoLTMuMTdMMTUgMkg5em0zIDE1Yy0yLjc2IDAtNS0yLjI0LTUtNXMyLjI0LTUgNS01IDUgMi4yNCA1IDUtMi4yNCA1LTUgNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaG90by1maWx0ZXIiPjxwYXRoIGQ9Ik0xOS4wMiAxMHY5SDVWNWg5VjNINS4wMmMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtOWgtMnpNMTcgMTBsLjk0LTIuMDZMMjAgN2wtMi4wNi0uOTRMMTcgNGwtLjk0IDIuMDZMMTQgN2wyLjA2Ljk0em0tMy43NS43NUwxMiA4bC0xLjI1IDIuNzVMOCAxMmwyLjc1IDEuMjVMMTIgMTZsMS4yNS0yLjc1TDE2IDEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLWxpYnJhcnkiPjxwYXRoIGQ9Ik0yMiAxNlY0YzAtMS4xLS45LTItMi0ySDhjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJ6bS0xMS00bDIuMDMgMi43MUwxNiAxMWw0IDVIOGwzLTR6TTIgNnYxNGMwIDEuMS45IDIgMiAyaDE0di0ySDRWNkgyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBob3RvLXNpemUtc2VsZWN0LWFjdHVhbCI+PHBhdGggZD0iTTIxIDNIM0MyIDMgMSA0IDEgNXYxNGMwIDEuMS45IDIgMiAyaDE4YzEgMCAyLTEgMi0yVjVjMC0xLTEtMi0yLTJ6TTUgMTdsMy41LTQuNSAyLjUgMy4wMUwxNC41IDExbDQuNSA2SDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tc2l6ZS1zZWxlY3QtbGFyZ2UiPjxwYXRoIGQ9Ik0yMSAxNWgydjJoLTJ2LTJ6bTAtNGgydjJoLTJ2LTJ6bTIgOGgtMnYyYzEgMCAyLTEgMi0yek0xMyAzaDJ2MmgtMlYzem04IDRoMnYyaC0yVjd6bTAtNHYyaDJjMC0xLTEtMi0yLTJ6TTEgN2gydjJIMVY3em0xNi00aDJ2MmgtMlYzem0wIDE2aDJ2MmgtMnYtMnpNMyAzQzIgMyAxIDQgMSA1aDJWM3ptNiAwaDJ2Mkg5VjN6TTUgM2gydjJINVYzem0tNCA4djhjMCAxLjEuOSAyIDIgMmgxMlYxMUgxem0yIDhsMi41LTMuMjEgMS43OSAyLjE1IDIuNS0zLjIyTDEzIDE5SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGhvdG8tc2l6ZS1zZWxlY3Qtc21hbGwiPjxwYXRoIGQ9Ik0yMyAxNWgtMnYyaDJ2LTJ6bTAtNGgtMnYyaDJ2LTJ6bTAgOGgtMnYyYzEgMCAyLTEgMi0yek0xNSAzaC0ydjJoMlYzem04IDRoLTJ2MmgyVjd6bS0yLTR2MmgyYzAtMS0xLTItMi0yek0zIDIxaDh2LTZIMXY0YzAgMS4xLjkgMiAyIDJ6TTMgN0gxdjJoMlY3em0xMiAxMmgtMnYyaDJ2LTJ6bTQtMTZoLTJ2MmgyVjN6bTAgMTZoLTJ2Mmgydi0yek0zIDNDMiAzIDEgNCAxIDVoMlYzem0wIDhIMXYyaDJ2LTJ6bTgtOEg5djJoMlYzek03IDNINXYyaDJWM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJwaWN0dXJlLWFzLXBkZiI+PHBhdGggZD0iTTIwIDJIOGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlY0YzAtMS4xLS45LTItMi0yem0tOC41IDcuNWMwIC44My0uNjcgMS41LTEuNSAxLjVIOXYySDcuNVY3SDEwYy44MyAwIDEuNS42NyAxLjUgMS41djF6bTUgMmMwIC44My0uNjcgMS41LTEuNSAxLjVoLTIuNVY3SDE1Yy44MyAwIDEuNS42NyAxLjUgMS41djN6bTQtM0gxOXYxaDEuNVYxMUgxOXYyaC0xLjVWN2gzdjEuNXpNOSA5LjVoMXYtMUg5djF6TTQgNkgydjE0YzAgMS4xLjkgMiAyIDJoMTR2LTJINFY2em0xMCA1LjVoMXYtM2gtMXYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvcnRyYWl0Ij48cGF0aCBkPSJNMTIgMTIuMjVjMS4yNCAwIDIuMjUtMS4wMSAyLjI1LTIuMjVTMTMuMjQgNy43NSAxMiA3Ljc1IDkuNzUgOC43NiA5Ljc1IDEwczEuMDEgMi4yNSAyLjI1IDIuMjV6bTQuNSA0YzAtMS41LTMtMi4yNS00LjUtMi4yNXMtNC41Ljc1LTQuNSAyLjI1VjE3aDl2LS43NXpNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY1aDE0djE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1yZWQtZXllIj48cGF0aCBkPSJNMTIgNC41QzcgNC41IDIuNzMgNy42MSAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjVzOS4yNy0zLjExIDExLTcuNWMtMS43My00LjM5LTYtNy41LTExLTcuNXpNMTIgMTdjLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNS0yLjI0IDUtNSA1em0wLThjLTEuNjYgMC0zIDEuMzQtMyAzczEuMzQgMyAzIDMgMy0xLjM0IDMtMy0xLjM0LTMtMy0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS05MC1kZWdyZWVzLWNjdyI+PHBhdGggZD0iTTcuMzQgNi40MUwuODYgMTIuOWw2LjQ5IDYuNDggNi40OS02LjQ4LTYuNS02LjQ5ek0zLjY5IDEyLjlsMy42Ni0zLjY2TDExIDEyLjlsLTMuNjYgMy42Ni0zLjY1LTMuNjZ6bTE1LjY3LTYuMjZDMTcuNjEgNC44OCAxNS4zIDQgMTMgNFYuNzZMOC43NiA1IDEzIDkuMjRWNmMxLjc5IDAgMy41OC42OCA0Ljk1IDIuMDUgMi43MyAyLjczIDIuNzMgNy4xNyAwIDkuOUMxNi41OCAxOS4zMiAxNC43OSAyMCAxMyAyMGMtLjk3IDAtMS45NC0uMjEtMi44NC0uNjFsLTEuNDkgMS40OUMxMC4wMiAyMS42MiAxMS41MSAyMiAxMyAyMmMyLjMgMCA0LjYxLS44OCA2LjM2LTIuNjQgMy41Mi0zLjUxIDMuNTItOS4yMSAwLTEyLjcyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdGF0ZS1sZWZ0Ij48cGF0aCBkPSJNNy4xMSA4LjUzTDUuNyA3LjExQzQuOCA4LjI3IDQuMjQgOS42MSA0LjA3IDExaDIuMDJjLjE0LS44Ny40OS0xLjcyIDEuMDItMi40N3pNNi4wOSAxM0g0LjA3Yy4xNyAxLjM5LjcyIDIuNzMgMS42MiAzLjg5bDEuNDEtMS40MmMtLjUyLS43NS0uODctMS41OS0xLjAxLTIuNDd6bTEuMDEgNS4zMmMxLjE2LjkgMi41MSAxLjQ0IDMuOSAxLjYxVjE3LjljLS44Ny0uMTUtMS43MS0uNDktMi40Ni0xLjAzTDcuMSAxOC4zMnpNMTMgNC4wN1YxTDguNDUgNS41NSAxMyAxMFY2LjA5YzIuODQuNDggNSAyLjk0IDUgNS45MXMtMi4xNiA1LjQzLTUgNS45MXYyLjAyYzMuOTUtLjQ5IDctMy44NSA3LTcuOTNzLTMuMDUtNy40NC03LTcuOTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm90YXRlLXJpZ2h0Ij48cGF0aCBkPSJNMTUuNTUgNS41NUwxMSAxdjMuMDdDNy4wNiA0LjU2IDQgNy45MiA0IDEyczMuMDUgNy40NCA3IDcuOTN2LTIuMDJjLTIuODQtLjQ4LTUtMi45NC01LTUuOTFzMi4xNi01LjQzIDUtNS45MVYxMGw0LjU1LTQuNDV6TTE5LjkzIDExYy0uMTctMS4zOS0uNzItMi43My0xLjYyLTMuODlsLTEuNDIgMS40MmMuNTQuNzUuODggMS42IDEuMDIgMi40N2gyLjAyek0xMyAxNy45djIuMDJjMS4zOS0uMTcgMi43NC0uNzEgMy45LTEuNjFsLTEuNDQtMS40NGMtLjc1LjU0LTEuNTkuODktMi40NiAxLjAzem0zLjg5LTIuNDJsMS40MiAxLjQxYy45LTEuMTYgMS40NS0yLjUgMS42Mi0zLjg5aC0yLjAyYy0uMTQuODctLjQ4IDEuNzItMS4wMiAyLjQ4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNsaWRlc2hvdyI+PHBhdGggZD0iTTEwIDh2OGw1LTQtNS00em05LTVINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0wIDE2SDVWNWgxNHYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdHJhaWdodGVuIj48cGF0aCBkPSJNMjEgNkgzYy0xLjEgMC0yIC45LTIgMnY4YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptMCAxMEgzVjhoMnY0aDJWOGgydjRoMlY4aDJ2NGgyVjhoMnY0aDJWOGgydjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3R5bGUiPjxwYXRoIGQ9Ik0yLjUzIDE5LjY1bDEuMzQuNTZ2LTkuMDNsLTIuNDMgNS44NmMtLjQxIDEuMDIuMDggMi4xOSAxLjA5IDIuNjF6bTE5LjUtMy43TDE3LjA3IDMuOThjLS4zMS0uNzUtMS4wNC0xLjIxLTEuODEtMS4yMy0uMjYgMC0uNTMuMDQtLjc5LjE1TDcuMSA1Ljk1Yy0uNzUuMzEtMS4yMSAxLjAzLTEuMjMgMS44LS4wMS4yNy4wNC41NC4xNS44bDQuOTYgMTEuOTdjLjMxLjc2IDEuMDUgMS4yMiAxLjgzIDEuMjMuMjYgMCAuNTItLjA1Ljc3LS4xNWw3LjM2LTMuMDVjMS4wMi0uNDIgMS41MS0xLjU5IDEuMDktMi42ek03Ljg4IDguNzVjLS41NSAwLTEtLjQ1LTEtMXMuNDUtMSAxLTEgMSAuNDUgMSAxLS40NSAxLTEgMXptLTIgMTFjMCAxLjEuOSAyIDIgMmgxLjQ1bC0zLjQ1LTguMzR2Ni4zNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2l0Y2gtY2FtZXJhIj48cGF0aCBkPSJNMjAgNGgtMy4xN0wxNSAySDlMNy4xNyA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTUgMTEuNVYxM0g5djIuNUw1LjUgMTIgOSA4LjVWMTFoNlY4LjVsMy41IDMuNS0zLjUgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3aXRjaC12aWRlbyI+PHBhdGggZD0iTTE4IDkuNVY2YzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoMTRjLjU1IDAgMS0uNDUgMS0xdi0zLjVsNCA0di0xM2wtNCA0em0tNSA2VjEzSDd2Mi41TDMuNSAxMiA3IDguNVYxMWg2VjguNWwzLjUgMy41LTMuNSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFnLWZhY2VzIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0zLjUtOWMuODMgMCAxLjUtLjY3IDEuNS0xLjVTMTYuMzMgOCAxNS41IDggMTQgOC42NyAxNCA5LjVzLjY3IDEuNSAxLjUgMS41em0tNyAwYy44MyAwIDEuNS0uNjcgMS41LTEuNVM5LjMzIDggOC41IDggNyA4LjY3IDcgOS41IDcuNjcgMTEgOC41IDExem0zLjUgNi41YzIuMzMgMCA0LjMxLTEuNDYgNS4xMS0zLjVINi44OWMuOCAyLjA0IDIuNzggMy41IDUuMTEgMy41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRleHR1cmUiPjxwYXRoIGQ9Ik0xOS41MSAzLjA4TDMuMDggMTkuNTFjLjA5LjM0LjI3LjY1LjUxLjkuMjUuMjQuNTYuNDIuOS41MUwyMC45MyA0LjQ5Yy0uMTktLjY5LS43My0xLjIzLTEuNDItMS40MXpNMTEuODggM0wzIDExLjg4djIuODNMMTQuNzEgM2gtMi44M3pNNSAzYy0xLjEgMC0yIC45LTIgMnYybDQtNEg1em0xNCAxOGMuNTUgMCAxLjA1LS4yMiAxLjQxLS41OS4zNy0uMzYuNTktLjg2LjU5LTEuNDF2LTJsLTQgNGgyem0tOS43MSAwaDIuODNMMjEgMTIuMTJWOS4yOUw5LjI5IDIxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVsYXBzZSI+PHBhdGggZD0iTTE2LjI0IDcuNzZDMTUuMDcgNi41OSAxMy41NCA2IDEyIDZ2NmwtNC4yNCA0LjI0YzIuMzQgMi4zNCA2LjE0IDIuMzQgOC40OSAwIDIuMzQtMi4zNCAyLjM0LTYuMTQtLjAxLTguNDh6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRpbWVyIj48cGF0aCBkPSJNMTUgMUg5djJoNlYxem0tNCAxM2gyVjhoLTJ2NnptOC4wMy02LjYxbDEuNDItMS40MmMtLjQzLS41MS0uOS0uOTktMS40MS0xLjQxbC0xLjQyIDEuNDJDMTYuMDcgNC43NCAxNC4xMiA0IDEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDkgOS00LjAzIDktOWMwLTIuMTItLjc0LTQuMDctMS45Ny01LjYxek0xMiAyMGMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItMTAiPjxwYXRoIGQ9Ik0wIDcuNzJWOS40bDMtMVYxOGgyVjZoLS4yNUwwIDcuNzJ6bTIzLjc4IDYuNjVjLS4xNC0uMjgtLjM1LS41My0uNjMtLjc0LS4yOC0uMjEtLjYxLS4zOS0xLjAxLS41M3MtLjg1LS4yNy0xLjM1LS4zOGMtLjM1LS4wNy0uNjQtLjE1LS44Ny0uMjMtLjIzLS4wOC0uNDEtLjE2LS41NS0uMjUtLjE0LS4wOS0uMjMtLjE5LS4yOC0uMy0uMDUtLjExLS4wOC0uMjQtLjA4LS4zOSAwLS4xNC4wMy0uMjguMDktLjQxLjA2LS4xMy4xNS0uMjUuMjctLjM0LjEyLS4xLjI3LS4xOC40NS0uMjRzLjQtLjA5LjY0LS4wOWMuMjUgMCAuNDcuMDQuNjYuMTEuMTkuMDcuMzUuMTcuNDguMjkuMTMuMTIuMjIuMjYuMjkuNDIuMDYuMTYuMS4zMi4xLjQ5aDEuOTVjMC0uMzktLjA4LS43NS0uMjQtMS4wOS0uMTYtLjM0LS4zOS0uNjMtLjY5LS44OC0uMy0uMjUtLjY2LS40NC0xLjA5LS41OUMyMS40OSA5LjA3IDIxIDkgMjAuNDYgOWMtLjUxIDAtLjk4LjA3LTEuMzkuMjEtLjQxLjE0LS43Ny4zMy0xLjA2LjU3LS4yOS4yNC0uNTEuNTItLjY3Ljg0LS4xNi4zMi0uMjMuNjUtLjIzIDEuMDFzLjA4LjY5LjIzLjk2Yy4xNS4yOC4zNi41Mi42NC43My4yNy4yMS42LjM4Ljk4LjUzLjM4LjE0LjgxLjI2IDEuMjcuMzYuMzkuMDguNzEuMTcuOTUuMjZzLjQzLjE5LjU3LjI5Yy4xMy4xLjIyLjIyLjI3LjM0LjA1LjEyLjA3LjI1LjA3LjM5IDAgLjMyLS4xMy41Ny0uNC43Ny0uMjcuMi0uNjYuMjktMS4xNy4yOS0uMjIgMC0uNDMtLjAyLS42NC0uMDgtLjIxLS4wNS0uNC0uMTMtLjU2LS4yNC0uMTctLjExLS4zLS4yNi0uNDEtLjQ0LS4xMS0uMTgtLjE3LS40MS0uMTgtLjY3aC0xLjg5YzAgLjM2LjA4LjcxLjI0IDEuMDUuMTYuMzQuMzkuNjUuNy45My4zMS4yNy42OS40OSAxLjE1LjY2LjQ2LjE3Ljk4LjI1IDEuNTguMjUuNTMgMCAxLjAxLS4wNiAxLjQ0LS4xOS40My0uMTMuOC0uMzEgMS4xMS0uNTQuMzEtLjIzLjU0LS41MS43MS0uODMuMTctLjMyLjI1LS42Ny4yNS0xLjA2LS4wMi0uNC0uMDktLjc0LS4yNC0xLjAyem0tOS45Ni03LjMyYy0uMzQtLjQtLjc1LS43LTEuMjMtLjg4LS40Ny0uMTgtMS4wMS0uMjctMS41OS0uMjctLjU4IDAtMS4xMS4wOS0xLjU5LjI3LS40OC4xOC0uODkuNDctMS4yMy44OC0uMzQuNDEtLjYuOTMtLjc5IDEuNTktLjE4LjY1LS4yOCAxLjQ1LS4yOCAyLjM5djEuOTJjMCAuOTQuMDkgMS43NC4yOCAyLjM5LjE5LjY2LjQ1IDEuMTkuOCAxLjYuMzQuNDEuNzUuNzEgMS4yMy44OS40OC4xOCAxLjAxLjI4IDEuNTkuMjguNTkgMCAxLjEyLS4wOSAxLjU5LS4yOC40OC0uMTguODgtLjQ4IDEuMjItLjg5LjM0LS40MS42LS45NC43OC0xLjYuMTgtLjY1LjI4LTEuNDUuMjgtMi4zOXYtMS45MmMwLS45NC0uMDktMS43NC0uMjgtMi4zOS0uMTgtLjY2LS40NC0xLjE5LS43OC0xLjU5em0tLjkyIDYuMTdjMCAuNi0uMDQgMS4xMS0uMTIgMS41My0uMDguNDItLjIuNzYtLjM2IDEuMDItLjE2LjI2LS4zNi40NS0uNTkuNTctLjIzLjEyLS41MS4xOC0uODIuMTgtLjMgMC0uNTgtLjA2LS44Mi0uMThzLS40NC0uMzEtLjYtLjU3Yy0uMTYtLjI2LS4yOS0uNi0uMzgtMS4wMi0uMDktLjQyLS4xMy0uOTMtLjEzLTEuNTN2LTIuNWMwLS42LjA0LTEuMTEuMTMtMS41Mi4wOS0uNDEuMjEtLjc0LjM4LTEgLjE2LS4yNS4zNi0uNDMuNi0uNTUuMjQtLjExLjUxLS4xNy44MS0uMTcuMzEgMCAuNTguMDYuODEuMTcuMjQuMTEuNDQuMjkuNi41NS4xNi4yNS4yOS41OC4zNy45OS4wOC40MS4xMy45Mi4xMyAxLjUydjIuNTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZXItMyI+PHBhdGggZD0iTTExLjYxIDEyLjk3Yy0uMTYtLjI0LS4zNi0uNDYtLjYyLS42NS0uMjUtLjE5LS41Ni0uMzUtLjkzLS40OC4zLS4xNC41Ny0uMy44LS41LjIzLS4yLjQyLS40MS41Ny0uNjQuMTUtLjIzLjI3LS40Ni4zNC0uNzEuMDgtLjI0LjExLS40OS4xMS0uNzMgMC0uNTUtLjA5LTEuMDQtLjI4LTEuNDYtLjE4LS40Mi0uNDQtLjc3LS43OC0xLjA2LS4zMy0uMjgtLjczLS41LTEuMi0uNjQtLjQ1LS4xMy0uOTctLjItMS41My0uMi0uNTUgMC0xLjA2LjA4LTEuNTIuMjQtLjQ3LjE3LS44Ny40LTEuMi42OS0uMzMuMjktLjYuNjMtLjc4IDEuMDMtLjIuMzktLjI5LjgzLS4yOSAxLjI5aDEuOThjMC0uMjYuMDUtLjQ5LjE0LS42OS4wOS0uMi4yMi0uMzguMzgtLjUyLjE3LS4xNC4zNi0uMjUuNTgtLjMzLjIyLS4wOC40Ni0uMTIuNzMtLjEyLjYxIDAgMS4wNi4xNiAxLjM2LjQ3LjMuMzEuNDQuNzUuNDQgMS4zMiAwIC4yNy0uMDQuNTItLjEyLjc0LS4wOC4yMi0uMjEuNDEtLjM4LjU3LS4xNy4xNi0uMzguMjgtLjYzLjM3LS4yNS4wOS0uNTUuMTMtLjg5LjEzSDYuNzJ2MS41N0g3LjljLjM0IDAgLjY0LjA0LjkxLjExLjI3LjA4LjUuMTkuNjkuMzUuMTkuMTYuMzQuMzYuNDQuNjEuMS4yNC4xNi41NC4xNi44NyAwIC42Mi0uMTggMS4wOS0uNTMgMS40Mi0uMzUuMzMtLjg0LjQ5LTEuNDUuNDktLjI5IDAtLjU2LS4wNC0uOC0uMTMtLjI0LS4wOC0uNDQtLjItLjYxLS4zNi0uMTctLjE2LS4zLS4zNC0uMzktLjU2LS4wOS0uMjItLjE0LS40Ni0uMTQtLjcySDQuMTljMCAuNTUuMTEgMS4wMy4zMiAxLjQ1LjIxLjQyLjUuNzcuODYgMS4wNXMuNzcuNDkgMS4yNC42My45Ni4yMSAxLjQ4LjIxYy41NyAwIDEuMDktLjA4IDEuNTgtLjIzLjQ5LS4xNS45MS0uMzggMS4yNi0uNjguMzYtLjMuNjQtLjY2Ljg0LTEuMS4yLS40My4zLS45My4zLTEuNDggMC0uMjktLjA0LS41OC0uMTEtLjg2LS4wOC0uMjUtLjE5LS41MS0uMzUtLjc2em05LjI2IDEuNGMtLjE0LS4yOC0uMzUtLjUzLS42My0uNzQtLjI4LS4yMS0uNjEtLjM5LTEuMDEtLjUzcy0uODUtLjI3LTEuMzUtLjM4Yy0uMzUtLjA3LS42NC0uMTUtLjg3LS4yMy0uMjMtLjA4LS40MS0uMTYtLjU1LS4yNS0uMTQtLjA5LS4yMy0uMTktLjI4LS4zLS4wNS0uMTEtLjA4LS4yNC0uMDgtLjM5cy4wMy0uMjguMDktLjQxYy4wNi0uMTMuMTUtLjI1LjI3LS4zNC4xMi0uMS4yNy0uMTguNDUtLjI0cy40LS4wOS42NC0uMDljLjI1IDAgLjQ3LjA0LjY2LjExLjE5LjA3LjM1LjE3LjQ4LjI5LjEzLjEyLjIyLjI2LjI5LjQyLjA2LjE2LjEuMzIuMS40OWgxLjk1YzAtLjM5LS4wOC0uNzUtLjI0LTEuMDktLjE2LS4zNC0uMzktLjYzLS42OS0uODgtLjMtLjI1LS42Ni0uNDQtMS4wOS0uNTktLjQzLS4xNS0uOTItLjIyLTEuNDYtLjIyLS41MSAwLS45OC4wNy0xLjM5LjIxLS40MS4xNC0uNzcuMzMtMS4wNi41Ny0uMjkuMjQtLjUxLjUyLS42Ny44NC0uMTYuMzItLjIzLjY1LS4yMyAxLjAxcy4wOC42OC4yMy45NmMuMTUuMjguMzcuNTIuNjQuNzMuMjcuMjEuNi4zOC45OC41My4zOC4xNC44MS4yNiAxLjI3LjM2LjM5LjA4LjcxLjE3Ljk1LjI2cy40My4xOS41Ny4yOWMuMTMuMS4yMi4yMi4yNy4zNC4wNS4xMi4wNy4yNS4wNy4zOSAwIC4zMi0uMTMuNTctLjQuNzctLjI3LjItLjY2LjI5LTEuMTcuMjktLjIyIDAtLjQzLS4wMi0uNjQtLjA4LS4yMS0uMDUtLjQtLjEzLS41Ni0uMjQtLjE3LS4xMS0uMy0uMjYtLjQxLS40NC0uMTEtLjE4LS4xNy0uNDEtLjE4LS42N2gtMS44OWMwIC4zNi4wOC43MS4yNCAxLjA1LjE2LjM0LjM5LjY1LjcuOTMuMzEuMjcuNjkuNDkgMS4xNS42Ni40Ni4xNy45OC4yNSAxLjU4LjI1LjUzIDAgMS4wMS0uMDYgMS40NC0uMTkuNDMtLjEzLjgtLjMxIDEuMTEtLjU0LjMxLS4yMy41NC0uNTEuNzEtLjgzLjE3LS4zMi4yNS0uNjcuMjUtMS4wNi0uMDItLjQtLjA5LS43NC0uMjQtMS4wMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aW1lci1vZmYiPjxwYXRoIGQ9Ik0xOS4wNCA0LjU1bC0xLjQyIDEuNDJDMTYuMDcgNC43NCAxNC4xMiA0IDEyIDRjLTEuODMgMC0zLjUzLjU1LTQuOTUgMS40OGwxLjQ2IDEuNDZDOS41MyA2LjM1IDEwLjczIDYgMTIgNmMzLjg3IDAgNyAzLjEzIDcgNyAwIDEuMjctLjM1IDIuNDctLjk0IDMuNDlsMS40NSAxLjQ1QzIwLjQ1IDE2LjUzIDIxIDE0LjgzIDIxIDEzYzAtMi4xMi0uNzQtNC4wNy0xLjk3LTUuNjFsMS40Mi0xLjQyLTEuNDEtMS40MnpNMTUgMUg5djJoNlYxem0tNCA4LjQ0bDIgMlY4aC0ydjEuNDR6TTMuMDIgNEwxLjc1IDUuMjcgNC41IDguMDNDMy41NSA5LjQ1IDMgMTEuMTYgMyAxM2MwIDQuOTcgNC4wMiA5IDkgOSAxLjg0IDAgMy41NS0uNTUgNC45OC0xLjVsMi41IDIuNSAxLjI3LTEuMjctNy43MS03LjcxTDMuMDIgNHpNMTIgMjBjLTMuODcgMC03LTMuMTMtNy03IDAtMS4yOC4zNS0yLjQ4Ljk1LTMuNTJsOS41NiA5LjU2Yy0xLjAzLjYxLTIuMjMuOTYtMy41MS45NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b25hbGl0eSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0xIDE3LjkzYy0zLjk0LS40OS03LTMuODUtNy03LjkzczMuMDUtNy40NCA3LTcuOTN2MTUuODZ6bTItMTUuODZjMS4wMy4xMyAyIC40NSAyLjg3LjkzSDEzdi0uOTN6TTEzIDdoNS4yNGMuMjUuMzEuNDguNjUuNjggMUgxM1Y3em0wIDNoNi43NGMuMDguMzMuMTUuNjYuMTkgMUgxM3YtMXptMCA5LjkzVjE5aDIuODdjLS44Ny40OC0xLjg0LjgtMi44Ny45M3pNMTguMjQgMTdIMTN2LTFoNS45MmMtLjIuMzUtLjQzLjY5LS42OCAxem0xLjUtM0gxM3YtMWg2LjkzYy0uMDQuMzQtLjExLjY3LS4xOSAxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyYW5zZm9ybSI+PHBhdGggZD0iTTIyIDE4di0ySDhWNGgyTDcgMSA0IDRoMnYySDJ2Mmg0djhjMCAxLjEuOSAyIDIgMmg4djJoLTJsMyAzIDMtM2gtMnYtMmg0ek0xMCA4aDZ2NmgyVjhjMC0xLjEtLjktMi0yLTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0dW5lIj48cGF0aCBkPSJNMyAxN3YyaDZ2LTJIM3pNMyA1djJoMTBWNUgzem0xMCAxNnYtMmg4di0yaC04di0yaC0ydjZoMnpNNyA5djJIM3YyaDR2MmgyVjlIN3ptMTQgNHYtMkgxMXYyaDEwem0tNi00aDJWN2g0VjVoLTRWM2gtMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY29tZnkiPjxwYXRoIGQ9Ik0zIDloNFY1SDN2NHptMCA1aDR2LTRIM3Y0em01IDBoNHYtNEg4djR6bTUgMGg0di00aC00djR6TTggOWg0VjVIOHY0em01LTR2NGg0VjVoLTR6bTUgOWg0di00aC00djR6TTMgMTloNHYtNEgzdjR6bTUgMGg0di00SDh2NHptNSAwaDR2LTRoLTR2NHptNSAwaDR2LTRoLTR2NHptMC0xNHY0aDRWNWgtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNvbXBhY3QiPjxwYXRoIGQ9Ik0zIDE5aDZ2LTdIM3Y3em03IDBoMTJ2LTdIMTB2N3pNMyA1djZoMTlWNUgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZ25ldHRlIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS05IDE1Yy00LjQyIDAtOC0yLjY5LTgtNnMzLjU4LTYgOC02IDggMi42OSA4IDYtMy41OCA2LTggNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1hdXRvIj48cGF0aCBkPSJNNi44NSAxMi42NWgyLjNMOCA5bC0xLjE1IDMuNjV6TTIyIDdsLTEuMiA2LjI5TDE5LjMgN2gtMS42bC0xLjQ5IDYuMjlMMTUgN2gtLjc2QzEyLjc3IDUuMTcgMTAuNTMgNCA4IDRjLTQuNDIgMC04IDMuNTgtOCA4czMuNTggOCA4IDhjMy4xMyAwIDUuODQtMS44MSA3LjE1LTQuNDNsLjEuNDNIMTdsMS41LTYuMUwyMCAxNmgxLjc1bDIuMDUtOUgyMnptLTExLjcgOWwtLjctMkg2LjRsLS43IDJIMy44TDcgN2gybDMuMiA5aC0xLjl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItY2xvdWR5Ij48cGF0aCBkPSJNMTkuMzYgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NC00Ljk2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndiLWluY2FuZGVzY2VudCI+PHBhdGggZD0iTTMuNTUgMTguNTRsMS40MSAxLjQxIDEuNzktMS44LTEuNDEtMS40MS0xLjc5IDEuOHpNMTEgMjIuNDVoMlYxOS41aC0ydjIuOTV6TTQgMTAuNUgxdjJoM3YtMnptMTEtNC4xOVYxLjVIOXY0LjgxQzcuMjEgNy4zNSA2IDkuMjggNiAxMS41YzAgMy4zMSAyLjY5IDYgNiA2czYtMi42OSA2LTZjMC0yLjIyLTEuMjEtNC4xNS0zLTUuMTl6bTUgNC4xOXYyaDN2LTJoLTN6bS0yLjc2IDcuNjZsMS43OSAxLjggMS40MS0xLjQxLTEuOC0xLjc5LTEuNCAxLjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0id2ItaXJpZGVzY2VudCI+PHBhdGggZD0iTTUgMTQuNWgxNHYtNkg1djZ6TTExIC41NVYzLjVoMlYuNTVoLTJ6bTguMDQgMi41bC0xLjc5IDEuNzkgMS40MSAxLjQxIDEuOC0xLjc5LTEuNDItMS40MXpNMTMgMjIuNDVWMTkuNWgtMnYyLjk1aDJ6bTcuNDUtMy45MWwtMS44LTEuNzktMS40MSAxLjQxIDEuNzkgMS44IDEuNDItMS40MnpNMy41NSA0LjQ2bDEuNzkgMS43OSAxLjQxLTEuNDEtMS43OS0xLjc5LTEuNDEgMS40MXptMS40MSAxNS40OWwxLjc5LTEuOC0xLjQxLTEuNDEtMS43OSAxLjc5IDEuNDEgMS40MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3Yi1zdW5ueSI+PHBhdGggZD0iTTYuNzYgNC44NGwtMS44LTEuNzktMS40MSAxLjQxIDEuNzkgMS43OSAxLjQyLTEuNDF6TTQgMTAuNUgxdjJoM3YtMnptOS05Ljk1aC0yVjMuNWgyVi41NXptNy40NSAzLjkxbC0xLjQxLTEuNDEtMS43OSAxLjc5IDEuNDEgMS40MSAxLjc5LTEuNzl6bS0zLjIxIDEzLjdsMS43OSAxLjggMS40MS0xLjQxLTEuOC0xLjc5LTEuNCAxLjR6TTIwIDEwLjV2Mmgzdi0yaC0zem0tOC01Yy0zLjMxIDAtNiAyLjY5LTYgNnMyLjY5IDYgNiA2IDYtMi42OSA2LTYtMi42OS02LTYtNnptLTEgMTYuOTVoMlYxOS41aC0ydjIuOTV6bS03LjQ1LTMuOTFsMS40MSAxLjQxIDEuNzktMS44LTEuNDEtMS40MS0xLjc5IDEuOHoiPjwvcGF0aD48L2c+CjwvZGVmcz48L3N2Zz4KPC9pcm9uLWljb25zZXQtc3ZnPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChwYmUuY29udGVudCk7dmFyIGRiZT1RYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9Imljb25zIiBzaXplPSIyNCI+Cjxzdmc+PGRlZnM+CjxnIGlkPSIzZC1yb3RhdGlvbiI+PHBhdGggZD0iTTcuNTIgMjEuNDhDNC4yNSAxOS45NCAxLjkxIDE2Ljc2IDEuNTUgMTNILjA1Qy41NiAxOS4xNiA1LjcxIDI0IDEyIDI0bC42Ni0uMDMtMy44MS0zLjgxLTEuMzMgMS4zMnptLjg5LTYuNTJjLS4xOSAwLS4zNy0uMDMtLjUyLS4wOC0uMTYtLjA2LS4yOS0uMTMtLjQtLjI0LS4xMS0uMS0uMi0uMjItLjI2LS4zNy0uMDYtLjE0LS4wOS0uMy0uMDktLjQ3aC0xLjNjMCAuMzYuMDcuNjguMjEuOTUuMTQuMjcuMzMuNS41Ni42OS4yNC4xOC41MS4zMi44Mi40MS4zLjEuNjIuMTUuOTYuMTUuMzcgMCAuNzItLjA1IDEuMDMtLjE1LjMyLS4xLjYtLjI1LjgzLS40NHMuNDItLjQzLjU1LS43MmMuMTMtLjI5LjItLjYxLjItLjk3IDAtLjE5LS4wMi0uMzgtLjA3LS41Ni0uMDUtLjE4LS4xMi0uMzUtLjIzLS41MS0uMS0uMTYtLjI0LS4zLS40LS40My0uMTctLjEzLS4zNy0uMjMtLjYxLS4zMS4yLS4wOS4zNy0uMi41Mi0uMzMuMTUtLjEzLjI3LS4yNy4zNy0uNDIuMS0uMTUuMTctLjMuMjItLjQ2LjA1LS4xNi4wNy0uMzIuMDctLjQ4IDAtLjM2LS4wNi0uNjgtLjE4LS45Ni0uMTItLjI4LS4yOS0uNTEtLjUxLS42OS0uMi0uMTktLjQ3LS4zMy0uNzctLjQzQzkuMSA4LjA1IDguNzYgOCA4LjM5IDhjLS4zNiAwLS42OS4wNS0xIC4xNi0uMy4xMS0uNTcuMjYtLjc5LjQ1LS4yMS4xOS0uMzguNDEtLjUxLjY3LS4xMi4yNi0uMTguNTQtLjE4Ljg1aDEuM2MwLS4xNy4wMy0uMzIuMDktLjQ1cy4xNC0uMjUuMjUtLjM0Yy4xMS0uMDkuMjMtLjE3LjM4LS4yMi4xNS0uMDUuMy0uMDguNDgtLjA4LjQgMCAuNy4xLjg5LjMxLjE5LjIuMjkuNDkuMjkuODYgMCAuMTgtLjAzLjM0LS4wOC40OS0uMDUuMTUtLjE0LjI3LS4yNS4zNy0uMTEuMS0uMjUuMTgtLjQxLjI0LS4xNi4wNi0uMzYuMDktLjU4LjA5SDcuNXYxLjAzaC43N2MuMjIgMCAuNDIuMDIuNi4wN3MuMzMuMTMuNDUuMjNjLjEyLjExLjIyLjI0LjI5LjQuMDcuMTYuMS4zNS4xLjU3IDAgLjQxLS4xMi43Mi0uMzUuOTMtLjIzLjIzLS41NS4zMy0uOTUuMzN6bTguNTUtNS45MmMtLjMyLS4zMy0uNy0uNTktMS4xNC0uNzctLjQzLS4xOC0uOTItLjI3LTEuNDYtLjI3SDEydjhoMi4zYy41NSAwIDEuMDYtLjA5IDEuNTEtLjI3LjQ1LS4xOC44NC0uNDMgMS4xNi0uNzYuMzItLjMzLjU3LS43My43NC0xLjE5LjE3LS40Ny4yNi0uOTkuMjYtMS41N3YtLjRjMC0uNTgtLjA5LTEuMS0uMjYtMS41Ny0uMTgtLjQ3LS40My0uODctLjc1LTEuMnptLS4zOSAzLjE2YzAgLjQyLS4wNS43OS0uMTQgMS4xMy0uMS4zMy0uMjQuNjItLjQzLjg1LS4xOS4yMy0uNDMuNDEtLjcxLjUzLS4yOS4xMi0uNjIuMTgtLjk5LjE4aC0uOTFWOS4xMmguOTdjLjcyIDAgMS4yNy4yMyAxLjY0LjY5LjM4LjQ2LjU3IDEuMTIuNTcgMS45OXYuNHpNMTIgMGwtLjY2LjAzIDMuODEgMy44MSAxLjMzLTEuMzNjMy4yNyAxLjU1IDUuNjEgNC43MiA1Ljk2IDguNDhoMS41QzIzLjQ0IDQuODQgMTguMjkgMCAxMiAweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY2Vzc2liaWxpdHkiPjxwYXRoIGQ9Ik0xMiAyYzEuMSAwIDIgLjkgMiAycy0uOSAyLTIgMi0yLS45LTItMiAuOS0yIDItMnptOSA3aC02djEzaC0ydi02aC0ydjZIOVY5SDNWN2gxOHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY2Vzc2libGUiPjxjaXJjbGUgY3g9IjEyIiBjeT0iNCIgcj0iMiI+PC9jaXJjbGU+PHBhdGggZD0iTTE5IDEzdi0yYy0xLjU0LjAyLTMuMDktLjc1LTQuMDctMS44M2wtMS4yOS0xLjQzYy0uMTctLjE5LS4zOC0uMzQtLjYxLS40NS0uMDEgMC0uMDEtLjAxLS4wMi0uMDFIMTNjLS4zNS0uMi0uNzUtLjMtMS4xOS0uMjZDMTAuNzYgNy4xMSAxMCA4LjA0IDEwIDkuMDlWMTVjMCAxLjEuOSAyIDIgMmg1djVoMnYtNS41YzAtMS4xLS45LTItMi0yaC0zdi0zLjQ1YzEuMjkgMS4wNyAzLjI1IDEuOTQgNSAxLjk1em0tNi4xNyA1Yy0uNDEgMS4xNi0xLjUyIDItMi44MyAyLTEuNjYgMC0zLTEuMzQtMy0zIDAtMS4zMS44NC0yLjQxIDItMi44M1YxMi4xYy0yLjI4LjQ2LTQgMi40OC00IDQuOSAwIDIuNzYgMi4yNCA1IDUgNSAyLjQyIDAgNC40NC0xLjcyIDQuOS00aC0yLjA3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtYmFsYW5jZSI+PHBhdGggZD0iTTQgMTB2N2gzdi03SDR6bTYgMHY3aDN2LTdoLTN6TTIgMjJoMTl2LTNIMnYzem0xNC0xMnY3aDN2LTdoLTN6bS00LjUtOUwyIDZ2MmgxOVY2bC05LjUtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhY2NvdW50LWJhbGFuY2Utd2FsbGV0Ij48cGF0aCBkPSJNMjEgMTh2MWMwIDEuMS0uOSAyLTIgMkg1Yy0xLjExIDAtMi0uOS0yLTJWNWMwLTEuMS44OS0yIDItMmgxNGMxLjEgMCAyIC45IDIgMnYxaC05Yy0xLjExIDAtMiAuOS0yIDJ2OGMwIDEuMS44OSAyIDIgMmg5em0tOS0yaDEwVjhIMTJ2OHptNC0yLjVjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtYm94Ij48cGF0aCBkPSJNMyA1djE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJINWMtMS4xMSAwLTIgLjktMiAyem0xMiA0YzAgMS42Ni0xLjM0IDMtMyAzcy0zLTEuMzQtMy0zIDEuMzQtMyAzLTMgMyAxLjM0IDMgM3ptLTkgOGMwLTIgNC0zLjEgNi0zLjFzNiAxLjEgNiAzLjF2MUg2di0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFjY291bnQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAzYzEuNjYgMCAzIDEuMzQgMyAzcy0xLjM0IDMtMyAzLTMtMS4zNC0zLTMgMS4zNC0zIDMtM3ptMCAxNC4yYy0yLjUgMC00LjcxLTEuMjgtNi0zLjIyLjAzLTEuOTkgNC0zLjA4IDYtMy4wOCAxLjk5IDAgNS45NyAxLjA5IDYgMy4wOC0xLjI5IDEuOTQtMy41IDMuMjItNiAzLjIyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZCI+PHBhdGggZD0iTTE5IDEzaC02djZoLTJ2LTZINXYtMmg2VjVoMnY2aDZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtYWxlcnQiPjxwYXRoIGQ9Ik0xMC4wMSAyMS4wMWMwIDEuMS44OSAxLjk5IDEuOTkgMS45OXMxLjk5LS44OSAxLjk5LTEuOTloLTMuOTh6bTguODctNC4xOVYxMWMwLTMuMjUtMi4yNS01Ljk3LTUuMjktNi42OXYtLjcyQzEzLjU5IDIuNzEgMTIuODggMiAxMiAycy0xLjU5LjcxLTEuNTkgMS41OXYuNzJDNy4zNyA1LjAzIDUuMTIgNy43NSA1LjEyIDExdjUuODJMMyAxOC45NFYyMGgxOHYtMS4wNmwtMi4xMi0yLjEyek0xNiAxMy4wMWgtM3YzaC0ydi0zSDhWMTFoM1Y4aDJ2M2gzdjIuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS0yIDEwaC00djRoLTJ2LTRIN3YtMmg0VjdoMnY0aDR2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhZGQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNSAxMWgtNHY0aC0ydi00SDd2LTJoNFY3aDJ2NGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWRkLWNpcmNsZS1vdXRsaW5lIj48cGF0aCBkPSJNMTMgN2gtMnY0SDd2Mmg0djRoMnYtNGg0di0yaC00Vjd6bS0xLTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFkZC1zaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNMTEgOWgyVjZoM1Y0aC0zVjFoLTJ2M0g4djJoM3Yzem0tNCA5Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yem0xMCAwYy0xLjEgMC0xLjk5LjktMS45OSAycy44OSAyIDEuOTkgMiAyLS45IDItMi0uOS0yLTItMnptLTkuODMtMy4yNWwuMDMtLjEyLjktMS42M2g3LjQ1Yy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjg2LTcuMDFMMTkuNDIgNGgtLjAxbC0xLjEgMi0yLjc2IDVIOC41M2wtLjEzLS4yN0w2LjE2IDZsLS45NS0yLS45NC0ySDF2MmgybDMuNiA3LjU5LTEuMzUgMi40NWMtLjE2LjI4LS4yNS42MS0uMjUuOTYgMCAxLjEuOSAyIDIgMmgxMnYtMkg3LjQyYy0uMTMgMC0uMjUtLjExLS4yNS0uMjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0iPjxwYXRoIGQ9Ik0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0xMi41IDhIMTF2Nmw0Ljc1IDIuODUuNzUtMS4yMy00LTIuMzdWOHpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYWxhcm0tYWRkIj48cGF0aCBkPSJNNy44OCAzLjM5TDYuNiAxLjg2IDIgNS43MWwxLjI5IDEuNTMgNC41OS0zLjg1ek0yMiA1LjcybC00LjYtMy44Ni0xLjI5IDEuNTMgNC42IDMuODZMMjIgNS43MnpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6bTEtMTFoLTJ2M0g4djJoM3YzaDJ2LTNoM3YtMmgtM1Y5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLW9mZiI+PHBhdGggZD0iTTEyIDZjMy44NyAwIDcgMy4xMyA3IDcgMCAuODQtLjE2IDEuNjUtLjQzIDIuNGwxLjUyIDEuNTJjLjU4LTEuMTkuOTEtMi41MS45MS0zLjkyIDAtNC45Ny00LjAzLTktOS05LTEuNDEgMC0yLjczLjMzLTMuOTIuOTFMOS42IDYuNDNDMTAuMzUgNi4xNiAxMS4xNiA2IDEyIDZ6bTEwLS4yOGwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTIuOTIgMi4yOUwxLjY1IDMuNTcgMi45OCA0LjlsLTEuMTEuOTMgMS40MiAxLjQyIDEuMTEtLjk0LjguOEMzLjgzIDguNjkgMyAxMC43NSAzIDEzYzAgNC45NyA0LjAyIDkgOSA5IDIuMjUgMCA0LjMxLS44MyA1Ljg5LTIuMmwyLjIgMi4yIDEuMjctMS4yN0wzLjg5IDMuMjdsLS45Ny0uOTh6bTEzLjU1IDE2LjFDMTUuMjYgMTkuMzkgMTMuNyAyMCAxMiAyMGMtMy44NyAwLTctMy4xMy03LTcgMC0xLjcuNjEtMy4yNiAxLjYxLTQuNDdsOS44NiA5Ljg2ek04LjAyIDMuMjhMNi42IDEuODZsLS44Ni43MSAxLjQyIDEuNDIuODYtLjcxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsYXJtLW9uIj48cGF0aCBkPSJNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIgNGMtNC45NyAwLTkgNC4wMy05IDlzNC4wMiA5IDkgOWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptMCAxNmMtMy44NyAwLTctMy4xMy03LTdzMy4xMy03IDctNyA3IDMuMTMgNyA3LTMuMTMgNy03IDd6bS0xLjQ2LTUuNDdMOC40MSAxMi40bC0xLjA2IDEuMDYgMy4xOCAzLjE4IDYtNi0xLjA2LTEuMDYtNC45MyA0Ljk1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFsbC1vdXQiPjxwYXRoIGQ9Ik0xNi4yMSA0LjE2bDQgNHYtNHptNCAxMmwtNCA0aDR6bS0xMiA0bC00LTR2NHptLTQtMTJsNC00aC00em0xMi45NS0uOTVjLTIuNzMtMi43My03LjE3LTIuNzMtOS45IDBzLTIuNzMgNy4xNyAwIDkuOSA3LjE3IDIuNzMgOS45IDAgMi43My03LjE2IDAtOS45em0tMS4xIDguOGMtMi4xMyAyLjEzLTUuNTcgMi4xMy03LjcgMHMtMi4xMy01LjU3IDAtNy43IDUuNTctMi4xMyA3LjcgMCAyLjEzIDUuNTcgMCA3Ljd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYW5kcm9pZCI+PHBhdGggZD0iTTYgMThjMCAuNTUuNDUgMSAxIDFoMXYzLjVjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41VjE5aDJ2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNVYxOWgxYy41NSAwIDEtLjQ1IDEtMVY4SDZ2MTB6TTMuNSA4QzIuNjcgOCAyIDguNjcgMiA5LjV2N2MwIC44My42NyAxLjUgMS41IDEuNVM1IDE3LjMzIDUgMTYuNXYtN0M1IDguNjcgNC4zMyA4IDMuNSA4em0xNyAwYy0uODMgMC0xLjUuNjctMS41IDEuNXY3YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNS0uNjcgMS41LTEuNXYtN2MwLS44My0uNjctMS41LTEuNS0xLjV6bS00Ljk3LTUuODRsMS4zLTEuM2MuMi0uMi4yLS41MSAwLS43MS0uMi0uMi0uNTEtLjItLjcxIDBsLTEuNDggMS40OEMxMy44NSAxLjIzIDEyLjk1IDEgMTIgMWMtLjk2IDAtMS44Ni4yMy0yLjY2LjYzTDcuODUuMTVjLS4yLS4yLS41MS0uMi0uNzEgMC0uMi4yLS4yLjUxIDAgLjcxbDEuMzEgMS4zMUM2Ljk3IDMuMjYgNiA1LjAxIDYgN2gxMmMwLTEuOTktLjk3LTMuNzUtMi40Ny00Ljg0ek0xMCA1SDlWNGgxdjF6bTUgMGgtMVY0aDF2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhbm5vdW5jZW1lbnQiPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAyMmw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTcgOWgtMlY1aDJ2NnptMCA0aC0ydi0yaDJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcHBzIj48cGF0aCBkPSJNNCA4aDRWNEg0djR6bTYgMTJoNHYtNGgtNHY0em0tNiAwaDR2LTRINHY0em0wLTZoNHYtNEg0djR6bTYgMGg0di00aC00djR6bTYtMTB2NGg0VjRoLTR6bS02IDRoNFY0aC00djR6bTYgNmg0di00aC00djR6bTAgNmg0di00aC00djR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXJjaGl2ZSI+PHBhdGggZD0iTTIwLjU0IDUuMjNsLTEuMzktMS42OEMxOC44OCAzLjIxIDE4LjQ3IDMgMTggM0g2Yy0uNDcgMC0uODguMjEtMS4xNi41NUwzLjQ2IDUuMjNDMy4xNyA1LjU3IDMgNi4wMiAzIDYuNVYxOWMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjYuNWMwLS40OC0uMTctLjkzLS40Ni0xLjI3ek0xMiAxNy41TDYuNSAxMkgxMHYtMmg0djJoMy41TDEyIDE3LjV6TTUuMTIgNWwuODEtMWgxMmwuOTQgMUg1LjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWJhY2siPjxwYXRoIGQ9Ik0yMCAxMUg3LjgzbDUuNTktNS41OUwxMiA0bC04IDggOCA4IDEuNDEtMS40MUw3LjgzIDEzSDIwdi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRvd253YXJkIj48cGF0aCBkPSJNMjAgMTJsLTEuNDEtMS40MUwxMyAxNi4xN1Y0aC0ydjEyLjE3bC01LjU4LTUuNTlMNCAxMmw4IDggOC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWRyb3AtZG93biI+PHBhdGggZD0iTTcgMTBsNSA1IDUtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLWRvd24tY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxMmwtNC00aDhsLTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhcnJvdy1kcm9wLXVwIj48cGF0aCBkPSJNNyAxNGw1LTUgNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LWZvcndhcmQiPjxwYXRoIGQ9Ik0xMiA0bC0xLjQxIDEuNDFMMTYuMTcgMTFINHYyaDEyLjE3bC01LjU4IDUuNTlMMTIgMjBsOC04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFycm93LXVwd2FyZCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3BlY3QtcmF0aW8iPjxwYXRoIGQ9Ik0xOSAxMmgtMnYzaC0zdjJoNXYtNXpNNyA5aDNWN0g1djVoMlY5em0xNC02SDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzZXNzbWVudCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMiAxNEg3di0yaDd2MnptMy00SDd2LTJoMTB2MnptMC00SDdWN2gxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtaW5kIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTAgNGMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgMy0zLTEuMzQtMy0zIDEuMzQtMyAzLTN6bTYgMTJINnYtMS40YzAtMiA0LTMuMSA2LTMuMXM2IDEuMSA2IDMuMVYxOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJhc3NpZ25tZW50LWxhdGUiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS02IDE1aC0ydi0yaDJ2MnptMC00aC0yVjhoMnY2em0tMS05Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXNzaWdubWVudC1yZXR1cm4iPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptNCAxMmgtNHYzbC01LTUgNS01djNoNHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtcmV0dXJuZWQiPjxwYXRoIGQ9Ik0xOSAzaC00LjE4QzE0LjQgMS44NCAxMy4zIDEgMTIgMWMtMS4zIDAtMi40Ljg0LTIuODIgMkg1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDBjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXptMCAxNWwtNS01aDNWOWg0djRoM2wtNSA1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImFzc2lnbm1lbnQtdHVybmVkLWluIj48cGF0aCBkPSJNMTkgM2gtNC4xOEMxNC40IDEuODQgMTMuMyAxIDEyIDFjLTEuMyAwLTIuNC44NC0yLjgyIDJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tNyAwYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bS0yIDE0bC00LTQgMS40MS0xLjQxTDEwIDE0LjE3bDYuNTktNi41OUwxOCA5bC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXR0YWNobWVudCI+PHBhdGggZD0iTTIgMTIuNUMyIDkuNDYgNC40NiA3IDcuNSA3SDE4YzIuMjEgMCA0IDEuNzkgNCA0cy0xLjc5IDQtNCA0SDkuNUM4LjEyIDE1IDcgMTMuODggNyAxMi41UzguMTIgMTAgOS41IDEwSDE3djJIOS40MWMtLjU1IDAtLjU1IDEgMCAxSDE4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMkg3LjVDNS41NyA5IDQgMTAuNTcgNCAxMi41UzUuNTcgMTYgNy41IDE2SDE3djJINy41QzQuNDYgMTggMiAxNS41NCAyIDEyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYXV0b3JlbmV3Ij48cGF0aCBkPSJNMTIgNnYzbDQtNC00LTR2M2MtNC40MiAwLTggMy41OC04IDggMCAxLjU3LjQ2IDMuMDMgMS4yNCA0LjI2TDYuNyAxNC44Yy0uNDUtLjgzLS43LTEuNzktLjctMi44IDAtMy4zMSAyLjY5LTYgNi02em02Ljc2IDEuNzRMMTcuMyA5LjJjLjQ0Ljg0LjcgMS43OS43IDIuOCAwIDMuMzEtMi42OSA2LTYgNnYtM2wtNCA0IDQgNHYtM2M0LjQyIDAgOC0zLjU4IDgtOCAwLTEuNTctLjQ2LTMuMDMtMS4yNC00LjI2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJhY2tzcGFjZSI+PHBhdGggZD0iTTIyIDNIN2MtLjY5IDAtMS4yMy4zNS0xLjU5Ljg4TDAgMTJsNS40MSA4LjExYy4zNi41My45Ljg5IDEuNTkuODloMTVjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptLTMgMTIuNTlMMTcuNTkgMTcgMTQgMTMuNDEgMTAuNDEgMTcgOSAxNS41OSAxMi41OSAxMiA5IDguNDEgMTAuNDEgNyAxNCAxMC41OSAxNy41OSA3IDE5IDguNDEgMTUuNDEgMTIgMTkgMTUuNTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iYmFja3VwIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xNCAxM3Y0aC00di00SDdsNS01IDUgNWgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJibG9jayI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTQgMTJjMC00LjQyIDMuNTgtOCA4LTggMS44NSAwIDMuNTUuNjMgNC45IDEuNjlMNS42OSAxNi45QzQuNjMgMTUuNTUgNCAxMy44NSA0IDEyem04IDhjLTEuODUgMC0zLjU1LS42My00LjktMS42OUwxOC4zMSA3LjFDMTkuMzcgOC40NSAyMCAxMC4xNSAyMCAxMmMwIDQuNDItMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJib29rIj48cGF0aCBkPSJNMTggMkg2Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTYgNGg1djhsLTIuNS0xLjVMNiAxMlY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJvb2ttYXJrIj48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJvb2ttYXJrLWJvcmRlciI+PHBhdGggZD0iTTE3IDNIN2MtMS4xIDAtMS45OS45LTEuOTkgMkw1IDIxbDctMyA3IDNWNWMwLTEuMS0uOS0yLTItMnptMCAxNWwtNS0yLjE4TDcgMThWNWgxMHYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJidWctcmVwb3J0Ij48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImJ1aWxkIj48cGF0aCBkPSJNMjIuNyAxOWwtOS4xLTkuMWMuOS0yLjMuNC01LTEuNS02LjktMi0yLTUtMi40LTcuNC0xLjNMOSA2IDYgOSAxLjYgNC43Qy40IDcuMS45IDEwLjEgMi45IDEyLjFjMS45IDEuOSA0LjYgMi40IDYuOSAxLjVsOS4xIDkuMWMuNC40IDEgLjQgMS40IDBsMi4zLTIuM2MuNS0uNC41LTEuMS4xLTEuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYWNoZWQiPjxwYXRoIGQ9Ik0xOSA4bC00IDRoM2MwIDMuMzEtMi42OSA2LTYgNi0xLjAxIDAtMS45Ny0uMjUtMi44LS43bC0xLjQ2IDEuNDZDOC45NyAxOS41NCAxMC40MyAyMCAxMiAyMGM0LjQyIDAgOC0zLjU4IDgtOGgzbC00LTR6TTYgMTJjMC0zLjMxIDIuNjktNiA2LTYgMS4wMSAwIDEuOTcuMjUgMi44LjdsMS40Ni0xLjQ2QzE1LjAzIDQuNDYgMTMuNTcgNCAxMiA0Yy00LjQyIDAtOCAzLjU4LTggOEgxbDQgNCA0LTRINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYW1lcmEtZW5oYW5jZSI+PHBhdGggZD0iTTkgM0w3LjE3IDVINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yaC0zLjE3TDE1IDNIOXptMyAxNWMtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6bTAtMWwxLjI1LTIuNzVMMTYgMTNsLTIuNzUtMS4yNUwxMiA5bC0xLjI1IDIuNzVMOCAxM2wyLjc1IDEuMjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FuY2VsIj48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2FyZC1naWZ0Y2FyZCI+PHBhdGggZD0iTTIwIDZoLTIuMThjLjExLS4zMS4xOC0uNjUuMTgtMSAwLTEuNjYtMS4zNC0zLTMtMy0xLjA1IDAtMS45Ni41NC0yLjUgMS4zNWwtLjUuNjctLjUtLjY4QzEwLjk2IDIuNTQgMTAuMDUgMiA5IDIgNy4zNCAyIDYgMy4zNCA2IDVjMCAuMzUuMDcuNjkuMTggMUg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS01LTJjLjU1IDAgMSAuNDUgMSAxcy0uNDUgMS0xIDEtMS0uNDUtMS0xIC40NS0xIDEtMXpNOSA0Yy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGg1LjA4TDcgMTAuODMgOC42MiAxMiAxMSA4Ljc2bDEtMS4zNiAxIDEuMzZMMTUuMzggMTIgMTcgMTAuODMgMTQuOTIgOEgyMHY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNhcmQtbWVtYmVyc2hpcCI+PHBhdGggZD0iTTIwIDJINGMtMS4xMSAwLTIgLjg5LTIgMnYxMWMwIDEuMTEuODkgMiAyIDJoNHY1bDQtMiA0IDJ2LTVoNGMxLjExIDAgMi0uODkgMi0yVjRjMC0xLjExLS44OS0yLTItMnptMCAxM0g0di0yaDE2djJ6bTAtNUg0VjRoMTZ2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjYXJkLXRyYXZlbCI+PHBhdGggZD0iTTIwIDZoLTNWNGMwLTEuMTEtLjg5LTItMi0ySDljLTEuMTEgMC0yIC44OS0yIDJ2Mkg0Yy0xLjExIDAtMiAuODktMiAydjExYzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjhjMC0xLjExLS44OS0yLTItMnpNOSA0aDZ2Mkg5VjR6bTExIDE1SDR2LTJoMTZ2MnptMC01SDRWOGgzdjJoMlY4aDZ2MmgyVjhoM3Y2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoYW5nZS1oaXN0b3J5Ij48cGF0aCBkPSJNMTIgNy43N0wxOC4zOSAxOEg1LjYxTDEyIDcuNzdNMTIgNEwyIDIwaDIwTDEyIDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2siPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGVjay1ib3giPjxwYXRoIGQ9Ik0xOSAzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uOSAyLTJWNWMwLTEuMS0uODktMi0yLTJ6bS05IDE0bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hlY2stYm94LW91dGxpbmUtYmxhbmsiPjxwYXRoIGQ9Ik0xOSA1djE0SDVWNWgxNG0wLTJINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNoZWNrLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bS0yIDE1bC01LTUgMS40MS0xLjQxTDEwIDE0LjE3bDcuNTktNy41OUwxOSA4bC05IDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1sZWZ0Ij48cGF0aCBkPSJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjaGV2cm9uLXJpZ2h0Ij48cGF0aCBkPSJNMTAgNkw4LjU5IDcuNDEgMTMuMTcgMTJsLTQuNTggNC41OUwxMCAxOGw2LTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hyb21lLXJlYWRlci1tb2RlIj48cGF0aCBkPSJNMTMgMTJoN3YxLjVoLTd6bTAtMi41aDdWMTFoLTd6bTAgNWg3VjE2aC03ek0yMSA0SDNjLTEuMSAwLTIgLjktMiAydjEzYzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCAxNWgtOVY2aDl2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xhc3MiPjxwYXRoIGQ9Ik0xOCAySDZjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnpNNiA0aDV2OGwtMi41LTEuNUw2IDEyVjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xlYXIiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvc2UiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptNC41IDE0SDhjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTNsLjE0LjAxQzguNTggOC4yOCAxMC4xMyA3IDEyIDdjMi4yMSAwIDQgMS43OSA0IDRoLjVjMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjVTMTcuODggMTYgMTYuNSAxNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1kb25lIj48cGF0aCBkPSJNMTkuMzUgMTAuMDRDMTguNjcgNi41OSAxNS42NCA0IDEyIDQgOS4xMSA0IDYuNiA1LjY0IDUuMzUgOC4wNCAyLjM0IDguMzYgMCAxMC45MSAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDEzYzIuNzYgMCA1LTIuMjQgNS01IDAtMi42NC0yLjA1LTQuNzgtNC42NS00Ljk2ek0xMCAxN2wtMy41LTMuNSAxLjQxLTEuNDFMMTAgMTQuMTcgMTUuMTggOWwxLjQxIDEuNDFMMTAgMTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtZG93bmxvYWQiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE3IDEzbC01IDUtNS01aDNWOWg0djRoM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC1vZmYiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNGMtMS40OCAwLTIuODUuNDMtNC4wMSAxLjE3bDEuNDYgMS40NkMxMC4yMSA2LjIzIDExLjA4IDYgMTIgNmMzLjA0IDAgNS41IDIuNDYgNS41IDUuNXYuNUgxOWMxLjY2IDAgMyAxLjM0IDMgMyAwIDEuMTMtLjY0IDIuMTEtMS41NiAyLjYybDEuNDUgMS40NUMyMy4xNiAxOC4xNiAyNCAxNi42OCAyNCAxNWMwLTIuNjQtMi4wNS00Ljc4LTQuNjUtNC45NnpNMyA1LjI3bDIuNzUgMi43NEMyLjU2IDguMTUgMCAxMC43NyAwIDE0YzAgMy4zMSAyLjY5IDYgNiA2aDExLjczbDIgMkwyMSAyMC43MyA0LjI3IDQgMyA1LjI3ek03LjczIDEwbDggOEg2Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00aDEuNzN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2xvdWQtcXVldWUiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE5IDE4SDZjLTIuMjEgMC00LTEuNzktNC00czEuNzktNCA0LTRoLjcxQzcuMzcgNy42OSA5LjQ4IDYgMTIgNmMzLjA0IDAgNS41IDIuNDYgNS41IDUuNXYuNUgxOWMxLjY2IDAgMyAxLjM0IDMgM3MtMS4zNCAzLTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjbG91ZC11cGxvYWQiPjxwYXRoIGQ9Ik0xOS4zNSAxMC4wNEMxOC42NyA2LjU5IDE1LjY0IDQgMTIgNCA5LjExIDQgNi42IDUuNjQgNS4zNSA4LjA0IDIuMzQgOC4zNiAwIDEwLjkxIDAgMTRjMCAzLjMxIDIuNjkgNiA2IDZoMTNjMi43NiAwIDUtMi4yNCA1LTUgMC0yLjY0LTIuMDUtNC43OC00LjY1LTQuOTZ6TTE0IDEzdjRoLTR2LTRIN2w1LTUgNSA1aC0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvZGUiPjxwYXRoIGQ9Ik05LjQgMTYuNkw0LjggMTJsNC42LTQuNkw4IDZsLTYgNiA2IDYgMS40LTEuNHptNS4yIDBsNC42LTQuNi00LjYtNC42TDE2IDZsNiA2LTYgNi0xLjQtMS40eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvbXBhcmUtYXJyb3dzIj48cGF0aCBkPSJNOS4wMSAxNEgydjJoNy4wMXYzTDEzIDE1bC0zLjk5LTR2M3ptNS45OC0xdi0zSDIyVjhoLTcuMDFWNUwxMSA5bDMuOTkgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250ZW50LWNvcHkiPjxwYXRoIGQ9Ik0xNiAxSDRjLTEuMSAwLTIgLjktMiAydjE0aDJWM2gxMlYxem0zIDRIOGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMWMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE2SDhWN2gxMXYxNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250ZW50LWN1dCI+PHBhdGggZD0iTTkuNjQgNy42NGMuMjMtLjUuMzYtMS4wNS4zNi0xLjY0IDAtMi4yMS0xLjc5LTQtNC00UzIgMy43OSAyIDZzMS43OSA0IDQgNGMuNTkgMCAxLjE0LS4xMyAxLjY0LS4zNkwxMCAxMmwtMi4zNiAyLjM2QzcuMTQgMTQuMTMgNi41OSAxNCA2IDE0Yy0yLjIxIDAtNCAxLjc5LTQgNHMxLjc5IDQgNCA0IDQtMS43OSA0LTRjMC0uNTktLjEzLTEuMTQtLjM2LTEuNjRMMTIgMTRsNyA3aDN2LTFMOS42NCA3LjY0ek02IDhjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTAgMTJjLTEuMSAwLTItLjg5LTItMnMuOS0yIDItMiAyIC44OSAyIDItLjkgMi0yIDJ6bTYtNy41Yy0uMjggMC0uNS0uMjItLjUtLjVzLjIyLS41LjUtLjUuNS4yMi41LjUtLjIyLjUtLjUuNXpNMTkgM2wtNiA2IDIgMiA3LTdWM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJjb250ZW50LXBhc3RlIj48cGF0aCBkPSJNMTkgMmgtNC4xOEMxNC40Ljg0IDEzLjMgMCAxMiAwYy0xLjMgMC0yLjQuODQtMi44MiAySDVjLTEuMSAwLTIgLjktMiAydjE2YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTcgMGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem03IDE4SDVWNGgydjNoMTBWNGgydjE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImNvcHlyaWdodCI+PHBhdGggZD0iTTEwLjA4IDEwLjg2Yy4wNS0uMzMuMTYtLjYyLjMtLjg3cy4zNC0uNDYuNTktLjYyYy4yNC0uMTUuNTQtLjIyLjkxLS4yMy4yMy4wMS40NC4wNS42My4xMy4yLjA5LjM4LjIxLjUyLjM2cy4yNS4zMy4zNC41My4xMy40Mi4xNC42NGgxLjc5Yy0uMDItLjQ3LS4xMS0uOS0uMjgtMS4yOXMtLjQtLjczLS43LTEuMDEtLjY2LS41LTEuMDgtLjY2LS44OC0uMjMtMS4zOS0uMjNjLS42NSAwLTEuMjIuMTEtMS43LjM0cy0uODguNTMtMS4yLjkyLS41Ni44NC0uNzEgMS4zNlM4IDExLjI5IDggMTEuODd2LjI3YzAgLjU4LjA4IDEuMTIuMjMgMS42NHMuMzkuOTcuNzEgMS4zNS43Mi42OSAxLjIuOTEgMS4wNS4zNCAxLjcuMzRjLjQ3IDAgLjkxLS4wOCAxLjMyLS4yM3MuNzctLjM2IDEuMDgtLjYzLjU2LS41OC43NC0uOTQuMjktLjc0LjMtMS4xNWgtMS43OWMtLjAxLjIxLS4wNi40LS4xNS41OHMtLjIxLjMzLS4zNi40Ni0uMzIuMjMtLjUyLjNjLS4xOS4wNy0uMzkuMDktLjYuMS0uMzYtLjAxLS42Ni0uMDgtLjg5LS4yMy0uMjUtLjE2LS40NS0uMzctLjU5LS42MnMtLjI1LS41NS0uMy0uODgtLjA4LS42Ny0uMDgtMXYtLjI3YzAtLjM1LjAzLS42OC4wOC0xLjAxek0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJjcmVhdGUiPjxwYXRoIGQ9Ik0zIDE3LjI1VjIxaDMuNzVMMTcuODEgOS45NGwtMy43NS0zLjc1TDMgMTcuMjV6TTIwLjcxIDcuMDRjLjM5LS4zOS4zOS0xLjAyIDAtMS40MWwtMi4zNC0yLjM0Yy0uMzktLjM5LTEuMDItLjM5LTEuNDEgMGwtMS44MyAxLjgzIDMuNzUgMy43NSAxLjgzLTEuODN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlYXRlLW5ldy1mb2xkZXIiPjxwYXRoIGQ9Ik0yMCA2aC04bC0yLTJINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMThjMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tMSA4aC0zdjNoLTJ2LTNoLTN2LTJoM1Y5aDJ2M2gzdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY3JlZGl0LWNhcmQiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZjMC0xLjExLS44OS0yLTItMnptMCAxNEg0di02aDE2djZ6bTAtMTBINFY2aDE2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGFzaGJvYXJkIj48cGF0aCBkPSJNMyAxM2g4VjNIM3YxMHptMCA4aDh2LTZIM3Y2em0xMCAwaDhWMTFoLTh2MTB6bTAtMTh2Nmg4VjNoLTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZGF0ZS1yYW5nZSI+PHBhdGggZD0iTTkgMTFIN3YyaDJ2LTJ6bTQgMGgtMnYyaDJ2LTJ6bTQgMGgtMnYyaDJ2LTJ6bTItN2gtMVYyaC0ydjJIOFYySDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDIwYzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY5aDE0djExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRlbGV0ZSI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnpNMTkgNGgtMy41bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUtZm9yZXZlciI+PHBhdGggZD0iTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnptMi40Ni03LjEybDEuNDEtMS40MUwxMiAxMi41OWwyLjEyLTIuMTIgMS40MSAxLjQxTDEzLjQxIDE0bDIuMTIgMi4xMi0xLjQxIDEuNDFMMTIgMTUuNDFsLTIuMTIgMi4xMi0xLjQxLTEuNDFMMTAuNTkgMTRsLTIuMTMtMi4xMnpNMTUuNSA0bC0xLTFoLTVsLTEgMUg1djJoMTRWNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZWxldGUtc3dlZXAiPjxwYXRoIGQ9Ik0xNSAxNmg0djJoLTR6bTAtOGg3djJoLTd6bTAgNGg2djJoLTZ6TTMgMThjMCAxLjEuOSAyIDIgMmg2YzEuMSAwIDItLjkgMi0yVjhIM3YxMHpNMTQgNWgtM2wtMS0xSDZMNSA1SDJ2MmgxMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkZXNjcmlwdGlvbiI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNkg4di0yaDh2MnptMC00SDh2LTJoOHYyem0tMy01VjMuNUwxOC41IDlIMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG5zIj48cGF0aCBkPSJNMjAgMTNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xdi02YzAtLjU1LS40NS0xLTEtMXpNNyAxOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6TTIwIDNINGMtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTZjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xek03IDljLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbmUiPjxwYXRoIGQ9Ik05IDE2LjJMNC44IDEybC0xLjQgMS40TDkgMTkgMjEgN2wtMS40LTEuNEw5IDE2LjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZG9uZS1hbGwiPjxwYXRoIGQ9Ik0xOCA3bC0xLjQxLTEuNDEtNi4zNCA2LjM0IDEuNDEgMS40MUwxOCA3em00LjI0LTEuNDFMMTEuNjYgMTYuMTcgNy40OCAxMmwtMS40MSAxLjQxTDExLjY2IDE5bDEyLTEyLTEuNDItMS40MXpNLjQxIDEzLjQxTDYgMTlsMS40MS0xLjQxTDEuODMgMTIgLjQxIDEzLjQxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImRvbnV0LWxhcmdlIj48cGF0aCBkPSJNMTEgNS4wOFYyYy01IC41LTkgNC44MS05IDEwczQgOS41IDkgMTB2LTMuMDhjLTMtLjQ4LTYtMy40LTYtNi45MnMzLTYuNDQgNi02Ljkyek0xOC45NyAxMUgyMmMtLjQ3LTUtNC04LjUzLTktOXYzLjA4QzE2IDUuNTEgMTguNTQgOCAxOC45NyAxMXpNMTMgMTguOTJWMjJjNS0uNDcgOC41My00IDktOWgtMy4wM2MtLjQzIDMtMi45NyA1LjQ5LTUuOTcgNS45MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJkb251dC1zbWFsbCI+PHBhdGggZD0iTTExIDkuMTZWMmMtNSAuNS05IDQuNzktOSAxMHM0IDkuNSA5IDEwdi03LjE2Yy0xLS40MS0yLTEuNTItMi0yLjg0czEtMi40MyAyLTIuODR6TTE0Ljg2IDExSDIyYy0uNDgtNC43NS00LTguNTMtOS05djcuMTZjMSAuMyAxLjUyLjk4IDEuODYgMS44NHpNMTMgMTQuODRWMjJjNS0uNDcgOC41Mi00LjI1IDktOWgtNy4xNGMtLjM0Ljg2LS44NiAxLjU0LTEuODYgMS44NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJkcmFmdHMiPjxwYXRoIGQ9Ik0yMS45OSA4YzAtLjcyLS4zNy0xLjM1LS45NC0xLjdMMTIgMSAyLjk1IDYuM0MyLjM4IDYuNjUgMiA3LjI4IDIgOHYxMGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0ybC0uMDEtMTB6TTEyIDEzTDMuNzQgNy44NCAxMiAzbDguMjYgNC44NEwxMiAxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJlamVjdCI+PHBhdGggZD0iTTUgMTdoMTR2Mkg1em03LTEyTDUuMzMgMTVoMTMuMzR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXJyb3IiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0xIDE1aC0ydi0yaDJ2MnptMC00aC0yVjdoMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImVycm9yLW91dGxpbmUiPjxwYXRoIGQ9Ik0xMSAxNWgydjJoLTJ6bTAtOGgydjZoLTJ6bS45OS01QzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyek0xMiAyMGMtNC40MiAwLTgtMy41OC04LThzMy41OC04IDgtOCA4IDMuNTggOCA4LTMuNTggOC04IDh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXVyby1zeW1ib2wiPjxwYXRoIGQ9Ik0xNSAxOC41Yy0yLjUxIDAtNC42OC0xLjQyLTUuNzYtMy41SDE1di0ySDguNThjLS4wNS0uMzMtLjA4LS42Ni0uMDgtMXMuMDMtLjY3LjA4LTFIMTVWOUg5LjI0QzEwLjMyIDYuOTIgMTIuNSA1LjUgMTUgNS41YzEuNjEgMCAzLjA5LjU5IDQuMjMgMS41N0wyMSA1LjNDMTkuNDEgMy44NyAxNy4zIDMgMTUgM2MtMy45MiAwLTcuMjQgMi41MS04LjQ4IDZIM3YyaDMuMDZjLS4wNC4zMy0uMDYuNjYtLjA2IDEgMCAuMzQuMDIuNjcuMDYgMUgzdjJoMy41MmMxLjI0IDMuNDkgNC41NiA2IDguNDggNiAyLjMxIDAgNC40MS0uODcgNi0yLjNsLTEuNzgtMS43N2MtMS4xMy45OC0yLjYgMS41Ny00LjIyIDEuNTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZXZlbnQiPjxwYXRoIGQ9Ik0xNyAxMmgtNXY1aDV2LTV6TTE2IDF2Mkg4VjFINnYySDVjLTEuMTEgMC0xLjk5LjktMS45OSAyTDMgMTljMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMmgtMVYxaC0yem0zIDE4SDVWOGgxNHYxMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJldmVudC1zZWF0Ij48cGF0aCBkPSJNNCAxOHYzaDN2LTNoMTB2M2gzdi02SDR6bTE1LThoM3YzaC0zek0yIDEwaDN2M0gyem0xNSAzSDdWNWMwLTEuMS45LTIgMi0yaDZjMS4xIDAgMiAuOSAyIDJ2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJleGl0LXRvLWFwcCI+PHBhdGggZD0iTTEwLjA5IDE1LjU5TDExLjUgMTdsNS01LTUtNS0xLjQxIDEuNDFMMTIuNjcgMTFIM3YyaDkuNjdsLTIuNTggMi41OXpNMTkgM0g1Yy0xLjExIDAtMiAuOS0yIDJ2NGgyVjVoMTR2MTRINXYtNEgzdjRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJleHBhbmQtbGVzcyI+PHBhdGggZD0iTTEyIDhsLTYgNiAxLjQxIDEuNDFMMTIgMTAuODNsNC41OSA0LjU4TDE4IDE0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cGFuZC1tb3JlIj48cGF0aCBkPSJNMTYuNTkgOC41OUwxMiAxMy4xNyA3LjQxIDguNTkgNiAxMGw2IDYgNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4cGxvcmUiPjxwYXRoIGQ9Ik0xMiAxMC45Yy0uNjEgMC0xLjEuNDktMS4xIDEuMXMuNDkgMS4xIDEuMSAxLjFjLjYxIDAgMS4xLS40OSAxLjEtMS4xcy0uNDktMS4xLTEuMS0xLjF6TTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTIuMTkgMTIuMTlMNiAxOGwzLjgxLTguMTlMMTggNmwtMy44MSA4LjE5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImV4dGVuc2lvbiI+PHBhdGggZD0iTTIwLjUgMTFIMTlWN2MwLTEuMS0uOS0yLTItMmgtNFYzLjVDMTMgMi4xMiAxMS44OCAxIDEwLjUgMVM4IDIuMTIgOCAzLjVWNUg0Yy0xLjEgMC0xLjk5LjktMS45OSAydjMuOEgzLjVjMS40OSAwIDIuNyAxLjIxIDIuNyAyLjdzLTEuMjEgMi43LTIuNyAyLjdIMlYyMGMwIDEuMS45IDIgMiAyaDMuOHYtMS41YzAtMS40OSAxLjIxLTIuNyAyLjctMi43IDEuNDkgMCAyLjcgMS4yMSAyLjcgMi43VjIySDE3YzEuMSAwIDItLjkgMi0ydi00aDEuNWMxLjM4IDAgMi41LTEuMTIgMi41LTIuNVMyMS44OCAxMSAyMC41IDExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZhY2UiPjxwYXRoIGQ9Ik05IDExLjc1Yy0uNjkgMC0xLjI1LjU2LTEuMjUgMS4yNXMuNTYgMS4yNSAxLjI1IDEuMjUgMS4yNS0uNTYgMS4yNS0xLjI1LS41Ni0xLjI1LTEuMjUtMS4yNXptNiAwYy0uNjkgMC0xLjI1LjU2LTEuMjUgMS4yNXMuNTYgMS4yNSAxLjI1IDEuMjUgMS4yNS0uNTYgMS4yNS0xLjI1LS41Ni0xLjI1LTEuMjUtMS4yNXpNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMCAxOGMtNC40MSAwLTgtMy41OS04LTggMC0uMjkuMDItLjU4LjA1LS44NiAyLjM2LTEuMDUgNC4yMy0yLjk4IDUuMjEtNS4zN0MxMS4wNyA4LjMzIDE0LjA1IDEwIDE3LjQyIDEwYy43OCAwIDEuNTMtLjA5IDIuMjUtLjI2LjIxLjcxLjMzIDEuNDcuMzMgMi4yNiAwIDQuNDEtMy41OSA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJmYXZvcml0ZSI+PHBhdGggZD0iTTEyIDIxLjM1bC0xLjQ1LTEuMzJDNS40IDE1LjM2IDIgMTIuMjggMiA4LjUgMiA1LjQyIDQuNDIgMyA3LjUgM2MxLjc0IDAgMy40MS44MSA0LjUgMi4wOUMxMy4wOSAzLjgxIDE0Ljc2IDMgMTYuNSAzIDE5LjU4IDMgMjIgNS40MiAyMiA4LjVjMCAzLjc4LTMuNCA2Ljg2LTguNTUgMTEuNTRMMTIgMjEuMzV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmF2b3JpdGUtYm9yZGVyIj48cGF0aCBkPSJNMTYuNSAzYy0xLjc0IDAtMy40MS44MS00LjUgMi4wOUMxMC45MSAzLjgxIDkuMjQgMyA3LjUgMyA0LjQyIDMgMiA1LjQyIDIgOC41YzAgMy43OCAzLjQgNi44NiA4LjU1IDExLjU0TDEyIDIxLjM1bDEuNDUtMS4zMkMxOC42IDE1LjM2IDIyIDEyLjI4IDIyIDguNSAyMiA1LjQyIDE5LjU4IDMgMTYuNSAzem0tNC40IDE1LjU1bC0uMS4xLS4xLS4xQzcuMTQgMTQuMjQgNCAxMS4zOSA0IDguNSA0IDYuNSA1LjUgNSA3LjUgNWMxLjU0IDAgMy4wNC45OSAzLjU3IDIuMzZoMS44N0MxMy40NiA1Ljk5IDE0Ljk2IDUgMTYuNSA1YzIgMCAzLjUgMS41IDMuNSAzLjUgMCAyLjg5LTMuMTQgNS43NC03LjkgMTAuMDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmVlZGJhY2siPjxwYXRoIGQ9Ik0yMCAySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAyMmw0LTRoMTRjMS4xIDAgMi0uOSAyLTJWNGMwLTEuMS0uOS0yLTItMnptLTcgMTJoLTJ2LTJoMnYyem0wLTRoLTJWNmgydjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmlsZS1kb3dubG9hZCI+PHBhdGggZD0iTTE5IDloLTRWM0g5djZINWw3IDcgNy03ek01IDE4djJoMTR2LTJINXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmaWxlLXVwbG9hZCI+PHBhdGggZD0iTTkgMTZoNnYtNmg0bC03LTctNyA3aDR6bS00IDJoMTR2Mkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpbHRlci1saXN0Ij48cGF0aCBkPSJNMTAgMThoNHYtMmgtNHYyek0zIDZ2MmgxOFY2SDN6bTMgN2gxMnYtMkg2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmluZC1pbi1wYWdlIj48cGF0aCBkPSJNMjAgMTkuNTlWOGwtNi02SDZjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNCAyMGMwIDEuMS44OSAyIDEuOTkgMkgxOGMuNDUgMCAuODUtLjE1IDEuMTktLjRsLTQuNDMtNC40M2MtLjguNTItMS43NC44My0yLjc2LjgzLTIuNzYgMC01LTIuMjQtNS01czIuMjQtNSA1LTUgNSAyLjI0IDUgNWMwIDEuMDItLjMxIDEuOTYtLjgzIDIuNzVMMjAgMTkuNTl6TTkgMTNjMCAxLjY2IDEuMzQgMyAzIDNzMy0xLjM0IDMtMy0xLjM0LTMtMy0zLTMgMS4zNC0zIDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmluZC1yZXBsYWNlIj48cGF0aCBkPSJNMTEgNmMxLjM4IDAgMi42My41NiAzLjU0IDEuNDZMMTIgMTBoNlY0bC0yLjA1IDIuMDVDMTQuNjggNC43OCAxMi45MyA0IDExIDRjLTMuNTMgMC02LjQzIDIuNjEtNi45MiA2SDYuMWMuNDYtMi4yOCAyLjQ4LTQgNC45LTR6bTUuNjQgOS4xNGMuNjYtLjkgMS4xMi0xLjk3IDEuMjgtMy4xNEgxNS45Yy0uNDYgMi4yOC0yLjQ4IDQtNC45IDQtMS4zOCAwLTIuNjMtLjU2LTMuNTQtMS40NkwxMCAxMkg0djZsMi4wNS0yLjA1QzcuMzIgMTcuMjIgOS4wNyAxOCAxMSAxOGMxLjU1IDAgMi45OC0uNTEgNC4xNC0xLjM2TDIwIDIxLjQ5IDIxLjQ5IDIwbC00Ljg1LTQuODZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmluZ2VycHJpbnQiPjxwYXRoIGQ9Ik0xNy44MSA0LjQ3Yy0uMDggMC0uMTYtLjAyLS4yMy0uMDZDMTUuNjYgMy40MiAxNCAzIDEyLjAxIDNjLTEuOTggMC0zLjg2LjQ3LTUuNTcgMS40MS0uMjQuMTMtLjU0LjA0LS42OC0uMi0uMTMtLjI0LS4wNC0uNTUuMi0uNjhDNy44MiAyLjUyIDkuODYgMiAxMi4wMSAyYzIuMTMgMCAzLjk5LjQ3IDYuMDMgMS41Mi4yNS4xMy4zNC40My4yMS42Ny0uMDkuMTgtLjI2LjI4LS40NC4yOHpNMy41IDkuNzJjLS4xIDAtLjItLjAzLS4yOS0uMDktLjIzLS4xNi0uMjgtLjQ3LS4xMi0uNy45OS0xLjQgMi4yNS0yLjUgMy43NS0zLjI3QzkuOTggNC4wNCAxNCA0LjAzIDE3LjE1IDUuNjVjMS41Ljc3IDIuNzYgMS44NiAzLjc1IDMuMjUuMTYuMjIuMTEuNTQtLjEyLjctLjIzLjE2LS41NC4xMS0uNy0uMTItLjktMS4yNi0yLjA0LTIuMjUtMy4zOS0yLjk0LTIuODctMS40Ny02LjU0LTEuNDctOS40LjAxLTEuMzYuNy0yLjUgMS43LTMuNCAyLjk2LS4wOC4xNC0uMjMuMjEtLjM5LjIxem02LjI1IDEyLjA3Yy0uMTMgMC0uMjYtLjA1LS4zNS0uMTUtLjg3LS44Ny0xLjM0LTEuNDMtMi4wMS0yLjY0LS42OS0xLjIzLTEuMDUtMi43My0xLjA1LTQuMzQgMC0yLjk3IDIuNTQtNS4zOSA1LjY2LTUuMzlzNS42NiAyLjQyIDUuNjYgNS4zOWMwIC4yOC0uMjIuNS0uNS41cy0uNS0uMjItLjUtLjVjMC0yLjQyLTIuMDktNC4zOS00LjY2LTQuMzktMi41NyAwLTQuNjYgMS45Ny00LjY2IDQuMzkgMCAxLjQ0LjMyIDIuNzcuOTMgMy44NS42NCAxLjE1IDEuMDggMS42NCAxLjg1IDIuNDIuMTkuMi4xOS41MSAwIC43MS0uMTEuMS0uMjQuMTUtLjM3LjE1em03LjE3LTEuODVjLTEuMTkgMC0yLjI0LS4zLTMuMS0uODktMS40OS0xLjAxLTIuMzgtMi42NS0yLjM4LTQuMzkgMC0uMjguMjItLjUuNS0uNXMuNS4yMi41LjVjMCAxLjQxLjcyIDIuNzQgMS45NCAzLjU2LjcxLjQ4IDEuNTQuNzEgMi41NC43MS4yNCAwIC42NC0uMDMgMS4wNC0uMS4yNy0uMDUuNTMuMTMuNTguNDEuMDUuMjctLjEzLjUzLS40MS41OC0uNTcuMTEtMS4wNy4xMi0xLjIxLjEyek0xNC45MSAyMmMtLjA0IDAtLjA5LS4wMS0uMTMtLjAyLTEuNTktLjQ0LTIuNjMtMS4wMy0zLjcyLTIuMS0xLjQtMS4zOS0yLjE3LTMuMjQtMi4xNy01LjIyIDAtMS42MiAxLjM4LTIuOTQgMy4wOC0yLjk0IDEuNyAwIDMuMDggMS4zMiAzLjA4IDIuOTQgMCAxLjA3LjkzIDEuOTQgMi4wOCAxLjk0czIuMDgtLjg3IDIuMDgtMS45NGMwLTMuNzctMy4yNS02LjgzLTcuMjUtNi44My0yLjg0IDAtNS40NCAxLjU4LTYuNjEgNC4wMy0uMzkuODEtLjU5IDEuNzYtLjU5IDIuOCAwIC43OC4wNyAyLjAxLjY3IDMuNjEuMS4yNi0uMDMuNTUtLjI5LjY0LS4yNi4xLS41NS0uMDQtLjY0LS4yOS0uNDktMS4zMS0uNzMtMi42MS0uNzMtMy45NiAwLTEuMi4yMy0yLjI5LjY4LTMuMjQgMS4zMy0yLjc5IDQuMjgtNC42IDcuNTEtNC42IDQuNTUgMCA4LjI1IDMuNTEgOC4yNSA3LjgzIDAgMS42Mi0xLjM4IDIuOTQtMy4wOCAyLjk0cy0zLjA4LTEuMzItMy4wOC0yLjk0YzAtMS4wNy0uOTMtMS45NC0yLjA4LTEuOTRzLTIuMDguODctMi4wOCAxLjk0YzAgMS43MS42NiAzLjMxIDEuODcgNC41MS45NS45NCAxLjg2IDEuNDYgMy4yNyAxLjg1LjI3LjA3LjQyLjM1LjM1LjYxLS4wNS4yMy0uMjYuMzgtLjQ3LjM4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZpcnN0LXBhZ2UiPjxwYXRoIGQ9Ik0xOC40MSAxNi41OUwxMy44MiAxMmw0LjU5LTQuNTlMMTcgNmwtNiA2IDYgNnpNNiA2aDJ2MTJINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGFnIj48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlnaHQtbGFuZCI+PHBhdGggZD0iTTIuNSAxOWgxOXYyaC0xOXptNy4xOC01LjczbDQuMzUgMS4xNiA1LjMxIDEuNDJjLjguMjEgMS42Mi0uMjYgMS44NC0xLjA2LjIxLS44LS4yNi0xLjYyLTEuMDYtMS44NGwtNS4zMS0xLjQyLTIuNzYtOS4wMkwxMC4xMiAydjguMjhMNS4xNSA4Ljk1bC0uOTMtMi4zMi0xLjQ1LS4zOXY1LjE3bDEuNi40MyA1LjMxIDEuNDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZmxpZ2h0LXRha2VvZmYiPjxwYXRoIGQ9Ik0yLjUgMTloMTl2MmgtMTl6bTE5LjU3LTkuMzZjLS4yMS0uOC0xLjA0LTEuMjgtMS44NC0xLjA2TDE0LjkyIDEwbC02LjktNi40My0xLjkzLjUxIDQuMTQgNy4xNy00Ljk3IDEuMzMtMS45Ny0xLjU0LTEuNDUuMzkgMS44MiAzLjE2Ljc3IDEuMzMgMS42LS40MyA1LjMxLTEuNDIgNC4zNS0xLjE2TDIxIDExLjQ5Yy44MS0uMjMgMS4yOC0xLjA1IDEuMDctMS44NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwLXRvLWJhY2siPjxwYXRoIGQ9Ik05IDdIN3YyaDJWN3ptMCA0SDd2Mmgydi0yem0wLThjLTEuMTEgMC0yIC45LTIgMmgyVjN6bTQgMTJoLTJ2Mmgydi0yem02LTEydjJoMmMwLTEuMS0uOS0yLTItMnptLTYgMGgtMnYyaDJWM3pNOSAxN3YtMkg3YzAgMS4xLjg5IDIgMiAyem0xMC00aDJ2LTJoLTJ2MnptMC00aDJWN2gtMnYyem0wIDhjMS4xIDAgMi0uOSAyLTJoLTJ2MnpNNSA3SDN2MTJjMCAxLjEuODkgMiAyIDJoMTJ2LTJINVY3em0xMC0yaDJWM2gtMnYyem0wIDEyaDJ2LTJoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJmbGlwLXRvLWZyb250Ij48cGF0aCBkPSJNMyAxM2gydi0ySDN2MnptMCA0aDJ2LTJIM3Yyem0yIDR2LTJIM2MwIDEuMS44OSAyIDIgMnpNMyA5aDJWN0gzdjJ6bTEyIDEyaDJ2LTJoLTJ2MnptNC0xOEg5Yy0xLjExIDAtMiAuOS0yIDJ2MTBjMCAxLjEuODkgMiAyIDJoMTBjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxMkg5VjVoMTB2MTB6bS04IDZoMnYtMmgtMnYyem0tNCAwaDJ2LTJIN3YyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbGRlciI+PHBhdGggZD0iTTEwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMmgtOGwtMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbGRlci1vcGVuIj48cGF0aCBkPSJNMjAgNmgtOGwtMi0ySDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjhjMC0xLjEtLjktMi0yLTJ6bTAgMTJINFY4aDE2djEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZvbGRlci1zaGFyZWQiPjxwYXRoIGQ9Ik0yMCA2aC04bC0yLTJINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOGMwLTEuMS0uOS0yLTItMnptLTUgM2MxLjEgMCAyIC45IDIgMnMtLjkgMi0yIDItMi0uOS0yLTIgLjktMiAyLTJ6bTQgOGgtOHYtMWMwLTEuMzMgMi42Ny0yIDQtMnM0IC42NyA0IDJ2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb250LWRvd25sb2FkIj48cGF0aCBkPSJNOS45MyAxMy41aDQuMTRMMTIgNy45OHpNMjAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6bS00LjA1IDE2LjVsLTEuMTQtM0g5LjE3bC0xLjEyIDNINS45Nmw1LjExLTEzaDEuODZsNS4xMSAxM2gtMi4wOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJmb3J3YXJkIj48cGF0aCBkPSJNMTIgOFY0bDggOC04IDh2LTRINFY4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZ1bGxzY3JlZW4iPjxwYXRoIGQ9Ik03IDE0SDV2NWg1di0ySDd2LTN6bS0yLTRoMlY3aDNWNUg1djV6bTEyIDdoLTN2Mmg1di01aC0ydjN6TTE0IDV2MmgzdjNoMlY1aC01eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImZ1bGxzY3JlZW4tZXhpdCI+PHBhdGggZD0iTTUgMTZoM3YzaDJ2LTVINXYyem0zLThINXYyaDVWNUg4djN6bTYgMTFoMnYtM2gzdi0yaC01djV6bTItMTFWNWgtMnY1aDVWOGgtM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJnLXRyYW5zbGF0ZSI+PHBhdGggZD0iTTIwIDVoLTkuMTJMMTAgMkg0Yy0xLjEgMC0yIC45LTIgMnYxM2MwIDEuMS45IDIgMiAyaDdsMSAzaDhjMS4xIDAgMi0uOSAyLTJWN2MwLTEuMS0uOS0yLTItMnpNNy4xNyAxNC41OWMtMi4yNSAwLTQuMDktMS44My00LjA5LTQuMDlzMS44My00LjA5IDQuMDktNC4wOWMxLjA0IDAgMS45OS4zNyAyLjc0IDEuMDdsLjA3LjA2LTEuMjMgMS4xOC0uMDYtLjA1Yy0uMjktLjI3LS43OC0uNTktMS41Mi0uNTktMS4zMSAwLTIuMzggMS4wOS0yLjM4IDIuNDJzMS4wNyAyLjQyIDIuMzggMi40MmMxLjM3IDAgMS45Ni0uODcgMi4xMi0xLjQ2SDcuMDhWOS45MWgzLjk1bC4wMS4wN2MuMDQuMjEuMDUuNC4wNS42MSAwIDIuMzUtMS42MSA0LTMuOTIgNHptNi4wMy0xLjcxYy4zMy42Ljc0IDEuMTggMS4xOSAxLjdsLS41NC41My0uNjUtMi4yM3ptLjc3LS43NmgtLjk5bC0uMzEtMS4wNGgzLjk5cy0uMzQgMS4zMS0xLjU2IDIuNzRjLS41Mi0uNjItLjg5LTEuMjMtMS4xMy0xLjd6TTIxIDIwYzAgLjU1LS40NSAxLTEgMWgtN2wyLTItLjgxLTIuNzcuOTItLjkyTDE3Ljc5IDE4bC43My0uNzMtMi43MS0yLjY4Yy45LTEuMDMgMS42LTIuMjUgMS45Mi0zLjUxSDE5di0xLjA0aC0zLjY0VjloLTEuMDR2MS4wNGgtMS45NkwxMS4xOCA2SDIwYy41NSAwIDEgLjQ1IDEgMXYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJnYXZlbCI+PHBhdGggZD0iTTEgMjFoMTJ2Mkgxek01LjI0NSA4LjA3bDIuODMtMi44MjcgMTQuMTQgMTQuMTQyLTIuODI4IDIuODI4ek0xMi4zMTcgMWw1LjY1NyA1LjY1Ni0yLjgzIDIuODMtNS42NTQtNS42NnpNMy44MjUgOS40ODVsNS42NTcgNS42NTctMi44MjggMi44MjgtNS42NTctNS42NTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ2VzdHVyZSI+PHBhdGggZD0iTTQuNTkgNi44OWMuNy0uNzEgMS40LTEuMzUgMS43MS0xLjIyLjUuMiAwIDEuMDMtLjMgMS41Mi0uMjUuNDItMi44NiAzLjg5LTIuODYgNi4zMSAwIDEuMjguNDggMi4zNCAxLjM0IDIuOTguNzUuNTYgMS43NC43MyAyLjY0LjQ2IDEuMDctLjMxIDEuOTUtMS40IDMuMDYtMi43NyAxLjIxLTEuNDkgMi44My0zLjQ0IDQuMDgtMy40NCAxLjYzIDAgMS42NSAxLjAxIDEuNzYgMS43OS0zLjc4LjY0LTUuMzggMy42Ny01LjM4IDUuMzcgMCAxLjcgMS40NCAzLjA5IDMuMjEgMy4wOSAxLjYzIDAgNC4yOS0xLjMzIDQuNjktNi4xSDIxdi0yLjVoLTIuNDdjLS4xNS0xLjY1LTEuMDktNC4yLTQuMDMtNC4yLTIuMjUgMC00LjE4IDEuOTEtNC45NCAyLjg0LS41OC43My0yLjA2IDIuNDgtMi4yOSAyLjcyLS4yNS4zLS42OC44NC0xLjExLjg0LS40NSAwLS43Mi0uODMtLjM2LTEuOTIuMzUtMS4wOSAxLjQtMi44NiAxLjg1LTMuNTIuNzgtMS4xNCAxLjMtMS45MiAxLjMtMy4yOEM4Ljk1IDMuNjkgNy4zMSAzIDYuNDQgMyA1LjEyIDMgMy45NyA0IDMuNzIgNC4yNWMtLjM2LjM2LS42Ni42Ni0uODguOTNsMS43NSAxLjcxem05LjI5IDExLjY2Yy0uMzEgMC0uNzQtLjI2LS43NC0uNzIgMC0uNi43My0yLjIgMi44Ny0yLjc2LS4zIDIuNjktMS40MyAzLjQ4LTIuMTMgMy40OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJnZXQtYXBwIj48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImdpZiI+PHBhdGggZD0iTTExLjUgOUgxM3Y2aC0xLjV6TTkgOUg2Yy0uNiAwLTEgLjUtMSAxdjRjMCAuNS40IDEgMSAxaDNjLjYgMCAxLS41IDEtMXYtMkg4LjV2MS41aC0ydi0zSDEwVjEwYzAtLjUtLjQtMS0xLTF6bTEwIDEuNVY5aC00LjV2NkgxNnYtMmgydi0xLjVoLTJ2LTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iZ3JhZGUiPjxwYXRoIGQ9Ik0xMiAxNy4yN0wxOC4xOCAyMWwtMS42NC03LjAzTDIyIDkuMjRsLTcuMTktLjYxTDEyIDIgOS4xOSA4LjYzIDIgOS4yNGw1LjQ2IDQuNzNMNS44MiAyMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJncm91cC13b3JrIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNOCAxNy41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXpNOS41IDhjMC0xLjM4IDEuMTItMi41IDIuNS0yLjVzMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41UzkuNSA5LjM4IDkuNSA4em02LjUgOS41Yy0xLjM4IDAtMi41LTEuMTItMi41LTIuNXMxLjEyLTIuNSAyLjUtMi41IDIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJoZWxwIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxN2gtMnYtMmgydjJ6bTIuMDctNy43NWwtLjkuOTJDMTMuNDUgMTIuOSAxMyAxMy41IDEzIDE1aC0ydi0uNWMwLTEuMS40NS0yLjEgMS4xNy0yLjgzbDEuMjQtMS4yNmMuMzctLjM2LjU5LS44Ni41OS0xLjQxIDAtMS4xLS45LTItMi0ycy0yIC45LTIgMkg4YzAtMi4yMSAxLjc5LTQgNC00czQgMS43OSA0IDRjMCAuODgtLjM2IDEuNjgtLjkzIDIuMjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaGVscC1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMThoMnYtMmgtMnYyem0xLTE2QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHptMC0xNGMtMi4yMSAwLTQgMS43OS00IDRoMmMwLTEuMS45LTIgMi0yczIgLjkgMiAyYzAgMi0zIDEuNzUtMyA1aDJjMC0yLjI1IDMtMi41IDMtNSAwLTIuMjEtMS43OS00LTQtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJoaWdobGlnaHQtb2ZmIj48cGF0aCBkPSJNMTQuNTkgOEwxMiAxMC41OSA5LjQxIDggOCA5LjQxIDEwLjU5IDEyIDggMTQuNTkgOS40MSAxNiAxMiAxMy40MSAxNC41OSAxNiAxNiAxNC41OSAxMy40MSAxMiAxNiA5LjQxIDE0LjU5IDh6TTEyIDJDNi40NyAyIDIgNi40NyAyIDEyczQuNDcgMTAgMTAgMTAgMTAtNC40NyAxMC0xMFMxNy41MyAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imhpc3RvcnkiPjxwYXRoIGQ9Ik0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaG9tZSI+PHBhdGggZD0iTTEwIDIwdi02aDR2Nmg1di04aDNMMTIgMyAyIDEyaDN2OHoiPjwvcGF0aD48L2c+CjxnIGlkPSJob3VyZ2xhc3MtZW1wdHkiPjxwYXRoIGQ9Ik02IDJ2NmguMDFMNiA4LjAxIDEwIDEybC00IDQgLjAxLjAxSDZWMjJoMTJ2LTUuOTloLS4wMUwxOCAxNmwtNC00IDQtMy45OS0uMDEtLjAxSDE4VjJINnptMTAgMTQuNVYyMEg4di0zLjVsNC00IDQgNHptLTQtNWwtNC00VjRoOHYzLjVsLTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJob3VyZ2xhc3MtZnVsbCI+PHBhdGggZD0iTTYgMnY2aC4wMUw2IDguMDEgMTAgMTJsLTQgNCAuMDEuMDFINlYyMmgxMnYtNS45OWgtLjAxTDE4IDE2bC00LTQgNC0zLjk5LS4wMS0uMDFIMThWMkg2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imh0dHAiPjxwYXRoIGQ9Ik00LjUgMTFoLTJWOUgxdjZoMS41di0yLjVoMlYxNUg2VjlINC41djJ6bTIuNS0uNWgxLjVWMTVIMTB2LTQuNWgxLjVWOUg3djEuNXptNS41IDBIMTRWMTVoMS41di00LjVIMTdWOWgtNC41djEuNXptOS0xLjVIMTh2NmgxLjV2LTJoMmMuOCAwIDEuNS0uNyAxLjUtMS41di0xYzAtLjgtLjctMS41LTEuNS0xLjV6bTAgMi41aC0ydi0xaDJ2MXoiPjwvcGF0aD48L2c+CjxnIGlkPSJodHRwcyI+PHBhdGggZD0iTTE4IDhoLTFWNmMwLTIuNzYtMi4yNC01LTUtNVM3IDMuMjQgNyA2djJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptLTYgOWMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6bTMuMS05SDguOVY2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW1wb3J0YW50LWRldmljZXMiPjxwYXRoIGQ9Ik0yMyAxMS4wMUwxOCAxMWMtLjU1IDAtMSAuNDUtMSAxdjljMCAuNTUuNDUgMSAxIDFoNWMuNTUgMCAxLS40NSAxLTF2LTljMC0uNTUtLjQ1LS45OS0xLS45OXpNMjMgMjBoLTV2LTdoNXY3ek0yMCAySDJDLjg5IDIgMCAyLjg5IDAgNHYxMmMwIDEuMS44OSAyIDIgMmg3djJIN3YyaDh2LTJoLTJ2LTJoMnYtMkgyVjRoMTh2NWgyVjRjMC0xLjExLS45LTItMi0yem0tOC4wMyA3TDExIDZsLS45NyAzSDdsMi40NyAxLjc2LS45NCAyLjkxIDIuNDctMS44IDIuNDcgMS44LS45NC0yLjkxTDE1IDloLTMuMDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5ib3giPjxwYXRoIGQ9Ik0xOSAzSDQuOTljLTEuMTEgMC0xLjk4Ljg5LTEuOTggMkwzIDE5YzAgMS4xLjg4IDIgMS45OSAySDE5YzEuMSAwIDItLjkgMi0yVjVjMC0xLjExLS45LTItMi0yem0wIDEyaC00YzAgMS42Ni0xLjM1IDMtMyAzcy0zLTEuMzQtMy0zSDQuOTlWNUgxOXYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbmRldGVybWluYXRlLWNoZWNrLWJveCI+PHBhdGggZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yem0tMiAxMEg3di0yaDEwdjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5mbyI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iaW5mby1vdXRsaW5lIj48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJpbnB1dCI+PHBhdGggZD0iTTIxIDMuMDFIM2MtMS4xIDAtMiAuOS0yIDJWOWgyVjQuOTloMTh2MTQuMDNIM1YxNUgxdjQuMDFjMCAxLjEuOSAxLjk4IDIgMS45OGgxOGMxLjEgMCAyLS44OCAyLTEuOTh2LTE0YzAtMS4xMS0uOS0yLTItMnpNMTEgMTZsNC00LTQtNHYzSDF2MmgxMHYzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImludmVydC1jb2xvcnMiPjxwYXRoIGQ9Ik0xNy42NiA3LjkzTDEyIDIuMjcgNi4zNCA3LjkzYy0zLjEyIDMuMTItMy4xMiA4LjE5IDAgMTEuMzFDNy45IDIwLjggOS45NSAyMS41OCAxMiAyMS41OGMyLjA1IDAgNC4xLS43OCA1LjY2LTIuMzQgMy4xMi0zLjEyIDMuMTItOC4xOSAwLTExLjMxek0xMiAxOS41OWMtMS42IDAtMy4xMS0uNjItNC4yNC0xLjc2QzYuNjIgMTYuNjkgNiAxNS4xOSA2IDEzLjU5cy42Mi0zLjExIDEuNzYtNC4yNEwxMiA1LjF2MTQuNDl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGFiZWwiPjxwYXRoIGQ9Ik0xNy42MyA1Ljg0QzE3LjI3IDUuMzMgMTYuNjcgNSAxNiA1TDUgNS4wMUMzLjkgNS4wMSAzIDUuOSAzIDd2MTBjMCAxLjEuOSAxLjk5IDIgMS45OUwxNiAxOWMuNjcgMCAxLjI3LS4zMyAxLjYzLS44NEwyMiAxMmwtNC4zNy02LjE2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhYmVsLW91dGxpbmUiPjxwYXRoIGQ9Ik0xNy42MyA1Ljg0QzE3LjI3IDUuMzMgMTYuNjcgNSAxNiA1TDUgNS4wMUMzLjkgNS4wMSAzIDUuOSAzIDd2MTBjMCAxLjEuOSAxLjk5IDIgMS45OUwxNiAxOWMuNjcgMCAxLjI3LS4zMyAxLjYzLS44NEwyMiAxMmwtNC4zNy02LjE2ek0xNiAxN0g1VjdoMTFsMy41NSA1TDE2IDE3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxhbmd1YWdlIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnptNi45MyA2aC0yLjk1Yy0uMzItMS4yNS0uNzgtMi40NS0xLjM4LTMuNTYgMS44NC42MyAzLjM3IDEuOTEgNC4zMyAzLjU2ek0xMiA0LjA0Yy44MyAxLjIgMS40OCAyLjUzIDEuOTEgMy45NmgtMy44MmMuNDMtMS40MyAxLjA4LTIuNzYgMS45MS0zLjk2ek00LjI2IDE0QzQuMSAxMy4zNiA0IDEyLjY5IDQgMTJzLjEtMS4zNi4yNi0yaDMuMzhjLS4wOC42Ni0uMTQgMS4zMi0uMTQgMiAwIC42OC4wNiAxLjM0LjE0IDJINC4yNnptLjgyIDJoMi45NWMuMzIgMS4yNS43OCAyLjQ1IDEuMzggMy41Ni0xLjg0LS42My0zLjM3LTEuOS00LjMzLTMuNTZ6bTIuOTUtOEg1LjA4Yy45Ni0xLjY2IDIuNDktMi45MyA0LjMzLTMuNTZDOC44MSA1LjU1IDguMzUgNi43NSA4LjAzIDh6TTEyIDE5Ljk2Yy0uODMtMS4yLTEuNDgtMi41My0xLjkxLTMuOTZoMy44MmMtLjQzIDEuNDMtMS4wOCAyLjc2LTEuOTEgMy45NnpNMTQuMzQgMTRIOS42NmMtLjA5LS42Ni0uMTYtMS4zMi0uMTYtMiAwLS42OC4wNy0xLjM1LjE2LTJoNC42OGMuMDkuNjUuMTYgMS4zMi4xNiAyIDAgLjY4LS4wNyAxLjM0LS4xNiAyem0uMjUgNS41NmMuNi0xLjExIDEuMDYtMi4zMSAxLjM4LTMuNTZoMi45NWMtLjk2IDEuNjUtMi40OSAyLjkzLTQuMzMgMy41NnpNMTYuMzYgMTRjLjA4LS42Ni4xNC0xLjMyLjE0LTIgMC0uNjgtLjA2LTEuMzQtLjE0LTJoMy4zOGMuMTYuNjQuMjYgMS4zMS4yNiAycy0uMSAxLjM2LS4yNiAyaC0zLjM4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9Imxhc3QtcGFnZSI+PHBhdGggZD0iTTUuNTkgNy40MUwxMC4xOCAxMmwtNC41OSA0LjU5TDcgMThsNi02LTYtNnpNMTYgNmgydjEyaC0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxhdW5jaCI+PHBhdGggZD0iTTE5IDE5SDVWNWg3VjNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0ydi03aC0ydjd6TTE0IDN2MmgzLjU5bC05LjgzIDkuODMgMS40MSAxLjQxTDE5IDYuNDFWMTBoMlYzaC03eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpZ2h0YnVsYi1vdXRsaW5lIj48cGF0aCBkPSJNOSAyMWMwIC41NS40NSAxIDEgMWg0Yy41NSAwIDEtLjQ1IDEtMXYtMUg5djF6bTMtMTlDOC4xNCAyIDUgNS4xNCA1IDljMCAyLjM4IDEuMTkgNC40NyAzIDUuNzRWMTdjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTF2LTIuMjZjMS44MS0xLjI3IDMtMy4zNiAzLTUuNzQgMC0zLjg2LTMuMTQtNy03LTd6bTIuODUgMTEuMWwtLjg1LjZWMTZoLTR2LTIuM2wtLjg1LS42QzcuOCAxMi4xNiA3IDEwLjYzIDcgOWMwLTIuNzYgMi4yNC01IDUtNXM1IDIuMjQgNSA1YzAgMS42My0uOCAzLjE2LTIuMTUgNC4xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmUtc3R5bGUiPjxwYXRoIGQ9Ik0zIDE2aDV2LTJIM3Yyem02LjUgMGg1di0yaC01djJ6bTYuNSAwaDV2LTJoLTV2MnpNMyAyMGgydi0ySDN2MnptNCAwaDJ2LTJIN3Yyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyem00IDBoMnYtMmgtMnYyek0zIDEyaDh2LTJIM3Yyem0xMCAwaDh2LTJoLTh2MnpNMyA0djRoMThWNEgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxpbmUtd2VpZ2h0Ij48cGF0aCBkPSJNMyAxN2gxOHYtMkgzdjJ6bTAgM2gxOHYtMUgzdjF6bTAtN2gxOHYtM0gzdjN6bTAtOXY0aDE4VjRIM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsaW5rIj48cGF0aCBkPSJNMy45IDEyYzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xaDRWN0g3Yy0yLjc2IDAtNSAyLjI0LTUgNXMyLjI0IDUgNSA1aDR2LTEuOUg3Yy0xLjcxIDAtMy4xLTEuMzktMy4xLTMuMXpNOCAxM2g4di0ySDh2MnptOS02aC00djEuOWg0YzEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xcy0xLjM5IDMuMS0zLjEgMy4xaC00VjE3aDRjMi43NiAwIDUtMi4yNCA1LTVzLTIuMjQtNS01LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibGlzdCI+PHBhdGggZD0iTTMgMTNoMnYtMkgzdjJ6bTAgNGgydi0ySDN2MnptMC04aDJWN0gzdjJ6bTQgNGgxNHYtMkg3djJ6bTAgNGgxNHYtMkg3djJ6TTcgN3YyaDE0VjdIN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrIj48cGF0aCBkPSJNMTggOGgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZ2Mkg2Yy0xLjEgMC0yIC45LTIgMnYxMGMwIDEuMS45IDIgMiAyaDEyYzEuMSAwIDItLjkgMi0yVjEwYzAtMS4xLS45LTItMi0yem0tNiA5Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnptMy4xLTlIOC45VjZjMC0xLjcxIDEuMzktMy4xIDMuMS0zLjEgMS43MSAwIDMuMSAxLjM5IDMuMSAzLjF2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb2NrLW9wZW4iPjxwYXRoIGQ9Ik0xMiAxN2MxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTYtOWgtMVY2YzAtMi43Ni0yLjI0LTUtNS01UzcgMy4yNCA3IDZoMS45YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xIDEuNzEgMCAzLjEgMS4zOSAzLjEgMy4xdjJINmMtMS4xIDAtMiAuOS0yIDJ2MTBjMCAxLjEuOSAyIDIgMmgxMmMxLjEgMCAyLS45IDItMlYxMGMwLTEuMS0uOS0yLTItMnptMCAxMkg2VjEwaDEydjEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxvY2stb3V0bGluZSI+PHBhdGggZD0iTTEyIDE3YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptNi05aC0xVjZjMC0yLjc2LTIuMjQtNS01LTVTNyAzLjI0IDcgNnYySDZjLTEuMSAwLTIgLjktMiAydjEwYzAgMS4xLjkgMiAyIDJoMTJjMS4xIDAgMi0uOSAyLTJWMTBjMC0xLjEtLjktMi0yLTJ6TTguOSA2YzAtMS43MSAxLjM5LTMuMSAzLjEtMy4xczMuMSAxLjM5IDMuMSAzLjF2Mkg4LjlWNnpNMTggMjBINlYxMGgxMnYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJsb3ctcHJpb3JpdHkiPjxwYXRoIGQ9Ik0xNCA1aDh2MmgtOHptMCA1LjVoOHYyaC04em0wIDUuNWg4djJoLTh6TTIgMTEuNUMyIDE1LjA4IDQuOTIgMTggOC41IDE4SDl2MmwzLTMtMy0zdjJoLS41QzYuMDIgMTYgNCAxMy45OCA0IDExLjVTNi4wMiA3IDguNSA3SDEyVjVIOC41QzQuOTIgNSAyIDcuOTIgMiAxMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9ImxveWFsdHkiPjxwYXRoIGQ9Ik0yMS40MSAxMS41OGwtOS05QzEyLjA1IDIuMjIgMTEuNTUgMiAxMSAySDRjLTEuMSAwLTIgLjktMiAydjdjMCAuNTUuMjIgMS4wNS41OSAxLjQybDkgOWMuMzYuMzYuODYuNTggMS40MS41OC41NSAwIDEuMDUtLjIyIDEuNDEtLjU5bDctN2MuMzctLjM2LjU5LS44Ni41OS0xLjQxIDAtLjU1LS4yMy0xLjA2LS41OS0xLjQyek01LjUgN0M0LjY3IDcgNCA2LjMzIDQgNS41UzQuNjcgNCA1LjUgNCA3IDQuNjcgNyA1LjUgNi4zMyA3IDUuNSA3em0xMS43NyA4LjI3TDEzIDE5LjU0bC00LjI3LTQuMjdDOC4yOCAxNC44MSA4IDE0LjE5IDggMTMuNWMwLTEuMzggMS4xMi0yLjUgMi41LTIuNS42OSAwIDEuMzIuMjggMS43Ny43NGwuNzMuNzIuNzMtLjczYy40NS0uNDUgMS4wOC0uNzMgMS43Ny0uNzMgMS4zOCAwIDIuNSAxLjEyIDIuNSAyLjUgMCAuNjktLjI4IDEuMzItLjczIDEuNzd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibWFpbCI+PHBhdGggZD0iTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1hcmt1bnJlYWQiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMSAwLTEuOTkuOS0xLjk5IDJMMiAxOGMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDItLjkgMi0yVjZjMC0xLjEtLjktMi0yLTJ6bTAgNGwtOCA1LTgtNVY2bDggNSA4LTV2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJtYXJrdW5yZWFkLW1haWxib3giPjxwYXRoIGQ9Ik0yMCA2SDEwdjZIOFY0aDZWMEg2djZINGMtMS4xIDAtMiAuOS0yIDJ2MTJjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY4YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1lbnUiPjxwYXRoIGQ9Ik0zIDE4aDE4di0ySDN2MnptMC01aDE4di0ySDN2MnptMC03djJoMThWNkgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vcmUtaG9yaXoiPjxwYXRoIGQ9Ik02IDEwYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMTIgMGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bS02IDBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vcmUtdmVydCI+PHBhdGggZD0iTTEyIDhjMS4xIDAgMi0uOSAyLTJzLS45LTItMi0yLTIgLjktMiAyIC45IDIgMiAyem0wIDJjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem0wIDZjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9Im1vdG9yY3ljbGUiPjxwYXRoIGQ9Ik0xOS40NCA5LjAzTDE1LjQxIDVIMTF2MmgzLjU5bDIgMkg1Yy0yLjggMC01IDIuMi01IDVzMi4yIDUgNSA1YzIuNDYgMCA0LjQ1LTEuNjkgNC45LTRoMS42NWwyLjc3LTIuNzdjLS4yMS41NC0uMzIgMS4xNC0uMzIgMS43NyAwIDIuOCAyLjIgNSA1IDVzNS0yLjIgNS01YzAtMi42NS0xLjk3LTQuNzctNC41Ni00Ljk3ek03LjgyIDE1QzcuNCAxNi4xNSA2LjI4IDE3IDUgMTdjLTEuNjMgMC0zLTEuMzctMy0zczEuMzctMyAzLTNjMS4yOCAwIDIuNC44NSAyLjgyIDJINXYyaDIuODJ6TTE5IDE3Yy0xLjY2IDAtMy0xLjM0LTMtM3MxLjM0LTMgMy0zIDMgMS4zNCAzIDMtMS4zNCAzLTMgM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJtb3ZlLXRvLWluYm94Ij48cGF0aCBkPSJNMTkgM0g0Ljk5Yy0xLjExIDAtMS45OC45LTEuOTggMkwzIDE5YzAgMS4xLjg4IDIgMS45OSAySDE5YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTJoLTRjMCAxLjY2LTEuMzUgMy0zIDNzLTMtMS4zNC0zLTNINC45OVY1SDE5djEwem0tMy01aC0yVjdoLTR2M0g4bDQgNCA0LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ibmV4dC13ZWVrIj48cGF0aCBkPSJNMjAgN2gtNFY1YzAtLjU1LS4yMi0xLjA1LS41OS0xLjQxQzE1LjA1IDMuMjIgMTQuNTUgMyAxNCAzaC00Yy0xLjEgMC0yIC45LTIgMnYySDRjLTEuMSAwLTIgLjktMiAydjExYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWOWMwLTEuMS0uOS0yLTItMnpNMTAgNWg0djJoLTRWNXptMSAxMy41bC0xLTEgMy0zLTMtMyAxLTEgNCA0LTQgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJub3RlLWFkZCI+PHBhdGggZD0iTTE0IDJINmMtMS4xIDAtMS45OS45LTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDItLjkgMi0yVjhsLTYtNnptMiAxNGgtM3YzaC0ydi0zSDh2LTJoM3YtM2gydjNoM3Yyem0tMy03VjMuNUwxOC41IDlIMTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib2ZmbGluZS1waW4iPjxwYXRoIGQ9Ik0xMiAyQzYuNSAyIDIgNi41IDIgMTJzNC41IDEwIDEwIDEwIDEwLTQuNSAxMC0xMFMxNy41IDIgMTIgMnptNSAxNkg3di0yaDEwdjJ6bS02LjctNEw3IDEwLjdsMS40LTEuNCAxLjkgMS45IDUuMy01LjNMMTcgNy4zIDEwLjMgMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3BhY2l0eSI+PHBhdGggZD0iTTE3LjY2IDhMMTIgMi4zNSA2LjM0IDhDNC43OCA5LjU2IDQgMTEuNjQgNCAxMy42NHMuNzggNC4xMSAyLjM0IDUuNjcgMy42MSAyLjM1IDUuNjYgMi4zNSA0LjEtLjc5IDUuNjYtMi4zNVMyMCAxNS42NCAyMCAxMy42NCAxOS4yMiA5LjU2IDE3LjY2IDh6TTYgMTRjLjAxLTIgLjYyLTMuMjcgMS43Ni00LjRMMTIgNS4yN2w0LjI0IDQuMzhDMTcuMzggMTAuNzcgMTcuOTkgMTIgMTggMTRINnoiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGVuLWluLWJyb3dzZXIiPjxwYXRoIGQ9Ik0xOSA0SDVjLTEuMTEgMC0yIC45LTIgMnYxMmMwIDEuMS44OSAyIDIgMmg0di0ySDVWOGgxNHYxMGgtNHYyaDRjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uODktMi0yLTJ6bS03IDZsLTQgNGgzdjZoMnYtNmgzbC00LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ib3Blbi1pbi1uZXciPjxwYXRoIGQ9Ik0xOSAxOUg1VjVoN1YzSDVjLTEuMTEgMC0yIC45LTIgMnYxNGMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtN2gtMnY3ek0xNCAzdjJoMy41OWwtOS44MyA5LjgzIDEuNDEgMS40MUwxOSA2LjQxVjEwaDJWM2gtN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJvcGVuLXdpdGgiPjxwYXRoIGQ9Ik0xMCA5aDRWNmgzbC01LTUtNSA1aDN2M3ptLTEgMUg2VjdsLTUgNSA1IDV2LTNoM3YtNHptMTQgMmwtNS01djNoLTN2NGgzdjNsNS01em0tOSAzaC00djNIN2w1IDUgNS01aC0zdi0zeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBhZ2V2aWV3Ij48cGF0aCBkPSJNMTEuNSA5QzEwLjEyIDkgOSAxMC4xMiA5IDExLjVzMS4xMiAyLjUgMi41IDIuNSAyLjUtMS4xMiAyLjUtMi41UzEyLjg4IDkgMTEuNSA5ek0yMCA0SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptLTMuMjEgMTQuMjFsLTIuOTEtMi45MWMtLjY5LjQ0LTEuNTEuNy0yLjM5LjdDOS4wMSAxNiA3IDEzLjk5IDcgMTEuNVM5LjAxIDcgMTEuNSA3IDE2IDkuMDEgMTYgMTEuNWMwIC44OC0uMjYgMS42OS0uNyAyLjM5bDIuOTEgMi45LTEuNDIgMS40MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwYW4tdG9vbCI+PHBhdGggZD0iTTIzIDUuNVYyMGMwIDIuMi0xLjggNC00IDRoLTcuM2MtMS4wOCAwLTIuMS0uNDMtMi44NS0xLjE5TDEgMTQuODNzMS4yNi0xLjIzIDEuMy0xLjI1Yy4yMi0uMTkuNDktLjI5Ljc5LS4yOS4yMiAwIC40Mi4wNi42LjE2LjA0LjAxIDQuMzEgMi40NiA0LjMxIDIuNDZWNGMwLS44My42Ny0xLjUgMS41LTEuNVMxMSAzLjE3IDExIDR2N2gxVjEuNWMwLS44My42Ny0xLjUgMS41LTEuNVMxNSAuNjcgMTUgMS41VjExaDFWMi41YzAtLjgzLjY3LTEuNSAxLjUtMS41czEuNS42NyAxLjUgMS41VjExaDFWNS41YzAtLjgzLjY3LTEuNSAxLjUtMS41czEuNS42NyAxLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBheW1lbnQiPjxwYXRoIGQ9Ik0yMCA0SDRjLTEuMTEgMC0xLjk5Ljg5LTEuOTkgMkwyIDE4YzAgMS4xMS44OSAyIDIgMmgxNmMxLjExIDAgMi0uODkgMi0yVjZjMC0xLjExLS44OS0yLTItMnptMCAxNEg0di02aDE2djZ6bTAtMTBINFY2aDE2djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1jYW1lcmEtbWljIj48cGF0aCBkPSJNMjAgNWgtMy4xN0wxNSAzSDlMNy4xNyA1SDRjLTEuMSAwLTIgLjktMiAydjEyYzAgMS4xLjkgMiAyIDJoN3YtMi4wOWMtMi44My0uNDgtNS0yLjk0LTUtNS45MWgyYzAgMi4yMSAxLjc5IDQgNCA0czQtMS43OSA0LTRoMmMwIDIuOTctMi4xNyA1LjQzLTUgNS45MVYyMWg3YzEuMSAwIDItLjkgMi0yVjdjMC0xLjEtLjktMi0yLTJ6bS02IDhjMCAxLjEtLjkgMi0yIDJzLTItLjktMi0yVjljMC0xLjEuOS0yIDItMnMyIC45IDIgMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tY29udGFjdC1jYWxlbmRhciI+PHBhdGggZD0iTTE5IDNoLTFWMWgtMnYySDhWMUg2djJINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bS03IDNjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDMtMy0xLjM0LTMtMyAxLjM0LTMgMy0zem02IDEySDZ2LTFjMC0yIDQtMy4xIDYtMy4xczYgMS4xIDYgMy4xdjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1kYXRhLXNldHRpbmciPjxwYXRoIGQ9Ik0xOC45OSAxMS41Yy4zNCAwIC42Ny4wMyAxIC4wN0wyMCAwIDAgMjBoMTEuNTZjLS4wNC0uMzMtLjA3LS42Ni0uMDctMSAwLTQuMTQgMy4zNi03LjUgNy41LTcuNXptMy43MSA3Ljk5Yy4wMi0uMTYuMDQtLjMyLjA0LS40OSAwLS4xNy0uMDEtLjMzLS4wNC0uNDlsMS4wNi0uODNjLjA5LS4wOC4xMi0uMjEuMDYtLjMybC0xLTEuNzNjLS4wNi0uMTEtLjE5LS4xNS0uMzEtLjExbC0xLjI0LjVjLS4yNi0uMi0uNTQtLjM3LS44NS0uNDlsLS4xOS0xLjMyYy0uMDEtLjEyLS4xMi0uMjEtLjI0LS4yMWgtMmMtLjEyIDAtLjIzLjA5LS4yNS4yMWwtLjE5IDEuMzJjLS4zLjEzLS41OS4yOS0uODUuNDlsLTEuMjQtLjVjLS4xMS0uMDQtLjI0IDAtLjMxLjExbC0xIDEuNzNjLS4wNi4xMS0uMDQuMjQuMDYuMzJsMS4wNi44M2MtLjAyLjE2LS4wMy4zMi0uMDMuNDkgMCAuMTcuMDEuMzMuMDMuNDlsLTEuMDYuODNjLS4wOS4wOC0uMTIuMjEtLjA2LjMybDEgMS43M2MuMDYuMTEuMTkuMTUuMzEuMTFsMS4yNC0uNWMuMjYuMi41NC4zNy44NS40OWwuMTkgMS4zMmMuMDIuMTIuMTIuMjEuMjUuMjFoMmMuMTIgMCAuMjMtLjA5LjI1LS4yMWwuMTktMS4zMmMuMy0uMTMuNTktLjI5Ljg0LS40OWwxLjI1LjVjLjExLjA0LjI0IDAgLjMxLS4xMWwxLTEuNzNjLjA2LS4xMS4wMy0uMjQtLjA2LS4zMmwtMS4wNy0uODN6bS0zLjcxIDEuMDFjLS44MyAwLTEuNS0uNjctMS41LTEuNXMuNjctMS41IDEuNS0xLjUgMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tZGV2aWNlLWluZm9ybWF0aW9uIj48cGF0aCBkPSJNMTMgN2gtMnYyaDJWN3ptMCA0aC0ydjZoMnYtNnptNC05Ljk5TDcgMWMtMS4xIDAtMiAuOS0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLS45IDItMlYzYzAtMS4xLS45LTEuOTktMi0xLjk5ek0xNyAxOUg3VjVoMTB2MTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1pZGVudGl0eSI+PHBhdGggZD0iTTEyIDUuOWMxLjE2IDAgMi4xLjk0IDIuMSAyLjFzLS45NCAyLjEtMi4xIDIuMVM5LjkgOS4xNiA5LjkgOHMuOTQtMi4xIDIuMS0yLjFtMCA5YzIuOTcgMCA2LjEgMS40NiA2LjEgMi4xdjEuMUg1LjlWMTdjMC0uNjQgMy4xMy0yLjEgNi4xLTIuMU0xMiA0QzkuNzkgNCA4IDUuNzkgOCA4czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDljLTIuNjcgMC04IDEuMzQtOCA0djNoMTZ2LTNjMC0yLjY2LTUuMzMtNC04LTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1tZWRpYSI+PHBhdGggZD0iTTIgNkgwdjVoLjAxTDAgMjBjMCAxLjEuOSAyIDIgMmgxOHYtMkgyVjZ6bTIwLTJoLThsLTItMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMTZjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLS45IDItMlY2YzAtMS4xLS45LTItMi0yek03IDE1bDQuNS02IDMuNSA0LjUxIDIuNS0zLjAxTDIxIDE1SDd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGVybS1waG9uZS1tc2ciPjxwYXRoIGQ9Ik0yMCAxNS41Yy0xLjI1IDAtMi40NS0uMi0zLjU3LS41Ny0uMzUtLjExLS43NC0uMDMtMS4wMi4yNGwtMi4yIDIuMmMtMi44My0xLjQ0LTUuMTUtMy43NS02LjU5LTYuNThsMi4yLTIuMjFjLjI4LS4yNy4zNi0uNjYuMjUtMS4wMUM4LjcgNi40NSA4LjUgNS4yNSA4LjUgNGMwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxIDAgOS4zOSA3LjYxIDE3IDE3IDE3IC41NSAwIDEtLjQ1IDEtMXYtMy41YzAtLjU1LS40NS0xLTEtMXpNMTIgM3YxMGwzLTNoNlYzaC05eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBlcm0tc2Nhbi13aWZpIj48cGF0aCBkPSJNMTIgM0M2Ljk1IDMgMy4xNSA0Ljg1IDAgNy4yM0wxMiAyMiAyNCA3LjI1QzIwLjg1IDQuODcgMTcuMDUgMyAxMiAzem0xIDEzaC0ydi02aDJ2NnptLTItOFY2aDJ2MmgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJwZXRzIj48Y2lyY2xlIGN4PSI0LjUiIGN5PSI5LjUiIHI9IjIuNSI+PC9jaXJjbGU+PGNpcmNsZSBjeD0iOSIgY3k9IjUuNSIgcj0iMi41Ij48L2NpcmNsZT48Y2lyY2xlIGN4PSIxNSIgY3k9IjUuNSIgcj0iMi41Ij48L2NpcmNsZT48Y2lyY2xlIGN4PSIxOS41IiBjeT0iOS41IiByPSIyLjUiPjwvY2lyY2xlPjxwYXRoIGQ9Ik0xNy4zNCAxNC44NmMtLjg3LTEuMDItMS42LTEuODktMi40OC0yLjkxLS40Ni0uNTQtMS4wNS0xLjA4LTEuNzUtMS4zMi0uMTEtLjA0LS4yMi0uMDctLjMzLS4wOS0uMjUtLjA0LS41Mi0uMDQtLjc4LS4wNHMtLjUzIDAtLjc5LjA1Yy0uMTEuMDItLjIyLjA1LS4zMy4wOS0uNy4yNC0xLjI4Ljc4LTEuNzUgMS4zMi0uODcgMS4wMi0xLjYgMS44OS0yLjQ4IDIuOTEtMS4zMSAxLjMxLTIuOTIgMi43Ni0yLjYyIDQuNzkuMjkgMS4wMiAxLjAyIDIuMDMgMi4zMyAyLjMyLjczLjE1IDMuMDYtLjQ0IDUuNTQtLjQ0aC4xOGMyLjQ4IDAgNC44MS41OCA1LjU0LjQ0IDEuMzEtLjI5IDIuMDQtMS4zMSAyLjMzLTIuMzIuMzEtMi4wNC0xLjMtMy40OS0yLjYxLTQuOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJwaWN0dXJlLWluLXBpY3R1cmUiPjxwYXRoIGQ9Ik0xOSA3aC04djZoOFY3em0yLTRIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAxLjk4IDIgMS45OGgxOGMxLjEgMCAyLS44OCAyLTEuOThWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOThoMTh2MTQuMDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icGljdHVyZS1pbi1waWN0dXJlLWFsdCI+PHBhdGggZD0iTTE5IDExaC04djZoOHYtNnptNCA4VjQuOThDMjMgMy44OCAyMi4xIDMgMjEgM0gzYy0xLjEgMC0yIC44OC0yIDEuOThWMTljMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnptLTIgLjAySDNWNC45N2gxOHYxNC4wNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJwbGF5LWZvci13b3JrIj48cGF0aCBkPSJNMTEgNXY1LjU5SDcuNWw0LjUgNC41IDQuNS00LjVIMTNWNWgtMnptLTUgOWMwIDMuMzEgMi42OSA2IDYgNnM2LTIuNjkgNi02aC0yYzAgMi4yMS0xLjc5IDQtNCA0cy00LTEuNzktNC00SDZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icG9seW1lciI+PHBhdGggZD0iTTE5IDRoLTRMNy4xMSAxNi42MyA0LjUgMTIgOSA0SDVMLjUgMTIgNSAyMGg0bDcuODktMTIuNjNMMTkuNSAxMiAxNSAyMGg0bDQuNS04eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InBvd2VyLXNldHRpbmdzLW5ldyI+PHBhdGggZD0iTTEzIDNoLTJ2MTBoMlYzem00LjgzIDIuMTdsLTEuNDIgMS40MkMxNy45OSA3Ljg2IDE5IDkuODEgMTkgMTJjMCAzLjg3LTMuMTMgNy03IDdzLTctMy4xMy03LTdjMC0yLjE5IDEuMDEtNC4xNCAyLjU4LTUuNDJMNi4xNyA1LjE3QzQuMjMgNi44MiAzIDkuMjYgMyAxMmMwIDQuOTcgNC4wMyA5IDkgOXM5LTQuMDMgOS05YzAtMi43NC0xLjIzLTUuMTgtMy4xNy02LjgzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InByZWduYW50LXdvbWFuIj48cGF0aCBkPSJNOSA0YzAtMS4xMS44OS0yIDItMnMyIC44OSAyIDItLjg5IDItMiAyLTItLjg5LTItMnptNyA5Yy0uMDEtMS4zNC0uODMtMi41MS0yLTMgMC0xLjY2LTEuMzQtMy0zLTNzLTMgMS4zNC0zIDN2N2gydjVoM3YtNWgzdi00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InByaW50Ij48cGF0aCBkPSJNMTkgOEg1Yy0xLjY2IDAtMyAxLjM0LTMgM3Y2aDR2NGgxMnYtNGg0di02YzAtMS42Ni0xLjM0LTMtMy0zem0tMyAxMUg4di01aDh2NXptMy03Yy0uNTUgMC0xLS40NS0xLTFzLjQ1LTEgMS0xIDEgLjQ1IDEgMS0uNDUgMS0xIDF6bS0xLTlINnY0aDEyVjN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icXVlcnktYnVpbGRlciI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHptLjUtMTNIMTF2Nmw1LjI1IDMuMTUuNzUtMS4yMy00LjUtMi42N3oiPjwvcGF0aD48L2c+CjxnIGlkPSJxdWVzdGlvbi1hbnN3ZXIiPjxwYXRoIGQ9Ik0yMSA2aC0ydjlINnYyYzAgLjU1LjQ1IDEgMSAxaDExbDQgNFY3YzAtLjU1LS40NS0xLTEtMXptLTQgNlYzYzAtLjU1LS40NS0xLTEtMUgzYy0uNTUgMC0xIC40NS0xIDF2MTRsNC00aDEwYy41NSAwIDEtLjQ1IDEtMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyYWRpby1idXR0b24tY2hlY2tlZCI+PHBhdGggZD0iTTEyIDdjLTIuNzYgMC01IDIuMjQtNSA1czIuMjQgNSA1IDUgNS0yLjI0IDUtNS0yLjI0LTUtNS01em0wLTVDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQiPjxwYXRoIGQ9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWNlaXB0Ij48cGF0aCBkPSJNMTggMTdINnYtMmgxMnYyem0wLTRINnYtMmgxMnYyem0wLTRINlY3aDEydjJ6TTMgMjJsMS41LTEuNUw2IDIybDEuNS0xLjVMOSAyMmwxLjUtMS41TDEyIDIybDEuNS0xLjVMMTUgMjJsMS41LTEuNUwxOCAyMmwxLjUtMS41TDIxIDIyVjJsLTEuNSAxLjVMMTggMmwtMS41IDEuNUwxNSAybC0xLjUgMS41TDEyIDJsLTEuNSAxLjVMOSAyIDcuNSAzLjUgNiAyIDQuNSAzLjUgMyAydjIweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlY29yZC12b2ljZS1vdmVyIj48Y2lyY2xlIGN4PSI5IiBjeT0iOSIgcj0iNCI+PC9jaXJjbGU+PHBhdGggZD0iTTkgMTVjLTIuNjcgMC04IDEuMzQtOCA0djJoMTZ2LTJjMC0yLjY2LTUuMzMtNC04LTR6bTcuNzYtOS42NGwtMS42OCAxLjY5Yy44NCAxLjE4Ljg0IDIuNzEgMCAzLjg5bDEuNjggMS42OWMyLjAyLTIuMDIgMi4wMi01LjA3IDAtNy4yN3pNMjAuMDcgMmwtMS42MyAxLjYzYzIuNzcgMy4wMiAyLjc3IDcuNTYgMCAxMC43NEwyMC4wNyAxNmMzLjktMy44OSAzLjkxLTkuOTUgMC0xNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWRlZW0iPjxwYXRoIGQ9Ik0yMCA2aC0yLjE4Yy4xMS0uMzEuMTgtLjY1LjE4LTEgMC0xLjY2LTEuMzQtMy0zLTMtMS4wNSAwLTEuOTYuNTQtMi41IDEuMzVsLS41LjY3LS41LS42OEMxMC45NiAyLjU0IDEwLjA1IDIgOSAyIDcuMzQgMiA2IDMuMzQgNiA1YzAgLjM1LjA3LjY5LjE4IDFINGMtMS4xMSAwLTEuOTkuODktMS45OSAyTDIgMTljMCAxLjExLjg5IDIgMiAyaDE2YzEuMTEgMCAyLS44OSAyLTJWOGMwLTEuMTEtLjg5LTItMi0yem0tNS0yYy41NSAwIDEgLjQ1IDEgMXMtLjQ1IDEtMSAxLTEtLjQ1LTEtMSAuNDUtMSAxLTF6TTkgNGMuNTUgMCAxIC40NSAxIDFzLS40NSAxLTEgMS0xLS40NS0xLTEgLjQ1LTEgMS0xem0xMSAxNUg0di0yaDE2djJ6bTAtNUg0VjhoNS4wOEw3IDEwLjgzIDguNjIgMTIgMTEgOC43NmwxLTEuMzYgMSAxLjM2TDE1LjM4IDEyIDE3IDEwLjgzIDE0LjkyIDhIMjB2NnoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZWRvIj48cGF0aCBkPSJNMTguNCAxMC42QzE2LjU1IDguOTkgMTQuMTUgOCAxMS41IDhjLTQuNjUgMC04LjU4IDMuMDMtOS45NiA3LjIyTDMuOSAxNmMxLjA1LTMuMTkgNC4wNS01LjUgNy42LTUuNSAxLjk1IDAgMy43My43MiA1LjEyIDEuODhMMTMgMTZoOVY3bC0zLjYgMy42eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlZnJlc2giPjxwYXRoIGQ9Ik0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJyZW1vdmUiPjxwYXRoIGQ9Ik0xOSAxM0g1di0yaDE0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVtb3ZlLWNpcmNsZSI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTUgMTFIN3YtMmgxMHYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1jaXJjbGUtb3V0bGluZSI+PHBhdGggZD0iTTcgMTF2MmgxMHYtMkg3em01LTlDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlbW92ZS1zaG9wcGluZy1jYXJ0Ij48cGF0aCBkPSJNMjIuNzMgMjIuNzNMMi43NyAyLjc3IDIgMmwtLjczLS43M0wwIDIuNTRsNC4zOSA0LjM5IDIuMjEgNC42Ni0xLjM1IDIuNDVjLS4xNi4yOC0uMjUuNjEtLjI1Ljk2IDAgMS4xLjkgMiAyIDJoNy40NmwxLjM4IDEuMzhjLS41LjM2LS44My45NS0uODMgMS42MiAwIDEuMS44OSAyIDEuOTkgMiAuNjcgMCAxLjI2LS4zMyAxLjYyLS44NEwyMS40NiAyNGwxLjI3LTEuMjd6TTcuNDIgMTVjLS4xNCAwLS4yNS0uMTEtLjI1LS4yNWwuMDMtLjEyLjktMS42M2gyLjM2bDIgMkg3LjQyem04LjEzLTJjLjc1IDAgMS40MS0uNDEgMS43NS0xLjAzbDMuNTgtNi40OWMuMDgtLjE0LjEyLS4zMS4xMi0uNDggMC0uNTUtLjQ1LTEtMS0xSDYuNTRsOS4wMSA5ek03IDE4Yy0xLjEgMC0xLjk5LjktMS45OSAyUzUuOSAyMiA3IDIyczItLjkgMi0yLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlb3JkZXIiPjxwYXRoIGQ9Ik0zIDE1aDE4di0ySDN2MnptMCA0aDE4di0ySDN2MnptMC04aDE4VjlIM3Yyem0wLTZ2MmgxOFY1SDN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwbHkiPjxwYXRoIGQ9Ik0xMCA5VjVsLTcgNyA3IDd2LTQuMWM1IDAgOC41IDEuNiAxMSA1LjEtMS01LTQtMTAtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVwbHktYWxsIj48cGF0aCBkPSJNNyA4VjVsLTcgNyA3IDd2LTNsLTQtNCA0LTR6bTYgMVY1bC03IDcgNyA3di00LjFjNSAwIDguNSAxLjYgMTEgNS4xLTEtNS00LTEwLTExLTExeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcG9ydCI+PHBhdGggZD0iTTE1LjczIDNIOC4yN0wzIDguMjd2Ny40Nkw4LjI3IDIxaDcuNDZMMjEgMTUuNzNWOC4yN0wxNS43MyAzek0xMiAxNy4zYy0uNzIgMC0xLjMtLjU4LTEuMy0xLjMgMC0uNzIuNTgtMS4zIDEuMy0xLjMuNzIgMCAxLjMuNTggMS4zIDEuMyAwIC43Mi0uNTggMS4zLTEuMyAxLjN6bTEtNC4zaC0yVjdoMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlcG9ydC1wcm9ibGVtIj48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJlc3RvcmUiPjxwYXRoIGQ9Ik0xMyAzYy00Ljk3IDAtOSA0LjAzLTkgOUgxbDMuODkgMy44OS4wNy4xNEw5IDEySDZjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjkzIDAtMy42OC0uNzktNC45NC0yLjA2bC0xLjQyIDEuNDJDOC4yNyAxOS45OSAxMC41MSAyMSAxMyAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXptLTEgNXY1bDQuMjggMi41NC43Mi0xLjIxLTMuNS0yLjA4VjhIMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icmVzdG9yZS1wYWdlIj48cGF0aCBkPSJNMTQgMkg2Yy0xLjEgMC0xLjk5LjktMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMi0uOSAyLTJWOGwtNi02em0tMiAxNmMtMi4wNSAwLTMuODEtMS4yNC00LjU4LTNoMS43MWMuNjMuOSAxLjY4IDEuNSAyLjg3IDEuNSAxLjkzIDAgMy41LTEuNTcgMy41LTMuNVMxMy45MyA5LjUgMTIgOS41Yy0xLjM1IDAtMi41Mi43OC0zLjEgMS45bDEuNiAxLjZoLTRWOWwxLjMgMS4zQzguNjkgOC45MiAxMC4yMyA4IDEyIDhjMi43NiAwIDUgMi4yNCA1IDVzLTIuMjQgNS01IDV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm9vbSI+PHBhdGggZD0iTTEyIDJDOC4xMyAyIDUgNS4xMyA1IDljMCA1LjI1IDcgMTMgNyAxM3M3LTcuNzUgNy0xM2MwLTMuODctMy4xMy03LTctN3ptMCA5LjVjLTEuMzggMC0yLjUtMS4xMi0yLjUtMi41czEuMTItMi41IDIuNS0yLjUgMi41IDEuMTIgMi41IDIuNS0xLjEyIDIuNS0yLjUgMi41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InJvdW5kZWQtY29ybmVyIj48cGF0aCBkPSJNMTkgMTloMnYyaC0ydi0yem0wLTJoMnYtMmgtMnYyek0zIDEzaDJ2LTJIM3Yyem0wIDRoMnYtMkgzdjJ6bTAtOGgyVjdIM3Yyem0wLTRoMlYzSDN2MnptNCAwaDJWM0g3djJ6bTggMTZoMnYtMmgtMnYyem0tNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptLTggMGgydi0ySDd2MnptLTQgMGgydi0ySDN2MnpNMjEgOGMwLTIuNzYtMi4yNC01LTUtNWgtNXYyaDVjMS42NSAwIDMgMS4zNSAzIDN2NWgyVjh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0icm93aW5nIj48cGF0aCBkPSJNOC41IDE0LjVMNCAxOWwxLjUgMS41TDkgMTdoMmwtMi41LTIuNXpNMTUgMWMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTYgMjAuMDFMMTggMjRsLTIuOTktMy4wMVYxOS41bC03LjEtNy4wOWMtLjMxLjA1LS42MS4wNy0uOTEuMDd2LTIuMTZjMS42Ni4wMyAzLjYxLS44NyA0LjY3LTIuMDRsMS40LTEuNTVjLjE5LS4yMS40My0uMzguNjktLjUuMjktLjE0LjYyLS4yMy45Ni0uMjNoLjAzQzE1Ljk5IDYuMDEgMTcgNy4wMiAxNyA4LjI2djUuNzVjMCAuODQtLjM1IDEuNjEtLjkyIDIuMTZsLTMuNTgtMy41OHYtMi4yN2MtLjYzLjUyLTEuNDMgMS4wMi0yLjI5IDEuMzlMMTYuNSAxOEgxOGwzIDMuMDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2F2ZSI+PHBhdGggZD0iTTE3IDNINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjdsLTQtNHptLTUgMTZjLTEuNjYgMC0zLTEuMzQtMy0zczEuMzQtMyAzLTMgMyAxLjM0IDMgMy0xLjM0IDMtMyAzem0zLTEwSDVWNWgxMHY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNjaGVkdWxlIj48cGF0aCBkPSJNMTEuOTkgMkM2LjQ3IDIgMiA2LjQ4IDIgMTJzNC40NyAxMCA5Ljk5IDEwQzE3LjUyIDIyIDIyIDE3LjUyIDIyIDEyUzE3LjUyIDIgMTEuOTkgMnpNMTIgMjBjLTQuNDIgMC04LTMuNTgtOC04czMuNTgtOCA4LTggOCAzLjU4IDggOC0zLjU4IDgtOCA4em0uNS0xM0gxMXY2bDUuMjUgMy4xNS43NS0xLjIzLTQuNS0yLjY3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlYXJjaCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2VsZWN0LWFsbCI+PHBhdGggZD0iTTMgNWgyVjNjLTEuMSAwLTIgLjktMiAyem0wIDhoMnYtMkgzdjJ6bTQgOGgydi0ySDd2MnpNMyA5aDJWN0gzdjJ6bTEwLTZoLTJ2MmgyVjN6bTYgMHYyaDJjMC0xLjEtLjktMi0yLTJ6TTUgMjF2LTJIM2MwIDEuMS45IDIgMiAyem0tMi00aDJ2LTJIM3Yyek05IDNIN3YyaDJWM3ptMiAxOGgydi0yaC0ydjJ6bTgtOGgydi0yaC0ydjJ6bTAgOGMxLjEgMCAyLS45IDItMmgtMnYyem0wLTEyaDJWN2gtMnYyem0wIDhoMnYtMmgtMnYyem0tNCA0aDJ2LTJoLTJ2MnptMC0xNmgyVjNoLTJ2MnpNNyAxN2gxMFY3SDd2MTB6bTItOGg2djZIOVY5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNlbmQiPjxwYXRoIGQ9Ik0yLjAxIDIxTDIzIDEyIDIuMDEgMyAyIDEwbDE1IDItMTUgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncyI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtYXBwbGljYXRpb25zIj48cGF0aCBkPSJNMTIgMTBjLTEuMSAwLTIgLjktMiAycy45IDIgMiAyIDItLjkgMi0yLS45LTItMi0yem03LTdINWMtMS4xMSAwLTIgLjktMiAydjE0YzAgMS4xLjg5IDIgMiAyaDE0YzEuMTEgMCAyLS45IDItMlY1YzAtMS4xLS44OS0yLTItMnptLTEuNzUgOWMwIC4yMy0uMDIuNDYtLjA1LjY4bDEuNDggMS4xNmMuMTMuMTEuMTcuMy4wOC40NWwtMS40IDIuNDJjLS4wOS4xNS0uMjcuMjEtLjQzLjE1bC0xLjc0LS43Yy0uMzYuMjgtLjc2LjUxLTEuMTguNjlsLS4yNiAxLjg1Yy0uMDMuMTctLjE4LjMtLjM1LjNoLTIuOGMtLjE3IDAtLjMyLS4xMy0uMzUtLjI5bC0uMjYtMS44NWMtLjQzLS4xOC0uODItLjQxLTEuMTgtLjY5bC0xLjc0LjdjLS4xNi4wNi0uMzQgMC0uNDMtLjE1bC0xLjQtMi40MmMtLjA5LS4xNS0uMDUtLjM0LjA4LS40NWwxLjQ4LTEuMTZjLS4wMy0uMjMtLjA1LS40Ni0uMDUtLjY5IDAtLjIzLjAyLS40Ni4wNS0uNjhsLTEuNDgtMS4xNmMtLjEzLS4xMS0uMTctLjMtLjA4LS40NWwxLjQtMi40MmMuMDktLjE1LjI3LS4yMS40My0uMTVsMS43NC43Yy4zNi0uMjguNzYtLjUxIDEuMTgtLjY5bC4yNi0xLjg1Yy4wMy0uMTcuMTgtLjMuMzUtLjNoMi44Yy4xNyAwIC4zMi4xMy4zNS4yOWwuMjYgMS44NWMuNDMuMTguODIuNDEgMS4xOC42OWwxLjc0LS43Yy4xNi0uMDYuMzQgMCAuNDMuMTVsMS40IDIuNDJjLjA5LjE1LjA1LjM0LS4wOC40NWwtMS40OCAxLjE2Yy4wMy4yMy4wNS40Ni4wNS42OXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1iYWNrdXAtcmVzdG9yZSI+PHBhdGggZD0iTTE0IDEyYzAtMS4xLS45LTItMi0ycy0yIC45LTIgMiAuOSAyIDIgMiAyLS45IDItMnptLTItOWMtNC45NyAwLTkgNC4wMy05IDlIMGw0IDQgNC00SDVjMC0zLjg3IDMuMTMtNyA3LTdzNyAzLjEzIDcgNy0zLjEzIDctNyA3Yy0xLjUxIDAtMi45MS0uNDktNC4wNi0xLjNsLTEuNDIgMS40NEM4LjA0IDIwLjMgOS45NCAyMSAxMiAyMWM0Ljk3IDAgOS00LjAzIDktOXMtNC4wMy05LTktOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1ibHVldG9vdGgiPjxwYXRoIGQ9Ik0xMSAyNGgydi0yaC0ydjJ6bS00IDBoMnYtMkg3djJ6bTggMGgydi0yaC0ydjJ6bTIuNzEtMTguMjlMMTIgMGgtMXY3LjU5TDYuNDEgMyA1IDQuNDEgMTAuNTkgMTAgNSAxNS41OSA2LjQxIDE3IDExIDEyLjQxVjIwaDFsNS43MS01LjcxLTQuMy00LjI5IDQuMy00LjI5ek0xMyAzLjgzbDEuODggMS44OEwxMyA3LjU5VjMuODN6bTEuODggMTAuNDZMMTMgMTYuMTd2LTMuNzZsMS44OCAxLjg4eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWJyaWdodG5lc3MiPjxwYXRoIGQ9Ik0yMSAzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6TTggMTZoMi41bDEuNSAxLjUgMS41LTEuNUgxNnYtMi41bDEuNS0xLjUtMS41LTEuNVY4aC0yLjVMMTIgNi41IDEwLjUgOEg4djIuNUw2LjUgMTIgOCAxMy41VjE2em00LTdjMS42NiAwIDMgMS4zNCAzIDNzLTEuMzQgMy0zIDNWOXoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1jZWxsIj48cGF0aCBkPSJNNyAyNGgydi0ySDd2MnptNCAwaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnpNMTYgLjAxTDggMEM2LjkgMCA2IC45IDYgMnYxNmMwIDEuMS45IDIgMiAyaDhjMS4xIDAgMi0uOSAyLTJWMmMwLTEuMS0uOS0xLjk5LTItMS45OXpNMTYgMTZIOFY0aDh2MTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtZXRoZXJuZXQiPjxwYXRoIGQ9Ik03Ljc3IDYuNzZMNi4yMyA1LjQ4LjgyIDEybDUuNDEgNi41MiAxLjU0LTEuMjhMMy40MiAxMmw0LjM1LTUuMjR6TTcgMTNoMnYtMkg3djJ6bTEwLTJoLTJ2Mmgydi0yem0tNiAyaDJ2LTJoLTJ2MnptNi43Ny03LjUybC0xLjU0IDEuMjhMMjAuNTggMTJsLTQuMzUgNS4yNCAxLjU0IDEuMjhMMjMuMTggMTJsLTUuNDEtNi41MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1hbnRlbm5hIj48cGF0aCBkPSJNMTIgNWMtMy44NyAwLTcgMy4xMy03IDdoMmMwLTIuNzYgMi4yNC01IDUtNXM1IDIuMjQgNSA1aDJjMC0zLjg3LTMuMTMtNy03LTd6bTEgOS4yOWMuODgtLjM5IDEuNS0xLjI2IDEuNS0yLjI5IDAtMS4zOC0xLjEyLTIuNS0yLjUtMi41UzkuNSAxMC42MiA5LjUgMTJjMCAxLjAyLjYyIDEuOSAxLjUgMi4yOXYzLjNMNy41OSAyMSA5IDIyLjQxbDMtMyAzIDNMMTYuNDEgMjEgMTMgMTcuNTl2LTMuM3pNMTIgMUM1LjkzIDEgMSA1LjkzIDEgMTJoMmMwLTQuOTcgNC4wMy05IDktOXM5IDQuMDMgOSA5aDJjMC02LjA3LTQuOTMtMTEtMTEtMTF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtY29tcG9uZW50Ij48cGF0aCBkPSJNNSAyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRIMXY2aDZWNkg1VjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJIOXYyem0tOCAwYzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOEM2LjE2IDE4LjQgNyAxNy4zIDcgMTZ2LTJIMXYyek0yMSA2VjJjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NGgtMnY2aDZWNmgtMnptLTgtNGMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDl2Nmg2VjZoLTJWMnptNCAxNGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThjMS4xNi0uNDEgMi0xLjUxIDItMi44MnYtMmgtNnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNldHRpbmdzLWlucHV0LWNvbXBvc2l0ZSI+PHBhdGggZD0iTTUgMmMwLS41NS0uNDUtMS0xLTFzLTEgLjQ1LTEgMXY0SDF2Nmg2VjZINVYyem00IDE0YzAgMS4zLjg0IDIuNCAyIDIuODJWMjNoMnYtNC4xOGMxLjE2LS40MSAyLTEuNTEgMi0yLjgydi0ySDl2MnptLTggMGMwIDEuMy44NCAyLjQgMiAyLjgyVjIzaDJ2LTQuMThDNi4xNiAxOC40IDcgMTcuMyA3IDE2di0ySDF2MnpNMjEgNlYyYzAtLjU1LS40NS0xLTEtMXMtMSAuNDUtMSAxdjRoLTJ2Nmg2VjZoLTJ6bS04LTRjMC0uNTUtLjQ1LTEtMS0xcy0xIC40NS0xIDF2NEg5djZoNlY2aC0yVjJ6bTQgMTRjMCAxLjMuODQgMi40IDIgMi44MlYyM2gydi00LjE4YzEuMTYtLjQxIDItMS41MSAyLTIuODJ2LTJoLTZ2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1pbnB1dC1oZG1pIj48cGF0aCBkPSJNMTggN1Y0YzAtMS4xLS45LTItMi0ySDhjLTEuMSAwLTIgLjktMiAydjNINXY2bDMgNnYzaDh2LTNsMy02VjdoLTF6TTggNGg4djNoLTJWNWgtMXYyaC0yVjVoLTF2Mkg4VjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtaW5wdXQtc3ZpZGVvIj48cGF0aCBkPSJNOCAxMS41YzAtLjgzLS42Ny0xLjUtMS41LTEuNVM1IDEwLjY3IDUgMTEuNSA1LjY3IDEzIDYuNSAxMyA4IDEyLjMzIDggMTEuNXptNy01YzAtLjgzLS42Ny0xLjUtMS41LTEuNWgtM0M5LjY3IDUgOSA1LjY3IDkgNi41UzkuNjcgOCAxMC41IDhoM2MuODMgMCAxLjUtLjY3IDEuNS0xLjV6TTguNSAxNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVTNy42NyAxOCA4LjUgMThzMS41LS42NyAxLjUtMS41UzkuMzMgMTUgOC41IDE1ek0xMiAxQzUuOTMgMSAxIDUuOTMgMSAxMnM0LjkzIDExIDExIDExIDExLTQuOTMgMTEtMTFTMTguMDcgMSAxMiAxem0wIDIwYy00Ljk2IDAtOS00LjA0LTktOXM0LjA0LTkgOS05IDkgNC4wNCA5IDktNC4wNCA5LTkgOXptNS41LTExYy0uODMgMC0xLjUuNjctMS41IDEuNXMuNjcgMS41IDEuNSAxLjUgMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXptLTIgNWMtLjgzIDAtMS41LjY3LTEuNSAxLjVzLjY3IDEuNSAxLjUgMS41IDEuNS0uNjcgMS41LTEuNS0uNjctMS41LTEuNS0xLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3Mtb3ZlcnNjYW4iPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcGhvbmUiPjxwYXRoIGQ9Ik0xMyA5aC0ydjJoMlY5em00IDBoLTJ2MmgyVjl6bTMgNi41Yy0xLjI1IDAtMi40NS0uMi0zLjU3LS41Ny0uMzUtLjExLS43NC0uMDMtMS4wMi4yNGwtMi4yIDIuMmMtMi44My0xLjQ0LTUuMTUtMy43NS02LjU5LTYuNThsMi4yLTIuMjFjLjI4LS4yNy4zNi0uNjYuMjUtMS4wMUM4LjcgNi40NSA4LjUgNS4yNSA4LjUgNGMwLS41NS0uNDUtMS0xLTFINGMtLjU1IDAtMSAuNDUtMSAxIDAgOS4zOSA3LjYxIDE3IDE3IDE3IC41NSAwIDEtLjQ1IDEtMXYtMy41YzAtLjU1LS40NS0xLTEtMXpNMTkgOXYyaDJWOWgtMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy1wb3dlciI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTQgMGgydi0yaC0ydjJ6bTItMjJoLTJ2MTBoMlYyem0zLjU2IDIuNDRsLTEuNDUgMS40NUMxNi44NCA2Ljk0IDE4IDguODMgMTggMTFjMCAzLjMxLTIuNjkgNi02IDZzLTYtMi42OS02LTZjMC0yLjE3IDEuMTYtNC4wNiAyLjg4LTUuMTJMNy40NCA0LjQ0QzUuMzYgNS44OCA0IDguMjggNCAxMWMwIDQuNDIgMy41OCA4IDggOHM4LTMuNTggOC04YzAtMi43Mi0xLjM2LTUuMTItMy40NC02LjU2ek0xNSAyNGgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2V0dGluZ3MtcmVtb3RlIj48cGF0aCBkPSJNMTUgOUg5Yy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoNmMuNTUgMCAxLS40NSAxLTFWMTBjMC0uNTUtLjQ1LTEtMS0xem0tMyA2Yy0xLjEgMC0yLS45LTItMnMuOS0yIDItMiAyIC45IDIgMi0uOSAyLTIgMnpNNy4wNSA2LjA1bDEuNDEgMS40MUM5LjM3IDYuNTYgMTAuNjIgNiAxMiA2czIuNjMuNTYgMy41NCAxLjQ2bDEuNDEtMS40MUMxNS42OCA0Ljc4IDEzLjkzIDQgMTIgNHMtMy42OC43OC00Ljk1IDIuMDV6TTEyIDBDOC45NiAwIDYuMjEgMS4yMyA0LjIyIDMuMjJsMS40MSAxLjQxQzcuMjYgMy4wMSA5LjUxIDIgMTIgMnM0Ljc0IDEuMDEgNi4zNiAyLjY0bDEuNDEtMS40MUMxNy43OSAxLjIzIDE1LjA0IDAgMTIgMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzZXR0aW5ncy12b2ljZSI+PHBhdGggZD0iTTcgMjRoMnYtMkg3djJ6bTUtMTFjMS42NiAwIDIuOTktMS4zNCAyLjk5LTNMMTUgNGMwLTEuNjYtMS4zNC0zLTMtM1M5IDIuMzQgOSA0djZjMCAxLjY2IDEuMzQgMyAzIDN6bS0xIDExaDJ2LTJoLTJ2MnptNCAwaDJ2LTJoLTJ2MnptNC0xNGgtMS43YzAgMy0yLjU0IDUuMS01LjMgNS4xUzYuNyAxMyA2LjcgMTBINWMwIDMuNDEgMi43MiA2LjIzIDYgNi43MlYyMGgydi0zLjI4YzMuMjgtLjQ5IDYtMy4zMSA2LTYuNzJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcCI+PHBhdGggZD0iTTE2IDZWNGMwLTEuMTEtLjg5LTItMi0yaC00Yy0xLjExIDAtMiAuODktMiAydjJIMnYxM2MwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY2aC02em0tNi0yaDR2MmgtNFY0ek05IDE4VjlsNy41IDRMOSAxOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wLXR3byI+PHBhdGggZD0iTTMgOUgxdjExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0ySDNWOXptMTUtNFYzYzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2Mkg1djExYzAgMS4xMS44OSAyIDIgMmgxNGMxLjExIDAgMi0uODkgMi0yVjVoLTV6bS02LTJoNHYyaC00VjN6bTAgMTJWOGw1LjUgMy01LjUgNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzaG9wcGluZy1iYXNrZXQiPjxwYXRoIGQ9Ik0xNy4yMSA5bC00LjM4LTYuNTZjLS4xOS0uMjgtLjUxLS40Mi0uODMtLjQyLS4zMiAwLS42NC4xNC0uODMuNDNMNi43OSA5SDJjLS41NSAwLTEgLjQ1LTEgMSAwIC4wOS4wMS4xOC4wNC4yN2wyLjU0IDkuMjdjLjIzLjg0IDEgMS40NiAxLjkyIDEuNDZoMTNjLjkyIDAgMS42OS0uNjIgMS45My0xLjQ2bDIuNTQtOS4yN0wyMyAxMGMwLS41NS0uNDUtMS0xLTFoLTQuNzl6TTkgOWwzLTQuNEwxNSA5SDl6bTMgOGMtMS4xIDAtMi0uOS0yLTJzLjktMiAyLTIgMiAuOSAyIDItLjkgMi0yIDJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic2hvcHBpbmctY2FydCI+PHBhdGggZD0iTTcgMThjLTEuMSAwLTEuOTkuOS0xLjk5IDJTNS45IDIyIDcgMjJzMi0uOSAyLTItLjktMi0yLTJ6TTEgMnYyaDJsMy42IDcuNTktMS4zNSAyLjQ1Yy0uMTYuMjgtLjI1LjYxLS4yNS45NiAwIDEuMS45IDIgMiAyaDEydi0ySDcuNDJjLS4xNCAwLS4yNS0uMTEtLjI1LS4yNWwuMDMtLjEyLjktMS42M2g3LjQ1Yy43NSAwIDEuNDEtLjQxIDEuNzUtMS4wM2wzLjU4LTYuNDljLjA4LS4xNC4xMi0uMzEuMTItLjQ4IDAtLjU1LS40NS0xLTEtMUg1LjIxbC0uOTQtMkgxem0xNiAxNmMtMS4xIDAtMS45OS45LTEuOTkgMnMuODkgMiAxLjk5IDIgMi0uOSAyLTItLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic29ydCI+PHBhdGggZD0iTTMgMThoNnYtMkgzdjJ6TTMgNnYyaDE4VjZIM3ptMCA3aDEydi0ySDN2MnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzcGVha2VyLW5vdGVzIj48cGF0aCBkPSJNMjAgMkg0Yy0xLjEgMC0xLjk5LjktMS45OSAyTDIgMjJsNC00aDE0YzEuMSAwIDItLjkgMi0yVjRjMC0xLjEtLjktMi0yLTJ6TTggMTRINnYtMmgydjJ6bTAtM0g2VjloMnYyem0wLTNINlY2aDJ2MnptNyA2aC01di0yaDV2MnptMy0zaC04VjloOHYyem0wLTNoLThWNmg4djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3BlYWtlci1ub3Rlcy1vZmYiPjxwYXRoIGQ9Ik0xMC41NCAxMWwtLjU0LS41NEw3LjU0IDggNiA2LjQ2IDIuMzggMi44NCAxLjI3IDEuNzMgMCAzbDIuMDEgMi4wMUwyIDIybDQtNGg5bDUuNzMgNS43M0wyMiAyMi40NiAxNy41NCAxOGwtNy03ek04IDE0SDZ2LTJoMnYyem0tMi0zVjlsMiAySDZ6bTE0LTlINC4wOEwxMCA3LjkyVjZoOHYyaC03LjkybDEgMUgxOHYyaC00LjkybDYuOTkgNi45OUMyMS4xNCAxNy45NSAyMiAxNy4wOCAyMiAxNlY0YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InNwZWxsY2hlY2siPjxwYXRoIGQ9Ik0xMi40NSAxNmgyLjA5TDkuNDMgM0g3LjU3TDIuNDYgMTZoMi4wOWwxLjEyLTNoNS42NGwxLjE0IDN6bS02LjAyLTVMOC41IDUuNDggMTAuNTcgMTFINi40M3ptMTUuMTYuNTlsLTguMDkgOC4wOUw5LjgzIDE2bC0xLjQxIDEuNDEgNS4wOSA1LjA5TDIzIDEzbC0xLjQxLTEuNDF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RhciI+PHBhdGggZD0iTTEyIDE3LjI3TDE4LjE4IDIxbC0xLjY0LTcuMDNMMjIgOS4yNGwtNy4xOS0uNjFMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN0YXItYm9yZGVyIj48cGF0aCBkPSJNMjIgOS4yNGwtNy4xOS0uNjJMMTIgMiA5LjE5IDguNjMgMiA5LjI0bDUuNDYgNC43M0w1LjgyIDIxIDEyIDE3LjI3IDE4LjE4IDIxbC0xLjYzLTcuMDNMMjIgOS4yNHpNMTIgMTUuNGwtMy43NiAyLjI3IDEtNC4yOC0zLjMyLTIuODggNC4zOC0uMzhMMTIgNi4xbDEuNzEgNC4wNCA0LjM4LjM4LTMuMzIgMi44OCAxIDQuMjhMMTIgMTUuNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdGFyLWhhbGYiPjxwYXRoIGQ9Ik0yMiA5LjI0bC03LjE5LS42MkwxMiAyIDkuMTkgOC42MyAyIDkuMjRsNS40NiA0LjczTDUuODIgMjEgMTIgMTcuMjcgMTguMTggMjFsLTEuNjMtNy4wM0wyMiA5LjI0ek0xMiAxNS40VjYuMWwxLjcxIDQuMDQgNC4zOC4zOC0zLjMyIDIuODggMSA0LjI4TDEyIDE1LjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3RhcnMiPjxwYXRoIGQ9Ik0xMS45OSAyQzYuNDcgMiAyIDYuNDggMiAxMnM0LjQ3IDEwIDkuOTkgMTBDMTcuNTIgMjIgMjIgMTcuNTIgMjIgMTJTMTcuNTIgMiAxMS45OSAyem00LjI0IDE2TDEyIDE1LjQ1IDcuNzcgMThsMS4xMi00LjgxLTMuNzMtMy4yMyA0LjkyLS40MkwxMiA1bDEuOTIgNC41MyA0LjkyLjQyLTMuNzMgMy4yM0wxNi4yMyAxOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdG9yZSI+PHBhdGggZD0iTTIwIDRINHYyaDE2VjR6bTEgMTB2LTJsLTEtNUg0bC0xIDV2MmgxdjZoMTB2LTZoNHY2aDJ2LTZoMXptLTkgNEg2di00aDZ2NHoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJkaXJlY3RvcnktYXJyb3ctbGVmdCI+PHBhdGggZD0iTTExIDlsMS40MiAxLjQyTDguODMgMTRIMThWNGgydjEySDguODNsMy41OSAzLjU4TDExIDIxbC02LTYgNi02eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN1YmRpcmVjdG9yeS1hcnJvdy1yaWdodCI+PHBhdGggZD0iTTE5IDE1bC02IDYtMS40Mi0xLjQyTDE1LjE3IDE2SDRWNGgydjEwaDkuMTdsLTMuNTktMy41OEwxMyA5bDYgNnoiPjwvcGF0aD48L2c+CjxnIGlkPSJzdWJqZWN0Ij48cGF0aCBkPSJNMTQgMTdINHYyaDEwdi0yem02LThINHYyaDE2Vjl6TTQgMTVoMTZ2LTJINHYyek00IDV2MmgxNlY1SDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3VwZXJ2aXNvci1hY2NvdW50Ij48cGF0aCBkPSJNMTYuNSAxMmMxLjM4IDAgMi40OS0xLjEyIDIuNDktMi41UzE3Ljg4IDcgMTYuNSA3QzE1LjEyIDcgMTQgOC4xMiAxNCA5LjVzMS4xMiAyLjUgMi41IDIuNXpNOSAxMWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM1MxMC42NiA1IDkgNUM3LjM0IDUgNiA2LjM0IDYgOHMxLjM0IDMgMyAzem03LjUgM2MtMS44MyAwLTUuNS45Mi01LjUgMi43NVYxOWgxMXYtMi4yNWMwLTEuODMtMy42Ny0yLjc1LTUuNS0yLjc1ek05IDEzYy0yLjMzIDAtNyAxLjE3LTcgMy41VjE5aDd2LTIuMjVjMC0uODUuMzMtMi4zNCAyLjM3LTMuNDdDMTAuNSAxMy4xIDkuNjYgMTMgOSAxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJzd2FwLWhvcml6Ij48cGF0aCBkPSJNNi45OSAxMUwzIDE1bDMuOTkgNHYtM0gxNHYtMkg2Ljk5di0zek0yMSA5bC0zLjk5LTR2M0gxMHYyaDcuMDF2M0wyMSA5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3YXAtdmVydCI+PHBhdGggZD0iTTE2IDE3LjAxVjEwaC0ydjcuMDFoLTNMMTUgMjFsNC0zLjk5aC0zek05IDNMNSA2Ljk5aDNWMTRoMlY2Ljk5aDNMOSAzeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InN3YXAtdmVydGljYWwtY2lyY2xlIj48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnpNNi41IDlMMTAgNS41IDEzLjUgOUgxMXY0SDlWOUg2LjV6bTExIDZMMTQgMTguNSAxMC41IDE1SDEzdi00aDJ2NGgyLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ic3lzdGVtLXVwZGF0ZS1hbHQiPjxwYXRoIGQ9Ik0xMiAxNi41bDQtNGgtM3YtOWgtMnY5SDhsNCA0em05LTEzaC02djEuOTloNnYxNC4wM0gzVjUuNDloNlYzLjVIM2MtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxOGMxLjEgMCAyLS45IDItMnYtMTRjMC0xLjEtLjktMi0yLTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGFiIj48cGF0aCBkPSJNMjEgM0gzYy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZIM1Y1aDEwdjRoOHYxMHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0YWItdW5zZWxlY3RlZCI+PHBhdGggZD0iTTEgOWgyVjdIMXYyem0wIDRoMnYtMkgxdjJ6bTAtOGgyVjNjLTEuMSAwLTIgLjktMiAyem04IDE2aDJ2LTJIOXYyem0tOC00aDJ2LTJIMXYyem0yIDR2LTJIMWMwIDEuMS45IDIgMiAyek0yMSAzaC04djZoMTBWNWMwLTEuMS0uOS0yLTItMnptMCAxNGgydi0yaC0ydjJ6TTkgNWgyVjNIOXYyek01IDIxaDJ2LTJINXYyek01IDVoMlYzSDV2MnptMTYgMTZjMS4xIDAgMi0uOSAyLTJoLTJ2MnptMC04aDJ2LTJoLTJ2MnptLTggOGgydi0yaC0ydjJ6bTQgMGgydi0yaC0ydjJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGV4dC1mb3JtYXQiPjxwYXRoIGQ9Ik01IDE3djJoMTR2LTJINXptNC41LTQuMmg1bC45IDIuMmgyLjFMMTIuNzUgNGgtMS41TDYuNSAxNWgyLjFsLjktMi4yek0xMiA1Ljk4TDEzLjg3IDExaC0zLjc0TDEyIDUuOTh6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGhlYXRlcnMiPjxwYXRoIGQ9Ik0xOCAzdjJoLTJWM0g4djJINlYzSDR2MThoMnYtMmgydjJoOHYtMmgydjJoMlYzaC0yek04IDE3SDZ2LTJoMnYyem0wLTRINnYtMmgydjJ6bTAtNEg2VjdoMnYyem0xMCA4aC0ydi0yaDJ2MnptMC00aC0ydi0yaDJ2MnptMC00aC0yVjdoMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRodW1iLWRvd24iPjxwYXRoIGQ9Ik0xNSAzSDZjLS44MyAwLTEuNTQuNS0xLjg0IDEuMjJsLTMuMDIgNy4wNWMtLjA5LjIzLS4xNC40Ny0uMTQuNzN2MS45MWwuMDEuMDFMMSAxNGMwIDEuMS45IDIgMiAyaDYuMzFsLS45NSA0LjU3LS4wMy4zMmMwIC40MS4xNy43OS40NCAxLjA2TDkuODMgMjNsNi41OS02LjU5Yy4zNi0uMzYuNTgtLjg2LjU4LTEuNDFWNWMwLTEuMS0uOS0yLTItMnptNCAwdjEyaDRWM2gtNHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0aHVtYi11cCI+PHBhdGggZD0iTTEgMjFoNFY5SDF2MTJ6bTIyLTExYzAtMS4xLS45LTItMi0yaC02LjMxbC45NS00LjU3LjAzLS4zMmMwLS40MS0uMTctLjc5LS40NC0xLjA2TDE0LjE3IDEgNy41OSA3LjU5QzcuMjIgNy45NSA3IDguNDUgNyA5djEwYzAgMS4xLjkgMiAyIDJoOWMuODMgMCAxLjU0LS41IDEuODQtMS4yMmwzLjAyLTcuMDVjLjA5LS4yMy4xNC0uNDcuMTQtLjczdi0xLjkxbC0uMDEtLjAxTDIzIDEweiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRodW1icy11cC1kb3duIj48cGF0aCBkPSJNMTIgNmMwLS41NS0uNDUtMS0xLTFINS44MmwuNjYtMy4xOC4wMi0uMjNjMC0uMzEtLjEzLS41OS0uMzMtLjhMNS4zOCAwIC40NCA0Ljk0Qy4xNyA1LjIxIDAgNS41OSAwIDZ2Ni41YzAgLjgzLjY3IDEuNSAxLjUgMS41aDYuNzVjLjYyIDAgMS4xNS0uMzggMS4zOC0uOTFsMi4yNi01LjI5Yy4wNy0uMTcuMTEtLjM2LjExLS41NVY2em0xMC41IDRoLTYuNzVjLS42MiAwLTEuMTUuMzgtMS4zOC45MWwtMi4yNiA1LjI5Yy0uMDcuMTctLjExLjM2LS4xMS41NVYxOGMwIC41NS40NSAxIDEgMWg1LjE4bC0uNjYgMy4xOC0uMDIuMjRjMCAuMzEuMTMuNTkuMzMuOGwuNzkuNzggNC45NC00Ljk0Yy4yNy0uMjcuNDQtLjY1LjQ0LTEuMDZ2LTYuNWMwLS44My0uNjctMS41LTEuNS0xLjV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idGltZWxpbmUiPjxwYXRoIGQ9Ik0yMyA4YzAgMS4xLS45IDItMiAyLS4xOCAwLS4zNS0uMDItLjUxLS4wN2wtMy41NiAzLjU1Yy4wNS4xNi4wNy4zNC4wNy41MiAwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJjMC0uMTguMDItLjM2LjA3LS41MmwtMi41NS0yLjU1Yy0uMTYuMDUtLjM0LjA3LS41Mi4wN3MtLjM2LS4wMi0uNTItLjA3bC00LjU1IDQuNTZjLjA1LjE2LjA3LjMzLjA3LjUxIDAgMS4xLS45IDItMiAycy0yLS45LTItMiAuOS0yIDItMmMuMTggMCAuMzUuMDIuNTEuMDdsNC41Ni00LjU1QzguMDIgOS4zNiA4IDkuMTggOCA5YzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAuMTgtLjAyLjM2LS4wNy41MmwyLjU1IDIuNTVjLjE2LS4wNS4zNC0uMDcuNTItLjA3cy4zNi4wMi41Mi4wN2wzLjU1LTMuNTZDMTkuMDIgOC4zNSAxOSA4LjE4IDE5IDhjMC0xLjEuOS0yIDItMnMyIC45IDIgMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b2MiPjxwYXRoIGQ9Ik0zIDloMTRWN0gzdjJ6bTAgNGgxNHYtMkgzdjJ6bTAgNGgxNHYtMkgzdjJ6bTE2IDBoMnYtMmgtMnYyem0wLTEwdjJoMlY3aC0yem0wIDZoMnYtMmgtMnYyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvZGF5Ij48cGF0aCBkPSJNMTkgM2gtMVYxaC0ydjJIOFYxSDZ2Mkg1Yy0xLjExIDAtMS45OS45LTEuOTkgMkwzIDE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTZINVY4aDE0djExek03IDEwaDV2NUg3eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRvbGwiPjxwYXRoIGQ9Ik0xNSA0Yy00LjQyIDAtOCAzLjU4LTggOHMzLjU4IDggOCA4IDgtMy41OCA4LTgtMy41OC04LTgtOHptMCAxNGMtMy4zMSAwLTYtMi42OS02LTZzMi42OS02IDYtNiA2IDIuNjkgNiA2LTIuNjkgNi02IDZ6TTMgMTJjMC0yLjYxIDEuNjctNC44MyA0LTUuNjVWNC4yNkMzLjU1IDUuMTUgMSA4LjI3IDEgMTJzMi41NSA2Ljg1IDYgNy43NHYtMi4wOWMtMi4zMy0uODItNC0zLjA0LTQtNS42NXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0b3VjaC1hcHAiPjxwYXRoIGQ9Ik05IDExLjI0VjcuNUM5IDYuMTIgMTAuMTIgNSAxMS41IDVTMTQgNi4xMiAxNCA3LjV2My43NGMxLjIxLS44MSAyLTIuMTggMi0zLjc0QzE2IDUuMDEgMTMuOTkgMyAxMS41IDNTNyA1LjAxIDcgNy41YzAgMS41Ni43OSAyLjkzIDIgMy43NHptOS44NCA0LjYzbC00LjU0LTIuMjZjLS4xNy0uMDctLjM1LS4xMS0uNTQtLjExSDEzdi02YzAtLjgzLS42Ny0xLjUtMS41LTEuNVMxMCA2LjY3IDEwIDcuNXYxMC43NGwtMy40My0uNzJjLS4wOC0uMDEtLjE1LS4wMy0uMjQtLjAzLS4zMSAwLS41OS4xMy0uNzkuMzNsLS43OS44IDQuOTQgNC45NGMuMjcuMjcuNjUuNDQgMS4wNi40NGg2Ljc5Yy43NSAwIDEuMzMtLjU1IDEuNDQtMS4yOGwuNzUtNS4yN2MuMDEtLjA3LjAyLS4xNC4wMi0uMiAwLS42Mi0uMzgtMS4xNi0uOTEtMS4zOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFjay1jaGFuZ2VzIj48cGF0aCBkPSJNMTkuMDcgNC45M2wtMS40MSAxLjQxQzE5LjEgNy43OSAyMCA5Ljc5IDIwIDEyYzAgNC40Mi0zLjU4IDgtOCA4cy04LTMuNTgtOC04YzAtNC4wOCAzLjA1LTcuNDQgNy03LjkzdjIuMDJDOC4xNiA2LjU3IDYgOS4wMyA2IDEyYzAgMy4zMSAyLjY5IDYgNiA2czYtMi42OSA2LTZjMC0xLjY2LS42Ny0zLjE2LTEuNzYtNC4yNGwtMS40MSAxLjQxQzE1LjU1IDkuOSAxNiAxMC45IDE2IDEyYzAgMi4yMS0xLjc5IDQtNCA0cy00LTEuNzktNC00YzAtMS44NiAxLjI4LTMuNDEgMy0zLjg2djIuMTRjLS42LjM1LTEgLjk4LTEgMS43MiAwIDEuMS45IDIgMiAyczItLjkgMi0yYzAtLjc0LS40LTEuMzgtMS0xLjcyVjJoLTFDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMGMwLTIuNzYtMS4xMi01LjI2LTIuOTMtNy4wN3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ0cmFuc2xhdGUiPjxwYXRoIGQ9Ik0xMi44NyAxNS4wN2wtMi41NC0yLjUxLjAzLS4wM2MxLjc0LTEuOTQgMi45OC00LjE3IDMuNzEtNi41M0gxN1Y0aC03VjJIOHYySDF2MS45OWgxMS4xN0MxMS41IDcuOTIgMTAuNDQgOS43NSA5IDExLjM1IDguMDcgMTAuMzIgNy4zIDkuMTkgNi42OSA4aC0yYy43MyAxLjYzIDEuNzMgMy4xNyAyLjk4IDQuNTZsLTUuMDkgNS4wMkw0IDE5bDUtNSAzLjExIDMuMTEuNzYtMi4wNHpNMTguNSAxMGgtMkwxMiAyMmgybDEuMTItM2g0Ljc1TDIxIDIyaDJsLTQuNS0xMnptLTIuNjIgN2wxLjYyLTQuMzNMMTkuMTIgMTdoLTMuMjR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJlbmRpbmctZG93biI+PHBhdGggZD0iTTE2IDE4bDIuMjktMi4yOS00Ljg4LTQuODgtNCA0TDIgNy40MSAzLjQxIDZsNiA2IDQtNCA2LjMgNi4yOUwyMiAxMnY2eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InRyZW5kaW5nLWZsYXQiPjxwYXRoIGQ9Ik0yMiAxMmwtNC00djNIM3YyaDE1djN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHJlbmRpbmctdXAiPjxwYXRoIGQ9Ik0xNiA2bDIuMjkgMi4yOS00Ljg4IDQuODgtNC00TDIgMTYuNTkgMy40MSAxOGw2LTYgNCA0IDYuMy02LjI5TDIyIDEyVjZ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idHVybmVkLWluIj48cGF0aCBkPSJNMTcgM0g3Yy0xLjEgMC0xLjk5LjktMS45OSAyTDUgMjFsNy0zIDcgM1Y1YzAtMS4xLS45LTItMi0yeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InR1cm5lZC1pbi1ub3QiPjxwYXRoIGQ9Ik0xNyAzSDdjLTEuMSAwLTEuOTkuOS0xLjk5IDJMNSAyMWw3LTMgNyAzVjVjMC0xLjEtLjktMi0yLTJ6bTAgMTVsLTUtMi4xOEw3IDE4VjVoMTB2MTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5hcmNoaXZlIj48cGF0aCBkPSJNMjAuNTUgNS4yMmwtMS4zOS0xLjY4QzE4Ljg4IDMuMjEgMTguNDcgMyAxOCAzSDZjLS40NyAwLS44OC4yMS0xLjE1LjU1TDMuNDYgNS4yMkMzLjE3IDUuNTcgMyA2LjAxIDMgNi41VjE5YzAgMS4xLjg5IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjYuNWMwLS40OS0uMTctLjkzLS40NS0xLjI4ek0xMiA5LjVsNS41IDUuNUgxNHYyaC00di0ySDYuNUwxMiA5LjV6TTUuMTIgNWwuODItMWgxMmwuOTMgMUg1LjEyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InVuZG8iPjxwYXRoIGQ9Ik0xMi41IDhjLTIuNjUgMC01LjA1Ljk5LTYuOSAyLjZMMiA3djloOWwtMy42Mi0zLjYyYzEuMzktMS4xNiAzLjE2LTEuODggNS4xMi0xLjg4IDMuNTQgMCA2LjU1IDIuMzEgNy42IDUuNWwyLjM3LS43OEMyMS4wOCAxMS4wMyAxNy4xNSA4IDEyLjUgOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ1bmZvbGQtbGVzcyI+PHBhdGggZD0iTTcuNDEgMTguNTlMOC44MyAyMCAxMiAxNi44MyAxNS4xNyAyMGwxLjQxLTEuNDFMMTIgMTRsLTQuNTkgNC41OXptOS4xOC0xMy4xOEwxNS4xNyA0IDEyIDcuMTcgOC44MyA0IDcuNDEgNS40MSAxMiAxMGw0LjU5LTQuNTl6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idW5mb2xkLW1vcmUiPjxwYXRoIGQ9Ik0xMiA1LjgzTDE1LjE3IDlsMS40MS0xLjQxTDEyIDMgNy40MSA3LjU5IDguODMgOSAxMiA1Ljgzem0wIDEyLjM0TDguODMgMTVsLTEuNDEgMS40MUwxMiAyMWw0LjU5LTQuNTlMMTUuMTcgMTUgMTIgMTguMTd6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idXBkYXRlIj48cGF0aCBkPSJNMjEgMTAuMTJoLTYuNzhsMi43NC0yLjgyYy0yLjczLTIuNy03LjE1LTIuOC05Ljg4LS4xLTIuNzMgMi43MS0yLjczIDcuMDggMCA5Ljc5IDIuNzMgMi43MSA3LjE1IDIuNzEgOS44OCAwQzE4LjMyIDE1LjY1IDE5IDE0LjA4IDE5IDEyLjFoMmMwIDEuOTgtLjg4IDQuNTUtMi42NCA2LjI5LTMuNTEgMy40OC05LjIxIDMuNDgtMTIuNzIgMC0zLjUtMy40Ny0zLjUzLTkuMTEtLjAyLTEyLjU4IDMuNTEtMy40NyA5LjE0LTMuNDcgMTIuNjUgMEwyMSAzdjcuMTJ6TTEyLjUgOHY0LjI1bDMuNSAyLjA4LS43MiAxLjIxTDExIDEzVjhoMS41eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZlcmlmaWVkLXVzZXIiPjxwYXRoIGQ9Ik0xMiAxTDMgNXY2YzAgNS41NSAzLjg0IDEwLjc0IDkgMTIgNS4xNi0xLjI2IDktNi40NSA5LTEyVjVsLTktNHptLTIgMTZsLTQtNCAxLjQxLTEuNDFMMTAgMTQuMTdsNi41OS02LjU5TDE4IDlsLTggOHoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWFnZW5kYSI+PHBhdGggZD0iTTIwIDEzSDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMXYtNmMwLS41NS0uNDUtMS0xLTF6bTAtMTBIM2MtLjU1IDAtMSAuNDUtMSAxdjZjMCAuNTUuNDUgMSAxIDFoMTdjLjU1IDAgMS0uNDUgMS0xVjRjMC0uNTUtLjQ1LTEtMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctYXJyYXkiPjxwYXRoIGQ9Ik00IDE4aDNWNUg0djEzek0xOCA1djEzaDNWNWgtM3pNOCAxOGg5VjVIOHYxM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWNhcm91c2VsIj48cGF0aCBkPSJNNyAxOWgxMFY0SDd2MTV6bS01LTJoNFY2SDJ2MTF6TTE4IDZ2MTFoNFY2aC00eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctY29sdW1uIj48cGF0aCBkPSJNMTAgMThoNVY1aC01djEzem0tNiAwaDVWNUg0djEzek0xNiA1djEzaDVWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LWRheSI+PHBhdGggZD0iTTIgMjFoMTl2LTNIMnYzek0yMCA4SDNjLS41NSAwLTEgLjQ1LTEgMXY2YzAgLjU1LjQ1IDEgMSAxaDE3Yy41NSAwIDEtLjQ1IDEtMVY5YzAtLjU1LS40NS0xLTEtMXpNMiAzdjNoMTlWM0gyeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctaGVhZGxpbmUiPjxwYXRoIGQ9Ik00IDE1aDE2di0ySDR2MnptMCA0aDE2di0ySDR2MnptMC04aDE2VjlINHYyem0wLTZ2MmgxNlY1SDR6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1saXN0Ij48cGF0aCBkPSJNNCAxNGg0di00SDR2NHptMCA1aDR2LTRINHY0ek00IDloNFY1SDR2NHptNSA1aDEydi00SDl2NHptMCA1aDEydi00SDl2NHpNOSA1djRoMTJWNUg5eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctbW9kdWxlIj48cGF0aCBkPSJNNCAxMWg1VjVINHY2em0wIDdoNXYtNkg0djZ6bTYgMGg1di02aC01djZ6bTYgMGg1di02aC01djZ6bS02LTdoNVY1aC01djZ6bTYtNnY2aDVWNWgtNXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ2aWV3LXF1aWx0Ij48cGF0aCBkPSJNMTAgMThoNXYtNmgtNXY2em0tNiAwaDVWNUg0djEzem0xMiAwaDV2LTZoLTV2NnpNMTAgNXY2aDExVjVIMTB6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlldy1zdHJlYW0iPjxwYXRoIGQ9Ik00IDE4aDE3di02SDR2NnpNNCA1djZoMTdWNUg0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpZXctd2VlayI+PHBhdGggZD0iTTYgNUgzYy0uNTUgMC0xIC40NS0xIDF2MTJjMCAuNTUuNDUgMSAxIDFoM2MuNTUgMCAxLS40NSAxLTFWNmMwLS41NS0uNDUtMS0xLTF6bTE0IDBoLTNjLS41NSAwLTEgLjQ1LTEgMXYxMmMwIC41NS40NSAxIDEgMWgzYy41NSAwIDEtLjQ1IDEtMVY2YzAtLjU1LS40NS0xLTEtMXptLTcgMGgtM2MtLjU1IDAtMSAuNDUtMSAxdjEyYzAgLjU1LjQ1IDEgMSAxaDNjLjU1IDAgMS0uNDUgMS0xVjZjMC0uNTUtLjQ1LTEtMS0xeiI+PC9wYXRoPjwvZz4KPGcgaWQ9InZpc2liaWxpdHkiPjxwYXRoIGQ9Ik0xMiA0LjVDNyA0LjUgMi43MyA3LjYxIDEgMTJjMS43MyA0LjM5IDYgNy41IDExIDcuNXM5LjI3LTMuMTEgMTEtNy41Yy0xLjczLTQuMzktNi03LjUtMTEtNy41ek0xMiAxN2MtMi43NiAwLTUtMi4yNC01LTVzMi4yNC01IDUtNSA1IDIuMjQgNSA1LTIuMjQgNS01IDV6bTAtOGMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6Ij48L3BhdGg+PC9nPgo8ZyBpZD0idmlzaWJpbGl0eS1vZmYiPjxwYXRoIGQ9Ik0xMiA3YzIuNzYgMCA1IDIuMjQgNSA1IDAgLjY1LS4xMyAxLjI2LS4zNiAxLjgzbDIuOTIgMi45MmMxLjUxLTEuMjYgMi43LTIuODkgMy40My00Ljc1LTEuNzMtNC4zOS02LTcuNS0xMS03LjUtMS40IDAtMi43NC4yNS0zLjk4LjdsMi4xNiAyLjE2QzEwLjc0IDcuMTMgMTEuMzUgNyAxMiA3ek0yIDQuMjdsMi4yOCAyLjI4LjQ2LjQ2QzMuMDggOC4zIDEuNzggMTAuMDIgMSAxMmMxLjczIDQuMzkgNiA3LjUgMTEgNy41IDEuNTUgMCAzLjAzLS4zIDQuMzgtLjg0bC40Mi40MkwxOS43MyAyMiAyMSAyMC43MyAzLjI3IDMgMiA0LjI3ek03LjUzIDkuOGwxLjU1IDEuNTVjLS4wNS4yMS0uMDguNDMtLjA4LjY1IDAgMS42NiAxLjM0IDMgMyAzIC4yMiAwIC40NC0uMDMuNjUtLjA4bDEuNTUgMS41NWMtLjY3LjMzLTEuNDEuNTMtMi4yLjUzLTIuNzYgMC01LTIuMjQtNS01IDAtLjc5LjItMS41My41My0yLjJ6bTQuMzEtLjc4bDMuMTUgMy4xNS4wMi0uMTZjMC0xLjY2LTEuMzQtMy0zLTNsLS4xNy4wMXoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3YXJuaW5nIj48cGF0aCBkPSJNMSAyMWgyMkwxMiAyIDEgMjF6bTEyLTNoLTJ2LTJoMnYyem0wLTRoLTJ2LTRoMnY0eiI+PC9wYXRoPjwvZz4KPGcgaWQ9IndhdGNoLWxhdGVyIj48cGF0aCBkPSJNMTIgMkM2LjUgMiAyIDYuNSAyIDEyczQuNSAxMCAxMCAxMCAxMC00LjUgMTAtMTBTMTcuNSAyIDEyIDJ6bTQuMiAxNC4yTDExIDEzVjdoMS41djUuMmw0LjUgMi43LS44IDEuM3oiPjwvcGF0aD48L2c+CjxnIGlkPSJ3ZWVrZW5kIj48cGF0aCBkPSJNMjEgMTBjLTEuMSAwLTIgLjktMiAydjNINXYtM2MwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDJ2NWMwIDEuMS45IDIgMiAyaDE4YzEuMSAwIDItLjkgMi0ydi01YzAtMS4xLS45LTItMi0yem0tMy01SDZjLTEuMSAwLTIgLjktMiAydjIuMTVjMS4xNi40MSAyIDEuNTEgMiAyLjgyVjE0aDEydi0yLjAzYzAtMS4zLjg0LTIuNCAyLTIuODJWN2MwLTEuMS0uOS0yLTItMnoiPjwvcGF0aD48L2c+CjxnIGlkPSJ3b3JrIj48cGF0aCBkPSJNMjAgNmgtNFY0YzAtMS4xMS0uODktMi0yLTJoLTRjLTEuMTEgMC0yIC44OS0yIDJ2Mkg0Yy0xLjExIDAtMS45OS44OS0xLjk5IDJMMiAxOWMwIDEuMTEuODkgMiAyIDJoMTZjMS4xMSAwIDItLjg5IDItMlY4YzAtMS4xMS0uODktMi0yLTJ6bS02IDBoLTRWNGg0djJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0ieW91dHViZS1zZWFyY2hlZC1mb3IiPjxwYXRoIGQ9Ik0xNy4wMSAxNGgtLjhsLS4yNy0uMjdjLjk4LTEuMTQgMS41Ny0yLjYxIDEuNTctNC4yMyAwLTMuNTktMi45MS02LjUtNi41LTYuNXMtNi41IDMtNi41IDYuNUgybDMuODQgNCA0LjE2LTRINi41MUM2LjUxIDcgOC41MyA1IDExLjAxIDVzNC41IDIuMDEgNC41IDQuNWMwIDIuNDgtMi4wMiA0LjUtNC41IDQuNS0uNjUgMC0xLjI2LS4xNC0xLjgyLS4zOEw3LjcxIDE1LjFjLjk3LjU3IDIuMDkuOSAzLjMuOSAxLjYxIDAgMy4wOC0uNTkgNC4yMi0xLjU3bC4yNy4yN3YuNzlsNS4wMSA0Ljk5TDIyIDE5bC00Ljk5LTV6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iem9vbS1pbiI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6bTIuNS00aC0ydjJIOXYtMkg3VjloMlY3aDF2MmgydjF6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iem9vbS1vdXQiPjxwYXRoIGQ9Ik0xNS41IDE0aC0uNzlsLS4yOC0uMjdDMTUuNDEgMTIuNTkgMTYgMTEuMTEgMTYgOS41IDE2IDUuOTEgMTMuMDkgMyA5LjUgM1MzIDUuOTEgMyA5LjUgNS45MSAxNiA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0ek03IDloNXYxSDd6Ij48L3BhdGg+PC9nPgo8L2RlZnM+PC9zdmc+CjwvaXJvbi1pY29uc2V0LXN2Zz5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZGJlLmNvbnRlbnQpO3ZhciAkZ3Q9eyJVKzAwMDgiOiJiYWNrc3BhY2UiLCJVKzAwMDkiOiJ0YWIiLCJVKzAwMUIiOiJlc2MiLCJVKzAwMjAiOiJzcGFjZSIsIlUrMDA3RiI6ImRlbCJ9LG1iZT17ODoiYmFja3NwYWNlIiw5OiJ0YWIiLDEzOiJlbnRlciIsMjc6ImVzYyIsMzM6InBhZ2V1cCIsMzQ6InBhZ2Vkb3duIiwzNToiZW5kIiwzNjoiaG9tZSIsMzI6InNwYWNlIiwzNzoibGVmdCIsMzg6InVwIiwzOToicmlnaHQiLDQwOiJkb3duIiw0NjoiZGVsIiwxMDY6IioifSxLZ3Q9e3NoaWZ0OiJzaGlmdEtleSIsY3RybDoiY3RybEtleSIsYWx0OiJhbHRLZXkiLG1ldGE6Im1ldGFLZXkifSxnYmU9L1thLXowLTkqXS8sX2JlPS9VXCsvLHliZT0vXmFycm93Lyx2YmU9L15zcGFjZShiYXIpPy8seGJlPS9eZXNjYXBlJC87ZnVuY3Rpb24gWmd0KGUsdCl7dmFyIHI9IiI7aWYoZSl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO249PT0iICJ8fHZiZS50ZXN0KG4pP3I9InNwYWNlIjp4YmUudGVzdChuKT9yPSJlc2MiOm4ubGVuZ3RoPT0xPyghdHx8Z2JlLnRlc3QobikpJiYocj1uKTp5YmUudGVzdChuKT9yPW4ucmVwbGFjZSgiYXJyb3ciLCIiKTpuPT0ibXVsdGlwbHkiP3I9IioiOnI9bn1yZXR1cm4gcn1mdW5jdGlvbiBiYmUoZSl7dmFyIHQ9IiI7cmV0dXJuIGUmJihlIGluICRndD90PSRndFtlXTpfYmUudGVzdChlKT8oZT1wYXJzZUludChlLnJlcGxhY2UoIlUrIiwiMHgiKSwxNiksdD1TdHJpbmcuZnJvbUNoYXJDb2RlKGUpLnRvTG93ZXJDYXNlKCkpOnQ9ZS50b0xvd2VyQ2FzZSgpKSx0fWZ1bmN0aW9uIHdiZShlKXt2YXIgdD0iIjtyZXR1cm4gTnVtYmVyKGUpJiYoZT49NjUmJmU8PTkwP3Q9U3RyaW5nLmZyb21DaGFyQ29kZSgzMitlKTplPj0xMTImJmU8PTEyMz90PSJmIisoZS0xMTIrMSk6ZT49NDgmJmU8PTU3P3Q9U3RyaW5nKGUtNDgpOmU+PTk2JiZlPD0xMDU/dD1TdHJpbmcoZS05Nik6dD1tYmVbZV0pLHR9ZnVuY3Rpb24gU2JlKGUsdCl7cmV0dXJuIGUua2V5P1pndChlLmtleSx0KTplLmRldGFpbCYmZS5kZXRhaWwua2V5P1pndChlLmRldGFpbC5rZXksdCk6YmJlKGUua2V5SWRlbnRpZmllcil8fHdiZShlLmtleUNvZGUpfHwiIn1mdW5jdGlvbiBKZ3QoZSx0KXt2YXIgcj1TYmUodCxlLmhhc01vZGlmaWVycyk7cmV0dXJuIHI9PT1lLmtleSYmKCFlLmhhc01vZGlmaWVyc3x8ISF0LnNoaWZ0S2V5PT0hIWUuc2hpZnRLZXkmJiEhdC5jdHJsS2V5PT0hIWUuY3RybEtleSYmISF0LmFsdEtleT09ISFlLmFsdEtleSYmISF0Lm1ldGFLZXk9PSEhZS5tZXRhS2V5KX1mdW5jdGlvbiBNYmUoZSl7cmV0dXJuIGUubGVuZ3RoPT09MT97Y29tYm86ZSxrZXk6ZSxldmVudDoia2V5ZG93biJ9OmUuc3BsaXQoIisiKS5yZWR1Y2UoZnVuY3Rpb24odCxyKXt2YXIgbj1yLnNwbGl0KCI6IiksaT1uWzBdLG89blsxXTtyZXR1cm4gaSBpbiBLZ3Q/KHRbS2d0W2ldXT0hMCx0Lmhhc01vZGlmaWVycz0hMCk6KHQua2V5PWksdC5ldmVudD1vfHwia2V5ZG93biIpLHR9LHtjb21ibzplLnNwbGl0KCI6Iikuc2hpZnQoKX0pfWZ1bmN0aW9uIFFndChlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoIiAiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIE1iZSh0KX0pfXZhciBPbz17cHJvcGVydGllczp7a2V5RXZlbnRUYXJnZXQ6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSxzdG9wS2V5Ym9hcmRFdmVudFByb3BhZ2F0aW9uOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9ib3VuZEtleUhhbmRsZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfaW1wZXJhdGl2ZUtleUJpbmRpbmdzOnt0eXBlOk9iamVjdCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt9fX19LG9ic2VydmVyczpbIl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKGtleUV2ZW50VGFyZ2V0LCBfYm91bmRLZXlIYW5kbGVycykiXSxrZXlCaW5kaW5nczp7fSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7dGhpcy5fcHJlcEtleUJpbmRpbmdzKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzKCl9LGFkZE93bktleUJpbmRpbmc6ZnVuY3Rpb24oZSx0KXt0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3NbZV09dCx0aGlzLl9wcmVwS2V5QmluZGluZ3MoKSx0aGlzLl9yZXNldEtleUV2ZW50TGlzdGVuZXJzKCl9LHJlbW92ZU93bktleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dGhpcy5faW1wZXJhdGl2ZUtleUJpbmRpbmdzPXt9LHRoaXMuX3ByZXBLZXlCaW5kaW5ncygpLHRoaXMuX3Jlc2V0S2V5RXZlbnRMaXN0ZW5lcnMoKX0sa2V5Ym9hcmRFdmVudE1hdGNoZXNLZXlzOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVFndCh0KSxuPTA7bjxyLmxlbmd0aDsrK24paWYoSmd0KHJbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LF9jb2xsZWN0S2V5QmluZGluZ3M6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJlaGF2aW9ycy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5QmluZGluZ3N9KTtyZXR1cm4gZS5pbmRleE9mKHRoaXMua2V5QmluZGluZ3MpPT09LTEmJmUucHVzaCh0aGlzLmtleUJpbmRpbmdzKSxlfSxfcHJlcEtleUJpbmRpbmdzOmZ1bmN0aW9uKCl7dGhpcy5fa2V5QmluZGluZ3M9e30sdGhpcy5fY29sbGVjdEtleUJpbmRpbmdzKCkuZm9yRWFjaChmdW5jdGlvbihyKXtmb3IodmFyIG4gaW4gcil0aGlzLl9hZGRLZXlCaW5kaW5nKG4scltuXSl9LHRoaXMpO2Zvcih2YXIgZSBpbiB0aGlzLl9pbXBlcmF0aXZlS2V5QmluZGluZ3MpdGhpcy5fYWRkS2V5QmluZGluZyhlLHRoaXMuX2ltcGVyYXRpdmVLZXlCaW5kaW5nc1tlXSk7Zm9yKHZhciB0IGluIHRoaXMuX2tleUJpbmRpbmdzKXRoaXMuX2tleUJpbmRpbmdzW3RdLnNvcnQoZnVuY3Rpb24ocixuKXt2YXIgaT1yWzBdLmhhc01vZGlmaWVycyxvPW5bMF0uaGFzTW9kaWZpZXJzO3JldHVybiBpPT09bz8wOmk/LTE6MX0pfSxfYWRkS2V5QmluZGluZzpmdW5jdGlvbihlLHQpe1FndChlKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3RoaXMuX2tleUJpbmRpbmdzW3IuZXZlbnRdPXRoaXMuX2tleUJpbmRpbmdzW3IuZXZlbnRdfHxbXSx0aGlzLl9rZXlCaW5kaW5nc1tyLmV2ZW50XS5wdXNoKFtyLHRdKX0sdGhpcyl9LF9yZXNldEtleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5fdW5saXN0ZW5LZXlFdmVudExpc3RlbmVycygpLHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5fbGlzdGVuS2V5RXZlbnRMaXN0ZW5lcnMoKX0sX2xpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7IXRoaXMua2V5RXZlbnRUYXJnZXR8fE9iamVjdC5rZXlzKHRoaXMuX2tleUJpbmRpbmdzKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2tleUJpbmRpbmdzW2VdLHI9dGhpcy5fb25LZXlCaW5kaW5nRXZlbnQuYmluZCh0aGlzLHQpO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMucHVzaChbdGhpcy5rZXlFdmVudFRhcmdldCxlLHJdKSx0aGlzLmtleUV2ZW50VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZSxyKX0sdGhpcyl9LF91bmxpc3RlbktleUV2ZW50TGlzdGVuZXJzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQscixuO3RoaXMuX2JvdW5kS2V5SGFuZGxlcnMubGVuZ3RoOyllPXRoaXMuX2JvdW5kS2V5SGFuZGxlcnMucG9wKCksdD1lWzBdLHI9ZVsxXSxuPWVbMl0sdC5yZW1vdmVFdmVudExpc3RlbmVyKHIsbil9LF9vbktleUJpbmRpbmdFdmVudDpmdW5jdGlvbihlLHQpe2lmKHRoaXMuc3RvcEtleWJvYXJkRXZlbnRQcm9wYWdhdGlvbiYmdC5zdG9wUHJvcGFnYXRpb24oKSwhdC5kZWZhdWx0UHJldmVudGVkKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdWzBdLGk9ZVtyXVsxXTtpZihKZ3Qobix0KSYmKHRoaXMuX3RyaWdnZXJLZXlIYW5kbGVyKG4saSx0KSx0LmRlZmF1bHRQcmV2ZW50ZWQpKXJldHVybn19LF90cmlnZ2VyS2V5SGFuZGxlcjpmdW5jdGlvbihlLHQscil7dmFyIG49T2JqZWN0LmNyZWF0ZShlKTtuLmtleWJvYXJkRXZlbnQ9cjt2YXIgaT1uZXcgQ3VzdG9tRXZlbnQoZS5ldmVudCx7ZGV0YWlsOm4sY2FuY2VsYWJsZTohMH0pO3RoaXNbdF0uY2FsbCh0aGlzLGkpLGkuZGVmYXVsdFByZXZlbnRlZCYmci5wcmV2ZW50RGVmYXVsdCgpfX07dmFyIHk5PXtwcm9wZXJ0aWVzOntzY3JvbGxUYXJnZXQ6e3R5cGU6SFRNTEVsZW1lbnQsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGVmYXVsdFNjcm9sbFRhcmdldH19fSxvYnNlcnZlcnM6WyJfc2Nyb2xsVGFyZ2V0Q2hhbmdlZChzY3JvbGxUYXJnZXQsIGlzQXR0YWNoZWQpIl0sX3Nob3VsZEhhdmVMaXN0ZW5lcjohMCxfc2Nyb2xsVGFyZ2V0Q2hhbmdlZDpmdW5jdGlvbihlLHQpe3ZhciByO2lmKHRoaXMuX29sZFNjcm9sbFRhcmdldCYmKHRoaXMuX3RvZ2dsZVNjcm9sbExpc3RlbmVyKCExLHRoaXMuX29sZFNjcm9sbFRhcmdldCksdGhpcy5fb2xkU2Nyb2xsVGFyZ2V0PW51bGwpLCEhdClpZihlPT09ImRvY3VtZW50Iil0aGlzLnNjcm9sbFRhcmdldD10aGlzLl9kb2M7ZWxzZSBpZih0eXBlb2YgZT09InN0cmluZyIpe3ZhciBuPXRoaXMuZG9tSG9zdDt0aGlzLnNjcm9sbFRhcmdldD1uJiZuLiQ/bi4kW2VdOnp0KHRoaXMub3duZXJEb2N1bWVudCkucXVlcnlTZWxlY3RvcigiIyIrZSl9ZWxzZSB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLl9vbGRTY3JvbGxUYXJnZXQ9ZSx0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcih0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXIsZSkpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe30sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuX2RvY30sZ2V0IF9kb2MoKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZ2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpP3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5wYWdlWU9mZnNldDp0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxUb3A6MH0sZ2V0IF9zY3JvbGxMZWZ0KCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cucGFnZVhPZmZzZXQ6dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdDowfSxzZXQgX3Njcm9sbFRvcChlKXt0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8od2luZG93LnBhZ2VYT2Zmc2V0LGUpOnRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKSYmKHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD1lKX0sc2V0IF9zY3JvbGxMZWZ0KGUpe3RoaXMuc2Nyb2xsVGFyZ2V0PT09dGhpcy5fZG9jP3dpbmRvdy5zY3JvbGxUbyhlLHdpbmRvdy5wYWdlWU9mZnNldCk6dGhpcy5faXNWYWxpZFNjcm9sbFRhcmdldCgpJiYodGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsTGVmdD1lKX0sc2Nyb2xsOmZ1bmN0aW9uKGUsdCl7dmFyIHI7dHlwZW9mIGU9PSJvYmplY3QiPyhyPWUubGVmdCx0PWUudG9wKTpyPWUscj1yfHwwLHQ9dHx8MCx0aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuc2Nyb2xsVG8ocix0KTp0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCkmJih0aGlzLnNjcm9sbFRhcmdldC5zY3JvbGxMZWZ0PXIsdGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsVG9wPXQpfSxnZXQgX3Njcm9sbFRhcmdldFdpZHRoKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWRTY3JvbGxUYXJnZXQoKT90aGlzLnNjcm9sbFRhcmdldD09PXRoaXMuX2RvYz93aW5kb3cuaW5uZXJXaWR0aDp0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRXaWR0aDowfSxnZXQgX3Njcm9sbFRhcmdldEhlaWdodCgpe3JldHVybiB0aGlzLl9pc1ZhbGlkU2Nyb2xsVGFyZ2V0KCk/dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzLl9kb2M/d2luZG93LmlubmVySGVpZ2h0OnRoaXMuc2Nyb2xsVGFyZ2V0Lm9mZnNldEhlaWdodDowfSxfaXNWYWxpZFNjcm9sbFRhcmdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNjcm9sbFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fSxfdG9nZ2xlU2Nyb2xsTGlzdGVuZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj10PT09dGhpcy5fZG9jP3dpbmRvdzp0O2U/dGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyfHwodGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyPXRoaXMuX3Njcm9sbEhhbmRsZXIuYmluZCh0aGlzKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyKSk6dGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyJiYoci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuX2JvdW5kU2Nyb2xsSGFuZGxlciksdGhpcy5fYm91bmRTY3JvbGxIYW5kbGVyPW51bGwpfSx0b2dnbGVTY3JvbGxMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLl9zaG91bGRIYXZlTGlzdGVuZXI9ZSx0aGlzLl90b2dnbGVTY3JvbGxMaXN0ZW5lcihlLHRoaXMuc2Nyb2xsVGFyZ2V0KX19O3ZhciB0MHQ9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxFYmU9dDB0JiZ0MHRbMV0+PTgsZTB0PTMscjB0PSItMTAwMDBweCIsaEU9LTEwMDtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1tYXgtZGV2aWNlLXBpeGVsLXJhdGlvOiAxKSB7CiAgICAgICAgOmhvc3QgewogICAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgICNpdGVtcyB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1saXN0LWl0ZW1zLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpub3QoW2dyaWRdKSkgI2l0ZW1zID4gOjpzbG90dGVkKCopIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgI2l0ZW1zID4gOjpzbG90dGVkKCopIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGFycmF5LXNlbGVjdG9yIGlkPSJzZWxlY3RvciIgaXRlbXM9Int7aXRlbXN9fSIgc2VsZWN0ZWQ9Int7c2VsZWN0ZWRJdGVtc319IiBzZWxlY3RlZC1pdGVtPSJ7e3NlbGVjdGVkSXRlbX19Ij48L2FycmF5LXNlbGVjdG9yPgoKICAgIDxkaXYgaWQ9Iml0ZW1zIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6Imlyb24tbGlzdCIscHJvcGVydGllczp7aXRlbXM6e3R5cGU6QXJyYXl9LGFzOnt0eXBlOlN0cmluZyx2YWx1ZToiaXRlbSJ9LGluZGV4QXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbmRleCJ9LHNlbGVjdGVkQXM6e3R5cGU6U3RyaW5nLHZhbHVlOiJzZWxlY3RlZCJ9LGdyaWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9ncmlkQ2hhbmdlZCJ9LHNlbGVjdGlvbkVuYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbXM6e3R5cGU6T2JqZWN0LG5vdGlmeTohMH0sbXVsdGlTZWxlY3Rpb246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sc2Nyb2xsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowfX0sb2JzZXJ2ZXJzOlsiX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSIsIl9zZWxlY3Rpb25FbmFibGVkQ2hhbmdlZChzZWxlY3Rpb25FbmFibGVkKSIsIl9tdWx0aVNlbGVjdGlvbkNoYW5nZWQobXVsdGlTZWxlY3Rpb24pIiwiX3NldE92ZXJmbG93KHNjcm9sbFRhcmdldCwgc2Nyb2xsT2Zmc2V0KSJdLGJlaGF2aW9yczpbSGd0LEpzLHk5LFdndF0sX3JhdGlvOi41LF9zY3JvbGxlclBhZGRpbmdUb3A6MCxfc2Nyb2xsUG9zaXRpb246MCxfcGh5c2ljYWxTaXplOjAsX3BoeXNpY2FsQXZlcmFnZTowLF9waHlzaWNhbEF2ZXJhZ2VDb3VudDowLF9waHlzaWNhbFRvcDowLF92aXJ0dWFsQ291bnQ6MCxfZXN0U2Nyb2xsSGVpZ2h0OjAsX3Njcm9sbEhlaWdodDowLF92aWV3cG9ydEhlaWdodDowLF92aWV3cG9ydFdpZHRoOjAsX3BoeXNpY2FsSXRlbXM6bnVsbCxfcGh5c2ljYWxTaXplczpudWxsLF9maXJzdFZpc2libGVJbmRleFZhbDpudWxsLF9sYXN0VmlzaWJsZUluZGV4VmFsOm51bGwsX21heFBhZ2VzOjIsX2ZvY3VzZWRJdGVtOm51bGwsX2ZvY3VzZWRWaXJ0dWFsSW5kZXg6LTEsX2ZvY3VzZWRQaHlzaWNhbEluZGV4Oi0xLF9vZmZzY3JlZW5Gb2N1c2VkSXRlbTpudWxsLF9mb2N1c0JhY2tmaWxsSXRlbTpudWxsLF9pdGVtc1BlclJvdzoxLF9pdGVtV2lkdGg6MCxfcm93SGVpZ2h0OjAsX3RlbXBsYXRlQ29zdDowLF9wYXJlbnRNb2RlbDohMCxnZXQgX3BoeXNpY2FsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3BoeXNpY2FsU2l6ZX0sZ2V0IF9zY3JvbGxCb3R0b20oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfdmlydHVhbEVuZCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnQrdGhpcy5fcGh5c2ljYWxDb3VudC0xfSxnZXQgX2hpZGRlbkNvbnRlbnRTaXplKCl7dmFyIGU9dGhpcy5ncmlkP3RoaXMuX3BoeXNpY2FsUm93cyp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fcGh5c2ljYWxTaXplO3JldHVybiBlLXRoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX2l0ZW1zUGFyZW50KCl7cmV0dXJuIHp0KHp0KHRoaXMuX3VzZXJUZW1wbGF0ZSkucGFyZW50Tm9kZSl9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7dmFyIGU9dGhpcy5fY29udmVydEluZGV4VG9Db21wbGV0ZVJvdyh0aGlzLl92aXJ0dWFsQ291bnQpO3JldHVybiBNYXRoLm1heCgwLGUtdGhpcy5fcGh5c2ljYWxDb3VudCl9LHNldCBfdmlydHVhbFN0YXJ0KGUpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX21heFZpcnR1YWxTdGFydCksdGhpcy5ncmlkJiYoZT1lLWUldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD1lfSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydChlKXtlPWUldGhpcy5fcGh5c2ljYWxDb3VudCxlPDAmJihlPXRoaXMuX3BoeXNpY2FsQ291bnQrZSksdGhpcy5ncmlkJiYoZT1lLWUldGhpcy5faXRlbXNQZXJSb3cpLHRoaXMuX3BoeXNpY2FsU3RhcnRWYWw9ZX0sZ2V0IF9waHlzaWNhbFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsU3RhcnRWYWx8fDB9LGdldCBfcGh5c2ljYWxFbmQoKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCt0aGlzLl9waHlzaWNhbENvdW50LTEpJXRoaXMuX3BoeXNpY2FsQ291bnR9LHNldCBfcGh5c2ljYWxDb3VudChlKXt0aGlzLl9waHlzaWNhbENvdW50VmFsPWV9LGdldCBfcGh5c2ljYWxDb3VudCgpe3JldHVybiB0aGlzLl9waHlzaWNhbENvdW50VmFsfHwwfSxnZXQgX29wdFBoeXNpY2FsU2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydEhlaWdodD09PTA/MS8wOnRoaXMuX3ZpZXdwb3J0SGVpZ2h0KnRoaXMuX21heFBhZ2VzfSxnZXQgX2lzVmlzaWJsZSgpe3JldHVybiBCb29sZWFuKHRoaXMub2Zmc2V0V2lkdGh8fHRoaXMub2Zmc2V0SGVpZ2h0KX0sZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCl7dmFyIGU9dGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw7aWYoZT09bnVsbCl7dmFyIHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O2U9dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7aWYodCs9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHIpLHQ+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIHRoaXMuZ3JpZD9uLW4ldGhpcy5faXRlbXNQZXJSb3c6bjtpZih0aGlzLmdyaWQmJnRoaXMuX3ZpcnR1YWxDb3VudC0xPT09bilyZXR1cm4gbi1uJXRoaXMuX2l0ZW1zUGVyUm93fSl8fDAsdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9ZX1yZXR1cm4gZX0sZ2V0IGxhc3RWaXNpYmxlSW5kZXgoKXt2YXIgZT10aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsO2lmKGU9PW51bGwpe2lmKHRoaXMuZ3JpZCllPU1hdGgubWluKHRoaXMuX3ZpcnR1YWxDb3VudCx0aGlzLmZpcnN0VmlzaWJsZUluZGV4K3RoaXMuX2VzdFJvd3NJblZpZXcqdGhpcy5faXRlbXNQZXJSb3ctMSk7ZWxzZXt2YXIgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHIsbil7dDx0aGlzLl9zY3JvbGxCb3R0b20mJihlPW4pLHQrPXRoaXMuX2dldFBoeXNpY2FsU2l6ZUluY3JlbWVudChyKX0pfXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9ZX1yZXR1cm4gZX0sZ2V0IF9kZWZhdWx0U2Nyb2xsVGFyZ2V0KCl7cmV0dXJuIHRoaXN9LGdldCBfdmlydHVhbFJvd0NvdW50KCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl92aXJ0dWFsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpfSxnZXQgX2VzdFJvd3NJblZpZXcoKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuX3ZpZXdwb3J0SGVpZ2h0L3RoaXMuX3Jvd0hlaWdodCl9LGdldCBfcGh5c2ljYWxSb3dzKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLl9waHlzaWNhbENvdW50L3RoaXMuX2l0ZW1zUGVyUm93KX0sZ2V0IF9zY3JvbGxPZmZzZXQoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsZXJQYWRkaW5nVG9wK3RoaXMuc2Nyb2xsT2Zmc2V0fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2RpZEZvY3VzLmJpbmQodGhpcyksITApfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpLHRoaXMubGlzdGVuKHRoaXMsImlyb24tcmVzaXplIiwiX3Jlc2l6ZUhhbmRsZXIiKSx0aGlzLmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy51bmxpc3Rlbih0aGlzLCJpcm9uLXJlc2l6ZSIsIl9yZXNpemVIYW5kbGVyIiksdGhpcy51bmxpc3Rlbih0aGlzLCJrZXlkb3duIiwiX2tleWRvd25IYW5kbGVyIil9LF9zZXRPdmVyZmxvdzpmdW5jdGlvbihlKXt0aGlzLnN0eWxlLndlYmtpdE92ZXJmbG93U2Nyb2xsaW5nPWU9PT10aGlzPyJ0b3VjaCI6IiIsdGhpcy5zdHlsZS5vdmVyZmxvd1k9ZT09PXRoaXM/ImF1dG8iOiIiLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2RlYm91bmNlKCJfcmVuZGVyIix0aGlzLl9yZW5kZXIsTmkpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQoZVsicGFkZGluZy10b3AiXSwxMCksdGhpcy5faXNSVEw9Qm9vbGVhbihlLmRpcmVjdGlvbj09PSJydGwiKSx0aGlzLl92aWV3cG9ydFdpZHRoPXRoaXMuJC5pdGVtcy5vZmZzZXRXaWR0aCx0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHQsdGhpcy5ncmlkJiZ0aGlzLl91cGRhdGVHcmlkTWV0cmljcygpfSxfc2Nyb2xsSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fbWF4U2Nyb2xsVG9wLHRoaXMuX3Njcm9sbFRvcCkpLHQ9ZS10aGlzLl9zY3JvbGxQb3NpdGlvbixyPXQ+PTA7aWYodGhpcy5fc2Nyb2xsUG9zaXRpb249ZSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCxNYXRoLmFicyh0KT50aGlzLl9waHlzaWNhbFNpemUmJnRoaXMuX3BoeXNpY2FsU2l6ZT4wKXt0PXQtdGhpcy5fc2Nyb2xsT2Zmc2V0O3ZhciBuPU1hdGgucm91bmQodC90aGlzLl9waHlzaWNhbEF2ZXJhZ2UpKnRoaXMuX2l0ZW1zUGVyUm93O3RoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrbix0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQrbix0aGlzLl9waHlzaWNhbFRvcD1NYXRoLm1pbihNYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydC90aGlzLl9pdGVtc1BlclJvdykqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLHRoaXMuX3Njcm9sbFBvc2l0aW9uKSx0aGlzLl91cGRhdGUoKX1lbHNlIGlmKHRoaXMuX3BoeXNpY2FsQ291bnQ+MCl7dmFyIGk9dGhpcy5fZ2V0UmV1c2FibGVzKHIpO3I/KHRoaXMuX3BoeXNpY2FsVG9wPWkucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtpLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtpLmluZGV4ZXMubGVuZ3RoKToodGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydC1pLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1pLmluZGV4ZXMubGVuZ3RoKSx0aGlzLl91cGRhdGUoaS5pbmRleGVzLHI/bnVsbDppLmluZGV4ZXMpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxjaSl9fSxfZ2V0UmV1c2FibGVzOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG89W10sYT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZSp0aGlzLl9yYXRpbyxzPXRoaXMuX3ZpcnR1YWxTdGFydCxsPXRoaXMuX3ZpcnR1YWxFbmQsYz10aGlzLl9waHlzaWNhbENvdW50LHU9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0LGg9dGhpcy5fcGh5c2ljYWxCb3R0b20rdGhpcy5fc2Nyb2xsT2Zmc2V0LGY9dGhpcy5fc2Nyb2xsUG9zaXRpb24scD10aGlzLl9zY3JvbGxCb3R0b207Zm9yKGU/KHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3BoeXNpY2FsRW5kLG49Zi11KToodD10aGlzLl9waHlzaWNhbEVuZCxyPXRoaXMuX3BoeXNpY2FsU3RhcnQsbj1oLXApO2k9dGhpcy5fZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50KHQpLG49bi1pLCEoby5sZW5ndGg+PWN8fG48PWEpOylpZihlKXtpZihsK28ubGVuZ3RoKzE+PXRoaXMuX3ZpcnR1YWxDb3VudHx8dStpPj1mLXRoaXMuX3Njcm9sbE9mZnNldClicmVhaztvLnB1c2godCksdT11K2ksdD0odCsxKSVjfWVsc2V7aWYocy1vLmxlbmd0aDw9MHx8dSt0aGlzLl9waHlzaWNhbFNpemUtaTw9cClicmVhaztvLnB1c2godCksdT11LWksdD10PT09MD9jLTE6dC0xfXJldHVybntpbmRleGVzOm8scGh5c2ljYWxUb3A6dS10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKGUsdCl7aWYoIShlJiZlLmxlbmd0aD09PTB8fHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSl7aWYodGhpcy5fbWFuYWdlRm9jdXMoKSx0aGlzLl9hc3NpZ25Nb2RlbHMoZSksdGhpcy5fdXBkYXRlTWV0cmljcyhlKSx0KWZvcig7dC5sZW5ndGg7KXt2YXIgcj10LnBvcCgpO3RoaXMuX3BoeXNpY2FsVG9wLT10aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQocil9dGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpfX0sX2NyZWF0ZVBvb2w6ZnVuY3Rpb24oZSl7dGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKTt2YXIgdCxyLG49bmV3IEFycmF5KGUpO2Zvcih0PTA7dDxlO3QrKylyPXRoaXMuc3RhbXAobnVsbCksblt0XT1yLnJvb3QucXVlcnlTZWxlY3RvcigiKiIpLHRoaXMuX2l0ZW1zUGFyZW50LmFwcGVuZENoaWxkKHIucm9vdCk7cmV0dXJuIG59LF9pc0NsaWVudEZ1bGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2Nyb2xsQm90dG9tIT0wJiZ0aGlzLl9waHlzaWNhbEJvdHRvbS0xPj10aGlzLl9zY3JvbGxCb3R0b20mJnRoaXMuX3BoeXNpY2FsVG9wPD10aGlzLl9zY3JvbGxQb3NpdGlvbn0sX2luY3JlYXNlUG9vbElmTmVlZGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NsYW1wKHRoaXMuX3BoeXNpY2FsQ291bnQrZSxlMHQsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCk7aWYodD10aGlzLl9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93KHQpLHRoaXMuZ3JpZCl7dmFyIHI9dCV0aGlzLl9pdGVtc1BlclJvdztyJiZ0LXI8PXRoaXMuX3BoeXNpY2FsQ291bnQmJih0Kz10aGlzLl9pdGVtc1BlclJvdyksdC09cn12YXIgbj10LXRoaXMuX3BoeXNpY2FsQ291bnQsaT1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpO2lmKCEobjwwKSl7aWYobj4wKXt2YXIgbz13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7W10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2wobikpO2Zvcih2YXIgYT0wO2E8bjthKyspdGhpcy5fcGh5c2ljYWxTaXplcy5wdXNoKDApO3RoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudCtuLHRoaXMuX3BoeXNpY2FsU3RhcnQ+dGhpcy5fcGh5c2ljYWxFbmQmJnRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSYmdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KTx0aGlzLl9waHlzaWNhbEVuZCYmKHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtuKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1vKS9uLGk9TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KX10aGlzLl92aXJ0dWFsRW5kPj10aGlzLl92aXJ0dWFsQ291bnQtMXx8aT09PTB8fCh0aGlzLl9pc0NsaWVudEZ1bGwoKT90aGlzLl9waHlzaWNhbFNpemU8dGhpcy5fb3B0UGh5c2ljYWxTaXplJiZ0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsdGhpcy5fY2xhbXAoTWF0aC5yb3VuZCg1MC90aGlzLl90ZW1wbGF0ZUNvc3QpLDEsaSkpLGt4KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsaSksY2kpKX19LF9yZW5kZXI6ZnVuY3Rpb24oKXtpZighKCF0aGlzLmlzQXR0YWNoZWR8fCF0aGlzLl9pc1Zpc2libGUpKWlmKHRoaXMuX3BoeXNpY2FsQ291bnQhPT0wKXt2YXIgZT10aGlzLl9nZXRSZXVzYWJsZXMoITApO3RoaXMuX3BoeXNpY2FsVG9wPWUucGh5c2ljYWxUb3AsdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtlLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtlLmluZGV4ZXMubGVuZ3RoLHRoaXMuX3VwZGF0ZShlLmluZGV4ZXMpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApfWVsc2UgdGhpcy5fdmlydHVhbENvdW50PjAmJih0aGlzLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcygpLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKGUwdCkpfSxfZW5zdXJlVGVtcGxhdGl6ZWQ6ZnVuY3Rpb24oKXtpZighdGhpcy5jdG9yKXt0aGlzLl91c2VyVGVtcGxhdGU9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJ0ZW1wbGF0ZSIpLHRoaXMuX3VzZXJUZW1wbGF0ZXx8Y29uc29sZS53YXJuKCJpcm9uLWxpc3QgcmVxdWlyZXMgYSB0ZW1wbGF0ZSB0byBiZSBwcm92aWRlZCBpbiBsaWdodC1kb20iKTt2YXIgZT17fTtlLl9fa2V5X189ITAsZVt0aGlzLmFzXT0hMCxlW3RoaXMuaW5kZXhBc109ITAsZVt0aGlzLnNlbGVjdGVkQXNdPSEwLGUudGFiSW5kZXg9ITAsdGhpcy5faW5zdGFuY2VQcm9wcz1lLHRoaXMudGVtcGxhdGl6ZSh0aGlzLl91c2VyVGVtcGxhdGUsdGhpcy5tdXRhYmxlRGF0YSl9fSxfZ3JpZENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0eXBlb2YgdCE9InVuZGVmaW5lZCImJih0aGlzLm5vdGlmeVJlc2l6ZSgpLHVpKCksZSYmdGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7aWYoZS5wYXRoPT09Iml0ZW1zIil0aGlzLl92aXJ0dWFsU3RhcnQ9MCx0aGlzLl9waHlzaWNhbFRvcD0wLHRoaXMuX3ZpcnR1YWxDb3VudD10aGlzLml0ZW1zP3RoaXMuaXRlbXMubGVuZ3RoOjAsdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleT17fSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9waHlzaWNhbENvdW50PXRoaXMuX3BoeXNpY2FsQ291bnR8fDAsdGhpcy5fcGh5c2ljYWxJdGVtcz10aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSx0aGlzLl9waHlzaWNhbFNpemVzPXRoaXMuX3BoeXNpY2FsU2l6ZXN8fFtdLHRoaXMuX3BoeXNpY2FsU3RhcnQ9MCx0aGlzLl9zY3JvbGxUb3A+dGhpcy5fc2Nyb2xsT2Zmc2V0JiZ0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKDApLHRoaXMuX3JlbW92ZUZvY3VzZWRJdGVtKCksdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSk7ZWxzZSBpZihlLnBhdGg9PT0iaXRlbXMuc3BsaWNlcyIpe3RoaXMuX2FkanVzdFZpcnR1YWxJbmRleChlLnZhbHVlLmluZGV4U3BsaWNlcyksdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MDt2YXIgdD1lLnZhbHVlLmluZGV4U3BsaWNlcy5zb21lKGZ1bmN0aW9uKGkpe3JldHVybiBpLmFkZGVkQ291bnQ+MHx8aS5yZW1vdmVkLmxlbmd0aD4wfSk7aWYodCl7dmFyIHI9dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpO3RoaXMuY29udGFpbnMocikmJnIuYmx1cigpfXZhciBuPWUudmFsdWUuaW5kZXhTcGxpY2VzLnNvbWUoZnVuY3Rpb24oaSl7cmV0dXJuIGkuaW5kZXgraS5hZGRlZENvdW50Pj10aGlzLl92aXJ0dWFsU3RhcnQmJmkuaW5kZXg8PXRoaXMuX3ZpcnR1YWxFbmR9LHRoaXMpOyghdGhpcy5faXNDbGllbnRGdWxsKCl8fG4pJiZ0aGlzLl9kZWJvdW5jZSgiX3JlbmRlciIsdGhpcy5fcmVuZGVyLE5pKX1lbHNlIGUucGF0aCE9PSJpdGVtcy5sZW5ndGgiJiZ0aGlzLl9mb3J3YXJkSXRlbVBhdGgoZS5wYXRoLGUudmFsdWUpfSxfZm9yd2FyZEl0ZW1QYXRoOmZ1bmN0aW9uKGUsdCl7ZT1lLnNsaWNlKDYpO3ZhciByPWUuaW5kZXhPZigiLiIpO3I9PT0tMSYmKHI9ZS5sZW5ndGgpO3ZhciBuLGksbyxhPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKSxzPXBhcnNlSW50KGUuc3Vic3RyaW5nKDAsciksMTApO249dGhpcy5faXNJbmRleFJlbmRlcmVkKHMpLG4/KGk9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChzKSxvPXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbaV0pKTphJiYobz1hKSwhKCFvfHxvW3RoaXMuaW5kZXhBc10hPT1zKSYmKGU9ZS5zdWJzdHJpbmcocisxKSxlPXRoaXMuYXMrKGU/Ii4iK2U6IiIpLG8uX3NldFBlbmRpbmdQcm9wZXJ0eU9yUGF0aChlLHQsITEsITApLG8uX2ZsdXNoUHJvcGVydGllcyYmby5fZmx1c2hQcm9wZXJ0aWVzKCksbiYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW2ldKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCkpKX0sX2FkanVzdFZpcnR1YWxJbmRleDpmdW5jdGlvbihlKXtlLmZvckVhY2goZnVuY3Rpb24odCl7aWYodC5yZW1vdmVkLmZvckVhY2godGhpcy5fcmVtb3ZlSXRlbSx0aGlzKSx0LmluZGV4PHRoaXMuX3ZpcnR1YWxTdGFydCl7dmFyIHI9TWF0aC5tYXgodC5hZGRlZENvdW50LXQucmVtb3ZlZC5sZW5ndGgsdC5pbmRleC10aGlzLl92aXJ0dWFsU3RhcnQpO3RoaXMuX3ZpcnR1YWxTdGFydD10aGlzLl92aXJ0dWFsU3RhcnQrcix0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Pj0wJiYodGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4K3IpfX0sdGhpcyl9LF9yZW1vdmVJdGVtOmZ1bmN0aW9uKGUpe3RoaXMuJC5zZWxlY3Rvci5kZXNlbGVjdChlKSx0aGlzLl9mb2N1c2VkSXRlbSYmdGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fZm9jdXNlZEl0ZW0pW3RoaXMuYXNdPT09ZSYmdGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKX0sX2l0ZXJhdGVJdGVtczpmdW5jdGlvbihlLHQpe3ZhciByLG4saSxvO2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0yJiZ0KXtmb3Iobz0wO288dC5sZW5ndGg7bysrKWlmKHI9dFtvXSxuPXRoaXMuX2NvbXB1dGVWaWR4KHIpLChpPWUuY2FsbCh0aGlzLHIsbikpIT1udWxsKXJldHVybiBpfWVsc2V7Zm9yKHI9dGhpcy5fcGh5c2ljYWxTdGFydCxuPXRoaXMuX3ZpcnR1YWxTdGFydDtyPHRoaXMuX3BoeXNpY2FsQ291bnQ7cisrLG4rKylpZigoaT1lLmNhbGwodGhpcyxyLG4pKSE9bnVsbClyZXR1cm4gaTtmb3Iocj0wO3I8dGhpcy5fcGh5c2ljYWxTdGFydDtyKyssbisrKWlmKChpPWUuY2FsbCh0aGlzLHIsbikpIT1udWxsKXJldHVybiBpfX0sX2NvbXB1dGVWaWR4OmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLl9waHlzaWNhbFN0YXJ0P3RoaXMuX3ZpcnR1YWxTdGFydCsoZS10aGlzLl9waHlzaWNhbFN0YXJ0KTp0aGlzLl92aXJ0dWFsU3RhcnQrKHRoaXMuX3BoeXNpY2FsQ291bnQtdGhpcy5fcGh5c2ljYWxTdGFydCkrZX0sX2Fzc2lnbk1vZGVsczpmdW5jdGlvbihlKXt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24odCxyKXt2YXIgbj10aGlzLl9waHlzaWNhbEl0ZW1zW3RdLGk9dGhpcy5pdGVtcyYmdGhpcy5pdGVtc1tyXTtpZihpIT1udWxsKXt2YXIgbz10aGlzLm1vZGVsRm9yRWxlbWVudChuKTtvLl9fa2V5X189bnVsbCx0aGlzLl9mb3J3YXJkUHJvcGVydHkobyx0aGlzLmFzLGkpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLHRoaXMuc2VsZWN0ZWRBcyx0aGlzLiQuc2VsZWN0b3IuaXNTZWxlY3RlZChpKSksdGhpcy5fZm9yd2FyZFByb3BlcnR5KG8sdGhpcy5pbmRleEFzLHIpLHRoaXMuX2ZvcndhcmRQcm9wZXJ0eShvLCJ0YWJJbmRleCIsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD09PXI/MDotMSksdGhpcy5fcGh5c2ljYWxJbmRleEZvcktleVtvLl9fa2V5X19dPXQsby5fZmx1c2hQcm9wZXJ0aWVzJiZvLl9mbHVzaFByb3BlcnRpZXMoITApLG4ucmVtb3ZlQXR0cmlidXRlKCJoaWRkZW4iKX1lbHNlIG4uc2V0QXR0cmlidXRlKCJoaWRkZW4iLCIiKX0sZSl9LF91cGRhdGVNZXRyaWNzOmZ1bmN0aW9uKGUpe3VpKCk7dmFyIHQ9MCxyPTAsbj10aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCxpPXRoaXMuX3BoeXNpY2FsQXZlcmFnZTt0aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24obyxhKXtyKz10aGlzLl9waHlzaWNhbFNpemVzW29dLHRoaXMuX3BoeXNpY2FsU2l6ZXNbb109dGhpcy5fcGh5c2ljYWxJdGVtc1tvXS5vZmZzZXRIZWlnaHQsdCs9dGhpcy5fcGh5c2ljYWxTaXplc1tvXSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCs9dGhpcy5fcGh5c2ljYWxTaXplc1tvXT8xOjB9LGUpLHRoaXMuZ3JpZD8odGhpcy5fdXBkYXRlR3JpZE1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFNpemU9TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCk6KHI9dGhpcy5faXRlbXNQZXJSb3c9PT0xP3I6TWF0aC5jZWlsKHRoaXMuX3BoeXNpY2FsQ291bnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3Jvd0hlaWdodCx0aGlzLl9waHlzaWNhbFNpemU9dGhpcy5fcGh5c2ljYWxTaXplK3Qtcix0aGlzLl9pdGVtc1BlclJvdz0xKSx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCE9PW4mJih0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9TWF0aC5yb3VuZCgoaSpuK3QpL3RoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50KSl9LF91cGRhdGVHcmlkTWV0cmljczpmdW5jdGlvbigpe3RoaXMuX2l0ZW1XaWR0aD10aGlzLl9waHlzaWNhbENvdW50PjA/dGhpcy5fcGh5c2ljYWxJdGVtc1swXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDoyMDAsdGhpcy5fcm93SGVpZ2h0PXRoaXMuX3BoeXNpY2FsQ291bnQ+MD90aGlzLl9waHlzaWNhbEl0ZW1zWzBdLm9mZnNldEhlaWdodDoyMDAsdGhpcy5faXRlbXNQZXJSb3c9dGhpcy5faXRlbVdpZHRoP01hdGguZmxvb3IodGhpcy5fdmlld3BvcnRXaWR0aC90aGlzLl9pdGVtV2lkdGgpOnRoaXMuX2l0ZW1zUGVyUm93fSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7dmFyIGU9dGhpcy5fcGh5c2ljYWxUb3A7aWYodGhpcy5ncmlkKXt2YXIgdD10aGlzLl9pdGVtc1BlclJvdyp0aGlzLl9pdGVtV2lkdGgscj0odGhpcy5fdmlld3BvcnRXaWR0aC10KS8yO3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihuLGkpe3ZhciBvPWkldGhpcy5faXRlbXNQZXJSb3csYT1NYXRoLmZsb29yKG8qdGhpcy5faXRlbVdpZHRoK3IpO3RoaXMuX2lzUlRMJiYoYT1hKi0xKSx0aGlzLnRyYW5zbGF0ZTNkKGErInB4IixlKyJweCIsMCx0aGlzLl9waHlzaWNhbEl0ZW1zW25dKSx0aGlzLl9zaG91bGRSZW5kZXJOZXh0Um93KGkpJiYoZSs9dGhpcy5fcm93SGVpZ2h0KX0pfWVsc2V7bGV0IG49W107dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGksbyl7bGV0IGE9dGhpcy5fcGh5c2ljYWxJdGVtc1tpXTt0aGlzLnRyYW5zbGF0ZTNkKDAsZSsicHgiLDAsYSksZSs9dGhpcy5fcGh5c2ljYWxTaXplc1tpXTtsZXQgcz1hLmlkO3MmJm4ucHVzaChzKX0pLG4ubGVuZ3RoJiZ0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1vd25zIixuLmpvaW4oIiAiKSl9fSxfZ2V0UGh5c2ljYWxTaXplSW5jcmVtZW50OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdyaWQ/dGhpcy5fY29tcHV0ZVZpZHgoZSkldGhpcy5faXRlbXNQZXJSb3chPT10aGlzLl9pdGVtc1BlclJvdy0xPzA6dGhpcy5fcm93SGVpZ2h0OnRoaXMuX3BoeXNpY2FsU2l6ZXNbZV19LF9zaG91bGRSZW5kZXJOZXh0Um93OmZ1bmN0aW9uKGUpe3JldHVybiBlJXRoaXMuX2l0ZW1zUGVyUm93PT09dGhpcy5faXRlbXNQZXJSb3ctMX0sX2FkanVzdFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdmlydHVhbFN0YXJ0PT09MD90aGlzLl9waHlzaWNhbFRvcDpNYXRoLm1pbih0aGlzLl9zY3JvbGxQb3NpdGlvbit0aGlzLl9waHlzaWNhbFRvcCwwKTtpZihlIT09MCl7dGhpcy5fcGh5c2ljYWxUb3A9dGhpcy5fcGh5c2ljYWxUb3AtZTt2YXIgdD10aGlzLl9zY3JvbGxQb3NpdGlvbjshRWJlJiZ0PjAmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24odC1lKX19LF9yZXNldFNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuc2Nyb2xsVGFyZ2V0JiZlPj0wJiYodGhpcy5fc2Nyb2xsVG9wPWUsdGhpcy5fc2Nyb2xsUG9zaXRpb249dGhpcy5fc2Nyb2xsVG9wKX0sX3VwZGF0ZVNjcm9sbGVyU2l6ZTpmdW5jdGlvbihlKXt0aGlzLmdyaWQ/dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3ZpcnR1YWxSb3dDb3VudCp0aGlzLl9yb3dIZWlnaHQ6dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0PXRoaXMuX3BoeXNpY2FsQm90dG9tK01hdGgubWF4KHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl9waHlzaWNhbENvdW50LXRoaXMuX3ZpcnR1YWxTdGFydCwwKSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsZT1lfHx0aGlzLl9zY3JvbGxIZWlnaHQ9PT0wLGU9ZXx8dGhpcy5fc2Nyb2xsUG9zaXRpb24+PXRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl9waHlzaWNhbFNpemUsZT1lfHx0aGlzLmdyaWQmJnRoaXMuJC5pdGVtcy5zdHlsZS5oZWlnaHQ8dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0LChlfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpJiYodGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KX0sc2Nyb2xsVG9JdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNjcm9sbFRvSW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihlKXtpZighKHR5cGVvZiBlIT0ibnVtYmVyInx8ZTwwfHxlPnRoaXMuaXRlbXMubGVuZ3RoLTEpJiYodWkoKSx0aGlzLl9waHlzaWNhbENvdW50IT09MCkpe2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKSwoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKXx8ZT49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KSYmKHRoaXMuX3ZpcnR1YWxTdGFydD10aGlzLmdyaWQ/ZS10aGlzLl9pdGVtc1BlclJvdyoyOmUtMSksdGhpcy5fbWFuYWdlRm9jdXMoKSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSx0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcGh5c2ljYWxUb3A9TWF0aC5mbG9vcih0aGlzLl92aXJ0dWFsU3RhcnQvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX3BoeXNpY2FsQXZlcmFnZTtmb3IodmFyIHQ9dGhpcy5fcGh5c2ljYWxTdGFydCxyPXRoaXMuX3ZpcnR1YWxTdGFydCxuPTAsaT10aGlzLl9oaWRkZW5Db250ZW50U2l6ZTtyPGUmJm48PWk7KW49bit0aGlzLl9nZXRQaHlzaWNhbFNpemVJbmNyZW1lbnQodCksdD0odCsxKSV0aGlzLl9waHlzaWNhbENvdW50LHIrKzt0aGlzLl91cGRhdGVTY3JvbGxlclNpemUoITApLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSx0aGlzLl9yZXNldFNjcm9sbFBvc2l0aW9uKHRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCtuKSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw9bnVsbH19LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MCx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0wfSxfcmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIixmdW5jdGlvbigpe3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX2lzVmlzaWJsZT8odGhpcy51cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXMoKSx0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9LE5pKX0sc2VsZWN0SXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5zZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoZSkpfSxzZWxlY3RJbmRleDpmdW5jdGlvbihlKXtpZighKGU8MHx8ZT49dGhpcy5fdmlydHVhbENvdW50KSl7aWYoIXRoaXMubXVsdGlTZWxlY3Rpb24mJnRoaXMuc2VsZWN0ZWRJdGVtJiZ0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5faXNJbmRleFJlbmRlcmVkKGUpKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKTt0JiYodFt0aGlzLnNlbGVjdGVkQXNdPSEwKSx0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChlKX10aGlzLiQuc2VsZWN0b3Iuc2VsZWN0SW5kZXgoZSl9fSxkZXNlbGVjdEl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGVzZWxlY3RJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoZSkpfSxkZXNlbGVjdEluZGV4OmZ1bmN0aW9uKGUpe2lmKCEoZTwwfHxlPj10aGlzLl92aXJ0dWFsQ291bnQpKXtpZih0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSkpe3ZhciB0PXRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX3BoeXNpY2FsSXRlbXNbdGhpcy5fZ2V0UGh5c2ljYWxJbmRleChlKV0pO3RbdGhpcy5zZWxlY3RlZEFzXT0hMSx0aGlzLnVwZGF0ZVNpemVGb3JJbmRleChlKX10aGlzLiQuc2VsZWN0b3IuZGVzZWxlY3RJbmRleChlKX19LHRvZ2dsZVNlbGVjdGlvbkZvckl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXgodGhpcy5pdGVtcy5pbmRleE9mKGUpKX0sdG9nZ2xlU2VsZWN0aW9uRm9ySW5kZXg6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kLnNlbGVjdG9yLmlzSW5kZXhTZWxlY3RlZD90aGlzLiQuc2VsZWN0b3IuaXNJbmRleFNlbGVjdGVkKGUpOnRoaXMuJC5zZWxlY3Rvci5pc1NlbGVjdGVkKHRoaXMuaXRlbXNbZV0pO3Q/dGhpcy5kZXNlbGVjdEluZGV4KGUpOnRoaXMuc2VsZWN0SW5kZXgoZSl9LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKGUsdCl7dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fcGh5c2ljYWxJdGVtc1tlXSlbdGhpcy5zZWxlY3RlZEFzXT0hMX0pLHRoaXMuJC5zZWxlY3Rvci5jbGVhclNlbGVjdGlvbigpfSxfc2VsZWN0aW9uRW5hYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZT90aGlzLmxpc3Rlbjp0aGlzLnVubGlzdGVuO3QuY2FsbCh0aGlzLHRoaXMsInRhcCIsIl9zZWxlY3Rpb25IYW5kbGVyIil9LF9zZWxlY3Rpb25IYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubW9kZWxGb3JFbGVtZW50KGUudGFyZ2V0KTtpZighIXQpe3ZhciByLG4saT16dChlKS5wYXRoWzBdLG89dGhpcy5fZ2V0QWN0aXZlRWxlbWVudCgpLGE9dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRbdGhpcy5pbmRleEFzXSldO2kubG9jYWxOYW1lPT09ImlucHV0Inx8aS5sb2NhbE5hbWU9PT0iYnV0dG9uInx8aS5sb2NhbE5hbWU9PT0ic2VsZWN0Inx8KHI9dC50YWJJbmRleCx0LnRhYkluZGV4PWhFLG49bz9vLnRhYkluZGV4Oi0xLHQudGFiSW5kZXg9ciwhKG8mJmEhPT1vJiZhLmNvbnRhaW5zKG8pJiZuIT09aEUpJiZ0aGlzLnRvZ2dsZVNlbGVjdGlvbkZvckl0ZW0odFt0aGlzLmFzXSkpfX0sX211bHRpU2VsZWN0aW9uQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLmNsZWFyU2VsZWN0aW9uKCksdGhpcy4kLnNlbGVjdG9yLm11bHRpPWV9LHVwZGF0ZVNpemVGb3JJdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnVwZGF0ZVNpemVGb3JJbmRleCh0aGlzLml0ZW1zLmluZGV4T2YoZSkpfSx1cGRhdGVTaXplRm9ySW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKSYmKHRoaXMuX3VwZGF0ZU1ldHJpY3MoW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCkpLG51bGx9LF9tYW5hZ2VGb2N1czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg7ZT49MCYmZTx0aGlzLl92aXJ0dWFsQ291bnQ/dGhpcy5faXNJbmRleFJlbmRlcmVkKGUpP3RoaXMuX3Jlc3RvcmVGb2N1c2VkSXRlbSgpOnRoaXMuX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtKCk6dGhpcy5fdmlydHVhbENvdW50PjAmJnRoaXMuX3BoeXNpY2FsQ291bnQ+MCYmKHRoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4PXRoaXMuX3BoeXNpY2FsU3RhcnQsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD10aGlzLl92aXJ0dWFsU3RhcnQsdGhpcy5fZm9jdXNlZEl0ZW09dGhpcy5fcGh5c2ljYWxJdGVtc1t0aGlzLl9waHlzaWNhbFN0YXJ0XSl9LF9jb252ZXJ0SW5kZXhUb0NvbXBsZXRlUm93OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9pdGVtc1BlclJvdz10aGlzLl9pdGVtc1BlclJvd3x8MSx0aGlzLmdyaWQ/TWF0aC5jZWlsKGUvdGhpcy5faXRlbXNQZXJSb3cpKnRoaXMuX2l0ZW1zUGVyUm93OmV9LF9pc0luZGV4UmVuZGVyZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PXRoaXMuX3ZpcnR1YWxTdGFydCYmZTw9dGhpcy5fdmlydHVhbEVuZH0sX2lzSW5kZXhWaXNpYmxlOmZ1bmN0aW9uKGUpe3JldHVybiBlPj10aGlzLmZpcnN0VmlzaWJsZUluZGV4JiZlPD10aGlzLmxhc3RWaXNpYmxlSW5kZXh9LF9nZXRQaHlzaWNhbEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0KyhlLXRoaXMuX3ZpcnR1YWxTdGFydCkpJXRoaXMuX3BoeXNpY2FsQ291bnR9LGZvY3VzSXRlbTpmdW5jdGlvbihlKXt0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbShlKX0sX2ZvY3VzUGh5c2ljYWxJdGVtOmZ1bmN0aW9uKGUpe2lmKCEoZTwwfHxlPj10aGlzLl92aXJ0dWFsQ291bnQpKXt0aGlzLl9yZXN0b3JlRm9jdXNlZEl0ZW0oKSx0aGlzLl9pc0luZGV4UmVuZGVyZWQoZSl8fHRoaXMuc2Nyb2xsVG9JbmRleChlKTt2YXIgdD10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2dldFBoeXNpY2FsSW5kZXgoZSldLHI9dGhpcy5tb2RlbEZvckVsZW1lbnQodCksbjtyLnRhYkluZGV4PWhFLHQudGFiSW5kZXg9PT1oRSYmKG49dCksbnx8KG49enQodCkucXVlcnlTZWxlY3RvcignW3RhYmluZGV4PSInK2hFKyciXScpKSxyLnRhYkluZGV4PTAsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD1lLG4mJm4uZm9jdXMoKX19LF9yZW1vdmVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtJiZ0aGlzLl9pdGVtc1BhcmVudC5yZW1vdmVDaGlsZCh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSksdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW09bnVsbCx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1udWxsLHRoaXMuX2ZvY3VzZWRJdGVtPW51bGwsdGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleD0tMSx0aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD0tMX0sX2NyZWF0ZUZvY3VzQmFja2ZpbGxJdGVtOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg7aWYoISh0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbXx8dGhpcy5fZm9jdXNlZFZpcnR1YWxJbmRleDwwKSl7aWYoIXRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtKXt2YXIgdD10aGlzLnN0YW1wKG51bGwpO3RoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtPXQucm9vdC5xdWVyeVNlbGVjdG9yKCIqIiksdGhpcy5faXRlbXNQYXJlbnQuYXBwZW5kQ2hpbGQodC5yb290KX10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW2VdLHRoaXMubW9kZWxGb3JFbGVtZW50KHRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtKS50YWJJbmRleD0wLHRoaXMuX3BoeXNpY2FsSXRlbXNbZV09dGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0sdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9ZSx0aGlzLnRyYW5zbGF0ZTNkKDAscjB0LDAsdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pfX0sX3Jlc3RvcmVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe2lmKCEoIXRoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtfHx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PDApKXt0aGlzLl9hc3NpZ25Nb2RlbHMoKTt2YXIgZT10aGlzLl9mb2N1c2VkUGh5c2ljYWxJbmRleD10aGlzLl9nZXRQaHlzaWNhbEluZGV4KHRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXgpLHQ9dGhpcy5fcGh5c2ljYWxJdGVtc1tlXTtpZighIXQpe3ZhciByPXRoaXMubW9kZWxGb3JFbGVtZW50KHQpLG49dGhpcy5tb2RlbEZvckVsZW1lbnQodGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0pO3JbdGhpcy5hc109PT1uW3RoaXMuYXNdPyh0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT10LHIudGFiSW5kZXg9LTEsdGhpcy5fcGh5c2ljYWxJdGVtc1tlXT10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLnRyYW5zbGF0ZTNkKDAscjB0LDAsdGhpcy5fZm9jdXNCYWNrZmlsbEl0ZW0pKToodGhpcy5fcmVtb3ZlRm9jdXNlZEl0ZW0oKSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbT1udWxsKSx0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbT1udWxsfX19LF9kaWRGb2N1czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm1vZGVsRm9yRWxlbWVudChlLnRhcmdldCkscj10aGlzLm1vZGVsRm9yRWxlbWVudCh0aGlzLl9mb2N1c2VkSXRlbSksbj10aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSE9PW51bGwsaT10aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4OyF0fHwocj09PXQ/dGhpcy5faXNJbmRleFZpc2libGUoaSl8fHRoaXMuc2Nyb2xsVG9JbmRleChpKToodGhpcy5fcmVzdG9yZUZvY3VzZWRJdGVtKCksciYmKHIudGFiSW5kZXg9LTEpLHQudGFiSW5kZXg9MCxpPXRbdGhpcy5pbmRleEFzXSx0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PWksdGhpcy5fZm9jdXNlZFBoeXNpY2FsSW5kZXg9dGhpcy5fZ2V0UGh5c2ljYWxJbmRleChpKSx0aGlzLl9mb2N1c2VkSXRlbT10aGlzLl9waHlzaWNhbEl0ZW1zW3RoaXMuX2ZvY3VzZWRQaHlzaWNhbEluZGV4XSxuJiYhdGhpcy5fb2Zmc2NyZWVuRm9jdXNlZEl0ZW0mJnRoaXMuX3VwZGF0ZSgpKSl9LF9rZXlkb3duSGFuZGxlcjpmdW5jdGlvbihlKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQwOnRoaXMuX2ZvY3VzZWRWaXJ0dWFsSW5kZXg8dGhpcy5fdmlydHVhbENvdW50LTEmJmUucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzk6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8tMToxKSk7YnJlYWs7Y2FzZSAzODp0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4PjAmJmUucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4LSh0aGlzLmdyaWQ/dGhpcy5faXRlbXNQZXJSb3c6MSkpO2JyZWFrO2Nhc2UgMzc6dGhpcy5ncmlkJiZ0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4Kyh0aGlzLl9pc1JUTD8xOi0xKSk7YnJlYWs7Y2FzZSAxMzp0aGlzLl9mb2N1c1BoeXNpY2FsSXRlbSh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSx0aGlzLnNlbGVjdGlvbkVuYWJsZWQmJnRoaXMuX3NlbGVjdGlvbkhhbmRsZXIoZSk7YnJlYWt9fSxfY2xhbXA6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KHQsZSkpfSxfZGVib3VuY2U6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1tlXT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW2VdLHIsdC5iaW5kKHRoaXMpKSxKbCh0aGlzLl9kZWJvdW5jZXJzW2VdKX0sX2ZvcndhcmRQcm9wZXJ0eTpmdW5jdGlvbihlLHQscil7ZS5fc2V0UGVuZGluZ1Byb3BlcnR5KHQscil9LF9mb3J3YXJkSG9zdFByb3BWMjpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmdGhpcy5tb2RlbEZvckVsZW1lbnQocikuZm9yd2FyZEhvc3RQcm9wKGUsdCl9LHRoaXMpfSxfbm90aWZ5SW5zdGFuY2VQcm9wVjI6ZnVuY3Rpb24oZSx0LHIpe2lmKERJKHRoaXMuYXMsdCkpe3ZhciBuPWVbdGhpcy5pbmRleEFzXTt0PT10aGlzLmFzJiYodGhpcy5pdGVtc1tuXT1yKSx0aGlzLm5vdGlmeVBhdGgoZHAodGhpcy5hcywiaXRlbXMuIituLHQpLHIpfX0sX2dldFN0YW1wZWRDaGlsZHJlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9waHlzaWNhbEl0ZW1zfSxfZm9yd2FyZEluc3RhbmNlUGF0aDpmdW5jdGlvbihlLHQscil7dC5pbmRleE9mKHRoaXMuYXMrIi4iKT09PTAmJnRoaXMubm90aWZ5UGF0aCgiaXRlbXMuIitlLl9fa2V5X18rIi4iK3Quc2xpY2UodGhpcy5hcy5sZW5ndGgrMSkscil9LF9mb3J3YXJkUGFyZW50UGF0aDpmdW5jdGlvbihlLHQpeyh0aGlzLl9waHlzaWNhbEl0ZW1zfHxbXSkuY29uY2F0KFt0aGlzLl9vZmZzY3JlZW5Gb2N1c2VkSXRlbSx0aGlzLl9mb2N1c0JhY2tmaWxsSXRlbV0pLmZvckVhY2goZnVuY3Rpb24ocil7ciYmdGhpcy5tb2RlbEZvckVsZW1lbnQocikubm90aWZ5UGF0aChlLHQpfSx0aGlzKX0sX2ZvcndhcmRQYXJlbnRQcm9wOmZ1bmN0aW9uKGUsdCl7KHRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdKS5jb25jYXQoW3RoaXMuX29mZnNjcmVlbkZvY3VzZWRJdGVtLHRoaXMuX2ZvY3VzQmFja2ZpbGxJdGVtXSkuZm9yRWFjaChmdW5jdGlvbihyKXtyJiYodGhpcy5tb2RlbEZvckVsZW1lbnQocilbZV09dCl9LHRoaXMpfSxfZ2V0QWN0aXZlRWxlbWVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2l0ZW1zUGFyZW50Lm5vZGUuZG9tSG9zdDtyZXR1cm4genQoZT9lLnJvb3Q6ZG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnR9fSk7dmFyIHY5PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuc2VsZWN0aW9uPVtdLHRoaXMuc2VsZWN0Q2FsbGJhY2s9dH1nZXQoKXtyZXR1cm4gdGhpcy5tdWx0aT90aGlzLnNlbGVjdGlvbi5zbGljZSgpOnRoaXMuc2VsZWN0aW9uWzBdfWNsZWFyKHQpe3RoaXMuc2VsZWN0aW9uLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbihyKXsoIXR8fHQuaW5kZXhPZihyKTwwKSYmdGhpcy5zZXRJdGVtU2VsZWN0ZWQociwhMSl9LHRoaXMpfWlzU2VsZWN0ZWQodCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmluZGV4T2YodCk+PTB9c2V0SXRlbVNlbGVjdGVkKHQscil7aWYodCE9bnVsbCYmciE9PXRoaXMuaXNTZWxlY3RlZCh0KSl7aWYocil0aGlzLnNlbGVjdGlvbi5wdXNoKHQpO2Vsc2V7dmFyIG49dGhpcy5zZWxlY3Rpb24uaW5kZXhPZih0KTtuPj0wJiZ0aGlzLnNlbGVjdGlvbi5zcGxpY2UobiwxKX10aGlzLnNlbGVjdENhbGxiYWNrJiZ0aGlzLnNlbGVjdENhbGxiYWNrKHQscil9fXNlbGVjdCh0KXt0aGlzLm11bHRpP3RoaXMudG9nZ2xlKHQpOnRoaXMuZ2V0KCkhPT10JiYodGhpcy5zZXRJdGVtU2VsZWN0ZWQodGhpcy5nZXQoKSwhMSksdGhpcy5zZXRJdGVtU2VsZWN0ZWQodCwhMCkpfXRvZ2dsZSh0KXt0aGlzLnNldEl0ZW1TZWxlY3RlZCh0LCF0aGlzLmlzU2VsZWN0ZWQodCkpfX07dmFyIHdoPXtwcm9wZXJ0aWVzOnthdHRyRm9yU2VsZWN0ZWQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LHNlbGVjdGVkOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LHNlbGVjdGVkSXRlbTp7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSxhY3RpdmF0ZUV2ZW50Ont0eXBlOlN0cmluZyx2YWx1ZToidGFwIixvYnNlcnZlcjoiX2FjdGl2YXRlRXZlbnRDaGFuZ2VkIn0sc2VsZWN0YWJsZTpTdHJpbmcsc2VsZWN0ZWRDbGFzczp7dHlwZTpTdHJpbmcsdmFsdWU6Imlyb24tc2VsZWN0ZWQifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6bnVsbH0sZmFsbGJhY2tTZWxlY3Rpb246e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9LGl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX2V4Y2x1ZGVkTG9jYWxOYW1lczp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dGVtcGxhdGU6MSwiZG9tLWJpbmQiOjEsImRvbS1pZiI6MSwiZG9tLXJlcGVhdCI6MX19fX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZUF0dHJGb3JTZWxlY3RlZChhdHRyRm9yU2VsZWN0ZWQpIiwiX3VwZGF0ZVNlbGVjdGVkKHNlbGVjdGVkKSIsIl9jaGVja0ZhbGxiYWNrKGZhbGxiYWNrU2VsZWN0aW9uKSJdLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9iaW5kRmlsdGVySXRlbT10aGlzLl9maWx0ZXJJdGVtLmJpbmQodGhpcyksdGhpcy5fc2VsZWN0aW9uPW5ldyB2OSh0aGlzLl9hcHBseVNlbGVjdGlvbi5iaW5kKHRoaXMpKX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj10aGlzLl9vYnNlcnZlSXRlbXModGhpcyksdGhpcy5fYWRkTGlzdGVuZXIodGhpcy5hY3RpdmF0ZUV2ZW50KX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmenQodGhpcykudW5vYnNlcnZlTm9kZXModGhpcy5fb2JzZXJ2ZXIpLHRoaXMuX3JlbW92ZUxpc3RlbmVyKHRoaXMuYWN0aXZhdGVFdmVudCl9LGluZGV4T2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXRlbXM/dGhpcy5pdGVtcy5pbmRleE9mKGUpOi0xfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5zZWxlY3RlZD1lfSxzZWxlY3RQcmV2aW91czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9ZS0xO3RoaXMuc2VsZWN0ZWQhPT12b2lkIDAmJih0PShOdW1iZXIodGhpcy5fdmFsdWVUb0luZGV4KHRoaXMuc2VsZWN0ZWQpKS0xK2UpJWUpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKHQpfSxzZWxlY3ROZXh0OmZ1bmN0aW9uKCl7dmFyIGU9MDt0aGlzLnNlbGVjdGVkIT09dm9pZCAwJiYoZT0oTnVtYmVyKHRoaXMuX3ZhbHVlVG9JbmRleCh0aGlzLnNlbGVjdGVkKSkrMSkldGhpcy5pdGVtcy5sZW5ndGgpLHRoaXMuc2VsZWN0ZWQ9dGhpcy5faW5kZXhUb1ZhbHVlKGUpfSxzZWxlY3RJbmRleDpmdW5jdGlvbihlKXt0aGlzLnNlbGVjdCh0aGlzLl9pbmRleFRvVmFsdWUoZSkpfSxmb3JjZVN5bmNocm9ub3VzSXRlbVVwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyJiZ0eXBlb2YgdGhpcy5fb2JzZXJ2ZXIuZmx1c2g9PSJmdW5jdGlvbiI/dGhpcy5fb2JzZXJ2ZXIuZmx1c2goKTp0aGlzLl91cGRhdGVJdGVtcygpfSxnZXQgX3Nob3VsZFVwZGF0ZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGVkIT1udWxsfSxfY2hlY2tGYWxsYmFjazpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LF9hZGRMaXN0ZW5lcjpmdW5jdGlvbihlKXt0aGlzLmxpc3Rlbih0aGlzLGUsIl9hY3RpdmF0ZUhhbmRsZXIiKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGUpe3RoaXMudW5saXN0ZW4odGhpcyxlLCJfYWN0aXZhdGVIYW5kbGVyIil9LF9hY3RpdmF0ZUV2ZW50Q2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuX3JlbW92ZUxpc3RlbmVyKHQpLHRoaXMuX2FkZExpc3RlbmVyKGUpfSxfdXBkYXRlSXRlbXM6ZnVuY3Rpb24oKXt2YXIgZT16dCh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHModGhpcy5zZWxlY3RhYmxlfHwiKiIpO2U9QXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGUsdGhpcy5fYmluZEZpbHRlckl0ZW0pLHRoaXMuX3NldEl0ZW1zKGUpfSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW0mJih0aGlzLnNlbGVjdGVkPXRoaXMuX3ZhbHVlRm9ySXRlbSh0aGlzLnNlbGVjdGVkSXRlbSkpfSxfdXBkYXRlU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9zZWxlY3RTZWxlY3RlZCh0aGlzLnNlbGVjdGVkKX0sX3NlbGVjdFNlbGVjdGVkOmZ1bmN0aW9uKGUpe2lmKCEhdGhpcy5pdGVtcyl7dmFyIHQ9dGhpcy5fdmFsdWVUb0l0ZW0odGhpcy5zZWxlY3RlZCk7dD90aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHQpOnRoaXMuX3NlbGVjdGlvbi5jbGVhcigpLHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24mJnRoaXMuaXRlbXMubGVuZ3RoJiZ0aGlzLl9zZWxlY3Rpb24uZ2V0KCk9PT12b2lkIDAmJih0aGlzLnNlbGVjdGVkPXRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfX0sX2ZpbHRlckl0ZW06ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuX2V4Y2x1ZGVkTG9jYWxOYW1lc1tlLmxvY2FsTmFtZV19LF92YWx1ZVRvSXRlbTpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD9udWxsOnRoaXMuaXRlbXNbdGhpcy5fdmFsdWVUb0luZGV4KGUpXX0sX3ZhbHVlVG9JbmRleDpmdW5jdGlvbihlKXtpZih0aGlzLmF0dHJGb3JTZWxlY3RlZCl7Zm9yKHZhciB0PTAscjtyPXRoaXMuaXRlbXNbdF07dCsrKWlmKHRoaXMuX3ZhbHVlRm9ySXRlbShyKT09ZSlyZXR1cm4gdH1lbHNlIHJldHVybiBOdW1iZXIoZSl9LF9pbmRleFRvVmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hdHRyRm9yU2VsZWN0ZWQpe3ZhciB0PXRoaXMuaXRlbXNbZV07aWYodClyZXR1cm4gdGhpcy5fdmFsdWVGb3JJdGVtKHQpfWVsc2UgcmV0dXJuIGV9LF92YWx1ZUZvckl0ZW06ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoIXRoaXMuYXR0ckZvclNlbGVjdGVkKXt2YXIgdD10aGlzLmluZGV4T2YoZSk7cmV0dXJuIHQ9PT0tMT9udWxsOnR9dmFyIHI9ZVt3bSh0aGlzLmF0dHJGb3JTZWxlY3RlZCldO3JldHVybiByIT1udWxsP3I6ZS5nZXRBdHRyaWJ1dGUodGhpcy5hdHRyRm9yU2VsZWN0ZWQpfSxfYXBwbHlTZWxlY3Rpb246ZnVuY3Rpb24oZSx0KXt0aGlzLnNlbGVjdGVkQ2xhc3MmJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy5zZWxlY3RlZENsYXNzLHQsZSksdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSYmdGhpcy50b2dnbGVBdHRyaWJ1dGUodGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSx0LGUpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZSgpLHRoaXMuZmlyZSgiaXJvbi0iKyh0PyJzZWxlY3QiOiJkZXNlbGVjdCIpLHtpdGVtOmV9KX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3RoaXMuX3NldFNlbGVjdGVkSXRlbSh0aGlzLl9zZWxlY3Rpb24uZ2V0KCkpfSxfb2JzZXJ2ZUl0ZW1zOmZ1bmN0aW9uKGUpe3JldHVybiB6dChlKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlSXRlbXMoKSx0aGlzLl91cGRhdGVTZWxlY3RlZCgpLHRoaXMuZmlyZSgiaXJvbi1pdGVtcy1jaGFuZ2VkIix0LHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KX0pfSxfYWN0aXZhdGVIYW5kbGVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnRhcmdldCxyPXRoaXMuaXRlbXM7dCYmdCE9dGhpczspe3ZhciBuPXIuaW5kZXhPZih0KTtpZihuPj0wKXt2YXIgaT10aGlzLl9pbmRleFRvVmFsdWUobik7dGhpcy5faXRlbUFjdGl2YXRlKGksdCk7cmV0dXJufXQ9dC5wYXJlbnROb2RlfX0sX2l0ZW1BY3RpdmF0ZTpmdW5jdGlvbihlLHQpe3RoaXMuZmlyZSgiaXJvbi1hY3RpdmF0ZSIse3NlbGVjdGVkOmUsaXRlbTp0fSx7Y2FuY2VsYWJsZTohMH0pLmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuc2VsZWN0KGUpfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKDpub3Qoc2xvdCk6bm90KC5pcm9uLXNlbGVjdGVkKSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6Imlyb24tcGFnZXMiLGJlaGF2aW9yczpbSnMsd2hdLHByb3BlcnRpZXM6e2FjdGl2YXRlRXZlbnQ6e3R5cGU6U3RyaW5nLHZhbHVlOm51bGx9fSxvYnNlcnZlcnM6WyJfc2VsZWN0ZWRQYWdlQ2hhbmdlZChzZWxlY3RlZCkiXSxfc2VsZWN0ZWRQYWdlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMuYXN5bmModGhpcy5ub3RpZnlSZXNpemUpfX0pO3ZhciBuMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKCiAgICAgIC0tc2hhZG93LXRyYW5zaXRpb246IHsKICAgICAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMjhzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1ub25lOiB7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgfTsKCiAgICAgIC8qIGZyb20gaHR0cDovL2NvZGVwZW4uaW8vc2h5bmRtYW4vcGVuL2M1Mzk0ZGRmMmU4YjJhNWM5MTg1OTA0YjU3NDIxY2RiICovCgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDFweCA1cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0zZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDNweCA0cHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDhweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAzcHggM3B4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAxcHggMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgNnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgMXB4IDE4cHggMCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDVweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi04ZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDhweCAxMHB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgM3B4IDE0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCA1cHggNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICB9OwoKICAgICAgLS1zaGFkb3ctZWxldmF0aW9uLTEyZHA6IHsKICAgICAgICBib3gtc2hhZG93OiAwIDEycHggMTZweCAxcHggcmdiYSgwLCAwLCAwLCAwLjE0KSwKICAgICAgICAgICAgICAgICAgICAwIDRweCAyMnB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTIpLAogICAgICAgICAgICAgICAgICAgIDAgNnB4IDdweCAtNHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgfTsKCiAgICAgIC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOiB7CiAgICAgICAgYm94LXNoYWRvdzogMCAxNnB4IDI0cHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNCksCiAgICAgICAgICAgICAgICAgICAgMCAgNnB4IDMwcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAgOHB4IDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CgogICAgICAtLXNoYWRvdy1lbGV2YXRpb24tMjRkcDogewogICAgICAgIGJveC1zaGFkb3c6IDAgMjRweCAzOHB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAgICAgICAgICAgICAgIDAgOXB4IDQ2cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xMiksCiAgICAgICAgICAgICAgICAgICAgMCAxMXB4IDE1cHggLTdweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICAgIH07CiAgICB9CiAgPC9zdHlsZT4KPC9jdXN0b20tc3R5bGU+YDtuMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChuMHQuY29udGVudCk7dmFyIGkwdD1RYAo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWF0ZXJpYWwtc3R5bGVzIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGh0bWwgewogICAgICAgIC0tcGFwZXItbWF0ZXJpYWw6IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0yOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTRkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi04ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi01OiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgfTsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWwgewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjEiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjsKICAgICAgfQogICAgICAucGFwZXItbWF0ZXJpYWxbZWxldmF0aW9uPSIzIl0gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgICB9CiAgICAgIC5wYXBlci1tYXRlcmlhbFtlbGV2YXRpb249IjQiXSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTsKICAgICAgfQoKICAgICAgLyogRHVwbGljYXRlIHRoZSBzdHlsZXMgYmVjYXVzZSBvZiBodHRwczovL2dpdGh1Yi5jb20vd2ViY29tcG9uZW50cy9zaGFkeWNzcy9pc3N1ZXMvMTkzICovCiAgICAgIDpob3N0IHsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsOiB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tMmRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMjogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgICAgfTsKICAgICAgICAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOiB7CiAgICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTZkcDsKICAgICAgICB9OwogICAgICAgIC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ6IHsKICAgICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tOGRwOwogICAgICAgIH07CiAgICAgICAgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNTogewogICAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTE7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTM7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNCJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTQ7CiAgICAgIH0KICAgICAgOmhvc3QoLnBhcGVyLW1hdGVyaWFsW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7aTB0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoaTB0LmNvbnRlbnQpO3ZhciBEaT17cHJvcGVydGllczp7Zm9jdXNlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxyZWFkT25seTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LF9vbGRUYWJJbmRleDp7dHlwZTpTdHJpbmd9LF9ib3VuZEZvY3VzQmx1ckhhbmRsZXI6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm9jdXNCbHVySGFuZGxlci5iaW5kKHRoaXMpfX19LG9ic2VydmVyczpbIl9jaGFuZ2VkQ29udHJvbFN0YXRlKGZvY3VzZWQsIGRpc2FibGVkKSJdLHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fYm91bmRGb2N1c0JsdXJIYW5kbGVyLCEwKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX2JvdW5kRm9jdXNCbHVySGFuZGxlciwhMCl9LF9mb2N1c0JsdXJIYW5kbGVyOmZ1bmN0aW9uKGUpe3RoaXMuX3NldEZvY3VzZWQoZS50eXBlPT09ImZvY3VzIil9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIsZT8idHJ1ZSI6ImZhbHNlIiksdGhpcy5zdHlsZS5wb2ludGVyRXZlbnRzPWU/Im5vbmUiOiIiLGU/KHRoaXMuX29sZFRhYkluZGV4PXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpLHRoaXMuX3NldEZvY3VzZWQoITEpLHRoaXMudGFiSW5kZXg9LTEsdGhpcy5ibHVyKCkpOnRoaXMuX29sZFRhYkluZGV4IT09dm9pZCAwJiYodGhpcy5fb2xkVGFiSW5kZXg9PT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpOnRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fb2xkVGFiSW5kZXgpKX0sX2NoYW5nZWRDb250cm9sU3RhdGU6ZnVuY3Rpb24oKXt0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkJiZ0aGlzLl9jb250cm9sU3RhdGVDaGFuZ2VkKCl9fTt2YXIgWXg9e3Byb3BlcnRpZXM6e3ByZXNzZWQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMCx2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il9wcmVzc2VkQ2hhbmdlZCJ9LHRvZ2dsZXM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LGFjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHBvaW50ZXJEb3duOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAsdmFsdWU6ITF9LHJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQ6e3R5cGU6Qm9vbGVhbixyZWFkT25seTohMH0sYXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtcHJlc3NlZCIsb2JzZXJ2ZXI6Il9hcmlhQWN0aXZlQXR0cmlidXRlQ2hhbmdlZCJ9fSxsaXN0ZW5lcnM6e2Rvd246Il9kb3duSGFuZGxlciIsdXA6Il91cEhhbmRsZXIiLHRhcDoiX3RhcEhhbmRsZXIifSxvYnNlcnZlcnM6WyJfZm9jdXNDaGFuZ2VkKGZvY3VzZWQpIiwiX2FjdGl2ZUNoYW5nZWQoYWN0aXZlLCBhcmlhQWN0aXZlQXR0cmlidXRlKSJdLGtleUJpbmRpbmdzOnsiZW50ZXI6a2V5ZG93biI6Il9hc3luY0NsaWNrIiwic3BhY2U6a2V5ZG93biI6Il9zcGFjZUtleURvd25IYW5kbGVyIiwic3BhY2U6a2V5dXAiOiJfc3BhY2VLZXlVcEhhbmRsZXIifSxfbW91c2VFdmVudFJlOi9ebW91c2UvLF90YXBIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVzP3RoaXMuX3VzZXJBY3RpdmF0ZSghdGhpcy5hY3RpdmUpOnRoaXMuYWN0aXZlPSExfSxfZm9jdXNDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2RldGVjdEtleWJvYXJkRm9jdXMoZSksZXx8dGhpcy5fc2V0UHJlc3NlZCghMSl9LF9kZXRlY3RLZXlib2FyZEZvY3VzOmZ1bmN0aW9uKGUpe3RoaXMuX3NldFJlY2VpdmVkRm9jdXNGcm9tS2V5Ym9hcmQoIXRoaXMucG9pbnRlckRvd24mJmUpfSxfdXNlckFjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlIT09ZSYmKHRoaXMuYWN0aXZlPWUsdGhpcy5maXJlKCJjaGFuZ2UiKSl9LF9kb3duSGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zZXRQb2ludGVyRG93bighMCksdGhpcy5fc2V0UHJlc3NlZCghMCksdGhpcy5fc2V0UmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCghMSl9LF91cEhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9zZXRQb2ludGVyRG93bighMSksdGhpcy5fc2V0UHJlc3NlZCghMSl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLmtleWJvYXJkRXZlbnQscj16dCh0KS5sb2NhbFRhcmdldDt0aGlzLmlzTGlnaHREZXNjZW5kYW50KHIpfHwodC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5fc2V0UHJlc3NlZCghMCkpfSxfc3BhY2VLZXlVcEhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZXRhaWwua2V5Ym9hcmRFdmVudCxyPXp0KHQpLmxvY2FsVGFyZ2V0O3RoaXMuaXNMaWdodERlc2NlbmRhbnQocil8fCh0aGlzLnByZXNzZWQmJnRoaXMuX2FzeW5jQ2xpY2soKSx0aGlzLl9zZXRQcmVzc2VkKCExKSl9LF9hc3luY0NsaWNrOmZ1bmN0aW9uKCl7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuY2xpY2soKX0sMSl9LF9wcmVzc2VkQ2hhbmdlZDpmdW5jdGlvbihlKXt0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2FyaWFBY3RpdmVBdHRyaWJ1dGVDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dCYmdCE9ZSYmdGhpcy5oYXNBdHRyaWJ1dGUodCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKHQpfSxfYWN0aXZlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3RoaXMudG9nZ2xlcz90aGlzLnNldEF0dHJpYnV0ZSh0aGlzLmFyaWFBY3RpdmVBdHRyaWJ1dGUsZT8idHJ1ZSI6ImZhbHNlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUodGhpcy5hcmlhQWN0aXZlQXR0cmlidXRlKSx0aGlzLl9jaGFuZ2VkQnV0dG9uU3RhdGUoKX0sX2NvbnRyb2xTdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkP3RoaXMuX3NldFByZXNzZWQoITEpOnRoaXMuX2NoYW5nZWRCdXR0b25TdGF0ZSgpfSxfY2hhbmdlZEJ1dHRvblN0YXRlOmZ1bmN0aW9uKCl7dGhpcy5fYnV0dG9uU3RhdGVDaGFuZ2VkJiZ0aGlzLl9idXR0b25TdGF0ZUNoYW5nZWQoKX19LFNoPVtPbyxZeF07dmFyIE1oPXtkaXN0YW5jZTpmdW5jdGlvbihlLHQscixuKXt2YXIgaT1lLXIsbz10LW47cmV0dXJuIE1hdGguc3FydChpKmkrbypvKX0sbm93OndpbmRvdy5wZXJmb3JtYW5jZSYmd2luZG93LnBlcmZvcm1hbmNlLm5vdz93aW5kb3cucGVyZm9ybWFuY2Uubm93LmJpbmQod2luZG93LnBlcmZvcm1hbmNlKTpEYXRlLm5vd307ZnVuY3Rpb24gbzB0KGUpe3RoaXMuZWxlbWVudD1lLHRoaXMud2lkdGg9dGhpcy5ib3VuZGluZ1JlY3Qud2lkdGgsdGhpcy5oZWlnaHQ9dGhpcy5ib3VuZGluZ1JlY3QuaGVpZ2h0LHRoaXMuc2l6ZT1NYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX1vMHQucHJvdG90eXBlPXtnZXQgYm91bmRpbmdSZWN0KCl7cmV0dXJuIHRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sZnVydGhlc3RDb3JuZXJEaXN0YW5jZUZyb206ZnVuY3Rpb24oZSx0KXt2YXIgcj1NaC5kaXN0YW5jZShlLHQsMCwwKSxuPU1oLmRpc3RhbmNlKGUsdCx0aGlzLndpZHRoLDApLGk9TWguZGlzdGFuY2UoZSx0LDAsdGhpcy5oZWlnaHQpLG89TWguZGlzdGFuY2UoZSx0LHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpO3JldHVybiBNYXRoLm1heChyLG4saSxvKX19O2Z1bmN0aW9uIGdfKGUpe3RoaXMuZWxlbWVudD1lLHRoaXMuY29sb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkuY29sb3IsdGhpcy53YXZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMud2F2ZUNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLndhdmUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMuY29sb3IsdGhpcy53YXZlLmNsYXNzTGlzdC5hZGQoIndhdmUiKSx0aGlzLndhdmVDb250YWluZXIuY2xhc3NMaXN0LmFkZCgid2F2ZS1jb250YWluZXIiKSx6dCh0aGlzLndhdmVDb250YWluZXIpLmFwcGVuZENoaWxkKHRoaXMud2F2ZSksdGhpcy5yZXNldEludGVyYWN0aW9uU3RhdGUoKX1nXy5NQVhfUkFESVVTPTMwMDtnXy5wcm90b3R5cGU9e2dldCByZWNlbnRlcnMoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnJlY2VudGVyc30sZ2V0IGNlbnRlcigpe3JldHVybiB0aGlzLmVsZW1lbnQuY2VudGVyfSxnZXQgbW91c2VEb3duRWxhcHNlZCgpe3ZhciBlO3JldHVybiB0aGlzLm1vdXNlRG93blN0YXJ0PyhlPU1oLm5vdygpLXRoaXMubW91c2VEb3duU3RhcnQsdGhpcy5tb3VzZVVwU3RhcnQmJihlLT10aGlzLm1vdXNlVXBFbGFwc2VkKSxlKTowfSxnZXQgbW91c2VVcEVsYXBzZWQoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/TWgubm93KCktdGhpcy5tb3VzZVVwU3RhcnQ6MH0sZ2V0IG1vdXNlRG93bkVsYXBzZWRTZWNvbmRzKCl7cmV0dXJuIHRoaXMubW91c2VEb3duRWxhcHNlZC8xZTN9LGdldCBtb3VzZVVwRWxhcHNlZFNlY29uZHMoKXtyZXR1cm4gdGhpcy5tb3VzZVVwRWxhcHNlZC8xZTN9LGdldCBtb3VzZUludGVyYWN0aW9uU2Vjb25kcygpe3JldHVybiB0aGlzLm1vdXNlRG93bkVsYXBzZWRTZWNvbmRzK3RoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzfSxnZXQgaW5pdGlhbE9wYWNpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50LmluaXRpYWxPcGFjaXR5fSxnZXQgb3BhY2l0eURlY2F5VmVsb2NpdHkoKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm9wYWNpdHlEZWNheVZlbG9jaXR5fSxnZXQgcmFkaXVzKCl7dmFyIGU9dGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoKnRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aCx0PXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQqdGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodCxyPU1hdGgubWluKE1hdGguc3FydChlK3QpLGdfLk1BWF9SQURJVVMpKjEuMSs1LG49MS4xLS4yKihyL2dfLk1BWF9SQURJVVMpLGk9dGhpcy5tb3VzZUludGVyYWN0aW9uU2Vjb25kcy9uLG89ciooMS1NYXRoLnBvdyg4MCwtaSkpO3JldHVybiBNYXRoLmFicyhvKX0sZ2V0IG9wYWNpdHkoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/TWF0aC5tYXgoMCx0aGlzLmluaXRpYWxPcGFjaXR5LXRoaXMubW91c2VVcEVsYXBzZWRTZWNvbmRzKnRoaXMub3BhY2l0eURlY2F5VmVsb2NpdHkpOnRoaXMuaW5pdGlhbE9wYWNpdHl9LGdldCBvdXRlck9wYWNpdHkoKXt2YXIgZT10aGlzLm1vdXNlVXBFbGFwc2VkU2Vjb25kcyouMyx0PXRoaXMub3BhY2l0eTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihlLHQpKX0sZ2V0IGlzT3BhY2l0eUZ1bGx5RGVjYXllZCgpe3JldHVybiB0aGlzLm9wYWNpdHk8LjAxJiZ0aGlzLnJhZGl1cz49TWF0aC5taW4odGhpcy5tYXhSYWRpdXMsZ18uTUFYX1JBRElVUyl9LGdldCBpc1Jlc3RpbmdBdE1heFJhZGl1cygpe3JldHVybiB0aGlzLm9wYWNpdHk+PXRoaXMuaW5pdGlhbE9wYWNpdHkmJnRoaXMucmFkaXVzPj1NYXRoLm1pbih0aGlzLm1heFJhZGl1cyxnXy5NQVhfUkFESVVTKX0sZ2V0IGlzQW5pbWF0aW9uQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5tb3VzZVVwU3RhcnQ/dGhpcy5pc09wYWNpdHlGdWxseURlY2F5ZWQ6dGhpcy5pc1Jlc3RpbmdBdE1heFJhZGl1c30sZ2V0IHRyYW5zbGF0aW9uRnJhY3Rpb24oKXtyZXR1cm4gTWF0aC5taW4oMSx0aGlzLnJhZGl1cy90aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSoyL01hdGguc3FydCgyKSl9LGdldCB4Tm93KCl7cmV0dXJuIHRoaXMueEVuZD90aGlzLnhTdGFydCt0aGlzLnRyYW5zbGF0aW9uRnJhY3Rpb24qKHRoaXMueEVuZC10aGlzLnhTdGFydCk6dGhpcy54U3RhcnR9LGdldCB5Tm93KCl7cmV0dXJuIHRoaXMueUVuZD90aGlzLnlTdGFydCt0aGlzLnRyYW5zbGF0aW9uRnJhY3Rpb24qKHRoaXMueUVuZC10aGlzLnlTdGFydCk6dGhpcy55U3RhcnR9LGdldCBpc01vdXNlRG93bigpe3JldHVybiB0aGlzLm1vdXNlRG93blN0YXJ0JiYhdGhpcy5tb3VzZVVwU3RhcnR9LHJlc2V0SW50ZXJhY3Rpb25TdGF0ZTpmdW5jdGlvbigpe3RoaXMubWF4UmFkaXVzPTAsdGhpcy5tb3VzZURvd25TdGFydD0wLHRoaXMubW91c2VVcFN0YXJ0PTAsdGhpcy54U3RhcnQ9MCx0aGlzLnlTdGFydD0wLHRoaXMueEVuZD0wLHRoaXMueUVuZD0wLHRoaXMuc2xpZGVEaXN0YW5jZT0wLHRoaXMuY29udGFpbmVyTWV0cmljcz1uZXcgbzB0KHRoaXMuZWxlbWVudCl9LGRyYXc6ZnVuY3Rpb24oKXt2YXIgZSx0LHI7dGhpcy53YXZlLnN0eWxlLm9wYWNpdHk9dGhpcy5vcGFjaXR5LGU9dGhpcy5yYWRpdXMvKHRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplLzIpLHQ9dGhpcy54Tm93LXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHI9dGhpcy55Tm93LXRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMix0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJ0cmFuc2xhdGUoIit0KyJweCwgIityKyJweCkiLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm09InRyYW5zbGF0ZTNkKCIrdCsicHgsICIrcisicHgsIDApIix0aGlzLndhdmUuc3R5bGUud2Via2l0VHJhbnNmb3JtPSJzY2FsZSgiK2UrIiwiK2UrIikiLHRoaXMud2F2ZS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoIitlKyIsIitlKyIsMSkifSxkb3duQWN0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY29udGFpbmVyTWV0cmljcy53aWR0aC8yLHI9dGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC8yO3RoaXMucmVzZXRJbnRlcmFjdGlvblN0YXRlKCksdGhpcy5tb3VzZURvd25TdGFydD1NaC5ub3coKSx0aGlzLmNlbnRlcj8odGhpcy54U3RhcnQ9dCx0aGlzLnlTdGFydD1yLHRoaXMuc2xpZGVEaXN0YW5jZT1NaC5kaXN0YW5jZSh0aGlzLnhTdGFydCx0aGlzLnlTdGFydCx0aGlzLnhFbmQsdGhpcy55RW5kKSk6KHRoaXMueFN0YXJ0PWU/ZS5kZXRhaWwueC10aGlzLmNvbnRhaW5lck1ldHJpY3MuYm91bmRpbmdSZWN0LmxlZnQ6dGhpcy5jb250YWluZXJNZXRyaWNzLndpZHRoLzIsdGhpcy55U3RhcnQ9ZT9lLmRldGFpbC55LXRoaXMuY29udGFpbmVyTWV0cmljcy5ib3VuZGluZ1JlY3QudG9wOnRoaXMuY29udGFpbmVyTWV0cmljcy5oZWlnaHQvMiksdGhpcy5yZWNlbnRlcnMmJih0aGlzLnhFbmQ9dCx0aGlzLnlFbmQ9cix0aGlzLnNsaWRlRGlzdGFuY2U9TWguZGlzdGFuY2UodGhpcy54U3RhcnQsdGhpcy55U3RhcnQsdGhpcy54RW5kLHRoaXMueUVuZCkpLHRoaXMubWF4UmFkaXVzPXRoaXMuY29udGFpbmVyTWV0cmljcy5mdXJ0aGVzdENvcm5lckRpc3RhbmNlRnJvbSh0aGlzLnhTdGFydCx0aGlzLnlTdGFydCksdGhpcy53YXZlQ29udGFpbmVyLnN0eWxlLnRvcD0odGhpcy5jb250YWluZXJNZXRyaWNzLmhlaWdodC10aGlzLmNvbnRhaW5lck1ldHJpY3Muc2l6ZSkvMisicHgiLHRoaXMud2F2ZUNvbnRhaW5lci5zdHlsZS5sZWZ0PSh0aGlzLmNvbnRhaW5lck1ldHJpY3Mud2lkdGgtdGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUpLzIrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUud2lkdGg9dGhpcy5jb250YWluZXJNZXRyaWNzLnNpemUrInB4Iix0aGlzLndhdmVDb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyTWV0cmljcy5zaXplKyJweCJ9LHVwQWN0aW9uOmZ1bmN0aW9uKGUpeyF0aGlzLmlzTW91c2VEb3dufHwodGhpcy5tb3VzZVVwU3RhcnQ9TWgubm93KCkpfSxyZW1vdmU6ZnVuY3Rpb24oKXt6dCh6dCh0aGlzLndhdmVDb250YWluZXIpLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMud2F2ZUNvbnRhaW5lcil9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKCiAgICAgICAgLyogU2VlIFBvbHltZXJFbGVtZW50cy9wYXBlci1iZWhhdmlvcnMvaXNzdWVzLzM0LiBPbiBub24tQ2hyb21lIGJyb3dzZXJzLAogICAgICAgICAqIGNyZWF0aW5nIGEgbm9kZSAod2l0aCBhIHBvc2l0aW9uOmFic29sdXRlKSBpbiB0aGUgbWlkZGxlIG9mIGFuIGV2ZW50CiAgICAgICAgICogaGFuZGxlciAiaW50ZXJydXB0cyIgdGhhdCBldmVudCBoYW5kbGVyICh3aGljaCBoYXBwZW5zIHdoZW4gdGhlCiAgICAgICAgICogcmlwcGxlIGlzIGNyZWF0ZWQgb24gZGVtYW5kKSAqLwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbYW5pbWF0aW5nXSkgewogICAgICAgIC8qIFRoaXMgcmVzb2x2ZXMgYSByZW5kZXJpbmcgaXNzdWUgaW4gQ2hyb21lIChhcyBvZiA0MCkgd2hlcmUgdGhlCiAgICAgICAgICAgcmlwcGxlIGlzIG5vdCBwcm9wZXJseSBjbGlwcGVkIGJ5IGl0cyBwYXJlbnQgKHdoaWNoIG1heSBoYXZlCiAgICAgICAgICAgcm91bmRlZCBjb3JuZXJzKS4gU2VlOiBodHRwOi8vanNiaW4uY29tL3RlbWV4YS80CgogICAgICAgICAgIE5vdGU6IFdlIG9ubHkgYXBwbHkgdGhpcyBzdHlsZSBjb25kaXRpb25hbGx5LiBPdGhlcndpc2UsIHRoZSBicm93c2VyCiAgICAgICAgICAgd2lsbCBjcmVhdGUgYSBuZXcgY29tcG9zaXRpbmcgbGF5ZXIgZm9yIGV2ZXJ5IHJpcHBsZSBlbGVtZW50IG9uIHRoZQogICAgICAgICAgIHBhZ2UsIGFuZCB0aGF0IHdvdWxkIGJlIGJhZC4gKi8KICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CiAgICAgIH0KCiAgICAgICNiYWNrZ3JvdW5kLAogICAgICAjd2F2ZXMsCiAgICAgIC53YXZlLWNvbnRhaW5lciwKICAgICAgLndhdmUgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgICNiYWNrZ3JvdW5kLAogICAgICAud2F2ZSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgI3dhdmVzLAogICAgICAud2F2ZSB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLndhdmUtY29udGFpbmVyLAogICAgICAud2F2ZSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICA6aG9zdCguY2lyY2xlKSAjYmFja2dyb3VuZCwKICAgICAgOmhvc3QoLmNpcmNsZSkgI3dhdmVzIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jaXJjbGUpIC53YXZlLWNvbnRhaW5lciB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJiYWNrZ3JvdW5kIj48L2Rpdj4KICAgIDxkaXYgaWQ9IndhdmVzIj48L2Rpdj4KYCxpczoicGFwZXItcmlwcGxlIixiZWhhdmlvcnM6W09vXSxwcm9wZXJ0aWVzOntpbml0aWFsT3BhY2l0eTp7dHlwZTpOdW1iZXIsdmFsdWU6LjI1fSxvcGFjaXR5RGVjYXlWZWxvY2l0eTp7dHlwZTpOdW1iZXIsdmFsdWU6Ljh9LHJlY2VudGVyczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxjZW50ZXI6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0scmlwcGxlczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sYW5pbWF0aW5nOnt0eXBlOkJvb2xlYW4scmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHZhbHVlOiExfSxob2xkRG93bjp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaG9sZERvd25DaGFuZ2VkIn0sbm9pbms6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2FuaW1hdGluZzp7dHlwZTpCb29sZWFufSxfYm91bmRBbmltYXRlOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYW5pbWF0ZS5iaW5kKHRoaXMpfX19LGdldCB0YXJnZXQoKXtyZXR1cm4gdGhpcy5rZXlFdmVudFRhcmdldH0sa2V5QmluZGluZ3M6eyJlbnRlcjprZXlkb3duIjoiX29uRW50ZXJLZXlkb3duIiwic3BhY2U6a2V5ZG93biI6Il9vblNwYWNlS2V5ZG93biIsInNwYWNlOmtleXVwIjoiX29uU3BhY2VLZXl1cCJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7enQodGhpcykucGFyZW50Tm9kZS5ub2RlVHlwZT09MTE/dGhpcy5rZXlFdmVudFRhcmdldD16dCh0aGlzKS5nZXRPd25lclJvb3QoKS5ob3N0OnRoaXMua2V5RXZlbnRUYXJnZXQ9enQodGhpcykucGFyZW50Tm9kZTt2YXIgZT10aGlzLmtleUV2ZW50VGFyZ2V0O3RoaXMubGlzdGVuKGUsInVwIiwidWlVcEFjdGlvbiIpLHRoaXMubGlzdGVuKGUsImRvd24iLCJ1aURvd25BY3Rpb24iKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLnVubGlzdGVuKHRoaXMua2V5RXZlbnRUYXJnZXQsInVwIiwidWlVcEFjdGlvbiIpLHRoaXMudW5saXN0ZW4odGhpcy5rZXlFdmVudFRhcmdldCwiZG93biIsInVpRG93bkFjdGlvbiIpLHRoaXMua2V5RXZlbnRUYXJnZXQ9bnVsbH0sZ2V0IHNob3VsZEtlZXBBbmltYXRpbmcoKXtmb3IodmFyIGU9MDtlPHRoaXMucmlwcGxlcy5sZW5ndGg7KytlKWlmKCF0aGlzLnJpcHBsZXNbZV0uaXNBbmltYXRpb25Db21wbGV0ZSlyZXR1cm4hMDtyZXR1cm4hMX0sc2ltdWxhdGVkUmlwcGxlOmZ1bmN0aW9uKCl7dGhpcy5kb3duQWN0aW9uKG51bGwpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnVwQWN0aW9uKCl9LDEpfSx1aURvd25BY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5ub2lua3x8dGhpcy5kb3duQWN0aW9uKGUpfSxkb3duQWN0aW9uOmZ1bmN0aW9uKGUpe2lmKCEodGhpcy5ob2xkRG93biYmdGhpcy5yaXBwbGVzLmxlbmd0aD4wKSl7dmFyIHQ9dGhpcy5hZGRSaXBwbGUoKTt0LmRvd25BY3Rpb24oZSksdGhpcy5fYW5pbWF0aW5nfHwodGhpcy5fYW5pbWF0aW5nPSEwLHRoaXMuYW5pbWF0ZSgpKX19LHVpVXBBY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5ub2lua3x8dGhpcy51cEFjdGlvbihlKX0sdXBBY3Rpb246ZnVuY3Rpb24oZSl7dGhpcy5ob2xkRG93bnx8KHRoaXMucmlwcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QudXBBY3Rpb24oZSl9KSx0aGlzLl9hbmltYXRpbmc9ITAsdGhpcy5hbmltYXRlKCkpfSxvbkFuaW1hdGlvbkNvbXBsZXRlOmZ1bmN0aW9uKCl7dGhpcy5fYW5pbWF0aW5nPSExLHRoaXMuJC5iYWNrZ3JvdW5kLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIix0aGlzLmZpcmUoInRyYW5zaXRpb25lbmQiKX0sYWRkUmlwcGxlOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IGdfKHRoaXMpO3JldHVybiB6dCh0aGlzLiQud2F2ZXMpLmFwcGVuZENoaWxkKGUud2F2ZUNvbnRhaW5lciksdGhpcy4kLmJhY2tncm91bmQuc3R5bGUuYmFja2dyb3VuZENvbG9yPWUuY29sb3IsdGhpcy5yaXBwbGVzLnB1c2goZSksdGhpcy5fc2V0QW5pbWF0aW5nKCEwKSxlfSxyZW1vdmVSaXBwbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yaXBwbGVzLmluZGV4T2YoZSk7dDwwfHwodGhpcy5yaXBwbGVzLnNwbGljZSh0LDEpLGUucmVtb3ZlKCksdGhpcy5yaXBwbGVzLmxlbmd0aHx8dGhpcy5fc2V0QW5pbWF0aW5nKCExKSl9LGFuaW1hdGU6ZnVuY3Rpb24oKXtpZighIXRoaXMuX2FuaW1hdGluZyl7dmFyIGUsdDtmb3IoZT0wO2U8dGhpcy5yaXBwbGVzLmxlbmd0aDsrK2UpdD10aGlzLnJpcHBsZXNbZV0sdC5kcmF3KCksdGhpcy4kLmJhY2tncm91bmQuc3R5bGUub3BhY2l0eT10Lm91dGVyT3BhY2l0eSx0LmlzT3BhY2l0eUZ1bGx5RGVjYXllZCYmIXQuaXNSZXN0aW5nQXRNYXhSYWRpdXMmJnRoaXMucmVtb3ZlUmlwcGxlKHQpOyF0aGlzLnNob3VsZEtlZXBBbmltYXRpbmcmJnRoaXMucmlwcGxlcy5sZW5ndGg9PT0wP3RoaXMub25BbmltYXRpb25Db21wbGV0ZSgpOndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYm91bmRBbmltYXRlKX19LGFuaW1hdGVSaXBwbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbmltYXRlKCl9LF9vbkVudGVyS2V5ZG93bjpmdW5jdGlvbigpe3RoaXMudWlEb3duQWN0aW9uKCksdGhpcy5hc3luYyh0aGlzLnVpVXBBY3Rpb24sMSl9LF9vblNwYWNlS2V5ZG93bjpmdW5jdGlvbigpe3RoaXMudWlEb3duQWN0aW9uKCl9LF9vblNwYWNlS2V5dXA6ZnVuY3Rpb24oKXt0aGlzLnVpVXBBY3Rpb24oKX0sX2hvbGREb3duQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3QhPT12b2lkIDAmJihlP3RoaXMuZG93bkFjdGlvbigpOnRoaXMudXBBY3Rpb24oKSl9fSk7dmFyIHN1PXtwcm9wZXJ0aWVzOntub2luazp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbm9pbmtDaGFuZ2VkIn0sX3JpcHBsZUNvbnRhaW5lcjp7dHlwZTpPYmplY3R9fSxfYnV0dG9uU3RhdGVDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5mb2N1c2VkJiZ0aGlzLmVuc3VyZVJpcHBsZSgpfSxfZG93bkhhbmRsZXI6ZnVuY3Rpb24oZSl7WXguX2Rvd25IYW5kbGVyLmNhbGwodGhpcyxlKSx0aGlzLnByZXNzZWQmJnRoaXMuZW5zdXJlUmlwcGxlKGUpfSxlbnN1cmVSaXBwbGU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuaGFzUmlwcGxlKCkpe3RoaXMuX3JpcHBsZT10aGlzLl9jcmVhdGVSaXBwbGUoKSx0aGlzLl9yaXBwbGUubm9pbms9dGhpcy5ub2luazt2YXIgdD10aGlzLl9yaXBwbGVDb250YWluZXJ8fHRoaXMucm9vdDtpZih0JiZ6dCh0KS5hcHBlbmRDaGlsZCh0aGlzLl9yaXBwbGUpLGUpe3ZhciByPXp0KHRoaXMuX3JpcHBsZUNvbnRhaW5lcnx8dGhpcyksbj16dChlKS5yb290VGFyZ2V0O3IuZGVlcENvbnRhaW5zKG4pJiZ0aGlzLl9yaXBwbGUudWlEb3duQWN0aW9uKGUpfX19LGdldFJpcHBsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuX3JpcHBsZX0saGFzUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fcmlwcGxlKX0sX2NyZWF0ZVJpcHBsZTpmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInBhcGVyLXJpcHBsZSIpO3JldHVybiBlfSxfbm9pbmtDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuaGFzUmlwcGxlKCkmJih0aGlzLl9yaXBwbGUubm9pbms9ZSl9fTt2YXIgaFc9e3Byb3BlcnRpZXM6e2VsZXZhdGlvbjp7dHlwZTpOdW1iZXIscmVmbGVjdFRvQXR0cmlidXRlOiEwLHJlYWRPbmx5OiEwfX0sb2JzZXJ2ZXJzOlsiX2NhbGN1bGF0ZUVsZXZhdGlvbihmb2N1c2VkLCBkaXNhYmxlZCwgYWN0aXZlLCBwcmVzc2VkLCByZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSIsIl9jb21wdXRlS2V5Ym9hcmRDbGFzcyhyZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkKSJdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLHRhYmluZGV4OiIwIixhbmltYXRlZDohMH0sX2NhbGN1bGF0ZUVsZXZhdGlvbjpmdW5jdGlvbigpe3ZhciBlPTE7dGhpcy5kaXNhYmxlZD9lPTA6dGhpcy5hY3RpdmV8fHRoaXMucHJlc3NlZD9lPTQ6dGhpcy5yZWNlaXZlZEZvY3VzRnJvbUtleWJvYXJkJiYoZT0zKSx0aGlzLl9zZXRFbGV2YXRpb24oZSl9LF9jb21wdXRlS2V5Ym9hcmRDbGFzczpmdW5jdGlvbihlKXt0aGlzLnRvZ2dsZUNsYXNzKCJrZXlib2FyZC1mb2N1cyIsZSl9LF9zcGFjZUtleURvd25IYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9zcGFjZUtleURvd25IYW5kbGVyLmNhbGwodGhpcyxlKSx0aGlzLmhhc1JpcHBsZSgpJiZ0aGlzLmdldFJpcHBsZSgpLnJpcHBsZXMubGVuZ3RoPDEmJnRoaXMuX3JpcHBsZS51aURvd25BY3Rpb24oKX0sX3NwYWNlS2V5VXBIYW5kbGVyOmZ1bmN0aW9uKGUpe1l4Ll9zcGFjZUtleVVwSGFuZGxlci5jYWxsKHRoaXMsZSksdGhpcy5oYXNSaXBwbGUoKSYmdGhpcy5fcmlwcGxlLnVpVXBBY3Rpb24oKX19LGEwdD1bU2gsRGksc3UsaFddO3ZhciBzMHQ9UWAKICA8c3R5bGUgaW5jbHVkZT0icGFwZXItbWF0ZXJpYWwtc3R5bGVzIj4KICAgIC8qIE5lZWQgdG8gc3BlY2lmeSB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyB0aGUgc3R5bGVzIGltcG9ydGVkIGZyb20gcGFwZXItbWF0ZXJpYWwuICovCiAgICA6aG9zdCB7CiAgICAgIEBhcHBseSAtLWxheW91dC1pbmxpbmU7CiAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG1pbi13aWR0aDogNS4xNGVtOwogICAgICBtYXJnaW46IDAgMC4yOWVtOwogICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICBmb250OiBpbmhlcml0OwogICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICBvdXRsaW5lLXdpZHRoOiAwOwogICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgei1pbmRleDogMDsKICAgICAgcGFkZGluZzogMC43ZW0gMC41N2VtOwoKICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjEiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tMTsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSIyIl0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTI7CiAgICB9CgogICAgOmhvc3QoW2VsZXZhdGlvbj0iMyJdKSB7CiAgICAgIEBhcHBseSAtLXBhcGVyLW1hdGVyaWFsLWVsZXZhdGlvbi0zOwogICAgfQoKICAgIDpob3N0KFtlbGV2YXRpb249IjQiXSkgewogICAgICBAYXBwbHkgLS1wYXBlci1tYXRlcmlhbC1lbGV2YXRpb24tNDsKICAgIH0KCiAgICA6aG9zdChbZWxldmF0aW9uPSI1Il0pIHsKICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWwtZWxldmF0aW9uLTU7CiAgICB9CgogICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIDpob3N0KFtyYWlzZWRdLmtleWJvYXJkLWZvY3VzKSB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tcmFpc2VkLWtleWJvYXJkLWZvY3VzOwogICAgfQoKICAgIDpob3N0KDpub3QoW3JhaXNlZF0pLmtleWJvYXJkLWZvY3VzKSB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBAYXBwbHkgLS1wYXBlci1idXR0b24tZmxhdC1rZXlib2FyZC1mb2N1czsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgIGNvbG9yOiAjYThhOGE4OwogICAgICBjdXJzb3I6IGF1dG87CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwoKICAgICAgQGFwcGx5IC0tcGFwZXItYnV0dG9uLWRpc2FibGVkOwogICAgfQoKICAgIDpob3N0KFtkaXNhYmxlZF1bcmFpc2VkXSkgewogICAgICBiYWNrZ3JvdW5kOiAjZWFlYWVhOwogICAgfQoKCiAgICA6aG9zdChbYW5pbWF0ZWRdKSB7CiAgICAgIEBhcHBseSAtLXNoYWRvdy10cmFuc2l0aW9uOwogICAgfQoKICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1idXR0b24taW5rLWNvbG9yKTsKICAgIH0KICA8L3N0eWxlPgoKICA8c2xvdD48L3Nsb3Q+YDtzMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpzMHQsaXM6InBhcGVyLWJ1dHRvbiIsYmVoYXZpb3JzOlthMHRdLHByb3BlcnRpZXM6e3JhaXNlZDp7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMSxvYnNlcnZlcjoiX2NhbGN1bGF0ZUVsZXZhdGlvbiJ9fSxfY2FsY3VsYXRlRWxldmF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5yYWlzZWQ/aFcuX2NhbGN1bGF0ZUVsZXZhdGlvbi5hcHBseSh0aGlzKTp0aGlzLl9zZXRFbGV2YXRpb24oMCl9fSk7dmFyIGwwdD1RYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZm9yIEdvb2dsZSBwcm9kdWN0cyAqLwoKICAgICAgLS1nb29nbGUtcmVkLTEwMDogI2Y0YzdjMzsKICAgICAgLS1nb29nbGUtcmVkLTMwMDogI2U2N2M3MzsKICAgICAgLS1nb29nbGUtcmVkLTUwMDogI2RiNDQzNzsKICAgICAgLS1nb29nbGUtcmVkLTcwMDogI2M1MzkyOTsKCiAgICAgIC0tZ29vZ2xlLWJsdWUtMTAwOiAjYzZkYWZjOwogICAgICAtLWdvb2dsZS1ibHVlLTMwMDogIzdiYWFmNzsKICAgICAgLS1nb29nbGUtYmx1ZS01MDA6ICM0Mjg1ZjQ7CiAgICAgIC0tZ29vZ2xlLWJsdWUtNzAwOiAjMzM2N2Q2OwoKICAgICAgLS1nb29nbGUtZ3JlZW4tMTAwOiAjYjdlMWNkOwogICAgICAtLWdvb2dsZS1ncmVlbi0zMDA6ICM1N2JiOGE7CiAgICAgIC0tZ29vZ2xlLWdyZWVuLTUwMDogIzBmOWQ1ODsKICAgICAgLS1nb29nbGUtZ3JlZW4tNzAwOiAjMGI4MDQzOwoKICAgICAgLS1nb29nbGUteWVsbG93LTEwMDogI2ZjZThiMjsKICAgICAgLS1nb29nbGUteWVsbG93LTMwMDogI2Y3Y2I0ZDsKICAgICAgLS1nb29nbGUteWVsbG93LTUwMDogI2Y0YjQwMDsKICAgICAgLS1nb29nbGUteWVsbG93LTcwMDogI2YwOTMwMDsKCiAgICAgIC0tZ29vZ2xlLWdyZXktMTAwOiAjZjVmNWY1OwogICAgICAtLWdvb2dsZS1ncmV5LTMwMDogI2UwZTBlMDsKICAgICAgLS1nb29nbGUtZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tZ29vZ2xlLWdyZXktNzAwOiAjNjE2MTYxOwoKICAgICAgLyogTWF0ZXJpYWwgRGVzaWduIGNvbG9yIHBhbGV0dGUgZnJvbSBvbmxpbmUgc3BlYyBkb2N1bWVudCAqLwoKICAgICAgLS1wYXBlci1yZWQtNTA6ICNmZmViZWU7CiAgICAgIC0tcGFwZXItcmVkLTEwMDogI2ZmY2RkMjsKICAgICAgLS1wYXBlci1yZWQtMjAwOiAjZWY5YTlhOwogICAgICAtLXBhcGVyLXJlZC0zMDA6ICNlNTczNzM7CiAgICAgIC0tcGFwZXItcmVkLTQwMDogI2VmNTM1MDsKICAgICAgLS1wYXBlci1yZWQtNTAwOiAjZjQ0MzM2OwogICAgICAtLXBhcGVyLXJlZC02MDA6ICNlNTM5MzU7CiAgICAgIC0tcGFwZXItcmVkLTcwMDogI2QzMmYyZjsKICAgICAgLS1wYXBlci1yZWQtODAwOiAjYzYyODI4OwogICAgICAtLXBhcGVyLXJlZC05MDA6ICNiNzFjMWM7CiAgICAgIC0tcGFwZXItcmVkLWExMDA6ICNmZjhhODA7CiAgICAgIC0tcGFwZXItcmVkLWEyMDA6ICNmZjUyNTI7CiAgICAgIC0tcGFwZXItcmVkLWE0MDA6ICNmZjE3NDQ7CiAgICAgIC0tcGFwZXItcmVkLWE3MDA6ICNkNTAwMDA7CgogICAgICAtLXBhcGVyLXBpbmstNTA6ICNmY2U0ZWM7CiAgICAgIC0tcGFwZXItcGluay0xMDA6ICNmOGJiZDA7CiAgICAgIC0tcGFwZXItcGluay0yMDA6ICNmNDhmYjE7CiAgICAgIC0tcGFwZXItcGluay0zMDA6ICNmMDYyOTI7CiAgICAgIC0tcGFwZXItcGluay00MDA6ICNlYzQwN2E7CiAgICAgIC0tcGFwZXItcGluay01MDA6ICNlOTFlNjM7CiAgICAgIC0tcGFwZXItcGluay02MDA6ICNkODFiNjA7CiAgICAgIC0tcGFwZXItcGluay03MDA6ICNjMjE4NWI7CiAgICAgIC0tcGFwZXItcGluay04MDA6ICNhZDE0NTc7CiAgICAgIC0tcGFwZXItcGluay05MDA6ICM4ODBlNGY7CiAgICAgIC0tcGFwZXItcGluay1hMTAwOiAjZmY4MGFiOwogICAgICAtLXBhcGVyLXBpbmstYTIwMDogI2ZmNDA4MTsKICAgICAgLS1wYXBlci1waW5rLWE0MDA6ICNmNTAwNTc7CiAgICAgIC0tcGFwZXItcGluay1hNzAwOiAjYzUxMTYyOwoKICAgICAgLS1wYXBlci1wdXJwbGUtNTA6ICNmM2U1ZjU7CiAgICAgIC0tcGFwZXItcHVycGxlLTEwMDogI2UxYmVlNzsKICAgICAgLS1wYXBlci1wdXJwbGUtMjAwOiAjY2U5M2Q4OwogICAgICAtLXBhcGVyLXB1cnBsZS0zMDA6ICNiYTY4Yzg7CiAgICAgIC0tcGFwZXItcHVycGxlLTQwMDogI2FiNDdiYzsKICAgICAgLS1wYXBlci1wdXJwbGUtNTAwOiAjOWMyN2IwOwogICAgICAtLXBhcGVyLXB1cnBsZS02MDA6ICM4ZTI0YWE7CiAgICAgIC0tcGFwZXItcHVycGxlLTcwMDogIzdiMWZhMjsKICAgICAgLS1wYXBlci1wdXJwbGUtODAwOiAjNmExYjlhOwogICAgICAtLXBhcGVyLXB1cnBsZS05MDA6ICM0YTE0OGM7CiAgICAgIC0tcGFwZXItcHVycGxlLWExMDA6ICNlYTgwZmM7CiAgICAgIC0tcGFwZXItcHVycGxlLWEyMDA6ICNlMDQwZmI7CiAgICAgIC0tcGFwZXItcHVycGxlLWE0MDA6ICNkNTAwZjk7CiAgICAgIC0tcGFwZXItcHVycGxlLWE3MDA6ICNhYTAwZmY7CgogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTUwOiAjZWRlN2Y2OwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTEwMDogI2QxYzRlOTsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS0yMDA6ICNiMzlkZGI7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtMzAwOiAjOTU3NWNkOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTQwMDogIzdlNTdjMjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS01MDA6ICM2NzNhYjc7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtNjAwOiAjNWUzNWIxOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLTcwMDogIzUxMmRhODsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS04MDA6ICM0NTI3YTA7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtOTAwOiAjMzExYjkyOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWExMDA6ICNiMzg4ZmY7CiAgICAgIC0tcGFwZXItZGVlcC1wdXJwbGUtYTIwMDogIzdjNGRmZjsKICAgICAgLS1wYXBlci1kZWVwLXB1cnBsZS1hNDAwOiAjNjUxZmZmOwogICAgICAtLXBhcGVyLWRlZXAtcHVycGxlLWE3MDA6ICM2MjAwZWE7CgogICAgICAtLXBhcGVyLWluZGlnby01MDogI2U4ZWFmNjsKICAgICAgLS1wYXBlci1pbmRpZ28tMTAwOiAjYzVjYWU5OwogICAgICAtLXBhcGVyLWluZGlnby0yMDA6ICM5ZmE4ZGE7CiAgICAgIC0tcGFwZXItaW5kaWdvLTMwMDogIzc5ODZjYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNDAwOiAjNWM2YmMwOwogICAgICAtLXBhcGVyLWluZGlnby01MDA6ICMzZjUxYjU7CiAgICAgIC0tcGFwZXItaW5kaWdvLTYwMDogIzM5NDlhYjsKICAgICAgLS1wYXBlci1pbmRpZ28tNzAwOiAjMzAzZjlmOwogICAgICAtLXBhcGVyLWluZGlnby04MDA6ICMyODM1OTM7CiAgICAgIC0tcGFwZXItaW5kaWdvLTkwMDogIzFhMjM3ZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTEwMDogIzhjOWVmZjsKICAgICAgLS1wYXBlci1pbmRpZ28tYTIwMDogIzUzNmRmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTQwMDogIzNkNWFmZTsKICAgICAgLS1wYXBlci1pbmRpZ28tYTcwMDogIzMwNGZmZTsKCiAgICAgIC0tcGFwZXItYmx1ZS01MDogI2UzZjJmZDsKICAgICAgLS1wYXBlci1ibHVlLTEwMDogI2JiZGVmYjsKICAgICAgLS1wYXBlci1ibHVlLTIwMDogIzkwY2FmOTsKICAgICAgLS1wYXBlci1ibHVlLTMwMDogIzY0YjVmNjsKICAgICAgLS1wYXBlci1ibHVlLTQwMDogIzQyYTVmNTsKICAgICAgLS1wYXBlci1ibHVlLTUwMDogIzIxOTZmMzsKICAgICAgLS1wYXBlci1ibHVlLTYwMDogIzFlODhlNTsKICAgICAgLS1wYXBlci1ibHVlLTcwMDogIzE5NzZkMjsKICAgICAgLS1wYXBlci1ibHVlLTgwMDogIzE1NjVjMDsKICAgICAgLS1wYXBlci1ibHVlLTkwMDogIzBkNDdhMTsKICAgICAgLS1wYXBlci1ibHVlLWExMDA6ICM4MmIxZmY7CiAgICAgIC0tcGFwZXItYmx1ZS1hMjAwOiAjNDQ4YWZmOwogICAgICAtLXBhcGVyLWJsdWUtYTQwMDogIzI5NzlmZjsKICAgICAgLS1wYXBlci1ibHVlLWE3MDA6ICMyOTYyZmY7CgogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtNTA6ICNlMWY1ZmU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0xMDA6ICNiM2U1ZmM7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0yMDA6ICM4MWQ0ZmE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS0zMDA6ICM0ZmMzZjc7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS00MDA6ICMyOWI2ZjY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS01MDA6ICMwM2E5ZjQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS02MDA6ICMwMzliZTU7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS03MDA6ICMwMjg4ZDE7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS04MDA6ICMwMjc3YmQ7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS05MDA6ICMwMTU3OWI7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hMTAwOiAjODBkOGZmOwogICAgICAtLXBhcGVyLWxpZ2h0LWJsdWUtYTIwMDogIzQwYzRmZjsKICAgICAgLS1wYXBlci1saWdodC1ibHVlLWE0MDA6ICMwMGIwZmY7CiAgICAgIC0tcGFwZXItbGlnaHQtYmx1ZS1hNzAwOiAjMDA5MWVhOwoKICAgICAgLS1wYXBlci1jeWFuLTUwOiAjZTBmN2ZhOwogICAgICAtLXBhcGVyLWN5YW4tMTAwOiAjYjJlYmYyOwogICAgICAtLXBhcGVyLWN5YW4tMjAwOiAjODBkZWVhOwogICAgICAtLXBhcGVyLWN5YW4tMzAwOiAjNGRkMGUxOwogICAgICAtLXBhcGVyLWN5YW4tNDAwOiAjMjZjNmRhOwogICAgICAtLXBhcGVyLWN5YW4tNTAwOiAjMDBiY2Q0OwogICAgICAtLXBhcGVyLWN5YW4tNjAwOiAjMDBhY2MxOwogICAgICAtLXBhcGVyLWN5YW4tNzAwOiAjMDA5N2E3OwogICAgICAtLXBhcGVyLWN5YW4tODAwOiAjMDA4MzhmOwogICAgICAtLXBhcGVyLWN5YW4tOTAwOiAjMDA2MDY0OwogICAgICAtLXBhcGVyLWN5YW4tYTEwMDogIzg0ZmZmZjsKICAgICAgLS1wYXBlci1jeWFuLWEyMDA6ICMxOGZmZmY7CiAgICAgIC0tcGFwZXItY3lhbi1hNDAwOiAjMDBlNWZmOwogICAgICAtLXBhcGVyLWN5YW4tYTcwMDogIzAwYjhkNDsKCiAgICAgIC0tcGFwZXItdGVhbC01MDogI2UwZjJmMTsKICAgICAgLS1wYXBlci10ZWFsLTEwMDogI2IyZGZkYjsKICAgICAgLS1wYXBlci10ZWFsLTIwMDogIzgwY2JjNDsKICAgICAgLS1wYXBlci10ZWFsLTMwMDogIzRkYjZhYzsKICAgICAgLS1wYXBlci10ZWFsLTQwMDogIzI2YTY5YTsKICAgICAgLS1wYXBlci10ZWFsLTUwMDogIzAwOTY4ODsKICAgICAgLS1wYXBlci10ZWFsLTYwMDogIzAwODk3YjsKICAgICAgLS1wYXBlci10ZWFsLTcwMDogIzAwNzk2YjsKICAgICAgLS1wYXBlci10ZWFsLTgwMDogIzAwNjk1YzsKICAgICAgLS1wYXBlci10ZWFsLTkwMDogIzAwNGQ0MDsKICAgICAgLS1wYXBlci10ZWFsLWExMDA6ICNhN2ZmZWI7CiAgICAgIC0tcGFwZXItdGVhbC1hMjAwOiAjNjRmZmRhOwogICAgICAtLXBhcGVyLXRlYWwtYTQwMDogIzFkZTliNjsKICAgICAgLS1wYXBlci10ZWFsLWE3MDA6ICMwMGJmYTU7CgogICAgICAtLXBhcGVyLWdyZWVuLTUwOiAjZThmNWU5OwogICAgICAtLXBhcGVyLWdyZWVuLTEwMDogI2M4ZTZjOTsKICAgICAgLS1wYXBlci1ncmVlbi0yMDA6ICNhNWQ2YTc7CiAgICAgIC0tcGFwZXItZ3JlZW4tMzAwOiAjODFjNzg0OwogICAgICAtLXBhcGVyLWdyZWVuLTQwMDogIzY2YmI2YTsKICAgICAgLS1wYXBlci1ncmVlbi01MDA6ICM0Y2FmNTA7CiAgICAgIC0tcGFwZXItZ3JlZW4tNjAwOiAjNDNhMDQ3OwogICAgICAtLXBhcGVyLWdyZWVuLTcwMDogIzM4OGUzYzsKICAgICAgLS1wYXBlci1ncmVlbi04MDA6ICMyZTdkMzI7CiAgICAgIC0tcGFwZXItZ3JlZW4tOTAwOiAjMWI1ZTIwOwogICAgICAtLXBhcGVyLWdyZWVuLWExMDA6ICNiOWY2Y2E7CiAgICAgIC0tcGFwZXItZ3JlZW4tYTIwMDogIzY5ZjBhZTsKICAgICAgLS1wYXBlci1ncmVlbi1hNDAwOiAjMDBlNjc2OwogICAgICAtLXBhcGVyLWdyZWVuLWE3MDA6ICMwMGM4NTM7CgogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTUwOiAjZjFmOGU5OwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTEwMDogI2RjZWRjODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi0yMDA6ICNjNWUxYTU7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tMzAwOiAjYWVkNTgxOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTQwMDogIzljY2M2NTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi01MDA6ICM4YmMzNGE7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tNjAwOiAjN2NiMzQyOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLTcwMDogIzY4OWYzODsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi04MDA6ICM1NThiMmY7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tOTAwOiAjMzM2OTFlOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWExMDA6ICNjY2ZmOTA7CiAgICAgIC0tcGFwZXItbGlnaHQtZ3JlZW4tYTIwMDogI2IyZmY1OTsKICAgICAgLS1wYXBlci1saWdodC1ncmVlbi1hNDAwOiAjNzZmZjAzOwogICAgICAtLXBhcGVyLWxpZ2h0LWdyZWVuLWE3MDA6ICM2NGRkMTc7CgogICAgICAtLXBhcGVyLWxpbWUtNTA6ICNmOWZiZTc7CiAgICAgIC0tcGFwZXItbGltZS0xMDA6ICNmMGY0YzM7CiAgICAgIC0tcGFwZXItbGltZS0yMDA6ICNlNmVlOWM7CiAgICAgIC0tcGFwZXItbGltZS0zMDA6ICNkY2U3NzU7CiAgICAgIC0tcGFwZXItbGltZS00MDA6ICNkNGUxNTc7CiAgICAgIC0tcGFwZXItbGltZS01MDA6ICNjZGRjMzk7CiAgICAgIC0tcGFwZXItbGltZS02MDA6ICNjMGNhMzM7CiAgICAgIC0tcGFwZXItbGltZS03MDA6ICNhZmI0MmI7CiAgICAgIC0tcGFwZXItbGltZS04MDA6ICM5ZTlkMjQ7CiAgICAgIC0tcGFwZXItbGltZS05MDA6ICM4Mjc3MTc7CiAgICAgIC0tcGFwZXItbGltZS1hMTAwOiAjZjRmZjgxOwogICAgICAtLXBhcGVyLWxpbWUtYTIwMDogI2VlZmY0MTsKICAgICAgLS1wYXBlci1saW1lLWE0MDA6ICNjNmZmMDA7CiAgICAgIC0tcGFwZXItbGltZS1hNzAwOiAjYWVlYTAwOwoKICAgICAgLS1wYXBlci15ZWxsb3ctNTA6ICNmZmZkZTc7CiAgICAgIC0tcGFwZXIteWVsbG93LTEwMDogI2ZmZjljNDsKICAgICAgLS1wYXBlci15ZWxsb3ctMjAwOiAjZmZmNTlkOwogICAgICAtLXBhcGVyLXllbGxvdy0zMDA6ICNmZmYxNzY7CiAgICAgIC0tcGFwZXIteWVsbG93LTQwMDogI2ZmZWU1ODsKICAgICAgLS1wYXBlci15ZWxsb3ctNTAwOiAjZmZlYjNiOwogICAgICAtLXBhcGVyLXllbGxvdy02MDA6ICNmZGQ4MzU7CiAgICAgIC0tcGFwZXIteWVsbG93LTcwMDogI2ZiYzAyZDsKICAgICAgLS1wYXBlci15ZWxsb3ctODAwOiAjZjlhODI1OwogICAgICAtLXBhcGVyLXllbGxvdy05MDA6ICNmNTdmMTc7CiAgICAgIC0tcGFwZXIteWVsbG93LWExMDA6ICNmZmZmOGQ7CiAgICAgIC0tcGFwZXIteWVsbG93LWEyMDA6ICNmZmZmMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE0MDA6ICNmZmVhMDA7CiAgICAgIC0tcGFwZXIteWVsbG93LWE3MDA6ICNmZmQ2MDA7CgogICAgICAtLXBhcGVyLWFtYmVyLTUwOiAjZmZmOGUxOwogICAgICAtLXBhcGVyLWFtYmVyLTEwMDogI2ZmZWNiMzsKICAgICAgLS1wYXBlci1hbWJlci0yMDA6ICNmZmUwODI7CiAgICAgIC0tcGFwZXItYW1iZXItMzAwOiAjZmZkNTRmOwogICAgICAtLXBhcGVyLWFtYmVyLTQwMDogI2ZmY2EyODsKICAgICAgLS1wYXBlci1hbWJlci01MDA6ICNmZmMxMDc7CiAgICAgIC0tcGFwZXItYW1iZXItNjAwOiAjZmZiMzAwOwogICAgICAtLXBhcGVyLWFtYmVyLTcwMDogI2ZmYTAwMDsKICAgICAgLS1wYXBlci1hbWJlci04MDA6ICNmZjhmMDA7CiAgICAgIC0tcGFwZXItYW1iZXItOTAwOiAjZmY2ZjAwOwogICAgICAtLXBhcGVyLWFtYmVyLWExMDA6ICNmZmU1N2Y7CiAgICAgIC0tcGFwZXItYW1iZXItYTIwMDogI2ZmZDc0MDsKICAgICAgLS1wYXBlci1hbWJlci1hNDAwOiAjZmZjNDAwOwogICAgICAtLXBhcGVyLWFtYmVyLWE3MDA6ICNmZmFiMDA7CgogICAgICAtLXBhcGVyLW9yYW5nZS01MDogI2ZmZjNlMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtMTAwOiAjZmZlMGIyOwogICAgICAtLXBhcGVyLW9yYW5nZS0yMDA6ICNmZmNjODA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTMwMDogI2ZmYjc0ZDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNDAwOiAjZmZhNzI2OwogICAgICAtLXBhcGVyLW9yYW5nZS01MDA6ICNmZjk4MDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTYwMDogI2ZiOGMwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtNzAwOiAjZjU3YzAwOwogICAgICAtLXBhcGVyLW9yYW5nZS04MDA6ICNlZjZjMDA7CiAgICAgIC0tcGFwZXItb3JhbmdlLTkwMDogI2U2NTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTEwMDogI2ZmZDE4MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTIwMDogI2ZmYWI0MDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTQwMDogI2ZmOTEwMDsKICAgICAgLS1wYXBlci1vcmFuZ2UtYTcwMDogI2ZmNjUwMDsKCiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNTA6ICNmYmU5ZTc7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtMTAwOiAjZmZjY2JjOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTIwMDogI2ZmYWI5MTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS0zMDA6ICNmZjhhNjU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNDAwOiAjZmY3MDQzOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTUwMDogI2ZmNTcyMjsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS02MDA6ICNmNDUxMWU7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtNzAwOiAjZTY0YTE5OwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLTgwMDogI2Q4NDMxNTsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS05MDA6ICNiZjM2MGM7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTEwMDogI2ZmOWU4MDsKICAgICAgLS1wYXBlci1kZWVwLW9yYW5nZS1hMjAwOiAjZmY2ZTQwOwogICAgICAtLXBhcGVyLWRlZXAtb3JhbmdlLWE0MDA6ICNmZjNkMDA7CiAgICAgIC0tcGFwZXItZGVlcC1vcmFuZ2UtYTcwMDogI2RkMmMwMDsKCiAgICAgIC0tcGFwZXItYnJvd24tNTA6ICNlZmViZTk7CiAgICAgIC0tcGFwZXItYnJvd24tMTAwOiAjZDdjY2M4OwogICAgICAtLXBhcGVyLWJyb3duLTIwMDogI2JjYWFhNDsKICAgICAgLS1wYXBlci1icm93bi0zMDA6ICNhMTg4N2Y7CiAgICAgIC0tcGFwZXItYnJvd24tNDAwOiAjOGQ2ZTYzOwogICAgICAtLXBhcGVyLWJyb3duLTUwMDogIzc5NTU0ODsKICAgICAgLS1wYXBlci1icm93bi02MDA6ICM2ZDRjNDE7CiAgICAgIC0tcGFwZXItYnJvd24tNzAwOiAjNWQ0MDM3OwogICAgICAtLXBhcGVyLWJyb3duLTgwMDogIzRlMzQyZTsKICAgICAgLS1wYXBlci1icm93bi05MDA6ICMzZTI3MjM7CgogICAgICAtLXBhcGVyLWdyZXktNTA6ICNmYWZhZmE7CiAgICAgIC0tcGFwZXItZ3JleS0xMDA6ICNmNWY1ZjU7CiAgICAgIC0tcGFwZXItZ3JleS0yMDA6ICNlZWVlZWU7CiAgICAgIC0tcGFwZXItZ3JleS0zMDA6ICNlMGUwZTA7CiAgICAgIC0tcGFwZXItZ3JleS00MDA6ICNiZGJkYmQ7CiAgICAgIC0tcGFwZXItZ3JleS01MDA6ICM5ZTllOWU7CiAgICAgIC0tcGFwZXItZ3JleS02MDA6ICM3NTc1NzU7CiAgICAgIC0tcGFwZXItZ3JleS03MDA6ICM2MTYxNjE7CiAgICAgIC0tcGFwZXItZ3JleS04MDA6ICM0MjQyNDI7CiAgICAgIC0tcGFwZXItZ3JleS05MDA6ICMyMTIxMjE7CgogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDogI2VjZWZmMTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktMTAwOiAjY2ZkOGRjOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS0yMDA6ICNiMGJlYzU7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTMwMDogIzkwYTRhZTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNDAwOiAjNzg5MDljOwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS01MDA6ICM2MDdkOGI7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTYwMDogIzU0NmU3YTsKICAgICAgLS1wYXBlci1ibHVlLWdyZXktNzAwOiAjNDU1YTY0OwogICAgICAtLXBhcGVyLWJsdWUtZ3JleS04MDA6ICMzNzQ3NGY7CiAgICAgIC0tcGFwZXItYmx1ZS1ncmV5LTkwMDogIzI2MzIzODsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGRhcmsgdGV4dCBvbiBhIGxpZ2h0IGJhY2tncm91bmQgKi8KICAgICAgLS1kYXJrLWRpdmlkZXItb3BhY2l0eTogMC4xMjsKICAgICAgLS1kYXJrLWRpc2FibGVkLW9wYWNpdHk6IDAuMzg7IC8qIG9yIGhpbnQgdGV4dCBvciBpY29uICovCiAgICAgIC0tZGFyay1zZWNvbmRhcnktb3BhY2l0eTogMC41NDsKICAgICAgLS1kYXJrLXByaW1hcnktb3BhY2l0eTogMC44NzsKCiAgICAgIC8qIG9wYWNpdHkgZm9yIGxpZ2h0IHRleHQgb24gYSBkYXJrIGJhY2tncm91bmQgKi8KICAgICAgLS1saWdodC1kaXZpZGVyLW9wYWNpdHk6IDAuMTI7CiAgICAgIC0tbGlnaHQtZGlzYWJsZWQtb3BhY2l0eTogMC4zOyAvKiBvciBoaW50IHRleHQgb3IgaWNvbiAqLwogICAgICAtLWxpZ2h0LXNlY29uZGFyeS1vcGFjaXR5OiAwLjc7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1vcGFjaXR5OiAxLjA7CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KYDtsMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsMHQuY29udGVudCk7dmFyIGMwdD1RYAo8Y3VzdG9tLXN0eWxlPgogIDxzdHlsZSBpcz0iY3VzdG9tLXN0eWxlIj4KICAgIGh0bWwgewogICAgICAvKgogICAgICAgKiBZb3UgY2FuIHVzZSB0aGVzZSBnZW5lcmljIHZhcmlhYmxlcyBpbiB5b3VyIGVsZW1lbnRzIGZvciBlYXN5IHRoZW1pbmcuCiAgICAgICAqIEZvciBleGFtcGxlLCBpZiBhbGwgeW91ciBlbGVtZW50cyB1c2UgXGAtLXByaW1hcnktdGV4dC1jb2xvclxgIGFzIGl0cyBtYWluCiAgICAgICAqIGNvbG9yLCB0aGVuIHN3aXRjaGluZyBmcm9tIGEgbGlnaHQgdG8gYSBkYXJrIHRoZW1lIGlzIGp1c3QgYSBtYXR0ZXIgb2YKICAgICAgICogY2hhbmdpbmcgdGhlIHZhbHVlIG9mIFxgLS1wcmltYXJ5LXRleHQtY29sb3JcYCBpbiB5b3VyIGFwcGxpY2F0aW9uLgogICAgICAgKi8KICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXRleHQtY29sb3IpOwogICAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIC0tc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLXNlY29uZGFyeS1jb2xvcik7CiAgICAgIC0tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbGlnaHQtdGhlbWUtZGlzYWJsZWQtY29sb3IpOwogICAgICAtLWRpdmlkZXItY29sb3I6IHZhcigtLWxpZ2h0LXRoZW1lLWRpdmlkZXItY29sb3IpOwogICAgICAtLWVycm9yLWNvbG9yOiB2YXIoLS1wYXBlci1kZWVwLW9yYW5nZS1hNzAwKTsKCiAgICAgIC8qCiAgICAgICAqIFByaW1hcnkgYW5kIGFjY2VudCBjb2xvcnMuIEFsc28gc2VlIGNvbG9yLmpzIGZvciBtb3JlIGNvbG9ycy4KICAgICAgICovCiAgICAgIC0tcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tbGlnaHQtcHJpbWFyeS1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTEwMCk7CiAgICAgIC0tZGFyay1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNzAwKTsKCiAgICAgIC0tYWNjZW50LWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLWEyMDApOwogICAgICAtLWxpZ2h0LWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hMTAwKTsKICAgICAgLS1kYXJrLWFjY2VudC1jb2xvcjogdmFyKC0tcGFwZXItcGluay1hNDAwKTsKCgogICAgICAvKgogICAgICAgKiBNYXRlcmlhbCBEZXNpZ24gTGlnaHQgYmFja2dyb3VuZCB0aGVtZQogICAgICAgKi8KICAgICAgLS1saWdodC10aGVtZS1iYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOwogICAgICAtLWxpZ2h0LXRoZW1lLWJhc2UtY29sb3I6ICMwMDAwMDA7CiAgICAgIC0tbGlnaHQtdGhlbWUtdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgICAtLWxpZ2h0LXRoZW1lLXNlY29uZGFyeS1jb2xvcjogIzczNzM3MzsgIC8qIGZvciBzZWNvbmRhcnkgdGV4dCBhbmQgaWNvbnMgKi8KICAgICAgLS1saWdodC10aGVtZS1kaXNhYmxlZC1jb2xvcjogIzliOWI5YjsgIC8qIGRpc2FibGVkL2hpbnQgdGV4dCAqLwogICAgICAtLWxpZ2h0LXRoZW1lLWRpdmlkZXItY29sb3I6ICNkYmRiZGI7CgogICAgICAvKgogICAgICAgKiBNYXRlcmlhbCBEZXNpZ24gRGFyayBiYWNrZ3JvdW5kIHRoZW1lCiAgICAgICAqLwogICAgICAtLWRhcmstdGhlbWUtYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgICAtLWRhcmstdGhlbWUtYmFzZS1jb2xvcjogI2ZmZmZmZjsKICAgICAgLS1kYXJrLXRoZW1lLXRleHQtY29sb3I6ICNmZmZmZmY7CiAgICAgIC0tZGFyay10aGVtZS1zZWNvbmRhcnktY29sb3I6ICNiY2JjYmM7ICAvKiBmb3Igc2Vjb25kYXJ5IHRleHQgYW5kIGljb25zICovCiAgICAgIC0tZGFyay10aGVtZS1kaXNhYmxlZC1jb2xvcjogIzY0NjQ2NDsgIC8qIGRpc2FibGVkL2hpbnQgdGV4dCAqLwogICAgICAtLWRhcmstdGhlbWUtZGl2aWRlci1jb2xvcjogIzNjM2MzYzsKCiAgICAgIC8qCiAgICAgICAqIERlcHJlY2F0ZWQgdmFsdWVzIGJlY2F1c2Ugb2YgdGhlaXIgY29uZnVzaW5nIG5hbWVzLgogICAgICAgKi8KICAgICAgLS10ZXh0LXByaW1hcnktY29sb3I6IHZhcigtLWRhcmstdGhlbWUtdGV4dC1jb2xvcik7CiAgICAgIC0tZGVmYXVsdC1wcmltYXJ5LWNvbG9yOiB2YXIoLS1wcmltYXJ5LWNvbG9yKTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT5gO2MwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGMwdC5jb250ZW50KTt2YXIgRWg9e3Byb3BlcnRpZXM6e25hbWU6e3R5cGU6U3RyaW5nfSx2YWx1ZTp7bm90aWZ5OiEwLHR5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt9LGRldGFjaGVkOmZ1bmN0aW9uKCl7fX07dmFyIGZXPW51bGwsVGg9e3Byb3BlcnRpZXM6e3ZhbGlkYXRvcjp7dHlwZTpTdHJpbmd9LGludmFsaWQ6e25vdGlmeTohMCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfaW52YWxpZENoYW5nZWQifX0scmVnaXN0ZXJlZDpmdW5jdGlvbigpe2ZXPW5ldyBnbyh7dHlwZToidmFsaWRhdG9yIn0pfSxfaW52YWxpZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmludmFsaWQ/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtaW52YWxpZCIsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1pbnZhbGlkIil9LGdldCBfdmFsaWRhdG9yKCl7cmV0dXJuIGZXJiZmVy5ieUtleSh0aGlzLnZhbGlkYXRvcil9LGhhc1ZhbGlkYXRvcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWxpZGF0b3IhPW51bGx9LHZhbGlkYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dm9pZCAwJiZ0aGlzLnZhbHVlIT09dm9pZCAwP3RoaXMuaW52YWxpZD0hdGhpcy5fZ2V0VmFsaWRpdHkodGhpcy52YWx1ZSk6dGhpcy5pbnZhbGlkPSF0aGlzLl9nZXRWYWxpZGl0eShlKSwhdGhpcy5pbnZhbGlkfSxfZ2V0VmFsaWRpdHk6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFzVmFsaWRhdG9yKCk/dGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlKGUpOiEwfX07dmFyIHBXPXtwcm9wZXJ0aWVzOntjaGVja2VkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG5vdGlmeTohMCxvYnNlcnZlcjoiX2NoZWNrZWRDaGFuZ2VkIn0sdG9nZ2xlczp7dHlwZTpCb29sZWFuLHZhbHVlOiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiIsb2JzZXJ2ZXI6Il92YWx1ZUNoYW5nZWQifX0sb2JzZXJ2ZXJzOlsiX3JlcXVpcmVkQ2hhbmdlZChyZXF1aXJlZCkiXSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5faGFzSXJvbkNoZWNrZWRFbGVtZW50QmVoYXZpb3I9ITB9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMucmVxdWlyZWR8fHRoaXMuY2hlY2tlZH0sX3JlcXVpcmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMucmVxdWlyZWQ/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtcmVxdWlyZWQiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtcmVxdWlyZWQiKX0sX2NoZWNrZWRDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmU9dGhpcy5jaGVja2VkLHRoaXMuZmlyZSgiaXJvbi1jaGFuZ2UiKX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbigpeyh0aGlzLnZhbHVlPT09dm9pZCAwfHx0aGlzLnZhbHVlPT09bnVsbCkmJih0aGlzLnZhbHVlPSJvbiIpfX0sdTB0PVtFaCxUaCxwV107dmFyIGZFPXtvYnNlcnZlcnM6WyJfZm9jdXNlZENoYW5nZWQocmVjZWl2ZWRGb2N1c0Zyb21LZXlib2FyZCkiXSxfZm9jdXNlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5lbnN1cmVSaXBwbGUoKSx0aGlzLmhhc1JpcHBsZSgpJiYodGhpcy5fcmlwcGxlLmhvbGREb3duPWUpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7dmFyIGU9c3UuX2NyZWF0ZVJpcHBsZSgpO3JldHVybiBlLmlkPSJpbmsiLGUuc2V0QXR0cmlidXRlKCJjZW50ZXIiLCIiKSxlLmNsYXNzTGlzdC5hZGQoImNpcmNsZSIpLGV9fSxqeD1bU2gsRGksc3UsZkVdO3ZhciBUYmU9e19jaGVja2VkQ2hhbmdlZDpmdW5jdGlvbigpe3BXLl9jaGVja2VkQ2hhbmdlZC5jYWxsKHRoaXMpLHRoaXMuaGFzUmlwcGxlKCkmJih0aGlzLmNoZWNrZWQ/dGhpcy5fcmlwcGxlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsIiIpOnRoaXMuX3JpcHBsZS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKSl9LF9idXR0b25TdGF0ZUNoYW5nZWQ6ZnVuY3Rpb24oKXtzdS5fYnV0dG9uU3RhdGVDaGFuZ2VkLmNhbGwodGhpcyksIXRoaXMuZGlzYWJsZWQmJnRoaXMuaXNBdHRhY2hlZCYmKHRoaXMuY2hlY2tlZD10aGlzLmFjdGl2ZSl9fSxYeD1bangsdTB0LFRiZV07dmFyIGgwdD1RYDxzdHlsZT4KICA6aG9zdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LXNpemU6IHZhcigtLXBhcGVyLWNoZWNrYm94LXNpemUsIDE4cHgpOwogICAgLyogLTFweCBpcyBhIHNlbnRpbmVsIGZvciB0aGUgZGVmYXVsdCBhbmQgaXMgcmVwbGFjZWQgaW4gXGBhdHRhY2hlZFxgLiAqLwogICAgLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplOiB2YXIoLS1wYXBlci1jaGVja2JveC1pbmstc2l6ZSwgLTFweCk7CiAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgbGluZS1oZWlnaHQ6IDA7CiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogIH0KCiAgOmhvc3QoW2hpZGRlbl0pIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9CgogIDpob3N0KDpmb2N1cykgewogICAgb3V0bGluZTogbm9uZTsKICB9CgogIC5oaWRkZW4gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogICNjaGVja2JveENvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgIG1pbi13aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKTsKICAgIG1hcmdpbjogdmFyKC0tcGFwZXItY2hlY2tib3gtbWFyZ2luLCBpbml0aWFsKTsKICAgIHZlcnRpY2FsLWFsaWduOiB2YXIoLS1wYXBlci1jaGVja2JveC12ZXJ0aWNhbC1hbGlnbiwgbWlkZGxlKTsKICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgfQoKICAjaW5rIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKCiAgICAvKiBDZW50ZXIgdGhlIHJpcHBsZSBpbiB0aGUgY2hlY2tib3ggYnkgbmVnYXRpdmUgb2Zmc2V0dGluZyBpdCBieQogICAgICogKGlua1dpZHRoIC0gcmlwcGxlV2lkdGgpIC8gMiAqLwogICAgdG9wOiBjYWxjKDBweCAtICh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKSAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpIC8gMik7CiAgICBsZWZ0OiBjYWxjKDBweCAtICh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKSAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpIC8gMik7CiAgICB3aWR0aDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1pbmstc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtaW5rLXNpemUpOwogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgb3BhY2l0eTogMC42OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgfQoKICAjaW5rOmRpcihydGwpIHsKICAgIHJpZ2h0OiBjYWxjKDBweCAtICh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplKSAtIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpIC8gMik7CiAgICBsZWZ0OiBhdXRvOwogIH0KCiAgI2lua1tjaGVja2VkXSB7CiAgICBjb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKICB9CgogICNjaGVja2JveCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyOiBzb2xpZCAycHg7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDBtcywgYm9yZGVyLWNvbG9yIDE0MG1zOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxNDBtcywgYm9yZGVyLWNvbG9yIDE0MG1zOwoKICAgIC13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItY2hlY2tib3gtYW5pbWF0aW9uLWR1cmF0aW9uLCAxNDBtcyk7CiAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICB9CgogIC8qIGNoZWNrYm94IGNoZWNrZWQgYW5pbWF0aW9ucyAqLwogICNjaGVja2JveC5jaGVja2VkICNjaGVja21hcmsgewogICAgLXdlYmtpdC1hbmltYXRpb246IGNoZWNrbWFyay1leHBhbmQgMTQwbXMgZWFzZS1vdXQgZm9yd2FyZHM7CiAgICBhbmltYXRpb246IGNoZWNrbWFyay1leHBhbmQgMTQwbXMgZWFzZS1vdXQgZm9yd2FyZHM7CgogICAgLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLWNoZWNrYm94LWFuaW1hdGlvbi1kdXJhdGlvbiwgMTQwbXMpOwogICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1jaGVja2JveC1hbmltYXRpb24tZHVyYXRpb24sIDE0MG1zKTsKICB9CgogIEAtd2Via2l0LWtleWZyYW1lcyBjaGVja21hcmstZXhwYW5kIHsKICAgIDAlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAsIDApIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgICAxMDAlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgfQoKICBAa2V5ZnJhbWVzIGNoZWNrbWFyay1leHBhbmQgewogICAgMCUgewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDAsIDApIHJvdGF0ZSg0NWRlZyk7CiAgICB9CiAgICAxMDAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSByb3RhdGUoNDVkZWcpOwogICAgfQogIH0KCiAgI2NoZWNrYm94LmNoZWNrZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICAjY2hlY2ttYXJrIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAzNiU7CiAgICBoZWlnaHQ6IDcwJTsKICAgIGJvcmRlci1zdHlsZTogc29saWQ7CiAgICBib3JkZXItdG9wOiBub25lOwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItcmlnaHQtd2lkdGg6IGNhbGMoMi8xNSAqIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSkpOwogICAgYm9yZGVyLWJvdHRvbS13aWR0aDogY2FsYygyLzE1ICogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1jaGVja2JveC1zaXplKSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWNoZWNrbWFyay1jb2xvciwgd2hpdGUpOwogICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiA5NyUgODYlOwogICAgdHJhbnNmb3JtLW9yaWdpbjogOTclIDg2JTsKICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OyAvKiBwcm90ZWN0IGFnYWluc3QgcGFnZS1sZXZlbCBib3gtc2l6aW5nICovCiAgfQoKICAjY2hlY2ttYXJrOmRpcihydGwpIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlIDE0JTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxNCU7CiAgfQoKICAvKiBsYWJlbCAqLwogICNjaGVja2JveExhYmVsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1sYWJlbC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBAYXBwbHkgLS1wYXBlci1jaGVja2JveC1sYWJlbDsKICB9CgogIDpob3N0KFtjaGVja2VkXSkgI2NoZWNrYm94TGFiZWwgewogICAgY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNoZWNrZWQtY29sb3IsIHZhcigtLXBhcGVyLWNoZWNrYm94LWxhYmVsLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKSk7CiAgICBAYXBwbHkgLS1wYXBlci1jaGVja2JveC1sYWJlbC1jaGVja2VkOwogIH0KCiAgI2NoZWNrYm94TGFiZWw6ZGlyKHJ0bCkgewogICAgcGFkZGluZy1yaWdodDogdmFyKC0tcGFwZXItY2hlY2tib3gtbGFiZWwtc3BhY2luZywgOHB4KTsKICAgIHBhZGRpbmctbGVmdDogMDsKICB9CgogICNjaGVja2JveExhYmVsW2hpZGRlbl0gewogICAgZGlzcGxheTogbm9uZTsKICB9CgogIC8qIGRpc2FibGVkIHN0YXRlICovCgogIDpob3N0KFtkaXNhYmxlZF0pICNjaGVja2JveCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjY2hlY2tib3ggewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNTsKICB9CgogIDpob3N0KFtkaXNhYmxlZF0pICNjaGVja2JveExhYmVsICB7CiAgICBvcGFjaXR5OiAwLjY1OwogIH0KCiAgLyogaW52YWxpZCBzdGF0ZSAqLwogICNjaGVja2JveC5pbnZhbGlkOm5vdCguY2hlY2tlZCkgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wYXBlci1jaGVja2JveC1lcnJvci1jb2xvciwgdmFyKC0tZXJyb3ItY29sb3IpKTsKICB9Cjwvc3R5bGU+Cgo8ZGl2IGlkPSJjaGVja2JveENvbnRhaW5lciI+CiAgPGRpdiBpZD0iY2hlY2tib3giIGNsYXNzJD0iW1tfY29tcHV0ZUNoZWNrYm94Q2xhc3MoY2hlY2tlZCwgaW52YWxpZCldXSI+CiAgICA8ZGl2IGlkPSJjaGVja21hcmsiIGNsYXNzJD0iW1tfY29tcHV0ZUNoZWNrbWFya0NsYXNzKGNoZWNrZWQpXV0iPjwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9ImNoZWNrYm94TGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gO2gwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOmgwdCxpczoicGFwZXItY2hlY2tib3giLGJlaGF2aW9yczpbWHhdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJjaGVja2JveCIsImFyaWEtY2hlY2tlZCI6ITEsdGFiaW5kZXg6MH0scHJvcGVydGllczp7YXJpYUFjdGl2ZUF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImFyaWEtY2hlY2tlZCJ9fSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLWNoZWNrYm94LWluay1zaXplIikudHJpbSgpO2lmKGU9PT0iLTFweCIpe3ZhciB0PXRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItY2hlY2tib3gtc2l6ZSIpLnRyaW0oKSxyPSJweCIsbj10Lm1hdGNoKC9bQS1aYS16XSskLyk7biE9PW51bGwmJihyPW5bMF0pO3ZhciBpPXBhcnNlRmxvYXQodCksbz04LzMqaTtyPT09InB4IiYmKG89TWF0aC5mbG9vcihvKSxvJTIhPT1pJTImJm8rKyksdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLWNoZWNrYm94LWluay1zaXplIjpvK3J9KX19KX0sX2NvbXB1dGVDaGVja2JveENsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9IiI7cmV0dXJuIGUmJihyKz0iY2hlY2tlZCAiKSx0JiYocis9ImludmFsaWQiKSxyfSxfY29tcHV0ZUNoZWNrbWFya0NsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlPyIiOiJoaWRkZW4ifSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuY2hlY2tib3hDb250YWluZXIsZkUuX2NyZWF0ZVJpcHBsZS5jYWxsKHRoaXMpfX0pO2lmKCF3aW5kb3cucG9seW1lclNraXBMb2FkaW5nRm9udFJvYm90byl7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2UucmVsPSJzdHlsZXNoZWV0IixlLnR5cGU9InRleHQvY3NzIixlLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLGUuaHJlZj0iaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJvYm90bytNb25vOjQwMCw3MDB8Um9ib3RvOjQwMCwzMDAsMzAwaXRhbGljLDQwMGl0YWxpYyw1MDAsNTAwaXRhbGljLDcwMCw3MDBpdGFsaWMiLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoZSl9dmFyIGYwdD1RYDxjdXN0b20tc3R5bGU+CiAgPHN0eWxlIGlzPSJjdXN0b20tc3R5bGUiPgogICAgaHRtbCB7CgogICAgICAvKiBTaGFyZWQgU3R5bGVzICovCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tYmFzZTogewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgJ05vdG8nLCBzYW5zLXNlcmlmOwogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvbW1vbi1jb2RlOiB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsICdDb25zb2xhcycsICdNZW5sbycsIG1vbm9zcGFjZTsKICAgICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb21tb24tZXhwZW5zaXZlLWtlcm5pbmc6IHsKICAgICAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA6IHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH07CgogICAgICAvKiBNYXRlcmlhbCBGb250IFN0eWxlcyAqLwoKICAgICAgLS1wYXBlci1mb250LWRpc3BsYXk0OiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1ub3dyYXA7CgogICAgICAgIGZvbnQtc2l6ZTogMTEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDMwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wNDRlbTsKICAgICAgICBsaW5lLWhlaWdodDogMTIwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTM6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiA1NnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uMDI2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDYwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtZGlzcGxheTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDQ1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMThlbTsKICAgICAgICBsaW5lLWhlaWdodDogNDhweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1kaXNwbGF5MTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMzRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtLjAxZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDQwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtaGVhZGxpbmU6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLS4wMTJlbTsKICAgICAgICBsaW5lLWhlaWdodDogMzJweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC10aXRsZTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjhweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1zdWJoZWFkOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKCiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtYm9keTI6IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwoKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1ib2R5MTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNhcHRpb246IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDExZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH07CgogICAgICAtLXBhcGVyLWZvbnQtbWVudTogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwoKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMjRweDsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1idXR0b246IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLW5vd3JhcDsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDE4ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfTsKCiAgICAgIC0tcGFwZXItZm9udC1jb2RlMjogewogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWNvZGU7CgogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNzAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICB9OwoKICAgICAgLS1wYXBlci1mb250LWNvZGUxOiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tY29kZTsKCiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH07CgogICAgfQoKICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT5gO2YwdC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGYwdC5jb250ZW50KTt2YXIgZFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtkVy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTogbm9uZTsiKTtkVy5pbm5lckhUTUw9YDxkb20tbW9kdWxlIGlkPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAyNHB4IDQwcHg7CgogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLWRpYWxvZy1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTE2ZHA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZGlhbG9nOwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5uby1wYWRkaW5nKSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCo6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICA6aG9zdCA+IDo6c2xvdHRlZCgqOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoaXMgc2VsZWN0b3Igd2FzIFxgOmhvc3QgPiA6OmNvbnRlbnQgaDJcYC4gSW4gMi54IDxzbG90PiBhbGxvd3MKICAgICAgdG8gc2VsZWN0IGRpcmVjdCBjaGlsZHJlbiBvbmx5LCB3aGljaCBpbmNyZWFzZXMgdGhlIHdlaWdodCBvZiB0aGlzCiAgICAgIHNlbGVjdG9yLCBzbyB3ZSBoYXZlIHRvIHJlLWRlZmluZSBmaXJzdC1jaGlsZC9sYXN0LWNoaWxkIG1hcmdpbnMgYmVsb3cuICovCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKGgyKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC10aXRsZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIC8qIEFwcGx5IG1peGluIGFnYWluLCBpbiBjYXNlIGl0IHNldHMgbWFyZ2luLXRvcC4gKi8KICAgICAgOmhvc3QgPiA6OnNsb3R0ZWQoaDI6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy10aXRsZTsKICAgICAgfQoKICAgICAgLyogQXBwbHkgbWl4aW4gYWdhaW4sIGluIGNhc2UgaXQgc2V0cyBtYXJnaW4tYm90dG9tLiAqLwogICAgICA6aG9zdCA+IDo6c2xvdHRlZChoMjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kaWFsb2ctdGl0bGU7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5wYXBlci1kaWFsb2ctYnV0dG9ucyksCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKC5idXR0b25zKSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDhweCA4cHggOHB4IDI0cHg7CiAgICAgICAgbWFyZ2luOiAwOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZGlhbG9nLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZW5kLWp1c3RpZmllZDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRXLmNvbnRlbnQpO3ZhciBwMHQ9e3Byb3BlcnRpZXM6e2FuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGVudHJ5QW5pbWF0aW9uOntvYnNlcnZlcjoiX2VudHJ5QW5pbWF0aW9uQ2hhbmdlZCIsdHlwZTpTdHJpbmd9LGV4aXRBbmltYXRpb246e29ic2VydmVyOiJfZXhpdEFuaW1hdGlvbkNoYW5nZWQiLHR5cGU6U3RyaW5nfX0sX2VudHJ5QW5pbWF0aW9uQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuYW5pbWF0aW9uQ29uZmlnPXRoaXMuYW5pbWF0aW9uQ29uZmlnfHx7fSx0aGlzLmFuaW1hdGlvbkNvbmZpZy5lbnRyeT1be25hbWU6dGhpcy5lbnRyeUFuaW1hdGlvbixub2RlOnRoaXN9XX0sX2V4aXRBbmltYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5hbmltYXRpb25Db25maWc9dGhpcy5hbmltYXRpb25Db25maWd8fHt9LHRoaXMuYW5pbWF0aW9uQ29uZmlnLmV4aXQ9W3tuYW1lOnRoaXMuZXhpdEFuaW1hdGlvbixub2RlOnRoaXN9XX0sX2NvcHlQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIHQpZVtyXT10W3JdfSxfY2xvbmVDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9e2lzQ2xvbmU6ITB9O3JldHVybiB0aGlzLl9jb3B5UHJvcGVydGllcyh0LGUpLHR9LF9nZXRBbmltYXRpb25Db25maWdSZWN1cnNpdmU6ZnVuY3Rpb24oZSx0LHIpe2lmKCEhdGhpcy5hbmltYXRpb25Db25maWcpe2lmKHRoaXMuYW5pbWF0aW9uQ29uZmlnLnZhbHVlJiZ0eXBlb2YgdGhpcy5hbmltYXRpb25Db25maWcudmFsdWU9PSJmdW5jdGlvbiIpe3RoaXMuX3dhcm4odGhpcy5fbG9nZigicGxheUFuaW1hdGlvbiIsIlBsZWFzZSBwdXQgJ2FuaW1hdGlvbkNvbmZpZycgaW5zaWRlIG9mIHlvdXIgY29tcG9uZW50cyAncHJvcGVydGllcycgb2JqZWN0IGluc3RlYWQgb2Ygb3V0c2lkZSBvZiBpdC4iKSk7cmV0dXJufXZhciBuO2lmKGU/bj10aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXTpuPXRoaXMuYW5pbWF0aW9uQ29uZmlnLEFycmF5LmlzQXJyYXkobil8fChuPVtuXSksbilmb3IodmFyIGksbz0wO2k9bltvXTtvKyspaWYoaS5hbmltYXRhYmxlKWkuYW5pbWF0YWJsZS5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKGkudHlwZXx8ZSx0LHIpO2Vsc2UgaWYoaS5pZCl7dmFyIGE9dFtpLmlkXTthPyhhLmlzQ2xvbmV8fCh0W2kuaWRdPXRoaXMuX2Nsb25lQ29uZmlnKGEpLGE9dFtpLmlkXSksdGhpcy5fY29weVByb3BlcnRpZXMoYSxpKSk6dFtpLmlkXT1pfWVsc2Ugci5wdXNoKGkpfX0sZ2V0QW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXt9LHI9W107dGhpcy5fZ2V0QW5pbWF0aW9uQ29uZmlnUmVjdXJzaXZlKGUsdCxyKTtmb3IodmFyIG4gaW4gdClyLnB1c2godFtuXSk7cmV0dXJuIHJ9fTt2YXIgQ2JlPXtfY29uZmlndXJlQW5pbWF0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1bXSxyPVtdO2lmKGUubGVuZ3RoPjApZm9yKGxldCBpLG89MDtpPWVbb107bysrKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGkubmFtZSk7aWYoYS5pc05lb25BbmltYXRpb24pe2xldCBzPW51bGw7YS5jb25maWd1cmV8fChhLmNvbmZpZ3VyZT1mdW5jdGlvbihsKXtyZXR1cm4gbnVsbH0pLHM9YS5jb25maWd1cmUoaSksci5wdXNoKHtyZXN1bHQ6cyxjb25maWc6aSxuZW9uQW5pbWF0aW9uOmF9KX1lbHNlIGNvbnNvbGUud2Fybih0aGlzLmlzKyI6IixpLm5hbWUsIm5vdCBmb3VuZCEiKX1mb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7bGV0IGk9cltuXS5yZXN1bHQsbz1yW25dLmNvbmZpZyxhPXJbbl0ubmVvbkFuaW1hdGlvbjt0cnl7dHlwZW9mIGkuY2FuY2VsIT0iZnVuY3Rpb24iJiYoaT1kb2N1bWVudC50aW1lbGluZS5wbGF5KGkpKX1jYXRjaChzKXtpPW51bGwsY29uc29sZS53YXJuKCJDb3VsZG50IHBsYXkiLCIoIixvLm5hbWUsIikuIixzKX1pJiZ0LnB1c2goe25lb25BbmltYXRpb246YSxjb25maWc6byxhbmltYXRpb246aX0pfXJldHVybiB0fSxfc2hvdWxkQ29tcGxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSEwLHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdLmFuaW1hdGlvbi5wbGF5U3RhdGUhPSJmaW5pc2hlZCIpe3Q9ITE7YnJlYWt9cmV0dXJuIHR9LF9jb21wbGV0ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdLm5lb25BbmltYXRpb24uY29tcGxldGUoZVt0XS5jb25maWcpO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0uYW5pbWF0aW9uLmNhbmNlbCgpfSxwbGF5QW5pbWF0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5nZXRBbmltYXRpb25Db25maWcoZSk7aWYoISFyKXt0aGlzLl9hY3RpdmU9dGhpcy5fYWN0aXZlfHx7fSx0aGlzLl9hY3RpdmVbZV0mJih0aGlzLl9jb21wbGV0ZSh0aGlzLl9hY3RpdmVbZV0pLGRlbGV0ZSB0aGlzLl9hY3RpdmVbZV0pO3ZhciBuPXRoaXMuX2NvbmZpZ3VyZUFuaW1hdGlvbnMocik7aWYobi5sZW5ndGg9PTApe3RoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIix0LHtidWJibGVzOiExfSk7cmV0dXJufXRoaXMuX2FjdGl2ZVtlXT1uO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKW5baV0uYW5pbWF0aW9uLm9uZmluaXNoPWZ1bmN0aW9uKCl7dGhpcy5fc2hvdWxkQ29tcGxldGUobikmJih0aGlzLl9jb21wbGV0ZShuKSxkZWxldGUgdGhpcy5fYWN0aXZlW2VdLHRoaXMuZmlyZSgibmVvbi1hbmltYXRpb24tZmluaXNoIix0LHtidWJibGVzOiExfSkpfS5iaW5kKHRoaXMpfX0sY2FuY2VsQW5pbWF0aW9uOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuX2FjdGl2ZSl7dmFyIHQ9dGhpcy5fYWN0aXZlW2VdO2Zvcih2YXIgciBpbiB0KXRbcl0uYW5pbWF0aW9uLmNhbmNlbCgpfXRoaXMuX2FjdGl2ZT17fX19LHg5PVtwMHQsQ2JlXTt2YXIgYjksQWJlPSgpPT57aWYoYjkhPT12b2lkIDApcmV0dXJuIGI5O2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO09iamVjdC5hc3NpZ24oZS5zdHlsZSx7b3ZlcmZsb3c6ImF1dG8iLHBvc2l0aW9uOiJmaXhlZCIsbGVmdDoiMHB4Iix0b3A6IjBweCIsbWF4V2lkdGg6IjEwMHB4IixtYXhIZWlnaHQ6IjEwMHB4In0pO2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LnN0eWxlLndpZHRoPSIyMDBweCIsdC5zdHlsZS5oZWlnaHQ9IjIwMHB4IixlLmFwcGVuZENoaWxkKHQpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksYjk9TWF0aC5hYnMoZS5vZmZzZXRXaWR0aC0xMDApPjE/ZS5vZmZzZXRXaWR0aC1lLmNsaWVudFdpZHRoOjAsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKSxiOX0sZDB0PXtwcm9wZXJ0aWVzOntzaXppbmdUYXJnZXQ6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSxmaXRJbnRvOnt0eXBlOk9iamVjdCx2YWx1ZTp3aW5kb3d9LG5vT3ZlcmxhcDp7dHlwZTpCb29sZWFufSxwb3NpdGlvblRhcmdldDp7dHlwZTpFbGVtZW50fSxob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nfSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZ30sZHluYW1pY0FsaWduOnt0eXBlOkJvb2xlYW59LGhvcml6b250YWxPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSx2ZXJ0aWNhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LGF1dG9GaXRPbkF0dGFjaDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9maXRJbmZvOnt0eXBlOk9iamVjdH19LGdldCBfZml0V2lkdGgoKXt2YXIgZTtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P2U9dGhpcy5maXRJbnRvLmlubmVyV2lkdGg6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsZX0sZ2V0IF9maXRIZWlnaHQoKXt2YXIgZTtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P2U9dGhpcy5maXRJbnRvLmlubmVySGVpZ2h0OmU9dGhpcy5maXRJbnRvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxlfSxnZXQgX2ZpdExlZnQoKXt2YXIgZTtyZXR1cm4gdGhpcy5maXRJbnRvPT09d2luZG93P2U9MDplPXRoaXMuZml0SW50by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LGV9LGdldCBfZml0VG9wKCl7dmFyIGU7cmV0dXJuIHRoaXMuZml0SW50bz09PXdpbmRvdz9lPTA6ZT10aGlzLmZpdEludG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLGV9LGdldCBfZGVmYXVsdFBvc2l0aW9uVGFyZ2V0KCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZTtyZXR1cm4gZSYmZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmKGU9ZS5ob3N0KSxlfSxnZXQgX2xvY2FsZUhvcml6b250YWxBbGlnbigpe2lmKHRoaXMuX2lzUlRMKXtpZih0aGlzLmhvcml6b250YWxBbGlnbj09PSJyaWdodCIpcmV0dXJuImxlZnQiO2lmKHRoaXMuaG9yaXpvbnRhbEFsaWduPT09ImxlZnQiKXJldHVybiJyaWdodCJ9cmV0dXJuIHRoaXMuaG9yaXpvbnRhbEFsaWdufSxnZXQgX19zaG91bGRQb3NpdGlvbigpe3JldHVybih0aGlzLmhvcml6b250YWxBbGlnbnx8dGhpcy52ZXJ0aWNhbEFsaWduKSYmdGhpcy5wb3NpdGlvblRhcmdldH0sZ2V0IF9pc1JUTCgpe3JldHVybiB0eXBlb2YgdGhpcy5fbWVtb2l6ZWRJc1JUTD09InVuZGVmaW5lZCImJih0aGlzLl9tZW1vaXplZElzUlRMPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbj09InJ0bCIpLHRoaXMuX21lbW9pemVkSXNSVEx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5wb3NpdGlvblRhcmdldD10aGlzLnBvc2l0aW9uVGFyZ2V0fHx0aGlzLl9kZWZhdWx0UG9zaXRpb25UYXJnZXQsdGhpcy5hdXRvRml0T25BdHRhY2gmJih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXNwbGF5PT09Im5vbmUiP3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmZpdCgpfS5iaW5kKHRoaXMpKTood2luZG93LlNoYWR5RE9NJiZTaGFkeURPTS5mbHVzaCgpLHRoaXMuZml0KCkpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fZGVmZXJyZWRGaXQmJihjbGVhclRpbWVvdXQodGhpcy5fX2RlZmVycmVkRml0KSx0aGlzLl9fZGVmZXJyZWRGaXQ9bnVsbCl9LGZpdDpmdW5jdGlvbigpe3RoaXMucG9zaXRpb24oKSx0aGlzLmNvbnN0cmFpbigpLHRoaXMuY2VudGVyKCl9LF9kaXNjb3ZlckluZm86ZnVuY3Rpb24oKXtpZighdGhpcy5fZml0SW5mbyl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyksdD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnNpemluZ1RhcmdldCk7dGhpcy5fZml0SW5mbz17aW5saW5lU3R5bGU6e3RvcDp0aGlzLnN0eWxlLnRvcHx8IiIsbGVmdDp0aGlzLnN0eWxlLmxlZnR8fCIiLHBvc2l0aW9uOnRoaXMuc3R5bGUucG9zaXRpb258fCIifSxzaXplcklubGluZVN0eWxlOnttYXhXaWR0aDp0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5tYXhXaWR0aHx8IiIsbWF4SGVpZ2h0OnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodHx8IiIsYm94U2l6aW5nOnRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLmJveFNpemluZ3x8IiJ9LHBvc2l0aW9uZWRCeTp7dmVydGljYWxseTplLnRvcCE9PSJhdXRvIj8idG9wIjplLmJvdHRvbSE9PSJhdXRvIj8iYm90dG9tIjpudWxsLGhvcml6b250YWxseTplLmxlZnQhPT0iYXV0byI/ImxlZnQiOmUucmlnaHQhPT0iYXV0byI/InJpZ2h0IjpudWxsfSxzaXplZEJ5OntoZWlnaHQ6dC5tYXhIZWlnaHQhPT0ibm9uZSIsd2lkdGg6dC5tYXhXaWR0aCE9PSJub25lIixtaW5XaWR0aDpwYXJzZUludCh0Lm1pbldpZHRoLDEwKXx8MCxtaW5IZWlnaHQ6cGFyc2VJbnQodC5taW5IZWlnaHQsMTApfHwwfSxtYXJnaW46e3RvcDpwYXJzZUludChlLm1hcmdpblRvcCwxMCl8fDAscmlnaHQ6cGFyc2VJbnQoZS5tYXJnaW5SaWdodCwxMCl8fDAsYm90dG9tOnBhcnNlSW50KGUubWFyZ2luQm90dG9tLDEwKXx8MCxsZWZ0OnBhcnNlSW50KGUubWFyZ2luTGVmdCwxMCl8fDB9fX19LHJlc2V0Rml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZml0SW5mb3x8e307Zm9yKHZhciB0IGluIGUuc2l6ZXJJbmxpbmVTdHlsZSl0aGlzLnNpemluZ1RhcmdldC5zdHlsZVt0XT1lLnNpemVySW5saW5lU3R5bGVbdF07Zm9yKHZhciB0IGluIGUuaW5saW5lU3R5bGUpdGhpcy5zdHlsZVt0XT1lLmlubGluZVN0eWxlW3RdO3RoaXMuX2ZpdEluZm89bnVsbH0scmVmaXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNpemluZ1RhcmdldC5zY3JvbGxMZWZ0LHQ9dGhpcy5zaXppbmdUYXJnZXQuc2Nyb2xsVG9wO3RoaXMucmVzZXRGaXQoKSx0aGlzLmZpdCgpLHRoaXMuc2l6aW5nVGFyZ2V0LnNjcm9sbExlZnQ9ZSx0aGlzLnNpemluZ1RhcmdldC5zY3JvbGxUb3A9dH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Nob3VsZFBvc2l0aW9uKXJldHVybjt0aGlzLl9kaXNjb3ZlckluZm8oKSx3aW5kb3cuU2hhZHlET00mJndpbmRvdy5TaGFkeURPTS5mbHVzaCgpLHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnNpemluZ1RhcmdldC5zdHlsZS5ib3hTaXppbmc9ImJvcmRlci1ib3giLHRoaXMuc3R5bGUubGVmdD0iMHB4Iix0aGlzLnN0eWxlLnRvcD0iMHB4Ijt2YXIgZT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHQ9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMucG9zaXRpb25UYXJnZXQpLHI9dGhpcy5fX2dldE5vcm1hbGl6ZWRSZWN0KHRoaXMuZml0SW50byk7bGV0IG4saSxvLGE7dGhpcy5leHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzJiYobj10aGlzLnNpemluZ1RhcmdldC5vZmZzZXRXaWR0aCxpPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCxvPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudFdpZHRoLGE9dGhpcy5zaXppbmdUYXJnZXQuY2xpZW50SGVpZ2h0KTt2YXIgcz10aGlzLl9maXRJbmZvLm1hcmdpbixsPXt3aWR0aDplLndpZHRoK3MubGVmdCtzLnJpZ2h0LGhlaWdodDplLmhlaWdodCtzLnRvcCtzLmJvdHRvbX0sYz10aGlzLl9fZ2V0UG9zaXRpb24odGhpcy5fbG9jYWxlSG9yaXpvbnRhbEFsaWduLHRoaXMudmVydGljYWxBbGlnbixsLGUsdCxyKSx1PWMubGVmdCtzLmxlZnQsaD1jLnRvcCtzLnRvcCxmPU1hdGgubWluKHIucmlnaHQtcy5yaWdodCx1K2Uud2lkdGgpLHA9TWF0aC5taW4oci5ib3R0b20tcy5ib3R0b20saCtlLmhlaWdodCk7dT1NYXRoLm1heChyLmxlZnQrcy5sZWZ0LE1hdGgubWluKHUsZi10aGlzLl9maXRJbmZvLnNpemVkQnkubWluV2lkdGgpKSxoPU1hdGgubWF4KHIudG9wK3MudG9wLE1hdGgubWluKGgscC10aGlzLl9maXRJbmZvLnNpemVkQnkubWluSGVpZ2h0KSk7bGV0IGQ9TWF0aC5tYXgoZi11LHRoaXMuX2ZpdEluZm8uc2l6ZWRCeS5taW5XaWR0aCksZz1NYXRoLm1heChwLWgsdGhpcy5fZml0SW5mby5zaXplZEJ5Lm1pbkhlaWdodCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9ZCsicHgiLHRoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlLm1heEhlaWdodD1nKyJweCI7bGV0IF89dS1lLmxlZnQseT1oLWUudG9wO2lmKHRoaXMuc3R5bGUubGVmdD1gJHtffXB4YCx0aGlzLnN0eWxlLnRvcD1gJHt5fXB4YCx0aGlzLmV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnMpe2xldCB4PXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCxiPXRoaXMuc2l6aW5nVGFyZ2V0LmNsaWVudEhlaWdodCxTPWktYSxQPXgtYi1TO2lmKFA+MCl7bGV0IEw9ci5oZWlnaHQtcy50b3Atcy5ib3R0b20sUj1NYXRoLm1pbihMLGcrUCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4SGVpZ2h0PWAke1J9cHhgO2xldCBGPXRoaXMuc2l6aW5nVGFyZ2V0Lm9mZnNldEhlaWdodCx6PUYteCxVO2MudmVydGljYWxBbGlnbj09PSJ0b3AiP1U9eTpjLnZlcnRpY2FsQWxpZ249PT0ibWlkZGxlIj9VPXktei8yOmMudmVydGljYWxBbGlnbj09PSJib3R0b20iJiYoVT15LXopLFU9TWF0aC5tYXgoci50b3Arcy50b3AsTWF0aC5taW4oVSxyLmJvdHRvbS1zLmJvdHRvbS1GKSksdGhpcy5zdHlsZS50b3A9YCR7VX1weGB9bGV0IGs9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgsTz10aGlzLnNpemluZ1RhcmdldC5jbGllbnRXaWR0aCxEPW4tbyxJPWstTy1EO2lmKEk+MCl7bGV0IEw9QWJlKCksUj1yLndpZHRoLXMubGVmdC1zLnJpZ2h0LEY9TWF0aC5taW4oUixkK0ktTCk7dGhpcy5zaXppbmdUYXJnZXQuc3R5bGUubWF4V2lkdGg9YCR7Rn1weGA7bGV0IHo9dGhpcy5zaXppbmdUYXJnZXQub2Zmc2V0V2lkdGgrTCxVPXotayxXO2MuaG9yaXpvbnRhbEFsaWduPT09ImxlZnQiP1c9XzpjLmhvcml6b250YWxBbGlnbj09PSJjZW50ZXIiP1c9Xy1VLzI6Yy5ob3Jpem9udGFsQWxpZ249PT0icmlnaHQiJiYoVz1fLVUpLFc9TWF0aC5tYXgoci5sZWZ0K3MubGVmdCxNYXRoLm1pbihXLHIucmlnaHQtcy5yaWdodC16KSksdGhpcy5zdHlsZS5sZWZ0PWAke1d9cHhgfX19LGNvbnN0cmFpbjpmdW5jdGlvbigpe2lmKCF0aGlzLl9fc2hvdWxkUG9zaXRpb24pe3RoaXMuX2Rpc2NvdmVySW5mbygpO3ZhciBlPXRoaXMuX2ZpdEluZm87ZS5wb3NpdGlvbmVkQnkudmVydGljYWxseXx8KHRoaXMuc3R5bGUucG9zaXRpb249ImZpeGVkIix0aGlzLnN0eWxlLnRvcD0iMHB4IiksZS5wb3NpdGlvbmVkQnkuaG9yaXpvbnRhbGx5fHwodGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLHRoaXMuc3R5bGUubGVmdD0iMHB4IiksdGhpcy5zaXppbmdUYXJnZXQuc3R5bGUuYm94U2l6aW5nPSJib3JkZXItYm94Ijt2YXIgdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Uuc2l6ZWRCeS5oZWlnaHR8fHRoaXMuX19zaXplRGltZW5zaW9uKHQsZS5wb3NpdGlvbmVkQnkudmVydGljYWxseSwidG9wIiwiYm90dG9tIiwiSGVpZ2h0IiksZS5zaXplZEJ5LndpZHRofHx0aGlzLl9fc2l6ZURpbWVuc2lvbih0LGUucG9zaXRpb25lZEJ5Lmhvcml6b250YWxseSwibGVmdCIsInJpZ2h0IiwiV2lkdGgiKX19LF9zaXplRGltZW5zaW9uOmZ1bmN0aW9uKGUsdCxyLG4saSl7dGhpcy5fX3NpemVEaW1lbnNpb24oZSx0LHIsbixpKX0sX19zaXplRGltZW5zaW9uOmZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIG89dGhpcy5fZml0SW5mbyxhPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pLHM9aT09PSJXaWR0aCI/YS53aWR0aDphLmhlaWdodCxsPXQ9PT1uLGM9bD9zLWVbbl06ZVtyXSx1PW8ubWFyZ2luW2w/cjpuXSxoPSJvZmZzZXQiK2ksZj10aGlzW2hdLXRoaXMuc2l6aW5nVGFyZ2V0W2hdO3RoaXMuc2l6aW5nVGFyZ2V0LnN0eWxlWyJtYXgiK2ldPXMtdS1jLWYrInB4In0sY2VudGVyOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX19zaG91bGRQb3NpdGlvbil7dGhpcy5fZGlzY292ZXJJbmZvKCk7dmFyIGU9dGhpcy5fZml0SW5mby5wb3NpdGlvbmVkQnk7aWYoIShlLnZlcnRpY2FsbHkmJmUuaG9yaXpvbnRhbGx5KSl7dGhpcy5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGUudmVydGljYWxseXx8KHRoaXMuc3R5bGUudG9wPSIwcHgiKSxlLmhvcml6b250YWxseXx8KHRoaXMuc3R5bGUubGVmdD0iMHB4Iik7dmFyIHQ9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxyPXRoaXMuX19nZXROb3JtYWxpemVkUmVjdCh0aGlzLmZpdEludG8pO2lmKCFlLnZlcnRpY2FsbHkpe3ZhciBuPXIudG9wLXQudG9wKyhyLmhlaWdodC10LmhlaWdodCkvMjt0aGlzLnN0eWxlLnRvcD1uKyJweCJ9aWYoIWUuaG9yaXpvbnRhbGx5KXt2YXIgaT1yLmxlZnQtdC5sZWZ0KyhyLndpZHRoLXQud2lkdGgpLzI7dGhpcy5zdHlsZS5sZWZ0PWkrInB4In19fX0sX19nZXROb3JtYWxpemVkUmVjdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8ZT09PXdpbmRvdz97dG9wOjAsbGVmdDowLHdpZHRoOndpbmRvdy5pbm5lcldpZHRoLGhlaWdodDp3aW5kb3cuaW5uZXJIZWlnaHQscmlnaHQ6d2luZG93LmlubmVyV2lkdGgsYm90dG9tOndpbmRvdy5pbm5lckhlaWdodH06ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX0sX19nZXRPZmZzY3JlZW5BcmVhOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1NYXRoLm1pbigwLGUudG9wKStNYXRoLm1pbigwLHIuYm90dG9tLShlLnRvcCt0LmhlaWdodCkpLGk9TWF0aC5taW4oMCxlLmxlZnQpK01hdGgubWluKDAsci5yaWdodC0oZS5sZWZ0K3Qud2lkdGgpKTtyZXR1cm4gTWF0aC5hYnMobikqdC53aWR0aCtNYXRoLmFicyhpKSp0LmhlaWdodH0sX19nZXRQb3NpdGlvbjpmdW5jdGlvbihlLHQscixuLGksbyl7dmFyIGE9W3t2ZXJ0aWNhbEFsaWduOiJ0b3AiLGhvcml6b250YWxBbGlnbjoibGVmdCIsdG9wOmkudG9wK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoidG9wIixob3Jpem9udGFsQWxpZ246InJpZ2h0Iix0b3A6aS50b3ArdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXR9LHt2ZXJ0aWNhbEFsaWduOiJib3R0b20iLGhvcml6b250YWxBbGlnbjoibGVmdCIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSx7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246InJpZ2h0Iix0b3A6aS5ib3R0b20tci5oZWlnaHQtdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkucmlnaHQtci53aWR0aC10aGlzLmhvcml6b250YWxPZmZzZXR9XTtpZih0aGlzLm5vT3ZlcmxhcCl7Zm9yKHZhciBzPTAsbD1hLmxlbmd0aDtzPGw7cysrKXt2YXIgYz17fTtmb3IodmFyIHUgaW4gYVtzXSljW3VdPWFbc11bdV07YS5wdXNoKGMpfWFbMF0udG9wPWFbMV0udG9wKz1pLmhlaWdodCxhWzJdLnRvcD1hWzNdLnRvcC09aS5oZWlnaHQsYVs0XS5sZWZ0PWFbNl0ubGVmdCs9aS53aWR0aCxhWzVdLmxlZnQ9YVs3XS5sZWZ0LT1pLndpZHRofXQ9dD09PSJhdXRvIj9udWxsOnQsZT1lPT09ImF1dG8iP251bGw6ZSwoIWV8fGU9PT0iY2VudGVyIikmJihhLnB1c2goe3ZlcnRpY2FsQWxpZ246InRvcCIsaG9yaXpvbnRhbEFsaWduOiJjZW50ZXIiLHRvcDppLnRvcCt0aGlzLnZlcnRpY2FsT2Zmc2V0Kyh0aGlzLm5vT3ZlcmxhcD9pLmhlaWdodDowKSxsZWZ0OmkubGVmdC1uLndpZHRoLzIraS53aWR0aC8yK3RoaXMuaG9yaXpvbnRhbE9mZnNldH0pLGEucHVzaCh7dmVydGljYWxBbGlnbjoiYm90dG9tIixob3Jpem9udGFsQWxpZ246ImNlbnRlciIsdG9wOmkuYm90dG9tLXIuaGVpZ2h0LXRoaXMudmVydGljYWxPZmZzZXQtKHRoaXMubm9PdmVybGFwP2kuaGVpZ2h0OjApLGxlZnQ6aS5sZWZ0LW4ud2lkdGgvMitpLndpZHRoLzIrdGhpcy5ob3Jpem9udGFsT2Zmc2V0fSkpLCghdHx8dD09PSJtaWRkbGUiKSYmKGEucHVzaCh7dmVydGljYWxBbGlnbjoibWlkZGxlIixob3Jpem9udGFsQWxpZ246ImxlZnQiLHRvcDppLnRvcC1uLmhlaWdodC8yK2kuaGVpZ2h0LzIrdGhpcy52ZXJ0aWNhbE9mZnNldCxsZWZ0OmkubGVmdCt0aGlzLmhvcml6b250YWxPZmZzZXQrKHRoaXMubm9PdmVybGFwP2kud2lkdGg6MCl9KSxhLnB1c2goe3ZlcnRpY2FsQWxpZ246Im1pZGRsZSIsaG9yaXpvbnRhbEFsaWduOiJyaWdodCIsdG9wOmkudG9wLW4uaGVpZ2h0LzIraS5oZWlnaHQvMit0aGlzLnZlcnRpY2FsT2Zmc2V0LGxlZnQ6aS5yaWdodC1yLndpZHRoLXRoaXMuaG9yaXpvbnRhbE9mZnNldC0odGhpcy5ub092ZXJsYXA/aS53aWR0aDowKX0pKSx0PT09Im1pZGRsZSImJmU9PT0iY2VudGVyIiYmYS5wdXNoKHt2ZXJ0aWNhbEFsaWduOiJtaWRkbGUiLGhvcml6b250YWxBbGlnbjoiY2VudGVyIix0b3A6aS50b3Atbi5oZWlnaHQvMitpLmhlaWdodC8yK3RoaXMudmVydGljYWxPZmZzZXQsbGVmdDppLmxlZnQtbi53aWR0aC8yK2kud2lkdGgvMit0aGlzLmhvcml6b250YWxPZmZzZXR9KTtmb3IodmFyIGgscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgZj1hW3NdLHA9Zi52ZXJ0aWNhbEFsaWduPT09dCxkPWYuaG9yaXpvbnRhbEFsaWduPT09ZTtpZighdGhpcy5keW5hbWljQWxpZ24mJiF0aGlzLm5vT3ZlcmxhcCYmcCYmZCl7aD1mO2JyZWFrfXZhciBnPSghdHx8cCkmJighZXx8ZCk7aWYoISghdGhpcy5keW5hbWljQWxpZ24mJiFnKSl7aWYoZi5vZmZzY3JlZW5BcmVhPXRoaXMuX19nZXRPZmZzY3JlZW5BcmVhKGYscixvKSxmLm9mZnNjcmVlbkFyZWE9PT0wJiZnKXtoPWY7YnJlYWt9aD1ofHxmO3ZhciBfPWYub2Zmc2NyZWVuQXJlYS1oLm9mZnNjcmVlbkFyZWE7KF88MHx8Xz09PTAmJihwfHxkKSkmJihoPWYpfX1yZXR1cm4gaH19O3ZhciAkeD1FbGVtZW50LnByb3RvdHlwZSx3OT0keC5tYXRjaGVzfHwkeC5tYXRjaGVzU2VsZWN0b3J8fCR4Lm1vek1hdGNoZXNTZWxlY3Rvcnx8JHgubXNNYXRjaGVzU2VsZWN0b3J8fCR4Lm9NYXRjaGVzU2VsZWN0b3J8fCR4LndlYmtpdE1hdGNoZXNTZWxlY3RvcixtVz1jbGFzc3tnZXRUYWJiYWJsZU5vZGVzKHQpe3ZhciByPVtdLG49dGhpcy5fY29sbGVjdFRhYmJhYmxlTm9kZXModCxyKTtyZXR1cm4gbj90aGlzLl9zb3J0QnlUYWJJbmRleChyKTpyfWlzRm9jdXNhYmxlKHQpe3JldHVybiB3OS5jYWxsKHQsImlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBidXR0b24sIG9iamVjdCIpP3c5LmNhbGwodCwiOm5vdChbZGlzYWJsZWRdKSIpOnc5LmNhbGwodCwiYVtocmVmXSwgYXJlYVtocmVmXSwgaWZyYW1lLCBbdGFiaW5kZXhdLCBbY29udGVudEVkaXRhYmxlXSIpfWlzVGFiYmFibGUodCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGUodCkmJnc5LmNhbGwodCwnOm5vdChbdGFiaW5kZXg9Ii0xIl0pJykmJnRoaXMuX2lzVmlzaWJsZSh0KX1fbm9ybWFsaXplZFRhYkluZGV4KHQpe2lmKHRoaXMuaXNGb2N1c2FibGUodCkpe3ZhciByPXQuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwwO3JldHVybiBOdW1iZXIocil9cmV0dXJuLTF9X2NvbGxlY3RUYWJiYWJsZU5vZGVzKHQscil7aWYodC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiExO3ZhciBuPXQ7aWYoIXRoaXMuX2lzVmlzaWJsZShuKSlyZXR1cm4hMTt2YXIgaT10aGlzLl9ub3JtYWxpemVkVGFiSW5kZXgobiksbz1pPjA7aT49MCYmci5wdXNoKG4pO3ZhciBhO24ubG9jYWxOYW1lPT09ImNvbnRlbnQifHxuLmxvY2FsTmFtZT09PSJzbG90Ij9hPXp0KG4pLmdldERpc3RyaWJ1dGVkTm9kZXMoKTphPXp0KG4ucm9vdHx8bikuY2hpbGRyZW47Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspbz10aGlzLl9jb2xsZWN0VGFiYmFibGVOb2RlcyhhW3NdLHIpfHxvO3JldHVybiBvfV9pc1Zpc2libGUodCl7dmFyIHI9dC5zdHlsZTtyZXR1cm4gci52aXNpYmlsaXR5IT09ImhpZGRlbiImJnIuZGlzcGxheSE9PSJub25lIj8ocj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxyLnZpc2liaWxpdHkhPT0iaGlkZGVuIiYmci5kaXNwbGF5IT09Im5vbmUiKTohMX1fc29ydEJ5VGFiSW5kZXgodCl7dmFyIHI9dC5sZW5ndGg7aWYocjwyKXJldHVybiB0O3ZhciBuPU1hdGguY2VpbChyLzIpLGk9dGhpcy5fc29ydEJ5VGFiSW5kZXgodC5zbGljZSgwLG4pKSxvPXRoaXMuX3NvcnRCeVRhYkluZGV4KHQuc2xpY2UobikpO3JldHVybiB0aGlzLl9tZXJnZVNvcnRCeVRhYkluZGV4KGksbyl9X21lcmdlU29ydEJ5VGFiSW5kZXgodCxyKXtmb3IodmFyIG49W107dC5sZW5ndGg+MCYmci5sZW5ndGg+MDspdGhpcy5faGFzTG93ZXJUYWJPcmRlcih0WzBdLHJbMF0pP24ucHVzaChyLnNoaWZ0KCkpOm4ucHVzaCh0LnNoaWZ0KCkpO3JldHVybiBuLmNvbmNhdCh0LHIpfV9oYXNMb3dlclRhYk9yZGVyKHQscil7dmFyIG49TWF0aC5tYXgodC50YWJJbmRleCwwKSxpPU1hdGgubWF4KHIudGFiSW5kZXgsMCk7cmV0dXJuIG49PT0wfHxpPT09MD9pPm46bj5pfX0sbTB0PW5ldyBtVztZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWlyb24tb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDAwKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3A7CiAgICAgIH0KCiAgICAgIDpob3N0KC5vcGVuZWQpIHsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BhY2l0eSwgMC42KTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICBAYXBwbHkgLS1pcm9uLW92ZXJsYXktYmFja2Ryb3Atb3BlbmVkOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzbG90Pjwvc2xvdD4KYCxpczoiaXJvbi1vdmVybGF5LWJhY2tkcm9wIixwcm9wZXJ0aWVzOntvcGVuZWQ6e3JlZmxlY3RUb0F0dHJpYnV0ZTohMCx0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn19LGxpc3RlbmVyczp7dHJhbnNpdGlvbmVuZDoiX29uVHJhbnNpdGlvbmVuZCJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fb3BlbmVkUmFmPW51bGx9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJnRoaXMuX29wZW5lZENoYW5nZWQodGhpcy5vcGVuZWQpfSxwcmVwYXJlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLnBhcmVudE5vZGUmJnp0KGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITB9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ9ITF9LGNvbXBsZXRlOmZ1bmN0aW9uKCl7IXRoaXMub3BlbmVkJiZ0aGlzLnBhcmVudE5vZGU9PT1kb2N1bWVudC5ib2R5JiZ6dCh0aGlzLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMpfSxfb25UcmFuc2l0aW9uZW5kOmZ1bmN0aW9uKGUpe2UmJmUudGFyZ2V0PT09dGhpcyYmdGhpcy5jb21wbGV0ZSgpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihlKXtpZihlKXRoaXMucHJlcGFyZSgpO2Vsc2V7dmFyIHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcyk7KHQudHJhbnNpdGlvbkR1cmF0aW9uPT09IjBzInx8dC5vcGFjaXR5PT0wKSYmdGhpcy5jb21wbGV0ZSgpfSF0aGlzLmlzQXR0YWNoZWR8fCh0aGlzLl9fb3BlbmVkUmFmJiYod2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19vcGVuZWRSYWYpLHRoaXMuX19vcGVuZWRSYWY9bnVsbCksdGhpcy5zY3JvbGxUb3A9dGhpcy5zY3JvbGxUb3AsdGhpcy5fX29wZW5lZFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCl7dGhpcy5fX29wZW5lZFJhZj1udWxsLHRoaXMudG9nZ2xlQ2xhc3MoIm9wZW5lZCIsdGhpcy5vcGVuZWQpfS5iaW5kKHRoaXMpKSl9fSk7dmFyIGdXPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fb3ZlcmxheXM9W10sdGhpcy5fbWluaW11bVo9MTAxLHRoaXMuX2JhY2tkcm9wRWxlbWVudD1udWxsLEVtKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwidGFwIixmdW5jdGlvbigpe30pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRhcCIsdGhpcy5fb25DYXB0dXJlQ2xpY2suYmluZCh0aGlzKSwhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX29uQ2FwdHVyZUZvY3VzLmJpbmQodGhpcyksITApLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uQ2FwdHVyZUtleURvd24uYmluZCh0aGlzKSwhMCl9Z2V0IGJhY2tkcm9wRWxlbWVudCgpe3JldHVybiB0aGlzLl9iYWNrZHJvcEVsZW1lbnR8fCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaXJvbi1vdmVybGF5LWJhY2tkcm9wIikpLHRoaXMuX2JhY2tkcm9wRWxlbWVudH1nZXQgZGVlcEFjdGl2ZUVsZW1lbnQoKXt2YXIgdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2ZvcigoIXR8fCEodCBpbnN0YW5jZW9mIEVsZW1lbnQpKSYmKHQ9ZG9jdW1lbnQuYm9keSk7dC5yb290JiZ6dCh0LnJvb3QpLmFjdGl2ZUVsZW1lbnQ7KXQ9enQodC5yb290KS5hY3RpdmVFbGVtZW50O3JldHVybiB0fV9icmluZ092ZXJsYXlBdEluZGV4VG9Gcm9udCh0KXt2YXIgcj10aGlzLl9vdmVybGF5c1t0XTtpZighIXIpe3ZhciBuPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xLGk9dGhpcy5fb3ZlcmxheXNbbl07aWYoaSYmdGhpcy5fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHIsaSkmJm4tLSwhKHQ+PW4pKXt2YXIgbz1NYXRoLm1heCh0aGlzLmN1cnJlbnRPdmVybGF5WigpLHRoaXMuX21pbmltdW1aKTtmb3IodGhpcy5fZ2V0WihyKTw9byYmdGhpcy5fYXBwbHlPdmVybGF5WihyLG8pO3Q8bjspdGhpcy5fb3ZlcmxheXNbdF09dGhpcy5fb3ZlcmxheXNbdCsxXSx0Kys7dGhpcy5fb3ZlcmxheXNbbl09cn19fWFkZE9yUmVtb3ZlT3ZlcmxheSh0KXt0Lm9wZW5lZD90aGlzLmFkZE92ZXJsYXkodCk6dGhpcy5yZW1vdmVPdmVybGF5KHQpfWFkZE92ZXJsYXkodCl7dmFyIHI9dGhpcy5fb3ZlcmxheXMuaW5kZXhPZih0KTtpZihyPj0wKXt0aGlzLl9icmluZ092ZXJsYXlBdEluZGV4VG9Gcm9udChyKSx0aGlzLnRyYWNrQmFja2Ryb3AoKTtyZXR1cm59dmFyIG49dGhpcy5fb3ZlcmxheXMubGVuZ3RoLGk9dGhpcy5fb3ZlcmxheXNbbi0xXSxvPU1hdGgubWF4KHRoaXMuX2dldFooaSksdGhpcy5fbWluaW11bVopLGE9dGhpcy5fZ2V0Wih0KTtpZihpJiZ0aGlzLl9zaG91bGRCZUJlaGluZE92ZXJsYXkodCxpKSl7dGhpcy5fYXBwbHlPdmVybGF5WihpLG8pLG4tLTt2YXIgcz10aGlzLl9vdmVybGF5c1tuLTFdO289TWF0aC5tYXgodGhpcy5fZ2V0WihzKSx0aGlzLl9taW5pbXVtWil9YTw9byYmdGhpcy5fYXBwbHlPdmVybGF5Wih0LG8pLHRoaXMuX292ZXJsYXlzLnNwbGljZShuLDAsdCksdGhpcy50cmFja0JhY2tkcm9wKCl9cmVtb3ZlT3ZlcmxheSh0KXt2YXIgcj10aGlzLl9vdmVybGF5cy5pbmRleE9mKHQpO3IhPT0tMSYmKHRoaXMuX292ZXJsYXlzLnNwbGljZShyLDEpLHRoaXMudHJhY2tCYWNrZHJvcCgpKX1jdXJyZW50T3ZlcmxheSgpe3ZhciB0PXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO3JldHVybiB0aGlzLl9vdmVybGF5c1t0XX1jdXJyZW50T3ZlcmxheVooKXtyZXR1cm4gdGhpcy5fZ2V0Wih0aGlzLmN1cnJlbnRPdmVybGF5KCkpfWVuc3VyZU1pbmltdW1aKHQpe3RoaXMuX21pbmltdW1aPU1hdGgubWF4KHRoaXMuX21pbmltdW1aLHQpfWZvY3VzT3ZlcmxheSgpe3ZhciB0PXRoaXMuY3VycmVudE92ZXJsYXkoKTt0JiZ0Ll9hcHBseUZvY3VzKCl9dHJhY2tCYWNrZHJvcCgpe3ZhciB0PXRoaXMuX292ZXJsYXlXaXRoQmFja2Ryb3AoKTshdCYmIXRoaXMuX2JhY2tkcm9wRWxlbWVudHx8KHRoaXMuYmFja2Ryb3BFbGVtZW50LnN0eWxlLnpJbmRleD10aGlzLl9nZXRaKHQpLTEsdGhpcy5iYWNrZHJvcEVsZW1lbnQub3BlbmVkPSEhdCx0aGlzLmJhY2tkcm9wRWxlbWVudC5wcmVwYXJlKCkpfWdldEJhY2tkcm9wcygpe2Zvcih2YXIgdD1bXSxyPTA7cjx0aGlzLl9vdmVybGF5cy5sZW5ndGg7cisrKXRoaXMuX292ZXJsYXlzW3JdLndpdGhCYWNrZHJvcCYmdC5wdXNoKHRoaXMuX292ZXJsYXlzW3JdKTtyZXR1cm4gdH1iYWNrZHJvcFooKXtyZXR1cm4gdGhpcy5fZ2V0Wih0aGlzLl9vdmVybGF5V2l0aEJhY2tkcm9wKCkpLTF9X292ZXJsYXlXaXRoQmFja2Ryb3AoKXtmb3IodmFyIHQ9dGhpcy5fb3ZlcmxheXMubGVuZ3RoLTE7dD49MDt0LS0paWYodGhpcy5fb3ZlcmxheXNbdF0ud2l0aEJhY2tkcm9wKXJldHVybiB0aGlzLl9vdmVybGF5c1t0XX1fZ2V0Wih0KXt2YXIgcj10aGlzLl9taW5pbXVtWjtpZih0KXt2YXIgbj1OdW1iZXIodC5zdHlsZS56SW5kZXh8fHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLnpJbmRleCk7bj09PW4mJihyPW4pfXJldHVybiByfV9zZXRaKHQscil7dC5zdHlsZS56SW5kZXg9cn1fYXBwbHlPdmVybGF5Wih0LHIpe3RoaXMuX3NldFoodCxyKzIpfV9vdmVybGF5SW5QYXRoKHQpe3Q9dHx8W107Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspaWYodFtyXS5fbWFuYWdlcj09PXRoaXMpcmV0dXJuIHRbcl19X29uQ2FwdHVyZUNsaWNrKHQpe3ZhciByPXRoaXMuX292ZXJsYXlzLmxlbmd0aC0xO2lmKHIhPT0tMSlmb3IodmFyIG49enQodCkucGF0aCxpOyhpPXRoaXMuX292ZXJsYXlzW3JdKSYmdGhpcy5fb3ZlcmxheUluUGF0aChuKSE9PWkmJihpLl9vbkNhcHR1cmVDbGljayh0KSxpLmFsbG93Q2xpY2tUaHJvdWdoKTspci0tfV9vbkNhcHR1cmVGb2N1cyh0KXt2YXIgcj10aGlzLmN1cnJlbnRPdmVybGF5KCk7ciYmci5fb25DYXB0dXJlRm9jdXModCl9X29uQ2FwdHVyZUtleURvd24odCl7dmFyIHI9dGhpcy5jdXJyZW50T3ZlcmxheSgpO3ImJihPby5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXModCwiZXNjIik/ci5fb25DYXB0dXJlRXNjKHQpOk9vLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyh0LCJ0YWIiKSYmci5fb25DYXB0dXJlVGFiKHQpKX1fc2hvdWxkQmVCZWhpbmRPdmVybGF5KHQscil7cmV0dXJuIXQuYWx3YXlzT25Ub3AmJnIuYWx3YXlzT25Ub3B9fSxnMHQ9bmV3IGdXO3ZhciBNOT17cGFnZVg6MCxwYWdlWTowfSxfMHQ9bnVsbCxfVz1bXSxFOT1bIndoZWVsIiwibW91c2V3aGVlbCIsIkRPTU1vdXNlU2Nyb2xsIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSJdLFM5LHlXO2Z1bmN0aW9uIHkwdChlKXtDaC5pbmRleE9mKGUpPj0wfHwoQ2gubGVuZ3RoPT09MCYmSWJlKCksQ2gucHVzaChlKSx5Vz1DaFtDaC5sZW5ndGgtMV0seDB0PVtdLGIwdD1bXSl9ZnVuY3Rpb24gdjB0KGUpe3ZhciB0PUNoLmluZGV4T2YoZSk7dCE9PS0xJiYoQ2guc3BsaWNlKHQsMSkseVc9Q2hbQ2gubGVuZ3RoLTFdLHgwdD1bXSxiMHQ9W10sQ2gubGVuZ3RoPT09MCYmTGJlKCkpfXZhciBDaD1bXSx4MHQ9bnVsbCxiMHQ9bnVsbDtmdW5jdGlvbiBQYmUoZSl7aWYoZS5jYW5jZWxhYmxlJiZrYmUoZSkmJmUucHJldmVudERlZmF1bHQoKSxlLnRhcmdldFRvdWNoZXMpe3ZhciB0PWUudGFyZ2V0VG91Y2hlc1swXTtNOS5wYWdlWD10LnBhZ2VYLE05LnBhZ2VZPXQucGFnZVl9fWZ1bmN0aW9uIEliZSgpe1M5PVM5fHxQYmUuYmluZCh2b2lkIDApO2Zvcih2YXIgZT0wLHQ9RTkubGVuZ3RoO2U8dDtlKyspZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihFOVtlXSxTOSx7Y2FwdHVyZTohMCxwYXNzaXZlOiExfSl9ZnVuY3Rpb24gTGJlKCl7Zm9yKHZhciBlPTAsdD1FOS5sZW5ndGg7ZTx0O2UrKylkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKEU5W2VdLFM5LHtjYXB0dXJlOiEwLHBhc3NpdmU6ITF9KX1mdW5jdGlvbiBrYmUoZSl7dmFyIHQ9enQoZSkucm9vdFRhcmdldDtpZihlLnR5cGUhPT0idG91Y2htb3ZlIiYmXzB0IT09dCYmKF8wdD10LF9XPVJiZSh6dChlKS5wYXRoKSksIV9XLmxlbmd0aClyZXR1cm4hMDtpZihlLnR5cGU9PT0idG91Y2hzdGFydCIpcmV0dXJuITE7dmFyIHI9RGJlKGUpO3JldHVybiFOYmUoX1csci5kZWx0YVgsci5kZWx0YVkpfWZ1bmN0aW9uIFJiZShlKXtmb3IodmFyIHQ9W10scj1lLmluZGV4T2YoeVcpLG49MDtuPD1yO24rKylpZihlW25dLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBpPWVbbl0sbz1pLnN0eWxlO28ub3ZlcmZsb3chPT0ic2Nyb2xsIiYmby5vdmVyZmxvdyE9PSJhdXRvIiYmKG89d2luZG93LmdldENvbXB1dGVkU3R5bGUoaSkpLChvLm92ZXJmbG93PT09InNjcm9sbCJ8fG8ub3ZlcmZsb3c9PT0iYXV0byIpJiZ0LnB1c2goaSl9cmV0dXJuIHR9ZnVuY3Rpb24gTmJlKGUsdCxyKXtpZighKCF0JiYhcikpZm9yKHZhciBuPU1hdGguYWJzKHIpPj1NYXRoLmFicyh0KSxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPWVbaV0sYT0hMTtpZihuP2E9cjwwP28uc2Nyb2xsVG9wPjA6by5zY3JvbGxUb3A8by5zY3JvbGxIZWlnaHQtby5jbGllbnRIZWlnaHQ6YT10PDA/by5zY3JvbGxMZWZ0PjA6by5zY3JvbGxMZWZ0PG8uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aCxhKXJldHVybiBvfX1mdW5jdGlvbiBEYmUoZSl7dmFyIHQ9e2RlbHRhWDplLmRlbHRhWCxkZWx0YVk6ZS5kZWx0YVl9O2lmKCEoImRlbHRhWCJpbiBlKSl7aWYoIndoZWVsRGVsdGFYImluIGUmJiJ3aGVlbERlbHRhWSJpbiBlKXQuZGVsdGFYPS1lLndoZWVsRGVsdGFYLHQuZGVsdGFZPS1lLndoZWVsRGVsdGFZO2Vsc2UgaWYoIndoZWVsRGVsdGEiaW4gZSl0LmRlbHRhWD0wLHQuZGVsdGFZPS1lLndoZWVsRGVsdGE7ZWxzZSBpZigiYXhpcyJpbiBlKXQuZGVsdGFYPWUuYXhpcz09PTE/ZS5kZXRhaWw6MCx0LmRlbHRhWT1lLmF4aXM9PT0yP2UuZGV0YWlsOjA7ZWxzZSBpZihlLnRhcmdldFRvdWNoZXMpe3ZhciByPWUudGFyZ2V0VG91Y2hlc1swXTt0LmRlbHRhWD1NOS5wYWdlWC1yLnBhZ2VYLHQuZGVsdGFZPU05LnBhZ2VZLXIucGFnZVl9fXJldHVybiB0fXZhciBQbT17cHJvcGVydGllczp7b3BlbmVkOntvYnNlcnZlcjoiX29wZW5lZENoYW5nZWQiLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LGNhbmNlbGVkOntvYnNlcnZlcjoiX2NhbmNlbGVkQ2hhbmdlZCIscmVhZE9ubHk6ITAsdHlwZTpCb29sZWFuLHZhbHVlOiExfSx3aXRoQmFja2Ryb3A6e29ic2VydmVyOiJfd2l0aEJhY2tkcm9wQ2hhbmdlZCIsdHlwZTpCb29sZWFufSxub0F1dG9Gb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0NhbmNlbE9uRXNjS2V5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2luZ1JlYXNvbjp7dHlwZTpPYmplY3R9LHJlc3RvcmVGb2N1c09uQ2xvc2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dDbGlja1Rocm91Z2g6e3R5cGU6Qm9vbGVhbn0sYWx3YXlzT25Ub3A6e3R5cGU6Qm9vbGVhbn0sc2Nyb2xsQWN0aW9uOnt0eXBlOlN0cmluZ30sX21hbmFnZXI6e3R5cGU6T2JqZWN0LHZhbHVlOmcwdH0sX2ZvY3VzZWRDaGlsZDp7dHlwZTpPYmplY3R9fSxsaXN0ZW5lcnM6eyJpcm9uLXJlc2l6ZSI6Il9vbklyb25SZXNpemUifSxvYnNlcnZlcnM6WyJfX3VwZGF0ZVNjcm9sbE9ic2VydmVycyhpc0F0dGFjaGVkLCBvcGVuZWQsIHNjcm9sbEFjdGlvbikiXSxnZXQgYmFja2Ryb3BFbGVtZW50KCl7cmV0dXJuIHRoaXMuX21hbmFnZXIuYmFja2Ryb3BFbGVtZW50fSxnZXQgX2ZvY3VzTm9kZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkQ2hpbGR8fHp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIlthdXRvZm9jdXNdIil8fHRoaXN9LGdldCBfZm9jdXNhYmxlTm9kZXMoKXtyZXR1cm4gbTB0LmdldFRhYmJhYmxlTm9kZXModGhpcyl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2lzQW5pbWF0aW5nPSExLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMSx0aGlzLl9fZmlyc3RGb2N1c2FibGVOb2RlPXRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1udWxsLHRoaXMuX19yYWZzPXt9LHRoaXMuX19yZXN0b3JlRm9jdXNOb2RlPW51bGwsdGhpcy5fX3Njcm9sbFRvcD10aGlzLl9fc2Nyb2xsTGVmdD1udWxsLHRoaXMuX19vbkNhcHR1cmVTY3JvbGw9dGhpcy5fX29uQ2FwdHVyZVNjcm9sbC5iaW5kKHRoaXMpLHRoaXMuX19yb290Tm9kZXM9bnVsbCx0aGlzLl9lbnN1cmVTZXR1cCgpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLl9vcGVuZWRDaGFuZ2VkKHRoaXMub3BlbmVkKSx0aGlzLl9vYnNlcnZlcj16dCh0aGlzKS5vYnNlcnZlTm9kZXModGhpcy5fb25Ob2Rlc0NoYW5nZSl9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZXImJnp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsO2Zvcih2YXIgZSBpbiB0aGlzLl9fcmFmcyl0aGlzLl9fcmFmc1tlXSE9PW51bGwmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX19yYWZzW2VdKTt0aGlzLl9fcmFmcz17fSx0aGlzLl9tYW5hZ2VyLnJlbW92ZU92ZXJsYXkodGhpcyksdGhpcy5fX2lzQW5pbWF0aW5nJiYodGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6KHRoaXMuX2FwcGx5Rm9jdXMoKSx0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKSkpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRDYW5jZWxlZCghMSksdGhpcy5vcGVuZWQ9IXRoaXMub3BlbmVkfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Q2FuY2VsZWQoITEpLHRoaXMub3BlbmVkPSEwfSxjbG9zZTpmdW5jdGlvbigpe3RoaXMuX3NldENhbmNlbGVkKCExKSx0aGlzLm9wZW5lZD0hMX0sY2FuY2VsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZmlyZSgiaXJvbi1vdmVybGF5LWNhbmNlbGVkIixlLHtjYW5jZWxhYmxlOiEwfSk7dC5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fc2V0Q2FuY2VsZWQoITApLHRoaXMub3BlbmVkPSExKX0saW52YWxpZGF0ZVRhYmJhYmxlczpmdW5jdGlvbigpe3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU9dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlPW51bGx9LF9lbnN1cmVTZXR1cDpmdW5jdGlvbigpe3RoaXMuX292ZXJsYXlTZXR1cHx8KHRoaXMuX292ZXJsYXlTZXR1cD0hMCx0aGlzLnN0eWxlLm91dGxpbmU9Im5vbmUiLHRoaXMuc3R5bGUuZGlzcGxheT0ibm9uZSIpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbihlKXtlP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpOnRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0aGlzLmlzQXR0YWNoZWQmJih0aGlzLl9faXNBbmltYXRpbmc9ITAsdGhpcy5fX2RlcmFmKCJfX29wZW5lZENoYW5nZWQiLHRoaXMuX19vcGVuZWRDaGFuZ2VkKSl9LF9jYW5jZWxlZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsb3NpbmdSZWFzb249dGhpcy5jbG9zaW5nUmVhc29ufHx7fSx0aGlzLmNsb3NpbmdSZWFzb24uY2FuY2VsZWQ9dGhpcy5jYW5jZWxlZH0sX3dpdGhCYWNrZHJvcENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLndpdGhCYWNrZHJvcCYmIXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpPyh0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuX19zaG91bGRSZW1vdmVUYWJJbmRleD0hMCk6dGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4JiYodGhpcy5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fX3Nob3VsZFJlbW92ZVRhYkluZGV4PSExKSx0aGlzLm9wZW5lZCYmdGhpcy5pc0F0dGFjaGVkJiZ0aGlzLl9tYW5hZ2VyLnRyYWNrQmFja2Ryb3AoKX0sX3ByZXBhcmVSZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50LHRoaXMuX3ByZXBhcmVQb3NpdGlvbmluZygpLHRoaXMucmVmaXQoKSx0aGlzLl9maW5pc2hQb3NpdGlvbmluZygpLHRoaXMubm9BdXRvRm9jdXMmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLl9mb2N1c05vZGUmJih0aGlzLl9mb2N1c05vZGUuYmx1cigpLHRoaXMuX19yZXN0b3JlRm9jdXNOb2RlLmZvY3VzKCkpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCl9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX0sX2ZpbmlzaFJlbmRlck9wZW5lZDpmdW5jdGlvbigpe3RoaXMubm90aWZ5UmVzaXplKCksdGhpcy5fX2lzQW5pbWF0aW5nPSExLHRoaXMuZmlyZSgiaXJvbi1vdmVybGF5LW9wZW5lZCIpfSxfZmluaXNoUmVuZGVyQ2xvc2VkOmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0eWxlLnpJbmRleD0iIix0aGlzLm5vdGlmeVJlc2l6ZSgpLHRoaXMuX19pc0FuaW1hdGluZz0hMSx0aGlzLmZpcmUoImlyb24tb3ZlcmxheS1jbG9zZWQiLHRoaXMuY2xvc2luZ1JlYXNvbil9LF9wcmVwYXJlUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnRyYW5zaXRpb249dGhpcy5zdHlsZS53ZWJraXRUcmFuc2l0aW9uPSJub25lIix0aGlzLnN0eWxlLnRyYW5zZm9ybT10aGlzLnN0eWxlLndlYmtpdFRyYW5zZm9ybT0ibm9uZSIsdGhpcy5zdHlsZS5kaXNwbGF5PSIifSxfZmluaXNoUG9zaXRpb25pbmc6ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wLHRoaXMuc3R5bGUudHJhbnNpdGlvbj10aGlzLnN0eWxlLndlYmtpdFRyYW5zaXRpb249IiIsdGhpcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5zdHlsZS53ZWJraXRUcmFuc2Zvcm09IiIsdGhpcy5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuc2Nyb2xsVG9wPXRoaXMuc2Nyb2xsVG9wfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe2lmKHRoaXMub3BlbmVkKXRoaXMubm9BdXRvRm9jdXN8fHRoaXMuX2ZvY3VzTm9kZS5mb2N1cygpO2Vsc2V7aWYodGhpcy5yZXN0b3JlRm9jdXNPbkNsb3NlJiZ0aGlzLl9fcmVzdG9yZUZvY3VzTm9kZSl7dmFyIGU9dGhpcy5fbWFuYWdlci5kZWVwQWN0aXZlRWxlbWVudDsoZT09PWRvY3VtZW50LmJvZHl8fHpiZSh0aGlzLGUpKSYmdGhpcy5fX3Jlc3RvcmVGb2N1c05vZGUuZm9jdXMoKX10aGlzLl9fcmVzdG9yZUZvY3VzTm9kZT1udWxsLHRoaXMuX2ZvY3VzTm9kZS5ibHVyKCksdGhpcy5fZm9jdXNlZENoaWxkPW51bGx9fSxfb25DYXB0dXJlQ2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrfHx0aGlzLmNhbmNlbChlKX0sX29uQ2FwdHVyZUZvY3VzOmZ1bmN0aW9uKGUpe2lmKCEhdGhpcy53aXRoQmFja2Ryb3Ape3ZhciB0PXp0KGUpLnBhdGg7dC5pbmRleE9mKHRoaXMpPT09LTE/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fYXBwbHlGb2N1cygpKTp0aGlzLl9mb2N1c2VkQ2hpbGQ9dFswXX19LF9vbkNhcHR1cmVFc2M6ZnVuY3Rpb24oZSl7dGhpcy5ub0NhbmNlbE9uRXNjS2V5fHx0aGlzLmNhbmNlbChlKX0sX29uQ2FwdHVyZVRhYjpmdW5jdGlvbihlKXtpZighIXRoaXMud2l0aEJhY2tkcm9wKXt0aGlzLl9fZW5zdXJlRmlyc3RMYXN0Rm9jdXNhYmxlcygpO3ZhciB0PWUuc2hpZnRLZXkscj10P3RoaXMuX19maXJzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2xhc3RGb2N1c2FibGVOb2RlLG49dD90aGlzLl9fbGFzdEZvY3VzYWJsZU5vZGU6dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZSxpPSExO2lmKHI9PT1uKWk9ITA7ZWxzZXt2YXIgbz10aGlzLl9tYW5hZ2VyLmRlZXBBY3RpdmVFbGVtZW50O2k9bz09PXJ8fG89PT10aGlzfWkmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZENoaWxkPW4sdGhpcy5fYXBwbHlGb2N1cygpKX19LF9vbklyb25SZXNpemU6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZCYmIXRoaXMuX19pc0FuaW1hdGluZyYmdGhpcy5fX2RlcmFmKCJyZWZpdCIsdGhpcy5yZWZpdCl9LF9vbk5vZGVzQ2hhbmdlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQmJiF0aGlzLl9faXNBbmltYXRpbmcmJih0aGlzLmludmFsaWRhdGVUYWJiYWJsZXMoKSx0aGlzLm5vdGlmeVJlc2l6ZSgpKX0sX19lbnN1cmVGaXJzdExhc3RGb2N1c2FibGVzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZm9jdXNhYmxlTm9kZXM7dGhpcy5fX2ZpcnN0Rm9jdXNhYmxlTm9kZT1lWzBdLHRoaXMuX19sYXN0Rm9jdXNhYmxlTm9kZT1lW2UubGVuZ3RoLTFdfSxfX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD8odGhpcy5fcHJlcGFyZVJlbmRlck9wZW5lZCgpLHRoaXMuX21hbmFnZXIuYWRkT3ZlcmxheSh0aGlzKSx0aGlzLl9hcHBseUZvY3VzKCksdGhpcy5fcmVuZGVyT3BlbmVkKCkpOih0aGlzLl9tYW5hZ2VyLnJlbW92ZU92ZXJsYXkodGhpcyksdGhpcy5fYXBwbHlGb2N1cygpLHRoaXMuX3JlbmRlckNsb3NlZCgpKX0sX19kZXJhZjpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX19yYWZzO3JbZV0hPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZShyW2VdKSxyW2VdPXJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe3JbZV09bnVsbCx0LmNhbGwodGhpcyl9LmJpbmQodGhpcykpfSxfX3VwZGF0ZVNjcm9sbE9ic2VydmVyczpmdW5jdGlvbihlLHQscil7IWV8fCF0fHwhdGhpcy5fX2lzVmFsaWRTY3JvbGxBY3Rpb24ocik/KHYwdCh0aGlzKSx0aGlzLl9fcmVtb3ZlU2Nyb2xsTGlzdGVuZXJzKCkpOihyPT09ImxvY2siJiYodGhpcy5fX3NhdmVTY3JvbGxQb3NpdGlvbigpLHkwdCh0aGlzKSksdGhpcy5fX2FkZFNjcm9sbExpc3RlbmVycygpKX0sX19hZGRTY3JvbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fX3Jvb3ROb2Rlcyl7aWYodGhpcy5fX3Jvb3ROb2Rlcz1bXSxjXylmb3IodmFyIGU9dGhpcztlOyllLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiZlLmhvc3QmJnRoaXMuX19yb290Tm9kZXMucHVzaChlKSxlPWUuaG9zdHx8ZS5hc3NpZ25lZFNsb3R8fGUucGFyZW50Tm9kZTt0aGlzLl9fcm9vdE5vZGVzLnB1c2goZG9jdW1lbnQpfXRoaXMuX19yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbih0KXt0LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbCx7Y2FwdHVyZTohMCxwYXNzaXZlOiEwfSl9LHRoaXMpfSxfX3JlbW92ZVNjcm9sbExpc3RlbmVyczpmdW5jdGlvbigpe3RoaXMuX19yb290Tm9kZXMmJnRoaXMuX19yb290Tm9kZXMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5fX29uQ2FwdHVyZVNjcm9sbCx7Y2FwdHVyZTohMCxwYXNzaXZlOiEwfSl9LHRoaXMpLHRoaXMuaXNBdHRhY2hlZHx8KHRoaXMuX19yb290Tm9kZXM9bnVsbCl9LF9faXNWYWxpZFNjcm9sbEFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSJsb2NrInx8ZT09PSJyZWZpdCJ8fGU9PT0iY2FuY2VsIn0sX19vbkNhcHR1cmVTY3JvbGw6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuX19pc0FuaW1hdGluZyYmISh6dChlKS5wYXRoLmluZGV4T2YodGhpcyk+PTApKXN3aXRjaCh0aGlzLnNjcm9sbEFjdGlvbil7Y2FzZSJsb2NrIjp0aGlzLl9fcmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7YnJlYWs7Y2FzZSJyZWZpdCI6dGhpcy5fX2RlcmFmKCJyZWZpdCIsdGhpcy5yZWZpdCk7YnJlYWs7Y2FzZSJjYW5jZWwiOnRoaXMuY2FuY2VsKGUpO2JyZWFrfX0sX19zYXZlU2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oKXtkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50Pyh0aGlzLl9fc2Nyb2xsVG9wPWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsVG9wLHRoaXMuX19zY3JvbGxMZWZ0PWRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc2Nyb2xsTGVmdCk6KHRoaXMuX19zY3JvbGxUb3A9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCksdGhpcy5fX3Njcm9sbExlZnQ9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQsZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSl9LF9fcmVzdG9yZVNjcm9sbFBvc2l0aW9uOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudD8oZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudC5zY3JvbGxUb3A9dGhpcy5fX3Njcm9sbFRvcCxkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50LnNjcm9sbExlZnQ9dGhpcy5fX3Njcm9sbExlZnQpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wPWRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wPXRoaXMuX19zY3JvbGxUb3AsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ9ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0PXRoaXMuX19zY3JvbGxMZWZ0KX19LE9iZT1lPT5lLmFzc2lnbmVkU2xvdHx8ZS5wYXJlbnROb2RlfHxlLmhvc3QsemJlPShlLHQpPT57Zm9yKGxldCByPXQ7cjtyPU9iZShyKSlpZihyPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sS3g9W2QwdCxKcyxQbV07dmFyIHZXPXtob3N0QXR0cmlidXRlczp7cm9sZToiZGlhbG9nIix0YWJpbmRleDoiLTEifSxwcm9wZXJ0aWVzOnttb2RhbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfX3JlYWRpZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LG9ic2VydmVyczpbIl9tb2RhbENoYW5nZWQobW9kYWwsIF9fcmVhZGllZCkiXSxsaXN0ZW5lcnM6e3RhcDoiX29uRGlhbG9nQ2xpY2sifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX19wcmV2Tm9DYW5jZWxPbk91dHNpZGVDbGljaz10aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSx0aGlzLl9fcHJldldpdGhCYWNrZHJvcD10aGlzLndpdGhCYWNrZHJvcCx0aGlzLl9fcmVhZGllZD0hMH0sX21vZGFsQ2hhbmdlZDpmdW5jdGlvbihlLHQpeyF0fHwoZT8odGhpcy5fX3ByZXZOb0NhbmNlbE9uT3V0c2lkZUNsaWNrPXRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljayx0aGlzLl9fcHJldk5vQ2FuY2VsT25Fc2NLZXk9dGhpcy5ub0NhbmNlbE9uRXNjS2V5LHRoaXMuX19wcmV2V2l0aEJhY2tkcm9wPXRoaXMud2l0aEJhY2tkcm9wLHRoaXMubm9DYW5jZWxPbk91dHNpZGVDbGljaz0hMCx0aGlzLm5vQ2FuY2VsT25Fc2NLZXk9ITAsdGhpcy53aXRoQmFja2Ryb3A9ITApOih0aGlzLm5vQ2FuY2VsT25PdXRzaWRlQ2xpY2s9dGhpcy5ub0NhbmNlbE9uT3V0c2lkZUNsaWNrJiZ0aGlzLl9fcHJldk5vQ2FuY2VsT25PdXRzaWRlQ2xpY2ssdGhpcy5ub0NhbmNlbE9uRXNjS2V5PXRoaXMubm9DYW5jZWxPbkVzY0tleSYmdGhpcy5fX3ByZXZOb0NhbmNlbE9uRXNjS2V5LHRoaXMud2l0aEJhY2tkcm9wPXRoaXMud2l0aEJhY2tkcm9wJiZ0aGlzLl9fcHJldldpdGhCYWNrZHJvcCkpfSxfdXBkYXRlQ2xvc2luZ1JlYXNvbkNvbmZpcm1lZDpmdW5jdGlvbihlKXt0aGlzLmNsb3NpbmdSZWFzb249dGhpcy5jbG9zaW5nUmVhc29ufHx7fSx0aGlzLmNsb3NpbmdSZWFzb24uY29uZmlybWVkPWV9LF9vbkRpYWxvZ0NsaWNrOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD16dChlKS5wYXRoLHI9MCxuPXQuaW5kZXhPZih0aGlzKTtyPG47cisrKXt2YXIgaT10W3JdO2lmKGkuaGFzQXR0cmlidXRlJiYoaS5oYXNBdHRyaWJ1dGUoImRpYWxvZy1kaXNtaXNzIil8fGkuaGFzQXR0cmlidXRlKCJkaWFsb2ctY29uZmlybSIpKSl7dGhpcy5fdXBkYXRlQ2xvc2luZ1JlYXNvbkNvbmZpcm1lZChpLmhhc0F0dHJpYnV0ZSgiZGlhbG9nLWNvbmZpcm0iKSksdGhpcy5jbG9zZSgpLGUuc3RvcFByb3BhZ2F0aW9uKCk7YnJlYWt9fX19LHcwdD1bS3gsdlddO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZSBpbmNsdWRlPSJwYXBlci1kaWFsb2ctc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItZGlhbG9nIixiZWhhdmlvcnM6W3cwdCx4OV0sbGlzdGVuZXJzOnsibmVvbi1hbmltYXRpb24tZmluaXNoIjoiX29uTmVvbkFuaW1hdGlvbkZpbmlzaCJ9LF9yZW5kZXJPcGVuZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpLHRoaXMucGxheUFuaW1hdGlvbigiZW50cnkiKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpe3RoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5wbGF5QW5pbWF0aW9uKCJleGl0Iil9LF9vbk5lb25BbmltYXRpb25GaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLm9wZW5lZD90aGlzLl9maW5pc2hSZW5kZXJPcGVuZWQoKTp0aGlzLl9maW5pc2hSZW5kZXJDbG9zZWQoKX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdCguaXMtc2Nyb2xsZWQ6bm90KDpmaXJzdC1jaGlsZCkpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kaXZpZGVyLWNvbG9yKTsKICAgICAgfQoKICAgICAgOmhvc3QoLmNhbi1zY3JvbGw6bm90KC5zY3JvbGxlZC10by1ib3R0b20pOm5vdCg6bGFzdC1jaGlsZCkpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRpdmlkZXItY29sb3IpOwogICAgICB9CgogICAgICAuc2Nyb2xsYWJsZSB7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwoKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtc2Nyb2xsOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlOwogICAgICB9CgogICAgICAuZml0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InNjcm9sbGFibGUiIGNsYXNzPSJzY3JvbGxhYmxlIiBvbi1zY3JvbGw9InVwZGF0ZVNjcm9sbFN0YXRlIj4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlIixwcm9wZXJ0aWVzOntkaWFsb2dFbGVtZW50Ont0eXBlOk9iamVjdH19LGdldCBzY3JvbGxUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLnNjcm9sbGFibGV9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGFyZ2V0KCksdGhpcy5jbGFzc0xpc3QuYWRkKCJuby1wYWRkaW5nIil9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlVGFyZ2V0KCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUuYmluZCh0aGlzKSl9LHVwZGF0ZVNjcm9sbFN0YXRlOmZ1bmN0aW9uKCl7dGhpcy50b2dnbGVDbGFzcygiaXMtc2Nyb2xsZWQiLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcD4wKSx0aGlzLnRvZ2dsZUNsYXNzKCJjYW4tc2Nyb2xsIix0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ8dGhpcy5zY3JvbGxUYXJnZXQuc2Nyb2xsSGVpZ2h0KSx0aGlzLnRvZ2dsZUNsYXNzKCJzY3JvbGxlZC10by1ib3R0b20iLHRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbFRvcCt0aGlzLnNjcm9sbFRhcmdldC5vZmZzZXRIZWlnaHQ+PXRoaXMuc2Nyb2xsVGFyZ2V0LnNjcm9sbEhlaWdodCl9LF9lbnN1cmVUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLmRpYWxvZ0VsZW1lbnQ9dGhpcy5kaWFsb2dFbGVtZW50fHx0aGlzLnBhcmVudEVsZW1lbnQsdGhpcy5kaWFsb2dFbGVtZW50JiZ0aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzJiZ0aGlzLmRpYWxvZ0VsZW1lbnQuYmVoYXZpb3JzLmluZGV4T2YodlcpPj0wPyh0aGlzLmRpYWxvZ0VsZW1lbnQuc2l6aW5nVGFyZ2V0PXRoaXMuc2Nyb2xsVGFyZ2V0LHRoaXMuc2Nyb2xsVGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoImZpdCIpKTp0aGlzLmRpYWxvZ0VsZW1lbnQmJnRoaXMuc2Nyb2xsVGFyZ2V0LmNsYXNzTGlzdC5hZGQoImZpdCIpfX0pO3ZhciBlYz1ZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGNsaXA6IHJlY3QoMHB4LDBweCwwcHgsMHB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgYXJpYS1saXZlJD0iW1ttb2RlXV0iPltbX3RleHRdXTwvZGl2PgpgLGlzOiJpcm9uLWExMXktYW5ub3VuY2VyIixwcm9wZXJ0aWVzOnttb2RlOnt0eXBlOlN0cmluZyx2YWx1ZToicG9saXRlIn0sdGltZW91dDp7dHlwZTpOdW1iZXIsdmFsdWU6MTUwfSxfdGV4dDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxjcmVhdGVkOmZ1bmN0aW9uKCl7ZWMuaW5zdGFuY2V8fChlYy5pbnN0YW5jZT10aGlzKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJpcm9uLWFubm91bmNlIix0aGlzLl9vbklyb25Bbm5vdW5jZS5iaW5kKHRoaXMpKX0sYW5ub3VuY2U6ZnVuY3Rpb24oZSl7dGhpcy5fdGV4dD0iIix0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fdGV4dD1lfSx0aGlzLnRpbWVvdXQpfSxfb25Jcm9uQW5ub3VuY2U6ZnVuY3Rpb24oZSl7ZS5kZXRhaWwmJmUuZGV0YWlsLnRleHQmJnRoaXMuYW5ub3VuY2UoZS5kZXRhaWwudGV4dCl9fSk7ZWMuaW5zdGFuY2U9bnVsbDtlYy5yZXF1ZXN0QXZhaWxhYmlsaXR5PWZ1bmN0aW9uKCl7ZWMuaW5zdGFuY2V8fChlYy5pbnN0YW5jZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpcm9uLWExMXktYW5ub3VuY2VyIikpLGRvY3VtZW50LmJvZHk/ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlYy5pbnN0YW5jZSk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVjLmluc3RhbmNlKX0pfTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdCBpZD0iY29udGVudCI+PC9zbG90PgpgLGlzOiJpcm9uLWlucHV0IixiZWhhdmlvcnM6W1RoXSxwcm9wZXJ0aWVzOntiaW5kVmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSx2YWx1ZTp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlVmFsdWUoYmluZFZhbHVlKSJ9LGFsbG93ZWRQYXR0ZXJuOnt0eXBlOlN0cmluZ30sYXV0b1ZhbGlkYXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LF9pbnB1dEVsZW1lbnQ6T2JqZWN0fSxvYnNlcnZlcnM6WyJfYmluZFZhbHVlQ2hhbmdlZChiaW5kVmFsdWUsIF9pbnB1dEVsZW1lbnQpIl0sbGlzdGVuZXJzOntpbnB1dDoiX29uSW5wdXQiLGtleXByZXNzOiJfb25LZXlwcmVzcyJ9LGNyZWF0ZWQ6ZnVuY3Rpb24oKXtlYy5yZXF1ZXN0QXZhaWxhYmlsaXR5KCksdGhpcy5fcHJldmlvdXNWYWxpZElucHV0PSIiLHRoaXMuX3BhdHRlcm5BbHJlYWR5Q2hlY2tlZD0hMX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlcj16dCh0aGlzKS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24oZSl7dGhpcy5faW5pdFNsb3R0ZWRJbnB1dCgpfS5iaW5kKHRoaXMpKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmKHp0KHRoaXMpLnVub2JzZXJ2ZU5vZGVzKHRoaXMuX29ic2VydmVyKSx0aGlzLl9vYnNlcnZlcj1udWxsKX0sZ2V0IGlucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLl9pbnB1dEVsZW1lbnR9LF9pbml0U2xvdHRlZElucHV0OmZ1bmN0aW9uKCl7dGhpcy5faW5wdXRFbGVtZW50PXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKVswXSx0aGlzLmlucHV0RWxlbWVudCYmdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUmJih0aGlzLmJpbmRWYWx1ZT10aGlzLmlucHV0RWxlbWVudC52YWx1ZSksdGhpcy5maXJlKCJpcm9uLWlucHV0LXJlYWR5Iil9LGdldCBfcGF0dGVyblJlZ0V4cCgpe3ZhciBlO2lmKHRoaXMuYWxsb3dlZFBhdHRlcm4pZT1uZXcgUmVnRXhwKHRoaXMuYWxsb3dlZFBhdHRlcm4pO2Vsc2Ugc3dpdGNoKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpe2Nhc2UibnVtYmVyIjplPS9bMC05LixlLV0vO2JyZWFrfXJldHVybiBlfSxfYmluZFZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlLHQpeyF0fHwoZT09PXZvaWQgMD90LnZhbHVlPW51bGw6ZSE9PXQudmFsdWUmJih0aGlzLmlucHV0RWxlbWVudC52YWx1ZT1lKSx0aGlzLmF1dG9WYWxpZGF0ZSYmdGhpcy52YWxpZGF0ZSgpLHRoaXMuZmlyZSgiYmluZC12YWx1ZS1jaGFuZ2VkIix7dmFsdWU6ZX0pKX0sX29uSW5wdXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmFsbG93ZWRQYXR0ZXJuJiYhdGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkKXt2YXIgZT10aGlzLl9jaGVja1BhdHRlcm5WYWxpZGl0eSgpO2V8fCh0aGlzLl9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXIoIkludmFsaWQgc3RyaW5nIG9mIGNoYXJhY3RlcnMgbm90IGVudGVyZWQuIiksdGhpcy5pbnB1dEVsZW1lbnQudmFsdWU9dGhpcy5fcHJldmlvdXNWYWxpZElucHV0KX10aGlzLmJpbmRWYWx1ZT10aGlzLl9wcmV2aW91c1ZhbGlkSW5wdXQ9dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUsdGhpcy5fcGF0dGVybkFscmVhZHlDaGVja2VkPSExfSxfaXNQcmludGFibGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5rZXlDb2RlPT04fHxlLmtleUNvZGU9PTl8fGUua2V5Q29kZT09MTN8fGUua2V5Q29kZT09Mjcscj1lLmtleUNvZGU9PTE5fHxlLmtleUNvZGU9PTIwfHxlLmtleUNvZGU9PTQ1fHxlLmtleUNvZGU9PTQ2fHxlLmtleUNvZGU9PTE0NHx8ZS5rZXlDb2RlPT0xNDV8fGUua2V5Q29kZT4zMiYmZS5rZXlDb2RlPDQxfHxlLmtleUNvZGU+MTExJiZlLmtleUNvZGU8MTI0O3JldHVybiF0JiYhKGUuY2hhckNvZGU9PTAmJnIpfSxfb25LZXlwcmVzczpmdW5jdGlvbihlKXtpZighKCF0aGlzLmFsbG93ZWRQYXR0ZXJuJiZ0aGlzLmlucHV0RWxlbWVudC50eXBlIT09Im51bWJlciIpKXt2YXIgdD10aGlzLl9wYXR0ZXJuUmVnRXhwO2lmKCEhdCYmIShlLm1ldGFLZXl8fGUuY3RybEtleXx8ZS5hbHRLZXkpKXt0aGlzLl9wYXR0ZXJuQWxyZWFkeUNoZWNrZWQ9ITA7dmFyIHI9U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlKTt0aGlzLl9pc1ByaW50YWJsZShlKSYmIXQudGVzdChyKSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9hbm5vdW5jZUludmFsaWRDaGFyYWN0ZXIoIkludmFsaWQgY2hhcmFjdGVyICIrcisiIG5vdCBlbnRlcmVkLiIpKX19fSxfY2hlY2tQYXR0ZXJuVmFsaWRpdHk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wYXR0ZXJuUmVnRXhwO2lmKCFlKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8dGhpcy5pbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO3QrKylpZighZS50ZXN0KHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlW3RdKSlyZXR1cm4hMTtyZXR1cm4hMH0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy5pbnB1dEVsZW1lbnQpcmV0dXJuIHRoaXMuaW52YWxpZD0hMSwhMDt2YXIgZT10aGlzLmlucHV0RWxlbWVudC5jaGVja1ZhbGlkaXR5KCk7cmV0dXJuIGUmJih0aGlzLnJlcXVpcmVkJiZ0aGlzLmJpbmRWYWx1ZT09PSIiP2U9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKGU9VGgudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMuYmluZFZhbHVlKSkpLHRoaXMuaW52YWxpZD0hZSx0aGlzLmZpcmUoImlyb24taW5wdXQtdmFsaWRhdGUiKSxlfSxfYW5ub3VuY2VJbnZhbGlkQ2hhcmFjdGVyOmZ1bmN0aW9uKGUpe3RoaXMuZmlyZSgiaXJvbi1hbm5vdW5jZSIse3RleHQ6ZX0pfSxfY29tcHV0ZVZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0pO3ZhciBUOT17YXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoImFkZG9uLWF0dGFjaGVkIil9LHVwZGF0ZTpmdW5jdGlvbihlKXt9fTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY2hhci1jb3VudGVyOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmRpcihydGwpKSB7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4+W1tfY2hhckNvdW50ZXJTdHJdXTwvc3Bhbj4KYCxpczoicGFwZXItaW5wdXQtY2hhci1jb3VudGVyIixiZWhhdmlvcnM6W1Q5XSxwcm9wZXJ0aWVzOntfY2hhckNvdW50ZXJTdHI6e3R5cGU6U3RyaW5nLHZhbHVlOiIwIn19LHVwZGF0ZTpmdW5jdGlvbihlKXtpZighIWUuaW5wdXRFbGVtZW50KXtlLnZhbHVlPWUudmFsdWV8fCIiO3ZhciB0PWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGgudG9TdHJpbmcoKTtlLmlucHV0RWxlbWVudC5oYXNBdHRyaWJ1dGUoIm1heGxlbmd0aCIpJiYodCs9Ii8iK2UuaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIikpLHRoaXMuX2NoYXJDb3VudGVyU3RyPXR9fX0pO3ZhciBTMHQ9UWAKPGN1c3RvbS1zdHlsZT4KICA8c3R5bGUgaXM9ImN1c3RvbS1zdHlsZSI+CiAgICBodG1sIHsKICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiB0byBtYWtlIGEgc3RhY2tpbmcgY29udGV4dCAqLwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtYWxpZ24sIGJvdHRvbSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgfTsKICAgIH0KICA8L3N0eWxlPgo8L2N1c3RvbS1zdHlsZT4KYDtTMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChTMHQuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyOwogICAgICB9CgogICAgICA6aG9zdChbaW5saW5lXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDAuMzM7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIFtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5mbG9hdGVkLWxhYmVsLXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNhcHRpb247CiAgICAgIH0KCiAgICAgIC51bmRlcmxpbmUgewogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmZvY3VzZWQtbGluZSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CgogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDAsMSwxKTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMCwxLDEpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lLWZvY3VzOwogICAgICB9CgogICAgICAudW5kZXJsaW5lLmlzLWhpZ2hsaWdodGVkIC5mb2N1c2VkLWxpbmUgewogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1czsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCiAgICAgIC51bmRlcmxpbmUuaXMtaW52YWxpZCAuZm9jdXNlZC1saW5lIHsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBub25lOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1czsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCiAgICAgIC51bmZvY3VzZWQtbGluZSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci11bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC51bmZvY3VzZWQtbGluZSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZDsKICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItdW5kZXJsaW5lLWRpc2FibGVkOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1hdXRvOwogICAgICAgIEBhcHBseSAtLWxheW91dC1yZWxhdGl2ZTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChsYWJlbCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udDogaW5oZXJpdDsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC4yNXMsIHdpZHRoIDAuMjVzOwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cywgd2lkdGggMC4yNXM7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IHRvcDsKICAgICAgICAvKiBGaXggZm9yIHNhZmFyaSBub3QgZm9jdXNpbmcgMC1oZWlnaHQgZGF0ZS90aW1lIGlucHV0cyB3aXRoIC13ZWJraXQtYXBwZXJhbmNlOiBub25lOyAqLwogICAgICAgIG1pbi1oZWlnaHQ6IDFweDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tbm93cmFwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdHJhbnNpdGlvbi1lYXNpbmc7CiAgICAgIH0KCgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpOmJlZm9yZSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCk6YmVmb3JlIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtYmVmb3JlOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQobGFiZWwpOmFmdGVyLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKTphZnRlciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWFmdGVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1mbG9hdGluZyA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTc1JSkgc2NhbGUoMC43NSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC03NSUpIHNjYWxlKDAuNzUpOwoKICAgICAgICAvKiBTaW5jZSB3ZSBzY2FsZSB0byA3NS8xMDAgb2YgdGhlIHNpemUsIHdlIGFjdHVhbGx5IGhhdmUgMTAwLzc1IG9mIHRoZQogICAgICAgIG9yaWdpbmFsIHNwYWNlIG5vdyBhdmFpbGFibGUgKi8KICAgICAgICB3aWR0aDogMTMzJTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsLWZsb2F0aW5nOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIC5pbnB1dC1jb250ZW50LmxhYmVsLWlzLWZsb2F0aW5nIDo6c2xvdHRlZChsYWJlbCksCiAgICAgIDpob3N0KDpkaXIocnRsKSkgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtZmxvYXRpbmcgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1sYWJlbCkgewogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IGF1dG87CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiByaWdodCB0b3A7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQobGFiZWwpLAogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWdobGlnaHRlZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWwtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWxhYmVsKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5sYWJlbC1pcy1oaWRkZW4gOjpzbG90dGVkKGxhYmVsKSwKICAgICAgLmlucHV0LWNvbnRlbnQubGFiZWwtaXMtaGlkZGVuIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtbGFiZWwpIHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZChpcm9uLWlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoLnBhcGVyLWlucHV0LWlucHV0KSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZTsKICAgICAgICAvKiBUaGUgYXBwbHkgc2hpbSBkb2Vzbid0IGFwcGx5IHRoZSBuZXN0ZWQgY29sb3IgY3VzdG9tIHByb3BlcnR5LAogICAgICAgICAgc28gd2UgaGF2ZSB0byByZS1hcHBseSBpdCBoZXJlLiAqLwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgLmlucHV0LWNvbnRlbnQgOjpzbG90dGVkKGlucHV0KTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LXdlYmtpdC1zcGlubmVyOwogICAgICB9CgogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZChpbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24taW5wdXQpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCh0ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmZvY3VzZWQgOjpzbG90dGVkKGlyb24tYXV0b2dyb3ctdGV4dGFyZWEpLAogICAgICAuaW5wdXQtY29udGVudC5mb2N1c2VkIDo6c2xvdHRlZCgucGFwZXItaW5wdXQtaW5wdXQpIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtZm9jdXM7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKGlucHV0KSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1pbnB1dCksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKHRleHRhcmVhKSwKICAgICAgLmlucHV0LWNvbnRlbnQuaXMtaW52YWxpZCA6OnNsb3R0ZWQoaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSksCiAgICAgIC5pbnB1dC1jb250ZW50LmlzLWludmFsaWQgOjpzbG90dGVkKC5wYXBlci1pbnB1dC1pbnB1dCkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC1pbnZhbGlkOwogICAgICB9CgogICAgICAucHJlZml4IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtc3ViaGVhZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleC1ub25lOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LXByZWZpeDsKICAgICAgfQoKICAgICAgLnN1ZmZpeCA6OnNsb3R0ZWQoKikgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LXN1YmhlYWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtbm9uZTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtc3VmZml4OwogICAgICB9CgogICAgICAvKiBGaXJlZm94IHNldHMgYSBtaW4td2lkdGggb24gdGhlIGlucHV0LCB3aGljaCBjYW4gY2F1c2UgbGF5b3V0IGlzc3VlcyAqLwogICAgICAuaW5wdXQtY29udGVudCA6OnNsb3R0ZWQoaW5wdXQpIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pbnB1dC1jb250ZW50IDo6c2xvdHRlZCh0ZXh0YXJlYSkgewogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLmFkZC1vbi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5hZGQtb24tY29udGVudC5pcy1pbnZhbGlkIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnZhbGlkLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CgogICAgICAuYWRkLW9uLWNvbnRlbnQuaXMtaGlnaGxpZ2h0ZWQgOjpzbG90dGVkKCopIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZmxvYXRlZC1sYWJlbC1wbGFjZWhvbGRlciIgYXJpYS1oaWRkZW49InRydWUiIGhpZGRlbj0iW1tub0xhYmVsRmxvYXRdXSI+Jm5ic3A7PC9kaXY+CgogICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgIDxzcGFuIGNsYXNzPSJwcmVmaXgiPjxzbG90IG5hbWU9InByZWZpeCI+PC9zbG90Pjwvc3Bhbj4KCiAgICAgIDxkaXYgY2xhc3MkPSJbW19jb21wdXRlSW5wdXRDb250ZW50Q2xhc3Mobm9MYWJlbEZsb2F0LGFsd2F5c0Zsb2F0TGFiZWwsZm9jdXNlZCxpbnZhbGlkLF9pbnB1dEhhc0NvbnRlbnQpXV0iIGlkPSJsYWJlbEFuZElucHV0Q29udGFpbmVyIj4KICAgICAgICA8c2xvdCBuYW1lPSJsYWJlbCI+PC9zbG90PgogICAgICAgIDxzbG90IG5hbWU9ImlucHV0Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgoKICAgICAgPHNwYW4gY2xhc3M9InN1ZmZpeCI+PHNsb3QgbmFtZT0ic3VmZml4Ij48L3Nsb3Q+PC9zcGFuPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcyQ9IltbX2NvbXB1dGVVbmRlcmxpbmVDbGFzcyhmb2N1c2VkLGludmFsaWQpXV0iPgogICAgICA8ZGl2IGNsYXNzPSJ1bmZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImZvY3VzZWQtbGluZSI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzJD0iW1tfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzKGZvY3VzZWQsaW52YWxpZCldXSI+CiAgICAgIDxzbG90IG5hbWU9ImFkZC1vbiI+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLWlucHV0LWNvbnRhaW5lciIscHJvcGVydGllczp7bm9MYWJlbEZsb2F0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsd2F5c0Zsb2F0TGFiZWw6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYXR0ckZvclZhbHVlOnt0eXBlOlN0cmluZyx2YWx1ZToiYmluZC12YWx1ZSJ9LGF1dG9WYWxpZGF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbnZhbGlkOntvYnNlcnZlcjoiX2ludmFsaWRDaGFuZ2VkIix0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGZvY3VzZWQ6e3JlYWRPbmx5OiEwLHR5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITB9LF9hZGRvbnM6e3R5cGU6QXJyYXl9LF9pbnB1dEhhc0NvbnRlbnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2lucHV0U2VsZWN0b3I6e3R5cGU6U3RyaW5nLHZhbHVlOiJpbnB1dCxpcm9uLWlucHV0LHRleHRhcmVhLC5wYXBlci1pbnB1dC1pbnB1dCJ9LF9ib3VuZE9uRm9jdXM6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25Gb2N1cy5iaW5kKHRoaXMpfX0sX2JvdW5kT25CbHVyOnt0eXBlOkZ1bmN0aW9uLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQmx1ci5iaW5kKHRoaXMpfX0sX2JvdW5kT25JbnB1dDp7dHlwZTpGdW5jdGlvbix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbklucHV0LmJpbmQodGhpcyl9fSxfYm91bmRWYWx1ZUNoYW5nZWQ6e3R5cGU6RnVuY3Rpb24sdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25WYWx1ZUNoYW5nZWQuYmluZCh0aGlzKX19fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQiLCJpcm9uLWlucHV0LXZhbGlkYXRlIjoiX29uSXJvbklucHV0VmFsaWRhdGUifSxnZXQgX3ZhbHVlQ2hhbmdlZEV2ZW50KCl7cmV0dXJuIHRoaXMuYXR0ckZvclZhbHVlKyItY2hhbmdlZCJ9LGdldCBfcHJvcGVydHlGb3JWYWx1ZSgpe3JldHVybiB3bSh0aGlzLmF0dHJGb3JWYWx1ZSl9LGdldCBfaW5wdXRFbGVtZW50KCl7cmV0dXJuIHp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3IodGhpcy5faW5wdXRTZWxlY3Rvcil9LGdldCBfaW5wdXRFbGVtZW50VmFsdWUoKXtyZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50W3RoaXMuX3Byb3BlcnR5Rm9yVmFsdWVdfHx0aGlzLl9pbnB1dEVsZW1lbnQudmFsdWV9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMCx0aGlzLl9hZGRvbnN8fCh0aGlzLl9hZGRvbnM9W10pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX2JvdW5kT25Gb2N1cywhMCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9ib3VuZE9uQmx1ciwhMCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5hdHRyRm9yVmFsdWU/dGhpcy5faW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fdmFsdWVDaGFuZ2VkRXZlbnQsdGhpcy5fYm91bmRWYWx1ZUNoYW5nZWQpOnRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLHRoaXMuX29uSW5wdXQpLHRoaXMuX2lucHV0RWxlbWVudFZhbHVlJiZ0aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZSE9IiI/dGhpcy5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50KTp0aGlzLl9oYW5kbGVWYWx1ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGUpe3RoaXMuX2FkZG9uc3x8KHRoaXMuX2FkZG9ucz1bXSk7dmFyIHQ9ZS50YXJnZXQ7dGhpcy5fYWRkb25zLmluZGV4T2YodCk9PT0tMSYmKHRoaXMuX2FkZG9ucy5wdXNoKHQpLHRoaXMuaXNBdHRhY2hlZCYmdGhpcy5faGFuZGxlVmFsdWUodGhpcy5faW5wdXRFbGVtZW50KSl9LF9vbkZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fc2V0Rm9jdXNlZCghMCl9LF9vbkJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9zZXRGb2N1c2VkKCExKSx0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZSh0aGlzLl9pbnB1dEVsZW1lbnQpfSxfb25JbnB1dDpmdW5jdGlvbihlKXt0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZShlLnRhcmdldCl9LF9vblZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDt0aGlzLl9faXNGaXJzdFZhbHVlVXBkYXRlJiYodGhpcy5fX2lzRmlyc3RWYWx1ZVVwZGF0ZT0hMSx0LnZhbHVlPT09dm9pZCAwfHx0LnZhbHVlPT09IiIpfHx0aGlzLl9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZShlLnRhcmdldCl9LF9oYW5kbGVWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnB1dEVsZW1lbnRWYWx1ZTt0fHx0PT09MHx8ZS50eXBlPT09Im51bWJlciImJiFlLmNoZWNrVmFsaWRpdHkoKT90aGlzLl9pbnB1dEhhc0NvbnRlbnQ9ITA6dGhpcy5faW5wdXRIYXNDb250ZW50PSExLHRoaXMudXBkYXRlQWRkb25zKHtpbnB1dEVsZW1lbnQ6ZSx2YWx1ZTp0LGludmFsaWQ6dGhpcy5pbnZhbGlkfSl9LF9oYW5kbGVWYWx1ZUFuZEF1dG9WYWxpZGF0ZTpmdW5jdGlvbihlKXtpZih0aGlzLmF1dG9WYWxpZGF0ZSYmZSl7dmFyIHQ7ZS52YWxpZGF0ZT90PWUudmFsaWRhdGUodGhpcy5faW5wdXRFbGVtZW50VmFsdWUpOnQ9ZS5jaGVja1ZhbGlkaXR5KCksdGhpcy5pbnZhbGlkPSF0fXRoaXMuX2hhbmRsZVZhbHVlKGUpfSxfb25Jcm9uSW5wdXRWYWxpZGF0ZTpmdW5jdGlvbihlKXt0aGlzLmludmFsaWQ9dGhpcy5faW5wdXRFbGVtZW50LmludmFsaWR9LF9pbnZhbGlkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2FkZG9ucyYmdGhpcy51cGRhdGVBZGRvbnMoe2ludmFsaWQ6dGhpcy5pbnZhbGlkfSl9LHVwZGF0ZUFkZG9uczpmdW5jdGlvbihlKXtmb3IodmFyIHQscj0wO3Q9dGhpcy5fYWRkb25zW3JdO3IrKyl0LnVwZGF0ZShlKX0sX2NvbXB1dGVJbnB1dENvbnRlbnRDbGFzczpmdW5jdGlvbihlLHQscixuLGkpe3ZhciBvPSJpbnB1dC1jb250ZW50IjtpZihlKWkmJihvKz0iIGxhYmVsLWlzLWhpZGRlbiIpLG4mJihvKz0iIGlzLWludmFsaWQiKTtlbHNle3ZhciBhPXRoaXMucXVlcnlTZWxlY3RvcigibGFiZWwiKTt0fHxpPyhvKz0iIGxhYmVsLWlzLWZsb2F0aW5nIix0aGlzLiQubGFiZWxBbmRJbnB1dENvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0ic3RhdGljIixuP28rPSIgaXMtaW52YWxpZCI6ciYmKG8rPSIgbGFiZWwtaXMtaGlnaGxpZ2h0ZWQiKSk6KGEmJih0aGlzLiQubGFiZWxBbmRJbnB1dENvbnRhaW5lci5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxuJiYobys9IiBpcy1pbnZhbGlkIikpfXJldHVybiByJiYobys9IiBmb2N1c2VkIiksb30sX2NvbXB1dGVVbmRlcmxpbmVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciByPSJ1bmRlcmxpbmUiO3JldHVybiB0P3IrPSIgaXMtaW52YWxpZCI6ZSYmKHIrPSIgaXMtaGlnaGxpZ2h0ZWQiKSxyfSxfY29tcHV0ZUFkZE9uQ29udGVudENsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ImFkZC1vbi1jb250ZW50IjtyZXR1cm4gdD9yKz0iIGlzLWludmFsaWQiOmUmJihyKz0iIGlzLWhpZ2hsaWdodGVkIikscn19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwoKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWludmFsaWQtY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY2FwdGlvbjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1lcnJvcjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDowOwogICAgICAgIHJpZ2h0OjA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgewogICAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICAgIH0KCiAgICAgICNhMTF5V3JhcHBlciB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICA6aG9zdChbaW52YWxpZF0pICNhMTF5V3JhcHBlciB7CiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8IS0tCiAgICBJZiB0aGUgcGFwZXItaW5wdXQtZXJyb3IgZWxlbWVudCBpcyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuCiAgICBcYGFyaWEtZGVzY3JpYmVkYnlcYCBhdHRyaWJ1dGUsIHN1Y2ggYXMgd2hlbiB1c2VkIGFzIGEgcGFwZXItaW5wdXQgYWRkLW9uLAogICAgdGhlbiBhcHBseWluZyBcYHZpc2liaWxpdHk6IGhpZGRlbjtcYCB0byB0aGUgcGFwZXItaW5wdXQtZXJyb3IgZWxlbWVudCBpdHNlbGYKICAgIGRvZXMgbm90IGhpZGUgdGhlIGVycm9yLgoKICAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWU6CiAgICBodHRwczovL3d3dy53My5vcmcvVFIvYWNjbmFtZS0xLjEvI21hcHBpbmdfYWRkaXRpb25hbF9uZF9kZXNjcmlwdGlvbgogICAgLS0+CiAgICA8ZGl2IGlkPSJhMTF5V3JhcHBlciI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1pbnB1dC1lcnJvciIsYmVoYXZpb3JzOltUOV0scHJvcGVydGllczp7aW52YWxpZDp7cmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwLHR5cGU6Qm9vbGVhbn19LHVwZGF0ZTpmdW5jdGlvbihlKXt0aGlzLl9zZXRJbnZhbGlkKGUuaW52YWxpZCl9fSk7dmFyIFp4PXt9O1p4Lk5leHRMYWJlbElEPTE7WnguTmV4dEFkZG9uSUQ9MTtaeC5OZXh0SW5wdXRJRD0xO3ZhciBGYmU9e3Byb3BlcnRpZXM6e2xhYmVsOnt0eXBlOlN0cmluZ30sdmFsdWU6e25vdGlmeTohMCx0eXBlOlN0cmluZ30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saW52YWxpZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0sYWxsb3dlZFBhdHRlcm46e3R5cGU6U3RyaW5nfSx0eXBlOnt0eXBlOlN0cmluZ30sbGlzdDp7dHlwZTpTdHJpbmd9LHBhdHRlcm46e3R5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxlcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nfSxjaGFyQ291bnRlcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0xhYmVsRmxvYXQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxhdXRvVmFsaWRhdGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdmFsaWRhdG9yOnt0eXBlOlN0cmluZ30sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9hdXRvZm9jdXNDaGFuZ2VkIn0saW5wdXRtb2RlOnt0eXBlOlN0cmluZ30sbWlubGVuZ3RoOnt0eXBlOk51bWJlcn0sbWF4bGVuZ3RoOnt0eXBlOk51bWJlcn0sbWluOnt0eXBlOlN0cmluZ30sbWF4Ont0eXBlOlN0cmluZ30sc3RlcDp7dHlwZTpTdHJpbmd9LG5hbWU6e3R5cGU6U3RyaW5nfSxwbGFjZWhvbGRlcjp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LHJlYWRvbmx5Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNpemU6e3R5cGU6TnVtYmVyfSxhdXRvY2FwaXRhbGl6ZTp7dHlwZTpTdHJpbmcsdmFsdWU6Im5vbmUifSxhdXRvY29ycmVjdDp7dHlwZTpTdHJpbmcsdmFsdWU6Im9mZiJ9LGF1dG9zYXZlOnt0eXBlOlN0cmluZ30scmVzdWx0czp7dHlwZTpOdW1iZXJ9LGFjY2VwdDp7dHlwZTpTdHJpbmd9LG11bHRpcGxlOnt0eXBlOkJvb2xlYW59LF9hcmlhRGVzY3JpYmVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfYXJpYUxhYmVsbGVkQnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxfaW5wdXRJZDp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9fSxsaXN0ZW5lcnM6eyJhZGRvbi1hdHRhY2hlZCI6Il9vbkFkZG9uQXR0YWNoZWQifSxrZXlCaW5kaW5nczp7InNoaWZ0K3RhYjprZXlkb3duIjoiX29uU2hpZnRUYWJEb3duIn0saG9zdEF0dHJpYnV0ZXM6e3RhYmluZGV4OjB9LGdldCBpbnB1dEVsZW1lbnQoKXtyZXR1cm4gdGhpcy4kfHwodGhpcy4kPXt9KSx0aGlzLiQuaW5wdXR8fCh0aGlzLl9nZW5lcmF0ZUlucHV0SWQoKSx0aGlzLiQuaW5wdXQ9dGhpcy4kJCgiIyIrdGhpcy5faW5wdXRJZCkpLHRoaXMuJC5pbnB1dH0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50fSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fdHlwZXNUaGF0SGF2ZVRleHQ9WyJkYXRlIiwiZGF0ZXRpbWUiLCJkYXRldGltZS1sb2NhbCIsIm1vbnRoIiwidGltZSIsIndlZWsiLCJmaWxlIl19LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKSwhbXQmJnRoaXMuaW5wdXRFbGVtZW50JiZ0aGlzLl90eXBlc1RoYXRIYXZlVGV4dC5pbmRleE9mKHRoaXMuaW5wdXRFbGVtZW50LnR5cGUpIT09LTEmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApfSxfYXBwZW5kU3RyaW5nV2l0aFNwYWNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/ZT1lKyIgIit0OmU9dCxlfSxfb25BZGRvbkF0dGFjaGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KGUpLnJvb3RUYXJnZXQ7aWYodC5pZCl0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSx0LmlkKTtlbHNle3ZhciByPSJwYXBlci1pbnB1dC1hZGQtb24tIitaeC5OZXh0QWRkb25JRCsrO3QuaWQ9cix0aGlzLl9hcmlhRGVzY3JpYmVkQnk9dGhpcy5fYXBwZW5kU3RyaW5nV2l0aFNwYWNlKHRoaXMuX2FyaWFEZXNjcmliZWRCeSxyKX19LHZhbGlkYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnZhbGlkYXRlKCl9LF9mb2N1c0JsdXJIYW5kbGVyOmZ1bmN0aW9uKGUpe0RpLl9mb2N1c0JsdXJIYW5kbGVyLmNhbGwodGhpcyxlKSx0aGlzLmZvY3VzZWQmJiF0aGlzLl9zaGlmdFRhYlByZXNzZWQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQmJnRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKX0sX29uU2hpZnRUYWJEb3duOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3RoaXMuX3NoaWZ0VGFiUHJlc3NlZD0hMCx0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHQpLHRoaXMuX3NoaWZ0VGFiUHJlc3NlZD0hMX0sMSl9LF9oYW5kbGVBdXRvVmFsaWRhdGU6ZnVuY3Rpb24oKXt0aGlzLmF1dG9WYWxpZGF0ZSYmdGhpcy52YWxpZGF0ZSgpfSx1cGRhdGVWYWx1ZUFuZFByZXNlcnZlQ2FyZXQ6ZnVuY3Rpb24oZSl7dHJ5e3ZhciB0PXRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0O3RoaXMudmFsdWU9ZSx0aGlzLmlucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydD10LHRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZD10fWNhdGNoKHIpe3RoaXMudmFsdWU9ZX19LF9jb21wdXRlQWx3YXlzRmxvYXRMYWJlbDpmdW5jdGlvbihlLHQpe3JldHVybiB0fHxlfSxfdXBkYXRlQXJpYUxhYmVsbGVkQnk6ZnVuY3Rpb24oKXt2YXIgZT16dCh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3IoImxhYmVsIik7aWYoIWUpe3RoaXMuX2FyaWFMYWJlbGxlZEJ5PSIiO3JldHVybn12YXIgdDtlLmlkP3Q9ZS5pZDoodD0icGFwZXItaW5wdXQtbGFiZWwtIitaeC5OZXh0TGFiZWxJRCsrLGUuaWQ9dCksdGhpcy5fYXJpYUxhYmVsbGVkQnk9dH0sX2dlbmVyYXRlSW5wdXRJZDpmdW5jdGlvbigpeyghdGhpcy5faW5wdXRJZHx8dGhpcy5faW5wdXRJZD09PSIiKSYmKHRoaXMuX2lucHV0SWQ9ImlucHV0LSIrWnguTmV4dElucHV0SUQrKyl9LF9vbkNoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnNoYWRvd1Jvb3QmJnRoaXMuZmlyZShlLnR5cGUse3NvdXJjZUV2ZW50OmV9LHtub2RlOnRoaXMsYnViYmxlczplLmJ1YmJsZXMsY2FuY2VsYWJsZTplLmNhbmNlbGFibGV9KX0sX2F1dG9mb2N1c0NoYW5nZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLmF1dG9mb2N1cyYmdGhpcy5fZm9jdXNhYmxlRWxlbWVudCl7dmFyIGU9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0PWUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCxyPXQmJmUhPT1kb2N1bWVudC5ib2R5JiZlIT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3J8fHRoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKX19fSxDOT1bRGksT28sRmJlXTtZdCh7aXM6InBhcGVyLWlucHV0IixfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbZm9jdXNlZF0pIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIC8qIEZpcmVmb3ggc2V0cyBhIG1pbi13aWR0aCBvbiB0aGUgaW5wdXQsIHdoaWNoIGNhbiBjYXVzZSBsYXlvdXQgaXNzdWVzICovCiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CgogICAgICAvKiBJbiAxLngsIHRoZSA8aW5wdXQ+IGlzIGRpc3RyaWJ1dGVkIHRvIHBhcGVyLWlucHV0LWNvbnRhaW5lciwgd2hpY2ggc3R5bGVzIGl0LgogICAgICBJbiAyLnggdGhlIDxpcm9uLWlucHV0PiBpcyBkaXN0cmlidXRlZCB0byBwYXBlci1pbnB1dC1jb250YWluZXIsIHdoaWNoIHN0eWxlcwogICAgICBpdCwgYnV0IGluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmsgY29ycmVjdGx5LCB3ZSBuZWVkIHRvIHJlc2V0IHNvbWUKICAgICAgb2YgdGhlIG5hdGl2ZSBpbnB1dCdzIHByb3BlcnRpZXMgdG8gaW5oZXJpdCAoZnJvbSB0aGUgaXJvbi1pbnB1dCkgKi8KICAgICAgaXJvbi1pbnB1dCA+IGlucHV0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItc2hhcmVkLWlucHV0LXN0eWxlOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogaW5oZXJpdDsKICAgICAgICB3b3JkLXNwYWNpbmc6IGluaGVyaXQ7CiAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgdGV4dC1zaGFkb3c6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgY3Vyc29yOiBpbmhlcml0OwogICAgICB9CgogICAgICBpbnB1dDpkaXNhYmxlZCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0LWRpc2FibGVkOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwKICAgICAgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dC13ZWJraXQtc3Bpbm5lcjsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi13ZWJraXQtY2xlYXItYnV0dG9uIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQtd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3I7CiAgICAgIH0KCiAgICAgIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBpbnB1dDo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1jb2xvciwgdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpKTsKICAgICAgfQoKICAgICAgaW5wdXQ6Oi1tcy1jbGVhciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLWNsZWFyOwogICAgICB9CgogICAgICBpbnB1dDo6LW1zLXJldmVhbCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaW5wdXQtY29udGFpbmVyLW1zLXJldmVhbDsKICAgICAgfQoKICAgICAgaW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWNvbG9yLCB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICBsYWJlbCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0LWNvbnRhaW5lciBpZD0iY29udGFpbmVyIiBuby1sYWJlbC1mbG9hdD0iW1tub0xhYmVsRmxvYXRdXSIgYWx3YXlzLWZsb2F0LWxhYmVsPSJbW19jb21wdXRlQWx3YXlzRmxvYXRMYWJlbChhbHdheXNGbG9hdExhYmVsLHBsYWNlaG9sZGVyKV1dIiBhdXRvLXZhbGlkYXRlJD0iW1thdXRvVmFsaWRhdGVdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGludmFsaWQ9IltbaW52YWxpZF1dIj4KCiAgICAgIDxzbG90IG5hbWU9InByZWZpeCIgc2xvdD0icHJlZml4Ij48L3Nsb3Q+CgogICAgICA8bGFiZWwgaGlkZGVuJD0iW1shbGFiZWxdXSIgYXJpYS1oaWRkZW49InRydWUiIGZvciQ9IltbX2lucHV0SWRdXSIgc2xvdD0ibGFiZWwiPltbbGFiZWxdXTwvbGFiZWw+CgogICAgICA8IS0tIE5lZWQgdG8gYmluZCBtYXhsZW5ndGggc28gdGhhdCB0aGUgcGFwZXItaW5wdXQtY2hhci1jb3VudGVyIHdvcmtzIGNvcnJlY3RseSAtLT4KICAgICAgPGlyb24taW5wdXQgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBzbG90PSJpbnB1dCIgY2xhc3M9ImlucHV0LWVsZW1lbnQiIGlkJD0iW1tfaW5wdXRJZF1dIiBtYXhsZW5ndGgkPSJbW21heGxlbmd0aF1dIiBhbGxvd2VkLXBhdHRlcm49IltbYWxsb3dlZFBhdHRlcm5dXSIgaW52YWxpZD0ie3tpbnZhbGlkfX0iIHZhbGlkYXRvcj0iW1t2YWxpZGF0b3JdXSI+CiAgICAgICAgPGlucHV0IGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIHRpdGxlJD0iW1t0aXRsZV1dIiB0eXBlJD0iW1t0eXBlXV0iIHBhdHRlcm4kPSJbW3BhdHRlcm5dXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iIG1pbiQ9IltbbWluXV0iIG1heCQ9IltbbWF4XV0iIHN0ZXAkPSJbW3N0ZXBdXSIgbmFtZSQ9IltbbmFtZV1dIiBwbGFjZWhvbGRlciQ9IltbcGxhY2Vob2xkZXJdXSIgcmVhZG9ubHkkPSJbW3JlYWRvbmx5XV0iIGxpc3QkPSJbW2xpc3RdXSIgc2l6ZSQ9Iltbc2l6ZV1dIiBhdXRvY2FwaXRhbGl6ZSQ9IltbYXV0b2NhcGl0YWxpemVdXSIgYXV0b2NvcnJlY3QkPSJbW2F1dG9jb3JyZWN0XV0iIG9uLWNoYW5nZT0iX29uQ2hhbmdlIiB0YWJpbmRleCQ9IltbdGFiSW5kZXhdXSIgYXV0b3NhdmUkPSJbW2F1dG9zYXZlXV0iIHJlc3VsdHMkPSJbW3Jlc3VsdHNdXSIgYWNjZXB0JD0iW1thY2NlcHRdXSIgbXVsdGlwbGUkPSJbW211bHRpcGxlXV0iIHJvbGUkPSJbW2lucHV0Um9sZV1dIiBhcmlhLWhhc3BvcHVwJD0iW1tpbnB1dEFyaWFIYXNwb3B1cF1dIj4KICAgICAgPC9pcm9uLWlucHV0PgoKICAgICAgPHNsb3QgbmFtZT0ic3VmZml4IiBzbG90PSJzdWZmaXgiPjwvc2xvdD4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KICBgLGJlaGF2aW9yczpbQzksRWhdLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOlN0cmluZ30saW5wdXRSb2xlOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9LGlucHV0QXJpYUhhc3BvcHVwOnt0eXBlOlN0cmluZyx2YWx1ZTp2b2lkIDB9fSxnZXQgX2ZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pbnB1dEVsZW1lbnQuX2lucHV0RWxlbWVudH0sbGlzdGVuZXJzOnsiaXJvbi1pbnB1dC1yZWFkeSI6Il9vbklyb25JbnB1dFJlYWR5In0sX29uSXJvbklucHV0UmVhZHk6ZnVuY3Rpb24oKXt0aGlzLiQubmF0aXZlSW5wdXR8fCh0aGlzLiQubmF0aXZlSW5wdXQ9dGhpcy4kJCgiaW5wdXQiKSksdGhpcy5pbnB1dEVsZW1lbnQmJnRoaXMuX3R5cGVzVGhhdEhhdmVUZXh0LmluZGV4T2YodGhpcy4kLm5hdGl2ZUlucHV0LnR5cGUpIT09LTEmJih0aGlzLmFsd2F5c0Zsb2F0TGFiZWw9ITApLHRoaXMuaW5wdXRFbGVtZW50LmJpbmRWYWx1ZSYmdGhpcy4kLmNvbnRhaW5lci5faGFuZGxlVmFsdWVBbmRBdXRvVmFsaWRhdGUodGhpcy5pbnB1dEVsZW1lbnQpfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgfQoKICAgICAgI2NvbnRlbnRXcmFwcGVyIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNjb250ZW50V3JhcHBlci5hbmltYXRpbmcgOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRXcmFwcGVyIj4KICAgICAgPHNsb3QgaWQ9ImNvbnRlbnQiIG5hbWU9ImRyb3Bkb3duLWNvbnRlbnQiPjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJpcm9uLWRyb3Bkb3duIixiZWhhdmlvcnM6W0RpLE9vLEt4LHg5XSxwcm9wZXJ0aWVzOntob3Jpem9udGFsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJsZWZ0IixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJ0b3AiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sb3BlbkFuaW1hdGlvbkNvbmZpZzp7dHlwZTpPYmplY3R9LGNsb3NlQW5pbWF0aW9uQ29uZmlnOnt0eXBlOk9iamVjdH0sZm9jdXNUYXJnZXQ6e3R5cGU6T2JqZWN0fSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkIn19LGxpc3RlbmVyczp7Im5lb24tYW5pbWF0aW9uLWZpbmlzaCI6Il9vbk5lb25BbmltYXRpb25GaW5pc2gifSxvYnNlcnZlcnM6WyJfdXBkYXRlT3ZlcmxheVBvc2l0aW9uKHBvc2l0aW9uVGFyZ2V0LCB2ZXJ0aWNhbEFsaWduLCBob3Jpem9udGFsQWxpZ24sIHZlcnRpY2FsT2Zmc2V0LCBob3Jpem9udGFsT2Zmc2V0KSJdLGdldCBjb250YWluZWRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxBY3Rpb258fCh0aGlzLnNjcm9sbEFjdGlvbj10aGlzLmFsbG93T3V0c2lkZVNjcm9sbD8icmVmaXQiOiJsb2NrIiksdGhpcy5fcmVhZGllZD0hMH0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXsoIXRoaXMuc2l6aW5nVGFyZ2V0fHx0aGlzLnNpemluZ1RhcmdldD09PXRoaXMpJiYodGhpcy5zaXppbmdUYXJnZXQ9dGhpcy5jb250YWluZWRFbGVtZW50fHx0aGlzKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbEFuaW1hdGlvbigpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMub3BlbmVkJiZ0aGlzLmRpc2FibGVkP3RoaXMuY2FuY2VsKCk6KHRoaXMuY2FuY2VsQW5pbWF0aW9uKCksdGhpcy5fdXBkYXRlQW5pbWF0aW9uQ29uZmlnKCksUG0uX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sX3JlbmRlck9wZW5lZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcub3Blbj8odGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5hZGQoImFuaW1hdGluZyIpLHRoaXMucGxheUFuaW1hdGlvbigib3BlbiIpKTpQbS5fcmVuZGVyT3BlbmVkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX3JlbmRlckNsb3NlZDpmdW5jdGlvbigpeyF0aGlzLm5vQW5pbWF0aW9ucyYmdGhpcy5hbmltYXRpb25Db25maWcuY2xvc2U/KHRoaXMuJC5jb250ZW50V3JhcHBlci5jbGFzc0xpc3QuYWRkKCJhbmltYXRpbmciKSx0aGlzLnBsYXlBbmltYXRpb24oImNsb3NlIikpOlBtLl9yZW5kZXJDbG9zZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfb25OZW9uQW5pbWF0aW9uRmluaXNoOmZ1bmN0aW9uKCl7dGhpcy4kLmNvbnRlbnRXcmFwcGVyLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGluZyIpLHRoaXMub3BlbmVkP3RoaXMuX2ZpbmlzaFJlbmRlck9wZW5lZCgpOnRoaXMuX2ZpbmlzaFJlbmRlckNsb3NlZCgpfSxfdXBkYXRlQW5pbWF0aW9uQ29uZmlnOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuY29udGFpbmVkRWxlbWVudCx0PVtdLmNvbmNhdCh0aGlzLm9wZW5BbmltYXRpb25Db25maWd8fFtdKS5jb25jYXQodGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ3x8W10pLHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLm5vZGU9ZTt0aGlzLmFuaW1hdGlvbkNvbmZpZz17b3Blbjp0aGlzLm9wZW5BbmltYXRpb25Db25maWcsY2xvc2U6dGhpcy5jbG9zZUFuaW1hdGlvbkNvbmZpZ319LF91cGRhdGVPdmVybGF5UG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzQXR0YWNoZWQmJnRoaXMubm90aWZ5UmVzaXplKCl9LF9hbGxvd091dHNpZGVTY3JvbGxDaGFuZ2VkOmZ1bmN0aW9uKGUpeyF0aGlzLl9yZWFkaWVkfHwoZT8oIXRoaXMuc2Nyb2xsQWN0aW9ufHx0aGlzLnNjcm9sbEFjdGlvbj09PSJsb2NrIikmJih0aGlzLnNjcm9sbEFjdGlvbj0icmVmaXQiKTp0aGlzLnNjcm9sbEFjdGlvbj0ibG9jayIpfSxfYXBwbHlGb2N1czpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZm9jdXNUYXJnZXR8fHRoaXMuY29udGFpbmVkRWxlbWVudDtlJiZ0aGlzLm9wZW5lZCYmIXRoaXMubm9BdXRvRm9jdXM/ZS5mb2N1cygpOlBtLl9hcHBseUZvY3VzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KTt2YXIgeXA9e3Byb3BlcnRpZXM6e2FuaW1hdGlvblRpbWluZzp7dHlwZTpPYmplY3QsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57ZHVyYXRpb246NTAwLGVhc2luZzoiY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSIsZmlsbDoiYm90aCJ9fX19LGlzTmVvbkFuaW1hdGlvbjohMCxjcmVhdGVkOmZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hbmltYXRlfHxjb25zb2xlLndhcm4oIk5vIHdlYiBhbmltYXRpb25zIGRldGVjdGVkLiBUaGlzIGVsZW1lbnQgd2lsbCBub3QgZnVuY3Rpb24gd2l0aG91dCBhIHdlYiBhbmltYXRpb25zIHBvbHlmaWxsLiIpfSx0aW1pbmdGcm9tQ29uZmlnOmZ1bmN0aW9uKGUpe2lmKGUudGltaW5nKWZvcih2YXIgdCBpbiBlLnRpbWluZyl0aGlzLmFuaW1hdGlvblRpbWluZ1t0XT1lLnRpbWluZ1t0XTtyZXR1cm4gdGhpcy5hbmltYXRpb25UaW1pbmd9LHNldFByZWZpeGVkUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj17dHJhbnNmb3JtOlsid2Via2l0VHJhbnNmb3JtIl0sdHJhbnNmb3JtT3JpZ2luOlsibW96VHJhbnNmb3JtT3JpZ2luIiwid2Via2l0VHJhbnNmb3JtT3JpZ2luIl19LGk9blt0XSxvLGE9MDtvPWlbYV07YSsrKWUuc3R5bGVbb109cjtlLnN0eWxlW3RdPXJ9LGNvbXBsZXRlOmZ1bmN0aW9uKGUpe319O1l0KHtpczoiZmFkZS1pbi1hbmltYXRpb24iLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGU7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe29wYWNpdHk6IjAifSx7b3BhY2l0eToiMSJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6ImZhZGUtb3V0LWFuaW1hdGlvbiIsYmVoYXZpb3JzOlt5cF0sY29uZmlndXJlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZTtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7b3BhY2l0eToiMSJ9LHtvcGFjaXR5OiIwIn1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhlKSksdGhpcy5fZWZmZWN0fX0pO1l0KHtpczoicGFwZXItbWVudS1ncm93LWhlaWdodC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5oZWlnaHQ7cmV0dXJuIHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe2hlaWdodDpuLzIrInB4In0se2hlaWdodDpuKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtZ3Jvdy13aWR0aC1hbmltYXRpb24iLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbeXBdLGNvbmZpZ3VyZTpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGUscj10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci53aWR0aDtyZXR1cm4gdGhpcy5fZWZmZWN0PW5ldyBLZXlmcmFtZUVmZmVjdCh0LFt7d2lkdGg6bi8yKyJweCJ9LHt3aWR0aDpuKyJweCJ9XSx0aGlzLnRpbWluZ0Zyb21Db25maWcoZSkpLHRoaXMuX2VmZmVjdH19KTtZdCh7aXM6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOlt5cF0sY29uZmlndXJlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLndpZHRoO3JldHVybiB0aGlzLl9lZmZlY3Q9bmV3IEtleWZyYW1lRWZmZWN0KHQsW3t3aWR0aDpuKyJweCJ9LHt3aWR0aDpuLW4vMjArInB4In1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhlKSksdGhpcy5fZWZmZWN0fX0pO1l0KHtpczoicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsX3RlbXBsYXRlOm51bGwsYmVoYXZpb3JzOlt5cF0sY29uZmlndXJlOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZSxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLmhlaWdodDtyZXR1cm4gdGhpcy5zZXRQcmVmaXhlZFByb3BlcnR5KHQsInRyYW5zZm9ybU9yaWdpbiIsIjAgMCIpLHRoaXMuX2VmZmVjdD1uZXcgS2V5ZnJhbWVFZmZlY3QodCxbe2hlaWdodDpuKyJweCIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0se2hlaWdodDpuLzIrInB4Iix0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTIwcHgpIn1dLHRoaXMudGltaW5nRnJvbUNvbmZpZyhlKSksdGhpcy5fZWZmZWN0fX0pO3ZhciBwRT17QU5JTUFUSU9OX0NVQklDX0JFWklFUjoiY3ViaWMtYmV6aWVyKC4zLC45NSwuNSwxKSIsTUFYX0FOSU1BVElPTl9USU1FX01TOjQwMH0sQmJlPVl0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY3Vyc29yOiBhdXRvOwogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWVudS1idXR0b24tZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIGlyb24tZHJvcGRvd24gewogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWRyb3Bkb3duOwogICAgICB9CgogICAgICAuZHJvcGRvd24tY29udGVudCB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0yZHA7CgogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItbWVudS1idXR0b24tZHJvcGRvd24tYmFja2dyb3VuZCwgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLW1lbnUtYnV0dG9uLWNvbnRlbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFt2ZXJ0aWNhbC1hbGlnbj0idG9wIl0pIC5kcm9wZG93bi1jb250ZW50IHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgICAgIHRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZlcnRpY2FsLWFsaWduPSJib3R0b20iXSkgLmRyb3Bkb3duLWNvbnRlbnQgewogICAgICAgIGJvdHRvbTogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAtMTBweDsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICB9CgogICAgICAjdHJpZ2dlciB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9InRyaWdnZXIiIG9uLXRhcD0idG9nZ2xlIj4KICAgICAgPHNsb3QgbmFtZT0iZHJvcGRvd24tdHJpZ2dlciI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGlyb24tZHJvcGRvd24gaWQ9ImRyb3Bkb3duIiBvcGVuZWQ9Int7b3BlbmVkfX0iIGhvcml6b250YWwtYWxpZ249IltbaG9yaXpvbnRhbEFsaWduXV0iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgaG9yaXpvbnRhbC1vZmZzZXQ9IltbaG9yaXpvbnRhbE9mZnNldF1dIiB2ZXJ0aWNhbC1vZmZzZXQ9IltbdmVydGljYWxPZmZzZXRdXSIgbm8tb3ZlcmxhcD0iW1tub092ZXJsYXBdXSIgb3Blbi1hbmltYXRpb24tY29uZmlnPSJbW29wZW5BbmltYXRpb25Db25maWddXSIgY2xvc2UtYW5pbWF0aW9uLWNvbmZpZz0iW1tjbG9zZUFuaW1hdGlvbkNvbmZpZ11dIiBuby1hbmltYXRpb25zPSJbW25vQW5pbWF0aW9uc11dIiBmb2N1cy10YXJnZXQ9IltbX2Ryb3Bkb3duQ29udGVudF1dIiBhbGxvdy1vdXRzaWRlLXNjcm9sbD0iW1thbGxvd091dHNpZGVTY3JvbGxdXSIgcmVzdG9yZS1mb2N1cy1vbi1jbG9zZT0iW1tyZXN0b3JlRm9jdXNPbkNsb3NlXV0iIG9uLWlyb24tb3ZlcmxheS1jYW5jZWxlZD0iX19vbklyb25PdmVybGF5Q2FuY2VsZWQiIGV4cGFuZC1zaXppbmctdGFyZ2V0LWZvci1zY3JvbGxiYXJzPSJbW2V4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnNdXSI+CiAgICAgIDxkaXYgc2xvdD0iZHJvcGRvd24tY29udGVudCIgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgIDxzbG90IGlkPSJjb250ZW50IiBuYW1lPSJkcm9wZG93bi1jb250ZW50Ij48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgPC9pcm9uLWRyb3Bkb3duPgpgLGlzOiJwYXBlci1tZW51LWJ1dHRvbiIsYmVoYXZpb3JzOltPbyxEaV0scHJvcGVydGllczp7b3BlbmVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwLG9ic2VydmVyOiJfb3BlbmVkQ2hhbmdlZCJ9LGhvcml6b250YWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImxlZnQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sdmVydGljYWxBbGlnbjp7dHlwZTpTdHJpbmcsdmFsdWU6InRvcCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxkeW5hbWljQWxpZ246e3R5cGU6Qm9vbGVhbn0saG9yaXpvbnRhbE9mZnNldDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITB9LHZlcnRpY2FsT2Zmc2V0Ont0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sbm9PdmVybGFwOnt0eXBlOkJvb2xlYW59LG5vQW5pbWF0aW9uczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpZ25vcmVTZWxlY3Q6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sY2xvc2VPbkFjdGl2YXRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG9wZW5BbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLWluLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246MjAwfX0se25hbWU6InBhcGVyLW1lbnUtZ3Jvdy13aWR0aC1hbmltYXRpb24iLHRpbWluZzp7ZGVsYXk6MTAwLGR1cmF0aW9uOjE1MCxlYXNpbmc6cEUuQU5JTUFUSU9OX0NVQklDX0JFWklFUn19LHtuYW1lOiJwYXBlci1tZW51LWdyb3ctaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246Mjc1LGVhc2luZzpwRS5BTklNQVRJT05fQ1VCSUNfQkVaSUVSfX1dfX0sY2xvc2VBbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW3tuYW1lOiJmYWRlLW91dC1hbmltYXRpb24iLHRpbWluZzp7ZHVyYXRpb246MTUwfX0se25hbWU6InBhcGVyLW1lbnUtc2hyaW5rLXdpZHRoLWFuaW1hdGlvbiIsdGltaW5nOntkZWxheToxMDAsZHVyYXRpb246NTAsZWFzaW5nOnBFLkFOSU1BVElPTl9DVUJJQ19CRVpJRVJ9fSx7bmFtZToicGFwZXItbWVudS1zaHJpbmstaGVpZ2h0LWFuaW1hdGlvbiIsdGltaW5nOntkdXJhdGlvbjoyMDAsZWFzaW5nOiJlYXNlLWluIn19XX19LGFsbG93T3V0c2lkZVNjcm9sbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2Ryb3Bkb3duQ29udGVudDp7dHlwZTpPYmplY3R9fSxob3N0QXR0cmlidXRlczp7cm9sZToiZ3JvdXAiLCJhcmlhLWhhc3BvcHVwIjoidHJ1ZSJ9LGxpc3RlbmVyczp7Imlyb24tYWN0aXZhdGUiOiJfb25Jcm9uQWN0aXZhdGUiLCJpcm9uLXNlbGVjdCI6Il9vbklyb25TZWxlY3QifSxnZXQgY29udGVudEVsZW1lbnQoKXtmb3IodmFyIGU9enQodGhpcy4kLmNvbnRlbnQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKSx0PTAscj1lLmxlbmd0aDt0PHI7dCsrKWlmKGVbdF0ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm4gZVt0XX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpcy5vcGVuZWQ/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSxvcGVuOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZHx8dGhpcy4kLmRyb3Bkb3duLm9wZW4oKX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLiQuZHJvcGRvd24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmlnbm9yZVNlbGVjdHx8dGhpcy5jbG9zZSgpfSxfb25Jcm9uQWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5jbG9zZU9uQWN0aXZhdGUmJnRoaXMuY2xvc2UoKX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oZSx0KXtlPyh0aGlzLl9kcm9wZG93bkNvbnRlbnQ9dGhpcy5jb250ZW50RWxlbWVudCx0aGlzLmZpcmUoInBhcGVyLWRyb3Bkb3duLW9wZW4iKSk6dCE9bnVsbCYmdGhpcy5maXJlKCJwYXBlci1kcm9wZG93bi1jbG9zZSIpfSxfZGlzYWJsZWRDaGFuZ2VkOmZ1bmN0aW9uKGUpe0RpLl9kaXNhYmxlZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUmJnRoaXMub3BlbmVkJiZ0aGlzLmNsb3NlKCl9LF9fb25Jcm9uT3ZlcmxheUNhbmNlbGVkOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGV0YWlsLHI9dGhpcy4kLnRyaWdnZXIsbj16dCh0KS5wYXRoO24uaW5kZXhPZihyKT4tMSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0pO09iamVjdC5rZXlzKHBFKS5mb3JFYWNoKGZ1bmN0aW9uKGUpe0JiZVtlXT1wRVtlXX0pO3ZhciB4Vz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3hXLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO3hXLmlubmVySFRNTD1gPGlyb24taWNvbnNldC1zdmcgbmFtZT0icGFwZXItZHJvcGRvd24tbWVudSIgc2l6ZT0iMjQiPgo8c3ZnPjxkZWZzPgo8ZyBpZD0iYXJyb3ctZHJvcC1kb3duIj48cGF0aCBkPSJNNyAxMGw1IDUgNS01eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHhXLmNvbnRlbnQpO3ZhciBiVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO2JXLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO2JXLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwoKICAgICAgICAvKiBOT1RFKGNkYXRhKTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUKICAgICAgICAgKiB2YWx1ZSB0byBiZSBcYHRyYW5zcGFyZW50XGAuCiAgICAgICAgICovCiAgICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDAsMCwwLDApOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7CgogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51OwogICAgICB9CgogICAgICAvKiBwYXBlci1kcm9wZG93bi1tZW51IGFuZCBwYXBlci1kcm9wZG93bi1tZW51LWxpZ2h0IGJvdGggZGVsZWdhdGUgZm9jdXMKICAgICAgICogdG8gb3RoZXIgaW50ZXJuYWwgZWxlbWVudHMgd2hpY2ggbWFuYWdlIGZvY3VzIHN0eWxpbmcuICovCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpkaXIocnRsKSkgewogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwoKICAgICAgICBAYXBwbHkoLS1wYXBlci1kcm9wZG93bi1tZW51KTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtZGlzYWJsZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtub2lua10pIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW25vLWxhYmVsLWZsb2F0XSkgcGFwZXItcmlwcGxlIHsKICAgICAgICB0b3A6IDhweDsKICAgICAgfQoKICAgICAgcGFwZXItcmlwcGxlIHsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGJvdHRvbTogOHB4OwogICAgICAgIHJpZ2h0OiAwcHg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWRyb3Bkb3duLW1lbnUtcmlwcGxlOwogICAgICB9CgogICAgICBwYXBlci1tZW51LWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogMDsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1idXR0b247CiAgICAgIH0KCiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1kcm9wZG93bi1tZW51LWlucHV0OwogICAgICB9CgogICAgICBpcm9uLWljb24gewogICAgICAgIGNvbG9yOiB2YXIoLS1kaXNhYmxlZC10ZXh0LWNvbG9yKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItZHJvcGRvd24tbWVudS1pY29uOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYlcuY29udGVudCk7dmFyIEhiZT1HdChIVE1MRWxlbWVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWRyb3Bkb3duLW1lbnUtc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KCiAgICA8cGFwZXItbWVudS1idXR0b24gaWQ9Im1lbnVCdXR0b24iIHZlcnRpY2FsLWFsaWduPSJbW3ZlcnRpY2FsQWxpZ25dXSIgaG9yaXpvbnRhbC1hbGlnbj0iW1tob3Jpem9udGFsQWxpZ25dXSIgZHluYW1pYy1hbGlnbj0iW1tkeW5hbWljQWxpZ25dXSIgdmVydGljYWwtb2Zmc2V0PSJbW19jb21wdXRlTWVudVZlcnRpY2FsT2Zmc2V0KG5vTGFiZWxGbG9hdCwgdmVydGljYWxPZmZzZXQpXV0iIGRpc2FibGVkPSJbW2Rpc2FibGVkXV0iIG5vLWFuaW1hdGlvbnM9Iltbbm9BbmltYXRpb25zXV0iIG9uLWlyb24tc2VsZWN0PSJfb25Jcm9uU2VsZWN0IiBvbi1pcm9uLWRlc2VsZWN0PSJfb25Jcm9uRGVzZWxlY3QiIG9wZW5lZD0ie3tvcGVuZWR9fSIgY2xvc2Utb24tYWN0aXZhdGUgYWxsb3ctb3V0c2lkZS1zY3JvbGw9IltbYWxsb3dPdXRzaWRlU2Nyb2xsXV0iIHJlc3RvcmUtZm9jdXMtb24tY2xvc2U9IltbcmVzdG9yZUZvY3VzT25DbG9zZV1dIiBleHBhbmQtc2l6aW5nLXRhcmdldC1mb3Itc2Nyb2xsYmFycz0iW1tleHBhbmRTaXppbmdUYXJnZXRGb3JTY3JvbGxiYXJzXV0iPgogICAgICA8IS0tIHN1cHBvcnQgaHlicmlkIG1vZGU6IHVzZXIgbWlnaHQgYmUgdXNpbmcgcGFwZXItbWVudS1idXR0b24gMS54IHdoaWNoIGRpc3RyaWJ1dGVzIHZpYSA8Y29udGVudD4gLS0+CiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duLXRyaWdnZXIiIHNsb3Q9ImRyb3Bkb3duLXRyaWdnZXIiPgogICAgICAgIDxwYXBlci1yaXBwbGU+PC9wYXBlci1yaXBwbGU+CiAgICAgICAgPCEtLSBwYXBlci1pbnB1dCBoYXMgdHlwZT0idGV4dCIgZm9yIGExMXksIGRvIG5vdCByZW1vdmUgLS0+CiAgICAgICAgPHBhcGVyLWlucHV0IGlkPSJpbnB1dCIgdHlwZT0idGV4dCIgaW52YWxpZD0iW1tpbnZhbGlkXV0iIHJlYWRvbmx5IGRpc2FibGVkPSJbW2Rpc2FibGVkXV0iIHZhbHVlPSJbW3ZhbHVlXV0iIHBsYWNlaG9sZGVyPSJbW3BsYWNlaG9sZGVyXV0iIGVycm9yLW1lc3NhZ2U9IltbZXJyb3JNZXNzYWdlXV0iIGFsd2F5cy1mbG9hdC1sYWJlbD0iW1thbHdheXNGbG9hdExhYmVsXV0iIG5vLWxhYmVsLWZsb2F0PSJbW25vTGFiZWxGbG9hdF1dIiBsYWJlbD0iW1tsYWJlbF1dIiBpbnB1dC1yb2xlPSJidXR0b24iIGlucHV0LWFyaWEtaGFzcG9wdXA9Imxpc3Rib3giIGF1dG9jb21wbGV0ZT0ib2ZmIj4KICAgICAgICAgIDwhLS0gc3VwcG9ydCBoeWJyaWQgbW9kZTogdXNlciBtaWdodCBiZSB1c2luZyBwYXBlci1pbnB1dCAxLnggd2hpY2ggZGlzdHJpYnV0ZXMgdmlhIDxjb250ZW50PiAtLT4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0icGFwZXItZHJvcGRvd24tbWVudTphcnJvdy1kcm9wLWRvd24iIHN1ZmZpeCBzbG90PSJzdWZmaXgiPjwvaXJvbi1pY29uPgogICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgIDwvZGl2PgogICAgICA8c2xvdCBpZD0iY29udGVudCIgbmFtZT0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+PC9zbG90PgogICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KYCxpczoicGFwZXItZHJvcGRvd24tbWVudSIsYmVoYXZpb3JzOltTaCxEaSxFaCxUaF0scHJvcGVydGllczp7c2VsZWN0ZWRJdGVtTGFiZWw6e3R5cGU6U3RyaW5nLG5vdGlmeTohMCxyZWFkT25seTohMH0sc2VsZWN0ZWRJdGVtOnt0eXBlOk9iamVjdCxub3RpZnk6ITAscmVhZE9ubHk6ITB9LHZhbHVlOnt0eXBlOlN0cmluZyxub3RpZnk6ITB9LGxhYmVsOnt0eXBlOlN0cmluZ30scGxhY2Vob2xkZXI6e3R5cGU6U3RyaW5nfSxlcnJvck1lc3NhZ2U6e3R5cGU6U3RyaW5nfSxvcGVuZWQ6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsdmFsdWU6ITEsb2JzZXJ2ZXI6Il9vcGVuZWRDaGFuZ2VkIn0sYWxsb3dPdXRzaWRlU2Nyb2xsOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LG5vTGFiZWxGbG9hdDp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sYWx3YXlzRmxvYXRMYWJlbDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub0FuaW1hdGlvbnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToicmlnaHQifSx2ZXJ0aWNhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToidG9wIn0sdmVydGljYWxPZmZzZXQ6TnVtYmVyLGR5bmFtaWNBbGlnbjp7dHlwZTpCb29sZWFufSxyZXN0b3JlRm9jdXNPbkNsb3NlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITB9LGV4cGFuZFNpemluZ1RhcmdldEZvclNjcm9sbGJhcnM6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGxpc3RlbmVyczp7dGFwOiJfb25UYXAifSxrZXlCaW5kaW5nczp7InVwIGRvd24iOiJvcGVuIixlc2M6ImNsb3NlIn0sb2JzZXJ2ZXJzOlsiX3NlbGVjdGVkSXRlbUNoYW5nZWQoc2VsZWN0ZWRJdGVtKSJdLF9hdHRhY2hEb20oZSl7bGV0IHQ9dWUodGhpcyk7cmV0dXJuIHQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIixkZWxlZ2F0ZXNGb2N1czohMCxzaGFkeVVwZ3JhZGVGcmFnbWVudDplfSksdC5zaGFkb3dSb290LmFwcGVuZENoaWxkKGUpLEhiZS5wcm90b3R5cGUuX2F0dGFjaERvbS5jYWxsKHRoaXMsZSl9LGZvY3VzKCl7dGhpcy4kLmlucHV0Ll9mb2N1c2FibGVFbGVtZW50LmZvY3VzKCl9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZW50RWxlbWVudDtlJiZlLnNlbGVjdGVkSXRlbSYmdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUuc2VsZWN0ZWRJdGVtKX0sZ2V0IGNvbnRlbnRFbGVtZW50KCl7Zm9yKHZhciBlPXp0KHRoaXMuJC5jb250ZW50KS5nZXREaXN0cmlidXRlZE5vZGVzKCksdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZihlW3RdLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpcmV0dXJuIGVbdF19LG9wZW46ZnVuY3Rpb24oKXt0aGlzLiQubWVudUJ1dHRvbi5vcGVuKCl9LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy4kLm1lbnVCdXR0b24uY2xvc2UoKX0sX29uSXJvblNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0oZS5kZXRhaWwuaXRlbSl9LF9vbklyb25EZXNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLl9zZXRTZWxlY3RlZEl0ZW0obnVsbCl9LF9vblRhcDpmdW5jdGlvbihlKXtpZ3QoZSk9PT10aGlzJiZ0aGlzLm9wZW4oKX0sX3NlbGVjdGVkSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9IiI7ZT90PWUubGFiZWx8fGUuZ2V0QXR0cmlidXRlKCJsYWJlbCIpfHxlLnRleHRDb250ZW50LnRyaW0oKTp0PSIiLHRoaXMudmFsdWU9dCx0aGlzLl9zZXRTZWxlY3RlZEl0ZW1MYWJlbCh0KX0sX2NvbXB1dGVNZW51VmVydGljYWxPZmZzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8KGU/LTQ6OCl9LF9nZXRWYWxpZGl0eTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kaXNhYmxlZHx8IXRoaXMucmVxdWlyZWR8fHRoaXMucmVxdWlyZWQmJiEhdGhpcy52YWx1ZX0sX29wZW5lZENoYW5nZWQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wZW5lZD8idHJ1ZSI6ImZhbHNlIix0PXRoaXMuY29udGVudEVsZW1lbnQ7dCYmdC5zZXRBdHRyaWJ1dGUoImFyaWEtZXhwYW5kZWQiLGUpfX0pO3ZhciB3Vz0xLE0wdD0yLEE5PXtvdXRlclNjcm9sbDp7c2Nyb2xsOiEwfSxzaGFkb3dNb2RlOntzdGFuZGFyZDpNMHQsd2F0ZXJmYWxsOndXLCJ3YXRlcmZhbGwtdGFsbCI6d1d9LHRhbGxNb2RlOnsid2F0ZXJmYWxsLXRhbGwiOiEwfX07WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsOwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgICAgfQoKICAgICAgI21haW5QYW5lbCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1mbGV4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1ib2R5OwogICAgICB9CgogICAgICAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc2Nyb2xsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1zY3JvbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXNjcm9sbC1jb250YWluZXI7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPXNjcm9sbF0pIHsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IGNvdmVyCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT1jb3Zlcl0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtY292ZXItY29udGFpbmVyOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFttb2RlPWNvdmVyXSkgI21haW5QYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHN0YXRpYzsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbW9kZTogc3RhbmRhcmQKICAgICAgICovCiAgICAgIDpob3N0KFttb2RlPXN0YW5kYXJkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zdGFuZGFyZC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHNlYW1lZAogICAgICAgKi8KICAgICAgOmhvc3QoW21vZGU9c2VhbWVkXSkgI21haW5Db250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zZWFtZWQtY29udGFpbmVyOwogICAgICB9CgoKICAgICAgLyoKICAgICAgICogbW9kZTogd2F0ZXJmYWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGxdKSAjbWFpbkNvbnRhaW5lciB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaGVhZGVyLXBhbmVsLXdhdGVyZmFsbC1jb250YWluZXI7CiAgICAgIH0KCiAgICAgIC8qCiAgICAgICAqIG1vZGU6IHdhdGVyZmFsbC10YWxsCiAgICAgICAqLwogICAgICA6aG9zdChbbW9kZT13YXRlcmZhbGwtdGFsbF0pICNtYWluQ29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1wYXBlci1oZWFkZXItcGFuZWwtd2F0ZXJmYWxsLXRhbGwtY29udGFpbmVyOwogICAgICB9CgogICAgICAjZHJvcFNoYWRvdyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggNnB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWhlYWRlci1wYW5lbC1zaGFkb3c7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgICNkcm9wU2hhZG93Lmhhcy1zaGFkb3cgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgICNtYWluQ29udGFpbmVyID4gOjpzbG90dGVkKC5maXQpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZml0OwogICAgICB9CgogICAgPC9zdHlsZT4KCiAgICA8c2xvdCBpZD0iaGVhZGVyU2xvdCIgbmFtZT0iaGVhZGVyIj48L3Nsb3Q+CgogICAgPGRpdiBpZD0ibWFpblBhbmVsIj4KICAgICAgPGRpdiBpZD0ibWFpbkNvbnRhaW5lciIgY2xhc3NcJD0iW1tfY29tcHV0ZU1haW5Db250YWluZXJDbGFzcyhtb2RlKV1dIj4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGlkPSJkcm9wU2hhZG93Ij48L2Rpdj4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci1oZWFkZXItcGFuZWwiLHByb3BlcnRpZXM6e21vZGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJzdGFuZGFyZCIsb2JzZXJ2ZXI6Il9tb2RlQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxzaGFkb3c6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sdGFsbENsYXNzOnt0eXBlOlN0cmluZyx2YWx1ZToidGFsbCJ9LGF0VG9wOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITAsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LG9ic2VydmVyczpbIl9jb21wdXRlRHJvcFNoYWRvd0hpZGRlbihhdFRvcCwgbW9kZSwgc2hhZG93KSJdLGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fYWRkTGlzdGVuZXIoKSx0aGlzLl9rZWVwU2Nyb2xsaW5nU3RhdGUoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVMaXN0ZW5lcigpfSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuc2Nyb2xsSGFuZGxlcj10aGlzLl9zY3JvbGwuYmluZCh0aGlzKSxjb25zb2xlLndhcm4odGhpcy5pcywiaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhcHAtbGF5b3V0IGluc3RlYWQhIil9LGdldCBoZWFkZXIoKXtyZXR1cm4genQodGhpcy4kLmhlYWRlclNsb3QpLmdldERpc3RyaWJ1dGVkTm9kZXMoKVswXX0sZ2V0IHNjcm9sbGVyKCl7cmV0dXJuIHRoaXMuX2dldFNjcm9sbGVyRm9yTW9kZSh0aGlzLm1vZGUpfSxnZXQgdmlzaWJsZVNoYWRvdygpe3JldHVybiB0aGlzLiQuZHJvcFNoYWRvdy5jbGFzc0xpc3QuY29udGFpbnMoImhhcy1zaGFkb3ciKX0sX2NvbXB1dGVEcm9wU2hhZG93SGlkZGVuOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1BOS5zaGFkb3dNb2RlW3RdO3RoaXMuc2hhZG93P3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KTpuPT09TTB0P3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KTpuPT09d1cmJiFlP3RoaXMudG9nZ2xlQ2xhc3MoImhhcy1zaGFkb3ciLCEwLHRoaXMuJC5kcm9wU2hhZG93KTp0aGlzLnRvZ2dsZUNsYXNzKCJoYXMtc2hhZG93IiwhMSx0aGlzLiQuZHJvcFNoYWRvdyl9LF9jb21wdXRlTWFpbkNvbnRhaW5lckNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiB0LmZsZXg9ZSE9PSJjb3ZlciIsT2JqZWN0LmtleXModCkuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdfSkuam9pbigiICIpfSxfYWRkTGlzdGVuZXI6ZnVuY3Rpb24oKXt0aGlzLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5zY3JvbGxIYW5kbGVyKX0sX3JlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKCl7dGhpcy5zY3JvbGxlci5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuc2Nyb2xsSGFuZGxlcil9LF9tb2RlQ2hhbmdlZDpmdW5jdGlvbihlLHQpe3ZhciByPUE5LG49dGhpcy5oZWFkZXIsaT0yMDA7biYmKHIudGFsbE1vZGVbdF0mJiFyLnRhbGxNb2RlW2VdPyhuLmNsYXNzTGlzdC5yZW1vdmUodGhpcy50YWxsQ2xhc3MpLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXtuLmNsYXNzTGlzdC5yZW1vdmUoImFuaW1hdGUiKX0saSkpOnRoaXMudG9nZ2xlQ2xhc3MoImFuaW1hdGUiLHIudGFsbE1vZGVbZV0sbikpLHRoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpfSxfa2VlcFNjcm9sbGluZ1N0YXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zY3JvbGxlcix0PXRoaXMuaGVhZGVyO3RoaXMuX3NldEF0VG9wKGUuc2Nyb2xsVG9wPT09MCksdCYmdGhpcy50YWxsQ2xhc3MmJkE5LnRhbGxNb2RlW3RoaXMubW9kZV0mJnRoaXMudG9nZ2xlQ2xhc3ModGhpcy50YWxsQ2xhc3MsdGhpcy5hdFRvcHx8dC5jbGFzc0xpc3QuY29udGFpbnModGhpcy50YWxsQ2xhc3MpJiZlLnNjcm9sbEhlaWdodDx0aGlzLm9mZnNldEhlaWdodCx0KX0sX3Njcm9sbDpmdW5jdGlvbigpe3RoaXMuX2tlZXBTY3JvbGxpbmdTdGF0ZSgpLHRoaXMuZmlyZSgiY29udGVudC1zY3JvbGwiLHt0YXJnZXQ6dGhpcy5zY3JvbGxlcn0se2J1YmJsZXM6ITF9KX0sX2dldFNjcm9sbGVyRm9yTW9kZTpmdW5jdGlvbihlKXtyZXR1cm4gQTkub3V0ZXJTY3JvbGxbZV0/dGhpczp0aGlzLiQubWFpbkNvbnRhaW5lcn19KTtZdCh7aXM6InBhcGVyLWljb24tYnV0dG9uIixfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgei1pbmRleDogMDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKCiAgICAgICAgd2lkdGg6IDQwcHg7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwoKICAgICAgICAvKgogICAgICAgICAgTk9URTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUgdmFsdWUgdG8KICAgICAgICAgIGJlIFxgdHJhbnNwYXJlbnRcYC4KICAgICAgICAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICAvKiBCZWNhdXNlIG9mIHBvbHltZXIvMjU1OCwgdGhpcyBzdHlsZSBoYXMgbG93ZXIgc3BlY2lmaWNpdHkgdGhhbiAqICovCiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pY29uLWJ1dHRvbjsKICAgICAgfQoKICAgICAgOmhvc3QgI2luayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWljb24tYnV0dG9uLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWljb24tYnV0dG9uLWRpc2FibGVkLXRleHQsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBjdXJzb3I6IGF1dG87CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24tYnV0dG9uLWRpc2FibGVkOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaWNvbi1idXR0b24taG92ZXI7CiAgICAgIH0KCiAgICAgIGlyb24taWNvbiB7CiAgICAgICAgLS1pcm9uLWljb24td2lkdGg6IDEwMCU7CiAgICAgICAgLS1pcm9uLWljb24taGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxpcm9uLWljb24gaWQ9Imljb24iIHNyYz0iW1tzcmNdXSIgaWNvbj0iW1tpY29uXV0iCiAgICAgICAgICAgICAgIGFsdCQ9IltbYWx0XV0iPjwvaXJvbi1pY29uPgogIGAsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6ImJ1dHRvbiIsdGFiaW5kZXg6IjAifSxiZWhhdmlvcnM6W2p4XSxyZWdpc3RlcmVkOmZ1bmN0aW9uKCl7dGhpcy5fdGVtcGxhdGUuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIil9LHByb3BlcnRpZXM6e3NyYzp7dHlwZTpTdHJpbmd9LGljb246e3R5cGU6U3RyaW5nfSxhbHQ6e3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfYWx0Q2hhbmdlZCJ9fSxfYWx0Q2hhbmdlZDpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIik7KCFyfHx0PT1yKSYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGUpfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkOwogICAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgICAtbW96LWFwcGVhcmFuY2U6IHRleHRhcmVhOwogICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGFyZWE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm1pcnJvci10ZXh0IHsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIC5maXQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgcmVzaXplOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgLyogc2VlIGNvbW1lbnRzIGluIHRlbXBsYXRlICovCiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsKICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0OwogICAgICAgIEBhcHBseSAtLWlyb24tYXV0b2dyb3ctdGV4dGFyZWE7CiAgICAgIH0KCiAgICAgIHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CgogICAgICB0ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7CiAgICAgICAgQGFwcGx5IC0taXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYS1wbGFjZWhvbGRlcjsKICAgICAgfQoKICAgICAgdGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHsKICAgICAgICBAYXBwbHkgLS1pcm9uLWF1dG9ncm93LXRleHRhcmVhLXBsYWNlaG9sZGVyOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDwhLS0gdGhlIG1pcnJvciBzaXplcyB0aGUgaW5wdXQvdGV4dGFyZWEgc28gaXQgZ3Jvd3Mgd2l0aCB0eXBpbmcgLS0+CiAgICA8IS0tIHVzZSAmIzE2MDsgaW5zdGVhZCAmbmJzcDsgb2YgdG8gYWxsb3cgdGhpcyBlbGVtZW50IHRvIGJlIHVzZWQgaW4gWEhUTUwgLS0+CiAgICA8ZGl2IGlkPSJtaXJyb3IiIGNsYXNzPSJtaXJyb3ItdGV4dCIgYXJpYS1oaWRkZW49InRydWUiPiZuYnNwOzwvZGl2PgoKICAgIDwhLS0gc2l6ZSB0aGUgaW5wdXQvdGV4dGFyZWEgd2l0aCBhIGRpdiwgYmVjYXVzZSB0aGUgdGV4dGFyZWEgaGFzIGludHJpbnNpYyBzaXplIGluIGZmIC0tPgogICAgPGRpdiBjbGFzcz0idGV4dGFyZWEtY29udGFpbmVyIGZpdCI+CiAgICAgIDx0ZXh0YXJlYSBpZD0idGV4dGFyZWEiIG5hbWUkPSJbW25hbWVdXSIgYXJpYS1sYWJlbCQ9IltbbGFiZWxdXSIgYXV0b2NvbXBsZXRlJD0iW1thdXRvY29tcGxldGVdXSIgYXV0b2ZvY3VzJD0iW1thdXRvZm9jdXNdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIHBsYWNlaG9sZGVyJD0iW1twbGFjZWhvbGRlcl1dIiByZWFkb25seSQ9IltbcmVhZG9ubHldXSIgcmVxdWlyZWQkPSJbW3JlcXVpcmVkXV0iIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIiByb3dzJD0iW1tyb3dzXV0iIG1pbmxlbmd0aCQ9IltbbWlubGVuZ3RoXV0iIG1heGxlbmd0aCQ9IltbbWF4bGVuZ3RoXV0iPjwvdGV4dGFyZWE+CiAgICA8L2Rpdj4KYCxpczoiaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYSIsYmVoYXZpb3JzOltUaCxEaV0scHJvcGVydGllczp7dmFsdWU6e29ic2VydmVyOiJfdmFsdWVDaGFuZ2VkIix0eXBlOlN0cmluZyxub3RpZnk6ITB9LGJpbmRWYWx1ZTp7b2JzZXJ2ZXI6Il9iaW5kVmFsdWVDaGFuZ2VkIix0eXBlOlN0cmluZyxub3RpZnk6ITB9LHJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjEsb2JzZXJ2ZXI6Il91cGRhdGVDYWNoZWQifSxtYXhSb3dzOnt0eXBlOk51bWJlcix2YWx1ZTowLG9ic2VydmVyOiJfdXBkYXRlQ2FjaGVkIn0sYXV0b2NvbXBsZXRlOnt0eXBlOlN0cmluZyx2YWx1ZToib2ZmIn0sYXV0b2ZvY3VzOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9jYXBpdGFsaXplOnt0eXBlOlN0cmluZyx2YWx1ZToibm9uZSJ9LGlucHV0bW9kZTp7dHlwZTpTdHJpbmd9LHBsYWNlaG9sZGVyOnt0eXBlOlN0cmluZ30scmVhZG9ubHk6e3R5cGU6U3RyaW5nfSxyZXF1aXJlZDp7dHlwZTpCb29sZWFufSxtaW5sZW5ndGg6e3R5cGU6TnVtYmVyfSxtYXhsZW5ndGg6e3R5cGU6TnVtYmVyfSxsYWJlbDp7dHlwZTpTdHJpbmd9fSxsaXN0ZW5lcnM6e2lucHV0OiJfb25JbnB1dCJ9LGdldCB0ZXh0YXJlYSgpe3JldHVybiB0aGlzLiQudGV4dGFyZWF9LGdldCBzZWxlY3Rpb25TdGFydCgpe3JldHVybiB0aGlzLiQudGV4dGFyZWEuc2VsZWN0aW9uU3RhcnR9LGdldCBzZWxlY3Rpb25FbmQoKXtyZXR1cm4gdGhpcy4kLnRleHRhcmVhLnNlbGVjdGlvbkVuZH0sc2V0IHNlbGVjdGlvblN0YXJ0KGUpe3RoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25TdGFydD1lfSxzZXQgc2VsZWN0aW9uRW5kKGUpe3RoaXMuJC50ZXh0YXJlYS5zZWxlY3Rpb25FbmQ9ZX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt2YXIgZT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OltvYV1kfGhvbmUpLykmJiFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PUyAxWzM0NTY3ODldLyk7ZSYmKHRoaXMuJC50ZXh0YXJlYS5zdHlsZS5tYXJnaW5MZWZ0PSItM3B4Iil9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kLnRleHRhcmVhLnZhbGlkaXR5LnZhbGlkO3JldHVybiBlJiYodGhpcy5yZXF1aXJlZCYmdGhpcy52YWx1ZT09PSIiP2U9ITE6dGhpcy5oYXNWYWxpZGF0b3IoKSYmKGU9VGgudmFsaWRhdGUuY2FsbCh0aGlzLHRoaXMudmFsdWUpKSksdGhpcy5pbnZhbGlkPSFlLHRoaXMuZmlyZSgiaXJvbi1pbnB1dC12YWxpZGF0ZSIpLGV9LF9iaW5kVmFsdWVDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMudmFsdWU9ZX0sX3ZhbHVlQ2hhbmdlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnRleHRhcmVhOyF0fHwodC52YWx1ZSE9PWUmJih0LnZhbHVlPWV8fGU9PT0wP2U6IiIpLHRoaXMuYmluZFZhbHVlPWUsdGhpcy4kLm1pcnJvci5pbm5lckhUTUw9dGhpcy5fdmFsdWVGb3JNaXJyb3IoKSx0aGlzLmZpcmUoImJpbmQtdmFsdWUtY2hhbmdlZCIse3ZhbHVlOnRoaXMuYmluZFZhbHVlfSkpfSxfb25JbnB1dDpmdW5jdGlvbihlKXt2YXIgdD16dChlKS5wYXRoO3RoaXMudmFsdWU9dD90WzBdLnZhbHVlOmUudGFyZ2V0LnZhbHVlfSxfY29uc3RyYWluOmZ1bmN0aW9uKGUpe3ZhciB0O2ZvcihlPWV8fFsiIl0sdGhpcy5tYXhSb3dzPjAmJmUubGVuZ3RoPnRoaXMubWF4Um93cz90PWUuc2xpY2UoMCx0aGlzLm1heFJvd3MpOnQ9ZS5zbGljZSgwKTt0aGlzLnJvd3M+MCYmdC5sZW5ndGg8dGhpcy5yb3dzOyl0LnB1c2goIiIpO3JldHVybiB0LmpvaW4oIjxici8+IikrIiYjMTYwOyJ9LF92YWx1ZUZvck1pcnJvcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGV4dGFyZWE7aWYoISFlKXJldHVybiB0aGlzLnRva2Vucz1lJiZlLnZhbHVlP2UudmFsdWUucmVwbGFjZSgvJi9nbSwiJmFtcDsiKS5yZXBsYWNlKC8iL2dtLCImcXVvdDsiKS5yZXBsYWNlKC8nL2dtLCImIzM5OyIpLnJlcGxhY2UoLzwvZ20sIiZsdDsiKS5yZXBsYWNlKC8+L2dtLCImZ3Q7Iikuc3BsaXQoYApgKTpbIiJdLHRoaXMuX2NvbnN0cmFpbih0aGlzLnRva2Vucyl9LF91cGRhdGVDYWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLiQubWlycm9yLmlubmVySFRNTD10aGlzLl9jb25zdHJhaW4odGhpcy50b2tlbnMpfX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgbGFiZWwgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pbnB1dC1jb250YWluZXIgbm8tbGFiZWwtZmxvYXQkPSJbW25vTGFiZWxGbG9hdF1dIiBhbHdheXMtZmxvYXQtbGFiZWw9IltbX2NvbXB1dGVBbHdheXNGbG9hdExhYmVsKGFsd2F5c0Zsb2F0TGFiZWwscGxhY2Vob2xkZXIpXV0iIGF1dG8tdmFsaWRhdGUkPSJbW2F1dG9WYWxpZGF0ZV1dIiBkaXNhYmxlZCQ9IltbZGlzYWJsZWRdXSIgaW52YWxpZD0iW1tpbnZhbGlkXV0iPgoKICAgICAgPGxhYmVsIGhpZGRlbiQ9IltbIWxhYmVsXV0iIGFyaWEtaGlkZGVuPSJ0cnVlIiBmb3IkPSJbW19pbnB1dElkXV0iIHNsb3Q9ImxhYmVsIj5bW2xhYmVsXV08L2xhYmVsPgoKICAgICAgPGlyb24tYXV0b2dyb3ctdGV4dGFyZWEgY2xhc3M9InBhcGVyLWlucHV0LWlucHV0IiBzbG90PSJpbnB1dCIgaWQkPSJbW19pbnB1dElkXV0iIGFyaWEtbGFiZWxsZWRieSQ9IltbX2FyaWFMYWJlbGxlZEJ5XV0iIGFyaWEtZGVzY3JpYmVkYnkkPSJbW19hcmlhRGVzY3JpYmVkQnldXSIgYmluZC12YWx1ZT0ie3t2YWx1ZX19IiBpbnZhbGlkPSJ7e2ludmFsaWR9fSIgdmFsaWRhdG9yJD0iW1t2YWxpZGF0b3JdXSIgZGlzYWJsZWQkPSJbW2Rpc2FibGVkXV0iIGF1dG9jb21wbGV0ZSQ9IltbYXV0b2NvbXBsZXRlXV0iIGF1dG9mb2N1cyQ9IltbYXV0b2ZvY3VzXV0iIGlucHV0bW9kZSQ9IltbaW5wdXRtb2RlXV0iIG5hbWUkPSJbW25hbWVdXSIgcGxhY2Vob2xkZXIkPSJbW3BsYWNlaG9sZGVyXV0iIHJlYWRvbmx5JD0iW1tyZWFkb25seV1dIiByZXF1aXJlZCQ9IltbcmVxdWlyZWRdXSIgbWlubGVuZ3RoJD0iW1ttaW5sZW5ndGhdXSIgbWF4bGVuZ3RoJD0iW1ttYXhsZW5ndGhdXSIgYXV0b2NhcGl0YWxpemUkPSJbW2F1dG9jYXBpdGFsaXplXV0iIHJvd3MkPSJbW3Jvd3NdXSIgbWF4LXJvd3MkPSJbW21heFJvd3NdXSIgb24tY2hhbmdlPSJfb25DaGFuZ2UiPjwvaXJvbi1hdXRvZ3Jvdy10ZXh0YXJlYT4KCiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tlcnJvck1lc3NhZ2VdXSI+CiAgICAgICAgPHBhcGVyLWlucHV0LWVycm9yIGFyaWEtbGl2ZT0iYXNzZXJ0aXZlIiBzbG90PSJhZGQtb24iPltbZXJyb3JNZXNzYWdlXV08L3BhcGVyLWlucHV0LWVycm9yPgogICAgICA8L3RlbXBsYXRlPgoKICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJDb3VudGVyXV0iPgogICAgICAgIDxwYXBlci1pbnB1dC1jaGFyLWNvdW50ZXIgc2xvdD0iYWRkLW9uIj48L3BhcGVyLWlucHV0LWNoYXItY291bnRlcj4KICAgICAgPC90ZW1wbGF0ZT4KCiAgICA8L3BhcGVyLWlucHV0LWNvbnRhaW5lcj4KYCxpczoicGFwZXItdGV4dGFyZWEiLGJlaGF2aW9yczpbQzksRWhdLHByb3BlcnRpZXM6e19hcmlhTGFiZWxsZWRCeTp7b2JzZXJ2ZXI6Il9hcmlhTGFiZWxsZWRCeUNoYW5nZWQiLHR5cGU6U3RyaW5nfSxfYXJpYURlc2NyaWJlZEJ5OntvYnNlcnZlcjoiX2FyaWFEZXNjcmliZWRCeUNoYW5nZWQiLHR5cGU6U3RyaW5nfSx2YWx1ZTp7dHlwZTpTdHJpbmd9LHJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LG1heFJvd3M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9fSxnZXQgc2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gdGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0fSxzZXQgc2VsZWN0aW9uU3RhcnQoZSl7dGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvblN0YXJ0PWV9LGdldCBzZWxlY3Rpb25FbmQoKXtyZXR1cm4gdGhpcy4kLmlucHV0LnRleHRhcmVhLnNlbGVjdGlvbkVuZH0sc2V0IHNlbGVjdGlvbkVuZChlKXt0aGlzLiQuaW5wdXQudGV4dGFyZWEuc2VsZWN0aW9uRW5kPWV9LF9hcmlhTGFiZWxsZWRCeUNoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNhYmxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSl9LF9hcmlhRGVzY3JpYmVkQnlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzYWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlKX0sZ2V0IF9mb2N1c2FibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaW5wdXRFbGVtZW50LnRleHRhcmVhfX0pO3ZhciBTVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1NXLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5OiBub25lOyIpO1NXLmlubmVySFRNTD1gPGRvbS1tb2R1bGUgaWQ9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCwgLnBhcGVyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQsIDQ4cHgpOwogICAgICAgIHBhZGRpbmc6IDBweCAxNnB4OwogICAgICB9CgogICAgICAucGFwZXItaXRlbSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwogICAgICAgIGJvcmRlcjpub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCAucGFwZXItaXRlbVtoaWRkZW5dIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIDpob3N0KC5pcm9uLXNlbGVjdGVkKSwgLnBhcGVyLWl0ZW0uaXJvbi1zZWxlY3RlZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tc2VsZWN0ZWQtd2VpZ2h0LCBib2xkKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1zZWxlY3RlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSksIC5wYXBlci1pdGVtW2Rpc2FibGVkXSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tZGlzYWJsZWQtY29sb3IsIHZhcigtLWRpc2FibGVkLXRleHQtY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1kaXNhYmxlZDsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSwgLnBhcGVyLWl0ZW06Zm9jdXMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdXRsaW5lOiAwOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtLWZvY3VzZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cyk6YmVmb3JlLCAucGFwZXItaXRlbTpmb2N1czpiZWZvcmUgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CgogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBvcGFjaXR5OiB2YXIoLS1kYXJrLWRpdmlkZXItb3BhY2l0eSk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tZm9jdXNlZC1iZWZvcmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChTVy5jb250ZW50KTt2YXIgVmJlPXtob3N0QXR0cmlidXRlczp7cm9sZToib3B0aW9uIix0YWJpbmRleDoiMCJ9fSxQOT1bU2gsRGksVmJlXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGFwZXItaXRlbS1zaGFyZWQtc3R5bGVzIj4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtIixiZWhhdmlvcnM6W1A5XX0pO1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIG5lZWRlZCBmb3IgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXMgdG8gd29yayBvbiBmZiAqLwogICAgICAgIEBhcHBseSAtLWxheW91dC12ZXJ0aWNhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtZmxleDsKICAgICAgfQoKICAgICAgOmhvc3QoW3R3by1saW5lXSkgewogICAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS10d28tbGluZS1taW4taGVpZ2h0LCA3MnB4KTsKICAgICAgfQoKICAgICAgOmhvc3QoW3RocmVlLWxpbmVdKSB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tcGFwZXItaXRlbS1ib2R5LXRocmVlLWxpbmUtbWluLWhlaWdodCwgODhweCk7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKCopIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIDpob3N0ID4gOjpzbG90dGVkKFtzZWNvbmRhcnldKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1ib2R5MTsKCiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnktY29sb3IsIHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWl0ZW0tYm9keS1zZWNvbmRhcnk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1pdGVtLWJvZHkifSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLWl0ZW0tc2hhcmVkLXN0eWxlcyI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1zdWJoZWFkOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1pdGVtOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWljb24taXRlbTsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtaWNvbiB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgd2lkdGg6IHZhcigtLXBhcGVyLWl0ZW0taWNvbi13aWR0aCwgNTZweCk7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItaXRlbS1pY29uOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnRJY29uIiBjbGFzcz0iY29udGVudC1pY29uIj4KICAgICAgPHNsb3QgbmFtZT0iaXRlbS1pY29uIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzbG90Pjwvc2xvdD4KYCxpczoicGFwZXItaWNvbi1pdGVtIixiZWhhdmlvcnM6W1A5XX0pO3ZhciBNVz17cHJvcGVydGllczp7bXVsdGk6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoibXVsdGlDaGFuZ2VkIn0sc2VsZWN0ZWRWYWx1ZXM6e3R5cGU6QXJyYXksbm90aWZ5OiEwLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxzZWxlY3RlZEl0ZW1zOnt0eXBlOkFycmF5LHJlYWRPbmx5OiEwLG5vdGlmeTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl91cGRhdGVTZWxlY3RlZChzZWxlY3RlZFZhbHVlcy5zcGxpY2VzKSJdLHNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLm11bHRpP3RoaXMuX3RvZ2dsZVNlbGVjdGVkKGUpOnRoaXMuc2VsZWN0ZWQ9ZX0sbXVsdGlDaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3NlbGVjdGlvbi5tdWx0aT1lLHRoaXMuX3VwZGF0ZVNlbGVjdGVkKCl9LGdldCBfc2hvdWxkVXBkYXRlU2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWQhPW51bGx8fHRoaXMuc2VsZWN0ZWRWYWx1ZXMhPW51bGwmJnRoaXMuc2VsZWN0ZWRWYWx1ZXMubGVuZ3RofSxfdXBkYXRlQXR0ckZvclNlbGVjdGVkOmZ1bmN0aW9uKCl7dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGg+MCYmKHRoaXMuc2VsZWN0ZWRWYWx1ZXM9dGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW5kZXhUb1ZhbHVlKHRoaXMuaW5kZXhPZihlKSl9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbH0sdGhpcykpOndoLl91cGRhdGVBdHRyRm9yU2VsZWN0ZWQuYXBwbHkodGhpcyl9LF91cGRhdGVTZWxlY3RlZDpmdW5jdGlvbigpe3RoaXMubXVsdGk/dGhpcy5fc2VsZWN0TXVsdGkodGhpcy5zZWxlY3RlZFZhbHVlcyk6dGhpcy5fc2VsZWN0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZCl9LF9zZWxlY3RNdWx0aTpmdW5jdGlvbihlKXtlPWV8fFtdO3ZhciB0PSh0aGlzLl92YWx1ZXNUb0l0ZW1zKGUpfHxbXSkuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpIT1udWxsfSk7dGhpcy5fc2VsZWN0aW9uLmNsZWFyKHQpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMuX3NlbGVjdGlvbi5zZXRJdGVtU2VsZWN0ZWQodFtyXSwhMCk7aWYodGhpcy5mYWxsYmFja1NlbGVjdGlvbiYmIXRoaXMuX3NlbGVjdGlvbi5nZXQoKS5sZW5ndGgpe3ZhciBuPXRoaXMuX3ZhbHVlVG9JdGVtKHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pO24mJnRoaXMuc2VsZWN0KHRoaXMuZmFsbGJhY2tTZWxlY3Rpb24pfX0sX3NlbGVjdGlvbkNoYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3NlbGVjdGlvbi5nZXQoKTt0aGlzLm11bHRpPyh0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKGUpLHRoaXMuX3NldFNlbGVjdGVkSXRlbShlLmxlbmd0aD9lWzBdOm51bGwpKTplIT1udWxsPyh0aGlzLl9zZXRTZWxlY3RlZEl0ZW1zKFtlXSksdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKGUpKToodGhpcy5fc2V0U2VsZWN0ZWRJdGVtcyhbXSksdGhpcy5fc2V0U2VsZWN0ZWRJdGVtKG51bGwpKX0sX3RvZ2dsZVNlbGVjdGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5kZXhPZihlKSxyPXQ8MDtyP3RoaXMucHVzaCgic2VsZWN0ZWRWYWx1ZXMiLGUpOnRoaXMuc3BsaWNlKCJzZWxlY3RlZFZhbHVlcyIsdCwxKX0sX3ZhbHVlc1RvSXRlbXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDplLm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVUb0l0ZW0odCl9LHRoaXMpfX0sRTB0PVt3aCxNV107dmFyIF9fPXtwcm9wZXJ0aWVzOntmb2N1c2VkSXRlbTp7b2JzZXJ2ZXI6Il9mb2N1c2VkSXRlbUNoYW5nZWQiLHJlYWRPbmx5OiEwLHR5cGU6T2JqZWN0fSxhdHRyRm9ySXRlbVRpdGxlOnt0eXBlOlN0cmluZ30sZGlzYWJsZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxvYnNlcnZlcjoiX2Rpc2FibGVkQ2hhbmdlZCJ9fSxfTU9ESUZJRVJfS0VZUzpbIkFsdCIsIkFsdEdyYXBoIiwiQ2Fwc0xvY2siLCJDb250cm9sIiwiRm4iLCJGbkxvY2siLCJIeXBlciIsIk1ldGEiLCJOdW1Mb2NrIiwiT1MiLCJTY3JvbGxMb2NrIiwiU2hpZnQiLCJTdXBlciIsIlN5bWJvbCIsIlN5bWJvbExvY2siXSxfU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVM6MWUzLF9wcmV2aW91c1RhYkluZGV4OjAsaG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnUifSxvYnNlcnZlcnM6WyJfdXBkYXRlTXVsdGlzZWxlY3RhYmxlKG11bHRpKSJdLGxpc3RlbmVyczp7Zm9jdXM6Il9vbkZvY3VzIixrZXlkb3duOiJfb25LZXlkb3duIiwiaXJvbi1pdGVtcy1jaGFuZ2VkIjoiX29uSXJvbkl0ZW1zQ2hhbmdlZCJ9LGtleUJpbmRpbmdzOnt1cDoiX29uVXBLZXkiLGRvd246Il9vbkRvd25LZXkiLGVzYzoiX29uRXNjS2V5Iiwic2hpZnQrdGFiOmtleWRvd24iOiJfb25TaGlmdFRhYkRvd24ifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3Jlc2V0VGFiaW5kaWNlcygpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jKSx0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYz1udWxsKTt2YXIgdD10aGlzLl92YWx1ZVRvSXRlbShlKTt0JiZ0Lmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKXx8KHRoaXMuX3NldEZvY3VzZWRJdGVtKHQpLE1XLnNlbGVjdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxfcmVzZXRUYWJpbmRpY2VzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tdWx0aT90aGlzLnNlbGVjdGVkSXRlbXMmJnRoaXMuc2VsZWN0ZWRJdGVtc1swXTp0aGlzLnNlbGVjdGVkSXRlbTt0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24odCl7dC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4Iix0PT09ZT8iMCI6Ii0xIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLHRoaXMuX3NlbGVjdGlvbi5pc1NlbGVjdGVkKHQpKX0sdGhpcyl9LF91cGRhdGVNdWx0aXNlbGVjdGFibGU6ZnVuY3Rpb24oZSl7ZT90aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbXVsdGlzZWxlY3RhYmxlIil9LF9mb2N1c1dpdGhLZXlib2FyZEV2ZW50OmZ1bmN0aW9uKGUpe2lmKHRoaXMuX01PRElGSUVSX0tFWVMuaW5kZXhPZihlLmtleSk9PT0tMSl7dGhpcy5jYW5jZWxEZWJvdW5jZXIoIl9jbGVhclNlYXJjaFRleHQiKTt2YXIgdD10aGlzLl9zZWFyY2hUZXh0fHwiIixyPWUua2V5JiZlLmtleS5sZW5ndGg9PTE/ZS5rZXk6U3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO3QrPXIudG9Mb2NhbGVMb3dlckNhc2UoKTtmb3IodmFyIG49dC5sZW5ndGgsaT0wLG87bz10aGlzLml0ZW1zW2ldO2krKylpZighby5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpe3ZhciBhPXRoaXMuYXR0ckZvckl0ZW1UaXRsZXx8InRleHRDb250ZW50IixzPShvW2FdfHxvLmdldEF0dHJpYnV0ZShhKXx8IiIpLnRyaW0oKTtpZighKHMubGVuZ3RoPG4pJiZzLnNsaWNlKDAsbikudG9Mb2NhbGVMb3dlckNhc2UoKT09dCl7dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obyk7YnJlYWt9fXRoaXMuX3NlYXJjaFRleHQ9dCx0aGlzLmRlYm91bmNlKCJfY2xlYXJTZWFyY2hUZXh0Iix0aGlzLl9jbGVhclNlYXJjaFRleHQsdGhpcy5fU0VBUkNIX1JFU0VUX1RJTUVPVVRfTVMpfX0sX2NsZWFyU2VhcmNoVGV4dDpmdW5jdGlvbigpe3RoaXMuX3NlYXJjaFRleHQ9IiJ9LF9mb2N1c1ByZXZpb3VzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLHQ9TnVtYmVyKHRoaXMuaW5kZXhPZih0aGlzLmZvY3VzZWRJdGVtKSkscj0xO3I8ZSsxO3IrKyl7dmFyIG49dGhpcy5pdGVtc1sodC1yK2UpJWVdO2lmKCFuLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGk9enQobikuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O2lmKHRoaXMuX3NldEZvY3VzZWRJdGVtKG4pLHp0KGkpLmFjdGl2ZUVsZW1lbnQ9PW4pcmV0dXJufX19LF9mb2N1c05leHQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5pdGVtcy5sZW5ndGgsdD1OdW1iZXIodGhpcy5pbmRleE9mKHRoaXMuZm9jdXNlZEl0ZW0pKSxyPTE7cjxlKzE7cisrKXt2YXIgbj10aGlzLml0ZW1zWyh0K3IpJWVdO2lmKCFuLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSl7dmFyIGk9enQobikuZ2V0T3duZXJSb290KCl8fGRvY3VtZW50O2lmKHRoaXMuX3NldEZvY3VzZWRJdGVtKG4pLHp0KGkpLmFjdGl2ZUVsZW1lbnQ9PW4pcmV0dXJufX19LF9hcHBseVNlbGVjdGlvbjpmdW5jdGlvbihlLHQpe3Q/ZS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIik6ZS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLHdoLl9hcHBseVNlbGVjdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9mb2N1c2VkSXRlbUNoYW5nZWQ6ZnVuY3Rpb24oZSx0KXt0JiZ0LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGUmJiFlLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSYmIXRoaXMuZGlzYWJsZWQmJihlLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksZS5mb2N1cygpKX0sX29uSXJvbkl0ZW1zQ2hhbmdlZDpmdW5jdGlvbihlKXtlLmRldGFpbC5hZGRlZE5vZGVzLmxlbmd0aCYmdGhpcy5fcmVzZXRUYWJpbmRpY2VzKCl9LF9vblNoaWZ0VGFiRG93bjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtfXy5fc2hpZnRUYWJQcmVzc2VkPSEwLHRoaXMuX3NldEZvY3VzZWRJdGVtKG51bGwpLHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksdGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdCksX18uX3NoaWZ0VGFiUHJlc3NlZD0hMX0sMSl9LF9vbkZvY3VzOmZ1bmN0aW9uKGUpe2lmKCFfXy5fc2hpZnRUYWJQcmVzc2VkKXt2YXIgdD16dChlKS5yb290VGFyZ2V0O3QhPT10aGlzJiZ0eXBlb2YgdC50YWJJbmRleCE9InVuZGVmaW5lZCImJiF0aGlzLmlzTGlnaHREZXNjZW5kYW50KHQpfHwodGhpcy5fZGVmYXVsdEZvY3VzQXN5bmM9dGhpcy5hc3luYyhmdW5jdGlvbigpe3ZhciByPXRoaXMubXVsdGk/dGhpcy5zZWxlY3RlZEl0ZW1zJiZ0aGlzLnNlbGVjdGVkSXRlbXNbMF06dGhpcy5zZWxlY3RlZEl0ZW07dGhpcy5fc2V0Rm9jdXNlZEl0ZW0obnVsbCkscj90aGlzLl9zZXRGb2N1c2VkSXRlbShyKTp0aGlzLml0ZW1zWzBdJiZ0aGlzLl9mb2N1c05leHQoKX0pKX19LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbkRvd25LZXk6ZnVuY3Rpb24oZSl7dGhpcy5fZm9jdXNOZXh0KCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxfb25Fc2NLZXk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5mb2N1c2VkSXRlbTt0JiZ0LmJsdXIoKX0sX29uS2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLmtleWJvYXJkRXZlbnRNYXRjaGVzS2V5cyhlLCJ1cCBkb3duIGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KGUpLGUuc3RvcFByb3BhZ2F0aW9uKCl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oZSl7d2guX2FjdGl2YXRlSGFuZGxlci5jYWxsKHRoaXMsZSksZS5zdG9wUHJvcGFnYXRpb24oKX0sX2Rpc2FibGVkQ2hhbmdlZDpmdW5jdGlvbihlKXtlPyh0aGlzLl9wcmV2aW91c1RhYkluZGV4PXRoaXMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpP3RoaXMudGFiSW5kZXg6MCx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6dGhpcy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHRoaXMuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5fcHJldmlvdXNUYWJJbmRleCl9fTtfXy5fc2hpZnRUYWJQcmVzc2VkPSExO3ZhciBJOT1bRTB0LE9vLF9fXTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKCiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItbGlzdGJveC1iYWNrZ3JvdW5kLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpKTsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItbGlzdGJveC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLWxpc3Rib3g7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1saXN0Ym94IixiZWhhdmlvcnM6W0k5XSxob3N0QXR0cmlidXRlczp7cm9sZToibGlzdGJveCJ9fSk7dmFyIFQwdD1RYAo8ZG9tLW1vZHVsZSBpZD0icGFwZXItbWF0ZXJpYWwtc2hhcmVkLXN0eWxlcyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSIxIl0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iMiJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi00ZHA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtlbGV2YXRpb249IjMiXSkgewogICAgICAgIEBhcHBseSAtLXNoYWRvdy1lbGV2YXRpb24tNmRwOwogICAgICB9CgogICAgICA6aG9zdChbZWxldmF0aW9uPSI0Il0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLThkcDsKICAgICAgfQoKICAgICAgOmhvc3QoW2VsZXZhdGlvbj0iNSJdKSB7CiAgICAgICAgQGFwcGx5IC0tc2hhZG93LWVsZXZhdGlvbi0xNmRwOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT4KYDtUMHQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChUMHQuY29udGVudCk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLW1hdGVyaWFsLXNoYXJlZC1zdHlsZXMiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0KFthbmltYXRlZF0pIHsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctdHJhbnNpdGlvbjsKICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItbWF0ZXJpYWw7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNsb3Q+PC9zbG90PgpgLGlzOiJwYXBlci1tYXRlcmlhbCIscHJvcGVydGllczp7ZWxldmF0aW9uOnt0eXBlOk51bWJlcixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6MX0sYW5pbWF0ZWQ6e3R5cGU6Qm9vbGVhbixyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsdmFsdWU6ITF9fX0pO3ZhciBMOT17cHJvcGVydGllczp7dmFsdWU6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sbWluOnt0eXBlOk51bWJlcix2YWx1ZTowLG5vdGlmeTohMH0sbWF4Ont0eXBlOk51bWJlcix2YWx1ZToxMDAsbm90aWZ5OiEwfSxzdGVwOnt0eXBlOk51bWJlcix2YWx1ZToxLG5vdGlmeTohMH0scmF0aW86e3R5cGU6TnVtYmVyLHZhbHVlOjAscmVhZE9ubHk6ITAsbm90aWZ5OiEwfX0sb2JzZXJ2ZXJzOlsiX3VwZGF0ZSh2YWx1ZSwgbWluLCBtYXgsIHN0ZXApIl0sX2NhbGNSYXRpbzpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fY2xhbXBWYWx1ZShlKS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKX0sX2NsYW1wVmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWluKHRoaXMubWF4LE1hdGgubWF4KHRoaXMubWluLHRoaXMuX2NhbGNTdGVwKGUpKSl9LF9jYWxjU3RlcDpmdW5jdGlvbihlKXtpZihlPXBhcnNlRmxvYXQoZSksIXRoaXMuc3RlcClyZXR1cm4gZTt2YXIgdD1NYXRoLnJvdW5kKChlLXRoaXMubWluKS90aGlzLnN0ZXApO3JldHVybiB0aGlzLnN0ZXA8MT90LygxL3RoaXMuc3RlcCkrdGhpcy5taW46dCp0aGlzLnN0ZXArdGhpcy5taW59LF92YWxpZGF0ZVZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2xhbXBWYWx1ZSh0aGlzLnZhbHVlKTtyZXR1cm4gdGhpcy52YWx1ZT10aGlzLm9sZFZhbHVlPWlzTmFOKGUpP3RoaXMub2xkVmFsdWU6ZSx0aGlzLnZhbHVlIT09ZX0sX3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMuX3ZhbGlkYXRlVmFsdWUoKSx0aGlzLl9zZXRSYXRpbyh0aGlzLl9jYWxjUmF0aW8odGhpcy52YWx1ZSkqMTAwKX19O1l0KHtfdGVtcGxhdGU6UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2hpZGRlbl0pLCBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAjcHJvZ3Jlc3NDb250YWluZXIgewogICAgICAgIEBhcHBseSAtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLyogdGhlIHN0cmlwZSBmb3IgdGhlIGluZGV0ZXJtaW5hdGUgYW5pbWF0aW9uKi8KICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBoZWlnaHQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWhlaWdodCwgNHB4KTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgI3NlY29uZGFyeVByb2dyZXNzLAogICAgICAuaW5kZXRlcm1pbmF0ZTo6YWZ0ZXIgewogICAgICAgIEBhcHBseSAtLWxheW91dC1maXQ7CiAgICAgIH0KCiAgICAgICNwcm9ncmVzc0NvbnRhaW5lciwKICAgICAgLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlci1wcm9ncmVzcy1jb250YWluZXItY29sb3IsIHZhcigtLWdvb2dsZS1ncmV5LTMwMCkpOwogICAgICB9CgogICAgICA6aG9zdCgudHJhbnNpdGluZykgI3ByaW1hcnlQcm9ncmVzcywKICAgICAgOmhvc3QoLnRyYW5zaXRpbmcpICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiAtd2Via2l0LXRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm07CgogICAgICAgIC8qIER1cmF0aW9uICovCiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWR1cmF0aW9uLCAwLjA4cyk7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtdHJhbnNpdGlvbi1kdXJhdGlvbiwgMC4wOHMpOwoKICAgICAgICAvKiBUaW1pbmcgZnVuY3Rpb24gKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbiwgZWFzZSk7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLCBlYXNlKTsKCiAgICAgICAgLyogRGVsYXkgKi8KICAgICAgICAtd2Via2l0LXRyYW5zaXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXByb2dyZXNzLXRyYW5zaXRpb24tZGVsYXksIDBzKTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci1wcm9ncmVzcy10cmFuc2l0aW9uLWRlbGF5LCAwcyk7CiAgICAgIH0KCiAgICAgICNwcmltYXJ5UHJvZ3Jlc3MsCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZpdDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgfQoKICAgICAgI3ByaW1hcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtYWN0aXZlLWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tNTAwKSk7CiAgICAgIH0KCiAgICAgICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3Mtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JlZW4tMTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNwcmltYXJ5UHJvZ3Jlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLWFjdGl2ZS1jb2xvciwgdmFyKC0tZ29vZ2xlLWdyZXktNTAwKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pICNzZWNvbmRhcnlQcm9ncmVzcyB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtc2Vjb25kYXJ5LWNvbG9yLCB2YXIoLS1nb29nbGUtZ3JleS0zMDApKTsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdChbZGlzYWJsZWRdKSkgI3ByaW1hcnlQcm9ncmVzcy5pbmRldGVybWluYXRlIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IHJpZ2h0IGNlbnRlcjsKICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiByaWdodCBjZW50ZXI7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtYmFyIHZhcigtLXBhcGVyLXByb2dyZXNzLWluZGV0ZXJtaW5hdGUtY3ljbGUtZHVyYXRpb24sIDJzKSBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlLWJhciB2YXIoLS1wYXBlci1wcm9ncmVzcy1pbmRldGVybWluYXRlLWN5Y2xlLWR1cmF0aW9uLCAycykgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtkaXNhYmxlZF0pKSAjcHJpbWFyeVByb2dyZXNzLmluZGV0ZXJtaW5hdGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAiIjsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGNlbnRlciBjZW50ZXI7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKCiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246IGluZGV0ZXJtaW5hdGUtc3BsaXR0ZXIgdmFyKC0tcGFwZXItcHJvZ3Jlc3MtaW5kZXRlcm1pbmF0ZS1jeWNsZS1kdXJhdGlvbiwgMnMpIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgICAgNzUlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllciguMjgsLjYyLC4zNywuOTEpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZVgoMCkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoLTEyNSUpOwogICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCguNzUpIHRyYW5zbGF0ZVgoMTI1JSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUtYmFyIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKSB0cmFuc2xhdGVYKC0xMDAlKTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKDEpIHRyYW5zbGF0ZVgoMCUpOwogICAgICAgIH0KICAgICAgICA3NSUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSkgdHJhbnNsYXRlWCgwJSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjI4LC42MiwuMzcsLjkxKTsKICAgICAgICB9CiAgICAgICAgMTAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgwKSB0cmFuc2xhdGVYKDAlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZS1zcGxpdHRlciB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKC0xMjUlKTsKICAgICAgICB9CiAgICAgICAgMzAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgtMTI1JSk7CiAgICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoLjQyLDAsLjYsLjgpOwogICAgICAgIH0KICAgICAgICA5MCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLjc1KSB0cmFuc2xhdGVYKDEyNSUpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC43NSkgdHJhbnNsYXRlWCgxMjUlKTsKICAgICAgICB9CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0icHJvZ3Jlc3NDb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJzZWNvbmRhcnlQcm9ncmVzcyIgaGlkZGVuXCQ9IltbX2hpZGVTZWNvbmRhcnlQcm9ncmVzcyhzZWNvbmRhcnlSYXRpbyldXSI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InByaW1hcnlQcm9ncmVzcyI+PC9kaXY+CiAgICA8L2Rpdj4KYCxpczoicGFwZXItcHJvZ3Jlc3MiLGJlaGF2aW9yczpbTDldLHByb3BlcnRpZXM6e3NlY29uZGFyeVByb2dyZXNzOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzZWNvbmRhcnlSYXRpbzp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMH0saW5kZXRlcm1pbmF0ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfdG9nZ2xlSW5kZXRlcm1pbmF0ZSJ9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEscmVmbGVjdFRvQXR0cmlidXRlOiEwLG9ic2VydmVyOiJfZGlzYWJsZWRDaGFuZ2VkIn19LG9ic2VydmVyczpbIl9wcm9ncmVzc0NoYW5nZWQoc2Vjb25kYXJ5UHJvZ3Jlc3MsIHZhbHVlLCBtaW4sIG1heCwgaW5kZXRlcm1pbmF0ZSkiXSxob3N0QXR0cmlidXRlczp7cm9sZToicHJvZ3Jlc3NiYXIifSxfdG9nZ2xlSW5kZXRlcm1pbmF0ZTpmdW5jdGlvbihlKXt0aGlzLnRvZ2dsZUNsYXNzKCJpbmRldGVybWluYXRlIixlLHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MpfSxfdHJhbnNmb3JtUHJvZ3Jlc3M6ZnVuY3Rpb24oZSx0KXt2YXIgcj0ic2NhbGVYKCIrdC8xMDArIikiO2Uuc3R5bGUudHJhbnNmb3JtPWUuc3R5bGUud2Via2l0VHJhbnNmb3JtPXJ9LF9tYWluUmF0aW9DaGFuZ2VkOmZ1bmN0aW9uKGUpe3RoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5wcmltYXJ5UHJvZ3Jlc3MsZSl9LF9wcm9ncmVzc0NoYW5nZWQ6ZnVuY3Rpb24oZSx0LHIsbixpKXtlPXRoaXMuX2NsYW1wVmFsdWUoZSksdD10aGlzLl9jbGFtcFZhbHVlKHQpO3ZhciBvPXRoaXMuX2NhbGNSYXRpbyhlKSoxMDAsYT10aGlzLl9jYWxjUmF0aW8odCkqMTAwO3RoaXMuX3NldFNlY29uZGFyeVJhdGlvKG8pLHRoaXMuX3RyYW5zZm9ybVByb2dyZXNzKHRoaXMuJC5zZWNvbmRhcnlQcm9ncmVzcyxvKSx0aGlzLl90cmFuc2Zvcm1Qcm9ncmVzcyh0aGlzLiQucHJpbWFyeVByb2dyZXNzLGEpLHRoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3M9ZSxpP3RoaXMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLXZhbHVlbm93Iik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVub3ciLHQpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbWluIixyKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1heCIsbil9LF9kaXNhYmxlZENoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtZGlzYWJsZWQiLGU/InRydWUiOiJmYWxzZSIpfSxfaGlkZVNlY29uZGFyeVByb2dyZXNzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MH19KTt2YXIgQzB0PVFgCjxzdHlsZT4KICA6aG9zdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBsaW5lLWhlaWdodDogMDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tc2l6ZSwgMTZweCk7CiAgICAvKiAtMXB4IGlzIGEgc2VudGluZWwgZm9yIHRoZSBkZWZhdWx0IGFuZCBpcyByZXBsYWNlIGluIFxgYXR0YWNoZWRcYC4gKi8KICAgIC0tY2FsY3VsYXRlZC1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemU6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSwgLTFweCk7CiAgfQoKICA6aG9zdCg6Zm9jdXMpIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAjcmFkaW9Db250YWluZXIgewogICAgQGFwcGx5IC0tbGF5b3V0LWlubGluZTsKICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXItY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUpOwogICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1zaXplKTsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CgogICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLXJhZGlvLWNvbnRhaW5lcjsKICB9CgogICNpbmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICBsZWZ0OiA1MCU7CiAgICByaWdodDogYXV0bzsKICAgIHdpZHRoOiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSk7CiAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLWluay1zaXplKTsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjY7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB9CgogICNpbmtbY2hlY2tlZF0gewogICAgY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogIH0KCiAgI29mZlJhZGlvLCAjb25SYWRpbyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogIH0KCiAgI29mZlJhZGlvIHsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi11bmNoZWNrZWQtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1iYWNrZ3JvdW5kLWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yOHM7CiAgfQoKICAjb25SYWRpbyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwKTsKICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIGVhc2UgMC4yOHM7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gZWFzZSAwLjI4czsKICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNvZmZSYWRpbyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLXBhcGVyLXJhZGlvLWJ1dHRvbi1jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgfQoKICA6aG9zdChbY2hlY2tlZF0pICNvblJhZGlvIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjUpOwogIH0KCiAgI3JhZGlvTGFiZWwgewogICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICBtYXJnaW4tbGVmdDogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDEwcHgpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKICAgIGNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwoKICAgIEBhcHBseSAtLXBhcGVyLXJhZGlvLWJ1dHRvbi1sYWJlbDsKICB9CgogIDpob3N0KFtjaGVja2VkXSkgI3JhZGlvTGFiZWwgewogICAgQGFwcGx5IC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLWNoZWNrZWQ7CiAgfQoKICAjcmFkaW9MYWJlbDpkaXIocnRsKSB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDEwcHgpOwogIH0KCiAgI3JhZGlvTGFiZWxbaGlkZGVuXSB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KCiAgLyogZGlzYWJsZWQgc3RhdGUgKi8KCiAgOmhvc3QoW2Rpc2FibGVkXSkgI29mZlJhZGlvIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcGFwZXItcmFkaW8tYnV0dG9uLXVuY2hlY2tlZC1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CiAgICBvcGFjaXR5OiAwLjU7CiAgfQoKICA6aG9zdChbZGlzYWJsZWRdW2NoZWNrZWRdKSAjb25SYWRpbyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1yYWRpby1idXR0b24tdW5jaGVja2VkLWNvbG9yLCB2YXIoLS1wcmltYXJ5LXRleHQtY29sb3IpKTsKICAgIG9wYWNpdHk6IDAuNTsKICB9CgogIDpob3N0KFtkaXNhYmxlZF0pICNyYWRpb0xhYmVsIHsKICAgIC8qIHNsaWdodGx5IGRhcmtlciB0aGFuIHRoZSBidXR0b24sIHNvIHRoYXQgaXQncyByZWFkYWJsZSAqLwogICAgb3BhY2l0eTogMC42NTsKICB9Cjwvc3R5bGU+Cgo8ZGl2IGlkPSJyYWRpb0NvbnRhaW5lciI+CiAgPGRpdiBpZD0ib2ZmUmFkaW8iPjwvZGl2PgogIDxkaXYgaWQ9Im9uUmFkaW8iPjwvZGl2Pgo8L2Rpdj4KCjxkaXYgaWQ9InJhZGlvTGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gO0MwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOkMwdCxpczoicGFwZXItcmFkaW8tYnV0dG9uIixiZWhhdmlvcnM6W1h4XSxob3N0QXR0cmlidXRlczp7cm9sZToicmFkaW8iLCJhcmlhLWNoZWNrZWQiOiExLHRhYmluZGV4OjB9LHByb3BlcnRpZXM6e2FyaWFBY3RpdmVBdHRyaWJ1dGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJhcmlhLWNoZWNrZWQifX0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnJhZGlvQ29udGFpbmVyfSxhdHRhY2hlZDpmdW5jdGlvbigpe1RtKHRoaXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldENvbXB1dGVkU3R5bGVWYWx1ZSgiLS1jYWxjdWxhdGVkLXBhcGVyLXJhZGlvLWJ1dHRvbi1pbmstc2l6ZSIpLnRyaW0oKTtpZihlPT09Ii0xcHgiKXt2YXIgdD1wYXJzZUZsb2F0KHRoaXMuZ2V0Q29tcHV0ZWRTdHlsZVZhbHVlKCItLWNhbGN1bGF0ZWQtcGFwZXItcmFkaW8tYnV0dG9uLXNpemUiKS50cmltKCkpLHI9TWF0aC5mbG9vcigzKnQpO3IlMiE9PXQlMiYmcisrLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1wYXBlci1yYWRpby1idXR0b24taW5rLXNpemUiOnIrInB4In0pfX0pfX0pO3ZhciBrOT17aG9zdEF0dHJpYnV0ZXM6e3JvbGU6Im1lbnViYXIifSxrZXlCaW5kaW5nczp7bGVmdDoiX29uTGVmdEtleSIscmlnaHQ6Il9vblJpZ2h0S2V5In0sX29uVXBLZXk6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2VkSXRlbS5jbGljaygpLGUuZGV0YWlsLmtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKX0sX29uRG93bktleTpmdW5jdGlvbihlKXt0aGlzLmZvY3VzZWRJdGVtLmNsaWNrKCksZS5kZXRhaWwua2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSxnZXQgX2lzUlRMKCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmRpcmVjdGlvbj09PSJydGwifSxfb25MZWZ0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2ZvY3VzTmV4dCgpOnRoaXMuX2ZvY3VzUHJldmlvdXMoKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vblJpZ2h0S2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2lzUlRMP3RoaXMuX2ZvY3VzUHJldmlvdXMoKTp0aGlzLl9mb2N1c05leHQoKSxlLmRldGFpbC5rZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCl9LF9vbktleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5rZXlib2FyZEV2ZW50TWF0Y2hlc0tleXMoZSwidXAgZG93biBsZWZ0IHJpZ2h0IGVzYyIpfHx0aGlzLl9mb2N1c1dpdGhLZXlib2FyZEV2ZW50KGUpfX0sUjk9W0k5LGs5XTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IDo6c2xvdHRlZCgqKSB7CiAgICAgICAgcGFkZGluZzogdmFyKC0tcGFwZXItcmFkaW8tZ3JvdXAtaXRlbS1wYWRkaW5nLCAxMnB4KTsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLXJhZGlvLWdyb3VwIixiZWhhdmlvcnM6W1I5XSxob3N0QXR0cmlidXRlczp7cm9sZToicmFkaW9ncm91cCJ9LHByb3BlcnRpZXM6e2F0dHJGb3JTZWxlY3RlZDp7dHlwZTpTdHJpbmcsdmFsdWU6Im5hbWUifSxzZWxlY3RlZEF0dHJpYnV0ZTp7dHlwZTpTdHJpbmcsdmFsdWU6ImNoZWNrZWQifSxzZWxlY3RhYmxlOnt0eXBlOlN0cmluZyx2YWx1ZToicGFwZXItcmFkaW8tYnV0dG9uIn0sYWxsb3dFbXB0eVNlbGVjdGlvbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3ZhbHVlVG9JdGVtKGUpO2lmKCEodCYmdC5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpKXtpZih0aGlzLnNlbGVjdGVkKXt2YXIgcj10aGlzLl92YWx1ZVRvSXRlbSh0aGlzLnNlbGVjdGVkKTtpZih0aGlzLnNlbGVjdGVkPT1lKWlmKHRoaXMuYWxsb3dFbXB0eVNlbGVjdGlvbillPSIiO2Vsc2V7ciYmKHIuY2hlY2tlZD0hMCk7cmV0dXJufXImJihyLmNoZWNrZWQ9ITEpfXdoLnNlbGVjdC5hcHBseSh0aGlzLFtlXSksdGhpcy5maXJlKCJwYXBlci1yYWRpby1ncm91cC1jaGFuZ2VkIil9fSxfYWN0aXZhdGVGb2N1c2VkSXRlbTpmdW5jdGlvbigpe3RoaXMuX2l0ZW1BY3RpdmF0ZSh0aGlzLl92YWx1ZUZvckl0ZW0odGhpcy5mb2N1c2VkSXRlbSksdGhpcy5mb2N1c2VkSXRlbSl9LF9vblVwS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzUHJldmlvdXMoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25Eb3duS2V5OmZ1bmN0aW9uKGUpe3RoaXMuX2ZvY3VzTmV4dCgpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmF0ZUZvY3VzZWRJdGVtKCl9LF9vbkxlZnRLZXk6ZnVuY3Rpb24oZSl7azkuX29uTGVmdEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfSxfb25SaWdodEtleTpmdW5jdGlvbihlKXtrOS5fb25SaWdodEtleS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fYWN0aXZhdGVGb2N1c2VkSXRlbSgpfX0pO3ZhciBBMHQ9UWAKICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIEBhcHBseSAtLWxheW91dDsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWp1c3RpZmllZDsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1hY3RpdmUtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLXNlY29uZGFyeS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtMzAwKSk7CiAgICAgIC0tcGFwZXItcHJvZ3Jlc3MtZGlzYWJsZWQtYWN0aXZlLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQtYWN0aXZlLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWRpc2FibGVkLXNlY29uZGFyeS1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQ6IHZhcigtLXBhcGVyLXNsaWRlci1oZWlnaHQsIDJweCk7CiAgICB9CgogICAgLyogZm9jdXMgc2hvd3MgdGhlIHJpcHBsZSAqLwogICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLyoqCiAgICAgICogTk9URShrZWFudWxlZSk6IFRob3VnaCA6aG9zdC1jb250ZXh0IGlzIG5vdCB1bml2ZXJzYWxseSBzdXBwb3J0ZWQsIHNvbWUgcGFnZXMKICAgICAgKiBzdGlsbCByZWx5IG9uIHBhcGVyLXNsaWRlciBiZWluZyBmbGlwcGVkIHdoZW4gZGlyPSJydGwiIGlzIHNldCBvbiBib2R5LiBGb3IgZnVsbAogICAgICAqIGNvbXBhdGliaWxpdHksIGRpcj0icnRsIiBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0IG9uIHBhcGVyLXNsaWRlci4KICAgICAgKi8KICAgIDpkaXIocnRsKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgIH0KCiAgICAvKioKICAgICAgKiBOT1RFKGtlYW51bGVlKTogVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBydWxlIGFib3ZlIGJlY2F1c2UgOmhvc3QtY29udGV4dCBtYXkKICAgICAgKiBub3QgYmUgcmVjb2duaXplZC4KICAgICAgKi8KICAgIDpob3N0KFtkaXI9InJ0bCJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgtMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTsKICAgIH0KCiAgICAvKioKICAgICAgKiBOT1RFKGtlYW51bGVlKTogTmVlZGVkIHRvIG92ZXJyaWRlIHRoZSA6aG9zdC1jb250ZXh0IHJ1bGUgKHdoZXJlIHN1cHBvcnRlZCkKICAgICAgKiB0byBzdXBwb3J0IExUUiBzbGlkZXJzIGluIFJUTCBwYWdlcy4KICAgICAgKi8KICAgIDpob3N0KFtkaXI9Imx0ciJdKSAjc2xpZGVyQ29udGFpbmVyIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMSk7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIG1hcmdpbi1sZWZ0OiBjYWxjKDE1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoMTVweCArIHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCkvMik7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lcjpmb2N1cyB7CiAgICAgIG91dGxpbmU6IDA7CiAgICB9CgogICAgI3NsaWRlckNvbnRhaW5lci5lZGl0YWJsZSB7CiAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICB9CgogICAgLmJhci1jb250YWluZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAucmluZyA+IC5iYXItY29udGFpbmVyIHsKICAgICAgbGVmdDogY2FsYyg1cHggKyB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMThzIGVhc2U7CiAgICB9CgogICAgLnJpbmcuZXhwYW5kLmRyYWdnaW5nID4gLmJhci1jb250YWluZXIgewogICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgfQoKICAgIC5yaW5nLmV4cGFuZDpub3QoLnBpbikgPiAuYmFyLWNvbnRhaW5lciB7CiAgICAgIGxlZnQ6IGNhbGMoOHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KS8yKTsKICAgIH0KCiAgICAjc2xpZGVyQmFyIHsKICAgICAgcGFkZGluZzogMTVweCAwOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWJhci1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICAtLXBhcGVyLXByb2dyZXNzLWNvbnRhaW5lci1jb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWNvbnRhaW5lci1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItc2xpZGVyLWhlaWdodCk7CiAgICB9CgogICAgLnNsaWRlci1tYXJrZXJzIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAvKiBzbGlkZXIta25vYiBpcyAzMHB4ICsgdGhlIHNsaWRlci1oZWlnaHQgc28gdGhhdCB0aGUgbWFya2VycyBzaG91bGQgc3RhcnQgYXQgYSBvZmZzZXQgb2YgMTVweCovCiAgICAgIHRvcDogMTVweDsKICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogLTFweDsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIEBhcHBseSAtLWxheW91dC1ob3Jpem9udGFsOwogICAgfQoKICAgIC5zbGlkZXItbWFya2VyIHsKICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICB9CiAgICAuc2xpZGVyLW1hcmtlcnM6OmFmdGVyLAogICAgLnNsaWRlci1tYXJrZXI6OmFmdGVyIHsKICAgICAgY29udGVudDogIiI7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBtYXJnaW4tbGVmdDogLTFweDsKICAgICAgd2lkdGg6IDJweDsKICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpOwogICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1tYXJrZXJzLWNvbG9yLCAjMDAwKTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2IgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHRvcDogMDsKICAgICAgbWFyZ2luLWxlZnQ6IGNhbGMoLTE1cHggLSB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXNsaWRlci1oZWlnaHQpLzIpOwogICAgICB3aWR0aDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICAgIGhlaWdodDogY2FsYygzMHB4ICsgdmFyKC0tY2FsY3VsYXRlZC1wYXBlci1zbGlkZXItaGVpZ2h0KSk7CiAgICB9CgogICAgLnRyYW5zaXRpbmcgPiAuc2xpZGVyLWtub2IgewogICAgICB0cmFuc2l0aW9uOiBsZWZ0IDAuMDhzIGVhc2U7CiAgICB9CgogICAgLnNsaWRlci1rbm9iOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICAuc2xpZGVyLWtub2IuZHJhZ2dpbmcgewogICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgfQoKICAgIC5zbmFwcyA+IC5zbGlkZXIta25vYi5kcmFnZ2luZyB7CiAgICAgIHRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMDhzIGVhc2U7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjA4cyBlYXNlOwogICAgfQoKICAgIC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIG1hcmdpbjogMTBweDsKICAgICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNzAwKSk7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwoKICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm0sIGJhY2tncm91bmQtY29sb3IsIGJvcmRlcjsKICAgICAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtLCBiYWNrZ3JvdW5kLWNvbG9yLCBib3JkZXI7CiAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZTsKICAgIH0KCiAgICAuZXhwYW5kOm5vdCgucGluKSA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLjUpOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNSk7CiAgICB9CgogICAgLnJpbmcgPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXIgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvciwgdHJhbnNwYXJlbnQpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNDAwKSk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItcGluLWNvbG9yLCB2YXIoLS1nb29nbGUtYmx1ZS03MDApKTsKICAgIH0KCiAgICAucGluID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBjb250ZW50OiAiIjsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDUwJTsKICAgICAgbWFyZ2luLWxlZnQ6IC0xM3B4OwogICAgICB3aWR0aDogMjZweDsKICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICBib3JkZXItcmFkaXVzOiA1MCUgNTAlIDUwJSAwOwoKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpIHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgwKSB0cmFuc2xhdGUoMCk7CiAgICB9CgogICAgLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUsCiAgICAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgZWFzZTsKICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xOHMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAuMThzIGVhc2U7CiAgICB9CgogICAgLnBpbi5yaW5nID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgfQoKICAgIC5waW4uZXhwYW5kID4gLnNsaWRlci1rbm9iID4gLnNsaWRlci1rbm9iLWlubmVyOjpiZWZvcmUgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC00NWRlZykgc2NhbGUoMSkgdHJhbnNsYXRlKDE3cHgsIC0xN3B4KTsKICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKSBzY2FsZSgxKSB0cmFuc2xhdGUoMTdweCwgLTE3cHgpOwogICAgfQoKICAgIC5waW4gPiAuc2xpZGVyLWtub2IgPiAuc2xpZGVyLWtub2ItaW5uZXI6OmFmdGVyIHsKICAgICAgY29udGVudDogYXR0cih2YWx1ZSk7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAtMTZweDsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMjZweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBjb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWZvbnQtY29sb3IsICNmZmYpOwogICAgICBmb250LXNpemU6IDEwcHg7CgogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCkgdHJhbnNsYXRlKDApOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDApIHRyYW5zbGF0ZSgwKTsKICAgIH0KCiAgICAucGluLmV4cGFuZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lcjo6YWZ0ZXIgewogICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlKDAsIC0xN3B4KTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGUoMCwgLTE3cHgpOwogICAgfQoKICAgIC8qIHBhcGVyLWlucHV0ICovCiAgICAuc2xpZGVyLWlucHV0IHsKICAgICAgd2lkdGg6IDUwcHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dC1jb250YWluZXItaW5wdXQ7CiAgICAgIH07CiAgICAgIEBhcHBseSAtLXBhcGVyLXNsaWRlci1pbnB1dDsKICAgIH0KCiAgICAvKiBkaXNhYmxlZCBzdGF0ZSAqLwogICAgI3NsaWRlckNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQoKICAgIC5kaXNhYmxlZCA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1kaXNhYmxlZC1rbm9iLWNvbG9yLCB2YXIoLS1wYXBlci1ncmV5LTQwMCkpOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1wYXBlci1zbGlkZXItZGlzYWJsZWQta25vYi1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMC43NSwgMC43NSwgMSk7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgwLjc1LCAwLjc1LCAxKTsKICAgIH0KCiAgICAuZGlzYWJsZWQucmluZyA+IC5zbGlkZXIta25vYiA+IC5zbGlkZXIta25vYi1pbm5lciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWNvbG9yLCB0cmFuc3BhcmVudCk7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXBhcGVyLXNsaWRlci1rbm9iLXN0YXJ0LWJvcmRlci1jb2xvciwgdmFyKC0tcGFwZXItZ3JleS00MDApKTsKICAgIH0KCiAgICBwYXBlci1yaXBwbGUgewogICAgICBjb2xvcjogdmFyKC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTcwMCkpOwogICAgfQogIDwvc3R5bGU+CgogIDxkaXYgaWQ9InNsaWRlckNvbnRhaW5lciIgY2xhc3NcJD0iW1tfZ2V0Q2xhc3NOYW1lcyhkaXNhYmxlZCwgcGluLCBzbmFwcywgaW1tZWRpYXRlVmFsdWUsIG1pbiwgZXhwYW5kLCBkcmFnZ2luZywgdHJhbnNpdGluZywgZWRpdGFibGUpXV0iPgogICAgPGRpdiBjbGFzcz0iYmFyLWNvbnRhaW5lciI+CiAgICAgIDxwYXBlci1wcm9ncmVzcyBkaXNhYmxlZFwkPSJbW2Rpc2FibGVkXV0iIGlkPSJzbGlkZXJCYXIiIGFyaWEtaGlkZGVuPSJ0cnVlIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgc3RlcD0iW1tzdGVwXV0iIHZhbHVlPSJbW2ltbWVkaWF0ZVZhbHVlXV0iIHNlY29uZGFyeS1wcm9ncmVzcz0iW1tzZWNvbmRhcnlQcm9ncmVzc11dIiBvbi1kb3duPSJfYmFyZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfYmFydHJhY2siIG9uLXRhcD0iX2JhcmNsaWNrIj4KICAgICAgPC9wYXBlci1wcm9ncmVzcz4KICAgIDwvZGl2PgoKICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzbmFwc11dIj4KICAgICAgPGRpdiBjbGFzcz0ic2xpZGVyLW1hcmtlcnMiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbbWFya2Vyc11dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNsaWRlci1tYXJrZXIiPjwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8ZGl2IGlkPSJzbGlkZXJLbm9iIiBjbGFzcz0ic2xpZGVyLWtub2IiIG9uLWRvd249Il9rbm9iZG93biIgb24tdXA9Il9yZXNldEtub2IiIG9uLXRyYWNrPSJfb25UcmFjayIgb24tdHJhbnNpdGlvbmVuZD0iX2tub2JUcmFuc2l0aW9uRW5kIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzbGlkZXIta25vYi1pbm5lciIgdmFsdWVcJD0iW1tpbW1lZGlhdGVWYWx1ZV1dIj48L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgoKICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZWRpdGFibGVdXSI+CiAgICA8cGFwZXItaW5wdXQgaWQ9ImlucHV0IiB0eXBlPSJudW1iZXIiIHN0ZXA9Iltbc3RlcF1dIiBtaW49IltbbWluXV0iIG1heD0iW1ttYXhdXSIgY2xhc3M9InNsaWRlci1pbnB1dCIgZGlzYWJsZWRcJD0iW1tkaXNhYmxlZF1dIiB2YWx1ZT0iW1tpbW1lZGlhdGVWYWx1ZV1dIiBvbi1jaGFuZ2U9Il9jaGFuZ2VWYWx1ZSIgb24ta2V5ZG93bj0iX2lucHV0S2V5RG93biIgbm8tbGFiZWwtZmxvYXQ+CiAgICA8L3BhcGVyLWlucHV0PgogIDwvdGVtcGxhdGU+CmA7QTB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6QTB0LGlzOiJwYXBlci1zbGlkZXIiLGJlaGF2aW9yczpbT28sRWgsangsTDldLHByb3BlcnRpZXM6e3ZhbHVlOnt0eXBlOk51bWJlcix2YWx1ZTowfSxzbmFwczp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG5vdGlmeTohMH0scGluOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsbm90aWZ5OiEwfSxzZWNvbmRhcnlQcm9ncmVzczp7dHlwZTpOdW1iZXIsdmFsdWU6MCxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zZWNvbmRhcnlQcm9ncmVzc0NoYW5nZWQifSxlZGl0YWJsZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxpbW1lZGlhdGVWYWx1ZTp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWFkT25seTohMCxub3RpZnk6ITB9LG1heE1hcmtlcnM6e3R5cGU6TnVtYmVyLHZhbHVlOjAsbm90aWZ5OiEwfSxleHBhbmQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH0saWdub3JlQmFyVG91Y2g6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZHJhZ2dpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMCxub3RpZnk6ITB9LHRyYW5zaXRpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWFkT25seTohMH0sbWFya2Vyczp7dHlwZTpBcnJheSxyZWFkT25seTohMCx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX19LG9ic2VydmVyczpbIl91cGRhdGVLbm9iKHZhbHVlLCBtaW4sIG1heCwgc25hcHMsIHN0ZXApIiwiX3ZhbHVlQ2hhbmdlZCh2YWx1ZSkiLCJfaW1tZWRpYXRlVmFsdWVDaGFuZ2VkKGltbWVkaWF0ZVZhbHVlKSIsIl91cGRhdGVNYXJrZXJzKG1heE1hcmtlcnMsIG1pbiwgbWF4LCBzbmFwcykiXSxob3N0QXR0cmlidXRlczp7cm9sZToic2xpZGVyIix0YWJpbmRleDowfSxrZXlCaW5kaW5nczp7bGVmdDoiX2xlZnRLZXkiLHJpZ2h0OiJfcmlnaHRLZXkiLCJkb3duIHBhZ2Vkb3duIGhvbWUiOiJfZGVjcmVtZW50S2V5IiwidXAgcGFnZXVwIGVuZCI6Il9pbmNyZW1lbnRLZXkifSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuaWdub3JlQmFyVG91Y2gmJmRfKHRoaXMuJC5zbGlkZXJCYXIsImF1dG8iKX0saW5jcmVtZW50OmZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLl9jbGFtcFZhbHVlKHRoaXMudmFsdWUrdGhpcy5zdGVwKX0sZGVjcmVtZW50OmZ1bmN0aW9uKCl7dGhpcy52YWx1ZT10aGlzLl9jbGFtcFZhbHVlKHRoaXMudmFsdWUtdGhpcy5zdGVwKX0sX3VwZGF0ZUtub2I6ZnVuY3Rpb24oZSx0LHIsbixpKXt0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS12YWx1ZW1pbiIsdCksdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtdmFsdWVtYXgiLHIpLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLXZhbHVlbm93IixlKSx0aGlzLl9wb3NpdGlvbktub2IodGhpcy5fY2FsY1JhdGlvKGUpKjEwMCl9LF92YWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmZpcmUoInZhbHVlLWNoYW5nZSIse2NvbXBvc2VkOiEwfSl9LF9pbW1lZGlhdGVWYWx1ZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLmRyYWdnaW5nP3RoaXMuZmlyZSgiaW1tZWRpYXRlLXZhbHVlLWNoYW5nZSIse2NvbXBvc2VkOiEwfSk6dGhpcy52YWx1ZT10aGlzLmltbWVkaWF0ZVZhbHVlfSxfc2Vjb25kYXJ5UHJvZ3Jlc3NDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5zZWNvbmRhcnlQcm9ncmVzcz10aGlzLl9jbGFtcFZhbHVlKHRoaXMuc2Vjb25kYXJ5UHJvZ3Jlc3MpfSxfZXhwYW5kS25vYjpmdW5jdGlvbigpe3RoaXMuX3NldEV4cGFuZCghMCl9LF9yZXNldEtub2I6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbERlYm91bmNlcigiZXhwYW5kS25vYiIpLHRoaXMuX3NldEV4cGFuZCghMSl9LF9wb3NpdGlvbktub2I6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0SW1tZWRpYXRlVmFsdWUodGhpcy5fY2FsY1N0ZXAodGhpcy5fY2FsY0tub2JQb3NpdGlvbihlKSkpLHRoaXMuX3NldFJhdGlvKHRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSoxMDApLHRoaXMuJC5zbGlkZXJLbm9iLnN0eWxlLmxlZnQ9dGhpcy5yYXRpbysiJSIsdGhpcy5kcmFnZ2luZyYmKHRoaXMuX2tub2JzdGFydHg9dGhpcy5yYXRpbyp0aGlzLl93LzEwMCx0aGlzLnRyYW5zbGF0ZTNkKDAsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKSl9LF9jYWxjS25vYlBvc2l0aW9uOmZ1bmN0aW9uKGUpe3JldHVybih0aGlzLm1heC10aGlzLm1pbikqZS8xMDArdGhpcy5taW59LF9vblRyYWNrOmZ1bmN0aW9uKGUpe3N3aXRjaChlLnN0b3BQcm9wYWdhdGlvbigpLGUuZGV0YWlsLnN0YXRlKXtjYXNlInN0YXJ0Ijp0aGlzLl90cmFja1N0YXJ0KGUpO2JyZWFrO2Nhc2UidHJhY2siOnRoaXMuX3RyYWNrWChlKTticmVhaztjYXNlImVuZCI6dGhpcy5fdHJhY2tFbmQoKTticmVha319LF90cmFja1N0YXJ0OmZ1bmN0aW9uKGUpe3RoaXMuX3NldFRyYW5zaXRpbmcoITEpLHRoaXMuX3c9dGhpcy4kLnNsaWRlckJhci5vZmZzZXRXaWR0aCx0aGlzLl94PXRoaXMucmF0aW8qdGhpcy5fdy8xMDAsdGhpcy5fc3RhcnR4PXRoaXMuX3gsdGhpcy5fa25vYnN0YXJ0eD10aGlzLl9zdGFydHgsdGhpcy5fbWlueD0tdGhpcy5fc3RhcnR4LHRoaXMuX21heHg9dGhpcy5fdy10aGlzLl9zdGFydHgsdGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKSx0aGlzLl9zZXREcmFnZ2luZyghMCl9LF90cmFja1g6ZnVuY3Rpb24oZSl7dGhpcy5kcmFnZ2luZ3x8dGhpcy5fdHJhY2tTdGFydChlKTt2YXIgdD10aGlzLl9pc1JUTD8tMToxLHI9TWF0aC5taW4odGhpcy5fbWF4eCxNYXRoLm1heCh0aGlzLl9taW54LGUuZGV0YWlsLmR4KnQpKTt0aGlzLl94PXRoaXMuX3N0YXJ0eCtyO3ZhciBuPXRoaXMuX2NhbGNTdGVwKHRoaXMuX2NhbGNLbm9iUG9zaXRpb24odGhpcy5feC90aGlzLl93KjEwMCkpO3RoaXMuX3NldEltbWVkaWF0ZVZhbHVlKG4pO3ZhciBpPXRoaXMuX2NhbGNSYXRpbyh0aGlzLmltbWVkaWF0ZVZhbHVlKSp0aGlzLl93LXRoaXMuX2tub2JzdGFydHg7dGhpcy50cmFuc2xhdGUzZChpKyJweCIsMCwwLHRoaXMuJC5zbGlkZXJLbm9iKX0sX3RyYWNrRW5kOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kLnNsaWRlcktub2Iuc3R5bGU7dGhpcy4kLnNsaWRlcktub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKSx0aGlzLl9zZXREcmFnZ2luZyghMSksdGhpcy5fcmVzZXRLbm9iKCksdGhpcy52YWx1ZT10aGlzLmltbWVkaWF0ZVZhbHVlLGUudHJhbnNmb3JtPWUud2Via2l0VHJhbnNmb3JtPSIiLHRoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2tub2Jkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2V4cGFuZEtub2IoKSxlLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1cygpfSxfYmFydHJhY2s6ZnVuY3Rpb24oZSl7dGhpcy5fYWxsb3dCYXJFdmVudChlKSYmdGhpcy5fb25UcmFjayhlKX0sX2JhcmNsaWNrOmZ1bmN0aW9uKGUpe3RoaXMuX3c9dGhpcy4kLnNsaWRlckJhci5vZmZzZXRXaWR0aDt2YXIgdD10aGlzLiQuc2xpZGVyQmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9KGUuZGV0YWlsLngtdC5sZWZ0KS90aGlzLl93KjEwMDt0aGlzLl9pc1JUTCYmKHI9MTAwLXIpO3ZhciBuPXRoaXMucmF0aW87dGhpcy5fc2V0VHJhbnNpdGluZyghMCksdGhpcy5fcG9zaXRpb25Lbm9iKHIpLG49PT10aGlzLnJhdGlvJiZ0aGlzLl9zZXRUcmFuc2l0aW5nKCExKSx0aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5maXJlKCJjaGFuZ2UiLHtjb21wb3NlZDohMH0pfSksZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXMoKX0sX2JhcmRvd246ZnVuY3Rpb24oZSl7dGhpcy5fYWxsb3dCYXJFdmVudChlKSYmKHRoaXMuZGVib3VuY2UoImV4cGFuZEtub2IiLHRoaXMuX2V4cGFuZEtub2IsNjApLHRoaXMuX2JhcmNsaWNrKGUpKX0sX2tub2JUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09dGhpcy4kLnNsaWRlcktub2ImJnRoaXMuX3NldFRyYW5zaXRpbmcoITEpfSxfdXBkYXRlTWFya2VyczpmdW5jdGlvbihlLHQscixuKXtufHx0aGlzLl9zZXRNYXJrZXJzKFtdKTt2YXIgaT1NYXRoLnJvdW5kKChyLXQpL3RoaXMuc3RlcCk7aT5lJiYoaT1lKSwoaTwwfHwhaXNGaW5pdGUoaSkpJiYoaT0wKSx0aGlzLl9zZXRNYXJrZXJzKG5ldyBBcnJheShpKSl9LF9tZXJnZUNsYXNzZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pLmpvaW4oIiAiKX0sX2dldENsYXNzTmFtZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVyZ2VDbGFzc2VzKHtkaXNhYmxlZDp0aGlzLmRpc2FibGVkLHBpbjp0aGlzLnBpbixzbmFwczp0aGlzLnNuYXBzLHJpbmc6dGhpcy5pbW1lZGlhdGVWYWx1ZTw9dGhpcy5taW4sZXhwYW5kOnRoaXMuZXhwYW5kLGRyYWdnaW5nOnRoaXMuZHJhZ2dpbmcsdHJhbnNpdGluZzp0aGlzLnRyYW5zaXRpbmcsZWRpdGFibGU6dGhpcy5lZGl0YWJsZX0pfSxfYWxsb3dCYXJFdmVudDpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5pZ25vcmVCYXJUb3VjaHx8ZS5kZXRhaWwuc291cmNlRXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50fSxnZXQgX2lzUlRMKCl7cmV0dXJuIHRoaXMuX19pc1JUTD09PXZvaWQgMCYmKHRoaXMuX19pc1JUTD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5kaXJlY3Rpb249PT0icnRsIiksdGhpcy5fX2lzUlRMfSxfbGVmdEtleTpmdW5jdGlvbihlKXt0aGlzLl9pc1JUTD90aGlzLl9pbmNyZW1lbnRLZXkoZSk6dGhpcy5fZGVjcmVtZW50S2V5KGUpfSxfcmlnaHRLZXk6ZnVuY3Rpb24oZSl7dGhpcy5faXNSVEw/dGhpcy5fZGVjcmVtZW50S2V5KGUpOnRoaXMuX2luY3JlbWVudEtleShlKX0sX2luY3JlbWVudEtleTpmdW5jdGlvbihlKXt0aGlzLmRpc2FibGVkfHwoZS5kZXRhaWwua2V5PT09ImVuZCI/dGhpcy52YWx1ZT10aGlzLm1heDp0aGlzLmluY3JlbWVudCgpLHRoaXMuZmlyZSgiY2hhbmdlIiksZS5wcmV2ZW50RGVmYXVsdCgpKX0sX2RlY3JlbWVudEtleTpmdW5jdGlvbihlKXt0aGlzLmRpc2FibGVkfHwoZS5kZXRhaWwua2V5PT09ImhvbWUiP3RoaXMudmFsdWU9dGhpcy5taW46dGhpcy5kZWNyZW1lbnQoKSx0aGlzLmZpcmUoImNoYW5nZSIpLGUucHJldmVudERlZmF1bHQoKSl9LF9jaGFuZ2VWYWx1ZTpmdW5jdGlvbihlKXt0aGlzLnZhbHVlPWUudGFyZ2V0LnZhbHVlLHRoaXMuZmlyZSgiY2hhbmdlIix7Y29tcG9zZWQ6ITB9KX0sX2lucHV0S2V5RG93bjpmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfSxfY3JlYXRlUmlwcGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JpcHBsZUNvbnRhaW5lcj10aGlzLiQuc2xpZGVyS25vYixmRS5fY3JlYXRlUmlwcGxlLmNhbGwodGhpcyl9LF9mb2N1c2VkQ2hhbmdlZDpmdW5jdGlvbihlKXtlJiZ0aGlzLmVuc3VyZVJpcHBsZSgpLHRoaXMuaGFzUmlwcGxlKCkmJihlP3RoaXMuX3JpcHBsZS5zdHlsZS5kaXNwbGF5PSIiOnRoaXMuX3JpcHBsZS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLl9yaXBwbGUuaG9sZERvd249ZSl9fSk7dmFyIEVXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7RVcuc2V0QXR0cmlidXRlKCJzdHlsZSIsImRpc3BsYXk6IG5vbmU7Iik7RVcuaW5uZXJIVE1MPWA8ZG9tLW1vZHVsZSBpZD0icGFwZXItc3Bpbm5lci1zdHlsZXMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLyoKICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgICAvKiBTVFlMRVMgRk9SIFRIRSBTUElOTkVSICovCiAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICAgIC8qCiAgICAgICAqIENvbnN0YW50czoKICAgICAgICogICAgICBBUkNTSVpFICAgICA9IDI3MCBkZWdyZWVzIChhbW91bnQgb2YgY2lyY2xlIHRoZSBhcmMgdGFrZXMgdXApCiAgICAgICAqICAgICAgQVJDVElNRSAgICAgPSAxMzMzbXMgKHRpbWUgaXQgdGFrZXMgdG8gZXhwYW5kIGFuZCBjb250cmFjdCBhcmMpCiAgICAgICAqICAgICAgQVJDU1RBUlRST1QgPSAyMTYgZGVncmVlcyAoaG93IG11Y2ggdGhlIHN0YXJ0IGxvY2F0aW9uIG9mIHRoZSBhcmMKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCByb3RhdGUgZWFjaCB0aW1lLCAyMTYgZ2l2ZXMgdXMgYQogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSBwb2ludGVkIHN0YXIgc2hhcGUgKGl0J3MgMzYwLzUgKiAzKS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBhIDcgcG9pbnRlZCBzdGFyLCB3ZSBtaWdodCBkbwogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzYwLzcgKiAzID0gMTU0LjI4NikKICAgICAgICogICAgICBTSFJJTktfVElNRSA9IDQwMG1zCiAgICAgICAqLwoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwoKICAgICAgICAvKiAzNjAgKiBBUkNUSU1FIC8gKEFSQ1NUQVJUUk9UICsgKDM2MC1BUkNTSVpFKSkgKi8KICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29udGFpbmVyLXJvdGF0aW9uLWR1cmF0aW9uOiAxNTY4bXM7CgogICAgICAgIC8qIEFSQ1RJTUUgKi8KICAgICAgICAtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uOiAxMzMzbXM7CgogICAgICAgIC8qIDQgKiBBUkNUSU1FICovCiAgICAgICAgLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb246IDUzMzJtczsKCiAgICAgICAgLyogU0hSSU5LX1RJTUUgKi8KICAgICAgICAtLXBhcGVyLXNwaW5uZXItY29vbGRvd24tZHVyYXRpb246IDQwMG1zOwogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwoKICAgICAgICAvKiBUaGUgc3Bpbm5lciBkb2VzIG5vdCBoYXZlIGFueSBjb250ZW50cyB0aGF0IHdvdWxkIGhhdmUgdG8gYmUKICAgICAgICAgKiBmbGlwcGVkIGlmIHRoZSBkaXJlY3Rpb24gY2hhbmdlcy4gQWx3YXlzIHVzZSBsdHIgc28gdGhhdCB0aGUKICAgICAgICAgKiBzdHlsZSB3b3JrcyBvdXQgY29ycmVjdGx5IGluIGJvdGggY2FzZXMuICovCiAgICAgICAgZGlyZWN0aW9uOiBsdHI7CiAgICAgIH0KCiAgICAgICNzcGlubmVyQ29udGFpbmVyLmFjdGl2ZSB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGNvbnRhaW5lci1yb3RhdGUgewogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBjb250YWluZXItcm90YXRlIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZykgfQogICAgICB9CgogICAgICAuc3Bpbm5lci1sYXllciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItY29sb3IsIHZhcigtLWdvb2dsZS1ibHVlLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMS1jb2xvciwgdmFyKC0tZ29vZ2xlLWJsdWUtNTAwKSk7CiAgICAgIH0KCiAgICAgIC5sYXllci0yIHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItc3Bpbm5lci1sYXllci0yLWNvbG9yLCB2YXIoLS1nb29nbGUtcmVkLTUwMCkpOwogICAgICB9CgogICAgICAubGF5ZXItMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXNwaW5uZXItbGF5ZXItMy1jb2xvciwgdmFyKC0tZ29vZ2xlLXllbGxvdy01MDApKTsKICAgICAgfQoKICAgICAgLmxheWVyLTQgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1zcGlubmVyLWxheWVyLTQtY29sb3IsIHZhcigtLWdvb2dsZS1ncmVlbi01MDApKTsKICAgICAgfQoKICAgICAgLyoqCiAgICAgICAqIElNUE9SVEFOVCBOT1RFIEFCT1VUIENTUyBBTklNQVRJT04gUFJPUEVSVElFUyAoa2VhbnVsZWUpOgogICAgICAgKgogICAgICAgKiBpT1MgU2FmYXJpICh0ZXN0ZWQgb24gaU9TIDguMSkgZG9lcyBub3QgaGFuZGxlIGFuaW1hdGlvbi1kZWxheSB2ZXJ5IHdlbGwgLSBpdCBkb2Vzbid0CiAgICAgICAqIGd1YXJhbnRlZSB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBzdGFydCBfZXhhY3RseV8gYWZ0ZXIgdGhhdCB2YWx1ZS4gU28gd2UgYXZvaWQgdXNpbmcKICAgICAgICogYW5pbWF0aW9uLWRlbGF5IGFuZCBpbnN0ZWFkIHNldCBjdXN0b20ga2V5ZnJhbWVzIGZvciBlYWNoIGNvbG9yIChhcyBsYXllci0ydW5kYW50IGFzIGl0CiAgICAgICAqIHNlZW1zKS4KICAgICAgICovCiAgICAgIC5hY3RpdmUgLnNwaW5uZXItbGF5ZXIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItc3Bpbm5lci1mdWxsLWN5Y2xlLWR1cmF0aW9uKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBmaWxsLXVuZmlsbC1yb3RhdGU7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWZ1bGwtY3ljbGUtZHVyYXRpb24pOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTEgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMS1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0xLWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTIgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMi1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0yLWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTMgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItMy1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci0zLWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICAuYWN0aXZlIC5zcGlubmVyLWxheWVyLmxheWVyLTQgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZpbGwtdW5maWxsLXJvdGF0ZSwgbGF5ZXItNC1mYWRlLWluLW91dDsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmlsbC11bmZpbGwtcm90YXRlLCBsYXllci00LWZhZGUtaW4tb3V0OwogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHsKICAgICAgICAxMi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTM1ZGVnKSB9IC8qIDAuNSAqIEFSQ1NJWkUgKi8KICAgICAgICAyNSUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKSB9IC8qIDEgICAqIEFSQ1NJWkUgKi8KICAgICAgICAzNy41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKSB9IC8qIDEuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA1MCUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNTQwZGVnKSB9IC8qIDIgICAqIEFSQ1NJWkUgKi8KICAgICAgICA2Mi41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNjc1ZGVnKSB9IC8qIDIuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA3NSUgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKSB9IC8qIDMgICAqIEFSQ1NJWkUgKi8KICAgICAgICA4Ny41JSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoOTQ1ZGVnKSB9IC8qIDMuNSAqIEFSQ1NJWkUgKi8KICAgICAgICB0byAgICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMTA4MGRlZykgfSAvKiA0ICAgKiBBUkNTSVpFICovCiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmlsbC11bmZpbGwtcm90YXRlIHsKICAgICAgICAxMi41JSB7IHRyYW5zZm9ybTogcm90YXRlKDEzNWRlZykgfSAvKiAwLjUgKiBBUkNTSVpFICovCiAgICAgICAgMjUlICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpIH0gLyogMSAgICogQVJDU0laRSAqLwogICAgICAgIDM3LjUlIHsgdHJhbnNmb3JtOiByb3RhdGUoNDA1ZGVnKSB9IC8qIDEuNSAqIEFSQ1NJWkUgKi8KICAgICAgICA1MCUgICB7IHRyYW5zZm9ybTogcm90YXRlKDU0MGRlZykgfSAvKiAyICAgKiBBUkNTSVpFICovCiAgICAgICAgNjIuNSUgeyB0cmFuc2Zvcm06IHJvdGF0ZSg2NzVkZWcpIH0gLyogMi41ICogQVJDU0laRSAqLwogICAgICAgIDc1JSAgIHsgdHJhbnNmb3JtOiByb3RhdGUoODEwZGVnKSB9IC8qIDMgICAqIEFSQ1NJWkUgKi8KICAgICAgICA4Ny41JSB7IHRyYW5zZm9ybTogcm90YXRlKDk0NWRlZykgfSAvKiAzLjUgKiBBUkNTSVpFICovCiAgICAgICAgdG8gICAgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMDgwZGVnKSB9IC8qIDQgICAqIEFSQ1NJWkUgKi8KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTEtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgMjUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgMjYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgODklIHsgb3BhY2l0eTogMCB9CiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAxIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci0xLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDI2JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDg5JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMSB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsYXllci0yLWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDE1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDI1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDUxJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgbGF5ZXItMi1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAxNSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICAyNSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA1MSUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBALXdlYmtpdC1rZXlmcmFtZXMgbGF5ZXItMy1mYWRlLWluLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA0MCUgeyBvcGFjaXR5OiAwIH0KICAgICAgICA1MCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA3NSUgeyBvcGFjaXR5OiAxIH0KICAgICAgICA3NiUgeyBvcGFjaXR5OiAwIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxheWVyLTMtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgNzYlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQC13ZWJraXQta2V5ZnJhbWVzIGxheWVyLTQtZmFkZS1pbi1vdXQgewogICAgICAgIDAlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNjUlIHsgb3BhY2l0eTogMCB9CiAgICAgICAgNzUlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgOTAlIHsgb3BhY2l0eTogMSB9CiAgICAgICAgdG8geyBvcGFjaXR5OiAwIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBsYXllci00LWZhZGUtaW4tb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDY1JSB7IG9wYWNpdHk6IDAgfQogICAgICAgIDc1JSB7IG9wYWNpdHk6IDEgfQogICAgICAgIDkwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlciB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKioKICAgICAgICogUGF0Y2ggdGhlIGdhcCB0aGF0IGFwcGVhciBiZXR3ZWVuIHRoZSB0d28gYWRqYWNlbnQgZGl2LmNpcmNsZS1jbGlwcGVyIHdoaWxlIHRoZQogICAgICAgKiBzcGlubmVyIGlzIHJvdGF0aW5nIChhcHBlYXJzIG9uIENocm9tZSA1MCwgU2FmYXJpIDkuMS4xLCBhbmQgRWRnZSkuCiAgICAgICAqLwogICAgICAuc3Bpbm5lci1sYXllcjo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIGxlZnQ6IDQ1JTsKICAgICAgICB3aWR0aDogMTAlOwogICAgICAgIGJvcmRlci10b3Atc3R5bGU6IHNvbGlkOwogICAgICB9CgogICAgICAuc3Bpbm5lci1sYXllcjo6YWZ0ZXIsCiAgICAgIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm9yZGVyLXdpZHRoOiB2YXIoLS1wYXBlci1zcGlubmVyLXN0cm9rZS13aWR0aCwgM3B4KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5jaXJjbGUtY2xpcHBlciAuY2lyY2xlIHsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDIwMCU7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuY2lyY2xlLWNsaXBwZXIubGVmdCAuY2lyY2xlIHsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEyOWRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTI5ZGVnKTsKICAgICAgfQoKICAgICAgLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUgewogICAgICAgIGxlZnQ6IC0xMDAlOwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyOWRlZyk7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmdhcC1wYXRjaDo6YWZ0ZXIsCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyIC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci1zcGlubmVyLWV4cGFuZC1jb250cmFjdC1kdXJhdGlvbik7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXNwaW5uZXItZXhwYW5kLWNvbnRyYWN0LWR1cmF0aW9uKTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLmxlZnQgLmNpcmNsZSB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogbGVmdC1zcGluOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBsZWZ0LXNwaW47CiAgICAgIH0KCiAgICAgIC5hY3RpdmUgLmNpcmNsZS1jbGlwcGVyLnJpZ2h0IC5jaXJjbGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IHJpZ2h0LXNwaW47CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBsZWZ0LXNwaW4gewogICAgICAgIDAlIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC01ZGVnKSB9CiAgICAgICAgdG8geyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDEzMGRlZykgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGxlZnQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxMzBkZWcpIH0KICAgICAgICA1MCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyByaWdodC1zcGluIHsKICAgICAgICAwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICAgIDUwJSB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgcmlnaHQtc3BpbiB7CiAgICAgICAgMCUgeyB0cmFuc2Zvcm06IHJvdGF0ZSgtMTMwZGVnKSB9CiAgICAgICAgNTAlIHsgdHJhbnNmb3JtOiByb3RhdGUoNWRlZykgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoLTEzMGRlZykgfQogICAgICB9CgogICAgICAjc3Bpbm5lckNvbnRhaW5lci5jb29sZG93biB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IGNvbnRhaW5lci1yb3RhdGUgdmFyKC0tcGFwZXItc3Bpbm5lci1jb250YWluZXItcm90YXRpb24tZHVyYXRpb24pIGxpbmVhciBpbmZpbml0ZSwgZmFkZS1vdXQgdmFyKC0tcGFwZXItc3Bpbm5lci1jb29sZG93bi1kdXJhdGlvbikgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpOwogICAgICAgIGFuaW1hdGlvbjogY29udGFpbmVyLXJvdGF0ZSB2YXIoLS1wYXBlci1zcGlubmVyLWNvbnRhaW5lci1yb3RhdGlvbi1kdXJhdGlvbikgbGluZWFyIGluZmluaXRlLCBmYWRlLW91dCB2YXIoLS1wYXBlci1zcGlubmVyLWNvb2xkb3duLWR1cmF0aW9uKSBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgICAgMCUgeyBvcGFjaXR5OiAxIH0KICAgICAgICB0byB7IG9wYWNpdHk6IDAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGZhZGUtb3V0IHsKICAgICAgICAwJSB7IG9wYWNpdHk6IDEgfQogICAgICAgIHRvIHsgb3BhY2l0eTogMCB9CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChFVy5jb250ZW50KTt2YXIgTjk9e3Byb3BlcnRpZXM6e2FjdGl2ZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX19hY3RpdmVDaGFuZ2VkIn0sYWx0Ont0eXBlOlN0cmluZyx2YWx1ZToibG9hZGluZyIsb2JzZXJ2ZXI6Il9fYWx0Q2hhbmdlZCJ9LF9fY29vbGluZ0Rvd246e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LF9fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXM6ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZXx8dD8iYWN0aXZlIjoiIix0PyJjb29sZG93biI6IiJdLmpvaW4oIiAiKX0sX19hY3RpdmVDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7dGhpcy5fX3NldEFyaWFIaWRkZW4oIWUpLHRoaXMuX19jb29saW5nRG93bj0hZSYmdH0sX19hbHRDaGFuZ2VkOmZ1bmN0aW9uKGUpe2U9PT0ibG9hZGluZyI/dGhpcy5hbHQ9dGhpcy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8ZToodGhpcy5fX3NldEFyaWFIaWRkZW4oZT09PSIiKSx0aGlzLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsZSkpfSxfX3NldEFyaWFIaWRkZW46ZnVuY3Rpb24oZSl7dmFyIHQ9ImFyaWEtaGlkZGVuIjtlP3RoaXMuc2V0QXR0cmlidXRlKHQsInRydWUiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSh0KX0sX19yZXNldDpmdW5jdGlvbigpe3RoaXMuYWN0aXZlPSExLHRoaXMuX19jb29saW5nRG93bj0hMX19O3ZhciBQMHQ9UWAKICA8c3R5bGUgaW5jbHVkZT0icGFwZXItc3Bpbm5lci1zdHlsZXMiPjwvc3R5bGU+CgogIDxkaXYgaWQ9InNwaW5uZXJDb250YWluZXIiIGNsYXNzLW5hbWU9IltbX19jb21wdXRlQ29udGFpbmVyQ2xhc3NlcyhhY3RpdmUsIF9fY29vbGluZ0Rvd24pXV0iIG9uLWFuaW1hdGlvbmVuZD0iX19yZXNldCIgb24td2Via2l0LWFuaW1hdGlvbi1lbmQ9Il9fcmVzZXQiPgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci0xIj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIgbGF5ZXItMiI+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIGxlZnQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciByaWdodCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJzcGlubmVyLWxheWVyIGxheWVyLTMiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0ic3Bpbm5lci1sYXllciBsYXllci00Ij4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgbGVmdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZS1jbGlwcGVyIHJpZ2h0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgO1AwdC5zZXRBdHRyaWJ1dGUoInN0cmlwLXdoaXRlc3BhY2UiLCIiKTtZdCh7X3RlbXBsYXRlOlAwdCxpczoicGFwZXItc3Bpbm5lciIsYmVoYXZpb3JzOltOOV19KTt2YXIgSTB0PVFgCiAgPHN0eWxlIGluY2x1ZGU9InBhcGVyLXNwaW5uZXItc3R5bGVzIj48L3N0eWxlPgoKICA8ZGl2IGlkPSJzcGlubmVyQ29udGFpbmVyIiBjbGFzcy1uYW1lPSJbW19fY29tcHV0ZUNvbnRhaW5lckNsYXNzZXMoYWN0aXZlLCBfX2Nvb2xpbmdEb3duKV1dIiBvbi1hbmltYXRpb25lbmQ9Il9fcmVzZXQiIG9uLXdlYmtpdC1hbmltYXRpb24tZW5kPSJfX3Jlc2V0Ij4KICAgIDxkaXYgY2xhc3M9InNwaW5uZXItbGF5ZXIiPgogICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUtY2xpcHBlciBsZWZ0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjaXJjbGUiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2lyY2xlLWNsaXBwZXIgcmlnaHQiPgogICAgICAgIDxkaXYgY2xhc3M9ImNpcmNsZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7STB0LnNldEF0dHJpYnV0ZSgic3RyaXAtd2hpdGVzcGFjZSIsIiIpO1l0KHtfdGVtcGxhdGU6STB0LGlzOiJwYXBlci1zcGlubmVyLWxpdGUiLGJlaGF2aW9yczpbTjldfSk7dmFyIFViZT1RYDxpcm9uLWljb25zZXQtc3ZnIG5hbWU9InBhcGVyLXRhYnMiIHNpemU9IjI0Ij4KPHN2Zz48ZGVmcz4KPGcgaWQ9ImNoZXZyb24tbGVmdCI+PHBhdGggZD0iTTE1LjQxIDcuNDFMMTQgNmwtNiA2IDYgNiAxLjQxLTEuNDFMMTAuODMgMTJ6Ij48L3BhdGg+PC9nPgo8ZyBpZD0iY2hldnJvbi1yaWdodCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiI+PC9wYXRoPjwvZz4KPC9kZWZzPjwvc3ZnPgo8L2lyb24taWNvbnNldC1zdmc+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFViZS5jb250ZW50KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaW5saW5lOwogICAgICAgIEBhcHBseSAtLWxheW91dC1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1qdXN0aWZpZWQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYjsKICAgICAgfQoKICAgICAgOmhvc3QoOmZvY3VzKSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2xpbmtdKSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLnRhYi1jb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzIGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlci1jZW50ZXI7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWItY29udGVudDsKICAgICAgfQoKICAgICAgOmhvc3QoOm5vdCguaXJvbi1zZWxlY3RlZCkpID4gLnRhYi1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAwLjg7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50LXVuc2VsZWN0ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgLnRhYi1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRhYi1jb250ZW50LWZvY3VzZWQ7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJpcHBsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRhYi1pbmssIHZhcigtLXBhcGVyLXllbGxvdy1hMTAwKSk7CiAgICAgIH0KCiAgICAgIC50YWItY29udGVudCA+IDo6c2xvdHRlZChhKSB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKCiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgPHNsb3Q+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXRhYiIsYmVoYXZpb3JzOltEaSxTaCxzdV0scHJvcGVydGllczp7bGluazp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWIifSxsaXN0ZW5lcnM6e2Rvd246Il91cGRhdGVOb2luayIsdGFwOiJfb25UYXAifSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZU5vaW5rKCl9LGdldCBfcGFyZW50Tm9pbmsoKXt2YXIgZT16dCh0aGlzKS5wYXJlbnROb2RlO3JldHVybiEhZSYmISFlLm5vaW5rfSxfdXBkYXRlTm9pbms6ZnVuY3Rpb24oKXt0aGlzLm5vaW5rPSEhdGhpcy5ub2lua3x8ISF0aGlzLl9wYXJlbnROb2lua30sX29uVGFwOmZ1bmN0aW9uKGUpe2lmKHRoaXMubGluayl7dmFyIHQ9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCJhIik7aWYoIXR8fGUudGFyZ2V0PT09dClyZXR1cm47dC5jbGljaygpfX19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQ7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKCiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCiAgICAgICAgLyogTk9URTogQm90aCB2YWx1ZXMgYXJlIG5lZWRlZCwgc2luY2Ugc29tZSBwaG9uZXMgcmVxdWlyZSB0aGUgdmFsdWUgdG8gYmUgXGB0cmFuc3BhcmVudFxgLiAqLwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzOwogICAgICB9CgogICAgICA6aG9zdCg6ZGlyKHJ0bCkpIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbC1yZXZlcnNlOwogICAgICB9CgogICAgICAjdGFic0NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLWNvbnRhaW5lcjsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgLW1vei1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIC1tcy1mbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdGFicy1jb250ZW50OwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudDpub3QoLnNjcm9sbGFibGUpLAogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgfQoKICAgICAgI3RhYnNDb250ZW50LnNjcm9sbGFibGUuZml0LWNvbnRhaW5lciB7CiAgICAgICAgbWluLXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjdGFic0NvbnRlbnQuc2Nyb2xsYWJsZS5maXQtY29udGFpbmVyID4gOjpzbG90dGVkKCopIHsKICAgICAgICAvKiBJRSAtIHByZXZlbnQgdGFicyBmcm9tIGNvbXByZXNzaW5nIHdoZW4gdGhleSBzaG91bGQgc2Nyb2xsLiAqLwogICAgICAgIC1tcy1mbGV4OiAxIDAgYXV0bzsKICAgICAgICAtd2Via2l0LWZsZXg6IDEgMCBhdXRvOwogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICB9CgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAubm90LXZpc2libGUgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgI3NlbGVjdGlvbkJhciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yLCB2YXIoLS1wYXBlci15ZWxsb3ctYTEwMCkpOwogICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOwogICAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10YWJzLXNlbGVjdGlvbi1iYXI7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuYWxpZ24tYm90dG9tIHsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICB9CgogICAgICAjc2VsZWN0aW9uQmFyLmV4cGFuZCB7CiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4xNXM7CiAgICAgICAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGN1YmljLWJlemllcigwLjQsIDAuMCwgMSwgMSk7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25CYXIuY29udHJhY3QgewogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMThzOwogICAgICAgIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgICN0YWJzQ29udGVudCA+IDo6c2xvdHRlZCg6bm90KCNzZWxlY3Rpb25CYXIpKSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tbGVmdCIgY2xhc3MkPSJbW19jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3MoX2xlZnRIaWRkZW4sIHNjcm9sbGFibGUsIGhpZGVTY3JvbGxCdXR0b25zKV1dIiBvbi11cD0iX29uU2Nyb2xsQnV0dG9uVXAiIG9uLWRvd249Il9vbkxlZnRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CgogICAgPGRpdiBpZD0idGFic0NvbnRhaW5lciIgb24tdHJhY2s9Il9zY3JvbGwiIG9uLWRvd249Il9kb3duIj4KICAgICAgPGRpdiBpZD0idGFic0NvbnRlbnQiIGNsYXNzJD0iW1tfY29tcHV0ZVRhYnNDb250ZW50Q2xhc3Moc2Nyb2xsYWJsZSwgZml0Q29udGFpbmVyKV1dIj4KICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb25CYXIiIGNsYXNzJD0iW1tfY29tcHV0ZVNlbGVjdGlvbkJhckNsYXNzKG5vQmFyLCBhbGlnbkJvdHRvbSldXSIgb24tdHJhbnNpdGlvbmVuZD0iX29uQmFyVHJhbnNpdGlvbkVuZCI+PC9kaXY+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxwYXBlci1pY29uLWJ1dHRvbiBpY29uPSJwYXBlci10YWJzOmNoZXZyb24tcmlnaHQiIGNsYXNzJD0iW1tfY29tcHV0ZVNjcm9sbEJ1dHRvbkNsYXNzKF9yaWdodEhpZGRlbiwgc2Nyb2xsYWJsZSwgaGlkZVNjcm9sbEJ1dHRvbnMpXV0iIG9uLXVwPSJfb25TY3JvbGxCdXR0b25VcCIgb24tZG93bj0iX29uUmlnaHRTY3JvbGxCdXR0b25Eb3duIiB0YWJpbmRleD0iLTEiPjwvcGFwZXItaWNvbi1idXR0b24+CmAsaXM6InBhcGVyLXRhYnMiLGJlaGF2aW9yczpbSnMsUjldLHByb3BlcnRpZXM6e25vaW5rOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITEsb2JzZXJ2ZXI6Il9ub2lua0NoYW5nZWQifSxub0Jhcjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxub1NsaWRlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNjcm9sbGFibGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sZml0Q29udGFpbmVyOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGRpc2FibGVEcmFnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGhpZGVTY3JvbGxCdXR0b25zOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGFsaWduQm90dG9tOnt0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LHNlbGVjdGFibGU6e3R5cGU6U3RyaW5nLHZhbHVlOiJwYXBlci10YWIifSxhdXRvc2VsZWN0Ont0eXBlOkJvb2xlYW4sdmFsdWU6ITF9LGF1dG9zZWxlY3REZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX3N0ZXA6e3R5cGU6TnVtYmVyLHZhbHVlOjEwfSxfaG9sZERlbGF5Ont0eXBlOk51bWJlcix2YWx1ZToxfSxfbGVmdEhpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfcmlnaHRIaWRkZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3ByZXZpb3VzVGFiOnt0eXBlOk9iamVjdH19LGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0YWJsaXN0In0sbGlzdGVuZXJzOnsiaXJvbi1yZXNpemUiOiJfb25UYWJTaXppbmdDaGFuZ2VkIiwiaXJvbi1pdGVtcy1jaGFuZ2VkIjoiX29uVGFiU2l6aW5nQ2hhbmdlZCIsImlyb24tc2VsZWN0IjoiX29uSXJvblNlbGVjdCIsImlyb24tZGVzZWxlY3QiOiJfb25Jcm9uRGVzZWxlY3QifSxrZXlCaW5kaW5nczp7ImxlZnQ6a2V5dXAgcmlnaHQ6a2V5dXAiOiJfb25BcnJvd0tleXVwIn0sY3JlYXRlZDpmdW5jdGlvbigpe3RoaXMuX2hvbGRKb2I9bnVsbCx0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDAsdGhpcy5fYmluZERlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcj10aGlzLl9kZWxheWVkQWN0aXZhdGlvbkhhbmRsZXIuYmluZCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX29uQmx1ckNhcHR1cmUuYmluZCh0aGlzKSwhMCl9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5zZXRTY3JvbGxEaXJlY3Rpb24oInkiLHRoaXMuJC50YWJzQ29udGFpbmVyKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSxfbm9pbmtDaGFuZ2VkOmZ1bmN0aW9uKGUpe3ZhciB0PXp0KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoInBhcGVyLXRhYiIpO3QuZm9yRWFjaChlP3RoaXMuX3NldE5vaW5rQXR0cmlidXRlOnRoaXMuX3JlbW92ZU5vaW5rQXR0cmlidXRlKX0sX3NldE5vaW5rQXR0cmlidXRlOmZ1bmN0aW9uKGUpe2Uuc2V0QXR0cmlidXRlKCJub2luayIsIiIpfSxfcmVtb3ZlTm9pbmtBdHRyaWJ1dGU6ZnVuY3Rpb24oZSl7ZS5yZW1vdmVBdHRyaWJ1dGUoIm5vaW5rIil9LF9jb21wdXRlU2Nyb2xsQnV0dG9uQ2xhc3M6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiF0fHxyPyJoaWRkZW4iOmU/Im5vdC12aXNpYmxlIjoiIn0sX2NvbXB1dGVUYWJzQ29udGVudENsYXNzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/InNjcm9sbGFibGUiKyh0PyIgZml0LWNvbnRhaW5lciI6IiIpOiIgZml0LWNvbnRhaW5lciJ9LF9jb21wdXRlU2VsZWN0aW9uQmFyQ2xhc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT8iaGlkZGVuIjp0PyJhbGlnbi1ib3R0b20iOiIifSxfb25UYWJTaXppbmdDaGFuZ2VkOmZ1bmN0aW9uKCl7dGhpcy5kZWJvdW5jZSgiX29uVGFiU2l6aW5nQ2hhbmdlZCIsZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGwoKSx0aGlzLl90YWJDaGFuZ2VkKHRoaXMuc2VsZWN0ZWRJdGVtKX0sMTApfSxfb25Jcm9uU2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuX3RhYkNoYW5nZWQoZS5kZXRhaWwuaXRlbSx0aGlzLl9wcmV2aW91c1RhYiksdGhpcy5fcHJldmlvdXNUYWI9ZS5kZXRhaWwuaXRlbSx0aGlzLmNhbmNlbERlYm91bmNlcigidGFiLWNoYW5nZWQiKX0sX29uSXJvbkRlc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuZGVib3VuY2UoInRhYi1jaGFuZ2VkIixmdW5jdGlvbigpe3RoaXMuX3RhYkNoYW5nZWQobnVsbCx0aGlzLl9wcmV2aW91c1RhYiksdGhpcy5fcHJldmlvdXNUYWI9bnVsbH0sMSl9LF9hY3RpdmF0ZUhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpLF9fLl9hY3RpdmF0ZUhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfc2NoZWR1bGVBY3RpdmF0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtPWUsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXRoaXMuYXN5bmModGhpcy5fYmluZERlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcix0KX0sX2RlbGF5ZWRBY3RpdmF0aW9uSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbTt0aGlzLl9wZW5kaW5nQWN0aXZhdGlvbkl0ZW09dm9pZCAwLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uVGltZW91dD12b2lkIDAsZS5maXJlKHRoaXMuYWN0aXZhdGVFdmVudCxudWxsLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KX0sX2NhbmNlbFBlbmRpbmdBY3RpdmF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0IT09dm9pZCAwJiYodGhpcy5jYW5jZWxBc3luYyh0aGlzLl9wZW5kaW5nQWN0aXZhdGlvblRpbWVvdXQpLHRoaXMuX3BlbmRpbmdBY3RpdmF0aW9uSXRlbT12b2lkIDAsdGhpcy5fcGVuZGluZ0FjdGl2YXRpb25UaW1lb3V0PXZvaWQgMCl9LF9vbkFycm93S2V5dXA6ZnVuY3Rpb24oZSl7dGhpcy5hdXRvc2VsZWN0JiZ0aGlzLl9zY2hlZHVsZUFjdGl2YXRpb24odGhpcy5mb2N1c2VkSXRlbSx0aGlzLmF1dG9zZWxlY3REZWxheSl9LF9vbkJsdXJDYXB0dXJlOmZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09dGhpcy5fcGVuZGluZ0FjdGl2YXRpb25JdGVtJiZ0aGlzLl9jYW5jZWxQZW5kaW5nQWN0aXZhdGlvbigpfSxnZXQgX3RhYkNvbnRhaW5lclNjcm9sbFNpemUoKXtyZXR1cm4gTWF0aC5tYXgoMCx0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxXaWR0aC10aGlzLiQudGFic0NvbnRhaW5lci5vZmZzZXRXaWR0aCl9LF9zY3JvbGw6ZnVuY3Rpb24oZSx0KXtpZighIXRoaXMuc2Nyb2xsYWJsZSl7dmFyIHI9dCYmLXQuZGR4fHwwO3RoaXMuX2FmZmVjdFNjcm9sbChyKX19LF9kb3duOmZ1bmN0aW9uKGUpe3RoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0Rm9jdXNBc3luYyYmKHRoaXMuY2FuY2VsQXN5bmModGhpcy5fZGVmYXVsdEZvY3VzQXN5bmMpLHRoaXMuX2RlZmF1bHRGb2N1c0FzeW5jPW51bGwpfSwxKX0sX2FmZmVjdFNjcm9sbDpmdW5jdGlvbihlKXt0aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1lO3ZhciB0PXRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQ7dGhpcy5fbGVmdEhpZGRlbj10PT09MCx0aGlzLl9yaWdodEhpZGRlbj10PT09dGhpcy5fdGFiQ29udGFpbmVyU2Nyb2xsU2l6ZX0sX29uTGVmdFNjcm9sbEJ1dHRvbkRvd246ZnVuY3Rpb24oKXt0aGlzLl9zY3JvbGxUb0xlZnQoKSx0aGlzLl9ob2xkSm9iPXNldEludGVydmFsKHRoaXMuX3Njcm9sbFRvTGVmdC5iaW5kKHRoaXMpLHRoaXMuX2hvbGREZWxheSl9LF9vblJpZ2h0U2Nyb2xsQnV0dG9uRG93bjpmdW5jdGlvbigpe3RoaXMuX3Njcm9sbFRvUmlnaHQoKSx0aGlzLl9ob2xkSm9iPXNldEludGVydmFsKHRoaXMuX3Njcm9sbFRvUmlnaHQuYmluZCh0aGlzKSx0aGlzLl9ob2xkRGVsYXkpfSxfb25TY3JvbGxCdXR0b25VcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwodGhpcy5faG9sZEpvYiksdGhpcy5faG9sZEpvYj1udWxsfSxfc2Nyb2xsVG9MZWZ0OmZ1bmN0aW9uKCl7dGhpcy5fYWZmZWN0U2Nyb2xsKC10aGlzLl9zdGVwKX0sX3Njcm9sbFRvUmlnaHQ6ZnVuY3Rpb24oKXt0aGlzLl9hZmZlY3RTY3JvbGwodGhpcy5fc3RlcCl9LF90YWJDaGFuZ2VkOmZ1bmN0aW9uKGUsdCl7aWYoIWUpe3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKDAsMCk7cmV0dXJufXZhciByPXRoaXMuJC50YWJzQ29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIud2lkdGgsaT1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89aS5sZWZ0LXIubGVmdDtpZih0aGlzLl9wb3M9e3dpZHRoOnRoaXMuX2NhbGNQZXJjZW50KGkud2lkdGgsbiksbGVmdDp0aGlzLl9jYWxjUGVyY2VudChvLG4pfSx0aGlzLm5vU2xpZGV8fHQ9PW51bGwpe3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LnJlbW92ZSgiZXhwYW5kIiksdGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3QucmVtb3ZlKCJjb250cmFjdCIpLHRoaXMuX3Bvc2l0aW9uQmFyKHRoaXMuX3Bvcy53aWR0aCx0aGlzLl9wb3MubGVmdCk7cmV0dXJufXZhciBhPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz10aGlzLml0ZW1zLmluZGV4T2YodCksbD10aGlzLml0ZW1zLmluZGV4T2YoZSksYz01O3RoaXMuJC5zZWxlY3Rpb25CYXIuY2xhc3NMaXN0LmFkZCgiZXhwYW5kIik7dmFyIHU9czxsLGg9dGhpcy5faXNSVEw7aCYmKHU9IXUpLHU/dGhpcy5fcG9zaXRpb25CYXIodGhpcy5fY2FsY1BlcmNlbnQoaS5sZWZ0K2kud2lkdGgtYS5sZWZ0LG4pLWMsdGhpcy5fbGVmdCk6dGhpcy5fcG9zaXRpb25CYXIodGhpcy5fY2FsY1BlcmNlbnQoYS5sZWZ0K2Eud2lkdGgtaS5sZWZ0LG4pLWMsdGhpcy5fY2FsY1BlcmNlbnQobyxuKStjKSx0aGlzLnNjcm9sbGFibGUmJnRoaXMuX3Njcm9sbFRvU2VsZWN0ZWRJZk5lZWRlZChpLndpZHRoLG8pfSxfc2Nyb2xsVG9TZWxlY3RlZElmTmVlZGVkOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dC10aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0O3I8MD90aGlzLiQudGFic0NvbnRhaW5lci5zY3JvbGxMZWZ0Kz1yOihyKz1lLXRoaXMuJC50YWJzQ29udGFpbmVyLm9mZnNldFdpZHRoLHI+MCYmKHRoaXMuJC50YWJzQ29udGFpbmVyLnNjcm9sbExlZnQrPXIpKX0sX2NhbGNQZXJjZW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIDEwMCplL3R9LF9wb3NpdGlvbkJhcjpmdW5jdGlvbihlLHQpe2U9ZXx8MCx0PXR8fDAsdGhpcy5fd2lkdGg9ZSx0aGlzLl9sZWZ0PXQsdGhpcy50cmFuc2Zvcm0oInRyYW5zbGF0ZVgoIit0KyIlKSBzY2FsZVgoIitlLzEwMCsiKSIsdGhpcy4kLnNlbGVjdGlvbkJhcil9LF9vbkJhclRyYW5zaXRpb25FbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy4kLnNlbGVjdGlvbkJhci5jbGFzc0xpc3Q7dC5jb250YWlucygiZXhwYW5kIik/KHQucmVtb3ZlKCJleHBhbmQiKSx0LmFkZCgiY29udHJhY3QiKSx0aGlzLl9wb3NpdGlvbkJhcih0aGlzLl9wb3Mud2lkdGgsdGhpcy5fcG9zLmxlZnQpKTp0LmNvbnRhaW5zKCJjb250cmFjdCIpJiZ0LnJlbW92ZSgiY29udHJhY3QiKX19KTt2YXIgSng9bnVsbDtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9hc3QtYmFja2dyb3VuZC1jb2xvciwgIzMyMzIzMik7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvYXN0LWNvbG9yLCAjZjFmMWYxKTsKICAgICAgICBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIG1pbi13aWR0aDogMjg4cHg7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggNXB4IDAgcmdiYSgwLCAwLCAwLCAwLjI2KTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgbWFyZ2luOiAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjNzLCBvcGFjaXR5IDAuM3M7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MsIG9wYWNpdHkgMC4zczsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMHB4KTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwcHgpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLWZvbnQtY29tbW9uLWJhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KC5jYXBzdWxlKSB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMjRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmZpdC1ib3R0b20pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KC5wYXBlci10b2FzdC1vcGVuKSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuIGlkPSJsYWJlbCI+e3t0ZXh0fX08L3NwYW4+CiAgICA8c2xvdD48L3Nsb3Q+CmAsaXM6InBhcGVyLXRvYXN0IixiZWhhdmlvcnM6W0t4XSxwcm9wZXJ0aWVzOntmaXRJbnRvOnt0eXBlOk9iamVjdCx2YWx1ZTp3aW5kb3csb2JzZXJ2ZXI6Il9vbkZpdEludG9DaGFuZ2VkIn0saG9yaXpvbnRhbEFsaWduOnt0eXBlOlN0cmluZyx2YWx1ZToibGVmdCJ9LHZlcnRpY2FsQWxpZ246e3R5cGU6U3RyaW5nLHZhbHVlOiJib3R0b20ifSxkdXJhdGlvbjp7dHlwZTpOdW1iZXIsdmFsdWU6M2UzfSx0ZXh0Ont0eXBlOlN0cmluZyx2YWx1ZToiIn0sbm9DYW5jZWxPbk91dHNpZGVDbGljazp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfSxub0F1dG9Gb2N1czp7dHlwZTpCb29sZWFuLHZhbHVlOiEwfX0sbGlzdGVuZXJzOnt0cmFuc2l0aW9uZW5kOiJfX29uVHJhbnNpdGlvbkVuZCJ9LGdldCB2aXNpYmxlKCl7cmV0dXJuIERhLl93YXJuKCJgdmlzaWJsZWAgaXMgZGVwcmVjYXRlZCwgdXNlIGBvcGVuZWRgIGluc3RlYWQiKSx0aGlzLm9wZW5lZH0sZ2V0IF9jYW5BdXRvQ2xvc2UoKXtyZXR1cm4gdGhpcy5kdXJhdGlvbj4wJiZ0aGlzLmR1cmF0aW9uIT09MS8wfSxjcmVhdGVkOmZ1bmN0aW9uKCl7dGhpcy5fYXV0b0Nsb3NlPW51bGwsZWMucmVxdWVzdEF2YWlsYWJpbGl0eSgpfSxzaG93OmZ1bmN0aW9uKGUpe3R5cGVvZiBlPT0ic3RyaW5nIiYmKGU9e3RleHQ6ZX0pO2Zvcih2YXIgdCBpbiBlKXQuaW5kZXhPZigiXyIpPT09MD9EYS5fd2FybignVGhlIHByb3BlcnR5ICInK3QrJyIgaXMgcHJpdmF0ZSBhbmQgd2FzIG5vdCBzZXQuJyk6dCBpbiB0aGlzP3RoaXNbdF09ZVt0XTpEYS5fd2FybignVGhlIHByb3BlcnR5ICInK3QrJyIgaXMgbm90IHZhbGlkLicpO3RoaXMub3BlbigpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZSgpfSxfX29uVHJhbnNpdGlvbkVuZDpmdW5jdGlvbihlKXtlJiZlLnRhcmdldD09PXRoaXMmJmUucHJvcGVydHlOYW1lPT09Im9wYWNpdHkiJiYodGhpcy5vcGVuZWQ/dGhpcy5fZmluaXNoUmVuZGVyT3BlbmVkKCk6dGhpcy5fZmluaXNoUmVuZGVyQ2xvc2VkKCkpfSxfb3BlbmVkQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX2F1dG9DbG9zZSE9PW51bGwmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX2F1dG9DbG9zZSksdGhpcy5fYXV0b0Nsb3NlPW51bGwpLHRoaXMub3BlbmVkPyhKeCYmSnghPT10aGlzJiZKeC5jbG9zZSgpLEp4PXRoaXMsdGhpcy5maXJlKCJpcm9uLWFubm91bmNlIix7dGV4dDp0aGlzLnRleHR9KSx0aGlzLl9jYW5BdXRvQ2xvc2UmJih0aGlzLl9hdXRvQ2xvc2U9dGhpcy5hc3luYyh0aGlzLmNsb3NlLHRoaXMuZHVyYXRpb24pKSk6Sng9PT10aGlzJiYoSng9bnVsbCksUG0uX29wZW5lZENoYW5nZWQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfcmVuZGVyT3BlbmVkOmZ1bmN0aW9uKCl7dGhpcy5jbGFzc0xpc3QuYWRkKCJwYXBlci10b2FzdC1vcGVuIil9LF9yZW5kZXJDbG9zZWQ6ZnVuY3Rpb24oKXt0aGlzLmNsYXNzTGlzdC5yZW1vdmUoInBhcGVyLXRvYXN0LW9wZW4iKX0sX29uRml0SW50b0NoYW5nZWQ6ZnVuY3Rpb24oZSl7dGhpcy5wb3NpdGlvblRhcmdldD1lfX0pO3ZhciBMMHQ9UWAKCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWhvcml6b250YWw7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWNlbnRlcjsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmb2N1cykgewogICAgICAgIG91dGxpbmU6bm9uZTsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1iYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIGxpbmVhciAuMDhzOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhci1jb2xvciwgIzAwMDAwMCk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWJhcjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IC0zcHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCAwIHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSBsaW5lYXIgLjA4cywgYmFja2dyb3VuZC1jb2xvciBsaW5lYXIgLjA4czsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gbGluZWFyIC4wOHMsIGJhY2tncm91bmQtY29sb3IgbGluZWFyIC4wOHM7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLXVuY2hlY2tlZC1idXR0b24tY29sb3IsIHZhcigtLXBhcGVyLWdyZXktNTApKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi11bmNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbi5kcmFnZ2luZyB7CiAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjaGVja2VkXTpub3QoW2Rpc2FibGVkXSkpIC50b2dnbGUtYmFyIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJhci1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYmFyOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJhciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICAgICAgICBvcGFjaXR5OiAwLjEyOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF0pIC50b2dnbGUtYnV0dG9uIHsKICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDE2cHgsIDApOwogICAgICB9CgogICAgICA6aG9zdChbY2hlY2tlZF06bm90KFtkaXNhYmxlZF0pKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWJ1dHRvbi1jb2xvciwgdmFyKC0tcHJpbWFyeS1jb2xvcikpOwoKICAgICAgICBAYXBwbHkgLS1wYXBlci10b2dnbGUtYnV0dG9uLWNoZWNrZWQtYnV0dG9uOwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2JkYmRiZDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAudG9nZ2xlLWluayB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogLTE0cHg7CiAgICAgICAgbGVmdDogLTE0cHg7CiAgICAgICAgcmlnaHQ6IGF1dG87CiAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluay1jb2xvciwgdmFyKC0tcHJpbWFyeS10ZXh0LWNvbG9yKSk7CgogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvZ2dsZS1idXR0b24tdW5jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgOmhvc3QoW2NoZWNrZWRdKSAudG9nZ2xlLWluayB7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tY2hlY2tlZC1pbmstY29sb3IsIHZhcigtLXByaW1hcnktY29sb3IpKTsKCiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9nZ2xlLWJ1dHRvbi1jaGVja2VkLWluazsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIC8qIFRoZSB0b2dnbGUgYnV0dG9uIGhhcyBhbiBhYnNvbHV0ZSBwb3NpdGlvbiBvZiAtM3B4OyBUaGUgZXh0cmEgMXB4CiAgICAgICAgLyogYWNjb3VudHMgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIHNoYWRvdyBib3guICovCiAgICAgICAgbWFyZ2luOiA0cHggMXB4OwogICAgICB9CgogICAgICAudG9nZ2xlLWxhYmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWxhYmVsLXNwYWNpbmcsIDhweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24tbGFiZWwtY29sb3IsIHZhcigtLXByaW1hcnktdGV4dC1jb2xvcikpOwogICAgICB9CgogICAgICAvKiBpbnZhbGlkIHN0YXRlICovCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1iYXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1iYXItY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXRvZ2dsZS1idXR0b24taW52YWxpZC1idXR0b24tY29sb3IsIHZhcigtLWVycm9yLWNvbG9yKSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpbnZhbGlkXSkgLnRvZ2dsZS1pbmsgewogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b2dnbGUtYnV0dG9uLWludmFsaWQtaW5rLWNvbG9yLCB2YXIoLS1lcnJvci1jb2xvcikpOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJ0b2dnbGVCYXIiIGNsYXNzPSJ0b2dnbGUtYmFyIj48L2Rpdj4KICAgICAgPGRpdiBpZD0idG9nZ2xlQnV0dG9uIiBjbGFzcz0idG9nZ2xlLWJ1dHRvbiI+PC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPjxzbG90Pjwvc2xvdD48L2Rpdj4KCiAgYDtMMHQuc2V0QXR0cmlidXRlKCJzdHJpcC13aGl0ZXNwYWNlIiwiIik7WXQoe190ZW1wbGF0ZTpMMHQsaXM6InBhcGVyLXRvZ2dsZS1idXR0b24iLGJlaGF2aW9yczpbWHhdLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJidXR0b24iLCJhcmlhLXByZXNzZWQiOiJmYWxzZSIsdGFiaW5kZXg6MH0scHJvcGVydGllczp7fSxsaXN0ZW5lcnM6e3RyYWNrOiJfb250cmFjayJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7VG0odGhpcyxmdW5jdGlvbigpe2RfKHRoaXMsInBhbi15Iil9KX0sX29udHJhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZXRhaWw7dC5zdGF0ZT09PSJzdGFydCI/dGhpcy5fdHJhY2tTdGFydCh0KTp0LnN0YXRlPT09InRyYWNrIj90aGlzLl90cmFja01vdmUodCk6dC5zdGF0ZT09PSJlbmQiJiZ0aGlzLl90cmFja0VuZCh0KX0sX3RyYWNrU3RhcnQ6ZnVuY3Rpb24oZSl7dGhpcy5fd2lkdGg9dGhpcy4kLnRvZ2dsZUJhci5vZmZzZXRXaWR0aC8yLHRoaXMuX3RyYWNrQ2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy4kLnRvZ2dsZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJkcmFnZ2luZyIpfSxfdHJhY2tNb3ZlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZHg7dGhpcy5feD1NYXRoLm1pbih0aGlzLl93aWR0aCxNYXRoLm1heCgwLHRoaXMuX3RyYWNrQ2hlY2tlZD90aGlzLl93aWR0aCt0OnQpKSx0aGlzLnRyYW5zbGF0ZTNkKHRoaXMuX3grInB4IiwwLDAsdGhpcy4kLnRvZ2dsZUJ1dHRvbiksdGhpcy5fdXNlckFjdGl2YXRlKHRoaXMuX3g+dGhpcy5fd2lkdGgvMil9LF90cmFja0VuZDpmdW5jdGlvbihlKXt0aGlzLiQudG9nZ2xlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIiksdGhpcy50cmFuc2Zvcm0oIiIsdGhpcy4kLnRvZ2dsZUJ1dHRvbil9LF9jcmVhdGVSaXBwbGU6ZnVuY3Rpb24oKXt0aGlzLl9yaXBwbGVDb250YWluZXI9dGhpcy4kLnRvZ2dsZUJ1dHRvbjt2YXIgZT1zdS5fY3JlYXRlUmlwcGxlKCk7cmV0dXJuIGUuaWQ9ImluayIsZS5zZXRBdHRyaWJ1dGUoInJlY2VudGVycyIsIiIpLGUuY2xhc3NMaXN0LmFkZCgiY2lyY2xlIiwidG9nZ2xlLWluayIpLGV9fSk7WXQoe190ZW1wbGF0ZTpRYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0OiB2YXIoLS1wYXBlci10b29sYmFyLWhlaWdodCwgNjRweCk7CiAgICAgICAgLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0OiB2YXIoLS1wYXBlci10b29sYmFyLXNtLWhlaWdodCwgNTZweCk7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGhlaWdodDogdmFyKC0tY2FsY3VsYXRlZC1wYXBlci10b29sYmFyLWhlaWdodCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItdG9vbGJhci1iYWNrZ3JvdW5kLCB2YXIoLS1wcmltYXJ5LWNvbG9yKSk7CiAgICAgICAgY29sb3I6IHZhcigtLXBhcGVyLXRvb2xiYXItY29sb3IsIHZhcigtLWRhcmstdGhlbWUtdGV4dC1jb2xvcikpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5hbmltYXRlKSB7CiAgICAgICAgdHJhbnNpdGlvbjogdmFyKC0tcGFwZXItdG9vbGJhci10cmFuc2l0aW9uLCBoZWlnaHQgMC4xOHMgZWFzZS1pbik7CiAgICAgIH0KCiAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgewogICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KSAqIDIpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItbWVkaXVtOwogICAgICB9CgogICAgICA6aG9zdCgudGFsbCkgewogICAgICAgIGhlaWdodDogY2FsYyh2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItaGVpZ2h0KSAqIDMpOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItdGFsbDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1oZWlnaHQpOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtaG9yaXpvbnRhbDsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2xiYXItY29udGVudDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogVE9ETzogV2hlcmUgc2hvdWxkIG1lZGlhIHF1ZXJ5IGJyZWFrcG9pbnRzIGxpdmUgc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZWxlbWVudHM/CiAgICAgICAqLwoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7CiAgICAgICAgOmhvc3QgewogICAgICAgICAgaGVpZ2h0OiB2YXIoLS1jYWxjdWxhdGVkLXBhcGVyLXRvb2xiYXItc20taGVpZ2h0KTsKICAgICAgICB9CgogICAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgewogICAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpICogMik7CiAgICAgICAgfQoKICAgICAgICA6aG9zdCgudGFsbCkgewogICAgICAgICAgaGVpZ2h0OiBjYWxjKHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpICogMyk7CiAgICAgICAgfQoKICAgICAgICAudG9vbGJhci10b29scyB7CiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWNhbGN1bGF0ZWQtcGFwZXItdG9vbGJhci1zbS1oZWlnaHQpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgI3RvcEJhciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAvKiBtaWRkbGUgYmFyICovCiAgICAgICNtaWRkbGVCYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoLnRhbGwpICNtaWRkbGVCYXIsCiAgICAgIDpob3N0KC5tZWRpdW0tdGFsbCkgI21pZGRsZUJhciB7CiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpOwogICAgICB9CgogICAgICAvKiBib3R0b20gYmFyICovCiAgICAgICNib3R0b21CYXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgfQoKICAgICAgLyoKICAgICAgICogbWFrZSBlbGVtZW50cyAoZS5nLiBidXR0b25zKSByZXNwb25kIHRvIG1vdXNlL3RvdWNoIGV2ZW50cwogICAgICAgKgogICAgICAgKiBcYC50b29sYmFyLXRvb2xzXGAgZGlzYWJsZXMgdG91Y2ggZXZlbnRzIHNvIG11bHRpcGxlIHRvb2xiYXJzIGNhbiBzdGFjayBhbmQgbm90CiAgICAgICAqIGFic29yYiBldmVudHMuIEFsbCBjaGlsZHJlbiBtdXN0IGhhdmUgcG9pbnRlciBldmVudHMgcmUtZW5hYmxlZCB0byB3b3JrIGFzCiAgICAgICAqIGV4cGVjdGVkLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoKjpub3QoW2Rpc2FibGVkXSkpIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItZm9udC1jb21tb24tYmFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRvb2xzID4gOjpzbG90dGVkKC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiA1NnB4OwogICAgICB9CgogICAgICAudG9vbGJhci10b29scyA+IDo6c2xvdHRlZChwYXBlci1pY29uLWJ1dHRvbiArIC50aXRsZSkgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwOwogICAgICB9CgogICAgICAvKioKICAgICAgICogVGhlIC0tcGFwZXItdG9vbGJhci10aXRsZSBtaXhpbiBpcyBhcHBsaWVkIGhlcmUgaW5zdGVhZCBvZiBhYm92ZSB0bwogICAgICAgKiBmaXggdGhlIGlzc3VlIHdpdGggbWFyZ2luLWxlZnQgYmVpbmcgaWdub3JlZCBkdWUgdG8gY3NzIG9yZGVyaW5nLgogICAgICAgKi8KICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLnRpdGxlKSB7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbGJhci10aXRsZTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQocGFwZXItaWNvbi1idXR0b25baWNvbj1tZW51XSkgewogICAgICAgIG1hcmdpbi1yaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItdG9vbHMgPiA6OnNsb3R0ZWQoLmZpdCkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IGF1dG87CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IGF1dG87CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAvKiBUT0RPKG5vbXMpOiBVbnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIGZvciBjbGFzc2VzIHRoYXQgZG9uJ3QgdXNlCiAgICAgICAqIC9kZWVwLyBjcmVhdGUgb3VyIG93bi4KICAgICAgICovCiAgICAgIC5zdGFydC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1zdGFydC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5jZW50ZXItanVzdGlmaWVkIHsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtY2VudGVyLWp1c3RpZmllZDsKICAgICAgfQoKICAgICAgLmVuZC1qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1lbmQtanVzdGlmaWVkOwogICAgICB9CgogICAgICAuYXJvdW5kLWp1c3RpZmllZCB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWFyb3VuZC1qdXN0aWZpZWQ7CiAgICAgIH0KCiAgICAgIC5qdXN0aWZpZWQgewogICAgICAgIEBhcHBseSAtLWxheW91dC1qdXN0aWZpZWQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9wQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMoanVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9InRvcCI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ibWlkZGxlQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMobWlkZGxlSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9Im1pZGRsZSI+PC9zbG90PgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0iYm90dG9tQmFyIiBjbGFzc1wkPSJ0b29sYmFyLXRvb2xzIFtbX2NvbXB1dGVCYXJFeHRyYUNsYXNzZXMoYm90dG9tSnVzdGlmeSldXSI+CiAgICAgIDxzbG90IG5hbWU9ImJvdHRvbSI+PC9zbG90PgogICAgPC9kaXY+CmAsaXM6InBhcGVyLXRvb2xiYXIiLGhvc3RBdHRyaWJ1dGVzOntyb2xlOiJ0b29sYmFyIn0scHJvcGVydGllczp7Ym90dG9tSnVzdGlmeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGp1c3RpZnk6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxtaWRkbGVKdXN0aWZ5Ont0eXBlOlN0cmluZyx2YWx1ZToiIn19LHJlYWR5OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKHRoaXMuaXMsImlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXBwLWxheW91dCBpbnN0ZWFkISIpfSxhdHRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVyPXRoaXMuX29ic2VydmUodGhpcyksdGhpcy5fdXBkYXRlQXJpYUxhYmVsbGVkQnkoKX0sZGV0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlciYmdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpfSxfb2JzZXJ2ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUFyaWFMYWJlbGxlZEJ5KCl9LmJpbmQodGhpcykpO3JldHVybiB0Lm9ic2VydmUoZSx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSx0fSxfdXBkYXRlQXJpYUxhYmVsbGVkQnk6ZnVuY3Rpb24oKXt1aSgpO2Zvcih2YXIgZT1bXSx0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHp0KHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgic2xvdCIpKS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoenQodGhpcy5yb290KS5xdWVyeVNlbGVjdG9yQWxsKCJjb250ZW50IikpKSxyLG49MDtyPXRbbl07bisrKWZvcih2YXIgaT16dChyKS5nZXREaXN0cmlidXRlZE5vZGVzKCksbyxhPTA7bz1pW2FdO2ErKylpZihvLmNsYXNzTGlzdCYmby5jbGFzc0xpc3QuY29udGFpbnMoInRpdGxlIikpaWYoby5pZCllLnB1c2goby5pZCk7ZWxzZXt2YXIgcz0icGFwZXItdG9vbGJhci1sYWJlbC0iK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxZTQpO28uaWQ9cyxlLnB1c2gocyl9ZS5sZW5ndGg+MCYmdGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZS5qb2luKCIgIikpfSxfY29tcHV0ZUJhckV4dHJhQ2xhc3NlczpmdW5jdGlvbihlKXtyZXR1cm4gZT9lKyhlPT09Imp1c3RpZmllZCI/IiI6Ii1qdXN0aWZpZWQiKToiIn19KTtZdCh7X3RlbXBsYXRlOlFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB6LWluZGV4OiAxMDAyOwogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAjdG9vbHRpcCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBAYXBwbHkgLS1wYXBlci1mb250LWNvbW1vbi1iYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLWJhY2tncm91bmQsICM2MTYxNjEpOwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci10b29sdGlwLXRleHQtY29sb3IsIHdoaXRlKTsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXA7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVTY2FsZVVwIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMCk7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNjYWxlRG93biB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4wKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlSW5PcGFjaXR5IHsKICAgICAgICAwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMga2V5RnJhbWVGYWRlT3V0T3BhY2l0eSB7CiAgICAgICAgMCUgewogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIGtleUZyYW1lU2xpZGVEb3duSW4gewogICAgICAgIDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBrZXlGcmFtZVNsaWRlRG93bk91dCB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIH0KICAgICAgICAxMCUgewogICAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIH0KICAgICAgICAxMDAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMjAwMHB4KTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZmFkZS1pbi1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1wYXBlci10b29sdGlwLWRlbGF5LWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lRmFkZUluT3BhY2l0eTsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxOwogICAgICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLWluLCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5mYWRlLW91dC1hbmltYXRpb24gewogICAgICAgIG9wYWNpdHk6IHZhcigtLXBhcGVyLXRvb2x0aXAtb3BhY2l0eSwgMC45KTsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZUZhZGVPdXRPcGFjaXR5OwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDE7CiAgICAgICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjsKICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLXBhcGVyLXRvb2x0aXAtZHVyYXRpb24tb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogZm9yd2FyZHM7CiAgICAgICAgQGFwcGx5IC0tcGFwZXItdG9vbHRpcC1hbmltYXRpb247CiAgICAgIH0KCiAgICAgIC5zY2FsZS11cC1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1uYW1lOiBrZXlGcmFtZVNjYWxlVXA7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1pbiwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2NhbGUtZG93bi1hbmltYXRpb24gewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTY2FsZURvd247CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLWluOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLnNsaWRlLWRvd24tYW5pbWF0aW9uIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwMDBweCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IHZhcigtLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0LCA1MDBtcyk7CiAgICAgICAgYW5pbWF0aW9uLW5hbWU6IGtleUZyYW1lU2xpZGVEb3duSW47CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSk7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1wYXBlci10b29sdGlwLWR1cmF0aW9uLW91dCwgNTAwbXMpOwogICAgICAgIGFuaW1hdGlvbi1maWxsLW1vZGU6IGZvcndhcmRzOwogICAgICAgIEBhcHBseSAtLXBhcGVyLXRvb2x0aXAtYW5pbWF0aW9uOwogICAgICB9CgogICAgICAuc2xpZGUtZG93bi1hbmltYXRpb24tb3V0IHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgb3BhY2l0eTogdmFyKC0tcGFwZXItdG9vbHRpcC1vcGFjaXR5LCAwLjkpOwogICAgICAgIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tcGFwZXItdG9vbHRpcC1kZWxheS1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tbmFtZToga2V5RnJhbWVTbGlkZURvd25PdXQ7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogMTsKICAgICAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpOwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tcGFwZXItdG9vbHRpcC1kdXJhdGlvbi1vdXQsIDUwMG1zKTsKICAgICAgICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkczsKICAgICAgICBAYXBwbHkgLS1wYXBlci10b29sdGlwLWFuaW1hdGlvbjsKICAgICAgfQoKICAgICAgLmNhbmNlbC1hbmltYXRpb24gewogICAgICAgIGFuaW1hdGlvbi1kZWxheTogLTMwcyAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGFua3MgSUUgMTAuICovCgogICAgICAuaGlkZGVuIHsKICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0idG9vbHRpcCIgY2xhc3M9ImhpZGRlbiI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGl2PgpgLGlzOiJwYXBlci10b29sdGlwIixob3N0QXR0cmlidXRlczp7cm9sZToidG9vbHRpcCIsdGFiaW5kZXg6LTF9LHByb3BlcnRpZXM6e2Zvcjp7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9maW5kVGFyZ2V0In0sbWFudWFsTW9kZTp7dHlwZTpCb29sZWFuLHZhbHVlOiExLG9ic2VydmVyOiJfbWFudWFsTW9kZUNoYW5nZWQifSxwb3NpdGlvbjp7dHlwZTpTdHJpbmcsdmFsdWU6ImJvdHRvbSJ9LGZpdFRvVmlzaWJsZUJvdW5kczp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxvZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjE0fSxtYXJnaW5Ub3A6e3R5cGU6TnVtYmVyLHZhbHVlOjE0fSxhbmltYXRpb25EZWxheTp7dHlwZTpOdW1iZXIsdmFsdWU6NTAwLG9ic2VydmVyOiJfZGVsYXlDaGFuZ2UifSxhbmltYXRpb25FbnRyeTp7dHlwZTpTdHJpbmcsdmFsdWU6IiJ9LGFuaW1hdGlvbkV4aXQ6e3R5cGU6U3RyaW5nLHZhbHVlOiIifSxhbmltYXRpb25Db25maWc6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue2VudHJ5Olt7bmFtZToiZmFkZS1pbi1hbmltYXRpb24iLG5vZGU6dGhpcyx0aW1pbmc6e2RlbGF5OjB9fV0sZXhpdDpbe25hbWU6ImZhZGUtb3V0LWFuaW1hdGlvbiIsbm9kZTp0aGlzfV19fX0sX3Nob3dpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX19LGxpc3RlbmVyczp7d2Via2l0QW5pbWF0aW9uRW5kOiJfb25BbmltYXRpb25FbmQifSxnZXQgdGFyZ2V0KCl7dmFyIGU9enQodGhpcykucGFyZW50Tm9kZSx0PXp0KHRoaXMpLmdldE93bmVyUm9vdCgpLHI7cmV0dXJuIHRoaXMuZm9yP3I9enQodCkucXVlcnlTZWxlY3RvcigiIyIrdGhpcy5mb3IpOnI9ZS5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP3QuaG9zdDplLHJ9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZmluZFRhcmdldCgpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMubWFudWFsTW9kZXx8dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCl9LHBsYXlBbmltYXRpb246ZnVuY3Rpb24oZSl7ZT09PSJlbnRyeSI/dGhpcy5zaG93KCk6ZT09PSJleGl0IiYmdGhpcy5oaWRlKCl9LGNhbmNlbEFuaW1hdGlvbjpmdW5jdGlvbigpe3RoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5hZGQoImNhbmNlbC1hbmltYXRpb24iKX0sc2hvdzpmdW5jdGlvbigpe2lmKCF0aGlzLl9zaG93aW5nKXtpZih6dCh0aGlzKS50ZXh0Q29udGVudC50cmltKCk9PT0iIil7Zm9yKHZhciBlPSEwLHQ9enQodGhpcykuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpLHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdLnRleHRDb250ZW50LnRyaW0oKSE9PSIiKXtlPSExO2JyZWFrfWlmKGUpcmV0dXJufXRoaXMuX3Nob3dpbmc9ITAsdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LnJlbW92ZSgiY2FuY2VsLWFuaW1hdGlvbiIpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSx0aGlzLnVwZGF0ZVBvc2l0aW9uKCksdGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMCx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpfX0saGlkZTpmdW5jdGlvbigpe2lmKCEhdGhpcy5fc2hvd2luZyl7aWYodGhpcy5fYW5pbWF0aW9uUGxheWluZyl7dGhpcy5fc2hvd2luZz0hMSx0aGlzLl9jYW5jZWxBbmltYXRpb24oKTtyZXR1cm59ZWxzZSB0aGlzLl9vbkFuaW1hdGlvbkZpbmlzaCgpO3RoaXMuX3Nob3dpbmc9ITEsdGhpcy5fYW5pbWF0aW9uUGxheWluZz0hMH19LHVwZGF0ZVBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoISghdGhpcy5fdGFyZ2V0fHwhdGhpcy5vZmZzZXRQYXJlbnQpKXt2YXIgZT10aGlzLm9mZnNldDt0aGlzLm1hcmdpblRvcCE9MTQmJnRoaXMub2Zmc2V0PT0xNCYmKGU9dGhpcy5tYXJnaW5Ub3ApO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy5fdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPShyLndpZHRoLW4ud2lkdGgpLzIsbz0oci5oZWlnaHQtbi5oZWlnaHQpLzIsYT1yLmxlZnQtdC5sZWZ0LHM9ci50b3AtdC50b3AsbCxjO3N3aXRjaCh0aGlzLnBvc2l0aW9uKXtjYXNlInRvcCI6bD1hK2ksYz1zLW4uaGVpZ2h0LWU7YnJlYWs7Y2FzZSJib3R0b20iOmw9YStpLGM9cytyLmhlaWdodCtlO2JyZWFrO2Nhc2UibGVmdCI6bD1hLW4ud2lkdGgtZSxjPXMrbzticmVhaztjYXNlInJpZ2h0IjpsPWErci53aWR0aCtlLGM9cytvO2JyZWFrfXRoaXMuZml0VG9WaXNpYmxlQm91bmRzPyh0LmxlZnQrbCtuLndpZHRoPndpbmRvdy5pbm5lcldpZHRoPyh0aGlzLnN0eWxlLnJpZ2h0PSIwcHgiLHRoaXMuc3R5bGUubGVmdD0iYXV0byIpOih0aGlzLnN0eWxlLmxlZnQ9TWF0aC5tYXgoMCxsKSsicHgiLHRoaXMuc3R5bGUucmlnaHQ9ImF1dG8iKSx0LnRvcCtjK24uaGVpZ2h0PndpbmRvdy5pbm5lckhlaWdodD8odGhpcy5zdHlsZS5ib3R0b209dC5oZWlnaHQtcytlKyJweCIsdGhpcy5zdHlsZS50b3A9ImF1dG8iKToodGhpcy5zdHlsZS50b3A9TWF0aC5tYXgoLXQudG9wLGMpKyJweCIsdGhpcy5zdHlsZS5ib3R0b209ImF1dG8iKSk6KHRoaXMuc3R5bGUubGVmdD1sKyJweCIsdGhpcy5zdHlsZS50b3A9YysicHgiKX19LF9hZGRMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlZW50ZXIiLCJzaG93IiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJmb2N1cyIsInNob3ciKSx0aGlzLmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy5saXN0ZW4odGhpcy5fdGFyZ2V0LCJibHVyIiwiaGlkZSIpLHRoaXMubGlzdGVuKHRoaXMuX3RhcmdldCwidGFwIiwiaGlkZSIpKSx0aGlzLmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy5saXN0ZW4odGhpcywibW91c2VlbnRlciIsImhpZGUiKX0sX2ZpbmRUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX3RhcmdldD10aGlzLnRhcmdldCx0aGlzLm1hbnVhbE1vZGV8fHRoaXMuX2FkZExpc3RlbmVycygpfSxfZGVsYXlDaGFuZ2U6ZnVuY3Rpb24oZSl7ZSE9PTUwMCYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktaW4iOmUrIm1zIn0pfSxfbWFudWFsTW9kZUNoYW5nZWQ6ZnVuY3Rpb24oKXt0aGlzLm1hbnVhbE1vZGU/dGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCk6dGhpcy5fYWRkTGlzdGVuZXJzKCl9LF9jYW5jZWxBbmltYXRpb246ZnVuY3Rpb24oKXt0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fZ2V0QW5pbWF0aW9uVHlwZSgiZXhpdCIpKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKCJjYW5jZWwtYW5pbWF0aW9uIiksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9LF9vbkFuaW1hdGlvbkZpbmlzaDpmdW5jdGlvbigpe3RoaXMuX3Nob3dpbmcmJih0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImVudHJ5IikpLHRoaXMuJC50b29sdGlwLmNsYXNzTGlzdC5yZW1vdmUoImNhbmNlbC1hbmltYXRpb24iKSx0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QuYWRkKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSkpfSxfb25BbmltYXRpb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9hbmltYXRpb25QbGF5aW5nPSExLHRoaXMuX3Nob3dpbmd8fCh0aGlzLiQudG9vbHRpcC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuX2dldEFuaW1hdGlvblR5cGUoImV4aXQiKSksdGhpcy4kLnRvb2x0aXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIikpfSxfZ2V0QW5pbWF0aW9uVHlwZTpmdW5jdGlvbihlKXtpZihlPT09ImVudHJ5IiYmdGhpcy5hbmltYXRpb25FbnRyeSE9PSIiKXJldHVybiB0aGlzLmFuaW1hdGlvbkVudHJ5O2lmKGU9PT0iZXhpdCImJnRoaXMuYW5pbWF0aW9uRXhpdCE9PSIiKXJldHVybiB0aGlzLmFuaW1hdGlvbkV4aXQ7aWYodGhpcy5hbmltYXRpb25Db25maWdbZV0mJnR5cGVvZiB0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS5uYW1lPT0ic3RyaW5nIil7aWYodGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0udGltaW5nJiZ0aGlzLmFuaW1hdGlvbkNvbmZpZ1tlXVswXS50aW1pbmcuZGVsYXkmJnRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZy5kZWxheSE9PTApe3ZhciB0PXRoaXMuYW5pbWF0aW9uQ29uZmlnW2VdWzBdLnRpbWluZy5kZWxheTtlPT09ImVudHJ5Ij90aGlzLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItdG9vbHRpcC1kZWxheS1pbiI6dCsibXMifSk6ZT09PSJleGl0IiYmdGhpcy51cGRhdGVTdHlsZXMoeyItLXBhcGVyLXRvb2x0aXAtZGVsYXktb3V0Ijp0KyJtcyJ9KX1yZXR1cm4gdGhpcy5hbmltYXRpb25Db25maWdbZV1bMF0ubmFtZX19LF9yZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl90YXJnZXQmJih0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwibW91c2VlbnRlciIsInNob3ciKSx0aGlzLnVubGlzdGVuKHRoaXMuX3RhcmdldCwiZm9jdXMiLCJzaG93IiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsIm1vdXNlbGVhdmUiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsImJsdXIiLCJoaWRlIiksdGhpcy51bmxpc3Rlbih0aGlzLl90YXJnZXQsInRhcCIsImhpZGUiKSksdGhpcy51bmxpc3Rlbih0aGlzLiQudG9vbHRpcCwiYW5pbWF0aW9uZW5kIiwiX29uQW5pbWF0aW9uRW5kIiksdGhpcy51bmxpc3Rlbih0aGlzLCJtb3VzZWVudGVyIiwiaGlkZSIpfX0pO3ZhciByYj1FZShPZSgpLDEpO3ZhciBkRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmxpc3RlbmVyPXR9fSxUVz1uZXcgU2V0LEQ5PW5ldyBTZXQ7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCgpPT57VFcuZm9yRWFjaChlPT5lLmxpc3RlbmVyKCkpfSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCgpPT57RDkuZm9yRWFjaChlPT5lLmxpc3RlbmVyKCkpfSk7ZnVuY3Rpb24gbUUoZSl7bGV0IHQ9bmV3IGRFKGUpO3JldHVybiBUVy5hZGQodCksdH1mdW5jdGlvbiBDVyhlKXtsZXQgdD1uZXcgZEUoZSk7cmV0dXJuIEQ5LmFkZCh0KSx0fWZ1bmN0aW9uIEFXKCl7RDkuZm9yRWFjaChlPT5lLmxpc3RlbmVyKCkpfWZ1bmN0aW9uIFBXKGUpe1RXLmRlbGV0ZShlKX1mdW5jdGlvbiBJVyhlKXtEOS5kZWxldGUoZSl9dmFyIFJXPXt9O0tzKFJXLHtnZXRGYWtlSGFzaDooKT0+a1csc2V0RmFrZUhhc2g6KCk9PkxXLHNldFVzZUhhc2g6KCk9PnFiZSx1c2VIYXNoOigpPT5POX0pO3ZhciBrMHQ9ITE7ZnVuY3Rpb24gcWJlKGUpe2swdD1lfWZ1bmN0aW9uIE85KCl7cmV0dXJuIGswdH12YXIgUjB0PSIiO2Z1bmN0aW9uIExXKGUpe1IwdD1lfWZ1bmN0aW9uIGtXKCl7cmV0dXJuIFIwdH12YXIgUXg9Il9fdGFiX18iLE5XPXt9O2Z1bmN0aW9uIE4wdCgpe3JldHVybiBOV31mdW5jdGlvbiBEMHQoZSl7Tlc9ZX1tRSgoKT0+e05XPWViKHRiKCkpfSk7ZnVuY3Rpb24gdGIoKXtyZXR1cm4gTzkoKT93aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTprVygpfWZ1bmN0aW9uIGViKGUpe2xldCB0PXt9O3JldHVybiBlLnNwbGl0KCImIikuZm9yRWFjaChuPT57bGV0IGk9bi5zcGxpdCgiPSIpO2kubGVuZ3RoPT09MT90W1F4XT1pWzBdOmkubGVuZ3RoPT09MiYmKHRbZGVjb2RlVVJJQ29tcG9uZW50KGlbMF0pXT1kZWNvZGVVUklDb21wb25lbnQoaVsxXSkpfSksdH1mdW5jdGlvbiB6OShlLHQ9ITEpe2lmKE85KCkpaWYodCl7bGV0IHI9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7ci5oYXNoPWUsd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLHIudG9TdHJpbmcoKSl9ZWxzZSB3aW5kb3cubG9jYXRpb24uaGFzaD1lO2Vsc2UgTFcoZSl9ZnVuY3Rpb24gRjkoZSl7bGV0IHQ9IiI7ZVtReF0hPT12b2lkIDAmJih0Kz1lW1F4XSk7bGV0IHI9T2JqZWN0LmtleXMoZSkubWFwKG49PltuLGVbbl1dKS5maWx0ZXIobj0+blswXSE9PVF4KS5tYXAobj0+ZW5jb2RlVVJJQ29tcG9uZW50KG5bMF0pKyI9IitlbmNvZGVVUklDb21wb25lbnQoblsxXSkpLmpvaW4oIiYiKTtyZXR1cm4gci5sZW5ndGg+MD90KyImIityOnR9ZnVuY3Rpb24gTzB0KGUsdD0hMSl7bGV0IHI9ZWIodGIoKSk7ZGVsZXRlIHJbZV0sejkoRjkociksdCl9dmFyIEYwdD0iZGlzYW1iaWd1YXRvciIse2dldDpHYmUsc2V0OldiZSxnZXRJbml0aWFsaXplcjp5XyxnZXRPYnNlcnZlcjp2XyxkaXNwb3NlQmluZGluZzpZYmV9PXlFKGU9PmUsZT0+ZSkse2dldDpqYmUsc2V0OlhiZSxnZXRJbml0aWFsaXplcjp2cCxnZXRPYnNlcnZlcjp4cCxkaXNwb3NlQmluZGluZzokYmV9PXlFKGU9PmU9PT0idHJ1ZSI/ITA6ZT09PSJmYWxzZSI/ITE6dm9pZCAwLGU9PmUudG9TdHJpbmcoKSkse2dldDpEVyxzZXQ6T1csZ2V0SW5pdGlhbGl6ZXI6Z0UsZ2V0T2JzZXJ2ZXI6X0UsZGlzcG9zZUJpbmRpbmc6S2JlfT15RShlPT4rZSxlPT5lLnRvU3RyaW5nKCkpLHtnZXQ6WmJlLHNldDpKYmUsZ2V0SW5pdGlhbGl6ZXI6elcsZ2V0T2JzZXJ2ZXI6RlcsZGlzcG9zZUJpbmRpbmc6UWJlfT15RShlPT5KU09OLnBhcnNlKGF0b2IoZSkpLGU9PmJ0b2EoSlNPTi5zdHJpbmdpZnkoZSkpKTtmdW5jdGlvbiB5RShlLHQpe2xldCByPVtdLG49W107ZnVuY3Rpb24gaShjLHU9e30pe2xldHtkZWZhdWx0VmFsdWU6aCx1c2VMb2NhbFN0b3JhZ2U6Zj0hMX09dSxwPWY/d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGMpOmViKHRiKCkpW2NdO3JldHVybiBwPT1udWxsP3JiLmNsb25lRGVlcChoKTplKHApfWZ1bmN0aW9uIG8oYyx1LGg9e30pe2xldHtkZWZhdWx0VmFsdWU6Zix1c2VMb2NhbFN0b3JhZ2U6cD0hMSx1c2VMb2NhdGlvblJlcGxhY2U6ZD0hMX09aCxnPXQodSk7aWYocCl3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYyxnKSxBVygpO2Vsc2UgaWYoIXJiLmlzRXF1YWwodSxpKGMse3VzZUxvY2FsU3RvcmFnZTpwfSkpKWlmKHJiLmlzRXF1YWwodSxmKSlPMHQoYyxkKTtlbHNle2xldCBfPWViKHRiKCkpO19bY109Zyx6OShGOShfKSxkKX19ZnVuY3Rpb24gYShjLHUpe2xldCBoPUtsKHtkZWZhdWx0VmFsdWU6dS5kZWZhdWx0VmFsdWUscG9seW1lclByb3BlcnR5OmMsdXNlTG9jYWxTdG9yYWdlOiExfSx1KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZj16MHQodGhpcyxjKSxwPSgpPT57bGV0IF89aShmLGgpLHk9dGhpc1toLnBvbHltZXJQcm9wZXJ0eV07cmIuaXNFcXVhbChfLHkpfHwodGhpc1toLnBvbHltZXJQcm9wZXJ0eV09Xyl9LGc9KGgudXNlTG9jYWxTdG9yYWdlP0NXOm1FKSgoKT0+cCgpKTtyZXR1cm4gaC51c2VMb2NhbFN0b3JhZ2U/bi5wdXNoKGcpOnIucHVzaChnKSxwKCksdGhpc1toLnBvbHltZXJQcm9wZXJ0eV19fWZ1bmN0aW9uIHMoKXtyLmZvckVhY2goYz0+UFcoYykpLG4uZm9yRWFjaChjPT5JVyhjKSl9ZnVuY3Rpb24gbChjLHUpe2xldCBoPUtsKHtkZWZhdWx0VmFsdWU6dS5kZWZhdWx0VmFsdWUscG9seW1lclByb3BlcnR5OmMsdXNlTG9jYWxTdG9yYWdlOiExfSx1KTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZj16MHQodGhpcyxjKSxwPXRoaXNbaC5wb2x5bWVyUHJvcGVydHldO28oZixwLGgpfX1yZXR1cm57Z2V0Omksc2V0Om8sZ2V0SW5pdGlhbGl6ZXI6YSxnZXRPYnNlcnZlcjpsLGRpc3Bvc2VCaW5kaW5nOnN9fWZ1bmN0aW9uIHQyZSgpe2xldCBlPW5ldyBTZXQoWyJleGFtcGxlc1BhdGgiLCJoaWRlTW9kZWxQYW5lMiIsIm1vZGVsTmFtZTEiLCJtb2RlbE5hbWUyIiwiaW5mZXJlbmNlQWRkcmVzczEiLCJpbmZlcmVuY2VBZGRyZXNzMiIsIm1vZGVsVHlwZSIsIm1vZGVsVmVyc2lvbjEiLCJtb2RlbFZlcnNpb24yIiwibW9kZWxTaWduYXR1cmUxIiwibW9kZWxTaWduYXR1cmUyIiwibWF4RXhhbXBsZXMiLCJsYWJlbFZvY2FiUGF0aCIsIm11bHRpQ2xhc3MiLCJzZXF1ZW5jZUV4YW1wbGVzIiwibWF4Q2xhc3Nlc1RvRGlzcGxheSIsInNhbXBsaW5nT2RkcyIsInVzZVByZWRpY3RBcGkiLCJwcmVkaWN0SW5wdXRUZW5zb3IiLCJwcmVkaWN0T3V0cHV0VGVuc29yIl0pLHQ9ZWIodGIoKSk7aWYodFtReF09PT0id2hhdGlmIil7Zm9yKGxldCByIG9mIGUpaWYociBpbiB0KXtsZXQgbj10W3JdO3RbYHAud2hhdGlmLiR7cn1gXT1ufX16OShGOSh0KSksRDB0KHQpfWZ1bmN0aW9uIHowdChlLHQpe2xldCByPWVbRjB0XTtyZXR1cm4ocj09bnVsbD9bdF06W3IsdF0pLmpvaW4oIi4iKX12YXIgdkU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGFnRmlsdGVyPXlfKCJ0YWdGaWx0ZXIiLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExLHBvbHltZXJQcm9wZXJ0eToiX3RhZ0ZpbHRlciJ9KS5jYWxsKHRoaXMpLHRoaXMuX3RhZ0ZpbHRlck9ic2VydmVyPXZfKCJ0YWdGaWx0ZXIiLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYWxTdG9yYWdlOiExLHBvbHltZXJQcm9wZXJ0eToiX3RhZ0ZpbHRlciJ9KX1fY29tcHV0ZVRhZ0ZpbHRlcigpe3JldHVybiB0aGlzLl90YWdGaWx0ZXJ9fTt2RS50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWlucHV0CiAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgIGxhYmVsPSJGaWx0ZXIgdGFncyAocmVndWxhciBleHByZXNzaW9ucyBzdXBwb3J0ZWQpIgogICAgICB2YWx1ZT0ie3tfdGFnRmlsdGVyfX0iCiAgICAgIGNsYXNzPSJzZWFyY2gtaW5wdXQiCiAgICA+CiAgICAgIDxpcm9uLWljb24gcHJlZml4PSIiIGljb249InNlYXJjaCIgc2xvdD0icHJlZml4Ij48L2lyb24taWNvbj4KICAgIDwvcGFwZXItaW5wdXQ+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDEwcHggMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMCxjb21wdXRlZDoiX2NvbXB1dGVUYWdGaWx0ZXIoX3RhZ0ZpbHRlcikifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHZFLnByb3RvdHlwZSwidGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfdGFnRmlsdGVyT2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHZFLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTt2RT1FKFt5dCgidGYtdGFnLWZpbHRlcmVyIildLHZFKTtmdW5jdGlvbiBfcyhlKXtsZXR7bW9kdWxlTmFtZTp0LHN0eWxlQ29udGVudDpyfT1lLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZG9tLW1vZHVsZSIpLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKSxvPVtdO2Uuc3R5bGVEZXBlbmRlbmNpZXMmJmUuc3R5bGVEZXBlbmRlbmNpZXMuZm9yRWFjaChzPT57bGV0IGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtsLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIscyksby5wdXNoKGwpfSk7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtPYmplY3QuYXNzaWduKGEse3RleHRDb250ZW50OnJ9KSxvLmZvckVhY2gocz0+e2kuY29udGVudC5hcHBlbmRDaGlsZChzKX0pLGkuY29udGVudC5hcHBlbmRDaGlsZChhKSxuLmFwcGVuZENoaWxkKGkpLG4ucmVnaXN0ZXIodCl9X3Moe21vZHVsZU5hbWU6ImRhc2hib2FyZC1zdHlsZSIsc3R5bGVEZXBlbmRlbmNpZXM6WyJpcm9uLWZsZXgiXSxzdHlsZUNvbnRlbnQ6YAogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXZlcnRpY2FsLXBhZGRpbmc6IDE1cHg7CiAgICAgICAgLS1zaWRlYmFyLWxlZnQtcGFkZGluZzogMzBweDsKICAgICAgfQoKICAgICAgW3Nsb3Q9J3NpZGViYXInXSB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgcGFkZGluZzogNXB4IDA7CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC5zZXR0aW5ncyB7CiAgICAgICAgbWluLWhlaWdodDogNTBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICAucnVucy1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgbWluLWhlaWdodDogMjAwcHg7CiAgICAgIH0KCiAgICAgIHRmLXJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBsZWZ0OiB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7CiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSAqIDIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICB9CgogICAgICAuc2VhcmNoLWlucHV0IHsKICAgICAgICBtYXJnaW46IDEwcHggNXB4IDAgMTBweDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiB7CiAgICAgICAgYm9yZGVyLXRvcDogc29saWQgMXB4IHZhcigtLXRiLXVpLWJvcmRlcik7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIHBhZGRpbmc6IHZhcigtLXNpZGViYXItdmVydGljYWwtcGFkZGluZykgMAogICAgICAgICAgdmFyKC0tc2lkZWJhci12ZXJ0aWNhbC1wYWRkaW5nKSB2YXIoLS1zaWRlYmFyLWxlZnQtcGFkZGluZyk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICB9CgogICAgICAuc2lkZWJhci1zZWN0aW9uIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luOiA1cHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uOmZpcnN0LW9mLXR5cGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gcGFwZXItYnV0dG9uOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6Zmlyc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgcGFkZGluZy10b3A6IDA7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLXNlY3Rpb24gPiA6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDEwcHggMCA1cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWNoZWNrYm94IHsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KCiAgICAgIGEgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rKTsKICAgICAgfQoKICAgICAgYTp2aXNpdGVkIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluay12aXNpdGVkKTsKICAgICAgfQogIGB9KTtmdW5jdGlvbiBfbyhlKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBle2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9tYXliZVNldERhcmtNb2RlKCksdGhpcy5vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihyPT57ci5zb21lKGk9PmkuYXR0cmlidXRlTmFtZT09PSJjbGFzcyIpJiZ0aGlzLl9tYXliZVNldERhcmtNb2RlKCl9KSx0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSx7YXR0cmlidXRlczohMH0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIHI7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSwocj10aGlzLm9ic2VydmVyKT09bnVsbHx8ci5kaXNjb25uZWN0KCl9X21heWJlU2V0RGFya01vZGUoKXt0aGlzLmNsYXNzTGlzdC50b2dnbGUoImRhcmstbW9kZSIsZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoImRhcmstbW9kZSIpKX19fV9zKHttb2R1bGVOYW1lOiJzY3JvbGxiYXItc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAuc2Nyb2xsYmFyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgIHdpZHRoOiAxMHB4OwogICAgfQoKICAgIC5zY3JvbGxiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS05MDApOwogICAgfQogICAgLnNjcm9sbGJhciB7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICB9CiAgYH0pO3ZhciBIVz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO0hXLnNldEF0dHJpYnV0ZSgiaXMiLCJjdXN0b20tc3R5bGUiKTtIVy50ZXh0Q29udGVudD1gCiAgOnJvb3QgewogICAgLS10Yi1vcmFuZ2Utd2VhazogI2ZmYTcyNjsKICAgIC0tdGItb3JhbmdlLXN0cm9uZzogI2Y1N2MwMDsKICAgIC0tdGItb3JhbmdlLWRhcms6ICNkYzczMjA7CiAgICAtLXRiLWdyZXktZGFya2VyOiAjZTJlMmUyOwogICAgLS10Yi1ncmV5LWxpZ2h0ZXI6ICNmM2YzZjM7CiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiAjNzU3NTc1OwogICAgLS10Yi11aS1saWdodC1hY2NlbnQ6ICNlMGUwZTA7CiAgICAtLXRiLXVpLWJvcmRlcjogdmFyKC0tcGFwZXItZ3JleS0zMDApOwogICAgLS10Yi1ncmFwaC1mYWRlZDogI2UwZDRiMzsKICAgIC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktODAwKTsKICAgIC0tdGItcmFpc2VkLWJ1dHRvbi1zaGFkb3ctY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcjogI2U5ZTllOTsKICAgIC0tdGItbGF5b3V0LWJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CiAgICAtLXRiLWxpbms6ICMxOTc2ZDI7IC8qIG1hdGVyaWFsIGJsdWUgNzAwLiAqLwogICAgLS10Yi1saW5rLXZpc2l0ZWQ6ICM3YjFmYTI7IC8qIG1hdGVyaWFsIHB1cnBsZSA3MDAuICovCiAgfQoKICA6cm9vdCAuZGFyay1tb2RlIHsKICAgIC0tdGItdWktYm9yZGVyOiB2YXIoLS1wYXBlci1ncmV5LTcwMCk7CiAgICAtLXRiLXVpLWRhcmstYWNjZW50OiB2YXIoLS1wYXBlci1ncmV5LTQwMCk7CiAgICAtLXRiLXVpLWxpZ2h0LWFjY2VudDogdmFyKC0tcGFwZXItZ3JleS02MDApOwogICAgLS10Yi1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tcGFwZXItZ3JleS00MDApOwogICAgLS10Yi1yYWlzZWQtYnV0dG9uLXNoYWRvdy1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpOwogICAgLS1wcmltYXJ5LXRleHQtY29sb3I6ICNmZmY7CiAgICAtLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTQwMCk7CiAgICAtLXByaW1hcnktYmFja2dyb3VuZC1jb2xvcjogIzMwMzAzMDsgIC8qIG1hdGVyaWFsIGdyZXkgQTQwMC4gKi8KICAgIC0tc2Vjb25kYXJ5LWJhY2tncm91bmQtY29sb3I6ICMzYTNhM2E7CiAgICAtLXRiLWxheW91dC1iYWNrZ3JvdW5kLWNvbG9yOiAjM2EzYTNhOwogICAgLS10Yi1saW5rOiAjNDJhNWY1OyAvKiBtYXRlcmlhbCBibHVlIDQwMC4gKi8KICAgIC0tdGItbGluay12aXNpdGVkOiAjYmE2OGM4OyAvKiBtYXRlcmlhbCBwdXJwbGUgMzAwLiAqLwogICAgLyogT3ZlcnJpZGVzIHBhcGVyLW1hdGVyaWFsICovCiAgICAtLXNoYWRvdy1lbGV2YXRpb24tMmRwXy1fYm94LXNoYWRvdzogMCAycHggMnB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSwKICAgICAgMCAxcHggNXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgMCAzcHggMXB4IC0ycHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogIH0KYDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKEhXKTt2YXIgVlc9Y2xhc3MgZXh0ZW5kcyBfbyhtdCl7fTtWVy50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0ic2lkZWJhciI+CiAgICAgIDxzbG90IG5hbWU9InNpZGViYXIiPjwvc2xvdD4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9ImNlbnRlciI+CiAgICAgIDxzbG90IG5hbWU9ImNlbnRlciIgY2xhc3M9InNjb2xsYmFyIj48L3Nsb3Q+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgIH0KCiAgICAgICNzaWRlYmFyIHsKICAgICAgICBmbGV4OiAwIDAgdmFyKC0tdGYtZGFzaGJvYXJkLWxheW91dC1zaWRlYmFyLWJhc2lzLCAyNSUpOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtYXgtd2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1tYXgtd2lkdGgsIDM1MHB4KTsKICAgICAgICBtaW4td2lkdGg6IHZhcigtLXRmLWRhc2hib2FyZC1sYXlvdXQtc2lkZWJhci1taW4td2lkdGgsIDI3MHB4KTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAjY2VudGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZChbc2xvdD0nY2VudGVyJ10pIHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC50Zi1ncmFwaC1kYXNoYm9hcmQgI2NlbnRlciB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO1ZXPUUoW3l0KCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IildLFZXKTt2YXIgQjB0PSJURi5UZW5zb3JCb2FyZC5QYWdpbmF0ZWRWaWV3LmxpbWl0IixlMmU9MTIsQWg9bnVsbCxVVz1uZXcgU2V0O2Z1bmN0aW9uIHFXKGUpe1VXLmFkZChlKX1mdW5jdGlvbiBHVyhlKXtVVy5kZWxldGUoZSl9ZnVuY3Rpb24gV1coKXtyZXR1cm4gQWg9PW51bGwmJihBaD1EVyhCMHQse3VzZUxvY2FsU3RvcmFnZTohMH0pLChBaD09bnVsbHx8IWlzRmluaXRlKEFoKXx8QWg8PTApJiYoQWg9ZTJlKSksQWh9ZnVuY3Rpb24gcjJlKGUpe2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyBFcnJvcihgbGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZ290OiAke2V9YCk7aWYoZTw9MCl0aHJvdyBuZXcgRXJyb3IoYGxpbWl0IG11c3QgYmUgcG9zaXRpdmUsIGJ1dCBnb3Q6ICR7ZX1gKTtlIT09QWgmJihBaD1lLE9XKEIwdCxBaCx7dXNlTG9jYWxTdG9yYWdlOiEwfSksVVcuZm9yRWFjaCh0PT57dCgpfSkpfXZhciBuYj1jbGFzcyBleHRlbmRzIG10e3VwZGF0ZUFycmF5UHJvcCh0LHIsbil7bGV0IGk9dGhpcy5nZXQodCksbz1yO2lmKCFBcnJheS5pc0FycmF5KG8pKXRocm93IFJhbmdlRXJyb3IoYEV4cGVjdGVkIG5ldyB2YWx1ZSB0byAnJHt0fScgdG8gYmUgYW4gYXJyYXkuYCk7QXJyYXkuaXNBcnJheShpKXx8KGk9W10sdGhpcy5zZXQodCxpKSk7bGV0IGE9bmV3IFNldChvLm1hcCgoYyx1KT0+bihjLHUpKSkscz0wLGw9MDtmb3IoO3M8aS5sZW5ndGgmJmw8by5sZW5ndGg7KXtpZihhLmhhcyhuKGlbc10scykpKW4oaVtzXSxzKT09bihvW2xdLGwpP3RoaXMuc2V0KGAke3R9LiR7c31gLG9bbF0pOnRoaXMuc3BsaWNlKHQscywwLG9bbF0pO2Vsc2V7dGhpcy5zcGxpY2UodCxzLDEpO2NvbnRpbnVlfWwrKyxzKyt9czxpLmxlbmd0aCYmdGhpcy5zcGxpY2UodCxzKSxsPG8ubGVuZ3RoJiZ0aGlzLnB1c2godCwuLi5vLnNsaWNlKGwpKX19O3ZhciBPaT1jbGFzcyBleHRlbmRzIG5ie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFzPSJpdGVtIix0aGlzLl9jb250ZW50QWN0aXZlPSEwLHRoaXMuX2RvbUJvb3RzdHJhcHBlZD0hMSx0aGlzLl9jdG9yPW51bGwsdGhpcy5fcmVuZGVyZWRJdGVtcz1bXSx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdD1uZXcgTWFwLHRoaXMuX2xydUNhY2hlZEl0ZW1zPW5ldyBNYXAsdGhpcy5fY2FjaGVTaXplPTEwLHRoaXMuX2dldEl0ZW1LZXk9dD0+SlNPTi5zdHJpbmdpZnkodCksdGhpcy5faXNDb25uZWN0ZWQ9ITF9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2lzQ29ubmVjdGVkPSEwfXNldENhY2hlU2l6ZSh0KXt0aGlzLl9jYWNoZVNpemU9dH1zZXRHZXRJdGVtS2V5KHQpe3RoaXMuX2dldEl0ZW1LZXk9dH11cGRhdGVEb20odCl7dGhpcy51cGRhdGVBcnJheVByb3AoIl9yZW5kZXJlZEl0ZW1zIix0LHRoaXMuX2dldEl0ZW1LZXkpfV9lbnN1cmVUZW1wbGF0aXplZCgpe2lmKCF0aGlzLmlzQ29ubmVjdGVkKXJldHVybiExO2lmKCF0aGlzLl9jdG9yKXtsZXQgdD10aGlzLnF1ZXJ5U2VsZWN0b3IoInRlbXBsYXRlIik7dGhpcy5fY3Rvcj10Yyh0LHRoaXMse3BhcmVudE1vZGVsOiEwLGluc3RhbmNlUHJvcHM6e1t0aGlzLmFzXTohMCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHIsbil7dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZm9yRWFjaChpPT57aS5mb3J3YXJkSG9zdFByb3AocixuKX0pfX0pfXJldHVybiEwfV9ib290c3RyYXBEb20oKXtpZighdGhpcy5fZW5zdXJlVGVtcGxhdGl6ZWQoKXx8dGhpcy5fZG9tQm9vdHN0cmFwcGVkKXJldHVybjtuZXcgTXV0YXRpb25PYnNlcnZlcihyPT57Zm9yKGxldCBuIG9mIHIpaWYobi50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGxldCBpIG9mIEFycmF5LmZyb20obi5hZGRlZE5vZGVzKSlpIGluc3RhbmNlb2YgRWxlbWVudCYmaS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJpdGVtcyIpfSkub2JzZXJ2ZSh0aGlzLHtjaGlsZExpc3Q6ITB9KSxBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZvckVhY2gocj0+e3RoaXMucmVtb3ZlQ2hpbGQocil9KSx0aGlzLl9scnVDYWNoZWRJdGVtcy5jbGVhcigpLHRoaXMuX3JlbmRlcmVkSXRlbXMuZm9yRWFjaCgocixuKT0+dGhpcy5faW5zZXJ0SXRlbShyLG4pKSx0aGlzLl9kb21Cb290c3RyYXBwZWQ9ITB9X3VwZGF0ZUFjdGl2ZSgpeyF0aGlzLl9kb21Cb290c3RyYXBwZWR8fEFycmF5LmZyb20odGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QudmFsdWVzKCkpLmZvckVhY2godD0+e3Qubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKX0pfV91cGRhdGVEb20odCl7aWYoISF0aGlzLl9kb21Cb290c3RyYXBwZWQmJiEodC5wYXRoPT0iX3JlbmRlcmVkSXRlbXMifHx0LnBhdGg9PSJfcmVuZGVyZWRJdGVtcy5sZW5ndGgiKSlpZih0LnBhdGg9PT0iX3JlbmRlcmVkSXRlbXMuc3BsaWNlcyIpdC52YWx1ZS5pbmRleFNwbGljZXMuZm9yRWFjaChuPT57bGV0e2luZGV4OmksYWRkZWRDb3VudDpvLG9iamVjdDphLHJlbW92ZWQ6c309bjtzLmZvckVhY2gobD0+e3RoaXMuX3JlbW92ZUl0ZW0obCx0aGlzLmNoaWxkcmVuW2ldKX0pLGEuc2xpY2UoaSxpK28pLmZvckVhY2goKGwsYyk9PnRoaXMuX2luc2VydEl0ZW0obCxpK2MpKSx0aGlzLl90cmltQ2FjaGUoKX0pO2Vsc2V7bGV0IHI9dGhpcy5fZ2V0SXRlbUtleSh0LnZhbHVlKTt0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5oYXMocik/dGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KHIpLm5vdGlmeVBhdGgodGhpcy5hcyx0LnZhbHVlKTpjb25zb2xlLndhcm4oYEV4cGVjdGVkICcke3J9JyB0byBleGlzdCBpbiB0aGUgRE9NIGJ1dCBjb3VsZCBub3QgZmluZCBvbmUuYCl9fV9pbnNlcnRJdGVtKHQscil7aWYoIXRoaXMuX2Vuc3VyZVRlbXBsYXRpemVkKCkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0ZW1wbGF0aXplZCBiZWZvcmUgaW5zZXJ0aW5nIGFuIGl0ZW0iKTtsZXQgbixpPXRoaXMuX2dldEl0ZW1LZXkodCk7aWYodGhpcy5fbHJ1Q2FjaGVkSXRlbXMuaGFzKGkpKW49dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuZ2V0KGkpLHRoaXMuX2xydUNhY2hlZEl0ZW1zLmRlbGV0ZShpKSx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5nZXQoaSkubm90aWZ5UGF0aCgiYWN0aXZlIix0aGlzLl9jb250ZW50QWN0aXZlKTtlbHNle2xldCBvPXtbdGhpcy5hc106dCxhY3RpdmU6dGhpcy5fY29udGVudEFjdGl2ZX0sYT1uZXcgdGhpcy5fY3RvcihvKTtuPWEucm9vdCx0aGlzLl9yZW5kZXJlZFRlbXBsYXRlSW5zdC5zZXQoaSxhKX10aGlzLmNoaWxkcmVuW3JdP3RoaXMuaW5zZXJ0QmVmb3JlKG4sdGhpcy5jaGlsZHJlbltyXSk6KChuLm5vZGVUeXBlPT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/QXJyYXkuZnJvbShuLmNoaWxkcmVuKTpbbl0pLmZvckVhY2goYT0+YS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJpdGVtcyIpKSx0aGlzLmFwcGVuZENoaWxkKG4pKX1fcmVtb3ZlSXRlbSh0LHIpe3IucGFyZW50Tm9kZSYmci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpO2xldCBuPXRoaXMuX2dldEl0ZW1LZXkodCk7dGhpcy5fbHJ1Q2FjaGVkSXRlbXMuc2V0KG4sciksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZ2V0KG4pLm5vdGlmeVBhdGgoImFjdGl2ZSIsITEpfV90cmltQ2FjaGUoKXtmb3IoO3RoaXMuX2xydUNhY2hlZEl0ZW1zLnNpemU+dGhpcy5fY2FjaGVTaXplOyl7bGV0W3RdPXRoaXMuX2xydUNhY2hlZEl0ZW1zLmtleXMoKTt0aGlzLl9scnVDYWNoZWRJdGVtcy5kZWxldGUodCksdGhpcy5fcmVuZGVyZWRUZW1wbGF0ZUluc3QuZGVsZXRlKHQpfX19O0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9pLnByb3RvdHlwZSwiYXMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9pLnByb3RvdHlwZSwiaXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPaS5wcm90b3R5cGUsIl9jb250ZW50QWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9kb21Cb290c3RyYXBwZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfY3RvciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sT2kucHJvdG90eXBlLCJfcmVuZGVyZWRJdGVtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9yZW5kZXJlZFRlbXBsYXRlSW5zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9scnVDYWNoZWRJdGVtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPaS5wcm90b3R5cGUsIl9jYWNoZVNpemUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfZ2V0SXRlbUtleSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT2kucHJvdG90eXBlLCJfaXNDb25uZWN0ZWQiLHZvaWQgMCk7RShbQnQoIl9pc0Nvbm5lY3RlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT2kucHJvdG90eXBlLCJfYm9vdHN0cmFwRG9tIixudWxsKTtFKFtCdCgiX2NvbnRlbnRBY3RpdmUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLE9pLnByb3RvdHlwZSwiX3VwZGF0ZUFjdGl2ZSIsbnVsbCk7RShbQnQoIl9yZW5kZXJlZEl0ZW1zLioiLCJfZG9tQm9vdHN0cmFwcGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW09iamVjdF0pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl91cGRhdGVEb20iLG51bGwpO0UoW0J0KCJfY2FjaGVTaXplIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPaS5wcm90b3R5cGUsIl90cmltQ2FjaGUiLG51bGwpO3ZhciBobj1jbGFzcyBleHRlbmRzIE9pe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSExLHRoaXMuZ2V0Q2F0ZWdvcnlJdGVtS2V5PXQ9PkpTT04uc3RyaW5naWZ5KHQpLHRoaXMuX2xpbWl0PTEyLHRoaXMuX2FjdGl2ZUluZGV4PTAsdGhpcy5fcGFnZUlucHV0UmF3VmFsdWU9IiIsdGhpcy5fcGFnZUlucHV0Rm9jdXNlZD0hMX1fY29tcHV0ZUNvdW50KCl7cmV0dXJuIHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RofWdldCBfaGFzTXVsdGlwbGUoKXtyZXR1cm4gdGhpcy5fY291bnQ+MX1fdG9nZ2xlUGFuZSgpe3RoaXMub3BlbmVkPSF0aGlzLm9wZW5lZH1fY2hhbmdlQ29udGVudEFjdGl2ZSh0KXt0aGlzLl9jb250ZW50QWN0aXZlPXR9X29uUGFuZVJlbmRlcmVkQ2hhbmdlZCh0LHIpe3QmJnQhPT1yJiZ0aGlzLiQuaWZSZW5kZXJlZC5yZW5kZXIoKX1fY29tcHV0ZVBhbmVSZW5kZXJlZCh0KXtyZXR1cm4hKHQubWV0YWRhdGEudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiZ0Lm5hbWU9PT0iIil9Z2V0IF9pdGVtc1JlbmRlcmVkKCl7cmV0dXJuIHRoaXMuX3BhbmVSZW5kZXJlZCYmdGhpcy5vcGVuZWR9X2NvbXB1dGVJc1NlYXJjaFJlc3VsdHModCl7cmV0dXJuIHQ9PT1OYS5TRUFSQ0hfUkVTVUxUU31fY29tcHV0ZUlzSW52YWxpZFNlYXJjaFJlc3VsdHModCl7cmV0dXJuIHQudHlwZT09PU5hLlNFQVJDSF9SRVNVTFRTJiYhdC52YWxpZFJlZ2V4fV9jb21wdXRlSXNVbml2ZXJzYWxTZWFyY2hRdWVyeSh0KXtyZXR1cm4gdC50eXBlPT09TmEuU0VBUkNIX1JFU1VMVFMmJnQudW5pdmVyc2FsUmVnZXh9X2lzQ29tcG9zaXRlU2VhcmNoKCl7bGV0e3R5cGU6dCxjb21wb3NpdGVTZWFyY2g6cn09dGhpcy5jYXRlZ29yeS5tZXRhZGF0YTtyZXR1cm4gciYmdD09PU5hLlNFQVJDSF9SRVNVTFRTfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLm9wZW5lZD10aGlzLmluaXRpYWxPcGVuZWQ9PW51bGw/ITA6dGhpcy5pbml0aWFsT3BlbmVkLHRoaXMuX2xpbWl0TGlzdGVuZXI9KCk9Pnt0aGlzLnNldCgiX2xpbWl0IixXVygpKX0scVcodGhpcy5fbGltaXRMaXN0ZW5lciksdGhpcy5fbGltaXRMaXN0ZW5lcigpfWRldGFjaGVkKCl7R1codGhpcy5fbGltaXRMaXN0ZW5lcil9X3VwZGF0ZVJlbmRlcmVkSXRlbXMoKXt2YXIgdD10aGlzLl9pdGVtc1JlbmRlcmVkLHI9dGhpcy5fbGltaXQsbj10aGlzLl9hY3RpdmVJbmRleCxpPXRoaXMuZGlzYWJsZVBhZ2luYXRpb247aWYoIXQpcmV0dXJuO2xldCBvPU1hdGguZmxvb3Iobi9yKSxhPXRoaXMuY2F0ZWdvcnkuaXRlbXN8fFtdLHM9aT9hOmEuc2xpY2UobypyLChvKzEpKnIpO3RoaXMudXBkYXRlRG9tKHMpfV9saW1pdENoYW5nZWQodCl7dGhpcy5zZXRDYWNoZVNpemUodCoyKX1fZ2V0Q2F0ZWdvcnlJdGVtS2V5Q2hhbmdlZCgpe3RoaXMuc2V0R2V0SXRlbUtleSh0aGlzLmdldENhdGVnb3J5SXRlbUtleSl9Z2V0IF9jdXJyZW50UGFnZSgpe3ZhciB0PXRoaXMuX2xpbWl0LHI9dGhpcy5fYWN0aXZlSW5kZXg7cmV0dXJuIE1hdGguZmxvb3Ioci90KSsxfV9jb21wdXRlUGFnZUNvdW50KHQscil7cmV0dXJuIHRoaXMuY2F0ZWdvcnk/TWF0aC5jZWlsKHRoaXMuY2F0ZWdvcnkuaXRlbXMubGVuZ3RoL3IpOjB9Z2V0IF9tdWx0aXBsZVBhZ2VzRXhpc3QoKXt2YXIgdD10aGlzLl9wYWdlQ291bnQscj10aGlzLmRpc2FibGVQYWdpbmF0aW9uO3JldHVybiFyJiZ0PjF9Z2V0IF9oYXNQcmV2aW91c1BhZ2UoKXt2YXIgdD10aGlzLl9jdXJyZW50UGFnZTtyZXR1cm4gdD4xfWdldCBfaGFzTmV4dFBhZ2UoKXt2YXIgdD10aGlzLl9jdXJyZW50UGFnZSxyPXRoaXMuX3BhZ2VDb3VudDtyZXR1cm4gdDxyfV9jb21wdXRlSW5wdXRXaWR0aCh0KXtyZXR1cm5gY2FsYygke3QudG9TdHJpbmcoKS5sZW5ndGh9ZW0gKyAyMHB4KWB9X3NldEFjdGl2ZUluZGV4KHQpe2xldCByPSh0aGlzLmNhdGVnb3J5Lml0ZW1zfHxbXSkubGVuZ3RoLTE7dD5yJiYodD1yKSx0PDAmJih0PTApLHRoaXMuc2V0KCJfYWN0aXZlSW5kZXgiLHQpfV9jbGFtcEFjdGl2ZUluZGV4KCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgpfV9wZXJmb3JtUHJldmlvdXNQYWdlKCl7dGhpcy5fc2V0QWN0aXZlSW5kZXgodGhpcy5fYWN0aXZlSW5kZXgtdGhpcy5fbGltaXQpfV9wZXJmb3JtTmV4dFBhZ2UoKXt0aGlzLl9zZXRBY3RpdmVJbmRleCh0aGlzLl9hY3RpdmVJbmRleCt0aGlzLl9saW1pdCl9X2NvbXB1dGVQYWdlSW5wdXRWYWx1ZSh0LHIsbil7cmV0dXJuIHQ/cjpuLnRvU3RyaW5nKCl9X2hhbmRsZVBhZ2VJbnB1dEV2ZW50KHQpe3RoaXMuc2V0KCJfcGFnZUlucHV0UmF3VmFsdWUiLHQudGFyZ2V0LnZhbHVlKTtsZXQgcj1OdW1iZXIodC50YXJnZXQudmFsdWV8fE5hTik7aWYoaXNOYU4ocikpcmV0dXJuO2xldCBuPU1hdGgubWF4KDEsTWF0aC5taW4ocix0aGlzLl9wYWdlQ291bnQpKS0xO3RoaXMuX3NldEFjdGl2ZUluZGV4KHRoaXMuX2xpbWl0Km4pfV9oYW5kbGVQYWdlQ2hhbmdlRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0aGlzLl9jdXJyZW50UGFnZS50b1N0cmluZygpKX1faGFuZGxlUGFnZUZvY3VzRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dFJhd1ZhbHVlIix0aGlzLl9wYWdlSW5wdXRWYWx1ZSksdGhpcy5zZXQoIl9wYWdlSW5wdXRGb2N1c2VkIiwhMCl9X2hhbmRsZVBhZ2VCbHVyRXZlbnQoKXt0aGlzLnNldCgiX3BhZ2VJbnB1dEZvY3VzZWQiLCExKX1fdXBkYXRlUGFnZUlucHV0VmFsdWUodCl7dmFyIG47bGV0IHI9KG49dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKCIjcGFnZS1pbnB1dCBpbnB1dCIpO3ImJihyLnZhbHVlPXQpfV91cGRhdGVJbnB1dFdpZHRoKCl7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3LXBhZ2UtaW5wdXQtd2lkdGgiOnRoaXMuX2lucHV0V2lkdGh9KX19O2huLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3BhbmVSZW5kZXJlZF1dIiBpZD0iaWZSZW5kZXJlZCI+CiAgICAgIDxidXR0b24gY2xhc3M9ImhlYWRpbmciIG9uLXRhcD0iX3RvZ2dsZVBhbmUiIG9wZW4tYnV0dG9uJD0iW1tvcGVuZWRdXSI+CiAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1NlYXJjaFJlc3VsdHNdXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuPlRhZ3MgbWF0Y2hpbmcgbXVsdGlwbGUgZXhwZXJpbWVudHM8L3NwYW4+CiAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc0ludmFsaWRTZWFyY2hSZXN1bHRzXV0iPgogICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgPiZuYnNwOzxzdHJvbmc+KG1hbGZvcm1lZCByZWd1bGFyIGV4cHJlc3Npb24pPC9zdHJvbmc+PC9zcGFuCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfaXNDb21wb3NpdGVTZWFyY2goY2F0ZWdvcnkpXV0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaWdodCI+VGFncyBtYXRjaGluZyAvPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjYXRlZ29yeS1uYW1lIiB0aXRsZSQ9IltbY2F0ZWdvcnkubmFtZV1dIgogICAgICAgICAgICAgICAgPltbY2F0ZWdvcnkubmFtZV1dPC9zcGFuCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaWdodCI+Lzwvc3Bhbj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVW5pdmVyc2FsU2VhcmNoUXVlcnldXSI+CiAgICAgICAgICAgICAgICA8c3Bhbj4gKGFsbCB0YWdzKTwvc3Bhbj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNJbnZhbGlkU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgICAgIDxzcGFuPiA8c3Ryb25nPihtYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uKTwvc3Ryb25nPjwvc3Bhbj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2lzU2VhcmNoUmVzdWx0c11dIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNhdGVnb3J5LW5hbWUiIHRpdGxlJD0iW1tjYXRlZ29yeS5uYW1lXV0iCiAgICAgICAgICAgICAgPltbY2F0ZWdvcnkubmFtZV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb3VudCI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlXV0iPgogICAgICAgICAgICA8c3Bhbj5bW19jb3VudF1dPC9zcGFuPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZXhwYW5kLW1vcmUiIGNsYXNzPSJleHBhbmQtYXJyb3ciPjwvaXJvbi1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9idXR0b24+CiAgICAgIDwhLS0gVE9ETyhzdGVwaGFud2xlZSk6IGludmVzdGlnYXRlIGZ1cnRoZXIuIEZvciBzb21lIHJlYXNvbiwKICAgICAgICB0cmFuc2l0aW9uZW5kIHRoYXQgdGhlIGlyb24tY29sbGFwc2UgcmVsaWVzIG9uIHNvbWV0aW1lcyBkb2VzIG5vdAogICAgICAgIHRyaWdnZXIgd2hlbiByZW5kZXJpbmcgYSBjaGFydCB3aXRoIGEgc3Bpbm5lci4gQSB0b3kgZXhhbXBsZSBjYW5ub3QKICAgICAgICByZXByb2R1Y2UgdGhpcyBidWcuIC0tPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Iltbb3BlbmVkXV0iIG5vLWFuaW1hdGlvbj0iIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICAgIDxzcGFuIGlkPSJ0b3Atb2YtY29udGFpbmVyIj48L3NwYW4+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX211bHRpcGxlUGFnZXNFeGlzdF1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmlnLXBhZ2UtYnV0dG9ucyIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDEwcHg7Ij4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIgogICAgICAgICAgICAgICAgZGlzYWJsZWQkPSJbWyFfaGFzUHJldmlvdXNQYWdlXV0iCiAgICAgICAgICAgICAgICA+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIG9uLXRhcD0iX3BlcmZvcm1OZXh0UGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc05leHRQYWdlXV0iCiAgICAgICAgICAgICAgICA+TmV4dCBwYWdlPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGlkPSJpdGVtcyI+CiAgICAgICAgICAgIDxzbG90IG5hbWU9Iml0ZW1zIj48L3Nsb3Q+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfbXVsdGlwbGVQYWdlc0V4aXN0XV0iPgogICAgICAgICAgICA8ZGl2IGlkPSJjb250cm9scy1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZzogMCA1cHgiPgogICAgICAgICAgICAgICAgUGFnZQogICAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICAgIGlkPSJwYWdlLWlucHV0IgogICAgICAgICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0PSIiCiAgICAgICAgICAgICAgICAgIG1pbj0iMSIKICAgICAgICAgICAgICAgICAgbWF4PSJbW19wYWdlQ291bnRdXSIKICAgICAgICAgICAgICAgICAgdmFsdWU9IltbX3BhZ2VJbnB1dFZhbHVlXV0iCiAgICAgICAgICAgICAgICAgIG9uLWlucHV0PSJfaGFuZGxlUGFnZUlucHV0RXZlbnQiCiAgICAgICAgICAgICAgICAgIG9uLWNoYW5nZT0iX2hhbmRsZVBhZ2VDaGFuZ2VFdmVudCIKICAgICAgICAgICAgICAgICAgb24tZm9jdXM9Il9oYW5kbGVQYWdlRm9jdXNFdmVudCIKICAgICAgICAgICAgICAgICAgb24tYmx1cj0iX2hhbmRsZVBhZ2VCbHVyRXZlbnQiCiAgICAgICAgICAgICAgICA+PC9wYXBlci1pbnB1dD4KICAgICAgICAgICAgICAgIG9mIFtbX3BhZ2VDb3VudF1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmlnLXBhZ2UtYnV0dG9ucyIgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICBvbi10YXA9Il9wZXJmb3JtUHJldmlvdXNQYWdlIgogICAgICAgICAgICAgICAgZGlzYWJsZWQkPSJbWyFfaGFzUHJldmlvdXNQYWdlXV0iCiAgICAgICAgICAgICAgICA+UHJldmlvdXMgcGFnZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIG9uLXRhcD0iX3BlcmZvcm1OZXh0UGFnZSIKICAgICAgICAgICAgICAgIGRpc2FibGVkJD0iW1shX2hhc05leHRQYWdlXV0iCiAgICAgICAgICAgICAgICA+TmV4dCBwYWdlPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1hcmdpbjogMCA1cHggMXB4IDEwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KDpmaXJzdC1vZi10eXBlKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgOmhvc3QoOmxhc3Qtb2YtdHlwZSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDVweCB2YXIoLS10Yi1yYWlzZWQtYnV0dG9uLXNoYWRvdy1jb2xvcik7CiAgICAgICAgcGFkZGluZzogMTBweCAxNXB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgIH0KCiAgICAgIFtvcGVuLWJ1dHRvbl0gewogICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDAgIWltcG9ydGFudDsKICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBbb3Blbi1idXR0b25dIC5leHBhbmQtYXJyb3cgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOwogICAgICB9CgogICAgICAubmFtZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmxpZ2h0IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICB9CgogICAgICAuY2F0ZWdvcnktbmFtZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHBhZGRpbmc6IDJweCAwOwogICAgICB9CgogICAgICAuY291bnQgewogICAgICAgIG1hcmdpbjogMCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1ncmV5LTUwMCk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGZsZXg6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nOjotbW96LWZvY3VzLWlubmVyIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE1cHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZWRlZGU7CiAgICAgICAgcGFkZGluZzogMTVweDsKICAgICAgfQoKICAgICAgLmxpZ2h0IHsKICAgICAgICBjb2xvcjogdmFyKC0tcGFwZXItZ3JleS01MDApOwogICAgICB9CgogICAgICAjY29udHJvbHMtY29udGFpbmVyIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjY29udHJvbHMtY29udGFpbmVyIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmlnLXBhZ2UtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgcGFwZXItYnV0dG9uIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZsZXgtYmFzaXM6IDA7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLmJpZy1wYWdlLWJ1dHRvbnMgcGFwZXItYnV0dG9uW2Rpc2FibGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgfQoKICAgICAgc2xvdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKFtzbG90PSdpdGVtcyddKSB7CiAgICAgICAgLyogVG9vbHRpcCBmb3IgZGVzY3JpcHRpb25zIGFuZCBvdGhlcnMgYnJlYWsgd2l0aCBtb3JlIHN0cmljdCBvbmVzLiAqLwogICAgICAgIGNvbnRhaW46IHN0eWxlOwogICAgICB9CgogICAgICAjcGFnZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiB2YXIoLS10Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldy1wYWdlLWlucHV0LXdpZHRoLCAxMDAlKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGhuLnByb3RvdHlwZSwiY2F0ZWdvcnkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsImluaXRpYWxPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0saG4ucHJvdG90eXBlLCJvcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsImRpc2FibGVQYWdpbmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLGNvbXB1dGVkOiJfY29tcHV0ZUNvdW50KGNhdGVnb3J5Lml0ZW1zLiopIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxobi5wcm90b3R5cGUsIl9jb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlUGFuZVJlbmRlcmVkKGNhdGVnb3J5KSIsb2JzZXJ2ZXI6Il9vblBhbmVSZW5kZXJlZENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9wYW5lUmVuZGVyZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLGNvbXB1dGVkOiJfY29tcHV0ZUlzU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YS50eXBlKSJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwiX2lzU2VhcmNoUmVzdWx0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sY29tcHV0ZWQ6Il9jb21wdXRlSXNJbnZhbGlkU2VhcmNoUmVzdWx0cyhjYXRlZ29yeS5tZXRhZGF0YSkifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9pc0ludmFsaWRTZWFyY2hSZXN1bHRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixjb21wdXRlZDoiX2NvbXB1dGVJc1VuaXZlcnNhbFNlYXJjaFF1ZXJ5KGNhdGVnb3J5Lm1ldGFkYXRhKSJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGhuLnByb3RvdHlwZSwiX2lzVW5pdmVyc2FsU2VhcmNoUXVlcnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9nZXRDYXRlZ29yeUl0ZW1LZXlDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxobi5wcm90b3R5cGUsImdldENhdGVnb3J5SXRlbUtleSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX2xpbWl0Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfbGltaXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0saG4ucHJvdG90eXBlLCJfYWN0aXZlSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsY29tcHV0ZWQ6Il9jb21wdXRlUGFnZUNvdW50KGNhdGVnb3J5Lml0ZW1zLiosIF9saW1pdCkifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGhuLnByb3RvdHlwZSwiX3BhZ2VDb3VudCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxjb21wdXRlZDoiX2NvbXB1dGVJbnB1dFdpZHRoKF9wYWdlQ291bnQpIixvYnNlcnZlcjoiX3VwZGF0ZUlucHV0V2lkdGgifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGhuLnByb3RvdHlwZSwiX2lucHV0V2lkdGgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUGFnZUlucHV0VmFsdWUoX3BhZ2VJbnB1dEZvY3VzZWQsIF9wYWdlSW5wdXRSYXdWYWx1ZSwgX2N1cnJlbnRQYWdlKSIsb2JzZXJ2ZXI6Il91cGRhdGVQYWdlSW5wdXRWYWx1ZSJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0VmFsdWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0saG4ucHJvdG90eXBlLCJfcGFnZUlucHV0UmF3VmFsdWUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxobi5wcm90b3R5cGUsIl9wYWdlSW5wdXRGb2N1c2VkIix2b2lkIDApO0UoW1J0KCJfY291bnQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaGFzTXVsdGlwbGUiLG51bGwpO0UoW0J0KCJvcGVuZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbQm9vbGVhbl0pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxobi5wcm90b3R5cGUsIl9jaGFuZ2VDb250ZW50QWN0aXZlIixudWxsKTtFKFtSdCgib3BlbmVkIiwiX3BhbmVSZW5kZXJlZCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxobi5wcm90b3R5cGUsIl9pdGVtc1JlbmRlcmVkIixudWxsKTtFKFtCdCgiX2l0ZW1zUmVuZGVyZWQiLCJjYXRlZ29yeS5pdGVtcy4qIiwiX2xpbWl0IiwiX2FjdGl2ZUluZGV4IiwiX3BhZ2VDb3VudCIsImRpc2FibGVQYWdpbmF0aW9uIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxobi5wcm90b3R5cGUsIl91cGRhdGVSZW5kZXJlZEl0ZW1zIixudWxsKTtFKFtSdCgiX2xpbWl0IiwiX2FjdGl2ZUluZGV4IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfY3VycmVudFBhZ2UiLG51bGwpO0UoW1J0KCJfcGFnZUNvdW50IiwiZGlzYWJsZVBhZ2luYXRpb24iKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfbXVsdGlwbGVQYWdlc0V4aXN0IixudWxsKTtFKFtSdCgiX2N1cnJlbnRQYWdlIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGhuLnByb3RvdHlwZSwiX2hhc1ByZXZpb3VzUGFnZSIsbnVsbCk7RShbUnQoIl9jdXJyZW50UGFnZSIsIl9wYWdlQ291bnQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0saG4ucHJvdG90eXBlLCJfaGFzTmV4dFBhZ2UiLG51bGwpO0UoW0J0KCJjYXRlZ29yeS5pdGVtcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxobi5wcm90b3R5cGUsIl9jbGFtcEFjdGl2ZUluZGV4IixudWxsKTtobj1FKFt5dCgidGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXciKV0saG4pO3ZhciBIMHQ9RWUoT2UoKSwxKTt2YXIgQjk9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5saXN0ZW5lcj10fX0sYnA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPW5ldyBBZSgxKSx0aGlzLl9saXN0ZW5lcnM9bmV3IFNldCx0aGlzLmluaXRpYWxpemVkPSExfXJlZnJlc2goKXtyZXR1cm4gdGhpcy5sb2FkKCkudGhlbigoKT0+e3RoaXMuaW5pdGlhbGl6ZWQ9ITB9KX1hZGRMaXN0ZW5lcih0KXtsZXQgcj1uZXcgQjkodCk7cmV0dXJuIHRoaXMuX2xpc3RlbmVycy5hZGQocikscn1yZW1vdmVMaXN0ZW5lckJ5S2V5KHQpe3RoaXMuX2xpc3RlbmVycy5kZWxldGUodCl9ZW1pdENoYW5nZSgpe3RoaXMuX2xpc3RlbmVycy5mb3JFYWNoKHQ9Pnt0cnl7dC5saXN0ZW5lcigpfWNhdGNoKHIpe319KX19O3ZhciBIOT1jbGFzcyBleHRlbmRzIGJwe2xvYWQoKXtsZXQgdD12ZSgpLmVudmlyb25tZW50KCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntsZXQgbj17ZGF0YUxvY2F0aW9uOnIuZGF0YV9sb2NhdGlvbix3aW5kb3dUaXRsZTpyLndpbmRvd190aXRsZX07ci5leHBlcmltZW50X25hbWUhPT12b2lkIDAmJihuLmV4cGVyaW1lbnROYW1lPXIuZXhwZXJpbWVudF9uYW1lKSxyLmV4cGVyaW1lbnRfZGVzY3JpcHRpb24hPT12b2lkIDAmJihuLmV4cGVyaW1lbnREZXNjcmlwdGlvbj1yLmV4cGVyaW1lbnRfZGVzY3JpcHRpb24pLHIuY3JlYXRpb25fdGltZSE9PXZvaWQgMCYmKG4uY3JlYXRpb25UaW1lPXIuY3JlYXRpb25fdGltZSksIUgwdC5pc0VxdWFsKHRoaXMuZW52aXJvbm1lbnQsbikmJih0aGlzLmVudmlyb25tZW50PW4sdGhpcy5lbWl0Q2hhbmdlKCkpfSl9Z2V0RGF0YUxvY2F0aW9uKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5kYXRhTG9jYXRpb246IiJ9Z2V0V2luZG93VGl0bGUoKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LndpbmRvd1RpdGxlOiIifWdldEV4cGVyaW1lbnROYW1lKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ/dGhpcy5lbnZpcm9ubWVudC5leHBlcmltZW50TmFtZToiIn1nZXRFeHBlcmltZW50RGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmV4cGVyaW1lbnREZXNjcmlwdGlvbjoiIn1nZXRDcmVhdGlvblRpbWUoKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudD90aGlzLmVudmlyb25tZW50LmNyZWF0aW9uVGltZTpudWxsfX0saWI9bmV3IEg5O3ZhciBWMHQ9RWUoT2UoKSwxKTt2YXIgVjk9Y2xhc3MgZXh0ZW5kcyBicHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcnVucz1bXX1sb2FkKCl7bGV0IHQ9dmUoKS5ydW5zKCk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntWMHQuaXNFcXVhbCh0aGlzLl9ydW5zLHIpfHwodGhpcy5fcnVucz1yLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldFJ1bnMoKXtyZXR1cm4gdGhpcy5fcnVucy5zbGljZSgpfX0sd3A9bmV3IFY5O3ZhciBWcj17fTtLcyhWcix7Rm9ybWF0U3BlY2lmaWVyOigpPT5xRSxhY3RpdmU6KCk9Pk8xdCxhcmM6KCk9Pk5TdCxhcmVhOigpPT5POCxhcmVhUmFkaWFsOigpPT5hJCxhc2NlbmRpbmc6KCk9Pm9hLGF1dG9UeXBlOigpPT5vaixheGlzQm90dG9tOigpPT5LOSxheGlzTGVmdDooKT0+bGIsYXhpc1JpZ2h0OigpPT51X3QsYXhpc1RvcDooKT0+Y190LGJpc2VjdDooKT0+eXMsYmlzZWN0TGVmdDooKT0+RzB0LGJpc2VjdFJpZ2h0OigpPT5ZVyxiaXNlY3RvcjooKT0+b2IsYmxvYjooKT0+SXZ0LGJydXNoOigpPT5xTCxicnVzaFNlbGVjdGlvbjooKT0+VkwsYnJ1c2hYOigpPT5VMXQsYnJ1c2hZOigpPT5VTCxidWZmZXI6KCk9Pkx2dCxjaG9yZDooKT0+RzF0LGNsaWVudFBvaW50OigpPT5EbSxjbHVzdGVyOigpPT5IYnQsY29sb3I6KCk9PnJjLGNvbnRvdXJEZW5zaXR5OigpPT5odnQsY29udG91cnM6KCk9PktMLGNyZWF0ZTooKT0+cnl0LGNyZWF0b3I6KCk9PlJtLGNyb3NzOigpPT5VOSxjc3Y6KCk9PlJ2dCxjc3ZGb3JtYXQ6KCk9Pmd2dCxjc3ZGb3JtYXRCb2R5OigpPT5fdnQsY3N2Rm9ybWF0Um93OigpPT52dnQsY3N2Rm9ybWF0Um93czooKT0+eXZ0LGNzdkZvcm1hdFZhbHVlOigpPT54dnQsY3N2UGFyc2U6KCk9PkNiLGNzdlBhcnNlUm93czooKT0+bXZ0LGN1YmVoZWxpeDooKT0+bGEsY3VydmVCYXNpczooKT0+RzgsY3VydmVCYXNpc0Nsb3NlZDooKT0+WFN0LGN1cnZlQmFzaXNPcGVuOigpPT5LU3QsY3VydmVCdW5kbGU6KCk9PkpTdCxjdXJ2ZUNhcmRpbmFsOigpPT5RU3QsY3VydmVDYXJkaW5hbENsb3NlZDooKT0+dDN0LGN1cnZlQ2FyZGluYWxPcGVuOigpPT5lM3QsY3VydmVDYXRtdWxsUm9tOigpPT5uM3QsY3VydmVDYXRtdWxsUm9tQ2xvc2VkOigpPT5vM3QsY3VydmVDYXRtdWxsUm9tT3BlbjooKT0+czN0LGN1cnZlTGluZWFyOigpPT5ZaCxjdXJ2ZUxpbmVhckNsb3NlZDooKT0+YzN0LGN1cnZlTW9ub3RvbmVYOigpPT5tM3QsY3VydmVNb25vdG9uZVk6KCk9PmczdCxjdXJ2ZU5hdHVyYWw6KCk9PnYzdCxjdXJ2ZVN0ZXA6KCk9PngzdCxjdXJ2ZVN0ZXBBZnRlcjooKT0+dzN0LGN1cnZlU3RlcEJlZm9yZTooKT0+YjN0LGN1c3RvbUV2ZW50OigpPT5NcCxkZXNjZW5kaW5nOigpPT5ZMHQsZGV2aWF0aW9uOigpPT5HOSxkaXNwYXRjaDooKT0+dnMsZHJhZzooKT0+cGIsZHJhZ0Rpc2FibGU6KCk9PnptLGRyYWdFbmFibGU6KCk9PkZtLGRzdjooKT0+YWosZHN2Rm9ybWF0OigpPT5XbSxlYXNlQmFjazooKT0+REwsZWFzZUJhY2tJbjooKT0+elksZWFzZUJhY2tJbk91dDooKT0+REwsZWFzZUJhY2tPdXQ6KCk9PkZZLGVhc2VCb3VuY2U6KCk9PlBfLGVhc2VCb3VuY2VJbjooKT0+TlksZWFzZUJvdW5jZUluT3V0OigpPT5EWSxlYXNlQm91bmNlT3V0OigpPT5QXyxlYXNlQ2lyY2xlOigpPT5STCxlYXNlQ2lyY2xlSW46KCk9PkxZLGVhc2VDaXJjbGVJbk91dDooKT0+UkwsZWFzZUNpcmNsZU91dDooKT0+a1ksZWFzZUN1YmljOigpPT54cyxlYXNlQ3ViaWNJbjooKT0+YlksZWFzZUN1YmljSW5PdXQ6KCk9PnhzLGVhc2VDdWJpY091dDooKT0+d1ksZWFzZUVsYXN0aWM6KCk9Pk9MLGVhc2VFbGFzdGljSW46KCk9PlZZLGVhc2VFbGFzdGljSW5PdXQ6KCk9PlVZLGVhc2VFbGFzdGljT3V0OigpPT5PTCxlYXNlRXhwOigpPT5rTCxlYXNlRXhwSW46KCk9PlBZLGVhc2VFeHBJbk91dDooKT0+a0wsZWFzZUV4cE91dDooKT0+SVksZWFzZUxpbmVhcjooKT0+eVksZWFzZVBvbHk6KCk9PklMLGVhc2VQb2x5SW46KCk9Pk1ZLGVhc2VQb2x5SW5PdXQ6KCk9PklMLGVhc2VQb2x5T3V0OigpPT5FWSxlYXNlUXVhZDooKT0+UEwsZWFzZVF1YWRJbjooKT0+dlksZWFzZVF1YWRJbk91dDooKT0+UEwsZWFzZVF1YWRPdXQ6KCk9PnhZLGVhc2VTaW46KCk9PkxMLGVhc2VTaW5JbjooKT0+VFksZWFzZVNpbkluT3V0OigpPT5MTCxlYXNlU2luT3V0OigpPT5DWSxlbnRyaWVzOigpPT5vdnQsZXZlbnQ6KCk9PnF0LGV4dGVudDooKT0+YWEsZm9yY2VDZW50ZXI6KCk9Pkh2dCxmb3JjZUNvbGxpZGU6KCk9Pm94dCxmb3JjZUxpbms6KCk9PnN4dCxmb3JjZU1hbnlCb2R5OigpPT5oeHQsZm9yY2VSYWRpYWw6KCk9PmZ4dCxmb3JjZVNpbXVsYXRpb246KCk9PnV4dCxmb3JjZVg6KCk9PnB4dCxmb3JjZVk6KCk9PmR4dCxmb3JtYXQ6KCk9PnhuLGZvcm1hdERlZmF1bHRMb2NhbGU6KCk9PnJrLGZvcm1hdExvY2FsZTooKT0+dGssZm9ybWF0UHJlZml4OigpPT5HRSxmb3JtYXRTcGVjaWZpZXI6KCk9PkxwLGdlb0FsYmVyczooKT0+VmssZ2VvQWxiZXJzVXNhOigpPT5UYnQsZ2VvQXJlYTooKT0+UHh0LGdlb0F6aW11dGhhbEVxdWFsQXJlYTooKT0+Q2J0LGdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdzooKT0+cWssZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnQ6KCk9PkFidCxnZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzooKT0+R2ssZ2VvQm91bmRzOigpPT56eHQsZ2VvQ2VudHJvaWQ6KCk9PnF4dCxnZW9DaXJjbGU6KCk9Plh4dCxnZW9DbGlwQW50aW1lcmlkaWFuOigpPT50NSxnZW9DbGlwQ2lyY2xlOigpPT5DayxnZW9DbGlwRXh0ZW50OigpPT5aeHQsZ2VvQ2xpcFJlY3RhbmdsZTooKT0+RHAsZ2VvQ29uaWNDb25mb3JtYWw6KCk9PklidCxnZW9Db25pY0NvbmZvcm1hbFJhdzooKT0+WGosZ2VvQ29uaWNFcXVhbEFyZWE6KCk9PldfLGdlb0NvbmljRXF1YWxBcmVhUmF3OigpPT5ZaixnZW9Db25pY0VxdWlkaXN0YW50OigpPT5rYnQsZ2VvQ29uaWNFcXVpZGlzdGFudFJhdzooKT0+JGosZ2VvQ29udGFpbnM6KCk9PmlidCxnZW9EaXN0YW5jZTooKT0+TmIsZ2VvRXF1YWxFYXJ0aDooKT0+UmJ0LGdlb0VxdWFsRWFydGhSYXc6KCk9PmprLGdlb0VxdWlyZWN0YW5ndWxhcjooKT0+TGJ0LGdlb0VxdWlyZWN0YW5ndWxhclJhdzooKT0+al8sZ2VvR25vbW9uaWM6KCk9Pk5idCxnZW9Hbm9tb25pY1JhdzooKT0+WGssZ2VvR3JhdGljdWxlOigpPT5SayxnZW9HcmF0aWN1bGUxMDooKT0+c2J0LGdlb0lkZW50aXR5OigpPT5EYnQsZ2VvSW50ZXJwb2xhdGU6KCk9PmxidCxnZW9MZW5ndGg6KCk9PkxrLGdlb01lcmNhdG9yOigpPT5QYnQsZ2VvTWVyY2F0b3JSYXc6KCk9PllfLGdlb05hdHVyYWxFYXJ0aDE6KCk9Pk9idCxnZW9OYXR1cmFsRWFydGgxUmF3OigpPT4kayxnZW9PcnRob2dyYXBoaWM6KCk9PnpidCxnZW9PcnRob2dyYXBoaWNSYXc6KCk9PktrLGdlb1BhdGg6KCk9PmJidCxnZW9Qcm9qZWN0aW9uOigpPT5NaSxnZW9Qcm9qZWN0aW9uTXV0YXRvcjooKT0+czUsZ2VvUm90YXRpb246KCk9PmJrLGdlb1N0ZXJlb2dyYXBoaWM6KCk9PkZidCxnZW9TdGVyZW9ncmFwaGljUmF3OigpPT5aayxnZW9TdHJlYW06KCk9PnZvLGdlb1RyYW5zZm9ybTooKT0+d2J0LGdlb1RyYW5zdmVyc2VNZXJjYXRvcjooKT0+QmJ0LGdlb1RyYW5zdmVyc2VNZXJjYXRvclJhdzooKT0+SmssZ3JheTooKT0+eXl0LGhjbDooKT0+Z2IsaGllcmFyY2h5OigpPT5mNSxoaXN0b2dyYW06KCk9PlowdCxoc2w6KCk9PlZtLGh0bWw6KCk9PkZ2dCxpbWFnZTooKT0+RHZ0LGludGVycG9sYXRlOigpPT5uYyxpbnRlcnBvbGF0ZUFycmF5OigpPT5JeXQsaW50ZXJwb2xhdGVCYXNpczooKT0+c0wsaW50ZXJwb2xhdGVCYXNpc0Nsb3NlZDooKT0+bEwsaW50ZXJwb2xhdGVCbHVlczooKT0+bVN0LGludGVycG9sYXRlQnJCRzooKT0+WHd0LGludGVycG9sYXRlQnVHbjooKT0+blN0LGludGVycG9sYXRlQnVQdTooKT0+aVN0LGludGVycG9sYXRlQ2l2aWRpczooKT0+YlN0LGludGVycG9sYXRlQ29vbDooKT0+TVN0LGludGVycG9sYXRlQ3ViZWhlbGl4OigpPT5qeXQsaW50ZXJwb2xhdGVDdWJlaGVsaXhEZWZhdWx0OigpPT53U3QsaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nOigpPT5FXyxpbnRlcnBvbGF0ZURhdGU6KCk9PmhMLGludGVycG9sYXRlRGlzY3JldGU6KCk9Pkx5dCxpbnRlcnBvbGF0ZUduQnU6KCk9Pm9TdCxpbnRlcnBvbGF0ZUdyZWVuczooKT0+Z1N0LGludGVycG9sYXRlR3JleXM6KCk9Pl9TdCxpbnRlcnBvbGF0ZUhjbDooKT0+R3l0LGludGVycG9sYXRlSGNsTG9uZzooKT0+V3l0LGludGVycG9sYXRlSHNsOigpPT5WeXQsaW50ZXJwb2xhdGVIc2xMb25nOigpPT5VeXQsaW50ZXJwb2xhdGVIdWU6KCk9Pmt5dCxpbnRlcnBvbGF0ZUluZmVybm86KCk9PklTdCxpbnRlcnBvbGF0ZUxhYjooKT0+TV8saW50ZXJwb2xhdGVNYWdtYTooKT0+UFN0LGludGVycG9sYXRlTnVtYmVyOigpPT56aSxpbnRlcnBvbGF0ZU51bWJlckFycmF5OigpPT55YixpbnRlcnBvbGF0ZU9iamVjdDooKT0+ZkwsaW50ZXJwb2xhdGVPclJkOigpPT5hU3QsaW50ZXJwb2xhdGVPcmFuZ2VzOigpPT54U3QsaW50ZXJwb2xhdGVQUkduOigpPT4kd3QsaW50ZXJwb2xhdGVQaVlHOigpPT5Ld3QsaW50ZXJwb2xhdGVQbGFzbWE6KCk9PkxTdCxpbnRlcnBvbGF0ZVB1QnU6KCk9PmxTdCxpbnRlcnBvbGF0ZVB1QnVHbjooKT0+c1N0LGludGVycG9sYXRlUHVPcjooKT0+Wnd0LGludGVycG9sYXRlUHVSZDooKT0+Y1N0LGludGVycG9sYXRlUHVycGxlczooKT0+eVN0LGludGVycG9sYXRlUmFpbmJvdzooKT0+RVN0LGludGVycG9sYXRlUmRCdTooKT0+Snd0LGludGVycG9sYXRlUmRHeTooKT0+UXd0LGludGVycG9sYXRlUmRQdTooKT0+dVN0LGludGVycG9sYXRlUmRZbEJ1OigpPT50U3QsaW50ZXJwb2xhdGVSZFlsR246KCk9PmVTdCxpbnRlcnBvbGF0ZVJlZHM6KCk9PnZTdCxpbnRlcnBvbGF0ZVJnYjooKT0+cW0saW50ZXJwb2xhdGVSZ2JCYXNpczooKT0+Y0wsaW50ZXJwb2xhdGVSZ2JCYXNpc0Nsb3NlZDooKT0+UHl0LGludGVycG9sYXRlUm91bmQ6KCk9PnBMLGludGVycG9sYXRlU2luZWJvdzooKT0+VFN0LGludGVycG9sYXRlU3BlY3RyYWw6KCk9PnJTdCxpbnRlcnBvbGF0ZVN0cmluZzooKT0+dmIsaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3M6KCk9PmdMLGludGVycG9sYXRlVHJhbnNmb3JtU3ZnOigpPT5fTCxpbnRlcnBvbGF0ZVR1cmJvOigpPT5DU3QsaW50ZXJwb2xhdGVWaXJpZGlzOigpPT5BU3QsaW50ZXJwb2xhdGVXYXJtOigpPT5TU3QsaW50ZXJwb2xhdGVZbEduOigpPT5mU3QsaW50ZXJwb2xhdGVZbEduQnU6KCk9PmhTdCxpbnRlcnBvbGF0ZVlsT3JCcjooKT0+cFN0LGludGVycG9sYXRlWWxPclJkOigpPT5kU3QsaW50ZXJwb2xhdGVab29tOigpPT55TCxpbnRlcnJ1cHQ6KCk9Pmh1LGludGVydmFsOigpPT5KeXQsaXNvRm9ybWF0OigpPT5Sd3QsaXNvUGFyc2U6KCk9Pk53dCxqc29uOigpPT5PdnQsa2V5czooKT0+WEwsbGFiOigpPT53XyxsY2g6KCk9Pnh5dCxsaW5lOigpPT52dSxsaW5lUmFkaWFsOigpPT5vJCxsaW5rSG9yaXpvbnRhbDooKT0+SFN0LGxpbmtSYWRpYWw6KCk9PlVTdCxsaW5rVmVydGljYWw6KCk9PlZTdCxsb2NhbDooKT0+dEwsbWFwOigpPT5KaSxtYXRjaGVyOigpPT51YixtYXg6KCk9Pmx1LG1lYW46KCk9PnRfdCxtZWRpYW46KCk9PmVfdCxtZXJnZTooKT0+SW0sbWluOigpPT5MbSxtb3VzZTooKT0+em8sbmFtZXNwYWNlOigpPT5QaCxuYW1lc3BhY2VzOigpPT53RSxuZXN0OigpPT5aMXQsbm93OigpPT5BcCxwYWNrOigpPT5jMnQscGFja0VuY2xvc2U6KCk9PnQ4LHBhY2tTaWJsaW5nczooKT0+bzJ0LHBhaXJzOigpPT5XMHQscGFydGl0aW9uOigpPT51MnQscGF0aDooKT0+YnMscGVybXV0ZTooKT0+cl90LHBpZTooKT0+RlN0LHBpZWNld2lzZTooKT0+bVkscG9pbnRSYWRpYWw6KCk9Pmx5LHBvbHlnb25BcmVhOigpPT52MnQscG9seWdvbkNlbnRyb2lkOigpPT54MnQscG9seWdvbkNvbnRhaW5zOigpPT5NMnQscG9seWdvbkh1bGw6KCk9PlMydCxwb2x5Z29uTGVuZ3RoOigpPT5FMnQscHJlY2lzaW9uRml4ZWQ6KCk9Pm5rLHByZWNpc2lvblByZWZpeDooKT0+aWsscHJlY2lzaW9uUm91bmQ6KCk9Pm9rLHF1YWR0cmVlOigpPT56aCxxdWFudGlsZTooKT0+c2EscXVhbnRpemU6KCk9Plh5dCxyYWRpYWxBcmVhOigpPT5hJCxyYWRpYWxMaW5lOigpPT5vJCxyYW5kb21CYXRlczooKT0+QTJ0LHJhbmRvbUV4cG9uZW50aWFsOigpPT5QMnQscmFuZG9tSXJ3aW5IYWxsOigpPT5hOCxyYW5kb21Mb2dOb3JtYWw6KCk9PkMydCxyYW5kb21Ob3JtYWw6KCk9Pm84LHJhbmRvbVVuaWZvcm06KCk9PlQydCxyYW5nZTooKT0+SXIscmdiOigpPT5jdSxyaWJib246KCk9PmoxdCxzY2FsZUJhbmQ6KCk9PlFtLHNjYWxlRGl2ZXJnaW5nOigpPT5QOCxzY2FsZURpdmVyZ2luZ0xvZzooKT0+QVgsc2NhbGVEaXZlcmdpbmdQb3c6KCk9Pkk4LHNjYWxlRGl2ZXJnaW5nU3FydDooKT0+Rnd0LHNjYWxlRGl2ZXJnaW5nU3ltbG9nOigpPT5QWCxzY2FsZUlkZW50aXR5OigpPT5jOCxzY2FsZUltcGxpY2l0OigpPT5zOCxzY2FsZUxpbmVhcjooKT0+em4sc2NhbGVMb2c6KCk9PmNjLHNjYWxlT3JkaW5hbDooKT0+Z3Usc2NhbGVQb2ludDooKT0+dGcsc2NhbGVQb3c6KCk9PktfLHNjYWxlUXVhbnRpbGU6KCk9PmVnLHNjYWxlUXVhbnRpemU6KCk9PnFiLHNjYWxlU2VxdWVudGlhbDooKT0+RTgsc2NhbGVTZXF1ZW50aWFsTG9nOigpPT5UWCxzY2FsZVNlcXVlbnRpYWxQb3c6KCk9PlQ4LHNjYWxlU2VxdWVudGlhbFF1YW50aWxlOigpPT5DOCxzY2FsZVNlcXVlbnRpYWxTcXJ0OigpPT56d3Qsc2NhbGVTZXF1ZW50aWFsU3ltbG9nOigpPT5DWCxzY2FsZVNxcnQ6KCk9PlYydCxzY2FsZVN5bWxvZzooKT0+aDgsc2NhbGVUaHJlc2hvbGQ6KCk9PmY4LHNjYWxlVGltZTooKT0+WWIsc2NhbGVVdGM6KCk9Pk93dCxzY2FuOigpPT5uX3Qsc2NoZW1lQWNjZW50OigpPT5Cd3Qsc2NoZW1lQmx1ZXM6KCk9PlpYLHNjaGVtZUJyQkc6KCk9PklYLHNjaGVtZUJ1R246KCk9PkJYLHNjaGVtZUJ1UHU6KCk9PkhYLHNjaGVtZUNhdGVnb3J5MTA6KCk9PmpiLHNjaGVtZURhcmsyOigpPT5Id3Qsc2NoZW1lR25CdTooKT0+Vlgsc2NoZW1lR3JlZW5zOigpPT5KWCxzY2hlbWVHcmV5czooKT0+UVgsc2NoZW1lT3JSZDooKT0+VVgsc2NoZW1lT3JhbmdlczooKT0+ciQsc2NoZW1lUFJHbjooKT0+TFgsc2NoZW1lUGFpcmVkOigpPT5Wd3Qsc2NoZW1lUGFzdGVsMTooKT0+VXd0LHNjaGVtZVBhc3RlbDI6KCk9PnF3dCxzY2hlbWVQaVlHOigpPT5rWCxzY2hlbWVQdUJ1OigpPT5HWCxzY2hlbWVQdUJ1R246KCk9PnFYLHNjaGVtZVB1T3I6KCk9PlJYLHNjaGVtZVB1UmQ6KCk9PldYLHNjaGVtZVB1cnBsZXM6KCk9PnQkLHNjaGVtZVJkQnU6KCk9Pk5YLHNjaGVtZVJkR3k6KCk9PkRYLHNjaGVtZVJkUHU6KCk9PllYLHNjaGVtZVJkWWxCdTooKT0+T1gsc2NoZW1lUmRZbEduOigpPT56WCxzY2hlbWVSZWRzOigpPT5lJCxzY2hlbWVTZXQxOigpPT5Hd3Qsc2NoZW1lU2V0MjooKT0+V3d0LHNjaGVtZVNldDM6KCk9Pll3dCxzY2hlbWVTcGVjdHJhbDooKT0+Rlgsc2NoZW1lVGFibGVhdTEwOigpPT5qd3Qsc2NoZW1lWWxHbjooKT0+WFgsc2NoZW1lWWxHbkJ1OigpPT5qWCxzY2hlbWVZbE9yQnI6KCk9PiRYLHNjaGVtZVlsT3JSZDooKT0+S1gsc2VsZWN0OigpPT5IdCxzZWxlY3RBbGw6KCk9PkVwLHNlbGVjdGlvbjooKT0+SWgsc2VsZWN0b3I6KCk9Pk5tLHNlbGVjdG9yQWxsOigpPT5jYixzZXQ6KCk9PnR2dCxzaHVmZmxlOigpPT5pX3Qsc3RhY2s6KCk9PlMzdCxzdGFja09mZnNldERpdmVyZ2luZzooKT0+RTN0LHN0YWNrT2Zmc2V0RXhwYW5kOigpPT5NM3Qsc3RhY2tPZmZzZXROb25lOigpPT54dSxzdGFja09mZnNldFNpbGhvdWV0dGU6KCk9PlQzdCxzdGFja09mZnNldFdpZ2dsZTooKT0+QzN0LHN0YWNrT3JkZXJBcHBlYXJhbmNlOigpPT5LOCxzdGFja09yZGVyQXNjZW5kaW5nOigpPT5aOCxzdGFja09yZGVyRGVzY2VuZGluZzooKT0+QTN0LHN0YWNrT3JkZXJJbnNpZGVPdXQ6KCk9PlAzdCxzdGFja09yZGVyTm9uZTooKT0+YnUsc3RhY2tPcmRlclJldmVyc2U6KCk9PkkzdCxzdHJhdGlmeTooKT0+cDJ0LHN0eWxlOigpPT5TcCxzdW06KCk9Pm9fdCxzdmc6KCk9PkJ2dCxzeW1ib2w6KCk9PllTdCxzeW1ib2xDaXJjbGU6KCk9Pkw1LHN5bWJvbENyb3NzOigpPT5GOCxzeW1ib2xEaWFtb25kOigpPT5COCxzeW1ib2xTcXVhcmU6KCk9PlY4LHN5bWJvbFN0YXI6KCk9Pkg4LHN5bWJvbFRyaWFuZ2xlOigpPT5VOCxzeW1ib2xXeWU6KCk9PnE4LHN5bWJvbHM6KCk9PldTdCx0ZXh0OigpPT5EXyx0aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzOigpPT5KMHQsdGhyZXNob2xkU2NvdHQ6KCk9PlEwdCx0aHJlc2hvbGRTdHVyZ2VzOigpPT5zYix0aWNrRm9ybWF0OigpPT5sOCx0aWNrSW5jcmVtZW50OigpPT54Xyx0aWNrU3RlcDooKT0+dGwsdGlja3M6KCk9PmFiLHRpbWVEYXk6KCk9PnR5LHRpbWVEYXlzOigpPT5YMnQsdGltZUZvcm1hdDooKT0+UzUsdGltZUZvcm1hdERlZmF1bHRMb2NhbGU6KCk9Pnc4LHRpbWVGb3JtYXRMb2NhbGU6KCk9Pnc1LHRpbWVGcmlkYXk6KCk9PmhYLHRpbWVGcmlkYXlzOigpPT5RMnQsdGltZUhvdXI6KCk9Pl84LHRpbWVIb3VyczooKT0+WTJ0LHRpbWVJbnRlcnZhbDooKT0+YnIsdGltZU1pbGxpc2Vjb25kOigpPT5aXyx0aW1lTWlsbGlzZWNvbmRzOigpPT5zWCx0aW1lTWludXRlOigpPT5nOCx0aW1lTWludXRlczooKT0+RzJ0LHRpbWVNb25kYXk6KCk9PnJ5LHRpbWVNb25kYXlzOigpPT4kMnQsdGltZU1vbnRoOigpPT55OCx0aW1lTW9udGhzOigpPT5yd3QsdGltZVBhcnNlOigpPT5TWCx0aW1lU2F0dXJkYXk6KCk9PmZYLHRpbWVTYXR1cmRheXM6KCk9PnR3dCx0aW1lU2Vjb25kOigpPT5RXyx0aW1lU2Vjb25kczooKT0+bFgsdGltZVN1bmRheTooKT0+cmcsdGltZVN1bmRheXM6KCk9PnBYLHRpbWVUaHVyc2RheTooKT0+enAsdGltZVRodXJzZGF5czooKT0+SjJ0LHRpbWVUdWVzZGF5OigpPT5jWCx0aW1lVHVlc2RheXM6KCk9PksydCx0aW1lV2VkbmVzZGF5OigpPT51WCx0aW1lV2VkbmVzZGF5czooKT0+WjJ0LHRpbWVXZWVrOigpPT5yZyx0aW1lV2Vla3M6KCk9PnBYLHRpbWVZZWFyOigpPT5HaCx0aW1lWWVhcnM6KCk9Pm53dCx0aW1lb3V0OigpPT5PRSx0aW1lcjooKT0+QV8sdGltZXJGbHVzaDooKT0+X1ksdG91Y2g6KCk9PlRwLHRvdWNoZXM6KCk9Pm55dCx0cmFuc2l0aW9uOigpPT5BTCx0cmFuc3Bvc2U6KCk9Plc5LHRyZWU6KCk9PmQydCx0cmVlbWFwOigpPT5tMnQsdHJlZW1hcEJpbmFyeTooKT0+ZzJ0LHRyZWVtYXBEaWNlOigpPT5VaCx0cmVlbWFwUmVzcXVhcmlmeTooKT0+eTJ0LHRyZWVtYXBTbGljZTooKT0+Sm0sdHJlZW1hcFNsaWNlRGljZTooKT0+XzJ0LHRyZWVtYXBTcXVhcmlmeTooKT0+aTgsdHN2OigpPT5OdnQsdHN2Rm9ybWF0OigpPT5TdnQsdHN2Rm9ybWF0Qm9keTooKT0+TXZ0LHRzdkZvcm1hdFJvdzooKT0+VHZ0LHRzdkZvcm1hdFJvd3M6KCk9PkV2dCx0c3ZGb3JtYXRWYWx1ZTooKT0+Q3Z0LHRzdlBhcnNlOigpPT5BYix0c3ZQYXJzZVJvd3M6KCk9Pnd2dCx1dGNEYXk6KCk9Pm55LHV0Y0RheXM6KCk9PmN3dCx1dGNGb3JtYXQ6KCk9PmF5LHV0Y0ZyaWRheTooKT0+X1gsdXRjRnJpZGF5czooKT0+ZHd0LHV0Y0hvdXI6KCk9Png4LHV0Y0hvdXJzOigpPT5zd3QsdXRjTWlsbGlzZWNvbmQ6KCk9PlpfLHV0Y01pbGxpc2Vjb25kczooKT0+c1gsdXRjTWludXRlOigpPT52OCx1dGNNaW51dGVzOigpPT5vd3QsdXRjTW9uZGF5OigpPT5veSx1dGNNb25kYXlzOigpPT51d3QsdXRjTW9udGg6KCk9PmI4LHV0Y01vbnRoczooKT0+X3d0LHV0Y1BhcnNlOigpPT5NNSx1dGNTYXR1cmRheTooKT0+eVgsdXRjU2F0dXJkYXlzOigpPT5td3QsdXRjU2Vjb25kOigpPT5RXyx1dGNTZWNvbmRzOigpPT5sWCx1dGNTdW5kYXk6KCk9Pm5nLHV0Y1N1bmRheXM6KCk9PnZYLHV0Y1RodXJzZGF5OigpPT5GcCx1dGNUaHVyc2RheXM6KCk9PnB3dCx1dGNUdWVzZGF5OigpPT5tWCx1dGNUdWVzZGF5czooKT0+aHd0LHV0Y1dlZG5lc2RheTooKT0+Z1gsdXRjV2VkbmVzZGF5czooKT0+Znd0LHV0Y1dlZWs6KCk9Pm5nLHV0Y1dlZWtzOigpPT52WCx1dGNZZWFyOigpPT5XaCx1dGNZZWFyczooKT0+eXd0LHZhbHVlczooKT0+bnZ0LHZhcmlhbmNlOigpPT5xOSx2ZXJzaW9uOigpPT5VMHQsdm9yb25vaTooKT0+VzN0LHdpbmRvdzooKT0+aGIseG1sOigpPT56dnQsemlwOigpPT5hX3Qsem9vbTooKT0+dFIsem9vbUlkZW50aXR5OigpPT5YaCx6b29tVHJhbnNmb3JtOigpPT5pMn0pO3ZhciBVMHQ9IjUuNy4wIjtmdW5jdGlvbiBvYShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBvYihlKXtyZXR1cm4gZS5sZW5ndGg9PT0xJiYoZT1uMmUoZSkpLHtsZWZ0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik8MD9uPW8rMTppPW99cmV0dXJuIG59LHJpZ2h0OmZ1bmN0aW9uKHQscixuLGkpe2ZvcihuPT1udWxsJiYobj0wKSxpPT1udWxsJiYoaT10Lmxlbmd0aCk7bjxpOyl7dmFyIG89bitpPj4+MTtlKHRbb10scik+MD9pPW86bj1vKzF9cmV0dXJuIG59fX1mdW5jdGlvbiBuMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG9hKGUodCkscil9fXZhciBxMHQ9b2Iob2EpLFlXPXEwdC5yaWdodCxHMHQ9cTB0LmxlZnQseXM9WVc7ZnVuY3Rpb24gVzB0KGUsdCl7dD09bnVsbCYmKHQ9alcpO2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPXQoaSxpPWVbKytyXSk7cmV0dXJuIG99ZnVuY3Rpb24galcoZSx0KXtyZXR1cm5bZSx0XX1mdW5jdGlvbiBVOShlLHQscil7dmFyIG49ZS5sZW5ndGgsaT10Lmxlbmd0aCxvPW5ldyBBcnJheShuKmkpLGEscyxsLGM7Zm9yKHI9PW51bGwmJihyPWpXKSxhPWw9MDthPG47KythKWZvcihjPWVbYV0scz0wO3M8aTsrK3MsKytsKW9bbF09cihjLHRbc10pO3JldHVybiBvfWZ1bmN0aW9uIFkwdChlLHQpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBRcyhlKXtyZXR1cm4gZT09PW51bGw/TmFOOitlfWZ1bmN0aW9uIHE5KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0wLGk9LTEsbz0wLGEscyxsPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihhPVFzKGVbaV0pKXx8KHM9YS1vLG8rPXMvKytuLGwrPXMqKGEtbykpO2Vsc2UgZm9yKDsrK2k8cjspaXNOYU4oYT1Rcyh0KGVbaV0saSxlKSkpfHwocz1hLW8sbys9cy8rK24sbCs9cyooYS1vKSk7aWYobj4xKXJldHVybiBsLyhuLTEpfWZ1bmN0aW9uIEc5KGUsdCl7dmFyIHI9cTkoZSx0KTtyZXR1cm4gciYmTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIGFhKGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG8sYTtpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPWVbbl0pIT1udWxsJiYobz5pJiYobz1pKSxhPGkmJihhPWkpKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1hPWk7KytuPHI7KShpPXQoZVtuXSxuLGUpKSE9bnVsbCYmKG8+aSYmKG89aSksYTxpJiYoYT1pKSk7cmV0dXJuW28sYV19dmFyIGowdD1BcnJheS5wcm90b3R5cGUsWDB0PWowdC5zbGljZSwkMHQ9ajB0Lm1hcDtmdW5jdGlvbiB4RShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gSzB0KGUpe3JldHVybiBlfWZ1bmN0aW9uIElyKGUsdCxyKXtlPStlLHQ9K3Qscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyh0PWUsZT0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPU1hdGgubWF4KDAsTWF0aC5jZWlsKCh0LWUpL3IpKXwwLG89bmV3IEFycmF5KGkpOysrbjxpOylvW25dPWUrbipyO3JldHVybiBvfXZhciBYVz1NYXRoLnNxcnQoNTApLCRXPU1hdGguc3FydCgxMCksS1c9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGFiKGUsdCxyKXt2YXIgbixpPS0xLG8sYSxzO2lmKHQ9K3QsZT0rZSxyPStyLGU9PT10JiZyPjApcmV0dXJuW2VdO2lmKChuPXQ8ZSkmJihvPWUsZT10LHQ9byksKHM9eF8oZSx0LHIpKT09PTB8fCFpc0Zpbml0ZShzKSlyZXR1cm5bXTtpZihzPjApZm9yKGU9TWF0aC5jZWlsKGUvcyksdD1NYXRoLmZsb29yKHQvcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwodC1lKzEpKTsrK2k8bzspYVtpXT0oZStpKSpzO2Vsc2UgZm9yKGU9TWF0aC5mbG9vcihlKnMpLHQ9TWF0aC5jZWlsKHQqcyksYT1uZXcgQXJyYXkobz1NYXRoLmNlaWwoZS10KzEpKTsrK2k8bzspYVtpXT0oZS1pKS9zO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfWZ1bmN0aW9uIHhfKGUsdCxyKXt2YXIgbj0odC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApLG89bi9NYXRoLnBvdygxMCxpKTtyZXR1cm4gaT49MD8obz49WFc/MTA6bz49JFc/NTpvPj1LVz8yOjEpKk1hdGgucG93KDEwLGkpOi1NYXRoLnBvdygxMCwtaSkvKG8+PVhXPzEwOm8+PSRXPzU6bz49S1c/MjoxKX1mdW5jdGlvbiB0bChlLHQscil7dmFyIG49TWF0aC5hYnModC1lKS9NYXRoLm1heCgwLHIpLGk9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTApKSxvPW4vaTtyZXR1cm4gbz49WFc/aSo9MTA6bz49JFc/aSo9NTpvPj1LVyYmKGkqPTIpLHQ8ZT8taTppfWZ1bmN0aW9uIHNiKGUpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2coZS5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIFowdCgpe3ZhciBlPUswdCx0PWFhLHI9c2I7ZnVuY3Rpb24gbihpKXt2YXIgbyxhPWkubGVuZ3RoLHMsbD1uZXcgQXJyYXkoYSk7Zm9yKG89MDtvPGE7KytvKWxbb109ZShpW29dLG8saSk7dmFyIGM9dChsKSx1PWNbMF0saD1jWzFdLGY9cihsLHUsaCk7QXJyYXkuaXNBcnJheShmKXx8KGY9dGwodSxoLGYpLGY9SXIoTWF0aC5jZWlsKHUvZikqZixoLGYpKTtmb3IodmFyIHA9Zi5sZW5ndGg7ZlswXTw9dTspZi5zaGlmdCgpLC0tcDtmb3IoO2ZbcC0xXT5oOylmLnBvcCgpLC0tcDt2YXIgZD1uZXcgQXJyYXkocCsxKSxnO2ZvcihvPTA7bzw9cDsrK28pZz1kW29dPVtdLGcueDA9bz4wP2Zbby0xXTp1LGcueDE9bzxwP2Zbb106aDtmb3Iobz0wO288YTsrK28pcz1sW29dLHU8PXMmJnM8PWgmJmRbeXMoZixzLDAscCldLnB1c2goaVtvXSk7cmV0dXJuIGR9cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTp4RShpKSxuKTplfSxuLmRvbWFpbj1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOnhFKFtpWzBdLGlbMV1dKSxuKTp0fSxuLnRocmVzaG9sZHM9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTpBcnJheS5pc0FycmF5KGkpP3hFKFgwdC5jYWxsKGkpKTp4RShpKSxuKTpyfSxufWZ1bmN0aW9uIHNhKGUsdCxyKXtpZihyPT1udWxsJiYocj1RcyksISEobj1lLmxlbmd0aCkpe2lmKCh0PSt0KTw9MHx8bjwyKXJldHVybityKGVbMF0sMCxlKTtpZih0Pj0xKXJldHVybityKGVbbi0xXSxuLTEsZSk7dmFyIG4saT0obi0xKSp0LG89TWF0aC5mbG9vcihpKSxhPStyKGVbb10sbyxlKSxzPStyKGVbbysxXSxvKzEsZSk7cmV0dXJuIGErKHMtYSkqKGktbyl9fWZ1bmN0aW9uIEowdChlLHQscil7cmV0dXJuIGU9JDB0LmNhbGwoZSxRcykuc29ydChvYSksTWF0aC5jZWlsKChyLXQpLygyKihzYShlLC43NSktc2EoZSwuMjUpKSpNYXRoLnBvdyhlLmxlbmd0aCwtMS8zKSkpfWZ1bmN0aW9uIFEwdChlLHQscil7cmV0dXJuIE1hdGguY2VpbCgoci10KS8oMy41Kkc5KGUpKk1hdGgucG93KGUubGVuZ3RoLC0xLzMpKSl9ZnVuY3Rpb24gbHUoZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbztpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmaT5vJiYobz1pKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJmk+byYmKG89aSk7cmV0dXJuIG99ZnVuY3Rpb24gdF90KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj1yLGk9LTEsbyxhPTA7aWYodD09bnVsbClmb3IoOysraTxyOylpc05hTihvPVFzKGVbaV0pKT8tLW46YSs9bztlbHNlIGZvcig7KytpPHI7KWlzTmFOKG89UXModChlW2ldLGksZSkpKT8tLW46YSs9bztpZihuKXJldHVybiBhL259ZnVuY3Rpb24gZV90KGUsdCl7dmFyIHI9ZS5sZW5ndGgsbj0tMSxpLG89W107aWYodD09bnVsbClmb3IoOysrbjxyOylpc05hTihpPVFzKGVbbl0pKXx8by5wdXNoKGkpO2Vsc2UgZm9yKDsrK248cjspaXNOYU4oaT1Rcyh0KGVbbl0sbixlKSkpfHxvLnB1c2goaSk7cmV0dXJuIHNhKG8uc29ydChvYSksLjUpfWZ1bmN0aW9uIEltKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG49LTEsaT0wLG8sYTsrK248dDspaSs9ZVtuXS5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KGkpOy0tdD49MDspZm9yKGE9ZVt0XSxyPWEubGVuZ3RoOy0tcj49MDspb1stLWldPWFbcl07cmV0dXJuIG99ZnVuY3Rpb24gTG0oZSx0KXt2YXIgcj1lLmxlbmd0aCxuPS0xLGksbztpZih0PT1udWxsKXtmb3IoOysrbjxyOylpZigoaT1lW25dKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT1lW25dKSE9bnVsbCYmbz5pJiYobz1pKX1lbHNlIGZvcig7KytuPHI7KWlmKChpPXQoZVtuXSxuLGUpKSE9bnVsbCYmaT49aSlmb3Iobz1pOysrbjxyOykoaT10KGVbbl0sbixlKSkhPW51bGwmJm8+aSYmKG89aSk7cmV0dXJuIG99ZnVuY3Rpb24gcl90KGUsdCl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT1lW3Rbcl1dO3JldHVybiBufWZ1bmN0aW9uIG5fdChlLHQpe2lmKCEhKHI9ZS5sZW5ndGgpKXt2YXIgcixuPTAsaT0wLG8sYT1lW2ldO2Zvcih0PT1udWxsJiYodD1vYSk7KytuPHI7KSh0KG89ZVtuXSxhKTwwfHx0KGEsYSkhPT0wKSYmKGE9byxpPW4pO2lmKHQoYSxhKT09PTApcmV0dXJuIGl9fWZ1bmN0aW9uIGlfdChlLHQscil7Zm9yKHZhciBuPShyPT1udWxsP2UubGVuZ3RoOnIpLSh0PXQ9PW51bGw/MDordCksaSxvO247KW89TWF0aC5yYW5kb20oKSpuLS18MCxpPWVbbit0XSxlW24rdF09ZVtvK3RdLGVbbyt0XT1pO3JldHVybiBlfWZ1bmN0aW9uIG9fdChlLHQpe3ZhciByPWUubGVuZ3RoLG49LTEsaSxvPTA7aWYodD09bnVsbClmb3IoOysrbjxyOykoaT0rZVtuXSkmJihvKz1pKTtlbHNlIGZvcig7KytuPHI7KShpPSt0KGVbbl0sbixlKSkmJihvKz1pKTtyZXR1cm4gb31mdW5jdGlvbiBXOShlKXtpZighKG89ZS5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgdD0tMSxyPUxtKGUsaTJlKSxuPW5ldyBBcnJheShyKTsrK3Q8cjspZm9yKHZhciBpPS0xLG8sYT1uW3RdPW5ldyBBcnJheShvKTsrK2k8bzspYVtpXT1lW2ldW3RdO3JldHVybiBufWZ1bmN0aW9uIGkyZShlKXtyZXR1cm4gZS5sZW5ndGh9ZnVuY3Rpb24gYV90KCl7cmV0dXJuIFc5KGFyZ3VtZW50cyl9dmFyIFk5PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBzX3QoZSl7cmV0dXJuIGV9dmFyIGo5PTEsWDk9MixaVz0zLGJFPTQsbF90PTFlLTY7ZnVuY3Rpb24gbzJlKGUpe3JldHVybiJ0cmFuc2xhdGUoIisoZSsuNSkrIiwwKSJ9ZnVuY3Rpb24gYTJlKGUpe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhlKy41KSsiKSJ9ZnVuY3Rpb24gczJlKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4rZSh0KX19ZnVuY3Rpb24gbDJlKGUpe3ZhciB0PU1hdGgubWF4KDAsZS5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiBlLnJvdW5kKCkmJih0PU1hdGgucm91bmQodCkpLGZ1bmN0aW9uKHIpe3JldHVybitlKHIpK3R9fWZ1bmN0aW9uIGMyZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiAkOShlLHQpe3ZhciByPVtdLG49bnVsbCxpPW51bGwsbz02LGE9NixzPTMsbD1lPT09ajl8fGU9PT1iRT8tMToxLGM9ZT09PWJFfHxlPT09WDk/IngiOiJ5Iix1PWU9PT1qOXx8ZT09PVpXP28yZTphMmU7ZnVuY3Rpb24gaChmKXt2YXIgcD1uPT1udWxsP3QudGlja3M/dC50aWNrcy5hcHBseSh0LHIpOnQuZG9tYWluKCk6bixkPWk9PW51bGw/dC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LHIpOnNfdDppLGc9TWF0aC5tYXgobywwKStzLF89dC5yYW5nZSgpLHk9K19bMF0rLjUseD0rX1tfLmxlbmd0aC0xXSsuNSxiPSh0LmJhbmR3aWR0aD9sMmU6czJlKSh0LmNvcHkoKSksUz1mLnNlbGVjdGlvbj9mLnNlbGVjdGlvbigpOmYsQz1TLnNlbGVjdEFsbCgiLmRvbWFpbiIpLmRhdGEoW251bGxdKSxQPVMuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCx0KS5vcmRlcigpLGs9UC5leGl0KCksTz1QLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksRD1QLnNlbGVjdCgibGluZSIpLEI9UC5zZWxlY3QoInRleHQiKTtDPUMubWVyZ2UoQy5lbnRlcigpLmluc2VydCgicGF0aCIsIi50aWNrIikuYXR0cigiY2xhc3MiLCJkb21haW4iKS5hdHRyKCJzdHJva2UiLCJjdXJyZW50Q29sb3IiKSksUD1QLm1lcmdlKE8pLEQ9RC5tZXJnZShPLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCpvKSksQj1CLm1lcmdlKE8uYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKmcpLmF0dHIoImR5IixlPT09ajk/IjBlbSI6ZT09PVpXPyIwLjcxZW0iOiIwLjMyZW0iKSksZiE9PVMmJihDPUMudHJhbnNpdGlvbihmKSxQPVAudHJhbnNpdGlvbihmKSxEPUQudHJhbnNpdGlvbihmKSxCPUIudHJhbnNpdGlvbihmKSxrPWsudHJhbnNpdGlvbihmKS5hdHRyKCJvcGFjaXR5IixsX3QpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oSSl7cmV0dXJuIGlzRmluaXRlKEk9YihJKSk/dShJKTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxPLmF0dHIoIm9wYWNpdHkiLGxfdCkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXt2YXIgTD10aGlzLnBhcmVudE5vZGUuX19heGlzO3JldHVybiB1KEwmJmlzRmluaXRlKEw9TChJKSk/TDpiKEkpKX0pKSxrLnJlbW92ZSgpLEMuYXR0cigiZCIsZT09PWJFfHxlPT1YOT9hPyJNIitsKmErIiwiK3krIkgwLjVWIit4KyJIIitsKmE6Ik0wLjUsIit5KyJWIit4OmE/Ik0iK3krIiwiK2wqYSsiVjAuNUgiK3grIlYiK2wqYToiTSIreSsiLDAuNUgiK3gpLFAuYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihJKXtyZXR1cm4gdShiKEkpKX0pLEQuYXR0cihjKyIyIixsKm8pLEIuYXR0cihjLGwqZykudGV4dChkKSxTLmZpbHRlcihjMmUpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigiZm9udC1zaXplIiwxMCkuYXR0cigiZm9udC1mYW1pbHkiLCJzYW5zLXNlcmlmIikuYXR0cigidGV4dC1hbmNob3IiLGU9PT1YOT8ic3RhcnQiOmU9PT1iRT8iZW5kIjoibWlkZGxlIiksUy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9Yn0pfXJldHVybiBoLnNjYWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWYsaCk6dH0saC50aWNrcz1mdW5jdGlvbigpe3JldHVybiByPVk5LmNhbGwoYXJndW1lbnRzKSxofSxoLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Zj09bnVsbD9bXTpZOS5jYWxsKGYpLGgpOnIuc2xpY2UoKX0saC50aWNrVmFsdWVzPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWY9PW51bGw/bnVsbDpZOS5jYWxsKGYpLGgpOm4mJm4uc2xpY2UoKX0saC50aWNrRm9ybWF0PWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWYsaCk6aX0saC50aWNrU2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1hPStmLGgpOm99LGgudGlja1NpemVJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rZixoKTpvfSxoLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9K2YsaCk6YX0saC50aWNrUGFkZGluZz1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rZixoKTpzfSxofWZ1bmN0aW9uIGNfdChlKXtyZXR1cm4gJDkoajksZSl9ZnVuY3Rpb24gdV90KGUpe3JldHVybiAkOShYOSxlKX1mdW5jdGlvbiBLOShlKXtyZXR1cm4gJDkoWlcsZSl9ZnVuY3Rpb24gbGIoZSl7cmV0dXJuICQ5KGJFLGUpfWttKCk7a20oKTt2YXIgSjk9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHdFPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpKOSx4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIFBoKGUpe3ZhciB0PWUrPSIiLHI9dC5pbmRleE9mKCI6Iik7cmV0dXJuIHI+PTAmJih0PWUuc2xpY2UoMCxyKSkhPT0ieG1sbnMiJiYoZT1lLnNsaWNlKHIrMSkpLHdFLmhhc093blByb3BlcnR5KHQpP3tzcGFjZTp3RVt0XSxsb2NhbDplfTplfWZ1bmN0aW9uIHAyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQscj10aGlzLm5hbWVzcGFjZVVSSTtyZXR1cm4gcj09PUo5JiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1KOT90LmNyZWF0ZUVsZW1lbnQoZSk6dC5jcmVhdGVFbGVtZW50TlMocixlKX19ZnVuY3Rpb24gZDJlKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIFJtKGUpe3ZhciB0PVBoKGUpO3JldHVybih0LmxvY2FsP2QyZTpwMmUpKHQpfWZ1bmN0aW9uIG0yZSgpe31mdW5jdGlvbiBObShlKXtyZXR1cm4gZT09bnVsbD9tMmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKGUpfX1mdW5jdGlvbiBkX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPU5tKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkociksaT0wO2k8cjsrK2kpZm9yKHZhciBvPXRbaV0sYT1vLmxlbmd0aCxzPW5baV09bmV3IEFycmF5KGEpLGwsYyx1PTA7dTxhOysrdSkobD1vW3VdKSYmKGM9ZS5jYWxsKGwsbC5fX2RhdGFfXyx1LG8pKSYmKCJfX2RhdGFfXyJpbiBsJiYoYy5fX2RhdGFfXz1sLl9fZGF0YV9fKSxzW3VdPWMpO3JldHVybiBuZXcgRG4obix0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBnMmUoKXtyZXR1cm5bXX1mdW5jdGlvbiBjYihlKXtyZXR1cm4gZT09bnVsbD9nMmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGUpfX1mdW5jdGlvbiBtX3QoZSl7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPWNiKGUpKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9dC5sZW5ndGgsbj1bXSxpPVtdLG89MDtvPHI7KytvKWZvcih2YXIgYT10W29dLHM9YS5sZW5ndGgsbCxjPTA7YzxzOysrYykobD1hW2NdKSYmKG4ucHVzaChlLmNhbGwobCxsLl9fZGF0YV9fLGMsYSkpLGkucHVzaChsKSk7cmV0dXJuIG5ldyBEbihuLGkpfWZ1bmN0aW9uIHViKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoZSl9fWZ1bmN0aW9uIGdfdChlKXt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9dWIoZSkpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMscj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSlmb3IodmFyIG89dFtpXSxhPW8ubGVuZ3RoLHM9bltpXT1bXSxsLGM9MDtjPGE7KytjKShsPW9bY10pJiZlLmNhbGwobCxsLl9fZGF0YV9fLGMsbykmJnMucHVzaChsKTtyZXR1cm4gbmV3IERuKG4sdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gUTkoZSl7cmV0dXJuIG5ldyBBcnJheShlLmxlbmd0aCl9ZnVuY3Rpb24gX190KCl7cmV0dXJuIG5ldyBEbih0aGlzLl9lbnRlcnx8dGhpcy5fZ3JvdXBzLm1hcChROSksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gU0UoZSx0KXt0aGlzLm93bmVyRG9jdW1lbnQ9ZS5vd25lckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWUubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9fZGF0YV9fPXR9U0UucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTRSxhcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShlLHQpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihlKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZSl9fTtmdW5jdGlvbiB5X3QoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fXZhciB2X3Q9IiQiO2Z1bmN0aW9uIF8yZShlLHQscixuLGksbyl7Zm9yKHZhciBhPTAscyxsPXQubGVuZ3RoLGM9by5sZW5ndGg7YTxjOysrYSkocz10W2FdKT8ocy5fX2RhdGFfXz1vW2FdLG5bYV09cyk6clthXT1uZXcgU0UoZSxvW2FdKTtmb3IoO2E8bDsrK2EpKHM9dFthXSkmJihpW2FdPXMpfWZ1bmN0aW9uIHkyZShlLHQscixuLGksbyxhKXt2YXIgcyxsLGM9e30sdT10Lmxlbmd0aCxoPW8ubGVuZ3RoLGY9bmV3IEFycmF5KHUpLHA7Zm9yKHM9MDtzPHU7KytzKShsPXRbc10pJiYoZltzXT1wPXZfdCthLmNhbGwobCxsLl9fZGF0YV9fLHMsdCkscCBpbiBjP2lbc109bDpjW3BdPWwpO2ZvcihzPTA7czxoOysrcylwPXZfdCthLmNhbGwoZSxvW3NdLHMsbyksKGw9Y1twXSk/KG5bc109bCxsLl9fZGF0YV9fPW9bc10sY1twXT1udWxsKTpyW3NdPW5ldyBTRShlLG9bc10pO2ZvcihzPTA7czx1OysrcykobD10W3NdKSYmY1tmW3NdXT09PWwmJihpW3NdPWwpfWZ1bmN0aW9uIHhfdChlLHQpe2lmKCFlKXJldHVybiBwPW5ldyBBcnJheSh0aGlzLnNpemUoKSksYz0tMSx0aGlzLmVhY2goZnVuY3Rpb24oUCl7cFsrK2NdPVB9KSxwO3ZhciByPXQ/eTJlOl8yZSxuPXRoaXMuX3BhcmVudHMsaT10aGlzLl9ncm91cHM7dHlwZW9mIGUhPSJmdW5jdGlvbiImJihlPXlfdChlKSk7Zm9yKHZhciBvPWkubGVuZ3RoLGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1uW2NdLGg9aVtjXSxmPWgubGVuZ3RoLHA9ZS5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLG4pLGQ9cC5sZW5ndGgsZz1zW2NdPW5ldyBBcnJheShkKSxfPWFbY109bmV3IEFycmF5KGQpLHk9bFtjXT1uZXcgQXJyYXkoZik7cih1LGgsZyxfLHkscCx0KTtmb3IodmFyIHg9MCxiPTAsUyxDO3g8ZDsrK3gpaWYoUz1nW3hdKXtmb3IoeD49YiYmKGI9eCsxKTshKEM9X1tiXSkmJisrYjxkOyk7Uy5fbmV4dD1DfHxudWxsfX1yZXR1cm4gYT1uZXcgRG4oYSxuKSxhLl9lbnRlcj1zLGEuX2V4aXQ9bCxhfWZ1bmN0aW9uIGJfdCgpe3JldHVybiBuZXcgRG4odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChROSksdGhpcy5fcGFyZW50cyl9ZnVuY3Rpb24gd190KGUsdCxyKXt2YXIgbj10aGlzLmVudGVyKCksaT10aGlzLG89dGhpcy5leGl0KCk7cmV0dXJuIG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZShuKTpuLmFwcGVuZChlKyIiKSx0IT1udWxsJiYoaT10KGkpKSxyPT1udWxsP28ucmVtb3ZlKCk6cihvKSxuJiZpP24ubWVyZ2UoaSkub3JkZXIoKTppfWZ1bmN0aW9uIFNfdChlKXtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgRG4oYSx0aGlzLl9wYXJlbnRzKX1mdW5jdGlvbiBNX3QoKXtmb3IodmFyIGU9dGhpcy5fZ3JvdXBzLHQ9LTEscj1lLmxlbmd0aDsrK3Q8cjspZm9yKHZhciBuPWVbdF0saT1uLmxlbmd0aC0xLG89bltpXSxhOy0taT49MDspKGE9bltpXSkmJihvJiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pXjQmJm8ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxvKSxvPWEpO3JldHVybiB0aGlzfWZ1bmN0aW9uIEVfdChlKXtlfHwoZT12MmUpO2Z1bmN0aW9uIHQoaCxmKXtyZXR1cm4gaCYmZj9lKGguX19kYXRhX18sZi5fX2RhdGFfXyk6IWgtIWZ9Zm9yKHZhciByPXRoaXMuX2dyb3VwcyxuPXIubGVuZ3RoLGk9bmV3IEFycmF5KG4pLG89MDtvPG47KytvKXtmb3IodmFyIGE9cltvXSxzPWEubGVuZ3RoLGw9aVtvXT1uZXcgQXJyYXkocyksYyx1PTA7dTxzOysrdSkoYz1hW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgRG4oaSx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfWZ1bmN0aW9uIHYyZShlLHQpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBUX3QoKXt2YXIgZT1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGUuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9ZnVuY3Rpb24gQ190KCl7dmFyIGU9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSx0PS0xO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtlWysrdF09dGhpc30pLGV9ZnVuY3Rpb24gQV90KCl7Zm9yKHZhciBlPXRoaXMuX2dyb3Vwcyx0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KWZvcih2YXIgbj1lW3RdLGk9MCxvPW4ubGVuZ3RoO2k8bzsrK2kpe3ZhciBhPW5baV07aWYoYSlyZXR1cm4gYX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBQX3QoKXt2YXIgZT0wO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsrK2V9KSxlfWZ1bmN0aW9uIElfdCgpe3JldHVybiF0aGlzLm5vZGUoKX1mdW5jdGlvbiBMX3QoZSl7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWZvcih2YXIgaT10W3JdLG89MCxhPWkubGVuZ3RoLHM7bzxhOysrbykocz1pW29dKSYmZS5jYWxsKHMscy5fX2RhdGFfXyxvLGkpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHgyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShlKX19ZnVuY3Rpb24gYjJlKGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKX19ZnVuY3Rpb24gdzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX19ZnVuY3Rpb24gUzJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdCl9fWZ1bmN0aW9uIE0yZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3I9PW51bGw/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6dGhpcy5zZXRBdHRyaWJ1dGUoZSxyKX19ZnVuY3Rpb24gRTJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cj09bnVsbD90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwscil9fWZ1bmN0aW9uIGtfdChlLHQpe3ZhciByPVBoKGUpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIG49dGhpcy5ub2RlKCk7cmV0dXJuIHIubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhyLnNwYWNlLHIubG9jYWwpOm4uZ2V0QXR0cmlidXRlKHIpfXJldHVybiB0aGlzLmVhY2goKHQ9PW51bGw/ci5sb2NhbD9iMmU6eDJlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3IubG9jYWw/RTJlOk0yZTpyLmxvY2FsP1MyZTp3MmUpKHIsdCkpfWZ1bmN0aW9uIGhiKGUpe3JldHVybiBlLm93bmVyRG9jdW1lbnQmJmUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8ZS5kb2N1bWVudCYmZXx8ZS5kZWZhdWx0Vmlld31mdW5jdGlvbiBUMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gQzJlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGUsdCxyKX19ZnVuY3Rpb24gQTJlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPT1udWxsP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLG4scil9fWZ1bmN0aW9uIFJfdChlLHQscil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/VDJlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP0EyZTpDMmUpKGUsdCxyPT1udWxsPyIiOnIpKTpTcCh0aGlzLm5vZGUoKSxlKX1mdW5jdGlvbiBTcChlLHQpe3JldHVybiBlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUodCl8fGhiKGUpLmdldENvbXB1dGVkU3R5bGUoZSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpfWZ1bmN0aW9uIFAyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tlXX19ZnVuY3Rpb24gSTJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tlXT10fX1mdW5jdGlvbiBMMmUoZSx0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyPT1udWxsP2RlbGV0ZSB0aGlzW2VdOnRoaXNbZV09cn19ZnVuY3Rpb24gTl90KGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKHQ9PW51bGw/UDJlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP0wyZTpJMmUpKGUsdCkpOnRoaXMubm9kZSgpW2VdfWZ1bmN0aW9uIERfdChlKXtyZXR1cm4gZS50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gSlcoZSl7cmV0dXJuIGUuY2xhc3NMaXN0fHxuZXcgT190KGUpfWZ1bmN0aW9uIE9fdChlKXt0aGlzLl9ub2RlPWUsdGhpcy5fbmFtZXM9RF90KGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9T190LnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2YoZSk7dDwwJiYodGhpcy5fbmFtZXMucHVzaChlKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbmFtZXMuaW5kZXhPZihlKTt0Pj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKHQsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YoZSk+PTB9fTtmdW5jdGlvbiB6X3QoZSx0KXtmb3IodmFyIHI9SlcoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLmFkZCh0W25dKX1mdW5jdGlvbiBGX3QoZSx0KXtmb3IodmFyIHI9SlcoZSksbj0tMSxpPXQubGVuZ3RoOysrbjxpOylyLnJlbW92ZSh0W25dKX1mdW5jdGlvbiBrMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7el90KHRoaXMsZSl9fWZ1bmN0aW9uIFIyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtGX3QodGhpcyxlKX19ZnVuY3Rpb24gTjJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpP3pfdDpGX3QpKHRoaXMsZSl9fWZ1bmN0aW9uIEJfdChlLHQpe3ZhciByPURfdChlKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1KVyh0aGlzLm5vZGUoKSksaT0tMSxvPXIubGVuZ3RoOysraTxvOylpZighbi5jb250YWlucyhyW2ldKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdD09ImZ1bmN0aW9uIj9OMmU6dD9rMmU6UjJlKShyLHQpKX1mdW5jdGlvbiBEMmUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIE8yZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWV9fWZ1bmN0aW9uIHoyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24gSF90KGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChlPT1udWxsP0QyZToodHlwZW9mIGU9PSJmdW5jdGlvbiI/ejJlOk8yZSkoZSkpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fWZ1bmN0aW9uIEYyZSgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEIyZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1lfX1mdW5jdGlvbiBIMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9dD09bnVsbD8iIjp0fX1mdW5jdGlvbiBWX3QoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGU9PW51bGw/RjJlOih0eXBlb2YgZT09ImZ1bmN0aW9uIj9IMmU6QjJlKShlKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfWZ1bmN0aW9uIFYyZSgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBVX3QoKXtyZXR1cm4gdGhpcy5lYWNoKFYyZSl9ZnVuY3Rpb24gVTJlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcV90KCl7cmV0dXJuIHRoaXMuZWFjaChVMmUpfWZ1bmN0aW9uIEdfdChlKXt2YXIgdD10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOlJtKGUpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfWZ1bmN0aW9uIHEyZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIFdfdChlLHQpe3ZhciByPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6Um0oZSksbj10PT1udWxsP3EyZTp0eXBlb2YgdD09ImZ1bmN0aW9uIj90Ok5tKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX1mdW5jdGlvbiBHMmUoKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBZX3QoKXtyZXR1cm4gdGhpcy5lYWNoKEcyZSl9ZnVuY3Rpb24gVzJlKCl7dmFyIGU9dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyk6ZX1mdW5jdGlvbiBZMmUoKXt2YXIgZT10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKTplfWZ1bmN0aW9uIGpfdChlKXtyZXR1cm4gdGhpcy5zZWxlY3QoZT9ZMmU6VzJlKX1mdW5jdGlvbiBYX3QoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGUpOnRoaXMubm9kZSgpLl9fZGF0YV9ffXZhciBLX3Q9e30scXQ9bnVsbDt0eXBlb2YgZG9jdW1lbnQhPSJ1bmRlZmluZWQiJiYoJF90PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwib25tb3VzZWVudGVyImluICRfdHx8KEtfdD17bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9KSk7dmFyICRfdDtmdW5jdGlvbiBqMmUoZSx0LHIpe3JldHVybiBlPVpfdChlLHQsciksZnVuY3Rpb24obil7dmFyIGk9bi5yZWxhdGVkVGFyZ2V0OyghaXx8aSE9PXRoaXMmJiEoaS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSY4KSkmJmUuY2FsbCh0aGlzLG4pfX1mdW5jdGlvbiBaX3QoZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1xdDtxdD1uO3RyeXtlLmNhbGwodGhpcyx0aGlzLl9fZGF0YV9fLHQscil9ZmluYWxseXtxdD1pfX19ZnVuY3Rpb24gWDJlKGUpe3JldHVybiBlLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24odCl7dmFyIHI9IiIsbj10LmluZGV4T2YoIi4iKTtyZXR1cm4gbj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx7dHlwZTp0LG5hbWU6cn19KX1mdW5jdGlvbiAkMmUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fX29uO2lmKCEhdCl7Zm9yKHZhciByPTAsbj0tMSxpPXQubGVuZ3RoLG87cjxpOysrcilvPXRbcl0sKCFlLnR5cGV8fG8udHlwZT09PWUudHlwZSkmJm8ubmFtZT09PWUubmFtZT90aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTp0Wysrbl09bzsrK24/dC5sZW5ndGg9bjpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gSzJlKGUsdCxyKXt2YXIgbj1LX3QuaGFzT3duUHJvcGVydHkoZS50eXBlKT9qMmU6Wl90O3JldHVybiBmdW5jdGlvbihpLG8sYSl7dmFyIHM9dGhpcy5fX29uLGwsYz1uKHQsbyxhKTtpZihzKXtmb3IodmFyIHU9MCxoPXMubGVuZ3RoO3U8aDsrK3UpaWYoKGw9c1t1XSkudHlwZT09PWUudHlwZSYmbC5uYW1lPT09ZS5uYW1lKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXIsbC5jYXB0dXJlKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobC50eXBlLGwubGlzdGVuZXI9YyxsLmNhcHR1cmU9ciksbC52YWx1ZT10O3JldHVybn19dGhpcy5hZGRFdmVudExpc3RlbmVyKGUudHlwZSxjLHIpLGw9e3R5cGU6ZS50eXBlLG5hbWU6ZS5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOnJ9LHM/cy5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIEpfdChlLHQscil7dmFyIG49WDJlKGUrIiIpLGksbz1uLmxlbmd0aCxhO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHM9dGhpcy5ub2RlKCkuX19vbjtpZihzKXtmb3IodmFyIGw9MCxjPXMubGVuZ3RoLHU7bDxjOysrbClmb3IoaT0wLHU9c1tsXTtpPG87KytpKWlmKChhPW5baV0pLnR5cGU9PT11LnR5cGUmJmEubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX1yZXR1cm59Zm9yKHM9dD9LMmU6JDJlLHI9PW51bGwmJihyPSExKSxpPTA7aTxvOysraSl0aGlzLmVhY2gocyhuW2ldLHQscikpO3JldHVybiB0aGlzfWZ1bmN0aW9uIE1wKGUsdCxyLG4pe3ZhciBpPXF0O2Uuc291cmNlRXZlbnQ9cXQscXQ9ZTt0cnl7cmV0dXJuIHQuYXBwbHkocixuKX1maW5hbGx5e3F0PWl9fWZ1bmN0aW9uIFFfdChlLHQscil7dmFyIG49aGIoZSksaT1uLkN1c3RvbUV2ZW50O3R5cGVvZiBpPT0iZnVuY3Rpb24iP2k9bmV3IGkodCxyKTooaT1uLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLHI/KGkuaW5pdEV2ZW50KHQsci5idWJibGVzLHIuY2FuY2VsYWJsZSksaS5kZXRhaWw9ci5kZXRhaWwpOmkuaW5pdEV2ZW50KHQsITEsITEpKSxlLmRpc3BhdGNoRXZlbnQoaSl9ZnVuY3Rpb24gWjJlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFFfdCh0aGlzLGUsdCl9fWZ1bmN0aW9uIEoyZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBRX3QodGhpcyxlLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19ZnVuY3Rpb24gdHl0KGUsdCl7cmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHQ9PSJmdW5jdGlvbiI/SjJlOloyZSkoZSx0KSl9dmFyIE1FPVtudWxsXTtmdW5jdGlvbiBEbihlLHQpe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dH1mdW5jdGlvbiBleXQoKXtyZXR1cm4gbmV3IERuKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sTUUpfURuLnByb3RvdHlwZT1leXQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpEbixzZWxlY3Q6ZF90LHNlbGVjdEFsbDptX3QsZmlsdGVyOmdfdCxkYXRhOnhfdCxlbnRlcjpfX3QsZXhpdDpiX3Qsam9pbjp3X3QsbWVyZ2U6U190LG9yZGVyOk1fdCxzb3J0OkVfdCxjYWxsOlRfdCxub2RlczpDX3Qsbm9kZTpBX3Qsc2l6ZTpQX3QsZW1wdHk6SV90LGVhY2g6TF90LGF0dHI6a190LHN0eWxlOlJfdCxwcm9wZXJ0eTpOX3QsY2xhc3NlZDpCX3QsdGV4dDpIX3QsaHRtbDpWX3QscmFpc2U6VV90LGxvd2VyOnFfdCxhcHBlbmQ6R190LGluc2VydDpXX3QscmVtb3ZlOllfdCxjbG9uZTpqX3QsZGF0dW06WF90LG9uOkpfdCxkaXNwYXRjaDp0eXR9O3ZhciBJaD1leXQ7ZnVuY3Rpb24gSHQoZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgRG4oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGUpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBEbihbW2VdXSxNRSl9ZnVuY3Rpb24gcnl0KGUpe3JldHVybiBIdChSbShlKS5jYWxsKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpfXZhciBRMmU9MDtmdW5jdGlvbiB0TCgpe3JldHVybiBuZXcgUVd9ZnVuY3Rpb24gUVcoKXt0aGlzLl89IkAiKygrK1EyZSkudG9TdHJpbmcoMzYpfVFXLnByb3RvdHlwZT10TC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlFXLGdldDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fOyEodCBpbiBlKTspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlW3RdfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0aGlzLl9dPXR9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fIGluIGUmJmRlbGV0ZSBlW3RoaXMuX119LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX319O2Z1bmN0aW9uIGZiKCl7Zm9yKHZhciBlPXF0LHQ7dD1lLnNvdXJjZUV2ZW50OyllPXQ7cmV0dXJuIGV9ZnVuY3Rpb24gRG0oZSx0KXt2YXIgcj1lLm93bmVyU1ZHRWxlbWVudHx8ZTtpZihyLmNyZWF0ZVNWR1BvaW50KXt2YXIgbj1yLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIG4ueD10LmNsaWVudFgsbi55PXQuY2xpZW50WSxuPW4ubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSxbbi54LG4ueV19dmFyIGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5jbGllbnRYLWkubGVmdC1lLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLWUuY2xpZW50VG9wXX1mdW5jdGlvbiB6byhlKXt2YXIgdD1mYigpO3JldHVybiB0LmNoYW5nZWRUb3VjaGVzJiYodD10LmNoYW5nZWRUb3VjaGVzWzBdKSxEbShlLHQpfWZ1bmN0aW9uIEVwKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/bmV3IERuKFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGUpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IERuKFtlPT1udWxsP1tdOmVdLE1FKX1mdW5jdGlvbiBUcChlLHQscil7YXJndW1lbnRzLmxlbmd0aDwzJiYocj10LHQ9ZmIoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBuPTAsaT10P3QubGVuZ3RoOjAsbztuPGk7KytuKWlmKChvPXRbbl0pLmlkZW50aWZpZXI9PT1yKXJldHVybiBEbShlLG8pO3JldHVybiBudWxsfWZ1bmN0aW9uIG55dChlLHQpe3Q9PW51bGwmJih0PWZiKCkudG91Y2hlcyk7Zm9yKHZhciByPTAsbj10P3QubGVuZ3RoOjAsaT1uZXcgQXJyYXkobik7cjxuOysrcilpW3JdPURtKGUsdFtyXSk7cmV0dXJuIGl9ZnVuY3Rpb24gZUwoKXtxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBPbSgpe3F0LnByZXZlbnREZWZhdWx0KCkscXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gem0oZSl7dmFyIHQ9ZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQscj1IdChlKS5vbigiZHJhZ3N0YXJ0LmRyYWciLE9tLCEwKTsib25zZWxlY3RzdGFydCJpbiB0P3Iub24oInNlbGVjdHN0YXJ0LmRyYWciLE9tLCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBGbShlLHQpe3ZhciByPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG49SHQoZSkub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYobi5vbigiY2xpY2suZHJhZyIsT20sITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtuLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIHI/bi5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KHIuc3R5bGUuTW96VXNlclNlbGVjdD1yLl9fbm9zZWxlY3QsZGVsZXRlIHIuX19ub3NlbGVjdCl9ZnVuY3Rpb24gRUUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIFRFKGUsdCxyLG4saSxvLGEscyxsLGMpe3RoaXMudGFyZ2V0PWUsdGhpcy50eXBlPXQsdGhpcy5zdWJqZWN0PXIsdGhpcy5pZGVudGlmaWVyPW4sdGhpcy5hY3RpdmU9aSx0aGlzLng9byx0aGlzLnk9YSx0aGlzLmR4PXMsdGhpcy5keT1sLHRoaXMuXz1jfVRFLnByb3RvdHlwZS5vbj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuXy5vbi5hcHBseSh0aGlzLl8sYXJndW1lbnRzKTtyZXR1cm4gZT09PXRoaXMuXz90aGlzOmV9O2Z1bmN0aW9uIHR3ZSgpe3JldHVybiFxdC5jdHJsS2V5JiYhcXQuYnV0dG9ufWZ1bmN0aW9uIGV3ZSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGV9ZnVuY3Rpb24gcndlKGUpe3JldHVybiBlPT1udWxsP3t4OnF0LngseTpxdC55fTplfWZ1bmN0aW9uIG53ZSgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBwYigpe3ZhciBlPXR3ZSx0PWV3ZSxyPXJ3ZSxuPW53ZSxpPXt9LG89dnMoInN0YXJ0IiwiZHJhZyIsImVuZCIpLGE9MCxzLGwsYyx1LGg9MDtmdW5jdGlvbiBmKFMpe1Mub24oIm1vdXNlZG93bi5kcmFnIixwKS5maWx0ZXIobikub24oInRvdWNoc3RhcnQuZHJhZyIsXykub24oInRvdWNobW92ZS5kcmFnIix5KS5vbigidG91Y2hlbmQuZHJhZyB0b3VjaGNhbmNlbC5kcmFnIix4KS5zdHlsZSgidG91Y2gtYWN0aW9uIiwibm9uZSIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gcCgpe2lmKCEodXx8IWUuYXBwbHkodGhpcyxhcmd1bWVudHMpKSl7dmFyIFM9YigibW91c2UiLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHpvLHRoaXMsYXJndW1lbnRzKTshU3x8KEh0KHF0LnZpZXcpLm9uKCJtb3VzZW1vdmUuZHJhZyIsZCwhMCkub24oIm1vdXNldXAuZHJhZyIsZywhMCksem0ocXQudmlldyksZUwoKSxjPSExLHM9cXQuY2xpZW50WCxsPXF0LmNsaWVudFksUygic3RhcnQiKSl9fWZ1bmN0aW9uIGQoKXtpZihPbSgpLCFjKXt2YXIgUz1xdC5jbGllbnRYLXMsQz1xdC5jbGllbnRZLWw7Yz1TKlMrQypDPmh9aS5tb3VzZSgiZHJhZyIpfWZ1bmN0aW9uIGcoKXtIdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLmRyYWcgbW91c2V1cC5kcmFnIixudWxsKSxGbShxdC52aWV3LGMpLE9tKCksaS5tb3VzZSgiZW5kIil9ZnVuY3Rpb24gXygpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBTPXF0LmNoYW5nZWRUb3VjaGVzLEM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksUD1TLmxlbmd0aCxrLE87Zm9yKGs9MDtrPFA7KytrKShPPWIoU1trXS5pZGVudGlmaWVyLEMsVHAsdGhpcyxhcmd1bWVudHMpKSYmKGVMKCksTygic3RhcnQiKSl9fWZ1bmN0aW9uIHkoKXt2YXIgUz1xdC5jaGFuZ2VkVG91Y2hlcyxDPVMubGVuZ3RoLFAsaztmb3IoUD0wO1A8QzsrK1ApKGs9aVtTW1BdLmlkZW50aWZpZXJdKSYmKE9tKCksaygiZHJhZyIpKX1mdW5jdGlvbiB4KCl7dmFyIFM9cXQuY2hhbmdlZFRvdWNoZXMsQz1TLmxlbmd0aCxQLGs7Zm9yKHUmJmNsZWFyVGltZW91dCh1KSx1PXNldFRpbWVvdXQoZnVuY3Rpb24oKXt1PW51bGx9LDUwMCksUD0wO1A8QzsrK1ApKGs9aVtTW1BdLmlkZW50aWZpZXJdKSYmKGVMKCksaygiZW5kIikpfWZ1bmN0aW9uIGIoUyxDLFAsayxPKXt2YXIgRD1QKEMsUyksQixJLEwsUj1vLmNvcHkoKTtpZighIU1wKG5ldyBURShmLCJiZWZvcmVzdGFydCIsQixTLGEsRFswXSxEWzFdLDAsMCxSKSxmdW5jdGlvbigpe3JldHVybihxdC5zdWJqZWN0PUI9ci5hcHBseShrLE8pKT09bnVsbD8hMTooST1CLngtRFswXXx8MCxMPUIueS1EWzFdfHwwLCEwKX0pKXJldHVybiBmdW5jdGlvbiBGKHope3ZhciBVPUQsVztzd2l0Y2goeil7Y2FzZSJzdGFydCI6aVtTXT1GLFc9YSsrO2JyZWFrO2Nhc2UiZW5kIjpkZWxldGUgaVtTXSwtLWE7Y2FzZSJkcmFnIjpEPVAoQyxTKSxXPWE7YnJlYWt9TXAobmV3IFRFKGYseixCLFMsVyxEWzBdK0ksRFsxXStMLERbMF0tVVswXSxEWzFdLVVbMV0sUiksUi5hcHBseSxSLFt6LGssT10pfX1yZXR1cm4gZi5maWx0ZXI9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIFM9PSJmdW5jdGlvbiI/UzpFRSghIVMpLGYpOmV9LGYuY29udGFpbmVyPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6RUUoUyksZik6dH0sZi5zdWJqZWN0PWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBTPT0iZnVuY3Rpb24iP1M6RUUoUyksZik6cn0sZi50b3VjaGFibGU9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIFM9PSJmdW5jdGlvbiI/UzpFRSghIVMpLGYpOm59LGYub249ZnVuY3Rpb24oKXt2YXIgUz1vLm9uLmFwcGx5KG8sYXJndW1lbnRzKTtyZXR1cm4gUz09PW8/ZjpTfSxmLmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oUyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9KFM9K1MpKlMsZik6TWF0aC5zcXJ0KGgpfSxmfWZ1bmN0aW9uIENwKGUsdCxyKXtlLnByb3RvdHlwZT10LnByb3RvdHlwZT1yLHIuY29uc3RydWN0b3I9ZX1mdW5jdGlvbiBCbShlLHQpe3ZhciByPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpO2Zvcih2YXIgbiBpbiB0KXJbbl09dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBSaCgpe312YXIgSG09LjcsYl89MS9IbSxkYj0iXFxzKihbKy1dP1xcZCspXFxzKiIsQ0U9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsa2g9IlxccyooWystXT9cXGQqXFwuP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLGl3ZT0vXiMoWzAtOWEtZl17Myw4fSkkLyxvd2U9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2RiLGRiLGRiXSsiXFwpJCIpLGF3ZT1uZXcgUmVnRXhwKCJecmdiXFwoIitba2gsa2gsa2hdKyJcXCkkIiksc3dlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitbZGIsZGIsZGIsQ0VdKyJcXCkkIiksbHdlPW5ldyBSZWdFeHAoIl5yZ2JhXFwoIitba2gsa2gsa2gsQ0VdKyJcXCkkIiksY3dlPW5ldyBSZWdFeHAoIl5oc2xcXCgiK1tDRSxraCxraF0rIlxcKSQiKSx1d2U9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1tDRSxraCxraCxDRV0rIlxcKSQiKSxpeXQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07Q3AoUmgscmMse2NvcHk6ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxlKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6b3l0LGZvcm1hdEhleDpveXQsZm9ybWF0SHNsOmh3ZSxmb3JtYXRSZ2I6YXl0LHRvU3RyaW5nOmF5dH0pO2Z1bmN0aW9uIG95dCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGh3ZSgpe3JldHVybiBoeXQodGhpcykuZm9ybWF0SHNsKCl9ZnVuY3Rpb24gYXl0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gcmMoZSl7dmFyIHQscjtyZXR1cm4gZT0oZSsiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKHQ9aXdlLmV4ZWMoZSkpPyhyPXRbMV0ubGVuZ3RoLHQ9cGFyc2VJbnQodFsxXSwxNikscj09PTY/c3l0KHQpOnI9PT0zP25ldyBLaSh0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8dCYyNDAsKHQmMTUpPDw0fHQmMTUsMSk6cj09PTg/ckwodD4+MjQmMjU1LHQ+PjE2JjI1NSx0Pj44JjI1NSwodCYyNTUpLzI1NSk6cj09PTQ/ckwodD4+MTImMTV8dD4+OCYyNDAsdD4+OCYxNXx0Pj40JjI0MCx0Pj40JjE1fHQmMjQwLCgodCYxNSk8PDR8dCYxNSkvMjU1KTpudWxsKToodD1vd2UuZXhlYyhlKSk/bmV3IEtpKHRbMV0sdFsyXSx0WzNdLDEpOih0PWF3ZS5leGVjKGUpKT9uZXcgS2kodFsxXSoyNTUvMTAwLHRbMl0qMjU1LzEwMCx0WzNdKjI1NS8xMDAsMSk6KHQ9c3dlLmV4ZWMoZSkpP3JMKHRbMV0sdFsyXSx0WzNdLHRbNF0pOih0PWx3ZS5leGVjKGUpKT9yTCh0WzFdKjI1NS8xMDAsdFsyXSoyNTUvMTAwLHRbM10qMjU1LzEwMCx0WzRdKToodD1jd2UuZXhlYyhlKSk/dXl0KHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsMSk6KHQ9dXdlLmV4ZWMoZSkpP3V5dCh0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF0pOml5dC5oYXNPd25Qcm9wZXJ0eShlKT9zeXQoaXl0W2VdKTplPT09InRyYW5zcGFyZW50Ij9uZXcgS2koTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBzeXQoZSl7cmV0dXJuIG5ldyBLaShlPj4xNiYyNTUsZT4+OCYyNTUsZSYyNTUsMSl9ZnVuY3Rpb24gckwoZSx0LHIsbil7cmV0dXJuIG48PTAmJihlPXQ9cj1OYU4pLG5ldyBLaShlLHQscixuKX1mdW5jdGlvbiBBRShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFJofHwoZT1yYyhlKSksZT8oZT1lLnJnYigpLG5ldyBLaShlLnIsZS5nLGUuYixlLm9wYWNpdHkpKTpuZXcgS2l9ZnVuY3Rpb24gY3UoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP0FFKGUpOm5ldyBLaShlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gS2koZSx0LHIsbil7dGhpcy5yPStlLHRoaXMuZz0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufUNwKEtpLGN1LEJtKFJoLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT1lPT1udWxsP2JfOk1hdGgucG93KGJfLGUpLG5ldyBLaSh0aGlzLnIqZSx0aGlzLmcqZSx0aGlzLmIqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9IbTpNYXRoLnBvdyhIbSxlKSxuZXcgS2kodGhpcy5yKmUsdGhpcy5nKmUsdGhpcy5iKmUsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpseXQsZm9ybWF0SGV4Omx5dCxmb3JtYXRSZ2I6Y3l0LHRvU3RyaW5nOmN5dH0pKTtmdW5jdGlvbiBseXQoKXtyZXR1cm4iIyIrdFkodGhpcy5yKSt0WSh0aGlzLmcpK3RZKHRoaXMuYil9ZnVuY3Rpb24gY3l0KCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoZT09PTE/IikiOiIsICIrZSsiKSIpfWZ1bmN0aW9uIHRZKGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoZSl8fDApKSwoZTwxNj8iMCI6IiIpK2UudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIHV5dChlLHQscixuKXtyZXR1cm4gbjw9MD9lPXQ9cj1OYU46cjw9MHx8cj49MT9lPXQ9TmFOOnQ8PTAmJihlPU5hTiksbmV3IExoKGUsdCxyLG4pfWZ1bmN0aW9uIGh5dChlKXtpZihlIGluc3RhbmNlb2YgTGgpcmV0dXJuIG5ldyBMaChlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiBSaHx8KGU9cmMoZSkpLCFlKXJldHVybiBuZXcgTGg7aWYoZSBpbnN0YW5jZW9mIExoKXJldHVybiBlO2U9ZS5yZ2IoKTt2YXIgdD1lLnIvMjU1LHI9ZS5nLzI1NSxuPWUuYi8yNTUsaT1NYXRoLm1pbih0LHIsbiksbz1NYXRoLm1heCh0LHIsbiksYT1OYU4scz1vLWksbD0obytpKS8yO3JldHVybiBzPyh0PT09bz9hPShyLW4pL3MrKHI8bikqNjpyPT09bz9hPShuLXQpL3MrMjphPSh0LXIpL3MrNCxzLz1sPC41P28raToyLW8taSxhKj02MCk6cz1sPjAmJmw8MT8wOmEsbmV3IExoKGEscyxsLGUub3BhY2l0eSl9ZnVuY3Rpb24gVm0oZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP2h5dChlKTpuZXcgTGgoZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIExoKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1DcChMaCxWbSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgTGgodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9IbTpNYXRoLnBvdyhIbSxlKSxuZXcgTGgodGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmglMzYwKyh0aGlzLmg8MCkqMzYwLHQ9aXNOYU4oZSl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSp0LGk9MipyLW47cmV0dXJuIG5ldyBLaShlWShlPj0yNDA/ZS0yNDA6ZSsxMjAsaSxuKSxlWShlLGksbiksZVkoZTwxMjA/ZSsyNDA6ZS0xMjAsaSxuKSx0aGlzLm9wYWNpdHkpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcGFjaXR5O3JldHVybiBlPWlzTmFOKGUpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGUpKSwoZT09PTE/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrKHRoaXMuc3x8MCkqMTAwKyIlLCAiKyh0aGlzLmx8fDApKjEwMCsiJSIrKGU9PT0xPyIpIjoiLCAiK2UrIikiKX19KSk7ZnVuY3Rpb24gZVkoZSx0LHIpe3JldHVybihlPDYwP3QrKHItdCkqZS82MDplPDE4MD9yOmU8MjQwP3QrKHItdCkqKDI0MC1lKS82MDp0KSoyNTV9dmFyIG5MPU1hdGguUEkvMTgwLGlMPTE4MC9NYXRoLlBJO3ZhciBvTD0xOCxmeXQ9Ljk2NDIyLHB5dD0xLGR5dD0uODI1MjEsbXl0PTQvMjksbWI9Ni8yOSxneXQ9MyptYiptYixmd2U9bWIqbWIqbWI7ZnVuY3Rpb24gX3l0KGUpe2lmKGUgaW5zdGFuY2VvZiB1dSlyZXR1cm4gbmV3IHV1KGUubCxlLmEsZS5iLGUub3BhY2l0eSk7aWYoZSBpbnN0YW5jZW9mIE5oKXJldHVybiBieXQoZSk7ZSBpbnN0YW5jZW9mIEtpfHwoZT1BRShlKSk7dmFyIHQ9b1koZS5yKSxyPW9ZKGUuZyksbj1vWShlLmIpLGk9clkoKC4yMjI1MDQ1KnQrLjcxNjg3ODYqcisuMDYwNjE2OSpuKS9weXQpLG8sYTtyZXR1cm4gdD09PXImJnI9PT1uP289YT1pOihvPXJZKCguNDM2MDc0Nyp0Ky4zODUwNjQ5KnIrLjE0MzA4MDQqbikvZnl0KSxhPXJZKCguMDEzOTMyMip0Ky4wOTcxMDQ1KnIrLjcxNDE3MzMqbikvZHl0KSksbmV3IHV1KDExNippLTE2LDUwMCooby1pKSwyMDAqKGktYSksZS5vcGFjaXR5KX1mdW5jdGlvbiB5eXQoZSx0KXtyZXR1cm4gbmV3IHV1KGUsMCwwLHQ9PW51bGw/MTp0KX1mdW5jdGlvbiB3XyhlLHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/X3l0KGUpOm5ldyB1dShlLHQscixuPT1udWxsPzE6bil9ZnVuY3Rpb24gdXUoZSx0LHIsbil7dGhpcy5sPStlLHRoaXMuYT0rdCx0aGlzLmI9K3IsdGhpcy5vcGFjaXR5PStufUNwKHV1LHdfLEJtKFJoLHticmlnaHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IHV1KHRoaXMubCtvTCooZT09bnVsbD8xOmUpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdXUodGhpcy5sLW9MKihlPT1udWxsPzE6ZSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT0odGhpcy5sKzE2KS8xMTYsdD1pc05hTih0aGlzLmEpP2U6ZSt0aGlzLmEvNTAwLHI9aXNOYU4odGhpcy5iKT9lOmUtdGhpcy5iLzIwMDtyZXR1cm4gdD1meXQqblkodCksZT1weXQqblkoZSkscj1keXQqblkociksbmV3IEtpKGlZKDMuMTMzODU2MSp0LTEuNjE2ODY2NyplLS40OTA2MTQ2KnIpLGlZKC0uOTc4NzY4NCp0KzEuOTE2MTQxNSplKy4wMzM0NTQqciksaVkoLjA3MTk0NTMqdC0uMjI4OTkxNCplKzEuNDA1MjQyNypyKSx0aGlzLm9wYWNpdHkpfX0pKTtmdW5jdGlvbiByWShlKXtyZXR1cm4gZT5md2U/TWF0aC5wb3coZSwxLzMpOmUvZ3l0K215dH1mdW5jdGlvbiBuWShlKXtyZXR1cm4gZT5tYj9lKmUqZTpneXQqKGUtbXl0KX1mdW5jdGlvbiBpWShlKXtyZXR1cm4gMjU1KihlPD0uMDAzMTMwOD8xMi45MiplOjEuMDU1Kk1hdGgucG93KGUsMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIG9ZKGUpe3JldHVybihlLz0yNTUpPD0uMDQwNDU/ZS8xMi45MjpNYXRoLnBvdygoZSsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIHZ5dChlKXtpZihlIGluc3RhbmNlb2YgTmgpcmV0dXJuIG5ldyBOaChlLmgsZS5jLGUubCxlLm9wYWNpdHkpO2lmKGUgaW5zdGFuY2VvZiB1dXx8KGU9X3l0KGUpKSxlLmE9PT0wJiZlLmI9PT0wKXJldHVybiBuZXcgTmgoTmFOLDA8ZS5sJiZlLmw8MTAwPzA6TmFOLGUubCxlLm9wYWNpdHkpO3ZhciB0PU1hdGguYXRhbjIoZS5iLGUuYSkqaUw7cmV0dXJuIG5ldyBOaCh0PDA/dCszNjA6dCxNYXRoLnNxcnQoZS5hKmUuYStlLmIqZS5iKSxlLmwsZS5vcGFjaXR5KX1mdW5jdGlvbiB4eXQoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3Z5dChlKTpuZXcgTmgocix0LGUsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIGdiKGUsdCxyLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT92eXQoZSk6bmV3IE5oKGUsdCxyLG49PW51bGw/MTpuKX1mdW5jdGlvbiBOaChlLHQscixuKXt0aGlzLmg9K2UsdGhpcy5jPSt0LHRoaXMubD0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gYnl0KGUpe2lmKGlzTmFOKGUuaCkpcmV0dXJuIG5ldyB1dShlLmwsMCwwLGUub3BhY2l0eSk7dmFyIHQ9ZS5oKm5MO3JldHVybiBuZXcgdXUoZS5sLE1hdGguY29zKHQpKmUuYyxNYXRoLnNpbih0KSplLmMsZS5vcGFjaXR5KX1DcChOaCxnYixCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBOaCh0aGlzLmgsdGhpcy5jLHRoaXMubCtvTCooZT09bnVsbD8xOmUpLHRoaXMub3BhY2l0eSl9LGRhcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IE5oKHRoaXMuaCx0aGlzLmMsdGhpcy5sLW9MKihlPT1udWxsPzE6ZSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIGJ5dCh0aGlzKS5yZ2IoKX19KSk7dmFyIEV5dD0tLjE0ODYxLGFZPTEuNzgyNzcsc1k9LS4yOTIyNyxhTD0tLjkwNjQ5LFBFPTEuOTcyOTQsd3l0PVBFKmFMLFN5dD1QRSphWSxNeXQ9YVkqc1ktYUwqRXl0O2Z1bmN0aW9uIHB3ZShlKXtpZihlIGluc3RhbmNlb2YgU18pcmV0dXJuIG5ldyBTXyhlLmgsZS5zLGUubCxlLm9wYWNpdHkpO2UgaW5zdGFuY2VvZiBLaXx8KGU9QUUoZSkpO3ZhciB0PWUuci8yNTUscj1lLmcvMjU1LG49ZS5iLzI1NSxpPShNeXQqbit3eXQqdC1TeXQqcikvKE15dCt3eXQtU3l0KSxvPW4taSxhPShQRSooci1pKS1zWSpvKS9hTCxzPU1hdGguc3FydChhKmErbypvKS8oUEUqaSooMS1pKSksbD1zP01hdGguYXRhbjIoYSxvKSppTC0xMjA6TmFOO3JldHVybiBuZXcgU18obDwwP2wrMzYwOmwscyxpLGUub3BhY2l0eSl9ZnVuY3Rpb24gbGEoZSx0LHIsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0xP3B3ZShlKTpuZXcgU18oZSx0LHIsbj09bnVsbD8xOm4pfWZ1bmN0aW9uIFNfKGUsdCxyLG4pe3RoaXMuaD0rZSx0aGlzLnM9K3QsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1DcChTXyxsYSxCbShSaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9iXzpNYXRoLnBvdyhiXyxlKSxuZXcgU18odGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT09bnVsbD9IbTpNYXRoLnBvdyhIbSxlKSxuZXcgU18odGhpcy5oLHRoaXMucyx0aGlzLmwqZSx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgZT1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKm5MLHQ9K3RoaXMubCxyPWlzTmFOKHRoaXMucyk/MDp0aGlzLnMqdCooMS10KSxuPU1hdGguY29zKGUpLGk9TWF0aC5zaW4oZSk7cmV0dXJuIG5ldyBLaSgyNTUqKHQrciooRXl0Km4rYVkqaSkpLDI1NSoodCtyKihzWSpuK2FMKmkpKSwyNTUqKHQrciooUEUqbikpLHRoaXMub3BhY2l0eSl9fSkpO2Z1bmN0aW9uIGxZKGUsdCxyLG4saSl7dmFyIG89ZSplLGE9byplO3JldHVybigoMS0zKmUrMypvLWEpKnQrKDQtNipvKzMqYSkqcisoMSszKmUrMypvLTMqYSkqbithKmkpLzZ9ZnVuY3Rpb24gc0woZSl7dmFyIHQ9ZS5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49cjw9MD9yPTA6cj49MT8ocj0xLHQtMSk6TWF0aC5mbG9vcihyKnQpLGk9ZVtuXSxvPWVbbisxXSxhPW4+MD9lW24tMV06MippLW8scz1uPHQtMT9lW24rMl06MipvLWk7cmV0dXJuIGxZKChyLW4vdCkqdCxhLGksbyxzKX19ZnVuY3Rpb24gbEwoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPU1hdGguZmxvb3IoKChyJT0xKTwwPysrcjpyKSp0KSxpPWVbKG4rdC0xKSV0XSxvPWVbbiV0XSxhPWVbKG4rMSkldF0scz1lWyhuKzIpJXRdO3JldHVybiBsWSgoci1uL3QpKnQsaSxvLGEscyl9fWZ1bmN0aW9uIF9iKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBUeXQoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUrcip0fX1mdW5jdGlvbiBkd2UoZSx0LHIpe3JldHVybiBlPU1hdGgucG93KGUsciksdD1NYXRoLnBvdyh0LHIpLWUscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KGUrbip0LHIpfX1mdW5jdGlvbiBVbShlLHQpe3ZhciByPXQtZTtyZXR1cm4gcj9UeXQoZSxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOl9iKGlzTmFOKGUpP3Q6ZSl9ZnVuY3Rpb24gQ3l0KGUpe3JldHVybihlPStlKT09MT9abjpmdW5jdGlvbih0LHIpe3JldHVybiByLXQ/ZHdlKHQscixlKTpfYihpc05hTih0KT9yOnQpfX1mdW5jdGlvbiBabihlLHQpe3ZhciByPXQtZTtyZXR1cm4gcj9UeXQoZSxyKTpfYihpc05hTihlKT90OmUpfXZhciBxbT1mdW5jdGlvbiBlKHQpe3ZhciByPUN5dCh0KTtmdW5jdGlvbiBuKGksbyl7dmFyIGE9cigoaT1jdShpKSkuciwobz1jdShvKSkucikscz1yKGkuZyxvLmcpLGw9cihpLmIsby5iKSxjPVpuKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5yPWEodSksaS5nPXModSksaS5iPWwodSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9ZSxufSgxKTtmdW5jdGlvbiBBeXQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9bmV3IEFycmF5KHIpLG89bmV3IEFycmF5KHIpLGEscztmb3IoYT0wO2E8cjsrK2Epcz1jdSh0W2FdKSxuW2FdPXMucnx8MCxpW2FdPXMuZ3x8MCxvW2FdPXMuYnx8MDtyZXR1cm4gbj1lKG4pLGk9ZShpKSxvPWUobykscy5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIHMucj1uKGwpLHMuZz1pKGwpLHMuYj1vKGwpLHMrIiJ9fX12YXIgY0w9QXl0KHNMKSxQeXQ9QXl0KGxMKTtmdW5jdGlvbiB5YihlLHQpe3R8fCh0PVtdKTt2YXIgcj1lP01hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTowLG49dC5zbGljZSgpLGk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihpPTA7aTxyOysraSluW2ldPWVbaV0qKDEtbykrdFtpXSpvO3JldHVybiBufX1mdW5jdGlvbiB1TChlKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGUpJiYhKGUgaW5zdGFuY2VvZiBEYXRhVmlldyl9ZnVuY3Rpb24gSXl0KGUsdCl7cmV0dXJuKHVMKHQpP3liOmNZKShlLHQpfWZ1bmN0aW9uIGNZKGUsdCl7dmFyIHI9dD90Lmxlbmd0aDowLG49ZT9NYXRoLm1pbihyLGUubGVuZ3RoKTowLGk9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KHIpLGE7Zm9yKGE9MDthPG47KythKWlbYV09bmMoZVthXSx0W2FdKTtmb3IoO2E8cjsrK2Epb1thXT10W2FdO3JldHVybiBmdW5jdGlvbihzKXtmb3IoYT0wO2E8bjsrK2Epb1thXT1pW2FdKHMpO3JldHVybiBvfX1mdW5jdGlvbiBoTChlLHQpe3ZhciByPW5ldyBEYXRlO3JldHVybiBlPStlLHQ9K3QsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZShlKigxLW4pK3Qqbikscn19ZnVuY3Rpb24gemkoZSx0KXtyZXR1cm4gZT0rZSx0PSt0LGZ1bmN0aW9uKHIpe3JldHVybiBlKigxLXIpK3Qqcn19ZnVuY3Rpb24gZkwoZSx0KXt2YXIgcj17fSxuPXt9LGk7KGU9PT1udWxsfHx0eXBlb2YgZSE9Im9iamVjdCIpJiYoZT17fSksKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpJiYodD17fSk7Zm9yKGkgaW4gdClpIGluIGU/cltpXT1uYyhlW2ldLHRbaV0pOm5baV09dFtpXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKGkgaW4gciluW2ldPXJbaV0obyk7cmV0dXJuIG59fXZhciBoWT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csdVk9bmV3IFJlZ0V4cChoWS5zb3VyY2UsImciKTtmdW5jdGlvbiBtd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGd3ZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodCkrIiJ9fWZ1bmN0aW9uIHZiKGUsdCl7dmFyIHI9aFkubGFzdEluZGV4PXVZLmxhc3RJbmRleD0wLG4saSxvLGE9LTEscz1bXSxsPVtdO2ZvcihlPWUrIiIsdD10KyIiOyhuPWhZLmV4ZWMoZSkpJiYoaT11WS5leGVjKHQpKTspKG89aS5pbmRleCk+ciYmKG89dC5zbGljZShyLG8pLHNbYV0/c1thXSs9bzpzWysrYV09byksKG49blswXSk9PT0oaT1pWzBdKT9zW2FdP3NbYV0rPWk6c1srK2FdPWk6KHNbKythXT1udWxsLGwucHVzaCh7aTphLHg6emkobixpKX0pKSxyPXVZLmxhc3RJbmRleDtyZXR1cm4gcjx0Lmxlbmd0aCYmKG89dC5zbGljZShyKSxzW2FdP3NbYV0rPW86c1srK2FdPW8pLHMubGVuZ3RoPDI/bFswXT9nd2UobFswXS54KTptd2UodCk6KHQ9bC5sZW5ndGgsZnVuY3Rpb24oYyl7Zm9yKHZhciB1PTAsaDt1PHQ7Kyt1KXNbKGg9bFt1XSkuaV09aC54KGMpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gbmMoZSx0KXt2YXIgcj10eXBlb2YgdCxuO3JldHVybiB0PT1udWxsfHxyPT09ImJvb2xlYW4iP19iKHQpOihyPT09Im51bWJlciI/emk6cj09PSJzdHJpbmciPyhuPXJjKHQpKT8odD1uLHFtKTp2Yjp0IGluc3RhbmNlb2YgcmM/cW06dCBpbnN0YW5jZW9mIERhdGU/aEw6dUwodCk/eWI6QXJyYXkuaXNBcnJheSh0KT9jWTp0eXBlb2YgdC52YWx1ZU9mIT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZyE9ImZ1bmN0aW9uInx8aXNOYU4odCk/Zkw6emkpKGUsdCl9ZnVuY3Rpb24gTHl0KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKHQtMSxNYXRoLmZsb29yKHIqdCkpKV19fWZ1bmN0aW9uIGt5dChlLHQpe3ZhciByPVVtKCtlLCt0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9cihuKTtyZXR1cm4gaS0zNjAqTWF0aC5mbG9vcihpLzM2MCl9fWZ1bmN0aW9uIHBMKGUsdCl7cmV0dXJuIGU9K2UsdD0rdCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZChlKigxLXIpK3Qqcil9fXZhciBSeXQ9MTgwL01hdGguUEksZEw9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gZlkoZSx0LHIsbixpLG8pe3ZhciBhLHMsbDtyZXR1cm4oYT1NYXRoLnNxcnQoZSplK3QqdCkpJiYoZS89YSx0Lz1hKSwobD1lKnIrdCpuKSYmKHItPWUqbCxuLT10KmwpLChzPU1hdGguc3FydChyKnIrbipuKSkmJihyLz1zLG4vPXMsbC89cyksZSpuPHQqciYmKGU9LWUsdD0tdCxsPS1sLGE9LWEpLHt0cmFuc2xhdGVYOmksdHJhbnNsYXRlWTpvLHJvdGF0ZTpNYXRoLmF0YW4yKHQsZSkqUnl0LHNrZXdYOk1hdGguYXRhbihsKSpSeXQsc2NhbGVYOmEsc2NhbGVZOnN9fXZhciBJRSxwWSxOeXQsbUw7ZnVuY3Rpb24gRHl0KGUpe3JldHVybiBlPT09Im5vbmUiP2RMOihJRXx8KElFPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHBZPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxOeXQ9ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLElFLnN0eWxlLnRyYW5zZm9ybT1lLGU9Tnl0LmdldENvbXB1dGVkU3R5bGUocFkuYXBwZW5kQ2hpbGQoSUUpLG51bGwpLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLHBZLnJlbW92ZUNoaWxkKElFKSxlPWUuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSxmWSgrZVswXSwrZVsxXSwrZVsyXSwrZVszXSwrZVs0XSwrZVs1XSkpfWZ1bmN0aW9uIE95dChlKXtyZXR1cm4gZT09bnVsbD9kTDoobUx8fChtTD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxtTC5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsZSksKGU9bUwudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/KGU9ZS5tYXRyaXgsZlkoZS5hLGUuYixlLmMsZS5kLGUuZSxlLmYpKTpkTCl9ZnVuY3Rpb24genl0KGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifWZ1bmN0aW9uIG8oYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxyKTtkLnB1c2goe2k6Zy00LHg6emkoYyxoKX0se2k6Zy0yLHg6emkodSxmKX0pfWVsc2UoaHx8ZikmJnAucHVzaCgidHJhbnNsYXRlKCIraCt0K2Yrcil9ZnVuY3Rpb24gYShjLHUsaCxmKXtjIT09dT8oYy11PjE4MD91Kz0zNjA6dS1jPjE4MCYmKGMrPTM2MCksZi5wdXNoKHtpOmgucHVzaChpKGgpKyJyb3RhdGUoIixudWxsLG4pLTIseDp6aShjLHUpfSkpOnUmJmgucHVzaChpKGgpKyJyb3RhdGUoIit1K24pfWZ1bmN0aW9uIHMoYyx1LGgsZil7YyE9PXU/Zi5wdXNoKHtpOmgucHVzaChpKGgpKyJza2V3WCgiLG51bGwsbiktMix4OnppKGMsdSl9KTp1JiZoLnB1c2goaShoKSsic2tld1goIit1K24pfWZ1bmN0aW9uIGwoYyx1LGgsZixwLGQpe2lmKGMhPT1ofHx1IT09Zil7dmFyIGc9cC5wdXNoKGkocCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO2QucHVzaCh7aTpnLTQseDp6aShjLGgpfSx7aTpnLTIseDp6aSh1LGYpfSl9ZWxzZShoIT09MXx8ZiE9PTEpJiZwLnB1c2goaShwKSsic2NhbGUoIitoKyIsIitmKyIpIil9cmV0dXJuIGZ1bmN0aW9uKGMsdSl7dmFyIGg9W10sZj1bXTtyZXR1cm4gYz1lKGMpLHU9ZSh1KSxvKGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxoLGYpLGEoYy5yb3RhdGUsdS5yb3RhdGUsaCxmKSxzKGMuc2tld1gsdS5za2V3WCxoLGYpLGwoYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksaCxmKSxjPXU9bnVsbCxmdW5jdGlvbihwKXtmb3IodmFyIGQ9LTEsZz1mLmxlbmd0aCxfOysrZDxnOyloWyhfPWZbZF0pLmldPV8ueChwKTtyZXR1cm4gaC5qb2luKCIiKX19fXZhciBnTD16eXQoRHl0LCJweCwgIiwicHgpIiwiZGVnKSIpLF9MPXp5dChPeXQsIiwgIiwiKSIsIikiKTt2YXIgTEU9TWF0aC5TUVJUMixkWT0yLEZ5dD00LF93ZT0xZS0xMjtmdW5jdGlvbiBCeXQoZSl7cmV0dXJuKChlPU1hdGguZXhwKGUpKSsxL2UpLzJ9ZnVuY3Rpb24geXdlKGUpe3JldHVybigoZT1NYXRoLmV4cChlKSktMS9lKS8yfWZ1bmN0aW9uIHZ3ZShlKXtyZXR1cm4oKGU9TWF0aC5leHAoMiplKSktMSkvKGUrMSl9ZnVuY3Rpb24geUwoZSx0KXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sbz10WzBdLGE9dFsxXSxzPXRbMl0sbD1vLXIsYz1hLW4sdT1sKmwrYypjLGgsZjtpZih1PF93ZSlmPU1hdGgubG9nKHMvaSkvTEUsaD1mdW5jdGlvbih4KXtyZXR1cm5bcit4Kmwsbit4KmMsaSpNYXRoLmV4cChMRSp4KmYpXX07ZWxzZXt2YXIgcD1NYXRoLnNxcnQodSksZD0ocypzLWkqaStGeXQqdSkvKDIqaSpkWSpwKSxnPShzKnMtaSppLUZ5dCp1KS8oMipzKmRZKnApLF89TWF0aC5sb2coTWF0aC5zcXJ0KGQqZCsxKS1kKSx5PU1hdGgubG9nKE1hdGguc3FydChnKmcrMSktZyk7Zj0oeS1fKS9MRSxoPWZ1bmN0aW9uKHgpe3ZhciBiPXgqZixTPUJ5dChfKSxDPWkvKGRZKnApKihTKnZ3ZShMRSpiK18pLXl3ZShfKSk7cmV0dXJuW3IrQypsLG4rQypjLGkqUy9CeXQoTEUqYitfKV19fXJldHVybiBoLmR1cmF0aW9uPWYqMWUzLGh9ZnVuY3Rpb24gSHl0KGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUoKHQ9Vm0odCkpLmgsKHI9Vm0ocikpLmgpLGk9Wm4odC5zLHIucyksbz1abih0Lmwsci5sKSxhPVpuKHQub3BhY2l0eSxyLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gdC5oPW4ocyksdC5zPWkocyksdC5sPW8ocyksdC5vcGFjaXR5PWEocyksdCsiIn19fXZhciBWeXQ9SHl0KFVtKSxVeXQ9SHl0KFpuKTtmdW5jdGlvbiBNXyhlLHQpe3ZhciByPVpuKChlPXdfKGUpKS5sLCh0PXdfKHQpKS5sKSxuPVpuKGUuYSx0LmEpLGk9Wm4oZS5iLHQuYiksbz1abihlLm9wYWNpdHksdC5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGUubD1yKGEpLGUuYT1uKGEpLGUuYj1pKGEpLGUub3BhY2l0eT1vKGEpLGUrIiJ9fWZ1bmN0aW9uIHF5dChlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKCh0PWdiKHQpKS5oLChyPWdiKHIpKS5oKSxpPVpuKHQuYyxyLmMpLG89Wm4odC5sLHIubCksYT1abih0Lm9wYWNpdHksci5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHQuaD1uKHMpLHQuYz1pKHMpLHQubD1vKHMpLHQub3BhY2l0eT1hKHMpLHQrIiJ9fX12YXIgR3l0PXF5dChVbSksV3l0PXF5dChabik7ZnVuY3Rpb24gWXl0KGUpe3JldHVybiBmdW5jdGlvbiB0KHIpe3I9K3I7ZnVuY3Rpb24gbihpLG8pe3ZhciBhPWUoKGk9bGEoaSkpLmgsKG89bGEobykpLmgpLHM9Wm4oaS5zLG8ucyksbD1abihpLmwsby5sKSxjPVpuKGkub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gaS5oPWEodSksaS5zPXModSksaS5sPWwoTWF0aC5wb3codSxyKSksaS5vcGFjaXR5PWModSksaSsiIn19cmV0dXJuIG4uZ2FtbWE9dCxufSgxKX12YXIganl0PVl5dChVbSksRV89WXl0KFpuKTtmdW5jdGlvbiBtWShlLHQpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGgtMSxpPXRbMF0sbz1uZXcgQXJyYXkobjwwPzA6bik7cjxuOylvW3JdPWUoaSxpPXRbKytyXSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBzPU1hdGgubWF4KDAsTWF0aC5taW4obi0xLE1hdGguZmxvb3IoYSo9bikpKTtyZXR1cm4gb1tzXShhLXMpfX1mdW5jdGlvbiBYeXQoZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZShuLyh0LTEpKTtyZXR1cm4gcn1rbSgpO3ZhciB4Yj0wLFJFPTAsa0U9MCxLeXQ9MWUzLHZMLE5FLHhMPTAsVF89MCxiTD0wLERFPXR5cGVvZiBwZXJmb3JtYW5jZT09Im9iamVjdCImJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLFp5dD10eXBlb2Ygd2luZG93PT0ib2JqZWN0IiYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTcpfTtmdW5jdGlvbiBBcCgpe3JldHVybiBUX3x8KFp5dCh4d2UpLFRfPURFLm5vdygpK2JMKX1mdW5jdGlvbiB4d2UoKXtUXz0wfWZ1bmN0aW9uIENfKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1DXy5wcm90b3R5cGU9QV8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDXyxyZXN0YXJ0OmZ1bmN0aW9uKGUsdCxyKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO3I9KHI9PW51bGw/QXAoKTorcikrKHQ9PW51bGw/MDordCksIXRoaXMuX25leHQmJk5FIT09dGhpcyYmKE5FP05FLl9uZXh0PXRoaXM6dkw9dGhpcyxORT10aGlzKSx0aGlzLl9jYWxsPWUsdGhpcy5fdGltZT1yLGdZKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGdZKCkpfX07ZnVuY3Rpb24gQV8oZSx0LHIpe3ZhciBuPW5ldyBDXztyZXR1cm4gbi5yZXN0YXJ0KGUsdCxyKSxufWZ1bmN0aW9uIF9ZKCl7QXAoKSwrK3hiO2Zvcih2YXIgZT12TCx0O2U7KSh0PVRfLWUuX3RpbWUpPj0wJiZlLl9jYWxsLmNhbGwobnVsbCx0KSxlPWUuX25leHQ7LS14Yn1mdW5jdGlvbiAkeXQoKXtUXz0oeEw9REUubm93KCkpK2JMLHhiPVJFPTA7dHJ5e19ZKCl9ZmluYWxseXt4Yj0wLHd3ZSgpLFRfPTB9fWZ1bmN0aW9uIGJ3ZSgpe3ZhciBlPURFLm5vdygpLHQ9ZS14TDt0Pkt5dCYmKGJMLT10LHhMPWUpfWZ1bmN0aW9uIHd3ZSgpe2Zvcih2YXIgZSx0PXZMLHIsbj0xLzA7dDspdC5fY2FsbD8obj50Ll90aW1lJiYobj10Ll90aW1lKSxlPXQsdD10Ll9uZXh0KToocj10Ll9uZXh0LHQuX25leHQ9bnVsbCx0PWU/ZS5fbmV4dD1yOnZMPXIpO05FPWUsZ1kobil9ZnVuY3Rpb24gZ1koZSl7aWYoIXhiKXtSRSYmKFJFPWNsZWFyVGltZW91dChSRSkpO3ZhciB0PWUtVF87dD4yND8oZTwxLzAmJihSRT1zZXRUaW1lb3V0KCR5dCxlLURFLm5vdygpLWJMKSksa0UmJihrRT1jbGVhckludGVydmFsKGtFKSkpOihrRXx8KHhMPURFLm5vdygpLGtFPXNldEludGVydmFsKGJ3ZSxLeXQpKSx4Yj0xLFp5dCgkeXQpKX19ZnVuY3Rpb24gT0UoZSx0LHIpe3ZhciBuPW5ldyBDXztyZXR1cm4gdD10PT1udWxsPzA6K3Qsbi5yZXN0YXJ0KGZ1bmN0aW9uKGkpe24uc3RvcCgpLGUoaSt0KX0sdCxyKSxufWZ1bmN0aW9uIEp5dChlLHQscil7dmFyIG49bmV3IENfLGk9dDtyZXR1cm4gdD09bnVsbD8obi5yZXN0YXJ0KGUsdCxyKSxuKToodD0rdCxyPXI9PW51bGw/QXAoKTorcixuLnJlc3RhcnQoZnVuY3Rpb24gbyhhKXthKz1pLG4ucmVzdGFydChvLGkrPXQsciksZShhKX0sdCxyKSxuKX12YXIgU3dlPXZzKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLE13ZT1bXSx0MXQ9MCxTTD0xLE1MPTIsd0w9MyxReXQ9NCxFTD01LHpFPTY7ZnVuY3Rpb24gR20oZSx0LHIsbixpLG8pe3ZhciBhPWUuX190cmFuc2l0aW9uO2lmKCFhKWUuX190cmFuc2l0aW9uPXt9O2Vsc2UgaWYociBpbiBhKXJldHVybjtFd2UoZSxyLHtuYW1lOnQsaW5kZXg6bixncm91cDppLG9uOlN3ZSx0d2VlbjpNd2UsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6dDF0fSl9ZnVuY3Rpb24gRkUoZSx0KXt2YXIgcj1aaShlLHQpO2lmKHIuc3RhdGU+dDF0KXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIHJ9ZnVuY3Rpb24gT2EoZSx0KXt2YXIgcj1aaShlLHQpO2lmKHIuc3RhdGU+d0wpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIHJ9ZnVuY3Rpb24gWmkoZSx0KXt2YXIgcj1lLl9fdHJhbnNpdGlvbjtpZighcnx8IShyPXJbdF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gcn1mdW5jdGlvbiBFd2UoZSx0LHIpe3ZhciBuPWUuX190cmFuc2l0aW9uLGk7blt0XT1yLHIudGltZXI9QV8obywwLHIudGltZSk7ZnVuY3Rpb24gbyhjKXtyLnN0YXRlPVNMLHIudGltZXIucmVzdGFydChhLHIuZGVsYXksci50aW1lKSxyLmRlbGF5PD1jJiZhKGMtci5kZWxheSl9ZnVuY3Rpb24gYShjKXt2YXIgdSxoLGYscDtpZihyLnN0YXRlIT09U0wpcmV0dXJuIGwoKTtmb3IodSBpbiBuKWlmKHA9blt1XSxwLm5hbWU9PT1yLm5hbWUpe2lmKHAuc3RhdGU9PT13TClyZXR1cm4gT0UoYSk7cC5zdGF0ZT09PVF5dD8ocC5zdGF0ZT16RSxwLnRpbWVyLnN0b3AoKSxwLm9uLmNhbGwoImludGVycnVwdCIsZSxlLl9fZGF0YV9fLHAuaW5kZXgscC5ncm91cCksZGVsZXRlIG5bdV0pOit1PHQmJihwLnN0YXRlPXpFLHAudGltZXIuc3RvcCgpLHAub24uY2FsbCgiY2FuY2VsIixlLGUuX19kYXRhX18scC5pbmRleCxwLmdyb3VwKSxkZWxldGUgblt1XSl9aWYoT0UoZnVuY3Rpb24oKXtyLnN0YXRlPT09d0wmJihyLnN0YXRlPVF5dCxyLnRpbWVyLnJlc3RhcnQocyxyLmRlbGF5LHIudGltZSkscyhjKSl9KSxyLnN0YXRlPU1MLHIub24uY2FsbCgic3RhcnQiLGUsZS5fX2RhdGFfXyxyLmluZGV4LHIuZ3JvdXApLHIuc3RhdGU9PT1NTCl7Zm9yKHIuc3RhdGU9d0wsaT1uZXcgQXJyYXkoZj1yLnR3ZWVuLmxlbmd0aCksdT0wLGg9LTE7dTxmOysrdSkocD1yLnR3ZWVuW3VdLnZhbHVlLmNhbGwoZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCkpJiYoaVsrK2hdPXApO2kubGVuZ3RoPWgrMX19ZnVuY3Rpb24gcyhjKXtmb3IodmFyIHU9YzxyLmR1cmF0aW9uP3IuZWFzZS5jYWxsKG51bGwsYy9yLmR1cmF0aW9uKTooci50aW1lci5yZXN0YXJ0KGwpLHIuc3RhdGU9RUwsMSksaD0tMSxmPWkubGVuZ3RoOysraDxmOylpW2hdLmNhbGwoZSx1KTtyLnN0YXRlPT09RUwmJihyLm9uLmNhbGwoImVuZCIsZSxlLl9fZGF0YV9fLHIuaW5kZXgsci5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7ci5zdGF0ZT16RSxyLnRpbWVyLnN0b3AoKSxkZWxldGUgblt0XTtmb3IodmFyIGMgaW4gbilyZXR1cm47ZGVsZXRlIGUuX190cmFuc2l0aW9ufX1mdW5jdGlvbiBodShlLHQpe3ZhciByPWUuX190cmFuc2l0aW9uLG4saSxvPSEwLGE7aWYoISFyKXt0PXQ9PW51bGw/bnVsbDp0KyIiO2ZvcihhIGluIHIpe2lmKChuPXJbYV0pLm5hbWUhPT10KXtvPSExO2NvbnRpbnVlfWk9bi5zdGF0ZT5NTCYmbi5zdGF0ZTxFTCxuLnN0YXRlPXpFLG4udGltZXIuc3RvcCgpLG4ub24uY2FsbChpPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGUsZS5fX2RhdGFfXyxuLmluZGV4LG4uZ3JvdXApLGRlbGV0ZSByW2FdfW8mJmRlbGV0ZSBlLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gZTF0KGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtodSh0aGlzLGUpfSl9ZnVuY3Rpb24gVHdlKGUsdCl7dmFyIHIsbjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaT1PYSh0aGlzLGUpLG89aS50d2VlbjtpZihvIT09cil7bj1yPW87Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKWlmKG5bYV0ubmFtZT09PXQpe249bi5zbGljZSgpLG4uc3BsaWNlKGEsMSk7YnJlYWt9fWkudHdlZW49bn19ZnVuY3Rpb24gQ3dlKGUsdCxyKXt2YXIgbixpO2lmKHR5cGVvZiByIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1PYSh0aGlzLGUpLGE9by50d2VlbjtpZihhIT09bil7aT0obj1hKS5zbGljZSgpO2Zvcih2YXIgcz17bmFtZTp0LHZhbHVlOnJ9LGw9MCxjPWkubGVuZ3RoO2w8YzsrK2wpaWYoaVtsXS5uYW1lPT09dCl7aVtsXT1zO2JyZWFrfWw9PT1jJiZpLnB1c2gocyl9by50d2Vlbj1pfX1mdW5jdGlvbiByMXQoZSx0KXt2YXIgcj10aGlzLl9pZDtpZihlKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgbj1aaSh0aGlzLm5vZGUoKSxyKS50d2VlbixpPTAsbz1uLmxlbmd0aCxhO2k8bzsrK2kpaWYoKGE9bltpXSkubmFtZT09PWUpcmV0dXJuIGEudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgodD09bnVsbD9Ud2U6Q3dlKShyLGUsdCkpfWZ1bmN0aW9uIGJiKGUsdCxyKXt2YXIgbj1lLl9pZDtyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9T2EodGhpcyxuKTsoaS52YWx1ZXx8KGkudmFsdWU9e30pKVt0XT1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGkpe3JldHVybiBaaShpLG4pLnZhbHVlW3RdfX1mdW5jdGlvbiBUTChlLHQpe3ZhciByO3JldHVybih0eXBlb2YgdD09Im51bWJlciI/emk6dCBpbnN0YW5jZW9mIHJjP3FtOihyPXJjKHQpKT8odD1yLHFtKTp2YikoZSx0KX1mdW5jdGlvbiBBd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9fWZ1bmN0aW9uIFB3ZShlKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9fWZ1bmN0aW9uIEl3ZShlLHQscil7dmFyIG4saT1yKyIiLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSk7cmV0dXJuIGE9PT1pP251bGw6YT09PW4/bzpvPXQobj1hLHIpfX1mdW5jdGlvbiBMd2UoZSx0LHIpe3ZhciBuLGk9cisiIixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTtyZXR1cm4gYT09PWk/bnVsbDphPT09bj9vOm89dChuPWEscil9fWZ1bmN0aW9uIGt3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9cih0aGlzKSxsO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSk6KGE9dGhpcy5nZXRBdHRyaWJ1dGUoZSksbD1zKyIiLGE9PT1sP251bGw6YT09PW4mJmw9PT1pP286KGk9bCxvPXQobj1hLHMpKSl9fWZ1bmN0aW9uIFJ3ZShlLHQscil7dmFyIG4saSxvO3JldHVybiBmdW5jdGlvbigpe3ZhciBhLHM9cih0aGlzKSxsO3JldHVybiBzPT1udWxsP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOihhPXRoaXMuZ2V0QXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKSxsPXMrIiIsYT09PWw/bnVsbDphPT09biYmbD09PWk/bzooaT1sLG89dChuPWEscykpKX19ZnVuY3Rpb24gbjF0KGUsdCl7dmFyIHI9UGgoZSksbj1yPT09InRyYW5zZm9ybSI/X0w6VEw7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGUsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KHIubG9jYWw/UndlOmt3ZSkocixuLGJiKHRoaXMsImF0dHIuIitlLHQpKTp0PT1udWxsPyhyLmxvY2FsP1B3ZTpBd2UpKHIpOihyLmxvY2FsP0x3ZTpJd2UpKHIsbix0KSl9ZnVuY3Rpb24gTndlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3RoaXMuc2V0QXR0cmlidXRlKGUsdC5jYWxsKHRoaXMscikpfX1mdW5jdGlvbiBEd2UoZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7dGhpcy5zZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwsdC5jYWxsKHRoaXMscikpfX1mdW5jdGlvbiBPd2UoZSx0KXt2YXIgcixuO2Z1bmN0aW9uIGkoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PW4mJihyPShuPW8pJiZEd2UoZSxvKSkscn1yZXR1cm4gaS5fdmFsdWU9dCxpfWZ1bmN0aW9uIHp3ZShlLHQpe3ZhciByLG47ZnVuY3Rpb24gaSgpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09biYmKHI9KG49bykmJk53ZShlLG8pKSxyfXJldHVybiBpLl92YWx1ZT10LGl9ZnVuY3Rpb24gaTF0KGUsdCl7dmFyIHI9ImF0dHIuIitlO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4ocj10aGlzLnR3ZWVuKHIpKSYmci5fdmFsdWU7aWYodD09bnVsbClyZXR1cm4gdGhpcy50d2VlbihyLG51bGwpO2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjt2YXIgbj1QaChlKTtyZXR1cm4gdGhpcy50d2VlbihyLChuLmxvY2FsP093ZTp6d2UpKG4sdCkpfWZ1bmN0aW9uIEZ3ZShlLHQpe3JldHVybiBmdW5jdGlvbigpe0ZFKHRoaXMsZSkuZGVsYXk9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBCd2UoZSx0KXtyZXR1cm4gdD0rdCxmdW5jdGlvbigpe0ZFKHRoaXMsZSkuZGVsYXk9dH19ZnVuY3Rpb24gbzF0KGUpe3ZhciB0PXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgodHlwZW9mIGU9PSJmdW5jdGlvbiI/RndlOkJ3ZSkodCxlKSk6WmkodGhpcy5ub2RlKCksdCkuZGVsYXl9ZnVuY3Rpb24gSHdlKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7T2EodGhpcyxlKS5kdXJhdGlvbj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFZ3ZShlLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7T2EodGhpcyxlKS5kdXJhdGlvbj10fX1mdW5jdGlvbiBhMXQoZSl7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCh0eXBlb2YgZT09ImZ1bmN0aW9uIj9Id2U6VndlKSh0LGUpKTpaaSh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn1mdW5jdGlvbiBVd2UoZSx0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7T2EodGhpcyxlKS5lYXNlPXR9fWZ1bmN0aW9uIHMxdChlKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goVXdlKHQsZSkpOlppKHRoaXMubm9kZSgpLHQpLmVhc2V9ZnVuY3Rpb24gbDF0KGUpe3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT11YihlKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxyPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7KytpKWZvcih2YXIgbz10W2ldLGE9by5sZW5ndGgscz1uW2ldPVtdLGwsYz0wO2M8YTsrK2MpKGw9b1tjXSkmJmUuY2FsbChsLGwuX19kYXRhX18sYyxvKSYmcy5wdXNoKGwpO3JldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIGMxdChlKXtpZihlLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLHI9ZS5fZ3JvdXBzLG49dC5sZW5ndGgsaT1yLmxlbmd0aCxvPU1hdGgubWluKG4saSksYT1uZXcgQXJyYXkobikscz0wO3M8bzsrK3MpZm9yKHZhciBsPXRbc10sYz1yW3NdLHU9bC5sZW5ndGgsaD1hW3NdPW5ldyBBcnJheSh1KSxmLHA9MDtwPHU7KytwKShmPWxbcF18fGNbcF0pJiYoaFtwXT1mKTtmb3IoO3M8bjsrK3MpYVtzXT10W3NdO3JldHVybiBuZXcgRm8oYSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfWZ1bmN0aW9uIHF3ZShlKXtyZXR1cm4oZSsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2ZXJ5KGZ1bmN0aW9uKHQpe3ZhciByPXQuaW5kZXhPZigiLiIpO3JldHVybiByPj0wJiYodD10LnNsaWNlKDAscikpLCF0fHx0PT09InN0YXJ0In0pfWZ1bmN0aW9uIEd3ZShlLHQscil7dmFyIG4saSxvPXF3ZSh0KT9GRTpPYTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1vKHRoaXMsZSkscz1hLm9uO3MhPT1uJiYoaT0obj1zKS5jb3B5KCkpLm9uKHQsciksYS5vbj1pfX1mdW5jdGlvbiB1MXQoZSx0KXt2YXIgcj10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1ppKHRoaXMubm9kZSgpLHIpLm9uLm9uKGUpOnRoaXMuZWFjaChHd2UocixlLHQpKX1mdW5jdGlvbiBXd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgciBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrciE9PWUpcmV0dXJuO3QmJnQucmVtb3ZlQ2hpbGQodGhpcyl9fWZ1bmN0aW9uIGgxdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixXd2UodGhpcy5faWQpKX1mdW5jdGlvbiBmMXQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1ObShlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89bmV3IEFycmF5KGkpLGE9MDthPGk7KythKWZvcih2YXIgcz1uW2FdLGw9cy5sZW5ndGgsYz1vW2FdPW5ldyBBcnJheShsKSx1LGgsZj0wO2Y8bDsrK2YpKHU9c1tmXSkmJihoPWUuY2FsbCh1LHUuX19kYXRhX18sZixzKSkmJigiX19kYXRhX18iaW4gdSYmKGguX19kYXRhX189dS5fX2RhdGFfXyksY1tmXT1oLEdtKGNbZl0sdCxyLGYsYyxaaSh1LHIpKSk7cmV0dXJuIG5ldyBGbyhvLHRoaXMuX3BhcmVudHMsdCxyKX1mdW5jdGlvbiBwMXQoZSl7dmFyIHQ9dGhpcy5fbmFtZSxyPXRoaXMuX2lkO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1jYihlKSk7Zm9yKHZhciBuPXRoaXMuX2dyb3VwcyxpPW4ubGVuZ3RoLG89W10sYT1bXSxzPTA7czxpOysrcylmb3IodmFyIGw9bltzXSxjPWwubGVuZ3RoLHUsaD0wO2g8YzsrK2gpaWYodT1sW2hdKXtmb3IodmFyIGY9ZS5jYWxsKHUsdS5fX2RhdGFfXyxoLGwpLHAsZD1aaSh1LHIpLGc9MCxfPWYubGVuZ3RoO2c8XzsrK2cpKHA9ZltnXSkmJkdtKHAsdCxyLGcsZixkKTtvLnB1c2goZiksYS5wdXNoKHUpfXJldHVybiBuZXcgRm8obyxhLHQscil9dmFyIFl3ZT1JaC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gZDF0KCl7cmV0dXJuIG5ldyBZd2UodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfWZ1bmN0aW9uIGp3ZShlLHQpe3ZhciByLG4saTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1TcCh0aGlzLGUpLGE9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoZSksU3AodGhpcyxlKSk7cmV0dXJuIG89PT1hP251bGw6bz09PXImJmE9PT1uP2k6aT10KHI9byxuPWEpfX1mdW5jdGlvbiBtMXQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShlKX19ZnVuY3Rpb24gWHdlKGUsdCxyKXt2YXIgbixpPXIrIiIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1TcCh0aGlzLGUpO3JldHVybiBhPT09aT9udWxsOmE9PT1uP286bz10KG49YSxyKX19ZnVuY3Rpb24gJHdlKGUsdCxyKXt2YXIgbixpLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9U3AodGhpcyxlKSxzPXIodGhpcyksbD1zKyIiO3JldHVybiBzPT1udWxsJiYobD1zPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpLFNwKHRoaXMsZSkpKSxhPT09bD9udWxsOmE9PT1uJiZsPT09aT9vOihpPWwsbz10KG49YSxzKSl9fWZ1bmN0aW9uIEt3ZShlLHQpe3ZhciByLG4saSxvPSJzdHlsZS4iK3QsYT0iZW5kLiIrbyxzO3JldHVybiBmdW5jdGlvbigpe3ZhciBsPU9hKHRoaXMsZSksYz1sLm9uLHU9bC52YWx1ZVtvXT09bnVsbD9zfHwocz1tMXQodCkpOnZvaWQgMDsoYyE9PXJ8fGkhPT11KSYmKG49KHI9YykuY29weSgpKS5vbihhLGk9dSksbC5vbj1ufX1mdW5jdGlvbiBnMXQoZSx0LHIpe3ZhciBuPShlKz0iIik9PSJ0cmFuc2Zvcm0iP2dMOlRMO3JldHVybiB0PT1udWxsP3RoaXMuc3R5bGVUd2VlbihlLGp3ZShlLG4pKS5vbigiZW5kLnN0eWxlLiIrZSxtMXQoZSkpOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3RoaXMuc3R5bGVUd2VlbihlLCR3ZShlLG4sYmIodGhpcywic3R5bGUuIitlLHQpKSkuZWFjaChLd2UodGhpcy5faWQsZSkpOnRoaXMuc3R5bGVUd2VlbihlLFh3ZShlLG4sdCkscikub24oImVuZC5zdHlsZS4iK2UsbnVsbCl9ZnVuY3Rpb24gWndlKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShlLHQuY2FsbCh0aGlzLG4pLHIpfX1mdW5jdGlvbiBKd2UoZSx0LHIpe3ZhciBuLGk7ZnVuY3Rpb24gbygpe3ZhciBhPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBhIT09aSYmKG49KGk9YSkmJlp3ZShlLGEscikpLG59cmV0dXJuIG8uX3ZhbHVlPXQsb31mdW5jdGlvbiBfMXQoZSx0LHIpe3ZhciBuPSJzdHlsZS4iKyhlKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihuPXRoaXMudHdlZW4obikpJiZuLl92YWx1ZTtpZih0PT1udWxsKXJldHVybiB0aGlzLnR3ZWVuKG4sbnVsbCk7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKG4sSndlKGUsdCxyPT1udWxsPyIiOnIpKX1mdW5jdGlvbiBRd2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD1lfX1mdW5jdGlvbiB0U2UoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ9PW51bGw/IiI6dH19ZnVuY3Rpb24geTF0KGUpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0Iix0eXBlb2YgZT09ImZ1bmN0aW9uIj90U2UoYmIodGhpcywidGV4dCIsZSkpOlF3ZShlPT1udWxsPyIiOmUrIiIpKX1mdW5jdGlvbiBlU2UoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudGV4dENvbnRlbnQ9ZS5jYWxsKHRoaXMsdCl9fWZ1bmN0aW9uIHJTZShlKXt2YXIgdCxyO2Z1bmN0aW9uIG4oKXt2YXIgaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSE9PXImJih0PShyPWkpJiZlU2UoaSkpLHR9cmV0dXJuIG4uX3ZhbHVlPWUsbn1mdW5jdGlvbiB2MXQoZSl7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYoZT09bnVsbClyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LHJTZShlKSl9ZnVuY3Rpb24geDF0KCl7Zm9yKHZhciBlPXRoaXMuX25hbWUsdD10aGlzLl9pZCxyPUNMKCksbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpaWYobD1hW2NdKXt2YXIgdT1aaShsLHQpO0dtKGwsZSxyLGMsYSx7dGltZTp1LnRpbWUrdS5kZWxheSt1LmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRpb246dS5kdXJhdGlvbixlYXNlOnUuZWFzZX0pfXJldHVybiBuZXcgRm8obix0aGlzLl9wYXJlbnRzLGUscil9ZnVuY3Rpb24gYjF0KCl7dmFyIGUsdCxyPXRoaXMsbj1yLl9pZCxpPXIuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihvLGEpe3ZhciBzPXt2YWx1ZTphfSxsPXt2YWx1ZTpmdW5jdGlvbigpey0taT09PTAmJm8oKX19O3IuZWFjaChmdW5jdGlvbigpe3ZhciBjPU9hKHRoaXMsbiksdT1jLm9uO3UhPT1lJiYodD0oZT11KS5jb3B5KCksdC5fLmNhbmNlbC5wdXNoKHMpLHQuXy5pbnRlcnJ1cHQucHVzaChzKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9dmFyIG5TZT0wO2Z1bmN0aW9uIEZvKGUsdCxyLG4pe3RoaXMuX2dyb3Vwcz1lLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPXIsdGhpcy5faWQ9bn1mdW5jdGlvbiBBTChlKXtyZXR1cm4gSWgoKS50cmFuc2l0aW9uKGUpfWZ1bmN0aW9uIENMKCl7cmV0dXJuKytuU2V9dmFyIHdiPUloLnByb3RvdHlwZTtGby5wcm90b3R5cGU9QUwucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGbyxzZWxlY3Q6ZjF0LHNlbGVjdEFsbDpwMXQsZmlsdGVyOmwxdCxtZXJnZTpjMXQsc2VsZWN0aW9uOmQxdCx0cmFuc2l0aW9uOngxdCxjYWxsOndiLmNhbGwsbm9kZXM6d2Iubm9kZXMsbm9kZTp3Yi5ub2RlLHNpemU6d2Iuc2l6ZSxlbXB0eTp3Yi5lbXB0eSxlYWNoOndiLmVhY2gsb246dTF0LGF0dHI6bjF0LGF0dHJUd2VlbjppMXQsc3R5bGU6ZzF0LHN0eWxlVHdlZW46XzF0LHRleHQ6eTF0LHRleHRUd2Vlbjp2MXQscmVtb3ZlOmgxdCx0d2VlbjpyMXQsZGVsYXk6bzF0LGR1cmF0aW9uOmExdCxlYXNlOnMxdCxlbmQ6YjF0fTtJXygpO3ZhciBxWT17dGltZTpudWxsLGRlbGF5OjAsZHVyYXRpb246MjUwLGVhc2U6eHN9O2Z1bmN0aW9uIGZTZShlLHQpe2Zvcih2YXIgcjshKHI9ZS5fX3RyYW5zaXRpb24pfHwhKHI9clt0XSk7KWlmKCEoZT1lLnBhcmVudE5vZGUpKXJldHVybiBxWS50aW1lPUFwKCkscVk7cmV0dXJuIHJ9ZnVuY3Rpb24gRDF0KGUpe3ZhciB0LHI7ZSBpbnN0YW5jZW9mIEZvPyh0PWUuX2lkLGU9ZS5fbmFtZSk6KHQ9Q0woKSwocj1xWSkudGltZT1BcCgpLGU9ZT09bnVsbD9udWxsOmUrIiIpO2Zvcih2YXIgbj10aGlzLl9ncm91cHMsaT1uLmxlbmd0aCxvPTA7bzxpOysrbylmb3IodmFyIGE9bltvXSxzPWEubGVuZ3RoLGwsYz0wO2M8czsrK2MpKGw9YVtjXSkmJkdtKGwsZSx0LGMsYSxyfHxmU2UobCx0KSk7cmV0dXJuIG5ldyBGbyhuLHRoaXMuX3BhcmVudHMsZSx0KX1JaC5wcm90b3R5cGUuaW50ZXJydXB0PWUxdDtJaC5wcm90b3R5cGUudHJhbnNpdGlvbj1EMXQ7dmFyIHBTZT1bbnVsbF07ZnVuY3Rpb24gTzF0KGUsdCl7dmFyIHI9ZS5fX3RyYW5zaXRpb24sbixpO2lmKHIpe3Q9dD09bnVsbD9udWxsOnQrIiI7Zm9yKGkgaW4gcilpZigobj1yW2ldKS5zdGF0ZT5TTCYmbi5uYW1lPT09dClyZXR1cm4gbmV3IEZvKFtbZV1dLHBTZSx0LCtpKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6TChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gejF0KGUsdCxyKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMuc2VsZWN0aW9uPXJ9ZnVuY3Rpb24gR1koKXtxdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBGTCgpe3F0LnByZXZlbnREZWZhdWx0KCkscXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9dmFyIEYxdD17bmFtZToiZHJhZyJ9LFdZPXtuYW1lOiJzcGFjZSJ9LE1iPXtuYW1lOiJoYW5kbGUifSxFYj17bmFtZToiY2VudGVyIn07ZnVuY3Rpb24gQjF0KGUpe3JldHVyblsrZVswXSwrZVsxXV19ZnVuY3Rpb24galkoZSl7cmV0dXJuW0IxdChlWzBdKSxCMXQoZVsxXSldfWZ1bmN0aW9uIGRTZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFRwKHQscXQudG91Y2hlcyxlKX19dmFyIEJMPXtuYW1lOiJ4IixoYW5kbGVzOlsidyIsImUiXS5tYXAoQkUpLGlucHV0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/bnVsbDpbWytlWzBdLHRbMF1bMV1dLFsrZVsxXSx0WzFdWzFdXV19LG91dHB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZSYmW2VbMF1bMF0sZVsxXVswXV19fSxITD17bmFtZToieSIsaGFuZGxlczpbIm4iLCJzIl0ubWFwKEJFKSxpbnB1dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP251bGw6W1t0WzBdWzBdLCtlWzBdXSxbdFsxXVswXSwrZVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJltlWzBdWzFdLGVbMV1bMV1dfX0sbVNlPXtuYW1lOiJ4eSIsaGFuZGxlczpbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChCRSksaW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/bnVsbDpqWShlKX0sb3V0cHV0OmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sUHA9e292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEgxdD17ZToidyIsdzoiZSIsbnc6Im5lIixuZToibnciLHNlOiJzdyIsc3c6InNlIn0sVjF0PXtuOiJzIixzOiJuIixudzoic3ciLG5lOiJzZSIsc2U6Im5lIixzdzoibncifSxnU2U9e292ZXJsYXk6MSxzZWxlY3Rpb246MSxuOm51bGwsZToxLHM6bnVsbCx3Oi0xLG53Oi0xLG5lOjEsc2U6MSxzdzotMX0sX1NlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjotMSxlOm51bGwsczoxLHc6bnVsbCxudzotMSxuZTotMSxzZToxLHN3OjF9O2Z1bmN0aW9uIEJFKGUpe3JldHVybnt0eXBlOmV9fWZ1bmN0aW9uIHlTZSgpe3JldHVybiFxdC5jdHJsS2V5JiYhcXQuYnV0dG9ufWZ1bmN0aW9uIHZTZSgpe3ZhciBlPXRoaXMub3duZXJTVkdFbGVtZW50fHx0aGlzO3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidmlld0JveCIpPyhlPWUudmlld0JveC5iYXNlVmFsLFtbZS54LGUueV0sW2UueCtlLndpZHRoLGUueStlLmhlaWdodF1dKTpbWzAsMF0sW2Uud2lkdGguYmFzZVZhbC52YWx1ZSxlLmhlaWdodC5iYXNlVmFsLnZhbHVlXV19ZnVuY3Rpb24geFNlKCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIFlZKGUpe2Zvcig7IWUuX19icnVzaDspaWYoIShlPWUucGFyZW50Tm9kZSkpcmV0dXJuO3JldHVybiBlLl9fYnJ1c2h9ZnVuY3Rpb24gYlNlKGUpe3JldHVybiBlWzBdWzBdPT09ZVsxXVswXXx8ZVswXVsxXT09PWVbMV1bMV19ZnVuY3Rpb24gVkwoZSl7dmFyIHQ9ZS5fX2JydXNoO3JldHVybiB0P3QuZGltLm91dHB1dCh0LnNlbGVjdGlvbik6bnVsbH1mdW5jdGlvbiBVMXQoKXtyZXR1cm4gWFkoQkwpfWZ1bmN0aW9uIFVMKCl7cmV0dXJuIFhZKEhMKX1mdW5jdGlvbiBxTCgpe3JldHVybiBYWShtU2UpfWZ1bmN0aW9uIFhZKGUpe3ZhciB0PXZTZSxyPXlTZSxuPXhTZSxpPSEwLG89dnMoInN0YXJ0IiwiYnJ1c2giLCJlbmQiKSxhPTYscztmdW5jdGlvbiBsKF8pe3ZhciB5PV8ucHJvcGVydHkoIl9fYnJ1c2giLGcpLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtCRSgib3ZlcmxheSIpXSk7eS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixQcC5vdmVybGF5KS5tZXJnZSh5KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9WVkodGhpcykuZXh0ZW50O0h0KHRoaXMpLmF0dHIoIngiLGJbMF1bMF0pLmF0dHIoInkiLGJbMF1bMV0pLmF0dHIoIndpZHRoIixiWzFdWzBdLWJbMF1bMF0pLmF0dHIoImhlaWdodCIsYlsxXVsxXS1iWzBdWzFdKX0pLF8uc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbQkUoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsUHAuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIHg9Xy5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKGUuaGFuZGxlcyxmdW5jdGlvbihiKXtyZXR1cm4gYi50eXBlfSk7eC5leGl0KCkucmVtb3ZlKCkseC5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihiKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitiLnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKGIpe3JldHVybiBQcFtiLnR5cGVdfSksXy5lYWNoKGMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixmKS5maWx0ZXIobikub24oInRvdWNoc3RhcnQuYnJ1c2giLGYpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLHApLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZCkuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWwubW92ZT1mdW5jdGlvbihfLHkpe18uc2VsZWN0aW9uP18ub24oInN0YXJ0LmJydXNoIixmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmJlZm9yZXN0YXJ0KCkuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuYnJ1c2ggZW5kLmJydXNoIixmdW5jdGlvbigpe3UodGhpcyxhcmd1bWVudHMpLmVuZCgpfSkudHdlZW4oImJydXNoIixmdW5jdGlvbigpe3ZhciB4PXRoaXMsYj14Ll9fYnJ1c2gsUz11KHgsYXJndW1lbnRzKSxDPWIuc2VsZWN0aW9uLFA9ZS5pbnB1dCh0eXBlb2YgeT09ImZ1bmN0aW9uIj95LmFwcGx5KHRoaXMsYXJndW1lbnRzKTp5LGIuZXh0ZW50KSxrPW5jKEMsUCk7ZnVuY3Rpb24gTyhEKXtiLnNlbGVjdGlvbj1EPT09MSYmUD09PW51bGw/bnVsbDprKEQpLGMuY2FsbCh4KSxTLmJydXNoKCl9cmV0dXJuIEMhPT1udWxsJiZQIT09bnVsbD9POk8oMSl9KTpfLmVhY2goZnVuY3Rpb24oKXt2YXIgeD10aGlzLGI9YXJndW1lbnRzLFM9eC5fX2JydXNoLEM9ZS5pbnB1dCh0eXBlb2YgeT09ImZ1bmN0aW9uIj95LmFwcGx5KHgsYik6eSxTLmV4dGVudCksUD11KHgsYikuYmVmb3Jlc3RhcnQoKTtodSh4KSxTLnNlbGVjdGlvbj1DPT09bnVsbD9udWxsOkMsYy5jYWxsKHgpLFAuc3RhcnQoKS5icnVzaCgpLmVuZCgpfSl9LGwuY2xlYXI9ZnVuY3Rpb24oXyl7bC5tb3ZlKF8sbnVsbCl9O2Z1bmN0aW9uIGMoKXt2YXIgXz1IdCh0aGlzKSx5PVlZKHRoaXMpLnNlbGVjdGlvbjt5PyhfLnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4Iix5WzBdWzBdKS5hdHRyKCJ5Iix5WzBdWzFdKS5hdHRyKCJ3aWR0aCIseVsxXVswXS15WzBdWzBdKS5hdHRyKCJoZWlnaHQiLHlbMV1bMV0teVswXVsxXSksXy5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZVt4LnR5cGUubGVuZ3RoLTFdPT09ImUiP3lbMV1bMF0tYS8yOnlbMF1bMF0tYS8yfSkuYXR0cigieSIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZVswXT09PSJzIj95WzFdWzFdLWEvMjp5WzBdWzFdLWEvMn0pLmF0dHIoIndpZHRoIixmdW5jdGlvbih4KXtyZXR1cm4geC50eXBlPT09Im4ifHx4LnR5cGU9PT0icyI/eVsxXVswXS15WzBdWzBdK2E6YX0pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHlwZT09PSJlInx8eC50eXBlPT09InciP3lbMV1bMV0teVswXVsxXSthOmF9KSk6Xy5zZWxlY3RBbGwoIi5zZWxlY3Rpb24sLmhhbmRsZSIpLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLmF0dHIoIngiLG51bGwpLmF0dHIoInkiLG51bGwpLmF0dHIoIndpZHRoIixudWxsKS5hdHRyKCJoZWlnaHQiLG51bGwpfWZ1bmN0aW9uIHUoXyx5LHgpe3ZhciBiPV8uX19icnVzaC5lbWl0dGVyO3JldHVybiBiJiYoIXh8fCFiLmNsZWFuKT9iOm5ldyBoKF8seSx4KX1mdW5jdGlvbiBoKF8seSx4KXt0aGlzLnRoYXQ9Xyx0aGlzLmFyZ3M9eSx0aGlzLnN0YXRlPV8uX19icnVzaCx0aGlzLmFjdGl2ZT0wLHRoaXMuY2xlYW49eH1oLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4rK3RoaXMuYWN0aXZlPT09MSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmc/KHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKTp0aGlzLmVtaXQoImJydXNoIiksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybi0tdGhpcy5hY3RpdmU9PT0wJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKF8pe01wKG5ldyB6MXQobCxfLGUub3V0cHV0KHRoaXMuc3RhdGUuc2VsZWN0aW9uKSksby5hcHBseSxvLFtfLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIGYoKXtpZihzJiYhcXQudG91Y2hlc3x8IXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybjt2YXIgXz10aGlzLHk9cXQudGFyZ2V0Ll9fZGF0YV9fLnR5cGUseD0oaSYmcXQubWV0YUtleT95PSJvdmVybGF5Ijp5KT09PSJzZWxlY3Rpb24iP0YxdDppJiZxdC5hbHRLZXk/RWI6TWIsYj1lPT09SEw/bnVsbDpnU2VbeV0sUz1lPT09Qkw/bnVsbDpfU2VbeV0sQz1ZWShfKSxQPUMuZXh0ZW50LGs9Qy5zZWxlY3Rpb24sTz1QWzBdWzBdLEQsQixJPVBbMF1bMV0sTCxSLEY9UFsxXVswXSx6LFUsVz1QWzFdWzFdLFoscnQsb3Q9MCxzdD0wLFN0LGJ0PWImJlMmJmkmJnF0LnNoaWZ0S2V5LE10LGx0LEt0PXF0LnRvdWNoZXM/ZFNlKHF0LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOnpvLF90PUt0KF8pLGN0PV90LFg9dShfLGFyZ3VtZW50cywhMCkuYmVmb3Jlc3RhcnQoKTt5PT09Im92ZXJsYXkiPyhrJiYoU3Q9ITApLEMuc2VsZWN0aW9uPWs9W1tEPWU9PT1ITD9POl90WzBdLEw9ZT09PUJMP0k6X3RbMV1dLFt6PWU9PT1ITD9GOkQsWj1lPT09Qkw/VzpMXV0pOihEPWtbMF1bMF0sTD1rWzBdWzFdLHo9a1sxXVswXSxaPWtbMV1bMV0pLEI9RCxSPUwsVT16LHJ0PVo7dmFyIGV0PUh0KF8pLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLGR0PWV0LnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5hdHRyKCJjdXJzb3IiLFBwW3ldKTtpZihxdC50b3VjaGVzKVgubW92ZWQ9cHQsWC5lbmRlZD13dDtlbHNle3ZhciBxPUh0KHF0LnZpZXcpLm9uKCJtb3VzZW1vdmUuYnJ1c2giLHB0LCEwKS5vbigibW91c2V1cC5icnVzaCIsd3QsITApO2kmJnEub24oImtleWRvd24uYnJ1c2giLGt0LCEwKS5vbigia2V5dXAuYnJ1c2giLGllLCEwKSx6bShxdC52aWV3KX1HWSgpLGh1KF8pLGMuY2FsbChfKSxYLnN0YXJ0KCk7ZnVuY3Rpb24gcHQoKXt2YXIgZWU9S3QoXyk7YnQmJiFNdCYmIWx0JiYoTWF0aC5hYnMoZWVbMF0tY3RbMF0pPk1hdGguYWJzKGVlWzFdLWN0WzFdKT9sdD0hMDpNdD0hMCksY3Q9ZWUsU3Q9ITAsRkwoKSxodCgpfWZ1bmN0aW9uIGh0KCl7dmFyIGVlO3N3aXRjaChvdD1jdFswXS1fdFswXSxzdD1jdFsxXS1fdFsxXSx4KXtjYXNlIFdZOmNhc2UgRjF0OntiJiYob3Q9TWF0aC5tYXgoTy1ELE1hdGgubWluKEYteixvdCkpLEI9RCtvdCxVPXorb3QpLFMmJihzdD1NYXRoLm1heChJLUwsTWF0aC5taW4oVy1aLHN0KSksUj1MK3N0LHJ0PVorc3QpO2JyZWFrfWNhc2UgTWI6e2I8MD8ob3Q9TWF0aC5tYXgoTy1ELE1hdGgubWluKEYtRCxvdCkpLEI9RCtvdCxVPXopOmI+MCYmKG90PU1hdGgubWF4KE8teixNYXRoLm1pbihGLXosb3QpKSxCPUQsVT16K290KSxTPDA/KHN0PU1hdGgubWF4KEktTCxNYXRoLm1pbihXLUwsc3QpKSxSPUwrc3QscnQ9Wik6Uz4wJiYoc3Q9TWF0aC5tYXgoSS1aLE1hdGgubWluKFctWixzdCkpLFI9TCxydD1aK3N0KTticmVha31jYXNlIEViOntiJiYoQj1NYXRoLm1heChPLE1hdGgubWluKEYsRC1vdCpiKSksVT1NYXRoLm1heChPLE1hdGgubWluKEYseitvdCpiKSkpLFMmJihSPU1hdGgubWF4KEksTWF0aC5taW4oVyxMLXN0KlMpKSxydD1NYXRoLm1heChJLE1hdGgubWluKFcsWitzdCpTKSkpO2JyZWFrfX1VPEImJihiKj0tMSxlZT1ELEQ9eix6PWVlLGVlPUIsQj1VLFU9ZWUseSBpbiBIMXQmJmR0LmF0dHIoImN1cnNvciIsUHBbeT1IMXRbeV1dKSkscnQ8UiYmKFMqPS0xLGVlPUwsTD1aLFo9ZWUsZWU9UixSPXJ0LHJ0PWVlLHkgaW4gVjF0JiZkdC5hdHRyKCJjdXJzb3IiLFBwW3k9VjF0W3ldXSkpLEMuc2VsZWN0aW9uJiYoaz1DLnNlbGVjdGlvbiksTXQmJihCPWtbMF1bMF0sVT1rWzFdWzBdKSxsdCYmKFI9a1swXVsxXSxydD1rWzFdWzFdKSwoa1swXVswXSE9PUJ8fGtbMF1bMV0hPT1SfHxrWzFdWzBdIT09VXx8a1sxXVsxXSE9PXJ0KSYmKEMuc2VsZWN0aW9uPVtbQixSXSxbVSxydF1dLGMuY2FsbChfKSxYLmJydXNoKCkpfWZ1bmN0aW9uIHd0KCl7aWYoR1koKSxxdC50b3VjaGVzKXtpZihxdC50b3VjaGVzLmxlbmd0aClyZXR1cm47cyYmY2xlYXJUaW1lb3V0KHMpLHM9c2V0VGltZW91dChmdW5jdGlvbigpe3M9bnVsbH0sNTAwKX1lbHNlIEZtKHF0LnZpZXcsU3QpLHEub24oImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2giLG51bGwpO2V0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIiksZHQuYXR0cigiY3Vyc29yIixQcC5vdmVybGF5KSxDLnNlbGVjdGlvbiYmKGs9Qy5zZWxlY3Rpb24pLGJTZShrKSYmKEMuc2VsZWN0aW9uPW51bGwsYy5jYWxsKF8pKSxYLmVuZCgpfWZ1bmN0aW9uIGt0KCl7c3dpdGNoKHF0LmtleUNvZGUpe2Nhc2UgMTY6e2J0PWImJlM7YnJlYWt9Y2FzZSAxODp7eD09PU1iJiYoYiYmKHo9VS1vdCpiLEQ9QitvdCpiKSxTJiYoWj1ydC1zdCpTLEw9UitzdCpTKSx4PUViLGh0KCkpO2JyZWFrfWNhc2UgMzI6eyh4PT09TWJ8fHg9PT1FYikmJihiPDA/ej1VLW90OmI+MCYmKEQ9Qi1vdCksUzwwP1o9cnQtc3Q6Uz4wJiYoTD1SLXN0KSx4PVdZLGR0LmF0dHIoImN1cnNvciIsUHAuc2VsZWN0aW9uKSxodCgpKTticmVha31kZWZhdWx0OnJldHVybn1GTCgpfWZ1bmN0aW9uIGllKCl7c3dpdGNoKHF0LmtleUNvZGUpe2Nhc2UgMTY6e2J0JiYoTXQ9bHQ9YnQ9ITEsaHQoKSk7YnJlYWt9Y2FzZSAxODp7eD09PUViJiYoYjwwP3o9VTpiPjAmJihEPUIpLFM8MD9aPXJ0OlM+MCYmKEw9UikseD1NYixodCgpKTticmVha31jYXNlIDMyOnt4PT09V1kmJihxdC5hbHRLZXk/KGImJih6PVUtb3QqYixEPUIrb3QqYiksUyYmKFo9cnQtc3QqUyxMPVIrc3QqUykseD1FYik6KGI8MD96PVU6Yj4wJiYoRD1CKSxTPDA/Wj1ydDpTPjAmJihMPVIpLHg9TWIpLGR0LmF0dHIoImN1cnNvciIsUHBbeV0pLGh0KCkpO2JyZWFrfWRlZmF1bHQ6cmV0dXJufUZMKCl9fWZ1bmN0aW9uIHAoKXt1KHRoaXMsYXJndW1lbnRzKS5tb3ZlZCgpfWZ1bmN0aW9uIGQoKXt1KHRoaXMsYXJndW1lbnRzKS5lbmRlZCgpfWZ1bmN0aW9uIGcoKXt2YXIgXz10aGlzLl9fYnJ1c2h8fHtzZWxlY3Rpb246bnVsbH07cmV0dXJuIF8uZXh0ZW50PWpZKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxfLmRpbT1lLF99cmV0dXJuIGwuZXh0ZW50PWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBfPT0iZnVuY3Rpb24iP186ekwoalkoXykpLGwpOnR9LGwuZmlsdGVyPWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBfPT0iZnVuY3Rpb24iP186ekwoISFfKSxsKTpyfSxsLnRvdWNoYWJsZT1mdW5jdGlvbihfKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2YgXz09ImZ1bmN0aW9uIj9fOnpMKCEhXyksbCk6bn0sbC5oYW5kbGVTaXplPWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPStfLGwpOmF9LGwua2V5TW9kaWZpZXJzPWZ1bmN0aW9uKF8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSEhXyxsKTppfSxsLm9uPWZ1bmN0aW9uKCl7dmFyIF89by5vbi5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIF89PT1vP2w6X30sbH12YXIgJFk9TWF0aC5jb3MsS1k9TWF0aC5zaW4scTF0PU1hdGguUEksSEU9cTF0LzIsWlk9cTF0KjIsSlk9TWF0aC5tYXg7ZnVuY3Rpb24gd1NlKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiBlKHQuc291cmNlLnZhbHVlK3QudGFyZ2V0LnZhbHVlLHIuc291cmNlLnZhbHVlK3IudGFyZ2V0LnZhbHVlKX19ZnVuY3Rpb24gRzF0KCl7dmFyIGU9MCx0PW51bGwscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8pe3ZhciBhPW8ubGVuZ3RoLHM9W10sbD1JcihhKSxjPVtdLHU9W10saD11Lmdyb3Vwcz1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSphKSxwLGQsZyxfLHkseDtmb3IocD0wLHk9LTE7Kyt5PGE7KXtmb3IoZD0wLHg9LTE7Kyt4PGE7KWQrPW9beV1beF07cy5wdXNoKGQpLGMucHVzaChJcihhKSkscCs9ZH1mb3IodCYmbC5zb3J0KGZ1bmN0aW9uKEIsSSl7cmV0dXJuIHQoc1tCXSxzW0ldKX0pLHImJmMuZm9yRWFjaChmdW5jdGlvbihCLEkpe0Iuc29ydChmdW5jdGlvbihMLFIpe3JldHVybiByKG9bSV1bTF0sb1tJXVtSXSl9KX0pLHA9SlkoMCxaWS1lKmEpL3AsXz1wP2U6WlkvYSxkPTAseT0tMTsrK3k8YTspe2ZvcihnPWQseD0tMTsrK3g8YTspe3ZhciBiPWxbeV0sUz1jW2JdW3hdLEM9b1tiXVtTXSxQPWQsaz1kKz1DKnA7ZltTKmErYl09e2luZGV4OmIsc3ViaW5kZXg6UyxzdGFydEFuZ2xlOlAsZW5kQW5nbGU6ayx2YWx1ZTpDfX1oW2JdPXtpbmRleDpiLHN0YXJ0QW5nbGU6ZyxlbmRBbmdsZTpkLHZhbHVlOnNbYl19LGQrPV99Zm9yKHk9LTE7Kyt5PGE7KWZvcih4PXktMTsrK3g8YTspe3ZhciBPPWZbeCphK3ldLEQ9Zlt5KmEreF07KE8udmFsdWV8fEQudmFsdWUpJiZ1LnB1c2goTy52YWx1ZTxELnZhbHVlP3tzb3VyY2U6RCx0YXJnZXQ6T306e3NvdXJjZTpPLHRhcmdldDpEfSl9cmV0dXJuIG4/dS5zb3J0KG4pOnV9cmV0dXJuIGkucGFkQW5nbGU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9SlkoMCxvKSxpKTplfSxpLnNvcnRHcm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9byxpKTp0fSxpLnNvcnRTdWJncm91cHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9byxpKTpyfSxpLnNvcnRDaG9yZHM9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89PW51bGw/bj1udWxsOihuPXdTZShvKSkuXz1vLGkpOm4mJm4uX30saX12YXIgVzF0PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBHTChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIFFZPU1hdGguUEksdGo9MipRWSxMXz0xZS02LFNTZT10ai1MXztmdW5jdGlvbiBlaigpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIFkxdCgpe3JldHVybiBuZXcgZWp9ZWoucHJvdG90eXBlPVkxdC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmVqLG1vdmVUbzpmdW5jdGlvbihlLHQpe3RoaXMuXys9Ik0iKyh0aGlzLl94MD10aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MD10aGlzLl95MT0rdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX3gxIT09bnVsbCYmKHRoaXMuX3gxPXRoaXMuX3gwLHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuXys9IloiKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fKz0iTCIrKHRoaXMuX3gxPStlKSsiLCIrKHRoaXMuX3kxPSt0KX0scXVhZHJhdGljQ3VydmVUbzpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJRIisgK2UrIiwiKyArdCsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStuKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fKz0iQyIrICtlKyIsIisgK3QrIiwiKyArcisiLCIrICtuKyIsIisodGhpcy5feDE9K2kpKyIsIisodGhpcy5feTE9K28pfSxhcmNUbzpmdW5jdGlvbihlLHQscixuLGkpe2U9K2UsdD0rdCxyPStyLG49K24saT0raTt2YXIgbz10aGlzLl94MSxhPXRoaXMuX3kxLHM9ci1lLGw9bi10LGM9by1lLHU9YS10LGg9YypjK3UqdTtpZihpPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIraSk7aWYodGhpcy5feDE9PT1udWxsKXRoaXMuXys9Ik0iKyh0aGlzLl94MT1lKSsiLCIrKHRoaXMuX3kxPXQpO2Vsc2UgaWYoaD5MXylpZighKE1hdGguYWJzKHUqcy1sKmMpPkxfKXx8IWkpdGhpcy5fKz0iTCIrKHRoaXMuX3gxPWUpKyIsIisodGhpcy5feTE9dCk7ZWxzZXt2YXIgZj1yLW8scD1uLWEsZD1zKnMrbCpsLGc9ZipmK3AqcCxfPU1hdGguc3FydChkKSx5PU1hdGguc3FydChoKSx4PWkqTWF0aC50YW4oKFFZLU1hdGguYWNvcygoZCtoLWcpLygyKl8qeSkpKS8yKSxiPXgveSxTPXgvXztNYXRoLmFicyhiLTEpPkxfJiYodGhpcy5fKz0iTCIrKGUrYipjKSsiLCIrKHQrYip1KSksdGhpcy5fKz0iQSIraSsiLCIraSsiLDAsMCwiKyArKHUqZj5jKnApKyIsIisodGhpcy5feDE9ZStTKnMpKyIsIisodGhpcy5feTE9dCtTKmwpfX0sYXJjOmZ1bmN0aW9uKGUsdCxyLG4saSxvKXtlPStlLHQ9K3Qscj0rcixvPSEhbzt2YXIgYT1yKk1hdGguY29zKG4pLHM9cipNYXRoLnNpbihuKSxsPWUrYSxjPXQrcyx1PTFebyxoPW8/bi1pOmktbjtpZihyPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrcik7dGhpcy5feDE9PT1udWxsP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPkxffHxNYXRoLmFicyh0aGlzLl95MS1jKT5MXykmJih0aGlzLl8rPSJMIitsKyIsIitjKSxyJiYoaDwwJiYoaD1oJXRqK3RqKSxoPlNTZT90aGlzLl8rPSJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKGUtYSkrIiwiKyh0LXMpKyJBIityKyIsIityKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6aD5MXyYmKHRoaXMuXys9IkEiK3IrIiwiK3IrIiwwLCIrICsoaD49UVkpKyIsIit1KyIsIisodGhpcy5feDE9ZStyKk1hdGguY29zKGkpKSsiLCIrKHRoaXMuX3kxPXQrcipNYXRoLnNpbihpKSkpKX0scmVjdDpmdW5jdGlvbihlLHQscixuKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K2UpKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK3IrInYiKyArbisiaCIrLXIrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgYnM9WTF0O2Z1bmN0aW9uIE1TZShlKXtyZXR1cm4gZS5zb3VyY2V9ZnVuY3Rpb24gRVNlKGUpe3JldHVybiBlLnRhcmdldH1mdW5jdGlvbiBUU2UoZSl7cmV0dXJuIGUucmFkaXVzfWZ1bmN0aW9uIENTZShlKXtyZXR1cm4gZS5zdGFydEFuZ2xlfWZ1bmN0aW9uIEFTZShlKXtyZXR1cm4gZS5lbmRBbmdsZX1mdW5jdGlvbiBqMXQoKXt2YXIgZT1NU2UsdD1FU2Uscj1UU2Usbj1DU2UsaT1BU2Usbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPVcxdC5jYWxsKGFyZ3VtZW50cyksYz1lLmFwcGx5KHRoaXMsbCksdT10LmFwcGx5KHRoaXMsbCksaD0rci5hcHBseSh0aGlzLChsWzBdPWMsbCkpLGY9bi5hcHBseSh0aGlzLGwpLUhFLHA9aS5hcHBseSh0aGlzLGwpLUhFLGQ9aCokWShmKSxnPWgqS1koZiksXz0rci5hcHBseSh0aGlzLChsWzBdPXUsbCkpLHk9bi5hcHBseSh0aGlzLGwpLUhFLHg9aS5hcHBseSh0aGlzLGwpLUhFO2lmKG98fChvPXM9YnMoKSksby5tb3ZlVG8oZCxnKSxvLmFyYygwLDAsaCxmLHApLChmIT09eXx8cCE9PXgpJiYoby5xdWFkcmF0aWNDdXJ2ZVRvKDAsMCxfKiRZKHkpLF8qS1koeSkpLG8uYXJjKDAsMCxfLHkseCkpLG8ucXVhZHJhdGljQ3VydmVUbygwLDAsZCxnKSxvLmNsb3NlUGF0aCgpLHMpcmV0dXJuIG89bnVsbCxzKyIifHxudWxsfXJldHVybiBhLnJhZGl1cz1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdMKCtzKSxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpHTCgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOkdMKCtzKSxhKTppfSxhLnNvdXJjZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1zLGEpOmV9LGEudGFyZ2V0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMsYSk6dH0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9VGIoKTt2YXIgTFNlPUFycmF5LnByb3RvdHlwZSwkTD1MU2Uuc2xpY2U7ZnVuY3Rpb24gc3Z0KGUsdCl7cmV0dXJuIGUtdH1mdW5jdGlvbiBsdnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aCxuPWVbci0xXVsxXSplWzBdWzBdLWVbci0xXVswXSplWzBdWzFdOysrdDxyOyluKz1lW3QtMV1bMV0qZVt0XVswXS1lW3QtMV1bMF0qZVt0XVsxXTtyZXR1cm4gbn1mdW5jdGlvbiBPaChlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19ZnVuY3Rpb24gY3Z0KGUsdCl7Zm9yKHZhciByPS0xLG49dC5sZW5ndGgsaTsrK3I8bjspaWYoaT1rU2UoZSx0W3JdKSlyZXR1cm4gaTtyZXR1cm4gMH1mdW5jdGlvbiBrU2UoZSx0KXtmb3IodmFyIHI9dFswXSxuPXRbMV0saT0tMSxvPTAsYT1lLmxlbmd0aCxzPWEtMTtvPGE7cz1vKyspe3ZhciBsPWVbb10sYz1sWzBdLHU9bFsxXSxoPWVbc10sZj1oWzBdLHA9aFsxXTtpZihSU2UobCxoLHQpKXJldHVybiAwO3U+biE9cD5uJiZyPChmLWMpKihuLXUpLyhwLXUpK2MmJihpPS1pKX1yZXR1cm4gaX1mdW5jdGlvbiBSU2UoZSx0LHIpe3ZhciBuO3JldHVybiBOU2UoZSx0LHIpJiZEU2UoZVtuPSsoZVswXT09PXRbMF0pXSxyW25dLHRbbl0pfWZ1bmN0aW9uIE5TZShlLHQscil7cmV0dXJuKHRbMF0tZVswXSkqKHJbMV0tZVsxXSk9PT0oclswXS1lWzBdKSoodFsxXS1lWzFdKX1mdW5jdGlvbiBEU2UoZSx0LHIpe3JldHVybiBlPD10JiZ0PD1yfHxyPD10JiZ0PD1lfWZ1bmN0aW9uIHV2dCgpe312YXIgSXA9W1tdLFtbWzEsMS41XSxbLjUsMV1dXSxbW1sxLjUsMV0sWzEsMS41XV1dLFtbWzEuNSwxXSxbLjUsMV1dXSxbW1sxLC41XSxbMS41LDFdXV0sW1tbMSwxLjVdLFsuNSwxXV0sW1sxLC41XSxbMS41LDFdXV0sW1tbMSwuNV0sWzEsMS41XV1dLFtbWzEsLjVdLFsuNSwxXV1dLFtbWy41LDFdLFsxLC41XV1dLFtbWzEsMS41XSxbMSwuNV1dXSxbW1suNSwxXSxbMSwuNV1dLFtbMS41LDFdLFsxLDEuNV1dXSxbW1sxLjUsMV0sWzEsLjVdXV0sW1tbLjUsMV0sWzEuNSwxXV1dLFtbWzEsMS41XSxbMS41LDFdXV0sW1tbLjUsMV0sWzEsMS41XV1dLFtdXTtmdW5jdGlvbiBLTCgpe3ZhciBlPTEsdD0xLHI9c2Isbj1sO2Z1bmN0aW9uIGkoYyl7dmFyIHU9cihjKTtpZihBcnJheS5pc0FycmF5KHUpKXU9dS5zbGljZSgpLnNvcnQoc3Z0KTtlbHNle3ZhciBoPWFhKGMpLGY9aFswXSxwPWhbMV07dT10bChmLHAsdSksdT1JcihNYXRoLmZsb29yKGYvdSkqdSxNYXRoLmZsb29yKHAvdSkqdSx1KX1yZXR1cm4gdS5tYXAoZnVuY3Rpb24oZCl7cmV0dXJuIG8oYyxkKX0pfWZ1bmN0aW9uIG8oYyx1KXt2YXIgaD1bXSxmPVtdO3JldHVybiBhKGMsdSxmdW5jdGlvbihwKXtuKHAsYyx1KSxsdnQocCk+MD9oLnB1c2goW3BdKTpmLnB1c2gocCl9KSxmLmZvckVhY2goZnVuY3Rpb24ocCl7Zm9yKHZhciBkPTAsZz1oLmxlbmd0aCxfO2Q8ZzsrK2QpaWYoY3Z0KChfPWhbZF0pWzBdLHApIT09LTEpe18ucHVzaChwKTtyZXR1cm59fSkse3R5cGU6Ik11bHRpUG9seWdvbiIsdmFsdWU6dSxjb29yZGluYXRlczpofX1mdW5jdGlvbiBhKGMsdSxoKXt2YXIgZj1uZXcgQXJyYXkscD1uZXcgQXJyYXksZCxnLF8seSx4LGI7Zm9yKGQ9Zz0tMSx5PWNbMF0+PXUsSXBbeTw8MV0uZm9yRWFjaChTKTsrK2Q8ZS0xOylfPXkseT1jW2QrMV0+PXUsSXBbX3x5PDwxXS5mb3JFYWNoKFMpO2ZvcihJcFt5PDwwXS5mb3JFYWNoKFMpOysrZzx0LTE7KXtmb3IoZD0tMSx5PWNbZyplK2VdPj11LHg9Y1tnKmVdPj11LElwW3k8PDF8eDw8Ml0uZm9yRWFjaChTKTsrK2Q8ZS0xOylfPXkseT1jW2cqZStlK2QrMV0+PXUsYj14LHg9Y1tnKmUrZCsxXT49dSxJcFtffHk8PDF8eDw8MnxiPDwzXS5mb3JFYWNoKFMpO0lwW3l8eDw8M10uZm9yRWFjaChTKX1mb3IoZD0tMSx4PWNbZyplXT49dSxJcFt4PDwyXS5mb3JFYWNoKFMpOysrZDxlLTE7KWI9eCx4PWNbZyplK2QrMV0+PXUsSXBbeDw8MnxiPDwzXS5mb3JFYWNoKFMpO0lwW3g8PDNdLmZvckVhY2goUyk7ZnVuY3Rpb24gUyhDKXt2YXIgUD1bQ1swXVswXStkLENbMF1bMV0rZ10saz1bQ1sxXVswXStkLENbMV1bMV0rZ10sTz1zKFApLEQ9cyhrKSxCLEk7KEI9cFtPXSk/KEk9ZltEXSk/KGRlbGV0ZSBwW0IuZW5kXSxkZWxldGUgZltJLnN0YXJ0XSxCPT09ST8oQi5yaW5nLnB1c2goayksaChCLnJpbmcpKTpmW0Iuc3RhcnRdPXBbSS5lbmRdPXtzdGFydDpCLnN0YXJ0LGVuZDpJLmVuZCxyaW5nOkIucmluZy5jb25jYXQoSS5yaW5nKX0pOihkZWxldGUgcFtCLmVuZF0sQi5yaW5nLnB1c2goaykscFtCLmVuZD1EXT1CKTooQj1mW0RdKT8oST1wW09dKT8oZGVsZXRlIGZbQi5zdGFydF0sZGVsZXRlIHBbSS5lbmRdLEI9PT1JPyhCLnJpbmcucHVzaChrKSxoKEIucmluZykpOmZbSS5zdGFydF09cFtCLmVuZF09e3N0YXJ0Okkuc3RhcnQsZW5kOkIuZW5kLHJpbmc6SS5yaW5nLmNvbmNhdChCLnJpbmcpfSk6KGRlbGV0ZSBmW0Iuc3RhcnRdLEIucmluZy51bnNoaWZ0KFApLGZbQi5zdGFydD1PXT1CKTpmW09dPXBbRF09e3N0YXJ0Ok8sZW5kOkQscmluZzpbUCxrXX19fWZ1bmN0aW9uIHMoYyl7cmV0dXJuIGNbMF0qMitjWzFdKihlKzEpKjR9ZnVuY3Rpb24gbChjLHUsaCl7Yy5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBwPWZbMF0sZD1mWzFdLGc9cHwwLF89ZHwwLHkseD11W18qZStnXTtwPjAmJnA8ZSYmZz09PXAmJih5PXVbXyplK2ctMV0sZlswXT1wKyhoLXkpLyh4LXkpLS41KSxkPjAmJmQ8dCYmXz09PWQmJih5PXVbKF8tMSkqZStnXSxmWzFdPWQrKGgteSkvKHgteSktLjUpfSl9cmV0dXJuIGkuY29udG91cj1vLGkuc2l6ZT1mdW5jdGlvbihjKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm5bZSx0XTt2YXIgdT1NYXRoLmNlaWwoY1swXSksaD1NYXRoLmNlaWwoY1sxXSk7aWYoISh1PjApfHwhKGg+MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gZT11LHQ9aCxpfSxpLnRocmVzaG9sZHM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpBcnJheS5pc0FycmF5KGMpP09oKCRMLmNhbGwoYykpOk9oKGMpLGkpOnJ9LGkuc21vb3RoPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWM/bDp1dnQsaSk6bj09PWx9LGl9ZnVuY3Rpb24gWkwoZSx0LHIpe2Zvcih2YXIgbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz0ocjw8MSkrMSxhPTA7YTxpOysrYSlmb3IodmFyIHM9MCxsPTA7czxuK3I7KytzKXM8biYmKGwrPWUuZGF0YVtzK2Eqbl0pLHM+PXImJihzPj1vJiYobC09ZS5kYXRhW3MtbythKm5dKSx0LmRhdGFbcy1yK2Eqbl09bC9NYXRoLm1pbihzKzEsbi0xK28tcyxvKSl9ZnVuY3Rpb24gSkwoZSx0LHIpe2Zvcih2YXIgbj1lLndpZHRoLGk9ZS5oZWlnaHQsbz0ocjw8MSkrMSxhPTA7YTxuOysrYSlmb3IodmFyIHM9MCxsPTA7czxpK3I7KytzKXM8aSYmKGwrPWUuZGF0YVthK3Mqbl0pLHM+PXImJihzPj1vJiYobC09ZS5kYXRhW2ErKHMtbykqbl0pLHQuZGF0YVthKyhzLXIpKm5dPWwvTWF0aC5taW4ocysxLGktMStvLXMsbykpfWZ1bmN0aW9uIE9TZShlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiB6U2UoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gRlNlKCl7cmV0dXJuIDF9ZnVuY3Rpb24gaHZ0KCl7dmFyIGU9T1NlLHQ9elNlLHI9RlNlLG49OTYwLGk9NTAwLG89MjAsYT0yLHM9byozLGw9bitzKjI+PmEsYz1pK3MqMj4+YSx1PU9oKDIwKTtmdW5jdGlvbiBoKHkpe3ZhciB4PW5ldyBGbG9hdDMyQXJyYXkobCpjKSxiPW5ldyBGbG9hdDMyQXJyYXkobCpjKTt5LmZvckVhY2goZnVuY3Rpb24oUCxrLE8pe3ZhciBEPStlKFAsayxPKStzPj5hLEI9K3QoUCxrLE8pK3M+PmEsST0rcihQLGssTyk7RD49MCYmRDxsJiZCPj0wJiZCPGMmJih4W0QrQipsXSs9SSl9KSxaTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0sbz4+YSksSkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOnh9LG8+PmEpLFpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTpifSxvPj5hKSxKTCh7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6eH0sbz4+YSksWkwoe3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSx7d2lkdGg6bCxoZWlnaHQ6YyxkYXRhOmJ9LG8+PmEpLEpMKHt3aWR0aDpsLGhlaWdodDpjLGRhdGE6Yn0se3dpZHRoOmwsaGVpZ2h0OmMsZGF0YTp4fSxvPj5hKTt2YXIgUz11KHgpO2lmKCFBcnJheS5pc0FycmF5KFMpKXt2YXIgQz1sdSh4KTtTPXRsKDAsQyxTKSxTPUlyKDAsTWF0aC5mbG9vcihDL1MpKlMsUyksUy5zaGlmdCgpfXJldHVybiBLTCgpLnRocmVzaG9sZHMoUykuc2l6ZShbbCxjXSkoeCkubWFwKGYpfWZ1bmN0aW9uIGYoeSl7cmV0dXJuIHkudmFsdWUqPU1hdGgucG93KDIsLTIqYSkseS5jb29yZGluYXRlcy5mb3JFYWNoKHApLHl9ZnVuY3Rpb24gcCh5KXt5LmZvckVhY2goZCl9ZnVuY3Rpb24gZCh5KXt5LmZvckVhY2goZyl9ZnVuY3Rpb24gZyh5KXt5WzBdPXlbMF0qTWF0aC5wb3coMixhKS1zLHlbMV09eVsxXSpNYXRoLnBvdygyLGEpLXN9ZnVuY3Rpb24gXygpe3JldHVybiBzPW8qMyxsPW4rcyoyPj5hLGM9aStzKjI+PmEsaH1yZXR1cm4gaC54PWZ1bmN0aW9uKHkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB5PT0iZnVuY3Rpb24iP3k6T2goK3kpLGgpOmV9LGgueT1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTp0fSxoLndlaWdodD1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgeT09ImZ1bmN0aW9uIj95Ok9oKCt5KSxoKTpyfSxoLnNpemU9ZnVuY3Rpb24oeSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuW24saV07dmFyIHg9TWF0aC5jZWlsKHlbMF0pLGI9TWF0aC5jZWlsKHlbMV0pO2lmKCEoeD49MCkmJiEoeD49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpemUiKTtyZXR1cm4gbj14LGk9YixfKCl9LGguY2VsbFNpemU9ZnVuY3Rpb24oeSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIDE8PGE7aWYoISgoeT0reSk+PTEpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjZWxsIHNpemUiKTtyZXR1cm4gYT1NYXRoLmZsb29yKE1hdGgubG9nKHkpL01hdGguTE4yKSxfKCl9LGgudGhyZXNob2xkcz1mdW5jdGlvbih5KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10eXBlb2YgeT09ImZ1bmN0aW9uIj95OkFycmF5LmlzQXJyYXkoeSk/T2goJEwuY2FsbCh5KSk6T2goeSksaCk6dX0saC5iYW5kd2lkdGg9ZnVuY3Rpb24oeSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIE1hdGguc3FydChvKihvKzEpKTtpZighKCh5PSt5KT49MCkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGJhbmR3aWR0aCIpO3JldHVybiBvPU1hdGgucm91bmQoKE1hdGguc3FydCg0KnkqeSsxKS0xKS8yKSxfKCl9LGh9a20oKTtVRSgpO0lfKCk7ZnVuY3Rpb24gcVNlKGUpe2lmKCFlLm9rKXRocm93IG5ldyBFcnJvcihlLnN0YXR1cysiICIrZS5zdGF0dXNUZXh0KTtyZXR1cm4gZS5ibG9iKCl9ZnVuY3Rpb24gSXZ0KGUsdCl7cmV0dXJuIGZldGNoKGUsdCkudGhlbihxU2UpfWZ1bmN0aW9uIEdTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7cmV0dXJuIGUuYXJyYXlCdWZmZXIoKX1mdW5jdGlvbiBMdnQoZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKEdTZSl9VUUoKTtmdW5jdGlvbiBXU2UoZSl7aWYoIWUub2spdGhyb3cgbmV3IEVycm9yKGUuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3JldHVybiBlLnRleHQoKX1mdW5jdGlvbiBEXyhlLHQpe3JldHVybiBmZXRjaChlLHQpLnRoZW4oV1NlKX1mdW5jdGlvbiBrdnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTImJnR5cGVvZiByPT0iZnVuY3Rpb24iJiYobj1yLHI9dm9pZCAwKSxEXyh0LHIpLnRoZW4oZnVuY3Rpb24oaSl7cmV0dXJuIGUoaSxuKX0pfX1mdW5jdGlvbiBhaihlLHQscixuKXthcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIHI9PSJmdW5jdGlvbiImJihuPXIscj12b2lkIDApO3ZhciBpPVdtKGUpO3JldHVybiBEXyh0LHIpLnRoZW4oZnVuY3Rpb24obyl7cmV0dXJuIGkucGFyc2UobyxuKX0pfXZhciBSdnQ9a3Z0KENiKSxOdnQ9a3Z0KEFiKTtmdW5jdGlvbiBEdnQoZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixuKXt2YXIgaT1uZXcgSW1hZ2U7Zm9yKHZhciBvIGluIHQpaVtvXT10W29dO2kub25lcnJvcj1uLGkub25sb2FkPWZ1bmN0aW9uKCl7cihpKX0saS5zcmM9ZX0pfWZ1bmN0aW9uIFlTZShlKXtpZighZS5vayl0aHJvdyBuZXcgRXJyb3IoZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7aWYoIShlLnN0YXR1cz09PTIwNHx8ZS5zdGF0dXM9PT0yMDUpKXJldHVybiBlLmpzb24oKX1mdW5jdGlvbiBPdnQoZSx0KXtyZXR1cm4gZmV0Y2goZSx0KS50aGVuKFlTZSl9ZnVuY3Rpb24gc2ooZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIERfKHQscikudGhlbihmdW5jdGlvbihuKXtyZXR1cm4gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhuLGUpfSl9fXZhciB6dnQ9c2ooImFwcGxpY2F0aW9uL3htbCIpLEZ2dD1zaigidGV4dC9odG1sIiksQnZ0PXNqKCJpbWFnZS9zdmcreG1sIik7ZnVuY3Rpb24gSHZ0KGUsdCl7dmFyIHI7ZT09bnVsbCYmKGU9MCksdD09bnVsbCYmKHQ9MCk7ZnVuY3Rpb24gbigpe3ZhciBpLG89ci5sZW5ndGgsYSxzPTAsbD0wO2ZvcihpPTA7aTxvOysraSlhPXJbaV0scys9YS54LGwrPWEueTtmb3Iocz1zL28tZSxsPWwvby10LGk9MDtpPG87KytpKWE9cltpXSxhLngtPXMsYS55LT1sfXJldHVybiBuLmluaXRpYWxpemU9ZnVuY3Rpb24oaSl7cj1pfSxuLng9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K2ksbik6ZX0sbi55PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStpLG4pOnR9LG59ZnVuY3Rpb24gT24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGZ1KCl7cmV0dXJuKE1hdGgucmFuZG9tKCktLjUpKjFlLTZ9ZnVuY3Rpb24gVnZ0KGUpe3ZhciB0PSt0aGlzLl94LmNhbGwobnVsbCxlKSxyPSt0aGlzLl95LmNhbGwobnVsbCxlKTtyZXR1cm4gVXZ0KHRoaXMuY292ZXIodCxyKSx0LHIsZSl9ZnVuY3Rpb24gVXZ0KGUsdCxyLG4pe2lmKGlzTmFOKHQpfHxpc05hTihyKSlyZXR1cm4gZTt2YXIgaSxvPWUuX3Jvb3QsYT17ZGF0YTpufSxzPWUuX3gwLGw9ZS5feTAsYz1lLl94MSx1PWUuX3kxLGgsZixwLGQsZyxfLHkseDtpZighbylyZXR1cm4gZS5fcm9vdD1hLGU7Zm9yKDtvLmxlbmd0aDspaWYoKGc9dD49KGg9KHMrYykvMikpP3M9aDpjPWgsKF89cj49KGY9KGwrdSkvMikpP2w9Zjp1PWYsaT1vLCEobz1vW3k9Xzw8MXxnXSkpcmV0dXJuIGlbeV09YSxlO2lmKHA9K2UuX3guY2FsbChudWxsLG8uZGF0YSksZD0rZS5feS5jYWxsKG51bGwsby5kYXRhKSx0PT09cCYmcj09PWQpcmV0dXJuIGEubmV4dD1vLGk/aVt5XT1hOmUuX3Jvb3Q9YSxlO2RvIGk9aT9pW3ldPW5ldyBBcnJheSg0KTplLl9yb290PW5ldyBBcnJheSg0KSwoZz10Pj0oaD0ocytjKS8yKSk/cz1oOmM9aCwoXz1yPj0oZj0obCt1KS8yKSk/bD1mOnU9Zjt3aGlsZSgoeT1fPDwxfGcpPT09KHg9KGQ+PWYpPDwxfHA+PWgpKTtyZXR1cm4gaVt4XT1vLGlbeV09YSxlfWZ1bmN0aW9uIHF2dChlKXt2YXIgdCxyLG49ZS5sZW5ndGgsaSxvLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLGw9MS8wLGM9MS8wLHU9LTEvMCxoPS0xLzA7Zm9yKHI9MDtyPG47KytyKWlzTmFOKGk9K3RoaXMuX3guY2FsbChudWxsLHQ9ZVtyXSkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSl8fChhW3JdPWksc1tyXT1vLGk8bCYmKGw9aSksaT51JiYodT1pKSxvPGMmJihjPW8pLG8+aCYmKGg9bykpO2lmKGw+dXx8Yz5oKXJldHVybiB0aGlzO2Zvcih0aGlzLmNvdmVyKGwsYykuY292ZXIodSxoKSxyPTA7cjxuOysrcilVdnQodGhpcyxhW3JdLHNbcl0sZVtyXSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gR3Z0KGUsdCl7aWYoaXNOYU4oZT0rZSl8fGlzTmFOKHQ9K3QpKXJldHVybiB0aGlzO3ZhciByPXRoaXMuX3gwLG49dGhpcy5feTAsaT10aGlzLl94MSxvPXRoaXMuX3kxO2lmKGlzTmFOKHIpKWk9KHI9TWF0aC5mbG9vcihlKSkrMSxvPShuPU1hdGguZmxvb3IodCkpKzE7ZWxzZXtmb3IodmFyIGE9aS1yLHM9dGhpcy5fcm9vdCxsLGM7cj5lfHxlPj1pfHxuPnR8fHQ+PW87KXN3aXRjaChjPSh0PG4pPDwxfGU8cixsPW5ldyBBcnJheSg0KSxsW2NdPXMscz1sLGEqPTIsYyl7Y2FzZSAwOmk9cithLG89bithO2JyZWFrO2Nhc2UgMTpyPWktYSxvPW4rYTticmVhaztjYXNlIDI6aT1yK2Esbj1vLWE7YnJlYWs7Y2FzZSAzOnI9aS1hLG49by1hO2JyZWFrfXRoaXMuX3Jvb3QmJnRoaXMuX3Jvb3QubGVuZ3RoJiYodGhpcy5fcm9vdD1zKX1yZXR1cm4gdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9byx0aGlzfWZ1bmN0aW9uIFd2dCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLnZpc2l0KGZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClkbyBlLnB1c2godC5kYXRhKTt3aGlsZSh0PXQubmV4dCl9KSxlfWZ1bmN0aW9uIFl2dChlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmNvdmVyKCtlWzBdWzBdLCtlWzBdWzFdKS5jb3ZlcigrZVsxXVswXSwrZVsxXVsxXSk6aXNOYU4odGhpcy5feDApP3ZvaWQgMDpbW3RoaXMuX3gwLHRoaXMuX3kwXSxbdGhpcy5feDEsdGhpcy5feTFdXX1mdW5jdGlvbiB5byhlLHQscixuLGkpe3RoaXMubm9kZT1lLHRoaXMueDA9dCx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX1mdW5jdGlvbiBqdnQoZSx0LHIpe3ZhciBuLGk9dGhpcy5feDAsbz10aGlzLl95MCxhLHMsbCxjLHU9dGhpcy5feDEsaD10aGlzLl95MSxmPVtdLHA9dGhpcy5fcm9vdCxkLGc7Zm9yKHAmJmYucHVzaChuZXcgeW8ocCxpLG8sdSxoKSkscj09bnVsbD9yPTEvMDooaT1lLXIsbz10LXIsdT1lK3IsaD10K3Iscio9cik7ZD1mLnBvcCgpOylpZighKCEocD1kLm5vZGUpfHwoYT1kLngwKT51fHwocz1kLnkwKT5ofHwobD1kLngxKTxpfHwoYz1kLnkxKTxvKSlpZihwLmxlbmd0aCl7dmFyIF89KGErbCkvMix5PShzK2MpLzI7Zi5wdXNoKG5ldyB5byhwWzNdLF8seSxsLGMpLG5ldyB5byhwWzJdLGEseSxfLGMpLG5ldyB5byhwWzFdLF8scyxsLHkpLG5ldyB5byhwWzBdLGEscyxfLHkpKSwoZz0odD49eSk8PDF8ZT49XykmJihkPWZbZi5sZW5ndGgtMV0sZltmLmxlbmd0aC0xXT1mW2YubGVuZ3RoLTEtZ10sZltmLmxlbmd0aC0xLWddPWQpfWVsc2V7dmFyIHg9ZS0rdGhpcy5feC5jYWxsKG51bGwscC5kYXRhKSxiPXQtK3RoaXMuX3kuY2FsbChudWxsLHAuZGF0YSksUz14KngrYipiO2lmKFM8cil7dmFyIEM9TWF0aC5zcXJ0KHI9Uyk7aT1lLUMsbz10LUMsdT1lK0MsaD10K0Msbj1wLmRhdGF9fXJldHVybiBufWZ1bmN0aW9uIFh2dChlKXtpZihpc05hTih1PSt0aGlzLl94LmNhbGwobnVsbCxlKSl8fGlzTmFOKGg9K3RoaXMuX3kuY2FsbChudWxsLGUpKSlyZXR1cm4gdGhpczt2YXIgdCxyPXRoaXMuX3Jvb3QsbixpLG8sYT10aGlzLl94MCxzPXRoaXMuX3kwLGw9dGhpcy5feDEsYz10aGlzLl95MSx1LGgsZixwLGQsZyxfLHk7aWYoIXIpcmV0dXJuIHRoaXM7aWYoci5sZW5ndGgpZm9yKDs7KXtpZigoZD11Pj0oZj0oYStsKS8yKSk/YT1mOmw9ZiwoZz1oPj0ocD0ocytjKS8yKSk/cz1wOmM9cCx0PXIsIShyPXJbXz1nPDwxfGRdKSlyZXR1cm4gdGhpcztpZighci5sZW5ndGgpYnJlYWs7KHRbXysxJjNdfHx0W18rMiYzXXx8dFtfKzMmM10pJiYobj10LHk9Xyl9Zm9yKDtyLmRhdGEhPT1lOylpZihpPXIsIShyPXIubmV4dCkpcmV0dXJuIHRoaXM7cmV0dXJuKG89ci5uZXh0KSYmZGVsZXRlIHIubmV4dCxpPyhvP2kubmV4dD1vOmRlbGV0ZSBpLm5leHQsdGhpcyk6dD8obz90W19dPW86ZGVsZXRlIHRbX10sKHI9dFswXXx8dFsxXXx8dFsyXXx8dFszXSkmJnI9PT0odFszXXx8dFsyXXx8dFsxXXx8dFswXSkmJiFyLmxlbmd0aCYmKG4/blt5XT1yOnRoaXMuX3Jvb3Q9ciksdGhpcyk6KHRoaXMuX3Jvb3Q9byx0aGlzKX1mdW5jdGlvbiAkdnQoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7Kyt0KXRoaXMucmVtb3ZlKGVbdF0pO3JldHVybiB0aGlzfWZ1bmN0aW9uIEt2dCgpe3JldHVybiB0aGlzLl9yb290fWZ1bmN0aW9uIFp2dCgpe3ZhciBlPTA7cmV0dXJuIHRoaXMudmlzaXQoZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKWRvKytlO3doaWxlKHQ9dC5uZXh0KX0pLGV9ZnVuY3Rpb24gSnZ0KGUpe3ZhciB0PVtdLHIsbj10aGlzLl9yb290LGksbyxhLHMsbDtmb3IobiYmdC5wdXNoKG5ldyB5byhuLHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7cj10LnBvcCgpOylpZighZShuPXIubm9kZSxvPXIueDAsYT1yLnkwLHM9ci54MSxsPXIueTEpJiZuLmxlbmd0aCl7dmFyIGM9KG8rcykvMix1PShhK2wpLzI7KGk9blszXSkmJnQucHVzaChuZXcgeW8oaSxjLHUscyxsKSksKGk9blsyXSkmJnQucHVzaChuZXcgeW8oaSxvLHUsYyxsKSksKGk9blsxXSkmJnQucHVzaChuZXcgeW8oaSxjLGEscyx1KSksKGk9blswXSkmJnQucHVzaChuZXcgeW8oaSxvLGEsYyx1KSl9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gUXZ0KGUpe3ZhciB0PVtdLHI9W10sbjtmb3IodGhpcy5fcm9vdCYmdC5wdXNoKG5ldyB5byh0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7bj10LnBvcCgpOyl7dmFyIGk9bi5ub2RlO2lmKGkubGVuZ3RoKXt2YXIgbyxhPW4ueDAscz1uLnkwLGw9bi54MSxjPW4ueTEsdT0oYStsKS8yLGg9KHMrYykvMjsobz1pWzBdKSYmdC5wdXNoKG5ldyB5byhvLGEscyx1LGgpKSwobz1pWzFdKSYmdC5wdXNoKG5ldyB5byhvLHUscyxsLGgpKSwobz1pWzJdKSYmdC5wdXNoKG5ldyB5byhvLGEsaCx1LGMpKSwobz1pWzNdKSYmdC5wdXNoKG5ldyB5byhvLHUsaCxsLGMpKX1yLnB1c2gobil9Zm9yKDtuPXIucG9wKCk7KWUobi5ub2RlLG4ueDAsbi55MCxuLngxLG4ueTEpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHR4dChlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBleHQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3g9ZSx0aGlzKTp0aGlzLl94fWZ1bmN0aW9uIHJ4dChlKXtyZXR1cm4gZVsxXX1mdW5jdGlvbiBueHQoZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX3k9ZSx0aGlzKTp0aGlzLl95fWZ1bmN0aW9uIHpoKGUsdCxyKXt2YXIgbj1uZXcgbGoodD09bnVsbD90eHQ6dCxyPT1udWxsP3J4dDpyLE5hTixOYU4sTmFOLE5hTik7cmV0dXJuIGU9PW51bGw/bjpuLmFkZEFsbChlKX1mdW5jdGlvbiBsaihlLHQscixuLGksbyl7dGhpcy5feD1lLHRoaXMuX3k9dCx0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1vLHRoaXMuX3Jvb3Q9dm9pZCAwfWZ1bmN0aW9uIGl4dChlKXtmb3IodmFyIHQ9e2RhdGE6ZS5kYXRhfSxyPXQ7ZT1lLm5leHQ7KXI9ci5uZXh0PXtkYXRhOmUuZGF0YX07cmV0dXJuIHR9dmFyIHphPXpoLnByb3RvdHlwZT1sai5wcm90b3R5cGU7emEuY29weT1mdW5jdGlvbigpe3ZhciBlPW5ldyBsaih0aGlzLl94LHRoaXMuX3ksdGhpcy5feDAsdGhpcy5feTAsdGhpcy5feDEsdGhpcy5feTEpLHQ9dGhpcy5fcm9vdCxyLG47aWYoIXQpcmV0dXJuIGU7aWYoIXQubGVuZ3RoKXJldHVybiBlLl9yb290PWl4dCh0KSxlO2ZvcihyPVt7c291cmNlOnQsdGFyZ2V0OmUuX3Jvb3Q9bmV3IEFycmF5KDQpfV07dD1yLnBvcCgpOylmb3IodmFyIGk9MDtpPDQ7KytpKShuPXQuc291cmNlW2ldKSYmKG4ubGVuZ3RoP3IucHVzaCh7c291cmNlOm4sdGFyZ2V0OnQudGFyZ2V0W2ldPW5ldyBBcnJheSg0KX0pOnQudGFyZ2V0W2ldPWl4dChuKSk7cmV0dXJuIGV9O3phLmFkZD1WdnQ7emEuYWRkQWxsPXF2dDt6YS5jb3Zlcj1HdnQ7emEuZGF0YT1XdnQ7emEuZXh0ZW50PVl2dDt6YS5maW5kPWp2dDt6YS5yZW1vdmU9WHZ0O3phLnJlbW92ZUFsbD0kdnQ7emEucm9vdD1LdnQ7emEuc2l6ZT1adnQ7emEudmlzaXQ9SnZ0O3phLnZpc2l0QWZ0ZXI9UXZ0O3phLng9ZXh0O3phLnk9bnh0O2Z1bmN0aW9uIGpTZShlKXtyZXR1cm4gZS54K2Uudnh9ZnVuY3Rpb24gWFNlKGUpe3JldHVybiBlLnkrZS52eX1mdW5jdGlvbiBveHQoZSl7dmFyIHQscixuPTEsaT0xO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1PbihlPT1udWxsPzE6K2UpKTtmdW5jdGlvbiBvKCl7Zm9yKHZhciBsLGM9dC5sZW5ndGgsdSxoLGYscCxkLGcsXz0wO188aTsrK18pZm9yKHU9emgodCxqU2UsWFNlKS52aXNpdEFmdGVyKGEpLGw9MDtsPGM7KytsKWg9dFtsXSxkPXJbaC5pbmRleF0sZz1kKmQsZj1oLngraC52eCxwPWgueStoLnZ5LHUudmlzaXQoeSk7ZnVuY3Rpb24geSh4LGIsUyxDLFApe3ZhciBrPXguZGF0YSxPPXgucixEPWQrTztpZihrKXtpZihrLmluZGV4PmguaW5kZXgpe3ZhciBCPWYtay54LWsudngsST1wLWsueS1rLnZ5LEw9QipCK0kqSTtMPEQqRCYmKEI9PT0wJiYoQj1mdSgpLEwrPUIqQiksST09PTAmJihJPWZ1KCksTCs9SSpJKSxMPShELShMPU1hdGguc3FydChMKSkpL0wqbixoLnZ4Kz0oQio9TCkqKEQ9KE8qPU8pLyhnK08pKSxoLnZ5Kz0oSSo9TCkqRCxrLnZ4LT1CKihEPTEtRCksay52eS09SSpEKX1yZXR1cm59cmV0dXJuIGI+ZitEfHxDPGYtRHx8Uz5wK0R8fFA8cC1EfX1mdW5jdGlvbiBhKGwpe2lmKGwuZGF0YSlyZXR1cm4gbC5yPXJbbC5kYXRhLmluZGV4XTtmb3IodmFyIGM9bC5yPTA7Yzw0OysrYylsW2NdJiZsW2NdLnI+bC5yJiYobC5yPWxbY10ucil9ZnVuY3Rpb24gcygpe2lmKCEhdCl7dmFyIGwsYz10Lmxlbmd0aCx1O2ZvcihyPW5ldyBBcnJheShjKSxsPTA7bDxjOysrbCl1PXRbbF0sclt1LmluZGV4XT0rZSh1LGwsdCl9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24obCl7dD1sLHMoKX0sby5pdGVyYXRpb25zPWZ1bmN0aW9uKGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPStsLG8pOml9LG8uc3RyZW5ndGg9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2wsbyk6bn0sby5yYWRpdXM9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpPbigrbCkscygpLG8pOmV9LG99VGIoKTtmdW5jdGlvbiAkU2UoZSl7cmV0dXJuIGUuaW5kZXh9ZnVuY3Rpb24gYXh0KGUsdCl7dmFyIHI9ZS5nZXQodCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK3QpO3JldHVybiByfWZ1bmN0aW9uIHN4dChlKXt2YXIgdD0kU2Uscj11LG4saT1PbigzMCksbyxhLHMsbCxjPTE7ZT09bnVsbCYmKGU9W10pO2Z1bmN0aW9uIHUoZyl7cmV0dXJuIDEvTWF0aC5taW4oc1tnLnNvdXJjZS5pbmRleF0sc1tnLnRhcmdldC5pbmRleF0pfWZ1bmN0aW9uIGgoZyl7Zm9yKHZhciBfPTAseT1lLmxlbmd0aDtfPGM7KytfKWZvcih2YXIgeD0wLGIsUyxDLFAsayxPLEQ7eDx5OysreCliPWVbeF0sUz1iLnNvdXJjZSxDPWIudGFyZ2V0LFA9Qy54K0MudngtUy54LVMudnh8fGZ1KCksaz1DLnkrQy52eS1TLnktUy52eXx8ZnUoKSxPPU1hdGguc3FydChQKlArayprKSxPPShPLW9beF0pL08qZypuW3hdLFAqPU8sayo9TyxDLnZ4LT1QKihEPWxbeF0pLEMudnktPWsqRCxTLnZ4Kz1QKihEPTEtRCksUy52eSs9aypEfWZ1bmN0aW9uIGYoKXtpZighIWEpe3ZhciBnLF89YS5sZW5ndGgseT1lLmxlbmd0aCx4PUppKGEsdCksYjtmb3IoZz0wLHM9bmV3IEFycmF5KF8pO2c8eTsrK2cpYj1lW2ddLGIuaW5kZXg9Zyx0eXBlb2YgYi5zb3VyY2UhPSJvYmplY3QiJiYoYi5zb3VyY2U9YXh0KHgsYi5zb3VyY2UpKSx0eXBlb2YgYi50YXJnZXQhPSJvYmplY3QiJiYoYi50YXJnZXQ9YXh0KHgsYi50YXJnZXQpKSxzW2Iuc291cmNlLmluZGV4XT0oc1tiLnNvdXJjZS5pbmRleF18fDApKzEsc1tiLnRhcmdldC5pbmRleF09KHNbYi50YXJnZXQuaW5kZXhdfHwwKSsxO2ZvcihnPTAsbD1uZXcgQXJyYXkoeSk7Zzx5OysrZyliPWVbZ10sbFtnXT1zW2Iuc291cmNlLmluZGV4XS8oc1tiLnNvdXJjZS5pbmRleF0rc1tiLnRhcmdldC5pbmRleF0pO249bmV3IEFycmF5KHkpLHAoKSxvPW5ldyBBcnJheSh5KSxkKCl9fWZ1bmN0aW9uIHAoKXtpZighIWEpZm9yKHZhciBnPTAsXz1lLmxlbmd0aDtnPF87KytnKW5bZ109K3IoZVtnXSxnLGUpfWZ1bmN0aW9uIGQoKXtpZighIWEpZm9yKHZhciBnPTAsXz1lLmxlbmd0aDtnPF87KytnKW9bZ109K2koZVtnXSxnLGUpfXJldHVybiBoLmluaXRpYWxpemU9ZnVuY3Rpb24oZyl7YT1nLGYoKX0saC5saW5rcz1mdW5jdGlvbihnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1nLGYoKSxoKTplfSxoLmlkPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWcsaCk6dH0saC5pdGVyYXRpb25zPWZ1bmN0aW9uKGcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPStnLGgpOmN9LGguc3RyZW5ndGg9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dHlwZW9mIGc9PSJmdW5jdGlvbiI/ZzpPbigrZykscCgpLGgpOnJ9LGguZGlzdGFuY2U9ZnVuY3Rpb24oZyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGc9PSJmdW5jdGlvbiI/ZzpPbigrZyksZCgpLGgpOml9LGh9a20oKTtUYigpO2Z1bmN0aW9uIGx4dChlKXtyZXR1cm4gZS54fWZ1bmN0aW9uIGN4dChlKXtyZXR1cm4gZS55fXZhciBLU2U9MTAsWlNlPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTtmdW5jdGlvbiB1eHQoZSl7dmFyIHQscj0xLG49LjAwMSxpPTEtTWF0aC5wb3cobiwxLzMwMCksbz0wLGE9LjYscz1KaSgpLGw9QV8odSksYz12cygidGljayIsImVuZCIpO2U9PW51bGwmJihlPVtdKTtmdW5jdGlvbiB1KCl7aCgpLGMuY2FsbCgidGljayIsdCkscjxuJiYobC5zdG9wKCksYy5jYWxsKCJlbmQiLHQpKX1mdW5jdGlvbiBoKGQpe3ZhciBnLF89ZS5sZW5ndGgseTtkPT09dm9pZCAwJiYoZD0xKTtmb3IodmFyIHg9MDt4PGQ7Kyt4KWZvcihyKz0oby1yKSppLHMuZWFjaChmdW5jdGlvbihiKXtiKHIpfSksZz0wO2c8XzsrK2cpeT1lW2ddLHkuZng9PW51bGw/eS54Kz15LnZ4Kj1hOih5Lng9eS5meCx5LnZ4PTApLHkuZnk9PW51bGw/eS55Kz15LnZ5Kj1hOih5Lnk9eS5meSx5LnZ5PTApO3JldHVybiB0fWZ1bmN0aW9uIGYoKXtmb3IodmFyIGQ9MCxnPWUubGVuZ3RoLF87ZDxnOysrZCl7aWYoXz1lW2RdLF8uaW5kZXg9ZCxfLmZ4IT1udWxsJiYoXy54PV8uZngpLF8uZnkhPW51bGwmJihfLnk9Xy5meSksaXNOYU4oXy54KXx8aXNOYU4oXy55KSl7dmFyIHk9S1NlKk1hdGguc3FydChkKSx4PWQqWlNlO18ueD15Kk1hdGguY29zKHgpLF8ueT15Kk1hdGguc2luKHgpfShpc05hTihfLnZ4KXx8aXNOYU4oXy52eSkpJiYoXy52eD1fLnZ5PTApfX1mdW5jdGlvbiBwKGQpe3JldHVybiBkLmluaXRpYWxpemUmJmQuaW5pdGlhbGl6ZShlKSxkfXJldHVybiBmKCksdD17dGljazpoLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbC5yZXN0YXJ0KHUpLHR9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gbC5zdG9wKCksdH0sbm9kZXM6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ZCxmKCkscy5lYWNoKHApLHQpOmV9LGFscGhhOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStkLHQpOnJ9LGFscGhhTWluOmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStkLHQpOm59LGFscGhhRGVjYXk6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9K2QsdCk6K2l9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPStkLHQpOm99LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9MS1kLHQpOjEtYX0sZm9yY2U6ZnVuY3Rpb24oZCxnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhnPT1udWxsP3MucmVtb3ZlKGQpOnMuc2V0KGQscChnKSksdCk6cy5nZXQoZCl9LGZpbmQ6ZnVuY3Rpb24oZCxnLF8pe3ZhciB5PTAseD1lLmxlbmd0aCxiLFMsQyxQLGs7Zm9yKF89PW51bGw/Xz0xLzA6Xyo9Xyx5PTA7eTx4OysreSlQPWVbeV0sYj1kLVAueCxTPWctUC55LEM9YipiK1MqUyxDPF8mJihrPVAsXz1DKTtyZXR1cm4ga30sb246ZnVuY3Rpb24oZCxnKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhjLm9uKGQsZyksdCk6Yy5vbihkKX19fWZ1bmN0aW9uIGh4dCgpe3ZhciBlLHQscixuPU9uKC0zMCksaSxvPTEsYT0xLzAscz0uODE7ZnVuY3Rpb24gbChmKXt2YXIgcCxkPWUubGVuZ3RoLGc9emgoZSxseHQsY3h0KS52aXNpdEFmdGVyKHUpO2ZvcihyPWYscD0wO3A8ZDsrK3ApdD1lW3BdLGcudmlzaXQoaCl9ZnVuY3Rpb24gYygpe2lmKCEhZSl7dmFyIGYscD1lLmxlbmd0aCxkO2ZvcihpPW5ldyBBcnJheShwKSxmPTA7ZjxwOysrZilkPWVbZl0saVtkLmluZGV4XT0rbihkLGYsZSl9fWZ1bmN0aW9uIHUoZil7dmFyIHA9MCxkLGcsXz0wLHkseCxiO2lmKGYubGVuZ3RoKXtmb3IoeT14PWI9MDtiPDQ7KytiKShkPWZbYl0pJiYoZz1NYXRoLmFicyhkLnZhbHVlKSkmJihwKz1kLnZhbHVlLF8rPWcseSs9ZypkLngseCs9ZypkLnkpO2YueD15L18sZi55PXgvX31lbHNle2Q9ZixkLng9ZC5kYXRhLngsZC55PWQuZGF0YS55O2RvIHArPWlbZC5kYXRhLmluZGV4XTt3aGlsZShkPWQubmV4dCl9Zi52YWx1ZT1wfWZ1bmN0aW9uIGgoZixwLGQsZyl7aWYoIWYudmFsdWUpcmV0dXJuITA7dmFyIF89Zi54LXQueCx5PWYueS10LnkseD1nLXAsYj1fKl8reSp5O2lmKHgqeC9zPGIpcmV0dXJuIGI8YSYmKF89PT0wJiYoXz1mdSgpLGIrPV8qXykseT09PTAmJih5PWZ1KCksYis9eSp5KSxiPG8mJihiPU1hdGguc3FydChvKmIpKSx0LnZ4Kz1fKmYudmFsdWUqci9iLHQudnkrPXkqZi52YWx1ZSpyL2IpLCEwO2lmKGYubGVuZ3RofHxiPj1hKXJldHVybjsoZi5kYXRhIT09dHx8Zi5uZXh0KSYmKF89PT0wJiYoXz1mdSgpLGIrPV8qXykseT09PTAmJih5PWZ1KCksYis9eSp5KSxiPG8mJihiPU1hdGguc3FydChvKmIpKSk7ZG8gZi5kYXRhIT09dCYmKHg9aVtmLmRhdGEuaW5kZXhdKnIvYix0LnZ4Kz1fKngsdC52eSs9eSp4KTt3aGlsZShmPWYubmV4dCl9cmV0dXJuIGwuaW5pdGlhbGl6ZT1mdW5jdGlvbihmKXtlPWYsYygpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBmPT0iZnVuY3Rpb24iP2Y6T24oK2YpLGMoKSxsKTpufSxsLmRpc3RhbmNlTWluPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWYqZixsKTpNYXRoLnNxcnQobyl9LGwuZGlzdGFuY2VNYXg9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ZipmLGwpOk1hdGguc3FydChhKX0sbC50aGV0YT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1mKmYsbCk6TWF0aC5zcXJ0KHMpfSxsfWZ1bmN0aW9uIGZ4dChlLHQscil7dmFyIG4saT1PbiguMSksbyxhO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1PbigrZSkpLHQ9PW51bGwmJih0PTApLHI9PW51bGwmJihyPTApO2Z1bmN0aW9uIHMoYyl7Zm9yKHZhciB1PTAsaD1uLmxlbmd0aDt1PGg7Kyt1KXt2YXIgZj1uW3VdLHA9Zi54LXR8fDFlLTYsZD1mLnktcnx8MWUtNixnPU1hdGguc3FydChwKnArZCpkKSxfPShhW3VdLWcpKm9bdV0qYy9nO2YudngrPXAqXyxmLnZ5Kz1kKl99fWZ1bmN0aW9uIGwoKXtpZighIW4pe3ZhciBjLHU9bi5sZW5ndGg7Zm9yKG89bmV3IEFycmF5KHUpLGE9bmV3IEFycmF5KHUpLGM9MDtjPHU7KytjKWFbY109K2UobltjXSxjLG4pLG9bY109aXNOYU4oYVtjXSk/MDoraShuW2NdLGMsbil9fXJldHVybiBzLmluaXRpYWxpemU9ZnVuY3Rpb24oYyl7bj1jLGwoKX0scy5zdHJlbmd0aD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOk9uKCtjKSxsKCkscyk6aX0scy5yYWRpdXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpPbigrYyksbCgpLHMpOmV9LHMueD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rYyxzKTp0fSxzLnk9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2Mscyk6cn0sc31mdW5jdGlvbiBweHQoZSl7dmFyIHQ9T24oLjEpLHIsbixpO3R5cGVvZiBlIT0iZnVuY3Rpb24iJiYoZT1PbihlPT1udWxsPzA6K2UpKTtmdW5jdGlvbiBvKHMpe2Zvcih2YXIgbD0wLGM9ci5sZW5ndGgsdTtsPGM7KytsKXU9cltsXSx1LnZ4Kz0oaVtsXS11LngpKm5bbF0qc31mdW5jdGlvbiBhKCl7aWYoISFyKXt2YXIgcyxsPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShsKSxpPW5ldyBBcnJheShsKSxzPTA7czxsOysrcyluW3NdPWlzTmFOKGlbc109K2UocltzXSxzLHIpKT8wOit0KHJbc10scyxyKX19cmV0dXJuIG8uaW5pdGlhbGl6ZT1mdW5jdGlvbihzKXtyPXMsYSgpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6T24oK3MpLGEoKSxvKTp0fSxvLng9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpPbigrcyksYSgpLG8pOmV9LG99ZnVuY3Rpb24gZHh0KGUpe3ZhciB0PU9uKC4xKSxyLG4saTt0eXBlb2YgZSE9ImZ1bmN0aW9uIiYmKGU9T24oZT09bnVsbD8wOitlKSk7ZnVuY3Rpb24gbyhzKXtmb3IodmFyIGw9MCxjPXIubGVuZ3RoLHU7bDxjOysrbCl1PXJbbF0sdS52eSs9KGlbbF0tdS55KSpuW2xdKnN9ZnVuY3Rpb24gYSgpe2lmKCEhcil7dmFyIHMsbD1yLmxlbmd0aDtmb3Iobj1uZXcgQXJyYXkobCksaT1uZXcgQXJyYXkobCkscz0wO3M8bDsrK3MpbltzXT1pc05hTihpW3NdPStlKHJbc10scyxyKSk/MDordChyW3NdLHMscil9fXJldHVybiBvLmluaXRpYWxpemU9ZnVuY3Rpb24ocyl7cj1zLGEoKX0sby5zdHJlbmd0aD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOk9uKCtzKSxhKCksbyk6dH0sby55PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6T24oK3MpLGEoKSxvKTplfSxvfWZ1bmN0aW9uIG14dChlKXtyZXR1cm4gTWF0aC5hYnMoZT1NYXRoLnJvdW5kKGUpKT49MWUyMT9lLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6ZS50b1N0cmluZygxMCl9ZnVuY3Rpb24gT18oZSx0KXtpZigocj0oZT10P2UudG9FeHBvbmVudGlhbCh0LTEpOmUudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIHIsbj1lLnNsaWNlKDAscik7cmV0dXJuW24ubGVuZ3RoPjE/blswXStuLnNsaWNlKDIpOm4sK2Uuc2xpY2UocisxKV19ZnVuY3Rpb24gRmgoZSl7cmV0dXJuIGU9T18oTWF0aC5hYnMoZSkpLGU/ZVsxXTpOYU59ZnVuY3Rpb24gZ3h0KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPXIubGVuZ3RoLG89W10sYT0wLHM9ZVswXSxsPTA7aT4wJiZzPjAmJihsK3MrMT5uJiYocz1NYXRoLm1heCgxLG4tbCkpLG8ucHVzaChyLnN1YnN0cmluZyhpLT1zLGkrcykpLCEoKGwrPXMrMSk+bikpOylzPWVbYT0oYSsxKSVlLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fWZ1bmN0aW9uIF94dChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihyKXtyZXR1cm4gZVsrcl19KX19dmFyIEpTZT0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8oMCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBMcChlKXtpZighKHQ9SlNlLmV4ZWMoZSkpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrZSk7dmFyIHQ7cmV0dXJuIG5ldyBxRSh7ZmlsbDp0WzFdLGFsaWduOnRbMl0sc2lnbjp0WzNdLHN5bWJvbDp0WzRdLHplcm86dFs1XSx3aWR0aDp0WzZdLGNvbW1hOnRbN10scHJlY2lzaW9uOnRbOF0mJnRbOF0uc2xpY2UoMSksdHJpbTp0WzldLHR5cGU6dFsxMF19KX1McC5wcm90b3R5cGU9cUUucHJvdG90eXBlO2Z1bmN0aW9uIHFFKGUpe3RoaXMuZmlsbD1lLmZpbGw9PT12b2lkIDA/IiAiOmUuZmlsbCsiIix0aGlzLmFsaWduPWUuYWxpZ249PT12b2lkIDA/Ij4iOmUuYWxpZ24rIiIsdGhpcy5zaWduPWUuc2lnbj09PXZvaWQgMD8iLSI6ZS5zaWduKyIiLHRoaXMuc3ltYm9sPWUuc3ltYm9sPT09dm9pZCAwPyIiOmUuc3ltYm9sKyIiLHRoaXMuemVybz0hIWUuemVybyx0aGlzLndpZHRoPWUud2lkdGg9PT12b2lkIDA/dm9pZCAwOitlLndpZHRoLHRoaXMuY29tbWE9ISFlLmNvbW1hLHRoaXMucHJlY2lzaW9uPWUucHJlY2lzaW9uPT09dm9pZCAwP3ZvaWQgMDorZS5wcmVjaXNpb24sdGhpcy50cmltPSEhZS50cmltLHRoaXMudHlwZT1lLnR5cGU9PT12b2lkIDA/IiI6ZS50eXBlKyIifXFFLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh0aGlzLndpZHRoPT09dm9pZCAwPyIiOk1hdGgubWF4KDEsdGhpcy53aWR0aHwwKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodGhpcy5wcmVjaXNpb249PT12b2lkIDA/IiI6Ii4iK01hdGgubWF4KDAsdGhpcy5wcmVjaXNpb258MCkpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2Z1bmN0aW9uIHl4dChlKXt0OmZvcih2YXIgdD1lLmxlbmd0aCxyPTEsbj0tMSxpO3I8dDsrK3Ipc3dpdGNoKGVbcl0pe2Nhc2UiLiI6bj1pPXI7YnJlYWs7Y2FzZSIwIjpuPT09MCYmKG49ciksaT1yO2JyZWFrO2RlZmF1bHQ6aWYoIStlW3JdKWJyZWFrIHQ7bj4wJiYobj0wKTticmVha31yZXR1cm4gbj4wP2Uuc2xpY2UoMCxuKStlLnNsaWNlKGkrMSk6ZX12YXIgY2o7ZnVuY3Rpb24gdnh0KGUsdCl7dmFyIHI9T18oZSx0KTtpZighcilyZXR1cm4gZSsiIjt2YXIgbj1yWzBdLGk9clsxXSxvPWktKGNqPU1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihpLzMpKSkqMykrMSxhPW4ubGVuZ3RoO3JldHVybiBvPT09YT9uOm8+YT9uK25ldyBBcnJheShvLWErMSkuam9pbigiMCIpOm8+MD9uLnNsaWNlKDAsbykrIi4iK24uc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrT18oZSxNYXRoLm1heCgwLHQrby0xKSlbMF19ZnVuY3Rpb24gdWooZSx0KXt2YXIgcj1PXyhlLHQpO2lmKCFyKXJldHVybiBlKyIiO3ZhciBuPXJbMF0saT1yWzFdO3JldHVybiBpPDA/IjAuIituZXcgQXJyYXkoLWkpLmpvaW4oIjAiKStuOm4ubGVuZ3RoPmkrMT9uLnNsaWNlKDAsaSsxKSsiLiIrbi5zbGljZShpKzEpOm4rbmV3IEFycmF5KGktbi5sZW5ndGgrMikuam9pbigiMCIpfXZhciBoaj17IiUiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUqMTAwKS50b0ZpeGVkKHQpfSxiOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKGUpe3JldHVybiBlKyIifSxkOm14dCxlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUudG9FeHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihlLHQpe3JldHVybiBlLnRvRml4ZWQodCl9LGc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS50b1ByZWNpc2lvbih0KX0sbzpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5yb3VuZChlKS50b1N0cmluZyg4KX0scDpmdW5jdGlvbihlLHQpe3JldHVybiB1aihlKjEwMCx0KX0scjp1aixzOnZ4dCxYOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfSx4OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnJvdW5kKGUpLnRvU3RyaW5nKDE2KX19O2Z1bmN0aW9uIGZqKGUpe3JldHVybiBlfXZhciB4eHQ9QXJyYXkucHJvdG90eXBlLm1hcCxieHQ9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceEI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07ZnVuY3Rpb24gdGsoZSl7dmFyIHQ9ZS5ncm91cGluZz09PXZvaWQgMHx8ZS50aG91c2FuZHM9PT12b2lkIDA/Zmo6Z3h0KHh4dC5jYWxsKGUuZ3JvdXBpbmcsTnVtYmVyKSxlLnRob3VzYW5kcysiIikscj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMF0rIiIsbj1lLmN1cnJlbmN5PT09dm9pZCAwPyIiOmUuY3VycmVuY3lbMV0rIiIsaT1lLmRlY2ltYWw9PT12b2lkIDA/Ii4iOmUuZGVjaW1hbCsiIixvPWUubnVtZXJhbHM9PT12b2lkIDA/Zmo6X3h0KHh4dC5jYWxsKGUubnVtZXJhbHMsU3RyaW5nKSksYT1lLnBlcmNlbnQ9PT12b2lkIDA/IiUiOmUucGVyY2VudCsiIixzPWUubWludXM9PT12b2lkIDA/Ii0iOmUubWludXMrIiIsbD1lLm5hbj09PXZvaWQgMD8iTmFOIjplLm5hbisiIjtmdW5jdGlvbiBjKGgpe2g9THAoaCk7dmFyIGY9aC5maWxsLHA9aC5hbGlnbixkPWguc2lnbixnPWguc3ltYm9sLF89aC56ZXJvLHk9aC53aWR0aCx4PWguY29tbWEsYj1oLnByZWNpc2lvbixTPWgudHJpbSxDPWgudHlwZTtDPT09Im4iPyh4PSEwLEM9ImciKTpoaltDXXx8KGI9PT12b2lkIDAmJihiPTEyKSxTPSEwLEM9ImciKSwoX3x8Zj09PSIwIiYmcD09PSI9IikmJihfPSEwLGY9IjAiLHA9Ij0iKTt2YXIgUD1nPT09IiQiP3I6Zz09PSIjIiYmL1tib3hYXS8udGVzdChDKT8iMCIrQy50b0xvd2VyQ2FzZSgpOiIiLGs9Zz09PSIkIj9uOi9bJXBdLy50ZXN0KEMpP2E6IiIsTz1oaltDXSxEPS9bZGVmZ3BycyVdLy50ZXN0KEMpO2I9Yj09PXZvaWQgMD82Oi9bZ3Byc10vLnRlc3QoQyk/TWF0aC5tYXgoMSxNYXRoLm1pbigyMSxiKSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxiKSk7ZnVuY3Rpb24gQihJKXt2YXIgTD1QLFI9ayxGLHosVTtpZihDPT09ImMiKVI9TyhJKStSLEk9IiI7ZWxzZXtJPStJO3ZhciBXPUk8MHx8MS9JPDA7aWYoST1pc05hTihJKT9sOk8oTWF0aC5hYnMoSSksYiksUyYmKEk9eXh0KEkpKSxXJiYrST09MCYmZCE9PSIrIiYmKFc9ITEpLEw9KFc/ZD09PSIoIj9kOnM6ZD09PSItInx8ZD09PSIoIj8iIjpkKStMLFI9KEM9PT0icyI/Ynh0WzgrY2ovM106IiIpK1IrKFcmJmQ9PT0iKCI/IikiOiIiKSxEKXtmb3IoRj0tMSx6PUkubGVuZ3RoOysrRjx6OylpZihVPUkuY2hhckNvZGVBdChGKSw0OD5VfHxVPjU3KXtSPShVPT09NDY/aStJLnNsaWNlKEYrMSk6SS5zbGljZShGKSkrUixJPUkuc2xpY2UoMCxGKTticmVha319fXgmJiFfJiYoST10KEksMS8wKSk7dmFyIFo9TC5sZW5ndGgrSS5sZW5ndGgrUi5sZW5ndGgscnQ9Wjx5P25ldyBBcnJheSh5LVorMSkuam9pbihmKToiIjtzd2l0Y2goeCYmXyYmKEk9dChydCtJLHJ0Lmxlbmd0aD95LVIubGVuZ3RoOjEvMCkscnQ9IiIpLHApe2Nhc2UiPCI6ST1MK0krUitydDticmVhaztjYXNlIj0iOkk9TCtydCtJK1I7YnJlYWs7Y2FzZSJeIjpJPXJ0LnNsaWNlKDAsWj1ydC5sZW5ndGg+PjEpK0wrSStSK3J0LnNsaWNlKFopO2JyZWFrO2RlZmF1bHQ6ST1ydCtMK0krUjticmVha31yZXR1cm4gbyhJKX1yZXR1cm4gQi50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBoKyIifSxCfWZ1bmN0aW9uIHUoaCxmKXt2YXIgcD1jKChoPUxwKGgpLGgudHlwZT0iZiIsaCkpLGQ9TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEZoKGYpLzMpKSkqMyxnPU1hdGgucG93KDEwLC1kKSxfPWJ4dFs4K2QvM107cmV0dXJuIGZ1bmN0aW9uKHkpe3JldHVybiBwKGcqeSkrX319cmV0dXJue2Zvcm1hdDpjLGZvcm1hdFByZWZpeDp1fX12YXIgZWsseG4sR0U7cmsoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pO2Z1bmN0aW9uIHJrKGUpe3JldHVybiBlaz10ayhlKSx4bj1lay5mb3JtYXQsR0U9ZWsuZm9ybWF0UHJlZml4LGVrfWZ1bmN0aW9uIG5rKGUpe3JldHVybiBNYXRoLm1heCgwLC1GaChNYXRoLmFicyhlKSkpfWZ1bmN0aW9uIGlrKGUsdCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKEZoKHQpLzMpKSkqMy1GaChNYXRoLmFicyhlKSkpfWZ1bmN0aW9uIG9rKGUsdCl7cmV0dXJuIGU9TWF0aC5hYnMoZSksdD1NYXRoLmFicyh0KS1lLE1hdGgubWF4KDAsRmgodCktRmgoZSkpKzF9ZnVuY3Rpb24gU3MoKXtyZXR1cm4gbmV3IHNrfWZ1bmN0aW9uIHNrKCl7dGhpcy5yZXNldCgpfXNrLnByb3RvdHlwZT17Y29uc3RydWN0b3I6c2sscmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbihlKXt3eHQoYWssZSx0aGlzLnQpLHd4dCh0aGlzLGFrLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1hay50OnRoaXMucz1hay50fSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBhaz1uZXcgc2s7ZnVuY3Rpb24gd3h0KGUsdCxyKXt2YXIgbj1lLnM9dCtyLGk9bi10LG89bi1pO2UudD10LW8rKHItaSl9dmFyIGxlPTFlLTYsel89MWUtMTIsQmU9TWF0aC5QSSxtbj1CZS8yLFBiPUJlLzQsU2k9QmUqMix2cj0xODAvQmUsX2U9QmUvMTgwLFJlPU1hdGguYWJzLGljPU1hdGguYXRhbixibj1NYXRoLmF0YW4yLFp0PU1hdGguY29zLFdFPU1hdGguY2VpbCxsaz1NYXRoLmV4cDt2YXIgRl89TWF0aC5sb2csY2s9TWF0aC5wb3csWHQ9TWF0aC5zaW4sY2E9TWF0aC5zaWdufHxmdW5jdGlvbihlKXtyZXR1cm4gZT4wPzE6ZTwwPy0xOjB9LHhyPU1hdGguc3FydCxJYj1NYXRoLnRhbjtmdW5jdGlvbiB1ayhlKXtyZXR1cm4gZT4xPzA6ZTwtMT9CZTpNYXRoLmFjb3MoZSl9ZnVuY3Rpb24gd24oZSl7cmV0dXJuIGU+MT9tbjplPC0xPy1tbjpNYXRoLmFzaW4oZSl9ZnVuY3Rpb24gcGooZSl7cmV0dXJuKGU9WHQoZS8yKSkqZX1mdW5jdGlvbiBGcigpe31mdW5jdGlvbiBoayhlLHQpe2UmJk14dC5oYXNPd25Qcm9wZXJ0eShlLnR5cGUpJiZNeHRbZS50eXBlXShlLHQpfXZhciBTeHQ9e0ZlYXR1cmU6ZnVuY3Rpb24oZSx0KXtoayhlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaGsocltuXS5nZW9tZXRyeSx0KX19LE14dD17U3BoZXJlOmZ1bmN0aW9uKGUsdCl7dC5zcGhlcmUoKX0sUG9pbnQ6ZnVuY3Rpb24oZSx0KXtlPWUuY29vcmRpbmF0ZXMsdC5wb2ludChlWzBdLGVbMV0sZVsyXSl9LE11bHRpUG9pbnQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWU9cltuXSx0LnBvaW50KGVbMF0sZVsxXSxlWzJdKX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe2RqKGUuY29vcmRpbmF0ZXMsdCwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylkaihyW25dLHQsMCl9LFBvbHlnb246ZnVuY3Rpb24oZSx0KXtFeHQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylFeHQocltuXSx0KX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWhrKHJbbl0sdCl9fTtmdW5jdGlvbiBkaihlLHQscil7dmFyIG49LTEsaT1lLmxlbmd0aC1yLG87Zm9yKHQubGluZVN0YXJ0KCk7KytuPGk7KW89ZVtuXSx0LnBvaW50KG9bMF0sb1sxXSxvWzJdKTt0LmxpbmVFbmQoKX1mdW5jdGlvbiBFeHQoZSx0KXt2YXIgcj0tMSxuPWUubGVuZ3RoO2Zvcih0LnBvbHlnb25TdGFydCgpOysrcjxuOylkaihlW3JdLHQsMSk7dC5wb2x5Z29uRW5kKCl9ZnVuY3Rpb24gdm8oZSx0KXtlJiZTeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9TeHRbZS50eXBlXShlLHQpOmhrKGUsdCl9dmFyIFlFPVNzKCksZms9U3MoKSxUeHQsQ3h0LG1qLGdqLF9qLHB1PXtwb2ludDpGcixsaW5lU3RhcnQ6RnIsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtZRS5yZXNldCgpLHB1LmxpbmVTdGFydD1RU2UscHUubGluZUVuZD10M2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgZT0rWUU7ZmsuYWRkKGU8MD9TaStlOmUpLHRoaXMubGluZVN0YXJ0PXRoaXMubGluZUVuZD10aGlzLnBvaW50PUZyfSxzcGhlcmU6ZnVuY3Rpb24oKXtmay5hZGQoU2kpfX07ZnVuY3Rpb24gUVNlKCl7cHUucG9pbnQ9ZTNlfWZ1bmN0aW9uIHQzZSgpe0F4dChUeHQsQ3h0KX1mdW5jdGlvbiBlM2UoZSx0KXtwdS5wb2ludD1BeHQsVHh0PWUsQ3h0PXQsZSo9X2UsdCo9X2UsbWo9ZSxnaj1adCh0PXQvMitQYiksX2o9WHQodCl9ZnVuY3Rpb24gQXh0KGUsdCl7ZSo9X2UsdCo9X2UsdD10LzIrUGI7dmFyIHI9ZS1taixuPXI+PTA/MTotMSxpPW4qcixvPVp0KHQpLGE9WHQodCkscz1faiphLGw9Z2oqbytzKlp0KGkpLGM9cypuKlh0KGkpO1lFLmFkZChibihjLGwpKSxtaj1lLGdqPW8sX2o9YX1mdW5jdGlvbiBQeHQoZSl7cmV0dXJuIGZrLnJlc2V0KCksdm8oZSxwdSksZmsqMn1mdW5jdGlvbiBCXyhlKXtyZXR1cm5bYm4oZVsxXSxlWzBdKSx3bihlWzJdKV19ZnVuY3Rpb24gb2MoZSl7dmFyIHQ9ZVswXSxyPWVbMV0sbj1adChyKTtyZXR1cm5bbipadCh0KSxuKlh0KHQpLFh0KHIpXX1mdW5jdGlvbiBqRShlLHQpe3JldHVybiBlWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXX1mdW5jdGlvbiBrcChlLHQpe3JldHVybltlWzFdKnRbMl0tZVsyXSp0WzFdLGVbMl0qdFswXS1lWzBdKnRbMl0sZVswXSp0WzFdLWVbMV0qdFswXV19ZnVuY3Rpb24gcGsoZSx0KXtlWzBdKz10WzBdLGVbMV0rPXRbMV0sZVsyXSs9dFsyXX1mdW5jdGlvbiBYRShlLHQpe3JldHVybltlWzBdKnQsZVsxXSp0LGVbMl0qdF19ZnVuY3Rpb24gSF8oZSl7dmFyIHQ9eHIoZVswXSplWzBdK2VbMV0qZVsxXStlWzJdKmVbMl0pO2VbMF0vPXQsZVsxXS89dCxlWzJdLz10fXZhciBuaSxNcyxoaSxubCxWXyxSeHQsTnh0LExiLCRFPVNzKCksWW0sTnAsUnA9e3BvaW50OnlqLGxpbmVTdGFydDpJeHQsbGluZUVuZDpMeHQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7UnAucG9pbnQ9T3h0LFJwLmxpbmVTdGFydD1yM2UsUnAubGluZUVuZD1uM2UsJEUucmVzZXQoKSxwdS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3B1LnBvbHlnb25FbmQoKSxScC5wb2ludD15aixScC5saW5lU3RhcnQ9SXh0LFJwLmxpbmVFbmQ9THh0LFlFPDA/KG5pPS0oaGk9MTgwKSxNcz0tKG5sPTkwKSk6JEU+bGU/bmw9OTA6JEU8LWxlJiYoTXM9LTkwKSxOcFswXT1uaSxOcFsxXT1oaX0sc3BoZXJlOmZ1bmN0aW9uKCl7bmk9LShoaT0xODApLE1zPS0obmw9OTApfX07ZnVuY3Rpb24geWooZSx0KXtZbS5wdXNoKE5wPVtuaT1lLGhpPWVdKSx0PE1zJiYoTXM9dCksdD5ubCYmKG5sPXQpfWZ1bmN0aW9uIER4dChlLHQpe3ZhciByPW9jKFtlKl9lLHQqX2VdKTtpZihMYil7dmFyIG49a3AoTGIsciksaT1bblsxXSwtblswXSwwXSxvPWtwKGksbik7SF8obyksbz1CXyhvKTt2YXIgYT1lLVZfLHM9YT4wPzE6LTEsbD1vWzBdKnZyKnMsYyx1PVJlKGEpPjE4MDt1XihzKlZfPGwmJmw8cyplKT8oYz1vWzFdKnZyLGM+bmwmJihubD1jKSk6KGw9KGwrMzYwKSUzNjAtMTgwLHVeKHMqVl88bCYmbDxzKmUpPyhjPS1vWzFdKnZyLGM8TXMmJihNcz1jKSk6KHQ8TXMmJihNcz10KSx0Pm5sJiYobmw9dCkpKSx1P2U8Vl8/cmwobmksZSk+cmwobmksaGkpJiYoaGk9ZSk6cmwoZSxoaSk+cmwobmksaGkpJiYobmk9ZSk6aGk+PW5pPyhlPG5pJiYobmk9ZSksZT5oaSYmKGhpPWUpKTplPlZfP3JsKG5pLGUpPnJsKG5pLGhpKSYmKGhpPWUpOnJsKGUsaGkpPnJsKG5pLGhpKSYmKG5pPWUpfWVsc2UgWW0ucHVzaChOcD1bbmk9ZSxoaT1lXSk7dDxNcyYmKE1zPXQpLHQ+bmwmJihubD10KSxMYj1yLFZfPWV9ZnVuY3Rpb24gSXh0KCl7UnAucG9pbnQ9RHh0fWZ1bmN0aW9uIEx4dCgpe05wWzBdPW5pLE5wWzFdPWhpLFJwLnBvaW50PXlqLExiPW51bGx9ZnVuY3Rpb24gT3h0KGUsdCl7aWYoTGIpe3ZhciByPWUtVl87JEUuYWRkKFJlKHIpPjE4MD9yKyhyPjA/MzYwOi0zNjApOnIpfWVsc2UgUnh0PWUsTnh0PXQ7cHUucG9pbnQoZSx0KSxEeHQoZSx0KX1mdW5jdGlvbiByM2UoKXtwdS5saW5lU3RhcnQoKX1mdW5jdGlvbiBuM2UoKXtPeHQoUnh0LE54dCkscHUubGluZUVuZCgpLFJlKCRFKT5sZSYmKG5pPS0oaGk9MTgwKSksTnBbMF09bmksTnBbMV09aGksTGI9bnVsbH1mdW5jdGlvbiBybChlLHQpe3JldHVybih0LT1lKTwwP3QrMzYwOnR9ZnVuY3Rpb24gaTNlKGUsdCl7cmV0dXJuIGVbMF0tdFswXX1mdW5jdGlvbiBreHQoZSx0KXtyZXR1cm4gZVswXTw9ZVsxXT9lWzBdPD10JiZ0PD1lWzFdOnQ8ZVswXXx8ZVsxXTx0fWZ1bmN0aW9uIHp4dChlKXt2YXIgdCxyLG4saSxvLGEscztpZihubD1oaT0tKG5pPU1zPTEvMCksWW09W10sdm8oZSxScCkscj1ZbS5sZW5ndGgpe2ZvcihZbS5zb3J0KGkzZSksdD0xLG49WW1bMF0sbz1bbl07dDxyOysrdClpPVltW3RdLGt4dChuLGlbMF0pfHxreHQobixpWzFdKT8ocmwoblswXSxpWzFdKT5ybChuWzBdLG5bMV0pJiYoblsxXT1pWzFdKSxybChpWzBdLG5bMV0pPnJsKG5bMF0sblsxXSkmJihuWzBdPWlbMF0pKTpvLnB1c2gobj1pKTtmb3IoYT0tMS8wLHI9by5sZW5ndGgtMSx0PTAsbj1vW3JdO3Q8PXI7bj1pLCsrdClpPW9bdF0sKHM9cmwoblsxXSxpWzBdKSk+YSYmKGE9cyxuaT1pWzBdLGhpPW5bMV0pfXJldHVybiBZbT1OcD1udWxsLG5pPT09MS8wfHxNcz09PTEvMD9bW05hTixOYU5dLFtOYU4sTmFOXV06W1tuaSxNc10sW2hpLG5sXV19dmFyIEtFLGRrLG1rLGdrLF9rLHlrLHZrLHhrLHZqLHhqLGJqLEh4dCxWeHQsRmEsQmEsSGEsZHU9e3NwaGVyZTpGcixwb2ludDp3aixsaW5lU3RhcnQ6Rnh0LGxpbmVFbmQ6Qnh0LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2R1LmxpbmVTdGFydD1zM2UsZHUubGluZUVuZD1sM2V9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtkdS5saW5lU3RhcnQ9Rnh0LGR1LmxpbmVFbmQ9Qnh0fX07ZnVuY3Rpb24gd2ooZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1adCh0KTtaRShyKlp0KGUpLHIqWHQoZSksWHQodCkpfWZ1bmN0aW9uIFpFKGUsdCxyKXsrK0tFLG1rKz0oZS1taykvS0UsZ2srPSh0LWdrKS9LRSxfays9KHItX2spL0tFfWZ1bmN0aW9uIEZ4dCgpe2R1LnBvaW50PW8zZX1mdW5jdGlvbiBvM2UoZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1adCh0KTtGYT1yKlp0KGUpLEJhPXIqWHQoZSksSGE9WHQodCksZHUucG9pbnQ9YTNlLFpFKEZhLEJhLEhhKX1mdW5jdGlvbiBhM2UoZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1adCh0KSxuPXIqWnQoZSksaT1yKlh0KGUpLG89WHQodCksYT1ibih4cigoYT1CYSpvLUhhKmkpKmErKGE9SGEqbi1GYSpvKSphKyhhPUZhKmktQmEqbikqYSksRmEqbitCYSppK0hhKm8pO2RrKz1hLHlrKz1hKihGYSsoRmE9bikpLHZrKz1hKihCYSsoQmE9aSkpLHhrKz1hKihIYSsoSGE9bykpLFpFKEZhLEJhLEhhKX1mdW5jdGlvbiBCeHQoKXtkdS5wb2ludD13an1mdW5jdGlvbiBzM2UoKXtkdS5wb2ludD1jM2V9ZnVuY3Rpb24gbDNlKCl7VXh0KEh4dCxWeHQpLGR1LnBvaW50PXdqfWZ1bmN0aW9uIGMzZShlLHQpe0h4dD1lLFZ4dD10LGUqPV9lLHQqPV9lLGR1LnBvaW50PVV4dDt2YXIgcj1adCh0KTtGYT1yKlp0KGUpLEJhPXIqWHQoZSksSGE9WHQodCksWkUoRmEsQmEsSGEpfWZ1bmN0aW9uIFV4dChlLHQpe2UqPV9lLHQqPV9lO3ZhciByPVp0KHQpLG49cipadChlKSxpPXIqWHQoZSksbz1YdCh0KSxhPUJhKm8tSGEqaSxzPUhhKm4tRmEqbyxsPUZhKmktQmEqbixjPXhyKGEqYStzKnMrbCpsKSx1PXduKGMpLGg9YyYmLXUvYzt2ais9aCphLHhqKz1oKnMsYmorPWgqbCxkays9dSx5ays9dSooRmErKEZhPW4pKSx2ays9dSooQmErKEJhPWkpKSx4ays9dSooSGErKEhhPW8pKSxaRShGYSxCYSxIYSl9ZnVuY3Rpb24gcXh0KGUpe0tFPWRrPW1rPWdrPV9rPXlrPXZrPXhrPXZqPXhqPWJqPTAsdm8oZSxkdSk7dmFyIHQ9dmoscj14aixuPWJqLGk9dCp0K3IqcituKm47cmV0dXJuIGk8el8mJih0PXlrLHI9dmssbj14ayxkazxsZSYmKHQ9bWsscj1nayxuPV9rKSxpPXQqdCtyKnIrbipuLGk8el8pP1tOYU4sTmFOXTpbYm4ocix0KSp2cix3bihuL3hyKGkpKSp2cl19ZnVuY3Rpb24gVV8oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEpFKGUsdCl7ZnVuY3Rpb24gcihuLGkpe3JldHVybiBuPWUobixpKSx0KG5bMF0sblsxXSl9cmV0dXJuIGUuaW52ZXJ0JiZ0LmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIG49dC5pbnZlcnQobixpKSxuJiZlLmludmVydChuWzBdLG5bMV0pfSkscn1mdW5jdGlvbiBTaihlLHQpe3JldHVybltSZShlKT5CZT9lK01hdGgucm91bmQoLWUvU2kpKlNpOmUsdF19U2ouaW52ZXJ0PVNqO2Z1bmN0aW9uIFFFKGUsdCxyKXtyZXR1cm4oZSU9U2kpP3R8fHI/SkUoV3h0KGUpLFl4dCh0LHIpKTpXeHQoZSk6dHx8cj9ZeHQodCxyKTpTan1mdW5jdGlvbiBHeHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIHQrPWUsW3Q+QmU/dC1TaTp0PC1CZT90K1NpOnQscl19fWZ1bmN0aW9uIFd4dChlKXt2YXIgdD1HeHQoZSk7cmV0dXJuIHQuaW52ZXJ0PUd4dCgtZSksdH1mdW5jdGlvbiBZeHQoZSx0KXt2YXIgcj1adChlKSxuPVh0KGUpLGk9WnQodCksbz1YdCh0KTtmdW5jdGlvbiBhKHMsbCl7dmFyIGM9WnQobCksdT1adChzKSpjLGg9WHQocykqYyxmPVh0KGwpLHA9ZipyK3UqbjtyZXR1cm5bYm4oaCppLXAqbyx1KnItZipuKSx3bihwKmkraCpvKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKHMsbCl7dmFyIGM9WnQobCksdT1adChzKSpjLGg9WHQocykqYyxmPVh0KGwpLHA9ZippLWgqbztyZXR1cm5bYm4oaCppK2Yqbyx1KnIrcCpuKSx3bihwKnItdSpuKV19LGF9ZnVuY3Rpb24gYmsoZSl7ZT1RRShlWzBdKl9lLGVbMV0qX2UsZS5sZW5ndGg+Mj9lWzJdKl9lOjApO2Z1bmN0aW9uIHQocil7cmV0dXJuIHI9ZShyWzBdKl9lLHJbMV0qX2UpLHJbMF0qPXZyLHJbMV0qPXZyLHJ9cmV0dXJuIHQuaW52ZXJ0PWZ1bmN0aW9uKHIpe3JldHVybiByPWUuaW52ZXJ0KHJbMF0qX2UsclsxXSpfZSksclswXSo9dnIsclsxXSo9dnIscn0sdH1mdW5jdGlvbiBNaihlLHQscixuLGksbyl7aWYoISFyKXt2YXIgYT1adCh0KSxzPVh0KHQpLGw9bipyO2k9PW51bGw/KGk9dCtuKlNpLG89dC1sLzIpOihpPWp4dChhLGkpLG89anh0KGEsbyksKG4+MD9pPG86aT5vKSYmKGkrPW4qU2kpKTtmb3IodmFyIGMsdT1pO24+MD91Pm86dTxvO3UtPWwpYz1CXyhbYSwtcypadCh1KSwtcypYdCh1KV0pLGUucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24ganh0KGUsdCl7dD1vYyh0KSx0WzBdLT1lLEhfKHQpO3ZhciByPXVrKC10WzFdKTtyZXR1cm4oKC10WzJdPDA/LXI6cikrU2ktbGUpJVNpfWZ1bmN0aW9uIFh4dCgpe3ZhciBlPVVfKFswLDBdKSx0PVVfKDkwKSxyPVVfKDYpLG4saSxvPXtwb2ludDphfTtmdW5jdGlvbiBhKGwsYyl7bi5wdXNoKGw9aShsLGMpKSxsWzBdKj12cixsWzFdKj12cn1mdW5jdGlvbiBzKCl7dmFyIGw9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSpfZSx1PXIuYXBwbHkodGhpcyxhcmd1bWVudHMpKl9lO3JldHVybiBuPVtdLGk9UUUoLWxbMF0qX2UsLWxbMV0qX2UsMCkuaW52ZXJ0LE1qKG8sYyx1LDEpLGw9e3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltuXX0sbj1pPW51bGwsbH1yZXR1cm4gcy5jZW50ZXI9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIGw9PSJmdW5jdGlvbiI/bDpVXyhbK2xbMF0sK2xbMV1dKSxzKTplfSxzLnJhZGl1cz1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlVfKCtsKSxzKTp0fSxzLnByZWNpc2lvbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgbD09ImZ1bmN0aW9uIj9sOlVfKCtsKSxzKTpyfSxzfWZ1bmN0aW9uIHdrKCl7dmFyIGU9W10sdDtyZXR1cm57cG9pbnQ6ZnVuY3Rpb24ocixuLGkpe3QucHVzaChbcixuLGldKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5wdXNoKHQ9W10pfSxsaW5lRW5kOkZyLHJlam9pbjpmdW5jdGlvbigpe2UubGVuZ3RoPjEmJmUucHVzaChlLnBvcCgpLmNvbmNhdChlLnNoaWZ0KCkpKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHI9ZTtyZXR1cm4gZT1bXSx0PW51bGwscn19fWZ1bmN0aW9uIGtiKGUsdCl7cmV0dXJuIFJlKGVbMF0tdFswXSk8bGUmJlJlKGVbMV0tdFsxXSk8bGV9ZnVuY3Rpb24gU2soZSx0LHIsbil7dGhpcy54PWUsdGhpcy56PXQsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBNayhlLHQscixuLGkpe3ZhciBvPVtdLGE9W10scyxsO2lmKGUuZm9yRWFjaChmdW5jdGlvbihkKXtpZighKChnPWQubGVuZ3RoLTEpPD0wKSl7dmFyIGcsXz1kWzBdLHk9ZFtnXSx4O2lmKGtiKF8seSkpe2lmKCFfWzJdJiYheVsyXSl7Zm9yKGkubGluZVN0YXJ0KCkscz0wO3M8ZzsrK3MpaS5wb2ludCgoXz1kW3NdKVswXSxfWzFdKTtpLmxpbmVFbmQoKTtyZXR1cm59eVswXSs9MipsZX1vLnB1c2goeD1uZXcgU2soXyxkLG51bGwsITApKSxhLnB1c2goeC5vPW5ldyBTayhfLG51bGwseCwhMSkpLG8ucHVzaCh4PW5ldyBTayh5LGQsbnVsbCwhMSkpLGEucHVzaCh4Lm89bmV3IFNrKHksbnVsbCx4LCEwKSl9fSksISFvLmxlbmd0aCl7Zm9yKGEuc29ydCh0KSwkeHQobyksJHh0KGEpLHM9MCxsPWEubGVuZ3RoO3M8bDsrK3MpYVtzXS5lPXI9IXI7Zm9yKHZhciBjPW9bMF0sdSxoOzspe2Zvcih2YXIgZj1jLHA9ITA7Zi52OylpZigoZj1mLm4pPT09YylyZXR1cm47dT1mLnosaS5saW5lU3RhcnQoKTtkb3tpZihmLnY9Zi5vLnY9ITAsZi5lKXtpZihwKWZvcihzPTAsbD11Lmxlbmd0aDtzPGw7KytzKWkucG9pbnQoKGg9dVtzXSlbMF0saFsxXSk7ZWxzZSBuKGYueCxmLm4ueCwxLGkpO2Y9Zi5ufWVsc2V7aWYocClmb3IodT1mLnAueixzPXUubGVuZ3RoLTE7cz49MDstLXMpaS5wb2ludCgoaD11W3NdKVswXSxoWzFdKTtlbHNlIG4oZi54LGYucC54LC0xLGkpO2Y9Zi5wfWY9Zi5vLHU9Zi56LHA9IXB9d2hpbGUoIWYudik7aS5saW5lRW5kKCl9fX1mdW5jdGlvbiAkeHQoZSl7aWYoISEodD1lLmxlbmd0aCkpe2Zvcih2YXIgdCxyPTAsbj1lWzBdLGk7KytyPHQ7KW4ubj1pPWVbcl0saS5wPW4sbj1pO24ubj1pPWVbMF0saS5wPW59fXZhciBFaj1TcygpO2Z1bmN0aW9uIFRqKGUpe3JldHVybiBSZShlWzBdKTw9QmU/ZVswXTpjYShlWzBdKSooKFJlKGVbMF0pK0JlKSVTaS1CZSl9ZnVuY3Rpb24gRWsoZSx0KXt2YXIgcj1Uaih0KSxuPXRbMV0saT1YdChuKSxvPVtYdChyKSwtWnQociksMF0sYT0wLHM9MDtFai5yZXNldCgpLGk9PT0xP249bW4rbGU6aT09PS0xJiYobj0tbW4tbGUpO2Zvcih2YXIgbD0wLGM9ZS5sZW5ndGg7bDxjOysrbClpZighIShoPSh1PWVbbF0pLmxlbmd0aCkpZm9yKHZhciB1LGgsZj11W2gtMV0scD1UaihmKSxkPWZbMV0vMitQYixnPVh0KGQpLF89WnQoZCkseT0wO3k8aDsrK3kscD1iLGc9QyxfPVAsZj14KXt2YXIgeD11W3ldLGI9VGooeCksUz14WzFdLzIrUGIsQz1YdChTKSxQPVp0KFMpLGs9Yi1wLE89az49MD8xOi0xLEQ9TyprLEI9RD5CZSxJPWcqQztpZihFai5hZGQoYm4oSSpPKlh0KEQpLF8qUCtJKlp0KEQpKSksYSs9Qj9rK08qU2k6ayxCXnA+PXJeYj49cil7dmFyIEw9a3Aob2MoZiksb2MoeCkpO0hfKEwpO3ZhciBSPWtwKG8sTCk7SF8oUik7dmFyIEY9KEJeaz49MD8tMToxKSp3bihSWzJdKTsobj5GfHxuPT09RiYmKExbMF18fExbMV0pKSYmKHMrPUJeaz49MD8xOi0xKX19cmV0dXJuKGE8LWxlfHxhPGxlJiZFajwtbGUpXnMmMX1mdW5jdGlvbiBUayhlLHQscixuKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIG89dChpKSxhPXdrKCkscz10KGEpLGw9ITEsYyx1LGgsZj17cG9pbnQ6cCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOl8scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zi5wb2ludD15LGYubGluZVN0YXJ0PXgsZi5saW5lRW5kPWIsdT1bXSxjPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zi5wb2ludD1wLGYubGluZVN0YXJ0PWcsZi5saW5lRW5kPV8sdT1JbSh1KTt2YXIgUz1FayhjLG4pO3UubGVuZ3RoPyhsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxNayh1LGgzZSxTLHIsaSkpOlMmJihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGwmJihpLnBvbHlnb25FbmQoKSxsPSExKSx1PWM9bnVsbH0sc3BoZXJlOmZ1bmN0aW9uKCl7aS5wb2x5Z29uU3RhcnQoKSxpLmxpbmVTdGFydCgpLHIobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCksaS5wb2x5Z29uRW5kKCl9fTtmdW5jdGlvbiBwKFMsQyl7ZShTLEMpJiZpLnBvaW50KFMsQyl9ZnVuY3Rpb24gZChTLEMpe28ucG9pbnQoUyxDKX1mdW5jdGlvbiBnKCl7Zi5wb2ludD1kLG8ubGluZVN0YXJ0KCl9ZnVuY3Rpb24gXygpe2YucG9pbnQ9cCxvLmxpbmVFbmQoKX1mdW5jdGlvbiB5KFMsQyl7aC5wdXNoKFtTLENdKSxzLnBvaW50KFMsQyl9ZnVuY3Rpb24geCgpe3MubGluZVN0YXJ0KCksaD1bXX1mdW5jdGlvbiBiKCl7eShoWzBdWzBdLGhbMF1bMV0pLHMubGluZUVuZCgpO3ZhciBTPXMuY2xlYW4oKSxDPWEucmVzdWx0KCksUCxrPUMubGVuZ3RoLE8sRCxCO2lmKGgucG9wKCksYy5wdXNoKGgpLGg9bnVsbCwhIWspe2lmKFMmMSl7aWYoRD1DWzBdLChPPUQubGVuZ3RoLTEpPjApe2ZvcihsfHwoaS5wb2x5Z29uU3RhcnQoKSxsPSEwKSxpLmxpbmVTdGFydCgpLFA9MDtQPE87KytQKWkucG9pbnQoKEI9RFtQXSlbMF0sQlsxXSk7aS5saW5lRW5kKCl9cmV0dXJufWs+MSYmUyYyJiZDLnB1c2goQy5wb3AoKS5jb25jYXQoQy5zaGlmdCgpKSksdS5wdXNoKEMuZmlsdGVyKHUzZSkpfX1yZXR1cm4gZn19ZnVuY3Rpb24gdTNlKGUpe3JldHVybiBlLmxlbmd0aD4xfWZ1bmN0aW9uIGgzZShlLHQpe3JldHVybigoZT1lLngpWzBdPDA/ZVsxXS1tbi1sZTptbi1lWzFdKS0oKHQ9dC54KVswXTwwP3RbMV0tbW4tbGU6bW4tdFsxXSl9dmFyIHQ1PVRrKGZ1bmN0aW9uKCl7cmV0dXJuITB9LGYzZSxkM2UsWy1CZSwtbW5dKTtmdW5jdGlvbiBmM2UoZSl7dmFyIHQ9TmFOLHI9TmFOLG49TmFOLGk7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2UubGluZVN0YXJ0KCksaT0xfSxwb2ludDpmdW5jdGlvbihvLGEpe3ZhciBzPW8+MD9CZTotQmUsbD1SZShvLXQpO1JlKGwtQmUpPGxlPyhlLnBvaW50KHQscj0ocithKS8yPjA/bW46LW1uKSxlLnBvaW50KG4sciksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KHMsciksZS5wb2ludChvLHIpLGk9MCk6biE9PXMmJmw+PUJlJiYoUmUodC1uKTxsZSYmKHQtPW4qbGUpLFJlKG8tcyk8bGUmJihvLT1zKmxlKSxyPXAzZSh0LHIsbyxhKSxlLnBvaW50KG4sciksZS5saW5lRW5kKCksZS5saW5lU3RhcnQoKSxlLnBvaW50KHMsciksaT0wKSxlLnBvaW50KHQ9byxyPWEpLG49c30sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpLHQ9cj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItaX19fWZ1bmN0aW9uIHAzZShlLHQscixuKXt2YXIgaSxvLGE9WHQoZS1yKTtyZXR1cm4gUmUoYSk+bGU/aWMoKFh0KHQpKihvPVp0KG4pKSpYdChyKS1YdChuKSooaT1adCh0KSkqWHQoZSkpLyhpKm8qYSkpOih0K24pLzJ9ZnVuY3Rpb24gZDNlKGUsdCxyLG4pe3ZhciBpO2lmKGU9PW51bGwpaT1yKm1uLG4ucG9pbnQoLUJlLGkpLG4ucG9pbnQoMCxpKSxuLnBvaW50KEJlLGkpLG4ucG9pbnQoQmUsMCksbi5wb2ludChCZSwtaSksbi5wb2ludCgwLC1pKSxuLnBvaW50KC1CZSwtaSksbi5wb2ludCgtQmUsMCksbi5wb2ludCgtQmUsaSk7ZWxzZSBpZihSZShlWzBdLXRbMF0pPmxlKXt2YXIgbz1lWzBdPHRbMF0/QmU6LUJlO2k9cipvLzIsbi5wb2ludCgtbyxpKSxuLnBvaW50KDAsaSksbi5wb2ludChvLGkpfWVsc2Ugbi5wb2ludCh0WzBdLHRbMV0pfWZ1bmN0aW9uIENrKGUpe3ZhciB0PVp0KGUpLHI9NipfZSxuPXQ+MCxpPVJlKHQpPmxlO2Z1bmN0aW9uIG8odSxoLGYscCl7TWoocCxlLHIsZix1LGgpfWZ1bmN0aW9uIGEodSxoKXtyZXR1cm4gWnQodSkqWnQoaCk+dH1mdW5jdGlvbiBzKHUpe3ZhciBoLGYscCxkLGc7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe2Q9cD0hMSxnPTF9LHBvaW50OmZ1bmN0aW9uKF8seSl7dmFyIHg9W18seV0sYixTPWEoXyx5KSxDPW4/Uz8wOmMoXyx5KTpTP2MoXysoXzwwP0JlOi1CZSkseSk6MDtpZighaCYmKGQ9cD1TKSYmdS5saW5lU3RhcnQoKSxTIT09cCYmKGI9bChoLHgpLCghYnx8a2IoaCxiKXx8a2IoeCxiKSkmJih4WzJdPTEpKSxTIT09cClnPTAsUz8odS5saW5lU3RhcnQoKSxiPWwoeCxoKSx1LnBvaW50KGJbMF0sYlsxXSkpOihiPWwoaCx4KSx1LnBvaW50KGJbMF0sYlsxXSwyKSx1LmxpbmVFbmQoKSksaD1iO2Vsc2UgaWYoaSYmaCYmbl5TKXt2YXIgUDshKEMmZikmJihQPWwoeCxoLCEwKSkmJihnPTAsbj8odS5saW5lU3RhcnQoKSx1LnBvaW50KFBbMF1bMF0sUFswXVsxXSksdS5wb2ludChQWzFdWzBdLFBbMV1bMV0pLHUubGluZUVuZCgpKToodS5wb2ludChQWzFdWzBdLFBbMV1bMV0pLHUubGluZUVuZCgpLHUubGluZVN0YXJ0KCksdS5wb2ludChQWzBdWzBdLFBbMF1bMV0sMykpKX1TJiYoIWh8fCFrYihoLHgpKSYmdS5wb2ludCh4WzBdLHhbMV0pLGg9eCxwPVMsZj1DfSxsaW5lRW5kOmZ1bmN0aW9uKCl7cCYmdS5saW5lRW5kKCksaD1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBnfChkJiZwKTw8MX19fWZ1bmN0aW9uIGwodSxoLGYpe3ZhciBwPW9jKHUpLGQ9b2MoaCksZz1bMSwwLDBdLF89a3AocCxkKSx5PWpFKF8sXykseD1fWzBdLGI9eS14Kng7aWYoIWIpcmV0dXJuIWYmJnU7dmFyIFM9dCp5L2IsQz0tdCp4L2IsUD1rcChnLF8pLGs9WEUoZyxTKSxPPVhFKF8sQyk7cGsoayxPKTt2YXIgRD1QLEI9akUoayxEKSxJPWpFKEQsRCksTD1CKkItSSooakUoayxrKS0xKTtpZighKEw8MCkpe3ZhciBSPXhyKEwpLEY9WEUoRCwoLUItUikvSSk7aWYocGsoRixrKSxGPUJfKEYpLCFmKXJldHVybiBGO3ZhciB6PXVbMF0sVT1oWzBdLFc9dVsxXSxaPWhbMV0scnQ7VTx6JiYocnQ9eix6PVUsVT1ydCk7dmFyIG90PVUteixzdD1SZShvdC1CZSk8bGUsU3Q9c3R8fG90PGxlO2lmKCFzdCYmWjxXJiYocnQ9VyxXPVosWj1ydCksU3Q/c3Q/VytaPjBeRlsxXTwoUmUoRlswXS16KTxsZT9XOlopOlc8PUZbMV0mJkZbMV08PVo6b3Q+QmVeKHo8PUZbMF0mJkZbMF08PVUpKXt2YXIgYnQ9WEUoRCwoLUIrUikvSSk7cmV0dXJuIHBrKGJ0LGspLFtGLEJfKGJ0KV19fX1mdW5jdGlvbiBjKHUsaCl7dmFyIGY9bj9lOkJlLWUscD0wO3JldHVybiB1PC1mP3B8PTE6dT5mJiYocHw9MiksaDwtZj9wfD00Omg+ZiYmKHB8PTgpLHB9cmV0dXJuIFRrKGEscyxvLG4/WzAsLWVdOlstQmUsZS1CZV0pfWZ1bmN0aW9uIEt4dChlLHQscixuLGksbyl7dmFyIGE9ZVswXSxzPWVbMV0sbD10WzBdLGM9dFsxXSx1PTAsaD0xLGY9bC1hLHA9Yy1zLGQ7aWYoZD1yLWEsISghZiYmZD4wKSl7aWYoZC89ZixmPDApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1lbHNlIGlmKGY+MCl7aWYoZD5oKXJldHVybjtkPnUmJih1PWQpfWlmKGQ9aS1hLCEoIWYmJmQ8MCkpe2lmKGQvPWYsZjwwKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9ZWxzZSBpZihmPjApe2lmKGQ8dSlyZXR1cm47ZDxoJiYoaD1kKX1pZihkPW4tcywhKCFwJiZkPjApKXtpZihkLz1wLHA8MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfWVsc2UgaWYocD4wKXtpZihkPmgpcmV0dXJuO2Q+dSYmKHU9ZCl9aWYoZD1vLXMsISghcCYmZDwwKSl7aWYoZC89cCxwPDApe2lmKGQ+aClyZXR1cm47ZD51JiYodT1kKX1lbHNlIGlmKHA+MCl7aWYoZDx1KXJldHVybjtkPGgmJihoPWQpfXJldHVybiB1PjAmJihlWzBdPWErdSpmLGVbMV09cyt1KnApLGg8MSYmKHRbMF09YStoKmYsdFsxXT1zK2gqcCksITB9fX19fXZhciBlNT0xZTksQWs9LWU1O2Z1bmN0aW9uIERwKGUsdCxyLG4pe2Z1bmN0aW9uIGkoYyx1KXtyZXR1cm4gZTw9YyYmYzw9ciYmdDw9dSYmdTw9bn1mdW5jdGlvbiBvKGMsdSxoLGYpe3ZhciBwPTAsZD0wO2lmKGM9PW51bGx8fChwPWEoYyxoKSkhPT0oZD1hKHUsaCkpfHxsKGMsdSk8MF5oPjApZG8gZi5wb2ludChwPT09MHx8cD09PTM/ZTpyLHA+MT9uOnQpO3doaWxlKChwPShwK2grNCklNCkhPT1kKTtlbHNlIGYucG9pbnQodVswXSx1WzFdKX1mdW5jdGlvbiBhKGMsdSl7cmV0dXJuIFJlKGNbMF0tZSk8bGU/dT4wPzA6MzpSZShjWzBdLXIpPGxlP3U+MD8yOjE6UmUoY1sxXS10KTxsZT91PjA/MTowOnU+MD8zOjJ9ZnVuY3Rpb24gcyhjLHUpe3JldHVybiBsKGMueCx1LngpfWZ1bmN0aW9uIGwoYyx1KXt2YXIgaD1hKGMsMSksZj1hKHUsMSk7cmV0dXJuIGghPT1mP2gtZjpoPT09MD91WzFdLWNbMV06aD09PTE/Y1swXS11WzBdOmg9PT0yP2NbMV0tdVsxXTp1WzBdLWNbMF19cmV0dXJuIGZ1bmN0aW9uKGMpe3ZhciB1PWMsaD13aygpLGYscCxkLGcsXyx5LHgsYixTLEMsUCxrPXtwb2ludDpPLGxpbmVTdGFydDpMLGxpbmVFbmQ6Uixwb2x5Z29uU3RhcnQ6Qixwb2x5Z29uRW5kOkl9O2Z1bmN0aW9uIE8oeixVKXtpKHosVSkmJnUucG9pbnQoeixVKX1mdW5jdGlvbiBEKCl7Zm9yKHZhciB6PTAsVT0wLFc9cC5sZW5ndGg7VTxXOysrVSlmb3IodmFyIFo9cFtVXSxydD0xLG90PVoubGVuZ3RoLHN0PVpbMF0sU3QsYnQsTXQ9c3RbMF0sbHQ9c3RbMV07cnQ8b3Q7KytydClTdD1NdCxidD1sdCxzdD1aW3J0XSxNdD1zdFswXSxsdD1zdFsxXSxidDw9bj9sdD5uJiYoTXQtU3QpKihuLWJ0KT4obHQtYnQpKihlLVN0KSYmKyt6Omx0PD1uJiYoTXQtU3QpKihuLWJ0KTwobHQtYnQpKihlLVN0KSYmLS16O3JldHVybiB6fWZ1bmN0aW9uIEIoKXt1PWgsZj1bXSxwPVtdLFA9ITB9ZnVuY3Rpb24gSSgpe3ZhciB6PUQoKSxVPVAmJnosVz0oZj1JbShmKSkubGVuZ3RoOyhVfHxXKSYmKGMucG9seWdvblN0YXJ0KCksVSYmKGMubGluZVN0YXJ0KCksbyhudWxsLG51bGwsMSxjKSxjLmxpbmVFbmQoKSksVyYmTWsoZixzLHosbyxjKSxjLnBvbHlnb25FbmQoKSksdT1jLGY9cD1kPW51bGx9ZnVuY3Rpb24gTCgpe2sucG9pbnQ9RixwJiZwLnB1c2goZD1bXSksQz0hMCxTPSExLHg9Yj1OYU59ZnVuY3Rpb24gUigpe2YmJihGKGcsXykseSYmUyYmaC5yZWpvaW4oKSxmLnB1c2goaC5yZXN1bHQoKSkpLGsucG9pbnQ9TyxTJiZ1LmxpbmVFbmQoKX1mdW5jdGlvbiBGKHosVSl7dmFyIFc9aSh6LFUpO2lmKHAmJmQucHVzaChbeixVXSksQylnPXosXz1VLHk9VyxDPSExLFcmJih1LmxpbmVTdGFydCgpLHUucG9pbnQoeixVKSk7ZWxzZSBpZihXJiZTKXUucG9pbnQoeixVKTtlbHNle3ZhciBaPVt4PU1hdGgubWF4KEFrLE1hdGgubWluKGU1LHgpKSxiPU1hdGgubWF4KEFrLE1hdGgubWluKGU1LGIpKV0scnQ9W3o9TWF0aC5tYXgoQWssTWF0aC5taW4oZTUseikpLFU9TWF0aC5tYXgoQWssTWF0aC5taW4oZTUsVSkpXTtLeHQoWixydCxlLHQscixuKT8oU3x8KHUubGluZVN0YXJ0KCksdS5wb2ludChaWzBdLFpbMV0pKSx1LnBvaW50KHJ0WzBdLHJ0WzFdKSxXfHx1LmxpbmVFbmQoKSxQPSExKTpXJiYodS5saW5lU3RhcnQoKSx1LnBvaW50KHosVSksUD0hMSl9eD16LGI9VSxTPVd9cmV0dXJuIGt9fWZ1bmN0aW9uIFp4dCgpe3ZhciBlPTAsdD0wLHI9OTYwLG49NTAwLGksbyxhO3JldHVybiBhPXtzdHJlYW06ZnVuY3Rpb24ocyl7cmV0dXJuIGkmJm89PT1zP2k6aT1EcChlLHQscixuKShvPXMpfSxleHRlbnQ6ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3NbMF1bMF0sdD0rc1swXVsxXSxyPStzWzFdWzBdLG49K3NbMV1bMV0saT1vPW51bGwsYSk6W1tlLHRdLFtyLG5dXX19fXZhciBDaj1TcygpLEFqLFBrLElrLFJiPXtzcGhlcmU6RnIscG9pbnQ6RnIsbGluZVN0YXJ0Om0zZSxsaW5lRW5kOkZyLHBvbHlnb25TdGFydDpGcixwb2x5Z29uRW5kOkZyfTtmdW5jdGlvbiBtM2UoKXtSYi5wb2ludD1fM2UsUmIubGluZUVuZD1nM2V9ZnVuY3Rpb24gZzNlKCl7UmIucG9pbnQ9UmIubGluZUVuZD1Gcn1mdW5jdGlvbiBfM2UoZSx0KXtlKj1fZSx0Kj1fZSxBaj1lLFBrPVh0KHQpLElrPVp0KHQpLFJiLnBvaW50PXkzZX1mdW5jdGlvbiB5M2UoZSx0KXtlKj1fZSx0Kj1fZTt2YXIgcj1YdCh0KSxuPVp0KHQpLGk9UmUoZS1Baiksbz1adChpKSxhPVh0KGkpLHM9biphLGw9SWsqci1QaypuKm8sYz1QaypyK0lrKm4qbztDai5hZGQoYm4oeHIocypzK2wqbCksYykpLEFqPWUsUGs9cixJaz1ufWZ1bmN0aW9uIExrKGUpe3JldHVybiBDai5yZXNldCgpLHZvKGUsUmIpLCtDan12YXIgUGo9W251bGwsbnVsbF0sdjNlPXt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpQan07ZnVuY3Rpb24gTmIoZSx0KXtyZXR1cm4gUGpbMF09ZSxQalsxXT10LExrKHYzZSl9dmFyIEp4dD17RmVhdHVyZTpmdW5jdGlvbihlLHQpe3JldHVybiBrayhlLmdlb21ldHJ5LHQpfSxGZWF0dXJlQ29sbGVjdGlvbjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmZlYXR1cmVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoa2socltuXS5nZW9tZXRyeSx0KSlyZXR1cm4hMDtyZXR1cm4hMX19LFF4dD17U3BoZXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9LFBvaW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRidChlLmNvb3JkaW5hdGVzLHQpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih0YnQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sTGluZVN0cmluZzpmdW5jdGlvbihlLHQpe3JldHVybiBlYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihlYnQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbihlLHQpe3JldHVybiByYnQoZS5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihyYnQocltuXSx0KSlyZXR1cm4hMDtyZXR1cm4hMX0sR2VvbWV0cnlDb2xsZWN0aW9uOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuZ2VvbWV0cmllcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKGtrKHJbbl0sdCkpcmV0dXJuITA7cmV0dXJuITF9fTtmdW5jdGlvbiBrayhlLHQpe3JldHVybiBlJiZReHQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9ReHRbZS50eXBlXShlLHQpOiExfWZ1bmN0aW9uIHRidChlLHQpe3JldHVybiBOYihlLHQpPT09MH1mdW5jdGlvbiBlYnQoZSx0KXtmb3IodmFyIHIsbixpLG89MCxhPWUubGVuZ3RoO288YTtvKyspe2lmKG49TmIoZVtvXSx0KSxuPT09MHx8bz4wJiYoaT1OYihlW29dLGVbby0xXSksaT4wJiZyPD1pJiZuPD1pJiYocituLWkpKigxLU1hdGgucG93KChyLW4pL2ksMikpPHpfKmkpKXJldHVybiEwO3I9bn1yZXR1cm4hMX1mdW5jdGlvbiByYnQoZSx0KXtyZXR1cm4hIUVrKGUubWFwKHgzZSksbmJ0KHQpKX1mdW5jdGlvbiB4M2UoZSl7cmV0dXJuIGU9ZS5tYXAobmJ0KSxlLnBvcCgpLGV9ZnVuY3Rpb24gbmJ0KGUpe3JldHVybltlWzBdKl9lLGVbMV0qX2VdfWZ1bmN0aW9uIGlidChlLHQpe3JldHVybihlJiZKeHQuaGFzT3duUHJvcGVydHkoZS50eXBlKT9KeHRbZS50eXBlXTpraykoZSx0KX1mdW5jdGlvbiBvYnQoZSx0LHIpe3ZhciBuPUlyKGUsdC1sZSxyKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLm1hcChmdW5jdGlvbihvKXtyZXR1cm5baSxvXX0pfX1mdW5jdGlvbiBhYnQoZSx0LHIpe3ZhciBuPUlyKGUsdC1sZSxyKS5jb25jYXQodCk7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuLm1hcChmdW5jdGlvbihvKXtyZXR1cm5bbyxpXX0pfX1mdW5jdGlvbiBSaygpe3ZhciBlLHQscixuLGksbyxhLHMsbD0xMCxjPWwsdT05MCxoPTM2MCxmLHAsZCxnLF89Mi41O2Z1bmN0aW9uIHkoKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp4KCl9fWZ1bmN0aW9uIHgoKXtyZXR1cm4gSXIoV0Uobi91KSp1LHIsdSkubWFwKGQpLmNvbmNhdChJcihXRShzL2gpKmgsYSxoKS5tYXAoZykpLmNvbmNhdChJcihXRSh0L2wpKmwsZSxsKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIFJlKGIldSk+bGV9KS5tYXAoZikpLmNvbmNhdChJcihXRShvL2MpKmMsaSxjKS5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIFJlKGIlaCk+bGV9KS5tYXAocCkpfXJldHVybiB5LmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHgoKS5tYXAoZnVuY3Rpb24oYil7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOmJ9fSl9LHkub3V0bGluZT1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbZChuKS5jb25jYXQoZyhhKS5zbGljZSgxKSxkKHIpLnJldmVyc2UoKS5zbGljZSgxKSxnKHMpLnJldmVyc2UoKS5zbGljZSgxKSldfX0seS5leHRlbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eS5leHRlbnRNYWpvcihiKS5leHRlbnRNaW5vcihiKTp5LmV4dGVudE1pbm9yKCl9LHkuZXh0ZW50TWFqb3I9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K2JbMF1bMF0scj0rYlsxXVswXSxzPStiWzBdWzFdLGE9K2JbMV1bMV0sbj5yJiYoYj1uLG49cixyPWIpLHM+YSYmKGI9cyxzPWEsYT1iKSx5LnByZWNpc2lvbihfKSk6W1tuLHNdLFtyLGFdXX0seS5leHRlbnRNaW5vcj1mdW5jdGlvbihiKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rYlswXVswXSxlPStiWzFdWzBdLG89K2JbMF1bMV0saT0rYlsxXVsxXSx0PmUmJihiPXQsdD1lLGU9Yiksbz5pJiYoYj1vLG89aSxpPWIpLHkucHJlY2lzaW9uKF8pKTpbW3Qsb10sW2UsaV1dfSx5LnN0ZXA9ZnVuY3Rpb24oYil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/eS5zdGVwTWFqb3IoYikuc3RlcE1pbm9yKGIpOnkuc3RlcE1pbm9yKCl9LHkuc3RlcE1ham9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PStiWzBdLGg9K2JbMV0seSk6W3UsaF19LHkuc3RlcE1pbm9yPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStiWzBdLGM9K2JbMV0seSk6W2wsY119LHkucHJlY2lzaW9uPWZ1bmN0aW9uKGIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPStiLGY9b2J0KG8saSw5MCkscD1hYnQodCxlLF8pLGQ9b2J0KHMsYSw5MCksZz1hYnQobixyLF8pLHkpOl99LHkuZXh0ZW50TWFqb3IoW1stMTgwLC05MCtsZV0sWzE4MCw5MC1sZV1dKS5leHRlbnRNaW5vcihbWy0xODAsLTgwLWxlXSxbMTgwLDgwK2xlXV0pfWZ1bmN0aW9uIHNidCgpe3JldHVybiBSaygpKCl9ZnVuY3Rpb24gbGJ0KGUsdCl7dmFyIHI9ZVswXSpfZSxuPWVbMV0qX2UsaT10WzBdKl9lLG89dFsxXSpfZSxhPVp0KG4pLHM9WHQobiksbD1adChvKSxjPVh0KG8pLHU9YSpadChyKSxoPWEqWHQociksZj1sKlp0KGkpLHA9bCpYdChpKSxkPTIqd24oeHIocGooby1uKSthKmwqcGooaS1yKSkpLGc9WHQoZCksXz1kP2Z1bmN0aW9uKHkpe3ZhciB4PVh0KHkqPWQpL2csYj1YdChkLXkpL2csUz1iKnUreCpmLEM9YipoK3gqcCxQPWIqcyt4KmM7cmV0dXJuW2JuKEMsUykqdnIsYm4oUCx4cihTKlMrQypDKSkqdnJdfTpmdW5jdGlvbigpe3JldHVybltyKnZyLG4qdnJdfTtyZXR1cm4gXy5kaXN0YW5jZT1kLF99ZnVuY3Rpb24gam0oZSl7cmV0dXJuIGV9dmFyIElqPVNzKCksTGo9U3MoKSxjYnQsdWJ0LGtqLFJqLFhtPXtwb2ludDpGcixsaW5lU3RhcnQ6RnIsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtYbS5saW5lU3RhcnQ9YjNlLFhtLmxpbmVFbmQ9UzNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7WG0ubGluZVN0YXJ0PVhtLmxpbmVFbmQ9WG0ucG9pbnQ9RnIsSWouYWRkKFJlKExqKSksTGoucmVzZXQoKX0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9SWovMjtyZXR1cm4gSWoucmVzZXQoKSxlfX07ZnVuY3Rpb24gYjNlKCl7WG0ucG9pbnQ9dzNlfWZ1bmN0aW9uIHczZShlLHQpe1htLnBvaW50PWhidCxjYnQ9a2o9ZSx1YnQ9Umo9dH1mdW5jdGlvbiBoYnQoZSx0KXtMai5hZGQoUmoqZS1raip0KSxraj1lLFJqPXR9ZnVuY3Rpb24gUzNlKCl7aGJ0KGNidCx1YnQpfXZhciBOaj1YbTt2YXIgRGI9MS8wLE5rPURiLHI1PS1EYixEaz1yNSxNM2U9e3BvaW50OkUzZSxsaW5lU3RhcnQ6RnIsbGluZUVuZDpGcixwb2x5Z29uU3RhcnQ6RnIscG9seWdvbkVuZDpGcixyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgZT1bW0RiLE5rXSxbcjUsRGtdXTtyZXR1cm4gcjU9RGs9LShOaz1EYj0xLzApLGV9fTtmdW5jdGlvbiBFM2UoZSx0KXtlPERiJiYoRGI9ZSksZT5yNSYmKHI1PWUpLHQ8TmsmJihOaz10KSx0PkRrJiYoRGs9dCl9dmFyIE9iPU0zZTt2YXIgRGo9MCxPaj0wLG41PTAsT2s9MCx6az0wLHpiPTAsemo9MCxGaj0wLGk1PTAsZGJ0LG1idCxCaCxIaCxtdT17cG9pbnQ6cV8sbGluZVN0YXJ0OmZidCxsaW5lRW5kOnBidCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXttdS5saW5lU3RhcnQ9QTNlLG11LmxpbmVFbmQ9UDNlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7bXUucG9pbnQ9cV8sbXUubGluZVN0YXJ0PWZidCxtdS5saW5lRW5kPXBidH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIGU9aTU/W3pqL2k1LEZqL2k1XTp6Yj9bT2svemIsemsvemJdOm41P1tEai9uNSxPai9uNV06W05hTixOYU5dO3JldHVybiBEaj1Paj1uNT1Paz16az16Yj16aj1Gaj1pNT0wLGV9fTtmdW5jdGlvbiBxXyhlLHQpe0RqKz1lLE9qKz10LCsrbjV9ZnVuY3Rpb24gZmJ0KCl7bXUucG9pbnQ9VDNlfWZ1bmN0aW9uIFQzZShlLHQpe211LnBvaW50PUMzZSxxXyhCaD1lLEhoPXQpfWZ1bmN0aW9uIEMzZShlLHQpe3ZhciByPWUtQmgsbj10LUhoLGk9eHIocipyK24qbik7T2srPWkqKEJoK2UpLzIsemsrPWkqKEhoK3QpLzIsemIrPWkscV8oQmg9ZSxIaD10KX1mdW5jdGlvbiBwYnQoKXttdS5wb2ludD1xX31mdW5jdGlvbiBBM2UoKXttdS5wb2ludD1JM2V9ZnVuY3Rpb24gUDNlKCl7Z2J0KGRidCxtYnQpfWZ1bmN0aW9uIEkzZShlLHQpe211LnBvaW50PWdidCxxXyhkYnQ9Qmg9ZSxtYnQ9SGg9dCl9ZnVuY3Rpb24gZ2J0KGUsdCl7dmFyIHI9ZS1CaCxuPXQtSGgsaT14cihyKnIrbipuKTtPays9aSooQmgrZSkvMix6ays9aSooSGgrdCkvMix6Yis9aSxpPUhoKmUtQmgqdCx6ais9aSooQmgrZSksRmorPWkqKEhoK3QpLGk1Kz1pKjMscV8oQmg9ZSxIaD10KX12YXIgQmo9bXU7ZnVuY3Rpb24gRmsoZSl7dGhpcy5fY29udGV4dD1lfUZrLnByb3RvdHlwZT17X3JhZGl1czo0LjUscG9pbnRSYWRpdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3JhZGl1cz1lLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT09PTAmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnt0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfWRlZmF1bHQ6e3RoaXMuX2NvbnRleHQubW92ZVRvKGUrdGhpcy5fcmFkaXVzLHQpLHRoaXMuX2NvbnRleHQuYXJjKGUsdCx0aGlzLl9yYWRpdXMsMCxTaSk7YnJlYWt9fX0scmVzdWx0OkZyfTt2YXIgVmo9U3MoKSxIaixfYnQseWJ0LG81LGE1LEJrPXtwb2ludDpGcixsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtCay5wb2ludD1MM2V9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtIaiYmdmJ0KF9idCx5YnQpLEJrLnBvaW50PUZyfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtIaj0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0hqPW51bGx9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciBlPStWajtyZXR1cm4gVmoucmVzZXQoKSxlfX07ZnVuY3Rpb24gTDNlKGUsdCl7QmsucG9pbnQ9dmJ0LF9idD1vNT1lLHlidD1hNT10fWZ1bmN0aW9uIHZidChlLHQpe281LT1lLGE1LT10LFZqLmFkZCh4cihvNSpvNSthNSphNSkpLG81PWUsYTU9dH12YXIgVWo9Qms7ZnVuY3Rpb24gSGsoKXt0aGlzLl9zdHJpbmc9W119SGsucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOnhidCg0LjUpLHBvaW50UmFkaXVzOmZ1bmN0aW9uKGUpe3JldHVybihlPStlKSE9PXRoaXMuX3JhZGl1cyYmKHRoaXMuX3JhZGl1cz1lLHRoaXMuX2NpcmNsZT1udWxsKSx0aGlzfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9PT0wJiZ0aGlzLl9zdHJpbmcucHVzaCgiWiIpLHRoaXMuX3BvaW50PU5hTn0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp7dGhpcy5fc3RyaW5nLnB1c2goIk0iLGUsIiwiLHQpLHRoaXMuX3BvaW50PTE7YnJlYWt9Y2FzZSAxOnt0aGlzLl9zdHJpbmcucHVzaCgiTCIsZSwiLCIsdCk7YnJlYWt9ZGVmYXVsdDp7dGhpcy5fY2lyY2xlPT1udWxsJiYodGhpcy5fY2lyY2xlPXhidCh0aGlzLl9yYWRpdXMpKSx0aGlzLl9zdHJpbmcucHVzaCgiTSIsZSwiLCIsdCx0aGlzLl9jaXJjbGUpO2JyZWFrfX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciBlPXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLGV9ZWxzZSByZXR1cm4gbnVsbH19O2Z1bmN0aW9uIHhidChlKXtyZXR1cm4ibTAsIitlKyJhIitlKyIsIitlKyIgMCAxLDEgMCwiKy0yKmUrImEiK2UrIiwiK2UrIiAwIDEsMSAwLCIrMiplKyJ6In1mdW5jdGlvbiBiYnQoZSx0KXt2YXIgcj00LjUsbixpO2Z1bmN0aW9uIG8oYSl7cmV0dXJuIGEmJih0eXBlb2Ygcj09ImZ1bmN0aW9uIiYmaS5wb2ludFJhZGl1cygrci5hcHBseSh0aGlzLGFyZ3VtZW50cykpLHZvKGEsbihpKSkpLGkucmVzdWx0KCl9cmV0dXJuIG8uYXJlYT1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKE5qKSksTmoucmVzdWx0KCl9LG8ubWVhc3VyZT1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKFVqKSksVWoucmVzdWx0KCl9LG8uYm91bmRzPWZ1bmN0aW9uKGEpe3JldHVybiB2byhhLG4oT2IpKSxPYi5yZXN1bHQoKX0sby5jZW50cm9pZD1mdW5jdGlvbihhKXtyZXR1cm4gdm8oYSxuKEJqKSksQmoucmVzdWx0KCl9LG8ucHJvamVjdGlvbj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hPT1udWxsPyhlPW51bGwsam0pOihlPWEpLnN0cmVhbSxvKTplfSxvLmNvbnRleHQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9YT09bnVsbD8odD1udWxsLG5ldyBIayk6bmV3IEZrKHQ9YSksdHlwZW9mIHIhPSJmdW5jdGlvbiImJmkucG9pbnRSYWRpdXMociksbyk6dH0sby5wb2ludFJhZGl1cz1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgYT09ImZ1bmN0aW9uIj9hOihpLnBvaW50UmFkaXVzKCthKSwrYSksbyk6cn0sby5wcm9qZWN0aW9uKGUpLmNvbnRleHQodCl9ZnVuY3Rpb24gd2J0KGUpe3JldHVybntzdHJlYW06JG0oZSl9fWZ1bmN0aW9uICRtKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1uZXcgcWo7Zm9yKHZhciBuIGluIGUpcltuXT1lW25dO3JldHVybiByLnN0cmVhbT10LHJ9fWZ1bmN0aW9uIHFqKCl7fXFqLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cWoscG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLnN0cmVhbS5wb2ludChlLHQpfSxzcGhlcmU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gR2ooZSx0LHIpe3ZhciBuPWUuY2xpcEV4dGVudCYmZS5jbGlwRXh0ZW50KCk7cmV0dXJuIGUuc2NhbGUoMTUwKS50cmFuc2xhdGUoWzAsMF0pLG4hPW51bGwmJmUuY2xpcEV4dGVudChudWxsKSx2byhyLGUuc3RyZWFtKE9iKSksdChPYi5yZXN1bHQoKSksbiE9bnVsbCYmZS5jbGlwRXh0ZW50KG4pLGV9ZnVuY3Rpb24gR18oZSx0LHIpe3JldHVybiBHaihlLGZ1bmN0aW9uKG4pe3ZhciBpPXRbMV1bMF0tdFswXVswXSxvPXRbMV1bMV0tdFswXVsxXSxhPU1hdGgubWluKGkvKG5bMV1bMF0tblswXVswXSksby8oblsxXVsxXS1uWzBdWzFdKSkscz0rdFswXVswXSsoaS1hKihuWzFdWzBdK25bMF1bMF0pKS8yLGw9K3RbMF1bMV0rKG8tYSooblsxXVsxXStuWzBdWzFdKSkvMjtlLnNjYWxlKDE1MCphKS50cmFuc2xhdGUoW3MsbF0pfSxyKX1mdW5jdGlvbiBGYihlLHQscil7cmV0dXJuIEdfKGUsW1swLDBdLHRdLHIpfWZ1bmN0aW9uIEJiKGUsdCxyKXtyZXR1cm4gR2ooZSxmdW5jdGlvbihuKXt2YXIgaT0rdCxvPWkvKG5bMV1bMF0tblswXVswXSksYT0oaS1vKihuWzFdWzBdK25bMF1bMF0pKS8yLHM9LW8qblswXVsxXTtlLnNjYWxlKDE1MCpvKS50cmFuc2xhdGUoW2Esc10pfSxyKX1mdW5jdGlvbiBIYihlLHQscil7cmV0dXJuIEdqKGUsZnVuY3Rpb24obil7dmFyIGk9K3Qsbz1pLyhuWzFdWzFdLW5bMF1bMV0pLGE9LW8qblswXVswXSxzPShpLW8qKG5bMV1bMV0rblswXVsxXSkpLzI7ZS5zY2FsZSgxNTAqbykudHJhbnNsYXRlKFthLHNdKX0scil9dmFyIFNidD0xNixrM2U9WnQoMzAqX2UpO2Z1bmN0aW9uIFdqKGUsdCl7cmV0dXJuK3Q/TjNlKGUsdCk6UjNlKGUpfWZ1bmN0aW9uIFIzZShlKXtyZXR1cm4gJG0oe3BvaW50OmZ1bmN0aW9uKHQscil7dD1lKHQsciksdGhpcy5zdHJlYW0ucG9pbnQodFswXSx0WzFdKX19KX1mdW5jdGlvbiBOM2UoZSx0KXtmdW5jdGlvbiByKG4saSxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyl7dmFyIHk9Yy1uLHg9dS1pLGI9eSp5K3gqeDtpZihiPjQqdCYmZy0tKXt2YXIgUz1hK2YsQz1zK3AsUD1sK2Qsaz14cihTKlMrQypDK1AqUCksTz13bihQLz1rKSxEPVJlKFJlKFApLTEpPGxlfHxSZShvLWgpPGxlPyhvK2gpLzI6Ym4oQyxTKSxCPWUoRCxPKSxJPUJbMF0sTD1CWzFdLFI9SS1uLEY9TC1pLHo9eCpSLXkqRjsoeip6L2I+dHx8UmUoKHkqUit4KkYpL2ItLjUpPi4zfHxhKmYrcypwK2wqZDxrM2UpJiYocihuLGksbyxhLHMsbCxJLEwsRCxTLz1rLEMvPWssUCxnLF8pLF8ucG9pbnQoSSxMKSxyKEksTCxELFMsQyxQLGMsdSxoLGYscCxkLGcsXykpfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF89e3BvaW50OnksbGluZVN0YXJ0OngsbGluZUVuZDpTLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCksXy5saW5lU3RhcnQ9Q30scG9seWdvbkVuZDpmdW5jdGlvbigpe24ucG9seWdvbkVuZCgpLF8ubGluZVN0YXJ0PXh9fTtmdW5jdGlvbiB5KE8sRCl7Tz1lKE8sRCksbi5wb2ludChPWzBdLE9bMV0pfWZ1bmN0aW9uIHgoKXtoPU5hTixfLnBvaW50PWIsbi5saW5lU3RhcnQoKX1mdW5jdGlvbiBiKE8sRCl7dmFyIEI9b2MoW08sRF0pLEk9ZShPLEQpO3IoaCxmLHUscCxkLGcsaD1JWzBdLGY9SVsxXSx1PU8scD1CWzBdLGQ9QlsxXSxnPUJbMl0sU2J0LG4pLG4ucG9pbnQoaCxmKX1mdW5jdGlvbiBTKCl7Xy5wb2ludD15LG4ubGluZUVuZCgpfWZ1bmN0aW9uIEMoKXt4KCksXy5wb2ludD1QLF8ubGluZUVuZD1rfWZ1bmN0aW9uIFAoTyxEKXtiKGk9TyxEKSxvPWgsYT1mLHM9cCxsPWQsYz1nLF8ucG9pbnQ9Yn1mdW5jdGlvbiBrKCl7cihoLGYsdSxwLGQsZyxvLGEsaSxzLGwsYyxTYnQsbiksXy5saW5lRW5kPVMsUygpfXJldHVybiBffX12YXIgRDNlPSRtKHtwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuc3RyZWFtLnBvaW50KGUqX2UsdCpfZSl9fSk7ZnVuY3Rpb24gTzNlKGUpe3JldHVybiAkbSh7cG9pbnQ6ZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQscik7cmV0dXJuIHRoaXMuc3RyZWFtLnBvaW50KG5bMF0sblsxXSl9fSl9ZnVuY3Rpb24gejNlKGUsdCxyLG4saSl7ZnVuY3Rpb24gbyhhLHMpe3JldHVybiBhKj1uLHMqPWksW3QrZSphLHItZSpzXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXtyZXR1cm5bKGEtdCkvZSpuLChyLXMpL2UqaV19LG99ZnVuY3Rpb24gTWJ0KGUsdCxyLG4saSxvKXt2YXIgYT1adChvKSxzPVh0KG8pLGw9YSplLGM9cyplLHU9YS9lLGg9cy9lLGY9KHMqci1hKnQpL2UscD0ocyp0K2EqcikvZTtmdW5jdGlvbiBkKGcsXyl7cmV0dXJuIGcqPW4sXyo9aSxbbCpnLWMqXyt0LHItYypnLWwqX119cmV0dXJuIGQuaW52ZXJ0PWZ1bmN0aW9uKGcsXyl7cmV0dXJuW24qKHUqZy1oKl8rZiksaSoocC1oKmctdSpfKV19LGR9ZnVuY3Rpb24gTWkoZSl7cmV0dXJuIHM1KGZ1bmN0aW9uKCl7cmV0dXJuIGV9KSgpfWZ1bmN0aW9uIHM1KGUpe3ZhciB0LHI9MTUwLG49NDgwLGk9MjUwLG89MCxhPTAscz0wLGw9MCxjPTAsdSxoPTAsZj0xLHA9MSxkPW51bGwsZz10NSxfPW51bGwseSx4LGIsUz1qbSxDPS41LFAsayxPLEQsQjtmdW5jdGlvbiBJKHope3JldHVybiBPKHpbMF0qX2UselsxXSpfZSl9ZnVuY3Rpb24gTCh6KXtyZXR1cm4gej1PLmludmVydCh6WzBdLHpbMV0pLHomJlt6WzBdKnZyLHpbMV0qdnJdfUkuc3RyZWFtPWZ1bmN0aW9uKHope3JldHVybiBEJiZCPT09ej9EOkQ9RDNlKE8zZSh1KShnKFAoUyhCPXopKSkpKX0sSS5wcmVjbGlwPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPXosZD12b2lkIDAsRigpKTpnfSxJLnBvc3RjbGlwPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPXosXz15PXg9Yj1udWxsLEYoKSk6U30sSS5jbGlwQW5nbGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9K3o/Q2soZD16Kl9lKTooZD1udWxsLHQ1KSxGKCkpOmQqdnJ9LEkuY2xpcEV4dGVudD1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz16PT1udWxsPyhfPXk9eD1iPW51bGwsam0pOkRwKF89K3pbMF1bMF0seT0relswXVsxXSx4PSt6WzFdWzBdLGI9K3pbMV1bMV0pLEYoKSk6Xz09bnVsbD9udWxsOltbXyx5XSxbeCxiXV19LEkuc2NhbGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3osUigpKTpyfSxJLnRyYW5zbGF0ZT1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0relswXSxpPSt6WzFdLFIoKSk6W24saV19LEkuY2VudGVyPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXpbMF0lMzYwKl9lLGE9elsxXSUzNjAqX2UsUigpKTpbbyp2cixhKnZyXX0sSS5yb3RhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9elswXSUzNjAqX2UsbD16WzFdJTM2MCpfZSxjPXoubGVuZ3RoPjI/elsyXSUzNjAqX2U6MCxSKCkpOltzKnZyLGwqdnIsYyp2cl19LEkuYW5nbGU9ZnVuY3Rpb24oeil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9eiUzNjAqX2UsUigpKTpoKnZyfSxJLnJlZmxlY3RYPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmPXo/LTE6MSxSKCkpOmY8MH0sSS5yZWZsZWN0WT1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD16Py0xOjEsUigpKTpwPDB9LEkucHJlY2lzaW9uPWZ1bmN0aW9uKHope3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhQPVdqKGssQz16KnopLEYoKSk6eHIoQyl9LEkuZml0RXh0ZW50PWZ1bmN0aW9uKHosVSl7cmV0dXJuIEdfKEkseixVKX0sSS5maXRTaXplPWZ1bmN0aW9uKHosVSl7cmV0dXJuIEZiKEkseixVKX0sSS5maXRXaWR0aD1mdW5jdGlvbih6LFUpe3JldHVybiBCYihJLHosVSl9LEkuZml0SGVpZ2h0PWZ1bmN0aW9uKHosVSl7cmV0dXJuIEhiKEkseixVKX07ZnVuY3Rpb24gUigpe3ZhciB6PU1idChyLDAsMCxmLHAsaCkuYXBwbHkobnVsbCx0KG8sYSkpLFU9KGg/TWJ0OnozZSkocixuLXpbMF0saS16WzFdLGYscCxoKTtyZXR1cm4gdT1RRShzLGwsYyksaz1KRSh0LFUpLE89SkUodSxrKSxQPVdqKGssQyksRigpfWZ1bmN0aW9uIEYoKXtyZXR1cm4gRD1CPW51bGwsSX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdD1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxJLmludmVydD10LmludmVydCYmTCxSKCl9fWZ1bmN0aW9uIFZiKGUpe3ZhciB0PTAscj1CZS8zLG49czUoZSksaT1uKHQscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24odD1vWzBdKl9lLHI9b1sxXSpfZSk6W3QqdnIscip2cl19LGl9ZnVuY3Rpb24gRWJ0KGUpe3ZhciB0PVp0KGUpO2Z1bmN0aW9uIHIobixpKXtyZXR1cm5bbip0LFh0KGkpL3RdfXJldHVybiByLmludmVydD1mdW5jdGlvbihuLGkpe3JldHVybltuL3Qsd24oaSp0KV19LHJ9ZnVuY3Rpb24gWWooZSx0KXt2YXIgcj1YdChlKSxuPShyK1h0KHQpKS8yO2lmKFJlKG4pPGxlKXJldHVybiBFYnQoZSk7dmFyIGk9MStyKigyKm4tciksbz14cihpKS9uO2Z1bmN0aW9uIGEocyxsKXt2YXIgYz14cihpLTIqbipYdChsKSkvbjtyZXR1cm5bYypYdChzKj1uKSxvLWMqWnQocyldfXJldHVybiBhLmludmVydD1mdW5jdGlvbihzLGwpe3ZhciBjPW8tbCx1PWJuKHMsUmUoYykpKmNhKGMpO3JldHVybiBjKm48MCYmKHUtPUJlKmNhKHMpKmNhKGMpKSxbdS9uLHduKChpLShzKnMrYypjKSpuKm4pLygyKm4pKV19LGF9ZnVuY3Rpb24gV18oKXtyZXR1cm4gVmIoWWopLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gVmsoKXtyZXR1cm4gV18oKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBGM2UoZSl7dmFyIHQ9ZS5sZW5ndGg7cmV0dXJue3BvaW50OmZ1bmN0aW9uKHIsbil7Zm9yKHZhciBpPS0xOysraTx0OyllW2ldLnBvaW50KHIsbil9LHNwaGVyZTpmdW5jdGlvbigpe2Zvcih2YXIgcj0tMTsrK3I8dDspZVtyXS5zcGhlcmUoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLmxpbmVFbmQoKX0scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Zm9yKHZhciByPS0xOysrcjx0OyllW3JdLnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIFRidCgpe3ZhciBlLHQscj1WaygpLG4saT1XXygpLnJvdGF0ZShbMTU0LDBdKS5jZW50ZXIoWy0yLDU4LjVdKS5wYXJhbGxlbHMoWzU1LDY1XSksbyxhPVdfKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLHMsbCxjPXtwb2ludDpmdW5jdGlvbihmLHApe2w9W2YscF19fTtmdW5jdGlvbiB1KGYpe3ZhciBwPWZbMF0sZD1mWzFdO3JldHVybiBsPW51bGwsbi5wb2ludChwLGQpLGx8fChvLnBvaW50KHAsZCksbCl8fChzLnBvaW50KHAsZCksbCl9dS5pbnZlcnQ9ZnVuY3Rpb24oZil7dmFyIHA9ci5zY2FsZSgpLGQ9ci50cmFuc2xhdGUoKSxnPShmWzBdLWRbMF0pL3AsXz0oZlsxXS1kWzFdKS9wO3JldHVybihfPj0uMTImJl88LjIzNCYmZz49LS40MjUmJmc8LS4yMTQ/aTpfPj0uMTY2JiZfPC4yMzQmJmc+PS0uMjE0JiZnPC0uMTE1P2E6cikuaW52ZXJ0KGYpfSx1LnN0cmVhbT1mdW5jdGlvbihmKXtyZXR1cm4gZSYmdD09PWY/ZTplPUYzZShbci5zdHJlYW0odD1mKSxpLnN0cmVhbShmKSxhLnN0cmVhbShmKV0pfSx1LnByZWNpc2lvbj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5wcmVjaXNpb24oZiksaS5wcmVjaXNpb24oZiksYS5wcmVjaXNpb24oZiksaCgpKTpyLnByZWNpc2lvbigpfSx1LnNjYWxlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyLnNjYWxlKGYpLGkuc2NhbGUoZiouMzUpLGEuc2NhbGUoZiksdS50cmFuc2xhdGUoci50cmFuc2xhdGUoKSkpOnIuc2NhbGUoKX0sdS50cmFuc2xhdGU9ZnVuY3Rpb24oZil7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHIudHJhbnNsYXRlKCk7dmFyIHA9ci5zY2FsZSgpLGQ9K2ZbMF0sZz0rZlsxXTtyZXR1cm4gbj1yLnRyYW5zbGF0ZShmKS5jbGlwRXh0ZW50KFtbZC0uNDU1KnAsZy0uMjM4KnBdLFtkKy40NTUqcCxnKy4yMzgqcF1dKS5zdHJlYW0oYyksbz1pLnRyYW5zbGF0ZShbZC0uMzA3KnAsZysuMjAxKnBdKS5jbGlwRXh0ZW50KFtbZC0uNDI1KnArbGUsZysuMTIqcCtsZV0sW2QtLjIxNCpwLWxlLGcrLjIzNCpwLWxlXV0pLnN0cmVhbShjKSxzPWEudHJhbnNsYXRlKFtkLS4yMDUqcCxnKy4yMTIqcF0pLmNsaXBFeHRlbnQoW1tkLS4yMTQqcCtsZSxnKy4xNjYqcCtsZV0sW2QtLjExNSpwLWxlLGcrLjIzNCpwLWxlXV0pLnN0cmVhbShjKSxoKCl9LHUuZml0RXh0ZW50PWZ1bmN0aW9uKGYscCl7cmV0dXJuIEdfKHUsZixwKX0sdS5maXRTaXplPWZ1bmN0aW9uKGYscCl7cmV0dXJuIEZiKHUsZixwKX0sdS5maXRXaWR0aD1mdW5jdGlvbihmLHApe3JldHVybiBCYih1LGYscCl9LHUuZml0SGVpZ2h0PWZ1bmN0aW9uKGYscCl7cmV0dXJuIEhiKHUsZixwKX07ZnVuY3Rpb24gaCgpe3JldHVybiBlPXQ9bnVsbCx1fXJldHVybiB1LnNjYWxlKDEwNzApfWZ1bmN0aW9uIFVrKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPVp0KHQpLGk9WnQociksbz1lKG4qaSk7cmV0dXJuW28qaSpYdCh0KSxvKlh0KHIpXX19ZnVuY3Rpb24gVmgoZSl7cmV0dXJuIGZ1bmN0aW9uKHQscil7dmFyIG49eHIodCp0K3IqciksaT1lKG4pLG89WHQoaSksYT1adChpKTtyZXR1cm5bYm4odCpvLG4qYSksd24obiYmcipvL24pXX19dmFyIHFrPVVrKGZ1bmN0aW9uKGUpe3JldHVybiB4cigyLygxK2UpKX0pO3FrLmludmVydD1WaChmdW5jdGlvbihlKXtyZXR1cm4gMip3bihlLzIpfSk7ZnVuY3Rpb24gQ2J0KCl7cmV0dXJuIE1pKHFrKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxODAtLjAwMSl9dmFyIEdrPVVrKGZ1bmN0aW9uKGUpe3JldHVybihlPXVrKGUpKSYmZS9YdChlKX0pO0drLmludmVydD1WaChmdW5jdGlvbihlKXtyZXR1cm4gZX0pO2Z1bmN0aW9uIEFidCgpe3JldHVybiBNaShHaykuc2NhbGUoNzkuNDE4OCkuY2xpcEFuZ2xlKDE4MC0uMDAxKX1mdW5jdGlvbiBZXyhlLHQpe3JldHVybltlLEZfKEliKChtbit0KS8yKSldfVlfLmludmVydD1mdW5jdGlvbihlLHQpe3JldHVybltlLDIqaWMobGsodCkpLW1uXX07ZnVuY3Rpb24gUGJ0KCl7cmV0dXJuIGpqKFlfKS5zY2FsZSg5NjEvU2kpfWZ1bmN0aW9uIGpqKGUpe3ZhciB0PU1pKGUpLHI9dC5jZW50ZXIsbj10LnNjYWxlLGk9dC50cmFuc2xhdGUsbz10LmNsaXBFeHRlbnQsYT1udWxsLHMsbCxjO3Quc2NhbGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4oaCksdSgpKTpuKCl9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpKGgpLHUoKSk6aSgpfSx0LmNlbnRlcj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocihoKSx1KCkpOnIoKX0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPT1udWxsP2E9cz1sPWM9bnVsbDooYT0raFswXVswXSxzPStoWzBdWzFdLGw9K2hbMV1bMF0sYz0raFsxXVsxXSksdSgpKTphPT1udWxsP251bGw6W1thLHNdLFtsLGNdXX07ZnVuY3Rpb24gdSgpe3ZhciBoPUJlKm4oKSxmPXQoYmsodC5yb3RhdGUoKSkuaW52ZXJ0KFswLDBdKSk7cmV0dXJuIG8oYT09bnVsbD9bW2ZbMF0taCxmWzFdLWhdLFtmWzBdK2gsZlsxXStoXV06ZT09PVlfP1tbTWF0aC5tYXgoZlswXS1oLGEpLHNdLFtNYXRoLm1pbihmWzBdK2gsbCksY11dOltbYSxNYXRoLm1heChmWzFdLWgscyldLFtsLE1hdGgubWluKGZbMV0raCxjKV1dKX1yZXR1cm4gdSgpfWZ1bmN0aW9uIFdrKGUpe3JldHVybiBJYigobW4rZSkvMil9ZnVuY3Rpb24gWGooZSx0KXt2YXIgcj1adChlKSxuPWU9PT10P1h0KGUpOkZfKHIvWnQodCkpL0ZfKFdrKHQpL1drKGUpKSxpPXIqY2soV2soZSksbikvbjtpZighbilyZXR1cm4gWV87ZnVuY3Rpb24gbyhhLHMpe2k+MD9zPC1tbitsZSYmKHM9LW1uK2xlKTpzPm1uLWxlJiYocz1tbi1sZSk7dmFyIGw9aS9jayhXayhzKSxuKTtyZXR1cm5bbCpYdChuKmEpLGktbCpadChuKmEpXX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24oYSxzKXt2YXIgbD1pLXMsYz1jYShuKSp4cihhKmErbCpsKSx1PWJuKGEsUmUobCkpKmNhKGwpO3JldHVybiBsKm48MCYmKHUtPUJlKmNhKGEpKmNhKGwpKSxbdS9uLDIqaWMoY2soaS9jLDEvbikpLW1uXX0sb31mdW5jdGlvbiBJYnQoKXtyZXR1cm4gVmIoWGopLnNjYWxlKDEwOS41KS5wYXJhbGxlbHMoWzMwLDMwXSl9ZnVuY3Rpb24gal8oZSx0KXtyZXR1cm5bZSx0XX1qXy5pbnZlcnQ9al87ZnVuY3Rpb24gTGJ0KCl7cmV0dXJuIE1pKGpfKS5zY2FsZSgxNTIuNjMpfWZ1bmN0aW9uICRqKGUsdCl7dmFyIHI9WnQoZSksbj1lPT09dD9YdChlKTooci1adCh0KSkvKHQtZSksaT1yL24rZTtpZihSZShuKTxsZSlyZXR1cm4gal87ZnVuY3Rpb24gbyhhLHMpe3ZhciBsPWktcyxjPW4qYTtyZXR1cm5bbCpYdChjKSxpLWwqWnQoYyldfXJldHVybiBvLmludmVydD1mdW5jdGlvbihhLHMpe3ZhciBsPWktcyxjPWJuKGEsUmUobCkpKmNhKGwpO3JldHVybiBsKm48MCYmKGMtPUJlKmNhKGEpKmNhKGwpKSxbYy9uLGktY2EobikqeHIoYSphK2wqbCldfSxvfWZ1bmN0aW9uIGtidCgpe3JldHVybiBWYigkaikuc2NhbGUoMTMxLjE1NCkuY2VudGVyKFswLDEzLjkzODldKX12YXIgbDU9MS4zNDAyNjQsYzU9LS4wODExMDYsdTU9ODkzZS02LGg1PS4wMDM3OTYsWWs9eHIoMykvMixCM2U9MTI7ZnVuY3Rpb24gamsoZSx0KXt2YXIgcj13bihZaypYdCh0KSksbj1yKnIsaT1uKm4qbjtyZXR1cm5bZSpadChyKS8oWWsqKGw1KzMqYzUqbitpKig3KnU1KzkqaDUqbikpKSxyKihsNStjNSpuK2kqKHU1K2g1Km4pKV19amsuaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQsbj1yKnIsaT1uKm4qbixvPTAsYSxzLGw7bzxCM2UmJihzPXIqKGw1K2M1Km4raSoodTUraDUqbikpLXQsbD1sNSszKmM1Km4raSooNyp1NSs5Kmg1Km4pLHItPWE9cy9sLG49cipyLGk9bipuKm4sIShSZShhKTx6XykpOysrbyk7cmV0dXJuW1lrKmUqKGw1KzMqYzUqbitpKig3KnU1KzkqaDUqbikpL1p0KHIpLHduKFh0KHIpL1lrKV19O2Z1bmN0aW9uIFJidCgpe3JldHVybiBNaShqaykuc2NhbGUoMTc3LjE1OCl9ZnVuY3Rpb24gWGsoZSx0KXt2YXIgcj1adCh0KSxuPVp0KGUpKnI7cmV0dXJuW3IqWHQoZSkvbixYdCh0KS9uXX1Yay5pbnZlcnQ9VmgoaWMpO2Z1bmN0aW9uIE5idCgpe3JldHVybiBNaShYaykuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDYwKX1mdW5jdGlvbiBEYnQoKXt2YXIgZT0xLHQ9MCxyPTAsbj0xLGk9MSxvPTAsYSxzLGw9bnVsbCxjLHUsaCxmPTEscD0xLGQ9JG0oe3BvaW50OmZ1bmN0aW9uKFMsQyl7dmFyIFA9YihbUyxDXSk7dGhpcy5zdHJlYW0ucG9pbnQoUFswXSxQWzFdKX19KSxnPWptLF8seTtmdW5jdGlvbiB4KCl7cmV0dXJuIGY9ZSpuLHA9ZSppLF89eT1udWxsLGJ9ZnVuY3Rpb24gYihTKXt2YXIgQz1TWzBdKmYsUD1TWzFdKnA7aWYobyl7dmFyIGs9UCphLUMqcztDPUMqYStQKnMsUD1rfXJldHVybltDK3QsUCtyXX1yZXR1cm4gYi5pbnZlcnQ9ZnVuY3Rpb24oUyl7dmFyIEM9U1swXS10LFA9U1sxXS1yO2lmKG8pe3ZhciBrPVAqYStDKnM7Qz1DKmEtUCpzLFA9a31yZXR1cm5bQy9mLFAvcF19LGIuc3RyZWFtPWZ1bmN0aW9uKFMpe3JldHVybiBfJiZ5PT09Uz9fOl89ZChnKHk9UykpfSxiLnBvc3RjbGlwPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPVMsbD1jPXU9aD1udWxsLHgoKSk6Z30sYi5jbGlwRXh0ZW50PWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPVM9PW51bGw/KGw9Yz11PWg9bnVsbCxqbSk6RHAobD0rU1swXVswXSxjPStTWzBdWzFdLHU9K1NbMV1bMF0saD0rU1sxXVsxXSkseCgpKTpsPT1udWxsP251bGw6W1tsLGNdLFt1LGhdXX0sYi5zY2FsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rUyx4KCkpOmV9LGIudHJhbnNsYXRlPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStTWzBdLHI9K1NbMV0seCgpKTpbdCxyXX0sYi5hbmdsZT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1TJTM2MCpfZSxzPVh0KG8pLGE9WnQobykseCgpKTpvKnZyfSxiLnJlZmxlY3RYPWZ1bmN0aW9uKFMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPVM/LTE6MSx4KCkpOm48MH0sYi5yZWZsZWN0WT1mdW5jdGlvbihTKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1TPy0xOjEseCgpKTppPDB9LGIuZml0RXh0ZW50PWZ1bmN0aW9uKFMsQyl7cmV0dXJuIEdfKGIsUyxDKX0sYi5maXRTaXplPWZ1bmN0aW9uKFMsQyl7cmV0dXJuIEZiKGIsUyxDKX0sYi5maXRXaWR0aD1mdW5jdGlvbihTLEMpe3JldHVybiBCYihiLFMsQyl9LGIuZml0SGVpZ2h0PWZ1bmN0aW9uKFMsQyl7cmV0dXJuIEhiKGIsUyxDKX0sYn1mdW5jdGlvbiAkayhlLHQpe3ZhciByPXQqdCxuPXIqcjtyZXR1cm5bZSooLjg3MDctLjEzMTk3OSpyK24qKC0uMDEzNzkxK24qKC4wMDM5NzEqci0uMDAxNTI5Km4pKSksdCooMS4wMDcyMjYrciooLjAxNTA4NStuKigtLjA0NDQ3NSsuMDI4ODc0KnItLjAwNTkxNipuKSkpXX0kay5pbnZlcnQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LG49MjUsaTtkb3t2YXIgbz1yKnIsYT1vKm87ci09aT0ociooMS4wMDcyMjYrbyooLjAxNTA4NSthKigtLjA0NDQ3NSsuMDI4ODc0Km8tLjAwNTkxNiphKSkpLXQpLygxLjAwNzIyNitvKiguMDE1MDg1KjMrYSooLS4wNDQ0NzUqNysuMDI4ODc0Kjkqby0uMDA1OTE2KjExKmEpKSl9d2hpbGUoUmUoaSk+bGUmJi0tbj4wKTtyZXR1cm5bZS8oLjg3MDcrKG89cipyKSooLS4xMzE5NzkrbyooLS4wMTM3OTErbypvKm8qKC4wMDM5NzEtLjAwMTUyOSpvKSkpKSxyXX07ZnVuY3Rpb24gT2J0KCl7cmV0dXJuIE1pKCRrKS5zY2FsZSgxNzUuMjk1KX1mdW5jdGlvbiBLayhlLHQpe3JldHVybltadCh0KSpYdChlKSxYdCh0KV19S2suaW52ZXJ0PVZoKHduKTtmdW5jdGlvbiB6YnQoKXtyZXR1cm4gTWkoS2spLnNjYWxlKDI0OS41KS5jbGlwQW5nbGUoOTArbGUpfWZ1bmN0aW9uIFprKGUsdCl7dmFyIHI9WnQodCksbj0xK1p0KGUpKnI7cmV0dXJuW3IqWHQoZSkvbixYdCh0KS9uXX1aay5pbnZlcnQ9VmgoZnVuY3Rpb24oZSl7cmV0dXJuIDIqaWMoZSl9KTtmdW5jdGlvbiBGYnQoKXtyZXR1cm4gTWkoWmspLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9ZnVuY3Rpb24gSmsoZSx0KXtyZXR1cm5bRl8oSWIoKG1uK3QpLzIpKSwtZV19SmsuaW52ZXJ0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuWy10LDIqaWMobGsoZSkpLW1uXX07ZnVuY3Rpb24gQmJ0KCl7dmFyIGU9amooSmspLHQ9ZS5jZW50ZXIscj1lLnJvdGF0ZTtyZXR1cm4gZS5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChbLW5bMV0sblswXV0pOihuPXQoKSxbblsxXSwtblswXV0pfSxlLnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKFtuWzBdLG5bMV0sbi5sZW5ndGg+Mj9uWzJdKzkwOjkwXSk6KG49cigpLFtuWzBdLG5bMV0sblsyXS05MF0pfSxyKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX1mdW5jdGlvbiBIM2UoZSx0KXtyZXR1cm4gZS5wYXJlbnQ9PT10LnBhcmVudD8xOjJ9ZnVuY3Rpb24gVjNlKGUpe3JldHVybiBlLnJlZHVjZShVM2UsMCkvZS5sZW5ndGh9ZnVuY3Rpb24gVTNlKGUsdCl7cmV0dXJuIGUrdC54fWZ1bmN0aW9uIHEzZShlKXtyZXR1cm4gMStlLnJlZHVjZShHM2UsMCl9ZnVuY3Rpb24gRzNlKGUsdCl7cmV0dXJuIE1hdGgubWF4KGUsdC55KX1mdW5jdGlvbiBXM2UoZSl7Zm9yKHZhciB0O3Q9ZS5jaGlsZHJlbjspZT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIFkzZShlKXtmb3IodmFyIHQ7dD1lLmNoaWxkcmVuOyllPXRbdC5sZW5ndGgtMV07cmV0dXJuIGV9ZnVuY3Rpb24gSGJ0KCl7dmFyIGU9SDNlLHQ9MSxyPTEsbj0hMTtmdW5jdGlvbiBpKG8pe3ZhciBhLHM9MDtvLmVhY2hBZnRlcihmdW5jdGlvbihmKXt2YXIgcD1mLmNoaWxkcmVuO3A/KGYueD1WM2UocCksZi55PXEzZShwKSk6KGYueD1hP3MrPWUoZixhKTowLGYueT0wLGE9Zil9KTt2YXIgbD1XM2UobyksYz1ZM2UobyksdT1sLngtZShsLGMpLzIsaD1jLngrZShjLGwpLzI7cmV0dXJuIG8uZWFjaEFmdGVyKG4/ZnVuY3Rpb24oZil7Zi54PShmLngtby54KSp0LGYueT0oby55LWYueSkqcn06ZnVuY3Rpb24oZil7Zi54PShmLngtdSkvKGgtdSkqdCxmLnk9KDEtKG8ueT9mLnkvby55OjEpKSpyfSl9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1vLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStvWzBdLHI9K29bMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K29bMF0scj0rb1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9ZnVuY3Rpb24gajNlKGUpe3ZhciB0PTAscj1lLmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYoIW4pdD0xO2Vsc2UgZm9yKDstLW4+PTA7KXQrPXJbbl0udmFsdWU7ZS52YWx1ZT10fWZ1bmN0aW9uIFZidCgpe3JldHVybiB0aGlzLmVhY2hBZnRlcihqM2UpfWZ1bmN0aW9uIFVidChlKXt2YXIgdD10aGlzLHIsbj1bdF0saSxvLGE7ZG8gZm9yKHI9bi5yZXZlcnNlKCksbj1bXTt0PXIucG9wKCk7KWlmKGUodCksaT10LmNoaWxkcmVuLGkpZm9yKG89MCxhPWkubGVuZ3RoO288YTsrK28pbi5wdXNoKGlbb10pO3doaWxlKG4ubGVuZ3RoKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBxYnQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbixpO3Q9ci5wb3AoKTspaWYoZSh0KSxuPXQuY2hpbGRyZW4sbilmb3IoaT1uLmxlbmd0aC0xO2k+PTA7LS1pKXIucHVzaChuW2ldKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBHYnQoZSl7Zm9yKHZhciB0PXRoaXMscj1bdF0sbj1bXSxpLG8sYTt0PXIucG9wKCk7KWlmKG4ucHVzaCh0KSxpPXQuY2hpbGRyZW4saSlmb3Iobz0wLGE9aS5sZW5ndGg7bzxhOysrbylyLnB1c2goaVtvXSk7Zm9yKDt0PW4ucG9wKCk7KWUodCk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gV2J0KGUpe3JldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbih0KXtmb3IodmFyIHI9K2UodC5kYXRhKXx8MCxuPXQuY2hpbGRyZW4saT1uJiZuLmxlbmd0aDstLWk+PTA7KXIrPW5baV0udmFsdWU7dC52YWx1ZT1yfSl9ZnVuY3Rpb24gWWJ0KGUpe3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb3J0KGUpfSl9ZnVuY3Rpb24gamJ0KGUpe2Zvcih2YXIgdD10aGlzLHI9WDNlKHQsZSksbj1bdF07dCE9PXI7KXQ9dC5wYXJlbnQsbi5wdXNoKHQpO2Zvcih2YXIgaT1uLmxlbmd0aDtlIT09cjspbi5zcGxpY2UoaSwwLGUpLGU9ZS5wYXJlbnQ7cmV0dXJuIG59ZnVuY3Rpb24gWDNlKGUsdCl7aWYoZT09PXQpcmV0dXJuIGU7dmFyIHI9ZS5hbmNlc3RvcnMoKSxuPXQuYW5jZXN0b3JzKCksaT1udWxsO2ZvcihlPXIucG9wKCksdD1uLnBvcCgpO2U9PT10OylpPWUsZT1yLnBvcCgpLHQ9bi5wb3AoKTtyZXR1cm4gaX1mdW5jdGlvbiBYYnQoKXtmb3IodmFyIGU9dGhpcyx0PVtlXTtlPWUucGFyZW50Oyl0LnB1c2goZSk7cmV0dXJuIHR9ZnVuY3Rpb24gJGJ0KCl7dmFyIGU9W107cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXtlLnB1c2godCl9KSxlfWZ1bmN0aW9uIEtidCgpe3ZhciBlPVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoZnVuY3Rpb24odCl7dC5jaGlsZHJlbnx8ZS5wdXNoKHQpfSksZX1mdW5jdGlvbiBaYnQoKXt2YXIgZT10aGlzLHQ9W107cmV0dXJuIGUuZWFjaChmdW5jdGlvbihyKXtyIT09ZSYmdC5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pLHR9ZnVuY3Rpb24gZjUoZSx0KXt2YXIgcj1uZXcgS20oZSksbj0rZS52YWx1ZSYmKHIudmFsdWU9ZS52YWx1ZSksaSxvPVtyXSxhLHMsbCxjO2Zvcih0PT1udWxsJiYodD1LM2UpO2k9by5wb3AoKTspaWYobiYmKGkudmFsdWU9K2kuZGF0YS52YWx1ZSksKHM9dChpLmRhdGEpKSYmKGM9cy5sZW5ndGgpKWZvcihpLmNoaWxkcmVuPW5ldyBBcnJheShjKSxsPWMtMTtsPj0wOy0tbClvLnB1c2goYT1pLmNoaWxkcmVuW2xdPW5ldyBLbShzW2xdKSksYS5wYXJlbnQ9aSxhLmRlcHRoPWkuZGVwdGgrMTtyZXR1cm4gci5lYWNoQmVmb3JlKEtqKX1mdW5jdGlvbiAkM2UoKXtyZXR1cm4gZjUodGhpcykuZWFjaEJlZm9yZShaM2UpfWZ1bmN0aW9uIEszZShlKXtyZXR1cm4gZS5jaGlsZHJlbn1mdW5jdGlvbiBaM2UoZSl7ZS5kYXRhPWUuZGF0YS5kYXRhfWZ1bmN0aW9uIEtqKGUpe3ZhciB0PTA7ZG8gZS5oZWlnaHQ9dDt3aGlsZSgoZT1lLnBhcmVudCkmJmUuaGVpZ2h0PCsrdCl9ZnVuY3Rpb24gS20oZSl7dGhpcy5kYXRhPWUsdGhpcy5kZXB0aD10aGlzLmhlaWdodD0wLHRoaXMucGFyZW50PW51bGx9S20ucHJvdG90eXBlPWY1LnByb3RvdHlwZT17Y29uc3RydWN0b3I6S20sY291bnQ6VmJ0LGVhY2g6VWJ0LGVhY2hBZnRlcjpHYnQsZWFjaEJlZm9yZTpxYnQsc3VtOldidCxzb3J0OllidCxwYXRoOmpidCxhbmNlc3RvcnM6WGJ0LGRlc2NlbmRhbnRzOiRidCxsZWF2ZXM6S2J0LGxpbmtzOlpidCxjb3B5OiQzZX07dmFyIEpidD1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gUWJ0KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyLG47dDspbj1NYXRoLnJhbmRvbSgpKnQtLXwwLHI9ZVt0XSxlW3RdPWVbbl0sZVtuXT1yO3JldHVybiBlfWZ1bmN0aW9uIHQ4KGUpe2Zvcih2YXIgdD0wLHI9KGU9UWJ0KEpidC5jYWxsKGUpKSkubGVuZ3RoLG49W10saSxvO3Q8cjspaT1lW3RdLG8mJnQydChvLGkpPysrdDoobz1RM2Uobj1KM2UobixpKSksdD0wKTtyZXR1cm4gb31mdW5jdGlvbiBKM2UoZSx0KXt2YXIgcixuO2lmKFpqKHQsZSkpcmV0dXJuW3RdO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3IpaWYoUWsodCxlW3JdKSYmWmoocDUoZVtyXSx0KSxlKSlyZXR1cm5bZVtyXSx0XTtmb3Iocj0wO3I8ZS5sZW5ndGgtMTsrK3IpZm9yKG49cisxO248ZS5sZW5ndGg7KytuKWlmKFFrKHA1KGVbcl0sZVtuXSksdCkmJlFrKHA1KGVbcl0sdCksZVtuXSkmJlFrKHA1KGVbbl0sdCksZVtyXSkmJlpqKGUydChlW3JdLGVbbl0sdCksZSkpcmV0dXJuW2Vbcl0sZVtuXSx0XTt0aHJvdyBuZXcgRXJyb3J9ZnVuY3Rpb24gUWsoZSx0KXt2YXIgcj1lLnItdC5yLG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gdDJ0KGUsdCl7dmFyIHI9ZS5yLXQucisxZS02LG49dC54LWUueCxpPXQueS1lLnk7cmV0dXJuIHI+MCYmcipyPm4qbitpKml9ZnVuY3Rpb24gWmooZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZighdDJ0KGUsdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUTNlKGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAxOnJldHVybiB0TWUoZVswXSk7Y2FzZSAyOnJldHVybiBwNShlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gZTJ0KGVbMF0sZVsxXSxlWzJdKX19ZnVuY3Rpb24gdE1lKGUpe3JldHVybnt4OmUueCx5OmUueSxyOmUucn19ZnVuY3Rpb24gcDUoZSx0KXt2YXIgcj1lLngsbj1lLnksaT1lLnIsbz10LngsYT10Lnkscz10LnIsbD1vLXIsYz1hLW4sdT1zLWksaD1NYXRoLnNxcnQobCpsK2MqYyk7cmV0dXJue3g6KHIrbytsL2gqdSkvMix5OihuK2ErYy9oKnUpLzIscjooaCtpK3MpLzJ9fWZ1bmN0aW9uIGUydChlLHQscil7dmFyIG49ZS54LGk9ZS55LG89ZS5yLGE9dC54LHM9dC55LGw9dC5yLGM9ci54LHU9ci55LGg9ci5yLGY9bi1hLHA9bi1jLGQ9aS1zLGc9aS11LF89bC1vLHk9aC1vLHg9bipuK2kqaS1vKm8sYj14LWEqYS1zKnMrbCpsLFM9eC1jKmMtdSp1K2gqaCxDPXAqZC1mKmcsUD0oZCpTLWcqYikvKEMqMiktbixrPShnKl8tZCp5KS9DLE89KHAqYi1mKlMpLyhDKjIpLWksRD0oZip5LXAqXykvQyxCPWsqaytEKkQtMSxJPTIqKG8rUCprK08qRCksTD1QKlArTypPLW8qbyxSPS0oQj8oSStNYXRoLnNxcnQoSSpJLTQqQipMKSkvKDIqQik6TC9JKTtyZXR1cm57eDpuK1AraypSLHk6aStPK0QqUixyOlJ9fWZ1bmN0aW9uIHIydChlLHQscil7dmFyIG49ZS54LXQueCxpLG8sYT1lLnktdC55LHMsbCxjPW4qbithKmE7Yz8obz10LnIrci5yLG8qPW8sbD1lLnIrci5yLGwqPWwsbz5sPyhpPShjK2wtbykvKDIqYykscz1NYXRoLnNxcnQoTWF0aC5tYXgoMCxsL2MtaSppKSksci54PWUueC1pKm4tcyphLHIueT1lLnktaSphK3Mqbik6KGk9KGMrby1sKS8oMipjKSxzPU1hdGguc3FydChNYXRoLm1heCgwLG8vYy1pKmkpKSxyLng9dC54K2kqbi1zKmEsci55PXQueStpKmErcypuKSk6KHIueD10Lngrci5yLHIueT10LnkpfWZ1bmN0aW9uIG4ydChlLHQpe3ZhciByPWUucit0LnItMWUtNixuPXQueC1lLngsaT10LnktZS55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIGkydChlKXt2YXIgdD1lLl8scj1lLm5leHQuXyxuPXQucityLnIsaT0odC54KnIucityLngqdC5yKS9uLG89KHQueSpyLnIrci55KnQucikvbjtyZXR1cm4gaSppK28qb31mdW5jdGlvbiBlOChlKXt0aGlzLl89ZSx0aGlzLm5leHQ9bnVsbCx0aGlzLnByZXZpb3VzPW51bGx9ZnVuY3Rpb24gSmooZSl7aWYoIShpPWUubGVuZ3RoKSlyZXR1cm4gMDt2YXIgdCxyLG4saSxvLGEscyxsLGMsdSxoO2lmKHQ9ZVswXSx0Lng9MCx0Lnk9MCwhKGk+MSkpcmV0dXJuIHQucjtpZihyPWVbMV0sdC54PS1yLnIsci54PXQucixyLnk9MCwhKGk+MikpcmV0dXJuIHQucityLnI7cjJ0KHIsdCxuPWVbMl0pLHQ9bmV3IGU4KHQpLHI9bmV3IGU4KHIpLG49bmV3IGU4KG4pLHQubmV4dD1uLnByZXZpb3VzPXIsci5uZXh0PXQucHJldmlvdXM9bixuLm5leHQ9ci5wcmV2aW91cz10O3Q6Zm9yKHM9MztzPGk7KytzKXtyMnQodC5fLHIuXyxuPWVbc10pLG49bmV3IGU4KG4pLGw9ci5uZXh0LGM9dC5wcmV2aW91cyx1PXIuXy5yLGg9dC5fLnI7ZG8gaWYodTw9aCl7aWYobjJ0KGwuXyxuLl8pKXtyPWwsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fXUrPWwuXy5yLGw9bC5uZXh0fWVsc2V7aWYobjJ0KGMuXyxuLl8pKXt0PWMsdC5uZXh0PXIsci5wcmV2aW91cz10LC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c313aGlsZShsIT09Yy5uZXh0KTtmb3Iobi5wcmV2aW91cz10LG4ubmV4dD1yLHQubmV4dD1yLnByZXZpb3VzPXI9bixvPWkydCh0KTsobj1uLm5leHQpIT09cjspKGE9aTJ0KG4pKTxvJiYodD1uLG89YSk7cj10Lm5leHR9Zm9yKHQ9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyl0LnB1c2gobi5fKTtmb3Iobj10OCh0KSxzPTA7czxpOysrcyl0PWVbc10sdC54LT1uLngsdC55LT1uLnk7cmV0dXJuIG4ucn1mdW5jdGlvbiBvMnQoZSl7cmV0dXJuIEpqKGUpLGV9ZnVuY3Rpb24gYTJ0KGUpe3JldHVybiBlPT1udWxsP251bGw6VWIoZSl9ZnVuY3Rpb24gVWIoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yO3JldHVybiBlfWZ1bmN0aW9uIE9wKCl7cmV0dXJuIDB9ZnVuY3Rpb24gWm0oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIGVNZShlKXtyZXR1cm4gTWF0aC5zcXJ0KGUudmFsdWUpfWZ1bmN0aW9uIGMydCgpe3ZhciBlPW51bGwsdD0xLHI9MSxuPU9wO2Z1bmN0aW9uIGkobyl7cmV0dXJuIG8ueD10LzIsby55PXIvMixlP28uZWFjaEJlZm9yZShzMnQoZSkpLmVhY2hBZnRlcihRaihuLC41KSkuZWFjaEJlZm9yZShsMnQoMSkpOm8uZWFjaEJlZm9yZShzMnQoZU1lKSkuZWFjaEFmdGVyKFFqKE9wLDEpKS5lYWNoQWZ0ZXIoUWoobixvLnIvTWF0aC5taW4odCxyKSkpLmVhY2hCZWZvcmUobDJ0KE1hdGgubWluKHQscikvKDIqby5yKSkpLG99cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWEydChvKSxpKTplfSxpLnNpemU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K29bMF0scj0rb1sxXSxpKTpbdCxyXX0saS5wYWRkaW5nPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXR5cGVvZiBvPT0iZnVuY3Rpb24iP286Wm0oK28pLGkpOm59LGl9ZnVuY3Rpb24gczJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt0LmNoaWxkcmVufHwodC5yPU1hdGgubWF4KDAsK2UodCl8fDApKX19ZnVuY3Rpb24gUWooZSx0KXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLG89bi5sZW5ndGgsYT1lKHIpKnR8fDAscztpZihhKWZvcihpPTA7aTxvOysraSluW2ldLnIrPWE7aWYocz1KaihuKSxhKWZvcihpPTA7aTxvOysraSluW2ldLnItPWE7ci5yPXMrYX19fWZ1bmN0aW9uIGwydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9dC5wYXJlbnQ7dC5yKj1lLHImJih0Lng9ci54K2UqdC54LHQueT1yLnkrZSp0LnkpfX1mdW5jdGlvbiByOChlKXtlLngwPU1hdGgucm91bmQoZS54MCksZS55MD1NYXRoLnJvdW5kKGUueTApLGUueDE9TWF0aC5yb3VuZChlLngxKSxlLnkxPU1hdGgucm91bmQoZS55MSl9ZnVuY3Rpb24gVWgoZSx0LHIsbixpKXtmb3IodmFyIG89ZS5jaGlsZHJlbixhLHM9LTEsbD1vLmxlbmd0aCxjPWUudmFsdWUmJihuLXQpL2UudmFsdWU7KytzPGw7KWE9b1tzXSxhLnkwPXIsYS55MT1pLGEueDA9dCxhLngxPXQrPWEudmFsdWUqY31mdW5jdGlvbiB1MnQoKXt2YXIgZT0xLHQ9MSxyPTAsbj0hMTtmdW5jdGlvbiBpKGEpe3ZhciBzPWEuaGVpZ2h0KzE7cmV0dXJuIGEueDA9YS55MD1yLGEueDE9ZSxhLnkxPXQvcyxhLmVhY2hCZWZvcmUobyh0LHMpKSxuJiZhLmVhY2hCZWZvcmUocjgpLGF9ZnVuY3Rpb24gbyhhLHMpe3JldHVybiBmdW5jdGlvbihsKXtsLmNoaWxkcmVuJiZVaChsLGwueDAsYSoobC5kZXB0aCsxKS9zLGwueDEsYSoobC5kZXB0aCsyKS9zKTt2YXIgYz1sLngwLHU9bC55MCxoPWwueDEtcixmPWwueTEtcjtoPGMmJihjPWg9KGMraCkvMiksZjx1JiYodT1mPSh1K2YpLzIpLGwueDA9YyxsLnkwPXUsbC54MT1oLGwueTE9Zn19cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISFhLGkpOm59LGkuc2l6ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rYVswXSx0PSthWzFdLGkpOltlLHRdfSxpLnBhZGRpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2EsaSk6cn0saX12YXIgaDJ0PSIkIixyTWU9e2RlcHRoOi0xfSxmMnQ9e307ZnVuY3Rpb24gbk1lKGUpe3JldHVybiBlLmlkfWZ1bmN0aW9uIGlNZShlKXtyZXR1cm4gZS5wYXJlbnRJZH1mdW5jdGlvbiBwMnQoKXt2YXIgZT1uTWUsdD1pTWU7ZnVuY3Rpb24gcihuKXt2YXIgaSxvLGE9bi5sZW5ndGgscyxsLGMsdT1uZXcgQXJyYXkoYSksaCxmLHA9e307Zm9yKG89MDtvPGE7KytvKWk9bltvXSxjPXVbb109bmV3IEttKGkpLChoPWUoaSxvLG4pKSE9bnVsbCYmKGgrPSIiKSYmKGY9aDJ0KyhjLmlkPWgpLHBbZl09ZiBpbiBwP2YydDpjKTtmb3Iobz0wO288YTsrK28paWYoYz11W29dLGg9dChuW29dLG8sbiksaD09bnVsbHx8IShoKz0iIikpe2lmKHMpdGhyb3cgbmV3IEVycm9yKCJtdWx0aXBsZSByb290cyIpO3M9Y31lbHNle2lmKGw9cFtoMnQraF0sIWwpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nOiAiK2gpO2lmKGw9PT1mMnQpdGhyb3cgbmV3IEVycm9yKCJhbWJpZ3VvdXM6ICIraCk7bC5jaGlsZHJlbj9sLmNoaWxkcmVuLnB1c2goYyk6bC5jaGlsZHJlbj1bY10sYy5wYXJlbnQ9bH1pZighcyl0aHJvdyBuZXcgRXJyb3IoIm5vIHJvb3QiKTtpZihzLnBhcmVudD1yTWUscy5lYWNoQmVmb3JlKGZ1bmN0aW9uKGQpe2QuZGVwdGg9ZC5wYXJlbnQuZGVwdGgrMSwtLWF9KS5lYWNoQmVmb3JlKEtqKSxzLnBhcmVudD1udWxsLGE+MCl0aHJvdyBuZXcgRXJyb3IoImN5Y2xlIik7cmV0dXJuIHN9cmV0dXJuIHIuaWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VWIobikscik6ZX0sci5wYXJlbnRJZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1VYihuKSxyKTp0fSxyfWZ1bmN0aW9uIG9NZShlLHQpe3JldHVybiBlLnBhcmVudD09PXQucGFyZW50PzE6Mn1mdW5jdGlvbiB0WChlKXt2YXIgdD1lLmNoaWxkcmVuO3JldHVybiB0P3RbMF06ZS50fWZ1bmN0aW9uIGVYKGUpe3ZhciB0PWUuY2hpbGRyZW47cmV0dXJuIHQ/dFt0Lmxlbmd0aC0xXTplLnR9ZnVuY3Rpb24gYU1lKGUsdCxyKXt2YXIgbj1yLyh0LmktZS5pKTt0LmMtPW4sdC5zKz1yLGUuYys9bix0LnorPXIsdC5tKz1yfWZ1bmN0aW9uIHNNZShlKXtmb3IodmFyIHQ9MCxyPTAsbj1lLmNoaWxkcmVuLGk9bi5sZW5ndGgsbzstLWk+PTA7KW89bltpXSxvLnorPXQsby5tKz10LHQrPW8ucysocis9by5jKX1mdW5jdGlvbiBsTWUoZSx0LHIpe3JldHVybiBlLmEucGFyZW50PT09dC5wYXJlbnQ/ZS5hOnJ9ZnVuY3Rpb24gbjgoZSx0KXt0aGlzLl89ZSx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9dH1uOC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShLbS5wcm90b3R5cGUpO2Z1bmN0aW9uIGNNZShlKXtmb3IodmFyIHQ9bmV3IG44KGUsMCkscixuPVt0XSxpLG8sYSxzO3I9bi5wb3AoKTspaWYobz1yLl8uY2hpbGRyZW4pZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHM9by5sZW5ndGgpLGE9cy0xO2E+PTA7LS1hKW4ucHVzaChpPXIuY2hpbGRyZW5bYV09bmV3IG44KG9bYV0sYSkpLGkucGFyZW50PXI7cmV0dXJuKHQucGFyZW50PW5ldyBuOChudWxsLDApKS5jaGlsZHJlbj1bdF0sdH1mdW5jdGlvbiBkMnQoKXt2YXIgZT1vTWUsdD0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShjKXt2YXIgdT1jTWUoYyk7aWYodS5lYWNoQWZ0ZXIobyksdS5wYXJlbnQubT0tdS56LHUuZWFjaEJlZm9yZShhKSxuKWMuZWFjaEJlZm9yZShsKTtlbHNle3ZhciBoPWMsZj1jLHA9YztjLmVhY2hCZWZvcmUoZnVuY3Rpb24oeCl7eC54PGgueCYmKGg9eCkseC54PmYueCYmKGY9eCkseC5kZXB0aD5wLmRlcHRoJiYocD14KX0pO3ZhciBkPWg9PT1mPzE6ZShoLGYpLzIsZz1kLWgueCxfPXQvKGYueCtkK2cpLHk9ci8ocC5kZXB0aHx8MSk7Yy5lYWNoQmVmb3JlKGZ1bmN0aW9uKHgpe3gueD0oeC54K2cpKl8seC55PXguZGVwdGgqeX0pfXJldHVybiBjfWZ1bmN0aW9uIG8oYyl7dmFyIHU9Yy5jaGlsZHJlbixoPWMucGFyZW50LmNoaWxkcmVuLGY9Yy5pP2hbYy5pLTFdOm51bGw7aWYodSl7c01lKGMpO3ZhciBwPSh1WzBdLnordVt1Lmxlbmd0aC0xXS56KS8yO2Y/KGMuej1mLnorZShjLl8sZi5fKSxjLm09Yy56LXApOmMuej1wfWVsc2UgZiYmKGMuej1mLnorZShjLl8sZi5fKSk7Yy5wYXJlbnQuQT1zKGMsZixjLnBhcmVudC5BfHxoWzBdKX1mdW5jdGlvbiBhKGMpe2MuXy54PWMueitjLnBhcmVudC5tLGMubSs9Yy5wYXJlbnQubX1mdW5jdGlvbiBzKGMsdSxoKXtpZih1KXtmb3IodmFyIGY9YyxwPWMsZD11LGc9Zi5wYXJlbnQuY2hpbGRyZW5bMF0sXz1mLm0seT1wLm0seD1kLm0sYj1nLm0sUztkPWVYKGQpLGY9dFgoZiksZCYmZjspZz10WChnKSxwPWVYKHApLHAuYT1jLFM9ZC56K3gtZi56LV8rZShkLl8sZi5fKSxTPjAmJihhTWUobE1lKGQsYyxoKSxjLFMpLF8rPVMseSs9UykseCs9ZC5tLF8rPWYubSxiKz1nLm0seSs9cC5tO2QmJiFlWChwKSYmKHAudD1kLHAubSs9eC15KSxmJiYhdFgoZykmJihnLnQ9ZixnLm0rPV8tYixoPWMpfXJldHVybiBofWZ1bmN0aW9uIGwoYyl7Yy54Kj10LGMueT1jLmRlcHRoKnJ9cmV0dXJuIGkuc2VwYXJhdGlvbj1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jLGkpOmV9LGkuc2l6ZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMSx0PStjWzBdLHI9K2NbMV0saSk6bj9udWxsOlt0LHJdfSxpLm5vZGVTaXplPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSEwLHQ9K2NbMF0scj0rY1sxXSxpKTpuP1t0LHJdOm51bGx9LGl9ZnVuY3Rpb24gSm0oZSx0LHIsbixpKXtmb3IodmFyIG89ZS5jaGlsZHJlbixhLHM9LTEsbD1vLmxlbmd0aCxjPWUudmFsdWUmJihpLXIpL2UudmFsdWU7KytzPGw7KWE9b1tzXSxhLngwPXQsYS54MT1uLGEueTA9cixhLnkxPXIrPWEudmFsdWUqY312YXIgclg9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIG5YKGUsdCxyLG4saSxvKXtmb3IodmFyIGE9W10scz10LmNoaWxkcmVuLGwsYyx1PTAsaD0wLGY9cy5sZW5ndGgscCxkLGc9dC52YWx1ZSxfLHkseCxiLFMsQyxQO3U8Zjspe3A9aS1yLGQ9by1uO2RvIF89c1toKytdLnZhbHVlO3doaWxlKCFfJiZoPGYpO2Zvcih5PXg9XyxDPU1hdGgubWF4KGQvcCxwL2QpLyhnKmUpLFA9XypfKkMsUz1NYXRoLm1heCh4L1AsUC95KTtoPGY7KytoKXtpZihfKz1jPXNbaF0udmFsdWUsYzx5JiYoeT1jKSxjPngmJih4PWMpLFA9XypfKkMsYj1NYXRoLm1heCh4L1AsUC95KSxiPlMpe18tPWM7YnJlYWt9Uz1ifWEucHVzaChsPXt2YWx1ZTpfLGRpY2U6cDxkLGNoaWxkcmVuOnMuc2xpY2UodSxoKX0pLGwuZGljZT9VaChsLHIsbixpLGc/bis9ZCpfL2c6byk6Sm0obCxyLG4sZz9yKz1wKl8vZzppLG8pLGctPV8sdT1ofXJldHVybiBhfXZhciBpOD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzKXtuWCh0LG4saSxvLGEscyl9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24obil7cmV0dXJuIGUoKG49K24pPjE/bjoxKX0scn0oclgpO2Z1bmN0aW9uIG0ydCgpe3ZhciBlPWk4LHQ9ITEscj0xLG49MSxpPVswXSxvPU9wLGE9T3Ascz1PcCxsPU9wLGM9T3A7ZnVuY3Rpb24gdShmKXtyZXR1cm4gZi54MD1mLnkwPTAsZi54MT1yLGYueTE9bixmLmVhY2hCZWZvcmUoaCksaT1bMF0sdCYmZi5lYWNoQmVmb3JlKHI4KSxmfWZ1bmN0aW9uIGgoZil7dmFyIHA9aVtmLmRlcHRoXSxkPWYueDArcCxnPWYueTArcCxfPWYueDEtcCx5PWYueTEtcDtfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGYueDA9ZCxmLnkwPWcsZi54MT1fLGYueTE9eSxmLmNoaWxkcmVuJiYocD1pW2YuZGVwdGgrMV09byhmKS8yLGQrPWMoZiktcCxnKz1hKGYpLXAsXy09cyhmKS1wLHktPWwoZiktcCxfPGQmJihkPV89KGQrXykvMikseTxnJiYoZz15PShnK3kpLzIpLGUoZixkLGcsXyx5KSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ISFmLHUpOnR9LHUuc2l6ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rZlswXSxuPStmWzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9VWIoZiksdSk6ZX0sdS5wYWRkaW5nPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3UucGFkZGluZ0lubmVyKGYpLnBhZGRpbmdPdXRlcihmKTp1LnBhZGRpbmdJbm5lcigpfSx1LnBhZGRpbmdJbm5lcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTpvfSx1LnBhZGRpbmdPdXRlcj1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD91LnBhZGRpbmdUb3AoZikucGFkZGluZ1JpZ2h0KGYpLnBhZGRpbmdCb3R0b20oZikucGFkZGluZ0xlZnQoZik6dS5wYWRkaW5nVG9wKCl9LHUucGFkZGluZ1RvcD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTphfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTpzfSx1LnBhZGRpbmdCb3R0b209ZnVuY3Rpb24oZil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dHlwZW9mIGY9PSJmdW5jdGlvbiI/ZjpabSgrZiksdSk6bH0sdS5wYWRkaW5nTGVmdD1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10eXBlb2YgZj09ImZ1bmN0aW9uIj9mOlptKCtmKSx1KTpjfSx1fWZ1bmN0aW9uIGcydChlLHQscixuLGkpe3ZhciBvPWUuY2hpbGRyZW4sYSxzPW8ubGVuZ3RoLGwsYz1uZXcgQXJyYXkocysxKTtmb3IoY1swXT1sPWE9MDthPHM7KythKWNbYSsxXT1sKz1vW2FdLnZhbHVlO3UoMCxzLGUudmFsdWUsdCxyLG4saSk7ZnVuY3Rpb24gdShoLGYscCxkLGcsXyx5KXtpZihoPj1mLTEpe3ZhciB4PW9baF07eC54MD1kLHgueTA9Zyx4LngxPV8seC55MT15O3JldHVybn1mb3IodmFyIGI9Y1toXSxTPXAvMitiLEM9aCsxLFA9Zi0xO0M8UDspe3ZhciBrPUMrUD4+PjE7Y1trXTxTP0M9aysxOlA9a31TLWNbQy0xXTxjW0NdLVMmJmgrMTxDJiYtLUM7dmFyIE89Y1tDXS1iLEQ9cC1PO2lmKF8tZD55LWcpe3ZhciBCPShkKkQrXypPKS9wO3UoaCxDLE8sZCxnLEIseSksdShDLGYsRCxCLGcsXyx5KX1lbHNle3ZhciBJPShnKkQreSpPKS9wO3UoaCxDLE8sZCxnLF8sSSksdShDLGYsRCxkLEksXyx5KX19fWZ1bmN0aW9uIF8ydChlLHQscixuLGkpeyhlLmRlcHRoJjE/Sm06VWgpKGUsdCxyLG4saSl9dmFyIHkydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobixpLG8sYSxzKXtpZigobD1uLl9zcXVhcmlmeSkmJmwucmF0aW89PT10KWZvcih2YXIgbCxjLHUsaCxmPS0xLHAsZD1sLmxlbmd0aCxnPW4udmFsdWU7KytmPGQ7KXtmb3IoYz1sW2ZdLHU9Yy5jaGlsZHJlbixoPWMudmFsdWU9MCxwPXUubGVuZ3RoO2g8cDsrK2gpYy52YWx1ZSs9dVtoXS52YWx1ZTtjLmRpY2U/VWgoYyxpLG8sYSxvKz0ocy1vKSpjLnZhbHVlL2cpOkptKGMsaSxvLGkrPShhLWkpKmMudmFsdWUvZyxzKSxnLT1jLnZhbHVlfWVsc2Ugbi5fc3F1YXJpZnk9bD1uWCh0LG4saSxvLGEscyksbC5yYXRpbz10fXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBlKChuPStuKT4xP246MSl9LHJ9KHJYKTtmdW5jdGlvbiB2MnQoZSl7Zm9yKHZhciB0PS0xLHI9ZS5sZW5ndGgsbixpPWVbci0xXSxvPTA7Kyt0PHI7KW49aSxpPWVbdF0sbys9blsxXSppWzBdLW5bMF0qaVsxXTtyZXR1cm4gby8yfWZ1bmN0aW9uIHgydChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuPTAsaT0wLG8sYT1lW3ItMV0scyxsPTA7Kyt0PHI7KW89YSxhPWVbdF0sbCs9cz1vWzBdKmFbMV0tYVswXSpvWzFdLG4rPShvWzBdK2FbMF0pKnMsaSs9KG9bMV0rYVsxXSkqcztyZXR1cm4gbCo9Myxbbi9sLGkvbF19ZnVuY3Rpb24gYjJ0KGUsdCxyKXtyZXR1cm4odFswXS1lWzBdKSooclsxXS1lWzFdKS0odFsxXS1lWzFdKSooclswXS1lWzBdKX1mdW5jdGlvbiB1TWUoZSx0KXtyZXR1cm4gZVswXS10WzBdfHxlWzFdLXRbMV19ZnVuY3Rpb24gdzJ0KGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxyPVswLDFdLG49MixpPTI7aTx0OysraSl7Zm9yKDtuPjEmJmIydChlW3Jbbi0yXV0sZVtyW24tMV1dLGVbaV0pPD0wOyktLW47cltuKytdPWl9cmV0dXJuIHIuc2xpY2UoMCxuKX1mdW5jdGlvbiBTMnQoZSl7aWYoKHI9ZS5sZW5ndGgpPDMpcmV0dXJuIG51bGw7dmFyIHQscixuPW5ldyBBcnJheShyKSxpPW5ldyBBcnJheShyKTtmb3IodD0wO3Q8cjsrK3Qpblt0XT1bK2VbdF1bMF0sK2VbdF1bMV0sdF07Zm9yKG4uc29ydCh1TWUpLHQ9MDt0PHI7Kyt0KWlbdF09W25bdF1bMF0sLW5bdF1bMV1dO3ZhciBvPXcydChuKSxhPXcydChpKSxzPWFbMF09PT1vWzBdLGw9YVthLmxlbmd0aC0xXT09PW9bby5sZW5ndGgtMV0sYz1bXTtmb3IodD1vLmxlbmd0aC0xO3Q+PTA7LS10KWMucHVzaChlW25bb1t0XV1bMl1dKTtmb3IodD0rczt0PGEubGVuZ3RoLWw7Kyt0KWMucHVzaChlW25bYVt0XV1bMl1dKTtyZXR1cm4gY31mdW5jdGlvbiBNMnQoZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1lW3ItMV0saT10WzBdLG89dFsxXSxhPW5bMF0scz1uWzFdLGwsYyx1PSExLGg9MDtoPHI7KytoKW49ZVtoXSxsPW5bMF0sYz1uWzFdLGM+byE9cz5vJiZpPChhLWwpKihvLWMpLyhzLWMpK2wmJih1PSF1KSxhPWwscz1jO3JldHVybiB1fWZ1bmN0aW9uIEUydChlKXtmb3IodmFyIHQ9LTEscj1lLmxlbmd0aCxuPWVbci0xXSxpLG8sYT1uWzBdLHM9blsxXSxsPTA7Kyt0PHI7KWk9YSxvPXMsbj1lW3RdLGE9blswXSxzPW5bMV0saS09YSxvLT1zLGwrPU1hdGguc3FydChpKmkrbypvKTtyZXR1cm4gbH1mdW5jdGlvbiBhYygpe3JldHVybiBNYXRoLnJhbmRvbSgpfXZhciBUMnQ9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7cmV0dXJuIG49bj09bnVsbD8wOituLGk9aT09bnVsbD8xOitpLGFyZ3VtZW50cy5sZW5ndGg9PT0xPyhpPW4sbj0wKTppLT1uLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSppK259fXJldHVybiByLnNvdXJjZT1lLHJ9KGFjKTt2YXIgbzg9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4saSl7dmFyIG8sYTtyZXR1cm4gbj1uPT1udWxsPzA6K24saT1pPT1udWxsPzE6K2ksZnVuY3Rpb24oKXt2YXIgcztpZihvIT1udWxsKXM9byxvPW51bGw7ZWxzZSBkbyBvPXQoKSoyLTEscz10KCkqMi0xLGE9bypvK3Mqczt3aGlsZSghYXx8YT4xKTtyZXR1cm4gbitpKnMqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKGEpL2EpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIEMydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIoKXt2YXIgbj1vOC5zb3VyY2UodCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChuKCkpfX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIGE4PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxvPTA7bzxuOysrbylpKz10KCk7cmV0dXJuIGl9fXJldHVybiByLnNvdXJjZT1lLHJ9KGFjKTt2YXIgQTJ0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXt2YXIgaT1hOC5zb3VyY2UodCkobik7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkoKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7dmFyIFAydD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9ufX1yZXR1cm4gci5zb3VyY2U9ZSxyfShhYyk7ZnVuY3Rpb24gZmkoZSx0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLnJhbmdlKGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5yYW5nZSh0KS5kb21haW4oZSk7YnJlYWt9cmV0dXJuIHRoaXN9ZnVuY3Rpb24gc2MoZSx0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTp0aGlzLmludGVycG9sYXRvcihlKTticmVhaztkZWZhdWx0OnRoaXMuaW50ZXJwb2xhdG9yKHQpLmRvbWFpbihlKTticmVha31yZXR1cm4gdGhpc31UYigpO3ZhciBJMnQ9QXJyYXkucHJvdG90eXBlLFhfPUkydC5tYXAsbGM9STJ0LnNsaWNlO3ZhciBzOD17bmFtZToiaW1wbGljaXQifTtmdW5jdGlvbiBndSgpe3ZhciBlPUppKCksdD1bXSxyPVtdLG49czg7ZnVuY3Rpb24gaShvKXt2YXIgYT1vKyIiLHM9ZS5nZXQoYSk7aWYoIXMpe2lmKG4hPT1zOClyZXR1cm4gbjtlLnNldChhLHM9dC5wdXNoKG8pKX1yZXR1cm4gclsocy0xKSVyLmxlbmd0aF19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKG8pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LnNsaWNlKCk7dD1bXSxlPUppKCk7Zm9yKHZhciBhPS0xLHM9by5sZW5ndGgsbCxjOysrYTxzOyllLmhhcyhjPShsPW9bYV0pKyIiKXx8ZS5zZXQoYyx0LnB1c2gobCkpO3JldHVybiBpfSxpLnJhbmdlPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWxjLmNhbGwobyksaSk6ci5zbGljZSgpfSxpLnVua25vd249ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49byxpKTpufSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZ3UodCxyKS51bmtub3duKG4pfSxmaS5hcHBseShpLGFyZ3VtZW50cyksaX1mdW5jdGlvbiBRbSgpe3ZhciBlPWd1KCkudW5rbm93bih2b2lkIDApLHQ9ZS5kb21haW4scj1lLnJhbmdlLG49WzAsMV0saSxvLGE9ITEscz0wLGw9MCxjPS41O2RlbGV0ZSBlLnVua25vd247ZnVuY3Rpb24gdSgpe3ZhciBoPXQoKS5sZW5ndGgsZj1uWzFdPG5bMF0scD1uW2YtMF0sZD1uWzEtZl07aT0oZC1wKS9NYXRoLm1heCgxLGgtcytsKjIpLGEmJihpPU1hdGguZmxvb3IoaSkpLHArPShkLXAtaSooaC1zKSkqYyxvPWkqKDEtcyksYSYmKHA9TWF0aC5yb3VuZChwKSxvPU1hdGgucm91bmQobykpO3ZhciBnPUlyKGgpLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gcCtpKl99KTtyZXR1cm4gcihmP2cucmV2ZXJzZSgpOmcpfXJldHVybiBlLmRvbWFpbj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odChoKSx1KCkpOnQoKX0sZS5yYW5nZT1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1bK2hbMF0sK2hbMV1dLHUoKSk6bi5zbGljZSgpfSxlLnJhbmdlUm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIG49WytoWzBdLCtoWzFdXSxhPSEwLHUoKX0sZS5iYW5kd2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gb30sZS5zdGVwPWZ1bmN0aW9uKCl7cmV0dXJuIGl9LGUucm91bmQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ISFoLHUoKSk6YX0sZS5wYWRkaW5nPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPU1hdGgubWluKDEsbD0raCksdSgpKTpzfSxlLnBhZGRpbmdJbm5lcj1mdW5jdGlvbihoKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1NYXRoLm1pbigxLGgpLHUoKSk6c30sZS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24oaCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9K2gsdSgpKTpsfSxlLmFsaWduPWZ1bmN0aW9uKGgpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPU1hdGgubWF4KDAsTWF0aC5taW4oMSxoKSksdSgpKTpjfSxlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gUW0odCgpLG4pLnJvdW5kKGEpLnBhZGRpbmdJbm5lcihzKS5wYWRkaW5nT3V0ZXIobCkuYWxpZ24oYyl9LGZpLmFwcGx5KHUoKSxhcmd1bWVudHMpfWZ1bmN0aW9uIEwydChlKXt2YXIgdD1lLmNvcHk7cmV0dXJuIGUucGFkZGluZz1lLnBhZGRpbmdPdXRlcixkZWxldGUgZS5wYWRkaW5nSW5uZXIsZGVsZXRlIGUucGFkZGluZ091dGVyLGUuY29weT1mdW5jdGlvbigpe3JldHVybiBMMnQodCgpKX0sZX1mdW5jdGlvbiB0Zygpe3JldHVybiBMMnQoUW0uYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhZGRpbmdJbm5lcigxKSl9ZnVuY3Rpb24gazJ0KGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlfX1mdW5jdGlvbiBkNShlKXtyZXR1cm4rZX12YXIgUjJ0PVswLDFdO2Z1bmN0aW9uIGlpKGUpe3JldHVybiBlfWZ1bmN0aW9uIGlYKGUsdCl7cmV0dXJuKHQtPWU9K2UpP2Z1bmN0aW9uKHIpe3JldHVybihyLWUpL3R9OmsydChpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIE4ydChlKXt2YXIgdD1lWzBdLHI9ZVtlLmxlbmd0aC0xXSxuO3JldHVybiB0PnImJihuPXQsdD1yLHI9biksZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4ocixpKSl9fWZ1bmN0aW9uIGhNZShlLHQscil7dmFyIG49ZVswXSxpPWVbMV0sbz10WzBdLGE9dFsxXTtyZXR1cm4gaTxuPyhuPWlYKGksbiksbz1yKGEsbykpOihuPWlYKG4saSksbz1yKG8sYSkpLGZ1bmN0aW9uKHMpe3JldHVybiBvKG4ocykpfX1mdW5jdGlvbiBmTWUoZSx0LHIpe3ZhciBuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKS0xLGk9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLGE9LTE7Zm9yKGVbbl08ZVswXSYmKGU9ZS5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrYTxuOylpW2FdPWlYKGVbYV0sZVthKzFdKSxvW2FdPXIodFthXSx0W2ErMV0pO3JldHVybiBmdW5jdGlvbihzKXt2YXIgbD15cyhlLHMsMSxuKS0xO3JldHVybiBvW2xdKGlbbF0ocykpfX1mdW5jdGlvbiBxaChlLHQpe3JldHVybiB0LmRvbWFpbihlLmRvbWFpbigpKS5yYW5nZShlLnJhbmdlKCkpLmludGVycG9sYXRlKGUuaW50ZXJwb2xhdGUoKSkuY2xhbXAoZS5jbGFtcCgpKS51bmtub3duKGUudW5rbm93bigpKX1mdW5jdGlvbiAkXygpe3ZhciBlPVIydCx0PVIydCxyPW5jLG4saSxvLGE9aWkscyxsLGM7ZnVuY3Rpb24gdSgpe3JldHVybiBzPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoKT4yP2ZNZTpoTWUsbD1jPW51bGwsaH1mdW5jdGlvbiBoKGYpe3JldHVybiBpc05hTihmPStmKT9vOihsfHwobD1zKGUubWFwKG4pLHQscikpKShuKGEoZikpKX1yZXR1cm4gaC5pbnZlcnQ9ZnVuY3Rpb24oZil7cmV0dXJuIGEoaSgoY3x8KGM9cyh0LGUubWFwKG4pLHppKSkpKGYpKSl9LGguZG9tYWluPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVhfLmNhbGwoZixkNSksYT09PWlpfHwoYT1OMnQoZSkpLHUoKSk6ZS5zbGljZSgpfSxoLnJhbmdlPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWxjLmNhbGwoZiksdSgpKTp0LnNsaWNlKCl9LGgucmFuZ2VSb3VuZD1mdW5jdGlvbihmKXtyZXR1cm4gdD1sYy5jYWxsKGYpLHI9cEwsdSgpfSxoLmNsYW1wPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPWY/TjJ0KGUpOmlpLGgpOmEhPT1paX0saC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihmKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1mLHUoKSk6cn0saC51bmtub3duPWZ1bmN0aW9uKGYpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPWYsaCk6b30sZnVuY3Rpb24oZixwKXtyZXR1cm4gbj1mLGk9cCx1KCl9fWZ1bmN0aW9uIG01KGUsdCl7cmV0dXJuICRfKCkoZSx0KX1mdW5jdGlvbiBsOChlLHQscixuKXt2YXIgaT10bChlLHQsciksbztzd2l0Y2gobj1McChuPT1udWxsPyIsZiI6biksbi50eXBlKXtjYXNlInMiOnt2YXIgYT1NYXRoLm1heChNYXRoLmFicyhlKSxNYXRoLmFicyh0KSk7cmV0dXJuIG4ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obz1payhpLGEpKSYmKG4ucHJlY2lzaW9uPW8pLEdFKG4sYSl9Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6e24ucHJlY2lzaW9uPT1udWxsJiYhaXNOYU4obz1vayhpLE1hdGgubWF4KE1hdGguYWJzKGUpLE1hdGguYWJzKHQpKSkpJiYobi5wcmVjaXNpb249by0obi50eXBlPT09ImUiKSk7YnJlYWt9Y2FzZSJmIjpjYXNlIiUiOntuLnByZWNpc2lvbj09bnVsbCYmIWlzTmFOKG89bmsoaSkpJiYobi5wcmVjaXNpb249by0obi50eXBlPT09IiUiKSoyKTticmVha319cmV0dXJuIHhuKG4pfWZ1bmN0aW9uIGlsKGUpe3ZhciB0PWUuZG9tYWluO3JldHVybiBlLnRpY2tzPWZ1bmN0aW9uKHIpe3ZhciBuPXQoKTtyZXR1cm4gYWIoblswXSxuW24ubGVuZ3RoLTFdLHI9PW51bGw/MTA6cil9LGUudGlja0Zvcm1hdD1mdW5jdGlvbihyLG4pe3ZhciBpPXQoKTtyZXR1cm4gbDgoaVswXSxpW2kubGVuZ3RoLTFdLHI9PW51bGw/MTA6cixuKX0sZS5uaWNlPWZ1bmN0aW9uKHIpe3I9PW51bGwmJihyPTEwKTt2YXIgbj10KCksaT0wLG89bi5sZW5ndGgtMSxhPW5baV0scz1uW29dLGw7cmV0dXJuIHM8YSYmKGw9YSxhPXMscz1sLGw9aSxpPW8sbz1sKSxsPXhfKGEscyxyKSxsPjA/KGE9TWF0aC5mbG9vcihhL2wpKmwscz1NYXRoLmNlaWwocy9sKSpsLGw9eF8oYSxzLHIpKTpsPDAmJihhPU1hdGguY2VpbChhKmwpL2wscz1NYXRoLmZsb29yKHMqbCkvbCxsPXhfKGEscyxyKSksbD4wPyhuW2ldPU1hdGguZmxvb3IoYS9sKSpsLG5bb109TWF0aC5jZWlsKHMvbCkqbCx0KG4pKTpsPDAmJihuW2ldPU1hdGguY2VpbChhKmwpL2wsbltvXT1NYXRoLmZsb29yKHMqbCkvbCx0KG4pKSxlfSxlfWZ1bmN0aW9uIHpuKCl7dmFyIGU9bTUoaWksaWkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSx6bigpKX0sZmkuYXBwbHkoZSxhcmd1bWVudHMpLGlsKGUpfWZ1bmN0aW9uIGM4KGUpe3ZhciB0O2Z1bmN0aW9uIHIobil7cmV0dXJuIGlzTmFOKG49K24pP3Q6bn1yZXR1cm4gci5pbnZlcnQ9cixyLmRvbWFpbj1yLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPVhfLmNhbGwobixkNSkscik6ZS5zbGljZSgpfSxyLnVua25vd249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gYzgoZSkudW5rbm93bih0KX0sZT1hcmd1bWVudHMubGVuZ3RoP1hfLmNhbGwoZSxkNSk6WzAsMV0saWwocil9ZnVuY3Rpb24gdTgoZSx0KXtlPWUuc2xpY2UoKTt2YXIgcj0wLG49ZS5sZW5ndGgtMSxpPWVbcl0sbz1lW25dLGE7cmV0dXJuIG88aSYmKGE9cixyPW4sbj1hLGE9aSxpPW8sbz1hKSxlW3JdPXQuZmxvb3IoaSksZVtuXT10LmNlaWwobyksZX1mdW5jdGlvbiBEMnQoZSl7cmV0dXJuIE1hdGgubG9nKGUpfWZ1bmN0aW9uIE8ydChlKXtyZXR1cm4gTWF0aC5leHAoZSl9ZnVuY3Rpb24gcE1lKGUpe3JldHVybi1NYXRoLmxvZygtZSl9ZnVuY3Rpb24gZE1lKGUpe3JldHVybi1NYXRoLmV4cCgtZSl9ZnVuY3Rpb24gbU1lKGUpe3JldHVybiBpc0Zpbml0ZShlKT8rKCIxZSIrZSk6ZTwwPzA6ZX1mdW5jdGlvbiBnTWUoZSl7cmV0dXJuIGU9PT0xMD9tTWU6ZT09PU1hdGguRT9NYXRoLmV4cDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coZSx0KX19ZnVuY3Rpb24gX01lKGUpe3JldHVybiBlPT09TWF0aC5FP01hdGgubG9nOmU9PT0xMCYmTWF0aC5sb2cxMHx8ZT09PTImJk1hdGgubG9nMnx8KGU9TWF0aC5sb2coZSksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL2V9KX1mdW5jdGlvbiB6MnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybi1lKC10KX19ZnVuY3Rpb24gZzUoZSl7dmFyIHQ9ZShEMnQsTzJ0KSxyPXQuZG9tYWluLG49MTAsaSxvO2Z1bmN0aW9uIGEoKXtyZXR1cm4gaT1fTWUobiksbz1nTWUobikscigpWzBdPDA/KGk9ejJ0KGkpLG89ejJ0KG8pLGUocE1lLGRNZSkpOmUoRDJ0LE8ydCksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPStzLGEoKSk6bn0sdC5kb21haW49ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHIocyksYSgpKTpyKCl9LHQudGlja3M9ZnVuY3Rpb24ocyl7dmFyIGw9cigpLGM9bFswXSx1PWxbbC5sZW5ndGgtMV0saDsoaD11PGMpJiYoZj1jLGM9dSx1PWYpO3ZhciBmPWkoYykscD1pKHUpLGQsZyxfLHk9cz09bnVsbD8xMDorcyx4PVtdO2lmKCEobiUxKSYmcC1mPHkpe2lmKGY9TWF0aC5yb3VuZChmKS0xLHA9TWF0aC5yb3VuZChwKSsxLGM+MCl7Zm9yKDtmPHA7KytmKWZvcihnPTEsZD1vKGYpO2c8bjsrK2cpaWYoXz1kKmcsIShfPGMpKXtpZihfPnUpYnJlYWs7eC5wdXNoKF8pfX1lbHNlIGZvcig7ZjxwOysrZilmb3IoZz1uLTEsZD1vKGYpO2c+PTE7LS1nKWlmKF89ZCpnLCEoXzxjKSl7aWYoXz51KWJyZWFrO3gucHVzaChfKX19ZWxzZSB4PWFiKGYscCxNYXRoLm1pbihwLWYseSkpLm1hcChvKTtyZXR1cm4gaD94LnJldmVyc2UoKTp4fSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24ocyxsKXtpZihsPT1udWxsJiYobD1uPT09MTA/Ii4wZSI6IiwiKSx0eXBlb2YgbCE9ImZ1bmN0aW9uIiYmKGw9eG4obCkpLHM9PT0xLzApcmV0dXJuIGw7cz09bnVsbCYmKHM9MTApO3ZhciBjPU1hdGgubWF4KDEsbipzL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgaD11L28oTWF0aC5yb3VuZChpKHUpKSk7cmV0dXJuIGgqbjxuLS41JiYoaCo9biksaDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIHIodTgocigpLHtmbG9vcjpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmZsb29yKGkocykpKX0sY2VpbDpmdW5jdGlvbihzKXtyZXR1cm4gbyhNYXRoLmNlaWwoaShzKSkpfX0pKX0sdH1mdW5jdGlvbiBjYygpe3ZhciBlPWc1KCRfKCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxjYygpKS5iYXNlKGUuYmFzZSgpKX0sZmkuYXBwbHkoZSxhcmd1bWVudHMpLGV9ZnVuY3Rpb24gRjJ0KGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zaWduKHQpKk1hdGgubG9nMXAoTWF0aC5hYnModC9lKSl9fWZ1bmN0aW9uIEIydChlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc2lnbih0KSpNYXRoLmV4cG0xKE1hdGguYWJzKHQpKSplfX1mdW5jdGlvbiBfNShlKXt2YXIgdD0xLHI9ZShGMnQodCksQjJ0KHQpKTtyZXR1cm4gci5jb25zdGFudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKEYydCh0PStuKSxCMnQodCkpOnR9LGlsKHIpfWZ1bmN0aW9uIGg4KCl7dmFyIGU9XzUoJF8oKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBxaChlLGg4KCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LGZpLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBIMnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LU1hdGgucG93KC10LGUpOk1hdGgucG93KHQsZSl9fWZ1bmN0aW9uIHlNZShlKXtyZXR1cm4gZTwwPy1NYXRoLnNxcnQoLWUpOk1hdGguc3FydChlKX1mdW5jdGlvbiB2TWUoZSl7cmV0dXJuIGU8MD8tZSplOmUqZX1mdW5jdGlvbiB5NShlKXt2YXIgdD1lKGlpLGlpKSxyPTE7ZnVuY3Rpb24gbigpe3JldHVybiByPT09MT9lKGlpLGlpKTpyPT09LjU/ZSh5TWUsdk1lKTplKEgydChyKSxIMnQoMS9yKSl9cmV0dXJuIHQuZXhwb25lbnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K2ksbigpKTpyfSxpbCh0KX1mdW5jdGlvbiBLXygpe3ZhciBlPXk1KCRfKCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gcWgoZSxLXygpKS5leHBvbmVudChlLmV4cG9uZW50KCkpfSxmaS5hcHBseShlLGFyZ3VtZW50cyksZX1mdW5jdGlvbiBWMnQoKXtyZXR1cm4gS18uYXBwbHkobnVsbCxhcmd1bWVudHMpLmV4cG9uZW50KC41KX1mdW5jdGlvbiBlZygpe3ZhciBlPVtdLHQ9W10scj1bXSxuO2Z1bmN0aW9uIGkoKXt2YXIgYT0wLHM9TWF0aC5tYXgoMSx0Lmxlbmd0aCk7Zm9yKHI9bmV3IEFycmF5KHMtMSk7KythPHM7KXJbYS0xXT1zYShlLGEvcyk7cmV0dXJuIG99ZnVuY3Rpb24gbyhhKXtyZXR1cm4gaXNOYU4oYT0rYSk/bjp0W3lzKHIsYSldfXJldHVybiBvLmludmVydEV4dGVudD1mdW5jdGlvbihhKXt2YXIgcz10LmluZGV4T2YoYSk7cmV0dXJuIHM8MD9bTmFOLE5hTl06W3M+MD9yW3MtMV06ZVswXSxzPHIubGVuZ3RoP3Jbc106ZVtlLmxlbmd0aC0xXV19LG8uZG9tYWluPWZ1bmN0aW9uKGEpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIHM9MCxsPWEubGVuZ3RoLGM7czxsOysrcyljPWFbc10sYyE9bnVsbCYmIWlzTmFOKGM9K2MpJiZlLnB1c2goYyk7cmV0dXJuIGUuc29ydChvYSksaSgpfSxvLnJhbmdlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWxjLmNhbGwoYSksaSgpKTp0LnNsaWNlKCl9LG8udW5rbm93bj1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1hLG8pOm59LG8ucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHIuc2xpY2UoKX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGVnKCkuZG9tYWluKGUpLnJhbmdlKHQpLnVua25vd24obil9LGZpLmFwcGx5KG8sYXJndW1lbnRzKX1mdW5jdGlvbiBxYigpe3ZhciBlPTAsdD0xLHI9MSxuPVsuNV0saT1bMCwxXSxvO2Z1bmN0aW9uIGEobCl7cmV0dXJuIGw8PWw/aVt5cyhuLGwsMCxyKV06b31mdW5jdGlvbiBzKCl7dmFyIGw9LTE7Zm9yKG49bmV3IEFycmF5KHIpOysrbDxyOyluW2xdPSgobCsxKSp0LShsLXIpKmUpLyhyKzEpO3JldHVybiBhfXJldHVybiBhLmRvbWFpbj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rbFswXSx0PStsWzFdLHMoKSk6W2UsdF19LGEucmFuZ2U9ZnVuY3Rpb24obCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9KGk9bGMuY2FsbChsKSkubGVuZ3RoLTEscygpKTppLnNsaWNlKCl9LGEuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGwpe3ZhciBjPWkuaW5kZXhPZihsKTtyZXR1cm4gYzwwP1tOYU4sTmFOXTpjPDE/W2UsblswXV06Yz49cj9bbltyLTFdLHRdOltuW2MtMV0sbltjXV19LGEudW5rbm93bj1mdW5jdGlvbihsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmKG89bCksYX0sYS50aHJlc2hvbGRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4uc2xpY2UoKX0sYS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHFiKCkuZG9tYWluKFtlLHRdKS5yYW5nZShpKS51bmtub3duKG8pfSxmaS5hcHBseShpbChhKSxhcmd1bWVudHMpfWZ1bmN0aW9uIGY4KCl7dmFyIGU9Wy41XSx0PVswLDFdLHIsbj0xO2Z1bmN0aW9uIGkobyl7cmV0dXJuIG88PW8/dFt5cyhlLG8sMCxuKV06cn1yZXR1cm4gaS5kb21haW49ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bGMuY2FsbChvKSxuPU1hdGgubWluKGUubGVuZ3RoLHQubGVuZ3RoLTEpLGkpOmUuc2xpY2UoKX0saS5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1sYy5jYWxsKG8pLG49TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgtMSksaSk6dC5zbGljZSgpfSxpLmludmVydEV4dGVudD1mdW5jdGlvbihvKXt2YXIgYT10LmluZGV4T2Yobyk7cmV0dXJuW2VbYS0xXSxlW2FdXX0saS51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8saSk6cn0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGY4KCkuZG9tYWluKGUpLnJhbmdlKHQpLnVua25vd24ocil9LGZpLmFwcGx5KGksYXJndW1lbnRzKX12YXIgb1g9bmV3IERhdGUsYVg9bmV3IERhdGU7ZnVuY3Rpb24gYnIoZSx0LHIsbil7ZnVuY3Rpb24gaShvKXtyZXR1cm4gZShvPWFyZ3VtZW50cy5sZW5ndGg9PT0wP25ldyBEYXRlOm5ldyBEYXRlKCtvKSksb31yZXR1cm4gaS5mbG9vcj1mdW5jdGlvbihvKXtyZXR1cm4gZShvPW5ldyBEYXRlKCtvKSksb30saS5jZWlsPWZ1bmN0aW9uKG8pe3JldHVybiBlKG89bmV3IERhdGUoby0xKSksdChvLDEpLGUobyksb30saS5yb3VuZD1mdW5jdGlvbihvKXt2YXIgYT1pKG8pLHM9aS5jZWlsKG8pO3JldHVybiBvLWE8cy1vP2E6c30saS5vZmZzZXQ9ZnVuY3Rpb24obyxhKXtyZXR1cm4gdChvPW5ldyBEYXRlKCtvKSxhPT1udWxsPzE6TWF0aC5mbG9vcihhKSksb30saS5yYW5nZT1mdW5jdGlvbihvLGEscyl7dmFyIGw9W10sYztpZihvPWkuY2VpbChvKSxzPXM9PW51bGw/MTpNYXRoLmZsb29yKHMpLCEobzxhKXx8IShzPjApKXJldHVybiBsO2RvIGwucHVzaChjPW5ldyBEYXRlKCtvKSksdChvLHMpLGUobyk7d2hpbGUoYzxvJiZvPGEpO3JldHVybiBsfSxpLmZpbHRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYnIoZnVuY3Rpb24oYSl7aWYoYT49YSlmb3IoO2UoYSksIW8oYSk7KWEuc2V0VGltZShhLTEpfSxmdW5jdGlvbihhLHMpe2lmKGE+PWEpaWYoczwwKWZvcig7KytzPD0wOylmb3IoO3QoYSwtMSksIW8oYSk7KTtlbHNlIGZvcig7LS1zPj0wOylmb3IoO3QoYSwxKSwhbyhhKTspO30pfSxyJiYoaS5jb3VudD1mdW5jdGlvbihvLGEpe3JldHVybiBvWC5zZXRUaW1lKCtvKSxhWC5zZXRUaW1lKCthKSxlKG9YKSxlKGFYKSxNYXRoLmZsb29yKHIob1gsYVgpKX0saS5ldmVyeT1mdW5jdGlvbihvKXtyZXR1cm4gbz1NYXRoLmZsb29yKG8pLCFpc0Zpbml0ZShvKXx8IShvPjApP251bGw6bz4xP2kuZmlsdGVyKG4/ZnVuY3Rpb24oYSl7cmV0dXJuIG4oYSklbz09PTB9OmZ1bmN0aW9uKGEpe3JldHVybiBpLmNvdW50KDAsYSklbz09PTB9KTppfSksaX12YXIgcDg9YnIoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LWV9KTtwOC5ldmVyeT1mdW5jdGlvbihlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLCFpc0Zpbml0ZShlKXx8IShlPjApP251bGw6ZT4xP2JyKGZ1bmN0aW9uKHQpe3Quc2V0VGltZShNYXRoLmZsb29yKHQvZSkqZSl9LGZ1bmN0aW9uKHQscil7dC5zZXRUaW1lKCt0K3IqZSl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdCkvZX0pOnA4fTt2YXIgWl89cDgsc1g9cDgucmFuZ2U7dmFyIEpfPTFlMyx1Yz02ZTQsR2I9MzZlNSxkOD04NjRlNSxtOD02MDQ4ZTU7dmFyIFUydD1icihmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCpKXyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvSl99LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldFVUQ1NlY29uZHMoKX0pLFFfPVUydCxsWD1VMnQucmFuZ2U7dmFyIHEydD1icihmdW5jdGlvbihlKXtlLnNldFRpbWUoZS1lLmdldE1pbGxpc2Vjb25kcygpLWUuZ2V0U2Vjb25kcygpKkpfKX0sZnVuY3Rpb24oZSx0KXtlLnNldFRpbWUoK2UrdCp1Yyl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQtZSkvdWN9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldE1pbnV0ZXMoKX0pLGc4PXEydCxHMnQ9cTJ0LnJhbmdlO3ZhciBXMnQ9YnIoZnVuY3Rpb24oZSl7ZS5zZXRUaW1lKGUtZS5nZXRNaWxsaXNlY29uZHMoKS1lLmdldFNlY29uZHMoKSpKXy1lLmdldE1pbnV0ZXMoKSp1Yyl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqR2IpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0difSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRIb3VycygpfSksXzg9VzJ0LFkydD1XMnQucmFuZ2U7dmFyIGoydD1icihmdW5jdGlvbihlKXtlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RGF0ZShlLmdldERhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lLSh0LmdldFRpbWV6b25lT2Zmc2V0KCktZS5nZXRUaW1lem9uZU9mZnNldCgpKSp1YykvZDh9LGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldERhdGUoKS0xfSksdHk9ajJ0LFgydD1qMnQucmFuZ2U7ZnVuY3Rpb24gZXkoZSl7cmV0dXJuIGJyKGZ1bmN0aW9uKHQpe3Quc2V0RGF0ZSh0LmdldERhdGUoKS0odC5nZXREYXkoKSs3LWUpJTcpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpK3IqNyl9LGZ1bmN0aW9uKHQscil7cmV0dXJuKHItdC0oci5nZXRUaW1lem9uZU9mZnNldCgpLXQuZ2V0VGltZXpvbmVPZmZzZXQoKSkqdWMpL204fSl9dmFyIHJnPWV5KDApLHJ5PWV5KDEpLGNYPWV5KDIpLHVYPWV5KDMpLHpwPWV5KDQpLGhYPWV5KDUpLGZYPWV5KDYpLHBYPXJnLnJhbmdlLCQydD1yeS5yYW5nZSxLMnQ9Y1gucmFuZ2UsWjJ0PXVYLnJhbmdlLEoydD16cC5yYW5nZSxRMnQ9aFgucmFuZ2UsdHd0PWZYLnJhbmdlO3ZhciBld3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXREYXRlKDEpLGUuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRNb250aChlLmdldE1vbnRoKCkrdCl9LGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuZ2V0TW9udGgoKS1lLmdldE1vbnRoKCkrKHQuZ2V0RnVsbFllYXIoKS1lLmdldEZ1bGxZZWFyKCkpKjEyfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRNb250aCgpfSkseTg9ZXd0LHJ3dD1ld3QucmFuZ2U7dmFyIGRYPWJyKGZ1bmN0aW9uKGUpe2Uuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0RnVsbFllYXIoZS5nZXRGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldEZ1bGxZZWFyKCktZS5nZXRGdWxsWWVhcigpfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpfSk7ZFguZXZlcnk9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzRmluaXRlKGU9TWF0aC5mbG9vcihlKSl8fCEoZT4wKT9udWxsOmJyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvZSkqZSksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQscil7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrciplKX0pfTt2YXIgR2g9ZFgsbnd0PWRYLnJhbmdlO3ZhciBpd3Q9YnIoZnVuY3Rpb24oZSl7ZS5zZXRVVENTZWNvbmRzKDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqdWMpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL3VjfSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENNaW51dGVzKCl9KSx2OD1pd3Qsb3d0PWl3dC5yYW5nZTt2YXIgYXd0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDTWludXRlcygwLDAsMCl9LGZ1bmN0aW9uKGUsdCl7ZS5zZXRUaW1lKCtlK3QqR2IpfSxmdW5jdGlvbihlLHQpe3JldHVybih0LWUpL0difSxmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRVVENIb3VycygpfSkseDg9YXd0LHN3dD1hd3QucmFuZ2U7dmFyIGx3dD1icihmdW5jdGlvbihlKXtlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDRGF0ZShlLmdldFVUQ0RhdGUoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4odC1lKS9kOH0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRGF0ZSgpLTF9KSxueT1sd3QsY3d0PWx3dC5yYW5nZTtmdW5jdGlvbiBpeShlKXtyZXR1cm4gYnIoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpLSh0LmdldFVUQ0RheSgpKzctZSklNyksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxyKXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCkrcio3KX0sZnVuY3Rpb24odCxyKXtyZXR1cm4oci10KS9tOH0pfXZhciBuZz1peSgwKSxveT1peSgxKSxtWD1peSgyKSxnWD1peSgzKSxGcD1peSg0KSxfWD1peSg1KSx5WD1peSg2KSx2WD1uZy5yYW5nZSx1d3Q9b3kucmFuZ2UsaHd0PW1YLnJhbmdlLGZ3dD1nWC5yYW5nZSxwd3Q9RnAucmFuZ2UsZHd0PV9YLnJhbmdlLG13dD15WC5yYW5nZTt2YXIgZ3d0PWJyKGZ1bmN0aW9uKGUpe2Uuc2V0VVRDRGF0ZSgxKSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihlLHQpe2Uuc2V0VVRDTW9udGgoZS5nZXRVVENNb250aCgpK3QpfSxmdW5jdGlvbihlLHQpe3JldHVybiB0LmdldFVUQ01vbnRoKCktZS5nZXRVVENNb250aCgpKyh0LmdldFVUQ0Z1bGxZZWFyKCktZS5nZXRVVENGdWxsWWVhcigpKSoxMn0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDTW9udGgoKX0pLGI4PWd3dCxfd3Q9Z3d0LnJhbmdlO3ZhciB4WD1icihmdW5jdGlvbihlKXtlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24oZSx0KXtlLnNldFVUQ0Z1bGxZZWFyKGUuZ2V0VVRDRnVsbFllYXIoKSt0KX0sZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpLWUuZ2V0VVRDRnVsbFllYXIoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0VVRDRnVsbFllYXIoKX0pO3hYLmV2ZXJ5PWZ1bmN0aW9uKGUpe3JldHVybiFpc0Zpbml0ZShlPU1hdGguZmxvb3IoZSkpfHwhKGU+MCk/bnVsbDpicihmdW5jdGlvbih0KXt0LnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IodC5nZXRVVENGdWxsWWVhcigpL2UpKmUpLHQuc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LHIpe3Quc2V0VVRDRnVsbFllYXIodC5nZXRVVENGdWxsWWVhcigpK3IqZSl9KX07dmFyIFdoPXhYLHl3dD14WC5yYW5nZTtmdW5jdGlvbiBiWChlKXtpZigwPD1lLnkmJmUueTwxMDApe3ZhciB0PW5ldyBEYXRlKC0xLGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihlLnkpLHR9cmV0dXJuIG5ldyBEYXRlKGUueSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCl9ZnVuY3Rpb24gd1goZSl7aWYoMDw9ZS55JiZlLnk8MTAwKXt2YXIgdD1uZXcgRGF0ZShEYXRlLlVUQygtMSxlLm0sZS5kLGUuSCxlLk0sZS5TLGUuTCkpO3JldHVybiB0LnNldFVUQ0Z1bGxZZWFyKGUueSksdH1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZS55LGUubSxlLmQsZS5ILGUuTSxlLlMsZS5MKSl9ZnVuY3Rpb24gdjUoZSx0LHIpe3JldHVybnt5OmUsbTp0LGQ6cixIOjAsTTowLFM6MCxMOjB9fWZ1bmN0aW9uIHc1KGUpe3ZhciB0PWUuZGF0ZVRpbWUscj1lLmRhdGUsbj1lLnRpbWUsaT1lLnBlcmlvZHMsbz1lLmRheXMsYT1lLnNob3J0RGF5cyxzPWUubW9udGhzLGw9ZS5zaG9ydE1vbnRocyxjPXg1KGkpLHU9YjUoaSksaD14NShvKSxmPWI1KG8pLHA9eDUoYSksZD1iNShhKSxnPXg1KHMpLF89YjUocykseT14NShsKSx4PWI1KGwpLGI9e2E6VyxBOlosYjpydCxCOm90LGM6bnVsbCxkOk13dCxlOk13dCxmOlVNZSxnOkpNZSxHOnRFZSxIOkJNZSxJOkhNZSxqOlZNZSxMOlB3dCxtOnFNZSxNOkdNZSxwOnN0LHE6U3QsUTpDd3QsczpBd3QsUzpXTWUsdTpZTWUsVTpqTWUsVjpYTWUsdzokTWUsVzpLTWUseDpudWxsLFg6bnVsbCx5OlpNZSxZOlFNZSxaOmVFZSwiJSI6VHd0fSxTPXthOmJ0LEE6TXQsYjpsdCxCOkt0LGM6bnVsbCxkOkV3dCxlOkV3dCxmOm9FZSxnOm1FZSxHOl9FZSxIOnJFZSxJOm5FZSxqOmlFZSxMOkx3dCxtOmFFZSxNOnNFZSxwOl90LHE6Y3QsUTpDd3QsczpBd3QsUzpsRWUsdTpjRWUsVTp1RWUsVjpoRWUsdzpmRWUsVzpwRWUseDpudWxsLFg6bnVsbCx5OmRFZSxZOmdFZSxaOnlFZSwiJSI6VHd0fSxDPXthOkIsQTpJLGI6TCxCOlIsYzpGLGQ6d3d0LGU6d3d0LGY6RE1lLGc6Ynd0LEc6eHd0LEg6U3d0LEk6U3d0LGo6TE1lLEw6Tk1lLG06SU1lLE06a01lLHA6RCxxOlBNZSxROnpNZSxzOkZNZSxTOlJNZSx1Ok1NZSxVOkVNZSxWOlRNZSx3OlNNZSxXOkNNZSx4OnosWDpVLHk6Ynd0LFk6eHd0LFo6QU1lLCIlIjpPTWV9O2IueD1QKHIsYiksYi5YPVAobixiKSxiLmM9UCh0LGIpLFMueD1QKHIsUyksUy5YPVAobixTKSxTLmM9UCh0LFMpO2Z1bmN0aW9uIFAoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT1bXSxwdD0tMSxodD0wLHd0PVgubGVuZ3RoLGt0LGllLGVlO2ZvcihkdCBpbnN0YW5jZW9mIERhdGV8fChkdD1uZXcgRGF0ZSgrZHQpKTsrK3B0PHd0OylYLmNoYXJDb2RlQXQocHQpPT09MzcmJihxLnB1c2goWC5zbGljZShodCxwdCkpLChpZT12d3Rba3Q9WC5jaGFyQXQoKytwdCldKSE9bnVsbD9rdD1YLmNoYXJBdCgrK3B0KTppZT1rdD09PSJlIj8iICI6IjAiLChlZT1ldFtrdF0pJiYoa3Q9ZWUoZHQsaWUpKSxxLnB1c2goa3QpLGh0PXB0KzEpO3JldHVybiBxLnB1c2goWC5zbGljZShodCxwdCkpLHEuam9pbigiIil9fWZ1bmN0aW9uIGsoWCxldCl7cmV0dXJuIGZ1bmN0aW9uKGR0KXt2YXIgcT12NSgxOTAwLHZvaWQgMCwxKSxwdD1PKHEsWCxkdCs9IiIsMCksaHQsd3Q7aWYocHQhPWR0Lmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBxKXJldHVybiBuZXcgRGF0ZShxLlEpO2lmKCJzImluIHEpcmV0dXJuIG5ldyBEYXRlKHEucyoxZTMrKCJMImluIHE/cS5MOjApKTtpZihldCYmISgiWiJpbiBxKSYmKHEuWj0wKSwicCJpbiBxJiYocS5IPXEuSCUxMitxLnAqMTIpLHEubT09PXZvaWQgMCYmKHEubT0icSJpbiBxP3EucTowKSwiViJpbiBxKXtpZihxLlY8MXx8cS5WPjUzKXJldHVybiBudWxsOyJ3ImluIHF8fChxLnc9MSksIloiaW4gcT8oaHQ9d1godjUocS55LDAsMSkpLHd0PWh0LmdldFVUQ0RheSgpLGh0PXd0PjR8fHd0PT09MD9veS5jZWlsKGh0KTpveShodCksaHQ9bnkub2Zmc2V0KGh0LChxLlYtMSkqNykscS55PWh0LmdldFVUQ0Z1bGxZZWFyKCkscS5tPWh0LmdldFVUQ01vbnRoKCkscS5kPWh0LmdldFVUQ0RhdGUoKSsocS53KzYpJTcpOihodD1iWCh2NShxLnksMCwxKSksd3Q9aHQuZ2V0RGF5KCksaHQ9d3Q+NHx8d3Q9PT0wP3J5LmNlaWwoaHQpOnJ5KGh0KSxodD10eS5vZmZzZXQoaHQsKHEuVi0xKSo3KSxxLnk9aHQuZ2V0RnVsbFllYXIoKSxxLm09aHQuZ2V0TW9udGgoKSxxLmQ9aHQuZ2V0RGF0ZSgpKyhxLncrNiklNyl9ZWxzZSgiVyJpbiBxfHwiVSJpbiBxKSYmKCJ3ImluIHF8fChxLnc9InUiaW4gcT9xLnUlNzoiVyJpbiBxPzE6MCksd3Q9IloiaW4gcT93WCh2NShxLnksMCwxKSkuZ2V0VVRDRGF5KCk6YlgodjUocS55LDAsMSkpLmdldERheSgpLHEubT0wLHEuZD0iVyJpbiBxPyhxLncrNiklNytxLlcqNy0od3QrNSklNzpxLncrcS5VKjctKHd0KzYpJTcpO3JldHVybiJaImluIHE/KHEuSCs9cS5aLzEwMHwwLHEuTSs9cS5aJTEwMCx3WChxKSk6YlgocSl9fWZ1bmN0aW9uIE8oWCxldCxkdCxxKXtmb3IodmFyIHB0PTAsaHQ9ZXQubGVuZ3RoLHd0PWR0Lmxlbmd0aCxrdCxpZTtwdDxodDspe2lmKHE+PXd0KXJldHVybi0xO2lmKGt0PWV0LmNoYXJDb2RlQXQocHQrKyksa3Q9PT0zNyl7aWYoa3Q9ZXQuY2hhckF0KHB0KyspLGllPUNba3QgaW4gdnd0P2V0LmNoYXJBdChwdCsrKTprdF0sIWllfHwocT1pZShYLGR0LHEpKTwwKXJldHVybi0xfWVsc2UgaWYoa3QhPWR0LmNoYXJDb2RlQXQocSsrKSlyZXR1cm4tMX1yZXR1cm4gcX1mdW5jdGlvbiBEKFgsZXQsZHQpe3ZhciBxPWMuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnA9dVtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCKFgsZXQsZHQpe3ZhciBxPXAuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKFgsZXQsZHQpe3ZhciBxPWguZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLnc9ZltxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKFgsZXQsZHQpe3ZhciBxPXkuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09eFtxWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBSKFgsZXQsZHQpe3ZhciBxPWcuZXhlYyhldC5zbGljZShkdCkpO3JldHVybiBxPyhYLm09X1txWzBdLnRvTG93ZXJDYXNlKCldLGR0K3FbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBGKFgsZXQsZHQpe3JldHVybiBPKFgsdCxldCxkdCl9ZnVuY3Rpb24geihYLGV0LGR0KXtyZXR1cm4gTyhYLHIsZXQsZHQpfWZ1bmN0aW9uIFUoWCxldCxkdCl7cmV0dXJuIE8oWCxuLGV0LGR0KX1mdW5jdGlvbiBXKFgpe3JldHVybiBhW1guZ2V0RGF5KCldfWZ1bmN0aW9uIFooWCl7cmV0dXJuIG9bWC5nZXREYXkoKV19ZnVuY3Rpb24gcnQoWCl7cmV0dXJuIGxbWC5nZXRNb250aCgpXX1mdW5jdGlvbiBvdChYKXtyZXR1cm4gc1tYLmdldE1vbnRoKCldfWZ1bmN0aW9uIHN0KFgpe3JldHVybiBpWysoWC5nZXRIb3VycygpPj0xMildfWZ1bmN0aW9uIFN0KFgpe3JldHVybiAxK35+KFguZ2V0TW9udGgoKS8zKX1mdW5jdGlvbiBidChYKXtyZXR1cm4gYVtYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBNdChYKXtyZXR1cm4gb1tYLmdldFVUQ0RheSgpXX1mdW5jdGlvbiBsdChYKXtyZXR1cm4gbFtYLmdldFVUQ01vbnRoKCldfWZ1bmN0aW9uIEt0KFgpe3JldHVybiBzW1guZ2V0VVRDTW9udGgoKV19ZnVuY3Rpb24gX3QoWCl7cmV0dXJuIGlbKyhYLmdldFVUQ0hvdXJzKCk+PTEyKV19ZnVuY3Rpb24gY3QoWCl7cmV0dXJuIDErfn4oWC5nZXRVVENNb250aCgpLzMpfXJldHVybntmb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsYik7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSxwYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMSk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNGb3JtYXQ6ZnVuY3Rpb24oWCl7dmFyIGV0PVAoWCs9IiIsUyk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fSx1dGNQYXJzZTpmdW5jdGlvbihYKXt2YXIgZXQ9ayhYKz0iIiwhMCk7cmV0dXJuIGV0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFh9LGV0fX19dmFyIHZ3dD17Ii0iOiIiLF86IiAiLDA6IjAifSx4bz0vXlxzKlxkKy8seE1lPS9eJS8sYk1lPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBCcihlLHQscil7dmFyIG49ZTwwPyItIjoiIixpPShuPy1lOmUpKyIiLG89aS5sZW5ndGg7cmV0dXJuIG4rKG88cj9uZXcgQXJyYXkoci1vKzEpLmpvaW4odCkraTppKX1mdW5jdGlvbiB3TWUoZSl7cmV0dXJuIGUucmVwbGFjZShiTWUsIlxcJCYiKX1mdW5jdGlvbiB4NShlKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrZS5tYXAod01lKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gYjUoZSl7Zm9yKHZhciB0PXt9LHI9LTEsbj1lLmxlbmd0aDsrK3I8bjspdFtlW3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIHR9ZnVuY3Rpb24gU01lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE1NZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KGUudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBFTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gVE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIENNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4d3QoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrNCkpO3JldHVybiBuPyhlLnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYnd0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQU1lKGUsdCxyKXt2YXIgbj0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KGUuWj1uWzFdPzA6LShuWzJdKyhuWzNdfHwiMDAiKSkscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8oZS5xPW5bMF0qMy0zLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIElNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUubT1uWzBdLTEscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd3d0KGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5kPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIExNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIsciszKSk7cmV0dXJuIG4/KGUubT0wLGUuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBTd3QoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMikpO3JldHVybiBuPyhlLkg9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga01lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8oZS5NPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJNZShlLHQscil7dmFyIG49eG8uZXhlYyh0LnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KGUuUz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBOTWUoZSx0LHIpe3ZhciBuPXhvLmV4ZWModC5zbGljZShyLHIrMykpO3JldHVybiBuPyhlLkw9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRE1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocixyKzYpKTtyZXR1cm4gbj8oZS5MPU1hdGguZmxvb3IoblswXS8xZTMpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE9NZShlLHQscil7dmFyIG49eE1lLmV4ZWModC5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gek1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRk1lKGUsdCxyKXt2YXIgbj14by5leGVjKHQuc2xpY2UocikpO3JldHVybiBuPyhlLnM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gTXd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gQk1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIEhNZShlLHQpe3JldHVybiBCcihlLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gVk1lKGUsdCl7cmV0dXJuIEJyKDErdHkuY291bnQoR2goZSksZSksdCwzKX1mdW5jdGlvbiBQd3QoZSx0KXtyZXR1cm4gQnIoZS5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIFVNZShlLHQpe3JldHVybiBQd3QoZSx0KSsiMDAwIn1mdW5jdGlvbiBxTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBHTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBXTWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiBZTWUoZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm4gdD09PTA/Nzp0fWZ1bmN0aW9uIGpNZShlLHQpe3JldHVybiBCcihyZy5jb3VudChHaChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gSXd0KGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fHQ9PT0wP3pwKGUpOnpwLmNlaWwoZSl9ZnVuY3Rpb24gWE1lKGUsdCl7cmV0dXJuIGU9SXd0KGUpLEJyKHpwLmNvdW50KEdoKGUpLGUpKyhHaChlKS5nZXREYXkoKT09PTQpLHQsMil9ZnVuY3Rpb24gJE1lKGUpe3JldHVybiBlLmdldERheSgpfWZ1bmN0aW9uIEtNZShlLHQpe3JldHVybiBCcihyeS5jb3VudChHaChlKS0xLGUpLHQsMil9ZnVuY3Rpb24gWk1lKGUsdCl7cmV0dXJuIEJyKGUuZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBKTWUoZSx0KXtyZXR1cm4gZT1Jd3QoZSksQnIoZS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFFNZShlLHQpe3JldHVybiBCcihlLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gdEVlKGUsdCl7dmFyIHI9ZS5nZXREYXkoKTtyZXR1cm4gZT1yPj00fHxyPT09MD96cChlKTp6cC5jZWlsKGUpLEJyKGUuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBlRWUoZSl7dmFyIHQ9ZS5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStCcih0LzYwfDAsIjAiLDIpK0JyKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIEV3dChlLHQpe3JldHVybiBCcihlLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIHJFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiBuRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGlFZShlLHQpe3JldHVybiBCcigxK255LmNvdW50KFdoKGUpLGUpLHQsMyl9ZnVuY3Rpb24gTHd0KGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiBvRWUoZSx0KXtyZXR1cm4gTHd0KGUsdCkrIjAwMCJ9ZnVuY3Rpb24gYUVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gc0VlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gbEVlKGUsdCl7cmV0dXJuIEJyKGUuZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gY0VlKGUpe3ZhciB0PWUuZ2V0VVRDRGF5KCk7cmV0dXJuIHQ9PT0wPzc6dH1mdW5jdGlvbiB1RWUoZSx0KXtyZXR1cm4gQnIobmcuY291bnQoV2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIGt3dChlKXt2YXIgdD1lLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHx0PT09MD9GcChlKTpGcC5jZWlsKGUpfWZ1bmN0aW9uIGhFZShlLHQpe3JldHVybiBlPWt3dChlKSxCcihGcC5jb3VudChXaChlKSxlKSsoV2goZSkuZ2V0VVRDRGF5KCk9PT00KSx0LDIpfWZ1bmN0aW9uIGZFZShlKXtyZXR1cm4gZS5nZXRVVENEYXkoKX1mdW5jdGlvbiBwRWUoZSx0KXtyZXR1cm4gQnIob3kuY291bnQoV2goZSktMSxlKSx0LDIpfWZ1bmN0aW9uIGRFZShlLHQpe3JldHVybiBCcihlLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gbUVlKGUsdCl7cmV0dXJuIGU9a3d0KGUpLEJyKGUuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBnRWUoZSx0KXtyZXR1cm4gQnIoZS5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIF9FZShlLHQpe3ZhciByPWUuZ2V0VVRDRGF5KCk7cmV0dXJuIGU9cj49NHx8cj09PTA/RnAoZSk6RnAuY2VpbChlKSxCcihlLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24geUVlKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBUd3QoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gQ3d0KGUpe3JldHVybitlfWZ1bmN0aW9uIEF3dChlKXtyZXR1cm4gTWF0aC5mbG9vcigrZS8xZTMpfXZhciBXYixTNSxTWCxheSxNNTt3OCh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO2Z1bmN0aW9uIHc4KGUpe3JldHVybiBXYj13NShlKSxTNT1XYi5mb3JtYXQsU1g9V2IucGFyc2UsYXk9V2IudXRjRm9ybWF0LE01PVdiLnV0Y1BhcnNlLFdifXZhciBNWD0iJVktJW0tJWRUJUg6JU06JVMuJUxaIjtmdW5jdGlvbiB2RWUoZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKX12YXIgeEVlPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nP3ZFZTpheShNWCksUnd0PXhFZTtmdW5jdGlvbiBiRWUoZSl7dmFyIHQ9bmV3IERhdGUoZSk7cmV0dXJuIGlzTmFOKHQpP251bGw6dH12YXIgd0VlPStuZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/YkVlOk01KE1YKSxOd3Q9d0VlO3ZhciBFNT0xZTMsVDU9RTUqNjAsQzU9VDUqNjAsQTU9QzUqMjQsU0VlPUE1KjcsRHd0PUE1KjMwLEVYPUE1KjM2NTtmdW5jdGlvbiBNRWUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpfWZ1bmN0aW9uIEVFZShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERhdGU/K2U6K25ldyBEYXRlKCtlKX1mdW5jdGlvbiBTOChlLHQscixuLGksbyxhLHMsbCl7dmFyIGM9bTUoaWksaWkpLHU9Yy5pbnZlcnQsaD1jLmRvbWFpbixmPWwoIi4lTCIpLHA9bCgiOiVTIiksZD1sKCIlSTolTSIpLGc9bCgiJUkgJXAiKSxfPWwoIiVhICVkIikseT1sKCIlYiAlZCIpLHg9bCgiJUIiKSxiPWwoIiVZIiksUz1bW2EsMSxFNV0sW2EsNSw1KkU1XSxbYSwxNSwxNSpFNV0sW2EsMzAsMzAqRTVdLFtvLDEsVDVdLFtvLDUsNSpUNV0sW28sMTUsMTUqVDVdLFtvLDMwLDMwKlQ1XSxbaSwxLEM1XSxbaSwzLDMqQzVdLFtpLDYsNipDNV0sW2ksMTIsMTIqQzVdLFtuLDEsQTVdLFtuLDIsMipBNV0sW3IsMSxTRWVdLFt0LDEsRHd0XSxbdCwzLDMqRHd0XSxbZSwxLEVYXV07ZnVuY3Rpb24gQyhrKXtyZXR1cm4oYShrKTxrP2Y6byhrKTxrP3A6aShrKTxrP2Q6bihrKTxrP2c6dChrKTxrP3Ioayk8az9fOnk6ZShrKTxrP3g6Yikoayl9ZnVuY3Rpb24gUChrLE8sRCxCKXtpZihrPT1udWxsJiYoaz0xMCksdHlwZW9mIGs9PSJudW1iZXIiKXt2YXIgST1NYXRoLmFicyhELU8pL2ssTD1vYihmdW5jdGlvbihSKXtyZXR1cm4gUlsyXX0pLnJpZ2h0KFMsSSk7TD09PVMubGVuZ3RoPyhCPXRsKE8vRVgsRC9FWCxrKSxrPWUpOkw/KEw9U1tJL1NbTC0xXVsyXTxTW0xdWzJdL0k/TC0xOkxdLEI9TFsxXSxrPUxbMF0pOihCPU1hdGgubWF4KHRsKE8sRCxrKSwxKSxrPXMpfXJldHVybiBCPT1udWxsP2s6ay5ldmVyeShCKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEYXRlKHUoaykpfSxjLmRvbWFpbj1mdW5jdGlvbihrKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKFhfLmNhbGwoayxFRWUpKTpoKCkubWFwKE1FZSl9LGMudGlja3M9ZnVuY3Rpb24oayxPKXt2YXIgRD1oKCksQj1EWzBdLEk9RFtELmxlbmd0aC0xXSxMPUk8QixSO3JldHVybiBMJiYoUj1CLEI9SSxJPVIpLFI9UChrLEIsSSxPKSxSPVI/Ui5yYW5nZShCLEkrMSk6W10sTD9SLnJldmVyc2UoKTpSfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oayxPKXtyZXR1cm4gTz09bnVsbD9DOmwoTyl9LGMubmljZT1mdW5jdGlvbihrLE8pe3ZhciBEPWgoKTtyZXR1cm4oaz1QKGssRFswXSxEW0QubGVuZ3RoLTFdLE8pKT9oKHU4KEQsaykpOmN9LGMuY29weT1mdW5jdGlvbigpe3JldHVybiBxaChjLFM4KGUsdCxyLG4saSxvLGEscyxsKSl9LGN9ZnVuY3Rpb24gWWIoKXtyZXR1cm4gZmkuYXBwbHkoUzgoR2gseTgscmcsdHksXzgsZzgsUV8sWl8sUzUpLmRvbWFpbihbbmV3IERhdGUoMmUzLDAsMSksbmV3IERhdGUoMmUzLDAsMildKSxhcmd1bWVudHMpfWZ1bmN0aW9uIE93dCgpe3JldHVybiBmaS5hcHBseShTOChXaCxiOCxuZyxueSx4OCx2OCxRXyxaXyxheSkuZG9tYWluKFtEYXRlLlVUQygyZTMsMCwxKSxEYXRlLlVUQygyZTMsMCwyKV0pLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTTgoKXt2YXIgZT0wLHQ9MSxyLG4saSxvLGE9aWkscz0hMSxsO2Z1bmN0aW9uIGModSl7cmV0dXJuIGlzTmFOKHU9K3UpP2w6YShpPT09MD8uNToodT0obyh1KS1yKSppLHM/TWF0aC5tYXgoMCxNYXRoLm1pbigxLHUpKTp1KSl9cmV0dXJuIGMuZG9tYWluPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW8oZT0rdVswXSksbj1vKHQ9K3VbMV0pLGk9cj09PW4/MDoxLyhuLXIpLGMpOltlLHRdfSxjLmNsYW1wPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSEhdSxjKTpzfSxjLmludGVycG9sYXRvcj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT11LGMpOmF9LGMudW5rbm93bj1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD11LGMpOmx9LGZ1bmN0aW9uKHUpe3JldHVybiBvPXUscj11KGUpLG49dSh0KSxpPXI9PT1uPzA6MS8obi1yKSxjfX1mdW5jdGlvbiBCcChlLHQpe3JldHVybiB0LmRvbWFpbihlLmRvbWFpbigpKS5pbnRlcnBvbGF0b3IoZS5pbnRlcnBvbGF0b3IoKSkuY2xhbXAoZS5jbGFtcCgpKS51bmtub3duKGUudW5rbm93bigpKX1mdW5jdGlvbiBFOCgpe3ZhciBlPWlsKE04KCkoaWkpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsRTgoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUWCgpe3ZhciBlPWc1KE04KCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUWCgpKS5iYXNlKGUuYmFzZSgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIENYKCl7dmFyIGU9XzUoTTgoKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLENYKCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBUOCgpe3ZhciBlPXk1KE04KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxUOCgpKS5leHBvbmVudChlLmV4cG9uZW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gend0KCl7cmV0dXJuIFQ4LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gQzgoKXt2YXIgZT1bXSx0PWlpO2Z1bmN0aW9uIHIobil7aWYoIWlzTmFOKG49K24pKXJldHVybiB0KCh5cyhlLG4pLTEpLyhlLmxlbmd0aC0xKSl9cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKG4pe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlLnNsaWNlKCk7ZT1bXTtmb3IodmFyIGk9MCxvPW4ubGVuZ3RoLGE7aTxvOysraSlhPW5baV0sYSE9bnVsbCYmIWlzTmFOKGE9K2EpJiZlLnB1c2goYSk7cmV0dXJuIGUuc29ydChvYSkscn0sci5pbnRlcnBvbGF0b3I9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQzgodCkuZG9tYWluKGUpfSxzYy5hcHBseShyLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQTgoKXt2YXIgZT0wLHQ9LjUscj0xLG4saSxvLGEscyxsPWlpLGMsdT0hMSxoO2Z1bmN0aW9uIGYocCl7cmV0dXJuIGlzTmFOKHA9K3ApP2g6KHA9LjUrKChwPStjKHApKS1pKSoocDxpP2E6cyksbCh1P01hdGgubWF4KDAsTWF0aC5taW4oMSxwKSk6cCkpfXJldHVybiBmLmRvbWFpbj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jKGU9K3BbMF0pLGk9Yyh0PStwWzFdKSxvPWMocj0rcFsyXSksYT1uPT09aT8wOi41LyhpLW4pLHM9aT09PW8/MDouNS8oby1pKSxmKTpbZSx0LHJdfSxmLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSEhcCxmKTp1fSxmLmludGVycG9sYXRvcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1wLGYpOmx9LGYudW5rbm93bj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1wLGYpOmh9LGZ1bmN0aW9uKHApe3JldHVybiBjPXAsbj1wKGUpLGk9cCh0KSxvPXAociksYT1uPT09aT8wOi41LyhpLW4pLHM9aT09PW8/MDouNS8oby1pKSxmfX1mdW5jdGlvbiBQOCgpe3ZhciBlPWlsKEE4KCkoaWkpKTtyZXR1cm4gZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEJwKGUsUDgoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBBWCgpe3ZhciBlPWc1KEE4KCkpLmRvbWFpbihbLjEsMSwxMF0pO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxBWCgpKS5iYXNlKGUuYmFzZSgpKX0sc2MuYXBwbHkoZSxhcmd1bWVudHMpfWZ1bmN0aW9uIFBYKCl7dmFyIGU9XzUoQTgoKSk7cmV0dXJuIGUuY29weT1mdW5jdGlvbigpe3JldHVybiBCcChlLFBYKCkpLmNvbnN0YW50KGUuY29uc3RhbnQoKSl9LHNjLmFwcGx5KGUsYXJndW1lbnRzKX1mdW5jdGlvbiBJOCgpe3ZhciBlPXk1KEE4KCkpO3JldHVybiBlLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQnAoZSxJOCgpKS5leHBvbmVudChlLmV4cG9uZW50KCkpfSxzYy5hcHBseShlLGFyZ3VtZW50cyl9ZnVuY3Rpb24gRnd0KCl7cmV0dXJuIEk4LmFwcGx5KG51bGwsYXJndW1lbnRzKS5leHBvbmVudCguNSl9ZnVuY3Rpb24gdGUoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLzZ8MCxyPW5ldyBBcnJheSh0KSxuPTA7bjx0OylyW25dPSIjIitlLnNsaWNlKG4qNiwrK24qNik7cmV0dXJuIHJ9dmFyIGpiPXRlKCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2YiKTt2YXIgQnd0PXRlKCI3ZmM5N2ZiZWFlZDRmZGMwODZmZmZmOTkzODZjYjBmMDAyN2ZiZjViMTc2NjY2NjYiKTt2YXIgSHd0PXRlKCIxYjllNzdkOTVmMDI3NTcwYjNlNzI5OGE2NmE2MWVlNmFiMDJhNjc2MWQ2NjY2NjYiKTt2YXIgVnd0PXRlKCJhNmNlZTMxZjc4YjRiMmRmOGEzM2EwMmNmYjlhOTllMzFhMWNmZGJmNmZmZjdmMDBjYWIyZDY2YTNkOWFmZmZmOTliMTU5MjgiKTt2YXIgVXd0PXRlKCJmYmI0YWViM2NkZTNjY2ViYzVkZWNiZTRmZWQ5YTZmZmZmY2NlNWQ4YmRmZGRhZWNmMmYyZjIiKTt2YXIgcXd0PXRlKCJiM2UyY2RmZGNkYWNjYmQ1ZThmNGNhZTRlNmY1YzlmZmYyYWVmMWUyY2NjY2NjY2MiKTt2YXIgR3d0PXRlKCJlNDFhMWMzNzdlYjg0ZGFmNGE5ODRlYTNmZjdmMDBmZmZmMzNhNjU2MjhmNzgxYmY5OTk5OTkiKTt2YXIgV3d0PXRlKCI2NmMyYTVmYzhkNjI4ZGEwY2JlNzhhYzNhNmQ4NTRmZmQ5MmZlNWM0OTRiM2IzYjMiKTt2YXIgWXd0PXRlKCI4ZGQzYzdmZmZmYjNiZWJhZGFmYjgwNzI4MGIxZDNmZGI0NjJiM2RlNjlmY2NkZTVkOWQ5ZDliYzgwYmRjY2ViYzVmZmVkNmYiKTt2YXIgand0PXRlKCI0ZTc5YTdmMjhlMmNlMTU3NTk3NmI3YjI1OWExNGZlZGM5NDlhZjdhYTFmZjlkYTc5Yzc1NWZiYWIwYWIiKTtmdW5jdGlvbiBJZShlKXtyZXR1cm4gY0woZVtlLmxlbmd0aC0xXSl9dmFyIElYPW5ldyBBcnJheSgzKS5jb25jYXQoImQ4YjM2NWY1ZjVmNTVhYjRhYyIsImE2NjExYWRmYzI3ZDgwY2RjMTAxODU3MSIsImE2NjExYWRmYzI3ZGY1ZjVmNTgwY2RjMTAxODU3MSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2M3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWQ4YjM2NWY2ZThjM2Y1ZjVmNWM3ZWFlNTVhYjRhYzAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjhjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZSIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2M3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIsIjU0MzAwNThjNTEwYWJmODEyZGRmYzI3ZGY2ZThjM2Y1ZjVmNWM3ZWFlNTgwY2RjMTM1OTc4ZjAxNjY1ZTAwM2MzMCIpLm1hcCh0ZSksWHd0PUllKElYKTt2YXIgTFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiYWY4ZGMzZjdmN2Y3N2ZiZjdiIiwiN2IzMjk0YzJhNWNmYTZkYmEwMDA4ODM3IiwiN2IzMjk0YzJhNWNmZjdmN2Y3YTZkYmEwMDA4ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzYWY4ZGMzZTdkNGU4ZjdmN2Y3ZDlmMGQzN2ZiZjdiMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3IiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIiwiNDAwMDRiNzYyYTgzOTk3MGFiYzJhNWNmZTdkNGU4ZjdmN2Y3ZDlmMGQzYTZkYmEwNWFhZTYxMWI3ODM3MDA0NDFiIikubWFwKHRlKSwkd3Q9SWUoTFgpO3ZhciBrWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlOWEzYzlmN2Y3ZjdhMWQ3NmEiLCJkMDFjOGJmMWI2ZGFiOGUxODY0ZGFjMjYiLCJkMDFjOGJmMWI2ZGFmN2Y3ZjdiOGUxODY0ZGFjMjYiLCJjNTFiN2RlOWEzYzlmZGUwZWZlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RlOWEzYzlmZGUwZWZmN2Y3ZjdlNmY1ZDBhMWQ3NmE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiLCI4ZTAxNTJjNTFiN2RkZTc3YWVmMWI2ZGFmZGUwZWZmN2Y3ZjdlNmY1ZDBiOGUxODY3ZmJjNDE0ZDkyMjEyNzY0MTkiKS5tYXAodGUpLEt3dD1JZShrWCk7dmFyIFJYPW5ldyBBcnJheSgzKS5jb25jYXQoIjk5OGVjM2Y3ZjdmN2YxYTM0MCIsIjVlM2M5OWIyYWJkMmZkYjg2M2U2NjEwMSIsIjVlM2M5OWIyYWJkMmY3ZjdmN2ZkYjg2M2U2NjEwMSIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODk5OGVjM2Q4ZGFlYmY3ZjdmN2ZlZTBiNmYxYTM0MGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNiIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIsIjJkMDA0YjU0Mjc4ODgwNzNhY2IyYWJkMmQ4ZGFlYmY3ZjdmN2ZlZTBiNmZkYjg2M2UwODIxNGIzNTgwNjdmM2IwOCIpLm1hcCh0ZSksWnd0PUllKFJYKTt2YXIgTlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWY4YTYyZjdmN2Y3NjdhOWNmIiwiY2EwMDIwZjRhNTgyOTJjNWRlMDU3MWIwIiwiY2EwMDIwZjRhNTgyZjdmN2Y3OTJjNWRlMDU3MWIwIiwiYjIxODJiZWY4YTYyZmRkYmM3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZWY4YTYyZmRkYmM3ZjdmN2Y3ZDFlNWYwNjdhOWNmMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIiwiNjcwMDFmYjIxODJiZDY2MDRkZjRhNTgyZmRkYmM3ZjdmN2Y3ZDFlNWYwOTJjNWRlNDM5M2MzMjE2NmFjMDUzMDYxIikubWFwKHRlKSxKd3Q9SWUoTlgpO3ZhciBEWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZjhhNjJmZmZmZmY5OTk5OTkiLCJjYTAwMjBmNGE1ODJiYWJhYmE0MDQwNDAiLCJjYTAwMjBmNGE1ODJmZmZmZmZiYWJhYmE0MDQwNDAiLCJiMjE4MmJlZjhhNjJmZGRiYzdlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJlZjhhNjJmZGRiYzdmZmZmZmZlMGUwZTA5OTk5OTk0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCJiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiLCI2NzAwMWZiMjE4MmJkNjYwNGRmNGE1ODJmZGRiYzdmZmZmZmZlMGUwZTBiYWJhYmE4Nzg3ODc0ZDRkNGQxYTFhMWEiKS5tYXAodGUpLFF3dD1JZShEWCk7dmFyIE9YPW5ldyBBcnJheSgzKS5jb25jYXQoImZjOGQ1OWZmZmZiZjkxYmZkYiIsImQ3MTkxY2ZkYWU2MWFiZDllOTJjN2JiNiIsImQ3MTkxY2ZkYWU2MWZmZmZiZmFiZDllOTJjN2JiNiIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2ZjOGQ1OWZlZTA5MGZmZmZiZmUwZjNmODkxYmZkYjQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNCIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIsImE1MDAyNmQ3MzAyN2Y0NmQ0M2ZkYWU2MWZlZTA5MGZmZmZiZmUwZjNmOGFiZDllOTc0YWRkMTQ1NzViNDMxMzY5NSIpLm1hcCh0ZSksdFN0PUllKE9YKTt2YXIgelg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmM4ZDU5ZmZmZmJmOTFjZjYwIiwiZDcxOTFjZmRhZTYxYTZkOTZhMWE5NjQxIiwiZDcxOTFjZmRhZTYxZmZmZmJmYTZkOTZhMWE5NjQxIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZmM4ZDU5ZmVlMDhiZmZmZmJmZDllZjhiOTFjZjYwMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwIiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IiwiYTUwMDI2ZDczMDI3ZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZDllZjhiYTZkOTZhNjZiZDYzMWE5ODUwMDA2ODM3IikubWFwKHRlKSxlU3Q9SWUoelgpO3ZhciBGWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmYzhkNTlmZmZmYmY5OWQ1OTQiLCJkNzE5MWNmZGFlNjFhYmRkYTQyYjgzYmEiLCJkNzE5MWNmZGFlNjFmZmZmYmZhYmRkYTQyYjgzYmEiLCJkNTNlNGZmYzhkNTlmZWUwOGJlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmYzhkNTlmZWUwOGJmZmZmYmZlNmY1OTg5OWQ1OTQzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiLCI5ZTAxNDJkNTNlNGZmNDZkNDNmZGFlNjFmZWUwOGJmZmZmYmZlNmY1OThhYmRkYTQ2NmMyYTUzMjg4YmQ1ZTRmYTIiKS5tYXAodGUpLHJTdD1JZShGWCk7dmFyIEJYPW5ldyBBcnJheSgzKS5jb25jYXQoImU1ZjVmOTk5ZDhjOTJjYTI1ZiIsImVkZjhmYmIyZTJlMjY2YzJhNDIzOGI0NSIsImVkZjhmYmIyZTJlMjY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDJjYTI1ZjAwNmQyYyIsImVkZjhmYmNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNTgyNCIsImY3ZmNmZGU1ZjVmOWNjZWNlNjk5ZDhjOTY2YzJhNDQxYWU3NjIzOGI0NTAwNmQyYzAwNDQxYiIpLm1hcCh0ZSksblN0PUllKEJYKTt2YXIgSFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTBlY2Y0OWViY2RhODg1NmE3IiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg0MTlkIiwiZWRmOGZiYjNjZGUzOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2ODg1NmE3ODEwZjdjIiwiZWRmOGZiYmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkNmUwMTZiIiwiZjdmY2ZkZTBlY2Y0YmZkM2U2OWViY2RhOGM5NmM2OGM2YmIxODg0MTlkODEwZjdjNGQwMDRiIikubWFwKHRlKSxpU3Q9SWUoSFgpO3ZhciBWWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlMGYzZGJhOGRkYjU0M2EyY2EiLCJmMGY5ZThiYWU0YmM3YmNjYzQyYjhjYmUiLCJmMGY5ZThiYWU0YmM3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0M2EyY2EwODY4YWMiLCJmMGY5ZThjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODU4OWUiLCJmN2ZjZjBlMGYzZGJjY2ViYzVhOGRkYjU3YmNjYzQ0ZWIzZDMyYjhjYmUwODY4YWMwODQwODEiKS5tYXAodGUpLG9TdD1JZShWWCk7dmFyIFVYPW5ldyBBcnJheSgzKS5jb25jYXQoImZlZThjOGZkYmI4NGUzNGEzMyIsImZlZjBkOWZkY2M4YWZjOGQ1OWQ3MzAxZiIsImZlZjBkOWZkY2M4YWZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWUzNGEzM2IzMDAwMCIsImZlZjBkOWZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZjk5MDAwMCIsImZmZjdlY2ZlZThjOGZkZDQ5ZWZkYmI4NGZjOGQ1OWVmNjU0OGQ3MzAxZmIzMDAwMDdmMDAwMCIpLm1hcCh0ZSksYVN0PUllKFVYKTt2YXIgcVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZWNlMmYwYTZiZGRiMWM5MDk5IiwiZjZlZmY3YmRjOWUxNjdhOWNmMDI4MThhIiwiZjZlZmY3YmRjOWUxNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMWM5MDk5MDE2YzU5IiwiZjZlZmY3ZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2NDUwIiwiZmZmN2ZiZWNlMmYwZDBkMWU2YTZiZGRiNjdhOWNmMzY5MGMwMDI4MThhMDE2YzU5MDE0NjM2IikubWFwKHRlKSxzU3Q9SWUocVgpO3ZhciBHWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlY2U3ZjJhNmJkZGIyYjhjYmUiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YwNTcwYjAiLCJmMWVlZjZiZGM5ZTE3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YyYjhjYmUwNDVhOGQiLCJmMWVlZjZkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwMzRlN2IiLCJmZmY3ZmJlY2U3ZjJkMGQxZTZhNmJkZGI3NGE5Y2YzNjkwYzAwNTcwYjAwNDVhOGQwMjM4NTgiKS5tYXAodGUpLGxTdD1JZShHWCk7dmFyIFdYPW5ldyBBcnJheSgzKS5jb25jYXQoImU3ZTFlZmM5OTRjN2RkMWM3NyIsImYxZWVmNmQ3YjVkOGRmNjViMGNlMTI1NiIsImYxZWVmNmQ3YjVkOGRmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGRkMWM3Nzk4MDA0MyIsImYxZWVmNmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1NjkxMDAzZiIsImY3ZjRmOWU3ZTFlZmQ0YjlkYWM5OTRjN2RmNjViMGU3Mjk4YWNlMTI1Njk4MDA0MzY3MDAxZiIpLm1hcCh0ZSksY1N0PUllKFdYKTt2YXIgWVg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmRlMGRkZmE5ZmI1YzUxYjhhIiwiZmVlYmUyZmJiNGI5Zjc2OGExYWUwMTdlIiwiZmVlYmUyZmJiNGI5Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExYzUxYjhhN2EwMTc3IiwiZmVlYmUyZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3IiwiZmZmN2YzZmRlMGRkZmNjNWMwZmE5ZmI1Zjc2OGExZGQzNDk3YWUwMTdlN2EwMTc3NDkwMDZhIikubWFwKHRlKSx1U3Q9SWUoWVgpO3ZhciBqWD1uZXcgQXJyYXkoMykuY29uY2F0KCJlZGY4YjE3ZmNkYmIyYzdmYjgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyMjVlYTgiLCJmZmZmY2NhMWRhYjQ0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQyYzdmYjgyNTM0OTQiLCJmZmZmY2NjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgwYzJjODQiLCJmZmZmZDllZGY4YjFjN2U5YjQ3ZmNkYmI0MWI2YzQxZDkxYzAyMjVlYTgyNTM0OTQwODFkNTgiKS5tYXAodGUpLGhTdD1JZShqWCk7dmFyIFhYPW5ldyBBcnJheSgzKS5jb25jYXQoImY3ZmNiOWFkZGQ4ZTMxYTM1NCIsImZmZmZjY2MyZTY5OTc4YzY3OTIzODQ0MyIsImZmZmZjY2MyZTY5OTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTMxYTM1NDAwNjgzNyIsImZmZmZjY2Q5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNWEzMiIsImZmZmZlNWY3ZmNiOWQ5ZjBhM2FkZGQ4ZTc4YzY3OTQxYWI1ZDIzODQ0MzAwNjgzNzAwNDUyOSIpLm1hcCh0ZSksZlN0PUllKFhYKTt2YXIgJFg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmZmN2JjZmVjNDRmZDk1ZjBlIiwiZmZmZmQ0ZmVkOThlZmU5OTI5Y2M0YzAyIiwiZmZmZmQ0ZmVkOThlZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZDk1ZjBlOTkzNDA0IiwiZmZmZmQ0ZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOGMyZDA0IiwiZmZmZmU1ZmZmN2JjZmVlMzkxZmVjNDRmZmU5OTI5ZWM3MDE0Y2M0YzAyOTkzNDA0NjYyNTA2IikubWFwKHRlKSxwU3Q9SWUoJFgpO3ZhciBLWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZmVkYTBmZWIyNGNmMDNiMjAiLCJmZmZmYjJmZWNjNWNmZDhkM2NlMzFhMWMiLCJmZmZmYjJmZWNjNWNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmMDNiMjBiZDAwMjYiLCJmZmZmYjJmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiMTAwMjYiLCJmZmZmY2NmZmVkYTBmZWQ5NzZmZWIyNGNmZDhkM2NmYzRlMmFlMzFhMWNiZDAwMjY4MDAwMjYiKS5tYXAodGUpLGRTdD1JZShLWCk7dmFyIFpYPW5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcCh0ZSksbVN0PUllKFpYKTt2YXIgSlg9bmV3IEFycmF5KDMpLmNvbmNhdCgiZTVmNWUwYTFkOTliMzFhMzU0IiwiZWRmOGU5YmFlNGIzNzRjNDc2MjM4YjQ1IiwiZWRmOGU5YmFlNGIzNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2MzFhMzU0MDA2ZDJjIiwiZWRmOGU5YzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA1YTMyIiwiZjdmY2Y1ZTVmNWUwYzdlOWMwYTFkOTliNzRjNDc2NDFhYjVkMjM4YjQ1MDA2ZDJjMDA0NDFiIikubWFwKHRlKSxnU3Q9SWUoSlgpO3ZhciBRWD1uZXcgQXJyYXkoMykuY29uY2F0KCJmMGYwZjBiZGJkYmQ2MzYzNjMiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY1MjUyNTIiLCJmN2Y3ZjdjY2NjY2M5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY2MzYzNjMyNTI1MjUiLCJmN2Y3ZjdkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUiLCJmZmZmZmZmMGYwZjBkOWQ5ZDliZGJkYmQ5Njk2OTY3MzczNzM1MjUyNTIyNTI1MjUwMDAwMDAiKS5tYXAodGUpLF9TdD1JZShRWCk7dmFyIHQkPW5ldyBBcnJheSgzKS5jb25jYXQoImVmZWRmNWJjYmRkYzc1NmJiMSIsImYyZjBmN2NiYzllMjllOWFjODZhNTFhMyIsImYyZjBmN2NiYzllMjllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODc1NmJiMTU0Mjc4ZiIsImYyZjBmN2RhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzRhMTQ4NiIsImZjZmJmZGVmZWRmNWRhZGFlYmJjYmRkYzllOWFjODgwN2RiYTZhNTFhMzU0Mjc4ZjNmMDA3ZCIpLm1hcCh0ZSkseVN0PUllKHQkKTt2YXIgZSQ9bmV3IEFycmF5KDMpLmNvbmNhdCgiZmVlMGQyZmM5MjcyZGUyZDI2IiwiZmVlNWQ5ZmNhZTkxZmI2YTRhY2IxODFkIiwiZmVlNWQ5ZmNhZTkxZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZGUyZDI2YTUwZjE1IiwiZmVlNWQ5ZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkOTkwMDBkIiwiZmZmNWYwZmVlMGQyZmNiYmExZmM5MjcyZmI2YTRhZWYzYjJjY2IxODFkYTUwZjE1NjcwMDBkIikubWFwKHRlKSx2U3Q9SWUoZSQpO3ZhciByJD1uZXcgQXJyYXkoMykuY29uY2F0KCJmZWU2Y2VmZGFlNmJlNjU1MGQiLCJmZWVkZGVmZGJlODVmZDhkM2NkOTQ3MDEiLCJmZWVkZGVmZGJlODVmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NlNjU1MGRhNjM2MDMiLCJmZWVkZGVmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDE4YzJkMDQiLCJmZmY1ZWJmZWU2Y2VmZGQwYTJmZGFlNmJmZDhkM2NmMTY5MTNkOTQ4MDFhNjM2MDM3ZjI3MDQiKS5tYXAodGUpLHhTdD1JZShyJCk7ZnVuY3Rpb24gYlN0KGUpe3JldHVybiBlPU1hdGgubWF4KDAsTWF0aC5taW4oMSxlKSksInJnYigiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoLTQuNTQtZSooMzUuMzQtZSooMjM4MS43My1lKig2NDAyLjctZSooNzAyNC43Mi1lKjI3MTAuNTcpKSkpKSkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgzMi40OStlKigxNzAuNzMrZSooNTIuODItZSooMTMxLjQ2LWUqKDE3Ni41OC1lKjY3LjM3KSkpKSkpKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoODEuMjQrZSooNDQyLjM2LWUqKDI0ODIuNDMtZSooNjE2Ny4yNC1lKig2NjE0Ljk0LWUqMjQ3NS42NykpKSkpKSkrIikifXZhciB3U3Q9RV8obGEoMzAwLC41LDApLGxhKC0yNDAsLjUsMSkpO3ZhciBTU3Q9RV8obGEoLTEwMCwuNzUsLjM1KSxsYSg4MCwxLjUsLjgpKSxNU3Q9RV8obGEoMjYwLC43NSwuMzUpLGxhKDgwLDEuNSwuOCkpLEw4PWxhKCk7ZnVuY3Rpb24gRVN0KGUpeyhlPDB8fGU+MSkmJihlLT1NYXRoLmZsb29yKGUpKTt2YXIgdD1NYXRoLmFicyhlLS41KTtyZXR1cm4gTDguaD0zNjAqZS0xMDAsTDgucz0xLjUtMS41KnQsTDgubD0uOC0uOSp0LEw4KyIifXZhciBrOD1jdSgpLFRFZT1NYXRoLlBJLzMsQ0VlPU1hdGguUEkqMi8zO2Z1bmN0aW9uIFRTdChlKXt2YXIgdDtyZXR1cm4gZT0oLjUtZSkqTWF0aC5QSSxrOC5yPTI1NSoodD1NYXRoLnNpbihlKSkqdCxrOC5nPTI1NSoodD1NYXRoLnNpbihlK1RFZSkpKnQsazguYj0yNTUqKHQ9TWF0aC5zaW4oZStDRWUpKSp0LGs4KyIifWZ1bmN0aW9uIENTdChlKXtyZXR1cm4gZT1NYXRoLm1heCgwLE1hdGgubWluKDEsZSkpLCJyZ2IoIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDM0LjYxK2UqKDExNzIuMzMtZSooMTA3OTMuNTYtZSooMzMzMDAuMTItZSooMzgzOTQuNDktZSoxNDgyNS4wNSkpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDIzLjMxK2UqKDU1Ny4zMytlKigxMjI1LjMzLWUqKDM1NzQuOTYtZSooMTA3My43NytlKjcwNy41NikpKSkpKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKDI3LjIrZSooMzIxMS4xLWUqKDE1MzI3Ljk3LWUqKDI3ODE0LWUqKDIyNTY5LjE4LWUqNjgzOC42NikpKSkpKSkrIikifWZ1bmN0aW9uIFI4KGUpe3ZhciB0PWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gZVtNYXRoLm1heCgwLE1hdGgubWluKHQtMSxNYXRoLmZsb29yKHIqdCkpKV19fXZhciBBU3Q9UjgodGUoIjQ0MDE1NDQ0MDI1NjQ1MDQ1NzQ1MDU1OTQ2MDc1YTQ2MDg1YzQ2MGE1ZDQ2MGI1ZTQ3MGQ2MDQ3MGU2MTQ3MTA2MzQ3MTE2NDQ3MTM2NTQ4MTQ2NzQ4MTY2ODQ4MTc2OTQ4MTg2YTQ4MWE2YzQ4MWI2ZDQ4MWM2ZTQ4MWQ2ZjQ4MWY3MDQ4MjA3MTQ4MjE3MzQ4MjM3NDQ4MjQ3NTQ4MjU3NjQ4MjY3NzQ4Mjg3ODQ4Mjk3OTQ3MmE3YTQ3MmM3YTQ3MmQ3YjQ3MmU3YzQ3MmY3ZDQ2MzA3ZTQ2MzI3ZTQ2MzM3ZjQ2MzQ4MDQ1MzU4MTQ1Mzc4MTQ1Mzg4MjQ0Mzk4MzQ0M2E4MzQ0M2I4NDQzM2Q4NDQzM2U4NTQyM2Y4NTQyNDA4NjQyNDE4NjQxNDI4NzQxNDQ4NzQwNDU4ODQwNDY4ODNmNDc4ODNmNDg4OTNlNDk4OTNlNGE4OTNlNGM4YTNkNGQ4YTNkNGU4YTNjNGY4YTNjNTA4YjNiNTE4YjNiNTI4YjNhNTM4YjNhNTQ4YzM5NTU4YzM5NTY4YzM4NTg4YzM4NTk4YzM3NWE4YzM3NWI4ZDM2NWM4ZDM2NWQ4ZDM1NWU4ZDM1NWY4ZDM0NjA4ZDM0NjE4ZDMzNjI4ZDMzNjM4ZDMyNjQ4ZTMyNjU4ZTMxNjY4ZTMxNjc4ZTMxNjg4ZTMwNjk4ZTMwNmE4ZTJmNmI4ZTJmNmM4ZTJlNmQ4ZTJlNmU4ZTJlNmY4ZTJkNzA4ZTJkNzE4ZTJjNzE4ZTJjNzI4ZTJjNzM4ZTJiNzQ4ZTJiNzU4ZTJhNzY4ZTJhNzc4ZTJhNzg4ZTI5Nzk4ZTI5N2E4ZTI5N2I4ZTI4N2M4ZTI4N2Q4ZTI3N2U4ZTI3N2Y4ZTI3ODA4ZTI2ODE4ZTI2ODI4ZTI2ODI4ZTI1ODM4ZTI1ODQ4ZTI1ODU4ZTI0ODY4ZTI0ODc4ZTIzODg4ZTIzODk4ZTIzOGE4ZDIyOGI4ZDIyOGM4ZDIyOGQ4ZDIxOGU4ZDIxOGY4ZDIxOTA4ZDIxOTE4YzIwOTI4YzIwOTI4YzIwOTM4YzFmOTQ4YzFmOTU4YjFmOTY4YjFmOTc4YjFmOTg4YjFmOTk4YTFmOWE4YTFlOWI4YTFlOWM4OTFlOWQ4OTFmOWU4OTFmOWY4ODFmYTA4ODFmYTE4ODFmYTE4NzFmYTI4NzIwYTM4NjIwYTQ4NjIxYTU4NTIxYTY4NTIyYTc4NTIyYTg4NDIzYTk4MzI0YWE4MzI1YWI4MjI1YWM4MjI2YWQ4MTI3YWQ4MTI4YWU4MDI5YWY3ZjJhYjA3ZjJjYjE3ZTJkYjI3ZDJlYjM3YzJmYjQ3YzMxYjU3YjMyYjY3YTM0YjY3OTM1Yjc3OTM3Yjg3ODM4Yjk3NzNhYmE3NjNiYmI3NTNkYmM3NDNmYmM3MzQwYmQ3MjQyYmU3MTQ0YmY3MDQ2YzA2ZjQ4YzE2ZTRhYzE2ZDRjYzI2YzRlYzM2YjUwYzQ2YTUyYzU2OTU0YzU2ODU2YzY2NzU4Yzc2NTVhYzg2NDVjYzg2MzVlYzk2MjYwY2E2MDYzY2I1ZjY1Y2I1ZTY3Y2M1YzY5Y2Q1YjZjY2Q1YTZlY2U1ODcwY2Y1NzczZDA1Njc1ZDA1NDc3ZDE1MzdhZDE1MTdjZDI1MDdmZDM0ZTgxZDM0ZDg0ZDQ0Yjg2ZDU0OTg5ZDU0ODhiZDY0NjhlZDY0NTkwZDc0MzkzZDc0MTk1ZDg0MDk4ZDgzZTliZDkzYzlkZDkzYmEwZGEzOWEyZGEzN2E1ZGIzNmE4ZGIzNGFhZGMzMmFkZGMzMGIwZGQyZmIyZGQyZGI1ZGUyYmI4ZGUyOWJhZGUyOGJkZGYyNmMwZGYyNWMyZGYyM2M1ZTAyMWM4ZTAyMGNhZTExZmNkZTExZGQwZTExY2QyZTIxYmQ1ZTIxYWQ4ZTIxOWRhZTMxOWRkZTMxOGRmZTMxOGUyZTQxOGU1ZTQxOWU3ZTQxOWVhZTUxYWVjZTUxYmVmZTUxY2YxZTUxZGY0ZTYxZWY2ZTYyMGY4ZTYyMWZiZTcyM2ZkZTcyNSIpKSxQU3Q9UjgodGUoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwOTAyMDIwYjAyMDIwZDAzMDMwZjAzMDMxMjA0MDQxNDA1MDQxNjA2MDUxODA2MDUxYTA3MDYxYzA4MDcxZTA5MDcyMDBhMDgyMjBiMDkyNDBjMDkyNjBkMGEyOTBlMGIyYjEwMGIyZDExMGMyZjEyMGQzMTEzMGQzNDE0MGUzNjE1MGUzODE2MGYzYjE4MGYzZDE5MTAzZjFhMTA0MjFjMTA0NDFkMTE0NzFlMTE0OTIwMTE0YjIxMTE0ZTIyMTE1MDI0MTI1MzI1MTI1NTI3MTI1ODI5MTE1YTJhMTE1YzJjMTE1ZjJkMTE2MTJmMTE2MzMxMTE2NTMzMTA2NzM0MTA2OTM2MTA2YjM4MTA2YzM5MGY2ZTNiMGY3MDNkMGY3MTNmMGY3MjQwMGY3NDQyMGY3NTQ0MGY3NjQ1MTA3NzQ3MTA3ODQ5MTA3ODRhMTA3OTRjMTE3YTRlMTE3YjRmMTI3YjUxMTI3YzUyMTM3YzU0MTM3ZDU2MTQ3ZDU3MTU3ZTU5MTU3ZTVhMTY3ZTVjMTY3ZjVkMTc3ZjVmMTg3ZjYwMTg4MDYyMTk4MDY0MWE4MDY1MWE4MDY3MWI4MDY4MWM4MTZhMWM4MTZiMWQ4MTZkMWQ4MTZlMWU4MTcwMWY4MTcyMWY4MTczMjA4MTc1MjE4MTc2MjE4MTc4MjI4MTc5MjI4MjdiMjM4MjdjMjM4MjdlMjQ4MjgwMjU4MjgxMjU4MTgzMjY4MTg0MjY4MTg2Mjc4MTg4Mjc4MTg5Mjg4MThiMjk4MThjMjk4MThlMmE4MTkwMmE4MTkxMmI4MTkzMmI4MDk0MmM4MDk2MmM4MDk4MmQ4MDk5MmQ4MDliMmU3ZjljMmU3ZjllMmY3ZmEwMmY3ZmExMzA3ZWEzMzA3ZWE1MzE3ZWE2MzE3ZGE4MzI3ZGFhMzM3ZGFiMzM3Y2FkMzQ3Y2FlMzQ3YmIwMzU3YmIyMzU3YmIzMzY3YWI1MzY3YWI3Mzc3OWI4Mzc3OWJhMzg3OGJjMzk3OGJkMzk3N2JmM2E3N2MwM2E3NmMyM2I3NWM0M2M3NWM1M2M3NGM3M2Q3M2M4M2U3M2NhM2U3MmNjM2Y3MWNkNDA3MWNmNDA3MGQwNDE2ZmQyNDI2ZmQzNDM2ZWQ1NDQ2ZGQ2NDU2Y2Q4NDU2Y2Q5NDY2YmRiNDc2YWRjNDg2OWRlNDk2OGRmNGE2OGUwNGM2N2UyNGQ2NmUzNGU2NWU0NGY2NGU1NTA2NGU3NTI2M2U4NTM2MmU5NTQ2MmVhNTY2MWViNTc2MGVjNTg2MGVkNWE1ZmVlNWI1ZWVmNWQ1ZWYwNWY1ZWYxNjA1ZGYyNjI1ZGYyNjQ1Y2YzNjU1Y2Y0Njc1Y2Y0Njk1Y2Y1NmI1Y2Y2NmM1Y2Y2NmU1Y2Y3NzA1Y2Y3NzI1Y2Y4NzQ1Y2Y4NzY1Y2Y5Nzg1ZGY5Nzk1ZGY5N2I1ZGZhN2Q1ZWZhN2Y1ZWZhODE1ZmZiODM1ZmZiODU2MGZiODc2MWZjODk2MWZjOGE2MmZjOGM2M2ZjOGU2NGZjOTA2NWZkOTI2NmZkOTQ2N2ZkOTY2OGZkOTg2OWZkOWE2YWZkOWI2YmZlOWQ2Y2ZlOWY2ZGZlYTE2ZWZlYTM2ZmZlYTU3MWZlYTc3MmZlYTk3M2ZlYWE3NGZlYWM3NmZlYWU3N2ZlYjA3OGZlYjI3YWZlYjQ3YmZlYjY3Y2ZlYjc3ZWZlYjk3ZmZlYmI4MWZlYmQ4MmZlYmY4NGZlYzE4NWZlYzI4N2ZlYzQ4OGZlYzY4YWZlYzg4Y2ZlY2E4ZGZlY2M4ZmZlY2Q5MGZlY2Y5MmZlZDE5NGZlZDM5NWZlZDU5N2ZlZDc5OWZlZDg5YWZkZGE5Y2ZkZGM5ZWZkZGVhMGZkZTBhMWZkZTJhM2ZkZTNhNWZkZTVhN2ZkZTdhOWZkZTlhYWZkZWJhY2ZjZWNhZWZjZWViMGZjZjBiMmZjZjJiNGZjZjRiNmZjZjZiOGZjZjdiOWZjZjliYmZjZmJiZGZjZmRiZiIpKSxJU3Q9UjgodGUoIjAwMDAwNDAxMDAwNTAxMDEwNjAxMDEwODAyMDEwYTAyMDIwYzAyMDIwZTAzMDIxMDA0MDMxMjA0MDMxNDA1MDQxNzA2MDQxOTA3MDUxYjA4MDUxZDA5MDYxZjBhMDcyMjBiMDcyNDBjMDgyNjBkMDgyOTBlMDkyYjEwMDkyZDExMGEzMDEyMGEzMjE0MGIzNDE1MGIzNzE2MGIzOTE4MGMzYzE5MGMzZTFiMGM0MTFjMGM0MzFlMGM0NTFmMGM0ODIxMGM0YTIzMGM0YzI0MGM0ZjI2MGM1MTI4MGI1MzI5MGI1NTJiMGI1NzJkMGI1OTJmMGE1YjMxMGE1YzMyMGE1ZTM0MGE1ZjM2MDk2MTM4MDk2MjM5MDk2MzNiMDk2NDNkMDk2NTNlMDk2NjQwMGE2NzQyMGE2ODQ0MGE2ODQ1MGE2OTQ3MGI2YTQ5MGI2YTRhMGM2YjRjMGM2YjRkMGQ2YzRmMGQ2YzUxMGU2YzUyMGU2ZDU0MGY2ZDU1MGY2ZDU3MTA2ZTU5MTA2ZTVhMTE2ZTVjMTI2ZTVkMTI2ZTVmMTM2ZTYxMTM2ZTYyMTQ2ZTY0MTU2ZTY1MTU2ZTY3MTY2ZTY5MTY2ZTZhMTc2ZTZjMTg2ZTZkMTg2ZTZmMTk2ZTcxMTk2ZTcyMWE2ZTc0MWE2ZTc1MWI2ZTc3MWM2ZDc4MWM2ZDdhMWQ2ZDdjMWQ2ZDdkMWU2ZDdmMWU2YzgwMWY2YzgyMjA2Yzg0MjA2Yjg1MjE2Yjg3MjE2Yjg4MjI2YThhMjI2YThjMjM2OThkMjM2OThmMjQ2OTkwMjU2ODkyMjU2ODkzMjY2Nzk1MjY2Nzk3Mjc2Njk4Mjc2NjlhMjg2NTliMjk2NDlkMjk2NDlmMmE2M2EwMmE2M2EyMmI2MmEzMmM2MWE1MmM2MGE2MmQ2MGE4MmU1ZmE5MmU1ZWFiMmY1ZWFkMzA1ZGFlMzA1Y2IwMzE1YmIxMzI1YWIzMzI1YWI0MzM1OWI2MzQ1OGI3MzU1N2I5MzU1NmJhMzY1NWJjMzc1NGJkMzg1M2JmMzk1MmMwM2E1MWMxM2E1MGMzM2I0ZmM0M2M0ZWM2M2Q0ZGM3M2U0Y2M4M2Y0YmNhNDA0YWNiNDE0OWNjNDI0OGNlNDM0N2NmNDQ0NmQwNDU0NWQyNDY0NGQzNDc0M2Q0NDg0MmQ1NGE0MWQ3NGIzZmQ4NGMzZWQ5NGQzZGRhNGUzY2RiNTAzYmRkNTEzYWRlNTIzOGRmNTMzN2UwNTUzNmUxNTYzNWUyNTczNGUzNTkzM2U0NWEzMWU1NWMzMGU2NWQyZmU3NWUyZWU4NjAyZGU5NjEyYmVhNjMyYWViNjQyOWViNjYyOGVjNjcyNmVkNjkyNWVlNmEyNGVmNmMyM2VmNmUyMWYwNmYyMGYxNzExZmYxNzMxZGYyNzQxY2YzNzYxYmYzNzgxOWY0NzkxOGY1N2IxN2Y1N2QxNWY2N2UxNGY2ODAxM2Y3ODIxMmY3ODQxMGY4ODUwZmY4ODcwZWY4ODkwY2Y5OGIwYmY5OGMwYWY5OGUwOWZhOTAwOGZhOTIwN2ZhOTQwN2ZiOTYwNmZiOTcwNmZiOTkwNmZiOWIwNmZiOWQwN2ZjOWYwN2ZjYTEwOGZjYTMwOWZjYTUwYWZjYTYwY2ZjYTgwZGZjYWEwZmZjYWMxMWZjYWUxMmZjYjAxNGZjYjIxNmZjYjQxOGZiYjYxYWZiYjgxZGZiYmExZmZiYmMyMWZiYmUyM2ZhYzAyNmZhYzIyOGZhYzQyYWZhYzYyZGY5YzcyZmY5YzkzMmY5Y2IzNWY4Y2QzN2Y4Y2YzYWY3ZDEzZGY3ZDM0MGY2ZDU0M2Y2ZDc0NmY1ZDk0OWY1ZGI0Y2Y0ZGQ0ZmY0ZGY1M2Y0ZTE1NmYzZTM1YWYzZTU1ZGYyZTY2MWYyZTg2NWYyZWE2OWYxZWM2ZGYxZWQ3MWYxZWY3NWYxZjE3OWYyZjI3ZGYyZjQ4MmYzZjU4NmYzZjY4YWY0Zjg4ZWY1Zjk5MmY2ZmE5NmY4ZmI5YWY5ZmM5ZGZhZmRhMWZjZmZhNCIpKSxMU3Q9UjgodGUoIjBkMDg4NzEwMDc4ODEzMDc4OTE2MDc4YTE5MDY4YzFiMDY4ZDFkMDY4ZTIwMDY4ZjIyMDY5MDI0MDY5MTI2MDU5MTI4MDU5MjJhMDU5MzJjMDU5NDJlMDU5NTJmMDU5NjMxMDU5NzMzMDU5NzM1MDQ5ODM3MDQ5OTM4MDQ5YTNhMDQ5YTNjMDQ5YjNlMDQ5YzNmMDQ5YzQxMDQ5ZDQzMDM5ZTQ0MDM5ZTQ2MDM5ZjQ4MDM5ZjQ5MDNhMDRiMDNhMTRjMDJhMTRlMDJhMjUwMDJhMjUxMDJhMzUzMDJhMzU1MDJhNDU2MDFhNDU4MDFhNDU5MDFhNTViMDFhNTVjMDFhNjVlMDFhNjYwMDFhNjYxMDBhNzYzMDBhNzY0MDBhNzY2MDBhNzY3MDBhODY5MDBhODZhMDBhODZjMDBhODZlMDBhODZmMDBhODcxMDBhODcyMDFhODc0MDFhODc1MDFhODc3MDFhODc4MDFhODdhMDJhODdiMDJhODdkMDNhODdlMDNhODgwMDRhODgxMDRhNzgzMDVhNzg0MDVhNzg2MDZhNjg3MDdhNjg4MDhhNjhhMDlhNThiMGFhNThkMGJhNThlMGNhNDhmMGRhNDkxMGVhMzkyMGZhMzk0MTBhMjk1MTFhMTk2MTNhMTk4MTRhMDk5MTU5ZjlhMTY5ZjljMTc5ZTlkMTg5ZDllMTk5ZGEwMWE5Y2ExMWI5YmEyMWQ5YWEzMWU5YWE1MWY5OWE2MjA5OGE3MjE5N2E4MjI5NmFhMjM5NWFiMjQ5NGFjMjY5NGFkMjc5M2FlMjg5MmIwMjk5MWIxMmE5MGIyMmI4ZmIzMmM4ZWI0MmU4ZGI1MmY4Y2I2MzA4YmI3MzE4YWI4MzI4OWJhMzM4OGJiMzQ4OGJjMzU4N2JkMzc4NmJlMzg4NWJmMzk4NGMwM2E4M2MxM2I4MmMyM2M4MWMzM2Q4MGM0M2U3ZmM1NDA3ZWM2NDE3ZGM3NDI3Y2M4NDM3YmM5NDQ3YWNhNDU3YWNiNDY3OWNjNDc3OGNjNDk3N2NkNGE3NmNlNGI3NWNmNGM3NGQwNGQ3M2QxNGU3MmQyNGY3MWQzNTE3MWQ0NTI3MGQ1NTM2ZmQ1NTQ2ZWQ2NTU2ZGQ3NTY2Y2Q4NTc2YmQ5NTg2YWRhNWE2YWRhNWI2OWRiNWM2OGRjNWQ2N2RkNWU2NmRlNWY2NWRlNjE2NGRmNjI2M2UwNjM2M2UxNjQ2MmUyNjU2MWUyNjY2MGUzNjg1ZmU0Njk1ZWU1NmE1ZGU1NmI1ZGU2NmM1Y2U3NmU1YmU3NmY1YWU4NzA1OWU5NzE1OGU5NzI1N2VhNzQ1N2ViNzU1NmViNzY1NWVjNzc1NGVkNzk1M2VkN2E1MmVlN2I1MWVmN2M1MWVmN2U1MGYwN2Y0ZmYwODA0ZWYxODE0ZGYxODM0Y2YyODQ0YmYzODU0YmYzODc0YWY0ODg0OWY0ODk0OGY1OGI0N2Y1OGM0NmY2OGQ0NWY2OGY0NGY3OTA0NGY3OTE0M2Y3OTM0MmY4OTQ0MWY4OTU0MGY5OTczZmY5OTgzZWY5OWEzZWZhOWIzZGZhOWMzY2ZhOWUzYmZiOWYzYWZiYTEzOWZiYTIzOGZjYTMzOGZjYTUzN2ZjYTYzNmZjYTgzNWZjYTkzNGZkYWIzM2ZkYWMzM2ZkYWUzMmZkYWYzMWZkYjEzMGZkYjIyZmZkYjQyZmZkYjUyZWZlYjcyZGZlYjgyY2ZlYmEyY2ZlYmIyYmZlYmQyYWZlYmUyYWZlYzAyOWZkYzIyOWZkYzMyOGZkYzUyN2ZkYzYyN2ZkYzgyN2ZkY2EyNmZkY2IyNmZjY2QyNWZjY2UyNWZjZDAyNWZjZDIyNWZiZDMyNGZiZDUyNGZiZDcyNGZhZDgyNGZhZGEyNGY5ZGMyNGY5ZGQyNWY4ZGYyNWY4ZTEyNWY3ZTIyNWY3ZTQyNWY2ZTYyNmY2ZTgyNmY1ZTkyNmY1ZWIyN2Y0ZWQyN2YzZWUyN2YzZjAyN2YyZjIyN2YxZjQyNmYxZjUyNWYwZjcyNGYwZjkyMSIpKTtmdW5jdGlvbiBxZShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIG4kPU1hdGguYWJzLEJvPU1hdGguYXRhbjIsaWc9TWF0aC5jb3Msa1N0PU1hdGgubWF4LE44PU1hdGgubWluLF91PU1hdGguc2luLHN5PU1hdGguc3FydCxibz0xZS0xMix5dT1NYXRoLlBJLFA1PXl1LzIsaGM9Mip5dTtmdW5jdGlvbiBSU3QoZSl7cmV0dXJuIGU+MT8wOmU8LTE/eXU6TWF0aC5hY29zKGUpfWZ1bmN0aW9uIGkkKGUpe3JldHVybiBlPj0xP1A1OmU8PS0xPy1QNTpNYXRoLmFzaW4oZSl9ZnVuY3Rpb24gQUVlKGUpe3JldHVybiBlLmlubmVyUmFkaXVzfWZ1bmN0aW9uIFBFZShlKXtyZXR1cm4gZS5vdXRlclJhZGl1c31mdW5jdGlvbiBJRWUoZSl7cmV0dXJuIGUuc3RhcnRBbmdsZX1mdW5jdGlvbiBMRWUoZSl7cmV0dXJuIGUuZW5kQW5nbGV9ZnVuY3Rpb24ga0VlKGUpe3JldHVybiBlJiZlLnBhZEFuZ2xlfWZ1bmN0aW9uIFJFZShlLHQscixuLGksbyxhLHMpe3ZhciBsPXItZSxjPW4tdCx1PWEtaSxoPXMtbyxmPWgqbC11KmM7aWYoIShmKmY8Ym8pKXJldHVybiBmPSh1Kih0LW8pLWgqKGUtaSkpL2YsW2UrZipsLHQrZipjXX1mdW5jdGlvbiBEOChlLHQscixuLGksbyxhKXt2YXIgcz1lLXIsbD10LW4sYz0oYT9vOi1vKS9zeShzKnMrbCpsKSx1PWMqbCxoPS1jKnMsZj1lK3UscD10K2gsZD1yK3UsZz1uK2gsXz0oZitkKS8yLHk9KHArZykvMix4PWQtZixiPWctcCxTPXgqeCtiKmIsQz1pLW8sUD1mKmctZCpwLGs9KGI8MD8tMToxKSpzeShrU3QoMCxDKkMqUy1QKlApKSxPPShQKmIteCprKS9TLEQ9KC1QKngtYiprKS9TLEI9KFAqYit4KmspL1MsST0oLVAqeCtiKmspL1MsTD1PLV8sUj1ELXksRj1CLV8sej1JLXk7cmV0dXJuIEwqTCtSKlI+RipGK3oqeiYmKE89QixEPUkpLHtjeDpPLGN5OkQseDAxOi11LHkwMTotaCx4MTE6TyooaS9DLTEpLHkxMTpEKihpL0MtMSl9fWZ1bmN0aW9uIE5TdCgpe3ZhciBlPUFFZSx0PVBFZSxyPXFlKDApLG49bnVsbCxpPUlFZSxvPUxFZSxhPWtFZSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciBjLHUsaD0rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZj0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cykscD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1QNSxkPW8uYXBwbHkodGhpcyxhcmd1bWVudHMpLVA1LGc9biQoZC1wKSxfPWQ+cDtpZihzfHwocz1jPWJzKCkpLGY8aCYmKHU9ZixmPWgsaD11KSwhKGY+Ym8pKXMubW92ZVRvKDAsMCk7ZWxzZSBpZihnPmhjLWJvKXMubW92ZVRvKGYqaWcocCksZipfdShwKSkscy5hcmMoMCwwLGYscCxkLCFfKSxoPmJvJiYocy5tb3ZlVG8oaCppZyhkKSxoKl91KGQpKSxzLmFyYygwLDAsaCxkLHAsXykpO2Vsc2V7dmFyIHk9cCx4PWQsYj1wLFM9ZCxDPWcsUD1nLGs9YS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixPPWs+Ym8mJihuPytuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpzeShoKmgrZipmKSksRD1OOChuJChmLWgpLzIsK3IuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxCPUQsST1ELEwsUjtpZihPPmJvKXt2YXIgRj1pJChPL2gqX3UoaykpLHo9aSQoTy9mKl91KGspKTsoQy09RioyKT5ibz8oRio9Xz8xOi0xLGIrPUYsUy09Rik6KEM9MCxiPVM9KHArZCkvMiksKFAtPXoqMik+Ym8/KHoqPV8/MTotMSx5Kz16LHgtPXopOihQPTAseT14PShwK2QpLzIpfXZhciBVPWYqaWcoeSksVz1mKl91KHkpLFo9aCppZyhTKSxydD1oKl91KFMpO2lmKEQ+Ym8pe3ZhciBvdD1mKmlnKHgpLHN0PWYqX3UoeCksU3Q9aCppZyhiKSxidD1oKl91KGIpLE10O2lmKGc8eXUmJihNdD1SRWUoVSxXLFN0LGJ0LG90LHN0LFoscnQpKSl7dmFyIGx0PVUtTXRbMF0sS3Q9Vy1NdFsxXSxfdD1vdC1NdFswXSxjdD1zdC1NdFsxXSxYPTEvX3UoUlN0KChsdCpfdCtLdCpjdCkvKHN5KGx0Kmx0K0t0Kkt0KSpzeShfdCpfdCtjdCpjdCkpKS8yKSxldD1zeShNdFswXSpNdFswXStNdFsxXSpNdFsxXSk7Qj1OOChELChoLWV0KS8oWC0xKSksST1OOChELChmLWV0KS8oWCsxKSl9fVA+Ym8/ST5ibz8oTD1EOChTdCxidCxVLFcsZixJLF8pLFI9RDgob3Qsc3QsWixydCxmLEksXykscy5tb3ZlVG8oTC5jeCtMLngwMSxMLmN5K0wueTAxKSxJPEQ/cy5hcmMoTC5jeCxMLmN5LEksQm8oTC55MDEsTC54MDEpLEJvKFIueTAxLFIueDAxKSwhXyk6KHMuYXJjKEwuY3gsTC5jeSxJLEJvKEwueTAxLEwueDAxKSxCbyhMLnkxMSxMLngxMSksIV8pLHMuYXJjKDAsMCxmLEJvKEwuY3krTC55MTEsTC5jeCtMLngxMSksQm8oUi5jeStSLnkxMSxSLmN4K1IueDExKSwhXykscy5hcmMoUi5jeCxSLmN5LEksQm8oUi55MTEsUi54MTEpLEJvKFIueTAxLFIueDAxKSwhXykpKToocy5tb3ZlVG8oVSxXKSxzLmFyYygwLDAsZix5LHgsIV8pKTpzLm1vdmVUbyhVLFcpLCEoaD5ibyl8fCEoQz5ibyk/cy5saW5lVG8oWixydCk6Qj5ibz8oTD1EOChaLHJ0LG90LHN0LGgsLUIsXyksUj1EOChVLFcsU3QsYnQsaCwtQixfKSxzLmxpbmVUbyhMLmN4K0wueDAxLEwuY3krTC55MDEpLEI8RD9zLmFyYyhMLmN4LEwuY3ksQixCbyhMLnkwMSxMLngwMSksQm8oUi55MDEsUi54MDEpLCFfKToocy5hcmMoTC5jeCxMLmN5LEIsQm8oTC55MDEsTC54MDEpLEJvKEwueTExLEwueDExKSwhXykscy5hcmMoMCwwLGgsQm8oTC5jeStMLnkxMSxMLmN4K0wueDExKSxCbyhSLmN5K1IueTExLFIuY3grUi54MTEpLF8pLHMuYXJjKFIuY3gsUi5jeSxCLEJvKFIueTExLFIueDExKSxCbyhSLnkwMSxSLngwMSksIV8pKSk6cy5hcmMoMCwwLGgsUyxiLF8pfWlmKHMuY2xvc2VQYXRoKCksYylyZXR1cm4gcz1udWxsLGMrIiJ8fG51bGx9cmV0dXJuIGwuY2VudHJvaWQ9ZnVuY3Rpb24oKXt2YXIgYz0oK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArdC5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIsdT0oK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKyArby5hcHBseSh0aGlzLGFyZ3VtZW50cykpLzIteXUvMjtyZXR1cm5baWcodSkqYyxfdSh1KSpjXX0sbC5pbm5lclJhZGl1cz1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTplfSxsLm91dGVyUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOnR9LGwuY29ybmVyUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOnJ9LGwucGFkUmFkaXVzPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWM9PW51bGw/bnVsbDp0eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpufSxsLnN0YXJ0QW5nbGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIGM9PSJmdW5jdGlvbiI/YzpxZSgrYyksbCk6aX0sbC5lbmRBbmdsZT1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz10eXBlb2YgYz09ImZ1bmN0aW9uIj9jOnFlKCtjKSxsKTpvfSxsLnBhZEFuZ2xlPWZ1bmN0aW9uKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXR5cGVvZiBjPT0iZnVuY3Rpb24iP2M6cWUoK2MpLGwpOmF9LGwuY29udGV4dD1mdW5jdGlvbihjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz1jPT1udWxsP251bGw6YyxsKTpzfSxsfWZ1bmN0aW9uIERTdChlKXt0aGlzLl9jb250ZXh0PWV9RFN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpO2JyZWFrfX19O2Z1bmN0aW9uIFloKGUpe3JldHVybiBuZXcgRFN0KGUpfWZ1bmN0aW9uIFhiKGUpe3JldHVybiBlWzBdfWZ1bmN0aW9uICRiKGUpe3JldHVybiBlWzFdfWZ1bmN0aW9uIHZ1KCl7dmFyIGU9WGIsdD0kYixyPXFlKCEwKSxuPW51bGwsaT1ZaCxvPW51bGw7ZnVuY3Rpb24gYShzKXt2YXIgbCxjPXMubGVuZ3RoLHUsaD0hMSxmO2ZvcihuPT1udWxsJiYobz1pKGY9YnMoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmcih1PXNbbF0sbCxzKSk9PT1oJiYoKGg9IWgpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGgmJm8ucG9pbnQoK2UodSxsLHMpLCt0KHUsbCxzKSk7aWYoZilyZXR1cm4gbz1udWxsLGYrIiJ8fG51bGx9cmV0dXJuIGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTplfSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6dH0sYS5kZWZpbmVkPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoISFzKSxhKTpyfSxhLmN1cnZlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXMsbiE9bnVsbCYmKG89aShuKSksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPT1udWxsP249bz1udWxsOm89aShuPXMpLGEpOm59LGF9ZnVuY3Rpb24gTzgoKXt2YXIgZT1YYix0PW51bGwscj1xZSgwKSxuPSRiLGk9cWUoITApLG89bnVsbCxhPVloLHM9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBoLGYscCxkPXUubGVuZ3RoLGcsXz0hMSx5LHg9bmV3IEFycmF5KGQpLGI9bmV3IEFycmF5KGQpO2ZvcihvPT1udWxsJiYocz1hKHk9YnMoKSkpLGg9MDtoPD1kOysraCl7aWYoIShoPGQmJmkoZz11W2hdLGgsdSkpPT09XylpZihfPSFfKWY9aCxzLmFyZWFTdGFydCgpLHMubGluZVN0YXJ0KCk7ZWxzZXtmb3Iocy5saW5lRW5kKCkscy5saW5lU3RhcnQoKSxwPWgtMTtwPj1mOy0tcClzLnBvaW50KHhbcF0sYltwXSk7cy5saW5lRW5kKCkscy5hcmVhRW5kKCl9XyYmKHhbaF09K2UoZyxoLHUpLGJbaF09K3IoZyxoLHUpLHMucG9pbnQodD8rdChnLGgsdSk6eFtoXSxuPytuKGcsaCx1KTpiW2hdKSl9aWYoeSlyZXR1cm4gcz1udWxsLHkrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiB2dSgpLmRlZmluZWQoaSkuY3VydmUoYSkuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoK3UpLHQ9bnVsbCxsKTplfSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoK3UpLGwpOmV9LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9dT09bnVsbD9udWxsOnR5cGVvZiB1PT0iZnVuY3Rpb24iP3U6cWUoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxuPW51bGwsbCk6cn0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTpyfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXU9PW51bGw/bnVsbDp0eXBlb2YgdT09ImZ1bmN0aW9uIj91OnFlKCt1KSxsKTpufSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KHIpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChlKS55KG4pfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KHIpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHU9PSJmdW5jdGlvbiI/dTpxZSghIXUpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9dSxvIT1udWxsJiYocz1hKG8pKSxsKTphfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9PW51bGw/bz1zPW51bGw6cz1hKG89dSksbCk6b30sbH1mdW5jdGlvbiBPU3QoZSx0KXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOnQ+PWU/MDpOYU59ZnVuY3Rpb24gelN0KGUpe3JldHVybiBlfWZ1bmN0aW9uIEZTdCgpe3ZhciBlPXpTdCx0PU9TdCxyPW51bGwsbj1xZSgwKSxpPXFlKGhjKSxvPXFlKDApO2Z1bmN0aW9uIGEocyl7dmFyIGwsYz1zLmxlbmd0aCx1LGgsZj0wLHA9bmV3IEFycmF5KGMpLGQ9bmV3IEFycmF5KGMpLGc9K24uYXBwbHkodGhpcyxhcmd1bWVudHMpLF89TWF0aC5taW4oaGMsTWF0aC5tYXgoLWhjLGkuYXBwbHkodGhpcyxhcmd1bWVudHMpLWcpKSx5LHg9TWF0aC5taW4oTWF0aC5hYnMoXykvYyxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYj14KihfPDA/LTE6MSksUztmb3IobD0wO2w8YzsrK2wpKFM9ZFtwW2xdPWxdPStlKHNbbF0sbCxzKSk+MCYmKGYrPVMpO2Zvcih0IT1udWxsP3Auc29ydChmdW5jdGlvbihDLFApe3JldHVybiB0KGRbQ10sZFtQXSl9KTpyIT1udWxsJiZwLnNvcnQoZnVuY3Rpb24oQyxQKXtyZXR1cm4gcihzW0NdLHNbUF0pfSksbD0wLGg9Zj8oXy1jKmIpL2Y6MDtsPGM7KytsLGc9eSl1PXBbbF0sUz1kW3VdLHk9ZysoUz4wP1MqaDowKStiLGRbdV09e2RhdGE6c1t1XSxpbmRleDpsLHZhbHVlOlMsc3RhcnRBbmdsZTpnLGVuZEFuZ2xlOnkscGFkQW5nbGU6eH07cmV0dXJuIGR9cmV0dXJuIGEudmFsdWU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6ZX0sYS5zb3J0VmFsdWVzPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXMscj1udWxsLGEpOnR9LGEuc29ydD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLHQ9bnVsbCxhKTpyfSxhLnN0YXJ0QW5nbGU9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6bn0sYS5lbmRBbmdsZT1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTppfSxhLnBhZEFuZ2xlPWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXR5cGVvZiBzPT0iZnVuY3Rpb24iP3M6cWUoK3MpLGEpOm99LGF9dmFyIHo4PUtiKFloKTtmdW5jdGlvbiBCU3QoZSl7dGhpcy5fY3VydmU9ZX1CU3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhU3RhcnQoKX0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmFyZWFFbmQoKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5saW5lRW5kKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7dGhpcy5fY3VydmUucG9pbnQodCpNYXRoLnNpbihlKSx0Ki1NYXRoLmNvcyhlKSl9fTtmdW5jdGlvbiBLYihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBuZXcgQlN0KGUocikpfXJldHVybiB0Ll9jdXJ2ZT1lLHR9ZnVuY3Rpb24gWmIoZSl7dmFyIHQ9ZS5jdXJ2ZTtyZXR1cm4gZS5hbmdsZT1lLngsZGVsZXRlIGUueCxlLnJhZGl1cz1lLnksZGVsZXRlIGUueSxlLmN1cnZlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QoS2IocikpOnQoKS5fY3VydmV9LGV9ZnVuY3Rpb24gbyQoKXtyZXR1cm4gWmIodnUoKS5jdXJ2ZSh6OCkpfWZ1bmN0aW9uIGEkKCl7dmFyIGU9TzgoKS5jdXJ2ZSh6OCksdD1lLmN1cnZlLHI9ZS5saW5lWDAsbj1lLmxpbmVYMSxpPWUubGluZVkwLG89ZS5saW5lWTE7cmV0dXJuIGUuYW5nbGU9ZS54LGRlbGV0ZSBlLngsZS5zdGFydEFuZ2xlPWUueDAsZGVsZXRlIGUueDAsZS5lbmRBbmdsZT1lLngxLGRlbGV0ZSBlLngxLGUucmFkaXVzPWUueSxkZWxldGUgZS55LGUuaW5uZXJSYWRpdXM9ZS55MCxkZWxldGUgZS55MCxlLm91dGVyUmFkaXVzPWUueTEsZGVsZXRlIGUueTEsZS5saW5lU3RhcnRBbmdsZT1mdW5jdGlvbigpe3JldHVybiBaYihyKCkpfSxkZWxldGUgZS5saW5lWDAsZS5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gWmIobigpKX0sZGVsZXRlIGUubGluZVgxLGUubGluZUlubmVyUmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIFpiKGkoKSl9LGRlbGV0ZSBlLmxpbmVZMCxlLmxpbmVPdXRlclJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBaYihvKCkpfSxkZWxldGUgZS5saW5lWTEsZS5jdXJ2ZT1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90KEtiKGEpKTp0KCkuX2N1cnZlfSxlfWZ1bmN0aW9uIGx5KGUsdCl7cmV0dXJuWyh0PSt0KSpNYXRoLmNvcyhlLT1NYXRoLlBJLzIpLHQqTWF0aC5zaW4oZSldfXZhciBJNT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gTkVlKGUpe3JldHVybiBlLnNvdXJjZX1mdW5jdGlvbiBERWUoZSl7cmV0dXJuIGUudGFyZ2V0fWZ1bmN0aW9uIHMkKGUpe3ZhciB0PU5FZSxyPURFZSxuPVhiLGk9JGIsbz1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcyxsPUk1LmNhbGwoYXJndW1lbnRzKSxjPXQuYXBwbHkodGhpcyxsKSx1PXIuYXBwbHkodGhpcyxsKTtpZihvfHwobz1zPWJzKCkpLGUobywrbi5hcHBseSh0aGlzLChsWzBdPWMsbCkpLCtpLmFwcGx5KHRoaXMsbCksK24uYXBwbHkodGhpcywobFswXT11LGwpKSwraS5hcHBseSh0aGlzLGwpKSxzKXJldHVybiBvPW51bGwscysiInx8bnVsbH1yZXR1cm4gYS5zb3VyY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cyxhKTp0fSxhLnRhcmdldD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1zLGEpOnJ9LGEueD1mdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10eXBlb2Ygcz09ImZ1bmN0aW9uIj9zOnFlKCtzKSxhKTpufSxhLnk9ZnVuY3Rpb24ocyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dHlwZW9mIHM9PSJmdW5jdGlvbiI/czpxZSgrcyksYSk6aX0sYS5jb250ZXh0PWZ1bmN0aW9uKHMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXM9PW51bGw/bnVsbDpzLGEpOm99LGF9ZnVuY3Rpb24gT0VlKGUsdCxyLG4saSl7ZS5tb3ZlVG8odCxyKSxlLmJlemllckN1cnZlVG8odD0odCtuKS8yLHIsdCxpLG4saSl9ZnVuY3Rpb24gekVlKGUsdCxyLG4saSl7ZS5tb3ZlVG8odCxyKSxlLmJlemllckN1cnZlVG8odCxyPShyK2kpLzIsbixyLG4saSl9ZnVuY3Rpb24gRkVlKGUsdCxyLG4saSl7dmFyIG89bHkodCxyKSxhPWx5KHQscj0ocitpKS8yKSxzPWx5KG4sciksbD1seShuLGkpO2UubW92ZVRvKG9bMF0sb1sxXSksZS5iZXppZXJDdXJ2ZVRvKGFbMF0sYVsxXSxzWzBdLHNbMV0sbFswXSxsWzFdKX1mdW5jdGlvbiBIU3QoKXtyZXR1cm4gcyQoT0VlKX1mdW5jdGlvbiBWU3QoKXtyZXR1cm4gcyQoekVlKX1mdW5jdGlvbiBVU3QoKXt2YXIgZT1zJChGRWUpO3JldHVybiBlLmFuZ2xlPWUueCxkZWxldGUgZS54LGUucmFkaXVzPWUueSxkZWxldGUgZS55LGV9dmFyIEw1PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQveXUpO2UubW92ZVRvKHIsMCksZS5hcmMoMCwwLHIsMCxoYyl9fTt2YXIgRjg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodC81KS8yO2UubW92ZVRvKC0zKnIsLXIpLGUubGluZVRvKC1yLC1yKSxlLmxpbmVUbygtciwtMypyKSxlLmxpbmVUbyhyLC0zKnIpLGUubGluZVRvKHIsLXIpLGUubGluZVRvKDMqciwtciksZS5saW5lVG8oMypyLHIpLGUubGluZVRvKHIsciksZS5saW5lVG8ociwzKnIpLGUubGluZVRvKC1yLDMqciksZS5saW5lVG8oLXIsciksZS5saW5lVG8oLTMqcixyKSxlLmNsb3NlUGF0aCgpfX07dmFyIHFTdD1NYXRoLnNxcnQoLjMzMzMzMzMzMzMzMzMzMzMpLEJFZT1xU3QqMixCOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0L0JFZSksbj1yKnFTdDtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLDApLGUubGluZVRvKDAsciksZS5saW5lVG8oLW4sMCksZS5jbG9zZVBhdGgoKX19O3ZhciBIRWU9Ljg5MDgxMzA5MTUyOTI4NTIsR1N0PU1hdGguc2luKHl1LzEwKS9NYXRoLnNpbig3Knl1LzEwKSxWRWU9TWF0aC5zaW4oaGMvMTApKkdTdCxVRWU9LU1hdGguY29zKGhjLzEwKSpHU3QsSDg9e2RyYXc6ZnVuY3Rpb24oZSx0KXt2YXIgcj1NYXRoLnNxcnQodCpIRWUpLG49VkVlKnIsaT1VRWUqcjtlLm1vdmVUbygwLC1yKSxlLmxpbmVUbyhuLGkpO2Zvcih2YXIgbz0xO288NTsrK28pe3ZhciBhPWhjKm8vNSxzPU1hdGguY29zKGEpLGw9TWF0aC5zaW4oYSk7ZS5saW5lVG8obCpyLC1zKnIpLGUubGluZVRvKHMqbi1sKmksbCpuK3MqaSl9ZS5jbG9zZVBhdGgoKX19O3ZhciBWOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPU1hdGguc3FydCh0KSxuPS1yLzI7ZS5yZWN0KG4sbixyLHIpfX07dmFyIGwkPU1hdGguc3FydCgzKSxVOD17ZHJhdzpmdW5jdGlvbihlLHQpe3ZhciByPS1NYXRoLnNxcnQodC8obCQqMykpO2UubW92ZVRvKDAscioyKSxlLmxpbmVUbygtbCQqciwtciksZS5saW5lVG8obCQqciwtciksZS5jbG9zZVBhdGgoKX19O3ZhciBmYz0tLjUscGM9TWF0aC5zcXJ0KDMpLzIsYyQ9MS9NYXRoLnNxcnQoMTIpLHFFZT0oYyQvMisxKSozLHE4PXtkcmF3OmZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5zcXJ0KHQvcUVlKSxuPXIvMixpPXIqYyQsbz1uLGE9cipjJCtyLHM9LW8sbD1hO2UubW92ZVRvKG4saSksZS5saW5lVG8obyxhKSxlLmxpbmVUbyhzLGwpLGUubGluZVRvKGZjKm4tcGMqaSxwYypuK2ZjKmkpLGUubGluZVRvKGZjKm8tcGMqYSxwYypvK2ZjKmEpLGUubGluZVRvKGZjKnMtcGMqbCxwYypzK2ZjKmwpLGUubGluZVRvKGZjKm4rcGMqaSxmYyppLXBjKm4pLGUubGluZVRvKGZjKm8rcGMqYSxmYyphLXBjKm8pLGUubGluZVRvKGZjKnMrcGMqbCxmYypsLXBjKnMpLGUuY2xvc2VQYXRoKCl9fTt2YXIgV1N0PVtMNSxGOCxCOCxWOCxIOCxVOCxxOF07ZnVuY3Rpb24gWVN0KCl7dmFyIGU9cWUoTDUpLHQ9cWUoNjQpLHI9bnVsbDtmdW5jdGlvbiBuKCl7dmFyIGk7aWYocnx8KHI9aT1icygpKSxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KHIsK3QuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxpKXJldHVybiByPW51bGwsaSsiInx8bnVsbH1yZXR1cm4gbi50eXBlPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cWUoaSksbik6ZX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6cWUoK2kpLG4pOnR9LG4uY29udGV4dD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6aSxuKTpyfSxufWZ1bmN0aW9uIGRjKCl7fWZ1bmN0aW9uIEpiKGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oKDIqZS5feDArZS5feDEpLzMsKDIqZS5feTArZS5feTEpLzMsKGUuX3gwKzIqZS5feDEpLzMsKGUuX3kwKzIqZS5feTEpLzMsKGUuX3gwKzQqZS5feDErdCkvNiwoZS5feTArNCplLl95MStyKS82KX1mdW5jdGlvbiBrNShlKXt0aGlzLl9jb250ZXh0PWV9azUucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMzpKYih0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9jb250ZXh0LmxpbmVUbygoNSp0aGlzLl94MCt0aGlzLl94MSkvNiwoNSp0aGlzLl95MCt0aGlzLl95MSkvNik7ZGVmYXVsdDpKYih0aGlzLGUsdCk7YnJlYWt9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10fX07ZnVuY3Rpb24gRzgoZSl7cmV0dXJuIG5ldyBrNShlKX1mdW5jdGlvbiBqU3QoZSl7dGhpcy5fY29udGV4dD1lfWpTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpkYyxhcmVhRW5kOmRjLGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6e3RoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMjp7dGhpcy5fY29udGV4dC5tb3ZlVG8oKHRoaXMuX3gyKzIqdGhpcy5feDMpLzMsKHRoaXMuX3kyKzIqdGhpcy5feTMpLzMpLHRoaXMuX2NvbnRleHQubGluZVRvKCh0aGlzLl94MysyKnRoaXMuX3gyKS8zLCh0aGlzLl95MysyKnRoaXMuX3kyKS8zKSx0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpO2JyZWFrfWNhc2UgMzp7dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCk7YnJlYWt9fX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mj1lLHRoaXMuX3kyPXQ7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDM9ZSx0aGlzLl95Mz10O2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g0PWUsdGhpcy5feTQ9dCx0aGlzLl9jb250ZXh0Lm1vdmVUbygodGhpcy5feDArNCp0aGlzLl94MStlKS82LCh0aGlzLl95MCs0KnRoaXMuX3kxK3QpLzYpO2JyZWFrO2RlZmF1bHQ6SmIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dH19O2Z1bmN0aW9uIFhTdChlKXtyZXR1cm4gbmV3IGpTdChlKX1mdW5jdGlvbiAkU3QoZSl7dGhpcy5fY29udGV4dD1lfSRTdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Mzt2YXIgcj0odGhpcy5feDArNCp0aGlzLl94MStlKS82LG49KHRoaXMuX3kwKzQqdGhpcy5feTErdCkvNjt0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHIsbik6dGhpcy5fY29udGV4dC5tb3ZlVG8ocixuKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OkpiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXR9fTtmdW5jdGlvbiBLU3QoZSl7cmV0dXJuIG5ldyAkU3QoZSl9ZnVuY3Rpb24gWlN0KGUsdCl7dGhpcy5fYmFzaXM9bmV3IGs1KGUpLHRoaXMuX2JldGE9dH1aU3QucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbj1lWzBdLGk9dFswXSxvPWVbcl0tbixhPXRbcl0taSxzPS0xLGw7KytzPD1yOylsPXMvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKmVbc10rKDEtdGhpcy5fYmV0YSkqKG4rbCpvKSx0aGlzLl9iZXRhKnRbc10rKDEtdGhpcy5fYmV0YSkqKGkrbCphKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O3ZhciBKU3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiB0PT09MT9uZXcgazUobik6bmV3IFpTdChuLHQpfXJldHVybiByLmJldGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguODUpO2Z1bmN0aW9uIFFiKGUsdCxyKXtlLl9jb250ZXh0LmJlemllckN1cnZlVG8oZS5feDErZS5fayooZS5feDItZS5feDApLGUuX3kxK2UuX2sqKGUuX3kyLWUuX3kwKSxlLl94MitlLl9rKihlLl94MS10KSxlLl95MitlLl9rKihlLl95MS1yKSxlLl94MixlLl95Mil9ZnVuY3Rpb24gVzgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fVc4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpRYih0aGlzLHRoaXMuX3gxLHRoaXMuX3kxKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKGUsdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5feDE9ZSx0aGlzLl95MT10O2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6UWIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciBRU3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgVzgobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCk7ZnVuY3Rpb24gWTgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fVk4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGU9K2UsdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9ZSx0aGlzLl95Mz10O2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PWUsdGhpcy5feTQ9dCk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9ZSx0aGlzLl95NT10O2JyZWFrO2RlZmF1bHQ6UWIodGhpcyxlLHQpO2JyZWFrfXRoaXMuX3gwPXRoaXMuX3gxLHRoaXMuX3gxPXRoaXMuX3gyLHRoaXMuX3gyPWUsdGhpcy5feTA9dGhpcy5feTEsdGhpcy5feTE9dGhpcy5feTIsdGhpcy5feTI9dH19O3ZhciB0M3Q9ZnVuY3Rpb24gZSh0KXtmdW5jdGlvbiByKG4pe3JldHVybiBuZXcgWTgobix0KX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oMCk7ZnVuY3Rpb24gajgoZSx0KXt0aGlzLl9jb250ZXh0PWUsdGhpcy5faz0oMS10KS82fWo4LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7KHRoaXMuX2xpbmV8fHRoaXMuX2xpbmUhPT0wJiZ0aGlzLl9wb2ludD09PTMpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihlLHQpe3N3aXRjaChlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0OlFiKHRoaXMsZSx0KTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgZTN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gbmV3IGo4KG4sdCl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gZSgrbil9LHJ9KDApO2Z1bmN0aW9uIFI1KGUsdCxyKXt2YXIgbj1lLl94MSxpPWUuX3kxLG89ZS5feDIsYT1lLl95MjtpZihlLl9sMDFfYT5ibyl7dmFyIHM9MiplLl9sMDFfMmErMyplLl9sMDFfYSplLl9sMTJfYStlLl9sMTJfMmEsbD0zKmUuX2wwMV9hKihlLl9sMDFfYStlLl9sMTJfYSk7bj0obipzLWUuX3gwKmUuX2wxMl8yYStlLl94MiplLl9sMDFfMmEpL2wsaT0oaSpzLWUuX3kwKmUuX2wxMl8yYStlLl95MiplLl9sMDFfMmEpL2x9aWYoZS5fbDIzX2E+Ym8pe3ZhciBjPTIqZS5fbDIzXzJhKzMqZS5fbDIzX2EqZS5fbDEyX2ErZS5fbDEyXzJhLHU9MyplLl9sMjNfYSooZS5fbDIzX2ErZS5fbDEyX2EpO289KG8qYytlLl94MSplLl9sMjNfMmEtdCplLl9sMTJfMmEpL3UsYT0oYSpjK2UuX3kxKmUuX2wyM18yYS1yKmUuX2wxMl8yYSkvdX1lLl9jb250ZXh0LmJlemllckN1cnZlVG8obixpLG8sYSxlLl94MixlLl95Mil9ZnVuY3Rpb24gcjN0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9cjN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKTticmVha30odGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6UjUodGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgbjN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgcjN0KG4sdCk6bmV3IFc4KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSk7ZnVuY3Rpb24gaTN0KGUsdCl7dGhpcy5fY29udGV4dD1lLHRoaXMuX2FscGhhPXR9aTN0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmRjLGFyZWFFbmQ6ZGMsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp7dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWt9Y2FzZSAyOnt0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVha31jYXNlIDM6e3RoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpO2JyZWFrfX19LHBvaW50OmZ1bmN0aW9uKGUsdCl7aWYoZT0rZSx0PSt0LHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi1lLG49dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gzPWUsdGhpcy5feTM9dDticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94ND1lLHRoaXMuX3k0PXQpO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX3g1PWUsdGhpcy5feTU9dDticmVhaztkZWZhdWx0OlI1KHRoaXMsZSx0KTticmVha310aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9ZSx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIG8zdD1mdW5jdGlvbiBlKHQpe2Z1bmN0aW9uIHIobil7cmV0dXJuIHQ/bmV3IGkzdChuLHQpOm5ldyBZOChuLDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKG4pe3JldHVybiBlKCtuKX0scn0oLjUpO2Z1bmN0aW9uIGEzdChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl9hbHBoYT10fWEzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0zKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtpZihlPStlLHQ9K3QsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLWUsbj10aGlzLl95Mi10O3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94Mix0aGlzLl95Mik6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLl9wb2ludD00O2RlZmF1bHQ6UjUodGhpcyxlLHQpO2JyZWFrfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPXR9fTt2YXIgczN0PWZ1bmN0aW9uIGUodCl7ZnVuY3Rpb24gcihuKXtyZXR1cm4gdD9uZXcgYTN0KG4sdCk6bmV3IGo4KG4sMCl9cmV0dXJuIHIuYWxwaGE9ZnVuY3Rpb24obil7cmV0dXJuIGUoK24pfSxyfSguNSk7ZnVuY3Rpb24gbDN0KGUpe3RoaXMuX2NvbnRleHQ9ZX1sM3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZGMsYXJlYUVuZDpkYyxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LHBvaW50OmZ1bmN0aW9uKGUsdCl7ZT0rZSx0PSt0LHRoaXMuX3BvaW50P3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6KHRoaXMuX3BvaW50PTEsdGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KSl9fTtmdW5jdGlvbiBjM3QoZSl7cmV0dXJuIG5ldyBsM3QoZSl9ZnVuY3Rpb24gdTN0KGUpe3JldHVybiBlPDA/LTE6MX1mdW5jdGlvbiBoM3QoZSx0LHIpe3ZhciBuPWUuX3gxLWUuX3gwLGk9dC1lLl94MSxvPShlLl95MS1lLl95MCkvKG58fGk8MCYmLTApLGE9KHItZS5feTEpLyhpfHxuPDAmJi0wKSxzPShvKmkrYSpuKS8obitpKTtyZXR1cm4odTN0KG8pK3UzdChhKSkqTWF0aC5taW4oTWF0aC5hYnMobyksTWF0aC5hYnMoYSksLjUqTWF0aC5hYnMocykpfHwwfWZ1bmN0aW9uIGYzdChlLHQpe3ZhciByPWUuX3gxLWUuX3gwO3JldHVybiByPygzKihlLl95MS1lLl95MCkvci10KS8yOnR9ZnVuY3Rpb24gdSQoZSx0LHIpe3ZhciBuPWUuX3gwLGk9ZS5feTAsbz1lLl94MSxhPWUuX3kxLHM9KG8tbikvMztlLl9jb250ZXh0LmJlemllckN1cnZlVG8obitzLGkrcyp0LG8tcyxhLXMqcixvLGEpfWZ1bmN0aW9uIFg4KGUpe3RoaXMuX2NvbnRleHQ9ZX1YOC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT10aGlzLl90MD1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gxLHRoaXMuX3kxKTticmVhaztjYXNlIDM6dSQodGhpcyx0aGlzLl90MCxmM3QodGhpcyx0aGlzLl90MCkpO2JyZWFrfSh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmdGhpcy5fcG9pbnQ9PT0xKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj1OYU47aWYoZT0rZSx0PSt0LCEoZT09PXRoaXMuX3gxJiZ0PT09dGhpcy5feTEpKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhlLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHUkKHRoaXMsZjN0KHRoaXMscj1oM3QodGhpcyxlLHQpKSxyKTticmVhaztkZWZhdWx0OnUkKHRoaXMsdGhpcy5fdDAscj1oM3QodGhpcyxlLHQpKTticmVha310aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT1lLHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXQsdGhpcy5fdDA9cn19fTtmdW5jdGlvbiBwM3QoZSl7dGhpcy5fY29udGV4dD1uZXcgZDN0KGUpfShwM3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoWDgucHJvdG90eXBlKSkucG9pbnQ9ZnVuY3Rpb24oZSx0KXtYOC5wcm90b3R5cGUucG9pbnQuY2FsbCh0aGlzLHQsZSl9O2Z1bmN0aW9uIGQzdChlKXt0aGlzLl9jb250ZXh0PWV9ZDN0LnByb3RvdHlwZT17bW92ZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7dGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0sbGluZVRvOmZ1bmN0aW9uKGUsdCl7dGhpcy5fY29udGV4dC5saW5lVG8odCxlKX0sYmV6aWVyQ3VydmVUbzpmdW5jdGlvbihlLHQscixuLGksbyl7dGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQsZSxuLHIsbyxpKX19O2Z1bmN0aW9uIG0zdChlKXtyZXR1cm4gbmV3IFg4KGUpfWZ1bmN0aW9uIGczdChlKXtyZXR1cm4gbmV3IHAzdChlKX1mdW5jdGlvbiB5M3QoZSl7dGhpcy5fY29udGV4dD1lfXkzdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl94LHQ9dGhpcy5feSxyPWUubGVuZ3RoO2lmKHIpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhlWzBdLHRbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKGVbMF0sdFswXSkscj09PTIpdGhpcy5fY29udGV4dC5saW5lVG8oZVsxXSx0WzFdKTtlbHNlIGZvcih2YXIgbj1fM3QoZSksaT1fM3QodCksbz0wLGE9MTthPHI7KytvLCsrYSl0aGlzLl9jb250ZXh0LmJlemllckN1cnZlVG8oblswXVtvXSxpWzBdW29dLG5bMV1bb10saVsxXVtvXSxlW2FdLHRbYV0pOyh0aGlzLl9saW5lfHx0aGlzLl9saW5lIT09MCYmcj09PTEpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lLHRoaXMuX3g9dGhpcy5feT1udWxsfSxwb2ludDpmdW5jdGlvbihlLHQpe3RoaXMuX3gucHVzaCgrZSksdGhpcy5feS5wdXNoKCt0KX19O2Z1bmN0aW9uIF8zdChlKXt2YXIgdCxyPWUubGVuZ3RoLTEsbixpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKTtmb3IoaVswXT0wLG9bMF09MixhWzBdPWVbMF0rMiplWzFdLHQ9MTt0PHItMTsrK3QpaVt0XT0xLG9bdF09NCxhW3RdPTQqZVt0XSsyKmVbdCsxXTtmb3IoaVtyLTFdPTIsb1tyLTFdPTcsYVtyLTFdPTgqZVtyLTFdK2Vbcl0sdD0xO3Q8cjsrK3Qpbj1pW3RdL29bdC0xXSxvW3RdLT1uLGFbdF0tPW4qYVt0LTFdO2ZvcihpW3ItMV09YVtyLTFdL29bci0xXSx0PXItMjt0Pj0wOy0tdClpW3RdPShhW3RdLWlbdCsxXSkvb1t0XTtmb3Iob1tyLTFdPShlW3JdK2lbci0xXSkvMix0PTA7dDxyLTE7Kyt0KW9bdF09MiplW3QrMV0taVt0KzFdO3JldHVybltpLG9dfWZ1bmN0aW9uIHYzdChlKXtyZXR1cm4gbmV3IHkzdChlKX1mdW5jdGlvbiAkOChlLHQpe3RoaXMuX2NvbnRleHQ9ZSx0aGlzLl90PXR9JDgucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feD10aGlzLl95PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MDx0aGlzLl90JiZ0aGlzLl90PDEmJnRoaXMuX3BvaW50PT09MiYmdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feCx0aGlzLl95KSwodGhpcy5fbGluZXx8dGhpcy5fbGluZSE9PTAmJnRoaXMuX3BvaW50PT09MSkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT49MCYmKHRoaXMuX3Q9MS10aGlzLl90LHRoaXMuX2xpbmU9MS10aGlzLl9saW5lKX0scG9pbnQ6ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZT0rZSx0PSt0LHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCk6dGhpcy5fY29udGV4dC5tb3ZlVG8oZSx0KTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OntpZih0aGlzLl90PD0wKXRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gsdCksdGhpcy5fY29udGV4dC5saW5lVG8oZSx0KTtlbHNle3ZhciByPXRoaXMuX3gqKDEtdGhpcy5fdCkrZSp0aGlzLl90O3RoaXMuX2NvbnRleHQubGluZVRvKHIsdGhpcy5feSksdGhpcy5fY29udGV4dC5saW5lVG8ocix0KX1icmVha319dGhpcy5feD1lLHRoaXMuX3k9dH19O2Z1bmN0aW9uIHgzdChlKXtyZXR1cm4gbmV3ICQ4KGUsLjUpfWZ1bmN0aW9uIGIzdChlKXtyZXR1cm4gbmV3ICQ4KGUsMCl9ZnVuY3Rpb24gdzN0KGUpe3JldHVybiBuZXcgJDgoZSwxKX1mdW5jdGlvbiB4dShlLHQpe2lmKChhPWUubGVuZ3RoKT4xKWZvcih2YXIgcj0xLG4saSxvPWVbdFswXV0sYSxzPW8ubGVuZ3RoO3I8YTsrK3IpZm9yKGk9byxvPWVbdFtyXV0sbj0wO248czsrK24pb1tuXVsxXSs9b1tuXVswXT1pc05hTihpW25dWzFdKT9pW25dWzBdOmlbbl1bMV19ZnVuY3Rpb24gYnUoZSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9bmV3IEFycmF5KHQpOy0tdD49MDspclt0XT10O3JldHVybiByfWZ1bmN0aW9uIEdFZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIFMzdCgpe3ZhciBlPXFlKFtdKSx0PWJ1LHI9eHUsbj1HRWU7ZnVuY3Rpb24gaShvKXt2YXIgYT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxzLGw9by5sZW5ndGgsYz1hLmxlbmd0aCx1PW5ldyBBcnJheShjKSxoO2ZvcihzPTA7czxjOysrcyl7Zm9yKHZhciBmPWFbc10scD11W3NdPW5ldyBBcnJheShsKSxkPTAsZztkPGw7KytkKXBbZF09Zz1bMCwrbihvW2RdLGYsZCxvKV0sZy5kYXRhPW9bZF07cC5rZXk9Zn1mb3Iocz0wLGg9dCh1KTtzPGM7KytzKXVbaFtzXV0uaW5kZXg9cztyZXR1cm4gcih1LGgpLHV9cmV0dXJuIGkua2V5cz1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10eXBlb2Ygbz09ImZ1bmN0aW9uIj9vOnFlKEk1LmNhbGwobykpLGkpOmV9LGkudmFsdWU9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIG89PSJmdW5jdGlvbiI/bzpxZSgrbyksaSk6bn0saS5vcmRlcj1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1vPT1udWxsP2J1OnR5cGVvZiBvPT0iZnVuY3Rpb24iP286cWUoSTUuY2FsbChvKSksaSk6dH0saS5vZmZzZXQ9ZnVuY3Rpb24obyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9bz09bnVsbD94dTpvLGkpOnJ9LGl9ZnVuY3Rpb24gTTN0KGUsdCl7aWYoKG49ZS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGk9MCxvPWVbMF0ubGVuZ3RoLGE7aTxvOysraSl7Zm9yKGE9cj0wO3I8bjsrK3IpYSs9ZVtyXVtpXVsxXXx8MDtpZihhKWZvcihyPTA7cjxuOysrcillW3JdW2ldWzFdLz1hfXh1KGUsdCl9fWZ1bmN0aW9uIEUzdChlLHQpe2lmKChsPWUubGVuZ3RoKT4wKWZvcih2YXIgcixuPTAsaSxvLGEscyxsLGM9ZVt0WzBdXS5sZW5ndGg7bjxjOysrbilmb3IoYT1zPTAscj0wO3I8bDsrK3IpKG89KGk9ZVt0W3JdXVtuXSlbMV0taVswXSk+MD8oaVswXT1hLGlbMV09YSs9byk6bzwwPyhpWzFdPXMsaVswXT1zKz1vKTooaVswXT0wLGlbMV09byl9ZnVuY3Rpb24gVDN0KGUsdCl7aWYoKGk9ZS5sZW5ndGgpPjApe2Zvcih2YXIgcj0wLG49ZVt0WzBdXSxpLG89bi5sZW5ndGg7cjxvOysrcil7Zm9yKHZhciBhPTAscz0wO2E8aTsrK2Epcys9ZVthXVtyXVsxXXx8MDtuW3JdWzFdKz1uW3JdWzBdPS1zLzJ9eHUoZSx0KX19ZnVuY3Rpb24gQzN0KGUsdCl7aWYoISghKChhPWUubGVuZ3RoKT4wKXx8ISgobz0oaT1lW3RbMF1dKS5sZW5ndGgpPjApKSl7Zm9yKHZhciByPTAsbj0xLGksbyxhO248bzsrK24pe2Zvcih2YXIgcz0wLGw9MCxjPTA7czxhOysrcyl7Zm9yKHZhciB1PWVbdFtzXV0saD11W25dWzFdfHwwLGY9dVtuLTFdWzFdfHwwLHA9KGgtZikvMixkPTA7ZDxzOysrZCl7dmFyIGc9ZVt0W2RdXSxfPWdbbl1bMV18fDAseT1nW24tMV1bMV18fDA7cCs9Xy15fWwrPWgsYys9cCpofWlbbi0xXVsxXSs9aVtuLTFdWzBdPXIsbCYmKHItPWMvbCl9aVtuLTFdWzFdKz1pW24tMV1bMF09cix4dShlLHQpfX1mdW5jdGlvbiBLOChlKXt2YXIgdD1lLm1hcChXRWUpO3JldHVybiBidShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIFdFZShlKXtmb3IodmFyIHQ9LTEscj0wLG49ZS5sZW5ndGgsaSxvPS0xLzA7Kyt0PG47KShpPStlW3RdWzFdKT5vJiYobz1pLHI9dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gWjgoZSl7dmFyIHQ9ZS5tYXAoaCQpO3JldHVybiBidShlKS5zb3J0KGZ1bmN0aW9uKHIsbil7cmV0dXJuIHRbcl0tdFtuXX0pfWZ1bmN0aW9uIGgkKGUpe2Zvcih2YXIgdD0wLHI9LTEsbj1lLmxlbmd0aCxpOysrcjxuOykoaT0rZVtyXVsxXSkmJih0Kz1pKTtyZXR1cm4gdH1mdW5jdGlvbiBBM3QoZSl7cmV0dXJuIFo4KGUpLnJldmVyc2UoKX1mdW5jdGlvbiBQM3QoZSl7dmFyIHQ9ZS5sZW5ndGgscixuLGk9ZS5tYXAoaCQpLG89SzgoZSksYT0wLHM9MCxsPVtdLGM9W107Zm9yKHI9MDtyPHQ7KytyKW49b1tyXSxhPHM/KGErPWlbbl0sbC5wdXNoKG4pKToocys9aVtuXSxjLnB1c2gobikpO3JldHVybiBjLnJldmVyc2UoKS5jb25jYXQobCl9ZnVuY3Rpb24gSTN0KGUpe3JldHVybiBidShlKS5yZXZlcnNlKCl9ZnVuY3Rpb24gZiQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIEwzdChlKXtyZXR1cm4gZVswXX1mdW5jdGlvbiBrM3QoZSl7cmV0dXJuIGVbMV19ZnVuY3Rpb24gcCQoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiB0MihlKXtlLlU9ZS5DPWUuTD1lLlI9ZS5QPWUuTj1udWxsfXAkLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cCQsaW5zZXJ0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKGUpe2lmKHQuUD1lLHQuTj1lLk4sZS5OJiYoZS5OLlA9dCksZS5OPXQsZS5SKXtmb3IoZT1lLlI7ZS5MOyllPWUuTDtlLkw9dH1lbHNlIGUuUj10O3I9ZX1lbHNlIHRoaXMuXz8oZT1SM3QodGhpcy5fKSx0LlA9bnVsbCx0Lk49ZSxlLlA9ZS5MPXQscj1lKToodC5QPXQuTj1udWxsLHRoaXMuXz10LHI9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9cix0LkM9ITAsZT10O3ImJnIuQzspbj1yLlUscj09PW4uTD8oaT1uLlIsaSYmaS5DPyhyLkM9aS5DPSExLG4uQz0hMCxlPW4pOihlPT09ci5SJiYoTjUodGhpcyxyKSxlPXIscj1lLlUpLHIuQz0hMSxuLkM9ITAsRDUodGhpcyxuKSkpOihpPW4uTCxpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLGU9bik6KGU9PT1yLkwmJihENSh0aGlzLHIpLGU9cixyPWUuVSksci5DPSExLG4uQz0hMCxONSh0aGlzLG4pKSkscj1lLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihlKXtlLk4mJihlLk4uUD1lLlApLGUuUCYmKGUuUC5OPWUuTiksZS5OPWUuUD1udWxsO3ZhciB0PWUuVSxyLG49ZS5MLGk9ZS5SLG8sYTtpZihuP2k/bz1SM3QoaSk6bz1uOm89aSx0P3QuTD09PWU/dC5MPW86dC5SPW86dGhpcy5fPW8sbiYmaT8oYT1vLkMsby5DPWUuQyxvLkw9bixuLlU9byxvIT09aT8odD1vLlUsby5VPWUuVSxlPW8uUix0Lkw9ZSxvLlI9aSxpLlU9byk6KG8uVT10LHQ9byxlPW8uUikpOihhPWUuQyxlPW8pLGUmJihlLlU9dCksIWEpe2lmKGUmJmUuQyl7ZS5DPSExO3JldHVybn1kb3tpZihlPT09dGhpcy5fKWJyZWFrO2lmKGU9PT10Lkwpe2lmKHI9dC5SLHIuQyYmKHIuQz0hMSx0LkM9ITAsTjUodGhpcyx0KSxyPXQuUiksci5MJiZyLkwuQ3x8ci5SJiZyLlIuQyl7KCFyLlJ8fCFyLlIuQykmJihyLkwuQz0hMSxyLkM9ITAsRDUodGhpcyxyKSxyPXQuUiksci5DPXQuQyx0LkM9ci5SLkM9ITEsTjUodGhpcyx0KSxlPXRoaXMuXzticmVha319ZWxzZSBpZihyPXQuTCxyLkMmJihyLkM9ITEsdC5DPSEwLEQ1KHRoaXMsdCkscj10LkwpLHIuTCYmci5MLkN8fHIuUiYmci5SLkMpeyghci5MfHwhci5MLkMpJiYoci5SLkM9ITEsci5DPSEwLE41KHRoaXMscikscj10LkwpLHIuQz10LkMsdC5DPXIuTC5DPSExLEQ1KHRoaXMsdCksZT10aGlzLl87YnJlYWt9ci5DPSEwLGU9dCx0PXQuVX13aGlsZSghZS5DKTtlJiYoZS5DPSExKX19fTtmdW5jdGlvbiBONShlLHQpe3ZhciByPXQsbj10LlIsaT1yLlU7aT9pLkw9PT1yP2kuTD1uOmkuUj1uOmUuXz1uLG4uVT1pLHIuVT1uLHIuUj1uLkwsci5SJiYoci5SLlU9ciksbi5MPXJ9ZnVuY3Rpb24gRDUoZSx0KXt2YXIgcj10LG49dC5MLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjplLl89bixuLlU9aSxyLlU9bixyLkw9bi5SLHIuTCYmKHIuTC5VPXIpLG4uUj1yfWZ1bmN0aW9uIFIzdChlKXtmb3IoO2UuTDspZT1lLkw7cmV0dXJuIGV9dmFyIGQkPXAkO2Z1bmN0aW9uIGUyKGUsdCxyLG4pe3ZhciBpPVtudWxsLG51bGxdLG89d28ucHVzaChpKS0xO3JldHVybiBpLmxlZnQ9ZSxpLnJpZ2h0PXQsciYmTzUoaSxlLHQsciksbiYmTzUoaSx0LGUsbiksVmFbZS5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksVmFbdC5pbmRleF0uaGFsZmVkZ2VzLnB1c2gobyksaX1mdW5jdGlvbiByMihlLHQscil7dmFyIG49W3Qscl07cmV0dXJuIG4ubGVmdD1lLG59ZnVuY3Rpb24gTzUoZSx0LHIsbil7IWVbMF0mJiFlWzFdPyhlWzBdPW4sZS5sZWZ0PXQsZS5yaWdodD1yKTplLmxlZnQ9PT1yP2VbMV09bjplWzBdPW59ZnVuY3Rpb24gWUVlKGUsdCxyLG4saSl7dmFyIG89ZVswXSxhPWVbMV0scz1vWzBdLGw9b1sxXSxjPWFbMF0sdT1hWzFdLGg9MCxmPTEscD1jLXMsZD11LWwsZztpZihnPXQtcywhKCFwJiZnPjApKXtpZihnLz1wLHA8MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWVsc2UgaWYocD4wKXtpZihnPmYpcmV0dXJuO2c+aCYmKGg9Zyl9aWYoZz1uLXMsISghcCYmZzwwKSl7aWYoZy89cCxwPDApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1lbHNlIGlmKHA+MCl7aWYoZzxoKXJldHVybjtnPGYmJihmPWcpfWlmKGc9ci1sLCEoIWQmJmc+MCkpe2lmKGcvPWQsZDwwKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9ZWxzZSBpZihkPjApe2lmKGc+ZilyZXR1cm47Zz5oJiYoaD1nKX1pZihnPWktbCwhKCFkJiZnPDApKXtpZihnLz1kLGQ8MCl7aWYoZz5mKXJldHVybjtnPmgmJihoPWcpfWVsc2UgaWYoZD4wKXtpZihnPGgpcmV0dXJuO2c8ZiYmKGY9Zyl9cmV0dXJuIShoPjApJiYhKGY8MSl8fChoPjAmJihlWzBdPVtzK2gqcCxsK2gqZF0pLGY8MSYmKGVbMV09W3MrZipwLGwrZipkXSkpLCEwfX19fX1mdW5jdGlvbiBqRWUoZSx0LHIsbixpKXt2YXIgbz1lWzFdO2lmKG8pcmV0dXJuITA7dmFyIGE9ZVswXSxzPWUubGVmdCxsPWUucmlnaHQsYz1zWzBdLHU9c1sxXSxoPWxbMF0sZj1sWzFdLHA9KGMraCkvMixkPSh1K2YpLzIsZyxfO2lmKGY9PT11KXtpZihwPHR8fHA+PW4pcmV0dXJuO2lmKGM+aCl7aWYoIWEpYT1bcCxyXTtlbHNlIGlmKGFbMV0+PWkpcmV0dXJuO289W3AsaV19ZWxzZXtpZighYSlhPVtwLGldO2Vsc2UgaWYoYVsxXTxyKXJldHVybjtvPVtwLHJdfX1lbHNlIGlmKGc9KGMtaCkvKGYtdSksXz1kLWcqcCxnPC0xfHxnPjEpaWYoYz5oKXtpZighYSlhPVsoci1fKS9nLHJdO2Vsc2UgaWYoYVsxXT49aSlyZXR1cm47bz1bKGktXykvZyxpXX1lbHNle2lmKCFhKWE9WyhpLV8pL2csaV07ZWxzZSBpZihhWzFdPHIpcmV0dXJuO289WyhyLV8pL2cscl19ZWxzZSBpZih1PGYpe2lmKCFhKWE9W3QsZyp0K19dO2Vsc2UgaWYoYVswXT49bilyZXR1cm47bz1bbixnKm4rX119ZWxzZXtpZighYSlhPVtuLGcqbitfXTtlbHNlIGlmKGFbMF08dClyZXR1cm47bz1bdCxnKnQrX119cmV0dXJuIGVbMF09YSxlWzFdPW8sITB9ZnVuY3Rpb24gTjN0KGUsdCxyLG4pe2Zvcih2YXIgaT13by5sZW5ndGgsbztpLS07KSghakVlKG89d29baV0sZSx0LHIsbil8fCFZRWUobyxlLHQscixuKXx8IShNYXRoLmFicyhvWzBdWzBdLW9bMV1bMF0pPkhyfHxNYXRoLmFicyhvWzBdWzFdLW9bMV1bMV0pPkhyKSkmJmRlbGV0ZSB3b1tpXX1mdW5jdGlvbiBEM3QoZSl7cmV0dXJuIFZhW2UuaW5kZXhdPXtzaXRlOmUsaGFsZmVkZ2VzOltdfX1mdW5jdGlvbiBYRWUoZSx0KXt2YXIgcj1lLnNpdGUsbj10LmxlZnQsaT10LnJpZ2h0O3JldHVybiByPT09aSYmKGk9bixuPXIpLGk/TWF0aC5hdGFuMihpWzFdLW5bMV0saVswXS1uWzBdKToocj09PW4/KG49dFsxXSxpPXRbMF0pOihuPXRbMF0saT10WzFdKSxNYXRoLmF0YW4yKG5bMF0taVswXSxpWzFdLW5bMV0pKX1mdW5jdGlvbiBtJChlLHQpe3JldHVybiB0WysodC5sZWZ0IT09ZS5zaXRlKV19ZnVuY3Rpb24gJEVlKGUsdCl7cmV0dXJuIHRbKyh0LmxlZnQ9PT1lLnNpdGUpXX1mdW5jdGlvbiBPM3QoKXtmb3IodmFyIGU9MCx0PVZhLmxlbmd0aCxyLG4saSxvO2U8dDsrK2UpaWYoKHI9VmFbZV0pJiYobz0obj1yLmhhbGZlZGdlcykubGVuZ3RoKSl7dmFyIGE9bmV3IEFycmF5KG8pLHM9bmV3IEFycmF5KG8pO2ZvcihpPTA7aTxvOysraSlhW2ldPWksc1tpXT1YRWUocix3b1tuW2ldXSk7Zm9yKGEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBzW2NdLXNbbF19KSxpPTA7aTxvOysraSlzW2ldPW5bYVtpXV07Zm9yKGk9MDtpPG87KytpKW5baV09c1tpXX19ZnVuY3Rpb24gejN0KGUsdCxyLG4pe3ZhciBpPVZhLmxlbmd0aCxvLGEscyxsLGMsdSxoLGYscCxkLGcsXyx5PSEwO2ZvcihvPTA7bzxpOysrbylpZihhPVZhW29dKXtmb3Iocz1hLnNpdGUsYz1hLmhhbGZlZGdlcyxsPWMubGVuZ3RoO2wtLTspd29bY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspZD0kRWUoYSx3b1tjW2xdXSksZz1kWzBdLF89ZFsxXSxoPW0kKGEsd29bY1srK2wldV1dKSxmPWhbMF0scD1oWzFdLChNYXRoLmFicyhnLWYpPkhyfHxNYXRoLmFicyhfLXApPkhyKSYmKGMuc3BsaWNlKGwsMCx3by5wdXNoKHIyKHMsZCxNYXRoLmFicyhnLWUpPEhyJiZuLV8+SHI/W2UsTWF0aC5hYnMoZi1lKTxIcj9wOm5dOk1hdGguYWJzKF8tbik8SHImJnItZz5Icj9bTWF0aC5hYnMocC1uKTxIcj9mOnIsbl06TWF0aC5hYnMoZy1yKTxIciYmXy10PkhyP1tyLE1hdGguYWJzKGYtcik8SHI/cDp0XTpNYXRoLmFicyhfLXQpPEhyJiZnLWU+SHI/W01hdGguYWJzKHAtdCk8SHI/ZjplLHRdOm51bGwpKS0xKSwrK3UpO3UmJih5PSExKX1pZih5KXt2YXIgeCxiLFMsQz0xLzA7Zm9yKG89MCx5PW51bGw7bzxpOysrbykoYT1WYVtvXSkmJihzPWEuc2l0ZSx4PXNbMF0tZSxiPXNbMV0tdCxTPXgqeCtiKmIsUzxDJiYoQz1TLHk9YSkpO2lmKHkpe3ZhciBQPVtlLHRdLGs9W2Usbl0sTz1bcixuXSxEPVtyLHRdO3kuaGFsZmVkZ2VzLnB1c2god28ucHVzaChyMihzPXkuc2l0ZSxQLGspKS0xLHdvLnB1c2gocjIocyxrLE8pKS0xLHdvLnB1c2gocjIocyxPLEQpKS0xLHdvLnB1c2gocjIocyxELFApKS0xKX19Zm9yKG89MDtvPGk7KytvKShhPVZhW29dKSYmKGEuaGFsZmVkZ2VzLmxlbmd0aHx8ZGVsZXRlIFZhW29dKX12YXIgRjN0PVtdLEo4O2Z1bmN0aW9uIEtFZSgpe3QyKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBjeShlKXt2YXIgdD1lLlAscj1lLk47aWYoISghdHx8IXIpKXt2YXIgbj10LnNpdGUsaT1lLnNpdGUsbz1yLnNpdGU7aWYobiE9PW8pe3ZhciBhPWlbMF0scz1pWzFdLGw9blswXS1hLGM9blsxXS1zLHU9b1swXS1hLGg9b1sxXS1zLGY9MioobCpoLWMqdSk7aWYoIShmPj0tQjN0KSl7dmFyIHA9bCpsK2MqYyxkPXUqdStoKmgsZz0oaCpwLWMqZCkvZixfPShsKmQtdSpwKS9mLHk9RjN0LnBvcCgpfHxuZXcgS0VlO3kuYXJjPWUseS5zaXRlPWkseS54PWcrYSx5Lnk9KHkuY3k9XytzKStNYXRoLnNxcnQoZypnK18qXyksZS5jaXJjbGU9eTtmb3IodmFyIHg9bnVsbCxiPW4yLl87YjspaWYoeS55PGIueXx8eS55PT09Yi55JiZ5Lng8PWIueClpZihiLkwpYj1iLkw7ZWxzZXt4PWIuUDticmVha31lbHNlIGlmKGIuUiliPWIuUjtlbHNle3g9YjticmVha31uMi5pbnNlcnQoeCx5KSx4fHwoSjg9eSl9fX19ZnVuY3Rpb24gdXkoZSl7dmFyIHQ9ZS5jaXJjbGU7dCYmKHQuUHx8KEo4PXQuTiksbjIucmVtb3ZlKHQpLEYzdC5wdXNoKHQpLHQyKHQpLGUuY2lyY2xlPW51bGwpfXZhciBWM3Q9W107ZnVuY3Rpb24gWkVlKCl7dDIodGhpcyksdGhpcy5lZGdlPXRoaXMuc2l0ZT10aGlzLmNpcmNsZT1udWxsfWZ1bmN0aW9uIEgzdChlKXt2YXIgdD1WM3QucG9wKCl8fG5ldyBaRWU7cmV0dXJuIHQuc2l0ZT1lLHR9ZnVuY3Rpb24gZyQoZSl7dXkoZSksaHkucmVtb3ZlKGUpLFYzdC5wdXNoKGUpLHQyKGUpfWZ1bmN0aW9uIFUzdChlKXt2YXIgdD1lLmNpcmNsZSxyPXQueCxuPXQuY3ksaT1bcixuXSxvPWUuUCxhPWUuTixzPVtlXTtnJChlKTtmb3IodmFyIGw9bztsLmNpcmNsZSYmTWF0aC5hYnMoci1sLmNpcmNsZS54KTxIciYmTWF0aC5hYnMobi1sLmNpcmNsZS5jeSk8SHI7KW89bC5QLHMudW5zaGlmdChsKSxnJChsKSxsPW87cy51bnNoaWZ0KGwpLHV5KGwpO2Zvcih2YXIgYz1hO2MuY2lyY2xlJiZNYXRoLmFicyhyLWMuY2lyY2xlLngpPEhyJiZNYXRoLmFicyhuLWMuY2lyY2xlLmN5KTxIcjspYT1jLk4scy5wdXNoKGMpLGckKGMpLGM9YTtzLnB1c2goYyksdXkoYyk7dmFyIHU9cy5sZW5ndGgsaDtmb3IoaD0xO2g8dTsrK2gpYz1zW2hdLGw9c1toLTFdLE81KGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSxjPXNbdS0xXSxjLmVkZ2U9ZTIobC5zaXRlLGMuc2l0ZSxudWxsLGkpLGN5KGwpLGN5KGMpfWZ1bmN0aW9uIHEzdChlKXtmb3IodmFyIHQ9ZVswXSxyPWVbMV0sbixpLG8sYSxzPWh5Ll87czspaWYobz1HM3QocyxyKS10LG8+SHIpcz1zLkw7ZWxzZSBpZihhPXQtSkVlKHMsciksYT5Icil7aWYoIXMuUil7bj1zO2JyZWFrfXM9cy5SfWVsc2V7bz4tSHI/KG49cy5QLGk9cyk6YT4tSHI/KG49cyxpPXMuTik6bj1pPXM7YnJlYWt9RDN0KGUpO3ZhciBsPUgzdChlKTtpZihoeS5pbnNlcnQobixsKSwhKCFuJiYhaSkpe2lmKG49PT1pKXt1eShuKSxpPUgzdChuLnNpdGUpLGh5Lmluc2VydChsLGkpLGwuZWRnZT1pLmVkZ2U9ZTIobi5zaXRlLGwuc2l0ZSksY3kobiksY3koaSk7cmV0dXJufWlmKCFpKXtsLmVkZ2U9ZTIobi5zaXRlLGwuc2l0ZSk7cmV0dXJufXV5KG4pLHV5KGkpO3ZhciBjPW4uc2l0ZSx1PWNbMF0saD1jWzFdLGY9ZVswXS11LHA9ZVsxXS1oLGQ9aS5zaXRlLGc9ZFswXS11LF89ZFsxXS1oLHk9MiooZipfLXAqZykseD1mKmYrcCpwLGI9ZypnK18qXyxTPVsoXyp4LXAqYikveSt1LChmKmItZyp4KS95K2hdO081KGkuZWRnZSxjLGQsUyksbC5lZGdlPWUyKGMsZSxudWxsLFMpLGkuZWRnZT1lMihlLGQsbnVsbCxTKSxjeShuKSxjeShpKX19ZnVuY3Rpb24gRzN0KGUsdCl7dmFyIHI9ZS5zaXRlLG49clswXSxpPXJbMV0sbz1pLXQ7aWYoIW8pcmV0dXJuIG47dmFyIGE9ZS5QO2lmKCFhKXJldHVybi0xLzA7cj1hLnNpdGU7dmFyIHM9clswXSxsPXJbMV0sYz1sLXQ7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGg9MS9vLTEvYyxmPXUvYztyZXR1cm4gaD8oLWYrTWF0aC5zcXJ0KGYqZi0yKmgqKHUqdS8oLTIqYyktbCtjLzIraS1vLzIpKSkvaCtuOihuK3MpLzJ9ZnVuY3Rpb24gSkVlKGUsdCl7dmFyIHI9ZS5OO2lmKHIpcmV0dXJuIEczdChyLHQpO3ZhciBuPWUuc2l0ZTtyZXR1cm4gblsxXT09PXQ/blswXToxLzB9dmFyIEhyPTFlLTYsQjN0PTFlLTEyLGh5LFZhLG4yLHdvO2Z1bmN0aW9uIFFFZShlLHQscil7cmV0dXJuKGVbMF0tclswXSkqKHRbMV0tZVsxXSktKGVbMF0tdFswXSkqKHJbMV0tZVsxXSl9ZnVuY3Rpb24gdDVlKGUsdCl7cmV0dXJuIHRbMV0tZVsxXXx8dFswXS1lWzBdfWZ1bmN0aW9uIHo1KGUsdCl7dmFyIHI9ZS5zb3J0KHQ1ZSkucG9wKCksbixpLG87Zm9yKHdvPVtdLFZhPW5ldyBBcnJheShlLmxlbmd0aCksaHk9bmV3IGQkLG4yPW5ldyBkJDs7KWlmKG89SjgsciYmKCFvfHxyWzFdPG8ueXx8clsxXT09PW8ueSYmclswXTxvLngpKShyWzBdIT09bnx8clsxXSE9PWkpJiYocTN0KHIpLG49clswXSxpPXJbMV0pLHI9ZS5wb3AoKTtlbHNlIGlmKG8pVTN0KG8uYXJjKTtlbHNlIGJyZWFrO2lmKE8zdCgpLHQpe3ZhciBhPSt0WzBdWzBdLHM9K3RbMF1bMV0sbD0rdFsxXVswXSxjPSt0WzFdWzFdO04zdChhLHMsbCxjKSx6M3QoYSxzLGwsYyl9dGhpcy5lZGdlcz13byx0aGlzLmNlbGxzPVZhLGh5PW4yPXdvPVZhPW51bGx9ejUucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp6NSxwb2x5Z29uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKHQpe3ZhciByPXQuaGFsZmVkZ2VzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbSQodCxlW25dKX0pO3JldHVybiByLmRhdGE9dC5zaXRlLmRhdGEscn0pfSx0cmlhbmdsZXM6ZnVuY3Rpb24oKXt2YXIgZT1bXSx0PXRoaXMuZWRnZXM7cmV0dXJuIHRoaXMuY2VsbHMuZm9yRWFjaChmdW5jdGlvbihyLG4pe2lmKCEhKHM9KG89ci5oYWxmZWRnZXMpLmxlbmd0aCkpZm9yKHZhciBpPXIuc2l0ZSxvLGE9LTEscyxsLGM9dFtvW3MtMV1dLHU9Yy5sZWZ0PT09aT9jLnJpZ2h0OmMubGVmdDsrK2E8czspbD11LGM9dFtvW2FdXSx1PWMubGVmdD09PWk/Yy5yaWdodDpjLmxlZnQsbCYmdSYmbjxsLmluZGV4JiZuPHUuaW5kZXgmJlFFZShpLGwsdSk8MCYmZS5wdXNoKFtpLmRhdGEsbC5kYXRhLHUuZGF0YV0pfSksZX0sbGlua3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUucmlnaHR9KS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTplLmxlZnQuZGF0YSx0YXJnZXQ6ZS5yaWdodC5kYXRhfX0pfSxmaW5kOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49dGhpcyxpLG89bi5fZm91bmR8fDAsYT1uLmNlbGxzLmxlbmd0aCxzOyEocz1uLmNlbGxzW29dKTspaWYoKytvPj1hKXJldHVybiBudWxsO3ZhciBsPWUtcy5zaXRlWzBdLGM9dC1zLnNpdGVbMV0sdT1sKmwrYypjO2RvIHM9bi5jZWxsc1tpPW9dLG89bnVsbCxzLmhhbGZlZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGgpe3ZhciBmPW4uZWRnZXNbaF0scD1mLmxlZnQ7aWYoISgocD09PXMuc2l0ZXx8IXApJiYhKHA9Zi5yaWdodCkpKXt2YXIgZD1lLXBbMF0sZz10LXBbMV0sXz1kKmQrZypnO188dSYmKHU9XyxvPXAuaW5kZXgpfX0pO3doaWxlKG8hPT1udWxsKTtyZXR1cm4gbi5fZm91bmQ9aSxyPT1udWxsfHx1PD1yKnI/cy5zaXRlOm51bGx9fTtmdW5jdGlvbiBXM3QoKXt2YXIgZT1MM3QsdD1rM3Qscj1udWxsO2Z1bmN0aW9uIG4oaSl7cmV0dXJuIG5ldyB6NShpLm1hcChmdW5jdGlvbihvLGEpe3ZhciBzPVtNYXRoLnJvdW5kKGUobyxhLGkpL0hyKSpIcixNYXRoLnJvdW5kKHQobyxhLGkpL0hyKSpIcl07cmV0dXJuIHMuaW5kZXg9YSxzLmRhdGE9byxzfSkscil9cmV0dXJuIG4ucG9seWdvbnM9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oaSkucG9seWdvbnMoKX0sbi5saW5rcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS5saW5rcygpfSxuLnRyaWFuZ2xlcz1mdW5jdGlvbihpKXtyZXR1cm4gbihpKS50cmlhbmdsZXMoKX0sbi54PWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXR5cGVvZiBpPT0iZnVuY3Rpb24iP2k6ZiQoK2kpLG4pOmV9LG4ueT1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgaT09ImZ1bmN0aW9uIj9pOmYkKCtpKSxuKTp0fSxuLmV4dGVudD1mdW5jdGlvbihpKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1pPT1udWxsP251bGw6W1sraVswXVswXSwraVswXVsxXV0sWytpWzFdWzBdLCtpWzFdWzFdXV0sbik6ciYmW1tyWzBdWzBdLHJbMF1bMV1dLFtyWzFdWzBdLHJbMV1bMV1dXX0sbi5zaXplPWZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWk9PW51bGw/bnVsbDpbWzAsMF0sWytpWzBdLCtpWzFdXV0sbik6ciYmW3JbMV1bMF0tclswXVswXSxyWzFdWzFdLXJbMF1bMV1dfSxufWttKCk7ZnVuY3Rpb24gRjUoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGV9fWZ1bmN0aW9uIF8kKGUsdCxyKXt0aGlzLnRhcmdldD1lLHRoaXMudHlwZT10LHRoaXMudHJhbnNmb3JtPXJ9ZnVuY3Rpb24gamgoZSx0LHIpe3RoaXMuaz1lLHRoaXMueD10LHRoaXMueT1yfWpoLnByb3RvdHlwZT17Y29uc3RydWN0b3I6amgsc2NhbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0xP3RoaXM6bmV3IGpoKHRoaXMuayplLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PTAmdD09PTA/dGhpczpuZXcgamgodGhpcy5rLHRoaXMueCt0aGlzLmsqZSx0aGlzLnkrdGhpcy5rKnQpfSxhcHBseTpmdW5jdGlvbihlKXtyZXR1cm5bZVswXSp0aGlzLmsrdGhpcy54LGVbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihlKXtyZXR1cm4gZSp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGUpe3JldHVyblsoZVswXS10aGlzLngpL3RoaXMuaywoZVsxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oZSl7cmV0dXJuKGUtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvcHkoKS5kb21haW4oZS5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGUuaW52ZXJ0LGUpKX0scmVzY2FsZVk6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29weSgpLmRvbWFpbihlLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoZS5pbnZlcnQsZSkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgWGg9bmV3IGpoKDEsMCwwKTtpMi5wcm90b3R5cGU9amgucHJvdG90eXBlO2Z1bmN0aW9uIGkyKGUpe2Zvcig7IWUuX196b29tOylpZighKGU9ZS5wYXJlbnROb2RlKSlyZXR1cm4gWGg7cmV0dXJuIGUuX196b29tfWZ1bmN0aW9uIFE4KCl7cXQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gbzIoKXtxdC5wcmV2ZW50RGVmYXVsdCgpLHF0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGU1ZSgpe3JldHVybiFxdC5jdHJsS2V5JiYhcXQuYnV0dG9ufWZ1bmN0aW9uIHI1ZSgpe3ZhciBlPXRoaXM7cmV0dXJuIGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhlPWUub3duZXJTVkdFbGVtZW50fHxlLGUuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/KGU9ZS52aWV3Qm94LmJhc2VWYWwsW1tlLngsZS55XSxbZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XV0pOltbMCwwXSxbZS53aWR0aC5iYXNlVmFsLnZhbHVlLGUuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXSk6W1swLDBdLFtlLmNsaWVudFdpZHRoLGUuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24gWTN0KCl7cmV0dXJuIHRoaXMuX196b29tfHxYaH1mdW5jdGlvbiBuNWUoKXtyZXR1cm4tcXQuZGVsdGFZKihxdC5kZWx0YU1vZGU9PT0xPy4wNTpxdC5kZWx0YU1vZGU/MTouMDAyKX1mdW5jdGlvbiBpNWUoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gbzVlKGUsdCxyKXt2YXIgbj1lLmludmVydFgodFswXVswXSktclswXVswXSxpPWUuaW52ZXJ0WCh0WzFdWzBdKS1yWzFdWzBdLG89ZS5pbnZlcnRZKHRbMF1bMV0pLXJbMF1bMV0sYT1lLmludmVydFkodFsxXVsxXSktclsxXVsxXTtyZXR1cm4gZS50cmFuc2xhdGUoaT5uPyhuK2kpLzI6TWF0aC5taW4oMCxuKXx8TWF0aC5tYXgoMCxpKSxhPm8/KG8rYSkvMjpNYXRoLm1pbigwLG8pfHxNYXRoLm1heCgwLGEpKX1mdW5jdGlvbiB0Uigpe3ZhciBlPWU1ZSx0PXI1ZSxyPW81ZSxuPW41ZSxpPWk1ZSxvPVswLDEvMF0sYT1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxzPTI1MCxsPXlMLGM9dnMoInN0YXJ0Iiwiem9vbSIsImVuZCIpLHUsaCxmPTUwMCxwPTE1MCxkPTA7ZnVuY3Rpb24gZyhMKXtMLnByb3BlcnR5KCJfX3pvb20iLFkzdCkub24oIndoZWVsLnpvb20iLFApLm9uKCJtb3VzZWRvd24uem9vbSIsaykub24oImRibGNsaWNrLnpvb20iLE8pLmZpbHRlcihpKS5vbigidG91Y2hzdGFydC56b29tIixEKS5vbigidG91Y2htb3ZlLnpvb20iLEIpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLEkpLnN0eWxlKCJ0b3VjaC1hY3Rpb24iLCJub25lIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1nLnRyYW5zZm9ybT1mdW5jdGlvbihMLFIsRil7dmFyIHo9TC5zZWxlY3Rpb24/TC5zZWxlY3Rpb24oKTpMO3oucHJvcGVydHkoIl9fem9vbSIsWTN0KSxMIT09ej9iKEwsUixGKTp6LmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMsYXJndW1lbnRzKS5zdGFydCgpLnpvb20obnVsbCx0eXBlb2YgUj09ImZ1bmN0aW9uIj9SLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpSKS5lbmQoKX0pfSxnLnNjYWxlQnk9ZnVuY3Rpb24oTCxSLEYpe2cuc2NhbGVUbyhMLGZ1bmN0aW9uKCl7dmFyIHo9dGhpcy5fX3pvb20uayxVPXR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlI7cmV0dXJuIHoqVX0sRil9LGcuc2NhbGVUbz1mdW5jdGlvbihMLFIsRil7Zy50cmFuc2Zvcm0oTCxmdW5jdGlvbigpe3ZhciB6PXQuYXBwbHkodGhpcyxhcmd1bWVudHMpLFU9dGhpcy5fX3pvb20sVz1GPT1udWxsP3goeik6dHlwZW9mIEY9PSJmdW5jdGlvbiI/Ri5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RixaPVUuaW52ZXJ0KFcpLHJ0PXR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkodGhpcyxhcmd1bWVudHMpOlI7cmV0dXJuIHIoeShfKFUscnQpLFcsWikseixhKX0sRil9LGcudHJhbnNsYXRlQnk9ZnVuY3Rpb24oTCxSLEYpe2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXtyZXR1cm4gcih0aGlzLl9fem9vbS50cmFuc2xhdGUodHlwZW9mIFI9PSJmdW5jdGlvbiI/Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyk6Uix0eXBlb2YgRj09ImZ1bmN0aW9uIj9GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhKX0pfSxnLnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKEwsUixGLHope2cudHJhbnNmb3JtKEwsZnVuY3Rpb24oKXt2YXIgVT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxXPXRoaXMuX196b29tLFo9ej09bnVsbD94KFUpOnR5cGVvZiB6PT0iZnVuY3Rpb24iP3ouYXBwbHkodGhpcyxhcmd1bWVudHMpOno7cmV0dXJuIHIoWGgudHJhbnNsYXRlKFpbMF0sWlsxXSkuc2NhbGUoVy5rKS50cmFuc2xhdGUodHlwZW9mIFI9PSJmdW5jdGlvbiI/LVIuYXBwbHkodGhpcyxhcmd1bWVudHMpOi1SLHR5cGVvZiBGPT0iZnVuY3Rpb24iPy1GLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotRiksVSxhKX0seil9O2Z1bmN0aW9uIF8oTCxSKXtyZXR1cm4gUj1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sUikpLFI9PT1MLms/TDpuZXcgamgoUixMLngsTC55KX1mdW5jdGlvbiB5KEwsUixGKXt2YXIgej1SWzBdLUZbMF0qTC5rLFU9UlsxXS1GWzFdKkwuaztyZXR1cm4gej09PUwueCYmVT09PUwueT9MOm5ldyBqaChMLmsseixVKX1mdW5jdGlvbiB4KEwpe3JldHVyblsoK0xbMF1bMF0rICtMWzFdWzBdKS8yLCgrTFswXVsxXSsgK0xbMV1bMV0pLzJdfWZ1bmN0aW9uIGIoTCxSLEYpe0wub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Uyh0aGlzLGFyZ3VtZW50cykuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXtTKHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciB6PXRoaXMsVT1hcmd1bWVudHMsVz1TKHosVSksWj10LmFwcGx5KHosVSkscnQ9Rj09bnVsbD94KFopOnR5cGVvZiBGPT0iZnVuY3Rpb24iP0YuYXBwbHkoeixVKTpGLG90PU1hdGgubWF4KFpbMV1bMF0tWlswXVswXSxaWzFdWzFdLVpbMF1bMV0pLHN0PXouX196b29tLFN0PXR5cGVvZiBSPT0iZnVuY3Rpb24iP1IuYXBwbHkoeixVKTpSLGJ0PWwoc3QuaW52ZXJ0KHJ0KS5jb25jYXQob3Qvc3QuayksU3QuaW52ZXJ0KHJ0KS5jb25jYXQob3QvU3QuaykpO3JldHVybiBmdW5jdGlvbihNdCl7aWYoTXQ9PT0xKU10PVN0O2Vsc2V7dmFyIGx0PWJ0KE10KSxLdD1vdC9sdFsyXTtNdD1uZXcgamgoS3QscnRbMF0tbHRbMF0qS3QscnRbMV0tbHRbMV0qS3QpfVcuem9vbShudWxsLE10KX19KX1mdW5jdGlvbiBTKEwsUixGKXtyZXR1cm4hRiYmTC5fX3pvb21pbmd8fG5ldyBDKEwsUil9ZnVuY3Rpb24gQyhMLFIpe3RoaXMudGhhdD1MLHRoaXMuYXJncz1SLHRoaXMuYWN0aXZlPTAsdGhpcy5leHRlbnQ9dC5hcHBseShMLFIpLHRoaXMudGFwcz0wfUMucHJvdG90eXBlPXtzdGFydDpmdW5jdGlvbigpe3JldHVybisrdGhpcy5hY3RpdmU9PT0xJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihMLFIpe3JldHVybiB0aGlzLm1vdXNlJiZMIT09Im1vdXNlIiYmKHRoaXMubW91c2VbMV09Ui5pbnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiZMIT09InRvdWNoIiYmKHRoaXMudG91Y2gwWzFdPVIuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJkwhPT0idG91Y2giJiYodGhpcy50b3VjaDFbMV09Ui5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPVIsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuLS10aGlzLmFjdGl2ZT09PTAmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWluZyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKEwpe01wKG5ldyBfJChnLEwsdGhpcy50aGF0Ll9fem9vbSksYy5hcHBseSxjLFtMLHRoaXMudGhhdCx0aGlzLmFyZ3NdKX19O2Z1bmN0aW9uIFAoKXtpZighZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpcmV0dXJuO3ZhciBMPVModGhpcyxhcmd1bWVudHMpLFI9dGhpcy5fX3pvb20sRj1NYXRoLm1heChvWzBdLE1hdGgubWluKG9bMV0sUi5rKk1hdGgucG93KDIsbi5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksej16byh0aGlzKTtpZihMLndoZWVsKShMLm1vdXNlWzBdWzBdIT09elswXXx8TC5tb3VzZVswXVsxXSE9PXpbMV0pJiYoTC5tb3VzZVsxXT1SLmludmVydChMLm1vdXNlWzBdPXopKSxjbGVhclRpbWVvdXQoTC53aGVlbCk7ZWxzZXtpZihSLms9PT1GKXJldHVybjtMLm1vdXNlPVt6LFIuaW52ZXJ0KHopXSxodSh0aGlzKSxMLnN0YXJ0KCl9bzIoKSxMLndoZWVsPXNldFRpbWVvdXQoVSxwKSxMLnpvb20oIm1vdXNlIixyKHkoXyhSLEYpLEwubW91c2VbMF0sTC5tb3VzZVsxXSksTC5leHRlbnQsYSkpO2Z1bmN0aW9uIFUoKXtMLndoZWVsPW51bGwsTC5lbmQoKX19ZnVuY3Rpb24gaygpe2lmKGh8fCFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSlyZXR1cm47dmFyIEw9Uyh0aGlzLGFyZ3VtZW50cywhMCksUj1IdChxdC52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLFcsITApLm9uKCJtb3VzZXVwLnpvb20iLFosITApLEY9em8odGhpcyksej1xdC5jbGllbnRYLFU9cXQuY2xpZW50WTt6bShxdC52aWV3KSxROCgpLEwubW91c2U9W0YsdGhpcy5fX3pvb20uaW52ZXJ0KEYpXSxodSh0aGlzKSxMLnN0YXJ0KCk7ZnVuY3Rpb24gVygpe2lmKG8yKCksIUwubW92ZWQpe3ZhciBydD1xdC5jbGllbnRYLXosb3Q9cXQuY2xpZW50WS1VO0wubW92ZWQ9cnQqcnQrb3Qqb3Q+ZH1MLnpvb20oIm1vdXNlIixyKHkoTC50aGF0Ll9fem9vbSxMLm1vdXNlWzBdPXpvKEwudGhhdCksTC5tb3VzZVsxXSksTC5leHRlbnQsYSkpfWZ1bmN0aW9uIFooKXtSLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLEZtKHF0LnZpZXcsTC5tb3ZlZCksbzIoKSxMLmVuZCgpfX1mdW5jdGlvbiBPKCl7aWYoISFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEw9dGhpcy5fX3pvb20sUj16byh0aGlzKSxGPUwuaW52ZXJ0KFIpLHo9TC5rKihxdC5zaGlmdEtleT8uNToyKSxVPXIoeShfKEwseiksUixGKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhKTtvMigpLHM+MD9IdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocykuY2FsbChiLFUsUik6SHQodGhpcykuY2FsbChnLnRyYW5zZm9ybSxVKX19ZnVuY3Rpb24gRCgpe2lmKCEhZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBMPXF0LnRvdWNoZXMsUj1MLmxlbmd0aCxGPVModGhpcyxhcmd1bWVudHMscXQuY2hhbmdlZFRvdWNoZXMubGVuZ3RoPT09UikseixVLFcsWjtmb3IoUTgoKSxVPTA7VTxSOysrVSlXPUxbVV0sWj1UcCh0aGlzLEwsVy5pZGVudGlmaWVyKSxaPVtaLHRoaXMuX196b29tLmludmVydChaKSxXLmlkZW50aWZpZXJdLEYudG91Y2gwPyFGLnRvdWNoMSYmRi50b3VjaDBbMl0hPT1aWzJdJiYoRi50b3VjaDE9WixGLnRhcHM9MCk6KEYudG91Y2gwPVosej0hMCxGLnRhcHM9MSshIXUpO3UmJih1PWNsZWFyVGltZW91dCh1KSkseiYmKEYudGFwczwyJiYodT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dT1udWxsfSxmKSksaHUodGhpcyksRi5zdGFydCgpKX19ZnVuY3Rpb24gQigpe2lmKCEhdGhpcy5fX3pvb21pbmcpe3ZhciBMPVModGhpcyxhcmd1bWVudHMpLFI9cXQuY2hhbmdlZFRvdWNoZXMsRj1SLmxlbmd0aCx6LFUsVyxaO2ZvcihvMigpLHUmJih1PWNsZWFyVGltZW91dCh1KSksTC50YXBzPTAsej0wO3o8RjsrK3opVT1SW3pdLFc9VHAodGhpcyxSLFUuaWRlbnRpZmllciksTC50b3VjaDAmJkwudG91Y2gwWzJdPT09VS5pZGVudGlmaWVyP0wudG91Y2gwWzBdPVc6TC50b3VjaDEmJkwudG91Y2gxWzJdPT09VS5pZGVudGlmaWVyJiYoTC50b3VjaDFbMF09Vyk7aWYoVT1MLnRoYXQuX196b29tLEwudG91Y2gxKXt2YXIgcnQ9TC50b3VjaDBbMF0sb3Q9TC50b3VjaDBbMV0sc3Q9TC50b3VjaDFbMF0sU3Q9TC50b3VjaDFbMV0sYnQ9KGJ0PXN0WzBdLXJ0WzBdKSpidCsoYnQ9c3RbMV0tcnRbMV0pKmJ0LE10PShNdD1TdFswXS1vdFswXSkqTXQrKE10PVN0WzFdLW90WzFdKSpNdDtVPV8oVSxNYXRoLnNxcnQoYnQvTXQpKSxXPVsocnRbMF0rc3RbMF0pLzIsKHJ0WzFdK3N0WzFdKS8yXSxaPVsob3RbMF0rU3RbMF0pLzIsKG90WzFdK1N0WzFdKS8yXX1lbHNlIGlmKEwudG91Y2gwKVc9TC50b3VjaDBbMF0sWj1MLnRvdWNoMFsxXTtlbHNlIHJldHVybjtMLnpvb20oInRvdWNoIixyKHkoVSxXLFopLEwuZXh0ZW50LGEpKX19ZnVuY3Rpb24gSSgpe2lmKCEhdGhpcy5fX3pvb21pbmcpe3ZhciBMPVModGhpcyxhcmd1bWVudHMpLFI9cXQuY2hhbmdlZFRvdWNoZXMsRj1SLmxlbmd0aCx6LFU7Zm9yKFE4KCksaCYmY2xlYXJUaW1lb3V0KGgpLGg9c2V0VGltZW91dChmdW5jdGlvbigpe2g9bnVsbH0sZiksej0wO3o8RjsrK3opVT1SW3pdLEwudG91Y2gwJiZMLnRvdWNoMFsyXT09PVUuaWRlbnRpZmllcj9kZWxldGUgTC50b3VjaDA6TC50b3VjaDEmJkwudG91Y2gxWzJdPT09VS5pZGVudGlmaWVyJiZkZWxldGUgTC50b3VjaDE7aWYoTC50b3VjaDEmJiFMLnRvdWNoMCYmKEwudG91Y2gwPUwudG91Y2gxLGRlbGV0ZSBMLnRvdWNoMSksTC50b3VjaDApTC50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KEwudG91Y2gwWzBdKTtlbHNlIGlmKEwuZW5kKCksTC50YXBzPT09Mil7dmFyIFc9SHQodGhpcykub24oImRibGNsaWNrLnpvb20iKTtXJiZXLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBnLndoZWVsRGVsdGE9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpGNSgrTCksZyk6bn0sZy5maWx0ZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dHlwZW9mIEw9PSJmdW5jdGlvbiI/TDpGNSghIUwpLGcpOmV9LGcudG91Y2hhYmxlPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXR5cGVvZiBMPT0iZnVuY3Rpb24iP0w6RjUoISFMKSxnKTppfSxnLmV4dGVudD1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD10eXBlb2YgTD09ImZ1bmN0aW9uIj9MOkY1KFtbK0xbMF1bMF0sK0xbMF1bMV1dLFsrTFsxXVswXSwrTFsxXVsxXV1dKSxnKTp0fSxnLnNjYWxlRXh0ZW50PWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvWzBdPStMWzBdLG9bMV09K0xbMV0sZyk6W29bMF0sb1sxXV19LGcudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhWzBdWzBdPStMWzBdWzBdLGFbMV1bMF09K0xbMV1bMF0sYVswXVsxXT0rTFswXVsxXSxhWzFdWzFdPStMWzFdWzFdLGcpOltbYVswXVswXSxhWzBdWzFdXSxbYVsxXVswXSxhWzFdWzFdXV19LGcuY29uc3RyYWluPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPUwsZyk6cn0sZy5kdXJhdGlvbj1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rTCxnKTpzfSxnLmludGVycG9sYXRlPWZ1bmN0aW9uKEwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPUwsZyk6bH0sZy5vbj1mdW5jdGlvbigpe3ZhciBMPWMub24uYXBwbHkoYyxhcmd1bWVudHMpO3JldHVybiBMPT09Yz9nOkx9LGcuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihMKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0oTD0rTCkqTCxnKTpNYXRoLnNxcnQoZCl9LGd9dmFyIGozdD1FZShPZSgpLDEpO3ZhciBlUj1jbGFzcyBleHRlbmRzIGJwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBlcmltZW50cz1bXX1sb2FkKCl7bGV0IHQ9dmUoKS5leHBlcmltZW50cygpO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57ajN0LmlzRXF1YWwodGhpcy5fZXhwZXJpbWVudHMscil8fCh0aGlzLl9leHBlcmltZW50cz1yLHRoaXMuZW1pdENoYW5nZSgpKX0pfWdldEV4cGVyaW1lbnRzKCl7cmV0dXJuIHRoaXMuX2V4cGVyaW1lbnRzLnNsaWNlKCl9fSxyUj1uZXcgZVI7dmFyIGE1ZT17Z29vZ2xlU3RhbmRhcmQ6WyIjZGI0NDM3IiwiI2ZmNzA0MyIsIiNmNGI0MDAiLCIjMGY5ZDU4IiwiIzAwNzk2YiIsIiMwMGFjYzEiLCIjNDI4NWY0IiwiIzVjNmJjMCIsIiNhYjQ3YmMiXSxnb29nbGVDb29sOlsiIzllOWQyNCIsIiMwZjlkNTgiLCIjMDA3OTZiIiwiIzAwYWNjMSIsIiM0Mjg1ZjQiLCIjNWM2YmMwIiwiIzYwN2Q4YiJdLGdvb2dsZVdhcm06WyIjNzk1NTQ4IiwiI2FiNDdiYyIsIiNmMDYyOTIiLCIjYzIxODViIiwiI2RiNDQzNyIsIiNmZjcwNDMiLCIjZjRiNDAwIl0sZ29vZ2xlQ29sb3JCbGluZEFzc2lzdDpbIiNmZjcwNDMiLCIjMDBBQ0MxIiwiI0FCNDdCQyIsIiMyQTU2QzYiLCIjMGI4MDQzIiwiI0Y3Q0I0RCIsIiNjMGNhMzMiLCIjNWUzNWIxIiwiI0E1MjcxNCJdLHRlbnNvcmJvYXJkQ29sb3JCbGluZEFzc2lzdDpbIiNmZjcwNDMiLCIjMDA3N2JiIiwiI2NjMzMxMSIsIiMzM2JiZWUiLCIjZWUzMzc3IiwiIzAwOTk4OCIsIiNiYmJiYmIiXSxjb2xvckJsaW5kQXNzaXN0MTpbIiM0NDc3YWEiLCIjNDRhYWFhIiwiI2FhYWE0NCIsIiNhYTc3NDQiLCIjYWE0NDU1IiwiI2FhNDQ4OCJdLGNvbG9yQmxpbmRBc3Npc3QyOlsiIzg4Y2NlZSIsIiM0NGFhOTkiLCIjMTE3NzMzIiwiIzk5OTkzMyIsIiNkZGNjNzciLCIjY2M2Njc3IiwiIzg4MjI1NSIsIiNhYTQ0OTkiXSxjb2xvckJsaW5kQXNzaXN0MzpbIiMzMzIyODgiLCIjNjY5OWNjIiwiIzg4Y2NlZSIsIiM0NGFhOTkiLCIjMTE3NzMzIiwiIzk5OTkzMyIsIiNkZGNjNzciLCIjY2M2Njc3IiwiI2FhNDQ2NiIsIiM4ODIyNTUiLCIjNjYxMTAwIiwiI2FhNDQ5OSJdLGNvbG9yQmxpbmRBc3Npc3Q0OlsiIzQ0NzdhYSIsIiM2NmNjZWUiLCIjMjI4ODMzIiwiI2NjYmI0NCIsIiNlZTY2NzciLCIjYWEzMzc3IiwiI2JiYmJiYiJdLGNvbG9yQmxpbmRBc3Npc3Q1OlsiI0ZGNkRCNiIsIiM5MjAwMDAiLCIjOTI0OTAwIiwiI0RCRDEwMCIsIiMyNEZGMjQiLCIjMDA2RERCIiwiIzQ5MDA5MiJdLG1sZGFzaDpbIiNFNDdFQUQiLCIjRjQ2NDBEIiwiI0ZBQTMwMCIsIiNGNUU2MzYiLCIjMDBBMDc3IiwiIzAwNzdCOCIsIiMwMEI3RUQiXX0sblI9YTVlLnRlbnNvcmJvYXJkQ29sb3JCbGluZEFzc2lzdDt2YXIgeSQ9Y2xhc3N7Y29uc3RydWN0b3IodD1uUil7dGhpcy5wYWxldHRlPXQsdGhpcy5pZGVudGlmaWVycz1KaSgpfXNldERvbWFpbih0KXtyZXR1cm4gdGhpcy5pZGVudGlmaWVycz1KaSgpLHQuZm9yRWFjaCgocixuKT0+e3RoaXMuaWRlbnRpZmllcnMuc2V0KHIsdGhpcy5wYWxldHRlW24ldGhpcy5wYWxldHRlLmxlbmd0aF0pfSksdGhpc31nZXRDb2xvcih0KXtpZighdGhpcy5pZGVudGlmaWVycy5oYXModCkpdGhyb3cgbmV3IEVycm9yKGBTdHJpbmcgJHt0fSB3YXMgbm90IGluIHRoZSBkb21haW4uYCk7cmV0dXJuIHRoaXMuaWRlbnRpZmllcnMuZ2V0KHQpfX07ZnVuY3Rpb24gWDN0KGUsdCl7bGV0IHI9bmV3IHkkO2Z1bmN0aW9uIG4oKXtyLnNldERvbWFpbih0KCkpfXJldHVybiBlLmFkZExpc3RlbmVyKG4pLG4oKSxpPT5yLmdldENvbG9yKGkpfXZhciBmbj1YM3Qod3AsKCk9PndwLmdldFJ1bnMoKSksbFFyPVgzdChyUiwoKT0+clIuZ2V0RXhwZXJpbWVudHMoKS5tYXAoKHtuYW1lOmV9KT0+ZSkpO3ZhciBvZz1FZShPZSgpLDEpO19zKHttb2R1bGVOYW1lOiJydW4tY29sb3Itc3R5bGUiLHN0eWxlQ29udGVudDpgCiAgICBbY29sb3ItY2xhc3M9J2xpZ2h0LWJsdWUnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1saWdodC1ibHVlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItbGlnaHQtYmx1ZS05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdyZWQnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXJlZC01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcmVkLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J2dyZWVuJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1ncmVlbi05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWdyZWVuLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3B1cnBsZSddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcHVycGxlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1wdXJwbGUtOTAwKTsKICAgIH0KICAgIFtjb2xvci1jbGFzcz0ndGVhbCddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLXRlYWwtOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci10ZWFsLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J3BpbmsnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItcGluay01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1waW5rLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItcGluay05MDApOwogICAgfQogICAgW2NvbG9yLWNsYXNzPSdvcmFuZ2UnXSBwYXBlci1jaGVja2JveCB7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLW9yYW5nZS01MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTkwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItb3JhbmdlLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J2Jyb3duJ10gcGFwZXItY2hlY2tib3ggewogICAgICAtLXBhcGVyLWNoZWNrYm94LWNoZWNrZWQtY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1icm93bi05MDApOwogICAgICAtLXBhcGVyLWNoZWNrYm94LXVuY2hlY2tlZC1pbmstY29sb3I6IHZhcigtLXBhcGVyLWJyb3duLTkwMCk7CiAgICB9CiAgICBbY29sb3ItY2xhc3M9J2luZGlnbyddIHBhcGVyLWNoZWNrYm94IHsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tNTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvcjogdmFyKC0tcGFwZXItaW5kaWdvLTUwMCk7CiAgICAgIC0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tOTAwKTsKICAgICAgLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtaW5rLWNvbG9yOiB2YXIoLS1wYXBlci1pbmRpZ28tOTAwKTsKICAgIH0KICBgfSk7dmFyIG9sPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm5hbWVzPVtdLHRoaXMuY29sb3Jpbmc9e2dldENvbG9yOigpPT4iIn0sdGhpcy5yZWdleD0iIix0aGlzLnNlbGVjdGlvblN0YXRlPXt9LHRoaXMubWF4TmFtZXNUb0VuYWJsZUJ5RGVmYXVsdD00MCx0aGlzLl9kZWJvdW5jZWRSZWdleENoYW5nZT10aGlzLl9kZWJvdW5jZWRSZWdleENoYW5nZUltcGwoKX1fZGVib3VuY2VkUmVnZXhDaGFuZ2VJbXBsKCl7dmFyIHQ9b2cuZGVib3VuY2Uocj0+e3RoaXMucmVnZXg9cn0sMTUwLHtsZWFkaW5nOiExfSk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9dGhpcy4kJCgiI25hbWVzLXJlZ2V4IikudmFsdWU7cj09IiI/dGhpcy5hc3luYygoKT0+e3RoaXMucmVnZXg9cn0sMzApOnQocil9fWdldCBfcmVnZXgoKXt2YXIgdD10aGlzLnJlZ2V4O3RyeXtyZXR1cm4gbmV3IFJlZ0V4cCh0KX1jYXRjaChyKXtyZXR1cm4gbnVsbH19X3NldElzb2xhdG9ySWNvbigpe3ZhciBpO3ZhciB0PXRoaXMuc2VsZWN0aW9uU3RhdGUscj1vZy5maWx0ZXIob2cudmFsdWVzKHQpKS5sZW5ndGgsbj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgoaT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pc29sYXRvciIpKTtuLmZvckVhY2goZnVuY3Rpb24obyl7cj09PTEmJnRbby5uYW1lXT9vLmljb249InJhZGlvLWJ1dHRvbi1jaGVja2VkIjpvLmljb249InJhZGlvLWJ1dHRvbi11bmNoZWNrZWQifSl9Y29tcHV0ZU5hbWVzTWF0Y2hpbmdSZWdleCh0LHIpe2xldCBuPXRoaXMuX3JlZ2V4O3JldHVybiBuP3RoaXMubmFtZXMuZmlsdGVyKGk9Pm4udGVzdChpKSk6dGhpcy5uYW1lc31jb21wdXRlT3V0U2VsZWN0ZWQodCxyKXt2YXIgbj10aGlzLnNlbGVjdGlvblN0YXRlLGk9dGhpcy5tYXhOYW1lc1RvRW5hYmxlQnlEZWZhdWx0LG89dGhpcy5uYW1lc01hdGNoaW5nUmVnZXgubGVuZ3RoPD1pO3JldHVybiB0aGlzLm5hbWVzTWF0Y2hpbmdSZWdleC5maWx0ZXIoYT0+blthXT09bnVsbD9vOm5bYV0pfXN5bmNocm9uaXplQ29sb3JzKHQpe3ZhciBpLG8sYSxzO3RoaXMuX3NldElzb2xhdG9ySWNvbigpLCgobz0oaT10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDppLnF1ZXJ5U2VsZWN0b3JBbGwoInBhcGVyLWNoZWNrYm94IikpIT1udWxsP286W10pLmZvckVhY2gobD0+e2xldCBjPXRoaXMuY29sb3JpbmcuZ2V0Q29sb3IobC5uYW1lKTtsLnVwZGF0ZVN0eWxlcyh7Ii0tcGFwZXItY2hlY2tib3gtY2hlY2tlZC1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC1jaGVja2VkLWluay1jb2xvciI6YywiLS1wYXBlci1jaGVja2JveC11bmNoZWNrZWQtY29sb3IiOmMsIi0tcGFwZXItY2hlY2tib3gtdW5jaGVja2VkLWluay1jb2xvciI6Y30pfSksKChzPShhPXRoaXMucm9vdCk9PW51bGw/dm9pZCAwOmEucXVlcnlTZWxlY3RvckFsbCgiLmlzb2xhdG9yIikpIT1udWxsP3M6W10pLmZvckVhY2gobD0+e2xldCBjPXRoaXMuY29sb3JpbmcuZ2V0Q29sb3IobC5uYW1lKTtsLnN0eWxlLmNvbG9yPWN9KSx3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy51cGRhdGVTdHlsZXMoKX0pfV9pc29sYXRlTmFtZSh0KXt2YXIgcj10LnRhcmdldC5uYW1lLG49e307dGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe25baV09aT09cn0pLHRoaXMuc2VsZWN0aW9uU3RhdGU9bn1fY2hlY2tib3hDaGFuZ2UodCl7dmFyIHI9dC50YXJnZXQ7bGV0IG49b2cuY2xvbmUodGhpcy5zZWxlY3Rpb25TdGF0ZSk7bltyLm5hbWVdPXIuY2hlY2tlZCx0aGlzLnNlbGVjdGlvblN0YXRlPW59X2lzQ2hlY2tlZCh0LHIpe3JldHVybiB0aGlzLm91dFNlbGVjdGVkLmluZGV4T2YodCkhPS0xfXRvZ2dsZUFsbCgpe2xldCB0PXRoaXMubmFtZXNNYXRjaGluZ1JlZ2V4LnNvbWUobj0+dGhpcy5vdXRTZWxlY3RlZC5pbmNsdWRlcyhuKSkscj17fTt0aGlzLm5hbWVzLmZvckVhY2gobj0+e3Jbbl09IXR9KSx0aGlzLnNlbGVjdGlvblN0YXRlPXJ9fTtvbC50ZW1wbGF0ZT1RYAogICAgPHN0eWxlIGluY2x1ZGU9InNjcm9sbGJhci1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZSBpbmNsdWRlPSJydW4tY29sb3Itc3R5bGUiPjwvc3R5bGU+CgogICAgPHBhcGVyLWlucHV0CiAgICAgIGlkPSJuYW1lcy1yZWdleCIKICAgICAgbm8tbGFiZWwtZmxvYXQ9IiIKICAgICAgbGFiZWw9IldyaXRlIGEgcmVnZXggdG8gZmlsdGVyIHJ1bnMiCiAgICAgIHZhbHVlPSJbW3JlZ2V4XV0iCiAgICAgIG9uLWJpbmQtdmFsdWUtY2hhbmdlZD0iX2RlYm91bmNlZFJlZ2V4Q2hhbmdlIgogICAgPjwvcGFwZXItaW5wdXQ+CiAgICA8ZGl2IGlkPSJvdXRlci1jb250YWluZXIiIGNsYXNzPSJzY3JvbGxiYXIiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0iW1tuYW1lc01hdGNoaW5nUmVnZXhdXSIKICAgICAgICBvbi1kb20tY2hhbmdlPSJzeW5jaHJvbml6ZUNvbG9ycyIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUtcm93Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9Imljb24tY29udGFpbmVyIGNoZWNrYm94LWNvbnRhaW5lciB2ZXJ0aWNhbC1hbGlnbi1jb250YWluZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNsYXNzPSJjaGVja2JveCB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgaWQkPSJjaGVja2JveC1bW2l0ZW1dXSIKICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICBjaGVja2VkJD0iW1tfaXNDaGVja2VkKGl0ZW0sIHNlbGVjdGlvblN0YXRlLiopXV0iCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfY2hlY2tib3hDaGFuZ2UiCiAgICAgICAgICAgID48L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJpY29uLWNvbnRhaW5lciBpc29sYXRvci1jb250YWluZXIgdmVydGljYWwtYWxpZ24tY29udGFpbmVyIgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICBpY29uPSJyYWRpby1idXR0b24tdW5jaGVja2VkIgogICAgICAgICAgICAgIGNsYXNzPSJpc29sYXRvciB2ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiCiAgICAgICAgICAgICAgb24tdGFwPSJfaXNvbGF0ZU5hbWUiCiAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtXV0iCiAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWxhYmVsLWNvbnRhaW5lciI+CiAgICAgICAgICAgIDxzcGFuPltbaXRlbV1dPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItaW5wdXQgewogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWZvY3VzLWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIH0KICAgICAgfQogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgICNvdXRlci1jb250YWluZXIgewogICAgICAgIGNvbnRhaW46IGNvbnRlbnQ7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5uYW1lLXJvdyB7CiAgICAgICAgY29udGFpbjogY29udGVudDsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7IC8qIG1ha2VzIHdyYXBwaW5nIG9mIGh5cGVycGFyYW0gc3RyaW5ncyBiZXR0ZXIgKi8KICAgICAgfQogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDJweDsKICAgICAgfQogICAgICAuY2hlY2tib3ggewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQogICAgICAuaXNvbGF0b3IgewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgIH0KICAgICAgLmlzb2xhdG9yLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA2cHg7CiAgICAgICAgcGFkZGluZy1yaWdodDogM3B4OwogICAgICB9CiAgICAgIC5jaGVja2JveC1jb250YWluZXIgewogICAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICB9CiAgICAgIC5pdGVtLWxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA1cHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIHdpZHRoOiAwcHg7IC8qIGhhY2sgdG8gZ2V0IHRoZSBmbGV4LWdyb3cgdG8gd29yayBwcm9wZXJseSAqLwogICAgICB9CiAgICAgIC50b29sdGlwLXZhbHVlLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LWdyb3c6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAycHg7CiAgICAgIH0KICAgICAgLnZlcnRpY2FsLWFsaWduLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi1jZW50ZXIgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgfQogICAgICAudmVydGljYWwtYWxpZ24tY29udGFpbmVyIC52ZXJ0aWNhbC1hbGlnbi10b3AgewogICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG9sLnByb3RvdHlwZSwibmFtZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb2wucHJvdG90eXBlLCJjb2xvcmluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sb2wucHJvdG90eXBlLCJyZWdleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LGNvbXB1dGVkOiJjb21wdXRlTmFtZXNNYXRjaGluZ1JlZ2V4KG5hbWVzLiosIF9yZWdleCkifSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sb2wucHJvdG90eXBlLCJuYW1lc01hdGNoaW5nUmVnZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG9sLnByb3RvdHlwZSwic2VsZWN0aW9uU3RhdGUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITAsY29tcHV0ZWQ6ImNvbXB1dGVPdXRTZWxlY3RlZChuYW1lc01hdGNoaW5nUmVnZXguKiwgc2VsZWN0aW9uU3RhdGUuKikifSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sb2wucHJvdG90eXBlLCJvdXRTZWxlY3RlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxvbC5wcm90b3R5cGUsIm1heE5hbWVzVG9FbmFibGVCeURlZmF1bHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sb2wucHJvdG90eXBlLCJfZGVib3VuY2VkUmVnZXhDaGFuZ2UiLHZvaWQgMCk7RShbUnQoInJlZ2V4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sb2wucHJvdG90eXBlLCJfcmVnZXgiLG51bGwpO0UoW0J0KCJzZWxlY3Rpb25TdGF0ZSIsIm5hbWVzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxvbC5wcm90b3R5cGUsIl9zZXRJc29sYXRvckljb24iLG51bGwpO29sPUUoW3l0KCJ0Zi1tdWx0aS1jaGVja2JveCIpXSxvbCk7dmFyIGEyPWNsYXNzIGV4dGVuZHMgbXR7Z2V0IF9wYXJ0cygpe3ZhciB0PXRoaXMudmFsdWUscj10aGlzLmRlbGltaXRlclBhdHRlcm47bGV0IG49W107Zm9yKDs7KXtsZXQgaT1uZXcgUmVnRXhwKHIsImciKTtpZihpLnRlc3QodCksaS5sYXN0SW5kZXg9PT0wKXtuLnB1c2godCk7YnJlYWt9ZWxzZSBuLnB1c2godC5zbGljZSgwLGkubGFzdEluZGV4KSksdD10LnNsaWNlKGkubGFzdEluZGV4KX1yZXR1cm4gbn19O2EyLnRlbXBsYXRlPVFgCiAgICA8IS0tCiAgICAgIFRoaXMgdWdseSBmb3JtYXR0aW5nIGlzIHJlcXVpcmVkIHRvIHByZXZlbnQgc3BhY2VzIGZyb20gc2xpcHBpbmcKICAgICAgaW50byB0aGUgSFRNTC4KICAgIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcGFydHNdXSIgYXM9InBhcnQiCiAgICAgID5bW3BhcnRdXTx3YnIKICAgIC8+PC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGEyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYTIucHJvdG90eXBlLCJkZWxpbWl0ZXJQYXR0ZXJuIix2b2lkIDApO0UoW1J0KCJ2YWx1ZSIsImRlbGltaXRlclBhdHRlcm4iKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGEyLnByb3RvdHlwZSwiX3BhcnRzIixudWxsKTthMj1FKFt5dCgidGYtd2JyLXN0cmluZyIpXSxhMik7dmFyIG1jPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJ1blNlbGVjdGlvblN0YXRlPXpXKCJydW5TZWxlY3Rpb25TdGF0ZSIse2RlZmF1bHRWYWx1ZTp7fX0pLmNhbGwodGhpcyksdGhpcy5yZWdleElucHV0PXlfKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSkuY2FsbCh0aGlzKSx0aGlzLl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoPTI1MCx0aGlzLl9kYXRhTG9jYXRpb25EZWxpbWl0ZXJQYXR0ZXJuPSJbLz1fLC1dIix0aGlzLmNvbG9yaW5nPXtnZXRDb2xvcjpmbn0sdGhpcy5fc3RvcmVSdW5TZWxlY3Rpb25TdGF0ZT1GVygicnVuU2VsZWN0aW9uU3RhdGUiLHtkZWZhdWx0VmFsdWU6e319KSx0aGlzLl9yZWdleE9ic2VydmVyPXZfKCJyZWdleElucHV0Iix7ZGVmYXVsdFZhbHVlOiIifSl9YXR0YWNoZWQoKXt0aGlzLl9ydW5TdG9yZUxpc3RlbmVyPXdwLmFkZExpc3RlbmVyKCgpPT57dGhpcy5zZXQoInJ1bnMiLHdwLmdldFJ1bnMoKSl9KSx0aGlzLnNldCgicnVucyIsd3AuZ2V0UnVucygpKSx0aGlzLl9lbnZTdG9yZUxpc3RlbmVyPWliLmFkZExpc3RlbmVyKCgpPT57dGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsaWIuZ2V0RGF0YUxvY2F0aW9uKCkpfSksdGhpcy5zZXQoImRhdGFMb2NhdGlvbiIsaWIuZ2V0RGF0YUxvY2F0aW9uKCkpfWRldGFjaGVkKCl7d3AucmVtb3ZlTGlzdGVuZXJCeUtleSh0aGlzLl9ydW5TdG9yZUxpc3RlbmVyKSxpYi5yZW1vdmVMaXN0ZW5lckJ5S2V5KHRoaXMuX2VudlN0b3JlTGlzdGVuZXIpfV90b2dnbGVBbGwoKXt0aGlzLiQubXVsdGlDaGVja2JveC50b2dnbGVBbGwoKX1nZXQgX2NsaXBwZWREYXRhTG9jYXRpb24oKXt2YXIgdD10aGlzLmRhdGFMb2NhdGlvbixyPXRoaXMuX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGg7aWYodCE9PXZvaWQgMClyZXR1cm4gdC5sZW5ndGg+cj90LnN1YnN0cmluZygwLHIpOnR9X29wZW5EYXRhTG9jYXRpb25EaWFsb2codCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuJCQoIiNkYXRhLWxvY2F0aW9uLWRpYWxvZyIpLm9wZW4oKX1fc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbih0LHIpe3JldHVybiB0JiZ0Lmxlbmd0aD5yfX07bWMudGVtcGxhdGU9UWAKICAgIDxwYXBlci1kaWFsb2cgd2l0aC1iYWNrZHJvcD0iIiBpZD0iZGF0YS1sb2NhdGlvbi1kaWFsb2ciPgogICAgICA8aDI+RGF0YSBMb2NhdGlvbjwvaDI+CiAgICAgIDx0Zi13YnItc3RyaW5nCiAgICAgICAgdmFsdWU9IltbZGF0YUxvY2F0aW9uXV0iCiAgICAgICAgZGVsaW1pdGVyLXBhdHRlcm49IltbX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm5dXSIKICAgICAgPgogICAgICA8L3RmLXdici1zdHJpbmcKICAgID48L3BhcGVyLWRpYWxvZz4KICAgIDxkaXYgaWQ9InRvcC10ZXh0Ij4KICAgICAgPGgzIGlkPSJ0b29sdGlwLWhlbHAiIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+UnVuczwvaDM+CiAgICA8L2Rpdj4KICAgIDx0Zi1tdWx0aS1jaGVja2JveAogICAgICBpZD0ibXVsdGlDaGVja2JveCIKICAgICAgbmFtZXM9IltbcnVuc11dIgogICAgICBzZWxlY3Rpb24tc3RhdGU9Int7cnVuU2VsZWN0aW9uU3RhdGV9fSIKICAgICAgb3V0LXNlbGVjdGVkPSJ7e3NlbGVjdGVkUnVuc319IgogICAgICByZWdleD0ie3tyZWdleElucHV0fX0iCiAgICAgIGNvbG9yaW5nPSJbW2NvbG9yaW5nXV0iCiAgICA+PC90Zi1tdWx0aS1jaGVja2JveD4KICAgIDxwYXBlci1idXR0b24gY2xhc3M9IngtYnV0dG9uIiBpZD0idG9nZ2xlLWFsbCIgb24tdGFwPSJfdG9nZ2xlQWxsIj4KICAgICAgVG9nZ2xlIEFsbCBSdW5zCiAgICA8L3BhcGVyLWJ1dHRvbj4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tkYXRhTG9jYXRpb25dXSI+CiAgICAgIDxkaXYgaWQ9ImRhdGEtbG9jYXRpb24iPgogICAgICAgIDx0Zi13YnItc3RyaW5nCiAgICAgICAgICB2YWx1ZT0iW1tfY2xpcHBlZERhdGFMb2NhdGlvbl1dIgogICAgICAgICAgZGVsaW1pdGVyLXBhdHRlcm49IltbX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm5dXSIKICAgICAgICA+PC90Zi13YnItc3RyaW5nCiAgICAgICAgPjwhLS0KICAgICAgICAgIFdlIHVzZSBIVE1MIGNvbW1lbnRzIHRvIHJlbW92ZSBzcGFjZXMgYmVmb3JlIHRoZSBlbGxpcHNpcy4KICAgICAgICAtLT48dGVtcGxhdGUKICAgICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgICBpZj0iW1tfc2hvdWxkU2hvd0V4cGFuZERhdGFMb2NhdGlvbkJ1dHRvbihkYXRhTG9jYXRpb24sIF9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoKV1dIgogICAgICAgICAgPjwhLS0KICAgICAgICAgIC0tPjxhIGhyZWY9IiIgb24tY2xpY2s9Il9vcGVuRGF0YUxvY2F0aW9uRGlhbG9nIj7igKY8L2E+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgICAgI3RvcC10ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxNnB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KICAgICAgdGYtd2JyLXN0cmluZyB7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICB0Zi1tdWx0aS1jaGVja2JveCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAueC1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgIH0KICAgICAgI3Rvb2x0aXAtaGVscCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7CiAgICAgIH0KICAgICAgI2RhdGEtbG9jYXRpb24gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi11aS1kYXJrLWFjY2VudCk7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbjogNXB4IDAgMCAwOwogICAgICAgIG1heC13aWR0aDogMjg4cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3N0b3JlUnVuU2VsZWN0aW9uU3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG1jLnByb3RvdHlwZSwicnVuU2VsZWN0aW9uU3RhdGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsb2JzZXJ2ZXI6Il9yZWdleE9ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsInJlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxtYy5wcm90b3R5cGUsInNlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbWMucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxtYy5wcm90b3R5cGUsImRhdGFMb2NhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxtYy5wcm90b3R5cGUsIl9kYXRhTG9jYXRpb25DbGlwTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG1jLnByb3RvdHlwZSwiX2RhdGFMb2NhdGlvbkRlbGltaXRlclBhdHRlcm4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbWMucHJvdG90eXBlLCJjb2xvcmluZyIsdm9pZCAwKTtFKFtSdCgiZGF0YUxvY2F0aW9uIiwiX2RhdGFMb2NhdGlvbkNsaXBMZW5ndGgiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxtYy5wcm90b3R5cGUsIl9jbGlwcGVkRGF0YUxvY2F0aW9uIixudWxsKTttYz1FKFt5dCgidGYtcnVucy1zZWxlY3RvciIpXSxtYyk7dmFyIGFuPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jYW5jZWxsYXRpb25Db3VudD0wfWNhbmNlbGxhYmxlKHQpe2xldCByPXRoaXMuY2FuY2VsbGF0aW9uQ291bnQ7cmV0dXJuIG49PntsZXQgaT10aGlzLmNhbmNlbGxhdGlvbkNvdW50IT09cjtyZXR1cm4gdCh7dmFsdWU6bixjYW5jZWxsZWQ6aX0pfX1jYW5jZWxBbGwoKXt0aGlzLmNhbmNlbGxhdGlvbkNvdW50Kyt9fTt2YXIgQjU9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaHRtbD0iIn1nZXQgc2FuaXRpemVkSHRtbCgpe3JldHVybiB0aGlzLmh0bWx9YXR0YWNoZWQoKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5zY29wZVN1YnRyZWUodGhpcy4kLm1hcmtkb3duLCEwKX0pfX07QjUudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9Im1hcmtkb3duIiBpbm5lci1oLXQtbS1sPSJbW3Nhbml0aXplZEh0bWxdXSI+PC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC8qCiAgICAgICAqIFJlZHVjZSB0b3Btb3N0IGFuZCBib3R0b21tb3N0IG1hcmdpbnMgZnJvbSAxNnB4IHRvIDAuM2VtIChyZW5kZXJzCiAgICAgICAqIGF0IGFib3V0IDQuOHB4KSB0byBrZWVwIHRoZSBsYXlvdXQgY29tcGFjdC4gVGhpcyBpbXByb3ZlcyB0aGUKICAgICAgICogYXBwZWFyYW5jZSB3aGVuIHRoZXJlIGlzIG9ubHkgb25lIGxpbmUgb2YgdGV4dDsgc3RhbmRhcmQgTWFya2Rvd24KICAgICAgICogcmVuZGVyZXJzIHdpbGwgc3RpbGwgaW5jbHVkZSBhIFxgPHA+XGAgZWxlbWVudC4KICAgICAgICoKICAgICAgICogQnkgdGFyZ2V0aW5nIG9ubHkgdGhlIHRvcC1sZXZlbCwgZXh0cmVtYWwgZWxlbWVudHMsIHdlIHByZXNlcnZlIGFueQogICAgICAgKiBhY3R1YWwgcGFyYWdyYXBoIGJyZWFrcyBhbmQgb25seSBjaGFuZ2UgdGhlIHBhZGRpbmcgYWdhaW5zdCB0aGUKICAgICAgICogY29tcG9uZW50IGVkZ2VzLgogICAgICAgKi8KICAgICAgI21hcmtkb3duID4gcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMC4zZW07CiAgICAgIH0KICAgICAgI21hcmtkb3duID4gcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjNlbTsKICAgICAgfQoKICAgICAgLyogUGxlYXNhbnQgc3R5bGVzIGZvciBNYXJrZG93biB0YWJsZXMuICovCiAgICAgICNtYXJrZG93biB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgfQogICAgICAjbWFya2Rvd24gdGFibGUgdGggewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRoLAogICAgICAjbWFya2Rvd24gdGFibGUgdGQgewogICAgICAgIHBhZGRpbmc6IDZweCAxM3B4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlciwgI2RmZTJlNSk7CiAgICAgIH0KICAgICAgI21hcmtkb3duIHRhYmxlIHRyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS10Yi11aS1ib3JkZXIsICNjNmNiZDEpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQjUucHJvdG90eXBlLCJodG1sIix2b2lkIDApO0UoW1J0KCJodG1sIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sQjUucHJvdG90eXBlLCJzYW5pdGl6ZWRIdG1sIixudWxsKTtCNT1FKFt5dCgidGYtbWFya2Rvd24tdmlldyIpXSxCNSk7X3Moe21vZHVsZU5hbWU6InRmLWNhcmQtaGVhZGluZy1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIGZpZ2NhcHRpb24gewogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAvKiogSG9yaXpvbnRhbCBsaW5lIG9mIGxhYmVscy4gKi8KICAgIC5oZWFkaW5nLXJvdyB7CiAgICAgIG1hcmdpbi10b3A6IC00cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAvKiogUGllY2Ugb2YgdGV4dCBpbiB0aGUgZmlndXJlIGNhcHRpb24uICovCiAgICAuaGVhZGluZy1sYWJlbCB7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIH0KCiAgICAvKiogTWFrZXMgbGFiZWwgc2hvdyBvbiB0aGUgcmlnaHQuICovCiAgICAuaGVhZGluZy1yaWdodCB7CiAgICAgIGZsZXgtZ3JvdzogMDsKICAgIH0KICBgfSk7ZnVuY3Rpb24gczIoZSl7cmV0dXJuIGU/ZS50b1N0cmluZygpLnJlcGxhY2UoL0dNVC1cZCsgXCgoW14pXSspXCkvLCIkMSIpOiIifWZ1bmN0aW9uICQzdChlKXtsZXQgdD1sNWUoZSk7cmV0dXJuIHQ/TWF0aC5yb3VuZCgodFswXSoyOTkrdFsxXSo1ODcrdFsyXSoxMTQpLzFlMyk+MTI1PyJpbmhlcml0IjoiI2VlZSI6ImluaGVyaXQifWZ1bmN0aW9uIGw1ZShlKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgdD1lLm1hdGNoKC9eIyhbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KShbMC05YS1mXXsxLDJ9KSQvKTtpZighdClyZXR1cm4gbnVsbDtpZihlLmxlbmd0aD09NClmb3IodmFyIHI9MTtyPD0zO3IrKyl0W3JdPXRbcl0rdFtyXTtyZXR1cm5bcGFyc2VJbnQodFsxXSwxNikscGFyc2VJbnQodFsyXSwxNikscGFyc2VJbnQodFszXSwxNildfXZhciBnYz1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRpc3BsYXlOYW1lPW51bGwsdGhpcy50YWc9bnVsbCx0aGlzLnJ1bj1udWxsLHRoaXMuZGVzY3JpcHRpb249bnVsbCx0aGlzLmNvbG9yPW51bGx9X3VwZGF0ZUhlYWRpbmdTdHlsZSgpe3RoaXMudXBkYXRlU3R5bGVzKHsiLS10Zi1jYXJkLWhlYWRpbmctYmFja2dyb3VuZC1jb2xvciI6dGhpcy5fcnVuQmFja2dyb3VuZCwiLS10Zi1jYXJkLWhlYWRpbmctY29sb3IiOnRoaXMuX3J1bkNvbG9yfSl9X2NvbXB1dGVSdW5CYWNrZ3JvdW5kKHQpe3JldHVybiB0fHwibm9uZSJ9X2NvbXB1dGVSdW5Db2xvcih0KXtyZXR1cm4gJDN0KHQpfWdldCBfbmFtZUxhYmVsKCl7dmFyIHQ9dGhpcy5kaXNwbGF5TmFtZSxyPXRoaXMudGFnO3JldHVybiB0fHxyfHwiIn1nZXQgX3RhZ0xhYmVsKCl7dmFyIHQ9dGhpcy5kaXNwbGF5TmFtZSxyPXRoaXMudGFnO3JldHVybiByJiZyIT09dD9yOiIifV90b2dnbGVEZXNjcmlwdGlvbkRpYWxvZyh0KXtsZXQgcj10aGlzLiQuZGVzY3JpcHRpb25EaWFsb2c7ci5wb3NpdGlvblRhcmdldD10LnRhcmdldCxyLnRvZ2dsZSgpfX07Z2MudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgIDxmaWdjYXB0aW9uIGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX25hbWVMYWJlbF1dIj4KICAgICAgICAgICAgPGRpdiBpdGVtcHJvcD0ibmFtZSIgY2xhc3M9ImhlYWRpbmctbGFiZWwgbmFtZSI+W1tfbmFtZUxhYmVsXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbcnVuXV0iPgogICAgICAgICAgICA8IS0tIEV4dHJhIHdyYXBwaW5nIHNwYW4gbmVlZGVkIHRvIGF2b2lkIGZsZXhib3ggYmxvY2tpZmljYXRpb24uIC0tPgogICAgICAgICAgICA8IS0tIChzZWUgZmxleGJveCBzcGVjLCBzZWN0aW9uIDQgIkZsZXggSXRlbXMiKSAtLT4KICAgICAgICAgICAgPHNwYW4+CiAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgIGl0ZW1wcm9wPSJydW4iCiAgICAgICAgICAgICAgICBpZD0iaGVhZGluZy1ydW4iCiAgICAgICAgICAgICAgICBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0IHJ1biIKICAgICAgICAgICAgICAgID5bW3J1bl1dPC9zcGFuCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfdGFnTGFiZWxdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctbGFiZWwiPgogICAgICAgICAgICAgIHRhZzogPHNwYW4gaXRlbXByb3A9InRhZyI+W1tfdGFnTGFiZWxdXTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9maWdjYXB0aW9uPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbZGVzY3JpcHRpb25dXSI+CiAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICBpY29uPSJpbmZvIgogICAgICAgICAgb24tdGFwPSJfdG9nZ2xlRGVzY3JpcHRpb25EaWFsb2ciCiAgICAgICAgICB0aXRsZT0iU2hvdyBzdW1tYXJ5IGRlc2NyaXB0aW9uIgogICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8cGFwZXItZGlhbG9nCiAgICAgICAgaWQ9ImRlc2NyaXB0aW9uRGlhbG9nIgogICAgICAgIG5vLW92ZXJsYXA9IiIKICAgICAgICBob3Jpem9udGFsLWFsaWduPSJhdXRvIgogICAgICAgIHZlcnRpY2FsLWFsaWduPSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlPgogICAgICAgICAgPHRmLW1hcmtkb3duLXZpZXcgaHRtbD0iW1tkZXNjcmlwdGlvbl1dIj48L3RmLW1hcmtkb3duLXZpZXc+CiAgICAgICAgPC9wYXBlci1kaWFsb2ctc2Nyb2xsYWJsZT4KICAgICAgPC9wYXBlci1kaWFsb2c+CiAgICA8L2Rpdj4KICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jYXJkLWhlYWRpbmctc3R5bGUiPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgIC5jb250ZW50IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICAgIC5uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLnJ1biB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBwYWRkaW5nOiAxcHggNHB4IDJweDsKICAgICAgfQogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICB9CiAgICAgIHBhcGVyLWRpYWxvZy1zY3JvbGxhYmxlIHsKICAgICAgICBtYXgtd2lkdGg6IDY0MHB4OwogICAgICB9CiAgICAgICNoZWFkaW5nLXJ1biB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGYtY2FyZC1oZWFkaW5nLWJhY2tncm91bmQtY29sb3IpOwogICAgICAgIGNvbG9yOiB2YXIoLS10Zi1jYXJkLWhlYWRpbmctY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZ2MucHJvdG90eXBlLCJkaXNwbGF5TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxnYy5wcm90b3R5cGUsImRlc2NyaXB0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGdjLnByb3RvdHlwZSwiY29sb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlUnVuQmFja2dyb3VuZChjb2xvcikiLHJlYWRPbmx5OiEwLG9ic2VydmVyOiJfdXBkYXRlSGVhZGluZ1N0eWxlIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxnYy5wcm90b3R5cGUsIl9ydW5CYWNrZ3JvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLGNvbXB1dGVkOiJfY29tcHV0ZVJ1bkNvbG9yKGNvbG9yKSIscmVhZE9ubHk6ITAsb2JzZXJ2ZXI6Il91cGRhdGVIZWFkaW5nU3R5bGUifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGdjLnByb3RvdHlwZSwiX3J1bkNvbG9yIix2b2lkIDApO0UoW1J0KCJkaXNwbGF5TmFtZSIsInRhZyIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGdjLnByb3RvdHlwZSwiX25hbWVMYWJlbCIsbnVsbCk7RShbUnQoImRpc3BsYXlOYW1lIiwidGFnIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZ2MucHJvdG90eXBlLCJfdGFnTGFiZWwiLG51bGwpO2djPUUoW3l0KCJ0Zi1jYXJkLWhlYWRpbmciKV0sZ2MpO3ZhciBGaT1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fbWV0YWRhdGFDYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3N0ZXBzPVtdLHRoaXMuX2F0dGFjaGVkPSExfWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gZm4odCl9Z2V0IF9oYXNBdExlYXN0T25lU3RlcCgpe3ZhciB0PXRoaXMuX3N0ZXBzO3JldHVybiEhdCYmdC5sZW5ndGg+MH1nZXQgX2hhc011bHRpcGxlU3RlcHMoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjF9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4gdC5sZW5ndGgtMX1nZXQgX2N1cnJlbnREYXR1bSgpe3ZhciB0PXRoaXMuX3N0ZXBzLHI9dGhpcy5fc3RlcEluZGV4O3JldHVybiB0W3JdfWdldCBfc2FtcGxlVGV4dCgpe3ZhciB0PXRoaXMuc2FtcGxlO3JldHVybmAke3QrMX1gfWdldCBfaGFzTXVsdGlwbGVTYW1wbGVzKCl7dmFyIHQ9dGhpcy50b3RhbFNhbXBsZXM7cmV0dXJuIHQ+MX1hdHRhY2hlZCgpe3RoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X3JlbG9hZE9uUnVuVGFnQ2hhbmdlKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5fYXR0YWNoZWQpcmV0dXJuO3RoaXMuX21ldGFkYXRhQ2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCByPXZlKCkucGx1Z2luUm91dGUoImF1ZGlvIiwiL2F1ZGlvIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLHNhbXBsZTpTdHJpbmcodGhpcy5zYW1wbGUpfSkpLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj1uZXcgVVJMU2VhcmNoUGFyYW1zKHQucXVlcnkpO3IuYXBwZW5kKCJ0cyIsU3RyaW5nKHQud2FsbF90aW1lKSk7bGV0IG49dmUoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvaW5kaXZpZHVhbEF1ZGlvIixyKTtyZXR1cm57d2FsbF90aW1lOnMyKG5ldyBEYXRlKHQud2FsbF90aW1lKjFlMykpLHN0ZXA6dC5zdGVwLGxhYmVsOnQubGFiZWwsY29udGVudFR5cGU6dC5jb250ZW50VHlwZSx1cmw6bn19fTtGaS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU2FtcGxlc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nLWxhYmVsIj4KICAgICAgICAgICAgc2FtcGxlOiBbW19zYW1wbGVUZXh0XV0gb2YgW1t0b3RhbFNhbXBsZXNdXQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAgPHN0cm9uZz5bW19jdXJyZW50RGF0dW0uc3RlcF1dPC9zdHJvbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfY3VycmVudERhdHVtLndhbGxfdGltZV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0Ij4KICAgICAgICAgICAgICBbW19jdXJyZW50RGF0dW0ud2FsbF90aW1lXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc011bHRpcGxlU3RlcHNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgc25hcHM9IiIKICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwXV0iPgogICAgICA8YXVkaW8KICAgICAgICBjb250cm9scz0iIgogICAgICAgIHNyYyQ9IltbX2N1cnJlbnREYXR1bS51cmxdXSIKICAgICAgICB0eXBlJD0iW1tfY3VycmVudERhdHVtLmNvbnRlbnRUeXBlXV0iCiAgICAgID48L2F1ZGlvPgogICAgICA8dGYtbWFya2Rvd24tdmlldyBodG1sPSJbW19jdXJyZW50RGF0dW0ubGFiZWxdXSI+PC90Zi1tYXJrZG93bi12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDxkaXYgaWQ9Im1haW4tYXVkaW8tY29udGFpbmVyIj48L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAzNTBweDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcjogIzQyNDI0MjsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTVweDsKICAgICAgfQoKICAgICAgI3N0ZXBzIHsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIHBhZGRpbmc6IDAgNXB4OyAvKiBzbyB0aGUgc2xpZGVyIGtub2IgZG9lc24ndCBidXR0IG91dCAqLwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgICAtLXBhcGVyLXNsaWRlci1hY3RpdmUtY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2ItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXN0ZXAtc2xpZGVyLWtub2ItY29sb3IpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1zdGFydC1jb2xvcjogdmFyKC0tc3RlcC1zbGlkZXIta25vYi1jb2xvcik7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxGaS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxGaS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGaS5wcm90b3R5cGUsInNhbXBsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGaS5wcm90b3R5cGUsInRvdGFsU2FtcGxlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxGaS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sRmkucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLEZpLnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxGaS5wcm90b3R5cGUsIl9zdGVwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxGaS5wcm90b3R5cGUsIl9zdGVwSW5kZXgiLHZvaWQgMCk7RShbUnQoInJ1biIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX3J1bkNvbG9yIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2hhc0F0TGVhc3RPbmVTdGVwIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEZpLnByb3RvdHlwZSwiX2hhc011bHRpcGxlU3RlcHMiLG51bGwpO0UoW1J0KCJfc3RlcHMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9tYXhTdGVwSW5kZXgiLG51bGwpO0UoW1J0KCJfc3RlcHMiLCJfc3RlcEluZGV4IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfY3VycmVudERhdHVtIixudWxsKTtFKFtSdCgic2FtcGxlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRmkucHJvdG90eXBlLCJfc2FtcGxlVGV4dCIsbnVsbCk7RShbUnQoInRvdGFsU2FtcGxlcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxGaS5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVNhbXBsZXMiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEZpLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtGaT1FKFt5dCgidGYtYXVkaW8tbG9hZGVyIildLEZpKTt2YXIgJGg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEF1ZGlvKCl9KX1fZmV0Y2hUYWdzKCl7bGV0IHQ9dmUoKS5wbHVnaW5Sb3V0ZSgiYXVkaW8iLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKGZ5LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1meS5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsaS5sZW5ndGg9PT0wKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIscil9KX1fcmVsb2FkQXVkaW8oKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWF1ZGlvLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXI7bGV0IGk9ZnkubWFwVmFsdWVzKHQsbD0+T2JqZWN0LmtleXMobCkpLG89UWwoaSxyLG4pO2Z1bmN0aW9uIGEobCl7bGV0IGM9dFtsLnJ1bl1bbC50YWddLnNhbXBsZXM7cmV0dXJuIGZ5LnJhbmdlKGMpLm1hcCh1PT5PYmplY3QuYXNzaWduKHt9LGwse3NhbXBsZTp1LHRvdGFsU2FtcGxlczpjfSkpfXJldHVybiBvLm1hcChsPT5PYmplY3QuYXNzaWduKHt9LGwse2l0ZW1zOltdLmNvbmNhdC5hcHBseShbXSxsLml0ZW1zLm1hcChhKSl9KSl9X3RhZ01ldGFkYXRhKHQscixuKXtyZXR1cm4gdFtyXVtuXX19OyRoLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3IKICAgICAgICAgICAgaWQ9InJ1bnMtc2VsZWN0b3IiCiAgICAgICAgICAgIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319IgogICAgICAgICAgPjwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBhdWRpbyBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgYXVkaW8gZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0bwogICAgICAgICAgICAgIGFkZCBkYXRhIGFuZCBzZXQgdXAgeW91ciBldmVudCBmaWxlcywgY2hlY2sgb3V0IHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgICA+UkVBRE1FPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy9nZXRfc3RhcnRlZC9zdW1tYXJpZXNfYW5kX3RlbnNvcmJvYXJkIgogICAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgICAgPi4KICAgICAgICAgICAgPC9wPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICAgID50aGUgc2VjdGlvbiBvZiB0aGUgUkVBRE1FIGRldm90ZWQgdG8gbWlzc2luZyBkYXRhIHByb2JsZW1zPC9hCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0Zi10YWctZmlsdGVyZXIgdGFnLWZpbHRlcj0ie3tfdGFnRmlsdGVyfX0iPjwvdGYtdGFnLWZpbHRlcmVyPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfY2F0ZWdvcmllc11dIiBhcz0iY2F0ZWdvcnkiPgogICAgICAgICAgICA8dGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXcKICAgICAgICAgICAgICBjYXRlZ29yeT0iW1tjYXRlZ29yeV1dIgogICAgICAgICAgICAgIGluaXRpYWwtb3BlbmVkPSJbW19zaG91bGRPcGVuKGluZGV4KV1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLWF1ZGlvLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgc2FtcGxlPSJbW2l0ZW0uc2FtcGxlXV0iCiAgICAgICAgICAgICAgICAgIHRvdGFsLXNhbXBsZXM9IltbaXRlbS50b3RhbFNhbXBsZXNdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgID48L3RmLWF1ZGlvLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkaC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLCRoLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSwkaC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSwkaC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sJGgucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sJGgucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sJGgucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7JGg9RShbeXQoInRmLWF1ZGlvLWRhc2hib2FyZCIpXSwkaCk7dmFyIEg1PWNsYXNzIGV4dGVuZHMgR3QobXQpe2F0dGFjaGVkKCl7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMuZ2V0RWZmZWN0aXZlQ2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMubGlzdGVuKHQsInRhcCIsIl9zZWxlY3RUYXJnZXQiKX0uYmluZCh0aGlzKSl9KX1fc2VsZWN0VGFyZ2V0KHQpe3RoaXMuc2VsZWN0ZWRJZD10LmN1cnJlbnRUYXJnZXQuaWR9X3NlbGVjdGVkSWRDaGFuZ2VkKCl7dmFyIHQ9dGhpcy5xdWVyeUVmZmVjdGl2ZUNoaWxkcmVuKCIjIit0aGlzLnNlbGVjdGVkSWQpOyF0fHwodGhpcy5nZXRFZmZlY3RpdmVDaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24ocil7ci5jbGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpfSksdC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpKX19O0g1LnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ3cmFwIj4KICAgICAgPGgzPltbbmFtZV1dPC9oMz4KICAgICAgPGRpdiBjbGFzcz0iY29udGVudC13cmFwcGVyIj48c2xvdD48L3Nsb3Q+PC9kaXY+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoKikgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQtd3JhcHBlciA6OnNsb3R0ZWQoLnNlbGVjdGVkKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktZGFyay1hY2NlbnQpOwogICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICBoMyB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBtYXJnaW46IDAgMCA1cHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxINS5wcm90b3R5cGUsIm5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLG9ic2VydmVyOiJfc2VsZWN0ZWRJZENoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEg1LnByb3RvdHlwZSwic2VsZWN0ZWRJZCIsdm9pZCAwKTtINT1FKFt5dCgidGYtb3B0aW9uLXNlbGVjdG9yIildLEg1KTtmdW5jdGlvbiBpUihlLHQpe2xldCByLG49e307T2JqZWN0LmtleXMoZSkuZm9yRWFjaChhPT57bGV0IHM9ZVthXTtyPT09dm9pZCAwJiYocj1zLmRpc3BsYXlOYW1lKSxyIT09cy5kaXNwbGF5TmFtZSYmKHI9bnVsbCksbltzLmRlc2NyaXB0aW9uXT09PXZvaWQgMCYmKG5bcy5kZXNjcmlwdGlvbl09W10pLG5bcy5kZXNjcmlwdGlvbl0ucHVzaChhKX0pO2xldCBpPXIhPW51bGw/cjp0LG89KCgpPT57bGV0IGE9T2JqZWN0LmtleXMobik7cmV0dXJuIGEubGVuZ3RoPT09MD8iIjphLmxlbmd0aD09PTE/YVswXTpgPHA+PHN0cm9uZz5NdWx0aXBsZSBkZXNjcmlwdGlvbnM6PC9zdHJvbmc+PC9wPjx1bD4ke2EubWFwKGM9PntsZXQgdT1uW2NdLm1hcChwPT5gPGNvZGU+JHtwLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyYvZywiJmFtcDsiKX08L2NvZGU+YCksaD11Lmxlbmd0aD4yP3Uuc2xpY2UoMCx1Lmxlbmd0aC0xKS5qb2luKCIsICIpKyIsIGFuZCAiK3VbdS5sZW5ndGgtMV06dS5qb2luKCIgYW5kICIpO3JldHVybmA8bGk+PHA+Rm9yICR7YzVlKHUubGVuZ3RoLCJydW4iLCJydW5zIil9ICR7aH06PC9wPiR7Y308L2xpPmB9KS5qb2luKCIiKX08L3VsPmB9KSgpO3JldHVybntkaXNwbGF5TmFtZTppLGRlc2NyaXB0aW9uOm99fWZ1bmN0aW9uIGM1ZShlLHQscil7cmV0dXJuIGU9PT0xP3Q6cn12YXIgWjN0PUVlKE9lKCksMSk7dmFyIEhwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMud2VpZ2h0PS42LHRoaXMuX3VwZGF0ZVdlaWdodD1aM3QuZGVib3VuY2UoZnVuY3Rpb24odCl7dGhpcy53ZWlnaHQ9dH0sMjUwKX1faW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXJDaGFuZ2VkKCl7dGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PXRoaXMuX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyLnRvU3RyaW5nKCksdGhpcy5fdXBkYXRlV2VpZ2h0LmNhbGwodGhpcyx0aGlzLl9pbW1lZGlhdGVXZWlnaHROdW1iZXJGb3JQYXBlclNsaWRlcil9X2lucHV0V2VpZ2h0U3RyaW5nRm9yUGFwZXJJbnB1dENoYW5nZWQoKXsrdGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PDA/dGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PSIwIjordGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0PjEmJih0aGlzLl9pbnB1dFdlaWdodFN0cmluZ0ZvclBhcGVySW5wdXQ9IjEiKTt2YXIgdD0rdGhpcy5faW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0O2lzTmFOKHQpfHx0aGlzLl91cGRhdGVXZWlnaHQuY2FsbCh0aGlzLHQpfX07SHAudGVtcGxhdGU9UWAKICAgIDxoMyBjbGFzcz0idGl0bGUiPlNtb290aGluZzwvaDM+CiAgICA8ZGl2IGNsYXNzPSJzbW9vdGhpbmctYmxvY2siPgogICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgaWQ9InNsaWRlciIKICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyfX0iCiAgICAgICAgbWF4PSJbW21heF1dIgogICAgICAgIG1pbj0iW1ttaW5dXSIKICAgICAgICBwaW4KICAgICAgICBzdGVwPSJbW3N0ZXBdXSIKICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgdmFsdWU9Int7d2VpZ2h0fX0iCiAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgaWQ9ImlucHV0IgogICAgICAgIGxhYmVsPSJ3ZWlnaHQiCiAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICB2YWx1ZT0ie3tfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0fX0iCiAgICAgICAgdHlwZT0ibnVtYmVyIgogICAgICAgIHN0ZXA9Iltbc3RlcF1dIgogICAgICAgIG1pbj0iW1ttaW5dXSIKICAgICAgICBtYXg9IltbbWF4XV0iCiAgICAgID48L3BhcGVyLWlucHV0PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIC50aXRsZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAuc21vb3RoaW5nLWJsb2NrIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CgogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBmbGV4LWdyb3c6IDI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWlucHV0IHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICB9CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxIcC5wcm90b3R5cGUsInN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJtYXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJtaW4iLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEhwLnByb3RvdHlwZSwid2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMCxvYnNlcnZlcjoiX2ltbWVkaWF0ZVdlaWdodE51bWJlckZvclBhcGVyU2xpZGVyQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSHAucHJvdG90eXBlLCJfaW1tZWRpYXRlV2VpZ2h0TnVtYmVyRm9yUGFwZXJTbGlkZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSHAucHJvdG90eXBlLCJfaW5wdXRXZWlnaHRTdHJpbmdGb3JQYXBlcklucHV0Iix2b2lkIDApO0hwPUUoW3l0KCJ0Zi1zbW9vdGhpbmctaW5wdXQiKV0sSHApO3ZhciBZbz1FZShPZSgpLDEpO2Z1bmN0aW9uIENuKGUsdCl7bGV0IHI9T2JqZWN0LmtleXModCkuc29ydCgpLmZpbHRlcihhPT50W2FdIT09dm9pZCAwKTtpZighci5sZW5ndGgpcmV0dXJuIGU7bGV0IG49ZS5pbmRleE9mKCI/IikhPT0tMT8iJiI6Ij8iLG89QXJyYXkoKS5jb25jYXQoLi4uci5tYXAoYT0+e2xldCBzPXRbYV07cmV0dXJuKEFycmF5LmlzQXJyYXkocyk/czpbc10pLm1hcChjPT5gJHthfT0ke3U1ZShjKX1gKX0pKS5qb2luKCImIik7cmV0dXJuIGUrbitvfWZ1bmN0aW9uIHU1ZShlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1woL2csIiUyOCIpLnJlcGxhY2UoL1wpL2csIiUyOSIpfXZhciBHS3Q9RWUoT2UoKSwxKSxIV249RWUod2woKSwxKTt2YXIgSUt0PUVlKE9lKCksMSk7dmFyIHY0OyhmdW5jdGlvbihlKXtlW2UuTE9BRElORz0wXT0iTE9BRElORyIsZVtlLkxPQURFRD0xXT0iTE9BREVEIn0pKHY0fHwodjQ9e30pKTtmdW5jdGlvbiBrUyhlKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmxvYWRLZXk9IiIsdGhpcy5kYXRhVG9Mb2FkPVtdLHRoaXMuZ2V0RGF0YUxvYWROYW1lPXI9PlN0cmluZyhyKSx0aGlzLmRhdGFMb2FkaW5nPSExLHRoaXMuZGF0YUxvYWRlZEF0TGVhc3RPbmNlPSExLHRoaXMuX2lzQ29ubmVjdGVkPSExLHRoaXMuX2RhdGFMb2FkU3RhdGU9bmV3IE1hcCx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX2xvYWREYXRhQXN5bmM9bnVsbCx0aGlzLl9sb2FkRGF0YT1JS3QudGhyb3R0bGUodGhpcy5fbG9hZERhdGFJbXBsLDEwMCx7bGVhZGluZzohMCx0cmFpbGluZzohMH0pfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9pc0Nvbm5lY3RlZD0hMH1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5faXNDb25uZWN0ZWQ9ITF9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2FjdGl2ZTp7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfbG9hZERhdGFJZkFjdGl2ZSJ9LF9pc0Nvbm5lY3RlZDp7dHlwZTpCb29sZWFufSxsb2FkS2V5Ont0eXBlOlN0cmluZ30sZGF0YVRvTG9hZDp7dHlwZTpBcnJheX0sZ2V0RGF0YUxvYWROYW1lOnt0eXBlOk9iamVjdH0sbG9hZERhdGFDYWxsYmFjazp7dHlwZTpPYmplY3R9LHJlcXVlc3REYXRhOnt0eXBlOk9iamVjdH19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfZGF0YVRvTG9hZENoYW5nZWQoX2lzQ29ubmVjdGVkLCBkYXRhVG9Mb2FkLiopIl19b25Mb2FkRmluaXNoKCl7fXJlbG9hZCgpe3RoaXMuX2RhdGFMb2FkU3RhdGUuY2xlYXIoKSx0aGlzLl9sb2FkRGF0YSgpfXJlc2V0KCl7dGhpcy5fbG9hZERhdGFBc3luYyE9bnVsbCYmKGNsZWFyVGltZW91dCh0aGlzLl9sb2FkRGF0YUFzeW5jKSx0aGlzLl9sb2FkRGF0YUFzeW5jPW51bGwpLHRoaXMuX2NhbmNlbGxlciYmdGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuX2RhdGFMb2FkU3RhdGUmJnRoaXMuX2RhdGFMb2FkU3RhdGUuY2xlYXIoKSx0aGlzLl9pc0Nvbm5lY3RlZCYmdGhpcy5fbG9hZERhdGEoKX1fZGF0YVRvTG9hZENoYW5nZWQoKXt0aGlzLl9pc0Nvbm5lY3RlZCYmdGhpcy5fbG9hZERhdGEoKX1kZXRhY2hlZCgpe3RoaXMuX2xvYWREYXRhQXN5bmMhPW51bGwmJihjbGVhclRpbWVvdXQodGhpcy5fbG9hZERhdGFBc3luYyksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsKX1fbG9hZERhdGFJZkFjdGl2ZSgpe3RoaXMuYWN0aXZlJiZ0aGlzLl9sb2FkRGF0YSgpfV9sb2FkRGF0YUltcGwoKXshdGhpcy5hY3RpdmV8fCh0aGlzLl9sb2FkRGF0YUFzeW5jIT09bnVsbCYmY2xlYXJUaW1lb3V0KHRoaXMuX2xvYWREYXRhQXN5bmMpLHRoaXMuX2xvYWREYXRhQXN5bmM9c2V0VGltZW91dCh0aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUocj0+e2lmKHIuY2FuY2VsbGVkKXJldHVybjt0aGlzLmRhdGFMb2FkaW5nPSEwO2xldCBuPXRoaXMuZGF0YVRvTG9hZC5maWx0ZXIoYT0+e2xldCBzPXRoaXMuZ2V0RGF0YUxvYWROYW1lKGEpO3JldHVybiF0aGlzLl9kYXRhTG9hZFN0YXRlLmhhcyhzKX0pO2ZvcihsZXQgYSBvZiBuKXtsZXQgcz10aGlzLmdldERhdGFMb2FkTmFtZShhKTt0aGlzLl9kYXRhTG9hZFN0YXRlLnNldChzLHY0LkxPQURJTkcpfWxldCBpPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT57aWYoYS5jYW5jZWxsZWQpcmV0dXJuO2xldHtpdGVtOnMsZGF0YTpsfT1hLnZhbHVlLGM9dGhpcy5nZXREYXRhTG9hZE5hbWUocyk7dGhpcy5fZGF0YUxvYWRTdGF0ZS5zZXQoYyx2NC5MT0FERUQpLHRoaXMubG9hZERhdGFDYWxsYmFjayh0aGlzLHMsbCl9KSxvPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT57aWYoIWEuY2FuY2VsbGVkKXtsZXQgbD1hLnZhbHVlLGM9bmV3IFNldChuLm1hcChoPT50aGlzLmdldERhdGFMb2FkTmFtZShoKSkpO3RoaXMuZGF0YVRvTG9hZC5zb21lKGg9PmMuaGFzKHRoaXMuZ2V0RGF0YUxvYWROYW1lKGgpKSkmJnRoaXMub25Mb2FkRmluaXNoKCksdGhpcy5fbG9hZERhdGFBc3luYz1udWxsLHRoaXMuZGF0YUxvYWRlZEF0TGVhc3RPbmNlPSEwfUFycmF5LmZyb20odGhpcy5fZGF0YUxvYWRTdGF0ZS52YWx1ZXMoKSkuaW5jbHVkZXModjQuTE9BRElORyl8fCh0aGlzLmRhdGFMb2FkaW5nPSExKX0pO3RoaXMucmVxdWVzdERhdGEobixpLCgpPT5vKHZvaWQgMCkpfSkpKX19fXZhciBncWU9RWUoT2UoKSwxKSxXbz1FZSh3bCgpLDEpLFJTPVt7Y2hhcmFjdGVyOiJcdTI1RkMiLG1ldGhvZDpXby5TeW1ib2xGYWN0b3JpZXMuc3F1YXJlfSx7Y2hhcmFjdGVyOiJcdTI1QzYiLG1ldGhvZDpXby5TeW1ib2xGYWN0b3JpZXMuZGlhbW9uZH0se2NoYXJhY3RlcjoiXHUyNUIyIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlfSx7Y2hhcmFjdGVyOiJcdTI2MDUiLG1ldGhvZDpXby5TeW1ib2xGYWN0b3JpZXMuc3Rhcn0se2NoYXJhY3RlcjoiXHUyNzFBIixtZXRob2Q6V28uU3ltYm9sRmFjdG9yaWVzLmNyb3NzfV0sRWQ7KGZ1bmN0aW9uKGUpe2UuU1RFUD0ic3RlcCIsZS5SRUxBVElWRT0icmVsYXRpdmUiLGUuV0FMTF9USU1FPSJ3YWxsX3RpbWUifSkoRWR8fChFZD17fSkpO3ZhciBlMD00LF9xZT00LGRCPTMsbUI9MjAsZ0I9NCxMS3Q9NjtmdW5jdGlvbiBXdShlKXtyZXR1cm4gdD0+e2xldCByPU1hdGguYWJzKHQpO3I8MWUtMTUmJihyPTApO2xldCBuO3JldHVybiByPj0xZTQ/bj14bigiLiIrZSsifmUiKTpyPjAmJnI8LjAxP249eG4oIi4iK2UrIn5lIik6bj14bigiLiIrZSsifmciKSxuKHQpfX12YXIgeDQ9eG4oYC4ke19xZX1+c2ApO2Z1bmN0aW9uICRhdCgpe2xldCBlPW5ldyBXby5TY2FsZXMuTGluZWFyO2UudGlja0dlbmVyYXRvcihXby5TY2FsZXMuVGlja0dlbmVyYXRvcnMuaW50ZWdlclRpY2tHZW5lcmF0b3IoKSk7bGV0IHQ9bmV3IFdvLkF4ZXMuTnVtZXJpYyhlLCJib3R0b20iKTtyZXR1cm4gdC5mb3JtYXR0ZXIoeDQpLHtzY2FsZTplLGF4aXM6dCxhY2Nlc3NvcjpyPT5yLnN0ZXB9fXZhciBfQj1Xby5Gb3JtYXR0ZXJzLnRpbWUoIiVhICViICVlLCAlSDolTTolUyIpO2Z1bmN0aW9uIHlxZSgpe2xldCBlPW5ldyBXby5TY2FsZXMuVGltZTtyZXR1cm57c2NhbGU6ZSxheGlzOm5ldyBXby5BeGVzLlRpbWUoZSwiYm90dG9tIiksYWNjZXNzb3I6dD0+dC53YWxsX3RpbWV9fXZhciByMD0oZSx0LHIpPT57aWYoZS5yZWxhdGl2ZSE9bnVsbClyZXR1cm4gZS5yZWxhdGl2ZTtsZXQgbj1yLmRhdGEoKSxpPW4ubGVuZ3RoPjA/K25bMF0ud2FsbF90aW1lOjA7cmV0dXJuKCtlLndhbGxfdGltZS1pKS8oNjAqNjAqMWUzKX0seUI9ZT0+e2xldCB0PSIiLHI9TWF0aC5mbG9vcihlLzI0KTtlLT1yKjI0LHImJih0Kz1yKyJkICIpO2xldCBuPU1hdGguZmxvb3IoZSk7ZS09bixlKj02MCwobnx8cikmJih0Kz1uKyJoICIpO2xldCBpPU1hdGguZmxvb3IoZSk7ZS09aSxlKj02MCwoaXx8bnx8cikmJih0Kz1pKyJtICIpO2xldCBvPU1hdGguZmxvb3IoZSk7cmV0dXJuIHQrbysicyJ9O2Z1bmN0aW9uIHZxZSgpe2xldCBlPW5ldyBXby5TY2FsZXMuTGluZWFyO3JldHVybntzY2FsZTplLGF4aXM6bmV3IFdvLkF4ZXMuTnVtZXJpYyhlLCJib3R0b20iKSxhY2Nlc3NvcjpyMH19ZnVuY3Rpb24gdkIoZSl7c3dpdGNoKGUpe2Nhc2UgRWQuU1RFUDpyZXR1cm4gJGF0KCk7Y2FzZSBFZC5XQUxMX1RJTUU6cmV0dXJuIHlxZSgpO2Nhc2UgRWQuUkVMQVRJVkU6cmV0dXJuIHZxZSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHhUeXBlOiAiK2UpfX12YXIgenM9RWUoT2UoKSwxKSxNbj1FZSh3bCgpLDEpO3ZhciB2YT1FZSh3bCgpLDEpO2Z1bmN0aW9uIHhxZShlKXtsZXQgdD1bXSxyPWU7Zm9yKDtyJiZyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7KWlmKHQucHVzaChyKSxyLmFzc2lnbmVkU2xvdClyPXIuYXNzaWduZWRTbG90O2Vsc2UgaWYoci5wYXJlbnRFbGVtZW50KXI9ci5wYXJlbnRFbGVtZW50O2Vsc2V7bGV0IG49ci5wYXJlbnROb2RlO24gaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50P3I9bi5ob3N0OnI9biE9PXI/bjpudWxsfXJldHVybiB0fXZhciBicWU9WzEsMCwwLDEsMCwwXTtmdW5jdGlvbiB3cWUoZSl7bGV0IHQ9eHFlKGUpLHI9YnFlLG49bnVsbDtmb3IobGV0IGkgb2YgdCl7bGV0IG89dmEuVXRpbHMuRE9NLmdldEVsZW1lbnRUcmFuc2Zvcm0oaSk7aWYobyE9bnVsbCl7bGV0IGw9aS5jbGllbnRXaWR0aC8yLGM9aS5jbGllbnRIZWlnaHQvMjtyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbbCxjXSkscj12YS5VdGlscy5NYXRoLm11bHRpcGx5TWF0cml4KHIsdmEuVXRpbHMuTWF0aC5pbnZlcnRNYXRyaXgobykpLHI9dmEuVXRpbHMuTWF0aC5tdWx0aXBseVRyYW5zbGF0ZShyLFstbCwtY10pfWxldCBhPWkuc2Nyb2xsTGVmdCxzPWkuc2Nyb2xsVG9wOyhuPT09bnVsbHx8aT09PW4pJiYoYS09aS5vZmZzZXRMZWZ0K2kuY2xpZW50TGVmdCxzLT1pLm9mZnNldFRvcCtpLmNsaWVudFRvcCxuPWkub2Zmc2V0UGFyZW50KSxyPXZhLlV0aWxzLk1hdGgubXVsdGlwbHlUcmFuc2xhdGUocixbYSxzXSl9cmV0dXJuIHJ9dmFyIGJCPWNsYXNzIGV4dGVuZHMgdmEuVXRpbHMuVHJhbnNsYXRvcntjb21wdXRlUG9zaXRpb24odCxyKXtsZXQgbj17eDp0LHk6cn0saT13cWUodGhpcy5fcm9vdEVsZW1lbnQpO3JldHVybiBpPT1udWxsP246dmEuVXRpbHMuTWF0aC5hcHBseVRyYW5zZm9ybShpLG4pfX0sVTE9Y2xhc3MgZXh0ZW5kcyB2YS5EaXNwYXRjaGVycy5Nb3VzZXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl9ldmVudFRhcmdldD10LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSx0aGlzLl90cmFuc2xhdG9yPW5ldyBiQih0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIodCl7bGV0IHI9dC5yb290KCkucm9vdEVsZW1lbnQoKSxuPXJbVTEuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnx8KG49bmV3IFUxKHQpLHJbVTEuX0RJU1BBVENIRVJfS0VZXT1uKSxufX0scTE9Y2xhc3MgZXh0ZW5kcyB2YS5EaXNwYXRjaGVycy5Ub3VjaHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLl9ldmVudFRhcmdldD10LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSx0aGlzLl90cmFuc2xhdG9yPW5ldyBiQih0LnJvb3QoKS5yb290RWxlbWVudCgpLm5vZGUoKSl9c3RhdGljIGdldERpc3BhdGNoZXIodCl7bGV0IHI9dC5yb290KCkucm9vdEVsZW1lbnQoKSxuPXJbcTEuX0RJU1BBVENIRVJfS0VZXTtyZXR1cm4gbnx8KG49bmV3IHExKHQpLHJbcTEuX0RJU1BBVENIRVJfS0VZXT1uKSxufX07dmEuSW50ZXJhY3Rpb24ucHJvdG90eXBlLl9pc0luc2lkZUNvbXBvbmVudD1mdW5jdGlvbihlKXtyZXR1cm4gMDw9ZS54JiYwPD1lLnkmJmUueDx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLndpZHRoKCkmJmUueTx0aGlzLl9jb21wb25lbnRBdHRhY2hlZFRvLmhlaWdodCgpfTt2YXIgd0I9Y2xhc3MgZXh0ZW5kcyB2YS5JbnRlcmFjdGlvbnMuUG9pbnRlcntfYW5jaG9yKHQpe2xldCByPXRoaXM7ci5faXNBbmNob3JlZD0hMCxyLl9tb3VzZURpc3BhdGNoZXI9VTEuZ2V0RGlzcGF0Y2hlcihyLl9jb21wb25lbnRBdHRhY2hlZFRvKSxyLl9tb3VzZURpc3BhdGNoZXIub25Nb3VzZU1vdmUoci5fbW91c2VNb3ZlQ2FsbGJhY2spLHIuX3RvdWNoRGlzcGF0Y2hlcj1xMS5nZXREaXNwYXRjaGVyKHIuX2NvbXBvbmVudEF0dGFjaGVkVG8pLHIuX3RvdWNoRGlzcGF0Y2hlci5vblRvdWNoU3RhcnQoci5fdG91Y2hTdGFydENhbGxiYWNrKX19O3ZhciBrS3Q9RWUoT2UoKSwxKTt2YXIgRzE7KGZ1bmN0aW9uKGUpe2UuQVVUTz0iYXV0byIsZS5CT1RUT009ImJvdHRvbSIsZS5SSUdIVD0icmlnaHQifSkoRzF8fChHMT17fSkpO3ZhciBTcWU9e2JveFNoYWRvdzoiMCAxcHggNHB4IHJnYmEoMCwgMCwgMCwgLjMpIixvcGFjaXR5OjAscG9zaXRpb246ImZpeGVkIix3aWxsQ2hhbmdlOiJ0cmFuc2Zvcm0iLHpJbmRleDo1fSxiND1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5wb3NpdGlvbj1HMS5BVVRPLHRoaXMubWluRGlzdEZyb21FZGdlPTE1LHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1yZWFkeSgpe3RoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl9yYWY9bnVsbCx0aGlzLl90dW5uZWw9bnVsbH1hdHRhY2hlZCgpe3RoaXMuX3R1bm5lbD10aGlzLl9jcmVhdGVUdW5uZWwoKSx0aGlzLl9oaWRlT25CbHVyPSgpPT57ZG9jdW1lbnQuaGlkZGVuJiZ0aGlzLmhpZGUoKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWRldGFjaGVkKCl7dGhpcy5oaWRlKCksdGhpcy5fcmVtb3ZlVHVubmVsKHRoaXMuX3R1bm5lbCksdGhpcy5fdHVubmVsPW51bGwsd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuX2hpZGVPbkJsdXIpfWNvbnRlbnQoKXtyZXR1cm4gdGhpcy5fdHVubmVsLnNoYWRvd1Jvb3R9aGlkZSgpe3RoaXMuX3JhZiE9PW51bGwmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3N0eWxlQ2FjaGU9bnVsbCx0aGlzLl90dW5uZWwuc3R5bGUub3BhY2l0eT0wfXVwZGF0ZUFuZFBvc2l0aW9uKHQpe3RoaXMuX3JhZiE9PW51bGwmJndpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpLHRoaXMuX3JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57IXRoaXMuaXNBdHRhY2hlZHx8dGhpcy5fcmVwb3NpdGlvbkltcGwodCl9KX1fcmVwb3NpdGlvbkltcGwodCl7bGV0IHI9dGhpcy5fdHVubmVsLG49dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz13aW5kb3cuaW5uZXJIZWlnaHQsYT1kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLHM9bi50b3AsbD1zK24uaGVpZ2h0LGM9aS5oZWlnaHQrbUIsdT1udWxsLGg9TWF0aC5tYXgodGhpcy5taW5EaXN0RnJvbUVkZ2Usbi5sZWZ0KSxmPW51bGwscD1zO3RoaXMucG9zaXRpb249PUcxLlJJR0hUP2g9bi5yaWdodDoocD1sK21CLGE8aCtpLndpZHRoK3RoaXMubWluRGlzdEZyb21FZGdlJiYoaD1udWxsLGY9dGhpcy5taW5EaXN0RnJvbUVkZ2UpKSx0aGlzLnBvc2l0aW9uPT1HMS5BVVRPJiZuLnRvcC1jPjAmJm88bi50b3Arbi5oZWlnaHQrYyYmKHA9bnVsbCx1PW8tcyttQik7bGV0IGQ9e2NvbnRhaW46ImNvbnRlbnQiLG9wYWNpdHk6MSxsZWZ0Omg/YCR7aH1weGA6bnVsbCxyaWdodDpmP2Ake2Z9cHhgOm51bGwsdG9wOnA/YCR7cH1weGA6bnVsbCxib3R0b206dT9gJHt1fXB4YDpudWxsfTtrS3QuaXNFcXVhbCh0aGlzLl9zdHlsZUNhY2hlLGQpfHwoT2JqZWN0LmFzc2lnbihyLnN0eWxlLGQpLHRoaXMuX3N0eWxlQ2FjaGU9ZCl9X2NyZWF0ZVR1bm5lbCgpe2lmKCF0aGlzLmNvbnRlbnRDb21wb25lbnROYW1lKXRocm93IG5ldyBSYW5nZUVycm9yKCJSZXF1aXJlIGBjb250ZW50Q29tcG9uZW50TmFtZWAgdG8gYmUgYSBuYW1lIG9mIGEgUG9seW1lciBjb21wb25lbnQiKTtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuY29udGVudENvbXBvbmVudE5hbWUpO3JldHVybiBPYmplY3QuYXNzaWduKHQuc3R5bGUsU3FlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLHR9X3JlbW92ZVR1bm5lbCh0KXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfX07RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYjQucHJvdG90eXBlLCJjb250ZW50Q29tcG9uZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxiNC5wcm90b3R5cGUsInBvc2l0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGI0LnByb3RvdHlwZSwibWluRGlzdEZyb21FZGdlIix2b2lkIDApO2I0PUUoW3l0KCJ2ei1jaGFydC10b29sdGlwIildLGI0KTt2YXIgTlM9RWUod2woKSwxKTt2YXIgREt0PTFlNCxPS3Q9LjAwMSx6S3Q9eG4oIi4yfmUiKSxNcWU9eG4oIi40fnIiKSxSS3Q9eG4oIix+Iik7ZnVuY3Rpb24gTkt0KGUpe2lmKGU9PT0wKXJldHVybiIwIjtsZXQgdD1NYXRoLmFicyhlKTtyZXR1cm4gdD49REt0fHx0PE9LdD96S3QoZSk6TXFlKGUpfXZhciBaYXQ9e2Zvcm1hdFRpY2s6Tkt0LGZvcm1hdFNob3J0Ok5LdCxmb3JtYXRSZWFkYWJsZShlKXtsZXQgdD1NYXRoLmFicyhlKTtyZXR1cm4gdD49REt0fHx0PE9LdD96S3QoZSk6Ukt0KGUpfSxmb3JtYXRMb25nOlJLdH0sakduPW5ldyBJbnRsLk51bWJlckZvcm1hdCh2b2lkIDAse21heGltdW1GcmFjdGlvbkRpZ2l0czozfSk7dmFyIFhHbj14bigiMC4zfnMiKSwkR249eG4oIiwuM35mIik7dmFyIEVxZT0xZTMsVHFlPTYwKkVxZSxDcWU9NjAqVHFlLEFxZT0yNCpDcWUsS0duPTM2NSpBcWUsWkduPXhuKCIuNH4iKTt2YXIgUHFlPVliKCkudGlja0Zvcm1hdCgpLEthdCxGS3Q9e2Zvcm1hdFRpY2soZSl7cmV0dXJuIFBxZShuZXcgRGF0ZShlKSl9LGZvcm1hdFNob3J0KGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZyhLYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyJ9KX0sZm9ybWF0UmVhZGFibGUoZSl7cmV0dXJuIG5ldyBEYXRlKGUpLnRvTG9jYWxlU3RyaW5nKEthdCx7eWVhcjoibnVtZXJpYyIsbW9udGg6InNob3J0IixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0In0pfSxmb3JtYXRMb25nKGUpe3JldHVybiBuZXcgRGF0ZShlKS50b0xvY2FsZVN0cmluZyhLYXQse3llYXI6Im51bWVyaWMiLG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLGhvdXI6Im51bWVyaWMiLG1pbnV0ZToibnVtZXJpYyIsc2Vjb25kOiJudW1lcmljIix0aW1lWm9uZU5hbWU6InNob3J0IixmcmFjdGlvbmFsU2Vjb25kRGlnaXRzOjN9KX19O3ZhciBUZDsoZnVuY3Rpb24oZSl7ZVtlLkxJTkVBUj0wXT0iTElORUFSIixlW2UuTE9HMTA9MV09IkxPRzEwIixlW2UuVElNRT0yXT0iVElNRSJ9KShUZHx8KFRkPXt9KSk7ZnVuY3Rpb24gQkt0KGUpe3N3aXRjaChlKXtjYXNlIFRkLkxJTkVBUjpyZXR1cm4gbmV3IEphdDtjYXNlIFRkLkxPRzEwOnJldHVybiBuZXcgUWF0O2Nhc2UgVGQuVElNRTpyZXR1cm4gbmV3IHRzdDtkZWZhdWx0OmxldCB0PWU7dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFNjYWxlVHlwZSAke3R9IG5vdCBzdXBwb3J0ZWQuYCl9fXZhciBJcWU9LjA1LEphdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVmYXVsdEZvcm1hdHRlcj1aYXR9dHJhbnNmb3JtKHQscixuKXtsZXRbaSxvXT10LGE9by1pLFtzLGxdPXIsYz1sLXM7cmV0dXJuIGE9PT0wP3M6Yy9hKihuLWkpK3N9Zm9yd2FyZCh0LHIsbil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKHQscixuKX1yZXZlcnNlKHQscixuKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ocix0LG4pfW5pY2VEb21haW4odCl7bGV0W3Isbl09dDtpZihuPHIpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7aWYobj09PXIpcmV0dXJuIHI9PT0wP1stMSwxXTpyPDA/WzIqciwwXTpbMCwyKnJdO2xldCBpPXpuKCksbz0obi1yK051bWJlci5FUFNJTE9OKSpJcWUsW2Esc109aS5kb21haW4oW3ItbyxuK29dKS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2Esc119dGlja3ModCxyKXtyZXR1cm4gem4oKS5kb21haW4odCkudGlja3Mocil9aXNTYWZlTnVtYmVyKHQpe3JldHVybiBOdW1iZXIuaXNGaW5pdGUodCl9fSxRYXQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9WmF0fXRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5sb2cxMCh0PjA/dDpOdW1iZXIuTUlOX1ZBTFVFKX11bnRyYW5zZm9ybSh0KXtyZXR1cm4gTWF0aC5leHAodC9NYXRoLkxPRzEwRSl9Zm9yd2FyZCh0LHIsbil7aWYobjw9MClyZXR1cm4gclswXTtsZXRbaSxvXT10LFthLHNdPXIsbD10aGlzLnRyYW5zZm9ybShpKSx1PXRoaXMudHJhbnNmb3JtKG8pLWwsaD1zLWE7cmV0dXJuIG49dGhpcy50cmFuc2Zvcm0obiksaC8odStOdW1iZXIuRVBTSUxPTikqKG4tbCkrYX1yZXZlcnNlKHQscixuKXtsZXRbaSxvXT10LFthLHNdPXIsbD10aGlzLnRyYW5zZm9ybShpKSx1PXRoaXMudHJhbnNmb3JtKG8pLWwsaD1zLWEsZj11LyhoK051bWJlci5FUFNJTE9OKSoobi1hKStsO3JldHVybiB0aGlzLnVudHJhbnNmb3JtKGYpfW5pY2VEb21haW4odCl7bGV0W3Isbl09dDtpZihyPm4pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IGk9TWF0aC5tYXgocixOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KG4sTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIG48PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsaSouNSksbyoyXX10aWNrcyh0LHIpe2xldCBuPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLGk9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1jYygpLmRvbWFpbihbbixpXSkudGlja3Mocik7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sdHN0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zY2FsZT1ZYigpLHRoaXMuZGVmYXVsdEZvcm1hdHRlcj1GS3R9Zm9yd2FyZCh0LHIsbil7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKHIpKG4pfXJldmVyc2UodCxyLG4pe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS5yYW5nZShyKS5pbnZlcnQobikuZ2V0VGltZSgpfW5pY2VEb21haW4odCl7bGV0W3Isbl09dGhpcy5zY2FsZS5kb21haW4odCkubmljZSgpLmRvbWFpbigpO3JldHVybltyLmdldFRpbWUoKSxuLmdldFRpbWUoKV19dGlja3ModCxyKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkudGlja3MocikubWFwKG49Pm4uZ2V0VGltZSgpKX1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KX19O3ZhciBTQj1jbGFzcyBleHRlbmRzIE5TLlNjYWxlcy5MaW5lYXJ7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2lnbm9yZU91dGxpZXI9ITEsdGhpcy5wYWRQcm9wb3J0aW9uKC4yKX1zZXRWYWx1ZVByb3ZpZGVyRm9yRG9tYWluKHQpe3JldHVybiB0aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluPXQsdGhpc31fbmljZURvbWFpbih0LHIpe2xldFtuLGldPXQ7cmV0dXJuIEJLdChUZC5MSU5FQVIpLm5pY2VEb21haW4oW24saV0pfV9nZXRVbmJvdW5kZWRFeHRlbnQodCl7bGV0IHI9dGhpcy5fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModCksbj10aGlzLl9kZWZhdWx0RXh0ZW50KCk7aWYoci5sZW5ndGghPT0wKXtsZXQgaT1bTlMuVXRpbHMuTWF0aC5taW4ocixuWzBdKSxOUy5VdGlscy5NYXRoLm1heChyLG5bMV0pXTtuPXRoaXMuX25pY2VEb21haW4oaSl9cmV0dXJuIG59X2dldEFsbEluY2x1ZGVkVmFsdWVzKHQ9ITEpe2xldCByPXRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4/dGhpcy5fdmFsdWVQcm92aWRlckZvckRvbWFpbigpOltdO3JldHVybiB0aGlzLmV4dGVudE9mVmFsdWVzKHIpfWV4dGVudE9mVmFsdWVzKHQpe2xldCByPXQuZmlsdGVyKG89Pk5TLlV0aWxzLk1hdGguaXNWYWxpZE51bWJlcihvKSksbj1yO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtsZXQgbz1yLnNvcnQoKGwsYyk9PmwtYyksYT1zYShvLC4wNSkscz1zYShvLC45NSk7bj1yLmZpbHRlcihsPT5sPj1hJiZsPD1zKX1sZXQgaT1hYShuKTtyZXR1cm4gaVswXT09bnVsbHx8aVsxXT09bnVsbD9bXTppfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuIHR5cGVvZiB0PT0iYm9vbGVhbiI/KHRoaXMuX2lnbm9yZU91dGxpZXI9dCx0aGlzKTp0aGlzLl9pZ25vcmVPdXRsaWVyfX07dmFyIFRCPUVlKHdsKCksMSk7dmFyIEhLdD1FZSh3bCgpLDEpLE1CPWNsYXNzIGV4dGVuZHMgSEt0LlF1YW50aXRhdGl2ZVNjYWxle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9pZ25vcmVPdXRsaWVyPSExfXNldFZhbHVlUHJvdmlkZXJGb3JEb21haW4odCl7cmV0dXJuIHRoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW49dCx0aGlzfWlnbm9yZU91dGxpZXIodCl7cmV0dXJuIHR5cGVvZiB0PT0iYm9vbGVhbiI/KHRoaXMuX2lnbm9yZU91dGxpZXI9dCx0aGlzKTp0aGlzLl9pZ25vcmVPdXRsaWVyfV9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0PSExKXtsZXQgcj10aGlzLl92YWx1ZVByb3ZpZGVyRm9yRG9tYWluP3RoaXMuX3ZhbHVlUHJvdmlkZXJGb3JEb21haW4oKTpbXTtyZXR1cm4gdGhpcy5leHRlbnRPZlZhbHVlcyhyKX19O3ZhciBFQj1NYXRoLnBvdygyLC0xMDc0KTtmdW5jdGlvbiB3NChlKXtyZXR1cm4gTWF0aC5sb2cxMChlKX1mdW5jdGlvbiBlc3QoZSl7cmV0dXJuIE1hdGgucG93KDEwLGUpfXZhciBDQj1jbGFzcyBleHRlbmRzIE1Ce2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kM0xvZ1NjYWxlPWNjKCksdGhpcy5wYWRQcm9wb3J0aW9uKC4yKX1zY2FsZSh0KXtyZXR1cm4gdDw9MD9OYU46dGhpcy5fZDNMb2dTY2FsZSh0KX1pbnZlcnQodCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUuaW52ZXJ0KHQpfXNjYWxlVHJhbnNmb3JtYXRpb24odCl7cmV0dXJuIHRoaXMuc2NhbGUodCl9aW52ZXJ0ZWRUcmFuc2Zvcm1hdGlvbih0KXtyZXR1cm4gdGhpcy5pbnZlcnQodCl9Z2V0VHJhbnNmb3JtYXRpb25Eb21haW4oKXtyZXR1cm4gdGhpcy5kb21haW4oKX1zZXRUcmFuc2Zvcm1hdGlvbkRvbWFpbih0KXt0aGlzLmRvbWFpbih0KX1nZXRUcmFuc2Zvcm1hdGlvbkV4dGVudCgpe3JldHVybiB0aGlzLl9nZXRVbmJvdW5kZWRFeHRlbnQoITApfV9nZXREb21haW4oKXtyZXR1cm4gdGhpcy5fdW50cmFuc2Zvcm1lZERvbWFpbn1fc2V0RG9tYWluKHQpe3RoaXMuX3VudHJhbnNmb3JtZWREb21haW49dDtsZXRbcixuXT10O3N1cGVyLl9zZXREb21haW4oW01hdGgubWF4KEVCLHIpLG5dKX1fbmljZURvbWFpbih0LHIpe2xldFtuLGldPXQsbz1NYXRoLm1heCh3NChFQiksdzQobikpLGE9dzQoaSkscz1hLW8sbD1zP3MqdGhpcy5wYWRQcm9wb3J0aW9uKCk6MTtyZXR1cm5bZXN0KE1hdGgubWF4KHc0KEVCKSxvLWwpKSxlc3QoYStsKV19X2dldFVuYm91bmRlZEV4dGVudCh0KXtsZXQgcj10aGlzLl9nZXRBbGxJbmNsdWRlZFZhbHVlcyh0KSxuPXRoaXMuX2RlZmF1bHRFeHRlbnQoKTtpZihyLmxlbmd0aCE9PTApe2xldCBpPVtUQi5VdGlscy5NYXRoLm1pbihyLG5bMF0pLFRCLlV0aWxzLk1hdGgubWF4KHIsblsxXSldO249dGhpcy5fbmljZURvbWFpbihpKX1yZXR1cm4gbn1fZ2V0QWxsSW5jbHVkZWRWYWx1ZXModD0hMSl7cmV0dXJuIHN1cGVyLl9nZXRBbGxJbmNsdWRlZFZhbHVlcygpLm1hcChuPT5uPjA/bjpFQil9X2RlZmF1bHRFeHRlbnQoKXtyZXR1cm5bMSwxMF19X2JhY2tpbmdTY2FsZURvbWFpbih0KXtyZXR1cm4gdD09bnVsbD90aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbigpOih0aGlzLl9kM0xvZ1NjYWxlLmRvbWFpbih0KSx0aGlzKX1fZ2V0UmFuZ2UoKXtyZXR1cm4gdGhpcy5fZDNMb2dTY2FsZS5yYW5nZSgpfV9zZXRSYW5nZSh0KXt0aGlzLl9kM0xvZ1NjYWxlLnJhbmdlKHQpfWRlZmF1bHRUaWNrcygpe3JldHVybiB0aGlzLl9kM0xvZ1NjYWxlLnRpY2tzKDEpfXRpY2tzKCl7cmV0dXJuIHRoaXMuX2QzTG9nU2NhbGUudGlja3MoKX1leHRlbnRPZlZhbHVlcyh0KXtsZXQgcj10LmZpbHRlcihvPT5UQi5VdGlscy5NYXRoLmlzVmFsaWROdW1iZXIobykmJm8+MCksbj1yO2lmKHRoaXMuaWdub3JlT3V0bGllcigpKXtsZXQgYT1yLm1hcCh3NCkuc29ydCgoYyx1KT0+Yy11KSxzPXNhKGEsLjA1KSxsPXNhKGEsLjk1KTtuPWEuZmlsdGVyKGM9PmM+PXMmJmM8PWwpLm1hcChlc3QpfWxldCBpPWFhKG4pO3JldHVybiBpWzBdPT1udWxsfHxpWzFdPT1udWxsP1tdOml9fTt2YXIgQ2Q9RWUod2woKSwxKTt2YXIgbjA9RWUod2woKSwxKSxBQj1jbGFzcyBleHRlbmRzIG4wLkNvbXBvbmVudHMuU2VsZWN0aW9uQm94TGF5ZXJ7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKCksdGhpcy5lYXNlRm49eHMsdGhpcy5fYW5pbWF0aW9uVGltZT03NTAsdGhpcy54U2NhbGUodCksdGhpcy55U2NhbGUociksdGhpcy5fZHJhZ0ludGVyYWN0aW9uPW5ldyBuMC5JbnRlcmFjdGlvbnMuRHJhZyx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uPW5ldyBuMC5JbnRlcmFjdGlvbnMuQ2xpY2ssdGhpcy5zZXR1cENhbGxiYWNrcygpLHRoaXMudW56b29tTWV0aG9kPW4sdGhpcy5vbkRldGFjaCgoKT0+e3RoaXMuX2RvdWJsZUNsaWNrSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKSx0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZGV0YWNoRnJvbSh0aGlzKX0pLHRoaXMub25BbmNob3IoKCk9Pnt0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLmF0dGFjaFRvKHRoaXMpLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5hdHRhY2hUbyh0aGlzKX0pfWludGVyYWN0aW9uU3RhcnQodCl7dGhpcy5vblN0YXJ0PXR9aW50ZXJhY3Rpb25FbmQodCl7dGhpcy5vbkVuZD10fWRyYWdJbnRlcmFjdGlvbigpe3JldHVybiB0aGlzLl9kcmFnSW50ZXJhY3Rpb259c2V0dXBDYWxsYmFja3MoKXtsZXQgdD0hMTt0aGlzLl9kcmFnSW50ZXJhY3Rpb24ub25EcmFnU3RhcnQocj0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OnIsYm90dG9tUmlnaHQ6cn0pLHRoaXMub25TdGFydCgpfSksdGhpcy5fZHJhZ0ludGVyYWN0aW9uLm9uRHJhZygocixuKT0+e3RoaXMuYm91bmRzKHt0b3BMZWZ0OnIsYm90dG9tUmlnaHQ6bn0pLHRoaXMuYm94VmlzaWJsZSghMCksdD0hMH0pLHRoaXMuX2RyYWdJbnRlcmFjdGlvbi5vbkRyYWdFbmQoKHIsbik9Pnt0aGlzLmJveFZpc2libGUoITEpLHRoaXMuYm91bmRzKHt0b3BMZWZ0OnIsYm90dG9tUmlnaHQ6bn0pLHQ/dGhpcy56b29tKCk6dGhpcy5vbkVuZCgpLHQ9ITF9KSx0aGlzLl9kb3VibGVDbGlja0ludGVyYWN0aW9uLm9uRG91YmxlQ2xpY2sodGhpcy51bnpvb20uYmluZCh0aGlzKSl9YW5pbWF0aW9uVGltZSh0KXtpZih0PT1udWxsKXJldHVybiB0aGlzLl9hbmltYXRpb25UaW1lO2lmKHQ8MCl0aHJvdyBuZXcgRXJyb3IoImFuaW1hdGlvblRpbWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7cmV0dXJuIHRoaXMuX2FuaW1hdGlvblRpbWU9dCx0aGlzfWVhc2UodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJlYXNlIGZ1bmN0aW9uIG11c3QgYmUgYSBmdW5jdGlvbiIpO3JldHVybih0KDApIT09MHx8dCgxKSE9PTEpJiZuMC5VdGlscy5XaW5kb3cud2FybigiRWFzaW5nIGZ1bmN0aW9uIGRvZXMgbm90IG1haW50YWluIGludmFyaWFudCBmKDApPT0wICYmIGYoMSk9PTEuIEJhZCBiZWhhdmlvciBtYXkgcmVzdWx0LiIpLHRoaXMuZWFzZUZuPXQsdGhpc316b29tKCl7bGV0IHQ9dGhpcy54RXh0ZW50KClbMF0udmFsdWVPZigpLHI9dGhpcy54RXh0ZW50KClbMV0udmFsdWVPZigpLG49dGhpcy55RXh0ZW50KClbMV0udmFsdWVPZigpLGk9dGhpcy55RXh0ZW50KClbMF0udmFsdWVPZigpO3Q9PT1yfHxuPT09aXx8dGhpcy5pbnRlcnBvbGF0ZVpvb20odCxyLG4saSl9dW56b29tKCl7bGV0IHQ9dGhpcy54U2NhbGUoKTt0Ll9kb21haW5NaW49bnVsbCx0Ll9kb21haW5NYXg9bnVsbDtsZXQgcj10Ll9nZXRFeHRlbnQoKTt0aGlzLnhTY2FsZSgpLmRvbWFpbihyKSx0aGlzLnVuem9vbU1ldGhvZCgpfWlzWm9vbWluZyh0KXt0aGlzLl9kcmFnSW50ZXJhY3Rpb24uZW5hYmxlZCghdCksdGhpcy5fZG91YmxlQ2xpY2tJbnRlcmFjdGlvbi5lbmFibGVkKCF0KX1pbnRlcnBvbGF0ZVpvb20odCxyLG4saSl7bGV0IG89dGhpcy54U2NhbGUoKS5kb21haW4oKVswXS52YWx1ZU9mKCksYT10aGlzLnhTY2FsZSgpLmRvbWFpbigpWzFdLnZhbHVlT2YoKSxzPXRoaXMueVNjYWxlKCkuZG9tYWluKClbMF0udmFsdWVPZigpLGw9dGhpcy55U2NhbGUoKS5kb21haW4oKVsxXS52YWx1ZU9mKCksYz10aGlzLmVhc2VGbix1PShwLGQsZyk9PnppKHAsZCkoYyhnKSk7dGhpcy5pc1pvb21pbmcoITApO2xldCBoPURhdGUubm93KCksZj0oKT0+e2xldCBkPURhdGUubm93KCktaCxnPXRoaXMuX2FuaW1hdGlvblRpbWU9PT0wPzE6TWF0aC5taW4oMSxkL3RoaXMuX2FuaW1hdGlvblRpbWUpLF89dShvLHQsZykseT11KGEscixnKSx4PXUocyxuLGcpLGI9dShsLGksZyk7dGhpcy54U2NhbGUoKS5kb21haW4oW18seV0pLHRoaXMueVNjYWxlKCkuZG9tYWluKFt4LGJdKSxnPDE/bjAuVXRpbHMuRE9NLnJlcXVlc3RBbmltYXRpb25GcmFtZVBvbHlmaWxsKGYpOih0aGlzLm9uRW5kKCksdGhpcy5pc1pvb21pbmcoITEpKX07ZigpfX07dmFyIHhhOyhmdW5jdGlvbihlKXtlW2UuTk9ORT0wXT0iTk9ORSIsZVtlLkRSQUdfWk9PTUlORz0xXT0iRFJBR19aT09NSU5HIixlW2UuUEFOTklORz0yXT0iUEFOTklORyJ9KSh4YXx8KHhhPXt9KSk7dmFyIHpmPWNsYXNzIGV4dGVuZHMgQ2QuQ29tcG9uZW50cy5Hcm91cHtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoKSx0aGlzLnN0YXRlPXhhLk5PTkUsdGhpcy5wYW5TdGFydENhbGxiYWNrPW5ldyBDZC5VdGlscy5DYWxsYmFja1NldCx0aGlzLnBhbkVuZENhbGxiYWNrPW5ldyBDZC5VdGlscy5DYWxsYmFja1NldCx0aGlzLnBhblpvb209bmV3IENkLkludGVyYWN0aW9ucy5QYW5ab29tKHQsciksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm1vdXNlRmlsdGVyKG89PnpmLmlzUGFuS2V5KG8pJiZvLmJ1dHRvbj09PTApLHRoaXMucGFuWm9vbS53aGVlbEZpbHRlcih0aGlzLmNhblNjcm9sbFpvb20pLHRoaXMuZHJhZ1pvb21MYXllcj1uZXcgQUIodCxyLG4pLHRoaXMuZHJhZ1pvb21MYXllci5kcmFnSW50ZXJhY3Rpb24oKS5tb3VzZUZpbHRlcihvPT4hemYuaXNQYW5LZXkobykmJm8uYnV0dG9uPT09MCksdGhpcy5hcHBlbmQodGhpcy5kcmFnWm9vbUxheWVyKTtsZXQgaT10aGlzLm9uV2hlZWwuYmluZCh0aGlzKTt0aGlzLm9uQW5jaG9yKCgpPT57dGhpcy5fbW91c2VEaXNwYXRjaGVyPUNkLkRpc3BhdGNoZXJzLk1vdXNlLmdldERpc3BhdGNoZXIodGhpcyksdGhpcy5fbW91c2VEaXNwYXRjaGVyLm9uV2hlZWwoaSksdGhpcy5wYW5ab29tLmF0dGFjaFRvKHRoaXMpfSksdGhpcy5vbkRldGFjaCgoKT0+e3RoaXMucGFuWm9vbS5kZXRhY2hGcm9tKHRoaXMpLHRoaXMuX21vdXNlRGlzcGF0Y2hlciYmKHRoaXMuX21vdXNlRGlzcGF0Y2hlci5vZmZXaGVlbChpKSx0aGlzLl9tb3VzZURpc3BhdGNoZXI9bnVsbCl9KSx0aGlzLnBhblpvb20uZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT14YS5OT05FJiZ0aGlzLnNldFN0YXRlKHhhLlBBTk5JTkcpfSksdGhpcy5wYW5ab29tLmRyYWdJbnRlcmFjdGlvbigpLm9uRHJhZ0VuZCgoKT0+e3RoaXMuc3RhdGU9PXhhLlBBTk5JTkcmJnRoaXMuc2V0U3RhdGUoeGEuTk9ORSl9KSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnU3RhcnQoKCk9Pnt0aGlzLnN0YXRlPT14YS5OT05FJiZ0aGlzLnNldFN0YXRlKHhhLkRSQUdfWk9PTUlORyl9KSx0aGlzLmRyYWdab29tTGF5ZXIuZHJhZ0ludGVyYWN0aW9uKCkub25EcmFnRW5kKCgpPT57dGhpcy5zdGF0ZT09eGEuRFJBR19aT09NSU5HJiZ0aGlzLnNldFN0YXRlKHhhLk5PTkUpfSl9b25XaGVlbCh0LHIpe2lmKHRoaXMuY2FuU2Nyb2xsWm9vbShyKSlyZXR1cm47bGV0IG49dGhpcy5lbGVtZW50KCk7aWYoIW4uc2VsZWN0KCIuaGVscCIpLmVtcHR5KCkpcmV0dXJuO2xldCBpPW4uYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJoZWxwIiwhMCk7aS5hcHBlbmQoInNwYW4iKS50ZXh0KCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpLGkub24oImFuaW1hdGlvbmVuZCIsKCk9PnZvaWQgaS5yZW1vdmUoKSl9c3RhdGljIGlzUGFuS2V5KHQpe3JldHVybiBCb29sZWFuKHQuYWx0S2V5KXx8Qm9vbGVhbih0LnNoaWZ0S2V5KX1jYW5TY3JvbGxab29tKHQpe3JldHVybiB0LmFsdEtleX1zZXRTdGF0ZSh0KXtpZih0aGlzLnN0YXRlPT10KXJldHVybjtsZXQgcj10aGlzLnN0YXRlO3RoaXMuc3RhdGU9dCx0aGlzLnJvb3QoKS5yZW1vdmVDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKHIpKSx0aGlzLnJvb3QoKS5hZGRDbGFzcyh0aGlzLnN0YXRlQ2xhc3NOYW1lKHQpKSxyPT14YS5QQU5OSU5HJiZ0aGlzLnBhbkVuZENhbGxiYWNrLmNhbGxDYWxsYmFja3MoKSx0PT14YS5QQU5OSU5HJiZ0aGlzLnBhblN0YXJ0Q2FsbGJhY2suY2FsbENhbGxiYWNrcygpfXN0YXRlQ2xhc3NOYW1lKHQpe3N3aXRjaCh0KXtjYXNlIHhhLlBBTk5JTkc6cmV0dXJuInBhbm5pbmciO2Nhc2UgeGEuRFJBR19aT09NSU5HOnJldHVybiJkcmFnLXpvb21pbmciO2Nhc2UgeGEuTk9ORTpkZWZhdWx0OnJldHVybiIifX1vblBhblN0YXJ0KHQpe3RoaXMucGFuU3RhcnRDYWxsYmFjay5hZGQodCl9b25QYW5FbmQodCl7dGhpcy5wYW5FbmRDYWxsYmFjay5hZGQodCl9b25TY3JvbGxab29tKHQpe3RoaXMucGFuWm9vbS5vblpvb21FbmQodCl9b25EcmFnWm9vbVN0YXJ0KHQpe3RoaXMuZHJhZ1pvb21MYXllci5pbnRlcmFjdGlvblN0YXJ0KHQpfW9uRHJhZ1pvb21FbmQodCl7dGhpcy5kcmFnWm9vbUxheWVyLmludGVyYWN0aW9uRW5kKHQpfX07dmFyIFBCOyhmdW5jdGlvbihlKXtlW2UuVEVYVD0wXT0iVEVYVCIsZVtlLkRPTT0xXT0iRE9NIn0pKFBCfHwoUEI9e30pKTt2YXIgRmY7KGZ1bmN0aW9uKGUpe2UuTE9HPSJsb2ciLGUuTElORUFSPSJsaW5lYXIifSkoRmZ8fChGZj17fSkpO3ZhciBWS3Q9MjAsRFM9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMsdSxoKXt0aGlzLmRpcnR5RGF0YXNldHM9bmV3IFNldCx0aGlzLnNlcmllc05hbWVzPVtdLHRoaXMubmFtZTJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9aSx0aGlzLnRvb2x0aXA9byx0aGlzLmRhdGFzZXRzPVtdLHRoaXMuX2lnbm9yZVlPdXRsaWVycz0hMSx0aGlzLmxhc3RQb2ludHNEYXRhc2V0PW5ldyBNbi5EYXRhc2V0LHRoaXMubmFuRGF0YXNldD1uZXcgTW4uRGF0YXNldCx0aGlzLnlWYWx1ZUFjY2Vzc29yPXIsdGhpcy5zeW1ib2xGdW5jdGlvbj11LHRoaXMuX2RlZmF1bHRYUmFuZ2U9bCx0aGlzLl9kZWZhdWx0WVJhbmdlPWMsdGhpcy50b29sdGlwQ29sdW1ucz1hLHRoaXMuYnVpbGRDaGFydCh0LHIsbixzLGgpfWJ1aWxkQ2hhcnQodCxyLG4saSxvKXt0aGlzLmRlc3Ryb3koKTtsZXQgYT10KCk7dGhpcy54QWNjZXNzb3I9YS5hY2Nlc3Nvcix0aGlzLnhTY2FsZT1hLnNjYWxlLHRoaXMueEF4aXM9YS5heGlzLHRoaXMueEF4aXMubWFyZ2luKDEpLnRpY2tMYWJlbFBhZGRpbmcoMyksbyYmdGhpcy54QXhpcy5mb3JtYXR0ZXIobyksdGhpcy55U2NhbGU9RFMuZ2V0WVNjYWxlRnJvbVR5cGUobiksdGhpcy55U2NhbGUuc2V0VmFsdWVQcm92aWRlckZvckRvbWFpbigoKT0+dGhpcy5nZXRWYWx1ZXNGb3JZQXhpc0RvbWFpbkNvbXB1dGUoKSksdGhpcy55QXhpcz1uZXcgTW4uQXhlcy5OdW1lcmljKHRoaXMueVNjYWxlLCJsZWZ0Iik7bGV0IHM9V3UoZEIpO3RoaXMueUF4aXMubWFyZ2luKDApLnRpY2tMYWJlbFBhZGRpbmcoNSkuZm9ybWF0dGVyKHMpLHRoaXMueUF4aXMudXNlc1RleHRXaWR0aEFwcHJveGltYXRpb24oITApLHRoaXMuZmlsbEFyZWE9aTtsZXQgbD1uZXcgemYodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsKCk9PnRoaXMucmVzZXREb21haW4oKSk7dGhpcy50b29sdGlwSW50ZXJhY3Rpb249dGhpcy5jcmVhdGVUb29sdGlwSW50ZXJhY3Rpb24obCksdGhpcy50b29sdGlwUG9pbnRzQ29tcG9uZW50PW5ldyBNbi5Db21wb25lbnQ7bGV0IGM9dGhpcy5idWlsZFBsb3QodGhpcy54U2NhbGUsdGhpcy55U2NhbGUsaSk7dGhpcy5ncmlkbGluZXM9bmV3IE1uLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKTtsZXQgdT1udWxsO24hPT1GZi5MT0cmJih1PW5ldyBNbi5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJob3Jpem9udGFsIiksdS5zY2FsZSh0aGlzLnlTY2FsZSkudmFsdWUoMCkpO2xldCBoPW5ldyBNbi5Db21wb25lbnRzLkd1aWRlTGluZUxheWVyKCJ2ZXJ0aWNhbCIpO2guc2NhbGUodGhpcy54U2NhbGUpLnZhbHVlKDApLHRoaXMuY2VudGVyPW5ldyBNbi5Db21wb25lbnRzLkdyb3VwKFt0aGlzLmdyaWRsaW5lcyx1LGgsYyx0aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQsbF0pLHRoaXMuY2VudGVyLmFkZENsYXNzKCJtYWluIiksdGhpcy5vdXRlcj1uZXcgTW4uQ29tcG9uZW50cy5UYWJsZShbW3RoaXMueUF4aXMsdGhpcy5jZW50ZXJdLFtudWxsLHRoaXMueEF4aXNdXSl9YnVpbGRQbG90KHQscixuKXtuJiYodGhpcy5tYXJnaW5BcmVhUGxvdD1uZXcgTW4uUGxvdHMuQXJlYSx0aGlzLm1hcmdpbkFyZWFQbG90LngodGhpcy54QWNjZXNzb3IsdCksdGhpcy5tYXJnaW5BcmVhUGxvdC55KG4uaGlnaGVyQWNjZXNzb3IsciksdGhpcy5tYXJnaW5BcmVhUGxvdC55MChuLmxvd2VyQWNjZXNzb3IpLHRoaXMubWFyZ2luQXJlYVBsb3QuYXR0cigiZmlsbCIsKGMsdSxoKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGgubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5tYXJnaW5BcmVhUGxvdC5hdHRyKCJmaWxsLW9wYWNpdHkiLC4zKSx0aGlzLm1hcmdpbkFyZWFQbG90LmF0dHIoInN0cm9rZS13aWR0aCIsMCkpLHRoaXMuc21vb3RoZWRBY2Nlc3Nvcj1jPT5jLnNtb290aGVkO2xldCBpPW5ldyBNbi5QbG90cy5MaW5lO2kueCh0aGlzLnhBY2Nlc3Nvcix0KSxpLnkodGhpcy55VmFsdWVBY2Nlc3NvcixyKSxpLmF0dHIoInN0cm9rZSIsKGMsdSxoKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGgubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5saW5lUGxvdD1pLHRoaXMuc2V0dXBUb29sdGlwcyhpKTtsZXQgbz1uZXcgTW4uUGxvdHMuTGluZTtpZihvLngodGhpcy54QWNjZXNzb3IsdCksby55KHRoaXMuc21vb3RoZWRBY2Nlc3NvcixyKSxvLmF0dHIoInN0cm9rZSIsKGMsdSxoKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKGgubWV0YWRhdGEoKS5uYW1lKSksdGhpcy5zbW9vdGhMaW5lUGxvdD1vLHRoaXMuc3ltYm9sRnVuY3Rpb24pe2xldCBjPW5ldyBNbi5QbG90cy5TY2F0dGVyO2MueCh0aGlzLnhBY2Nlc3Nvcix0KSxjLnkodGhpcy55VmFsdWVBY2Nlc3NvcixyKSxjLmF0dHIoImZpbGwiLCh1LGgsZik9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShmLm1ldGFkYXRhKCkubmFtZSkpLGMuYXR0cigib3BhY2l0eSIsMSksYy5zaXplKGdCKjIpLGMuc3ltYm9sKCh1LGgsZik9PnRoaXMuc3ltYm9sRnVuY3Rpb24oZi5tZXRhZGF0YSgpLm5hbWUpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdD1jfWxldCBhPW5ldyBNbi5QbG90cy5TY2F0dGVyO2EueCh0aGlzLnhBY2Nlc3Nvcix0KSxhLnkodGhpcy55VmFsdWVBY2Nlc3NvcixyKSxhLmF0dHIoImZpbGwiLGM9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShjLm5hbWUpKSxhLmF0dHIoIm9wYWNpdHkiLDEpLGEuc2l6ZShnQioyKSxhLmRhdGFzZXRzKFt0aGlzLmxhc3RQb2ludHNEYXRhc2V0XSksdGhpcy5zY2F0dGVyUGxvdD1hO2xldCBzPW5ldyBNbi5QbG90cy5TY2F0dGVyO3MueCh0aGlzLnhBY2Nlc3Nvcix0KSxzLnkoYz0+Yy5kaXNwbGF5WSxyKSxzLmF0dHIoImZpbGwiLGM9PnRoaXMuY29sb3JTY2FsZS5zY2FsZShjLm5hbWUpKSxzLmF0dHIoIm9wYWNpdHkiLDEpLHMuc2l6ZShMS3QqMikscy5kYXRhc2V0cyhbdGhpcy5uYW5EYXRhc2V0XSkscy5zeW1ib2woTW4uU3ltYm9sRmFjdG9yaWVzLnRyaWFuZ2xlKSx0aGlzLm5hbkRpc3BsYXk9cztsZXQgbD1bcyxhLG8saV07cmV0dXJuIHRoaXMubWFyZ2luQXJlYVBsb3QmJmwucHVzaCh0aGlzLm1hcmdpbkFyZWFQbG90KSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmbC5wdXNoKHRoaXMubWFya2Vyc1NjYXR0ZXJQbG90KSxuZXcgTW4uQ29tcG9uZW50cy5Hcm91cChsKX1pZ25vcmVZT3V0bGllcnModCl7dCE9PXRoaXMuX2lnbm9yZVlPdXRsaWVycyYmKHRoaXMuX2lnbm9yZVlPdXRsaWVycz10LHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCksdGhpcy55U2NhbGUuaWdub3JlT3V0bGllcih0KSx0aGlzLnJlc2V0WURvbWFpbigpKX1nZXRWYWx1ZXNGb3JZQXhpc0RvbWFpbkNvbXB1dGUoKXtsZXQgdD10aGlzLmdldEFjY2Vzc29yc0ZvckNvbXB1dGluZ1lSYW5nZSgpLHI9bj0+dC5tYXAoaT0+bi5kYXRhKCkubWFwKG89PmkobywtMSxuKSkpO3JldHVybiB6cy5mbGF0dGVuRGVlcCh0aGlzLmRhdGFzZXRzLm1hcChyKSkuZmlsdGVyKGlzRmluaXRlKX11cGRhdGVTcGVjaWFsRGF0YXNldHMoKXtsZXQgdD10aGlzLmdldFlBeGlzQWNjZXNzb3IoKSxyPXRoaXMuZGF0YXNldHMubWFwKG89PntsZXQgYT1udWxsLHM9by5kYXRhKCkuZmlsdGVyKGw9PiFpc05hTih0KGwsLTEsbykpKTtpZihzLmxlbmd0aD4wKXtsZXQgbD1zLmxlbmd0aC0xO2E9c1tsXSxhLm5hbWU9by5tZXRhZGF0YSgpLm5hbWUsYS5yZWxhdGl2ZT1yMChhLC0xLG8pfXJldHVybiBhfSkuZmlsdGVyKG89Pm8hPW51bGwpO3RoaXMubGFzdFBvaW50c0RhdGFzZXQuZGF0YShyKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cy5tYXAodGhpcy5jcmVhdGVTYW1wbGVkRGF0YXNldEZvck1hcmtlcnMpKTtsZXQgbj1vPT57bGV0IGE9bnVsbCxzPW8uZGF0YSgpLGw9MDtmb3IoO2w8cy5sZW5ndGgmJmE9PW51bGw7KWlzTmFOKHQoc1tsXSwtMSxvKSl8fChhPXQoc1tsXSwtMSxvKSksbCsrO2E9PW51bGwmJihhPTApO2xldCBjPVtdO2ZvcihsPTA7bDxzLmxlbmd0aDtsKyspaXNOYU4odChzW2xdLC0xLG8pKT8oc1tsXS5uYW1lPW8ubWV0YWRhdGEoKS5uYW1lLHNbbF0uZGlzcGxheVk9YSxzW2xdLnJlbGF0aXZlPXIwKHNbbF0sLTEsbyksYy5wdXNoKHNbbF0pKTphPXQoc1tsXSwtMSxvKTtyZXR1cm4gY30saT16cy5mbGF0dGVuKHRoaXMuZGF0YXNldHMubWFwKG4pKTt0aGlzLm5hbkRhdGFzZXQuZGF0YShpKX1yZXNldERvbWFpbigpe3RoaXMucmVzZXRYRG9tYWluKCksdGhpcy5yZXNldFlEb21haW4oKX1yZXNldFhEb21haW4oKXtsZXQgdDtpZih0aGlzLl9kZWZhdWx0WFJhbmdlIT1udWxsKXQ9dGhpcy5fZGVmYXVsdFhSYW5nZTtlbHNle2xldCByPXRoaXMueFNjYWxlO3IuX2RvbWFpbk1pbj1udWxsLHIuX2RvbWFpbk1heD1udWxsLHQ9ci5fZ2V0RXh0ZW50KCl9dGhpcy54U2NhbGUuZG9tYWluKHQpfXJlc2V0WURvbWFpbigpe3RoaXMuX2RlZmF1bHRZUmFuZ2UhPW51bGw/dGhpcy55U2NhbGUuZG9tYWluKHRoaXMuX2RlZmF1bHRZUmFuZ2UpOih0aGlzLnlTY2FsZS5hdXRvRG9tYWluKCksdGhpcy55U2NhbGUuZG9tYWluKHRoaXMueVNjYWxlLmRvbWFpbigpKSl9Z2V0QWNjZXNzb3JzRm9yQ29tcHV0aW5nWVJhbmdlKCl7bGV0IHQ9W3RoaXMuZ2V0WUF4aXNBY2Nlc3NvcigpXTtyZXR1cm4gdGhpcy5maWxsQXJlYSYmdC5wdXNoKHRoaXMuZmlsbEFyZWEubG93ZXJBY2Nlc3Nvcix0aGlzLmZpbGxBcmVhLmhpZ2hlckFjY2Vzc29yKSx0fWdldFlBeGlzQWNjZXNzb3IoKXtyZXR1cm4gdGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yfWNyZWF0ZVRvb2x0aXBJbnRlcmFjdGlvbih0KXtsZXQgcj1uZXcgd0Isbj0oKT0+e3IuZW5hYmxlZCghMSksdGhpcy5oaWRlVG9vbHRpcHMoKX0saT0oKT0+ci5lbmFibGVkKCEwKTtyZXR1cm4gdC5vblBhblN0YXJ0KG4pLHQub25EcmFnWm9vbVN0YXJ0KG4pLHQub25QYW5FbmQoaSksdC5vbkRyYWdab29tRW5kKGkpLHQub25TY3JvbGxab29tKCgpPT50aGlzLnVwZGF0ZVRvb2x0aXBDb250ZW50KHRoaXMuX2xhc3RNb3VzZVBvc2l0aW9uKSksci5vblBvaW50ZXJNb3ZlKG89Pnt0aGlzLl9sYXN0TW91c2VQb3NpdGlvbj1vLHRoaXMudXBkYXRlVG9vbHRpcENvbnRlbnQobyl9KSxyLm9uUG9pbnRlckV4aXQoKCk9PnRoaXMuaGlkZVRvb2x0aXBzKCkpLHJ9dXBkYXRlVG9vbHRpcENvbnRlbnQodCl7IXRoaXMubGluZVBsb3R8fCh3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fdG9vbHRpcFVwZGF0ZUFuaW1hdGlvbkZyYW1lKSx0aGlzLl90b29sdGlwVXBkYXRlQW5pbWF0aW9uRnJhbWU9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e2xldCByPXt4OnQueCx5OnQueX0sbj10aGlzLmdyaWRsaW5lcy5jb250ZW50KCkubm9kZSgpLmdldEJCb3goKSxpPXRoaXMubGluZVBsb3QuZGF0YXNldHMoKS5tYXAobD0+dGhpcy5maW5kQ2xvc2VzdFBvaW50KHIsbCkpLmZpbHRlcihsPT5Cb29sZWFuKGwpKSxvPU1uLlV0aWxzLkRPTS5pbnRlcnNlY3RzQkJveCxhPWkuZmlsdGVyKGw9Pm8obC54LGwueSxuKXx8aXNOYU4odGhpcy55VmFsdWVBY2Nlc3NvcihsLmRhdHVtLDAsbC5kYXRhc2V0KSkpLHM9YS5maWx0ZXIobD0+IWlzTmFOKHRoaXMueVZhbHVlQWNjZXNzb3IobC5kYXR1bSwwLGwuZGF0YXNldCkpKTtpZihpLmxlbmd0aCE9PTApe3RoaXMuc2NhdHRlclBsb3QuYXR0cigiZGlzcGxheSIsIm5vbmUiKTtsZXQgbD10aGlzLnRvb2x0aXBQb2ludHNDb21wb25lbnQuY29udGVudCgpLnNlbGVjdEFsbCgiLnBvaW50IikuZGF0YShzLGM9PmMuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpO2wuZW50ZXIoKS5hcHBlbmQoImNpcmNsZSIpLmNsYXNzZWQoInBvaW50IiwhMCksbC5hdHRyKCJyIixnQikuYXR0cigiY3giLGM9PmMueCkuYXR0cigiY3kiLGM9PmMueSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKS5hdHRyKCJmaWxsIixjPT50aGlzLmNvbG9yU2NhbGUuc2NhbGUoYy5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZSkpLGwuZXhpdCgpLnJlbW92ZSgpLHRoaXMuZHJhd1Rvb2x0aXBzKGEscix0aGlzLnRvb2x0aXBDb2x1bW5zKX1lbHNlIHRoaXMuaGlkZVRvb2x0aXBzKCl9KSl9aGlkZVRvb2x0aXBzKCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3Rvb2x0aXBVcGRhdGVBbmltYXRpb25GcmFtZSksdGhpcy50b29sdGlwLmhpZGUoKSx0aGlzLnNjYXR0ZXJQbG90LmF0dHIoImRpc3BsYXkiLCJibG9jayIpLHRoaXMudG9vbHRpcFBvaW50c0NvbXBvbmVudC5jb250ZW50KCkuc2VsZWN0QWxsKCIucG9pbnQiKS5yZW1vdmUoKX1zZXR1cFRvb2x0aXBzKHQpe3Qub25EZXRhY2goKCk9Pnt0aGlzLnRvb2x0aXBJbnRlcmFjdGlvbi5kZXRhY2hGcm9tKHQpLHRoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITEpfSksdC5vbkFuY2hvcigoKT0+e3RoaXMudG9vbHRpcEludGVyYWN0aW9uLmF0dGFjaFRvKHQpLHRoaXMudG9vbHRpcEludGVyYWN0aW9uLmVuYWJsZWQoITApfSl9ZHJhd1Rvb2x0aXBzKHQscixuKXtpZighdC5sZW5ndGgpe3RoaXMudG9vbHRpcC5oaWRlKCk7cmV0dXJufWxldHtjb2xvclNjYWxlOml9PXRoaXM7bj1be3RpdGxlOiIiLHN0YXRpYzohMSxldmFsVHlwZTpQQi5ET00sZXZhbHVhdGUoZCl7cmV0dXJuIEh0KHRoaXMpLnNlbGVjdCgic3BhbiIpLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKT0+aS5zY2FsZShkLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSksIiJ9LGVudGVyKGQpe0h0KHRoaXMpLmFwcGVuZCgic3BhbiIpLmNsYXNzZWQoInN3YXRjaCIsITApLnN0eWxlKCJiYWNrZ3JvdW5kLWNvbG9yIiwoKT0+aS5zY2FsZShkLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lKSl9fSwuLi5uXTtsZXQgYT1XdShlMCkscz1kPT5NYXRoLnBvdyhkLngtci54LDIpK01hdGgucG93KGQueS1yLnksMiksbD16cy5taW4odC5tYXAocykpLGM9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3Nvcjp0aGlzLnlWYWx1ZUFjY2Vzc29yO3RoaXMudG9vbHRpcFNvcnRpbmdNZXRob2Q9PT0iYXNjZW5kaW5nIj90PXpzLnNvcnRCeSh0LGQ9PmMoZC5kYXR1bSwtMSxkLmRhdGFzZXQpKTp0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09ImRlc2NlbmRpbmciP3Q9enMuc29ydEJ5KHQsZD0+YyhkLmRhdHVtLC0xLGQuZGF0YXNldCkpLnJldmVyc2UoKTp0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPT09Im5lYXJlc3QiP3Q9enMuc29ydEJ5KHQscyk6dD10LnNsaWNlKDApLnJldmVyc2UoKTtsZXQgdT10aGlzLGg9SHQodGhpcy50b29sdGlwLmNvbnRlbnQoKSkuc2VsZWN0KCJ0YWJsZSIpLGY9aC5zZWxlY3QoInRoZWFkIikuc2VsZWN0QWxsKCJ0aCIpLmRhdGEobiwoZCxnLF8pPT5kLnRpdGxlKTtmLmVudGVyKCkuYXBwZW5kKCJ0aCIpLnRleHQoZD0+ZC50aXRsZSkubm9kZXMoKSxmLmV4aXQoKS5yZW1vdmUoKTtsZXQgcD1oLnNlbGVjdCgidGJvZHkiKS5zZWxlY3RBbGwoInRyIikuZGF0YSh0LChkLGcsXyk9PmQuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWUpO3AuY2xhc3NlZCgiZGlzdGFudCIsZD0+e2xldCBnPWQuZGF0YXNldC5kYXRhKClbMF0sXz16cy5sYXN0KGQuZGF0YXNldC5kYXRhKCkpLHk9dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IoZywwLGQuZGF0YXNldCkpLHg9dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IoXywwLGQuZGF0YXNldCkpLGI9dGhpcy5zbW9vdGhpbmdFbmFibGVkP2QuZGF0dW0uc21vb3RoZWQ6dGhpcy55VmFsdWVBY2Nlc3NvcihkLmRhdHVtLDAsZC5kYXRhc2V0KTtyZXR1cm4gci54PHl8fHIueD54fHxpc05hTihiKX0pLmNsYXNzZWQoImNsb3Nlc3QiLGQ9PnMoZCk9PT1sKS5lYWNoKGZ1bmN0aW9uKGQpe3UuZHJhd1Rvb2x0aXBSb3codGhpcyxuLGQpfSkub3JkZXIoKSxwLmV4aXQoKS5yZW1vdmUoKSxwLmVudGVyKCkuYXBwZW5kKCJ0ciIpLmVhY2goZnVuY3Rpb24oZCl7dS5kcmF3VG9vbHRpcFJvdyh0aGlzLG4sZCl9KS5ub2RlcygpLHRoaXMudG9vbHRpcC51cGRhdGVBbmRQb3NpdGlvbih0aGlzLnRhcmdldFNWRy5ub2RlKCkpfWRyYXdUb29sdGlwUm93KHQscixuKXtsZXQgaT10aGlzLG89SHQodCkuc2VsZWN0QWxsKCJ0ZCIpLmRhdGEocik7by5lYWNoKGZ1bmN0aW9uKGEpe2Euc3RhdGljfHxpLmRyYXdUb29sdGlwQ29sdW1uLmNhbGwoaSx0aGlzLGEsbil9KSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVudGVyKCkuYXBwZW5kKCJ0ZCIpLmVhY2goZnVuY3Rpb24oYSl7ImVudGVyImluIGEmJmEuZW50ZXIuY2FsbCh0aGlzLG4pLGkuZHJhd1Rvb2x0aXBDb2x1bW4uY2FsbChpLHRoaXMsYSxuKX0pfWRyYXdUb29sdGlwQ29sdW1uKHQscixuKXtsZXR7c21vb3RoaW5nRW5hYmxlZDppfT10aGlzOyJldmFsVHlwZSJpbiByJiZyLmV2YWxUeXBlPT1QQi5ET00/ci5ldmFsdWF0ZS5jYWxsKHQsbix7c21vb3RoaW5nRW5hYmxlZDppfSk6SHQodCkudGV4dChyLmV2YWx1YXRlLmNhbGwodCxuLHtzbW9vdGhpbmdFbmFibGVkOml9KSl9ZmluZENsb3Nlc3RQb2ludCh0LHIpe2xldCBuPXIuZGF0YSgpLm1hcCgocyxsKT0+dGhpcy54U2NhbGUuc2NhbGUodGhpcy54QWNjZXNzb3IocyxsLHIpKSksaT16cy5zb3J0ZWRJbmRleChuLHQueCk7aWYobi5sZW5ndGg9PTApcmV0dXJuIG51bGw7aWYoaT09PW4ubGVuZ3RoKWk9aS0xO2Vsc2UgaWYoaSE9PTApe2xldCBzPU1hdGguYWJzKG5baS0xXS10LngpLGw9TWF0aC5hYnMobltpXS10LngpO2k9czxsP2ktMTppfWxldCBvPXIuZGF0YSgpW2ldLGE9dGhpcy5zbW9vdGhpbmdFbmFibGVkP3RoaXMuc21vb3RoZWRBY2Nlc3NvcihvLGkscik6dGhpcy55VmFsdWVBY2Nlc3NvcihvLGkscik7cmV0dXJue3g6bltpXSx5OnRoaXMueVNjYWxlLnNjYWxlKGEpLGRhdHVtOm8sZGF0YXNldDpyfX1yZXNtb290aERhdGFzZXQodCl7bGV0IHI9dC5kYXRhKCksbj10aGlzLnNtb290aGluZ1dlaWdodCxpPXIubGVuZ3RoPjA/MDpOYU4sbz0wLGE9ci5tYXAoKGwsYyk9PnRoaXMueVZhbHVlQWNjZXNzb3IobCxjLHQpKSxzPWEuZXZlcnkobD0+bD09YVswXSk7ci5mb3JFYWNoKChsLGMpPT57bGV0IHU9YVtjXTtpZihzfHwhTnVtYmVyLmlzRmluaXRlKHUpKWwuc21vb3RoZWQ9dTtlbHNle2k9aSpuKygxLW4pKnUsbysrO2xldCBoPTE7biE9PTEmJihoPTEtTWF0aC5wb3cobixvKSksbC5zbW9vdGhlZD1pL2h9fSl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5uYW1lMmRhdGFzZXRzW3RdPT09dm9pZCAwJiYodGhpcy5uYW1lMmRhdGFzZXRzW3RdPW5ldyBNbi5EYXRhc2V0KFtdLHtuYW1lOnQsbWV0YTpudWxsfSkpLHRoaXMubmFtZTJkYXRhc2V0c1t0XX1zdGF0aWMgZ2V0WVNjYWxlRnJvbVR5cGUodCl7aWYodD09PUZmLkxPRylyZXR1cm4gbmV3IENCO2lmKHQ9PT1GZi5MSU5FQVIpcmV0dXJuIG5ldyBTQjt0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB5U2NhbGUgdHlwZSAiK3QpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLHQ9dC5zb3J0KCksdC5yZXZlcnNlKCksdGhpcy5zZXJpZXNOYW1lcz10fWRpc2FibGVDaGFuZ2VzKCl7dGhpcy5kaXJ0eURhdGFzZXRzLnNpemV8fCh0aGlzLmxpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLnNtb290aExpbmVQbG90JiZ0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKFtdKSx0aGlzLm1hcmdpbkFyZWFQbG90JiZ0aGlzLm1hcmdpbkFyZWFQbG90LmRhdGFzZXRzKFtdKSl9Y29tbWl0Q2hhbmdlcygpe3RoaXMuZGF0YXNldHM9dGhpcy5zZXJpZXNOYW1lcy5tYXAodD0+dGhpcy5nZXREYXRhc2V0KHQpKSxbLi4udGhpcy5kaXJ0eURhdGFzZXRzXS5mb3JFYWNoKHQ9Pnt0aGlzLnNtb290aGluZ0VuYWJsZWQmJnRoaXMucmVzbW9vdGhEYXRhc2V0KHRoaXMuZ2V0RGF0YXNldCh0KSl9KSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpLHRoaXMubGluZVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cyksdGhpcy5zbW9vdGhpbmdFbmFibGVkJiZ0aGlzLnNtb290aExpbmVQbG90LmRhdGFzZXRzKHRoaXMuZGF0YXNldHMpLHRoaXMubWFyZ2luQXJlYVBsb3QmJnRoaXMubWFyZ2luQXJlYVBsb3QuZGF0YXNldHModGhpcy5kYXRhc2V0cyksdGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCksdGhpcy5kaXJ0eURhdGFzZXRzLmNsZWFyKCl9Y3JlYXRlU2FtcGxlZERhdGFzZXRGb3JNYXJrZXJzKHQpe2xldCByPXQuZGF0YSgpO2lmKHIubGVuZ3RoPD1WS3QpcmV0dXJuIHQ7bGV0IG49TWF0aC5jZWlsKHIubGVuZ3RoL1ZLdCksaT1uZXcgQXJyYXkoTWF0aC5mbG9vcihyLmxlbmd0aC9uKSk7Zm9yKGxldCBvPTAsYT0wO288aS5sZW5ndGg7bysrLGErPW4paVtvXT1yW2FdO3JldHVybiBuZXcgTW4uRGF0YXNldChpLHQubWV0YWRhdGEoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZGlzYWJsZUNoYW5nZXMoKSx0aGlzLmdldERhdGFzZXQodCkuZGF0YShyKSx0aGlzLmRpcnR5RGF0YXNldHMuYWRkKHQpfXNldFNlcmllc01ldGFkYXRhKHQscil7dGhpcy5kaXNhYmxlQ2hhbmdlcygpLHRoaXMuZ2V0RGF0YXNldCh0KS5tZXRhZGF0YShNeChLbCh7fSx0aGlzLmdldERhdGFzZXQodCkubWV0YWRhdGEoKSkse21ldGE6cn0pKSx0aGlzLmRpcnR5RGF0YXNldHMuYWRkKHQpfXNtb290aGluZ1VwZGF0ZSh0KXt0aGlzLnNtb290aGluZ1dlaWdodD10LHRoaXMuZGF0YXNldHMuZm9yRWFjaChyPT50aGlzLnJlc21vb3RoRGF0YXNldChyKSksdGhpcy5zbW9vdGhpbmdFbmFibGVkfHwodGhpcy5saW5lUGxvdC5hZGRDbGFzcygiZ2hvc3QiKSx0aGlzLnNjYXR0ZXJQbG90LnkodGhpcy5zbW9vdGhlZEFjY2Vzc29yLHRoaXMueVNjYWxlKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITAsdGhpcy5zbW9vdGhMaW5lUGxvdC5kYXRhc2V0cyh0aGlzLmRhdGFzZXRzKSksdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QmJnRoaXMubWFya2Vyc1NjYXR0ZXJQbG90LnkodGhpcy5nZXRZQXhpc0FjY2Vzc29yKCksdGhpcy55U2NhbGUpLHRoaXMudXBkYXRlU3BlY2lhbERhdGFzZXRzKCl9c21vb3RoaW5nRGlzYWJsZSgpe3RoaXMuc21vb3RoaW5nRW5hYmxlZCYmKHRoaXMubGluZVBsb3QucmVtb3ZlQ2xhc3MoImdob3N0IiksdGhpcy5zY2F0dGVyUGxvdC55KHRoaXMueVZhbHVlQWNjZXNzb3IsdGhpcy55U2NhbGUpLHRoaXMuc21vb3RoTGluZVBsb3QuZGF0YXNldHMoW10pLHRoaXMuc21vb3RoaW5nRW5hYmxlZD0hMSx0aGlzLnVwZGF0ZVNwZWNpYWxEYXRhc2V0cygpKSx0aGlzLm1hcmtlcnNTY2F0dGVyUGxvdCYmdGhpcy5tYXJrZXJzU2NhdHRlclBsb3QueSh0aGlzLmdldFlBeGlzQWNjZXNzb3IoKSx0aGlzLnlTY2FsZSl9c2V0Q29sb3JTY2FsZSh0KXt0aGlzLmNvbG9yU2NhbGU9dH1zZXRUb29sdGlwQ29sdW1ucyh0KXt0aGlzLnRvb2x0aXBDb2x1bW5zPXR9c2V0VG9vbHRpcFNvcnRpbmdNZXRob2QodCl7dGhpcy50b29sdGlwU29ydGluZ01ldGhvZD10fXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KSx0aGlzLl9kZWZhdWx0WFJhbmdlIT1udWxsJiZ0aGlzLnJlc2V0WERvbWFpbigpLHRoaXMuX2RlZmF1bHRZUmFuZ2UhPW51bGwmJnRoaXMucmVzZXRZRG9tYWluKCksdGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dEluUmFmKCl9cmVkcmF3KCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZiksdGhpcy5fcmVkcmF3UmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLm1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0KCksdGhpcy5vdXRlci5yZWRyYXcoKX0pfW1lYXN1cmVCQm94QW5kTWF5YmVJbnZhbGlkYXRlTGF5b3V0SW5SYWYoKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5faW52YWxpZGF0ZUxheW91dFJhZiksdGhpcy5faW52YWxpZGF0ZUxheW91dFJhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5tZWFzdXJlQkJveEFuZE1heWJlSW52YWxpZGF0ZUxheW91dCgpfSl9bWVhc3VyZUJCb3hBbmRNYXliZUludmFsaWRhdGVMYXlvdXQoKXtpZih0aGlzLl9sYXN0RHJhd0JCb3gpe2xldHt3aWR0aDp0fT10aGlzLl9sYXN0RHJhd0JCb3gse3dpZHRoOnJ9PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PT0wJiZ0PHImJnRoaXMub3V0ZXIuaW52YWxpZGF0ZUNhY2hlKCl9dGhpcy5fbGFzdERyYXdCQm94PXRoaXMudGFyZ2V0U1ZHLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1kZXN0cm95KCl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JlZHJhd1JhZiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2ludmFsaWRhdGVMYXlvdXRSYWYpLHRoaXMub3V0ZXImJnRoaXMub3V0ZXIuZGVzdHJveSgpfW9uQW5jaG9yKHQpe3RoaXMub3V0ZXImJnRoaXMub3V0ZXIub25BbmNob3IodCl9aXNEYXRhRml0VG9Eb21haW4oKXtyZXR1cm4gdCh0aGlzLnhBeGlzLmdldFNjYWxlKCkpJiZ0KHRoaXMueUF4aXMuZ2V0U2NhbGUoKSk7ZnVuY3Rpb24gdChyKXtsZXQgbj1yLmdldFRyYW5zZm9ybWF0aW9uRG9tYWluKCksaT1yLmdldFRyYW5zZm9ybWF0aW9uRXh0ZW50KCk7cmV0dXJuIGlbMF09PT1uWzBdJiZpWzFdPT09blsxXX19fTt2YXIgcUt0PUVlKE9lKCksMSksaXN0PUVlKHdsKCksMSk7X3Moe21vZHVsZU5hbWU6InBsb3R0YWJsZS1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIAoucGxvdHRhYmxlLWNvbG9ycy0wIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTI3OWM3OyAvKiBJTkRJR08gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtMSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZkMzczZTsgLyogQ09SQUxfUkVEICovCn0KCi5wbG90dGFibGUtY29sb3JzLTIgewogIGJhY2tncm91bmQtY29sb3I6ICM2M2MyNjE7IC8qIEZFUk4gKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtMyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZDQxOTsgLyogQlJJR0hUX1NVTiAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy00IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmMyYjZmOyAvKiBKQUNBUlRBICovCn0KCi5wbG90dGFibGUtY29sb3JzLTUgewogIGJhY2tncm91bmQtY29sb3I6ICNmZjc5Mzk7IC8qIEJVUk5JTkdfT1JBTkdFICovCn0KCi5wbG90dGFibGUtY29sb3JzLTYgewogIGJhY2tncm91bmQtY29sb3I6ICNkYjJlNjU7IC8qIENFUklTRV9SRUQgKi8KfQoKLnBsb3R0YWJsZS1jb2xvcnMtNyB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzk5Y2U1MDsgLyogQ09OSUZFUiAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy04IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTYyNTY1OyAvKiBST1lBTF9IRUFUSCAqLwp9CgoucGxvdHRhYmxlLWNvbG9ycy05IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDZjY2NjOyAvKiBST0JJTlNfRUdHX0JMVUUgKi8KfQoKLyoqCiAqIFVzZXItc3VwcGxpZWQgcmVuZGVyVG8gZWxlbWVudC4KICovCi5wbG90dGFibGUgewogIGRpc3BsYXk6IGJsb2NrOyAvKiBtdXN0IGJlIGJsb2NrIGVsZW1lbnRzIGZvciB3aWR0aC9oZWlnaHQgY2FsY3VsYXRpb25zIHRvIHdvcmsgaW4gRmlyZWZveC4gKi8KICBwb2ludGVyLWV2ZW50czogdmlzaWJsZUZpbGw7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIC8qKgogICAqIFByZSAzLjAsIHVzZXJzIGNvdWxkIHNldCB0aGUgZGltZW5zaW9uIG9mIHRoZSByb290IGVsZW1lbnQgaW4gdHdvIHdheXM6IGVpdGhlciB1c2luZyBDU1MKICAgKiAoaW5saW5lIG9yIHRocm91Z2ggYSBzdHlsZXNoZWV0KSwgb3IgdXNpbmcgdGhlIFNWRyB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcy4gQnkgZGVmYXVsdCwgd2UKICAgKiBzZXQgdGhlIFNWRyB3aWR0aC9oZWlnaHQgYXR0cmlidXRlcyB0byAxMDAlLgogICAqCiAgICogUG9zdCAzLjAgdGhlIHJvb3QgZWxlbWVudCBpcyBhbHdheXMgYSBub3JtYWwgZGl2IGFuZCB0aGUgb25seSB3YXkgdG8gc2V0IHRoZSBkaW1lbnNpb25zIGlzCiAgICogdG8gdXNlIENTUy4gVG8gcmVwbGljYXRlIHRoZSAiMTAwJS1ieS1kZWZhdWx0IiBiZWhhdmlvciwgd2UgYXBwbHkgd2lkdGgvaGVpZ2h0IDEwMCUuCiAgICovCiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwp9CgovKioKICogVGhlIF9lbGVtZW50IHRoYXQgcm9vdHMgZWFjaCBDb21wb25lbnQncyBET00uCiAqLwoucGxvdHRhYmxlIC5jb21wb25lbnQgewogIC8qIEFsbG93IGNvbXBvbmVudHMgdG8gYmUgcG9zaXRpb25lZCB3aXRoIGV4cGxpY2l0IGxlZnQvdG9wL3dpZHRoL2hlaWdodCBzdHlsZXMgKi8KICBwb3NpdGlvbjogYWJzb2x1dGU7Cn0KCi5wbG90dGFibGUgLmJhY2tncm91bmQtY29udGFpbmVyLAoucGxvdHRhYmxlIC5jb250ZW50LAoucGxvdHRhYmxlIC5mb3JlZ3JvdW5kLWNvbnRhaW5lciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKfQoKLyoqCiAqIERvbid0IGFsbG93IHN2ZyBlbGVtZW50cyBhYm92ZSB0aGUgY29udGVudCB0byBzdGVhbCBldmVudHMKICovCi5wbG90dGFibGUgLmZvcmVncm91bmQtY29udGFpbmVyIHsKICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLnBsb3R0YWJsZSAuY29tcG9uZW50LW92ZXJmbG93LWhpZGRlbiB7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLnBsb3R0YWJsZSAuY29tcG9uZW50LW92ZXJmbG93LXZpc2libGUgewogIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoucGxvdHRhYmxlIC5wbG90LWNhbnZhcy1jb250YWluZXIgewogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvdmVyZmxvdzogaGlkZGVuOwp9CgoucGxvdHRhYmxlIC5wbG90LWNhbnZhcyB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIC8qKgogICAqIFBsYXkgd2VsbCB3aXRoIGRlZmVycmVkIHJlbmRlcmluZy4KICAgKi8KICB0cmFuc2Zvcm0tb3JpZ2luOiAwcHggMHB4IDBweDsKfQoKLnBsb3R0YWJsZSB0ZXh0IHsKICB0ZXh0LXJlbmRlcmluZzogZ2VvbWV0cmljUHJlY2lzaW9uOwp9CgoucGxvdHRhYmxlIC5sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwp9CgoucGxvdHRhYmxlIC5iYXItbGFiZWwtdGV4dC1hcmVhIHRleHQsCi5wbG90dGFibGUgLnNjYXR0ZXItbGFiZWwtdGV4dC1hcmVhIHRleHQgewogIGZvbnQtc2l6ZTogMTJweDsKfQoKLnBsb3R0YWJsZSAubGFiZWwtYXJlYSB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtc2l6ZTogMTRweDsKfQoKLnBsb3R0YWJsZSAubGlnaHQtbGFiZWwgdGV4dCB7CiAgZmlsbDogd2hpdGU7Cn0KCi5wbG90dGFibGUgLmRhcmstbGFiZWwgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKfQoKLnBsb3R0YWJsZSAub2ZmLWJhci1sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwp9CgoucGxvdHRhYmxlIC5zdGFja2VkLWJhci1sYWJlbCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtc3R5bGU6IG5vcm1hbDsKfQoKLnBsb3R0YWJsZSAuc3RhY2tlZC1iYXItcGxvdCAub2ZmLWJhci1sYWJlbCB7CiAgLyogSEFDS0hBQ0sgIzI3OTU6IGNvcnJlY3Qgb2ZmLWJhciBsYWJlbCBsb2dpYyB0byBiZSBpbXBsZW1lbnRlZCBvbiBTdGFja2VkQmFyICovCiAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7Cn0KCi5wbG90dGFibGUgLmF4aXMtbGFiZWwgdGV4dCB7CiAgZm9udC1zaXplOiAxMHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoucGxvdHRhYmxlIC50aXRsZS1sYWJlbCB0ZXh0IHsKICBmb250LXNpemU6IDIwcHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5wbG90dGFibGUgLmF4aXMgbGluZS5iYXNlbGluZSB7CiAgc3Ryb2tlOiAjQ0NDOwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5heGlzIGxpbmUudGljay1tYXJrIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmF4aXMgdGV4dCB7CiAgZmlsbDogIzMyMzEzRjsKICBmb250LXNpemU6IDEycHg7CiAgZm9udC13ZWlnaHQ6IDIwMDsKICBsaW5lLWhlaWdodDogbm9ybWFsOwp9CgoucGxvdHRhYmxlIC5heGlzIC5hbm5vdGF0aW9uLWNpcmNsZSB7CiAgZmlsbDogd2hpdGU7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgc3Ryb2tlOiAjQ0NDOwp9CgoucGxvdHRhYmxlIC5heGlzIC5hbm5vdGF0aW9uLWxpbmUgewogIHN0cm9rZTogI0NDQzsKICBzdHJva2Utd2lkdGg6IDFweDsKfQoKLnBsb3R0YWJsZSAuYXhpcyAuYW5ub3RhdGlvbi1yZWN0IHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgZmlsbDogd2hpdGU7Cn0KCi5wbG90dGFibGUgLmJhci1wbG90IC5iYXNlbGluZSB7CiAgc3Ryb2tlOiAjOTk5Owp9CgoucGxvdHRhYmxlIC5ncmlkbGluZXMgbGluZSB7CiAgc3Ryb2tlOiAjM0MzQzNDOyAvKiBoYWNraGFjazogZ3JpZGxpbmVzIHNob3VsZCBiZSBzb2xpZDsgc2VlICM4MjAgKi8KICBvcGFjaXR5OiAwLjI1OwogIHN0cm9rZS13aWR0aDogMXB4Owp9CgoucGxvdHRhYmxlIC5zZWxlY3Rpb24tYm94LWxheWVyIC5zZWxlY3Rpb24tYXJlYSB7CiAgZmlsbDogYmxhY2s7CiAgZmlsbC1vcGFjaXR5OiAwLjAzOwogIHN0cm9rZTogI0NDQzsKfQovKiBEcmFnQm94TGF5ZXIgKi8KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUgLmRyYWctZWRnZS1sciB7CiAgY3Vyc29yOiBldy1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueS1yZXNpemFibGUgLmRyYWctZWRnZS10YiB7CiAgY3Vyc29yOiBucy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci10bCB7CiAgY3Vyc29yOiBud3NlLXJlc2l6ZTsKfQoucGxvdHRhYmxlIC5kcmFnLWJveC1sYXllci54LXJlc2l6YWJsZS55LXJlc2l6YWJsZSAuZHJhZy1jb3JuZXItdHIgewogIGN1cnNvcjogbmVzdy1yZXNpemU7Cn0KLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIueC1yZXNpemFibGUueS1yZXNpemFibGUgLmRyYWctY29ybmVyLWJsIHsKICBjdXJzb3I6IG5lc3ctcmVzaXplOwp9Ci5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLngtcmVzaXphYmxlLnktcmVzaXphYmxlIC5kcmFnLWNvcm5lci1iciB7CiAgY3Vyc29yOiBud3NlLXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAuZHJhZy1ib3gtbGF5ZXIubW92YWJsZSAuc2VsZWN0aW9uLWFyZWEgewogIGN1cnNvcjogbW92ZTsgLyogSUUgZmFsbGJhY2sgKi8KICBjdXJzb3I6IC1tb3otZ3JhYjsKICBjdXJzb3I6IC13ZWJraXQtZ3JhYjsKICBjdXJzb3I6IGdyYWI7Cn0KCi5wbG90dGFibGUgLmRyYWctYm94LWxheWVyLm1vdmFibGUgLnNlbGVjdGlvbi1hcmVhOmFjdGl2ZSB7CiAgY3Vyc29yOiAtbW96LWdyYWJiaW5nOwogIGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZzsKICBjdXJzb3I6IGdyYWJiaW5nOwp9Ci8qIC9EcmFnQm94TGF5ZXIgKi8KCi5wbG90dGFibGUgLmd1aWRlLWxpbmUtbGF5ZXIgbGluZS5ndWlkZS1saW5lIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLmRyYWctbGluZS1sYXllci5lbmFibGVkLnZlcnRpY2FsIGxpbmUuZHJhZy1lZGdlIHsKICBjdXJzb3I6IGV3LXJlc2l6ZTsKfQoKLnBsb3R0YWJsZSAuZHJhZy1saW5lLWxheWVyLmVuYWJsZWQuaG9yaXpvbnRhbCBsaW5lLmRyYWctZWRnZSB7CiAgY3Vyc29yOiBucy1yZXNpemU7Cn0KCi5wbG90dGFibGUgLmxlZ2VuZCB0ZXh0IHsKICBmaWxsOiAjMzIzMTNGOwogIGZvbnQtc2l6ZTogMTJweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsaW5lLWhlaWdodDogbm9ybWFsOwp9CgoucGxvdHRhYmxlIC5pbnRlcnBvbGF0ZWQtY29sb3ItbGVnZW5kIHJlY3Quc3dhdGNoLWJvdW5kaW5nLWJveCB7CiAgZmlsbDogbm9uZTsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5wbG90dGFibGUgLndhdGVyZmFsbC1wbG90IGxpbmUuY29ubmVjdG9yIHsKICBzdHJva2U6ICNDQ0M7CiAgc3Ryb2tlLXdpZHRoOiAxcHg7Cn0KCi5wbG90dGFibGUgLnBpZS1wbG90IC5hcmMub3V0bGluZSB7CiAgc3Ryb2tlLWxpbmVqb2luOiByb3VuZDsKfQoKYH0pO3ZhciBpMDsoZnVuY3Rpb24oZSl7ZS5HUk9VUD0iRyIsZS5ESVY9IkRJViIsZS5TVkc9IlNWRyIsZS5URVhUPSJURVhUIn0pKGkwfHwoaTA9e30pKTt2YXIgcnN0PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudW5pcXVlSWQ9MCx0aGlzLnJvb3Q9dH1leHBvcnRBc1N0cmluZygpe2xldCB0PXRoaXMuY29udmVydCh0aGlzLnJvb3QpO2lmKCF0KXJldHVybiIiO2xldCByPXRoaXMuY3JlYXRlUm9vdFN2ZygpO3JldHVybiByLmFwcGVuZENoaWxkKHQpLHIub3V0ZXJIVE1MfWNyZWF0ZVVuaXF1ZUlkKHQpe3JldHVybmAke3R9XyR7dGhpcy51bmlxdWVJZCsrfWB9Z2V0U2l6ZSgpe3JldHVybiB0aGlzLnJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y3JlYXRlUm9vdFN2Zygpe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN2ZyIpLHI9dGhpcy5nZXRTaXplKCk7cmV0dXJuIHQuc2V0QXR0cmlidXRlTlMoInN2ZyIsInZpZXdCb3giLGAwIDAgJHtyLndpZHRofSAke3IuaGVpZ2h0fWApLHQuc2V0QXR0cmlidXRlKCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiksdH1jcmVhdGVDb252ZXJ0ZWROb2RlKHQpe2xldCByPXQubm9kZU5hbWUudG9VcHBlckNhc2UoKTtpZih0Lm5vZGVUeXBlPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKHI9PWkwLkRJVnx8cj09aTAuU1ZHKSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpMC5HUk9VUCksaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxvPXBhcnNlSW50KGkubGVmdCwxMCksYT1wYXJzZUludChpLnRvcCwxMCk7aWYob3x8YSl7bGV0IHM9dGhpcy5jcmVhdGVVbmlxdWVJZCgiY2xpcCIpO24uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHtvfSwgJHthfSlgKSxuLnNldEF0dHJpYnV0ZSgiY2xpcC1wYXRoIixgdXJsKCMke3N9KWApO2xldCBsPXBhcnNlSW50KGkud2lkdGgsMTApLGM9cGFyc2VJbnQoaS5oZWlnaHQsMTApLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicmVjdCIpO3Uuc2V0QXR0cmlidXRlKCJ3aWR0aCIsU3RyaW5nKGwpKSx1LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixTdHJpbmcoYykpO2xldCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygic3ZnIiwiY2xpcFBhdGgiKTtoLmlkPXMsaC5hcHBlbmRDaGlsZCh1KSxuLmFwcGVuZENoaWxkKGgpfXJldHVybiBufWVsc2UgcmV0dXJuIHQuY2xvbmVOb2RlKCl9Y29udmVydCh0KXtsZXQgcj10aGlzLmNyZWF0ZUNvbnZlcnRlZE5vZGUodCk7cmV0dXJuIEFycmF5LmZyb20odC5jaGlsZE5vZGVzKS5tYXAoaT0+dGhpcy5jb252ZXJ0KGkpKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChpPT57ci5hcHBlbmRDaGlsZChpKX0pLHIubm9kZU5hbWUudG9VcHBlckNhc2UoKT09aTAuR1JPVVAmJiFyLmhhc0NoaWxkTm9kZXMoKXx8dGhpcy5zaG91bGRPbWl0Tm9kZSh0KT9udWxsOnRoaXMuc3RyaXBDbGFzcyh0aGlzLnRyYW5zZmVyU3R5bGUodCxyKSl9c3RyaXBDbGFzcyh0KXtyZXR1cm4gdC5ub2RlVHlwZT09Tm9kZS5FTEVNRU5UX05PREUmJnQucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLHR9dHJhbnNmZXJTdHlsZSh0LHIpe2lmKHIubm9kZVR5cGUhPU5vZGUuRUxFTUVOVF9OT0RFKXJldHVybiByO2xldCBuPXIsaT1yLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCksbz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm4gaT09aTAuVEVYVCYmT2JqZWN0LmFzc2lnbihuLnN0eWxlLHtmb250RmFtaWx5Om8uZm9udEZhbWlseSxmb250U2l6ZTpvLmZvbnRTaXplLGZvbnRXZWlnaHQ6by5mb250V2VpZ2h0fSksaSE9aTAuR1JPVVAmJihuLnNldEF0dHJpYnV0ZSgiZmlsbCIsby5maWxsKSxuLnNldEF0dHJpYnV0ZSgic3Ryb2tlIixvLnN0cm9rZSksbi5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsby5zdHJva2VXaWR0aCkpLG8ub3BhY2l0eSE9IjEiJiZuLnNldEF0dHJpYnV0ZSgib3BhY2l0eSIsby5vcGFjaXR5KSxyfXNob3VsZE9taXROb2RlKHQpe3JldHVybiExfX0sSUI9Y2xhc3MgZXh0ZW5kcyByc3R7c2hvdWxkT21pdE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFP3QuY2xhc3NMaXN0LmNvbnRhaW5zKCJzY2F0dGVyLXBsb3QiKTohMX19O19zKHttb2R1bGVOYW1lOiJ2ei1wYW4tem9vbS1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIC5oZWxwIHsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxczsKICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAxczsKICAgICAgYW5pbWF0aW9uLW5hbWU6IGZhZGUtb3V0OwogICAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAzMCwgMzAsIDAuNik7CiAgICAgIGJvdHRvbTogMDsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBsZWZ0OiAwOwogICAgICBvcGFjaXR5OiAxOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMDsKICAgICAgdG9wOiAwOwogICAgfQoKICAgIC5oZWxwID4gc3BhbiB7CiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICB9CgogICAgQGtleWZyYW1lcyBmYWRlLW91dCB7CiAgICAgIDAlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAxMDAlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CiAgICB9CiAgYH0pO3ZhciBMcWU9V3UoZTApLFVLdD1lPT5pc05hTihlKT8iTmFOIjpMcWUoZSksb3N0PVt7dGl0bGU6Ik5hbWUiLGV2YWx1YXRlOmU9PmUuZGF0YXNldC5tZXRhZGF0YSgpLm5hbWV9LHt0aXRsZToiU21vb3RoZWQiLGV2YWx1YXRlKGUsdCl7bGV0e3Ntb290aGluZ0VuYWJsZWQ6cn09dDtyZXR1cm4gVUt0KHI/ZS5kYXR1bS5zbW9vdGhlZDplLmRhdHVtLnNjYWxhcil9fSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTplPT5VS3QoZS5kYXR1bS5zY2FsYXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOmU9Png0KGUuZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6ZT0+X0IoZS5kYXR1bS53YWxsX3RpbWUpfSx7dGl0bGU6IlJlbGF0aXZlIixldmFsdWF0ZTplPT55QihyMChlLmRhdHVtLC0xLGUuZGF0YXNldCkpfV0sWnI9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29sb3JTY2FsZT1uZXcgaXN0LlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKDApKSx0aGlzLnNtb290aGluZ0VuYWJsZWQ9ITEsdGhpcy5zbW9vdGhpbmdXZWlnaHQ9LjYsdGhpcy54VHlwZT1udWxsLHRoaXMueENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZD1udWxsLHRoaXMueVZhbHVlQWNjZXNzb3I9dD0+dC5zY2FsYXIsdGhpcy50b29sdGlwQ29sdW1ucz1vc3QsdGhpcy55U2NhbGVUeXBlPUZmLkxJTkVBUix0aGlzLmlnbm9yZVlPdXRsaWVycz0hMSx0aGlzLnRvb2x0aXBTb3J0aW5nTWV0aG9kPSJkZWZhdWx0Iix0aGlzLnRvb2x0aXBQb3NpdGlvbj1HMS5CT1RUT00sdGhpcy5fdmlzaWJsZVNlcmllc0NhY2hlPVtdLHRoaXMuX3Nlcmllc0RhdGFDYWNoZT17fSx0aGlzLl9zZXJpZXNNZXRhZGF0YUNhY2hlPXt9LHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD1udWxsfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuY2hhcnRkaXYsITApfWF0dGFjaGVkKCl7bGV0IHQ9e2NhcHR1cmU6ITAscGFzc2l2ZTohMH07dGhpcy5fbGlzdGVuKHRoaXMsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24uYmluZCh0aGlzKSx0KSx0aGlzLl9saXN0ZW4odGhpcywibW91c2V1cCIsdGhpcy5fb25Nb3VzZVVwLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5ZG93biIsdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksdCksdGhpcy5fbGlzdGVuKHdpbmRvdywia2V5dXAiLHRoaXMuX29uS2V5VXAuYmluZCh0aGlzKSx0KX1kZXRhY2hlZCgpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCE9PW51bGwmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwpLHRoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuZGVzdHJveSgpLHRoaXMuX2NoYXJ0PXZvaWQgMCksdGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzLmZvckVhY2goKHtub2RlOnQsZXZlbnROYW1lOnIsZnVuYzpuLG9wdGlvbjppfSk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixuLGkpfSksdGhpcy5fbGlzdGVuZXJzLmNsZWFyKCkpfV9saXN0ZW4odCxyLG4saT17fSl7dGhpcy5fbGlzdGVuZXJzfHwodGhpcy5fbGlzdGVuZXJzPW5ldyBTZXQpLHRoaXMuX2xpc3RlbmVycy5hZGQoe25vZGU6dCxldmVudE5hbWU6cixmdW5jOm4sb3B0aW9uOml9KSx0LmFkZEV2ZW50TGlzdGVuZXIocixuLGkpfV9vbktleURvd24odCl7dGhpcy50b2dnbGVDbGFzcygicGFua2V5Iix6Zi5pc1BhbktleSh0KSl9X29uS2V5VXAodCl7dGhpcy50b2dnbGVDbGFzcygicGFua2V5Iix6Zi5pc1BhbktleSh0KSl9X29uTW91c2VEb3duKHQpe3RoaXMudG9nZ2xlQ2xhc3MoIm1vdXNlZG93biIsITApfV9vbk1vdXNlVXAodCl7dGhpcy50b2dnbGVDbGFzcygibW91c2Vkb3duIiwhMSl9aXNEYXRhRml0VG9Eb21haW4oKXtyZXR1cm4gdGhpcy5fY2hhcnQ/dGhpcy5fY2hhcnQuaXNEYXRhRml0VG9Eb21haW4oKTohMH1zZXRWaXNpYmxlU2VyaWVzKHQpe3FLdC5pc0VxdWFsKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZSx0KXx8KHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT10KX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fc2VyaWVzRGF0YUNhY2hlW3RdPXIsdGhpcy5fY2hhcnQmJnRoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCxyKX1zZXRTZXJpZXNNZXRhZGF0YSh0LHIpe3RoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF09cix0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQuc2V0U2VyaWVzTWV0YWRhdGEodCxyKX1jb21taXRDaGFuZ2VzKCl7IXRoaXMuX2NoYXJ0fHx0aGlzLl9jaGFydC5jb21taXRDaGFuZ2VzKCl9cmVzZXREb21haW4oKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQucmVzZXREb21haW4oKX1yZWRyYXcoKXt0aGlzLl9jaGFydCYmdGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3RoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCE9PW51bGwmJih0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGwpLHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZD10aGlzLmFzeW5jKGZ1bmN0aW9uKCl7dGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGw7bGV0IHQ9dGhpcy54Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kO2lmKCF0aGlzLnhUeXBlJiYhdD90PSRhdDp0aGlzLnhUeXBlJiYodD0oKT0+dkIodGhpcy54VHlwZSkpLCEoIXR8fCF0aGlzLnlWYWx1ZUFjY2Vzc29yfHwhdGhpcy50b29sdGlwQ29sdW1ucykpe3ZhciByPW5ldyBEUyh0LHRoaXMueVZhbHVlQWNjZXNzb3IsdGhpcy55U2NhbGVUeXBlLHRoaXMuY29sb3JTY2FsZSx0aGlzLiQudG9vbHRpcCx0aGlzLnRvb2x0aXBDb2x1bW5zLHRoaXMuZmlsbEFyZWEsdGhpcy5kZWZhdWx0WFJhbmdlLHRoaXMuZGVmYXVsdFlSYW5nZSx0aGlzLnN5bWJvbEZ1bmN0aW9uLHRoaXMueEF4aXNGb3JtYXR0ZXIpLG49SHQodGhpcy4kLmNoYXJ0ZGl2KTtyLnJlbmRlclRvKG4pLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCksdGhpcy5fY2hhcnQ9cix0aGlzLl9jaGFydC5vbkFuY2hvcigoKT0+dGhpcy5maXJlKCJjaGFydC1hdHRhY2hlZCIpKX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpeyF0aGlzLl9jaGFydHx8KHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKHQ9Pnt0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQsdGhpcy5fc2VyaWVzRGF0YUNhY2hlW3RdfHxbXSl9KSx0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUuZmlsdGVyKHQ9PnRoaXMuX3Nlcmllc01ldGFkYXRhQ2FjaGVbdF0pLmZvckVhY2godD0+e3RoaXMuX2NoYXJ0LnNldFNlcmllc01ldGFkYXRhKHQsdGhpcy5fc2VyaWVzTWV0YWRhdGFDYWNoZVt0XSl9KSx0aGlzLl9jaGFydC5zZXRWaXNpYmxlU2VyaWVzKHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZSksdGhpcy5fY2hhcnQuY29tbWl0Q2hhbmdlcygpKX1fc21vb3RoaW5nQ2hhbmdlZCgpeyF0aGlzLl9jaGFydHx8KHRoaXMuc21vb3RoaW5nRW5hYmxlZD90aGlzLl9jaGFydC5zbW9vdGhpbmdVcGRhdGUodGhpcy5zbW9vdGhpbmdXZWlnaHQpOnRoaXMuX2NoYXJ0LnNtb290aGluZ0Rpc2FibGUoKSl9X291dGxpZXJzQ2hhbmdlZCgpeyF0aGlzLl9jaGFydHx8dGhpcy5fY2hhcnQuaWdub3JlWU91dGxpZXJzKHRoaXMuaWdub3JlWU91dGxpZXJzKX1fY29sb3JTY2FsZUNoYW5nZWQoKXshdGhpcy5fY2hhcnR8fCh0aGlzLl9jaGFydC5zZXRDb2xvclNjYWxlKHRoaXMuY29sb3JTY2FsZSksdGhpcy5fY2hhcnQucmVkcmF3KCkpfV90b29sdGlwQ29sdW1uc0NoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0LnNldFRvb2x0aXBDb2x1bW5zKHRoaXMudG9vbHRpcENvbHVtbnMpfV90b29sdGlwU29ydGluZ01ldGhvZENoYW5nZWQoKXshdGhpcy5fY2hhcnR8fHRoaXMuX2NoYXJ0LnNldFRvb2x0aXBTb3J0aW5nTWV0aG9kKHRoaXMudG9vbHRpcFNvcnRpbmdNZXRob2QpfWdldEV4cG9ydGVyKCl7cmV0dXJuIG5ldyBJQih0aGlzLiQuY2hhcnRkaXYpfX07WnIudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9ImNoYXJ0ZGl2Ij48L2Rpdj4KICAgIDx2ei1jaGFydC10b29sdGlwCiAgICAgIGlkPSJ0b29sdGlwIgogICAgICBwb3NpdGlvbj0iW1t0b29sdGlwUG9zaXRpb25dXSIKICAgICAgY29udGVudC1jb21wb25lbnQtbmFtZT0idnotbGluZS1jaGFydC10b29sdGlwIgogICAgPjwvdnotY2hhcnQtdG9vbHRpcD4KICAgIDxzdHlsZSBpbmNsdWRlPSJwbG90dGFibGUtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGUgaW5jbHVkZT0idnotcGFuLXpvb20tc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICAgIGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQoKICAgICAgI2NoYXJ0ZGl2IC5tYWluIHsKICAgICAgICBjb250YWluOiBzdHJpY3Q7CiAgICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5wYW5rZXkpICNjaGFydGRpdiA6bm90KC5kcmFnLXpvb21pbmcpIC5tYWluIHsKICAgICAgICBjdXJzb3I6IC13ZWJraXQtZ3JhYjsKICAgICAgICBjdXJzb3I6IGdyYWI7CiAgICAgIH0KCiAgICAgIDpob3N0KC5tb3VzZWRvd24pICNjaGFydGRpdiAucGFubmluZyAubWFpbiB7CiAgICAgICAgY3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nOwogICAgICAgIGN1cnNvcjogZ3JhYmJpbmc7CiAgICAgIH0KCiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgY29udGFpbjogc3RyaWN0OwogICAgICB9CgogICAgICAjY2hhcnRkaXYgbGluZS5ndWlkZS1saW5lIHsKICAgICAgICBzdHJva2U6ICM5OTk7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxLjVweDsKICAgICAgfQogICAgICAjY2hhcnRkaXY6aG92ZXIgLm1haW4gewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLnBsb3R0YWJsZSAuZ3JpZGxpbmVzIGxpbmUgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsaXN0LlNjYWxlcy5Db2xvcildLFpyLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwic3ltYm9sRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWnIucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFpyLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJ4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sWnIucHJvdG90eXBlLCJ4QXhpc0Zvcm1hdHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFpyLnByb3RvdHlwZSwieVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFpyLnByb3RvdHlwZSwidG9vbHRpcENvbHVtbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sWnIucHJvdG90eXBlLCJmaWxsQXJlYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJkZWZhdWx0WFJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxaci5wcm90b3R5cGUsImRlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ5U2NhbGVUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sWnIucHJvdG90eXBlLCJpZ25vcmVZT3V0bGllcnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWnIucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxaci5wcm90b3R5cGUsInRvb2x0aXBQb3NpdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sWnIucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxaci5wcm90b3R5cGUsIl9zZXJpZXNNZXRhZGF0YUNhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFpyLnByb3RvdHlwZSwiX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCIsdm9pZCAwKTtFKFtCdCgieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsInhUeXBlIiwieVZhbHVlQWNjZXNzb3IiLCJ5U2NhbGVUeXBlIiwiaXNBdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiwiX3Zpc2libGVTZXJpZXNDYWNoZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfcmVsb2FkRnJvbUNhY2hlIixudWxsKTtFKFtCdCgic21vb3RoaW5nRW5hYmxlZCIsInNtb290aGluZ1dlaWdodCIsIl9jaGFydCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfc21vb3RoaW5nQ2hhbmdlZCIsbnVsbCk7RShbQnQoImlnbm9yZVlPdXRsaWVycyIsIl9jaGFydCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfb3V0bGllcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgiY29sb3JTY2FsZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfY29sb3JTY2FsZUNoYW5nZWQiLG51bGwpO0UoW0J0KCJ0b29sdGlwQ29sdW1ucyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sWnIucHJvdG90eXBlLCJfdG9vbHRpcENvbHVtbnNDaGFuZ2VkIixudWxsKTtFKFtCdCgidG9vbHRpcFNvcnRpbmdNZXRob2QiLCJfY2hhcnQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFpyLnByb3RvdHlwZSwiX3Rvb2x0aXBTb3J0aW5nTWV0aG9kQ2hhbmdlZCIsbnVsbCk7WnI9RShbeXQoInZ6LWxpbmUtY2hhcnQyIildLFpyKTt2YXIgbnN0PWNsYXNzIGV4dGVuZHMgbXR7fTtuc3QudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICA8dGFibGU+CiAgICAgICAgPHRoZWFkPjwvdGhlYWQ+CiAgICAgICAgPHRib2R5PjwvdGJvZHk+CiAgICAgIDwvdGFibGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICB0YWJsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbTsKICAgICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgfQoKICAgICAgdGhlYWQgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgdGJvZHkgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjFweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgIH0KCiAgICAgIC5zd2F0Y2ggewogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgIH0KCiAgICAgIC5jbG9zZXN0IC5zd2F0Y2ggewogICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDJweCAjZmZmOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgcGFkZGluZzogMCA1cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQoKICAgICAgLmRpc3RhbnQgdGQ6bm90KC5zd2F0Y2gpIHsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgIH0KCiAgICAgIC5naG9zdCB7CiAgICAgICAgb3BhY2l0eTogMC4yOwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7bnN0PUUoW3l0KCJ2ei1saW5lLWNoYXJ0LXRvb2x0aXAiKV0sbnN0KTt2YXIgYXN0PVtdLGtxZT0wLFJxZT1HS3QudGhyb3R0bGUoZnVuY3Rpb24gZSgpe2lmKGFzdC5sZW5ndGg9PTApcmV0dXJuO2xldCB0PWFzdC5zaGlmdCgpO3QmJnQuYWN0aXZlJiYodC5yZWRyYXcoKSx0Ll9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZT0hMSksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGtxZSksd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShlKX0sMTAwKSxWbj1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3JlZHJhd1JhZj1udWxsLHRoaXMuYWN0aXZlPSExLHRoaXMubG9nU2NhbGVBY3RpdmU9ITEsdGhpcy5jb2xvclNjYWxlPXtzY2FsZTpmbn0sdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSEwLHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSExfW9uTG9hZEZpbmlzaCgpe3RoaXMuY29tbWl0Q2hhbmdlcygpLHRoaXMuZGF0YVRvTG9hZC5sZW5ndGg+MCYmdGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkJiYodGhpcy5fcmVzZXREb21haW5Pbk5leHRMb2FkPSExLHRoaXMuZ2V0Q2hhcnQoKS5yZXNldERvbWFpbigpKSx0aGlzLnJlZHJhdygpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9yZWRyYXdSYWYhPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpfWV4cG9ydEFzU3ZnU3RyaW5nKCl7cmV0dXJuIHRoaXMuZ2V0Q2hhcnQoKS5nZXRFeHBvcnRlcigpLmV4cG9ydEFzU3RyaW5nKCl9Z2V0Q2hhcnQoKXtyZXR1cm4gdGhpcy4kLmNoYXJ0fXJlc2V0RG9tYWluKCl7dGhpcy5nZXRDaGFydCgpLnJlc2V0RG9tYWluKCl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0Q2hhcnQoKS5zZXRTZXJpZXNEYXRhKHQscil9c2V0U2VyaWVzTWV0YWRhdGEodCxyKXt0aGlzLmdldENoYXJ0KCkuc2V0U2VyaWVzTWV0YWRhdGEodCxyKX1jb21taXRDaGFuZ2VzKCl7dGhpcy5nZXRDaGFydCgpLmNvbW1pdENoYW5nZXMoKX1yZWRyYXcoKXt0aGlzLl9yZWRyYXdSYWYhPT1udWxsJiZjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yZWRyYXdSYWYpLHRoaXMuX3JlZHJhd1JhZj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5hY3RpdmU/dGhpcy5nZXRDaGFydCgpLnJlZHJhdygpOnRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSEwfSl9X2xvYWRLZXlDaGFuZ2VkKCl7dGhpcy5yZXNldCgpLHRoaXMuX3Jlc2V0RG9tYWluT25OZXh0TG9hZD0hMH1fZGF0YVNlcmllc0NoYW5nZWQoKXt0aGlzLmdldENoYXJ0KCkuc2V0VmlzaWJsZVNlcmllcyh0aGlzLmRhdGFTZXJpZXMpfV9sb2dTY2FsZUNoYW5nZWQodCl7bGV0IHI9dGhpcy5nZXRDaGFydCgpO3IueVNjYWxlVHlwZT10P0ZmLkxPRzpGZi5MSU5FQVIsdGhpcy5yZWRyYXcoKX1fZml4QmFkU3RhdGVXaGVuQWN0aXZlKCl7dGhpcy5hY3RpdmUmJnRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlJiYoYXN0LnB1c2godGhpcyksUnFlKCkpfV9vbkNoYXJ0QXR0YWNoZWQoKXt0aGlzLmFjdGl2ZXx8KHRoaXMuX21heWJlUmVuZGVyZWRJbkJhZFN0YXRlPSEwKX19O1ZuLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjaGFydC1hbmQtc3Bpbm5lci1jb250YWluZXIiPgogICAgICA8dnotbGluZS1jaGFydDIKICAgICAgICBpZD0iY2hhcnQiCiAgICAgICAgZGF0YS1sb2FkaW5nJD0iW1tkYXRhTG9hZGluZ11dIgogICAgICAgIGRhdGEtbG9hZGVkLW9uY2UkPSJbW2RhdGFMb2FkZWRBdExlYXN0T25jZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW2NvbG9yU2NhbGVdXSIKICAgICAgICBkZWZhdWx0LXgtcmFuZ2U9IltbZGVmYXVsdFhSYW5nZV1dIgogICAgICAgIGRlZmF1bHQteS1yYW5nZT0iW1tkZWZhdWx0WVJhbmdlXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW2ZpbGxBcmVhXV0iCiAgICAgICAgaWdub3JlLXktb3V0bGllcnM9IltbaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgb24tY2hhcnQtYXR0YWNoZWQ9Il9vbkNoYXJ0QXR0YWNoZWQiCiAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9Iltbc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICAgIHNtb290aGluZy13ZWlnaHQ9Iltbc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgc3ltYm9sLWZ1bmN0aW9uPSJbW3N5bWJvbEZ1bmN0aW9uXV0iCiAgICAgICAgdG9vbHRpcC1jb2x1bW5zPSJbW3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj0iW1t0b29sdGlwUG9zaXRpb25dXSIKICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW3Rvb2x0aXBTb3J0aW5nTWV0aG9kXV0iCiAgICAgICAgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1t4Q29tcG9uZW50c0NyZWF0aW9uTWV0aG9kXV0iCiAgICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgICAgeS12YWx1ZS1hY2Nlc3Nvcj0iW1t5VmFsdWVBY2Nlc3Nvcl1dIgogICAgICA+PC92ei1saW5lLWNoYXJ0Mj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2RhdGFMb2FkaW5nXV0iPgogICAgICAgIDxkaXYgaWQ9ImxvYWRpbmctc3Bpbm5lci1jb250YWluZXIiPgogICAgICAgICAgPHBhcGVyLXNwaW5uZXItbGl0ZSBhY3RpdmU9IiI+PC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtfbWF5YmUtcmVuZGVyZWQtaW4tYmFkLXN0YXRlXSkgdnotbGluZS1jaGFydCB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAjY2hhcnQtYW5kLXNwaW5uZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLXNwaW5uZXItY29udGFpbmVyIHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICB9CgogICAgICB2ei1saW5lLWNoYXJ0MiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICB2ei1saW5lLWNoYXJ0MltkYXRhLWxvYWRpbmddIHsKICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9maXhCYWRTdGF0ZVdoZW5BY3RpdmUifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sVm4ucHJvdG90eXBlLCJkYXRhU2VyaWVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sVm4ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9sb2dTY2FsZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsImxvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZuLnByb3RvdHlwZSwieENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWbi5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sVm4ucHJvdG90eXBlLCJ5VmFsdWVBY2Nlc3NvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWbi5wcm90b3R5cGUsImZpbGxBcmVhIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sVm4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLFZuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxWbi5wcm90b3R5cGUsInRvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZuLnByb3RvdHlwZSwidG9vbHRpcFNvcnRpbmdNZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sVm4ucHJvdG90eXBlLCJ0b29sdGlwUG9zaXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sVm4ucHJvdG90eXBlLCJkZWZhdWx0WFJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxWbi5wcm90b3R5cGUsImRlZmF1bHRZUmFuZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxWbi5wcm90b3R5cGUsInN5bWJvbEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZuLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFZuLnByb3RvdHlwZSwiX3Jlc2V0RG9tYWluT25OZXh0TG9hZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxWbi5wcm90b3R5cGUsIl9tYXliZVJlbmRlcmVkSW5CYWRTdGF0ZSIsdm9pZCAwKTtFKFtCdCgibG9hZEtleSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sVm4ucHJvdG90eXBlLCJfbG9hZEtleUNoYW5nZWQiLG51bGwpO0UoW0J0KCJkYXRhU2VyaWVzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLFZuLnByb3RvdHlwZSwiX2RhdGFTZXJpZXNDaGFuZ2VkIixudWxsKTtWbj1FKFt5dCgidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpXSxWbik7X3Moe21vZHVsZU5hbWU6InRmLWN1c3RvbS1zY2FsYXItY2FyZC1zdHlsZSIsc3R5bGVDb250ZW50OmAKICAgIDpob3N0IHsKICAgICAgbWFyZ2luOiA1cHggMTBweDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMzMwcHg7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgIH0KCiAgICA6aG9zdChbX2V4cGFuZGVkXSkgewogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICA6aG9zdChbX2V4cGFuZGVkXSkgI3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXItY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiA0MDBweDsKICAgIH0KCiAgICBoMSB7CiAgICAgIGZvbnQtc2l6ZTogMTlweDsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIH0KCiAgICAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAjYnV0dG9ucyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICB9CgogICAgcGFwZXItaWNvbi1idXR0b24gewogICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMzJweDsKICAgICAgcGFkZGluZzogNHB4OwogICAgfQoKICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICB9CgogICAgLmRvd25sb2FkLWxpbmtzIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgaGVpZ2h0OiAzMnB4OwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyBhIHsKICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgIG1hcmdpbjogMnB4OwogICAgfQoKICAgIC5kb3dubG9hZC1saW5rcyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1sYWJlbDogewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1pbnB1dDogewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgfQogICAgfQogIGB9KTt2YXIgT1M9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSxvKXt0aGlzLnJ1bj10LHRoaXMudGFnPXIsdGhpcy5uYW1lPW4sdGhpcy5zY2FsYXJEYXRhPWksdGhpcy5zeW1ib2w9b31nZXROYW1lKCl7cmV0dXJuIHRoaXMubmFtZX1zZXREYXRhKHQpe3RoaXMuc2NhbGFyRGF0YT10fWdldERhdGEoKXtyZXR1cm4gdGhpcy5zY2FsYXJEYXRhfWdldFJ1bigpe3JldHVybiB0aGlzLnJ1bn1nZXRUYWcoKXtyZXR1cm4gdGhpcy50YWd9Z2V0U3ltYm9sKCl7cmV0dXJuIHRoaXMuc3ltYm9sfX07ZnVuY3Rpb24gTEIoZSx0KXtyZXR1cm5gJHt0fSAoJHtlfSlgfXZhciBXMT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnJ1bkJhc2VkQ29sb3JTY2FsZT10fXNjYWxlKHQpe3JldHVybiB0aGlzLnJ1bkJhc2VkQ29sb3JTY2FsZS5zY2FsZSh0aGlzLnBhcnNlUnVuTmFtZSh0KSl9cGFyc2VSdW5OYW1lKHQpe2xldCByPXQubWF0Y2goL1woKC4qKVwpJC8pO3JldHVybiByP3JbMV06IiJ9fTt2YXIgSnI9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWN0aXZlPSEwLHRoaXMuX2NvbG9yU2NhbGU9bmV3IFcxKHtzY2FsZTpmbn0pLHRoaXMuX25hbWVUb0RhdGFTZXJpZXM9e30sdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fcmVxdWVzdERhdGE9KHQscixuKT0+e2xldCBvPXZlKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL3NjYWxhcnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9YSxsPXRoaXMuX3RhZ0ZpbHRlcixjPUNuKG8se3RhZzpsLHJ1bjpzfSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChjKS50aGVuKHU9PnZvaWQgcih7aXRlbTphLGRhdGE6dX0pKX0pKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4PXt9LHRoaXMuX21hdGNoZXNMaXN0T3BlbmVkPSExLHRoaXMuX2ZpbGxBcmVhPXtsb3dlckFjY2Vzc29yOnQ9PnQubG93ZXIsaGlnaGVyQWNjZXNzb3I6dD0+dC51cHBlcn0sdGhpcy5fdG9vbHRpcENvbHVtbnM9KCgpPT57bGV0IHQ9V3UoZTApLHI9bj0+aXNOYU4obik/Ik5hTiI6dChuKTtyZXR1cm5be3RpdGxlOiJOYW1lIixldmFsdWF0ZTpuPT5uLmRhdGFzZXQubWV0YWRhdGEoKS5uYW1lfSx7dGl0bGU6IlZhbHVlIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0uc2NhbGFyKX0se3RpdGxlOiJMb3dlciBNYXJnaW4iLGV2YWx1YXRlOm49PnIobi5kYXR1bS5sb3dlcil9LHt0aXRsZToiVXBwZXIgTWFyZ2luIixldmFsdWF0ZTpuPT5yKG4uZGF0dW0udXBwZXIpfSx7dGl0bGU6IlN0ZXAiLGV2YWx1YXRlOm49Png0KG4uZGF0dW0uc3RlcCl9LHt0aXRsZToiVGltZSIsZXZhbHVhdGU6bj0+X0Iobi5kYXR1bS53YWxsX3RpbWUpfSx7dGl0bGU6IlJlbGF0aXZlIixldmFsdWF0ZTpuPT55QihyMChuLmRhdHVtLC0xLG4uZGF0YXNldCkpfV19KSgpLHRoaXMuX21pc3NpbmdUYWdzPVtdLHRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQ9ITF9cmVsb2FkKCl7dGhpcy4kLmxvYWRlci5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLiQubG9hZGVyLnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3RvZ2dsZUxvZ1NjYWxlKCl7dGhpcy5zZXQoIl9sb2dTY2FsZUFjdGl2ZSIsIXRoaXMuX2xvZ1NjYWxlQWN0aXZlKX1fcmVzZXREb21haW4oKXtsZXQgdD10aGlzLiQubG9hZGVyO3QmJnQucmVzZXREb21haW4oKX1fY3N2VXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIENuKG4se2Zvcm1hdDoiY3N2In0pfV9qc29uVXJsKHQscil7aWYoIXIpcmV0dXJuIiI7bGV0IG49dGhpcy5fZG93bmxvYWREYXRhVXJsKHQscik7cmV0dXJuIENuKG4se2Zvcm1hdDoianNvbiJ9KX1fZG93bmxvYWREYXRhVXJsKHQscil7bGV0IG49dFtyXSxpPXt0YWc6bi5nZXRUYWcoKSxydW46bi5nZXRSdW4oKX07cmV0dXJuIENuKHZlKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2Rvd25sb2FkX2RhdGEiKSxpKX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbih0KXtyZXR1cm4ocixuLGkpPT57aWYoIWkucmVnZXhfdmFsaWQpe3RoaXMuc2V0KCJfdGFnRmlsdGVySW52YWxpZCIsITApO3JldHVybn1sZXQgbz1Zby5jbG9uZSh0aGlzLl9uYW1lVG9EYXRhU2VyaWVzKSxhPVtdO1lvLmZvckVhY2godCxsPT57bGV0IGM9ITEsdT1pLnRhZ190b19ldmVudHNbbC52YWx1ZV0saD1pLnRhZ190b19ldmVudHNbbC5sb3dlcl0sZj1pLnRhZ190b19ldmVudHNbbC51cHBlcl07aWYoWW8uaXNVbmRlZmluZWQodSkmJihhLnB1c2gobC52YWx1ZSksYz0hMCksWW8uaXNVbmRlZmluZWQoaCkmJihhLnB1c2gobC5sb3dlciksYz0hMCksWW8uaXNVbmRlZmluZWQoZikmJihhLnB1c2gobC51cHBlciksYz0hMCksYylyZXR1cm47bGV0IHA9Yj0+YlsxXSxkPXRoaXMuX2ZpbmRTdGVwTWlzbWF0Y2gobCx1Lm1hcChwKSxoLm1hcChwKSxmLm1hcChwKSk7aWYoZCl7dGhpcy5zZXQoIl9zdGVwc01pc21hdGNoIixkKTtyZXR1cm59bGV0IGc9Yj0+YlsyXSxfPXUubWFwKChiLFMpPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShiWzBdKjFlMyksc3RlcDpwKGIpLHNjYWxhcjpnKGIpLGxvd2VyOmcoaFtTXSksdXBwZXI6ZyhmW1NdKX0pKSx5PUxCKG4sbC52YWx1ZSkseD1vW3ldO2lmKHgpeC5zZXREYXRhKF8pO2Vsc2V7bGV0IGI9dGhpcy5fY3JlYXRlTmV3RGF0YVNlcmllcyhuLGwudmFsdWUseSxfKTtvW3ldPWJ9fSksdGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIixvKTtsZXQgcz1Zby5maW5kSW5kZXgodGhpcy5fbWlzc2luZ1RhZ3MsbD0+bC5ydW49PT1uKTtpZihhLmxlbmd0aCYmYS5sZW5ndGghPTMpe2xldCBsPXtydW46bix0YWdzOmF9O3M+PTA/dGhpcy5zcGxpY2UoIl9taXNzaW5nVGFncyIscywxLGwpOnRoaXMucHVzaCgiX21pc3NpbmdUYWdzIixsKX1lbHNlIHM+PTAmJnRoaXMuc3BsaWNlKCJfbWlzc2luZ1RhZ3MiLHMsMSl9fV9maW5kU3RlcE1pc21hdGNoKHQscixuLGkpe3JldHVybiBZby5pc0VxdWFsKG4scikmJllvLmlzRXF1YWwoaSxyKT9udWxsOntzZXJpZXNPYmplY3Q6dCx2YWx1ZVN0ZXBzOnIsbG93ZXJTdGVwczpuLHVwcGVyU3RlcHM6aX19X2NyZWF0ZU5ld0RhdGFTZXJpZXModCxyLG4saSl7dGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF18PTA7bGV0IG89UlNbdGhpcy5fcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXhbdF1dLGE9bmV3IE9TKHQscixuLGksbykscz1SUy5sZW5ndGg7cmV0dXJuIHRoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3RdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFt0XSsxKSVzLGF9X3VwZGF0ZUNoYXJ0KCl7dmFyIHQ9dGhpcy5fbmFtZVRvRGF0YVNlcmllcztZby5mb3JPd24odCxyPT57dGhpcy4kLmxvYWRlci5zZXRTZXJpZXNEYXRhKHIuZ2V0TmFtZSgpLHIuZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfWdldCBfc2VyaWVzTmFtZXMoKXtsZXQgdD1uZXcgU2V0KHRoaXMucnVucyk7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpLmZpbHRlcigoW3Isbl0pPT50LmhhcyhuLnJ1bikpLm1hcCgoW3JdKT0+cil9X2RldGVybWluZUNvbG9yKHQscil7cmV0dXJuIHQuc2NhbGUocil9X3JlZnJlc2hEYXRhU2VyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnRmlsdGVyO3RoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIse30pfV9jcmVhdGVTeW1ib2xGdW5jdGlvbigpe3JldHVybiB0PT50aGlzLl9uYW1lVG9EYXRhU2VyaWVzW3RdLmdldFN5bWJvbCgpLm1ldGhvZCgpfV9kZXRlcm1pbmVTeW1ib2wodCxyKXtyZXR1cm4gdFtyXS5nZXRTeW1ib2woKS5jaGFyYWN0ZXJ9Z2V0IF90YWdGaWx0ZXIoKXt2YXIgdD10aGlzLm1hcmdpbkNoYXJ0U2VyaWVzO3JldHVybiBZby5mbGF0dGVuKHQubWFwKGk9PltpLnZhbHVlLGkubG93ZXIsaS51cHBlcl0pKS5tYXAoaT0+IigiK3RoaXMuX2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhpKSsiKSIpLmpvaW4oInwiKX1fZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHQpe3JldHVybiB0LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9X2dldFRvZ2dsZUNvbGxhcHNpYmxlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3RvZ2dsZU1hdGNoZXNPcGVuKCl7dGhpcy5zZXQoIl9tYXRjaGVzTGlzdE9wZW5lZCIsIXRoaXMuX21hdGNoZXNMaXN0T3BlbmVkKX1nZXQgX3RpdGxlRGlzcGxheVN0cmluZygpe3ZhciB0PXRoaXMudGl0bGU7cmV0dXJuIHR8fCJ1bnRpdGxlZCJ9X3NlcGFyYXRlV2l0aENvbW1hcyh0KXtyZXR1cm4gdC5qb2luKCIsICIpfV90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3Blbigpe3RoaXMuc2V0KCJfbWlzc2luZ1RhZ3NDb2xsYXBzaWJsZU9wZW5lZCIsIXRoaXMuX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQpfV9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCgpe3ZhciByO2xldCB0PXRoaXMuJCQoIiNtYXRjaC1saXN0LXJlcGVhdCIpOyF0fHwocj10aGlzLnJvb3QpPT1udWxsfHxyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5tYXRjaC1saXN0LWVudHJ5IikuZm9yRWFjaChuPT57bGV0IGk9dC5pdGVtRm9yRWxlbWVudChuKTtuLnN0eWxlLmNvbG9yPXRoaXMuX2RldGVybWluZUNvbG9yKHRoaXMuX2NvbG9yU2NhbGUsaSl9KX19O0pyLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGRpc3BsYXktbmFtZT0iW1tfdGl0bGVEaXNwbGF5U3RyaW5nXV0iPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICAgICAgZGF0YS1zZXJpZXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgZmlsbC1hcmVhPSJbW19maWxsQXJlYV1dIgogICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW2lnbm9yZVlPdXRsaWVyc11dIgogICAgICAgIGxvYWQta2V5PSJbW190YWdGaWx0ZXJdXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbcnVuc11dIgogICAgICAgIHJlcXVlc3QtZGF0YT0iW1tfcmVxdWVzdERhdGFdXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGxvYWQtZGF0YS1jYWxsYmFjaz0iW1tfY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbihtYXJnaW5DaGFydFNlcmllcyldXSIKICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICBzeW1ib2wtZnVuY3Rpb249IltbX2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCldXSIKICAgICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgIHgtdHlwZT0iW1t4VHlwZV1dIgogICAgICA+CiAgICAgIDwvdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iYnV0dG9ucyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIGljb249ImxpbmUtd2VpZ2h0IgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUxvZ1NjYWxlIgogICAgICAgIHRpdGxlPSJUb2dnbGUgeS1heGlzIGxvZyBzY2FsZSIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIGljb249InNldHRpbmdzLW92ZXJzY2FuIgogICAgICAgIG9uLXRhcD0iX3Jlc2V0RG9tYWluIgogICAgICAgIHRpdGxlPSJGaXQgZG9tYWluIHRvIGRhdGEiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8c3BhbiBzdHlsZT0iZmxleC1ncm93OiAxIj48L3NwYW4+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93RG93bmxvYWRMaW5rc11dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkb3dubG9hZC1saW5rcyI+CiAgICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0idHJ1ZSIKICAgICAgICAgICAgbGFiZWw9InNlcmllcyB0byBkb3dubG9hZCIKICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkfX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1saXN0Ym94IGNsYXNzPSJkcm9wZG93bi1jb250ZW50IiBzbG90PSJkcm9wZG93bi1jb250ZW50Ij4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgICBhcz0iZGF0YVNlcmllc05hbWUiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgICAgICAgID5bW2RhdGFTZXJpZXNOYW1lXV08L3BhcGVyLWl0ZW0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uY3N2IgogICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX25hbWVUb0RhdGFTZXJpZXMsIF9kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWQpXV0iCiAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgID4KICAgICAgICAgIDxhCiAgICAgICAgICAgIGRvd25sb2FkPSJbW19kYXRhU2VyaWVzTmFtZVRvRG93bmxvYWRdXS5qc29uIgogICAgICAgICAgICBocmVmPSJbW19qc29uVXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+SlNPTjwvYQogICAgICAgICAgPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CgogICAgPCEtLSBoZXJlIC0tPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19taXNzaW5nVGFncy5sZW5ndGhdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbGxhcHNpYmxlLWxpc3QtdGl0bGUiPgogICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9taXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbmVkKV1dIgogICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNaXNzaW5nVGFnc0NvbGxhcHNpYmxlT3BlbiIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtY29sbGFwc2libGUtYnV0dG9uIgogICAgICAgID4KICAgICAgICA8L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsYXBzaWJsZS10aXRsZS10ZXh0Ij4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iaWNvbnM6ZXJyb3IiPjwvaXJvbi1pY29uPiBNaXNzaW5nIFRhZ3MKICAgICAgICA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWRdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3ItY29udGVudCI+CiAgICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19taXNzaW5nVGFnc11dIiBhcz0ibWlzc2luZ0VudHJ5Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWlzc2luZy10YWdzLWZvci1ydW4tY29udGFpbmVyIj4KICAgICAgICAgICAgICBSdW4gIltbbWlzc2luZ0VudHJ5LnJ1bl1dIiBsYWNrcyBkYXRhIGZvciB0YWdzCiAgICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgICBpdGVtcz0iW1ttaXNzaW5nRW50cnkudGFnc11dIgogICAgICAgICAgICAgICAgICBhcz0idGFnIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICA8bGk+W1t0YWddXTwvbGk+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9pcm9uLWNvbGxhcHNlPgogICAgPC90ZW1wbGF0ZT4KCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3RhZ0ZpbHRlckludmFsaWRdXSI+CiAgICAgIDxkaXYgY2xhc3M9ImVycm9yLWNvbnRlbnQiPgogICAgICAgIDxpcm9uLWljb24gY2xhc3M9ImVycm9yLWljb24iIGljb249Imljb25zOmVycm9yIj48L2lyb24taWNvbj4KICAgICAgICBUaGlzIHJlZ3VsYXIgZXhwcmVzaW9uIGlzIGludmFsaWQ6PGJyIC8+CiAgICAgICAgPHNwYW4gY2xhc3M9ImludmFsaWQtcmVnZXgiPltbX3RhZ0ZpbHRlcl1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdGVwc01pc21hdGNoXV0iPgogICAgICA8ZGl2IGNsYXNzPSJlcnJvci1jb250ZW50Ij4KICAgICAgICA8aXJvbi1pY29uIGNsYXNzPSJlcnJvci1pY29uIiBpY29uPSJpY29uczplcnJvciI+PC9pcm9uLWljb24+CiAgICAgICAgVGhlIHN0ZXBzIGZvciB2YWx1ZSwgbG93ZXIsIGFuZCB1cHBlciB0YWdzIGRvIG5vdCBtYXRjaDoKICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWctbmFtZSI+W1tfc3RlcHNNaXNtYXRjaC5zZXJpZXNPYmplY3QudmFsdWVdXTwvc3Bhbj46CiAgICAgICAgICAgIFtbX3NlcGFyYXRlV2l0aENvbW1hcyhfc3RlcHNNaXNtYXRjaC52YWx1ZVN0ZXBzKV1dCiAgICAgICAgICA8L2xpPgogICAgICAgICAgPGxpPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGFnLW5hbWUiPltbX3N0ZXBzTWlzbWF0Y2guc2VyaWVzT2JqZWN0Lmxvd2VyXV08L3NwYW4+OgogICAgICAgICAgICBbW19zZXBhcmF0ZVdpdGhDb21tYXMoX3N0ZXBzTWlzbWF0Y2gubG93ZXJTdGVwcyldXQogICAgICAgICAgPC9saT4KICAgICAgICAgIDxsaT4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZy1uYW1lIj5bW19zdGVwc01pc21hdGNoLnNlcmllc09iamVjdC51cHBlcl1dPC9zcGFuPjoKICAgICAgICAgICAgW1tfc2VwYXJhdGVXaXRoQ29tbWFzKF9zdGVwc01pc21hdGNoLnVwcGVyU3RlcHMpXV0KICAgICAgICAgIDwvbGk+CiAgICAgICAgPC91bD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgIDxkaXYgaWQ9Im1hdGNoZXMtY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iY29sbGFwc2libGUtbGlzdC10aXRsZSI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0iW1tfZ2V0VG9nZ2xlQ29sbGFwc2libGVJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxhcHNpYmxlLXRpdGxlLXRleHQiPgogICAgICAgICAgTWF0Y2hlcyAoW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0pCiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXJpZXNOYW1lcy5sZW5ndGhdXSI+CiAgICAgICAgPGlyb24tY29sbGFwc2Ugb3BlbmVkPSJbW19tYXRjaGVzTGlzdE9wZW5lZF1dIj4KICAgICAgICAgIDxkaXYgaWQ9Im1hdGNoZXMtbGlzdCI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgIGFzPSJzZXJpZXNOYW1lIgogICAgICAgICAgICAgIGlkPSJtYXRjaC1saXN0LXJlcGVhdCIKICAgICAgICAgICAgICBvbi1kb20tY2hhbmdlPSJfbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXRjaC1saXN0LWVudHJ5Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtYXRjaC1lbnRyeS1zeW1ib2wiPgogICAgICAgICAgICAgICAgICBbW19kZXRlcm1pbmVTeW1ib2woX25hbWVUb0RhdGFTZXJpZXMsIHNlcmllc05hbWUpXV0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIFtbc2VyaWVzTmFtZV1dCiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY3VzdG9tLXNjYWxhci1jYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAuZXJyb3ItY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1pY29uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmaWxsOiAjZmZmOwogICAgICAgIG1hcmdpbjogMCBhdXRvIDVweCBhdXRvOwogICAgICB9CgogICAgICAuaW52YWxpZC1yZWdleCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC5lcnJvci1jb250ZW50IHVsIHsKICAgICAgICBtYXJnaW46IDFweCAwIDAgMDsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxOXB4OwogICAgICB9CgogICAgICAudGFnLW5hbWUgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAuY29sbGFwc2libGUtbGlzdC10aXRsZSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzaWJsZS10aXRsZS10ZXh0IHsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5taXNzaW5nLXRhZ3MtZm9yLXJ1bi1jb250YWluZXIgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSnIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSnIucHJvdG90eXBlLCJtYXJnaW5DaGFydFNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiaWdub3JlWU91dGxpZXJzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sSnIucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwic2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxKci5wcm90b3R5cGUsInRvb2x0aXBTb3J0aW5nTWV0aG9kIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl90YWdGaWx0ZXJJbnZhbGlkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX25hbWVUb0RhdGFTZXJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxKci5wcm90b3R5cGUsIl9sb2dTY2FsZUFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEpyLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEpyLnByb3RvdHlwZSwiX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSnIucHJvdG90eXBlLCJfbWF0Y2hlc0xpc3RPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfZmlsbEFyZWEiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLEpyLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxKci5wcm90b3R5cGUsIl9taXNzaW5nVGFncyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEpyLnByb3RvdHlwZSwiX21pc3NpbmdUYWdzQ29sbGFwc2libGVPcGVuZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSnIucHJvdG90eXBlLCJfc3RlcHNNaXNtYXRjaCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEpyLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxKci5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoIm1hcmdpbkNoYXJ0U2VyaWVzIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSnIucHJvdG90eXBlLCJfdGFnRmlsdGVyIixudWxsKTtFKFtSdCgidGl0bGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxKci5wcm90b3R5cGUsIl90aXRsZURpc3BsYXlTdHJpbmciLG51bGwpO0pyPUUoW3l0KCJ0Zi1jdXN0b20tc2NhbGFyLW1hcmdpbi1jaGFydC1jYXJkIildLEpyKTt2YXIgbzA9RWUoT2UoKSwxKTt2YXIga0I9e307S3Moa0Ise0Jhc2VTdG9yZTooKT0+YnAsQ2FuY2VsbGVyOigpPT5hbixFbnZpcm9ubWVudFN0b3JlOigpPT5IOSxFeHBlcmltZW50c1N0b3JlOigpPT5lUixIdHRwTWV0aG9kVHlwZTooKT0+QW0sSW52YWxpZFJlcXVlc3RPcHRpb25zRXJyb3I6KCk9PlZ4LExpc3RlbktleTooKT0+QjksUmVxdWVzdENhbmNlbGxhdGlvbkVycm9yOigpPT5sOSxSZXF1ZXN0TWFuYWdlcjooKT0+QWUsUmVxdWVzdE5ldHdvcmtFcnJvcjooKT0+Y0UsUmVxdWVzdE9wdGlvbnM6KCk9PlV4LFJ1bnNTdG9yZTooKT0+VjksVFlQRVM6KCk9Pkx4ZSxhZGRQYXJhbXM6KCk9PkNuLGNyZWF0ZVJvdXRlcjooKT0+UGd0LGNyZWF0ZVNlYXJjaFBhcmFtOigpPT5lVyxlbnZpcm9ubWVudFN0b3JlOigpPT5pYixleHBlcmltZW50c1N0b3JlOigpPT5yUixmaWx0ZXJUYWdzOigpPT5SeGUsZ2V0Um91dGVyOigpPT52ZSxnZXRSdW5zTmFtZWQ6KCk9Pmt4ZSxnZXRUYWdzOigpPT4kaSxydW5zU3RvcmU6KCk9PndwLHNldFJvdXRlcjooKT0+SHhlfSk7dmFyIEVuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmFjdGl2ZT0hMCx0aGlzLl9jb2xvclNjYWxlPW5ldyBXMSh7c2NhbGU6Zm59KSx0aGlzLl9uYW1lVG9EYXRhU2VyaWVzPXt9LHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3JlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz12ZSgpLnBsdWdpblJvdXRlKCJjdXN0b21fc2NhbGFycyIsIi9zY2FsYXJzIik7UHJvbWlzZS5hbGwodC5tYXAoYT0+e2xldCBzPWEsbD10aGlzLl90YWdGaWx0ZXIsYz1DbihvLHt0YWc6bCxydW46c30pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYykudGhlbih1PT52b2lkIHIoe2l0ZW06YSxkYXRhOnV9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleD17fSx0aGlzLl9tYXRjaGVzTGlzdE9wZW5lZD0hMX1yZWxvYWQoKXt0aGlzLiQubG9hZGVyLnJlbG9hZCgpfXJlZHJhdygpe3RoaXMuJC5sb2FkZXIucmVkcmF3KCl9X3RvZ2dsZUV4cGFuZGVkKHQpe3RoaXMuc2V0KCJfZXhwYW5kZWQiLCF0aGlzLl9leHBhbmRlZCksdGhpcy5yZWRyYXcoKX1fdG9nZ2xlTG9nU2NhbGUoKXt0aGlzLnNldCgiX2xvZ1NjYWxlQWN0aXZlIiwhdGhpcy5fbG9nU2NhbGVBY3RpdmUpfV9yZXNldERvbWFpbigpe2xldCB0PXRoaXMuJC5sb2FkZXI7dCYmdC5yZXNldERvbWFpbigpfV9jc3ZVcmwodCxyKXtpZighcilyZXR1cm4iIjtsZXQgbj10aGlzLl9kb3dubG9hZERhdGFVcmwodCxyKTtyZXR1cm4gQ24obix7Zm9ybWF0OiJjc3YifSl9X2pzb25VcmwodCxyKXtpZighcilyZXR1cm4iIjtsZXQgbj10aGlzLl9kb3dubG9hZERhdGFVcmwodCxyKTtyZXR1cm4gQ24obix7Zm9ybWF0OiJqc29uIn0pfV9kb3dubG9hZERhdGFVcmwodCxyKXtsZXQgbj10W3JdLGk9e3RhZzpuLmdldFRhZygpLHJ1bjpuLmdldFJ1bigpfTtyZXR1cm4gQ24odmUoKS5wbHVnaW5Sb3V0ZSgiY3VzdG9tX3NjYWxhcnMiLCIvZG93bmxvYWRfZGF0YSIpLGkpfV9jcmVhdGVQcm9jZXNzRGF0YUZ1bmN0aW9uKCl7cmV0dXJuKHQscixuKT0+e2lmKG4ucmVnZXhfdmFsaWQpe2xldCBpPW8wLmNsb25lKHRoaXMuX25hbWVUb0RhdGFTZXJpZXMpO28wLmZvck93bihuLnRhZ190b19ldmVudHMsKG8sYSk9PntsZXQgcz1vLm1hcCh1PT4oe3dhbGxfdGltZTpuZXcgRGF0ZSh1WzBdKjFlMyksc3RlcDp1WzFdLHNjYWxhcjp1WzJdfSkpLGw9TEIocixhKSxjPWlbbF07aWYoYyljLnNldERhdGEocyk7ZWxzZXtvMC5pc1VuZGVmaW5lZCh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSkmJih0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXT0wKTtsZXQgdT1SU1t0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXV0saD1uZXcgT1MocixhLGwscyx1KTtpW2xdPWg7bGV0IGY9UlMubGVuZ3RoO3RoaXMuX3J1blRvTmV4dEF2YWlsYWJsZVN5bWJvbEluZGV4W3JdPSh0aGlzLl9ydW5Ub05leHRBdmFpbGFibGVTeW1ib2xJbmRleFtyXSsxKSVmfX0pLHRoaXMuc2V0KCJfbmFtZVRvRGF0YVNlcmllcyIsaSl9fX1fdXBkYXRlQ2hhcnQoKXt2YXIgdD10aGlzLl9uYW1lVG9EYXRhU2VyaWVzO09iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtyLG5dKT0+e3RoaXMuJC5sb2FkZXIuc2V0U2VyaWVzRGF0YShyLG4uZ2V0RGF0YSgpKX0pLHRoaXMuJC5sb2FkZXIuY29tbWl0Q2hhbmdlcygpfV9jb21wdXRlU2VsZWN0ZWRSdW5zU2V0KHQpe2xldCByPXt9O3JldHVybiBvMC5mb3JFYWNoKHQsbj0+e3Jbbl09MX0pLHJ9Z2V0IF9zZXJpZXNOYW1lcygpe2xldCB0PW5ldyBTZXQodGhpcy5ydW5zKTtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5fbmFtZVRvRGF0YVNlcmllcykuZmlsdGVyKChbcixuXSk9PnQuaGFzKG4ucnVuKSkubWFwKChbcl0pPT5yKX1fZGV0ZXJtaW5lQ29sb3IodCxyKXtyZXR1cm4gdC5zY2FsZShyKX1fcmVmcmVzaERhdGFTZXJpZXMoKXt2YXIgdD10aGlzLl90YWdGaWx0ZXI7dGhpcy5zZXQoIl9uYW1lVG9EYXRhU2VyaWVzIix7fSl9X2NyZWF0ZVN5bWJvbEZ1bmN0aW9uKCl7cmV0dXJuIHQ9PnRoaXMuX25hbWVUb0RhdGFTZXJpZXNbdF0uZ2V0U3ltYm9sKCkubWV0aG9kKCl9X2RldGVybWluZVN5bWJvbCh0LHIpe3JldHVybiB0W3JdLmdldFN5bWJvbCgpLmNoYXJhY3Rlcn1nZXQgX3RhZ0ZpbHRlcigpe3ZhciB0PXRoaXMudGFnUmVnZXhlcztyZXR1cm4gdC5sZW5ndGg9PT0xP3RbMF06dC5tYXAocj0+IigiK3IrIikiKS5qb2luKCJ8Iil9X2dldFRvZ2dsZU1hdGNoZXNJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fdG9nZ2xlTWF0Y2hlc09wZW4oKXt0aGlzLnNldCgiX21hdGNoZXNMaXN0T3BlbmVkIiwhdGhpcy5fbWF0Y2hlc0xpc3RPcGVuZWQpfWdldCBfdGl0bGVEaXNwbGF5U3RyaW5nKCl7dmFyIHQ9dGhpcy50aXRsZTtyZXR1cm4gdHx8InVudGl0bGVkIn1fbWF0Y2hMaXN0RW50cnlDb2xvclVwZGF0ZWQodCl7dmFyIG47bGV0IHI9dGhpcy4kJCgiI21hdGNoLWxpc3QtcmVwZWF0Iik7IXJ8fChuPXRoaXMucm9vdCk9PW51bGx8fG4ucXVlcnlTZWxlY3RvckFsbCgiLm1hdGNoLWxpc3QtZW50cnkiKS5mb3JFYWNoKGk9PntsZXQgbz1yLml0ZW1Gb3JFbGVtZW50KGkpO2kuc3R5bGUuY29sb3I9dGhpcy5fZGV0ZXJtaW5lQ29sb3IodGhpcy5fY29sb3JTY2FsZSxvKX0pfX07RW4udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgZGlzcGxheS1uYW1lPSJbW190aXRsZURpc3BsYXlTdHJpbmddXSI+PC90Zi1jYXJkLWhlYWRpbmc+CiAgICA8ZGl2IGlkPSJ0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciI+CiAgICAgIDx0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyCiAgICAgICAgaWQ9ImxvYWRlciIKICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgY29sb3Itc2NhbGU9IltbX2NvbG9yU2NhbGVdXSIKICAgICAgICBkYXRhLXNlcmllcz0iW1tfc2VyaWVzTmFtZXNdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWtleT0iW1tfdGFnRmlsdGVyXV0iCiAgICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbX3JlcXVlc3REYXRhXV0iCiAgICAgICAgbG9nLXNjYWxlLWFjdGl2ZT0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHN5bWJvbC1mdW5jdGlvbj0iW1tfY3JlYXRlU3ltYm9sRnVuY3Rpb24oKV1dIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgICAgbm8tbGFiZWwtZmxvYXQ9InRydWUiCiAgICAgICAgICAgIGxhYmVsPSJzZXJpZXMgdG8gZG93bmxvYWQiCiAgICAgICAgICAgIHNlbGVjdGVkLWl0ZW0tbGFiZWw9Int7X2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZH19IgogICAgICAgICAgPgogICAgICAgICAgICA8cGFwZXItbGlzdGJveCBjbGFzcz0iZHJvcGRvd24tY29udGVudCIgc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW19zZXJpZXNOYW1lc11dIgogICAgICAgICAgICAgICAgYXM9ImRhdGFTZXJpZXNOYW1lIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICAgICAgICAgICAgICA+W1tkYXRhU2VyaWVzTmFtZV1dPC9wYXBlci1pdGVtCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgICAgPC9wYXBlci1kcm9wZG93bi1tZW51PgogICAgICAgICAgPGEKICAgICAgICAgICAgZG93bmxvYWQ9IltbX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZF1dLmNzdiIKICAgICAgICAgICAgaHJlZj0iW1tfY3N2VXJsKF9uYW1lVG9EYXRhU2VyaWVzLCBfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkKV1dIgogICAgICAgICAgICA+Q1NWPC9hCiAgICAgICAgICA+CiAgICAgICAgICA8YQogICAgICAgICAgICBkb3dubG9hZD0iW1tfZGF0YVNlcmllc05hbWVUb0Rvd25sb2FkXV0uanNvbiIKICAgICAgICAgICAgaHJlZj0iW1tfanNvblVybChfbmFtZVRvRGF0YVNlcmllcywgX2RhdGFTZXJpZXNOYW1lVG9Eb3dubG9hZCldXSIKICAgICAgICAgICAgPkpTT048L2EKICAgICAgICAgID4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0ibWF0Y2hlcy1jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJtYXRjaGVzLWxpc3QtdGl0bGUiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc2VyaWVzTmFtZXMubGVuZ3RoXV0iPgogICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZU1hdGNoZXNJY29uKF9tYXRjaGVzTGlzdE9wZW5lZCldXSIKICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVNYXRjaGVzT3BlbiIKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS1tYXRjaGVzLWJ1dHRvbiIKICAgICAgICAgID4KICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoZXMtdGV4dCI+IE1hdGNoZXMgKFtbX3Nlcmllc05hbWVzLmxlbmd0aF1dKSA8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX3Nlcmllc05hbWVzLmxlbmd0aF1dIj4KICAgICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX21hdGNoZXNMaXN0T3BlbmVkXV0iPgogICAgICAgICAgPGRpdiBpZD0ibWF0Y2hlcy1saXN0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICAgICAgaXRlbXM9IltbX3Nlcmllc05hbWVzXV0iCiAgICAgICAgICAgICAgYXM9InNlcmllc05hbWUiCiAgICAgICAgICAgICAgaWQ9Im1hdGNoLWxpc3QtcmVwZWF0IgogICAgICAgICAgICAgIG9uLWRvbS1jaGFuZ2U9Il9tYXRjaExpc3RFbnRyeUNvbG9yVXBkYXRlZCIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hdGNoLWxpc3QtZW50cnkiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1hdGNoLWVudHJ5LXN5bWJvbCI+CiAgICAgICAgICAgICAgICAgIFtbX2RldGVybWluZVN5bWJvbChfbmFtZVRvRGF0YVNlcmllcywgc2VyaWVzTmFtZSldXQogICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgW1tzZXJpZXNOYW1lXV0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJ0Zi1jdXN0b20tc2NhbGFyLWNhcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICNtYXRjaGVzLWxpc3QtdGl0bGUgewogICAgICAgIG1hcmdpbjogMTBweCAwIDVweCAwOwogICAgICB9CgogICAgICAjbWF0Y2hlcy1saXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubWF0Y2gtbGlzdC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAwIDAgNXB4IDA7CiAgICAgIH0KCiAgICAgIC5tYXRjaC1lbnRyeS1zeW1ib2wgewogICAgICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgc2Fucy1zZXJpZjsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5tYXRjaGVzLXRleHQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sRW4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVuLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImFjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxFbi5wcm90b3R5cGUsInRpdGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxFbi5wcm90b3R5cGUsInRhZ1JlZ2V4ZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLEVuLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsInNob3dEb3dubG9hZExpbmtzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRW4ucHJvdG90eXBlLCJzbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLEVuLnByb3RvdHlwZSwic21vb3RoaW5nV2VpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVuLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRW4ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixXMSldLEVuLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfbmFtZVRvRGF0YVNlcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEVuLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sRW4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRW4ucHJvdG90eXBlLCJfcnVuVG9OZXh0QXZhaWxhYmxlU3ltYm9sSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFbi5wcm90b3R5cGUsIl9tYXRjaGVzTGlzdE9wZW5lZCIsdm9pZCAwKTtFKFtCdCgiX25hbWVUb0RhdGFTZXJpZXMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVuLnByb3RvdHlwZSwiX3VwZGF0ZUNoYXJ0IixudWxsKTtFKFtSdCgiX25hbWVUb0RhdGFTZXJpZXMiLCJydW5zIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sRW4ucHJvdG90eXBlLCJfc2VyaWVzTmFtZXMiLG51bGwpO0UoW0J0KCJfdGFnRmlsdGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxFbi5wcm90b3R5cGUsIl9yZWZyZXNoRGF0YVNlcmllcyIsbnVsbCk7RShbUnQoInRhZ1JlZ2V4ZXMiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFbi5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLG51bGwpO0UoW1J0KCJ0aXRsZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEVuLnByb3RvdHlwZSwiX3RpdGxlRGlzcGxheVN0cmluZyIsbnVsbCk7RW49RShbeXQoInRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIildLEVuKTt2YXIgam89Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzPXZwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl9zbW9vdGhpbmdXZWlnaHQ9Z0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KS5jYWxsKHRoaXMpLHRoaXMuX2lnbm9yZVlPdXRsaWVycz12cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3hUeXBlPSJzdGVwIix0aGlzLl9hY3RpdmU9ITAsdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX3Nob3dEb3dubG9hZExpbmtzT2JzZXJ2ZXI9eHAoIl9zaG93RG93bmxvYWRMaW5rcyIse2RlZmF1bHRWYWx1ZTohMSx1c2VMb2NhbFN0b3JhZ2U6ITB9KSx0aGlzLl9zbW9vdGhpbmdXZWlnaHRPYnNlcnZlcj1fRSgiX3Ntb290aGluZ1dlaWdodCIse2RlZmF1bHRWYWx1ZTouNn0pLHRoaXMuX2lnbm9yZVlPdXRsaWVyc09ic2VydmVyPXhwKCJfaWdub3JlWU91dGxpZXJzIix7ZGVmYXVsdFZhbHVlOiEwLHVzZUxvY2FsU3RvcmFnZTohMH0pfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7bGV0IHQ9dmUoKS5wbHVnaW5zTGlzdGluZygpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIiwhbi52YWx1ZS5jdXN0b21fc2NhbGFycyksIXRoaXMuX2RhdGFOb3RGb3VuZCYmdGhpcy5fcmV0cmlldmVMYXlvdXRBbmREYXRhKCkpfSk7dGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHIpfV9yZWxvYWRDaGFydHMoKXt2YXIgcjtsZXQgdD0ocj10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDpyLnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQsIHRmLWN1c3RvbS1zY2FsYXItbXVsdGktbGluZS1jaGFydC1jYXJkIik7dD09bnVsbHx8dC5mb3JFYWNoKG49PntuLnJlbG9hZCgpfSl9X3JldHJpZXZlTGF5b3V0QW5kRGF0YSgpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoImN1c3RvbV9zY2FsYXJzIiwiL2xheW91dCIpLHI9dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKG49PntuLmNhbmNlbGxlZHx8KHRoaXMuc2V0KCJfbGF5b3V0IixuLnZhbHVlKSx0aGlzLl9kYXRhTm90Rm91bmR8fHRoaXMuX3JlbG9hZENoYXJ0cygpKX0pO3RoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyKX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9sYXlvdXQ7aWYoIXQuY2F0ZWdvcnkpcmV0dXJuW107bGV0IHI9ITE7cmV0dXJuIHRoaXMuX29wZW5lZENhdGVnb3JpZXN8fChyPSEwLHRoaXMuX29wZW5lZENhdGVnb3JpZXM9e30pLHQuY2F0ZWdvcnkubWFwKGk9PihyJiYhaS5jbG9zZWQmJih0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW2kudGl0bGVdPSEwKSx7bmFtZTppLnRpdGxlLGl0ZW1zOmkuY2hhcnQsbWV0YWRhdGE6e3R5cGU6TmEuUFJFRklYX0dST1VQLG9wZW5lZDohIXRoaXMuX29wZW5lZENhdGVnb3JpZXNbaS50aXRsZV19fSkpfV9jYXRlZ29yeU9wZW5lZFRvZ2dsZWQodCl7bGV0IHI9dC50YXJnZXQ7ci5vcGVuZWQ/dGhpcy5fb3BlbmVkQ2F0ZWdvcmllc1tyLmNhdGVnb3J5Lm5hbWVdPSEwOmRlbGV0ZSB0aGlzLl9vcGVuZWRDYXRlZ29yaWVzW3IuY2F0ZWdvcnkubmFtZV19fTtqby50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94IGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdiBpZD0idG9vbHRpcC1zb3J0aW5nLWxhYmVsIj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdD0iIgogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIxIgogICAgICAgICAgICA+PC90Zi1zbW9vdGhpbmctaW5wdXQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieC10eXBlLXNlbGVjdG9yIgogICAgICAgICAgICAgIG5hbWU9Ikhvcml6b250YWwgQXhpcyIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfeFR5cGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9InJlbGF0aXZlIj5yZWxhdGl2ZTwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPjwhLS0KICAgICAgICAgICAgLS0+PHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY2VudGVyIiBzbG90PSJjZW50ZXIiIGlkPSJjYXRlZ29yaWVzLWNvbnRhaW5lciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+VGhlIGN1c3RvbSBzY2FsYXJzIGRhc2hib2FyZCBpcyBpbmFjdGl2ZS48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbid0IGxhaWQgb3V0IHRoZSBkYXNoYm9hcmQuPC9saT4KICAgICAgICAgICAgICA8bGk+WW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBzY2FsYXIgZGF0YSB0byB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvb2w+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBUbyBsYXkgb3V0IHRoZSBkYXNoYm9hcmQsIHBhc3MgYSA8Y29kZT5MYXlvdXQ8L2NvZGU+IHByb3RvYnVmZmVyCiAgICAgICAgICAgICAgdG8gdGhlIDxjb2RlPnNldF9sYXlvdXQ8L2NvZGU+IG1ldGhvZC4gRm9yIGV4YW1wbGUsCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgPHByZT4KZnJvbSB0ZW5zb3Jib2FyZCBpbXBvcnQgc3VtbWFyeQpmcm9tIHRlbnNvcmJvYXJkLnBsdWdpbnMuY3VzdG9tX3NjYWxhciBpbXBvcnQgbGF5b3V0X3BiMgouLi4KIyBUaGlzIGFjdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBhdCBldmVyeSBzdGVwLCBzbyB0aGUgYWN0aW9uIGlzIG5vdAojIHRha2VuIGNhcmUgb2YgYnkgYW4gb3AgaW4gdGhlIGdyYXBoLiBXZSBvbmx5IG5lZWQgdG8gc3BlY2lmeSB0aGUgbGF5b3V0IG9uY2UKIyAoaW5zdGVhZCBvZiBwZXIgc3RlcCkuCmxheW91dF9zdW1tYXJ5ID0gc3VtbWFyeV9saWIuY3VzdG9tX3NjYWxhcl9wYihsYXlvdXRfcGIyLkxheW91dCgKICBjYXRlZ29yeT1bCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgY2hhcnQ9WwogICAgICAgICAgbGF5b3V0X3BiMi5DaGFydCgKICAgICAgICAgICAgICB0aXRsZT0nbG9zc2VzJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3InbG9zcy4qJ10sCiAgICAgICAgICAgICAgKSksCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSdiYXonLAogICAgICAgICAgICAgIG1hcmdpbj1sYXlvdXRfcGIyLk1hcmdpbkNoYXJ0Q29udGVudCgKICAgICAgICAgICAgICAgIHNlcmllcz1bCiAgICAgICAgICAgICAgICAgIGxheW91dF9wYjIuTWFyZ2luQ2hhcnRDb250ZW50LlNlcmllcygKICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nbG9zcy9iYXovc2NhbGFyX3N1bW1hcnknLAogICAgICAgICAgICAgICAgICAgIGxvd2VyPSdiYXpfbG93ZXIvYmF6L3NjYWxhcl9zdW1tYXJ5JywKICAgICAgICAgICAgICAgICAgICB1cHBlcj0nYmF6X3VwcGVyL2Jhei9zY2FsYXJfc3VtbWFyeScpLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICApKSwKICAgICAgXSksCiAgICBsYXlvdXRfcGIyLkNhdGVnb3J5KAogICAgICB0aXRsZT0ndHJpZyBmdW5jdGlvbnMnLAogICAgICBjaGFydD1bCiAgICAgICAgICBsYXlvdXRfcGIyLkNoYXJ0KAogICAgICAgICAgICAgIHRpdGxlPSd3YXZlIHRyaWcgZnVuY3Rpb25zJywKICAgICAgICAgICAgICBtdWx0aWxpbmU9bGF5b3V0X3BiMi5NdWx0aWxpbmVDaGFydENvbnRlbnQoCiAgICAgICAgICAgICAgICB0YWc9W3IndHJpZ0Z1bmN0aW9ucy9jb3NpbmUnLCByJ3RyaWdGdW5jdGlvbnMvc2luZSddLAogICAgICAgICAgICAgICkpLAogICAgICAgICAgIyBUaGUgcmFuZ2Ugb2YgdGFuZ2VudCBpcyBkaWZmZXJlbnQuIExldCdzIGdpdmUgaXQgaXRzIG93biBjaGFydC4KICAgICAgICAgIGxheW91dF9wYjIuQ2hhcnQoCiAgICAgICAgICAgICAgdGl0bGU9J3RhbicsCiAgICAgICAgICAgICAgbXVsdGlsaW5lPWxheW91dF9wYjIuTXVsdGlsaW5lQ2hhcnRDb250ZW50KAogICAgICAgICAgICAgICAgdGFnPVtyJ3RyaWdGdW5jdGlvbnMvdGFuZ2VudCddLAogICAgICAgICAgICAgICkpLAogICAgICBdLAogICAgICAjIFRoaXMgY2F0ZWdvcnkgd2UgY2FyZSBsZXNzIGFib3V0LiBMZXQncyBtYWtlIGl0IGluaXRpYWxseSBjbG9zZWQuCiAgICAgIGNsb3NlZD1UcnVlKSwKICBdKSkKd3JpdGVyLmFkZF9zdW1tYXJ5KGxheW91dF9zdW1tYXJ5KQo8L3ByZQogICAgICAgICAgICA+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgYXM9ImNoYXJ0IgogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgZGlzYWJsZS1wYWdpbmF0aW9uCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbY2F0ZWdvcnkubWV0YWRhdGEub3BlbmVkXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbY2hhcnQubXVsdGlsaW5lXV0iPgogICAgICAgICAgICAgICAgICA8dGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW19zbW9vdGhpbmdFbmFibGVkXV0iCiAgICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcC1zb3J0aW5nLW1ldGhvZD0iW1t0b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICAgIGlnbm9yZS15LW91dGxpZXJzPSJbW19pZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICAgICAgICAgICAgICBzaG93LWRvd25sb2FkLWxpbmtzPSJbW19zaG93RG93bmxvYWRMaW5rc11dIgogICAgICAgICAgICAgICAgICAgIHRhZy1yZWdleGVzPSJbW2NoYXJ0Lm11bHRpbGluZS50YWddXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tdWx0aS1saW5lLWNoYXJ0LWNhcmQ+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2NoYXJ0Lm1hcmdpbl1dIj4KICAgICAgICAgICAgICAgICAgPHRmLWN1c3RvbS1zY2FsYXItbWFyZ2luLWNoYXJ0LWNhcmQKICAgICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICAgIHJ1bnM9IltbX3NlbGVjdGVkUnVuc11dIgogICAgICAgICAgICAgICAgICAgIHRpdGxlPSJbW2NoYXJ0LnRpdGxlXV0iCiAgICAgICAgICAgICAgICAgICAgeC10eXBlPSJbW194VHlwZV1dIgogICAgICAgICAgICAgICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgICBtYXJnaW4tY2hhcnQtc2VyaWVzPSJbW2NoYXJ0Lm1hcmdpbi5zZXJpZXNdXSIKICAgICAgICAgICAgICAgICAgPjwvdGYtY3VzdG9tLXNjYWxhci1tYXJnaW4tY2hhcnQtY2FyZD4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgI3Rvb2x0aXAtc29ydGluZyB7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgICB9CiAgICAgICN0b29sdGlwLXNvcnRpbmcgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItZm9jdXMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIHdpZHRoOiAxMDVweDsKICAgICAgfQogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxqby5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGpvLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sam8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sam8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGpvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxqby5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxqby5wcm90b3R5cGUsIl9sYXlvdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxqby5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sam8ucHJvdG90eXBlLCJfb3BlbmVkQ2F0ZWdvcmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwiX2FjdGl2ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGpvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtSdCgiX3Ntb290aGluZ1dlaWdodCIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxqby5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIixudWxsKTtFKFtSdCgiX2xheW91dCIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sam8ucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7am89RShbeXQoInRmLWN1c3RvbS1zY2FsYXItZGFzaGJvYXJkIildLGpvKTt2YXIgTkI9RWUoT2UoKSwxKTt2YXIgc3N0PUVlKE9lKCksMSksYmE9RWUod2woKSwxKTt2YXIgUkI9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnJ1bjJkYXRhc2V0cz17fSx0aGlzLmNvbG9yU2NhbGU9cix0aGlzLmJ1aWxkQ2hhcnQodCl9Z2V0RGF0YXNldCh0KXtyZXR1cm4gdGhpcy5ydW4yZGF0YXNldHNbdF09PT12b2lkIDAmJih0aGlzLnJ1bjJkYXRhc2V0c1t0XT1uZXcgYmEuRGF0YXNldChbXSx7cnVuOnR9KSksdGhpcy5ydW4yZGF0YXNldHNbdF19YnVpbGRDaGFydCh0KXt0aGlzLm91dGVyJiZ0aGlzLm91dGVyLmRlc3Ryb3koKTtsZXQgcj12Qih0KTt0aGlzLnhBY2Nlc3Nvcj1yLmFjY2Vzc29yLHRoaXMueFNjYWxlPXIuc2NhbGUsdGhpcy54QXhpcz1yLmF4aXMsdGhpcy54QXhpcy5tYXJnaW4oMCksdGhpcy54QXhpcy50aWNrTGFiZWxQYWRkaW5nKDMpLHRoaXMueVNjYWxlPW5ldyBiYS5TY2FsZXMuTGluZWFyLHRoaXMueUF4aXM9bmV3IGJhLkF4ZXMuTnVtZXJpYyh0aGlzLnlTY2FsZSwibGVmdCIpO2xldCBuPVd1KGRCKTt0aGlzLnlBeGlzLm1hcmdpbigwKS50aWNrTGFiZWxQYWRkaW5nKDUpLmZvcm1hdHRlcihuKSx0aGlzLnlBeGlzLnVzZXNUZXh0V2lkdGhBcHByb3hpbWF0aW9uKCEwKTtsZXQgaT10aGlzLmJ1aWxkUGxvdCh0aGlzLnhBY2Nlc3Nvcix0aGlzLnhTY2FsZSx0aGlzLnlTY2FsZSk7dGhpcy5ncmlkbGluZXM9bmV3IGJhLkNvbXBvbmVudHMuR3JpZGxpbmVzKHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKSx0aGlzLmNlbnRlcj1uZXcgYmEuQ29tcG9uZW50cy5Hcm91cChbdGhpcy5ncmlkbGluZXMsaV0pLHRoaXMub3V0ZXI9bmV3IGJhLkNvbXBvbmVudHMuVGFibGUoW1t0aGlzLnlBeGlzLHRoaXMuY2VudGVyXSxbbnVsbCx0aGlzLnhBeGlzXV0pfWJ1aWxkUGxvdCh0LHIsbil7bGV0IGk9WzAsMjI4LDE1ODcsMzA4NSw1ZTMsNjkxNSw4NDEzLDk3NzIsMWU0XSxvPXNzdC5yYW5nZShpLmxlbmd0aC0xKS5tYXAoaD0+KGlbaCsxXS1pW2hdKS8yNTAwKSxhPWkubWFwKChoLGYpPT5wPT5wW2ZdWzFdKSxzPTQsbD1hW3NdLGM9c3N0LnJhbmdlKGEubGVuZ3RoLTEpLm1hcChoPT57bGV0IGY9bmV3IGJhLlBsb3RzLkFyZWE7Zi54KHQscik7bGV0IHA9aD5zP2FbaF06YVtoKzFdLGQ9aD5zP2FbaCsxXTphW2hdO3JldHVybiBmLnkoZCxuKSxmLnkwKHApLGYuYXR0cigiZmlsbCIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZSIsKGcsXyx5KT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHkubWV0YWRhdGEoKS5ydW4pKSxmLmF0dHIoInN0cm9rZS13ZWlnaHQiLChnLF8seSk9PiIwLjVweCIpLGYuYXR0cigic3Ryb2tlLW9wYWNpdHkiLCgpPT5vW2hdKSxmLmF0dHIoImZpbGwtb3BhY2l0eSIsKCk9Pm9baF0pLGZ9KSx1PW5ldyBiYS5QbG90cy5MaW5lO3JldHVybiB1LngodCxyKSx1LnkobCxuKSx1LmF0dHIoInN0cm9rZSIsKGgsZixwKT0+dGhpcy5jb2xvclNjYWxlLnNjYWxlKHAucnVuKSksdGhpcy5wbG90cz1jLG5ldyBiYS5Db21wb25lbnRzLkdyb3VwKGMpfXNldFZpc2libGVTZXJpZXModCl7dGhpcy5ydW5zPXQ7bGV0IHI9dC5tYXAobj0+dGhpcy5nZXREYXRhc2V0KG4pKTt0aGlzLnBsb3RzLmZvckVhY2gobj0+bi5kYXRhc2V0cyhyKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuZ2V0RGF0YXNldCh0KS5kYXRhKHIpfXJlbmRlclRvKHQpe3RoaXMudGFyZ2V0U1ZHPXQsdGhpcy5vdXRlci5yZW5kZXJUbyh0KX1yZWRyYXcoKXt0aGlzLm91dGVyLnJlZHJhdygpfWRlc3Ryb3koKXt0aGlzLm91dGVyLmRlc3Ryb3koKX19LEJjPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bmV3IGJhLlNjYWxlcy5Db2xvcigpLnJhbmdlKGpiLnNsaWNlKCkpLHRoaXMueFR5cGU9InN0ZXAiLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZT1bXSx0aGlzLl9zZXJpZXNEYXRhQ2FjaGU9e30sdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPW51bGx9c2V0VmlzaWJsZVNlcmllcyh0KXt0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGU9dCx0aGlzLl9jaGFydCYmKHRoaXMuX2NoYXJ0LnNldFZpc2libGVTZXJpZXModCksdGhpcy5yZWRyYXcoKSl9c2V0U2VyaWVzRGF0YSh0LHIpe3RoaXMuX3Nlcmllc0RhdGFDYWNoZVt0XT1yLHRoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5zZXRTZXJpZXNEYXRhKHQscil9cmVkcmF3KCl7dGhpcy5fY2hhcnQucmVkcmF3KCl9X21ha2VDaGFydCgpe3ZhciB0PXRoaXMueFR5cGUscj10aGlzLmNvbG9yU2NhbGUsbj10aGlzLl9hdHRhY2hlZDt0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQhPT1udWxsJiZ0aGlzLmNhbmNlbEFzeW5jKHRoaXMuX21ha2VDaGFydEFzeW5jQ2FsbGJhY2tJZCksdGhpcy5fbWFrZUNoYXJ0QXN5bmNDYWxsYmFja0lkPXRoaXMuYXN5bmMoZnVuY3Rpb24oKXtpZih0aGlzLl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQ9bnVsbCwhIW4pe3RoaXMuX2NoYXJ0JiZ0aGlzLl9jaGFydC5kZXN0cm95KCk7dmFyIGk9bmV3IFJCKHQsciksbz1IdCh0aGlzLiQuY2hhcnRkaXYpO2kucmVuZGVyVG8obyksdGhpcy5fY2hhcnQ9aX19LDM1MCl9X3JlbG9hZEZyb21DYWNoZSgpe3RoaXMuX2NoYXJ0JiYodGhpcy5fY2hhcnQuc2V0VmlzaWJsZVNlcmllcyh0aGlzLl92aXNpYmxlU2VyaWVzQ2FjaGUpLHRoaXMuX3Zpc2libGVTZXJpZXNDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RoaXMuX2NoYXJ0LnNldFNlcmllc0RhdGEodCx0aGlzLl9zZXJpZXNEYXRhQ2FjaGVbdF18fFtdKX0uYmluZCh0aGlzKSkpfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX19O0JjLnRlbXBsYXRlPVFgCiAgICA8c3R5bGUgaW5jbHVkZT0icGxvdHRhYmxlLXN0eWxlIj48L3N0eWxlPgogICAgPGRpdiBpZD0iY2hhcnRkaXYiPjwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgICNjaGFydGRpdiB7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgfQogICAgICAucGxvdHRhYmxlIC5heGlzIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGJhLlNjYWxlcy5Db2xvcildLEJjLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxCYy5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQmMucHJvdG90eXBlLCJfYXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsUkIpXSxCYy5wcm90b3R5cGUsIl9jaGFydCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQmMucHJvdG90eXBlLCJfdmlzaWJsZVNlcmllc0NhY2hlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJjLnByb3RvdHlwZSwiX3Nlcmllc0RhdGFDYWNoZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCYy5wcm90b3R5cGUsIl9tYWtlQ2hhcnRBc3luY0NhbGxiYWNrSWQiLHZvaWQgMCk7RShbQnQoInhUeXBlIiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQmMucHJvdG90eXBlLCJfbWFrZUNoYXJ0IixudWxsKTtFKFtCdCgiX2NoYXJ0IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxCYy5wcm90b3R5cGUsIl9yZWxvYWRGcm9tQ2FjaGUiLG51bGwpO0JjPUUoW3l0KCJ2ei1kaXN0cmlidXRpb24tY2hhcnQiKV0sQmMpO3ZhciB3YT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz12ZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL2Rpc3RyaWJ1dGlvbnMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9Q24obyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPW4ubWFwKGE9PntsZXRbcyxsLGNdPWE7cmV0dXJuIGMud2FsbF90aW1lPW5ldyBEYXRlKHMqMWUzKSxjLnN0ZXA9bCxjfSksbz10aGlzLmdldERhdGFMb2FkTmFtZShyKTt0aGlzLiQuY2hhcnQuc2V0U2VyaWVzRGF0YShvLGkpLHRoaXMuJC5jaGFydC5zZXRWaXNpYmxlU2VyaWVzKFtvXSl9LHRoaXMuX2NvbG9yU2NhbGU9e3NjYWxlOmZufSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufV9yZWxvYWRPblJ1blRhZ0NoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlLnNjYWxlKHQpfXJlZHJhdygpe3RoaXMuJC5jaGFydC5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfX07d2EudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID48L3RmLWNhcmQtaGVhZGluZz4KICAgIDwhLS0KICAgICAgVGhlIG1haW4gZGlzdHJpYnV0aW9uIHRoYXQgd2UgcmVuZGVyLiBEYXRhIGlzIHNldCBkaXJlY3RseSB3aXRoCiAgICAgIFxgc2V0U2VyaWVzRGF0YVxgLCBub3Qgd2l0aCBhIGJvdW5kIHByb3BlcnR5LgogICAgLS0+CiAgICA8dnotZGlzdHJpYnV0aW9uLWNoYXJ0CiAgICAgIGlkPSJjaGFydCIKICAgICAgeC10eXBlPSJbW3hUeXBlXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlXV0iCiAgICA+PC92ei1kaXN0cmlidXRpb24tY2hhcnQ+CiAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogcm93OyI+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfZXhwYW5kZWRdXSIKICAgICAgICBpY29uPSJmdWxsc2NyZWVuIgogICAgICAgIG9uLXRhcD0iX3RvZ2dsZUV4cGFuZGVkIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHdpZHRoOiAzMzBweDsKICAgICAgICBoZWlnaHQ6IDIzNXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDcwMHB4OwogICAgICAgIGhlaWdodDogNTAwcHg7CiAgICAgIH0KCiAgICAgIHZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzIHsKICAgICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWljb24tYnV0dG9uIHsKICAgICAgICBjb2xvcjogIzIxOTZmMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KICAgICAgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CgogICAgICB0Zi1jYXJkLWhlYWRpbmcgewogICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx3YS5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx3YS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHdhLnByb3RvdHlwZSwieFR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sd2EucHJvdG90eXBlLCJsb2FkRGF0YUNhbGxiYWNrIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHdhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sd2EucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSx3YS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGFuKV0sd2EucHJvdG90eXBlLCJfY2FuY2VsbGVyIix2b2lkIDApO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHdhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnQ2hhbmdlIixudWxsKTtFKFtCdCgicnVuIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSx3YS5wcm90b3R5cGUsIl91cGRhdGVEYXRhVG9Mb2FkIixudWxsKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sd2EucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO3dhPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tbG9hZGVyIildLHdhKTt2YXIgU2w9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl94VHlwZT0ic3RlcCIsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZERpc3RyaWJ1dGlvbnMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD12ZSgpLnBsdWdpblJvdXRlKCJkaXN0cmlidXRpb25zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihOQi5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49TkIubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkRGlzdHJpYnV0aW9ucygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtZGlzdHJpYnV0aW9uLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtTbC50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDx0Zi1vcHRpb24tc2VsZWN0b3IKICAgICAgICAgICAgICBpZD0ieFR5cGVTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIGF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0icmVsYXRpdmUiPnJlbGF0aXZlPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbiBpZD0id2FsbF90aW1lIj53YWxsPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvdGYtb3B0aW9uLXNlbGVjdG9yPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIHJ1bnMtc2VsZWN0b3IiPgogICAgICAgICAgPHRmLXJ1bnMtc2VsZWN0b3Igc2VsZWN0ZWQtcnVucz0ie3tfc2VsZWN0ZWRSdW5zfX0iPgogICAgICAgICAgPC90Zi1ydW5zLXNlbGVjdG9yPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBkaXN0cmlidXRpb24gZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgIFlvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaGlzdG9ncmFtIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy4KICAgICAgICAgICAgICAgIChIaXN0b2dyYW1zIGFuZCBkaXN0cmlidXRpb25zIGJvdGggdXNlIHRoZSBoaXN0b2dyYW0gc3VtbWFyeQogICAgICAgICAgICAgICAgb3BlcmF0aW9uLikKICAgICAgICAgICAgICA8L2xpPgoKICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtZGlzdHJpYnV0aW9uLWxvYWRlcgogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIHJ1bj0iW1tpdGVtLnJ1bl1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHgtdHlwZT0iW1tfeFR5cGVdXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgPjwvdGYtZGlzdHJpYnV0aW9uLWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3hUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxTbC5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sU2wucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sU2wucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFNsLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFNsLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFNsLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO1NsPUUoW3l0KCJ0Zi1kaXN0cmlidXRpb24tZGFzaGJvYXJkIildLFNsKTt2YXIgREI9e307S3MoREIse0RJU0FNQklHVUFUT1I6KCk9PkYwdCxMaXN0ZW5LZXk6KCk9PmRFLGFkZEhhc2hMaXN0ZW5lcjooKT0+bUUsYWRkU3RvcmFnZUxpc3RlbmVyOigpPT5DVyxkaXNwb3NlQm9vbGVhbkJpbmRpbmc6KCk9PiRiZSxkaXNwb3NlTnVtYmVyQmluZGluZzooKT0+S2JlLGRpc3Bvc2VPYmplY3RCaW5kaW5nOigpPT5RYmUsZGlzcG9zZVN0cmluZ0JpbmRpbmc6KCk9PlliZSxmaXJlU3RvcmFnZUNoYW5nZWQ6KCk9PkFXLGdldEJvb2xlYW46KCk9PmpiZSxnZXRCb29sZWFuSW5pdGlhbGl6ZXI6KCk9PnZwLGdldEJvb2xlYW5PYnNlcnZlcjooKT0+eHAsZ2V0TnVtYmVyOigpPT5EVyxnZXROdW1iZXJJbml0aWFsaXplcjooKT0+Z0UsZ2V0TnVtYmVyT2JzZXJ2ZXI6KCk9Pl9FLGdldE9iamVjdDooKT0+WmJlLGdldE9iamVjdEluaXRpYWxpemVyOigpPT56VyxnZXRPYmplY3RPYnNlcnZlcjooKT0+RlcsZ2V0U3RyaW5nOigpPT5HYmUsZ2V0U3RyaW5nSW5pdGlhbGl6ZXI6KCk9PnlfLGdldFN0cmluZ09ic2VydmVyOigpPT52XyxnZXRVcmxIYXNoRGljdDooKT0+TjB0LG1ha2VCaW5kaW5nczooKT0+eUUsbWlncmF0ZUxlZ2FjeVVSTFNjaGVtZTooKT0+dDJlLHJlbW92ZUhhc2hMaXN0ZW5lckJ5S2V5OigpPT5QVyxyZW1vdmVTdG9yYWdlTGlzdGVuZXJCeUtleTooKT0+SVcsc2V0Qm9vbGVhbjooKT0+WGJlLHNldE51bWJlcjooKT0+T1csc2V0T2JqZWN0OigpPT5KYmUsc2V0U3RyaW5nOigpPT5XYmV9KTt2YXIgb2N0PUVlKE9lKCksMSk7dmFyIFdLdD0iR3JhcGggZGFzaGJvYXJkIGFjdGlvbnMiLFlLdD0iR3JhcGggZGFzaGJvYXJkIHRpbWluZ3MiLGxzdDsoZnVuY3Rpb24oZSl7ZS5GRVRDSF9QQlRYVF9CWVRFUz0iRkVUQ0hfUEJUWFRfQllURVMiLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9GSUxFU1lTVEVNPSJGRVRDSF9QQlRYVF9CWVRFU19GUk9NX0ZJTEVTWVNURU0iLGUuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVI9IkZFVENIX1BCVFhUX0JZVEVTX0ZST01fU0VSVkVSIixlLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUPSJQQVJTRV9QQlRYVF9JTlRPX09CSkVDVCIsZS5GRVRDSF9NRVRBREFUQV9QQlRYVF9CWVRFUz0iRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMiLGUuUEFSU0VfTUVUQURBVEFfUEJUWFRfSU5UT19PQkpFQ1Q9IlBBUlNFX01FVEFEQVRBX1BCVFhUX0lOVE9fT0JKRUNUIixlLk5PUk1BTElaSU5HX05BTUVTPSJOT1JNQUxJWklOR19OQU1FUyIsZS5CVUlMRF9TTElNX0dSQVBIPSJCVUlMRF9TTElNX0dSQVBIIixlLkhJRVJBUkNIWV9BRERfTk9ERVM9IkhJRVJBUkNIWV9BRERfTk9ERVMiLGUuSElFUkFSQ0hZX0RFVEVDVF9TRVJJRVM9IkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTIixlLkhJRVJBUkNIWV9BRERfRURHRVM9IkhJRVJBUkNIWV9BRERfRURHRVMiLGUuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFM9IkhJRVJBUkNIWV9GSU5EX1NJTUlMQVJfU1VCR1JBUEhTIixlLlJFTkRFUl9CVUlMRF9ISUVSQVJDSFk9IlJFTkRFUl9CVUlMRF9ISUVSQVJDSFkiLGUuUkVOREVSX1NDRU5FX0xBWU9VVD0iUkVOREVSX1NDRU5FX0xBWU9VVCIsZS5SRU5ERVJfU0NFTkVfQlVJTERfU0NFTkU9IlJFTkRFUl9TQ0VORV9CVUlMRF9TQ0VORSIsZS5HUkFQSF9MT0FEX1NVQ0NFRURFRD0iR1JBUEhfTE9BRF9TVUNDRUVERUQiLGUuR1JBUEhfTE9BRF9GQUlMRUQ9IkdSQVBIX0xPQURfRkFJTEVEIn0pKGxzdHx8KGxzdD17fSkpO3ZhciBjc3Q7KGZ1bmN0aW9uKGUpe2UuTk9ERV9FWFBBTlNJT05fVE9HR0xFRD0iTk9ERV9FWFBBTlNJT05fVE9HR0xFRCIsZS5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRD0iTk9ERV9TRUFSQ0hfUkVTVUxUX0ZPQ1VTRUQiLGUuTk9ERV9BVVhJTElBUllfRVhUUkFDVElPTl9DSEFOR0VEPSJOT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQiLGUuR1JBUEhfVFlQRV9DSEFOR0VEPSJHUkFQSF9UWVBFX0NIQU5HRUQiLGUuVFJBQ0VfSU5QVVRfTU9ERV9UT0dHTEVEPSJUUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUQiLGUuTk9ERV9DT0xPUl9NT0RFX0NIQU5HRUQ9Ik5PREVfQ09MT1JfTU9ERV9DSEFOR0VEIixlLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTT0iVVBMT0FERURfR1JBUEhfRlJPTV9GSUxFU1lTVEVNIn0pKGNzdHx8KGNzdD17fSkpO3ZhciBqcj1LbChLbCh7fSxsc3QpLGNzdCk7dmFyIEpzZT1FZSh6bHQoKSwxKSxwbj1FZShPZSgpLDEpO3ZhciBGczsoZnVuY3Rpb24oZSl7ZS5PUF9HUkFQSD0ib3BfZ3JhcGgiLGUuQ09OQ0VQVFVBTF9HUkFQSD0iY29uY2VwdHVhbF9ncmFwaCIsZS5QUk9GSUxFPSJwcm9maWxlIn0pKEZzfHwoRnM9e30pKTt2YXIgeWU9e05vZGU6e0NPTlRBSU5FUjoibm9kZXMiLEdST1VQOiJub2RlIixTSEFQRToibm9kZXNoYXBlIixDT0xPUl9UQVJHRVQ6Im5vZGVjb2xvcnRhcmdldCIsTEFCRUw6Im5vZGVsYWJlbCIsQlVUVE9OX0NPTlRBSU5FUjoiYnV0dG9uY29udGFpbmVyIixCVVRUT05fQ0lSQ0xFOiJidXR0b25jaXJjbGUiLEVYUEFORF9CVVRUT046ImV4cGFuZGJ1dHRvbiIsQ09MTEFQU0VfQlVUVE9OOiJjb2xsYXBzZWJ1dHRvbiJ9LEVkZ2U6e0NPTlRBSU5FUjoiZWRnZXMiLEdST1VQOiJlZGdlIixMSU5FOiJlZGdlbGluZSIsUkVGRVJFTkNFX0VER0U6InJlZmVyZW5jZWVkZ2UiLFJFRl9MSU5FOiJyZWZsaW5lIixTRUxFQ1RBQkxFOiJzZWxlY3RhYmxlZWRnZSIsU0VMRUNURUQ6InNlbGVjdGVkZWRnZSIsU1RSVUNUVVJBTDoic3RydWN0dXJhbCJ9LEFubm90YXRpb246e09VVEJPWDoib3V0LWFubm90YXRpb25zIixJTkJPWDoiaW4tYW5ub3RhdGlvbnMiLEdST1VQOiJhbm5vdGF0aW9uIixOT0RFOiJhbm5vdGF0aW9uLW5vZGUiLEVER0U6ImFubm90YXRpb24tZWRnZSIsQ09OVFJPTF9FREdFOiJhbm5vdGF0aW9uLWNvbnRyb2wtZWRnZSIsTEFCRUw6ImFubm90YXRpb24tbGFiZWwiLEVMTElQU0lTOiJhbm5vdGF0aW9uLWVsbGlwc2lzIn0sU2NlbmU6e0dST1VQOiJzY2VuZSIsQ09SRToiY29yZSIsRlVOQ1RJT05fTElCUkFSWToiZnVuY3Rpb24tbGlicmFyeSIsSU5FWFRSQUNUOiJpbi1leHRyYWN0IixPVVRFWFRSQUNUOiJvdXQtZXh0cmFjdCJ9LFN1YnNjZW5lOntHUk9VUDoic3Vic2NlbmUifSxPUE5PREU6Im9wIixNRVRBTk9ERToibWV0YSIsU0VSSUVTTk9ERToic2VyaWVzIixCUklER0VOT0RFOiJicmlkZ2UiLEVMTElQU0lTTk9ERToiZWxsaXBzaXMifSxaND17RWRnZTp7TEFCRUw6My41fSxBbm5vdGF0aW9uOntMQUJFTDo1fSxOb2RlOntFWFBBTkRFRF9MQUJFTDo5LFNFUklFU19MQUJFTDo4LE9QX0xBQkVMOjYsSEVBTFRIX1BJTExfU1RBVF9MQUJFTDo0fX0sanU9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtmdW5jdGlvbiBtMChlLHQscil7bGV0IG49ZS5ub2RlKCkuY2hpbGROb2Rlcztmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IG89bltpXTtpZihvLnRhZ05hbWU9PT10KXtpZihyIGluc3RhbmNlb2YgQXJyYXkpe2xldCBhPSEwO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKWE9YSYmby5jbGFzc0xpc3QuY29udGFpbnMocltzXSk7aWYoYSlyZXR1cm4gSHQobyl9ZWxzZSBpZighcnx8by5jbGFzc0xpc3QuY29udGFpbnMocikpcmV0dXJuIEh0KG8pfX1yZXR1cm4gSHQobnVsbCl9ZnVuY3Rpb24gUG4oZSx0LHIsbil7bGV0IGk9bTAoZSx0LHIpO2lmKCFpLmVtcHR5KCkpcmV0dXJuIGk7bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdCk7aWYociBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgYT0wO2E8ci5sZW5ndGg7YSsrKW8uY2xhc3NMaXN0LmFkZChyW2FdKTtlbHNlIG8uY2xhc3NMaXN0LmFkZChyKTtyZXR1cm4gbj9lLm5vZGUoKS5pbnNlcnRCZWZvcmUobyxuKTplLm5vZGUoKS5hcHBlbmRDaGlsZChvKSxIdChvKS5kYXR1bShlLmRhdHVtKCkpfXZhciBLUz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnRvdGFsQnl0ZXM9MCx0aGlzLm91dHB1dFNpemU9dH1hZGRFeGVjdXRpb25UaW1lKHQscil7dGhpcy5zdGFydFRpbWUhPW51bGw/dGhpcy5zdGFydFRpbWU9TWF0aC5taW4odGhpcy5zdGFydFRpbWUsdCk6dGhpcy5zdGFydFRpbWU9dCx0aGlzLmVuZFRpbWUhPW51bGw/dGhpcy5lbmRUaW1lPU1hdGgubWF4KHRoaXMuZW5kVGltZSxyKTp0aGlzLmVuZFRpbWU9cn1hZGRCeXRlc0FsbG9jYXRpb24odCl7dGhpcy50b3RhbEJ5dGVzIT1udWxsP3RoaXMudG90YWxCeXRlcz1NYXRoLm1heCh0aGlzLnRvdGFsQnl0ZXMsdCk6dGhpcy50b3RhbEJ5dGVzPXR9Y29tYmluZSh0KXt0LnRvdGFsQnl0ZXMhPW51bGwmJih0aGlzLnRvdGFsQnl0ZXMrPXQudG90YWxCeXRlcyksdC5nZXRUb3RhbE1pY3JvcygpIT1udWxsJiZ0aGlzLmFkZEV4ZWN1dGlvblRpbWUodC5zdGFydFRpbWUsdC5lbmRUaW1lKX1nZXRUb3RhbE1pY3Jvcygpe3JldHVybiB0aGlzLnN0YXJ0VGltZT09bnVsbHx8dGhpcy5lbmRUaW1lPT1udWxsP251bGw6dGhpcy5lbmRUaW1lLXRoaXMuc3RhcnRUaW1lfX0sSjQ9Ljc1LFE0PTEyLCRscj0uMyxLbHI9WzEsNWU2XSxxc2U9S18oKS5leHBvbmVudCgkbHIpLmRvbWFpbihLbHIpLnJhbmdlKFtKNCxRNF0pLmNsYW1wKCEwKTt2YXIgWlM9RWUoT2UoKSwxKTt2YXIgV3NlPTIwO2Z1bmN0aW9uIFpscihlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgidGltaW5nSWQiKX1mdW5jdGlvbiBQbyhlKXtabHIoZSk/KFlLdCxlLnRpbWluZ0lkLGUuZXZlbnRWYWx1ZSx2b2lkIDApOihXS3QsZS5hY3Rpb25JZCxlLmV2ZW50TGFiZWwsdm9pZCAwKX1mdW5jdGlvbiBSZChlLHQscil7bGV0IG49RGF0ZS5ub3coKSxpPXQoKSxvPURhdGUubm93KCktbjtyZXR1cm4gY29uc29sZS5sb2coZSwiOiIsbywibXMiKSxyJiZQbyh7dGltaW5nSWQ6cixldmVudFZhbHVlOm99KSxpfWZ1bmN0aW9uIHJQKGUpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKHQpe2Uuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOmUucHJvZ3Jlc3MudmFsdWUsbXNnOnR9KX0sdXBkYXRlUHJvZ3Jlc3M6ZnVuY3Rpb24odCl7ZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSt0LG1zZzplLnByb2dyZXNzLm1zZ30pfSxyZXBvcnRFcnJvcjpmdW5jdGlvbih0LHIpe2NvbnNvbGUuZXJyb3Ioci5zdGFjayksZS5zZXQoInByb2dyZXNzIix7dmFsdWU6ZS5wcm9ncmVzcy52YWx1ZSxtc2c6dCxlcnJvcjohMH0pfX19ZnVuY3Rpb24gSlMoZSx0LHIpe3JldHVybntzZXRNZXNzYWdlOmZ1bmN0aW9uKG4pe2Uuc2V0TWVzc2FnZShyKyI6ICIrbil9LHVwZGF0ZVByb2dyZXNzOmZ1bmN0aW9uKG4pe2UudXBkYXRlUHJvZ3Jlc3Mobip0LzEwMCl9LHJlcG9ydEVycm9yOmZ1bmN0aW9uKG4saSl7ZS5yZXBvcnRFcnJvcihyKyI6ICIrbixpKX19fWZ1bmN0aW9uIFlzZShlLHQscixuLGkpe24uc2V0TWVzc2FnZShlKTt0cnl7bGV0IG89UmQoZSxyLGkpO3JldHVybiBuLnVwZGF0ZVByb2dyZXNzKHQpLG99Y2F0Y2gobyl7cmV0dXJuIG4ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2UsbyksbnVsbH19ZnVuY3Rpb24gZXYoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntuLnNldE1lc3NhZ2UoZSksc2V0VGltZW91dChmdW5jdGlvbigpe3RyeXtsZXQgcz1SZChlLHIsaSk7bi51cGRhdGVQcm9ncmVzcyh0KSxvKHMpfWNhdGNoKHMpe24ucmVwb3J0RXJyb3IoIkZhaWxlZCAiK2Uscyl9fSxXc2UpfSl9ZnVuY3Rpb24gZEgoZSx0LHIsbixpKXtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntsZXQgcz1mdW5jdGlvbihsKXtuLnJlcG9ydEVycm9yKCJGYWlsZWQgIitlLGwpLGEobCl9O24uc2V0TWVzc2FnZShlKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dHJ5e2xldCBsPURhdGUubm93KCk7cigpLnRoZW4oZnVuY3Rpb24oYyl7bGV0IHU9RGF0ZS5ub3coKS1sO2NvbnNvbGUubG9nKGUsIjoiLHUsIm1zIiksbi51cGRhdGVQcm9ncmVzcyh0KSxQbyh7dGltaW5nSWQ6aSxldmVudFZhbHVlOnV9KSxvKGMpfSkuY2F0Y2gocyl9Y2F0Y2gobCl7cyhsKX19LFdzZSl9KX1mdW5jdGlvbiBqc2UoZSl7cmV0dXJuIGUucmVwbGFjZSgvKFs6LlxbXF0sL1xcXChcKV0pL2csIlxcJDEiKX12YXIgblA9W3tzeW1ib2w6IkIifSx7c3ltYm9sOiJLQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiTUIiLG51bVVuaXRzOjEwMjR9LHtzeW1ib2w6IkdCIixudW1Vbml0czoxMDI0fSx7c3ltYm9sOiJUQiIsbnVtVW5pdHM6MTAyNH0se3N5bWJvbDoiUEIiLG51bVVuaXRzOjEwMjR9XSxpUD1be3N5bWJvbDoiXHhCNXMifSx7c3ltYm9sOiJtcyIsbnVtVW5pdHM6MWUzfSx7c3ltYm9sOiJzIixudW1Vbml0czoxZTN9LHtzeW1ib2w6Im1pbiIsbnVtVW5pdHM6NjB9LHtzeW1ib2w6ImhyIixudW1Vbml0czo2MH0se3N5bWJvbDoiZGF5cyIsbnVtVW5pdHM6MjR9XTtmdW5jdGlvbiBOZChlLHQscj0wKXtyZXR1cm4gcisxPHQubGVuZ3RoJiZlPj10W3IrMV0ubnVtVW5pdHM/TmQoZS90W3IrMV0ubnVtVW5pdHMsdCxyKzEpOk51bWJlcihlLnRvUHJlY2lzaW9uKDMpKSsiICIrdFtyXS5zeW1ib2x9ZnVuY3Rpb24gbUgoZSl7cmV0dXJuISEoZSYmKGUudG90YWxCeXRlcz4wfHxlLmdldFRvdGFsTWljcm9zKCk+MHx8ZS5vdXRwdXRTaXplKSl9ZnVuY3Rpb24gRmx0KGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuIGU7bGV0IHQ9MCxyPTAsbj1aUy5taW4oWlMubWFwKGUsaT0+aS5sZW5ndGgpKTtmb3IoOzspe3QrKztsZXQgaT1aUy5tYXAoZSxhPT5hLnN1YnN0cmluZygwLHQpKTtpZihpLmV2ZXJ5KChhLHMpPT5zPT09MD8hMDphPT09aVtzLTFdKSl7aWYodD49bilyZXR1cm4gZTtyPXR9ZWxzZSBicmVha31yZXR1cm4gWlMubWFwKGUsaT0+aS5zdWJzdHJpbmcocikpfWZ1bmN0aW9uIFhzZShlKXt2YXIgdD0rbmV3IERhdGUtK25ldyBEYXRlKGUvMWUzKTtyZXR1cm4gdDwzZTQ/Imp1c3Qgbm93Ijp0PDZlND9NYXRoLmZsb29yKHQvMWUzKSsiIHNlY29uZHMgYWdvIjp0PDEyZTQ/ImEgbWludXRlIGFnbyI6dDwzNmU1P01hdGguZmxvb3IodC82ZTQpKyIgbWludXRlcyBhZ28iOk1hdGguZmxvb3IodC8zNmU1KT09MT8iYW4gaG91ciBhZ28iOnQ8ODY0ZTU/TWF0aC5mbG9vcih0LzM2ZTUpKyIgaG91cnMgYWdvIjp0PDE3MjhlNT8ieWVzdGVyZGF5IjpNYXRoLmZsb29yKHQvODY0ZTUpKyIgZGF5cyBhZ28ifXZhciBKbHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksZVA9SmxyLmdldENvbnRleHQoIjJkIik7ZnVuY3Rpb24gR3NlKGUsdCl7cmV0dXJuIGVQJiYoZVAuZm9udD1gJHt0fXB4IFJvYm90bywgc2Fucy1zZXJpZmApLGVQPT1udWxsP3ZvaWQgMDplUC5tZWFzdXJlVGV4dChlKS53aWR0aH1mdW5jdGlvbiAkc2UoZSx0LHIpe2lmKCFlKXJldHVybiIiO2lmKEdzZShlLHQpPD1yKXJldHVybiBlO2xldCBuPTAsaT1lLmxlbmd0aDtmb3IoO248aTspe2xldCBvPW4rTWF0aC5yb3VuZCgoaS1uKS8yKSxhPWUuc2xpY2UoMCxvKSsiXHUyMDI2IjtHc2UoYSx0KTw9cj9uPW86aT1vLTF9cmV0dXJuIG49PT0wP2VbMF06ZS5zbGljZSgwLG4pKyJcdTIwMjYifXZhciBwSD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnM9bmV3IE1hcH1nZXRMaXN0ZW5lcnModCl7cmV0dXJuIHRoaXMuZXZlbnRUeXBlVG9MaXN0ZW5lcnMuaGFzKHQpfHx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLnNldCh0LFtdKSx0aGlzLmV2ZW50VHlwZVRvTGlzdGVuZXJzLmdldCh0KX1hZGRMaXN0ZW5lcih0LHIpe3ZhciBuOyhuPXRoaXMuZ2V0TGlzdGVuZXJzKHQpKT09bnVsbHx8bi5wdXNoKHIpfXJlbW92ZUxpc3RlbmVyKHQscil7dmFyIGk7bGV0IG49KGk9dGhpcy5nZXRMaXN0ZW5lcnModCkpPT1udWxsP3ZvaWQgMDppLmZpbHRlcihvPT5vIT09cik7dGhpcy5ldmVudFR5cGVUb0xpc3RlbmVycy5zZXQodCxuKX1kaXNwYXRjaEV2ZW50KHQscil7Zm9yKGxldCBuIG9mIHRoaXMuZ2V0TGlzdGVuZXJzKHQpKW4ocil9fTt2YXIgQWw9Ii8iLHFjPSJfX3Jvb3RfXyIsU2E9Il9fZnVuY3Rpb25fbGlicmFyeV9fIixRc2U9Il90b29fbGFyZ2VfYXR0cnMiO3ZhciB0bGU9Ii0tIixnMDsoZnVuY3Rpb24oZSl7ZVtlLkZVTEw9MF09IkZVTEwiLGVbZS5FTUJFRERFRD0xXT0iRU1CRURERUQiLGVbZS5NRVRBPTJdPSJNRVRBIixlW2UuU0VSSUVTPTNdPSJTRVJJRVMiLGVbZS5DT1JFPTRdPSJDT1JFIixlW2UuU0hBRE9XPTVdPSJTSEFET1ciLGVbZS5CUklER0U9Nl09IkJSSURHRSIsZVtlLkVER0U9N109IkVER0UifSkoZzB8fChnMD17fSkpO3ZhciBqdDsoZnVuY3Rpb24oZSl7ZVtlLk1FVEE9MF09Ik1FVEEiLGVbZS5PUD0xXT0iT1AiLGVbZS5TRVJJRVM9Ml09IlNFUklFUyIsZVtlLkJSSURHRT0zXT0iQlJJREdFIixlW2UuRUxMSVBTSVM9NF09IkVMTElQU0lTIn0pKGp0fHwoanQ9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5JTkNMVURFPTBdPSJJTkNMVURFIixlW2UuRVhDTFVERT0xXT0iRVhDTFVERSIsZVtlLlVOU1BFQ0lGSUVEPTJdPSJVTlNQRUNJRklFRCJ9KSh1cnx8KHVyPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuR1JPVVA9MF09IkdST1VQIixlW2UuVU5HUk9VUD0xXT0iVU5HUk9VUCJ9KShpc3x8KGlzPXt9KSk7dmFyIFFscj0iX291dHB1dF9zaGFwZXMiLHRjcj0iX1hsYUNsdXN0ZXIiLFh1PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5ub2Rlcz17fSx0aGlzLmVkZ2VzPVtdfX0sZ0g9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy50eXBlPWp0LkVMTElQU0lTLHRoaXMuaXNHcm91cE5vZGU9ITEsdGhpcy5jYXJkaW5hbGl0eT0xLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuc3RhdHM9bnVsbCx0aGlzLnNldE51bU1vcmVOb2Rlcyh0KSx0aGlzLmluY2x1ZGU9dXIuVU5TUEVDSUZJRUR9c2V0TnVtTW9yZU5vZGVzKHQpe3RoaXMubnVtTW9yZU5vZGVzPXQsdGhpcy5uYW1lPSIuLi4gIit0KyIgbW9yZSJ9fSxfMD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm9wPXQub3AsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmRldmljZT10LmRldmljZSx0aGlzLmF0dHI9dC5hdHRyLHRoaXMuaW5wdXRzPWljcih0LmlucHV0KSx0aGlzLm91dHB1dFNoYXBlcz1lY3IodC5hdHRyKSx0aGlzLnhsYUNsdXN0ZXI9cmNyKHQuYXR0ciksdGhpcy5jb21wYXRpYmxlPSExLHRoaXMudHlwZT1qdC5PUCx0aGlzLmlzR3JvdXBOb2RlPSExLHRoaXMuY2FyZGluYWxpdHk9MSx0aGlzLmluRW1iZWRkaW5ncz1bXSx0aGlzLm91dEVtYmVkZGluZ3M9W10sdGhpcy5wYXJlbnROb2RlPW51bGwsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVELHRoaXMub3duaW5nU2VyaWVzPW51bGx9fTtmdW5jdGlvbiBzUChlLHQ9e30pe3JldHVybiBuZXcgb1AoZSx0KX1mdW5jdGlvbiBlbGUoZSx0LHIpe3BuLmVhY2goZS5ub2RlcyxuPT57bi5zdGF0cz1udWxsfSkscG4uZWFjaCh0LmRldl9zdGF0cyxuPT57ciYmIXJbbi5kZXZpY2VdfHxwbi5lYWNoKG4ubm9kZV9zdGF0cyxpPT57bGV0IG89aS5ub2RlX25hbWUgaW4gZS5ub2Rlcz9pLm5vZGVfbmFtZTphUChpLm5vZGVfbmFtZSk7aWYoIShvIGluIGUubm9kZXMpKXJldHVybjtsZXQgYT0wO2kubWVtb3J5JiZwbi5lYWNoKGkubWVtb3J5LGw9PntsLnRvdGFsX2J5dGVzJiYobC50b3RhbF9ieXRlcz4wP2ErPU51bWJlcihsLnRvdGFsX2J5dGVzKTpjb25zb2xlLmxvZygiaWdub3JpbmcgbmVnYXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gZm9yICIrbykpfSk7bGV0IHM9bnVsbDtpLm91dHB1dCYmKHM9cG4ubWFwKGkub3V0cHV0LGw9PnBuLm1hcChsLnRlbnNvcl9kZXNjcmlwdGlvbi5zaGFwZS5kaW0sYz0+TnVtYmVyKGMuc2l6ZSkpKSksZS5ub2Rlc1tvXS5kZXZpY2U9bi5kZXZpY2UsZS5ub2Rlc1tvXS5zdGF0cz09bnVsbCYmKGUubm9kZXNbb10uc3RhdHM9bmV3IEtTKHMpKSxlLm5vZGVzW29dLnN0YXRzLmFkZEJ5dGVzQWxsb2NhdGlvbihhKSxpLmFsbF9lbmRfcmVsX21pY3JvcyYmKGkuYWxsX2VuZF9yZWxfbWljcm9zPjA/ZS5ub2Rlc1tvXS5zdGF0cy5hZGRFeGVjdXRpb25UaW1lKGkuYWxsX3N0YXJ0X21pY3JvcyxpLmFsbF9zdGFydF9taWNyb3MraS5hbGxfZW5kX3JlbF9taWNyb3MpOmNvbnNvbGUubG9nKCJpZ25vcmluZyBuZWdhdGl2ZSBydW50aW1lIGZvciAiK28pKX0pfSl9dmFyIG9QPWNsYXNze2NvbnN0cnVjdG9yKHQscj17fSl7dGhpcy5uYW1lPXQsdGhpcy50eXBlPWp0Lk1FVEEsdGhpcy5kZXB0aD0xLHRoaXMuaXNHcm91cE5vZGU9ITAsdGhpcy5jYXJkaW5hbGl0eT0wLHRoaXMubWV0YWdyYXBoPWUzKHQsZzAuTUVUQSxyKSx0aGlzLmJyaWRnZWdyYXBoPW51bGwsdGhpcy5vcEhpc3RvZ3JhbT17fSx0aGlzLmRldmljZUhpc3RvZ3JhbT17fSx0aGlzLnhsYUNsdXN0ZXJIaXN0b2dyYW09e30sdGhpcy5jb21wYXRpYmlsaXR5SGlzdG9ncmFtPXtjb21wYXRpYmxlOjAsaW5jb21wYXRpYmxlOjB9LHRoaXMudGVtcGxhdGVJZD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuaGFzTm9uQ29udHJvbEVkZ2VzPSExLHRoaXMuaW5jbHVkZT11ci5VTlNQRUNJRklFRCx0aGlzLmFzc29jaWF0ZWRGdW5jdGlvbj0iIn1nZXRGaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMubWV0YWdyYXBoLm5vZGUodGhpcy5tZXRhZ3JhcGgubm9kZXMoKVswXSl9Z2V0Um9vdE9wKCl7bGV0IHQ9dGhpcy5uYW1lLnNwbGl0KCIvIikscj10aGlzLm5hbWUrIi8oIit0W3QubGVuZ3RoLTFdKyIpIjtyZXR1cm4gdGhpcy5tZXRhZ3JhcGgubm9kZShyKX1sZWF2ZXMoKXtsZXQgdD1bXSxyPVt0aGlzXSxuO2Zvcig7ci5sZW5ndGg7KXtsZXQgaT1yLnNoaWZ0KCk7aSE9bnVsbCYmaS5pc0dyb3VwTm9kZT8obj1pLm1ldGFncmFwaCxwbi5lYWNoKG4ubm9kZXMoKSxvPT5yLnB1c2gobi5ub2RlKG8pKSkpOnQucHVzaChpPT1udWxsP3ZvaWQgMDppLm5hbWUpfXJldHVybiB0fX07ZnVuY3Rpb24gVmx0KGUsdCl7cmV0dXJuIG5ldyBxZihlLHQpfXZhciBxZj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMudj10LHRoaXMudz1yLHRoaXMuYmFzZUVkZ2VMaXN0PVtdLHRoaXMuaW5ib3VuZD1udWxsLHRoaXMubnVtUmVndWxhckVkZ2VzPTAsdGhpcy5udW1Db250cm9sRWRnZXM9MCx0aGlzLm51bVJlZkVkZ2VzPTAsdGhpcy50b3RhbFNpemU9MH1hZGRCYXNlRWRnZSh0LHIpe3RoaXMuYmFzZUVkZ2VMaXN0LnB1c2godCksdC5pc0NvbnRyb2xEZXBlbmRlbmN5P3RoaXMubnVtQ29udHJvbEVkZ2VzKz0xOnRoaXMubnVtUmVndWxhckVkZ2VzKz0xLHQuaXNSZWZlcmVuY2VFZGdlJiYodGhpcy5udW1SZWZFZGdlcys9MSksdGhpcy50b3RhbFNpemUrPXFmLmNvbXB1dGVTaXplT2ZFZGdlKHQsciksci5tYXhNZXRhRWRnZVNpemU9TWF0aC5tYXgoci5tYXhNZXRhRWRnZVNpemUsdGhpcy50b3RhbFNpemUpfXN0YXRpYyBjb21wdXRlU2l6ZU9mRWRnZSh0LHIpe2xldCBuPXIubm9kZSh0LnYpO2lmKCFuLm91dHB1dFNoYXBlcylyZXR1cm4gMTtyLmhhc1NoYXBlSW5mbz0hMDtsZXQgaT1PYmplY3Qua2V5cyhuLm91dHB1dFNoYXBlcykubWFwKG89Pm4ub3V0cHV0U2hhcGVzW29dKS5tYXAobz0+bz09bnVsbD8xOm8ucmVkdWNlKChhLHMpPT4ocz09PS0xJiYocz0xKSxhKnMpLDEpKTtyZXR1cm4gcG4uc3VtKGkpfX07ZnVuY3Rpb24gUVMoZSx0LHIsbixpLG8pe3JldHVybiBuZXcgSGx0KGUsdCxyLG4saSxvKX1mdW5jdGlvbiB0MyhlLHQscixuLGkpe2xldCBvPXR5cGVvZiBuIT0idW5kZWZpbmVkIiYmdHlwZW9mIGkhPSJ1bmRlZmluZWQiPyJbIituKyItIitpKyJdIjoiIyIsYT1lK28rdDtyZXR1cm4ocj9yKyIvIjoiIikrYX12YXIgSGx0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLm5hbWU9b3x8dDModCxyLG4pLHRoaXMudHlwZT1qdC5TRVJJRVMsdGhpcy5oYXNMb29wPSExLHRoaXMucHJlZml4PXQsdGhpcy5zdWZmaXg9cix0aGlzLmNsdXN0ZXJJZD1pLHRoaXMuaWRzPVtdLHRoaXMucGFyZW50PW4sdGhpcy5pc0dyb3VwTm9kZT0hMCx0aGlzLmNhcmRpbmFsaXR5PTAsdGhpcy5tZXRhZ3JhcGg9ZTMobyxnMC5TRVJJRVMsYSksdGhpcy5icmlkZ2VncmFwaD1udWxsLHRoaXMucGFyZW50Tm9kZT1udWxsLHRoaXMuZGV2aWNlSGlzdG9ncmFtPXt9LHRoaXMueGxhQ2x1c3Rlckhpc3RvZ3JhbT17fSx0aGlzLmNvbXBhdGliaWxpdHlIaXN0b2dyYW09e2NvbXBhdGlibGU6MCxpbmNvbXBhdGlibGU6MH0sdGhpcy5oYXNOb25Db250cm9sRWRnZXM9ITEsdGhpcy5pbmNsdWRlPXVyLlVOU1BFQ0lGSUVEfX07ZnVuY3Rpb24gZWNyKGUpe2xldCB0PW51bGw7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldHtrZXk6bix2YWx1ZTppfT1lW3JdO2lmKG49PT1RbHIpe2lmKCFpLmxpc3R8fCFpLmxpc3Quc2hhcGUpcmV0dXJuIG51bGw7bGV0IG89aS5saXN0LnNoYXBlLm1hcChhPT5hLnVua25vd25fcmFuaz9udWxsOmEuZGltPT1udWxsfHxhLmRpbS5sZW5ndGg9PT0xJiZhLmRpbVswXS5zaXplPT1udWxsP1tdOmEuZGltLm1hcChzPT5zLnNpemUpKTtyZXR1cm4gZS5zcGxpY2UociwxKSxvfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiByY3IoZSl7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspaWYoZVt0XS5rZXk9PT10Y3IpcmV0dXJuIGVbdF0udmFsdWUuc3x8bnVsbDtyZXR1cm4gbnVsbH12YXIgbmNyPS9eKFteOl0rKTooKFx3Kzp8KVxkKykkLztmdW5jdGlvbiBpY3IoZSl7bGV0IHQ9W10scj1udWxsO2ZvcihsZXQgbiBvZiBlfHxbXSl7bGV0IGk9bi5zdGFydHNXaXRoKCJeIik7aSYmKG49bi5zdWJzdHJpbmcoMSkpO2xldCBvPW4sYT0iMCIscz1uLmluY2x1ZGVzKCI6IikmJm4ubWF0Y2gobmNyKTtzJiYobz1zWzFdLGE9c1syXSksciE9PW8mJihyPW8sdC5wdXNoKHtuYW1lOm8sb3V0cHV0VGVuc29yS2V5OmEsaXNDb250cm9sRGVwZW5kZW5jeTppfSkpfXJldHVybiB0fWZ1bmN0aW9uIEJsdChlLHQscixuLGksbyl7aWYodD09PXIubmFtZSlyZXR1cm47bGV0IGE9aS5yZWZFZGdlc1tyLm9wKyIgIitvXT09PSEwO2UuZWRnZXMucHVzaCh7djp0LHc6ci5uYW1lLG91dHB1dFRlbnNvcktleTpuLm91dHB1dFRlbnNvcktleSxpc0NvbnRyb2xEZXBlbmRlbmN5Om4uaXNDb250cm9sRGVwZW5kZW5jeSxpc1JlZmVyZW5jZUVkZ2U6YX0pfXZhciBybGU9e2VuYWJsZUVtYmVkZGluZzohMCxpbkVtYmVkZGluZ1R5cGVzOlsiQ29uc3QiXSxvdXRFbWJlZGRpbmdUeXBlczpbIl5bYS16QS1aXStTdW1tYXJ5JCJdLHJlZkVkZ2VzOnsiQXNzaWduIDAiOiEwLCJBc3NpZ25BZGQgMCI6ITAsIkFzc2lnblN1YiAwIjohMCwiYXNzaWduIDAiOiEwLCJhc3NpZ25fYWRkIDAiOiEwLCJhc3NpZ25fc3ViIDAiOiEwLCJjb3VudF91cF90byAwIjohMCwiU2NhdHRlckFkZCAwIjohMCwiU2NhdHRlclN1YiAwIjohMCwiU2NhdHRlclVwZGF0ZSAwIjohMCwic2NhdHRlcl9hZGQgMCI6ITAsInNjYXR0ZXJfc3ViIDAiOiEwLCJzY2F0dGVyX3VwZGF0ZSAwIjohMH19O2Z1bmN0aW9uIG5sZShlLHQscil7bGV0IG49e30saT17fSxvPXt9LGE9S3NlKHQuaW5FbWJlZGRpbmdUeXBlcykscz1Lc2UodC5vdXRFbWJlZGRpbmdUeXBlcyksbD1bXSxjPWUubm9kZSx1PW5ldyBBcnJheShjLmxlbmd0aCk7cmV0dXJuIGV2KCJOb3JtYWxpemluZyBuYW1lcyIsMzAsKCk9PntsZXQgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLGY9MCxwPWc9PntsZXQgXz1uZXcgXzAoZyk7cmV0dXJuIGEoXyk/KGwucHVzaChfLm5hbWUpLG5bXy5uYW1lXT1fLF8pOnMoXyk/KGwucHVzaChfLm5hbWUpLGlbXy5uYW1lXT1fLHBuLmVhY2goXy5pbnB1dHMseT0+e2xldCB4PXkubmFtZTtvW3hdPW9beF18fFtdLG9beF0ucHVzaChfKX0pLF8pOihoW2ZdPV8sdVtmXT1fLm5hbWUsZisrLF8pfTtwbi5lYWNoKGMscCk7bGV0IGQ9Zz0+e2xldCBfPVNhK2cuc2lnbmF0dXJlLm5hbWU7aWYocCh7bmFtZTpfLGlucHV0OltdLGRldmljZToiIixvcDoiIixhdHRyOltdfSksZy5zaWduYXR1cmUuaW5wdXRfYXJnKXtsZXQgYj0wLFM9Qz0+e2xldCBQPXAoe25hbWU6XytBbCtDLm5hbWUsaW5wdXQ6W10sZGV2aWNlOiIiLG9wOiJpbnB1dF9hcmciLGF0dHI6W3trZXk6IlQiLHZhbHVlOnt0eXBlOkMudHlwZX19XX0pO1AuZnVuY3Rpb25JbnB1dEluZGV4PWIsYisrfTtnLnNpZ25hdHVyZS5pbnB1dF9hcmcubmFtZT9TKGcuc2lnbmF0dXJlLmlucHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5pbnB1dF9hcmcsUyl9bGV0IHk9MCx4PXt9O2lmKGcuc2lnbmF0dXJlLm91dHB1dF9hcmcpe2xldCBiPVM9Pnt4W18rQWwrUy5uYW1lXT15LHkrK307Zy5zaWduYXR1cmUub3V0cHV0X2FyZy5uYW1lP2IoZy5zaWduYXR1cmUub3V0cHV0X2FyZyk6cG4uZWFjaChnLnNpZ25hdHVyZS5vdXRwdXRfYXJnLGIpfXBuLmVhY2goZy5ub2RlX2RlZixiPT57Yi5uYW1lPV8rIi8iK2IubmFtZSx0eXBlb2YgYi5pbnB1dD09InN0cmluZyImJihiLmlucHV0PVtiLmlucHV0XSk7bGV0IFM9cChiKTtwbi5pc051bWJlcih4W2IubmFtZV0pJiYoUy5mdW5jdGlvbk91dHB1dEluZGV4PXhbYi5uYW1lXSkscG4uZWFjaChTLmlucHV0cyxDPT57Qy5uYW1lPV8rQWwrQy5uYW1lfSl9KX07cmV0dXJuIGUubGlicmFyeSYmZS5saWJyYXJ5LmZ1bmN0aW9uJiZwbi5lYWNoKGUubGlicmFyeS5mdW5jdGlvbixkKSxoLnNwbGljZShmKSx1LnNwbGljZShmKSxofSxyLGpyLk5PUk1BTElaSU5HX05BTUVTKS50aGVuKGg9PmV2KCJCdWlsZGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUiLDcwLCgpPT57bGV0IGY9b2NyKHUsbCkscD1uZXcgWHU7cmV0dXJuIHBuLmVhY2goaCxkPT57bGV0IGc9ZltkLm5hbWVdfHxkLm5hbWU7cC5ub2Rlc1tnXT1kLGQubmFtZSBpbiBvJiYoZC5vdXRFbWJlZGRpbmdzPW9bZC5uYW1lXSxwbi5lYWNoKGQub3V0RW1iZWRkaW5ncyxfPT57Xy5uYW1lPWZbXy5uYW1lXXx8Xy5uYW1lfSkpLGQubmFtZT1nfSkscG4uZWFjaChoLGQ9Pntwbi5lYWNoKGQuaW5wdXRzLChnLF8pPT57bGV0IHk9Zy5uYW1lO2lmKHkgaW4gbil7bGV0IHg9blt5XTtkLmluRW1iZWRkaW5ncy5wdXNoKHgpO2ZvcihsZXQgYiBvZiB4LmlucHV0cylCbHQocCxmW2IubmFtZV18fGIubmFtZSxkLGIsdCxfKX1lbHNlIGlmKHkgaW4gaSl7bGV0IHg9aVt5XTtmb3IobGV0IGIgb2YgeC5pbnB1dHMpQmx0KHAsZltiLm5hbWVdfHxiLm5hbWUsZCxnLHQsXyl9ZWxzZSBCbHQocCxmW3ldfHx5LGQsZyx0LF8pfSl9KSxwbi5lYWNoKG4sKGQsZyk9PntkLm5hbWU9ZltkLm5hbWVdfHxkLm5hbWV9KSxwfSxyLGpyLkJVSUxEX1NMSU1fR1JBUEgpKX1mdW5jdGlvbiBlMyhlLHQscj17fSl7bGV0IG49bmV3IEpzZS5ncmFwaGxpYi5HcmFwaChyKTtyZXR1cm4gbi5zZXRHcmFwaCh7bmFtZTplLHJhbmtkaXI6ci5yYW5rZGlyfHwiQlQiLHR5cGU6dH0pLG59ZnVuY3Rpb24gS3NlKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG49bmV3IFJlZ0V4cChlW3JdKTtpZih0eXBlb2YgdC5vcD09InN0cmluZyImJnQub3AubWF0Y2gobikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIGFQKGUpe2xldCB0PWUuc3BsaXQoQWwpO3JldHVybiBlK0FsKyIoIit0W3QubGVuZ3RoLTFdKyIpIn1mdW5jdGlvbiBvY3IoZSx0KXtsZXQgcj17fSxuPXt9O2Uuc29ydCgpO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGgtMTsrK2kpe2xldCBvPWVbaV07cG4uZWFjaChsUChvKS5zbGljZSgwLC0xKSxhPT57blthXT0hMH0pO2ZvcihsZXQgYT1pKzE7YTxlLmxlbmd0aDsrK2Epe2xldCBzPWVbYV07aWYocG4uc3RhcnRzV2l0aChzLG8pKXtpZihzLmxlbmd0aD5vLmxlbmd0aCYmcy5jaGFyQXQoby5sZW5ndGgpPT09QWwpe3Jbb109YVAobyk7YnJlYWt9fWVsc2UgYnJlYWt9fXJldHVybiBwbi5lYWNoKHQsaT0+e2kgaW4gbiYmKHJbaV09YVAoaSkpfSkscn1mdW5jdGlvbiBac2UoZSl7bGV0IHQ9ZS5ub2RlcygpLm1hcChmdW5jdGlvbihyKXt2YXIgbjtyZXR1cm4obj1lLm5laWdoYm9ycyhyKSk9PW51bGw/dm9pZCAwOm4ubGVuZ3RofSk7cmV0dXJuIHQuc29ydCgpLHR9ZnVuY3Rpb24gaWxlKGUsdCl7bGV0IHI9WnNlKGUpLG49WnNlKHQpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGxQKGUsdCl7bGV0IHI9W10sbj1lLmluZGV4T2YoQWwpO2Zvcig7bj49MDspci5wdXNoKGUuc3Vic3RyaW5nKDAsbikpLG49ZS5pbmRleE9mKEFsLG4rMSk7aWYodCl7bGV0IGk9dFtlXTtpJiZyLnB1c2goaSl9cmV0dXJuIHIucHVzaChlKSxyfWZ1bmN0aW9uIF9IKGUpe3JldHVybiBlPT09dXIuRVhDTFVERT8iQWRkIHRvIG1haW4gZ3JhcGgiOiJSZW1vdmUgZnJvbSBtYWluIGdyYXBoIn1mdW5jdGlvbiBvbGUoZSl7cmV0dXJuIGU9PT1pcy5HUk9VUD8iVW5ncm91cCB0aGlzIHNlcmllcyBvZiBub2RlcyI6Ikdyb3VwIHRoaXMgc2VyaWVzIG9mIG5vZGVzIn12YXIgSGU9RWUoT2UoKSwxKTt2YXIgcnY9RWUoT2UoKSwxKTtmdW5jdGlvbiBhbGUoZSx0KXtsZXQgcj1zY3IoZSksbj1sY3Iocix0KTtyZXR1cm4gT2JqZWN0LmtleXMobikuc29ydChpPT5uW2ldLmxldmVsKS5yZWR1Y2UoKGksbyk9PihpW29dPW5bb10saSkse30pfWZ1bmN0aW9uIGFjcihlKXtsZXQgdD1ydi5tYXAoe2RlcHRoOmUuZGVwdGgsInxWfCI6ZS5tZXRhZ3JhcGgubm9kZXMoKS5sZW5ndGgsInxFfCI6ZS5tZXRhZ3JhcGguZWRnZXMoKS5sZW5ndGh9LGZ1bmN0aW9uKG4saSl7cmV0dXJuIGkrIj0iK259KS5qb2luKCIgIikscj1ydi5tYXAoZS5vcEhpc3RvZ3JhbSxmdW5jdGlvbihuLGkpe3JldHVybiBpKyI9IitufSkuam9pbigiLCIpO3JldHVybiB0KyIgW29wc10gIityfWZ1bmN0aW9uIHNjcihlKXtsZXQgdD1lLmdldE5vZGVNYXAoKSxyPU9iamVjdC5rZXlzKHQpLnJlZHVjZSgobixpKT0+e2xldCBvPXRbaV07aWYoby50eXBlIT09anQuTUVUQSlyZXR1cm4gbjtsZXQgYT1pLnNwbGl0KCIvIikubGVuZ3RoLTEscz1hY3IobyksbD1uW3NdfHx7bm9kZXM6W10sbGV2ZWw6YX07cmV0dXJuIG5bc109bCxsLm5vZGVzLnB1c2gobyksbC5sZXZlbD5hJiYobC5sZXZlbD1hKSxufSx7fSk7cmV0dXJuIE9iamVjdC5rZXlzKHIpLm1hcChuPT5bbixyW25dXSkuZmlsdGVyKChbbixpXSk9PntsZXR7bm9kZXM6b309aTtpZihvLmxlbmd0aD4xKXJldHVybiEwO2xldCBhPW9bMF07cmV0dXJuIGEudHlwZT09PWp0Lk1FVEEmJmEuYXNzb2NpYXRlZEZ1bmN0aW9ufSkuc29ydCgoW24saV0pPT5pLm5vZGVzWzBdLmRlcHRoKX1mdW5jdGlvbiBsY3IoZSx0KXtyZXR1cm4gcnYucmVkdWNlKGUsZnVuY3Rpb24obixpKXtsZXQgbz1pWzBdLGE9aVsxXS5ub2RlcyxzPVtdO3JldHVybiBhLmZvckVhY2goZnVuY3Rpb24obCl7Zm9yKGxldCBjPTA7YzxzLmxlbmd0aDtjKyspaWYoIXR8fGNjcihzW2NdLm1ldGFub2RlLm1ldGFncmFwaCxsLm1ldGFncmFwaCkpe2wudGVtcGxhdGVJZD1zW2NdLm1ldGFub2RlLnRlbXBsYXRlSWQsc1tjXS5tZW1iZXJzLnB1c2gobC5uYW1lKTtyZXR1cm59bC50ZW1wbGF0ZUlkPW8rIlsiK3MubGVuZ3RoKyJdIixzLnB1c2goe21ldGFub2RlOmwsbWVtYmVyczpbbC5uYW1lXX0pfSkscy5mb3JFYWNoKGZ1bmN0aW9uKGwpe25bbC5tZXRhbm9kZS50ZW1wbGF0ZUlkXT17bGV2ZWw6aVsxXS5sZXZlbCxub2RlczpsLm1lbWJlcnN9fSksbn0se30pfWZ1bmN0aW9uIHlIKGUsdCxyKXtyZXR1cm4gcnYuc29ydEJ5KGUsW249PnQubm9kZShuKS5vcCxuPT50Lm5vZGUobikudGVtcGxhdGVJZCxuPT57dmFyIGk7cmV0dXJuKGk9dC5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+e3ZhciBpO3JldHVybihpPXQucHJlZGVjZXNzb3JzKG4pKT09bnVsbD92b2lkIDA6aS5sZW5ndGh9LG49Pnt2YXIgaTtyZXR1cm4oaT10LnN1Y2Nlc3NvcnMobikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aH0sbj0+bi5zdWJzdHIoci5sZW5ndGgpXSl9ZnVuY3Rpb24gY2NyKGUsdCl7aWYoIWlsZShlLHQpKXJldHVybiExO2xldCByPWUuZ3JhcGgoKS5uYW1lLG49dC5ncmFwaCgpLm5hbWUsaT17fSxvPXt9LGE9W107ZnVuY3Rpb24gcyh1LGgpe2xldCBmPXUuc3Vic3RyKHIubGVuZ3RoKSxwPWguc3Vic3RyKG4ubGVuZ3RoKTtyZXR1cm4gaVtmXV5vW3BdPyhjb25zb2xlLndhcm4oImRpZmZlcmVudCB2aXNpdCBwYXR0ZXJuIiwiWyIrcisiXSIsZiwiWyIrbisiXSIscCksITApOihpW2ZdfHwoaVtmXT1vW3BdPSEwLGEucHVzaCh7bjE6dSxuMjpofSkpLCExKX1sZXQgbD1lLnNvdXJjZXMoKSxjPXQuc291cmNlcygpO2lmKGwubGVuZ3RoIT09Yy5sZW5ndGgpcmV0dXJuIGNvbnNvbGUubG9nKCJkaWZmZXJlbnQgc291cmNlIGxlbmd0aCIpLCExO2w9eUgobCxlLHIpLGM9eUgoYyx0LG4pO2ZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWlmKHMobFt1XSxjW3VdKSlyZXR1cm4hMTtmb3IoO2EubGVuZ3RoPjA7KXtsZXQgdT1hLnBvcCgpO2lmKCF1Y3IoZS5ub2RlKHU9PW51bGw/dm9pZCAwOnUubjEpLHQubm9kZSh1PT1udWxsP3ZvaWQgMDp1Lm4yKSkpcmV0dXJuITE7bGV0IGY9ZS5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjEpLHA9dC5zdWNjZXNzb3JzKHU9PW51bGw/dm9pZCAwOnUubjIpO2lmKChmPT1udWxsP3ZvaWQgMDpmLmxlbmd0aCkhPT0ocD09bnVsbD92b2lkIDA6cC5sZW5ndGgpKXJldHVybiBjb25zb2xlLmxvZygiIyBvZiBzdWNjZXNzb3JzIG1pc21hdGNoIixmLHApLCExO2Y9eUgoZixlLHIpLHA9eUgocCx0LG4pO2ZvcihsZXQgZD0wO2Q8KGY9PW51bGw/dm9pZCAwOmYubGVuZ3RoKTtkKyspaWYocyhmPT1udWxsP3ZvaWQgMDpmW2RdLHA9PW51bGw/dm9pZCAwOnBbZF0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIHVjcihlLHQpe2lmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUsbj10O3JldHVybiEhci50ZW1wbGF0ZUlkJiYhIW4udGVtcGxhdGVJZCYmci50ZW1wbGF0ZUlkPT09bi50ZW1wbGF0ZUlkfWVsc2V7aWYoZS50eXBlPT09anQuT1AmJnQudHlwZT09PWp0Lk9QKXJldHVybiBlLm9wPT09dC5vcDtpZihlLnR5cGU9PT1qdC5TRVJJRVMmJnQudHlwZT09PWp0LlNFUklFUyl7bGV0IHI9ZSxuPXQsaT1yLm1ldGFncmFwaC5ub2RlQ291bnQoKTtyZXR1cm4gaT09PW4ubWV0YWdyYXBoLm5vZGVDb3VudCgpJiYoaT09PTB8fHIubWV0YWdyYXBoLm5vZGUoci5tZXRhZ3JhcGgubm9kZXMoKVswXSkub3A9PT1uLm1ldGFncmFwaC5ub2RlKG4ubWV0YWdyYXBoLm5vZGVzKClbMF0pLm9wKX19cmV0dXJuITF9dmFyIERkOyhmdW5jdGlvbihlKXtlW2UuVEVNUExBVEVTX1VQREFURUQ9MF09IlRFTVBMQVRFU19VUERBVEVEIn0pKERkfHwoRGQ9e30pKTt2YXIgb3M9Y2xhc3MgZXh0ZW5kcyBwSHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuaGFzU2hhcGVJbmZvPSExLHRoaXMubWF4TWV0YUVkZ2VTaXplPTEsdGhpcy5ncmFwaE9wdGlvbnM9e30sdGhpcy50ZW1wbGF0ZXM9bnVsbCx0aGlzLmdyYXBoT3B0aW9ucy5jb21wb3VuZD0hMCx0aGlzLmdyYXBoT3B0aW9ucy5yYW5rZGlyPXQucmFua0RpcmVjdGlvbix0aGlzLnJvb3Q9c1AocWMsdGhpcy5ncmFwaE9wdGlvbnMpLHRoaXMubGlicmFyeUZ1bmN0aW9ucz17fSx0aGlzLnNlcmllc0dyb3VwTWFwPW5ldyBNYXAodC5zZXJpZXNNYXApLHRoaXMuZGV2aWNlcz1udWxsLHRoaXMueGxhQ2x1c3RlcnM9bnVsbCx0aGlzLnZlcmlmeVRlbXBsYXRlPXQudmVyaWZ5VGVtcGxhdGUsdGhpcy5pbmRleD17fSx0aGlzLmluZGV4W3FjXT10aGlzLnJvb3QsdGhpcy5vcmRlcmluZ3M9e319Z2V0U2VyaWVzR3JvdXBUeXBlKHQpe3ZhciByO3JldHVybihyPXRoaXMuc2VyaWVzR3JvdXBNYXAuZ2V0KHQpKSE9bnVsbD9yOmlzLkdST1VQfXNldFNlcmllc0dyb3VwVHlwZSh0LHIpe3JldHVybiB0aGlzLnNlcmllc0dyb3VwTWFwLnNldCh0LHIpfWJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpe2xldCByPXRoaXMuZ2V0U2VyaWVzR3JvdXBUeXBlKHQpPT09aXMuR1JPVVA/aXMuVU5HUk9VUDppcy5HUk9VUDtyZXR1cm4gbmV3IE1hcChbLi4udGhpcy5zZXJpZXNHcm91cE1hcCxbdCxyXV0pfWdldE5vZGVNYXAoKXtyZXR1cm4gdGhpcy5pbmRleH1ub2RlKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfXNldE5vZGUodCxyKXt0aGlzLmluZGV4W3RdPXJ9Z2V0QnJpZGdlZ3JhcGgodCl7bGV0IHI9dGhpcy5pbmRleFt0XTtpZighcil0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgbm9kZSBpbiBoaWVyYXJjaHk6ICIrdCk7aWYoISgibWV0YWdyYXBoImluIHIpKXJldHVybiBudWxsO2xldCBuPXI7aWYobi5icmlkZ2VncmFwaClyZXR1cm4gbi5icmlkZ2VncmFwaDtsZXQgaT1uLmJyaWRnZWdyYXBoPWUzKCJCUklER0VHUkFQSCIsZzAuQlJJREdFLHRoaXMuZ3JhcGhPcHRpb25zKTtpZighci5wYXJlbnROb2RlfHwhKCJtZXRhZ3JhcGgiaW4gci5wYXJlbnROb2RlKSlyZXR1cm4gaTtsZXQgbz1yLnBhcmVudE5vZGUsYT1vLm1ldGFncmFwaCxzPXRoaXMuZ2V0QnJpZGdlZ3JhcGgoby5uYW1lKTtyZXR1cm4gSGUuZWFjaChbYSxzXSxsPT57bC5lZGdlcygpLmZpbHRlcihjPT5jLnY9PT10fHxjLnc9PT10KS5mb3JFYWNoKGM9PntsZXQgdT1jLnc9PT10LGg9bC5lZGdlKGMpO0hlLmVhY2goaC5iYXNlRWRnZUxpc3QsZj0+e2xldFtwLGRdPXU/W2YudyxjLnZdOltmLnYsYy53XSxnPXRoaXMuZ2V0Q2hpbGROYW1lKHQscCksXz17djp1P2Q6Zyx3OnU/ZzpkfSx5PWkuZWRnZShfKTt5fHwoeT1WbHQoXy52LF8udykseS5pbmJvdW5kPXUsaS5zZXRFZGdlKF8udixfLncseSkpLHkuYWRkQmFzZUVkZ2UoZix0aGlzKX0pfSl9KSxpfWdldENoaWxkTmFtZSh0LHIpe2xldCBuPXRoaXMuaW5kZXhbcl07Zm9yKDtuOyl7aWYobi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUubmFtZT09PXQpcmV0dXJuIG4ubmFtZTtuPW4ucGFyZW50Tm9kZX10aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgaW1tZWRpYXRlIGNoaWxkIGZvciBkZXNjZW5kYW50OiAiK3IpfWdldFByZWRlY2Vzc29ycyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtsZXQgbj10aGlzLmdldE9uZVdheUVkZ2VzKHIsITApO3JldHVybiByLmlzR3JvdXBOb2RlfHxIZS5lYWNoKHIuaW5FbWJlZGRpbmdzLGk9PntIZS5lYWNoKHIuaW5wdXRzLG89PntpZihvLm5hbWU9PT1pLm5hbWUpe2xldCBhPW5ldyBxZihpLm5hbWUsdCk7YS5hZGRCYXNlRWRnZSh7aXNDb250cm9sRGVwZW5kZW5jeTpvLmlzQ29udHJvbERlcGVuZGVuY3ksb3V0cHV0VGVuc29yS2V5Om8ub3V0cHV0VGVuc29yS2V5LGlzUmVmZXJlbmNlRWRnZTohMSx2OmkubmFtZSx3OnR9LHRoaXMpLG4ucmVndWxhci5wdXNoKGEpfX0pfSksbn1nZXRTdWNjZXNzb3JzKHQpe2xldCByPXRoaXMuaW5kZXhbdF07aWYoIXIpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG5vZGUgd2l0aCBuYW1lOiAiK3QpO2xldCBuPXRoaXMuZ2V0T25lV2F5RWRnZXMociwhMSk7cmV0dXJuIHIuaXNHcm91cE5vZGV8fEhlLmVhY2goci5vdXRFbWJlZGRpbmdzLGk9PntIZS5lYWNoKGkuaW5wdXRzLG89PntpZihvLm5hbWU9PT10KXtsZXQgYT1uZXcgcWYodCxpLm5hbWUpO2EuYWRkQmFzZUVkZ2Uoe2lzQ29udHJvbERlcGVuZGVuY3k6by5pc0NvbnRyb2xEZXBlbmRlbmN5LG91dHB1dFRlbnNvcktleTpvLm91dHB1dFRlbnNvcktleSxpc1JlZmVyZW5jZUVkZ2U6ITEsdjp0LHc6aS5uYW1lfSx0aGlzKSxuLnJlZ3VsYXIucHVzaChhKX19KX0pLG59Z2V0T25lV2F5RWRnZXModCxyKXtsZXQgbj17Y29udHJvbDpbXSxyZWd1bGFyOltdfTtpZighdC5wYXJlbnROb2RlfHwhdC5wYXJlbnROb2RlLmlzR3JvdXBOb2RlKXJldHVybiBuO2xldCBpPXQucGFyZW50Tm9kZSxvPWkubWV0YWdyYXBoLGE9dGhpcy5nZXRCcmlkZ2VncmFwaChpLm5hbWUpO3JldHVybiBzbGUobyx0LHIsbiksc2xlKGEsdCxyLG4pLG59Z2V0VG9wb2xvZ2ljYWxPcmRlcmluZyh0KXtsZXQgcj10aGlzLmluZGV4W3RdO2lmKCFyKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBub2RlIHdpdGggbmFtZTogIit0KTtpZighci5pc0dyb3VwTm9kZSlyZXR1cm4gbnVsbDtpZih0IGluIHRoaXMub3JkZXJpbmdzKXJldHVybiB0aGlzLm9yZGVyaW5nc1t0XTtsZXQgbj17fSxpPXt9LG89ci5tZXRhZ3JhcGg7SGUuZWFjaChvLmVkZ2VzKCksYz0+eyFvLmVkZ2UoYykubnVtUmVndWxhckVkZ2VzfHwoYy52IGluIG58fChuW2Mudl09W10pLG5bYy52XS5wdXNoKGMudyksaVtjLnddPSEwKX0pO2xldCBhPUhlLmRpZmZlcmVuY2UoSGUua2V5cyhuKSxIZS5rZXlzKGkpKSxzPXRoaXMub3JkZXJpbmdzW3RdPXt9LGw9MDtmb3IoO2EubGVuZ3RoOyl7bGV0IGM9YS5zaGlmdCgpO3NbY109bCsrLEhlLmVhY2gobltjXSx1PT5hLnB1c2godSkpLGRlbGV0ZSBuW2NdfXJldHVybiBzfWdldFRlbXBsYXRlSW5kZXgoKXtpZighdGhpcy50ZW1wbGF0ZXMpcmV0dXJuIG51bGw7bGV0IHQ9WEwodGhpcy50ZW1wbGF0ZXMpO2lmKCF0Lmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgcj1ndSgpLmRvbWFpbih0KS5yYW5nZShJcigwLHQubGVuZ3RoKSk7cmV0dXJuIG49PnIobil9dXBkYXRlVGVtcGxhdGVzKCl7UmQoIkZpbmRpbmcgc2ltaWxhciBzdWJncmFwaHMiLCgpPT57dGhpcy50ZW1wbGF0ZXM9YWxlKHRoaXMsdGhpcy52ZXJpZnlUZW1wbGF0ZSksdGhpcy5kaXNwYXRjaEV2ZW50KERkLlRFTVBMQVRFU19VUERBVEVEKX0sanIuSElFUkFSQ0hZX0ZJTkRfU0lNSUxBUl9TVUJHUkFQSFMpfX07ZnVuY3Rpb24gc2xlKGUsdCxyLG4pe2xldCBpPXI/ZS5pbkVkZ2VzKHQubmFtZSk6ZS5vdXRFZGdlcyh0Lm5hbWUpO0hlLmVhY2goaSxvPT57bGV0IGE9ZS5lZGdlKG8pOyhhLm51bVJlZ3VsYXJFZGdlcz9uLnJlZ3VsYXI6bi5jb250cm9sKS5wdXNoKGEpfSl9dmFyIHIzPXt2ZXJpZnlUZW1wbGF0ZTohMCxzZXJpZXNOb2RlTWluU2l6ZTo1LHNlcmllc01hcDpuZXcgTWFwLHJhbmtEaXJlY3Rpb246IkJUIix1c2VHZW5lcmFsaXplZFNlcmllc1BhdHRlcm5zOiExfTtmdW5jdGlvbiB4SChlLHQscil7bGV0IG49bmV3IG9zKHQpLGk9e307cmV0dXJuIGV2KCJBZGRpbmcgbm9kZXMiLDMwLCgpPT57bGV0IG89e30sYT17fTtIZS5lYWNoKGUubm9kZXMsKHMsbCk9PntzLmRldmljZSYmKG9bcy5kZXZpY2VdPSEwKSxzLnhsYUNsdXN0ZXImJihhW3MueGxhQ2x1c3Rlcl09ITApfSksbi5kZXZpY2VzPUhlLmtleXMobyksbi54bGFDbHVzdGVycz1IZS5rZXlzKGEpLGZjcihuLGUpfSxyLGpyLkhJRVJBUkNIWV9BRERfTk9ERVMpLnRoZW4oKCk9PmV2KCJEZXRlY3Qgc2VyaWVzIiwzMCwoKT0+e3Quc2VyaWVzTm9kZU1pblNpemU+MCYmdWxlKG4ucm9vdCxuLGksdC5zZXJpZXNOb2RlTWluU2l6ZSx0LnNlcmllc01hcCx0LnVzZUdlbmVyYWxpemVkU2VyaWVzUGF0dGVybnMpfSxyLGpyLkhJRVJBUkNIWV9ERVRFQ1RfU0VSSUVTKSkudGhlbigoKT0+ZXYoIkFkZGluZyBlZGdlcyIsNDAsKCk9PntwY3IobixlLGkpfSxyLGpyLkhJRVJBUkNIWV9BRERfRURHRVMpKS50aGVuKCgpPT5uKX1mdW5jdGlvbiBsbGUoZSx0KXtsZXQgcj17fSxuPXt9O0hlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSk7by5kZXZpY2UhPW51bGwmJihyW28uZGV2aWNlXT0hMCksby54bGFDbHVzdGVyIT1udWxsJiYobltvLnhsYUNsdXN0ZXJdPSEwKX0pLGUuZGV2aWNlcz1IZS5rZXlzKHIpLGUueGxhQ2x1c3RlcnM9SGUua2V5cyhuKSxIZS5lYWNoKGUuZ2V0Tm9kZU1hcCgpLChpLG8pPT57aS5pc0dyb3VwTm9kZSYmKGkuc3RhdHM9bmV3IEtTKG51bGwpLGkuZGV2aWNlSGlzdG9ncmFtPXt9KX0pLEhlLmVhY2goZS5yb290LmxlYXZlcygpLGk9PntsZXQgbz1lLm5vZGUoaSksYT1vO2Zvcig7YS5wYXJlbnROb2RlIT1udWxsOyl7aWYoby5kZXZpY2UhPW51bGwpe2xldCBzPWEucGFyZW50Tm9kZS5kZXZpY2VIaXN0b2dyYW07c1tvLmRldmljZV09KHNbby5kZXZpY2VdfHwwKSsxfWlmKG8ueGxhQ2x1c3RlciE9bnVsbCl7bGV0IHM9YS5wYXJlbnROb2RlLnhsYUNsdXN0ZXJIaXN0b2dyYW07c1tvLnhsYUNsdXN0ZXJdPShzW28ueGxhQ2x1c3Rlcl18fDApKzF9by5zdGF0cyE9bnVsbCYmYS5wYXJlbnROb2RlLnN0YXRzLmNvbWJpbmUoby5zdGF0cyksYT1hLnBhcmVudE5vZGV9fSl9ZnVuY3Rpb24gY2xlKGUpe2xldCB0PVtdLHI9e307cmV0dXJuIEhlLmVhY2goZS5yb290LmxlYXZlcygpLG49PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT1qdC5PUCl7bGV0IG89aTtpZighby5jb21wYXRpYmxlKWlmKG8ub3duaW5nU2VyaWVzKXtpZihlLmdldFNlcmllc0dyb3VwVHlwZShvLm93bmluZ1Nlcmllcyk9PT1pcy5VTkdST1VQKXQucHVzaChvKTtlbHNlIGlmKCFyW28ub3duaW5nU2VyaWVzXSl7bGV0IGE9ZS5ub2RlKG8ub3duaW5nU2VyaWVzKTthJiYocltvLm93bmluZ1Nlcmllc109YSx0LnB1c2goYSkpfX1lbHNlIHQucHVzaChvKTtIZS5lYWNoKG8uaW5FbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pLEhlLmVhY2goby5vdXRFbWJlZGRpbmdzLGE9PnthLmNvbXBhdGlibGV8fHQucHVzaChhKX0pfX0pLHR9ZnVuY3Rpb24gZmNyKGUsdCl7bGV0IHI9e307SGUuZWFjaCh0Lm5vZGVzLChuLGkpPT57bGV0IG89bFAobi5uYW1lKSxhPWUucm9vdDthLmRlcHRoPU1hdGgubWF4KG8ubGVuZ3RoLGEuZGVwdGgpLHJbbi5vcF18fChyW24ub3BdPVtdKSxyW24ub3BdLnB1c2gobik7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmKGEuZGVwdGg9TWF0aC5tYXgoYS5kZXB0aCxvLmxlbmd0aC1zKSxhLmNhcmRpbmFsaXR5Kz1uLmNhcmRpbmFsaXR5LGEub3BIaXN0b2dyYW1bbi5vcF09KGEub3BIaXN0b2dyYW1bbi5vcF18fDApKzEsbi5kZXZpY2UhPW51bGwmJihhLmRldmljZUhpc3RvZ3JhbVtuLmRldmljZV09KGEuZGV2aWNlSGlzdG9ncmFtW24uZGV2aWNlXXx8MCkrMSksbi54bGFDbHVzdGVyIT1udWxsJiYoYS54bGFDbHVzdGVySGlzdG9ncmFtW24ueGxhQ2x1c3Rlcl09KGEueGxhQ2x1c3Rlckhpc3RvZ3JhbVtuLnhsYUNsdXN0ZXJdfHwwKSsxKSxuLmNvbXBhdGlibGU/YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOmEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KGEuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChuLmluRW1iZWRkaW5ncyx1PT57dS5jb21wYXRpYmxlP2EuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTphLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPShhLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChuLm91dEVtYmVkZGluZ3MsdT0+e3UuY29tcGF0aWJsZT9hLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6YS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0oYS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLHMhPT1vLmxlbmd0aC0xKTtzKyspe2xldCBsPW9bc10sYz1lLm5vZGUobCk7aWYoIWMmJihjPXNQKGwsZS5ncmFwaE9wdGlvbnMpLGMucGFyZW50Tm9kZT1hLGUuc2V0Tm9kZShsLGMpLGEubWV0YWdyYXBoLnNldE5vZGUobCxjKSxsLmluZGV4T2YoU2EpPT09MCYmYS5uYW1lPT09cWMpKXtsZXQgdT1sLnN1YnN0cmluZyhTYS5sZW5ndGgpO3JbdV18fChyW3VdPVtdKSxlLmxpYnJhcnlGdW5jdGlvbnNbdV09e25vZGU6Yyx1c2FnZXM6clt1XX0sYy5hc3NvY2lhdGVkRnVuY3Rpb249dX1hPWN9ZS5zZXROb2RlKG4ubmFtZSxuKSxuLnBhcmVudE5vZGU9YSxhLm1ldGFncmFwaC5zZXROb2RlKG4ubmFtZSxuKSxIZS5lYWNoKG4uaW5FbWJlZGRpbmdzLGZ1bmN0aW9uKHMpe2Uuc2V0Tm9kZShzLm5hbWUscykscy5wYXJlbnROb2RlPW59KSxIZS5lYWNoKG4ub3V0RW1iZWRkaW5ncyxmdW5jdGlvbihzKXtlLnNldE5vZGUocy5uYW1lLHMpLHMucGFyZW50Tm9kZT1ufSl9KX1mdW5jdGlvbiBwY3IoZSx0LHIpe2xldCBuPWUuZ2V0Tm9kZU1hcCgpLGk9W10sbz1bXSxhPShzLGwpPT57bGV0IGM9MDtmb3IoO3M7KWxbYysrXT1zLm5hbWUscz1zLnBhcmVudE5vZGU7cmV0dXJuIGMtMX07SGUuZWFjaCh0LmVkZ2VzLHM9PntsZXQgbD1hKHQubm9kZXNbcy52XSxpKSxjPWEodC5ub2Rlc1tzLnddLG8pO2lmKGw9PT0tMXx8Yz09PS0xKXJldHVybjtmb3IoO2lbbF09PT1vW2NdOylpZihsLS0sYy0tLGw8MHx8YzwwKXRocm93IEVycm9yKCJObyBkaWZmZXJlbmNlIGZvdW5kIGJldHdlZW4gYW5jZXN0b3IgcGF0aHMuIik7bGV0IHU9bltpW2wrMV1dLGg9aVtsXSxmPW9bY10scD11Lm1ldGFncmFwaC5lZGdlKGgsZik7cHx8KHA9Vmx0KGgsZiksdS5tZXRhZ3JhcGguc2V0RWRnZShoLGYscCkpLCF1Lmhhc05vbkNvbnRyb2xFZGdlcyYmIXMuaXNDb250cm9sRGVwZW5kZW5jeSYmKHUuaGFzTm9uQ29udHJvbEVkZ2VzPSEwKSxwLmFkZEJhc2VFZGdlKHMsZSl9KX1mdW5jdGlvbiB1bGUoZSx0LHIsbixpLG8pe2xldCBhPWUubWV0YWdyYXBoO0hlLmVhY2goYS5ub2RlcygpLHU9PntsZXQgaD1hLm5vZGUodSk7aC50eXBlPT09anQuTUVUQSYmdWxlKGgsdCxyLG4saSxvKX0pO2xldCBzPWRjcihhKSxjPShvP2djcjptY3IpKHMsYSx0LmdyYXBoT3B0aW9ucyk7SGUuZWFjaChjLGZ1bmN0aW9uKHUsaCl7bGV0IGY9dS5tZXRhZ3JhcGgubm9kZXMoKTtIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTtkLm93bmluZ1Nlcmllc3x8KGQub3duaW5nU2VyaWVzPWgpfSksZi5sZW5ndGg8biYmdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKT09PWlzLkdST1VQJiZ0LnNldFNlcmllc0dyb3VwVHlwZSh1Lm5hbWUsaXMuVU5HUk9VUCksdC5nZXRTZXJpZXNHcm91cFR5cGUodS5uYW1lKSE9PWlzLlVOR1JPVVAmJih0LnNldE5vZGUoaCx1KSxhLnNldE5vZGUoaCx1KSxIZS5lYWNoKGYscD0+e2xldCBkPWEubm9kZShwKTt1Lm1ldGFncmFwaC5zZXROb2RlKHAsZCksdS5wYXJlbnROb2RlPWQucGFyZW50Tm9kZSx1LmNhcmRpbmFsaXR5KyssZC5kZXZpY2UhPW51bGwmJih1LmRldmljZUhpc3RvZ3JhbVtkLmRldmljZV09KHUuZGV2aWNlSGlzdG9ncmFtW2QuZGV2aWNlXXx8MCkrMSksZC54bGFDbHVzdGVyIT1udWxsJiYodS54bGFDbHVzdGVySGlzdG9ncmFtW2QueGxhQ2x1c3Rlcl09KHUueGxhQ2x1c3Rlckhpc3RvZ3JhbVtkLnhsYUNsdXN0ZXJdfHwwKSsxKSxkLmNvbXBhdGlibGU/dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlfHwwKSsxOnUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU9KHUuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGV8fDApKzEsSGUuZWFjaChkLmluRW1iZWRkaW5ncyxnPT57Zy5jb21wYXRpYmxlP3UuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZXx8MCkrMTp1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlPSh1LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlfHwwKSsxfSksSGUuZWFjaChkLm91dEVtYmVkZGluZ3MsZz0+e2cuY29tcGF0aWJsZT91LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGV8fDApKzE6dS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZT0odS5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmluY29tcGF0aWJsZXx8MCkrMX0pLGQucGFyZW50Tm9kZT11LHJbcF09aCxhLnJlbW92ZU5vZGUocCl9KSl9KX1mdW5jdGlvbiBkY3IoZSl7bGV0IHQ9e307cmV0dXJuIEhlLnJlZHVjZShlLm5vZGVzKCksKHIsbik9PntsZXQgaT1lLm5vZGUobik7aWYoaS50eXBlPT09anQuTUVUQSlyZXR1cm4gcjtsZXQgbz1pLm9wO3JldHVybiBvJiYocltvXT1yW29dfHxbXSxyW29dLnB1c2goaS5uYW1lKSkscn0sdCl9ZnVuY3Rpb24gbWNyKGUsdCxyKXtsZXQgbj17fTtyZXR1cm4gSGUuZWFjaChlLGZ1bmN0aW9uKGksbyl7aWYoaS5sZW5ndGg8PTEpcmV0dXJuO2xldCBhPXt9O0hlLmVhY2goaSxmdW5jdGlvbihzKXtsZXQgbD1zLmNoYXJBdChzLmxlbmd0aC0xKT09PSIqIixjPXMuc3BsaXQoIi8iKSx1PWNbYy5sZW5ndGgtMV0saD1jLnNsaWNlKDAsYy5sZW5ndGgtMSkuam9pbigiLyIpLGY9dS5tYXRjaCgvXihcRCopKFxkKykkLykscCxkLGc9IiI7Zj8ocD1mWzFdLGQ9ZlsyXSk6KHA9bD91LnN1YnN0cigwLHUubGVuZ3RoLTEpOnUsZD0wLGc9bD8iKiI6IiIpO2xldCBfPXQzKHAsZyxoKTthW19dPWFbX118fFtdO2xldCB5PVFTKHAsZyxoLCtkLHMscik7YVtfXS5wdXNoKHkpfSksSGUuZWFjaChhLGZ1bmN0aW9uKHMsbCl7aWYocy5sZW5ndGg8MilyZXR1cm47cy5zb3J0KGZ1bmN0aW9uKHUsaCl7cmV0dXJuK3UuY2x1c3RlcklkLStoLmNsdXN0ZXJJZH0pO2xldCBjPVtzWzBdXTtmb3IobGV0IHU9MTt1PHMubGVuZ3RoO3UrKyl7bGV0IGg9c1t1XTtpZihoLmNsdXN0ZXJJZD09PWNbYy5sZW5ndGgtMV0uY2x1c3RlcklkKzEpe2MucHVzaChoKTtjb250aW51ZX12SChjLG4sK28sdCxyKSxjPVtoXX12SChjLG4sK28sdCxyKX0pfSksbn1mdW5jdGlvbiBnY3IoZSx0LHIpe2xldCBuPXt9O3JldHVybiBIZS5lYWNoKGUsZnVuY3Rpb24oaSxvKXtpZihpLmxlbmd0aDw9MSlyZXR1cm47bGV0IGE9e30scz17fTtIZS5lYWNoKGksZnVuY3Rpb24oYyl7bGV0IHU9Yy5jaGFyQXQoYy5sZW5ndGgtMSk9PT0iKiIsaD1jLnNwbGl0KCIvIiksZj1oW2gubGVuZ3RoLTFdLHA9aC5zbGljZSgwLGgubGVuZ3RoLTEpLmpvaW4oIi8iKSxkPS8oXGQrKS9nLGc9W10sXyx5LHgsYixTLEM9MDtmb3IoO189ZC5leGVjKGYpOykrK0MseT1mLnNsaWNlKDAsXy5pbmRleCkseD1fWzBdLGI9Zi5zbGljZShfLmluZGV4K19bMF0ubGVuZ3RoKSxTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSk7QzwxJiYoeT11P2Yuc3Vic3RyKDAsZi5sZW5ndGgtMSk6Zix4PTAsYj11PyIqIjoiIixTPXQzKHksYixwKSxhW1NdPWFbU10sYVtTXXx8KGFbU109UVMoeSxiLHAsK3gsYyxyKSksYVtTXS5pZHMucHVzaCh4KSxzW2NdPXNbY118fFtdLHNbY10ucHVzaChbUyx4XSkpfSk7dmFyIGw9e307SGUuZWFjaChzLGZ1bmN0aW9uKGMsdSl7Yy5zb3J0KGZ1bmN0aW9uKHkseCl7cmV0dXJuIGFbeFswXV0uaWRzLmxlbmd0aC1hW3lbMF1dLmlkcy5sZW5ndGh9KTt2YXIgaD1jWzBdWzBdLGY9Y1swXVsxXTtsW2hdPWxbaF18fFtdO2xldCBwPXUuc3BsaXQoIi8iKSxkPXBbcC5sZW5ndGgtMV0sZz1wLnNsaWNlKDAscC5sZW5ndGgtMSkuam9pbigiLyIpO3ZhciBfPVFTKGFbaF0ucHJlZml4LGFbaF0uc3VmZml4LGcsK2YsdSxyKTtsW2hdLnB1c2goXyl9KSxIZS5lYWNoKGwsZnVuY3Rpb24oYyx1KXtpZihjLmxlbmd0aDwyKXJldHVybjtjLnNvcnQoZnVuY3Rpb24oZixwKXtyZXR1cm4rZi5jbHVzdGVySWQtK3AuY2x1c3RlcklkfSk7bGV0IGg9W2NbMF1dO2ZvcihsZXQgZj0xO2Y8Yy5sZW5ndGg7ZisrKXtsZXQgcD1jW2ZdO2lmKHAuY2x1c3RlcklkPT09aFtoLmxlbmd0aC0xXS5jbHVzdGVySWQrMSl7aC5wdXNoKHApO2NvbnRpbnVlfXZIKGgsbiwrbyx0LHIpLGg9W3BdfXZIKGgsbiwrbyx0LHIpfSl9KSxufWZ1bmN0aW9uIHZIKGUsdCxyLG4saSl7aWYoZS5sZW5ndGg+MSl7bGV0IG89dDMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQsZVswXS5jbHVzdGVySWQsZVtlLmxlbmd0aC0xXS5jbHVzdGVySWQpLGE9UVMoZVswXS5wcmVmaXgsZVswXS5zdWZmaXgsZVswXS5wYXJlbnQscixvLGkpO0hlLmVhY2goZSxmdW5jdGlvbihzKXthLmlkcy5wdXNoKHMuY2x1c3RlcklkKSxhLm1ldGFncmFwaC5zZXROb2RlKHMubmFtZSxuLm5vZGUocy5uYW1lKSl9KSx0W29dPWF9fXZhciBtZT1FZShPZSgpLDEpO3ZhciB5MD17REVGQVVMVF9GSUxMOiIjZmZmZmZmIixERUZBVUxUX1NUUk9LRToiI2IyYjJiMiIsQ09NUEFUSUJMRToiIzBmOWQ1OCIsSU5DT01QQVRJQkxFOiIjZGI0NDM3In0sS3U9e0RFRkFVTFRfRklMTDoiI2Q5ZDlkOSIsREVGQVVMVF9TVFJPS0U6IiNhNmE2YTYiLFNBVFVSQVRJT046LjYsTElHSFRORVNTOi44NSxFWFBBTkRFRF9DT0xPUjoiI2YwZjBmMCIsSFVFUzpbMjIwLDEwMCwxODAsNDAsMjAsMzQwLDI2MCwzMDAsMTQwLDYwXSxTVFJVQ1RVUkVfUEFMRVRURShlLHQpe2xldCByPUt1LkhVRVMsbj1yLmxlbmd0aCxpPXJbZSVuXSxvPU1hdGguc2luKGkqTWF0aC5QSS8zNjApLGE9dD8zMDo5MC02MCpvLHM9dD85NTo4MDtyZXR1cm4gVm0oaSwuMDEqYSwuMDEqcykudG9TdHJpbmcoKX0sREVWSUNFX1BBTEVUVEUoZSl7cmV0dXJuIEt1LlNUUlVDVFVSRV9QQUxFVFRFKGUpfSxYTEFfQ0xVU1RFUl9QQUxFVFRFKGUpe3JldHVybiBLdS5TVFJVQ1RVUkVfUEFMRVRURShlKX0sVU5LTk9XTjoiI2VlZSIsR1JBRElFTlRfT1VUTElORToiIzg4OCJ9LFVsdD17REVGQVVMVF9GSUxMOiJ3aGl0ZSIsREVGQVVMVF9TVFJPS0U6IiNiMmIyYjIifSxYbz17bWluTm9kZUNvdW50Rm9yRXh0cmFjdGlvbjoxNSxtaW5EZWdyZWVGb3JFeHRyYWN0aW9uOjUsbWF4Q29udHJvbERlZ3JlZTo0LG1heEJyaWRnZVBhdGhEZWdyZWU6NCxvdXRFeHRyYWN0VHlwZXM6WyJOb09wIl0saW5FeHRyYWN0VHlwZXM6W10sZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlOiEwLGV4dHJhY3RJc29sYXRlZE5vZGVzV2l0aEFubm90YXRpb25zT25PbmVTaWRlOiEwLGVuYWJsZUJyaWRnZWdyYXBoOiEwLG1pbk1heENvbG9yczpbIiNmZmY1ZjAiLCIjZmI2YTRhIl0sbWF4QW5ub3RhdGlvbnM6NX0sX2NyPW5ldyBSZWdFeHAoIl4oPzoiK1NhKyIpPyhcXHcrKV9bYS16MC05XXs4fSg/Ol9cXGQrKT8kIiksbG89Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3RoaXMuaGllcmFyY2h5PXQsdGhpcy5kaXNwbGF5aW5nU3RhdHM9cix0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9bix0aGlzLmluZGV4PXt9LHRoaXMucmVuZGVyZWRPcE5hbWVzPVtdLHRoaXMuY29tcHV0ZVNjYWxlcygpLHRoaXMuaGFzU3ViaGllcmFyY2h5PXt9LHRoaXMucm9vdD1uZXcgd0godC5yb290LHQuZ3JhcGhPcHRpb25zKSx0aGlzLmluZGV4W3Qucm9vdC5uYW1lXT10aGlzLnJvb3QsdGhpcy5yZW5kZXJlZE9wTmFtZXMucHVzaCh0LnJvb3QubmFtZSksdGhpcy5idWlsZFN1YmhpZXJhcmNoeSh0LnJvb3QubmFtZSksdGhpcy5yb290LmV4cGFuZGVkPSEwLHRoaXMudHJhY2VJbnB1dHM9ITF9Y29tcHV0ZVNjYWxlcygpe3RoaXMuZGV2aWNlQ29sb3JNYXA9Z3UoKS5kb21haW4odGhpcy5oaWVyYXJjaHkuZGV2aWNlcykucmFuZ2UobWUubWFwKElyKHRoaXMuaGllcmFyY2h5LmRldmljZXMubGVuZ3RoKSxLdS5ERVZJQ0VfUEFMRVRURSkpLHRoaXMueGxhQ2x1c3RlckNvbG9yTWFwPWd1KCkuZG9tYWluKHRoaXMuaGllcmFyY2h5LnhsYUNsdXN0ZXJzKS5yYW5nZShtZS5tYXAoSXIodGhpcy5oaWVyYXJjaHkueGxhQ2x1c3RlcnMubGVuZ3RoKSxLdS5YTEFfQ0xVU1RFUl9QQUxFVFRFKSk7bGV0IHQ9dGhpcy5oaWVyYXJjaHkucm9vdC5tZXRhZ3JhcGgscj1sdSh0Lm5vZGVzKCksKGksbyk9PntsZXQgYT10Lm5vZGUoaSk7aWYoYS5zdGF0cyE9bnVsbClyZXR1cm4gYS5zdGF0cy50b3RhbEJ5dGVzfSk7dGhpcy5tZW1vcnlVc2FnZVNjYWxlPXpuKCkuZG9tYWluKFswLHJdKS5yYW5nZShYby5taW5NYXhDb2xvcnMpO2xldCBuPWx1KHQubm9kZXMoKSwoaSxvKT0+e2xldCBhPXQubm9kZShpKTtpZihhLnN0YXRzIT1udWxsKXJldHVybiBhLnN0YXRzLmdldFRvdGFsTWljcm9zKCl9KTt0aGlzLmNvbXB1dGVUaW1lU2NhbGU9em4oKS5kb21haW4oWzAsbl0pLnJhbmdlKFhvLm1pbk1heENvbG9ycyksdGhpcy5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGU9dGhpcy5oaWVyYXJjaHkuaGFzU2hhcGVJbmZvP3FzZTp6bigpLmRvbWFpbihbMSx0aGlzLmhpZXJhcmNoeS5tYXhNZXRhRWRnZVNpemVdKS5yYW5nZShbSjQsUTRdKX1nZXRSZW5kZXJOb2RlQnlOYW1lKHQpe3JldHVybiB0aGlzLmluZGV4W3RdfWdldE5vZGVCeU5hbWUodCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Lm5vZGUodCl9Y29sb3JIaXN0b2dyYW0odCxyKXtpZihPYmplY3Qua2V5cyh0KS5sZW5ndGg+MCl7bGV0IG49bWUuc3VtKE9iamVjdC5rZXlzKHQpLm1hcChpPT50W2ldKSk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcChpPT4oe2NvbG9yOnIoaSkscHJvcG9ydGlvbjp0W2ldL259KSl9cmV0dXJuIG51bGx9Z2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQgaW4gdGhpcy5pbmRleClyZXR1cm4gdGhpcy5pbmRleFt0XTtsZXQgcj10aGlzLmhpZXJhcmNoeS5ub2RlKHQpO2lmKCFyKXJldHVybiBudWxsO2xldCBuPXIuaXNHcm91cE5vZGU/bmV3IHdIKHIsdGhpcy5oaWVyYXJjaHkuZ3JhcGhPcHRpb25zKTpuZXcgR2Yocik7dGhpcy5pbmRleFt0XT1uLHRoaXMucmVuZGVyZWRPcE5hbWVzLnB1c2godCksci5zdGF0cyYmKG4ubWVtb3J5Q29sb3I9dGhpcy5tZW1vcnlVc2FnZVNjYWxlKHIuc3RhdHMudG90YWxCeXRlcyksbi5jb21wdXRlVGltZUNvbG9yPXRoaXMuY29tcHV0ZVRpbWVTY2FsZShyLnN0YXRzLmdldFRvdGFsTWljcm9zKCkpKSxuLmlzRmFkZWRPdXQ9dGhpcy5kaXNwbGF5aW5nU3RhdHMmJiFtSChyLnN0YXRzKTt2YXIgaT1udWxsLG89bnVsbCxhPW51bGw7aWYoci5pc0dyb3VwTm9kZSl7aT1yLmRldmljZUhpc3RvZ3JhbSxvPXIueGxhQ2x1c3Rlckhpc3RvZ3JhbTtsZXQgcz1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uY29tcGF0aWJsZSxsPXIuY29tcGF0aWJpbGl0eUhpc3RvZ3JhbS5pbmNvbXBhdGlibGU7KHMhPTB8fGwhPTApJiYoYT1zLyhzK2wpKX1lbHNle2xldCBzPW4ubm9kZS5kZXZpY2U7cyYmKGk9e1tzXToxfSk7bGV0IGw9bi5ub2RlLnhsYUNsdXN0ZXI7bCYmKG89e1tsXToxfSksbi5ub2RlLnR5cGU9PT1qdC5PUCYmKGE9bi5ub2RlLmNvbXBhdGlibGU/MTowKX1yZXR1cm4gaSYmKG4uZGV2aWNlQ29sb3JzPXRoaXMuY29sb3JIaXN0b2dyYW0oaSx0aGlzLmRldmljZUNvbG9yTWFwKSksbyYmKG4ueGxhQ2x1c3RlckNvbG9ycz10aGlzLmNvbG9ySGlzdG9ncmFtKG8sdGhpcy54bGFDbHVzdGVyQ29sb3JNYXApKSxhIT1udWxsJiYobi5jb21wYXRpYmlsaXR5Q29sb3JzPVt7Y29sb3I6eTAuQ09NUEFUSUJMRSxwcm9wb3J0aW9uOmF9LHtjb2xvcjp5MC5JTkNPTVBBVElCTEUscHJvcG9ydGlvbjoxLWF9XSksdGhpcy5pbmRleFt0XX1nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpe2xldCByPWxQKHQpLG49MCxpPW51bGwsbz10O2Zvcig7bjxyLmxlbmd0aCYmKG89cltuXSxpPXRoaXMuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKSwhIWkuZXhwYW5kZWQpO24rKyk7aWYobj09ci5sZW5ndGgtMil7bGV0IGE9cltuKzFdO2lmKGkhPW51bGwmJmkuaW5Bbm5vdGF0aW9ucy5ub2RlTmFtZXNbYV18fGkhPW51bGwmJmkub3V0QW5ub3RhdGlvbnMubm9kZU5hbWVzW2FdKXJldHVybiBhfXJldHVybiBvfXNldERlcHRoKHQpe3BsZSh0aGlzLnJvb3QsK3QpfWlzTm9kZUF1eGlsaWFyeSh0KXtsZXQgcj10aGlzLmdldFJlbmRlck5vZGVCeU5hbWUodC5ub2RlLnBhcmVudE5vZGUubmFtZSksbj1tZS5maW5kKHIuaXNvbGF0ZWRJbkV4dHJhY3QsaT0+aS5ub2RlLm5hbWU9PT10Lm5vZGUubmFtZSk7cmV0dXJuIG4/ITA6KG49bWUuZmluZChyLmlzb2xhdGVkT3V0RXh0cmFjdCxpPT5pLm5vZGUubmFtZT09PXQubm9kZS5uYW1lKSwhIW4pfWdldE5hbWVzT2ZSZW5kZXJlZE9wcygpe3JldHVybiB0aGlzLnJlbmRlcmVkT3BOYW1lc31jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHQscixuLGkpe2xldCBvPW4ubmFtZS5yZXBsYWNlKHIsaSksYT10Lm1ldGFncmFwaC5ub2RlKG8pO2lmKGEpcmV0dXJuIGE7YT1uZXcgXzAoe25hbWU6byxpbnB1dDpbXSxkZXZpY2U6bi5kZXZpY2Usb3A6bi5vcCxhdHRyOm1lLmNsb25lRGVlcChuLmF0dHIpfSksYS5jYXJkaW5hbGl0eT1uLmNhcmRpbmFsaXR5LGEuaW5jbHVkZT1uLmluY2x1ZGUsYS5vdXRwdXRTaGFwZXM9bWUuY2xvbmVEZWVwKG4ub3V0cHV0U2hhcGVzKSxhLnhsYUNsdXN0ZXI9bi54bGFDbHVzdGVyLGEuZnVuY3Rpb25JbnB1dEluZGV4PW4uZnVuY3Rpb25JbnB1dEluZGV4LGEuZnVuY3Rpb25PdXRwdXRJbmRleD1uLmZ1bmN0aW9uT3V0cHV0SW5kZXgsYS5pbnB1dHM9bi5pbnB1dHMubWFwKGw9PntsZXQgYz1tZS5jbG9uZShsKTtyZXR1cm4gYy5uYW1lPWwubmFtZS5yZXBsYWNlKHIsaSksY30pLGEucGFyZW50Tm9kZT10LHQubWV0YWdyYXBoLnNldE5vZGUoYS5uYW1lLGEpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUoYS5uYW1lLGEpO2xldCBzPWw9PnRoaXMuY2xvbmVBbmRBZGRGdW5jdGlvbk9wTm9kZSh0LHIsbCxpKTtyZXR1cm4gYS5pbkVtYmVkZGluZ3M9bi5pbkVtYmVkZGluZ3MubWFwKHMpLGEub3V0RW1iZWRkaW5ncz1uLm91dEVtYmVkZGluZ3MubWFwKHMpLGF9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZSh0LHIsbixpLG8pe2xldCBhPXt9LHM9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlSGVscGVyKHQscixuLGksbyxhKTtyZXR1cm4gbWUuaXNFbXB0eShhKXx8dGhpcy5wYXRjaEVkZ2VzRnJvbUZ1bmN0aW9uT3V0cHV0cyhyLGEpLHN9Y2xvbmVGdW5jdGlvbkxpYnJhcnlNZXRhbm9kZUhlbHBlcih0LHIsbixpLG8sYSl7bGV0IHM9c1Aobi5uYW1lLnJlcGxhY2UoaSxvKSk7cmV0dXJuIHMuZGVwdGg9bi5kZXB0aCxzLmNhcmRpbmFsaXR5PW4uY2FyZGluYWxpdHkscy50ZW1wbGF0ZUlkPW4udGVtcGxhdGVJZCxzLm9wSGlzdG9ncmFtPW1lLmNsb25lKG4ub3BIaXN0b2dyYW0pLHMuZGV2aWNlSGlzdG9ncmFtPW1lLmNsb25lKG4uZGV2aWNlSGlzdG9ncmFtKSxzLnhsYUNsdXN0ZXJIaXN0b2dyYW09bWUuY2xvbmUobi54bGFDbHVzdGVySGlzdG9ncmFtKSxzLmhhc05vbkNvbnRyb2xFZGdlcz1uLmhhc05vbkNvbnRyb2xFZGdlcyxzLmluY2x1ZGU9bi5pbmNsdWRlLHMubm9kZUF0dHJpYnV0ZXM9bWUuY2xvbmUobi5ub2RlQXR0cmlidXRlcykscy5hc3NvY2lhdGVkRnVuY3Rpb249bi5hc3NvY2lhdGVkRnVuY3Rpb24sbWUuZWFjaChuLm1ldGFncmFwaC5ub2RlcygpLGw9PntsZXQgYz1uLm1ldGFncmFwaC5ub2RlKGwpO3N3aXRjaChjLnR5cGUpe2Nhc2UganQuTUVUQTpsZXQgdT10aGlzLmNsb25lRnVuY3Rpb25MaWJyYXJ5TWV0YW5vZGVIZWxwZXIodCxyLGMsaSxvLGEpO3UucGFyZW50Tm9kZT1zLHMubWV0YWdyYXBoLnNldE5vZGUodS5uYW1lLHUpLHRoaXMuaGllcmFyY2h5LnNldE5vZGUodS5uYW1lLHUpO2JyZWFrO2Nhc2UganQuT1A6bGV0IGg9dGhpcy5jbG9uZUFuZEFkZEZ1bmN0aW9uT3BOb2RlKHMsaSxjLG8pO21lLmlzTnVtYmVyKGguZnVuY3Rpb25JbnB1dEluZGV4KSYmdGhpcy5wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHIsaCksbWUuaXNOdW1iZXIoaC5mdW5jdGlvbk91dHB1dEluZGV4KSYmKGFbaC5mdW5jdGlvbk91dHB1dEluZGV4XT1oKTticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybihjLm5hbWUrIiBpcyBvZGRseSBuZWl0aGVyIGEgbWV0YW5vZGUgbm9yIGFuIG9wbm9kZS4iKX19KSx0aGlzLmNsb25lTGlicmFyeU1ldGFub2RlRWRnZXMobixzLGksbyksc31jbG9uZUxpYnJhcnlNZXRhbm9kZUVkZ2VzKHQscixuLGkpe21lLmVhY2godC5tZXRhZ3JhcGguZWRnZXMoKSxvPT57bGV0IGE9dC5tZXRhZ3JhcGguZWRnZShvKSxzPWEudi5yZXBsYWNlKG4saSksbD1hLncucmVwbGFjZShuLGkpLGM9bmV3IHFmKHMsbCk7Yy5pbmJvdW5kPWEuaW5ib3VuZCxjLm51bVJlZ3VsYXJFZGdlcz1hLm51bVJlZ3VsYXJFZGdlcyxjLm51bUNvbnRyb2xFZGdlcz1hLm51bUNvbnRyb2xFZGdlcyxjLm51bVJlZkVkZ2VzPWEubnVtUmVmRWRnZXMsYy50b3RhbFNpemU9YS50b3RhbFNpemUsYS5iYXNlRWRnZUxpc3QmJihjLmJhc2VFZGdlTGlzdD1hLmJhc2VFZGdlTGlzdC5tYXAodT0+e2xldCBoPW1lLmNsb25lKHUpO3JldHVybiBoLnY9dS52LnJlcGxhY2UobixpKSxoLnc9dS53LnJlcGxhY2UobixpKSxofSkpLHIubWV0YWdyYXBoLm5vZGUobCk/ci5tZXRhZ3JhcGguc2V0RWRnZShzLGwsYyk6ci5tZXRhZ3JhcGguc2V0RWRnZShsLHMsYyl9KX1wYXRjaEVkZ2VzSW50b0Z1bmN0aW9uSW5wdXRzKHQscil7bGV0IG49TWF0aC5taW4oci5mdW5jdGlvbklucHV0SW5kZXgsdC5pbnB1dHMubGVuZ3RoLTEpLGk9bWUuY2xvbmUodC5pbnB1dHNbbl0pO2Zvcig7aS5pc0NvbnRyb2xEZXBlbmRlbmN5OyluKyssaT10LmlucHV0c1tuXTtyLmlucHV0cy5wdXNoKGkpO2xldCBvPXRoaXMuaGllcmFyY2h5LmdldFByZWRlY2Vzc29ycyh0Lm5hbWUpLGEscz0wO21lLmVhY2goby5yZWd1bGFyLGw9PntpZihzKz1sLm51bVJlZ3VsYXJFZGdlcyxzPm4pcmV0dXJuIGE9bCwhMX0pLG1lLmVhY2goYS5iYXNlRWRnZUxpc3QsbD0+e2wudz09PXQubmFtZSYmKGwudz1yLm5hbWUpLGwudj09PXQubmFtZSYmKGwudj1yLm5hbWUpfSl9cGF0Y2hFZGdlc0Zyb21GdW5jdGlvbk91dHB1dHModCxyKXtsZXQgbj10aGlzLmhpZXJhcmNoeS5nZXRTdWNjZXNzb3JzKHQubmFtZSk7bWUuZWFjaChuLnJlZ3VsYXIsaT0+e21lLmVhY2goaS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPXRoaXMuaGllcmFyY2h5Lm5vZGUoby53KTttZS5lYWNoKGEuaW5wdXRzLHM9PntpZihzLm5hbWU9PT10Lm5hbWUpe2xldCBsPXJbcy5vdXRwdXRUZW5zb3JLZXldO3MubmFtZT1sLm5hbWUscy5vdXRwdXRUZW5zb3JLZXk9by5vdXRwdXRUZW5zb3JLZXl9fSl9KSxtZS5lYWNoKGkuYmFzZUVkZ2VMaXN0LG89PntvLnY9cltvLm91dHB1dFRlbnNvcktleV0ubmFtZSxvLm91dHB1dFRlbnNvcktleT0iMCJ9KX0pfWJ1aWxkU3ViaGllcmFyY2h5KHQpe2lmKHQgaW4gdGhpcy5oYXNTdWJoaWVyYXJjaHkpcmV0dXJuO3RoaXMuaGFzU3ViaGllcmFyY2h5W3RdPSEwO2xldCByPXRoaXMuaW5kZXhbdF07aWYoci5ub2RlLnR5cGUhPT1qdC5NRVRBJiZyLm5vZGUudHlwZSE9PWp0LlNFUklFUylyZXR1cm47bGV0IG49cixpPW4ubm9kZS5tZXRhZ3JhcGgsbz1uLmNvcmVHcmFwaCxhPVtdLHM9W107bWUuaXNFbXB0eSh0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zKXx8KG1lLmVhY2goaS5ub2RlcygpLGQ9PntsZXQgZz1pLm5vZGUoZCksXz10aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2cub3BdO2lmKCFffHxkLmluZGV4T2YoU2EpPT09MClyZXR1cm47bGV0IHk9dGhpcy5jbG9uZUZ1bmN0aW9uTGlicmFyeU1ldGFub2RlKGksZyxfLm5vZGUsXy5ub2RlLm5hbWUsZy5uYW1lKTthLnB1c2goZykscy5wdXNoKHkpfSksbWUuZWFjaChzLChkLGcpPT57bGV0IF89YVtnXTtkLnBhcmVudE5vZGU9Xy5wYXJlbnROb2RlLGkuc2V0Tm9kZShfLm5hbWUsZCksdGhpcy5oaWVyYXJjaHkuc2V0Tm9kZShfLm5hbWUsZCl9KSksbWUuZWFjaChpLm5vZGVzKCksZD0+e2xldCBnPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKGQpLF89Zy5ub2RlO28uc2V0Tm9kZShkLGcpLF8uaXNHcm91cE5vZGV8fChtZS5lYWNoKF8uaW5FbWJlZGRpbmdzLHk9PntsZXQgeD1uZXcgT2QobnVsbCksYj1uZXcgR2YoeSk7aGxlKGcseSxiLHgsX2kuQ09OU1RBTlQpLHRoaXMuaW5kZXhbeS5uYW1lXT1ifSksbWUuZWFjaChfLm91dEVtYmVkZGluZ3MseT0+e2xldCB4PW5ldyBPZChudWxsKSxiPW5ldyBHZih5KTtmbGUoZyx5LGIseCxfaS5TVU1NQVJZKSx0aGlzLmluZGV4W3kubmFtZV09Yn0pKX0pLG1lLmVhY2goaS5lZGdlcygpLGQ9PntsZXQgZz1pLmVkZ2UoZCksXz1uZXcgT2QoZyk7Xy5pc0ZhZGVkT3V0PXRoaXMuaW5kZXhbZC52XS5pc0ZhZGVkT3V0fHx0aGlzLmluZGV4W2Qud10uaXNGYWRlZE91dCxvLnNldEVkZ2UoZC52LGQudyxfKX0pLG4ubm9kZS50eXBlPT09anQuTUVUQSYmTWNyKG4sdGhpcy5hdXRvRXh0cmFjdE5vZGVzKSxtZS5pc0VtcHR5KHRoaXMuaGllcmFyY2h5LmxpYnJhcnlGdW5jdGlvbnMpfHx0aGlzLmJ1aWxkU3ViaGllcmFyY2hpZXNGb3JOZWVkZWRGdW5jdGlvbnMoaSksdD09PXFjJiZtZS5mb3JPd24odGhpcy5oaWVyYXJjaHkubGlicmFyeUZ1bmN0aW9ucywoZCxnKT0+e2xldCBfPWQubm9kZSx5PXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKF8ubmFtZSk7bi5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5wdXNoKHkpLHkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsby5yZW1vdmVOb2RlKF8ubmFtZSl9KTtsZXQgbD1uLm5vZGUucGFyZW50Tm9kZTtpZighbClyZXR1cm47bGV0IGM9dGhpcy5pbmRleFtsLm5hbWVdLHU9KGQsLi4uZyk9PmcuY29uY2F0KFtkPyJJTiI6Ik9VVCJdKS5qb2luKCJ+fiIpLGg9dGhpcy5oaWVyYXJjaHkuZ2V0QnJpZGdlZ3JhcGgodCksZj17aW46e30sb3V0Ont9LGNvbnRyb2w6e319O21lLmVhY2goaC5lZGdlcygpLGQ9PntsZXQgZz0hIWkubm9kZShkLncpLF89Zz9kLnY6ZC53O2guZWRnZShkKS5udW1SZWd1bGFyRWRnZXM/Zz9mLm91dFtfXT0oZi5vdXRbX118fDApKzE6Zi5pbltfXT0oZi5pbltfXXx8MCkrMTpmLmNvbnRyb2xbX109KGYuY29udHJvbFtfXXx8MCkrMX0pO2xldCBwPXRoaXMuaGllcmFyY2h5LmdldE5vZGVNYXAoKTttZS5lYWNoKGguZWRnZXMoKSxkPT57bGV0IGc9aC5lZGdlKGQpLF89ISFpLm5vZGUoZC53KSxbeSx4XT1fP1tkLncsZC52XTpbZC52LGQud10sYj10aGlzLmluZGV4W3ldLFM9dGhpcy5pbmRleFt4XSxDPVM/Uy5ub2RlOnBbeF0sUD0hZy5udW1SZWd1bGFyRWRnZXMmJmYuY29udHJvbFt4XT5Yby5tYXhDb250cm9sRGVncmVlLFssa109Xz9bci5pbkFubm90YXRpb25zLGIuaW5Bbm5vdGF0aW9uc106W3Iub3V0QW5ub3RhdGlvbnMsYi5vdXRBbm5vdGF0aW9uc10sRD0oXz9mLm91dDpmLmluKVt4XT5Yby5tYXhCcmlkZ2VQYXRoRGVncmVlLEI9bnVsbCxJPSExO2lmKFhvLmVuYWJsZUJyaWRnZWdyYXBoJiYhRCYmIVAmJmIuaXNJbkNvcmUoKSl7bGV0IFc9Wj0+e2xldCBydD1fP3t2Olosdzp0fTp7djp0LHc6Wn07cmV0dXJuIGMuY29yZUdyYXBoLmVkZ2UocnQpfTtCPVcoeCksQnx8KEI9Vyh1KF8seCxsLm5hbWUpKSksST0hIUJ9bGV0IEw9ITE7aWYoQiYmIWcubnVtUmVndWxhckVkZ2VzKXtsZXQgVz1CLFo9Yy5ub2RlO2Zvcig7Vy5hZGpvaW5pbmdNZXRhZWRnZTspVz1XLmFkam9pbmluZ01ldGFlZGdlLFo9Wi5wYXJlbnROb2RlO2xldCBydD10aGlzLmhpZXJhcmNoeS5nZXRUb3BvbG9naWNhbE9yZGVyaW5nKFoubmFtZSksb3Q9Vy5tZXRhZWRnZTtMPXJ0W290LnZdPnJ0W290LnddfWlmKEk9SSYmIUwsIUkpe2sucHVzaChuZXcgaTMoQyxTLG5ldyBPZChnKSxfaS5TSE9SVENVVCxfKSk7cmV0dXJufWxldCBSPXUoXyx0KSxGPXUoXyx4LHQpLHo9by5ub2RlKEYpO2lmKCF6KXtsZXQgVz1vLm5vZGUoUik7aWYoIVcpe2xldCBydD17bmFtZTpSLHR5cGU6anQuQlJJREdFLGlzR3JvdXBOb2RlOiExLGNhcmRpbmFsaXR5OjAscGFyZW50Tm9kZTpudWxsLHN0YXRzOm51bGwsaW5jbHVkZTp1ci5VTlNQRUNJRklFRCxpbmJvdW5kOl8sbm9kZUF0dHJpYnV0ZXM6e319O1c9bmV3IEdmKHJ0KSx0aGlzLmluZGV4W1JdPVcsby5zZXROb2RlKFIsVyl9bGV0IFo9e25hbWU6Rix0eXBlOmp0LkJSSURHRSxpc0dyb3VwTm9kZTohMSxjYXJkaW5hbGl0eToxLHBhcmVudE5vZGU6bnVsbCxzdGF0czpudWxsLGluY2x1ZGU6dXIuVU5TUEVDSUZJRUQsaW5ib3VuZDpfLG5vZGVBdHRyaWJ1dGVzOnt9fTt6PW5ldyBHZihaKSx0aGlzLmluZGV4W0ZdPXosby5zZXROb2RlKEYseiksby5zZXRQYXJlbnQoRixSKSxXLm5vZGUuY2FyZGluYWxpdHkrK31sZXQgVT1uZXcgT2QoZyk7VS5hZGpvaW5pbmdNZXRhZWRnZT1CLF8/by5zZXRFZGdlKEYseSxVKTpvLnNldEVkZ2UoeSxGLFUpfSksbWUuZWFjaChbITAsITFdLGQ9PntsZXQgZz11KGQsdCksXz1vLm5vZGUoZyk7IV98fG1lLmVhY2goby5ub2RlcygpLHk9Pnt2YXIgayxPO2lmKG8ubm9kZSh5KS5ub2RlLnR5cGU9PT1qdC5CUklER0V8fCEoZD8hKChrPW8ucHJlZGVjZXNzb3JzKHkpKSE9bnVsbCYmay5sZW5ndGgpOiEoKE89by5zdWNjZXNzb3JzKHkpKSE9bnVsbCYmTy5sZW5ndGgpKSlyZXR1cm47bGV0IFM9dShkLHQsIlNUUlVDVFVSQUxfVEFSR0VUIiksQz1vLm5vZGUoUyk7aWYoIUMpe2xldCBEPXtuYW1lOlMsdHlwZTpqdC5CUklER0UsaXNHcm91cE5vZGU6ITEsY2FyZGluYWxpdHk6MSxwYXJlbnROb2RlOm51bGwsc3RhdHM6bnVsbCxpbmNsdWRlOnVyLlVOU1BFQ0lGSUVELGluYm91bmQ6ZCxub2RlQXR0cmlidXRlczp7fX07Qz1uZXcgR2YoRCksQy5zdHJ1Y3R1cmFsPSEwLHRoaXMuaW5kZXhbU109QyxvLnNldE5vZGUoUyxDKSxfLm5vZGUuY2FyZGluYWxpdHkrKyxvLnNldFBhcmVudChTLGcpfWxldCBQPW5ldyBPZChudWxsKTtQLnN0cnVjdHVyYWw9ITAsUC53ZWlnaHQtLSxkP28uc2V0RWRnZShTLHksUCk6by5zZXRFZGdlKHksUyxQKX0pfSl9YnVpbGRTdWJoaWVyYXJjaGllc0Zvck5lZWRlZEZ1bmN0aW9ucyh0KXttZS5lYWNoKHQuZWRnZXMoKSxyPT57bGV0IG49dC5lZGdlKHIpLGk9bmV3IE9kKG4pO21lLmZvckVhY2goaS5tZXRhZWRnZS5iYXNlRWRnZUxpc3Qsbz0+e2xldCBhPW8udi5zcGxpdChBbCk7Zm9yKGxldCBzPWEubGVuZ3RoO3M+PTA7cy0tKXtsZXQgbD1hLnNsaWNlKDAscyksYz10aGlzLmhpZXJhcmNoeS5ub2RlKGwuam9pbihBbCkpO2lmKGMpe2lmKGMudHlwZT09PWp0Lk9QJiZ0aGlzLmhpZXJhcmNoeS5saWJyYXJ5RnVuY3Rpb25zW2Mub3BdKWZvcihsZXQgdT0xO3U8bC5sZW5ndGg7dSsrKXtsZXQgaD1sLnNsaWNlKDAsdSkuam9pbihBbCk7IWh8fHRoaXMuYnVpbGRTdWJoaWVyYXJjaHkoaCl9YnJlYWt9fX0pfSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpLG8pe3RoaXMubm9kZT10LHRoaXMucmVuZGVyTm9kZUluZm89cix0aGlzLnJlbmRlck1ldGFlZGdlSW5mbz1uLHRoaXMuYW5ub3RhdGlvblR5cGU9aSx0aGlzLmR4PTAsdGhpcy5keT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLG4mJm4ubWV0YWVkZ2UmJih0aGlzLnY9bi5tZXRhZWRnZS52LHRoaXMudz1uLm1ldGFlZGdlLncpLHRoaXMuaXNJbj1vLHRoaXMucG9pbnRzPVtdfX0sX2k7KGZ1bmN0aW9uKGUpe2VbZS5TSE9SVENVVD0wXT0iU0hPUlRDVVQiLGVbZS5DT05TVEFOVD0xXT0iQ09OU1RBTlQiLGVbZS5TVU1NQVJZPTJdPSJTVU1NQVJZIixlW2UuRUxMSVBTSVM9M109IkVMTElQU0lTIn0pKF9pfHwoX2k9e30pKTt2YXIgYkg9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3Q9W10sdGhpcy5ub2RlTmFtZXM9e319cHVzaCh0KXtpZih0Lm5vZGUubmFtZSBpbiB0aGlzLm5vZGVOYW1lcylyZXR1cm47aWYodGhpcy5ub2RlTmFtZXNbdC5ub2RlLm5hbWVdPSEwLHRoaXMubGlzdC5sZW5ndGg8WG8ubWF4QW5ub3RhdGlvbnMpe3RoaXMubGlzdC5wdXNoKHQpO3JldHVybn1sZXQgcj10aGlzLmxpc3RbdGhpcy5saXN0Lmxlbmd0aC0xXTtpZihyLmFubm90YXRpb25UeXBlPT09X2kuRUxMSVBTSVMpe2xldCBpPXIubm9kZTtpLnNldE51bU1vcmVOb2RlcygrK2kubnVtTW9yZU5vZGVzKTtyZXR1cm59bGV0IG49bmV3IGdIKDEpO3RoaXMubGlzdC5wdXNoKG5ldyBpMyhuLG5ldyBHZihuKSxudWxsLF9pLkVMTElQU0lTLHQuaXNJbikpfX0sR2Y9Y2xhc3N7Y29uc3RydWN0b3IodCl7aWYodGhpcy5ub2RlPXQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmluQW5ub3RhdGlvbnM9bmV3IGJILHRoaXMub3V0QW5ub3RhdGlvbnM9bmV3IGJILHRoaXMueD0wLHRoaXMueT0wLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuaW5ib3hXaWR0aD0wLHRoaXMub3V0Ym94V2lkdGg9MCx0aGlzLmV4Y2x1ZGVkPSExLHRoaXMuc3RydWN0dXJhbD0hMSx0aGlzLmxhYmVsT2Zmc2V0PTAsdGhpcy5yYWRpdXM9MCx0aGlzLmxhYmVsSGVpZ2h0PTAsdGhpcy5wYWRkaW5nVG9wPTAsdGhpcy5wYWRkaW5nTGVmdD0wLHRoaXMucGFkZGluZ1JpZ2h0PTAsdGhpcy5wYWRkaW5nQm90dG9tPTAsdGhpcy5pc0luRXh0cmFjdD0hMSx0aGlzLmlzT3V0RXh0cmFjdD0hMSx0aGlzLmNvcmVCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNGYWRlZE91dD0hMSx0aGlzLmRpc3BsYXlOYW1lPXQubmFtZS5zdWJzdHJpbmcodC5uYW1lLmxhc3RJbmRleE9mKEFsKSsxKSx0LnR5cGU9PT1qdC5NRVRBJiZ0LmFzc29jaWF0ZWRGdW5jdGlvbil7bGV0IHI9dGhpcy5kaXNwbGF5TmFtZS5tYXRjaChfY3IpO3I/dGhpcy5kaXNwbGF5TmFtZT1yWzFdOm1lLnN0YXJ0c1dpdGgodGhpcy5kaXNwbGF5TmFtZSxTYSkmJih0aGlzLmRpc3BsYXlOYW1lPXRoaXMuZGlzcGxheU5hbWUuc3Vic3RyaW5nKFNhLmxlbmd0aCkpfX1pc0luQ29yZSgpe3JldHVybiF0aGlzLmlzSW5FeHRyYWN0JiYhdGhpcy5pc091dEV4dHJhY3QmJiF0aGlzLmlzTGlicmFyeUZ1bmN0aW9ufX0sT2Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5tZXRhZWRnZT10LHRoaXMuYWRqb2luaW5nTWV0YWVkZ2U9bnVsbCx0aGlzLnN0cnVjdHVyYWw9ITEsdGhpcy53ZWlnaHQ9MSx0aGlzLmlzRmFkZWRPdXQ9ITF9fTtmdW5jdGlvbiBobGUoZSx0LHIsbixpKXtsZXQgbz1uZXcgaTModCxyLG4saSwhMCk7ZS5pbkFubm90YXRpb25zLnB1c2gobyl9ZnVuY3Rpb24gZmxlKGUsdCxyLG4saSl7bGV0IG89bmV3IGkzKHQscixuLGksITEpO2Uub3V0QW5ub3RhdGlvbnMucHVzaChvKX1mdW5jdGlvbiB5Y3IoZSx0KXttZS5lYWNoKGUubm9kZXMoKSxyPT57bGV0IG49ZS5ub2RlKHIpO2lmKG4uZXhwYW5kZWQ9dD4xLHQ+MClzd2l0Y2gobi5ub2RlLnR5cGUpe2Nhc2UganQuTUVUQTpjYXNlIGp0LlNFUklFUzpwbGUobix0LTEpO2JyZWFrfX0pfXZhciB3SD1jbGFzcyBleHRlbmRzIEdme2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCk7bGV0IGk9dC5tZXRhZ3JhcGguZ3JhcGgoKTt0aGlzLmNvcmVHcmFwaD1lMyhpLm5hbWUsZzAuQ09SRSxyKSx0aGlzLmluRXh0cmFjdEJveD17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5vdXRFeHRyYWN0Qm94PXt3aWR0aDowLGhlaWdodDowfSx0aGlzLmxpYnJhcnlGdW5jdGlvbnNCb3g9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuaXNvbGF0ZWRJbkV4dHJhY3Q9W10sdGhpcy5pc29sYXRlZE91dEV4dHJhY3Q9W10sdGhpcy5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdD1bXX19O2Z1bmN0aW9uIHBsZShlLHQpe2UuY29yZUdyYXBoJiZ5Y3IoZS5jb3JlR3JhcGgsdCl9ZnVuY3Rpb24gY1AoZSx0LHIpe2xldCBuPWUubm9kZSh0KSxpPWUubm9kZShyKSxvPWUuZWRnZSh0LHIpOyhuLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREV8fGkubm9kZS5pbmNsdWRlPT09dXIuSU5DTFVERSkmJm4ubm9kZS5pbmNsdWRlIT09dXIuRVhDTFVERSYmaS5ub2RlLmluY2x1ZGUhPT11ci5FWENMVURFfHwoZmxlKG4saS5ub2RlLGksbyxfaS5TSE9SVENVVCksaGxlKGksbi5ub2RlLG4sbyxfaS5TSE9SVENVVCksZS5yZW1vdmVFZGdlKHQscikpfWZ1bmN0aW9uIHFsdChlLHQscil7dmFyIG87bGV0IG49ZS5jb3JlR3JhcGgsaT1uLm5vZGUodCk7aS5pc091dEV4dHJhY3Q9ITAsbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e2NQKG4sYSx0KX0pLChYby5kZXRhY2hBbGxFZGdlc0ZvckhpZ2hEZWdyZWV8fHIpJiZtZS5lYWNoKG4uc3VjY2Vzc29ycyh0KSwoYSxzKT0+e2NQKG4sdCxhKX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRPdXRFeHRyYWN0LnB1c2goaSksbi5yZW1vdmVOb2RlKHQpKX1mdW5jdGlvbiBHbHQoZSx0LHIpe3ZhciBvO2xldCBuPWUuY29yZUdyYXBoLGk9bi5ub2RlKHQpO2kuaXNJbkV4dHJhY3Q9ITAsbWUuZWFjaChuLnN1Y2Nlc3NvcnModCksKGEscyk9PntjUChuLHQsYSl9KSwoWG8uZGV0YWNoQWxsRWRnZXNGb3JIaWdoRGVncmVlfHxyKSYmbWUuZWFjaChuLnByZWRlY2Vzc29ycyh0KSwoYSxzKT0+e2NQKG4sYSx0KX0pLCgobz1uLm5laWdoYm9ycyh0KSk9PW51bGw/dm9pZCAwOm8ubGVuZ3RoKT09PTAmJihpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLGUuaXNvbGF0ZWRJbkV4dHJhY3QucHVzaChpKSxuLnJlbW92ZU5vZGUodCkpfWZ1bmN0aW9uIGRsZShlLHQpe2lmKGUudHlwZT09PWp0Lk9QKXtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZihlLm9wPT09dFtyXSlyZXR1cm4hMH1lbHNlIGlmKGUudHlwZT09PWp0Lk1FVEEpe2xldCByPWUuZ2V0Um9vdE9wKCk7aWYocil7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspaWYoci5vcD09PXRbbl0pcmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHZjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57dmFyIGksbzt0Lm5vZGUocikubm9kZS5pbmNsdWRlPT09dXIuRVhDTFVERSYmIXIuc3RhcnRzV2l0aChTYSkmJigoKGk9ZS5jb3JlR3JhcGgub3V0RWRnZXMocikpPT1udWxsP3ZvaWQgMDppLmxlbmd0aCk+KChvPWUuY29yZUdyYXBoLmluRWRnZXMocikpPT1udWxsP3ZvaWQgMDpvLmxlbmd0aCk/cWx0KGUsciwhMCk6R2x0KGUsciwhMCkpfSl9ZnVuY3Rpb24geGNyKGUpe2xldCB0PWUuY29yZUdyYXBoO21lLmVhY2godC5ub2RlcygpLHI9PntsZXQgbj10Lm5vZGUocik7bi5ub2RlLmluY2x1ZGU9PT11ci5VTlNQRUNJRklFRCYmZGxlKG4ubm9kZSxYby5vdXRFeHRyYWN0VHlwZXMpJiZxbHQoZSxyKX0pfWZ1bmN0aW9uIGJjcihlKXtsZXQgdD1lLmNvcmVHcmFwaDttZS5lYWNoKHQubm9kZXMoKSxyPT57bGV0IG49dC5ub2RlKHIpO24ubm9kZS5pbmNsdWRlPT09dXIuVU5TUEVDSUZJRUQmJmRsZShuLm5vZGUsWG8uaW5FeHRyYWN0VHlwZXMpJiZHbHQoZSxyKX0pfWZ1bmN0aW9uIHdjcihlKXtsZXQgdD1lLmNvcmVHcmFwaCxyPXt9LG49e30saT0wO2lmKG1lLmVhY2godC5ub2RlcygpLF89Pnt2YXIgYixTLEMsUDtpZih0Lm5vZGUoXykubm9kZS5pbmNsdWRlIT09dXIuVU5TUEVDSUZJRUQpcmV0dXJuO2xldCB5PW1lLnJlZHVjZSh0LnByZWRlY2Vzc29ycyhfKSwoayxPKT0+e2xldCBEPXQuZWRnZShPLF8pLm1ldGFlZGdlO3JldHVybiBrKyhELm51bVJlZ3VsYXJFZGdlcz8xOjApfSwwKTt5PT09MCYmKChiPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Yi5sZW5ndGgpPjAmJih5PShTPXQucHJlZGVjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6Uy5sZW5ndGgpO2xldCB4PW1lLnJlZHVjZSh0LnN1Y2Nlc3NvcnMoXyksKGssTyk9PntsZXQgRD10LmVkZ2UoXyxPKS5tZXRhZWRnZTtyZXR1cm4gaysoRC5udW1SZWd1bGFyRWRnZXM/MTowKX0sMCk7eD09PTAmJigoQz10LnN1Y2Nlc3NvcnMoXykpPT1udWxsP3ZvaWQgMDpDLmxlbmd0aCk+MCYmKHg9KFA9dC5zdWNjZXNzb3JzKF8pKT09bnVsbD92b2lkIDA6UC5sZW5ndGgpLHJbX109eSxuW19dPXgsaSsrfSksaTxYby5taW5Ob2RlQ291bnRGb3JFeHRyYWN0aW9uKXJldHVybjtsZXQgbz1Yby5taW5EZWdyZWVGb3JFeHRyYWN0aW9uLTEsYT1NYXRoLnJvdW5kKGkqLjc1KSxzPU1hdGgucm91bmQoaSouMjUpLGw9T2JqZWN0LmtleXMocikuc29ydCgoXyx5KT0+cltfXS1yW3ldKSxjPXJbbFthXV0sdT1yW2xbc11dLGg9YytjLXU7aD1NYXRoLm1heChoLG8pO2ZvcihsZXQgXz1pLTE7cltsW19dXT5oO18tLSlHbHQoZSxsW19dKTtsZXQgZj1PYmplY3Qua2V5cyhuKS5zb3J0KChfLHkpPT5uW19dLW5beV0pLHA9bltmW2FdXSxkPW5bZltzXV0sZz1wKyhwLWQpKjQ7Zz1NYXRoLm1heChnLG8pO2ZvcihsZXQgXz1pLTE7bltmW19dXT5nO18tLSl7bGV0IHk9dC5ub2RlKGZbX10pOyF5fHx5LmlzSW5FeHRyYWN0fHxxbHQoZSxmW19dKX19ZnVuY3Rpb24gU2NyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9e307bWUuZWFjaCh0LmVkZ2VzKCksbj0+e3QuZWRnZShuKS5tZXRhZWRnZS5udW1SZWd1bGFyRWRnZXN8fCgocltuLnZdPXJbbi52XXx8W10pLnB1c2gobiksKHJbbi53XT1yW24ud118fFtdKS5wdXNoKG4pKX0pLG1lLmVhY2gociwobixpKT0+e24ubGVuZ3RoPlhvLm1heENvbnRyb2xEZWdyZWUmJm1lLmVhY2gobixvPT5jUCh0LG8udixvLncpKX0pfWZ1bmN0aW9uIE1jcihlLHQpe3ZjcihlKSxYby5vdXRFeHRyYWN0VHlwZXMubGVuZ3RoJiZ4Y3IoZSksWG8uaW5FeHRyYWN0VHlwZXMubGVuZ3RoJiZiY3IoZSksdCYmd2NyKGUpLFhvLm1heENvbnRyb2xEZWdyZWUmJlNjcihlKTtsZXQgcj1lLmNvcmVHcmFwaDttZS5lYWNoKHIubm9kZXMoKSxuPT57dmFyIGE7bGV0IGk9ci5ub2RlKG4pLG89KGE9ci5uZWlnaGJvcnMobikpPT1udWxsP3ZvaWQgMDphLmxlbmd0aDtpZihpLm5vZGUuaW5jbHVkZT09PXVyLlVOU1BFQ0lGSUVEJiZvPT09MCl7bGV0IHM9aS5vdXRBbm5vdGF0aW9ucy5saXN0Lmxlbmd0aD4wLGw9aS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA7aS5pc0luRXh0cmFjdD8oZS5pc29sYXRlZEluRXh0cmFjdC5wdXNoKGkpLGkubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREUsci5yZW1vdmVOb2RlKG4pKTppLmlzT3V0RXh0cmFjdD8oZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSk6WG8uZXh0cmFjdElzb2xhdGVkTm9kZXNXaXRoQW5ub3RhdGlvbnNPbk9uZVNpZGUmJihzJiYhbD8oaS5pc0luRXh0cmFjdD0hMCxlLmlzb2xhdGVkSW5FeHRyYWN0LnB1c2goaSksaS5ub2RlLmluY2x1ZGU9dXIuRVhDTFVERSxyLnJlbW92ZU5vZGUobikpOmwmJiFzJiYoaS5pc091dEV4dHJhY3Q9ITAsZS5pc29sYXRlZE91dEV4dHJhY3QucHVzaChpKSxpLm5vZGUuaW5jbHVkZT11ci5FWENMVURFLHIucmVtb3ZlTm9kZShuKSkpfX0pfWZ1bmN0aW9uIG1sZShlLHQscil7bGV0IG49ci5zcGxpdCgiLyIpLGk9bltuLmxlbmd0aC0xXS5tYXRjaCgvKC4qKTpcdysvKTsoaT09bnVsbD92b2lkIDA6aS5sZW5ndGgpPT09MiYmKG5bbi5sZW5ndGgtMV09aT09bnVsbD92b2lkIDA6aVsxXSk7bGV0IG89blswXSxhPXQuZ2V0UmVuZGVyTm9kZUJ5TmFtZShvKTtmb3IobGV0IHM9MTtzPG4ubGVuZ3RoJiZhLm5vZGUudHlwZSE9PWp0Lk9QO3MrKyl0LmJ1aWxkU3ViaGllcmFyY2h5KG8pLGEuZXhwYW5kZWQ9ITAsZS5zZXROb2RlRXhwYW5kZWQoYSksbys9Ii8iK25bc10sYT10LmdldFJlbmRlck5vZGVCeU5hbWUobyk7cmV0dXJuIGEubm9kZS5uYW1lfXZhciB2bGU9RWUoemx0KCksMSksWmU9RWUoT2UoKSwxKTt2YXIgVHI9e2FuaW1hdGlvbjp7ZHVyYXRpb246MjUwfSxncmFwaDp7bWV0YTp7bm9kZVNlcDo1LHJhbmtTZXA6MjUsZWRnZVNlcDo1fSxzZXJpZXM6e25vZGVTZXA6NSxyYW5rU2VwOjI1LGVkZ2VTZXA6NX0scGFkZGluZzp7cGFkZGluZ1RvcDo0MCxwYWRkaW5nTGVmdDoyMH19LHN1YnNjZW5lOnttZXRhOntwYWRkaW5nVG9wOjEwLHBhZGRpbmdCb3R0b206MTAscGFkZGluZ0xlZnQ6MTAscGFkZGluZ1JpZ2h0OjEwLGxhYmVsSGVpZ2h0OjIwLGV4dHJhY3RYT2Zmc2V0OjE1LGV4dHJhY3RZT2Zmc2V0OjIwfSxzZXJpZXM6e3BhZGRpbmdUb3A6MTAscGFkZGluZ0JvdHRvbToxMCxwYWRkaW5nTGVmdDoxMCxwYWRkaW5nUmlnaHQ6MTAsbGFiZWxIZWlnaHQ6MTB9fSxub2RlU2l6ZTp7bWV0YTp7cmFkaXVzOjUsd2lkdGg6NjAsbWF4TGFiZWxXaWR0aDo1MixoZWlnaHQ6em4oKS5kb21haW4oWzEsMjAwXSkucmFuZ2UoWzE1LDYwXSkuY2xhbXAoITApLGV4cGFuZEJ1dHRvblJhZGl1czozfSxvcDp7d2lkdGg6MTUsaGVpZ2h0OjYscmFkaXVzOjMsbGFiZWxPZmZzZXQ6LTgsbWF4TGFiZWxXaWR0aDozMH0sc2VyaWVzOntleHBhbmRlZDp7cmFkaXVzOjEwLGxhYmVsT2Zmc2V0OjB9LHZlcnRpY2FsOnt3aWR0aDoxNixoZWlnaHQ6MTMsbGFiZWxPZmZzZXQ6LTEzfSxob3Jpem9udGFsOnt3aWR0aDoyNCxoZWlnaHQ6OCxyYWRpdXM6MTAsbGFiZWxPZmZzZXQ6LTEwfX0sYnJpZGdlOnt3aWR0aDoyMCxoZWlnaHQ6MjAscmFkaXVzOjIsbGFiZWxPZmZzZXQ6MH19LHNob3J0Y3V0U2l6ZTp7b3A6e3dpZHRoOjEwLGhlaWdodDo0fSxtZXRhOnt3aWR0aDoxMixoZWlnaHQ6NCxyYWRpdXM6MX0sc2VyaWVzOnt3aWR0aDoxNCxoZWlnaHQ6NH19LGFubm90YXRpb25zOntpbmJveFdpZHRoOjUwLG91dGJveFdpZHRoOjUwLHhPZmZzZXQ6MTAseU9mZnNldDozLGxhYmVsT2Zmc2V0OjIsbWF4TGFiZWxXaWR0aDo0MH0sY29uc3RhbnQ6e3NpemU6e3dpZHRoOjQsaGVpZ2h0OjR9fSxzZXJpZXM6e21heFN0YWNrQ291bnQ6MyxwYXJhbGxlbFN0YWNrT2Zmc2V0UmF0aW86LjIsdG93ZXJTdGFja09mZnNldFJhdGlvOi41fSxtaW5pbWFwOntzaXplOjE1MH19LG8zPTE0MDtmdW5jdGlvbiBTSChlKXtlLm5vZGUuaXNHcm91cE5vZGUmJlRjcihlKSxlLm5vZGUudHlwZT09PWp0Lk1FVEE/Q2NyKGUpOmUubm9kZS50eXBlPT09anQuU0VSSUVTJiZBY3IoZSl9ZnVuY3Rpb24gRWNyKGUpe2UuaW5ib3hXaWR0aD1lLmluQW5ub3RhdGlvbnMubGlzdC5sZW5ndGg+MD9Uci5hbm5vdGF0aW9ucy5pbmJveFdpZHRoOjAsZS5vdXRib3hXaWR0aD1lLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjA/VHIuYW5ub3RhdGlvbnMub3V0Ym94V2lkdGg6MCxlLmNvcmVCb3gud2lkdGg9ZS53aWR0aCxlLmNvcmVCb3guaGVpZ2h0PWUuaGVpZ2h0O2xldCB0PWUuZGlzcGxheU5hbWUubGVuZ3RoLHI9MztlLndpZHRoPU1hdGgubWF4KGUuY29yZUJveC53aWR0aCtlLmluYm94V2lkdGgrZS5vdXRib3hXaWR0aCx0KnIpfWZ1bmN0aW9uIFRjcihlKXtsZXQgdD1lLmNvcmVHcmFwaC5ub2RlcygpLm1hcChyPT5lLmNvcmVHcmFwaC5ub2RlKHIpKS5jb25jYXQoZS5pc29sYXRlZEluRXh0cmFjdCxlLmlzb2xhdGVkT3V0RXh0cmFjdCxlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0KTtaZS5lYWNoKHQscj0+e3N3aXRjaChyLm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpaZS5leHRlbmQocixUci5ub2RlU2l6ZS5vcCk7YnJlYWs7Y2FzZSBqdC5CUklER0U6WmUuZXh0ZW5kKHIsVHIubm9kZVNpemUuYnJpZGdlKTticmVhaztjYXNlIGp0Lk1FVEE6ci5leHBhbmRlZD9TSChyKTooWmUuZXh0ZW5kKHIsVHIubm9kZVNpemUubWV0YSksci5oZWlnaHQ9VHIubm9kZVNpemUubWV0YS5oZWlnaHQoci5ub2RlLmNhcmRpbmFsaXR5KSk7YnJlYWs7Y2FzZSBqdC5TRVJJRVM6aWYoci5leHBhbmRlZClaZS5leHRlbmQocixUci5ub2RlU2l6ZS5zZXJpZXMuZXhwYW5kZWQpLFNIKHIpO2Vsc2V7bGV0IGk9ci5ub2RlLmhhc05vbkNvbnRyb2xFZGdlcz9Uci5ub2RlU2l6ZS5zZXJpZXMudmVydGljYWw6VHIubm9kZVNpemUuc2VyaWVzLmhvcml6b250YWw7WmUuZXh0ZW5kKHIsaSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIityLm5vZGUudHlwZSl9ci5leHBhbmRlZHx8RWNyKHIpLFBjcihyKX0pfWZ1bmN0aW9uIHhsZShlLHQpe1plLmV4dGVuZChlLmdyYXBoKCkse25vZGVzZXA6dC5ub2RlU2VwLHJhbmtzZXA6dC5yYW5rU2VwLGVkZ2VzZXA6dC5lZGdlU2VwfSk7bGV0IHI9W10sbj1bXTtpZihaZS5lYWNoKGUubm9kZXMoKSxsPT57ZS5ub2RlKGwpLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnB1c2gobCk6bi5wdXNoKGwpfSksIW4ubGVuZ3RoKXJldHVybnt3aWR0aDowLGhlaWdodDowfTt2bGUubGF5b3V0KGUpO2xldCBpPTEvMCxvPTEvMCxhPS0xLzAscz0tMS8wO3JldHVybiBaZS5lYWNoKG4sbD0+e2xldCBjPWUubm9kZShsKSx1PS41KmMud2lkdGgsaD1jLngtdSxmPWMueCt1O2k9aDxpP2g6aSxhPWY+YT9mOmE7bGV0IHA9LjUqYy5oZWlnaHQsZD1jLnktcCxnPWMueStwO289ZDxvP2Q6byxzPWc+cz9nOnN9KSxaZS5lYWNoKGUuZWRnZXMoKSxsPT57bGV0IGM9ZS5lZGdlKGwpO2lmKGMuc3RydWN0dXJhbClyZXR1cm47bGV0IHU9ZS5ub2RlKGMubWV0YWVkZ2UudiksaD1lLm5vZGUoYy5tZXRhZWRnZS53KTtpZihjLnBvaW50cy5sZW5ndGg9PT0zJiZJY3IoYy5wb2ludHMpKXtpZih1IT1udWxsKXtsZXQgZD11LmV4cGFuZGVkP3UueDp2MCh1KTtjLnBvaW50c1swXS54PWR9aWYoaCE9bnVsbCl7bGV0IGQ9aC5leHBhbmRlZD9oLng6djAoaCk7Yy5wb2ludHNbMl0ueD1kfWMucG9pbnRzPVtjLnBvaW50c1swXSxjLnBvaW50c1sxXV19bGV0IGY9Yy5wb2ludHNbYy5wb2ludHMubGVuZ3RoLTJdO2ghPW51bGwmJihjLnBvaW50c1tjLnBvaW50cy5sZW5ndGgtMV09eWxlKGYsaCkpO2xldCBwPWMucG9pbnRzWzFdO3UhPW51bGwmJihjLnBvaW50c1swXT15bGUocCx1KSksWmUuZWFjaChjLnBvaW50cyxkPT57aT1kLng8aT9kLng6aSxhPWQueD5hP2QueDphLG89ZC55PG8/ZC55Om8scz1kLnk+cz9kLnk6c30pfSksWmUuZWFjaChlLm5vZGVzKCksbD0+e2xldCBjPWUubm9kZShsKTtjLngtPWksYy55LT1vfSksWmUuZWFjaChlLmVkZ2VzKCksbD0+e1plLmVhY2goZS5lZGdlKGwpLnBvaW50cyxjPT57Yy54LT1pLGMueS09b30pfSkse3dpZHRoOmEtaSxoZWlnaHQ6cy1vfX1mdW5jdGlvbiBDY3IoZSl7bGV0IHQ9VHIuc3Vic2NlbmUubWV0YTtaZS5leHRlbmQoZSx0KSxaZS5leHRlbmQoZS5jb3JlQm94LHhsZShlLmNvcmVHcmFwaCxUci5ncmFwaC5tZXRhKSk7bGV0IHI9ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg/WmUubWF4QnkoZS5pc29sYXRlZEluRXh0cmFjdCxjPT5jLndpZHRoKS53aWR0aDpudWxsO2UuaW5FeHRyYWN0Qm94LndpZHRoPXIhPW51bGw/cjowLGUuaW5FeHRyYWN0Qm94LmhlaWdodD1aZS5yZWR1Y2UoZS5pc29sYXRlZEluRXh0cmFjdCwoYyx1LGgpPT57bGV0IGY9aD4wP3QuZXh0cmFjdFlPZmZzZXQ6MDtyZXR1cm4gdS54PTAsdS55PWMrZit1LmhlaWdodC8yLGMrZit1LmhlaWdodH0sMCk7bGV0IG49ZS5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoP1plLm1heEJ5KGUuaXNvbGF0ZWRPdXRFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5vdXRFeHRyYWN0Qm94LndpZHRoPW4hPW51bGw/bjowLGUub3V0RXh0cmFjdEJveC5oZWlnaHQ9WmUucmVkdWNlKGUuaXNvbGF0ZWRPdXRFeHRyYWN0LChjLHUsaCk9PntsZXQgZj1oPjA/dC5leHRyYWN0WU9mZnNldDowO3JldHVybiB1Lng9MCx1Lnk9YytmK3UuaGVpZ2h0LzIsYytmK3UuaGVpZ2h0fSwwKTtsZXQgaT1lLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD9aZS5tYXhCeShlLmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0LGM9PmMud2lkdGgpLndpZHRoOm51bGw7ZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoPWkhPW51bGw/aTowLGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQ9WmUucmVkdWNlKGUubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3QsKGMsdSxoKT0+e2xldCBmPWg+MD90LmV4dHJhY3RZT2Zmc2V0OjA7cmV0dXJuIHUueD0wLHUueT1jK2YrdS5oZWlnaHQvMixjK2YrdS5oZWlnaHR9LDApO2xldCBvPTA7ZS5pc29sYXRlZEluRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuaXNvbGF0ZWRPdXRFeHRyYWN0Lmxlbmd0aD4wJiZvKyssZS5saWJyYXJ5RnVuY3Rpb25zRXh0cmFjdC5sZW5ndGg+MCYmbysrLGUuY29yZUdyYXBoLm5vZGVDb3VudCgpPjAmJm8rKztsZXQgYT1Uci5zdWJzY2VuZS5tZXRhLmV4dHJhY3RYT2Zmc2V0LHM9bzw9MT8wOm8qYSxsPU1hdGgubWF4KG8zLGUuaW5FeHRyYWN0Qm94LndpZHRoK2Uub3V0RXh0cmFjdEJveC53aWR0aCk7ZS5jb3JlQm94LndpZHRoKz1sK3MrZS5saWJyYXJ5RnVuY3Rpb25zQm94LndpZHRoK3MsZS5jb3JlQm94LmhlaWdodD10LmxhYmVsSGVpZ2h0K01hdGgubWF4KGUuaW5FeHRyYWN0Qm94LmhlaWdodCxlLmNvcmVCb3guaGVpZ2h0LGUubGlicmFyeUZ1bmN0aW9uc0JveC5oZWlnaHQsZS5vdXRFeHRyYWN0Qm94LmhlaWdodCksZS53aWR0aD1lLmNvcmVCb3gud2lkdGgrdC5wYWRkaW5nTGVmdCt0LnBhZGRpbmdSaWdodCxlLmhlaWdodD1lLnBhZGRpbmdUb3ArZS5jb3JlQm94LmhlaWdodCtlLnBhZGRpbmdCb3R0b219ZnVuY3Rpb24gQWNyKGUpe2xldCB0PWUuY29yZUdyYXBoLHI9VHIuc3Vic2NlbmUuc2VyaWVzO1plLmV4dGVuZChlLHIpLFplLmV4dGVuZChlLmNvcmVCb3gseGxlKGUuY29yZUdyYXBoLFRyLmdyYXBoLnNlcmllcykpLFplLmVhY2godC5ub2RlcygpLG49Pnt0Lm5vZGUobikuZXhjbHVkZWQ9ITF9KSxlLndpZHRoPWUuY29yZUJveC53aWR0aCtyLnBhZGRpbmdMZWZ0K3IucGFkZGluZ1JpZ2h0LGUuaGVpZ2h0PWUuY29yZUJveC5oZWlnaHQrci5wYWRkaW5nVG9wK3IucGFkZGluZ0JvdHRvbX1mdW5jdGlvbiBQY3IoZSl7aWYoZS5leHBhbmRlZClyZXR1cm47bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3Qscj1lLm91dEFubm90YXRpb25zLmxpc3Q7WmUuZWFjaCh0LHU9PmdsZSh1KSksWmUuZWFjaChyLHU9PmdsZSh1KSk7bGV0IG49VHIuYW5ub3RhdGlvbnMsaT1aZS5yZWR1Y2UodCwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PS0oZS5jb3JlQm94LndpZHRoK2gud2lkdGgpLzItbi54T2Zmc2V0LGguZHk9dStwK2guaGVpZ2h0LzIsdStwK2guaGVpZ2h0fSwwKTtaZS5lYWNoKHQsdT0+e3UuZHktPWkvMix1LmxhYmVsT2Zmc2V0PW4ubGFiZWxPZmZzZXR9KTtsZXQgbz1aZS5yZWR1Y2UociwodSxoLGYpPT57bGV0IHA9Zj4wP24ueU9mZnNldDowO3JldHVybiBoLmR4PShlLmNvcmVCb3gud2lkdGgraC53aWR0aCkvMituLnhPZmZzZXQsaC5keT11K3AraC5oZWlnaHQvMix1K3AraC5oZWlnaHR9LDApO1plLmVhY2gocix1PT57dS5keS09by8yLHUubGFiZWxPZmZzZXQ9bi5sYWJlbE9mZnNldH0pO2xldCBhPU1hdGgubWluKGUuaGVpZ2h0LzItZS5yYWRpdXMsaS8yKTthPWE8MD8wOmE7bGV0IHM9em4oKS5kb21haW4oWzAsdC5sZW5ndGgtMV0pLnJhbmdlKFstYSxhXSk7WmUuZWFjaCh0LCh1LGgpPT57dS5wb2ludHM9W3tkeDp1LmR4K3Uud2lkdGgvMixkeTp1LmR5fSx7ZHg6LWUuY29yZUJveC53aWR0aC8yLGR5OnQubGVuZ3RoPjE/cyhoKTowfV19KTtsZXQgbD1NYXRoLm1pbihlLmhlaWdodC8yLWUucmFkaXVzLG8vMik7bD1sPDA/MDpsO2xldCBjPXpuKCkuZG9tYWluKFswLHIubGVuZ3RoLTFdKS5yYW5nZShbLWwsbF0pO1plLmVhY2gociwodSxoKT0+e3UucG9pbnRzPVt7ZHg6ZS5jb3JlQm94LndpZHRoLzIsZHk6ci5sZW5ndGg+MT9jKGgpOjB9LHtkeDp1LmR4LXUud2lkdGgvMixkeTp1LmR5fV19KSxlLmhlaWdodD1NYXRoLm1heChlLmhlaWdodCxpLG8pfWZ1bmN0aW9uIGdsZShlKXtzd2l0Y2goZS5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBfaS5DT05TVEFOVDpaZS5leHRlbmQoZSxUci5jb25zdGFudC5zaXplKTticmVhaztjYXNlIF9pLlNIT1JUQ1VUOmlmKGUubm9kZS50eXBlPT09anQuT1ApWmUuZXh0ZW5kKGUsVHIuc2hvcnRjdXRTaXplLm9wKTtlbHNlIGlmKGUubm9kZS50eXBlPT09anQuTUVUQSlaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUubWV0YSk7ZWxzZSBpZihlLm5vZGUudHlwZT09PWp0LlNFUklFUylaZS5leHRlbmQoZSxUci5zaG9ydGN1dFNpemUuc2VyaWVzKTtlbHNlIHRocm93IEVycm9yKCJJbnZhbGlkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSk7YnJlYWs7Y2FzZSBfaS5TVU1NQVJZOlplLmV4dGVuZChlLFRyLmNvbnN0YW50LnNpemUpO2JyZWFrfX1mdW5jdGlvbiB2MChlKXtpZihlLmV4cGFuZGVkKXJldHVybiBlLng7bGV0IHQ9ZS5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoP2UuaW5ib3hXaWR0aDowO3JldHVybiBlLngtZS53aWR0aC8yK3QrZS5jb3JlQm94LndpZHRoLzJ9ZnVuY3Rpb24gX2xlKGUsdCl7bGV0IHI9dC54LWUueCxuPXQueS1lLnk7cmV0dXJuIDE4MCpNYXRoLmF0YW4obi9yKS9NYXRoLlBJfWZ1bmN0aW9uIEljcihlKXtsZXQgdD1fbGUoZVswXSxlWzFdKTtmb3IobGV0IHI9MTtyPGUubGVuZ3RoLTE7cisrKXtsZXQgbj1fbGUoZVtyXSxlW3IrMV0pO2lmKE1hdGguYWJzKG4tdCk+MSlyZXR1cm4hMTt0PW59cmV0dXJuITB9ZnVuY3Rpb24geWxlKGUsdCl7bGV0IHI9dC5leHBhbmRlZD90Lng6djAodCksbj10LnksaT1lLngtcixvPWUueS1uLGE9dC5leHBhbmRlZD90LndpZHRoOnQuY29yZUJveC53aWR0aCxzPXQuZXhwYW5kZWQ/dC5oZWlnaHQ6dC5jb3JlQm94LmhlaWdodCxsLGM7cmV0dXJuIE1hdGguYWJzKG8pKmEvMj5NYXRoLmFicyhpKSpzLzI/KG88MCYmKHM9LXMpLGw9bz09PTA/MDpzLzIqaS9vLGM9cy8yKTooaTwwJiYoYT0tYSksbD1hLzIsYz1pPT09MD8wOmEvMipvL2kpLHt4OnIrbCx5Om4rY319dmFyIFBsPW0wLEhpPXllLExjcj0zMjAsa2NyPTE1MCxoUD1be2JhY2tncm91bmRfY29sb3I6IiNDQzJGMkMiLGxhYmVsOiJOYU4ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0ZGOEQwMCIsbGFiZWw6Ii1cdTIyMUUifSx7YmFja2dyb3VuZF9jb2xvcjoiI0VBRUFFQSIsbGFiZWw6Ii0ifSx7YmFja2dyb3VuZF9jb2xvcjoiI0E1QTVBNSIsbGFiZWw6IjAifSx7YmFja2dyb3VuZF9jb2xvcjoiIzI2MjYyNiIsbGFiZWw6IisifSx7YmFja2dyb3VuZF9jb2xvcjoiIzAwM0VENCIsbGFiZWw6IitcdTIyMUUifV07ZnVuY3Rpb24gd2xlKGUsdCxyLG4pe2xldCBpPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1udWxsO3RyeXtpZihvPXQuZ2V0QkJveCgpLChvPT1udWxsP3ZvaWQgMDpvLndpZHRoKT09PTApcmV0dXJufWNhdGNoKGMpe3JldHVybn1sZXQgYT0uOSpNYXRoLm1pbihpLndpZHRoLyhvPT1udWxsP3ZvaWQgMDpvLndpZHRoKSxpLmhlaWdodC8obz09bnVsbD92b2lkIDA6by5oZWlnaHQpLDIpLHM9VHIuZ3JhcGgsbD1YaC5zY2FsZShhKS50cmFuc2xhdGUocy5wYWRkaW5nLnBhZGRpbmdMZWZ0LHMucGFkZGluZy5wYWRkaW5nVG9wKTtIdChlKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5jYWxsKHIudHJhbnNmb3JtLGwpLm9uKCJlbmQuZml0dGVkIiwoKT0+e3Iub24oImVuZC5maXR0ZWQiLG51bGwpLG4oKX0pfWZ1bmN0aW9uIFNsZShlLHQscixuKXtsZXQgaT1IdCh0KS5zZWxlY3QoYFtkYXRhLW5hbWU9IiR7ZX0iXWApLm5vZGUoKTtpZighaSlyZXR1cm4gY29uc29sZS53YXJuKGBwYW5Ub05vZGUoKSBmYWlsZWQgZm9yIG5vZGUgbmFtZSAiJHtlfSJgKSwhMTtsZXQgbz1pLmdldEJCb3goKSxhPWkuZ2V0U2NyZWVuQ1RNKCkscz10LmNyZWF0ZVNWR1BvaW50KCksbD10LmNyZWF0ZVNWR1BvaW50KCk7cy54PW8ueCxzLnk9by55LGwueD1vLngrby53aWR0aCxsLnk9by55K28uaGVpZ2h0LHM9cy5tYXRyaXhUcmFuc2Zvcm0oYSksbD1sLm1hdHJpeFRyYW5zZm9ybShhKTtsZXQgYz0ocCxkLGcsXyk9PiEocD5nJiZkPF8pLHU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPXUubGVmdCt1LndpZHRoLUxjcixmPXUudG9wK3UuaGVpZ2h0LWtjcjtpZihjKHMueCxsLngsdS5sZWZ0LGgpfHxjKHMueSxsLnksdS50b3AsZikpe2xldCBwPShzLngrbC54KS8yLGQ9KHMueStsLnkpLzIsZz11LmxlZnQrdS53aWR0aC8yLXAsXz11LnRvcCt1LmhlaWdodC8yLWQseT1pMih0KTtyZXR1cm4gSHQodCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDUwMCkuY2FsbChuLnRyYW5zbGF0ZUJ5LGcveS5rLF8veS5rKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBNbGUoZSx0KXtsZXQgcj10Lm5vZGUudHlwZT09PWp0LlNFUklFUz8wOlRyLnN1YnNjZW5lLm1ldGEubGFiZWxIZWlnaHQ7YTMoUGwoZSwiZyIsSGkuU2NlbmUuQ09SRSksMCxyKTtsZXQgbj10Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wLGk9dC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjAsbz10LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wLGE9VHIuc3Vic2NlbmUubWV0YS5leHRyYWN0WE9mZnNldCxzPTA7aWYobiYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksaSYmKHMrPXQub3V0RXh0cmFjdEJveC53aWR0aCksbil7bGV0IGw9dC5jb3JlQm94LndpZHRoO3M8bzM/bD1sLW8zK3QuaW5FeHRyYWN0Qm94LndpZHRoLzI6bD1sLXQuaW5FeHRyYWN0Qm94LndpZHRoLzItdC5vdXRFeHRyYWN0Qm94LndpZHRoLShpP2E6MCksbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLklORVhUUkFDVCksbCxyKX1pZihpKXtsZXQgbD10LmNvcmVCb3gud2lkdGg7czxvMz9sPWwtbzMrdC5vdXRFeHRyYWN0Qm94LndpZHRoLzI6bC09dC5vdXRFeHRyYWN0Qm94LndpZHRoLzIsbD1sLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC0obz9hOjApLGEzKFBsKGUsImciLEhpLlNjZW5lLk9VVEVYVFJBQ1QpLGwscil9aWYobyl7bGV0IGw9dC5jb3JlQm94LndpZHRoLXQubGlicmFyeUZ1bmN0aW9uc0JveC53aWR0aC8yO2EzKFBsKGUsImciLEhpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkpLGwscil9fWZ1bmN0aW9uIEVsZShlLHQpe0h0KGUpLm9uKCJjbGljayIsKCk9Pnt0LmZpcmUoImdyYXBoLXNlbGVjdCIpfSl9ZnVuY3Rpb24gYTMoZSx0LHIpe2UuYXR0cigidHJhbnNmb3JtIikhPW51bGwmJihlPWUudHJhbnNpdGlvbigicG9zaXRpb24iKSksZS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit0KyIsIityKyIpIil9ZnVuY3Rpb24gemQoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJ4Iix0LW4vMikuYXR0cigieSIsci1pLzIpLmF0dHIoIndpZHRoIixuKS5hdHRyKCJoZWlnaHQiLGkpfWZ1bmN0aW9uIFRsZShlLHQscixuLGkpe2xldCBvPWkvMixhPW4vMixzPVtbdCxyLW9dLFt0K2EscitvXSxbdC1hLHIrb11dO2UudHJhbnNpdGlvbigpLmF0dHIoInBvaW50cyIscy5tYXAobD0+bC5qb2luKCIsIikpLmpvaW4oIiAiKSl9ZnVuY3Rpb24gQ2xlKGUsdCl7bGV0IHI9djAodCksbj10LmV4cGFuZGVkP3Qud2lkdGg6dC5jb3JlQm94LndpZHRoLGk9dC5leHBhbmRlZD90LmhlaWdodDp0LmNvcmVCb3guaGVpZ2h0LG89cituLzItNixhPXQueS1pLzIrNjt0Lm5vZGUudHlwZT09PWp0LlNFUklFUyYmIXQuZXhwYW5kZWQmJihvKz0xMCxhLT0yKTtsZXQgcz0idHJhbnNsYXRlKCIrbysiLCIrYSsiKSI7ZS5zZWxlY3RBbGwoInBhdGgiKS50cmFuc2l0aW9uKCkuYXR0cigidHJhbnNmb3JtIixzKSxlLnNlbGVjdCgiY2lyY2xlIikudHJhbnNpdGlvbigpLmF0dHIoe2N4Om8sY3k6YSxyOlRyLm5vZGVTaXplLm1ldGEuZXhwYW5kQnV0dG9uUmFkaXVzfSl9ZnVuY3Rpb24gTUgoZSx0LHIsbixpKXtlLnRyYW5zaXRpb24oKS5hdHRyKCJjeCIsdCkuYXR0cigiY3kiLHIpLmF0dHIoInJ4IixuLzIpLmF0dHIoInJ5IixpLzIpfWZ1bmN0aW9uIGJsZShlLHQpe3JldHVybiB0P2UudG9GaXhlZCgwKTpNYXRoLmFicyhlKT49MT9lLnRvRml4ZWQoMSk6ZS50b0V4cG9uZW50aWFsKDEpfWZ1bmN0aW9uIFJjcihlLHQscixuKXtsZXQgaT0iRGV2aWNlOiAiK2UuZGV2aWNlX25hbWUrYApgO2krPSJkdHlwZTogIitlLmR0eXBlK2AKYDtsZXQgbz0iKHNjYWxhcikiO2Uuc2hhcGUubGVuZ3RoPjAmJihvPSIoIitlLnNoYXBlLmpvaW4oIiwiKSsiKSIpLGkrPWAKc2hhcGU6IGArbytgCgpgLGkrPSIjKGVsZW1lbnRzKTogIit0K2AKYDtsZXQgYT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoO3MrKylyW3NdPjAmJmEucHVzaCgiIygiK2hQW3NdLmxhYmVsKyIpOiAiK3Jbc10pO3JldHVybiBpKz1hLmpvaW4oIiwgIikrYAoKYCxuLm1heD49bi5taW4mJihpKz0ibWluOiAiK24ubWluKyIsIG1heDogIituLm1heCtgCmAsaSs9Im1lYW46ICIrbi5tZWFuKyIsIHN0ZGRldjogIituLnN0ZGRldiksaX1mdW5jdGlvbiBOY3IoZSx0LHIsbixpPTYwLG89MTAsYT0wLHMpe2lmKEh0KGUucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCIuaGVhbHRoLXBpbGwiKS5yZW1vdmUoKSwhdClyZXR1cm47bGV0IGw9dC52YWx1ZSxjPWwuc2xpY2UoMiw4KSx1PWNbMF0saD1jWzFdLGY9Y1s1XSxwPWxbMV0sZD17bWluOmxbOF0sbWF4OmxbOV0sbWVhbjpsWzEwXSxzdGRkZXY6TWF0aC5zcXJ0KGxbMTFdKX07aT09bnVsbCYmKGk9NjApLG89PW51bGwmJihvPTEwKSxhPT1udWxsJiYoYT0wKSxyIT1udWxsJiZyLm5vZGUudHlwZT09PWp0Lk9QJiYoaS89MixvLz0yKTtsZXQgZz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImciKTtnLmNsYXNzTGlzdC5hZGQoImhlYWx0aC1waWxsIik7bGV0IF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJkZWZzIik7Zy5hcHBlbmRDaGlsZChfKTtsZXQgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsImxpbmVhckdyYWRpZW50IikseD0iaGVhbHRoLXBpbGwtZ3JhZGllbnQtIituO3kuc2V0QXR0cmlidXRlKCJpZCIseCk7bGV0IGI9MCxTPSIwJSI7Zm9yKGxldCBEPTA7RDxjLmxlbmd0aDtEKyspe2lmKCFjW0RdKWNvbnRpbnVlO2IrPWNbRF07bGV0IEI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIik7Qi5zZXRBdHRyaWJ1dGUoIm9mZnNldCIsUyksQi5zZXRBdHRyaWJ1dGUoInN0b3AtY29sb3IiLGhQW0RdLmJhY2tncm91bmRfY29sb3IpLHkuYXBwZW5kQ2hpbGQoQik7bGV0IEk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJzdG9wIiksTD1iKjEwMC9wKyIlIjtJLnNldEF0dHJpYnV0ZSgib2Zmc2V0IixMKSxJLnNldEF0dHJpYnV0ZSgic3RvcC1jb2xvciIsaFBbRF0uYmFja2dyb3VuZF9jb2xvcikseS5hcHBlbmRDaGlsZChJKSxTPUx9Xy5hcHBlbmRDaGlsZCh5KTtsZXQgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInJlY3QiKTtDLnNldEF0dHJpYnV0ZSgiZmlsbCIsInVybCgjIit4KyIpIiksQy5zZXRBdHRyaWJ1dGUoIndpZHRoIixTdHJpbmcoaSkpLEMuc2V0QXR0cmlidXRlKCJoZWlnaHQiLFN0cmluZyhvKSksQy5zZXRBdHRyaWJ1dGUoInkiLFN0cmluZyhhKSksZy5hcHBlbmRDaGlsZChDKTtsZXQgUD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoanUsInRpdGxlIik7UC50ZXh0Q29udGVudD1SY3IodCxwLGMsZCksZy5hcHBlbmRDaGlsZChQKTtsZXQgaz0hMTtpZihyIT1udWxsKXtsZXQgRD1yLngtaS8yLEI9ci55LW8tci5oZWlnaHQvMi0yO2lmKHIubGFiZWxPZmZzZXQ8MCYmKEIrPXIubGFiZWxPZmZzZXQpLGcuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitEKyIsICIrQisiKSIpLGNbMl18fGNbM118fGNbNF0pe2xldCBMPXIubm9kZS5hdHRyO2lmKEwmJkwubGVuZ3RoKXtmb3IobGV0IFI9MDtSPEwubGVuZ3RoO1IrKylpZihMW1JdLmtleT09PSJUIil7bGV0IEY9TFtSXS52YWx1ZS50eXBlO2s9RiYmL15EVF8oQk9PTHxJTlR8VUlOVCkvLnRlc3QoRik7YnJlYWt9fX19bGV0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJ0ZXh0Iik7aWYoTnVtYmVyLmlzRmluaXRlKGQubWluKSYmTnVtYmVyLmlzRmluaXRlKGQubWF4KSl7bGV0IEQ9YmxlKGQubWluLGspLEI9YmxlKGQubWF4LGspO2lmKHA+MT9PLnRleHRDb250ZW50PUQrIiB+ICIrQjpPLnRleHRDb250ZW50PUQsdT4wfHxoPjB8fGY+MCl7Ty50ZXh0Q29udGVudCs9IiAoIjtsZXQgST1bXTt1PjAmJkkucHVzaChgTmFOXHhENyR7dX1gKSxoPjAmJkkucHVzaChgLVx1MjIxRVx4RDcke2h9YCksZj4wJiZJLnB1c2goYCtcdTIyMUVceEQ3JHtmfWApLE8udGV4dENvbnRlbnQrPUkuam9pbigiOyAiKSsiKSJ9fWVsc2UgTy50ZXh0Q29udGVudD0iKE5vIGZpbml0ZSBlbGVtZW50cykiO08uY2xhc3NMaXN0LmFkZCgiaGVhbHRoLXBpbGwtc3RhdHMiKSxzPT1udWxsJiYocz1pLzIpLE8uc2V0QXR0cmlidXRlKCJ4IixTdHJpbmcocykpLE8uc2V0QXR0cmlidXRlKCJ5IixTdHJpbmcoYS0yKSksZy5hcHBlbmRDaGlsZChPKSx6dChlLnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGcpfWZ1bmN0aW9uIEFsZShlLHQscil7aWYoIXQpcmV0dXJuO2xldCBuPTE7SHQoZSkuc2VsZWN0QWxsKCJnLm5vZGVzaGFwZSIpLmVhY2goZnVuY3Rpb24obyl7bGV0IGE9dFtvLm5vZGUubmFtZV0scz1hP2Fbcl06bnVsbDtOY3IodGhpcyxzLG8sbisrKX0pfXZhciBHbjsoZnVuY3Rpb24oZSl7ZS5OT05FPSJub25lIixlLkNPTVBVVEVfVElNRT0iY29tcHV0ZV90aW1lIixlLkRFVklDRT0iZGV2aWNlIixlLk1FTU9SWT0ibWVtb3J5IixlLk9QX0NPTVBBVElCSUxJVFk9Im9wX2NvbXBhdGliaWxpdHkiLGUuU1RSVUNUVVJFPSJzdHJ1Y3R1cmUiLGUuWExBX0NMVVNURVI9InhsYV9jbHVzdGVyIn0pKEdufHwoR249e30pKTt2YXIgZFA9RWUoT2UoKSwxKTt2YXIgVmk9RWUoT2UoKSwxKTtmdW5jdGlvbiBEY3IoZSl7bGV0IHQ9MCxyPTAsbj1lO2Zvcig7biYmbi5vZmZzZXRMZWZ0Pj0wJiZuLm9mZnNldFRvcD49MDspdCs9bi5vZmZzZXRMZWZ0LW4uc2Nyb2xsTGVmdCxyKz1uLm9mZnNldFRvcC1uLnNjcm9sbFRvcCxuPW4ub2Zmc2V0UGFyZW50O3JldHVybntsZWZ0OnQsdG9wOnJ9fWZ1bmN0aW9uIFlsdChlLHQpe2xldCByPWUuZ2V0Q29udGV4dE1lbnUoKSxuPUh0KGUuZ2V0Q29udGV4dE1lbnUoKSk7cmV0dXJuIGZ1bmN0aW9uKGksbyl7bGV0IGE9cXQscz1EY3IoZSk7bi5zdHlsZSgiZGlzcGxheSIsImJsb2NrIikuc3R5bGUoImxlZnQiLGEuY2xpZW50WC1zLmxlZnQrMSsicHgiKS5zdHlsZSgidG9wIixhLmNsaWVudFktcy50b3ArMSsicHgiKSxhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKTtmdW5jdGlvbiBsKHUpe3UmJnUuY29tcG9zZWRQYXRoKCkuaW5jbHVkZXMocil8fChuLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSkpfWRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixsLHtjYXB0dXJlOiEwfSksbi50ZXh0KCIiKSxuLmFwcGVuZCgidWwiKS5zZWxlY3RBbGwoImxpIikuZGF0YSh0KS5lbnRlcigpLmFwcGVuZCgibGkiKS5vbigiY2xpY2siLCh1LGgpPT57dS5hY3Rpb24odGhpcyxpLG8pLGwoKX0pLnRleHQoZnVuY3Rpb24odSl7cmV0dXJuIHUudGl0bGUoaSl9KX19dmFyIENIPUVlKE9lKCksMSk7dmFyIHpjcj0iXHhENyIsUGxlPXFiKCkuZG9tYWluKFtKNCxRNF0pLnJhbmdlKFsic21hbGwiLCJtZWRpdW0iLCJsYXJnZSIsInhsYXJnZSJdKSxGY3I9Mi41O2Z1bmN0aW9uIGZQKGUpe3JldHVybiBlLnYrdGxlK2Uud31mdW5jdGlvbiBrbGUoZSx0LHIpe2xldCBuPXIsaT1bXTtpPUNILnJlZHVjZSh0LmVkZ2VzKCksKHMsbCk9PntsZXQgYz10LmVkZ2UobCk7cmV0dXJuIHMucHVzaCh7djpsLnYsdzpsLncsbGFiZWw6Y30pLHN9LGkpO2xldCBhPVBuKGUsImciLHllLkVkZ2UuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YShpLGZQKTtyZXR1cm4gYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIix5ZS5FZGdlLkdST1VQKS5hdHRyKCJkYXRhLWVkZ2UiLGZQKS5lYWNoKGZ1bmN0aW9uKHMpe2xldCBsPUh0KHRoaXMpO3MubGFiZWwuZWRnZUdyb3VwPWwsbi5fZWRnZUdyb3VwSW5kZXhbZlAocyldPWwsbi5oYW5kbGVFZGdlU2VsZWN0ZWQmJmwub24oImNsaWNrIixjPT57cXQuc3RvcFByb3BhZ2F0aW9uKCksbi5maXJlKCJlZGdlLXNlbGVjdCIse2VkZ2VEYXRhOmMsZWRnZUdyb3VwOmx9KX0pLCRsdChsLHMsbil9KS5tZXJnZShhKS5lYWNoKGZ1bmN0aW9uKCl7SGNyKHIsdGhpcyl9KS5lYWNoKGZ1bmN0aW9uKHMpe1ZjcihIdCh0aGlzKSxzLG4pfSksYS5leGl0KCkuZWFjaChzPT57ZGVsZXRlIG4uX2VkZ2VHcm91cEluZGV4W2ZQKHMpXX0pLnJlbW92ZSgpLGF9ZnVuY3Rpb24gamx0KGUsdCl7bGV0IHI9dC5nZXROb2RlQnlOYW1lKGUudik7aWYoci5vdXRwdXRTaGFwZXM9PW51bGx8fENILmlzRW1wdHkoci5vdXRwdXRTaGFwZXMpKXJldHVybiBudWxsO2xldCBuPXIub3V0cHV0U2hhcGVzW2Uub3V0cHV0VGVuc29yS2V5XTtyZXR1cm4gbj09bnVsbD9udWxsOm4ubGVuZ3RoPT09MD8ic2NhbGFyIjpuLm1hcChpPT5pPT09LTE/Ij8iOmkpLmpvaW4oemNyKX1mdW5jdGlvbiBYbHQoZSx0KXtyZXR1cm4gdC5lZGdlTGFiZWxGdW5jdGlvbj90LmVkZ2VMYWJlbEZ1bmN0aW9uKGUsdCk6ZS5iYXNlRWRnZUxpc3QubGVuZ3RoPjE/ZS5iYXNlRWRnZUxpc3QubGVuZ3RoKyIgdGVuc29ycyI6amx0KGUuYmFzZUVkZ2VMaXN0WzBdLHQpfWZ1bmN0aW9uIElsZShlLHQscil7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGp1LCJwYXRoIik7Zm9yKGxldCBpPTE7aTxlLmxlbmd0aDtpKyspaWYobi5zZXRBdHRyaWJ1dGUoImQiLHIoZS5zbGljZSgwLGkpKSksbi5nZXRUb3RhbExlbmd0aCgpPnQpcmV0dXJuIGktMTtyZXR1cm4gZS5sZW5ndGgtMX1mdW5jdGlvbiBMbGUoZSx0LHIpe2xldCBuPXZ1KCkueCh1PT51LngpLnkodT0+dS55KSxpPUh0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJwYXRoIikpLmF0dHIoImQiLG4oZSkpLG89K3QuYXR0cigibWFya2VyV2lkdGgiKSxhPXQuYXR0cigidmlld0JveCIpLnNwbGl0KCIgIikubWFwKE51bWJlcikscz1hWzJdLWFbMF0sbD0rdC5hdHRyKCJyZWZYIiksYz1pLm5vZGUoKTtpZihyKXtsZXQgdT0xLWwvcyxoPW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUlsZShlLGgsbik7cmV0dXJuIGVbcC0xXT17eDpmLngseTpmLnl9LGUuc2xpY2UocC0xKX1lbHNle2xldCB1PTEtbC9zLGg9Yy5nZXRUb3RhbExlbmd0aCgpLW8qdSxmPWMuZ2V0UG9pbnRBdExlbmd0aChoKSxwPUlsZShlLGgsbik7cmV0dXJuIGVbcF09e3g6Zi54LHk6Zi55fSxlLnNsaWNlKDAscCsxKX19ZnVuY3Rpb24gJGx0KGUsdCxyLG4pe249bnx8eWUuRWRnZS5MSU5FLHQubGFiZWwmJnQubGFiZWwuc3RydWN0dXJhbCYmKG4rPSIgIit5ZS5FZGdlLlNUUlVDVFVSQUwpLHQubGFiZWwmJnQubGFiZWwubWV0YWVkZ2UmJnQubGFiZWwubWV0YWVkZ2UubnVtUmVmRWRnZXMmJihuKz0iICIreWUuRWRnZS5SRUZFUkVOQ0VfRURHRSksci5oYW5kbGVFZGdlU2VsZWN0ZWQmJihuKz0iICIreWUuRWRnZS5TRUxFQ1RBQkxFKTtsZXQgaT0icGF0aF8iK2ZQKHQpLG87aWYoci5yZW5kZXJIaWVyYXJjaHkuZWRnZVdpZHRoRnVuY3Rpb24pbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhGdW5jdGlvbih0LG4pO2Vsc2V7bGV0IGM9MTt0LmxhYmVsIT1udWxsJiZ0LmxhYmVsLm1ldGFlZGdlIT1udWxsJiYoYz10LmxhYmVsLm1ldGFlZGdlLnRvdGFsU2l6ZSksbz1yLnJlbmRlckhpZXJhcmNoeS5lZGdlV2lkdGhTaXplZEJhc2VkU2NhbGUoYyl9bGV0IGE9ZS5hcHBlbmQoInBhdGgiKS5hdHRyKCJpZCIsaSkuYXR0cigiY2xhc3MiLG4pLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4Iik7aWYodC5sYWJlbCYmdC5sYWJlbC5tZXRhZWRnZSlpZih0LmxhYmVsLm1ldGFlZGdlLm51bVJlZkVkZ2VzKXtsZXQgYz1gcmVmZXJlbmNlLWFycm93aGVhZC0ke1BsZShvKX1gO2Euc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtjfSlgKSx0LmxhYmVsLnN0YXJ0TWFya2VySWQ9Y31lbHNle2xldCBjPWBkYXRhZmxvdy1hcnJvd2hlYWQtJHtQbGUobyl9YDthLnN0eWxlKCJtYXJrZXItZW5kIixgdXJsKCMke2N9KWApLHQubGFiZWwuZW5kTWFya2VySWQ9Y31pZih0LmxhYmVsPT1udWxsfHx0LmxhYmVsLm1ldGFlZGdlPT1udWxsKXJldHVybjtsZXQgcz1YbHQodC5sYWJlbC5tZXRhZWRnZSxyLnJlbmRlckhpZXJhcmNoeSk7aWYocz09bnVsbClyZXR1cm47bGV0IGw9bz5GY3I/ImNlbnRyYWwiOiJ0ZXh0LWFmdGVyLWVkZ2UiO2UuYXBwZW5kKCJ0ZXh0IikuYXBwZW5kKCJ0ZXh0UGF0aCIpLmF0dHIoInhsaW5rOmhyZWYiLCIjIitpKS5hdHRyKCJzdGFydE9mZnNldCIsIjUwJSIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuYXR0cigiZG9taW5hbnQtYmFzZWxpbmUiLCJjZW50cmFsIikudGV4dChzKX12YXIgVEg9dnUoKS5jdXJ2ZShHOCkueChlPT5lLngpLnkoZT0+ZS55KTtmdW5jdGlvbiBCY3IoZSx0LHIsbixpKXtsZXQgbz1yLmxhYmVsLGE9by5hZGpvaW5pbmdNZXRhZWRnZSxzPW8ucG9pbnRzLHtzaGFkb3dSb290Omx9PWU7aWYoci5sYWJlbC5zdGFydE1hcmtlcklkJiYocz1MbGUocyxIdChsPT1udWxsP3ZvaWQgMDpsLnF1ZXJ5U2VsZWN0b3IoIiMiK3IubGFiZWwuc3RhcnRNYXJrZXJJZCkpLCEwKSksci5sYWJlbC5lbmRNYXJrZXJJZCYmKHM9TGxlKHMsSHQobD09bnVsbD92b2lkIDA6bC5xdWVyeVNlbGVjdG9yKCIjIityLmxhYmVsLmVuZE1hcmtlcklkKSksITEpKSwhYSlyZXR1cm4gbmMoaSxUSChzKSk7bGV0IGM9YS5lZGdlR3JvdXAubm9kZSgpLmZpcnN0Q2hpbGQsdT1vLm1ldGFlZGdlLmluYm91bmQ7cmV0dXJuIGZ1bmN0aW9uKGgpe3ZhciBnO2xldCBmPWMuZ2V0UG9pbnRBdExlbmd0aCh1P2MuZ2V0VG90YWxMZW5ndGgoKTowKS5tYXRyaXhUcmFuc2Zvcm0oYy5nZXRDVE0oKSkubWF0cml4VHJhbnNmb3JtKChnPXQuZ2V0Q1RNKCkpPT1udWxsP3ZvaWQgMDpnLmludmVyc2UoKSkscD11PzA6cy5sZW5ndGgtMTtyZXR1cm4gc1twXS54PWYueCxzW3BdLnk9Zi55LFRIKHMpfX1mdW5jdGlvbiBIY3IoZSx0KXtIdCh0KS5zZWxlY3QoInBhdGguIit5ZS5FZGdlLkxJTkUpLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gQmNyKGUsdGhpcyxyLG4saSl9KX1mdW5jdGlvbiBWY3IoZSx0LHIpe2UuY2xhc3NlZCgiZmFkZWQiLHQubGFiZWwuaXNGYWRlZE91dCk7bGV0IG49dC5sYWJlbC5tZXRhZWRnZTtlLnNlbGVjdCgicGF0aC4iK3llLkVkZ2UuTElORSkuY2xhc3NlZCgiY29udHJvbC1kZXAiLG4mJiFuLm51bVJlZ3VsYXJFZGdlcyl9ZnVuY3Rpb24gQUgoZSx0LHIpe2xldCBpPVBuKGUsImciLHllLk5vZGUuQ09OVEFJTkVSKS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0LG89Pm8ubm9kZS5uYW1lKyI6IitvLm5vZGUudHlwZSk7cmV0dXJuIGkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJkYXRhLW5hbWUiLG89Pm8ubm9kZS5uYW1lKS5lYWNoKGZ1bmN0aW9uKG8pe2xldCBhPUh0KHRoaXMpO3IuYWRkTm9kZUdyb3VwKG8ubm9kZS5uYW1lLGEpfSkubWVyZ2UoaSkuYXR0cigiY2xhc3MiLG89PnllLk5vZGUuR1JPVVArIiAiK0hsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKSxzPVBuKGEsImciLHllLkFubm90YXRpb24uSU5CT1gpO09sZShzLG8uaW5Bbm5vdGF0aW9ucyxvLHIpO2xldCBsPVBuKGEsImciLHllLkFubm90YXRpb24uT1VUQk9YKTtPbGUobCxvLm91dEFubm90YXRpb25zLG8scik7bGV0IGM9QmxlKGEsbyx5ZS5Ob2RlLlNIQVBFKTtvLm5vZGUuaXNHcm91cE5vZGUmJnFjcihjLG8sciksRGxlKGMsbyxyKSxVY3IoYSxvLHIpO2xldCB1PVdjcihhLG8scik7RGxlKHUsbyxyLG8ubm9kZS50eXBlPT09anQuTUVUQSksczMoYSxvLHIpLGpjcihhLG8pfSksaS5leGl0KCkuZWFjaChmdW5jdGlvbihvKXtyLnJlbW92ZU5vZGVHcm91cChvLm5vZGUubmFtZSk7bGV0IGE9SHQodGhpcyk7by5pbkFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit5ZS5Bbm5vdGF0aW9uLklOQk9YKS5zZWxlY3RBbGwoIi4iK3llLkFubm90YXRpb24uR1JPVVApLmVhY2gocz0+e3IucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKHMsbyl9KSxvLm91dEFubm90YXRpb25zLmxpc3QubGVuZ3RoPjAmJmEuc2VsZWN0KCIuIit5ZS5Bbm5vdGF0aW9uLk9VVEJPWCkuc2VsZWN0QWxsKCIuIit5ZS5Bbm5vdGF0aW9uLkdST1VQKS5lYWNoKHM9PntyLnJlbW92ZUFubm90YXRpb25Hcm91cChzLG8pfSl9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIFVjcihlLHQscil7aWYodC5ub2RlLmlzR3JvdXBOb2RlKXtpZih0LmV4cGFuZGVkKXJldHVybiByY3QoZSx0LHIseWUuU3Vic2NlbmUuR1JPVVApO1BsKGUsImciLHllLlN1YnNjZW5lLkdST1VQKS5yZW1vdmUoKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBObGUoZSx0KXtsZXQgcj10LngtdC53aWR0aC8yK3QucGFkZGluZ0xlZnQsbj10LnktdC5oZWlnaHQvMit0LnBhZGRpbmdUb3AsaT1QbChlLCJnIix5ZS5TdWJzY2VuZS5HUk9VUCk7YTMoaSxyLG4pfWZ1bmN0aW9uIHFjcihlLHQscil7bGV0IG49UG4oZSwiZyIseWUuTm9kZS5CVVRUT05fQ09OVEFJTkVSKTtQbihuLCJjaXJjbGUiLHllLk5vZGUuQlVUVE9OX0NJUkNMRSksUG4obiwicGF0aCIseWUuTm9kZS5FWFBBTkRfQlVUVE9OKS5hdHRyKCJkIiwiTTAsLTIuMiBWMi4yIE0tMi4yLDAgSDIuMiIpLFBuKG4sInBhdGgiLHllLk5vZGUuQ09MTEFQU0VfQlVUVE9OKS5hdHRyKCJkIiwiTS0yLjIsMCBIMi4yIiksbi5vbigiY2xpY2siLGk9PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtdG9nZ2xlLWV4cGFuZCIse25hbWU6aS5ub2RlLm5hbWV9KX0pLENsZShuLHQpfWZ1bmN0aW9uIERsZShlLHQscixuKXtpZihuKXtlLmF0dHIoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpO3JldHVybn1sZXQgaT1ZbHQocix6bGUodC5ub2RlLHIpKTtlLm9uKCJkYmxjbGljayIsbz0+e3IuZmlyZSgibm9kZS10b2dnbGUtZXhwYW5kIix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oIm1vdXNlb3ZlciIsbz0+e3IuaXNOb2RlRXhwYW5kZWQobyl8fHIuZmlyZSgibm9kZS1oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigibW91c2VvdXQiLG89PntyLmlzTm9kZUV4cGFuZGVkKG8pfHxyLmZpcmUoIm5vZGUtdW5oaWdobGlnaHQiLHtuYW1lOm8ubm9kZS5uYW1lfSl9KS5vbigiY2xpY2siLG89PntxdC5zdG9wUHJvcGFnYXRpb24oKSxyLmZpcmUoIm5vZGUtc2VsZWN0Iix7bmFtZTpvLm5vZGUubmFtZX0pfSkub24oImNvbnRleHRtZW51IiwobyxhKT0+e3IuZmlyZSgibm9kZS1zZWxlY3QiLHtuYW1lOm8ubm9kZS5uYW1lfSksaS5jYWxsKG8sYSl9KX1mdW5jdGlvbiB6bGUoZSx0KXtsZXQgcj1be3RpdGxlOm49Pl9IKGUuaW5jbHVkZSksYWN0aW9uOihuLGksbyk9Pnt0LmZpcmUoIm5vZGUtdG9nZ2xlLWV4dHJhY3QiLHtuYW1lOmUubmFtZX0pfX1dO3JldHVybiB0Lm5vZGVDb250ZXh0TWVudUl0ZW1zJiYocj1yLmNvbmNhdCh0Lm5vZGVDb250ZXh0TWVudUl0ZW1zKSksUWx0KGUpJiZyLnB1c2goe3RpdGxlOm49PnRjdChlKSxhY3Rpb246KG4saSxvKT0+e3QuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOlBIKGUpfSl9fSkscn1mdW5jdGlvbiBRbHQoZSl7cmV0dXJuIFBIKGUpIT09bnVsbH1mdW5jdGlvbiBQSChlKXtyZXR1cm4gZT9lLnR5cGU9PT1qdC5TRVJJRVM/ZS5uYW1lOmUudHlwZT09PWp0Lk9QP2Uub3duaW5nU2VyaWVzOm51bGw6bnVsbH1mdW5jdGlvbiBHY3IoZSl7bGV0IHQ9bnVsbDtpZihlKWUudHlwZT09PWp0LlNFUklFUz90PWU6ZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUudHlwZT09PWp0LlNFUklFUyYmKHQ9ZS5wYXJlbnROb2RlKTtlbHNlIHJldHVybiBudWxsO3JldHVybiB0fWZ1bmN0aW9uIHRjdChlKXtyZXR1cm4gb2xlKEdjcihlKSE9PW51bGw/aXMuR1JPVVA6aXMuVU5HUk9VUCl9ZnVuY3Rpb24gV2NyKGUsdCxyKXt2YXIgYztsZXQgbj10LmRpc3BsYXlOYW1lLGk9dC5ub2RlLnR5cGU9PT1qdC5NRVRBJiYhdC5leHBhbmRlZCxvPVBuKGUsInRleHQiLHllLk5vZGUuTEFCRUwpLGE9by5ub2RlKCk7KGM9YS5wYXJlbnROb2RlKT09bnVsbHx8Yy5hcHBlbmRDaGlsZChhKSxvLmF0dHIoImR5IiwiLjM1ZW0iKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpO2xldCBzPTg7c3dpdGNoKHQubm9kZS50eXBlKXtjYXNlIGp0Lk1FVEE6cz10LmV4cGFuZGVkP1o0Lk5vZGUuRVhQQU5ERURfTEFCRUw6WjQuTm9kZS5TRVJJRVNfTEFCRUw7YnJlYWs7Y2FzZSBqdC5PUDpzPVo0Lk5vZGUuT1BfTEFCRUw7YnJlYWt9aWYoaSl7bi5sZW5ndGg+ci5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoJiYobj1uLnN1YnN0cigwLHIubWF4TWV0YW5vZGVMYWJlbExlbmd0aC0yKSsiXHUyMDI2Iik7bGV0IHU9WWNyKHIpO28uYXR0cigiZm9udC1zaXplIix1KG4ubGVuZ3RoKSsicHgiKSxzPXUobi5sZW5ndGgpfWxldCBsPW8udGV4dChuKTtyZXR1cm4gRmxlKGwsdC5ub2RlLnR5cGUscyx0KSxvfWZ1bmN0aW9uIEZsZShlLHQscixuKXtsZXQgaT1lLm5vZGUoKSxvPWkudGV4dENvbnRlbnQsYT1udWxsO3N3aXRjaCh0KXtjYXNlIGp0Lk1FVEE6biYmIW4uZXhwYW5kZWQmJihhPVRyLm5vZGVTaXplLm1ldGEubWF4TGFiZWxXaWR0aCk7YnJlYWs7Y2FzZSBqdC5PUDphPVRyLm5vZGVTaXplLm9wLm1heExhYmVsV2lkdGg7YnJlYWs7Y2FzZS0xOmE9VHIuYW5ub3RhdGlvbnMubWF4TGFiZWxXaWR0aDticmVhaztkZWZhdWx0OmJyZWFrfWlmKGEhPT1udWxsKXJldHVybiBpLnRleHRDb250ZW50PSRzZShpLnRleHRDb250ZW50LHIsYSksZS5hcHBlbmQoInRpdGxlIikudGV4dChvKX12YXIgS2x0PW51bGw7ZnVuY3Rpb24gWWNyKGUpe3JldHVybiBLbHR8fChLbHQ9em4oKS5kb21haW4oW2UubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udCxlLm1heE1ldGFub2RlTGFiZWxMZW5ndGhdKS5yYW5nZShbZS5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemUsZS5taW5NZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemVdKS5jbGFtcCghMCkpLEtsdH1mdW5jdGlvbiBwUChlLHQscixuKXtQbChlLCJ0ZXh0Iix5ZS5Ob2RlLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsdCkuYXR0cigieSIscituKX1mdW5jdGlvbiBCbGUoZSx0LHIpe2xldCBuPVBuKGUsImciLHIpO3N3aXRjaCh0Lm5vZGUudHlwZSl7Y2FzZSBqdC5PUDpsZXQgaT10Lm5vZGU7aWYoVmkuaXNOdW1iZXIoaS5mdW5jdGlvbklucHV0SW5kZXgpfHxWaS5pc051bWJlcihpLmZ1bmN0aW9uT3V0cHV0SW5kZXgpKXtQbihuLCJwb2x5Z29uIix5ZS5Ob2RlLkNPTE9SX1RBUkdFVCk7YnJlYWt9UG4obiwiZWxsaXBzZSIseWUuTm9kZS5DT0xPUl9UQVJHRVQpO2JyZWFrO2Nhc2UganQuU0VSSUVTOmxldCBvPSJhbm5vdGF0aW9uIixhPXQ7YS5jb3JlR3JhcGgmJihvPWEubm9kZS5oYXNOb25Db250cm9sRWRnZXM/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpO2xldCBzPVt5ZS5Ob2RlLkNPTE9SX1RBUkdFVF07YS5pc0ZhZGVkT3V0JiZzLnB1c2goImZhZGVkLWVsbGlwc2UiKSxQbihuLCJ1c2UiLHMpLmF0dHIoInhsaW5rOmhyZWYiLCIjb3Atc2VyaWVzLSIrbysiLXN0YW1wIiksUG4obiwicmVjdCIseWUuTm9kZS5DT0xPUl9UQVJHRVQpLmF0dHIoInJ4Iix0LnJhZGl1cykuYXR0cigicnkiLHQucmFkaXVzKTticmVhaztjYXNlIGp0LkJSSURHRTpQbihuLCJyZWN0Iix5ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2Nhc2UganQuTUVUQTpQbihuLCJyZWN0Iix5ZS5Ob2RlLkNPTE9SX1RBUkdFVCkuYXR0cigicngiLHQucmFkaXVzKS5hdHRyKCJyeSIsdC5yYWRpdXMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVucmVjb2duaXplZCBub2RlIHR5cGU6ICIrdC5ub2RlLnR5cGUpfXJldHVybiBufWZ1bmN0aW9uIEhsZShlKXtzd2l0Y2goZS5ub2RlLnR5cGUpe2Nhc2UganQuT1A6cmV0dXJuIHllLk9QTk9ERTtjYXNlIGp0Lk1FVEE6cmV0dXJuIHllLk1FVEFOT0RFO2Nhc2UganQuU0VSSUVTOnJldHVybiB5ZS5TRVJJRVNOT0RFO2Nhc2UganQuQlJJREdFOnJldHVybiB5ZS5CUklER0VOT0RFO2Nhc2UganQuRUxMSVBTSVM6cmV0dXJuIHllLkVMTElQU0lTTk9ERX10aHJvdyBFcnJvcigiVW5yZWNvZ25pemVkIG5vZGUgdHlwZTogIitlLm5vZGUudHlwZSl9ZnVuY3Rpb24gamNyKGUsdCl7bGV0IHI9UGwoZSwiZyIseWUuTm9kZS5TSEFQRSksbj12MCh0KTtzd2l0Y2godC5ub2RlLnR5cGUpe2Nhc2UganQuT1A6e2xldCBpPXQubm9kZTtpZihWaS5pc051bWJlcihpLmZ1bmN0aW9uSW5wdXRJbmRleCl8fFZpLmlzTnVtYmVyKGkuZnVuY3Rpb25PdXRwdXRJbmRleCkpe2xldCBvPVBsKHIsInBvbHlnb24iKTtUbGUobyx0LngsdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1lbHNle2xldCBvPVBsKHIsImVsbGlwc2UiKTtNSChvLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KX1wUChlLG4sdC55LHQubGFiZWxPZmZzZXQpO2JyZWFrfWNhc2UganQuTUVUQTp7bGV0IGk9ci5zZWxlY3RBbGwoInJlY3QiKTt0LmV4cGFuZGVkPyh6ZChpLHQueCx0LnksdC53aWR0aCx0LmhlaWdodCksTmxlKGUsdCkscFAoZSxuLHQueSwtdC5oZWlnaHQvMit0LmxhYmVsSGVpZ2h0LzIpKTooemQoaSxuLHQueSx0LmNvcmVCb3gud2lkdGgsdC5jb3JlQm94LmhlaWdodCkscFAoZSxuLHQueSwwKSk7YnJlYWt9Y2FzZSBqdC5TRVJJRVM6e2xldCBpPVBsKHIsInVzZSIpO3QuZXhwYW5kZWQ/KHpkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KSxObGUoZSx0KSxwUChlLG4sdC55LC10LmhlaWdodC8yK3QubGFiZWxIZWlnaHQvMikpOih6ZChpLG4sdC55LHQuY29yZUJveC53aWR0aCx0LmNvcmVCb3guaGVpZ2h0KSxwUChlLG4sdC55LHQubGFiZWxPZmZzZXQpKTticmVha31jYXNlIGp0LkJSSURHRTp7bGV0IGk9UGwociwicmVjdCIpO3pkKGksdC54LHQueSx0LndpZHRoLHQuaGVpZ2h0KTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnJlY29nbml6ZWQgbm9kZSB0eXBlOiAiK3Qubm9kZS50eXBlKX19ZnVuY3Rpb24gWmx0KGUsdCxyKXtsZXQgbj1qc2UoZSk7aWYoIXIpcmV0dXJuYHVybCgjJHtufSlgO2xldCBpPUh0KHIpLG89aS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpO28uZW1wdHkoKSYmKG89aS5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsIl9ncmFwaC1ncmFkaWVudHMiKSk7bGV0IGE9by5zZWxlY3QoImxpbmVhckdyYWRpZW50IyIrbik7aWYoYS5lbXB0eSgpKXthPW8uYXBwZW5kKCJsaW5lYXJHcmFkaWVudCIpLmF0dHIoImlkIixlKSxhLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpO2xldCBzPTA7VmkuZWFjaCh0LGw9PntsZXQgYz1sLmNvbG9yO2EuYXBwZW5kKCJzdG9wIikuYXR0cigib2Zmc2V0IixzKS5hdHRyKCJzdG9wLWNvbG9yIixjKSxhLmFwcGVuZCgic3RvcCIpLmF0dHIoIm9mZnNldCIscytsLnByb3BvcnRpb24pLmF0dHIoInN0b3AtY29sb3IiLGMpLHMrPWwucHJvcG9ydGlvbn0pfXJldHVybmB1cmwoIyR7bn0pYH1mdW5jdGlvbiBJSChlKXtIdChlKS5zZWxlY3QoImRlZnMjX2dyYXBoLWdyYWRpZW50cyIpLnJlbW92ZSgpfWZ1bmN0aW9uIExIKGUsdCxyLG4saSl7bGV0IG89S3U7c3dpdGNoKGU9ZXx8KCgpPT4wKSx0KXtjYXNlIEduLk5PTkU6Y2FzZSBHbi5TVFJVQ1RVUkU6aWYoci5ub2RlLnR5cGU9PT1qdC5NRVRBKXtsZXQgYT1yLm5vZGUudGVtcGxhdGVJZDtyZXR1cm4gdD09PUduLlNUUlVDVFVSRSYmYSE9PW51bGw/by5TVFJVQ1RVUkVfUEFMRVRURShlKGEpLG4pOm8uVU5LTk9XTn1lbHNlIHJldHVybiByLm5vZGUudHlwZT09PWp0LlNFUklFUz9uP28uRVhQQU5ERURfQ09MT1I6IndoaXRlIjpyLm5vZGUudHlwZT09PWp0LkJSSURHRT9yLnN0cnVjdHVyYWw/IiNmMGUiOnIubm9kZS5pbmJvdW5kPyIjMGVmIjoiI2ZlMCI6VmkuaXNOdW1iZXIoci5ub2RlLmZ1bmN0aW9uSW5wdXRJbmRleCk/IiM3OTU1NDgiOlZpLmlzTnVtYmVyKHIubm9kZS5mdW5jdGlvbk91dHB1dEluZGV4KT8iIzAwOTY4OCI6IndoaXRlIjtjYXNlIEduLkRFVklDRTpyZXR1cm4gci5kZXZpY2VDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpabHQoImRldmljZS0iK3Iubm9kZS5uYW1lLHIuZGV2aWNlQ29sb3JzLGkpO2Nhc2UgR24uWExBX0NMVVNURVI6cmV0dXJuIHIueGxhQ2x1c3RlckNvbG9ycz09bnVsbD9vLlVOS05PV046bj9vLkVYUEFOREVEX0NPTE9SOlpsdCgieGxhLSIrci5ub2RlLm5hbWUsci54bGFDbHVzdGVyQ29sb3JzLGkpO2Nhc2UgR24uQ09NUFVURV9USU1FOnJldHVybiBuP28uRVhQQU5ERURfQ09MT1I6ci5jb21wdXRlVGltZUNvbG9yfHxvLlVOS05PV047Y2FzZSBHbi5NRU1PUlk6cmV0dXJuIG4/by5FWFBBTkRFRF9DT0xPUjpyLm1lbW9yeUNvbG9yfHxvLlVOS05PV047Y2FzZSBHbi5PUF9DT01QQVRJQklMSVRZOnJldHVybiByLmNvbXBhdGliaWxpdHlDb2xvcnM9PW51bGw/by5VTktOT1dOOm4/by5FWFBBTkRFRF9DT0xPUjpabHQoIm9wLWNvbXBhdC0iK3Iubm9kZS5uYW1lLHIuY29tcGF0aWJpbGl0eUNvbG9ycyxpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjYXNlIHRvIGNvbG9yIG5vZGVzIGJ5Iil9fWZ1bmN0aW9uIHMzKGUsdCxyLG4pe249bnx8eWUuTm9kZS5TSEFQRTtsZXQgaT1yLmlzTm9kZUhpZ2hsaWdodGVkKHQubm9kZS5uYW1lKSxvPXIuaXNOb2RlU2VsZWN0ZWQodC5ub2RlLm5hbWUpLGE9dC5pc0luRXh0cmFjdHx8dC5pc091dEV4dHJhY3R8fHQuaXNMaWJyYXJ5RnVuY3Rpb24scz10LmV4cGFuZGVkJiZuIT09eWUuQW5ub3RhdGlvbi5OT0RFLGw9dC5pc0ZhZGVkT3V0O2UuY2xhc3NlZCgiaGlnaGxpZ2h0ZWQiLGkpLGUuY2xhc3NlZCgic2VsZWN0ZWQiLG8pLGUuY2xhc3NlZCgiZXh0cmFjdCIsYSksZS5jbGFzc2VkKCJleHBhbmRlZCIscyksZS5jbGFzc2VkKCJmYWRlZCIsbCk7bGV0IGM9ZS5zZWxlY3QoIi4iK24rIiAuIit5ZS5Ob2RlLkNPTE9SX1RBUkdFVCksdT1MSChyLnRlbXBsYXRlSW5kZXgsci5jb2xvckJ5LHQscyxyLmdldEdyYXBoU3ZnUm9vdCgpKTtjLnN0eWxlKCJmaWxsIix1KSxjLnN0eWxlKCJzdHJva2UiLG8/bnVsbDplY3QodSkpfWZ1bmN0aW9uIGVjdChlKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCwzKT09PSJ1cmwiP0t1LkdSQURJRU5UX09VVExJTkU6Y3UoZSkuZGFya2VyKCkudG9TdHJpbmcoKX1mdW5jdGlvbiBWbGUoZSx0LHIsbil7bGV0IGk9SHQoZSk7aWYoaS5zZWxlY3RBbGwoIi5pbnB1dC1oaWdobGlnaHQiKS5jbGFzc2VkKCJpbnB1dC1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLm5vbi1pbnB1dCIpLmNsYXNzZWQoIm5vbi1pbnB1dCIsITEpLGkuc2VsZWN0QWxsKCIuaW5wdXQtcGFyZW50IikuY2xhc3NlZCgiaW5wdXQtcGFyZW50IiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1jaGlsZCIpLmNsYXNzZWQoImlucHV0LWNoaWxkIiwhMSksaS5zZWxlY3RBbGwoIi5pbnB1dC1lZGdlLWhpZ2hsaWdodCIpLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMSksaS5zZWxlY3RBbGwoIi5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCExKSxpLnNlbGVjdEFsbCgiLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZCIsITEpLCF0fHwhbnx8IXIpcmV0dXJuO2xldCBvPVVsZShyLHQpLGE9e307VmkuZWFjaChvLGZ1bmN0aW9uKGMpe2E9cWxlKGUsdCxjLGEpfSk7bGV0IHM9T2JqZWN0LmtleXMoYSksbD0kY3IodCxzKTtLY3IoZSxsKSxpLnNlbGVjdEFsbCgiZy5ub2RlOm5vdCguc2VsZWN0ZWQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0KTpub3QoLmlucHV0LXBhcmVudCk6bm90KC5pbnB1dC1jaGlsZHJlbikiKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKS5lYWNoKGZ1bmN0aW9uKGMpe2xldCB1PWMubm9kZS5uYW1lO2kuc2VsZWN0QWxsKGBbZGF0YS1uYW1lPSIke3V9Il1gKS5jbGFzc2VkKCJub24taW5wdXQiLCEwKX0pLGkuc2VsZWN0QWxsKCJnLmVkZ2U6bm90KC5pbnB1dC1lZGdlLWhpZ2hsaWdodCkiKS5jbGFzc2VkKCJub24taW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX1mdW5jdGlvbiBVbGUoZSx0KXtsZXQgcj1bXSxuPXQuZ2V0Tm9kZUJ5TmFtZShlKTtpZihuIGluc3RhbmNlb2YgXzApcmV0dXJuW25dLmNvbmNhdChuLmluRW1iZWRkaW5ncyk7bGV0IGk9bi5tZXRhZ3JhcGgubm9kZXMoKTtyZXR1cm4gVmkuZWFjaChpLGZ1bmN0aW9uKG8pe3I9ci5jb25jYXQoVWxlKG8sdCkpfSkscn1mdW5jdGlvbiBxbGUoZSx0LHIsbil7aWYobltyLm5hbWVdKXJldHVybiBuO25bci5uYW1lXT0hMDtsZXQgaT1yLmlucHV0cyxvPUpsdCh0LHIpO0h0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke28ubmFtZX0iXWApLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIsITApO2xldCBhPXt9O1ZpLmVhY2goaSxmdW5jdGlvbih1KXtsZXQgaD10LmdldE5vZGVCeU5hbWUodS5uYW1lKTtpZihoPT09dm9pZCAwKXJldHVybjtpZihoIGluc3RhbmNlb2Ygb1Ape2xldCBkPWFQKGgubmFtZSk7aD10LmdldE5vZGVCeU5hbWUoZCl9bGV0IGY9Smx0KHQsaCkscD1hW2YubmFtZV07cD9wLm9wTm9kZXMucHVzaChoKTphW2YubmFtZV09e3Zpc2libGVQYXJlbnQ6ZixvcE5vZGVzOltoXX19KTtsZXQgcz17fSxsPVtvXTtzW28ubmFtZV09e3RyYWNlZDohMSxpbmRleDowLGNvbm5lY3Rpb25FbmRwb2ludHM6W119O2xldCBjPW87Zm9yKGxldCB1PTE7Yy5uYW1lIT09cWM7dSsrKWM9Yy5wYXJlbnROb2RlLHNbYy5uYW1lXT17dHJhY2VkOiExLGluZGV4OnUsY29ubmVjdGlvbkVuZHBvaW50czpbXX0sbFt1XT1jO3JldHVybiBWaS5mb3JPd24oYSxmdW5jdGlvbih1LGgpe2xldCBmPXUudmlzaWJsZVBhcmVudDtWaS5lYWNoKHUub3BOb2RlcyxmdW5jdGlvbihwKXtuPXFsZShlLHQscCxuKX0pLGYubmFtZSE9PW8ubmFtZSYmWGNyKGUsZixzLGwpfSksbn1mdW5jdGlvbiBYY3IoZSx0LHIsbil7bGV0IGk9dCxvPXQsYT1bXTtmb3IoOyFyW2kubmFtZV07KW8ubmFtZSE9PWkubmFtZSYmYS5wdXNoKFtvLGldKSxvPWksaT1pLnBhcmVudE5vZGU7bGV0IHM9cltpLm5hbWVdLmluZGV4LGw9bltNYXRoLm1heChzLTEsMCldLm5hbWUsYz1sLHU9by5uYW1lLGg9by5uYW1lLGY9SHQoZSk7Zi5zZWxlY3RBbGwoYFtkYXRhLWVkZ2U9IiR7aH0tLSR7bH0iXWApLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCksVmkuZWFjaChhLGZ1bmN0aW9uKHApe2xldCBkPXBbMF0sZz1wWzFdLF89YFtkYXRhLWVkZ2U9IiR7ZC5uYW1lfS0tJHtjfX5+JHtnLm5hbWV9fn5PVVQiXWA7Zi5zZWxlY3RBbGwoXykuY2xhc3NlZCgiaW5wdXQtZWRnZS1oaWdobGlnaHQiLCEwKX0pO2ZvcihsZXQgcD0xO3A8cztwKyspe2xldCBkPW5bcC0xXSxnPW5bcF0sXz1gW2RhdGEtZWRnZT0iJHt1fX5+JHtnLm5hbWV9fn5JTi0tJHtkLm5hbWV9Il1gO2Yuc2VsZWN0QWxsKF8pLmNsYXNzZWQoImlucHV0LWVkZ2UtaGlnaGxpZ2h0IiwhMCl9fWZ1bmN0aW9uICRjcihlLHQpe2xldCByPXt9O3JldHVybiBWaS5lYWNoKHQsZnVuY3Rpb24obil7bGV0IGk9ZS5nZXROb2RlQnlOYW1lKG4pLG89Smx0KGUsaSk7cltvLm5hbWVdPW99KSxyfWZ1bmN0aW9uIEtjcihlLHQpe1ZpLmZvck93bih0LGZ1bmN0aW9uKHIpe2xldCBuPXI7Zm9yKDtuLm5hbWUhPT1xYzspe2xldCBpPUh0KGUpLnNlbGVjdChgLm5vZGVbZGF0YS1uYW1lPSIke24ubmFtZX0iXWApO2kubm9kZXMoKS5sZW5ndGgmJiFpLmNsYXNzZWQoImlucHV0LWhpZ2hsaWdodCIpJiYhaS5jbGFzc2VkKCJzZWxlY3RlZCIpJiYhaS5jbGFzc2VkKCJvcCIpJiZpLmNsYXNzZWQoImlucHV0LXBhcmVudCIsITApLG49bi5wYXJlbnROb2RlfX0pfWZ1bmN0aW9uIEpsdChlLHQpe2xldCByPSExLG49dDtmb3IoOyFyOylpZih0PW4sbj10LnBhcmVudE5vZGUsbj09PXZvaWQgMClyPSEwO2Vsc2V7bGV0IGk9ZS5nZXRSZW5kZXJOb2RlQnlOYW1lKG4ubmFtZSk7aSYmKGkuZXhwYW5kZWR8fG4gaW5zdGFuY2VvZiBfMCkmJihyPSEwKX1yZXR1cm4gdH1mdW5jdGlvbiBPbGUoZSx0LHIsbil7bGV0IGk9ZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfSkuZGF0YSh0Lmxpc3Qsbz0+by5ub2RlLm5hbWUpO3JldHVybiBpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1uYW1lIixvPT5vLm5vZGUubmFtZSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtuLmFkZEFubm90YXRpb25Hcm91cChvLHIsYSk7bGV0IHM9eWUuQW5ub3RhdGlvbi5FREdFLGw9by5yZW5kZXJNZXRhZWRnZUluZm8mJm8ucmVuZGVyTWV0YWVkZ2VJbmZvLm1ldGFlZGdlO2wmJiFsLm51bVJlZ3VsYXJFZGdlcyYmKHMrPSIgIit5ZS5Bbm5vdGF0aW9uLkNPTlRST0xfRURHRSksbCYmbC5udW1SZWZFZGdlcyYmKHMrPSIgIit5ZS5FZGdlLlJFRl9MSU5FKSwkbHQoYSxvLG4scyksby5hbm5vdGF0aW9uVHlwZSE9PV9pLkVMTElQU0lTPyhRY3IoYSxvKSxKY3IoYSxvKSk6R2xlKGEsby5ub2RlLm5hbWUsbyx5ZS5Bbm5vdGF0aW9uLkVMTElQU0lTKX0pLm1lcmdlKGkpLmF0dHIoImNsYXNzIixvPT55ZS5Bbm5vdGF0aW9uLkdST1VQKyIgIitaY3Ioby5hbm5vdGF0aW9uVHlwZSkrIiAiK0hsZShvKSkuZWFjaChmdW5jdGlvbihvKXtsZXQgYT1IdCh0aGlzKTtldXIoYSxyLG8sbiksby5hbm5vdGF0aW9uVHlwZSE9PV9pLkVMTElQU0lTJiZ0dXIoYSxyLG8sbil9KSxpLmV4aXQoKS5lYWNoKGZ1bmN0aW9uKG8pe24ucmVtb3ZlQW5ub3RhdGlvbkdyb3VwKG8scil9KS5yZW1vdmUoKSxpfWZ1bmN0aW9uIFpjcihlKXtyZXR1cm4oX2lbZV18fCIiKS50b0xvd2VyQ2FzZSgpfHxudWxsfWZ1bmN0aW9uIEpjcihlLHQpe2lmKHQuYW5ub3RhdGlvblR5cGU9PT1faS5TVU1NQVJZKVBuKGUsInVzZSIpLmF0dHIoImNsYXNzIiwic3VtbWFyeSIpLmF0dHIoInhsaW5rOmhyZWYiLCIjc3VtbWFyeS1pY29uIikuYXR0cigiY3Vyc29yIiwicG9pbnRlciIpO2Vsc2V7bGV0IHI9QmxlKGUsdCx5ZS5Bbm5vdGF0aW9uLk5PREUpO1BuKHIsInRpdGxlIikudGV4dCh0Lm5vZGUubmFtZSl9fWZ1bmN0aW9uIFFjcihlLHQpe2xldCByPXQubm9kZS5uYW1lLnNwbGl0KCIvIiksbj1yW3IubGVuZ3RoLTFdO3JldHVybiBHbGUoZSxuLHQsbnVsbCl9ZnVuY3Rpb24gR2xlKGUsdCxyLG4pe2xldCBpPXllLkFubm90YXRpb24uTEFCRUw7biYmKGkrPSIgIituKTtsZXQgbz1lLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIixpKS5hdHRyKCJkeSIsIi4zNWVtIikuYXR0cigidGV4dC1hbmNob3IiLHIuaXNJbj8iZW5kIjoic3RhcnQiKS50ZXh0KHQpO3JldHVybiBGbGUobywtMSxaNC5Bbm5vdGF0aW9uLkxBQkVMKX1mdW5jdGlvbiB0dXIoZSx0LHIsbil7ZS5vbigibW91c2VvdmVyIixpPT57bi5maXJlKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJtb3VzZW91dCIsaT0+e24uZmlyZSgiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIse25hbWU6aS5ub2RlLm5hbWUsaG9zdE5hbWU6dC5ub2RlLm5hbWV9KX0pLm9uKCJjbGljayIsaT0+e3F0LnN0b3BQcm9wYWdhdGlvbigpLG4uZmlyZSgiYW5ub3RhdGlvbi1zZWxlY3QiLHtuYW1lOmkubm9kZS5uYW1lLGhvc3ROYW1lOnQubm9kZS5uYW1lfSl9KSxyLmFubm90YXRpb25UeXBlIT09X2kuU1VNTUFSWSYmci5hbm5vdGF0aW9uVHlwZSE9PV9pLkNPTlNUQU5UJiZlLm9uKCJjb250ZXh0bWVudSIsWWx0KG4semxlKHIubm9kZSxuKSkpfWZ1bmN0aW9uIGV1cihlLHQscixuKXtsZXQgaT12MCh0KTtyLnJlbmRlck5vZGVJbmZvJiZyLmFubm90YXRpb25UeXBlIT09X2kuRUxMSVBTSVMmJnMzKGUsci5yZW5kZXJOb2RlSW5mbyxuLHllLkFubm90YXRpb24uTk9ERSksci5hbm5vdGF0aW9uVHlwZT09PV9pLlNVTU1BUlkmJihyLndpZHRoKz0xMCksZS5zZWxlY3QoInRleHQuIit5ZS5Bbm5vdGF0aW9uLkxBQkVMKS50cmFuc2l0aW9uKCkuYXR0cigieCIsaStyLmR4KyhyLmlzSW4/LTE6MSkqKHIud2lkdGgvMityLmxhYmVsT2Zmc2V0KSkuYXR0cigieSIsdC55K3IuZHkpLGUuc2VsZWN0KCJ1c2Uuc3VtbWFyeSIpLnRyYW5zaXRpb24oKS5hdHRyKCJ4IixpK3IuZHgtMykuYXR0cigieSIsdC55K3IuZHktNiksTUgoZS5zZWxlY3QoIi4iK3llLkFubm90YXRpb24uTk9ERSsiIGVsbGlwc2UiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3llLkFubm90YXRpb24uTk9ERSsiIHJlY3QiKSxpK3IuZHgsdC55K3IuZHksci53aWR0aCxyLmhlaWdodCksemQoZS5zZWxlY3QoIi4iK3llLkFubm90YXRpb24uTk9ERSsiIHVzZSIpLGkrci5keCx0Lnkrci5keSxyLndpZHRoLHIuaGVpZ2h0KSxlLnNlbGVjdCgicGF0aC4iK3llLkFubm90YXRpb24uRURHRSkudHJhbnNpdGlvbigpLmF0dHIoImQiLG89PntsZXQgYT1vLnBvaW50cy5tYXAocz0+KHt4OnMuZHgraSx5OnMuZHkrdC55fSkpO3JldHVybiBUSChhKX0pfWZ1bmN0aW9uIHJjdChlLHQscixuKXtuPW58fHllLlNjZW5lLkdST1VQO2xldCBpPW0wKGUsImciLG4pLmVtcHR5KCksbz1QbihlLCJnIixuKSxhPVBuKG8sImciLHllLlNjZW5lLkNPUkUpLHM9VmkucmVkdWNlKHQuY29yZUdyYXBoLm5vZGVzKCksKGwsYyk9PntsZXQgdT10LmNvcmVHcmFwaC5ub2RlKGMpO3JldHVybiB1LmV4Y2x1ZGVkfHxsLnB1c2godSksbH0sQXJyYXkoKSk7aWYodC5ub2RlLnR5cGU9PT1qdC5TRVJJRVMmJnMucmV2ZXJzZSgpLGtsZShhLHQuY29yZUdyYXBoLHIpLEFIKGEscyxyKSx0Lmlzb2xhdGVkSW5FeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1QbihvLCJnIix5ZS5TY2VuZS5JTkVYVFJBQ1QpO0FIKGwsdC5pc29sYXRlZEluRXh0cmFjdCxyKX1lbHNlIG0wKG8sImciLHllLlNjZW5lLklORVhUUkFDVCkucmVtb3ZlKCk7aWYodC5pc29sYXRlZE91dEV4dHJhY3QubGVuZ3RoPjApe2xldCBsPVBuKG8sImciLHllLlNjZW5lLk9VVEVYVFJBQ1QpO0FIKGwsdC5pc29sYXRlZE91dEV4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix5ZS5TY2VuZS5PVVRFWFRSQUNUKS5yZW1vdmUoKTtpZih0LmxpYnJhcnlGdW5jdGlvbnNFeHRyYWN0Lmxlbmd0aD4wKXtsZXQgbD1QbihvLCJnIix5ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKTtBSChsLHQubGlicmFyeUZ1bmN0aW9uc0V4dHJhY3Qscil9ZWxzZSBtMChvLCJnIix5ZS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5yZW1vdmUoKTtyZXR1cm4gTWxlKG8sdCksaSYmby5hdHRyKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsMSksb312YXIgcnVyPS44LGtIPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGksbyxhKXt0aGlzLnN2Zz10LHRoaXMubGFiZWxQYWRkaW5nPWEsdGhpcy56b29tRz1yLHRoaXMubWFpblpvb209bix0aGlzLm1heFdhbmRIPW87bGV0IHM9SHQoaS5zaGFkb3dSb290KSxsPXMuc2VsZWN0KCJzdmciKSxjPWwuc2VsZWN0KCJyZWN0IiksdT1mPT57dGhpcy52aWV3cG9pbnRDb29yZC54PXF0LngsdGhpcy52aWV3cG9pbnRDb29yZC55PXF0LnksdGhpcy51cGRhdGVWaWV3cG9pbnQoKX07dGhpcy52aWV3cG9pbnRDb29yZD17eDowLHk6MH07bGV0IGg9cGIoKS5zdWJqZWN0KE9iamVjdCkub24oImRyYWciLHUpO2MuZGF0dW0odGhpcy52aWV3cG9pbnRDb29yZCkuY2FsbChoKSxsLm9uKCJjbGljayIsKCk9PntpZihxdC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtsZXQgZj1OdW1iZXIoYy5hdHRyKCJ3aWR0aCIpKSxwPU51bWJlcihjLmF0dHIoImhlaWdodCIpKSxkPXpvKGwubm9kZSgpKTt0aGlzLnZpZXdwb2ludENvb3JkLng9ZFswXS1mLzIsdGhpcy52aWV3cG9pbnRDb29yZC55PWRbMV0tcC8yLHRoaXMudXBkYXRlVmlld3BvaW50KCl9KSx0aGlzLnZpZXdwb2ludD1jLm5vZGUoKSx0aGlzLm1pbmltYXBTdmc9bC5ub2RlKCksdGhpcy5taW5pbWFwPWksdGhpcy5jYW52YXM9cy5zZWxlY3QoImNhbnZhcy5maXJzdCIpLm5vZGUoKSx0aGlzLmNhbnZhc0J1ZmZlcj1zLnNlbGVjdCgiY2FudmFzLnNlY29uZCIpLm5vZGUoKSx0aGlzLmRvd25sb2FkQ2FudmFzPXMuc2VsZWN0KCJjYW52YXMuZG93bmxvYWQiKS5ub2RlKCksSHQodGhpcy5kb3dubG9hZENhbnZhcykuc3R5bGUoImRpc3BsYXkiLCJub25lIiksdGhpcy51cGRhdGUoKX11cGRhdGVWaWV3cG9pbnQoKXtIdCh0aGlzLnZpZXdwb2ludCkuYXR0cigieCIsdGhpcy52aWV3cG9pbnRDb29yZC54KS5hdHRyKCJ5Iix0aGlzLnZpZXdwb2ludENvb3JkLnkpO2xldCB0PS10aGlzLnZpZXdwb2ludENvb3JkLngqdGhpcy5zY2FsZU1haW4vdGhpcy5zY2FsZU1pbmltYXAscj0tdGhpcy52aWV3cG9pbnRDb29yZC55KnRoaXMuc2NhbGVNYWluL3RoaXMuc2NhbGVNaW5pbWFwO0h0KHRoaXMuc3ZnKS5jYWxsKHRoaXMubWFpblpvb20udHJhbnNmb3JtLFhoLnRyYW5zbGF0ZSh0LHIpLnNjYWxlKHRoaXMuc2NhbGVNYWluKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIG5ldyBQcm9taXNlKHQ9Pnt0aGlzLmRvd25sb2FkQ2FudmFzLnRvQmxvYihyPT57dChyKX0sImltYWdlL3BuZyIpfSl9dXBkYXRlKCl7bGV0IHQ9bnVsbDt0cnl7aWYodD10aGlzLnpvb21HLmdldEJCb3goKSx0LndpZHRoPT09MClyZXR1cm59Y2F0Y2gocCl7cmV0dXJufWxldCByPUh0KHRoaXMuc3ZnKSxuPSIiLGk9dGhpcy5zdmcsYT0oaS5nZXRSb290Tm9kZT9pLmdldFJvb3ROb2RlKCk6dGhpcy5zdmcucGFyZW50Tm9kZSkuc3R5bGVTaGVldHM7Zm9yKGxldCBwPTA7cDxhLmxlbmd0aDtwKyspdHJ5e2xldCBkPWFbcF0uY3NzUnVsZXN8fGFbcF0ucnVsZXM7aWYoZD09bnVsbCljb250aW51ZTtmb3IobGV0IGc9MDtnPGQubGVuZ3RoO2crKyluKz1kW2ddLmNzc1RleHQucmVwbGFjZSgvID90Zi1bXHctXSsgPy9nLCIiKStgCmB9Y2F0Y2goZCl7aWYoZC5uYW1lIT09IlNlY3VyaXR5RXJyb3IiKXRocm93IGR9bGV0IHM9ci5hcHBlbmQoInN0eWxlIik7cy50ZXh0KG4pO2xldCBsPUh0KHRoaXMuem9vbUcpLGM9bC5hdHRyKCJ0cmFuc2Zvcm0iKTtsLmF0dHIoInRyYW5zZm9ybSIsbnVsbCksdC5oZWlnaHQrPXQueSx0LndpZHRoKz10LngsdC5oZWlnaHQrPXRoaXMubGFiZWxQYWRkaW5nKjIsdC53aWR0aCs9dGhpcy5sYWJlbFBhZGRpbmcqMixyLmF0dHIoIndpZHRoIix0LndpZHRoKS5hdHRyKCJoZWlnaHQiLHQuaGVpZ2h0KSx0aGlzLnNjYWxlTWluaW1hcD10aGlzLm1heFdhbmRIL01hdGgubWF4KHQud2lkdGgsdC5oZWlnaHQpLHRoaXMubWluaW1hcFNpemU9e3dpZHRoOnQud2lkdGgqdGhpcy5zY2FsZU1pbmltYXAsaGVpZ2h0OnQuaGVpZ2h0KnRoaXMuc2NhbGVNaW5pbWFwfSxIdCh0aGlzLm1pbmltYXBTdmcpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSksSHQodGhpcy5jYW52YXNCdWZmZXIpLmF0dHIodGhpcy5taW5pbWFwU2l6ZSk7bGV0IHU9SHQodGhpcy5kb3dubG9hZENhbnZhcyk7dS5zdHlsZSgid2lkdGgiLHQud2lkdGgpLHUuc3R5bGUoImhlaWdodCIsdC5oZWlnaHQpLHUuYXR0cigid2lkdGgiLDMqdC53aWR0aCksdS5hdHRyKCJoZWlnaHQiLDMqdC5oZWlnaHQpLHRoaXMudHJhbnNsYXRlIT1udWxsJiZ0aGlzLnpvb20hPW51bGwmJnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy56b29tKCkpO2xldCBoPW5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcodGhpcy5zdmcpO3MucmVtb3ZlKCksci5hdHRyKCJ3aWR0aCIsbnVsbCkuYXR0cigiaGVpZ2h0IixudWxsKSxsLmF0dHIoInRyYW5zZm9ybSIsYyk7bGV0IGY9bmV3IEltYWdlO2Yub25sb2FkPSgpPT57bGV0IHA9dGhpcy5jYW52YXNCdWZmZXIuZ2V0Q29udGV4dCgiMmQiKTtwPT1udWxsfHxwLmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNCdWZmZXIud2lkdGgsdGhpcy5jYW52YXNCdWZmZXIuaGVpZ2h0KSxwPT1udWxsfHxwLmRyYXdJbWFnZShmLDAsMCx0aGlzLm1pbmltYXBTaXplLndpZHRoLHRoaXMubWluaW1hcFNpemUuaGVpZ2h0KSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntIdCh0aGlzLmNhbnZhc0J1ZmZlcikuc3R5bGUoImRpc3BsYXkiLG51bGwpLEh0KHRoaXMuY2FudmFzKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxbdGhpcy5jYW52YXMsdGhpcy5jYW52YXNCdWZmZXJdPVt0aGlzLmNhbnZhc0J1ZmZlcix0aGlzLmNhbnZhc119KTtsZXQgZD10aGlzLmRvd25sb2FkQ2FudmFzLmdldENvbnRleHQoIjJkIik7ZD09bnVsbHx8ZC5jbGVhclJlY3QoMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpLGQ9PW51bGx8fGQuZHJhd0ltYWdlKGYsMCwwLHRoaXMuZG93bmxvYWRDYW52YXMud2lkdGgsdGhpcy5kb3dubG9hZENhbnZhcy5oZWlnaHQpfSxmLm9uZXJyb3I9KCk9PntsZXQgcD1uZXcgQmxvYihbaF0se3R5cGU6ImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCJ9KTtmLnNyYz1VUkwuY3JlYXRlT2JqZWN0VVJMKHApfSxmLnNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoaCl9em9vbSh0KXtpZih0aGlzLnNjYWxlTWluaW1hcD09bnVsbClyZXR1cm47dCYmKHRoaXMudHJhbnNsYXRlPVt0LngsdC55XSx0aGlzLnNjYWxlTWFpbj10LmspO2xldCByPXRoaXMuc3ZnLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49SHQodGhpcy52aWV3cG9pbnQpO3RoaXMudmlld3BvaW50Q29vcmQueD0tdGhpcy50cmFuc2xhdGVbMF0qdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW4sdGhpcy52aWV3cG9pbnRDb29yZC55PS10aGlzLnRyYW5zbGF0ZVsxXSp0aGlzLnNjYWxlTWluaW1hcC90aGlzLnNjYWxlTWFpbjtsZXQgaT1yLndpZHRoKnRoaXMuc2NhbGVNaW5pbWFwL3RoaXMuc2NhbGVNYWluLG89ci5oZWlnaHQqdGhpcy5zY2FsZU1pbmltYXAvdGhpcy5zY2FsZU1haW47bi5hdHRyKCJ4Iix0aGlzLnZpZXdwb2ludENvb3JkLngpLmF0dHIoInkiLHRoaXMudmlld3BvaW50Q29vcmQueSkuYXR0cigid2lkdGgiLGkpLmF0dHIoImhlaWdodCIsbyk7bGV0IGE9dGhpcy5taW5pbWFwU2l6ZS53aWR0aCxzPXRoaXMubWluaW1hcFNpemUuaGVpZ2h0LGw9dGhpcy52aWV3cG9pbnRDb29yZC54LGM9dGhpcy52aWV3cG9pbnRDb29yZC55LHU9TWF0aC5taW4oTWF0aC5tYXgoMCxsK2kpLGEpLU1hdGgubWluKE1hdGgubWF4KDAsbCksYSksaD1NYXRoLm1pbihNYXRoLm1heCgwLGMrbykscyktTWF0aC5taW4oTWF0aC5tYXgoMCxjKSxzKTt1KmgvKGEqcyk8cnVyP3RoaXMubWluaW1hcC5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTp0aGlzLm1pbmltYXAuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fTt2YXIgaWN0PWNsYXNzIGV4dGVuZHMgbXR7aW5pdCh0LHIsbixpLG8pe3JldHVybiBuZXcga0godCxyLG4sdGhpcyxpLG8pfX07aWN0LnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgbGluZWFyOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCguaGlkZGVuKSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgY2FudmFzIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OwogICAgICB9CgogICAgICByZWN0IHsKICAgICAgICBmaWxsOiB3aGl0ZTsKICAgICAgICBzdHJva2U6ICMxMTExMTE7CiAgICAgICAgc3Ryb2tlLXdpZHRoOiAxcHg7CiAgICAgICAgZmlsbC1vcGFjaXR5OiAwOwogICAgICAgIGZpbHRlcjogdXJsKCNtaW5pbWFwRHJvcFNoYWRvdyk7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzdmc+CiAgICAgIDxkZWZzPgogICAgICAgIDxmaWx0ZXIKICAgICAgICAgIGlkPSJtaW5pbWFwRHJvcFNoYWRvdyIKICAgICAgICAgIHg9Ii0yMCUiCiAgICAgICAgICB5PSItMjAlIgogICAgICAgICAgd2lkdGg9IjE1MCUiCiAgICAgICAgICBoZWlnaHQ9IjE1MCUiCiAgICAgICAgPgogICAgICAgICAgPGZlT2Zmc2V0IHJlc3VsdD0ib2ZmT3V0IiBpbj0iU291cmNlR3JhcGhpYyIgZHg9IjEiIGR5PSIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgICAgcmVzdWx0PSJtYXRyaXhPdXQiCiAgICAgICAgICAgIGluPSJvZmZPdXQiCiAgICAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgICAgdmFsdWVzPSIwLjEgMCAwIDAgMCAwIDAuMSAwIDAgMCAwIDAgMC4xIDAgMCAwIDAgMCAwLjUgMCIKICAgICAgICAgID48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgICAgcmVzdWx0PSJibHVyT3V0IgogICAgICAgICAgICBpbj0ibWF0cml4T3V0IgogICAgICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgICA+PC9mZUdhdXNzaWFuQmx1cj4KICAgICAgICAgIDxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImJsdXJPdXQiIG1vZGU9Im5vcm1hbCI+PC9mZUJsZW5kPgogICAgICAgIDwvZmlsdGVyPgogICAgICA8L2RlZnM+CiAgICAgIDxyZWN0PjwvcmVjdD4KICAgIDwvc3ZnPgogICAgPGNhbnZhcyBjbGFzcz0iZmlyc3QiPjwvY2FudmFzPgogICAgPCEtLSBBZGRpdGlvbmFsIGNhbnZhcyB0byB1c2UgYXMgYnVmZmVyIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbiB1cGRhdGVzIC0tPgogICAgPGNhbnZhcyBjbGFzcz0ic2Vjb25kIj48L2NhbnZhcz4KICAgIDxjYW52YXMgY2xhc3M9ImRvd25sb2FkIj48L2NhbnZhcz4KICBgO2ljdD1FKFt5dCgidGYtZ3JhcGgtbWluaW1hcCIpXSxpY3QpO3ZhciBXbGU9UWAKICA8c3R5bGU+CiAgICA6aG9zdCguZGFyay1tb2RlKSB7CiAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAyMHB4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNzdmcgewogICAgICBmbGV4OiAxOwogICAgICBmb250LWZhbWlseTogUm9ib3RvLCBzYW5zLXNlcmlmOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgICNoaWRkZW4gewogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIHRvcDogMHB4OwogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICB9CgogICAgdGV4dCB7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgfQoKICAgIC8qIC0tLSBOb2RlIGFuZCBhbm5vdGF0aW9uLW5vZGUgZm9yIE1ldGFub2RlIC0tLSAqLwoKICAgIC5tZXRhID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubWV0YSA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICB9CiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAuYW5ub3RhdGlvbi5tZXRhLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICB9CiAgICAubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLm1ldGEuc2VsZWN0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHJlY3QsCiAgICAubm9kZS5tZXRhLnNlbGVjdGVkLmV4cGFuZGVkID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAzOwogICAgfQogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5ub2Rlc2hhcGUgPiByZWN0LAogICAgLmFubm90YXRpb24ubWV0YS5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCwKICAgIC5ub2RlLm1ldGEuc2VsZWN0ZWQuZXhwYW5kZWQuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDQ7CiAgICB9CgogICAgLmZhZGVkLAogICAgLmZhZGVkIHJlY3QsCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCBwYXRoLAogICAgLmZhZGVkIHVzZSwKICAgICNyZWN0SGF0Y2ggbGluZSwKICAgICNlbGxpcHNlSGF0Y2ggbGluZSB7CiAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIGZpbGw6IHdoaXRlOwogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgcGF0aCB7CiAgICAgIHN0cm9rZS13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLmZhZGVkIHJlY3QgewogICAgICBmaWxsOiB1cmwoI3JlY3RIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgZWxsaXBzZSwKICAgIC5mYWRlZCB1c2UgewogICAgICBmaWxsOiB1cmwoI2VsbGlwc2VIYXRjaCkgIWltcG9ydGFudDsKICAgIH0KCiAgICAuZmFkZWQgdGV4dCB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgLyogUnVsZXMgdXNlZCBmb3IgaW5wdXQtdHJhY2luZy4gKi8KICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gcmVjdCwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gZWxsaXBzZSwKICAgIC5pbnB1dC1oaWdobGlnaHQgPiAqID4gdXNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogI2ZmOTgwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qICAtIEZhZGVkIG5vbi1pbnB1dCBzdHlsaW5nICovCiAgICAubm9uLWlucHV0ID4gKiA+IHJlY3QsCi5ub24taW5wdXQgPiAqID4gZWxsaXBzZSwKLm5vbi1pbnB1dCA+ICogPiB1c2UsCi8qIEZvciBDb25zdCBub2Rlcy4gKi8KLm5vbi1pbnB1dCA+ICogPiAuY29uc3RhbnQ6bm90KFtjbGFzcyo9ImlucHV0LWhpZ2hsaWdodCJdKSA+CiAgLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UsCi8qIEZvciBzdHlsaW5nIG9mIGFubm90YXRpb24gbm9kZXMgb2Ygbm9uLWlucHV0IG5vZGVzLiAqLwoubm9uLWlucHV0ID4gZyA+IC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+IHJlY3QgewogICAgICBzdHJva2U6ICNlMGQ0YjMgIWltcG9ydGFudDsKICAgICAgc3Ryb2tlLXdpZHRoOiBpbmhlcml0OwogICAgICBzdHJva2UtZGFzaGFycmF5OiBpbmhlcml0OwogICAgfQoKICAgIC5ub24taW5wdXQgcGF0aCB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAubm9uLWlucHV0ID4gLm5vZGVzaGFwZSA+IHJlY3QsCi5ub24taW5wdXQgPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCwKLyogRm9yIHN0eWxpbmcgb2YgYW5ub3RhdGlvbiBub2RlcyBvZiBub24taW5wdXQgbm9kZXMuICovCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1ub2RlID4gcmVjdCB7CiAgICAgIGZpbGw6IHVybCgjcmVjdEhhdGNoKSAhaW1wb3J0YW50OwogICAgfQoKICAgIC5ub24taW5wdXQgZWxsaXBzZSwKICAgIC5ub24taW5wdXQgdXNlIHsKICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpICFpbXBvcnRhbnQ7CiAgICB9CgogICAgLm5vbi1pbnB1dCA+IHRleHQgewogICAgICBvcGFjaXR5OiAwOwogICAgfQoKICAgIC5ub24taW5wdXQgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlIHsKICAgICAgbWFya2VyLWVuZDogdXJsKCNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCk7CiAgICB9CgogICAgLm5vbi1pbnB1dCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC8qIElucHV0IGVkZ2VzLiAqLwogICAgLmlucHV0LWVkZ2UtaGlnaGxpZ2h0ID4gdGV4dCB7CiAgICAgIGZpbGw6IGJsYWNrICFpbXBvcnRhbnQ7CiAgICB9CiAgICAuaW5wdXQtaGlnaGxpZ2h0ID4gLmluLWFubm90YXRpb25zID4gLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1lZGdlLAogICAgLmlucHV0LWhpZ2hsaWdodC1zZWxlY3RlZAogICAgICA+IC5pbi1hbm5vdGF0aW9ucwogICAgICA+IC5hbm5vdGF0aW9uCiAgICAgID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIHN0cm9rZTogIzk5OSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIE5vbi1pbnB1dCBlZGdlcy4gKi8KICAgIC5ub24taW5wdXQtZWRnZS1oaWdobGlnaHQsCi5ub24taW5wdXQgPiBnID4gLmFubm90YXRpb24gPiBwYXRoLAovKiBBbm5vdGF0aW9uIHN0eWxlcyAobGFiZWwgYW5kIGVkZ2VzIHJlc3BlY3RpdmVseSkuICovCi5ub24taW5wdXQgPiBnID4KLmFubm90YXRpb246bm90KC5pbnB1dC1oaWdobGlnaHQpOm5vdCguaW5wdXQtaGlnaGxpZ2h0LXNlbGVjdGVkKSA+Ci5hbm5vdGF0aW9uLWxhYmVsCi8qLmFubm90YXRpb24tZWRnZSovIHsKICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgfQoKICAgIC8qIC0tLSBPcCBOb2RlIC0tLSAqLwoKICAgIC5vcCA+IC5ub2Rlc2hhcGUgPiAubm9kZWNvbG9ydGFyZ2V0LAogICAgLm9wID4gLmFubm90YXRpb24tbm9kZSA+IC5ub2RlY29sb3J0YXJnZXQgewogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIGZpbGw6ICNmZmY7CiAgICAgIHN0cm9rZTogI2NjYzsKICAgIH0KCiAgICAub3Auc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KCiAgICAub3AuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLm5vZGVjb2xvcnRhcmdldCwKICAgIC5vcC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAubm9kZWNvbG9ydGFyZ2V0IHsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC8qIC0tLSBTZXJpZXMgTm9kZSAtLS0gKi8KCiAgICAvKiBCeSBkZWZhdWx0LCBkb24ndCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4uICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHJlY3QgewogICAgICBmaWxsOiBoc2woMCwgMCUsIDcwJSk7CiAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNSwgNTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KCiAgICAvKiBPbmNlIGV4cGFuZGVkLCBzaG93IHRoZSBzZXJpZXMgYmFja2dyb3VuZCA8cmVjdD4gYW5kIGhpZGUgdGhlIDx1c2U+LiAqLwogICAgLnNlcmllcy5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgZmlsbC1vcGFjaXR5OiAwLjE1OwogICAgICBzdHJva2U6IGhzbCgwLCAwJSwgNzAlKTsKICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICB9CiAgICAuc2VyaWVzLmV4cGFuZGVkID4gLm5vZGVzaGFwZSA+IHVzZSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAvKioKICogVE9ETzogU2ltcGxpZnkgdGhpcyBieSBhcHBseWluZyBhIHN0YWJsZSBjbGFzcyBuYW1lIHRvIGFsbCA8Zz4KICogZWxlbWVudHMgdGhhdCBjdXJyZW50bHkgaGF2ZSBlaXRoZXIgdGhlIG5vZGVzaGFwZSBvciBhbm5vdGF0aW9uLW5vZGUgY2xhc3Nlcy4KICovCiAgICAuc2VyaWVzID4gLm5vZGVzaGFwZSA+IHVzZSwKICAgIC5zZXJpZXMgPiAuYW5ub3RhdGlvbi1ub2RlID4gdXNlIHsKICAgICAgc3Ryb2tlOiAjY2NjOwogICAgfQogICAgLnNlcmllcy5oaWdobGlnaHRlZCA+IC5ub2Rlc2hhcGUgPiB1c2UsCiAgICAuc2VyaWVzLmhpZ2hsaWdodGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMjsKICAgIH0KICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gdXNlLAogICAgLnNlcmllcy5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiB1c2UgewogICAgICBzdHJva2U6IHJlZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAyOwogICAgfQoKICAgIC5zZXJpZXMuc2VsZWN0ZWQgPiAubm9kZXNoYXBlID4gcmVjdCB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLmFubm90YXRpb24uc2VyaWVzLnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IHVzZSB7CiAgICAgIHN0cm9rZTogcmVkOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICB9CgogICAgLyogLS0tIEJyaWRnZSBOb2RlIC0tLSAqLwogICAgLmJyaWRnZSA+IC5ub2Rlc2hhcGUgPiByZWN0IHsKICAgICAgc3Ryb2tlOiAjZjBmOwogICAgICBvcGFjaXR5OiAwLjI7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIFN0cnVjdHVyYWwgRWxlbWVudHMgLS0tICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUuc3RydWN0dXJhbCB7CiAgICAgIHN0cm9rZTogI2YwZjsKICAgICAgb3BhY2l0eTogMC4yOwogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC8qIFJlZmVyZW5jZSBFZGdlICovCiAgICAuZWRnZSA+IHBhdGguZWRnZWxpbmUucmVmZXJlbmNlZWRnZSB7CiAgICAgIHN0cm9rZTogI2ZmYjc0ZDsKICAgICAgb3BhY2l0eTogMTsKICAgIH0KCiAgICAvKiAtLS0gU2VyaWVzIE5vZGVzIC0tLSAqLwoKICAgIC8qIEhpZGUgdGhlIHJlY3QgZm9yIGEgc2VyaWVzJyBhbm5vdGF0aW9uLiAqLwogICAgLnNlcmllcyA+IC5hbm5vdGF0aW9uLW5vZGUgPiByZWN0IHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAvKiAtLS0gTm9kZSBsYWJlbCAtLS0gKi8KCiAgICAubm9kZSB7CiAgICAgIC8qIFByb3ZpZGUgYSBoaW50IHRvIGJyb3dzZXJzIHRvIGF2b2lkIHVzaW5nIHRoZWlyIHN0YXRpYyByYXN0ZXJpemF0aW9uCiAgICAgIGF0IGluaXRpYWwgc2NhbGUsIHdoaWNoIGxvb2tzIHZlcnkgcGl4ZWxhdGVkIG9uIENocm9taXVtIHdoZW4gem9vbWVkIGluLgogICAgICBOb3RlIHRoYXQgd2UgaW50ZW50aW9uYWxseSBkbyAqbm90KiB1c2UgJ3dpbGwtY2hhbmdlOiB0cmFuc2Zvcm0nIGFuZAogICAgICAndHJhbnNsYXRlWigwKSBoZXJlLCB3aGljaCBpbnRyb2R1Y2UgYmx1cnJpbmVzcyBvbiBGaXJlZm94LgogICAgICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvaXNzdWVzLzQ3NDQgKi8KICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDFweCk7CiAgICB9CgogICAgLm5vZGUgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogIzQ0NDsKICAgIH0KCiAgICAubWV0YS5leHBhbmRlZCA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA5cHg7CiAgICB9CgogICAgLnNlcmllcyA+IHRleHQubm9kZWxhYmVsIHsKICAgICAgZm9udC1zaXplOiA4cHg7CiAgICB9CgogICAgLm9wID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBmb250LXNpemU6IDZweDsKICAgIH0KCiAgICAuYnJpZGdlID4gdGV4dC5ub2RlbGFiZWwgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIC5ub2RlLm1ldGEuZXhwYW5kZWQgPiB0ZXh0Lm5vZGVsYWJlbCB7CiAgICAgIGN1cnNvcjogbm9ybWFsOwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuaGlnaGxpZ2h0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNTBhM2Y3OwogICAgfQoKICAgIC5hbm5vdGF0aW9uLm1ldGEuc2VsZWN0ZWQgPiB0ZXh0LmFubm90YXRpb24tbGFiZWwgewogICAgICBmaWxsOiAjNDI4NWY0OwogICAgfQoKICAgIC8qIC0tLSBBbm5vdGF0aW9uIC0tLSAqLwoKICAgIC8qIG9ubHkgYXBwbGllZCBmb3IgYW5ub3RhdGlvbnMgdGhhdCBhcmUgbm90IHN1bW1hcnkgb3IgY29uc3RhbnQuCiguc3VtbWFyeSwgLmNvbnN0YW50IGdldHMgb3ZlcnJpZGRlbiBiZWxvdykgKi8KICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tbm9kZSA+ICogewogICAgICBzdHJva2Utd2lkdGg6IDAuNTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbi5zdW1tYXJ5ID4gLmFubm90YXRpb24tbm9kZSA+ICosCiAgICAuYW5ub3RhdGlvbi5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiAqIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tZWRnZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2FhYTsKICAgICAgc3Ryb2tlLXdpZHRoOiAwLjU7CiAgICAgIG1hcmtlci1lbmQ6IHVybCgjYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UgewogICAgICBtYXJrZXItZW5kOiB1cmwoI2Fubm90YXRpb24tYXJyb3doZWFkLWZhZGVkKTsKICAgIH0KCiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQpOwogICAgfQoKICAgIC5mYWRlZCAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWVkZ2UucmVmbGluZSB7CiAgICAgIG1hcmtlci1zdGFydDogdXJsKCNyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQpOwogICAgfQoKICAgIC5hbm5vdGF0aW9uID4gLmFubm90YXRpb24tY29udHJvbC1lZGdlIHsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMTsKICAgIH0KCiAgICAjYW5ub3RhdGlvbi1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjYWFhOwogICAgfQoKICAgICNhbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNhYWE7CiAgICB9CgogICAgI3JlZi1hbm5vdGF0aW9uLWFycm93aGVhZC1mYWRlZCB7CiAgICAgIGZpbGw6ICNlMGQ0YjM7CiAgICB9CgogICAgLmFubm90YXRpb24gPiAuYW5ub3RhdGlvbi1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogNXB4OwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CiAgICAuYW5ub3RhdGlvbiA+IC5hbm5vdGF0aW9uLWxhYmVsLmFubm90YXRpb24tZWxsaXBzaXMgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB9CgogICAgLyogSGlkZSBhbm5vdGF0aW9ucyBvbiBleHBhbmRlZCBtZXRhIG5vZGVzIHNpbmNlIHRoZXkncmUgcmVkdW5kYW50LiAqLwogICAgLmV4cGFuZGVkID4gLmluLWFubm90YXRpb25zLAogICAgLmV4cGFuZGVkID4gLm91dC1hbm5vdGF0aW9ucyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IENvbnN0YW50IC0tLSAqLwoKICAgIC5jb25zdGFudCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmaWxsOiB3aGl0ZTsKICAgICAgc3Ryb2tlOiAjODQ4NDg0OwogICAgfQoKICAgIC5jb25zdGFudC5zZWxlY3RlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgZmlsbDogd2hpdGU7CiAgICAgIHN0cm9rZTogcmVkOwogICAgfQoKICAgIC5jb25zdGFudC5oaWdobGlnaHRlZCA+IC5hbm5vdGF0aW9uLW5vZGUgPiBlbGxpcHNlIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CgogICAgLyogLS0tIEFubm90YXRpb246IFN1bW1hcnkgLS0tICovCgogICAgLnN1bW1hcnkgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZmlsbDogI2RiNDQzNzsKICAgICAgc3Ryb2tlOiAjZGI0NDM3OwogICAgfQoKICAgIC5zdW1tYXJ5LnNlbGVjdGVkID4gLmFubm90YXRpb24tbm9kZSA+IGVsbGlwc2UgewogICAgICBmaWxsOiAjYTUyNzE0OwogICAgICBzdHJva2U6ICNhNTI3MTQ7CiAgICB9CgogICAgLnN1bW1hcnkuaGlnaGxpZ2h0ZWQgPiAuYW5ub3RhdGlvbi1ub2RlID4gZWxsaXBzZSB7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgfQoKICAgIC8qIC0tLSBFZGdlIC0tLSAqLwoKICAgIC5lZGdlID4gcGF0aC5lZGdlbGluZSB7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZTogI2JiYjsKICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICBzdHJva2Utd2lkdGg6IDAuNzU7CiAgICB9CgogICAgLmVkZ2UgLnNlbGVjdGFibGVlZGdlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5zZWxlY3RlZGVkZ2UgPiBwYXRoLmVkZ2VsaW5lIHsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBzdHJva2U6ICNmMDA7CiAgICB9CgogICAgLmVkZ2Uuc2VsZWN0ZWRlZGdlIHRleHQgewogICAgICBmaWxsOiAjMDAwOwogICAgfQoKICAgIC8qIExhYmVscyBzaG93aW5nIHRlbnNvciBzaGFwZXMgb24gZWRnZXMgKi8KICAgIC5lZGdlID4gdGV4dCB7CiAgICAgIGZvbnQtc2l6ZTogMy41cHg7CiAgICAgIGZpbGw6ICM2NjY7CiAgICB9CgogICAgLmRhdGFmbG93LWFycm93aGVhZCB7CiAgICAgIGZpbGw6ICNiYmI7CiAgICB9CgogICAgLnJlZmVyZW5jZS1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZmZiNzRkOwogICAgfQoKICAgIC5zZWxlY3RlZC1hcnJvd2hlYWQgewogICAgICBmaWxsOiAjZjAwOwogICAgfQoKICAgIC5lZGdlIC5jb250cm9sLWRlcCB7CiAgICAgIHN0cm9rZS1kYXNoYXJyYXk6IDIsIDI7CiAgICB9CgogICAgLyogLS0tIEdyb3VwIG5vZGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbiAtLS0gKi8KCiAgICAvKiBIaWRlcyBleHBhbmQvY29sbGFwc2UgYnV0dG9ucyB3aGVuIGEgbm9kZSBpc24ndCBleHBhbmRlZCBvciBoaWdobGlnaHRlZC4gVXNpbmcKICAgaW5jcmVkaWJseSBzbWFsbCBvcGFjaXR5IHNvIHRoYXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgPGc+IHBhcmVudCBzdGlsbCB0YWtlcwogICB0aGlzIGNvbnRhaW5lciBpbnRvIGFjY291bnQgZXZlbiB3aGVuIGl0IGlzbid0IHZpc2libGUgKi8KICAgIC5ub2RlOm5vdCguaGlnaGxpZ2h0ZWQpOm5vdCguZXhwYW5kZWQpID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgewogICAgICBvcGFjaXR5OiAwLjAxOwogICAgfQogICAgLm5vZGUuaGlnaGxpZ2h0ZWQgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciB7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIC5idXR0b25jaXJjbGUgewogICAgICBmaWxsOiAjZTc4MTFkOwogICAgfQogICAgLmJ1dHRvbmNpcmNsZTpob3ZlciB7CiAgICAgIGZpbGw6ICNiOTY3MTc7CiAgICB9CiAgICAuZXhwYW5kYnV0dG9uLAogICAgLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KICAgIC8qIERvIG5vdCBsZXQgdGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIGJ1dHRvbiB0YWtlIHBvaW50ZXIgZm9jdXMgKi8KICAgIC5ub2RlID4gLm5vZGVzaGFwZSA+IC5idXR0b25jb250YWluZXIgPiAuZXhwYW5kYnV0dG9uLAogICAgLm5vZGUgPiAubm9kZXNoYXBlID4gLmJ1dHRvbmNvbnRhaW5lciA+IC5jb2xsYXBzZWJ1dHRvbiB7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgfQogICAgLyogT25seSBzaG93IHRoZSBleHBhbmQgYnV0dG9uIHdoZW4gYSBub2RlIGlzIGNvbGxhcHNlZCBhbmQgb25seSBzaG93IHRoZQogICBjb2xsYXBzZSBidXR0b24gd2hlbiBhIG5vZGUgaXMgZXhwYW5kZWQuICovCiAgICAubm9kZS5leHBhbmRlZCA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmV4cGFuZGJ1dHRvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubm9kZTpub3QoLmV4cGFuZGVkKSA+IC5ub2Rlc2hhcGUgPiAuYnV0dG9uY29udGFpbmVyID4gLmNvbGxhcHNlYnV0dG9uIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwtc3RhdHMgewogICAgICBmb250LXNpemU6IDRweDsKICAgICAgdGV4dC1hbmNob3I6IG1pZGRsZTsKICAgIH0KCiAgICAuaGVhbHRoLXBpbGwgcmVjdCB7CiAgICAgIGZpbHRlcjogdXJsKCNoZWFsdGgtcGlsbC1zaGFkb3cpOwogICAgICByeDogMzsKICAgICAgcnk6IDM7CiAgICB9CgogICAgLnRpdGxlQ29udGFpbmVyIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB0b3A6IDIwcHg7CiAgICB9CgogICAgLnRpdGxlLAogICAgLmF1eFRpdGxlLAogICAgLmZ1bmN0aW9uTGlicmFyeVRpdGxlIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgfQoKICAgICNtaW5pbWFwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICByaWdodDogMjBweDsKICAgICAgYm90dG9tOiAyMHB4OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmUyZTI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjZDRkNGQ0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgewogICAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMDsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgfQoKICAgIC5jb250ZXh0LW1lbnUgdWwgbGkgewogICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgIH0KCiAgICAuY29udGV4dC1tZW51IHVsIGxpOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YzOTEzZTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQogIDwvc3R5bGU+CiAgPGRpdiBjbGFzcz0idGl0bGVDb250YWluZXIiPgogICAgPGRpdiBpZD0idGl0bGUiIGNsYXNzPSJ0aXRsZSI+TWFpbiBHcmFwaDwvZGl2PgogICAgPGRpdiBpZD0iYXV4VGl0bGUiIGNsYXNzPSJhdXhUaXRsZSI+QXV4aWxpYXJ5IE5vZGVzPC9kaXY+CiAgICA8ZGl2IGlkPSJmdW5jdGlvbkxpYnJhcnlUaXRsZSIgY2xhc3M9ImZ1bmN0aW9uTGlicmFyeVRpdGxlIj5GdW5jdGlvbnM8L2Rpdj4KICA8L2Rpdj4KICA8c3ZnIGlkPSJzdmciPgogICAgPGRlZnM+CiAgICAgIDwhLS0gQXJyb3cgaGVhZHMgZm9yIHJlZmVyZW5jZSBlZGdlIHBhdGhzIG9mIGRpZmZlcmVudCBwcmVkZWZpbmVkIHNpemVzIHBlciBjb2xvci4gLS0+CiAgICAgIDxwYXRoCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0icmVmZXJlbmNlLWFycm93aGVhZCIKICAgICAgICBpZD0icmVmZXJlbmNlLWFycm93aGVhZC1zbWFsbCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLW1lZGl1bSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjEzIgogICAgICAgIG1hcmtlckhlaWdodD0iMTMiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9InJlZmVyZW5jZS1hcnJvd2hlYWQiCiAgICAgICAgaWQ9InJlZmVyZW5jZS1hcnJvd2hlYWQtbGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxNiIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjE2IgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNyZWZlcmVuY2UtYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJyZWZlcmVuY2UtYXJyb3doZWFkIgogICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLXhsYXJnZSIKICAgICAgICB2aWV3Qm94PSIwIDAgMTAgMTAiCiAgICAgICAgbWFya2VyV2lkdGg9IjIwIgogICAgICAgIG1hcmtlckhlaWdodD0iMjAiCiAgICAgICAgcmVmWD0iMiIKICAgICAgICByZWZZPSI1IgogICAgICAgIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIgogICAgICAgIG1hcmtlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3JlZmVyZW5jZS1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkcyBmb3IgZGF0YWZsb3cgZWRnZSBwYXRocyBvZiBkaWZmZXJlbnQgcHJlZGVmaW5lZCBzaXplcyBwZXIgY29sb3IuIC0tPgogICAgICA8cGF0aAogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCIKICAgICAgICBkPSJNIDAsMCBMIDEwLDUgTCAwLDEwIEMgMyw3IDMsMyAwLDAiCiAgICAgID48L3BhdGg+CiAgICAgIDxtYXJrZXIKICAgICAgICBjbGFzcz0iZGF0YWZsb3ctYXJyb3doZWFkIgogICAgICAgIGlkPSJkYXRhZmxvdy1hcnJvd2hlYWQtc21hbGwiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC1tZWRpdW0iCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIxMyIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjEzIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgY2xhc3M9ImRhdGFmbG93LWFycm93aGVhZCIKICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxhcmdlIgogICAgICAgIHZpZXdCb3g9IjAgMCAxMCAxMCIKICAgICAgICBtYXJrZXJXaWR0aD0iMTYiCiAgICAgICAgbWFya2VySGVpZ2h0PSIxNiIKICAgICAgICByZWZYPSIyIgogICAgICAgIHJlZlk9IjUiCiAgICAgICAgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiCiAgICAgICAgbWFya2VyVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjZGF0YWZsb3ctYXJyb3doZWFkLXBhdGgiPjwvdXNlPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGNsYXNzPSJkYXRhZmxvdy1hcnJvd2hlYWQiCiAgICAgICAgaWQ9ImRhdGFmbG93LWFycm93aGVhZC14bGFyZ2UiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICAgIG1hcmtlcldpZHRoPSIyMCIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjIwIgogICAgICAgIHJlZlg9IjIiCiAgICAgICAgcmVmWT0iNSIKICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICBtYXJrZXJVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNkYXRhZmxvdy1hcnJvd2hlYWQtcGF0aCI+PC91c2U+CiAgICAgIDwvbWFya2VyPgoKICAgICAgPCEtLSBBcnJvdyBoZWFkIGZvciBhbm5vdGF0aW9uIGVkZ2UgcGF0aHMuIC0tPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9ImFubm90YXRpb24tYXJyb3doZWFkLWZhZGVkIgogICAgICAgIG1hcmtlcldpZHRoPSI1IgogICAgICAgIG1hcmtlckhlaWdodD0iNSIKICAgICAgICByZWZYPSI1IgogICAgICAgIHJlZlk9IjIuNSIKICAgICAgICBvcmllbnQ9ImF1dG8iCiAgICAgID4KICAgICAgICA8cGF0aCBkPSJNIDAsMCBMIDUsMi41IEwgMCw1IEwgMCwwIj48L3BhdGg+CiAgICAgIDwvbWFya2VyPgogICAgICA8bWFya2VyCiAgICAgICAgaWQ9InJlZi1hbm5vdGF0aW9uLWFycm93aGVhZCIKICAgICAgICBtYXJrZXJXaWR0aD0iNSIKICAgICAgICBtYXJrZXJIZWlnaHQ9IjUiCiAgICAgICAgcmVmWD0iMCIKICAgICAgICByZWZZPSIyLjUiCiAgICAgICAgb3JpZW50PSJhdXRvIgogICAgICA+CiAgICAgICAgPHBhdGggZD0iTSA1LDAgTCAwLDIuNSBMIDUsNSBMIDUsMCI+PC9wYXRoPgogICAgICA8L21hcmtlcj4KICAgICAgPG1hcmtlcgogICAgICAgIGlkPSJyZWYtYW5ub3RhdGlvbi1hcnJvd2hlYWQtZmFkZWQiCiAgICAgICAgbWFya2VyV2lkdGg9IjUiCiAgICAgICAgbWFya2VySGVpZ2h0PSI1IgogICAgICAgIHJlZlg9IjAiCiAgICAgICAgcmVmWT0iMi41IgogICAgICAgIG9yaWVudD0iYXV0byIKICAgICAgPgogICAgICAgIDxwYXRoIGQ9Ik0gNSwwIEwgMCwyLjUgTCA1LDUgTCA1LDAiPjwvcGF0aD4KICAgICAgPC9tYXJrZXI+CiAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGFuIE9wIG5vZGUgZWxsaXBzZS4gLS0+CiAgICAgIDxlbGxpcHNlCiAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgcng9IjcuNSIKICAgICAgICByeT0iMyIKICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgZmlsbD0iaW5oZXJpdCIKICAgICAgPjwvZWxsaXBzZT4KICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgPGVsbGlwc2UKICAgICAgICBpZD0ib3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIgogICAgICAgIHJ4PSI1IgogICAgICAgIHJ5PSIyIgogICAgICAgIHN0cm9rZT0iaW5oZXJpdCIKICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICA+PC9lbGxpcHNlPgogICAgICA8IS0tIFZlcnRpY2FsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iOSI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iNiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgIDwvZz4KICAgICAgPCEtLSBIb3Jpem9udGFsbHkgc3RhY2tlZCBzZXJpZXMgb2YgT3Agbm9kZXMgd2hlbiB1bmV4cGFuZGVkLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iMTIiIHk9IjQiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjQiPjwvdXNlPgogICAgICA8L2c+CiAgICAgIDwhLS0gSG9yaXpvbnRhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIGZvciBhbm5vdGF0aW9uLiAtLT4KICAgICAgPGcgaWQ9Im9wLXNlcmllcy1hbm5vdGF0aW9uLXN0YW1wIj4KICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLWFubm90YXRpb24tc3RhbXAiIHg9IjkiIHk9IjIiPjwvdXNlPgogICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIgeD0iNyIgeT0iMiI+PC91c2U+CiAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1hbm5vdGF0aW9uLXN0YW1wIiB4PSI1IiB5PSIyIj48L3VzZT4KICAgICAgPC9nPgogICAgICA8c3ZnCiAgICAgICAgaWQ9InN1bW1hcnktaWNvbiIKICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgIGhlaWdodD0iMTIiCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIHdpZHRoPSIxMiIKICAgICAgPgogICAgICAgIDxwYXRoCiAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgID48L3BhdGg+CiAgICAgIDwvc3ZnPgoKICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgPHBhdHRlcm4KICAgICAgICBpZD0icmVjdEhhdGNoIgogICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgIHdpZHRoPSI1IgogICAgICAgIGhlaWdodD0iNSIKICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICA+CiAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjUiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgPC9wYXR0ZXJuPgogICAgICA8cGF0dGVybgogICAgICAgIGlkPSJlbGxpcHNlSGF0Y2giCiAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgd2lkdGg9IjIiCiAgICAgICAgaGVpZ2h0PSIyIgogICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgID4KICAgICAgICA8bGluZSB4MT0iMCIgeTE9IjAiIHgyPSIwIiB5Mj0iMiIgc3R5bGU9InN0cm9rZS13aWR0aDogMSI+PC9saW5lPgogICAgICA8L3BhdHRlcm4+CgogICAgICA8IS0tIEEgc2hhZG93IGZvciBoZWFsdGggcGlsbHMuIC0tPgogICAgICA8ZmlsdGVyCiAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXNoYWRvdyIKICAgICAgICB4PSItNDAlIgogICAgICAgIHk9Ii00MCUiCiAgICAgICAgd2lkdGg9IjE4MCUiCiAgICAgICAgaGVpZ2h0PSIxODAlIgogICAgICA+CiAgICAgICAgPGZlR2F1c3NpYW5CbHVyIGluPSJTb3VyY2VBbHBoYSIgc3RkRGV2aWF0aW9uPSIwLjgiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgPGZlT2Zmc2V0IGR4PSIwIiBkeT0iMCIgcmVzdWx0PSJvZmZzZXRibHVyIj48L2ZlT2Zmc2V0PgogICAgICAgIDxmZUZsb29kIGZsb29kLWNvbG9yPSIjMDAwMDAwIj48L2ZlRmxvb2Q+CiAgICAgICAgPGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIj48L2ZlQ29tcG9zaXRlPgogICAgICAgIDxmZU1lcmdlPgogICAgICAgICAgPGZlTWVyZ2VOb2RlPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgICA8ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPC9mZU1lcmdlPgogICAgICA8L2ZpbHRlcj4KICAgIDwvZGVmcz4KICAgIDwhLS0gTWFrZSBhIGxhcmdlIHJlY3RhbmdsZSB0aGF0IGZpbGxzIHRoZSBzdmcgc3BhY2Ugc28gdGhhdAogIHpvb20gZXZlbnRzIGdldCBjYXB0dXJlZCBvbiBzYWZhcmkgLS0+CiAgICA8cmVjdCBmaWxsPSJ3aGl0ZSIgd2lkdGg9IjEwMDAwIiBoZWlnaHQ9IjEwMDAwIj48L3JlY3Q+CiAgICA8ZyBpZD0icm9vdCI+PC9nPgogIDwvc3ZnPgogIDx0Zi1ncmFwaC1taW5pbWFwIGlkPSJtaW5pbWFwIj48L3RmLWdyYXBoLW1pbmltYXA+CiAgPGRpdiBpZD0iY29udGV4dE1lbnUiIGNsYXNzPSJjb250ZXh0LW1lbnUiPjwvZGl2PgpgO3ZhciBMcj1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3pvb21lZD0hMSx0aGlzLl96b29tU3RhcnRDb29yZHM9bnVsbCx0aGlzLl96b29tVHJhbnNmb3JtPW51bGwsdGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s9MjAsdGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5tYXhNZXRhbm9kZUxhYmVsTGVuZ3RoRm9udFNpemU9OSx0aGlzLm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZT02LHRoaXMubWF4TWV0YW5vZGVMYWJlbExlbmd0aExhcmdlRm9udD0xMSx0aGlzLm1heE1ldGFub2RlTGFiZWxMZW5ndGg9MTh9Z2V0Tm9kZSh0KXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0UmVuZGVyTm9kZUJ5TmFtZSh0KX1pc05vZGVFeHBhbmRlZCh0KXtyZXR1cm4gdC5leHBhbmRlZH1zZXROb2RlRXhwYW5kZWQodCl7dGhpcy5fYnVpbGQodGhpcy5yZW5kZXJIaWVyYXJjaHkpLHRoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1wYW5Ub05vZGUodCl7U2xlKHQsdGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tKSYmKHRoaXMuX3pvb21lZD0hMCl9Z2V0R3JhcGhTdmdSb290KCl7cmV0dXJuIHRoaXMuJC5zdmd9Z2V0Q29udGV4dE1lbnUoKXtyZXR1cm4gdGhpcy4kLmNvbnRleHRNZW51fV9yZXNldFN0YXRlKCl7dGhpcy5fbm9kZUdyb3VwSW5kZXg9e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXg9e30sdGhpcy5fZWRnZUdyb3VwSW5kZXg9e30sdGhpcy5fdXBkYXRlTGFiZWxzKCExKSxIdCh0aGlzLiQuc3ZnKS5zZWxlY3QoIiNyb290Iikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCksSUgodGhpcy4kLnN2Zyl9X2J1aWxkKHQpe3RoaXMudGVtcGxhdGVJbmRleD10LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksUmQoInRmLWdyYXBoLXNjZW5lIChsYXlvdXQpOiIsZnVuY3Rpb24oKXtTSCh0LnJvb3QpfS5iaW5kKHRoaXMpLGpyLlJFTkRFUl9TQ0VORV9MQVlPVVQpLFJkKCJ0Zi1ncmFwaC1zY2VuZSAoYnVpbGQgc2NlbmUpOiIsZnVuY3Rpb24oKXtyY3QoSHQodGhpcy4kLnJvb3QpLHQucm9vdCx0aGlzKSxFbGUodGhpcy4kLnN2Zyx0aGlzKSx0aGlzLl91cGRhdGVJbnB1dFRyYWNlKCl9LmJpbmQodGhpcyksanIuUkVOREVSX1NDRU5FX0JVSUxEX1NDRU5FKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSGVhbHRoUGlsbHModGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHRoaXMuaGVhbHRoUGlsbFN0ZXBJbmRleCksdGhpcy5taW5pbWFwLnVwZGF0ZSgpfS5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuX3pvb209dFIoKS5vbigiZW5kIixmdW5jdGlvbigpe2lmKHRoaXMuX3pvb21TdGFydENvb3Jkcyl7dmFyIHQ9TWF0aC5zcXJ0KE1hdGgucG93KHRoaXMuX3pvb21TdGFydENvb3Jkcy54LXRoaXMuX3pvb21UcmFuc2Zvcm0ueCwyKStNYXRoLnBvdyh0aGlzLl96b29tU3RhcnRDb29yZHMueS10aGlzLl96b29tVHJhbnNmb3JtLnksMikpO3Q8dGhpcy5fbWF4Wm9vbURpc3RhbmNlRm9yQ2xpY2s/dGhpcy5fZmlyZUVuYWJsZUNsaWNrKCk6c2V0VGltZW91dCh0aGlzLl9maXJlRW5hYmxlQ2xpY2suYmluZCh0aGlzKSw1MCl9dGhpcy5fem9vbVN0YXJ0Q29vcmRzPW51bGx9LmJpbmQodGhpcykpLm9uKCJ6b29tIixmdW5jdGlvbigpe3RoaXMuX3pvb21UcmFuc2Zvcm09cXQudHJhbnNmb3JtLHRoaXMuX3pvb21TdGFydENvb3Jkc3x8KHRoaXMuX3pvb21TdGFydENvb3Jkcz10aGlzLl96b29tVHJhbnNmb3JtLHRoaXMuZmlyZSgiZGlzYWJsZS1jbGljayIpKSx0aGlzLl96b29tZWQ9ITAsSHQodGhpcy4kLnJvb3QpLmF0dHIoInRyYW5zZm9ybSIscXQudHJhbnNmb3JtKSx0aGlzLm1pbmltYXAuem9vbShxdC50cmFuc2Zvcm0pfS5iaW5kKHRoaXMpKSxIdCh0aGlzLiQuc3ZnKS5jYWxsKHRoaXMuX3pvb20pLm9uKCJkYmxjbGljay56b29tIixudWxsKSxIdCh3aW5kb3cpLm9uKCJyZXNpemUiLGZ1bmN0aW9uKCl7dGhpcy5taW5pbWFwLnpvb20oKX0uYmluZCh0aGlzKSksdGhpcy5taW5pbWFwPXRoaXMuJC5taW5pbWFwLmluaXQodGhpcy4kLnN2Zyx0aGlzLiQucm9vdCx0aGlzLl96b29tLFRyLm1pbmltYXAuc2l6ZSxUci5zdWJzY2VuZS5tZXRhLmxhYmVsSGVpZ2h0KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9X3JlbmRlckhpZXJhcmNoeUNoYW5nZWQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeTt0aGlzLl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZT0hMSx0aGlzLl9yZXNldFN0YXRlKCksdGhpcy5fYnVpbGQodCl9X2FuaW1hdGVBbmRGaXQoKXt2YXIgdD10aGlzLl9pc0F0dGFjaGVkO3RoaXMuX2hhc1JlbmRlckhpZXJhcmNoeUJlZW5GaXRPbmNlfHwhdHx8c2V0VGltZW91dCh0aGlzLmZpdC5iaW5kKHRoaXMpLFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9X3VwZGF0ZUxhYmVscyh0KXt2YXIgcj10aGlzLiQkKCIudGl0bGUiKSxuPXIuc3R5bGUsaT10aGlzLiQkKCIuYXV4VGl0bGUiKSxvPWkuc3R5bGUsYT10aGlzLiQkKCIuZnVuY3Rpb25MaWJyYXJ5VGl0bGUiKS5zdHlsZTtsZXQgcz1IdCh0aGlzLiQuc3ZnKTt2YXIgbD1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5DT1JFKS5ub2RlKCk7aWYodCYmbCYmdGhpcy5wcm9ncmVzcyYmdGhpcy5wcm9ncmVzcy52YWx1ZT09PTEwMCl7dmFyIGM9cy5zZWxlY3QoIi4iK0hpLlNjZW5lLkdST1VQKyI+LiIrSGkuU2NlbmUuSU5FWFRSQUNUKS5ub2RlKCl8fHMuc2VsZWN0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLk9VVEVYVFJBQ1QpLm5vZGUoKSx1PWwuZ2V0Q1RNKCkuZSxoPWM/Yy5nZXRDVE0oKS5lOm51bGw7bi5kaXNwbGF5PSJpbmxpbmUiLG4ubGVmdD11KyJweCIsaCE9PW51bGwmJmghPT11PyhvLmRpc3BsYXk9ImlubGluZSIsaD1NYXRoLm1heCh1K3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaCksby5sZWZ0PWgrInB4Iik6by5kaXNwbGF5PSJub25lIjtsZXQgZj1zLnNlbGVjdCgiLiIrSGkuU2NlbmUuR1JPVVArIj4uIitIaS5TY2VuZS5GVU5DVElPTl9MSUJSQVJZKS5ub2RlKCkscD1mP2YuZ2V0Q1RNKCkuZTpudWxsO3AhPT1udWxsJiZwIT09aD8oYS5kaXNwbGF5PSJpbmxpbmUiLHA9TWF0aC5tYXgoaCtpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoLHApLGEubGVmdD1wKyJweCIpOmEuZGlzcGxheT0ibm9uZSJ9ZWxzZSBuLmRpc3BsYXk9Im5vbmUiLG8uZGlzcGxheT0ibm9uZSIsYS5kaXNwbGF5PSJub25lIn1ub2RlQ29sb3JzQ2hhbmdlZCgpe3RoaXMucmVuZGVySGllcmFyY2h5IT1udWxsJiYodGhpcy50ZW1wbGF0ZUluZGV4PXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksZFAuZWFjaCh0aGlzLl9ub2RlR3JvdXBJbmRleCwodCxyKT0+e3RoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKX0pLHRoaXMubWluaW1hcC51cGRhdGUoKSl9Zml0KCl7dGhpcy5faGFzUmVuZGVySGllcmFyY2h5QmVlbkZpdE9uY2U9ITAsd2xlKHRoaXMuJC5zdmcsdGhpcy4kLnJvb3QsdGhpcy5fem9vbSxmdW5jdGlvbigpe3RoaXMuX3pvb21lZD0hMX0uYmluZCh0aGlzKSl9Z2V0SW1hZ2VCbG9iKCl7cmV0dXJuIHRoaXMubWluaW1hcC5nZXRJbWFnZUJsb2IoKX1pc05vZGVTZWxlY3RlZCh0KXtyZXR1cm4gdD09PXRoaXMuc2VsZWN0ZWROb2RlfWlzTm9kZUhpZ2hsaWdodGVkKHQpe3JldHVybiB0PT09dGhpcy5oaWdobGlnaHRlZE5vZGV9YWRkQW5ub3RhdGlvbkdyb3VwKHQscixuKXt2YXIgaT10Lm5vZGUubmFtZTt0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXT10aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFtpXXx8e30sdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbaV1bci5ub2RlLm5hbWVdPW59Z2V0QW5ub3RhdGlvbkdyb3Vwc0luZGV4KHQpe3JldHVybiB0aGlzLl9hbm5vdGF0aW9uR3JvdXBJbmRleFt0XX1yZW1vdmVBbm5vdGF0aW9uR3JvdXAodCxyKXtkZWxldGUgdGhpcy5fYW5ub3RhdGlvbkdyb3VwSW5kZXhbdC5ub2RlLm5hbWVdW3Iubm9kZS5uYW1lXX1hZGROb2RlR3JvdXAodCxyKXt0aGlzLl9ub2RlR3JvdXBJbmRleFt0XT1yfWdldE5vZGVHcm91cCh0KXtyZXR1cm4gdGhpcy5fbm9kZUdyb3VwSW5kZXhbdF19cmVtb3ZlTm9kZUdyb3VwKHQpe2RlbGV0ZSB0aGlzLl9ub2RlR3JvdXBJbmRleFt0XX1hZGRFZGdlR3JvdXAodCxyKXt0aGlzLl9lZGdlR3JvdXBJbmRleFt0XT1yfWdldEVkZ2VHcm91cCh0KXtyZXR1cm4gdGhpcy5fZWRnZUdyb3VwSW5kZXhbdF19X3VwZGF0ZUhlYWx0aFBpbGxzKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4O0FsZSh0aGlzLiQuc3ZnLHQscil9X3VwZGF0ZU5vZGVTdGF0ZSh0KXt2YXIgcj10aGlzLmdldE5vZGUodCksbj10aGlzLmdldE5vZGVHcm91cCh0KTtpZihuJiZzMyhuLHIsdGhpcyksci5ub2RlLnR5cGU9PT1qdC5NRVRBJiZyLm5vZGUuYXNzb2NpYXRlZEZ1bmN0aW9uJiYhci5pc0xpYnJhcnlGdW5jdGlvbil7dmFyIGk9U2Erci5ub2RlLmFzc29jaWF0ZWRGdW5jdGlvbixvPUh0KCIuIitIaS5TY2VuZS5HUk9VUCsiPi4iK0hpLlNjZW5lLkZVTkNUSU9OX0xJQlJBUlkrJyBnW2RhdGEtbmFtZT0iJytpKyciXScpO3MzKG8scix0aGlzKX12YXIgYT10aGlzLmdldEFubm90YXRpb25Hcm91cHNJbmRleCh0KTtkUC5lYWNoKGEsKHMsbCk9PntzMyhzLHIsdGhpcyxIaS5Bbm5vdGF0aW9uLk5PREUpfSl9X3NlbGVjdGVkTm9kZUNoYW5nZWQodCxyKXtpZih0IT09ciYmKHImJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZShyKSwhIXQpKXt0aGlzLm1pbmltYXAudXBkYXRlKCk7Zm9yKHZhciBuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5ub2RlKHQpLGk9W107bi5wYXJlbnROb2RlIT1udWxsJiZuLnBhcmVudE5vZGUubmFtZSE9cWM7KW49bi5wYXJlbnROb2RlLGkucHVzaChuLm5hbWUpO3ZhciBvO2RQLmZvckVhY2hSaWdodChpLGE9Pnt0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShhKTt2YXIgcz10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKGEpO3Mubm9kZS5pc0dyb3VwTm9kZSYmIXMuZXhwYW5kZWQmJihzLmV4cGFuZGVkPSEwLG98fChvPXMpKX0pLG8mJih0aGlzLnNldE5vZGVFeHBhbmRlZChvKSx0aGlzLl96b29tZWQ9ITApLHQmJnRoaXMuX3VwZGF0ZU5vZGVTdGF0ZSh0KSxzZXRUaW1lb3V0KCgpPT57dGhpcy5wYW5Ub05vZGUodCl9LFRyLmFuaW1hdGlvbi5kdXJhdGlvbil9fV9oaWdobGlnaHRlZE5vZGVDaGFuZ2VkKHQscil7dCE9PXImJih0JiZ0aGlzLl91cGRhdGVOb2RlU3RhdGUodCksciYmdGhpcy5fdXBkYXRlTm9kZVN0YXRlKHIpKX1fb25ab29tQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZUxhYmVscyghdGhpcy5fem9vbWVkKX1fZmlyZUVuYWJsZUNsaWNrKCl7dGhpcy5maXJlKCJlbmFibGUtY2xpY2siKX1fdXBkYXRlSW5wdXRUcmFjZSgpe1ZsZSh0aGlzLmdldEdyYXBoU3ZnUm9vdCgpLHRoaXMucmVuZGVySGllcmFyY2h5LHRoaXMuc2VsZWN0ZWROb2RlLHRoaXMudHJhY2VJbnB1dHMpfX07THIudGVtcGxhdGU9V2xlO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sTHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxMci5wcm90b3R5cGUsIl9oYXNSZW5kZXJIaWVyYXJjaHlCZWVuRml0T25jZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxvYnNlcnZlcjoiX2hpZ2hsaWdodGVkTm9kZUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLExyLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfc2VsZWN0ZWROb2RlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG9ic2VydmVyOiJfb25ab29tQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLExyLnByb3RvdHlwZSwiX3pvb21lZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl96b29tU3RhcnRDb29yZHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJfem9vbVRyYW5zZm9ybSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIl9tYXhab29tRGlzdGFuY2VGb3JDbGljayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLExyLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9ub2RlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9hbm5vdGF0aW9uR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxMci5wcm90b3R5cGUsIl9lZGdlR3JvdXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1pbk1ldGFub2RlTGFiZWxMZW5ndGhGb250U2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxMci5wcm90b3R5cGUsIm1heE1ldGFub2RlTGFiZWxMZW5ndGhMYXJnZUZvbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sTHIucHJvdG90eXBlLCJtYXhNZXRhbm9kZUxhYmVsTGVuZ3RoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLExyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLExyLnByb3RvdHlwZSwibm9kZUNvbnRleHRNZW51SXRlbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTHIucHJvdG90eXBlLCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLExyLnByb3RvdHlwZSwiaGVhbHRoUGlsbFN0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicmVuZGVySGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIl9yZW5kZXJIaWVyYXJjaHlDaGFuZ2VkIixudWxsKTtFKFtCdCgiX2lzQXR0YWNoZWQiLCJyZW5kZXJIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX2FuaW1hdGVBbmRGaXQiLG51bGwpO0UoW0J0KCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxMci5wcm90b3R5cGUsIm5vZGVDb2xvcnNDaGFuZ2VkIixudWxsKTtFKFtCdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUhlYWx0aFBpbGxzIixudWxsKTtFKFtCdCgidHJhY2VJbnB1dHMiLCJzZWxlY3RlZE5vZGUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLExyLnByb3RvdHlwZSwiX3VwZGF0ZUlucHV0VHJhY2UiLG51bGwpO0xyPUUoW3l0KCJ0Zi1ncmFwaC1zY2VuZSIpXSxMcik7dmFyIERyPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yZW5kZXJEZXB0aD0xLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITAsdGhpcy5lZGdlV2lkdGhGdW5jdGlvbj0iIix0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZD0iIix0aGlzLmVkZ2VMYWJlbEZ1bmN0aW9uPSIiLHRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkPSIifXBhblRvTm9kZSh0KXt0aGlzLiQkKCJ0Zi1ncmFwaC1zY2VuZSIpLnBhblRvTm9kZSh0KX1fYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKCEhdCl7Zm9yKGxldCByIG9mIE9iamVjdC52YWx1ZXModC5nZXROb2RlTWFwKCkpKXIuaW5jbHVkZT11ci5VTlNQRUNJRklFRDt0aGlzLl9idWlsZFJlbmRlckhpZXJhcmNoeSh0KX19X2J1aWxkTmV3UmVuZGVySGllcmFyY2h5KCl7dmFyIHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTshdHx8dGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodCl9X3N0YXRzQ2hhbmdlZCgpe3ZhciB0PXRoaXMuc3RhdHMscj10aGlzLmRldmljZXNGb3JTdGF0czt0aGlzLmdyYXBoSGllcmFyY2h5JiYodCYmciYmKGVsZSh0aGlzLmJhc2ljR3JhcGgsdCxyKSxsbGUodGhpcy5ncmFwaEhpZXJhcmNoeSx0KSksdGhpcy5fYnVpbGRSZW5kZXJIaWVyYXJjaHkodGhpcy5ncmFwaEhpZXJhcmNoeSkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImdyYXBoLXNlbGVjdCIsdGhpcy5fZ3JhcGhTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImRpc2FibGUtY2xpY2siLHRoaXMuX2Rpc2FibGVDbGljay5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImVuYWJsZS1jbGljayIsdGhpcy5fZW5hYmxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1leHBhbmQiLHRoaXMuX25vZGVUb2dnbGVFeHBhbmQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXNlbGVjdCIsdGhpcy5fbm9kZVNlbGVjdGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1oaWdobGlnaHQiLHRoaXMuX25vZGVIaWdobGlnaHRlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtdW5oaWdobGlnaHQiLHRoaXMuX25vZGVVbmhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXh0cmFjdCIsdGhpcy5fbm9kZVRvZ2dsZUV4dHJhY3QuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLXRvZ2dsZS1zZXJpZXNncm91cCIsdGhpcy5fbm9kZVRvZ2dsZVNlcmllc0dyb3VwLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZWRnZS1zZWxlY3QiLHRoaXMuX2VkZ2VTZWxlY3RlZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFubm90YXRpb24tc2VsZWN0Iix0aGlzLl9ub2RlU2VsZWN0ZWQuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJhbm5vdGF0aW9uLWhpZ2hsaWdodCIsdGhpcy5fbm9kZUhpZ2hsaWdodGVkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiYW5ub3RhdGlvbi11bmhpZ2hsaWdodCIsdGhpcy5fbm9kZVVuaGlnaGxpZ2h0ZWQuYmluZCh0aGlzKSl9X2J1aWxkUmVuZGVySGllcmFyY2h5KHQpe2lmKHQucm9vdC50eXBlIT09anQuTUVUQSlyZXR1cm47bGV0IHI9dGhpcyxuPVJkKCJuZXcgdGZfZ3JhcGhfcmVuZGVyLkhpZXJhcmNoeSIsKCk9PntsZXQgaT1uZXcgbG8odCwhIXRoaXMuc3RhdHMsdGhpcy5hdXRvRXh0cmFjdE5vZGVzKTtpLmVkZ2VMYWJlbEZ1bmN0aW9uPXRoaXMuZWRnZUxhYmVsRnVuY3Rpb24saS5lZGdlV2lkdGhGdW5jdGlvbj10aGlzLmVkZ2VXaWR0aEZ1bmN0aW9uO2Z1bmN0aW9uIG8oYSl7cmV0dXJue21pblZhbHVlOmEuZG9tYWluKClbMF0sbWF4VmFsdWU6YS5kb21haW4oKVsxXSxzdGFydENvbG9yOmEucmFuZ2UoKVswXSxlbmRDb2xvcjphLnJhbmdlKClbMV19fXJldHVybiByLl9zZXRDb2xvckJ5UGFyYW1zKHtjb21wdXRlX3RpbWU6byhpLmNvbXB1dGVUaW1lU2NhbGUpLG1lbW9yeTpvKGkubWVtb3J5VXNhZ2VTY2FsZSksZGV2aWNlOm9jdC5tYXAoaS5kZXZpY2VDb2xvck1hcC5kb21haW4oKSxmdW5jdGlvbihhKXtyZXR1cm57ZGV2aWNlOmEsY29sb3I6aS5kZXZpY2VDb2xvck1hcChhKX19KSx4bGFfY2x1c3RlcjpvY3QubWFwKGkueGxhQ2x1c3RlckNvbG9yTWFwLmRvbWFpbigpLGZ1bmN0aW9uKGEpe3JldHVybnt4bGFfY2x1c3RlcjphLGNvbG9yOmkueGxhQ2x1c3RlckNvbG9yTWFwKGEpfX0pfSksaX0sanIuUkVOREVSX0JVSUxEX0hJRVJBUkNIWSk7ci5fc2V0UmVuZGVySGllcmFyY2h5KG4pfV9nZXRWaXNpYmxlKHQpe3JldHVybiB0JiZ0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXROZWFyZXN0VmlzaWJsZUFuY2VzdG9yKHQpfWZpdCgpe3RoaXMuJC5zY2VuZS5maXQoKX1nZXRJbWFnZUJsb2IoKXtyZXR1cm4gdGhpcy4kLnNjZW5lLmdldEltYWdlQmxvYigpfV9ncmFwaENoYW5nZWQoKXshdGhpcy5ncmFwaEhpZXJhcmNoeXx8KHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLiQuc2NlbmUubm9kZUNvbG9yc0NoYW5nZWQoKX0pLHRoaXMuZmlyZSgiZ3JhcGgtc2VsZWN0IikpfV9ncmFwaFNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgic2VsZWN0ZWROb2RlIixudWxsKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIixudWxsKSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZGlzYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITF9X2VuYWJsZUNsaWNrKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X3NlbGVjdGVkTm9kZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLmhhbmRsZU5vZGVTZWxlY3RlZCYmdGhpcy5oYW5kbGVOb2RlU2VsZWN0ZWQodCl9X3NlbGVjdGVkRWRnZUNoYW5nZWQoKXt2YXIgdD10aGlzLnNlbGVjdGVkRWRnZTt0aGlzLl9kZXNlbGVjdFByZXZpb3VzRWRnZSgpLHQmJih0aGlzLl9sYXN0U2VsZWN0ZWRFZGdlR3JvdXAuY2xhc3NlZChIaS5FZGdlLlNFTEVDVEVELCEwKSx0aGlzLl91cGRhdGVNYXJrZXJPZlNlbGVjdGVkRWRnZSh0KSksdGhpcy5oYW5kbGVFZGdlU2VsZWN0ZWQmJnRoaXMuaGFuZGxlRWRnZVNlbGVjdGVkKHQpfV9ub2RlU2VsZWN0ZWQodCl7dGhpcy5fYWxsb3dHcmFwaFNlbGVjdCYmdGhpcy5zZXQoInNlbGVjdGVkTm9kZSIsdC5kZXRhaWwubmFtZSksdGhpcy5fYWxsb3dHcmFwaFNlbGVjdD0hMH1fZWRnZVNlbGVjdGVkKHQpe3RoaXMuX2FsbG93R3JhcGhTZWxlY3QmJih0aGlzLnNldCgiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdC5kZXRhaWwuZWRnZUdyb3VwKSx0aGlzLnNldCgic2VsZWN0ZWRFZGdlIix0LmRldGFpbC5lZGdlRGF0YSkpLHRoaXMuX2FsbG93R3JhcGhTZWxlY3Q9ITB9X25vZGVIaWdobGlnaHRlZCh0KXt0aGlzLnNldCgiaGlnaGxpZ2h0ZWROb2RlIix0LmRldGFpbC5uYW1lKX1fbm9kZVVuaGlnaGxpZ2h0ZWQodCl7dGhpcy5zZXQoImhpZ2hsaWdodGVkTm9kZSIsbnVsbCl9X25vZGVUb2dnbGVFeHBhbmQodCl7dGhpcy5fbm9kZVNlbGVjdGVkKHQpO3ZhciByPXQuZGV0YWlsLm5hbWUsbj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHIpO24ubm9kZS50eXBlIT09anQuT1AmJih0aGlzLnJlbmRlckhpZXJhcmNoeS5idWlsZFN1YmhpZXJhcmNoeShyKSxuLmV4cGFuZGVkPSFuLmV4cGFuZGVkLHRoaXMuYXN5bmMoZnVuY3Rpb24oKXt0aGlzLiQuc2NlbmUuc2V0Tm9kZUV4cGFuZGVkKG4pfSw3NSksUG8oe2FjdGlvbklkOmpyLk5PREVfRVhQQU5TSU9OX1RPR0dMRUQsZXZlbnRMYWJlbDpuLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCJ9KSl9X25vZGVUb2dnbGVFeHRyYWN0KHQpe3ZhciByPXQuZGV0YWlsLm5hbWU7dGhpcy5ub2RlVG9nZ2xlRXh0cmFjdChyKX1ub2RlVG9nZ2xlRXh0cmFjdCh0KXtsZXQgcj10aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRSZW5kZXJOb2RlQnlOYW1lKHQpO3Iubm9kZS5pbmNsdWRlPT11ci5JTkNMVURFP3Iubm9kZS5pbmNsdWRlPXVyLkVYQ0xVREU6ci5ub2RlLmluY2x1ZGU9PXVyLkVYQ0xVREU/ci5ub2RlLmluY2x1ZGU9dXIuSU5DTFVERTpyLm5vZGUuaW5jbHVkZT10aGlzLnJlbmRlckhpZXJhcmNoeS5pc05vZGVBdXhpbGlhcnkocik/dXIuSU5DTFVERTp1ci5FWENMVURFLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpLFBvKHthY3Rpb25JZDpqci5OT0RFX0FVWElMSUFSWV9FWFRSQUNUSU9OX0NIQU5HRUQsZXZlbnRMYWJlbDpyLm5vZGUuaW5jbHVkZT09PXVyLklOQ0xVREU/IkF1eGlsaWFyeSB0byBNYWluIjoiTWFpbiB0byBBdXhpbGlhcnkifSl9X25vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt2YXIgcj10LmRldGFpbC5uYW1lO3RoaXMubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHIpfW5vZGVUb2dnbGVTZXJpZXNHcm91cCh0KXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO3ZhciByPXJQKHRoaXMpLG49SlMociwxMDAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKTtsZXQgaT1NeChLbCh7fSx0aGlzLmhpZXJhcmNoeVBhcmFtcykse3Nlcmllc01hcDp0aGlzLmdyYXBoSGllcmFyY2h5LmJ1aWxkU2VyaWVzR3JvdXBNYXBUb2dnbGVkKHQpfSk7eEgodGhpcy5iYXNpY0dyYXBoLGksbikudGhlbihmdW5jdGlvbihvKXt0aGlzLnNldCgiZ3JhcGhIaWVyYXJjaHkiLG8pLHRoaXMuX2J1aWxkUmVuZGVySGllcmFyY2h5KHRoaXMuZ3JhcGhIaWVyYXJjaHkpfS5iaW5kKHRoaXMpKX1fZGVzZWxlY3RQcmV2aW91c0VkZ2UoKXtsZXQgdD0iLiIrSGkuRWRnZS5TRUxFQ1RFRDtIdCh0KS5jbGFzc2VkKEhpLkVkZ2UuU0VMRUNURUQsITEpLmVhY2goKHIsbik9PntpZihyLmxhYmVsKXtsZXQgaT1IdCh0aGlzKS5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKTtyLmxhYmVsLnN0YXJ0TWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1zdGFydCIsYHVybCgjJHtyLmxhYmVsLnN0YXJ0TWFya2VySWR9KWApLHIubGFiZWwuZW5kTWFya2VySWQmJmkuc3R5bGUoIm1hcmtlci1lbmQiLGB1cmwoIyR7ci5sYWJlbC5lbmRNYXJrZXJJZH0pYCl9fSl9X3VwZGF0ZU1hcmtlck9mU2VsZWN0ZWRFZGdlKHQpe3ZhciByO2lmKHQubGFiZWwpe2xldCBuPXQubGFiZWwuc3RhcnRNYXJrZXJJZHx8dC5sYWJlbC5lbmRNYXJrZXJJZDtpZihuKXtsZXQgaT1uLnJlcGxhY2UoImRhdGFmbG93LSIsInNlbGVjdGVkLSIpLG89dGhpcy4kJCgiIyIraSk7aWYoIW8pe2xldCBzPXRoaXMuJC5zY2VuZS5xdWVyeVNlbGVjdG9yKCIjIituKTtvPXM9PW51bGw/dm9pZCAwOnMuY2xvbmVOb2RlKCEwKSxvLnNldEF0dHJpYnV0ZSgiaWQiLGkpLG8uY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQtYXJyb3doZWFkIiksKHI9cz09bnVsbD92b2lkIDA6cy5wYXJlbnROb2RlKT09bnVsbHx8ci5hcHBlbmRDaGlsZChvKX1sZXQgYT10LmxhYmVsLnN0YXJ0TWFya2VySWQ/Im1hcmtlci1zdGFydCI6Im1hcmtlci1lbmQiO3RoaXMuX2xhc3RTZWxlY3RlZEVkZ2VHcm91cC5zZWxlY3RBbGwoInBhdGguZWRnZWxpbmUiKS5zdHlsZShhLGB1cmwoIyR7aX0pYCl9fX1ub3QodCl7cmV0dXJuIXR9fTtEci50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgfQoKICAgICAgLnZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LXZlcnRpY2FsOwogICAgICB9CgogICAgICAuYXV0byB7CiAgICAgICAgQGFwcGx5IC0tbGF5b3V0LWZsZXgtYXV0bzsKICAgICAgICBAYXBwbHkgLS1sYXlvdXQtdmVydGljYWw7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbiB7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3RpdGxlXV0iPgogICAgICAgICAgPGgyPltbdGl0bGVdXTwvaDI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGYtZ3JhcGgtc2NlbmUKICAgICAgICAgIGlkPSJzY2VuZSIKICAgICAgICAgIGNsYXNzPSJhdXRvIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0iW1tyZW5kZXJIaWVyYXJjaHldXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9IltbX2dldFZpc2libGUoaGlnaGxpZ2h0ZWROb2RlKV1dIgogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHNlbGVjdGVkLWVkZ2U9Int7c2VsZWN0ZWRFZGdlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICBwcm9ncmVzcz0iW1twcm9ncmVzc11dIgogICAgICAgICAgbm9kZS1jb250ZXh0LW1lbnUtaXRlbXM9Iltbbm9kZUNvbnRleHRNZW51SXRlbXNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgaGFuZGxlLWVkZ2Utc2VsZWN0ZWQ9IltbaGFuZGxlRWRnZVNlbGVjdGVkXV0iCiAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbdHJhY2VJbnB1dHNdXSIKICAgICAgICA+PC90Zi1ncmFwaC1zY2VuZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxvYnNlcnZlcjoiX2dyYXBoQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxEci5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sRHIucHJvdG90eXBlLCJiYXNpY0dyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJkZXZpY2VzRm9yU3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoaWVyYXJjaHlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwicHJvZ3Jlc3MiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJ0aXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwic2VsZWN0ZWRFZGdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiX2xhc3RTZWxlY3RlZEVkZ2VHcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJoaWdobGlnaHRlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRHIucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMCxyZWFkT25seTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLGxvKV0sRHIucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxEci5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJhdXRvRXh0cmFjdE5vZGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxEci5wcm90b3R5cGUsIm5vZGVDb250ZXh0TWVudUl0ZW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLERyLnByb3RvdHlwZSwiX3JlbmRlckRlcHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sRHIucHJvdG90eXBlLCJfYWxsb3dHcmFwaFNlbGVjdCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sRHIucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLERyLnByb3RvdHlwZSwiZWRnZVdpZHRoRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJoYW5kbGVOb2RlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRHIucHJvdG90eXBlLCJlZGdlTGFiZWxGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxEci5wcm90b3R5cGUsImhhbmRsZUVkZ2VTZWxlY3RlZCIsdm9pZCAwKTtFKFtCdCgiYXV0b0V4dHJhY3ROb2RlcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2Rlc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJncmFwaEhpZXJhcmNoeSIsImVkZ2VXaWR0aEZ1bmN0aW9uIiwiaGFuZGxlTm9kZVNlbGVjdGVkIiwiZWRnZUxhYmVsRnVuY3Rpb24iLCJoYW5kbGVFZGdlU2VsZWN0ZWQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX2J1aWxkTmV3UmVuZGVySGllcmFyY2h5IixudWxsKTtFKFtCdCgic3RhdHMiLCJkZXZpY2VzRm9yU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLERyLnByb3RvdHlwZSwiX3N0YXRzQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkTm9kZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWROb2RlQ2hhbmdlZCIsbnVsbCk7RShbQnQoInNlbGVjdGVkRWRnZSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sRHIucHJvdG90eXBlLCJfc2VsZWN0ZWRFZGdlQ2hhbmdlZCIsbnVsbCk7RHI9RShbeXQoInRmLWdyYXBoIildLERyKTt2YXIgY289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcD0wLHRoaXMuaGVhbHRoUGlsbEVudHJpZXM9aFB9cmVhZHkoKXtzdXBlci5yZWFkeSgpO3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluQ29udGFpbmVyIikscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0Zi1kYXNoYm9hcmQtbGF5b3V0IC5zY3JvbGxiYXIiKTt0JiZyJiYodC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKX1faGVhbHRoUGlsbHNBdmFpbGFibGUodCxyKXtyZXR1cm4gdCYmcn1fY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKHQscil7cmV0dXJuIHQ/dFtyXS50b0ZpeGVkKDApOiIifWdldCBoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzLHI9dGhpcy5oZWFsdGhQaWxsU3RlcEluZGV4LG49dGhpcy5zZWxlY3RlZE5vZGUsaT10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihvfHwhbilyZXR1cm4gbnVsbDtsZXQgYT10W25dO2lmKCFhKXJldHVybiBudWxsO2xldCBzPWFbaT8wOnJdO3JldHVybiBzP3MudmFsdWUuc2xpY2UoMiw4KTpudWxsfWdldCBfY3VycmVudFN0ZXBEaXNwbGF5VmFsdWUoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMscj10aGlzLmhlYWx0aFBpbGxTdGVwSW5kZXgsbj10aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQsaT10aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXAsbz10aGlzLmFyZUhlYWx0aFBpbGxzTG9hZGluZztpZihuKXJldHVybiBpLnRvRml4ZWQoMCk7aWYobylyZXR1cm4gMDtmb3IobGV0IGEgaW4gdClyZXR1cm4gdFthXVtyXS5zdGVwLnRvRml4ZWQoMCk7cmV0dXJuIDB9Z2V0IF9iaWdnZXN0U3RlcEV2ZXJTZWVuKCl7dmFyIHQ9dGhpcy5ub2RlTmFtZXNUb0hlYWx0aFBpbGxzO2ZvcihsZXQgbiBpbiB0KXt2YXIgcj10W25dO3JldHVybiBNYXRoLm1heCh0aGlzLl9iaWdnZXN0U3RlcEV2ZXJTZWVuLHJbci5sZW5ndGgtMV0uc3RlcCl9cmV0dXJuIHRoaXMuX2JpZ2dlc3RTdGVwRXZlclNlZW58fDB9Z2V0IF9tYXhTdGVwSW5kZXgoKXt2YXIgdD10aGlzLm5vZGVOYW1lc1RvSGVhbHRoUGlsbHM7Zm9yKGxldCByIGluIHQpcmV0dXJuIHRbcl0ubGVuZ3RoLTE7cmV0dXJuIDB9X2hhc0RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyh0KXtyZXR1cm4gdCYmdC5sZW5ndGh9X3VwZGF0ZUFsZXJ0c0xpc3QoKXt2YXIgdD10aGlzLmRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyxyPXRoaXMuJCQoIiNudW1lcmljLWFsZXJ0cy1ib2R5Iik7aWYoISFyKXtyLmlubmVyVGV4dD0iIjtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO2EuaW5uZXJUZXh0PVhzZShpLmZpcnN0X3RpbWVzdGFtcCksYS5jbGFzc0xpc3QuYWRkKCJmaXJzdC1vZmZlbnNlLXRkIiksby5hcHBlbmRDaGlsZChhKTt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpO3MuY2xhc3NMaXN0LmFkZCgidGVuc29yLWRldmljZS10ZCIpO3ZhciBsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuY2xhc3NMaXN0LmFkZCgidGVuc29yLXNlY3Rpb24td2l0aGluLXRhYmxlIiksbC5pbm5lclRleHQ9aS50ZW5zb3JfbmFtZSx0aGlzLl9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKGwsaS50ZW5zb3JfbmFtZSkscy5hcHBlbmRDaGlsZChsKTt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtjLmNsYXNzTGlzdC5hZGQoImRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSIpLGMuaW5uZXJUZXh0PSIoIitpLmRldmljZV9uYW1lKyIpIixzLmFwcGVuZENoaWxkKGMpLG8uYXBwZW5kQ2hpbGQocyk7dmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtaW5pLWhlYWx0aC1waWxsIik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtpZihoLmNsYXNzTGlzdC5hZGQoIm1pbmktaGVhbHRoLXBpbGwtdGQiKSxoLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQoaCksaS5uZWdfaW5mX2V2ZW50X2NvdW50KXt2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmLmNsYXNzTGlzdC5hZGQoIm5lZ2F0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxmLmlubmVyVGV4dD1pLm5lZ19pbmZfZXZlbnRfY291bnQsZi5zZXRBdHRyaWJ1dGUoInRpdGxlIixpLm5lZ19pbmZfZXZlbnRfY291bnQrIiBldmVudHMgd2l0aCAtXHUyMjFFIiksdS5hcHBlbmRDaGlsZChmKX1pZihpLnBvc19pbmZfZXZlbnRfY291bnQpe3ZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuY2xhc3NMaXN0LmFkZCgicG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiIpLHAuaW5uZXJUZXh0PWkucG9zX2luZl9ldmVudF9jb3VudCxwLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkucG9zX2luZl9ldmVudF9jb3VudCsiIGV2ZW50cyB3aXRoICtcdTIyMUUiKSx1LmFwcGVuZENoaWxkKHApfWlmKGkubmFuX2V2ZW50X2NvdW50KXt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTGlzdC5hZGQoIm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24iKSxkLmlubmVyVGV4dD1pLm5hbl9ldmVudF9jb3VudCxkLnNldEF0dHJpYnV0ZSgidGl0bGUiLGkubmFuX2V2ZW50X2NvdW50KyIgZXZlbnRzIHdpdGggTmFOIiksdS5hcHBlbmRDaGlsZChkKX16dChyKS5hcHBlbmRDaGlsZChvKX19fV9hZGRPcEV4cGFuc2lvbkxpc3RlbmVyKHQscil7dC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKCk9Pnt2YXIgbj1tbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjZW5lIiksdGhpcy5yZW5kZXJIaWVyYXJjaHksciksaSxvPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRmLWdyYXBoLWluZm8jZ3JhcGgtaW5mbyIpO28mJihpPW8uc2Nyb2xsSGVpZ2h0LW8uc2Nyb2xsVG9wKTt2YXIgYT10aGlzLnNlbGVjdGVkTm9kZTt0aGlzLnNldCgic2VsZWN0ZWROb2RlIixuKTt2YXIgcz0oKT0+e28uc2Nyb2xsVG9wPW8uc2Nyb2xsSGVpZ2h0LWl9O28mJihhP3MoKTp3aW5kb3cuc2V0VGltZW91dChzLDIwKSl9KX19O2NvLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1sZWdlbmQgaDIgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAwOwogICAgICB9CgogICAgICAuaGVhbHRoLXBpbGwtZW50cnkgLmNvbG9yLXByZXZpZXcgewogICAgICAgIHdpZHRoOiAyNnB4OwogICAgICAgIGhlaWdodDogMjZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogMCAxMHB4IDAgMDsKICAgICAgfQoKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC5jb2xvci1sYWJlbCwKICAgICAgLmhlYWx0aC1waWxsLWVudHJ5IC50ZW5zb3ItY291bnQgewogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDI2cHg7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyNnB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIC5oZWFsdGgtcGlsbC1lbnRyeSAudGVuc29yLWNvdW50IHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KCiAgICAgICNoZWFsdGgtcGlsbC1zdGVwLXNsaWRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAtMTVweDsKICAgICAgICAvKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlIHBhcGVyLXNsaWRlciwgc3VidHJhY3RpbmcKICAgKiAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducyB3aXRoIHRoZSBpbWFnZSAodGhlIGxhc3Qgc2xpZGVyIG1hcmtlciB0YWtlcyB1cCAxcHgpLAogICAqIGFuZCBhZGRpbmcgMnB4IHRvIGFjY291bnQgZm9yIGEgYm9yZGVyIG9mIDFweCBvbiBib3RoIHNpZGVzIG9mIHRoZSBpbWFnZS4gMzAgLSAxICsgMi4KICAgKiBBcHBhcmVudGx5LCB0aGUgcGFwZXItc2xpZGVyIGxhY2tzIGEgbWl4aW4gZm9yIHRob3NlIHBhZGRpbmcgdmFsdWVzLiAqLwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAzMXB4KTsKICAgICAgfQoKICAgICAgI2hlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjaGVhbHRoLXBpbGwtc3RlcC1udW1iZXItaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgI251bWVyaWMtYWxlcnRzLXRhYmxlIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CgogICAgICAjbnVtZXJpYy1hbGVydHMtdGFibGUgdGQgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgICNudW1lcmljLWFsZXJ0cy10YWJsZSAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuZmlyc3Qtb2ZmZW5zZS10ZCB7CiAgICAgICAgd2lkdGg6IDgwcHg7CiAgICAgIH0KCiAgICAgIC50ZW5zb3ItZGV2aWNlLXRkIHsKICAgICAgICBtYXgtd2lkdGg6IDE0MHB4OwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLnRlbnNvci1zZWN0aW9uLXdpdGhpbi10YWJsZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmRldmljZS1zZWN0aW9uLXdpdGhpbi10YWJsZSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsIHsKICAgICAgICB3aWR0aDogMTMwcHg7CiAgICAgIH0KCiAgICAgIC5taW5pLWhlYWx0aC1waWxsID4gZGl2IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAjZXZlbnQtY291bnRzLXRoIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMCAxMHB4OwogICAgICB9CgogICAgICAubmVnYXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMTQxLCAwKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLnBvc2l0aXZlLWluZi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigwLCA2MiwgMjEyKTsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYigyMDQsIDQ3LCA0NCk7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uZWdhdGl2ZS1pbmYtbWluaS1oZWFsdGgtcGlsbC1zZWN0aW9uLAogICAgICAucG9zaXRpdmUtaW5mLW1pbmktaGVhbHRoLXBpbGwtc2VjdGlvbiwKICAgICAgLm5hbi1taW5pLWhlYWx0aC1waWxsLXNlY3Rpb24gewogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWFyZ2luOiAwIDAgMCAxMHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHBhcGVyLW1hdGVyaWFsIGVsZXZhdGlvbj0iMSIgY2xhc3M9ImNhcmQgaGVhbHRoLXBpbGwtbGVnZW5kIj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPgogICAgICAgIEVuYWJsZSBhbGwgKG5vdCBqdXN0IHNhbXBsZWQpIHN0ZXBzLiBSZXF1aXJlcyBzbG93IGRpc2sgcmVhZC4KICAgICAgPC9kaXY+CiAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgaWQ9ImVuYWJsZUFsbFN0ZXBzTW9kZVRvZ2dsZSIKICAgICAgICBjaGVja2VkPSJ7e2FsbFN0ZXBzTW9kZUVuYWJsZWR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLXRvZ2dsZS1idXR0b24+CiAgICAgIDxoMj4KICAgICAgICBTdGVwIG9mIEhlYWx0aCBQaWxsczoKICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJudW1iZXIiCiAgICAgICAgICAgIGlkPSJoZWFsdGgtcGlsbC1zdGVwLW51bWJlci1pbnB1dCIKICAgICAgICAgICAgbWluPSIwIgogICAgICAgICAgICBtYXg9IltbX2JpZ2dlc3RTdGVwRXZlclNlZW5dXSIKICAgICAgICAgICAgdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcDo6aW5wdXR9fSIKICAgICAgICAgIC8+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIWFsbFN0ZXBzTW9kZUVuYWJsZWRdXSI+CiAgICAgICAgICBbW19jdXJyZW50U3RlcERpc3BsYXlWYWx1ZV1dCiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlCiAgICAgICAgICBhY3RpdmUKICAgICAgICAgIGhpZGRlbiQ9IltbIWFyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgaWQ9ImhlYWx0aC1waWxscy1sb2FkaW5nLXNwaW5uZXIiCiAgICAgICAgPjwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICA8L2gyPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICBpZD0iaGVhbHRoLXBpbGwtc3RlcC1zbGlkZXIiCiAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgICAgbWF4PSJbW19iaWdnZXN0U3RlcEV2ZXJTZWVuXV0iCiAgICAgICAgICBzbmFwcwogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHZhbHVlPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shYWxsU3RlcHNNb2RlRW5hYmxlZF1dIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX21heFN0ZXBJbmRleF1dIj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9ImhlYWx0aC1waWxsLXN0ZXAtc2xpZGVyIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX21heFN0ZXBJbmRleF1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3toZWFsdGhQaWxsU3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGgyPgogICAgICAgIEhlYWx0aCBQaWxsCiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGVdXSI+CiAgICAgICAgICBDb3VudHMgZm9yIFNlbGVjdGVkIE5vZGUKICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shaGVhbHRoUGlsbFZhbHVlc0ZvclNlbGVjdGVkTm9kZV1dIj4KICAgICAgICAgIExlZ2VuZAogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvaDI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbaGVhbHRoUGlsbEVudHJpZXNdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhbHRoLXBpbGwtZW50cnkiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItcHJldmlldyIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tpdGVtLmJhY2tncm91bmRfY29sb3JdXSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxhYmVsIj5bW2l0ZW0ubGFiZWxdXTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idGVuc29yLWNvdW50Ij4KICAgICAgICAgICAgW1tfY29tcHV0ZVRlbnNvckNvdW50U3RyaW5nKGhlYWx0aFBpbGxWYWx1ZXNGb3JTZWxlY3RlZE5vZGUsCiAgICAgICAgICAgIGluZGV4KV1dCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBoaWRkZW4kPSJbWyFfaGFzRGVidWdnZXJOdW1lcmljQWxlcnRzKGRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyldXSI+CiAgICAgICAgPGgyIGlkPSJudW1lcmljLWFsZXJ0cy1oZWFkZXIiPk51bWVyaWMgQWxlcnRzPC9oMj4KICAgICAgICA8cD5BbGVydHMgYXJlIHNvcnRlZCBmcm9tIHRvcCB0byBib3R0b20gYnkgaW5jcmVhc2luZyB0aW1lc3RhbXAuPC9wPgogICAgICAgIDxkaXYgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlLWNvbnRhaW5lciI+CiAgICAgICAgICA8dGFibGUgaWQ9Im51bWVyaWMtYWxlcnRzLXRhYmxlIj4KICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD5GaXJzdCBPZmZlbnNlPC90aD4KICAgICAgICAgICAgICAgIDx0aD5UZW5zb3IgKERldmljZSk8L3RoPgogICAgICAgICAgICAgICAgPHRoIGlkPSJldmVudC1jb3VudHMtdGgiPkV2ZW50IENvdW50czwvdGg+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgPHRib2R5IGlkPSJudW1lcmljLWFsZXJ0cy1ib2R5Ij48L3Rib2R5PgogICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20taWYiCiAgICAgICAgaWY9IltbIV9oYXNEZWJ1Z2dlck51bWVyaWNBbGVydHMoZGVidWdnZXJOdW1lcmljQWxlcnRzKV1dIgogICAgICA+CiAgICAgICAgPHAgY2xhc3M9Im5vLW51bWVyaWMtYWxlcnRzLW5vdGlmaWNhdGlvbiI+CiAgICAgICAgICBObyBudW1lcmljIGFsZXJ0cyBzbyBmYXIuIFRoYXQgaXMgbGlrZWx5IGdvb2QuIEFsZXJ0cyBpbmRpY2F0ZSB0aGUKICAgICAgICAgIHByZXNlbmNlIG9mIE5hTiBvciAoKy8tKSBJbmZpbml0eSB2YWx1ZXMsIHdoaWNoIG1heSBiZSBjb25jZXJuaW5nLgogICAgICAgIDwvcD4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvcGFwZXItbWF0ZXJpYWw+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLGNvLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiZGVidWdnZXJOdW1lcmljQWxlcnRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxjby5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwic2VsZWN0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImhpZ2hsaWdodGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY28ucHJvdG90eXBlLCJzZWxlY3RlZE5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxjby5wcm90b3R5cGUsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsRW50cmllcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGNvLnByb3RvdHlwZSwiYWxsU3RlcHNNb2RlRW5hYmxlZCIsdm9pZCAwKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJzZWxlY3RlZE5vZGUiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwiYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJoZWFsdGhQaWxsVmFsdWVzRm9yU2VsZWN0ZWROb2RlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsImhlYWx0aFBpbGxTdGVwSW5kZXgiLCJhbGxTdGVwc01vZGVFbmFibGVkIiwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsImFyZUhlYWx0aFBpbGxzTG9hZGluZyIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwRGlzcGxheVZhbHVlIixudWxsKTtFKFtSdCgibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIpLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGNvLnByb3RvdHlwZSwiX2JpZ2dlc3RTdGVwRXZlclNlZW4iLG51bGwpO0UoW1J0KCJub2RlTmFtZXNUb0hlYWx0aFBpbGxzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sY28ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtCdCgiZGVidWdnZXJOdW1lcmljQWxlcnRzIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxjby5wcm90b3R5cGUsIl91cGRhdGVBbGVydHNMaXN0IixudWxsKTtjbz1FKFt5dCgidGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkIildLGNvKTt2YXIgYWN0PXt9O0tzKGFjdCx7R3JhcGhJY29uVHlwZTooKT0+bnZ9KTt2YXIgbnY7KGZ1bmN0aW9uKGUpe2UuQ09OU1Q9IkNPTlNUIixlLk1FVEE9Ik1FVEEiLGUuT1A9Ik9QIixlLlNFUklFUz0iU0VSSUVTIixlLlNVTU1BUlk9IlNVTU1BUlkifSkobnZ8fChudj17fSkpO3ZhciBadT1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudmVydGljYWw9ITEsdGhpcy5maWxsT3ZlcnJpZGU9bnVsbCx0aGlzLnN0cm9rZU92ZXJyaWRlPW51bGwsdGhpcy5oZWlnaHQ9MjAsdGhpcy5mYWRlZD0hMX1nZXRTdmdEZWZpbmFibGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuJC5zdmdEZWZzfWdldCBfZmlsbCgpe3ZhciB0PXRoaXMudHlwZSxyPXRoaXMuZmlsbE92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbnYuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9GSUxMO2Nhc2UgbnYuU0VSSUVTOnJldHVybiBVbHQuREVGQVVMVF9GSUxMO2RlZmF1bHQ6cmV0dXJuIHkwLkRFRkFVTFRfRklMTH19Z2V0IF9zdHJva2UoKXt2YXIgdD10aGlzLnR5cGUscj10aGlzLnN0cm9rZU92ZXJyaWRlO2lmKHIhPW51bGwpcmV0dXJuIHI7c3dpdGNoKHQpe2Nhc2UgbnYuTUVUQTpyZXR1cm4gS3UuREVGQVVMVF9TVFJPS0U7Y2FzZSBudi5TRVJJRVM6cmV0dXJuIFVsdC5ERUZBVUxUX1NUUk9LRTtkZWZhdWx0OnJldHVybiB5MC5ERUZBVUxUX1NUUk9LRX19X2lzVHlwZSh0LHIpe3JldHVybiB0PT09cn1fZmFkZWRDbGFzcyh0LHIpe3JldHVybiB0PyJmYWRlZC0iK3I6IiJ9fTtadS50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1zaXplOiAwOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSBzdmcgewogICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCB7CiAgICAgICAgZmlsbDogdXJsKCNyZWN0SGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtZWxsaXBzZSB7CiAgICAgICAgZmlsbDogdXJsKCNlbGxpcHNlSGF0Y2gpOwogICAgICB9CgogICAgICAuZmFkZWQtcmVjdCwKICAgICAgLmZhZGVkLWVsbGlwc2UsCiAgICAgIC5mYWRlZC1zZXJpZXMgewogICAgICAgIHN0cm9rZTogdmFyKC0tdGItZ3JhcGgtZmFkZWQpICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgI3JlY3RIYXRjaCBsaW5lLAogICAgICAjZWxsaXBzZUhhdGNoIGxpbmUgewogICAgICAgIGNvbG9yOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgICAgZmlsbDogd2hpdGU7CiAgICAgICAgc3Ryb2tlOiAjZTBkNGIzICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8IS0tIFNWRyBmb3IgZGVmaW5pdGlvbnMgLS0+CiAgICA8c3ZnIGhlaWdodD0iMCIgd2lkdGg9IjAiIGlkPSJzdmdEZWZzIj4KICAgICAgPGRlZnM+CiAgICAgICAgPCEtLSBIYXRjaCBwYXR0ZXJucyBmb3IgZmFkZWQgb3V0IG5vZGVzLiAtLT4KICAgICAgICA8cGF0dGVybgogICAgICAgICAgaWQ9InJlY3RIYXRjaCIKICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSAwIDApIgogICAgICAgICAgd2lkdGg9IjUiCiAgICAgICAgICBoZWlnaHQ9IjUiCiAgICAgICAgICBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgID4KICAgICAgICAgIDxsaW5lIHgxPSIwIiB5MT0iMCIgeDI9IjAiIHkyPSI1IiBzdHlsZT0ic3Ryb2tlLXdpZHRoOiAxIj48L2xpbmU+CiAgICAgICAgPC9wYXR0ZXJuPgogICAgICAgIDxwYXR0ZXJuCiAgICAgICAgICBpZD0iZWxsaXBzZUhhdGNoIgogICAgICAgICAgcGF0dGVyblRyYW5zZm9ybT0icm90YXRlKDQ1IDAgMCkiCiAgICAgICAgICB3aWR0aD0iMiIKICAgICAgICAgIGhlaWdodD0iMiIKICAgICAgICAgIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICAgPgogICAgICAgICAgPGxpbmUgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjIiIHN0eWxlPSJzdHJva2Utd2lkdGg6IDEiPjwvbGluZT4KICAgICAgICA8L3BhdHRlcm4+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBlbGxpcHNlLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtc3RhbXAiCiAgICAgICAgICByeD0iNy41IgogICAgICAgICAgcnk9IjMiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBUZW1wbGF0ZSBmb3IgYW4gT3Agbm9kZSBhbm5vdGF0aW9uIGVsbGlwc2UgKHNtYWxsZXIpLiAtLT4KICAgICAgICA8ZWxsaXBzZQogICAgICAgICAgaWQ9Im9wLW5vZGUtYW5ub3RhdGlvbi1zdGFtcCIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjIiCiAgICAgICAgICBzdHJva2U9ImluaGVyaXQiCiAgICAgICAgICBmaWxsPSJpbmhlcml0IgogICAgICAgID48L2VsbGlwc2U+CiAgICAgICAgPCEtLSBWZXJ0aWNhbGx5IHN0YWNrZWQgc2VyaWVzIG9mIE9wIG5vZGVzIHdoZW4gdW5leHBhbmRlZC4gLS0+CiAgICAgICAgPGcgaWQ9Im9wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI5Ij48L3VzZT4KICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiIHg9IjgiIHk9IjYiPjwvdXNlPgogICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjb3Atbm9kZS1zdGFtcCIgeD0iOCIgeT0iMyI+PC91c2U+CiAgICAgICAgPC9nPgogICAgICAgIDxnIGlkPSJvcC1zZXJpZXMtaG9yaXpvbnRhbC1zdGFtcCI+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxNiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSIxMiIgeT0iNCI+PC91c2U+CiAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNvcC1ub2RlLXN0YW1wIiB4PSI4IiB5PSI0Ij48L3VzZT4KICAgICAgICA8L2c+CiAgICAgICAgPGcKICAgICAgICAgIGlkPSJzdW1tYXJ5LWljb24iCiAgICAgICAgICBmaWxsPSIjODQ4NDg0IgogICAgICAgICAgaGVpZ2h0PSIxMiIKICAgICAgICAgIHZpZXdCb3g9IjAgMCAyNCAyNCIKICAgICAgICAgIHdpZHRoPSIxMiIKICAgICAgICA+CiAgICAgICAgICA8cGF0aAogICAgICAgICAgICBkPSJNMTkgM0g1Yy0xLjEgMC0yIC45LTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDItLjkgMi0yVjVjMC0xLjEtLjktMi0yLTJ6TTkgMTdIN3YtN2gydjd6bTQgMGgtMlY3aDJ2MTB6bTQgMGgtMnYtNGgydjR6IgogICAgICAgICAgPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICAgIDwvZGVmcz4KICAgIDwvc3ZnPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ0NPTlNUJyldXSI+CiAgICAgIDxzdmcKICAgICAgICBoZWlnaHQkPSJbW2hlaWdodF1dIgogICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgdmlld0JveD0iMCAwIDEwIDEwIgogICAgICA+CiAgICAgICAgPGNpcmNsZQogICAgICAgICAgY3g9IjUiCiAgICAgICAgICBjeT0iNSIKICAgICAgICAgIHI9IjMiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgPjwvY2lyY2xlPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnU1VNTUFSWScpXV0iPgogICAgICA8c3ZnCiAgICAgICAgd2lkdGgkPSJbW2hlaWdodF1dIgogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgdmlld0JveD0iMCAwIDI0IDI0IgogICAgICAgIGZpbGw9IiM4NDg0ODQiCiAgICAgID4KICAgICAgICA8cGF0aAogICAgICAgICAgZD0iTTE5IDNINWMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlY1YzAtMS4xLS45LTItMi0yek05IDE3SDd2LTdoMnY3em00IDBoLTJWN2gydjEwem00IDBoLTJ2LTRoMnY0eiIKICAgICAgICA+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2lzVHlwZSh0eXBlLCAnT1AnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMTYgOCIKICAgICAgPgogICAgICAgIDx1c2UKICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgeGxpbms6aHJlZj0iI29wLW5vZGUtc3RhbXAiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdlbGxpcHNlJyl9fSIKICAgICAgICAgIHg9IjgiCiAgICAgICAgICB5PSI0IgogICAgICAgID48L3VzZT4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ01FVEEnKV1dIj4KICAgICAgPHN2ZwogICAgICAgIGhlaWdodCQ9IltbaGVpZ2h0XV0iCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pbllNaWQgbWVldCIKICAgICAgICB2aWV3Qm94PSIwIDAgMzcgMTYiCiAgICAgID4KICAgICAgICA8cmVjdAogICAgICAgICAgeD0iMSIKICAgICAgICAgIHk9IjEiCiAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoZmFkZWQsICdyZWN0Jyl9fSIKICAgICAgICAgIHN0cm9rZS13aWR0aD0iMnB4IgogICAgICAgICAgaGVpZ2h0PSIxNCIKICAgICAgICAgIHdpZHRoPSIzNSIKICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgcnk9IjUiCiAgICAgICAgPjwvcmVjdD4KICAgICAgPC9zdmc+CiAgICA8L3RlbXBsYXRlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc1R5cGUodHlwZSwgJ1NFUklFUycpXV0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMTYgMTUiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy12ZXJ0aWNhbC1zdGFtcCIKICAgICAgICAgICAgZmlsbCQ9IltbX2ZpbGxdXSIKICAgICAgICAgICAgc3Ryb2tlJD0iW1tfc3Ryb2tlXV0iCiAgICAgICAgICAgIGNsYXNzJD0ie3tfZmFkZWRDbGFzcyhmYWRlZCwgJ3NlcmllcycpfX0iCiAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgIHk9IjIiCiAgICAgICAgICA+PC91c2U+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1shdmVydGljYWxdXSI+CiAgICAgICAgPHN2ZwogICAgICAgICAgaGVpZ2h0JD0iW1toZWlnaHRdXSIKICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICB2aWV3Qm94PSIwIDAgMjQgMTAiCiAgICAgICAgPgogICAgICAgICAgPHVzZQogICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgeGxpbms6aHJlZj0iI29wLXNlcmllcy1ob3Jpem9udGFsLXN0YW1wIgogICAgICAgICAgICBmaWxsJD0iW1tfZmlsbF1dIgogICAgICAgICAgICBzdHJva2UkPSJbW19zdHJva2VdXSIKICAgICAgICAgICAgY2xhc3MkPSJ7e19mYWRlZENsYXNzKGZhZGVkLCAnc2VyaWVzJyl9fSIKICAgICAgICAgICAgeD0iMCIKICAgICAgICAgICAgeT0iMSIKICAgICAgICAgID48L3VzZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvdGVtcGxhdGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxadS5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwiZmlsbE92ZXJyaWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFp1LnByb3RvdHlwZSwic3Ryb2tlT3ZlcnJpZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sWnUucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxadS5wcm90b3R5cGUsImZhZGVkIix2b2lkIDApO0UoW1J0KCJ0eXBlIiwiZmlsbE92ZXJyaWRlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sWnUucHJvdG90eXBlLCJfZmlsbCIsbnVsbCk7RShbUnQoInR5cGUiLCJzdHJva2VPdmVycmlkZSIpLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLFp1LnByb3RvdHlwZSwiX3N0cm9rZSIsbnVsbCk7WnU9RShbeXQoInRmLWdyYXBoLWljb24iKV0sWnUpO3ZhciBCcz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5ub2RlPW51bGwsdGhpcy5yZW5kZXJJbmZvPW51bGwsdGhpcy5jb2xvckJ5PUduLlNUUlVDVFVSRSx0aGlzLnRlbXBsYXRlSW5kZXg9bnVsbCx0aGlzLnR5cGU9bnVsbCx0aGlzLnZlcnRpY2FsPSExLHRoaXMuY29uc3Q9ITEsdGhpcy5zdW1tYXJ5PSExLHRoaXMuZmlsbD1udWxsLHRoaXMuaGVpZ2h0PTIwfV9jb21wdXRlRmlsbE92ZXJyaWRlKHQscixuLGksbyl7cmV0dXJuIHQmJnImJmk/TEgoaSxuLHIsITEpOm99X2dldFN0cm9rZU92ZXJyaWRlKHQpe3JldHVybiB0P2VjdCh0KTpudWxsfV9nZXRUeXBlKHQscixuLGkpe2xldHtHcmFwaEljb25UeXBlOm99PWFjdDtpZih0KXN3aXRjaCh0LnR5cGUpe2Nhc2UganQuT1A6e2xldCBhPXQub3A7cmV0dXJuIHR5cGVvZiBhIT0ic3RyaW5nIj9vLk9QOmE9PT0iQ29uc3QifHxuP28uQ09OU1Q6YS5lbmRzV2l0aCgiU3VtbWFyeSIpfHxyP28uU1VNTUFSWTpvLk9QfWNhc2UganQuTUVUQTpyZXR1cm4gby5NRVRBO2Nhc2UganQuU0VSSUVTOnJldHVybiBvLlNFUklFU31yZXR1cm4gaX1faXNWZXJ0aWNhbCh0LHIpe3JldHVybiB0P3QuaGFzTm9uQ29udHJvbEVkZ2VzOiEhcn1fZ2V0RmFkZWQodCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dH1fb25GaWxsT3ZlcnJpZGVDaGFuZ2VkKHQscil7bGV0e25vZGU6bixyZW5kZXJJbmZvOmksY29sb3JCeTpvLHRlbXBsYXRlSW5kZXg6YX09dGhpczt0IT09ciYmSUgodGhpcy4kLmljb24uZ2V0U3ZnRGVmaW5hYmxlRWxlbWVudCgpKSxuJiZpJiZhJiZMSChhLG8saSwhMSx0aGlzLiQuaWNvbi5nZXRTdmdEZWZpbmFibGVFbGVtZW50KCkpfX07QnMudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgdGYtZ3JhcGgtaWNvbiB7CiAgICAgICAgLS10Yi1ncmFwaC1mYWRlZDogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRmLWdyYXBoLWljb24KICAgICAgaWQ9Imljb24iCiAgICAgIHR5cGU9IltbX2dldFR5cGUobm9kZSwgc3VtbWFyeSwgY29uc3QsIHR5cGUpXV0iCiAgICAgIGhlaWdodD0iW1toZWlnaHRdXSIKICAgICAgZmlsbC1vdmVycmlkZT0iW1tfZmlsbE92ZXJyaWRlXV0iCiAgICAgIHN0cm9rZS1vdmVycmlkZT0iW1tfZ2V0U3Ryb2tlT3ZlcnJpZGUoX2ZpbGxPdmVycmlkZSldXSIKICAgICAgZmFkZWQ9IltbX2dldEZhZGVkKHJlbmRlckluZm8pXV0iCiAgICAgIHZlcnRpY2FsPSJbW19pc1ZlcnRpY2FsKG5vZGUsIHZlcnRpY2FsKV1dIgogICAgPjwvdGYtZ3JhcGgtaWNvbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwibm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJjb2xvckJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEJzLnByb3RvdHlwZSwidGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsInR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxCcy5wcm90b3R5cGUsInZlcnRpY2FsIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sQnMucHJvdG90eXBlLCJjb25zdCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEJzLnByb3RvdHlwZSwic3VtbWFyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxCcy5wcm90b3R5cGUsImZpbGwiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sQnMucHJvdG90eXBlLCJoZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6Il9jb21wdXRlRmlsbE92ZXJyaWRlKG5vZGUsIHJlbmRlckluZm8sIGNvbG9yQnksIHRlbXBsYXRlSW5kZXgsIGZpbGwpIixvYnNlcnZlcjoiX29uRmlsbE92ZXJyaWRlQ2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sQnMucHJvdG90eXBlLCJfZmlsbE92ZXJyaWRlIix2b2lkIDApO0JzPUUoW3l0KCJ0Zi1ub2RlLWljb24iKV0sQnMpO3ZhciBHYz1jbGFzcyBleHRlbmRzIEd0KG10KXtfaXRlbVR5cGVDaGFuZ2VkKCl7dGhpcy5pdGVtVHlwZSE9PSJzdWJub2RlIj90aGlzLiRbImxpc3QtaXRlbSJdLmNsYXNzTGlzdC5hZGQoImNsaWNrYWJsZSIpOnRoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LnJlbW92ZSgiY2xpY2thYmxlIil9X25vZGVMaXN0ZW5lcih0KXt0aGlzLmZpcmUoIm5vZGUtbGlzdC1pdGVtLSIrdC50eXBlLHtub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07R2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5jbGlja2FibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuIHsKICAgICAgICBtYXJnaW4tbGVmdDogNDBweDsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbS5leGNsdWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgI2xpc3QtaXRlbSBzcGFuLmVkZ2UtbGFiZWwgewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMXB4OwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgfQoKICAgICAgLmZhZGVkIHNwYW4gewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1ncmFwaC1mYWRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sR2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sR2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxHYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxHYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxHYy5wcm90b3R5cGUsInRlbXBsYXRlSW5kZXgiLHZvaWQgMCk7R2M9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1saXN0LWl0ZW0iKV0sR2MpO3ZhciBhcz1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2V4cGFuZGVkPSEwLHRoaXMuX29wQ29tcGF0Q29sb3I9eTAuQ09NUEFUSUJMRSx0aGlzLl9vcEluY29tcGF0Q29sb3I9eTAuSU5DT01QQVRJQkxFLHRoaXMuX3RlbXBsYXRlSW5kZXg9bnVsbH1fZ2V0Tm9kZSh0LHIpe3JldHVybiByLm5vZGUodCl9X2dldFJlbmRlckluZm8odCxyKXtyZXR1cm4gdGhpcy5yZW5kZXJIaWVyYXJjaHkuZ2V0T3JDcmVhdGVSZW5kZXJOb2RlQnlOYW1lKHQpfV90b2dnbGVFeHBhbmRlZCgpe3RoaXMuX2V4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1fZ2V0VG9nZ2xlSWNvbih0KXtyZXR1cm4gdD8iZXhwYW5kLWxlc3MiOiJleHBhbmQtbW9yZSJ9X3Jlc2l6ZUxpc3QodCl7dmFyIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTtyJiZyLmZpcmUoImlyb24tcmVzaXplIil9Z2V0IF9pbmNvbXBhdGlibGVPcE5vZGVzKCl7bGV0IHQ9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4hdHx8IXQucm9vdD9bXToodGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcywiI2luY29tcGF0aWJsZU9wc0xpc3QiKSksY2xlKHQpKX1nZXQgX29wQ29tcGF0U2NvcmUoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHQmJnQucm9vdCl7dmFyIHI9dC5yb290LG49ci5jb21wYXRpYmlsaXR5SGlzdG9ncmFtLmNvbXBhdGlibGUsaT1yLmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlO2lmKG49PTAmJmk9PTApcmV0dXJuIDA7dmFyIG89bitpO3JldHVybiBNYXRoLmZsb29yKDEwMCpuL28pLzEwMH1yZXR1cm4gMH1nZXQgX29wQ29tcGF0U2NvcmVMYWJlbCgpe3ZhciB0PXRoaXMuX29wQ29tcGF0U2NvcmU7cmV0dXJuIHhuKCIuMCUiKSh0KX1nZXQgX3RvdGFsSW5jb21wYXRPcHMoKXt2YXIgdD10aGlzLmdyYXBoSGllcmFyY2h5O3JldHVybiB0JiZ0LnJvb3Q/dC5yb290LmNvbXBhdGliaWxpdHlIaXN0b2dyYW0uaW5jb21wYXRpYmxlOjB9X2dyYXBoSGllcmFyY2h5Q2hhbmdlZCgpe3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCksdGhpcy5ncmFwaEhpZXJhcmNoeS5hZGRMaXN0ZW5lcihEZC5URU1QTEFURVNfVVBEQVRFRCwoKT0+e3RoaXMuX3RlbXBsYXRlSW5kZXg9dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl9KX19O2FzLnRlbXBsYXRlPVFgCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgLmluY29tcGF0aWJsZS1vcHMtbGlzdCB7CiAgICAgICAgaGVpZ2h0OiAzNTBweDsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICBpcm9uLWxpc3QgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbS1ib2R5W3R3by1saW5lXSB7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA0cHg7CiAgICAgIH0KCiAgICAgIC5leHBhbmRlZEluZm8gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTJwdDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiByaWdodDsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAubm9uLWNvbnRyb2wtbGlzdC1pdGVtIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7CiAgICAgIH0KCiAgICAgIGRpdi5vcC1jb21wYXQtZGlzcGxheSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTBweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC8qKgogICAgICAgKiBTYWRseSwgYmVjYXVzZSB0aGUgd2hvbGUgYm9keSBpcyBpbnZlcnRlZCBpbiBjb2xvciwgbGVnZW5kcyBhbHNvIG5lZWQKICAgICAgICogdG8gYmUgaW52ZXJ0ZWQuCiAgICAgICAqKi8KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgZGl2Lm9wLWNvbXBhdC1kaXNwbGF5IHsKICAgICAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgICAgfQoKICAgICAgc3ZnLm9wLWNvbXBhdCB7CiAgICAgICAgd2lkdGg6IDI1MHB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQoKICAgICAgZGl2Lm9wLWNvbXBhdC12YWx1ZSB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6IGJsYWNrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxMHB4OwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSIgaWQ9Im5vZGV0aXRsZSI+W1tub2RlVGl0bGVdXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc2Vjb25kYXJ5PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtZGlzcGxheSI+CiAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgY2xhc3M9Im9wLWNvbXBhdCIKICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICB2aWV3Qm94PSIwIDAgMjUwIDI1IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICA8bGluZWFyR3JhZGllbnQgaWQ9Im9wLWNvbXBhdC1maWxsIj4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3IkPSJbW19vcENvbXBhdENvbG9yXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcAogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0JD0iW1tfb3BDb21wYXRTY29yZV1dIgogICAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX29wQ29tcGF0Q29sb3JdXSIKICAgICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQkPSJbW19vcENvbXBhdFNjb3JlXV0iCiAgICAgICAgICAgICAgICAgICAgICBzdG9wLWNvbG9yJD0iW1tfb3BJbmNvbXBhdENvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3IkPSJbW19vcEluY29tcGF0Q29sb3IgXV0iPjwvc3RvcD4KICAgICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICAgIDwvZGVmcz4KICAgICAgICAgICAgICAgIDxyZWN0CiAgICAgICAgICAgICAgICAgIGhlaWdodD0iMjUiCiAgICAgICAgICAgICAgICAgIHdpZHRoPSIyNTAiCiAgICAgICAgICAgICAgICAgIHJ4PSI1IgogICAgICAgICAgICAgICAgICByeT0iNSIKICAgICAgICAgICAgICAgICAgc3R5bGU9ImZpbGw6IHVybCgnI29wLWNvbXBhdC1maWxsJyk7IgogICAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvcC1jb21wYXQtdmFsdWUiPltbX29wQ29tcGF0U2NvcmVMYWJlbF1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvcGFwZXItaXRlbS1ib2R5PgogICAgPC9wYXBlci1pdGVtPgoKICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfZXhwYW5kZWR9fSI+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfZXhwYW5kZWR9fSIgcmVzdGFtcD0idHJ1ZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZXhwYW5kZWRJbmZvIj4KICAgICAgICAgIEluY29tcGF0aWJsZSBPcGVyYXRpb25zOiAoPHNwYW4+W1tfdG90YWxJbmNvbXBhdE9wc11dPC9zcGFuPikKICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgY2xhc3M9ImluY29tcGF0aWJsZS1vcHMtbGlzdCIKICAgICAgICAgICAgaWQ9ImluY29tcGF0aWJsZU9wc0xpc3QiCiAgICAgICAgICAgIGl0ZW1zPSJbW19pbmNvbXBhdGlibGVPcE5vZGVzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICA8dGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbQogICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtXV0iCiAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW19nZXRSZW5kZXJJbmZvKGl0ZW0ubmFtZSwgcmVuZGVySGllcmFyY2h5KV1dIgogICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgICAgICAgICBpdGVtLXR5cGU9ImluY29tcGF0aWJsZS1vcHMiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtZ3JhcGgtb3AtY29tcGF0LWxpc3QtaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvaXJvbi1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9pcm9uLWNvbGxhcHNlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxhcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sYXMucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sYXMucHJvdG90eXBlLCJub2RlVGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxhcy5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxhcy5wcm90b3R5cGUsIl9vcENvbXBhdENvbG9yIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGFzLnByb3RvdHlwZSwiX29wSW5jb21wYXRDb2xvciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxhcy5wcm90b3R5cGUsIl90ZW1wbGF0ZUluZGV4Iix2b2lkIDApO0UoW1J0KCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfaW5jb21wYXRpYmxlT3BOb2RlcyIsbnVsbCk7RShbUnQoImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZSIsbnVsbCk7RShbUnQoIl9vcENvbXBhdFNjb3JlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sYXMucHJvdG90eXBlLCJfb3BDb21wYXRTY29yZUxhYmVsIixudWxsKTtFKFtSdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxhcy5wcm90b3R5cGUsIl90b3RhbEluY29tcGF0T3BzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGFzLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7YXM9RShbeXQoInRmLWdyYXBoLW9wLWNvbXBhdC1jYXJkIildLGFzKTt2YXIgbDM9RWUoT2UoKSwxKTt2YXIgV2M9Y2xhc3MgZXh0ZW5kcyBHdChfbyhtdCkpe19pdGVtVHlwZUNoYW5nZWQoKXt0aGlzLml0ZW1UeXBlIT09InN1Ym5vZGUiP3RoaXMuJFsibGlzdC1pdGVtIl0uY2xhc3NMaXN0LmFkZCgiY2xpY2thYmxlIik6dGhpcy4kWyJsaXN0LWl0ZW0iXS5jbGFzc0xpc3QucmVtb3ZlKCJjbGlja2FibGUiKX1fbm9kZUxpc3RlbmVyKHQpe3RoaXMuZmlyZSgibm9kZS1saXN0LWl0ZW0tIit0LnR5cGUse2NhcmROb2RlOnRoaXMuY2FyZE5vZGUubmFtZSxub2RlTmFtZTp0aGlzLm5hbWUsdHlwZTp0aGlzLml0ZW1UeXBlfSl9X2ZhZGVkQ2xhc3ModCl7cmV0dXJuIHQmJnQuaXNGYWRlZE91dD8iZmFkZWQiOiIifX07V2MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgI2xpc3QtaXRlbSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDExcHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAjbGlzdC1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpICNsaXN0LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXBhcGVyLXllbGxvdy05MDApOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuY2xpY2thYmxlIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3BhbiB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0uZXhjbHVkZWQgc3BhbiB7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgIH0KCiAgICAgICNsaXN0LWl0ZW0gc3Bhbi5lZGdlLWxhYmVsIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIH0KCiAgICAgIC5ub2RlLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDFweDsKICAgICAgICBsZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIC5mYWRlZCBzcGFuIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtZmFkZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdgogICAgICBpZD0ibGlzdC1pdGVtIgogICAgICBvbi1tb3VzZW92ZXI9Il9ub2RlTGlzdGVuZXIiCiAgICAgIG9uLW1vdXNlb3V0PSJfbm9kZUxpc3RlbmVyIgogICAgICBvbi1jbGljaz0iX25vZGVMaXN0ZW5lciIKICAgID4KICAgICAgPGRpdiBjbGFzcyQ9Int7X2ZhZGVkQ2xhc3MoaXRlbVJlbmRlckluZm8pfX0iPgogICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgIGNsYXNzPSJub2RlLWljb24iCiAgICAgICAgICBoZWlnaHQ9IjEyIgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIG5vZGU9IltbaXRlbU5vZGVdXSIKICAgICAgICAgIHJlbmRlci1pbmZvPSJbW2l0ZW1SZW5kZXJJbmZvXV0iCiAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1t0ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgPjwvdGYtbm9kZS1pY29uPgogICAgICAgIDxzcGFuIHRpdGxlJD0iW1tuYW1lXV0iPltbbmFtZV1dPC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJlZGdlLWxhYmVsIj5bW2VkZ2VMYWJlbF1dPC9zcGFuPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJjYXJkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsIml0ZW1Ob2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiZWRnZUxhYmVsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFdjLnByb3RvdHlwZSwiaXRlbVJlbmRlckluZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV2MucHJvdG90eXBlLCJuYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG9ic2VydmVyOiJfaXRlbVR5cGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXYy5wcm90b3R5cGUsIml0ZW1UeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFdjLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXYy5wcm90b3R5cGUsImNvbG9yQnlQYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV2MucHJvdG90eXBlLCJ0ZW1wbGF0ZUluZGV4Iix2b2lkIDApO1djPUUoW3l0KCJ0Zi1ub2RlLWxpc3QtaXRlbSIpXSxXYyk7dmFyIGRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9leHBhbmRlZD0hMCx0aGlzLl9vcGVuZWRDb250cm9sUHJlZD0hMSx0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hMSx0aGlzLl90ZW1wbGF0ZUluZGV4PW51bGx9ZXhwYW5kTm9kZSgpe3RoaXMuZmlyZSgiX25vZGUuZXhwYW5kIix0aGlzLm5vZGUpfV9nZXROb2RlKHQscil7cmV0dXJuIHIubm9kZSh0KX1fZ2V0Tm9kZVN0YXRzKHQscil7dmFyIG49dGhpcy5fZ2V0Tm9kZSh0LHIpO3JldHVybiBuP24uc3RhdHM6bnVsbH1fZ2V0VG90YWxNaWNyb3ModCl7cmV0dXJuIHQ/dC5nZXRUb3RhbE1pY3JvcygpOjB9Z2V0IF9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztyZXR1cm4gbUgodCl9Z2V0IF9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcygpe3ZhciB0PXRoaXMuX25vZGVTdGF0cztpZighKCF0fHwhdC50b3RhbEJ5dGVzKSlyZXR1cm4gTmQodC50b3RhbEJ5dGVzLG5QKX1nZXQgX25vZGVTdGF0c0Zvcm1hdHRlZENvbXB1dGVUaW1lKCl7dmFyIHQ9dGhpcy5fbm9kZVN0YXRzO2lmKCEoIXR8fCF0LmdldFRvdGFsTWljcm9zKCkpKXJldHVybiBOZCh0LmdldFRvdGFsTWljcm9zKCksaVApfWdldCBfbm9kZVN0YXRzRm9ybWF0dGVkT3V0cHV0U2l6ZXMoKXt2YXIgdD10aGlzLl9ub2RlU3RhdHM7aWYoISghdHx8IXQub3V0cHV0U2l6ZXx8IXQub3V0cHV0U2l6ZS5sZW5ndGgpKXJldHVybiBsMy5tYXAodC5vdXRwdXRTaXplLGZ1bmN0aW9uKHIpe3JldHVybiByLmxlbmd0aD09PTA/InNjYWxhciI6IlsiK3Iuam9pbigiLCAiKSsiXSJ9KX1fZ2V0UmVuZGVySW5mbyh0LHIpe3JldHVybiB0aGlzLnJlbmRlckhpZXJhcmNoeS5nZXRPckNyZWF0ZVJlbmRlck5vZGVCeU5hbWUodCl9Z2V0IF9hdHRyaWJ1dGVzKCl7dmFyIHQ9dGhpcy5fbm9kZTtpZih0aGlzLmFzeW5jKHRoaXMuX3Jlc2l6ZUxpc3QuYmluZCh0aGlzLCIjYXR0cmlidXRlc0xpc3QiKSksIXR8fCF0LmF0dHIpcmV0dXJuW107dmFyIHI9W107cmV0dXJuIGwzLmVhY2godC5hdHRyLGZ1bmN0aW9uKG4pe24ua2V5PT09UXNlP3I9ci5jb25jYXQobi52YWx1ZS5saXN0LnMubWFwKGZ1bmN0aW9uKGkpe3JldHVybntrZXk6aSx2YWx1ZToiVG9vIGxhcmdlIHRvIHNob3cuLi4ifX0pKTpyLnB1c2goe2tleTpuLmtleSx2YWx1ZTpKU09OLnN0cmluZ2lmeShuLnZhbHVlKX0pfSkscn1nZXQgX2RldmljZSgpe3ZhciB0PXRoaXMuX25vZGU7cmV0dXJuIHQ/dC5kZXZpY2U6bnVsbH1nZXQgX3N1Y2Nlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgiaW5wdXRzTGlzdCIpLHQ/dGhpcy5fY29udmVydEVkZ2VMaXN0VG9FZGdlSW5mb0xpc3Qoci5nZXRTdWNjZXNzb3JzKHQubmFtZSksITEsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9wcmVkZWNlc3NvcnMoKXt2YXIgdD10aGlzLl9ub2RlLHI9dGhpcy5ncmFwaEhpZXJhcmNoeTtyZXR1cm4gdGhpcy5fcmVmcmVzaE5vZGVJdGVtTGlzdCgib3V0cHV0c0xpc3QiKSx0P3RoaXMuX2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHIuZ2V0UHJlZGVjZXNzb3JzKHQubmFtZSksITAsdC5pc0dyb3VwTm9kZSk6e3JlZ3VsYXI6W10sY29udHJvbDpbXX19Z2V0IF9mdW5jdGlvblVzYWdlcygpe3ZhciB0PXRoaXMuX25vZGUscj10aGlzLmdyYXBoSGllcmFyY2h5O2lmKHRoaXMuX3JlZnJlc2hOb2RlSXRlbUxpc3QoImZ1bmN0aW9uVXNhZ2VzTGlzdCIpLCF0fHx0LnR5cGUhPT1qdC5NRVRBKXJldHVybltdO2xldCBuPXIubGlicmFyeUZ1bmN0aW9uc1t0LmFzc29jaWF0ZWRGdW5jdGlvbl07cmV0dXJuIG4/bi51c2FnZXM6W119X3JlZnJlc2hOb2RlSXRlbUxpc3QodCl7dGhpcy5hc3luYyh0aGlzLl9yZXNpemVMaXN0LmJpbmQodGhpcyxgIyR7dH1gKSl9X2NvbnZlcnRFZGdlTGlzdFRvRWRnZUluZm9MaXN0KHQscixuKXt2YXIgaT1hPT5sMy5tYXAoYS5iYXNlRWRnZUxpc3Qscz0+e3ZhciBsPXI/cy52OnMudztyZXR1cm57bmFtZTpsLG5vZGU6dGhpcy5fZ2V0Tm9kZShsLHRoaXMuZ3JhcGhIaWVyYXJjaHkpLGVkZ2VMYWJlbDpqbHQocyx0aGlzLnJlbmRlckhpZXJhcmNoeSkscmVuZGVySW5mbzp0aGlzLl9nZXRSZW5kZXJJbmZvKGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpfX0pLG89ZnVuY3Rpb24oYSl7dmFyIHM9W107cmV0dXJuIGwzLmVhY2goYSxsPT57dmFyIGM9cj9sLnY6bC53OyFufHxsLmJhc2VFZGdlTGlzdC5sZW5ndGg9PTE/cz1zLmNvbmNhdChpKGwpKTpzLnB1c2goe25hbWU6Yyxub2RlOnRoaXMuX2dldE5vZGUoYyx0aGlzLmdyYXBoSGllcmFyY2h5KSxlZGdlTGFiZWw6WGx0KGwsdGhpcy5yZW5kZXJIaWVyYXJjaHkpLHJlbmRlckluZm86dGhpcy5fZ2V0UmVuZGVySW5mbyhjLHRoaXMucmVuZGVySGllcmFyY2h5KX0pfSksc30uYmluZCh0aGlzKTtyZXR1cm57cmVndWxhcjpvKHQucmVndWxhciksY29udHJvbDpvKHQuY29udHJvbCl9fWdldCBfc3Vibm9kZXMoKXt2YXIgdD10aGlzLl9ub2RlO3JldHVybiB0JiZ0Lm1ldGFncmFwaD90Lm1ldGFncmFwaC5ub2RlcygpOm51bGx9Z2V0IF90b3RhbFByZWRlY2Vzc29ycygpe3ZhciB0PXRoaXMuX3ByZWRlY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofWdldCBfdG90YWxTdWNjZXNzb3JzKCl7dmFyIHQ9dGhpcy5fc3VjY2Vzc29ycztyZXR1cm4gdC5yZWd1bGFyLmxlbmd0aCt0LmNvbnRyb2wubGVuZ3RofV90b2dnbGVDb250cm9sUHJlZCgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSF0aGlzLl9vcGVuZWRDb250cm9sUHJlZH1fdG9nZ2xlQ29udHJvbFN1Y2MoKXt0aGlzLl9vcGVuZWRDb250cm9sU3VjYz0hdGhpcy5fb3BlbmVkQ29udHJvbFN1Y2N9X3RvZ2dsZUV4cGFuZGVkKCl7dGhpcy5fZXhwYW5kZWQ9IXRoaXMuX2V4cGFuZGVkfV9nZXRUb2dnbGVJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbGVzcyI6ImV4cGFuZC1tb3JlIn1fcmVzZXRTdGF0ZSgpe3RoaXMuX29wZW5lZENvbnRyb2xQcmVkPSExLHRoaXMuX29wZW5lZENvbnRyb2xTdWNjPSExLHRoaXMuc2V0KCJfZ3JvdXBCdXR0b25UZXh0Iix0Y3QodGhpcy5fbm9kZSkpfV9yZXNpemVMaXN0KHQpe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7ciYmci5maXJlKCJpcm9uLXJlc2l6ZSIpfV90b2dnbGVJbmNsdWRlKCl7dGhpcy5maXJlKCJub2RlLXRvZ2dsZS1pbmNsdXNpb24iLHtuYW1lOnRoaXMuZ3JhcGhOb2RlTmFtZX0pfV9ub2RlSW5jbHVkZVN0YXRlQ2hhbmdlZCh0LHIpe3RoaXMuc2V0KCJfYXV4QnV0dG9uVGV4dCIsX0godCkpfV90b2dnbGVHcm91cCgpe3ZhciB0PVBIKHRoaXMuX25vZGUpO3RoaXMuZmlyZSgibm9kZS10b2dnbGUtc2VyaWVzZ3JvdXAiLHtuYW1lOnR9KX1faXNMaWJyYXJ5RnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubmFtZS5zdGFydHNXaXRoKFNhKX1faXNJblNlcmllcyh0KXtyZXR1cm4gUWx0KHQpfV9ncmFwaEhpZXJhcmNoeUNoYW5nZWQoKXt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpLHRoaXMuZ3JhcGhIaWVyYXJjaHkuYWRkTGlzdGVuZXIoRGQuVEVNUExBVEVTX1VQREFURUQsKCk9Pnt0aGlzLl90ZW1wbGF0ZUluZGV4PXRoaXMuZ3JhcGhIaWVyYXJjaHkuZ2V0VGVtcGxhdGVJbmRleCgpfSl9fTtkbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICAuc3ViLWxpc3QtZ3JvdXAgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdCB7CiAgICAgICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICB9CgogICAgICAuYXR0ci1sZWZ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogMzAlOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuYXR0ci1yaWdodCB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwJTsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgICAgY29sb3I6IHZhcigtLXNlY29uZGFyeS10ZXh0LWNvbG9yKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUgewogICAgICAgIGRpc3BsYXk6IHRhYmxlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc3ViLWxpc3QtdGFibGUtcm93IHsKICAgICAgICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1yb3cgLnN1Yi1saXN0LXRhYmxlLWNlbGw6bGFzdC1jaGlsZCB7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIH0KCiAgICAgIC5zdWItbGlzdC10YWJsZS1jZWxsIHsKICAgICAgICBjb2xvcjogdmFyKC0tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogICAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgICAgZm9udC1zaXplOiAxMXB0OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgfQoKICAgICAgcGFwZXItaXRlbSB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQtY29sb3IpOwogICAgICB9CgogICAgICBwYXBlci1pdGVtLWJvZHlbdHdvLWxpbmVdIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4IDRweDsKICAgICAgfQoKICAgICAgLmV4cGFuZGVkSW5mbyB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sRGVwcyB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgOHB4OwogICAgICB9CgogICAgICAubm9kZS1uYW1lIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwogICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgICAgICBmb250LXNpemU6IDE0cHQ7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLm5vZGUtaWNvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAuc3VidGl0bGUgewogICAgICAgIGNvbG9yOiB2YXIoLS1zZWNvbmRhcnktdGV4dC1jb2xvcik7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAuY29udHJvbExpbmUgewogICAgICAgIGZvbnQtc2l6ZTogMTFwdDsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLXRvZ2dsZS1idXR0b24gewogICAgICAgIGZsb2F0OiBsZWZ0OwogICAgICAgIG1heC1oZWlnaHQ6IDIwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtaW5jbHVkZS1ncm91cCB7CiAgICAgICAgcGFkZGluZy10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlIHsKICAgICAgICBtYXJnaW46IDVweCA2cHg7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHQ7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZmFmYTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1pbmNsdWRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1nb29nbGUteWVsbG93LTEwMCk7CiAgICAgIH0KCiAgICAgIC5ub24tY29udHJvbC1saXN0LWl0ZW0gewogICAgICAgIHBhZGRpbmctbGVmdDogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxwYXBlci1pdGVtPgogICAgICA8cGFwZXItaXRlbS1ib2R5IHR3by1saW5lPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfZXhwYW5kZWQpfX0iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtYnV0dG9uIgogICAgICAgICAgPgogICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vZGUtbmFtZSI+CiAgICAgICAgICAgIDx0Zi13YnItc3RyaW5nIHZhbHVlPSJbW19ub2RlLm5hbWVdXSIgZGVsaW1pdGVyLXBhdHRlcm49Ii8iPgogICAgICAgICAgICA8L3RmLXdici1zdHJpbmc+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IHNlY29uZGFyeT4KICAgICAgICAgIDx0Zi1ub2RlLWljb24KICAgICAgICAgICAgY2xhc3M9Im5vZGUtaWNvbiIKICAgICAgICAgICAgbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICByZW5kZXItaW5mbz0iW1tfZ2V0UmVuZGVySW5mbyhncmFwaE5vZGVOYW1lLCByZW5kZXJIaWVyYXJjaHkpXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgID48L3RmLW5vZGUtaWNvbj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5vcH19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3VidGl0bGUiPgogICAgICAgICAgICAgIE9wZXJhdGlvbjoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLm9wXV08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfbm9kZS5tZXRhZ3JhcGh9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj4KICAgICAgICAgICAgICBTdWJncmFwaDoKICAgICAgICAgICAgICA8c3Bhbj5bW19ub2RlLmNhcmRpbmFsaXR5XV08L3NwYW4+IG5vZGVzCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9wYXBlci1pdGVtLWJvZHk+CiAgICA8L3BhcGVyLWl0ZW0+CiAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9Int7X2V4cGFuZGVkfX0iPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2V4cGFuZGVkfX0iIHJlc3RhbXA9InRydWUiPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cGFuZGVkSW5mbyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBhdHRyaWJ1dGVzIj4KICAgICAgICAgICAgQXR0cmlidXRlcyAoPHNwYW4+W1tfYXR0cmlidXRlcy5sZW5ndGhdXTwvc3Bhbj4pCiAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgaWQ9ImF0dHJpYnV0ZXNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19hdHRyaWJ1dGVzXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPltbaXRlbS5rZXldXTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLXJpZ2h0Ij5bW2l0ZW0udmFsdWVdXTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2RldmljZX19Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViLWxpc3QtZ3JvdXAgZGV2aWNlIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRyLWxlZnQiPkRldmljZTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dHItcmlnaHQiPltbX2RldmljZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBwcmVkZWNlc3NvcnMiPgogICAgICAgICAgICBJbnB1dHMgKDxzcGFuPltbX3RvdGFsUHJlZGVjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJpbnB1dHNMaXN0IgogICAgICAgICAgICAgIGl0ZW1zPSJbW19wcmVkZWNlc3NvcnMucmVndWxhcl1dIgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLW5vZGU9IltbaXRlbS5ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGVkZ2UtbGFiZWw9IltbaXRlbS5lZGdlTGFiZWxdXSIKICAgICAgICAgICAgICAgICAgaXRlbS1yZW5kZXItaW5mbz0iW1tpdGVtLnJlbmRlckluZm9dXSIKICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgICAgICAgICAgdGVtcGxhdGUtaW5kZXg9IltbX3RlbXBsYXRlSW5kZXhdXSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbm9kZS1saXN0LWl0ZW0+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFByZWQpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sUHJlZCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFByZWR9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sUHJlZH19IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic3ViLWxpc3QiCiAgICAgICAgICAgICAgICAgICAgICBpdGVtcz0iW1tfcHJlZGVjZXNzb3JzLmNvbnRyb2xdXSIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQtbm9kZT0iW1tfbm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9IltbaXRlbS5uYW1lXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS10eXBlPSJwcmVkZWNlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC1ncm91cCBzdWNjZXNzb3JzIj4KICAgICAgICAgICAgT3V0cHV0cyAoPHNwYW4+W1tfdG90YWxTdWNjZXNzb3JzXV08L3NwYW4+KQogICAgICAgICAgICA8aXJvbi1saXN0CiAgICAgICAgICAgICAgY2xhc3M9InN1Yi1saXN0IgogICAgICAgICAgICAgIGlkPSJvdXRwdXRzTGlzdCIKICAgICAgICAgICAgICBpdGVtcz0iW1tfc3VjY2Vzc29ycy5yZWd1bGFyXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbm9kZS1saXN0LWl0ZW0KICAgICAgICAgICAgICAgICAgY2xhc3M9Im5vbi1jb250cm9sLWxpc3QtaXRlbSIKICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgIGl0ZW0tbm9kZT0iW1tpdGVtLm5vZGVdXSIKICAgICAgICAgICAgICAgICAgZWRnZS1sYWJlbD0iW1tpdGVtLmVkZ2VMYWJlbF1dIgogICAgICAgICAgICAgICAgICBpdGVtLXJlbmRlci1pbmZvPSJbW2l0ZW0ucmVuZGVySW5mb11dIgogICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvciIKICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS1pbmRleD0iW1tfdGVtcGxhdGVJbmRleF1dIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L2lyb24tbGlzdD4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zdWNjZXNzb3JzLmNvbnRyb2wubGVuZ3RoXV0iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xEZXBzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xMaW5lIj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgaWNvbj0ie3tfZ2V0VG9nZ2xlSWNvbihfb3BlbmVkQ29udHJvbFN1Y2MpfX0iCiAgICAgICAgICAgICAgICAgICAgb24tY2xpY2s9Il90b2dnbGVDb250cm9sU3VjYyIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iY29udHJvbC10b2dnbGUtYnV0dG9uIgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgICAgICAgICAgICAgIENvbnRyb2wgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxpcm9uLWNvbGxhcHNlIG9wZW5lZD0ie3tfb3BlbmVkQ29udHJvbFN1Y2N9fSIgbm8tYW5pbWF0aW9uPgogICAgICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgICAgICAgICAgICAgIGlmPSJ7e19vcGVuZWRDb250cm9sU3VjY319IgogICAgICAgICAgICAgICAgICAgIHJlc3RhbXA9InRydWUiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8aXJvbi1saXN0IGNsYXNzPSJzdWItbGlzdCIgaXRlbXM9IltbX3N1Y2Nlc3NvcnMuY29udHJvbF1dIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRmLW5vZGUtbGlzdC1pdGVtCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW0ubm9kZV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tcmVuZGVyLWluZm89IltbaXRlbS5yZW5kZXJJbmZvXV0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iW1tpdGVtLm5hbWVdXSIKICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLXR5cGU9InN1Y2Nlc3NvcnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8L2lyb24tY29sbGFwc2U+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0ie3tfaGFzRGlzcGxheWFibGVOb2RlU3RhdHN9fSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIG5vZGUtc3RhdHMiPgogICAgICAgICAgICAgIE5vZGUgU3RhdHMKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZSI+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy50b3RhbEJ5dGVzfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPk1lbW9yeTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQnl0ZXNdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2dldFRvdGFsTWljcm9zKF9ub2RlU3RhdHMpfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPkNvbXB1dGUgVGltZTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPgogICAgICAgICAgICAgICAgICAgICAgW1tfbm9kZVN0YXRzRm9ybWF0dGVkQ29tcHV0ZVRpbWVdXQogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X25vZGVTdGF0cy5vdXRwdXRTaXplfX0iPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1yb3ciPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LXRhYmxlLWNlbGwiPlRlbnNvciBPdXRwdXQgU2l6ZXM8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWItbGlzdC10YWJsZS1jZWxsIj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9Int7X25vZGVTdGF0c0Zvcm1hdHRlZE91dHB1dFNpemVzfX0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgIFtbaXRlbV1dIDxiciAvPgogICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19mdW5jdGlvblVzYWdlcy5sZW5ndGhdXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Yi1saXN0LWdyb3VwIHByZWRlY2Vzc29ycyI+CiAgICAgICAgICAgICAgVXNhZ2VzIG9mIHRoZSBGdW5jdGlvbiAoPHNwYW4+W1tfZnVuY3Rpb25Vc2FnZXMubGVuZ3RoXV08L3NwYW4+KQogICAgICAgICAgICAgIDxpcm9uLWxpc3QKICAgICAgICAgICAgICAgIGNsYXNzPSJzdWItbGlzdCIKICAgICAgICAgICAgICAgIGlkPSJmdW5jdGlvblVzYWdlc0xpc3QiCiAgICAgICAgICAgICAgICBpdGVtcz0iW1tfZnVuY3Rpb25Vc2FnZXNdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICAgIDx0Zi1ub2RlLWxpc3QtaXRlbQogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJub24tY29udHJvbC1saXN0LWl0ZW0iCiAgICAgICAgICAgICAgICAgICAgY2FyZC1ub2RlPSJbW19ub2RlXV0iCiAgICAgICAgICAgICAgICAgICAgaXRlbS1ub2RlPSJbW2l0ZW1dXSIKICAgICAgICAgICAgICAgICAgICBuYW1lPSJbW2l0ZW0ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIGl0ZW0tdHlwZT0iZnVuY3Rpb25Vc2FnZXMiCiAgICAgICAgICAgICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLWluZGV4PSJbW190ZW1wbGF0ZUluZGV4XV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90Zi1ub2RlLWxpc3QtaXRlbT4KICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgICAgPC9pcm9uLWxpc3Q+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9pc0xpYnJhcnlGdW5jdGlvbihfbm9kZSldXSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1pbmNsdWRlLWdyb3VwIj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgICByYWlzZWQKICAgICAgICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtaW5jbHVkZSIKICAgICAgICAgICAgICAgIG9uLWNsaWNrPSJfdG9nZ2xlSW5jbHVkZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3Bhbj5bW19hdXhCdXR0b25UZXh0XV08L3NwYW4+CiAgICAgICAgICAgICAgPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7X2lzSW5TZXJpZXMoX25vZGUpfX0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtaW5jbHVkZS1ncm91cCI+CiAgICAgICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICAgICAgcmFpc2VkCiAgICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWluY2x1ZGUiCiAgICAgICAgICAgICAgICBvbi1jbGljaz0iX3RvZ2dsZUdyb3VwIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxzcGFuPltbX2dyb3VwQnV0dG9uVGV4dF1dPC9zcGFuPgogICAgICAgICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L2lyb24tY29sbGFwc2U+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxkbi5wcm90b3R5cGUsImdyYXBoTm9kZU5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxkbi5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxjb21wdXRlZDoiX2dldE5vZGUoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QsY29tcHV0ZWQ6Il9nZXROb2RlU3RhdHMoZ3JhcGhOb2RlTmFtZSwgZ3JhcGhIaWVyYXJjaHkpIixvYnNlcnZlcjoiX3Jlc2V0U3RhdGUifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGRuLnByb3RvdHlwZSwiX25vZGVTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX25vZGVJbmNsdWRlU3RhdGVDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxkbi5wcm90b3R5cGUsIm5vZGVJbmNsdWRlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZG4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxkbi5wcm90b3R5cGUsIl9vcGVuZWRDb250cm9sUHJlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGRuLnByb3RvdHlwZSwiX29wZW5lZENvbnRyb2xTdWNjIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRuLnByb3RvdHlwZSwiX2F1eEJ1dHRvblRleHQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sZG4ucHJvdG90eXBlLCJfZ3JvdXBCdXR0b25UZXh0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sZG4ucHJvdG90eXBlLCJfdGVtcGxhdGVJbmRleCIsdm9pZCAwKTtFKFtSdCgiX25vZGVTdGF0cyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9oYXNEaXNwbGF5YWJsZU5vZGVTdGF0cyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRCeXRlcyIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRDb21wdXRlVGltZSIsbnVsbCk7RShbUnQoIl9ub2RlU3RhdHMiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9ub2RlU3RhdHNGb3JtYXR0ZWRPdXRwdXRTaXplcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9hdHRyaWJ1dGVzIixudWxsKTtFKFtSdCgiX25vZGUiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9kZXZpY2UiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfc3VjY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9ub2RlIiwiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9wcmVkZWNlc3NvcnMiLG51bGwpO0UoW1J0KCJfbm9kZSIsImdyYXBoSGllcmFyY2h5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9mdW5jdGlvblVzYWdlcyIsbnVsbCk7RShbUnQoIl9ub2RlIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl9zdWJub2RlcyIsbnVsbCk7RShbUnQoIl9wcmVkZWNlc3NvcnMiKSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxkbi5wcm90b3R5cGUsIl90b3RhbFByZWRlY2Vzc29ycyIsbnVsbCk7RShbUnQoIl9zdWNjZXNzb3JzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZG4ucHJvdG90eXBlLCJfdG90YWxTdWNjZXNzb3JzIixudWxsKTtFKFtCdCgiZ3JhcGhIaWVyYXJjaHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRuLnByb3RvdHlwZSwiX2dyYXBoSGllcmFyY2h5Q2hhbmdlZCIsbnVsbCk7ZG49RShbeXQoInRmLW5vZGUtaW5mbyIpXSxkbik7dmFyIHNzPWNsYXNzIGV4dGVuZHMgR3QobXQpe3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm5vZGUtbGlzdC1pdGVtLWNsaWNrIix0aGlzLl9ub2RlTGlzdEl0ZW1DbGlja2VkLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS1saXN0LWl0ZW0tbW91c2VvdmVyIix0aGlzLl9ub2RlTGlzdEl0ZW1Nb3VzZW92ZXIuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJub2RlLWxpc3QtaXRlbS1tb3VzZW91dCIsdGhpcy5fbm9kZUxpc3RJdGVtTW91c2VvdXQuYmluZCh0aGlzKSl9X25vZGVMaXN0SXRlbUNsaWNrZWQodCl7dGhpcy5zZWxlY3RlZE5vZGU9dC5kZXRhaWwubm9kZU5hbWV9X25vZGVMaXN0SXRlbU1vdXNlb3Zlcih0KXt0aGlzLmhpZ2hsaWdodGVkTm9kZT10LmRldGFpbC5ub2RlTmFtZX1fbm9kZUxpc3RJdGVtTW91c2VvdXQoKXt0aGlzLmhpZ2hsaWdodGVkTm9kZT1udWxsfV9oZWFsdGhQaWxsc0F2YWlsYWJsZSh0LHIpe3JldHVybiB0JiZyJiZPYmplY3Qua2V5cyhyKS5sZW5ndGg+MH1fZXF1YWxzKHQscil7cmV0dXJuIHQ9PT1yfX07c3MudGVtcGxhdGU9UWAKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNlY29uZGFyeS1iYWNrZ3JvdW5kLWNvbG9yKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWF4LWhlaWdodDogNjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIGgyIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Int7c2VsZWN0ZWROb2RlfX0iPgogICAgICA8cGFwZXItbWF0ZXJpYWwgZWxldmF0aW9uPSIxIiBjbGFzcz0iY2FyZCI+CiAgICAgICAgPHRmLW5vZGUtaW5mbwogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZmxhdC1ncmFwaD0iW1tncmFwaF1dIgogICAgICAgICAgZ3JhcGgtbm9kZS1uYW1lPSJbW3NlbGVjdGVkTm9kZV1dIgogICAgICAgICAgbm9kZS1pbmNsdWRlPSJbW3NlbGVjdGVkTm9kZUluY2x1ZGVdXSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgICBjb2xvci1ieT0iW1tjb2xvckJ5XV0iCiAgICAgICAgPgogICAgICAgIDwvdGYtbm9kZS1pbmZvPgogICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdvcF9jb21wYXRpYmlsaXR5JyldXSI+CiAgICAgIDx0Zi1ncmFwaC1vcC1jb21wYXQtY2FyZAogICAgICAgIGdyYXBoLWhpZXJhcmNoeT0iW1tncmFwaEhpZXJhcmNoeV1dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgIG5vZGUtdGl0bGU9IltbY29tcGF0Tm9kZVRpdGxlXV0iCiAgICAgID4KICAgICAgPC90Zi1ncmFwaC1vcC1jb21wYXQtY2FyZD4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUKICAgICAgaXM9ImRvbS1pZiIKICAgICAgaWY9IltbX2hlYWx0aFBpbGxzQXZhaWxhYmxlKGRlYnVnZ2VyRGF0YUVuYWJsZWQsIG5vZGVOYW1lc1RvSGVhbHRoUGlsbHMpXV0iCiAgICA+CiAgICAgIDx0Zi1ncmFwaC1kZWJ1Z2dlci1kYXRhLWNhcmQKICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIGRlYnVnZ2VyLW51bWVyaWMtYWxlcnRzPSJbW2RlYnVnZ2VyTnVtZXJpY0FsZXJ0c11dIgogICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICBzZWxlY3RlZC1ub2RlPSJ7e3NlbGVjdGVkTm9kZX19IgogICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7aGlnaGxpZ2h0ZWROb2RlfX0iCiAgICAgICAgYXJlLWhlYWx0aC1waWxscy1sb2FkaW5nPSJbW2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgIHNwZWNpZmljLWhlYWx0aC1waWxsLXN0ZXA9Int7c3BlY2lmaWNIZWFsdGhQaWxsU3RlcH19IgogICAgICAgIGhlYWx0aC1waWxsLXN0ZXAtaW5kZXg9Int7aGVhbHRoUGlsbFN0ZXBJbmRleH19IgogICAgICA+CiAgICAgIDwvdGYtZ3JhcGgtZGVidWdnZXItZGF0YS1jYXJkPgogICAgPC90ZW1wbGF0ZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwidGl0bGUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsb3MpXSxzcy5wcm90b3R5cGUsImdyYXBoSGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLFh1KV0sc3MucHJvdG90eXBlLCJncmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHNzLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNzLnByb3RvdHlwZSwibm9kZU5hbWVzVG9IZWFsdGhQaWxscyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sc3MucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxzcy5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sc3MucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHNzLnByb3RvdHlwZSwiaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxzcy5wcm90b3R5cGUsInNlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxzcy5wcm90b3R5cGUsImRlYnVnZ2VyRGF0YUVuYWJsZWQiLHZvaWQgMCk7c3M9RShbeXQoInRmLWdyYXBoLWluZm8iKV0sc3MpO3ZhciBpdXI9e01BWF9OT0RFX0NPVU5UOjFlNCxNQVhfRURHRV9DT1VOVDoxZTR9LHRuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ9ITEsdGhpcy5zcGVjaWZpY0hlYWx0aFBpbGxTdGVwPTAsdGhpcy5jb21wYXROb2RlVGl0bGU9IlRQVSBDb21wYXRpYmlsaXR5In1maXQoKXt0aGlzLiQuZ3JhcGguZml0KCl9ZG93bmxvYWRBc0ltYWdlKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9eWllbGQgdGhpcy4kLmdyYXBoLmdldEltYWdlQmxvYigpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1VUkwuY3JlYXRlT2JqZWN0VVJMKHIpLG4uZG93bmxvYWQ9dCxuLmNsaWNrKCksVVJMLnJldm9rZU9iamVjdFVSTChuLmhyZWYpfSl9X2lzTm90Q29tcGxldGUodCl7cmV0dXJuIHQudmFsdWU8MTAwfV9nZXRDb250YWluZXJDbGFzcyh0KXt2YXIgcj0iY29udGFpbmVyIjtyZXR1cm4gdC5lcnJvciYmKHIrPSIgZXJyb3IiKSx0aGlzLl9pc05vdENvbXBsZXRlKHQpJiYocis9IiBsb2FkaW5nIikscn1fb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZUV4dHJhY3QodC5kZXRhaWwubmFtZSl9X29uTm9kZVNlcmllc0dyb3VwVG9nZ2xlZCh0KXt0aGlzLiQuZ3JhcGgubm9kZVRvZ2dsZVNlcmllc0dyb3VwKHQuZGV0YWlsLm5hbWUpfV91cGRhdGVOb2RlSW5jbHVkZSgpe2xldCB0PXRoaXMucmVuZGVySGllcmFyY2h5P3RoaXMucmVuZGVySGllcmFyY2h5LmdldE5vZGVCeU5hbWUodGhpcy5zZWxlY3RlZE5vZGUpOm51bGw7dGhpcy5fc2VsZWN0ZWROb2RlSW5jbHVkZT10P3QuaW5jbHVkZTp1ci5VTlNQRUNJRklFRH1fc2xpbUdyYXBoQ2hhbmdlZCgpe2lmKCF0aGlzLmdyYXBoKXJldHVybjtsZXR7TUFYX05PREVfQ09VTlQ6dCxNQVhfRURHRV9DT1VOVDpyfT1pdXI7T2JqZWN0LmtleXModGhpcy5ncmFwaC5ub2RlcykubGVuZ3RoPnQmJnRoaXMuZ3JhcGguZWRnZXMubGVuZ3RoPnImJnRoaXMuY29sb3JCeT09PUduLlNUUlVDVFVSRSYmKHRoaXMuY29sb3JCeT1Hbi5OT05FKX1fZW5zdXJlVGVtcGxhdGVzKCl7IXRoaXMuZ3JhcGhIaWVyYXJjaHl8fHRoaXMuY29sb3JCeSE9PUduLlNUUlVDVFVSRXx8dGhpcy5ncmFwaEhpZXJhcmNoeS5nZXRUZW1wbGF0ZUluZGV4KCl8fHRoaXMuZ3JhcGhIaWVyYXJjaHkudXBkYXRlVGVtcGxhdGVzKCl9fTt0bi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6Omhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAvZGVlcC8gLmNsb3NlIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGxlZnQ6IDE1cHg7CiAgICAgICAgYm90dG9tOiAxNXB4OwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nIHsKICAgICAgICBjdXJzb3I6IHByb2dyZXNzOwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLmNvbnRhaW5lci5sb2FkaW5nLmVycm9yIHsKICAgICAgICBjdXJzb3I6IGF1dG87CiAgICAgIH0KCiAgICAgICNpbmZvIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDVweDsKICAgICAgICB0b3A6IDVweDsKICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzODBweDsKICAgICAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgICBAYXBwbHkgLS1zaGFkb3ctZWxldmF0aW9uLTJkcDsKICAgICAgfQoKICAgICAgI21haW4gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLWJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNDBweDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgI3Byb2dyZXNzLW1zZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLXByb2dyZXNzIHsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgLS1wYXBlci1wcm9ncmVzcy1oZWlnaHQ6IDZweDsKICAgICAgICAtLXBhcGVyLXByb2dyZXNzLWFjdGl2ZS1jb2xvcjogI2YzOTEzZTsKICAgICAgfQoKICAgICAgLmNvbnRleHQtbWVudSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2Q0ZDRkNDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KCiAgICAgIC9kZWVwLyAuY29udGV4dC1tZW51IHVsIGxpIHsKICAgICAgICBwYWRkaW5nOiA0cHggMTZweDsKICAgICAgfQoKICAgICAgL2RlZXAvIC5jb250ZXh0LW1lbnUgdWwgbGk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMzkxM2U7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc05vdENvbXBsZXRlKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtYmFyIj4KICAgICAgICA8ZGl2IGlkPSJwcm9ncmVzcy1tc2ciPltbcHJvZ3Jlc3MubXNnXV08L2Rpdj4KICAgICAgICA8cGFwZXItcHJvZ3Jlc3MgdmFsdWU9IltbcHJvZ3Jlc3MudmFsdWVdXSI+PC9wYXBlci1wcm9ncmVzcz4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcyQ9IltbX2dldENvbnRhaW5lckNsYXNzKHByb2dyZXNzKV1dIj4KICAgICAgPGRpdiBpZD0ibWFpbiI+CiAgICAgICAgPHRmLWdyYXBoCiAgICAgICAgICBpZD0iZ3JhcGgiCiAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9Int7Z3JhcGhIaWVyYXJjaHl9fSIKICAgICAgICAgIGJhc2ljLWdyYXBoPSJbW2dyYXBoXV0iCiAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgcmVuZGVyLWhpZXJhcmNoeT0ie3tyZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJbW2RldmljZXNGb3JTdGF0c11dIgogICAgICAgICAgc3RhdHM9Iltbc3RhdHNdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBoaWdobGlnaHRlZC1ub2RlPSJ7e19oaWdobGlnaHRlZE5vZGV9fSIKICAgICAgICAgIGNvbG9yLWJ5PSJbW2NvbG9yQnldXSIKICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tjb2xvckJ5UGFyYW1zfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3twcm9ncmVzc319IgogICAgICAgICAgZWRnZS1sYWJlbC1mdW5jdGlvbj0iW1tlZGdlTGFiZWxGdW5jdGlvbl1dIgogICAgICAgICAgZWRnZS13aWR0aC1mdW5jdGlvbj0iW1tlZGdlV2lkdGhGdW5jdGlvbl1dIgogICAgICAgICAgbm9kZS1uYW1lcy10by1oZWFsdGgtcGlsbHM9Iltbbm9kZU5hbWVzVG9IZWFsdGhQaWxsc11dIgogICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1toZWFsdGhQaWxsU3RlcEluZGV4XV0iCiAgICAgICAgICBoYW5kbGUtbm9kZS1zZWxlY3RlZD0iW1toYW5kbGVOb2RlU2VsZWN0ZWRdXSIKICAgICAgICAgIGhhbmRsZS1lZGdlLXNlbGVjdGVkPSJbW2hhbmRsZUVkZ2VTZWxlY3RlZF1dIgogICAgICAgICAgdHJhY2UtaW5wdXRzPSJbW3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICBhdXRvLWV4dHJhY3Qtbm9kZXM9IltbYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgID48L3RmLWdyYXBoPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iaW5mbyI+CiAgICAgICAgPHRmLWdyYXBoLWluZm8KICAgICAgICAgIGlkPSJncmFwaC1pbmZvIgogICAgICAgICAgdGl0bGU9InNlbGVjdGVkIgogICAgICAgICAgZ3JhcGgtaGllcmFyY2h5PSJbW2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJbW3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgICAgZ3JhcGg9IltbZ3JhcGhdXSIKICAgICAgICAgIHNlbGVjdGVkLW5vZGU9Int7c2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICBzZWxlY3RlZC1ub2RlLWluY2x1ZGU9Int7X3NlbGVjdGVkTm9kZUluY2x1ZGV9fSIKICAgICAgICAgIGhpZ2hsaWdodGVkLW5vZGU9Int7X2hpZ2hsaWdodGVkTm9kZX19IgogICAgICAgICAgY29sb3ItYnk9IltbY29sb3JCeV1dIgogICAgICAgICAgY29sb3ItYnktcGFyYW1zPSJbW2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tkZWJ1Z2dlckRhdGFFbmFibGVkXV0iCiAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbYXJlSGVhbHRoUGlsbHNMb2FkaW5nXV0iCiAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tkZWJ1Z2dlck51bWVyaWNBbGVydHNdXSIKICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW25vZGVOYW1lc1RvSGVhbHRoUGlsbHNdXSIKICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgc3BlY2lmaWMtaGVhbHRoLXBpbGwtc3RlcD0ie3tzcGVjaWZpY0hlYWx0aFBpbGxTdGVwfX0iCiAgICAgICAgICBoZWFsdGgtcGlsbC1zdGVwLWluZGV4PSJ7e2hlYWx0aFBpbGxTdGVwSW5kZXh9fSIKICAgICAgICAgIGNvbXBhdC1ub2RlLXRpdGxlPSJbW2NvbXBhdE5vZGVUaXRsZV1dIgogICAgICAgICAgb24tbm9kZS10b2dnbGUtaW5jbHVzaW9uPSJfb25Ob2RlSW5jbHVzaW9uVG9nZ2xlZCIKICAgICAgICAgIG9uLW5vZGUtdG9nZ2xlLXNlcmllc2dyb3VwPSJfb25Ob2RlU2VyaWVzR3JvdXBUb2dnbGVkIgogICAgICAgID48L3RmLWdyYXBoLWluZm8+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixvcyldLHRuLnByb3RvdHlwZSwiZ3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsWHUpXSx0bi5wcm90b3R5cGUsImdyYXBoIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJwcm9ncmVzcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRuLnByb3RvdHlwZSwidHJhY2VJbnB1dHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0bi5wcm90b3R5cGUsImF1dG9FeHRyYWN0Tm9kZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmcsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRuLnByb3RvdHlwZSwiY29sb3JCeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJjb2xvckJ5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixsbyldLHRuLnByb3RvdHlwZSwicmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJkZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhcmVIZWFsdGhQaWxsc0xvYWRpbmciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheSxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSx0bi5wcm90b3R5cGUsImRlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsIm5vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdG4ucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSx0bi5wcm90b3R5cGUsInNwZWNpZmljSGVhbHRoUGlsbFN0ZXAiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sdG4ucHJvdG90eXBlLCJoZWFsdGhQaWxsU3RlcEluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx0bi5wcm90b3R5cGUsImNvbXBhdE5vZGVUaXRsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0bi5wcm90b3R5cGUsImVkZ2VXaWR0aEZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRuLnByb3RvdHlwZSwiX3NlbGVjdGVkTm9kZUluY2x1ZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdG4ucHJvdG90eXBlLCJfaGlnaGxpZ2h0ZWROb2RlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiaGFuZGxlTm9kZVNlbGVjdGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRuLnByb3RvdHlwZSwiZWRnZUxhYmVsRnVuY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdG4ucHJvdG90eXBlLCJoYW5kbGVFZGdlU2VsZWN0ZWQiLHZvaWQgMCk7RShbQnQoInNlbGVjdGVkTm9kZSIsInJlbmRlckhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfdXBkYXRlTm9kZUluY2x1ZGUiLG51bGwpO0UoW0J0KCJncmFwaCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfc2xpbUdyYXBoQ2hhbmdlZCIsbnVsbCk7RShbQnQoImNvbG9yQnkiLCJncmFwaEhpZXJhcmNoeSIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sdG4ucHJvdG90eXBlLCJfZW5zdXJlVGVtcGxhdGVzIixudWxsKTt0bj1FKFt5dCgidGYtZ3JhcGgtYm9hcmQiKV0sdG4pO3ZhciBjMz1FZShPZSgpLDEpO3ZhciBKdT1jbGFzc3tpc05vdFRwdU9wKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJjcHU6IikhPS0xfHx0LnRvTG93ZXJDYXNlKCkuc2VhcmNoKCJncHU6IikhPS0xPyEwOnQudG9Mb3dlckNhc2UoKS5zZWFyY2goInRwdSIpPT0tMX1vcFZhbGlkKHQpe3JldHVybiB0Lm5hbWUuc2VhcmNoKFNhKT09MHx8IXQub3B8fHQuZGV2aWNlJiZ0aGlzLmlzTm90VHB1T3AodC5kZXZpY2UpfHx0LmRldmljZSYmdC5kZXZpY2Uuc2VhcmNoKCJUUFVfU1lTVEVNIikhPS0xPyEwOmMzLmluY2x1ZGVzKEp1LldISVRFTElTVCx0Lm9wKX19O0p1LldISVRFTElTVD1bIkFicyIsIkFjb3MiLCJBY29zaCIsIkFkZCIsIkFkZE4iLCJBZGRWMiIsIkFkanVzdENvbnRyYXN0djIiLCJBZGp1c3RIdWUiLCJBZGp1c3RTYXR1cmF0aW9uIiwiQWxsIiwiQWxsVG9BbGwiLCJBbmdsZSIsIkFueSIsIkFwcHJveGltYXRlRXF1YWwiLCJBcmdNYXgiLCJBcmdNaW4iLCJBc2luIiwiQXNpbmgiLCJBc3NlcnQiLCJBc3NpZ25BZGRWYXJpYWJsZU9wIiwiQXNzaWduU3ViVmFyaWFibGVPcCIsIkFzc2lnblZhcmlhYmxlT3AiLCJBdGFuIiwiQXRhbjIiLCJBdGFuaCIsIkF2Z1Bvb2wiLCJBdmdQb29sM0QiLCJBdmdQb29sM0RHcmFkIiwiQXZnUG9vbEdyYWQiLCJCYXRjaE1hdE11bCIsIkJhdGNoTWF0TXVsVjIiLCJCYXRjaFRvU3BhY2UiLCJCYXRjaFRvU3BhY2VORCIsIkJlc3NlbEkwZSIsIkJlc3NlbEkxZSIsIkJldGFpbmMiLCJCaWFzQWRkIiwiQmlhc0FkZEdyYWQiLCJCaWFzQWRkVjEiLCJCaXRjYXN0IiwiQml0d2lzZUFuZCIsIkJpdHdpc2VPciIsIkJpdHdpc2VYb3IiLCJCcm9hZGNhc3RBcmdzIiwiQnJvYWRjYXN0R3JhZGllbnRBcmdzIiwiQnJvYWRjYXN0VG8iLCJCdWNrZXRpemUiLCJDYXNlIiwiQ2FzdCIsIkNlaWwiLCJDaGVja051bWVyaWNzIiwiQ2hvbGVza3kiLCJDbGlwQnlWYWx1ZSIsIkNvbGxlY3RpdmVQZXJtdXRlIiwiQ29sbGVjdGl2ZVJlZHVjZVYyIiwiQ29tcGxleCIsIkNvbXBsZXhBYnMiLCJDb25jYXQiLCJDb25jYXRPZmZzZXQiLCJDb25jYXRWMiIsIkNvbmoiLCJDb25qdWdhdGVUcmFuc3Bvc2UiLCJDb25zdCIsIkNvbnRyb2xUcmlnZ2VyIiwiQ29udjJEIiwiQ29udjJEQmFja3Byb3BGaWx0ZXIiLCJDb252MkRCYWNrcHJvcElucHV0IiwiQ29udjNEIiwiQ29udjNEQmFja3Byb3BGaWx0ZXJWMiIsIkNvbnYzREJhY2twcm9wSW5wdXRWMiIsIkNvcyIsIkNvc2giLCJDcm9zcyIsIkNyb3NzUmVwbGljYVN1bSIsIkN1bXByb2QiLCJDdW1zdW0iLCJEYXRhRm9ybWF0RGltTWFwIiwiRGF0YUZvcm1hdFZlY1Blcm11dGUiLCJEZXB0aFRvU3BhY2UiLCJEZXB0aHdpc2VDb252MmROYXRpdmUiLCJEZXB0aHdpc2VDb252MmROYXRpdmVCYWNrcHJvcEZpbHRlciIsIkRlcHRod2lzZUNvbnYyZE5hdGl2ZUJhY2twcm9wSW5wdXQiLCJEZXF1YW50aXplIiwiRGV2aWNlSW5kZXgiLCJEaWFnIiwiRGlhZ1BhcnQiLCJEaWdhbW1hIiwiRGl2IiwiRGl2Tm9OYW4iLCJEeW5hbWljU3RpdGNoIiwiRWluc3VtIiwiRWx1IiwiRWx1R3JhZCIsIkVtcHR5IiwiRW1wdHlUZW5zb3JMaXN0IiwiRW5zdXJlU2hhcGUiLCJFcXVhbCIsIkVyZiIsIkVyZmMiLCJFcmZpbnYiLCJFeHAiLCJFeHBhbmREaW1zIiwiRXhwbTEiLCJFeHRyYWN0SW1hZ2VQYXRjaGVzIiwiRkZUIiwiRkZUMkQiLCJGRlQzRCIsIkZha2VQYXJhbSIsIkZha2VRdWFudFdpdGhNaW5NYXhBcmdzIiwiRmFrZVF1YW50V2l0aE1pbk1heEFyZ3NHcmFkaWVudCIsIkZha2VRdWFudFdpdGhNaW5NYXhWYXJzIiwiRmFrZVF1YW50V2l0aE1pbk1heFZhcnNHcmFkaWVudCIsIkZpbGwiLCJGbG9vciIsIkZsb29yRGl2IiwiRmxvb3JNb2QiLCJGdXNlZEJhdGNoTm9ybSIsIkZ1c2VkQmF0Y2hOb3JtR3JhZCIsIkZ1c2VkQmF0Y2hOb3JtR3JhZFYyIiwiRnVzZWRCYXRjaE5vcm1HcmFkVjMiLCJGdXNlZEJhdGNoTm9ybVYyIiwiRnVzZWRCYXRjaE5vcm1WMyIsIkdhdGhlciIsIkdhdGhlck5kIiwiR2F0aGVyVjIiLCJHZXRJdGVtIiwiR3JlYXRlciIsIkdyZWF0ZXJFcXVhbCIsIkhTVlRvUkdCIiwiSUZGVCIsIklGRlQyRCIsIklGRlQzRCIsIklSRkZUIiwiSVJGRlQyRCIsIklSRkZUM0QiLCJJZGVudGl0eSIsIklkZW50aXR5TiIsIklmIiwiSWdhbW1hIiwiSWdhbW1hR3JhZEEiLCJJZ2FtbWFjIiwiSW1hZyIsIkluVG9wS1YyIiwiSW5mZWVkRGVxdWV1ZSIsIkluZmVlZERlcXVldWVUdXBsZSIsIklucGxhY2VBZGQiLCJJbnBsYWNlVXBkYXRlIiwiSW52IiwiSW52ZXJ0IiwiSW52ZXJ0UGVybXV0YXRpb24iLCJJc0Zpbml0ZSIsIklzSW5mIiwiSXNOYW4iLCJLdGhPcmRlclN0YXRpc3RpYyIsIkwyTG9zcyIsIkxSTiIsIkxSTkdyYWQiLCJMZWFreVJlbHUiLCJMZWFreVJlbHVHcmFkIiwiTGVmdFNoaWZ0IiwiTGVzcyIsIkxlc3NFcXVhbCIsIkxnYW1tYSIsIkxpblNwYWNlIiwiTGlzdERpZmYiLCJMb2ciLCJMb2cxcCIsIkxvZ1NvZnRtYXgiLCJMb2dpY2FsQW5kIiwiTG9naWNhbE5vdCIsIkxvZ2ljYWxPciIsIkxvd2VyQm91bmQiLCJNYWtlVW5pcXVlIiwiTWF0TXVsIiwiTWF0cml4QmFuZFBhcnQiLCJNYXRyaXhEaWFnIiwiTWF0cml4RGlhZ1BhcnQiLCJNYXRyaXhEaWFnUGFydFYyIiwiTWF0cml4RGlhZ1BhcnRWMyIsIk1hdHJpeERpYWdWMiIsIk1hdHJpeERpYWdWMyIsIk1hdHJpeEludmVyc2UiLCJNYXRyaXhTZXREaWFnIiwiTWF0cml4U2V0RGlhZ1YyIiwiTWF0cml4U2V0RGlhZ1YzIiwiTWF0cml4U29sdmUiLCJNYXRyaXhUcmlhbmd1bGFyU29sdmUiLCJNYXgiLCJNYXhQb29sIiwiTWF4UG9vbDNEIiwiTWF4UG9vbDNER3JhZCIsIk1heFBvb2wzREdyYWRHcmFkIiwiTWF4UG9vbEdyYWQiLCJNYXhQb29sR3JhZEdyYWQiLCJNYXhQb29sR3JhZEdyYWRWMiIsIk1heFBvb2xHcmFkVjIiLCJNYXhQb29sVjIiLCJNYXhpbXVtIiwiTWVhbiIsIk1pbiIsIk1pbmltdW0iLCJNaXJyb3JQYWQiLCJNaXJyb3JQYWRHcmFkIiwiTW9kIiwiTXVsIiwiTXVsTm9OYW4iLCJNdWx0aW5vbWlhbCIsIk5kdHJpIiwiTmVnIiwiTmV4dEFmdGVyIiwiTm9PcCIsIk5vbk1heFN1cHByZXNzaW9uVjQiLCJOb3RFcXVhbCIsIk9uZUhvdCIsIk9uZXNMaWtlIiwiT3V0ZmVlZEVucXVldWUiLCJPdXRmZWVkRW5xdWV1ZVR1cGxlIiwiUGFjayIsIlBhZCIsIlBhZFYyIiwiUGFyYWxsZWxEeW5hbWljU3RpdGNoIiwiUGFyYW1ldGVyaXplZFRydW5jYXRlZE5vcm1hbCIsIlBhcnRpdGlvbmVkQ2FsbCIsIlBsYWNlaG9sZGVyV2l0aERlZmF1bHQiLCJQb2x5Z2FtbWEiLCJQb3B1bGF0aW9uQ291bnQiLCJQb3ciLCJQcmV2ZW50R3JhZGllbnQiLCJQcm9kIiwiUXIiLCJRdWFudGl6ZUFuZERlcXVhbnRpemVWMiIsIlF1YW50aXplQW5kRGVxdWFudGl6ZVYzIiwiUkZGVCIsIlJGRlQyRCIsIlJGRlQzRCIsIlJHQlRvSFNWIiwiUmFuZG9tR2FtbWFHcmFkIiwiUmFuZG9tU2h1ZmZsZSIsIlJhbmRvbVN0YW5kYXJkTm9ybWFsIiwiUmFuZG9tVW5pZm9ybSIsIlJhbmRvbVVuaWZvcm1JbnQiLCJSYW5nZSIsIlJhbmsiLCJSZWFkVmFyaWFibGVPcCIsIlJlYWwiLCJSZWFsRGl2IiwiUmVjaXByb2NhbCIsIlJlY2lwcm9jYWxHcmFkIiwiUmVsdSIsIlJlbHU2IiwiUmVsdTZHcmFkIiwiUmVsdUdyYWQiLCJSZXNoYXBlIiwiUmVzaXplQmlsaW5lYXIiLCJSZXNpemVCaWxpbmVhckdyYWQiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3IiLCJSZXNpemVOZWFyZXN0TmVpZ2hib3JHcmFkIiwiUmVzb3VyY2VBcHBseUFkYU1heCIsIlJlc291cmNlQXBwbHlBZGFkZWx0YSIsIlJlc291cmNlQXBwbHlBZGFncmFkIiwiUmVzb3VyY2VBcHBseUFkYWdyYWREQSIsIlJlc291cmNlQXBwbHlBZGFncmFkVjIiLCJSZXNvdXJjZUFwcGx5QWRhbSIsIlJlc291cmNlQXBwbHlBZGRTaWduIiwiUmVzb3VyY2VBcHBseUNlbnRlcmVkUk1TUHJvcCIsIlJlc291cmNlQXBwbHlGdHJsIiwiUmVzb3VyY2VBcHBseUZ0cmxWMiIsIlJlc291cmNlQXBwbHlHcmFkaWVudERlc2NlbnQiLCJSZXNvdXJjZUFwcGx5S2VyYXNNb21lbnR1bSIsIlJlc291cmNlQXBwbHlNb21lbnR1bSIsIlJlc291cmNlQXBwbHlQb3dlclNpZ24iLCJSZXNvdXJjZUFwcGx5UHJveGltYWxBZGFncmFkIiwiUmVzb3VyY2VBcHBseVByb3hpbWFsR3JhZGllbnREZXNjZW50IiwiUmVzb3VyY2VBcHBseVJNU1Byb3AiLCJSZXNvdXJjZUdhdGhlciIsIlJlc291cmNlU2NhdHRlckFkZCIsIlJlc291cmNlU2NhdHRlckRpdiIsIlJlc291cmNlU2NhdHRlck1heCIsIlJlc291cmNlU2NhdHRlck1pbiIsIlJlc291cmNlU2NhdHRlck11bCIsIlJlc291cmNlU2NhdHRlck5kQWRkIiwiUmVzb3VyY2VTY2F0dGVyTmRTdWIiLCJSZXNvdXJjZVNjYXR0ZXJOZFVwZGF0ZSIsIlJlc291cmNlU2NhdHRlclN1YiIsIlJlc291cmNlU2NhdHRlclVwZGF0ZSIsIlJlc291cmNlU3RyaWRlZFNsaWNlQXNzaWduIiwiUmV2ZXJzZSIsIlJldmVyc2VTZXF1ZW5jZSIsIlJldmVyc2VWMiIsIlJpZ2h0U2hpZnQiLCJSaW50IiwiUm5nUmVhZEFuZFNraXAiLCJSbmdTa2lwIiwiUm9sbCIsIlJvdW5kIiwiUnNxcnQiLCJSc3FydEdyYWQiLCJTY2F0dGVyTmQiLCJTZWxlY3QiLCJTZWxlY3RWMiIsIlNlbGZBZGpvaW50RWlnVjIiLCJTZWx1IiwiU2VsdUdyYWQiLCJTaGFwZSIsIlNoYXBlTiIsIlNpZ21vaWQiLCJTaWdtb2lkR3JhZCIsIlNpZ24iLCJTaW4iLCJTaW5oIiwiU2l6ZSIsIlNsaWNlIiwiU25hcHNob3QiLCJTb2Z0bWF4IiwiU29mdG1heENyb3NzRW50cm9weVdpdGhMb2dpdHMiLCJTb2Z0cGx1cyIsIlNvZnRwbHVzR3JhZCIsIlNvZnRzaWduIiwiU29mdHNpZ25HcmFkIiwiU3BhY2VUb0JhdGNoIiwiU3BhY2VUb0JhdGNoTkQiLCJTcGFjZVRvRGVwdGgiLCJTcGFyc2VNYXRNdWwiLCJTcGFyc2VTb2Z0bWF4Q3Jvc3NFbnRyb3B5V2l0aExvZ2l0cyIsIlNwYXJzZVRvRGVuc2UiLCJTcGxpdCIsIlNwbGl0ViIsIlNxcnQiLCJTcXJ0R3JhZCIsIlNxdWFyZSIsIlNxdWFyZWREaWZmZXJlbmNlIiwiU3F1ZWV6ZSIsIlN0YWNrQ2xvc2VWMiIsIlN0YWNrUG9wVjIiLCJTdGFja1B1c2hWMiIsIlN0YWNrVjIiLCJTdGF0ZWZ1bFBhcnRpdGlvbmVkQ2FsbCIsIlN0YXRlZnVsU3RhbmRhcmROb3JtYWxWMiIsIlN0YXRlZnVsVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVmdWxVbmlmb3JtIiwiU3RhdGVmdWxVbmlmb3JtRnVsbEludCIsIlN0YXRlZnVsVW5pZm9ybUludCIsIlN0YXRlbGVzc0Nhc2UiLCJTdGF0ZWxlc3NJZiIsIlN0YXRlbGVzc011bHRpbm9taWFsIiwiU3RhdGVsZXNzUmFuZG9tR2V0QWxnIiwiU3RhdGVsZXNzUmFuZG9tR2V0S2V5Q291bnRlciIsIlN0YXRlbGVzc1JhbmRvbUdldEtleUNvdW50ZXJBbGciLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWwiLCJTdGF0ZWxlc3NSYW5kb21Ob3JtYWxWMiIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm0iLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtRnVsbEludCIsIlN0YXRlbGVzc1JhbmRvbVVuaWZvcm1GdWxsSW50VjIiLCJTdGF0ZWxlc3NSYW5kb21Vbmlmb3JtSW50IiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybUludFYyIiwiU3RhdGVsZXNzUmFuZG9tVW5pZm9ybVYyIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsIiwiU3RhdGVsZXNzVHJ1bmNhdGVkTm9ybWFsVjIiLCJTdGF0ZWxlc3NXaGlsZSIsIlN0b3BHcmFkaWVudCIsIlN0cmlkZWRTbGljZSIsIlN0cmlkZWRTbGljZUdyYWQiLCJTdWIiLCJTdW0iLCJTdmQiLCJTeW1ib2xpY0dyYWRpZW50IiwiVFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJUYW4iLCJUYW5oIiwiVGFuaEdyYWQiLCJUZW5zb3JBcnJheUNsb3NlVjMiLCJUZW5zb3JBcnJheUNvbmNhdFYzIiwiVGVuc29yQXJyYXlHYXRoZXJWMyIsIlRlbnNvckFycmF5R3JhZFYzIiwiVGVuc29yQXJyYXlSZWFkVjMiLCJUZW5zb3JBcnJheVNjYXR0ZXJWMyIsIlRlbnNvckFycmF5U2l6ZVYzIiwiVGVuc29yQXJyYXlTcGxpdFYzIiwiVGVuc29yQXJyYXlWMyIsIlRlbnNvckFycmF5V3JpdGVWMyIsIlRlbnNvckxpc3RDb25jYXRWMiIsIlRlbnNvckxpc3RFbGVtZW50U2hhcGUiLCJUZW5zb3JMaXN0RnJvbVRlbnNvciIsIlRlbnNvckxpc3RHYXRoZXIiLCJUZW5zb3JMaXN0R2V0SXRlbSIsIlRlbnNvckxpc3RMZW5ndGgiLCJUZW5zb3JMaXN0UG9wQmFjayIsIlRlbnNvckxpc3RQdXNoQmFjayIsIlRlbnNvckxpc3RSZXNlcnZlIiwiVGVuc29yTGlzdFNldEl0ZW0iLCJUZW5zb3JMaXN0U3BsaXQiLCJUZW5zb3JMaXN0U3RhY2siLCJUZW5zb3JTY2F0dGVyQWRkIiwiVGVuc29yU2NhdHRlck1heCIsIlRlbnNvclNjYXR0ZXJNaW4iLCJUZW5zb3JTY2F0dGVyU3ViIiwiVGVuc29yU2NhdHRlclVwZGF0ZSIsIlRlbnNvclN0cmlkZWRTbGljZVVwZGF0ZSIsIlRpbGUiLCJUb3BLVW5pcXVlIiwiVG9wS1YyIiwiVG9wS1dpdGhVbmlxdWUiLCJUcmFuc3Bvc2UiLCJUcmlkaWFnb25hbFNvbHZlIiwiVHJ1bmNhdGVEaXYiLCJUcnVuY2F0ZU1vZCIsIlRydW5jYXRlZE5vcm1hbCIsIlVuaXF1ZSIsIlVucGFjayIsIlVuc29ydGVkU2VnbWVudE1heCIsIlVuc29ydGVkU2VnbWVudE1pbiIsIlVuc29ydGVkU2VnbWVudFByb2QiLCJVbnNvcnRlZFNlZ21lbnRTdW0iLCJVcHBlckJvdW5kIiwiVmFySXNJbml0aWFsaXplZE9wIiwiVmFyaWFibGVTaGFwZSIsIldoZXJlIiwiV2hpbGUiLCJYZGl2eSIsIlhsYUJyb2FkY2FzdEhlbHBlciIsIlhsYUNvbnYiLCJYbGFDb252VjIiLCJYbGFEZXF1YW50aXplIiwiWGxhRG90IiwiWGxhRG90VjIiLCJYbGFEeW5hbWljU2xpY2UiLCJYbGFEeW5hbWljVXBkYXRlU2xpY2UiLCJYbGFFaW5zdW0iLCJYbGFHYXRoZXIiLCJYbGFIb3N0Q29tcHV0ZSIsIlhsYUlmIiwiWGxhS2V5VmFsdWVTb3J0IiwiWGxhUGFkIiwiWGxhUmVjdiIsIlhsYVJlY3ZGcm9tSG9zdCIsIlhsYVJlZHVjZSIsIlhsYVJlZHVjZVdpbmRvdyIsIlhsYVJlcGxpY2FJZCIsIlhsYVNjYXR0ZXIiLCJYbGFTZWxlY3RBbmRTY2F0dGVyIiwiWGxhU2VsZkFkam9pbnRFaWciLCJYbGFTZW5kIiwiWGxhU2VuZFRvSG9zdCIsIlhsYVNldEJvdW5kIiwiWGxhU2V0RHluYW1pY0RpbWVuc2lvblNpemUiLCJYbGFTaGFyZGluZyIsIlhsYVNvcnQiLCJYbGFTcG1kRnVsbFRvU2hhcmRTaGFwZSIsIlhsYVNwbWRTaGFyZFRvRnVsbFNoYXBlIiwiWGxhU3ZkIiwiWGxhVmFyaWFkaWNSZWR1Y2UiLCJYbGFWYXJpYWRpY1NvcnQiLCJYbGFXaGlsZSIsIlhsb2cxcHkiLCJYbG9neSIsIlplcm9zTGlrZSIsIlpldGEiLCJFbnRlciIsIkV4aXQiLCJMb29wQ29uZCIsIk1lcmdlIiwiTmV4dEl0ZXJhdGlvbiIsIlN3aXRjaCIsIl9BcmciLCJfQXJyYXlUb0xpc3QiLCJfRnVzZWRCYXRjaE5vcm1FeCIsIl9MaXN0VG9BcnJheSIsIl9QYXJhbGxlbENvbmNhdFVwZGF0ZSIsIl9SZWN2VFBVRW1iZWRkaW5nQWN0aXZhdGlvbnMiLCJfUmVjdlRQVUVtYmVkZGluZ0RlZHVwbGljYXRpb25EYXRhIiwiX1JldHZhbCIsIl9TZW5kVFBVRW1iZWRkaW5nR3JhZGllbnRzIiwiX1RQVUNvbXBpbGUiLCJfVFBVRXhlY3V0ZSIsIl9VbmFyeU9wc0NvbXBvc2l0aW9uIiwiVFBVQ29tcGlsYXRpb25SZXN1bHQiLCJUUFVSZXBsaWNhdGVkSW5wdXQiLCJUUFVSZXBsaWNhdGVkT3V0cHV0IiwiVFBVUmVwbGljYXRlTWV0YWRhdGEiLCJNZXJnZVYyQ2hlY2twb2ludHMiLCJSZXN0b3JlVjIiLCJTYXZlVjIiLCJBYm9ydCIsIkFzc2VydCIsIkFzc2lnbiIsIlBsYWNlaG9sZGVyIiwiUGxhY2Vob2xkZXJWMiIsIlNoYXJkZWRGaWxlbmFtZSIsIlN0cmluZ0pvaW4iLCJWYXJpYWJsZSIsIlZhcmlhYmxlVjIiLCJWYXJIYW5kbGVPcCIsIkF1ZGlvU3VtbWFyeSIsIkF1ZGlvU3VtbWFyeVYyIiwiRGVidWdOdW1lcmljU3VtbWFyeSIsIkhpc3RvZ3JhbVN1bW1hcnkiLCJJbWFnZVN1bW1hcnkiLCJNZXJnZVN1bW1hcnkiLCJTY2FsYXJTdW1tYXJ5IiwiU3RhdHNBZ2dyZWdhdG9yU3VtbWFyeSJdO2Z1bmN0aW9uIFlsZShlLHQpe2lmKHQ9PT1udWxsKXRocm93IG5ldyBFcnJvcigiQ29tcGF0aWJpbGl0eSBwcm92aWRlciByZXF1aXJlZCwgYnV0IGdvdDogIit0KTtjMy5lYWNoKGUubm9kZXMscj0+e3IuY29tcGF0aWJsZT10Lm9wVmFsaWQociksYzMuZWFjaChyLmluRW1iZWRkaW5ncyxuPT57bi5jb21wYXRpYmxlPXQub3BWYWxpZChuKX0pLGMzLmVhY2goci5vdXRFbWJlZGRpbmdzLG49PntuLmNvbXBhdGlibGU9dC5vcFZhbGlkKG4pfSl9KX12YXIgbVA9RWUoT2UoKSwxKTt2YXIgamxlPUVlKE9lKCksMSk7dmFyIElsPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9yYXdSZWdleElucHV0PSIiLHRoaXMuX3ByZXZpb3VzUmVnZXhJbnB1dD0iIix0aGlzLl9zZWFyY2hUaW1lb3V0RGVsYXk9MTUwLHRoaXMuX21heFJlZ2V4UmVzdWx0cz00Mn1nZXQgX3JlZ2V4SW5wdXQoKXt2YXIgdD10aGlzLnJlbmRlckhpZXJhcmNoeSxyPXRoaXMuX3Jhd1JlZ2V4SW5wdXQ7cmV0dXJuIHIudHJpbSgpfV9yZWdleElucHV0Q2hhbmdlZCgpe3ZhciB0PXRoaXMuX3JlZ2V4SW5wdXQ7dGhpcy5fcmVxdWVzdFNlYXJjaCgpfV9jbGVhclNlYXJjaFJlc3VsdHMoKXt0aGlzLnNldCgiX3JlZ2V4TWF0Y2hlcyIsW10pfV9yZXF1ZXN0U2VhcmNoKCl7aWYoIXRoaXMuX3NlYXJjaFBlbmRpbmcpe2lmKHRoaXMuX3JlZ2V4SW5wdXQ9PT10aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQpe3RoaXMuX3NlYXJjaFBlbmRpbmc9ITE7cmV0dXJufXRoaXMuX3NlYXJjaFBlbmRpbmc9ITAsdGhpcy5fZXhlY3V0ZVNlYXJjaCgpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLl9zZWFyY2hQZW5kaW5nPSExLHRoaXMuX3JlcXVlc3RTZWFyY2goKX0sdGhpcy5fc2VhcmNoVGltZW91dERlbGF5KX19X2V4ZWN1dGVTZWFyY2goKXtpZih0aGlzLl9wcmV2aW91c1JlZ2V4SW5wdXQ9dGhpcy5fcmVnZXhJbnB1dCwhdGhpcy5fcmVnZXhJbnB1dCl7dGhpcy5fY2xlYXJTZWFyY2hSZXN1bHRzKCk7cmV0dXJufXRyeXt2YXIgdD1uZXcgUmVnRXhwKHRoaXMuX3JlZ2V4SW5wdXQpfWNhdGNoKGkpe3RoaXMuX2NsZWFyU2VhcmNoUmVzdWx0cygpO3JldHVybn1sZXQgcj1bXSxuPXRoaXMucmVuZGVySGllcmFyY2h5LmhpZXJhcmNoeS5nZXROb2RlTWFwKCk7amxlLmVhY2gobiwoaSxvKT0+e2lmKHIubGVuZ3RoPj10aGlzLl9tYXhSZWdleFJlc3VsdHMpcmV0dXJuITE7IXQudGVzdChvKXx8ci5wdXNoKG8pfSksdGhpcy5zZXQoIl9yZWdleE1hdGNoZXMiLHIpfV9tYXRjaENsaWNrZWQodCl7bGV0IHI9dC5tb2RlbC5pdGVtO3RoaXMuc2V0KCJzZWxlY3RlZE5vZGUiLHIpLFBvKHthY3Rpb25JZDpqci5OT0RFX1NFQVJDSF9SRVNVTFRfRk9DVVNFRH0pfX07SWwudGVtcGxhdGU9UWAKICAgIDxkaXYgaWQ9InNlYXJjaC1jb250YWluZXIiPgogICAgICA8cGFwZXItaW5wdXQKICAgICAgICBpZD0icnVucy1yZWdleCIKICAgICAgICBsYWJlbD0iU2VhcmNoIG5vZGVzIChyZWdleCkiCiAgICAgICAgdmFsdWU9Int7X3Jhd1JlZ2V4SW5wdXR9fSIKICAgICAgPgogICAgICA8L3BhcGVyLWlucHV0PgogICAgICA8ZGl2IGlkPSJzZWFyY2gtcmVzdWx0cy1hbmNob3IiPgogICAgICAgIDxkaXYgaWQ9InNlYXJjaC1yZXN1bHRzIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3JlZ2V4TWF0Y2hlc11dIj4KICAgICAgICAgICAgPGRpdiBpZD0ic2VhcmNoLW1hdGNoIiBvbi1jbGljaz0iX21hdGNoQ2xpY2tlZCI+W1tpdGVtXV08L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgICNzZWFyY2gtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgfQoKICAgICAgI3J1bnMtcmVnZXggewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAjc2VhcmNoLXJlc3VsdHMtYW5jaG9yIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtcmVzdWx0cyB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAjc2VhcmNoLW1hdGNoIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgICBwYWRkaW5nOiAzcHg7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgZGlyZWN0aW9uOiBydGw7CiAgICAgIH0KCiAgICAgICNzZWFyY2gtbWF0Y2g6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLW9yYW5nZS13ZWFrKTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbC5wcm90b3R5cGUsInJlbmRlckhpZXJhcmNoeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJzZWxlY3RlZE5vZGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSWwucHJvdG90eXBlLCJfcmF3UmVnZXhJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbC5wcm90b3R5cGUsIl9wcmV2aW91c1JlZ2V4SW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoVGltZW91dERlbGF5Iix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSWwucHJvdG90eXBlLCJfc2VhcmNoUGVuZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbC5wcm90b3R5cGUsIl9tYXhSZWdleFJlc3VsdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLElsLnByb3RvdHlwZSwiX3JlZ2V4TWF0Y2hlcyIsdm9pZCAwKTtFKFtSdCgicmVuZGVySGllcmFyY2h5IiwiX3Jhd1JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbC5wcm90b3R5cGUsIl9yZWdleElucHV0IixudWxsKTtFKFtCdCgiX3JlZ2V4SW5wdXQiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLElsLnByb3RvdHlwZSwiX3JlZ2V4SW5wdXRDaGFuZ2VkIixudWxsKTtJbD1FKFt5dCgidGYtZ3JhcGgtbm9kZS1zZWFyY2giKV0sSWwpO3ZhciBjY3Q9L2RldmljZTooW146XSs6WzAtOV0rKSQvLGxjdD1be3JlZ2V4OmNjdH1dLFhsZT1bXSxvdXI9bmV3IFNldChbR24uQ09NUFVURV9USU1FLEduLk1FTU9SWV0pLEluPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5Db2xvckJ5PUduLHRoaXMuc3RhdHM9bnVsbCx0aGlzLmRldmljZXNGb3JTdGF0cz1udWxsLHRoaXMuY29sb3JCeT1Hbi5TVFJVQ1RVUkUsdGhpcy5kYXRhc2V0cz1bXSx0aGlzLl9zZWxlY3RlZFJ1bkluZGV4PTAsdGhpcy50cmFjZUlucHV0cz0hMSx0aGlzLmF1dG9FeHRyYWN0Tm9kZXM9ITAsdGhpcy5fc2VsZWN0ZWRUYWdJbmRleD0wLHRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlPUZzLk9QX0dSQVBILHRoaXMuc2hvd1Nlc3Npb25SdW5zRHJvcGRvd249ITAsdGhpcy5zaG93VXBsb2FkQnV0dG9uPSEwLHRoaXMuX2xlZ2VuZE9wZW5lZD0hMCx0aGlzLl9kb3dubG9hZEZpbGVuYW1lPSJncmFwaC5wbmcifV9vbkdyYXBoVHlwZUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLkdSQVBIX1RZUEVfQ0hBTkdFRCxldmVudExhYmVsOnRoaXMuX3NlbGVjdGVkR3JhcGhUeXBlfSl9X29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlKCl7UG8oe2FjdGlvbklkOmpyLk5PREVfQ09MT1JfTU9ERV9DSEFOR0VELGV2ZW50TGFiZWw6dGhpcy5jb2xvckJ5fSl9X29uVHJhY2VJbnB1dHNDaGFuZ2VkQnlVc2VyR2VzdHVyZSgpe1BvKHthY3Rpb25JZDpqci5UUkFDRV9JTlBVVF9NT0RFX1RPR0dMRUR9KX1feGxhQ2x1c3RlcnNQcm92aWRlZCh0KXtyZXR1cm4gdCYmdC5oaWVyYXJjaHkmJnQuaGllcmFyY2h5LnhsYUNsdXN0ZXJzLmxlbmd0aD4wfV9zdGF0c0NoYW5nZWQodCl7aWYodCE9bnVsbCl7dmFyIHI9e30sbj1tUC5lYWNoKHQuZGV2X3N0YXRzLGZ1bmN0aW9uKGkpe3ZhciBvPW1QLnNvbWUobGN0LGZ1bmN0aW9uKHMpe3JldHVybiBzLnJlZ2V4LnRlc3QoaS5kZXZpY2UpfSksYT1tUC5zb21lKFhsZSxmdW5jdGlvbihzKXtyZXR1cm4gcy5yZWdleC50ZXN0KGkuZGV2aWNlKX0pO28mJiFhJiYocltpLmRldmljZV09ITApfSk7dGhpcy5zZXQoImRldmljZXNGb3JTdGF0cyIscil9fWdldCBfY3VycmVudERldmljZXMoKXt2YXIgdD10aGlzLmRldmljZXNGb3JTdGF0cztsZXQgcj10aGlzLnN0YXRzLG89KHI/ci5kZXZfc3RhdHM6W10pLm1hcChzPT5zLmRldmljZSkuZmlsdGVyKHM9PmxjdC5zb21lKGw9PmwucmVnZXgudGVzdChzKSkpLGE9Rmx0KG8pO2lmKGEubGVuZ3RoPT0xKXtsZXQgcz1hWzBdLm1hdGNoKGNjdCk7cyYmKGFbMF09c1sxXSl9cmV0dXJuIG8ubWFwKChzLGwpPT57bGV0IGM9bnVsbDtyZXR1cm4gWGxlLmZvckVhY2godT0+e3UucmVnZXgudGVzdChzKSYmKGM9dS5tc2cpfSkse2RldmljZTpzLHN1ZmZpeDphW2xdLHVzZWQ6dD09bnVsbD92b2lkIDA6dFtzXSxpZ25vcmVkTXNnOmN9fSl9X2RldmljZUNoZWNrYm94Q2xpY2tlZCh0KXtsZXQgcj10LnRhcmdldCxuPU9iamVjdC5hc3NpZ24oe30sdGhpcy5kZXZpY2VzRm9yU3RhdHMpLGk9ci52YWx1ZTtyLmNoZWNrZWQ/bltpXT0hMDpkZWxldGUgbltpXSx0aGlzLnNldCgiZGV2aWNlc0ZvclN0YXRzIixuKX1fbnVtVGFncyh0LHIpe3JldHVybiB0aGlzLl9nZXRUYWdzKHQscikubGVuZ3RofV9nZXRUYWdzKHQscil7cmV0dXJuIXR8fCF0W3JdP1tdOnRbcl0udGFnc31fZml0KCl7dGhpcy5maXJlKCJmaXQtdGFwIil9X2lzR3JhZGllbnRDb2xvcmluZyh0LHIpe3JldHVybiBvdXIuaGFzKHIpJiZ0IT1udWxsfV9lcXVhbHModCxyKXtyZXR1cm4gdD09PXJ9Z2V0IF9jdXJyZW50RGV2aWNlUGFyYW1zKCl7dmFyIHQ9dGhpcy5jb2xvckJ5UGFyYW1zO2xldCByPXQuZGV2aWNlLmZpbHRlcihvPT5sY3Quc29tZShhPT5hLnJlZ2V4LnRlc3Qoby5kZXZpY2UpKSksbj1GbHQoci5tYXAobz0+by5kZXZpY2UpKTtpZihuLmxlbmd0aD09MSl7dmFyIGk9blswXS5tYXRjaChjY3QpO2kmJihuWzBdPWlbMV0pfXJldHVybiByLm1hcCgobyxhKT0+KHtkZXZpY2U6blthXSxjb2xvcjpvLmNvbG9yfSkpfWdldCBfY3VycmVudFhsYUNsdXN0ZXJQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXM7cmV0dXJuIHQueGxhX2NsdXN0ZXJ9Z2V0IF9jdXJyZW50R3JhZGllbnRQYXJhbXMoKXt2YXIgdD10aGlzLmNvbG9yQnlQYXJhbXMscj10aGlzLmNvbG9yQnk7aWYoIXRoaXMuX2lzR3JhZGllbnRDb2xvcmluZyh0aGlzLnN0YXRzLHIpKXJldHVybiBudWxsO2xldCBuPXRbcl0saT1uLm1pblZhbHVlLG89bi5tYXhWYWx1ZTtyZXR1cm4gcj09PUduLk1FTU9SWT8oaT1OZChpLG5QKSxvPU5kKG8sblApKTpyPT09R24uQ09NUFVURV9USU1FJiYoaT1OZChpLGlQKSxvPU5kKG8saVApKSx7bWluVmFsdWU6aSxtYXhWYWx1ZTpvLHN0YXJ0Q29sb3I6bi5zdGFydENvbG9yLGVuZENvbG9yOm4uZW5kQ29sb3J9fWRvd25sb2FkKCl7dGhpcy5maXJlKCJkb3dubG9hZC1pbWFnZS1yZXF1ZXN0ZWQiLHRoaXMuX2Rvd25sb2FkRmlsZW5hbWUpfV91cGRhdGVGaWxlSW5wdXQodCl7dmFyIGE7bGV0IHI9KGE9dC50YXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDphWzBdO2lmKCFyKXJldHVybjtsZXQgbj1yLm5hbWUsaT1uLmxhc3RJbmRleE9mKCIuIik7aT49MCYmKG49bi5zdWJzdHJpbmcoMCxpKSk7bGV0IG89bi5sYXN0SW5kZXhPZigiLyIpO28+PTAmJihuPW4uc3Vic3RyaW5nKG8rMSkpLHRoaXMuX3NldERvd25sb2FkRmlsZW5hbWUobiksdGhpcy5zZXQoInNlbGVjdGVkRmlsZSIsdCksUG8oe2FjdGlvbklkOmpyLlVQTE9BREVEX0dSQVBIX0ZST01fRklMRVNZU1RFTX0pfV9kYXRhc2V0c0NoYW5nZWQodCxyKXt2YXIgbjtyIT1udWxsJiYodGhpcy5fc2VsZWN0ZWRSdW5JbmRleD0wKSx0aGlzLl9zZXREb3dubG9hZEZpbGVuYW1lKChuPXRoaXMuZGF0YXNldHNbdGhpcy5fc2VsZWN0ZWRSdW5JbmRleF0pPT1udWxsP3ZvaWQgMDpuLm5hbWUpfV9jb21wdXRlU2VsZWN0aW9uKHQscixuLGkpe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dP251bGw6e3J1bjp0W3JdLm5hbWUsdGFnOnRbcl0udGFnc1tuXS50YWcsdHlwZTppfX1fc2VsZWN0ZWRSdW5JbmRleENoYW5nZWQodCl7dmFyIHI7IXRoaXMuZGF0YXNldHN8fCh0aGlzLmNvbG9yQnk9R24uU1RSVUNUVVJFLHRoaXMuX3NlbGVjdGVkVGFnSW5kZXg9MCx0aGlzLl9zZWxlY3RlZEdyYXBoVHlwZT10aGlzLl9nZXREZWZhdWx0U2VsZWN0aW9uVHlwZSgpLHRoaXMudHJhY2VJbnB1dHM9ITEsdGhpcy5fc2V0RG93bmxvYWRGaWxlbmFtZSgocj10aGlzLmRhdGFzZXRzW3RdKT09bnVsbD92b2lkIDA6ci5uYW1lKSl9X3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkKCl7dGhpcy5fc2VsZWN0ZWRHcmFwaFR5cGU9dGhpcy5fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKX1fZ2V0RGVmYXVsdFNlbGVjdGlvblR5cGUoKXtsZXR7ZGF0YXNldHM6dCxfc2VsZWN0ZWRSdW5JbmRleDpyLF9zZWxlY3RlZFRhZ0luZGV4Om59PXRoaXM7aWYoIXR8fCF0W3JdfHwhdFtyXS50YWdzW25dfHx0W3JdLnRhZ3Nbbl0ub3BHcmFwaClyZXR1cm4gRnMuT1BfR1JBUEg7bGV0IGk9dFtyXTtyZXR1cm4gaS50YWdzW25dLnByb2ZpbGU/RnMuUFJPRklMRTppLnRhZ3Nbbl0uY29uY2VwdHVhbEdyYXBoP0ZzLkNPTkNFUFRVQUxfR1JBUEg6RnMuT1BfR1JBUEh9X2dldEZpbGUoKXt0aGlzLiQkKCIjZmlsZSIpLmNsaWNrKCl9X3NldERvd25sb2FkRmlsZW5hbWUodCl7dGhpcy5fZG93bmxvYWRGaWxlbmFtZT0odHx8ImdyYXBoIikrIi5wbmcifV9zdGF0c05vdE51bGwodCl7cmV0dXJuIHQhPT1udWxsfV90b2dnbGVMZWdlbmRPcGVuKCl7dGhpcy5zZXQoIl9sZWdlbmRPcGVuZWQiLCF0aGlzLl9sZWdlbmRPcGVuZWQpfV9nZXRUb2dnbGVMZWdlbmRJY29uKHQpe3JldHVybiB0PyJleHBhbmQtbW9yZSI6ImV4cGFuZC1sZXNzIn1fZ2V0U2VsZWN0aW9uT3BHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5vcEdyYXBofV9nZXRTZWxlY3Rpb25Qcm9maWxlRGlzYWJsZWQodCxyLG4pe3JldHVybiF0W3JdfHwhdFtyXS50YWdzW25dfHwhdFtyXS50YWdzW25dLnByb2ZpbGV9X2dldFNlbGVjdGlvbkNvbmNlcHR1YWxHcmFwaERpc2FibGVkKHQscixuKXtyZXR1cm4hdFtyXXx8IXRbcl0udGFnc1tuXXx8IXRbcl0udGFnc1tuXS5jb25jZXB0dWFsR3JhcGh9fTtJbi50ZW1wbGF0ZT1RYAogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICM1NTU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRpdGxlLWNvbG9yOiAjMDAwOwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtbGVnZW5kLXRleHQtY29sb3I6ICMwMDA7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy10ZXh0LWNvbG9yOiAjNTU1OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplOiAxNHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLXNoYXJlZC1pbnB1dC1zdHlsZV8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgICAtLXBhcGVyLWZvbnQtc3ViaGVhZF8tX2ZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3I6ICNmZmY7CiAgICAgICAgLS10Yi1ncmFwaC1jb250cm9scy1sZWdlbmQtdGV4dC1jb2xvcjogI2YzZjNmMzsKICAgICAgICAtLXRiLWdyYXBoLWNvbnRyb2xzLXRleHQtY29sb3I6ICNlZWU7CiAgICAgIH0KCiAgICAgIHBhcGVyLWRyb3Bkb3duLW1lbnUgewogICAgICAgIC0tcGFwZXItZHJvcGRvd24tbWVudS1pbnB1dDogewogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIGNvbG9yOiBncmF5OwogICAgICAgIH0KICAgICAgICAtLWlyb24taWNvbi13aWR0aDogMTVweDsKICAgICAgICAtLWlyb24taWNvbi1oZWlnaHQ6IDE1cHg7CiAgICAgICAgLS1wcmltYXJ5LXRleHQtY29sb3I6IGdyYXk7CiAgICAgICAgLS1wYXBlci1pdGVtLW1pbi1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIHBhcGVyLWJ1dHRvbltyYWlzZWRdLmtleWJvYXJkLWZvY3VzIHsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAucnVuLWRyb3Bkb3duIHsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lcjogewogICAgICAgICAgcGFkZGluZzogNXB4IDAgNXB4IDVweDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIGJvcmRlci1zcGFjaW5nOiAwOwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICB9CgogICAgICB0YWJsZSB0ZCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyB7CiAgICAgICAgcGFkZGluZzogMCAyMHB4IDIwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtaG9sZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zZWNvbmRhcnktYmFja2dyb3VuZC1jb2xvcik7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciB7CiAgICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLWxlZ2VuZC10ZXh0LWNvbG9yKTsKICAgICAgICBmb250OiBpbmhlcml0OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5sZWdlbmQtdG9vbGJhciwKICAgICAgLmxlZ2VuZC1jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiA4cHggMjBweDsKICAgICAgfQoKICAgICAgLnRvZ2dsZS1sZWdlbmQtYnV0dG9uIHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMHB4OwogICAgICAgIG1heC13aWR0aDogMjBweDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAudG9nZ2xlLWxlZ2VuZC10ZXh0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRiLWdyYXBoLWNvbnRyb2xzLXN1YnRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgIH0KCiAgICAgIHBhcGVyLXJhZGlvLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CiAgICAgIHN2Zy5pY29uLAogICAgICB0Zi1ncmFwaC1pY29uIHsKICAgICAgICB3aWR0aDogNjBweDsKICAgICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblZhbHVlcyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogMTY1cHg7CiAgICAgIH0KICAgICAgLmRvbWFpblN0YXJ0IHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgfQogICAgICAuZG9tYWluRW5kIHsKICAgICAgICBmbG9hdDogcmlnaHQ7CiAgICAgIH0KICAgICAgLmNvbG9yQm94IHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgfQoKICAgICAgLmltYWdlLWljb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgfQoKICAgICAgLmhlbHAtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICAuZ3JheSB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy10aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogOHB4IDVweCA4cHggMDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGl0bGUtY29sb3IpOwogICAgICB9CiAgICAgIC50aXRsZSBzbWFsbCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgICAgfQogICAgICAuZGV2aWNlTGlzdCwKICAgICAgLnhsYUNsdXN0ZXJMaXN0IHsKICAgICAgICBtYXgtaGVpZ2h0OiAyMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAjZmlsZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgIH0KCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGNsZWFyOiBib3RoOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIG1hcmdpbi10b3A6IDVweDsKICAgICAgfQoKICAgICAgLmNvbG9yLWxlZ2VuZC1yb3cgLmxhYmVsLAogICAgICAuY29sb3ItbGVnZW5kLXJvdyBzdmcsCiAgICAgIC5jb2xvci1sZWdlbmQtcm93IHRmLWdyYXBoLWljb24gewogICAgICAgIGZsZXg6IDAgMCA0MHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgICAgfQoKICAgICAgLmRldmljZXMtY2hlY2tib3ggaW5wdXQgewogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wtaG9sZGVyIC5pY29uLWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS10Yi1ncmFwaC1jb250cm9scy1zdWJ0aXRsZS1mb250LXNpemUpOwogICAgICAgIG1hcmdpbjogMCAtNXB4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBjb2xvcjogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtdGV4dC1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5idXR0b24tdGV4dCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgICB9CgogICAgICAudXBsb2FkLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDE2NXB4OwogICAgICAgIGhlaWdodDogMjVweDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24taWNvbiB7CiAgICAgICAgd2lkdGg6IDI2cHg7CiAgICAgICAgaGVpZ2h0OiAyNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1wYXBlci1vcmFuZ2UtNTAwKTsKICAgICAgfQoKICAgICAgLmhpZGRlbi1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLmFsbGNvbnRyb2xzIC5jb250cm9sLWhvbGRlciB7CiAgICAgICAgY2xlYXI6IGJvdGg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIuY29udHJvbC1vcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDAgMTVweCAxNXB4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAuY29udHJvbC1ob2xkZXIgcGFwZXItdG9nZ2xlLWJ1dHRvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICBzcGFuLmNvdW50ZXIgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGItZ3JhcGgtY29udHJvbHMtc3VidGl0bGUtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogZ3JheTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICB9CgogICAgICAucnVucy1yb3cgLnRpdGxlLAogICAgICAudGFncy1yb3cgLnRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLnJ1bnMtcm93IHBhcGVyLWl0ZW0sCiAgICAgIC50YWdzLXJvdyBwYXBlci1pdGVtIHsKICAgICAgICAtLXBhcGVyLWl0ZW06IHsKICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgfQogICAgICB9CgogICAgICB0YWJsZS5jb250cm9sLWhvbGRlciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRhYmxlLnRmLWdyYXBoLWNvbnRyb2xzIHRkLmlucHV0LWVsZW1lbnQtdGFibGUtZGF0YSB7CiAgICAgICAgcGFkZGluZzogMCAwIDAgMjBweDsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CgogICAgICAuY29sb3ItdGV4dCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbG9yLXRleHQuZ3JhZGllbnQtY29udGFpbmVyIHsKICAgICAgICBtYXJnaW46IDAgNXB4OwogICAgICB9CgogICAgICAvKiogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyB0aGF0IHN1cHByZXNzIHBvaW50ZXIgZXZlbnRzIGZvciBkaXNhYmxlZCBidXR0b25zLiBPdGhlcndpc2UsIHRoZSAqLwogICAgICAvKiAgdG9vbHRpcHMgZG8gbm90IGFwcGVhci4gKi8KICAgICAgcGFwZXItcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAubGVnZW5kLWNsYXJpZmllciB7CiAgICAgICAgY29sb3I6ICMyNjYyMzY7CiAgICAgICAgY3Vyc29yOiBoZWxwOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmxlZ2VuZC1jbGFyaWZpZXIgcGFwZXItdG9vbHRpcCB7CiAgICAgICAgd2lkdGg6IDE1MHB4OwogICAgICB9CgogICAgICAvKiogT3RoZXJ3aXNlLCBwb2x5bWVyIFVJIGNvbnRyb2xzIGFwcGVhciBhdG9wIG5vZGUgc2VhcmNoLiAqLwogICAgICB0Zi1ncmFwaC1ub2RlLXNlYXJjaCB7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9ImFsbGNvbnRyb2xzIj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDx0Zi1ncmFwaC1ub2RlLXNlYXJjaAogICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tzZWxlY3RlZE5vZGV9fSIKICAgICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbcmVuZGVySGllcmFyY2h5XV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtbm9kZS1zZWFyY2g+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciI+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiBjbGFzcz0iaWNvbi1idXR0b24iIG9uLXRhcD0iX2ZpdCIgYWx0PSJGaXQgdG8gc2NyZWVuIj4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iYXNwZWN0LXJhdGlvIiBjbGFzcz0iYnV0dG9uLWljb24iPjwvaXJvbi1pY29uPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImJ1dHRvbi10ZXh0Ij5GaXQgdG8gc2NyZWVuPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgIGNsYXNzPSJpY29uLWJ1dHRvbiIKICAgICAgICAgIG9uLWNsaWNrPSJkb3dubG9hZCIKICAgICAgICAgIGFsdD0iRG93bmxvYWQgUE5HIgogICAgICAgID4KICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS1kb3dubG9hZCIgY2xhc3M9ImJ1dHRvbi1pY29uIj48L2lyb24taWNvbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+RG93bmxvYWQgUE5HPC9zcGFuPgogICAgICAgIDwvcGFwZXItYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dVcGxvYWRCdXR0b25dXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIiPgogICAgICAgICAgPHBhcGVyLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iaWNvbi1idXR0b24iCiAgICAgICAgICAgIG9uLWNsaWNrPSJfZ2V0RmlsZSIKICAgICAgICAgICAgYWx0PSJVcGxvYWQgZmlsZSIKICAgICAgICAgICAgdGl0bGU9IlVwbG9hZCBhIHBidHh0IGZpbGUgdG8gdmlldyBhIGdyYXBoIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxpcm9uLWljb24gaWNvbj0iZmlsZS11cGxvYWQiIGNsYXNzPSJidXR0b24taWNvbiI+PC9pcm9uLWljb24+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24tdGV4dCI+VXBsb2FkIGZpbGU8L3NwYW4+CiAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJoaWRkZW4taW5wdXQiPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJmaWxlIgogICAgICAgICAgICAgIGlkPSJmaWxlIgogICAgICAgICAgICAgIG5hbWU9ImZpbGUiCiAgICAgICAgICAgICAgb24tY2hhbmdlPSJfdXBkYXRlRmlsZUlucHV0IgogICAgICAgICAgICAgIGFjY2VwdD0iLnBidHh0IgogICAgICAgICAgICAvPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIHJ1bnMtcm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICBSdW4gPHNwYW4gY2xhc3M9ImNvdW50ZXIiPihbW2RhdGFzZXRzLmxlbmd0aF1dKTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgICAgbm8tbGFiZWwtZmxvYXQKICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgIG5vaW5rCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICA+CiAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgc2VsZWN0ZWQ9Int7X3NlbGVjdGVkUnVuSW5kZXh9fSIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgID4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tkYXRhc2V0c11dIj4KICAgICAgICAgICAgICA8cGFwZXItaXRlbT5bW2l0ZW0ubmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9wYXBlci1saXN0Ym94PgogICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tzaG93U2Vzc2lvblJ1bnNEcm9wZG93bl1dIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciB0YWdzLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+CiAgICAgICAgICAgIFRhZwogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRlciIKICAgICAgICAgICAgICA+KFtbX251bVRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dKTwvc3BhbgogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgIG5vLWxhYmVsLWZsb2F0CiAgICAgICAgICAgIG5vLWFuaW1hdGlvbnMKICAgICAgICAgICAgaG9yaXpvbnRhbC1hbGlnbj0ibGVmdCIKICAgICAgICAgICAgbm9pbmsKICAgICAgICAgICAgY2xhc3M9InJ1bi1kcm9wZG93biIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWdJbmRleH19IgogICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGUKICAgICAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICAgICAgaXRlbXM9IltbX2dldFRhZ3MoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4KV1dIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPltbaXRlbS5kaXNwbGF5TmFtZV1dPC9wYXBlci1pdGVtPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPkdyYXBoIHR5cGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ob2xkZXIgY29udHJvbC1vcHRpb25zIj4KICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZEdyYXBoVHlwZX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uR3JhcGhUeXBlQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgPCEtLSBOb3RlIHRoYXQgdGhlIG5hbWUgaGFzIHRvIG1hdGNoIHRoYXQgb2YgdGZfZ3JhcGhfY29tbW9uLlNlbGVjdGlvblR5cGUuIC0tPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJvcF9ncmFwaCIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbX2dldFNlbGVjdGlvbk9wR3JhcGhEaXNhYmxlZChkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4KV1dIgogICAgICAgICAgICA+T3AgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJjb25jZXB0dWFsX2dyYXBoIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uQ29uY2VwdHVhbEdyYXBoRGlzYWJsZWQoZGF0YXNldHMsIF9zZWxlY3RlZFJ1bkluZGV4LCBfc2VsZWN0ZWRUYWdJbmRleCldXSIKICAgICAgICAgICAgPkNvbmNlcHR1YWwgZ3JhcGg8L3BhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgPgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBuYW1lPSJwcm9maWxlIgogICAgICAgICAgICBkaXNhYmxlZD0iW1tfZ2V0U2VsZWN0aW9uUHJvZmlsZURpc2FibGVkKGRhdGFzZXRzLCBfc2VsZWN0ZWRSdW5JbmRleCwgX3NlbGVjdGVkVGFnSW5kZXgpXV0iCiAgICAgICAgICAgID5Qcm9maWxlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPk5vZGUgb3B0aW9uczwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICBjaGVja2VkPSJ7e3RyYWNlSW5wdXRzfX0iCiAgICAgICAgICBvbi1jaGFuZ2U9Il9vblRyYWNlSW5wdXRzQ2hhbmdlZEJ5VXNlckdlc3R1cmUiCiAgICAgICAgPgogICAgICAgICAgVHJhY2UgaW5wdXRzCiAgICAgICAgPC9wYXBlci10b2dnbGUtYnV0dG9uPgogICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7YXV0b0V4dHJhY3ROb2Rlc319Ij4KICAgICAgICAgIEF1dG8tZXh0cmFjdCBoaWdoLWRlZ3JlZSBub2RlcwogICAgICAgIDwvcGFwZXItdG9nZ2xlLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWFsdGhQaWxsc0ZlYXR1cmVFbmFibGVkXV0iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtaG9sZGVyIj4KICAgICAgICAgIDxwYXBlci10b2dnbGUtYnV0dG9uIGNoZWNrZWQ9Int7aGVhbHRoUGlsbHNUb2dnbGVkT259fSIKICAgICAgICAgICAgPlNob3cgaGVhbHRoIHBpbGxzPC9wYXBlci10b2dnbGUtYnV0dG9uCiAgICAgICAgICA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5Db2xvciBieTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWhvbGRlciBjb250cm9sLW9wdGlvbnMiPgogICAgICAgIDxwYXBlci1yYWRpby1ncm91cAogICAgICAgICAgc2VsZWN0ZWQ9Int7Y29sb3JCeX19IgogICAgICAgICAgb24tcGFwZXItcmFkaW8tZ3JvdXAtY2hhbmdlZD0iX29uQ29sb3JCeUNoYW5nZWRCeVVzZXJHZXN0dXJlIgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5Lk5PTkVdXSI+Tm9uZTwvcGFwZXItcmFkaW8tYnV0dG9uPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gbmFtZT0iW1tDb2xvckJ5LlNUUlVDVFVSRV1dIgogICAgICAgICAgICA+U3RydWN0dXJlPC9wYXBlci1yYWRpby1idXR0b24KICAgICAgICAgID4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIG5hbWU9IltbQ29sb3JCeS5ERVZJQ0VdXSIKICAgICAgICAgICAgPkRldmljZTwvcGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0ieGxhLWNsdXN0ZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuWExBX0NMVVNURVJdXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIV94bGFDbHVzdGVyc1Byb3ZpZGVkKHJlbmRlckhpZXJhcmNoeSldXSIKICAgICAgICAgID4KICAgICAgICAgICAgWExBIGNsdXN0ZXIKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9InhsYS1jbHVzdGVyLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IFhMQSBjbHVzdGVyIGlzIG9ubHkgZW5hYmxlZCBpZiBhdCBsZWFzdCAxIG9wIHNwZWNpZmllcwogICAgICAgICAgICBhbiBYTEEgY2x1c3Rlci4KICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KCiAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uCiAgICAgICAgICAgIGlkPSJjb21wdXRlLXRpbWUtcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuQ09NUFVURV9USU1FXV0iCiAgICAgICAgICAgIGRpc2FibGVkPSJbWyFzdGF0c11dIgogICAgICAgICAgPgogICAgICAgICAgICBDb21wdXRlIHRpbWUKICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICBmb3I9ImNvbXB1dGUtdGltZS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgPgogICAgICAgICAgICBDb2xvcmluZyBieSBjb21wdXRlIHRpbWUgaXMgb25seSBlbmFibGVkIGlmIHRoZSBSdW5NZXRhZGF0YSBwcm90byBpcwogICAgICAgICAgICBwYXNzZWQgdG8gdGhlIEZpbGVXcml0ZXIgd2hlbiBhIHNwZWNpZmljIHNlc3Npb24gaXMgcnVuLgogICAgICAgICAgPC9wYXBlci10b29sdGlwPgoKICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgaWQ9Im1lbW9yeS1yYWRpby1idXR0b24iCiAgICAgICAgICAgIG5hbWU9IltbQ29sb3JCeS5NRU1PUlldXSIKICAgICAgICAgICAgZGlzYWJsZWQ9IltbIXN0YXRzXV0iCiAgICAgICAgICA+CiAgICAgICAgICAgIE1lbW9yeQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0ibWVtb3J5LXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICA+CiAgICAgICAgICAgIENvbG9yaW5nIGJ5IG1lbW9yeSBpcyBvbmx5IGVuYWJsZWQgaWYgdGhlIFJ1bk1ldGFkYXRhIHByb3RvIGlzCiAgICAgICAgICAgIHBhc3NlZCB0byB0aGUgRmlsZVdyaXRlciB3aGVuIGEgc3BlY2lmaWMgc2Vzc2lvbiBpcyBydW4uCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CgogICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbgogICAgICAgICAgICBpZD0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBuYW1lPSJbW0NvbG9yQnkuT1BfQ09NUEFUSUJJTElUWV1dIgogICAgICAgICAgPgogICAgICAgICAgICBUUFUgY29tcGF0aWJpbGl0eQogICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgIGZvcj0idHB1LWNvbXBhdGliaWxpdHktcmFkaW8tYnV0dG9uIgogICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgID4KICAgICAgICAgICAgQ29sb3JpbmcgYnkgd2hldGhlciBhbiBvcGVyYXRpb24gaXMgY29tcGF0aWJsZSBmb3IgdGhlIFRQVSBkZXZpY2UuCiAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgPC9wYXBlci1yYWRpby1ncm91cD4KICAgICAgICA8c3BhbiBjbGFzcz0ic3BhY2VyIj48L3NwYW4+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtaG9sZGVyIj4KICAgICAgPGJ1dHRvbiBjbGFzcz0ibGVnZW5kLXRvb2xiYXIiIG9uLWNsaWNrPSJfdG9nZ2xlTGVnZW5kT3BlbiI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZS1sZWdlbmQtdGV4dCI+TGVnZW5kPC9zcGFuPgogICAgICAgIDxpcm9uLWljb24KICAgICAgICAgIGljb249IltbX2dldFRvZ2dsZUxlZ2VuZEljb24oX2xlZ2VuZE9wZW5lZCldXSIKICAgICAgICAgIGNsYXNzPSJ0b2dnbGUtbGVnZW5kLWJ1dHRvbiIKICAgICAgICA+CiAgICAgICAgPC9pcm9uLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgICA8aXJvbi1jb2xsYXBzZSBvcGVuZWQ9IltbX2xlZ2VuZE9wZW5lZF1dIiBjbGFzcz0ibGVnZW5kLWNvbnRlbnQiPgogICAgICAgIDwhLS0gQ29sb3ItbW9kZS1zcGVjaWZpYyBsZWdlbmQgaXRlbXMgLS0+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaXNHcmFkaWVudENvbG9yaW5nKHN0YXRzLCBjb2xvckJ5KV1dIj4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQwIiBoZWlnaHQ9IjIwIiBjbGFzcz0iY29sb3ItdGV4dCBncmFkaWVudC1jb250YWluZXIiPgogICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgPGxpbmVhckdyYWRpZW50CiAgICAgICAgICAgICAgICAgIGlkPSJsaW5lYXJHcmFkaWVudCIKICAgICAgICAgICAgICAgICAgeDE9IjAlIgogICAgICAgICAgICAgICAgICB5MT0iMCUiCiAgICAgICAgICAgICAgICAgIHgyPSIxMDAlIgogICAgICAgICAgICAgICAgICB5Mj0iMCUiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InN0YXJ0IgogICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5zdGFydENvbG9yXV0iCiAgICAgICAgICAgICAgICAgID48L3N0b3A+CiAgICAgICAgICAgICAgICAgIDxzdG9wCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImVuZCIKICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjEwMCUiCiAgICAgICAgICAgICAgICAgICAgc3RvcC1jb2xvciQ9IltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5lbmRDb2xvcl1dIgogICAgICAgICAgICAgICAgICA+PC9zdG9wPgogICAgICAgICAgICAgICAgPC9saW5lYXJHcmFkaWVudD4KICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgPHJlY3QKICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICB5PSIwIgogICAgICAgICAgICAgICAgd2lkdGg9IjEzNSIKICAgICAgICAgICAgICAgIGhlaWdodD0iMjAiCiAgICAgICAgICAgICAgICBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50KSIKICAgICAgICAgICAgICAgIHN0cm9rZT0iYmxhY2siCiAgICAgICAgICAgICAgPjwvcmVjdD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvbWFpblZhbHVlcyBjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5TdGFydCI+W1tfY3VycmVudEdyYWRpZW50UGFyYW1zLm1pblZhbHVlXV08L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb21haW5FbmQiPltbX2N1cnJlbnRHcmFkaWVudFBhcmFtcy5tYXhWYWx1ZV1dPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnIgc3R5bGU9ImNsZWFyOiBib3RoIiAvPgogICAgICAgICAgICA8ZGl2PkRldmljZXMgaW5jbHVkZWQgaW4gc3RhdHM6PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldmljZUxpc3QiPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VzXV0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyBkZXZpY2VzLWNoZWNrYm94Ij4KICAgICAgICAgICAgICAgICAgPHNwYW4KICAgICAgICAgICAgICAgICAgICA+PGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlJD0iW1tpdGVtLmRldmljZV1dIgogICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCQ9IltbaXRlbS51c2VkXV0iCiAgICAgICAgICAgICAgICAgICAgICBvbi1jbGljaz0iX2RldmljZUNoZWNrYm94Q2xpY2tlZCIKICAgICAgICAgICAgICAgICAgLz48L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuPltbaXRlbS5zdWZmaXhdXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2l0ZW0uaWdub3JlZE1zZ11dIj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgICAgIGljb249ImhlbHAiCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iaGVscC1pY29uIgogICAgICAgICAgICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICA+W1tpdGVtLmlnbm9yZWRNc2ddXTwvcGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZXF1YWxzKGNvbG9yQnksICdzdHJ1Y3R1cmUnKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItdGV4dCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwiPiBjb2xvcnMgPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+c2FtZSBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjZWVlIgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNhNmE2YTYiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+dW5pcXVlIHN1YnN0cnVjdHVyZTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19lcXVhbHMoY29sb3JCeSwgJ2RldmljZScpXV0iPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2N1cnJlbnREZXZpY2VQYXJhbXNdXSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iW1tpdGVtLmNvbG9yXV0iCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj5bW2l0ZW0uZGV2aWNlXV08L3NwYW4+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgdHlwZT0iTUVUQSIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2VlZSIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjYTZhNmE2IgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVua25vd24gZGV2aWNlPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAneGxhX2NsdXN0ZXInKV1dIj4KICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jdXJyZW50WGxhQ2x1c3RlclBhcmFtc11dIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWxlZ2VuZC1yb3ciPgogICAgICAgICAgICAgICAgICA8c3ZnPgogICAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgogICAgICAgICAgICAgICAgICAgICAgeGxpbms6aHJlZj0iI3VuZmlsbGVkLXJlY3QiCiAgICAgICAgICAgICAgICAgICAgICB4PSIwIgogICAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJmaWxsOltbaXRlbS5jb2xvcl1dIgogICAgICAgICAgICAgICAgICAgID48L3VzZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPltbaXRlbS54bGFfY2x1c3Rlcl1dPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDxzdmc+CiAgICAgICAgICAgICAgICAgIDx1c2UKICAgICAgICAgICAgICAgICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKICAgICAgICAgICAgICAgICAgICB4bGluazpocmVmPSIjZ3JleS1yZWN0IgogICAgICAgICAgICAgICAgICAgIHg9IjAiCiAgICAgICAgICAgICAgICAgICAgeT0iMCIKICAgICAgICAgICAgICAgICAgPjwvdXNlPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItbGVnZW5kLXZhbHVlIj51bmtub3duIFhMQSBjbHVzdGVyPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2VxdWFscyhjb2xvckJ5LCAnb3BfY29tcGF0aWJpbGl0eScpXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci10ZXh0Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1sZWdlbmQtcm93Ij4KICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgIHR5cGU9Ik9QIgogICAgICAgICAgICAgICAgICBoZWlnaHQ9IjE2IgogICAgICAgICAgICAgICAgICBmaWxsLW92ZXJyaWRlPSIjMGY5ZDU4IgogICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICA+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWxlZ2VuZC12YWx1ZSI+VmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbgogICAgICAgICAgICAgICAgICB0eXBlPSJPUCIKICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNiIKICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2RiNDQzNyIKICAgICAgICAgICAgICAgICAgc3Ryb2tlLW92ZXJyaWRlPSIjY2NjIgogICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPkludmFsaWQgT3A8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfc3RhdHNOb3ROdWxsKHN0YXRzKV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItbGVnZW5kLXJvdyI+CiAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iTUVUQSIgaGVpZ2h0PSIxNiIgZmFkZWQ+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1sZWdlbmQtdmFsdWUiPnVudXNlZCBzdWJzdHJ1Y3R1cmU8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBDb21tb24gbGVnZW5kIGl0ZW1zIC0tPgogICAgICAgIDxkaXY+CiAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4oKiA9IGV4cGFuZGFibGUpPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24KICAgICAgICAgICAgICAgICAgICB0eXBlPSJNRVRBIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgZmlsbC1vdmVycmlkZT0iI2Q5ZDlkOSIKICAgICAgICAgICAgICAgICAgICBzdHJva2Utb3ZlcnJpZGU9IiNjY2MiCiAgICAgICAgICAgICAgICAgID48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBOYW1lc3BhY2U8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVuY2Fwc3VsYXRlcyBhIHNldCBvZiBub2Rlcy4gTmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbCBhbmQKICAgICAgICAgICAgICAgICAgICAgIGJhc2VkIG9uIHNjb3BlLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8dGYtZ3JhcGgtaWNvbiB0eXBlPSJPUCIgaGVpZ2h0PSIxNiI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgT3BOb2RlCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1jbGFyaWZpZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuPj88L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbi1kZWxheT0iMCIKICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICBOb2RlIHRoYXQgcGVyZm9ybXMgYW4gb3BlcmF0aW9uLiBUaGVzZSBub2RlcyBjYW5ub3QKICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU0VSSUVTIiBoZWlnaHQ9IjE2Ij48L3RmLWdyYXBoLWljb24+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBVbmNvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIG5vdCBjb25uZWN0ZWQgdG8gZWFjaAogICAgICAgICAgICAgICAgICAgICAgb3RoZXIuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIDx0Zi1ncmFwaC1pY29uCiAgICAgICAgICAgICAgICAgICAgdHlwZT0iU0VSSUVTIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTYiCiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwKICAgICAgICAgICAgICAgICAgPjwvdGYtZ3JhcGgtaWNvbj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIENvbm5lY3RlZCBzZXJpZXM8c3BhbiBjbGFzcz0iZ3JheSI+Kjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIFNlcXVlbmNlIG9mIG51bWJlcmVkIG5vZGVzIHRoYXQgYXJlIGNvbm5lY3RlZCB0byBlYWNoCiAgICAgICAgICAgICAgICAgICAgICBvdGhlci4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiI+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0id2hpdGUiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiM4NDg0ODQiCiAgICAgICAgICAgICAgICAgICAgICBjeD0iMTAiCiAgICAgICAgICAgICAgICAgICAgICBjeT0iMTAiCiAgICAgICAgICAgICAgICAgICAgICByPSI1IgogICAgICAgICAgICAgICAgICAgID48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb25zdGFudAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IG91dHB1dHMgYSBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHRmLWdyYXBoLWljb24gdHlwZT0iU1VNTUFSWSIgaGVpZ2h0PSIyMCI+PC90Zi1ncmFwaC1pY29uPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgU3VtbWFyeQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgTm9kZSB0aGF0IGNvbGxlY3RzIGRhdGEgZm9yIHZpc3VhbGl6YXRpb24gd2l0aGluCiAgICAgICAgICAgICAgICAgICAgICBUZW5zb3JCb2FyZC4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgICAgICAgICAgPG1hcmtlcgogICAgICAgICAgICAgICAgICAgICAgICBpZD0iZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI2JiYiIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjZGF0YWZsb3ctYXJyb3doZWFkLWxlZ2VuZCkiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPgogICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgIERhdGFmbG93IGVkZ2UKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWNsYXJpZmllciI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+Pzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8cGFwZXItdG9vbHRpcAogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIEVkZ2Ugc2hvd2luZyB0aGUgZGF0YSBmbG93IGJldHdlZW4gb3BlcmF0aW9ucy4gRWRnZXMgZmxvdwogICAgICAgICAgICAgICAgICAgICAgdXB3YXJkcyB1bmxlc3MgYXJyb3doZWFkcyBzcGVjaWZ5IG90aGVyd2lzZS4KICAgICAgICAgICAgICAgICAgICA8L3BhcGVyLXRvb2x0aXA+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgPHN2ZwogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpY29uIgogICAgICAgICAgICAgICAgICAgIGhlaWdodD0iMTVweCIKICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pZCBtZWV0IgogICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9IjAgMCAxNSAxNSIKICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIDxwYXRoCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9IiNiYmIiCiAgICAgICAgICAgICAgICAgICAgICBkPSJNMiA5IGwgMjkgMCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIKICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1kYXNoYXJyYXk9IjIsIDIiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBDb250cm9sIGRlcGVuZGVuY3kgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoZSBjb250cm9sIGRlcGVuZGVuY3kgYmV0d2VlbiBvcGVyYXRpb25zLgogICAgICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICA8c3ZnCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Imljb24iCiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxNXB4IgogICAgICAgICAgICAgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaW5ZTWlkIG1lZXQiCiAgICAgICAgICAgICAgICAgICAgdmlld0JveD0iMCAwIDE1IDE1IgogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgPGRlZnM+CiAgICAgICAgICAgICAgICAgICAgICA8bWFya2VyCiAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWZlcmVuY2UtYXJyb3doZWFkLWxlZ2VuZCIKICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0iI0ZGQjc0RCIKICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGg9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJIZWlnaHQ9IjEwIgogICAgICAgICAgICAgICAgICAgICAgICByZWZYPSI5IgogICAgICAgICAgICAgICAgICAgICAgICByZWZZPSI1IgogICAgICAgICAgICAgICAgICAgICAgICBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTSAwLDAgTCAxMCw1IEwgMCwxMCBDIDMsNyAzLDMgMCwwIj48L3BhdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L21hcmtlcj4KICAgICAgICAgICAgICAgICAgICA8L2RlZnM+CiAgICAgICAgICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICAgICAgICAgIG1hcmtlci1lbmQ9InVybCgjcmVmZXJlbmNlLWFycm93aGVhZC1sZWdlbmQpIgogICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSIjRkZCNzREIgogICAgICAgICAgICAgICAgICAgICAgZD0iTTIgOSBsIDI5IDAiCiAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD0icm91bmQiCiAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgZWRnZQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQtY2xhcmlmaWVyIj4KICAgICAgICAgICAgICAgICAgICA8c3Bhbj4/PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxwYXBlci10b29sdGlwCiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24tZGVsYXk9IjAiCiAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgRWRnZSBzaG93aW5nIHRoYXQgdGhlIG91dGdvaW5nIG9wZXJhdGlvbiBub2RlIGNhbiBtdXRhdGUKICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyB0ZW5zb3IuCiAgICAgICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1jb2xsYXBzZT4KICAgIDwvZGl2PgogIGA7RShbQSh7dHlwZTpPYmplY3Qsb2JzZXJ2ZXI6Il9zdGF0c0NoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwic3RhdHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiZGV2aWNlc0ZvclN0YXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbi5wcm90b3R5cGUsImNvbG9yQnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEluLnByb3RvdHlwZSwiY29sb3JCeVBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG9ic2VydmVyOiJfZGF0YXNldHNDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbi5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLGxvKV0sSW4ucHJvdG90eXBlLCJyZW5kZXJIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHJlYWRPbmx5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVNlbGVjdGlvbihkYXRhc2V0cywgX3NlbGVjdGVkUnVuSW5kZXgsIF9zZWxlY3RlZFRhZ0luZGV4LCBfc2VsZWN0ZWRHcmFwaFR5cGUpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxJbi5wcm90b3R5cGUsInNlbGVjdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW4ucHJvdG90eXBlLCJzZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsb2JzZXJ2ZXI6Il9zZWxlY3RlZFJ1bkluZGV4Q2hhbmdlZCJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSW4ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5JbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJbi5wcm90b3R5cGUsInRyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEluLnByb3RvdHlwZSwiYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcixvYnNlcnZlcjoiX3NlbGVjdGVkVGFnSW5kZXhDaGFuZ2VkIn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJbi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhZ0luZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEluLnByb3RvdHlwZSwiX3NlbGVjdGVkR3JhcGhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxJbi5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEluLnByb3RvdHlwZSwic2hvd1Nlc3Npb25SdW5zRHJvcGRvd24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJbi5wcm90b3R5cGUsInNob3dVcGxvYWRCdXR0b24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxJbi5wcm90b3R5cGUsImhlYWx0aFBpbGxzRmVhdHVyZUVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW4ucHJvdG90eXBlLCJoZWFsdGhQaWxsc1RvZ2dsZWRPbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLEluLnByb3RvdHlwZSwiX2xlZ2VuZE9wZW5lZCIsdm9pZCAwKTtFKFtSdCgiZGV2aWNlc0ZvclN0YXRzIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbi5wcm90b3R5cGUsIl9jdXJyZW50RGV2aWNlcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLEluLnByb3RvdHlwZSwiX2N1cnJlbnREZXZpY2VQYXJhbXMiLG51bGwpO0UoW1J0KCJjb2xvckJ5UGFyYW1zIiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJbi5wcm90b3R5cGUsIl9jdXJyZW50WGxhQ2x1c3RlclBhcmFtcyIsbnVsbCk7RShbUnQoImNvbG9yQnlQYXJhbXMiLCJjb2xvckJ5IiksdygiZGVzaWduOnR5cGUiLE9iamVjdCksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW4ucHJvdG90eXBlLCJfY3VycmVudEdyYWRpZW50UGFyYW1zIixudWxsKTtJbj1FKFt5dCgidGYtZ3JhcGgtY29udHJvbHMiKV0sSW4pO2Z1bmN0aW9uIGF1cihlKXtpZihlPT09InRydWUiKXJldHVybiEwO2lmKGU9PT0iZmFsc2UiKXJldHVybiExO2lmKGVbMF09PT0nIicpcmV0dXJuIGUuc3Vic3RyaW5nKDEsZS5sZW5ndGgtMSk7bGV0IHI9cGFyc2VGbG9hdChlKTtyZXR1cm4gaXNOYU4ocik/ZTpyfWZ1bmN0aW9uICRsZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntmZXRjaChlKS50aGVuKG49PntuLm9rP24uYXJyYXlCdWZmZXIoKS50aGVuKHQscik6bi50ZXh0KCkudGhlbihyLHIpfSl9KX1mdW5jdGlvbiBLbGUoZSx0KXtyZXR1cm4gWXNlKCJSZWFkaW5nIG1ldGFkYXRhIHBidHh0Iiw0MCwoKT0+ZT09bnVsbD9Qcm9taXNlLnJlc29sdmUobnVsbCk6JGxlKGUpLHQsanIuRkVUQ0hfTUVUQURBVEFfUEJUWFRfQllURVMpLnRoZW4ocj0+ZEgoIlBhcnNpbmcgbWV0YWRhdGEucGJ0eHQiLDYwLCgpPT5yIT1udWxsP2h1cihyKTpQcm9taXNlLnJlc29sdmUobnVsbCksdCxqci5QQVJTRV9NRVRBREFUQV9QQlRYVF9JTlRPX09CSkVDVCkpfWZ1bmN0aW9uIFpsZShlLHQscil7cmV0dXJuIGRIKCJSZWFkaW5nIGdyYXBoIHBidHh0Iiw0MCwoKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPURhdGUubm93KCk7aWYodCl7bGV0IG89eWllbGQgbmV3IFByb21pc2UoZnVuY3Rpb24oYSxzKXtsZXQgbD1uZXcgRmlsZVJlYWRlcjtsLm9ubG9hZD0oKT0+YShsLnJlc3VsdCksbC5vbmVycm9yPSgpPT5zKGwuZXJyb3IpLGwucmVhZEFzQXJyYXlCdWZmZXIodCl9KTtyZXR1cm4gUG8oe3RpbWluZ0lkOmpyLkZFVENIX1BCVFhUX0JZVEVTX0ZST01fRklMRVNZU1RFTSxldmVudFZhbHVlOkRhdGUubm93KCktbn0pLG99bGV0IGk9eWllbGQgJGxlKGUpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuRkVUQ0hfUEJUWFRfQllURVNfRlJPTV9TRVJWRVIsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLW59KSxpfSkscixqci5GRVRDSF9QQlRYVF9CWVRFUykudGhlbihuPT5kSCgiUGFyc2luZyBncmFwaC5wYnR4dCIsNjAsKCk9PnV1cihuKSxyLGpyLlBBUlNFX1BCVFhUX0lOVE9fT0JKRUNUKSl9ZnVuY3Rpb24gc3VyKGUsdCxyPTFlNixuPWAKYCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShzLGwsYyl7bGV0IHU9Yz49ZS5ieXRlTGVuZ3RoLGg9bC5zcGxpdChuKTtoWzBdPXMraFswXTtsZXQgZj11PyIiOmgucG9wKCk7Zm9yKGxldCBnIG9mIGgpdHJ5e3QoZyl9Y2F0Y2goXyl7byhfKTtyZXR1cm59aWYodSl7aSghMCk7cmV0dXJufWxldCBwPW5ldyBCbG9iKFtlLnNsaWNlKGMsYytyKV0pLGQ9bmV3IEZpbGVSZWFkZXI7ZC5vbmxvYWQ9ZnVuY3Rpb24oZyl7YShmLGcudGFyZ2V0LnJlc3VsdCxjK3IpfSxkLnJlYWRBc1RleHQocCl9YSgiIiwiIiwwKX0pfXZhciBsdXI9eyJsaWJyYXJ5LmZ1bmN0aW9uIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuaW5wdXQiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5iIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QuZiI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LmZ1bmMiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUubGlzdC5pIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QucyI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5saXN0LnNoYXBlIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3Quc2hhcGUuZGltIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudGVuc29yIjohMCwibGlicmFyeS5mdW5jdGlvbi5ub2RlX2RlZi5hdHRyLnZhbHVlLmxpc3QudHlwZSI6ITAsImxpYnJhcnkuZnVuY3Rpb24ubm9kZV9kZWYuYXR0ci52YWx1ZS5zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnN0cmluZ192YWwiOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLm5vZGVfZGVmLmF0dHIudmFsdWUudGVuc29yLnRlbnNvcl9zaGFwZS5kaW0iOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5pbnB1dF9hcmciOiEwLCJsaWJyYXJ5LmZ1bmN0aW9uLnNpZ25hdHVyZS5vdXRwdXRfYXJnIjohMCwibGlicmFyeS52ZXJzaW9ucyI6ITAsbm9kZTohMCwibm9kZS5pbnB1dCI6ITAsIm5vZGUuYXR0ciI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmIiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5mIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3QuZnVuYyI6ITAsIm5vZGUuYXR0ci52YWx1ZS5saXN0LmkiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zIjohMCwibm9kZS5hdHRyLnZhbHVlLmxpc3Quc2hhcGUiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC5zaGFwZS5kaW0iOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50ZW5zb3IiOiEwLCJub2RlLmF0dHIudmFsdWUubGlzdC50eXBlIjohMCwibm9kZS5hdHRyLnZhbHVlLnNoYXBlLmRpbSI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3Iuc3RyaW5nX3ZhbCI6ITAsIm5vZGUuYXR0ci52YWx1ZS50ZW5zb3IudGVuc29yX3NoYXBlLmRpbSI6ITB9LGN1cj17InN0ZXBfc3RhdHMuZGV2X3N0YXRzIjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cyI6ITAsInN0ZXBfc3RhdHMuZGV2X3N0YXRzLm5vZGVfc3RhdHMub3V0cHV0IjohMCwic3RlcF9zdGF0cy5kZXZfc3RhdHMubm9kZV9zdGF0cy5tZW1vcnkiOiEwLCJzdGVwX3N0YXRzLmRldl9zdGF0cy5ub2RlX3N0YXRzLm91dHB1dC50ZW5zb3JfZGVzY3JpcHRpb24uc2hhcGUuZGltIjohMH07ZnVuY3Rpb24gdXVyKGUpe3JldHVybiBKbGUoZSxsdXIpfWZ1bmN0aW9uIGh1cihlKXtyZXR1cm4gSmxlKGUsY3VyKS50aGVuKHQ9PnQuc3RlcF9zdGF0cyl9ZnVuY3Rpb24gSmxlKGUsdCl7bGV0IHI9e30sbj1bXSxpPVtdLG89cjtmdW5jdGlvbiBhKGwpe2xldCBjPWwuaW5kZXhPZigiOiIpLHU9bC5zdWJzdHJpbmcoMCxjKS50cmltKCksaD1hdXIobC5zdWJzdHJpbmcoYysyKS50cmltKCkpO3JldHVybntuYW1lOnUsdmFsdWU6aH19ZnVuY3Rpb24gcyhsLGMsdSxoKXtsZXQgZj1sW2NdO2Y9PW51bGw/bFtjXT1oLmpvaW4oIi4iKWluIHQ/W3VdOnU6QXJyYXkuaXNBcnJheShmKT9mLnB1c2godSk6bFtjXT1bZix1XX1yZXR1cm4gc3VyKGUsZnVuY3Rpb24obCl7aWYobD1sLnRyaW0oKSwhIWwpc3dpdGNoKGxbbC5sZW5ndGgtMV0pe2Nhc2UieyI6bGV0IGM9bC5zdWJzdHJpbmcoMCxsLmxlbmd0aC0yKS50cmltKCksdT17fTtuLnB1c2gobyksaS5wdXNoKGMpLHMobyxjLHUsaSksbz11O2JyZWFrO2Nhc2UifSI6bz1uLnBvcCgpLGkucG9wKCk7YnJlYWs7ZGVmYXVsdDpsZXQgaD1hKGwpO3MobyxoLm5hbWUsaC52YWx1ZSxpLmNvbmNhdChoLm5hbWUpKTticmVha319KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KX1mdW5jdGlvbiB0Y2UoZSx0LHIsbj1uZXcgSnUsaT1yMyl7bGV0IG89SlMoZSwzMCwiRGF0YSIpLGE9SlMoZSwyMCwiR3JhcGgiKSxzPUpTKGUsNTAsIk5hbWVzcGFjZSBoaWVyYXJjaHkiKSxsPURhdGUubm93KCk7cmV0dXJuIFpsZSh0LHIsbykudGhlbihmdW5jdGlvbihjKXtpZighYy5ub2RlKXRocm93IG5ldyBFcnJvcigiVGhlIGdyYXBoIGlzIGVtcHR5LiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBUZW5zb3JGbG93IGNvdWxkIG5vdCB0cmFjZSBhbnkgZ3JhcGguIFBsZWFzZSByZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvMTk2MSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iKTtyZXR1cm4gbmxlKGMscmxlLGEpfSwoKT0+e3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEdyYXBoRGVmLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgY2F1c2VkIGJ5IGEgYmFkIG5ldHdvcmsgY29ubmVjdGlvbiBvciBkaWZmaWN1bHR5IHJlY29uY2lsaW5nIG11bHRpcGxlIEdyYXBoRGVmczsgZm9yIHRoZSBsYXR0ZXIgY2FzZSwgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2lzc3Vlcy8xOTI5LiIpfSkudGhlbihjPT5SaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7WWxlKGMsbik7bGV0IHU9eWllbGQgeEgoYyxpLHMpO3JldHVybiBQbyh7dGltaW5nSWQ6anIuR1JBUEhfTE9BRF9TVUNDRUVERUQsZXZlbnRWYWx1ZTpEYXRlLm5vdygpLWx9KSx7Z3JhcGg6YyxncmFwaEhpZXJhcmNoeTp1fX0pKS5jYXRjaChjPT57bGV0IHU9YEdyYXBoIHZpc3VhbGl6YXRpb24gZmFpbGVkLgoKJHtjfWA7dGhyb3cgZS5yZXBvcnRFcnJvcih1LGMpLFBvKHt0aW1pbmdJZDpqci5HUkFQSF9MT0FEX0ZBSUxFRCxldmVudFZhbHVlOkRhdGUubm93KCktbH0pLGN9KX12YXIgSHM9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyPW5ldyBKdSx0aGlzLmhpZXJhcmNoeVBhcmFtcz1yMyx0aGlzLl90ZW1wbGF0ZT1udWxsfV9zZWxlY3Rpb25DaGFuZ2VkKCl7IXRoaXMuc2VsZWN0aW9ufHx0aGlzLmRlYm91bmNlKCJzZWxlY3Rpb25jaGFuZ2UiLCgpPT57dGhpcy5fbG9hZCh0aGlzLnNlbGVjdGlvbil9KX1fbG9hZCh0KXtsZXR7cnVuOnIsdGFnOm4sdHlwZTppfT10O3N3aXRjaChpKXtjYXNlIEZzLk9QX0dSQVBIOmNhc2UgRnMuQ09OQ0VQVFVBTF9HUkFQSDp7KGZ1bmN0aW9uKCl7dGhpcy5fc2V0T3V0U3RhdHMobnVsbCl9KS5iaW5kKHRoaXMpKCk7bGV0IG89bmV3IFVSTFNlYXJjaFBhcmFtcztvLnNldCgicnVuIixyKSxvLnNldCgiY29uY2VwdHVhbCIsU3RyaW5nKGk9PT1Gcy5DT05DRVBUVUFMX0dSQVBIKSksbiYmby5zZXQoInRhZyIsbik7bGV0IGE9dmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2dyYXBoIixvKTtyZXR1cm4gdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChhKS50aGVuKCgpPT57dGhpcy5fZ3JhcGhSdW5UYWc9e3J1bjpyLHRhZzpufX0pfWNhc2UgRnMuUFJPRklMRTp7bGV0e3RhZ3M6b309dGhpcy5kYXRhc2V0cy5maW5kKCh7bmFtZTpmfSk9PmY9PT1yKSxzPW8uZmluZChmPT5mLnRhZz09PW4pLm9wR3JhcGg/bjpudWxsO2NvbnNvbGUuYXNzZXJ0KG8uZmluZChmPT5mLnRhZz09PXMpLGBSZXF1aXJlZCB0YWcgKCR7c30pIGlzIG1pc3NpbmcuYCk7bGV0IGM9IXRoaXMuX2dyYXBoUnVuVGFnfHx0aGlzLl9ncmFwaFJ1blRhZy5ydW4hPT1yfHx0aGlzLl9ncmFwaFJ1blRhZy50YWchPT1zP3RoaXMuX2xvYWQoe3J1bjpyLHRhZzpzLHR5cGU6RnMuT1BfR1JBUEh9KTpQcm9taXNlLnJlc29sdmUoKSx1PW5ldyBVUkxTZWFyY2hQYXJhbXM7dS5zZXQoInRhZyIsbiksdS5zZXQoInJ1biIscik7bGV0IGg9dmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL3J1bl9tZXRhZGF0YSIsdSk7cmV0dXJuIGMudGhlbigoKT0+dGhpcy5fcmVhZEFuZFBhcnNlTWV0YWRhdGEoaCkpfWRlZmF1bHQ6cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5rbm93biBzZWxlY3Rpb24gdHlwZTogJHtpfWApKX19X3JlYWRBbmRQYXJzZU1ldGFkYXRhKHQpe3RoaXMuc2V0KCJwcm9ncmVzcyIse3ZhbHVlOjAsbXNnOiIifSk7dmFyIHI9clAodGhpcyk7S2xlKHQscikudGhlbihmdW5jdGlvbihuKXt0aGlzLl9zZXRPdXRTdGF0cyhuKX0uYmluZCh0aGlzKSl9X2ZldGNoQW5kQ29uc3RydWN0SGllcmFyY2hpY2FsR3JhcGgodCxyKXt0aGlzLnNldCgicHJvZ3Jlc3MiLHt2YWx1ZTowLG1zZzoiIn0pO2xldCBuPXJQKHRoaXMpO3JldHVybiB0Y2Uobix0LHIhPT12b2lkIDA/cjpudWxsLHRoaXMuY29tcGF0aWJpbGl0eVByb3ZpZGVyLHRoaXMuaGllcmFyY2h5UGFyYW1zKS50aGVuKGZ1bmN0aW9uKHtncmFwaDppLGdyYXBoSGllcmFyY2h5Om99KXt0aGlzLl9zZXRPdXRHcmFwaChpKSx0aGlzLl9zZXRPdXRHcmFwaEhpZXJhcmNoeShvKX0uYmluZCh0aGlzKSl9X3NlbGVjdGVkRmlsZUNoYW5nZWQoKXt2YXIgaTt2YXIgdD10aGlzLnNlbGVjdGVkRmlsZTtpZighdClyZXR1cm47bGV0IHI9dC50YXJnZXQsbj0oaT1yLmZpbGVzKT09bnVsbD92b2lkIDA6aVswXTshbnx8KHIudmFsdWU9IiIsdGhpcy5fZmV0Y2hBbmRDb25zdHJ1Y3RIaWVyYXJjaGljYWxHcmFwaChudWxsLG4pKX19O0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxIcy5wcm90b3R5cGUsImRhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsInByb2dyZXNzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwic2VsZWN0ZWRGaWxlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhzLnByb3RvdHlwZSwiaGllcmFyY2h5UGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LHJlYWRPbmx5OiEwLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixvcyldLEhzLnByb3RvdHlwZSwib3V0R3JhcGhIaWVyYXJjaHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3QscmVhZE9ubHk6ITAsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLFh1KV0sSHMucHJvdG90eXBlLCJvdXRHcmFwaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxyZWFkT25seTohMCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSHMucHJvdG90eXBlLCJvdXRTdGF0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIcy5wcm90b3R5cGUsIl9ncmFwaFJ1blRhZyIsdm9pZCAwKTtFKFtCdCgic2VsZWN0aW9uIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3Rpb25DaGFuZ2VkIixudWxsKTtFKFtCdCgic2VsZWN0ZWRGaWxlIiwiY29tcGF0aWJpbGl0eVByb3ZpZGVyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIcy5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGVDaGFuZ2VkIixudWxsKTtIcz1FKFt5dCgidGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlciIpXSxIcyk7dmFyIGVjZT0icnVuIjt2YXIgT3I9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2RhdGFzZXRzPVtdLHRoaXMuX2RhdGFzZXRzRmV0Y2hlZD0hMSx0aGlzLl9zZWxlY3RlZERhdGFzZXQ9MCx0aGlzLl9yZXF1ZXN0TWFuYWdlcj1uZXcgQWUsdGhpcy5fY2FuY2VsbGVyPW5ldyBhbix0aGlzLnNwZWNpZmljSGVhbHRoUGlsbFN0ZXA9MCx0aGlzLmhlYWx0aFBpbGxzVG9nZ2xlZE9uPSExLHRoaXMuX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cz1bXSx0aGlzLl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzPXt9LHRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQ9MSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5PTUwMCx0aGlzLnJ1bj15XyhlY2Use2RlZmF1bHRWYWx1ZToiIix1c2VMb2NhbFN0b3JhZ2U6ITF9KS5jYWxsKHRoaXMpLHRoaXMuX3J1bk9ic2VydmVyPXZfKGVjZSx7ZGVmYXVsdFZhbHVlOiIiLHBvbHltZXJQcm9wZXJ0eToicnVuIix1c2VMb2NhbFN0b3JhZ2U6ITF9KX1hdHRhY2hlZCgpe3RoaXMuc2V0KCJfaXNBdHRhY2hlZCIsITApfWRldGFjaGVkKCl7dGhpcy5zZXQoIl9pc0F0dGFjaGVkIiwhMSl9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigibm9kZS10b2dnbGUtZXhwYW5kIix0aGlzLl9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kLmJpbmQodGhpcykpfXJlbG9hZCgpe3RoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWR8fHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodmUoKS5wbHVnaW5zTGlzdGluZygpKS50aGVuKHRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZSh0PT57dC5jYW5jZWxsZWR8fHQudmFsdWUuZGVidWdnZXImJnRoaXMuc2V0KCJfZGVidWdnZXJEYXRhRW5hYmxlZCIsITApfSkpLHRoaXMuX21heWJlRmV0Y2hIZWFsdGhQaWxscygpfV9maXQoKXt0aGlzLiQkKCIjZ3JhcGhib2FyZCIpLmZpdCgpfV9vbkRvd25sb2FkSW1hZ2VSZXF1ZXN0ZWQodCl7dGhpcy4kJCgiI2dyYXBoYm9hcmQiKS5kb3dubG9hZEFzSW1hZ2UodC5kZXRhaWwpfV9nZXRHcmFwaERpc3BsYXlDbGFzc05hbWUodCxyKXtyZXR1cm4gdHx8ci5sZW5ndGg/IiI6Im5vLWdyYXBoIn1fZmV0Y2hEYXRhc2V0KCl7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2luZm8iKSl9X2ZldGNoSGVhbHRoUGlsbHModCxyKXtsZXQgbj17bm9kZV9uYW1lczpKU09OLnN0cmluZ2lmeSh0KSxydW46Il9fZGVidWdnZXJfZGF0YV9fIn07ciE9PXZvaWQgMCYmKG4uc3RlcD1yKTtsZXQgaT12ZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9oZWFsdGhfcGlsbHMiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdChpLG4pfV9mZXRjaERlYnVnZ2VyTnVtZXJpY3NBbGVydHMoKXtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh2ZSgpLnBsdWdpblJvdXRlKCJkZWJ1Z2dlciIsIi9udW1lcmljc19hbGVydF9yZXBvcnQiKSl9X2dyYXBoVXJsKHQscixuKXtyZXR1cm4gdmUoKS5wbHVnaW5Sb3V0ZSgiZ3JhcGhzIiwiL2dyYXBoIixuZXcgVVJMU2VhcmNoUGFyYW1zKHtydW46dCxsaW1pdF9hdHRyX3NpemU6cixsYXJnZV9hdHRyc19rZXk6bn0pKX1fc2hvdWxkUmVxdWVzdEhlYWx0aFBpbGxzKCl7cmV0dXJuIHRoaXMuX2RlYnVnZ2VyRGF0YUVuYWJsZWQmJnRoaXMuaGVhbHRoUGlsbHNUb2dnbGVkT24mJnRoaXMuX3JlbmRlckhpZXJhcmNoeSYmdGhpcy5fZGF0YXNldHNTdGF0ZSh0aGlzLl9kYXRhc2V0c0ZldGNoZWQsdGhpcy5fZGF0YXNldHMsIlBSRVNFTlQiKX1fbWF5YmVJbml0aWFsaXplRGFzaGJvYXJkKCl7dmFyIHQ9dGhpcy5faXNBdHRhY2hlZDt0aGlzLl9pbml0aWFsaXplZHx8IXR8fCh0aGlzLnNldCgiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsbmV3IEp1KSx0aGlzLl9pbml0aWFsaXplZD0hMCx0aGlzLl9mZXRjaERhdGFzZXQoKS50aGVuKHI9PntsZXQgbj1PYmplY3Qua2V5cyhyKTt0aGlzLl9kYXRhc2V0cz1uLnNvcnQoeGgpLm1hcChpPT57bGV0IG89cltpXSxzPU9iamVjdC5rZXlzKG8udGFncykuc29ydCh4aCkubWFwKGM9Pm8udGFnc1tjXSkubWFwKCh7dGFnOmMsY29uY2VwdHVhbF9ncmFwaDp1LG9wX2dyYXBoOmgscHJvZmlsZTpmfSk9Pih7dGFnOmMsZGlzcGxheU5hbWU6Yyxjb25jZXB0dWFsR3JhcGg6dSxvcEdyYXBoOmgscHJvZmlsZTpmfSkpLGw9by5ydW5fZ3JhcGg/W3t0YWc6bnVsbCxkaXNwbGF5TmFtZToiRGVmYXVsdCIsY29uY2VwdHVhbEdyYXBoOiExLG9wR3JhcGg6ITAscHJvZmlsZTohMX0sLi4uc106cztyZXR1cm57bmFtZTppLHRhZ3M6bH19KSx0aGlzLl9kYXRhc2V0c0ZldGNoZWQ9ITB9KSl9X2RldGVybWluZVNlbGVjdGVkRGF0YXNldCgpe3ZhciB0PXRoaXMuX2RhdGFzZXRzRmV0Y2hlZCxyPXRoaXMuX2RhdGFzZXRzLG49dGhpcy5ydW47aWYoIW4pe3RoaXMuc2V0KCJfc2VsZWN0ZWREYXRhc2V0IiwwKTtyZXR1cm59bGV0IGk9ci5maW5kSW5kZXgobz0+by5uYW1lPT09bik7aWYoaT09PS0xKXtpZih0KXtsZXQgbz10aGlzLiQkKCIjZXJyb3ItZGlhbG9nIik7by50ZXh0Q29udGVudD1gTm8gZGF0YXNldCBuYW1lZCAiJHtufSIgY291bGQgYmUgZm91bmQuYCxvLm9wZW4oKX1yZXR1cm59dGhpcy5zZXQoIl9zZWxlY3RlZERhdGFzZXQiLGkpfV91cGRhdGVTZWxlY3RlZERhdGFzZXROYW1lKCl7dmFyIHQ9dGhpcy5fZGF0YXNldHNGZXRjaGVkLHI9dGhpcy5fZGF0YXNldHMsbj10aGlzLl9zZWxlY3RlZERhdGFzZXQ7IXR8fHIubGVuZ3RoPD1ufHx0aGlzLnNldCgicnVuIixyW25dLm5hbWUpfV9yZXF1ZXN0SGVhbHRoUGlsbHMoKXt0aGlzLnNldCgiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsITApO3ZhciB0PSsrdGhpcy5faGVhbHRoUGlsbFJlcXVlc3RJZDt0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIT09bnVsbCYmKHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZCksdGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsKSx0aGlzLmFsbFN0ZXBzTW9kZUVuYWJsZWQ/dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5faGVhbHRoUGlsbFN0ZXBSZXF1ZXN0VGltZXJJZD1udWxsLHRoaXMuX2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KX0uYmluZCh0aGlzKSx0aGlzLl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lckRlbGF5KTp0aGlzLl9pbml0aWF0ZU5ldHdvcmtSZXF1ZXN0Rm9ySGVhbHRoUGlsbHModCl9X2luaXRpYXRlTmV0d29ya1JlcXVlc3RGb3JIZWFsdGhQaWxscyh0KXtpZih0aGlzLl9oZWFsdGhQaWxsUmVxdWVzdElkIT09dClyZXR1cm47bGV0IHI9dGhpcy5hbGxTdGVwc01vZGVFbmFibGVkP3RoaXMuc3BlY2lmaWNIZWFsdGhQaWxsU3RlcDp2b2lkIDAsbj10aGlzLl9mZXRjaEhlYWx0aFBpbGxzKHRoaXMuX3JlbmRlckhpZXJhcmNoeS5nZXROYW1lc09mUmVuZGVyZWRPcHMoKSxyKSxpPXRoaXMuX2ZldGNoRGVidWdnZXJOdW1lcmljc0FsZXJ0cygpO1Byb21pc2UuYWxsKFtuLGldKS50aGVuKGZ1bmN0aW9uKG8pe3ZhciBhPW9bMF0scz1vWzFdO2lmKCEhdGhpcy5oZWFsdGhQaWxsc1RvZ2dsZWRPbiYmdD09PXRoaXMuX2hlYWx0aFBpbGxSZXF1ZXN0SWQpe2Zvcih2YXIgbCBpbiBhKXt0aGlzLnNldCgiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLGFbbF0ubGVuZ3RoLTEpO2JyZWFrfXRoaXMuc2V0KCJfZGVidWdnZXJOdW1lcmljQWxlcnRzIixzKSx0aGlzLnNldCgiX25vZGVOYW1lc1RvSGVhbHRoUGlsbHMiLGEpLHRoaXMuc2V0KCJfYXJlSGVhbHRoUGlsbHNMb2FkaW5nIiwhMSksdGhpcy5zZXQoIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIixudWxsKX19LmJpbmQodGhpcykpfV9kYXRhc2V0c1N0YXRlKHQscixuKXtyZXR1cm4gdD8hcnx8IXIubGVuZ3RoP249PT0iRU1QVFkiOm49PT0iUFJFU0VOVCI6bj09PSJOT1RfTE9BREVEIn1fcmVuZGVySGllcmFyY2h5Q2hhbmdlZCh0KXt0aGlzLnJlbG9hZCgpfV9oYW5kbGVOb2RlVG9nZ2xlRXhwYW5kKCl7dGhpcy5fbWF5YmVGZXRjaEhlYWx0aFBpbGxzKCl9X2hlYWx0aFBpbGxzVG9nZ2xlZE9uQ2hhbmdlZCh0KXt0P3RoaXMucmVsb2FkKCk6dGhpcy5zZXQoIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix7fSl9X21heWJlRmV0Y2hIZWFsdGhQaWxscygpeyF0aGlzLl9zaG91bGRSZXF1ZXN0SGVhbHRoUGlsbHMoKXx8dGhpcy5fcmVxdWVzdEhlYWx0aFBpbGxzKCl9fTtPci50ZW1wbGF0ZT1RYAogICAgPHBhcGVyLWRpYWxvZyBpZD0iZXJyb3ItZGlhbG9nIiB3aXRoLWJhY2tkcm9wPjwvcGFwZXItZGlhbG9nPgogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDx0Zi1ncmFwaC1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBjbGFzcz0ic2lkZWJhciIKICAgICAgICBzbG90PSJzaWRlYmFyIgogICAgICAgIGRldmljZXMtZm9yLXN0YXRzPSJ7e19kZXZpY2VzRm9yU3RhdHN9fSIKICAgICAgICBjb2xvci1ieS1wYXJhbXM9IltbX2NvbG9yQnlQYXJhbXNdXSIKICAgICAgICBzdGF0cz0iW1tfc3RhdHNdXSIKICAgICAgICBjb2xvci1ieT0ie3tfY29sb3JCeX19IgogICAgICAgIGRhdGFzZXRzPSJbW19kYXRhc2V0c11dIgogICAgICAgIHJlbmRlci1oaWVyYXJjaHk9IltbX3JlbmRlckhpZXJhcmNoeV1dIgogICAgICAgIHNlbGVjdGlvbj0ie3tfc2VsZWN0aW9ufX0iCiAgICAgICAgc2VsZWN0ZWQtZmlsZT0ie3tfc2VsZWN0ZWRGaWxlfX0iCiAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgaGVhbHRoLXBpbGxzLWZlYXR1cmUtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgIGhlYWx0aC1waWxscy10b2dnbGVkLW9uPSJ7e2hlYWx0aFBpbGxzVG9nZ2xlZE9ufX0iCiAgICAgICAgb24tZml0LXRhcD0iX2ZpdCIKICAgICAgICB0cmFjZS1pbnB1dHM9Int7X3RyYWNlSW5wdXRzfX0iCiAgICAgICAgYXV0by1leHRyYWN0LW5vZGVzPSJ7e19hdXRvRXh0cmFjdE5vZGVzfX0iCiAgICAgICAgb24tZG93bmxvYWQtaW1hZ2UtcmVxdWVzdGVkPSJfb25Eb3dubG9hZEltYWdlUmVxdWVzdGVkIgogICAgICA+PC90Zi1ncmFwaC1jb250cm9scz4KICAgICAgPGRpdgogICAgICAgIGNsYXNzJD0iY2VudGVyIFtbX2dldEdyYXBoRGlzcGxheUNsYXNzTmFtZShfc2VsZWN0ZWRGaWxlLCBfZGF0YXNldHMpXV0iCiAgICAgICAgc2xvdD0iY2VudGVyIgogICAgICA+CiAgICAgICAgPHRmLWdyYXBoLWRhc2hib2FyZC1sb2FkZXIKICAgICAgICAgIGlkPSJsb2FkZXIiCiAgICAgICAgICBkYXRhc2V0cz0iW1tfZGF0YXNldHNdXSIKICAgICAgICAgIHNlbGVjdGlvbj0iW1tfc2VsZWN0aW9uXV0iCiAgICAgICAgICBzZWxlY3RlZC1maWxlPSJbW19zZWxlY3RlZEZpbGVdXSIKICAgICAgICAgIG91dC1ncmFwaC1oaWVyYXJjaHk9Int7X2dyYXBoSGllcmFyY2h5fX0iCiAgICAgICAgICBvdXQtZ3JhcGg9Int7X2dyYXBofX0iCiAgICAgICAgICBvdXQtc3RhdHM9Int7X3N0YXRzfX0iCiAgICAgICAgICBwcm9ncmVzcz0ie3tfcHJvZ3Jlc3N9fSIKICAgICAgICAgIGhpZXJhcmNoeS1wYXJhbXM9IltbX2hpZXJhcmNoeVBhcmFtc11dIgogICAgICAgICAgY29tcGF0aWJpbGl0eS1wcm92aWRlcj0iW1tfY29tcGF0aWJpbGl0eVByb3ZpZGVyXV0iCiAgICAgICAgPjwvdGYtZ3JhcGgtZGFzaGJvYXJkLWxvYWRlcj4KICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLW1lc3NhZ2UiPgogICAgICAgICAgPGgzPk5vIGdyYXBoIGRlZmluaXRpb24gZmlsZXMgd2VyZSBmb3VuZC48L2gzPgogICAgICAgICAgPHA+CiAgICAgICAgICAgIFRvIHN0b3JlIGEgZ3JhcGgsIGNyZWF0ZSBhCiAgICAgICAgICAgIDxjb2RlPnRmLnN1bW1hcnkuRmlsZVdyaXRlcjwvY29kZT4KICAgICAgICAgICAgYW5kIHBhc3MgdGhlIGdyYXBoIGVpdGhlciB2aWEgdGhlIGNvbnN0cnVjdG9yLCBvciBieSBjYWxsaW5nIGl0cwogICAgICAgICAgICA8Y29kZT5hZGRfZ3JhcGgoKTwvY29kZT4gbWV0aG9kLiBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgb3V0IHRoZQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy50ZW5zb3JmbG93Lm9yZy90ZW5zb3Jib2FyZC9ncmFwaHMiCiAgICAgICAgICAgICAgPmV4YW1pbmluZyB0aGUgVGVuc29yRmxvdyBncmFwaCB0dXRvcmlhbDwvYQogICAgICAgICAgICA+LgogICAgICAgICAgPC9wPgoKICAgICAgICAgIDxwPgogICAgICAgICAgICBJZiB5b3XigJlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQKICAgICAgICAgICAgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQiCiAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBwZXJoYXBzIHRoZQogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgPlRlbnNvckJvYXJkIHR1dG9yaWFsPC9hCiAgICAgICAgICAgID4uCiAgICAgICAgICA8L3A+CgogICAgICAgICAgPHA+CiAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kI215LXRlbnNvcmJvYXJkLWlzbnQtc2hvd2luZy1hbnktZGF0YS13aGF0cy13cm9uZyIKICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICA+CiAgICAgICAgICAgIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImdyYXBoYm9hcmQiPgogICAgICAgICAgPHRmLWdyYXBoLWJvYXJkCiAgICAgICAgICAgIGlkPSJncmFwaGJvYXJkIgogICAgICAgICAgICBkZXZpY2VzLWZvci1zdGF0cz0iW1tfZGV2aWNlc0ZvclN0YXRzXV0iCiAgICAgICAgICAgIGNvbG9yLWJ5PSJ7e19jb2xvckJ5fX0iCiAgICAgICAgICAgIGNvbG9yLWJ5LXBhcmFtcz0ie3tfY29sb3JCeVBhcmFtc319IgogICAgICAgICAgICBncmFwaC1oaWVyYXJjaHk9IltbX2dyYXBoSGllcmFyY2h5XV0iCiAgICAgICAgICAgIGdyYXBoPSJbW19ncmFwaF1dIgogICAgICAgICAgICBoaWVyYXJjaHktcGFyYW1zPSJbW19oaWVyYXJjaHlQYXJhbXNdXSIKICAgICAgICAgICAgcHJvZ3Jlc3M9IltbX3Byb2dyZXNzXV0iCiAgICAgICAgICAgIGRlYnVnZ2VyLWRhdGEtZW5hYmxlZD0iW1tfZGVidWdnZXJEYXRhRW5hYmxlZF1dIgogICAgICAgICAgICBhcmUtaGVhbHRoLXBpbGxzLWxvYWRpbmc9IltbX2FyZUhlYWx0aFBpbGxzTG9hZGluZ11dIgogICAgICAgICAgICBkZWJ1Z2dlci1udW1lcmljLWFsZXJ0cz0iW1tfZGVidWdnZXJOdW1lcmljQWxlcnRzXV0iCiAgICAgICAgICAgIG5vZGUtbmFtZXMtdG8taGVhbHRoLXBpbGxzPSJbW19ub2RlTmFtZXNUb0hlYWx0aFBpbGxzXV0iCiAgICAgICAgICAgIGFsbC1zdGVwcy1tb2RlLWVuYWJsZWQ9Int7YWxsU3RlcHNNb2RlRW5hYmxlZH19IgogICAgICAgICAgICBzcGVjaWZpYy1oZWFsdGgtcGlsbC1zdGVwPSJ7e3NwZWNpZmljSGVhbHRoUGlsbFN0ZXB9fSIKICAgICAgICAgICAgaGVhbHRoLXBpbGwtc3RlcC1pbmRleD0iW1tfaGVhbHRoUGlsbFN0ZXBJbmRleF1dIgogICAgICAgICAgICByZW5kZXItaGllcmFyY2h5PSJ7e19yZW5kZXJIaWVyYXJjaHl9fSIKICAgICAgICAgICAgc2VsZWN0ZWQtbm9kZT0ie3tfc2VsZWN0ZWROb2RlfX0iCiAgICAgICAgICAgIHN0YXRzPSJbW19zdGF0c11dIgogICAgICAgICAgICB0cmFjZS1pbnB1dHM9IltbX3RyYWNlSW5wdXRzXV0iCiAgICAgICAgICAgIGF1dG8tZXh0cmFjdC1ub2Rlcz0iW1tfYXV0b0V4dHJhY3ROb2Rlc11dIgogICAgICAgICAgPjwvdGYtZ3JhcGgtYm9hcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgPHN0eWxlPgogICAgICA6aG9zdCAvZGVlcC8gewogICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICBwYXBlci1kaWFsb2cgewogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLW1lc3NhZ2UgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICAuZ3JhcGhib2FyZCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubm8tZ3JhcGggLmdyYXBoYm9hcmQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5jZW50ZXI6bm90KC5uby1ncmFwaCkgLm5vLWRhdGEtbWVzc2FnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgYSB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmspOwogICAgICB9CgogICAgICBhOnZpc2l0ZWQgewogICAgICAgIGNvbG9yOiB2YXIoLS10Yi1saW5rLXZpc2l0ZWQpOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RhdGFzZXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfZGF0YXNldHNGZXRjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX3NlbGVjdGVkRGF0YXNldCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX3JlbmRlckhpZXJhcmNoeUNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLGxvKV0sT3IucHJvdG90eXBlLCJfcmVuZGVySGllcmFyY2h5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sT3IucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsYW4pXSxPci5wcm90b3R5cGUsIl9jYW5jZWxsZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9kZWJ1Z2dlckRhdGFFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJhbGxTdGVwc01vZGVFbmFibGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwic3BlY2lmaWNIZWFsdGhQaWxsU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9oZWFsdGhQaWxsc1RvZ2dsZWRPbkNoYW5nZWQifSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsImhlYWx0aFBpbGxzVG9nZ2xlZE9uIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxPci5wcm90b3R5cGUsInNlbGVjdGVkTm9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2lzQXR0YWNoZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxPci5wcm90b3R5cGUsIl9pbml0aWFsaXplZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX2FyZUhlYWx0aFBpbGxzTG9hZGluZyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwiX2RlYnVnZ2VyTnVtZXJpY0FsZXJ0cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9ub2RlTmFtZXNUb0hlYWx0aFBpbGxzIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sT3IucHJvdG90eXBlLCJfaGVhbHRoUGlsbFJlcXVlc3RJZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9oZWFsdGhQaWxsU3RlcFJlcXVlc3RUaW1lcklkIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLE9yLnByb3RvdHlwZSwiX2hlYWx0aFBpbGxTdGVwUmVxdWVzdFRpbWVyRGVsYXkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLE9yLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZyxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9ydW5PYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sT3IucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sT3IucHJvdG90eXBlLCJfc2VsZWN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE9yLnByb3RvdHlwZSwiX2NvbXBhdGliaWxpdHlQcm92aWRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLE9yLnByb3RvdHlwZSwiX3RyYWNlSW5wdXRzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sT3IucHJvdG90eXBlLCJfYXV0b0V4dHJhY3ROb2RlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxPci5wcm90b3R5cGUsIl9zZWxlY3RlZEZpbGUiLHZvaWQgMCk7RShbQnQoIl9pc0F0dGFjaGVkIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9tYXliZUluaXRpYWxpemVEYXNoYm9hcmQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwicnVuIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxPci5wcm90b3R5cGUsIl9kZXRlcm1pbmVTZWxlY3RlZERhdGFzZXQiLG51bGwpO0UoW0J0KCJfZGF0YXNldHNGZXRjaGVkIiwiX2RhdGFzZXRzIiwiX3NlbGVjdGVkRGF0YXNldCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sT3IucHJvdG90eXBlLCJfdXBkYXRlU2VsZWN0ZWREYXRhc2V0TmFtZSIsbnVsbCk7T3I9RShbeXQoInRmLWdyYXBoLWRhc2hib2FyZCIpXSxPcik7dmFyIFJIPUVlKE9lKCksMSk7dmFyIGtyPVZyLE1hPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5tb2RlPSJvZmZzZXQiLHRoaXMudGltZVByb3BlcnR5PSJzdGVwIix0aGlzLmJpbnM9ImJpbnMiLHRoaXMueD0ieCIsdGhpcy5keD0iZHgiLHRoaXMueT0ieSIsdGhpcy5jb2xvclNjYWxlPWtyLnNjYWxlT3JkaW5hbChrci5zY2hlbWVDYXRlZ29yeTEwKSx0aGlzLm1vZGVUcmFuc2l0aW9uRHVyYXRpb249NTAwLHRoaXMuX25hbWU9bnVsbCx0aGlzLl9kYXRhPW51bGx9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuc2NvcGVTdWJ0cmVlKHRoaXMuJC5zdmcsITApfWF0dGFjaGVkKCl7dGhpcy5fYXR0YWNoZWQ9ITB9ZGV0YWNoZWQoKXt0aGlzLl9hdHRhY2hlZD0hMX1zZXRTZXJpZXNEYXRhKHQscil7dGhpcy5fbmFtZT10LHRoaXMuX2RhdGE9cix0aGlzLnJlZHJhdygpfV9yZWRyYXdPbkNoYW5nZSgpe3RoaXMucmVkcmF3KCl9cmVkcmF3KCl7dGhpcy5fZHJhdygwKX1fbW9kZVJlZHJhdygpe3RoaXMuX2RyYXcodGhpcy5tb2RlVHJhbnNpdGlvbkR1cmF0aW9uKX1fZHJhdyh0KXtpZighdGhpcy5fYXR0YWNoZWR8fCF0aGlzLl9kYXRhKXJldHVybjtpZih0PT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgX2RyYXcgbmVlZHMgZHVyYXRpb24iKTtpZih0aGlzLl9kYXRhLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIk5vdCBlbm91Z2ggc3RlcHMgaW4gdGhlIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmJpbnMpKXRocm93IG5ldyBFcnJvcigiTm8gYmlucyBwcm9wZXJ0eSBvZiAnIit0aGlzLmJpbnMrIicgaW4gZGF0YSIpO2lmKHRoaXMuX2RhdGFbMF1bdGhpcy5iaW5zXS5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJNdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGJpbiBpbiBiaW5zIGluIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueCkpdGhyb3cgbmV3IEVycm9yKCJObyB4IHByb3BlcnR5ICciK3RoaXMueCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMuZHgpKXRocm93IG5ldyBFcnJvcigiTm8gZHggcHJvcGVydHkgJyIrdGhpcy5keCsiJyBvbiBiaW5zIGRhdGEiKTtpZighdGhpcy5fZGF0YVswXVt0aGlzLmJpbnNdWzBdLmhhc093blByb3BlcnR5KHRoaXMueSkpdGhyb3cgbmV3IEVycm9yKCJObyB5IHByb3BlcnR5ICciK3RoaXMueSsiJyBvbiBiaW5zIGRhdGEiKTt2YXIgcj10aGlzLnRpbWVQcm9wZXJ0eSxuPXRoaXMueCxpPXRoaXMuYmlucyxvPXRoaXMuZHgsYT10aGlzLnkscz10aGlzLl9kYXRhLGw9dGhpcy5fbmFtZSxjPXRoaXMubW9kZSx1PWtyLmhjbCh0aGlzLmNvbG9yU2NhbGUobCkpLGg9a3Iuc2VsZWN0KHRoaXMuJC50b29sdGlwKSxmPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl19LHA9ZnVuY3Rpb24oTnQpe3JldHVybiBOdFthXX0sZD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W29dfSxnPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnRbbl0rTnRbb119LF89ZnVuY3Rpb24oTnQpe3JldHVybiBOdFtyXX07cj09PSJyZWxhdGl2ZSImJihfPWZ1bmN0aW9uKE50KXtyZXR1cm4gTnQud2FsbF90aW1lLXNbMF0ud2FsbF90aW1lfSk7dmFyIHk9dGhpcy4kLnN2Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4PXkud2lkdGgsYj15LmhlaWdodCxTLEM9e3RvcDo1LHJpZ2h0OjYwLGJvdHRvbToyMCxsZWZ0OjI0fTtjPT09Im9mZnNldCI/KFM9Yi8yLjUsQy50b3A9Uys1KTpTPWItQy50b3AtQy5ib3R0b207dmFyIFA9eC1DLmxlZnQtQy5yaWdodCxrPWItQy50b3AtQy5ib3R0b20sTz1rci5taW4ocyxmKSxEPWtyLm1heChzLGcpLEI9a3IuZm9ybWF0KCIuM24iKSxJPWtyLmZvcm1hdCgiLjBmIik7cj09PSJ3YWxsX3RpbWUiP0k9a3IudGltZUZvcm1hdCgiJW0vJWQgJVgiKTpyPT09InJlbGF0aXZlIiYmKEk9ZnVuY3Rpb24oTnQpe3JldHVybiBrci5mb3JtYXQoIi4xciIpKE50LzM2ZTUpKyJoIn0pO3ZhciBMPXMubWFwKGZ1bmN0aW9uKE50LHplKXtyZXR1cm5ba3IubWluKE50W2ldLGYpLGtyLm1heChOdFtpXSxnKV19KSxSPXMubWFwKGZ1bmN0aW9uKE50KXtyZXR1cm4ga3IuZXh0ZW50KE50W2ldLHApfSksRj01MDAsej1rci5leHRlbnQocyxfKSxVPShyPT09IndhbGxfdGltZSI/a3Iuc2NhbGVUaW1lKCk6a3Iuc2NhbGVMaW5lYXIoKSkuZG9tYWluKHopLnJhbmdlKFswLGM9PT0ib2Zmc2V0Ij9rOjBdKSxXPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFswLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gUlt6ZV1bMV19KV0pLnJhbmdlKFtTLDBdKSxaPWtyLnNjYWxlTGluZWFyKCkuZG9tYWluKFcuZG9tYWluKCkpLnJhbmdlKFtGLDBdKSxydD1rci5zY2FsZUxpbmVhcigpLmRvbWFpbihba3IubWluKHMsZnVuY3Rpb24oTnQsemUpe3JldHVybiBMW3plXVswXX0pLGtyLm1heChzLGZ1bmN0aW9uKE50LHplKXtyZXR1cm4gTFt6ZV1bMV19KV0pLm5pY2UoKS5yYW5nZShbMCxQXSksb3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4ocnQuZG9tYWluKCkpLnJhbmdlKFswLEZdKTtsZXQgc3Q9a3Iuc2NhbGVMaW5lYXIoKS5kb21haW4oa3IuZXh0ZW50KHMsXykpLnJhbmdlKFt1LmJyaWdodGVyKCksdS5kYXJrZXIoKV0pLmludGVycG9sYXRlKGtyLmludGVycG9sYXRlSGNsKTt2YXIgU3Q9a3IuYXhpc0JvdHRvbShydCkudGlja3MoTWF0aC5tYXgoMixQLzIwKSksYnQ9a3IuYXhpc1JpZ2h0KFUpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tGb3JtYXQoSSksTXQ9a3IuYXhpc1JpZ2h0KFcpLnRpY2tzKE1hdGgubWF4KDIsay8xNSkpLnRpY2tTaXplKFArNSkudGlja0Zvcm1hdChCKSxsdD1mdW5jdGlvbihOdCl7cmV0dXJuIE50W25dK050W29dLzJ9LEt0PWtyLmxpbmUoKS54KGZ1bmN0aW9uKE50KXtyZXR1cm4gb3QobHQoTnQpKX0pLnkoZnVuY3Rpb24oTnQpe3JldHVybiBaKE50W2FdKX0pLF90PWZ1bmN0aW9uKE50KXtyZXR1cm4iTSIrb3QobHQoTnRbMF0pKSsiLCIrWigwKSsiTCIrS3QoTnQpLnNsaWNlKDEpKyJMIitvdChsdChOdFtOdC5sZW5ndGgtMV0pKSsiLCIrWigwKX0sY3Q9dGhpcy4kLnN2ZyxYPWtyLnNlbGVjdChjdCksZXQ9WC50cmFuc2l0aW9uKCkuZHVyYXRpb24odCksZHQ9WC5zZWxlY3QoImciKS5jbGFzc2VkKCJzbWFsbCIsZnVuY3Rpb24oKXtyZXR1cm4gUD4wJiZQPD0xNTB9KS5jbGFzc2VkKCJtZWRpdW0iLGZ1bmN0aW9uKCl7cmV0dXJuIFA+MTUwJiZQPD0zMDB9KS5jbGFzc2VkKCJsYXJnZSIsZnVuY3Rpb24oKXtyZXR1cm4gUD4zMDB9KSxxPWV0LnNlbGVjdCgiZyIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK0MubGVmdCsiLCIrQy50b3ArIikiKSxwdD1rci5iaXNlY3RvcihnKS5sZWZ0LGh0PWR0LnNlbGVjdCgiLnN0YWdlIikub24oIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtUdC5zdHlsZSgib3BhY2l0eSIsMSksQ3Quc3R5bGUoIm9wYWNpdHkiLDEpLGF0LnN0eWxlKCJvcGFjaXR5IiwxKSxDZS5zdHlsZSgib3BhY2l0eSIsMSksaC5zdHlsZSgib3BhY2l0eSIsMSl9KS5vbigibW91c2VvdXQiLGZ1bmN0aW9uKCl7VHQuc3R5bGUoIm9wYWNpdHkiLDApLEN0LnN0eWxlKCJvcGFjaXR5IiwwKSxhdC5zdHlsZSgib3BhY2l0eSIsMCksQ2Uuc3R5bGUoIm9wYWNpdHkiLDApLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLCExKSxJdC5jbGFzc2VkKCJvdXRsaW5lLWhvdmVyIiwhMSksaC5zdHlsZSgib3BhY2l0eSIsMCl9KS5vbigibW91c2Vtb3ZlIixQdCksd3Q9aHQuc2VsZWN0KCIuYmFja2dyb3VuZCIpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKy1DLmxlZnQrIiwiKy1DLnRvcCsiKSIpLmF0dHIoIndpZHRoIix4KS5hdHRyKCJoZWlnaHQiLGIpLGt0PWh0LnNlbGVjdEFsbCgiLmhpc3RvZ3JhbSIpLmRhdGEocyksaWU9a3QuZXhpdCgpLnJlbW92ZSgpLGVlPWt0LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaXN0b2dyYW0iKSxMZT1lZS5tZXJnZShrdCkuc29ydChmdW5jdGlvbihOdCx6ZSl7cmV0dXJuIF8oTnQpLV8oemUpfSksYXI9cS5zZWxlY3RBbGwoIi5oaXN0b2dyYW0iKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKE50KXtyZXR1cm4idHJhbnNsYXRlKDAsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oTnQpKS1TOjApKyIpIn0pLGZyPWVlLmFwcGVuZCgibGluZSIpLmF0dHIoImNsYXNzIiwiYmFzZWxpbmUiKSx0dD1hci5zZWxlY3QoIi5iYXNlbGluZSIpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsZnVuY3Rpb24oTnQpe3JldHVybiBjPT09Im9mZnNldCI/LjE6MH0pLmF0dHIoInkxIixTKS5hdHRyKCJ5MiIsUykuYXR0cigieDIiLFApLCQ9ZWUuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJvdXRsaW5lIiksSXQ9TGUuc2VsZWN0KCIub3V0bGluZSIpLmF0dHIoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixmdW5jdGlvbihOdCl7cmV0dXJuIF90KE50W2ldKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLDEpLCR0PWFyLnNlbGVjdCgiLm91dGxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK1AvRisiLCAiK1MvRisiKSIpLnN0eWxlKCJzdHJva2UiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPyIiOnN0KF8oTnQpKX0pLnN0eWxlKCJmaWxsLW9wYWNpdHkiLGZ1bmN0aW9uKE50KXtyZXR1cm4gYz09PSJvZmZzZXQiPzE6MH0pLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pLGhlPWVlLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiaG92ZXIiKSxUdD1MZS5zZWxlY3QoIi5ob3ZlciIpLnN0eWxlKCJmaWxsIixmdW5jdGlvbihOdCl7cmV0dXJuIHN0KF8oTnQpKX0pO2hlLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiciIsMiksaGUuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigiZHgiLDQpO3ZhciBiZT1kdC5zZWxlY3QoIi54LWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ4Il0pLG50PWJlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLEN0PWJlLm1lcmdlKG50KTtudC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtMjApLmF0dHIoInkiLDYpLmF0dHIoIndpZHRoIiw0MCkuYXR0cigiaGVpZ2h0IiwxNCksbnQuYXBwZW5kKCJsaW5lIikuYXR0cigieDEiLDApLmF0dHIoIngyIiwwKS5hdHRyKCJ5MSIsMCkuYXR0cigieTIiLDYpLG50LmFwcGVuZCgidGV4dCIpLmF0dHIoImR5IiwxOCk7dmFyIFd0PWR0LnNlbGVjdCgiLnktYXhpcy1ob3ZlciIpLnNlbGVjdEFsbCgiLmxhYmVsIikuZGF0YShbInkiXSksZmU9V3QuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImxhYmVsIiksYXQ9V3QubWVyZ2UoZmUpO2ZlLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLDgpLmF0dHIoInkiLC02KS5hdHRyKCJ3aWR0aCIsNDApLmF0dHIoImhlaWdodCIsMTQpLGZlLmFwcGVuZCgibGluZSIpLmF0dHIoIngxIiwwKS5hdHRyKCJ4MiIsNikuYXR0cigieTEiLDApLmF0dHIoInkyIiwwKSxmZS5hcHBlbmQoInRleHQiKS5hdHRyKCJkeCIsOCkuYXR0cigiZHkiLDQpO3ZhciBzZT1kdC5zZWxlY3QoIi55LXNsaWNlLWF4aXMtaG92ZXIiKS5zZWxlY3RBbGwoIi5sYWJlbCIpLmRhdGEoWyJ5Il0pLFF0PXNlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJsYWJlbCIpLENlPXNlLm1lcmdlKFF0KTtRdC5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4Iiw4KS5hdHRyKCJ5IiwtNikuYXR0cigid2lkdGgiLDQwKS5hdHRyKCJoZWlnaHQiLDE0KSxRdC5hcHBlbmQoImxpbmUiKS5hdHRyKCJ4MSIsMCkuYXR0cigieDIiLDYpLmF0dHIoInkxIiwwKS5hdHRyKCJ5MiIsMCksUXQuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZHgiLDgpLmF0dHIoImR5Iiw0KSxxLnNlbGVjdCgiLnkuYXhpcy5zbGljZSIpLnN0eWxlKCJvcGFjaXR5IixjPT09Im9mZnNldCI/MDoxKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIisoYz09PSJvZmZzZXQiPy1TOjApKyIpIikuY2FsbChNdCkscS5zZWxlY3QoIi54LmF4aXMiKS5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoMCwgIitrKyIpIikuY2FsbChTdCkscS5zZWxlY3QoIi55LmF4aXMiKS5zdHlsZSgib3BhY2l0eSIsYz09PSJvZmZzZXQiPzE6MCkuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrUCsiLCAiKyhjPT09Im9mZnNldCI/MDprKSsiKSIpLmNhbGwoYnQpLHEuc2VsZWN0QWxsKCIudGljayB0ZXh0IikuYXR0cigiZmlsbCIsIiNhYWEiKSxxLnNlbGVjdEFsbCgiLmF4aXMgcGF0aC5kb21haW4iKS5hdHRyKCJzdHJva2UiLCJub25lIik7ZnVuY3Rpb24gUHQoKXt2YXIgTnQ9a3IubW91c2UodGhpcyksemU9cnQuaW52ZXJ0KE50WzBdKSx5bj1VLmludmVydChOdFsxXSk7ZnVuY3Rpb24gV2koY24pe3JldHVybiBNYXRoLm1pbihjbltpXS5sZW5ndGgtMSxwdChjbltpXSx6ZSkpfXZhciBBcixQYT0xLzAsaG87VHQuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbixjeCl7dmFyIHJwPVdpKGNuKTtobz1jbjt2YXIgSz1ydChjbltpXVtycF1bbl0rY25baV1bcnBdW29dLzIpLGd0PVcoY25baV1bcnBdW2FdKSxFdD1jPT09Im9mZnNldCI/VShfKGNuKSktKFMtZ3QpOmd0LHh0PU1hdGguYWJzKE50WzFdLUV0KTtyZXR1cm4geHQ8UGEmJihQYT14dCxBcj1jbiksInRyYW5zbGF0ZSgiK0srIiwiK2d0KyIpIn0pLFR0LnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3ZhciBjeD1XaShjbik7cmV0dXJuIGNuW2ldW2N4XVthXX0pLFR0LmNsYXNzZWQoImhvdmVyLWNsb3Nlc3QiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pLEl0LmNsYXNzZWQoIm91dGxpbmUtaG92ZXIiLGZ1bmN0aW9uKGNuKXtyZXR1cm4gY249PT1Bcn0pO3ZhciBJYT1XaShobyk7Q3QuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK3J0KGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMikrIiwgIitrKyIpIn0pLnNlbGVjdCgidGV4dCIpLnRleHQoZnVuY3Rpb24oY24pe3JldHVybiBCKGhvW2ldW0lhXVtuXStob1tpXVtJYV1bb10vMil9KTt2YXIgbHg9YnQudGlja0Zvcm1hdCgpO2F0LmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oY24pe3JldHVybiJ0cmFuc2xhdGUoIitQKyIsICIrKGM9PT0ib2Zmc2V0Ij9VKF8oQXIpKTowKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyIiOiJub25lIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGx4KF8oQXIpKX0pO3ZhciBjbT1NdC50aWNrRm9ybWF0KCk7Q2UuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihjbil7cmV0dXJuInRyYW5zbGF0ZSgiK1ArIiwgIisoYz09PSJvZmZzZXQiPzA6VyhBcltpXVtJYV1bYV0pKSsiKSJ9KS5zdHlsZSgiZGlzcGxheSIsYz09PSJvZmZzZXQiPyJub25lIjoiIikuc2VsZWN0KCJ0ZXh0IikudGV4dChmdW5jdGlvbihjbil7cmV0dXJuIGNtKEFyW2ldW0lhXVthXSl9KTt2YXIgSjA9a3IubW91c2UoY3QpO2guc3R5bGUoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiKyhKMFswXSsxNSkrInB4LCIrKEowWzFdLTE1KSsicHgpIikuc2VsZWN0KCJzcGFuIikudGV4dChjPT09Im9mZnNldCI/Y20oQXJbaV1bSWFdW2FdKToocj09PSJzdGVwIj8ic3RlcCAiOiIiKStseChfKEFyKSkpfX19O01hLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJ0b29sdGlwIj48c3Bhbj48L3NwYW4+PC9kaXY+CiAgICA8c3ZnIGlkPSJzdmciPgogICAgICA8Zz4KICAgICAgICA8ZyBjbGFzcz0iYXhpcyB4Ij48L2c+CiAgICAgICAgPGcgY2xhc3M9ImF4aXMgeSI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJheGlzIHkgc2xpY2UiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ic3RhZ2UiPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImJhY2tncm91bmQiPjwvcmVjdD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9IngtYXhpcy1ob3ZlciI+PC9nPgogICAgICAgIDxnIGNsYXNzPSJ5LWF4aXMtaG92ZXIiPjwvZz4KICAgICAgICA8ZyBjbGFzcz0ieS1zbGljZS1heGlzLWhvdmVyIj48L2c+CiAgICAgIDwvZz4KICAgIDwvc3ZnPgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6ICNmZmY7CiAgICAgICAgLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yOiAjZmZmOwogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcjogIzAwMDsKICAgICAgfQoKICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItYmctY29sb3I6IHZhcigKICAgICAgICAgIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWNvbG9yCiAgICAgICAgKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLW91dGxpbmUtY29sb3I6IHZhcigtLXBhcGVyLWdyZXktNjAwKTsKICAgICAgICAtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIHN2ZyB7CiAgICAgICAgZm9udC1mYW1pbHk6IHJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgfQoKICAgICAgLmJhY2tncm91bmQgewogICAgICAgIGZpbGwtb3BhY2l0eTogMDsKICAgICAgICBmaWxsOiByZWQ7CiAgICAgIH0KCiAgICAgIC5oaXN0b2dyYW0gewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuaG92ZXIgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGRvbWluYW50LWJhc2VsaW5lOiBtaWRkbGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyIGNpcmNsZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICAgIHN0cm9rZS13aWR0aDogMXB4OwogICAgICB9CgogICAgICAuaG92ZXIgdGV4dCB7CiAgICAgICAgZmlsbDogYmxhY2s7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLmhvdmVyLmhvdmVyLWNsb3Nlc3QgY2lyY2xlIHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1vdXRsaW5lLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuaG92ZXIuaG92ZXItY2xvc2VzdCB0ZXh0IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuYmFzZWxpbmUgewogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTsKICAgICAgfQoKICAgICAgLm91dGxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1vdXRsaW5lLWNvbG9yKTsKICAgICAgICBzdHJva2Utb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAub3V0bGluZS5vdXRsaW5lLWhvdmVyIHsKICAgICAgICBzdHJva2U6IHZhcigtLXZ6LWhpc3RvZ3JhbS10aW1lc2VyaWVzLWhvdmVyLW91dGxpbmUtY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIsCiAgICAgIC55LWF4aXMtaG92ZXIsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIC5sYWJlbCwKICAgICAgLnktYXhpcy1ob3ZlciAubGFiZWwsCiAgICAgIC55LXNsaWNlLWF4aXMtaG92ZXIgLmxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICB0ZXh0LWFuY2hvcjogZW5kOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHRleHQgewogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgIH0KCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICB0ZXh0LWFuY2hvcjogc3RhcnQ7CiAgICAgIH0KCiAgICAgIC54LWF4aXMtaG92ZXIgbGluZSwKICAgICAgLnktYXhpcy1ob3ZlciBsaW5lLAogICAgICAueS1zbGljZS1heGlzLWhvdmVyIGxpbmUgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAueC1heGlzLWhvdmVyIHJlY3QsCiAgICAgIC55LWF4aXMtaG92ZXIgcmVjdCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciByZWN0IHsKICAgICAgICBmaWxsOiB2YXIoLS12ei1oaXN0b2dyYW0tdGltZXNlcmllcy1ob3Zlci1iZy1jb2xvcik7CiAgICAgIH0KCiAgICAgICN0b29sdGlwLAogICAgICAueC1heGlzLWhvdmVyIHRleHQsCiAgICAgIC55LWF4aXMtaG92ZXIgdGV4dCwKICAgICAgLnktc2xpY2UtYXhpcy1ob3ZlciB0ZXh0IHsKICAgICAgICBjb2xvcjogdmFyKC0tdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMtaG92ZXItb3V0bGluZS1jb2xvcik7CiAgICAgIH0KCiAgICAgIC5heGlzIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC5heGlzIHBhdGguZG9tYWluIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICB9CgogICAgICAuYXhpcyAudGljayBsaW5lIHsKICAgICAgICBzdHJva2U6ICNkZGQ7CiAgICAgIH0KCiAgICAgIC5heGlzLnNsaWNlIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICB9CgogICAgICAuYXhpcy5zbGljZSAudGljayBsaW5lIHsKICAgICAgICBzdHJva2UtZGFzaGFycmF5OiAyOwogICAgICB9CgogICAgICAuc21hbGwgLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6Zmlyc3Qtb2YtdHlwZSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuc21hbGwgLmF4aXMgLnRpY2s6bGFzdC1vZi10eXBlIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5tZWRpdW0gLmF4aXMgdGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAubWVkaXVtIC5heGlzIC50aWNrOm50aC1jaGlsZCgybiArIDEpIHRleHQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5sYXJnZSAuYXhpcyAudGljazpudGgtY2hpbGQoMm4gKyAxKSB0ZXh0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwibW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsInRpbWVQcm9wZXJ0eSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxNYS5wcm90b3R5cGUsImJpbnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ4Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE1hLnByb3RvdHlwZSwiZHgiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sTWEucHJvdG90eXBlLCJ5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLE1hLnByb3RvdHlwZSwiY29sb3JTY2FsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxNYS5wcm90b3R5cGUsIm1vZGVUcmFuc2l0aW9uRHVyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxNYS5wcm90b3R5cGUsIl9hdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxNYS5wcm90b3R5cGUsIl9uYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sTWEucHJvdG90eXBlLCJfZGF0YSIsdm9pZCAwKTtFKFtCdCgidGltZVByb3BlcnR5IiwiY29sb3JTY2FsZSIsIl9hdHRhY2hlZCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sTWEucHJvdG90eXBlLCJfcmVkcmF3T25DaGFuZ2UiLG51bGwpO0UoW0J0KCJtb2RlIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxNYS5wcm90b3R5cGUsIl9tb2RlUmVkcmF3IixudWxsKTtNYT1FKFt5dCgidnotaGlzdG9ncmFtLXRpbWVzZXJpZXMiKV0sTWEpO2Z1bmN0aW9uIHB1cihlKXtsZXRbdCxyLG5dPWU7cmV0dXJue3dhbGxfdGltZTp0LHN0ZXA6cixtaW46TG0obi5tYXAoKFtpLCxdKT0+aSkpLG1heDpsdShuLm1hcCgoWyxpXSk9PmkpKSxidWNrZXRzOm4ubWFwKChbaSxvLGFdKT0+KHtsZWZ0OmkscmlnaHQ6byxjb3VudDphfSkpfX1mdW5jdGlvbiBkdXIoZSx0LHIsbj0zMCl7KHQ9PT12b2lkIDB8fHI9PW51bGwpJiYodD0wLHI9MCkscj09PXQmJihyPXQqMS4xKzEsdD10LzEuMS0xKTtsZXQgaT0oci10KS9uLG89MCxhPVtdO2ZvcihsZXQgcz0wO3M8bjtzKyspe2xldCBsPXQrcyppLGM9bCtpLHU9MDtmb3IoO288ZS5idWNrZXRzLmxlbmd0aDspe2xldCBoPU1hdGgubWluKHIsZS5idWNrZXRzW29dLnJpZ2h0KSxmPU1hdGgubWF4KHQsZS5idWNrZXRzW29dLmxlZnQpO2lmKGgtZj4wKXtsZXQgZD1NYXRoLm1pbihoLGMpLU1hdGgubWF4KGYsbCksZz1kLyhoLWYpKmUuYnVja2V0c1tvXS5jb3VudDt1Kz1kPjA/ZzowfWVsc2V7bGV0IGQ9Yz49cjt1Kz1sPD1mJiYoZD9oPD1jOmg8Yyk/ZS5idWNrZXRzW29dLmNvdW50OjB9aWYoaD5jKWJyZWFrO28rK31hLnB1c2goe3g6bCxkeDppLHk6dX0pfXJldHVybiBhfWZ1bmN0aW9uIHJjZShlKXtsZXQgdD1lLm1hcChwdXIpLHI9TG0odCxpPT5pLm1pbiksbj1sdSh0LGk9PmkubWF4KTtyZXR1cm4gdC5tYXAoaT0+KHt3YWxsX3RpbWU6aS53YWxsX3RpbWUsc3RlcDppLnN0ZXAsYmluczpkdXIoaSxyLG4pfSkpfXZhciBFYT1jbGFzcyBleHRlbmRzIGtTKEd0KG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZ2V0RGF0YUxvYWROYW1lPSh7cnVuOnR9KT0+dCx0aGlzLnJlcXVlc3REYXRhPSh0LHIsbik9PntsZXQgbz12ZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL2hpc3RvZ3JhbXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9Q24obyx7dGFnOmEudGFnLHJ1bjphLnJ1bn0pO3JldHVybiB0aGlzLnJlcXVlc3RNYW5hZ2VyLnJlcXVlc3QocykudGhlbihsPT52b2lkIHIoe2l0ZW06YSxkYXRhOmx9KSl9KSkuZmluYWxseSgoKT0+dm9pZCBuKCkpfSx0aGlzLmxvYWREYXRhQ2FsbGJhY2s9KHQscixuKT0+e2xldCBpPXJjZShuKSxvPXRoaXMuZ2V0RGF0YUxvYWROYW1lKHIpO3RoaXMuJC5jaGFydC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbj1mbix0aGlzLl9leHBhbmRlZD0hMX1fcmVsb2FkT25SdW5UYWdSZXF1ZXN0TWFuYWdlckNoYW5nZSgpe3RoaXMucmVsb2FkKCl9X3VwZGF0ZURhdGFUb0xvYWQoKXt2YXIgdD10aGlzLnJ1bixyPXRoaXMudGFnO3RoaXMuZGF0YVRvTG9hZD1be3J1bjp0LHRhZzpyfV19Z2V0IF9ydW5Db2xvcigpe3ZhciB0PXRoaXMucnVuO3JldHVybiB0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb24odCl9cmVkcmF3KCl7dGhpcy4kLmNoYXJ0LnJlZHJhdygpfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9fTtFYS50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIHJ1bj0iW1tydW5dXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICAgIGNvbG9yPSJbW19ydW5Db2xvcl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPCEtLQogICAgICBUaGUgbWFpbiBoaXN0b2dyYW0gdGhhdCB3ZSByZW5kZXIuIERhdGEgaXMgc2V0IGRpcmVjdGx5IHdpdGgKICAgICAgXGBzZXRTZXJpZXNEYXRhXGAsIG5vdCB3aXRoIGEgYm91bmQgcHJvcGVydHkuCiAgICAtLT4KICAgIDx2ei1oaXN0b2dyYW0tdGltZXNlcmllcwogICAgICBpZD0iY2hhcnQiCiAgICAgIHRpbWUtcHJvcGVydHk9IltbdGltZVByb3BlcnR5XV0iCiAgICAgIG1vZGU9IltbaGlzdG9ncmFtTW9kZV1dIgogICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZUZ1bmN0aW9uXV0iCiAgICA+PC92ei1oaXN0b2dyYW0tdGltZXNlcmllcz4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDMzMHB4OwogICAgICAgIGhlaWdodDogMjM1cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogNzAwcHg7CiAgICAgICAgaGVpZ2h0OiA1MDBweDsKICAgICAgfQoKICAgICAgdnotaGlzdG9ncmFtLXRpbWVzZXJpZXMgewogICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICB3aWR0aDogOTAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJydW4iLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sRWEucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sRWEucHJvdG90eXBlLCJnZXREYXRhTG9hZE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxFYS5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEVhLnByb3RvdHlwZSwibG9hZERhdGFDYWxsYmFjayIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxFYS5wcm90b3R5cGUsInRhZ01ldGFkYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwidGltZVByb3BlcnR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEVhLnByb3RvdHlwZSwiaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLEVhLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxFYS5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtCdCgicnVuIiwidGFnIiwicmVxdWVzdE1hbmFnZXIiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3JlbG9hZE9uUnVuVGFnUmVxdWVzdE1hbmFnZXJDaGFuZ2UiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEVhLnByb3RvdHlwZSwiX3VwZGF0ZURhdGFUb0xvYWQiLG51bGwpO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxFYS5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RWE9RShbeXQoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKV0sRWEpO3ZhciBscz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX2hpc3RvZ3JhbU1vZGU9Im9mZnNldCIsdGhpcy5fdGltZVByb3BlcnR5PSJzdGVwIix0aGlzLl9yZXN0YW1wPSExLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZX1fcmVkcmF3Q2F0ZWdvcnlQYW5lKHQscil7IXJ8fHQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLWhpc3RvZ3JhbS1sb2FkZXIiKS5mb3JFYWNoKG49Pm4ucmVkcmF3KCkpfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEhpc3RvZ3JhbXMoKX0pfV9mZXRjaFRhZ3MoKXtsZXQgdD12ZSgpLnBsdWdpblJvdXRlKCJoaXN0b2dyYW1zIiwiL3RhZ3MiKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIucmVxdWVzdCh0KS50aGVuKHI9PntpZihSSC5pc0VxdWFsKHIsdGhpcy5fcnVuVG9UYWdJbmZvKSlyZXR1cm47bGV0IG49UkgubWFwVmFsdWVzKHIsbz0+T2JqZWN0LmtleXMobykpLGk9JGkobik7dGhpcy5zZXQoIl9kYXRhTm90Rm91bmQiLGkubGVuZ3RoPT09MCksdGhpcy5zZXQoIl9ydW5Ub1RhZyIsbiksdGhpcy5zZXQoIl9ydW5Ub1RhZ0luZm8iLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkSGlzdG9ncmFtcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaGlzdG9ncmFtLWxvYWRlciIpLmZvckVhY2gocj0+e3IucmVsb2FkKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcixpPXRoaXMuX2NhdGVnb3JpZXNEb21SZWFkeTtyZXR1cm4gUWwodCxyLG4pfV90YWdNZXRhZGF0YSh0LHIsbil7cmV0dXJuIHRbcl1bbl19fTtscy50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJoaXN0b2dyYW1Nb2RlU2VsZWN0b3IiCiAgICAgICAgICAgICAgbmFtZT0iSGlzdG9ncmFtIG1vZGUiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X2hpc3RvZ3JhbU1vZGV9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9Im92ZXJsYXkiPm92ZXJsYXk8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJvZmZzZXQiPm9mZnNldDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPHRmLW9wdGlvbi1zZWxlY3RvcgogICAgICAgICAgICAgIGlkPSJ0aW1lUHJvcGVydHlTZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJPZmZzZXQgdGltZSBheGlzIgogICAgICAgICAgICAgIHNlbGVjdGVkLWlkPSJ7e190aW1lUHJvcGVydHl9fSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9InN0ZXAiPnN0ZXA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJ3YWxsX3RpbWUiPndhbGw8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgPC90Zi1vcHRpb24tc2VsZWN0b3I+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaGlzdG9ncmFtIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGhpc3RvZ3JhbSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtaGlzdG9ncmFtLWxvYWRlcgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgdGFnLW1ldGFkYXRhPSJbW190YWdNZXRhZGF0YShfcnVuVG9UYWdJbmZvLCBpdGVtLnJ1biwgaXRlbS50YWcpXV0iCiAgICAgICAgICAgICAgICAgIHRpbWUtcHJvcGVydHk9IltbX3RpbWVQcm9wZXJ0eV1dIgogICAgICAgICAgICAgICAgICBoaXN0b2dyYW0tbW9kZT0iW1tfaGlzdG9ncmFtTW9kZV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1oaXN0b2dyYW0tbG9hZGVyPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfaGlzdG9ncmFtTW9kZSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxscy5wcm90b3R5cGUsIl90aW1lUHJvcGVydHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGxzLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxscy5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxscy5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sbHMucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbHMucHJvdG90eXBlLCJfcmVzdGFtcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLGxzLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfcnVuVG9UYWciLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGxzLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO2xzPUUoW3l0KCJ0Zi1oaXN0b2dyYW0tZGFzaGJvYXJkIildLGxzKTt2YXIgdTM9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49ITApe3RoaXMuX2FwaVVybD10LHRoaXMuX3JlcXVlc3RNYW5hZ2VyPXIsdGhpcy5fdXNlSHR0cEdldD1ufWdldEV4cGVyaW1lbnQodCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJleHBlcmltZW50Iix0KX1nZXREb3dubG9hZFVybCh0LHIsbil7cmV0dXJuIHRoaXMuX2FwaVVybCsiL2Rvd25sb2FkX2RhdGE/IituZXcgVVJMU2VhcmNoUGFyYW1zKHtmb3JtYXQ6dCxjb2x1bW5zVmlzaWJpbGl0eTpKU09OLnN0cmluZ2lmeShuKSxyZXF1ZXN0OkpTT04uc3RyaW5naWZ5KHIpfSl9bGlzdFNlc3Npb25Hcm91cHModCl7cmV0dXJuIHRoaXMuX3NlbmRSZXF1ZXN0KCJzZXNzaW9uX2dyb3VwcyIsdCl9bGlzdE1ldHJpY0V2YWxzKHQpe3JldHVybiB0aGlzLl9zZW5kUmVxdWVzdCgibWV0cmljX2V2YWxzIix0KX1fc2VuZFJlcXVlc3QodCxyKXtpZih0aGlzLl91c2VIdHRwR2V0KXtsZXQgbz1lbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocikpLGE9dGhpcy5fYXBpVXJsKyIvIit0KyI/cmVxdWVzdD0iK287cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QoYSl9bGV0IG49bmV3IFV4O24ud2l0aENyZWRlbnRpYWxzPSEwLG4ubWV0aG9kVHlwZT1BbS5QT1NULG4uY29udGVudFR5cGU9InRleHQvcGxhaW4iLG4uYm9keT1KU09OLnN0cmluZ2lmeShyKTtsZXQgaT10aGlzLl9hcGlVcmwrIi8iK3Q7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3RXaXRoT3B0aW9ucyhpLG4pfX07dmFyIGZjZT1FZShPZSgpLDEpO3ZhciBOSD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm9yaWVudGF0aW9uPSJob3Jpem9udGFsIn19O05ILnRlbXBsYXRlPVFgCiAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIDpob3N0IHNsb3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICA6aG9zdCA6OnNsb3R0ZWQoKikgewogICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgc2xvdCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pIHNsb3QgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlcjogMCBzb2xpZCB2YXIoLS1kaXZpZGVyLWNvbG9yLCAjY2NjKTsKICAgICAgfQoKICAgICAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSA6OnNsb3R0ZWQoKjpub3QoOmxhc3QtY2hpbGQpKSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbS13aWR0aDogNXB4OwogICAgICB9CgogICAgICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgOjpzbG90dGVkKCo6bm90KDpsYXN0LWNoaWxkKSkgewogICAgICAgIGJvcmRlci1yaWdodC13aWR0aDogNXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmcscmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLE5ILnByb3RvdHlwZSwib3JpZW50YXRpb24iLHZvaWQgMCk7Tkg9RShbeXQoImhwYXJhbXMtc3BsaXQtbGF5b3V0IildLE5IKTt2YXIgY3M9e307S3MoY3Mse2NvbHVtblZhbHVlQnlJbmRleDooKT0+eDAsY29sdW1uVmFsdWVCeVZpc2libGVJbmRleDooKT0+RkgsZXVjbGlkZWFuRGlzdDooKT0+aDMsZmlsdGVyU2V0OigpPT5NdXIsZ2V0QWJzb2x1dGVDb2x1bW5JbmRleDooKT0+T0gsaGFzaE9mU3RyaW5nOigpPT5tY3QsaHBhcmFtTmFtZTooKT0+RmQsaHBhcmFtVmFsdWVCeUluZGV4OigpPT5hY2UsaHBhcmFtVmFsdWVCeU5hbWU6KCk9Pm9jZSxocGFyYW1WYWx1ZUJ5VmlzaWJsZUluZGV4OigpPT51Y2UsaXNOdWxsT3JVbmRlZmluZWQ6KCk9PmJ1cixsMk5vcm1TcXVhcmVkOigpPT5wMyxtZXRyaWNOYW1lOigpPT5RdSxtZXRyaWNWYWx1ZUJ5SW5kZXg6KCk9PnNjZSxtZXRyaWNWYWx1ZUJ5TmFtZTooKT0+ZjMsbWV0cmljVmFsdWVCeVZpc2libGVJbmRleDooKT0+ekgsbnVtQ29sdW1uczooKT0+aGN0LG51bUhQYXJhbXM6KCk9Pm5jZSxudW1NZXRyaWNzOigpPT5pY2UsbnVtVmlzaWJsZUNvbHVtbnM6KCk9Pl91cixudW1WaXNpYmxlSFBhcmFtczooKT0+bGNlLG51bVZpc2libGVNZXRyaWNzOigpPT5jY2UsbnVtZXJpY0NvbHVtbkV4dGVudDooKT0+ZmN0LHBvaW50VG9SZWN0YW5nbGVEaXN0OigpPT5oY2UscHJldHR5UHJpbnQ6KCk9PmIwLHByZXR0eVByaW50SFBhcmFtVmFsdWVCeU5hbWU6KCk9Pnl1cixwcmV0dHlQcmludE1ldHJpY1ZhbHVlQnlOYW1lOigpPT52dXIscXVhZFRyZWVWaXNpdFBvaW50c0luRGlzazooKT0+U3VyLHF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3Q6KCk9Pnd1cixyb3RhdGVTdHI6KCk9Pnh1cixzY2hlbWFDb2x1bW5OYW1lOigpPT51Y3Qsc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWU6KCk9Pmd1cixzZXNzaW9uR3JvdXBXaXRoTmFtZTooKT0+cGN0LHNldEFycmF5T2JzZXJ2YWJseTooKT0+ZGN0LHRyYW5zbGF0ZVN0cjooKT0+X1AsdmlzaWJsZU51bWVyaWNDb2x1bW5FeHRlbnQ6KCk9PmdQfSk7dmFyIERIPUVlKE9lKCksMSk7ZnVuY3Rpb24gRmQoZSl7cmV0dXJuIGUuZGlzcGxheU5hbWUhPT0iIiYmZS5kaXNwbGF5TmFtZSE9PXZvaWQgMD9lLmRpc3BsYXlOYW1lOmUubmFtZX1mdW5jdGlvbiBRdShlKXtpZihlLmRpc3BsYXlOYW1lIT09IiImJmUuZGlzcGxheU5hbWUhPT12b2lkIDApcmV0dXJuIGUuZGlzcGxheU5hbWU7bGV0IHQ9ZS5uYW1lLmdyb3VwLHI9ZS5uYW1lLnRhZztyZXR1cm4gdD09PXZvaWQgMCYmKHQ9IiIpLHI9PT12b2lkIDAmJihyPSIiKSx0PT09IiI/cjp0KyIuIityfWZ1bmN0aW9uIHVjdChlLHQpe2lmKHQ8ZS5ocGFyYW1Db2x1bW5zLmxlbmd0aClyZXR1cm4gRmQoZS5ocGFyYW1Db2x1bW5zW3RdLmhwYXJhbUluZm8pO2xldCByPXQtZS5ocGFyYW1Db2x1bW5zLmxlbmd0aDtyZXR1cm4gUXUoZS5tZXRyaWNDb2x1bW5zW3JdLm1ldHJpY0luZm8pfWZ1bmN0aW9uIG5jZShlKXtyZXR1cm4gZS5ocGFyYW1Db2x1bW5zLmxlbmd0aH1mdW5jdGlvbiBpY2UoZSl7cmV0dXJuIGUubWV0cmljQ29sdW1ucy5sZW5ndGh9ZnVuY3Rpb24gaGN0KGUpe3JldHVybiBuY2UoZSkraWNlKGUpfWZ1bmN0aW9uIG9jZShlLHQpe3JldHVybiBlW3RdfWZ1bmN0aW9uIGYzKGUsdCl7cmV0dXJuIGUuZmluZChyPT5ESC5pc0VxdWFsKHIubmFtZSx0KSl9ZnVuY3Rpb24gYWNlKGUsdCxyKXtyZXR1cm4gdC5ocGFyYW1zW2UuaHBhcmFtQ29sdW1uc1tyXS5ocGFyYW1JbmZvLm5hbWVdfWZ1bmN0aW9uIHNjZShlLHQscil7bGV0IG49ZS5tZXRyaWNDb2x1bW5zW3JdLm1ldHJpY0luZm8ubmFtZSxpPWYzKHQubWV0cmljVmFsdWVzLG4pO3JldHVybiBpPT09dm9pZCAwP3ZvaWQgMDppLnZhbHVlfWZ1bmN0aW9uIHgwKGUsdCxyKXtyZXR1cm4gcjxlLmhwYXJhbUNvbHVtbnMubGVuZ3RoP2FjZShlLHQscik6c2NlKGUsdCxyLWUuaHBhcmFtQ29sdW1ucy5sZW5ndGgpfWZ1bmN0aW9uIGZjdChlLHQscil7cmV0dXJuIGFhKHQsbj0+eDAoZSxuLHIpKX1mdW5jdGlvbiBPSChlLHQscil7bGV0IG47aWYocjx0LmhwYXJhbUluZm9zLmxlbmd0aCluPWUuaHBhcmFtQ29sdW1ucy5maW5kSW5kZXgoaT0+aS5ocGFyYW1JbmZvLm5hbWU9PT10LmhwYXJhbUluZm9zW3JdLm5hbWUpO2Vsc2V7bGV0IGk9ci10LmhwYXJhbUluZm9zLmxlbmd0aCxvPXQubWV0cmljSW5mb3NbaV0ubmFtZTtuPWUuaHBhcmFtQ29sdW1ucy5sZW5ndGgrZS5tZXRyaWNDb2x1bW5zLmZpbmRJbmRleChhPT5hLm1ldHJpY0luZm8ubmFtZT09PW8pfXJldHVybiBjb25zb2xlLmFzc2VydChuIT09LTEpLG59ZnVuY3Rpb24gZ3VyKGUsdCl7aWYodDxlLmhwYXJhbUluZm9zLmxlbmd0aClyZXR1cm4gRmQoZS5ocGFyYW1JbmZvc1t0XSk7bGV0IHI9dC1lLmhwYXJhbUluZm9zLmxlbmd0aDtyZXR1cm4gUXUoZS5tZXRyaWNJbmZvc1tyXSl9ZnVuY3Rpb24gbGNlKGUpe3JldHVybiBlLmhwYXJhbUluZm9zLmxlbmd0aH1mdW5jdGlvbiBjY2UoZSl7cmV0dXJuIGUubWV0cmljSW5mb3MubGVuZ3RofWZ1bmN0aW9uIF91cihlKXtyZXR1cm4gbGNlKGUpK2NjZShlKX1mdW5jdGlvbiBnUChlLHQscil7cmV0dXJuIGFhKHQsbj0+RkgoZSxuLHIpKX1mdW5jdGlvbiB5dXIoZSx0KXtyZXR1cm4gYjAob2NlKGUsdCkpfWZ1bmN0aW9uIHZ1cihlLHQpe3JldHVybiBiMChmMyhlLHQpKX1mdW5jdGlvbiBwY3QoZSx0KXtyZXR1cm4gZS5maW5kKHI9PnIubmFtZT09PXQpfWZ1bmN0aW9uIHVjZShlLHQscil7cmV0dXJuIHQuaHBhcmFtc1tlLmhwYXJhbUluZm9zW3JdLm5hbWVdfWZ1bmN0aW9uIHpIKGUsdCxyKXtsZXQgbj1lLm1ldHJpY0luZm9zW3JdLm5hbWUsaT1mMyh0Lm1ldHJpY1ZhbHVlcyxuKTtyZXR1cm4gaT09PXZvaWQgMD92b2lkIDA6aS52YWx1ZX1mdW5jdGlvbiBGSChlLHQscil7cmV0dXJuIHI8ZS5ocGFyYW1JbmZvcy5sZW5ndGg/dWNlKGUsdCxyKTp6SChlLHQsci1lLmhwYXJhbUluZm9zLmxlbmd0aCl9ZnVuY3Rpb24gYjAoZSl7cmV0dXJuIERILmlzTnVtYmVyKGUpP2UudG9QcmVjaXNpb24oNSk6ZT09PXZvaWQgMD8iIjplLnRvU3RyaW5nKCl9ZnVuY3Rpb24gcDMoZSx0KXtyZXR1cm4gZSplK3QqdH1mdW5jdGlvbiBoMyhlLHQscixuKXtyZXR1cm4gTWF0aC5zcXJ0KHAzKGUtcix0LW4pKX1mdW5jdGlvbiBoY2UoZSx0LHIsbixpLG8pe2lmKGU8ciYmdDxuKXJldHVybiBoMyhlLHQscixuKTtpZihyPD1lJiZlPGkmJnQ8bilyZXR1cm4gbi10O2lmKGk8PWUmJnQ8bilyZXR1cm4gaDMoZSx0LGksbik7aWYoZTxyJiZuPD10JiZ0PG8pcmV0dXJuIHItZTtpZihyPD1lJiZlPGkmJm48PXQmJnQ8bylyZXR1cm4gMDtpZihpPD1lJiZuPD10JiZ0PG8pcmV0dXJuIGUtaTtpZihlPHImJm88PXQpcmV0dXJuIGgzKGUsdCxyLG8pO2lmKHI8PWUmJmU8aSYmbzw9dClyZXR1cm4gdC1vO2lmKGk8PWUmJm88PXQpcmV0dXJuIGgzKGUsdCxpLG8pO3Rocm93IlBvaW50ICh4LHkpIG11c3QgYmUgaW4gb25lIG9mIHRoZSByZWdpb25zIGRlZmluZWQgYWJvdmUuIn1mdW5jdGlvbiBfUChlLHQpe3JldHVybiB0PT09dm9pZCAwPyJ0cmFuc2xhdGUoIitlKyIpIjoidHJhbnNsYXRlKCIrZSsiLCIrdCsiKSJ9ZnVuY3Rpb24geHVyKGUsdCxyKXtsZXQgbj0icm90YXRlKCIrZTtyZXR1cm4gdCE9PXZvaWQgMCYmciE9PXZvaWQgMCYmKG49bisiLCIrdCsiLCIrciksbj1uKyIpIixufWZ1bmN0aW9uIGJ1cihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiB3dXIoZSx0LHIsbixpLG8pe2UudmlzaXQoKGEscyxsLGMsdSk9PntpZihhLmxlbmd0aD09PXZvaWQgMCl7ZG97bGV0IGg9ZS54KCkoYS5kYXRhKSxmPWUueSgpKGEuZGF0YSk7dDw9aCYmaDxuJiZyPD1mJiZmPGkmJm8oYS5kYXRhKX13aGlsZShhPWEubmV4dCk7cmV0dXJuITB9cmV0dXJuIHM+PW58fGM8PXR8fGw+PWl8fHU8PXJ9KX1mdW5jdGlvbiBTdXIoZSx0LHIsbixpKXtlLnZpc2l0KChvLGEscyxsLGMpPT57aWYoby5sZW5ndGg9PT12b2lkIDApe2Rve2xldCB1PWUueCgpKG8uZGF0YSksaD1lLnkoKShvLmRhdGEpLGY9aDModCxyLHUsaCk7Zjw9biYmaShvLmRhdGEsZil9d2hpbGUobz1vLm5leHQpO3JldHVybiEwfXJldHVybiBoY2UodCxyLGEscyxsLGMpPm59KX1mdW5jdGlvbiBNdXIoZSx0KXtsZXQgcj1uZXcgU2V0O3JldHVybiBlLmZvckVhY2gobj0+e3QobikmJnIuYWRkKG4pfSkscn1mdW5jdGlvbiBkY3QoZSx0LHIpe2xldCBuPWUuZ2V0KHQsZSk7aWYoIUFycmF5LmlzQXJyYXkobikpe2Uuc2V0KHQscik7cmV0dXJufWUuc3BsaWNlLmFwcGx5KGUsW3QsMCxuLmxlbmd0aF0uY29uY2F0KHIpKX1mdW5jdGlvbiBtY3QoZSl7bGV0IHQ9MDtmb3IobGV0IHI9MDtyPGUubGVuZ3RoOysrcil0PXQqMzErZS5jaGFyQ29kZUF0KHIpJjQyOTQ5NjcyOTU7cmV0dXJuIHQrRUkoMiwzMSl9dmFyIHRpPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbmZpZ3VyYXRpb249e3NjaGVtYTp7aHBhcmFtQ29sdW1uczpBcnJheSgpLG1ldHJpY0NvbHVtbnM6QXJyYXkoKX0sY29sdW1uc1Zpc2liaWxpdHk6QXJyYXkoKSx2aXNpYmxlU2NoZW1hOntocGFyYW1JbmZvczpBcnJheSgpLG1ldHJpY0luZm9zOkFycmF5KCl9fSx0aGlzLnNlc3Npb25Hcm91cHM9W10sdGhpcy5kYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcz0hMSx0aGlzLmRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zPSExLHRoaXMuX3N0YXR1c2VzPVt7dmFsdWU6IlNUQVRVU19VTktOT1dOIixkaXNwbGF5TmFtZToiVW5rbm93biIsYWxsb3dlZDohMH0se3ZhbHVlOiJTVEFUVVNfU1VDQ0VTUyIsZGlzcGxheU5hbWU6IlN1Y2Nlc3MiLGFsbG93ZWQ6ITB9LHt2YWx1ZToiU1RBVFVTX0ZBSUxVUkUiLGRpc3BsYXlOYW1lOiJGYWlsdXJlIixhbGxvd2VkOiEwfSx7dmFsdWU6IlNUQVRVU19SVU5OSU5HIixkaXNwbGF5TmFtZToiUnVubmluZyIsYWxsb3dlZDohMH1dLHRoaXMuX2dldEV4cGVyaW1lbnRSZXNvbHZlZD1uZXcgUHJvbWlzZSh0PT57dGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQ9dH0pLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9wYWdlU2l6ZUlucHV0PXt2YWx1ZToiMTAwIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlTnVtYmVySW5wdXQ9e3ZhbHVlOiIxIixpbnZhbGlkOiExfSx0aGlzLl9wYWdlQ291bnRTdHI9Ij8iLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdSx0aGlzLl9wcmV0dHlQcmludD1iMH1yZWxvYWQoKXt0aGlzLl9xdWVyeVNlcnZlcigpfV9jc3ZVcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwiY3N2Iil9X2pzb25VcmwodCxyKXtyZXR1cm4gdGhpcy5fZG93bmxvYWREYXRhVXJsKHQsciwianNvbiIpfV9sYXRleFVybCh0LHIpe3JldHVybiB0aGlzLl9kb3dubG9hZERhdGFVcmwodCxyLCJsYXRleCIpfV9kb3dubG9hZERhdGFVcmwodCxyLG4pe2xldCBpPXIuY29sdW1uc1Zpc2liaWxpdHk7cmV0dXJuIHRoaXMuYmFja2VuZC5nZXREb3dubG9hZFVybChuLHQsaSl9X2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzKCl7bGV0IHQ9Y3M7aWYodC5pc051bGxPclVuZGVmaW5lZCh0aGlzLmJhY2tlbmQpfHx0LmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuZXhwZXJpbWVudE5hbWUpKXJldHVybjtsZXQgcj17ZXhwZXJpbWVudE5hbWU6dGhpcy5leHBlcmltZW50TmFtZX07dGhpcy5iYWNrZW5kLmdldEV4cGVyaW1lbnQocikudGhlbihuPT57ZmNlLmlzRXF1YWwobix0aGlzLl9leHBlcmltZW50KXx8KHRoaXMuc2V0KCJfZXhwZXJpbWVudCIsbiksdGhpcy5fY29tcHV0ZUhQYXJhbXMoKSx0aGlzLl9jb21wdXRlTWV0cmljcygpLHRoaXMuX3F1ZXJ5U2VydmVyKCksdGhpcy5fcmVzb2x2ZUdldEV4cGVyaW1lbnQoKSl9KS5maW5hbGx5KCgpPT57dGhpcy5fY29tcHV0ZURhdGFGb3VuZCgpfSl9X2NvbXB1dGVEYXRhRm91bmQoKXtsZXQgdD1Cb29sZWFuKHRoaXMuX2V4cGVyaW1lbnQmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQuaHBhcmFtSW5mb3MubGVuZ3RoPjAmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MmJnRoaXMuX2V4cGVyaW1lbnQubWV0cmljSW5mb3MubGVuZ3RoPjApO3RoaXMuc2V0KCJkYXRhTG9hZGVkV2l0aE5vbkVtcHR5SHBhcmFtcyIsdCksdGhpcy5zZXQoImRhdGFMb2FkZWRXaXRoRW1wdHlIcGFyYW1zIiwhdCl9X2NvbXB1dGVIUGFyYW1zKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5ocGFyYW1JbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixkaXNwbGF5ZWQ6aTw1LGZpbHRlcjp7fX07by5pbmZvLmhhc093blByb3BlcnR5KCJkb21haW5EaXNjcmV0ZSIpPyhvLmZpbHRlci5kb21haW5EaXNjcmV0ZT1bXSxvLmluZm8uZG9tYWluRGlzY3JldGUuZm9yRWFjaChhPT57by5maWx0ZXIuZG9tYWluRGlzY3JldGUucHVzaCh7dmFsdWU6YSxjaGVja2VkOiEwfSl9KSk6by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX0JPT0wiP28uZmlsdGVyLmRvbWFpbkRpc2NyZXRlPVt7dmFsdWU6ITEsY2hlY2tlZDohMH0se3ZhbHVlOiEwLGNoZWNrZWQ6ITB9XTpvLmluZm8udHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCI/by5maWx0ZXIuaW50ZXJ2YWw9e21pbjp7dmFsdWU6IiIsaW52YWxpZDohMX0sbWF4Ont2YWx1ZToiIixpbnZhbGlkOiExfX06by5pbmZvLnR5cGU9PT0iREFUQV9UWVBFX1NUUklORyI/by5maWx0ZXIucmVnZXhwPSIiOmNvbnNvbGUud2FybigidW5rbm93biBocGFyYW0uaW5mby50eXBlOiAlcyIsby5pbmZvLnR5cGUpLHQucHVzaChvKX0pLHRoaXMuc2V0KCJfaHBhcmFtcyIsdCl9X2NvbXB1dGVNZXRyaWNzKCl7bGV0IHQ9W107dGhpcy5fZXhwZXJpbWVudC5tZXRyaWNJbmZvcy5mb3JFYWNoKChuLGkpPT57bGV0IG89e2luZm86bixmaWx0ZXI6e2ludGVydmFsOnttaW46e3ZhbHVlOiIiLGludmFsaWQ6ITF9LG1heDp7dmFsdWU6IiIsaW52YWxpZDohMX19fSxkaXNwbGF5ZWQ6aTw1fTt0LnB1c2gobyl9KSx0aGlzLnNldCgiX21ldHJpY3MiLHQpfV9jb21wdXRlU2NoZW1hKCl7cmV0dXJuIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzP3tocGFyYW1Db2x1bW5zOltdLG1ldHJpY0NvbHVtbnM6W119OntocGFyYW1Db2x1bW5zOnRoaXMuX2hwYXJhbXMubWFwKHQ9Pih7aHBhcmFtSW5mbzp0LmluZm99KSksbWV0cmljQ29sdW1uczp0aGlzLl9tZXRyaWNzLm1hcCh0PT4oe21ldHJpY0luZm86dC5pbmZvfSkpfX1fdXBkYXRlQ29uZmlndXJhdGlvbigpe3RoaXMuZGVib3VuY2UoIl91cGRhdGVDb25maWd1cmF0aW9uIiwoKT0+e3RoaXMuY29uZmlndXJhdGlvbj17c2NoZW1hOnRoaXMuX2NvbXB1dGVTY2hlbWEoKSxjb2x1bW5zVmlzaWJpbGl0eTp0aGlzLl9jb21wdXRlQ29sdW1uc1Zpc2liaWxpdHkoKSx2aXNpYmxlU2NoZW1hOnRoaXMuX2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl9fSl9X2NvbXB1dGVDb2x1bW5zVmlzaWJpbGl0eSgpe3JldHVybiF0aGlzLl9ocGFyYW1zfHwhdGhpcy5fbWV0cmljcz9bXTp0aGlzLl9ocGFyYW1zLm1hcCh0PT50LmRpc3BsYXllZCkuY29uY2F0KHRoaXMuX21ldHJpY3MubWFwKHQ9PnQuZGlzcGxheWVkKSl9X2NvbXB1dGVWaXNpYmxlU2NoZW1hKCl7aWYoIXRoaXMuX2hwYXJhbXN8fCF0aGlzLl9tZXRyaWNzKXJldHVybntocGFyYW1JbmZvczpbXSxtZXRyaWNJbmZvczpbXX07bGV0IHQ9dGhpcy5faHBhcmFtcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pLHI9dGhpcy5fbWV0cmljcy5maWx0ZXIobj0+bi5kaXNwbGF5ZWQpLm1hcChuPT5uLmluZm8pO3JldHVybntocGFyYW1JbmZvczp0LG1ldHJpY0luZm9zOnJ9fV9xdWVyeVNlcnZlcigpe3RoaXMuZGVib3VuY2UoInF1ZXJ5U2VydmVyIiwoKT0+dGhpcy5fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCksMTAwKX1fcXVlcnlTZXJ2ZXJOb0RlYm91bmNlKCl7aWYoISghdGhpcy5faHBhcmFtc3x8IXRoaXMuX21ldHJpY3MpKXJldHVybiB0aGlzLl9zZW5kTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCkudGhlbih0aGlzLl9saXN0U2Vzc2lvbkdyb3Vwc0NhbmNlbGxlci5jYW5jZWxsYWJsZSgoe3ZhbHVlOnQsY2FuY2VsbGVkOnJ9KT0+e2lmKCFyKXtpZih0LnRvdGFsU2l6ZT49MCl7bGV0IG49K3RoaXMuX3BhZ2VTaXplSW5wdXQudmFsdWU7dGhpcy5zZXQoIl9wYWdlQ291bnRTdHIiLFN0cmluZyhNYXRoLmNlaWwodC50b3RhbFNpemUvbikpKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix0LnRvdGFsU2l6ZSl9ZWxzZSB0aGlzLnNldCgiX3BhZ2VDb3VudFN0ciIsIj8iKSx0aGlzLnNldCgiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIiwiVW5rbm93biIpO2RjdCh0aGlzLCJzZXNzaW9uR3JvdXBzIix0LnNlc3Npb25Hcm91cHMpfX0pKX1fc2VuZExpc3RTZXNzaW9uR3JvdXBzUmVxdWVzdCgpe2xldCB0PXRoaXMuX2J1aWxkTGlzdFNlc3Npb25Hcm91cHNSZXF1ZXN0KCk7aWYodCE9PW51bGwpcmV0dXJuIHRoaXMuc2V0KCJfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QiLHQpLHRoaXMuX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyLmNhbmNlbEFsbCgpLHRoaXMuYmFja2VuZC5saXN0U2Vzc2lvbkdyb3Vwcyh0KX1fYnVpbGRMaXN0U2Vzc2lvbkdyb3Vwc1JlcXVlc3QoKXtsZXQgdD10aGlzLHI9ITA7ZnVuY3Rpb24gbih1KXtsZXQgaD10LmdldCh1KyIubWluLnZhbHVlIik7Y29uc29sZS5hc3NlcnQoaCE9PXZvaWQgMCk7bGV0IGY9aD09PSIiPyItSW5maW5pdHkiOitoO3Quc2V0KHUrIi5taW4uaW52YWxpZCIsaXNOYU4oZikpLHI9ciYmIWlzTmFOKGYpO2xldCBwPXQuZ2V0KHUrIi5tYXgudmFsdWUiKTtjb25zb2xlLmFzc2VydChwIT09dm9pZCAwKTtsZXQgZD1wPT09IiI/IkluZmluaXR5IjorcDtyZXR1cm4gdC5zZXQodSsiLm1heC5pbnZhbGlkIixpc05hTihkKSkscj1yJiYhaXNOYU4oZCksaXNOYU4oZil8fGlzTmFOKGQpP251bGw6e21pblZhbHVlOmYsbWF4VmFsdWU6ZH19ZnVuY3Rpb24gaSh1KXtsZXQgaD10LmdldCh1KyIudmFsdWUiKTtjb25zb2xlLmFzc2VydChoIT09dm9pZCAwKTtsZXQgZj0raCxwPU51bWJlci5pc0ludGVnZXIoZikmJmY+MDtyZXR1cm4gdC5zZXQodSsiLmludmFsaWQiLCFwKSxyPXImJnAscD9mOm51bGx9bGV0IG89dGhpcy5fc3RhdHVzZXMuZmlsdGVyKHU9PnUuYWxsb3dlZCkubWFwKHU9PnUudmFsdWUpLGE9W107aWYodGhpcy5faHBhcmFtcy5mb3JFYWNoKCh1LGgpPT57bGV0IGY9e2hwYXJhbTp1LmluZm8ubmFtZX07dS5maWx0ZXIuZG9tYWluRGlzY3JldGU/KGYuZmlsdGVyRGlzY3JldGU9W10sdS5maWx0ZXIuZG9tYWluRGlzY3JldGUuZm9yRWFjaChwPT57cC5jaGVja2VkJiZmLmZpbHRlckRpc2NyZXRlLnB1c2gocC52YWx1ZSl9KSk6dS5maWx0ZXIuaW50ZXJ2YWw/Zi5maWx0ZXJJbnRlcnZhbD1uKCJfaHBhcmFtcy4iK2grIi5maWx0ZXIuaW50ZXJ2YWwiKTp1LmZpbHRlci5yZWdleHAmJihmLmZpbHRlclJlZ2V4cD11LmZpbHRlci5yZWdleHApLGEucHVzaChmKX0pLHRoaXMuX21ldHJpY3MuZm9yRWFjaCgodSxoKT0+e2xldCBmPXttZXRyaWM6dS5pbmZvLm5hbWUsZmlsdGVySW50ZXJ2YWw6bigiX21ldHJpY3MuIitoKyIuZmlsdGVyLmludGVydmFsIil9O2EucHVzaChmKX0pLHRoaXMuX3NvcnRCeUluZGV4IT09dm9pZCAwJiZ0aGlzLl9zb3J0RGlyZWN0aW9uIT09dm9pZCAwKXtpZighKHRoaXMuX3NvcnRCeUluZGV4IGluIGEpKXJldHVybiBjb25zb2xlLmVycm9yKCJObyBjb2x1bW4gaW4gY29sUGFyYW1zIHdpdGggaW5kZXggc29ydEJ5SW5kZXg6ICVzIix0aGlzLl9zb3J0QnlJbmRleCksbnVsbDthW3RoaXMuX3NvcnRCeUluZGV4XS5vcmRlcj10aGlzLl9zb3J0RGlyZWN0aW9uPT09MD8iT1JERVJfQVNDIjoiT1JERVJfREVTQyJ9bGV0IHM9aSgiX3BhZ2VOdW1iZXJJbnB1dCIpfHwwLGw9aSgiX3BhZ2VTaXplSW5wdXQiKXx8MDtpZighcilyZXR1cm4gbnVsbDtsZXQgYz1sKihzLTEpO3JldHVybntleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLGFsbG93ZWRTdGF0dXNlczpvLGNvbFBhcmFtczphLHN0YXJ0SW5kZXg6YyxzbGljZVNpemU6bH19X21ldHJpY1NvcnRCeUluZGV4KHQpe3JldHVybiB0K3RoaXMuX2hwYXJhbXMubGVuZ3RofX07dGkudGVtcGxhdGU9UWAKICAgIDxocGFyYW1zLXNwbGl0LWxheW91dCBvcmllbnRhdGlvbj0idmVydGljYWwiPgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIGh5cGVycGFyYW1ldGVycyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SHlwZXJwYXJhbWV0ZXJzPC9kaXY+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0ie3tfaHBhcmFtc319IiBhcz0iaHBhcmFtIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhwYXJhbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveAogICAgICAgICAgICAgIGNoZWNrZWQ9Int7aHBhcmFtLmRpc3BsYXllZH19IgogICAgICAgICAgICAgIGNsYXNzPSJocGFyYW0tY2hlY2tib3giCiAgICAgICAgICAgID4KICAgICAgICAgICAgICBbW19ocGFyYW1OYW1lKGhwYXJhbS5pbmZvKV1dCiAgICAgICAgICAgIDwvcGFwZXItY2hlY2tib3g+CiAgICAgICAgICAgIDwhLS0gUHJlY2lzZWx5IG9uZSBvZiB0aGUgdGVtcGxhdGVzIGJlbG93IHdpbGwgYmUgc3RhbXBlZC4tLT4KICAgICAgICAgICAgPCEtLSAxLiBBIGxpc3Qgb2YgY2hlY2tib3hlcyAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSI+CiAgICAgICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICAgICAgICAgIGl0ZW1zPSJbW2hwYXJhbS5maWx0ZXIuZG9tYWluRGlzY3JldGVdXSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICAgICAgY2hlY2tlZD0ie3tpdGVtLmNoZWNrZWR9fSIKICAgICAgICAgICAgICAgICAgY2xhc3M9ImRpc2NyZXRlLXZhbHVlLWNoZWNrYm94IgogICAgICAgICAgICAgICAgICBvbi1jaGFuZ2U9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgW1tfcHJldHR5UHJpbnQoaXRlbS52YWx1ZSldXQogICAgICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8IS0tIDIuIEEgbnVtZXJpYyBpbnRlcnZhbCAtLT4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWxdXSI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWluIgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWRfcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWRdXSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWF4IgogICAgICAgICAgICAgICAgdmFsdWU9Int7aHBhcmFtLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWRfcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJbW2hwYXJhbS5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWRdXSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwhLS0gMy4gQSByZWdleHAgLS0+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tocGFyYW0uZmlsdGVyLnJlZ2V4cF1dIj4KICAgICAgICAgICAgICA8cGFwZXItaW5wdXQKICAgICAgICAgICAgICAgIGxhYmVsPSJSZWd1bGFyIGV4cHJlc3Npb24iCiAgICAgICAgICAgICAgICB2YWx1ZT0ie3tocGFyYW0uZmlsdGVyLnJlZ2V4cH19IgogICAgICAgICAgICAgICAgb24tdmFsdWUtY2hhbmdlZD0iX3F1ZXJ5U2VydmVyIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gbWV0cmljcyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+TWV0cmljczwvZGl2PgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7X21ldHJpY3N9fSIgYXM9Im1ldHJpYyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRyaWMiPgogICAgICAgICAgICA8IS0tIFRPRE8oZXJleik6IE1ha2UgaXQgZWFzaWVyIHRvIGhhbmRsZSBhIGxhcmdlIG51bWJlciBvZgogICAgICAgICAgICAgICAgICBtZXRyaWNzOgogICAgICAgICAgICAgICAgICAxLiBBZGQgYW4gJ2lzb2xhdG9yJyByYWRpby1idXR0b24gdG8gc2VsZWN0IGp1c3Qgb25lCiAgICAgICAgICAgICAgICAgIG1ldHJpYyBhbmQKICAgICAgICAgICAgICAgICAgaGlkZSBhbGwgdGhlIHJlc3QKICAgICAgICAgICAgICAgICAgMi4gQWRkIGEgJ3RvZ2dsZS1hbGwnIGJ1dHRvbiB0aGF0IHdpbGwgaGlkZS91bmhpZGUKICAgICAgICAgICAgICAgICAgICBhbGwgdGhlCiAgICAgICAgICAgICAgICAgIG1ldHJpY3MuCiAgICAgICAgICAgICAgICAgIFVzZSBzaW1pbGFyIGxvZ2ljL2FwcGVhcmFuY2UgdG8gdGhlIHJ1bi1zZWxlY3RvciBvZgogICAgICAgICAgICAgICAgICBzY2FsYXJzLi0tPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3gKICAgICAgICAgICAgICBjaGVja2VkPSJ7e21ldHJpYy5kaXNwbGF5ZWR9fSIKICAgICAgICAgICAgICBjbGFzcz0ibWV0cmljLWNoZWNrYm94IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgW1tfbWV0cmljTmFtZShtZXRyaWMuaW5mbyldXQogICAgICAgICAgICA8L3BhcGVyLWNoZWNrYm94PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWluIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5taW4udmFsdWV9fSIKICAgICAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOS5lXFwtXSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWluLmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSItaW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCI+CiAgICAgICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgICAgICBsYWJlbD0iTWF4IgogICAgICAgICAgICAgICAgYWxsb3dlZC1wYXR0ZXJuPSJbMC05LmVcXC1dIgogICAgICAgICAgICAgICAgdmFsdWU9Int7bWV0cmljLmZpbHRlci5pbnRlcnZhbC5tYXgudmFsdWV9fSIKICAgICAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgICAgICBpbnZhbGlkPSJ7e21ldHJpYy5maWx0ZXIuaW50ZXJ2YWwubWF4LmludmFsaWR9fSIKICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIraW5maW5pdHkiCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvcGFwZXItaW5wdXQ+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY29udGVudCIgY2xhc3M9InNlY3Rpb24gc3RhdHVzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0dXM8L2Rpdj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19zdGF0dXNlc11dIiBhcz0ic3RhdHVzIj4KICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e3N0YXR1cy5hbGxvd2VkfX0iIG9uLWNoYW5nZT0iX3F1ZXJ5U2VydmVyIj4KICAgICAgICAgICAgW1tzdGF0dXMuZGlzcGxheU5hbWVdXQogICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBzb3J0aW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Tb3J0aW5nPC9kaXY+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJTb3J0IGJ5IgogICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICAgID4KICAgICAgICAgIDxwYXBlci1saXN0Ym94CiAgICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzbG90PSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgICBzZWxlY3RlZD0ie3tfc29ydEJ5SW5kZXh9fSIKICAgICAgICAgICAgb24tc2VsZWN0ZWQtaXRlbS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2hwYXJhbXNdXSIgYXM9ImhwYXJhbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+IFtbX2hwYXJhbU5hbWUoaHBhcmFtLmluZm8pXV0gPC9wYXBlci1pdGVtPgogICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19tZXRyaWNzXV0iIGFzPSJtZXRyaWMiPgogICAgICAgICAgICAgIDxwYXBlci1pdGVtPiBbW19tZXRyaWNOYW1lKG1ldHJpYy5pbmZvKV1dIDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgPHBhcGVyLWRyb3Bkb3duLW1lbnUKICAgICAgICAgIGxhYmVsPSJEaXJlY3Rpb24iCiAgICAgICAgICBvbi1zZWxlY3RlZC1pdGVtLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgIGhvcml6b250YWwtYWxpZ249ImxlZnQiCiAgICAgICAgPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zb3J0RGlyZWN0aW9ufX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxwYXBlci1pdGVtPkFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0+RGVzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzZWN0aW9uIHBhZ2luZyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFnaW5nPC9kaXY+CiAgICAgICAgPGRpdj4KICAgICAgICAgIE51bWJlciBvZiBtYXRjaGluZyBzZXNzaW9uIGdyb3VwczogW1tfdG90YWxTZXNzaW9uR3JvdXBzQ291bnRTdHJdXQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImlubGluZS1lbGVtZW50IHBhZ2UtbnVtYmVyLWlucHV0Ij4KICAgICAgICAgIDxwYXBlci1pbnB1dAogICAgICAgICAgICBsYWJlbD0iUGFnZSAjIgogICAgICAgICAgICB2YWx1ZT0ie3tfcGFnZU51bWJlcklucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VOdW1iZXJJbnB1dC5pbnZhbGlkXV0iCiAgICAgICAgICAgIG9uLXZhbHVlLWNoYW5nZWQ9Il9xdWVyeVNlcnZlciIKICAgICAgICAgID4KICAgICAgICAgICAgPGRpdiBzbG90PSJzdWZmaXgiIGNsYXNzPSJwYWdlLXN1ZmZpeCI+LyBbW19wYWdlQ291bnRTdHJdXTwvZGl2PgogICAgICAgICAgPC9wYXBlci1pbnB1dD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbmxpbmUtZWxlbWVudCBwYWdlLXNpemUtaW5wdXQiPgogICAgICAgICAgPHBhcGVyLWlucHV0CiAgICAgICAgICAgIGxhYmVsPSJNYXggIyBvZiBzZXNzaW9uIGdyb3VwcyBwZXIgcGFnZToiCiAgICAgICAgICAgIHZhbHVlPSJ7e19wYWdlU2l6ZUlucHV0LnZhbHVlfX0iCiAgICAgICAgICAgIGFsbG93ZWQtcGF0dGVybj0iWzAtOV0iCiAgICAgICAgICAgIGVycm9yLW1lc3NhZ2U9IkludmFsaWQgaW5wdXQiCiAgICAgICAgICAgIGludmFsaWQ9IltbX3BhZ2VTaXplSW5wdXQuaW52YWxpZF1dIgogICAgICAgICAgICBvbi12YWx1ZS1jaGFuZ2VkPSJfcXVlcnlTZXJ2ZXIiCiAgICAgICAgICA+CiAgICAgICAgICA8L3BhcGVyLWlucHV0PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBjbGFzcz0ic2VjdGlvbiBkb3dubG9hZCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19zZXNzaW9uR3JvdXBzUmVxdWVzdF1dIj4KICAgICAgICAgIERvd25sb2FkIGRhdGEgYXMKICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJjc3ZMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLmNzdiIKICAgICAgICAgICAgICBocmVmPSJbW19jc3ZVcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5DU1Y8L2EKICAgICAgICAgICAgPgogICAgICAgICAgICA8YQogICAgICAgICAgICAgIGlkPSJqc29uTGluayIKICAgICAgICAgICAgICBkb3dubG9hZD0iaHBhcmFtc190YWJsZS5qc29uIgogICAgICAgICAgICAgIGhyZWY9IltbX2pzb25VcmwoX3Nlc3Npb25Hcm91cHNSZXF1ZXN0LCBjb25maWd1cmF0aW9uKV1dIgogICAgICAgICAgICAgID5KU09OPC9hCiAgICAgICAgICAgID4KICAgICAgICAgICAgPGEKICAgICAgICAgICAgICBpZD0ibGF0ZXhMaW5rIgogICAgICAgICAgICAgIGRvd25sb2FkPSJocGFyYW1zX3RhYmxlLnRleCIKICAgICAgICAgICAgICBocmVmPSJbW19sYXRleFVybChfc2Vzc2lvbkdyb3Vwc1JlcXVlc3QsIGNvbmZpZ3VyYXRpb24pXV0iCiAgICAgICAgICAgICAgPkxhVGVYPC9hCiAgICAgICAgICAgID4KICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA3cHg7CiAgICAgIH0KICAgICAgLmRpc2NyZXRlLXZhbHVlLWNoZWNrYm94LAogICAgICAubWV0cmljLWNoZWNrYm94LAogICAgICAuaHBhcmFtLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuZGlzY3JldGUtdmFsdWUtY2hlY2tib3ggewogICAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OwogICAgICB9CiAgICAgIC5ocGFyYW0sCiAgICAgIC5tZXRyaWMgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICAgIC5pbmxpbmUtZWxlbWVudCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiA0MCU7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7CiAgICAgIH0KICAgICAgLnBhZ2UtbnVtYmVyLWlucHV0IHsKICAgICAgICB3aWR0aDogMjAlOwogICAgICB9CiAgICAgIC5wYWdlLXNpemUtaW5wdXQgewogICAgICAgIHdpZHRoOiA2MCU7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIHBhcGVyLWxpc3Rib3ggewogICAgICAgIG1heC1oZWlnaHQ6IDE1ZW07CiAgICAgIH0KICAgICAgLnBhZ2Utc3VmZml4IHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdGkucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdGkucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx0aS5wcm90b3R5cGUsImRhdGFMb2FkZWRXaXRoTm9uRW1wdHlIcGFyYW1zIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHRpLnByb3RvdHlwZSwiZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdGkucHJvdG90eXBlLCJfZXhwZXJpbWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdGkucHJvdG90eXBlLCJfaHBhcmFtcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdGkucHJvdG90eXBlLCJfbWV0cmljcyIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX3N0YXR1c2VzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX2dldEV4cGVyaW1lbnRSZXNvbHZlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLHRpLnByb3RvdHlwZSwiX3Jlc29sdmVHZXRFeHBlcmltZW50Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX2xpc3RTZXNzaW9uR3JvdXBzQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRpLnByb3RvdHlwZSwiX3NvcnRCeUluZGV4Iix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHRpLnByb3RvdHlwZSwiX3NvcnREaXJlY3Rpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdGkucHJvdG90eXBlLCJfcGFnZVNpemVJbnB1dCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSx0aS5wcm90b3R5cGUsIl9wYWdlTnVtYmVySW5wdXQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sdGkucHJvdG90eXBlLCJfcGFnZUNvdW50U3RyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHRpLnByb3RvdHlwZSwiX3RvdGFsU2Vzc2lvbkdyb3Vwc0NvdW50U3RyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHRpLnByb3RvdHlwZSwiX3Nlc3Npb25Hcm91cHNSZXF1ZXN0Iix2b2lkIDApO0UoW0J0KCJiYWNrZW5kIiwiZXhwZXJpbWVudE5hbWUiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHRpLnByb3RvdHlwZSwiX2NvbXB1dGVFeHBlcmltZW50QW5kUmVsYXRlZFByb3BzIixudWxsKTtFKFtCdCgiX2hwYXJhbXMuKiIsIl9tZXRyaWNzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHRpLnByb3RvdHlwZSwiX3VwZGF0ZUNvbmZpZ3VyYXRpb24iLG51bGwpO3RpPUUoW3l0KCJ0Zi1ocGFyYW1zLXF1ZXJ5LXBhbmUiKV0sdGkpO3ZhciBxY3Q9RWUoT2UoKSwxKTt2YXIgZ2N0PXR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMhPW51bGwmJndpbmRvdy5jdXN0b21FbGVtZW50cy5wb2x5ZmlsbFdyYXBGbHVzaENhbGxiYWNrIT09dm9pZCAwO3ZhciBpdj0oZSx0LHI9bnVsbCk9Pntmb3IoO3QhPT1yOyl7bGV0IG49dC5uZXh0U2libGluZztlLnJlbW92ZUNoaWxkKHQpLHQ9bn19O3ZhciBZYz1ge3tsaXQtJHtTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMil9fX1gLF9jdD1gPCEtLSR7WWN9LS0+YCxwY2U9bmV3IFJlZ0V4cChgJHtZY318JHtfY3R9YCksZDM9IiRsaXQkIixvdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMucGFydHM9W10sdGhpcy5lbGVtZW50PXI7bGV0IG49W10saT1bXSxvPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoci5jb250ZW50LDEzMyxudWxsLCExKSxhPTAscz0tMSxsPTAse3N0cmluZ3M6Yyx2YWx1ZXM6e2xlbmd0aDp1fX09dDtmb3IoO2w8dTspe2xldCBoPW8ubmV4dE5vZGUoKTtpZihoPT09bnVsbCl7by5jdXJyZW50Tm9kZT1pLnBvcCgpO2NvbnRpbnVlfWlmKHMrKyxoLm5vZGVUeXBlPT09MSl7aWYoaC5oYXNBdHRyaWJ1dGVzKCkpe2xldCBmPWguYXR0cmlidXRlcyx7bGVuZ3RoOnB9PWYsZD0wO2ZvcihsZXQgZz0wO2c8cDtnKyspZGNlKGZbZ10ubmFtZSxkMykmJmQrKztmb3IoO2QtLSA+MDspe2xldCBnPWNbbF0sXz1CSC5leGVjKGcpWzJdLHk9Xy50b0xvd2VyQ2FzZSgpK2QzLHg9aC5nZXRBdHRyaWJ1dGUoeSk7aC5yZW1vdmVBdHRyaWJ1dGUoeSk7bGV0IGI9eC5zcGxpdChwY2UpO3RoaXMucGFydHMucHVzaCh7dHlwZToiYXR0cmlidXRlIixpbmRleDpzLG5hbWU6XyxzdHJpbmdzOmJ9KSxsKz1iLmxlbmd0aC0xfX1oLnRhZ05hbWU9PT0iVEVNUExBVEUiJiYoaS5wdXNoKGgpLG8uY3VycmVudE5vZGU9aC5jb250ZW50KX1lbHNlIGlmKGgubm9kZVR5cGU9PT0zKXtsZXQgZj1oLmRhdGE7aWYoZi5pbmRleE9mKFljKT49MCl7bGV0IHA9aC5wYXJlbnROb2RlLGQ9Zi5zcGxpdChwY2UpLGc9ZC5sZW5ndGgtMTtmb3IobGV0IF89MDtfPGc7XysrKXtsZXQgeSx4PWRbX107aWYoeD09PSIiKXk9WWYoKTtlbHNle2xldCBiPUJILmV4ZWMoeCk7YiE9PW51bGwmJmRjZShiWzJdLGQzKSYmKHg9eC5zbGljZSgwLGIuaW5kZXgpK2JbMV0rYlsyXS5zbGljZSgwLC1kMy5sZW5ndGgpK2JbM10pLHk9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoeCl9cC5pbnNlcnRCZWZvcmUoeSxoKSx0aGlzLnBhcnRzLnB1c2goe3R5cGU6Im5vZGUiLGluZGV4Oisrc30pfWRbZ109PT0iIj8ocC5pbnNlcnRCZWZvcmUoWWYoKSxoKSxuLnB1c2goaCkpOmguZGF0YT1kW2ddLGwrPWd9fWVsc2UgaWYoaC5ub2RlVHlwZT09PTgpaWYoaC5kYXRhPT09WWMpe2xldCBmPWgucGFyZW50Tm9kZTsoaC5wcmV2aW91c1NpYmxpbmc9PT1udWxsfHxzPT09YSkmJihzKyssZi5pbnNlcnRCZWZvcmUoWWYoKSxoKSksYT1zLHRoaXMucGFydHMucHVzaCh7dHlwZToibm9kZSIsaW5kZXg6c30pLGgubmV4dFNpYmxpbmc9PT1udWxsP2guZGF0YT0iIjoobi5wdXNoKGgpLHMtLSksbCsrfWVsc2V7bGV0IGY9LTE7Zm9yKDsoZj1oLmRhdGEuaW5kZXhPZihZYyxmKzEpKSE9PS0xOyl0aGlzLnBhcnRzLnB1c2goe3R5cGU6Im5vZGUiLGluZGV4Oi0xfSksbCsrfX1mb3IobGV0IGggb2YgbiloLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaCl9fSxkY2U9KGUsdCk9PntsZXQgcj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gcj49MCYmZS5zbGljZShyKT09PXR9LHlQPWU9PmUuaW5kZXghPT0tMSxZZj0oKT0+ZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksQkg9LyhbIFx4MDlceDBhXHgwY1x4MGRdKShbXlwwLVx4MUZceDdGLVx4OUYgIic+PS9dKykoWyBceDA5XHgwYVx4MGNceDBkXSo9WyBceDA5XHgwYVx4MGNceDBkXSooPzpbXiBceDA5XHgwYVx4MGNceDBkIidgPD49XSp8IlteIl0qfCdbXiddKikpJC87dmFyIHljdD0xMzM7ZnVuY3Rpb24gdmN0KGUsdCl7bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6cn0scGFydHM6bn09ZSxpPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocix5Y3QsbnVsbCwhMSksbz12UChuKSxhPW5bb10scz0tMSxsPTAsYz1bXSx1PW51bGw7Zm9yKDtpLm5leHROb2RlKCk7KXtzKys7bGV0IGg9aS5jdXJyZW50Tm9kZTtmb3IoaC5wcmV2aW91c1NpYmxpbmc9PT11JiYodT1udWxsKSx0LmhhcyhoKSYmKGMucHVzaChoKSx1PT09bnVsbCYmKHU9aCkpLHUhPT1udWxsJiZsKys7YSE9PXZvaWQgMCYmYS5pbmRleD09PXM7KWEuaW5kZXg9dSE9PW51bGw/LTE6YS5pbmRleC1sLG89dlAobixvKSxhPW5bb119Yy5mb3JFYWNoKGg9PmgucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoKSl9dmFyIEV1cj1lPT57bGV0IHQ9ZS5ub2RlVHlwZT09PTExPzA6MSxyPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZSx5Y3QsbnVsbCwhMSk7Zm9yKDtyLm5leHROb2RlKCk7KXQrKztyZXR1cm4gdH0sdlA9KGUsdD0tMSk9Pntmb3IobGV0IHI9dCsxO3I8ZS5sZW5ndGg7cisrKXtsZXQgbj1lW3JdO2lmKHlQKG4pKXJldHVybiByfXJldHVybi0xfTtmdW5jdGlvbiBtY2UoZSx0LHI9bnVsbCl7bGV0e2VsZW1lbnQ6e2NvbnRlbnQ6bn0scGFydHM6aX09ZTtpZihyPT1udWxsKXtuLmFwcGVuZENoaWxkKHQpO3JldHVybn1sZXQgbz1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKG4seWN0LG51bGwsITEpLGE9dlAoaSkscz0wLGw9LTE7Zm9yKDtvLm5leHROb2RlKCk7KWZvcihsKyssby5jdXJyZW50Tm9kZT09PXImJihzPUV1cih0KSxyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQscikpO2EhPT0tMSYmaVthXS5pbmRleD09PWw7KXtpZihzPjApe2Zvcig7YSE9PS0xOylpW2FdLmluZGV4Kz1zLGE9dlAoaSxhKTtyZXR1cm59YT12UChpLGEpfX12YXIgVHVyPW5ldyBXZWFrTWFwO3ZhciBhdj1lPT50eXBlb2YgZT09ImZ1bmN0aW9uIiYmVHVyLmhhcyhlKTt2YXIgTGw9e30sSEg9e307dmFyIHcwPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9fcGFydHM9W10sdGhpcy50ZW1wbGF0ZT10LHRoaXMucHJvY2Vzc29yPXIsdGhpcy5vcHRpb25zPW59dXBkYXRlKHQpe2xldCByPTA7Zm9yKGxldCBuIG9mIHRoaXMuX19wYXJ0cyluIT09dm9pZCAwJiZuLnNldFZhbHVlKHRbcl0pLHIrKztmb3IobGV0IG4gb2YgdGhpcy5fX3BhcnRzKW4hPT12b2lkIDAmJm4uY29tbWl0KCl9X2Nsb25lKCl7bGV0IHQ9Z2N0P3RoaXMudGVtcGxhdGUuZWxlbWVudC5jb250ZW50LmNsb25lTm9kZSghMCk6ZG9jdW1lbnQuaW1wb3J0Tm9kZSh0aGlzLnRlbXBsYXRlLmVsZW1lbnQuY29udGVudCwhMCkscj1bXSxuPXRoaXMudGVtcGxhdGUucGFydHMsaT1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHQsMTMzLG51bGwsITEpLG89MCxhPTAscyxsPWkubmV4dE5vZGUoKTtmb3IoO288bi5sZW5ndGg7KXtpZihzPW5bb10sIXlQKHMpKXt0aGlzLl9fcGFydHMucHVzaCh2b2lkIDApLG8rKztjb250aW51ZX1mb3IoO2E8cy5pbmRleDspYSsrLGwubm9kZU5hbWU9PT0iVEVNUExBVEUiJiYoci5wdXNoKGwpLGkuY3VycmVudE5vZGU9bC5jb250ZW50KSwobD1pLm5leHROb2RlKCkpPT09bnVsbCYmKGkuY3VycmVudE5vZGU9ci5wb3AoKSxsPWkubmV4dE5vZGUoKSk7aWYocy50eXBlPT09Im5vZGUiKXtsZXQgYz10aGlzLnByb2Nlc3Nvci5oYW5kbGVUZXh0RXhwcmVzc2lvbih0aGlzLm9wdGlvbnMpO2MuaW5zZXJ0QWZ0ZXJOb2RlKGwucHJldmlvdXNTaWJsaW5nKSx0aGlzLl9fcGFydHMucHVzaChjKX1lbHNlIHRoaXMuX19wYXJ0cy5wdXNoKC4uLnRoaXMucHJvY2Vzc29yLmhhbmRsZUF0dHJpYnV0ZUV4cHJlc3Npb25zKGwscy5uYW1lLHMuc3RyaW5ncyx0aGlzLm9wdGlvbnMpKTtvKyt9cmV0dXJuIGdjdCYmKGRvY3VtZW50LmFkb3B0Tm9kZSh0KSxjdXN0b21FbGVtZW50cy51cGdyYWRlKHQpKSx0fX07dmFyIGdjZT13aW5kb3cudHJ1c3RlZFR5cGVzJiZ0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6ZT0+ZX0pLEF1cj1gICR7WWN9IGAsUzA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5zdHJpbmdzPXQsdGhpcy52YWx1ZXM9cix0aGlzLnR5cGU9bix0aGlzLnByb2Nlc3Nvcj1pfWdldEhUTUwoKXtsZXQgdD10aGlzLnN0cmluZ3MubGVuZ3RoLTEscj0iIixuPSExO2ZvcihsZXQgaT0wO2k8dDtpKyspe2xldCBvPXRoaXMuc3RyaW5nc1tpXSxhPW8ubGFzdEluZGV4T2YoIjwhLS0iKTtuPShhPi0xfHxuKSYmby5pbmRleE9mKCItLT4iLGErMSk9PT0tMTtsZXQgcz1CSC5leGVjKG8pO3M9PT1udWxsP3IrPW8rKG4/QXVyOl9jdCk6cis9by5zdWJzdHIoMCxzLmluZGV4KStzWzFdK3NbMl0rZDMrc1szXStZY31yZXR1cm4gcis9dGhpcy5zdHJpbmdzW3RdLHJ9Z2V0VGVtcGxhdGVFbGVtZW50KCl7bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKSxyPXRoaXMuZ2V0SFRNTCgpO3JldHVybiBnY2UhPT12b2lkIDAmJihyPWdjZS5jcmVhdGVIVE1MKHIpKSx0LmlubmVySFRNTD1yLHR9fTt2YXIgcUg9ZT0+ZT09PW51bGx8fCEodHlwZW9mIGU9PSJvYmplY3QifHx0eXBlb2YgZT09ImZ1bmN0aW9uIiksVkg9ZT0+QXJyYXkuaXNBcnJheShlKXx8ISEoZSYmZVtTeW1ib2wuaXRlcmF0b3JdKSxtMz1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5kaXJ0eT0hMCx0aGlzLmVsZW1lbnQ9dCx0aGlzLm5hbWU9cix0aGlzLnN0cmluZ3M9bix0aGlzLnBhcnRzPVtdO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGgtMTtpKyspdGhpcy5wYXJ0c1tpXT10aGlzLl9jcmVhdGVQYXJ0KCl9X2NyZWF0ZVBhcnQoKXtyZXR1cm4gbmV3IHhQKHRoaXMpfV9nZXRWYWx1ZSgpe2xldCB0PXRoaXMuc3RyaW5ncyxyPXQubGVuZ3RoLTEsbj10aGlzLnBhcnRzO2lmKHI9PT0xJiZ0WzBdPT09IiImJnRbMV09PT0iIil7bGV0IG89blswXS52YWx1ZTtpZih0eXBlb2Ygbz09InN5bWJvbCIpcmV0dXJuIFN0cmluZyhvKTtpZih0eXBlb2Ygbz09InN0cmluZyJ8fCFWSChvKSlyZXR1cm4gb31sZXQgaT0iIjtmb3IobGV0IG89MDtvPHI7bysrKXtpKz10W29dO2xldCBhPW5bb107aWYoYSE9PXZvaWQgMCl7bGV0IHM9YS52YWx1ZTtpZihxSChzKXx8IVZIKHMpKWkrPXR5cGVvZiBzPT0ic3RyaW5nIj9zOlN0cmluZyhzKTtlbHNlIGZvcihsZXQgbCBvZiBzKWkrPXR5cGVvZiBsPT0ic3RyaW5nIj9sOlN0cmluZyhsKX19cmV0dXJuIGkrPXRbcl0saX1jb21taXQoKXt0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSx0aGlzLl9nZXRWYWx1ZSgpKSl9fSx4UD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXZvaWQgMCx0aGlzLmNvbW1pdHRlcj10fXNldFZhbHVlKHQpe3QhPT1MbCYmKCFxSCh0KXx8dCE9PXRoaXMudmFsdWUpJiYodGhpcy52YWx1ZT10LGF2KHQpfHwodGhpcy5jb21taXR0ZXIuZGlydHk9ITApKX1jb21taXQoKXtmb3IoO2F2KHRoaXMudmFsdWUpOyl7bGV0IHQ9dGhpcy52YWx1ZTt0aGlzLnZhbHVlPUxsLHQodGhpcyl9dGhpcy52YWx1ZSE9PUxsJiZ0aGlzLmNvbW1pdHRlci5jb21taXQoKX19LEJkPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLHRoaXMub3B0aW9ucz10fWFwcGVuZEludG8odCl7dGhpcy5zdGFydE5vZGU9dC5hcHBlbmRDaGlsZChZZigpKSx0aGlzLmVuZE5vZGU9dC5hcHBlbmRDaGlsZChZZigpKX1pbnNlcnRBZnRlck5vZGUodCl7dGhpcy5zdGFydE5vZGU9dCx0aGlzLmVuZE5vZGU9dC5uZXh0U2libGluZ31hcHBlbmRJbnRvUGFydCh0KXt0Ll9faW5zZXJ0KHRoaXMuc3RhcnROb2RlPVlmKCkpLHQuX19pbnNlcnQodGhpcy5lbmROb2RlPVlmKCkpfWluc2VydEFmdGVyUGFydCh0KXt0Ll9faW5zZXJ0KHRoaXMuc3RhcnROb2RlPVlmKCkpLHRoaXMuZW5kTm9kZT10LmVuZE5vZGUsdC5lbmROb2RlPXRoaXMuc3RhcnROb2RlfXNldFZhbHVlKHQpe3RoaXMuX19wZW5kaW5nVmFsdWU9dH1jb21taXQoKXtpZih0aGlzLnN0YXJ0Tm9kZS5wYXJlbnROb2RlPT09bnVsbClyZXR1cm47Zm9yKDthdih0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCByPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxyKHRoaXMpfWxldCB0PXRoaXMuX19wZW5kaW5nVmFsdWU7dCE9PUxsJiYocUgodCk/dCE9PXRoaXMudmFsdWUmJnRoaXMuX19jb21taXRUZXh0KHQpOnQgaW5zdGFuY2VvZiBTMD90aGlzLl9fY29tbWl0VGVtcGxhdGVSZXN1bHQodCk6dCBpbnN0YW5jZW9mIE5vZGU/dGhpcy5fX2NvbW1pdE5vZGUodCk6VkgodCk/dGhpcy5fX2NvbW1pdEl0ZXJhYmxlKHQpOnQ9PT1ISD8odGhpcy52YWx1ZT1ISCx0aGlzLmNsZWFyKCkpOnRoaXMuX19jb21taXRUZXh0KHQpKX1fX2luc2VydCh0KXt0aGlzLmVuZE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCx0aGlzLmVuZE5vZGUpfV9fY29tbWl0Tm9kZSh0KXt0aGlzLnZhbHVlIT09dCYmKHRoaXMuY2xlYXIoKSx0aGlzLl9faW5zZXJ0KHQpLHRoaXMudmFsdWU9dCl9X19jb21taXRUZXh0KHQpe2xldCByPXRoaXMuc3RhcnROb2RlLm5leHRTaWJsaW5nO3Q9dD09bnVsbD8iIjp0O2xldCBuPXR5cGVvZiB0PT0ic3RyaW5nIj90OlN0cmluZyh0KTtyPT09dGhpcy5lbmROb2RlLnByZXZpb3VzU2libGluZyYmci5ub2RlVHlwZT09PTM/ci5kYXRhPW46dGhpcy5fX2NvbW1pdE5vZGUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpLHRoaXMudmFsdWU9dH1fX2NvbW1pdFRlbXBsYXRlUmVzdWx0KHQpe2xldCByPXRoaXMub3B0aW9ucy50ZW1wbGF0ZUZhY3RvcnkodCk7aWYodGhpcy52YWx1ZSBpbnN0YW5jZW9mIHcwJiZ0aGlzLnZhbHVlLnRlbXBsYXRlPT09cil0aGlzLnZhbHVlLnVwZGF0ZSh0LnZhbHVlcyk7ZWxzZXtsZXQgbj1uZXcgdzAocix0LnByb2Nlc3Nvcix0aGlzLm9wdGlvbnMpLGk9bi5fY2xvbmUoKTtuLnVwZGF0ZSh0LnZhbHVlcyksdGhpcy5fX2NvbW1pdE5vZGUoaSksdGhpcy52YWx1ZT1ufX1fX2NvbW1pdEl0ZXJhYmxlKHQpe0FycmF5LmlzQXJyYXkodGhpcy52YWx1ZSl8fCh0aGlzLnZhbHVlPVtdLHRoaXMuY2xlYXIoKSk7bGV0IHI9dGhpcy52YWx1ZSxuPTAsaTtmb3IobGV0IG8gb2YgdClpPXJbbl0saT09PXZvaWQgMCYmKGk9bmV3IEJkKHRoaXMub3B0aW9ucyksci5wdXNoKGkpLG49PT0wP2kuYXBwZW5kSW50b1BhcnQodGhpcyk6aS5pbnNlcnRBZnRlclBhcnQocltuLTFdKSksaS5zZXRWYWx1ZShvKSxpLmNvbW1pdCgpLG4rKztuPHIubGVuZ3RoJiYoci5sZW5ndGg9bix0aGlzLmNsZWFyKGkmJmkuZW5kTm9kZSkpfWNsZWFyKHQ9dGhpcy5zdGFydE5vZGUpe2l2KHRoaXMuc3RhcnROb2RlLnBhcmVudE5vZGUsdC5uZXh0U2libGluZyx0aGlzLmVuZE5vZGUpfX0sYlA9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe2lmKHRoaXMudmFsdWU9dm9pZCAwLHRoaXMuX19wZW5kaW5nVmFsdWU9dm9pZCAwLG4ubGVuZ3RoIT09Mnx8blswXSE9PSIifHxuWzFdIT09IiIpdGhyb3cgbmV3IEVycm9yKCJCb29sZWFuIGF0dHJpYnV0ZXMgY2FuIG9ubHkgY29udGFpbiBhIHNpbmdsZSBleHByZXNzaW9uIik7dGhpcy5lbGVtZW50PXQsdGhpcy5uYW1lPXIsdGhpcy5zdHJpbmdzPW59c2V0VmFsdWUodCl7dGhpcy5fX3BlbmRpbmdWYWx1ZT10fWNvbW1pdCgpe2Zvcig7YXYodGhpcy5fX3BlbmRpbmdWYWx1ZSk7KXtsZXQgcj10aGlzLl9fcGVuZGluZ1ZhbHVlO3RoaXMuX19wZW5kaW5nVmFsdWU9TGwscih0aGlzKX1pZih0aGlzLl9fcGVuZGluZ1ZhbHVlPT09TGwpcmV0dXJuO2xldCB0PSEhdGhpcy5fX3BlbmRpbmdWYWx1ZTt0aGlzLnZhbHVlIT09dCYmKHQ/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsIiIpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKSx0aGlzLnZhbHVlPXQpLHRoaXMuX19wZW5kaW5nVmFsdWU9TGx9fSx3UD1jbGFzcyBleHRlbmRzIG0ze2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LHIsbiksdGhpcy5zaW5nbGU9bi5sZW5ndGg9PT0yJiZuWzBdPT09IiImJm5bMV09PT0iIn1fY3JlYXRlUGFydCgpe3JldHVybiBuZXcgVUgodGhpcyl9X2dldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2luZ2xlP3RoaXMucGFydHNbMF0udmFsdWU6c3VwZXIuX2dldFZhbHVlKCl9Y29tbWl0KCl7dGhpcy5kaXJ0eSYmKHRoaXMuZGlydHk9ITEsdGhpcy5lbGVtZW50W3RoaXMubmFtZV09dGhpcy5fZ2V0VmFsdWUoKSl9fSxVSD1jbGFzcyBleHRlbmRzIHhQe30sX2NlPSExOygoKT0+e3RyeXtsZXQgZT17Z2V0IGNhcHR1cmUoKXtyZXR1cm4gX2NlPSEwLCExfX07d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGUsZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLGUsZSl9Y2F0Y2goZSl7fX0pKCk7dmFyIFNQPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLnZhbHVlPXZvaWQgMCx0aGlzLl9fcGVuZGluZ1ZhbHVlPXZvaWQgMCx0aGlzLmVsZW1lbnQ9dCx0aGlzLmV2ZW50TmFtZT1yLHRoaXMuZXZlbnRDb250ZXh0PW4sdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQ9aT0+dGhpcy5oYW5kbGVFdmVudChpKX1zZXRWYWx1ZSh0KXt0aGlzLl9fcGVuZGluZ1ZhbHVlPXR9Y29tbWl0KCl7Zm9yKDthdih0aGlzLl9fcGVuZGluZ1ZhbHVlKTspe2xldCBvPXRoaXMuX19wZW5kaW5nVmFsdWU7dGhpcy5fX3BlbmRpbmdWYWx1ZT1MbCxvKHRoaXMpfWlmKHRoaXMuX19wZW5kaW5nVmFsdWU9PT1MbClyZXR1cm47bGV0IHQ9dGhpcy5fX3BlbmRpbmdWYWx1ZSxyPXRoaXMudmFsdWUsbj10PT1udWxsfHxyIT1udWxsJiYodC5jYXB0dXJlIT09ci5jYXB0dXJlfHx0Lm9uY2UhPT1yLm9uY2V8fHQucGFzc2l2ZSE9PXIucGFzc2l2ZSksaT10IT1udWxsJiYocj09bnVsbHx8bik7biYmdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQsdGhpcy5fX29wdGlvbnMpLGkmJih0aGlzLl9fb3B0aW9ucz1QdXIodCksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ldmVudE5hbWUsdGhpcy5fX2JvdW5kSGFuZGxlRXZlbnQsdGhpcy5fX29wdGlvbnMpKSx0aGlzLnZhbHVlPXQsdGhpcy5fX3BlbmRpbmdWYWx1ZT1MbH1oYW5kbGVFdmVudCh0KXt0eXBlb2YgdGhpcy52YWx1ZT09ImZ1bmN0aW9uIj90aGlzLnZhbHVlLmNhbGwodGhpcy5ldmVudENvbnRleHR8fHRoaXMuZWxlbWVudCx0KTp0aGlzLnZhbHVlLmhhbmRsZUV2ZW50KHQpfX0sUHVyPWU9PmUmJihfY2U/e2NhcHR1cmU6ZS5jYXB0dXJlLHBhc3NpdmU6ZS5wYXNzaXZlLG9uY2U6ZS5vbmNlfTplLmNhcHR1cmUpO2Z1bmN0aW9uIHhjdChlKXtsZXQgdD1zdi5nZXQoZS50eXBlKTt0PT09dm9pZCAwJiYodD17c3RyaW5nc0FycmF5Om5ldyBXZWFrTWFwLGtleVN0cmluZzpuZXcgTWFwfSxzdi5zZXQoZS50eXBlLHQpKTtsZXQgcj10LnN0cmluZ3NBcnJheS5nZXQoZS5zdHJpbmdzKTtpZihyIT09dm9pZCAwKXJldHVybiByO2xldCBuPWUuc3RyaW5ncy5qb2luKFljKTtyZXR1cm4gcj10LmtleVN0cmluZy5nZXQobikscj09PXZvaWQgMCYmKHI9bmV3IG92KGUsZS5nZXRUZW1wbGF0ZUVsZW1lbnQoKSksdC5rZXlTdHJpbmcuc2V0KG4scikpLHQuc3RyaW5nc0FycmF5LnNldChlLnN0cmluZ3Mscikscn12YXIgc3Y9bmV3IE1hcDt2YXIgTTA9bmV3IFdlYWtNYXAsYmN0PShlLHQscik9PntsZXQgbj1NMC5nZXQodCk7bj09PXZvaWQgMCYmKGl2KHQsdC5maXJzdENoaWxkKSxNMC5zZXQodCxuPW5ldyBCZChPYmplY3QuYXNzaWduKHt0ZW1wbGF0ZUZhY3Rvcnk6eGN0fSxyKSkpLG4uYXBwZW5kSW50byh0KSksbi5zZXRWYWx1ZShlKSxuLmNvbW1pdCgpfTt2YXIgR0g9Y2xhc3N7aGFuZGxlQXR0cmlidXRlRXhwcmVzc2lvbnModCxyLG4saSl7bGV0IG89clswXTtyZXR1cm4gbz09PSIuIj9uZXcgd1AodCxyLnNsaWNlKDEpLG4pLnBhcnRzOm89PT0iQCI/W25ldyBTUCh0LHIuc2xpY2UoMSksaS5ldmVudENvbnRleHQpXTpvPT09Ij8iP1tuZXcgYlAodCxyLnNsaWNlKDEpLG4pXTpuZXcgbTModCxyLG4pLnBhcnRzfWhhbmRsZVRleHRFeHByZXNzaW9uKHQpe3JldHVybiBuZXcgQmQodCl9fSx5Y2U9bmV3IEdIO3R5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiJiYod2luZG93LmxpdEh0bWxWZXJzaW9uc3x8KHdpbmRvdy5saXRIdG1sVmVyc2lvbnM9W10pKS5wdXNoKCIxLjQuMSIpO3ZhciB4Y2U9KGUsdCk9PmAke2V9LS0ke3R9YCxXSD0hMDt0eXBlb2Ygd2luZG93LlNoYWR5Q1NTPT0idW5kZWZpbmVkIj9XSD0hMTp0eXBlb2Ygd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZURvbT09InVuZGVmaW5lZCImJihjb25zb2xlLndhcm4oIkluY29tcGF0aWJsZSBTaGFkeUNTUyB2ZXJzaW9uIGRldGVjdGVkLiBQbGVhc2UgdXBkYXRlIHRvIGF0IGxlYXN0IEB3ZWJjb21wb25lbnRzL3dlYmNvbXBvbmVudHNqc0AyLjAuMiBhbmQgQHdlYmNvbXBvbmVudHMvc2hhZHljc3NAMS4zLjEuIiksV0g9ITEpO3ZhciBrdXI9ZT0+dD0+e2xldCByPXhjZSh0LnR5cGUsZSksbj1zdi5nZXQocik7bj09PXZvaWQgMCYmKG49e3N0cmluZ3NBcnJheTpuZXcgV2Vha01hcCxrZXlTdHJpbmc6bmV3IE1hcH0sc3Yuc2V0KHIsbikpO2xldCBpPW4uc3RyaW5nc0FycmF5LmdldCh0LnN0cmluZ3MpO2lmKGkhPT12b2lkIDApcmV0dXJuIGk7bGV0IG89dC5zdHJpbmdzLmpvaW4oWWMpO2lmKGk9bi5rZXlTdHJpbmcuZ2V0KG8pLGk9PT12b2lkIDApe2xldCBhPXQuZ2V0VGVtcGxhdGVFbGVtZW50KCk7V0gmJndpbmRvdy5TaGFkeUNTUy5wcmVwYXJlVGVtcGxhdGVEb20oYSxlKSxpPW5ldyBvdih0LGEpLG4ua2V5U3RyaW5nLnNldChvLGkpfXJldHVybiBuLnN0cmluZ3NBcnJheS5zZXQodC5zdHJpbmdzLGkpLGl9LFJ1cj1bImh0bWwiLCJzdmciXSxOdXI9ZT0+e1J1ci5mb3JFYWNoKHQ9PntsZXQgcj1zdi5nZXQoeGNlKHQsZSkpO3IhPT12b2lkIDAmJnIua2V5U3RyaW5nLmZvckVhY2gobj0+e2xldHtlbGVtZW50Ontjb250ZW50Oml9fT1uLG89bmV3IFNldDtBcnJheS5mcm9tKGkucXVlcnlTZWxlY3RvckFsbCgic3R5bGUiKSkuZm9yRWFjaChhPT57by5hZGQoYSl9KSx2Y3QobixvKX0pfSl9LGJjZT1uZXcgU2V0LER1cj0oZSx0LHIpPT57YmNlLmFkZChlKTtsZXQgbj1yP3IuZWxlbWVudDpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpLGk9dC5xdWVyeVNlbGVjdG9yQWxsKCJzdHlsZSIpLHtsZW5ndGg6b309aTtpZihvPT09MCl7d2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhuLGUpO3JldHVybn1sZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2ZvcihsZXQgYz0wO2M8bztjKyspe2xldCB1PWlbY107dS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHUpLGEudGV4dENvbnRlbnQrPXUudGV4dENvbnRlbnR9TnVyKGUpO2xldCBzPW4uY29udGVudDtyP21jZShyLGEscy5maXJzdENoaWxkKTpzLmluc2VydEJlZm9yZShhLHMuZmlyc3RDaGlsZCksd2luZG93LlNoYWR5Q1NTLnByZXBhcmVUZW1wbGF0ZVN0eWxlcyhuLGUpO2xldCBsPXMucXVlcnlTZWxlY3Rvcigic3R5bGUiKTtpZih3aW5kb3cuU2hhZHlDU1MubmF0aXZlU2hhZG93JiZsIT09bnVsbCl0Lmluc2VydEJlZm9yZShsLmNsb25lTm9kZSghMCksdC5maXJzdENoaWxkKTtlbHNlIGlmKHIpe3MuaW5zZXJ0QmVmb3JlKGEscy5maXJzdENoaWxkKTtsZXQgYz1uZXcgU2V0O2MuYWRkKGEpLHZjdChyLGMpfX0sd2NlPShlLHQscik9PntpZighcnx8dHlwZW9mIHIhPSJvYmplY3QifHwhci5zY29wZU5hbWUpdGhyb3cgbmV3IEVycm9yKCJUaGUgYHNjb3BlTmFtZWAgb3B0aW9uIGlzIHJlcXVpcmVkLiIpO2xldCBuPXIuc2NvcGVOYW1lLGk9TTAuaGFzKHQpLG89V0gmJnQubm9kZVR5cGU9PT0xMSYmISF0Lmhvc3QsYT1vJiYhYmNlLmhhcyhuKSxzPWE/ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOnQ7aWYoYmN0KGUscyxPYmplY3QuYXNzaWduKHt0ZW1wbGF0ZUZhY3Rvcnk6a3VyKG4pfSxyKSksYSl7bGV0IGw9TTAuZ2V0KHMpO00wLmRlbGV0ZShzKTtsZXQgYz1sLnZhbHVlIGluc3RhbmNlb2YgdzA/bC52YWx1ZS50ZW1wbGF0ZTp2b2lkIDA7RHVyKG4scyxjKSxpdih0LHQuZmlyc3RDaGlsZCksdC5hcHBlbmRDaGlsZChzKSxNMC5zZXQodCxsKX0haSYmbyYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0Lmhvc3QpfTt2YXIgU2NlO3dpbmRvdy5KU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5PShlLHQpPT5lO3ZhciBDY3Q9e3RvQXR0cmlidXRlKGUsdCl7c3dpdGNoKHQpe2Nhc2UgQm9vbGVhbjpyZXR1cm4gZT8iIjpudWxsO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6cmV0dXJuIGU9PW51bGw/ZTpKU09OLnN0cmluZ2lmeShlKX1yZXR1cm4gZX0sZnJvbUF0dHJpYnV0ZShlLHQpe3N3aXRjaCh0KXtjYXNlIEJvb2xlYW46cmV0dXJuIGUhPT1udWxsO2Nhc2UgTnVtYmVyOnJldHVybiBlPT09bnVsbD9udWxsOk51bWJlcihlKTtjYXNlIE9iamVjdDpjYXNlIEFycmF5OnJldHVybiBKU09OLnBhcnNlKGUpfXJldHVybiBlfX0sTWNlPShlLHQpPT50IT09ZSYmKHQ9PT10fHxlPT09ZSksd2N0PXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOkNjdCxyZWZsZWN0OiExLGhhc0NoYW5nZWQ6TWNlfSxTY3Q9MSxNY3Q9MTw8MixFY3Q9MTw8MyxUY3Q9MTw8NCxBY3Q9ImZpbmFsaXplZCIsZzM9Y2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5pbml0aWFsaXplKCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7bGV0IHQ9W107cmV0dXJuIHRoaXMuX2NsYXNzUHJvcGVydGllcy5mb3JFYWNoKChyLG4pPT57bGV0IGk9dGhpcy5fYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KG4scik7aSE9PXZvaWQgMCYmKHRoaXMuX2F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuc2V0KGksbiksdC5wdXNoKGkpKX0pLHR9c3RhdGljIF9lbnN1cmVDbGFzc1Byb3BlcnRpZXMoKXtpZighdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJfY2xhc3NQcm9wZXJ0aWVzIix0aGlzKSkpe3RoaXMuX2NsYXNzUHJvcGVydGllcz1uZXcgTWFwO2xldCB0PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fY2xhc3NQcm9wZXJ0aWVzO3QhPT12b2lkIDAmJnQuZm9yRWFjaCgocixuKT0+dGhpcy5fY2xhc3NQcm9wZXJ0aWVzLnNldChuLHIpKX19c3RhdGljIGNyZWF0ZVByb3BlcnR5KHQscj13Y3Qpe2lmKHRoaXMuX2Vuc3VyZUNsYXNzUHJvcGVydGllcygpLHRoaXMuX2NsYXNzUHJvcGVydGllcy5zZXQodCxyKSxyLm5vQWNjZXNzb3J8fHRoaXMucHJvdG90eXBlLmhhc093blByb3BlcnR5KHQpKXJldHVybjtsZXQgbj10eXBlb2YgdD09InN5bWJvbCI/U3ltYm9sKCk6YF9fJHt0fWAsaT10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcih0LG4scik7aSE9PXZvaWQgMCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLHQsaSl9c3RhdGljIGdldFByb3BlcnR5RGVzY3JpcHRvcih0LHIsbil7cmV0dXJue2dldCgpe3JldHVybiB0aGlzW3JdfSxzZXQoaSl7bGV0IG89dGhpc1t0XTt0aGlzW3JdPWksdGhpcy5yZXF1ZXN0VXBkYXRlSW50ZXJuYWwodCxvLG4pfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19c3RhdGljIGdldFByb3BlcnR5T3B0aW9ucyh0KXtyZXR1cm4gdGhpcy5fY2xhc3NQcm9wZXJ0aWVzJiZ0aGlzLl9jbGFzc1Byb3BlcnRpZXMuZ2V0KHQpfHx3Y3R9c3RhdGljIGZpbmFsaXplKCl7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKHQuaGFzT3duUHJvcGVydHkoQWN0KXx8dC5maW5hbGl6ZSgpLHRoaXNbQWN0XT0hMCx0aGlzLl9lbnN1cmVDbGFzc1Byb3BlcnRpZXMoKSx0aGlzLl9hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwPW5ldyBNYXAsdGhpcy5oYXNPd25Qcm9wZXJ0eShKU0NvbXBpbGVyX3JlbmFtZVByb3BlcnR5KCJwcm9wZXJ0aWVzIix0aGlzKSkpe2xldCByPXRoaXMucHJvcGVydGllcyxuPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKSwuLi50eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz09ImZ1bmN0aW9uIj9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHIpOltdXTtmb3IobGV0IGkgb2Ygbil0aGlzLmNyZWF0ZVByb3BlcnR5KGkscltpXSl9fXN0YXRpYyBfYXR0cmlidXRlTmFtZUZvclByb3BlcnR5KHQscil7bGV0IG49ci5hdHRyaWJ1dGU7cmV0dXJuIG49PT0hMT92b2lkIDA6dHlwZW9mIG49PSJzdHJpbmciP246dHlwZW9mIHQ9PSJzdHJpbmciP3QudG9Mb3dlckNhc2UoKTp2b2lkIDB9c3RhdGljIF92YWx1ZUhhc0NoYW5nZWQodCxyLG49TWNlKXtyZXR1cm4gbih0LHIpfXN0YXRpYyBfcHJvcGVydHlWYWx1ZUZyb21BdHRyaWJ1dGUodCxyKXtsZXQgbj1yLnR5cGUsaT1yLmNvbnZlcnRlcnx8Q2N0LG89dHlwZW9mIGk9PSJmdW5jdGlvbiI/aTppLmZyb21BdHRyaWJ1dGU7cmV0dXJuIG8/byh0LG4pOnR9c3RhdGljIF9wcm9wZXJ0eVZhbHVlVG9BdHRyaWJ1dGUodCxyKXtpZihyLnJlZmxlY3Q9PT12b2lkIDApcmV0dXJuO2xldCBuPXIudHlwZSxpPXIuY29udmVydGVyO3JldHVybihpJiZpLnRvQXR0cmlidXRlfHxDY3QudG9BdHRyaWJ1dGUpKHQsbil9aW5pdGlhbGl6ZSgpe3RoaXMuX3VwZGF0ZVN0YXRlPTAsdGhpcy5fdXBkYXRlUHJvbWlzZT1uZXcgUHJvbWlzZSh0PT50aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyPXQpLHRoaXMuX2NoYW5nZWRQcm9wZXJ0aWVzPW5ldyBNYXAsdGhpcy5fc2F2ZUluc3RhbmNlUHJvcGVydGllcygpLHRoaXMucmVxdWVzdFVwZGF0ZUludGVybmFsKCl9X3NhdmVJbnN0YW5jZVByb3BlcnRpZXMoKXt0aGlzLmNvbnN0cnVjdG9yLl9jbGFzc1Byb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+e2lmKHRoaXMuaGFzT3duUHJvcGVydHkocikpe2xldCBuPXRoaXNbcl07ZGVsZXRlIHRoaXNbcl0sdGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzfHwodGhpcy5faW5zdGFuY2VQcm9wZXJ0aWVzPW5ldyBNYXApLHRoaXMuX2luc3RhbmNlUHJvcGVydGllcy5zZXQocixuKX19KX1fYXBwbHlJbnN0YW5jZVByb3BlcnRpZXMoKXt0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXMuZm9yRWFjaCgodCxyKT0+dGhpc1tyXT10KSx0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXM9dm9pZCAwfWNvbm5lY3RlZENhbGxiYWNrKCl7dGhpcy5lbmFibGVVcGRhdGluZygpfWVuYWJsZVVwZGF0aW5nKCl7dGhpcy5fZW5hYmxlVXBkYXRpbmdSZXNvbHZlciE9PXZvaWQgMCYmKHRoaXMuX2VuYWJsZVVwZGF0aW5nUmVzb2x2ZXIoKSx0aGlzLl9lbmFibGVVcGRhdGluZ1Jlc29sdmVyPXZvaWQgMCl9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuKXtyIT09biYmdGhpcy5fYXR0cmlidXRlVG9Qcm9wZXJ0eSh0LG4pfV9wcm9wZXJ0eVRvQXR0cmlidXRlKHQscixuPXdjdCl7bGV0IGk9dGhpcy5jb25zdHJ1Y3RvcixvPWkuX2F0dHJpYnV0ZU5hbWVGb3JQcm9wZXJ0eSh0LG4pO2lmKG8hPT12b2lkIDApe2xldCBhPWkuX3Byb3BlcnR5VmFsdWVUb0F0dHJpYnV0ZShyLG4pO2lmKGE9PT12b2lkIDApcmV0dXJuO3RoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfEVjdCxhPT1udWxsP3RoaXMucmVtb3ZlQXR0cmlidXRlKG8pOnRoaXMuc2V0QXR0cmlidXRlKG8sYSksdGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGUmfkVjdH19X2F0dHJpYnV0ZVRvUHJvcGVydHkodCxyKXtpZih0aGlzLl91cGRhdGVTdGF0ZSZFY3QpcmV0dXJuO2xldCBuPXRoaXMuY29uc3RydWN0b3IsaT1uLl9hdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmdldCh0KTtpZihpIT09dm9pZCAwKXtsZXQgbz1uLmdldFByb3BlcnR5T3B0aW9ucyhpKTt0aGlzLl91cGRhdGVTdGF0ZT10aGlzLl91cGRhdGVTdGF0ZXxUY3QsdGhpc1tpXT1uLl9wcm9wZXJ0eVZhbHVlRnJvbUF0dHJpYnV0ZShyLG8pLHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlJn5UY3R9fXJlcXVlc3RVcGRhdGVJbnRlcm5hbCh0LHIsbil7bGV0IGk9ITA7aWYodCE9PXZvaWQgMCl7bGV0IG89dGhpcy5jb25zdHJ1Y3RvcjtuPW58fG8uZ2V0UHJvcGVydHlPcHRpb25zKHQpLG8uX3ZhbHVlSGFzQ2hhbmdlZCh0aGlzW3RdLHIsbi5oYXNDaGFuZ2VkKT8odGhpcy5fY2hhbmdlZFByb3BlcnRpZXMuaGFzKHQpfHx0aGlzLl9jaGFuZ2VkUHJvcGVydGllcy5zZXQodCxyKSxuLnJlZmxlY3Q9PT0hMCYmISh0aGlzLl91cGRhdGVTdGF0ZSZUY3QpJiYodGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXM9PT12b2lkIDAmJih0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz1uZXcgTWFwKSx0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcy5zZXQodCxuKSkpOmk9ITF9IXRoaXMuX2hhc1JlcXVlc3RlZFVwZGF0ZSYmaSYmKHRoaXMuX3VwZGF0ZVByb21pc2U9dGhpcy5fZW5xdWV1ZVVwZGF0ZSgpKX1yZXF1ZXN0VXBkYXRlKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdFVwZGF0ZUludGVybmFsKHQsciksdGhpcy51cGRhdGVDb21wbGV0ZX1fZW5xdWV1ZVVwZGF0ZSgpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7dGhpcy5fdXBkYXRlU3RhdGU9dGhpcy5fdXBkYXRlU3RhdGV8TWN0O3RyeXt5aWVsZCB0aGlzLl91cGRhdGVQcm9taXNlfWNhdGNoKHIpe31sZXQgdD10aGlzLnBlcmZvcm1VcGRhdGUoKTtyZXR1cm4gdCE9bnVsbCYmKHlpZWxkIHQpLCF0aGlzLl9oYXNSZXF1ZXN0ZWRVcGRhdGV9KX1nZXQgX2hhc1JlcXVlc3RlZFVwZGF0ZSgpe3JldHVybiB0aGlzLl91cGRhdGVTdGF0ZSZNY3R9Z2V0IGhhc1VwZGF0ZWQoKXtyZXR1cm4gdGhpcy5fdXBkYXRlU3RhdGUmU2N0fXBlcmZvcm1VcGRhdGUoKXtpZighdGhpcy5faGFzUmVxdWVzdGVkVXBkYXRlKXJldHVybjt0aGlzLl9pbnN0YW5jZVByb3BlcnRpZXMmJnRoaXMuX2FwcGx5SW5zdGFuY2VQcm9wZXJ0aWVzKCk7bGV0IHQ9ITEscj10aGlzLl9jaGFuZ2VkUHJvcGVydGllczt0cnl7dD10aGlzLnNob3VsZFVwZGF0ZShyKSx0P3RoaXMudXBkYXRlKHIpOnRoaXMuX21hcmtVcGRhdGVkKCl9Y2F0Y2gobil7dGhyb3cgdD0hMSx0aGlzLl9tYXJrVXBkYXRlZCgpLG59dCYmKHRoaXMuX3VwZGF0ZVN0YXRlJlNjdHx8KHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlfFNjdCx0aGlzLmZpcnN0VXBkYXRlZChyKSksdGhpcy51cGRhdGVkKHIpKX1fbWFya1VwZGF0ZWQoKXt0aGlzLl9jaGFuZ2VkUHJvcGVydGllcz1uZXcgTWFwLHRoaXMuX3VwZGF0ZVN0YXRlPXRoaXMuX3VwZGF0ZVN0YXRlJn5NY3R9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuX2dldFVwZGF0ZUNvbXBsZXRlKCl9X2dldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLl91cGRhdGVQcm9taXNlfXNob3VsZFVwZGF0ZSh0KXtyZXR1cm4hMH11cGRhdGUodCl7dGhpcy5fcmVmbGVjdGluZ1Byb3BlcnRpZXMhPT12b2lkIDAmJnRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLnNpemU+MCYmKHRoaXMuX3JlZmxlY3RpbmdQcm9wZXJ0aWVzLmZvckVhY2goKHIsbik9PnRoaXMuX3Byb3BlcnR5VG9BdHRyaWJ1dGUobix0aGlzW25dLHIpKSx0aGlzLl9yZWZsZWN0aW5nUHJvcGVydGllcz12b2lkIDApLHRoaXMuX21hcmtVcGRhdGVkKCl9dXBkYXRlZCh0KXt9Zmlyc3RVcGRhdGVkKHQpe319O1NjZT1BY3Q7ZzNbU2NlXT0hMDt2YXIgRWNlPUVsZW1lbnQucHJvdG90eXBlLHlpaT1FY2UubXNNYXRjaGVzU2VsZWN0b3J8fEVjZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7dmFyIFlIPXdpbmRvdy5TaGFkb3dSb290JiYod2luZG93LlNoYWR5Q1NTPT09dm9pZCAwfHx3aW5kb3cuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLFBjdD1TeW1ib2woKSxsdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe2lmKHIhPT1QY3QpdGhyb3cgbmV3IEVycm9yKCJDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLiIpO3RoaXMuY3NzVGV4dD10fWdldCBzdHlsZVNoZWV0KCl7cmV0dXJuIHRoaXMuX3N0eWxlU2hlZXQ9PT12b2lkIDAmJihZSD8odGhpcy5fc3R5bGVTaGVldD1uZXcgQ1NTU3R5bGVTaGVldCx0aGlzLl9zdHlsZVNoZWV0LnJlcGxhY2VTeW5jKHRoaXMuY3NzVGV4dCkpOnRoaXMuX3N0eWxlU2hlZXQ9bnVsbCksdGhpcy5fc3R5bGVTaGVldH10b1N0cmluZygpe3JldHVybiB0aGlzLmNzc1RleHR9fSxJY3Q9ZT0+bmV3IGx2KFN0cmluZyhlKSxQY3QpLE91cj1lPT57aWYoZSBpbnN0YW5jZW9mIGx2KXJldHVybiBlLmNzc1RleHQ7aWYodHlwZW9mIGU9PSJudW1iZXIiKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICR7ZX0uIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0CiAgICAgICAgICAgIHRha2UgY2FyZSB0byBlbnN1cmUgcGFnZSBzZWN1cml0eS5gKX0sQ2k9KGUsLi4udCk9PntsZXQgcj10LnJlZHVjZSgobixpLG8pPT5uK091cihpKStlW28rMV0sZVswXSk7cmV0dXJuIG5ldyBsdihyLFBjdCl9Oyh3aW5kb3cubGl0RWxlbWVudFZlcnNpb25zfHwod2luZG93LmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkpLnB1c2goIjIuNS4xIik7dmFyIFRjZT17fSxNUD1jbGFzcyBleHRlbmRzIGcze3N0YXRpYyBnZXRTdHlsZXMoKXtyZXR1cm4gdGhpcy5zdHlsZXN9c3RhdGljIF9nZXRVbmlxdWVTdHlsZXMoKXtpZih0aGlzLmhhc093blByb3BlcnR5KEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoIl9zdHlsZXMiLHRoaXMpKSlyZXR1cm47bGV0IHQ9dGhpcy5nZXRTdHlsZXMoKTtpZihBcnJheS5pc0FycmF5KHQpKXtsZXQgcj0obyxhKT0+by5yZWR1Y2VSaWdodCgocyxsKT0+QXJyYXkuaXNBcnJheShsKT9yKGwscyk6KHMuYWRkKGwpLHMpLGEpLG49cih0LG5ldyBTZXQpLGk9W107bi5mb3JFYWNoKG89PmkudW5zaGlmdChvKSksdGhpcy5fc3R5bGVzPWl9ZWxzZSB0aGlzLl9zdHlsZXM9dD09PXZvaWQgMD9bXTpbdF07dGhpcy5fc3R5bGVzPXRoaXMuX3N0eWxlcy5tYXAocj0+e2lmKHIgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0JiYhWUgpe2xldCBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIuY3NzUnVsZXMpLnJlZHVjZSgoaSxvKT0+aStvLmNzc1RleHQsIiIpO3JldHVybiBJY3Qobil9cmV0dXJuIHJ9KX1pbml0aWFsaXplKCl7c3VwZXIuaW5pdGlhbGl6ZSgpLHRoaXMuY29uc3RydWN0b3IuX2dldFVuaXF1ZVN0eWxlcygpLHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSx3aW5kb3cuU2hhZG93Um9vdCYmdGhpcy5yZW5kZXJSb290IGluc3RhbmNlb2Ygd2luZG93LlNoYWRvd1Jvb3QmJnRoaXMuYWRvcHRTdHlsZXMoKX1jcmVhdGVSZW5kZXJSb290KCl7cmV0dXJuIHRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29uc3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpfWFkb3B0U3R5bGVzKCl7bGV0IHQ9dGhpcy5jb25zdHJ1Y3Rvci5fc3R5bGVzO3QubGVuZ3RoIT09MCYmKHdpbmRvdy5TaGFkeUNTUyE9PXZvaWQgMCYmIXdpbmRvdy5TaGFkeUNTUy5uYXRpdmVTaGFkb3c/d2luZG93LlNoYWR5Q1NTLlNjb3BpbmdTaGltLnByZXBhcmVBZG9wdGVkQ3NzVGV4dCh0Lm1hcChyPT5yLmNzc1RleHQpLHRoaXMubG9jYWxOYW1lKTpZSD90aGlzLnJlbmRlclJvb3QuYWRvcHRlZFN0eWxlU2hlZXRzPXQubWFwKHI9PnIgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P3I6ci5zdHlsZVNoZWV0KTp0aGlzLl9uZWVkc1NoaW1BZG9wdGVkU3R5bGVTaGVldHM9ITApfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc1VwZGF0ZWQmJndpbmRvdy5TaGFkeUNTUyE9PXZvaWQgMCYmd2luZG93LlNoYWR5Q1NTLnN0eWxlRWxlbWVudCh0aGlzKX11cGRhdGUodCl7bGV0IHI9dGhpcy5yZW5kZXIoKTtzdXBlci51cGRhdGUodCksciE9PVRjZSYmdGhpcy5jb25zdHJ1Y3Rvci5yZW5kZXIocix0aGlzLnJlbmRlclJvb3Qse3Njb3BlTmFtZTp0aGlzLmxvY2FsTmFtZSxldmVudENvbnRleHQ6dGhpc30pLHRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cyYmKHRoaXMuX25lZWRzU2hpbUFkb3B0ZWRTdHlsZVNoZWV0cz0hMSx0aGlzLmNvbnN0cnVjdG9yLl9zdHlsZXMuZm9yRWFjaChuPT57bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnRleHRDb250ZW50PW4uY3NzVGV4dCx0aGlzLnJlbmRlclJvb3QuYXBwZW5kQ2hpbGQoaSl9KSl9cmVuZGVyKCl7cmV0dXJuIFRjZX19O01QLmZpbmFsaXplZD0hMDtNUC5yZW5kZXI9d2NlO01QLnNoYWRvd1Jvb3RPcHRpb25zPXttb2RlOiJvcGVuIn07dmFyIENjZT0wLExjdD17fSxqYz0oZSx0LHIpPT57bGV0IG49ciYmci5tb2R1bGVJZHx8YGN1c3RvbS1zdHlsZS1tb2R1bGUtJHtDY2UrK31gO0FycmF5LmlzQXJyYXkodCl8fCh0PXQ/W3RdOltdKSx0LmZvckVhY2goYT0+e2lmKCEoYSBpbnN0YW5jZW9mIGx2KSl0aHJvdyBuZXcgRXJyb3IoIkFuIGl0ZW0gaW4gc3R5bGVzIGlzIG5vdCBvZiB0eXBlIENTU1Jlc3VsdC4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgLiIpO2lmKCFMY3RbYV0pe2xldCBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRvbS1tb2R1bGUiKTtzLmlubmVySFRNTD1gCiAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgPHN0eWxlPiR7YS50b1N0cmluZygpfTwvc3R5bGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgYDtsZXQgbD1gY3VzdG9tLXN0eWxlLW1vZHVsZS0ke0NjZSsrfWA7cy5yZWdpc3RlcihsKSxMY3RbYV09bH19KTtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkb20tbW9kdWxlIik7aWYoZSl7bGV0IGE9Y3VzdG9tRWxlbWVudHMuZ2V0KGUpO2EmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCJfX2ZpbmFsaXplZCIpJiZjb25zb2xlLndhcm4oYFRoZSBjdXN0b20gZWxlbWVudCBkZWZpbml0aW9uIGZvciAiJHtlfSIKICAgICAgd2FzIGZpbmFsaXplZCBiZWZvcmUgYSBzdHlsZSBtb2R1bGUgd2FzIHJlZ2lzdGVyZWQuCiAgICAgIE1ha2Ugc3VyZSB0byBhZGQgY29tcG9uZW50IHNwZWNpZmljIHN0eWxlIG1vZHVsZXMgYmVmb3JlCiAgICAgIGltcG9ydGluZyB0aGUgY29ycmVzcG9uZGluZyBjdXN0b20gZWxlbWVudC5gKSxpLnNldEF0dHJpYnV0ZSgidGhlbWUtZm9yIixlKX1sZXQgbz1yJiZyLmluY2x1ZGV8fFtdO2kuaW5uZXJIVE1MPWAKICAgIDx0ZW1wbGF0ZT4KICAgICAgJHtvLm1hcChhPT5gPHN0eWxlIGluY2x1ZGU9JHthfT48L3N0eWxlPmApfQogICAgICAke3QubWFwKGE9PmA8c3R5bGUgaW5jbHVkZT0ke0xjdFthXX0+PC9zdHlsZT5gKX0KICAgIDwvdGVtcGxhdGU+CiAgYCxpLnJlZ2lzdGVyKG4pfTt2YXIga2N0PWNsYXNzIGV4dGVuZHMgSFRNTEVsZW1lbnR7c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoInZhYWRpbi1sdW1vLXN0eWxlcyIsa2N0KTt2YXIgenVyPUNpYAogIDpob3N0IHsKICAgIC8qIEJhc2UgKGJhY2tncm91bmQpICovCiAgICAtLWx1bW8tYmFzZS1jb2xvcjogI2ZmZjsKCiAgICAvKiBUaW50ICovCiAgICAtLWx1bW8tdGludC01cGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjMpOwogICAgLS1sdW1vLXRpbnQtMTBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuMzcpOwogICAgLS1sdW1vLXRpbnQtMjBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNDQpOwogICAgLS1sdW1vLXRpbnQtMzBwY3Q6IGhzbGEoMCwgMCUsIDEwMCUsIDAuNSk7CiAgICAtLWx1bW8tdGludC00MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC41Nyk7CiAgICAtLWx1bW8tdGludC01MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC42NCk7CiAgICAtLWx1bW8tdGludC02MHBjdDogaHNsYSgwLCAwJSwgMTAwJSwgMC43KTsKICAgIC0tbHVtby10aW50LTcwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjc3KTsKICAgIC0tbHVtby10aW50LTgwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjg0KTsKICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDAsIDAlLCAxMDAlLCAwLjkpOwogICAgLS1sdW1vLXRpbnQ6ICNmZmY7CgogICAgLyogU2hhZGUgKi8KICAgIC0tbHVtby1zaGFkZS01cGN0OiBoc2xhKDIxNCwgNjElLCAyNSUsIDAuMDUpOwogICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNTclLCAyNCUsIDAuMSk7CiAgICAtLWx1bW8tc2hhZGUtMjBwY3Q6IGhzbGEoMjE0LCA1MyUsIDIzJSwgMC4xNik7CiAgICAtLWx1bW8tc2hhZGUtMzBwY3Q6IGhzbGEoMjE0LCA1MCUsIDIyJSwgMC4yNik7CiAgICAtLWx1bW8tc2hhZGUtNDBwY3Q6IGhzbGEoMjE0LCA0NyUsIDIxJSwgMC4zOCk7CiAgICAtLWx1bW8tc2hhZGUtNTBwY3Q6IGhzbGEoMjE0LCA0NSUsIDIwJSwgMC41KTsKICAgIC0tbHVtby1zaGFkZS02MHBjdDogaHNsYSgyMTQsIDQzJSwgMTklLCAwLjYxKTsKICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDQyJSwgMTglLCAwLjcyKTsKICAgIC0tbHVtby1zaGFkZS04MHBjdDogaHNsYSgyMTQsIDQxJSwgMTclLCAwLjgzKTsKICAgIC0tbHVtby1zaGFkZS05MHBjdDogaHNsYSgyMTQsIDQwJSwgMTYlLCAwLjk0KTsKICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzUlLCAxNSUpOwoKICAgIC8qIENvbnRyYXN0ICovCiAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby1zaGFkZS01cGN0KTsKICAgIC0tbHVtby1jb250cmFzdC0xMHBjdDogdmFyKC0tbHVtby1zaGFkZS0xMHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtMjBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTMwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC00MHBjdDogdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtNTBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtNTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTYwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdC03MHBjdDogdmFyKC0tbHVtby1zaGFkZS03MHBjdCk7CiAgICAtLWx1bW8tY29udHJhc3QtODBwY3Q6IHZhcigtLWx1bW8tc2hhZGUtODBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXNoYWRlLTkwcGN0KTsKICAgIC0tbHVtby1jb250cmFzdDogdmFyKC0tbHVtby1zaGFkZSk7CgogICAgLyogVGV4dCAqLwogICAgLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0KTsKICAgIC0tbHVtby1ib2R5LXRleHQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtOTBwY3QpOwogICAgLS1sdW1vLXNlY29uZGFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTcwcGN0KTsKICAgIC0tbHVtby10ZXJ0aWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTUwcGN0KTsKICAgIC0tbHVtby1kaXNhYmxlZC10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKCiAgICAvKiBQcmltYXJ5ICovCiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvcjogaHNsKDIxNCwgOTAlLCA1MiUpOwogICAgLS1sdW1vLXByaW1hcnktY29sb3ItNTBwY3Q6IGhzbGEoMjE0LCA5MCUsIDUyJSwgMC41KTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTEwcGN0OiBoc2xhKDIxNCwgOTAlLCA1MiUsIDAuMSk7CiAgICAtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3IpOwogICAgLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3I6ICNmZmY7CgogICAgLyogRXJyb3IgKi8KICAgIC0tbHVtby1lcnJvci1jb2xvcjogaHNsKDMsIDEwMCUsIDYxJSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgMTAwJSwgNjAlLCAwLjUpOwogICAgLS1sdW1vLWVycm9yLWNvbG9yLTEwcGN0OiBoc2xhKDMsIDEwMCUsIDYwJSwgMC4xKTsKICAgIC0tbHVtby1lcnJvci10ZXh0LWNvbG9yOiBoc2woMywgOTIlLCA1MyUpOwogICAgLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yOiAjZmZmOwoKICAgIC8qIFN1Y2Nlc3MgKi8KICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yOiBoc2woMTQ1LCA4MCUsIDQyJSk7IC8qIGhzbCgxNDQsODIlLDM3JSk7ICovCiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci01MHBjdDogaHNsYSgxNDUsIDc2JSwgNDQlLCAwLjU1KTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTEwcGN0OiBoc2xhKDE0NSwgNzYlLCA0NCUsIDAuMTIpOwogICAgLS1sdW1vLXN1Y2Nlc3MtdGV4dC1jb2xvcjogaHNsKDE0NSwgMTAwJSwgMzIlKTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbnRyYXN0LWNvbG9yOiAjZmZmOwogIH0KYCxBY2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtBY2UuaW5uZXJIVE1MPWA8c3R5bGU+JHt6dXIudG9TdHJpbmcoKS5yZXBsYWNlKCI6aG9zdCIsImh0bWwiKX08L3N0eWxlPmA7ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChBY2UuY29udGVudCk7dmFyIEZ1cj1DaWAKICBbdGhlbWV+PSdkYXJrJ10gewogICAgLyogQmFzZSAoYmFja2dyb3VuZCkgKi8KICAgIC0tbHVtby1iYXNlLWNvbG9yOiBoc2woMjE0LCAzNSUsIDIxJSk7CgogICAgLyogVGludCAqLwogICAgLS1sdW1vLXRpbnQtNXBjdDogaHNsYSgyMTQsIDY1JSwgODUlLCAwLjA2KTsKICAgIC0tbHVtby10aW50LTEwcGN0OiBoc2xhKDIxNCwgNjAlLCA4MCUsIDAuMTQpOwogICAgLS1sdW1vLXRpbnQtMjBwY3Q6IGhzbGEoMjE0LCA2NCUsIDgyJSwgMC4yMyk7CiAgICAtLWx1bW8tdGludC0zMHBjdDogaHNsYSgyMTQsIDY5JSwgODQlLCAwLjMyKTsKICAgIC0tbHVtby10aW50LTQwcGN0OiBoc2xhKDIxNCwgNzMlLCA4NiUsIDAuNDEpOwogICAgLS1sdW1vLXRpbnQtNTBwY3Q6IGhzbGEoMjE0LCA3OCUsIDg4JSwgMC41KTsKICAgIC0tbHVtby10aW50LTYwcGN0OiBoc2xhKDIxNCwgODIlLCA5MCUsIDAuNik7CiAgICAtLWx1bW8tdGludC03MHBjdDogaHNsYSgyMTQsIDg3JSwgOTIlLCAwLjcpOwogICAgLS1sdW1vLXRpbnQtODBwY3Q6IGhzbGEoMjE0LCA5MSUsIDk0JSwgMC44KTsKICAgIC0tbHVtby10aW50LTkwcGN0OiBoc2xhKDIxNCwgOTYlLCA5NiUsIDAuOSk7CiAgICAtLWx1bW8tdGludDogaHNsKDIxNCwgMTAwJSwgOTglKTsKCiAgICAvKiBTaGFkZSAqLwogICAgLS1sdW1vLXNoYWRlLTVwY3Q6IGhzbGEoMjE0LCAwJSwgMCUsIDAuMDcpOwogICAgLS1sdW1vLXNoYWRlLTEwcGN0OiBoc2xhKDIxNCwgNCUsIDIlLCAwLjE1KTsKICAgIC0tbHVtby1zaGFkZS0yMHBjdDogaHNsYSgyMTQsIDglLCA0JSwgMC4yMyk7CiAgICAtLWx1bW8tc2hhZGUtMzBwY3Q6IGhzbGEoMjE0LCAxMiUsIDYlLCAwLjMyKTsKICAgIC0tbHVtby1zaGFkZS00MHBjdDogaHNsYSgyMTQsIDE2JSwgOCUsIDAuNDEpOwogICAgLS1sdW1vLXNoYWRlLTUwcGN0OiBoc2xhKDIxNCwgMjAlLCAxMCUsIDAuNSk7CiAgICAtLWx1bW8tc2hhZGUtNjBwY3Q6IGhzbGEoMjE0LCAyNCUsIDEyJSwgMC42KTsKICAgIC0tbHVtby1zaGFkZS03MHBjdDogaHNsYSgyMTQsIDI4JSwgMTMlLCAwLjcpOwogICAgLS1sdW1vLXNoYWRlLTgwcGN0OiBoc2xhKDIxNCwgMzIlLCAxMyUsIDAuOCk7CiAgICAtLWx1bW8tc2hhZGUtOTBwY3Q6IGhzbGEoMjE0LCAzMyUsIDEzJSwgMC45KTsKICAgIC0tbHVtby1zaGFkZTogaHNsKDIxNCwgMzMlLCAxMyUpOwoKICAgIC8qIENvbnRyYXN0ICovCiAgICAtLWx1bW8tY29udHJhc3QtNXBjdDogdmFyKC0tbHVtby10aW50LTVwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTEwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTIwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTMwcGN0OiB2YXIoLS1sdW1vLXRpbnQtMzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTQwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNDBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTUwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTYwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNjBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTcwcGN0OiB2YXIoLS1sdW1vLXRpbnQtNzBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTgwcGN0OiB2YXIoLS1sdW1vLXRpbnQtODBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0LTkwcGN0OiB2YXIoLS1sdW1vLXRpbnQtOTBwY3QpOwogICAgLS1sdW1vLWNvbnRyYXN0OiB2YXIoLS1sdW1vLXRpbnQpOwoKICAgIC8qIFRleHQgKi8KICAgIC0tbHVtby1oZWFkZXItdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdCk7CiAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTkwcGN0KTsKICAgIC0tbHVtby1zZWNvbmRhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC03MHBjdCk7CiAgICAtLWx1bW8tdGVydGlhcnktdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC01MHBjdCk7CiAgICAtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CgogICAgLyogUHJpbWFyeSAqLwogICAgLS1sdW1vLXByaW1hcnktY29sb3I6IGhzbCgyMTQsIDg2JSwgNTUlKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0OiBoc2xhKDIxNCwgODYlLCA1NSUsIDAuNSk7CiAgICAtLWx1bW8tcHJpbWFyeS1jb2xvci0xMHBjdDogaHNsYSgyMTQsIDkwJSwgNjMlLCAwLjEpOwogICAgLS1sdW1vLXByaW1hcnktdGV4dC1jb2xvcjogaHNsKDIxNCwgMTAwJSwgNzAlKTsKICAgIC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yOiAjZmZmOwoKICAgIC8qIEVycm9yICovCiAgICAtLWx1bW8tZXJyb3ItY29sb3I6IGhzbCgzLCA5MCUsIDYzJSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItNTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuNSk7CiAgICAtLWx1bW8tZXJyb3ItY29sb3ItMTBwY3Q6IGhzbGEoMywgOTAlLCA2MyUsIDAuMSk7CiAgICAtLWx1bW8tZXJyb3ItdGV4dC1jb2xvcjogaHNsKDMsIDEwMCUsIDY3JSk7CgogICAgLyogU3VjY2VzcyAqLwogICAgLS1sdW1vLXN1Y2Nlc3MtY29sb3I6IGhzbCgxNDUsIDY1JSwgNDIlKTsKICAgIC0tbHVtby1zdWNjZXNzLWNvbG9yLTUwcGN0OiBoc2xhKDE0NSwgNjUlLCA0MiUsIDAuNSk7CiAgICAtLWx1bW8tc3VjY2Vzcy1jb2xvci0xMHBjdDogaHNsYSgxNDUsIDY1JSwgNDIlLCAwLjEpOwogICAgLS1sdW1vLXN1Y2Nlc3MtdGV4dC1jb2xvcjogaHNsKDE0NSwgODUlLCA0NyUpOwogIH0KCiAgaHRtbCB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICB9CgogIFt0aGVtZX49J2RhcmsnXSB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICB9CgogIGgxLAogIGgyLAogIGgzLAogIGg0LAogIGg1LAogIGg2IHsKICAgIGNvbG9yOiB2YXIoLS1sdW1vLWhlYWRlci10ZXh0LWNvbG9yKTsKICB9CgogIGEgewogICAgY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS10ZXh0LWNvbG9yKTsKICB9CgogIGJsb2NrcXVvdGUgewogICAgY29sb3I6IHZhcigtLWx1bW8tc2Vjb25kYXJ5LXRleHQtY29sb3IpOwogIH0KCiAgY29kZSwKICBwcmUgewogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtbSk7CiAgfQpgO2pjKCIiLEZ1cix7bW9kdWxlSWQ6Imx1bW8tY29sb3IifSk7dmFyIEJ1cj1DaWAKICA6aG9zdCB7CiAgICBjb2xvcjogdmFyKC0tbHVtby1ib2R5LXRleHQtY29sb3IpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpICFpbXBvcnRhbnQ7CiAgfQpgO2pjKCIiLEJ1cix7bW9kdWxlSWQ6Imx1bW8tY29sb3ItbGVnYWN5IixpbmNsdWRlOlsibHVtby1jb2xvciJdfSk7dmFyIFBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1BjZS5pbm5lckhUTUw9YAogIDxzdHlsZT4KICAgIEBmb250LWZhY2UgewogICAgICBmb250LWZhbWlseTogJ2x1bW8taWNvbnMnOwogICAgICBzcmM6IHVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBQkVjQUFzQUFBQUFJaXdBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkhVMVZDQUFBQkNBQUFBRHNBQUFCVUlJc2xlazlUTHpJQUFBRkVBQUFBUXdBQUFGWkFJVXVLWTIxaGNBQUFBWWdBQUFENEFBQURyc0NVOGQ1bmJIbG1BQUFDZ0FBQUMyTUFBQmQ0aDlUbzJXaGxZV1FBQUEza0FBQUFNQUFBQURaYS82U3NhR2hsWVFBQURoUUFBQUFkQUFBQUpBYnBBMzVvYlhSNEFBQU9OQUFBQUJBQUFBQ3NwQkFBQUd4dlkyRUFBQTVFQUFBQVdBQUFBRmg1NUlBc2JXRjRjQUFBRHB3QUFBQWZBQUFBSUFGS0FYQnVZVzFsQUFBT3ZBQUFBVEVBQUFJdVVVSlpDSEJ2YzNRQUFBL3dBQUFCS3dBQUFlbG04U3pWZUp4allHUmdZT0JpTUdDd1kyQnljZk1KWWVETFNTekpZNUJpWUdHQUFKQThNcHN4SnpNOWtZRUR4Z1BLc1lCcERpQm1nNGdDQUNZN0JVZ0FlSnhqWUdTK3lEaUJnWldCZ2FtS2FROERBME1QaEdaOHdHREl5QVFVWldCbFpzQUtBdEpjVXhnY1hqRyswbUlPK3AvRkVNVWN4REFOS013SWtnTUFCbjhNTFFCNG5PM1NXVzZETUFCRjBVdHdDRW5JUE0vemhMSzhMcWhmWFJ5YlNQMTRYVVl0SFY5aEdZUXdRQk5JbzNjVUlQa2hRZU03cmliMWVrcW5YZzk4MVh1QzFxdnk4NGx6b2psZWgzcHV4TDBoUGpHalJVNDczdGVsb0VlZkFVTkdqSmt3WmNhY0JVdFdyTm13WmNlZUEwZE9uTGx3NWNhZEIwOWVsUEdoR2YrajBOVEkvNjVLZlhlclQ2SmhxS25wUkt0Z09wdXFhVHJ0S2pQVWxxSG1odG8yMUk3cEw2aTZobHFZM3E3cUdXcmZVQWVHT2pUVWthR09EWFZpcUZORG5SbnEzRkFYaHJvMDFKV2hyZzExWTZoYlE5MFo2dDVRRDRaNk5OU1RvWjROOVdLb1YwTzlHZXJkVUIrRytqVFVsNkdXUnZrTDI0QmtFWGljdFZoOWJGdlZGYi9ueHZieis3UmYvTjZ6SGNkMmJDZlArV2djMVo5TjBqcE5uRUw2a2JSVlM2SEEyaFFZR2g5VEdSMUNiQ3FhMnJYcldPa1FFL3NITkpnbXRadm9WTlpxRTFCMUROSHh6VFF4Q2VoVVRZaUpUUXlFTnVpMHFTTGV6cjNQZHV5UWZnbVJXT2ZkZTgrOTU1MXo3cm5uL080akxvSi9iUlAwVWFLUU1MRkpqcEJBdnBoTFpDM0RrMG9rN1dCelIyL3VwSnM3Unl3L25mRmJsbi91dU4vYXBDdndyS0xyU3ZVcVJ1ZmJtNXBuMGZzMHc0Z1l4bkdWUDZxSG5PNGJXaURRR1Fnd3RTNmxtM2xCM1FvWDFNMnZ3RW11emlyRjM5eStFczIrREo4ZDFwa3lxQklxb3plM0QxK1p6NERyRm9henhJOGRXd01yRGxaMkRNcVFBUjlBUk9zSlUrMmNtbFRQYXpUY281MkYxeFRhMmEyK0s4dnZxOTJkVkhtdExvUGVRWC9BWlBSWUd0aERZT2VaakJqS29Gc1ZHdWxSM2xXVTk1V2VDSzQ0cUhVN01oV1VHVUtaRFQzb0tVY0cyR1d1aCtFRERmVVlBL2poQWhsMFRPc0pOWVNFdTdtUW1pM1V6Zlh3WktBNEJzVnNITFhRWUdnUlc5NXVFdHBKMVZmbjlYaUxyaVJCbEZFcXhzRGpBMDl5Q05Vb1F4eHdkN0tXU1R0MnkzR1RLaWZscUhSU29XWmMzbTExV2EvZkpkRmdYRDRzU1lmbGVKQktkOEdNejdKOGRabi9jR1JDY0tHRG5BMkdlM2ZLemN2bG5URE50aEdXTFh6WC9XYVh0VUFtUmdlTGxIU3IzMHIwRzlVVFhNYjBBdG13ek9veTczZmtTbEhaa2R1dy9UWXVVOWNBRDRZdXRQb3hUVHNBMzc5N3dWcjRaLzFOQzV6QVJIcjR2dHhKanhJZmlaTWhNa2JXaysxNEJuSlpLd3FHWndEZnN3THl4V0RTZzExckZMSkY3Tm9weGpkMWgxL1FPVCtvZXpnZnUzWXErSGsrZHVmNXgrNDBvMUdUa2FJZ2lrSy9JRW5DNmFZeENVQmFaSlNONFhUWUZqVS9ZTU5JS3FKd2hER09DQ0k4RkRYblhtWGp0R2hHSnlTaHFqQU9uQk9rVzJKRzlTN0dnWWVNV0FVNUp6aG5XbUJPYU9NK0NLRVBvcVNmRkRDMlVucStETGxVZ1VWVUZGTFpHSmc2anRsb2pzZHNhOGtQT2JQdUpkaTVkbkJkQnNMSk1HVFdEYTR0Mkp2dHd1UG85cytZODZzdXYvVzMzUUcxckFhT0FVVit2eDRLNmYyRDA0UFZLbEM3V0xTclp6QWk0NVpWNmxJQzdXb1hxbVJ5dlVxb1Z3cnpVb1ZzSWplVFhXUXYrUkg1R1RsQlhpQi9JbjhsbjBJYkJDQUZPYWpBSnJnWll5T0hXcU9mVWUvYUhqSTEyUjZPUW8xakNndDIxNWwrNGY2WFBiKzBNTm91MFYrNDNuMkY3N3RTZlJiMjRkN3ppdGduS212WUhzNjl6dWdhUHZCd3Y2aW9Ya2IyTGRMNjVBdHc1MXVMa1hsdTFiaE1NUmNYU1BjWW9xS0lSbGgzNGxRUDgvNUpidVVGeWU0dnhENi82TXhGRjExQzB1VkxyOVVsZ3c0NHRTM3BNVmlOTFVFeGJ5Y0ZnTEljdCtRRE1pYlJpbXgxeWRVejhGWFppdU9JREJPTVZYMm5VWmMraHVORTVYVUo4MXVpSm9pYWJ3cWFWRjB1YWNLYmF1L3BsNFIyVlcwWFhsSnJhNmJvVnJZRzY0NlRGNU5Zend5NHZqRU5WckRsY05wWlBsOERINlhYOFhXQ3gwbXZXVlpZNktGTHJ2c1k2Ni96UGljdDVGbnhhTlVSL2p1dlpDTTNUdkQ2MEUyVzF0Wml6YlhUUER1YWJjbTBuYmJ6cFdLcG1BMWF5QlE4Z2llZExVTStBMGtOakJqUWptdVl6N1lyZ0lYWXZtRjYzWkxCd1NYcnBuOVRiOXd3ZGQvVTFIMFBNUUszWGNPOHVsM1dUN1B5UFBkcHkwVGVtS3hOUmNKTmF1aVhKbm5VRHBVcHBRV3M0U25VSXkwRUVTR1lxSllRTEdIeHphR1d3VklhUzZZN21RRk04WmpZRFEzYXhqZjYxU1dqVTMzSndPWkExcHdhRzFMOW16ZjcxYUhSZFgxSkh3NkZwMGFYaE53YnF5ZUdOZzROYmR6R0NCeG96NFpYank0TnU2OVpyNnNEWTZ2TXJMVTVuQTFQOEprYmRXWEo2RVJmTXJ5dk5oMUpmUTkrVDRkSWhHdks5dzNkeGpCQnphdHNRL01sT0hWSURuWXBEejZvZEFYbFEwMXQyUGE1SWFmZDhNTXB4QWVES1AwQzZDamdWTFQ1b3NCNmljVXgwMWxXalh4elQvR3lSRjJ3ZWxFTTVaLzdqRzNWalExU3JObjVJYnl6T0c1ZG9iQjMvUUh4eVp2c1hjb3o4SW9Fd1M3cGxDZyt6eEhRazQyNHE5QmZFcGtFU0piRkhRdXNEQlNXRmt1QmtvUE8wa0xLd1JWWWp4R1hsSFRjVERRTUovSDZUWDlhZmtPN21ucmFUTzFmZVRuWkFYTHU0Y3A3SEFYTW1ORzF5ZUZrOVRnUy9OSGhaUi80UW9CVHIvWkIrNmhDZ3lsMTVOcTFVYk42bkUxL1puUDFVMmNpekNCcHZzOGNKUVpKNExrWXg1Ti95WlBBVVpOUVEwVjRmM0JRbGxXckszWVJ6bDMwZE9UNlJWbjJ1cE51cjZ3b1NhOENxcGRUL2FLbkJNNG8zak51cjlkOXhxdFVUNnZlQkV0OUNhOWF0K0VSekVFaFVrUjhzYTVtUTRhVnZKb1ZlRUE4ekk0ZWk1bVVMWEZHeVU3ei82VEFlWUxWY3B6U1daWThQWVlGNXlyVFY2MHNUMCtYVjE0MXZYKytXZjE2VjJiRmVHVlBaWHhGcGt2eWVLVFdMbHpmVzBtbkt4c1k2WTMyOTQvMDk5OFNDZlgxYmxtNXBiY3ZGR2xxL3IwN01SQU1oWUlEaVc1SkZLV1czdmRyRXBDc1pTSkcrb203WnUvUFNTY1pKaE5rTGJtVzVXc3IxMnBXcVc1ekt0bHdSUzRiRk94VXcxN21Denk2bHNrQ0RsMVdZT0dXRFlyQURyTUE3QkREd2VXV05kNWtvaUpuUjFkeit5dExQMnEwU3FQQjFsbksyY2NCN1JZZTRGU29Qa3MzaUIzdDR0eFRTSGN0YjJzeTFpdmswcHZIdUNObTZ3MWY2d3h2MytPQ2dONzhMcWRRblVWaDdSMG9UQXAwek9mMnJiVzc3MFZ1NUMyZEl5R2RUbkhvOHpTamk3ZHBwajBVU29WQ3orbGhSTVRoNTNUZXE5VmJHZmJqdVNiQW9vU2RYYXlZNFBZSGczNzRDNmY3Z2wxQi9EWHVKNC9RWHhPQmRKRkpzcEZzSTNlZ3BvV1VVQ2psVElGbk5ZTmwrWnlaS21CZVlLR0hrRDFReURsaGFLYkt3S2NJSnFKNFRMSjJPbWRZL0pXWGFlNERkR0J3OEhaN2VYY2dGRjJ6cjJTb2FsRHJ5NWlLcW9hMFB1aGUzaFBRMnMzZWxUWU0rTUkrbjNySzBLZ0w3L0xhM0dlTUx0Nm03dTkxMnZHbnZ0T1JpSWEwcUJtaHFWaStYVzlYTkJtcWI4ZVZnS3pJSGZHSTViTm9HN1gwVUN6ZUlTbXFJY08vblk4Rkg3VThhdlg5ZngvU1QraHgwc2V6UHc5UXk4TXVtM0dXZjJONFV5L3lJWUdWQlhiSkhXSVpwN2RmVGNwdGRNVHI5UW1xN0RhaUsvdWtxQ0w0a3Q0UlVmUzVYUG5NdG1UMjIvbVFGcUY3ZW1TcXRybHU4U1ZFbHhEUkpyWk9Ea3B1d2UwVmZUZmpkRXAxZjdBN3YrZm96TkJYVUovNldUdUsyVHRGbHBGVlpBWjNMY0Z2VWkxWjJwMllUK0VNQWtHSlZTdE96TFRBUGc0SXFXSUFselJTak9Ca2wyenhqM1RLeWNwelQvTW52WDN1YVNNV00rZ1UwcmtYam9oaGVmVlJNYXBzMy9rTE1TS3YyM2xUMjN1eFFya1FqeU9KbGVNRHNkaEFuRDZaR0VsV1o1TWpDWHpDRS9oa1dYK1dGNGtuekdoVk95SzJlUVpla1YzZXlvMHpMOGt1WVdDbkRDdmpqaEFrY1RQT0JEWFZkb2F2M0hWY0ZuUWpMdnRWOVMycDB6QTZKZWdQd01ReHQreUZiM2xsOXpHbHEvNWRSS2IzY0V5UVlvYU5ZcGhhcko3eENCN0FXeHNMWTNqalpYWTBYc1pqMFdqd2M5STZQUC9kS0FCbkNaYXFIcGFaRUFDeGs0WmVMWlNLTmdaQUJsK2xZUVgxc0pRT1NYM242cjQxMGV2Y291ZDVKZUFHVVhWUDlIMXRaT0tlalRxNE9ubzB6MGVycm8xRnJuT3BvaHZhMWQvaFRkdFZzUWRLTjVXOVJsVDNOakQwbnpueUtOVGdLQU1mV05XY3lvZFYwSUdMUElIT0YwbzRKeXF1ZmFLNHo2V0lJenVHaDNkOGM4Y3dRZzhFUitPVnh5cmpkbTh2TnVodHM0TG9PaWhHeElNdVVkZ3p3aVlON3hoaDErb1puSk51VEc3Z1FadnU0WFdaOUdBWlpqR0V1YndlUHFZaHRLRFRIKzlWUWtsMTcvaUd5YnNuSis4K3NLdHlQcmNsbDl0eTY1WnNkc3QvOWlxcEVLaDdNNVZkQnhoM2NzT2ROYzZ0VzNJMXV5TTFQek9YZWdTT3JMRnNGTkkyTzI3TStURjJBcG5OOU1VdjV1ZDZManhJdkVRbkhSenhJdTRJc0E5TUxGa0puMnRjWm9aN09ON2RYZTd1anJjOEhydXNQS2FtbHFYd2Q3N2xRVXVMcGlsYXU0UFVNYXB1ZUJiN2lyVTRSb1VYRVlYdVZ1SUdsUkdtT3ArMmxOa2FSUFZ6aU9xbWxhWnZhcUc0ZEZnU2owanhFSldydjEySVVXbnRtdytyZlFhclJFMEFwaDRvY0k2bmxVbEdxcyt1My8rVC9ldGhXNjJQcEhwMmVIYlpzdG5oL3dPTzk1eURBSGljWTJCa1lHQUE0cG1KNlFIeC9EWmZHYmlaWHdCRkdHcFVOelFpNlArdm1hY3kzUUp5T1JpWVFLSUFOb1VMVlhpY1kyQmtZR0FPK3A4RkpGOHdBQUh6VkFaR0JsU2dEUUJXOWdOdkFBQUFlSnhqWUdCZ1lINHhOREFBendRbWp3QUFBQUFBVGdDYUFPZ0JDZ0VzQVU0QmNBR2FBY1FCN2dJYUFwd0M2QVNhQkx3RTFnVHlCUTRGS2dWNkJkQUYvZ1pFQm1ZR3RnY1lCNUFJR0FoU0NHb0kvZ2xHQ2I0SjJnb0VDandLZ2dxNEN2QUxVQXVXQzd4NG5HTmdaR0JnMEdaTVlSQmxBQUVtSU9ZQ1FnYUcvMkErQXdBWWxBRzhBSGljYlpFOVRzTXdHSWJmOUEvUlNnZ0VZbUh4QWd0cStqTjJaR2ozRHQzVDFHbFRPWEhrdUJXOUF5ZmdFQnlDZ1ROd0NBN0JXL05KbFZCdHlkL2p4KzhYS3dtQWEzd2h3bkZFNkliMU9CcTQ0TzZQbTZRYjRSYjVRYmlOSGg2Rk8vUkQ0UzZlTVJIdTRSYWFUNGhhbHpSM2VCVnU0QXB2d2szNmQrRVcrVU80alh0OENuZm92NFc3V09CSHVJZW42TVhzQ3R2UFUxdldjNzNlbWNTZHhJa1cydFc1TGRVb0hwN2tUSmZhSlY2djFQS2c2djE2N0gybU1tY0xOYldsMThaWVZUbTcxYW1QTjk1WGs4RWdFeCtudG9EQkRnVXMrc2lSc3Bhb01lZjdydWtORXJpemlYTnV3UzdIbW9lOXdnZ3h2K2U1NUl6Sk1xUVRlTllWMDBzY3VOYlk4K1l4clVmR2ZjYU1aYi9DTlBRZTA0YlQwbFRoYkV1VDBzZlloSzZLLzIzQW1mM0x4K0gyNGhjajRHU2NBQUFBZUp4dGp0bHVnekFRUmJrSlVFSkl1dS83dnFSOGxHTlBBY1d4MFlBYjVlL0xrbFI5NkVnZW5TdWZHWTAzOFBxS3ZmOXJoZ0dHOEJFZ3hBNGlqQkJqakFRVFRMR0xQZXpqQUljNHdqRk9jSW96bk9NQ2w3akNOVzV3aXp2YzR3R1BlTUl6WHZDS043empBek44ZW9uUVJXWlNTYVltanZ1ZzZhc2U5OGhGbHRleE1KbW1WTm1WMldCdmROZ1pVYyt1akFXelhXM1VEbnUxdzQzYXNTdEhjOEdwekFYWC9weTBqcVRRWkpUZ2tjeEpMcGFDRjBsRDMyeE50KzQzdEFzbjI5RGZ0MDJ1REtTMmNqR1VOZ3NrMjZxSzJsRnRoWW9VMjdJTlBxbWlEcWc1Z29lMHBxUjVxU29xTWRlay9DVVpGeXdMNDZyRXNpSW1sZXFpcW9NeXQ0YmFYbHUvMUdMZE5GZjV6YmNObWRyMVlVV0NaZTQ3byt6VW1iL0RvU3RidzNjVnNlZjlBTGpqaVBRQSkgZm9ybWF0KCd3b2ZmJyk7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIH0KCiAgICBodG1sIHsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLWNlbnRlcjogIlxcZWEwMSI7CiAgICAgIC0tbHVtby1pY29ucy1hbGlnbi1sZWZ0OiAiXFxlYTAyIjsKICAgICAgLS1sdW1vLWljb25zLWFsaWduLXJpZ2h0OiAiXFxlYTAzIjsKICAgICAgLS1sdW1vLWljb25zLWFuZ2xlLWRvd246ICJcXGVhMDQiOwogICAgICAtLWx1bW8taWNvbnMtYW5nbGUtbGVmdDogIlxcZWEwNSI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS1yaWdodDogIlxcZWEwNiI7CiAgICAgIC0tbHVtby1pY29ucy1hbmdsZS11cDogIlxcZWEwNyI7CiAgICAgIC0tbHVtby1pY29ucy1hcnJvdy1kb3duOiAiXFxlYTA4IjsKICAgICAgLS1sdW1vLWljb25zLWFycm93LWxlZnQ6ICJcXGVhMDkiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctcmlnaHQ6ICJcXGVhMGEiOwogICAgICAtLWx1bW8taWNvbnMtYXJyb3ctdXA6ICJcXGVhMGIiOwogICAgICAtLWx1bW8taWNvbnMtYmFyLWNoYXJ0OiAiXFxlYTBjIjsKICAgICAgLS1sdW1vLWljb25zLWJlbGw6ICJcXGVhMGQiOwogICAgICAtLWx1bW8taWNvbnMtY2FsZW5kYXI6ICJcXGVhMGUiOwogICAgICAtLWx1bW8taWNvbnMtY2hlY2ttYXJrOiAiXFxlYTBmIjsKICAgICAgLS1sdW1vLWljb25zLWNoZXZyb24tZG93bjogIlxcZWExMCI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLWxlZnQ6ICJcXGVhMTEiOwogICAgICAtLWx1bW8taWNvbnMtY2hldnJvbi1yaWdodDogIlxcZWExMiI7CiAgICAgIC0tbHVtby1pY29ucy1jaGV2cm9uLXVwOiAiXFxlYTEzIjsKICAgICAgLS1sdW1vLWljb25zLWNsb2NrOiAiXFxlYTE0IjsKICAgICAgLS1sdW1vLWljb25zLWNvZzogIlxcZWExNSI7CiAgICAgIC0tbHVtby1pY29ucy1jcm9zczogIlxcZWExNiI7CiAgICAgIC0tbHVtby1pY29ucy1kb3dubG9hZDogIlxcZWExNyI7CiAgICAgIC0tbHVtby1pY29ucy1kcm9wZG93bjogIlxcZWExOCI7CiAgICAgIC0tbHVtby1pY29ucy1lZGl0OiAiXFxlYTE5IjsKICAgICAgLS1sdW1vLWljb25zLWVycm9yOiAiXFxlYTFhIjsKICAgICAgLS1sdW1vLWljb25zLWV5ZTogIlxcZWExYiI7CiAgICAgIC0tbHVtby1pY29ucy1leWUtZGlzYWJsZWQ6ICJcXGVhMWMiOwogICAgICAtLWx1bW8taWNvbnMtbWVudTogIlxcZWExZCI7CiAgICAgIC0tbHVtby1pY29ucy1taW51czogIlxcZWExZSI7CiAgICAgIC0tbHVtby1pY29ucy1vcmRlcmVkLWxpc3Q6ICJcXGVhMWYiOwogICAgICAtLWx1bW8taWNvbnMtcGhvbmU6ICJcXGVhMjAiOwogICAgICAtLWx1bW8taWNvbnMtcGhvdG86ICJcXGVhMjEiOwogICAgICAtLWx1bW8taWNvbnMtcGxheTogIlxcZWEyMiI7CiAgICAgIC0tbHVtby1pY29ucy1wbHVzOiAiXFxlYTIzIjsKICAgICAgLS1sdW1vLWljb25zLXJlZG86ICJcXGVhMjQiOwogICAgICAtLWx1bW8taWNvbnMtcmVsb2FkOiAiXFxlYTI1IjsKICAgICAgLS1sdW1vLWljb25zLXNlYXJjaDogIlxcZWEyNiI7CiAgICAgIC0tbHVtby1pY29ucy11bmRvOiAiXFxlYTI3IjsKICAgICAgLS1sdW1vLWljb25zLXVub3JkZXJlZC1saXN0OiAiXFxlYTI4IjsKICAgICAgLS1sdW1vLWljb25zLXVwbG9hZDogIlxcZWEyOSI7CiAgICAgIC0tbHVtby1pY29ucy11c2VyOiAiXFxlYTJhIjsKICAgIH0KICA8L3N0eWxlPgpgO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoUGNlLmNvbnRlbnQpO3ZhciBIdXI9Q2lgCiAgOmhvc3QgewogICAgLS1sdW1vLXNpemUteHM6IDEuNjI1cmVtOwogICAgLS1sdW1vLXNpemUtczogMS44NzVyZW07CiAgICAtLWx1bW8tc2l6ZS1tOiAyLjI1cmVtOwogICAgLS1sdW1vLXNpemUtbDogMi43NXJlbTsKICAgIC0tbHVtby1zaXplLXhsOiAzLjVyZW07CgogICAgLyogSWNvbnMgKi8KICAgIC0tbHVtby1pY29uLXNpemUtczogMS4yNWVtOwogICAgLS1sdW1vLWljb24tc2l6ZS1tOiAxLjVlbTsKICAgIC0tbHVtby1pY29uLXNpemUtbDogMi4yNWVtOwogICAgLyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCiAgICAtLWx1bW8taWNvbi1zaXplOiB2YXIoLS1sdW1vLWljb24tc2l6ZS1tKTsKICB9CmAsSWNlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7SWNlLmlubmVySFRNTD1gPHN0eWxlPiR7SHVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoSWNlLmNvbnRlbnQpO3ZhciBWdXI9Q2lgCiAgOmhvc3QgewogICAgLyogU3F1YXJlICovCiAgICAtLWx1bW8tc3BhY2UteHM6IDAuMjVyZW07CiAgICAtLWx1bW8tc3BhY2UtczogMC41cmVtOwogICAgLS1sdW1vLXNwYWNlLW06IDFyZW07CiAgICAtLWx1bW8tc3BhY2UtbDogMS41cmVtOwogICAgLS1sdW1vLXNwYWNlLXhsOiAyLjVyZW07CgogICAgLyogV2lkZSAqLwogICAgLS1sdW1vLXNwYWNlLXdpZGUteHM6IGNhbGModmFyKC0tbHVtby1zcGFjZS14cykgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLXhzKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLXM6IGNhbGModmFyKC0tbHVtby1zcGFjZS1zKSAvIDIpIHZhcigtLWx1bW8tc3BhY2Utcyk7CiAgICAtLWx1bW8tc3BhY2Utd2lkZS1tOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbSkgLyAyKSB2YXIoLS1sdW1vLXNwYWNlLW0pOwogICAgLS1sdW1vLXNwYWNlLXdpZGUtbDogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLWwpIC8gMikgdmFyKC0tbHVtby1zcGFjZS1sKTsKICAgIC0tbHVtby1zcGFjZS13aWRlLXhsOiBjYWxjKHZhcigtLWx1bW8tc3BhY2UteGwpIC8gMikgdmFyKC0tbHVtby1zcGFjZS14bCk7CgogICAgLyogVGFsbCAqLwogICAgLS1sdW1vLXNwYWNlLXRhbGwteHM6IHZhcigtLWx1bW8tc3BhY2UteHMpIGNhbGModmFyKC0tbHVtby1zcGFjZS14cykgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLXM6IHZhcigtLWx1bW8tc3BhY2UtcykgY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXMpIC8gMik7CiAgICAtLWx1bW8tc3BhY2UtdGFsbC1tOiB2YXIoLS1sdW1vLXNwYWNlLW0pIGNhbGModmFyKC0tbHVtby1zcGFjZS1tKSAvIDIpOwogICAgLS1sdW1vLXNwYWNlLXRhbGwtbDogdmFyKC0tbHVtby1zcGFjZS1sKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UtbCkgLyAyKTsKICAgIC0tbHVtby1zcGFjZS10YWxsLXhsOiB2YXIoLS1sdW1vLXNwYWNlLXhsKSBjYWxjKHZhcigtLWx1bW8tc3BhY2UteGwpIC8gMik7CiAgfQpgLExjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO0xjZS5pbm5lckhUTUw9YDxzdHlsZT4ke1Z1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKExjZS5jb250ZW50KTt2YXIgVXVyPUNpYAogIDpob3N0IHsKICAgIC8qIEJvcmRlciByYWRpdXMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLXM6IDAuMjVlbTsgLyogQ2hlY2tib3gsIGJhZGdlLCBkYXRlLXBpY2tlciB5ZWFyIGluZGljYXRvciwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1cy1tOiB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMsIDAuMjVlbSk7IC8qIEJ1dHRvbiwgdGV4dCBmaWVsZCwgbWVudSBvdmVybGF5LCBldGMgKi8KICAgIC0tbHVtby1ib3JkZXItcmFkaXVzLWw6IDAuNWVtOyAvKiBEaWFsb2csIG5vdGlmaWNhdGlvbiwgZXRjICovCiAgICAtLWx1bW8tYm9yZGVyLXJhZGl1czogMC4yNWVtOyAvKiBEZXByZWNhdGVkICovCgogICAgLyogU2hhZG93ICovCiAgICAtLWx1bW8tYm94LXNoYWRvdy14czogMCAxcHggNHB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS01MHBjdCk7CiAgICAtLWx1bW8tYm94LXNoYWRvdy1zOiAwIDJweCA0cHggLTFweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAzcHggMTJweCAtMXB4IHZhcigtLWx1bW8tc2hhZGUtMzBwY3QpOwogICAgLS1sdW1vLWJveC1zaGFkb3ctbTogMCAycHggNnB4IC0xcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgOHB4IDI0cHggLTRweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LWw6IDAgM3B4IDE4cHggLTJweCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSwgMCAxMnB4IDQ4cHggLTZweCB2YXIoLS1sdW1vLXNoYWRlLTQwcGN0KTsKICAgIC0tbHVtby1ib3gtc2hhZG93LXhsOiAwIDRweCAyNHB4IC0zcHggdmFyKC0tbHVtby1zaGFkZS0yMHBjdCksIDAgMThweCA2NHB4IC04cHggdmFyKC0tbHVtby1zaGFkZS00MHBjdCk7CgogICAgLyogQ2xpY2thYmxlIGVsZW1lbnQgY3Vyc29yICovCiAgICAtLWx1bW8tY2xpY2thYmxlLWN1cnNvcjogZGVmYXVsdDsKICB9CmAsa2NlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7a2NlLmlubmVySFRNTD1gPHN0eWxlPiR7VXVyLnRvU3RyaW5nKCkucmVwbGFjZSgiOmhvc3QiLCJodG1sIil9PC9zdHlsZT5gO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoa2NlLmNvbnRlbnQpO3ZhciBxdXI9Q2lgCiAgOmhvc3QgewogICAgLyogcHJldHRpZXItaWdub3JlICovCiAgICAtLWx1bW8tZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1JvYm90bycsICdTZWdvZSBVSScsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsICdTZWdvZSBVSSBTeW1ib2wnOwoKICAgIC8qIEZvbnQgc2l6ZXMgKi8KICAgIC0tbHVtby1mb250LXNpemUteHhzOiAwLjc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14czogMC44MTI1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS1zOiAwLjg3NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUtbTogMXJlbTsKICAgIC0tbHVtby1mb250LXNpemUtbDogMS4xMjVyZW07CiAgICAtLWx1bW8tZm9udC1zaXplLXhsOiAxLjM3NXJlbTsKICAgIC0tbHVtby1mb250LXNpemUteHhsOiAxLjc1cmVtOwogICAgLS1sdW1vLWZvbnQtc2l6ZS14eHhsOiAyLjVyZW07CgogICAgLyogTGluZSBoZWlnaHRzICovCiAgICAtLWx1bW8tbGluZS1oZWlnaHQteHM6IDEuMjU7CiAgICAtLWx1bW8tbGluZS1oZWlnaHQtczogMS4zNzU7CiAgICAtLWx1bW8tbGluZS1oZWlnaHQtbTogMS42MjU7CiAgfQpgLFJjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO1JjZS5pbm5lckhUTUw9YDxzdHlsZT4ke3F1ci50b1N0cmluZygpLnJlcGxhY2UoIjpob3N0IiwiaHRtbCIpfTwvc3R5bGU+YDtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFJjZS5jb250ZW50KTt2YXIgR3VyPUNpYAogIGh0bWwgewogICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZSwgdmFyKC0tbHVtby1mb250LXNpemUtbSkpOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtbSk7CiAgICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7CiAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CiAgfQoKICAvKiBDYW7igJl0IGNvbWJpbmUgd2l0aCB0aGUgYWJvdmUgc2VsZWN0b3IgYmVjYXVzZSB0aGF0IGRvZXNu4oCZdCB3b3JrIGluIGJyb3dzZXJzIHdpdGhvdXQgbmF0aXZlIHNoYWRvdyBkb20gKi8KICA6aG9zdCB7CiAgICBmb250LWZhbWlseTogdmFyKC0tbHVtby1mb250LWZhbWlseSk7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLCB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKSk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC1tKTsKICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwogICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICB9CgogIHNtYWxsLAogIFt0aGVtZX49J2ZvbnQtc2l6ZS1zJ10gewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sdW1vLWxpbmUtaGVpZ2h0LXMpOwogIH0KCiAgW3RoZW1lfj0nZm9udC1zaXplLXhzJ10gewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14cyk7CiAgICBsaW5lLWhlaWdodDogdmFyKC0tbHVtby1saW5lLWhlaWdodC14cyk7CiAgfQoKICBoMSwKICBoMiwKICBoMywKICBoNCwKICBoNSwKICBoNiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQteHMpOwogICAgbWFyZ2luLXRvcDogMS4yNWVtOwogIH0KCiAgaDEgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14eHhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTsKICB9CgogIGgyIHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUteHhsKTsKICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOwogIH0KCiAgaDMgewogICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS14bCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CgogIGg0IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbCk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKICB9CgogIGg1IHsKICAgIGZvbnQtc2l6ZTogdmFyKC0tbHVtby1mb250LXNpemUtbSk7CiAgICBtYXJnaW4tYm90dG9tOiAwLjI1ZW07CiAgfQoKICBoNiB7CiAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXhzKTsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDNlbTsKICB9CgogIHAsCiAgYmxvY2txdW90ZSB7CiAgICBtYXJnaW4tdG9wOiAwLjVlbTsKICAgIG1hcmdpbi1ib3R0b206IDAuNzVlbTsKICB9CgogIGEgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIH0KCiAgYTpob3ZlciB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICB9CgogIGhyIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgIGhlaWdodDogMXB4OwogICAgYm9yZGVyOiAwOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbjogdmFyKC0tbHVtby1zcGFjZS1zKSBjYWxjKHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKSAvIDIpOwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0xMHBjdCk7CiAgfQoKICBibG9ja3F1b3RlIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgdmFyKC0tbHVtby1jb250cmFzdC0zMHBjdCk7CiAgfQoKICBiLAogIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICBibG9ja3F1b3RlW2Rpcj0ncnRsJ10gewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItcmlnaHQ6IDJweCBzb2xpZCB2YXIoLS1sdW1vLWNvbnRyYXN0LTMwcGN0KTsKICB9CmA7amMoIiIsR3VyLHttb2R1bGVJZDoibHVtby10eXBvZ3JhcGh5In0pO2pjKCJ2YWFkaW4tY2hlY2tib3giLENpYAogICAgOmhvc3QgewogICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lOwogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIFtwYXJ0PSdsYWJlbCddOm5vdChbZW1wdHldKSB7CiAgICAgIG1hcmdpbjogMC4xODc1ZW0gMC44NzVlbSAwLjE4NzVlbSAwLjM3NWVtOwogICAgfQoKICAgIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgd2lkdGg6IGNhbGMoMWVtICsgMnB4KTsKICAgICAgaGVpZ2h0OiBjYWxjKDFlbSArIDJweCk7CiAgICAgIG1hcmdpbjogMC4xODc1ZW07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuMTIsIDAuMzIsIDAuNTQsIDIpLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIH0KCiAgICA6aG9zdChbaW5kZXRlcm1pbmF0ZV0pIFtwYXJ0PSdjaGVja2JveCddLAogICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvcik7CiAgICB9CgogICAgLyogTmVlZGVkIHRvIGFsaWduIHRoZSBjaGVja2JveCBuaWNlbHkgb24gdGhlIGJhc2VsaW5lICovCiAgICBbcGFydD0nY2hlY2tib3gnXTo6YmVmb3JlIHsKICAgICAgY29udGVudDogJ1xcMjAwMyc7CiAgICB9CgogICAgLyogQ2hlY2ttYXJrICovCiAgICBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBjb250ZW50OiAnJzsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB3aWR0aDogMDsKICAgICAgaGVpZ2h0OiAwOwogICAgICBib3JkZXI6IDAgc29saWQgdmFyKC0tbHVtby1wcmltYXJ5LWNvbnRyYXN0LWNvbG9yKTsKICAgICAgYm9yZGVyLXdpZHRoOiAwLjE4NzVlbSAwIDAgMC4xODc1ZW07CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDAuODEyNWVtOwogICAgICBsZWZ0OiAwLjVlbTsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjU1KSByb3RhdGUoLTEzNWRlZyk7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgOmhvc3QoW2NoZWNrZWRdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBvcGFjaXR5OiAxOwogICAgICB3aWR0aDogMC42MjVlbTsKICAgICAgaGVpZ2h0OiAxLjA2MjVlbTsKICAgIH0KCiAgICAvKiBJbmRldGVybWluYXRlIGNoZWNrbWFyayAqLwogICAgOmhvc3QoW2luZGV0ZXJtaW5hdGVdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHRvcDogNDUlOwogICAgICBoZWlnaHQ6IDEwJTsKICAgICAgbGVmdDogMjIlOwogICAgICByaWdodDogMjIlOwogICAgICB3aWR0aDogYXV0bzsKICAgICAgYm9yZGVyOiAwOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29udHJhc3QtY29sb3IpOwogICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMjVzOwogICAgfQoKICAgIC8qIEZvY3VzIHJpbmcgKi8KICAgIDpob3N0KFtmb2N1cy1yaW5nXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAvKiBEaXNhYmxlZCAqLwogICAgOmhvc3QoW2Rpc2FibGVkXSkgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY29sb3I6IHZhcigtLWx1bW8tZGlzYWJsZWQtdGV4dC1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9J2xhYmVsJ10gOjpzbG90dGVkKCopIHsKICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICB9CgogICAgOmhvc3QoW2Rpc2FibGVkXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgIH0KCiAgICA6aG9zdChbZGlzYWJsZWRdKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICBib3JkZXItY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIDpob3N0KFtpbmRldGVybWluYXRlXVtkaXNhYmxlZF0pIFtwYXJ0PSdjaGVja2JveCddOjphZnRlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgIDpob3N0KFtkaXI9J3J0bCddKSBbcGFydD0nbGFiZWwnXTpub3QoW2VtcHR5XSkgewogICAgICBtYXJnaW46IDAuMTg3NWVtIDAuMzc1ZW0gMC4xODc1ZW0gMC44NzVlbTsKICAgIH0KCiAgICAvKiBUcmFuc2l0aW9uIHRoZSBjaGVja21hcmsgaWYgYWN0aXZhdGVkIHdpdGggdGhlIG1vdXNlIChkaXNhYmxlZCBmb3IgZ3JpZCBzZWxlY3QtYWxsIHRoaXMgd2F5KSAqLwogICAgOmhvc3QoOmhvdmVyKSBbcGFydD0nY2hlY2tib3gnXTo6YWZ0ZXIgewogICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjFzLCBoZWlnaHQgMC4yNXM7CiAgICB9CgogICAgLyogVXNlZCBmb3IgYWN0aXZhdGlvbiAiaGFsbyIgKi8KICAgIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjQpOwogICAgICBvcGFjaXR5OiAwOwogICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xcywgb3BhY2l0eSAwLjhzOwogICAgfQoKICAgIC8qIEhvdmVyICovCiAgICA6aG9zdCg6bm90KFtjaGVja2VkXSk6bm90KFtpbmRldGVybWluYXRlXSk6bm90KFtkaXNhYmxlZF0pOmhvdmVyKSBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tY29udHJhc3QtMzBwY3QpOwogICAgfQoKICAgIC8qIERpc2FibGUgaG92ZXIgZm9yIHRvdWNoIGRldmljZXMgKi8KICAgIEBtZWRpYSAocG9pbnRlcjogY29hcnNlKSB7CiAgICAgIDpob3N0KDpub3QoW2NoZWNrZWRdKTpub3QoW2luZGV0ZXJtaW5hdGVdKTpub3QoW2Rpc2FibGVkXSk6aG92ZXIpIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTIwcGN0KTsKICAgICAgfQogICAgfQoKICAgIC8qIEFjdGl2ZSAqLwogICAgOmhvc3QoW2FjdGl2ZV0pIFtwYXJ0PSdjaGVja2JveCddIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkpOwogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjA1czsKICAgIH0KCiAgICA6aG9zdChbYWN0aXZlXVtjaGVja2VkXSkgW3BhcnQ9J2NoZWNrYm94J10gewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICB9CgogICAgOmhvc3QoW2FjdGl2ZV06bm90KFtjaGVja2VkXSkpIFtwYXJ0PSdjaGVja2JveCddOjpiZWZvcmUgewogICAgICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjAxcywgMC4wMXM7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgIH0KICBgLHttb2R1bGVJZDoibHVtby1jaGVja2JveCJ9KTt2YXIgTmNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57dGhlbWU6e3R5cGU6U3RyaW5nLHJlYWRPbmx5OiEwfX19YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHIsbixpKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpLHI9PT0idGhlbWUiJiZ0aGlzLl9zZXRUaGVtZShpKX19O3ZhciBqSD1lPT5jbGFzcyBleHRlbmRzIE5jZShlKXtzdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpO2xldCByPXRoaXMucHJvdG90eXBlLl90ZW1wbGF0ZSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzLnByb3RvdHlwZSkuX3RlbXBsYXRlO24mJkFycmF5LmZyb20obi5jb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlW2luY2x1ZGVdIikpLmZvckVhY2goaT0+e3RoaXMuX2luY2x1ZGVTdHlsZShpLmdldEF0dHJpYnV0ZSgiaW5jbHVkZSIpLHIpfSksdGhpcy5faW5jbHVkZU1hdGNoaW5nVGhlbWVzKHIpfXN0YXRpYyBfaW5jbHVkZU1hdGNoaW5nVGhlbWVzKHIpe2xldCBpPW91LnByb3RvdHlwZS5tb2R1bGVzLG89ITEsYT10aGlzLmlzKyItZGVmYXVsdC10aGVtZSI7T2JqZWN0LmtleXMoaSkuc29ydCgocyxsKT0+e2xldCBjPXMuaW5kZXhPZigidmFhZGluLSIpPT09MCx1PWwuaW5kZXhPZigidmFhZGluLSIpPT09MCxoPVsibHVtby0iLCJtYXRlcmlhbC0iXSxmPWguZmlsdGVyKGQ9PnMuaW5kZXhPZihkKT09PTApLmxlbmd0aD4wLHA9aC5maWx0ZXIoZD0+bC5pbmRleE9mKGQpPT09MCkubGVuZ3RoPjA7cmV0dXJuIGMhPT11P2M/LTE6MTpmIT09cD9mPy0xOjE6MH0pLmZvckVhY2gocz0+e2lmKHMhPT1hKXtsZXQgbD1pW3NdLmdldEF0dHJpYnV0ZSgidGhlbWUtZm9yIik7bCYmbC5zcGxpdCgiICIpLmZvckVhY2goYz0+e25ldyBSZWdFeHAoIl4iK2Muc3BsaXQoIioiKS5qb2luKCIuKiIpKyIkIikudGVzdCh0aGlzLmlzKSYmKG89ITAsdGhpcy5faW5jbHVkZVN0eWxlKHMscikpfSl9fSksIW8mJmlbYV0mJnRoaXMuX2luY2x1ZGVTdHlsZShhLHIpfXN0YXRpYyBfaW5jbHVkZVN0eWxlKHIsbil7aWYobiYmIW4uY29udGVudC5xdWVyeVNlbGVjdG9yKGBzdHlsZVtpbmNsdWRlPSIke3J9Il1gKSl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtpLnNldEF0dHJpYnV0ZSgiaW5jbHVkZSIsciksbi5jb250ZW50LmFwcGVuZENoaWxkKGkpfX19O3ZhciBSY3Q9ITE7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCgpPT57UmN0PSEwfSx7Y2FwdHVyZTohMH0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgpPT57UmN0PSExfSx7Y2FwdHVyZTohMH0pO3ZhciBXdXI9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt0YWJpbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MCxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAsb2JzZXJ2ZXI6Il90YWJpbmRleENoYW5nZWQifX19fSxEY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBXdXIoZSl7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2F1dG9mb2N1czp7dHlwZTpCb29sZWFufSxfcHJldmlvdXNUYWJJbmRleDp7dHlwZTpOdW1iZXJ9LGRpc2FibGVkOnt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9kaXNhYmxlZENoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0sX2lzU2hpZnRUYWJiaW5nOnt0eXBlOkJvb2xlYW59fX1yZWFkeSgpe3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscj0+e3IuY29tcG9zZWRQYXRoKClbMF09PT10aGlzP3RoaXMuY29udGFpbnMoci5yZWxhdGVkVGFyZ2V0KXx8dGhpcy5fZm9jdXMoKTpyLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy5mb2N1c0VsZW1lbnQpIT09LTEmJiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9zZXRGb2N1c2VkKCEwKX0pLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgpPT50aGlzLl9zZXRGb2N1c2VkKCExKSksc3VwZXIucmVhZHkoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHI9Pnshci5kZWZhdWx0UHJldmVudGVkJiZyLmtleUNvZGU9PT05JiZyLnNoaWZ0S2V5JiYodGhpcy5faXNTaGlmdFRhYmJpbmc9ITAsSFRNTEVsZW1lbnQucHJvdG90eXBlLmZvY3VzLmFwcGx5KHRoaXMpLHRoaXMuX3NldEZvY3VzZWQoITEpLHNldFRpbWVvdXQoKCk9PnRoaXMuX2lzU2hpZnRUYWJiaW5nPSExLDApKX0pLHRoaXMuYXV0b2ZvY3VzJiYhdGhpcy5kaXNhYmxlZCYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX2ZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCksdGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKX0pfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLmhhc0F0dHJpYnV0ZSgiZm9jdXNlZCIpJiZ0aGlzLl9zZXRGb2N1c2VkKCExKX1fc2V0Rm9jdXNlZChyKXtyP3RoaXMuc2V0QXR0cmlidXRlKCJmb2N1c2VkIiwiIik6dGhpcy5yZW1vdmVBdHRyaWJ1dGUoImZvY3VzZWQiKSxyJiZSY3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImZvY3VzLXJpbmciLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZm9jdXMtcmluZyIpfWdldCBmb2N1c0VsZW1lbnQoKXtyZXR1cm4gd2luZG93LmNvbnNvbGUud2FybihgUGxlYXNlIGltcGxlbWVudCB0aGUgJ2ZvY3VzRWxlbWVudCcgcHJvcGVydHkgaW4gPCR7dGhpcy5sb2NhbE5hbWV9PmApLHRoaXN9X2ZvY3VzKCl7IXRoaXMuZm9jdXNFbGVtZW50fHx0aGlzLl9pc1NoaWZ0VGFiYmluZ3x8KHRoaXMuZm9jdXNFbGVtZW50LmZvY3VzKCksdGhpcy5fc2V0Rm9jdXNlZCghMCkpfWZvY3VzKCl7IXRoaXMuZm9jdXNFbGVtZW50fHx0aGlzLmRpc2FibGVkfHwodGhpcy5mb2N1c0VsZW1lbnQuZm9jdXMoKSx0aGlzLl9zZXRGb2N1c2VkKCEwKSl9Ymx1cigpeyF0aGlzLmZvY3VzRWxlbWVudHx8KHRoaXMuZm9jdXNFbGVtZW50LmJsdXIoKSx0aGlzLl9zZXRGb2N1c2VkKCExKSl9X2Rpc2FibGVkQ2hhbmdlZChyKXt0aGlzLmZvY3VzRWxlbWVudC5kaXNhYmxlZD1yLHI/KHRoaXMuYmx1cigpLHRoaXMuX3ByZXZpb3VzVGFiSW5kZXg9dGhpcy50YWJpbmRleCx0aGlzLnRhYmluZGV4PS0xLHRoaXMuc2V0QXR0cmlidXRlKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpKToodHlwZW9mIHRoaXMuX3ByZXZpb3VzVGFiSW5kZXghPSJ1bmRlZmluZWQiJiYodGhpcy50YWJpbmRleD10aGlzLl9wcmV2aW91c1RhYkluZGV4KSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kaXNhYmxlZCIpKX1fdGFiaW5kZXhDaGFuZ2VkKHIpe3IhPT12b2lkIDAmJih0aGlzLmZvY3VzRWxlbWVudC50YWJJbmRleD1yKSx0aGlzLmRpc2FibGVkJiZ0aGlzLnRhYmluZGV4JiYodGhpcy50YWJpbmRleCE9PS0xJiYodGhpcy5fcHJldmlvdXNUYWJJbmRleD10aGlzLnRhYmluZGV4KSx0aGlzLnRhYmluZGV4PXI9dm9pZCAwKX1jbGljaygpe3RoaXMuZGlzYWJsZWR8fHN1cGVyLmNsaWNrKCl9fTt2YXIgWXVyPS9cL1wqXCpccyt2YWFkaW4tZGV2LW1vZGU6c3RhcnQoW1xzXFNdKil2YWFkaW4tZGV2LW1vZGU6ZW5kXHMrXCpcKlwvL2ksWEg9d2luZG93LlZhYWRpbiYmd2luZG93LlZhYWRpbi5GbG93JiZ3aW5kb3cuVmFhZGluLkZsb3cuY2xpZW50cztmdW5jdGlvbiBqdXIoKXtmdW5jdGlvbiBlKCl7cmV0dXJuITB9cmV0dXJuIE9jZShlKX1mdW5jdGlvbiBYdXIoKXt0cnl7cmV0dXJuICR1cigpPyEwOkt1cigpP1hIPyFadXIoKTohanVyKCk6ITF9Y2F0Y2goZSl7cmV0dXJuITF9fWZ1bmN0aW9uICR1cigpe3JldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmFhZGluLmRldmVsb3BtZW50bW9kZS5mb3JjZSIpfWZ1bmN0aW9uIEt1cigpe3JldHVyblsibG9jYWxob3N0IiwiMTI3LjAuMC4xIl0uaW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpPj0wfWZ1bmN0aW9uIFp1cigpe3JldHVybiEhKFhIJiZPYmplY3Qua2V5cyhYSCkubWFwKHQ9PlhIW3RdKS5maWx0ZXIodD0+dC5wcm9kdWN0aW9uTW9kZSkubGVuZ3RoPjApfWZ1bmN0aW9uIE9jZShlLHQpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXJldHVybjtsZXQgcj1ZdXIuZXhlYyhlLnRvU3RyaW5nKCkpO2lmKHIpdHJ5e2U9bmV3IEZ1bmN0aW9uKHJbMV0pfWNhdGNoKG4pe2NvbnNvbGUubG9nKCJ2YWFkaW4tZGV2ZWxvcG1lbnQtbW9kZS1kZXRlY3RvcjogdW5jb21tZW50QW5kUnVuKCkgZmFpbGVkIixuKX1yZXR1cm4gZSh0KX13aW5kb3cuVmFhZGluPXdpbmRvdy5WYWFkaW58fHt9O3ZhciBOY3Q9ZnVuY3Rpb24oZSx0KXtpZih3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZSlyZXR1cm4gT2NlKGUsdCl9O3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlPT09dm9pZCAwJiYod2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGU9WHVyKCkpO2Z1bmN0aW9uIEp1cigpe312YXIgemNlPWZ1bmN0aW9uKCl7aWYodHlwZW9mIE5jdD09ImZ1bmN0aW9uIilyZXR1cm4gTmN0KEp1cil9O3ZhciBfMz1jbGFzc3tzdGF0aWMgZGV0ZWN0U2Nyb2xsVHlwZSgpe2xldCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QudGV4dENvbnRlbnQ9IkFCQ0QiLHQuZGlyPSJydGwiLHQuc3R5bGUuZm9udFNpemU9IjE0cHgiLHQuc3R5bGUud2lkdGg9IjRweCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsdC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHQuc3R5bGUudG9wPSItMTAwMHB4Iix0LnN0eWxlLm92ZXJmbG93PSJzY3JvbGwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7bGV0IHI9InJldmVyc2UiO3JldHVybiB0LnNjcm9sbExlZnQ+MD9yPSJkZWZhdWx0IjoodC5zY3JvbGxMZWZ0PTIsdC5zY3JvbGxMZWZ0PDImJihyPSJuZWdhdGl2ZSIpKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLHJ9c3RhdGljIGdldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHQscixuKXtsZXR7c2Nyb2xsTGVmdDppfT1uO2lmKHIhPT0icnRsInx8IXQpcmV0dXJuIGk7c3dpdGNoKHQpe2Nhc2UibmVnYXRpdmUiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgraTtjYXNlInJldmVyc2UiOnJldHVybiBuLnNjcm9sbFdpZHRoLW4uY2xpZW50V2lkdGgtaX1yZXR1cm4gaX1zdGF0aWMgc2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodCxyLG4saSl7aWYociE9PSJydGwifHwhdCl7bi5zY3JvbGxMZWZ0PWk7cmV0dXJufXN3aXRjaCh0KXtjYXNlIm5lZ2F0aXZlIjpuLnNjcm9sbExlZnQ9bi5jbGllbnRXaWR0aC1uLnNjcm9sbFdpZHRoK2k7YnJlYWs7Y2FzZSJyZXZlcnNlIjpuLnNjcm9sbExlZnQ9bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoLWk7YnJlYWs7ZGVmYXVsdDpuLnNjcm9sbExlZnQ9aTticmVha319fTt2YXIgRTA9W10sUXVyPWZ1bmN0aW9uKCl7bGV0IGU9T2N0KCk7RTAuZm9yRWFjaCh0PT57RGN0KHQsZSl9KX0sJEgsdGhyPW5ldyBNdXRhdGlvbk9ic2VydmVyKFF1cik7dGhyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHthdHRyaWJ1dGVzOiEwLGF0dHJpYnV0ZUZpbHRlcjpbImRpciJdfSk7dmFyIERjdD1mdW5jdGlvbihlLHQscj1lLmdldEF0dHJpYnV0ZSgiZGlyIikpe3Q/ZS5zZXRBdHRyaWJ1dGUoImRpciIsdCk6ciE9bnVsbCYmZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpfSxPY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIil9LEtIPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57ZGlyOnt0eXBlOlN0cmluZyx2YWx1ZToiIixyZWZsZWN0VG9BdHRyaWJ1dGU6ITB9fX1zdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpLCRIfHwoJEg9XzMuZGV0ZWN0U2Nyb2xsVHlwZSgpKX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5oYXNBdHRyaWJ1dGUoImRpciIpfHwodGhpcy5fX3N1YnNjcmliZSgpLERjdCh0aGlzLE9jdCgpLG51bGwpKX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socixuLGkpe2lmKHN1cGVyLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhyLG4saSksciE9PSJkaXIiKXJldHVybjtsZXQgbz1PY3QoKSxhPWk9PT1vJiZFMC5pbmRleE9mKHRoaXMpPT09LTEscz0haSYmbiYmRTAuaW5kZXhPZih0aGlzKT09PS0xO2F8fHM/KHRoaXMuX19zdWJzY3JpYmUoKSxEY3QodGhpcyxvLGkpKTppIT09byYmbj09PW8mJnRoaXMuX19zdWJzY3JpYmUoITEpfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9fc3Vic2NyaWJlKCExKSx0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIil9X3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHIsbixpKXtpPT09ImRpciImJm49PT0iIiYmIXIuaGFzQXR0cmlidXRlKCJkaXIiKXx8c3VwZXIuX3ZhbHVlVG9Ob2RlQXR0cmlidXRlKHIsbixpKX1fYXR0cmlidXRlVG9Qcm9wZXJ0eShyLG4saSl7cj09PSJkaXIiJiYhbj90aGlzLmRpcj0iIjpzdXBlci5fYXR0cmlidXRlVG9Qcm9wZXJ0eShyLG4saSl9X19zdWJzY3JpYmUocj0hMCl7cj9FMC5pbmRleE9mKHRoaXMpPT09LTEmJkUwLnB1c2godGhpcyk6RTAuaW5kZXhPZih0aGlzKT4tMSYmRTAuc3BsaWNlKEUwLmluZGV4T2YodGhpcyksMSl9X19nZXROb3JtYWxpemVkU2Nyb2xsTGVmdChyKXtyZXR1cm4gXzMuZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQoJEgsdGhpcy5nZXRBdHRyaWJ1dGUoImRpciIpfHwibHRyIixyKX1fX3NldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KHIsbil7cmV0dXJuIF8zLnNldE5vcm1hbGl6ZWRTY3JvbGxMZWZ0KCRILHRoaXMuZ2V0QXR0cmlidXRlKCJkaXIiKXx8Imx0ciIscixuKX19O3dpbmRvdy5WYWFkaW49d2luZG93LlZhYWRpbnx8e307d2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zPXdpbmRvdy5WYWFkaW4ucmVnaXN0cmF0aW9uc3x8W107d2luZG93LlZhYWRpbi5kZXZlbG9wbWVudE1vZGVDYWxsYmFjaz13aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrfHx7fTt3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrWyJ2YWFkaW4tdXNhZ2Utc3RhdGlzdGljcyJdPWZ1bmN0aW9uKCl7emNlKCl9O3ZhciB6Y3QsRmNlPW5ldyBTZXQsWkg9ZT0+Y2xhc3MgZXh0ZW5kcyBLSChlKXtzdGF0aWMgZmluYWxpemUoKXtzdXBlci5maW5hbGl6ZSgpO2xldHtpczpyfT10aGlzO3ImJiFGY2UuaGFzKHIpJiYod2luZG93LlZhYWRpbi5yZWdpc3RyYXRpb25zLnB1c2godGhpcyksRmNlLmFkZChyKSx3aW5kb3cuVmFhZGluLmRldmVsb3BtZW50TW9kZUNhbGxiYWNrJiYoemN0PXNyLmRlYm91bmNlKHpjdCxreCwoKT0+e3dpbmRvdy5WYWFkaW4uZGV2ZWxvcG1lbnRNb2RlQ2FsbGJhY2tbInZhYWRpbi11c2FnZS1zdGF0aXN0aWNzIl0oKX0pLEpsKHpjdCkpKX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksZG9jdW1lbnQuZG9jdHlwZT09PW51bGwmJmNvbnNvbGUud2FybignVmFhZGluIGNvbXBvbmVudHMgcmVxdWlyZSB0aGUgInN0YW5kYXJkcyBtb2RlIiBkZWNsYXJhdGlvbi4gUGxlYXNlIGFkZCA8IURPQ1RZUEUgaHRtbD4gdG8gdGhlIEhUTUwgZG9jdW1lbnQuJyl9fTt2YXIgSkg9Y2xhc3MgZXh0ZW5kcyBaSChEY2UoakgoeWgobXQpKSkpe3N0YXRpYyBnZXQgdGVtcGxhdGUoKXtyZXR1cm4gUWAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB9CgogICAgICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgfQoKICAgICAgICBsYWJlbCB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgfQoKICAgICAgICBbcGFydD0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBmbGV4OiBub25lOwogICAgICAgIH0KCiAgICAgICAgaW5wdXRbdHlwZT0nY2hlY2tib3gnXSB7CiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICB0b3A6IDA7CiAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICBjdXJzb3I6IGluaGVyaXQ7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbZGlzYWJsZWRdKSB7CiAgICAgICAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KCiAgICAgIDxsYWJlbD4KICAgICAgICA8c3BhbiBwYXJ0PSJjaGVja2JveCI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgIGNoZWNrZWQ9Int7Y2hlY2tlZDo6Y2hhbmdlfX0iCiAgICAgICAgICAgIGRpc2FibGVkJD0iW1tkaXNhYmxlZF1dIgogICAgICAgICAgICBpbmRldGVybWluYXRlPSJ7e2luZGV0ZXJtaW5hdGU6OmNoYW5nZX19IgogICAgICAgICAgICByb2xlPSJwcmVzZW50YXRpb24iCiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgPC9zcGFuPgoKICAgICAgICA8c3BhbiBwYXJ0PSJsYWJlbCI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2xhYmVsPgogICAgYH1zdGF0aWMgZ2V0IGlzKCl7cmV0dXJuInZhYWRpbi1jaGVja2JveCJ9c3RhdGljIGdldCB2ZXJzaW9uKCl7cmV0dXJuIjIwLjAuMiJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NoZWNrZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxub3RpZnk6ITAsb2JzZXJ2ZXI6Il9jaGVja2VkQ2hhbmdlZCIscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxpbmRldGVybWluYXRlOnt0eXBlOkJvb2xlYW4sbm90aWZ5OiEwLG9ic2VydmVyOiJfaW5kZXRlcm1pbmF0ZUNoYW5nZWQiLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCx2YWx1ZTohMX0sdmFsdWU6e3R5cGU6U3RyaW5nLHZhbHVlOiJvbiJ9LF9uYXRpdmVDaGVja2JveDp7dHlwZTpPYmplY3R9fX1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5uYW1lfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMuY2hlY2tlZD90aGlzLl9zdG9yZWROYW1lOiIifXNldCBuYW1lKHQpe3RoaXMuX3N0b3JlZE5hbWU9dH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjaGVja2JveCIpLHRoaXMuX25hdGl2ZUNoZWNrYm94PXRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFuZGxlQ2xpY2suYmluZCh0aGlzKSksdGhpcy5fYWRkQWN0aXZlTGlzdGVuZXJzKCk7bGV0IHQ9dGhpcy5nZXRBdHRyaWJ1dGUoIm5hbWUiKTt0JiYodGhpcy5uYW1lPXQpLHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbcGFydH49ImxhYmVsIl0nKS5xdWVyeVNlbGVjdG9yKCJzbG90IikuYWRkRXZlbnRMaXN0ZW5lcigic2xvdGNoYW5nZSIsdGhpcy5fdXBkYXRlTGFiZWxBdHRyaWJ1dGUuYmluZCh0aGlzKSksdGhpcy5fdXBkYXRlTGFiZWxBdHRyaWJ1dGUoKX1fdXBkYXRlTGFiZWxBdHRyaWJ1dGUoKXtsZXQgdD10aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW3BhcnR+PSJsYWJlbCJdJykscj10LmZpcnN0RWxlbWVudENoaWxkLmFzc2lnbmVkTm9kZXMoKTt0aGlzLl9pc0Fzc2lnbmVkTm9kZXNFbXB0eShyKT90LnNldEF0dHJpYnV0ZSgiZW1wdHkiLCIiKTp0LnJlbW92ZUF0dHJpYnV0ZSgiZW1wdHkiKX1faXNBc3NpZ25lZE5vZGVzRW1wdHkodCl7cmV0dXJuIHQubGVuZ3RoPT09MHx8dC5sZW5ndGg9PTEmJnRbMF0ubm9kZVR5cGU9PU5vZGUuVEVYVF9OT0RFJiZ0WzBdLnRleHRDb250ZW50LnRyaW0oKT09PSIifV9jaGVja2VkQ2hhbmdlZCh0KXt0aGlzLmluZGV0ZXJtaW5hdGU/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsIm1peGVkIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsQm9vbGVhbih0KSl9X2luZGV0ZXJtaW5hdGVDaGFuZ2VkKHQpe3Q/dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsIm1peGVkIik6dGhpcy5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsdGhpcy5jaGVja2VkKX1fYWRkQWN0aXZlTGlzdGVuZXJzKCl7dGhpcy5fYWRkRXZlbnRMaXN0ZW5lclRvTm9kZSh0aGlzLCJkb3duIix0PT57dGhpcy5fX2ludGVyYWN0aW9uc0FsbG93ZWQodCkmJnRoaXMuc2V0QXR0cmlidXRlKCJhY3RpdmUiLCIiKX0pLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJUb05vZGUodGhpcywidXAiLCgpPT50aGlzLnJlbW92ZUF0dHJpYnV0ZSgiYWN0aXZlIikpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiZ0LmtleUNvZGU9PT0zMiYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLnNldEF0dHJpYnV0ZSgiYWN0aXZlIiwiIikpfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdD0+e3RoaXMuX19pbnRlcmFjdGlvbnNBbGxvd2VkKHQpJiZ0LmtleUNvZGU9PT0zMiYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCksdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImFjdGl2ZSIpLHRoaXMuaW5kZXRlcm1pbmF0ZSYmKHRoaXMuaW5kZXRlcm1pbmF0ZT0hMSkpfSl9Z2V0IGZvY3VzRWxlbWVudCgpe3JldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKX1fX2ludGVyYWN0aW9uc0FsbG93ZWQodCl7cmV0dXJuISh0aGlzLmRpc2FibGVkfHx0LnRhcmdldC5sb2NhbE5hbWU9PT0iYSIpfV9oYW5kbGVDbGljayh0KXt0aGlzLl9faW50ZXJhY3Rpb25zQWxsb3dlZCh0KSYmKHRoaXMuaW5kZXRlcm1pbmF0ZT8odGhpcy5pbmRldGVybWluYXRlPSExLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCkpOnQuY29tcG9zZWRQYXRoKClbMF0hPT10aGlzLl9uYXRpdmVDaGVja2JveCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90b2dnbGVDaGVja2VkKCkpKX1fdG9nZ2xlQ2hlY2tlZCgpe3RoaXMuY2hlY2tlZD0hdGhpcy5jaGVja2VkLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIse2NvbXBvc2VkOiExLGJ1YmJsZXM6ITB9KSl9fTtjdXN0b21FbGVtZW50cy5kZWZpbmUoSkguaXMsSkgpO2pjKCJ2YWFkaW4tZ3JpZCIsQ2lgCiAgICA6aG9zdCB7CiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1sdW1vLWZvbnQtZmFtaWx5KTsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWx1bW8tbGluZS1oZWlnaHQtcyk7CiAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWJvZHktdGV4dC1jb2xvcik7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsKICAgICAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CgogICAgICAvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KICAgICAgLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcjogdmFyKC0tbHVtby1jb250cmFzdC0yMHBjdCk7CiAgICAgIC0tX2x1bW8tZ3JpZC1zZWNvbmRhcnktYm9yZGVyLWNvbG9yOiB2YXIoLS1sdW1vLWNvbnRyYXN0LTEwcGN0KTsKICAgICAgLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aDogMXB4OwogICAgICAtLV9sdW1vLWdyaWQtc2VsZWN0ZWQtcm93LWNvbG9yOiB2YXIoLS1sdW1vLXByaW1hcnktY29sb3ItMTBwY3QpOwogICAgfQoKICAgIC8qIE5vIChvdXRlcikgYm9yZGVyICovCgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1ib3JkZXInXSkpIHsKICAgICAgYm9yZGVyOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIENlbGwgc3R5bGVzICovCgogICAgW3BhcnR+PSdjZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtbSk7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWx1bW8tYmFzZS1jb2xvcik7CiAgICB9CgogICAgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIHBhZGRpbmc6IHZhcigtLWx1bW8tc3BhY2UteHMpIHZhcigtLWx1bW8tc3BhY2UtbSk7CiAgICB9CgogICAgLyogQXBwbHkgcm93IGJvcmRlcnMgYnkgZGVmYXVsdCBhbmQgaW50cm9kdWNlIHRoZSAibm8tcm93LWJvcmRlcnMiIHZhcmlhbnQgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci10b3A6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3IpOwogICAgfQoKICAgIC8qIEhpZGUgZmlyc3QgYm9keSByb3cgdG9wIGJvcmRlciAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddW2ZpcnN0XSBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBib3JkZXItdG9wOiAwOwogICAgICBtaW4taGVpZ2h0OiBjYWxjKHZhcigtLWx1bW8tc2l6ZS1tKSAtIHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLXdpZHRoKSk7CiAgICB9CgogICAgLyogRm9jdXMtcmluZyAqLwoKICAgIFtwYXJ0fj0nY2VsbCddOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KCiAgICA6aG9zdChbbmF2aWdhdGluZ10pIFtwYXJ0fj0nY2VsbCddOmZvY3VzOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnJzsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAvKiBEcmFnIGFuZCBEcm9wIHN0eWxlcyAqLwogICAgOmhvc3QoW2RyYWdvdmVyXSk6OmFmdGVyIHsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgei1pbmRleDogMTAwOwogICAgICB0b3A6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXSB7CiAgICAgIHotaW5kZXg6IDEwMCAhaW1wb3J0YW50OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXJdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnb3Zlcl0gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBsZWZ0OiAwOwogICAgICBoZWlnaHQ6IGNhbGModmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpICsgMnB4KTsKICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWx1bW8tcHJpbWFyeS1jb2xvci01MHBjdCk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkgW2RyYWdvdmVyXSBbcGFydH49J2NlbGwnXTo6YWZ0ZXIgewogICAgICBoZWlnaHQ6IDJweDsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyPSdiZWxvdyddIFtwYXJ0fj0nY2VsbCddOjphZnRlciB7CiAgICAgIHRvcDogMTAwJTsKICAgICAgYm90dG9tOiBhdXRvOwogICAgICBtYXJnaW4tdG9wOiAtMXB4OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ292ZXI9J2Fib3ZlJ10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgdG9wOiBhdXRvOwogICAgICBib3R0b206IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IC0xcHg7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkZXRhaWxzLW9wZW5lZF1bZHJhZ292ZXI9J2JlbG93J10gW3BhcnR+PSdjZWxsJ106bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pOjphZnRlciwKICAgIFtwYXJ0fj0ncm93J11bZGV0YWlscy1vcGVuZWRdW2RyYWdvdmVyPSdhYm92ZSddIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ106OmFmdGVyIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICBbcGFydH49J3JvdyddW2RyYWdvdmVyXVtkcmFnb3Zlcj0nb24tdG9wJ10gW3BhcnR+PSdjZWxsJ106OmFmdGVyIHsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSB7CiAgICAgIC8qIEFkZCBib3R0b20tc3BhY2UgdG8gdGhlIHJvdyBzbyB0aGUgZHJhZyBudW1iZXIgZG9lc24ndCBnZXQgY2xpcHBlZC4gTmVlZGVkIGZvciBJRS9FZGdlICovCiAgICAgIGJvcmRlci1ib3R0b206IDEwMHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB6LWluZGV4OiAxMDAgIWltcG9ydGFudDsKICAgICAgb3BhY2l0eTogMC45OwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXSB7CiAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddW2xhc3QtY29sdW1uXSB7CiAgICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1zKSAwOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDAgMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICB9CgogICAgW2lvc10gW3BhcnR+PSdyb3cnXVtkcmFnc3RhcnRdIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYmFja2dyb3VuZDogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgIH0KCiAgICAjc2Nyb2xsZXI6bm90KFtpb3NdKSBbcGFydH49J3JvdyddW2RyYWdzdGFydF06bm90KFtkcmFnc3RhcnQ9JyddKTo6YWZ0ZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiB2YXIoLS1fZ3JpZC1kcmFnLXN0YXJ0LXgpOwogICAgICB0b3A6IHZhcigtLV9ncmlkLWRyYWctc3RhcnQteSk7CiAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgY29udGVudDogYXR0cihkcmFnc3RhcnQpOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgcGFkZGluZzogY2FsYyh2YXIoLS1sdW1vLXNwYWNlLXhzKSAqIDAuOCk7CiAgICAgIGNvbG9yOiB2YXIoLS1sdW1vLWVycm9yLWNvbnRyYXN0LWNvbG9yKTsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1lcnJvci1jb2xvcik7CiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWx1bW8tYm9yZGVyLXJhZGl1cy1tKTsKICAgICAgZm9udC1mYW1pbHk6IHZhcigtLWx1bW8tZm9udC1mYW1pbHkpOwogICAgICBmb250LXNpemU6IHZhcigtLWx1bW8tZm9udC1zaXplLXh4cyk7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB0ZXh0LXRyYW5zZm9ybTogaW5pdGlhbDsKICAgICAgbGV0dGVyLXNwYWNpbmc6IGluaXRpYWw7CiAgICAgIG1pbi13aWR0aDogY2FsYyh2YXIoLS1sdW1vLXNpemUtcykgKiAwLjcpOwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CgogICAgLyogSGVhZGVycyBhbmQgZm9vdGVycyAqLwoKICAgIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1zKTsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIH0KCiAgICBbcGFydH49J2Zvb3Rlci1jZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBmb250LXdlaWdodDogNDAwOwogICAgfQoKICAgIFtwYXJ0PSdyb3cnXTpvbmx5LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIG1pbi1oZWlnaHQ6IHZhcigtLWx1bW8tc2l6ZS14bCk7CiAgICB9CgogICAgLyogSGVhZGVyIGJvcmRlcnMgKi8KCiAgICAvKiBIaWRlIGZpcnN0IGhlYWRlciByb3cgdG9wIGJvcmRlciAqLwogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3A6IDA7CiAgICB9CgogICAgW3BhcnQ9J3JvdyddOmxhc3QtY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHRyYW5zcGFyZW50OwogICAgfQoKICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0PSdyb3cnXTpsYXN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogT3ZlcmZsb3cgdXNlcyBhIHN0cm9uZ2VyIGJvcmRlciBjb2xvciAqLwogICAgOmhvc3QoW292ZXJmbG93fj0ndG9wJ10pIFtwYXJ0PSdyb3cnXTpsYXN0LWNoaWxkIFtwYXJ0fj0naGVhZGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KCiAgICAvKiBGb290ZXIgYm9yZGVycyAqLwoKICAgIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2Zvb3Rlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoOm5vdChbdGhlbWV+PSduby1yb3ctYm9yZGVycyddKSkgW3BhcnQ9J3JvdyddOmZpcnN0LWNoaWxkIFtwYXJ0fj0nZm9vdGVyLWNlbGwnXSB7CiAgICAgIGJvcmRlci10b3AtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogT3ZlcmZsb3cgdXNlcyBhIHN0cm9uZ2VyIGJvcmRlciBjb2xvciAqLwogICAgOmhvc3QoW292ZXJmbG93fj0nYm90dG9tJ10pIFtwYXJ0PSdyb3cnXTpmaXJzdC1jaGlsZCBbcGFydH49J2Zvb3Rlci1jZWxsJ10gewogICAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogQ29sdW1uIHJlb3JkZXJpbmcgKi8KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddIHsKICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tc2hhZGUtMjBwY3QpLCB2YXIoLS1sdW1vLXNoYWRlLTIwcGN0KSkgdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIFtwYXJ0fj0nY2VsbCddW3Jlb3JkZXItc3RhdHVzPSdhbGxvd2VkJ10gewogICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1sdW1vLWJhc2UtY29sb3IpOwogICAgfQoKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdjZWxsJ11bcmVvcmRlci1zdGF0dXM9J2RyYWdnaW5nJ10gewogICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tbHVtby1jb250cmFzdC01cGN0KSwgdmFyKC0tbHVtby1jb250cmFzdC01cGN0KSkgdmFyKC0tbHVtby1iYXNlLWNvbG9yKTsKICAgIH0KCiAgICBbcGFydH49J3Jlb3JkZXItZ2hvc3QnXSB7CiAgICAgIG9wYWNpdHk6IDAuODU7CiAgICAgIGJveC1zaGFkb3c6IHZhcigtLWx1bW8tYm94LXNoYWRvdy1zKTsKICAgICAgLyogVE9ETyBVc2UgdGhlIHNhbWUgc3R5bGVzIGFzIGZvciB0aGUgY2VsbCBlbGVtZW50IChyZW9yZGVyLWdob3N0IGNvcGllcyBzdHlsZXMgZnJvbSB0aGUgY2VsbCBlbGVtZW50KSAqLwogICAgICBwYWRkaW5nOiB2YXIoLS1sdW1vLXNwYWNlLXMpIHZhcigtLWx1bW8tc3BhY2UtbSkgIWltcG9ydGFudDsKICAgIH0KCiAgICAvKiBDb2x1bW4gcmVzaXppbmcgKi8KCiAgICBbcGFydD0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgd2lkdGg6IDNweDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbHVtby1wcmltYXJ5LWNvbG9yLTUwcGN0KTsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgfQoKICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgKjpub3QoW2NvbHVtbi1yZXNpemluZ10pIFtwYXJ0fj0nY2VsbCddOmhvdmVyIFtwYXJ0PSdyZXNpemUtaGFuZGxlJ10sCiAgICBbcGFydD0ncmVzaXplLWhhbmRsZSddOmFjdGl2ZSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICAgIHRyYW5zaXRpb24tZGVsYXk6IDAuMTVzOwogICAgfQoKICAgIC8qIENvbHVtbiBib3JkZXJzICovCgogICAgOmhvc3QoW3RoZW1lfj0nY29sdW1uLWJvcmRlcnMnXSkgW3BhcnR+PSdjZWxsJ106bm90KFtsYXN0LWNvbHVtbl0pOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJvcmRlci1yaWdodDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogRnJvemVuIGNvbHVtbnMgKi8KCiAgICBbbGFzdC1mcm96ZW5dIHsKICAgICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgOmhvc3QoW292ZXJmbG93fj0nbGVmdCddKSBbcGFydH49J2NlbGwnXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgLyogUm93IHN0cmlwZXMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSdyb3ctc3RyaXBlcyddKSBbcGFydH49J3JvdyddOm5vdChbb2RkXSkgW3BhcnR+PSdib2R5LWNlbGwnXSwKICAgIDpob3N0KFt0aGVtZX49J3Jvdy1zdHJpcGVzJ10pIFtwYXJ0fj0ncm93J106bm90KFtvZGRdKSBbcGFydH49J2RldGFpbHMtY2VsbCddIHsKICAgICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCksIHZhcigtLWx1bW8tY29udHJhc3QtNXBjdCkpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0LXg7CiAgICB9CgogICAgLyogU2VsZWN0ZWQgcm93ICovCgogICAgLyogUmFpc2UgdGhlIHNlbGVjdGVkIHJvd3MgYWJvdmUgdW5zZWxlY3RlZCByb3dzIChzbyB0aGF0IGJveC1zaGFkb3cgY2FuIGNvdmVyIHVuc2VsZWN0ZWQgcm93cykgKi8KICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gewogICAgICB6LWluZGV4OiAxOwogICAgfQoKICAgIDpob3N0KDpub3QoW3Jlb3JkZXJpbmddKSkgW3BhcnR+PSdyb3cnXVtzZWxlY3RlZF0gW3BhcnR+PSdib2R5LWNlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodmFyKC0tX2x1bW8tZ3JpZC1zZWxlY3RlZC1yb3ctY29sb3IpLCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcikpOwogICAgICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0OwogICAgfQoKICAgIC8qIENvdmVyIHRoZSBib3JkZXIgb2YgYW4gdW5zZWxlY3RlZCByb3cgKi8KICAgIDpob3N0KDpub3QoW3RoZW1lfj0nbm8tcm93LWJvcmRlcnMnXSkpIFtwYXJ0fj0ncm93J11bc2VsZWN0ZWRdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIGJveC1zaGFkb3c6IDAgdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIDAgMCB2YXIoLS1fbHVtby1ncmlkLXNlbGVjdGVkLXJvdy1jb2xvcik7CiAgICB9CgogICAgLyogQ29tcGFjdCAqLwoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnQ9J3JvdyddOm9ubHktY2hpbGQgW3BhcnR+PSdoZWFkZXItY2VsbCddIHsKICAgICAgbWluLWhlaWdodDogdmFyKC0tbHVtby1zaXplLW0pOwogICAgfQoKICAgIDpob3N0KFt0aGVtZX49J2NvbXBhY3QnXSkgW3BhcnR+PSdjZWxsJ10gewogICAgICBtaW4taGVpZ2h0OiB2YXIoLS1sdW1vLXNpemUtcyk7CiAgICB9CgogICAgOmhvc3QoW3RoZW1lfj0nY29tcGFjdCddKSBbcGFydD0ncm93J11bZmlyc3RdIFtwYXJ0fj0nY2VsbCddOm5vdChbcGFydH49J2RldGFpbHMtY2VsbCddKSB7CiAgICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tbHVtby1zaXplLXMpIC0gdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpKTsKICAgIH0KCiAgICA6aG9zdChbdGhlbWV+PSdjb21wYWN0J10pIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgcGFkZGluZzogdmFyKC0tbHVtby1zcGFjZS14cykgdmFyKC0tbHVtby1zcGFjZS1zKTsKICAgIH0KCiAgICAvKiBXcmFwIGNlbGwgY29udGVudHMgKi8KCiAgICA6aG9zdChbdGhlbWV+PSd3cmFwLWNlbGwtY29udGVudCddKSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICB9CgogICAgLyogUlRMIHNwZWNpZmljIHN0eWxlcyAqLwoKICAgIDpob3N0KFtkaXI9J3J0bCddKSBbcGFydH49J3JvdyddW2RyYWdzdGFydF0gW3BhcnR+PSdjZWxsJ11bbGFzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDAgMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcyk7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncm93J11bZHJhZ3N0YXJ0XSBbcGFydH49J2NlbGwnXVtmaXJzdC1jb2x1bW5dIHsKICAgICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1sdW1vLWJvcmRlci1yYWRpdXMtcykgdmFyKC0tbHVtby1ib3JkZXItcmFkaXVzLXMpIDA7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ11bdGhlbWV+PSdjb2x1bW4tYm9yZGVycyddKSBbcGFydH49J2NlbGwnXTpub3QoW2xhc3QtY29sdW1uXSk6bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLXJpZ2h0OiBub25lOwogICAgICBib3JkZXItbGVmdDogdmFyKC0tX2x1bW8tZ3JpZC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLV9sdW1vLWdyaWQtc2Vjb25kYXJ5LWJvcmRlci1jb2xvcik7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtsYXN0LWZyb3plbl0gewogICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1fbHVtby1ncmlkLWJvcmRlci13aWR0aCkgc29saWQgdHJhbnNwYXJlbnQ7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ11bb3ZlcmZsb3d+PSdyaWdodCddKSBbcGFydH49J2NlbGwnXVtsYXN0LWZyb3plbl06bm90KFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10pIHsKICAgICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLV9sdW1vLWdyaWQtYm9yZGVyLWNvbG9yKTsKICAgIH0KICBgLHttb2R1bGVJZDoibHVtby1ncmlkIn0pO2pjKCJ2YWFkaW4tY2hlY2tib3giLENpYAogICAgOmhvc3QoLnZhYWRpbi1ncmlkLXNlbGVjdC1hbGwtY2hlY2tib3gpIHsKICAgICAgZm9udC1zaXplOiB2YXIoLS1sdW1vLWZvbnQtc2l6ZS1tKTsKICAgIH0KICBgLHttb2R1bGVJZDoidmFhZGluLWdyaWQtc2VsZWN0LWFsbC1jaGVja2JveC1sdW1vIn0pO3ZhciBCY2U9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVAoPzpob25lfGFkOyg/OiBVOyk/IENQVSkgT1MgKFxkKykvKSxlaHI9QmNlJiZCY2VbMV0+PTgsSGNlPTMsVmNlPXU5KHtiZWhhdmlvcnM6W0pzLHk5XSxfcmF0aW86LjUsX3Njcm9sbGVyUGFkZGluZ1RvcDowLF9zY3JvbGxQb3NpdGlvbjowLF9waHlzaWNhbFNpemU6MCxfcGh5c2ljYWxBdmVyYWdlOjAsX3BoeXNpY2FsQXZlcmFnZUNvdW50OjAsX3BoeXNpY2FsVG9wOjAsX3ZpcnR1YWxDb3VudDowLF9lc3RTY3JvbGxIZWlnaHQ6MCxfc2Nyb2xsSGVpZ2h0OjAsX3ZpZXdwb3J0SGVpZ2h0OjAsX3ZpZXdwb3J0V2lkdGg6MCxfcGh5c2ljYWxJdGVtczpudWxsLF9waHlzaWNhbFNpemVzOm51bGwsX2ZpcnN0VmlzaWJsZUluZGV4VmFsOm51bGwsX2xhc3RWaXNpYmxlSW5kZXhWYWw6bnVsbCxfbWF4UGFnZXM6MixfZm9jdXNlZFZpcnR1YWxJbmRleDotMSxfdGVtcGxhdGVDb3N0OjAsZ2V0IF9waHlzaWNhbEJvdHRvbSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9waHlzaWNhbFNpemV9LGdldCBfc2Nyb2xsQm90dG9tKCl7cmV0dXJuIHRoaXMuX3Njcm9sbFBvc2l0aW9uK3RoaXMuX3ZpZXdwb3J0SGVpZ2h0fSxnZXQgX3ZpcnR1YWxFbmQoKXtyZXR1cm4gdGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMX0sZ2V0IF9oaWRkZW5Db250ZW50U2l6ZSgpe3JldHVybiB0aGlzLl9waHlzaWNhbFNpemUtdGhpcy5fdmlld3BvcnRIZWlnaHR9LGdldCBfbWF4U2Nyb2xsVG9wKCl7cmV0dXJuIHRoaXMuX2VzdFNjcm9sbEhlaWdodC10aGlzLl92aWV3cG9ydEhlaWdodCt0aGlzLl9zY3JvbGxPZmZzZXR9LGdldCBfbWF4VmlydHVhbFN0YXJ0KCl7cmV0dXJuIE1hdGgubWF4KDAsdGhpcy5fdmlydHVhbENvdW50LXRoaXMuX3BoeXNpY2FsQ291bnQpfSxzZXQgX3ZpcnR1YWxTdGFydChlKXtlPXRoaXMuX2NsYW1wKGUsMCx0aGlzLl9tYXhWaXJ0dWFsU3RhcnQpLHRoaXMuX3ZpcnR1YWxTdGFydFZhbD1lfSxnZXQgX3ZpcnR1YWxTdGFydCgpe3JldHVybiB0aGlzLl92aXJ0dWFsU3RhcnRWYWx8fDB9LHNldCBfcGh5c2ljYWxTdGFydChlKXtlPWUldGhpcy5fcGh5c2ljYWxDb3VudCxlPDAmJihlPXRoaXMuX3BoeXNpY2FsQ291bnQrZSksdGhpcy5fcGh5c2ljYWxTdGFydFZhbD1lfSxnZXQgX3BoeXNpY2FsU3RhcnQoKXtyZXR1cm4gdGhpcy5fcGh5c2ljYWxTdGFydFZhbHx8MH0sZ2V0IF9waHlzaWNhbEVuZCgpe3JldHVybih0aGlzLl9waHlzaWNhbFN0YXJ0K3RoaXMuX3BoeXNpY2FsQ291bnQtMSkldGhpcy5fcGh5c2ljYWxDb3VudH0sc2V0IF9waHlzaWNhbENvdW50KGUpe3RoaXMuX3BoeXNpY2FsQ291bnRWYWw9ZX0sZ2V0IF9waHlzaWNhbENvdW50KCl7cmV0dXJuIHRoaXMuX3BoeXNpY2FsQ291bnRWYWx8fDB9LGdldCBfb3B0UGh5c2ljYWxTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0SGVpZ2h0PT09MD8xLzA6dGhpcy5fdmlld3BvcnRIZWlnaHQqdGhpcy5fbWF4UGFnZXN9LGdldCBfaXNWaXNpYmxlKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5vZmZzZXRXaWR0aHx8dGhpcy5vZmZzZXRIZWlnaHQpfSxnZXQgZmlyc3RWaXNpYmxlSW5kZXgoKXtsZXQgZT10aGlzLl9maXJzdFZpc2libGVJbmRleFZhbDtpZihlPT1udWxsKXtsZXQgdD10aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQ7ZT10aGlzLl9pdGVyYXRlSXRlbXMoZnVuY3Rpb24ocixuKXtpZih0Kz10aGlzLl9waHlzaWNhbFNpemVzW3JdLHQ+dGhpcy5fc2Nyb2xsUG9zaXRpb24pcmV0dXJuIG59KXx8MCx0aGlzLl9maXJzdFZpc2libGVJbmRleFZhbD1lfXJldHVybiBlfSxnZXQgbGFzdFZpc2libGVJbmRleCgpe2xldCBlPXRoaXMuX2xhc3RWaXNpYmxlSW5kZXhWYWw7aWYoZT09bnVsbCl7bGV0IHQ9dGhpcy5fcGh5c2ljYWxUb3ArdGhpcy5fc2Nyb2xsT2Zmc2V0O3RoaXMuX2l0ZXJhdGVJdGVtcyhmdW5jdGlvbihyLG4pe3Q8dGhpcy5fc2Nyb2xsQm90dG9tJiYoZT1uKSx0Kz10aGlzLl9waHlzaWNhbFNpemVzW3JdfSksdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1lfXJldHVybiBlfSxnZXQgX3Njcm9sbE9mZnNldCgpe3JldHVybiB0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3B9LGF0dGFjaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSksdGhpcy5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMudW5saXN0ZW4odGhpcywiaXJvbi1yZXNpemUiLCJfcmVzaXplSGFuZGxlciIpfSx1cGRhdGVWaWV3cG9ydEJvdW5kYXJpZXM6ZnVuY3Rpb24oKXtsZXQgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKTt0aGlzLl9zY3JvbGxlclBhZGRpbmdUb3A9dGhpcy5zY3JvbGxUYXJnZXQ9PT10aGlzPzA6cGFyc2VJbnQoZVsicGFkZGluZy10b3AiXSwxMCksdGhpcy5faXNSVEw9Qm9vbGVhbihlLmRpcmVjdGlvbj09PSJydGwiKSx0aGlzLl92aWV3cG9ydFdpZHRoPXRoaXMuJC5pdGVtcy5vZmZzZXRXaWR0aCx0aGlzLl92aWV3cG9ydEhlaWdodD10aGlzLl9zY3JvbGxUYXJnZXRIZWlnaHR9LF9zY3JvbGxIYW5kbGVyOmZ1bmN0aW9uKCl7bGV0IGU9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLl9tYXhTY3JvbGxUb3AsdGhpcy5fc2Nyb2xsVG9wKSksdD1lLXRoaXMuX3Njcm9sbFBvc2l0aW9uLHI9dD49MDtpZih0aGlzLl9zY3JvbGxQb3NpdGlvbj1lLHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLE1hdGguYWJzKHQpPnRoaXMuX3BoeXNpY2FsU2l6ZSYmdGhpcy5fcGh5c2ljYWxTaXplPjApe3Q9dC10aGlzLl9zY3JvbGxPZmZzZXQ7bGV0IG49TWF0aC5yb3VuZCh0L3RoaXMuX3BoeXNpY2FsQXZlcmFnZSk7dGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtuLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtuLHRoaXMuX3BoeXNpY2FsVG9wPU1hdGguZmxvb3IodGhpcy5fdmlydHVhbFN0YXJ0KSp0aGlzLl9waHlzaWNhbEF2ZXJhZ2UsdGhpcy5fdXBkYXRlKCl9ZWxzZSBpZih0aGlzLl9waHlzaWNhbENvdW50PjApe2xldHtwaHlzaWNhbFRvcDpuLGluZGV4ZXM6aX09dGhpcy5fZ2V0UmV1c2FibGVzKHIpO3I/KHRoaXMuX3BoeXNpY2FsVG9wPW4sdGhpcy5fdmlydHVhbFN0YXJ0PXRoaXMuX3ZpcnR1YWxTdGFydCtpLmxlbmd0aCx0aGlzLl9waHlzaWNhbFN0YXJ0PXRoaXMuX3BoeXNpY2FsU3RhcnQraS5sZW5ndGgpOih0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0LWkubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydC1pLmxlbmd0aCksdGhpcy5fdXBkYXRlKGkscj9udWxsOmkpLHRoaXMuX2RlYm91bmNlKCJfaW5jcmVhc2VQb29sSWZOZWVkZWQiLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkLmJpbmQodGhpcywwKSxjaSl9fSxfZ2V0UmV1c2FibGVzOmZ1bmN0aW9uKGUpe2xldCB0LHIsbixpPVtdLG89dGhpcy5faGlkZGVuQ29udGVudFNpemUqdGhpcy5fcmF0aW8sYT10aGlzLl92aXJ0dWFsU3RhcnQscz10aGlzLl92aXJ0dWFsRW5kLGw9dGhpcy5fcGh5c2ljYWxDb3VudCxjPXRoaXMuX3BoeXNpY2FsVG9wK3RoaXMuX3Njcm9sbE9mZnNldCx1PXRoaXMuX3BoeXNpY2FsQm90dG9tK3RoaXMuX3Njcm9sbE9mZnNldCxoPXRoaXMuX3Njcm9sbFRvcCxmPXRoaXMuX3Njcm9sbEJvdHRvbTtmb3IoZT8odD10aGlzLl9waHlzaWNhbFN0YXJ0LHI9aC1jKToodD10aGlzLl9waHlzaWNhbEVuZCxyPXUtZik7bj10aGlzLl9waHlzaWNhbFNpemVzW3RdLHI9ci1uLCEoaS5sZW5ndGg+PWx8fHI8PW8pOylpZihlKXtpZihzK2kubGVuZ3RoKzE+PXRoaXMuX3ZpcnR1YWxDb3VudHx8YytuPj1oLXRoaXMuX3Njcm9sbE9mZnNldClicmVhaztpLnB1c2godCksYz1jK24sdD0odCsxKSVsfWVsc2V7aWYoYS1pLmxlbmd0aDw9MHx8Yyt0aGlzLl9waHlzaWNhbFNpemUtbjw9ZilicmVhaztpLnB1c2godCksYz1jLW4sdD10PT09MD9sLTE6dC0xfXJldHVybntpbmRleGVzOmkscGh5c2ljYWxUb3A6Yy10aGlzLl9zY3JvbGxPZmZzZXR9fSxfdXBkYXRlOmZ1bmN0aW9uKGUsdCl7aWYoIShlJiZlLmxlbmd0aD09PTB8fHRoaXMuX3BoeXNpY2FsQ291bnQ9PT0wKSl7aWYodGhpcy5fYXNzaWduTW9kZWxzKGUpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoZSksdClmb3IoO3QubGVuZ3RoOyl7bGV0IHI9dC5wb3AoKTt0aGlzLl9waHlzaWNhbFRvcC09dGhpcy5fcGh5c2ljYWxTaXplc1tyXX10aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCl9fSxfaXNDbGllbnRGdWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Njcm9sbEJvdHRvbSE9MCYmdGhpcy5fcGh5c2ljYWxCb3R0b20tMT49dGhpcy5fc2Nyb2xsQm90dG9tJiZ0aGlzLl9waHlzaWNhbFRvcDw9dGhpcy5fc2Nyb2xsUG9zaXRpb259LF9pbmNyZWFzZVBvb2xJZk5lZWRlZDpmdW5jdGlvbihlKXtsZXQgcj10aGlzLl9jbGFtcCh0aGlzLl9waHlzaWNhbENvdW50K2UsSGNlLHRoaXMuX3ZpcnR1YWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQpLXRoaXMuX3BoeXNpY2FsQ291bnQsbj1NYXRoLnJvdW5kKHRoaXMuX3BoeXNpY2FsQ291bnQqLjUpO2lmKCEocjwwKSl7aWYocj4wKXtsZXQgaT13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7W10ucHVzaC5hcHBseSh0aGlzLl9waHlzaWNhbEl0ZW1zLHRoaXMuX2NyZWF0ZVBvb2wocikpO2ZvcihsZXQgbz0wO288cjtvKyspdGhpcy5fcGh5c2ljYWxTaXplcy5wdXNoKDApO3RoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudCtyLHRoaXMuX3BoeXNpY2FsU3RhcnQ+dGhpcy5fcGh5c2ljYWxFbmQmJnRoaXMuX2lzSW5kZXhSZW5kZXJlZCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KSYmdGhpcy5fZ2V0UGh5c2ljYWxJbmRleCh0aGlzLl9mb2N1c2VkVmlydHVhbEluZGV4KTx0aGlzLl9waHlzaWNhbEVuZCYmKHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCtyKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90ZW1wbGF0ZUNvc3Q9KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKS1pKS9yLG49TWF0aC5yb3VuZCh0aGlzLl9waHlzaWNhbENvdW50Ki41KX10aGlzLl92aXJ0dWFsRW5kPj10aGlzLl92aXJ0dWFsQ291bnQtMXx8bj09PTB8fCh0aGlzLl9pc0NsaWVudEZ1bGwoKT90aGlzLl9waHlzaWNhbFNpemU8dGhpcy5fb3B0UGh5c2ljYWxTaXplJiZ0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsdGhpcy5fY2xhbXAoTWF0aC5yb3VuZCg1MC90aGlzLl90ZW1wbGF0ZUNvc3QpLDEsbikpLGt4KTp0aGlzLl9kZWJvdW5jZSgiX2luY3JlYXNlUG9vbElmTmVlZGVkIix0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZC5iaW5kKHRoaXMsbiksY2kpKX19LF9yZW5kZXI6ZnVuY3Rpb24oKXtpZighKCF0aGlzLmlzQXR0YWNoZWR8fCF0aGlzLl9pc1Zpc2libGUpKWlmKHRoaXMuX3BoeXNpY2FsQ291bnQhPT0wKXtsZXR7cGh5c2ljYWxUb3A6ZSxpbmRleGVzOnR9PXRoaXMuX2dldFJldXNhYmxlcyghMCk7dGhpcy5fcGh5c2ljYWxUb3A9ZSx0aGlzLl92aXJ0dWFsU3RhcnQ9dGhpcy5fdmlydHVhbFN0YXJ0K3QubGVuZ3RoLHRoaXMuX3BoeXNpY2FsU3RhcnQ9dGhpcy5fcGh5c2ljYWxTdGFydCt0Lmxlbmd0aCx0aGlzLl91cGRhdGUodCksdGhpcy5fdXBkYXRlKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCl9ZWxzZSB0aGlzLl92aXJ0dWFsQ291bnQ+MCYmKHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoSGNlKSl9LF9pdGVtc0NoYW5nZWQ6ZnVuY3Rpb24oZSl7ZS5wYXRoPT09Iml0ZW1zIiYmKHRoaXMuX3ZpcnR1YWxTdGFydD0wLHRoaXMuX3BoeXNpY2FsVG9wPTAsdGhpcy5fdmlydHVhbENvdW50PXRoaXMuaXRlbXM/dGhpcy5pdGVtcy5sZW5ndGg6MCx0aGlzLl9waHlzaWNhbEluZGV4Rm9yS2V5PXt9LHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMuX3BoeXNpY2FsQ291bnQ9dGhpcy5fcGh5c2ljYWxDb3VudHx8MCx0aGlzLl9waHlzaWNhbEl0ZW1zPXRoaXMuX3BoeXNpY2FsSXRlbXN8fFtdLHRoaXMuX3BoeXNpY2FsU2l6ZXM9dGhpcy5fcGh5c2ljYWxTaXplc3x8W10sdGhpcy5fcGh5c2ljYWxTdGFydD0wLHRoaXMuX3Njcm9sbFRvcD50aGlzLl9zY3JvbGxPZmZzZXQmJnRoaXMuX3Jlc2V0U2Nyb2xsUG9zaXRpb24oMCksdGhpcy5fZGVib3VuY2UoIl9yZW5kZXIiLHRoaXMuX3JlbmRlcixOaSkpfSxfaXRlcmF0ZUl0ZW1zOmZ1bmN0aW9uKGUsdCl7bGV0IHIsbixpLG87aWYoYXJndW1lbnRzLmxlbmd0aD09PTImJnQpe2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspaWYocj10W29dLG49dGhpcy5fY29tcHV0ZVZpZHgociksKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGl9ZWxzZXtmb3Iocj10aGlzLl9waHlzaWNhbFN0YXJ0LG49dGhpcy5fdmlydHVhbFN0YXJ0O3I8dGhpcy5fcGh5c2ljYWxDb3VudDtyKyssbisrKWlmKChpPWUuY2FsbCh0aGlzLHIsbikpIT1udWxsKXJldHVybiBpO2ZvcihyPTA7cjx0aGlzLl9waHlzaWNhbFN0YXJ0O3IrKyxuKyspaWYoKGk9ZS5jYWxsKHRoaXMscixuKSkhPW51bGwpcmV0dXJuIGl9fSxfY29tcHV0ZVZpZHg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PXRoaXMuX3BoeXNpY2FsU3RhcnQ/dGhpcy5fdmlydHVhbFN0YXJ0KyhlLXRoaXMuX3BoeXNpY2FsU3RhcnQpOnRoaXMuX3ZpcnR1YWxTdGFydCsodGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl9waHlzaWNhbFN0YXJ0KStlfSxfdXBkYXRlTWV0cmljczpmdW5jdGlvbihlKXtpZighdGhpcy5faXNWaXNpYmxlKXJldHVybjt1aSgpO2xldCB0PTAscj0wLG49dGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQsaT10aGlzLl9waHlzaWNhbEF2ZXJhZ2U7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKG8pe3IrPXRoaXMuX3BoeXNpY2FsU2l6ZXNbb10sdGhpcy5fcGh5c2ljYWxTaXplc1tvXT10aGlzLl9waHlzaWNhbEl0ZW1zW29dLm9mZnNldEhlaWdodCx0Kz10aGlzLl9waHlzaWNhbFNpemVzW29dLHRoaXMuX3BoeXNpY2FsQXZlcmFnZUNvdW50Kz10aGlzLl9waHlzaWNhbFNpemVzW29dPzE6MH0sZSksdGhpcy5fcGh5c2ljYWxTaXplPXRoaXMuX3BoeXNpY2FsU2l6ZSt0LXIsdGhpcy5fcGh5c2ljYWxBdmVyYWdlQ291bnQhPT1uJiYodGhpcy5fcGh5c2ljYWxBdmVyYWdlPU1hdGgucm91bmQoKGkqbit0KS90aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudCkpfSxfcG9zaXRpb25JdGVtczpmdW5jdGlvbigpe3RoaXMuX2FkanVzdFNjcm9sbFBvc2l0aW9uKCk7bGV0IGU9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKGZ1bmN0aW9uKHQpe3RoaXMudHJhbnNsYXRlM2QoMCxlKyJweCIsMCx0aGlzLl9waHlzaWNhbEl0ZW1zW3RdKSxlKz10aGlzLl9waHlzaWNhbFNpemVzW3RdfSl9LF9hZGp1c3RTY3JvbGxQb3NpdGlvbjpmdW5jdGlvbigpe2xldCBlPXRoaXMuX3ZpcnR1YWxTdGFydD09PTA/dGhpcy5fcGh5c2ljYWxUb3A6TWF0aC5taW4odGhpcy5fc2Nyb2xsUG9zaXRpb24rdGhpcy5fcGh5c2ljYWxUb3AsMCk7aWYoZSE9PTApe3RoaXMuX3BoeXNpY2FsVG9wPXRoaXMuX3BoeXNpY2FsVG9wLWU7bGV0IHQ9dGhpcy5fc2Nyb2xsVG9wOyFlaHImJnQ+MCYmdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0LWUpfX0sX3Jlc2V0U2Nyb2xsUG9zaXRpb246ZnVuY3Rpb24oZSl7dGhpcy5zY3JvbGxUYXJnZXQmJmU+PTAmJih0aGlzLl9zY3JvbGxUb3A9ZSx0aGlzLl9zY3JvbGxQb3NpdGlvbj10aGlzLl9zY3JvbGxUb3ApfSxfdXBkYXRlU2Nyb2xsZXJTaXplOmZ1bmN0aW9uKGUpe3RoaXMuX2VzdFNjcm9sbEhlaWdodD10aGlzLl9waHlzaWNhbEJvdHRvbStNYXRoLm1heCh0aGlzLl92aXJ0dWFsQ291bnQtdGhpcy5fcGh5c2ljYWxDb3VudC10aGlzLl92aXJ0dWFsU3RhcnQsMCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlLGU9ZXx8dGhpcy5fc2Nyb2xsSGVpZ2h0PT09MCxlPWV8fHRoaXMuX3Njcm9sbFBvc2l0aW9uPj10aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fcGh5c2ljYWxTaXplLChlfHxNYXRoLmFicyh0aGlzLl9lc3RTY3JvbGxIZWlnaHQtdGhpcy5fc2Nyb2xsSGVpZ2h0KT49dGhpcy5fdmlld3BvcnRIZWlnaHQpJiYodGhpcy4kLml0ZW1zLnN0eWxlLmhlaWdodD10aGlzLl9lc3RTY3JvbGxIZWlnaHQrInB4Iix0aGlzLl9zY3JvbGxIZWlnaHQ9dGhpcy5fZXN0U2Nyb2xsSGVpZ2h0KX0sc2Nyb2xsVG9JbmRleDpmdW5jdGlvbihlKXtpZih0eXBlb2YgZSE9Im51bWJlciJ8fGU8MHx8ZT50aGlzLml0ZW1zLmxlbmd0aC0xfHwodWkoKSx0aGlzLl9waHlzaWNhbENvdW50PT09MCkpcmV0dXJuO2U9dGhpcy5fY2xhbXAoZSwwLHRoaXMuX3ZpcnR1YWxDb3VudC0xKSwoIXRoaXMuX2lzSW5kZXhSZW5kZXJlZChlKXx8ZT49dGhpcy5fbWF4VmlydHVhbFN0YXJ0KSYmKHRoaXMuX3ZpcnR1YWxTdGFydD1lLTEpLHRoaXMuX2Fzc2lnbk1vZGVscygpLHRoaXMuX3VwZGF0ZU1ldHJpY3MoKSx0aGlzLl9waHlzaWNhbFRvcD1NYXRoLmZsb29yKHRoaXMuX3ZpcnR1YWxTdGFydCkqdGhpcy5fcGh5c2ljYWxBdmVyYWdlO2xldCB0PXRoaXMuX3BoeXNpY2FsU3RhcnQscj10aGlzLl92aXJ0dWFsU3RhcnQsbj0wLGk9dGhpcy5faGlkZGVuQ29udGVudFNpemU7Zm9yKDtyPGUmJm48PWk7KW49bit0aGlzLl9waHlzaWNhbFNpemVzW3RdLHQ9KHQrMSkldGhpcy5fcGh5c2ljYWxDb3VudCxyKys7dGhpcy5fdXBkYXRlU2Nyb2xsZXJTaXplKCEwKSx0aGlzLl9wb3NpdGlvbkl0ZW1zKCksdGhpcy5fcmVzZXRTY3JvbGxQb3NpdGlvbih0aGlzLl9waHlzaWNhbFRvcCt0aGlzLl9zY3JvbGxPZmZzZXQrbiksdGhpcy5faW5jcmVhc2VQb29sSWZOZWVkZWQoMCksdGhpcy5fZmlyc3RWaXNpYmxlSW5kZXhWYWw9bnVsbCx0aGlzLl9sYXN0VmlzaWJsZUluZGV4VmFsPW51bGx9LF9yZXNldEF2ZXJhZ2U6ZnVuY3Rpb24oKXt0aGlzLl9waHlzaWNhbEF2ZXJhZ2U9MCx0aGlzLl9waHlzaWNhbEF2ZXJhZ2VDb3VudD0wfSxfcmVzaXplSGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlKCJfcmVuZGVyIixmdW5jdGlvbigpe3RoaXMuX2ZpcnN0VmlzaWJsZUluZGV4VmFsPW51bGwsdGhpcy5fbGFzdFZpc2libGVJbmRleFZhbD1udWxsLHRoaXMudXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCksdGhpcy5faXNWaXNpYmxlPyh0aGlzLnRvZ2dsZVNjcm9sbExpc3RlbmVyKCEwKSx0aGlzLl9yZXNldEF2ZXJhZ2UoKSx0aGlzLl9yZW5kZXIoKSk6dGhpcy50b2dnbGVTY3JvbGxMaXN0ZW5lcighMSl9LE5pKX0sX2lzSW5kZXhSZW5kZXJlZDpmdW5jdGlvbihlKXtyZXR1cm4gZT49dGhpcy5fdmlydHVhbFN0YXJ0JiZlPD10aGlzLl92aXJ0dWFsRW5kfSxfZ2V0UGh5c2ljYWxJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4odGhpcy5fcGh5c2ljYWxTdGFydCsoZS10aGlzLl92aXJ0dWFsU3RhcnQpKSV0aGlzLl9waHlzaWNhbENvdW50fSxfY2xhbXA6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNYXRoLm1pbihyLE1hdGgubWF4KHQsZSkpfSxfZGVib3VuY2U6ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2RlYm91bmNlcnM9dGhpcy5fZGVib3VuY2Vyc3x8e30sdGhpcy5fZGVib3VuY2Vyc1tlXT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJzW2VdLHIsdC5iaW5kKHRoaXMpKSxKbCh0aGlzLl9kZWJvdW5jZXJzW2VdKX19KTt2YXIgUUg9Y2xhc3MgZXh0ZW5kcyBWY2V7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3NpemU6e3R5cGU6TnVtYmVyLG5vdGlmeTohMH0sX3ZpZHhPZmZzZXQ6e3R5cGU6TnVtYmVyLHZhbHVlOjB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2VmZmVjdGl2ZVNpemVDaGFuZ2VkKF9lZmZlY3RpdmVTaXplKSJdfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCl9X3VwZGF0ZVNjcm9sbGVySXRlbSgpe31fYWZ0ZXJTY3JvbGwoKXt9X2dldFJvd1RhcmdldCgpe31fY3JlYXRlU2Nyb2xsZXJSb3dzKCl7fV9jYW5Qb3B1bGF0ZSgpe31zY3JvbGxUb0luZGV4KHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzKCJzY3JvbGxUb0luZGV4IiksdGhpcy5fc2Nyb2xsaW5nVG9JbmRleD0hMCx0PU1hdGgubWluKE1hdGgubWF4KHQsMCksdGhpcy5fZWZmZWN0aXZlU2l6ZS0xKSx0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXQvdGhpcy5fZWZmZWN0aXZlU2l6ZSoodGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuX21heFNjcm9sbFRvcCkmJnRoaXMuX3ZpcnR1YWxDb3VudDx0aGlzLl9lZmZlY3RpdmVTaXplJiZ0aGlzLl9hZGp1c3RWaXJ0dWFsSW5kZXhPZmZzZXQoMWU2KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleCh0LXRoaXMuX3ZpZHhPZmZzZXQpKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCk7bGV0IHI9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihuPT5uLmluZGV4PT09dClbMF07aWYocil7bGV0IG49ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AtdGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207TWF0aC5hYnMobik+MSYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPW4sdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX10aGlzLl9zY3JvbGxpbmdUb0luZGV4PSExfV9lZmZlY3RpdmVTaXplQ2hhbmdlZCh0KXtsZXQgcixuPTA7dGhpcy5faXRlcmF0ZUl0ZW1zKChpLG8pPT57aWYobz09PXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4KXtsZXQgYT10aGlzLl9waHlzaWNhbEl0ZW1zW2ldO3I9YS5pbmRleCxuPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wfX0pLHRoaXMuaXRlbXMmJnQ8dGhpcy5pdGVtcy5sZW5ndGgmJih0aGlzLl9zY3JvbGxUb3A9MCksQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKXx8KHRoaXMuaXRlbXM9e2xlbmd0aDpNYXRoLm1pbih0LDFlNSl9KSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuX2l0ZW1zQ2hhbmdlZCh7cGF0aDoiaXRlbXMifSkpLHRoaXMuX3ZpcnR1YWxDb3VudD1NYXRoLm1pbih0aGlzLml0ZW1zLmxlbmd0aCx0KXx8MCx0aGlzLl9zY3JvbGxUb3A9PT0wJiYodGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnRoaXMuX3Njcm9sbFRvSW5kZXgoTWF0aC5taW4odC0xLHIpKSksdGhpcy5faXRlcmF0ZUl0ZW1zKGk9PntsZXQgbz10aGlzLl9waHlzaWNhbEl0ZW1zW2ldO2lmKG8uaW5kZXg9PT1yJiYodGhpcy4kLnRhYmxlLnNjcm9sbFRvcCs9TWF0aC5yb3VuZChvLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1uKSksby5pbmRleD09PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgmJnRoaXMuX2l0ZW1zRm9jdXNhYmxlJiZ0aGlzLiQuaXRlbXMuY29udGFpbnModGhpcy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQpKXtsZXQgYT1BcnJheS5mcm9tKHRoaXMuX2l0ZW1zRm9jdXNhYmxlLnBhcmVudEVsZW1lbnQuY2hpbGRyZW4pLmluZGV4T2YodGhpcy5faXRlbXNGb2N1c2FibGUpO28uY2hpbGRyZW5bYV0uZm9jdXMoKX19KSksdGhpcy5fYXNzaWduTW9kZWxzKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl91cGRhdGUoKSksdGhpcy5fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl9X3Bvc2l0aW9uSXRlbXMoKXt0aGlzLl9hZGp1c3RTY3JvbGxQb3NpdGlvbigpO2xldCB0O2lzTmFOKHRoaXMuX3BoeXNpY2FsVG9wKSYmKHQ9ITAsdGhpcy5fcGh5c2ljYWxUb3A9MCk7bGV0IHI9dGhpcy5fcGh5c2ljYWxUb3A7dGhpcy5faXRlcmF0ZUl0ZW1zKG49Pnt0aGlzLl9waHlzaWNhbEl0ZW1zW25dLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWSgke3J9cHgpYCxyKz10aGlzLl9waHlzaWNhbFNpemVzW25dfSksdCYmdGhpcy5fc2Nyb2xsVG9JbmRleCgwKX1faW5jcmVhc2VQb29sSWZOZWVkZWQodCl7dD09PTAmJnRoaXMuX3Njcm9sbGluZ1RvSW5kZXh8fCF0aGlzLl9jYW5Qb3B1bGF0ZSgpfHwhdGhpcy5fZWZmZWN0aXZlU2l6ZXx8KHRoaXMuX2luaXRpYWxQb29sQ3JlYXRlZD90aGlzLl9vcHRQaHlzaWNhbFNpemUhPT0xLzAmJih0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbD1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbCxOaSwoKT0+e3RoaXMuX3VwZGF0ZU1ldHJpY3MoKTtsZXQgcj10aGlzLl9vcHRQaHlzaWNhbFNpemUtdGhpcy5fcGh5c2ljYWxTaXplLG49TWF0aC5jZWlsKHIvdGhpcy5fcGh5c2ljYWxBdmVyYWdlKTt0aGlzLl9waHlzaWNhbENvdW50K24+dGhpcy5fZWZmZWN0aXZlU2l6ZSYmKG49TWF0aC5tYXgoMCx0aGlzLl9lZmZlY3RpdmVTaXplLXRoaXMuX3BoeXNpY2FsQ291bnQpKSx0aGlzLl9waHlzaWNhbFNpemUmJm4+MCYmdGhpcy5fb3B0UGh5c2ljYWxTaXplIT09MS8wJiYoc3VwZXIuX2luY3JlYXNlUG9vbElmTmVlZGVkKG4pLHRoaXMuX19yZW9yZGVyQ2hpbGROb2RlcygpKX0pKToodGhpcy5faW5pdGlhbFBvb2xDcmVhdGVkPSEwLHN1cGVyLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgyNSkpKX1fX3Jlb3JkZXJDaGlsZE5vZGVzKCl7bGV0IHQ9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGROb2Rlcyk7ISF0LnJlZHVjZSgobixpLG8sYSk9PntpZihvPT09MHx8YVtvLTFdLmluZGV4PT09aS5pbmRleC0xKXJldHVybiBufSwhMCl8fHQuc29ydCgobixpKT0+bi5pbmRleC1pLmluZGV4KS5mb3JFYWNoKG49PnRoaXMuJC5pdGVtcy5hcHBlbmRDaGlsZChuKSl9X2NyZWF0ZVBvb2wodCl7bGV0IHI9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLG49dGhpcy5fY3JlYXRlU2Nyb2xsZXJSb3dzKHQpO24uZm9yRWFjaChvPT5yLmFwcGVuZENoaWxkKG8pKSx0aGlzLl9nZXRSb3dUYXJnZXQoKS5hcHBlbmRDaGlsZChyKTtsZXQgaT10aGlzLnF1ZXJ5U2VsZWN0b3IoIltzbG90XSIpO2lmKGkpe2xldCBvPWkuZ2V0QXR0cmlidXRlKCJzbG90Iik7aS5zZXRBdHRyaWJ1dGUoInNsb3QiLCJmb28tYmFyIiksaS5zZXRBdHRyaWJ1dGUoInNsb3QiLG8pfXJldHVybiBUbSh0aGlzLCgpPT50aGlzLm5vdGlmeVJlc2l6ZSgpKSxufV9hc3NpZ25Nb2RlbHModCl7dGhpcy5faXRlcmF0ZUl0ZW1zKChyLG4pPT57bGV0IGk9dGhpcy5fcGh5c2ljYWxJdGVtc1tyXTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImhpZGRlbiIsbj49dGhpcy5fZWZmZWN0aXZlU2l6ZSxpKSx0aGlzLl91cGRhdGVTY3JvbGxlckl0ZW0oaSxuKyh0aGlzLl92aWR4T2Zmc2V0fHwwKSl9LHQpfV9zY3JvbGxIYW5kbGVyKCl7bGV0IHQ9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC10aGlzLl9zY3JvbGxQb3NpdGlvbjt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fc2Nyb2xsSGFuZGxlcik7bGV0IHI9dGhpcy5fdmlkeE9mZnNldDt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+dGhpcy5fbWF4U2Nyb2xsVG9wKSYmdGhpcy5fdmlydHVhbENvdW50PHRoaXMuX2VmZmVjdGl2ZVNpemU/dGhpcy5fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KHQpOnRoaXMuX3ZpZHhPZmZzZXQ9MCx0aGlzLl92aWR4T2Zmc2V0IT09ciYmdGhpcy5fdXBkYXRlKCksdGhpcy5fYWZ0ZXJTY3JvbGwoKX1fYWRqdXN0VmlydHVhbEluZGV4T2Zmc2V0KHQpe2lmKE1hdGguYWJzKHQpPjFlNCl7aWYodGhpcy5fbm9TY2FsZSl7dGhpcy5fbm9TY2FsZT0hMTtyZXR1cm59bGV0IHI9dGhpcy4kLnRhYmxlLnNjcm9sbFRvcC8odGhpcy4kLnRhYmxlLnNjcm9sbEhlaWdodC10aGlzLiQudGFibGUub2Zmc2V0SGVpZ2h0KSxuPXIqdGhpcy5fZWZmZWN0aXZlU2l6ZTt0aGlzLl92aWR4T2Zmc2V0PU1hdGgucm91bmQobi1yKnRoaXMuX3ZpcnR1YWxDb3VudCl9ZWxzZXtsZXQgcj10aGlzLl92aWR4T2Zmc2V0fHwwLG49MWUzLGk9MTAwO3RoaXMuX3Njcm9sbFRvcD09PTA/KHRoaXMuX3ZpZHhPZmZzZXQ9MCxyIT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCgwKSk6dGhpcy5maXJzdFZpc2libGVJbmRleDxuJiZ0aGlzLl92aWR4T2Zmc2V0PjAmJih0aGlzLl92aWR4T2Zmc2V0LT1NYXRoLm1pbih0aGlzLl92aWR4T2Zmc2V0LGkpLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuZmlyc3RWaXNpYmxlSW5kZXgrKHItdGhpcy5fdmlkeE9mZnNldCkpLHRoaXMuX25vU2NhbGU9ITApO2xldCBvPXRoaXMuX2VmZmVjdGl2ZVNpemUtdGhpcy5fdmlydHVhbENvdW50O3RoaXMuX3Njcm9sbFRvcD49dGhpcy5fbWF4U2Nyb2xsVG9wJiZ0aGlzLl9tYXhTY3JvbGxUb3A+MD8odGhpcy5fdmlkeE9mZnNldD1vLHIhPT10aGlzLl92aWR4T2Zmc2V0JiZzdXBlci5zY3JvbGxUb0luZGV4KHRoaXMuX3ZpcnR1YWxDb3VudCkpOnRoaXMuZmlyc3RWaXNpYmxlSW5kZXg+dGhpcy5fdmlydHVhbENvdW50LW4mJnRoaXMuX3ZpZHhPZmZzZXQ8byYmKHRoaXMuX3ZpZHhPZmZzZXQrPU1hdGgubWluKG8tdGhpcy5fdmlkeE9mZnNldCxpKSxyIT09dGhpcy5fdmlkeE9mZnNldCYmc3VwZXIuc2Nyb2xsVG9JbmRleCh0aGlzLmZpcnN0VmlzaWJsZUluZGV4LSh0aGlzLl92aWR4T2Zmc2V0LXIpKSx0aGlzLl9ub1NjYWxlPSEwKX19X2FjY2Vzc0lyb25MaXN0QVBJKHQpe3RoaXMuX3dhcm5Qcml2YXRlQVBJQWNjZXNzQXN5bmNFbmFibGVkPSExO2xldCByPXQuYXBwbHkodGhpcyk7cmV0dXJuIHRoaXMuX2RlYm91bmNlcldhcm5Qcml2YXRlQVBJQWNjZXNzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcldhcm5Qcml2YXRlQVBJQWNjZXNzLE5pLCgpPT50aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZD0hMCkscn1fZGVib3VuY2VSZW5kZXIodCxyKXtzdXBlci5fZGVib3VuY2VSZW5kZXIoKCk9PnRoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKHQpLHIpfV93YXJuUHJpdmF0ZUFQSUFjY2Vzcyh0KXt0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2Vzc0FzeW5jRW5hYmxlZCYmY29uc29sZS53YXJuKGBBY2Nlc3NpbmcgcHJpdmF0ZSBBUEkgKCR7dH0pIWApfV9yZW5kZXIoKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVuZGVyKX1faXRlbXNDaGFuZ2VkKCl7fWdldCBfZmlyc3RWaXNpYmxlSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnN1cGVyLmZpcnN0VmlzaWJsZUluZGV4KX1nZXQgX2xhc3RWaXNpYmxlSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWNjZXNzSXJvbkxpc3RBUEkoKCk9PnN1cGVyLmxhc3RWaXNpYmxlSW5kZXgpfV9zY3JvbGxUb0luZGV4KHQpe3RoaXMuX2FjY2Vzc0lyb25MaXN0QVBJKCgpPT50aGlzLnNjcm9sbFRvSW5kZXgodCkpfWdldCBmaXJzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygiZmlyc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5maXJzdFZpc2libGVJbmRleH1zZXQgZmlyc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImZpcnN0VmlzaWJsZUluZGV4Iiksc3VwZXIuZmlyc3RWaXNpYmxlSW5kZXg9dH1nZXQgbGFzdFZpc2libGVJbmRleCgpe3JldHVybiB0aGlzLl93YXJuUHJpdmF0ZUFQSUFjY2VzcygibGFzdFZpc2libGVJbmRleCIpLHN1cGVyLmxhc3RWaXNpYmxlSW5kZXh9c2V0IGxhc3RWaXNpYmxlSW5kZXgodCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoImxhc3RWaXNpYmxlSW5kZXgiKSxzdXBlci5sYXN0VmlzaWJsZUluZGV4PXR9dXBkYXRlVmlld3BvcnRCb3VuZGFyaWVzKCl7dGhpcy5fd2FyblByaXZhdGVBUElBY2Nlc3MoInVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcyIpLHN1cGVyLnVwZGF0ZVZpZXdwb3J0Qm91bmRhcmllcy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9X3Jlc2l6ZUhhbmRsZXIoKXtzdXBlci5fcmVzaXplSGFuZGxlcigpLHVpKCl9fTt2YXIgVWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2ExMXlVcGRhdGVHcmlkU2l6ZShzaXplLCBfY29sdW1uVHJlZSwgX2NvbHVtblRyZWUuKikiXX1fYTExeUdldEhlYWRlclJvd0NvdW50KHIpe3JldHVybiByLmZpbHRlcihuPT5uLnNvbWUoaT0+aS5faGVhZGVyVGVtcGxhdGV8fGkuaGVhZGVyUmVuZGVyZXJ8fGkucGF0aHx8aS5oZWFkZXIpKS5sZW5ndGh9X2ExMXlHZXRGb290ZXJSb3dDb3VudChyKXtyZXR1cm4gci5maWx0ZXIobj0+bi5zb21lKGk9PmkuX2hlYWRlclRlbXBsYXRlfHxpLmhlYWRlclJlbmRlcmVyKSkubGVuZ3RofV9hMTF5VXBkYXRlR3JpZFNpemUocixuKXtpZihyPT09dm9pZCAwfHxuPT09dm9pZCAwKXJldHVybjtsZXQgaT1uW24ubGVuZ3RoLTFdO3RoaXMuJC50YWJsZS5zZXRBdHRyaWJ1dGUoImFyaWEtcm93Y291bnQiLHIrdGhpcy5fYTExeUdldEhlYWRlclJvd0NvdW50KG4pK3RoaXMuX2ExMXlHZXRGb290ZXJSb3dDb3VudChuKSksdGhpcy4kLnRhYmxlLnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xjb3VudCIsaSYmaS5sZW5ndGh8fDApLHRoaXMuX2ExMXlVcGRhdGVIZWFkZXJSb3dzKCksdGhpcy5fYTExeVVwZGF0ZUZvb3RlclJvd3MoKX1fYTExeVVwZGF0ZUhlYWRlclJvd3MoKXtBcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnIuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4IixuKzEpKX1fYTExeVVwZGF0ZUZvb3RlclJvd3MoKXtBcnJheS5mcm9tKHRoaXMuJC5mb290ZXIuY2hpbGRyZW4pLmZvckVhY2goKHIsbik9PnIuc2V0QXR0cmlidXRlKCJhcmlhLXJvd2luZGV4Iix0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrdGhpcy5zaXplK24rMSkpfV9hMTF5VXBkYXRlUm93Um93aW5kZXgocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsbit0aGlzLl9hMTF5R2V0SGVhZGVyUm93Q291bnQodGhpcy5fY29sdW1uVHJlZSkrMSl9X2ExMXlVcGRhdGVSb3dTZWxlY3RlZChyLG4pe3Iuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIixCb29sZWFuKG4pKSxBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+aS5zZXRBdHRyaWJ1dGUoImFyaWEtc2VsZWN0ZWQiLEJvb2xlYW4obikpKX1fYTExeVVwZGF0ZVJvd0xldmVsKHIsbil7ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGV2ZWwiLG4rMSl9X2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKHIsbil7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKGk9Pnt0eXBlb2Ygbj09ImJvb2xlYW4iP2kuc2V0QXR0cmlidXRlKCJhcmlhLWV4cGFuZGVkIixuKTppLmhhc0F0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpJiZpLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1leHBhbmRlZCIpfSl9X2ExMXlTZXRSb3dEZXRhaWxzQ2VsbChyLG4pe0FycmF5LmZyb20oci5jaGlsZHJlbikuZm9yRWFjaChpPT57aSE9PW4mJmkuc2V0QXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIixuLmlkKX0pfV9hMTF5VXBkYXRlQ2VsbENvbHNwYW4ocixuKXtyLnNldEF0dHJpYnV0ZSgiYXJpYS1jb2xzcGFuIixOdW1iZXIobikpfV9hMTF5VXBkYXRlU29ydGVycygpe0FycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiKSkuZm9yRWFjaChyPT57bGV0IG49ci5wYXJlbnROb2RlO2Zvcig7biYmbi5sb2NhbE5hbWUhPT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Ijspbj1uLnBhcmVudE5vZGU7biYmbi5hc3NpZ25lZFNsb3QmJm4uYXNzaWduZWRTbG90LnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJhcmlhLXNvcnQiLHthc2M6ImFzY2VuZGluZyIsZGVzYzoiZGVzY2VuZGluZyJ9W1N0cmluZyhyLmRpcmVjdGlvbildfHwibm9uZSIpfSl9fTt2YXIgcWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57YWN0aXZlSXRlbTp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLHZhbHVlOm51bGx9fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnNjcm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9vbkNsaWNrLmJpbmQodGhpcykpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2VsbC1hY3RpdmF0ZSIsdGhpcy5fYWN0aXZhdGVJdGVtLmJpbmQodGhpcykpfV9hY3RpdmF0ZUl0ZW0ocil7bGV0IG49ci5kZXRhaWwubW9kZWwsaT1uP24uaXRlbTpudWxsO2kmJih0aGlzLmFjdGl2ZUl0ZW09dGhpcy5faXRlbXNFcXVhbCh0aGlzLmFjdGl2ZUl0ZW0saSk/bnVsbDppKX1fb25DbGljayhyKXtpZihyLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uW24uaW5kZXhPZih0aGlzLiQudGFibGUpLTNdO2lmKCFpfHxpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImRldGFpbHMtY2VsbCIpPi0xKXJldHVybjtsZXQgbz1pLl9jb250ZW50LGE9dGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQ7IW8uY29udGFpbnMoYSkmJiF0aGlzLl9pc0ZvY3VzYWJsZShyLnRhcmdldCkmJnRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtYWN0aXZhdGUiLHtkZXRhaWw6e21vZGVsOnRoaXMuX19nZXRSb3dNb2RlbChpLnBhcmVudEVsZW1lbnQpfX0pKX1faXNGb2N1c2FibGUocil7cmV0dXJuIHJocihyKX19LHJocj1lPT57aWYoIWUucGFyZW50Tm9kZSlyZXR1cm4hMTtsZXQgcj1BcnJheS5mcm9tKGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJbdGFiaW5kZXhdLCBidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBvYmplY3QsIGlmcmFtZSwgbGFiZWwsIGFbaHJlZl0sIGFyZWFbaHJlZl0iKSkuZmlsdGVyKG49Pm4uZ2V0QXR0cmlidXRlKCJwYXJ0IikhPT0iY2VsbCBib2R5LWNlbGwiKS5pbmRleE9mKGUpIT09LTE7cmV0dXJuIWUuZGlzYWJsZWQmJnJ9O3ZhciBHY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntpdGVtczpBcnJheX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9pdGVtc0NoYW5nZWQoaXRlbXMsIGl0ZW1zLiosIGlzQXR0YWNoZWQpIl19X2l0ZW1zQ2hhbmdlZChyLG4saSl7aWYoISFpKXtpZighQXJyYXkuaXNBcnJheShyKSl7cj09bnVsbCYmKHRoaXMuc2l6ZT0wKSx0aGlzLmRhdGFQcm92aWRlcj09PXRoaXMuX2FycmF5RGF0YVByb3ZpZGVyJiYodGhpcy5kYXRhUHJvdmlkZXI9dm9pZCAwKTtyZXR1cm59dGhpcy5zaXplPXIubGVuZ3RoLHRoaXMuZGF0YVByb3ZpZGVyPXRoaXMuZGF0YVByb3ZpZGVyfHx0aGlzLl9hcnJheURhdGFQcm92aWRlcix0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX19X2FycmF5RGF0YVByb3ZpZGVyKHIsbil7bGV0IGk9KEFycmF5LmlzQXJyYXkodGhpcy5pdGVtcyk/dGhpcy5pdGVtczpbXSkuc2xpY2UoMCk7dGhpcy5fZmlsdGVycyYmdGhpcy5fY2hlY2tQYXRocyh0aGlzLl9maWx0ZXJzLCJmaWx0ZXJpbmciLGkpJiYoaT10aGlzLl9maWx0ZXIoaSkpLHRoaXMuc2l6ZT1pLmxlbmd0aCxyLnNvcnRPcmRlcnMubGVuZ3RoJiZ0aGlzLl9jaGVja1BhdGhzKHRoaXMuX3NvcnRlcnMsInNvcnRpbmciLGkpJiYoaT1pLnNvcnQodGhpcy5fbXVsdGlTb3J0LmJpbmQodGhpcykpKTtsZXQgbz1yLnBhZ2Uqci5wYWdlU2l6ZSxhPW8rci5wYWdlU2l6ZSxzPWkuc2xpY2UobyxhKTtuKHMsaS5sZW5ndGgpfV9jaGVja1BhdGhzKHIsbixpKXtpZighaS5sZW5ndGgpcmV0dXJuITE7bGV0IG89ITA7Zm9yKGxldCBhIGluIHIpe2xldCBzPXJbYV0ucGF0aDtpZighc3x8cy5pbmRleE9mKCIuIik9PT0tMSljb250aW51ZTtsZXQgbD1zLnJlcGxhY2UoL1wuW14uXSokLywiIik7RGEuZ2V0KGwsaVswXSk9PT12b2lkIDAmJihjb25zb2xlLndhcm4oYFBhdGggIiR7c30iIHVzZWQgZm9yICR7bn0gZG9lcyBub3QgZXhpc3QgaW4gYWxsIG9mIHRoZSBpdGVtcywgJHtufSBpcyBkaXNhYmxlZC5gKSxvPSExKX1yZXR1cm4gb31fbXVsdGlTb3J0KHIsbil7cmV0dXJuIHRoaXMuX3NvcnRlcnMubWFwKGk9PmkuZGlyZWN0aW9uPT09ImFzYyI/dGhpcy5fY29tcGFyZShEYS5nZXQoaS5wYXRoLHIpLERhLmdldChpLnBhdGgsbikpOmkuZGlyZWN0aW9uPT09ImRlc2MiP3RoaXMuX2NvbXBhcmUoRGEuZ2V0KGkucGF0aCxuKSxEYS5nZXQoaS5wYXRoLHIpKTowKS5yZWR1Y2UoKGksbyk9Pml8fG8sMCl9X25vcm1hbGl6ZUVtcHR5VmFsdWUocil7cmV0dXJuW3ZvaWQgMCxudWxsXS5pbmRleE9mKHIpPj0wPyIiOmlzTmFOKHIpP3IudG9TdHJpbmcoKTpyfV9jb21wYXJlKHIsbil7cmV0dXJuIHI9dGhpcy5fbm9ybWFsaXplRW1wdHlWYWx1ZShyKSxuPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUobikscjxuPy0xOnI+bj8xOjB9X2ZpbHRlcihyKXtyZXR1cm4gci5maWx0ZXIobj0+dGhpcy5fZmlsdGVycy5maWx0ZXIoaT0+e2xldCBvPXRoaXMuX25vcm1hbGl6ZUVtcHR5VmFsdWUoRGEuZ2V0KGkucGF0aCxuKSksYT10aGlzLl9ub3JtYWxpemVFbXB0eVZhbHVlKGkudmFsdWUpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4gby50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT09PS0xfSkubGVuZ3RoPT09MCl9fTt2YXIgV2NlPWU9PmNsYXNzIGV4dGVuZHMgeWgoZSl7cmVhZHkoKXtzdXBlci5yZWFkeSgpO2xldCByPXRoaXMuJC5zY3JvbGxlcjtFbShyLCJ0cmFjayIsdGhpcy5fb25IZWFkZXJUcmFjay5iaW5kKHRoaXMpKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsbj0+ci5oYXNBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIpJiZuLnByZXZlbnREZWZhdWx0KCkpLHIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLG49Pm4udGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpPT0icmVzaXplLWhhbmRsZSImJm4ucHJldmVudERlZmF1bHQoKSksci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLG49Pm4udGFyZ2V0LmdldEF0dHJpYnV0ZSgicGFydCIpPT09InJlc2l6ZS1oYW5kbGUiJiZuLnByZXZlbnREZWZhdWx0KCkpfV9vbkhlYWRlclRyYWNrKHIpe2xldCBuPXIudGFyZ2V0O2lmKG4uZ2V0QXR0cmlidXRlKCJwYXJ0Iik9PT0icmVzaXplLWhhbmRsZSIpe2xldCBvPW4ucGFyZW50RWxlbWVudC5fY29sdW1uO2Zvcih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImNvbHVtbi1yZXNpemluZyIsITAsdGhpcy4kLnNjcm9sbGVyKTtvLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiOylvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG8uX2NoaWxkQ29sdW1ucywwKS5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGwuX29yZGVyLWMuX29yZGVyfSkuZmlsdGVyKGZ1bmN0aW9uKGwpe3JldHVybiFsLmhpZGRlbn0pLnBvcCgpO2xldCBhPUFycmF5LmZyb20odGhpcy4kLmhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCdbcGFydH49InJvdyJdOmxhc3QtY2hpbGQgW3BhcnR+PSJjZWxsIl0nKSkscz1hLmZpbHRlcihsPT5sLl9jb2x1bW49PT1vKVswXTtpZihzLm9mZnNldFdpZHRoKXtsZXQgbD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzKSxjPTEwK3BhcnNlSW50KGwucGFkZGluZ0xlZnQpK3BhcnNlSW50KGwucGFkZGluZ1JpZ2h0KStwYXJzZUludChsLmJvcmRlckxlZnRXaWR0aCkrcGFyc2VJbnQobC5ib3JkZXJSaWdodFdpZHRoKStwYXJzZUludChsLm1hcmdpbkxlZnQpK3BhcnNlSW50KGwubWFyZ2luUmlnaHQpLHU9cy5vZmZzZXRXaWR0aCsodGhpcy5fX2lzUlRMP3MuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1yLmRldGFpbC54OnIuZGV0YWlsLngtcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCk7by53aWR0aD1NYXRoLm1heChjLHUpKyJweCIsby5mbGV4R3Jvdz0wfWEuc29ydChmdW5jdGlvbihsLGMpe3JldHVybiBsLl9jb2x1bW4uX29yZGVyLWMuX2NvbHVtbi5fb3JkZXJ9KS5mb3JFYWNoKGZ1bmN0aW9uKGwsYyx1KXtjPHUuaW5kZXhPZihzKSYmKGwuX2NvbHVtbi53aWR0aD1sLm9mZnNldFdpZHRoKyJweCIsbC5fY29sdW1uLmZsZXhHcm93PTApfSksci5kZXRhaWwuc3RhdGU9PT0iZW5kIiYmKHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbHVtbi1yZXNpemUiLHtkZXRhaWw6e3Jlc2l6ZWRDb2x1bW46b319KSkpLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKX19fTt2YXIgWWNlPWNsYXNzIGpjZXtjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5ncmlkPXQsdGhpcy5wYXJlbnRDYWNoZT1yLHRoaXMucGFyZW50SXRlbT1uLHRoaXMuaXRlbUNhY2hlcz17fSx0aGlzLml0ZW1zPXt9LHRoaXMuZWZmZWN0aXZlU2l6ZT0wLHRoaXMuc2l6ZT0wLHRoaXMucGVuZGluZ1JlcXVlc3RzPXt9fWlzTG9hZGluZygpe3JldHVybiBCb29sZWFuKE9iamVjdC5rZXlzKHRoaXMucGVuZGluZ1JlcXVlc3RzKS5sZW5ndGh8fE9iamVjdC5rZXlzKHRoaXMuaXRlbUNhY2hlcykuZmlsdGVyKHQ9PnRoaXMuaXRlbUNhY2hlc1t0XS5pc0xvYWRpbmcoKSlbMF0pfWdldEl0ZW1Gb3JJbmRleCh0KXtsZXR7Y2FjaGU6cixzY2FsZWRJbmRleDpufT10aGlzLmdldENhY2hlQW5kSW5kZXgodCk7cmV0dXJuIHIuaXRlbXNbbl19dXBkYXRlU2l6ZSgpe3RoaXMuZWZmZWN0aXZlU2l6ZT0hdGhpcy5wYXJlbnRJdGVtfHx0aGlzLmdyaWQuX2lzRXhwYW5kZWQodGhpcy5wYXJlbnRJdGVtKT90aGlzLnNpemUrT2JqZWN0LmtleXModGhpcy5pdGVtQ2FjaGVzKS5yZWR1Y2UoKHQscik9PntsZXQgbj10aGlzLml0ZW1DYWNoZXNbcl07cmV0dXJuIG4udXBkYXRlU2l6ZSgpLHQrbi5lZmZlY3RpdmVTaXplfSwwKTowfWVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgodCl7aWYoIXRoaXMuaXRlbUNhY2hlc1t0XSl7bGV0IHI9bmV3IGpjZSh0aGlzLmdyaWQsdGhpcyx0aGlzLml0ZW1zW3RdKTt0aGlzLml0ZW1DYWNoZXNbdF09cix0aGlzLmdyaWQuX2xvYWRQYWdlKDAscil9fWdldENhY2hlQW5kSW5kZXgodCl7bGV0IHI9dCxuPU9iamVjdC5rZXlzKHRoaXMuaXRlbUNhY2hlcyk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCBvPU51bWJlcihuW2ldKSxhPXRoaXMuaXRlbUNhY2hlc1tvXTtpZihyPD1vKXJldHVybntjYWNoZTp0aGlzLHNjYWxlZEluZGV4OnJ9O2lmKHI8PW8rYS5lZmZlY3RpdmVTaXplKXJldHVybiBhLmdldENhY2hlQW5kSW5kZXgoci1vLTEpO3ItPWEuZWZmZWN0aXZlU2l6ZX1yZXR1cm57Y2FjaGU6dGhpcyxzY2FsZWRJbmRleDpyfX19LFhjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue3BhZ2VTaXplOnt0eXBlOk51bWJlcix2YWx1ZTo1MCxvYnNlcnZlcjoiX3BhZ2VTaXplQ2hhbmdlZCJ9LGRhdGFQcm92aWRlcjp7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLG9ic2VydmVyOiJfZGF0YVByb3ZpZGVyQ2hhbmdlZCJ9LGxvYWRpbmc6e3R5cGU6Qm9vbGVhbixub3RpZnk6ITAscmVhZE9ubHk6ITAscmVmbGVjdFRvQXR0cmlidXRlOiEwfSxfY2FjaGU6e3R5cGU6T2JqZWN0LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBZY2UodGhpcyl9fSxpdGVtSWRQYXRoOnt0eXBlOlN0cmluZyx2YWx1ZTpudWxsfSxleHBhbmRlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zaXplQ2hhbmdlZChzaXplKSIsIl9pdGVtSWRQYXRoQ2hhbmdlZChpdGVtSWRQYXRoKSIsIl9leHBhbmRlZEl0ZW1zQ2hhbmdlZChleHBhbmRlZEl0ZW1zLiopIl19X3NpemVDaGFuZ2VkKHIpe2xldCBuPXItdGhpcy5fY2FjaGUuc2l6ZTt0aGlzLl9jYWNoZS5zaXplKz1uLHRoaXMuX2NhY2hlLmVmZmVjdGl2ZVNpemUrPW4sdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLHRoaXMuX2luY3JlYXNlUG9vbElmTmVlZGVkKDApLHRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpfV9nZXRJdGVtKHIsbil7aWYocj49dGhpcy5fZWZmZWN0aXZlU2l6ZSlyZXR1cm47bi5pbmRleD1yO2xldHtjYWNoZTppLHNjYWxlZEluZGV4Om99PXRoaXMuX2NhY2hlLmdldENhY2hlQW5kSW5kZXgociksYT1pLml0ZW1zW29dO2E/KHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibG9hZGluZyIsITEsbiksdGhpcy5fdXBkYXRlSXRlbShuLGEpLHRoaXMuX2lzRXhwYW5kZWQoYSkmJmkuZW5zdXJlU3ViQ2FjaGVGb3JTY2FsZWRJbmRleChvKSk6KHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibG9hZGluZyIsITAsbiksdGhpcy5fbG9hZFBhZ2UodGhpcy5fZ2V0UGFnZUZvckluZGV4KG8pLGkpKX1fZXhwYW5kZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe3IuaXRlbSE9PXZvaWQgMCYmKG4/dGhpcy5leHBhbmRJdGVtKHIuaXRlbSk6dGhpcy5jb2xsYXBzZUl0ZW0oci5pdGVtKSl9Z2V0SXRlbUlkKHIpe3JldHVybiB0aGlzLml0ZW1JZFBhdGg/dGhpcy5nZXQodGhpcy5pdGVtSWRQYXRoLHIpOnJ9X2lzRXhwYW5kZWQocil7cmV0dXJuIHRoaXMuX19leHBhbmRlZEtleXMuaGFzKHRoaXMuZ2V0SXRlbUlkKHIpKX1fZXhwYW5kZWRJdGVtc0NoYW5nZWQoKXt0aGlzLl9fY2FjaGVFeHBhbmRlZEtleXMoKSx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5fZWZmZWN0aXZlU2l6ZT10aGlzLl9jYWNoZS5lZmZlY3RpdmVTaXplLHRoaXMuX2Fzc2lnbk1vZGVscygpfV9pdGVtSWRQYXRoQ2hhbmdlZCgpe3RoaXMuX19jYWNoZUV4cGFuZGVkS2V5cygpfV9fY2FjaGVFeHBhbmRlZEtleXMoKXt0aGlzLmV4cGFuZGVkSXRlbXMmJih0aGlzLl9fZXhwYW5kZWRLZXlzPW5ldyBTZXQsdGhpcy5leHBhbmRlZEl0ZW1zLmZvckVhY2gocj0+e3RoaXMuX19leHBhbmRlZEtleXMuYWRkKHRoaXMuZ2V0SXRlbUlkKHIpKX0pKX1leHBhbmRJdGVtKHIpe3RoaXMuX2lzRXhwYW5kZWQocil8fCh0aGlzLmV4cGFuZGVkSXRlbXM9Wy4uLnRoaXMuZXhwYW5kZWRJdGVtcyxyXSl9Y29sbGFwc2VJdGVtKHIpe3RoaXMuX2lzRXhwYW5kZWQocikmJih0aGlzLmV4cGFuZGVkSXRlbXM9dGhpcy5leHBhbmRlZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X2dldEluZGV4TGV2ZWwocil7bGV0e2NhY2hlOm59PXRoaXMuX2NhY2hlLmdldENhY2hlQW5kSW5kZXgociksaT0wO2Zvcig7bi5wYXJlbnRDYWNoZTspbj1uLnBhcmVudENhY2hlLGkrKztyZXR1cm4gaX1fY2FuUG9wdWxhdGUoKXtyZXR1cm4gQm9vbGVhbih0aGlzLl9oYXNEYXRhJiZ0aGlzLl9jb2x1bW5UcmVlKX1fbG9hZFBhZ2UocixuKXtpZighbi5wZW5kaW5nUmVxdWVzdHNbcl0mJnRoaXMuZGF0YVByb3ZpZGVyKXt0aGlzLl9zZXRMb2FkaW5nKCEwKSxuLnBlbmRpbmdSZXF1ZXN0c1tyXT0hMDtsZXQgaT17cGFnZTpyLHBhZ2VTaXplOnRoaXMucGFnZVNpemUsc29ydE9yZGVyczp0aGlzLl9tYXBTb3J0ZXJzKCksZmlsdGVyczp0aGlzLl9tYXBGaWx0ZXJzKCkscGFyZW50SXRlbTpuLnBhcmVudEl0ZW19O3RoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sJiZ0aGlzLl9kZWJvdW5jZUluY3JlYXNlUG9vbC5mbHVzaCgpLHRoaXMuZGF0YVByb3ZpZGVyKGksKG8sYSk9PnthIT09dm9pZCAwP24uc2l6ZT1hOmkucGFyZW50SXRlbSYmKG4uc2l6ZT1vLmxlbmd0aCk7bGV0IHM9QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLm1hcChsPT5sLl9pdGVtKTtvLmZvckVhY2goKGwsYyk9PntsZXQgdT1yKnRoaXMucGFnZVNpemUrYztuLml0ZW1zW3VdPWwsdGhpcy5faXNFeHBhbmRlZChsKSYmcy5pbmRleE9mKGwpPi0xJiZuLmVuc3VyZVN1YkNhY2hlRm9yU2NhbGVkSW5kZXgodSl9KSx0aGlzLl9oYXNEYXRhPSEwLGRlbGV0ZSBuLnBlbmRpbmdSZXF1ZXN0c1tyXSx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGE9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQXBwbHlDYWNoZWREYXRhLG1vLmFmdGVyKDApLCgpPT57dGhpcy5fc2V0TG9hZGluZyghMSksdGhpcy5fY2FjaGUudXBkYXRlU2l6ZSgpLHRoaXMuX2VmZmVjdGl2ZVNpemU9dGhpcy5fY2FjaGUuZWZmZWN0aXZlU2l6ZSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PiFsLmhpZGRlbikuZm9yRWFjaChsPT57dGhpcy5fY2FjaGUuZ2V0SXRlbUZvckluZGV4KGwuaW5kZXgpJiZ0aGlzLl9nZXRJdGVtKGwuaW5kZXgsbCl9KSx0aGlzLl9pbmNyZWFzZVBvb2xJZk5lZWRlZCgwKSx0aGlzLl9fc2Nyb2xsVG9QZW5kaW5nSW5kZXgoKX0pLHRoaXMuX2NhY2hlLmlzTG9hZGluZygpfHx0aGlzLl9kZWJvdW5jZXJBcHBseUNhY2hlZERhdGEuZmx1c2goKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpfSl9fV9nZXRQYWdlRm9ySW5kZXgocil7cmV0dXJuIE1hdGguZmxvb3Ioci90aGlzLnBhZ2VTaXplKX1jbGVhckNhY2hlKCl7dGhpcy5fY2FjaGU9bmV3IFljZSh0aGlzKSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT57QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5mb3JFYWNoKG49PntuLl9pbnN0YW5jZSYmbi5faW5zdGFuY2UuX3NldFBlbmRpbmdQcm9wZXJ0eSgiaXRlbSIse30sITEpfSl9KSx0aGlzLl9jYWNoZS5zaXplPXRoaXMuc2l6ZXx8MCx0aGlzLl9jYWNoZS51cGRhdGVTaXplKCksdGhpcy5faGFzRGF0YT0hMSx0aGlzLl9hc3NpZ25Nb2RlbHMoKSwoIXRoaXMuX2VmZmVjdGl2ZVNpemV8fCF0aGlzLl9pbml0aWFsUG9vbENyZWF0ZWQpJiZ0aGlzLl9sb2FkUGFnZSgwLHRoaXMuX2NhY2hlKX1fcGFnZVNpemVDaGFuZ2VkKHIsbil7biE9PXZvaWQgMCYmciE9PW4mJnRoaXMuY2xlYXJDYWNoZSgpfV9jaGVja1NpemUoKXt0aGlzLnNpemU9PT12b2lkIDAmJnRoaXMuX2VmZmVjdGl2ZVNpemU9PT0wJiZjb25zb2xlLndhcm4oIlRoZSA8dmFhZGluLWdyaWQ+IG5lZWRzIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gb3JkZXIgdG8gZGlzcGxheSByb3dzLiBTZXQgdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyB0byB0aGUgYHNpemVgIHByb3BlcnR5LCBvciBwcm92aWRlIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgYGRhdGFQcm92aWRlcmBcdTIwMTlzIGBjYWxsYmFja2AgY2FsbC4iKX1fZGF0YVByb3ZpZGVyQ2hhbmdlZChyLG4pe24hPT12b2lkIDAmJnRoaXMuY2xlYXJDYWNoZSgpLHImJnRoaXMuaXRlbXMmJnRoaXMuaXRlbXMubGVuZ3RoJiZ0aGlzLl9zY3JvbGxUb0luZGV4KHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4KSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKSx0aGlzLl9kZWJvdW5jZXJDaGVja1NpemU9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2hlY2tTaXplLG1vLmFmdGVyKDJlMyksdGhpcy5fY2hlY2tTaXplLmJpbmQodGhpcykpLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX1fZW5zdXJlRmlyc3RQYWdlTG9hZGVkKCl7dGhpcy5faGFzRGF0YXx8dGhpcy5fbG9hZFBhZ2UoMCx0aGlzLl9jYWNoZSl9X2l0ZW1zRXF1YWwocixuKXtyZXR1cm4gdGhpcy5nZXRJdGVtSWQocik9PT10aGlzLmdldEl0ZW1JZChuKX1fZ2V0SXRlbUluZGV4SW5BcnJheShyLG4pe2xldCBpPS0xO3JldHVybiBuLmZvckVhY2goKG8sYSk9Pnt0aGlzLl9pdGVtc0VxdWFsKG8scikmJihpPWEpfSksaX1zY3JvbGxUb0luZGV4KHIpe3N1cGVyLnNjcm9sbFRvSW5kZXgociksIWlzTmFOKHIpJiYodGhpcy5fY2FjaGUuaXNMb2FkaW5nKCl8fCF0aGlzLmNsaWVudEhlaWdodCkmJih0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXg9cil9X19zY3JvbGxUb1BlbmRpbmdJbmRleCgpe2lmKHRoaXMuX19wZW5kaW5nU2Nyb2xsVG9JbmRleCYmdGhpcy4kLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCl7bGV0IHI9dGhpcy5fX3BlbmRpbmdTY3JvbGxUb0luZGV4O2RlbGV0ZSB0aGlzLl9fcGVuZGluZ1Njcm9sbFRvSW5kZXgsdGhpcy5fZGVib3VuY2VJbmNyZWFzZVBvb2wmJnRoaXMuX2RlYm91bmNlSW5jcmVhc2VQb29sLmZsdXNoKCksdGhpcy5zY3JvbGxUb0luZGV4KHIpfX19O3ZhciAkY2U9ZT0+Y2xhc3MgZXh0ZW5kcyBle3JlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLl9hZGROb2RlT2JzZXJ2ZXIoKX1faGFzQ29sdW1uR3JvdXBzKHIpe2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKWlmKHJbbl0ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCIpcmV0dXJuITA7cmV0dXJuITF9X2dldENoaWxkQ29sdW1ucyhyKXtyZXR1cm4gdmguZ2V0RmxhdHRlbmVkTm9kZXMocikuZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCl9X2ZsYXR0ZW5Db2x1bW5Hcm91cHMocil7cmV0dXJuIHIubWFwKG49Pm4ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI/dGhpcy5fZ2V0Q2hpbGRDb2x1bW5zKG4pOltuXSkucmVkdWNlKChuLGkpPT5uLmNvbmNhdChpKSxbXSl9X2dldENvbHVtblRyZWUoKXtsZXQgcj12aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIodGhpcy5faXNDb2x1bW5FbGVtZW50KSxuPVtdO2ZvcihsZXQgaT1yO24ucHVzaChpKSwhIXRoaXMuX2hhc0NvbHVtbkdyb3VwcyhpKTspaT10aGlzLl9mbGF0dGVuQ29sdW1uR3JvdXBzKGkpO3JldHVybiBufV91cGRhdGVDb2x1bW5UcmVlKCl7bGV0IHI9dGhpcy5fZ2V0Q29sdW1uVHJlZSgpO3RoaXMuX2FycmF5RXF1YWxzKHIsdGhpcy5fY29sdW1uVHJlZSl8fCh0aGlzLl9jb2x1bW5UcmVlPXIpfV9hZGROb2RlT2JzZXJ2ZXIoKXt0aGlzLl9vYnNlcnZlcj1uZXcgdmgodGhpcyxyPT57bGV0IG49ci5hZGRlZE5vZGVzLmZpbHRlcihvPT5vLmxvY2FsTmFtZT09PSJ0ZW1wbGF0ZSImJm8uY2xhc3NMaXN0LmNvbnRhaW5zKCJyb3ctZGV0YWlscyIpKVswXTtuJiZ0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUhPT1uJiYodGhpcy5fcm93RGV0YWlsc1RlbXBsYXRlPW4pO2xldCBpPW89Pm8uZmlsdGVyKHRoaXMuX2lzQ29sdW1uRWxlbWVudCkubGVuZ3RoPjA7aWYoaShyLmFkZGVkTm9kZXMpfHxpKHIucmVtb3ZlZE5vZGVzKSl7bGV0IG89ci5yZW1vdmVkTm9kZXMuZmxhdE1hcChzPT5zLl9hbGxDZWxscyksYT1zPT5vLmZpbHRlcihsPT5sLl9jb250ZW50LmNvbnRhaW5zKHMpKS5sZW5ndGg7dGhpcy5fX3JlbW92ZVNvcnRlcnModGhpcy5fc29ydGVycy5maWx0ZXIoYSkpLHRoaXMuX19yZW1vdmVGaWx0ZXJzKHRoaXMuX2ZpbHRlcnMuZmlsdGVyKGEpKSx0aGlzLl91cGRhdGVDb2x1bW5UcmVlKCl9dGhpcy5fZGVib3VuY2VyQ2hlY2tJbXBvcnRzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckNoZWNrSW1wb3J0cyxtby5hZnRlcigyZTMpLHRoaXMuX2NoZWNrSW1wb3J0cy5iaW5kKHRoaXMpKSx0aGlzLl9lbnN1cmVGaXJzdFBhZ2VMb2FkZWQoKX0pfV9hcnJheUVxdWFscyhyLG4pe2lmKCFyfHwhbnx8ci5sZW5ndGghPW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaT0wLG89ci5sZW5ndGg7aTxvO2krKylpZihyW2ldaW5zdGFuY2VvZiBBcnJheSYmbltpXWluc3RhbmNlb2YgQXJyYXkpe2lmKCF0aGlzLl9hcnJheUVxdWFscyhyW2ldLG5baV0pKXJldHVybiExfWVsc2UgaWYocltpXSE9bltpXSlyZXR1cm4hMTtyZXR1cm4hMH1fY2hlY2tJbXBvcnRzKCl7WyJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiLCJ2YWFkaW4tZ3JpZC1maWx0ZXIiLCJ2YWFkaW4tZ3JpZC1maWx0ZXItY29sdW1uIiwidmFhZGluLWdyaWQtdHJlZS10b2dnbGUiLCJ2YWFkaW4tZ3JpZC1zZWxlY3Rpb24tY29sdW1uIiwidmFhZGluLWdyaWQtc29ydC1jb2x1bW4iLCJ2YWFkaW4tZ3JpZC1zb3J0ZXIiXS5mb3JFYWNoKHI9PntsZXQgbj10aGlzLnF1ZXJ5U2VsZWN0b3Iocik7biYmIShuIGluc3RhbmNlb2YgbXQpJiZjb25zb2xlLndhcm4oYE1ha2Ugc3VyZSB5b3UgaGF2ZSBpbXBvcnRlZCB0aGUgcmVxdWlyZWQgbW9kdWxlIGZvciA8JHtyfT4gZWxlbWVudC5gKX0pfV91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKXtBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpKS5mb3JFYWNoKHI9PnRoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyhyKSl9X3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbkZvclJvdyhyKXtBcnJheS5mcm9tKHIucXVlcnlTZWxlY3RvckFsbCgnW3BhcnR+PSJjZWxsIl06bm90KFtwYXJ0fj0iZGV0YWlscy1jZWxsIl0pJykpLnNvcnQoKG4saSk9Pm4uX2NvbHVtbi5fb3JkZXItaS5fY29sdW1uLl9vcmRlcikuZm9yRWFjaCgobixpLG8pPT57dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmaXJzdC1jb2x1bW4iLGk9PT0wLG4pLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibGFzdC1jb2x1bW4iLGk9PT1vLmxlbmd0aC0xLG4pfSl9X2lzQ29sdW1uRWxlbWVudChyKXtyZXR1cm4gci5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYvXGJjb2x1bW5cYi8udGVzdChyLmxvY2FsTmFtZSl9fTt2YXIgS2NlPWU9PmNsYXNzIGV4dGVuZHMgZXtnZXRFdmVudENvbnRleHQocil7bGV0IG49e30saT1yLmNvbXBvc2VkUGF0aCgpLG89aVtpLmluZGV4T2YodGhpcy4kLnRhYmxlKS0zXTtyZXR1cm4gbyYmKG4uc2VjdGlvbj1bImJvZHkiLCJoZWFkZXIiLCJmb290ZXIiLCJkZXRhaWxzIl0uZmlsdGVyKGE9Pm8uZ2V0QXR0cmlidXRlKCJwYXJ0IikuaW5kZXhPZihhKT4tMSlbMF0sby5fY29sdW1uJiYobi5jb2x1bW49by5fY29sdW1uKSwobi5zZWN0aW9uPT09ImJvZHkifHxuLnNlY3Rpb249PT0iZGV0YWlscyIpJiZPYmplY3QuYXNzaWduKG4sdGhpcy5fX2dldFJvd01vZGVsKG8ucGFyZW50RWxlbWVudCkpKSxufX07dmFyIFpjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19maWx0ZXJzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiZmlsdGVyLWNoYW5nZWQiLHRoaXMuX2ZpbHRlckNoYW5nZWQuYmluZCh0aGlzKSl9X2ZpbHRlckNoYW5nZWQocil7ci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9fYWRkRmlsdGVyKHIudGFyZ2V0KSx0aGlzLl9fYXBwbHlGaWx0ZXJzKCl9X19yZW1vdmVGaWx0ZXJzKHIpe3IubGVuZ3RoIT0wJiYodGhpcy5fZmlsdGVycz10aGlzLl9maWx0ZXJzLmZpbHRlcihuPT5yLmluZGV4T2Yobik8MCksdGhpcy5fX2FwcGx5RmlsdGVycygpKX1fX2FkZEZpbHRlcihyKXt0aGlzLl9maWx0ZXJzLmluZGV4T2Yocik9PT0tMSYmdGhpcy5fZmlsdGVycy5wdXNoKHIpfV9fYXBwbHlGaWx0ZXJzKCl7dGhpcy5kYXRhUHJvdmlkZXImJnRoaXMuaXNBdHRhY2hlZCYmdGhpcy5jbGVhckNhY2hlKCl9X21hcEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5fZmlsdGVycy5tYXAocj0+KHtwYXRoOnIucGF0aCx2YWx1ZTpyLnZhbHVlfSkpfX07dmFyIFQwPWNsYXNzIGV4dGVuZHMgbXR7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC10ZW1wbGF0aXplciJ9c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RhdGFIb3N0Ok9iamVjdCx0ZW1wbGF0ZTpPYmplY3QsX3RlbXBsYXRlSW5zdGFuY2VzOnt0eXBlOkFycmF5LHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuW119fSxfcGFyZW50UGF0aFZhbHVlczp7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57fX19LF9ncmlkOk9iamVjdH19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl90ZW1wbGF0ZUluc3RhbmNlc0NoYW5nZWQoX3RlbXBsYXRlSW5zdGFuY2VzLiosIF9wYXJlbnRQYXRoVmFsdWVzLiopIl19Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2luc3RhbmNlUHJvcHM9e2RldGFpbHNPcGVuZWQ6ITAsaW5kZXg6ITAsaXRlbTohMCxzZWxlY3RlZDohMCxleHBhbmRlZDohMCxsZXZlbDohMH19Y3JlYXRlSW5zdGFuY2UoKXt0aGlzLl9lbnN1cmVUZW1wbGF0aXplZCgpO2xldCB0PW5ldyB0aGlzLl9UZW1wbGF0ZUNsYXNzKHt9KTtyZXR1cm4gdGhpcy5hZGRJbnN0YW5jZSh0KSx0fWFkZEluc3RhbmNlKHQpe3RoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmluZGV4T2YodCk9PT0tMSYmKHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLnB1c2godCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLm5vdGlmeVBhdGgoIl90ZW1wbGF0ZUluc3RhbmNlcy4qIix0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcykpKX1yZW1vdmVJbnN0YW5jZSh0KXtsZXQgcj10aGlzLl90ZW1wbGF0ZUluc3RhbmNlcy5pbmRleE9mKHQpO3RoaXMuc3BsaWNlKCJfdGVtcGxhdGVJbnN0YW5jZXMiLHIsMSl9X2Vuc3VyZVRlbXBsYXRpemVkKCl7dGhpcy5fVGVtcGxhdGVDbGFzc3x8KHRoaXMuX1RlbXBsYXRlQ2xhc3M9dGModGhpcy50ZW1wbGF0ZSx0aGlzLHtpbnN0YW5jZVByb3BzOnRoaXMuX2luc3RhbmNlUHJvcHMscGFyZW50TW9kZWw6ITAsZm9yd2FyZEhvc3RQcm9wOmZ1bmN0aW9uKHQscil7dGhpcy5fZm9yd2FyZFBhcmVudFByb3AodCxyKSx0aGlzLl90ZW1wbGF0ZUluc3RhbmNlcyYmdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChuPT5uLm5vdGlmeVBhdGgodCxyKSl9LG5vdGlmeUluc3RhbmNlUHJvcDpmdW5jdGlvbih0LHIsbil7aWYocj09PSJpbmRleCJ8fHI9PT0iaXRlbSIpcmV0dXJuO2xldCBpPWBfXyR7cn1fX2A7aWYodFtpXT09PW4pcmV0dXJuO3RbaV09bjtsZXQgbz1BcnJheS5mcm9tKHRoaXMuX2dyaWQuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PnRoaXMuX2dyaWQuX2l0ZW1zRXF1YWwobC5faXRlbSx0Lml0ZW0pKVswXTtvJiZBcnJheS5mcm9tKG8uY2hpbGRyZW4pLmZvckVhY2gobD0+e2wuX2luc3RhbmNlJiYobC5faW5zdGFuY2VbaV09bixsLl9pbnN0YW5jZS5ub3RpZnlQYXRoKHIsbikpfSk7bGV0IGE9Iml0ZW0uIjtpZihBcnJheS5pc0FycmF5KHRoaXMuX2dyaWQuaXRlbXMpJiZyLmluZGV4T2YoYSk9PT0wKXtsZXQgbD10aGlzLl9ncmlkLml0ZW1zLmluZGV4T2YodC5pdGVtKSxjPXIuc2xpY2UoYS5sZW5ndGgpO3RoaXMuX2dyaWQubm90aWZ5UGF0aChgaXRlbXMuJHtsfS4ke2N9YCxuKX1sZXQgcz1gXyR7cn1JbnN0YW5jZUNoYW5nZWRDYWxsYmFja2A7dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZFtzXSYmdGhpcy5fZ3JpZFtzXSh0LG4pfX0pKX1fZm9yd2FyZFBhcmVudFByb3AodCxyKXt0aGlzLl9wYXJlbnRQYXRoVmFsdWVzW3RdPXIsdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXMuZm9yRWFjaChuPT5uLm5vdGlmeVBhdGgodCxyKSl9X3RlbXBsYXRlSW5zdGFuY2VzQ2hhbmdlZCh0KXtsZXQgcixuO2lmKHQucGF0aD09PSJfdGVtcGxhdGVJbnN0YW5jZXMiKXI9MCxuPXRoaXMuX3RlbXBsYXRlSW5zdGFuY2VzLmxlbmd0aDtlbHNlIGlmKHQucGF0aD09PSJfdGVtcGxhdGVJbnN0YW5jZXMuc3BsaWNlcyIpcj10LnZhbHVlLmluZGV4LG49dC52YWx1ZS5hZGRlZENvdW50O2Vsc2UgcmV0dXJuO09iamVjdC5rZXlzKHRoaXMuX3BhcmVudFBhdGhWYWx1ZXN8fHt9KS5mb3JFYWNoKGk9Pntmb3IobGV0IG89cjtvPHIrbjtvKyspdGhpcy5fdGVtcGxhdGVJbnN0YW5jZXNbb10uc2V0KGksdGhpcy5fcGFyZW50UGF0aFZhbHVlc1tpXSl9KX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShUMC5pcyxUMCk7dmFyIEpjZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2RldGFpbHNPcGVuZWRJdGVtczp7dHlwZTpBcnJheSx2YWx1ZTpmdW5jdGlvbigpe3JldHVybltdfX0sX3Jvd0RldGFpbHNUZW1wbGF0ZTpPYmplY3Qscm93RGV0YWlsc1JlbmRlcmVyOkZ1bmN0aW9uLF9kZXRhaWxzQ2VsbHM6e3R5cGU6QXJyYXl9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RldGFpbHNPcGVuZWRJdGVtc0NoYW5nZWQoZGV0YWlsc09wZW5lZEl0ZW1zLiosIF9yb3dEZXRhaWxzVGVtcGxhdGUsIHJvd0RldGFpbHNSZW5kZXJlcikiLCJfcm93RGV0YWlsc1RlbXBsYXRlT3JSZW5kZXJlckNoYW5nZWQoX3Jvd0RldGFpbHNUZW1wbGF0ZSwgcm93RGV0YWlsc1JlbmRlcmVyKSJdfV9yb3dEZXRhaWxzVGVtcGxhdGVPclJlbmRlcmVyQ2hhbmdlZChyLG4pe2lmKHImJm4pdGhyb3cgbmV3IEVycm9yKCJZb3Ugc2hvdWxkIG9ubHkgdXNlIGVpdGhlciBhIHJlbmRlcmVyIG9yIGEgdGVtcGxhdGUgZm9yIHJvdyBkZXRhaWxzIik7aWYocnx8bil7aWYociYmIXIudGVtcGxhdGl6ZXIpe2xldCBpPW5ldyBUMDtpLl9ncmlkPXRoaXMsaS5kYXRhSG9zdD10aGlzLmRhdGFIb3N0LGkudGVtcGxhdGU9cixyLnRlbXBsYXRpemVyPWl9dGhpcy5fY29sdW1uVHJlZSYmQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2goaT0+e2kucXVlcnlTZWxlY3RvcigiW3BhcnR+PWRldGFpbHMtY2VsbF0iKXx8KHRoaXMuX3VwZGF0ZVJvdyhpLHRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0pLHRoaXMuX2ExMXlVcGRhdGVSb3dEZXRhaWxzT3BlbmVkKGksITEpKSxkZWxldGUgaS5xdWVyeVNlbGVjdG9yKCJbcGFydH49ZGV0YWlscy1jZWxsXSIpLl9pbnN0YW5jZX0pLHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLmxlbmd0aCYmKEFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKHRoaXMuX3RvZ2dsZURldGFpbHNDZWxsLHRoaXMpLHRoaXMuX3VwZGF0ZSgpKX19X2RldGFpbHNPcGVuZWRJdGVtc0NoYW5nZWQocil7ci5wYXRoPT09ImRldGFpbHNPcGVuZWRJdGVtcy5sZW5ndGgifHwhci52YWx1ZXx8QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZvckVhY2gobj0+e3RoaXMuX3RvZ2dsZURldGFpbHNDZWxsKG4sbi5faXRlbSksdGhpcy5fYTExeVVwZGF0ZVJvd0RldGFpbHNPcGVuZWQobix0aGlzLl9pc0RldGFpbHNPcGVuZWQobi5faXRlbSkpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZGV0YWlscy1vcGVuZWQiLHRoaXMuX2lzRGV0YWlsc09wZW5lZChuLl9pdGVtKSxuKX0pfV9jb25maWd1cmVEZXRhaWxzQ2VsbChyKXtyLnNldEF0dHJpYnV0ZSgicGFydCIsImNlbGwgZGV0YWlscy1jZWxsIiksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmcm96ZW4iLCEwLHIpfV90b2dnbGVEZXRhaWxzQ2VsbChyLG4pe2xldCBpPXIucXVlcnlTZWxlY3RvcignW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpO2lmKCFpKXJldHVybjtsZXQgbz0hdGhpcy5faXNEZXRhaWxzT3BlbmVkKG4pLGE9ISFpLmhpZGRlbiE9PW87KCFpLl9pbnN0YW5jZSYmIWkuX3JlbmRlcmVyfHxpLmhpZGRlbiE9PW8pJiYoaS5oaWRkZW49byxvP3Iuc3R5bGUucmVtb3ZlUHJvcGVydHkoInBhZGRpbmctYm90dG9tIik6KHRoaXMucm93RGV0YWlsc1JlbmRlcmVyPyhpLl9yZW5kZXJlcj10aGlzLnJvd0RldGFpbHNSZW5kZXJlcixpLl9yZW5kZXJlci5jYWxsKHRoaXMsaS5fY29udGVudCx0aGlzLHtpbmRleDpyLmluZGV4LGl0ZW06bn0pKTp0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGUmJiFpLl9pbnN0YW5jZSYmKGkuX2luc3RhbmNlPXRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZS50ZW1wbGF0aXplci5jcmVhdGVJbnN0YW5jZSgpLGkuX2NvbnRlbnQuaW5uZXJIVE1MPSIiLGkuX2NvbnRlbnQuYXBwZW5kQ2hpbGQoaS5faW5zdGFuY2Uucm9vdCksdGhpcy5fdXBkYXRlSXRlbShyLG4pKSx1aSgpLHIuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtpLm9mZnNldEhlaWdodH1weGApLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5ub3RpZnlSZXNpemUoKSkpKSxhJiYodGhpcy5fdXBkYXRlTWV0cmljcygpLHRoaXMuX3Bvc2l0aW9uSXRlbXMoKSl9X3VwZGF0ZURldGFpbHNDZWxsSGVpZ2h0cygpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl06bm90KFtoaWRkZW5dKScpKS5mb3JFYWNoKHI9PntyLnBhcmVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoInBhZGRpbmctYm90dG9tIixgJHtyLm9mZnNldEhlaWdodH1weGApfSl9X2lzRGV0YWlsc09wZW5lZChyKXtyZXR1cm4gdGhpcy5kZXRhaWxzT3BlbmVkSXRlbXMmJnRoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkocix0aGlzLmRldGFpbHNPcGVuZWRJdGVtcykhPT0tMX1vcGVuSXRlbURldGFpbHMocil7dGhpcy5faXNEZXRhaWxzT3BlbmVkKHIpfHwodGhpcy5kZXRhaWxzT3BlbmVkSXRlbXM9Wy4uLnRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLHJdKX1jbG9zZUl0ZW1EZXRhaWxzKHIpe3RoaXMuX2lzRGV0YWlsc09wZW5lZChyKSYmKHRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zPXRoaXMuZGV0YWlsc09wZW5lZEl0ZW1zLmZpbHRlcihuPT4hdGhpcy5faXRlbXNFcXVhbChuLHIpKSl9X2RldGFpbHNPcGVuZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe24/dGhpcy5vcGVuSXRlbURldGFpbHMoci5pdGVtKTp0aGlzLmNsb3NlSXRlbURldGFpbHMoci5pdGVtKX19O3ZhciBGY3Q9e1NDUk9MTElORzo1MDAsSUdOT1JFX1dIRUVMOjUwMH0sUWNlPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57X2Zyb3plbkNlbGxzOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sX3Jvd1dpdGhGb2N1c2VkRWxlbWVudDpFbGVtZW50LF9kZWx0YVlBY2M6e3R5cGU6TnVtYmVyLHZhbHVlOjB9LF91c2VTdGlja3k6e3R5cGU6Qm9vbGVhbix2YWx1ZTp3aW5kb3cuQ1NTJiZ3aW5kb3cuQ1NTLnN1cHBvcnRzJiYod2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCJzdGlja3kiKXx8d2luZG93LkNTUy5zdXBwb3J0cygicG9zaXRpb24iLCItd2Via2l0LXN0aWNreSIpKX19fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfc2Nyb2xsVmlld3BvcnRIZWlnaHRVcGRhdGVkKF92aWV3cG9ydEhlaWdodCkiXX1zZXQgX3Njcm9sbFRvcChyKXt0aGlzLiQudGFibGUuc2Nyb2xsVG9wPXJ9Z2V0IF9zY3JvbGxUb3AoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNjcm9sbFRvcH1jb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fc2Nyb2xsTGluZUhlaWdodD10aGlzLl9nZXRTY3JvbGxMaW5lSGVpZ2h0KCl9X2dldFNjcm9sbExpbmVIZWlnaHQoKXtsZXQgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLnN0eWxlLmZvbnRTaXplPSJpbml0aWFsIixyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocik7bGV0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUocikuZm9udFNpemU7cmV0dXJuIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQociksbj93aW5kb3cucGFyc2VJbnQobik6dm9pZCAwfV9zY3JvbGxWaWV3cG9ydEhlaWdodFVwZGF0ZWQocil7dGhpcy5fc2Nyb2xsUGFnZUhlaWdodD1yLXRoaXMuJC5oZWFkZXIuY2xpZW50SGVpZ2h0LXRoaXMuJC5mb290ZXIuY2xpZW50SGVpZ2h0LXRoaXMuX3Njcm9sbExpbmVIZWlnaHR9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMuJC5vdXRlcnNjcm9sbGVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc2Nyb2xsVGFyZ2V0PXRoaXMuJC50YWJsZSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLl9vbldoZWVsKSx0aGlzLiQuaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIscj0+e2xldCBuPXIuY29tcG9zZWRQYXRoKCkuaW5kZXhPZih0aGlzLiQuaXRlbXMpO3RoaXMuX3Jvd1dpdGhGb2N1c2VkRWxlbWVudD1yLmNvbXBvc2VkUGF0aCgpW24tMV19KSx0aGlzLiQuaXRlbXMuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLCgpPT50aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnQ9dm9pZCAwKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCgpPT50aGlzLl9fbW91c2VEb3duPSEwKSx0aGlzLnNjcm9sbFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+e3RoaXMuX19tb3VzZURvd249ITEsdGhpcy5fX3BlbmRpbmdSZW9yZGVyJiYodGhpcy5fX3BlbmRpbmdSZW9yZGVyPSExLHNldFRpbWVvdXQoKCk9PnRoaXMuX3Jlb3JkZXJSb3dzKCksRmN0LlNDUk9MTElORykpfSl9c2Nyb2xsVG9JbmRleChyKXt0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSSgoKT0+c3VwZXIuc2Nyb2xsVG9JbmRleChyKSl9X29uV2hlZWwocil7aWYoci5jdHJsS2V5fHx0aGlzLl9oYXNTY3JvbGxlZEFuY2VzdG9yKHIudGFyZ2V0LHIuZGVsdGFYLHIuZGVsdGFZKSlyZXR1cm47bGV0IG49dGhpcy4kLnRhYmxlLGk9ci5kZWx0YVk7aWYoci5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9MSU5FP2kqPXRoaXMuX3Njcm9sbExpbmVIZWlnaHQ6ci5kZWx0YU1vZGU9PT1XaGVlbEV2ZW50LkRPTV9ERUxUQV9QQUdFJiYoaSo9dGhpcy5fc2Nyb2xsUGFnZUhlaWdodCksdGhpcy5fd2hlZWxBbmltYXRpb25GcmFtZSl7dGhpcy5fZGVsdGFZQWNjKz1pLHIucHJldmVudERlZmF1bHQoKTtyZXR1cm59aSs9dGhpcy5fZGVsdGFZQWNjLHRoaXMuX2RlbHRhWUFjYz0wLHRoaXMuX3doZWVsQW5pbWF0aW9uRnJhbWU9ITAsdGhpcy5fZGVib3VuY2VyV2hlZWxBbmltYXRpb25GcmFtZT1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZXJXaGVlbEFuaW1hdGlvbkZyYW1lLE5pLCgpPT50aGlzLl93aGVlbEFuaW1hdGlvbkZyYW1lPSExKTtsZXQgbz1NYXRoLmFicyhyLmRlbHRhWCkrTWF0aC5hYnMoaSk7dGhpcy5fY2FuU2Nyb2xsKG4sci5kZWx0YVgsaSk/KHIucHJldmVudERlZmF1bHQoKSxuLnNjcm9sbFRvcCs9aSxuLnNjcm9sbExlZnQrPXIuZGVsdGFYLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSx0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSEwLHRoaXMuX2lnbm9yZU5ld1doZWVsPSEwLHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlcklnbm9yZU5ld1doZWVsLG1vLmFmdGVyKEZjdC5JR05PUkVfV0hFRUwpLCgpPT50aGlzLl9pZ25vcmVOZXdXaGVlbD0hMSkpOnRoaXMuX2hhc1Jlc2lkdWFsTW9tZW50dW0mJm88PXRoaXMuX3ByZXZpb3VzTW9tZW50dW18fHRoaXMuX2lnbm9yZU5ld1doZWVsP3IucHJldmVudERlZmF1bHQoKTpvPnRoaXMuX3ByZXZpb3VzTW9tZW50dW0mJih0aGlzLl9oYXNSZXNpZHVhbE1vbWVudHVtPSExKSx0aGlzLl9wcmV2aW91c01vbWVudHVtPW99X2hhc1Njcm9sbGVkQW5jZXN0b3IocixuLGkpe2lmKHIubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNlbGwtY29udGVudCIpcmV0dXJuITE7aWYodGhpcy5fY2FuU2Nyb2xsKHIsbixpKSYmWyJhdXRvIiwic2Nyb2xsIl0uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKHIpLm92ZXJmbG93KSE9PS0xKXJldHVybiEwO2lmKHIhPT10aGlzJiZyLnBhcmVudEVsZW1lbnQpcmV0dXJuIHRoaXMuX2hhc1Njcm9sbGVkQW5jZXN0b3Ioci5wYXJlbnRFbGVtZW50LG4saSl9X2NhblNjcm9sbChyLG4saSl7cmV0dXJuIGk+MCYmci5zY3JvbGxUb3A8ci5zY3JvbGxIZWlnaHQtci5vZmZzZXRIZWlnaHR8fGk8MCYmci5zY3JvbGxUb3A+MHx8bj4wJiZyLnNjcm9sbExlZnQ8ci5zY3JvbGxXaWR0aC1yLm9mZnNldFdpZHRofHxuPDAmJnIuc2Nyb2xsTGVmdD4wfV9zY2hlZHVsZVNjcm9sbGluZygpe3RoaXMuX3Njcm9sbGluZ0ZyYW1lfHwodGhpcy5fc2Nyb2xsaW5nRnJhbWU9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITAsdGhpcy4kLnNjcm9sbGVyKSkpLHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlU2Nyb2xsaW5nLG1vLmFmdGVyKEZjdC5TQ1JPTExJTkcpLCgpPT57Y2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fc2Nyb2xsaW5nRnJhbWUpLGRlbGV0ZSB0aGlzLl9zY3JvbGxpbmdGcmFtZSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoInNjcm9sbGluZyIsITEsdGhpcy4kLnNjcm9sbGVyKSx0aGlzLl9yZW9yZGVyUm93cygpfSl9X2FmdGVyU2Nyb2xsKCl7dGhpcy5fdHJhbnNsYXRlU3RhdGlvbmFyeUVsZW1lbnRzKCksdGhpcy5oYXNBdHRyaWJ1dGUoInJlb3JkZXJpbmciKXx8dGhpcy5fc2NoZWR1bGVTY3JvbGxpbmcoKSx0aGlzLl91cGRhdGVPdmVyZmxvdygpfV91cGRhdGVPdmVyZmxvdygpe2xldCByPSIiLG49dGhpcy4kLnRhYmxlO24uc2Nyb2xsVG9wPG4uc2Nyb2xsSGVpZ2h0LW4uY2xpZW50SGVpZ2h0JiYocis9IiBib3R0b20iKSxuLnNjcm9sbFRvcD4wJiYocis9IiB0b3AiKSxuLnNjcm9sbExlZnQ8bi5zY3JvbGxXaWR0aC1uLmNsaWVudFdpZHRoJiYocis9IiByaWdodCIpLG4uc2Nyb2xsTGVmdD4wJiYocis9IiBsZWZ0IiksdGhpcy5fZGVib3VuY2VPdmVyZmxvdz1zci5kZWJvdW5jZSh0aGlzLl9kZWJvdW5jZU92ZXJmbG93LE5pLCgpPT57bGV0IGk9ci50cmltKCk7aS5sZW5ndGg+MCYmdGhpcy5nZXRBdHRyaWJ1dGUoIm92ZXJmbG93IikhPT1pP3RoaXMuc2V0QXR0cmlidXRlKCJvdmVyZmxvdyIsaSk6aS5sZW5ndGg9PTAmJnRoaXMuaGFzQXR0cmlidXRlKCJvdmVyZmxvdyIpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgib3ZlcmZsb3ciKX0pfV9yZW9yZGVyUm93cygpe2lmKHRoaXMuX19tb3VzZURvd24pe3RoaXMuX19wZW5kaW5nUmVvcmRlcj0hMDtyZXR1cm59bGV0IHI9dGhpcy4kLml0ZW1zLG49ci5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpO2lmKCFuLmxlbmd0aClyZXR1cm47bGV0IGk9dGhpcy5fdmlydHVhbFN0YXJ0K3RoaXMuX3ZpZHhPZmZzZXQsbz10aGlzLl9yb3dXaXRoRm9jdXNlZEVsZW1lbnR8fEFycmF5LmZyb20obikuZmlsdGVyKGw9PiFsLmhpZGRlbilbMF07aWYoIW8pcmV0dXJuO2xldCBhPW8uaW5kZXgtaSxzPUFycmF5LmZyb20obikuaW5kZXhPZihvKS1hO2lmKHM+MClmb3IobGV0IGw9MDtsPHM7bCsrKXIuYXBwZW5kQ2hpbGQobltsXSk7ZWxzZSBpZihzPDApZm9yKGxldCBsPW4ubGVuZ3RoK3M7bDxuLmxlbmd0aDtsKyspci5pbnNlcnRCZWZvcmUobltsXSxuWzBdKTtpZih0aGlzLl9zYWZhcmkpe2xldHt0cmFuc2Zvcm06bH09dGhpcy4kLmhlYWRlci5zdHlsZTt0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT0iIixzZXRUaW1lb3V0KCgpPT50aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT1sKX19X2Zyb3plbkNlbGxzQ2hhbmdlZCgpe3RoaXMuX2RlYm91bmNlckNhY2hlRWxlbWVudHM9c3IuZGVib3VuY2UodGhpcy5fZGVib3VuY2VyQ2FjaGVFbGVtZW50cyxjaSwoKT0+e0FycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1twYXJ0fj0iY2VsbCJdJykpLmZvckVhY2goZnVuY3Rpb24ocil7ci5zdHlsZS50cmFuc2Zvcm09IiJ9KSx0aGlzLl9mcm96ZW5DZWxscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLiQudGFibGUucXVlcnlTZWxlY3RvckFsbCgiW2Zyb3plbl0iKSksdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSx0aGlzLl90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKX0pLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKX1fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKXt0aGlzLl9mcm96ZW5DZWxscy5sZW5ndGg+MCYmdGhpcy5fX2lzUlRMJiYodGhpcy5fX3Njcm9sbGVyTWV0cmljcz17c2Nyb2xsV2lkdGg6dGhpcy4kLnRhYmxlLnNjcm9sbFdpZHRoLGNsaWVudFdpZHRoOnRoaXMuJC50YWJsZS5jbGllbnRXaWR0aH0pfV91cGRhdGVMYXN0RnJvemVuKCl7aWYoIXRoaXMuX2NvbHVtblRyZWUpcmV0dXJuO2xldCByPXRoaXMuX2NvbHVtblRyZWVbdGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMV0uc2xpY2UoMCk7ci5zb3J0KChpLG8pPT5pLl9vcmRlci1vLl9vcmRlcik7bGV0IG49ci5yZWR1Y2UoKGksbyxhKT0+KG8uX2xhc3RGcm96ZW49ITEsby5mcm96ZW4mJiFvLmhpZGRlbj9hOmkpLHZvaWQgMCk7biE9PXZvaWQgMCYmKHJbbl0uX2xhc3RGcm96ZW49ITApfV90cmFuc2xhdGVTdGF0aW9uYXJ5RWxlbWVudHMoKXtsZXQgcj1NYXRoLm1heCgwLHRoaXMuX3Njcm9sbExlZnQpLG49TWF0aC5tYXgoMCx0aGlzLl9zY3JvbGxUb3ApLGk9MCxvPTAsYT0wO2lmKHRoaXMuX3VzZVN0aWNreXx8KGk9cixvPW4sYT10aGlzLiQudGFibGUuY2xpZW50SGVpZ2h0LXRoaXMuJC5mb290ZXIub2Zmc2V0SGVpZ2h0LXRoaXMuJC5mb290ZXIub2Zmc2V0VG9wKSx0aGlzLiQuaGVhZGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSxvKSx0aGlzLiQuZm9vdGVyLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9nZXRUcmFuc2xhdGUoLXIraSxvK2EpLHRoaXMuJC5pdGVtcy5zdHlsZS50cmFuc2Zvcm09dGhpcy5fZ2V0VHJhbnNsYXRlKC1yK2ksMCksdGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoPjApe2xldCBzPXRoaXMuX19pc1JUTD90aGlzLl9fZ2V0Tm9ybWFsaXplZFNjcm9sbExlZnQodGhpcy4kLnRhYmxlKSt0aGlzLl9fc2Nyb2xsZXJNZXRyaWNzLmNsaWVudFdpZHRoLXRoaXMuX19zY3JvbGxlck1ldHJpY3Muc2Nyb2xsV2lkdGg6dGhpcy5fc2Nyb2xsTGVmdCxsPXRoaXMuX2dldFRyYW5zbGF0ZShzLDApO2ZvcihsZXQgYz0wO2M8dGhpcy5fZnJvemVuQ2VsbHMubGVuZ3RoO2MrKyl0aGlzLl9mcm96ZW5DZWxsc1tjXS5zdHlsZS50cmFuc2Zvcm09bH19X2dldFRyYW5zbGF0ZShyLG4pe3JldHVybmB0cmFuc2xhdGUoJHtyfXB4LCAke259cHgpYH19O3ZhciB0dWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntzZWxlY3RlZEl0ZW1zOnt0eXBlOk9iamVjdCxub3RpZnk6ITAsdmFsdWU6KCk9PltdfX19c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChzZWxlY3RlZEl0ZW1zLiopIl19X2lzU2VsZWN0ZWQocil7cmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcyYmdGhpcy5fZ2V0SXRlbUluZGV4SW5BcnJheShyLHRoaXMuc2VsZWN0ZWRJdGVtcyk+LTF9c2VsZWN0SXRlbShyKXt0aGlzLl9pc1NlbGVjdGVkKHIpfHwodGhpcy5zZWxlY3RlZEl0ZW1zPVsuLi50aGlzLnNlbGVjdGVkSXRlbXMscl0pfWRlc2VsZWN0SXRlbShyKXt0aGlzLl9pc1NlbGVjdGVkKHIpJiYodGhpcy5zZWxlY3RlZEl0ZW1zPXRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIobj0+IXRoaXMuX2l0ZW1zRXF1YWwobixyKSkpfV90b2dnbGVJdGVtKHIpe3RoaXMuX2dldEl0ZW1JbmRleEluQXJyYXkocix0aGlzLnNlbGVjdGVkSXRlbXMpPT09LTE/dGhpcy5zZWxlY3RJdGVtKHIpOnRoaXMuZGVzZWxlY3RJdGVtKHIpfV9zZWxlY3RlZEl0ZW1zQ2hhbmdlZChyKXt0aGlzLiQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiYoci5wYXRoPT09InNlbGVjdGVkSXRlbXMifHxyLnBhdGg9PT0ic2VsZWN0ZWRJdGVtcy5zcGxpY2VzIikmJkFycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5mb3JFYWNoKG49Pnt0aGlzLl91cGRhdGVJdGVtKG4sbi5faXRlbSl9KX1fc2VsZWN0ZWRJbnN0YW5jZUNoYW5nZWRDYWxsYmFjayhyLG4pe24/dGhpcy5zZWxlY3RJdGVtKHIuaXRlbSk6dGhpcy5kZXNlbGVjdEl0ZW0oci5pdGVtKX19O3ZhciBldWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnttdWx0aVNvcnQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX3NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19LF9wcmV2aW91c1NvcnRlcnM6e3R5cGU6QXJyYXksdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJzb3J0ZXItY2hhbmdlZCIsdGhpcy5fb25Tb3J0ZXJDaGFuZ2VkKX1fb25Tb3J0ZXJDaGFuZ2VkKHIpe2xldCBuPXIudGFyZ2V0O3Iuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fX3VwZGF0ZVNvcnRlcihuKSx0aGlzLl9fYXBwbHlTb3J0ZXJzKCl9X19yZW1vdmVTb3J0ZXJzKHIpe3IubGVuZ3RoIT0wJiYodGhpcy5fc29ydGVycz10aGlzLl9zb3J0ZXJzLmZpbHRlcihuPT5yLmluZGV4T2Yobik8MCksdGhpcy5tdWx0aVNvcnQmJnRoaXMuX191cGRhdGVTb3J0T3JkZXJzKCksdGhpcy5fX2FwcGx5U29ydGVycygpKX1fX3VwZGF0ZVNvcnRPcmRlcnMoKXt0aGlzLl9zb3J0ZXJzLmZvckVhY2goKHIsbik9PnIuX29yZGVyPXRoaXMuX3NvcnRlcnMubGVuZ3RoPjE/bjpudWxsLHRoaXMpfV9fdXBkYXRlU29ydGVyKHIpe2lmKCEoIXIuZGlyZWN0aW9uJiZ0aGlzLl9zb3J0ZXJzLmluZGV4T2Yocik9PT0tMSkpe2lmKHIuX29yZGVyPW51bGwsdGhpcy5tdWx0aVNvcnQpdGhpcy5fcmVtb3ZlQXJyYXlJdGVtKHRoaXMuX3NvcnRlcnMsciksci5kaXJlY3Rpb24mJnRoaXMuX3NvcnRlcnMudW5zaGlmdChyKSx0aGlzLl9fdXBkYXRlU29ydE9yZGVycygpO2Vsc2UgaWYoci5kaXJlY3Rpb24pe2xldCBuPXRoaXMuX3NvcnRlcnMuZmlsdGVyKGk9PmkhPXIpO3RoaXMuX3NvcnRlcnM9W3JdLG4uZm9yRWFjaChpPT57aS5fb3JkZXI9bnVsbCxpLmRpcmVjdGlvbj1udWxsfSl9fX1fX2FwcGx5U29ydGVycygpe3RoaXMuZGF0YVByb3ZpZGVyJiZ0aGlzLmlzQXR0YWNoZWQmJkpTT04uc3RyaW5naWZ5KHRoaXMuX3ByZXZpb3VzU29ydGVycykhPT1KU09OLnN0cmluZ2lmeSh0aGlzLl9tYXBTb3J0ZXJzKCkpJiZ0aGlzLmNsZWFyQ2FjaGUoKSx0aGlzLl9hMTF5VXBkYXRlU29ydGVycygpLHRoaXMuX3ByZXZpb3VzU29ydGVycz10aGlzLl9tYXBTb3J0ZXJzKCl9X21hcFNvcnRlcnMoKXtyZXR1cm4gdGhpcy5fc29ydGVycy5tYXAocj0+KHtwYXRoOnIucGF0aCxkaXJlY3Rpb246ci5kaXJlY3Rpb259KSl9X3JlbW92ZUFycmF5SXRlbShyLG4pe2xldCBpPXIuaW5kZXhPZihuKTtpPi0xJiZyLnNwbGljZShpLDEpfX07dmFyIHJ1ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2NlbGxDbGFzc05hbWVHZW5lcmF0b3I6RnVuY3Rpb259fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfX2NlbGxDbGFzc05hbWVHZW5lcmF0b3JDaGFuZ2VkKGNlbGxDbGFzc05hbWVHZW5lcmF0b3IpIl19X19jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yQ2hhbmdlZCgpe3RoaXMuZ2VuZXJhdGVDZWxsQ2xhc3NOYW1lcygpfWdlbmVyYXRlQ2VsbENsYXNzTmFtZXMoKXtBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKHI9PiFyLmhpZGRlbikuZm9yRWFjaChyPT50aGlzLl9nZW5lcmF0ZUNlbGxDbGFzc05hbWVzKHIsdGhpcy5fX2dldFJvd01vZGVsKHIpKSl9X2dlbmVyYXRlQ2VsbENsYXNzTmFtZXMocixuKXtBcnJheS5mcm9tKHIuY2hpbGRyZW4pLmZvckVhY2goaT0+e2lmKGkuX19nZW5lcmF0ZWRDbGFzc2VzJiZpLl9fZ2VuZXJhdGVkQ2xhc3Nlcy5mb3JFYWNoKG89PmkuY2xhc3NMaXN0LnJlbW92ZShvKSksdGhpcy5jZWxsQ2xhc3NOYW1lR2VuZXJhdG9yKXtsZXQgbz10aGlzLmNlbGxDbGFzc05hbWVHZW5lcmF0b3IoaS5fY29sdW1uLG4pO2kuX19nZW5lcmF0ZWRDbGFzc2VzPW8mJm8uc3BsaXQoIiAiKS5maWx0ZXIoYT0+YS5sZW5ndGg+MCksaS5fX2dlbmVyYXRlZENsYXNzZXMmJmkuX19nZW5lcmF0ZWRDbGFzc2VzLmZvckVhY2goYT0+aS5jbGFzc0xpc3QuYWRkKGEpKX19KX19O3ZhciBFUD17QkVUV0VFTjoiYmV0d2VlbiIsT05fVE9QOiJvbi10b3AiLE9OX1RPUF9PUl9CRVRXRUVOOiJvbi10b3Atb3ItYmV0d2VlbiIsT05fR1JJRDoib24tZ3JpZCJ9LEMwPXtPTl9UT1A6Im9uLXRvcCIsQUJPVkU6ImFib3ZlIixCRUxPVzoiYmVsb3ciLEVNUFRZOiJlbXB0eSJ9LG51ZT1lPT5jbGFzcyBleHRlbmRzIGV7c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue2Ryb3BNb2RlOlN0cmluZyxyb3dzRHJhZ2dhYmxlOkJvb2xlYW4sZHJhZ0ZpbHRlcjpGdW5jdGlvbixkcm9wRmlsdGVyOkZ1bmN0aW9uLF9fZG5kQXV0b1Njcm9sbFRocmVzaG9sZDp7dmFsdWU6NTB9fX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX2RyYWdEcm9wQWNjZXNzQ2hhbmdlZChyb3dzRHJhZ2dhYmxlLCBkcm9wTW9kZSwgZHJhZ0ZpbHRlciwgZHJvcEZpbHRlcikiXX1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fb25EcmFnU3RhcnQuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdlbmQiLHRoaXMuX29uRHJhZ0VuZC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLHRoaXMuX29uRHJhZ092ZXIuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsdGhpcy5fb25EcmFnTGVhdmUuYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLHRoaXMuX29uRHJvcC5iaW5kKHRoaXMpKSx0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIixyPT57dGhpcy5kcm9wTW9kZSYmKHIucHJldmVudERlZmF1bHQoKSxyLnN0b3BQcm9wYWdhdGlvbigpKX0pfV9vbkRyYWdTdGFydChyKXtpZih0aGlzLnJvd3NEcmFnZ2FibGUpe2xldCBuPXIudGFyZ2V0O2lmKG4ubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNlbGwtY29udGVudCImJihuPW4uYXNzaWduZWRTbG90LnBhcmVudE5vZGUucGFyZW50Tm9kZSksbi5wYXJlbnROb2RlIT09dGhpcy4kLml0ZW1zKXJldHVybjtpZihyLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJhZ2dpbmctcm93cyIsITAsdGhpcyksdGhpcy5fc2FmYXJpKXtsZXQgcz1uLnN0eWxlLnRyYW5zZm9ybTtuLnN0eWxlLnRvcD0vdHJhbnNsYXRlWVwoKC4qKVwpLy5leGVjKHMpWzFdLG4uc3R5bGUudHJhbnNmb3JtPSJub25lIixyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntuLnN0eWxlLnRvcD0iIixuLnN0eWxlLnRyYW5zZm9ybT1zfSl9bGV0IGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9pb3M/ci5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKG4pOnIuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShuLHIuY2xpZW50WC1pLmxlZnQsci5jbGllbnRZLWkudG9wKTtsZXQgbz1bbl07dGhpcy5faXNTZWxlY3RlZChuLl9pdGVtKSYmKG89dGhpcy5fX2dldFZpZXdwb3J0Um93cygpLmZpbHRlcihzPT50aGlzLl9pc1NlbGVjdGVkKHMuX2l0ZW0pKS5maWx0ZXIocz0+IXRoaXMuZHJhZ0ZpbHRlcnx8dGhpcy5kcmFnRmlsdGVyKHRoaXMuX19nZXRSb3dNb2RlbChzKSkpKSxyLmRhdGFUcmFuc2Zlci5zZXREYXRhKCJ0ZXh0Iix0aGlzLl9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShvKSksbi5zZXRBdHRyaWJ1dGUoImRyYWdzdGFydCIsby5sZW5ndGg+MT9vLmxlbmd0aDoiIiksdGhpcy51cGRhdGVTdHlsZXMoeyItLV9ncmlkLWRyYWctc3RhcnQteCI6YCR7ci5jbGllbnRYLWkubGVmdCsyMH1weGAsIi0tX2dyaWQtZHJhZy1zdGFydC15IjpgJHtyLmNsaWVudFktaS50b3ArMTB9cHhgfSkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57bi5yZW1vdmVBdHRyaWJ1dGUoImRyYWdzdGFydCIpLHRoaXMudXBkYXRlU3R5bGVzKHsiLS1fZ3JpZC1kcmFnLXN0YXJ0LXgiOiIiLCItLV9ncmlkLWRyYWctc3RhcnQteSI6IiJ9KX0pO2xldCBhPW5ldyBDdXN0b21FdmVudCgiZ3JpZC1kcmFnc3RhcnQiLHtkZXRhaWw6e2RyYWdnZWRJdGVtczpvLm1hcChzPT5zLl9pdGVtKSxzZXREcmFnRGF0YToocyxsKT0+ci5kYXRhVHJhbnNmZXIuc2V0RGF0YShzLGwpLHNldERyYWdnZWRJdGVtc0NvdW50OnM9Pm4uc2V0QXR0cmlidXRlKCJkcmFnc3RhcnQiLHMpfX0pO2Eub3JpZ2luYWxFdmVudD1yLHRoaXMuZGlzcGF0Y2hFdmVudChhKX19X29uRHJhZ0VuZChyKXt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRyYWdnaW5nLXJvd3MiLCExLHRoaXMpLHIuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IG49bmV3IEN1c3RvbUV2ZW50KCJncmlkLWRyYWdlbmQiKTtuLm9yaWdpbmFsRXZlbnQ9cix0aGlzLmRpc3BhdGNoRXZlbnQobil9X29uRHJhZ0xlYXZlKHIpe3Iuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9X29uRHJhZ092ZXIocil7aWYodGhpcy5kcm9wTW9kZSl7aWYodGhpcy5fZHJvcExvY2F0aW9uPXZvaWQgMCx0aGlzLl9kcmFnT3Zlckl0ZW09dm9pZCAwLHRoaXMuX19kbmRBdXRvU2Nyb2xsKHIuY2xpZW50WSkpe3RoaXMuX2NsZWFyRHJhZ1N0eWxlcygpO3JldHVybn1sZXQgbj1yLmNvbXBvc2VkUGF0aCgpLmZpbHRlcihpPT5pLmxvY2FsTmFtZT09PSJ0ciIpWzBdO2lmKCF0aGlzLl9lZmZlY3RpdmVTaXplfHx0aGlzLmRyb3BNb2RlPT09RVAuT05fR1JJRCl0aGlzLl9kcm9wTG9jYXRpb249QzAuRU1QVFk7ZWxzZSBpZighbnx8bi5wYXJlbnROb2RlIT09dGhpcy4kLml0ZW1zKXtpZihuKXJldHVybjtpZih0aGlzLmRyb3BNb2RlPT09RVAuQkVUV0VFTnx8dGhpcy5kcm9wTW9kZT09PUVQLk9OX1RPUF9PUl9CRVRXRUVOKW49QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT4haS5oaWRkZW4pLnBvcCgpLHRoaXMuX2Ryb3BMb2NhdGlvbj1DMC5CRUxPVztlbHNlIHJldHVybn1lbHNle2xldCBpPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodGhpcy5fZHJvcExvY2F0aW9uPUMwLk9OX1RPUCx0aGlzLmRyb3BNb2RlPT09RVAuQkVUV0VFTil7bGV0IG89ci5jbGllbnRZLWkudG9wPGkuYm90dG9tLXIuY2xpZW50WTt0aGlzLl9kcm9wTG9jYXRpb249bz9DMC5BQk9WRTpDMC5CRUxPV31lbHNlIHRoaXMuZHJvcE1vZGU9PT1FUC5PTl9UT1BfT1JfQkVUV0VFTiYmKHIuY2xpZW50WS1pLnRvcDxpLmhlaWdodC8zP3RoaXMuX2Ryb3BMb2NhdGlvbj1DMC5BQk9WRTpyLmNsaWVudFktaS50b3A+aS5oZWlnaHQvMyoyJiYodGhpcy5fZHJvcExvY2F0aW9uPUMwLkJFTE9XKSl9aWYobiYmbi5oYXNBdHRyaWJ1dGUoImRyb3AtZGlzYWJsZWQiKSl7dGhpcy5fZHJvcExvY2F0aW9uPXZvaWQgMDtyZXR1cm59ci5zdG9wUHJvcGFnYXRpb24oKSxyLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZHJvcExvY2F0aW9uPT09QzAuRU1QVFk/dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnb3ZlciIsITAsdGhpcyk6bj8odGhpcy5fZHJhZ092ZXJJdGVtPW4uX2l0ZW0sbi5nZXRBdHRyaWJ1dGUoImRyYWdvdmVyIikhPT10aGlzLl9kcm9wTG9jYXRpb24mJm4uc2V0QXR0cmlidXRlKCJkcmFnb3ZlciIsdGhpcy5fZHJvcExvY2F0aW9uKSk6dGhpcy5fY2xlYXJEcmFnU3R5bGVzKCl9fV9fZG5kQXV0b1Njcm9sbChyKXtpZih0aGlzLl9fZG5kQXV0b1Njcm9sbGluZylyZXR1cm4hMDtsZXQgbj10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSxpPXRoaXMuJC5mb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLG89bi1yK3RoaXMuX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkLGE9ci1pK3RoaXMuX19kbmRBdXRvU2Nyb2xsVGhyZXNob2xkLHM9MDtpZihhPjA/cz1hKjI6bz4wJiYocz0tbyoyKSxzKXtsZXQgbD10aGlzLiQudGFibGUuc2Nyb2xsVG9wO2lmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3ArPXMsbCE9PXRoaXMuJC50YWJsZS5zY3JvbGxUb3ApcmV0dXJuIHRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSEwLHNldFRpbWVvdXQoKCk9PnRoaXMuX19kbmRBdXRvU2Nyb2xsaW5nPSExLDIwKSx0aGlzLl9zY3JvbGxIYW5kbGVyKCksITB9fV9fZ2V0Vmlld3BvcnRSb3dzKCl7bGV0IHI9dGhpcy4kLmhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20sbj10aGlzLiQuZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihpPT57bGV0IG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gby5ib3R0b20+ciYmby50b3A8bn0pfV9jbGVhckRyYWdTdHlsZXMoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ292ZXIiKSxBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT5yLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ292ZXIiKSl9X29uRHJvcChyKXtpZih0aGlzLmRyb3BNb2RlKXtyLnN0b3BQcm9wYWdhdGlvbigpLHIucHJldmVudERlZmF1bHQoKTtsZXQgbj1yLmRhdGFUcmFuc2Zlci50eXBlcyYmQXJyYXkuZnJvbShyLmRhdGFUcmFuc2Zlci50eXBlcykubWFwKG89Pih7dHlwZTpvLGRhdGE6ci5kYXRhVHJhbnNmZXIuZ2V0RGF0YShvKX0pKTt0aGlzLl9jbGVhckRyYWdTdHlsZXMoKTtsZXQgaT1uZXcgQ3VzdG9tRXZlbnQoImdyaWQtZHJvcCIse2J1YmJsZXM6ci5idWJibGVzLGNhbmNlbGFibGU6ci5jYW5jZWxhYmxlLGRldGFpbDp7ZHJvcFRhcmdldEl0ZW06dGhpcy5fZHJhZ092ZXJJdGVtLGRyb3BMb2NhdGlvbjp0aGlzLl9kcm9wTG9jYXRpb24sZHJhZ0RhdGE6bn19KTtpLm9yaWdpbmFsRXZlbnQ9cix0aGlzLmRpc3BhdGNoRXZlbnQoaSl9fV9fZm9ybWF0RGVmYXVsdFRyYW5zZmVyRGF0YShyKXtyZXR1cm4gci5tYXAobj0+QXJyYXkuZnJvbShuLmNoaWxkcmVuKS5maWx0ZXIoaT0+IWkuaGlkZGVuJiZpLmdldEF0dHJpYnV0ZSgicGFydCIpLmluZGV4T2YoImRldGFpbHMtY2VsbCIpPT09LTEpLnNvcnQoKGksbyk9PmkuX2NvbHVtbi5fb3JkZXI+by5fY29sdW1uLl9vcmRlcj8xOi0xKS5tYXAoaT0+aS5fY29udGVudC50ZXh0Q29udGVudC50cmltKCkpLmZpbHRlcihpPT5pKS5qb2luKCIJIikpLmpvaW4oYApgKX1fZHJhZ0Ryb3BBY2Nlc3NDaGFuZ2VkKCl7dGhpcy5maWx0ZXJEcmFnQW5kRHJvcCgpfWZpbHRlckRyYWdBbmREcm9wKCl7QXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pLmZvckVhY2gocj0+e3RoaXMuX2ZpbHRlckRyYWdBbmREcm9wKHIsdGhpcy5fX2dldFJvd01vZGVsKHIpKX0pfV9maWx0ZXJEcmFnQW5kRHJvcChyLG4pe2xldCBpPSF0aGlzLnJvd3NEcmFnZ2FibGV8fHRoaXMuZHJhZ0ZpbHRlciYmIXRoaXMuZHJhZ0ZpbHRlcihuKSxvPSF0aGlzLmRyb3BNb2RlfHx0aGlzLmRyb3BGaWx0ZXImJiF0aGlzLmRyb3BGaWx0ZXIobik7QXJyYXkuZnJvbShyLmNoaWxkcmVuKS5tYXAocz0+cy5fY29udGVudCkuZm9yRWFjaChzPT57aT9zLnJlbW92ZUF0dHJpYnV0ZSgiZHJhZ2dhYmxlIik6cy5zZXRBdHRyaWJ1dGUoImRyYWdnYWJsZSIsITApfSksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJkcmFnLWRpc2FibGVkIixpLHIpLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgiZHJvcC1kaXNhYmxlZCIsbyxyKX19O3ZhciBpdWU9ZT0+Y2xhc3MgZXh0ZW5kcyBle3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntfaGVhZGVyRm9jdXNhYmxlOnt0eXBlOk9iamVjdCxvYnNlcnZlcjoiX2ZvY3VzYWJsZUNoYW5nZWQifSxfaXRlbXNGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9mb290ZXJGb2N1c2FibGU6e3R5cGU6T2JqZWN0LG9ic2VydmVyOiJfZm9jdXNhYmxlQ2hhbmdlZCJ9LF9uYXZpZ2F0aW5nSXNIaWRkZW46Qm9vbGVhbixfZm9jdXNlZEl0ZW1JbmRleDp7dHlwZTpOdW1iZXIsdmFsdWU6MH0sX2ZvY3VzZWRDb2x1bW5PcmRlcjpOdW1iZXIsaW50ZXJhY3Rpbmc6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMSxyZWZsZWN0VG9BdHRyaWJ1dGU6ITAscmVhZE9ubHk6ITAsb2JzZXJ2ZXI6Il9pbnRlcmFjdGluZ0NoYW5nZWQifX19cmVhZHkoKXtzdXBlci5yZWFkeSgpLCEodGhpcy5faW9zfHx0aGlzLl9hbmRyb2lkKSYmKHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fb25LZXlEb3duKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLl9vbktleVVwKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uRm9jdXNJbiksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJmb2N1c291dCIsdGhpcy5fb25Gb2N1c091dCksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHRoaXMuX29uQ2VsbEZvY3VzSW4uYmluZCh0aGlzKSksdGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0Iix0aGlzLl9vbkNlbGxGb2N1c091dC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9Pnt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpLHRoaXMuX2lzTW91c2Vkb3duPSEwfSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+dGhpcy5faXNNb3VzZWRvd249ITEpKX1fZm9jdXNhYmxlQ2hhbmdlZChyLG4pe24mJm4uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksciYmdGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldChyKX1faW50ZXJhY3RpbmdDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlR3JpZFNlY3Rpb25Gb2N1c1RhcmdldCh0aGlzLl9oZWFkZXJGb2N1c2FibGUpLHRoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodGhpcy5faXRlbXNGb2N1c2FibGUpLHRoaXMuX3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQodGhpcy5fZm9vdGVyRm9jdXNhYmxlKX1fb25LZXlEb3duKHIpe2xldCBuPXIua2V5LGk7c3dpdGNoKG4pe2Nhc2UiQXJyb3dVcCI6Y2FzZSJBcnJvd0Rvd24iOmNhc2UiQXJyb3dMZWZ0IjpjYXNlIkFycm93UmlnaHQiOmNhc2UiUGFnZVVwIjpjYXNlIlBhZ2VEb3duIjpjYXNlIkhvbWUiOmNhc2UiRW5kIjppPSJOYXZpZ2F0aW9uIjticmVhaztjYXNlIkVudGVyIjpjYXNlIkVzY2FwZSI6Y2FzZSJGMiI6aT0iSW50ZXJhY3Rpb24iO2JyZWFrO2Nhc2UiVGFiIjppPSJUYWIiO2JyZWFrO2Nhc2UiICI6aT0iU3BhY2UiO2JyZWFrfXRoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpLHRoaXMuaW50ZXJhY3RpbmcmJmkhPT0iSW50ZXJhY3Rpb24iJiYoaT12b2lkIDApLGkmJnRoaXNbYF9vbiR7aX1LZXlEb3duYF0ocixuKX1fZW5zdXJlU2Nyb2xsZWRUb0luZGV4KHIpe0FycmF5LmZyb20odGhpcy4kLml0ZW1zLmNoaWxkcmVuKS5maWx0ZXIoaT0+aS5pbmRleD09PXIpWzBdfHx0aGlzLl9zY3JvbGxUb0luZGV4KHIpfV9vbk5hdmlnYXRpb25LZXlEb3duKHIsbil7dGhpcy5fc2Nyb2xsSGFuZGxlcigpLHIucHJldmVudERlZmF1bHQoKTtmdW5jdGlvbiBpKEIpe3JldHVybiBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKEIucGFyZW50Tm9kZS5jaGlsZHJlbixCKX1sZXQgbz10aGlzLl9sYXN0VmlzaWJsZUluZGV4LXRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4LTEsYT0wLHM9MDtzd2l0Y2gobil7Y2FzZSJBcnJvd1JpZ2h0IjphPXRoaXMuX19pc1JUTD8tMToxO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjphPXRoaXMuX19pc1JUTD8xOi0xO2JyZWFrO2Nhc2UiSG9tZSI6YT0tMS8wLHIuY3RybEtleSYmKHM9LTEvMCk7YnJlYWs7Y2FzZSJFbmQiOmE9MS8wLHIuY3RybEtleSYmKHM9MS8wKTticmVhaztjYXNlIkFycm93RG93biI6cz0xO2JyZWFrO2Nhc2UiQXJyb3dVcCI6cz0tMTticmVhaztjYXNlIlBhZ2VEb3duIjpzPW87YnJlYWs7Y2FzZSJQYWdlVXAiOnM9LW87YnJlYWt9bGV0IGw9ci5jb21wb3NlZFBhdGgoKVswXSxjPWkobCksdT10aGlzLl9lbGVtZW50TWF0Y2hlcyhsLCdbcGFydH49ImRldGFpbHMtY2VsbCJdJyksaD1sLnBhcmVudE5vZGUsZj1oLnBhcmVudE5vZGUscD0oZj09PXRoaXMuJC5pdGVtcz90aGlzLl9lZmZlY3RpdmVTaXplOmYuY2hpbGRyZW4ubGVuZ3RoKS0xLGQ9Zj09PXRoaXMuJC5pdGVtcz90aGlzLl9mb2N1c2VkSXRlbUluZGV4IT09dm9pZCAwP3RoaXMuX2ZvY3VzZWRJdGVtSW5kZXg6aC5pbmRleDppKGgpLGc9TWF0aC5tYXgoMCxNYXRoLm1pbihkK3MscCkpLF89ITE7aWYoZj09PXRoaXMuJC5pdGVtcyl7bGV0IEI9aC5faXRlbSxJPXRoaXMuX2NhY2hlLmdldEl0ZW1Gb3JJbmRleChnKTt1P189cz09PTA6Xz1zPT09MSYmdGhpcy5faXNEZXRhaWxzT3BlbmVkKEIpfHxzPT09LTEmJmchPT1kJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQoSSksXyE9PXUmJihzPT09MSYmX3x8cz09PS0xJiYhXykmJihnPWQpfWlmKGYhPT10aGlzLiQuaXRlbXMpe2lmKGc+ZClmb3IoO2c8cCYmZi5jaGlsZHJlbltnXS5oaWRkZW47KWcrKztlbHNlIGlmKGc8ZClmb3IoO2c+MCYmZi5jaGlsZHJlbltnXS5oaWRkZW47KWctLX10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXI9PT12b2lkIDAmJih1P3RoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj0wOnRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj10aGlzLl9nZXRDb2x1bW5zKGYsZCkuZmlsdGVyKEI9PiFCLmhpZGRlbilbY10uX29yZGVyKTtsZXQgeT10aGlzLl9nZXRDb2x1bW5zKGYsZykuZmlsdGVyKEI9PiFCLmhpZGRlbikseD15Lm1hcChCPT5CLl9vcmRlcikuc29ydCgoQixJKT0+Qi1JKSxiPXgubGVuZ3RoLTEsUz14LmluZGV4T2YoeC5zbGljZSgwKS5zb3J0KChCLEkpPT5NYXRoLmFicyhCLXRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlciktTWF0aC5hYnMoSS10aGlzLl9mb2N1c2VkQ29sdW1uT3JkZXIpKVswXSksQz1zPT09MCYmdT9TOk1hdGgubWF4KDAsTWF0aC5taW4oUythLGIpKTtDIT09UyYmKHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj12b2lkIDApLGY9PT10aGlzLiQuaXRlbXMmJnRoaXMuX2Vuc3VyZVNjcm9sbGVkVG9JbmRleChnKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpO2xldCBrPXkucmVkdWNlKChCLEksTCk9PihCW0kuX29yZGVyXT1MLEIpLHt9KVt4W0NdXSxPPWY9PT10aGlzLiQuaXRlbXM/QXJyYXkuZnJvbShmLmNoaWxkcmVuKS5maWx0ZXIoQj0+Qi5pbmRleD09PWcpWzBdOmYuY2hpbGRyZW5bZ107aWYoIU8pcmV0dXJuO2xldCBEPV8/QXJyYXkuZnJvbShPLmNoaWxkcmVuKS5maWx0ZXIoQj0+dGhpcy5fZWxlbWVudE1hdGNoZXMoQiwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKVswXTpPLmNoaWxkcmVuW2tdO2lmKHRoaXMuX3Njcm9sbEhvcml6b250YWxseVRvQ2VsbChEKSxmPT09dGhpcy4kLml0ZW1zJiYodGhpcy5fZm9jdXNlZEl0ZW1JbmRleD1nKSxmPT09dGhpcy4kLml0ZW1zKXtsZXQgQj1ELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEk9dGhpcy4kLmZvb3Rlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AsTD10aGlzLiQuaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbTtCLmJvdHRvbT5JPyh0aGlzLiQudGFibGUuc2Nyb2xsVG9wKz1CLmJvdHRvbS1JLHRoaXMuX3Njcm9sbEhhbmRsZXIoKSk6Qi50b3A8TCYmKHRoaXMuJC50YWJsZS5zY3JvbGxUb3AtPUwtQi50b3AsdGhpcy5fc2Nyb2xsSGFuZGxlcigpKX1ELmZvY3VzKCl9X29uSW50ZXJhY3Rpb25LZXlEb3duKHIsbil7bGV0IGk9ci5jb21wb3NlZFBhdGgoKVswXSxvPWkubG9jYWxOYW1lPT09ImlucHV0IiYmIS9eKGJ1dHRvbnxjaGVja2JveHxjb2xvcnxmaWxlfGltYWdlfHJhZGlvfHJhbmdlfHJlc2V0fHN1Ym1pdCkkL2kudGVzdChpLnR5cGUpLGE7c3dpdGNoKG4pe2Nhc2UiRW50ZXIiOmE9dGhpcy5pbnRlcmFjdGluZz8hbzohMDticmVhaztjYXNlIkVzY2FwZSI6YT0hMTticmVhaztjYXNlIkYyIjphPSF0aGlzLmludGVyYWN0aW5nO2JyZWFrfWxldHtjZWxsOnN9PXRoaXMuX2dldEdyaWRFdmVudExvY2F0aW9uKHIpO2lmKHRoaXMuaW50ZXJhY3RpbmchPT1hJiZzIT09bnVsbClpZihhKXtsZXQgbD1zLl9jb250ZW50LnF1ZXJ5U2VsZWN0b3IoIltmb2N1cy10YXJnZXRdIil8fHMuX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7bCYmKHIucHJldmVudERlZmF1bHQoKSxsLmZvY3VzKCksdGhpcy5fc2V0SW50ZXJhY3RpbmcoITApLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcykpfWVsc2Ugci5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRDb2x1bW5PcmRlcj12b2lkIDAscy5mb2N1cygpLHRoaXMuX3NldEludGVyYWN0aW5nKCExKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHIsbil7bGV0IGk9W3RoaXMuJC50YWJsZSx0aGlzLl9oZWFkZXJGb2N1c2FibGUsdGhpcy5faXRlbXNGb2N1c2FibGUsdGhpcy5fZm9vdGVyRm9jdXNhYmxlLHRoaXMuJC5mb2N1c2V4aXRdLG89aS5pbmRleE9mKHIpO2ZvcihvKz1uO28+PTAmJm88PWkubGVuZ3RoLTEmJighaVtvXXx8aVtvXS5wYXJlbnROb2RlLmhpZGRlbik7KW8rPW47cmV0dXJuIGlbb119X29uVGFiS2V5RG93bihyKXtsZXQgbj10aGlzLl9wcmVkaWN0Rm9jdXNTdGVwVGFyZ2V0KHIuY29tcG9zZWRQYXRoKClbMF0sci5zaGlmdEtleT8tMToxKTtpZihuPT09dGhpcy4kLnRhYmxlKXRoaXMuJC50YWJsZS5mb2N1cygpO2Vsc2UgaWYobj09PXRoaXMuJC5mb2N1c2V4aXQpdGhpcy4kLmZvY3VzZXhpdC5mb2N1cygpO2Vsc2UgaWYobj09PXRoaXMuX2l0ZW1zRm9jdXNhYmxlKXtsZXQgaT1uLG89dGhpcy5faXRlbXNGb2N1c2FibGUucGFyZW50Tm9kZTtpZih0aGlzLl9lbnN1cmVTY3JvbGxlZFRvSW5kZXgodGhpcy5fZm9jdXNlZEl0ZW1JbmRleCksby5pbmRleCE9PXRoaXMuX2ZvY3VzZWRJdGVtSW5kZXgpe2xldCBhPUFycmF5LmZyb20oby5jaGlsZHJlbikuaW5kZXhPZih0aGlzLl9pdGVtc0ZvY3VzYWJsZSkscz1BcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZmlsdGVyKGw9PmwuaW5kZXg9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4KVswXTtzJiYoaT1zLmNoaWxkcmVuW2FdKX1yLnByZXZlbnREZWZhdWx0KCksaS5mb2N1cygpfWVsc2Ugci5wcmV2ZW50RGVmYXVsdCgpLG4uZm9jdXMoKTt0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCEwLHRoaXMpfV9vblNwYWNlS2V5RG93bihyKXtyLnByZXZlbnREZWZhdWx0KCk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTsoIW4uX2NvbnRlbnR8fCFuLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSYmdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY2VsbC1hY3RpdmF0ZSIse2RldGFpbDp7bW9kZWw6dGhpcy5fX2dldFJvd01vZGVsKG4ucGFyZW50RWxlbWVudCl9fSkpfV9vbktleVVwKHIpe2lmKCEvXiggfFNwYWNlQmFyKSQvLnRlc3Qoci5rZXkpKXJldHVybjtyLnByZXZlbnREZWZhdWx0KCk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTtpZihuLl9jb250ZW50JiZuLl9jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKXtsZXQgaT10aGlzLmhhc0F0dHJpYnV0ZSgibmF2aWdhdGluZyIpO24uX2NvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQuY2xpY2soKSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLGksdGhpcyl9fV9vbkZvY3VzSW4ocil7dGhpcy5faXNNb3VzZWRvd258fHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcyk7bGV0IG49ci5jb21wb3NlZFBhdGgoKVswXTtuPT09dGhpcy4kLnRhYmxlfHxuPT09dGhpcy4kLmZvY3VzZXhpdD8odGhpcy5fcHJlZGljdEZvY3VzU3RlcFRhcmdldChuLG49PT10aGlzLiQudGFibGU/MTotMSkuZm9jdXMoKSx0aGlzLl9zZXRJbnRlcmFjdGluZyghMSkpOnRoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpfV9vbkZvY3VzT3V0KHIpe3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITEsdGhpcyksdGhpcy5fZGV0ZWN0SW50ZXJhY3Rpbmcocil9X29uQ2VsbEZvY3VzSW4ocil7bGV0e3NlY3Rpb246bixjZWxsOml9PXRoaXMuX2dldEdyaWRFdmVudExvY2F0aW9uKHIpO3RoaXMuX2RldGVjdEludGVyYWN0aW5nKHIpLG4mJmkmJih0aGlzLl9hY3RpdmVSb3dHcm91cD1uLHRoaXMuJC5oZWFkZXI9PT1uP3RoaXMuX2hlYWRlckZvY3VzYWJsZT1pOnRoaXMuJC5pdGVtcz09PW4/dGhpcy5faXRlbXNGb2N1c2FibGU9aTp0aGlzLiQuZm9vdGVyPT09biYmKHRoaXMuX2Zvb3RlckZvY3VzYWJsZT1pKSxpLl9jb250ZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjZWxsLWZvY3VzaW4iLHtidWJibGVzOiExfSkpLGkuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXMiLHtidWJibGVzOiEwLGNvbXBvc2VkOiEwfSkpKSx0aGlzLl9kZXRlY3RGb2N1c2VkSXRlbUluZGV4KHIpfV9vbkNlbGxGb2N1c091dChyKXtyLmNvbXBvc2VkUGF0aCgpLmluZGV4T2YodGhpcy4kLnRhYmxlKT09PTMmJnIuY29tcG9zZWRQYXRoKClbMF0uX2NvbnRlbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNlbGwtZm9jdXNvdXQiLHtidWJibGVzOiExfSkpfV9kZXRlY3RJbnRlcmFjdGluZyhyKXtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpLnNvbWUoaT0+aS5sb2NhbE5hbWU9PT0idmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7dGhpcy5fc2V0SW50ZXJhY3Rpbmcobil9X2RldGVjdEZvY3VzZWRJdGVtSW5kZXgocil7bGV0e3NlY3Rpb246bixyb3c6aX09dGhpcy5fZ2V0R3JpZEV2ZW50TG9jYXRpb24ocik7bj09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX2ZvY3VzZWRJdGVtSW5kZXg9aS5pbmRleCl9X3VwZGF0ZUdyaWRTZWN0aW9uRm9jdXNUYXJnZXQocil7aWYoIXIpcmV0dXJuO2xldCBuPXRoaXMuX2dldEdyaWRTZWN0aW9uRnJvbUZvY3VzVGFyZ2V0KHIpLGk9dGhpcy5pbnRlcmFjdGluZyYmbj09PXRoaXMuX2FjdGl2ZVJvd0dyb3VwO3IudGFiSW5kZXg9aT8tMTowfV9wcmV2ZW50U2Nyb2xsZXJSb3RhdGluZ0NlbGxGb2N1cyhyLG4pe3IuaW5kZXg9PT10aGlzLl9mb2N1c2VkSXRlbUluZGV4JiZ0aGlzLmhhc0F0dHJpYnV0ZSgibmF2aWdhdGluZyIpJiZ0aGlzLl9hY3RpdmVSb3dHcm91cD09PXRoaXMuJC5pdGVtcyYmKHRoaXMuX25hdmlnYXRpbmdJc0hpZGRlbj0hMCx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm5hdmlnYXRpbmciLCExLHRoaXMpKSxuPT09dGhpcy5fZm9jdXNlZEl0ZW1JbmRleCYmdGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuJiYodGhpcy5fbmF2aWdhdGluZ0lzSGlkZGVuPSExLHRoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgibmF2aWdhdGluZyIsITAsdGhpcykpfV9nZXRDb2x1bW5zKHIsbil7bGV0IGk9dGhpcy5fY29sdW1uVHJlZS5sZW5ndGgtMTtyZXR1cm4gcj09PXRoaXMuJC5oZWFkZXI/aT1uOnI9PT10aGlzLiQuZm9vdGVyJiYoaT10aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xLW4pLHRoaXMuX2NvbHVtblRyZWVbaV19X3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCl7aWYodGhpcy4kLmhlYWRlci5maXJzdEVsZW1lbnRDaGlsZCYmKHRoaXMuX2hlYWRlckZvY3VzYWJsZT1BcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQuY2hpbGRyZW4pLmZpbHRlcihyPT4hci5oaWRkZW4pWzBdKSx0aGlzLiQuaXRlbXMuZmlyc3RFbGVtZW50Q2hpbGQpe2xldCByPXRoaXMuX2l0ZXJhdGVJdGVtcygobixpKT0+e2lmKHRoaXMuX2ZpcnN0VmlzaWJsZUluZGV4PT09aSlyZXR1cm4gdGhpcy4kLml0ZW1zLmNoaWxkcmVuW25dfSk7ciYmKHRoaXMuX2l0ZW1zRm9jdXNhYmxlPUFycmF5LmZyb20oci5jaGlsZHJlbikuZmlsdGVyKG49PiFuLmhpZGRlbilbMF0pfXRoaXMuJC5mb290ZXIuZmlyc3RFbGVtZW50Q2hpbGQmJih0aGlzLl9mb290ZXJGb2N1c2FibGU9QXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmZpcnN0RWxlbWVudENoaWxkLmNoaWxkcmVuKS5maWx0ZXIocj0+IXIuaGlkZGVuKVswXSl9X3Njcm9sbEhvcml6b250YWxseVRvQ2VsbChyKXtpZihyLmhhc0F0dHJpYnV0ZSgiZnJvemVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHIsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSlyZXR1cm47bGV0IG49ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXIucGFyZW50Tm9kZSxvPUFycmF5LmZyb20oaS5jaGlsZHJlbikuaW5kZXhPZihyKSxhPXRoaXMuJC50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPWEubGVmdCxsPWEucmlnaHQ7Zm9yKGxldCBjPW8tMTtjPj0wO2MtLSl7bGV0IHU9aS5jaGlsZHJlbltjXTtpZighKHUuaGFzQXR0cmlidXRlKCJoaWRkZW4iKXx8dGhpcy5fZWxlbWVudE1hdGNoZXModSwnW3BhcnR+PSJkZXRhaWxzLWNlbGwiXScpKSYmdS5oYXNBdHRyaWJ1dGUoImZyb3plbiIpKXtzPXUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQ7YnJlYWt9fWZvcihsZXQgYz1vKzE7YzxpLmNoaWxkcmVuLmxlbmd0aDtjKyspe2xldCB1PWkuY2hpbGRyZW5bY107aWYoISh1Lmhhc0F0dHJpYnV0ZSgiaGlkZGVuIil8fHRoaXMuX2VsZW1lbnRNYXRjaGVzKHUsJ1twYXJ0fj0iZGV0YWlscy1jZWxsIl0nKSkmJnUuaGFzQXR0cmlidXRlKCJmcm96ZW4iKSl7bD11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7YnJlYWt9fW4ubGVmdDxzJiYodGhpcy4kLnRhYmxlLnNjcm9sbExlZnQrPU1hdGgucm91bmQobi5sZWZ0LXMpKSxuLnJpZ2h0PmwmJih0aGlzLiQudGFibGUuc2Nyb2xsTGVmdCs9TWF0aC5yb3VuZChuLnJpZ2h0LWwpKX1fZWxlbWVudE1hdGNoZXMocixuKXtyZXR1cm4gci5tYXRjaGVzP3IubWF0Y2hlcyhuKTpBcnJheS5mcm9tKHIucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKG4pKS5pbmRleE9mKHIpIT09LTF9X2dldEdyaWRFdmVudExvY2F0aW9uKHIpe2xldCBuPXIuY29tcG9zZWRQYXRoKCksaT1uLmluZGV4T2YodGhpcy4kLnRhYmxlKSxvPWk+PTE/bltpLTFdOm51bGwsYT1pPj0yP25baS0yXTpudWxsLHM9aT49Mz9uW2ktM106bnVsbDtyZXR1cm57c2VjdGlvbjpvLHJvdzphLGNlbGw6c319X2dldEdyaWRTZWN0aW9uRnJvbUZvY3VzVGFyZ2V0KHIpe3JldHVybiByPT09dGhpcy5faGVhZGVyRm9jdXNhYmxlP3RoaXMuJC5oZWFkZXI6cj09PXRoaXMuX2l0ZW1zRm9jdXNhYmxlP3RoaXMuJC5pdGVtczpyPT09dGhpcy5fZm9vdGVyRm9jdXNhYmxlP3RoaXMuJC5mb290ZXI6bnVsbH19O2Z1bmN0aW9uIG91ZShlLHQscil7bGV0IG49MTtlLmZvckVhY2goaT0+e24lMTA9PT0wJiZuKyssaS5fb3JkZXI9cituKnQsbisrfSl9dmFyIGF1ZT1lPT5jbGFzcyBleHRlbmRzIHloKGUpe3N0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybntjb2x1bW5SZW9yZGVyaW5nQWxsb3dlZDp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxfb3JkZXJCYXNlU2NvcGU6e3R5cGU6TnVtYmVyLHZhbHVlOjFlN319fXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfdXBkYXRlT3JkZXJzKF9jb2x1bW5UcmVlLCBfY29sdW1uVHJlZS4qKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSxFbSh0aGlzLCJ0cmFjayIsdGhpcy5fb25UcmFja0V2ZW50KSx0aGlzLl9yZW9yZGVyR2hvc3Q9dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0PSJyZW9yZGVyLWdob3N0Il0nKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hTdGFydC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fb25Ub3VjaE1vdmUuYmluZCh0aGlzKSksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fb25Ub3VjaEVuZC5iaW5kKHRoaXMpKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51Iix0aGlzLl9vbkNvbnRleHRNZW51LmJpbmQodGhpcykpfV9vbkNvbnRleHRNZW51KHIpe3RoaXMuaGFzQXR0cmlidXRlKCJyZW9yZGVyaW5nIikmJnIucHJldmVudERlZmF1bHQoKX1fb25Ub3VjaFN0YXJ0KHIpe3RoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fb25UcmFja1N0YXJ0KHtkZXRhaWw6e3g6ci50b3VjaGVzWzBdLmNsaWVudFgseTpyLnRvdWNoZXNbMF0uY2xpZW50WX19KX0sMTAwKX1fb25Ub3VjaE1vdmUocil7dGhpcy5fZHJhZ2dlZENvbHVtbiYmci5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLl9zdGFydFRvdWNoUmVvcmRlclRpbWVvdXQpfV9vblRvdWNoRW5kKCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3N0YXJ0VG91Y2hSZW9yZGVyVGltZW91dCksdGhpcy5fb25UcmFja0VuZCgpfV9vblRyYWNrRXZlbnQocil7aWYoci5kZXRhaWwuc3RhdGU9PT0ic3RhcnQiKXtsZXQgbj1yLmNvbXBvc2VkUGF0aCgpLGk9bltuLmluZGV4T2YodGhpcy4kLmhlYWRlciktMl07aWYoIWl8fCFpLl9jb250ZW50fHxpLl9jb250ZW50LmNvbnRhaW5zKHRoaXMuZ2V0Um9vdE5vZGUoKS5hY3RpdmVFbGVtZW50KXx8dGhpcy4kLnNjcm9sbGVyLmhhc0F0dHJpYnV0ZSgiY29sdW1uLXJlc2l6aW5nIikpcmV0dXJuO3RoaXMuX3RvdWNoRGV2aWNlfHx0aGlzLl9vblRyYWNrU3RhcnQocil9ZWxzZSByLmRldGFpbC5zdGF0ZT09PSJ0cmFjayI/dGhpcy5fb25UcmFjayhyKTpyLmRldGFpbC5zdGF0ZT09PSJlbmQiJiZ0aGlzLl9vblRyYWNrRW5kKHIpfV9vblRyYWNrU3RhcnQocil7aWYoIXRoaXMuY29sdW1uUmVvcmRlcmluZ0FsbG93ZWQpcmV0dXJuO2xldCBuPXIuY29tcG9zZWRQYXRoJiZyLmNvbXBvc2VkUGF0aCgpO2lmKG4mJm4uZmlsdGVyKG89Pm8uaGFzQXR0cmlidXRlJiZvLmhhc0F0dHJpYnV0ZSgiZHJhZ2dhYmxlIikpWzBdKXJldHVybjtsZXQgaT10aGlzLl9jZWxsRnJvbVBvaW50KHIuZGV0YWlsLngsci5kZXRhaWwueSk7aWYoISghaXx8aS5nZXRBdHRyaWJ1dGUoInBhcnQiKS5pbmRleE9mKCJoZWFkZXItY2VsbCIpPT09LTEpKXtmb3IodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJyZW9yZGVyaW5nIiwhMCx0aGlzKSx0aGlzLl9kcmFnZ2VkQ29sdW1uPWkuX2NvbHVtbjt0aGlzLl9kcmFnZ2VkQ29sdW1uLnBhcmVudEVsZW1lbnQuY2hpbGRFbGVtZW50Q291bnQ9PT0xOyl0aGlzLl9kcmFnZ2VkQ29sdW1uPXRoaXMuX2RyYWdnZWRDb2x1bW4ucGFyZW50RWxlbWVudDt0aGlzLl9zZXRTaWJsaW5nc1Jlb3JkZXJTdGF0dXModGhpcy5fZHJhZ2dlZENvbHVtbiwiYWxsb3dlZCIpLHRoaXMuX2RyYWdnZWRDb2x1bW4uX3Jlb3JkZXJTdGF0dXM9ImRyYWdnaW5nIix0aGlzLl91cGRhdGVHaG9zdChpKSx0aGlzLl9yZW9yZGVyR2hvc3Quc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIsdGhpcy5fdXBkYXRlR2hvc3RQb3NpdGlvbihyLmRldGFpbC54LHRoaXMuX3RvdWNoRGV2aWNlP3IuZGV0YWlsLnktNTA6ci5kZXRhaWwueSksdGhpcy5fYXV0b1Njcm9sbGVyKCl9fV9vblRyYWNrKHIpe2lmKCF0aGlzLl9kcmFnZ2VkQ29sdW1uKXJldHVybjtsZXQgbj10aGlzLl9jZWxsRnJvbVBvaW50KHIuZGV0YWlsLngsci5kZXRhaWwueSk7aWYoIW4pcmV0dXJuO2xldCBpPXRoaXMuX2dldFRhcmdldENvbHVtbihuLHRoaXMuX2RyYWdnZWRDb2x1bW4pO3RoaXMuX2lzU3dhcEFsbG93ZWQodGhpcy5fZHJhZ2dlZENvbHVtbixpKSYmdGhpcy5faXNTd2FwcGFibGVCeVBvc2l0aW9uKGksci5kZXRhaWwueCkmJnRoaXMuX3N3YXBDb2x1bW5PcmRlcnModGhpcy5fZHJhZ2dlZENvbHVtbixpKSx0aGlzLl91cGRhdGVHaG9zdFBvc2l0aW9uKHIuZGV0YWlsLngsdGhpcy5fdG91Y2hEZXZpY2U/ci5kZXRhaWwueS01MDpyLmRldGFpbC55KSx0aGlzLl9sYXN0RHJhZ0NsaWVudFg9ci5kZXRhaWwueH1fb25UcmFja0VuZCgpeyF0aGlzLl9kcmFnZ2VkQ29sdW1ufHwodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJyZW9yZGVyaW5nIiwhMSx0aGlzKSx0aGlzLl9kcmFnZ2VkQ29sdW1uLl9yZW9yZGVyU3RhdHVzPSIiLHRoaXMuX3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyh0aGlzLl9kcmFnZ2VkQ29sdW1uLCIiKSx0aGlzLl9kcmFnZ2VkQ29sdW1uPW51bGwsdGhpcy5fbGFzdERyYWdDbGllbnRYPW51bGwsdGhpcy5fcmVvcmRlckdob3N0LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sdW1uLXJlb3JkZXIiLHtkZXRhaWw6e2NvbHVtbnM6dGhpcy5fZ2V0Q29sdW1uc0luT3JkZXIoKX19KSkpfV9nZXRDb2x1bW5zSW5PcmRlcigpe3JldHVybiB0aGlzLl9jb2x1bW5UcmVlLnNsaWNlKDApLnBvcCgpLmZpbHRlcihyPT4hci5oaWRkZW4pLnNvcnQoKHIsbik9PnIuX29yZGVyLW4uX29yZGVyKX1fY2VsbEZyb21Qb2ludChyLG4pe3I9cnx8MCxuPW58fDAsdGhpcy5fZHJhZ2dlZENvbHVtbnx8dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMCx0aGlzLiQuc2Nyb2xsZXIpO2xldCBpPXRoaXMuc2hhZG93Um9vdC5lbGVtZW50RnJvbVBvaW50KHIsbik7aWYodGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJuby1jb250ZW50LXBvaW50ZXItZXZlbnRzIiwhMSx0aGlzLiQuc2Nyb2xsZXIpLGkmJmkuX2NvbHVtbilyZXR1cm4gaX1fdXBkYXRlR2hvc3RQb3NpdGlvbihyLG4pe2xldCBpPXRoaXMuX3Jlb3JkZXJHaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXItaS53aWR0aC8yLGE9bi1pLmhlaWdodC8yLHM9cGFyc2VJbnQodGhpcy5fcmVvcmRlckdob3N0Ll9sZWZ0fHwwKSxsPXBhcnNlSW50KHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wfHwwKTt0aGlzLl9yZW9yZGVyR2hvc3QuX2xlZnQ9cy0oaS5sZWZ0LW8pLHRoaXMuX3Jlb3JkZXJHaG9zdC5fdG9wPWwtKGkudG9wLWEpLHRoaXMuX3Jlb3JkZXJHaG9zdC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3RoaXMuX3Jlb3JkZXJHaG9zdC5fbGVmdH1weCwgJHt0aGlzLl9yZW9yZGVyR2hvc3QuX3RvcH1weClgfV91cGRhdGVHaG9zdChyKXtsZXQgbj10aGlzLl9yZW9yZGVyR2hvc3Q7bi50ZXh0Q29udGVudD1yLl9jb250ZW50LmlubmVyVGV4dDtsZXQgaT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShyKTtyZXR1cm5bImJveFNpemluZyIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsImJhY2tncm91bmQiLCJhbGlnbkl0ZW1zIiwicGFkZGluZyIsImJvcmRlciIsImZsZXgtZGlyZWN0aW9uIiwib3ZlcmZsb3ciXS5mb3JFYWNoKG89Pm4uc3R5bGVbb109aVtvXSksbn1fdXBkYXRlT3JkZXJzKHIsbil7cj09PXZvaWQgMHx8bj09PXZvaWQgMHx8KHJbMF0uZm9yRWFjaChpPT5pLl9vcmRlcj0wKSxvdWUoclswXSx0aGlzLl9vcmRlckJhc2VTY29wZSwwKSl9X3NldFNpYmxpbmdzUmVvcmRlclN0YXR1cyhyLG4pe0FycmF5LmZyb20oci5wYXJlbnROb2RlLmNoaWxkcmVuKS5maWx0ZXIoaT0+L2NvbHVtbi8udGVzdChpLmxvY2FsTmFtZSkmJnRoaXMuX2lzU3dhcEFsbG93ZWQoaSxyKSkuZm9yRWFjaChpPT5pLl9yZW9yZGVyU3RhdHVzPW4pfV9hdXRvU2Nyb2xsZXIoKXtpZih0aGlzLl9sYXN0RHJhZ0NsaWVudFgpe2xldCByPXRoaXMuX2xhc3REcmFnQ2xpZW50WC10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KzUwLG49dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXRoaXMuX2xhc3REcmFnQ2xpZW50WCs1MDtyPjA/dGhpcy4kLnRhYmxlLnNjcm9sbExlZnQrPXIvMTA6bj4wJiYodGhpcy4kLnRhYmxlLnNjcm9sbExlZnQtPW4vMTApLHRoaXMuX3Njcm9sbEhhbmRsZXIoKX10aGlzLl9kcmFnZ2VkQ29sdW1uJiZ0aGlzLmFzeW5jKHRoaXMuX2F1dG9TY3JvbGxlciwxMCl9X2lzU3dhcEFsbG93ZWQocixuKXtpZihyJiZuKXtsZXQgaT1yIT09bixvPXIucGFyZW50RWxlbWVudD09PW4ucGFyZW50RWxlbWVudCxhPXIuZnJvemVuPT09bi5mcm96ZW47cmV0dXJuIGkmJm8mJmF9fV9pc1N3YXBwYWJsZUJ5UG9zaXRpb24ocixuKXtsZXQgaT1BcnJheS5mcm9tKHRoaXMuJC5oZWFkZXIucXVlcnlTZWxlY3RvckFsbCgndHI6bm90KFtoaWRkZW5dKSBbcGFydH49ImNlbGwiXScpKS5maWx0ZXIocz0+ci5jb250YWlucyhzLl9jb2x1bW4pKVswXSxvPXRoaXMuJC5oZWFkZXIucXVlcnlTZWxlY3RvcigidHI6bm90KFtoaWRkZW5dKSBbcmVvcmRlci1zdGF0dXM9ZHJhZ2dpbmddIikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksYT1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiBhLmxlZnQ+by5sZWZ0P24+YS5yaWdodC1vLndpZHRoOm48YS5sZWZ0K28ud2lkdGh9X3N3YXBDb2x1bW5PcmRlcnMocixuKXtsZXQgaT1yLl9vcmRlcjtyLl9vcmRlcj1uLl9vcmRlcixuLl9vcmRlcj1pLHRoaXMuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKX1fZ2V0VGFyZ2V0Q29sdW1uKHIsbil7aWYociYmbil7bGV0IGk9ci5fY29sdW1uO2Zvcig7aS5wYXJlbnRFbGVtZW50IT09bi5wYXJlbnRFbGVtZW50JiZpIT09dGhpczspaT1pLnBhcmVudEVsZW1lbnQ7cmV0dXJuIGkucGFyZW50RWxlbWVudD09PW4ucGFyZW50RWxlbWVudD9pOnIuX2NvbHVtbn19fTt2YXIgbmhyPWU9PmNsYXNzIGV4dGVuZHMgZXtzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKXtyZXR1cm57cmVzaXphYmxlOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmxvY2FsTmFtZT09PSJ2YWFkaW4tZ3JpZC1jb2x1bW4tZ3JvdXAiKXJldHVybjtsZXQgcj10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHImJnIubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCImJnIucmVzaXphYmxlfHwhMX19LF9oZWFkZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9mb290ZXJUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LGZyb3plbjp7dHlwZTpCb29sZWFuLHZhbHVlOiExfSxoaWRkZW46e3R5cGU6Qm9vbGVhbn0saGVhZGVyOnt0eXBlOlN0cmluZ30sdGV4dEFsaWduOnt0eXBlOlN0cmluZ30sX2xhc3RGcm96ZW46e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX29yZGVyOk51bWJlcixfcmVvcmRlclN0YXR1czpCb29sZWFuLF9lbXB0eUNlbGxzOkFycmF5LF9oZWFkZXJDZWxsOk9iamVjdCxfZm9vdGVyQ2VsbDpPYmplY3QsX2dyaWQ6T2JqZWN0LGhlYWRlclJlbmRlcmVyOkZ1bmN0aW9uLGZvb3RlclJlbmRlcmVyOkZ1bmN0aW9ufX1zdGF0aWMgZ2V0IG9ic2VydmVycygpe3JldHVyblsiX3dpZHRoQ2hhbmdlZCh3aWR0aCwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfZnJvemVuQ2hhbmdlZChmcm96ZW4sIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiopIiwiX2ZsZXhHcm93Q2hhbmdlZChmbGV4R3JvdywgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfcGF0aE9ySGVhZGVyQ2hhbmdlZChwYXRoLCBoZWFkZXIsIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCwgX2NlbGxzLiosIHJlbmRlcmVyLCBoZWFkZXJSZW5kZXJlciwgX2JvZHlUZW1wbGF0ZSwgX2hlYWRlclRlbXBsYXRlKSIsIl90ZXh0QWxpZ25DaGFuZ2VkKHRleHRBbGlnbiwgX2NlbGxzLiosIF9oZWFkZXJDZWxsLCBfZm9vdGVyQ2VsbCkiLCJfb3JkZXJDaGFuZ2VkKF9vcmRlciwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiLCJfbGFzdEZyb3plbkNoYW5nZWQoX2xhc3RGcm96ZW4pIiwiX3NldEJvZHlUZW1wbGF0ZU9yUmVuZGVyZXIoX2JvZHlUZW1wbGF0ZSwgcmVuZGVyZXIsIF9jZWxscywgX2NlbGxzLiopIiwiX3NldEhlYWRlclRlbXBsYXRlT3JSZW5kZXJlcihfaGVhZGVyVGVtcGxhdGUsIGhlYWRlclJlbmRlcmVyLCBfaGVhZGVyQ2VsbCkiLCJfc2V0Rm9vdGVyVGVtcGxhdGVPclJlbmRlcmVyKF9mb290ZXJUZW1wbGF0ZSwgZm9vdGVyUmVuZGVyZXIsIF9mb290ZXJDZWxsKSIsIl9yZXNpemFibGVDaGFuZ2VkKHJlc2l6YWJsZSwgX2hlYWRlckNlbGwpIiwiX3Jlb3JkZXJTdGF0dXNDaGFuZ2VkKF9yZW9yZGVyU3RhdHVzLCBfaGVhZGVyQ2VsbCwgX2Zvb3RlckNlbGwsIF9jZWxscy4qKSIsIl9oaWRkZW5DaGFuZ2VkKGhpZGRlbiwgX2hlYWRlckNlbGwsIF9mb290ZXJDZWxsLCBfY2VsbHMuKikiXX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fYm9keVRlbXBsYXRlJiYodGhpcy5fYm9keVRlbXBsYXRlLnRlbXBsYXRpemVyLl9ncmlkPXRoaXMuX2dyaWQpLHRoaXMuX2hlYWRlclRlbXBsYXRlJiYodGhpcy5faGVhZGVyVGVtcGxhdGUudGVtcGxhdGl6ZXIuX2dyaWQ9dGhpcy5fZ3JpZCksdGhpcy5fZm9vdGVyVGVtcGxhdGUmJih0aGlzLl9mb290ZXJUZW1wbGF0ZS50ZW1wbGF0aXplci5fZ3JpZD10aGlzLl9ncmlkKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5fYm9keVRlbXBsYXRlfHx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyLmNhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChyPT57ci5fY29udGVudC5wYXJlbnROb2RlfHx0aGlzLl9ncmlkJiZ0aGlzLl9ncmlkLmFwcGVuZENoaWxkKHIuX2NvbnRlbnQpfSl9KX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCkscmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5fZmluZEhvc3RHcmlkKCl8fHRoaXMuX2FsbENlbGxzLmZvckVhY2gocj0+e3IuX2NvbnRlbnQucGFyZW50Tm9kZSYmci5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIuX2NvbnRlbnQpfSl9KSx0aGlzLl9ncmlkVmFsdWU9dm9pZCAwfV9maW5kSG9zdEdyaWQoKXtsZXQgcj10aGlzO2Zvcig7ciYmIS9edmFhZGluLipncmlkKC1wcm8pPyQvLnRlc3Qoci5sb2NhbE5hbWUpOylyPXIuYXNzaWduZWRTbG90P3IuYXNzaWduZWRTbG90LnBhcmVudE5vZGU6ci5wYXJlbnROb2RlO3JldHVybiByfHx2b2lkIDB9Z2V0IF9ncmlkKCl7cmV0dXJuIHRoaXMuX2dyaWRWYWx1ZXx8KHRoaXMuX2dyaWRWYWx1ZT10aGlzLl9maW5kSG9zdEdyaWQoKSksdGhpcy5fZ3JpZFZhbHVlfWdldCBfYWxsQ2VsbHMoKXtyZXR1cm5bXS5jb25jYXQodGhpcy5fY2VsbHN8fFtdKS5jb25jYXQodGhpcy5fZW1wdHlDZWxsc3x8W10pLmNvbmNhdCh0aGlzLl9oZWFkZXJDZWxsKS5jb25jYXQodGhpcy5fZm9vdGVyQ2VsbCkuZmlsdGVyKHI9PnIpfWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl90ZW1wbGF0ZU9ic2VydmVyPW5ldyB2aCh0aGlzLCgpPT57dGhpcy5faGVhZGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUhlYWRlclRlbXBsYXRlKCksdGhpcy5fZm9vdGVyVGVtcGxhdGU9dGhpcy5fcHJlcGFyZUZvb3RlclRlbXBsYXRlKCksdGhpcy5fYm9keVRlbXBsYXRlPXRoaXMuX3ByZXBhcmVCb2R5VGVtcGxhdGUoKX0pfV9wcmVwYXJlSGVhZGVyVGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSghMCl8fG51bGwse30pfV9wcmVwYXJlRm9vdGVyVGVtcGxhdGUoKXtyZXR1cm4gdGhpcy5fcHJlcGFyZVRlbXBsYXRpemVyKHRoaXMuX2ZpbmRUZW1wbGF0ZSghMSwhMCl8fG51bGwse30pfV9wcmVwYXJlQm9keVRlbXBsYXRlKCl7cmV0dXJuIHRoaXMuX3ByZXBhcmVUZW1wbGF0aXplcih0aGlzLl9maW5kVGVtcGxhdGUoKXx8bnVsbCl9X3ByZXBhcmVUZW1wbGF0aXplcihyLG4pe2lmKHImJiFyLnRlbXBsYXRpemVyKXtsZXQgaT1uZXcgVDA7aS5fZ3JpZD10aGlzLl9ncmlkLGkuZGF0YUhvc3Q9dGhpcy5kYXRhSG9zdCxpLl9pbnN0YW5jZVByb3BzPW58fGkuX2luc3RhbmNlUHJvcHMsaS50ZW1wbGF0ZT1yLHIudGVtcGxhdGl6ZXI9aX1yZXR1cm4gcn1fcmVuZGVySGVhZGVyQW5kRm9vdGVyKCl7dGhpcy5oZWFkZXJSZW5kZXJlciYmdGhpcy5faGVhZGVyQ2VsbCYmdGhpcy5fX3J1blJlbmRlcmVyKHRoaXMuaGVhZGVyUmVuZGVyZXIsdGhpcy5faGVhZGVyQ2VsbCksdGhpcy5mb290ZXJSZW5kZXJlciYmdGhpcy5fZm9vdGVyQ2VsbCYmdGhpcy5fX3J1blJlbmRlcmVyKHRoaXMuZm9vdGVyUmVuZGVyZXIsdGhpcy5fZm9vdGVyQ2VsbCl9X19ydW5SZW5kZXJlcihyLG4saSl7bGV0IG89W24uX2NvbnRlbnQsdGhpc107aSYmaS5pdGVtJiZvLnB1c2goaSksci5hcHBseSh0aGlzLG8pfV9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXtpZighdGhpcy5oaWRkZW4pe2lmKHImJm4pdGhyb3cgbmV3IEVycm9yKCJZb3Ugc2hvdWxkIG9ubHkgdXNlIGVpdGhlciBhIHJlbmRlcmVyIG9yIGEgdGVtcGxhdGUiKTtpLmZvckVhY2gobz0+e2xldCBhPXRoaXMuX2dyaWQuX19nZXRSb3dNb2RlbChvLnBhcmVudEVsZW1lbnQpO2lmKG4pby5fcmVuZGVyZXI9biwoYS5pdGVtfHxuPT09dGhpcy5oZWFkZXJSZW5kZXJlcnx8bj09PXRoaXMuZm9vdGVyUmVuZGVyZXIpJiZ0aGlzLl9fcnVuUmVuZGVyZXIobixvLGEpO2Vsc2UgaWYoby5fdGVtcGxhdGUhPT1yKXtvLl90ZW1wbGF0ZT1yLG8uX2NvbnRlbnQuaW5uZXJIVE1MPSIiLHIudGVtcGxhdGl6ZXIuX2dyaWQ9ci50ZW1wbGF0aXplci5fZ3JpZHx8dGhpcy5fZ3JpZDtsZXQgcz1yLnRlbXBsYXRpemVyLmNyZWF0ZUluc3RhbmNlKCk7by5fY29udGVudC5hcHBlbmRDaGlsZChzLnJvb3QpLG8uX2luc3RhbmNlPXMsYS5pdGVtJiZvLl9pbnN0YW5jZS5zZXRQcm9wZXJ0aWVzKGEpfX0pfX1fc2V0Qm9keVRlbXBsYXRlT3JSZW5kZXJlcihyLG4saSl7KHJ8fG4pJiZpJiZ0aGlzLl9fc2V0Q29sdW1uVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKX1fc2V0SGVhZGVyVGVtcGxhdGVPclJlbmRlcmVyKHIsbixpKXsocnx8bikmJmkmJnRoaXMuX19zZXRDb2x1bW5UZW1wbGF0ZU9yUmVuZGVyZXIocixuLFtpXSl9X3NldEZvb3RlclRlbXBsYXRlT3JSZW5kZXJlcihyLG4saSl7KHJ8fG4pJiZpJiYodGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcihyLG4sW2ldKSx0aGlzLl9ncmlkLl9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eShpLnBhcmVudEVsZW1lbnQpKX1fc2VsZWN0Rmlyc3RUZW1wbGF0ZShyPSExLG49ITEpe3JldHVybiB2aC5nZXRGbGF0dGVuZWROb2Rlcyh0aGlzKS5maWx0ZXIoaT0+aS5sb2NhbE5hbWU9PT0idGVtcGxhdGUiJiZpLmNsYXNzTGlzdC5jb250YWlucygiaGVhZGVyIik9PT1yJiZpLmNsYXNzTGlzdC5jb250YWlucygiZm9vdGVyIik9PT1uKVswXX1fZmluZFRlbXBsYXRlKHIsbil7bGV0IGk9dGhpcy5fc2VsZWN0Rmlyc3RUZW1wbGF0ZShyLG4pO3JldHVybiBpJiZ0aGlzLmRhdGFIb3N0JiYoaS5fcm9vdERhdGFIb3N0PXRoaXMuZGF0YUhvc3QuX3Jvb3REYXRhSG9zdHx8dGhpcy5kYXRhSG9zdCksaX1fZmxleEdyb3dDaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiZmxleEdyb3ciKSx0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUuZmxleEdyb3c9cil9X29yZGVyQ2hhbmdlZChyKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc3R5bGUub3JkZXI9cil9X3dpZHRoQ2hhbmdlZChyKXt0aGlzLnBhcmVudEVsZW1lbnQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQmJnRoaXMucGFyZW50RWxlbWVudC5fY29sdW1uUHJvcENoYW5nZWQoIndpZHRoIiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChuPT5uLnN0eWxlLndpZHRoPXIpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX19mb3JjZVJlZmxvdyYmdGhpcy5fZ3JpZC5fX2ZvcmNlUmVmbG93KCl9X2Zyb3plbkNoYW5nZWQocil7dGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkKCJmcm96ZW4iLHIpLHRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJmcm96ZW4iLHIsbikpLHRoaXMuX2dyaWQmJnRoaXMuX2dyaWQuX2Zyb3plbkNlbGxzQ2hhbmdlZCYmdGhpcy5fZ3JpZC5fZnJvemVuQ2VsbHNDaGFuZ2VkKCl9X2xhc3RGcm96ZW5DaGFuZ2VkKHIpe3RoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+dGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJsYXN0LWZyb3plbiIscixuKSksdGhpcy5wYXJlbnRFbGVtZW50JiZ0aGlzLnBhcmVudEVsZW1lbnQuX2NvbHVtblByb3BDaGFuZ2VkJiYodGhpcy5wYXJlbnRFbGVtZW50Ll9sYXN0RnJvemVuPXIpfV9wYXRoT3JIZWFkZXJDaGFuZ2VkKHIsbixpLG8sYSxzLGwsYyx1KXtsZXQgaD1uIT09dm9pZCAwO2lmKCFsJiYhdSYmaCYmaSYmdGhpcy5fX3NldFRleHRDb250ZW50KGkuX2NvbnRlbnQsbiksciYmYS52YWx1ZSl7aWYoIXMmJiFjKXtsZXQgZj0ocCxkLHtpdGVtOmd9KT0+dGhpcy5fX3NldFRleHRDb250ZW50KHAsdGhpcy5nZXQocixnKSk7dGhpcy5fX3NldENvbHVtblRlbXBsYXRlT3JSZW5kZXJlcih2b2lkIDAsZixhLnZhbHVlKX0hbCYmIXUmJiFoJiZpJiZuIT09bnVsbCYmdGhpcy5fX3NldFRleHRDb250ZW50KGkuX2NvbnRlbnQsdGhpcy5fZ2VuZXJhdGVIZWFkZXIocikpfWkmJnRoaXMuX2dyaWQuX191cGRhdGVIZWFkZXJGb290ZXJSb3dWaXNpYmlsaXR5KGkucGFyZW50RWxlbWVudCl9X19zZXRUZXh0Q29udGVudChyLG4pe3IudGV4dENvbnRlbnQhPT1uJiYoci50ZXh0Q29udGVudD1uKX1fZ2VuZXJhdGVIZWFkZXIocil7cmV0dXJuIHIuc3Vic3RyKHIubGFzdEluZGV4T2YoIi4iKSsxKS5yZXBsYWNlKC8oW0EtWl0pL2csIi0kMSIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLS9nLCIgIikucmVwbGFjZSgvXi4vLG49Pm4udG9VcHBlckNhc2UoKSl9X3RvZ2dsZUF0dHJpYnV0ZShyLG4saSl7aS5oYXNBdHRyaWJ1dGUocik9PT0hbiYmKG4/aS5zZXRBdHRyaWJ1dGUociwiIik6aS5yZW1vdmVBdHRyaWJ1dGUocikpfV9yZW9yZGVyU3RhdHVzQ2hhbmdlZChyKXt0aGlzLl9hbGxDZWxscy5mb3JFYWNoKG49Pm4uc2V0QXR0cmlidXRlKCJyZW9yZGVyLXN0YXR1cyIscikpfV9yZXNpemFibGVDaGFuZ2VkKHIsbil7cj09PXZvaWQgMHx8bj09PXZvaWQgMHx8biYmW25dLmNvbmNhdCh0aGlzLl9lbXB0eUNlbGxzKS5mb3JFYWNoKGk9PntpZihpKXtsZXQgbz1pLnF1ZXJ5U2VsZWN0b3IoJ1twYXJ0fj0icmVzaXplLWhhbmRsZSJdJyk7aWYobyYmaS5yZW1vdmVDaGlsZChvKSxyKXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnNldEF0dHJpYnV0ZSgicGFydCIsInJlc2l6ZS1oYW5kbGUiKSxpLmFwcGVuZENoaWxkKGEpfX19KX1fdGV4dEFsaWduQ2hhbmdlZChyKXtpZihyPT09dm9pZCAwKXJldHVybjtpZihbInN0YXJ0IiwiZW5kIiwiY2VudGVyIl0uaW5kZXhPZihyKT09PS0xKXtjb25zb2xlLndhcm4oJ3RleHRBbGlnbiBjYW4gb25seSBiZSBzZXQgYXMgInN0YXJ0IiwgImVuZCIgb3IgImNlbnRlciInKTtyZXR1cm59bGV0IG47Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9ncmlkKS5kaXJlY3Rpb249PT0ibHRyIj9yPT09InN0YXJ0Ij9uPSJsZWZ0IjpyPT09ImVuZCImJihuPSJyaWdodCIpOnI9PT0ic3RhcnQiP249InJpZ2h0IjpyPT09ImVuZCImJihuPSJsZWZ0IiksdGhpcy5fYWxsQ2VsbHMuZm9yRWFjaChpPT57aS5fY29udGVudC5zdHlsZS50ZXh0QWxpZ249cixnZXRDb21wdXRlZFN0eWxlKGkuX2NvbnRlbnQpLnRleHRBbGlnbiE9PXImJihpLl9jb250ZW50LnN0eWxlLnRleHRBbGlnbj1uKX0pfV9oaWRkZW5DaGFuZ2VkKHIpe3RoaXMucGFyZW50RWxlbWVudCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCYmdGhpcy5wYXJlbnRFbGVtZW50Ll9jb2x1bW5Qcm9wQ2hhbmdlZCgiaGlkZGVuIixyKSwhIXIhPSEhdGhpcy5fcHJldmlvdXNIaWRkZW4mJnRoaXMuX2dyaWQmJihyPT09ITAmJnRoaXMuX2FsbENlbGxzLmZvckVhY2gobj0+e24uX2NvbnRlbnQucGFyZW50Tm9kZSYmbi5fY29udGVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4uX2NvbnRlbnQpfSksdGhpcy5fZ3JpZC5fZGVib3VuY2VySGlkZGVuQ2hhbmdlZD1zci5kZWJvdW5jZSh0aGlzLl9ncmlkLl9kZWJvdW5jZXJIaWRkZW5DaGFuZ2VkLE5pLCgpPT57dGhpcy5fZ3JpZCYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSYmdGhpcy5fZ3JpZC5fcmVuZGVyQ29sdW1uVHJlZSh0aGlzLl9ncmlkLl9jb2x1bW5UcmVlKX0pLHRoaXMuX2dyaWQuX3VwZGF0ZUxhc3RGcm96ZW4mJnRoaXMuX2dyaWQuX3VwZGF0ZUxhc3RGcm96ZW4oKSx0aGlzLl9ncmlkLm5vdGlmeVJlc2l6ZSYmdGhpcy5fZ3JpZC5ub3RpZnlSZXNpemUoKSx0aGlzLl9ncmlkLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbiYmdGhpcy5fZ3JpZC5fcmVzZXRLZXlib2FyZE5hdmlnYXRpb24oKSksdGhpcy5fcHJldmlvdXNIaWRkZW49cn19LHRWPWNsYXNzIGV4dGVuZHMgbmhyKEtIKG10KSl7c3RhdGljIGdldCBpcygpe3JldHVybiJ2YWFkaW4tZ3JpZC1jb2x1bW4ifXN0YXRpYyBnZXQgcHJvcGVydGllcygpe3JldHVybnt3aWR0aDp7dHlwZTpTdHJpbmcsdmFsdWU6IjEwMHB4In0sZmxleEdyb3c6e3R5cGU6TnVtYmVyLHZhbHVlOjF9LHJlbmRlcmVyOkZ1bmN0aW9uLHBhdGg6e3R5cGU6U3RyaW5nfSxhdXRvV2lkdGg6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMX0sX2JvZHlUZW1wbGF0ZTp7dHlwZTpPYmplY3R9LF9jZWxsczpBcnJheX19fTtjdXN0b21FbGVtZW50cy5kZWZpbmUodFYuaXMsdFYpO2pjKCJ2YWFkaW4tZ3JpZCIsQ2lgCiAgICBAa2V5ZnJhbWVzIHZhYWRpbi1ncmlkLWFwcGVhciB7CiAgICAgIHRvIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICB9CgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgYW5pbWF0aW9uOiAxbXMgdmFhZGluLWdyaWQtYXBwZWFyOwogICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2Nyb2xsZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB3aWR0aDogYXV0bzsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgcmlnaHQ6IDA7CiAgICAgIGJvdHRvbTogMDsKICAgICAgbGVmdDogMDsKICAgIH0KCiAgICA6aG9zdChbaGVpZ2h0LWJ5LXJvd3NdKSB7CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDsKICAgICAgZmxleC1ncm93OiAwOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICA6aG9zdChbaGVpZ2h0LWJ5LXJvd3NdKSAjc2Nyb2xsZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgI3RhYmxlIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgLyogV29ya2Fyb3VuZCBmb3IgYSBEZXNrdG9wIFNhZmFyaSBidWc6IG5ldyBzdGFja2luZyBjb250ZXh0IGhlcmUgcHJldmVudHMgdGhlIHNjcm9sbGJhciBmcm9tIGdldHRpbmcgaGlkZGVuICovCiAgICAgIHotaW5kZXg6IDA7CiAgICB9CgogICAgI2hlYWRlciwKICAgICNmb290ZXIgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcG9zaXRpb246IC13ZWJraXQtc3RpY2t5OwogICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICBsZWZ0OiAwOwogICAgICBvdmVyZmxvdzogdmlzaWJsZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgI2hlYWRlciB7CiAgICAgIHRvcDogMDsKICAgIH0KCiAgICB0aCB7CiAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7CiAgICB9CgogICAgLyogU2FmYXJpIGRvZXNuJ3Qgd29yayB3aXRoICJpbmhlcml0IiAqLwogICAgW3NhZmFyaV0gdGggewogICAgICB0ZXh0LWFsaWduOiBpbml0aWFsOwogICAgfQoKICAgICNmb290ZXIgewogICAgICBib3R0b206IDA7CiAgICB9CgogICAgI2l0ZW1zIHsKICAgICAgZmxleC1ncm93OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBvc2l0aW9uOiAtd2Via2l0LXN0aWNreTsKICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGxlZnQ6IDA7CiAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J10gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgbWFyZ2luOiAwOwogICAgfQoKICAgIFtwYXJ0fj0ncm93J11bbG9hZGluZ10gW3BhcnR+PSdib2R5LWNlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICB9CgogICAgI2l0ZW1zIFtwYXJ0fj0ncm93J10gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB9CgogICAgI2l0ZW1zIFtwYXJ0fj0ncm93J106ZW1wdHkgewogICAgICBoZWlnaHQ6IDFlbTsKICAgIH0KCiAgICBbcGFydH49J2NlbGwnXTpub3QoW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSkgewogICAgICBmbGV4LXNocmluazogMDsKICAgICAgZmxleC1ncm93OiAxOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBwYWRkaW5nOiAwOwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgIFtwYXJ0fj0nZGV0YWlscy1jZWxsJ10gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogMDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIFtoaWRkZW5dIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIFtmcm96ZW5dIHsKICAgICAgei1pbmRleDogMjsKICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgIH0KCiAgICBbbm8tc2Nyb2xsYmFyc11bc2FmYXJpXSAjdGFibGUsCiAgICBbbm8tc2Nyb2xsYmFyc11bZmlyZWZveF0gI3RhYmxlIHsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAvKiBSZW9yZGVyaW5nIHN0eWxlcyAqLwogICAgOmhvc3QoW3Jlb3JkZXJpbmddKSBbcGFydH49J2NlbGwnXSA6OnNsb3R0ZWQodmFhZGluLWdyaWQtY2VsbC1jb250ZW50KSwKICAgIDpob3N0KFtyZW9yZGVyaW5nXSkgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ10sCiAgICAjc2Nyb2xsZXJbbm8tY29udGVudC1wb2ludGVyLWV2ZW50c10gW3BhcnR+PSdjZWxsJ10gOjpzbG90dGVkKHZhYWRpbi1ncmlkLWNlbGwtY29udGVudCkgewogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICBbcGFydH49J3Jlb3JkZXItZ2hvc3QnXSB7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgb3BhY2l0eTogMC41OwoKICAgICAgLyogUHJldmVudCBvdmVyZmxvd2luZyB0aGUgZ3JpZCBpbiBGaXJlZm94ICovCiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KCiAgICA6aG9zdChbcmVvcmRlcmluZ10pIHsKICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB9CgogICAgLyogUmVzaXppbmcgc3R5bGVzICovCiAgICBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICByaWdodDogMDsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgIHotaW5kZXg6IDE7CiAgICB9CgogICAgW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgY29udGVudDogJyc7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IDM1cHg7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIH0KCiAgICBbbGFzdC1jb2x1bW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUsCiAgICBbbGFzdC1mcm96ZW5dIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUgewogICAgICB3aWR0aDogMThweDsKICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICByaWdodDogMDsKICAgIH0KCiAgICAjc2Nyb2xsZXJbY29sdW1uLXJlc2l6aW5nXSB7CiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB9CgogICAgLyogU2l6ZXIgc3R5bGVzICovCiAgICAjc2l6ZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdkZXRhaWxzLWNlbGwnXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ11baGlkZGVuXSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjc2l6ZXIgW3BhcnR+PSdjZWxsJ10gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIGxpbmUtaGVpZ2h0OiAwOwogICAgICBoZWlnaHQ6IDAgIWltcG9ydGFudDsKICAgICAgbWluLWhlaWdodDogMCAhaW1wb3J0YW50OwogICAgICBtYXgtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0nY2VsbCddOjpiZWZvcmUgewogICAgICBjb250ZW50OiAnLSc7CiAgICB9CgogICAgI3NpemVyIFtwYXJ0fj0nY2VsbCddIDo6c2xvdHRlZCh2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQpIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQoKICAgIC8qIFJUTCBzcGVjaWZpYyBzdHlsZXMgKi8KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2l0ZW1zLAogICAgOmhvc3QoW2Rpcj0ncnRsJ10pICNoZWFkZXIsCiAgICA6aG9zdChbZGlyPSdydGwnXSkgI2Zvb3RlciB7CiAgICAgIGxlZnQ6IGF1dG87CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVvcmRlci1naG9zdCddIHsKICAgICAgbGVmdDogYXV0bzsKICAgICAgcmlnaHQ6IDA7CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddIHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IGF1dG87CiAgICB9CgogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtwYXJ0fj0ncmVzaXplLWhhbmRsZSddOjpiZWZvcmUgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTAlKTsKICAgIH0KCiAgICA6aG9zdChbZGlyPSdydGwnXSkgW2xhc3QtY29sdW1uXSBbcGFydH49J3Jlc2l6ZS1oYW5kbGUnXTo6YmVmb3JlLAogICAgOmhvc3QoW2Rpcj0ncnRsJ10pIFtsYXN0LWZyb3plbl0gW3BhcnR+PSdyZXNpemUtaGFuZGxlJ106OmJlZm9yZSB7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiBhdXRvOwogICAgfQogIGAse21vZHVsZUlkOiJ2YWFkaW4tZ3JpZC1zdHlsZXMifSk7dmFyIGlocj0oKCk9Pnt0cnl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJUb3VjaEV2ZW50IiksITB9Y2F0Y2goZSl7cmV0dXJuITF9fSkoKSxlVj1jbGFzcyBleHRlbmRzIFpIKGpIKFhjZShHY2UoJGNlKHFjZShRY2UodHVlKGV1ZShKY2UoaXVlKFVjZShaY2UoYXVlKFdjZShLY2UobnVlKHJ1ZShRSCkpKSkpKSkpKSkpKSkpKSkpKXtzdGF0aWMgZ2V0IHRlbXBsYXRlKCl7cmV0dXJuIFFgCiAgICAgIDxkaXYKICAgICAgICBpZD0ic2Nyb2xsZXIiCiAgICAgICAgc2FmYXJpJD0iW1tfc2FmYXJpXV0iCiAgICAgICAgaW9zJD0iW1tfaW9zXV0iCiAgICAgICAgbG9hZGluZyQ9IltbbG9hZGluZ11dIgogICAgICAgIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQkPSJbW2NvbHVtblJlb3JkZXJpbmdBbGxvd2VkXV0iCiAgICAgID4KICAgICAgICA8dGFibGUgaWQ9InRhYmxlIiByb2xlPSJncmlkIiBhcmlhLW11bHRpc2VsZWN0YWJsZT0idHJ1ZSIgdGFiaW5kZXg9IjAiPgogICAgICAgICAgPGNhcHRpb24gaWQ9InNpemVyIiBwYXJ0PSJyb3ciPjwvY2FwdGlvbj4KICAgICAgICAgIDx0aGVhZCBpZD0iaGVhZGVyIiByb2xlPSJyb3dncm91cCI+PC90aGVhZD4KICAgICAgICAgIDx0Ym9keSBpZD0iaXRlbXMiIHJvbGU9InJvd2dyb3VwIj48L3Rib2R5PgogICAgICAgICAgPHRmb290IGlkPSJmb290ZXIiIHJvbGU9InJvd2dyb3VwIj48L3Rmb290PgogICAgICAgIDwvdGFibGU+CgogICAgICAgIDxkaXYgcGFydD0icmVvcmRlci1naG9zdCI+PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBpZD0iZm9jdXNleGl0IiB0YWJpbmRleD0iMCI+PC9kaXY+CiAgICBgfXN0YXRpYyBnZXQgaXMoKXtyZXR1cm4idmFhZGluLWdyaWQifXN0YXRpYyBnZXQgdmVyc2lvbigpe3JldHVybiIyMC4wLjIifXN0YXRpYyBnZXQgb2JzZXJ2ZXJzKCl7cmV0dXJuWyJfY29sdW1uVHJlZUNoYW5nZWQoX2NvbHVtblRyZWUsIF9jb2x1bW5UcmVlLiopIl19c3RhdGljIGdldCBwcm9wZXJ0aWVzKCl7cmV0dXJue19zYWZhcmk6e3R5cGU6Qm9vbGVhbix2YWx1ZTovXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfSxfaW9zOnt0eXBlOkJvb2xlYW4sdmFsdWU6L2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF3aW5kb3cuTVNTdHJlYW18fG5hdmlnYXRvci5wbGF0Zm9ybT09PSJNYWNJbnRlbCImJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cz4xfSxfZmlyZWZveDp7dHlwZTpCb29sZWFuLHZhbHVlOm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJmaXJlZm94Iik+LTF9LF9hbmRyb2lkOnt0eXBlOkJvb2xlYW4sdmFsdWU6L2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfSxfdG91Y2hEZXZpY2U6e3R5cGU6Qm9vbGVhbix2YWx1ZTppaHJ9LGhlaWdodEJ5Um93czp7dHlwZTpCb29sZWFuLHZhbHVlOiExLHJlZmxlY3RUb0F0dHJpYnV0ZTohMCxvYnNlcnZlcjoiX2hlaWdodEJ5Um93c0NoYW5nZWQifSxfcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQ6e3R5cGU6Qm9vbGVhbix2YWx1ZTohMH19fWNvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsdGhpcy5fb25BbmltYXRpb25FbmQpfWNvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSx0aGlzLnJlY2FsY3VsYXRlQ29sdW1uV2lkdGhzKCl9YXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHQscixuKXtzdXBlci5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodCxyLG4pLHQ9PT0iZGlyIiYmKHRoaXMuX19pc1JUTD1uPT09InJ0bCIsdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSl9X19oYXNSb3dzV2l0aENsaWVudEhlaWdodCgpe3JldHVybiEhQXJyYXkuZnJvbSh0aGlzLiQuaXRlbXMuY2hpbGRyZW4pLmZpbHRlcih0PT50LmNsaWVudEhlaWdodCkubGVuZ3RofV9faXRlbXNSZWNlaXZlZCgpe3RoaXMuX3JlY2FsY3VsYXRlQ29sdW1uV2lkdGhPbmNlTG9hZGluZ0ZpbmlzaGVkJiYhdGhpcy5fY2FjaGUuaXNMb2FkaW5nKCkmJnRoaXMuX19oYXNSb3dzV2l0aENsaWVudEhlaWdodCgpJiYodGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aE9uY2VMb2FkaW5nRmluaXNoZWQ9ITEsdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpKX1fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl7dC5mb3JFYWNoKHI9PntyLndpZHRoPSJhdXRvIixyLl9vcmlnRmxleEdyb3c9ci5mbGV4R3JvdyxyLmZsZXhHcm93PTB9KSx0LmZvckVhY2gocj0+e3IuX2N1cnJlbnRXaWR0aD0wLHIuX2FsbENlbGxzLmZvckVhY2gobj0+e2xldCBpPW4ub2Zmc2V0V2lkdGgrMTtyLl9jdXJyZW50V2lkdGg9TWF0aC5tYXgoci5fY3VycmVudFdpZHRoLGkpfSl9KSx0LmZvckVhY2gocj0+e3Iud2lkdGg9YCR7ci5fY3VycmVudFdpZHRofXB4YCxyLmZsZXhHcm93PXIuX29yaWdGbGV4R3JvdyxyLl9jdXJyZW50V2lkdGg9dm9pZCAwLHIuX29yaWdGbGV4R3Jvdz12b2lkIDB9KX1yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpe2lmKCEhdGhpcy5fY29sdW1uVHJlZSlpZih0aGlzLl9jYWNoZS5pc0xvYWRpbmcoKSl0aGlzLl9yZWNhbGN1bGF0ZUNvbHVtbldpZHRoT25jZUxvYWRpbmdGaW5pc2hlZD0hMDtlbHNle2xldCB0PXRoaXMuX2dldENvbHVtbnMoKS5maWx0ZXIocj0+IXIuaGlkZGVuJiZyLmF1dG9XaWR0aCk7dGhpcy5fcmVjYWxjdWxhdGVDb2x1bW5XaWR0aHModCl9fV9jcmVhdGVTY3JvbGxlclJvd3ModCl7bGV0IHI9W107Zm9yKGxldCBuPTA7bjx0O24rKyl7bGV0IGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtpLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLGkuc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy5fY29sdW1uVHJlZSYmdGhpcy5fdXBkYXRlUm93KGksdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXSwiYm9keSIsITEsITApLHIucHVzaChpKX1yZXR1cm4gdGhpcy5fY29sdW1uVHJlZSYmdGhpcy5fY29sdW1uVHJlZVt0aGlzLl9jb2x1bW5UcmVlLmxlbmd0aC0xXS5mb3JFYWNoKG49Pm4uaXNDb25uZWN0ZWQmJm4ubm90aWZ5UGF0aCYmbi5ub3RpZnlQYXRoKCJfY2VsbHMuKiIsbi5fY2VsbHMpKSxtZ3QodGhpcywoKT0+e3RoaXMuX3VwZGF0ZUZpcnN0QW5kTGFzdENvbHVtbigpLHRoaXMuX3Jlc2V0S2V5Ym9hcmROYXZpZ2F0aW9uKCl9KSxyfV9nZXRSb3dUYXJnZXQoKXtyZXR1cm4gdGhpcy4kLml0ZW1zfV9jcmVhdGVDZWxsKHQpe2xldCByPXRoaXMuX2NvbnRlbnRJbmRleD10aGlzLl9jb250ZW50SW5kZXgrMXx8MCxuPSJ2YWFkaW4tZ3JpZC1jZWxsLWNvbnRlbnQtIityLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmFhZGluLWdyaWQtY2VsbC1jb250ZW50Iik7aS5zZXRBdHRyaWJ1dGUoInNsb3QiLG4pO2xldCBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCk7by5pZD1uLnJlcGxhY2UoIi1jb250ZW50LSIsIi0iKSxvLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLG8uc2V0QXR0cmlidXRlKCJyb2xlIix0PT09InRkIj8iZ3JpZGNlbGwiOiJjb2x1bW5oZWFkZXIiKTtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzbG90Iik7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJuYW1lIixuKSxvLmFwcGVuZENoaWxkKGEpLG8uX2NvbnRlbnQ9aSxpLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsKCk9PntpZih3aW5kb3cuY2hyb21lKXtsZXQgcz0oKT0+e2kuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHxvLmZvY3VzKCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIscywhMCl9O2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHMsITApfWVsc2Ugc2V0VGltZW91dCgoKT0+e2kuY29udGFpbnModGhpcy5nZXRSb290Tm9kZSgpLmFjdGl2ZUVsZW1lbnQpfHxvLmZvY3VzKCl9KX0pLG99X3VwZGF0ZVJvdyh0LHIsbixpLG8pe249bnx8ImJvZHkiO2xldCBhPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtBcnJheS5mcm9tKHQuY2hpbGRyZW4pLmZvckVhY2gocz0+cy5fdmFjYW50PSEwKSx0LmlubmVySFRNTD0iIix0LmlkIT09InNpemVyIiYmKHQuaGlkZGVuPSEwKSxyLmZpbHRlcihzPT4hcy5oaWRkZW4pLmZvckVhY2goKHMsbCxjKT0+e2xldCB1O2lmKG49PT0iYm9keSIpe2lmKHMuX2NlbGxzPXMuX2NlbGxzfHxbXSx1PXMuX2NlbGxzLmZpbHRlcihoPT5oLl92YWNhbnQpWzBdLHV8fCh1PXRoaXMuX2NyZWF0ZUNlbGwoInRkIikscy5fY2VsbHMucHVzaCh1KSksdS5zZXRBdHRyaWJ1dGUoInBhcnQiLCJjZWxsIGJvZHktY2VsbCIpLHQuYXBwZW5kQ2hpbGQodSksbD09PWMubGVuZ3RoLTEmJih0aGlzLl9yb3dEZXRhaWxzVGVtcGxhdGV8fHRoaXMucm93RGV0YWlsc1JlbmRlcmVyKSl7dGhpcy5fZGV0YWlsc0NlbGxzPXRoaXMuX2RldGFpbHNDZWxsc3x8W107bGV0IGg9dGhpcy5fZGV0YWlsc0NlbGxzLmZpbHRlcihmPT5mLl92YWNhbnQpWzBdfHx0aGlzLl9jcmVhdGVDZWxsKCJ0ZCIpO3RoaXMuX2RldGFpbHNDZWxscy5pbmRleE9mKGgpPT09LTEmJnRoaXMuX2RldGFpbHNDZWxscy5wdXNoKGgpLGguX2NvbnRlbnQucGFyZW50RWxlbWVudHx8YS5hcHBlbmRDaGlsZChoLl9jb250ZW50KSx0aGlzLl9jb25maWd1cmVEZXRhaWxzQ2VsbChoKSx0LmFwcGVuZENoaWxkKGgpLHRoaXMuX2ExMXlTZXRSb3dEZXRhaWxzQ2VsbCh0LGgpLGguX3ZhY2FudD0hMX1zLm5vdGlmeVBhdGgmJiFvJiZzLm5vdGlmeVBhdGgoIl9jZWxscy4qIixzLl9jZWxscyl9ZWxzZXtsZXQgaD1uPT09ImhlYWRlciI/InRoIjoidGQiO2l8fHMubG9jYWxOYW1lPT09InZhYWRpbi1ncmlkLWNvbHVtbi1ncm91cCI/KHU9c1tgXyR7bn1DZWxsYF18fHRoaXMuX2NyZWF0ZUNlbGwoaCksdS5fY29sdW1uPXMsdC5hcHBlbmRDaGlsZCh1KSxzW2BfJHtufUNlbGxgXT11KToocy5fZW1wdHlDZWxscz1zLl9lbXB0eUNlbGxzfHxbXSx1PXMuX2VtcHR5Q2VsbHMuZmlsdGVyKGY9PmYuX3ZhY2FudClbMF18fHRoaXMuX2NyZWF0ZUNlbGwoaCksdS5fY29sdW1uPXMsdC5hcHBlbmRDaGlsZCh1KSxzLl9lbXB0eUNlbGxzLmluZGV4T2YodSk9PT0tMSYmcy5fZW1wdHlDZWxscy5wdXNoKHUpKSx1LnNldEF0dHJpYnV0ZSgicGFydCIsYGNlbGwgJHtufS1jZWxsYCksdGhpcy5fX3VwZGF0ZUhlYWRlckZvb3RlclJvd1Zpc2liaWxpdHkodCl9dS5fY29udGVudC5wYXJlbnRFbGVtZW50fHxhLmFwcGVuZENoaWxkKHUuX2NvbnRlbnQpLHUuX3ZhY2FudD0hMSx1Ll9jb2x1bW49c30pLHRoaXMuYXBwZW5kQ2hpbGQoYSksdGhpcy5fZnJvemVuQ2VsbHNDaGFuZ2VkKCksdGhpcy5fdXBkYXRlRmlyc3RBbmRMYXN0Q29sdW1uRm9yUm93KHQpfV9fdXBkYXRlSGVhZGVyRm9vdGVyUm93VmlzaWJpbGl0eSh0KXtpZighdClyZXR1cm47bGV0IHI9QXJyYXkuZnJvbSh0LmNoaWxkcmVuKS5maWx0ZXIobj0+e2xldCBpPW4uX2NvbHVtbjtpZihpLl9lbXB0eUNlbGxzJiZpLl9lbXB0eUNlbGxzLmluZGV4T2Yobik+LTEpcmV0dXJuITE7aWYodC5wYXJlbnRFbGVtZW50PT09dGhpcy4kLmhlYWRlcil7aWYoaS5oZWFkZXJSZW5kZXJlcnx8aS5faGVhZGVyVGVtcGxhdGUpcmV0dXJuITA7aWYoaS5oZWFkZXI9PT1udWxsKXJldHVybiExO2lmKGkucGF0aHx8aS5oZWFkZXIhPT12b2lkIDApcmV0dXJuITB9ZWxzZSBpZihpLmZvb3RlclJlbmRlcmVyfHxpLl9mb290ZXJUZW1wbGF0ZSlyZXR1cm4hMH0pO3QuaGlkZGVuIT09IXIubGVuZ3RoJiYodC5oaWRkZW49IXIubGVuZ3RoLHRoaXMubm90aWZ5UmVzaXplKCkpfV91cGRhdGVTY3JvbGxlckl0ZW0odCxyKXt0aGlzLl9wcmV2ZW50U2Nyb2xsZXJSb3RhdGluZ0NlbGxGb2N1cyh0LHIpLHRoaXMuX2NvbHVtblRyZWUmJih0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImZpcnN0IixyPT09MCx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoIm9kZCIsciUyLHQpLHRoaXMuX2ExMXlVcGRhdGVSb3dSb3dpbmRleCh0LHIpLHRoaXMuX2dldEl0ZW0ocix0KSl9X2NvbHVtblRyZWVDaGFuZ2VkKHQpe3RoaXMuX3JlbmRlckNvbHVtblRyZWUodCksdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbldpZHRocygpfV9yZW5kZXJDb2x1bW5UcmVlKHQpe2ZvcihBcnJheS5mcm9tKHRoaXMuJC5pdGVtcy5jaGlsZHJlbikuZm9yRWFjaChyPT50aGlzLl91cGRhdGVSb3cocix0W3QubGVuZ3RoLTFdLG51bGwsITEsITApKTt0aGlzLiQuaGVhZGVyLmNoaWxkcmVuLmxlbmd0aDx0Lmxlbmd0aDspe2xldCByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7ci5zZXRBdHRyaWJ1dGUoInBhcnQiLCJyb3ciKSxyLnNldEF0dHJpYnV0ZSgicm9sZSIsInJvdyIpLHRoaXMuJC5oZWFkZXIuYXBwZW5kQ2hpbGQocik7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTtuLnNldEF0dHJpYnV0ZSgicGFydCIsInJvdyIpLG4uc2V0QXR0cmlidXRlKCJyb2xlIiwicm93IiksdGhpcy4kLmZvb3Rlci5hcHBlbmRDaGlsZChuKX1mb3IoO3RoaXMuJC5oZWFkZXIuY2hpbGRyZW4ubGVuZ3RoPnQubGVuZ3RoOyl0aGlzLiQuaGVhZGVyLnJlbW92ZUNoaWxkKHRoaXMuJC5oZWFkZXIuZmlyc3RFbGVtZW50Q2hpbGQpLHRoaXMuJC5mb290ZXIucmVtb3ZlQ2hpbGQodGhpcy4kLmZvb3Rlci5maXJzdEVsZW1lbnRDaGlsZCk7QXJyYXkuZnJvbSh0aGlzLiQuaGVhZGVyLmNoaWxkcmVuKS5mb3JFYWNoKChyLG4pPT50aGlzLl91cGRhdGVSb3cocix0W25dLCJoZWFkZXIiLG49PT10Lmxlbmd0aC0xKSksQXJyYXkuZnJvbSh0aGlzLiQuZm9vdGVyLmNoaWxkcmVuKS5mb3JFYWNoKChyLG4pPT50aGlzLl91cGRhdGVSb3cocix0W3QubGVuZ3RoLTEtbl0sImZvb3RlciIsbj09PTApKSx0aGlzLl91cGRhdGVSb3codGhpcy4kLnNpemVyLHRbdC5sZW5ndGgtMV0pLHRoaXMuX3Jlc2l6ZUhhbmRsZXIoKSx0aGlzLl9mcm96ZW5DZWxsc0NoYW5nZWQoKSx0aGlzLl91cGRhdGVGaXJzdEFuZExhc3RDb2x1bW4oKSx0aGlzLl9yZXNldEtleWJvYXJkTmF2aWdhdGlvbigpLHRoaXMuX2ExMXlVcGRhdGVIZWFkZXJSb3dzKCksdGhpcy5fYTExeVVwZGF0ZUZvb3RlclJvd3MoKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fX3VwZGF0ZUZvb3RlclBvc2l0aW9uaW5nKCl7dGhpcy5fZmlyZWZveCYmKHRoaXMuJC5pdGVtcy5zdHlsZS5wYWRkaW5nQm90dG9tPTAsdGhpcy5oZWlnaHRCeVJvd3N8fCh0aGlzLiQuaXRlbXMuc3R5bGUucGFkZGluZ0JvdHRvbT1gJHt0aGlzLiQuZm9vdGVyLm9mZnNldEhlaWdodH1weGApKSx0aGlzLl9pb3MmJiF3aW5kb3cuQ1NTLnN1cHBvcnRzKCJwb3NpdGlvbiIsInN0aWNreSIpJiYodGhpcy4kLnRhYmxlLnN0eWxlLmhlaWdodD0iIix0aGlzLiQudGFibGUuc3R5bGUubWluSGVpZ2h0PSIxMDAlIix0aGlzLiQudGFibGUuc3R5bGUubWF4SGVpZ2h0PSIxMDAlIixzZXRUaW1lb3V0KCgpPT50aGlzLiQudGFibGUuc3R5bGUuaGVpZ2h0PWAke3RoaXMuJC5zY3JvbGxlci5vZmZzZXRIZWlnaHR9cHhgKSl9X3VwZGF0ZUl0ZW0odCxyKXt0Ll9pdGVtPXI7bGV0IG49dGhpcy5fX2dldFJvd01vZGVsKHQpO3RoaXMuX3RvZ2dsZUF0dHJpYnV0ZSgic2VsZWN0ZWQiLG4uc2VsZWN0ZWQsdCksdGhpcy5fYTExeVVwZGF0ZVJvd1NlbGVjdGVkKHQsbi5zZWxlY3RlZCksdGhpcy5fYTExeVVwZGF0ZVJvd0xldmVsKHQsbi5sZXZlbCksdGhpcy5fdG9nZ2xlQXR0cmlidXRlKCJleHBhbmRlZCIsbi5leHBhbmRlZCx0KSx0aGlzLl90b2dnbGVBdHRyaWJ1dGUoImRldGFpbHMtb3BlbmVkIix0aGlzLl9pc0RldGFpbHNPcGVuZWQociksdCksKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl90b2dnbGVEZXRhaWxzQ2VsbCh0LHIpLHRoaXMuX2dlbmVyYXRlQ2VsbENsYXNzTmFtZXModCxuKSx0aGlzLl9maWx0ZXJEcmFnQW5kRHJvcCh0LG4pLEFycmF5LmZyb20odC5jaGlsZHJlbikuZm9yRWFjaChpPT57aWYoaS5fcmVuZGVyZXIpe2xldCBvPWkuX2NvbHVtbnx8dGhpcztpLl9yZW5kZXJlci5jYWxsKG8saS5fY29udGVudCxvLG4pfWVsc2UgaS5faW5zdGFuY2UmJihpLl9pbnN0YW5jZS5fX2RldGFpbHNPcGVuZWRfXz1uLmRldGFpbHNPcGVuZWQsaS5faW5zdGFuY2UuX19zZWxlY3RlZF9fPW4uc2VsZWN0ZWQsaS5faW5zdGFuY2UuX19sZXZlbF9fPW4ubGV2ZWwsaS5faW5zdGFuY2UuX19leHBhbmRlZF9fPW4uZXhwYW5kZWQsaS5faW5zdGFuY2Uuc2V0UHJvcGVydGllcyhuKSl9KSx0aGlzLl9kZWJvdW5jZXJVcGRhdGVIZWlnaHRzPXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlclVwZGF0ZUhlaWdodHMsbW8uYWZ0ZXIoMSksKCk9Pnt0aGlzLl91cGRhdGVNZXRyaWNzKCksdGhpcy5fcG9zaXRpb25JdGVtcygpLHRoaXMuX3VwZGF0ZVNjcm9sbGVyU2l6ZSgpfSl9X3Jlc2l6ZUhhbmRsZXIoKXt0aGlzLl91cGRhdGVEZXRhaWxzQ2VsbEhlaWdodHMoKSx0aGlzLl9hY2Nlc3NJcm9uTGlzdEFQSShzdXBlci5fcmVzaXplSGFuZGxlciwhMCksdGhpcy5fdXBkYXRlU2Nyb2xsZXJNZWFzdXJlbWVudHMoKSx0aGlzLl9fdXBkYXRlRm9vdGVyUG9zaXRpb25pbmcoKX1fb25BbmltYXRpb25FbmQodCl7dC5hbmltYXRpb25OYW1lLmluZGV4T2YoInZhYWRpbi1ncmlkLWFwcGVhciIpPT09MCYmKHRoaXMuX3JlbmRlcigpLHQuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5ub3RpZnlSZXNpemUoKSx0aGlzLl9faXRlbXNSZWNlaXZlZCgpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuX19zY3JvbGxUb1BlbmRpbmdJbmRleCgpLHRoaXMuJC50YWJsZS5zdHlsZS53ZWJraXRPdmVyZmxvd1Njcm9sbGluZz0idG91Y2gifSkpfV90b2dnbGVBdHRyaWJ1dGUodCxyLG4pe24uaGFzQXR0cmlidXRlKHQpPT09IXImJihyP24uc2V0QXR0cmlidXRlKHQsIiIpOm4ucmVtb3ZlQXR0cmlidXRlKHQpKX1fX2dldFJvd01vZGVsKHQpe3JldHVybntpbmRleDp0LmluZGV4LGl0ZW06dC5faXRlbSxsZXZlbDp0aGlzLl9nZXRJbmRleExldmVsKHQuaW5kZXgpLGV4cGFuZGVkOnRoaXMuX2lzRXhwYW5kZWQodC5faXRlbSksc2VsZWN0ZWQ6dGhpcy5faXNTZWxlY3RlZCh0Ll9pdGVtKSxkZXRhaWxzT3BlbmVkOiEhKHRoaXMuX3Jvd0RldGFpbHNUZW1wbGF0ZXx8dGhpcy5yb3dEZXRhaWxzUmVuZGVyZXIpJiZ0aGlzLl9pc0RldGFpbHNPcGVuZWQodC5faXRlbSl9fXJlbmRlcigpe3RoaXMuX2NvbHVtblRyZWUmJih0aGlzLl9jb2x1bW5UcmVlLmZvckVhY2godD0+e3QuZm9yRWFjaChyPT5yLl9yZW5kZXJIZWFkZXJBbmRGb290ZXIoKSl9KSx0aGlzLl91cGRhdGUoKSl9bm90aWZ5UmVzaXplKCl7c3VwZXIubm90aWZ5UmVzaXplKCl9X2hlaWdodEJ5Um93c0NoYW5nZWQodCxyKXsodHx8cikmJnRoaXMubm90aWZ5UmVzaXplKCl9X19mb3JjZVJlZmxvdygpe3RoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93PXNyLmRlYm91bmNlKHRoaXMuX2RlYm91bmNlckZvcmNlUmVmbG93LE5pLCgpPT57dGhpcy4kLnNjcm9sbGVyLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLHNldFRpbWVvdXQoKCk9PnRoaXMuJC5zY3JvbGxlci5zdHlsZS5vdmVyZmxvdz0iIil9KX19O2N1c3RvbUVsZW1lbnRzLmRlZmluZShlVi5pcyxlVik7ZnVuY3Rpb24gc3VlKGUsdCl7cmV0dXJuIE5ndChlLHQpfXZhciBjdj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9ydW49IiJ9X2NzdlVybCh0LHIsbil7cmV0dXJuIHI/Q24obih0LHIpLHtmb3JtYXQ6ImNzdiJ9KToiIn1fanNvblVybCh0LHIsbil7cmV0dXJuIHI/bih0LHIpOiIifV9jc3ZOYW1lKHQscil7cmV0dXJuIHI/YHJ1bi0ke3J9LXRhZy0ke3R9LmNzdmA6IiJ9X2pzb25OYW1lKHQscil7cmV0dXJuIHI/YHJ1bi0ke3J9LXRhZy0ke3R9Lmpzb25gOiIifX07Y3YudGVtcGxhdGU9UWAKICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgIG5vLWxhYmVsLWZsb2F0PSJ0cnVlIgogICAgICBsYWJlbD0icnVuIHRvIGRvd25sb2FkIgogICAgICBzZWxlY3RlZC1pdGVtLWxhYmVsPSJ7e19ydW59fSIKICAgID4KICAgICAgPHBhcGVyLWxpc3Rib3ggc2xvdD0iZHJvcGRvd24tY29udGVudCI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tydW5zXV0iPgogICAgICAgICAgPHBhcGVyLWl0ZW0gbm8tbGFiZWwtZmxvYXQ9InRydWUiPltbaXRlbV1dPC9wYXBlci1pdGVtPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfcnVuXV0iPgogICAgICA8YSBkb3dubG9hZD0iW1tfY3N2TmFtZSh0YWcsIF9ydW4pXV0iIGhyZWY9IltbX2NzdlVybCh0YWcsIF9ydW4sIHVybEZuKV1dIgogICAgICAgID5DU1Y8L2EKICAgICAgPjwhLS0KICAgICAgLS0+PGEKICAgICAgICBkb3dubG9hZD0iW1tfanNvbk5hbWUodGFnLCBfcnVuKV1dIgogICAgICAgIGhyZWY9IltbX2pzb25VcmwodGFnLCBfcnVuLCB1cmxGbildXSIKICAgICAgICA+SlNPTjwvYQogICAgICA+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQogICAgICBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICB3aWR0aDogMTAwcHg7CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItbGFiZWw6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgICAgLS1wYXBlci1pbnB1dC1jb250YWluZXItaW5wdXQ6IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICB9CiAgICAgIH0KICAgICAgYSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMCAwLjJlbTsKICAgICAgfQogICAgICBwYXBlci1pbnB1dCB7CiAgICAgICAgZm9udC1zaXplOiAyMnB4OwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sY3YucHJvdG90eXBlLCJfcnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxjdi5wcm90b3R5cGUsInJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sY3YucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sY3YucHJvdG90eXBlLCJ1cmxGbiIsdm9pZCAwKTtjdj1FKFt5dCgidGYtZG93bmxvYWRlciIpXSxjdik7dmFyIG9ocj02NCxwbGk9bmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKSxXbj1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNvbG9yU2NhbGU9bnVsbCx0aGlzLl9sb2FkRGF0YUNhbGxiYWNrPSh0LHIsbik9PntpZihuPT1udWxsKXtjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gbG9hZCBkYXRhIGZvcjoiLHIpO3JldHVybn1sZXQgaT1uLm1hcChhPT4oe3dhbGxfdGltZTpuZXcgRGF0ZShhWzBdKjFlMyksc3RlcDphWzFdLHNjYWxhcjphWzJdfSkpLG89dGhpcy5fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bShyKTt0LnNldFNlcmllc01ldGFkYXRhKG8sciksdC5zZXRTZXJpZXNEYXRhKG8saSl9LHRoaXMuZ2V0RGF0YUxvYWRVcmw9KHt0YWc6dCxydW46cn0pPT52ZSgpLnBsdWdpblJvdXRlKCJzY2FsYXJzIiwiL3NjYWxhcnMiLG5ldyBVUkxTZWFyY2hQYXJhbXMoe3RhZzp0LHJ1bjpyfSkpLHRoaXMuX2Rvd25sb2FkVXJsRm49KHQscik9PnRoaXMuZ2V0RGF0YUxvYWRVcmwoe3RhZzp0LHJ1bjpyfSksdGhpcy5yZXF1ZXN0RGF0YT0odCxyLG4pPT50aGlzLmluQ29sYWI/dGhpcy5fcmVxdWVzdERhdGFHZXQodCxyLG4pOnRoaXMuX3JlcXVlc3REYXRhUG9zdCh0LHIsbiksdGhpcy5fcmVxdWVzdERhdGFHZXQ9KHQscixuKT0+e2xldCBvPXZlKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvc2NhbGFycyIpO1Byb21pc2UuYWxsKHQubWFwKGE9PntsZXQgcz1DbihvLHt0YWc6YS50YWcscnVuOmEucnVufSk7cmV0dXJuIHRoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChzKS50aGVuKGw9PnZvaWQgcih7aXRlbTphLGRhdGE6bH0pKX0pKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX3JlcXVlc3REYXRhUG9zdD0odCxyLG4pPT57dmFyIGM7bGV0IG89dmUoKS5wbHVnaW5Sb3V0ZSgic2NhbGFycyIsIi9zY2FsYXJzX211bHRpcnVuIiksYT1uZXcgTWFwO2ZvcihsZXR7dGFnOnUscnVuOmh9b2YgdCl7bGV0IGY9YS5nZXQodSk7Zj09bnVsbCYmYS5zZXQodSxmPVtdKSxmLnB1c2goaCl9bGV0IHM9KGM9dGhpcy5iYXRjaFNpemUpIT1udWxsP2M6b2hyLGw9W107Zm9yKGxldFt1LGhdb2YgYSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrPXMpbC5wdXNoKHt0YWc6dSxydW5zOmguc2xpY2UoZixmK3MpfSk7UHJvbWlzZS5hbGwobC5tYXAoKHt0YWc6dSxydW5zOmh9KT0+dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KG8se3RhZzp1LHJ1bnM6aH0pLnRoZW4oZj0+e2ZvcihsZXQgcCBvZiBoKXtsZXQgZD17dGFnOnUscnVuOnB9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLHApP3Ioe2l0ZW06ZCxkYXRhOmZbcF19KTpyKHtpdGVtOmQsZGF0YTpudWxsfSl9fSkpKS5maW5hbGx5KCgpPT52b2lkIG4oKSl9LHRoaXMuX2dldERhdGFMb2FkTmFtZT10PT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHQpLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3Rvb2x0aXBDb2x1bW5zPSgoKT0+e2xldCB0PW9zdC5zbGljZSgpLHI9dC5maW5kSW5kZXgobj0+bi50aXRsZT09Ik5hbWUiKTtyZXR1cm4gdC5zcGxpY2UociwxLHt0aXRsZToiTmFtZSIsZXZhbHVhdGU6bj0+e2xldCBpPW4uZGF0YXNldC5tZXRhZGF0YSgpLm1ldGE7cmV0dXJuIHRoaXMuX2dldFNlcmllc0Rpc3BsYXlOYW1lRnJvbURhdHVtKGkpfX0pLHR9KSgpfV9nZXRDaGFydERhdGFMb2FkZXIoKXt2YXIgdDtyZXR1cm4odD10aGlzLnNoYWRvd1Jvb3QpPT1udWxsP3ZvaWQgMDp0LnF1ZXJ5U2VsZWN0b3IoInRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIiKX1yZWxvYWQoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWxvYWQoKX1yZWRyYXcoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWRyYXcoKX1fdG9nZ2xlRXhwYW5kZWQodCl7dGhpcy5zZXQoIl9leHBhbmRlZCIsIXRoaXMuX2V4cGFuZGVkKSx0aGlzLnJlZHJhdygpfV90b2dnbGVMb2dTY2FsZSgpe3RoaXMuc2V0KCJfbG9nU2NhbGVBY3RpdmUiLCF0aGlzLl9sb2dTY2FsZUFjdGl2ZSl9X3Jlc2V0RG9tYWluKCl7bGV0IHQ9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7dCYmdC5yZXNldERvbWFpbigpfV91cGRhdGVEb3dubG9hZExpbmsoKXt2YXIgbjtsZXQgdD10aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5leHBvcnRBc1N2Z1N0cmluZygpLHI9KG49dGhpcy5zaGFkb3dSb290KT09bnVsbD92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKCIjc3ZnTGluayIpO3IuaHJlZj1gZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke2J0b2EodCl9YH1fcnVuc0Zyb21EYXRhKHQpe3JldHVybiB0Lm1hcChyPT5yLnJ1bil9X2dldERhdGFTZXJpZXMoKXtyZXR1cm4gdGhpcy5kYXRhVG9Mb2FkLm1hcCh0PT50aGlzLl9nZXRTZXJpZXNOYW1lRnJvbURhdHVtKHQpKX1fZ2V0U2VyaWVzTmFtZUZyb21EYXR1bSh7cnVuOnQsZXhwZXJpbWVudDpyPXtuYW1lOiJfZGVmYXVsdCJ9fSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtyLm5hbWUsdF0pfV9nZXRTZXJpZXNEaXNwbGF5TmFtZUZyb21EYXR1bSh0KXtyZXR1cm4gdC5ydW59X2dldENvbG9yU2NhbGUoKXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlIT09bnVsbD90aGlzLmNvbG9yU2NhbGU6e3NjYWxlOnQ9PntsZXRbLHJdPUpTT04ucGFyc2UodCk7cmV0dXJuIGZuKHIpfX19fTtXbi50ZW1wbGF0ZT1RYAogICAgPHRmLWNhcmQtaGVhZGluZwogICAgICB0YWc9IltbdGFnXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgPjwvdGYtY2FyZC1oZWFkaW5nPgogICAgPGRpdiBpZD0idGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIiPgogICAgICA8dGYtbGluZS1jaGFydC1kYXRhLWxvYWRlcgogICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICBjb2xvci1zY2FsZT0iW1tfZ2V0Q29sb3JTY2FsZShjb2xvclNjYWxlKV1dIgogICAgICAgIGRhdGEtc2VyaWVzPSJbW19nZXREYXRhU2VyaWVzKGRhdGFUb0xvYWQuKildXSIKICAgICAgICBkYXRhLXRvLWxvYWQ9IltbZGF0YVRvTG9hZF1dIgogICAgICAgIGdldC1kYXRhLWxvYWQtbmFtZT0iW1tfZ2V0RGF0YUxvYWROYW1lXV0iCiAgICAgICAgZ2V0LWRhdGEtbG9hZC11cmw9IltbZ2V0RGF0YUxvYWRVcmxdXSIKICAgICAgICByZXF1ZXN0LWRhdGE9IltbcmVxdWVzdERhdGFdXSIKICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tpZ25vcmVZT3V0bGllcnNdXSIKICAgICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2xvYWREYXRhQ2FsbGJhY2tdXSIKICAgICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgICBsb2ctc2NhbGUtYWN0aXZlPSJbW19sb2dTY2FsZUFjdGl2ZV1dIgogICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tyZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgIHNtb290aGluZy1lbmFibGVkPSJbW3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICBzbW9vdGhpbmctd2VpZ2h0PSJbW3Ntb290aGluZ1dlaWdodF1dIgogICAgICAgIHRhZy1tZXRhZGF0YT0iW1t0YWdNZXRhZGF0YV1dIgogICAgICAgIHRvb2x0aXAtY29sdW1ucz0iW1tfdG9vbHRpcENvbHVtbnNdXSIKICAgICAgICB0b29sdGlwLXBvc2l0aW9uPSJhdXRvIgogICAgICAgIHRvb2x0aXAtc29ydGluZy1tZXRob2Q9IltbdG9vbHRpcFNvcnRpbmdNZXRob2RdXSIKICAgICAgICB4LXR5cGU9IltbeFR5cGVdXSIKICAgICAgPgogICAgICA8L3RmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXI+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImJ1dHRvbnMiPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBzZWxlY3RlZCQ9IltbX2V4cGFuZGVkXV0iCiAgICAgICAgaWNvbj0iZnVsbHNjcmVlbiIKICAgICAgICBvbi10YXA9Il90b2dnbGVFeHBhbmRlZCIKICAgICAgPjwvcGFwZXItaWNvbi1idXR0b24+CiAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgIHNlbGVjdGVkJD0iW1tfbG9nU2NhbGVBY3RpdmVdXSIKICAgICAgICBpY29uPSJsaW5lLXdlaWdodCIKICAgICAgICBvbi10YXA9Il90b2dnbGVMb2dTY2FsZSIKICAgICAgICB0aXRsZT0iVG9nZ2xlIHktYXhpcyBsb2cgc2NhbGUiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iRml0IGRvbWFpbiB0byBkYXRhIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW3Nob3dEb3dubG9hZExpbmtzXV0iPgogICAgICAgIDxwYXBlci1tZW51LWJ1dHRvbiBvbi1wYXBlci1kcm9wZG93bi1vcGVuPSJfdXBkYXRlRG93bmxvYWRMaW5rIj4KICAgICAgICAgIDxwYXBlci1pY29uLWJ1dHRvbgogICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgc2xvdD0iZHJvcGRvd24tdHJpZ2dlciIKICAgICAgICAgICAgaWNvbj0iZmlsZS1kb3dubG9hZCIKICAgICAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICAgICAgPHBhcGVyLWxpc3Rib3ggY2xhc3M9ImRyb3Bkb3duLWNvbnRlbnQiIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiPgogICAgICAgICAgICA8cGFwZXItaXRlbT4KICAgICAgICAgICAgICA8YSBpZD0ic3ZnTGluayIgZG93bmxvYWQ9IltbdGFnXV0uc3ZnIj4KICAgICAgICAgICAgICAgIERvd25sb2FkIEN1cnJlbnQgQ2hhcnQgYXMgU1ZHCiAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8L3BhcGVyLWl0ZW0+CiAgICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgICAgPC9wYXBlci1tZW51LWJ1dHRvbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHNwYW4gc3R5bGU9ImZsZXgtZ3JvdzogMSI+PC9zcGFuPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9Iltbc2hvd0Rvd25sb2FkTGlua3NdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZG93bmxvYWQtbGlua3MiPgogICAgICAgICAgPHRmLWRvd25sb2FkZXIKICAgICAgICAgICAgcnVucz0iW1tfcnVuc0Zyb21EYXRhKGRhdGFUb0xvYWQpXV0iCiAgICAgICAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgICAgICAgdXJsLWZuPSJbW19kb3dubG9hZFVybEZuXV0iCiAgICAgICAgICA+PC90Zi1kb3dubG9hZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBtYXJnaW46IDVweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMzMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtfZXhwYW5kZWRdKSAjdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlci1jb250YWluZXIgewogICAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIH0KCiAgICAgICN0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyLWNvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgdGYtY2FyZC1oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICB9CgogICAgICAjYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbltzZWxlY3RlZF0gewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIH0KCiAgICAgIC5kb3dubG9hZC1saW5rcyBhIHsKICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIG1hcmdpbjogMnB4OwogICAgICB9CgogICAgICAuZG93bmxvYWQtbGlua3MgcGFwZXItZHJvcGRvd24tbWVudSB7CiAgICAgICAgd2lkdGg6IDEwMHB4OwogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWxhYmVsOiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICAgIC0tcGFwZXItaW5wdXQtY29udGFpbmVyLWlucHV0OiB7CiAgICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgfQogICAgICB9CgogICAgICBwYXBlci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICBwYXBlci1pdGVtIGEgewogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV24ucHJvdG90eXBlLCJ0YWciLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFduLnByb3RvdHlwZSwiZGF0YVRvTG9hZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxXbi5wcm90b3R5cGUsInhUeXBlIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sV24ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsImlnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixBZSldLFduLnByb3RvdHlwZSwicmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsInNob3dEb3duTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsInNtb290aGluZ0VuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sV24ucHJvdG90eXBlLCJzbW9vdGhpbmdXZWlnaHQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sV24ucHJvdG90eXBlLCJ0YWdNZXRhZGF0YSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxXbi5wcm90b3R5cGUsImNvbG9yU2NhbGUiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sV24ucHJvdG90eXBlLCJ0b29sdGlwU29ydGluZ01ldGhvZCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxXbi5wcm90b3R5cGUsImJhdGNoU2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sV24ucHJvdG90eXBlLCJpbkNvbGFiIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2xvYWREYXRhQ2FsbGJhY2siLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxXbi5wcm90b3R5cGUsImdldERhdGFMb2FkVXJsIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2Rvd25sb2FkVXJsRm4iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pXSxXbi5wcm90b3R5cGUsInJlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFduLnByb3RvdHlwZSwiX2dldERhdGFMb2FkTmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4scmVmbGVjdFRvQXR0cmlidXRlOiEwfSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxXbi5wcm90b3R5cGUsIl9leHBhbmRlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFduLnByb3RvdHlwZSwiX2xvZ1NjYWxlQWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxXbi5wcm90b3R5cGUsIl90b29sdGlwQ29sdW1ucyIsdm9pZCAwKTtXbj1FKFt5dCgidGYtc2NhbGFyLWNhcmQiKV0sV24pO3ZhciBWcz1jbGFzcyBleHRlbmRzIHN1ZShbdVddLG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZXNzaW9uR3JvdXA9bnVsbCx0aGlzLl94VHlwZT1FZC5TVEVQLHRoaXMuX25vTXVsdGlFeHBlcmltZW50cz0hMSx0aGlzLl9yZXF1ZXN0RGF0YT0odCxyLG4pPT57UHJvbWlzZS5hbGwodC5tYXAoaT0+e2xldCBvPXtleHBlcmltZW50TmFtZTp0aGlzLmV4cGVyaW1lbnROYW1lLHNlc3Npb25OYW1lOmkucnVuLG1ldHJpY05hbWU6aS50YWd9O3JldHVybiB0aGlzLmJhY2tlbmQubGlzdE1ldHJpY0V2YWxzKG8pLnRoZW4oYT0+dm9pZCByKHtpdGVtOmksZGF0YTphfSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fY29sb3JTY2FsZT17c2NhbGU6dD0+e2xldCByPUpTT04ucGFyc2UodClbMV0sbj10aGlzLl9pbmRleE9mU2Vzc2lvbi5nZXQociksaT1uUjtyZXR1cm4gaVsodGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2grbiklaS5sZW5ndGhdfX19Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiaXJvbi1yZXNpemUiLHRoaXMucmVkcmF3LmJpbmQodGhpcykpfXJlZHJhdygpe3ZhciB0Oyh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtc2NhbGFyLWNhcmQiKS5mb3JFYWNoKHI9PntyLnJlZHJhdygpfSl9X3Nlc3Npb25Hcm91cENoYW5nZWQoKXt2YXIgdDshdGhpcy5zZXNzaW9uR3JvdXB8fE9iamVjdC5rZXlzKHRoaXMuc2Vzc2lvbkdyb3VwKS5sZW5ndGg9PTA/KHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAsdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9MCk6KHRoaXMuX2luZGV4T2ZTZXNzaW9uPW5ldyBNYXAodGhpcy5zZXNzaW9uR3JvdXAuc2Vzc2lvbnMubWFwKChyLG4pPT5bci5uYW1lLG5dKSksdGhpcy5fc2Vzc2lvbkdyb3VwTmFtZUhhc2g9bWN0KHRoaXMuc2Vzc2lvbkdyb3VwLm5hbWUpKSwodD10aGlzLnNoYWRvd1Jvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaChyPT57bGV0IG49cixpPW4uZ2V0KCJ0YWciKTtuLnNldCgidGFnIiwiIiksbi5zZXQoInRhZyIsaSl9KX1faGF2ZU1ldHJpY3MoKXtyZXR1cm4gdGhpcy52aXNpYmxlU2NoZW1hJiZBcnJheS5pc0FycmF5KHRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcykmJnRoaXMudmlzaWJsZVNjaGVtYS5tZXRyaWNJbmZvcy5sZW5ndGg+MH1faGF2ZU1ldHJpY3NBbmRTZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAmJnRoaXMuX2hhdmVNZXRyaWNzKCl9X2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWModCxyKXtyZXR1cm4gdD09PW51bGx8fE9iamVjdC5rZXlzKHQpLmxlbmd0aD09MHx8cj09PW51bGw/W106dC5zZXNzaW9ucy5maWx0ZXIobj0+ZjMobi5tZXRyaWNWYWx1ZXMsci5uYW1lKSE9PXZvaWQgMCkubWFwKG49Pih7dGFnOnIubmFtZSxydW46bi5uYW1lfSkpfV9jb21wdXRlVGFnTWV0YWRhdGEodCl7cmV0dXJue2Rpc3BsYXlOYW1lOlF1KHQpLGRlc2NyaXB0aW9uOnQuZGVzY3JpcHRpb258fCIifX19O1ZzLnRlbXBsYXRlPVFgCiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIXNlc3Npb25Hcm91cF1dIj4KICAgICAgPGRpdj4KICAgICAgICA8aDM+Tm8gc2Vzc2lvbiBncm91cCBzZWxlY3RlZDwvaDM+CiAgICAgICAgPHA+UGxlYXNlIHNlbGVjdCBhIHNlc3Npb24gZ3JvdXAgdG8gc2VlIGl0cyBtZXRyaWMtZ3JhcGhzIGhlcmUuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CiAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9oYXZlTWV0cmljcyh2aXNpYmxlU2NoZW1hLiopXV0iPgogICAgICA8ZGl2PgogICAgICAgIDxoMz5ObyBtZXRyaWNzIGFyZSBlbmFibGVkPC9oMz4KICAgICAgICA8cD5QbGVhc2UgZW5hYmxlIHNvbWUgbWV0cmljcyB0byBzZWUgY29udGVudCBoZXJlLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPGRpdiBjbGFzcz0ibGF5b3V0IGhvcml6b250YWwgd3JhcCBzZXNzaW9uLWdyb3VwLWRldGFpbHMiPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLWlmIgogICAgICAgIGlmPSJbW19oYXZlTWV0cmljc0FuZFNlc3Npb25Hcm91cCh2aXNpYmxlU2NoZW1hLiosIHNlc3Npb25Hcm91cCldXSIKICAgICAgPgogICAgICAgIDx0ZW1wbGF0ZQogICAgICAgICAgaXM9ImRvbS1yZXBlYXQiCiAgICAgICAgICBpdGVtcz0iW1t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zXV0iCiAgICAgICAgICBhcz0ibWV0cmljSW5mbyIKICAgICAgICA+CiAgICAgICAgICA8IS0tIE5vdGUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhIHJlcXVlc3QtbWFuYWdlciBhdHRyaWJ1dGUgc2luY2UKICAgICAgICAgICAgICAgd2UgcHJvdmlkZSBhIGZ1bmN0aW9uIGluIHJlcXVlc3QtZGF0YSBmb3IgY2FsbGluZyB0aGUgYmFja2VuZAogICAgICAgICAgICAgICB0byBnZXQgdGhlIG1ldHJpY3MgZGF0YS4KICAgICAgICAgICAgLS0+CiAgICAgICAgICA8dGYtc2NhbGFyLWNhcmQKICAgICAgICAgICAgY2xhc3M9InNjYWxhci1jYXJkIgogICAgICAgICAgICBjb2xvci1zY2FsZT0iW1tfY29sb3JTY2FsZV1dIgogICAgICAgICAgICBkYXRhLXRvLWxvYWQ9IltbX2NvbXB1dGVTZXJpZXNGb3JTZXNzaW9uR3JvdXBNZXRyaWMoc2Vzc2lvbkdyb3VwLCBtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB0YWc9IltbbWV0cmljSW5mby5uYW1lLnRhZ11dIgogICAgICAgICAgICB0YWctbWV0YWRhdGE9IltbX2NvbXB1dGVUYWdNZXRhZGF0YShtZXRyaWNJbmZvKV1dIgogICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19ub011bHRpRXhwZXJpbWVudHNdXSIKICAgICAgICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICAgICAgICBhY3RpdmUKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtc2NhbGFyLWNhcmQ+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgogICAgPCEtLSAiaXJvbi1mbGV4IiBpcyBuZWVkZWQgdG8gdXNlIHRoZSBsYXlvdXQgY2xhc3NlcyBpbiB0aGUgZGl2IGFib3ZlIC0tPgogICAgPHN0eWxlIGluY2x1ZGU9Imlyb24tZmxleCI+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWcy5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWcy5wcm90b3R5cGUsInNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxWcy5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFZzLnByb3RvdHlwZSwiX25vTXVsdGlFeHBlcmltZW50cyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxWcy5wcm90b3R5cGUsIl9pbmRleE9mU2Vzc2lvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxWcy5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBOYW1lSGFzaCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLFZzLnByb3RvdHlwZSwiX3JlcXVlc3REYXRhIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFZzLnByb3RvdHlwZSwiX2NvbG9yU2NhbGUiLHZvaWQgMCk7RShbQnQoInNlc3Npb25Hcm91cC4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxWcy5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBDaGFuZ2VkIixudWxsKTtWcz1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMiKV0sVnMpO3ZhciBIZD1jbGFzcyBleHRlbmRzIEd0KF9vKG10KSl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2hwYXJhbU5hbWU9RmQsdGhpcy5fbWV0cmljTmFtZT1RdX1fdmlzaWJsZVNjaGVtYU9yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXtsZXQgdD10aGlzLiQuc2Vzc2lvbkdyb3Vwc1RhYmxlLmdldCgiZGV0YWlsc09wZW5lZEl0ZW1zIik7dGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImRldGFpbHNPcGVuZWRJdGVtcyIsW10pLHVpKCk7bGV0IHI9bmV3IE1hcDt0aGlzLnNlc3Npb25Hcm91cHMuZm9yRWFjaChuPT57ci5zZXQobi5uYW1lLG4pfSksdGhpcy4kLnNlc3Npb25Hcm91cHNUYWJsZS5zZXQoImRldGFpbHNPcGVuZWRJdGVtcyIsdC5tYXAobj0+ci5nZXQobi5uYW1lKSkuZmlsdGVyKEJvb2xlYW4pKX1fc2Vzc2lvbkdyb3VwSFBhcmFtKHQscil7cmV0dXJuIHQ9PW51bGx8fE9iamVjdC5rZXlzKHQpLmxlbmd0aD09MHx8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LmhwYXJhbXMscik/IiI6YjAodC5ocGFyYW1zW3JdKX1fc2Vzc2lvbkdyb3VwTWV0cmljKHQscil7aWYodD09bnVsbHx8T2JqZWN0LmtleXModCkubGVuZ3RoPT0wKXJldHVybiIiO2ZvcihsZXQgbj0wO248dC5tZXRyaWNWYWx1ZXMubGVuZ3RoOysrbil7bGV0IGk9dC5tZXRyaWNWYWx1ZXNbbl07aWYoaS5uYW1lLmdyb3VwPT09ci5ncm91cCYmaS5uYW1lLnRhZz09ci50YWcpcmV0dXJuIGIwKGkudmFsdWUpfXJldHVybiIifV9yb3dOdW1iZXIodCl7cmV0dXJuIHQrMX19O0hkLnRlbXBsYXRlPVFgCiAgICA8dmFhZGluLWdyaWQKICAgICAgY2xhc3M9InNlc3Npb24tZ3JvdXAtdGFibGUiCiAgICAgIGlkPSJzZXNzaW9uR3JvdXBzVGFibGUiCiAgICAgIGNvbHVtbi1yZW9yZGVyaW5nLWFsbG93ZWQ9IiIKICAgICAgaXRlbXM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgPgogICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMCIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+VHJpYWwgSUQ8L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPltbaXRlbS5uYW1lXV08L2Rpdj4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW2VuYWJsZVNob3dNZXRyaWNzXV0iPgogICAgICAgIDx2YWFkaW4tZ3JpZC1jb2x1bW4gZmxleC1ncm93PSIwIiBhdXRvV2lkdGg9IiIgcmVzaXphYmxlPSIiPgogICAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1oZWFkZXIgdGFibGUtY2VsbCI+U2hvdyBNZXRyaWNzPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2xhc3M9InRhYmxlLWNlbGwiIGNoZWNrZWQ9Int7ZGV0YWlsc09wZW5lZH19Ij4KICAgICAgICAgICAgPC9wYXBlci1jaGVja2JveD4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC92YWFkaW4tZ3JpZC1jb2x1bW4+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZQogICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgIGl0ZW1zPSJbW3Zpc2libGVTY2hlbWEuaHBhcmFtSW5mb3NdXSIKICAgICAgICBhcz0iaHBhcmFtSW5mbyIKICAgICAgICBpbmRleC1hcz0iaHBhcmFtSW5kZXgiCiAgICAgID4KICAgICAgICA8dmFhZGluLWdyaWQtY29sdW1uIGZsZXgtZ3Jvdz0iMiIgd2lkdGg9IjEwZW0iIHJlc2l6YWJsZT0iIj4KICAgICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGUtaGVhZGVyIHRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX2hwYXJhbU5hbWUoaHBhcmFtSW5mbyldXQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWNlbGwiPgogICAgICAgICAgICAgIFtbX3Nlc3Npb25Hcm91cEhQYXJhbShpdGVtLCBocGFyYW1JbmZvLm5hbWUpXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdmFhZGluLWdyaWQtY29sdW1uPgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUKICAgICAgICBpcz0iZG9tLXJlcGVhdCIKICAgICAgICBpdGVtcz0ie3t2aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zfX0iCiAgICAgICAgYXM9Im1ldHJpY0luZm8iCiAgICAgICAgaW5kZXgtYXM9Im1ldHJpY0luZGV4IgogICAgICA+CiAgICAgICAgPHZhYWRpbi1ncmlkLWNvbHVtbiBmbGV4LWdyb3c9IjIiIHdpZHRoPSIxMGVtIiByZXNpemFibGU9IiI+CiAgICAgICAgICA8dGVtcGxhdGUgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlLWhlYWRlciB0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19tZXRyaWNOYW1lKG1ldHJpY0luZm8pXV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgPHRlbXBsYXRlPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jZWxsIj4KICAgICAgICAgICAgICBbW19zZXNzaW9uR3JvdXBNZXRyaWMoaXRlbSwgbWV0cmljSW5mby5uYW1lKV1dCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3ZhYWRpbi1ncmlkLWNvbHVtbj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGNsYXNzPSJyb3ctZGV0YWlscyI+CiAgICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tpdGVtXV0iCiAgICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgICBjbGFzcz0ic2Vzc2lvbi1ncm91cC1kZXRhaWxzIgogICAgICAgID4KICAgICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgICA8L3RlbXBsYXRlPgogICAgPC92YWFkaW4tZ3JpZD4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KC5kYXJrLW1vZGUpIHsKICAgICAgICAtLWx1bW8tYmFzZS1jb2xvcjogIzMwMzAzMDsKICAgICAgICAtLWx1bW8tYm9keS10ZXh0LWNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICA6aG9zdCguZGFyay1tb2RlKSB2YWFkaW4tZ3JpZCB7CiAgICAgICAgLS1fbHVtby1ncmlkLXNlY29uZGFyeS1ib3JkZXItY29sb3I6ICM1MDUwNTA7CiAgICAgIH0KCiAgICAgIC50YWJsZS1jZWxsIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KICAgICAgLnRhYmxlLWhlYWRlciB7CiAgICAgICAgLyogbGluZS1icmVhayBvdmVyZmxvd2luZyBjb2x1bW4gaGVhZGVycyAqLwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKICAgICAgfQogICAgICAuc2Vzc2lvbi1ncm91cC10YWJsZSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zZXNzaW9uLWdyb3VwLWRldGFpbHMgewogICAgICAgIGhlaWdodDogMzYwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEhkLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sSGQucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSGQucHJvdG90eXBlLCJlbmFibGVTaG93TWV0cmljcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxIZC5wcm90b3R5cGUsImJhY2tlbmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSGQucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtCdCgidmlzaWJsZVNjaGVtYS4qIiwic2Vzc2lvbkdyb3Vwcy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxIZC5wcm90b3R5cGUsIl92aXNpYmxlU2NoZW1hT3JTZXNzaW9uR3JvdXBzQ2hhbmdlZCIsbnVsbCk7SGQ9RShbeXQoInRmLWhwYXJhbXMtdGFibGUtdmlldyIpXSxIZCk7dmFyIFRQPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2Vzc2lvbkdyb3VwPW51bGwsdGhpcy52aXNpYmxlU2NoZW1hPW51bGx9X3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodCxyKXtyZXR1cm4gdCE9bnVsbCYmciE9PXZvaWQgMCYmciE9PW51bGx9X3NpbmdsZXRvblNlc3Npb25Hcm91cHModCl7cmV0dXJuIHQ9PW51bGw/W106W3RdfX07VFAudGVtcGxhdGU9UWAKICAgIDwhLS0gSWYgc2Vzc2lvbkdyb3VwIG9yIHZpc2libGVTY2hlbWEgYXJlIG5vdCBwb3B1bGF0ZWQsIGRvIG5vdCBkaXNwbGF5CiAgICAgICAgIGFueXRoaW5nLgogICAgICAtLT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1tfcHJvcGVydGllc0FyZVBvcHVsYXRlZCh2aXNpYmxlU2NoZW1hLCBzZXNzaW9uR3JvdXApXV0iCiAgICA+CiAgICAgIDwhLS0gRGlzcGxheSBvbmUgcm93IHdpdGhvdXQgYSAic2hvdy1tZXRyaWNzIiBjb2x1bW4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXRhYmxlLXZpZXcKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1t2aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3NpbmdsZXRvblNlc3Npb25Hcm91cHMoc2Vzc2lvbkdyb3VwKV1dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgPC90ZW1wbGF0ZT4KICAgIDx0ZW1wbGF0ZQogICAgICBpcz0iZG9tLWlmIgogICAgICBpZj0iW1shX3Byb3BlcnRpZXNBcmVQb3B1bGF0ZWQodmlzaWJsZVNjaGVtYSwgc2Vzc2lvbkdyb3VwKV1dIgogICAgPgogICAgICA8ZGl2PkNsaWNrIG9yIGhvdmVyIG92ZXIgYSBzZXNzaW9uIGdyb3VwIHRvIGRpc3BsYXkgaXRzIHZhbHVlcyBoZXJlLjwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFRQLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFRQLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtUUD1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcyIpXSxUUCk7dmFyIENQPUVlKE9lKCksMSk7ZnVuY3Rpb24gbHVlKGUsdCxyLG4pe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxlc3MgdGhhbiB0d28gYXhlcyBpbiBwYXJhbGxlbCBjb29yZGluYXRlcyBwbG90LiIpLG51bGw7bGV0IGk9clswXSxvPXJbMV07aWYoaTw9dFswXXx8aT49dFt0Lmxlbmd0aC0xXSlyZXR1cm4gbnVsbDtsZXQgYT1DUC5zb3J0ZWRJbmRleCh0LGkpO2NvbnNvbGUuYXNzZXJ0KGE+MCksY29uc29sZS5hc3NlcnQoYTx0Lmxlbmd0aCk7bGV0IHM9YS0xO2Z1bmN0aW9uIGwoaCxmLHAsZCl7bGV0IGc9aC1wLF89Zi1kLHk9aS1wLHg9by1kLGI9KGcqeStfKngpLyhnKmcrXypfKTtpZihiPD0wKXJldHVybiBwMyh5LHgpO2lmKGI+PTEpe2xldCBTPWgtaSxDPWYtbztyZXR1cm4gcDMoUyxDKX1yZXR1cm4gcDMoeS1iKmcseC1iKl8pfWxldCBjPW51bGwsdT1udWxsO3JldHVybiBlLmZvckVhY2goaD0+e2xldCBmPWwoaC5jb250cm9sUG9pbnRzW3NdWzBdLGguY29udHJvbFBvaW50c1tzXVsxXSxoLmNvbnRyb2xQb2ludHNbYV1bMF0saC5jb250cm9sUG9pbnRzW2FdWzFdKTtmPm58fChjPT09bnVsbHx8ZjxjKSYmKGM9Zix1PWgpfSksdX1mdW5jdGlvbiBjdWUoZSx0LHIpe3JldHVybiBlLmRvbWFpbigpLmZpbHRlcihuPT57bGV0IGk9ZShuKTtyZXR1cm4gdDw9aSYmaTw9cn0pfWZ1bmN0aW9uIHV1ZShlLHQscil7bGV0IG49ZS5yYW5nZSgpLGk9bi5maWx0ZXIobz0+dDw9byYmbzw9cikubWFwKG89PntsZXQgYT1lLmludmVydEV4dGVudChvKTtyZXR1cm4gbz09PW5bbi5sZW5ndGgtMV0/W2FbMF0sYVsxXSsxXTphfSk7cmV0dXJuIGkubGVuZ3RoPT0wP1swLDBdOmFhKEltKGkpKX1mdW5jdGlvbiBodWUoZSx0LHIpe3JldHVybltlLmludmVydCh0KSxlLmludmVydChyKV0uc29ydCgobixpKT0+bi1pKX1mdW5jdGlvbiBCY3QoZSx0LHIpe2Z1bmN0aW9uIG4oKXtpZihlLmxlbmd0aD09PTApcmV0dXJuWzEsMl07bGV0W2ksb109YWEoZSk7cmV0dXJuIGkhPT1vP1tpLG9dOmk+MD9baSouNSxpKjEuNV06aTwwP1tpKjEuNSxpKi41XTpbLTEsMV19aWYocj09PSJMSU5FQVIiKXJldHVybiB6bigpLmRvbWFpbihuKCkpLnJhbmdlKFt0LDBdKTtpZihyPT09IkxPRyIpe2xldCBpPW4oKTtyZXR1cm4gaVswXTw9MCYmaVsxXT49MD9CY3QoZSx0LCJMSU5FQVIiKTpjYygpLmRvbWFpbihpKS5yYW5nZShbdCwwXSl9ZWxzZSBpZihyPT09IlFVQU5USUxFIil7bGV0IG89SXIoMjApLm1hcChhPT50LWEqdC8xOSk7cmV0dXJuIGUubGVuZ3RoPT09MCYmKGU9WzFdKSxlZygpLmRvbWFpbihDUC51bmlxKGUpKS5yYW5nZShvKX1lbHNle2lmKHI9PT0iTk9OX05VTUVSSUMiKXJldHVybiB0ZygpLmRvbWFpbihDUC51bmlxKGUuc29ydCgpKSkucmFuZ2UoW3QsMF0pLnBhZGRpbmcoLjEpO3Rocm93IFJhbmdlRXJyb3IoIlVua25vd24gc2NhbGU6ICIrcil9fXZhciB1djsoZnVuY3Rpb24oZSl7ZS5MSU5FQVI9IkxJTkVBUiIsZS5MT0c9IkxPRyIsZS5RVUFOVElMRT0iUVVBTlRJTEUiLGUuTk9OX05VTUVSSUM9Ik5PTl9OVU1FUklDIn0pKHV2fHwodXY9e30pKTt2YXIgQVA9Y2xhc3N7aXNQYXNzaW5nKHQpe3JldHVybiEwfX0sclY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fbG93ZXI9dCx0aGlzLl91cHBlcj1yLHRoaXMuX2xvd2VyT3Blbj1uLHRoaXMuX3VwcGVyT3Blbj1pfWlzUGFzc2luZyh0KXtsZXQgcj10O3JldHVybiB0aGlzLl9iZWZvcmUodGhpcy5fbG93ZXIsciwhdGhpcy5fbG93ZXJPcGVuKSYmdGhpcy5fYmVmb3JlKHIsdGhpcy5fdXBwZXIsIXRoaXMuX3VwcGVyT3Blbil9X2JlZm9yZSh0LHIsbil7cmV0dXJuIG4/dDw9cjp0PHJ9fSxWY3Q9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9tYWluU2V0PXR9aXNQYXNzaW5nKHQpe3JldHVybiB0aGlzLl9kb21haW5TZXQuZmluZEluZGV4KHI9PnI9PT10KSE9PS0xfX0sVWN0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGkpe3RoaXMuX3N2Z1Byb3BzPXQsdGhpcy5fc2NoZW1hPXIsdGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPW4sdGhpcy5fY29sSW5kZXg9aSx0aGlzLl9pc0Rpc3BsYXllZD0hMSx0aGlzLl95U2NhbGU9bnVsbCx0aGlzLl9zY2FsZVR5cGU9bnVsbCx0aGlzLnNldEJydXNoU2VsZWN0aW9uKG51bGwpfWNvbEluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbEluZGV4fXlTY2FsZSgpe3JldHVybiB0aGlzLl95U2NhbGV9c2NhbGVUeXBlKCl7cmV0dXJuIHRoaXMuX3NjYWxlVHlwZX1icnVzaFNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9icnVzaFNlbGVjdGlvbn1pc0Rpc3BsYXllZCgpe3JldHVybiB0aGlzLl9pc0Rpc3BsYXllZH1zZXRCcnVzaFNlbGVjdGlvbih0KXt0aGlzLl9icnVzaFNlbGVjdGlvbj10LHRoaXMuX2JydXNoRmlsdGVyPXRoaXMuX2J1aWxkQnJ1c2hGaWx0ZXIodGhpcy5icnVzaFNlbGVjdGlvbigpLHRoaXMuc2NhbGVUeXBlKCksdGhpcy55U2NhbGUoKSl9c2V0RG9tYWluQW5kU2NhbGUodCxyKXt0aGlzLl9zY2FsZVR5cGU9cix0aGlzLl95U2NhbGU9QmN0KHQuc2xpY2UoKSx0aGlzLl9zdmdQcm9wcy5oZWlnaHQsdGhpcy5zY2FsZVR5cGUoKSksdGhpcy5fYnJ1c2hGaWx0ZXI9dGhpcy5fYnVpbGRCcnVzaEZpbHRlcih0aGlzLmJydXNoU2VsZWN0aW9uKCksdGhpcy5zY2FsZVR5cGUoKSx0aGlzLnlTY2FsZSgpKX1icnVzaEZpbHRlcigpe3JldHVybiB0aGlzLl9icnVzaEZpbHRlcn11cGRhdGVET00odCl7bGV0IHI9bGIodGhpcy55U2NhbGUoKSk7dGhpcy5zY2FsZVR5cGUoKT09PXV2LlFVQU5USUxFJiYocj1yLnRpY2tWYWx1ZXModGhpcy55U2NhbGUoKS5xdWFudGlsZXMoKSkudGlja0Zvcm1hdCh4bigiLS42ZyIpKSk7bGV0IG49SHQodCk7bi5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxuLmFwcGVuZCgiZyIpLmNsYXNzZWQoImF4aXMiLCEwKS5jYWxsKHIpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImF4aXMtdGl0bGUiLCEwKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoInkiLC05KS50ZXh0KGE9PnVjdCh0aGlzLl9zY2hlbWEsYSkpLG4uY2FsbChwYigpLm9uKCJzdGFydCIsKCk9Pnt0LnNldEF0dHJpYnV0ZSgiaXMtZHJhZ2dpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnU3RhcnQodGhpcy5jb2xJbmRleCgpKX0pLm9uKCJkcmFnIiwoKT0+dGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uRHJhZyhxdC54KSkub24oImVuZCIsKCk9Pnt0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25EcmFnRW5kKCksdC5yZW1vdmVBdHRyaWJ1dGUoImlzLWRyYWdnaW5nIil9KSk7bGV0IGk9VUwoKS5leHRlbnQoW1stOCwwXSxbOCx0aGlzLl9zdmdQcm9wcy5oZWlnaHQrMV1dKS5vbigic3RhcnQiLCgpPT57IUhjdChxdCl8fCh0LnNldEF0dHJpYnV0ZSgiaXMtYnJ1c2hpbmciLCIiKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbikpfSkub24oImJydXNoIiwoKT0+eyFIY3QocXQpfHx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXIub25CcnVzaENoYW5nZWQodGhpcy5jb2xJbmRleCgpLHF0LnNlbGVjdGlvbil9KS5vbigiZW5kIiwoKT0+eyFIY3QocXQpfHwodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyLm9uQnJ1c2hDaGFuZ2VkKHRoaXMuY29sSW5kZXgoKSxxdC5zZWxlY3Rpb24pLHQucmVtb3ZlQXR0cmlidXRlKCJpcy1icnVzaGluZyIpKX0pLG89SHQodCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnJ1c2giLCEwKTtvLmNhbGwoaSksaS5tb3ZlKG8sdGhpcy5icnVzaFNlbGVjdGlvbigpKX1zZXREaXNwbGF5ZWQodCl7dGhpcy5faXNEaXNwbGF5ZWQ9dH1fYnVpbGRCcnVzaEZpbHRlcih0LHIsbil7aWYodD09PW51bGwpcmV0dXJuIG5ldyBBUDtpZihyPT09bnVsbClyZXR1cm4gY29uc29sZS5lcnJvcigiU2NhbGUgdHlwZSBpcyBudWxsLCBidXQgYnJ1c2hTZWxlY3Rpb24gaXNuJ3Q6ICIsdCksbmV3IEFQO3N3aXRjaChyKXtjYXNlIHV2LkxJTkVBUjpjYXNlIHV2LkxPRzp7bGV0W2ksb109aHVlKG4sdFswXSx0WzFdKTtyZXR1cm4gbmV3IHJWKGksbywhMSwhMSl9Y2FzZSB1di5RVUFOVElMRTp7bGV0W2ksb109dXVlKG4sdFswXSx0WzFdKTtyZXR1cm4gbmV3IHJWKGksbywhMSwhMCl9Y2FzZSB1di5OT05fTlVNRVJJQzpyZXR1cm4gbmV3IFZjdChjdWUobix0WzBdLHRbMV0pKX1yZXR1cm4gY29uc29sZS5lcnJvcigiVW5rbm93biBzY2FsZSB0eXBlOiAiLHIpLG5ldyBBUH19LG5WPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX2F4ZXM9dGhpcy5fY3JlYXRlQXhlcyhuKSx0aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucz10ZygpLnJhbmdlKFsxLHRoaXMuX3N2Z1Byb3BzLndpZHRoLTFdKS5wYWRkaW5nKC41KSx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3N2Z1Byb3BzLnN2Z0cuc2VsZWN0QWxsKCJnLmF4aXMtcGFyZW50IikucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiLmF4aXMtcGFyZW50Iil9dXBkYXRlQXhlcyh0LHIpe2NvbnNvbGUuYXNzZXJ0KCF0aGlzLmlzQXhpc0RyYWdnaW5nKCkpO2xldCBuPW5ldyBTZXQ7dC5jb2x1bW5zLmZvckVhY2gobz0+e2xldCBhPW8uYWJzb2x1dGVJbmRleCxzPXRoaXMuX2F4ZXNbYV07cy5zZXREaXNwbGF5ZWQoITApO2xldCBsPXIubWFwKGM9PngwKHRoaXMuX3NjaGVtYSxjLGEpKTtzLnNldERvbWFpbkFuZFNjYWxlKGwsby5zY2FsZSksbi5hZGQoYSl9KSx0aGlzLl9heGVzLmZvckVhY2gobz0+e24uaGFzKG8uY29sSW5kZXgoKSl8fG8uc2V0RGlzcGxheWVkKCExKX0pLHRoaXMuX3VwZGF0ZVN0YXRpb25hcnlBeGVzUG9zaXRpb25zKG4pLHRoaXMuX3BhcmVudHNTZWw9dGhpcy5fcGFyZW50c1NlbC5kYXRhKEFycmF5LmZyb20obiksbz0+byksdGhpcy5fcGFyZW50c1NlbC5leGl0KCkucmVtb3ZlKCksdGhpcy5fcGFyZW50c1NlbD10aGlzLl9wYXJlbnRzU2VsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYXhpcy1wYXJlbnQiLCEwKS5tZXJnZSh0aGlzLl9wYXJlbnRzU2VsKTtsZXQgaT10aGlzO3RoaXMuX3BhcmVudHNTZWwuY2FsbChvPT50aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00obykpLmVhY2goZnVuY3Rpb24obyl7aS5fYXhlc1tvXS51cGRhdGVET00odGhpcyl9KX1tYXBWaXNpYmxlQXhlcyh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkubWFwKHI9PnQodGhpcy5nZXRBeGlzUG9zaXRpb24ociksdGhpcy5fYXhlc1tyXSkpfWFsbFZpc2libGVBeGVzU2F0aXNmeSh0KXtyZXR1cm4gdGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKCkuZXZlcnkocj0+dCh0aGlzLmdldEF4aXNQb3NpdGlvbihyKSx0aGlzLl9heGVzW3JdKSl9Z2V0QXhpc0ZvckNvbEluZGV4KHQpe3JldHVybiB0aGlzLl9heGVzW3RdfWRyYWdTdGFydCh0KXtjb25zb2xlLmFzc2VydCghdGhpcy5pc0F4aXNEcmFnZ2luZygpKSxjb25zb2xlLmFzc2VydCh0aGlzLl9heGVzW3RdLmlzRGlzcGxheWVkKCkpLHRoaXMuX2RyYWdnZWRBeGlzPXRoaXMuX2F4ZXNbdF0sdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KX1kcmFnKHQpe3Q9TWF0aC5taW4oTWF0aC5tYXgodCwwKSx0aGlzLl9zdmdQcm9wcy53aWR0aCksdGhpcy5fZHJhZ2dlZEF4aXNQb3NpdGlvbj10O2xldCByPXRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbigpO3Iuc29ydCgobixpKT0+dGhpcy5nZXRBeGlzUG9zaXRpb24obiktdGhpcy5nZXRBeGlzUG9zaXRpb24oaSkpLHRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zLmRvbWFpbihyKSx0aGlzLl91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odGhpcy5fcGFyZW50c1NlbCl9ZHJhZ0VuZCh0KXtjb25zb2xlLmFzc2VydCh0aGlzLmlzQXhpc0RyYWdnaW5nKCkpLHRoaXMuX2RyYWdnZWRBeGlzUG9zaXRpb249bnVsbCx0aGlzLl9kcmFnZ2VkQXhpcz1udWxsLHRoaXMuX3VwZGF0ZUF4ZXNQb3NpdGlvbnNJbkRPTSh0aGlzLl9wYXJlbnRzU2VsLnRyYW5zaXRpb24oKS5kdXJhdGlvbih0KSl9aXNBeGlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5fZHJhZ2dlZEF4aXMhPT1udWxsfWdldEF4aXNQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy5fZHJhZ2dlZEF4aXMhPT1udWxsJiZ0aGlzLl9kcmFnZ2VkQXhpcy5jb2xJbmRleCgpPT09dD90aGlzLl9kcmFnZ2VkQXhpc1Bvc2l0aW9uOnRoaXMuX3N0YXRpb25hcnlBeGVzUG9zaXRpb25zKHQpfV91cGRhdGVTdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucyh0KXtsZXQgcj10aGlzLl9zdGF0aW9uYXJ5QXhlc1Bvc2l0aW9ucy5kb21haW4oKS5maWx0ZXIoaT0+dC5oYXMoaSkpLG49QXJyYXkuZnJvbShuZXcgU2V0KFsuLi5yLC4uLkFycmF5LmZyb20odCldKSk7dGhpcy5fc3RhdGlvbmFyeUF4ZXNQb3NpdGlvbnMuZG9tYWluKG4pfV91cGRhdGVBeGVzUG9zaXRpb25zSW5ET00odCl7dC5hdHRyKCJ0cmFuc2Zvcm0iLHI9Pl9QKHRoaXMuZ2V0QXhpc1Bvc2l0aW9uKHIpKSl9X2NyZWF0ZUF4ZXModCl7cmV0dXJuIElyKGhjdCh0aGlzLl9zY2hlbWEpKS5tYXAocj0+bmV3IFVjdCh0aGlzLl9zdmdQcm9wcyx0aGlzLl9zY2hlbWEsdCxyKSl9fTtmdW5jdGlvbiBIY3QoZSl7cmV0dXJuIGUuc291cmNlRXZlbnQhPT1udWxsfXZhciBqZjsoZnVuY3Rpb24oZSl7ZVtlLkZPUkVHUk9VTkQ9MF09IkZPUkVHUk9VTkQiLGVbZS5CQUNLR1JPVU5EPTFdPSJCQUNLR1JPVU5EIn0pKGpmfHwoamY9e30pKTt2YXIgdGg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dD09PXZvaWQgMCYmKHQ9RXAobnVsbCkpLGNvbnNvbGUuYXNzZXJ0KHQuc2l6ZSgpPD0xKSx0aGlzLl9zZXNzaW9uR3JvdXBTZWw9dH1zZXNzaW9uR3JvdXAoKXtyZXR1cm4gdGhpcy5fc2Vzc2lvbkdyb3VwU2VsLnNpemUoKT09PTE/dGhpcy5fc2Vzc2lvbkdyb3VwU2VsLmRhdHVtKCk6bnVsbH1pc051bGwoKXtyZXR1cm4gdGhpcy5zZXNzaW9uR3JvdXAoKT09PW51bGx9c2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuX3Nlc3Npb25Hcm91cFNlbH1lcXVhbHNUbyh0KXt2YXIgcixuO3JldHVybiB0aGlzLmlzTnVsbCgpP3QuaXNOdWxsKCk6dC5pc051bGwoKT8hMTooKHI9dC5zZXNzaW9uR3JvdXAoKSk9PW51bGw/dm9pZCAwOnIubmFtZSk9PSgobj10aGlzLnNlc3Npb25Hcm91cCgpKT09bnVsbD92b2lkIDA6bi5uYW1lKX19LGlWPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLl9zdmdQcm9wcz10LHRoaXMuX3NjaGVtYT1yLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW4sdGhpcy5fc2Vzc2lvbkdyb3Vwcz1bXSx0aGlzLl9zdmdQcm9wcy5zdmdHLnNlbGVjdEFsbCgiZy5iYWNrZ3JvdW5kIikucmVtb3ZlKCksdGhpcy5fc3ZnUHJvcHMuc3ZnRy5zZWxlY3RBbGwoImcuZm9yZWdyb3VuZCIpLnJlbW92ZSgpLHRoaXMuX2JnUGF0aHNTZWw9dGhpcy5fc3ZnUHJvcHMuc3ZnRy5hcHBlbmQoImciKS5jbGFzc2VkKCJiYWNrZ3JvdW5kIiwhMCkuc2VsZWN0QWxsKCJwYXRoIiksdGhpcy5fZmdQYXRoc1NlbD10aGlzLl9zdmdQcm9wcy5zdmdHLmFwcGVuZCgiZyIpLmNsYXNzZWQoImZvcmVncm91bmQiLCEwKS5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLl91cGRhdGVWaXNpYmxlRmdQYXRoc1NlbCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT1uZXcgdGgsdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGU9bmV3IHRoLHRoaXMuX2QzbGluZT12dSgpLmN1cnZlKFloKX1nZXRTZXNzaW9uR3JvdXBIYW5kbGUodCl7cmV0dXJuIHQ9PW51bGw/bmV3IHRoOm5ldyB0aCh0aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcihyPT5yLm5hbWU9PT10Lm5hbWUpKX1oaWRlQmFja2dyb3VuZExpbmVzKCl7dGhpcy5fYmdQYXRoc1NlbC5hdHRyKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIil9c2hvd0JhY2tncm91bmRMaW5lcygpe3RoaXMuX2JnUGF0aHNTZWwuYXR0cigidmlzaWJpbGl0eSIsbnVsbCl9cGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCl7cmV0dXJuIHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZX1zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZX1yZWNvbXB1dGVDb250cm9sUG9pbnRzKHQscj0wKXsodD09PWpmLkZPUkVHUk9VTkQ/dGhpcy5fZmdQYXRoc1NlbDp0aGlzLl9iZ1BhdGhzU2VsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24ocikuYXR0cigiZCIsaT0+dGhpcy5fcGF0aERBdHRyaWJ1dGUoaSkpLHQ9PT1qZi5GT1JFR1JPVU5EJiZ3aW5kb3cuc2V0VGltZW91dCgoKT0+e2xldCBpPXRoaXM7dGhpcy5fZmdQYXRoc1NlbC5lYWNoKGZ1bmN0aW9uKG8pe2kuX3NldENvbnRyb2xQb2ludHNQcm9wZXJ0eSh0aGlzLG8pfSl9KX1yZWNvbXB1dGVGb3JlZ3JvdW5kTGluZXNWaXNpYmlsaXR5KCl7dGhpcy5fZmdQYXRoc1NlbC5jbGFzc2VkKCJpbnZpc2libGUtcGF0aCIsdD0+IXRoaXMuX2F4ZXNDb2xsZWN0aW9uLmFsbFZpc2libGVBeGVzU2F0aXNmeSgocixuKT0+bi5icnVzaEZpbHRlcigpLmlzUGFzc2luZyh4MCh0aGlzLl9zY2hlbWEsdCxuLmNvbEluZGV4KCkpKSkpLHRoaXMuX3VwZGF0ZVZpc2libGVGZ1BhdGhzU2VsKCl9c2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IodCxyLG4pe2xldCBpPXRoaXMuX2NyZWF0ZUxpbmVDb2xvckZ1bmN0aW9uKHQscixuKTt0aGlzLl9mZ1BhdGhzU2VsLmF0dHIoInN0cm9rZSIsaSl9cmVkcmF3KHQscixuLGkpe2xldCBvPXRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZS5zZXNzaW9uR3JvdXAoKSxhPXRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlLnNlc3Npb25Hcm91cCgpO3RoaXMuX3Nlc3Npb25Hcm91cHM9dCx0aGlzLl9mZ1BhdGhzU2VsPXRoaXMuX3JlY29tcHV0ZVBhdGhTZWxlY3Rpb24odGhpcy5fZmdQYXRoc1NlbCksdGhpcy5fYmdQYXRoc1NlbD10aGlzLl9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHRoaXMuX2JnUGF0aHNTZWwpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cEhhbmRsZT10aGlzLmdldFNlc3Npb25Hcm91cEhhbmRsZShvKSx0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZT10aGlzLmdldFNlc3Npb25Hcm91cEhhbmRsZShhKSx0aGlzLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuRk9SRUdST1VORCksdGhpcy5yZWNvbXB1dGVDb250cm9sUG9pbnRzKGpmLkJBQ0tHUk9VTkQpLHRoaXMucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpLHRoaXMuc2V0Rm9yZWdyb3VuZExpbmVzQ29sb3IocixuLGkpfXVwZGF0ZVBlYWtlZFNlc3Npb25Hcm91cCh0KXt0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCExKSx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGU9dCx0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgicGVha2VkLXBhdGgiLCEwKX1jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpe3RoaXMudXBkYXRlUGVha2VkU2Vzc2lvbkdyb3VwKG5ldyB0aCl9dXBkYXRlU2VsZWN0ZWRTZXNzaW9uR3JvdXAodCl7dGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITEpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwSGFuZGxlPXQsdGhpcy5fc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUuc2VsZWN0aW9uKCkuY2xhc3NlZCgic2VsZWN0ZWQtcGF0aCIsITApfWZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKHQscil7bGV0IG49dGhpcy5fYXhlc0NvbGxlY3Rpb24ubWFwVmlzaWJsZUF4ZXMoKG8sYSk9Pm8pLGk9bHVlKHRoaXMuX3Zpc2libGVGZ1BhdGhzU2VsLm5vZGVzKCksbixbdCxyXSwxMDApO3JldHVybiBpPT09bnVsbD9uZXcgdGg6bmV3IHRoKEh0KGkpKX1fY3JlYXRlTGluZUNvbG9yRnVuY3Rpb24odCxyLG4pe2lmKHQ9PT1udWxsKXJldHVybigpPT4icmVkIjtsZXQgaT16bigpLmRvbWFpbihmY3QodGhpcy5fc2NoZW1hLHRoaXMuX3Nlc3Npb25Hcm91cHMsdCkpLnJhbmdlKFtyLG5dKS5pbnRlcnBvbGF0ZShNXyk7cmV0dXJuIG89PmkoeDAodGhpcy5fc2NoZW1hLG8sdCkpfV9yZWNvbXB1dGVQYXRoU2VsZWN0aW9uKHQpe3JldHVybiB0PXQuZGF0YSh0aGlzLl9zZXNzaW9uR3JvdXBzLHI9PnIubmFtZSksdC5leGl0KCkucmVtb3ZlKCksdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLm1lcmdlKHQpfV9zZXRDb250cm9sUG9pbnRzUHJvcGVydHkodCxyKXt0LmNvbnRyb2xQb2ludHM9dGhpcy5fY29tcHV0ZUNvbnRyb2xQb2ludHMocil9X2NvbXB1dGVDb250cm9sUG9pbnRzKHQpe3JldHVybiB0aGlzLl9heGVzQ29sbGVjdGlvbi5tYXBWaXNpYmxlQXhlcygocixuKT0+W3Isbi55U2NhbGUoKSh4MCh0aGlzLl9zY2hlbWEsdCxuLmNvbEluZGV4KCkpKV0pfV9wYXRoREF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5fZDNsaW5lKHRoaXMuX2NvbXB1dGVDb250cm9sUG9pbnRzKHQpKX1fdXBkYXRlVmlzaWJsZUZnUGF0aHNTZWwoKXt0aGlzLl92aXNpYmxlRmdQYXRoc1NlbD10aGlzLl9mZ1BhdGhzU2VsLmZpbHRlcigiOm5vdCguaW52aXNpYmxlLXBhdGgpIil9fTt2YXIgb1Y9Y2xhc3N7Y29uc3RydWN0b3IodCxyKXt0aGlzLnN2Zz1IdCh0KTtsZXQgbj17dG9wOjMwLHJpZ2h0OjEwLGJvdHRvbToxMCxsZWZ0OjEwfSxpPTEwMCxvPTIwMCxhPXIqaStuLmxlZnQrbi5yaWdodCxzPW8rbi50b3Arbi5ib3R0b207dGhpcy5zdmcuYXR0cigidmlld0JveCIsYDAgMCAke2F9ICR7c31gKSx0aGlzLnN2Zy5hdHRyKCJwcmVzZXJ2ZUFzcGVjdFJhdGlvIiwieE1pZFlNaWQiKSx0aGlzLnN2Zy5zdHlsZSgibWluLXdpZHRoIixhKyJweCIpLHRoaXMuc3ZnLnN0eWxlKCJtaW4taGVpZ2h0IixzKyJweCIpLHRoaXMud2lkdGg9YS1uLmxlZnQtbi5yaWdodCx0aGlzLmhlaWdodD1zLW4udG9wLW4uYm90dG9tLHRoaXMuc3ZnRz10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLF9QKG4ubGVmdCxuLnRvcCkpfX0sYVY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5fc3ZnUHJvcHM9dCx0aGlzLl9zY2hlbWE9cix0aGlzLl9wZWFrZWRTZXNzaW9uR3JvdXBDaGFuZ2VkQ0I9bix0aGlzLl9zZWxlY3RlZFNlc3Npb25Hcm91cENoYW5nZWRDQj1pLHRoaXMuX2F4ZXNDb2xsZWN0aW9uPW5ldyBuVih0LHIsdGhpcyksdGhpcy5fbGluZXNDb2xsZWN0aW9uPW5ldyBpVih0LHIsdGhpcy5fYXhlc0NvbGxlY3Rpb24pLHRoaXMuX3N2Z1Byb3BzLnN2Zy5vbigiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSkub24oIm1vdXNlbW92ZSBtb3VzZWVudGVyIiwoKT0+e2xldFtvLGFdPXpvKHRoaXMuX3N2Z1Byb3BzLnN2Z0cubm9kZSgpKTt0aGlzLm9uTW91c2VNb3ZlZChvLGEpfSkub24oIm1vdXNlbGVhdmUiLCgpPT50aGlzLm9uTW91c2VMZWF2ZSgpKX1vbkRyYWdTdGFydCh0KXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnU3RhcnQodCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLmhpZGVCYWNrZ3JvdW5kTGluZXMoKX1vbkRyYWcodCl7dGhpcy5fYXhlc0NvbGxlY3Rpb24uZHJhZyh0KSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlQ29udHJvbFBvaW50cyhqZi5GT1JFR1JPVU5EKX1vbkRyYWdFbmQoKXt0aGlzLl9heGVzQ29sbGVjdGlvbi5kcmFnRW5kKDUwMCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuRk9SRUdST1VORCw1MDApLHdpbmRvdy5zZXRUaW1lb3V0KCgpPT57dGhpcy5fbGluZXNDb2xsZWN0aW9uLnJlY29tcHV0ZUNvbnRyb2xQb2ludHMoamYuQkFDS0dST1VORCksdGhpcy5fbGluZXNDb2xsZWN0aW9uLnNob3dCYWNrZ3JvdW5kTGluZXMoKX0sNTAwKX1vbkJydXNoQ2hhbmdlZCh0LHIpe3RoaXMuX2F4ZXNDb2xsZWN0aW9uLmdldEF4aXNGb3JDb2xJbmRleCh0KS5zZXRCcnVzaFNlbGVjdGlvbihyKSx0aGlzLl9saW5lc0NvbGxlY3Rpb24ucmVjb21wdXRlRm9yZWdyb3VuZExpbmVzVmlzaWJpbGl0eSgpfW9uTW91c2VNb3ZlZCh0LHIpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVQZWFrZWRTZXNzaW9uR3JvdXAodGhpcy5fbGluZXNDb2xsZWN0aW9uLmZpbmRDbG9zZXN0U2Vzc2lvbkdyb3VwKHQscikpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQih0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkuc2Vzc2lvbkdyb3VwKCkpfW9uTW91c2VMZWF2ZSgpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5pc051bGwoKXx8KHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5jbGVhclBlYWtlZFNlc3Npb25Hcm91cCgpLHRoaXMuX3BlYWtlZFNlc3Npb25Hcm91cENoYW5nZWRDQihudWxsKSl9b25DbGljaygpe3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKT09PXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpP3RoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cChuZXcgdGgpOnRoaXMuX2xpbmVzQ29sbGVjdGlvbi51cGRhdGVTZWxlY3RlZFNlc3Npb25Hcm91cCh0aGlzLl9saW5lc0NvbGxlY3Rpb24ucGVha2VkU2Vzc2lvbkdyb3VwSGFuZGxlKCkpLHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHQscil7dGhpcy5fYXhlc0NvbGxlY3Rpb24udXBkYXRlQXhlcyh0LHIpO2xldCBuPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSxpPXRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpO3RoaXMuX2xpbmVzQ29sbGVjdGlvbi5yZWRyYXcocix0LmNvbG9yQnlDb2x1bW5JbmRleCE9PXZvaWQgMD90LmNvbHVtbnNbdC5jb2xvckJ5Q29sdW1uSW5kZXhdLmFic29sdXRlSW5kZXg6bnVsbCx0Lm1pbkNvbG9yLHQubWF4Q29sb3IpLG4uZXF1YWxzVG8odGhpcy5fbGluZXNDb2xsZWN0aW9uLnBlYWtlZFNlc3Npb25Hcm91cEhhbmRsZSgpKXx8dGhpcy5fcGVha2VkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5wZWFrZWRTZXNzaW9uR3JvdXBIYW5kbGUoKS5zZXNzaW9uR3JvdXAoKSksaS5lcXVhbHNUbyh0aGlzLl9saW5lc0NvbGxlY3Rpb24uc2VsZWN0ZWRTZXNzaW9uR3JvdXBIYW5kbGUoKSl8fHRoaXMuX3NlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZENCKHRoaXMuX2xpbmVzQ29sbGVjdGlvbi5zZWxlY3RlZFNlc3Npb25Hcm91cEhhbmRsZSgpLnNlc3Npb25Hcm91cCgpKX1zY2hlbWEoKXtyZXR1cm4gdGhpcy5fc2NoZW1hfX07dmFyIGVoPWNsYXNzIGV4dGVuZHMgR3QoX28obXQpKXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1udWxsLHRoaXMuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsLHRoaXMucmVkcmF3Q291bnQ9MH1fb3B0aW9uc09yU2Vzc2lvbkdyb3Vwc0NoYW5nZWQoKXt2YXIgbjtpZighdGhpcy5vcHRpb25zKXJldHVybjtsZXR7Y29uZmlndXJhdGlvbjp0fT0obj10aGlzLl9wcmV2T3B0aW9ucykhPW51bGw/bjp7fSx7Y29uZmlndXJhdGlvbjpyfT10aGlzLm9wdGlvbnM7aWYodGhpcy5faW50ZXJhY3Rpb25NYW5hZ2VyPT09dm9pZCAwfHwhcWN0LmlzRXF1YWwodD09bnVsbD92b2lkIDA6dC5zY2hlbWEsci5zY2hlbWEpfHwhcWN0LmlzRXF1YWwodD09bnVsbD92b2lkIDA6dC5jb2x1bW5zVmlzaWJpbGl0eSxyLmNvbHVtbnNWaXNpYmlsaXR5KSl7SHQodGhpcy4kLnN2Zykuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7bGV0IGk9bmV3IG9WKHRoaXMuJC5zdmcsci5jb2x1bW5zVmlzaWJpbGl0eS5maWx0ZXIoQm9vbGVhbikubGVuZ3RoKTt0aGlzLnNjb3BlU3VidHJlZSh0aGlzLiQuc3ZnLCEwKSx0aGlzLl9pbnRlcmFjdGlvbk1hbmFnZXI9bmV3IGFWKGksci5zY2hlbWEsbz0+dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwQ2hhbmdlZChvKSxvPT50aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwQ2hhbmdlZChvKSl9dGhpcy5fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3VwcygpLHRoaXMuX2ludGVyYWN0aW9uTWFuYWdlci5vbk9wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkKHRoaXMub3B0aW9ucyx0aGlzLl92YWxpZFNlc3Npb25Hcm91cHMpLHRoaXMucmVkcmF3Q291bnQrKyx0aGlzLl9wcmV2T3B0aW9ucz10aGlzLm9wdGlvbnN9Y2xvc2VzdFNlc3Npb25Hcm91cENoYW5nZWQodCl7dGhpcy5jbG9zZXN0U2Vzc2lvbkdyb3VwPXR9c2VsZWN0ZWRTZXNzaW9uR3JvdXBDaGFuZ2VkKHQpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9dH1fY29tcHV0ZVZhbGlkU2Vzc2lvbkdyb3Vwcygpe2xldCB0PWNzO2lmKHRoaXMuc2Vzc2lvbkdyb3Vwcz09PXZvaWQgMCl7dGhpcy5fdmFsaWRTZXNzaW9uR3JvdXBzPXZvaWQgMDtyZXR1cm59bGV0IHI9dGhpcy5vcHRpb25zLmNvbmZpZ3VyYXRpb24uc2NoZW1hO3RoaXMuX3ZhbGlkU2Vzc2lvbkdyb3Vwcz10aGlzLnNlc3Npb25Hcm91cHMuZmlsdGVyKG49Pntmb3IobGV0IGk9MDtpPHQubnVtQ29sdW1ucyhyKTsrK2kpaWYoISF0aGlzLm9wdGlvbnMuY29uZmlndXJhdGlvbi5jb2x1bW5zVmlzaWJpbGl0eVtpXSYmdC5jb2x1bW5WYWx1ZUJ5SW5kZXgocixuLGkpPT09dm9pZCAwKXJldHVybiExO3JldHVybiEwfSl9fTtlaC50ZW1wbGF0ZT1RYAogICAgPGRpdiBpZD0iY29udGFpbmVyIj4KICAgICAgPHN2ZyBpZD0ic3ZnIj48L3N2Zz4KICAgIDwvZGl2PgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgLS10Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90LWF4aXMtc2hhZG93OiAwIDFweCAwICNmZmYsCiAgICAgICAgICAxcHggMCAwICNmZmYsIDAgLTFweCAwICNmZmYsIC0xcHggMCAwICNmZmY7CiAgICAgIH0KICAgICAgOmhvc3QoLmRhcmstbW9kZSkgewogICAgICAgIC0tdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdC1heGlzLXNoYWRvdzogMCAxcHggMCAjMDAwLAogICAgICAgICAgMXB4IDAgMCAjMDAwLCAwIC0xcHggMCAjMDAwLCAtMXB4IDAgMCAjMDAwOwogICAgICB9CiAgICAgIHN2ZyB7CiAgICAgICAgZm9udDogMTBweCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAuYmFja2dyb3VuZCBwYXRoIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogI2RkZDsKICAgICAgICBzaGFwZS1yZW5kZXJpbmc6IGNyaXNwRWRnZXM7CiAgICAgIH0KCiAgICAgIC5mb3JlZ3JvdW5kIHBhdGggewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuNzsKICAgICAgICBzdHJva2Utd2lkdGg6IDE7CiAgICAgIH0KCiAgICAgIC8qIFdpbGwgYmUgc2V0IG9uIGZvcmVncm91bmQgcGF0aHMgdGhhdCBhcmUgbm90ICJjb250YWluZWQiIGluIHRoZSBjdXJyZW50CiAgICAgICAgIGF4ZXMgYnJ1c2hlcy4gSWYgbm8gYnJ1c2hlcyBhcmUgc2V0LCBubyBwYXRoIHdpbGwgaGF2ZSB0aGlzIGNsYXNzLiAqLwogICAgICAuZm9yZWdyb3VuZCAuaW52aXNpYmxlLXBhdGggewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0eWxlIGZvciB0aGUgcGF0aCBjbG9zZXN0IHRvIHRoZSBtb3VzZSBwb2ludGVyICh0eXBpY2FsbHkgd2lsbCBiZWNvbWUKICAgICAgdGhlIHNlbGVjdGVkIHBhdGggd2hlbiB0aGUgdXNlciBjbGlja3MpLiAqLwogICAgICAuZm9yZWdyb3VuZCAucGVha2VkLXBhdGggewogICAgICAgIHN0cm9rZS13aWR0aDogMzsKICAgICAgfQoKICAgICAgLyogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwYXRoIGNsYXNzLiBXZSB1c2UgIWltcG9ydGFudCB0byBvdmVycmlkZSB0aGUKICAgICAgICAgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBjb2xvciBvZiBhIHBhdGguICovCiAgICAgIC5mb3JlZ3JvdW5kIC5zZWxlY3RlZC1wYXRoIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDMgIWltcG9ydGFudDsKICAgICAgICBzdHJva2U6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICBzdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmF4aXMgdGV4dCB7CiAgICAgICAgdGV4dC1zaGFkb3c6IHZhcigtLXRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXBsb3QtYXhpcy1zaGFkb3cpOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgICBjdXJzb3I6IG1vdmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sZWgucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGVoLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJjbG9zZXN0U2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGVoLnByb3RvdHlwZSwicmVkcmF3Q291bnQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlaC5wcm90b3R5cGUsIl92YWxpZFNlc3Npb25Hcm91cHMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZWgucHJvdG90eXBlLCJfaW50ZXJhY3Rpb25NYW5hZ2VyIix2b2lkIDApO0UoW0J0KCJvcHRpb25zLioiLCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGVoLnByb3RvdHlwZSwiX29wdGlvbnNPclNlc3Npb25Hcm91cHNDaGFuZ2VkIixudWxsKTtlaD1FKFt5dCgidGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdCIpXSxlaCk7dmFyIEEwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMub3B0aW9ucz1udWxsfV9jb25maWd1cmF0aW9uQ2hhbmdlZCgpe2xldCB0PXRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHI9dGhpcy5jb25maWd1cmF0aW9uLnNjaGVtYSxuPShhLHMpPT4oe25hbWU6RmQoYSksaW5kZXg6cyxhYnNvbHV0ZUluZGV4Ok9IKHIsdCxzKSxzY2FsZTp0aGlzLl9pc051bWVyaWNDb2x1bW4ocyk/IkxJTkVBUiI6Ik5PTl9OVU1FUklDIn0pLGk9KGEscyk9PntsZXQgbD1zK3QuaHBhcmFtSW5mb3MubGVuZ3RoO3JldHVybntzY2FsZToiTElORUFSIixuYW1lOlF1KGEpLGluZGV4OmwsYWJzb2x1dGVJbmRleDpPSChyLHQsbCl9fSxvPXtjb2x1bW5zOnQuaHBhcmFtSW5mb3MubWFwKG4pLmNvbmNhdCh0Lm1ldHJpY0luZm9zLm1hcChpKSksbWluQ29sb3I6IiMwMDAwRkYiLG1heENvbG9yOiIjRkYwMDAwIixjb25maWd1cmF0aW9uOnRoaXMuY29uZmlndXJhdGlvbn07dGhpcy5zZXQoIm9wdGlvbnMiLG8pLHVpKCksdGhpcy5zZXQoIm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4Iix0aGlzLl9kZWZhdWx0Q29sb3JCeUNvbHVtbkluZGV4KCkpfV91bnNlbGVjdERpc2FibGVkTG9nU2NhbGVzKCl7dGhpcy5vcHRpb25zIT09bnVsbCYmdGhpcy5vcHRpb25zLmNvbHVtbnMuZm9yRWFjaCh0PT57bGV0IHI9Im9wdGlvbnMuY29sdW1ucy4iK3QuaW5kZXg7IXRoaXMuX2FsbG93TG9nU2NhbGUodCkmJnQuc2NhbGU9PT0iTE9HIiYmdGhpcy5zZXQocisiLnNjYWxlIiwiTElORUFSIil9KX1fYWxsb3dMb2dTY2FsZSh0KXtpZighdGhpcy5faXNOdW1lcmljQ29sdW1uKHQuaW5kZXgpfHwhdGhpcy5zZXNzaW9uR3JvdXBzKXJldHVybiExO2xldFtyLG5dPWdQKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0LmluZGV4KTtyZXR1cm4gcj4wfHxuPDB9X2lzTnVtZXJpY0NvbHVtbih0KXtyZXR1cm4gdD49dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MubGVuZ3RofHx0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvc1t0XS50eXBlPT09IkRBVEFfVFlQRV9GTE9BVDY0In1fZGVmYXVsdENvbG9yQnlDb2x1bW5JbmRleCgpe2lmKHRoaXMuY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zLmxlbmd0aD4wKXJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYS5ocGFyYW1JbmZvcy5sZW5ndGg7bGV0IHQ9dGhpcy5jb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWEuaHBhcmFtSW5mb3MuZmluZEluZGV4KHI9PnIudHlwZT09PSJEQVRBX1RZUEVfRkxPQVQ2NCIpO2lmKHQhPT0tMSlyZXR1cm4gdH19O0EwLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGNsYXNzPSJjb250cm9sLXBhbmVsIj4KICAgICAgPCEtLSAnQ29sb3IgYnknIGRyb3AgZG93biBtZW51IC0tPgogICAgICA8cGFwZXItZHJvcGRvd24tbWVudQogICAgICAgIGxhYmVsPSJDb2xvciBieSIKICAgICAgICBpZD0iY29sb3JCeURyb3BEb3duTWVudSIKICAgICAgICBob3Jpem9udGFsLWFsaWduPSJsZWZ0IgogICAgICA+CiAgICAgICAgPHBhcGVyLWxpc3Rib3gKICAgICAgICAgIGNsYXNzPSJkcm9wZG93bi1jb250ZW50IgogICAgICAgICAgc2xvdD0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgIHNlbGVjdGVkPSJ7e29wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4fX0iCiAgICAgICAgICBpZD0iY29sb3JCeUxpc3RCb3giCiAgICAgICAgPgogICAgICAgICAgPHRlbXBsYXRlCiAgICAgICAgICAgIGlzPSJkb20tcmVwZWF0IgogICAgICAgICAgICBpdGVtcz0iW1tvcHRpb25zLmNvbHVtbnNdXSIKICAgICAgICAgICAgYXM9ImNvbHVtbiIKICAgICAgICAgICAgaWQ9ImNvbG9yQnlDb2x1bW5UZW1wbGF0ZSIKICAgICAgICAgID4KICAgICAgICAgICAgPHBhcGVyLWl0ZW0gZGlzYWJsZWQ9IltbIV9pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgICBbW2NvbHVtbi5uYW1lXV0KICAgICAgICAgICAgPC9wYXBlci1pdGVtPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3BhcGVyLWxpc3Rib3g+CiAgICAgIDwvcGFwZXItZHJvcGRvd24tbWVudT4KCiAgICAgIDwhLS0gQ29sdW1ucyBzY2FsZXMgLS0+CiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMtY29udGFpbmVyIj4KICAgICAgICA8IS0tIFNjYWxlIG9wdGlvbnMgZm9yIGVhY2ggbnVtZXJpYyBmZWF0dXJlIC0tPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9Int7b3B0aW9ucy5jb2x1bW5zfX0iIGFzPSJjb2x1bW4iPgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19pc051bWVyaWNDb2x1bW4oY29sdW1uLmluZGV4KV1dIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4tdGl0bGUiPltbY29sdW1uLm5hbWVdXTwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tZ3JvdXAKICAgICAgICAgICAgICAgICAgY2xhc3M9InNjYWxlLXJhZGlvLWdyb3VwIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZD0ie3tjb2x1bW4uc2NhbGV9fSIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJMSU5FQVIiPgogICAgICAgICAgICAgICAgICAgIExpbmVhcgogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPCEtLSBUaGUgaWQgaGVyZSBpcyB1c2VkIHRvIGFjY2VzcyB0aGlzIGJ1dHRvbiBpbiB1bml0CiAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuLS0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24KICAgICAgICAgICAgICAgICAgICBpZD0ibG9nU2NhbGVCdXR0b25fW1tjb2x1bW4ubmFtZV1dIgogICAgICAgICAgICAgICAgICAgIG5hbWU9IkxPRyIKICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1shX2FsbG93TG9nU2NhbGUoY29sdW1uLCBzZXNzaW9uR3JvdXBzLiopXV0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICBMb2dhcml0aG1pYwogICAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWJ1dHRvbj4KICAgICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBuYW1lPSJRVUFOVElMRSI+CiAgICAgICAgICAgICAgICAgICAgUXVhbnRpbGUKICAgICAgICAgICAgICAgICAgPC9wYXBlci1yYWRpby1idXR0b24+CiAgICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbC1wYW5lbCB7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KICAgICAgLmNvbHVtbiB7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgICAgIGJvcmRlcjogc29saWQgMXB4IGRhcmtncmF5OwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuY29sdW1uLXRpdGxlIHsKICAgICAgICAvKiBGaXQgZXZlcnkgdGl0bGUgaW4gb25lIGxpbmUgc28gdGhlIHJhZGlvIGJveGVzIGFsaWduIHZlcnRpY2FsbHkuICovCiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAuY29sdW1ucy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAuc2NhbGUtcmFkaW8tZ3JvdXAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgcGFwZXItbGlzdGJveCB7CiAgICAgICAgbWF4LWhlaWdodDogMTVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLEEwLnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sQTAucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0LG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxBMC5wcm90b3R5cGUsIm9wdGlvbnMiLHZvaWQgMCk7RShbQnQoImNvbmZpZ3VyYXRpb24uKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sQTAucHJvdG90eXBlLCJfY29uZmlndXJhdGlvbkNoYW5nZWQiLG51bGwpO0UoW0J0KCJzZXNzaW9uR3JvdXBzLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLEEwLnByb3RvdHlwZSwiX3Vuc2VsZWN0RGlzYWJsZWRMb2dTY2FsZXMiLG51bGwpO0EwPUUoW3l0KCJ0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scyIpXSxBMCk7dmFyIGh2PWNsYXNzIGV4dGVuZHMgbXR7X2Nsb3Nlc3RPclNlbGVjdGVkKHQscil7cmV0dXJuIHQhPT1udWxsP3Q6cn19O2h2LnRlbXBsYXRlPVFgCiAgICA8IS0tIENvbnRyb2xzIGJlaGF2aW9yIG9mIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QKICAgICAgICAgb3V0cHV0cyBzZXQgb3B0aW9ucyB0byB0aGUgX29wdGlvbnMgcHJvcGVydHkuCiAgICAgIC0tPgogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0IG9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI+CiAgICAgIDwhLS0gVGhlIHNjYWxlIGFuZCBjb2xvciBjb250cm9scy4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIGlkPSJjb250cm9scyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHBhcmFsbGVsIGNvb3JkaW5hdGVzIHBsb3QgLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy1wbG90CiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgc2VsZWN0ZWQtc2Vzc2lvbi1ncm91cD0ie3tfc2VsZWN0ZWRHcm91cH19IgogICAgICAgIGNsb3Nlc3Qtc2Vzc2lvbi1ncm91cD0ie3tfY2xvc2VzdEdyb3VwfX0iCiAgICAgICAgb3B0aW9ucz0iW1tfb3B0aW9uc11dIgogICAgICA+CiAgICAgIDwvdGYtaHBhcmFtcy1wYXJhbGxlbC1jb29yZHMtcGxvdD4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC12YWx1ZXMKICAgICAgICBpZD0idmFsdWVzIgogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cD0iW1tfY2xvc2VzdE9yU2VsZWN0ZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLWRldGFpbHMKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBzbG90PSJjb250ZW50IgogICAgICAgIGNsYXNzPSJzZWN0aW9uIgogICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgIHNlc3Npb24tZ3JvdXA9IltbX3NlbGVjdGVkR3JvdXBdXSIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzPgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KCiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgIH0KICAgICAgI2RldGFpbHMgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGh2LnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxodi5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGh2LnByb3RvdHlwZSwiY29uZmlndXJhdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0saHYucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO2h2PUUoW3l0KCJ0Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3IildLGh2KTt2YXIgeTM9RWUoT2UoKSwxKTt2YXIgJG89Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLmNsb3Nlc3RTZXNzaW9uR3JvdXA9bnVsbCx0aGlzLl9jb250YWluZXI9bnVsbCx0aGlzLl9zdmc9bnVsbCx0aGlzLndpZHRoPTAsdGhpcy5oZWlnaHQ9MCx0aGlzLl9icnVzaGVkQ2VsbEluZGV4PW51bGwsdGhpcy5fYnJ1c2hTZWxlY3Rpb249bnVsbH1yZWFkeSgpe3N1cGVyLnJlYWR5KCksdGhpcy5fY29udGFpbmVyPXRoaXMuJC5jb250YWluZXIsdGhpcy5fc3ZnPUh0KHRoaXMuJC5zdmcpLHRoaXMuX3JlZHJhdygpfV9zZXNzaW9uR3JvdXBzQ2hhbmdlZCgpe3RoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAhPT1udWxsJiYodGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cD1wY3QodGhpcy5zZXNzaW9uR3JvdXBzLHRoaXMuc2VsZWN0ZWRTZXNzaW9uR3JvdXAubmFtZSl8fG51bGwpLHRoaXMuX3JlZHJhdygpfV92aXNpYmxlU2NoZW1hQ2hhbmdlZCgpe3RoaXMuX2JydXNoZWRDZWxsSW5kZXg9bnVsbCx0aGlzLl9icnVzaFNlbGVjdGlvbj1udWxsLHRoaXMuX3JlZHJhdygpfV9yZWRyYXcoKXt0aGlzLmRlYm91bmNlKCJfcmVkcmF3IiwoKT0+e2xldCB0PWNzLHI9MTIwMCxuPS40KnIsaT0xNTAsbz0uNzUqaTt0aGlzLndpZHRoPU1hdGgubWF4KGkqdC5udW1WaXNpYmxlQ29sdW1ucyh0aGlzLnZpc2libGVTY2hlbWEpLHIpLHRoaXMuaGVpZ2h0PU1hdGgubWF4KG8qdC5udW1WaXNpYmxlTWV0cmljcyh0aGlzLnZpc2libGVTY2hlbWEpLG4pLHRoaXMuX2NvbnRhaW5lci5zdHlsZS53aWR0aD10aGlzLndpZHRoKyJweCIsdGhpcy5fY29udGFpbmVyLnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCsicHgiLHRoaXMuX3N2Zy5hdHRyKCJ3aWR0aCIsdGhpcy53aWR0aCkuYXR0cigiaGVpZ2h0Iix0aGlzLmhlaWdodCksdGhpcy5fc3ZnLnNlbGVjdEFsbCgiZyIpLnJlbW92ZSgpLHRoaXMuX2RyYXcoKX0sMTAwKX1fZHJhdygpe2xldCB0PWNzLHI9dGhpcztpZighdGhpcy5zZXNzaW9uR3JvdXBzfHx0aGlzLnNlc3Npb25Hcm91cHMubGVuZ3RoPT0wfHwhdGhpcy52aXNpYmxlU2NoZW1hfHx0aGlzLnZpc2libGVTY2hlbWEubWV0cmljSW5mb3MubGVuZ3RoPT0wKXJldHVybjtsZXQgbj1Jcih0Lm51bVZpc2libGVDb2x1bW5zKHIudmlzaWJsZVNjaGVtYSkpLGk9SXIodC5udW1WaXNpYmxlTWV0cmljcyhyLnZpc2libGVTY2hlbWEpKSxvPTgwLGE9NTAscz01LGw9UW0oKS5kb21haW4obikucmFuZ2UoW28rcyx0aGlzLndpZHRoLTEtc10pLnBhZGRpbmdJbm5lciguMSksYz1RbSgpLmRvbWFpbihpKS5yYW5nZShbdGhpcy5oZWlnaHQtMS1zLWEsc10pLnBhZGRpbmdJbm5lciguMSksdT1sLmJhbmR3aWR0aCgpLGg9Yy5iYW5kd2lkdGgoKSxmPW4ubWFwKGN0PT5yLl9jZWxsU2NhbGUoY3QsWzAsdS0xXSkpLHA9aS5tYXAoY3Q9PnIuX2NlbGxTY2FsZShjdCt0Lm51bVZpc2libGVIUGFyYW1zKHIudmlzaWJsZVNjaGVtYSksW2gtMSwwXSkpLGQ9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLngtYXhpcyIpLmRhdGEobikuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ4LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGN0PT50LnRyYW5zbGF0ZVN0cihsKGN0KSwwKSk7ZnVuY3Rpb24gZyhjdCl7cmV0dXJuIngtYXhpcy1jbGlwLXBhdGgtIitjdH1mdW5jdGlvbiBfKGN0KXtyZXR1cm4ieC1sYWJlbC1jbGlwLXBhdGgtIitjdH1kLmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsZykuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLXMpLmF0dHIoInkiLDApLmF0dHIoIndpZHRoIix1KzIqcykuYXR0cigiaGVpZ2h0IixyLmhlaWdodC1hLzIpLGQuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixfKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixyLmhlaWdodC1hLzIpLmF0dHIoIndpZHRoIix1KS5hdHRyKCJoZWlnaHQiLGEvMiksZC5hcHBlbmQoImciKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK2coY3QpKyIpIikuZWFjaChmdW5jdGlvbihjdCl7SHQodGhpcykuY2FsbChTLEs5KGZbY3RdKS50aWNrU2l6ZShyLmhlaWdodC1hKSx1LDQwLHIub3B0aW9ucy5jb2x1bW5zW2N0XS5zY2FsZSl9KSxkLmFwcGVuZCgiZyIpLmNsYXNzZWQoIngtYXhpcy1sYWJlbCIsITApLmF0dHIoImNsaXAtcGF0aCIsY3Q9PiJ1cmwoIyIrXyhjdCkrIikiKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmF0dHIoIngiLHUvMikuYXR0cigieSIsci5oZWlnaHQtMS1hLzQpLnRleHQoY3Q9PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoci52aXNpYmxlU2NoZW1hLGN0KSkuYXBwZW5kKCJ0aXRsZSIpLnRleHQoY3Q9PnQuc2NoZW1hVmlzaWJsZUNvbHVtbk5hbWUoci52aXNpYmxlU2NoZW1hLGN0KSk7bGV0IHk9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLnktYXhpcyIpLmRhdGEoaSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLGN0PT50LnRyYW5zbGF0ZVN0cihyLndpZHRoLTEsYyhjdCkpKTtmdW5jdGlvbiB4KGN0KXtyZXR1cm4ieS1heGlzLWNsaXAtcGF0aC0iK2N0fWZ1bmN0aW9uIGIoY3Qpe3JldHVybiJ5LWxhYmVsLWNsaXAtcGF0aC0iK2N0fXkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIix4KS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtKHIud2lkdGgtby8yLTEpKS5hdHRyKCJ5IiwtcykuYXR0cigid2lkdGgiLHIud2lkdGgtby8yKS5hdHRyKCJoZWlnaHQiLGgrMipzKSx5LmFwcGVuZCgiY2xpcFBhdGgiKS5hdHRyKCJpZCIsYikuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsLShyLndpZHRoLTEpKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsby8yKS5hdHRyKCJoZWlnaHQiLGgpLHkuYXBwZW5kKCJnIikuYXR0cigiY2xpcC1wYXRoIixjdD0+InVybCgjIit4KGN0KSsiKSIpLmVhY2goZnVuY3Rpb24oY3Qpe0h0KHRoaXMpLmNhbGwoUyxsYihwW2N0XSkudGlja1NpemUoci53aWR0aC1vKSxoLDIwLHIub3B0aW9ucy5jb2x1bW5zW2N0K3QubnVtVmlzaWJsZUhQYXJhbXMoci52aXNpYmxlU2NoZW1hKV0uc2NhbGUpfSkseS5hcHBlbmQoImciKS5jbGFzc2VkKCJ5LWF4aXMtbGFiZWwiLCEwKS5hdHRyKCJjbGlwLXBhdGgiLGN0PT4idXJsKCMiK2IoY3QpKyIpIikuYXBwZW5kKCJ0ZXh0IikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJ4IiwtKHIud2lkdGgtby80LTEpKS5hdHRyKCJ5IixoLzIpLmF0dHIoInRyYW5zZm9ybSIsdC5yb3RhdGVTdHIoOTAsLShyLndpZHRoLW8vNC0xKSxoLzIpKS50ZXh0KGN0PT50Lm1ldHJpY05hbWUoci52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2N0XSkpLmFwcGVuZCgidGl0bGUiKS50ZXh0KGN0PT50Lm1ldHJpY05hbWUoci52aXNpYmxlU2NoZW1hLm1ldHJpY0luZm9zW2N0XSkpO2Z1bmN0aW9uIFMoY3QsWCxldCxkdCxxKXtsZXQgcHQ9TWF0aC5mbG9vcihldC9kdCksaHQ9WC5zY2FsZSgpO2lmKHE9PT0iUVVBTlRJTEUiKXtsZXQgd3Q9aHQucXVhbnRpbGVzKCksa3Q9TWF0aC5jZWlsKHd0Lmxlbmd0aC9wdCk7d3Q9SXIoMCx3dC5sZW5ndGgsa3QpLm1hcChpZT0+d3RbaWVdKSxYLnRpY2tWYWx1ZXMod3QpLnRpY2tGb3JtYXQoeG4oIi0uMmciKSl9KHE9PT0iTElORUFSInx8cT09PSJMT0ciKSYmWC50aWNrcyhwdCksY3QuY2FsbChYKSxjdC5zZWxlY3RBbGwoIi5kb21haW4iKS5yZW1vdmUoKSxjdC5zZWxlY3RBbGwoIi50aWNrIGxpbmUiKS5hdHRyKCJzdHJva2UiLCIjZGRkIil9bGV0IEM9dGhpcy5fc3ZnLnNlbGVjdEFsbCgiLmNlbGwiKS5kYXRhKFU5KG4saSkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2VsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsKFtjdCxYXSk9PnQudHJhbnNsYXRlU3RyKGwoY3QpLGMoWCkpKSxQPUMuYXBwZW5kKCJnIikuY2xhc3NlZCgiZnJhbWUiLCEwKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJ4IiwtcykuYXR0cigieSIsLXMpLmF0dHIoIndpZHRoIix1KzIqcykuYXR0cigiaGVpZ2h0IixoKzIqcykuYXR0cigic3Ryb2tlIiwiIzAwMCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLGs9bnVsbDtyLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4IT09dm9pZCAwJiYoaz16bigpLmRvbWFpbih0aGlzLl9jb2xFeHRlbnQodGhpcy5vcHRpb25zLmNvbG9yQnlDb2x1bW5JbmRleCkpLnJhbmdlKFt0aGlzLm9wdGlvbnMubWluQ29sb3IsdGhpcy5vcHRpb25zLm1heENvbG9yXSkuaW50ZXJwb2xhdGUoTV8pKTtsZXQgTz1yLm9wdGlvbnMuY29sb3JCeUNvbHVtbkluZGV4PT09dm9pZCAwPygpPT4icmVkIjooe3Nlc3Npb25Hcm91cDpjdH0pPT5rKHRoaXMuX2NvbFZhbHVlKGN0LHIub3B0aW9ucy5jb2xvckJ5Q29sdW1uSW5kZXgpKTtmdW5jdGlvbiBEKGN0LFgpe3JldHVybiBmW1hdKHIuX2NvbFZhbHVlKGN0LFgpKX1mdW5jdGlvbiBCKGN0LFgpe3JldHVybiBwW1hdKHIuX21ldHJpY1ZhbHVlKGN0LFgpKX1mdW5jdGlvbiBJKGN0LFgpe2xldCBldD1jdC5zZWxlY3RBbGwoIi5kYXRhLW1hcmtlciIpLmRhdGEoKFtwdCxodF0pPT5yLnNlc3Npb25Hcm91cHMuZmlsdGVyKHd0PT5yLl9jb2xWYWx1ZSh3dCxwdCkhPT12b2lkIDAmJnIuX21ldHJpY1ZhbHVlKHd0LGh0KSE9PXZvaWQgMCkubWFwKHd0PT4oe2NvbDpwdCxtZXRyaWM6aHQsc2Vzc2lvbkdyb3VwOnd0LHg6RCh3dCxwdCkseTpCKHd0LGh0KSxzZXNzaW9uR3JvdXBNYXJrZXJzOm51bGx9KSkpLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5jbGFzc2VkKCJkYXRhLW1hcmtlciIsITApLmF0dHIoImN4Iiwoe3g6cHR9KT0+cHQpLmF0dHIoImN5Iiwoe3k6cHR9KT0+cHQpLmF0dHIoInIiLDIpLmF0dHIoImZpbGwiLFgpLGR0PW5ldyBNYXA7ci5zZXNzaW9uR3JvdXBzLmZvckVhY2gocHQ9PntkdC5zZXQocHQsW10pfSksZXQuZWFjaChmdW5jdGlvbihwdCl7dmFyIGh0OyhodD1kdC5nZXQocHQuc2Vzc2lvbkdyb3VwKSk9PW51bGx8fGh0LnB1c2godGhpcyl9KSxldC5lYWNoKHB0PT57bGV0IGh0PWR0LmdldChwdC5zZXNzaW9uR3JvdXApO3B0LnNlc3Npb25Hcm91cE1hcmtlcnM9bmV3IFNldChodCl9KTtsZXQgcT1uLm1hcChwdD0+aS5tYXAoaHQ9PmV0LmZpbHRlcih3dD0+d3QuY29sPT1wdCYmd3QubWV0cmljPT1odCkpKTtyZXR1cm5bZXQscSxkdF19bGV0W0wsUixGXT1JKEMuYXBwZW5kKCJnIiksTyk7ZnVuY3Rpb24geihjdCxYKXtsZXQgZXQ9W107cmV0dXJuIFJbY3RdW1hdLmVhY2goZnVuY3Rpb24oKXtldC5wdXNoKHRoaXMpfSksemgoKS54KGR0PT5IdChkdCkuZGF0dW0oKS54KS55KGR0PT5IdChkdCkuZGF0dW0oKS55KS5hZGRBbGwoZXQpfWxldCBVPW4ubWFwKGN0PT5pLm1hcChYPT56KGN0LFgpKSksVz1udWxsO2J0KCkmJihXPUMuZmlsdGVyKGN0PT55My5pc0VxdWFsKGN0LHIuX2JydXNoZWRDZWxsSW5kZXgpKSxjb25zb2xlLmFzc2VydChXLnNpemUoKT09MSxXKSk7bGV0IFo9bmV3IFNldChMLm5vZGVzKCkpO3J0KCk7ZnVuY3Rpb24gcnQoKXtsZXQgY3Q9bmV3IFNldChMLm5vZGVzKCkpO010KCl8fChjdD1vdChyLl9icnVzaGVkQ2VsbEluZGV4LHIuX2JydXNoU2VsZWN0aW9uKSksRXAoQXJyYXkuZnJvbSh0LmZpbHRlclNldChjdCxYPT4hWi5oYXMoWCkpKSkuYXR0cigiZmlsbCIsTyksRXAoQXJyYXkuZnJvbSh0LmZpbHRlclNldChaLFg9PiFjdC5oYXMoWCkpKSkuYXR0cigiZmlsbCIsIiNkZGQiKSxaPWN0fWZ1bmN0aW9uIG90KGN0LFgpe2NvbnNvbGUuYXNzZXJ0KGN0IT09bnVsbCksY29uc29sZS5hc3NlcnQoWCE9PW51bGwpO2xldFtldCxkdF09Y3QscT1uZXcgU2V0O3JldHVybiB0LnF1YWRUcmVlVmlzaXRQb2ludHNJblJlY3QoVVtldF1bZHRdLFhbMF1bMF0sWFswXVsxXSxYWzFdWzBdLFhbMV1bMV0scHQ9PntIdChwdCkuZGF0dW0oKS5zZXNzaW9uR3JvdXBNYXJrZXJzLmZvckVhY2god3Q9PntxLmFkZCh3dCl9KX0pLHF9bGV0IHN0PXFMKCkuZXh0ZW50KFtbLXMrMSwtcysxXSxbdS0xK3MtMSxoLTErcy0xXV0pLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtidCgpJiZXLm5vZGUoKSE9dGhpcyYmc3QubW92ZShXLG51bGwpLFN0KHRoaXMpfSkub24oImJydXNoIixmdW5jdGlvbigpe1N0KHRoaXMpfSkub24oImVuZCIsZnVuY3Rpb24oKXtTdCh0aGlzKX0pO2Z1bmN0aW9uIFN0KGN0KXtsZXQgWD1WTChjdCk7IWJ0KCkmJlg9PT1udWxsfHxidCgpJiZjdD09PVcubm9kZSgpJiZ5My5pc0VxdWFsKFgsci5fYnJ1c2hTZWxlY3Rpb24pfHwoci5fYnJ1c2hTZWxlY3Rpb249WCxYIT09bnVsbD8oVz1IdChjdCksci5fYnJ1c2hlZENlbGxJbmRleD1XLmRhdHVtKCkpOihXPW51bGwsci5fYnJ1c2hlZENlbGxJbmRleD1udWxsKSxydCgpKX1mdW5jdGlvbiBidCgpe3JldHVybiByLl9icnVzaGVkQ2VsbEluZGV4IT09bnVsbCYmci5fYnJ1c2hTZWxlY3Rpb24hPT1udWxsfWZ1bmN0aW9uIE10KCl7cmV0dXJuIWJ0KCl8fHIuX2JydXNoU2VsZWN0aW9uWzBdWzBdPT09ci5fYnJ1c2hTZWxlY3Rpb25bMV1bMF18fHIuX2JydXNoU2VsZWN0aW9uWzBdWzFdPT09ci5fYnJ1c2hTZWxlY3Rpb25bMV1bMV19Qy5jYWxsKHN0KSxidCgpJiZzdC5tb3ZlKFcsci5fYnJ1c2hTZWxlY3Rpb24pO2xldCBsdD1udWxsLEt0PW51bGw7dGhpcy5zZWxlY3RlZFNlc3Npb25Hcm91cCE9PW51bGwmJihLdD1FcChGLmdldCh0aGlzLnNlbGVjdGVkU2Vzc2lvbkdyb3VwKSkuY2xhc3NlZCgic2VsZWN0ZWQtbWFya2VyIiwhMCkpLEMub24oImNsaWNrIixmdW5jdGlvbigpe2xldCBjdD1sdD09PUt0P251bGw6bHQ7aWYoY3Q9PT1LdClyZXR1cm47S3QhPT1udWxsJiZLdC5jbGFzc2VkKCJzZWxlY3RlZC1tYXJrZXIiLCExKSxLdD1jdCxLdCE9PW51bGwmJkt0LmNsYXNzZWQoInNlbGVjdGVkLW1hcmtlciIsITApO2xldCBYPUt0PT09bnVsbD9udWxsOkt0LmRhdHVtKCkuc2Vzc2lvbkdyb3VwO3Iuc2VsZWN0ZWRTZXNzaW9uR3JvdXA9WH0pLm9uKCJtb3VzZW1vdmUgbW91c2VlbnRlciIsZnVuY3Rpb24oW2N0LFhdKXtsZXRbZXQsZHRdPXpvKHRoaXMpLHE9X3QoY3QsWCxldCxkdCwyMCk7bHQhPT1xJiYobHQhPT1udWxsJiZsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITEpLGx0PXEsbHQhPT1udWxsPyhsdC5jbGFzc2VkKCJjbG9zZXN0LW1hcmtlciIsITApLHIuY2xvc2VzdFNlc3Npb25Hcm91cD1sdC5kYXR1bSgpLnNlc3Npb25Hcm91cCk6ci5jbG9zZXN0U2Vzc2lvbkdyb3VwPW51bGwpfSkub24oIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKFtjdCxYXSl7bHQhPT1udWxsJiYobHQuY2xhc3NlZCgiY2xvc2VzdC1tYXJrZXIiLCExKSxsdD1udWxsLHIuY2xvc2VzdFNlc3Npb25Hcm91cD1udWxsKX0pO2Z1bmN0aW9uIF90KGN0LFgsZXQsZHQscSl7bGV0IHB0PTEvMCxodD1udWxsO3JldHVybiB0LnF1YWRUcmVlVmlzaXRQb2ludHNJbkRpc2soVVtjdF1bWF0sZXQsZHQscSwod3Qsa3QpPT57aWYoWi5oYXMod3QpJiZrdDxwdCl7bGV0IGllPUh0KHd0KS5kYXR1bSgpO3B0PWt0LGh0PWllLnNlc3Npb25Hcm91cH19KSxodD09PW51bGw/bnVsbDpFcChGLmdldChodCkpfXRoaXMuX3N2Zy5zZWxlY3RBbGwoIioiKS5jbGFzc2VkKCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIsITApfV9jZWxsU2NhbGUodCxyKXtsZXQgbj10aGlzLl9jb2xFeHRlbnQodCksaT16bigpLmRvbWFpbihuKS5yYW5nZShyKTtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJMSU5FQVIiKXJldHVybiBpO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5zW3RdLnNjYWxlPT09IkxPRyIpcmV0dXJuIG5bMF08PTAmJm5bMV0+PTA/aTpjYygpLmRvbWFpbihuKS5yYW5nZShyKTtpZih0aGlzLm9wdGlvbnMuY29sdW1uc1t0XS5zY2FsZT09PSJRVUFOVElMRSIpe2xldCBvPShyWzFdLXJbMF0pLzE5LGE9SXIoMjApLm1hcChzPT5yWzBdK28qcyk7cmV0dXJuIGVnKCkuZG9tYWluKHkzLnVuaXEodGhpcy5zZXNzaW9uR3JvdXBzLm1hcChzPT50aGlzLl9jb2xWYWx1ZShzLHQpKSkpLnJhbmdlKGEpfWVsc2V7aWYodGhpcy5vcHRpb25zLmNvbHVtbnNbdF0uc2NhbGU9PT0iTk9OX05VTUVSSUMiKXJldHVybiB0ZygpLmRvbWFpbih5My51bmlxKHRoaXMuc2Vzc2lvbkdyb3Vwcy5tYXAobz0+dGhpcy5fY29sVmFsdWUobyx0KSkuc29ydCgpKSkucmFuZ2UocikucGFkZGluZyguMSk7dGhyb3ciVW5rbm93biBzY2FsZSBmb3IgY29sdW1uOiAiK3QrIi4gb3B0aW9uczogIit0aGlzLm9wdGlvbnN9fV9jb2xWYWx1ZSh0LHIpe3JldHVybiBGSCh0aGlzLnZpc2libGVTY2hlbWEsdCxyKX1fbWV0cmljVmFsdWUodCxyKXtyZXR1cm4gekgodGhpcy52aXNpYmxlU2NoZW1hLHQscil9X2NvbEV4dGVudCh0KXtyZXR1cm4gZ1AodGhpcy52aXNpYmxlU2NoZW1hLHRoaXMuc2Vzc2lvbkdyb3Vwcyx0KX19OyRvLnRlbXBsYXRlPVFgCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8c3ZnIGlkPSJzdmciPjwvc3ZnPgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KICAgICAgc3ZnIHsKICAgICAgICBmb250OiAxMHB4IHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIHRleHQgewogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLmZyYW1lIHJlY3QgewogICAgICAgIHN0cm9rZTogY3VycmVudENvbG9yOwogICAgICB9CgogICAgICAvKiBUaGUgY2xvc2VzdCBkYXRhIHBvaW50IG1hcmtlciB0byB0aGUgbW91c2UgcG9pbnRlci4gV2UgdXNlICFpbXBvcnRhbnQKICAgICAgICAgdG8gb3ZlcnJpZGUgdGhlIGlubGluZSBzdHlsZSB0aGF0IHNldHMgdGhlIHJlZ3VsYXIgc3R5bGUgb2YgYSBtYXJrZXIuCiAgICAgICovCiAgICAgIC5jbG9zZXN0LW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAvKiBUaGUgY3VycmVudGx5IHNlbGVjdGVkIGRhdGEgcG9pbnQgbWFya2VyLiBXZSB1c2UgIWltcG9ydGFudCB0bwogICAgICAgICBvdmVycmlkZSB0aGUgaW5saW5lIHN0eWxlIHRoYXQgc2V0cyB0aGUgcmVndWxhciBzdHlsZSBvZiBhIG1hcmtlci4gKi8KICAgICAgLnNlbGVjdGVkLW1hcmtlciB7CiAgICAgICAgcjogNiAhaW1wb3J0YW50OwogICAgICAgIGZpbGw6ICMwZjAgIWltcG9ydGFudDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwidmlzaWJsZVNjaGVtYSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sJG8ucHJvdG90eXBlLCJzZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwib3B0aW9ucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJzZWxlY3RlZFNlc3Npb25Hcm91cCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdCxub3RpZnk6ITB9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJjbG9zZXN0U2Vzc2lvbkdyb3VwIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEhUTUxFbGVtZW50KV0sJG8ucHJvdG90eXBlLCJfY29udGFpbmVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwiX3N2ZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSwkby5wcm90b3R5cGUsIndpZHRoIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLCRvLnByb3RvdHlwZSwiaGVpZ2h0Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLCRvLnByb3RvdHlwZSwiX2JydXNoZWRDZWxsSW5kZXgiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sJG8ucHJvdG90eXBlLCJfYnJ1c2hTZWxlY3Rpb24iLHZvaWQgMCk7RShbQnQoInNlc3Npb25Hcm91cHMuKiIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sJG8ucHJvdG90eXBlLCJfc2Vzc2lvbkdyb3Vwc0NoYW5nZWQiLG51bGwpO0UoW0J0KCJ2aXNpYmxlU2NoZW1hLioiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLCRvLnByb3RvdHlwZSwiX3Zpc2libGVTY2hlbWFDaGFuZ2VkIixudWxsKTtFKFtCdCgib3B0aW9ucy4qIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSwkby5wcm90b3R5cGUsIl9yZWRyYXciLG51bGwpOyRvPUUoW3l0KCJ0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdCIpXSwkbyk7dmFyIGZ2PWNsYXNzIGV4dGVuZHMgbXR7X2Nsb3Nlc3RPclNlbGVjdGVkKHQscil7cmV0dXJuIHQhPT1udWxsP3Q6cn19O2Z2LnRlbXBsYXRlPVFgCiAgICA8aHBhcmFtcy1zcGxpdC1sYXlvdXQgb3JpZW50YXRpb249InZlcnRpY2FsIj4KICAgICAgPCEtLSBDb250cm9scyBiZWhhdmlvciBvZiB0aGUgc2NhdHRlciBwbG90IG1hdHJpeAogICAgICAgICAgICAgb3V0cHV0cyB0aGUgY29uZmlndXJlZCBvcHRpb25zIHRvIHRoZSBfb3B0aW9ucyBwcm9wZXJ0eS4gLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9ImNvbnRyb2xzIgogICAgICAgIGNvbmZpZ3VyYXRpb249IltbY29uZmlndXJhdGlvbl1dIgogICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICBvcHRpb25zPSJ7e19vcHRpb25zfX0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNjYWxlLWFuZC1jb2xvci1jb250cm9scz4KICAgICAgPCEtLSBUaGUgYWN0dWFsIHNjYXR0ZXIgcGxvdCBtYXRyaXggLS0+CiAgICAgIDx0Zi1ocGFyYW1zLXNjYXR0ZXItcGxvdC1tYXRyaXgtcGxvdAogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InBsb3QiCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgIHNlbGVjdGVkLXNlc3Npb24tZ3JvdXA9Int7X3NlbGVjdGVkR3JvdXB9fSIKICAgICAgICBjbG9zZXN0LXNlc3Npb24tZ3JvdXA9Int7X2Nsb3Nlc3RHcm91cH19IgogICAgICAgIG9wdGlvbnM9IltbX29wdGlvbnNdXSIKICAgICAgPgogICAgICA8L3RmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC1wbG90PgogICAgICA8dGYtaHBhcmFtcy1zZXNzaW9uLWdyb3VwLXZhbHVlcwogICAgICAgIHNsb3Q9ImNvbnRlbnQiCiAgICAgICAgY2xhc3M9InNlY3Rpb24iCiAgICAgICAgaWQ9InZhbHVlcyIKICAgICAgICB2aXNpYmxlLXNjaGVtYT0iW1tjb25maWd1cmF0aW9uLnZpc2libGVTY2hlbWFdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19jbG9zZXN0T3JTZWxlY3RlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Nsb3Nlc3RHcm91cCwgX3NlbGVjdGVkR3JvdXApXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtdmFsdWVzPgogICAgICA8IS0tIFNob3dzIHNlc3Npb24gZ3JvdXAgZGV0YWlscyBmb3IgdGhlIGNsaWNrZWQgbWFya2VyLiAtLT4KICAgICAgPHRmLWhwYXJhbXMtc2Vzc2lvbi1ncm91cC1kZXRhaWxzCiAgICAgICAgc2xvdD0iY29udGVudCIKICAgICAgICBjbGFzcz0ic2VjdGlvbiIKICAgICAgICBpZD0iZGV0YWlscyIKICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICBzZXNzaW9uLWdyb3VwPSJbW19zZWxlY3RlZEdyb3VwXV0iCiAgICAgICAgdmlzaWJsZS1zY2hlbWE9IltbY29uZmlndXJhdGlvbi52aXNpYmxlU2NoZW1hXV0iCiAgICAgID4KICAgICAgPC90Zi1ocGFyYW1zLXNlc3Npb24tZ3JvdXAtZGV0YWlscz4KICAgIDwvaHBhcmFtcy1zcGxpdC1sYXlvdXQ+CiAgICA8c3R5bGU+CiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgICB9CiAgICAgICNjb250cm9scyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgI3Bsb3QgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1heC1oZWlnaHQ6IGZpdC1jb250ZW50OwogICAgICB9CiAgICAgICN2YWx1ZXMgewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmbGV4LWJhc2lzOiBhdXRvOwogICAgICAgIGhlaWdodDogMTE1cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtYXgtaGVpZ2h0OiBmaXQtY29udGVudDsKICAgICAgfQogICAgICAjZGV0YWlscyB7CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAxOwogICAgICAgIGZsZXgtYmFzaXM6IGF1dG87CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgbWF4LWhlaWdodDogZml0LWNvbnRlbnQ7CiAgICAgIH0KICAgICAgdmFhZGluLXNwbGl0LWxheW91dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnYucHJvdG90eXBlLCJiYWNrZW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGZ2LnByb3RvdHlwZSwiZXhwZXJpbWVudE5hbWUiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sZnYucHJvdG90eXBlLCJjb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxmdi5wcm90b3R5cGUsInNlc3Npb25Hcm91cHMiLHZvaWQgMCk7ZnY9RShbeXQoInRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3IildLGZ2KTt2YXIgWGY9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2VsZWN0ZWRUYWI9MH19O1hmLnRlbXBsYXRlPVFgCiAgICA8cGFwZXItaGVhZGVyLXBhbmVsPgogICAgICA8cGFwZXItdG9vbGJhciBzbG90PSJoZWFkZXIiIGNsYXNzPSJ0YWItYmFyIj4KICAgICAgICA8cGFwZXItdGFicyBzZWxlY3RlZD0ie3tfc2VsZWN0ZWRUYWJ9fSIgc2xvdD0idG9wIj4KICAgICAgICAgIDwhLS0gdmlldy1pZCBjYW4gYmUgdXNlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cyB0byBsb2NhdGUgYSB0YWIuCiAgICAgICAgICAgICAgIEl0IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgcm9vdCBlbGVtZW50IGltcGxlbWVudGluZyB0aGUgdmlldwogICAgICAgICAgICAgICB3aXRob3V0IHRoZSAndGYtaHBhcmFtcy0nIHByZWZpeC4gLS0+CiAgICAgICAgICA8cGFwZXItdGFiIHZpZXctaWQ9InRhYmxlLXZpZXciPiBUQUJMRSBWSUVXIDwvcGFwZXItdGFiPgogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJwYXJhbGxlbC1jb29yZHMtdmlldyI+CiAgICAgICAgICAgIFBBUkFMTEVMIENPT1JESU5BVEVTIFZJRVcKICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgPHBhcGVyLXRhYiB2aWV3LWlkPSJzY2F0dGVyLXBsb3QtbWF0cml4LXZpZXciPgogICAgICAgICAgICBTQ0FUVEVSIFBMT1QgTUFUUklYIFZJRVcKICAgICAgICAgIDwvcGFwZXItdGFiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC1hbmQtZmVlZGJhY2siPgogICAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbYnVnUmVwb3J0VXJsXV0iPgogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmJD0iW1tidWdSZXBvcnRVcmxdXSIKICAgICAgICAgICAgICAgIHRhcmdldD0iX2JsYW5rIgogICAgICAgICAgICAgICAgcmVsPSJub29wZW5lciBub3JlZmVycmVyIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgICAgaWQ9ImJ1Zy1yZXBvcnQiCiAgICAgICAgICAgICAgICAgIHJhaXNlZAogICAgICAgICAgICAgICAgICB0aXRsZT0iU2VuZCBhIGJ1ZyByZXBvcnQgb3IgZmVhdHVyZSByZXF1ZXN0IgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBCdWcgUmVwb3J0IC8gRmVhdHVyZSBSZXF1ZXN0CiAgICAgICAgICAgICAgICA8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1toZWxwVXJsXV0iPgogICAgICAgICAgICAgIDxhIGhyZWYkPSJbW2hlbHBVcmxdXSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+CiAgICAgICAgICAgICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICAgICAgICAgICAgaWNvbj0iaGVscC1vdXRsaW5lIgogICAgICAgICAgICAgICAgICB0aXRsZT0iVmlldyBkb2N1bWVudGF0aW9uIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPC9wYXBlci1pY29uLWJ1dHRvbj4KICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L3BhcGVyLXRhYnM+CiAgICAgIDwvcGFwZXItdG9vbGJhcj4KICAgICAgPGlyb24tcGFnZXMgc2VsZWN0ZWQ9IltbX3NlbGVjdGVkVGFiXV0iIGNsYXNzPSJmaXQgdGFiLXZpZXciPgogICAgICAgIDxkaXYgaWQ9IjAiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtdGFibGUtdmlldwogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIHZpc2libGUtc2NoZW1hPSJbW2NvbmZpZ3VyYXRpb24udmlzaWJsZVNjaGVtYV1dIgogICAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0iW1tzZXNzaW9uR3JvdXBzXV0iCiAgICAgICAgICAgIGVuYWJsZS1zaG93LW1ldHJpY3MKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy10YWJsZS12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjEiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtcGFyYWxsZWwtY29vcmRzLXZpZXcKICAgICAgICAgICAgYmFja2VuZD0iW1tiYWNrZW5kXV0iCiAgICAgICAgICAgIGV4cGVyaW1lbnQtbmFtZT0iW1tleHBlcmltZW50TmFtZV1dIgogICAgICAgICAgICBjb25maWd1cmF0aW9uPSJbW2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9Iltbc2Vzc2lvbkdyb3Vwc11dIgogICAgICAgICAgPgogICAgICAgICAgPC90Zi1ocGFyYW1zLXBhcmFsbGVsLWNvb3Jkcy12aWV3PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgaWQ9IjIiIGNsYXNzPSJ0YWIiPgogICAgICAgICAgPHRmLWhwYXJhbXMtc2NhdHRlci1wbG90LW1hdHJpeC12aWV3CiAgICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgICBleHBlcmltZW50LW5hbWU9IltbZXhwZXJpbWVudE5hbWVdXSIKICAgICAgICAgICAgY29uZmlndXJhdGlvbj0iW1tjb25maWd1cmF0aW9uXV0iCiAgICAgICAgICAgIHNlc3Npb24tZ3JvdXBzPSJbW3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1zY2F0dGVyLXBsb3QtbWF0cml4LXZpZXc+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvaXJvbi1wYWdlcz4KICAgIDwvcGFwZXItaGVhZGVyLXBhbmVsPgoKICAgIDxzdHlsZT4KICAgICAgLnRhYi12aWV3IHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KICAgICAgLnRhYi1iYXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigKICAgICAgICAgIC0tdGItdG9vbGJhci1iYWNrZ3JvdW5kLWNvbG9yLAogICAgICAgICAgdmFyKC0tdGItb3JhbmdlLXN0cm9uZykKICAgICAgICApOwogICAgICB9CiAgICAgIC50YWIgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQogICAgICBwYXBlci10YWJzIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIC0tcGFwZXItdGFicy1zZWxlY3Rpb24tYmFyLWNvbG9yOiB3aGl0ZTsKICAgICAgICAtLXBhcGVyLXRhYnMtY29udGVudDogewogICAgICAgICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRmLWhwYXJhbXMtdGFibGUtdmlldyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5oZWxwLWFuZC1mZWVkYmFjayB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7IC8qIEVuc3VyZSB0aGF0IGljb25zIHN0YXkgYWxpZ25lZCAqLwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KICAgICAgI2J1Zy1yZXBvcnQgewogICAgICAgIGJvcmRlcjogc29saWQgYmxhY2s7CiAgICAgICAgYmFja2dyb3VuZDogcmVkOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZHM7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1heC13aWR0aDogMTUwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgfQogICAgICAuaGVscC1hbmQtZmVlZGJhY2sgYSB7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFhmLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxYZi5wcm90b3R5cGUsImhlbHBVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWGYucHJvdG90eXBlLCJidWdSZXBvcnRVcmwiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sWGYucHJvdG90eXBlLCJleHBlcmltZW50TmFtZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxYZi5wcm90b3R5cGUsImNvbmZpZ3VyYXRpb24iLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLFhmLnByb3RvdHlwZSwic2Vzc2lvbkdyb3VwcyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxYZi5wcm90b3R5cGUsIl9zZWxlY3RlZFRhYiIsdm9pZCAwKTtYZj1FKFt5dCgidGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lIildLFhmKTt2YXIgcmg9Y2xhc3MgZXh0ZW5kcyBHdChtdCl7cmVsb2FkKCl7dGhpcy4kWyJxdWVyeS1wYW5lIl0ucmVsb2FkKCl9fTtyaC50ZW1wbGF0ZT1RYAogICAgPGhwYXJhbXMtc3BsaXQtbGF5b3V0PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICA8dGYtaHBhcmFtcy1xdWVyeS1wYW5lCiAgICAgICAgICBpZD0icXVlcnktcGFuZSIKICAgICAgICAgIGJhY2tlbmQ9IltbYmFja2VuZF1dIgogICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICBjb25maWd1cmF0aW9uPSJ7e19jb25maWd1cmF0aW9ufX0iCiAgICAgICAgICBzZXNzaW9uLWdyb3Vwcz0ie3tfc2Vzc2lvbkdyb3Vwc319IgogICAgICAgICAgZGF0YS1sb2FkZWQtd2l0aC1ub24tZW1wdHktaHBhcmFtcz0ie3tfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXN9fSIKICAgICAgICAgIGRhdGEtbG9hZGVkLXdpdGgtZW1wdHktaHBhcmFtcz0ie3tfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXN9fSIKICAgICAgICA+CiAgICAgICAgPC90Zi1ocGFyYW1zLXF1ZXJ5LXBhbmU+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHNsb3Q9ImNvbnRlbnQiIGNsYXNzPSJjZW50ZXIiPgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvYWRlZFdpdGhFbXB0eUhwYXJhbXNdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaHBhcmFtcyBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgaHBhcmFtcyBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBFdmVudCBmaWxlcyBhcmUgc3RpbGwgYmVpbmcgbG9hZGVkICh0cnkgcmVsb2FkaW5nIHRoaXMgcGFnZSkuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXNdXSI+CiAgICAgICAgICA8dGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lCiAgICAgICAgICAgIGlkPSJzZXNzaW9ucy1wYW5lIgogICAgICAgICAgICBiYWNrZW5kPSJbW2JhY2tlbmRdXSIKICAgICAgICAgICAgaGVscC11cmw9IltbaGVscFVybF1dIgogICAgICAgICAgICBidWctcmVwb3J0LXVybD0iW1tidWdSZXBvcnRVcmxdXSIKICAgICAgICAgICAgZXhwZXJpbWVudC1uYW1lPSJbW2V4cGVyaW1lbnROYW1lXV0iCiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb249IltbX2NvbmZpZ3VyYXRpb25dXSIKICAgICAgICAgICAgc2Vzc2lvbi1ncm91cHM9IltbX3Nlc3Npb25Hcm91cHNdXSIKICAgICAgICAgID4KICAgICAgICAgIDwvdGYtaHBhcmFtcy1zZXNzaW9ucy1wYW5lPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC9ocGFyYW1zLXNwbGl0LWxheW91dD4KICAgIDxzdHlsZT4KICAgICAgaHBhcmFtcy1zcGxpdC1sYXlvdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuc2lkZWJhciB7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgZmxleC1ncm93OiAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIG1pbi13aWR0aDogMTAlOwogICAgICB9CgogICAgICAuY2VudGVyIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgd2lkdGg6IDgwJTsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CgogICAgICBhIHsKICAgICAgICBjb2xvcjogdmFyKC0tdGItbGluayk7CiAgICAgIH0KCiAgICAgIGE6dmlzaXRlZCB7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLWxpbmstdmlzaXRlZCk7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIix1MyldLHJoLnByb3RvdHlwZSwiYmFja2VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImV4cGVyaW1lbnROYW1lIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLHJoLnByb3RvdHlwZSwiaGVscFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxyaC5wcm90b3R5cGUsImJ1Z1JlcG9ydFVybCIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxyaC5wcm90b3R5cGUsIl9jb25maWd1cmF0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxyaC5wcm90b3R5cGUsIl9zZXNzaW9uR3JvdXBzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0scmgucHJvdG90eXBlLCJfZGF0YUxvYWRlZFdpdGhOb25FbXB0eUhwYXJhbXMiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxyaC5wcm90b3R5cGUsIl9kYXRhTG9hZGVkV2l0aEVtcHR5SHBhcmFtcyIsdm9pZCAwKTtyaD1FKFt5dCgidGYtaHBhcmFtcy1tYWluIildLHJoKTt2YXIgc2hyPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KCJ0ZW5zb3Jib2FyZENvbGFiIik9PT0idHJ1ZSIsbGhyPSJocGFyYW1zIixzVj1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fYmFja2VuZD1uZXcgdTModmUoKS5wbHVnaW5Sb3V0ZShsaHIsIiIpLG5ldyBBZSxzaHIpfXJlbG9hZCgpe3RoaXMuJFsiaHBhcmFtcy1tYWluIl0ucmVsb2FkKCl9fTtzVi50ZW1wbGF0ZT1RYAogICAgPCEtLSBUZW5zb3JCb2FyZCBkb2VzIG5vdCBzcGVjaWZ5IGFuIGV4cGVyaW1lbnROYW1lLiBDdXJyZW50bHkgaXQgb25seQogICAgICAgICBzdXBwb3J0cyBvbmUgZXhwZXJpbWVudCBwZXIgaW52b2NhdGlvbi4gLS0+CiAgICA8dGYtaHBhcmFtcy1tYWluCiAgICAgIGlkPSJocGFyYW1zLW1haW4iCiAgICAgIGJhY2tlbmQ9IltbX2JhY2tlbmRdXSIKICAgICAgZXhwZXJpbWVudC1uYW1lPSIiCiAgICA+CiAgICA8L3RmLWhwYXJhbXMtbWFpbj4KICBgO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHNWLnByb3RvdHlwZSwiX2JhY2tlbmQiLHZvaWQgMCk7c1Y9RShbeXQoInRmLWhwYXJhbXMtZGFzaGJvYXJkIildLHNWKTt2YXIgcHY9RWUoT2UoKSwxKTt2YXIgX249Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuYWN0dWFsU2l6ZT0hMSx0aGlzLmJyaWdodG5lc3NBZGp1c3RtZW50PS41LHRoaXMuY29udHJhc3RQZXJjZW50YWdlPTAsdGhpcy5fbWV0YWRhdGFDYW5jZWxsZXI9bmV3IGFuLHRoaXMuX2ltYWdlQ2FuY2VsbGVyPW5ldyBhbix0aGlzLl9zdGVwcz1bXSx0aGlzLl9pc0ltYWdlTG9hZGluZz0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIGZuKHQpfWdldCBfaGFzQXRMZWFzdE9uZVN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcztyZXR1cm4hIXQmJnQubGVuZ3RoPjB9Z2V0IF9oYXNNdWx0aXBsZVN0ZXBzKCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuISF0JiZ0Lmxlbmd0aD4xfWdldCBfY3VycmVudFN0ZXAoKXt2YXIgdD10aGlzLl9zdGVwcyxyPXRoaXMuX3N0ZXBJbmRleDtyZXR1cm4gdFtyXXx8bnVsbH1nZXQgX3N0ZXBWYWx1ZSgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3Quc3RlcDowfWdldCBfY3VycmVudFdhbGxUaW1lKCl7dmFyIHQ9dGhpcy5fY3VycmVudFN0ZXA7cmV0dXJuIHQ/czIodC53YWxsX3RpbWUpOiIifWdldCBfbWF4U3RlcEluZGV4KCl7dmFyIHQ9dGhpcy5fc3RlcHM7cmV0dXJuIHQubGVuZ3RoLTF9Z2V0IF9zYW1wbGVUZXh0KCl7dmFyIHQ9dGhpcy5zYW1wbGU7cmV0dXJuYCR7dCsxfWB9Z2V0IF9oYXNNdWx0aXBsZVNhbXBsZXMoKXt2YXIgdD10aGlzLm9mU2FtcGxlcztyZXR1cm4gdD4xfV9nZXRBcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5hY3R1YWxTaXplPyJ0cnVlIjoiZmFsc2UifWF0dGFjaGVkKCl7dGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtpZighdGhpcy5pc0F0dGFjaGVkKXJldHVybjt0aGlzLl9tZXRhZGF0YUNhbmNlbGxlci5jYW5jZWxBbGwoKTtsZXQgdD12ZSgpLHI9Q24odC5wbHVnaW5Sb3V0ZSgiaW1hZ2VzIiwiL2ltYWdlcyIpLHt0YWc6dGhpcy50YWcscnVuOnRoaXMucnVuLHNhbXBsZTp0aGlzLnNhbXBsZX0pLG49dGhpcy5fbWV0YWRhdGFDYW5jZWxsZXIuY2FuY2VsbGFibGUoaT0+e2lmKGkuY2FuY2VsbGVkKXJldHVybjtsZXQgYT1pLnZhbHVlLm1hcCh0aGlzLl9jcmVhdGVTdGVwRGF0dW0uYmluZCh0aGlzKSk7dGhpcy5zZXQoIl9zdGVwcyIsYSksdGhpcy5zZXQoIl9zdGVwSW5kZXgiLGEubGVuZ3RoLTEpfSk7dGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHIpLnRoZW4obil9X2NyZWF0ZVN0ZXBEYXR1bSh0KXtsZXQgcj12ZSgpLnBsdWdpblJvdXRlKCJpbWFnZXMiLCIvaW5kaXZpZHVhbEltYWdlIik7cmV0dXJuIHI9Q24ocix7dHM6dC53YWxsX3RpbWV9KSxyKz0iJiIrdC5xdWVyeSx7d2FsbF90aW1lOm5ldyBEYXRlKHQud2FsbF90aW1lKjFlMyksc3RlcDp0LnN0ZXAsdXJsOnJ9fV91cGRhdGVJbWFnZVVybCgpe3ZhciB0PXRoaXMuX2N1cnJlbnRTdGVwLHI9dGhpcy5icmlnaHRuZXNzQWRqdXN0bWVudCxuPXRoaXMuY29udHJhc3RQZXJjZW50YWdlO2lmKCF0KXJldHVybjtsZXQgaT1uZXcgSW1hZ2U7dGhpcy5faW1hZ2VDYW5jZWxsZXIuY2FuY2VsQWxsKCksaS5vbmxvYWQ9aS5vbmVycm9yPXRoaXMuX2ltYWdlQ2FuY2VsbGVyLmNhbmNlbGxhYmxlKG89PntpZihvLmNhbmNlbGxlZClyZXR1cm47bGV0IGE9dGhpcy4kJCgiI21haW4taW1hZ2UtY29udGFpbmVyIik7YSYmKGEudGV4dENvbnRlbnQ9IiIsenQoYSkuYXBwZW5kQ2hpbGQoaSkpLHRoaXMuc2V0KCJfaXNJbWFnZUxvYWRpbmciLCExKX0pLmJpbmQodGhpcyksaS5zdHlsZS5maWx0ZXI9YGNvbnRyYXN0KCR7bn0lKSBgLGkuc3R5bGUuZmlsdGVyKz1gYnJpZ2h0bmVzcygke3J9KWAsdGhpcy5zZXQoIl9pc0ltYWdlTG9hZGluZyIsITApLGkuc3JjPXQudXJsfV9oYW5kbGVUYXAodCl7dGhpcy5zZXQoImFjdHVhbFNpemUiLCF0aGlzLmFjdHVhbFNpemUpfV90b0xvY2FsZVN0cmluZyh0KXtyZXR1cm4gdC50b0xvY2FsZVN0cmluZygpfX07X24udGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcKICAgICAgdGFnPSJbW3RhZ11dIgogICAgICBydW49IltbcnVuXV0iCiAgICAgIGRpc3BsYXktbmFtZT0iW1t0YWdNZXRhZGF0YS5kaXNwbGF5TmFtZV1dIgogICAgICBkZXNjcmlwdGlvbj0iW1t0YWdNZXRhZGF0YS5kZXNjcmlwdGlvbl1dIgogICAgICBjb2xvcj0iW1tfcnVuQ29sb3JdXSIKICAgID4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXNdXSI+CiAgICAgICAgPGRpdj5zYW1wbGU6IFtbX3NhbXBsZVRleHRdXSBvZiBbW29mU2FtcGxlc11dPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzQXRMZWFzdE9uZVN0ZXBdXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAKICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIgogICAgICAgICAgICAgID5bW190b0xvY2FsZVN0cmluZyhfc3RlcFZhbHVlKV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0IGRhdGV0aW1lIj4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50V2FsbFRpbWVdXSI+CiAgICAgICAgICAgICAgW1tfY3VycmVudFdhbGxUaW1lXV0KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwgcmlnaHQiPgogICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFfaXNJbWFnZUxvYWRpbmddXSI+CiAgICAgICAgICAgIDwvcGFwZXItc3Bpbm5lci1saXRlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLWlmIiBpZj0iW1tfaGFzTXVsdGlwbGVTdGVwc11dIj4KICAgICAgICA8ZGl2PgogICAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgICBpZD0ic3RlcHMiCiAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICAgIG1heD0iW1tfbWF4U3RlcEluZGV4XV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19tYXhTdGVwSW5kZXhdXSIKICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgIDwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgPC90Zi1jYXJkLWhlYWRpbmc+CgogICAgPCEtLSBTZW1hbnRpY2FsbHkgYSBidXR0b24gYnV0IDxpbWc+IGluc2lkZSBhIDxidXR0b24+IGRpc2FsbG93cyB1c2VyIHRvIGRvCiAgICBhbiBpbnRlcmVzdGluZyBvcGVyYXRpb24gbGlrZSAiQ29weSBJbWFnZSIgaW4gbm9uLUNocm9taXVtIGJyb3dzZXJzLiAtLT4KICAgIDxhCiAgICAgIGlkPSJtYWluLWltYWdlLWNvbnRhaW5lciIKICAgICAgcm9sZT0iYnV0dG9uIgogICAgICBhcmlhLWxhYmVsPSJUb2dnbGUgYWN0dWFsIHNpemUiCiAgICAgIGFyaWEtZXhwYW5kZWQkPSJbW19nZXRBcmlhRXhwYW5kZWQoYWN0dWFsU2l6ZSldXSIKICAgICAgb24tdGFwPSJfaGFuZGxlVGFwIgogICAgPjwvYT4KCiAgICA8c3R5bGUgaW5jbHVkZT0idGYtY2FyZC1oZWFkaW5nLXN0eWxlIj4KICAgICAgLyoqIE1ha2UgYnV0dG9uIGEgZGl2LiAqLwogICAgICBidXR0b24gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBHZXQgcmlkIG9mIGRvdHRlZCBsaW5lIGluc2lkZSBidXR0b24uICovCiAgICAgIGJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciB7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qKiBGaXJlZm94OiBTaW11bGF0ZSBDaHJvbWUncyBvdXRlciBnbG93IG9uIGJ1dHRvbiB3aGVuIGZvY3VzZWQuICovCiAgICAgIGJ1dHRvbjotbW96LWZvY3VzcmluZyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAwcHggMHB4IDFweCAycHggSGlnaGxpZ2h0OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDM1MHB4OwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAwIDE1cHggNDBweCAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC8qKiBXaGVuIGFjdHVhbCBzaXplIHNob3duIGlzIG9uLCB1c2UgdGhlIGFjdHVhbCBpbWFnZSB3aWR0aC4gKi8KICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgOmhvc3QoW2FjdHVhbC1zaXplXSkgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiBub25lOwogICAgICAgIHdpZHRoOiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbYWN0dWFsLXNpemVdKSAjbWFpbi1pbWFnZS1jb250YWluZXIgaW1nIHsKICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgfQoKICAgICAgcGFwZXItc3Bpbm5lci1saXRlIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwogICAgICAgIC0tcGFwZXItc3Bpbm5lci1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgIH0KCiAgICAgICNzdGVwcyB7CiAgICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICAgIG1hcmdpbjogMCAwIDAgLTE1cHg7CiAgICAgICAgLyoKICAgICAgICAgKiAzMSBjb21lcyBmcm9tIGFkZGluZyBhIHBhZGRpbmcgb2YgMTVweCBmcm9tIGJvdGggc2lkZXMgb2YgdGhlCiAgICAgICAgICogcGFwZXItc2xpZGVyLCBzdWJ0cmFjdGluZyAxcHggc28gdGhhdCB0aGUgc2xpZGVyIHdpZHRoIGFsaWducwogICAgICAgICAqIHdpdGggdGhlIGltYWdlICh0aGUgbGFzdCBzbGlkZXIgbWFya2VyIHRha2VzIHVwIDFweCksIGFuZAogICAgICAgICAqIGFkZGluZyAycHggdG8gYWNjb3VudCBmb3IgYSBib3JkZXIgb2YgMXB4IG9uIGJvdGggc2lkZXMgb2YKICAgICAgICAgKiB0aGUgaW1hZ2UuIDMwIC0gMSArIDIuCiAgICAgICAgICovCiAgICAgICAgd2lkdGg6IGNhbGMoMTAwJSArIDMxcHgpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQoKICAgICAgI21haW4taW1hZ2UtY29udGFpbmVyIHsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDI0cHg7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgIH0KCiAgICAgICNtYWluLWltYWdlLWNvbnRhaW5lciBpbWcgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7CiAgICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CgogICAgICBwYXBlci1pY29uLWJ1dHRvbiB7CiAgICAgICAgY29sb3I6ICMyMTk2ZjM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJTsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICB9CiAgICAgIHBhcGVyLWljb24tYnV0dG9uW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgfQogICAgICBbaGlkZGVuXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLF9uLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLF9uLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwic2FtcGxlIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwib2ZTYW1wbGVzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sX24ucHJvdG90eXBlLCJhY3R1YWxTaXplIix2b2lkIDApO0UoW0Eoe3R5cGU6TnVtYmVyfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sX24ucHJvdG90eXBlLCJjb250cmFzdFBlcmNlbnRhZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxfbi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwiX21ldGFkYXRhQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLF9uLnByb3RvdHlwZSwiX2ltYWdlQ2FuY2VsbGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sX24ucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLF9uLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLF9uLnByb3RvdHlwZSwiX2lzSW1hZ2VMb2FkaW5nIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNBdExlYXN0T25lU3RlcCIsbnVsbCk7RShbUnQoIl9zdGVwcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVN0ZXBzIixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLF9uLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfc3RlcFZhbHVlIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfY3VycmVudFdhbGxUaW1lIixudWxsKTtFKFtSdCgiX3N0ZXBzIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfbWF4U3RlcEluZGV4IixudWxsKTtFKFtSdCgic2FtcGxlIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sX24ucHJvdG90eXBlLCJfc2FtcGxlVGV4dCIsbnVsbCk7RShbUnQoIm9mU2FtcGxlcyIpLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxfbi5wcm90b3R5cGUsIl9oYXNNdWx0aXBsZVNhbXBsZXMiLG51bGwpO0UoW0J0KCJydW4iLCJ0YWciKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLF9uLnByb3RvdHlwZSwicmVsb2FkIixudWxsKTtFKFtCdCgiX2N1cnJlbnRTdGVwIiwiYnJpZ2h0bmVzc0FkanVzdG1lbnQiLCJjb250cmFzdFBlcmNlbnRhZ2UiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLF9uLnByb3RvdHlwZSwiX3VwZGF0ZUltYWdlVXJsIixudWxsKTtfbj1FKFt5dCgidGYtaW1hZ2UtbG9hZGVyIildLF9uKTt2YXIgSW89Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnQ9MSx0aGlzLl9kZWZhdWx0Q29udHJhc3RQZXJjZW50YWdlPTEwMCx0aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudD0xLHRoaXMuX2NvbnRyYXN0UGVyY2VudGFnZT0xMDAsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZEltYWdlcygpfSl9X2ZldGNoVGFncygpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoImltYWdlcyIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYocHYuaXNFcXVhbChyLHRoaXMuX3J1blRvVGFnSW5mbykpcmV0dXJuO2xldCBuPXB2Lm1hcFZhbHVlcyhyLG89Pk9iamVjdC5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZEltYWdlcygpe3ZhciB0Oyh0PXRoaXMucm9vdCk9PW51bGx8fHQucXVlcnlTZWxlY3RvckFsbCgidGYtaW1hZ2UtbG9hZGVyIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9yZXNldEJyaWdodG5lc3MoKXt0aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudD10aGlzLl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnR9X3Jlc2V0Q29udHJhc3QoKXt0aGlzLl9jb250cmFzdFBlcmNlbnRhZ2U9dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2JyaWdodG5lc3NJc0RlZmF1bHQoKXt2YXIgdD10aGlzLl9icmlnaHRuZXNzQWRqdXN0bWVudDtyZXR1cm4gdD09PXRoaXMuX2RlZmF1bHRCcmlnaHRuZXNzQWRqdXN0bWVudH1nZXQgX2NvbnRyYXN0SXNEZWZhdWx0KCl7dmFyIHQ9dGhpcy5fY29udHJhc3RQZXJjZW50YWdlO3JldHVybiB0PT09dGhpcy5fZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZX1nZXQgX2NhdGVnb3JpZXMoKXt2YXIgdD10aGlzLl9ydW5Ub1RhZ0luZm8scj10aGlzLl9zZWxlY3RlZFJ1bnMsbj10aGlzLl90YWdGaWx0ZXIsaT10aGlzLl9jYXRlZ29yaWVzRG9tUmVhZHk7bGV0IG89cHYubWFwVmFsdWVzKHQsYz0+T2JqZWN0LmtleXMoYykpLGE9UWwobyxyLG4pO2Z1bmN0aW9uIHMoYyl7bGV0IHU9dFtjLnJ1bl1bYy50YWddLnNhbXBsZXM7cmV0dXJuIHB2LnJhbmdlKHUpLm1hcChoPT5PYmplY3QuYXNzaWduKHt9LGMse3NhbXBsZTpoLG9mU2FtcGxlczp1fSkpfXJldHVybiBhLm1hcChjPT5PYmplY3QuYXNzaWduKHt9LGMse2l0ZW1zOltdLmNvbmNhdC5hcHBseShbXSxjLml0ZW1zLm1hcChzKSl9KSl9X3RhZ01ldGFkYXRhKHQscixuKXtyZXR1cm4gdFtyXVtuXX19O0lvLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluZS1pdGVtIj4KICAgICAgICAgICAgICA8cGFwZXItY2hlY2tib3ggY2hlY2tlZD0ie3tfYWN0dWFsU2l6ZX19IgogICAgICAgICAgICAgICAgPlNob3cgYWN0dWFsIGltYWdlIHNpemU8L3BhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0b29sdGlwLWNvbnRhaW5lciI+QnJpZ2h0bmVzcyBhZGp1c3RtZW50PC9oMz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIj4KICAgICAgICAgICAgICA8cGFwZXItc2xpZGVyCiAgICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgICBtYXg9IjIiCiAgICAgICAgICAgICAgICBzbmFwcwogICAgICAgICAgICAgICAgcGluCiAgICAgICAgICAgICAgICBzdGVwPSIwLjAxIgogICAgICAgICAgICAgICAgdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iCiAgICAgICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X2JyaWdodG5lc3NBZGp1c3RtZW50fX0iCiAgICAgICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ4LWJ1dHRvbiIKICAgICAgICAgICAgICAgIG9uLXRhcD0iX3Jlc2V0QnJpZ2h0bmVzcyIKICAgICAgICAgICAgICAgIGRpc2FibGVkPSJbW19icmlnaHRuZXNzSXNEZWZhdWx0XV0iCiAgICAgICAgICAgICAgICA+UmVzZXQ8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxoMyBjbGFzcz0idG9vbHRpcC1jb250YWluZXIiPkNvbnRyYXN0IGFkanVzdG1lbnQ8L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIiPgogICAgICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgIG1heD0iNTAwIgogICAgICAgICAgICAgICAgc25hcHMKICAgICAgICAgICAgICAgIHBpbgogICAgICAgICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgICAgICAgIHZhbHVlPSJ7e19jb250cmFzdFBlcmNlbnRhZ2V9fSIKICAgICAgICAgICAgICAgIGltbWVkaWF0ZS12YWx1ZT0ie3tfY29udHJhc3RQZXJjZW50YWdlfX0iCiAgICAgICAgICAgICAgPjwvcGFwZXItc2xpZGVyPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ4LWJ1dHRvbiIKICAgICAgICAgICAgICAgIG9uLXRhcD0iX3Jlc2V0Q29udHJhc3QiCiAgICAgICAgICAgICAgICBkaXNhYmxlZD0iW1tfY29udHJhc3RJc0RlZmF1bHRdXSIKICAgICAgICAgICAgICAgID5SZXNldDwvcGFwZXItYnV0dG9uCiAgICAgICAgICAgICAgPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yCiAgICAgICAgICAgIGlkPSJydW5zLXNlbGVjdG9yIgogICAgICAgICAgICBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSIKICAgICAgICAgID48L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gaW1hZ2UgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IGltYWdlIGRhdGEgdG8geW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UZW5zb3JCb2FyZCBjYW7igJl0IGZpbmQgeW91ciBldmVudCBmaWxlcy48L2xpPgogICAgICAgICAgICA8L3VsPgoKICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgSWYgeW914oCZcmUgbmV3IHRvIHVzaW5nIFRlbnNvckJvYXJkLCBhbmQgd2FudCB0byBmaW5kIG91dCBob3cgdG8KICAgICAgICAgICAgICBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3RlbnNvcmZsb3cvdGVuc29yYm9hcmQvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kIgogICAgICAgICAgICAgICAgPlJFQURNRTwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgcGVyaGFwcyB0aGUKICAgICAgICAgICAgICA8YQogICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvZ2V0X3N0YXJ0ZWQvc3VtbWFyaWVzX2FuZF90ZW5zb3Jib2FyZCIKICAgICAgICAgICAgICAgID5UZW5zb3JCb2FyZCB0dXRvcmlhbDwvYQogICAgICAgICAgICAgID4uCiAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdSB0aGluayBUZW5zb3JCb2FyZCBpcyBjb25maWd1cmVkIHByb3Blcmx5LCBwbGVhc2Ugc2VlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCNteS10ZW5zb3Jib2FyZC1pc250LXNob3dpbmctYW55LWRhdGEtd2hhdHMtd3JvbmciCiAgICAgICAgICAgICAgICA+dGhlIHNlY3Rpb24gb2YgdGhlIFJFQURNRSBkZXZvdGVkIHRvIG1pc3NpbmcgZGF0YSBwcm9ibGVtczwvYQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICBhbmQgY29uc2lkZXIgZmlsaW5nIGFuIGlzc3VlIG9uIEdpdEh1Yi4KICAgICAgICAgICAgPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbIV9kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8dGYtdGFnLWZpbHRlcmVyIHRhZy1maWx0ZXI9Int7X3RhZ0ZpbHRlcn19Ij48L3RmLXRhZy1maWx0ZXJlcj4KICAgICAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX2NhdGVnb3JpZXNdXSIgYXM9ImNhdGVnb3J5Ij4KICAgICAgICAgICAgPHRmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3CiAgICAgICAgICAgICAgY2F0ZWdvcnk9IltbY2F0ZWdvcnldXSIKICAgICAgICAgICAgICBpbml0aWFsLW9wZW5lZD0iW1tfc2hvdWxkT3BlbihpbmRleCldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1pbWFnZS1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBydW49IltbaXRlbS5ydW5dXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHNhbXBsZT0iW1tpdGVtLnNhbXBsZV1dIgogICAgICAgICAgICAgICAgICBvZi1zYW1wbGVzPSJbW2l0ZW0ub2ZTYW1wbGVzXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW4sIGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGFjdHVhbC1zaXplPSJbW19hY3R1YWxTaXplXV0iCiAgICAgICAgICAgICAgICAgIGJyaWdodG5lc3MtYWRqdXN0bWVudD0iW1tfYnJpZ2h0bmVzc0FkanVzdG1lbnRdXSIKICAgICAgICAgICAgICAgICAgY29udHJhc3QtcGVyY2VudGFnZT0iW1tfY29udHJhc3RQZXJjZW50YWdlXV0iCiAgICAgICAgICAgICAgICA+PC90Zi1pbWFnZS1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICB9CiAgICAgIC5yZXNldHRhYmxlLXNsaWRlci1jb250YWluZXIgcGFwZXItc2xpZGVyIHsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIH0KICAgICAgLnJlc2V0dGFibGUtc2xpZGVyLWNvbnRhaW5lciBwYXBlci1idXR0b24gewogICAgICAgIGZsZXgtZ3JvdzogMDsKICAgICAgfQogICAgICAucmVzZXR0YWJsZS1zbGlkZXItY29udGFpbmVyIHBhcGVyLWJ1dHRvbltkaXNhYmxlZF0gewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHVuc2V0OwogICAgICB9CiAgICAgIC54LWJ1dHRvbiB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRiLXVpLWxpZ2h0LWFjY2VudCk7CiAgICAgICAgY29sb3I6IHZhcigtLXRiLXVpLWRhcmstYWNjZW50KTsKICAgICAgfQogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQogICAgICBwYXBlci1zbGlkZXIgewogICAgICAgIC0tcGFwZXItc2xpZGVyLWFjdGl2ZS1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXIta25vYi1zdGFydC1ib3JkZXItY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLWtub2Itc3RhcnQtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLW1hcmtlcnMtY29sb3I6IHZhcigtLXRiLW9yYW5nZS1zdHJvbmcpOwogICAgICAgIC0tcGFwZXItc2xpZGVyLXBpbi1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgLS1wYXBlci1zbGlkZXItcGluLXN0YXJ0LWNvbG9yOiB2YXIoLS10Yi1vcmFuZ2Utc3Ryb25nKTsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxJby5wcm90b3R5cGUsIl9zZWxlY3RlZFJ1bnMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sSW8ucHJvdG90eXBlLCJfcnVuVG9UYWdJbmZvIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfYWN0dWFsU2l6ZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9kZWZhdWx0QnJpZ2h0bmVzc0FkanVzdG1lbnQiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXJ9KSx3KCJkZXNpZ246dHlwZSIsTnVtYmVyKV0sSW8ucHJvdG90eXBlLCJfZGVmYXVsdENvbnRyYXN0UGVyY2VudGFnZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9icmlnaHRuZXNzQWRqdXN0bWVudCIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxJby5wcm90b3R5cGUsIl9jb250cmFzdFBlcmNlbnRhZ2UiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0sSW8ucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sSW8ucHJvdG90eXBlLCJfY2F0ZWdvcmllc0RvbVJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLElvLnByb3RvdHlwZSwiX3JlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW1J0KCJfYnJpZ2h0bmVzc0FkanVzdG1lbnQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW8ucHJvdG90eXBlLCJfYnJpZ2h0bmVzc0lzRGVmYXVsdCIsbnVsbCk7RShbUnQoIl9jb250cmFzdFBlcmNlbnRhZ2UiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sSW8ucHJvdG90eXBlLCJfY29udHJhc3RJc0RlZmF1bHQiLG51bGwpO0UoW1J0KCJfcnVuVG9UYWdJbmZvIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxJby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtJbz1FKFt5dCgidGYtaW1hZ2UtZGFzaGJvYXJkIildLElvKTt2YXIgc3g9RWUoT2UoKSwxKTt2YXIgZHY7KGZ1bmN0aW9uKGUpe2VbZS5DQU5DRUxMRUQ9MV09IkNBTkNFTExFRCJ9KShkdnx8KGR2PXt9KSk7dmFyIGxWOyhmdW5jdGlvbihlKXtlW2UuVkVSVEVYPTFdPSJWRVJURVgiLGVbZS5GQUNFPTJdPSJGQUNFIixlW2UuQ09MT1I9M109IkNPTE9SIn0pKGxWfHwobFY9e30pKTt2YXIgR2N0OyhmdW5jdGlvbihlKXtlLlZFUlRFWD0iZmxvYXQzMiIsZS5GQUNFPSJpbnQzMiIsZS5DT0xPUj0idWludDgifSkoR2N0fHwoR2N0PXt9KSk7dmFyIFBQPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NhbmNlbGxlcj1uZXcgYW4sdGhpcy5fcmVxdWVzdE1hbmFnZXI9dH1yZWxvYWQodCxyLG4pe3JldHVybiB0aGlzLl9jYW5jZWxsZXIuY2FuY2VsQWxsKCksdGhpcy5fZmV0Y2hNZXRhZGF0YSh0LHIsbil9X2ZldGNoRGF0YUJ5U3RlcCh0LHIsbixpLG8sYSl7bGV0IHM9dmUoKS5wbHVnaW5Sb3V0ZSgibWVzaCIsIi9kYXRhIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6cixydW46dCxjb250ZW50X3R5cGU6bixzYW1wbGU6U3RyaW5nKGkpLHN0ZXA6U3RyaW5nKG8pfSkpLGw9ZnVuY3Rpb24odSl7bGV0IGY9W107Zm9yKGxldCBwPTA7cDx1Lmxlbmd0aC8zO3ArKyl7bGV0IGQ9W107Zm9yKGxldCBnPTA7ZzwzO2crKylkLnB1c2godVtwKjMrZ10pO2YucHVzaChkKX1yZXR1cm4gZn0sYz10aGlzLl9jYW5jZWxsZXIuY2FuY2VsbGFibGUodT0+e2lmKHUuY2FuY2VsbGVkKXJldHVybiBQcm9taXNlLnJlamVjdCh7Y29kZTpkdi5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTtsZXQgaD11LnZhbHVlO3N3aXRjaChuKXtjYXNlIlZFUlRFWCI6YS52ZXJ0aWNlcz1sKG5ldyBGbG9hdDMyQXJyYXkoaCkpO2JyZWFrO2Nhc2UiRkFDRSI6YS5mYWNlcz1sKG5ldyBJbnQzMkFycmF5KGgpKTticmVhaztjYXNlIkNPTE9SIjphLmNvbG9ycz1sKG5ldyBVaW50OEFycmF5KGgpKTticmVha31yZXR1cm4gYX0pO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5mZXRjaChzLHttZXRob2Q6IkdFVCIsaGVhZGVyczp7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIsY29udGVudFR5cGU6R2N0W25dfX0pLnRoZW4odT0+dS5hcnJheUJ1ZmZlcigpKS50aGVuKGMpfWZldGNoRGF0YSh0LHIsbixpKXtsZXQgbz1bXSxhPW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKGxWKS5mb3JFYWNoKHM9PntsZXQgbD0xPDxsVltzXTt0LmNvbXBvbmVudHMmbCYmby5wdXNoKHRoaXMuX2ZldGNoRGF0YUJ5U3RlcChyLG4scyxpLHQuc3RlcCxhKSl9KSxQcm9taXNlLmFsbChvKX1fZmV0Y2hNZXRhZGF0YSh0LHIsbil7dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCBpPXZlKCkucGx1Z2luUm91dGUoIm1lc2giLCIvbWVzaGVzIixuZXcgVVJMU2VhcmNoUGFyYW1zKHt0YWc6cixydW46dCxzYW1wbGU6bn0pKSxvPXRoaXMuX2NhbmNlbGxlci5jYW5jZWxsYWJsZShhPT5hLmNhbmNlbGxlZD9Qcm9taXNlLnJlamVjdCh7Y29kZTpkdi5DQU5DRUxMRUQsbWVzc2FnZToiUmVzcG9uc2Ugd2FzIGludmFsaWRhdGVkLiJ9KTphLnZhbHVlKTtyZXR1cm4gdGhpcy5fcmVxdWVzdE1hbmFnZXIuZmV0Y2goaSkudGhlbihhPT5hLmpzb24oKSkudGhlbihvKS50aGVuKHRoaXMuX3Byb2Nlc3NNZXRhZGF0YS5iaW5kKHRoaXMpKX1fcHJvY2Vzc01ldGFkYXRhKHQpe2lmKCF0KXJldHVybjtsZXQgcj1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgbz10W2ldO3IuaGFzKG8uc3RlcCl8fHIuc2V0KG8uc3RlcCxbXSksci5nZXQoby5zdGVwKS5wdXNoKG8pfWxldCBuPVtdO3JldHVybiByLmZvckVhY2goaT0+e2xldCBvPXRoaXMuX2NyZWF0ZVN0ZXBEYXR1bShpWzBdKTtuLnB1c2gobyl9KSxufV9jcmVhdGVTdGVwRGF0dW0odCl7cmV0dXJue3dhbGxfdGltZTpuZXcgRGF0ZSh0LndhbGxfdGltZSoxZTMpLHN0ZXA6dC5zdGVwLGNvbmZpZzp0LmNvbmZpZyxjb250ZW50X3R5cGU6dC5jb250ZW50X3R5cGUsY29tcG9uZW50czp0LmNvbXBvbmVudHN9fX07dmFyIHdNPXt9O0tzKHdNLHtBQ0VTRmlsbWljVG9uZU1hcHBpbmc6KCk9PmxmZSxBZGRFcXVhdGlvbjooKT0+TXYsQWRkT3BlcmF0aW9uOigpPT5pZmUsQWRkaXRpdmVBbmltYXRpb25CbGVuZE1vZGU6KCk9PlJodCxBZGRpdGl2ZUJsZW5kaW5nOigpPT5FdXQsQWxwaGFGb3JtYXQ6KCk9Pm1mZSxBbHdheXNEZXB0aDooKT0+WmhlLEFsd2F5c1N0ZW5jaWxGdW5jOigpPT5MZmUsQW1iaWVudExpZ2h0OigpPT5JNixBbWJpZW50TGlnaHRQcm9iZTooKT0+T1UsQW5pbWF0aW9uQ2xpcDooKT0+UXYsQW5pbWF0aW9uTG9hZGVyOigpPT5haHQsQW5pbWF0aW9uTWl4ZXI6KCk9PkhVLEFuaW1hdGlvbk9iamVjdEdyb3VwOigpPT5CVSxBbmltYXRpb25VdGlsczooKT0+am4sQXJjQ3VydmU6KCk9PnM2LEFycmF5Q2FtZXJhOigpPT5yNixBcnJvd0hlbHBlcjooKT0+RWh0LEF1ZGlvOigpPT5ONixBdWRpb0FuYWx5c2VyOigpPT56VSxBdWRpb0NvbnRleHQ6KCk9PkZodCxBdWRpb0xpc3RlbmVyOigpPT51aHQsQXVkaW9Mb2FkZXI6KCk9Pk5VLEF4ZXNIZWxwZXI6KCk9PnZNLEF4aXNIZWxwZXI6KCk9PlcwcixCYWNrU2lkZTooKT0+SWksQmFzaWNEZXB0aFBhY2tpbmc6KCk9PkFmZSxCYXNpY1NoYWRvd01hcDooKT0+dWhyLEJpbmFyeVRleHR1cmVMb2FkZXI6KCk9PkswcixCb25lOigpPT5zTSxCb29sZWFuS2V5ZnJhbWVUcmFjazooKT0+YW0sQm91bmRpbmdCb3hIZWxwZXI6KCk9PlkwcixCb3gyOigpPT4kMCxCb3gzOigpPT50YSxCb3gzSGVscGVyOigpPT5TaHQsQm94QnVmZmVyR2VvbWV0cnk6KCk9PlFmLEJveEdlb21ldHJ5OigpPT5RZixCb3hIZWxwZXI6KCk9PnlNLEJ1ZmZlckF0dHJpYnV0ZTooKT0+SmUsQnVmZmVyR2VvbWV0cnk6KCk9PlBlLEJ1ZmZlckdlb21ldHJ5TG9hZGVyOigpPT5rVSxCeXRlVHlwZTooKT0+dWZlLENhY2hlOigpPT50eCxDYW1lcmE6KCk9PlJ2LENhbWVyYUhlbHBlcjooKT0+d2h0LENhbnZhc1JlbmRlcmVyOigpPT5KMHIsQ2FudmFzVGV4dHVyZTooKT0+dlUsQ2F0bXVsbFJvbUN1cnZlMzooKT0+bDYsQ2luZW9uVG9uZU1hcHBpbmc6KCk9PnNmZSxDaXJjbGVCdWZmZXJHZW9tZXRyeTooKT0+RnYsQ2lyY2xlR2VvbWV0cnk6KCk9PkZ2LENsYW1wVG9FZGdlV3JhcHBpbmc6KCk9PkpvLENsb2NrOigpPT5tTSxDb2xvcjooKT0+bmUsQ29sb3JLZXlmcmFtZVRyYWNrOigpPT5TNixDb21wcmVzc2VkVGV4dHVyZTooKT0+bzYsQ29tcHJlc3NlZFRleHR1cmVMb2FkZXI6KCk9PnNodCxDb25lQnVmZmVyR2VvbWV0cnk6KCk9PkJ2LENvbmVHZW9tZXRyeTooKT0+QnYsQ3ViZUNhbWVyYTooKT0+SjMsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOigpPT5ueCxDdWJlUmVmcmFjdGlvbk1hcHBpbmc6KCk9Pml4LEN1YmVUZXh0dXJlOigpPT5IMCxDdWJlVGV4dHVyZUxvYWRlcjooKT0+RVUsQ3ViZVVWUmVmbGVjdGlvbk1hcHBpbmc6KCk9PnhNLEN1YmVVVlJlZnJhY3Rpb25NYXBwaW5nOigpPT5PNixDdWJpY0JlemllckN1cnZlOigpPT5jTSxDdWJpY0JlemllckN1cnZlMzooKT0+YzYsQ3ViaWNJbnRlcnBvbGFudDooKT0+d1UsQ3VsbEZhY2VCYWNrOigpPT5NdXQsQ3VsbEZhY2VGcm9udDooKT0+T2hlLEN1bGxGYWNlRnJvbnRCYWNrOigpPT5jaHIsQ3VsbEZhY2VOb25lOigpPT5EaGUsQ3VydmU6KCk9PmZzLEN1cnZlUGF0aDooKT0+YlUsQ3VzdG9tQmxlbmRpbmc6KCk9PkZoZSxDdXN0b21Ub25lTWFwcGluZzooKT0+Y2ZlLEN5bGluZGVyQnVmZmVyR2VvbWV0cnk6KCk9Pm9tLEN5bGluZGVyR2VvbWV0cnk6KCk9Pm9tLEN5bGluZHJpY2FsOigpPT5naHQsRGF0YVRleHR1cmU6KCk9PkpkLERhdGFUZXh0dXJlMkRBcnJheTooKT0+dE0sRGF0YVRleHR1cmUzRDooKT0+ZTYsRGF0YVRleHR1cmVMb2FkZXI6KCk9PlRVLERhdGFVdGlsczooKT0+Q2h0LERlY3JlbWVudFN0ZW5jaWxPcDooKT0+YmhyLERlY3JlbWVudFdyYXBTdGVuY2lsT3A6KCk9PlNocixEZWZhdWx0TG9hZGluZ01hbmFnZXI6KCk9PlFmZSxEZXB0aEZvcm1hdDooKT0+ejAsRGVwdGhTdGVuY2lsRm9ybWF0OigpPT5rdixEZXB0aFRleHR1cmU6KCk9Pm5NLERpcmVjdGlvbmFsTGlnaHQ6KCk9PlA2LERpcmVjdGlvbmFsTGlnaHRIZWxwZXI6KCk9PmJodCxEaXNjcmV0ZUludGVycG9sYW50OigpPT5TVSxEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+SHYsRG9kZWNhaGVkcm9uR2VvbWV0cnk6KCk9Pkh2LERvdWJsZVNpZGU6KCk9Pkx2LERzdEFscGhhRmFjdG9yOigpPT5XaGUsRHN0Q29sb3JGYWN0b3I6KCk9PmpoZSxEeW5hbWljQnVmZmVyQXR0cmlidXRlOigpPT5EMHIsRHluYW1pY0NvcHlVc2FnZTooKT0+emhyLER5bmFtaWNEcmF3VXNhZ2U6KCk9PlkzLER5bmFtaWNSZWFkVXNhZ2U6KCk9Pk5ocixFZGdlc0dlb21ldHJ5OigpPT5hNixFZGdlc0hlbHBlcjooKT0+ajByLEVsbGlwc2VDdXJ2ZTooKT0+VnYsRXF1YWxEZXB0aDooKT0+UWhlLEVxdWFsU3RlbmNpbEZ1bmM6KCk9PkNocixFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzooKT0+V1AsRXF1aXJlY3Rhbmd1bGFyUmVmcmFjdGlvbk1hcHBpbmc6KCk9PllQLEV1bGVyOigpPT50bSxFdmVudERpc3BhdGNoZXI6KCk9PlVzLEV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTooKT0+aGgsRXh0cnVkZUdlb21ldHJ5OigpPT5oaCxGYWNlQ29sb3JzOigpPT5NMHIsRmlsZUxvYWRlcjooKT0+SmMsRmxhdFNoYWRpbmc6KCk9PlBodCxGbG9hdDE2QnVmZmVyQXR0cmlidXRlOigpPT5wVSxGbG9hdDMyQXR0cmlidXRlOigpPT5xMHIsRmxvYXQzMkJ1ZmZlckF0dHJpYnV0ZTooKT0+eGUsRmxvYXQ2NEF0dHJpYnV0ZTooKT0+RzByLEZsb2F0NjRCdWZmZXJBdHRyaWJ1dGU6KCk9PmRVLEZsb2F0VHlwZTooKT0+amQsRm9nOigpPT56dixGb2dFeHAyOigpPT5PdixGb250OigpPT5vX3IsRm9udExvYWRlcjooKT0+aV9yLEZyYW1lYnVmZmVyVGV4dHVyZTooKT0+eVUsRnJvbnRTaWRlOigpPT5JdixGcnVzdHVtOigpPT5OdixHTEJ1ZmZlckF0dHJpYnV0ZTooKT0+VVUsR0xTTDE6KCk9PkJocixHTFNMMzooKT0+WnV0LEdyZWF0ZXJEZXB0aDooKT0+ZWZlLEdyZWF0ZXJFcXVhbERlcHRoOigpPT50ZmUsR3JlYXRlckVxdWFsU3RlbmNpbEZ1bmM6KCk9PkxocixHcmVhdGVyU3RlbmNpbEZ1bmM6KCk9PlBocixHcmlkSGVscGVyOigpPT5XVSxHcm91cDooKT0+WGQsSGFsZkZsb2F0VHlwZTooKT0+Q3YsSGVtaXNwaGVyZUxpZ2h0OigpPT5FNixIZW1pc3BoZXJlTGlnaHRIZWxwZXI6KCk9PnZodCxIZW1pc3BoZXJlTGlnaHRQcm9iZTooKT0+RFUsSWNvc2FoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+R3YsSWNvc2FoZWRyb25HZW9tZXRyeTooKT0+R3YsSW1hZ2VCaXRtYXBMb2FkZXI6KCk9PlJVLEltYWdlTG9hZGVyOigpPT5leCxJbWFnZVV0aWxzOigpPT5LZixJbW1lZGlhdGVSZW5kZXJPYmplY3Q6KCk9PmFfcixJbmNyZW1lbnRTdGVuY2lsT3A6KCk9PnhocixJbmNyZW1lbnRXcmFwU3RlbmNpbE9wOigpPT53aHIsSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOigpPT5ybSxJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeTooKT0+UjYsSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI6KCk9PlZVLEluc3RhbmNlZE1lc2g6KCk9Pm42LEludDE2QXR0cmlidXRlOigpPT5CMHIsSW50MTZCdWZmZXJBdHRyaWJ1dGU6KCk9PmhVLEludDMyQXR0cmlidXRlOigpPT5WMHIsSW50MzJCdWZmZXJBdHRyaWJ1dGU6KCk9PmZVLEludDhBdHRyaWJ1dGU6KCk9Pk8wcixJbnQ4QnVmZmVyQXR0cmlidXRlOigpPT5sVSxJbnRUeXBlOigpPT5mZmUsSW50ZXJsZWF2ZWRCdWZmZXI6KCk9PmVtLEludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOigpPT50cCxJbnRlcnBvbGFudDooKT0+ZmgsSW50ZXJwb2xhdGVEaXNjcmV0ZTooKT0+JFAsSW50ZXJwb2xhdGVMaW5lYXI6KCk9PktQLEludGVycG9sYXRlU21vb3RoOigpPT5lVSxJbnZlcnRTdGVuY2lsT3A6KCk9Pk1ocixKU09OTG9hZGVyOigpPT5RMHIsS2VlcFN0ZW5jaWxPcDooKT0+clUsS2V5ZnJhbWVUcmFjazooKT0+RGwsTE9EOigpPT5nVSxMYXRoZUJ1ZmZlckdlb21ldHJ5OigpPT5XdixMYXRoZUdlb21ldHJ5OigpPT5XdixMYXllcnM6KCk9PlgzLExlbnNGbGFyZTooKT0+ZV9yLExlc3NEZXB0aDooKT0+SmhlLExlc3NFcXVhbERlcHRoOigpPT5uVSxMZXNzRXF1YWxTdGVuY2lsRnVuYzooKT0+QWhyLExlc3NTdGVuY2lsRnVuYzooKT0+VGhyLExpZ2h0OigpPT5PbCxMaWdodFByb2JlOigpPT5yeCxMaW5lOigpPT5jaCxMaW5lMzooKT0+cVUsTGluZUJhc2ljTWF0ZXJpYWw6KCk9PkdpLExpbmVDdXJ2ZTooKT0+VXYsTGluZUN1cnZlMzooKT0+eFUsTGluZURhc2hlZE1hdGVyaWFsOigpPT5iNixMaW5lTG9vcDooKT0+aTYsTGluZVBpZWNlczooKT0+dzByLExpbmVTZWdtZW50czooKT0+QWEsTGluZVN0cmlwOigpPT5iMHIsTGluZWFyRW5jb2Rpbmc6KCk9PlFkLExpbmVhckZpbHRlcjooKT0+b2ksTGluZWFySW50ZXJwb2xhbnQ6KCk9Pnc2LExpbmVhck1pcE1hcExpbmVhckZpbHRlcjooKT0+bWhyLExpbmVhck1pcE1hcE5lYXJlc3RGaWx0ZXI6KCk9PmRocixMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6KCk9Pm94LExpbmVhck1pcG1hcE5lYXJlc3RGaWx0ZXI6KCk9PmtodCxMaW5lYXJUb25lTWFwcGluZzooKT0+b2ZlLExvYWRlcjooKT0+ZWEsTG9hZGVyVXRpbHM6KCk9PmRNLExvYWRpbmdNYW5hZ2VyOigpPT5NNixMb29wT25jZTooKT0+TWZlLExvb3BQaW5nUG9uZzooKT0+VGZlLExvb3BSZXBlYXQ6KCk9PkVmZSxMdW1pbmFuY2VBbHBoYUZvcm1hdDooKT0+X2ZlLEx1bWluYW5jZUZvcm1hdDooKT0+Z2ZlLE1PVVNFOigpPT5LMCxNYXRlcmlhbDooKT0+cWksTWF0ZXJpYWxMb2FkZXI6KCk9PkxVLE1hdGg6KCk9PlFocixNYXRoVXRpbHM6KCk9PlFocixNYXRyaXgzOigpPT5raSxNYXRyaXg0OigpPT5NZSxNYXhFcXVhdGlvbjooKT0+UHV0LE1lc2g6KCk9PmVpLE1lc2hCYXNpY01hdGVyaWFsOigpPT5zaCxNZXNoRGVwdGhNYXRlcmlhbDooKT0+ZU0sTWVzaERpc3RhbmNlTWF0ZXJpYWw6KCk9PnJNLE1lc2hGYWNlTWF0ZXJpYWw6KCk9PlQwcixNZXNoTGFtYmVydE1hdGVyaWFsOigpPT52NixNZXNoTWF0Y2FwTWF0ZXJpYWw6KCk9Png2LE1lc2hOb3JtYWxNYXRlcmlhbDooKT0+eTYsTWVzaFBob25nTWF0ZXJpYWw6KCk9Pmc2LE1lc2hQaHlzaWNhbE1hdGVyaWFsOigpPT5tNixNZXNoU3RhbmRhcmRNYXRlcmlhbDooKT0+cE0sTWVzaFRvb25NYXRlcmlhbDooKT0+XzYsTWluRXF1YXRpb246KCk9PkF1dCxNaXJyb3JlZFJlcGVhdFdyYXBwaW5nOigpPT5YUCxNaXhPcGVyYXRpb246KCk9Pm5mZSxNdWx0aU1hdGVyaWFsOigpPT5DMHIsTXVsdGlwbHlCbGVuZGluZzooKT0+Q3V0LE11bHRpcGx5T3BlcmF0aW9uOigpPT5ENixOZWFyZXN0RmlsdGVyOigpPT5MaSxOZWFyZXN0TWlwTWFwTGluZWFyRmlsdGVyOigpPT5waHIsTmVhcmVzdE1pcE1hcE5lYXJlc3RGaWx0ZXI6KCk9PmZocixOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOigpPT5vVSxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjooKT0+aVUsTmV2ZXJEZXB0aDooKT0+S2hlLE5ldmVyU3RlbmNpbEZ1bmM6KCk9PkVocixOb0JsZW5kaW5nOigpPT4kZCxOb0NvbG9yczooKT0+UzByLE5vVG9uZU1hcHBpbmc6KCk9PktkLE5vcm1hbEFuaW1hdGlvbkJsZW5kTW9kZTooKT0+WFUsTm9ybWFsQmxlbmRpbmc6KCk9PlYzLE5vdEVxdWFsRGVwdGg6KCk9PnJmZSxOb3RFcXVhbFN0ZW5jaWxGdW5jOigpPT5JaHIsTnVtYmVyS2V5ZnJhbWVUcmFjazooKT0+WnYsT2JqZWN0M0Q6KCk9Pm9yLE9iamVjdExvYWRlcjooKT0+bGh0LE9iamVjdFNwYWNlTm9ybWFsTWFwOigpPT5JZmUsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5OigpPT5XMCxPY3RhaGVkcm9uR2VvbWV0cnk6KCk9PlcwLE9uZUZhY3RvcjooKT0+VWhlLE9uZU1pbnVzRHN0QWxwaGFGYWN0b3I6KCk9PlloZSxPbmVNaW51c0RzdENvbG9yRmFjdG9yOigpPT5YaGUsT25lTWludXNTcmNBbHBoYUZhY3RvcjooKT0+TGh0LE9uZU1pbnVzU3JjQ29sb3JGYWN0b3I6KCk9PkdoZSxPcnRob2dyYXBoaWNDYW1lcmE6KCk9PkR2LFBDRlNoYWRvd01hcDooKT0+QWh0LFBDRlNvZnRTaGFkb3dNYXA6KCk9PnpoZSxQTVJFTUdlbmVyYXRvcjooKT0+dDYsUGFyYW1ldHJpY0dlb21ldHJ5OigpPT5yX3IsUGFydGljbGU6KCk9PlAwcixQYXJ0aWNsZUJhc2ljTWF0ZXJpYWw6KCk9PmswcixQYXJ0aWNsZVN5c3RlbTooKT0+STByLFBhcnRpY2xlU3lzdGVtTWF0ZXJpYWw6KCk9PlIwcixQYXRoOigpPT5xdixQZXJzcGVjdGl2ZUNhbWVyYTooKT0+VWksUGxhbmU6KCk9PiRjLFBsYW5lQnVmZmVyR2VvbWV0cnk6KCk9PlYwLFBsYW5lR2VvbWV0cnk6KCk9PlYwLFBsYW5lSGVscGVyOigpPT5NaHQsUG9pbnRDbG91ZDooKT0+QTByLFBvaW50Q2xvdWRNYXRlcmlhbDooKT0+TDByLFBvaW50TGlnaHQ6KCk9PkE2LFBvaW50TGlnaHRIZWxwZXI6KCk9PnlodCxQb2ludHM6KCk9PmltLFBvaW50c01hdGVyaWFsOigpPT5ubSxQb2xhckdyaWRIZWxwZXI6KCk9PnhodCxQb2x5aGVkcm9uQnVmZmVyR2VvbWV0cnk6KCk9PnVoLFBvbHloZWRyb25HZW9tZXRyeTooKT0+dWgsUG9zaXRpb25hbEF1ZGlvOigpPT5oaHQsUHJvcGVydHlCaW5kaW5nOigpPT5DcixQcm9wZXJ0eU1peGVyOigpPT5GVSxRdWFkcmF0aWNCZXppZXJDdXJ2ZTooKT0+dU0sUXVhZHJhdGljQmV6aWVyQ3VydmUzOigpPT5oTSxRdWF0ZXJuaW9uOigpPT52aSxRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjazooKT0+WDAsUXVhdGVybmlvbkxpbmVhckludGVycG9sYW50OigpPT5NVSxSRVZJU0lPTjooKT0+WVUsUkdCQURlcHRoUGFja2luZzooKT0+UGZlLFJHQkFGb3JtYXQ6KCk9PlFvLFJHQkFJbnRlZ2VyRm9ybWF0OigpPT53ZmUsUkdCQV9BU1RDXzEweDEwX0Zvcm1hdDooKT0+anV0LFJHQkFfQVNUQ18xMHg1X0Zvcm1hdDooKT0+R3V0LFJHQkFfQVNUQ18xMHg2X0Zvcm1hdDooKT0+V3V0LFJHQkFfQVNUQ18xMHg4X0Zvcm1hdDooKT0+WXV0LFJHQkFfQVNUQ18xMngxMF9Gb3JtYXQ6KCk9Plh1dCxSR0JBX0FTVENfMTJ4MTJfRm9ybWF0OigpPT4kdXQsUkdCQV9BU1RDXzR4NF9Gb3JtYXQ6KCk9Pk91dCxSR0JBX0FTVENfNXg0X0Zvcm1hdDooKT0+enV0LFJHQkFfQVNUQ181eDVfRm9ybWF0OigpPT5GdXQsUkdCQV9BU1RDXzZ4NV9Gb3JtYXQ6KCk9PkJ1dCxSR0JBX0FTVENfNng2X0Zvcm1hdDooKT0+SHV0LFJHQkFfQVNUQ184eDVfRm9ybWF0OigpPT5WdXQsUkdCQV9BU1RDXzh4Nl9Gb3JtYXQ6KCk9PlV1dCxSR0JBX0FTVENfOHg4X0Zvcm1hdDooKT0+cXV0LFJHQkFfQlBUQ19Gb3JtYXQ6KCk9Pkt1dCxSR0JBX0VUQzJfRUFDX0Zvcm1hdDooKT0+RHV0LFJHQkFfUFZSVENfMkJQUFYxX0Zvcm1hdDooKT0+UnV0LFJHQkFfUFZSVENfNEJQUFYxX0Zvcm1hdDooKT0+a3V0LFJHQkFfUzNUQ19EWFQxX0Zvcm1hdDooKT0+SlYsUkdCQV9TM1RDX0RYVDNfRm9ybWF0OigpPT5RVixSR0JBX1MzVENfRFhUNV9Gb3JtYXQ6KCk9PnRVLFJHQl9FVEMxX0Zvcm1hdDooKT0+U2ZlLFJHQl9FVEMyX0Zvcm1hdDooKT0+TnV0LFJHQl9QVlJUQ18yQlBQVjFfRm9ybWF0OigpPT5MdXQsUkdCX1BWUlRDXzRCUFBWMV9Gb3JtYXQ6KCk9Pkl1dCxSR0JfUzNUQ19EWFQxX0Zvcm1hdDooKT0+WlYsUkdGb3JtYXQ6KCk9PnhmZSxSR0ludGVnZXJGb3JtYXQ6KCk9PmJmZSxSYXdTaGFkZXJNYXRlcmlhbDooKT0+VTAsUmF5OigpPT5KZixSYXljYXN0ZXI6KCk9PmRodCxSZWN0QXJlYUxpZ2h0OigpPT5MNixSZWRGb3JtYXQ6KCk9PnlmZSxSZWRJbnRlZ2VyRm9ybWF0OigpPT52ZmUsUmVpbmhhcmRUb25lTWFwcGluZzooKT0+YWZlLFJlcGVhdFdyYXBwaW5nOigpPT5qUCxSZXBsYWNlU3RlbmNpbE9wOigpPT52aHIsUmV2ZXJzZVN1YnRyYWN0RXF1YXRpb246KCk9PkhoZSxSaW5nQnVmZmVyR2VvbWV0cnk6KCk9Pll2LFJpbmdHZW9tZXRyeTooKT0+WXYsU2NlbmU6KCk9PnEwLFNjZW5lVXRpbHM6KCk9PnRfcixTaGFkZXJDaHVuazooKT0+aHIsU2hhZGVyTGliOigpPT5haCxTaGFkZXJNYXRlcmlhbDooKT0+bGgsU2hhZG93TWF0ZXJpYWw6KCk9PmQ2LFNoYXBlOigpPT5LYyxTaGFwZUJ1ZmZlckdlb21ldHJ5OigpPT5ZMCxTaGFwZUdlb21ldHJ5OigpPT5ZMCxTaGFwZVBhdGg6KCk9PlRodCxTaGFwZVV0aWxzOigpPT5aYyxTaG9ydFR5cGU6KCk9PmhmZSxTa2VsZXRvbjooKT0+bE0sU2tlbGV0b25IZWxwZXI6KCk9PkdVLFNraW5uZWRNZXNoOigpPT5hTSxTbW9vdGhTaGFkaW5nOigpPT5oaHIsU3BoZXJlOigpPT5aZixTcGhlcmVCdWZmZXJHZW9tZXRyeTooKT0+ajAsU3BoZXJlR2VvbWV0cnk6KCk9PmowLFNwaGVyaWNhbDooKT0+X00sU3BoZXJpY2FsSGFybW9uaWNzMzooKT0+azYsU3BsaW5lQ3VydmU6KCk9PmZNLFNwb3RMaWdodDooKT0+QzYsU3BvdExpZ2h0SGVscGVyOigpPT5faHQsU3ByaXRlOigpPT5vTSxTcHJpdGVNYXRlcmlhbDooKT0+aU0sU3JjQWxwaGFGYWN0b3I6KCk9PklodCxTcmNBbHBoYVNhdHVyYXRlRmFjdG9yOigpPT4kaGUsU3JjQ29sb3JGYWN0b3I6KCk9PnFoZSxTdGF0aWNDb3B5VXNhZ2U6KCk9Pk9ocixTdGF0aWNEcmF3VXNhZ2U6KCk9PlczLFN0YXRpY1JlYWRVc2FnZTooKT0+UmhyLFN0ZXJlb0NhbWVyYTooKT0+Y2h0LFN0cmVhbUNvcHlVc2FnZTooKT0+RmhyLFN0cmVhbURyYXdVc2FnZTooKT0+a2hyLFN0cmVhbVJlYWRVc2FnZTooKT0+RGhyLFN0cmluZ0tleWZyYW1lVHJhY2s6KCk9PnNtLFN1YnRyYWN0RXF1YXRpb246KCk9PkJoZSxTdWJ0cmFjdGl2ZUJsZW5kaW5nOigpPT5UdXQsVE9VQ0g6KCk9PlowLFRhbmdlbnRTcGFjZU5vcm1hbE1hcDooKT0+YXgsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTooKT0+anYsVGV0cmFoZWRyb25HZW9tZXRyeTooKT0+anYsVGV4dEdlb21ldHJ5OigpPT5uX3IsVGV4dHVyZTooKT0+eGksVGV4dHVyZUxvYWRlcjooKT0+Q1UsVG9ydXNCdWZmZXJHZW9tZXRyeTooKT0+WHYsVG9ydXNHZW9tZXRyeTooKT0+WHYsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6KCk9PiR2LFRvcnVzS25vdEdlb21ldHJ5OigpPT4kdixUcmlhbmdsZTooKT0+YWksVHJpYW5nbGVGYW5EcmF3TW9kZTooKT0+X2hyLFRyaWFuZ2xlU3RyaXBEcmF3TW9kZTooKT0+Z2hyLFRyaWFuZ2xlc0RyYXdNb2RlOigpPT5DZmUsVHViZUJ1ZmZlckdlb21ldHJ5OigpPT5LdixUdWJlR2VvbWV0cnk6KCk9Pkt2LFVWTWFwcGluZzooKT0+alUsVWludDE2QXR0cmlidXRlOigpPT5IMHIsVWludDE2QnVmZmVyQXR0cmlidXRlOigpPT4kMyxVaW50MzJBdHRyaWJ1dGU6KCk9PlUwcixVaW50MzJCdWZmZXJBdHRyaWJ1dGU6KCk9PkszLFVpbnQ4QXR0cmlidXRlOigpPT56MHIsVWludDhCdWZmZXJBdHRyaWJ1dGU6KCk9PmNVLFVpbnQ4Q2xhbXBlZEF0dHJpYnV0ZTooKT0+RjByLFVpbnQ4Q2xhbXBlZEJ1ZmZlckF0dHJpYnV0ZTooKT0+dVUsVW5pZm9ybTooKT0+Z00sVW5pZm9ybXNMaWI6KCk9PnJlLFVuaWZvcm1zVXRpbHM6KCk9Pk9mZSxVbnNpZ25lZEJ5dGVUeXBlOigpPT5aZCxVbnNpZ25lZEludDI0OFR5cGU6KCk9PkF2LFVuc2lnbmVkSW50VHlwZTooKT0+SFAsVW5zaWduZWRTaG9ydDQ0NDRUeXBlOigpPT5wZmUsVW5zaWduZWRTaG9ydDU1NTFUeXBlOigpPT5kZmUsVW5zaWduZWRTaG9ydFR5cGU6KCk9PkczLFZTTVNoYWRvd01hcDooKT0+RjMsVmVjdG9yMjooKT0+THQsVmVjdG9yMzooKT0+aixWZWN0b3I0OigpPT5lbixWZWN0b3JLZXlmcmFtZVRyYWNrOigpPT5KdixWZXJ0ZXg6KCk9Pk4wcixWZXJ0ZXhDb2xvcnM6KCk9PkUwcixWaWRlb1RleHR1cmU6KCk9Pl9VLFdlYkdMMVJlbmRlcmVyOigpPT5tVSxXZWJHTEN1YmVSZW5kZXJUYXJnZXQ6KCk9PlEzLFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzOigpPT5zVSxXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0OigpPT5qMyxXZWJHTFJlbmRlclRhcmdldDooKT0+dXMsV2ViR0xSZW5kZXJUYXJnZXRDdWJlOigpPT5aMHIsV2ViR0xSZW5kZXJlcjooKT0+cm4sV2ViR0xVdGlsczooKT0+WGZlLFdpcmVmcmFtZUdlb21ldHJ5OigpPT5wNixXaXJlZnJhbWVIZWxwZXI6KCk9PlgwcixXcmFwQXJvdW5kRW5kaW5nOigpPT5aUCxYSFJMb2FkZXI6KCk9PiQwcixaZXJvQ3VydmF0dXJlRW5kaW5nOigpPT5FdixaZXJvRmFjdG9yOigpPT5WaGUsWmVyb1Nsb3BlRW5kaW5nOigpPT5UdixaZXJvU3RlbmNpbE9wOigpPT55aHIsX1NSR0JBRm9ybWF0OigpPT5hVSxzUkdCRW5jb2Rpbmc6KCk9PllufSk7dmFyIFlVPSIxMzciLEswPXtMRUZUOjAsTUlERExFOjEsUklHSFQ6MixST1RBVEU6MCxET0xMWToxLFBBTjoyfSxaMD17Uk9UQVRFOjAsUEFOOjEsRE9MTFlfUEFOOjIsRE9MTFlfUk9UQVRFOjN9LERoZT0wLE11dD0xLE9oZT0yLGNocj0zLHVocj0wLEFodD0xLHpoZT0yLEYzPTMsSXY9MCxJaT0xLEx2PTIsUGh0PTEsaGhyPTIsJGQ9MCxWMz0xLEV1dD0yLFR1dD0zLEN1dD00LEZoZT01LE12PTEwMCxCaGU9MTAxLEhoZT0xMDIsQXV0PTEwMyxQdXQ9MTA0LFZoZT0yMDAsVWhlPTIwMSxxaGU9MjAyLEdoZT0yMDMsSWh0PTIwNCxMaHQ9MjA1LFdoZT0yMDYsWWhlPTIwNyxqaGU9MjA4LFhoZT0yMDksJGhlPTIxMCxLaGU9MCxaaGU9MSxKaGU9MixuVT0zLFFoZT00LHRmZT01LGVmZT02LHJmZT03LEQ2PTAsbmZlPTEsaWZlPTIsS2Q9MCxvZmU9MSxhZmU9MixzZmU9MyxsZmU9NCxjZmU9NSxqVT0zMDAsbng9MzAxLGl4PTMwMixXUD0zMDMsWVA9MzA0LHhNPTMwNixPNj0zMDcsalA9MWUzLEpvPTEwMDEsWFA9MTAwMixMaT0xMDAzLGlVPTEwMDQsZmhyPTEwMDQsb1U9MTAwNSxwaHI9MTAwNSxvaT0xMDA2LGtodD0xMDA3LGRocj0xMDA3LG94PTEwMDgsbWhyPTEwMDgsWmQ9MTAwOSx1ZmU9MTAxMCxoZmU9MTAxMSxHMz0xMDEyLGZmZT0xMDEzLEhQPTEwMTQsamQ9MTAxNSxDdj0xMDE2LHBmZT0xMDE3LGRmZT0xMDE4LEF2PTEwMjAsbWZlPTEwMjEsUW89MTAyMyxnZmU9MTAyNCxfZmU9MTAyNSx6MD0xMDI2LGt2PTEwMjcseWZlPTEwMjgsdmZlPTEwMjkseGZlPTEwMzAsYmZlPTEwMzEsd2ZlPTEwMzMsWlY9MzM3NzYsSlY9MzM3NzcsUVY9MzM3NzgsdFU9MzM3NzksSXV0PTM1ODQwLEx1dD0zNTg0MSxrdXQ9MzU4NDIsUnV0PTM1ODQzLFNmZT0zNjE5NixOdXQ9Mzc0OTIsRHV0PTM3NDk2LE91dD0zNzgwOCx6dXQ9Mzc4MDksRnV0PTM3ODEwLEJ1dD0zNzgxMSxIdXQ9Mzc4MTIsVnV0PTM3ODEzLFV1dD0zNzgxNCxxdXQ9Mzc4MTUsR3V0PTM3ODE2LFd1dD0zNzgxNyxZdXQ9Mzc4MTgsanV0PTM3ODE5LFh1dD0zNzgyMCwkdXQ9Mzc4MjEsS3V0PTM2NDkyLE1mZT0yMjAwLEVmZT0yMjAxLFRmZT0yMjAyLCRQPTIzMDAsS1A9MjMwMSxlVT0yMzAyLEV2PTI0MDAsVHY9MjQwMSxaUD0yNDAyLFhVPTI1MDAsUmh0PTI1MDEsQ2ZlPTAsZ2hyPTEsX2hyPTIsUWQ9M2UzLFluPTMwMDEsQWZlPTMyMDAsUGZlPTMyMDEsYXg9MCxJZmU9MSx5aHI9MCxyVT03NjgwLHZocj03NjgxLHhocj03NjgyLGJocj03NjgzLHdocj0zNDA1NSxTaHI9MzQwNTYsTWhyPTUzODYsRWhyPTUxMixUaHI9NTEzLENocj01MTQsQWhyPTUxNSxQaHI9NTE2LElocj01MTcsTGhyPTUxOCxMZmU9NTE5LFczPTM1MDQ0LFkzPTM1MDQ4LGtocj0zNTA0MCxSaHI9MzUwNDUsTmhyPTM1MDQ5LERocj0zNTA0MSxPaHI9MzUwNDYsemhyPTM1MDUwLEZocj0zNTA0MixCaHI9IjEwMCIsWnV0PSIzMDAgZXMiLGFVPTEwMzUsVXM9Y2xhc3N7YWRkRXZlbnRMaXN0ZW5lcih0LHIpe3RoaXMuX2xpc3RlbmVycz09PXZvaWQgMCYmKHRoaXMuX2xpc3RlbmVycz17fSk7bGV0IG49dGhpcy5fbGlzdGVuZXJzO25bdF09PT12b2lkIDAmJihuW3RdPVtdKSxuW3RdLmluZGV4T2Yocik9PT0tMSYmblt0XS5wdXNoKHIpfWhhc0V2ZW50TGlzdGVuZXIodCxyKXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuITE7bGV0IG49dGhpcy5fbGlzdGVuZXJzO3JldHVybiBuW3RdIT09dm9pZCAwJiZuW3RdLmluZGV4T2YocikhPT0tMX1yZW1vdmVFdmVudExpc3RlbmVyKHQscil7aWYodGhpcy5fbGlzdGVuZXJzPT09dm9pZCAwKXJldHVybjtsZXQgaT10aGlzLl9saXN0ZW5lcnNbdF07aWYoaSE9PXZvaWQgMCl7bGV0IG89aS5pbmRleE9mKHIpO28hPT0tMSYmaS5zcGxpY2UobywxKX19ZGlzcGF0Y2hFdmVudCh0KXtpZih0aGlzLl9saXN0ZW5lcnM9PT12b2lkIDApcmV0dXJuO2xldCBuPXRoaXMuX2xpc3RlbmVyc1t0LnR5cGVdO2lmKG4hPT12b2lkIDApe3QudGFyZ2V0PXRoaXM7bGV0IGk9bi5zbGljZSgwKTtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspaVtvXS5jYWxsKHRoaXMsdCk7dC50YXJnZXQ9bnVsbH19fSxLbz1bXTtmb3IobGV0IGU9MDtlPDI1NjtlKyspS29bZV09KGU8MTY/IjAiOiIiKStlLnRvU3RyaW5nKDE2KTt2YXIgY1Y9MTIzNDU2NyxQdj1NYXRoLlBJLzE4MCxKUD0xODAvTWF0aC5QSTtmdW5jdGlvbiBObCgpe2xldCBlPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwLHQ9TWF0aC5yYW5kb20oKSo0Mjk0OTY3Mjk1fDAscj1NYXRoLnJhbmRvbSgpKjQyOTQ5NjcyOTV8MCxuPU1hdGgucmFuZG9tKCkqNDI5NDk2NzI5NXwwO3JldHVybihLb1tlJjI1NV0rS29bZT4+OCYyNTVdK0tvW2U+PjE2JjI1NV0rS29bZT4+MjQmMjU1XSsiLSIrS29bdCYyNTVdK0tvW3Q+PjgmMjU1XSsiLSIrS29bdD4+MTYmMTV8NjRdK0tvW3Q+PjI0JjI1NV0rIi0iK0tvW3ImNjN8MTI4XStLb1tyPj44JjI1NV0rIi0iK0tvW3I+PjE2JjI1NV0rS29bcj4+MjQmMjU1XStLb1tuJjI1NV0rS29bbj4+OCYyNTVdK0tvW24+PjE2JjI1NV0rS29bbj4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBabyhlLHQscil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4ocixlKSl9ZnVuY3Rpb24gTmh0KGUsdCl7cmV0dXJuKGUldCt0KSV0fWZ1bmN0aW9uIEhocihlLHQscixuLGkpe3JldHVybiBuKyhlLXQpKihpLW4pLyhyLXQpfWZ1bmN0aW9uIFZocihlLHQscil7cmV0dXJuIGUhPT10PyhyLWUpLyh0LWUpOjB9ZnVuY3Rpb24gVlAoZSx0LHIpe3JldHVybigxLXIpKmUrcip0fWZ1bmN0aW9uIFVocihlLHQscixuKXtyZXR1cm4gVlAoZSx0LDEtTWF0aC5leHAoLXIqbikpfWZ1bmN0aW9uIHFocihlLHQ9MSl7cmV0dXJuIHQtTWF0aC5hYnMoTmh0KGUsdCoyKS10KX1mdW5jdGlvbiBHaHIoZSx0LHIpe3JldHVybiBlPD10PzA6ZT49cj8xOihlPShlLXQpLyhyLXQpLGUqZSooMy0yKmUpKX1mdW5jdGlvbiBXaHIoZSx0LHIpe3JldHVybiBlPD10PzA6ZT49cj8xOihlPShlLXQpLyhyLXQpLGUqZSplKihlKihlKjYtMTUpKzEwKSl9ZnVuY3Rpb24gWWhyKGUsdCl7cmV0dXJuIGUrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKih0LWUrMSkpfWZ1bmN0aW9uIGpocihlLHQpe3JldHVybiBlK01hdGgucmFuZG9tKCkqKHQtZSl9ZnVuY3Rpb24gWGhyKGUpe3JldHVybiBlKiguNS1NYXRoLnJhbmRvbSgpKX1mdW5jdGlvbiAkaHIoZSl7cmV0dXJuIGUhPT12b2lkIDAmJihjVj1lJTIxNDc0ODM2NDcpLGNWPWNWKjE2ODA3JTIxNDc0ODM2NDcsKGNWLTEpLzIxNDc0ODM2NDZ9ZnVuY3Rpb24gS2hyKGUpe3JldHVybiBlKlB2fWZ1bmN0aW9uIFpocihlKXtyZXR1cm4gZSpKUH1mdW5jdGlvbiBKdXQoZSl7cmV0dXJuKGUmZS0xKT09PTAmJmUhPT0wfWZ1bmN0aW9uIGtmZShlKXtyZXR1cm4gTWF0aC5wb3coMixNYXRoLmNlaWwoTWF0aC5sb2coZSkvTWF0aC5MTjIpKX1mdW5jdGlvbiBSZmUoZSl7cmV0dXJuIE1hdGgucG93KDIsTWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMikpfWZ1bmN0aW9uIEpocihlLHQscixuLGkpe2xldCBvPU1hdGguY29zLGE9TWF0aC5zaW4scz1vKHIvMiksbD1hKHIvMiksYz1vKCh0K24pLzIpLHU9YSgodCtuKS8yKSxoPW8oKHQtbikvMiksZj1hKCh0LW4pLzIpLHA9bygobi10KS8yKSxkPWEoKG4tdCkvMik7c3dpdGNoKGkpe2Nhc2UiWFlYIjplLnNldChzKnUsbCpoLGwqZixzKmMpO2JyZWFrO2Nhc2UiWVpZIjplLnNldChsKmYscyp1LGwqaCxzKmMpO2JyZWFrO2Nhc2UiWlhaIjplLnNldChsKmgsbCpmLHMqdSxzKmMpO2JyZWFrO2Nhc2UiWFpYIjplLnNldChzKnUsbCpkLGwqcCxzKmMpO2JyZWFrO2Nhc2UiWVhZIjplLnNldChsKnAscyp1LGwqZCxzKmMpO2JyZWFrO2Nhc2UiWllaIjplLnNldChsKmQsbCpwLHMqdSxzKmMpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5NYXRoVXRpbHM6IC5zZXRRdWF0ZXJuaW9uRnJvbVByb3BlckV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitpKX19dmFyIFFocj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxERUcyUkFEOlB2LFJBRDJERUc6SlAsZ2VuZXJhdGVVVUlEOk5sLGNsYW1wOlpvLGV1Y2xpZGVhbk1vZHVsbzpOaHQsbWFwTGluZWFyOkhocixpbnZlcnNlTGVycDpWaHIsbGVycDpWUCxkYW1wOlVocixwaW5ncG9uZzpxaHIsc21vb3Roc3RlcDpHaHIsc21vb3RoZXJzdGVwOldocixyYW5kSW50OllocixyYW5kRmxvYXQ6amhyLHJhbmRGbG9hdFNwcmVhZDpYaHIsc2VlZGVkUmFuZG9tOiRocixkZWdUb1JhZDpLaHIscmFkVG9EZWc6WmhyLGlzUG93ZXJPZlR3bzpKdXQsY2VpbFBvd2VyT2ZUd286a2ZlLGZsb29yUG93ZXJPZlR3bzpSZmUsc2V0UXVhdGVybmlvbkZyb21Qcm9wZXJFdWxlcjpKaHJ9KSxMdD1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wKXt0aGlzLng9dCx0aGlzLnk9cn1nZXQgd2lkdGgoKXtyZXR1cm4gdGhpcy54fXNldCB3aWR0aCh0KXt0aGlzLng9dH1nZXQgaGVpZ2h0KCl7cmV0dXJuIHRoaXMueX1zZXQgaGVpZ2h0KHQpe3RoaXMueT10fXNldCh0LHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnkpfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzfWFkZCh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxyKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzfWFkZFZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCtyLngsdGhpcy55PXQueStyLnksdGhpc31hZGRTY2FsZWRWZWN0b3IodCxyKXtyZXR1cm4gdGhpcy54Kz10Lngqcix0aGlzLnkrPXQueSpyLHRoaXN9c3ViKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LHIpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXN9c3ViVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54LXIueCx0aGlzLnk9dC55LXIueSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe3JldHVybiB0aGlzLngqPXQsdGhpcy55Kj10LHRoaXN9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfWFwcGx5TWF0cml4Myh0KXtsZXQgcj10aGlzLngsbj10aGlzLnksaT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9aVswXSpyK2lbM10qbitpWzZdLHRoaXMueT1pWzFdKnIraVs0XSpuK2lbN10sdGhpc31taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpc31jbGFtcCh0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKHIueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKHIueSx0aGlzLnkpKSx0aGlzfWNsYW1wU2NhbGFyKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnkpKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0Lnl9Y3Jvc3ModCl7cmV0dXJuIHRoaXMueCp0LnktdGhpcy55KnQueH1sZW5ndGhTcSgpe3JldHVybiB0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnl9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKHRoaXMubGVuZ3RoKCl8fDEpfWFuZ2xlKCl7cmV0dXJuIE1hdGguYXRhbjIoLXRoaXMueSwtdGhpcy54KStNYXRoLlBJfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgcj10aGlzLngtdC54LG49dGhpcy55LXQueTtyZXR1cm4gcipyK24qbn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpc31sZXJwVmVjdG9ycyh0LHIsbil7cmV0dXJuIHRoaXMueD10LngrKHIueC10LngpKm4sdGhpcy55PXQueSsoci55LXQueSkqbix0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnl9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIsbil7cmV0dXJuIG4hPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgociksdGhpcy55PXQuZ2V0WShyKSx0aGlzfXJvdGF0ZUFyb3VuZCh0LHIpe2xldCBuPU1hdGguY29zKHIpLGk9TWF0aC5zaW4ociksbz10aGlzLngtdC54LGE9dGhpcy55LXQueTtyZXR1cm4gdGhpcy54PW8qbi1hKmkrdC54LHRoaXMueT1vKmkrYSpuK3QueSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnl9fTtMdC5wcm90b3R5cGUuaXNWZWN0b3IyPSEwO3ZhciBraT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudHM9WzEsMCwwLDAsMSwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDM6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQscixuLGksbyxhLHMsbCxjKXtsZXQgdT10aGlzLmVsZW1lbnRzO3JldHVybiB1WzBdPXQsdVsxXT1pLHVbMl09cyx1WzNdPXIsdVs0XT1vLHVbNV09bCx1WzZdPW4sdVs3XT1hLHVbOF09Yyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMSwwLDAsMCwxKSx0aGlzfWNvcHkodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIHJbMF09blswXSxyWzFdPW5bMV0sclsyXT1uWzJdLHJbM109blszXSxyWzRdPW5bNF0scls1XT1uWzVdLHJbNl09bls2XSxyWzddPW5bN10scls4XT1uWzhdLHRoaXN9ZXh0cmFjdEJhc2lzKHQscixuKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDApLHIuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywxKSxuLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMiksdGhpc31zZXRGcm9tTWF0cml4NCh0KXtsZXQgcj10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChyWzBdLHJbNF0scls4XSxyWzFdLHJbNV0scls5XSxyWzJdLHJbNl0sclsxMF0pLHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQscil7bGV0IG49dC5lbGVtZW50cyxpPXIuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLGE9blswXSxzPW5bM10sbD1uWzZdLGM9blsxXSx1PW5bNF0saD1uWzddLGY9blsyXSxwPW5bNV0sZD1uWzhdLGc9aVswXSxfPWlbM10seT1pWzZdLHg9aVsxXSxiPWlbNF0sUz1pWzddLEM9aVsyXSxQPWlbNV0saz1pWzhdO3JldHVybiBvWzBdPWEqZytzKngrbCpDLG9bM109YSpfK3MqYitsKlAsb1s2XT1hKnkrcypTK2wqayxvWzFdPWMqZyt1KngraCpDLG9bNF09YypfK3UqYitoKlAsb1s3XT1jKnkrdSpTK2gqayxvWzJdPWYqZytwKngrZCpDLG9bNV09ZipfK3AqYitkKlAsb1s4XT1mKnkrcCpTK2Qqayx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHJbMF0qPXQsclszXSo9dCxyWzZdKj10LHJbMV0qPXQscls0XSo9dCxyWzddKj10LHJbMl0qPXQscls1XSo9dCxyWzhdKj10LHRoaXN9ZGV0ZXJtaW5hbnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdO3JldHVybiByKmEqdS1yKnMqYy1uKm8qdStuKnMqbCtpKm8qYy1pKmEqbH1pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dSphLXMqYyxmPXMqbC11Km8scD1jKm8tYSpsLGQ9cipoK24qZitpKnA7aWYoZD09PTApcmV0dXJuIHRoaXMuc2V0KDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgZz0xL2Q7cmV0dXJuIHRbMF09aCpnLHRbMV09KGkqYy11Km4pKmcsdFsyXT0ocypuLWkqYSkqZyx0WzNdPWYqZyx0WzRdPSh1KnItaSpsKSpnLHRbNV09KGkqby1zKnIpKmcsdFs2XT1wKmcsdFs3XT0obipsLWMqcikqZyx0WzhdPShhKnItbipvKSpnLHRoaXN9dHJhbnNwb3NlKCl7bGV0IHQscj10aGlzLmVsZW1lbnRzO3JldHVybiB0PXJbMV0sclsxXT1yWzNdLHJbM109dCx0PXJbMl0sclsyXT1yWzZdLHJbNl09dCx0PXJbNV0scls1XT1yWzddLHJbN109dCx0aGlzfWdldE5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tTWF0cml4NCh0KS5pbnZlcnQoKS50cmFuc3Bvc2UoKX10cmFuc3Bvc2VJbnRvQXJyYXkodCl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdFswXT1yWzBdLHRbMV09clszXSx0WzJdPXJbNl0sdFszXT1yWzFdLHRbNF09cls0XSx0WzVdPXJbN10sdFs2XT1yWzJdLHRbN109cls1XSx0WzhdPXJbOF0sdGhpc31zZXRVdlRyYW5zZm9ybSh0LHIsbixpLG8sYSxzKXtsZXQgbD1NYXRoLmNvcyhvKSxjPU1hdGguc2luKG8pO3JldHVybiB0aGlzLnNldChuKmwsbipjLC1uKihsKmErYypzKSthK3QsLWkqYyxpKmwsLWkqKC1jKmErbCpzKStzK3IsMCwwLDEpLHRoaXN9c2NhbGUodCxyKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKj10LG5bM10qPXQsbls2XSo9dCxuWzFdKj1yLG5bNF0qPXIsbls3XSo9cix0aGlzfXJvdGF0ZSh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9dGhpcy5lbGVtZW50cyxvPWlbMF0sYT1pWzNdLHM9aVs2XSxsPWlbMV0sYz1pWzRdLHU9aVs3XTtyZXR1cm4gaVswXT1yKm8rbipsLGlbM109ciphK24qYyxpWzZdPXIqcytuKnUsaVsxXT0tbipvK3IqbCxpWzRdPS1uKmErcipjLGlbN109LW4qcytyKnUsdGhpc310cmFuc2xhdGUodCxyKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiBuWzBdKz10Km5bMl0sblszXSs9dCpuWzVdLG5bNl0rPXQqbls4XSxuWzFdKz1yKm5bMl0sbls0XSs9cipuWzVdLG5bN10rPXIqbls4XSx0aGlzfWVxdWFscyh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IGk9MDtpPDk7aSsrKWlmKHJbaV0hPT1uW2ldKXJldHVybiExO3JldHVybiEwfWZyb21BcnJheSh0LHI9MCl7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmVsZW1lbnRzW25dPXRbbityXTtyZXR1cm4gdGhpc310b0FycmF5KHQ9W10scj0wKXtsZXQgbj10aGlzLmVsZW1lbnRzO3JldHVybiB0W3JdPW5bMF0sdFtyKzFdPW5bMV0sdFtyKzJdPW5bMl0sdFtyKzNdPW5bM10sdFtyKzRdPW5bNF0sdFtyKzVdPW5bNV0sdFtyKzZdPW5bNl0sdFtyKzddPW5bN10sdFtyKzhdPW5bOF0sdH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19O2tpLnByb3RvdHlwZS5pc01hdHJpeDM9ITA7ZnVuY3Rpb24gTmZlKGUpe2ZvcihsZXQgdD1lLmxlbmd0aC0xO3Q+PTA7LS10KWlmKGVbdF0+NjU1MzUpcmV0dXJuITA7cmV0dXJuITF9dmFyIHRmcj17SW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXl9O2Z1bmN0aW9uIEIzKGUsdCl7cmV0dXJuIG5ldyB0ZnJbZV0odCl9ZnVuY3Rpb24gUVAoZSl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsZSl9dmFyIERmZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxuaD17aDowLHM6MCxsOjB9LHVWPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gV2N0KGUsdCxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/ZSsodC1lKSo2KnI6cjwxLzI/dDpyPDIvMz9lKyh0LWUpKjYqKDIvMy1yKTplfWZ1bmN0aW9uIFUzKGUpe3JldHVybiBlPC4wNDA0NT9lKi4wNzczOTkzODA4Ok1hdGgucG93KGUqLjk0Nzg2NzI5ODYrLjA1MjEzMjcwMTQsMi40KX1mdW5jdGlvbiBZY3QoZSl7cmV0dXJuIGU8LjAwMzEzMDg/ZSoxMi45MjoxLjA1NSpNYXRoLnBvdyhlLC40MTY2NiktLjA1NX12YXIgbmU9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe3JldHVybiByPT09dm9pZCAwJiZuPT09dm9pZCAwP3RoaXMuc2V0KHQpOnRoaXMuc2V0UkdCKHQscixuKX1zZXQodCl7cmV0dXJuIHQmJnQuaXNDb2xvcj90aGlzLmNvcHkodCk6dHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuc2V0SGV4KHQpOnR5cGVvZiB0PT0ic3RyaW5nIiYmdGhpcy5zZXRTdHlsZSh0KSx0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy5yPXQsdGhpcy5nPXQsdGhpcy5iPXQsdGhpc31zZXRIZXgodCl7cmV0dXJuIHQ9TWF0aC5mbG9vcih0KSx0aGlzLnI9KHQ+PjE2JjI1NSkvMjU1LHRoaXMuZz0odD4+OCYyNTUpLzI1NSx0aGlzLmI9KHQmMjU1KS8yNTUsdGhpc31zZXRSR0IodCxyLG4pe3JldHVybiB0aGlzLnI9dCx0aGlzLmc9cix0aGlzLmI9bix0aGlzfXNldEhTTCh0LHIsbil7aWYodD1OaHQodCwxKSxyPVpvKHIsMCwxKSxuPVpvKG4sMCwxKSxyPT09MCl0aGlzLnI9dGhpcy5nPXRoaXMuYj1uO2Vsc2V7bGV0IGk9bjw9LjU/biooMStyKTpuK3ItbipyLG89MipuLWk7dGhpcy5yPVdjdChvLGksdCsxLzMpLHRoaXMuZz1XY3QobyxpLHQpLHRoaXMuYj1XY3QobyxpLHQtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZSh0KXtmdW5jdGlvbiByKGkpe2khPT12b2lkIDAmJnBhcnNlRmxvYXQoaSk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrdCsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgbjtpZihuPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKHQpKXtsZXQgaSxvPW5bMV0sYT1uWzJdO3N3aXRjaChvKXtjYXNlInJnYiI6Y2FzZSJyZ2JhIjppZihpPS9eXHMqKFxkKylccyosXHMqKFxkKylccyosXHMqKFxkKylccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigyNTUscGFyc2VJbnQoaVsxXSwxMCkpLzI1NSx0aGlzLmc9TWF0aC5taW4oMjU1LHBhcnNlSW50KGlbMl0sMTApKS8yNTUsdGhpcy5iPU1hdGgubWluKDI1NSxwYXJzZUludChpWzNdLDEwKSkvMjU1LHIoaVs0XSksdGhpcztpZihpPS9eXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpcmV0dXJuIHRoaXMucj1NYXRoLm1pbigxMDAscGFyc2VJbnQoaVsxXSwxMCkpLzEwMCx0aGlzLmc9TWF0aC5taW4oMTAwLHBhcnNlSW50KGlbMl0sMTApKS8xMDAsdGhpcy5iPU1hdGgubWluKDEwMCxwYXJzZUludChpWzNdLDEwKSkvMTAwLHIoaVs0XSksdGhpczticmVhaztjYXNlImhzbCI6Y2FzZSJoc2xhIjppZihpPS9eXHMqKFxkKlwuP1xkKylccyosXHMqKFxkKylcJVxzKixccyooXGQrKVwlXHMqKD86LFxzKihcZCpcLj9cZCspXHMqKT8kLy5leGVjKGEpKXtsZXQgcz1wYXJzZUZsb2F0KGlbMV0pLzM2MCxsPXBhcnNlSW50KGlbMl0sMTApLzEwMCxjPXBhcnNlSW50KGlbM10sMTApLzEwMDtyZXR1cm4gcihpWzRdKSx0aGlzLnNldEhTTChzLGwsYyl9YnJlYWt9fWVsc2UgaWYobj0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWModCkpe2xldCBpPW5bMV0sbz1pLmxlbmd0aDtpZihvPT09MylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGkuY2hhckF0KDApK2kuY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGkuY2hhckF0KDEpK2kuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGkuY2hhckF0KDIpK2kuY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZihvPT09NilyZXR1cm4gdGhpcy5yPXBhcnNlSW50KGkuY2hhckF0KDApK2kuY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KGkuY2hhckF0KDIpK2kuY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KGkuY2hhckF0KDQpK2kuY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gdCYmdC5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZSh0KTp0aGlzfXNldENvbG9yTmFtZSh0KXtsZXQgcj1EZmVbdC50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gciE9PXZvaWQgMD90aGlzLnNldEhleChyKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrdCksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weSh0KXtyZXR1cm4gdGhpcy5yPXQucix0aGlzLmc9dC5nLHRoaXMuYj10LmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKHQpe3JldHVybiB0aGlzLnI9VTModC5yKSx0aGlzLmc9VTModC5nKSx0aGlzLmI9VTModC5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IodCl7cmV0dXJuIHRoaXMucj1ZY3QodC5yKSx0aGlzLmc9WWN0KHQuZyksdGhpcy5iPVljdCh0LmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiB0aGlzLnIqMjU1PDwxNl50aGlzLmcqMjU1PDw4XnRoaXMuYioyNTU8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKHQpe2xldCByPXRoaXMucixuPXRoaXMuZyxpPXRoaXMuYixvPU1hdGgubWF4KHIsbixpKSxhPU1hdGgubWluKHIsbixpKSxzLGwsYz0oYStvKS8yO2lmKGE9PT1vKXM9MCxsPTA7ZWxzZXtsZXQgdT1vLWE7c3dpdGNoKGw9Yzw9LjU/dS8obythKTp1LygyLW8tYSksbyl7Y2FzZSByOnM9KG4taSkvdSsobjxpPzY6MCk7YnJlYWs7Y2FzZSBuOnM9KGktcikvdSsyO2JyZWFrO2Nhc2UgaTpzPShyLW4pL3UrNDticmVha31zLz02fXJldHVybiB0Lmg9cyx0LnM9bCx0Lmw9Yyx0fWdldFN0eWxlKCl7cmV0dXJuInJnYigiKyh0aGlzLnIqMjU1fDApKyIsIisodGhpcy5nKjI1NXwwKSsiLCIrKHRoaXMuYioyNTV8MCkrIikifW9mZnNldEhTTCh0LHIsbil7cmV0dXJuIHRoaXMuZ2V0SFNMKG5oKSxuaC5oKz10LG5oLnMrPXIsbmgubCs9bix0aGlzLnNldEhTTChuaC5oLG5oLnMsbmgubCksdGhpc31hZGQodCl7cmV0dXJuIHRoaXMucis9dC5yLHRoaXMuZys9dC5nLHRoaXMuYis9dC5iLHRoaXN9YWRkQ29sb3JzKHQscil7cmV0dXJuIHRoaXMucj10LnIrci5yLHRoaXMuZz10Lmcrci5nLHRoaXMuYj10LmIrci5iLHRoaXN9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLnIrPXQsdGhpcy5nKz10LHRoaXMuYis9dCx0aGlzfXN1Yih0KXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLXQuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLXQuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLXQuYiksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5yKj10LnIsdGhpcy5nKj10LmcsdGhpcy5iKj10LmIsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy5yKj10LHRoaXMuZyo9dCx0aGlzLmIqPXQsdGhpc31sZXJwKHQscil7cmV0dXJuIHRoaXMucis9KHQuci10aGlzLnIpKnIsdGhpcy5nKz0odC5nLXRoaXMuZykqcix0aGlzLmIrPSh0LmItdGhpcy5iKSpyLHRoaXN9bGVycENvbG9ycyh0LHIsbil7cmV0dXJuIHRoaXMucj10LnIrKHIuci10LnIpKm4sdGhpcy5nPXQuZysoci5nLXQuZykqbix0aGlzLmI9dC5iKyhyLmItdC5iKSpuLHRoaXN9bGVycEhTTCh0LHIpe3RoaXMuZ2V0SFNMKG5oKSx0LmdldEhTTCh1Vik7bGV0IG49VlAobmguaCx1Vi5oLHIpLGk9VlAobmgucyx1Vi5zLHIpLG89VlAobmgubCx1Vi5sLHIpO3JldHVybiB0aGlzLnNldEhTTChuLGksbyksdGhpc31lcXVhbHModCl7cmV0dXJuIHQucj09PXRoaXMuciYmdC5nPT09dGhpcy5nJiZ0LmI9PT10aGlzLmJ9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy5yPXRbcl0sdGhpcy5nPXRbcisxXSx0aGlzLmI9dFtyKzJdLHRoaXN9dG9BcnJheSh0PVtdLHI9MCl7cmV0dXJuIHRbcl09dGhpcy5yLHRbcisxXT10aGlzLmcsdFtyKzJdPXRoaXMuYix0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKXtyZXR1cm4gdGhpcy5yPXQuZ2V0WChyKSx0aGlzLmc9dC5nZXRZKHIpLHRoaXMuYj10LmdldFoociksdC5ub3JtYWxpemVkPT09ITAmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19O25lLk5BTUVTPURmZTtuZS5wcm90b3R5cGUuaXNDb2xvcj0hMDtuZS5wcm90b3R5cGUucj0xO25lLnByb3RvdHlwZS5nPTE7bmUucHJvdG90eXBlLmI9MTt2YXIgdjMsS2Y9Y2xhc3N7c3RhdGljIGdldERhdGFVUkwodCl7aWYoL15kYXRhOi9pLnRlc3QodC5zcmMpfHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ9PSJ1bmRlZmluZWQiKXJldHVybiB0LnNyYztsZXQgcjtpZih0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQpcj10O2Vsc2V7djM9PT12b2lkIDAmJih2Mz1RUCgiY2FudmFzIikpLHYzLndpZHRoPXQud2lkdGgsdjMuaGVpZ2h0PXQuaGVpZ2h0O2xldCBuPXYzLmdldENvbnRleHQoIjJkIik7dCBpbnN0YW5jZW9mIEltYWdlRGF0YT9uLnB1dEltYWdlRGF0YSh0LDAsMCk6bi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCkscj12M31yZXR1cm4gci53aWR0aD4yMDQ4fHxyLmhlaWdodD4yMDQ4Pyhjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuZ2V0RGF0YVVSTDogSW1hZ2UgY29udmVydGVkIHRvIGpwZyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyIsdCksci50b0RhdGFVUkwoImltYWdlL2pwZWciLC42KSk6ci50b0RhdGFVUkwoImltYWdlL3BuZyIpfXN0YXRpYyBzUkdCVG9MaW5lYXIodCl7aWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50IT0idW5kZWZpbmVkIiYmdCBpbnN0YW5jZW9mIEhUTUxDYW52YXNFbGVtZW50fHx0eXBlb2YgSW1hZ2VCaXRtYXAhPSJ1bmRlZmluZWQiJiZ0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCByPVFQKCJjYW52YXMiKTtyLndpZHRoPXQud2lkdGgsci5oZWlnaHQ9dC5oZWlnaHQ7bGV0IG49ci5nZXRDb250ZXh0KCIyZCIpO24uZHJhd0ltYWdlKHQsMCwwLHQud2lkdGgsdC5oZWlnaHQpO2xldCBpPW4uZ2V0SW1hZ2VEYXRhKDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxvPWkuZGF0YTtmb3IobGV0IGE9MDthPG8ubGVuZ3RoO2ErKylvW2FdPVUzKG9bYV0vMjU1KSoyNTU7cmV0dXJuIG4ucHV0SW1hZ2VEYXRhKGksMCwwKSxyfWVsc2UgaWYodC5kYXRhKXtsZXQgcj10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBuPTA7bjxyLmxlbmd0aDtuKyspciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHIgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheT9yW25dPU1hdGguZmxvb3IoVTMocltuXS8yNTUpKjI1NSk6cltuXT1VMyhyW25dKTtyZXR1cm57ZGF0YTpyLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX1lbHNlIHJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlVXRpbHMuc1JHQlRvTGluZWFyKCk6IFVuc3VwcG9ydGVkIGltYWdlIHR5cGUuIE5vIGNvbG9yIHNwYWNlIGNvbnZlcnNpb24gYXBwbGllZC4iKSx0fX0sZWZyPTAseGk9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0PXhpLkRFRkFVTFRfSU1BR0Uscj14aS5ERUZBVUxUX01BUFBJTkcsbj1KbyxpPUpvLG89b2ksYT1veCxzPVFvLGw9WmQsYz0xLHU9UWQpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6ZWZyKyt9KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLm5hbWU9IiIsdGhpcy5pbWFnZT10LHRoaXMubWlwbWFwcz1bXSx0aGlzLm1hcHBpbmc9cix0aGlzLndyYXBTPW4sdGhpcy53cmFwVD1pLHRoaXMubWFnRmlsdGVyPW8sdGhpcy5taW5GaWx0ZXI9YSx0aGlzLmFuaXNvdHJvcHk9Yyx0aGlzLmZvcm1hdD1zLHRoaXMuaW50ZXJuYWxGb3JtYXQ9bnVsbCx0aGlzLnR5cGU9bCx0aGlzLm9mZnNldD1uZXcgTHQoMCwwKSx0aGlzLnJlcGVhdD1uZXcgTHQoMSwxKSx0aGlzLmNlbnRlcj1uZXcgTHQoMCwwKSx0aGlzLnJvdGF0aW9uPTAsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSEwLHRoaXMubWF0cml4PW5ldyBraSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMCx0aGlzLnByZW11bHRpcGx5QWxwaGE9ITEsdGhpcy5mbGlwWT0hMCx0aGlzLnVucGFja0FsaWdubWVudD00LHRoaXMuZW5jb2Rpbmc9dSx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMub25VcGRhdGU9bnVsbCx0aGlzLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMSx0aGlzLm5lZWRzUE1SRU1VcGRhdGU9ITF9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguc2V0VXZUcmFuc2Zvcm0odGhpcy5vZmZzZXQueCx0aGlzLm9mZnNldC55LHRoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueSx0aGlzLnJvdGF0aW9uLHRoaXMuY2VudGVyLngsdGhpcy5jZW50ZXIueSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IHI9dD09PXZvaWQgMHx8dHlwZW9mIHQ9PSJzdHJpbmciO2lmKCFyJiZ0LnRleHR1cmVzW3RoaXMudXVpZF0hPT12b2lkIDApcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgbj17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodGhpcy5pbWFnZSE9PXZvaWQgMCl7bGV0IGk9dGhpcy5pbWFnZTtpZihpLnV1aWQ9PT12b2lkIDAmJihpLnV1aWQ9TmwoKSksIXImJnQuaW1hZ2VzW2kudXVpZF09PT12b2lkIDApe2xldCBvO2lmKEFycmF5LmlzQXJyYXkoaSkpe289W107Zm9yKGxldCBhPTAscz1pLmxlbmd0aDthPHM7YSsrKWlbYV0uaXNEYXRhVGV4dHVyZT9vLnB1c2goamN0KGlbYV0uaW1hZ2UpKTpvLnB1c2goamN0KGlbYV0pKX1lbHNlIG89amN0KGkpO3QuaW1hZ2VzW2kudXVpZF09e3V1aWQ6aS51dWlkLHVybDpvfX1uLmltYWdlPWkudXVpZH1yZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkhPT0ie30iJiYobi51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyfHwodC50ZXh0dXJlc1t0aGlzLnV1aWRdPW4pLG59ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX10cmFuc2Zvcm1Vdih0KXtpZih0aGlzLm1hcHBpbmchPT1qVSlyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIGpQOnQueD10LngtTWF0aC5mbG9vcih0LngpO2JyZWFrO2Nhc2UgSm86dC54PXQueDwwPzA6MTticmVhaztjYXNlIFhQOk1hdGguYWJzKE1hdGguZmxvb3IodC54KSUyKT09PTE/dC54PU1hdGguY2VpbCh0LngpLXQueDp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVha31pZih0Lnk8MHx8dC55PjEpc3dpdGNoKHRoaXMud3JhcFQpe2Nhc2UgalA6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWs7Y2FzZSBKbzp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgWFA6TWF0aC5hYnMoTWF0aC5mbG9vcih0LnkpJTIpPT09MT90Lnk9TWF0aC5jZWlsKHQueSktdC55OnQueT10LnktTWF0aC5mbG9vcih0LnkpO2JyZWFrfXJldHVybiB0aGlzLmZsaXBZJiYodC55PTEtdC55KSx0fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfX07eGkuREVGQVVMVF9JTUFHRT12b2lkIDA7eGkuREVGQVVMVF9NQVBQSU5HPWpVO3hpLnByb3RvdHlwZS5pc1RleHR1cmU9ITA7ZnVuY3Rpb24gamN0KGUpe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9LZi5nZXREYXRhVVJMKGUpOmUuZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmRhdGEpLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHR5cGU6ZS5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9dmFyIGVuPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxyPTAsbj0wLGk9MSl7dGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpcy53PWl9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMuen1zZXQgd2lkdGgodCl7dGhpcy56PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnd9c2V0IGhlaWdodCh0KXt0aGlzLnc9dH1zZXQodCxyLG4saSl7cmV0dXJuIHRoaXMueD10LHRoaXMueT1yLHRoaXMuej1uLHRoaXMudz1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzLnc9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldFcodCl7cmV0dXJuIHRoaXMudz10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7Y2FzZSAyOnRoaXMuej1yO2JyZWFrO2Nhc2UgMzp0aGlzLnc9cjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7Y2FzZSAzOnJldHVybiB0aGlzLnc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnosdGhpcy53KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpcy56PXQueix0aGlzLnc9dC53IT09dm9pZCAwP3QudzoxLHRoaXN9YWRkKHQscil7cmV0dXJuIHIhPT12b2lkIDA/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LHIpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcy53Kz10LncsdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzLncrPXQsdGhpc31hZGRWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngrci54LHRoaXMueT10Lnkrci55LHRoaXMuej10Lnorci56LHRoaXMudz10Lncrci53LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQscil7cmV0dXJuIHRoaXMueCs9dC54KnIsdGhpcy55Kz10Lnkqcix0aGlzLnorPXQueipyLHRoaXMudys9dC53KnIsdGhpc31zdWIodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQscikpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzLnctPXQudyx0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXMudy09dCx0aGlzfXN1YlZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueC1yLngsdGhpcy55PXQueS1yLnksdGhpcy56PXQuei1yLnosdGhpcy53PXQudy1yLncsdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcy53Kj10LncsdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpcy53Kj10LHRoaXN9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixvPXRoaXMudyxhPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1hWzBdKnIrYVs0XSpuK2FbOF0qaSthWzEyXSpvLHRoaXMueT1hWzFdKnIrYVs1XSpuK2FbOV0qaSthWzEzXSpvLHRoaXMuej1hWzJdKnIrYVs2XSpuK2FbMTBdKmkrYVsxNF0qbyx0aGlzLnc9YVszXSpyK2FbN10qbithWzExXSppK2FbMTVdKm8sdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1zZXRBeGlzQW5nbGVGcm9tUXVhdGVybmlvbih0KXt0aGlzLnc9MipNYXRoLmFjb3ModC53KTtsZXQgcj1NYXRoLnNxcnQoMS10LncqdC53KTtyZXR1cm4gcjwxZS00Pyh0aGlzLng9MSx0aGlzLnk9MCx0aGlzLno9MCk6KHRoaXMueD10Lngvcix0aGlzLnk9dC55L3IsdGhpcy56PXQuei9yKSx0aGlzfXNldEF4aXNBbmdsZUZyb21Sb3RhdGlvbk1hdHJpeCh0KXtsZXQgcixuLGksbyxsPXQuZWxlbWVudHMsYz1sWzBdLHU9bFs0XSxoPWxbOF0sZj1sWzFdLHA9bFs1XSxkPWxbOV0sZz1sWzJdLF89bFs2XSx5PWxbMTBdO2lmKE1hdGguYWJzKHUtZik8LjAxJiZNYXRoLmFicyhoLWcpPC4wMSYmTWF0aC5hYnMoZC1fKTwuMDEpe2lmKE1hdGguYWJzKHUrZik8LjEmJk1hdGguYWJzKGgrZyk8LjEmJk1hdGguYWJzKGQrXyk8LjEmJk1hdGguYWJzKGMrcCt5LTMpPC4xKXJldHVybiB0aGlzLnNldCgxLDAsMCwwKSx0aGlzO3I9TWF0aC5QSTtsZXQgYj0oYysxKS8yLFM9KHArMSkvMixDPSh5KzEpLzIsUD0odStmKS80LGs9KGgrZykvNCxPPShkK18pLzQ7cmV0dXJuIGI+UyYmYj5DP2I8LjAxPyhuPTAsaT0uNzA3MTA2NzgxLG89LjcwNzEwNjc4MSk6KG49TWF0aC5zcXJ0KGIpLGk9UC9uLG89ay9uKTpTPkM/UzwuMDE/KG49LjcwNzEwNjc4MSxpPTAsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoUyksbj1QL2ksbz1PL2kpOkM8LjAxPyhuPS43MDcxMDY3ODEsaT0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KEMpLG49ay9vLGk9Ty9vKSx0aGlzLnNldChuLGksbyxyKSx0aGlzfWxldCB4PU1hdGguc3FydCgoXy1kKSooXy1kKSsoaC1nKSooaC1nKSsoZi11KSooZi11KSk7cmV0dXJuIE1hdGguYWJzKHgpPC4wMDEmJih4PTEpLHRoaXMueD0oXy1kKS94LHRoaXMueT0oaC1nKS94LHRoaXMuej0oZi11KS94LHRoaXMudz1NYXRoLmFjb3MoKGMrcCt5LTEpLzIpLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1pbih0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5taW4odGhpcy53LHQudyksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXMudz1NYXRoLm1heCh0aGlzLncsdC53KSx0aGlzfWNsYW1wKHQscil7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oci54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oci55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oci56LHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LncsTWF0aC5taW4oci53LHRoaXMudykpLHRoaXN9Y2xhbXBTY2FsYXIodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy56KSksdGhpcy53PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLncpKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpcy53PU1hdGguZmxvb3IodGhpcy53KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzLno9TWF0aC5jZWlsKHRoaXMueiksdGhpcy53PU1hdGguY2VpbCh0aGlzLncpLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpcy53PU1hdGgucm91bmQodGhpcy53KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9dGhpcy56PDA/TWF0aC5jZWlsKHRoaXMueik6TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz10aGlzLnc8MD9NYXRoLmNlaWwodGhpcy53KTpNYXRoLmZsb29yKHRoaXMudyksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpcy53PS10aGlzLncsdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56K3RoaXMudyp0Lnd9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnordGhpcy53KnRoaXMud31sZW5ndGgoKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLncpfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KStNYXRoLmFicyh0aGlzLncpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpcy56Kz0odC56LXRoaXMueikqcix0aGlzLncrPSh0LnctdGhpcy53KSpyLHRoaXN9bGVycFZlY3RvcnModCxyLG4pe3JldHVybiB0aGlzLng9dC54KyhyLngtdC54KSpuLHRoaXMueT10LnkrKHIueS10LnkpKm4sdGhpcy56PXQueisoci56LXQueikqbix0aGlzLnc9dC53KyhyLnctdC53KSpuLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56JiZ0Lnc9PT10aGlzLnd9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy54PXRbcl0sdGhpcy55PXRbcisxXSx0aGlzLno9dFtyKzJdLHRoaXMudz10W3IrM10sdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLngsdFtyKzFdPXRoaXMueSx0W3IrMl09dGhpcy56LHRbciszXT10aGlzLncsdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXMuej10LmdldFoociksdGhpcy53PXQuZ2V0VyhyKSx0aGlzfXJhbmRvbSgpe3JldHVybiB0aGlzLng9TWF0aC5yYW5kb20oKSx0aGlzLnk9TWF0aC5yYW5kb20oKSx0aGlzLno9TWF0aC5yYW5kb20oKSx0aGlzLnc9TWF0aC5yYW5kb20oKSx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56LHlpZWxkIHRoaXMud319O2VuLnByb3RvdHlwZS5pc1ZlY3RvcjQ9ITA7dmFyIHVzPWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCxyLG49e30pe3N1cGVyKCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD0xLHRoaXMuc2Npc3Nvcj1uZXcgZW4oMCwwLHQsciksdGhpcy5zY2lzc29yVGVzdD0hMSx0aGlzLnZpZXdwb3J0PW5ldyBlbigwLDAsdCxyKSx0aGlzLnRleHR1cmU9bmV3IHhpKHZvaWQgMCxuLm1hcHBpbmcsbi53cmFwUyxuLndyYXBULG4ubWFnRmlsdGVyLG4ubWluRmlsdGVyLG4uZm9ybWF0LG4udHlwZSxuLmFuaXNvdHJvcHksbi5lbmNvZGluZyksdGhpcy50ZXh0dXJlLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT0hMCx0aGlzLnRleHR1cmUuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OnIsZGVwdGg6MX0sdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcz1uLmdlbmVyYXRlTWlwbWFwcyE9PXZvaWQgMD9uLmdlbmVyYXRlTWlwbWFwczohMSx0aGlzLnRleHR1cmUuaW50ZXJuYWxGb3JtYXQ9bi5pbnRlcm5hbEZvcm1hdCE9PXZvaWQgMD9uLmludGVybmFsRm9ybWF0Om51bGwsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1uLm1pbkZpbHRlciE9PXZvaWQgMD9uLm1pbkZpbHRlcjpvaSx0aGlzLmRlcHRoQnVmZmVyPW4uZGVwdGhCdWZmZXIhPT12b2lkIDA/bi5kZXB0aEJ1ZmZlcjohMCx0aGlzLnN0ZW5jaWxCdWZmZXI9bi5zdGVuY2lsQnVmZmVyIT09dm9pZCAwP24uc3RlbmNpbEJ1ZmZlcjohMSx0aGlzLmRlcHRoVGV4dHVyZT1uLmRlcHRoVGV4dHVyZSE9PXZvaWQgMD9uLmRlcHRoVGV4dHVyZTpudWxsfXNldFRleHR1cmUodCl7dC5pbWFnZT17d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHQsZGVwdGg6dGhpcy5kZXB0aH0sdGhpcy50ZXh0dXJlPXR9c2V0U2l6ZSh0LHIsbj0xKXsodGhpcy53aWR0aCE9PXR8fHRoaXMuaGVpZ2h0IT09cnx8dGhpcy5kZXB0aCE9PW4pJiYodGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD1uLHRoaXMudGV4dHVyZS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZS5pbWFnZS5oZWlnaHQ9cix0aGlzLnRleHR1cmUuaW1hZ2UuZGVwdGg9bix0aGlzLmRpc3Bvc2UoKSksdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsciksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxyKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07dXMucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITA7dmFyIHNVPWNsYXNzIGV4dGVuZHMgdXN7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHQscik7bGV0IGk9dGhpcy50ZXh0dXJlO3RoaXMudGV4dHVyZT1bXTtmb3IobGV0IG89MDtvPG47bysrKXRoaXMudGV4dHVyZVtvXT1pLmNsb25lKCl9c2V0U2l6ZSh0LHIsbj0xKXtpZih0aGlzLndpZHRoIT09dHx8dGhpcy5oZWlnaHQhPT1yfHx0aGlzLmRlcHRoIT09bil7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PXIsdGhpcy5kZXB0aD1uO2ZvcihsZXQgaT0wLG89dGhpcy50ZXh0dXJlLmxlbmd0aDtpPG87aSsrKXRoaXMudGV4dHVyZVtpXS5pbWFnZS53aWR0aD10LHRoaXMudGV4dHVyZVtpXS5pbWFnZS5oZWlnaHQ9cix0aGlzLnRleHR1cmVbaV0uaW1hZ2UuZGVwdGg9bjt0aGlzLmRpc3Bvc2UoKX1yZXR1cm4gdGhpcy52aWV3cG9ydC5zZXQoMCwwLHQsciksdGhpcy5zY2lzc29yLnNldCgwLDAsdCxyKSx0aGlzfWNvcHkodCl7dGhpcy5kaXNwb3NlKCksdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5zY2lzc29yLnNldCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpcy50ZXh0dXJlLmxlbmd0aD0wO2ZvcihsZXQgcj0wLG49dC50ZXh0dXJlLmxlbmd0aDtyPG47cisrKXRoaXMudGV4dHVyZVtyXT10LnRleHR1cmVbcl0uY2xvbmUoKTtyZXR1cm4gdGhpc319O3NVLnByb3RvdHlwZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzPSEwO3ZhciBqMz1jbGFzcyBleHRlbmRzIHVze2NvbnN0cnVjdG9yKHQscixuPXt9KXtzdXBlcih0LHIsbiksdGhpcy5zYW1wbGVzPTQsdGhpcy5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weT1uLmlnbm9yZURlcHRoIT09dm9pZCAwP24uaWdub3JlRGVwdGg6ITAsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9bi51c2VSZW5kZXJUb1RleHR1cmUhPT12b2lkIDA/bi51c2VSZW5kZXJUb1RleHR1cmU6ITEsdGhpcy51c2VSZW5kZXJidWZmZXI9dGhpcy51c2VSZW5kZXJUb1RleHR1cmU9PT0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLnNhbXBsZXM9dC5zYW1wbGVzLHRoaXMudXNlUmVuZGVyVG9UZXh0dXJlPXQudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPXQudXNlUmVuZGVyYnVmZmVyLHRoaXN9fTtqMy5wcm90b3R5cGUuaXNXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PSEwO3ZhciB2aT1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAscj0wLG49MCxpPTEpe3RoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX3c9aX1zdGF0aWMgc2xlcnAodCxyLG4saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogU3RhdGljIC5zbGVycCgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBxbS5zbGVycFF1YXRlcm5pb25zKCBxYSwgcWIsIHQgKSBpbnN0ZWFkLiIpLG4uc2xlcnBRdWF0ZXJuaW9ucyh0LHIsaSl9c3RhdGljIHNsZXJwRmxhdCh0LHIsbixpLG8sYSxzKXtsZXQgbD1uW2krMF0sYz1uW2krMV0sdT1uW2krMl0saD1uW2krM10sZj1vW2ErMF0scD1vW2ErMV0sZD1vW2ErMl0sZz1vW2ErM107aWYocz09PTApe3RbciswXT1sLHRbcisxXT1jLHRbcisyXT11LHRbciszXT1oO3JldHVybn1pZihzPT09MSl7dFtyKzBdPWYsdFtyKzFdPXAsdFtyKzJdPWQsdFtyKzNdPWc7cmV0dXJufWlmKGghPT1nfHxsIT09Znx8YyE9PXB8fHUhPT1kKXtsZXQgXz0xLXMseT1sKmYrYypwK3UqZCtoKmcseD15Pj0wPzE6LTEsYj0xLXkqeTtpZihiPk51bWJlci5FUFNJTE9OKXtsZXQgQz1NYXRoLnNxcnQoYiksUD1NYXRoLmF0YW4yKEMseSp4KTtfPU1hdGguc2luKF8qUCkvQyxzPU1hdGguc2luKHMqUCkvQ31sZXQgUz1zKng7aWYobD1sKl8rZipTLGM9YypfK3AqUyx1PXUqXytkKlMsaD1oKl8rZypTLF89PT0xLXMpe2xldCBDPTEvTWF0aC5zcXJ0KGwqbCtjKmMrdSp1K2gqaCk7bCo9QyxjKj1DLHUqPUMsaCo9Q319dFtyXT1sLHRbcisxXT1jLHRbcisyXT11LHRbciszXT1ofXN0YXRpYyBtdWx0aXBseVF1YXRlcm5pb25zRmxhdCh0LHIsbixpLG8sYSl7bGV0IHM9bltpXSxsPW5baSsxXSxjPW5baSsyXSx1PW5baSszXSxoPW9bYV0sZj1vW2ErMV0scD1vW2ErMl0sZD1vW2ErM107cmV0dXJuIHRbcl09cypkK3UqaCtsKnAtYypmLHRbcisxXT1sKmQrdSpmK2MqaC1zKnAsdFtyKzJdPWMqZCt1KnArcypmLWwqaCx0W3IrM109dSpkLXMqaC1sKmYtYypwLHR9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHcoKXtyZXR1cm4gdGhpcy5fd31zZXQgdyh0KXt0aGlzLl93PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfXNldCh0LHIsbixpKXtyZXR1cm4gdGhpcy5feD10LHRoaXMuX3k9cix0aGlzLl96PW4sdGhpcy5fdz1pLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96LHRoaXMuX3cpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC54LHRoaXMuX3k9dC55LHRoaXMuX3o9dC56LHRoaXMuX3c9dC53LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21FdWxlcih0LHIpe2lmKCEodCYmdC5pc0V1bGVyKSl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhbiBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCBuPXQuX3gsaT10Ll95LG89dC5feixhPXQuX29yZGVyLHM9TWF0aC5jb3MsbD1NYXRoLnNpbixjPXMobi8yKSx1PXMoaS8yKSxoPXMoby8yKSxmPWwobi8yKSxwPWwoaS8yKSxkPWwoby8yKTtzd2l0Y2goYSl7Y2FzZSJYWVoiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7Y2FzZSJaWFkiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJaWVgiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3g9Zip1KmgrYypwKmQsdGhpcy5feT1jKnAqaCtmKnUqZCx0aGlzLl96PWMqdSpkLWYqcCpoLHRoaXMuX3c9Yyp1KmgtZipwKmQ7YnJlYWs7Y2FzZSJYWlkiOnRoaXMuX3g9Zip1KmgtYypwKmQsdGhpcy5feT1jKnAqaC1mKnUqZCx0aGlzLl96PWMqdSpkK2YqcCpoLHRoaXMuX3c9Yyp1KmgrZipwKmQ7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IC5zZXRGcm9tRXVsZXIoKSBlbmNvdW50ZXJlZCBhbiB1bmtub3duIG9yZGVyOiAiK2EpfXJldHVybiByIT09ITEmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxyKXtsZXQgbj1yLzIsaT1NYXRoLnNpbihuKTtyZXR1cm4gdGhpcy5feD10LngqaSx0aGlzLl95PXQueSppLHRoaXMuX3o9dC56KmksdGhpcy5fdz1NYXRoLmNvcyhuKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IHI9dC5lbGVtZW50cyxuPXJbMF0saT1yWzRdLG89cls4XSxhPXJbMV0scz1yWzVdLGw9cls5XSxjPXJbMl0sdT1yWzZdLGg9clsxMF0sZj1uK3MraDtpZihmPjApe2xldCBwPS41L01hdGguc3FydChmKzEpO3RoaXMuX3c9LjI1L3AsdGhpcy5feD0odS1sKSpwLHRoaXMuX3k9KG8tYykqcCx0aGlzLl96PShhLWkpKnB9ZWxzZSBpZihuPnMmJm4+aCl7bGV0IHA9MipNYXRoLnNxcnQoMStuLXMtaCk7dGhpcy5fdz0odS1sKS9wLHRoaXMuX3g9LjI1KnAsdGhpcy5feT0oaSthKS9wLHRoaXMuX3o9KG8rYykvcH1lbHNlIGlmKHM+aCl7bGV0IHA9MipNYXRoLnNxcnQoMStzLW4taCk7dGhpcy5fdz0oby1jKS9wLHRoaXMuX3g9KGkrYSkvcCx0aGlzLl95PS4yNSpwLHRoaXMuX3o9KGwrdSkvcH1lbHNle2xldCBwPTIqTWF0aC5zcXJ0KDEraC1uLXMpO3RoaXMuX3c9KGEtaSkvcCx0aGlzLl94PShvK2MpL3AsdGhpcy5feT0obCt1KS9wLHRoaXMuX3o9LjI1KnB9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LHIpe2xldCBuPXQuZG90KHIpKzE7cmV0dXJuIG48TnVtYmVyLkVQU0lMT04/KG49MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1uKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PW4pKToodGhpcy5feD10Lnkqci56LXQueipyLnksdGhpcy5feT10Lnoqci54LXQueCpyLnosdGhpcy5fej10Lngqci55LXQueSpyLngsdGhpcy5fdz1uKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKFpvKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LHIpe2xldCBuPXRoaXMuYW5nbGVUbyh0KTtpZihuPT09MClyZXR1cm4gdGhpcztsZXQgaT1NYXRoLm1pbigxLHIvbik7cmV0dXJuIHRoaXMuc2xlcnAodCxpKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIHQ9PT0wPyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxyKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxyKXtsZXQgbj10Ll94LGk9dC5feSxvPXQuX3osYT10Ll93LHM9ci5feCxsPXIuX3ksYz1yLl96LHU9ci5fdztyZXR1cm4gdGhpcy5feD1uKnUrYSpzK2kqYy1vKmwsdGhpcy5feT1pKnUrYSpsK28qcy1uKmMsdGhpcy5fej1vKnUrYSpjK24qbC1pKnMsdGhpcy5fdz1hKnUtbipzLWkqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxyKXtpZihyPT09MClyZXR1cm4gdGhpcztpZihyPT09MSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBuPXRoaXMuX3gsaT10aGlzLl95LG89dGhpcy5feixhPXRoaXMuX3cscz1hKnQuX3crbip0Ll94K2kqdC5feStvKnQuX3o7aWYoczwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LHM9LXMpOnRoaXMuY29weSh0KSxzPj0xKXJldHVybiB0aGlzLl93PWEsdGhpcy5feD1uLHRoaXMuX3k9aSx0aGlzLl96PW8sdGhpcztsZXQgbD0xLXMqcztpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IHA9MS1yO3JldHVybiB0aGlzLl93PXAqYStyKnRoaXMuX3csdGhpcy5feD1wKm4rcip0aGlzLl94LHRoaXMuX3k9cCppK3IqdGhpcy5feSx0aGlzLl96PXAqbytyKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksdT1NYXRoLmF0YW4yKGMscyksaD1NYXRoLnNpbigoMS1yKSp1KS9jLGY9TWF0aC5zaW4ocip1KS9jO3JldHVybiB0aGlzLl93PWEqaCt0aGlzLl93KmYsdGhpcy5feD1uKmgrdGhpcy5feCpmLHRoaXMuX3k9aSpoK3RoaXMuX3kqZix0aGlzLl96PW8qaCt0aGlzLl96KmYsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LHIsbil7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChyLG4pfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCkscj1NYXRoLnNxcnQoMS10KSxuPU1hdGguc3FydCh0KSxpPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KHIqTWF0aC5jb3MoaSksbipNYXRoLnNpbihvKSxuKk1hdGguY29zKG8pLHIqTWF0aC5zaW4oaSkpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQscj0wKXtyZXR1cm4gdGhpcy5feD10W3JdLHRoaXMuX3k9dFtyKzFdLHRoaXMuX3o9dFtyKzJdLHRoaXMuX3c9dFtyKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMuX3gsdFtyKzFdPXRoaXMuX3ksdFtyKzJdPXRoaXMuX3osdFtyKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscil7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKHIpLHRoaXMuX3k9dC5nZXRZKHIpLHRoaXMuX3o9dC5nZXRaKHIpLHRoaXMuX3c9dC5nZXRXKHIpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3ZpLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIGo9Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTApe3RoaXMueD10LHRoaXMueT1yLHRoaXMuej1ufXNldCh0LHIsbil7cmV0dXJuIG49PT12b2lkIDAmJihuPXRoaXMueiksdGhpcy54PXQsdGhpcy55PXIsdGhpcy56PW4sdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXMuej10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldFoodCl7cmV0dXJuIHRoaXMuej10LHRoaXN9c2V0Q29tcG9uZW50KHQscil7c3dpdGNoKHQpe2Nhc2UgMDp0aGlzLng9cjticmVhaztjYXNlIDE6dGhpcy55PXI7YnJlYWs7Y2FzZSAyOnRoaXMuej1yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtjYXNlIDI6cmV0dXJuIHRoaXMuejtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55LHRoaXMueil9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpc31hZGQodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQscikpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzLnorPXQueix0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpcy56Kz10LHRoaXN9YWRkVmVjdG9ycyh0LHIpe3JldHVybiB0aGlzLng9dC54K3IueCx0aGlzLnk9dC55K3IueSx0aGlzLno9dC56K3Iueix0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LHIpe3JldHVybiB0aGlzLngrPXQueCpyLHRoaXMueSs9dC55KnIsdGhpcy56Kz10Lnoqcix0aGlzfXN1Yih0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxyKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMuei09dC56LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzLnotPXQsdGhpc31zdWJWZWN0b3JzKHQscil7cmV0dXJuIHRoaXMueD10Lngtci54LHRoaXMueT10Lnktci55LHRoaXMuej10Lnotci56LHRoaXN9bXVsdGlwbHkodCxyKXtyZXR1cm4gciE9PXZvaWQgMD8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlWZWN0b3JzKHQscikpOih0aGlzLngqPXQueCx0aGlzLnkqPXQueSx0aGlzLnoqPXQueix0aGlzKX1tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzLnoqPXQsdGhpc31tdWx0aXBseVZlY3RvcnModCxyKXtyZXR1cm4gdGhpcy54PXQueCpyLngsdGhpcy55PXQueSpyLnksdGhpcy56PXQueipyLnosdGhpc31hcHBseUV1bGVyKHQpe3JldHVybiB0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5hcHBseUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKSx0aGlzLmFwcGx5UXVhdGVybmlvbihwdWUuc2V0RnJvbUV1bGVyKHQpKX1hcHBseUF4aXNBbmdsZSh0LHIpe3JldHVybiB0aGlzLmFwcGx5UXVhdGVybmlvbihwdWUuc2V0RnJvbUF4aXNBbmdsZSh0LHIpKX1hcHBseU1hdHJpeDModCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qcitvWzNdKm4rb1s2XSppLHRoaXMueT1vWzFdKnIrb1s0XSpuK29bN10qaSx0aGlzLno9b1syXSpyK29bNV0qbitvWzhdKmksdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtyZXR1cm4gdGhpcy5hcHBseU1hdHJpeDModCkubm9ybWFsaXplKCl9YXBwbHlNYXRyaXg0KHQpe2xldCByPXRoaXMueCxuPXRoaXMueSxpPXRoaXMueixvPXQuZWxlbWVudHMsYT0xLyhvWzNdKnIrb1s3XSpuK29bMTFdKmkrb1sxNV0pO3JldHVybiB0aGlzLng9KG9bMF0qcitvWzRdKm4rb1s4XSppK29bMTJdKSphLHRoaXMueT0ob1sxXSpyK29bNV0qbitvWzldKmkrb1sxM10pKmEsdGhpcy56PShvWzJdKnIrb1s2XSpuK29bMTBdKmkrb1sxNF0pKmEsdGhpc31hcHBseVF1YXRlcm5pb24odCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC54LGE9dC55LHM9dC56LGw9dC53LGM9bCpyK2EqaS1zKm4sdT1sKm4rcypyLW8qaSxoPWwqaStvKm4tYSpyLGY9LW8qci1hKm4tcyppO3JldHVybiB0aGlzLng9YypsK2YqLW8rdSotcy1oKi1hLHRoaXMueT11KmwrZiotYStoKi1vLWMqLXMsdGhpcy56PWgqbCtmKi1zK2MqLWEtdSotbyx0aGlzfXByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGRJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5wcm9qZWN0aW9uTWF0cml4KX11bnByb2plY3QodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKX10cmFuc2Zvcm1EaXJlY3Rpb24odCl7bGV0IHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LG89dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PW9bMF0qcitvWzRdKm4rb1s4XSppLHRoaXMueT1vWzFdKnIrb1s1XSpuK29bOV0qaSx0aGlzLno9b1syXSpyK29bNl0qbitvWzEwXSppLHRoaXMubm9ybWFsaXplKCl9ZGl2aWRlKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzLnovPXQueix0aGlzfWRpdmlkZVNjYWxhcih0KXtyZXR1cm4gdGhpcy5tdWx0aXBseVNjYWxhcigxL3QpfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpc31tYXgodCl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5tYXgodGhpcy55LHQueSksdGhpcy56PU1hdGgubWF4KHRoaXMueix0LnopLHRoaXN9Y2xhbXAodCxyKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihyLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihyLnksdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQueixNYXRoLm1pbihyLnosdGhpcy56KSksdGhpc31jbGFtcFNjYWxhcih0LHIpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihyLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKHIsdGhpcy55KSksdGhpcy56PU1hdGgubWF4KHQsTWF0aC5taW4ocix0aGlzLnopKSx0aGlzfWNsYW1wTGVuZ3RoKHQscil7bGV0IG49dGhpcy5sZW5ndGgoKTtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIobnx8MSkubXVsdGlwbHlTY2FsYXIoTWF0aC5tYXgodCxNYXRoLm1pbihyLG4pKSl9Zmxvb3IoKXtyZXR1cm4gdGhpcy54PU1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej1NYXRoLmZsb29yKHRoaXMueiksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXN9cm91bmQoKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXMuej1NYXRoLnJvdW5kKHRoaXMueiksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzLno9LXRoaXMueix0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55K3RoaXMueip0Lnp9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnp9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueil9bWFuaGF0dGFuTGVuZ3RoKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueCkrTWF0aC5hYnModGhpcy55KStNYXRoLmFicyh0aGlzLnopfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1zZXRMZW5ndGgodCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodCl9bGVycCh0LHIpe3JldHVybiB0aGlzLngrPSh0LngtdGhpcy54KSpyLHRoaXMueSs9KHQueS10aGlzLnkpKnIsdGhpcy56Kz0odC56LXRoaXMueikqcix0aGlzfWxlcnBWZWN0b3JzKHQscixuKXtyZXR1cm4gdGhpcy54PXQueCsoci54LXQueCkqbix0aGlzLnk9dC55KyhyLnktdC55KSpuLHRoaXMuej10LnorKHIuei10LnopKm4sdGhpc31jcm9zcyh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5jcm9zcygpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmNyb3NzVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5jcm9zc1ZlY3RvcnModCxyKSk6dGhpcy5jcm9zc1ZlY3RvcnModGhpcyx0KX1jcm9zc1ZlY3RvcnModCxyKXtsZXQgbj10LngsaT10Lnksbz10LnosYT1yLngscz1yLnksbD1yLno7cmV0dXJuIHRoaXMueD1pKmwtbypzLHRoaXMueT1vKmEtbipsLHRoaXMuej1uKnMtaSphLHRoaXN9cHJvamVjdE9uVmVjdG9yKHQpe2xldCByPXQubGVuZ3RoU3EoKTtpZihyPT09MClyZXR1cm4gdGhpcy5zZXQoMCwwLDApO2xldCBuPXQuZG90KHRoaXMpL3I7cmV0dXJuIHRoaXMuY29weSh0KS5tdWx0aXBseVNjYWxhcihuKX1wcm9qZWN0T25QbGFuZSh0KXtyZXR1cm4gWGN0LmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKFhjdCl9cmVmbGVjdCh0KXtyZXR1cm4gdGhpcy5zdWIoWGN0LmNvcHkodCkubXVsdGlwbHlTY2FsYXIoMip0aGlzLmRvdCh0KSkpfWFuZ2xlVG8odCl7bGV0IHI9TWF0aC5zcXJ0KHRoaXMubGVuZ3RoU3EoKSp0Lmxlbmd0aFNxKCkpO2lmKHI9PT0wKXJldHVybiBNYXRoLlBJLzI7bGV0IG49dGhpcy5kb3QodCkvcjtyZXR1cm4gTWF0aC5hY29zKFpvKG4sLTEsMSkpfWRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlVG9TcXVhcmVkKHQpKX1kaXN0YW5jZVRvU3F1YXJlZCh0KXtsZXQgcj10aGlzLngtdC54LG49dGhpcy55LXQueSxpPXRoaXMuei10Lno7cmV0dXJuIHIqcituKm4raSppfW1hbmhhdHRhbkRpc3RhbmNlVG8odCl7cmV0dXJuIE1hdGguYWJzKHRoaXMueC10LngpK01hdGguYWJzKHRoaXMueS10LnkpK01hdGguYWJzKHRoaXMuei10LnopfXNldEZyb21TcGhlcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LnJhZGl1cyx0LnBoaSx0LnRoZXRhKX1zZXRGcm9tU3BoZXJpY2FsQ29vcmRzKHQscixuKXtsZXQgaT1NYXRoLnNpbihyKSp0O3JldHVybiB0aGlzLng9aSpNYXRoLnNpbihuKSx0aGlzLnk9TWF0aC5jb3MocikqdCx0aGlzLno9aSpNYXRoLmNvcyhuKSx0aGlzfXNldEZyb21DeWxpbmRyaWNhbCh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModC5yYWRpdXMsdC50aGV0YSx0LnkpfXNldEZyb21DeWxpbmRyaWNhbENvb3Jkcyh0LHIsbil7cmV0dXJuIHRoaXMueD10Kk1hdGguc2luKHIpLHRoaXMueT1uLHRoaXMuej10Kk1hdGguY29zKHIpLHRoaXN9c2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQpe2xldCByPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1yWzEyXSx0aGlzLnk9clsxM10sdGhpcy56PXJbMTRdLHRoaXN9c2V0RnJvbU1hdHJpeFNjYWxlKHQpe2xldCByPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG49dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCksaT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gdGhpcy54PXIsdGhpcy55PW4sdGhpcy56PWksdGhpc31zZXRGcm9tTWF0cml4Q29sdW1uKHQscil7cmV0dXJuIHRoaXMuZnJvbUFycmF5KHQuZWxlbWVudHMscio0KX1zZXRGcm9tTWF0cml4M0NvbHVtbih0LHIpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLHIqMyl9ZXF1YWxzKHQpe3JldHVybiB0Lng9PT10aGlzLngmJnQueT09PXRoaXMueSYmdC56PT09dGhpcy56fWZyb21BcnJheSh0LHI9MCl7cmV0dXJuIHRoaXMueD10W3JdLHRoaXMueT10W3IrMV0sdGhpcy56PXRbcisyXSx0aGlzfXRvQXJyYXkodD1bXSxyPTApe3JldHVybiB0W3JdPXRoaXMueCx0W3IrMV09dGhpcy55LHRbcisyXT10aGlzLnosdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQscixuKXtyZXR1cm4gbiE9PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiBvZmZzZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy54PXQuZ2V0WChyKSx0aGlzLnk9dC5nZXRZKHIpLHRoaXMuej10LmdldFoociksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpc31yYW5kb21EaXJlY3Rpb24oKXtsZXQgdD0oTWF0aC5yYW5kb20oKS0uNSkqMixyPU1hdGgucmFuZG9tKCkqTWF0aC5QSSoyLG49TWF0aC5zcXJ0KDEtRUkodCwyKSk7cmV0dXJuIHRoaXMueD1uKk1hdGguY29zKHIpLHRoaXMueT1uKk1hdGguc2luKHIpLHRoaXMuej10LHRoaXN9KltTeW1ib2wuaXRlcmF0b3JdKCl7eWllbGQgdGhpcy54LHlpZWxkIHRoaXMueSx5aWVsZCB0aGlzLnp9fTtqLnByb3RvdHlwZS5pc1ZlY3RvcjM9ITA7dmFyIFhjdD1uZXcgaixwdWU9bmV3IHZpLHRhPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGooMS8wLDEvMCwxLzApLHI9bmV3IGooLTEvMCwtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShyKSx0aGlzfXNldEZyb21BcnJheSh0KXtsZXQgcj0xLzAsbj0xLzAsaT0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10Lmxlbmd0aDtsPGM7bCs9Myl7bGV0IHU9dFtsXSxoPXRbbCsxXSxmPXRbbCsyXTt1PHImJihyPXUpLGg8biYmKG49aCksZjxpJiYoaT1mKSx1Pm8mJihvPXUpLGg+YSYmKGE9aCksZj5zJiYocz1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KHIsbixpKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KXtsZXQgcj0xLzAsbj0xLzAsaT0xLzAsbz0tMS8wLGE9LTEvMCxzPS0xLzA7Zm9yKGxldCBsPTAsYz10LmNvdW50O2w8YztsKyspe2xldCB1PXQuZ2V0WChsKSxoPXQuZ2V0WShsKSxmPXQuZ2V0WihsKTt1PHImJihyPXUpLGg8biYmKG49aCksZjxpJiYoaT1mKSx1Pm8mJihvPXUpLGg+YSYmKGE9aCksZj5zJiYocz1mKX1yZXR1cm4gdGhpcy5taW4uc2V0KHIsbixpKSx0aGlzLm1heC5zZXQobyxhLHMpLHRoaXN9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1ha2VFbXB0eSgpO2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyl0aGlzLmV4cGFuZEJ5UG9pbnQodFtyXSk7cmV0dXJuIHRoaXN9c2V0RnJvbUNlbnRlckFuZFNpemUodCxyKXtsZXQgbj1tdi5jb3B5KHIpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIobiksdGhpcy5tYXguY29weSh0KS5hZGQobiksdGhpc31zZXRGcm9tT2JqZWN0KHQscj0hMSl7cmV0dXJuIHRoaXMubWFrZUVtcHR5KCksdGhpcy5leHBhbmRCeU9iamVjdCh0LHIpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LHI9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBuPXQuZ2VvbWV0cnk7aWYobiE9PXZvaWQgMClpZihyJiZuLmF0dHJpYnV0ZXMhPW51bGwmJm4uYXR0cmlidXRlcy5wb3NpdGlvbiE9PXZvaWQgMCl7bGV0IG89bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgYT0wLHM9by5jb3VudDthPHM7YSsrKW12LmZyb21CdWZmZXJBdHRyaWJ1dGUobyxhKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KG12KX1lbHNlIG4uYm91bmRpbmdCb3g9PT1udWxsJiZuLmNvbXB1dGVCb3VuZGluZ0JveCgpLCRjdC5jb3B5KG4uYm91bmRpbmdCb3gpLCRjdC5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy51bmlvbigkY3QpO2xldCBpPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAsYT1pLmxlbmd0aDtvPGE7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QoaVtvXSxyKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQscil7cmV0dXJuIHIuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLG12KSxtdi5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgcixuO3JldHVybiB0Lm5vcm1hbC54PjA/KHI9dC5ub3JtYWwueCp0aGlzLm1pbi54LG49dC5ub3JtYWwueCp0aGlzLm1heC54KToocj10Lm5vcm1hbC54KnRoaXMubWF4Lngsbj10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8ocis9dC5ub3JtYWwueSp0aGlzLm1pbi55LG4rPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KHIrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxuKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8ocis9dC5ub3JtYWwueip0aGlzLm1pbi56LG4rPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KHIrPXQubm9ybWFsLnoqdGhpcy5tYXgueixuKz10Lm5vcm1hbC56KnRoaXMubWluLnopLHI8PS10LmNvbnN0YW50JiZuPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoSVApLGhWLnN1YlZlY3RvcnModGhpcy5tYXgsSVApLHgzLnN1YlZlY3RvcnModC5hLElQKSxiMy5zdWJWZWN0b3JzKHQuYixJUCksdzMuc3ViVmVjdG9ycyh0LmMsSVApLFAwLnN1YlZlY3RvcnMoYjMseDMpLEkwLnN1YlZlY3RvcnModzMsYjMpLGd2LnN1YlZlY3RvcnMoeDMsdzMpO2xldCByPVswLC1QMC56LFAwLnksMCwtSTAueixJMC55LDAsLWd2LnosZ3YueSxQMC56LDAsLVAwLngsSTAueiwwLC1JMC54LGd2LnosMCwtZ3YueCwtUDAueSxQMC54LDAsLUkwLnksSTAueCwwLC1ndi55LGd2LngsMF07cmV0dXJuIUtjdChyLHgzLGIzLHczLGhWKXx8KHI9WzEsMCwwLDAsMSwwLDAsMCwxXSwhS2N0KHIseDMsYjMsdzMsaFYpKT8hMTooZlYuY3Jvc3NWZWN0b3JzKFAwLEkwKSxyPVtmVi54LGZWLnksZlYuel0sS2N0KHIseDMsYjMsdzMsaFYpKX1jbGFtcFBvaW50KHQscil7cmV0dXJuIHIuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCl9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiBtdi5jb3B5KHQpLmNsYW1wKHRoaXMubWluLHRoaXMubWF4KS5zdWIodCkubGVuZ3RoKCl9Z2V0Qm91bmRpbmdTcGhlcmUodCl7cmV0dXJuIHRoaXMuZ2V0Q2VudGVyKHQuY2VudGVyKSx0LnJhZGl1cz10aGlzLmdldFNpemUobXYpLmxlbmd0aCgpKi41LHR9aW50ZXJzZWN0KHQpe3JldHVybiB0aGlzLm1pbi5tYXgodC5taW4pLHRoaXMubWF4Lm1pbih0Lm1heCksdGhpcy5pc0VtcHR5KCkmJnRoaXMubWFrZUVtcHR5KCksdGhpc311bmlvbih0KXtyZXR1cm4gdGhpcy5taW4ubWluKHQubWluKSx0aGlzLm1heC5tYXgodC5tYXgpLHRoaXN9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzOihWZFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxWZFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxWZFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxWZFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxWZFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoVmQpLHRoaXMpfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O3RhLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIFZkPVtuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgaixuZXcgal0sbXY9bmV3IGosJGN0PW5ldyB0YSx4Mz1uZXcgaixiMz1uZXcgaix3Mz1uZXcgaixQMD1uZXcgaixJMD1uZXcgaixndj1uZXcgaixJUD1uZXcgaixoVj1uZXcgaixmVj1uZXcgaixfdj1uZXcgajtmdW5jdGlvbiBLY3QoZSx0LHIsbixpKXtmb3IobGV0IG89MCxhPWUubGVuZ3RoLTM7bzw9YTtvKz0zKXtfdi5mcm9tQXJyYXkoZSxvKTtsZXQgcz1pLngqTWF0aC5hYnMoX3YueCkraS55Kk1hdGguYWJzKF92LnkpK2kueipNYXRoLmFicyhfdi56KSxsPXQuZG90KF92KSxjPXIuZG90KF92KSx1PW4uZG90KF92KTtpZihNYXRoLm1heCgtTWF0aC5tYXgobCxjLHUpLE1hdGgubWluKGwsYyx1KSk+cylyZXR1cm4hMX1yZXR1cm4hMH12YXIgcmZyPW5ldyB0YSxkdWU9bmV3IGoscFY9bmV3IGosWmN0PW5ldyBqLFpmPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj0tMSl7dGhpcy5jZW50ZXI9dCx0aGlzLnJhZGl1cz1yfXNldCh0LHIpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQpLHRoaXMucmFkaXVzPXIsdGhpc31zZXRGcm9tUG9pbnRzKHQscil7bGV0IG49dGhpcy5jZW50ZXI7ciE9PXZvaWQgMD9uLmNvcHkocik6cmZyLnNldEZyb21Qb2ludHModCkuZ2V0Q2VudGVyKG4pO2xldCBpPTA7Zm9yKGxldCBvPTAsYT10Lmxlbmd0aDtvPGE7bysrKWk9TWF0aC5tYXgoaSxuLmRpc3RhbmNlVG9TcXVhcmVkKHRbb10pKTtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KGkpLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpc31pc0VtcHR5KCl7cmV0dXJuIHRoaXMucmFkaXVzPDB9bWFrZUVtcHR5KCl7cmV0dXJuIHRoaXMuY2VudGVyLnNldCgwLDAsMCksdGhpcy5yYWRpdXM9LTEsdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXN9ZGlzdGFuY2VUb1BvaW50KHQpe3JldHVybiB0LmRpc3RhbmNlVG8odGhpcy5jZW50ZXIpLXRoaXMucmFkaXVzfWludGVyc2VjdHNTcGhlcmUodCl7bGV0IHI9dGhpcy5yYWRpdXMrdC5yYWRpdXM7cmV0dXJuIHQuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHRoaXMuY2VudGVyKTw9cipyfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1NwaGVyZSh0aGlzKX1pbnRlcnNlY3RzUGxhbmUodCl7cmV0dXJuIE1hdGguYWJzKHQuZGlzdGFuY2VUb1BvaW50KHRoaXMuY2VudGVyKSk8PXRoaXMucmFkaXVzfWNsYW1wUG9pbnQodCxyKXtsZXQgbj10aGlzLmNlbnRlci5kaXN0YW5jZVRvU3F1YXJlZCh0KTtyZXR1cm4gci5jb3B5KHQpLG4+dGhpcy5yYWRpdXMqdGhpcy5yYWRpdXMmJihyLnN1Yih0aGlzLmNlbnRlcikubm9ybWFsaXplKCksci5tdWx0aXBseVNjYWxhcih0aGlzLnJhZGl1cykuYWRkKHRoaXMuY2VudGVyKSkscn1nZXRCb3VuZGluZ0JveCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/KHQubWFrZUVtcHR5KCksdCk6KHQuc2V0KHRoaXMuY2VudGVyLHRoaXMuY2VudGVyKSx0LmV4cGFuZEJ5U2NhbGFyKHRoaXMucmFkaXVzKSx0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFwcGx5TWF0cml4NCh0KSx0aGlzLnJhZGl1cz10aGlzLnJhZGl1cyp0LmdldE1heFNjYWxlT25BeGlzKCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY2VudGVyLmFkZCh0KSx0aGlzfWV4cGFuZEJ5UG9pbnQodCl7WmN0LnN1YlZlY3RvcnModCx0aGlzLmNlbnRlcik7bGV0IHI9WmN0Lmxlbmd0aFNxKCk7aWYocj50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IG49TWF0aC5zcXJ0KHIpLGk9KG4tdGhpcy5yYWRpdXMpKi41O3RoaXMuY2VudGVyLmFkZChaY3QubXVsdGlwbHlTY2FsYXIoaS9uKSksdGhpcy5yYWRpdXMrPWl9cmV0dXJuIHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik9PT0hMD9wVi5zZXQoMCwwLDEpLm11bHRpcGx5U2NhbGFyKHQucmFkaXVzKTpwVi5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyksdGhpcy5leHBhbmRCeVBvaW50KGR1ZS5jb3B5KHQuY2VudGVyKS5hZGQocFYpKSx0aGlzLmV4cGFuZEJ5UG9pbnQoZHVlLmNvcHkodC5jZW50ZXIpLnN1YihwVikpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0LmNlbnRlci5lcXVhbHModGhpcy5jZW50ZXIpJiZ0LnJhZGl1cz09PXRoaXMucmFkaXVzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19LFVkPW5ldyBqLEpjdD1uZXcgaixkVj1uZXcgaixMMD1uZXcgaixRY3Q9bmV3IGosbVY9bmV3IGosdHV0PW5ldyBqLEpmPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaigwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPXJ9c2V0KHQscil7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShyKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxyKXtyZXR1cm4gci5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCxVZCkpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIpe3Iuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgbj1yLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIG48MD9yLmNvcHkodGhpcy5vcmlnaW4pOnIuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIobikuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgcj1VZC5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIHI8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KTooVWQuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIocikuYWRkKHRoaXMub3JpZ2luKSxVZC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LHIsbixpKXtKY3QuY29weSh0KS5hZGQocikubXVsdGlwbHlTY2FsYXIoLjUpLGRWLmNvcHkocikuc3ViKHQpLm5vcm1hbGl6ZSgpLEwwLmNvcHkodGhpcy5vcmlnaW4pLnN1YihKY3QpO2xldCBvPXQuZGlzdGFuY2VUbyhyKSouNSxhPS10aGlzLmRpcmVjdGlvbi5kb3QoZFYpLHM9TDAuZG90KHRoaXMuZGlyZWN0aW9uKSxsPS1MMC5kb3QoZFYpLGM9TDAubGVuZ3RoU3EoKSx1PU1hdGguYWJzKDEtYSphKSxoLGYscCxkO2lmKHU+MClpZihoPWEqbC1zLGY9YSpzLWwsZD1vKnUsaD49MClpZihmPj0tZClpZihmPD1kKXtsZXQgZz0xL3U7aCo9ZyxmKj1nLHA9aCooaCthKmYrMipzKStmKihhKmgrZisyKmwpK2N9ZWxzZSBmPW8saD1NYXRoLm1heCgwLC0oYSpmK3MpKSxwPS1oKmgrZiooZisyKmwpK2M7ZWxzZSBmPS1vLGg9TWF0aC5tYXgoMCwtKGEqZitzKSkscD0taCpoK2YqKGYrMipsKStjO2Vsc2UgZjw9LWQ/KGg9TWF0aC5tYXgoMCwtKC1hKm8rcykpLGY9aD4wPy1vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPS1oKmgrZiooZisyKmwpK2MpOmY8PWQ/KGg9MCxmPU1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPWYqKGYrMipsKStjKTooaD1NYXRoLm1heCgwLC0oYSpvK3MpKSxmPWg+MD9vOk1hdGgubWluKE1hdGgubWF4KC1vLC1sKSxvKSxwPS1oKmgrZiooZisyKmwpK2MpO2Vsc2UgZj1hPjA/LW86byxoPU1hdGgubWF4KDAsLShhKmYrcykpLHA9LWgqaCtmKihmKzIqbCkrYztyZXR1cm4gbiYmbi5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcihoKS5hZGQodGhpcy5vcmlnaW4pLGkmJmkuY29weShkVikubXVsdGlwbHlTY2FsYXIoZikuYWRkKEpjdCkscH1pbnRlcnNlY3RTcGhlcmUodCxyKXtVZC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgbj1VZC5kb3QodGhpcy5kaXJlY3Rpb24pLGk9VWQuZG90KFVkKS1uKm4sbz10LnJhZGl1cyp0LnJhZGl1cztpZihpPm8pcmV0dXJuIG51bGw7bGV0IGE9TWF0aC5zcXJ0KG8taSkscz1uLWEsbD1uK2E7cmV0dXJuIHM8MCYmbDwwP251bGw6czwwP3RoaXMuYXQobCxyKTp0aGlzLmF0KHMscil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5kaXN0YW5jZVNxVG9Qb2ludCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWRpc3RhbmNlVG9QbGFuZSh0KXtsZXQgcj10Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pO2lmKHI9PT0wKXJldHVybiB0LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik9PT0wPzA6bnVsbDtsZXQgbj0tKHRoaXMub3JpZ2luLmRvdCh0Lm5vcm1hbCkrdC5jb25zdGFudCkvcjtyZXR1cm4gbj49MD9uOm51bGx9aW50ZXJzZWN0UGxhbmUodCxyKXtsZXQgbj10aGlzLmRpc3RhbmNlVG9QbGFuZSh0KTtyZXR1cm4gbj09PW51bGw/bnVsbDp0aGlzLmF0KG4scil9aW50ZXJzZWN0c1BsYW5lKHQpe2xldCByPXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKTtyZXR1cm4gcj09PTB8fHQubm9ybWFsLmRvdCh0aGlzLmRpcmVjdGlvbikqcjwwfWludGVyc2VjdEJveCh0LHIpe2xldCBuLGksbyxhLHMsbCxjPTEvdGhpcy5kaXJlY3Rpb24ueCx1PTEvdGhpcy5kaXJlY3Rpb24ueSxoPTEvdGhpcy5kaXJlY3Rpb24ueixmPXRoaXMub3JpZ2luO3JldHVybiBjPj0wPyhuPSh0Lm1pbi54LWYueCkqYyxpPSh0Lm1heC54LWYueCkqYyk6KG49KHQubWF4LngtZi54KSpjLGk9KHQubWluLngtZi54KSpjKSx1Pj0wPyhvPSh0Lm1pbi55LWYueSkqdSxhPSh0Lm1heC55LWYueSkqdSk6KG89KHQubWF4LnktZi55KSp1LGE9KHQubWluLnktZi55KSp1KSxuPmF8fG8+aXx8KChvPm58fG4hPT1uKSYmKG49byksKGE8aXx8aSE9PWkpJiYoaT1hKSxoPj0wPyhzPSh0Lm1pbi56LWYueikqaCxsPSh0Lm1heC56LWYueikqaCk6KHM9KHQubWF4LnotZi56KSpoLGw9KHQubWluLnotZi56KSpoKSxuPmx8fHM+aSl8fCgocz5ufHxuIT09bikmJihuPXMpLChsPGl8fGkhPT1pKSYmKGk9bCksaTwwKT9udWxsOnRoaXMuYXQobj49MD9uOmkscil9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdGhpcy5pbnRlcnNlY3RCb3godCxVZCkhPT1udWxsfWludGVyc2VjdFRyaWFuZ2xlKHQscixuLGksbyl7UWN0LnN1YlZlY3RvcnMocix0KSxtVi5zdWJWZWN0b3JzKG4sdCksdHV0LmNyb3NzVmVjdG9ycyhRY3QsbVYpO2xldCBhPXRoaXMuZGlyZWN0aW9uLmRvdCh0dXQpLHM7aWYoYT4wKXtpZihpKXJldHVybiBudWxsO3M9MX1lbHNlIGlmKGE8MClzPS0xLGE9LWE7ZWxzZSByZXR1cm4gbnVsbDtMMC5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPXMqdGhpcy5kaXJlY3Rpb24uZG90KG1WLmNyb3NzVmVjdG9ycyhMMCxtVikpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1zKnRoaXMuZGlyZWN0aW9uLmRvdChRY3QuY3Jvc3MoTDApKTtpZihjPDB8fGwrYz5hKXJldHVybiBudWxsO2xldCB1PS1zKkwwLmRvdCh0dXQpO3JldHVybiB1PDA/bnVsbDp0aGlzLmF0KHUvYSxvKX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMub3JpZ2luLmFwcGx5TWF0cml4NCh0KSx0aGlzLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQub3JpZ2luLmVxdWFscyh0aGlzLm9yaWdpbikmJnQuZGlyZWN0aW9uLmVxdWFscyh0aGlzLmRpcmVjdGlvbil9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sTWU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQscixuLGksbyxhLHMsbCxjLHUsaCxmLHAsZCxnLF8pe2xldCB5PXRoaXMuZWxlbWVudHM7cmV0dXJuIHlbMF09dCx5WzRdPXIseVs4XT1uLHlbMTJdPWkseVsxXT1vLHlbNV09YSx5WzldPXMseVsxM109bCx5WzJdPWMseVs2XT11LHlbMTBdPWgseVsxNF09Zix5WzNdPXAseVs3XT1kLHlbMTFdPWcseVsxNV09Xyx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IE1lKCkuZnJvbUFycmF5KHRoaXMuZWxlbWVudHMpfWNvcHkodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHM7cmV0dXJuIHJbMF09blswXSxyWzFdPW5bMV0sclsyXT1uWzJdLHJbM109blszXSxyWzRdPW5bNF0scls1XT1uWzVdLHJbNl09bls2XSxyWzddPW5bN10scls4XT1uWzhdLHJbOV09bls5XSxyWzEwXT1uWzEwXSxyWzExXT1uWzExXSxyWzEyXT1uWzEyXSxyWzEzXT1uWzEzXSxyWzE0XT1uWzE0XSxyWzE1XT1uWzE1XSx0aGlzfWNvcHlQb3NpdGlvbih0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztyZXR1cm4gclsxMl09blsxMl0sclsxM109blsxM10sclsxNF09blsxNF0sdGhpc31zZXRGcm9tTWF0cml4Myh0KXtsZXQgcj10LmVsZW1lbnRzO3JldHVybiB0aGlzLnNldChyWzBdLHJbM10scls2XSwwLHJbMV0scls0XSxyWzddLDAsclsyXSxyWzVdLHJbOF0sMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RCYXNpcyh0LHIsbil7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDApLHIuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDEpLG4uc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDIpLHRoaXN9bWFrZUJhc2lzKHQscixuKXtyZXR1cm4gdGhpcy5zZXQodC54LHIueCxuLngsMCx0Lnksci55LG4ueSwwLHQueixyLnosbi56LDAsMCwwLDAsMSksdGhpc31leHRyYWN0Um90YXRpb24odCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQuZWxlbWVudHMsaT0xL1MzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxvPTEvUzMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLGE9MS9TMy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHJbMF09blswXSppLHJbMV09blsxXSppLHJbMl09blsyXSppLHJbM109MCxyWzRdPW5bNF0qbyxyWzVdPW5bNV0qbyxyWzZdPW5bNl0qbyxyWzddPTAscls4XT1uWzhdKmEscls5XT1uWzldKmEsclsxMF09blsxMF0qYSxyWzExXT0wLHJbMTJdPTAsclsxM109MCxyWzE0XT0wLHJbMTVdPTEsdGhpc31tYWtlUm90YXRpb25Gcm9tRXVsZXIodCl7dCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubWFrZVJvdGF0aW9uRnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYSBFdWxlciByb3RhdGlvbiByYXRoZXIgdGhhbiBhIFZlY3RvcjMgYW5kIG9yZGVyLiIpO2xldCByPXRoaXMuZWxlbWVudHMsbj10LngsaT10Lnksbz10LnosYT1NYXRoLmNvcyhuKSxzPU1hdGguc2luKG4pLGw9TWF0aC5jb3MoaSksYz1NYXRoLnNpbihpKSx1PU1hdGguY29zKG8pLGg9TWF0aC5zaW4obyk7aWYodC5vcmRlcj09PSJYWVoiKXtsZXQgZj1hKnUscD1hKmgsZD1zKnUsZz1zKmg7clswXT1sKnUscls0XT0tbCpoLHJbOF09YyxyWzFdPXArZCpjLHJbNV09Zi1nKmMscls5XT0tcypsLHJbMl09Zy1mKmMscls2XT1kK3AqYyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IllYWiIpe2xldCBmPWwqdSxwPWwqaCxkPWMqdSxnPWMqaDtyWzBdPWYrZypzLHJbNF09ZCpzLXAscls4XT1hKmMsclsxXT1hKmgscls1XT1hKnUscls5XT0tcyxyWzJdPXAqcy1kLHJbNl09ZytmKnMsclsxMF09YSpsfWVsc2UgaWYodC5vcmRlcj09PSJaWFkiKXtsZXQgZj1sKnUscD1sKmgsZD1jKnUsZz1jKmg7clswXT1mLWcqcyxyWzRdPS1hKmgscls4XT1kK3AqcyxyWzFdPXArZCpzLHJbNV09YSp1LHJbOV09Zy1mKnMsclsyXT0tYSpjLHJbNl09cyxyWzEwXT1hKmx9ZWxzZSBpZih0Lm9yZGVyPT09IlpZWCIpe2xldCBmPWEqdSxwPWEqaCxkPXMqdSxnPXMqaDtyWzBdPWwqdSxyWzRdPWQqYy1wLHJbOF09ZipjK2csclsxXT1sKmgscls1XT1nKmMrZixyWzldPXAqYy1kLHJbMl09LWMscls2XT1zKmwsclsxMF09YSpsfWVsc2UgaWYodC5vcmRlcj09PSJZWlgiKXtsZXQgZj1hKmwscD1hKmMsZD1zKmwsZz1zKmM7clswXT1sKnUscls0XT1nLWYqaCxyWzhdPWQqaCtwLHJbMV09aCxyWzVdPWEqdSxyWzldPS1zKnUsclsyXT0tYyp1LHJbNl09cCpoK2QsclsxMF09Zi1nKmh9ZWxzZSBpZih0Lm9yZGVyPT09IlhaWSIpe2xldCBmPWEqbCxwPWEqYyxkPXMqbCxnPXMqYztyWzBdPWwqdSxyWzRdPS1oLHJbOF09Yyp1LHJbMV09ZipoK2cscls1XT1hKnUscls5XT1wKmgtZCxyWzJdPWQqaC1wLHJbNl09cyp1LHJbMTBdPWcqaCtmfXJldHVybiByWzNdPTAscls3XT0wLHJbMTFdPTAsclsxMl09MCxyWzEzXT0wLHJbMTRdPTAsclsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLmNvbXBvc2UobmZyLHQsaWZyKX1sb29rQXQodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIGtsLnN1YlZlY3RvcnModCxyKSxrbC5sZW5ndGhTcSgpPT09MCYmKGtsLno9MSksa2wubm9ybWFsaXplKCksazAuY3Jvc3NWZWN0b3JzKG4sa2wpLGswLmxlbmd0aFNxKCk9PT0wJiYoTWF0aC5hYnMobi56KT09PTE/a2wueCs9MWUtNDprbC56Kz0xZS00LGtsLm5vcm1hbGl6ZSgpLGswLmNyb3NzVmVjdG9ycyhuLGtsKSksazAubm9ybWFsaXplKCksZ1YuY3Jvc3NWZWN0b3JzKGtsLGswKSxpWzBdPWswLngsaVs0XT1nVi54LGlbOF09a2wueCxpWzFdPWswLnksaVs1XT1nVi55LGlbOV09a2wueSxpWzJdPWswLnosaVs2XT1nVi56LGlbMTBdPWtsLnosdGhpc31tdWx0aXBseSh0LHIpe3JldHVybiByIT09dm9pZCAwPyhjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseSgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLm11bHRpcGx5TWF0cmljZXMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMubXVsdGlwbHlNYXRyaWNlcyh0LHIpKTp0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LHIpe2xldCBuPXQuZWxlbWVudHMsaT1yLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxhPW5bMF0scz1uWzRdLGw9bls4XSxjPW5bMTJdLHU9blsxXSxoPW5bNV0sZj1uWzldLHA9blsxM10sZD1uWzJdLGc9bls2XSxfPW5bMTBdLHk9blsxNF0seD1uWzNdLGI9bls3XSxTPW5bMTFdLEM9blsxNV0sUD1pWzBdLGs9aVs0XSxPPWlbOF0sRD1pWzEyXSxCPWlbMV0sST1pWzVdLEw9aVs5XSxSPWlbMTNdLEY9aVsyXSx6PWlbNl0sVT1pWzEwXSxXPWlbMTRdLFo9aVszXSxydD1pWzddLG90PWlbMTFdLHN0PWlbMTVdO3JldHVybiBvWzBdPWEqUCtzKkIrbCpGK2MqWixvWzRdPWEqaytzKkkrbCp6K2MqcnQsb1s4XT1hKk8rcypMK2wqVStjKm90LG9bMTJdPWEqRCtzKlIrbCpXK2Mqc3Qsb1sxXT11KlAraCpCK2YqRitwKlosb1s1XT11KmsraCpJK2YqeitwKnJ0LG9bOV09dSpPK2gqTCtmKlUrcCpvdCxvWzEzXT11KkQraCpSK2YqVytwKnN0LG9bMl09ZCpQK2cqQitfKkYreSpaLG9bNl09ZCprK2cqSStfKnoreSpydCxvWzEwXT1kKk8rZypMK18qVSt5Km90LG9bMTRdPWQqRCtnKlIrXypXK3kqc3Qsb1szXT14KlArYipCK1MqRitDKlosb1s3XT14KmsrYipJK1MqeitDKnJ0LG9bMTFdPXgqTytiKkwrUypVK0Mqb3Qsb1sxNV09eCpEK2IqUitTKlcrQypzdCx0aGlzfW11bHRpcGx5U2NhbGFyKHQpe2xldCByPXRoaXMuZWxlbWVudHM7cmV0dXJuIHJbMF0qPXQscls0XSo9dCxyWzhdKj10LHJbMTJdKj10LHJbMV0qPXQscls1XSo9dCxyWzldKj10LHJbMTNdKj10LHJbMl0qPXQscls2XSo9dCxyWzEwXSo9dCxyWzE0XSo9dCxyWzNdKj10LHJbN10qPXQsclsxMV0qPXQsclsxNV0qPXQsdGhpc31kZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuZWxlbWVudHMscj10WzBdLG49dFs0XSxpPXRbOF0sbz10WzEyXSxhPXRbMV0scz10WzVdLGw9dFs5XSxjPXRbMTNdLHU9dFsyXSxoPXRbNl0sZj10WzEwXSxwPXRbMTRdLGQ9dFszXSxnPXRbN10sXz10WzExXSx5PXRbMTVdO3JldHVybiBkKigrbypsKmgtaSpjKmgtbypzKmYrbipjKmYraSpzKnAtbipsKnApK2cqKCtyKmwqcC1yKmMqZitvKmEqZi1pKmEqcCtpKmMqdS1vKmwqdSkrXyooK3IqYypoLXIqcypwLW8qYSpoK24qYSpwK28qcyp1LW4qYyp1KSt5KigtaSpzKnUtcipsKmgrcipzKmYraSphKmgtbiphKmYrbipsKnUpfXRyYW5zcG9zZSgpe2xldCB0PXRoaXMuZWxlbWVudHMscjtyZXR1cm4gcj10WzFdLHRbMV09dFs0XSx0WzRdPXIscj10WzJdLHRbMl09dFs4XSx0WzhdPXIscj10WzZdLHRbNl09dFs5XSx0WzldPXIscj10WzNdLHRbM109dFsxMl0sdFsxMl09cixyPXRbN10sdFs3XT10WzEzXSx0WzEzXT1yLHI9dFsxMV0sdFsxMV09dFsxNF0sdFsxNF09cix0aGlzfXNldFBvc2l0aW9uKHQscixuKXtsZXQgaT10aGlzLmVsZW1lbnRzO3JldHVybiB0LmlzVmVjdG9yMz8oaVsxMl09dC54LGlbMTNdPXQueSxpWzE0XT10LnopOihpWzEyXT10LGlbMTNdPXIsaVsxNF09biksdGhpc31pbnZlcnQoKXtsZXQgdD10aGlzLmVsZW1lbnRzLHI9dFswXSxuPXRbMV0saT10WzJdLG89dFszXSxhPXRbNF0scz10WzVdLGw9dFs2XSxjPXRbN10sdT10WzhdLGg9dFs5XSxmPXRbMTBdLHA9dFsxMV0sZD10WzEyXSxnPXRbMTNdLF89dFsxNF0seT10WzE1XSx4PWgqXypjLWcqZipjK2cqbCpwLXMqXypwLWgqbCp5K3MqZip5LGI9ZCpmKmMtdSpfKmMtZCpsKnArYSpfKnArdSpsKnktYSpmKnksUz11KmcqYy1kKmgqYytkKnMqcC1hKmcqcC11KnMqeSthKmgqeSxDPWQqaCpsLXUqZypsLWQqcypmK2EqZypmK3UqcypfLWEqaCpfLFA9cip4K24qYitpKlMrbypDO2lmKFA9PT0wKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwKTtsZXQgaz0xL1A7cmV0dXJuIHRbMF09eCprLHRbMV09KGcqZipvLWgqXypvLWcqaSpwK24qXypwK2gqaSp5LW4qZip5KSprLHRbMl09KHMqXypvLWcqbCpvK2cqaSpjLW4qXypjLXMqaSp5K24qbCp5KSprLHRbM109KGgqbCpvLXMqZipvLWgqaSpjK24qZipjK3MqaSpwLW4qbCpwKSprLHRbNF09YiprLHRbNV09KHUqXypvLWQqZipvK2QqaSpwLXIqXypwLXUqaSp5K3IqZip5KSprLHRbNl09KGQqbCpvLWEqXypvLWQqaSpjK3IqXypjK2EqaSp5LXIqbCp5KSprLHRbN109KGEqZipvLXUqbCpvK3UqaSpjLXIqZipjLWEqaSpwK3IqbCpwKSprLHRbOF09UyprLHRbOV09KGQqaCpvLXUqZypvLWQqbipwK3IqZypwK3Uqbip5LXIqaCp5KSprLHRbMTBdPShhKmcqby1kKnMqbytkKm4qYy1yKmcqYy1hKm4qeStyKnMqeSkqayx0WzExXT0odSpzKm8tYSpoKm8tdSpuKmMrcipoKmMrYSpuKnAtcipzKnApKmssdFsxMl09QyprLHRbMTNdPSh1KmcqaS1kKmgqaStkKm4qZi1yKmcqZi11Km4qXytyKmgqXykqayx0WzE0XT0oZCpzKmktYSpnKmktZCpuKmwrcipnKmwrYSpuKl8tcipzKl8pKmssdFsxNV09KGEqaCppLXUqcyppK3UqbipsLXIqaCpsLWEqbipmK3IqcypmKSprLHRoaXN9c2NhbGUodCl7bGV0IHI9dGhpcy5lbGVtZW50cyxuPXQueCxpPXQueSxvPXQuejtyZXR1cm4gclswXSo9bixyWzRdKj1pLHJbOF0qPW8sclsxXSo9bixyWzVdKj1pLHJbOV0qPW8sclsyXSo9bixyWzZdKj1pLHJbMTBdKj1vLHJbM10qPW4scls3XSo9aSxyWzExXSo9byx0aGlzfWdldE1heFNjYWxlT25BeGlzKCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxyPXRbMF0qdFswXSt0WzFdKnRbMV0rdFsyXSp0WzJdLG49dFs0XSp0WzRdK3RbNV0qdFs1XSt0WzZdKnRbNl0saT10WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdO3JldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgocixuLGkpKX1tYWtlVHJhbnNsYXRpb24odCxyLG4pe3JldHVybiB0aGlzLnNldCgxLDAsMCx0LDAsMSwwLHIsMCwwLDEsbiwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblgodCl7bGV0IHI9TWF0aC5jb3ModCksbj1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCwwLHIsLW4sMCwwLG4sciwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWSh0KXtsZXQgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChyLDAsbiwwLDAsMSwwLDAsLW4sMCxyLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25aKHQpe2xldCByPU1hdGguY29zKHQpLG49TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KHIsLW4sMCwwLG4sciwwLDAsMCwwLDEsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvbkF4aXModCxyKXtsZXQgbj1NYXRoLmNvcyhyKSxpPU1hdGguc2luKHIpLG89MS1uLGE9dC54LHM9dC55LGw9dC56LGM9byphLHU9bypzO3JldHVybiB0aGlzLnNldChjKmErbixjKnMtaSpsLGMqbCtpKnMsMCxjKnMraSpsLHUqcytuLHUqbC1pKmEsMCxjKmwtaSpzLHUqbCtpKmEsbypsKmwrbiwwLDAsMCwwLDEpLHRoaXN9bWFrZVNjYWxlKHQscixuKXtyZXR1cm4gdGhpcy5zZXQodCwwLDAsMCwwLHIsMCwwLDAsMCxuLDAsMCwwLDAsMSksdGhpc31tYWtlU2hlYXIodCxyLG4saSxvLGEpe3JldHVybiB0aGlzLnNldCgxLG4sbywwLHQsMSxhLDAscixpLDEsMCwwLDAsMCwxKSx0aGlzfWNvbXBvc2UodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHMsbz1yLl94LGE9ci5feSxzPXIuX3osbD1yLl93LGM9bytvLHU9YSthLGg9cytzLGY9bypjLHA9byp1LGQ9bypoLGc9YSp1LF89YSpoLHk9cypoLHg9bCpjLGI9bCp1LFM9bCpoLEM9bi54LFA9bi55LGs9bi56O3JldHVybiBpWzBdPSgxLShnK3kpKSpDLGlbMV09KHArUykqQyxpWzJdPShkLWIpKkMsaVszXT0wLGlbNF09KHAtUykqUCxpWzVdPSgxLShmK3kpKSpQLGlbNl09KF8reCkqUCxpWzddPTAsaVs4XT0oZCtiKSprLGlbOV09KF8teCkqayxpWzEwXT0oMS0oZitnKSkqayxpWzExXT0wLGlbMTJdPXQueCxpWzEzXT10LnksaVsxNF09dC56LGlbMTVdPTEsdGhpc31kZWNvbXBvc2UodCxyLG4pe2xldCBpPXRoaXMuZWxlbWVudHMsbz1TMy5zZXQoaVswXSxpWzFdLGlbMl0pLmxlbmd0aCgpLGE9UzMuc2V0KGlbNF0saVs1XSxpWzZdKS5sZW5ndGgoKSxzPVMzLnNldChpWzhdLGlbOV0saVsxMF0pLmxlbmd0aCgpO3RoaXMuZGV0ZXJtaW5hbnQoKTwwJiYobz0tbyksdC54PWlbMTJdLHQueT1pWzEzXSx0Lno9aVsxNF0saWguY29weSh0aGlzKTtsZXQgYz0xL28sdT0xL2EsaD0xL3M7cmV0dXJuIGloLmVsZW1lbnRzWzBdKj1jLGloLmVsZW1lbnRzWzFdKj1jLGloLmVsZW1lbnRzWzJdKj1jLGloLmVsZW1lbnRzWzRdKj11LGloLmVsZW1lbnRzWzVdKj11LGloLmVsZW1lbnRzWzZdKj11LGloLmVsZW1lbnRzWzhdKj1oLGloLmVsZW1lbnRzWzldKj1oLGloLmVsZW1lbnRzWzEwXSo9aCxyLnNldEZyb21Sb3RhdGlvbk1hdHJpeChpaCksbi54PW8sbi55PWEsbi56PXMsdGhpc31tYWtlUGVyc3BlY3RpdmUodCxyLG4saSxvLGEpe2E9PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLiIpO2xldCBzPXRoaXMuZWxlbWVudHMsbD0yKm8vKHItdCksYz0yKm8vKG4taSksdT0ocit0KS8oci10KSxoPShuK2kpLyhuLWkpLGY9LShhK28pLyhhLW8pLHA9LTIqYSpvLyhhLW8pO3JldHVybiBzWzBdPWwsc1s0XT0wLHNbOF09dSxzWzEyXT0wLHNbMV09MCxzWzVdPWMsc1s5XT1oLHNbMTNdPTAsc1syXT0wLHNbNl09MCxzWzEwXT1mLHNbMTRdPXAsc1szXT0wLHNbN109MCxzWzExXT0tMSxzWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5lbGVtZW50cyxsPTEvKHItdCksYz0xLyhuLWkpLHU9MS8oYS1vKSxoPShyK3QpKmwsZj0obitpKSpjLHA9KGErbykqdTtyZXR1cm4gc1swXT0yKmwsc1s0XT0wLHNbOF09MCxzWzEyXT0taCxzWzFdPTAsc1s1XT0yKmMsc1s5XT0wLHNbMTNdPS1mLHNbMl09MCxzWzZdPTAsc1sxMF09LTIqdSxzWzE0XT0tcCxzWzNdPTAsc1s3XT0wLHNbMTFdPTAsc1sxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgcj10aGlzLmVsZW1lbnRzLG49dC5lbGVtZW50cztmb3IobGV0IGk9MDtpPDE2O2krKylpZihyW2ldIT09bltpXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxyPTApe2ZvcihsZXQgbj0wO248MTY7bisrKXRoaXMuZWxlbWVudHNbbl09dFtuK3JdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbcl09blswXSx0W3IrMV09blsxXSx0W3IrMl09blsyXSx0W3IrM109blszXSx0W3IrNF09bls0XSx0W3IrNV09bls1XSx0W3IrNl09bls2XSx0W3IrN109bls3XSx0W3IrOF09bls4XSx0W3IrOV09bls5XSx0W3IrMTBdPW5bMTBdLHRbcisxMV09blsxMV0sdFtyKzEyXT1uWzEyXSx0W3IrMTNdPW5bMTNdLHRbcisxNF09blsxNF0sdFtyKzE1XT1uWzE1XSx0fX07TWUucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgUzM9bmV3IGosaWg9bmV3IE1lLG5mcj1uZXcgaigwLDAsMCksaWZyPW5ldyBqKDEsMSwxKSxrMD1uZXcgaixnVj1uZXcgaixrbD1uZXcgaixtdWU9bmV3IE1lLGd1ZT1uZXcgdmksdG09Y2xhc3N7Y29uc3RydWN0b3IodD0wLHI9MCxuPTAsaT10bS5EZWZhdWx0T3JkZXIpe3RoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX29yZGVyPWl9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IG9yZGVyKCl7cmV0dXJuIHRoaXMuX29yZGVyfXNldCBvcmRlcih0KXt0aGlzLl9vcmRlcj10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxyLG4saT10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PXIsdGhpcy5fej1uLHRoaXMuX29yZGVyPWksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LHI9dGhpcy5fb3JkZXIsbj0hMCl7bGV0IGk9dC5lbGVtZW50cyxvPWlbMF0sYT1pWzRdLHM9aVs4XSxsPWlbMV0sYz1pWzVdLHU9aVs5XSxoPWlbMl0sZj1pWzZdLHA9aVsxMF07c3dpdGNoKHIpe2Nhc2UiWFlaIjp0aGlzLl95PU1hdGguYXNpbihabyhzLC0xLDEpKSxNYXRoLmFicyhzKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LHApLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihmLGMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC1abyh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKHMscCksdGhpcy5fej1NYXRoLmF0YW4yKGwsYykpOih0aGlzLl95PU1hdGguYXRhbjIoLWgsbyksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oWm8oZiwtMSwxKSksTWF0aC5hYnMoZik8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMigtaCxwKSx0aGlzLl96PU1hdGguYXRhbjIoLWEsYykpOih0aGlzLl95PTAsdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl95PU1hdGguYXNpbigtWm8oaCwtMSwxKSksTWF0aC5hYnMoaCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihmLHApLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtYSxjKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKFpvKGwsLTEsMSkpLE1hdGguYWJzKGwpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsYyksdGhpcy5feT1NYXRoLmF0YW4yKC1oLG8pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihzLHApKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLVpvKGEsLTEsMSkpLE1hdGguYWJzKGEpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoZixjKSx0aGlzLl95PU1hdGguYXRhbjIocyxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxwKSx0aGlzLl95PTApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrcil9cmV0dXJuIHRoaXMuX29yZGVyPXIsbj09PSEwJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUXVhdGVybmlvbih0LHIsbil7cmV0dXJuIG11ZS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeChtdWUscixuKX1zZXRGcm9tVmVjdG9yMyh0LHI9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixyKX1yZW9yZGVyKHQpe3JldHVybiBndWUuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oZ3VlLHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHRbM10hPT12b2lkIDAmJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10scj0wKXtyZXR1cm4gdFtyXT10aGlzLl94LHRbcisxXT10aGlzLl95LHRbcisyXT10aGlzLl96LHRbciszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IGoodGhpcy5feCx0aGlzLl95LHRoaXMuX3opfV9vbkNoYW5nZSh0KXtyZXR1cm4gdGhpcy5fb25DaGFuZ2VDYWxsYmFjaz10LHRoaXN9X29uQ2hhbmdlQ2FsbGJhY2soKXt9fTt0bS5wcm90b3R5cGUuaXNFdWxlcj0hMDt0bS5EZWZhdWx0T3JkZXI9IlhZWiI7dG0uUm90YXRpb25PcmRlcnM9WyJYWVoiLCJZWlgiLCJaWFkiLCJYWlkiLCJZWFoiLCJaWVgiXTt2YXIgWDM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hc2s9MX1zZXQodCl7dGhpcy5tYXNrPSgxPDx0fDApPj4+MH1lbmFibGUodCl7dGhpcy5tYXNrfD0xPDx0fDB9ZW5hYmxlQWxsKCl7dGhpcy5tYXNrPS0xfXRvZ2dsZSh0KXt0aGlzLm1hc2tePTE8PHR8MH1kaXNhYmxlKHQpe3RoaXMubWFzayY9figxPDx0fDApfWRpc2FibGVBbGwoKXt0aGlzLm1hc2s9MH10ZXN0KHQpe3JldHVybih0aGlzLm1hc2smdC5tYXNrKSE9PTB9aXNFbmFibGVkKHQpe3JldHVybih0aGlzLm1hc2smKDE8PHR8MCkpIT09MH19LG9mcj0wLF91ZT1uZXcgaixNMz1uZXcgdmkscWQ9bmV3IE1lLF9WPW5ldyBqLExQPW5ldyBqLGFmcj1uZXcgaixzZnI9bmV3IHZpLHl1ZT1uZXcgaigxLDAsMCksdnVlPW5ldyBqKDAsMSwwKSx4dWU9bmV3IGooMCwwLDEpLGxmcj17dHlwZToiYWRkZWQifSxidWU9e3R5cGU6InJlbW92ZWQifSxvcj1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpvZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9Ik9iamVjdDNEIix0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49W10sdGhpcy51cD1vci5EZWZhdWx0VXAuY2xvbmUoKTtsZXQgdD1uZXcgaixyPW5ldyB0bSxuPW5ldyB2aSxpPW5ldyBqKDEsMSwxKTtmdW5jdGlvbiBvKCl7bi5zZXRGcm9tRXVsZXIociwhMSl9ZnVuY3Rpb24gYSgpe3Iuc2V0RnJvbVF1YXRlcm5pb24obix2b2lkIDAsITEpfXIuX29uQ2hhbmdlKG8pLG4uX29uQ2hhbmdlKGEpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse3Bvc2l0aW9uOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTp0fSxyb3RhdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0scXVhdGVybmlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6bn0sc2NhbGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LG1vZGVsVmlld01hdHJpeDp7dmFsdWU6bmV3IE1lfSxub3JtYWxNYXRyaXg6e3ZhbHVlOm5ldyBraX19KSx0aGlzLm1hdHJpeD1uZXcgTWUsdGhpcy5tYXRyaXhXb3JsZD1uZXcgTWUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPW9yLkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMSx0aGlzLmxheWVycz1uZXcgWDMsdGhpcy52aXNpYmxlPSEwLHRoaXMuY2FzdFNoYWRvdz0hMSx0aGlzLnJlY2VpdmVTaGFkb3c9ITEsdGhpcy5mcnVzdHVtQ3VsbGVkPSEwLHRoaXMucmVuZGVyT3JkZXI9MCx0aGlzLmFuaW1hdGlvbnM9W10sdGhpcy51c2VyRGF0YT17fX1vbkJlZm9yZVJlbmRlcigpe31vbkFmdGVyUmVuZGVyKCl7fWFwcGx5TWF0cml4NCh0KXt0aGlzLm1hdHJpeEF1dG9VcGRhdGUmJnRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5tYXRyaXgucHJlbXVsdGlwbHkodCksdGhpcy5tYXRyaXguZGVjb21wb3NlKHRoaXMucG9zaXRpb24sdGhpcy5xdWF0ZXJuaW9uLHRoaXMuc2NhbGUpfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gdGhpcy5xdWF0ZXJuaW9uLnByZW11bHRpcGx5KHQpLHRoaXN9c2V0Um90YXRpb25Gcm9tQXhpc0FuZ2xlKHQscil7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodCxyKX1zZXRSb3RhdGlvbkZyb21FdWxlcih0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKHQsITApfXNldFJvdGF0aW9uRnJvbU1hdHJpeCh0KXt0aGlzLnF1YXRlcm5pb24uc2V0RnJvbVJvdGF0aW9uTWF0cml4KHQpfXNldFJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7dGhpcy5xdWF0ZXJuaW9uLmNvcHkodCl9cm90YXRlT25BeGlzKHQscil7cmV0dXJuIE0zLnNldEZyb21BeGlzQW5nbGUodCxyKSx0aGlzLnF1YXRlcm5pb24ubXVsdGlwbHkoTTMpLHRoaXN9cm90YXRlT25Xb3JsZEF4aXModCxyKXtyZXR1cm4gTTMuc2V0RnJvbUF4aXNBbmdsZSh0LHIpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShNMyksdGhpc31yb3RhdGVYKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyh5dWUsdCl9cm90YXRlWSh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXModnVlLHQpfXJvdGF0ZVoodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKHh1ZSx0KX10cmFuc2xhdGVPbkF4aXModCxyKXtyZXR1cm4gX3VlLmNvcHkodCkuYXBwbHlRdWF0ZXJuaW9uKHRoaXMucXVhdGVybmlvbiksdGhpcy5wb3NpdGlvbi5hZGQoX3VlLm11bHRpcGx5U2NhbGFyKHIpKSx0aGlzfXRyYW5zbGF0ZVgodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKHl1ZSx0KX10cmFuc2xhdGVZKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyh2dWUsdCl9dHJhbnNsYXRlWih0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoeHVlLHQpfWxvY2FsVG9Xb3JsZCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCl9d29ybGRUb0xvY2FsKHQpe3JldHVybiB0LmFwcGx5TWF0cml4NChxZC5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpKX1sb29rQXQodCxyLG4pe3QuaXNWZWN0b3IzP19WLmNvcHkodCk6X1Yuc2V0KHQscixuKTtsZXQgaT10aGlzLnBhcmVudDt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSxMUC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCksdGhpcy5pc0NhbWVyYXx8dGhpcy5pc0xpZ2h0P3FkLmxvb2tBdChMUCxfVix0aGlzLnVwKTpxZC5sb29rQXQoX1YsTFAsdGhpcy51cCksdGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChxZCksaSYmKHFkLmV4dHJhY3RSb3RhdGlvbihpLm1hdHJpeFdvcmxkKSxNMy5zZXRGcm9tUm90YXRpb25NYXRyaXgocWQpLHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseShNMy5pbnZlcnQoKSkpfWFkZCh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgcj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdGhpcy5hZGQoYXJndW1lbnRzW3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gdD09PXRoaXM/KGNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IGNhbid0IGJlIGFkZGVkIGFzIGEgY2hpbGQgb2YgaXRzZWxmLiIsdCksdGhpcyk6KHQmJnQuaXNPYmplY3QzRD8odC5wYXJlbnQhPT1udWxsJiZ0LnBhcmVudC5yZW1vdmUodCksdC5wYXJlbnQ9dGhpcyx0aGlzLmNoaWxkcmVuLnB1c2godCksdC5kaXNwYXRjaEV2ZW50KGxmcikpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNELmFkZDogb2JqZWN0IG5vdCBhbiBpbnN0YW5jZSBvZiBUSFJFRS5PYmplY3QzRC4iLHQpLHRoaXMpfXJlbW92ZSh0KXtpZihhcmd1bWVudHMubGVuZ3RoPjEpe2ZvcihsZXQgbj0wO248YXJndW1lbnRzLmxlbmd0aDtuKyspdGhpcy5yZW1vdmUoYXJndW1lbnRzW25dKTtyZXR1cm4gdGhpc31sZXQgcj10aGlzLmNoaWxkcmVuLmluZGV4T2YodCk7cmV0dXJuIHIhPT0tMSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UociwxKSx0LmRpc3BhdGNoRXZlbnQoYnVlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIHQhPT1udWxsJiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCByPXRoaXMuY2hpbGRyZW5bdF07ci5wYXJlbnQ9bnVsbCxyLmRpc3BhdGNoRXZlbnQoYnVlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSkscWQuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSx0LnBhcmVudCE9PW51bGwmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSkscWQubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChxZCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LHIpe2lmKHRoaXNbdF09PT1yKXJldHVybiB0aGlzO2ZvcihsZXQgbj0wLGk9dGhpcy5jaGlsZHJlbi5sZW5ndGg7bjxpO24rKyl7bGV0IGE9dGhpcy5jaGlsZHJlbltuXS5nZXRPYmplY3RCeVByb3BlcnR5KHQscik7aWYoYSE9PXZvaWQgMClyZXR1cm4gYX19Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShMUCx0LGFmciksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShMUCxzZnIsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgcj10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChyWzhdLHJbOV0sclsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZih0aGlzLnZpc2libGU9PT0hMSlyZXR1cm47dCh0aGlzKTtsZXQgcj10aGlzLmNoaWxkcmVuO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKylyW25dLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgcj10aGlzLnBhcmVudDtyIT09bnVsbCYmKHQociksci50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYodGhpcy5wYXJlbnQ9PT1udWxsP3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG49MCxpPXIubGVuZ3RoO248aTtuKyspcltuXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LHIpe2xldCBuPXRoaXMucGFyZW50O2lmKHQ9PT0hMCYmbiE9PW51bGwmJm4udXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnBhcmVudD09PW51bGw/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLHI9PT0hMCl7bGV0IGk9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspaVtvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyIsbj17fTtyJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0sbi5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgaT17fTtpLnV1aWQ9dGhpcy51dWlkLGkudHlwZT10aGlzLnR5cGUsdGhpcy5uYW1lIT09IiImJihpLm5hbWU9dGhpcy5uYW1lKSx0aGlzLmNhc3RTaGFkb3c9PT0hMCYmKGkuY2FzdFNoYWRvdz0hMCksdGhpcy5yZWNlaXZlU2hhZG93PT09ITAmJihpLnJlY2VpdmVTaGFkb3c9ITApLHRoaXMudmlzaWJsZT09PSExJiYoaS52aXNpYmxlPSExKSx0aGlzLmZydXN0dW1DdWxsZWQ9PT0hMSYmKGkuZnJ1c3R1bUN1bGxlZD0hMSksdGhpcy5yZW5kZXJPcmRlciE9PTAmJihpLnJlbmRlck9yZGVyPXRoaXMucmVuZGVyT3JkZXIpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksaS5sYXllcnM9dGhpcy5sYXllcnMubWFzayxpLm1hdHJpeD10aGlzLm1hdHJpeC50b0FycmF5KCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPT09ITEmJihpLm1hdHJpeEF1dG9VcGRhdGU9ITEpLHRoaXMuaXNJbnN0YW5jZWRNZXNoJiYoaS50eXBlPSJJbnN0YW5jZWRNZXNoIixpLmNvdW50PXRoaXMuY291bnQsaS5pbnN0YW5jZU1hdHJpeD10aGlzLmluc3RhbmNlTWF0cml4LnRvSlNPTigpLHRoaXMuaW5zdGFuY2VDb2xvciE9PW51bGwmJihpLmluc3RhbmNlQ29sb3I9dGhpcy5pbnN0YW5jZUNvbG9yLnRvSlNPTigpKSk7ZnVuY3Rpb24gbyhzLGwpe3JldHVybiBzW2wudXVpZF09PT12b2lkIDAmJihzW2wudXVpZF09bC50b0pTT04odCkpLGwudXVpZH1pZih0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/aS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoaS5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoaS5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7aS5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgcz10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYocyE9PXZvaWQgMCYmcy5zaGFwZXMhPT12b2lkIDApe2xldCBsPXMuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKXtsZXQgaD1sW2NdO28odC5zaGFwZXMsaCl9ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihpLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsaS5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdGhpcy5za2VsZXRvbiE9PXZvaWQgMCYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksaS5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx0aGlzLm1hdGVyaWFsIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBzPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylzLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7aS5tYXRlcmlhbD1zfWVsc2UgaS5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe2kuY2hpbGRyZW49W107Zm9yKGxldCBzPTA7czx0aGlzLmNoaWxkcmVuLmxlbmd0aDtzKyspaS5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bc10udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtpLmFuaW1hdGlvbnM9W107Zm9yKGxldCBzPTA7czx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO3MrKyl7bGV0IGw9dGhpcy5hbmltYXRpb25zW3NdO2kuYW5pbWF0aW9ucy5wdXNoKG8odC5hbmltYXRpb25zLGwpKX19aWYocil7bGV0IHM9YSh0Lmdlb21ldHJpZXMpLGw9YSh0Lm1hdGVyaWFscyksYz1hKHQudGV4dHVyZXMpLHU9YSh0LmltYWdlcyksaD1hKHQuc2hhcGVzKSxmPWEodC5za2VsZXRvbnMpLHA9YSh0LmFuaW1hdGlvbnMpO3MubGVuZ3RoPjAmJihuLmdlb21ldHJpZXM9cyksbC5sZW5ndGg+MCYmKG4ubWF0ZXJpYWxzPWwpLGMubGVuZ3RoPjAmJihuLnRleHR1cmVzPWMpLHUubGVuZ3RoPjAmJihuLmltYWdlcz11KSxoLmxlbmd0aD4wJiYobi5zaGFwZXM9aCksZi5sZW5ndGg+MCYmKG4uc2tlbGV0b25zPWYpLHAubGVuZ3RoPjAmJihuLmFuaW1hdGlvbnM9cCl9cmV0dXJuIG4ub2JqZWN0PWksbjtmdW5jdGlvbiBhKHMpe2xldCBsPVtdO2ZvcihsZXQgYyBpbiBzKXtsZXQgdT1zW2NdO2RlbGV0ZSB1Lm1ldGFkYXRhLGwucHVzaCh1KX1yZXR1cm4gbH19Y2xvbmUodCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzLHQpfWNvcHkodCxyPSEwKXtpZih0aGlzLm5hbWU9dC5uYW1lLHRoaXMudXAuY29weSh0LnVwKSx0aGlzLnBvc2l0aW9uLmNvcHkodC5wb3NpdGlvbiksdGhpcy5yb3RhdGlvbi5vcmRlcj10LnJvdGF0aW9uLm9yZGVyLHRoaXMucXVhdGVybmlvbi5jb3B5KHQucXVhdGVybmlvbiksdGhpcy5zY2FsZS5jb3B5KHQuc2NhbGUpLHRoaXMubWF0cml4LmNvcHkodC5tYXRyaXgpLHRoaXMubWF0cml4V29ybGQuY29weSh0Lm1hdHJpeFdvcmxkKSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXMubWF0cml4V29ybGROZWVkc1VwZGF0ZT10Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUsdGhpcy5sYXllcnMubWFzaz10LmxheWVycy5tYXNrLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyx0aGlzLnJlY2VpdmVTaGFkb3c9dC5yZWNlaXZlU2hhZG93LHRoaXMuZnJ1c3R1bUN1bGxlZD10LmZydXN0dW1DdWxsZWQsdGhpcy5yZW5kZXJPcmRlcj10LnJlbmRlck9yZGVyLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSkscj09PSEwKWZvcihsZXQgbj0wO248dC5jaGlsZHJlbi5sZW5ndGg7bisrKXtsZXQgaT10LmNoaWxkcmVuW25dO3RoaXMuYWRkKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXN9fTtvci5EZWZhdWx0VXA9bmV3IGooMCwxLDApO29yLkRlZmF1bHRNYXRyaXhBdXRvVXBkYXRlPSEwO29yLnByb3RvdHlwZS5pc09iamVjdDNEPSEwO3ZhciBvaD1uZXcgaixHZD1uZXcgaixldXQ9bmV3IGosV2Q9bmV3IGosRTM9bmV3IGosVDM9bmV3IGosd3VlPW5ldyBqLHJ1dD1uZXcgaixudXQ9bmV3IGosaXV0PW5ldyBqLGFpPWNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaixuPW5ldyBqKXt0aGlzLmE9dCx0aGlzLmI9cix0aGlzLmM9bn1zdGF0aWMgZ2V0Tm9ybWFsKHQscixuLGkpe2kuc3ViVmVjdG9ycyhuLHIpLG9oLnN1YlZlY3RvcnModCxyKSxpLmNyb3NzKG9oKTtsZXQgbz1pLmxlbmd0aFNxKCk7cmV0dXJuIG8+MD9pLm11bHRpcGx5U2NhbGFyKDEvTWF0aC5zcXJ0KG8pKTppLnNldCgwLDAsMCl9c3RhdGljIGdldEJhcnljb29yZCh0LHIsbixpLG8pe29oLnN1YlZlY3RvcnMoaSxyKSxHZC5zdWJWZWN0b3JzKG4sciksZXV0LnN1YlZlY3RvcnModCxyKTtsZXQgYT1vaC5kb3Qob2gpLHM9b2guZG90KEdkKSxsPW9oLmRvdChldXQpLGM9R2QuZG90KEdkKSx1PUdkLmRvdChldXQpLGg9YSpjLXMqcztpZihoPT09MClyZXR1cm4gby5zZXQoLTIsLTEsLTEpO2xldCBmPTEvaCxwPShjKmwtcyp1KSpmLGQ9KGEqdS1zKmwpKmY7cmV0dXJuIG8uc2V0KDEtcC1kLGQscCl9c3RhdGljIGNvbnRhaW5zUG9pbnQodCxyLG4saSl7cmV0dXJuIHRoaXMuZ2V0QmFyeWNvb3JkKHQscixuLGksV2QpLFdkLng+PTAmJldkLnk+PTAmJldkLngrV2QueTw9MX1zdGF0aWMgZ2V0VVYodCxyLG4saSxvLGEscyxsKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxyLG4saSxXZCksbC5zZXQoMCwwKSxsLmFkZFNjYWxlZFZlY3RvcihvLFdkLngpLGwuYWRkU2NhbGVkVmVjdG9yKGEsV2QueSksbC5hZGRTY2FsZWRWZWN0b3IocyxXZC56KSxsfXN0YXRpYyBpc0Zyb250RmFjaW5nKHQscixuLGkpe3JldHVybiBvaC5zdWJWZWN0b3JzKG4sciksR2Quc3ViVmVjdG9ycyh0LHIpLG9oLmNyb3NzKEdkKS5kb3QoaSk8MH1zZXQodCxyLG4pe3JldHVybiB0aGlzLmEuY29weSh0KSx0aGlzLmIuY29weShyKSx0aGlzLmMuY29weShuKSx0aGlzfXNldEZyb21Qb2ludHNBbmRJbmRpY2VzKHQscixuLGkpe3JldHVybiB0aGlzLmEuY29weSh0W3JdKSx0aGlzLmIuY29weSh0W25dKSx0aGlzLmMuY29weSh0W2ldKSx0aGlzfXNldEZyb21BdHRyaWJ1dGVBbmRJbmRpY2VzKHQscixuLGkpe3JldHVybiB0aGlzLmEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXMuYi5mcm9tQnVmZmVyQXR0cmlidXRlKHQsbiksdGhpcy5jLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmEuY29weSh0LmEpLHRoaXMuYi5jb3B5KHQuYiksdGhpcy5jLmNvcHkodC5jKSx0aGlzfWdldEFyZWEoKXtyZXR1cm4gb2guc3ViVmVjdG9ycyh0aGlzLmMsdGhpcy5iKSxHZC5zdWJWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLG9oLmNyb3NzKEdkKS5sZW5ndGgoKSouNX1nZXRNaWRwb2ludCh0KXtyZXR1cm4gdC5hZGRWZWN0b3JzKHRoaXMuYSx0aGlzLmIpLmFkZCh0aGlzLmMpLm11bHRpcGx5U2NhbGFyKDEvMyl9Z2V0Tm9ybWFsKHQpe3JldHVybiBhaS5nZXROb3JtYWwodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9Z2V0UGxhbmUodCl7cmV0dXJuIHQuc2V0RnJvbUNvcGxhbmFyUG9pbnRzKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1nZXRCYXJ5Y29vcmQodCxyKXtyZXR1cm4gYWkuZ2V0QmFyeWNvb3JkKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMscil9Z2V0VVYodCxyLG4saSxvKXtyZXR1cm4gYWkuZ2V0VVYodCx0aGlzLmEsdGhpcy5iLHRoaXMuYyxyLG4saSxvKX1jb250YWluc1BvaW50KHQpe3JldHVybiBhaS5jb250YWluc1BvaW50KHQsdGhpcy5hLHRoaXMuYix0aGlzLmMpfWlzRnJvbnRGYWNpbmcodCl7cmV0dXJuIGFpLmlzRnJvbnRGYWNpbmcodGhpcy5hLHRoaXMuYix0aGlzLmMsdCl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzVHJpYW5nbGUodGhpcyl9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LHIpe2xldCBuPXRoaXMuYSxpPXRoaXMuYixvPXRoaXMuYyxhLHM7RTMuc3ViVmVjdG9ycyhpLG4pLFQzLnN1YlZlY3RvcnMobyxuKSxydXQuc3ViVmVjdG9ycyh0LG4pO2xldCBsPUUzLmRvdChydXQpLGM9VDMuZG90KHJ1dCk7aWYobDw9MCYmYzw9MClyZXR1cm4gci5jb3B5KG4pO251dC5zdWJWZWN0b3JzKHQsaSk7bGV0IHU9RTMuZG90KG51dCksaD1UMy5kb3QobnV0KTtpZih1Pj0wJiZoPD11KXJldHVybiByLmNvcHkoaSk7bGV0IGY9bCpoLXUqYztpZihmPD0wJiZsPj0wJiZ1PD0wKXJldHVybiBhPWwvKGwtdSksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihFMyxhKTtpdXQuc3ViVmVjdG9ycyh0LG8pO2xldCBwPUUzLmRvdChpdXQpLGQ9VDMuZG90KGl1dCk7aWYoZD49MCYmcDw9ZClyZXR1cm4gci5jb3B5KG8pO2xldCBnPXAqYy1sKmQ7aWYoZzw9MCYmYz49MCYmZDw9MClyZXR1cm4gcz1jLyhjLWQpLHIuY29weShuKS5hZGRTY2FsZWRWZWN0b3IoVDMscyk7bGV0IF89dSpkLXAqaDtpZihfPD0wJiZoLXU+PTAmJnAtZD49MClyZXR1cm4gd3VlLnN1YlZlY3RvcnMobyxpKSxzPShoLXUpLyhoLXUrKHAtZCkpLHIuY29weShpKS5hZGRTY2FsZWRWZWN0b3Iod3VlLHMpO2xldCB5PTEvKF8rZytmKTtyZXR1cm4gYT1nKnkscz1mKnksci5jb3B5KG4pLmFkZFNjYWxlZFZlY3RvcihFMyxhKS5hZGRTY2FsZWRWZWN0b3IoVDMscyl9ZXF1YWxzKHQpe3JldHVybiB0LmEuZXF1YWxzKHRoaXMuYSkmJnQuYi5lcXVhbHModGhpcy5iKSYmdC5jLmVxdWFscyh0aGlzLmMpfX0sY2ZyPTAscWk9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImlkIix7dmFsdWU6Y2ZyKyt9KSx0aGlzLnV1aWQ9TmwoKSx0aGlzLm5hbWU9IiIsdGhpcy50eXBlPSJNYXRlcmlhbCIsdGhpcy5mb2c9ITAsdGhpcy5ibGVuZGluZz1WMyx0aGlzLnNpZGU9SXYsdGhpcy52ZXJ0ZXhDb2xvcnM9ITEsdGhpcy5vcGFjaXR5PTEsdGhpcy50cmFuc3BhcmVudD0hMSx0aGlzLmJsZW5kU3JjPUlodCx0aGlzLmJsZW5kRHN0PUxodCx0aGlzLmJsZW5kRXF1YXRpb249TXYsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz1uVSx0aGlzLmRlcHRoVGVzdD0hMCx0aGlzLmRlcHRoV3JpdGU9ITAsdGhpcy5zdGVuY2lsV3JpdGVNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGdW5jPUxmZSx0aGlzLnN0ZW5jaWxSZWY9MCx0aGlzLnN0ZW5jaWxGdW5jTWFzaz0yNTUsdGhpcy5zdGVuY2lsRmFpbD1yVSx0aGlzLnN0ZW5jaWxaRmFpbD1yVSx0aGlzLnN0ZW5jaWxaUGFzcz1yVSx0aGlzLnN0ZW5jaWxXcml0ZT0hMSx0aGlzLmNsaXBwaW5nUGxhbmVzPW51bGwsdGhpcy5jbGlwSW50ZXJzZWN0aW9uPSExLHRoaXMuY2xpcFNoYWRvd3M9ITEsdGhpcy5zaGFkb3dTaWRlPW51bGwsdGhpcy5jb2xvcldyaXRlPSEwLHRoaXMuYWxwaGFXcml0ZT0hMCx0aGlzLnByZWNpc2lvbj1udWxsLHRoaXMucG9seWdvbk9mZnNldD0hMSx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9MCx0aGlzLnBvbHlnb25PZmZzZXRVbml0cz0wLHRoaXMuZGl0aGVyaW5nPSExLHRoaXMuYWxwaGFUb0NvdmVyYWdlPSExLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPSExLHRoaXMudmlzaWJsZT0hMCx0aGlzLnRvbmVNYXBwZWQ9ITAsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLl9hbHBoYVRlc3Q9MH1nZXQgYWxwaGFUZXN0KCl7cmV0dXJuIHRoaXMuX2FscGhhVGVzdH1zZXQgYWxwaGFUZXN0KHQpe3RoaXMuX2FscGhhVGVzdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2FscGhhVGVzdD10fW9uQnVpbGQoKXt9b25CZWZvcmVSZW5kZXIoKXt9b25CZWZvcmVDb21waWxlKCl7fWN1c3RvbVByb2dyYW1DYWNoZUtleSgpe3JldHVybiB0aGlzLm9uQmVmb3JlQ29tcGlsZS50b1N0cmluZygpfXNldFZhbHVlcyh0KXtpZih0IT09dm9pZCAwKWZvcihsZXQgciBpbiB0KXtsZXQgbj10W3JdO2lmKG49PT12b2lkIDApe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6ICciK3IrIicgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1pZihyPT09InNoYWRpbmciKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPW49PT1QaHQ7Y29udGludWV9bGV0IGk9dGhpc1tyXTtpZihpPT09dm9pZCAwKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK3IrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKTtjb250aW51ZX1pJiZpLmlzQ29sb3I/aS5zZXQobik6aSYmaS5pc1ZlY3RvcjMmJm4mJm4uaXNWZWN0b3IzP2kuY29weShuKTp0aGlzW3JdPW59fXRvSlNPTih0KXtsZXQgcj10PT09dm9pZCAwfHx0eXBlb2YgdD09InN0cmluZyI7ciYmKHQ9e3RleHR1cmVzOnt9LGltYWdlczp7fX0pO2xldCBuPXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiTWF0ZXJpYWwiLGdlbmVyYXRvcjoiTWF0ZXJpYWwudG9KU09OIn19O24udXVpZD10aGlzLnV1aWQsbi50eXBlPXRoaXMudHlwZSx0aGlzLm5hbWUhPT0iIiYmKG4ubmFtZT10aGlzLm5hbWUpLHRoaXMuY29sb3ImJnRoaXMuY29sb3IuaXNDb2xvciYmKG4uY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSksdGhpcy5yb3VnaG5lc3MhPT12b2lkIDAmJihuLnJvdWdobmVzcz10aGlzLnJvdWdobmVzcyksdGhpcy5tZXRhbG5lc3MhPT12b2lkIDAmJihuLm1ldGFsbmVzcz10aGlzLm1ldGFsbmVzcyksdGhpcy5zaGVlbiE9PXZvaWQgMCYmKG4uc2hlZW49dGhpcy5zaGVlbiksdGhpcy5zaGVlbkNvbG9yJiZ0aGlzLnNoZWVuQ29sb3IuaXNDb2xvciYmKG4uc2hlZW5Db2xvcj10aGlzLnNoZWVuQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hlZW5Sb3VnaG5lc3MhPT12b2lkIDAmJihuLnNoZWVuUm91Z2huZXNzPXRoaXMuc2hlZW5Sb3VnaG5lc3MpLHRoaXMuZW1pc3NpdmUmJnRoaXMuZW1pc3NpdmUuaXNDb2xvciYmKG4uZW1pc3NpdmU9dGhpcy5lbWlzc2l2ZS5nZXRIZXgoKSksdGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmdGhpcy5lbWlzc2l2ZUludGVuc2l0eSE9PTEmJihuLmVtaXNzaXZlSW50ZW5zaXR5PXRoaXMuZW1pc3NpdmVJbnRlbnNpdHkpLHRoaXMuc3BlY3VsYXImJnRoaXMuc3BlY3VsYXIuaXNDb2xvciYmKG4uc3BlY3VsYXI9dGhpcy5zcGVjdWxhci5nZXRIZXgoKSksdGhpcy5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKG4uc3BlY3VsYXJJbnRlbnNpdHk9dGhpcy5zcGVjdWxhckludGVuc2l0eSksdGhpcy5zcGVjdWxhckNvbG9yJiZ0aGlzLnNwZWN1bGFyQ29sb3IuaXNDb2xvciYmKG4uc3BlY3VsYXJDb2xvcj10aGlzLnNwZWN1bGFyQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2hpbmluZXNzIT09dm9pZCAwJiYobi5zaGluaW5lc3M9dGhpcy5zaGluaW5lc3MpLHRoaXMuY2xlYXJjb2F0IT09dm9pZCAwJiYobi5jbGVhcmNvYXQ9dGhpcy5jbGVhcmNvYXQpLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzIT09dm9pZCAwJiYobi5jbGVhcmNvYXRSb3VnaG5lc3M9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MpLHRoaXMuY2xlYXJjb2F0TWFwJiZ0aGlzLmNsZWFyY29hdE1hcC5pc1RleHR1cmUmJihuLmNsZWFyY29hdE1hcD10aGlzLmNsZWFyY29hdE1hcC50b0pTT04odCkudXVpZCksdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLmlzVGV4dHVyZSYmKG4uY2xlYXJjb2F0Um91Z2huZXNzTWFwPXRoaXMuY2xlYXJjb2F0Um91Z2huZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcCYmdGhpcy5jbGVhcmNvYXROb3JtYWxNYXAuaXNUZXh0dXJlJiYobi5jbGVhcmNvYXROb3JtYWxNYXA9dGhpcy5jbGVhcmNvYXROb3JtYWxNYXAudG9KU09OKHQpLnV1aWQsbi5jbGVhcmNvYXROb3JtYWxTY2FsZT10aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5tYXAmJnRoaXMubWFwLmlzVGV4dHVyZSYmKG4ubWFwPXRoaXMubWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLm1hdGNhcCYmdGhpcy5tYXRjYXAuaXNUZXh0dXJlJiYobi5tYXRjYXA9dGhpcy5tYXRjYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYWxwaGFNYXAmJnRoaXMuYWxwaGFNYXAuaXNUZXh0dXJlJiYobi5hbHBoYU1hcD10aGlzLmFscGhhTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmxpZ2h0TWFwJiZ0aGlzLmxpZ2h0TWFwLmlzVGV4dHVyZSYmKG4ubGlnaHRNYXA9dGhpcy5saWdodE1hcC50b0pTT04odCkudXVpZCxuLmxpZ2h0TWFwSW50ZW5zaXR5PXRoaXMubGlnaHRNYXBJbnRlbnNpdHkpLHRoaXMuYW9NYXAmJnRoaXMuYW9NYXAuaXNUZXh0dXJlJiYobi5hb01hcD10aGlzLmFvTWFwLnRvSlNPTih0KS51dWlkLG4uYW9NYXBJbnRlbnNpdHk9dGhpcy5hb01hcEludGVuc2l0eSksdGhpcy5idW1wTWFwJiZ0aGlzLmJ1bXBNYXAuaXNUZXh0dXJlJiYobi5idW1wTWFwPXRoaXMuYnVtcE1hcC50b0pTT04odCkudXVpZCxuLmJ1bXBTY2FsZT10aGlzLmJ1bXBTY2FsZSksdGhpcy5ub3JtYWxNYXAmJnRoaXMubm9ybWFsTWFwLmlzVGV4dHVyZSYmKG4ubm9ybWFsTWFwPXRoaXMubm9ybWFsTWFwLnRvSlNPTih0KS51dWlkLG4ubm9ybWFsTWFwVHlwZT10aGlzLm5vcm1hbE1hcFR5cGUsbi5ub3JtYWxTY2FsZT10aGlzLm5vcm1hbFNjYWxlLnRvQXJyYXkoKSksdGhpcy5kaXNwbGFjZW1lbnRNYXAmJnRoaXMuZGlzcGxhY2VtZW50TWFwLmlzVGV4dHVyZSYmKG4uZGlzcGxhY2VtZW50TWFwPXRoaXMuZGlzcGxhY2VtZW50TWFwLnRvSlNPTih0KS51dWlkLG4uZGlzcGxhY2VtZW50U2NhbGU9dGhpcy5kaXNwbGFjZW1lbnRTY2FsZSxuLmRpc3BsYWNlbWVudEJpYXM9dGhpcy5kaXNwbGFjZW1lbnRCaWFzKSx0aGlzLnJvdWdobmVzc01hcCYmdGhpcy5yb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYobi5yb3VnaG5lc3NNYXA9dGhpcy5yb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWV0YWxuZXNzTWFwJiZ0aGlzLm1ldGFsbmVzc01hcC5pc1RleHR1cmUmJihuLm1ldGFsbmVzc01hcD10aGlzLm1ldGFsbmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5lbWlzc2l2ZU1hcCYmdGhpcy5lbWlzc2l2ZU1hcC5pc1RleHR1cmUmJihuLmVtaXNzaXZlTWFwPXRoaXMuZW1pc3NpdmVNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJNYXAmJnRoaXMuc3BlY3VsYXJNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhck1hcD10aGlzLnNwZWN1bGFyTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZ0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLmlzVGV4dHVyZSYmKG4uc3BlY3VsYXJJbnRlbnNpdHlNYXA9dGhpcy5zcGVjdWxhckludGVuc2l0eU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhckNvbG9yTWFwJiZ0aGlzLnNwZWN1bGFyQ29sb3JNYXAuaXNUZXh0dXJlJiYobi5zcGVjdWxhckNvbG9yTWFwPXRoaXMuc3BlY3VsYXJDb2xvck1hcC50b0pTT04odCkudXVpZCksdGhpcy5lbnZNYXAmJnRoaXMuZW52TWFwLmlzVGV4dHVyZSYmKG4uZW52TWFwPXRoaXMuZW52TWFwLnRvSlNPTih0KS51dWlkLHRoaXMuY29tYmluZSE9PXZvaWQgMCYmKG4uY29tYmluZT10aGlzLmNvbWJpbmUpKSx0aGlzLmVudk1hcEludGVuc2l0eSE9PXZvaWQgMCYmKG4uZW52TWFwSW50ZW5zaXR5PXRoaXMuZW52TWFwSW50ZW5zaXR5KSx0aGlzLnJlZmxlY3Rpdml0eSE9PXZvaWQgMCYmKG4ucmVmbGVjdGl2aXR5PXRoaXMucmVmbGVjdGl2aXR5KSx0aGlzLnJlZnJhY3Rpb25SYXRpbyE9PXZvaWQgMCYmKG4ucmVmcmFjdGlvblJhdGlvPXRoaXMucmVmcmFjdGlvblJhdGlvKSx0aGlzLmdyYWRpZW50TWFwJiZ0aGlzLmdyYWRpZW50TWFwLmlzVGV4dHVyZSYmKG4uZ3JhZGllbnRNYXA9dGhpcy5ncmFkaWVudE1hcC50b0pTT04odCkudXVpZCksdGhpcy50cmFuc21pc3Npb24hPT12b2lkIDAmJihuLnRyYW5zbWlzc2lvbj10aGlzLnRyYW5zbWlzc2lvbiksdGhpcy50cmFuc21pc3Npb25NYXAmJnRoaXMudHJhbnNtaXNzaW9uTWFwLmlzVGV4dHVyZSYmKG4udHJhbnNtaXNzaW9uTWFwPXRoaXMudHJhbnNtaXNzaW9uTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnRoaWNrbmVzcyE9PXZvaWQgMCYmKG4udGhpY2tuZXNzPXRoaXMudGhpY2tuZXNzKSx0aGlzLnRoaWNrbmVzc01hcCYmdGhpcy50aGlja25lc3NNYXAuaXNUZXh0dXJlJiYobi50aGlja25lc3NNYXA9dGhpcy50aGlja25lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSE9PXZvaWQgMCYmKG4uYXR0ZW51YXRpb25EaXN0YW5jZT10aGlzLmF0dGVudWF0aW9uRGlzdGFuY2UpLHRoaXMuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmKG4uYXR0ZW51YXRpb25Db2xvcj10aGlzLmF0dGVudWF0aW9uQ29sb3IuZ2V0SGV4KCkpLHRoaXMuc2l6ZSE9PXZvaWQgMCYmKG4uc2l6ZT10aGlzLnNpemUpLHRoaXMuc2hhZG93U2lkZSE9PW51bGwmJihuLnNoYWRvd1NpZGU9dGhpcy5zaGFkb3dTaWRlKSx0aGlzLnNpemVBdHRlbnVhdGlvbiE9PXZvaWQgMCYmKG4uc2l6ZUF0dGVudWF0aW9uPXRoaXMuc2l6ZUF0dGVudWF0aW9uKSx0aGlzLmJsZW5kaW5nIT09VjMmJihuLmJsZW5kaW5nPXRoaXMuYmxlbmRpbmcpLHRoaXMuc2lkZSE9PUl2JiYobi5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihuLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihuLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSx0aGlzLnRyYW5zcGFyZW50PT09ITAmJihuLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLG4uZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLG4uZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LG4uZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsbi5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxuLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLG4uc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLG4uc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssbi5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLG4uc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsbi5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssbi5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLG4uc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLG4uc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJnRoaXMucm90YXRpb24hPT0wJiYobi5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSx0aGlzLnBvbHlnb25PZmZzZXQ9PT0hMCYmKG4ucG9seWdvbk9mZnNldD0hMCksdGhpcy5wb2x5Z29uT2Zmc2V0RmFjdG9yIT09MCYmKG4ucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLHRoaXMucG9seWdvbk9mZnNldFVuaXRzIT09MCYmKG4ucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmdGhpcy5saW5ld2lkdGghPT0xJiYobi5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHRoaXMuZGFzaFNpemUhPT12b2lkIDAmJihuLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHRoaXMuZ2FwU2l6ZSE9PXZvaWQgMCYmKG4uZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHRoaXMuc2NhbGUhPT12b2lkIDAmJihuLnNjYWxlPXRoaXMuc2NhbGUpLHRoaXMuZGl0aGVyaW5nPT09ITAmJihuLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKG4uYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSx0aGlzLmFscGhhVG9Db3ZlcmFnZT09PSEwJiYobi5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPT09ITAmJihuLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksdGhpcy53aXJlZnJhbWU9PT0hMCYmKG4ud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYobi53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLHRoaXMud2lyZWZyYW1lTGluZWNhcCE9PSJyb3VuZCImJihuLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSx0aGlzLndpcmVmcmFtZUxpbmVqb2luIT09InJvdW5kIiYmKG4ud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksdGhpcy5mbGF0U2hhZGluZz09PSEwJiYobi5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSx0aGlzLnZpc2libGU9PT0hMSYmKG4udmlzaWJsZT0hMSksdGhpcy50b25lTWFwcGVkPT09ITEmJihuLnRvbmVNYXBwZWQ9ITEpLEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpIT09Int9IiYmKG4udXNlckRhdGE9dGhpcy51c2VyRGF0YSk7ZnVuY3Rpb24gaShvKXtsZXQgYT1bXTtmb3IobGV0IHMgaW4gbyl7bGV0IGw9b1tzXTtkZWxldGUgbC5tZXRhZGF0YSxhLnB1c2gobCl9cmV0dXJuIGF9aWYocil7bGV0IG89aSh0LnRleHR1cmVzKSxhPWkodC5pbWFnZXMpO28ubGVuZ3RoPjAmJihuLnRleHR1cmVzPW8pLGEubGVuZ3RoPjAmJihuLmltYWdlcz1hKX1yZXR1cm4gbn1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9Y29weSh0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZm9nPXQuZm9nLHRoaXMuYmxlbmRpbmc9dC5ibGVuZGluZyx0aGlzLnNpZGU9dC5zaWRlLHRoaXMudmVydGV4Q29sb3JzPXQudmVydGV4Q29sb3JzLHRoaXMub3BhY2l0eT10Lm9wYWNpdHksdGhpcy50cmFuc3BhcmVudD10LnRyYW5zcGFyZW50LHRoaXMuYmxlbmRTcmM9dC5ibGVuZFNyYyx0aGlzLmJsZW5kRHN0PXQuYmxlbmREc3QsdGhpcy5ibGVuZEVxdWF0aW9uPXQuYmxlbmRFcXVhdGlvbix0aGlzLmJsZW5kU3JjQWxwaGE9dC5ibGVuZFNyY0FscGhhLHRoaXMuYmxlbmREc3RBbHBoYT10LmJsZW5kRHN0QWxwaGEsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9dC5ibGVuZEVxdWF0aW9uQWxwaGEsdGhpcy5kZXB0aEZ1bmM9dC5kZXB0aEZ1bmMsdGhpcy5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QsdGhpcy5kZXB0aFdyaXRlPXQuZGVwdGhXcml0ZSx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9dC5zdGVuY2lsV3JpdGVNYXNrLHRoaXMuc3RlbmNpbEZ1bmM9dC5zdGVuY2lsRnVuYyx0aGlzLnN0ZW5jaWxSZWY9dC5zdGVuY2lsUmVmLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPXQuc3RlbmNpbEZ1bmNNYXNrLHRoaXMuc3RlbmNpbEZhaWw9dC5zdGVuY2lsRmFpbCx0aGlzLnN0ZW5jaWxaRmFpbD10LnN0ZW5jaWxaRmFpbCx0aGlzLnN0ZW5jaWxaUGFzcz10LnN0ZW5jaWxaUGFzcyx0aGlzLnN0ZW5jaWxXcml0ZT10LnN0ZW5jaWxXcml0ZTtsZXQgcj10LmNsaXBwaW5nUGxhbmVzLG49bnVsbDtpZihyIT09bnVsbCl7bGV0IGk9ci5sZW5ndGg7bj1uZXcgQXJyYXkoaSk7Zm9yKGxldCBvPTA7byE9PWk7KytvKW5bb109cltvXS5jbG9uZSgpfXJldHVybiB0aGlzLmNsaXBwaW5nUGxhbmVzPW4sdGhpcy5jbGlwSW50ZXJzZWN0aW9uPXQuY2xpcEludGVyc2VjdGlvbix0aGlzLmNsaXBTaGFkb3dzPXQuY2xpcFNoYWRvd3MsdGhpcy5zaGFkb3dTaWRlPXQuc2hhZG93U2lkZSx0aGlzLmNvbG9yV3JpdGU9dC5jb2xvcldyaXRlLHRoaXMuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUsdGhpcy5wcmVjaXNpb249dC5wcmVjaXNpb24sdGhpcy5wb2x5Z29uT2Zmc2V0PXQucG9seWdvbk9mZnNldCx0aGlzLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzLHRoaXMuZGl0aGVyaW5nPXQuZGl0aGVyaW5nLHRoaXMuYWxwaGFUZXN0PXQuYWxwaGFUZXN0LHRoaXMuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlLHRoaXMucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhLHRoaXMudmlzaWJsZT10LnZpc2libGUsdGhpcy50b25lTWFwcGVkPXQudG9uZU1hcHBlZCx0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLHRoaXN9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX1zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK319O3FpLnByb3RvdHlwZS5pc01hdGVyaWFsPSEwO3ZhciBzaD1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9RDYsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJNYXA9dC5zcGVjdWxhck1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5lbnZNYXA9dC5lbnZNYXAsdGhpcy5jb21iaW5lPXQuY29tYmluZSx0aGlzLnJlZmxlY3Rpdml0eT10LnJlZmxlY3Rpdml0eSx0aGlzLnJlZnJhY3Rpb25SYXRpbz10LnJlZnJhY3Rpb25SYXRpbyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07c2gucHJvdG90eXBlLmlzTWVzaEJhc2ljTWF0ZXJpYWw9ITA7dmFyIExuPW5ldyBqLHlWPW5ldyBMdCxKZT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7aWYoQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IGFycmF5IHNob3VsZCBiZSBhIFR5cGVkIEFycmF5LiIpO3RoaXMubmFtZT0iIix0aGlzLmFycmF5PXQsdGhpcy5pdGVtU2l6ZT1yLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9yOjAsdGhpcy5ub3JtYWxpemVkPW49PT0hMCx0aGlzLnVzYWdlPVczLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MH1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXJyYXk9bmV3IHQuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheSksdGhpcy5pdGVtU2l6ZT10Lml0ZW1TaXplLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLm5vcm1hbGl6ZWQ9dC5ub3JtYWxpemVkLHRoaXMudXNhZ2U9dC51c2FnZSx0aGlzfWNvcHlBdCh0LHIsbil7dCo9dGhpcy5pdGVtU2l6ZSxuKj1yLml0ZW1TaXplO2ZvcihsZXQgaT0wLG89dGhpcy5pdGVtU2l6ZTtpPG87aSsrKXRoaXMuYXJyYXlbdCtpXT1yLmFycmF5W24raV07cmV0dXJuIHRoaXN9Y29weUFycmF5KHQpe3JldHVybiB0aGlzLmFycmF5LnNldCh0KSx0aGlzfWNvcHlDb2xvcnNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlDb2xvcnNBcnJheSgpOiBjb2xvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IG5lKSxyW24rK109YS5yLHJbbisrXT1hLmcscltuKytdPWEuYn1yZXR1cm4gdGhpc31jb3B5VmVjdG9yMnNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Iyc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IEx0KSxyW24rK109YS54LHJbbisrXT1hLnl9cmV0dXJuIHRoaXN9Y29weVZlY3RvcjNzQXJyYXkodCl7bGV0IHI9dGhpcy5hcnJheSxuPTA7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtpPG87aSsrKXtsZXQgYT10W2ldO2E9PT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZS5jb3B5VmVjdG9yM3NBcnJheSgpOiB2ZWN0b3IgaXMgdW5kZWZpbmVkIixpKSxhPW5ldyBqKSxyW24rK109YS54LHJbbisrXT1hLnkscltuKytdPWEuen1yZXR1cm4gdGhpc31jb3B5VmVjdG9yNHNBcnJheSh0KXtsZXQgcj10aGlzLmFycmF5LG49MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2xldCBhPXRbaV07YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLGkpLGE9bmV3IGVuKSxyW24rK109YS54LHJbbisrXT1hLnkscltuKytdPWEueixyW24rK109YS53fXJldHVybiB0aGlzfWFwcGx5TWF0cml4Myh0KXtpZih0aGlzLml0ZW1TaXplPT09Milmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKyl5Vi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMscikseVYuYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkocix5Vi54LHlWLnkpO2Vsc2UgaWYodGhpcy5pdGVtU2l6ZT09PTMpZm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspTG4uZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLHIpLExuLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihyLExuLngsTG4ueSxMbi56KTtyZXR1cm4gdGhpc31hcHBseU1hdHJpeDQodCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspTG4ueD10aGlzLmdldFgociksTG4ueT10aGlzLmdldFkociksTG4uej10aGlzLmdldFoociksTG4uYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKHIsTG4ueCxMbi55LExuLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgcj0wLG49dGhpcy5jb3VudDtyPG47cisrKUxuLng9dGhpcy5nZXRYKHIpLExuLnk9dGhpcy5nZXRZKHIpLExuLno9dGhpcy5nZXRaKHIpLExuLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKHIsTG4ueCxMbi55LExuLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylMbi54PXRoaXMuZ2V0WChyKSxMbi55PXRoaXMuZ2V0WShyKSxMbi56PXRoaXMuZ2V0WihyKSxMbi50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVoocixMbi54LExuLnksTG4ueik7cmV0dXJuIHRoaXN9c2V0KHQscj0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxyKSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXX1zZXRYKHQscil7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1yLHRoaXN9Z2V0WSh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV19c2V0WSh0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXT1yLHRoaXN9Z2V0Wih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl19c2V0Wih0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXT1yLHRoaXN9Z2V0Vyh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM119c2V0Vyh0LHIpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1yLHRoaXN9c2V0WFkodCxyLG4pe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXN9c2V0WFlaKHQscixuLGkpe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXN9c2V0WFlaVyh0LHIsbixpLG8pe3JldHVybiB0Kj10aGlzLml0ZW1TaXplLHRoaXMuYXJyYXlbdCswXT1yLHRoaXMuYXJyYXlbdCsxXT1uLHRoaXMuYXJyYXlbdCsyXT1pLHRoaXMuYXJyYXlbdCszXT1vLHRoaXN9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXtpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfTtyZXR1cm4gdGhpcy5uYW1lIT09IiImJih0Lm5hbWU9dGhpcy5uYW1lKSx0aGlzLnVzYWdlIT09VzMmJih0LnVzYWdlPXRoaXMudXNhZ2UpLCh0aGlzLnVwZGF0ZVJhbmdlLm9mZnNldCE9PTB8fHRoaXMudXBkYXRlUmFuZ2UuY291bnQhPT0tMSkmJih0LnVwZGF0ZVJhbmdlPXRoaXMudXBkYXRlUmFuZ2UpLHR9fTtKZS5wcm90b3R5cGUuaXNCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGxVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQ4QXJyYXkodCkscixuKX19LGNVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50OEFycmF5KHQpLHIsbil9fSx1VT1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDhDbGFtcGVkQXJyYXkodCkscixuKX19LGhVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQxNkFycmF5KHQpLHIsbil9fSwkMz1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCkscixuKX19LGZVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBJbnQzMkFycmF5KHQpLHIsbil9fSxLMz1jbGFzcyBleHRlbmRzIEple2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCkscixuKX19LHBVPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKG5ldyBVaW50MTZBcnJheSh0KSxyLG4pfX07cFUucHJvdG90eXBlLmlzRmxvYXQxNkJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgeGU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEZsb2F0MzJBcnJheSh0KSxyLG4pfX0sZFU9Y2xhc3MgZXh0ZW5kcyBKZXtjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIobmV3IEZsb2F0NjRBcnJheSh0KSxyLG4pfX0sdWZyPTAsWGM9bmV3IE1lLG91dD1uZXcgb3IsQzM9bmV3IGosUmw9bmV3IHRhLGtQPW5ldyB0YSxMbz1uZXcgaixQZT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTp1ZnIrK30pLHRoaXMudXVpZD1ObCgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90aGlzLmluZGV4PW5ldyhOZmUodCk/SzM6JDMpKHQsMSk6dGhpcy5pbmRleD10LHRoaXN9Z2V0QXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF19c2V0QXR0cmlidXRlKHQscil7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1t0XT1yLHRoaXN9ZGVsZXRlQXR0cmlidXRlKHQpe3JldHVybiBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW3RdLHRoaXN9aGFzQXR0cmlidXRlKHQpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF0hPT12b2lkIDB9YWRkR3JvdXAodCxyLG49MCl7dGhpcy5ncm91cHMucHVzaCh7c3RhcnQ6dCxjb3VudDpyLG1hdGVyaWFsSW5kZXg6bn0pfWNsZWFyR3JvdXBzKCl7dGhpcy5ncm91cHM9W119c2V0RHJhd1JhbmdlKHQscil7dGhpcy5kcmF3UmFuZ2Uuc3RhcnQ9dCx0aGlzLmRyYXdSYW5nZS5jb3VudD1yfWFwcGx5TWF0cml4NCh0KXtsZXQgcj10aGlzLmF0dHJpYnV0ZXMucG9zaXRpb247ciE9PXZvaWQgMCYmKHIuYXBwbHlNYXRyaXg0KHQpLHIubmVlZHNVcGRhdGU9ITApO2xldCBuPXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7aWYobiE9PXZvaWQgMCl7bGV0IG89bmV3IGtpKCkuZ2V0Tm9ybWFsTWF0cml4KHQpO24uYXBwbHlOb3JtYWxNYXRyaXgobyksbi5uZWVkc1VwZGF0ZT0hMH1sZXQgaT10aGlzLmF0dHJpYnV0ZXMudGFuZ2VudDtyZXR1cm4gaSE9PXZvaWQgMCYmKGkudHJhbnNmb3JtRGlyZWN0aW9uKHQpLGkubmVlZHNVcGRhdGU9ITApLHRoaXMuYm91bmRpbmdCb3ghPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdTcGhlcmUhPT1udWxsJiZ0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31yb3RhdGVYKHQpe3JldHVybiBYYy5tYWtlUm90YXRpb25YKHQpLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXJvdGF0ZVkodCl7cmV0dXJuIFhjLm1ha2VSb3RhdGlvblkodCksdGhpcy5hcHBseU1hdHJpeDQoWGMpLHRoaXN9cm90YXRlWih0KXtyZXR1cm4gWGMubWFrZVJvdGF0aW9uWih0KSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc310cmFuc2xhdGUodCxyLG4pe3JldHVybiBYYy5tYWtlVHJhbnNsYXRpb24odCxyLG4pLHRoaXMuYXBwbHlNYXRyaXg0KFhjKSx0aGlzfXNjYWxlKHQscixuKXtyZXR1cm4gWGMubWFrZVNjYWxlKHQscixuKSx0aGlzLmFwcGx5TWF0cml4NChYYyksdGhpc31sb29rQXQodCl7cmV0dXJuIG91dC5sb29rQXQodCksb3V0LnVwZGF0ZU1hdHJpeCgpLHRoaXMuYXBwbHlNYXRyaXg0KG91dC5tYXRyaXgpLHRoaXN9Y2VudGVyKCl7cmV0dXJuIHRoaXMuY29tcHV0ZUJvdW5kaW5nQm94KCksdGhpcy5ib3VuZGluZ0JveC5nZXRDZW50ZXIoQzMpLm5lZ2F0ZSgpLHRoaXMudHJhbnNsYXRlKEMzLngsQzMueSxDMy56KSx0aGlzfXNldEZyb21Qb2ludHModCl7bGV0IHI9W107Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtsZXQgbz10W25dO3IucHVzaChvLngsby55LG8uenx8MCl9cmV0dXJuIHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHIsMykpLHRoaXN9Y29tcHV0ZUJvdW5kaW5nQm94KCl7dGhpcy5ib3VuZGluZ0JveD09PW51bGwmJih0aGlzLmJvdW5kaW5nQm94PW5ldyB0YSk7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgYm94LiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IGooLTEvMCwtMS8wLC0xLzApLG5ldyBqKDEvMCwxLzAsMS8wKSk7cmV0dXJufWlmKHQhPT12b2lkIDApe2lmKHRoaXMuYm91bmRpbmdCb3guc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxyKWZvcihsZXQgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7bGV0IG89cltuXTtSbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKG8pLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KExvLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5taW4sUmwubWluKSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoTG8pLExvLmFkZFZlY3RvcnModGhpcy5ib3VuZGluZ0JveC5tYXgsUmwubWF4KSx0aGlzLmJvdW5kaW5nQm94LmV4cGFuZEJ5UG9pbnQoTG8pKToodGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFJsLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KFJsLm1heCkpfX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7dGhpcy5ib3VuZGluZ1NwaGVyZT09PW51bGwmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyBaZik7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLHI9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXtjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdGhpcy5ib3VuZGluZ1NwaGVyZS5zZXQobmV3IGosMS8wKTtyZXR1cm59aWYodCl7bGV0IG49dGhpcy5ib3VuZGluZ1NwaGVyZS5jZW50ZXI7aWYoUmwuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZSh0KSxyKWZvcihsZXQgbz0wLGE9ci5sZW5ndGg7bzxhO28rKyl7bGV0IHM9cltvXTtrUC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHMpLHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU/KExvLmFkZFZlY3RvcnMoUmwubWluLGtQLm1pbiksUmwuZXhwYW5kQnlQb2ludChMbyksTG8uYWRkVmVjdG9ycyhSbC5tYXgsa1AubWF4KSxSbC5leHBhbmRCeVBvaW50KExvKSk6KFJsLmV4cGFuZEJ5UG9pbnQoa1AubWluKSxSbC5leHBhbmRCeVBvaW50KGtQLm1heCkpfVJsLmdldENlbnRlcihuKTtsZXQgaT0wO2ZvcihsZXQgbz0wLGE9dC5jb3VudDtvPGE7bysrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxvKSxpPU1hdGgubWF4KGksbi5kaXN0YW5jZVRvU3F1YXJlZChMbykpO2lmKHIpZm9yKGxldCBvPTAsYT1yLmxlbmd0aDtvPGE7bysrKXtsZXQgcz1yW29dLGw9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZTtmb3IobGV0IGM9MCx1PXMuY291bnQ7Yzx1O2MrKylMby5mcm9tQnVmZmVyQXR0cmlidXRlKHMsYyksbCYmKEMzLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxjKSxMby5hZGQoQzMpKSxpPU1hdGgubWF4KGksbi5kaXN0YW5jZVRvU3F1YXJlZChMbykpfXRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzPU1hdGguc3FydChpKSxpc05hTih0aGlzLmJvdW5kaW5nU3BoZXJlLnJhZGl1cykmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLkJ1ZmZlckdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpOiBDb21wdXRlZCByYWRpdXMgaXMgTmFOLiBUaGUgInBvc2l0aW9uIiBhdHRyaWJ1dGUgaXMgbGlrZWx5IHRvIGhhdmUgTmFOIHZhbHVlcy4nLHRoaXMpfX1jb21wdXRlVGFuZ2VudHMoKXtsZXQgdD10aGlzLmluZGV4LHI9dGhpcy5hdHRyaWJ1dGVzO2lmKHQ9PT1udWxsfHxyLnBvc2l0aW9uPT09dm9pZCAwfHxyLm5vcm1hbD09PXZvaWQgMHx8ci51dj09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5jb21wdXRlVGFuZ2VudHMoKSBmYWlsZWQuIE1pc3NpbmcgcmVxdWlyZWQgYXR0cmlidXRlcyAoaW5kZXgsIHBvc2l0aW9uLCBub3JtYWwgb3IgdXYpIik7cmV0dXJufWxldCBuPXQuYXJyYXksaT1yLnBvc2l0aW9uLmFycmF5LG89ci5ub3JtYWwuYXJyYXksYT1yLnV2LmFycmF5LHM9aS5sZW5ndGgvMztyLnRhbmdlbnQ9PT12b2lkIDAmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgSmUobmV3IEZsb2F0MzJBcnJheSg0KnMpLDQpKTtsZXQgbD1yLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgQj0wO0I8cztCKyspY1tCXT1uZXcgaix1W0JdPW5ldyBqO2xldCBoPW5ldyBqLGY9bmV3IGoscD1uZXcgaixkPW5ldyBMdCxnPW5ldyBMdCxfPW5ldyBMdCx5PW5ldyBqLHg9bmV3IGo7ZnVuY3Rpb24gYihCLEksTCl7aC5mcm9tQXJyYXkoaSxCKjMpLGYuZnJvbUFycmF5KGksSSozKSxwLmZyb21BcnJheShpLEwqMyksZC5mcm9tQXJyYXkoYSxCKjIpLGcuZnJvbUFycmF5KGEsSSoyKSxfLmZyb21BcnJheShhLEwqMiksZi5zdWIoaCkscC5zdWIoaCksZy5zdWIoZCksXy5zdWIoZCk7bGV0IFI9MS8oZy54Kl8ueS1fLngqZy55KTshaXNGaW5pdGUoUil8fCh5LmNvcHkoZikubXVsdGlwbHlTY2FsYXIoXy55KS5hZGRTY2FsZWRWZWN0b3IocCwtZy55KS5tdWx0aXBseVNjYWxhcihSKSx4LmNvcHkocCkubXVsdGlwbHlTY2FsYXIoZy54KS5hZGRTY2FsZWRWZWN0b3IoZiwtXy54KS5tdWx0aXBseVNjYWxhcihSKSxjW0JdLmFkZCh5KSxjW0ldLmFkZCh5KSxjW0xdLmFkZCh5KSx1W0JdLmFkZCh4KSx1W0ldLmFkZCh4KSx1W0xdLmFkZCh4KSl9bGV0IFM9dGhpcy5ncm91cHM7Uy5sZW5ndGg9PT0wJiYoUz1be3N0YXJ0OjAsY291bnQ6bi5sZW5ndGh9XSk7Zm9yKGxldCBCPTAsST1TLmxlbmd0aDtCPEk7KytCKXtsZXQgTD1TW0JdLFI9TC5zdGFydCxGPUwuY291bnQ7Zm9yKGxldCB6PVIsVT1SK0Y7ejxVO3orPTMpYihuW3orMF0sblt6KzFdLG5beisyXSl9bGV0IEM9bmV3IGosUD1uZXcgaixrPW5ldyBqLE89bmV3IGo7ZnVuY3Rpb24gRChCKXtrLmZyb21BcnJheShvLEIqMyksTy5jb3B5KGspO2xldCBJPWNbQl07Qy5jb3B5KEkpLEMuc3ViKGsubXVsdGlwbHlTY2FsYXIoay5kb3QoSSkpKS5ub3JtYWxpemUoKSxQLmNyb3NzVmVjdG9ycyhPLEkpO2xldCBSPVAuZG90KHVbQl0pPDA/LTE6MTtsW0IqNF09Qy54LGxbQio0KzFdPUMueSxsW0IqNCsyXT1DLnosbFtCKjQrM109Un1mb3IobGV0IEI9MCxJPVMubGVuZ3RoO0I8STsrK0Ipe2xldCBMPVNbQl0sUj1MLnN0YXJ0LEY9TC5jb3VudDtmb3IobGV0IHo9UixVPVIrRjt6PFU7eis9MylEKG5beiswXSksRChuW3orMV0pLEQoblt6KzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LHI9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYociE9PXZvaWQgMCl7bGV0IG49dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKG49PT12b2lkIDApbj1uZXcgSmUobmV3IEZsb2F0MzJBcnJheShyLmNvdW50KjMpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG4pO2Vsc2UgZm9yKGxldCBmPTAscD1uLmNvdW50O2Y8cDtmKyspbi5zZXRYWVooZiwwLDAsMCk7bGV0IGk9bmV3IGosbz1uZXcgaixhPW5ldyBqLHM9bmV3IGosbD1uZXcgaixjPW5ldyBqLHU9bmV3IGosaD1uZXcgajtpZih0KWZvcihsZXQgZj0wLHA9dC5jb3VudDtmPHA7Zis9Myl7bGV0IGQ9dC5nZXRYKGYrMCksZz10LmdldFgoZisxKSxfPXQuZ2V0WChmKzIpO2kuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGQpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGcpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLF8pLHUuc3ViVmVjdG9ycyhhLG8pLGguc3ViVmVjdG9ycyhpLG8pLHUuY3Jvc3MoaCkscy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZCksbC5mcm9tQnVmZmVyQXR0cmlidXRlKG4sZyksYy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sXykscy5hZGQodSksbC5hZGQodSksYy5hZGQodSksbi5zZXRYWVooZCxzLngscy55LHMueiksbi5zZXRYWVooZyxsLngsbC55LGwueiksbi5zZXRYWVooXyxjLngsYy55LGMueil9ZWxzZSBmb3IobGV0IGY9MCxwPXIuY291bnQ7ZjxwO2YrPTMpaS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsZiswKSxvLmZyb21CdWZmZXJBdHRyaWJ1dGUocixmKzEpLGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGYrMiksdS5zdWJWZWN0b3JzKGEsbyksaC5zdWJWZWN0b3JzKGksbyksdS5jcm9zcyhoKSxuLnNldFhZWihmKzAsdS54LHUueSx1LnopLG4uc2V0WFlaKGYrMSx1LngsdS55LHUueiksbi5zZXRYWVooZisyLHUueCx1LnksdS56KTt0aGlzLm5vcm1hbGl6ZU5vcm1hbHMoKSxuLm5lZWRzVXBkYXRlPSEwfX1tZXJnZSh0LHIpe2lmKCEodCYmdC5pc0J1ZmZlckdlb21ldHJ5KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7cmV0dXJufXI9PT12b2lkIDAmJihyPTAsY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5tZXJnZSgpOiBPdmVyd3JpdGluZyBvcmlnaW5hbCBnZW9tZXRyeSwgc3RhcnRpbmcgYXQgb2Zmc2V0PTAuIFVzZSBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcygpIGZvciBsb3NzbGVzcyBtZXJnZS4iKSk7bGV0IG49dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgaSBpbiBuKXtpZih0LmF0dHJpYnV0ZXNbaV09PT12b2lkIDApY29udGludWU7bGV0IGE9bltpXS5hcnJheSxzPXQuYXR0cmlidXRlc1tpXSxsPXMuYXJyYXksYz1zLml0ZW1TaXplKnIsdT1NYXRoLm1pbihsLmxlbmd0aCxhLmxlbmd0aC1jKTtmb3IobGV0IGg9MCxmPWM7aDx1O2grKyxmKyspYVtmXT1sW2hdfXJldHVybiB0aGlzfW5vcm1hbGl6ZU5vcm1hbHMoKXtsZXQgdD10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2ZvcihsZXQgcj0wLG49dC5jb3VudDtyPG47cisrKUxvLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxyKSxMby5ub3JtYWxpemUoKSx0LnNldFhZWihyLExvLngsTG8ueSxMby56KX10b05vbkluZGV4ZWQoKXtmdW5jdGlvbiB0KHMsbCl7bGV0IGM9cy5hcnJheSx1PXMuaXRlbVNpemUsaD1zLm5vcm1hbGl6ZWQsZj1uZXcgYy5jb25zdHJ1Y3RvcihsLmxlbmd0aCp1KSxwPTAsZD0wO2ZvcihsZXQgZz0wLF89bC5sZW5ndGg7ZzxfO2crKyl7cy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3A9bFtnXSpzLmRhdGEuc3RyaWRlK3Mub2Zmc2V0OnA9bFtnXSp1O2ZvcihsZXQgeT0wO3k8dTt5KyspZltkKytdPWNbcCsrXX1yZXR1cm4gbmV3IEplKGYsdSxoKX1pZih0aGlzLmluZGV4PT09bnVsbClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2xldCByPW5ldyBQZSxuPXRoaXMuaW5kZXguYXJyYXksaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBzIGluIGkpe2xldCBsPWlbc10sYz10KGwsbik7ci5zZXRBdHRyaWJ1dGUocyxjKX1sZXQgbz10aGlzLm1vcnBoQXR0cmlidXRlcztmb3IobGV0IHMgaW4gbyl7bGV0IGw9W10sYz1vW3NdO2ZvcihsZXQgdT0wLGg9Yy5sZW5ndGg7dTxoO3UrKyl7bGV0IGY9Y1t1XSxwPXQoZixuKTtsLnB1c2gocCl9ci5tb3JwaEF0dHJpYnV0ZXNbc109bH1yLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IGE9dGhpcy5ncm91cHM7Zm9yKGxldCBzPTAsbD1hLmxlbmd0aDtzPGw7cysrKXtsZXQgYz1hW3NdO3IuYWRkR3JvdXAoYy5zdGFydCxjLmNvdW50LGMubWF0ZXJpYWxJbmRleCl9cmV0dXJuIHJ9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJCdWZmZXJHZW9tZXRyeSIsZ2VuZXJhdG9yOiJCdWZmZXJHZW9tZXRyeS50b0pTT04ifX07aWYodC51dWlkPXRoaXMudXVpZCx0LnR5cGU9dGhpcy50eXBlLHRoaXMubmFtZSE9PSIiJiYodC5uYW1lPXRoaXMubmFtZSksT2JqZWN0LmtleXModGhpcy51c2VyRGF0YSkubGVuZ3RoPjAmJih0LnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLHRoaXMucGFyYW1ldGVycyE9PXZvaWQgMCl7bGV0IGw9dGhpcy5wYXJhbWV0ZXJzO2ZvcihsZXQgYyBpbiBsKWxbY10hPT12b2lkIDAmJih0W2NdPWxbY10pO3JldHVybiB0fXQuZGF0YT17YXR0cmlidXRlczp7fX07bGV0IHI9dGhpcy5pbmRleDtyIT09bnVsbCYmKHQuZGF0YS5pbmRleD17dHlwZTpyLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsYXJyYXk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoci5hcnJheSl9KTtsZXQgbj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBsIGluIG4pe2xldCBjPW5bbF07dC5kYXRhLmF0dHJpYnV0ZXNbbF09Yy50b0pTT04odC5kYXRhKX1sZXQgaT17fSxvPSExO2ZvcihsZXQgbCBpbiB0aGlzLm1vcnBoQXR0cmlidXRlcyl7bGV0IGM9dGhpcy5tb3JwaEF0dHJpYnV0ZXNbbF0sdT1bXTtmb3IobGV0IGg9MCxmPWMubGVuZ3RoO2g8ZjtoKyspe2xldCBwPWNbaF07dS5wdXNoKHAudG9KU09OKHQuZGF0YSkpfXUubGVuZ3RoPjAmJihpW2xdPXUsbz0hMCl9byYmKHQuZGF0YS5tb3JwaEF0dHJpYnV0ZXM9aSx0LmRhdGEubW9ycGhUYXJnZXRzUmVsYXRpdmU9dGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZSk7bGV0IGE9dGhpcy5ncm91cHM7YS5sZW5ndGg+MCYmKHQuZGF0YS5ncm91cHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShhKSkpO2xldCBzPXRoaXMuYm91bmRpbmdTcGhlcmU7cmV0dXJuIHMhPT1udWxsJiYodC5kYXRhLmJvdW5kaW5nU3BoZXJlPXtjZW50ZXI6cy5jZW50ZXIudG9BcnJheSgpLHJhZGl1czpzLnJhZGl1c30pLHR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2xldCByPXt9O3RoaXMubmFtZT10Lm5hbWU7bGV0IG49dC5pbmRleDtuIT09bnVsbCYmdGhpcy5zZXRJbmRleChuLmNsb25lKHIpKTtsZXQgaT10LmF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIGkpe2xldCB1PWlbY107dGhpcy5zZXRBdHRyaWJ1dGUoYyx1LmNsb25lKHIpKX1sZXQgbz10Lm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGMgaW4gbyl7bGV0IHU9W10saD1vW2NdO2ZvcihsZXQgZj0wLHA9aC5sZW5ndGg7ZjxwO2YrKyl1LnB1c2goaFtmXS5jbG9uZShyKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109dX10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXQubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IGE9dC5ncm91cHM7Zm9yKGxldCBjPTAsdT1hLmxlbmd0aDtjPHU7YysrKXtsZXQgaD1hW2NdO3RoaXMuYWRkR3JvdXAoaC5zdGFydCxoLmNvdW50LGgubWF0ZXJpYWxJbmRleCl9bGV0IHM9dC5ib3VuZGluZ0JveDtzIT09bnVsbCYmKHRoaXMuYm91bmRpbmdCb3g9cy5jbG9uZSgpKTtsZXQgbD10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBsIT09bnVsbCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bC5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdC5wYXJhbWV0ZXJzIT09dm9pZCAwJiYodGhpcy5wYXJhbWV0ZXJzPU9iamVjdC5hc3NpZ24oe30sdC5wYXJhbWV0ZXJzKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07UGUucHJvdG90eXBlLmlzQnVmZmVyR2VvbWV0cnk9ITA7dmFyIFN1ZT1uZXcgTWUsQTM9bmV3IEpmLGF1dD1uZXcgWmYsUjA9bmV3IGosTjA9bmV3IGosRDA9bmV3IGosc3V0PW5ldyBqLGx1dD1uZXcgaixjdXQ9bmV3IGosdlY9bmV3IGoseFY9bmV3IGosYlY9bmV3IGosd1Y9bmV3IEx0LFNWPW5ldyBMdCxNVj1uZXcgTHQsdXV0PW5ldyBqLEVWPW5ldyBqLGVpPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodD1uZXcgUGUscj1uZXcgc2gpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyE9PXZvaWQgMCYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpLHQubW9ycGhUYXJnZXREaWN0aW9uYXJ5IT09dm9pZCAwJiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc311cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1yYXljYXN0KHQscil7bGV0IG49dGhpcy5nZW9tZXRyeSxpPXRoaXMubWF0ZXJpYWwsbz10aGlzLm1hdHJpeFdvcmxkO2lmKGk9PT12b2lkIDB8fChuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxhdXQuY29weShuLmJvdW5kaW5nU3BoZXJlKSxhdXQuYXBwbHlNYXRyaXg0KG8pLHQucmF5LmludGVyc2VjdHNTcGhlcmUoYXV0KT09PSExKXx8KFN1ZS5jb3B5KG8pLmludmVydCgpLEEzLmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChTdWUpLG4uYm91bmRpbmdCb3ghPT1udWxsJiZBMy5pbnRlcnNlY3RzQm94KG4uYm91bmRpbmdCb3gpPT09ITEpKXJldHVybjtsZXQgYTtpZihuLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBzPW4uaW5kZXgsbD1uLmF0dHJpYnV0ZXMucG9zaXRpb24sYz1uLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbix1PW4ubW9ycGhUYXJnZXRzUmVsYXRpdmUsaD1uLmF0dHJpYnV0ZXMudXYsZj1uLmF0dHJpYnV0ZXMudXYyLHA9bi5ncm91cHMsZD1uLmRyYXdSYW5nZTtpZihzIT09bnVsbClpZihBcnJheS5pc0FycmF5KGkpKWZvcihsZXQgZz0wLF89cC5sZW5ndGg7ZzxfO2crKyl7bGV0IHk9cFtnXSx4PWlbeS5tYXRlcmlhbEluZGV4XSxiPU1hdGgubWF4KHkuc3RhcnQsZC5zdGFydCksUz1NYXRoLm1pbihzLmNvdW50LE1hdGgubWluKHkuc3RhcnQreS5jb3VudCxkLnN0YXJ0K2QuY291bnQpKTtmb3IobGV0IEM9YixQPVM7QzxQO0MrPTMpe2xldCBrPXMuZ2V0WChDKSxPPXMuZ2V0WChDKzEpLEQ9cy5nZXRYKEMrMik7YT1UVih0aGlzLHgsdCxBMyxsLGMsdSxoLGYsayxPLEQpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKEMvMyksYS5mYWNlLm1hdGVyaWFsSW5kZXg9eS5tYXRlcmlhbEluZGV4LHIucHVzaChhKSl9fWVsc2V7bGV0IGc9TWF0aC5tYXgoMCxkLnN0YXJ0KSxfPU1hdGgubWluKHMuY291bnQsZC5zdGFydCtkLmNvdW50KTtmb3IobGV0IHk9Zyx4PV87eTx4O3krPTMpe2xldCBiPXMuZ2V0WCh5KSxTPXMuZ2V0WCh5KzEpLEM9cy5nZXRYKHkrMik7YT1UVih0aGlzLGksdCxBMyxsLGMsdSxoLGYsYixTLEMpLGEmJihhLmZhY2VJbmRleD1NYXRoLmZsb29yKHkvMyksci5wdXNoKGEpKX19ZWxzZSBpZihsIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBnPTAsXz1wLmxlbmd0aDtnPF87ZysrKXtsZXQgeT1wW2ddLHg9aVt5Lm1hdGVyaWFsSW5kZXhdLGI9TWF0aC5tYXgoeS5zdGFydCxkLnN0YXJ0KSxTPU1hdGgubWluKGwuY291bnQsTWF0aC5taW4oeS5zdGFydCt5LmNvdW50LGQuc3RhcnQrZC5jb3VudCkpO2ZvcihsZXQgQz1iLFA9UztDPFA7Qys9Myl7bGV0IGs9QyxPPUMrMSxEPUMrMjthPVRWKHRoaXMseCx0LEEzLGwsYyx1LGgsZixrLE8sRCksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoQy8zKSxhLmZhY2UubWF0ZXJpYWxJbmRleD15Lm1hdGVyaWFsSW5kZXgsci5wdXNoKGEpKX19ZWxzZXtsZXQgZz1NYXRoLm1heCgwLGQuc3RhcnQpLF89TWF0aC5taW4obC5jb3VudCxkLnN0YXJ0K2QuY291bnQpO2ZvcihsZXQgeT1nLHg9Xzt5PHg7eSs9Myl7bGV0IGI9eSxTPXkrMSxDPXkrMjthPVRWKHRoaXMsaSx0LEEzLGwsYyx1LGgsZixiLFMsQyksYSYmKGEuZmFjZUluZGV4PU1hdGguZmxvb3IoeS8zKSxyLnB1c2goYSkpfX19ZWxzZSBuLmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2gucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fTtlaS5wcm90b3R5cGUuaXNNZXNoPSEwO2Z1bmN0aW9uIGhmcihlLHQscixuLGksbyxhLHMpe2xldCBsO2lmKHQuc2lkZT09PUlpP2w9bi5pbnRlcnNlY3RUcmlhbmdsZShhLG8saSwhMCxzKTpsPW4uaW50ZXJzZWN0VHJpYW5nbGUoaSxvLGEsdC5zaWRlIT09THYscyksbD09PW51bGwpcmV0dXJuIG51bGw7RVYuY29weShzKSxFVi5hcHBseU1hdHJpeDQoZS5tYXRyaXhXb3JsZCk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8oRVYpO3JldHVybiBjPHIubmVhcnx8Yz5yLmZhcj9udWxsOntkaXN0YW5jZTpjLHBvaW50OkVWLmNsb25lKCksb2JqZWN0OmV9fWZ1bmN0aW9uIFRWKGUsdCxyLG4saSxvLGEscyxsLGMsdSxoKXtSMC5mcm9tQnVmZmVyQXR0cmlidXRlKGksYyksTjAuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLHUpLEQwLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxoKTtsZXQgZj1lLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZmKXt2Vi5zZXQoMCwwLDApLHhWLnNldCgwLDAsMCksYlYuc2V0KDAsMCwwKTtmb3IobGV0IGQ9MCxnPW8ubGVuZ3RoO2Q8ZztkKyspe2xldCBfPWZbZF0seT1vW2RdO18hPT0wJiYoc3V0LmZyb21CdWZmZXJBdHRyaWJ1dGUoeSxjKSxsdXQuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh5LHUpLGN1dC5mcm9tQnVmZmVyQXR0cmlidXRlKHksaCksYT8odlYuYWRkU2NhbGVkVmVjdG9yKHN1dCxfKSx4Vi5hZGRTY2FsZWRWZWN0b3IobHV0LF8pLGJWLmFkZFNjYWxlZFZlY3RvcihjdXQsXykpOih2Vi5hZGRTY2FsZWRWZWN0b3Ioc3V0LnN1YihSMCksXykseFYuYWRkU2NhbGVkVmVjdG9yKGx1dC5zdWIoTjApLF8pLGJWLmFkZFNjYWxlZFZlY3RvcihjdXQuc3ViKEQwKSxfKSkpfVIwLmFkZCh2ViksTjAuYWRkKHhWKSxEMC5hZGQoYlYpfWUuaXNTa2lubmVkTWVzaCYmKGUuYm9uZVRyYW5zZm9ybShjLFIwKSxlLmJvbmVUcmFuc2Zvcm0odSxOMCksZS5ib25lVHJhbnNmb3JtKGgsRDApKTtsZXQgcD1oZnIoZSx0LHIsbixSMCxOMCxEMCx1dXQpO2lmKHApe3MmJih3Vi5mcm9tQnVmZmVyQXR0cmlidXRlKHMsYyksU1YuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLHUpLE1WLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxoKSxwLnV2PWFpLmdldFVWKHV1dCxSMCxOMCxEMCx3VixTVixNVixuZXcgTHQpKSxsJiYod1YuZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLGMpLFNWLmZyb21CdWZmZXJBdHRyaWJ1dGUobCx1KSxNVi5mcm9tQnVmZmVyQXR0cmlidXRlKGwsaCkscC51djI9YWkuZ2V0VVYodXV0LFIwLE4wLEQwLHdWLFNWLE1WLG5ldyBMdCkpO2xldCBkPXthOmMsYjp1LGM6aCxub3JtYWw6bmV3IGosbWF0ZXJpYWxJbmRleDowfTthaS5nZXROb3JtYWwoUjAsTjAsRDAsZC5ub3JtYWwpLHAuZmFjZT1kfXJldHVybiBwfXZhciBRZj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9MSxvPTEsYT0xKXtzdXBlcigpLHRoaXMudHlwZT0iQm94R2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6cixkZXB0aDpuLHdpZHRoU2VnbWVudHM6aSxoZWlnaHRTZWdtZW50czpvLGRlcHRoU2VnbWVudHM6YX07bGV0IHM9dGhpcztpPU1hdGguZmxvb3IoaSksbz1NYXRoLmZsb29yKG8pLGE9TWF0aC5mbG9vcihhKTtsZXQgbD1bXSxjPVtdLHU9W10saD1bXSxmPTAscD0wO2QoInoiLCJ5IiwieCIsLTEsLTEsbixyLHQsYSxvLDApLGQoInoiLCJ5IiwieCIsMSwtMSxuLHIsLXQsYSxvLDEpLGQoIngiLCJ6IiwieSIsMSwxLHQsbixyLGksYSwyKSxkKCJ4IiwieiIsInkiLDEsLTEsdCxuLC1yLGksYSwzKSxkKCJ4IiwieSIsInoiLDEsLTEsdCxyLG4saSxvLDQpLGQoIngiLCJ5IiwieiIsLTEsLTEsdCxyLC1uLGksbyw1KSx0aGlzLnNldEluZGV4KGwpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZSh1LDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShoLDIpKTtmdW5jdGlvbiBkKGcsXyx5LHgsYixTLEMsUCxrLE8sRCl7bGV0IEI9Uy9rLEk9Qy9PLEw9Uy8yLFI9Qy8yLEY9UC8yLHo9aysxLFU9TysxLFc9MCxaPTAscnQ9bmV3IGo7Zm9yKGxldCBvdD0wO290PFU7b3QrKyl7bGV0IHN0PW90KkktUjtmb3IobGV0IFN0PTA7U3Q8ejtTdCsrKXtsZXQgYnQ9U3QqQi1MO3J0W2ddPWJ0KngscnRbX109c3QqYixydFt5XT1GLGMucHVzaChydC54LHJ0LnkscnQueikscnRbZ109MCxydFtfXT0wLHJ0W3ldPVA+MD8xOi0xLHUucHVzaChydC54LHJ0LnkscnQueiksaC5wdXNoKFN0L2spLGgucHVzaCgxLW90L08pLFcrPTF9fWZvcihsZXQgb3Q9MDtvdDxPO290KyspZm9yKGxldCBzdD0wO3N0PGs7c3QrKyl7bGV0IFN0PWYrc3QreipvdCxidD1mK3N0K3oqKG90KzEpLE10PWYrKHN0KzEpK3oqKG90KzEpLGx0PWYrKHN0KzEpK3oqb3Q7bC5wdXNoKFN0LGJ0LGx0KSxsLnB1c2goYnQsTXQsbHQpLForPTZ9cy5hZGRHcm91cChwLFosRCkscCs9WixmKz1XfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBRZih0LndpZHRoLHQuaGVpZ2h0LHQuZGVwdGgsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMsdC5kZXB0aFNlZ21lbnRzKX19O2Z1bmN0aW9uIFozKGUpe2xldCB0PXt9O2ZvcihsZXQgciBpbiBlKXt0W3JdPXt9O2ZvcihsZXQgbiBpbiBlW3JdKXtsZXQgaT1lW3JdW25dO2kmJihpLmlzQ29sb3J8fGkuaXNNYXRyaXgzfHxpLmlzTWF0cml4NHx8aS5pc1ZlY3RvcjJ8fGkuaXNWZWN0b3IzfHxpLmlzVmVjdG9yNHx8aS5pc1RleHR1cmV8fGkuaXNRdWF0ZXJuaW9uKT90W3JdW25dPWkuY2xvbmUoKTpBcnJheS5pc0FycmF5KGkpP3Rbcl1bbl09aS5zbGljZSgpOnRbcl1bbl09aX19cmV0dXJuIHR9ZnVuY3Rpb24gVGEoZSl7bGV0IHQ9e307Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBuPVozKGVbcl0pO2ZvcihsZXQgaSBpbiBuKXRbaV09bltpXX1yZXR1cm4gdH12YXIgT2ZlPXtjbG9uZTpaMyxtZXJnZTpUYX0sZmZyPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7Cn1gLHBmcj1gdm9pZCBtYWluKCkgewoJZ2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7Cn1gLGxoPWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRlck1hdGVyaWFsIix0aGlzLmRlZmluZXM9e30sdGhpcy51bmlmb3Jtcz17fSx0aGlzLnZlcnRleFNoYWRlcj1mZnIsdGhpcy5mcmFnbWVudFNoYWRlcj1wZnIsdGhpcy5saW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMubGlnaHRzPSExLHRoaXMuY2xpcHBpbmc9ITEsdGhpcy5leHRlbnNpb25zPXtkZXJpdmF0aXZlczohMSxmcmFnRGVwdGg6ITEsZHJhd0J1ZmZlcnM6ITEsc2hhZGVyVGV4dHVyZUxPRDohMX0sdGhpcy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzPXtjb2xvcjpbMSwxLDFdLHV2OlswLDBdLHV2MjpbMCwwXX0sdGhpcy5pbmRleDBBdHRyaWJ1dGVOYW1lPXZvaWQgMCx0aGlzLnVuaWZvcm1zTmVlZFVwZGF0ZT0hMSx0aGlzLmdsc2xWZXJzaW9uPW51bGwsdCE9PXZvaWQgMCYmKHQuYXR0cmlidXRlcyE9PXZvaWQgMCYmY29uc29sZS5lcnJvcigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdyBiZSBkZWZpbmVkIGluIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIiksdGhpcy5zZXRWYWx1ZXModCkpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5mcmFnbWVudFNoYWRlcj10LmZyYWdtZW50U2hhZGVyLHRoaXMudmVydGV4U2hhZGVyPXQudmVydGV4U2hhZGVyLHRoaXMudW5pZm9ybXM9WjModC51bmlmb3JtcyksdGhpcy5kZWZpbmVzPU9iamVjdC5hc3NpZ24oe30sdC5kZWZpbmVzKSx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmxpZ2h0cz10LmxpZ2h0cyx0aGlzLmNsaXBwaW5nPXQuY2xpcHBpbmcsdGhpcy5leHRlbnNpb25zPU9iamVjdC5hc3NpZ24oe30sdC5leHRlbnNpb25zKSx0aGlzLmdsc2xWZXJzaW9uPXQuZ2xzbFZlcnNpb24sdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3IuZ2xzbFZlcnNpb249dGhpcy5nbHNsVmVyc2lvbixyLnVuaWZvcm1zPXt9O2ZvcihsZXQgaSBpbiB0aGlzLnVuaWZvcm1zKXtsZXQgYT10aGlzLnVuaWZvcm1zW2ldLnZhbHVlO2EmJmEuaXNUZXh0dXJlP3IudW5pZm9ybXNbaV09e3R5cGU6InQiLHZhbHVlOmEudG9KU09OKHQpLnV1aWR9OmEmJmEuaXNDb2xvcj9yLnVuaWZvcm1zW2ldPXt0eXBlOiJjIix2YWx1ZTphLmdldEhleCgpfTphJiZhLmlzVmVjdG9yMj9yLnVuaWZvcm1zW2ldPXt0eXBlOiJ2MiIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNWZWN0b3IzP3IudW5pZm9ybXNbaV09e3R5cGU6InYzIix2YWx1ZTphLnRvQXJyYXkoKX06YSYmYS5pc1ZlY3RvcjQ/ci51bmlmb3Jtc1tpXT17dHlwZToidjQiLHZhbHVlOmEudG9BcnJheSgpfTphJiZhLmlzTWF0cml4Mz9yLnVuaWZvcm1zW2ldPXt0eXBlOiJtMyIsdmFsdWU6YS50b0FycmF5KCl9OmEmJmEuaXNNYXRyaXg0P3IudW5pZm9ybXNbaV09e3R5cGU6Im00Iix2YWx1ZTphLnRvQXJyYXkoKX06ci51bmlmb3Jtc1tpXT17dmFsdWU6YX19T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKHIuZGVmaW5lcz10aGlzLmRlZmluZXMpLHIudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLHIuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgbj17fTtmb3IobGV0IGkgaW4gdGhpcy5leHRlbnNpb25zKXRoaXMuZXh0ZW5zaW9uc1tpXT09PSEwJiYobltpXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmxlbmd0aD4wJiYoci5leHRlbnNpb25zPW4pLHJ9fTtsaC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgUnY9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyBNZSx0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IE1lLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IE1lfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IHI9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLXJbOF0sLXJbOV0sLXJbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQscil7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxyKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX19O1J2LnByb3RvdHlwZS5pc0NhbWVyYT0hMDt2YXIgVWk9Y2xhc3MgZXh0ZW5kcyBSdntjb25zdHJ1Y3Rvcih0PTUwLHI9MSxuPS4xLGk9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iUGVyc3BlY3RpdmVDYW1lcmEiLHRoaXMuZm92PXQsdGhpcy56b29tPTEsdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmZvY3VzPTEwLHRoaXMuYXNwZWN0PXIsdGhpcy52aWV3PW51bGwsdGhpcy5maWxtR2F1Z2U9MzUsdGhpcy5maWxtT2Zmc2V0PTAsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LHIpe3JldHVybiBzdXBlci5jb3B5KHQsciksdGhpcy5mb3Y9dC5mb3YsdGhpcy56b29tPXQuem9vbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuZm9jdXM9dC5mb2N1cyx0aGlzLmFzcGVjdD10LmFzcGVjdCx0aGlzLnZpZXc9dC52aWV3PT09bnVsbD9udWxsOk9iamVjdC5hc3NpZ24oe30sdC52aWV3KSx0aGlzLmZpbG1HYXVnZT10LmZpbG1HYXVnZSx0aGlzLmZpbG1PZmZzZXQ9dC5maWxtT2Zmc2V0LHRoaXN9c2V0Rm9jYWxMZW5ndGgodCl7bGV0IHI9LjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdDt0aGlzLmZvdj1KUCoyKk1hdGguYXRhbihyKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRGb2NhbExlbmd0aCgpe2xldCB0PU1hdGgudGFuKFB2Ki41KnRoaXMuZm92KTtyZXR1cm4gLjUqdGhpcy5nZXRGaWxtSGVpZ2h0KCkvdH1nZXRFZmZlY3RpdmVGT1YoKXtyZXR1cm4gSlAqMipNYXRoLmF0YW4oTWF0aC50YW4oUHYqLjUqdGhpcy5mb3YpL3RoaXMuem9vbSl9Z2V0RmlsbVdpZHRoKCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlKk1hdGgubWluKHRoaXMuYXNwZWN0LDEpfWdldEZpbG1IZWlnaHQoKXtyZXR1cm4gdGhpcy5maWxtR2F1Z2UvTWF0aC5tYXgodGhpcy5hc3BlY3QsMSl9c2V0Vmlld09mZnNldCh0LHIsbixpLG8sYSl7dGhpcy5hc3BlY3Q9dC9yLHRoaXMudmlldz09PW51bGwmJih0aGlzLnZpZXc9e2VuYWJsZWQ6ITAsZnVsbFdpZHRoOjEsZnVsbEhlaWdodDoxLG9mZnNldFg6MCxvZmZzZXRZOjAsd2lkdGg6MSxoZWlnaHQ6MX0pLHRoaXMudmlldy5lbmFibGVkPSEwLHRoaXMudmlldy5mdWxsV2lkdGg9dCx0aGlzLnZpZXcuZnVsbEhlaWdodD1yLHRoaXMudmlldy5vZmZzZXRYPW4sdGhpcy52aWV3Lm9mZnNldFk9aSx0aGlzLnZpZXcud2lkdGg9byx0aGlzLnZpZXcuaGVpZ2h0PWEsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y2xlYXJWaWV3T2Zmc2V0KCl7dGhpcy52aWV3IT09bnVsbCYmKHRoaXMudmlldy5lbmFibGVkPSExKSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX11cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl7bGV0IHQ9dGhpcy5uZWFyLHI9dCpNYXRoLnRhbihQdiouNSp0aGlzLmZvdikvdGhpcy56b29tLG49MipyLGk9dGhpcy5hc3BlY3QqbixvPS0uNSppLGE9dGhpcy52aWV3O2lmKHRoaXMudmlldyE9PW51bGwmJnRoaXMudmlldy5lbmFibGVkKXtsZXQgbD1hLmZ1bGxXaWR0aCxjPWEuZnVsbEhlaWdodDtvKz1hLm9mZnNldFgqaS9sLHItPWEub2Zmc2V0WSpuL2MsaSo9YS53aWR0aC9sLG4qPWEuaGVpZ2h0L2N9bGV0IHM9dGhpcy5maWxtT2Zmc2V0O3MhPT0wJiYobys9dCpzL3RoaXMuZ2V0RmlsbVdpZHRoKCkpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5tYWtlUGVyc3BlY3RpdmUobyxvK2kscixyLW4sdCx0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3QuZm92PXRoaXMuZm92LHIub2JqZWN0Lnpvb209dGhpcy56b29tLHIub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLHIub2JqZWN0LmZhcj10aGlzLmZhcixyLm9iamVjdC5mb2N1cz10aGlzLmZvY3VzLHIub2JqZWN0LmFzcGVjdD10aGlzLmFzcGVjdCx0aGlzLnZpZXchPT1udWxsJiYoci5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLHIub2JqZWN0LmZpbG1HYXVnZT10aGlzLmZpbG1HYXVnZSxyLm9iamVjdC5maWxtT2Zmc2V0PXRoaXMuZmlsbU9mZnNldCxyfX07VWkucHJvdG90eXBlLmlzUGVyc3BlY3RpdmVDYW1lcmE9ITA7dmFyIFAzPTkwLEkzPTEsSjM9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHIsbil7aWYoc3VwZXIoKSx0aGlzLnR5cGU9IkN1YmVDYW1lcmEiLG4uaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQ3ViZUNhbWVyYTogVGhlIGNvbnN0cnVjdG9yIG5vdyBleHBlY3RzIGFuIGluc3RhbmNlIG9mIFdlYkdMQ3ViZVJlbmRlclRhcmdldCBhcyB0aGlyZCBwYXJhbWV0ZXIuIik7cmV0dXJufXRoaXMucmVuZGVyVGFyZ2V0PW47bGV0IGk9bmV3IFVpKFAzLEkzLHQscik7aS5sYXllcnM9dGhpcy5sYXllcnMsaS51cC5zZXQoMCwtMSwwKSxpLmxvb2tBdChuZXcgaigxLDAsMCkpLHRoaXMuYWRkKGkpO2xldCBvPW5ldyBVaShQMyxJMyx0LHIpO28ubGF5ZXJzPXRoaXMubGF5ZXJzLG8udXAuc2V0KDAsLTEsMCksby5sb29rQXQobmV3IGooLTEsMCwwKSksdGhpcy5hZGQobyk7bGV0IGE9bmV3IFVpKFAzLEkzLHQscik7YS5sYXllcnM9dGhpcy5sYXllcnMsYS51cC5zZXQoMCwwLDEpLGEubG9va0F0KG5ldyBqKDAsMSwwKSksdGhpcy5hZGQoYSk7bGV0IHM9bmV3IFVpKFAzLEkzLHQscik7cy5sYXllcnM9dGhpcy5sYXllcnMscy51cC5zZXQoMCwwLC0xKSxzLmxvb2tBdChuZXcgaigwLC0xLDApKSx0aGlzLmFkZChzKTtsZXQgbD1uZXcgVWkoUDMsSTMsdCxyKTtsLmxheWVycz10aGlzLmxheWVycyxsLnVwLnNldCgwLC0xLDApLGwubG9va0F0KG5ldyBqKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFVpKFAzLEkzLHQscik7Yy5sYXllcnM9dGhpcy5sYXllcnMsYy51cC5zZXQoMCwtMSwwKSxjLmxvb2tBdChuZXcgaigwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxyKXt0aGlzLnBhcmVudD09PW51bGwmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgbj10aGlzLnJlbmRlclRhcmdldCxbaSxvLGEscyxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsaD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgZj1uLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO24udGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQobiwwKSx0LnJlbmRlcihyLGkpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sMSksdC5yZW5kZXIocixvKSx0LnNldFJlbmRlclRhcmdldChuLDIpLHQucmVuZGVyKHIsYSksdC5zZXRSZW5kZXJUYXJnZXQobiwzKSx0LnJlbmRlcihyLHMpLHQuc2V0UmVuZGVyVGFyZ2V0KG4sNCksdC5yZW5kZXIocixsKSxuLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWYsdC5zZXRSZW5kZXJUYXJnZXQobiw1KSx0LnJlbmRlcihyLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGgpLHQueHIuZW5hYmxlZD11LG4udGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sSDA9Y2xhc3MgZXh0ZW5kcyB4aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyx1KXt0PXQhPT12b2lkIDA/dDpbXSxyPXIhPT12b2lkIDA/cjpueCxzdXBlcih0LHIsbixpLG8sYSxzLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O0gwLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBRMz1jbGFzcyBleHRlbmRzIHVze2NvbnN0cnVjdG9yKHQscixuKXtOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxyPW4pLHN1cGVyKHQsdCxyKSxyPXJ8fHt9LHRoaXMudGV4dHVyZT1uZXcgSDAodm9pZCAwLHIubWFwcGluZyxyLndyYXBTLHIud3JhcFQsci5tYWdGaWx0ZXIsci5taW5GaWx0ZXIsci5mb3JtYXQsci50eXBlLHIuYW5pc290cm9weSxyLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ci5nZW5lcmF0ZU1pcG1hcHMhPT12b2lkIDA/ci5nZW5lcmF0ZU1pcG1hcHM6ITEsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1yLm1pbkZpbHRlciE9PXZvaWQgMD9yLm1pbkZpbHRlcjpvaX1mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZSh0LHIpe3RoaXMudGV4dHVyZS50eXBlPXIudHlwZSx0aGlzLnRleHR1cmUuZm9ybWF0PVFvLHRoaXMudGV4dHVyZS5lbmNvZGluZz1yLmVuY29kaW5nLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ci5nZW5lcmF0ZU1pcG1hcHMsdGhpcy50ZXh0dXJlLm1pbkZpbHRlcj1yLm1pbkZpbHRlcix0aGlzLnRleHR1cmUubWFnRmlsdGVyPXIubWFnRmlsdGVyO2xldCBuPXt1bmlmb3Jtczp7dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0sdmVydGV4U2hhZGVyOmAKCgkJCQl2YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uOwoKCQkJCXZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CgoJCQkJCXJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApOwoKCQkJCX0KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgoJCQkJCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkJCQkJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoKCQkJCX0KCQkJYCxmcmFnbWVudFNoYWRlcjpgCgoJCQkJdW5pZm9ybSBzYW1wbGVyMkQgdEVxdWlyZWN0OwoKCQkJCXZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CgoJCQkJI2luY2x1ZGUgPGNvbW1vbj4KCgkJCQl2b2lkIG1haW4oKSB7CgoJCQkJCXZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTsKCgkJCQkJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoKCQkJCQlnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHRFcXVpcmVjdCwgc2FtcGxlVVYgKTsKCgkJCQl9CgkJCWB9LGk9bmV3IFFmKDUsNSw1KSxvPW5ldyBsaCh7bmFtZToiQ3ViZW1hcEZyb21FcXVpcmVjdCIsdW5pZm9ybXM6WjMobi51bmlmb3JtcyksdmVydGV4U2hhZGVyOm4udmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOm4uZnJhZ21lbnRTaGFkZXIsc2lkZTpJaSxibGVuZGluZzokZH0pO28udW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPXI7bGV0IGE9bmV3IGVpKGksbykscz1yLm1pbkZpbHRlcjtyZXR1cm4gci5taW5GaWx0ZXI9PT1veCYmKHIubWluRmlsdGVyPW9pKSxuZXcgSjMoMSwxMCx0aGlzKS51cGRhdGUodCxhKSxyLm1pbkZpbHRlcj1zLGEuZ2VvbWV0cnkuZGlzcG9zZSgpLGEubWF0ZXJpYWwuZGlzcG9zZSgpLHRoaXN9Y2xlYXIodCxyLG4saSl7bGV0IG89dC5nZXRSZW5kZXJUYXJnZXQoKTtmb3IobGV0IGE9MDthPDY7YSsrKXQuc2V0UmVuZGVyVGFyZ2V0KHRoaXMsYSksdC5jbGVhcihyLG4saSk7dC5zZXRSZW5kZXJUYXJnZXQobyl9fTtRMy5wcm90b3R5cGUuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ9ITA7dmFyIGh1dD1uZXcgaixkZnI9bmV3IGosbWZyPW5ldyBraSwkYz1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBqKDEsMCwwKSxyPTApe3RoaXMubm9ybWFsPXQsdGhpcy5jb25zdGFudD1yfXNldCh0LHIpe3JldHVybiB0aGlzLm5vcm1hbC5jb3B5KHQpLHRoaXMuY29uc3RhbnQ9cix0aGlzfXNldENvbXBvbmVudHModCxyLG4saSl7cmV0dXJuIHRoaXMubm9ybWFsLnNldCh0LHIsbiksdGhpcy5jb25zdGFudD1pLHRoaXN9c2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodCxyKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PS1yLmRvdCh0aGlzLm5vcm1hbCksdGhpc31zZXRGcm9tQ29wbGFuYXJQb2ludHModCxyLG4pe2xldCBpPWh1dC5zdWJWZWN0b3JzKG4scikuY3Jvc3MoZGZyLnN1YlZlY3RvcnModCxyKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQoaSx0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2xldCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxyKXtyZXR1cm4gci5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQscil7bGV0IG49dC5kZWx0YShodXQpLGk9dGhpcy5ub3JtYWwuZG90KG4pO2lmKGk9PT0wKXJldHVybiB0aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT09PTA/ci5jb3B5KHQuc3RhcnQpOm51bGw7bGV0IG89LSh0LnN0YXJ0LmRvdCh0aGlzLm5vcm1hbCkrdGhpcy5jb25zdGFudCkvaTtyZXR1cm4gbzwwfHxvPjE/bnVsbDpyLmNvcHkobikubXVsdGlwbHlTY2FsYXIobykuYWRkKHQuc3RhcnQpfWludGVyc2VjdHNMaW5lKHQpe2xldCByPXRoaXMuZGlzdGFuY2VUb1BvaW50KHQuc3RhcnQpLG49dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5lbmQpO3JldHVybiByPDAmJm4+MHx8bjwwJiZyPjB9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzUGxhbmUodGhpcyl9Y29wbGFuYXJQb2ludCh0KXtyZXR1cm4gdC5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5jb25zdGFudCl9YXBwbHlNYXRyaXg0KHQscil7bGV0IG49cnx8bWZyLmdldE5vcm1hbE1hdHJpeCh0KSxpPXRoaXMuY29wbGFuYXJQb2ludChodXQpLmFwcGx5TWF0cml4NCh0KSxvPXRoaXMubm9ybWFsLmFwcGx5TWF0cml4MyhuKS5ub3JtYWxpemUoKTtyZXR1cm4gdGhpcy5jb25zdGFudD0taS5kb3QobyksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMuY29uc3RhbnQtPXQuZG90KHRoaXMubm9ybWFsKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5ub3JtYWwuZXF1YWxzKHRoaXMubm9ybWFsKSYmdC5jb25zdGFudD09PXRoaXMuY29uc3RhbnR9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX07JGMucHJvdG90eXBlLmlzUGxhbmU9ITA7dmFyIEwzPW5ldyBaZixDVj1uZXcgaixOdj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyAkYyxyPW5ldyAkYyxuPW5ldyAkYyxpPW5ldyAkYyxvPW5ldyAkYyxhPW5ldyAkYyl7dGhpcy5wbGFuZXM9W3QscixuLGksbyxhXX1zZXQodCxyLG4saSxvLGEpe2xldCBzPXRoaXMucGxhbmVzO3JldHVybiBzWzBdLmNvcHkodCksc1sxXS5jb3B5KHIpLHNbMl0uY29weShuKSxzWzNdLmNvcHkoaSksc1s0XS5jb3B5KG8pLHNbNV0uY29weShhKSx0aGlzfWNvcHkodCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKylyW25dLmNvcHkodC5wbGFuZXNbbl0pO3JldHVybiB0aGlzfXNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHQpe2xldCByPXRoaXMucGxhbmVzLG49dC5lbGVtZW50cyxpPW5bMF0sbz1uWzFdLGE9blsyXSxzPW5bM10sbD1uWzRdLGM9bls1XSx1PW5bNl0saD1uWzddLGY9bls4XSxwPW5bOV0sZD1uWzEwXSxnPW5bMTFdLF89blsxMl0seT1uWzEzXSx4PW5bMTRdLGI9blsxNV07cmV0dXJuIHJbMF0uc2V0Q29tcG9uZW50cyhzLWksaC1sLGctZixiLV8pLm5vcm1hbGl6ZSgpLHJbMV0uc2V0Q29tcG9uZW50cyhzK2ksaCtsLGcrZixiK18pLm5vcm1hbGl6ZSgpLHJbMl0uc2V0Q29tcG9uZW50cyhzK28saCtjLGcrcCxiK3kpLm5vcm1hbGl6ZSgpLHJbM10uc2V0Q29tcG9uZW50cyhzLW8saC1jLGctcCxiLXkpLm5vcm1hbGl6ZSgpLHJbNF0uc2V0Q29tcG9uZW50cyhzLWEsaC11LGctZCxiLXgpLm5vcm1hbGl6ZSgpLHJbNV0uc2V0Q29tcG9uZW50cyhzK2EsaCt1LGcrZCxiK3gpLm5vcm1hbGl6ZSgpLHRoaXN9aW50ZXJzZWN0c09iamVjdCh0KXtsZXQgcj10Lmdlb21ldHJ5O3JldHVybiByLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmci5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxMMy5jb3B5KHIuYm91bmRpbmdTcGhlcmUpLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkKSx0aGlzLmludGVyc2VjdHNTcGhlcmUoTDMpfWludGVyc2VjdHNTcHJpdGUodCl7cmV0dXJuIEwzLmNlbnRlci5zZXQoMCwwLDApLEwzLnJhZGl1cz0uNzA3MTA2NzgxMTg2NTQ3NixMMy5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKEwzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe2xldCByPXRoaXMucGxhbmVzLG49dC5jZW50ZXIsaT0tdC5yYWRpdXM7Zm9yKGxldCBvPTA7bzw2O28rKylpZihyW29dLmRpc3RhbmNlVG9Qb2ludChuKTxpKXJldHVybiExO3JldHVybiEwfWludGVyc2VjdHNCb3godCl7bGV0IHI9dGhpcy5wbGFuZXM7Zm9yKGxldCBuPTA7bjw2O24rKyl7bGV0IGk9cltuXTtpZihDVi54PWkubm9ybWFsLng+MD90Lm1heC54OnQubWluLngsQ1YueT1pLm5vcm1hbC55PjA/dC5tYXgueTp0Lm1pbi55LENWLno9aS5ub3JtYWwuej4wP3QubWF4Lno6dC5taW4ueixpLmRpc3RhbmNlVG9Qb2ludChDVik8MClyZXR1cm4hMX1yZXR1cm4hMH1jb250YWluc1BvaW50KHQpe2xldCByPXRoaXMucGxhbmVzO2ZvcihsZXQgbj0wO248NjtuKyspaWYocltuXS5kaXN0YW5jZVRvUG9pbnQodCk8MClyZXR1cm4hMTtyZXR1cm4hMH1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiB6ZmUoKXtsZXQgZT1udWxsLHQ9ITEscj1udWxsLG49bnVsbDtmdW5jdGlvbiBpKG8sYSl7cihvLGEpLG49ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7dCE9PSEwJiZyIT09bnVsbCYmKG49ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtlLmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7cj1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe2U9b319fWZ1bmN0aW9uIGdmcihlLHQpe2xldCByPXQuaXNXZWJHTDIsbj1uZXcgV2Vha01hcDtmdW5jdGlvbiBpKGMsdSl7bGV0IGg9Yy5hcnJheSxmPWMudXNhZ2UscD1lLmNyZWF0ZUJ1ZmZlcigpO2UuYmluZEJ1ZmZlcih1LHApLGUuYnVmZmVyRGF0YSh1LGgsZiksYy5vblVwbG9hZENhbGxiYWNrKCk7bGV0IGQ9NTEyNjtyZXR1cm4gaCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT9kPTUxMjY6aCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheT9jb25zb2xlLndhcm4oIlRIUkVFLldlYkdMQXR0cmlidXRlczogVW5zdXBwb3J0ZWQgZGF0YSBidWZmZXIgZm9ybWF0OiBGbG9hdDY0QXJyYXkuIik6aCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5P2MuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlP3I/ZD01MTMxOmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVc2FnZSBvZiBGbG9hdDE2QnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIFdlYkdMMi4iKTpkPTUxMjM6aCBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZD01MTIyOmggaW5zdGFuY2VvZiBVaW50MzJBcnJheT9kPTUxMjU6aCBpbnN0YW5jZW9mIEludDMyQXJyYXk/ZD01MTI0OmggaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZD01MTIwOihoIGluc3RhbmNlb2YgVWludDhBcnJheXx8aCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSYmKGQ9NTEyMSkse2J1ZmZlcjpwLHR5cGU6ZCxieXRlc1BlckVsZW1lbnQ6aC5CWVRFU19QRVJfRUxFTUVOVCx2ZXJzaW9uOmMudmVyc2lvbn19ZnVuY3Rpb24gbyhjLHUsaCl7bGV0IGY9dS5hcnJheSxwPXUudXBkYXRlUmFuZ2U7ZS5iaW5kQnVmZmVyKGgsYykscC5jb3VudD09PS0xP2UuYnVmZmVyU3ViRGF0YShoLDAsZik6KHI/ZS5idWZmZXJTdWJEYXRhKGgscC5vZmZzZXQqZi5CWVRFU19QRVJfRUxFTUVOVCxmLHAub2Zmc2V0LHAuY291bnQpOmUuYnVmZmVyU3ViRGF0YShoLHAub2Zmc2V0KmYuQllURVNfUEVSX0VMRU1FTlQsZi5zdWJhcnJheShwLm9mZnNldCxwLm9mZnNldCtwLmNvdW50KSkscC5jb3VudD0tMSl9ZnVuY3Rpb24gYShjKXtyZXR1cm4gYy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpLG4uZ2V0KGMpfWZ1bmN0aW9uIHMoYyl7Yy5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlJiYoYz1jLmRhdGEpO2xldCB1PW4uZ2V0KGMpO3UmJihlLmRlbGV0ZUJ1ZmZlcih1LmJ1ZmZlciksbi5kZWxldGUoYykpfWZ1bmN0aW9uIGwoYyx1KXtpZihjLmlzR0xCdWZmZXJBdHRyaWJ1dGUpe2xldCBmPW4uZ2V0KGMpOyghZnx8Zi52ZXJzaW9uPGMudmVyc2lvbikmJm4uc2V0KGMse2J1ZmZlcjpjLmJ1ZmZlcix0eXBlOmMudHlwZSxieXRlc1BlckVsZW1lbnQ6Yy5lbGVtZW50U2l6ZSx2ZXJzaW9uOmMudmVyc2lvbn0pO3JldHVybn1jLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IGg9bi5nZXQoYyk7aD09PXZvaWQgMD9uLnNldChjLGkoYyx1KSk6aC52ZXJzaW9uPGMudmVyc2lvbiYmKG8oaC5idWZmZXIsYyx1KSxoLnZlcnNpb249Yy52ZXJzaW9uKX1yZXR1cm57Z2V0OmEscmVtb3ZlOnMsdXBkYXRlOmx9fXZhciBWMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPTEsbj0xLGk9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6cix3aWR0aFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aX07bGV0IG89dC8yLGE9ci8yLHM9TWF0aC5mbG9vcihuKSxsPU1hdGguZmxvb3IoaSksYz1zKzEsdT1sKzEsaD10L3MsZj1yL2wscD1bXSxkPVtdLGc9W10sXz1bXTtmb3IobGV0IHk9MDt5PHU7eSsrKXtsZXQgeD15KmYtYTtmb3IobGV0IGI9MDtiPGM7YisrKXtsZXQgUz1iKmgtbztkLnB1c2goUywteCwwKSxnLnB1c2goMCwwLDEpLF8ucHVzaChiL3MpLF8ucHVzaCgxLXkvbCl9fWZvcihsZXQgeT0wO3k8bDt5KyspZm9yKGxldCB4PTA7eDxzO3grKyl7bGV0IGI9eCtjKnksUz14K2MqKHkrMSksQz14KzErYyooeSsxKSxQPXgrMStjKnk7cC5wdXNoKGIsUyxQKSxwLnB1c2goUyxDLFApfXRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKF8sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFYwKHQud2lkdGgsdC5oZWlnaHQsdC53aWR0aFNlZ21lbnRzLHQuaGVpZ2h0U2VnbWVudHMpfX0sX2ZyPWAjaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nOwojZW5kaWZgLHlmcj1gI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsdmZyPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJaWYgKCBkaWZmdXNlQ29sb3IuYSA8IGFscGhhVGVzdCApIGRpc2NhcmQ7CiNlbmRpZmAseGZyPWAjaWZkZWYgVVNFX0FMUEhBVEVTVAoJdW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7CiNlbmRpZmAsYmZyPWAjaWZkZWYgVVNFX0FPTUFQCglmbG9hdCBhbWJpZW50T2NjbHVzaW9uID0gKCB0ZXh0dXJlMkQoIGFvTWFwLCB2VXYyICkuciAtIDEuMCApICogYW9NYXBJbnRlbnNpdHkgKyAxLjA7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjsKCSNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKQoJCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2VuZGlmCiNlbmRpZmAsd2ZyPWAjaWZkZWYgVVNFX0FPTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDsKCXVuaWZvcm0gZmxvYXQgYW9NYXBJbnRlbnNpdHk7CiNlbmRpZmAsU2ZyPSJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLE1mcj1gdmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTsKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApOwojZW5kaWZgLEVmcj1gdmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkgewoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7Cn0KdmVjMyBGX1NjaGxpY2soIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgZG90VkggKSB7CglmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7CglyZXR1cm4gZjAgKiAoIDEuMCAtIGZyZXNuZWwgKSArICggZjkwICogZnJlc25lbCApOwp9CmZsb2F0IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5MLCBjb25zdCBpbiBmbG9hdCBkb3ROViApIHsKCWZsb2F0IGEyID0gcG93MiggYWxwaGEgKTsKCWZsb2F0IGd2ID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTsKCWZsb2F0IGdsID0gZG90TlYgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5MICkgKTsKCXJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTsKfQpmbG9hdCBEX0dHWCggY29uc3QgaW4gZmxvYXQgYWxwaGEsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkgewoJZmxvYXQgYTIgPSBwb3cyKCBhbHBoYSApOwoJZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wOwoJcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7Cn0KdmVjMyBCUkRGX0dHWCggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBmMCwgY29uc3QgaW4gZmxvYXQgZjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7CglmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApOwoJdmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTsKCWZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCBkb3ROSCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7CglmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApOwoJdmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApOwoJZmxvYXQgViA9IFZfR0dYX1NtaXRoQ29ycmVsYXRlZCggYWxwaGEsIGRvdE5MLCBkb3ROViApOwoJZmxvYXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTsKCXJldHVybiBGICogKCBWICogRCApOwp9CnZlYzIgTFRDX1V2KCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJY29uc3QgZmxvYXQgTFVUX1NJWkUgPSA2NC4wOwoJY29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7Cgljb25zdCBmbG9hdCBMVVRfQklBUyA9IDAuNSAvIExVVF9TSVpFOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBOLCBWICkgKTsKCXZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTsKCXV2ID0gdXYgKiBMVVRfU0NBTEUgKyBMVVRfQklBUzsKCXJldHVybiB1djsKfQpmbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHsKCWZsb2F0IGwgPSBsZW5ndGgoIGYgKTsKCXJldHVybiBtYXgoICggbCAqIGwgKyBmLnogKSAvICggbCArIDEuMCApLCAwLjAgKTsKfQp2ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHsKCWZsb2F0IHggPSBkb3QoIHYxLCB2MiApOwoJZmxvYXQgeSA9IGFicyggeCApOwoJZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTsKCWZsb2F0IGIgPSAzLjQxNzU5NDAgKyAoIDQuMTYxNjcyNCArIHkgKSAqIHk7CglmbG9hdCB2ID0gYSAvIGI7CglmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7CglyZXR1cm4gY3Jvc3MoIHYxLCB2MiApICogdGhldGFfc2ludGhldGE7Cn0KdmVjMyBMVENfRXZhbHVhdGUoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiB2ZWMzIFAsIGNvbnN0IGluIG1hdDMgbUludiwgY29uc3QgaW4gdmVjMyByZWN0Q29vcmRzWyA0IF0gKSB7Cgl2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdOwoJdmVjMyB2MiA9IHJlY3RDb29yZHNbIDMgXSAtIHJlY3RDb29yZHNbIDAgXTsKCXZlYzMgbGlnaHROb3JtYWwgPSBjcm9zcyggdjEsIHYyICk7CglpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApOwoJdmVjMyBUMSwgVDI7CglUMSA9IG5vcm1hbGl6ZSggViAtIE4gKiBkb3QoIFYsIE4gKSApOwoJVDIgPSAtIGNyb3NzKCBOLCBUMSApOwoJbWF0MyBtYXQgPSBtSW52ICogdHJhbnNwb3NlTWF0MyggbWF0MyggVDEsIFQyLCBOICkgKTsKCXZlYzMgY29vcmRzWyA0IF07Cgljb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApOwoJY29vcmRzWyAxIF0gPSBtYXQgKiAoIHJlY3RDb29yZHNbIDEgXSAtIFAgKTsKCWNvb3Jkc1sgMiBdID0gbWF0ICogKCByZWN0Q29vcmRzWyAyIF0gLSBQICk7Cgljb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApOwoJY29vcmRzWyAwIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMCBdICk7Cgljb29yZHNbIDEgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAxIF0gKTsKCWNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApOwoJY29vcmRzWyAzIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMyBdICk7Cgl2ZWMzIHZlY3RvckZvcm1GYWN0b3IgPSB2ZWMzKCAwLjAgKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDEgXSwgY29vcmRzWyAyIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDIgXSwgY29vcmRzWyAzIF0gKTsKCXZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTsKCWZsb2F0IHJlc3VsdCA9IExUQ19DbGlwcGVkU3BoZXJlRm9ybUZhY3RvciggdmVjdG9yRm9ybUZhY3RvciApOwoJcmV0dXJuIHZlYzMoIHJlc3VsdCApOwp9CmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7CglyZXR1cm4gMC4yNTsKfQpmbG9hdCBEX0JsaW5uUGhvbmcoIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcywgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7CglyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTsKfQp2ZWMzIEJSREZfQmxpbm5QaG9uZyggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MgKSB7Cgl2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTsKCXZlYzMgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgMS4wLCBkb3RWSCApOwoJZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTsKCWZsb2F0IEQgPSBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzcywgZG90TkggKTsKCXJldHVybiBGICogKCBHICogRCApOwp9CiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKQpmbG9hdCBEX0NoYXJsaWUoIGZsb2F0IHJvdWdobmVzcywgZmxvYXQgZG90TkggKSB7CglmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApOwoJZmxvYXQgaW52QWxwaGEgPSAxLjAgLyBhbHBoYTsKCWZsb2F0IGNvczJoID0gZG90TkggKiBkb3ROSDsKCWZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7CglyZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTsKfQpmbG9hdCBWX05ldWJlbHQoIGZsb2F0IGRvdE5WLCBmbG9hdCBkb3ROTCApIHsKCXJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApOwp9CnZlYzMgQlJERl9TaGVlbiggY29uc3QgaW4gdmVjMyBsaWdodERpciwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgdmVjMyBzaGVlbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBzaGVlblJvdWdobmVzcyApIHsKCXZlYzMgaGFsZkRpciA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApOwoJZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApOwoJZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApOwoJZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7CglmbG9hdCBWID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTsKCXJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApOwp9CiNlbmRpZmAsVGZyPWAjaWZkZWYgVVNFX0JVTVBNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGJ1bXBNYXA7Cgl1bmlmb3JtIGZsb2F0IGJ1bXBTY2FsZTsKCXZlYzIgZEhkeHlfZndkKCkgewoJCXZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTsKCQl2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7CgkJZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54OwoJCWZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsOwoJCWZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsOwoJCXJldHVybiB2ZWMyKCBkQngsIGRCeSApOwoJfQoJdmVjMyBwZXJ0dXJiTm9ybWFsQXJiKCB2ZWMzIHN1cmZfcG9zLCB2ZWMzIHN1cmZfbm9ybSwgdmVjMiBkSGR4eSwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHZTaWdtYVggPSB2ZWMzKCBkRmR4KCBzdXJmX3Bvcy54ICksIGRGZHgoIHN1cmZfcG9zLnkgKSwgZEZkeCggc3VyZl9wb3MueiApICk7CgkJdmVjMyB2U2lnbWFZID0gdmVjMyggZEZkeSggc3VyZl9wb3MueCApLCBkRmR5KCBzdXJmX3Bvcy55ICksIGRGZHkoIHN1cmZfcG9zLnogKSApOwoJCXZlYzMgdk4gPSBzdXJmX25vcm07CgkJdmVjMyBSMSA9IGNyb3NzKCB2U2lnbWFZLCB2TiApOwoJCXZlYzMgUjIgPSBjcm9zcyggdk4sIHZTaWdtYVggKTsKCQlmbG9hdCBmRGV0ID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjsKCQl2ZWMzIHZHcmFkID0gc2lnbiggZkRldCApICogKCBkSGR4eS54ICogUjEgKyBkSGR4eS55ICogUjIgKTsKCQlyZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7Cgl9CiNlbmRpZmAsQ2ZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZlYzQgcGxhbmU7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBVTklPTl9DTElQUElOR19QTEFORVM7IGkgKysgKSB7CgkJcGxhbmUgPSBjbGlwcGluZ1BsYW5lc1sgaSBdOwoJCWlmICggZG90KCB2Q2xpcFBvc2l0aW9uLCBwbGFuZS54eXogKSA+IHBsYW5lLncgKSBkaXNjYXJkOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNpZiBVTklPTl9DTElQUElOR19QTEFORVMgPCBOVU1fQ0xJUFBJTkdfUExBTkVTCgkJYm9vbCBjbGlwcGVkID0gdHJ1ZTsKCQkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0CgkJZm9yICggaW50IGkgPSBVTklPTl9DTElQUElOR19QTEFORVM7IGkgPCBOVU1fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkgewoJCQlwbGFuZSA9IGNsaXBwaW5nUGxhbmVzWyBpIF07CgkJCWNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCQlpZiAoIGNsaXBwZWQgKSBkaXNjYXJkOwoJI2VuZGlmCiNlbmRpZmAsQWZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwoJdW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07CiNlbmRpZmAsUGZyPWAjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDAKCXZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uOwojZW5kaWZgLElmcj1gI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwCgl2Q2xpcFBvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKI2VuZGlmYCxMZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJZGlmZnVzZUNvbG9yICo9IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkKCWRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yOwojZW5kaWZgLGtmcj1gI2lmIGRlZmluZWQoIFVTRV9DT0xPUl9BTFBIQSApCgl2YXJ5aW5nIHZlYzQgdkNvbG9yOwojZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxSZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdmFyeWluZyB2ZWM0IHZDb2xvcjsKI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkgfHwgZGVmaW5lZCggVVNFX0lOU1RBTkNJTkdfQ09MT1IgKQoJdmFyeWluZyB2ZWMzIHZDb2xvcjsKI2VuZGlmYCxOZnI9YCNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKQoJdkNvbG9yID0gdmVjNCggMS4wICk7CiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SICkKCXZDb2xvciA9IHZlYzMoIDEuMCApOwojZW5kaWYKI2lmZGVmIFVTRV9DT0xPUgoJdkNvbG9yICo9IGNvbG9yOwojZW5kaWYKI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SCgl2Q29sb3IueHl6ICo9IGluc3RhbmNlQ29sb3IueHl6OwojZW5kaWZgLERmcj1gI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5MwojZGVmaW5lIFBJMiA2LjI4MzE4NTMwNzE3OTU4NgojZGVmaW5lIFBJX0hBTEYgMS41NzA3OTYzMjY3OTQ4OTY2CiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDcKI2RlZmluZSBSRUNJUFJPQ0FMX1BJMiAwLjE1OTE1NDk0MzA5MTg5NTM1CiNkZWZpbmUgRVBTSUxPTiAxZS02CiNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgojZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApCmZsb2F0IHBvdzIoIGNvbnN0IGluIGZsb2F0IHggKSB7IHJldHVybiB4Kng7IH0KZmxvYXQgcG93MyggY29uc3QgaW4gZmxvYXQgeCApIHsgcmV0dXJuIHgqeCp4OyB9CmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH0KZmxvYXQgbWF4MyggY29uc3QgaW4gdmVjMyB2ICkgeyByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApOyB9CmZsb2F0IGF2ZXJhZ2UoIGNvbnN0IGluIHZlYzMgY29sb3IgKSB7IHJldHVybiBkb3QoIGNvbG9yLCB2ZWMzKCAwLjMzMzMgKSApOyB9CmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7Cgljb25zdCBoaWdocCBmbG9hdCBhID0gMTIuOTg5OCwgYiA9IDc4LjIzMywgYyA9IDQzNzU4LjU0NTM7CgloaWdocCBmbG9hdCBkdCA9IGRvdCggdXYueHksIHZlYzIoIGEsYiApICksIHNuID0gbW9kKCBkdCwgUEkgKTsKCXJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApOwp9CiNpZmRlZiBISUdIX1BSRUNJU0lPTgoJZmxvYXQgcHJlY2lzaW9uU2FmZUxlbmd0aCggdmVjMyB2ICkgeyByZXR1cm4gbGVuZ3RoKCB2ICk7IH0KI2Vsc2UKCWZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsKCQlmbG9hdCBtYXhDb21wb25lbnQgPSBtYXgzKCBhYnMoIHYgKSApOwoJCXJldHVybiBsZW5ndGgoIHYgLyBtYXhDb21wb25lbnQgKSAqIG1heENvbXBvbmVudDsKCX0KI2VuZGlmCnN0cnVjdCBJbmNpZGVudExpZ2h0IHsKCXZlYzMgY29sb3I7Cgl2ZWMzIGRpcmVjdGlvbjsKCWJvb2wgdmlzaWJsZTsKfTsKc3RydWN0IFJlZmxlY3RlZExpZ2h0IHsKCXZlYzMgZGlyZWN0RGlmZnVzZTsKCXZlYzMgZGlyZWN0U3BlY3VsYXI7Cgl2ZWMzIGluZGlyZWN0RGlmZnVzZTsKCXZlYzMgaW5kaXJlY3RTcGVjdWxhcjsKfTsKc3RydWN0IEdlb21ldHJpY0NvbnRleHQgewoJdmVjMyBwb3NpdGlvbjsKCXZlYzMgbm9ybWFsOwoJdmVjMyB2aWV3RGlyOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWw7CiNlbmRpZgp9Owp2ZWMzIHRyYW5zZm9ybURpcmVjdGlvbiggaW4gdmVjMyBkaXIsIGluIG1hdDQgbWF0cml4ICkgewoJcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0KCBkaXIsIDAuMCApICkueHl6ICk7Cn0KdmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7CglyZXR1cm4gbm9ybWFsaXplKCAoIHZlYzQoIGRpciwgMC4wICkgKiBtYXRyaXggKS54eXogKTsKfQptYXQzIHRyYW5zcG9zZU1hdDMoIGNvbnN0IGluIG1hdDMgbSApIHsKCW1hdDMgdG1wOwoJdG1wWyAwIF0gPSB2ZWMzKCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7Cgl0bXBbIDEgXSA9IHZlYzMoIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTsKCXRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApOwoJcmV0dXJuIHRtcDsKfQpmbG9hdCBsaW5lYXJUb1JlbGF0aXZlTHVtaW5hbmNlKCBjb25zdCBpbiB2ZWMzIGNvbG9yICkgewoJdmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApOwoJcmV0dXJuIGRvdCggd2VpZ2h0cywgY29sb3IucmdiICk7Cn0KYm9vbCBpc1BlcnNwZWN0aXZlTWF0cml4KCBtYXQ0IG0gKSB7CglyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7Cn0KdmVjMiBlcXVpcmVjdFV2KCBpbiB2ZWMzIGRpciApIHsKCWZsb2F0IHUgPSBhdGFuKCBkaXIueiwgZGlyLnggKSAqIFJFQ0lQUk9DQUxfUEkyICsgMC41OwoJZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41OwoJcmV0dXJuIHZlYzIoIHUsIHYgKTsKfWAsT2ZyPWAjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVgoJI2RlZmluZSBjdWJlVVZfbWF4TWlwTGV2ZWwgOC4wCgkjZGVmaW5lIGN1YmVVVl9taW5NaXBMZXZlbCA0LjAKCSNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wCgkjZGVmaW5lIGN1YmVVVl9taW5UaWxlU2l6ZSAxNi4wCglmbG9hdCBnZXRGYWNlKCB2ZWMzIGRpcmVjdGlvbiApIHsKCQl2ZWMzIGFic0RpcmVjdGlvbiA9IGFicyggZGlyZWN0aW9uICk7CgkJZmxvYXQgZmFjZSA9IC0gMS4wOwoJCWlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHsKCQkJaWYgKCBhYnNEaXJlY3Rpb24ueCA+IGFic0RpcmVjdGlvbi55ICkKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueCA+IDAuMCA/IDAuMCA6IDMuMDsKCQkJZWxzZQoJCQkJZmFjZSA9IGRpcmVjdGlvbi55ID4gMC4wID8gMS4wIDogNC4wOwoJCX0gZWxzZSB7CgkJCWlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApCgkJCQlmYWNlID0gZGlyZWN0aW9uLnogPiAwLjAgPyAyLjAgOiA1LjA7CgkJCWVsc2UKCQkJCWZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDsKCQl9CgkJcmV0dXJuIGZhY2U7Cgl9Cgl2ZWMyIGdldFVWKCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgZmFjZSApIHsKCQl2ZWMyIHV2OwoJCWlmICggZmFjZSA9PSAwLjAgKSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgLSBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkgewoJCQl1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7CgkJCXV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTsKCQl9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHsKCQkJdXYgPSB2ZWMyKCAtIGRpcmVjdGlvbi54LCBkaXJlY3Rpb24ueiApIC8gYWJzKCBkaXJlY3Rpb24ueSApOwoJCX0gZWxzZSB7CgkJCXV2ID0gdmVjMiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7CgkJfQoJCXJldHVybiAwLjUgKiAoIHV2ICsgMS4wICk7Cgl9Cgl2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkgewoJCWZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTsKCQlmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7CgkJbWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApOwoJCWZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7CgkJZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTsKCQl2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41OwoJCWlmICggZmFjZSA+IDIuMCApIHsKCQkJdXYueSArPSBmYWNlU2l6ZTsKCQkJZmFjZSAtPSAzLjA7CgkJfQoJCXV2LnggKz0gZmFjZSAqIGZhY2VTaXplOwoJCWlmICggbWlwSW50IDwgY3ViZVVWX21heE1pcExldmVsICkgewoJCQl1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTsKCQl9CgkJdXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7CgkJdXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTsKCQl1diAqPSB0ZXhlbFNpemU7CgkJcmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjsKCX0KCSNkZWZpbmUgcjAgMS4wCgkjZGVmaW5lIHYwIDAuMzM5CgkjZGVmaW5lIG0wIC0gMi4wCgkjZGVmaW5lIHIxIDAuOAoJI2RlZmluZSB2MSAwLjI3NgoJI2RlZmluZSBtMSAtIDEuMAoJI2RlZmluZSByNCAwLjQKCSNkZWZpbmUgdjQgMC4wNDYKCSNkZWZpbmUgbTQgMi4wCgkjZGVmaW5lIHI1IDAuMzA1CgkjZGVmaW5lIHY1IDAuMDE2CgkjZGVmaW5lIG01IDMuMAoJI2RlZmluZSByNiAwLjIxCgkjZGVmaW5lIHY2IDAuMDAzOAoJI2RlZmluZSBtNiA0LjAKCWZsb2F0IHJvdWdobmVzc1RvTWlwKCBmbG9hdCByb3VnaG5lc3MgKSB7CgkJZmxvYXQgbWlwID0gMC4wOwoJCWlmICggcm91Z2huZXNzID49IHIxICkgewoJCQltaXAgPSAoIHIwIC0gcm91Z2huZXNzICkgKiAoIG0xIC0gbTAgKSAvICggcjAgLSByMSApICsgbTA7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI0ICkgewoJCQltaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkgewoJCQltaXAgPSAoIHI0IC0gcm91Z2huZXNzICkgKiAoIG01IC0gbTQgKSAvICggcjQgLSByNSApICsgbTQ7CgkJfSBlbHNlIGlmICggcm91Z2huZXNzID49IHI2ICkgewoJCQltaXAgPSAoIHI1IC0gcm91Z2huZXNzICkgKiAoIG02IC0gbTUgKSAvICggcjUgLSByNiApICsgbTU7CgkJfSBlbHNlIHsKCQkJbWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7CQl9CgkJcmV0dXJuIG1pcDsKCX0KCXZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHsKCQlmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7CgkJZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTsKCQlmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7CgkJdmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApOwoJCWlmICggbWlwRiA9PSAwLjAgKSB7CgkJCXJldHVybiB2ZWM0KCBjb2xvcjAsIDEuMCApOwoJCX0gZWxzZSB7CgkJCXZlYzMgY29sb3IxID0gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyLCBtaXBJbnQgKyAxLjAgKTsKCQkJcmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7CgkJfQoJfQojZW5kaWZgLHpmcj1gdmVjMyB0cmFuc2Zvcm1lZE5vcm1hbCA9IG9iamVjdE5vcm1hbDsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltYXQzIG0gPSBtYXQzKCBpbnN0YW5jZU1hdHJpeCApOwoJdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMyggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApOwoJdHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7CiNlbmRpZgp0cmFuc2Zvcm1lZE5vcm1hbCA9IG5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsOwojaWZkZWYgRkxJUF9TSURFRAoJdHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsOwojZW5kaWYKI2lmZGVmIFVTRV9UQU5HRU5UCgl2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7CgkjaWZkZWYgRkxJUF9TSURFRAoJCXRyYW5zZm9ybWVkVGFuZ2VudCA9IC0gdHJhbnNmb3JtZWRUYW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsRmZyPWAjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgZGlzcGxhY2VtZW50TWFwOwoJdW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTsKCXVuaWZvcm0gZmxvYXQgZGlzcGxhY2VtZW50QmlhczsKI2VuZGlmYCxCZnI9YCNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgl0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApOwojZW5kaWZgLEhmcj1gI2lmZGVmIFVTRV9FTUlTU0lWRU1BUAoJdmVjNCBlbWlzc2l2ZUNvbG9yID0gdGV4dHVyZTJEKCBlbWlzc2l2ZU1hcCwgdlV2ICk7Cgl0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7CiNlbmRpZmAsVmZyPWAjaWZkZWYgVVNFX0VNSVNTSVZFTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBlbWlzc2l2ZU1hcDsKI2VuZGlmYCxVZnI9ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIscWZyPWB2ZWM0IExpbmVhclRvTGluZWFyKCBpbiB2ZWM0IHZhbHVlICkgewoJcmV0dXJuIHZhbHVlOwp9CnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkgewoJcmV0dXJuIHZlYzQoIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzMoIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzKCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMyggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzKCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApOwp9YCxHZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmVjMyBjYW1lcmFUb0ZyYWc7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTsKCQl9IGVsc2UgewoJCQljYW1lcmFUb0ZyYWcgPSBub3JtYWxpemUoIHZXb3JsZFBvc2l0aW9uIC0gY2FtZXJhUG9zaXRpb24gKTsKCQl9CgkJdmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZlYzMgcmVmbGVjdFZlYyA9IHJlZmxlY3QoIGNhbWVyYVRvRnJhZywgd29ybGROb3JtYWwgKTsKCQkjZWxzZQoJCQl2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkjZW5kaWYKCSNlbHNlCgkJdmVjMyByZWZsZWN0VmVjID0gdlJlZmxlY3Q7CgkjZW5kaWYKCSNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJdmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgcmVmbGVjdFZlYywgMC4wICk7CgkjZWxzZQoJCXZlYzQgZW52Q29sb3IgPSB2ZWM0KCAwLjAgKTsKCSNlbmRpZgoJI2lmZGVmIEVOVk1BUF9CTEVORElOR19NVUxUSVBMWQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIG91dGdvaW5nTGlnaHQgKiBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTsKCSNlbGlmIGRlZmluZWQoIEVOVk1BUF9CTEVORElOR19NSVggKQoJCW91dGdvaW5nTGlnaHQgPSBtaXgoIG91dGdvaW5nTGlnaHQsIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApOwoJI2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApCgkJb3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5OwoJI2VuZGlmCiNlbmRpZmAsV2ZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJdW5pZm9ybSBmbG9hdCBlbnZNYXBJbnRlbnNpdHk7Cgl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgkjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRQoJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoJI2Vsc2UKCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkjZW5kaWYKCQojZW5kaWZgLFlmcj1gI2lmZGVmIFVTRV9FTlZNQVAKCXVuaWZvcm0gZmxvYXQgcmVmbGVjdGl2aXR5OwoJI2lmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkgfHwgZGVmaW5lZCggVVNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQoIFBIT05HICkKCQkjZGVmaW5lIEVOVl9XT1JMRFBPUwoJI2VuZGlmCgkjaWZkZWYgRU5WX1dPUkxEUE9TCgkJdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uOwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2Vsc2UKCQl2YXJ5aW5nIHZlYzMgdlJlZmxlY3Q7CgkjZW5kaWYKI2VuZGlmYCxqZnI9YCNpZmRlZiBVU0VfRU5WTUFQCgkjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApCgkJI2RlZmluZSBFTlZfV09STERQT1MKCSNlbmRpZgoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCQoJCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCSNlbHNlCgkJdmFyeWluZyB2ZWMzIHZSZWZsZWN0OwoJCXVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvOwoJI2VuZGlmCiNlbmRpZmAsWGZyPWAjaWZkZWYgVVNFX0VOVk1BUAoJI2lmZGVmIEVOVl9XT1JMRFBPUwoJCXZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7CgkjZWxzZQoJCXZlYzMgY2FtZXJhVG9WZXJ0ZXg7CgkJaWYgKCBpc09ydGhvZ3JhcGhpYyApIHsKCQkJY2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHZlYzMoIC0gdmlld01hdHJpeFsgMCBdWyAyIF0sIC0gdmlld01hdHJpeFsgMSBdWyAyIF0sIC0gdmlld01hdHJpeFsgMiBdWyAyIF0gKSApOwoJCX0gZWxzZSB7CgkJCWNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB3b3JsZFBvc2l0aW9uLnh5eiAtIGNhbWVyYVBvc2l0aW9uICk7CgkJfQoJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApOwoJCSNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OCgkJCXZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7CgkJI2Vsc2UKCQkJdlJlZmxlY3QgPSByZWZyYWN0KCBjYW1lcmFUb1ZlcnRleCwgd29ybGROb3JtYWwsIHJlZnJhY3Rpb25SYXRpbyApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsJGZyPWAjaWZkZWYgVVNFX0ZPRwoJdkZvZ0RlcHRoID0gLSBtdlBvc2l0aW9uLno7CiNlbmRpZmAsS2ZyPWAjaWZkZWYgVVNFX0ZPRwoJdmFyeWluZyBmbG9hdCB2Rm9nRGVwdGg7CiNlbmRpZmAsWmZyPWAjaWZkZWYgVVNFX0ZPRwoJI2lmZGVmIEZPR19FWFAyCgkJZmxvYXQgZm9nRmFjdG9yID0gMS4wIC0gZXhwKCAtIGZvZ0RlbnNpdHkgKiBmb2dEZW5zaXR5ICogdkZvZ0RlcHRoICogdkZvZ0RlcHRoICk7CgkjZWxzZQoJCWZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7CgkjZW5kaWYKCWdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIGdsX0ZyYWdDb2xvci5yZ2IsIGZvZ0NvbG9yLCBmb2dGYWN0b3IgKTsKI2VuZGlmYCxKZnI9YCNpZmRlZiBVU0VfRk9HCgl1bmlmb3JtIHZlYzMgZm9nQ29sb3I7Cgl2YXJ5aW5nIGZsb2F0IHZGb2dEZXB0aDsKCSNpZmRlZiBGT0dfRVhQMgoJCXVuaWZvcm0gZmxvYXQgZm9nRGVuc2l0eTsKCSNlbHNlCgkJdW5pZm9ybSBmbG9hdCBmb2dOZWFyOwoJCXVuaWZvcm0gZmxvYXQgZm9nRmFyOwoJI2VuZGlmCiNlbmRpZmAsUWZyPWAjaWZkZWYgVVNFX0dSQURJRU5UTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDsKI2VuZGlmCnZlYzMgZ2V0R3JhZGllbnRJcnJhZGlhbmNlKCB2ZWMzIG5vcm1hbCwgdmVjMyBsaWdodERpcmVjdGlvbiApIHsKCWZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGxpZ2h0RGlyZWN0aW9uICk7Cgl2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApOwoJI2lmZGVmIFVTRV9HUkFESUVOVE1BUAoJCXJldHVybiB2ZWMzKCB0ZXh0dXJlMkQoIGdyYWRpZW50TWFwLCBjb29yZCApLnIgKTsKCSNlbHNlCgkJcmV0dXJuICggY29vcmQueCA8IDAuNyApID8gdmVjMyggMC43ICkgOiB2ZWMzKCAxLjAgKTsKCSNlbmRpZgp9YCx0cHI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTsKCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCSNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUwoJCWxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTsKI2VuZGlmYCxlcHI9YCNpZmRlZiBVU0VfTElHSFRNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGxpZ2h0TWFwOwoJdW5pZm9ybSBmbG9hdCBsaWdodE1hcEludGVuc2l0eTsKI2VuZGlmYCxycHI9YHZlYzMgZGlmZnVzZSA9IHZlYzMoIDEuMCApOwpHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5OwpnZW9tZXRyeS5wb3NpdGlvbiA9IG12UG9zaXRpb24ueHl6OwpnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7Cmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApOwpHZW9tZXRyaWNDb250ZXh0IGJhY2tHZW9tZXRyeTsKYmFja0dlb21ldHJ5LnBvc2l0aW9uID0gZ2VvbWV0cnkucG9zaXRpb247CmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsOwpiYWNrR2VvbWV0cnkudmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CnZMaWdodEZyb250ID0gdmVjMyggMC4wICk7CnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTsKCXZJbmRpcmVjdEJhY2sgPSB2ZWMzKCAwLjAgKTsKI2VuZGlmCkluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQ7CmZsb2F0IGRvdE5MOwp2ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTsKdkluZGlyZWN0RnJvbnQgKz0gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmUsIGdlb21ldHJ5Lm5vcm1hbCApOwojaWZkZWYgRE9VQkxFX1NJREVECgl2SW5kaXJlY3RCYWNrICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7Cgl2SW5kaXJlY3RCYWNrICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBiYWNrR2VvbWV0cnkubm9ybWFsICk7CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0UG9pbnRMaWdodEluZm8oIHBvaW50TGlnaHRzWyBpIF0sIGdlb21ldHJ5LCBkaXJlY3RMaWdodCApOwoJCWRvdE5MID0gZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApOwoJCWRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZSA9IGRpcmVjdExpZ2h0LmNvbG9yOwoJCXZMaWdodEZyb250ICs9IHNhdHVyYXRlKCBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkxpZ2h0QmFjayArPSBzYXR1cmF0ZSggLSBkb3ROTCApICogZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlOwoJCSNlbmRpZgoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQlkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTsKCQlkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjsKCQl2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjaWZkZWYgRE9VQkxFX1NJREVECgkJCXZMaWdodEJhY2sgKz0gc2F0dXJhdGUoIC0gZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgTlVNX0RJUl9MSUdIVFMgPiAwCgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUUzsgaSArKyApIHsKCQlnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggZGlyZWN0aW9uYWxMaWdodHNbIGkgXSwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJZG90TkwgPSBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICk7CgkJZGlyZWN0TGlnaHRDb2xvcl9EaWZmdXNlID0gZGlyZWN0TGlnaHQuY29sb3I7CgkJdkxpZ2h0RnJvbnQgKz0gc2F0dXJhdGUoIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2lmZGVmIERPVUJMRV9TSURFRAoJCQl2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7CgkJI2VuZGlmCgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHsKCQl2SW5kaXJlY3RGcm9udCArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGdlb21ldHJ5Lm5vcm1hbCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdkluZGlyZWN0QmFjayArPSBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBoZW1pc3BoZXJlTGlnaHRzWyBpIF0sIGJhY2tHZW9tZXRyeS5ub3JtYWwgKTsKCQkjZW5kaWYKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZmAsbnByPWB1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdzsKdW5pZm9ybSB2ZWMzIGFtYmllbnRMaWdodENvbG9yOwp1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVsgOSBdOwp2ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkgewoJZmxvYXQgeCA9IG5vcm1hbC54LCB5ID0gbm9ybWFsLnksIHogPSBub3JtYWwuejsKCXZlYzMgcmVzdWx0ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7CglyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDIgXSAqIDIuMCAqIDAuNTExNjY0ICogejsKCXJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA1IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHkgKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApOwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6OwoJcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA4IF0gKiAwLjQyOTA0MyAqICggeCAqIHggLSB5ICogeSApOwoJcmV0dXJuIHJlc3VsdDsKfQp2ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7Cgl2ZWMzIHdvcmxkTm9ybWFsID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBzaEdldElycmFkaWFuY2VBdCggd29ybGROb3JtYWwsIGxpZ2h0UHJvYmUgKTsKCXJldHVybiBpcnJhZGlhbmNlOwp9CnZlYzMgZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBhbWJpZW50TGlnaHRDb2xvciApIHsKCXZlYzMgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yOwoJcmV0dXJuIGlycmFkaWFuY2U7Cn0KZmxvYXQgZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbiggY29uc3QgaW4gZmxvYXQgbGlnaHREaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgY3V0b2ZmRGlzdGFuY2UsIGNvbnN0IGluIGZsb2F0IGRlY2F5RXhwb25lbnQgKSB7CgkjaWYgZGVmaW5lZCAoIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMgKQoJCWZsb2F0IGRpc3RhbmNlRmFsbG9mZiA9IDEuMCAvIG1heCggcG93KCBsaWdodERpc3RhbmNlLCBkZWNheUV4cG9uZW50ICksIDAuMDEgKTsKCQlpZiAoIGN1dG9mZkRpc3RhbmNlID4gMC4wICkgewoJCQlkaXN0YW5jZUZhbGxvZmYgKj0gcG93Miggc2F0dXJhdGUoIDEuMCAtIHBvdzQoIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSApICkgKTsKCQl9CgkJcmV0dXJuIGRpc3RhbmNlRmFsbG9mZjsKCSNlbHNlCgkJaWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCAmJiBkZWNheUV4cG9uZW50ID4gMC4wICkgewoJCQlyZXR1cm4gcG93KCBzYXR1cmF0ZSggLSBsaWdodERpc3RhbmNlIC8gY3V0b2ZmRGlzdGFuY2UgKyAxLjAgKSwgZGVjYXlFeHBvbmVudCApOwoJCX0KCQlyZXR1cm4gMS4wOwoJI2VuZGlmCn0KZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7CglyZXR1cm4gc21vb3Roc3RlcCggY29uZUNvc2luZSwgcGVudW1icmFDb3NpbmUsIGFuZ2xlQ29zaW5lICk7Cn0KI2lmIE5VTV9ESVJfTElHSFRTID4gMAoJc3RydWN0IERpcmVjdGlvbmFsTGlnaHQgewoJCXZlYzMgZGlyZWN0aW9uOwoJCXZlYzMgY29sb3I7Cgl9OwoJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHRzWyBOVU1fRElSX0xJR0hUUyBdOwoJdm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQlsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7CgkJbGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247CgkJbGlnaHQudmlzaWJsZSA9IHRydWU7Cgl9CiNlbmRpZgojaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDAKCXN0cnVjdCBQb2ludExpZ2h0IHsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgY29sb3I7CgkJZmxvYXQgZGlzdGFuY2U7CgkJZmxvYXQgZGVjYXk7Cgl9OwoJdW5pZm9ybSBQb2ludExpZ2h0IHBvaW50TGlnaHRzWyBOVU1fUE9JTlRfTElHSFRTIF07Cgl2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkgewoJCXZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJbGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yOwoJCWxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTsKCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJfQojZW5kaWYKI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDAKCXN0cnVjdCBTcG90TGlnaHQgewoJCXZlYzMgcG9zaXRpb247CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBjb2xvcjsKCQlmbG9hdCBkaXN0YW5jZTsKCQlmbG9hdCBkZWNheTsKCQlmbG9hdCBjb25lQ29zOwoJCWZsb2F0IHBlbnVtYnJhQ29zOwoJfTsKCXVuaWZvcm0gU3BvdExpZ2h0IHNwb3RMaWdodHNbIE5VTV9TUE9UX0xJR0hUUyBdOwoJdm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHsKCQl2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjsKCQlsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTsKCQlmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApOwoJCWlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkgewoJCQlmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7CgkJCWxpZ2h0LmNvbG9yID0gc3BvdExpZ2h0LmNvbG9yICogc3BvdEF0dGVudWF0aW9uOwoJCQlsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApOwoJCQlsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApOwoJCX0gZWxzZSB7CgkJCWxpZ2h0LmNvbG9yID0gdmVjMyggMC4wICk7CgkJCWxpZ2h0LnZpc2libGUgPSBmYWxzZTsKCQl9Cgl9CiNlbmRpZgojaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwCglzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7CgkJdmVjMyBjb2xvcjsKCQl2ZWMzIHBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoOwoJCXZlYzMgaGFsZkhlaWdodDsKCX07Cgl1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMTsJdW5pZm9ybSBzYW1wbGVyMkQgbHRjXzI7Cgl1bmlmb3JtIFJlY3RBcmVhTGlnaHQgcmVjdEFyZWFMaWdodHNbIE5VTV9SRUNUX0FSRUFfTElHSFRTIF07CiNlbmRpZgojaWYgTlVNX0hFTUlfTElHSFRTID4gMAoJc3RydWN0IEhlbWlzcGhlcmVMaWdodCB7CgkJdmVjMyBkaXJlY3Rpb247CgkJdmVjMyBza3lDb2xvcjsKCQl2ZWMzIGdyb3VuZENvbG9yOwoJfTsKCXVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdOwoJdmVjMyBnZXRIZW1pc3BoZXJlTGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiBIZW1pc3BoZXJlTGlnaHQgaGVtaUxpZ2h0LCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQlmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBoZW1pTGlnaHQuZGlyZWN0aW9uICk7CgkJZmxvYXQgaGVtaURpZmZ1c2VXZWlnaHQgPSAwLjUgKiBkb3ROTCArIDAuNTsKCQl2ZWMzIGlycmFkaWFuY2UgPSBtaXgoIGhlbWlMaWdodC5ncm91bmRDb2xvciwgaGVtaUxpZ2h0LnNreUNvbG9yLCBoZW1pRGlmZnVzZVdlaWdodCApOwoJCXJldHVybiBpcnJhZGlhbmNlOwoJfQojZW5kaWZgLGlwcj1gI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKQoJI2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT04KCQl1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbzsKCSNlbmRpZgoJdmVjMyBnZXRJQkxJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCQkjaWYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJCXZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTsKCQkJdmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApOwoJCQlyZXR1cm4gUEkgKiBlbnZNYXBDb2xvci5yZ2IgKiBlbnZNYXBJbnRlbnNpdHk7CgkJI2Vsc2UKCQkJcmV0dXJuIHZlYzMoIDAuMCApOwoJCSNlbmRpZgoJfQoJdmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJCSNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWICkKCQkJdmVjMyByZWZsZWN0VmVjOwoJCQkjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTgoJCQkJcmVmbGVjdFZlYyA9IHJlZmxlY3QoIC0gdmlld0Rpciwgbm9ybWFsICk7CgkJCQlyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApOwoJCQkjZWxzZQoJCQkJcmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTsKCQkJI2VuZGlmCgkJCXJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7CgkJCXZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApOwoJCQlyZXR1cm4gZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5OwoJCSNlbHNlCgkJCXJldHVybiB2ZWMzKCAwLjAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCxvcHI9YFRvb25NYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtgLGFwcj1gdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CnN0cnVjdCBUb29uTWF0ZXJpYWwgewoJdmVjMyBkaWZmdXNlQ29sb3I7Cn07CnZvaWQgUkVfRGlyZWN0X1Rvb24oIGNvbnN0IGluIEluY2lkZW50TGlnaHQgZGlyZWN0TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFRvb25NYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7Cgl2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0Kdm9pZCBSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbiggY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CiNkZWZpbmUgUkVfRGlyZWN0CQkJCVJFX0RpcmVjdF9Ub29uCiNkZWZpbmUgUkVfSW5kaXJlY3REaWZmdXNlCQlSRV9JbmRpcmVjdERpZmZ1c2VfVG9vbgojZGVmaW5lIE1hdGVyaWFsX0xpZ2h0UHJvYmVMT0QoIG1hdGVyaWFsICkJKDApYCxzcHI9YEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjsKbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IHNwZWN1bGFyOwptYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyA9IHNoaW5pbmVzczsKbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7YCxscHI9YHZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwpzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHsKCXZlYzMgZGlmZnVzZUNvbG9yOwoJdmVjMyBzcGVjdWxhckNvbG9yOwoJZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7CglmbG9hdCBzcGVjdWxhclN0cmVuZ3RoOwp9Owp2b2lkIFJFX0RpcmVjdF9CbGlublBob25nKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBCbGlublBob25nTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7Cgl2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yOwoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTsKCXJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDsKfQp2b2lkIFJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIEJsaW5uUGhvbmdNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X0JsaW5uUGhvbmcKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9CbGlublBob25nCiNkZWZpbmUgTWF0ZXJpYWxfTGlnaHRQcm9iZUxPRCggbWF0ZXJpYWwgKQkoMClgLGNwcj1gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDsKbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7CnZlYzMgZHh5ID0gbWF4KCBhYnMoIGRGZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkRmR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTsKZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTttYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7Cm1hdGVyaWFsLnJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwucm91Z2huZXNzLCAxLjAgKTsKI2lmZGVmIElPUgoJI2lmZGVmIFNQRUNVTEFSCgkJZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgPSBzcGVjdWxhckludGVuc2l0eTsKCQl2ZWMzIHNwZWN1bGFyQ29sb3JGYWN0b3IgPSBzcGVjdWxhckNvbG9yOwoJCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQkJc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTsKCQkjZW5kaWYKCQkjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVAKCQkJc3BlY3VsYXJDb2xvckZhY3RvciAqPSB0ZXh0dXJlMkQoIHNwZWN1bGFyQ29sb3JNYXAsIHZVdiApLnJnYjsKCQkjZW5kaWYKCQltYXRlcmlhbC5zcGVjdWxhckY5MCA9IG1peCggc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIDEuMCwgbWV0YWxuZXNzRmFjdG9yICk7CgkjZWxzZQoJCWZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wOwoJCXZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApOwoJCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwoJI2VuZGlmCgltYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggaW9yIC0gMS4wICkgLyAoIGlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApOwojZWxzZQoJbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMyggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTsKCW1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCW1hdGVyaWFsLmNsZWFyY29hdCA9IGNsZWFyY29hdDsKCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzczsKCW1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMyggMC4wNCApOwoJbWF0ZXJpYWwuY2xlYXJjb2F0RjkwID0gMS4wOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVRNQVAKCQltYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7CgkjZW5kaWYKCSNpZmRlZiBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUAoJCW1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIGNsZWFyY29hdFJvdWdobmVzc01hcCwgdlV2ICkueTsKCSNlbmRpZgoJbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApOwltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7CgltYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMS4wICk7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgltYXRlcmlhbC5zaGVlbkNvbG9yID0gc2hlZW5Db2xvcjsKCSNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUAoJCW1hdGVyaWFsLnNoZWVuQ29sb3IgKj0gdGV4dHVyZTJEKCBzaGVlbkNvbG9yTWFwLCB2VXYgKS5yZ2I7CgkjZW5kaWYKCW1hdGVyaWFsLnNoZWVuUm91Z2huZXNzID0gY2xhbXAoIHNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTsKCSNpZmRlZiBVU0VfU0hFRU5ST1VHSE5FU1NNQVAKCQltYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPSB0ZXh0dXJlMkQoIHNoZWVuUm91Z2huZXNzTWFwLCB2VXYgKS5hOwoJI2VuZGlmCiNlbmRpZmAsdXByPWBzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7Cgl2ZWMzIGRpZmZ1c2VDb2xvcjsKCWZsb2F0IHJvdWdobmVzczsKCXZlYzMgc3BlY3VsYXJDb2xvcjsKCWZsb2F0IHNwZWN1bGFyRjkwOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBjbGVhcmNvYXQ7CgkJZmxvYXQgY2xlYXJjb2F0Um91Z2huZXNzOwoJCXZlYzMgY2xlYXJjb2F0RjA7CgkJZmxvYXQgY2xlYXJjb2F0RjkwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOCgkJdmVjMyBzaGVlbkNvbG9yOwoJCWZsb2F0IHNoZWVuUm91Z2huZXNzOwoJI2VuZGlmCn07CnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTsKdmVjMyBzaGVlblNwZWN1bGFyID0gdmVjMyggMC4wICk7CmZsb2F0IElCTFNoZWVuQlJERiggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzKSB7CglmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7CglmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzczsKCWZsb2F0IGEgPSByb3VnaG5lc3MgPCAwLjI1ID8gLTMzOS4yICogcjIgKyAxNjEuNCAqIHJvdWdobmVzcyAtIDI1LjkgOiAtOC40OCAqIHIyICsgMTQuMyAqIHJvdWdobmVzcyAtIDkuOTU7CglmbG9hdCBiID0gcm91Z2huZXNzIDwgMC4yNSA/IDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2IDogMS45NyAqIHIyIC0gMy4yNyAqIHJvdWdobmVzcyArIDAuNzI7CglmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTsKCXJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7Cn0KdmVjMiBERkdBcHByb3goIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHsKCWZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTsKCWNvbnN0IHZlYzQgYzAgPSB2ZWM0KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApOwoJY29uc3QgdmVjNCBjMSA9IHZlYzQoIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7Cgl2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxOwoJZmxvYXQgYTAwNCA9IG1pbiggci54ICogci54LCBleHAyKCAtIDkuMjggKiBkb3ROViApICkgKiByLnggKyByLnk7Cgl2ZWMyIGZhYiA9IHZlYzIoIC0gMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7CglyZXR1cm4gZmFiOwp9CnZlYzMgRW52aXJvbm1lbnRCUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7Cgl2ZWMyIGZhYiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTsKCXJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55Owp9CnZvaWQgY29tcHV0ZU11bHRpc2NhdHRlcmluZyggY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBpbm91dCB2ZWMzIHNpbmdsZVNjYXR0ZXIsIGlub3V0IHZlYzMgbXVsdGlTY2F0dGVyICkgewoJdmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7Cgl2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7CglmbG9hdCBFc3MgPSBmYWIueCArIGZhYi55OwoJZmxvYXQgRW1zID0gMS4wIC0gRXNzOwoJdmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7CXZlYzMgRm1zID0gRnNzRXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApOwoJc2luZ2xlU2NhdHRlciArPSBGc3NFc3M7CgltdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zOwp9CiNpZiBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAKCXZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJCXZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsOwoJCXZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7CgkJdmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uOwoJCXZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uOwoJCXZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7CgkJdmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0OwoJCXZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7CgkJZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzOwoJCXZlYzMgcmVjdENvb3Jkc1sgNCBdOwoJCXJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDsJCXJlY3RDb29yZHNbIDEgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoIC0gaGFsZkhlaWdodDsKCQlyZWN0Q29vcmRzWyAyIF0gPSBsaWdodFBvcyAtIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7CgkJcmVjdENvb3Jkc1sgMyBdID0gbGlnaHRQb3MgKyBoYWxmV2lkdGggKyBoYWxmSGVpZ2h0OwoJCXZlYzIgdXYgPSBMVENfVXYoIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7CgkJdmVjNCB0MSA9IHRleHR1cmUyRCggbHRjXzEsIHV2ICk7CgkJdmVjNCB0MiA9IHRleHR1cmUyRCggbHRjXzIsIHV2ICk7CgkJbWF0MyBtSW52ID0gbWF0MygKCQkJdmVjMyggdDEueCwgMCwgdDEueSApLAoJCQl2ZWMzKCAgICAwLCAxLCAgICAwICksCgkJCXZlYzMoIHQxLnosIDAsIHQxLncgKQoJCSk7CgkJdmVjMyBmcmVzbmVsID0gKCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICogdDIueCArICggdmVjMyggMS4wICkgLSBtYXRlcmlhbC5zcGVjdWxhckNvbG9yICkgKiB0Mi55ICk7CgkJcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz0gbGlnaHRDb2xvciAqIGZyZXNuZWwgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1JbnYsIHJlY3RDb29yZHMgKTsKCQlyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGxpZ2h0Q29sb3IgKiBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiBMVENfRXZhbHVhdGUoIG5vcm1hbCwgdmlld0RpciwgcG9zaXRpb24sIG1hdDMoIDEuMCApLCByZWN0Q29vcmRzICk7Cgl9CiNlbmRpZgp2b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7CglmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7CgkjaWZkZWYgVVNFX0NMRUFSQ09BVAoJCWZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7CgkJdmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7CgkJY2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfU2hlZW4oIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zaGVlbkNvbG9yLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApOwoJI2VuZGlmCglyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBpcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7CglyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkgewoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApOwp9CnZvaWQgUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBpcnJhZGlhbmNlLCBjb25zdCBpbiB2ZWMzIGNsZWFyY29hdFJhZGlhbmNlLCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBQaHlzaWNhbE1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCkgewoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TSEVFTgoJCXNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLnNoZWVuQ29sb3IgKiBJQkxTaGVlbkJSREYoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTsKCSNlbmRpZgoJdmVjMyBzaW5nbGVTY2F0dGVyaW5nID0gdmVjMyggMC4wICk7Cgl2ZWMzIG11bHRpU2NhdHRlcmluZyA9IHZlYzMoIDAuMCApOwoJdmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTsKCWNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcywgc2luZ2xlU2NhdHRlcmluZywgbXVsdGlTY2F0dGVyaW5nICk7Cgl2ZWMzIGRpZmZ1c2UgPSBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKiAoIDEuMCAtICggc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZyApICk7CglyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZzsKCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKz0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlOwoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7Cn0KI2RlZmluZSBSRV9EaXJlY3QJCQkJUkVfRGlyZWN0X1BoeXNpY2FsCiNkZWZpbmUgUkVfRGlyZWN0X1JlY3RBcmVhCQlSRV9EaXJlY3RfUmVjdEFyZWFfUGh5c2ljYWwKI2RlZmluZSBSRV9JbmRpcmVjdERpZmZ1c2UJCVJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbAojZGVmaW5lIFJFX0luZGlyZWN0U3BlY3VsYXIJCVJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwKZmxvYXQgY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBjb25zdCBpbiBmbG9hdCBkb3ROViwgY29uc3QgaW4gZmxvYXQgYW1iaWVudE9jY2x1c2lvbiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkgewoJcmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTsKfWAsaHByPWAKR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTsKZ2VvbWV0cnkucG9zaXRpb24gPSAtIHZWaWV3UG9zaXRpb247Cmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbDsKZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApOwojaWZkZWYgVVNFX0NMRUFSQ09BVAoJZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsOwojZW5kaWYKSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodDsKI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJUG9pbnRMaWdodCBwb2ludExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdzsKCSNlbmRpZgoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHsKCQlwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTsKCQlnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7CgkJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApCgkJcG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7CgkJI2VuZGlmCgkJUkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKI2VuZGlmCiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJU3BvdExpZ2h0IHNwb3RMaWdodDsKCSNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCVNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07CgkJZ2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKQoJCXNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTsKCQlkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKQoJRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0OwoJI2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7CgkjZW5kaWYKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkgewoJCWRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdOwoJCWdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTsKCQkjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApCgkJZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJCSNlbmRpZgoJCVJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCiNlbmRpZgojaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKQoJUmVjdEFyZWFMaWdodCByZWN0QXJlYUxpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7CgkJcmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07CgkJUkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgl2ZWMzIGlibElycmFkaWFuY2UgPSB2ZWMzKCAwLjAgKTsKCXZlYzMgaXJyYWRpYW5jZSA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7CglpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNpZiAoIE5VTV9IRU1JX0xJR0hUUyA+IDAgKQoJCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7CgkJCWlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTsKCQl9CgkJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0U3BlY3VsYXIgKQoJdmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApOwoJdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSA9IHZlYzMoIDAuMCApOwojZW5kaWZgLGZwcj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCgkjaWZkZWYgVVNFX0xJR0hUTUFQCgkJdmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXZlYzMgbGlnaHRNYXBJcnJhZGlhbmNlID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTsKCQkjaWZuZGVmIFBIWVNJQ0FMTFlfQ09SUkVDVF9MSUdIVFMKCQkJbGlnaHRNYXBJcnJhZGlhbmNlICo9IFBJOwoJCSNlbmRpZgoJCWlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlOwoJI2VuZGlmCgkjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApCgkJaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTsKCSNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoIFVTRV9FTlZNQVAgKSAmJiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCXJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApOwoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQljbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTsKCSNlbmRpZgojZW5kaWZgLHBwcj1gI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApCglSRV9JbmRpcmVjdERpZmZ1c2UoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTsKI2VuZGlmCiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyICkKCVJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApOwojZW5kaWZgLGRwcj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJZ2xfRnJhZ0RlcHRoRVhUID0gdklzUGVyc3BlY3RpdmUgPT0gMC4wID8gZ2xfRnJhZ0Nvb3JkLnogOiBsb2cyKCB2RnJhZ0RlcHRoICkgKiBsb2dEZXB0aEJ1ZkZDICogMC41OwojZW5kaWZgLG1wcj1gI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKQoJdW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDOwoJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJdmFyeWluZyBmbG9hdCB2SXNQZXJzcGVjdGl2ZTsKI2VuZGlmYCxncHI9YCNpZmRlZiBVU0VfTE9HREVQVEhCVUYKCSNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUCgkJdmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoOwoJCXZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7CgkjZWxzZQoJCXVuaWZvcm0gZmxvYXQgbG9nRGVwdGhCdWZGQzsKCSNlbmRpZgojZW5kaWZgLF9wcj1gI2lmZGVmIFVTRV9MT0dERVBUSEJVRgoJI2lmZGVmIFVTRV9MT0dERVBUSEJVRl9FWFQKCQl2RnJhZ0RlcHRoID0gMS4wICsgZ2xfUG9zaXRpb24udzsKCQl2SXNQZXJzcGVjdGl2ZSA9IGZsb2F0KCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKTsKCSNlbHNlCgkJaWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7CgkJCWdsX1Bvc2l0aW9uLnogPSBsb2cyKCBtYXgoIEVQU0lMT04sIGdsX1Bvc2l0aW9uLncgKyAxLjAgKSApICogbG9nRGVwdGhCdWZGQyAtIDEuMDsKCQkJZ2xfUG9zaXRpb24ueiAqPSBnbF9Qb3NpdGlvbi53OwoJCX0KCSNlbmRpZgojZW5kaWZgLHlwcj1gI2lmZGVmIFVTRV9NQVAKCXZlYzQgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHRleHR1cmUyRCggbWFwLCB2VXYgKTsKCSNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRQoJCXNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApOwoJI2VuZGlmCglkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjsKI2VuZGlmYCx2cHI9YCNpZmRlZiBVU0VfTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBtYXA7CiNlbmRpZmAseHByPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTsKI2VuZGlmCiNpZmRlZiBVU0VfTUFQCglkaWZmdXNlQ29sb3IgKj0gdGV4dHVyZTJEKCBtYXAsIHV2ICk7CiNlbmRpZgojaWZkZWYgVVNFX0FMUEhBTUFQCglkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB1diApLmc7CiNlbmRpZmAsYnByPWAjaWYgZGVmaW5lZCggVVNFX01BUCApIHx8IGRlZmluZWQoIFVTRV9BTFBIQU1BUCApCgl1bmlmb3JtIG1hdDMgdXZUcmFuc2Zvcm07CiNlbmRpZgojaWZkZWYgVVNFX01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWFwOwojZW5kaWYKI2lmZGVmIFVTRV9BTFBIQU1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7CiNlbmRpZmAsd3ByPWBmbG9hdCBtZXRhbG5lc3NGYWN0b3IgPSBtZXRhbG5lc3M7CiNpZmRlZiBVU0VfTUVUQUxORVNTTUFQCgl2ZWM0IHRleGVsTWV0YWxuZXNzID0gdGV4dHVyZTJEKCBtZXRhbG5lc3NNYXAsIHZVdiApOwoJbWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7CiNlbmRpZmAsU3ByPWAjaWZkZWYgVVNFX01FVEFMTkVTU01BUAoJdW5pZm9ybSBzYW1wbGVyMkQgbWV0YWxuZXNzTWFwOwojZW5kaWZgLE1wcj1gI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMKCW9iamVjdE5vcm1hbCAqPSBtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7CgkjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkUKCQlmb3IgKCBpbnQgaSA9IDA7IGkgPCBNT1JQSFRBUkdFVFNfQ09VTlQ7IGkgKysgKSB7CgkJCWlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJfQoJI2Vsc2UKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMSAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdOwoJCW9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTsKCQlvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkjZW5kaWYKI2VuZGlmYCxFcHI9YCNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTCgl1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBNT1JQSFRBUkdFVFNfQ09VTlQgXTsKCQl1bmlmb3JtIHNhbXBsZXIyREFycmF5IG1vcnBoVGFyZ2V0c1RleHR1cmU7CgkJdW5pZm9ybSB2ZWMyIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplOwoJCXZlYzMgZ2V0TW9ycGgoIGNvbnN0IGluIGludCB2ZXJ0ZXhJbmRleCwgY29uc3QgaW4gaW50IG1vcnBoVGFyZ2V0SW5kZXgsIGNvbnN0IGluIGludCBvZmZzZXQsIGNvbnN0IGluIGludCBzdHJpZGUgKSB7CgkJCWZsb2F0IHRleGVsSW5kZXggPSBmbG9hdCggdmVydGV4SW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKTsKCQkJZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApOwoJCQlmbG9hdCB4ID0gdGV4ZWxJbmRleCAtIHkgKiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS54OwoJCQl2ZWMzIG1vcnBoVVYgPSB2ZWMzKCAoIHggKyAwLjUgKSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLngsIHkgLyBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZS55LCBtb3JwaFRhcmdldEluZGV4ICk7CgkJCXJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6OwoJCX0KCSNlbHNlCgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07CgkJI2Vsc2UKCQkJdW5pZm9ybSBmbG9hdCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTsKCQkjZW5kaWYKCSNlbmRpZgojZW5kaWZgLFRwcj1gI2lmZGVmIFVTRV9NT1JQSFRBUkdFVFMKCXRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTsKCSNpZmRlZiBNT1JQSFRBUkdFVFNfVEVYVFVSRQoJCWZvciAoIGludCBpID0gMDsgaSA8IE1PUlBIVEFSR0VUU19DT1VOVDsgaSArKyApIHsKCQkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMSApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbHNlCgkJCQlpZiAoIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICE9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCwgMiApICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07CgkJCSNlbmRpZgoJCX0KCSNlbHNlCgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQwICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQxICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07CgkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQzICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07CgkJI2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTCgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdOwoJCQl0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDUgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDUgXTsKCQkJdHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ2ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA2IF07CgkJCXRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZmAsQ3ByPWBmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDsKI2lmZGVmIEZMQVRfU0hBREVECgl2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTsKCXZlYzMgZmR5ID0gdmVjMyggZEZkeSggdlZpZXdQb3NpdGlvbi54ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueSApLCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnogKSApOwoJdmVjMyBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKCBmZHgsIGZkeSApICk7CiNlbHNlCgl2ZWMzIG5vcm1hbCA9IG5vcm1hbGl6ZSggdk5vcm1hbCApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCSNpZmRlZiBVU0VfVEFOR0VOVAoJCXZlYzMgdGFuZ2VudCA9IG5vcm1hbGl6ZSggdlRhbmdlbnQgKTsKCQl2ZWMzIGJpdGFuZ2VudCA9IG5vcm1hbGl6ZSggdkJpdGFuZ2VudCApOwoJCSNpZmRlZiBET1VCTEVfU0lERUQKCQkJdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCQliaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uOwoJCSNlbmRpZgoJCSNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKQoJCQltYXQzIHZUQk4gPSBtYXQzKCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApOwoJCSNlbmRpZgoJI2VuZGlmCiNlbmRpZgp2ZWMzIGdlb21ldHJ5Tm9ybWFsID0gbm9ybWFsO2AsQXByPWAjaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCglub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wOwoJI2lmZGVmIEZMSVBfU0lERUQKCQlub3JtYWwgPSAtIG5vcm1hbDsKCSNlbmRpZgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCW5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247CgkjZW5kaWYKCW5vcm1hbCA9IG5vcm1hbGl6ZSggbm9ybWFsTWF0cml4ICogbm9ybWFsICk7CiNlbGlmIGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmVjMyBtYXBOID0gdGV4dHVyZTJEKCBub3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCW1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQlub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7CgkjZWxzZQoJCW5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIG5vcm1hbCwgbWFwTiwgZmFjZURpcmVjdGlvbiApOwoJI2VuZGlmCiNlbGlmIGRlZmluZWQoIFVTRV9CVU1QTUFQICkKCW5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApOwojZW5kaWZgLFBwcj1gI2lmbmRlZiBGTEFUX1NIQURFRAoJdmFyeWluZyB2ZWMzIHZOb3JtYWw7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQl2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7CgkJdmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7CgkjZW5kaWYKI2VuZGlmYCxJcHI9YCNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdmFyeWluZyB2ZWMzIHZUYW5nZW50OwoJCXZhcnlpbmcgdmVjMyB2Qml0YW5nZW50OwoJI2VuZGlmCiNlbmRpZmAsTHByPWAjaWZuZGVmIEZMQVRfU0hBREVECgl2Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApOwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJdlRhbmdlbnQgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkVGFuZ2VudCApOwoJCXZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogdGFuZ2VudC53ICk7CgkjZW5kaWYKI2VuZGlmYCxrcHI9YCNpZmRlZiBVU0VfTk9STUFMTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBub3JtYWxNYXA7Cgl1bmlmb3JtIHZlYzIgbm9ybWFsU2NhbGU7CiNlbmRpZgojaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQCgl1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OwojZW5kaWYKI2lmICEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApIHx8IGRlZmluZWQgKCBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCApICkKCXZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHsKCQl2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApOwoJCXZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7CgkJdmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTsKCQl2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApOwoJCXZlYzMgTiA9IHN1cmZfbm9ybTsKCQl2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApOwoJCXZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7CgkJdmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDsKCQl2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55OwoJCWZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7CgkJZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7CgkJcmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7Cgl9CiNlbmRpZmAsUnByPWAjaWZkZWYgVVNFX0NMRUFSQ09BVAoJdmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDsKI2VuZGlmYCxOcHI9YCNpZmRlZiBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUAoJdmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDsKCWNsZWFyY29hdE1hcE4ueHkgKj0gY2xlYXJjb2F0Tm9ybWFsU2NhbGU7CgkjaWZkZWYgVVNFX1RBTkdFTlQKCQljbGVhcmNvYXROb3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBjbGVhcmNvYXRNYXBOICk7CgkjZWxzZQoJCWNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApOwoJI2VuZGlmCiNlbmRpZmAsRHByPWAjaWZkZWYgVVNFX0NMRUFSQ09BVE1BUAoJdW5pZm9ybSBzYW1wbGVyMkQgY2xlYXJjb2F0TWFwOwojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCBjbGVhcmNvYXRSb3VnaG5lc3NNYXA7CiNlbmRpZgojaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDsKCXVuaWZvcm0gdmVjMiBjbGVhcmNvYXROb3JtYWxTY2FsZTsKI2VuZGlmYCxPcHI9YCNpZmRlZiBPUEFRVUUKZGlmZnVzZUNvbG9yLmEgPSAxLjA7CiNlbmRpZgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgpkaWZmdXNlQ29sb3IuYSAqPSB0cmFuc21pc3Npb25BbHBoYSArIDAuMTsKI2VuZGlmCmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7YCx6cHI9YHZlYzMgcGFja05vcm1hbFRvUkdCKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCApIHsKCXJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41Owp9CnZlYzMgdW5wYWNrUkdCVG9Ob3JtYWwoIGNvbnN0IGluIHZlYzMgcmdiICkgewoJcmV0dXJuIDIuMCAqIHJnYi54eXogLSAxLjA7Cn0KY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjsKY29uc3QgdmVjMyBQYWNrRmFjdG9ycyA9IHZlYzMoIDI1Ni4gKiAyNTYuICogMjU2LiwgMjU2LiAqIDI1Ni4sIDI1Ni4gKTsKY29uc3QgdmVjNCBVbnBhY2tGYWN0b3JzID0gVW5wYWNrRG93bnNjYWxlIC8gdmVjNCggUGFja0ZhY3RvcnMsIDEuICk7CmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuOwp2ZWM0IHBhY2tEZXB0aFRvUkdCQSggY29uc3QgaW4gZmxvYXQgdiApIHsKCXZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApOwoJci55encgLT0gci54eXogKiBTaGlmdFJpZ2h0ODsJcmV0dXJuIHIgKiBQYWNrVXBzY2FsZTsKfQpmbG9hdCB1bnBhY2tSR0JBVG9EZXB0aCggY29uc3QgaW4gdmVjNCB2ICkgewoJcmV0dXJuIGRvdCggdiwgVW5wYWNrRmFjdG9ycyApOwp9CnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7Cgl2ZWM0IHIgPSB2ZWM0KCB2LngsIGZyYWN0KCB2LnggKiAyNTUuMCApLCB2LnksIGZyYWN0KCB2LnkgKiAyNTUuMCApICk7CglyZXR1cm4gdmVjNCggci54IC0gci55IC8gMjU1LjAsIHIueSwgci56IC0gci53IC8gMjU1LjAsIHIudyApOwp9CnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHsKCXJldHVybiB2ZWMyKCB2LnggKyAoIHYueSAvIDI1NS4wICksIHYueiArICggdi53IC8gMjU1LjAgKSApOwp9CmZsb2F0IHZpZXdaVG9PcnRob2dyYXBoaWNEZXB0aCggY29uc3QgaW4gZmxvYXQgdmlld1osIGNvbnN0IGluIGZsb2F0IG5lYXIsIGNvbnN0IGluIGZsb2F0IGZhciApIHsKCXJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7Cn0KZmxvYXQgb3J0aG9ncmFwaGljRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBsaW5lYXJDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuIGxpbmVhckNsaXBaICogKCBuZWFyIC0gZmFyICkgLSBuZWFyOwp9CmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkgewoJcmV0dXJuICggKCBuZWFyICsgdmlld1ogKSAqIGZhciApIC8gKCAoIGZhciAtIG5lYXIgKSAqIHZpZXdaICk7Cn0KZmxvYXQgcGVyc3BlY3RpdmVEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGludkNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7CglyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTsKfWAsRnByPWAjaWZkZWYgUFJFTVVMVElQTElFRF9BTFBIQQoJZ2xfRnJhZ0NvbG9yLnJnYiAqPSBnbF9GcmFnQ29sb3IuYTsKI2VuZGlmYCxCcHI9YHZlYzQgbXZQb3NpdGlvbiA9IHZlYzQoIHRyYW5zZm9ybWVkLCAxLjAgKTsKI2lmZGVmIFVTRV9JTlNUQU5DSU5HCgltdlBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uOwojZW5kaWYKbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247CmdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247YCxIcHI9YCNpZmRlZiBESVRIRVJJTkcKCWdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxWcHI9YCNpZmRlZiBESVRIRVJJTkcKCXZlYzMgZGl0aGVyaW5nKCB2ZWMzIGNvbG9yICkgewoJCWZsb2F0IGdyaWRfcG9zaXRpb24gPSByYW5kKCBnbF9GcmFnQ29vcmQueHkgKTsKCQl2ZWMzIGRpdGhlcl9zaGlmdF9SR0IgPSB2ZWMzKCAwLjI1IC8gMjU1LjAsIC0wLjI1IC8gMjU1LjAsIDAuMjUgLyAyNTUuMCApOwoJCWRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7CgkJcmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjsKCX0KI2VuZGlmYCxVcHI9YGZsb2F0IHJvdWdobmVzc0ZhY3RvciA9IHJvdWdobmVzczsKI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVAKCXZlYzQgdGV4ZWxSb3VnaG5lc3MgPSB0ZXh0dXJlMkQoIHJvdWdobmVzc01hcCwgdlV2ICk7Cglyb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZzsKI2VuZGlmYCxxcHI9YCNpZmRlZiBVU0VfUk9VR0hORVNTTUFQCgl1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7CiNlbmRpZmAsR3ByPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAKCQl1bmlmb3JtIHNhbXBsZXIyRCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BvdFNoYWRvd01hcFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFNwb3RMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0U2hhZG93c1sgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCgkjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHsKCQkJZmxvYXQgc2hhZG93QmlhczsKCQkJZmxvYXQgc2hhZG93Tm9ybWFsQmlhczsKCQkJZmxvYXQgc2hhZG93UmFkaXVzOwoJCQl2ZWMyIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYU5lYXI7CgkJCWZsb2F0IHNoYWRvd0NhbWVyYUZhcjsKCQl9OwoJCXVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJZmxvYXQgdGV4dHVyZTJEQ29tcGFyZSggc2FtcGxlcjJEIGRlcHRocywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApIHsKCQlyZXR1cm4gc3RlcCggY29tcGFyZSwgdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggZGVwdGhzLCB1diApICkgKTsKCX0KCXZlYzIgdGV4dHVyZTJERGlzdHJpYnV0aW9uKCBzYW1wbGVyMkQgc2hhZG93LCB2ZWMyIHV2ICkgewoJCXJldHVybiB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3csIHV2ICkgKTsKCX0KCWZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApewoJCWZsb2F0IG9jY2x1c2lvbiA9IDEuMDsKCQl2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApOwoJCWZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7CgkJaWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHsKCQkJZmxvYXQgZGlzdGFuY2UgPSBjb21wYXJlIC0gZGlzdHJpYnV0aW9uLnggOwoJCQlmbG9hdCB2YXJpYW5jZSA9IG1heCggMC4wMDAwMCwgZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSApOwoJCQlmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApOwkJCXNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApOwkJCW9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApOwoJCX0KCQlyZXR1cm4gb2NjbHVzaW9uOwoJfQoJZmxvYXQgZ2V0U2hhZG93KCBzYW1wbGVyMkQgc2hhZG93TWFwLCB2ZWMyIHNoYWRvd01hcFNpemUsIGZsb2F0IHNoYWRvd0JpYXMsIGZsb2F0IHNoYWRvd1JhZGl1cywgdmVjNCBzaGFkb3dDb29yZCApIHsKCQlmbG9hdCBzaGFkb3cgPSAxLjA7CgkJc2hhZG93Q29vcmQueHl6IC89IHNoYWRvd0Nvb3JkLnc7CgkJc2hhZG93Q29vcmQueiArPSBzaGFkb3dCaWFzOwoJCWJ2ZWM0IGluRnJ1c3R1bVZlYyA9IGJ2ZWM0ICggc2hhZG93Q29vcmQueCA+PSAwLjAsIHNoYWRvd0Nvb3JkLnggPD0gMS4wLCBzaGFkb3dDb29yZC55ID49IDAuMCwgc2hhZG93Q29vcmQueSA8PSAxLjAgKTsKCQlib29sIGluRnJ1c3R1bSA9IGFsbCggaW5GcnVzdHVtVmVjICk7CgkJYnZlYzIgZnJ1c3R1bVRlc3RWZWMgPSBidmVjMiggaW5GcnVzdHVtLCBzaGFkb3dDb29yZC56IDw9IDEuMCApOwoJCWJvb2wgZnJ1c3R1bVRlc3QgPSBhbGwoIGZydXN0dW1UZXN0VmVjICk7CgkJaWYgKCBmcnVzdHVtVGVzdCApIHsKCQkjaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfUENGICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MCA9IC0gdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MSA9ICsgdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7CgkJCWZsb2F0IGR4MiA9IGR4MCAvIDIuMDsKCQkJZmxvYXQgZHkyID0gZHkwIC8gMi4wOwoJCQlmbG9hdCBkeDMgPSBkeDEgLyAyLjA7CgkJCWZsb2F0IGR5MyA9IGR5MSAvIDIuMDsKCQkJc2hhZG93ID0gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgzLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MiwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56ICkKCQkJKSAqICggMS4wIC8gMTcuMCApOwoJCSNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkKCQkJdmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvIHNoYWRvd01hcFNpemU7CgkJCWZsb2F0IGR4ID0gdGV4ZWxTaXplLng7CgkJCWZsb2F0IGR5ID0gdGV4ZWxTaXplLnk7CgkJCXZlYzIgdXYgPSBzaGFkb3dDb29yZC54eTsKCQkJdmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApOwoJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQlzaGFkb3cgPSAoCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2LCBzaGFkb3dDb29yZC56ICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICsKCQkJCXRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdGV4ZWxTaXplLCBzaGFkb3dDb29yZC56ICkgKwoJCQkJbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgCgkJCQkJIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgZHkgKSwgc2hhZG93Q29vcmQueiApLAoJCQkJCSBmLnggKSArCgkJCQltaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAwLjAsIC1keSApLCBzaGFkb3dDb29yZC56ICksIAoJCQkJCSB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJIGYueSApICsKCQkJCW1peCggbWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksCgkJCQkJCSAgZi54ICksCgkJCQkJIG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLCAKCQkJCQkJICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwKCQkJCQkJICBmLnggKSwKCQkJCQkgZi55ICkKCQkJKSAqICggMS4wIC8gOS4wICk7CgkJI2VsaWYgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJc2hhZG93ID0gVlNNU2hhZG93KCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5LCBzaGFkb3dDb29yZC56ICk7CgkJI2Vsc2UKCQkJc2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApOwoJCSNlbmRpZgoJCX0KCQlyZXR1cm4gc2hhZG93OwoJfQoJdmVjMiBjdWJlVG9VViggdmVjMyB2LCBmbG9hdCB0ZXhlbFNpemVZICkgewoJCXZlYzMgYWJzViA9IGFicyggdiApOwoJCWZsb2F0IHNjYWxlVG9DdWJlID0gMS4wIC8gbWF4KCBhYnNWLngsIG1heCggYWJzVi55LCBhYnNWLnogKSApOwoJCWFic1YgKj0gc2NhbGVUb0N1YmU7CgkJdiAqPSBzY2FsZVRvQ3ViZSAqICggMS4wIC0gMi4wICogdGV4ZWxTaXplWSApOwoJCXZlYzIgcGxhbmFyID0gdi54eTsKCQlmbG9hdCBhbG1vc3RBVGV4ZWwgPSAxLjUgKiB0ZXhlbFNpemVZOwoJCWZsb2F0IGFsbW9zdE9uZSA9IDEuMCAtIGFsbW9zdEFUZXhlbDsKCQlpZiAoIGFic1YueiA+PSBhbG1vc3RPbmUgKSB7CgkJCWlmICggdi56ID4gMC4wICkKCQkJCXBsYW5hci54ID0gNC4wIC0gdi54OwoJCX0gZWxzZSBpZiAoIGFic1YueCA+PSBhbG1vc3RPbmUgKSB7CgkJCWZsb2F0IHNpZ25YID0gc2lnbiggdi54ICk7CgkJCXBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDsKCQl9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkgewoJCQlmbG9hdCBzaWduWSA9IHNpZ24oIHYueSApOwoJCQlwbGFuYXIueCA9IHYueCArIDIuMCAqIHNpZ25ZICsgMi4wOwoJCQlwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wOwoJCX0KCQlyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7Cgl9CglmbG9hdCBnZXRQb2ludFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQsIGZsb2F0IHNoYWRvd0NhbWVyYU5lYXIsIGZsb2F0IHNoYWRvd0NhbWVyYUZhciApIHsKCQl2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gKCBzaGFkb3dNYXBTaXplICogdmVjMiggNC4wLCAyLjAgKSApOwoJCXZlYzMgbGlnaHRUb1Bvc2l0aW9uID0gc2hhZG93Q29vcmQueHl6OwoJCWZsb2F0IGRwID0gKCBsZW5ndGgoIGxpZ2h0VG9Qb3NpdGlvbiApIC0gc2hhZG93Q2FtZXJhTmVhciApIC8gKCBzaGFkb3dDYW1lcmFGYXIgLSBzaGFkb3dDYW1lcmFOZWFyICk7CQlkcCArPSBzaGFkb3dCaWFzOwoJCXZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7CgkJI2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNICkKCQkJdmVjMiBvZmZzZXQgPSB2ZWMyKCAtIDEsIDEgKSAqIHNoYWRvd1JhZGl1cyAqIHRleGVsU2l6ZS55OwoJCQlyZXR1cm4gKAoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC54eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXgsIHRleGVsU2l6ZS55ICksIGRwICkgKwoJCQkJdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eSwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArCgkJCQl0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnl4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKQoJCQkpICogKCAxLjAgLyA5LjAgKTsKCQkjZWxzZQoJCQlyZXR1cm4gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKTsKCQkjZW5kaWYKCX0KI2VuZGlmYCxXcHI9YCNpZmRlZiBVU0VfU0hBRE9XTUFQCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07CgkJdmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCQlzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7CgkJCWZsb2F0IHNoYWRvd0JpYXM7CgkJCWZsb2F0IHNoYWRvd05vcm1hbEJpYXM7CgkJCWZsb2F0IHNoYWRvd1JhZGl1czsKCQkJdmVjMiBzaGFkb3dNYXBTaXplOwoJCX07CgkJdW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCgkJdW5pZm9ybSBtYXQ0IHNwb3RTaGFkb3dNYXRyaXhbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdOwoJCXN0cnVjdCBTcG90TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQl9OwoJCXVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTsKCSNlbmRpZgoJI2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMAoJCXVuaWZvcm0gbWF0NCBwb2ludFNoYWRvd01hdHJpeFsgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTsKCQl2YXJ5aW5nIHZlYzQgdlBvaW50U2hhZG93Q29vcmRbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07CgkJc3RydWN0IFBvaW50TGlnaHRTaGFkb3cgewoJCQlmbG9hdCBzaGFkb3dCaWFzOwoJCQlmbG9hdCBzaGFkb3dOb3JtYWxCaWFzOwoJCQlmbG9hdCBzaGFkb3dSYWRpdXM7CgkJCXZlYzIgc2hhZG93TWFwU2l6ZTsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjsKCQkJZmxvYXQgc2hhZG93Q2FtZXJhRmFyOwoJCX07CgkJdW5pZm9ybSBQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHRTaGFkb3dzWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdOwoJI2VuZGlmCiNlbmRpZmAsWXByPWAjaWZkZWYgVVNFX1NIQURPV01BUAoJI2lmIE5VTV9ESVJfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAgfHwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwCgkJdmVjMyBzaGFkb3dXb3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7CgkJdmVjNCBzaGFkb3dXb3JsZFBvc2l0aW9uOwoJI2VuZGlmCgkjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMAoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCgkjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJc2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7CgkJdlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTsKCQl2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247Cgl9CgkjcHJhZ21hIHVucm9sbF9sb29wX2VuZAoJI2VuZGlmCiNlbmRpZmAsanByPWBmbG9hdCBnZXRTaGFkb3dNYXNrKCkgewoJZmxvYXQgc2hhZG93ID0gMS4wOwoJI2lmZGVmIFVTRV9TSEFET1dNQVAKCSNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwCglEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7CgkjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0Cglmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fRElSX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7CgkJZGlyZWN0aW9uYWxMaWdodCA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwCglTcG90TGlnaHRTaGFkb3cgc3BvdExpZ2h0OwoJI3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydAoJZm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHsKCQlzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07CgkJc2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDsKCX0KCSNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kCgkjZW5kaWYKCSNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDAKCVBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodDsKCSNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQKCWZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkgewoJCXBvaW50TGlnaHQgPSBwb2ludExpZ2h0U2hhZG93c1sgaSBdOwoJCXNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0UG9pbnRTaGFkb3coIHBvaW50U2hhZG93TWFwWyBpIF0sIHBvaW50TGlnaHQuc2hhZG93TWFwU2l6ZSwgcG9pbnRMaWdodC5zaGFkb3dCaWFzLCBwb2ludExpZ2h0LnNoYWRvd1JhZGl1cywgdlBvaW50U2hhZG93Q29vcmRbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYUZhciApIDogMS4wOwoJfQoJI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQKCSNlbmRpZgoJI2VuZGlmCglyZXR1cm4gc2hhZG93Owp9YCxYcHI9YCNpZmRlZiBVU0VfU0tJTk5JTkcKCW1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApOwoJbWF0NCBib25lTWF0WSA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC55ICk7CgltYXQ0IGJvbmVNYXRaID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnogKTsKCW1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApOwojZW5kaWZgLCRwcj1gI2lmZGVmIFVTRV9TS0lOTklORwoJdW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgYmluZE1hdHJpeEludmVyc2U7CgkjaWZkZWYgQk9ORV9URVhUVVJFCgkJdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7CgkJdW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplOwoJCW1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHsKCQkJZmxvYXQgaiA9IGkgKiA0LjA7CgkJCWZsb2F0IHggPSBtb2QoIGosIGZsb2F0KCBib25lVGV4dHVyZVNpemUgKSApOwoJCQlmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTsKCQkJZmxvYXQgZHggPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7CgkJCWZsb2F0IGR5ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApOwoJCQl5ID0gZHkgKiAoIHkgKyAwLjUgKTsKCQkJdmVjNCB2MSA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMC41ICksIHkgKSApOwoJCQl2ZWM0IHYyID0gdGV4dHVyZTJEKCBib25lVGV4dHVyZSwgdmVjMiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7CgkJCXZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTsKCQkJdmVjNCB2NCA9IHRleHR1cmUyRCggYm9uZVRleHR1cmUsIHZlYzIoIGR4ICogKCB4ICsgMy41ICksIHkgKSApOwoJCQltYXQ0IGJvbmUgPSBtYXQ0KCB2MSwgdjIsIHYzLCB2NCApOwoJCQlyZXR1cm4gYm9uZTsKCQl9CgkjZWxzZQoJCXVuaWZvcm0gbWF0NCBib25lTWF0cmljZXNbIE1BWF9CT05FUyBdOwoJCW1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHsKCQkJbWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTsKCQkJcmV0dXJuIGJvbmU7CgkJfQoJI2VuZGlmCiNlbmRpZmAsS3ByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgl2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApOwoJdmVjNCBza2lubmVkID0gdmVjNCggMC4wICk7Cglza2lubmVkICs9IGJvbmVNYXRYICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQueDsKCXNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55OwoJc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lno7Cglza2lubmVkICs9IGJvbmVNYXRXICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQudzsKCXRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7CiNlbmRpZmAsWnByPWAjaWZkZWYgVVNFX1NLSU5OSU5HCgltYXQ0IHNraW5NYXRyaXggPSBtYXQ0KCAwLjAgKTsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC54ICogYm9uZU1hdFg7Cglza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZOwoJc2tpbk1hdHJpeCArPSBza2luV2VpZ2h0LnogKiBib25lTWF0WjsKCXNraW5NYXRyaXggKz0gc2tpbldlaWdodC53ICogYm9uZU1hdFc7Cglza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDsKCW9iamVjdE5vcm1hbCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6OwoJI2lmZGVmIFVTRV9UQU5HRU5UCgkJb2JqZWN0VGFuZ2VudCA9IHZlYzQoIHNraW5NYXRyaXggKiB2ZWM0KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejsKCSNlbmRpZgojZW5kaWZgLEpwcj1gZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDsKI2lmZGVmIFVTRV9TUEVDVUxBUk1BUAoJdmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7CglzcGVjdWxhclN0cmVuZ3RoID0gdGV4ZWxTcGVjdWxhci5yOwojZWxzZQoJc3BlY3VsYXJTdHJlbmd0aCA9IDEuMDsKI2VuZGlmYCxRcHI9YCNpZmRlZiBVU0VfU1BFQ1VMQVJNQVAKCXVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwOwojZW5kaWZgLHRkcj1gI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApCglnbF9GcmFnQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTsKI2VuZGlmYCxlZHI9YCNpZm5kZWYgc2F0dXJhdGUKI2RlZmluZSBzYXR1cmF0ZSggYSApIGNsYW1wKCBhLCAwLjAsIDEuMCApCiNlbmRpZgp1bmlmb3JtIGZsb2F0IHRvbmVNYXBwaW5nRXhwb3N1cmU7CnZlYzMgTGluZWFyVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7CglyZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yOwp9CnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHsKCWNvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7CglyZXR1cm4gc2F0dXJhdGUoIGNvbG9yIC8gKCB2ZWMzKCAxLjAgKSArIGNvbG9yICkgKTsKfQp2ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTsKCWNvbG9yID0gbWF4KCB2ZWMzKCAwLjAgKSwgY29sb3IgLSAwLjAwNCApOwoJcmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTsKfQp2ZWMzIFJSVEFuZE9EVEZpdCggdmVjMyB2ICkgewoJdmVjMyBhID0gdiAqICggdiArIDAuMDI0NTc4NiApIC0gMC4wMDAwOTA1Mzc7Cgl2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxOwoJcmV0dXJuIGEgLyBiOwp9CnZlYzMgQUNFU0ZpbG1pY1RvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkgewoJY29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKAoJCXZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSwJCXZlYzMoIDAuMzU0NTgsIDAuOTA4MzQsIDAuMTMzODMgKSwKCQl2ZWMzKCAwLjA0ODIzLCAwLjAxNTY2LCAwLjgzNzc3ICkKCSk7Cgljb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKAoJCXZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSwJCXZlYzMoIC0wLjUzMTA4LCAgMS4xMDgxMywgLTAuMDcyNzYgKSwKCQl2ZWMzKCAtMC4wNzM2NywgLTAuMDA2MDUsICAxLjA3NjAyICkKCSk7Cgljb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42OwoJY29sb3IgPSBBQ0VTSW5wdXRNYXQgKiBjb2xvcjsKCWNvbG9yID0gUlJUQW5kT0RURml0KCBjb2xvciApOwoJY29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7CglyZXR1cm4gc2F0dXJhdGUoIGNvbG9yICk7Cn0KdmVjMyBDdXN0b21Ub25lTWFwcGluZyggdmVjMyBjb2xvciApIHsgcmV0dXJuIGNvbG9yOyB9YCxyZHI9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCglmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDsKCWZsb2F0IHRyYW5zbWlzc2lvbkZhY3RvciA9IHRyYW5zbWlzc2lvbjsKCWZsb2F0IHRoaWNrbmVzc0ZhY3RvciA9IHRoaWNrbmVzczsKCSNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQCgkJdHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1RISUNLTkVTU01BUAoJCXRoaWNrbmVzc0ZhY3RvciAqPSB0ZXh0dXJlMkQoIHRoaWNrbmVzc01hcCwgdlV2ICkuZzsKCSNlbmRpZgoJdmVjMyBwb3MgPSB2V29ybGRQb3NpdGlvbjsKCXZlYzMgdiA9IG5vcm1hbGl6ZSggY2FtZXJhUG9zaXRpb24gLSBwb3MgKTsKCXZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApOwoJdmVjNCB0cmFuc21pc3Npb24gPSBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKAoJCW4sIHYsIHJvdWdobmVzc0ZhY3RvciwgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwKCQlwb3MsIG1vZGVsTWF0cml4LCB2aWV3TWF0cml4LCBwcm9qZWN0aW9uTWF0cml4LCBpb3IsIHRoaWNrbmVzc0ZhY3RvciwKCQlhdHRlbnVhdGlvbkNvbG9yLCBhdHRlbnVhdGlvbkRpc3RhbmNlICk7Cgl0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgdHJhbnNtaXNzaW9uRmFjdG9yICk7Cgl0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTsKI2VuZGlmYCxuZHI9YCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl1bmlmb3JtIGZsb2F0IHRyYW5zbWlzc2lvbjsKCXVuaWZvcm0gZmxvYXQgdGhpY2tuZXNzOwoJdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlOwoJdW5pZm9ybSB2ZWMzIGF0dGVudWF0aW9uQ29sb3I7CgkjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTk1BUAoJCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvbk1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9USElDS05FU1NNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCB0aGlja25lc3NNYXA7CgkjZW5kaWYKCXVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTsKCXVuaWZvcm0gc2FtcGxlcjJEIHRyYW5zbWlzc2lvblNhbXBsZXJNYXA7Cgl1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7Cgl1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsKCXZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKCXZlYzMgZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIG1hdDQgbW9kZWxNYXRyaXggKSB7CgkJdmVjMyByZWZyYWN0aW9uVmVjdG9yID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7CgkJdmVjMyBtb2RlbFNjYWxlOwoJCW1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDAgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54eXogKSApOwoJCW1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDIgXS54eXogKSApOwoJCXJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7Cgl9CglmbG9hdCBhcHBseUlvclRvUm91Z2huZXNzKCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGNvbnN0IGluIGZsb2F0IGlvciApIHsKCQlyZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTsKCX0KCXZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7CgkJZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApOwoJCSNpZmRlZiBURVhUVVJFX0xPRF9FWFQKCQkJcmV0dXJuIHRleHR1cmUyRExvZEVYVCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApOwoJCSNlbHNlCgkJCXJldHVybiB0ZXh0dXJlMkQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTsKCQkjZW5kaWYKCX0KCXZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHsKCQlpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkgewoJCQlyZXR1cm4gcmFkaWFuY2U7CgkJfSBlbHNlIHsKCQkJdmVjMyBhdHRlbnVhdGlvbkNvZWZmaWNpZW50ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTsKCQkJdmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApOwkJCXJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7CgkJfQoJfQoJdmVjNCBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBjb25zdCBpbiB2ZWMzIG4sIGNvbnN0IGluIHZlYzMgdiwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiB2ZWMzIGRpZmZ1c2VDb2xvciwKCQljb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiB2ZWMzIHBvc2l0aW9uLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4LAoJCWNvbnN0IGluIG1hdDQgdmlld01hdHJpeCwgY29uc3QgaW4gbWF0NCBwcm9qTWF0cml4LCBjb25zdCBpbiBmbG9hdCBpb3IsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywKCQljb25zdCBpbiB2ZWMzIGF0dGVudWF0aW9uQ29sb3IsIGNvbnN0IGluIGZsb2F0IGF0dGVudWF0aW9uRGlzdGFuY2UgKSB7CgkJdmVjMyB0cmFuc21pc3Npb25SYXkgPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApOwoJCXZlYzMgcmVmcmFjdGVkUmF5RXhpdCA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5OwoJCXZlYzQgbmRjUG9zID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTsKCQl2ZWMyIHJlZnJhY3Rpb25Db29yZHMgPSBuZGNQb3MueHkgLyBuZGNQb3MudzsKCQlyZWZyYWN0aW9uQ29vcmRzICs9IDEuMDsKCQlyZWZyYWN0aW9uQ29vcmRzIC89IDIuMDsKCQl2ZWM0IHRyYW5zbWl0dGVkTGlnaHQgPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7CgkJdmVjMyBhdHRlbnVhdGVkQ29sb3IgPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApOwoJCXZlYzMgRiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApOwoJCXJldHVybiB2ZWM0KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7Cgl9CiNlbmRpZmAsaWRyPWAjaWYgKCBkZWZpbmVkKCBVU0VfVVYgKSAmJiAhIGRlZmluZWQoIFVWU19WRVJURVhfT05MWSApICkKCXZhcnlpbmcgdmVjMiB2VXY7CiNlbmRpZmAsb2RyPWAjaWZkZWYgVVNFX1VWCgkjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZCgkJdmVjMiB2VXY7CgkjZWxzZQoJCXZhcnlpbmcgdmVjMiB2VXY7CgkjZW5kaWYKCXVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTsKI2VuZGlmYCxhZHI9YCNpZmRlZiBVU0VfVVYKCXZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7CiNlbmRpZmAsc2RyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZhcnlpbmcgdmVjMiB2VXYyOwojZW5kaWZgLGxkcj1gI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApCglhdHRyaWJ1dGUgdmVjMiB1djI7Cgl2YXJ5aW5nIHZlYzIgdlV2MjsKCXVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07CiNlbmRpZmAsY2RyPWAjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQICkKCXZVdjIgPSAoIHV2MlRyYW5zZm9ybSAqIHZlYzMoIHV2MiwgMSApICkueHk7CiNlbmRpZmAsdWRyPWAjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQoIERJU1RBTkNFICkgfHwgZGVmaW5lZCAoIFVTRV9TSEFET1dNQVAgKSB8fCBkZWZpbmVkICggVVNFX1RSQU5TTUlTU0lPTiApCgl2ZWM0IHdvcmxkUG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7CgkjaWZkZWYgVVNFX0lOU1RBTkNJTkcKCQl3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uOwoJI2VuZGlmCgl3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uOwojZW5kaWZgLGhkcj1gdmFyeWluZyB2ZWMyIHZVdjsKdW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtOwp2b2lkIG1haW4oKSB7Cgl2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5OwoJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbi54eSwgMS4wLCAxLjAgKTsKfWAsZmRyPWB1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7CnZhcnlpbmcgdmVjMiB2VXY7CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdDJELCB2VXYgKTsKCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+Cn1gLHBkcj1gdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdldvcmxkRGlyZWN0aW9uID0gdHJhbnNmb3JtRGlyZWN0aW9uKCBwb3NpdGlvbiwgbW9kZWxNYXRyaXggKTsKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CglnbF9Qb3NpdGlvbi56ID0gZ2xfUG9zaXRpb24udzsKfWAsZGRyPWAjaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50Pgp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCXZlYzMgdlJlZmxlY3QgPSB2V29ybGREaXJlY3Rpb247CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJZ2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7CglnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5OwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KfWAsbWRyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8dXZfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQCgkJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNlbmRpZgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2SGlnaFByZWNpc2lvblpXID0gZ2xfUG9zaXRpb24uenc7Cn1gLGdkcj1gI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXOwp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTsKCSNpZiBERVBUSF9QQUNLSU5HID09IDMyMDAKCQlkaWZmdXNlQ29sb3IuYSA9IG9wYWNpdHk7CgkjZW5kaWYKCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJZmxvYXQgZnJhZ0Nvb3JkWiA9IDAuNSAqIHZIaWdoUHJlY2lzaW9uWldbMF0gLyB2SGlnaFByZWNpc2lvblpXWzFdICsgMC41OwoJI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMAoJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApOwoJI2VsaWYgREVQVEhfUEFDS0lORyA9PSAzMjAxCgkJZ2xfRnJhZ0NvbG9yID0gcGFja0RlcHRoVG9SR0JBKCBmcmFnQ29vcmRaICk7CgkjZW5kaWYKfWAsX2RyPWAjZGVmaW5lIERJU1RBTkNFCnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUAoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKfWAseWRyPWAjZGVmaW5lIERJU1RBTkNFCnVuaWZvcm0gdmVjMyByZWZlcmVuY2VQb3NpdGlvbjsKdW5pZm9ybSBmbG9hdCBuZWFyRGlzdGFuY2U7CnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7CnZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluICgpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApOwoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7CglkaXN0ID0gKCBkaXN0IC0gbmVhckRpc3RhbmNlICkgLyAoIGZhckRpc3RhbmNlIC0gbmVhckRpc3RhbmNlICk7CglkaXN0ID0gc2F0dXJhdGUoIGRpc3QgKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApOwp9YCx2ZHI9YHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247CiNpbmNsdWRlIDxjb21tb24+CnZvaWQgbWFpbigpIHsKCXZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4Pgp9YCx4ZHI9YHVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDsKdmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4Kdm9pZCBtYWluKCkgewoJdmVjMyBkaXJlY3Rpb24gPSBub3JtYWxpemUoIHZXb3JsZERpcmVjdGlvbiApOwoJdmVjMiBzYW1wbGVVViA9IGVxdWlyZWN0VXYoIGRpcmVjdGlvbiApOwoJZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50Pgp9YCxiZHI9YHVuaWZvcm0gZmxvYXQgc2NhbGU7CmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJdkxpbmVEaXN0YW5jZSA9IHNjYWxlICogbGluZURpc3RhbmNlOwoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLHdkcj1gdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKdW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTsKdW5pZm9ybSBmbG9hdCB0b3RhbFNpemU7CnZhcnlpbmcgZmxvYXQgdkxpbmVEaXN0YW5jZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCWlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkgewoJCWRpc2NhcmQ7Cgl9Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsU2RyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpZiBkZWZpbmVkICggVVNFX0VOVk1BUCApIHx8IGRlZmluZWQgKCBVU0VfU0tJTk5JTkcgKQoJCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCQkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjZW5kaWYKCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD4KCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxNZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpZm5kZWYgRkxBVF9TSEFERUQKCXZhcnlpbmcgdmVjMyB2Tm9ybWFsOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJI2lmZGVmIFVTRV9MSUdIVE1BUAoJCXZlYzQgbGlnaHRNYXBUZXhlbD0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApOwoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcFRleGVsLnJnYiAqIGxpZ2h0TWFwSW50ZW5zaXR5OwoJI2Vsc2UKCQlyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7CgkjZW5kaWYKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiOwoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlOwoJI2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsRWRyPWAjZGVmaW5lIExBTUJFUlQKdmFyeWluZyB2ZWMzIHZMaWdodEZyb250Owp2YXJ5aW5nIHZlYzMgdkluZGlyZWN0RnJvbnQ7CiNpZmRlZiBET1VCTEVfU0lERUQKCXZhcnlpbmcgdmVjMyB2TGlnaHRCYWNrOwoJdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5fdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bGlnaHRzX2xhbWJlcnRfdmVydGV4PgoJI2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsVGRyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDsKdmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250OwojaWZkZWYgRE9VQkxFX1NJREVECgl2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjazsKCXZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrOwojZW5kaWYKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFvbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9jb21tb25fcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSB2SW5kaXJlY3RGcm9udDsKCSNlbmRpZgoJI2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PgoJcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IEJSREZfTGFtYmVydCggZGlmZnVzZUNvbG9yLnJnYiApOwoJI2lmZGVmIERPVUJMRV9TSURFRAoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2TGlnaHRGcm9udCA6IHZMaWdodEJhY2s7CgkjZWxzZQoJCXJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDsKCSNlbmRpZgoJcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSAqPSBCUkRGX0xhbWJlcnQoIGRpZmZ1c2VDb2xvci5yZ2IgKSAqIGdldFNoYWRvd01hc2soKTsKCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxDZHI9YCNkZWZpbmUgTUFUQ0FQCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKfWAsQWRyPWAjZGVmaW5lIE1BVENBUAp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5Owp1bmlmb3JtIHNhbXBsZXIyRCBtYXRjYXA7CnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+Cgl2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTsKCXZlYzMgeCA9IG5vcm1hbGl6ZSggdmVjMyggdmlld0Rpci56LCAwLjAsIC0gdmlld0Rpci54ICkgKTsKCXZlYzMgeSA9IGNyb3NzKCB2aWV3RGlyLCB4ICk7Cgl2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7CgkjaWZkZWYgVVNFX01BVENBUAoJCXZlYzQgbWF0Y2FwQ29sb3IgPSB0ZXh0dXJlMkQoIG1hdGNhcCwgdXYgKTsKCSNlbHNlCgkJdmVjNCBtYXRjYXBDb2xvciA9IHZlYzQoIHZlYzMoIG1peCggMC4yLCAwLjgsIHV2LnkgKSApLCAxLjAgKTsKCSNlbmRpZgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYiAqIG1hdGNhcENvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD4KfWAsUGRyPWAjZGVmaW5lIE5PUk1BTAojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgojaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKQoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CiNlbmRpZgp9YCxJZHI9YCNkZWZpbmUgTk9STUFMCnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkKCXZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojZW5kaWYKI2luY2x1ZGUgPHBhY2tpbmc+CiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CglnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7Cn1gLExkcj1gI2RlZmluZSBQSE9ORwp2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8dXYyX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxmb2dfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+CgkjaW5jbHVkZSA8dXYyX3ZlcnRleD4KCSNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+CgkjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD4KCSNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJdlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7CgkjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PgoJI2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxrZHI9YCNkZWZpbmUgUEhPTkcKdW5pZm9ybSB2ZWMzIGRpZmZ1c2U7CnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTsKdW5pZm9ybSB2ZWMzIHNwZWN1bGFyOwp1bmlmb3JtIGZsb2F0IHNoaW5pbmVzczsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJzZGZzPgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCVJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7Cgl2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgb3V0Z29pbmdMaWdodCA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7CgkjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCxSZHI9YCNkZWZpbmUgU1RBTkRBUkQKdmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247CiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OCgl2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247CiNlbmRpZgojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4PgojaWZkZWYgVVNFX1RSQU5TTUlTU0lPTgoJdldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejsKI2VuZGlmCn1gLE5kcj1gI2RlZmluZSBTVEFOREFSRAojaWZkZWYgUEhZU0lDQUwKCSNkZWZpbmUgSU9SCgkjZGVmaW5lIFNQRUNVTEFSCiNlbmRpZgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IHJvdWdobmVzczsKdW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7CnVuaWZvcm0gZmxvYXQgb3BhY2l0eTsKI2lmZGVmIElPUgoJdW5pZm9ybSBmbG9hdCBpb3I7CiNlbmRpZgojaWZkZWYgU1BFQ1VMQVIKCXVuaWZvcm0gZmxvYXQgc3BlY3VsYXJJbnRlbnNpdHk7Cgl1bmlmb3JtIHZlYzMgc3BlY3VsYXJDb2xvcjsKCSNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDsKCSNlbmRpZgoJI2lmZGVmIFVTRV9TUEVDVUxBUkNPTE9STUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc3BlY3VsYXJDb2xvck1hcDsKCSNlbmRpZgojZW5kaWYKI2lmZGVmIFVTRV9DTEVBUkNPQVQKCXVuaWZvcm0gZmxvYXQgY2xlYXJjb2F0OwoJdW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7CiNlbmRpZgojaWZkZWYgVVNFX1NIRUVOCgl1bmlmb3JtIHZlYzMgc2hlZW5Db2xvcjsKCXVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7CgkjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVAKCQl1bmlmb3JtIHNhbXBsZXIyRCBzaGVlbkNvbG9yTWFwOwoJI2VuZGlmCgkjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQCgkJdW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7CgkjZW5kaWYKI2VuZGlmCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8cGFja2luZz4KI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDx1djJfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YnNkZnM+CiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxlbnZtYXBfcGh5c2ljYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+CiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCBkaWZmdXNlLCBvcGFjaXR5ICk7CglSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApOwoJdmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudD4KCSNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD4KCSNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD4KCXZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTsKCXZlYzMgdG90YWxTcGVjdWxhciA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjsKCSNpbmNsdWRlIDx0cmFuc21pc3Npb25fZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2lmZGVmIFVTRV9TSEVFTgoJCWZsb2F0IHNoZWVuRW5lcmd5Q29tcCA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApOwoJCW91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogc2hlZW5FbmVyZ3lDb21wICsgc2hlZW5TcGVjdWxhcjsKCSNlbmRpZgoJI2lmZGVmIFVTRV9DTEVBUkNPQVQKCQlmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTsKCQl2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApOwoJCW91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0OwoJI2VuZGlmCgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KCSNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+Cn1gLERkcj1gI2RlZmluZSBUT09OCnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uOwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPHV2X3ZlcnRleD4KCSNpbmNsdWRlIDx1djJfdmVydGV4PgoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD4KCSNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+CgkjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+Cgl2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejsKCSNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+CgkjaW5jbHVkZSA8c2hhZG93bWFwX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxPZHI9YCNkZWZpbmUgVE9PTgp1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSB2ZWMzIGVtaXNzaXZlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bGlnaHRtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxncmFkaWVudG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD4KCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTsKCXZlYzMgdG90YWxFbWlzc2l2ZVJhZGlhbmNlID0gZW1pc3NpdmU7CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGNvbG9yX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD4KCSNpbmNsdWRlIDxub3JtYWxfZnJhZ21lbnRfYmVnaW4+CgkjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+CgkjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX3Rvb25fZnJhZ21lbnQ+CgkjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPgoJI2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9lbmQ+CgkjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOwoJI2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD4KCSNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD4KCSNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50Pgp9YCx6ZHI9YHVuaWZvcm0gZmxvYXQgc2l6ZTsKdW5pZm9ybSBmbG9hdCBzY2FsZTsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGNvbG9yX3ZlcnRleD4KCSNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+CgkjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJZ2xfUG9pbnRTaXplID0gc2l6ZTsKCSNpZmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIGdsX1BvaW50U2l6ZSAqPSAoIHNjYWxlIC8gLSBtdlBvc2l0aW9uLnogKTsKCSNlbmRpZgoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD4KCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxmb2dfdmVydGV4Pgp9YCxGZHI9YHVuaWZvcm0gdmVjMyBkaWZmdXNlOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Pgp2b2lkIG1haW4oKSB7CgkjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PgoJdmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7Cgl2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTsKCSNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD4KCSNpbmNsdWRlIDxtYXBfcGFydGljbGVfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PgoJb3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7CgkjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PgoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD4KfWAsQmRyPWAjaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD4KI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD4Kdm9pZCBtYWluKCkgewoJI2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PgoJI2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PgoJI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4KCSNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+CgkjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PgoJI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PgoJI2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD4KCSNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PgoJI2luY2x1ZGUgPGZvZ192ZXJ0ZXg+Cn1gLEhkcj1gdW5pZm9ybSB2ZWMzIGNvbG9yOwp1bmlmb3JtIGZsb2F0IG9wYWNpdHk7CiNpbmNsdWRlIDxjb21tb24+CiNpbmNsdWRlIDxwYWNraW5nPgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxic2Rmcz4KI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPgojaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCWdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApOwoJI2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD4KCSNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+Cn1gLFZkcj1gdW5pZm9ybSBmbG9hdCByb3RhdGlvbjsKdW5pZm9ybSB2ZWMyIGNlbnRlcjsKI2luY2x1ZGUgPGNvbW1vbj4KI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PgojaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PgojaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+CiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDx1dl92ZXJ0ZXg+Cgl2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTsKCXZlYzIgc2NhbGU7CglzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTsKCXNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueCwgbW9kZWxNYXRyaXhbIDEgXS55LCBtb2RlbE1hdHJpeFsgMSBdLnogKSApOwoJI2lmbmRlZiBVU0VfU0laRUFUVEVOVUFUSU9OCgkJYm9vbCBpc1BlcnNwZWN0aXZlID0gaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApOwoJCWlmICggaXNQZXJzcGVjdGl2ZSApIHNjYWxlICo9IC0gbXZQb3NpdGlvbi56OwoJI2VuZGlmCgl2ZWMyIGFsaWduZWRQb3NpdGlvbiA9ICggcG9zaXRpb24ueHkgLSAoIGNlbnRlciAtIHZlYzIoIDAuNSApICkgKSAqIHNjYWxlOwoJdmVjMiByb3RhdGVkUG9zaXRpb247Cglyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7Cglyb3RhdGVkUG9zaXRpb24ueSA9IHNpbiggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7CgltdlBvc2l0aW9uLnh5ICs9IHJvdGF0ZWRQb3NpdGlvbjsKCWdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247CgkjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PgoJI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+CgkjaW5jbHVkZSA8Zm9nX3ZlcnRleD4KfWAsVWRyPWB1bmlmb3JtIHZlYzMgZGlmZnVzZTsKdW5pZm9ybSBmbG9hdCBvcGFjaXR5OwojaW5jbHVkZSA8Y29tbW9uPgojaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD4KI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Zm9nX3BhcnNfZnJhZ21lbnQ+CiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PgojaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+CnZvaWQgbWFpbigpIHsKCSNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+Cgl2ZWMzIG91dGdvaW5nTGlnaHQgPSB2ZWMzKCAwLjAgKTsKCXZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApOwoJI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PgoJI2luY2x1ZGUgPG1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD4KCSNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+CglvdXRnb2luZ0xpZ2h0ID0gZGlmZnVzZUNvbG9yLnJnYjsKCSNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+CgkjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PgoJI2luY2x1ZGUgPGZvZ19mcmFnbWVudD4KfWAsaHI9e2FscGhhbWFwX2ZyYWdtZW50Ol9mcixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OnlmcixhbHBoYXRlc3RfZnJhZ21lbnQ6dmZyLGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50Onhmcixhb21hcF9mcmFnbWVudDpiZnIsYW9tYXBfcGFyc19mcmFnbWVudDp3ZnIsYmVnaW5fdmVydGV4OlNmcixiZWdpbm5vcm1hbF92ZXJ0ZXg6TWZyLGJzZGZzOkVmcixidW1wbWFwX3BhcnNfZnJhZ21lbnQ6VGZyLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDpDZnIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6QWZyLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDpQZnIsY2xpcHBpbmdfcGxhbmVzX3ZlcnRleDpJZnIsY29sb3JfZnJhZ21lbnQ6TGZyLGNvbG9yX3BhcnNfZnJhZ21lbnQ6a2ZyLGNvbG9yX3BhcnNfdmVydGV4OlJmcixjb2xvcl92ZXJ0ZXg6TmZyLGNvbW1vbjpEZnIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50Ok9mcixkZWZhdWx0bm9ybWFsX3ZlcnRleDp6ZnIsZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4OkZmcixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OkJmcixlbWlzc2l2ZW1hcF9mcmFnbWVudDpIZnIsZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudDpWZnIsZW5jb2RpbmdzX2ZyYWdtZW50OlVmcixlbmNvZGluZ3NfcGFyc19mcmFnbWVudDpxZnIsZW52bWFwX2ZyYWdtZW50OkdmcixlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ6V2ZyLGVudm1hcF9wYXJzX2ZyYWdtZW50OllmcixlbnZtYXBfcGFyc192ZXJ0ZXg6amZyLGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50OmlwcixlbnZtYXBfdmVydGV4Olhmcixmb2dfdmVydGV4OiRmcixmb2dfcGFyc192ZXJ0ZXg6S2ZyLGZvZ19mcmFnbWVudDpaZnIsZm9nX3BhcnNfZnJhZ21lbnQ6SmZyLGdyYWRpZW50bWFwX3BhcnNfZnJhZ21lbnQ6UWZyLGxpZ2h0bWFwX2ZyYWdtZW50OnRwcixsaWdodG1hcF9wYXJzX2ZyYWdtZW50OmVwcixsaWdodHNfbGFtYmVydF92ZXJ0ZXg6cnByLGxpZ2h0c19wYXJzX2JlZ2luOm5wcixsaWdodHNfdG9vbl9mcmFnbWVudDpvcHIsbGlnaHRzX3Rvb25fcGFyc19mcmFnbWVudDphcHIsbGlnaHRzX3Bob25nX2ZyYWdtZW50OnNwcixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDpscHIsbGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50OmNwcixsaWdodHNfcGh5c2ljYWxfcGFyc19mcmFnbWVudDp1cHIsbGlnaHRzX2ZyYWdtZW50X2JlZ2luOmhwcixsaWdodHNfZnJhZ21lbnRfbWFwczpmcHIsbGlnaHRzX2ZyYWdtZW50X2VuZDpwcHIsbG9nZGVwdGhidWZfZnJhZ21lbnQ6ZHByLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6bXByLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4Omdwcixsb2dkZXB0aGJ1Zl92ZXJ0ZXg6X3ByLG1hcF9mcmFnbWVudDp5cHIsbWFwX3BhcnNfZnJhZ21lbnQ6dnByLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDp4cHIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6YnByLG1ldGFsbmVzc21hcF9mcmFnbWVudDp3cHIsbWV0YWxuZXNzbWFwX3BhcnNfZnJhZ21lbnQ6U3ByLG1vcnBobm9ybWFsX3ZlcnRleDpNcHIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6RXByLG1vcnBodGFyZ2V0X3ZlcnRleDpUcHIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOkNwcixub3JtYWxfZnJhZ21lbnRfbWFwczpBcHIsbm9ybWFsX3BhcnNfZnJhZ21lbnQ6UHByLG5vcm1hbF9wYXJzX3ZlcnRleDpJcHIsbm9ybWFsX3ZlcnRleDpMcHIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6a3ByLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfYmVnaW46UnByLGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwczpOcHIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6RHByLG91dHB1dF9mcmFnbWVudDpPcHIscGFja2luZzp6cHIscHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudDpGcHIscHJvamVjdF92ZXJ0ZXg6QnByLGRpdGhlcmluZ19mcmFnbWVudDpIcHIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6VnByLHJvdWdobmVzc21hcF9mcmFnbWVudDpVcHIscm91Z2huZXNzbWFwX3BhcnNfZnJhZ21lbnQ6cXByLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OkdwcixzaGFkb3dtYXBfcGFyc192ZXJ0ZXg6V3ByLHNoYWRvd21hcF92ZXJ0ZXg6WXByLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDpqcHIsc2tpbmJhc2VfdmVydGV4Olhwcixza2lubmluZ19wYXJzX3ZlcnRleDokcHIsc2tpbm5pbmdfdmVydGV4Oktwcixza2lubm9ybWFsX3ZlcnRleDpacHIsc3BlY3VsYXJtYXBfZnJhZ21lbnQ6SnByLHNwZWN1bGFybWFwX3BhcnNfZnJhZ21lbnQ6UXByLHRvbmVtYXBwaW5nX2ZyYWdtZW50OnRkcix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OmVkcix0cmFuc21pc3Npb25fZnJhZ21lbnQ6cmRyLHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50Om5kcix1dl9wYXJzX2ZyYWdtZW50Omlkcix1dl9wYXJzX3ZlcnRleDpvZHIsdXZfdmVydGV4OmFkcix1djJfcGFyc19mcmFnbWVudDpzZHIsdXYyX3BhcnNfdmVydGV4Omxkcix1djJfdmVydGV4OmNkcix3b3JsZHBvc192ZXJ0ZXg6dWRyLGJhY2tncm91bmRfdmVydDpoZHIsYmFja2dyb3VuZF9mcmFnOmZkcixjdWJlX3ZlcnQ6cGRyLGN1YmVfZnJhZzpkZHIsZGVwdGhfdmVydDptZHIsZGVwdGhfZnJhZzpnZHIsZGlzdGFuY2VSR0JBX3ZlcnQ6X2RyLGRpc3RhbmNlUkdCQV9mcmFnOnlkcixlcXVpcmVjdF92ZXJ0OnZkcixlcXVpcmVjdF9mcmFnOnhkcixsaW5lZGFzaGVkX3ZlcnQ6YmRyLGxpbmVkYXNoZWRfZnJhZzp3ZHIsbWVzaGJhc2ljX3ZlcnQ6U2RyLG1lc2hiYXNpY19mcmFnOk1kcixtZXNobGFtYmVydF92ZXJ0OkVkcixtZXNobGFtYmVydF9mcmFnOlRkcixtZXNobWF0Y2FwX3ZlcnQ6Q2RyLG1lc2htYXRjYXBfZnJhZzpBZHIsbWVzaG5vcm1hbF92ZXJ0OlBkcixtZXNobm9ybWFsX2ZyYWc6SWRyLG1lc2hwaG9uZ192ZXJ0OkxkcixtZXNocGhvbmdfZnJhZzprZHIsbWVzaHBoeXNpY2FsX3ZlcnQ6UmRyLG1lc2hwaHlzaWNhbF9mcmFnOk5kcixtZXNodG9vbl92ZXJ0OkRkcixtZXNodG9vbl9mcmFnOk9kcixwb2ludHNfdmVydDp6ZHIscG9pbnRzX2ZyYWc6RmRyLHNoYWRvd192ZXJ0OkJkcixzaGFkb3dfZnJhZzpIZHIsc3ByaXRlX3ZlcnQ6VmRyLHNwcml0ZV9mcmFnOlVkcn0scmU9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IG5lKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBraX0sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IEx0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IGtpfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgbmUoMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBMdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9fX0sYWg9e2Jhc2ljOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLnNwZWN1bGFybWFwLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5mb2ddKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuc3BlY3VsYXJtYXAscmUuZW52bWFwLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmZvZyxyZS5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgbmUoMCl9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLnNwZWN1bGFybWFwLHJlLmVudm1hcCxyZS5hb21hcCxyZS5saWdodG1hcCxyZS5lbWlzc2l2ZW1hcCxyZS5idW1wbWFwLHJlLm5vcm1hbG1hcCxyZS5kaXNwbGFjZW1lbnRtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyBuZSgxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5lbnZtYXAscmUuYW9tYXAscmUubGlnaHRtYXAscmUuZW1pc3NpdmVtYXAscmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLnJvdWdobmVzc21hcCxyZS5tZXRhbG5lc3NtYXAscmUuZm9nLHJlLmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyBuZSgwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmFvbWFwLHJlLmxpZ2h0bWFwLHJlLmVtaXNzaXZlbWFwLHJlLmJ1bXBtYXAscmUubm9ybWFsbWFwLHJlLmRpc3BsYWNlbWVudG1hcCxyZS5ncmFkaWVudG1hcCxyZS5mb2cscmUubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IG5lKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHJlLmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpUYShbcmUucG9pbnRzLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpoci5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpUYShbcmUuY29tbW9uLHJlLmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpoci5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6VGEoW3JlLmNvbW1vbixyZS5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6aHIuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpoci5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuYnVtcG1hcCxyZS5ub3JtYWxtYXAscmUuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpUYShbcmUuc3ByaXRlLHJlLmZvZ10pLHZlcnRleFNoYWRlcjpoci5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpoci5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcga2l9LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpoci5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3JtczpUYShbcmUuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6aHIuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpoci5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOlRhKFtyZS5jb21tb24scmUuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3IGp9LG5lYXJEaXN0YW5jZTp7dmFsdWU6MX0sZmFyRGlzdGFuY2U6e3ZhbHVlOjFlM319XSksdmVydGV4U2hhZGVyOmhyLmRpc3RhbmNlUkdCQV92ZXJ0LGZyYWdtZW50U2hhZGVyOmhyLmRpc3RhbmNlUkdCQV9mcmFnfSxzaGFkb3c6e3VuaWZvcm1zOlRhKFtyZS5saWdodHMscmUuZm9nLHtjb2xvcjp7dmFsdWU6bmV3IG5lKDApfSxvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6aHIuc2hhZG93X3ZlcnQsZnJhZ21lbnRTaGFkZXI6aHIuc2hhZG93X2ZyYWd9fTthaC5waHlzaWNhbD17dW5pZm9ybXM6VGEoW2FoLnN0YW5kYXJkLnVuaWZvcm1zLHtjbGVhcmNvYXQ6e3ZhbHVlOjB9LGNsZWFyY29hdE1hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Um91Z2huZXNzOnt2YWx1ZTowfSxjbGVhcmNvYXRSb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LGNsZWFyY29hdE5vcm1hbFNjYWxlOnt2YWx1ZTpuZXcgTHQoMSwxKX0sY2xlYXJjb2F0Tm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxzaGVlbjp7dmFsdWU6MH0sc2hlZW5Db2xvcjp7dmFsdWU6bmV3IG5lKDApfSxzaGVlbkNvbG9yTWFwOnt2YWx1ZTpudWxsfSxzaGVlblJvdWdobmVzczp7dmFsdWU6MX0sc2hlZW5Sb3VnaG5lc3NNYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvbjp7dmFsdWU6MH0sdHJhbnNtaXNzaW9uTWFwOnt2YWx1ZTpudWxsfSx0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp7dmFsdWU6bmV3IEx0fSx0cmFuc21pc3Npb25TYW1wbGVyTWFwOnt2YWx1ZTpudWxsfSx0aGlja25lc3M6e3ZhbHVlOjB9LHRoaWNrbmVzc01hcDp7dmFsdWU6bnVsbH0sYXR0ZW51YXRpb25EaXN0YW5jZTp7dmFsdWU6MH0sYXR0ZW51YXRpb25Db2xvcjp7dmFsdWU6bmV3IG5lKDApfSxzcGVjdWxhckludGVuc2l0eTp7dmFsdWU6MX0sc3BlY3VsYXJJbnRlbnNpdHlNYXA6e3ZhbHVlOm51bGx9LHNwZWN1bGFyQ29sb3I6e3ZhbHVlOm5ldyBuZSgxLDEsMSl9LHNwZWN1bGFyQ29sb3JNYXA6e3ZhbHVlOm51bGx9fV0pLHZlcnRleFNoYWRlcjpoci5tZXNocGh5c2ljYWxfdmVydCxmcmFnbWVudFNoYWRlcjpoci5tZXNocGh5c2ljYWxfZnJhZ307ZnVuY3Rpb24gcWRyKGUsdCxyLG4saSxvKXtsZXQgYT1uZXcgbmUoMCkscz1pPT09ITA/MDoxLGwsYyx1PW51bGwsaD0wLGY9bnVsbDtmdW5jdGlvbiBwKGcsXyl7bGV0IHk9ITEseD1fLmlzU2NlbmU9PT0hMD9fLmJhY2tncm91bmQ6bnVsbDt4JiZ4LmlzVGV4dHVyZSYmKHg9dC5nZXQoeCkpO2xldCBiPWUueHIsUz1iLmdldFNlc3Npb24mJmIuZ2V0U2Vzc2lvbigpO1MmJlMuZW52aXJvbm1lbnRCbGVuZE1vZGU9PT0iYWRkaXRpdmUiJiYoeD1udWxsKSx4PT09bnVsbD9kKGEscyk6eCYmeC5pc0NvbG9yJiYoZCh4LDEpLHk9ITApLChlLmF1dG9DbGVhcnx8eSkmJmUuY2xlYXIoZS5hdXRvQ2xlYXJDb2xvcixlLmF1dG9DbGVhckRlcHRoLGUuYXV0b0NsZWFyU3RlbmNpbCkseCYmKHguaXNDdWJlVGV4dHVyZXx8eC5tYXBwaW5nPT09eE0pPyhjPT09dm9pZCAwJiYoYz1uZXcgZWkobmV3IFFmKDEsMSwxKSxuZXcgbGgoe25hbWU6IkJhY2tncm91bmRDdWJlTWF0ZXJpYWwiLHVuaWZvcm1zOlozKGFoLmN1YmUudW5pZm9ybXMpLHZlcnRleFNoYWRlcjphaC5jdWJlLnZlcnRleFNoYWRlcixmcmFnbWVudFNoYWRlcjphaC5jdWJlLmZyYWdtZW50U2hhZGVyLHNpZGU6SWksZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsZm9nOiExfSkpLGMuZ2VvbWV0cnkuZGVsZXRlQXR0cmlidXRlKCJub3JtYWwiKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgidXYiKSxjLm9uQmVmb3JlUmVuZGVyPWZ1bmN0aW9uKEMsUCxrKXt0aGlzLm1hdHJpeFdvcmxkLmNvcHlQb3NpdGlvbihrLm1hdHJpeFdvcmxkKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGMubWF0ZXJpYWwsImVudk1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLmVudk1hcC52YWx1ZX19KSxuLnVwZGF0ZShjKSksYy5tYXRlcmlhbC51bmlmb3Jtcy5lbnZNYXAudmFsdWU9eCxjLm1hdGVyaWFsLnVuaWZvcm1zLmZsaXBFbnZNYXAudmFsdWU9eC5pc0N1YmVUZXh0dXJlJiZ4LmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEsKHUhPT14fHxoIT09eC52ZXJzaW9ufHxmIT09ZS50b25lTWFwcGluZykmJihjLm1hdGVyaWFsLm5lZWRzVXBkYXRlPSEwLHU9eCxoPXgudmVyc2lvbixmPWUudG9uZU1hcHBpbmcpLGcudW5zaGlmdChjLGMuZ2VvbWV0cnksYy5tYXRlcmlhbCwwLDAsbnVsbCkpOngmJnguaXNUZXh0dXJlJiYobD09PXZvaWQgMCYmKGw9bmV3IGVpKG5ldyBWMCgyLDIpLG5ldyBsaCh7bmFtZToiQmFja2dyb3VuZE1hdGVyaWFsIix1bmlmb3JtczpaMyhhaC5iYWNrZ3JvdW5kLnVuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6YWguYmFja2dyb3VuZC52ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6YWguYmFja2dyb3VuZC5mcmFnbWVudFNoYWRlcixzaWRlOkl2LGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxuLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9eCx4Lm1hdHJpeEF1dG9VcGRhdGU9PT0hMCYmeC51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoeC5tYXRyaXgpLCh1IT09eHx8aCE9PXgudmVyc2lvbnx8ZiE9PWUudG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PXgsaD14LnZlcnNpb24sZj1lLnRvbmVNYXBwaW5nKSxnLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX1mdW5jdGlvbiBkKGcsXyl7ci5idWZmZXJzLmNvbG9yLnNldENsZWFyKGcucixnLmcsZy5iLF8sbyl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbihnLF89MSl7YS5zZXQoZykscz1fLGQoYSxzKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBzfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKGcpe3M9ZyxkKGEscyl9LHJlbmRlcjpwfX1mdW5jdGlvbiBHZHIoZSx0LHIsbil7bGV0IGk9ZS5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG89bi5pc1dlYkdMMj9udWxsOnQuZ2V0KCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLGE9bi5pc1dlYkdMMnx8byE9PW51bGwscz17fSxsPWcobnVsbCksYz1sO2Z1bmN0aW9uIHUoUixGLHosVSxXKXtsZXQgWj0hMTtpZihhKXtsZXQgcnQ9ZChVLHosRik7YyE9PXJ0JiYoYz1ydCxmKGMub2JqZWN0KSksWj1fKFUsVyksWiYmeShVLFcpfWVsc2V7bGV0IHJ0PUYud2lyZWZyYW1lPT09ITA7KGMuZ2VvbWV0cnkhPT1VLmlkfHxjLnByb2dyYW0hPT16LmlkfHxjLndpcmVmcmFtZSE9PXJ0KSYmKGMuZ2VvbWV0cnk9VS5pZCxjLnByb2dyYW09ei5pZCxjLndpcmVmcmFtZT1ydCxaPSEwKX1SLmlzSW5zdGFuY2VkTWVzaD09PSEwJiYoWj0hMCksVyE9PW51bGwmJnIudXBkYXRlKFcsMzQ5NjMpLFomJihrKFIsRix6LFUpLFchPT1udWxsJiZlLmJpbmRCdWZmZXIoMzQ5NjMsci5nZXQoVykuYnVmZmVyKSl9ZnVuY3Rpb24gaCgpe3JldHVybiBuLmlzV2ViR0wyP2UuY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCl9ZnVuY3Rpb24gZihSKXtyZXR1cm4gbi5pc1dlYkdMMj9lLmJpbmRWZXJ0ZXhBcnJheShSKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhSKX1mdW5jdGlvbiBwKFIpe3JldHVybiBuLmlzV2ViR0wyP2UuZGVsZXRlVmVydGV4QXJyYXkoUik6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhSKX1mdW5jdGlvbiBkKFIsRix6KXtsZXQgVT16LndpcmVmcmFtZT09PSEwLFc9c1tSLmlkXTtXPT09dm9pZCAwJiYoVz17fSxzW1IuaWRdPVcpO2xldCBaPVdbRi5pZF07Wj09PXZvaWQgMCYmKFo9e30sV1tGLmlkXT1aKTtsZXQgcnQ9WltVXTtyZXR1cm4gcnQ9PT12b2lkIDAmJihydD1nKGgoKSksWltVXT1ydCkscnR9ZnVuY3Rpb24gZyhSKXtsZXQgRj1bXSx6PVtdLFU9W107Zm9yKGxldCBXPTA7VzxpO1crKylGW1ddPTAseltXXT0wLFVbV109MDtyZXR1cm57Z2VvbWV0cnk6bnVsbCxwcm9ncmFtOm51bGwsd2lyZWZyYW1lOiExLG5ld0F0dHJpYnV0ZXM6RixlbmFibGVkQXR0cmlidXRlczp6LGF0dHJpYnV0ZURpdmlzb3JzOlUsb2JqZWN0OlIsYXR0cmlidXRlczp7fSxpbmRleDpudWxsfX1mdW5jdGlvbiBfKFIsRil7bGV0IHo9Yy5hdHRyaWJ1dGVzLFU9Ui5hdHRyaWJ1dGVzLFc9MDtmb3IobGV0IFogaW4gVSl7bGV0IHJ0PXpbWl0sb3Q9VVtaXTtpZihydD09PXZvaWQgMHx8cnQuYXR0cmlidXRlIT09b3R8fHJ0LmRhdGEhPT1vdC5kYXRhKXJldHVybiEwO1crK31yZXR1cm4gYy5hdHRyaWJ1dGVzTnVtIT09V3x8Yy5pbmRleCE9PUZ9ZnVuY3Rpb24geShSLEYpe2xldCB6PXt9LFU9Ui5hdHRyaWJ1dGVzLFc9MDtmb3IobGV0IFogaW4gVSl7bGV0IHJ0PVVbWl0sb3Q9e307b3QuYXR0cmlidXRlPXJ0LHJ0LmRhdGEmJihvdC5kYXRhPXJ0LmRhdGEpLHpbWl09b3QsVysrfWMuYXR0cmlidXRlcz16LGMuYXR0cmlidXRlc051bT1XLGMuaW5kZXg9Rn1mdW5jdGlvbiB4KCl7bGV0IFI9Yy5uZXdBdHRyaWJ1dGVzO2ZvcihsZXQgRj0wLHo9Ui5sZW5ndGg7Rjx6O0YrKylSW0ZdPTB9ZnVuY3Rpb24gYihSKXtTKFIsMCl9ZnVuY3Rpb24gUyhSLEYpe2xldCB6PWMubmV3QXR0cmlidXRlcyxVPWMuZW5hYmxlZEF0dHJpYnV0ZXMsVz1jLmF0dHJpYnV0ZURpdmlzb3JzO3pbUl09MSxVW1JdPT09MCYmKGUuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoUiksVVtSXT0xKSxXW1JdIT09RiYmKChuLmlzV2ViR0wyP2U6dC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSlbbi5pc1dlYkdMMj8idmVydGV4QXR0cmliRGl2aXNvciI6InZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSJdKFIsRiksV1tSXT1GKX1mdW5jdGlvbiBDKCl7bGV0IFI9Yy5uZXdBdHRyaWJ1dGVzLEY9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IHo9MCxVPUYubGVuZ3RoO3o8VTt6KyspRlt6XSE9PVJbel0mJihlLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh6KSxGW3pdPTApfWZ1bmN0aW9uIFAoUixGLHosVSxXLFope24uaXNXZWJHTDI9PT0hMCYmKHo9PT01MTI0fHx6PT09NTEyNSk/ZS52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihSLEYseixXLFopOmUudmVydGV4QXR0cmliUG9pbnRlcihSLEYseixVLFcsWil9ZnVuY3Rpb24gayhSLEYseixVKXtpZihuLmlzV2ViR0wyPT09ITEmJihSLmlzSW5zdGFuY2VkTWVzaHx8VS5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KSYmdC5nZXQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKT09PW51bGwpcmV0dXJuO3goKTtsZXQgVz1VLmF0dHJpYnV0ZXMsWj16LmdldEF0dHJpYnV0ZXMoKSxydD1GLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM7Zm9yKGxldCBvdCBpbiBaKXtsZXQgc3Q9WltvdF07aWYoc3QubG9jYXRpb24+PTApe2xldCBTdD1XW290XTtpZihTdD09PXZvaWQgMCYmKG90PT09Imluc3RhbmNlTWF0cml4IiYmUi5pbnN0YW5jZU1hdHJpeCYmKFN0PVIuaW5zdGFuY2VNYXRyaXgpLG90PT09Imluc3RhbmNlQ29sb3IiJiZSLmluc3RhbmNlQ29sb3ImJihTdD1SLmluc3RhbmNlQ29sb3IpKSxTdCE9PXZvaWQgMCl7bGV0IGJ0PVN0Lm5vcm1hbGl6ZWQsTXQ9U3QuaXRlbVNpemUsbHQ9ci5nZXQoU3QpO2lmKGx0PT09dm9pZCAwKWNvbnRpbnVlO2xldCBLdD1sdC5idWZmZXIsX3Q9bHQudHlwZSxjdD1sdC5ieXRlc1BlckVsZW1lbnQ7aWYoU3QuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IFg9U3QuZGF0YSxldD1YLnN0cmlkZSxkdD1TdC5vZmZzZXQ7aWYoWCYmWC5pc0luc3RhbmNlZEludGVybGVhdmVkQnVmZmVyKXtmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspUyhzdC5sb2NhdGlvbitxLFgubWVzaFBlckF0dHJpYnV0ZSk7Ui5pc0luc3RhbmNlZE1lc2ghPT0hMCYmVS5fbWF4SW5zdGFuY2VDb3VudD09PXZvaWQgMCYmKFUuX21heEluc3RhbmNlQ291bnQ9WC5tZXNoUGVyQXR0cmlidXRlKlguY291bnQpfWVsc2UgZm9yKGxldCBxPTA7cTxzdC5sb2NhdGlvblNpemU7cSsrKWIoc3QubG9jYXRpb24rcSk7ZS5iaW5kQnVmZmVyKDM0OTYyLEt0KTtmb3IobGV0IHE9MDtxPHN0LmxvY2F0aW9uU2l6ZTtxKyspUChzdC5sb2NhdGlvbitxLE10L3N0LmxvY2F0aW9uU2l6ZSxfdCxidCxldCpjdCwoZHQrTXQvc3QubG9jYXRpb25TaXplKnEpKmN0KX1lbHNle2lmKFN0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspUyhzdC5sb2NhdGlvbitYLFN0Lm1lc2hQZXJBdHRyaWJ1dGUpO1IuaXNJbnN0YW5jZWRNZXNoIT09ITAmJlUuX21heEluc3RhbmNlQ291bnQ9PT12b2lkIDAmJihVLl9tYXhJbnN0YW5jZUNvdW50PVN0Lm1lc2hQZXJBdHRyaWJ1dGUqU3QuY291bnQpfWVsc2UgZm9yKGxldCBYPTA7WDxzdC5sb2NhdGlvblNpemU7WCsrKWIoc3QubG9jYXRpb24rWCk7ZS5iaW5kQnVmZmVyKDM0OTYyLEt0KTtmb3IobGV0IFg9MDtYPHN0LmxvY2F0aW9uU2l6ZTtYKyspUChzdC5sb2NhdGlvbitYLE10L3N0LmxvY2F0aW9uU2l6ZSxfdCxidCxNdCpjdCxNdC9zdC5sb2NhdGlvblNpemUqWCpjdCl9fWVsc2UgaWYocnQhPT12b2lkIDApe2xldCBidD1ydFtvdF07aWYoYnQhPT12b2lkIDApc3dpdGNoKGJ0Lmxlbmd0aCl7Y2FzZSAyOmUudmVydGV4QXR0cmliMmZ2KHN0LmxvY2F0aW9uLGJ0KTticmVhaztjYXNlIDM6ZS52ZXJ0ZXhBdHRyaWIzZnYoc3QubG9jYXRpb24sYnQpO2JyZWFrO2Nhc2UgNDplLnZlcnRleEF0dHJpYjRmdihzdC5sb2NhdGlvbixidCk7YnJlYWs7ZGVmYXVsdDplLnZlcnRleEF0dHJpYjFmdihzdC5sb2NhdGlvbixidCl9fX19QygpfWZ1bmN0aW9uIE8oKXtJKCk7Zm9yKGxldCBSIGluIHMpe2xldCBGPXNbUl07Zm9yKGxldCB6IGluIEYpe2xldCBVPUZbel07Zm9yKGxldCBXIGluIFUpcChVW1ddLm9iamVjdCksZGVsZXRlIFVbV107ZGVsZXRlIEZbel19ZGVsZXRlIHNbUl19fWZ1bmN0aW9uIEQoUil7aWYoc1tSLmlkXT09PXZvaWQgMClyZXR1cm47bGV0IEY9c1tSLmlkXTtmb3IobGV0IHogaW4gRil7bGV0IFU9Rlt6XTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgRlt6XX1kZWxldGUgc1tSLmlkXX1mdW5jdGlvbiBCKFIpe2ZvcihsZXQgRiBpbiBzKXtsZXQgej1zW0ZdO2lmKHpbUi5pZF09PT12b2lkIDApY29udGludWU7bGV0IFU9eltSLmlkXTtmb3IobGV0IFcgaW4gVSlwKFVbV10ub2JqZWN0KSxkZWxldGUgVVtXXTtkZWxldGUgeltSLmlkXX19ZnVuY3Rpb24gSSgpe0woKSxjIT09bCYmKGM9bCxmKGMub2JqZWN0KSl9ZnVuY3Rpb24gTCgpe2wuZ2VvbWV0cnk9bnVsbCxsLnByb2dyYW09bnVsbCxsLndpcmVmcmFtZT0hMX1yZXR1cm57c2V0dXA6dSxyZXNldDpJLHJlc2V0RGVmYXVsdFN0YXRlOkwsZGlzcG9zZTpPLHJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5OkQscmVsZWFzZVN0YXRlc09mUHJvZ3JhbTpCLGluaXRBdHRyaWJ1dGVzOngsZW5hYmxlQXR0cmlidXRlOmIsZGlzYWJsZVVudXNlZEF0dHJpYnV0ZXM6Q319ZnVuY3Rpb24gV2RyKGUsdCxyLG4pe2xldCBpPW4uaXNXZWJHTDIsbztmdW5jdGlvbiBhKGMpe289Y31mdW5jdGlvbiBzKGMsdSl7ZS5kcmF3QXJyYXlzKG8sYyx1KSxyLnVwZGF0ZSh1LG8sMSl9ZnVuY3Rpb24gbChjLHUsaCl7aWYoaD09PTApcmV0dXJuO2xldCBmLHA7aWYoaSlmPWUscD0iZHJhd0FycmF5c0luc3RhbmNlZCI7ZWxzZSBpZihmPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikscD0iZHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIixmPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cmV0dXJufWZbcF0obyxjLHUsaCksci51cGRhdGUodSxvLGgpfXRoaXMuc2V0TW9kZT1hLHRoaXMucmVuZGVyPXMsdGhpcy5yZW5kZXJJbnN0YW5jZXM9bH1mdW5jdGlvbiBZZHIoZSx0LHIpe2xldCBuO2Z1bmN0aW9uIGkoKXtpZihuIT09dm9pZCAwKXJldHVybiBuO2lmKHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgaz10LmdldCgiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7bj1lLmdldFBhcmFtZXRlcihrLk1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCl9ZWxzZSBuPTA7cmV0dXJuIG59ZnVuY3Rpb24gbyhrKXtpZihrPT09ImhpZ2hwIil7aWYoZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjtrPSJtZWRpdW1wIn1yZXR1cm4gaz09PSJtZWRpdW1wIiYmZS5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzcpLnByZWNpc2lvbj4wJiZlLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzNykucHJlY2lzaW9uPjA/Im1lZGl1bXAiOiJsb3dwIn1sZXQgYT10eXBlb2YgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCE9InVuZGVmaW5lZCImJmUgaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0fHx0eXBlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQhPSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgV2ViR0wyQ29tcHV0ZVJlbmRlcmluZ0NvbnRleHQscz1yLnByZWNpc2lvbiE9PXZvaWQgMD9yLnByZWNpc2lvbjoiaGlnaHAiLGw9byhzKTtsIT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjoiLHMsIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixsLCJpbnN0ZWFkLiIpLHM9bCk7bGV0IGM9YXx8dC5oYXMoIldFQkdMX2RyYXdfYnVmZmVycyIpLHU9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPT09ITAsaD1lLmdldFBhcmFtZXRlcigzNDkzMCksZj1lLmdldFBhcmFtZXRlcigzNTY2MCkscD1lLmdldFBhcmFtZXRlcigzMzc5KSxkPWUuZ2V0UGFyYW1ldGVyKDM0MDc2KSxnPWUuZ2V0UGFyYW1ldGVyKDM0OTIxKSxfPWUuZ2V0UGFyYW1ldGVyKDM2MzQ3KSx5PWUuZ2V0UGFyYW1ldGVyKDM2MzQ4KSx4PWUuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxiPWY+MCxTPWF8fHQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpLEM9YiYmUyxQPWE/ZS5nZXRQYXJhbWV0ZXIoMzYxODMpOjA7cmV0dXJue2lzV2ViR0wyOmEsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmksZ2V0TWF4UHJlY2lzaW9uOm8scHJlY2lzaW9uOnMsbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjp1LG1heFRleHR1cmVzOmgsbWF4VmVydGV4VGV4dHVyZXM6ZixtYXhUZXh0dXJlU2l6ZTpwLG1heEN1YmVtYXBTaXplOmQsbWF4QXR0cmlidXRlczpnLG1heFZlcnRleFVuaWZvcm1zOl8sbWF4VmFyeWluZ3M6eSxtYXhGcmFnbWVudFVuaWZvcm1zOngsdmVydGV4VGV4dHVyZXM6YixmbG9hdEZyYWdtZW50VGV4dHVyZXM6UyxmbG9hdFZlcnRleFRleHR1cmVzOkMsbWF4U2FtcGxlczpQfX1mdW5jdGlvbiBqZHIoZSl7bGV0IHQ9dGhpcyxyPW51bGwsbj0wLGk9ITEsbz0hMSxhPW5ldyAkYyxzPW5ldyBraSxsPXt2YWx1ZTpudWxsLG5lZWRzVXBkYXRlOiExfTt0aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGgsZixwKXtsZXQgZD1oLmxlbmd0aCE9PTB8fGZ8fG4hPT0wfHxpO3JldHVybiBpPWYscj11KGgscCwwKSxuPWgubGVuZ3RoLGR9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihoLGYscCl7bGV0IGQ9aC5jbGlwcGluZ1BsYW5lcyxnPWguY2xpcEludGVyc2VjdGlvbixfPWguY2xpcFNoYWRvd3MseT1lLmdldChoKTtpZighaXx8ZD09PW51bGx8fGQubGVuZ3RoPT09MHx8byYmIV8pbz91KG51bGwpOmMoKTtlbHNle2xldCB4PW8/MDpuLGI9eCo0LFM9eS5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9UyxTPXUoZCxmLGIscCk7Zm9yKGxldCBDPTA7QyE9PWI7KytDKVNbQ109cltDXTt5LmNsaXBwaW5nU3RhdGU9Uyx0aGlzLm51bUludGVyc2VjdGlvbj1nP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPXh9fTtmdW5jdGlvbiBjKCl7bC52YWx1ZSE9PXImJihsLnZhbHVlPXIsbC5uZWVkc1VwZGF0ZT1uPjApLHQubnVtUGxhbmVzPW4sdC5udW1JbnRlcnNlY3Rpb249MH1mdW5jdGlvbiB1KGgsZixwLGQpe2xldCBnPWghPT1udWxsP2gubGVuZ3RoOjAsXz1udWxsO2lmKGchPT0wKXtpZihfPWwudmFsdWUsZCE9PSEwfHxfPT09bnVsbCl7bGV0IHk9cCtnKjQseD1mLm1hdHJpeFdvcmxkSW52ZXJzZTtzLmdldE5vcm1hbE1hdHJpeCh4KSwoXz09PW51bGx8fF8ubGVuZ3RoPHkpJiYoXz1uZXcgRmxvYXQzMkFycmF5KHkpKTtmb3IobGV0IGI9MCxTPXA7YiE9PWc7KytiLFMrPTQpYS5jb3B5KGhbYl0pLmFwcGx5TWF0cml4NCh4LHMpLGEubm9ybWFsLnRvQXJyYXkoXyxTKSxfW1MrM109YS5jb25zdGFudH1sLnZhbHVlPV8sbC5uZWVkc1VwZGF0ZT0hMH1yZXR1cm4gdC5udW1QbGFuZXM9Zyx0Lm51bUludGVyc2VjdGlvbj0wLF99fWZ1bmN0aW9uIFhkcihlKXtsZXQgdD1uZXcgV2Vha01hcDtmdW5jdGlvbiByKGEscyl7cmV0dXJuIHM9PT1XUD9hLm1hcHBpbmc9bng6cz09PVlQJiYoYS5tYXBwaW5nPWl4KSxhfWZ1bmN0aW9uIG4oYSl7aWYoYSYmYS5pc1RleHR1cmUmJmEuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITEpe2xldCBzPWEubWFwcGluZztpZihzPT09V1B8fHM9PT1ZUClpZih0LmhhcyhhKSl7bGV0IGw9dC5nZXQoYSkudGV4dHVyZTtyZXR1cm4gcihsLGEubWFwcGluZyl9ZWxzZXtsZXQgbD1hLmltYWdlO2lmKGwmJmwuaGVpZ2h0PjApe2xldCBjPW5ldyBRMyhsLmhlaWdodC8yKTtyZXR1cm4gYy5mcm9tRXF1aXJlY3Rhbmd1bGFyVGV4dHVyZShlLGEpLHQuc2V0KGEsYyksYS5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpKSxyKGMudGV4dHVyZSxhLm1hcHBpbmcpfWVsc2UgcmV0dXJuIG51bGx9fXJldHVybiBhfWZ1bmN0aW9uIGkoYSl7bGV0IHM9YS50YXJnZXQ7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixpKTtsZXQgbD10LmdldChzKTtsIT09dm9pZCAwJiYodC5kZWxldGUocyksbC5kaXNwb3NlKCkpfWZ1bmN0aW9uIG8oKXt0PW5ldyBXZWFrTWFwfXJldHVybntnZXQ6bixkaXNwb3NlOm99fXZhciBEdj1jbGFzcyBleHRlbmRzIFJ2e2NvbnN0cnVjdG9yKHQ9LTEscj0xLG49MSxpPS0xLG89LjEsYT0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJPcnRob2dyYXBoaWNDYW1lcmEiLHRoaXMuem9vbT0xLHRoaXMudmlldz1udWxsLHRoaXMubGVmdD10LHRoaXMucmlnaHQ9cix0aGlzLnRvcD1uLHRoaXMuYm90dG9tPWksdGhpcy5uZWFyPW8sdGhpcy5mYXI9YSx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQscil7cmV0dXJuIHN1cGVyLmNvcHkodCxyKSx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLnRvcD10LnRvcCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLm5lYXI9dC5uZWFyLHRoaXMuZmFyPXQuZmFyLHRoaXMuem9vbT10Lnpvb20sdGhpcy52aWV3PXQudmlldz09PW51bGw/bnVsbDpPYmplY3QuYXNzaWduKHt9LHQudmlldyksdGhpc31zZXRWaWV3T2Zmc2V0KHQscixuLGksbyxhKXt0aGlzLnZpZXc9PT1udWxsJiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9cix0aGlzLnZpZXcub2Zmc2V0WD1uLHRoaXMudmlldy5vZmZzZXRZPWksdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1hLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe3RoaXMudmlldyE9PW51bGwmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvKDIqdGhpcy56b29tKSxyPSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvKDIqdGhpcy56b29tKSxuPSh0aGlzLnJpZ2h0K3RoaXMubGVmdCkvMixpPSh0aGlzLnRvcCt0aGlzLmJvdHRvbSkvMixvPW4tdCxhPW4rdCxzPWkrcixsPWktcjtpZih0aGlzLnZpZXchPT1udWxsJiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGM9KHRoaXMucmlnaHQtdGhpcy5sZWZ0KS90aGlzLnZpZXcuZnVsbFdpZHRoL3RoaXMuem9vbSx1PSh0aGlzLnRvcC10aGlzLmJvdHRvbSkvdGhpcy52aWV3LmZ1bGxIZWlnaHQvdGhpcy56b29tO28rPWMqdGhpcy52aWV3Lm9mZnNldFgsYT1vK2MqdGhpcy52aWV3LndpZHRoLHMtPXUqdGhpcy52aWV3Lm9mZnNldFksbD1zLXUqdGhpcy52aWV3LmhlaWdodH10aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZU9ydGhvZ3JhcGhpYyhvLGEscyxsLHRoaXMubmVhcix0aGlzLmZhciksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMucHJvamVjdGlvbk1hdHJpeCkuaW52ZXJ0KCl9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3Quem9vbT10aGlzLnpvb20sci5vYmplY3QubGVmdD10aGlzLmxlZnQsci5vYmplY3QucmlnaHQ9dGhpcy5yaWdodCxyLm9iamVjdC50b3A9dGhpcy50b3Asci5vYmplY3QuYm90dG9tPXRoaXMuYm90dG9tLHIub2JqZWN0Lm5lYXI9dGhpcy5uZWFyLHIub2JqZWN0LmZhcj10aGlzLmZhcix0aGlzLnZpZXchPT1udWxsJiYoci5vYmplY3Qudmlldz1PYmplY3QuYXNzaWduKHt9LHRoaXMudmlldykpLHJ9fTtEdi5wcm90b3R5cGUuaXNPcnRob2dyYXBoaWNDYW1lcmE9ITA7dmFyIFUwPWNsYXNzIGV4dGVuZHMgbGh7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy50eXBlPSJSYXdTaGFkZXJNYXRlcmlhbCJ9fTtVMC5wcm90b3R5cGUuaXNSYXdTaGFkZXJNYXRlcmlhbD0hMDt2YXIgcTM9NCxGMD04LCRmPU1hdGgucG93KDIsRjApLEZmZT1bLjEyNSwuMjE1LC4zNSwuNDQ2LC41MjYsLjU4Ml0sQmZlPUYwLXEzKzErRmZlLmxlbmd0aCxrMz0yMCxmdXQ9bmV3IER2LHtfbG9kUGxhbmVzOlJQLF9zaXplTG9kczpNdWUsX3NpZ21hczpBVn09JGRyKCksRXVlPW5ldyBuZSxwdXQ9bnVsbCxTdj0oMStNYXRoLnNxcnQoNSkpLzIsUjM9MS9TdixUdWU9W25ldyBqKDEsMSwxKSxuZXcgaigtMSwxLDEpLG5ldyBqKDEsMSwtMSksbmV3IGooLTEsMSwtMSksbmV3IGooMCxTdixSMyksbmV3IGooMCxTdiwtUjMpLG5ldyBqKFIzLDAsU3YpLG5ldyBqKC1SMywwLFN2KSxuZXcgaihTdixSMywwKSxuZXcgaigtU3YsUjMsMCldLHQ2PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlbmRlcmVyPXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9bnVsbCx0aGlzLl9ibHVyTWF0ZXJpYWw9S2RyKGszKSx0aGlzLl9lcXVpcmVjdFNoYWRlcj1udWxsLHRoaXMuX2N1YmVtYXBTaGFkZXI9bnVsbCx0aGlzLl9jb21waWxlTWF0ZXJpYWwodGhpcy5fYmx1ck1hdGVyaWFsKX1mcm9tU2NlbmUodCxyPTAsbj0uMSxpPTEwMCl7cHV0PXRoaXMuX3JlbmRlcmVyLmdldFJlbmRlclRhcmdldCgpO2xldCBvPXRoaXMuX2FsbG9jYXRlVGFyZ2V0cygpO3JldHVybiB0aGlzLl9zY2VuZVRvQ3ViZVVWKHQsbixpLG8pLHI+MCYmdGhpcy5fYmx1cihvLDAsMCxyKSx0aGlzLl9hcHBseVBNUkVNKG8pLHRoaXMuX2NsZWFudXAobyksb31mcm9tRXF1aXJlY3Rhbmd1bGFyKHQscj1udWxsKXtyZXR1cm4gdGhpcy5fZnJvbVRleHR1cmUodCxyKX1mcm9tQ3ViZW1hcCh0LHI9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQscil9Y29tcGlsZUN1YmVtYXBTaGFkZXIoKXt0aGlzLl9jdWJlbWFwU2hhZGVyPT09bnVsbCYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9UHVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2N1YmVtYXBTaGFkZXIpKX1jb21waWxlRXF1aXJlY3Rhbmd1bGFyU2hhZGVyKCl7dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9QXVlKCksdGhpcy5fY29tcGlsZU1hdGVyaWFsKHRoaXMuX2VxdWlyZWN0U2hhZGVyKSl9ZGlzcG9zZSgpe3RoaXMuX2JsdXJNYXRlcmlhbC5kaXNwb3NlKCksdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQhPT1udWxsJiZ0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldC5kaXNwb3NlKCksdGhpcy5fY3ViZW1hcFNoYWRlciE9PW51bGwmJnRoaXMuX2N1YmVtYXBTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyIT09bnVsbCYmdGhpcy5fZXF1aXJlY3RTaGFkZXIuZGlzcG9zZSgpO2ZvcihsZXQgdD0wO3Q8UlAubGVuZ3RoO3QrKylSUFt0XS5kaXNwb3NlKCl9X2NsZWFudXAodCl7dGhpcy5fcmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KHB1dCksdC5zY2lzc29yVGVzdD0hMSxQVih0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KX1fZnJvbVRleHR1cmUodCxyKXtwdXQ9dGhpcy5fcmVuZGVyZXIuZ2V0UmVuZGVyVGFyZ2V0KCk7bGV0IG49cnx8dGhpcy5fYWxsb2NhdGVUYXJnZXRzKHQpO3JldHVybiB0aGlzLl90ZXh0dXJlVG9DdWJlVVYodCxuKSx0aGlzLl9hcHBseVBNUkVNKG4pLHRoaXMuX2NsZWFudXAobiksbn1fYWxsb2NhdGVUYXJnZXRzKHQpe2xldCByPXttYWdGaWx0ZXI6b2ksbWluRmlsdGVyOm9pLGdlbmVyYXRlTWlwbWFwczohMSx0eXBlOkN2LGZvcm1hdDpRbyxlbmNvZGluZzpRZCxkZXB0aEJ1ZmZlcjohMX0sbj1DdWUocik7cmV0dXJuIG4uZGVwdGhCdWZmZXI9IXQsdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9PT1udWxsJiYodGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ9Q3VlKHIpKSxufV9jb21waWxlTWF0ZXJpYWwodCl7bGV0IHI9bmV3IGVpKFJQWzBdLHQpO3RoaXMuX3JlbmRlcmVyLmNvbXBpbGUocixmdXQpfV9zY2VuZVRvQ3ViZVVWKHQscixuLGkpe2xldCBzPW5ldyBVaSg5MCwxLHIsbiksbD1bMSwtMSwxLDEsMSwxXSxjPVsxLDEsMSwtMSwtMSwtMV0sdT10aGlzLl9yZW5kZXJlcixoPXUuYXV0b0NsZWFyLGY9dS50b25lTWFwcGluZzt1LmdldENsZWFyQ29sb3IoRXVlKSx1LnRvbmVNYXBwaW5nPUtkLHUuYXV0b0NsZWFyPSExO2xldCBwPW5ldyBzaCh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZTpJaSxkZXB0aFdyaXRlOiExLGRlcHRoVGVzdDohMX0pLGQ9bmV3IGVpKG5ldyBRZixwKSxnPSExLF89dC5iYWNrZ3JvdW5kO18/Xy5pc0NvbG9yJiYocC5jb2xvci5jb3B5KF8pLHQuYmFja2dyb3VuZD1udWxsLGc9ITApOihwLmNvbG9yLmNvcHkoRXVlKSxnPSEwKTtmb3IobGV0IHk9MDt5PDY7eSsrKXtsZXQgeD15JTM7eD09PTA/KHMudXAuc2V0KDAsbFt5XSwwKSxzLmxvb2tBdChjW3ldLDAsMCkpOng9PT0xPyhzLnVwLnNldCgwLDAsbFt5XSkscy5sb29rQXQoMCxjW3ldLDApKToocy51cC5zZXQoMCxsW3ldLDApLHMubG9va0F0KDAsMCxjW3ldKSksUFYoaSx4KiRmLHk+Mj8kZjowLCRmLCRmKSx1LnNldFJlbmRlclRhcmdldChpKSxnJiZ1LnJlbmRlcihkLHMpLHUucmVuZGVyKHQscyl9ZC5nZW9tZXRyeS5kaXNwb3NlKCksZC5tYXRlcmlhbC5kaXNwb3NlKCksdS50b25lTWFwcGluZz1mLHUuYXV0b0NsZWFyPWgsdC5iYWNrZ3JvdW5kPV99X3RleHR1cmVUb0N1YmVVVih0LHIpe2xldCBuPXRoaXMuX3JlbmRlcmVyLGk9dC5tYXBwaW5nPT09bnh8fHQubWFwcGluZz09PWl4O2k/KHRoaXMuX2N1YmVtYXBTaGFkZXI9PT1udWxsJiYodGhpcy5fY3ViZW1hcFNoYWRlcj1QdWUoKSksdGhpcy5fY3ViZW1hcFNoYWRlci51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPT09ITE/LTE6MSk6dGhpcy5fZXF1aXJlY3RTaGFkZXI9PT1udWxsJiYodGhpcy5fZXF1aXJlY3RTaGFkZXI9QXVlKCkpO2xldCBvPWk/dGhpcy5fY3ViZW1hcFNoYWRlcjp0aGlzLl9lcXVpcmVjdFNoYWRlcixhPW5ldyBlaShSUFswXSxvKSxzPW8udW5pZm9ybXM7cy5lbnZNYXAudmFsdWU9dCxpfHxzLnRleGVsU2l6ZS52YWx1ZS5zZXQoMS90LmltYWdlLndpZHRoLDEvdC5pbWFnZS5oZWlnaHQpLFBWKHIsMCwwLDMqJGYsMiokZiksbi5zZXRSZW5kZXJUYXJnZXQociksbi5yZW5kZXIoYSxmdXQpfV9hcHBseVBNUkVNKHQpe2xldCByPXRoaXMuX3JlbmRlcmVyLG49ci5hdXRvQ2xlYXI7ci5hdXRvQ2xlYXI9ITE7Zm9yKGxldCBpPTE7aTxCZmU7aSsrKXtsZXQgbz1NYXRoLnNxcnQoQVZbaV0qQVZbaV0tQVZbaS0xXSpBVltpLTFdKSxhPVR1ZVsoaS0xKSVUdWUubGVuZ3RoXTt0aGlzLl9ibHVyKHQsaS0xLGksbyxhKX1yLmF1dG9DbGVhcj1ufV9ibHVyKHQscixuLGksbyl7bGV0IGE9dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQ7dGhpcy5faGFsZkJsdXIodCxhLHIsbixpLCJsYXRpdHVkaW5hbCIsbyksdGhpcy5faGFsZkJsdXIoYSx0LG4sbixpLCJsb25naXR1ZGluYWwiLG8pfV9oYWxmQmx1cih0LHIsbixpLG8sYSxzKXtsZXQgbD10aGlzLl9yZW5kZXJlcixjPXRoaXMuX2JsdXJNYXRlcmlhbDthIT09ImxhdGl0dWRpbmFsIiYmYSE9PSJsb25naXR1ZGluYWwiJiZjb25zb2xlLmVycm9yKCJibHVyIGRpcmVjdGlvbiBtdXN0IGJlIGVpdGhlciBsYXRpdHVkaW5hbCBvciBsb25naXR1ZGluYWwhIik7bGV0IHU9MyxoPW5ldyBlaShSUFtpXSxjKSxmPWMudW5pZm9ybXMscD1NdWVbbl0tMSxkPWlzRmluaXRlKG8pP01hdGguUEkvKDIqcCk6MipNYXRoLlBJLygyKmszLTEpLGc9by9kLF89aXNGaW5pdGUobyk/MStNYXRoLmZsb29yKHUqZyk6azM7Xz5rMyYmY29uc29sZS53YXJuKGBzaWdtYVJhZGlhbnMsICR7b30sIGlzIHRvbyBsYXJnZSBhbmQgd2lsbCBjbGlwLCBhcyBpdCByZXF1ZXN0ZWQgJHtffSBzYW1wbGVzIHdoZW4gdGhlIG1heGltdW0gaXMgc2V0IHRvICR7azN9YCk7bGV0IHk9W10seD0wO2ZvcihsZXQgUD0wO1A8azM7KytQKXtsZXQgaz1QL2csTz1NYXRoLmV4cCgtayprLzIpO3kucHVzaChPKSxQPT09MD94Kz1POlA8XyYmKHgrPTIqTyl9Zm9yKGxldCBQPTA7UDx5Lmxlbmd0aDtQKyspeVtQXT15W1BdL3g7Zi5lbnZNYXAudmFsdWU9dC50ZXh0dXJlLGYuc2FtcGxlcy52YWx1ZT1fLGYud2VpZ2h0cy52YWx1ZT15LGYubGF0aXR1ZGluYWwudmFsdWU9YT09PSJsYXRpdHVkaW5hbCIscyYmKGYucG9sZUF4aXMudmFsdWU9cyksZi5kVGhldGEudmFsdWU9ZCxmLm1pcEludC52YWx1ZT1GMC1uO2xldCBiPU11ZVtpXSxTPTMqTWF0aC5tYXgoMCwkZi0yKmIpLEM9KGk9PT0wPzA6MiokZikrMipiKihpPkYwLXEzP2ktRjArcTM6MCk7UFYocixTLEMsMypiLDIqYiksbC5zZXRSZW5kZXJUYXJnZXQociksbC5yZW5kZXIoaCxmdXQpfX07ZnVuY3Rpb24gJGRyKCl7bGV0IGU9W10sdD1bXSxyPVtdLG49RjA7Zm9yKGxldCBpPTA7aTxCZmU7aSsrKXtsZXQgbz1NYXRoLnBvdygyLG4pO3QucHVzaChvKTtsZXQgYT0xL287aT5GMC1xMz9hPUZmZVtpLUYwK3EzLTFdOmk9PT0wJiYoYT0wKSxyLnB1c2goYSk7bGV0IHM9MS8oby0xKSxsPS1zLzIsYz0xK3MvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10saD02LGY9NixwPTMsZD0yLGc9MSxfPW5ldyBGbG9hdDMyQXJyYXkocCpmKmgpLHk9bmV3IEZsb2F0MzJBcnJheShkKmYqaCkseD1uZXcgRmxvYXQzMkFycmF5KGcqZipoKTtmb3IobGV0IFM9MDtTPGg7UysrKXtsZXQgQz1TJTMqMi8zLTEsUD1TPjI/MDotMSxrPVtDLFAsMCxDKzIvMyxQLDAsQysyLzMsUCsxLDAsQyxQLDAsQysyLzMsUCsxLDAsQyxQKzEsMF07Xy5zZXQoayxwKmYqUykseS5zZXQodSxkKmYqUyk7bGV0IE89W1MsUyxTLFMsUyxTXTt4LnNldChPLGcqZipTKX1sZXQgYj1uZXcgUGU7Yi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUoXyxwKSksYi5zZXRBdHRyaWJ1dGUoInV2IixuZXcgSmUoeSxkKSksYi5zZXRBdHRyaWJ1dGUoImZhY2VJbmRleCIsbmV3IEplKHgsZykpLGUucHVzaChiKSxuPnEzJiZuLS19cmV0dXJue19sb2RQbGFuZXM6ZSxfc2l6ZUxvZHM6dCxfc2lnbWFzOnJ9fWZ1bmN0aW9uIEN1ZShlKXtsZXQgdD1uZXcgdXMoMyokZiwzKiRmLGUpO3JldHVybiB0LnRleHR1cmUubWFwcGluZz14TSx0LnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2Iix0LnNjaXNzb3JUZXN0PSEwLHR9ZnVuY3Rpb24gUFYoZSx0LHIsbixpKXtlLnZpZXdwb3J0LnNldCh0LHIsbixpKSxlLnNjaXNzb3Iuc2V0KHQscixuLGkpfWZ1bmN0aW9uIEtkcihlKXtsZXQgdD1uZXcgRmxvYXQzMkFycmF5KGUpLHI9bmV3IGooMCwxLDApO3JldHVybiBuZXcgVTAoe25hbWU6IlNwaGVyaWNhbEdhdXNzaWFuQmx1ciIsZGVmaW5lczp7bjplfSx1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSxzYW1wbGVzOnt2YWx1ZToxfSx3ZWlnaHRzOnt2YWx1ZTp0fSxsYXRpdHVkaW5hbDp7dmFsdWU6ITF9LGRUaGV0YTp7dmFsdWU6MH0sbWlwSW50Ont2YWx1ZTowfSxwb2xlQXhpczp7dmFsdWU6cn19LHZlcnRleFNoYWRlcjpEaHQoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gaW50IHNhbXBsZXM7CgkJCXVuaWZvcm0gZmxvYXQgd2VpZ2h0c1sgbiBdOwoJCQl1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7CgkJCXVuaWZvcm0gZmxvYXQgZFRoZXRhOwoJCQl1bmlmb3JtIGZsb2F0IG1pcEludDsKCQkJdW5pZm9ybSB2ZWMzIHBvbGVBeGlzOwoKCQkJI2RlZmluZSBFTlZNQVBfVFlQRV9DVUJFX1VWCgkJCSNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+CgoJCQl2ZWMzIGdldFNhbXBsZSggZmxvYXQgdGhldGEsIHZlYzMgYXhpcyApIHsKCgkJCQlmbG9hdCBjb3NUaGV0YSA9IGNvcyggdGhldGEgKTsKCQkJCS8vIFJvZHJpZ3VlcycgYXhpcy1hbmdsZSByb3RhdGlvbgoJCQkJdmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGEKCQkJCQkrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhICkKCQkJCQkrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTsKCgkJCQlyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTsKCgkJCX0KCgkJCXZvaWQgbWFpbigpIHsKCgkJCQl2ZWMzIGF4aXMgPSBsYXRpdHVkaW5hbCA/IHBvbGVBeGlzIDogY3Jvc3MoIHBvbGVBeGlzLCB2T3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJaWYgKCBhbGwoIGVxdWFsKCBheGlzLCB2ZWMzKCAwLjAgKSApICkgKSB7CgoJCQkJCWF4aXMgPSB2ZWMzKCB2T3V0cHV0RGlyZWN0aW9uLnosIDAuMCwgLSB2T3V0cHV0RGlyZWN0aW9uLnggKTsKCgkJCQl9CgoJCQkJYXhpcyA9IG5vcm1hbGl6ZSggYXhpcyApOwoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyAwIF0gKiBnZXRTYW1wbGUoIDAuMCwgYXhpcyApOwoKCQkJCWZvciAoIGludCBpID0gMTsgaSA8IG47IGkrKyApIHsKCgkJCQkJaWYgKCBpID49IHNhbXBsZXMgKSB7CgoJCQkJCQlicmVhazsKCgkJCQkJfQoKCQkJCQlmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7CgkJCQkJZ2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApOwoJCQkJCWdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApOwoKCQkJCX0KCgkJCX0KCQlgLGJsZW5kaW5nOiRkLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExfSl9ZnVuY3Rpb24gQXVlKCl7bGV0IGU9bmV3IEx0KDEsMSk7cmV0dXJuIG5ldyBVMCh7bmFtZToiRXF1aXJlY3Rhbmd1bGFyVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHRleGVsU2l6ZTp7dmFsdWU6ZX19LHZlcnRleFNoYWRlcjpEaHQoKSxmcmFnbWVudFNoYWRlcjpgCgoJCQlwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKCQkJcHJlY2lzaW9uIG1lZGl1bXAgaW50OwoKCQkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCQl1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7CgkJCXVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7CgoJCQkjaW5jbHVkZSA8Y29tbW9uPgoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApOwoKCQkJCXZlYzMgb3V0cHV0RGlyZWN0aW9uID0gbm9ybWFsaXplKCB2T3V0cHV0RGlyZWN0aW9uICk7CgkJCQl2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7CgoJCQkJdmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7CgkJCQl1diAtPSBmICogdGV4ZWxTaXplOwoJCQkJdmVjMyB0bCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54ICs9IHRleGVsU2l6ZS54OwoJCQkJdmVjMyB0ciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di55ICs9IHRleGVsU2l6ZS55OwoJCQkJdmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgkJCQl1di54IC09IHRleGVsU2l6ZS54OwoJCQkJdmVjMyBibCA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7CgoJCQkJdmVjMyB0bSA9IG1peCggdGwsIHRyLCBmLnggKTsKCQkJCXZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7CgkJCQlnbF9GcmFnQ29sb3IucmdiID0gbWl4KCB0bSwgYm0sIGYueSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBQdWUoKXtyZXR1cm4gbmV3IFUwKHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfX0sdmVydGV4U2hhZGVyOkRodCgpLGZyYWdtZW50U2hhZGVyOmAKCgkJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCQlwcmVjaXNpb24gbWVkaXVtcCBpbnQ7CgoJCQl1bmlmb3JtIGZsb2F0IGZsaXBFbnZNYXA7CgoJCQl2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjsKCgkJCXVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwOwoKCQkJdm9pZCBtYWluKCkgewoKCQkJCWdsX0ZyYWdDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiB2T3V0cHV0RGlyZWN0aW9uLngsIHZPdXRwdXREaXJlY3Rpb24ueXogKSApOwoKCQkJfQoJCWAsYmxlbmRpbmc6JGQsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBEaHQoKXtyZXR1cm5gCgoJCXByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwoJCXByZWNpc2lvbiBtZWRpdW1wIGludDsKCgkJYXR0cmlidXRlIHZlYzMgcG9zaXRpb247CgkJYXR0cmlidXRlIHZlYzIgdXY7CgkJYXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDsKCgkJdmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247CgoJCS8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb24KCQl2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHsKCgkJCXV2ID0gMi4wICogdXYgLSAxLjA7CgoJCQl2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTsKCgkJCWlmICggZmFjZSA9PSAwLjAgKSB7CgoJCQkJZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7CgoJCQkJZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6CgoJCQl9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHsKCgkJCQlkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OwoJCQkJZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHgKCgkJCX0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkgewoKCQkJCWRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7CgkJCQlkaXJlY3Rpb24ueHkgKj0gLTEuMDsgLy8gKCAtdSwgLTEsIHYgKSBuZWcgeQoKCQkJfSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7CgoJCQkJZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6CgoJCQl9CgoJCQlyZXR1cm4gZGlyZWN0aW9uOwoKCQl9CgoJCXZvaWQgbWFpbigpIHsKCgkJCXZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTsKCQkJZ2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7CgoJCX0KCWB9ZnVuY3Rpb24gWmRyKGUpe2xldCB0PW5ldyBXZWFrTWFwLHI9bnVsbDtmdW5jdGlvbiBuKHMpe2lmKHMmJnMuaXNUZXh0dXJlKXtsZXQgbD1zLm1hcHBpbmcsYz1sPT09V1B8fGw9PT1ZUCx1PWw9PT1ueHx8bD09PWl4O2lmKGN8fHUpaWYocy5pc1JlbmRlclRhcmdldFRleHR1cmUmJnMubmVlZHNQTVJFTVVwZGF0ZT09PSEwKXtzLm5lZWRzUE1SRU1VcGRhdGU9ITE7bGV0IGg9dC5nZXQocyk7cmV0dXJuIHI9PT1udWxsJiYocj1uZXcgdDYoZSkpLGg9Yz9yLmZyb21FcXVpcmVjdGFuZ3VsYXIocyxoKTpyLmZyb21DdWJlbWFwKHMsaCksdC5zZXQocyxoKSxoLnRleHR1cmV9ZWxzZXtpZih0LmhhcyhzKSlyZXR1cm4gdC5nZXQocykudGV4dHVyZTt7bGV0IGg9cy5pbWFnZTtpZihjJiZoJiZoLmhlaWdodD4wfHx1JiZoJiZpKGgpKXtyPT09bnVsbCYmKHI9bmV3IHQ2KGUpKTtsZXQgZj1jP3IuZnJvbUVxdWlyZWN0YW5ndWxhcihzKTpyLmZyb21DdWJlbWFwKHMpO3JldHVybiB0LnNldChzLGYpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyksZi50ZXh0dXJlfWVsc2UgcmV0dXJuIG51bGx9fX1yZXR1cm4gc31mdW5jdGlvbiBpKHMpe2xldCBsPTAsYz02O2ZvcihsZXQgdT0wO3U8Yzt1Kyspc1t1XSE9PXZvaWQgMCYmbCsrO3JldHVybiBsPT09Y31mdW5jdGlvbiBvKHMpe2xldCBsPXMudGFyZ2V0O2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsbyk7bGV0IGM9dC5nZXQobCk7YyE9PXZvaWQgMCYmKHQuZGVsZXRlKGwpLGMuZGlzcG9zZSgpKX1mdW5jdGlvbiBhKCl7dD1uZXcgV2Vha01hcCxyIT09bnVsbCYmKHIuZGlzcG9zZSgpLHI9bnVsbCl9cmV0dXJue2dldDpuLGRpc3Bvc2U6YX19ZnVuY3Rpb24gSmRyKGUpe2xldCB0PXt9O2Z1bmN0aW9uIHIobil7aWYodFtuXSE9PXZvaWQgMClyZXR1cm4gdFtuXTtsZXQgaTtzd2l0Y2gobil7Y2FzZSJXRUJHTF9kZXB0aF90ZXh0dXJlIjppPWUuZ2V0RXh0ZW5zaW9uKCJXRUJHTF9kZXB0aF90ZXh0dXJlIil8fGUuZ2V0RXh0ZW5zaW9uKCJNT1pfV0VCR0xfZGVwdGhfdGV4dHVyZSIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2RlcHRoX3RleHR1cmUiKTticmVhaztjYXNlIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyI6aT1lLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fGUuZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fGUuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyI6aT1lLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKXx8ZS5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7YnJlYWs7Y2FzZSJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiOmk9ZS5nZXRFeHRlbnNpb24oIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpfHxlLmdldEV4dGVuc2lvbigiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpO2JyZWFrO2RlZmF1bHQ6aT1lLmdldEV4dGVuc2lvbihuKX1yZXR1cm4gdFtuXT1pLGl9cmV0dXJue2hhczpmdW5jdGlvbihuKXtyZXR1cm4gcihuKSE9PW51bGx9LGluaXQ6ZnVuY3Rpb24obil7bi5pc1dlYkdMMj9yKCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik6KHIoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxyKCJPRVNfdGV4dHVyZV9mbG9hdCIpLHIoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxyKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpLHIoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpLHIoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKSxyKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHIoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSkscigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikscigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IikscigiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9LGdldDpmdW5jdGlvbihuKXtsZXQgaT1yKG4pO3JldHVybiBpPT09bnVsbCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK24rIiBleHRlbnNpb24gbm90IHN1cHBvcnRlZC4iKSxpfX19ZnVuY3Rpb24gUWRyKGUsdCxyLG4pe2xldCBpPXt9LG89bmV3IFdlYWtNYXA7ZnVuY3Rpb24gYShoKXtsZXQgZj1oLnRhcmdldDtmLmluZGV4IT09bnVsbCYmdC5yZW1vdmUoZi5pbmRleCk7Zm9yKGxldCBkIGluIGYuYXR0cmlidXRlcyl0LnJlbW92ZShmLmF0dHJpYnV0ZXNbZF0pO2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsYSksZGVsZXRlIGlbZi5pZF07bGV0IHA9by5nZXQoZik7cCYmKHQucmVtb3ZlKHApLG8uZGVsZXRlKGYpKSxuLnJlbGVhc2VTdGF0ZXNPZkdlb21ldHJ5KGYpLGYuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT09PSEwJiZkZWxldGUgZi5fbWF4SW5zdGFuY2VDb3VudCxyLm1lbW9yeS5nZW9tZXRyaWVzLS19ZnVuY3Rpb24gcyhoLGYpe3JldHVybiBpW2YuaWRdPT09ITB8fChmLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLGEpLGlbZi5pZF09ITAsci5tZW1vcnkuZ2VvbWV0cmllcysrKSxmfWZ1bmN0aW9uIGwoaCl7bGV0IGY9aC5hdHRyaWJ1dGVzO2ZvcihsZXQgZCBpbiBmKXQudXBkYXRlKGZbZF0sMzQ5NjIpO2xldCBwPWgubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgZCBpbiBwKXtsZXQgZz1wW2RdO2ZvcihsZXQgXz0wLHk9Zy5sZW5ndGg7Xzx5O18rKyl0LnVwZGF0ZShnW19dLDM0OTYyKX19ZnVuY3Rpb24gYyhoKXtsZXQgZj1bXSxwPWguaW5kZXgsZD1oLmF0dHJpYnV0ZXMucG9zaXRpb24sZz0wO2lmKHAhPT1udWxsKXtsZXQgeD1wLmFycmF5O2c9cC52ZXJzaW9uO2ZvcihsZXQgYj0wLFM9eC5sZW5ndGg7YjxTO2IrPTMpe2xldCBDPXhbYiswXSxQPXhbYisxXSxrPXhbYisyXTtmLnB1c2goQyxQLFAsayxrLEMpfX1lbHNle2xldCB4PWQuYXJyYXk7Zz1kLnZlcnNpb247Zm9yKGxldCBiPTAsUz14Lmxlbmd0aC8zLTE7YjxTO2IrPTMpe2xldCBDPWIrMCxQPWIrMSxrPWIrMjtmLnB1c2goQyxQLFAsayxrLEMpfX1sZXQgXz1uZXcoTmZlKGYpP0szOiQzKShmLDEpO18udmVyc2lvbj1nO2xldCB5PW8uZ2V0KGgpO3kmJnQucmVtb3ZlKHkpLG8uc2V0KGgsXyl9ZnVuY3Rpb24gdShoKXtsZXQgZj1vLmdldChoKTtpZihmKXtsZXQgcD1oLmluZGV4O3AhPT1udWxsJiZmLnZlcnNpb248cC52ZXJzaW9uJiZjKGgpfWVsc2UgYyhoKTtyZXR1cm4gby5nZXQoaCl9cmV0dXJue2dldDpzLHVwZGF0ZTpsLGdldFdpcmVmcmFtZUF0dHJpYnV0ZTp1fX1mdW5jdGlvbiB0bXIoZSx0LHIsbil7bGV0IGk9bi5pc1dlYkdMMixvO2Z1bmN0aW9uIGEoZil7bz1mfWxldCBzLGw7ZnVuY3Rpb24gYyhmKXtzPWYudHlwZSxsPWYuYnl0ZXNQZXJFbGVtZW50fWZ1bmN0aW9uIHUoZixwKXtlLmRyYXdFbGVtZW50cyhvLHAscyxmKmwpLHIudXBkYXRlKHAsbywxKX1mdW5jdGlvbiBoKGYscCxkKXtpZihkPT09MClyZXR1cm47bGV0IGcsXztpZihpKWc9ZSxfPSJkcmF3RWxlbWVudHNJbnN0YW5jZWQiO2Vsc2UgaWYoZz10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLF89ImRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIixnPT09bnVsbCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmRleGVkQnVmZmVyUmVuZGVyZXI6IHVzaW5nIFRIUkVFLkluc3RhbmNlZEJ1ZmZlckdlb21ldHJ5IGJ1dCBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGV4dGVuc2lvbiBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzLiIpO3JldHVybn1nW19dKG8scCxzLGYqbCxkKSxyLnVwZGF0ZShwLG8sZCl9dGhpcy5zZXRNb2RlPWEsdGhpcy5zZXRJbmRleD1jLHRoaXMucmVuZGVyPXUsdGhpcy5yZW5kZXJJbnN0YW5jZXM9aH1mdW5jdGlvbiBlbXIoZSl7bGV0IHQ9e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyPXtmcmFtZTowLGNhbGxzOjAsdHJpYW5nbGVzOjAscG9pbnRzOjAsbGluZXM6MH07ZnVuY3Rpb24gbihvLGEscyl7c3dpdGNoKHIuY2FsbHMrKyxhKXtjYXNlIDQ6ci50cmlhbmdsZXMrPXMqKG8vMyk7YnJlYWs7Y2FzZSAxOnIubGluZXMrPXMqKG8vMik7YnJlYWs7Y2FzZSAzOnIubGluZXMrPXMqKG8tMSk7YnJlYWs7Y2FzZSAyOnIubGluZXMrPXMqbzticmVhaztjYXNlIDA6ci5wb2ludHMrPXMqbzticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5mbzogVW5rbm93biBkcmF3IG1vZGU6IixhKTticmVha319ZnVuY3Rpb24gaSgpe3IuZnJhbWUrKyxyLmNhbGxzPTAsci50cmlhbmdsZXM9MCxyLnBvaW50cz0wLHIubGluZXM9MH1yZXR1cm57bWVtb3J5OnQscmVuZGVyOnIscHJvZ3JhbXM6bnVsbCxhdXRvUmVzZXQ6ITAscmVzZXQ6aSx1cGRhdGU6bn19dmFyIHRNPWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodD1udWxsLHI9MSxuPTEsaT0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLndyYXBSPUpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O3RNLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDtmdW5jdGlvbiBybXIoZSx0KXtyZXR1cm4gZVswXS10WzBdfWZ1bmN0aW9uIG5tcihlLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhlWzFdKX1mdW5jdGlvbiBJdWUoZSx0KXtsZXQgcj0xLG49dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O24gaW5zdGFuY2VvZiBJbnQ4QXJyYXk/cj0xMjc6biBpbnN0YW5jZW9mIEludDE2QXJyYXk/cj0zMjc2NzpuIGluc3RhbmNlb2YgSW50MzJBcnJheT9yPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsbiksZS5kaXZpZGVTY2FsYXIocil9ZnVuY3Rpb24gaW1yKGUsdCxyKXtsZXQgbj17fSxpPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1uZXcgV2Vha01hcCxhPW5ldyBqLHM9W107Zm9yKGxldCBjPTA7Yzw4O2MrKylzW2NdPVtjLDBdO2Z1bmN0aW9uIGwoYyx1LGgsZil7bGV0IHA9Yy5tb3JwaFRhcmdldEluZmx1ZW5jZXM7aWYodC5pc1dlYkdMMj09PSEwKXtsZXQgZD11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGgsZz1vLmdldCh1KTtpZihnPT09dm9pZCAwfHxnLmNvdW50IT09ZCl7bGV0IEw9ZnVuY3Rpb24oKXtCLmRpc3Bvc2UoKSxvLmRlbGV0ZSh1KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEwpfTtnIT09dm9pZCAwJiZnLnRleHR1cmUuZGlzcG9zZSgpO2xldCB4PXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCE9PXZvaWQgMCxiPXUubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFM9dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsfHxbXSxDPXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCxQPXg9PT0hMD8yOjEsaz1DKlAsTz0xO2s+dC5tYXhUZXh0dXJlU2l6ZSYmKE89TWF0aC5jZWlsKGsvdC5tYXhUZXh0dXJlU2l6ZSksaz10Lm1heFRleHR1cmVTaXplKTtsZXQgRD1uZXcgRmxvYXQzMkFycmF5KGsqTyo0KmQpLEI9bmV3IHRNKEQsayxPLGQpO0IuZm9ybWF0PVFvLEIudHlwZT1qZCxCLm5lZWRzVXBkYXRlPSEwO2xldCBJPVAqNDtmb3IobGV0IFI9MDtSPGQ7UisrKXtsZXQgRj1iW1JdLHo9U1tSXSxVPWsqTyo0KlI7Zm9yKGxldCBXPTA7VzxGLmNvdW50O1crKyl7YS5mcm9tQnVmZmVyQXR0cmlidXRlKEYsVyksRi5ub3JtYWxpemVkPT09ITAmJkl1ZShhLEYpO2xldCBaPVcqSTtEW1UrWiswXT1hLngsRFtVK1orMV09YS55LERbVStaKzJdPWEueixEW1UrWiszXT0wLHg9PT0hMCYmKGEuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh6LFcpLHoubm9ybWFsaXplZD09PSEwJiZJdWUoYSx6KSxEW1UrWis0XT1hLngsRFtVK1orNV09YS55LERbVStaKzZdPWEueixEW1UrWis3XT0wKX19Zz17Y291bnQ6ZCx0ZXh0dXJlOkIsc2l6ZTpuZXcgTHQoayxPKX0sby5zZXQodSxnKSx1LmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEwpfWxldCBfPTA7Zm9yKGxldCB4PTA7eDxwLmxlbmd0aDt4KyspXys9cFt4XTtsZXQgeT11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS1fO2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLHkpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLHApLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldHNUZXh0dXJlIixnLnRleHR1cmUsciksZi5nZXRVbmlmb3JtcygpLnNldFZhbHVlKGUsIm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplIixnLnNpemUpfWVsc2V7bGV0IGQ9cD09PXZvaWQgMD8wOnAubGVuZ3RoLGc9blt1LmlkXTtpZihnPT09dm9pZCAwfHxnLmxlbmd0aCE9PWQpe2c9W107Zm9yKGxldCBTPTA7UzxkO1MrKylnW1NdPVtTLDBdO25bdS5pZF09Z31mb3IobGV0IFM9MDtTPGQ7UysrKXtsZXQgQz1nW1NdO0NbMF09UyxDWzFdPXBbU119Zy5zb3J0KG5tcik7Zm9yKGxldCBTPTA7Uzw4O1MrKylTPGQmJmdbU11bMV0/KHNbU11bMF09Z1tTXVswXSxzW1NdWzFdPWdbU11bMV0pOihzW1NdWzBdPU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHNbU11bMV09MCk7cy5zb3J0KHJtcik7bGV0IF89dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24seT11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwseD0wO2ZvcihsZXQgUz0wO1M8ODtTKyspe2xldCBDPXNbU10sUD1DWzBdLGs9Q1sxXTtQIT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVImJms/KF8mJnUuZ2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUykhPT1fW1BdJiZ1LnNldEF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1MsX1tQXSkseSYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitTKSE9PXlbUF0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyx5W1BdKSxpW1NdPWsseCs9ayk6KF8mJnUuaGFzQXR0cmlidXRlKCJtb3JwaFRhcmdldCIrUyk9PT0hMCYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitTKSx5JiZ1Lmhhc0F0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1MpPT09ITAmJnUuZGVsZXRlQXR0cmlidXRlKCJtb3JwaE5vcm1hbCIrUyksaVtTXT0wKX1sZXQgYj11Lm1vcnBoVGFyZ2V0c1JlbGF0aXZlPzE6MS14O2YuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEJhc2VJbmZsdWVuY2UiLGIpLGYuZ2V0VW5pZm9ybXMoKS5zZXRWYWx1ZShlLCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiLGkpfX1yZXR1cm57dXBkYXRlOmx9fWZ1bmN0aW9uIG9tcihlLHQscixuKXtsZXQgaT1uZXcgV2Vha01hcDtmdW5jdGlvbiBvKGwpe2xldCBjPW4ucmVuZGVyLmZyYW1lLHU9bC5nZW9tZXRyeSxoPXQuZ2V0KGwsdSk7cmV0dXJuIGkuZ2V0KGgpIT09YyYmKHQudXBkYXRlKGgpLGkuc2V0KGgsYykpLGwuaXNJbnN0YW5jZWRNZXNoJiYobC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKT09PSExJiZsLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHIudXBkYXRlKGwuaW5zdGFuY2VNYXRyaXgsMzQ5NjIpLGwuaW5zdGFuY2VDb2xvciE9PW51bGwmJnIudXBkYXRlKGwuaW5zdGFuY2VDb2xvciwzNDk2MikpLGh9ZnVuY3Rpb24gYSgpe2k9bmV3IFdlYWtNYXB9ZnVuY3Rpb24gcyhsKXtsZXQgYz1sLnRhcmdldDtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHMpLHIucmVtb3ZlKGMuaW5zdGFuY2VNYXRyaXgpLGMuaW5zdGFuY2VDb2xvciE9PW51bGwmJnIucmVtb3ZlKGMuaW5zdGFuY2VDb2xvcil9cmV0dXJue3VwZGF0ZTpvLGRpc3Bvc2U6YX19dmFyIGU2PWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodD1udWxsLHI9MSxuPTEsaT0xKXtzdXBlcihudWxsKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6cixoZWlnaHQ6bixkZXB0aDppfSx0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLndyYXBSPUpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19O2U2LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlM0Q9ITA7dmFyIEhmZT1uZXcgeGksVmZlPW5ldyB0TSxVZmU9bmV3IGU2LHFmZT1uZXcgSDAsTHVlPVtdLGt1ZT1bXSxSdWU9bmV3IEZsb2F0MzJBcnJheSgxNiksTnVlPW5ldyBGbG9hdDMyQXJyYXkoOSksRHVlPW5ldyBGbG9hdDMyQXJyYXkoNCk7ZnVuY3Rpb24gYk0oZSx0LHIpe2xldCBuPWVbMF07aWYobjw9MHx8bj4wKXJldHVybiBlO2xldCBpPXQqcixvPUx1ZVtpXTtpZihvPT09dm9pZCAwJiYobz1uZXcgRmxvYXQzMkFycmF5KGkpLEx1ZVtpXT1vKSx0IT09MCl7bi50b0FycmF5KG8sMCk7Zm9yKGxldCBhPTEscz0wO2EhPT10OysrYSlzKz1yLGVbYV0udG9BcnJheShvLHMpfXJldHVybiBvfWZ1bmN0aW9uIGhzKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspaWYoZVtyXSE9PXRbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gQ2EoZSx0KXtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZVtyXT10W3JdfWZ1bmN0aW9uICRVKGUsdCl7bGV0IHI9a3VlW3RdO3I9PT12b2lkIDAmJihyPW5ldyBJbnQzMkFycmF5KHQpLGt1ZVt0XT1yKTtmb3IobGV0IG49MDtuIT09dDsrK24pcltuXT1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtyZXR1cm4gcn1mdW5jdGlvbiBhbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO3JbMF0hPT10JiYoZS51bmlmb3JtMWYodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24gc21yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10LnkpJiYoZS51bmlmb3JtMmYodGhpcy5hZGRyLHQueCx0LnkpLHJbMF09dC54LHJbMV09dC55KTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTJmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gbG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtpZih0LnghPT12b2lkIDApKHJbMF0hPT10Lnh8fHJbMV0hPT10Lnl8fHJbMl0hPT10LnopJiYoZS51bmlmb3JtM2YodGhpcy5hZGRyLHQueCx0LnksdC56KSxyWzBdPXQueCxyWzFdPXQueSxyWzJdPXQueik7ZWxzZSBpZih0LnIhPT12b2lkIDApKHJbMF0hPT10LnJ8fHJbMV0hPT10Lmd8fHJbMl0hPT10LmIpJiYoZS51bmlmb3JtM2YodGhpcy5hZGRyLHQucix0LmcsdC5iKSxyWzBdPXQucixyWzFdPXQuZyxyWzJdPXQuYik7ZWxzZXtpZihocyhyLHQpKXJldHVybjtlLnVuaWZvcm0zZnYodGhpcy5hZGRyLHQpLENhKHIsdCl9fWZ1bmN0aW9uIGNtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aWYodC54IT09dm9pZCAwKShyWzBdIT09dC54fHxyWzFdIT09dC55fHxyWzJdIT09dC56fHxyWzNdIT09dC53KSYmKGUudW5pZm9ybTRmKHRoaXMuYWRkcix0LngsdC55LHQueix0LncpLHJbMF09dC54LHJbMV09dC55LHJbMl09dC56LHJbM109dC53KTtlbHNle2lmKGhzKHIsdCkpcmV0dXJuO2UudW5pZm9ybTRmdih0aGlzLmFkZHIsdCksQ2Eocix0KX19ZnVuY3Rpb24gdW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4MmZ2KHRoaXMuYWRkciwhMSx0KSxDYShyLHQpfWVsc2V7aWYoaHMocixuKSlyZXR1cm47RHVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLER1ZSksQ2EocixuKX19ZnVuY3Rpb24gaG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSx0KSxDYShyLHQpfWVsc2V7aWYoaHMocixuKSlyZXR1cm47TnVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLE51ZSksQ2EocixuKX19ZnVuY3Rpb24gZm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZSxuPXQuZWxlbWVudHM7aWYobj09PXZvaWQgMCl7aWYoaHMocix0KSlyZXR1cm47ZS51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSx0KSxDYShyLHQpfWVsc2V7aWYoaHMocixuKSlyZXR1cm47UnVlLnNldChuKSxlLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLFJ1ZSksQ2EocixuKX19ZnVuY3Rpb24gcG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtyWzBdIT09dCYmKGUudW5pZm9ybTFpKHRoaXMuYWRkcix0KSxyWzBdPXQpfWZ1bmN0aW9uIGRtcihlLHQpe2xldCByPXRoaXMuY2FjaGU7aHMocix0KXx8KGUudW5pZm9ybTJpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gbW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtM2l2KHRoaXMuYWRkcix0KSxDYShyLHQpKX1mdW5jdGlvbiBnbXIoZSx0KXtsZXQgcj10aGlzLmNhY2hlO2hzKHIsdCl8fChlLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpLENhKHIsdCkpfWZ1bmN0aW9uIF9tcihlLHQpe2xldCByPXRoaXMuY2FjaGU7clswXSE9PXQmJihlLnVuaWZvcm0xdWkodGhpcy5hZGRyLHQpLHJbMF09dCl9ZnVuY3Rpb24geW1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtMnVpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gdm1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtM3Vpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24geG1yKGUsdCl7bGV0IHI9dGhpcy5jYWNoZTtocyhyLHQpfHwoZS51bmlmb3JtNHVpdih0aGlzLmFkZHIsdCksQ2Eocix0KSl9ZnVuY3Rpb24gYm1yKGUsdCxyKXtsZXQgbj10aGlzLmNhY2hlLGk9ci5hbGxvY2F0ZVRleHR1cmVVbml0KCk7blswXSE9PWkmJihlLnVuaWZvcm0xaSh0aGlzLmFkZHIsaSksblswXT1pKSxyLnNhZmVTZXRUZXh0dXJlMkQodHx8SGZlLGkpfWZ1bmN0aW9uIHdtcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zZXRUZXh0dXJlM0QodHx8VWZlLGkpfWZ1bmN0aW9uIFNtcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zYWZlU2V0VGV4dHVyZUN1YmUodHx8cWZlLGkpfWZ1bmN0aW9uIE1tcihlLHQscil7bGV0IG49dGhpcy5jYWNoZSxpPXIuYWxsb2NhdGVUZXh0dXJlVW5pdCgpO25bMF0hPT1pJiYoZS51bmlmb3JtMWkodGhpcy5hZGRyLGkpLG5bMF09aSksci5zZXRUZXh0dXJlMkRBcnJheSh0fHxWZmUsaSl9ZnVuY3Rpb24gRW1yKGUpe3N3aXRjaChlKXtjYXNlIDUxMjY6cmV0dXJuIGFtcjtjYXNlIDM1NjY0OnJldHVybiBzbXI7Y2FzZSAzNTY2NTpyZXR1cm4gbG1yO2Nhc2UgMzU2NjY6cmV0dXJuIGNtcjtjYXNlIDM1Njc0OnJldHVybiB1bXI7Y2FzZSAzNTY3NTpyZXR1cm4gaG1yO2Nhc2UgMzU2NzY6cmV0dXJuIGZtcjtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gcG1yO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gZG1yO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gbW1yO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gZ21yO2Nhc2UgNTEyNTpyZXR1cm4gX21yO2Nhc2UgMzYyOTQ6cmV0dXJuIHltcjtjYXNlIDM2Mjk1OnJldHVybiB2bXI7Y2FzZSAzNjI5NjpyZXR1cm4geG1yO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gYm1yO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiB3bXI7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gU21yO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIE1tcn19ZnVuY3Rpb24gVG1yKGUsdCl7ZS51bmlmb3JtMWZ2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBDbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSwyKTtlLnVuaWZvcm0yZnYodGhpcy5hZGRyLHIpfWZ1bmN0aW9uIEFtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDMpO2UudW5pZm9ybTNmdih0aGlzLmFkZHIscil9ZnVuY3Rpb24gUG1yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsNCk7ZS51bmlmb3JtNGZ2KHRoaXMuYWRkcixyKX1mdW5jdGlvbiBJbXIoZSx0KXtsZXQgcj1iTSh0LHRoaXMuc2l6ZSw0KTtlLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHIpfWZ1bmN0aW9uIExtcihlLHQpe2xldCByPWJNKHQsdGhpcy5zaXplLDkpO2UudW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24ga21yKGUsdCl7bGV0IHI9Yk0odCx0aGlzLnNpemUsMTYpO2UudW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEscil9ZnVuY3Rpb24gUm1yKGUsdCl7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBObXIoZSx0KXtlLnVuaWZvcm0yaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIERtcihlLHQpe2UudW5pZm9ybTNpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gT21yKGUsdCl7ZS51bmlmb3JtNGl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiB6bXIoZSx0KXtlLnVuaWZvcm0xdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBGbXIoZSx0KXtlLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBCbXIoZSx0KXtlLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBIbXIoZSx0KXtlLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBWbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9JFUocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNhZmVTZXRUZXh0dXJlMkQodFtvXXx8SGZlLGlbb10pfWZ1bmN0aW9uIFVtcihlLHQscil7bGV0IG49dC5sZW5ndGgsaT0kVShyLG4pO2UudW5pZm9ybTFpdih0aGlzLmFkZHIsaSk7Zm9yKGxldCBvPTA7byE9PW47KytvKXIuc2V0VGV4dHVyZTNEKHRbb118fFVmZSxpW29dKX1mdW5jdGlvbiBxbXIoZSx0LHIpe2xldCBuPXQubGVuZ3RoLGk9JFUocixuKTtlLnVuaWZvcm0xaXYodGhpcy5hZGRyLGkpO2ZvcihsZXQgbz0wO28hPT1uOysrbylyLnNhZmVTZXRUZXh0dXJlQ3ViZSh0W29dfHxxZmUsaVtvXSl9ZnVuY3Rpb24gR21yKGUsdCxyKXtsZXQgbj10Lmxlbmd0aCxpPSRVKHIsbik7ZS51bmlmb3JtMWl2KHRoaXMuYWRkcixpKTtmb3IobGV0IG89MDtvIT09bjsrK28pci5zZXRUZXh0dXJlMkRBcnJheSh0W29dfHxWZmUsaVtvXSl9ZnVuY3Rpb24gV21yKGUpe3N3aXRjaChlKXtjYXNlIDUxMjY6cmV0dXJuIFRtcjtjYXNlIDM1NjY0OnJldHVybiBDbXI7Y2FzZSAzNTY2NTpyZXR1cm4gQW1yO2Nhc2UgMzU2NjY6cmV0dXJuIFBtcjtjYXNlIDM1Njc0OnJldHVybiBJbXI7Y2FzZSAzNTY3NTpyZXR1cm4gTG1yO2Nhc2UgMzU2NzY6cmV0dXJuIGttcjtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpyZXR1cm4gUm1yO2Nhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gTm1yO2Nhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gRG1yO2Nhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gT21yO2Nhc2UgNTEyNTpyZXR1cm4gem1yO2Nhc2UgMzYyOTQ6cmV0dXJuIEZtcjtjYXNlIDM2Mjk1OnJldHVybiBCbXI7Y2FzZSAzNjI5NjpyZXR1cm4gSG1yO2Nhc2UgMzU2Nzg6Y2FzZSAzNjE5ODpjYXNlIDM2Mjk4OmNhc2UgMzYzMDY6Y2FzZSAzNTY4MjpyZXR1cm4gVm1yO2Nhc2UgMzU2Nzk6Y2FzZSAzNjI5OTpjYXNlIDM2MzA3OnJldHVybiBVbXI7Y2FzZSAzNTY4MDpjYXNlIDM2MzAwOmNhc2UgMzYzMDg6Y2FzZSAzNjI5MzpyZXR1cm4gcW1yO2Nhc2UgMzYyODk6Y2FzZSAzNjMwMzpjYXNlIDM2MzExOmNhc2UgMzYyOTI6cmV0dXJuIEdtcn19ZnVuY3Rpb24gWW1yKGUsdCxyKXt0aGlzLmlkPWUsdGhpcy5hZGRyPXIsdGhpcy5jYWNoZT1bXSx0aGlzLnNldFZhbHVlPUVtcih0LnR5cGUpfWZ1bmN0aW9uIEdmZShlLHQscil7dGhpcy5pZD1lLHRoaXMuYWRkcj1yLHRoaXMuY2FjaGU9W10sdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNldFZhbHVlPVdtcih0LnR5cGUpfUdmZS5wcm90b3R5cGUudXBkYXRlQ2FjaGU9ZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy5jYWNoZTtlIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5JiZ0Lmxlbmd0aCE9PWUubGVuZ3RoJiYodGhpcy5jYWNoZT1uZXcgRmxvYXQzMkFycmF5KGUubGVuZ3RoKSksQ2EodCxlKX07ZnVuY3Rpb24gV2ZlKGUpe3RoaXMuaWQ9ZSx0aGlzLnNlcT1bXSx0aGlzLm1hcD17fX1XZmUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbj10aGlzLnNlcTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSl7bGV0IGE9bltpXTthLnNldFZhbHVlKGUsdFthLmlkXSxyKX19O3ZhciBkdXQ9LyhcdyspKFxdKT8oXFt8XC4pPy9nO2Z1bmN0aW9uIE91ZShlLHQpe2Uuc2VxLnB1c2godCksZS5tYXBbdC5pZF09dH1mdW5jdGlvbiBqbXIoZSx0LHIpe2xldCBuPWUubmFtZSxpPW4ubGVuZ3RoO2ZvcihkdXQubGFzdEluZGV4PTA7Oyl7bGV0IG89ZHV0LmV4ZWMobiksYT1kdXQubGFzdEluZGV4LHM9b1sxXSxsPW9bMl09PT0iXSIsYz1vWzNdO2lmKGwmJihzPXN8MCksYz09PXZvaWQgMHx8Yz09PSJbIiYmYSsyPT09aSl7T3VlKHIsYz09PXZvaWQgMD9uZXcgWW1yKHMsZSx0KTpuZXcgR2ZlKHMsZSx0KSk7YnJlYWt9ZWxzZXtsZXQgaD1yLm1hcFtzXTtoPT09dm9pZCAwJiYoaD1uZXcgV2ZlKHMpLE91ZShyLGgpKSxyPWh9fX1mdW5jdGlvbiBCMChlLHQpe3RoaXMuc2VxPVtdLHRoaXMubWFwPXt9O2xldCByPWUuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0LDM1NzE4KTtmb3IobGV0IG49MDtuPHI7KytuKXtsZXQgaT1lLmdldEFjdGl2ZVVuaWZvcm0odCxuKSxvPWUuZ2V0VW5pZm9ybUxvY2F0aW9uKHQsaS5uYW1lKTtqbXIoaSxvLHRoaXMpfX1CMC5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24oZSx0LHIsbil7bGV0IGk9dGhpcy5tYXBbdF07aSE9PXZvaWQgMCYmaS5zZXRWYWx1ZShlLHIsbil9O0IwLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihlLHQscil7bGV0IG49dFtyXTtuIT09dm9pZCAwJiZ0aGlzLnNldFZhbHVlKGUscixuKX07QjAudXBsb2FkPWZ1bmN0aW9uKGUsdCxyLG4pe2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aSE9PW87KytpKXtsZXQgYT10W2ldLHM9clthLmlkXTtzLm5lZWRzVXBkYXRlIT09ITEmJmEuc2V0VmFsdWUoZSxzLnZhbHVlLG4pfX07QjAuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKGUsdCl7bGV0IHI9W107Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPWVbbl07by5pZCBpbiB0JiZyLnB1c2gobyl9cmV0dXJuIHJ9O2Z1bmN0aW9uIHp1ZShlLHQscil7bGV0IG49ZS5jcmVhdGVTaGFkZXIodCk7cmV0dXJuIGUuc2hhZGVyU291cmNlKG4sciksZS5jb21waWxlU2hhZGVyKG4pLG59dmFyIFhtcj0wO2Z1bmN0aW9uICRtcihlKXtsZXQgdD1lLnNwbGl0KGAKYCk7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1yKzErIjogIit0W3JdO3JldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiBLbXIoZSl7c3dpdGNoKGUpe2Nhc2UgUWQ6cmV0dXJuWyJMaW5lYXIiLCIoIHZhbHVlICkiXTtjYXNlIFluOnJldHVyblsic1JHQiIsIiggdmFsdWUgKSJdO2RlZmF1bHQ6cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCBlbmNvZGluZzoiLGUpLFsiTGluZWFyIiwiKCB2YWx1ZSApIl19fWZ1bmN0aW9uIEZ1ZShlLHQscil7bGV0IG49ZS5nZXRTaGFkZXJQYXJhbWV0ZXIodCwzNTcxMyksaT1lLmdldFNoYWRlckluZm9Mb2codCkudHJpbSgpO3JldHVybiBuJiZpPT09IiI/IiI6ci50b1VwcGVyQ2FzZSgpK2AKCmAraStgCgpgKyRtcihlLmdldFNoYWRlclNvdXJjZSh0KSl9ZnVuY3Rpb24gWm1yKGUsdCl7bGV0IHI9S21yKHQpO3JldHVybiJ2ZWM0ICIrZSsiKCB2ZWM0IHZhbHVlICkgeyByZXR1cm4gTGluZWFyVG8iK3JbMF0rclsxXSsiOyB9In1mdW5jdGlvbiBKbXIoZSx0KXtsZXQgcjtzd2l0Y2godCl7Y2FzZSBvZmU6cj0iTGluZWFyIjticmVhaztjYXNlIGFmZTpyPSJSZWluaGFyZCI7YnJlYWs7Y2FzZSBzZmU6cj0iT3B0aW1pemVkQ2luZW9uIjticmVhaztjYXNlIGxmZTpyPSJBQ0VTRmlsbWljIjticmVhaztjYXNlIGNmZTpyPSJDdXN0b20iO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW06IFVuc3VwcG9ydGVkIHRvbmVNYXBwaW5nOiIsdCkscj0iTGluZWFyIn1yZXR1cm4idmVjMyAiK2UrIiggdmVjMyBjb2xvciApIHsgcmV0dXJuICIrcisiVG9uZU1hcHBpbmcoIGNvbG9yICk7IH0ifWZ1bmN0aW9uIFFtcihlKXtyZXR1cm5bZS5leHRlbnNpb25EZXJpdmF0aXZlc3x8ZS5lbnZNYXBDdWJlVVZ8fGUuYnVtcE1hcHx8ZS50YW5nZW50U3BhY2VOb3JtYWxNYXB8fGUuY2xlYXJjb2F0Tm9ybWFsTWFwfHxlLmZsYXRTaGFkaW5nfHxlLnNoYWRlcklEPT09InBoeXNpY2FsIj8iI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGUiOiIiLChlLmV4dGVuc2lvbkZyYWdEZXB0aHx8ZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyKSYmZS5yZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aD8iI2V4dGVuc2lvbiBHTF9FWFRfZnJhZ19kZXB0aCA6IGVuYWJsZSI6IiIsZS5leHRlbnNpb25EcmF3QnVmZmVycyYmZS5yZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzPyIjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMgOiByZXF1aXJlIjoiIiwoZS5leHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EfHxlLmVudk1hcHx8ZS50cmFuc21pc3Npb24pJiZlLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIDogZW5hYmxlIjoiIl0uZmlsdGVyKEJQKS5qb2luKGAKYCl9ZnVuY3Rpb24gdGdyKGUpe2xldCB0PVtdO2ZvcihsZXQgciBpbiBlKXtsZXQgbj1lW3JdO24hPT0hMSYmdC5wdXNoKCIjZGVmaW5lICIrcisiICIrbil9cmV0dXJuIHQuam9pbihgCmApfWZ1bmN0aW9uIGVncihlLHQpe2xldCByPXt9LG49ZS5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgaT0wO2k8bjtpKyspe2xldCBvPWUuZ2V0QWN0aXZlQXR0cmliKHQsaSksYT1vLm5hbWUscz0xO28udHlwZT09PTM1Njc0JiYocz0yKSxvLnR5cGU9PT0zNTY3NSYmKHM9Myksby50eXBlPT09MzU2NzYmJihzPTQpLHJbYV09e3R5cGU6by50eXBlLGxvY2F0aW9uOmUuZ2V0QXR0cmliTG9jYXRpb24odCxhKSxsb2NhdGlvblNpemU6c319cmV0dXJuIHJ9ZnVuY3Rpb24gQlAoZSl7cmV0dXJuIGUhPT0iIn1mdW5jdGlvbiBCdWUoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKC9OVU1fRElSX0xJR0hUUy9nLHQubnVtRGlyTGlnaHRzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVFMvZyx0Lm51bVNwb3RMaWdodHMpLnJlcGxhY2UoL05VTV9SRUNUX0FSRUFfTElHSFRTL2csdC5udW1SZWN0QXJlYUxpZ2h0cykucmVwbGFjZSgvTlVNX1BPSU5UX0xJR0hUUy9nLHQubnVtUG9pbnRMaWdodHMpLnJlcGxhY2UoL05VTV9IRU1JX0xJR0hUUy9nLHQubnVtSGVtaUxpZ2h0cykucmVwbGFjZSgvTlVNX0RJUl9MSUdIVF9TSEFET1dTL2csdC5udW1EaXJMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9TUE9UX0xJR0hUX1NIQURPV1MvZyx0Lm51bVNwb3RMaWdodFNoYWRvd3MpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVF9TSEFET1dTL2csdC5udW1Qb2ludExpZ2h0U2hhZG93cyl9ZnVuY3Rpb24gSHVlKGUsdCl7cmV0dXJuIGUucmVwbGFjZSgvTlVNX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMpLnJlcGxhY2UoL1VOSU9OX0NMSVBQSU5HX1BMQU5FUy9nLHQubnVtQ2xpcHBpbmdQbGFuZXMtdC5udW1DbGlwSW50ZXJzZWN0aW9uKX12YXIgcmdyPS9eWyBcdF0qI2luY2x1ZGUgKzwoW1x3XGQuL10rKT4vZ207ZnVuY3Rpb24gUXV0KGUpe3JldHVybiBlLnJlcGxhY2UocmdyLG5ncil9ZnVuY3Rpb24gbmdyKGUsdCl7bGV0IHI9aHJbdF07aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8Iit0KyI+Iik7cmV0dXJuIFF1dChyKX12YXIgaWdyPS8jcHJhZ21hIHVucm9sbF9sb29wW1xzXSs/Zm9yIFwoIGludCBpIFw9IChcZCspXDsgaSA8IChcZCspXDsgaSBcK1wrIFwpIFx7KFtcc1xTXSs/KSg/PVx9KVx9L2csb2dyPS8jcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XHMrZm9yXHMqXChccyppbnRccytpXHMqPVxzKihcZCspXHMqO1xzKmlccyo8XHMqKFxkKylccyo7XHMqaVxzKlwrXCtccypcKVxzKnsoW1xzXFNdKz8pfVxzKyNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kL2c7ZnVuY3Rpb24gVnVlKGUpe3JldHVybiBlLnJlcGxhY2Uob2dyLFlmZSkucmVwbGFjZShpZ3IsYWdyKX1mdW5jdGlvbiBhZ3IoZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiV2ViR0xQcm9ncmFtOiAjcHJhZ21hIHVucm9sbF9sb29wIHNoYWRlciBzeW50YXggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSAjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0IHN5bnRheCBpbnN0ZWFkLiIpLFlmZShlLHQscixuKX1mdW5jdGlvbiBZZmUoZSx0LHIsbil7bGV0IGk9IiI7Zm9yKGxldCBvPXBhcnNlSW50KHQpO288cGFyc2VJbnQocik7bysrKWkrPW4ucmVwbGFjZSgvXFtccyppXHMqXF0vZywiWyAiK28rIiBdIikucmVwbGFjZSgvVU5ST0xMRURfTE9PUF9JTkRFWC9nLG8pO3JldHVybiBpfWZ1bmN0aW9uIFV1ZShlKXtsZXQgdD0icHJlY2lzaW9uICIrZS5wcmVjaXNpb24rYCBmbG9hdDsKcHJlY2lzaW9uIGArZS5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4gZS5wcmVjaXNpb249PT0iaGlnaHAiP3QrPWAKI2RlZmluZSBISUdIX1BSRUNJU0lPTmA6ZS5wcmVjaXNpb249PT0ibWVkaXVtcCI/dCs9YAojZGVmaW5lIE1FRElVTV9QUkVDSVNJT05gOmUucHJlY2lzaW9uPT09Imxvd3AiJiYodCs9YAojZGVmaW5lIExPV19QUkVDSVNJT05gKSx0fWZ1bmN0aW9uIHNncihlKXtsZXQgdD0iU0hBRE9XTUFQX1RZUEVfQkFTSUMiO3JldHVybiBlLnNoYWRvd01hcFR5cGU9PT1BaHQ/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjplLnNoYWRvd01hcFR5cGU9PT16aGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGX1NPRlQiOmUuc2hhZG93TWFwVHlwZT09PUYzJiYodD0iU0hBRE9XTUFQX1RZUEVfVlNNIiksdH1mdW5jdGlvbiBsZ3IoZSl7bGV0IHQ9IkVOVk1BUF9UWVBFX0NVQkUiO2lmKGUuZW52TWFwKXN3aXRjaChlLmVudk1hcE1vZGUpe2Nhc2Ugbng6Y2FzZSBpeDp0PSJFTlZNQVBfVFlQRV9DVUJFIjticmVhaztjYXNlIHhNOmNhc2UgTzY6dD0iRU5WTUFQX1RZUEVfQ1VCRV9VViI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gY2dyKGUpe2xldCB0PSJFTlZNQVBfTU9ERV9SRUZMRUNUSU9OIjtpZihlLmVudk1hcClzd2l0Y2goZS5lbnZNYXBNb2RlKXtjYXNlIGl4OmNhc2UgTzY6dD0iRU5WTUFQX01PREVfUkVGUkFDVElPTiI7YnJlYWt9cmV0dXJuIHR9ZnVuY3Rpb24gdWdyKGUpe2xldCB0PSJFTlZNQVBfQkxFTkRJTkdfTk9ORSI7aWYoZS5lbnZNYXApc3dpdGNoKGUuY29tYmluZSl7Y2FzZSBENjp0PSJFTlZNQVBfQkxFTkRJTkdfTVVMVElQTFkiO2JyZWFrO2Nhc2UgbmZlOnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgaWZlOnQ9IkVOVk1BUF9CTEVORElOR19BREQiO2JyZWFrfXJldHVybiB0fWZ1bmN0aW9uIGhncihlLHQscixuKXtsZXQgaT1lLmdldENvbnRleHQoKSxvPXIuZGVmaW5lcyxhPXIudmVydGV4U2hhZGVyLHM9ci5mcmFnbWVudFNoYWRlcixsPXNncihyKSxjPWxncihyKSx1PWNncihyKSxoPXVncihyKSxmPXIuaXNXZWJHTDI/IiI6UW1yKHIpLHA9dGdyKG8pLGQ9aS5jcmVhdGVQcm9ncmFtKCksZyxfLHk9ci5nbHNsVmVyc2lvbj8iI3ZlcnNpb24gIityLmdsc2xWZXJzaW9uK2AKYDoiIjtyLmlzUmF3U2hhZGVyTWF0ZXJpYWw/KGc9W3BdLmZpbHRlcihCUCkuam9pbihgCmApLGcubGVuZ3RoPjAmJihnKz1gCmApLF89W2YscF0uZmlsdGVyKEJQKS5qb2luKGAKYCksXy5sZW5ndGg+MCYmKF8rPWAKYCkpOihnPVtVdWUociksIiNkZWZpbmUgU0hBREVSX05BTUUgIityLnNoYWRlck5hbWUscCxyLmluc3RhbmNpbmc/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkciOiIiLHIuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9JTlNUQU5DSU5HX0NPTE9SIjoiIixyLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVkVSVEVYX1RFWFRVUkVTIjoiIiwiI2RlZmluZSBNQVhfQk9ORVMgIityLm1heEJvbmVzLHIudXNlRm9nJiZyLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixyLnVzZUZvZyYmci5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixyLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixyLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixyLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsci5saWdodE1hcD8iI2RlZmluZSBVU0VfTElHSFRNQVAiOiIiLHIuYW9NYXA/IiNkZWZpbmUgVVNFX0FPTUFQIjoiIixyLmVtaXNzaXZlTWFwPyIjZGVmaW5lIFVTRV9FTUlTU0lWRU1BUCI6IiIsci5idW1wTWFwPyIjZGVmaW5lIFVTRV9CVU1QTUFQIjoiIixyLm5vcm1hbE1hcD8iI2RlZmluZSBVU0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci5vYmplY3RTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBPQkpFQ1RTUEFDRV9OT1JNQUxNQVAiOiIiLHIubm9ybWFsTWFwJiZyLnRhbmdlbnRTcGFjZU5vcm1hbE1hcD8iI2RlZmluZSBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIjoiIixyLmNsZWFyY29hdE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUTUFQIjoiIixyLmNsZWFyY29hdFJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX1JPVUdITkVTU01BUCI6IiIsci5jbGVhcmNvYXROb3JtYWxNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAiOiIiLHIuZGlzcGxhY2VtZW50TWFwJiZyLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM/IiNkZWZpbmUgVVNFX0RJU1BMQUNFTUVOVE1BUCI6IiIsci5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLHIuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixyLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLHIucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLHIubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLHIuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixyLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixyLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixyLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixyLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLHIuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixyLnZlcnRleFRhbmdlbnRzPyIjZGVmaW5lIFVTRV9UQU5HRU5UIjoiIixyLnZlcnRleENvbG9ycz8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLHIudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsci52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixyLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixyLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixyLnNraW5uaW5nPyIjZGVmaW5lIFVTRV9TS0lOTklORyI6IiIsci51c2VWZXJ0ZXhUZXh0dXJlPyIjZGVmaW5lIEJPTkVfVEVYVFVSRSI6IiIsci5tb3JwaFRhcmdldHM/IiNkZWZpbmUgVVNFX01PUlBIVEFSR0VUUyI6IiIsci5tb3JwaE5vcm1hbHMmJnIuZmxhdFNoYWRpbmc9PT0hMT8iI2RlZmluZSBVU0VfTU9SUEhOT1JNQUxTIjoiIixyLm1vcnBoVGFyZ2V0cyYmci5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfVEVYVFVSRSI6IiIsci5tb3JwaFRhcmdldHMmJnIuaXNXZWJHTDI/IiNkZWZpbmUgTU9SUEhUQVJHRVRTX0NPVU5UICIrci5tb3JwaFRhcmdldHNDb3VudDoiIixyLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsci5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLHIuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsci5zaXplQXR0ZW51YXRpb24/IiNkZWZpbmUgVVNFX1NJWkVBVFRFTlVBVElPTiI6IiIsci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZyLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7IiwidW5pZm9ybSBtYXQ0IG1vZGVsVmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIG1hdDMgbm9ybWFsTWF0cml4OyIsInVuaWZvcm0gdmVjMyBjYW1lcmFQb3NpdGlvbjsiLCJ1bmlmb3JtIGJvb2wgaXNPcnRob2dyYXBoaWM7IiwiI2lmZGVmIFVTRV9JTlNUQU5DSU5HIiwiCWF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIglhdHRyaWJ1dGUgdmVjMyBpbnN0YW5jZUNvbG9yOyIsIiNlbmRpZiIsImF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uOyIsImF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDsiLCJhdHRyaWJ1dGUgdmVjMiB1djsiLCIjaWZkZWYgVVNFX1RBTkdFTlQiLCIJYXR0cmlidXRlIHZlYzQgdGFuZ2VudDsiLCIjZW5kaWYiLCIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBICkiLCIJYXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCIJYXR0cmlidXRlIHZlYzMgY29sb3I7IiwiI2VuZGlmIiwiI2lmICggZGVmaW5lZCggVVNFX01PUlBIVEFSR0VUUyApICYmICEgZGVmaW5lZCggTU9SUEhUQVJHRVRTX1RFWFRVUkUgKSApIiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MDsiLCIJYXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIglhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDI7IiwiCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0MzsiLCIJI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMzsiLCIJI2Vsc2UiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NDsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NTsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCIJCWF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NzsiLCIJI2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIglhdHRyaWJ1dGUgdmVjNCBza2luSW5kZXg7IiwiCWF0dHJpYnV0ZSB2ZWM0IHNraW5XZWlnaHQ7IiwiI2VuZGlmIixgCmBdLmZpbHRlcihCUCkuam9pbihgCmApLF89W2YsVXVlKHIpLCIjZGVmaW5lIFNIQURFUl9OQU1FICIrci5zaGFkZXJOYW1lLHAsci51c2VGb2cmJnIuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLHIudXNlRm9nJiZyLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLHIubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLHIubWF0Y2FwPyIjZGVmaW5lIFVTRV9NQVRDQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLHIuZW52TWFwPyIjZGVmaW5lICIrYzoiIixyLmVudk1hcD8iI2RlZmluZSAiK3U6IiIsci5lbnZNYXA/IiNkZWZpbmUgIitoOiIiLHIubGlnaHRNYXA/IiNkZWZpbmUgVVNFX0xJR0hUTUFQIjoiIixyLmFvTWFwPyIjZGVmaW5lIFVTRV9BT01BUCI6IiIsci5lbWlzc2l2ZU1hcD8iI2RlZmluZSBVU0VfRU1JU1NJVkVNQVAiOiIiLHIuYnVtcE1hcD8iI2RlZmluZSBVU0VfQlVNUE1BUCI6IiIsci5ub3JtYWxNYXA/IiNkZWZpbmUgVVNFX05PUk1BTE1BUCI6IiIsci5ub3JtYWxNYXAmJnIub2JqZWN0U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgT0JKRUNUU1BBQ0VfTk9STUFMTUFQIjoiIixyLm5vcm1hbE1hcCYmci50YW5nZW50U3BhY2VOb3JtYWxNYXA/IiNkZWZpbmUgVEFOR0VOVFNQQUNFX05PUk1BTE1BUCI6IiIsci5jbGVhcmNvYXQ/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVCI6IiIsci5jbGVhcmNvYXRNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVE1BUCI6IiIsci5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVAiOiIiLHIuY2xlYXJjb2F0Tm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQIjoiIixyLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsci5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLHIuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsci5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsci5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsci5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLHIuYWxwaGFUZXN0PyIjZGVmaW5lIFVTRV9BTFBIQVRFU1QiOiIiLHIuc2hlZW4/IiNkZWZpbmUgVVNFX1NIRUVOIjoiIixyLnNoZWVuQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NIRUVOQ09MT1JNQVAiOiIiLHIuc2hlZW5Sb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1NIRUVOUk9VR0hORVNTTUFQIjoiIixyLnRyYW5zbWlzc2lvbj8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OIjoiIixyLnRyYW5zbWlzc2lvbk1hcD8iI2RlZmluZSBVU0VfVFJBTlNNSVNTSU9OTUFQIjoiIixyLnRoaWNrbmVzc01hcD8iI2RlZmluZSBVU0VfVEhJQ0tORVNTTUFQIjoiIixyLmRlY29kZVZpZGVvVGV4dHVyZT8iI2RlZmluZSBERUNPREVfVklERU9fVEVYVFVSRSI6IiIsci52ZXJ0ZXhUYW5nZW50cz8iI2RlZmluZSBVU0VfVEFOR0VOVCI6IiIsci52ZXJ0ZXhDb2xvcnN8fHIuaW5zdGFuY2luZ0NvbG9yPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsci52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixyLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLHIudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLHIuZ3JhZGllbnRNYXA/IiNkZWZpbmUgVVNFX0dSQURJRU5UTUFQIjoiIixyLmZsYXRTaGFkaW5nPyIjZGVmaW5lIEZMQVRfU0hBREVEIjoiIixyLmRvdWJsZVNpZGVkPyIjZGVmaW5lIERPVUJMRV9TSURFRCI6IiIsci5mbGlwU2lkZWQ/IiNkZWZpbmUgRkxJUF9TSURFRCI6IiIsci5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lIFVTRV9TSEFET1dNQVAiOiIiLHIuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSAiK2w6IiIsci5wcmVtdWx0aXBsaWVkQWxwaGE/IiNkZWZpbmUgUFJFTVVMVElQTElFRF9BTFBIQSI6IiIsci5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cz8iI2RlZmluZSBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixyLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJnIucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsKHIuZXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxPRHx8ci5lbnZNYXApJiZyLnJlbmRlcmVyRXh0ZW5zaW9uU2hhZGVyVGV4dHVyZUxvZD8iI2RlZmluZSBURVhUVVJFX0xPRF9FWFQiOiIiLCJ1bmlmb3JtIG1hdDQgdmlld01hdHJpeDsiLCJ1bmlmb3JtIHZlYzMgY2FtZXJhUG9zaXRpb247IiwidW5pZm9ybSBib29sIGlzT3J0aG9ncmFwaGljOyIsci50b25lTWFwcGluZyE9PUtkPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsci50b25lTWFwcGluZyE9PUtkP2hyLnRvbmVtYXBwaW5nX3BhcnNfZnJhZ21lbnQ6IiIsci50b25lTWFwcGluZyE9PUtkP0ptcigidG9uZU1hcHBpbmciLHIudG9uZU1hcHBpbmcpOiIiLHIuZGl0aGVyaW5nPyIjZGVmaW5lIERJVEhFUklORyI6IiIsci5hbHBoYVdyaXRlPyIiOiIjZGVmaW5lIE9QQVFVRSIsaHIuZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQsWm1yKCJsaW5lYXJUb091dHB1dFRleGVsIixyLm91dHB1dEVuY29kaW5nKSxyLmRlcHRoUGFja2luZz8iI2RlZmluZSBERVBUSF9QQUNLSU5HICIrci5kZXB0aFBhY2tpbmc6IiIsYApgXS5maWx0ZXIoQlApLmpvaW4oYApgKSksYT1RdXQoYSksYT1CdWUoYSxyKSxhPUh1ZShhLHIpLHM9UXV0KHMpLHM9QnVlKHMscikscz1IdWUocyxyKSxhPVZ1ZShhKSxzPVZ1ZShzKSxyLmlzV2ViR0wyJiZyLmlzUmF3U2hhZGVyTWF0ZXJpYWwhPT0hMCYmKHk9YCN2ZXJzaW9uIDMwMCBlcwpgLGc9WyJwcmVjaXNpb24gbWVkaXVtcCBzYW1wbGVyMkRBcnJheTsiLCIjZGVmaW5lIGF0dHJpYnV0ZSBpbiIsIiNkZWZpbmUgdmFyeWluZyBvdXQiLCIjZGVmaW5lIHRleHR1cmUyRCB0ZXh0dXJlIl0uam9pbihgCmApK2AKYCtnLF89WyIjZGVmaW5lIHZhcnlpbmcgaW4iLHIuZ2xzbFZlcnNpb249PT1adXQ/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLHIuZ2xzbFZlcnNpb249PT1adXQ/IiI6IiNkZWZpbmUgZ2xfRnJhZ0NvbG9yIHBjX2ZyYWdDb2xvciIsIiNkZWZpbmUgZ2xfRnJhZ0RlcHRoRVhUIGdsX0ZyYWdEZXB0aCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmVDdWJlIHRleHR1cmUiLCIjZGVmaW5lIHRleHR1cmUyRFByb2ogdGV4dHVyZVByb2oiLCIjZGVmaW5lIHRleHR1cmUyRExvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qTG9kRVhUIHRleHR1cmVQcm9qTG9kIiwiI2RlZmluZSB0ZXh0dXJlQ3ViZUxvZEVYVCB0ZXh0dXJlTG9kIiwiI2RlZmluZSB0ZXh0dXJlMkRHcmFkRVhUIHRleHR1cmVHcmFkIiwiI2RlZmluZSB0ZXh0dXJlMkRQcm9qR3JhZEVYVCB0ZXh0dXJlUHJvakdyYWQiLCIjZGVmaW5lIHRleHR1cmVDdWJlR3JhZEVYVCB0ZXh0dXJlR3JhZCJdLmpvaW4oYApgKStgCmArXyk7bGV0IHg9eStnK2EsYj15K18rcyxTPXp1ZShpLDM1NjMzLHgpLEM9enVlKGksMzU2MzIsYik7aWYoaS5hdHRhY2hTaGFkZXIoZCxTKSxpLmF0dGFjaFNoYWRlcihkLEMpLHIuaW5kZXgwQXR0cmlidXRlTmFtZSE9PXZvaWQgMD9pLmJpbmRBdHRyaWJMb2NhdGlvbihkLDAsci5pbmRleDBBdHRyaWJ1dGVOYW1lKTpyLm1vcnBoVGFyZ2V0cz09PSEwJiZpLmJpbmRBdHRyaWJMb2NhdGlvbihkLDAsInBvc2l0aW9uIiksaS5saW5rUHJvZ3JhbShkKSxlLmRlYnVnLmNoZWNrU2hhZGVyRXJyb3JzKXtsZXQgTz1pLmdldFByb2dyYW1JbmZvTG9nKGQpLnRyaW0oKSxEPWkuZ2V0U2hhZGVySW5mb0xvZyhTKS50cmltKCksQj1pLmdldFNoYWRlckluZm9Mb2coQykudHJpbSgpLEk9ITAsTD0hMDtpZihpLmdldFByb2dyYW1QYXJhbWV0ZXIoZCwzNTcxNCk9PT0hMSl7ST0hMTtsZXQgUj1GdWUoaSxTLCJ2ZXJ0ZXgiKSxGPUZ1ZShpLEMsImZyYWdtZW50Iik7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xQcm9ncmFtOiBTaGFkZXIgRXJyb3IgIitpLmdldEVycm9yKCkrIiAtIFZBTElEQVRFX1NUQVRVUyAiK2kuZ2V0UHJvZ3JhbVBhcmFtZXRlcihkLDM1NzE1KStgCgpQcm9ncmFtIEluZm8gTG9nOiBgK08rYApgK1IrYApgK0YpfWVsc2UgTyE9PSIiP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsTyk6KEQ9PT0iInx8Qj09PSIiKSYmKEw9ITEpO0wmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTpJLHByb2dyYW1Mb2c6Tyx2ZXJ0ZXhTaGFkZXI6e2xvZzpELHByZWZpeDpnfSxmcmFnbWVudFNoYWRlcjp7bG9nOkIscHJlZml4Ol99fSl9aS5kZWxldGVTaGFkZXIoUyksaS5kZWxldGVTaGFkZXIoQyk7bGV0IFA7dGhpcy5nZXRVbmlmb3Jtcz1mdW5jdGlvbigpe3JldHVybiBQPT09dm9pZCAwJiYoUD1uZXcgQjAoaSxkKSksUH07bGV0IGs7cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBrPT09dm9pZCAwJiYoaz1lZ3IoaSxkKSksa30sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7bi5yZWxlYXNlU3RhdGVzT2ZQcm9ncmFtKHRoaXMpLGkuZGVsZXRlUHJvZ3JhbShkKSx0aGlzLnByb2dyYW09dm9pZCAwfSx0aGlzLm5hbWU9ci5zaGFkZXJOYW1lLHRoaXMuaWQ9WG1yKyssdGhpcy5jYWNoZUtleT10LHRoaXMudXNlZFRpbWVzPTEsdGhpcy5wcm9ncmFtPWQsdGhpcy52ZXJ0ZXhTaGFkZXI9Uyx0aGlzLmZyYWdtZW50U2hhZGVyPUMsdGhpc312YXIgZmdyPTAsdGh0PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zaGFkZXJDYWNoZT1uZXcgTWFwLHRoaXMubWF0ZXJpYWxDYWNoZT1uZXcgTWFwfXVwZGF0ZSh0KXtsZXQgcj10LnZlcnRleFNoYWRlcixuPXQuZnJhZ21lbnRTaGFkZXIsaT10aGlzLl9nZXRTaGFkZXJTdGFnZShyKSxvPXRoaXMuX2dldFNoYWRlclN0YWdlKG4pLGE9dGhpcy5fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KTtyZXR1cm4gYS5oYXMoaSk9PT0hMSYmKGEuYWRkKGkpLGkudXNlZFRpbWVzKyspLGEuaGFzKG8pPT09ITEmJihhLmFkZChvKSxvLnVzZWRUaW1lcysrKSx0aGlzfXJlbW92ZSh0KXtsZXQgcj10aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KHQpO2ZvcihsZXQgbiBvZiByKW4udXNlZFRpbWVzLS0sbi51c2VkVGltZXM9PT0wJiZ0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShuKTtyZXR1cm4gdGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZSh0KSx0aGlzfWdldFZlcnRleFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlcikuaWR9Z2V0RnJhZ21lbnRTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC5mcmFnbWVudFNoYWRlcikuaWR9ZGlzcG9zZSgpe3RoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKSx0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKX1fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KXtsZXQgcj10aGlzLm1hdGVyaWFsQ2FjaGU7cmV0dXJuIHIuaGFzKHQpPT09ITEmJnIuc2V0KHQsbmV3IFNldCksci5nZXQodCl9X2dldFNoYWRlclN0YWdlKHQpe2xldCByPXRoaXMuc2hhZGVyQ2FjaGU7aWYoci5oYXModCk9PT0hMSl7bGV0IG49bmV3IGVodDtyLnNldCh0LG4pfXJldHVybiByLmdldCh0KX19LGVodD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaWQ9ZmdyKyssdGhpcy51c2VkVGltZXM9MH19O2Z1bmN0aW9uIHBncihlLHQscixuLGksbyxhKXtsZXQgcz1uZXcgWDMsbD1uZXcgdGh0LGM9W10sdT1pLmlzV2ViR0wyLGg9aS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLGY9aS5mbG9hdFZlcnRleFRleHR1cmVzLHA9aS5tYXhWZXJ0ZXhVbmlmb3JtcyxkPWkudmVydGV4VGV4dHVyZXMsZz1pLnByZWNpc2lvbixfPXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07ZnVuY3Rpb24geShJKXtsZXQgUj1JLnNrZWxldG9uLmJvbmVzO2lmKGYpcmV0dXJuIDEwMjQ7e2xldCB6PU1hdGguZmxvb3IoKHAtMjApLzQpLFU9TWF0aC5taW4oeixSLmxlbmd0aCk7cmV0dXJuIFU8Ui5sZW5ndGg/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogU2tlbGV0b24gaGFzICIrUi5sZW5ndGgrIiBib25lcy4gVGhpcyBHUFUgc3VwcG9ydHMgIitVKyIuIiksMCk6VX19ZnVuY3Rpb24geChJLEwsUixGLHope2xldCBVPUYuZm9nLFc9SS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP0YuZW52aXJvbm1lbnQ6bnVsbCxaPShJLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/cjp0KS5nZXQoSS5lbnZNYXB8fFcpLHJ0PV9bSS50eXBlXSxvdD16LmlzU2tpbm5lZE1lc2g/eSh6KTowO0kucHJlY2lzaW9uIT09bnVsbCYmKGc9aS5nZXRNYXhQcmVjaXNpb24oSS5wcmVjaXNpb24pLGchPT1JLnByZWNpc2lvbiYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFByb2dyYW0uZ2V0UGFyYW1ldGVyczoiLEkucHJlY2lzaW9uLCJub3Qgc3VwcG9ydGVkLCB1c2luZyIsZywiaW5zdGVhZC4iKSk7bGV0IHN0LFN0LGJ0LE10O2lmKHJ0KXtsZXQgWD1haFtydF07c3Q9WC52ZXJ0ZXhTaGFkZXIsU3Q9WC5mcmFnbWVudFNoYWRlcn1lbHNlIHN0PUkudmVydGV4U2hhZGVyLFN0PUkuZnJhZ21lbnRTaGFkZXIsbC51cGRhdGUoSSksYnQ9bC5nZXRWZXJ0ZXhTaGFkZXJJRChJKSxNdD1sLmdldEZyYWdtZW50U2hhZGVySUQoSSk7bGV0IGx0PWUuZ2V0UmVuZGVyVGFyZ2V0KCksS3Q9SS5hbHBoYVRlc3Q+MCxfdD1JLmNsZWFyY29hdD4wO3JldHVybntpc1dlYkdMMjp1LHNoYWRlcklEOnJ0LHNoYWRlck5hbWU6SS50eXBlLHZlcnRleFNoYWRlcjpzdCxmcmFnbWVudFNoYWRlcjpTdCxkZWZpbmVzOkkuZGVmaW5lcyxjdXN0b21WZXJ0ZXhTaGFkZXJJRDpidCxjdXN0b21GcmFnbWVudFNoYWRlcklEOk10LGlzUmF3U2hhZGVyTWF0ZXJpYWw6SS5pc1Jhd1NoYWRlck1hdGVyaWFsPT09ITAsZ2xzbFZlcnNpb246SS5nbHNsVmVyc2lvbixwcmVjaXNpb246ZyxpbnN0YW5jaW5nOnouaXNJbnN0YW5jZWRNZXNoPT09ITAsaW5zdGFuY2luZ0NvbG9yOnouaXNJbnN0YW5jZWRNZXNoPT09ITAmJnouaW5zdGFuY2VDb2xvciE9PW51bGwsc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlczpkLG91dHB1dEVuY29kaW5nOmx0PT09bnVsbD9lLm91dHB1dEVuY29kaW5nOmx0LmlzWFJSZW5kZXJUYXJnZXQ9PT0hMD9sdC50ZXh0dXJlLmVuY29kaW5nOlFkLG1hcDohIUkubWFwLG1hdGNhcDohIUkubWF0Y2FwLGVudk1hcDohIVosZW52TWFwTW9kZTpaJiZaLm1hcHBpbmcsZW52TWFwQ3ViZVVWOiEhWiYmKFoubWFwcGluZz09PXhNfHxaLm1hcHBpbmc9PT1PNiksbGlnaHRNYXA6ISFJLmxpZ2h0TWFwLGFvTWFwOiEhSS5hb01hcCxlbWlzc2l2ZU1hcDohIUkuZW1pc3NpdmVNYXAsYnVtcE1hcDohIUkuYnVtcE1hcCxub3JtYWxNYXA6ISFJLm5vcm1hbE1hcCxvYmplY3RTcGFjZU5vcm1hbE1hcDpJLm5vcm1hbE1hcFR5cGU9PT1JZmUsdGFuZ2VudFNwYWNlTm9ybWFsTWFwOkkubm9ybWFsTWFwVHlwZT09PWF4LGRlY29kZVZpZGVvVGV4dHVyZTohIUkubWFwJiZJLm1hcC5pc1ZpZGVvVGV4dHVyZT09PSEwJiZJLm1hcC5lbmNvZGluZz09PVluLGNsZWFyY29hdDpfdCxjbGVhcmNvYXRNYXA6X3QmJiEhSS5jbGVhcmNvYXRNYXAsY2xlYXJjb2F0Um91Z2huZXNzTWFwOl90JiYhIUkuY2xlYXJjb2F0Um91Z2huZXNzTWFwLGNsZWFyY29hdE5vcm1hbE1hcDpfdCYmISFJLmNsZWFyY29hdE5vcm1hbE1hcCxkaXNwbGFjZW1lbnRNYXA6ISFJLmRpc3BsYWNlbWVudE1hcCxyb3VnaG5lc3NNYXA6ISFJLnJvdWdobmVzc01hcCxtZXRhbG5lc3NNYXA6ISFJLm1ldGFsbmVzc01hcCxzcGVjdWxhck1hcDohIUkuc3BlY3VsYXJNYXAsc3BlY3VsYXJJbnRlbnNpdHlNYXA6ISFJLnNwZWN1bGFySW50ZW5zaXR5TWFwLHNwZWN1bGFyQ29sb3JNYXA6ISFJLnNwZWN1bGFyQ29sb3JNYXAsYWxwaGFNYXA6ISFJLmFscGhhTWFwLGFscGhhVGVzdDpLdCxhbHBoYVdyaXRlOkkuYWxwaGFXcml0ZXx8SS50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIUkuZ3JhZGllbnRNYXAsc2hlZW46SS5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISFJLnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISFJLnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjpJLnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIUkudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIUkudGhpY2tuZXNzTWFwLGNvbWJpbmU6SS5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhSS5ub3JtYWxNYXAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMudGFuZ2VudCx2ZXJ0ZXhDb2xvcnM6SS52ZXJ0ZXhDb2xvcnMsdmVydGV4QWxwaGFzOkkudmVydGV4Q29sb3JzPT09ITAmJiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3ImJnouZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsdmVydGV4VXZzOiEhSS5tYXB8fCEhSS5idW1wTWFwfHwhIUkubm9ybWFsTWFwfHwhIUkuc3BlY3VsYXJNYXB8fCEhSS5hbHBoYU1hcHx8ISFJLmVtaXNzaXZlTWFwfHwhIUkucm91Z2huZXNzTWFwfHwhIUkubWV0YWxuZXNzTWFwfHwhIUkuY2xlYXJjb2F0TWFwfHwhIUkuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHwhIUkuY2xlYXJjb2F0Tm9ybWFsTWFwfHwhIUkuZGlzcGxhY2VtZW50TWFwfHwhIUkudHJhbnNtaXNzaW9uTWFwfHwhIUkudGhpY2tuZXNzTWFwfHwhIUkuc3BlY3VsYXJJbnRlbnNpdHlNYXB8fCEhSS5zcGVjdWxhckNvbG9yTWFwfHwhIUkuc2hlZW5Db2xvck1hcHx8ISFJLnNoZWVuUm91Z2huZXNzTWFwLHV2c1ZlcnRleE9ubHk6ISghIUkubWFwfHwhIUkuYnVtcE1hcHx8ISFJLm5vcm1hbE1hcHx8ISFJLnNwZWN1bGFyTWFwfHwhIUkuYWxwaGFNYXB8fCEhSS5lbWlzc2l2ZU1hcHx8ISFJLnJvdWdobmVzc01hcHx8ISFJLm1ldGFsbmVzc01hcHx8ISFJLmNsZWFyY29hdE5vcm1hbE1hcHx8SS50cmFuc21pc3Npb24+MHx8ISFJLnRyYW5zbWlzc2lvbk1hcHx8ISFJLnRoaWNrbmVzc01hcHx8ISFJLnNwZWN1bGFySW50ZW5zaXR5TWFwfHwhIUkuc3BlY3VsYXJDb2xvck1hcHx8SS5zaGVlbj4wfHwhIUkuc2hlZW5Db2xvck1hcHx8ISFJLnNoZWVuUm91Z2huZXNzTWFwKSYmISFJLmRpc3BsYWNlbWVudE1hcCxmb2c6ISFVLHVzZUZvZzpJLmZvZyxmb2dFeHAyOlUmJlUuaXNGb2dFeHAyLGZsYXRTaGFkaW5nOiEhSS5mbGF0U2hhZGluZyxzaXplQXR0ZW51YXRpb246SS5zaXplQXR0ZW51YXRpb24sbG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcjpoLHNraW5uaW5nOnouaXNTa2lubmVkTWVzaD09PSEwJiZvdD4wLG1heEJvbmVzOm90LHVzZVZlcnRleFRleHR1cmU6Zixtb3JwaFRhcmdldHM6ISF6Lmdlb21ldHJ5JiYhIXouZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLG1vcnBoTm9ybWFsczohIXouZ2VvbWV0cnkmJiEhei5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLG1vcnBoVGFyZ2V0c0NvdW50OiEhei5nZW9tZXRyeSYmISF6Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbj96Lmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6TC5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6TC5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpMLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOkwucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6TC5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6TC5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6TC5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpMLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOmEubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246YS5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOkkuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6ZS5zaGFkb3dNYXAuZW5hYmxlZCYmUi5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOmUuc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6SS50b25lTWFwcGVkP2UudG9uZU1hcHBpbmc6S2QscGh5c2ljYWxseUNvcnJlY3RMaWdodHM6ZS5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyxwcmVtdWx0aXBsaWVkQWxwaGE6SS5wcmVtdWx0aXBsaWVkQWxwaGEsZG91YmxlU2lkZWQ6SS5zaWRlPT09THYsZmxpcFNpZGVkOkkuc2lkZT09PUlpLGRlcHRoUGFja2luZzpJLmRlcHRoUGFja2luZyE9PXZvaWQgMD9JLmRlcHRoUGFja2luZzohMSxpbmRleDBBdHRyaWJ1dGVOYW1lOkkuaW5kZXgwQXR0cmlidXRlTmFtZSxleHRlbnNpb25EZXJpdmF0aXZlczpJLmV4dGVuc2lvbnMmJkkuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcyxleHRlbnNpb25GcmFnRGVwdGg6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuZnJhZ0RlcHRoLGV4dGVuc2lvbkRyYXdCdWZmZXJzOkkuZXh0ZW5zaW9ucyYmSS5leHRlbnNpb25zLmRyYXdCdWZmZXJzLGV4dGVuc2lvblNoYWRlclRleHR1cmVMT0Q6SS5leHRlbnNpb25zJiZJLmV4dGVuc2lvbnMuc2hhZGVyVGV4dHVyZUxPRCxyZW5kZXJlckV4dGVuc2lvbkZyYWdEZXB0aDp1fHxuLmhhcygiRVhUX2ZyYWdfZGVwdGgiKSxyZW5kZXJlckV4dGVuc2lvbkRyYXdCdWZmZXJzOnV8fG4uaGFzKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKSxyZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q6dXx8bi5oYXMoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSxjdXN0b21Qcm9ncmFtQ2FjaGVLZXk6SS5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkoKX19ZnVuY3Rpb24gYihJKXtsZXQgTD1bXTtpZihJLnNoYWRlcklEP0wucHVzaChJLnNoYWRlcklEKTooTC5wdXNoKEkuY3VzdG9tVmVydGV4U2hhZGVySUQpLEwucHVzaChJLmN1c3RvbUZyYWdtZW50U2hhZGVySUQpKSxJLmRlZmluZXMhPT12b2lkIDApZm9yKGxldCBSIGluIEkuZGVmaW5lcylMLnB1c2goUiksTC5wdXNoKEkuZGVmaW5lc1tSXSk7cmV0dXJuIEkuaXNSYXdTaGFkZXJNYXRlcmlhbD09PSExJiYoUyhMLEkpLEMoTCxJKSxMLnB1c2goZS5vdXRwdXRFbmNvZGluZykpLEwucHVzaChJLmN1c3RvbVByb2dyYW1DYWNoZUtleSksTC5qb2luKCl9ZnVuY3Rpb24gUyhJLEwpe0kucHVzaChMLnByZWNpc2lvbiksSS5wdXNoKEwub3V0cHV0RW5jb2RpbmcpLEkucHVzaChMLmVudk1hcE1vZGUpLEkucHVzaChMLmNvbWJpbmUpLEkucHVzaChMLnZlcnRleFV2cyksSS5wdXNoKEwuZm9nRXhwMiksSS5wdXNoKEwuc2l6ZUF0dGVudWF0aW9uKSxJLnB1c2goTC5tYXhCb25lcyksSS5wdXNoKEwubW9ycGhUYXJnZXRzQ291bnQpLEkucHVzaChMLm51bURpckxpZ2h0cyksSS5wdXNoKEwubnVtUG9pbnRMaWdodHMpLEkucHVzaChMLm51bVNwb3RMaWdodHMpLEkucHVzaChMLm51bUhlbWlMaWdodHMpLEkucHVzaChMLm51bVJlY3RBcmVhTGlnaHRzKSxJLnB1c2goTC5udW1EaXJMaWdodFNoYWRvd3MpLEkucHVzaChMLm51bVBvaW50TGlnaHRTaGFkb3dzKSxJLnB1c2goTC5udW1TcG90TGlnaHRTaGFkb3dzKSxJLnB1c2goTC5zaGFkb3dNYXBUeXBlKSxJLnB1c2goTC50b25lTWFwcGluZyksSS5wdXNoKEwubnVtQ2xpcHBpbmdQbGFuZXMpLEkucHVzaChMLm51bUNsaXBJbnRlcnNlY3Rpb24pLEkucHVzaChMLmFscGhhV3JpdGUpfWZ1bmN0aW9uIEMoSSxMKXtzLmRpc2FibGVBbGwoKSxMLmlzV2ViR0wyJiZzLmVuYWJsZSgwKSxMLnN1cHBvcnRzVmVydGV4VGV4dHVyZXMmJnMuZW5hYmxlKDEpLEwuaW5zdGFuY2luZyYmcy5lbmFibGUoMiksTC5pbnN0YW5jaW5nQ29sb3ImJnMuZW5hYmxlKDMpLEwubWFwJiZzLmVuYWJsZSg0KSxMLm1hdGNhcCYmcy5lbmFibGUoNSksTC5lbnZNYXAmJnMuZW5hYmxlKDYpLEwuZW52TWFwQ3ViZVVWJiZzLmVuYWJsZSg3KSxMLmxpZ2h0TWFwJiZzLmVuYWJsZSg4KSxMLmFvTWFwJiZzLmVuYWJsZSg5KSxMLmVtaXNzaXZlTWFwJiZzLmVuYWJsZSgxMCksTC5idW1wTWFwJiZzLmVuYWJsZSgxMSksTC5ub3JtYWxNYXAmJnMuZW5hYmxlKDEyKSxMLm9iamVjdFNwYWNlTm9ybWFsTWFwJiZzLmVuYWJsZSgxMyksTC50YW5nZW50U3BhY2VOb3JtYWxNYXAmJnMuZW5hYmxlKDE0KSxMLmNsZWFyY29hdCYmcy5lbmFibGUoMTUpLEwuY2xlYXJjb2F0TWFwJiZzLmVuYWJsZSgxNiksTC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDE3KSxMLmNsZWFyY29hdE5vcm1hbE1hcCYmcy5lbmFibGUoMTgpLEwuZGlzcGxhY2VtZW50TWFwJiZzLmVuYWJsZSgxOSksTC5zcGVjdWxhck1hcCYmcy5lbmFibGUoMjApLEwucm91Z2huZXNzTWFwJiZzLmVuYWJsZSgyMSksTC5tZXRhbG5lc3NNYXAmJnMuZW5hYmxlKDIyKSxMLmdyYWRpZW50TWFwJiZzLmVuYWJsZSgyMyksTC5hbHBoYU1hcCYmcy5lbmFibGUoMjQpLEwuYWxwaGFUZXN0JiZzLmVuYWJsZSgyNSksTC52ZXJ0ZXhDb2xvcnMmJnMuZW5hYmxlKDI2KSxMLnZlcnRleEFscGhhcyYmcy5lbmFibGUoMjcpLEwudmVydGV4VXZzJiZzLmVuYWJsZSgyOCksTC52ZXJ0ZXhUYW5nZW50cyYmcy5lbmFibGUoMjkpLEwudXZzVmVydGV4T25seSYmcy5lbmFibGUoMzApLEwuZm9nJiZzLmVuYWJsZSgzMSksSS5wdXNoKHMubWFzaykscy5kaXNhYmxlQWxsKCksTC51c2VGb2cmJnMuZW5hYmxlKDApLEwuZmxhdFNoYWRpbmcmJnMuZW5hYmxlKDEpLEwubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlciYmcy5lbmFibGUoMiksTC5za2lubmluZyYmcy5lbmFibGUoMyksTC51c2VWZXJ0ZXhUZXh0dXJlJiZzLmVuYWJsZSg0KSxMLm1vcnBoVGFyZ2V0cyYmcy5lbmFibGUoNSksTC5tb3JwaE5vcm1hbHMmJnMuZW5hYmxlKDYpLEwucHJlbXVsdGlwbGllZEFscGhhJiZzLmVuYWJsZSg3KSxMLnNoYWRvd01hcEVuYWJsZWQmJnMuZW5hYmxlKDgpLEwucGh5c2ljYWxseUNvcnJlY3RMaWdodHMmJnMuZW5hYmxlKDkpLEwuZG91YmxlU2lkZWQmJnMuZW5hYmxlKDEwKSxMLmZsaXBTaWRlZCYmcy5lbmFibGUoMTEpLEwuZGVwdGhQYWNraW5nJiZzLmVuYWJsZSgxMiksTC5kaXRoZXJpbmcmJnMuZW5hYmxlKDEzKSxMLnNwZWN1bGFySW50ZW5zaXR5TWFwJiZzLmVuYWJsZSgxNCksTC5zcGVjdWxhckNvbG9yTWFwJiZzLmVuYWJsZSgxNSksTC50cmFuc21pc3Npb24mJnMuZW5hYmxlKDE2KSxMLnRyYW5zbWlzc2lvbk1hcCYmcy5lbmFibGUoMTcpLEwudGhpY2tuZXNzTWFwJiZzLmVuYWJsZSgxOCksTC5zaGVlbiYmcy5lbmFibGUoMTkpLEwuc2hlZW5Db2xvck1hcCYmcy5lbmFibGUoMjApLEwuc2hlZW5Sb3VnaG5lc3NNYXAmJnMuZW5hYmxlKDIxKSxMLmRlY29kZVZpZGVvVGV4dHVyZSYmcy5lbmFibGUoMjIpLEkucHVzaChzLm1hc2spfWZ1bmN0aW9uIFAoSSl7bGV0IEw9X1tJLnR5cGVdLFI7aWYoTCl7bGV0IEY9YWhbTF07Uj1PZmUuY2xvbmUoRi51bmlmb3Jtcyl9ZWxzZSBSPUkudW5pZm9ybXM7cmV0dXJuIFJ9ZnVuY3Rpb24gayhJLEwpe2xldCBSO2ZvcihsZXQgRj0wLHo9Yy5sZW5ndGg7Rjx6O0YrKyl7bGV0IFU9Y1tGXTtpZihVLmNhY2hlS2V5PT09TCl7Uj1VLCsrUi51c2VkVGltZXM7YnJlYWt9fXJldHVybiBSPT09dm9pZCAwJiYoUj1uZXcgaGdyKGUsTCxJLG8pLGMucHVzaChSKSksUn1mdW5jdGlvbiBPKEkpe2lmKC0tSS51c2VkVGltZXM9PT0wKXtsZXQgTD1jLmluZGV4T2YoSSk7Y1tMXT1jW2MubGVuZ3RoLTFdLGMucG9wKCksSS5kZXN0cm95KCl9fWZ1bmN0aW9uIEQoSSl7bC5yZW1vdmUoSSl9ZnVuY3Rpb24gQigpe2wuZGlzcG9zZSgpfXJldHVybntnZXRQYXJhbWV0ZXJzOngsZ2V0UHJvZ3JhbUNhY2hlS2V5OmIsZ2V0VW5pZm9ybXM6UCxhY3F1aXJlUHJvZ3JhbTprLHJlbGVhc2VQcm9ncmFtOk8scmVsZWFzZVNoYWRlckNhY2hlOkQscHJvZ3JhbXM6YyxkaXNwb3NlOkJ9fWZ1bmN0aW9uIGRncigpe2xldCBlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHQobyl7bGV0IGE9ZS5nZXQobyk7cmV0dXJuIGE9PT12b2lkIDAmJihhPXt9LGUuc2V0KG8sYSkpLGF9ZnVuY3Rpb24gcihvKXtlLmRlbGV0ZShvKX1mdW5jdGlvbiBuKG8sYSxzKXtlLmdldChvKVthXT1zfWZ1bmN0aW9uIGkoKXtlPW5ldyBXZWFrTWFwfXJldHVybntnZXQ6dCxyZW1vdmU6cix1cGRhdGU6bixkaXNwb3NlOml9fWZ1bmN0aW9uIG1ncihlLHQpe3JldHVybiBlLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/ZS5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjplLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9lLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6ZS5tYXRlcmlhbC5pZCE9PXQubWF0ZXJpYWwuaWQ/ZS5tYXRlcmlhbC5pZC10Lm1hdGVyaWFsLmlkOmUueiE9PXQuej9lLnotdC56OmUuaWQtdC5pZH1mdW5jdGlvbiBxdWUoZSx0KXtyZXR1cm4gZS5ncm91cE9yZGVyIT09dC5ncm91cE9yZGVyP2UuZ3JvdXBPcmRlci10Lmdyb3VwT3JkZXI6ZS5yZW5kZXJPcmRlciE9PXQucmVuZGVyT3JkZXI/ZS5yZW5kZXJPcmRlci10LnJlbmRlck9yZGVyOmUueiE9PXQuej90LnotZS56OmUuaWQtdC5pZH1mdW5jdGlvbiBHdWUoKXtsZXQgZT1bXSx0PTAscj1bXSxuPVtdLGk9W107ZnVuY3Rpb24gbygpe3Q9MCxyLmxlbmd0aD0wLG4ubGVuZ3RoPTAsaS5sZW5ndGg9MH1mdW5jdGlvbiBhKGgsZixwLGQsZyxfKXtsZXQgeT1lW3RdO3JldHVybiB5PT09dm9pZCAwPyh5PXtpZDpoLmlkLG9iamVjdDpoLGdlb21ldHJ5OmYsbWF0ZXJpYWw6cCxncm91cE9yZGVyOmQscmVuZGVyT3JkZXI6aC5yZW5kZXJPcmRlcix6OmcsZ3JvdXA6X30sZVt0XT15KTooeS5pZD1oLmlkLHkub2JqZWN0PWgseS5nZW9tZXRyeT1mLHkubWF0ZXJpYWw9cCx5Lmdyb3VwT3JkZXI9ZCx5LnJlbmRlck9yZGVyPWgucmVuZGVyT3JkZXIseS56PWcseS5ncm91cD1fKSx0KysseX1mdW5jdGlvbiBzKGgsZixwLGQsZyxfKXtsZXQgeT1hKGgsZixwLGQsZyxfKTtwLnRyYW5zbWlzc2lvbj4wP24ucHVzaCh5KTpwLnRyYW5zcGFyZW50PT09ITA/aS5wdXNoKHkpOnIucHVzaCh5KX1mdW5jdGlvbiBsKGgsZixwLGQsZyxfKXtsZXQgeT1hKGgsZixwLGQsZyxfKTtwLnRyYW5zbWlzc2lvbj4wP24udW5zaGlmdCh5KTpwLnRyYW5zcGFyZW50PT09ITA/aS51bnNoaWZ0KHkpOnIudW5zaGlmdCh5KX1mdW5jdGlvbiBjKGgsZil7ci5sZW5ndGg+MSYmci5zb3J0KGh8fG1nciksbi5sZW5ndGg+MSYmbi5zb3J0KGZ8fHF1ZSksaS5sZW5ndGg+MSYmaS5zb3J0KGZ8fHF1ZSl9ZnVuY3Rpb24gdSgpe2ZvcihsZXQgaD10LGY9ZS5sZW5ndGg7aDxmO2grKyl7bGV0IHA9ZVtoXTtpZihwLmlkPT09bnVsbClicmVhaztwLmlkPW51bGwscC5vYmplY3Q9bnVsbCxwLmdlb21ldHJ5PW51bGwscC5tYXRlcmlhbD1udWxsLHAuZ3JvdXA9bnVsbH19cmV0dXJue29wYXF1ZTpyLHRyYW5zbWlzc2l2ZTpuLHRyYW5zcGFyZW50OmksaW5pdDpvLHB1c2g6cyx1bnNoaWZ0OmwsZmluaXNoOnUsc29ydDpjfX1mdW5jdGlvbiBnZ3IoKXtsZXQgZT1uZXcgV2Vha01hcDtmdW5jdGlvbiB0KG4saSl7bGV0IG87cmV0dXJuIGUuaGFzKG4pPT09ITE/KG89bmV3IEd1ZSxlLnNldChuLFtvXSkpOmk+PWUuZ2V0KG4pLmxlbmd0aD8obz1uZXcgR3VlLGUuZ2V0KG4pLnB1c2gobykpOm89ZS5nZXQobilbaV0sb31mdW5jdGlvbiByKCl7ZT1uZXcgV2Vha01hcH1yZXR1cm57Z2V0OnQsZGlzcG9zZTpyfX1mdW5jdGlvbiBfZ3IoKXtsZXQgZT17fTtyZXR1cm57Z2V0OmZ1bmN0aW9uKHQpe2lmKGVbdC5pZF0hPT12b2lkIDApcmV0dXJuIGVbdC5pZF07bGV0IHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJEaXJlY3Rpb25hbExpZ2h0IjpyPXtkaXJlY3Rpb246bmV3IGosY29sb3I6bmV3IG5lfTticmVhaztjYXNlIlNwb3RMaWdodCI6cj17cG9zaXRpb246bmV3IGosZGlyZWN0aW9uOm5ldyBqLGNvbG9yOm5ldyBuZSxkaXN0YW5jZTowLGNvbmVDb3M6MCxwZW51bWJyYUNvczowLGRlY2F5OjB9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj17cG9zaXRpb246bmV3IGosY29sb3I6bmV3IG5lLGRpc3RhbmNlOjAsZGVjYXk6MH07YnJlYWs7Y2FzZSJIZW1pc3BoZXJlTGlnaHQiOnI9e2RpcmVjdGlvbjpuZXcgaixza3lDb2xvcjpuZXcgbmUsZ3JvdW5kQ29sb3I6bmV3IG5lfTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOnI9e2NvbG9yOm5ldyBuZSxwb3NpdGlvbjpuZXcgaixoYWxmV2lkdGg6bmV3IGosaGFsZkhlaWdodDpuZXcgan07YnJlYWt9cmV0dXJuIGVbdC5pZF09cixyfX19ZnVuY3Rpb24geWdyKCl7bGV0IGU9e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZihlW3QuaWRdIT09dm9pZCAwKXJldHVybiBlW3QuaWRdO2xldCByO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdH07YnJlYWs7Y2FzZSJTcG90TGlnaHQiOnI9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgTHR9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6cj17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBMdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM307YnJlYWt9cmV0dXJuIGVbdC5pZF09cixyfX19dmFyIHZncj0wO2Z1bmN0aW9uIHhncihlLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0oZS5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gYmdyKGUsdCl7bGV0IHI9bmV3IF9ncixuPXlncigpLGk9e3ZlcnNpb246MCxoYXNoOntkaXJlY3Rpb25hbExlbmd0aDotMSxwb2ludExlbmd0aDotMSxzcG90TGVuZ3RoOi0xLHJlY3RBcmVhTGVuZ3RoOi0xLGhlbWlMZW5ndGg6LTEsbnVtRGlyZWN0aW9uYWxTaGFkb3dzOi0xLG51bVBvaW50U2hhZG93czotMSxudW1TcG90U2hhZG93czotMX0sYW1iaWVudDpbMCwwLDBdLHByb2JlOltdLGRpcmVjdGlvbmFsOltdLGRpcmVjdGlvbmFsU2hhZG93OltdLGRpcmVjdGlvbmFsU2hhZG93TWFwOltdLGRpcmVjdGlvbmFsU2hhZG93TWF0cml4OltdLHNwb3Q6W10sc3BvdFNoYWRvdzpbXSxzcG90U2hhZG93TWFwOltdLHNwb3RTaGFkb3dNYXRyaXg6W10scmVjdEFyZWE6W10scmVjdEFyZWFMVEMxOm51bGwscmVjdEFyZWFMVEMyOm51bGwscG9pbnQ6W10scG9pbnRTaGFkb3c6W10scG9pbnRTaGFkb3dNYXA6W10scG9pbnRTaGFkb3dNYXRyaXg6W10saGVtaTpbXX07Zm9yKGxldCB1PTA7dTw5O3UrKylpLnByb2JlLnB1c2gobmV3IGopO2xldCBvPW5ldyBqLGE9bmV3IE1lLHM9bmV3IE1lO2Z1bmN0aW9uIGwodSxoKXtsZXQgZj0wLHA9MCxkPTA7Zm9yKGxldCBEPTA7RDw5O0QrKylpLnByb2JlW0RdLnNldCgwLDAsMCk7bGV0IGc9MCxfPTAseT0wLHg9MCxiPTAsUz0wLEM9MCxQPTA7dS5zb3J0KHhncik7bGV0IGs9aCE9PSEwP01hdGguUEk6MTtmb3IobGV0IEQ9MCxCPXUubGVuZ3RoO0Q8QjtEKyspe2xldCBJPXVbRF0sTD1JLmNvbG9yLFI9SS5pbnRlbnNpdHksRj1JLmRpc3RhbmNlLHo9SS5zaGFkb3cmJkkuc2hhZG93Lm1hcD9JLnNoYWRvdy5tYXAudGV4dHVyZTpudWxsO2lmKEkuaXNBbWJpZW50TGlnaHQpZis9TC5yKlIqayxwKz1MLmcqUiprLGQrPUwuYipSKms7ZWxzZSBpZihJLmlzTGlnaHRQcm9iZSlmb3IobGV0IFU9MDtVPDk7VSsrKWkucHJvYmVbVV0uYWRkU2NhbGVkVmVjdG9yKEkuc2guY29lZmZpY2llbnRzW1VdLFIpO2Vsc2UgaWYoSS5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUuY29sb3IuY29weShJLmNvbG9yKS5tdWx0aXBseVNjYWxhcihJLmludGVuc2l0eSprKSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsaS5kaXJlY3Rpb25hbFNoYWRvd1tnXT1aLGkuZGlyZWN0aW9uYWxTaGFkb3dNYXBbZ109eixpLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4W2ddPUkuc2hhZG93Lm1hdHJpeCxTKyt9aS5kaXJlY3Rpb25hbFtnXT1VLGcrK31lbHNlIGlmKEkuaXNTcG90TGlnaHQpe2xldCBVPXIuZ2V0KEkpO2lmKFUucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpLFUuY29sb3IuY29weShMKS5tdWx0aXBseVNjYWxhcihSKmspLFUuZGlzdGFuY2U9RixVLmNvbmVDb3M9TWF0aC5jb3MoSS5hbmdsZSksVS5wZW51bWJyYUNvcz1NYXRoLmNvcyhJLmFuZ2xlKigxLUkucGVudW1icmEpKSxVLmRlY2F5PUkuZGVjYXksSS5jYXN0U2hhZG93KXtsZXQgVz1JLnNoYWRvdyxaPW4uZ2V0KEkpO1ouc2hhZG93Qmlhcz1XLmJpYXMsWi5zaGFkb3dOb3JtYWxCaWFzPVcubm9ybWFsQmlhcyxaLnNoYWRvd1JhZGl1cz1XLnJhZGl1cyxaLnNoYWRvd01hcFNpemU9Vy5tYXBTaXplLGkuc3BvdFNoYWRvd1t5XT1aLGkuc3BvdFNoYWRvd01hcFt5XT16LGkuc3BvdFNoYWRvd01hdHJpeFt5XT1JLnNoYWRvdy5tYXRyaXgsUCsrfWkuc3BvdFt5XT1VLHkrK31lbHNlIGlmKEkuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgVT1yLmdldChJKTtVLmNvbG9yLmNvcHkoTCkubXVsdGlwbHlTY2FsYXIoUiksVS5oYWxmV2lkdGguc2V0KEkud2lkdGgqLjUsMCwwKSxVLmhhbGZIZWlnaHQuc2V0KDAsSS5oZWlnaHQqLjUsMCksaS5yZWN0QXJlYVt4XT1VLHgrK31lbHNlIGlmKEkuaXNQb2ludExpZ2h0KXtsZXQgVT1yLmdldChJKTtpZihVLmNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoSS5pbnRlbnNpdHkqayksVS5kaXN0YW5jZT1JLmRpc3RhbmNlLFUuZGVjYXk9SS5kZWNheSxJLmNhc3RTaGFkb3cpe2xldCBXPUkuc2hhZG93LFo9bi5nZXQoSSk7Wi5zaGFkb3dCaWFzPVcuYmlhcyxaLnNoYWRvd05vcm1hbEJpYXM9Vy5ub3JtYWxCaWFzLFouc2hhZG93UmFkaXVzPVcucmFkaXVzLFouc2hhZG93TWFwU2l6ZT1XLm1hcFNpemUsWi5zaGFkb3dDYW1lcmFOZWFyPVcuY2FtZXJhLm5lYXIsWi5zaGFkb3dDYW1lcmFGYXI9Vy5jYW1lcmEuZmFyLGkucG9pbnRTaGFkb3dbX109WixpLnBvaW50U2hhZG93TWFwW19dPXosaS5wb2ludFNoYWRvd01hdHJpeFtfXT1JLnNoYWRvdy5tYXRyaXgsQysrfWkucG9pbnRbX109VSxfKyt9ZWxzZSBpZihJLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgVT1yLmdldChJKTtVLnNreUNvbG9yLmNvcHkoSS5jb2xvcikubXVsdGlwbHlTY2FsYXIoUiprKSxVLmdyb3VuZENvbG9yLmNvcHkoSS5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIoUiprKSxpLmhlbWlbYl09VSxiKyt9fXg+MCYmKHQuaXNXZWJHTDJ8fGUuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKT09PSEwPyhpLnJlY3RBcmVhTFRDMT1yZS5MVENfRkxPQVRfMSxpLnJlY3RBcmVhTFRDMj1yZS5MVENfRkxPQVRfMik6ZS5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMD8oaS5yZWN0QXJlYUxUQzE9cmUuTFRDX0hBTEZfMSxpLnJlY3RBcmVhTFRDMj1yZS5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksaS5hbWJpZW50WzBdPWYsaS5hbWJpZW50WzFdPXAsaS5hbWJpZW50WzJdPWQ7bGV0IE89aS5oYXNoOyhPLmRpcmVjdGlvbmFsTGVuZ3RoIT09Z3x8Ty5wb2ludExlbmd0aCE9PV98fE8uc3BvdExlbmd0aCE9PXl8fE8ucmVjdEFyZWFMZW5ndGghPT14fHxPLmhlbWlMZW5ndGghPT1ifHxPLm51bURpcmVjdGlvbmFsU2hhZG93cyE9PVN8fE8ubnVtUG9pbnRTaGFkb3dzIT09Q3x8Ty5udW1TcG90U2hhZG93cyE9PVApJiYoaS5kaXJlY3Rpb25hbC5sZW5ndGg9ZyxpLnNwb3QubGVuZ3RoPXksaS5yZWN0QXJlYS5sZW5ndGg9eCxpLnBvaW50Lmxlbmd0aD1fLGkuaGVtaS5sZW5ndGg9YixpLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1TLGkuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPVMsaS5wb2ludFNoYWRvdy5sZW5ndGg9QyxpLnBvaW50U2hhZG93TWFwLmxlbmd0aD1DLGkuc3BvdFNoYWRvdy5sZW5ndGg9UCxpLnNwb3RTaGFkb3dNYXAubGVuZ3RoPVAsaS5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9UyxpLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1DLGkuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9UCxPLmRpcmVjdGlvbmFsTGVuZ3RoPWcsTy5wb2ludExlbmd0aD1fLE8uc3BvdExlbmd0aD15LE8ucmVjdEFyZWFMZW5ndGg9eCxPLmhlbWlMZW5ndGg9YixPLm51bURpcmVjdGlvbmFsU2hhZG93cz1TLE8ubnVtUG9pbnRTaGFkb3dzPUMsTy5udW1TcG90U2hhZG93cz1QLGkudmVyc2lvbj12Z3IrKyl9ZnVuY3Rpb24gYyh1LGgpe2xldCBmPTAscD0wLGQ9MCxnPTAsXz0wLHk9aC5tYXRyaXhXb3JsZEludmVyc2U7Zm9yKGxldCB4PTAsYj11Lmxlbmd0aDt4PGI7eCsrKXtsZXQgUz11W3hdO2lmKFMuaXNEaXJlY3Rpb25hbExpZ2h0KXtsZXQgQz1pLmRpcmVjdGlvbmFsW2ZdO0MuZGlyZWN0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxvLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLnRhcmdldC5tYXRyaXhXb3JsZCksQy5kaXJlY3Rpb24uc3ViKG8pLEMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxmKyt9ZWxzZSBpZihTLmlzU3BvdExpZ2h0KXtsZXQgQz1pLnNwb3RbZF07Qy5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oUy5tYXRyaXhXb3JsZCksQy5wb3NpdGlvbi5hcHBseU1hdHJpeDQoeSksQy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMudGFyZ2V0Lm1hdHJpeFdvcmxkKSxDLmRpcmVjdGlvbi5zdWIobyksQy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHkpLGQrK31lbHNlIGlmKFMuaXNSZWN0QXJlYUxpZ2h0KXtsZXQgQz1pLnJlY3RBcmVhW2ddO0MucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMucG9zaXRpb24uYXBwbHlNYXRyaXg0KHkpLHMuaWRlbnRpdHkoKSxhLmNvcHkoUy5tYXRyaXhXb3JsZCksYS5wcmVtdWx0aXBseSh5KSxzLmV4dHJhY3RSb3RhdGlvbihhKSxDLmhhbGZXaWR0aC5zZXQoUy53aWR0aCouNSwwLDApLEMuaGFsZkhlaWdodC5zZXQoMCxTLmhlaWdodCouNSwwKSxDLmhhbGZXaWR0aC5hcHBseU1hdHJpeDQocyksQy5oYWxmSGVpZ2h0LmFwcGx5TWF0cml4NChzKSxnKyt9ZWxzZSBpZihTLmlzUG9pbnRMaWdodCl7bGV0IEM9aS5wb2ludFtwXTtDLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihTLm1hdHJpeFdvcmxkKSxDLnBvc2l0aW9uLmFwcGx5TWF0cml4NCh5KSxwKyt9ZWxzZSBpZihTLmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgQz1pLmhlbWlbX107Qy5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFMubWF0cml4V29ybGQpLEMuZGlyZWN0aW9uLnRyYW5zZm9ybURpcmVjdGlvbih5KSxDLmRpcmVjdGlvbi5ub3JtYWxpemUoKSxfKyt9fX1yZXR1cm57c2V0dXA6bCxzZXR1cFZpZXc6YyxzdGF0ZTppfX1mdW5jdGlvbiBXdWUoZSx0KXtsZXQgcj1uZXcgYmdyKGUsdCksbj1bXSxpPVtdO2Z1bmN0aW9uIG8oKXtuLmxlbmd0aD0wLGkubGVuZ3RoPTB9ZnVuY3Rpb24gYShoKXtuLnB1c2goaCl9ZnVuY3Rpb24gcyhoKXtpLnB1c2goaCl9ZnVuY3Rpb24gbChoKXtyLnNldHVwKG4saCl9ZnVuY3Rpb24gYyhoKXtyLnNldHVwVmlldyhuLGgpfXJldHVybntpbml0Om8sc3RhdGU6e2xpZ2h0c0FycmF5Om4sc2hhZG93c0FycmF5OmksbGlnaHRzOnJ9LHNldHVwTGlnaHRzOmwsc2V0dXBMaWdodHNWaWV3OmMscHVzaExpZ2h0OmEscHVzaFNoYWRvdzpzfX1mdW5jdGlvbiB3Z3IoZSx0KXtsZXQgcj1uZXcgV2Vha01hcDtmdW5jdGlvbiBuKG8sYT0wKXtsZXQgcztyZXR1cm4gci5oYXMobyk9PT0hMT8ocz1uZXcgV3VlKGUsdCksci5zZXQobyxbc10pKTphPj1yLmdldChvKS5sZW5ndGg/KHM9bmV3IFd1ZShlLHQpLHIuZ2V0KG8pLnB1c2gocykpOnM9ci5nZXQobylbYV0sc31mdW5jdGlvbiBpKCl7cj1uZXcgV2Vha01hcH1yZXR1cm57Z2V0Om4sZGlzcG9zZTppfX12YXIgZU09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERlcHRoTWF0ZXJpYWwiLHRoaXMuZGVwdGhQYWNraW5nPUFmZSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtlTS5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgck09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGosdGhpcy5uZWFyRGlzdGFuY2U9MSx0aGlzLmZhckRpc3RhbmNlPTFlMyx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmZvZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMucmVmZXJlbmNlUG9zaXRpb24uY29weSh0LnJlZmVyZW5jZVBvc2l0aW9uKSx0aGlzLm5lYXJEaXN0YW5jZT10Lm5lYXJEaXN0YW5jZSx0aGlzLmZhckRpc3RhbmNlPXQuZmFyRGlzdGFuY2UsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXN9fTtyTS5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgU2dyPWB2b2lkIG1haW4oKSB7CglnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLCAxLjAgKTsKfWAsTWdyPWB1bmlmb3JtIHNhbXBsZXIyRCBzaGFkb3dfcGFzczsKdW5pZm9ybSB2ZWMyIHJlc29sdXRpb247CnVuaWZvcm0gZmxvYXQgcmFkaXVzOwojaW5jbHVkZSA8cGFja2luZz4Kdm9pZCBtYWluKCkgewoJY29uc3QgZmxvYXQgc2FtcGxlcyA9IGZsb2F0KCBWU01fU0FNUExFUyApOwoJZmxvYXQgbWVhbiA9IDAuMDsKCWZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDsKCWZsb2F0IHV2U3RyaWRlID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAyLjAgLyAoIHNhbXBsZXMgLSAxLjAgKTsKCWZsb2F0IHV2U3RhcnQgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IC0gMS4wOwoJZm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7CgkJZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlOwoJCSNpZmRlZiBIT1JJWk9OVEFMX1BBU1MKCQkJdmVjMiBkaXN0cmlidXRpb24gPSB1bnBhY2tSR0JBVG8ySGFsZiggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCB1dk9mZnNldCwgMC4wICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRpc3RyaWJ1dGlvbi54OwoJCQlzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7CgkJI2Vsc2UKCQkJZmxvYXQgZGVwdGggPSB1bnBhY2tSR0JBVG9EZXB0aCggdGV4dHVyZTJEKCBzaGFkb3dfcGFzcywgKCBnbF9GcmFnQ29vcmQueHkgKyB2ZWMyKCAwLjAsIHV2T2Zmc2V0ICkgKiByYWRpdXMgKSAvIHJlc29sdXRpb24gKSApOwoJCQltZWFuICs9IGRlcHRoOwoJCQlzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDsKCQkjZW5kaWYKCX0KCW1lYW4gPSBtZWFuIC8gc2FtcGxlczsKCXNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7CglmbG9hdCBzdGRfZGV2ID0gc3FydCggc3F1YXJlZF9tZWFuIC0gbWVhbiAqIG1lYW4gKTsKCWdsX0ZyYWdDb2xvciA9IHBhY2sySGFsZlRvUkdCQSggdmVjMiggbWVhbiwgc3RkX2RldiApICk7Cn1gO2Z1bmN0aW9uIGpmZShlLHQscil7bGV0IG49bmV3IE52LGk9bmV3IEx0LG89bmV3IEx0LGE9bmV3IGVuLHM9bmV3IGVNKHtkZXB0aFBhY2tpbmc6UGZlfSksbD1uZXcgck0sYz17fSx1PXIubWF4VGV4dHVyZVNpemUsaD17MDpJaSwxOkl2LDI6THZ9LGY9bmV3IGxoKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBMdH0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOlNncixmcmFnbWVudFNoYWRlcjpNZ3J9KSxwPWYuY2xvbmUoKTtwLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGQ9bmV3IFBlO2Quc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgZz1uZXcgZWkoZCxmKSxfPXRoaXM7dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT1BaHQsdGhpcy5yZW5kZXI9ZnVuY3Rpb24oUyxDLFApe2lmKF8uZW5hYmxlZD09PSExfHxfLmF1dG9VcGRhdGU9PT0hMSYmXy5uZWVkc1VwZGF0ZT09PSExfHxTLmxlbmd0aD09PTApcmV0dXJuO2xldCBrPWUuZ2V0UmVuZGVyVGFyZ2V0KCksTz1lLmdldEFjdGl2ZUN1YmVGYWNlKCksRD1lLmdldEFjdGl2ZU1pcG1hcExldmVsKCksQj1lLnN0YXRlO0Iuc2V0QmxlbmRpbmcoJGQpLEIuYnVmZmVycy5jb2xvci5zZXRDbGVhcigxLDEsMSwxKSxCLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksQi5zZXRTY2lzc29yVGVzdCghMSk7Zm9yKGxldCBJPTAsTD1TLmxlbmd0aDtJPEw7SSsrKXtsZXQgUj1TW0ldLEY9Ui5zaGFkb3c7aWYoRj09PXZvaWQgMCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFNoYWRvd01hcDoiLFIsImhhcyBubyBzaGFkb3cuIik7Y29udGludWV9aWYoRi5hdXRvVXBkYXRlPT09ITEmJkYubmVlZHNVcGRhdGU9PT0hMSljb250aW51ZTtpLmNvcHkoRi5tYXBTaXplKTtsZXQgej1GLmdldEZyYW1lRXh0ZW50cygpO2lmKGkubXVsdGlwbHkoeiksby5jb3B5KEYubWFwU2l6ZSksKGkueD51fHxpLnk+dSkmJihpLng+dSYmKG8ueD1NYXRoLmZsb29yKHUvei54KSxpLng9by54KnoueCxGLm1hcFNpemUueD1vLngpLGkueT51JiYoby55PU1hdGguZmxvb3IodS96LnkpLGkueT1vLnkqei55LEYubWFwU2l6ZS55PW8ueSkpLEYubWFwPT09bnVsbCYmIUYuaXNQb2ludExpZ2h0U2hhZG93JiZ0aGlzLnR5cGU9PT1GMyl7bGV0IFc9e21pbkZpbHRlcjpvaSxtYWdGaWx0ZXI6b2ksZm9ybWF0OlFvfTtGLm1hcD1uZXcgdXMoaS54LGkueSxXKSxGLm1hcC50ZXh0dXJlLm5hbWU9Ui5uYW1lKyIuc2hhZG93TWFwIixGLm1hcFBhc3M9bmV3IHVzKGkueCxpLnksVyksRi5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWlmKEYubWFwPT09bnVsbCl7bGV0IFc9e21pbkZpbHRlcjpMaSxtYWdGaWx0ZXI6TGksZm9ybWF0OlFvfTtGLm1hcD1uZXcgdXMoaS54LGkueSxXKSxGLm1hcC50ZXh0dXJlLm5hbWU9Ui5uYW1lKyIuc2hhZG93TWFwIixGLmNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9ZS5zZXRSZW5kZXJUYXJnZXQoRi5tYXApLGUuY2xlYXIoKTtsZXQgVT1GLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IFc9MDtXPFU7VysrKXtsZXQgWj1GLmdldFZpZXdwb3J0KFcpO2Euc2V0KG8ueCpaLngsby55KloueSxvLngqWi56LG8ueSpaLncpLEIudmlld3BvcnQoYSksRi51cGRhdGVNYXRyaWNlcyhSLFcpLG49Ri5nZXRGcnVzdHVtKCksYihDLFAsRi5jYW1lcmEsUix0aGlzLnR5cGUpfSFGLmlzUG9pbnRMaWdodFNoYWRvdyYmdGhpcy50eXBlPT09RjMmJnkoRixQKSxGLm5lZWRzVXBkYXRlPSExfV8ubmVlZHNVcGRhdGU9ITEsZS5zZXRSZW5kZXJUYXJnZXQoayxPLEQpfTtmdW5jdGlvbiB5KFMsQyl7bGV0IFA9dC51cGRhdGUoZyk7Zi5kZWZpbmVzLlZTTV9TQU1QTEVTIT09Uy5ibHVyU2FtcGxlcyYmKGYuZGVmaW5lcy5WU01fU0FNUExFUz1TLmJsdXJTYW1wbGVzLHAuZGVmaW5lcy5WU01fU0FNUExFUz1TLmJsdXJTYW1wbGVzLGYubmVlZHNVcGRhdGU9ITAscC5uZWVkc1VwZGF0ZT0hMCksZi51bmlmb3Jtcy5zaGFkb3dfcGFzcy52YWx1ZT1TLm1hcC50ZXh0dXJlLGYudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1TLm1hcFNpemUsZi51bmlmb3Jtcy5yYWRpdXMudmFsdWU9Uy5yYWRpdXMsZS5zZXRSZW5kZXJUYXJnZXQoUy5tYXBQYXNzKSxlLmNsZWFyKCksZS5yZW5kZXJCdWZmZXJEaXJlY3QoQyxudWxsLFAsZixnLG51bGwpLHAudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9Uy5tYXBQYXNzLnRleHR1cmUscC51bmlmb3Jtcy5yZXNvbHV0aW9uLnZhbHVlPVMubWFwU2l6ZSxwLnVuaWZvcm1zLnJhZGl1cy52YWx1ZT1TLnJhZGl1cyxlLnNldFJlbmRlclRhcmdldChTLm1hcCksZS5jbGVhcigpLGUucmVuZGVyQnVmZmVyRGlyZWN0KEMsbnVsbCxQLHAsZyxudWxsKX1mdW5jdGlvbiB4KFMsQyxQLGssTyxELEIpe2xldCBJPW51bGwsTD1rLmlzUG9pbnRMaWdodD09PSEwP1MuY3VzdG9tRGlzdGFuY2VNYXRlcmlhbDpTLmN1c3RvbURlcHRoTWF0ZXJpYWw7aWYoTCE9PXZvaWQgMD9JPUw6ST1rLmlzUG9pbnRMaWdodD09PSEwP2w6cyxlLmxvY2FsQ2xpcHBpbmdFbmFibGVkJiZQLmNsaXBTaGFkb3dzPT09ITAmJlAuY2xpcHBpbmdQbGFuZXMubGVuZ3RoIT09MHx8UC5kaXNwbGFjZW1lbnRNYXAmJlAuZGlzcGxhY2VtZW50U2NhbGUhPT0wfHxQLmFscGhhTWFwJiZQLmFscGhhVGVzdD4wKXtsZXQgUj1JLnV1aWQsRj1QLnV1aWQsej1jW1JdO3o9PT12b2lkIDAmJih6PXt9LGNbUl09eik7bGV0IFU9eltGXTtVPT09dm9pZCAwJiYoVT1JLmNsb25lKCkseltGXT1VKSxJPVV9cmV0dXJuIEkudmlzaWJsZT1QLnZpc2libGUsSS53aXJlZnJhbWU9UC53aXJlZnJhbWUsQj09PUYzP0kuc2lkZT1QLnNoYWRvd1NpZGUhPT1udWxsP1Auc2hhZG93U2lkZTpQLnNpZGU6SS5zaWRlPVAuc2hhZG93U2lkZSE9PW51bGw/UC5zaGFkb3dTaWRlOmhbUC5zaWRlXSxJLmFscGhhTWFwPVAuYWxwaGFNYXAsSS5hbHBoYVRlc3Q9UC5hbHBoYVRlc3QsSS5jbGlwU2hhZG93cz1QLmNsaXBTaGFkb3dzLEkuY2xpcHBpbmdQbGFuZXM9UC5jbGlwcGluZ1BsYW5lcyxJLmNsaXBJbnRlcnNlY3Rpb249UC5jbGlwSW50ZXJzZWN0aW9uLEkuZGlzcGxhY2VtZW50TWFwPVAuZGlzcGxhY2VtZW50TWFwLEkuZGlzcGxhY2VtZW50U2NhbGU9UC5kaXNwbGFjZW1lbnRTY2FsZSxJLmRpc3BsYWNlbWVudEJpYXM9UC5kaXNwbGFjZW1lbnRCaWFzLEkud2lyZWZyYW1lTGluZXdpZHRoPVAud2lyZWZyYW1lTGluZXdpZHRoLEkubGluZXdpZHRoPVAubGluZXdpZHRoLGsuaXNQb2ludExpZ2h0PT09ITAmJkkuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD09PSEwJiYoSS5yZWZlcmVuY2VQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oay5tYXRyaXhXb3JsZCksSS5uZWFyRGlzdGFuY2U9TyxJLmZhckRpc3RhbmNlPUQpLEl9ZnVuY3Rpb24gYihTLEMsUCxrLE8pe2lmKFMudmlzaWJsZT09PSExKXJldHVybjtpZihTLmxheWVycy50ZXN0KEMubGF5ZXJzKSYmKFMuaXNNZXNofHxTLmlzTGluZXx8Uy5pc1BvaW50cykmJihTLmNhc3RTaGFkb3d8fFMucmVjZWl2ZVNoYWRvdyYmTz09PUYzKSYmKCFTLmZydXN0dW1DdWxsZWR8fG4uaW50ZXJzZWN0c09iamVjdChTKSkpe1MubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXMoUC5tYXRyaXhXb3JsZEludmVyc2UsUy5tYXRyaXhXb3JsZCk7bGV0IEk9dC51cGRhdGUoUyksTD1TLm1hdGVyaWFsO2lmKEFycmF5LmlzQXJyYXkoTCkpe2xldCBSPUkuZ3JvdXBzO2ZvcihsZXQgRj0wLHo9Ui5sZW5ndGg7Rjx6O0YrKyl7bGV0IFU9UltGXSxXPUxbVS5tYXRlcmlhbEluZGV4XTtpZihXJiZXLnZpc2libGUpe2xldCBaPXgoUyxJLFcsayxQLm5lYXIsUC5mYXIsTyk7ZS5yZW5kZXJCdWZmZXJEaXJlY3QoUCxudWxsLEksWixTLFUpfX19ZWxzZSBpZihMLnZpc2libGUpe2xldCBSPXgoUyxJLEwsayxQLm5lYXIsUC5mYXIsTyk7ZS5yZW5kZXJCdWZmZXJEaXJlY3QoUCxudWxsLEksUixTLG51bGwpfX1sZXQgQj1TLmNoaWxkcmVuO2ZvcihsZXQgST0wLEw9Qi5sZW5ndGg7STxMO0krKyliKEJbSV0sQyxQLGssTyl9fWZ1bmN0aW9uIEVncihlLHQscil7bGV0IG49ci5pc1dlYkdMMjtmdW5jdGlvbiBpKCl7bGV0IGF0PSExLHNlPW5ldyBlbixRdD1udWxsLENlPW5ldyBlbigwLDAsMCwwKTtyZXR1cm57c2V0TWFzazpmdW5jdGlvbihQdCl7UXQhPT1QdCYmIWF0JiYoZS5jb2xvck1hc2soUHQsUHQsUHQsUHQpLFF0PVB0KX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFB0KXthdD1QdH0sc2V0Q2xlYXI6ZnVuY3Rpb24oUHQsTnQsemUseW4sV2kpe1dpPT09ITAmJihQdCo9eW4sTnQqPXluLHplKj15biksc2Uuc2V0KFB0LE50LHplLHluKSxDZS5lcXVhbHMoc2UpPT09ITEmJihlLmNsZWFyQ29sb3IoUHQsTnQsemUseW4pLENlLmNvcHkoc2UpKX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxRdD1udWxsLENlLnNldCgtMSwwLDAsMCl9fX1mdW5jdGlvbiBvKCl7bGV0IGF0PSExLHNlPW51bGwsUXQ9bnVsbCxDZT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKFB0KXtQdD9sdCgyOTI5KTpLdCgyOTI5KX0sc2V0TWFzazpmdW5jdGlvbihQdCl7c2UhPT1QdCYmIWF0JiYoZS5kZXB0aE1hc2soUHQpLHNlPVB0KX0sc2V0RnVuYzpmdW5jdGlvbihQdCl7aWYoUXQhPT1QdCl7aWYoUHQpc3dpdGNoKFB0KXtjYXNlIEtoZTplLmRlcHRoRnVuYyg1MTIpO2JyZWFrO2Nhc2UgWmhlOmUuZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSBKaGU6ZS5kZXB0aEZ1bmMoNTEzKTticmVhaztjYXNlIG5VOmUuZGVwdGhGdW5jKDUxNSk7YnJlYWs7Y2FzZSBRaGU6ZS5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIHRmZTplLmRlcHRoRnVuYyg1MTgpO2JyZWFrO2Nhc2UgZWZlOmUuZGVwdGhGdW5jKDUxNik7YnJlYWs7Y2FzZSByZmU6ZS5kZXB0aEZ1bmMoNTE3KTticmVhaztkZWZhdWx0OmUuZGVwdGhGdW5jKDUxNSl9ZWxzZSBlLmRlcHRoRnVuYyg1MTUpO1F0PVB0fX0sc2V0TG9ja2VkOmZ1bmN0aW9uKFB0KXthdD1QdH0sc2V0Q2xlYXI6ZnVuY3Rpb24oUHQpe0NlIT09UHQmJihlLmNsZWFyRGVwdGgoUHQpLENlPVB0KX0scmVzZXQ6ZnVuY3Rpb24oKXthdD0hMSxzZT1udWxsLFF0PW51bGwsQ2U9bnVsbH19fWZ1bmN0aW9uIGEoKXtsZXQgYXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGwsUHQ9bnVsbCxOdD1udWxsLHplPW51bGwseW49bnVsbCxXaT1udWxsO3JldHVybntzZXRUZXN0OmZ1bmN0aW9uKEFyKXthdHx8KEFyP2x0KDI5NjApOkt0KDI5NjApKX0sc2V0TWFzazpmdW5jdGlvbihBcil7c2UhPT1BciYmIWF0JiYoZS5zdGVuY2lsTWFzayhBciksc2U9QXIpfSxzZXRGdW5jOmZ1bmN0aW9uKEFyLFBhLGhvKXsoUXQhPT1Bcnx8Q2UhPT1QYXx8UHQhPT1obykmJihlLnN0ZW5jaWxGdW5jKEFyLFBhLGhvKSxRdD1BcixDZT1QYSxQdD1obyl9LHNldE9wOmZ1bmN0aW9uKEFyLFBhLGhvKXsoTnQhPT1Bcnx8emUhPT1QYXx8eW4hPT1obykmJihlLnN0ZW5jaWxPcChBcixQYSxobyksTnQ9QXIsemU9UGEseW49aG8pfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oQXIpe2F0PUFyfSxzZXRDbGVhcjpmdW5jdGlvbihBcil7V2khPT1BciYmKGUuY2xlYXJTdGVuY2lsKEFyKSxXaT1Bcil9LHJlc2V0OmZ1bmN0aW9uKCl7YXQ9ITEsc2U9bnVsbCxRdD1udWxsLENlPW51bGwsUHQ9bnVsbCxOdD1udWxsLHplPW51bGwseW49bnVsbCxXaT1udWxsfX19bGV0IHM9bmV3IGksbD1uZXcgbyxjPW5ldyBhLHU9e30saD17fSxmPW5ldyBXZWFrTWFwLHA9W10sZD1udWxsLGc9ITEsXz1udWxsLHk9bnVsbCx4PW51bGwsYj1udWxsLFM9bnVsbCxDPW51bGwsUD1udWxsLGs9ITEsTz1udWxsLEQ9bnVsbCxCPW51bGwsST1udWxsLEw9bnVsbCxSPWUuZ2V0UGFyYW1ldGVyKDM1NjYxKSxGPSExLHo9MCxVPWUuZ2V0UGFyYW1ldGVyKDc5MzgpO1UuaW5kZXhPZigiV2ViR0wiKSE9PS0xPyh6PXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKFUpWzFdKSxGPXo+PTEpOlUuaW5kZXhPZigiT3BlbkdMIEVTIikhPT0tMSYmKHo9cGFyc2VGbG9hdCgvXk9wZW5HTCBFUyAoXGQpLy5leGVjKFUpWzFdKSxGPXo+PTIpO2xldCBXPW51bGwsWj17fSxydD1lLmdldFBhcmFtZXRlcigzMDg4KSxvdD1lLmdldFBhcmFtZXRlcigyOTc4KSxzdD1uZXcgZW4oKS5mcm9tQXJyYXkocnQpLFN0PW5ldyBlbigpLmZyb21BcnJheShvdCk7ZnVuY3Rpb24gYnQoYXQsc2UsUXQpe2xldCBDZT1uZXcgVWludDhBcnJheSg0KSxQdD1lLmNyZWF0ZVRleHR1cmUoKTtlLmJpbmRUZXh0dXJlKGF0LFB0KSxlLnRleFBhcmFtZXRlcmkoYXQsMTAyNDEsOTcyOCksZS50ZXhQYXJhbWV0ZXJpKGF0LDEwMjQwLDk3MjgpO2ZvcihsZXQgTnQ9MDtOdDxRdDtOdCsrKWUudGV4SW1hZ2UyRChzZStOdCwwLDY0MDgsMSwxLDAsNjQwOCw1MTIxLENlKTtyZXR1cm4gUHR9bGV0IE10PXt9O010WzM1NTNdPWJ0KDM1NTMsMzU1MywxKSxNdFszNDA2N109YnQoMzQwNjcsMzQwNjksNikscy5zZXRDbGVhcigwLDAsMCwxKSxsLnNldENsZWFyKDEpLGMuc2V0Q2xlYXIoMCksbHQoMjkyOSksbC5zZXRGdW5jKG5VKSxodCghMSksd3QoTXV0KSxsdCgyODg0KSxxKCRkKTtmdW5jdGlvbiBsdChhdCl7dVthdF0hPT0hMCYmKGUuZW5hYmxlKGF0KSx1W2F0XT0hMCl9ZnVuY3Rpb24gS3QoYXQpe3VbYXRdIT09ITEmJihlLmRpc2FibGUoYXQpLHVbYXRdPSExKX1mdW5jdGlvbiBfdChhdCxzZSl7cmV0dXJuIGhbYXRdIT09c2U/KGUuYmluZEZyYW1lYnVmZmVyKGF0LHNlKSxoW2F0XT1zZSxuJiYoYXQ9PT0zNjAwOSYmKGhbMzYxNjBdPXNlKSxhdD09PTM2MTYwJiYoaFszNjAwOV09c2UpKSwhMCk6ITF9ZnVuY3Rpb24gY3QoYXQsc2Upe2xldCBRdD1wLENlPSExO2lmKGF0KWlmKFF0PWYuZ2V0KHNlKSxRdD09PXZvaWQgMCYmKFF0PVtdLGYuc2V0KHNlLFF0KSksYXQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFB0PWF0LnRleHR1cmU7aWYoUXQubGVuZ3RoIT09UHQubGVuZ3RofHxRdFswXSE9PTM2MDY0KXtmb3IobGV0IE50PTAsemU9UHQubGVuZ3RoO050PHplO050KyspUXRbTnRdPTM2MDY0K050O1F0Lmxlbmd0aD1QdC5sZW5ndGgsQ2U9ITB9fWVsc2UgUXRbMF0hPT0zNjA2NCYmKFF0WzBdPTM2MDY0LENlPSEwKTtlbHNlIFF0WzBdIT09MTAyOSYmKFF0WzBdPTEwMjksQ2U9ITApO0NlJiYoci5pc1dlYkdMMj9lLmRyYXdCdWZmZXJzKFF0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChRdCkpfWZ1bmN0aW9uIFgoYXQpe3JldHVybiBkIT09YXQ/KGUudXNlUHJvZ3JhbShhdCksZD1hdCwhMCk6ITF9bGV0IGV0PXtbTXZdOjMyNzc0LFtCaGVdOjMyNzc4LFtIaGVdOjMyNzc5fTtpZihuKWV0W0F1dF09MzI3NzUsZXRbUHV0XT0zMjc3NjtlbHNle2xldCBhdD10LmdldCgiRVhUX2JsZW5kX21pbm1heCIpO2F0IT09bnVsbCYmKGV0W0F1dF09YXQuTUlOX0VYVCxldFtQdXRdPWF0Lk1BWF9FWFQpfWxldCBkdD17W1ZoZV06MCxbVWhlXToxLFtxaGVdOjc2OCxbSWh0XTo3NzAsWyRoZV06Nzc2LFtqaGVdOjc3NCxbV2hlXTo3NzIsW0doZV06NzY5LFtMaHRdOjc3MSxbWGhlXTo3NzUsW1loZV06NzczfTtmdW5jdGlvbiBxKGF0LHNlLFF0LENlLFB0LE50LHplLHluKXtpZihhdD09PSRkKXtnPT09ITAmJihLdCgzMDQyKSxnPSExKTtyZXR1cm59aWYoZz09PSExJiYobHQoMzA0MiksZz0hMCksYXQhPT1GaGUpe2lmKGF0IT09X3x8eW4hPT1rKXtpZigoeSE9PU12fHxTIT09TXYpJiYoZS5ibGVuZEVxdWF0aW9uKDMyNzc0KSx5PU12LFM9TXYpLHluKXN3aXRjaChhdCl7Y2FzZSBWMzplLmJsZW5kRnVuY1NlcGFyYXRlKDEsNzcxLDEsNzcxKTticmVhaztjYXNlIEV1dDplLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIEN1dDplLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY4LDAsNzcwKTticmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IEludmFsaWQgYmxlbmRpbmc6ICIsYXQpO2JyZWFrfWVsc2Ugc3dpdGNoKGF0KXtjYXNlIFYzOmUuYmxlbmRGdW5jU2VwYXJhdGUoNzcwLDc3MSwxLDc3MSk7YnJlYWs7Y2FzZSBFdXQ6ZS5ibGVuZEZ1bmMoNzcwLDEpO2JyZWFrO2Nhc2UgVHV0OmUuYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIEN1dDplLmJsZW5kRnVuYygwLDc2OCk7YnJlYWs7ZGVmYXVsdDpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiBJbnZhbGlkIGJsZW5kaW5nOiAiLGF0KTticmVha314PW51bGwsYj1udWxsLEM9bnVsbCxQPW51bGwsXz1hdCxrPXlufXJldHVybn1QdD1QdHx8c2UsTnQ9TnR8fFF0LHplPXplfHxDZSwoc2UhPT15fHxQdCE9PVMpJiYoZS5ibGVuZEVxdWF0aW9uU2VwYXJhdGUoZXRbc2VdLGV0W1B0XSkseT1zZSxTPVB0KSwoUXQhPT14fHxDZSE9PWJ8fE50IT09Q3x8emUhPT1QKSYmKGUuYmxlbmRGdW5jU2VwYXJhdGUoZHRbUXRdLGR0W0NlXSxkdFtOdF0sZHRbemVdKSx4PVF0LGI9Q2UsQz1OdCxQPXplKSxfPWF0LGs9bnVsbH1mdW5jdGlvbiBwdChhdCxzZSl7YXQuc2lkZT09PUx2P0t0KDI4ODQpOmx0KDI4ODQpO2xldCBRdD1hdC5zaWRlPT09SWk7c2UmJihRdD0hUXQpLGh0KFF0KSxhdC5ibGVuZGluZz09PVYzJiZhdC50cmFuc3BhcmVudD09PSExP3EoJGQpOnEoYXQuYmxlbmRpbmcsYXQuYmxlbmRFcXVhdGlvbixhdC5ibGVuZFNyYyxhdC5ibGVuZERzdCxhdC5ibGVuZEVxdWF0aW9uQWxwaGEsYXQuYmxlbmRTcmNBbHBoYSxhdC5ibGVuZERzdEFscGhhLGF0LnByZW11bHRpcGxpZWRBbHBoYSksbC5zZXRGdW5jKGF0LmRlcHRoRnVuYyksbC5zZXRUZXN0KGF0LmRlcHRoVGVzdCksbC5zZXRNYXNrKGF0LmRlcHRoV3JpdGUpLHMuc2V0TWFzayhhdC5jb2xvcldyaXRlKTtsZXQgQ2U9YXQuc3RlbmNpbFdyaXRlO2Muc2V0VGVzdChDZSksQ2UmJihjLnNldE1hc2soYXQuc3RlbmNpbFdyaXRlTWFzayksYy5zZXRGdW5jKGF0LnN0ZW5jaWxGdW5jLGF0LnN0ZW5jaWxSZWYsYXQuc3RlbmNpbEZ1bmNNYXNrKSxjLnNldE9wKGF0LnN0ZW5jaWxGYWlsLGF0LnN0ZW5jaWxaRmFpbCxhdC5zdGVuY2lsWlBhc3MpKSxpZShhdC5wb2x5Z29uT2Zmc2V0LGF0LnBvbHlnb25PZmZzZXRGYWN0b3IsYXQucG9seWdvbk9mZnNldFVuaXRzKSxhdC5hbHBoYVRvQ292ZXJhZ2U9PT0hMD9sdCgzMjkyNik6S3QoMzI5MjYpfWZ1bmN0aW9uIGh0KGF0KXtPIT09YXQmJihhdD9lLmZyb250RmFjZSgyMzA0KTplLmZyb250RmFjZSgyMzA1KSxPPWF0KX1mdW5jdGlvbiB3dChhdCl7YXQhPT1EaGU/KGx0KDI4ODQpLGF0IT09RCYmKGF0PT09TXV0P2UuY3VsbEZhY2UoMTAyOSk6YXQ9PT1PaGU/ZS5jdWxsRmFjZSgxMDI4KTplLmN1bGxGYWNlKDEwMzIpKSk6S3QoMjg4NCksRD1hdH1mdW5jdGlvbiBrdChhdCl7YXQhPT1CJiYoRiYmZS5saW5lV2lkdGgoYXQpLEI9YXQpfWZ1bmN0aW9uIGllKGF0LHNlLFF0KXthdD8obHQoMzI4MjMpLChJIT09c2V8fEwhPT1RdCkmJihlLnBvbHlnb25PZmZzZXQoc2UsUXQpLEk9c2UsTD1RdCkpOkt0KDMyODIzKX1mdW5jdGlvbiBlZShhdCl7YXQ/bHQoMzA4OSk6S3QoMzA4OSl9ZnVuY3Rpb24gTGUoYXQpe2F0PT09dm9pZCAwJiYoYXQ9MzM5ODQrUi0xKSxXIT09YXQmJihlLmFjdGl2ZVRleHR1cmUoYXQpLFc9YXQpfWZ1bmN0aW9uIGFyKGF0LHNlKXtXPT09bnVsbCYmTGUoKTtsZXQgUXQ9WltXXTtRdD09PXZvaWQgMCYmKFF0PXt0eXBlOnZvaWQgMCx0ZXh0dXJlOnZvaWQgMH0sWltXXT1RdCksKFF0LnR5cGUhPT1hdHx8UXQudGV4dHVyZSE9PXNlKSYmKGUuYmluZFRleHR1cmUoYXQsc2V8fE10W2F0XSksUXQudHlwZT1hdCxRdC50ZXh0dXJlPXNlKX1mdW5jdGlvbiBmcigpe2xldCBhdD1aW1ddO2F0IT09dm9pZCAwJiZhdC50eXBlIT09dm9pZCAwJiYoZS5iaW5kVGV4dHVyZShhdC50eXBlLG51bGwpLGF0LnR5cGU9dm9pZCAwLGF0LnRleHR1cmU9dm9pZCAwKX1mdW5jdGlvbiB0dCgpe3RyeXtlLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gJCgpe3RyeXtlLnRleFN1YkltYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBJdCgpe3RyeXtlLnRleFN1YkltYWdlM0QuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiAkdCgpe3RyeXtlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJELmFwcGx5KGUsYXJndW1lbnRzKX1jYXRjaChhdCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGF0KX19ZnVuY3Rpb24gaGUoKXt0cnl7ZS50ZXhTdG9yYWdlMkQuYXBwbHkoZSxhcmd1bWVudHMpfWNhdGNoKGF0KXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsYXQpfX1mdW5jdGlvbiBUdCgpe3RyeXtlLnRleFN0b3JhZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIGJlKCl7dHJ5e2UudGV4SW1hZ2UyRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIG50KCl7dHJ5e2UudGV4SW1hZ2UzRC5hcHBseShlLGFyZ3VtZW50cyl9Y2F0Y2goYXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixhdCl9fWZ1bmN0aW9uIEN0KGF0KXtzdC5lcXVhbHMoYXQpPT09ITEmJihlLnNjaXNzb3IoYXQueCxhdC55LGF0LnosYXQudyksc3QuY29weShhdCkpfWZ1bmN0aW9uIFd0KGF0KXtTdC5lcXVhbHMoYXQpPT09ITEmJihlLnZpZXdwb3J0KGF0LngsYXQueSxhdC56LGF0LncpLFN0LmNvcHkoYXQpKX1mdW5jdGlvbiBmZSgpe2UuZGlzYWJsZSgzMDQyKSxlLmRpc2FibGUoMjg4NCksZS5kaXNhYmxlKDI5MjkpLGUuZGlzYWJsZSgzMjgyMyksZS5kaXNhYmxlKDMwODkpLGUuZGlzYWJsZSgyOTYwKSxlLmRpc2FibGUoMzI5MjYpLGUuYmxlbmRFcXVhdGlvbigzMjc3NCksZS5ibGVuZEZ1bmMoMSwwKSxlLmJsZW5kRnVuY1NlcGFyYXRlKDEsMCwxLDApLGUuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxlLmNsZWFyQ29sb3IoMCwwLDAsMCksZS5kZXB0aE1hc2soITApLGUuZGVwdGhGdW5jKDUxMyksZS5jbGVhckRlcHRoKDEpLGUuc3RlbmNpbE1hc2soNDI5NDk2NzI5NSksZS5zdGVuY2lsRnVuYyg1MTksMCw0Mjk0OTY3Mjk1KSxlLnN0ZW5jaWxPcCg3NjgwLDc2ODAsNzY4MCksZS5jbGVhclN0ZW5jaWwoMCksZS5jdWxsRmFjZSgxMDI5KSxlLmZyb250RmFjZSgyMzA1KSxlLnBvbHlnb25PZmZzZXQoMCwwKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQpLGUuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLG49PT0hMCYmKGUuYmluZEZyYW1lYnVmZmVyKDM2MDA5LG51bGwpLGUuYmluZEZyYW1lYnVmZmVyKDM2MDA4LG51bGwpKSxlLnVzZVByb2dyYW0obnVsbCksZS5saW5lV2lkdGgoMSksZS5zY2lzc29yKDAsMCxlLmNhbnZhcy53aWR0aCxlLmNhbnZhcy5oZWlnaHQpLGUudmlld3BvcnQoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksdT17fSxXPW51bGwsWj17fSxoPXt9LGY9bmV3IFdlYWtNYXAscD1bXSxkPW51bGwsZz0hMSxfPW51bGwseT1udWxsLHg9bnVsbCxiPW51bGwsUz1udWxsLEM9bnVsbCxQPW51bGwsaz0hMSxPPW51bGwsRD1udWxsLEI9bnVsbCxJPW51bGwsTD1udWxsLHN0LnNldCgwLDAsZS5jYW52YXMud2lkdGgsZS5jYW52YXMuaGVpZ2h0KSxTdC5zZXQoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCkscy5yZXNldCgpLGwucmVzZXQoKSxjLnJlc2V0KCl9cmV0dXJue2J1ZmZlcnM6e2NvbG9yOnMsZGVwdGg6bCxzdGVuY2lsOmN9LGVuYWJsZTpsdCxkaXNhYmxlOkt0LGJpbmRGcmFtZWJ1ZmZlcjpfdCxkcmF3QnVmZmVyczpjdCx1c2VQcm9ncmFtOlgsc2V0QmxlbmRpbmc6cSxzZXRNYXRlcmlhbDpwdCxzZXRGbGlwU2lkZWQ6aHQsc2V0Q3VsbEZhY2U6d3Qsc2V0TGluZVdpZHRoOmt0LHNldFBvbHlnb25PZmZzZXQ6aWUsc2V0U2Npc3NvclRlc3Q6ZWUsYWN0aXZlVGV4dHVyZTpMZSxiaW5kVGV4dHVyZTphcix1bmJpbmRUZXh0dXJlOmZyLGNvbXByZXNzZWRUZXhJbWFnZTJEOnR0LHRleEltYWdlMkQ6YmUsdGV4SW1hZ2UzRDpudCx0ZXhTdG9yYWdlMkQ6aGUsdGV4U3RvcmFnZTNEOlR0LHRleFN1YkltYWdlMkQ6JCx0ZXhTdWJJbWFnZTNEOkl0LGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEOiR0LHNjaXNzb3I6Q3Qsdmlld3BvcnQ6V3QscmVzZXQ6ZmV9fWZ1bmN0aW9uIFRncihlLHQscixuLGksbyxhKXtsZXQgcz1pLmlzV2ViR0wyLGw9aS5tYXhUZXh0dXJlcyxjPWkubWF4Q3ViZW1hcFNpemUsdT1pLm1heFRleHR1cmVTaXplLGg9aS5tYXhTYW1wbGVzLHA9dC5oYXMoIldFQkdMX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpP3QuZ2V0KCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKTp2b2lkIDAsZD1uZXcgV2Vha01hcCxnLF89ITE7dHJ5e189dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyE9InVuZGVmaW5lZCImJm5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpIT09bnVsbH1jYXRjaCh0dCl7fWZ1bmN0aW9uIHkodHQsJCl7cmV0dXJuIF8/bmV3IE9mZnNjcmVlbkNhbnZhcyh0dCwkKTpRUCgiY2FudmFzIil9ZnVuY3Rpb24geCh0dCwkLEl0LCR0KXtsZXQgaGU9MTtpZigodHQud2lkdGg+JHR8fHR0LmhlaWdodD4kdCkmJihoZT0kdC9NYXRoLm1heCh0dC53aWR0aCx0dC5oZWlnaHQpKSxoZTwxfHwkPT09ITApaWYodHlwZW9mIEhUTUxJbWFnZUVsZW1lbnQhPSJ1bmRlZmluZWQiJiZ0dCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcCE9InVuZGVmaW5lZCImJnR0IGluc3RhbmNlb2YgSW1hZ2VCaXRtYXApe2xldCBUdD0kP1JmZTpNYXRoLmZsb29yLGJlPVR0KGhlKnR0LndpZHRoKSxudD1UdChoZSp0dC5oZWlnaHQpO2c9PT12b2lkIDAmJihnPXkoYmUsbnQpKTtsZXQgQ3Q9SXQ/eShiZSxudCk6ZztyZXR1cm4gQ3Qud2lkdGg9YmUsQ3QuaGVpZ2h0PW50LEN0LmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHR0LDAsMCxiZSxudCksY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGhhcyBiZWVuIHJlc2l6ZWQgZnJvbSAoIit0dC53aWR0aCsieCIrdHQuaGVpZ2h0KyIpIHRvICgiK2JlKyJ4IitudCsiKS4iKSxDdH1lbHNlIHJldHVybiJkYXRhImluIHR0JiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrdHQud2lkdGgrIngiK3R0LmhlaWdodCsiKS4iKSx0dDtyZXR1cm4gdHR9ZnVuY3Rpb24gYih0dCl7cmV0dXJuIEp1dCh0dC53aWR0aCkmJkp1dCh0dC5oZWlnaHQpfWZ1bmN0aW9uIFModHQpe3JldHVybiBzPyExOnR0LndyYXBTIT09Sm98fHR0LndyYXBUIT09Sm98fHR0Lm1pbkZpbHRlciE9PUxpJiZ0dC5taW5GaWx0ZXIhPT1vaX1mdW5jdGlvbiBDKHR0LCQpe3JldHVybiB0dC5nZW5lcmF0ZU1pcG1hcHMmJiQmJnR0Lm1pbkZpbHRlciE9PUxpJiZ0dC5taW5GaWx0ZXIhPT1vaX1mdW5jdGlvbiBQKHR0KXtlLmdlbmVyYXRlTWlwbWFwKHR0KX1mdW5jdGlvbiBrKHR0LCQsSXQsJHQsaGU9ITEpe2lmKHM9PT0hMSlyZXR1cm4gJDtpZih0dCE9PW51bGwpe2lmKGVbdHRdIT09dm9pZCAwKXJldHVybiBlW3R0XTtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gdXNlIG5vbi1leGlzdGluZyBXZWJHTCBpbnRlcm5hbCBmb3JtYXQgJyIrdHQrIiciKX1sZXQgVHQ9JDtyZXR1cm4gJD09PTY0MDMmJihJdD09PTUxMjYmJihUdD0zMzMyNiksSXQ9PT01MTMxJiYoVHQ9MzMzMjUpLEl0PT09NTEyMSYmKFR0PTMzMzIxKSksJD09PTMzMzE5JiYoSXQ9PT01MTI2JiYoVHQ9MzMzMjgpLEl0PT09NTEzMSYmKFR0PTMzMzI3KSxJdD09PTUxMjEmJihUdD0zMzMyMykpLCQ9PT02NDA4JiYoSXQ9PT01MTI2JiYoVHQ9MzQ4MzYpLEl0PT09NTEzMSYmKFR0PTM0ODQyKSxJdD09PTUxMjEmJihUdD0kdD09PVluJiZoZT09PSExPzM1OTA3OjMyODU2KSxJdD09PTMyODE5JiYoVHQ9MzI4NTQpLEl0PT09MzI4MjAmJihUdD0zMjg1NSkpLChUdD09PTMzMzI1fHxUdD09PTMzMzI2fHxUdD09PTMzMzI3fHxUdD09PTMzMzI4fHxUdD09PTM0ODQyfHxUdD09PTM0ODM2KSYmdC5nZXQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSxUdH1mdW5jdGlvbiBPKHR0LCQsSXQpe3JldHVybiBDKHR0LEl0KT09PSEwfHx0dC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSYmdHQubWluRmlsdGVyIT09TGkmJnR0Lm1pbkZpbHRlciE9PW9pP01hdGgubG9nMihNYXRoLm1heCgkLndpZHRoLCQuaGVpZ2h0KSkrMTp0dC5taXBtYXBzIT09dm9pZCAwJiZ0dC5taXBtYXBzLmxlbmd0aD4wP3R0Lm1pcG1hcHMubGVuZ3RoOnR0LmlzQ29tcHJlc3NlZFRleHR1cmUmJkFycmF5LmlzQXJyYXkodHQuaW1hZ2UpPyQubWlwbWFwcy5sZW5ndGg6MX1mdW5jdGlvbiBEKHR0KXtyZXR1cm4gdHQ9PT1MaXx8dHQ9PT1pVXx8dHQ9PT1vVT85NzI4Ojk3Mjl9ZnVuY3Rpb24gQih0dCl7bGV0ICQ9dHQudGFyZ2V0OyQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsQiksTCgkKSwkLmlzVmlkZW9UZXh0dXJlJiZkLmRlbGV0ZSgkKSxhLm1lbW9yeS50ZXh0dXJlcy0tfWZ1bmN0aW9uIEkodHQpe2xldCAkPXR0LnRhcmdldDskLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLEkpLFIoJCl9ZnVuY3Rpb24gTCh0dCl7bGV0ICQ9bi5nZXQodHQpOyQuX193ZWJnbEluaXQhPT12b2lkIDAmJihlLmRlbGV0ZVRleHR1cmUoJC5fX3dlYmdsVGV4dHVyZSksbi5yZW1vdmUodHQpKX1mdW5jdGlvbiBSKHR0KXtsZXQgJD10dC50ZXh0dXJlLEl0PW4uZ2V0KHR0KSwkdD1uLmdldCgkKTtpZighIXR0KXtpZigkdC5fX3dlYmdsVGV4dHVyZSE9PXZvaWQgMCYmKGUuZGVsZXRlVGV4dHVyZSgkdC5fX3dlYmdsVGV4dHVyZSksYS5tZW1vcnkudGV4dHVyZXMtLSksdHQuZGVwdGhUZXh0dXJlJiZ0dC5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLHR0LmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgaGU9MDtoZTw2O2hlKyspZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsRnJhbWVidWZmZXJbaGVdKSxJdC5fX3dlYmdsRGVwdGhidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlcltoZV0pO2Vsc2UgZS5kZWxldGVGcmFtZWJ1ZmZlcihJdC5fX3dlYmdsRnJhbWVidWZmZXIpLEl0Ll9fd2ViZ2xEZXB0aGJ1ZmZlciYmZS5kZWxldGVSZW5kZXJidWZmZXIoSXQuX193ZWJnbERlcHRoYnVmZmVyKSxJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJmUuZGVsZXRlRnJhbWVidWZmZXIoSXQuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJmUuZGVsZXRlUmVuZGVyYnVmZmVyKEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksSXQuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZlLmRlbGV0ZVJlbmRlcmJ1ZmZlcihJdC5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKHR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpZm9yKGxldCBoZT0wLFR0PSQubGVuZ3RoO2hlPFR0O2hlKyspe2xldCBiZT1uLmdldCgkW2hlXSk7YmUuX193ZWJnbFRleHR1cmUmJihlLmRlbGV0ZVRleHR1cmUoYmUuX193ZWJnbFRleHR1cmUpLGEubWVtb3J5LnRleHR1cmVzLS0pLG4ucmVtb3ZlKCRbaGVdKX1uLnJlbW92ZSgkKSxuLnJlbW92ZSh0dCl9fWxldCBGPTA7ZnVuY3Rpb24geigpe0Y9MH1mdW5jdGlvbiBVKCl7bGV0IHR0PUY7cmV0dXJuIHR0Pj1sJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IFRyeWluZyB0byB1c2UgIit0dCsiIHRleHR1cmUgdW5pdHMgd2hpbGUgdGhpcyBHUFUgc3VwcG9ydHMgb25seSAiK2wpLEYrPTEsdHR9ZnVuY3Rpb24gVyh0dCwkKXtsZXQgSXQ9bi5nZXQodHQpO2lmKHR0LmlzVmlkZW9UZXh0dXJlJiZrdCh0dCksdHQudmVyc2lvbj4wJiZJdC5fX3ZlcnNpb24hPT10dC52ZXJzaW9uKXtsZXQgJHQ9dHQuaW1hZ2U7aWYoJHQ9PT12b2lkIDApY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNlIGlmKCR0LmNvbXBsZXRlPT09ITEpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIik7ZWxzZXtsdChJdCx0dCwkKTtyZXR1cm59fXIuYWN0aXZlVGV4dHVyZSgzMzk4NCskKSxyLmJpbmRUZXh0dXJlKDM1NTMsSXQuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIFoodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2x0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzNTg2NixJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gcnQodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe2x0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzMjg3OSxJdC5fX3dlYmdsVGV4dHVyZSl9ZnVuY3Rpb24gb3QodHQsJCl7bGV0IEl0PW4uZ2V0KHR0KTtpZih0dC52ZXJzaW9uPjAmJkl0Ll9fdmVyc2lvbiE9PXR0LnZlcnNpb24pe0t0KEl0LHR0LCQpO3JldHVybn1yLmFjdGl2ZVRleHR1cmUoMzM5ODQrJCksci5iaW5kVGV4dHVyZSgzNDA2NyxJdC5fX3dlYmdsVGV4dHVyZSl9bGV0IHN0PXtbalBdOjEwNDk3LFtKb106MzMwNzEsW1hQXTozMzY0OH0sU3Q9e1tMaV06OTcyOCxbaVVdOjk5ODQsW29VXTo5OTg2LFtvaV06OTcyOSxba2h0XTo5OTg1LFtveF06OTk4N307ZnVuY3Rpb24gYnQodHQsJCxJdCl7aWYoSXQ/KGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MixzdFskLndyYXBTXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQzLHN0WyQud3JhcFRdKSwodHQ9PT0zMjg3OXx8dHQ9PT0zNTg2NikmJmUudGV4UGFyYW1ldGVyaSh0dCwzMjg4MixzdFskLndyYXBSXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQwLFN0WyQubWFnRmlsdGVyXSksZS50ZXhQYXJhbWV0ZXJpKHR0LDEwMjQxLFN0WyQubWluRmlsdGVyXSkpOihlLnRleFBhcmFtZXRlcmkodHQsMTAyNDIsMzMwNzEpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MywzMzA3MSksKHR0PT09MzI4Nzl8fHR0PT09MzU4NjYpJiZlLnRleFBhcmFtZXRlcmkodHQsMzI4ODIsMzMwNzEpLCgkLndyYXBTIT09Sm98fCQud3JhcFQhPT1KbykmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVGV4dHVyZSBpcyBub3QgcG93ZXIgb2YgdHdvLiBUZXh0dXJlLndyYXBTIGFuZCBUZXh0dXJlLndyYXBUIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuQ2xhbXBUb0VkZ2VXcmFwcGluZy4iKSxlLnRleFBhcmFtZXRlcmkodHQsMTAyNDAsRCgkLm1hZ0ZpbHRlcikpLGUudGV4UGFyYW1ldGVyaSh0dCwxMDI0MSxEKCQubWluRmlsdGVyKSksJC5taW5GaWx0ZXIhPT1MaSYmJC5taW5GaWx0ZXIhPT1vaSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLHQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKT09PSEwKXtsZXQgJHQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKCQudHlwZT09PWpkJiZ0LmhhcygiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik9PT0hMXx8cz09PSExJiYkLnR5cGU9PT1DdiYmdC5oYXMoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik9PT0hMSlyZXR1cm47KCQuYW5pc290cm9weT4xfHxuLmdldCgkKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKGUudGV4UGFyYW1ldGVyZih0dCwkdC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbigkLmFuaXNvdHJvcHksaS5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxuLmdldCgkKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PSQuYW5pc290cm9weSl9fWZ1bmN0aW9uIE10KHR0LCQpe3R0Ll9fd2ViZ2xJbml0PT09dm9pZCAwJiYodHQuX193ZWJnbEluaXQ9ITAsJC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixCKSx0dC5fX3dlYmdsVGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX1mdW5jdGlvbiBsdCh0dCwkLEl0KXtsZXQgJHQ9MzU1MzskLmlzRGF0YVRleHR1cmUyREFycmF5JiYoJHQ9MzU4NjYpLCQuaXNEYXRhVGV4dHVyZTNEJiYoJHQ9MzI4NzkpLE10KHR0LCQpLHIuYWN0aXZlVGV4dHVyZSgzMzk4NCtJdCksci5iaW5kVGV4dHVyZSgkdCx0dC5fX3dlYmdsVGV4dHVyZSksZS5waXhlbFN0b3JlaSgzNzQ0MCwkLmZsaXBZKSxlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksZS5waXhlbFN0b3JlaSgzMzE3LCQudW5wYWNrQWxpZ25tZW50KSxlLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCBoZT1TKCQpJiZiKCQuaW1hZ2UpPT09ITEsVHQ9eCgkLmltYWdlLGhlLCExLHUpO1R0PWllKCQsVHQpO2xldCBiZT1iKFR0KXx8cyxudD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksQ3Q9by5jb252ZXJ0KCQudHlwZSksV3Q9aygkLmludGVybmFsRm9ybWF0LG50LEN0LCQuZW5jb2RpbmcsJC5pc1ZpZGVvVGV4dHVyZSk7YnQoJHQsJCxiZSk7bGV0IGZlLGF0PSQubWlwbWFwcyxzZT1zJiYkLmlzVmlkZW9UZXh0dXJlIT09ITAsUXQ9dHQuX192ZXJzaW9uPT09dm9pZCAwLENlPU8oJCxUdCxiZSk7aWYoJC5pc0RlcHRoVGV4dHVyZSlXdD02NDAyLHM/JC50eXBlPT09amQ/V3Q9MzYwMTI6JC50eXBlPT09SFA/V3Q9MzMxOTA6JC50eXBlPT09QXY/V3Q9MzUwNTY6V3Q9MzMxODk6JC50eXBlPT09amQmJmNvbnNvbGUuZXJyb3IoIldlYkdMUmVuZGVyZXI6IEZsb2F0aW5nIHBvaW50IGRlcHRoIHRleHR1cmUgcmVxdWlyZXMgV2ViR0wyLiIpLCQuZm9ybWF0PT09ejAmJld0PT09NjQwMiYmJC50eXBlIT09RzMmJiQudHlwZSE9PUhQJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVc2UgVW5zaWduZWRTaG9ydFR5cGUgb3IgVW5zaWduZWRJbnRUeXBlIGZvciBEZXB0aEZvcm1hdCBEZXB0aFRleHR1cmUuIiksJC50eXBlPUczLEN0PW8uY29udmVydCgkLnR5cGUpKSwkLmZvcm1hdD09PWt2JiZXdD09PTY0MDImJihXdD0zNDA0MSwkLnR5cGUhPT1BdiYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkSW50MjQ4VHlwZSBmb3IgRGVwdGhTdGVuY2lsRm9ybWF0IERlcHRoVGV4dHVyZS4iKSwkLnR5cGU9QXYsQ3Q9by5jb252ZXJ0KCQudHlwZSkpKSxzZSYmUXQ/ci50ZXhTdG9yYWdlMkQoMzU1MywxLFd0LFR0LndpZHRoLFR0LmhlaWdodCk6ci50ZXhJbWFnZTJEKDM1NTMsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsMCxudCxDdCxudWxsKTtlbHNlIGlmKCQuaXNEYXRhVGV4dHVyZSlpZihhdC5sZW5ndGg+MCYmYmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sc2U/ci50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LEN0LGZlLmRhdGEpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLG50LEN0LGZlLmRhdGEpOyQuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2Ugc2U/KFF0JiZyLnRleFN0b3JhZ2UyRCgzNTUzLENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCksci50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAsVHQud2lkdGgsVHQuaGVpZ2h0LG50LEN0LFR0LmRhdGEpKTpyLnRleEltYWdlMkQoMzU1MywwLFd0LFR0LndpZHRoLFR0LmhlaWdodCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0NvbXByZXNzZWRUZXh0dXJlKXtzZSYmUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsYXRbMF0ud2lkdGgsYXRbMF0uaGVpZ2h0KTtmb3IobGV0IFB0PTAsTnQ9YXQubGVuZ3RoO1B0PE50O1B0KyspZmU9YXRbUHRdLCQuZm9ybWF0IT09UW8/bnQhPT1udWxsP3NlP3IuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LGZlLmRhdGEpOnIuY29tcHJlc3NlZFRleEltYWdlMkQoMzU1MyxQdCxXdCxmZS53aWR0aCxmZS5oZWlnaHQsMCxmZS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC51cGxvYWRUZXh0dXJlKCkiKTpzZT9yLnRleFN1YkltYWdlMkQoMzU1MyxQdCwwLDAsZmUud2lkdGgsZmUuaGVpZ2h0LG50LEN0LGZlLmRhdGEpOnIudGV4SW1hZ2UyRCgzNTUzLFB0LFd0LGZlLndpZHRoLGZlLmhlaWdodCwwLG50LEN0LGZlLmRhdGEpfWVsc2UgaWYoJC5pc0RhdGFUZXh0dXJlMkRBcnJheSlzZT8oUXQmJnIudGV4U3RvcmFnZTNEKDM1ODY2LENlLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCksci50ZXhTdWJJbWFnZTNEKDM1ODY2LDAsMCwwLDAsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoLG50LEN0LFR0LmRhdGEpKTpyLnRleEltYWdlM0QoMzU4NjYsMCxXdCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsMCxudCxDdCxUdC5kYXRhKTtlbHNlIGlmKCQuaXNEYXRhVGV4dHVyZTNEKXNlPyhRdCYmci50ZXhTdG9yYWdlM0QoMzI4NzksQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LFR0LmRlcHRoKSxyLnRleFN1YkltYWdlM0QoMzI4NzksMCwwLDAsMCxUdC53aWR0aCxUdC5oZWlnaHQsVHQuZGVwdGgsbnQsQ3QsVHQuZGF0YSkpOnIudGV4SW1hZ2UzRCgzMjg3OSwwLFd0LFR0LndpZHRoLFR0LmhlaWdodCxUdC5kZXB0aCwwLG50LEN0LFR0LmRhdGEpO2Vsc2UgaWYoJC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSlzZSYmUXQ/ci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxUdC53aWR0aCxUdC5oZWlnaHQpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsVHQud2lkdGgsVHQuaGVpZ2h0LDAsbnQsQ3QsbnVsbCk7ZWxzZSBpZihhdC5sZW5ndGg+MCYmYmUpe3NlJiZRdCYmci50ZXhTdG9yYWdlMkQoMzU1MyxDZSxXdCxhdFswXS53aWR0aCxhdFswXS5oZWlnaHQpO2ZvcihsZXQgUHQ9MCxOdD1hdC5sZW5ndGg7UHQ8TnQ7UHQrKylmZT1hdFtQdF0sc2U/ci50ZXhTdWJJbWFnZTJEKDM1NTMsUHQsMCwwLG50LEN0LGZlKTpyLnRleEltYWdlMkQoMzU1MyxQdCxXdCxudCxDdCxmZSk7JC5nZW5lcmF0ZU1pcG1hcHM9ITF9ZWxzZSBzZT8oUXQmJnIudGV4U3RvcmFnZTJEKDM1NTMsQ2UsV3QsVHQud2lkdGgsVHQuaGVpZ2h0KSxyLnRleFN1YkltYWdlMkQoMzU1MywwLDAsMCxudCxDdCxUdCkpOnIudGV4SW1hZ2UyRCgzNTUzLDAsV3QsbnQsQ3QsVHQpO0MoJCxiZSkmJlAoJHQpLHR0Ll9fdmVyc2lvbj0kLnZlcnNpb24sJC5vblVwZGF0ZSYmJC5vblVwZGF0ZSgkKX1mdW5jdGlvbiBLdCh0dCwkLEl0KXtpZigkLmltYWdlLmxlbmd0aCE9PTYpcmV0dXJuO010KHR0LCQpLHIuYWN0aXZlVGV4dHVyZSgzMzk4NCtJdCksci5iaW5kVGV4dHVyZSgzNDA2Nyx0dC5fX3dlYmdsVGV4dHVyZSksZS5waXhlbFN0b3JlaSgzNzQ0MCwkLmZsaXBZKSxlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksZS5waXhlbFN0b3JlaSgzMzE3LCQudW5wYWNrQWxpZ25tZW50KSxlLnBpeGVsU3RvcmVpKDM3NDQzLDApO2xldCAkdD0kJiYoJC5pc0NvbXByZXNzZWRUZXh0dXJlfHwkLmltYWdlWzBdLmlzQ29tcHJlc3NlZFRleHR1cmUpLGhlPSQuaW1hZ2VbMF0mJiQuaW1hZ2VbMF0uaXNEYXRhVGV4dHVyZSxUdD1bXTtmb3IobGV0IFB0PTA7UHQ8NjtQdCsrKSEkdCYmIWhlP1R0W1B0XT14KCQuaW1hZ2VbUHRdLCExLCEwLGMpOlR0W1B0XT1oZT8kLmltYWdlW1B0XS5pbWFnZTokLmltYWdlW1B0XSxUdFtQdF09aWUoJCxUdFtQdF0pO2xldCBiZT1UdFswXSxudD1iKGJlKXx8cyxDdD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksV3Q9by5jb252ZXJ0KCQudHlwZSksZmU9aygkLmludGVybmFsRm9ybWF0LEN0LFd0LCQuZW5jb2RpbmcpLGF0PXMmJiQuaXNWaWRlb1RleHR1cmUhPT0hMCxzZT10dC5fX3ZlcnNpb249PT12b2lkIDAsUXQ9TygkLGJlLG50KTtidCgzNDA2NywkLG50KTtsZXQgQ2U7aWYoJHQpe2F0JiZzZSYmci50ZXhTdG9yYWdlMkQoMzQwNjcsUXQsZmUsYmUud2lkdGgsYmUuaGVpZ2h0KTtmb3IobGV0IFB0PTA7UHQ8NjtQdCsrKXtDZT1UdFtQdF0ubWlwbWFwcztmb3IobGV0IE50PTA7TnQ8Q2UubGVuZ3RoO050Kyspe2xldCB6ZT1DZVtOdF07JC5mb3JtYXQhPT1Rbz9DdCE9PW51bGw/YXQ/ci5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCwwLDAsemUud2lkdGgsemUuaGVpZ2h0LEN0LHplLmRhdGEpOnIuY29tcHJlc3NlZFRleEltYWdlMkQoMzQwNjkrUHQsTnQsZmUsemUud2lkdGgsemUuaGVpZ2h0LDAsemUuZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAuc2V0VGV4dHVyZUN1YmUoKSIpOmF0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCwwLDAsemUud2lkdGgsemUuaGVpZ2h0LEN0LFd0LHplLmRhdGEpOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCxmZSx6ZS53aWR0aCx6ZS5oZWlnaHQsMCxDdCxXdCx6ZS5kYXRhKX19fWVsc2V7Q2U9JC5taXBtYXBzLGF0JiZzZSYmKENlLmxlbmd0aD4wJiZRdCsrLHIudGV4U3RvcmFnZTJEKDM0MDY3LFF0LGZlLFR0WzBdLndpZHRoLFR0WzBdLmhlaWdodCkpO2ZvcihsZXQgUHQ9MDtQdDw2O1B0KyspaWYoaGUpe2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCwwLDAsMCxUdFtQdF0ud2lkdGgsVHRbUHRdLmhlaWdodCxDdCxXdCxUdFtQdF0uZGF0YSk6ci50ZXhJbWFnZTJEKDM0MDY5K1B0LDAsZmUsVHRbUHRdLndpZHRoLFR0W1B0XS5oZWlnaHQsMCxDdCxXdCxUdFtQdF0uZGF0YSk7Zm9yKGxldCBOdD0wO050PENlLmxlbmd0aDtOdCsrKXtsZXQgeW49Q2VbTnRdLmltYWdlW1B0XS5pbWFnZTthdD9yLnRleFN1YkltYWdlMkQoMzQwNjkrUHQsTnQrMSwwLDAseW4ud2lkdGgseW4uaGVpZ2h0LEN0LFd0LHluLmRhdGEpOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCsxLGZlLHluLndpZHRoLHluLmhlaWdodCwwLEN0LFd0LHluLmRhdGEpfX1lbHNle2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCwwLDAsMCxDdCxXdCxUdFtQdF0pOnIudGV4SW1hZ2UyRCgzNDA2OStQdCwwLGZlLEN0LFd0LFR0W1B0XSk7Zm9yKGxldCBOdD0wO050PENlLmxlbmd0aDtOdCsrKXtsZXQgemU9Q2VbTnRdO2F0P3IudGV4U3ViSW1hZ2UyRCgzNDA2OStQdCxOdCsxLDAsMCxDdCxXdCx6ZS5pbWFnZVtQdF0pOnIudGV4SW1hZ2UyRCgzNDA2OStQdCxOdCsxLGZlLEN0LFd0LHplLmltYWdlW1B0XSl9fX1DKCQsbnQpJiZQKDM0MDY3KSx0dC5fX3ZlcnNpb249JC52ZXJzaW9uLCQub25VcGRhdGUmJiQub25VcGRhdGUoJCl9ZnVuY3Rpb24gX3QodHQsJCxJdCwkdCxoZSl7bGV0IFR0PW8uY29udmVydChJdC5mb3JtYXQsSXQuZW5jb2RpbmcpLGJlPW8uY29udmVydChJdC50eXBlKSxudD1rKEl0LmludGVybmFsRm9ybWF0LFR0LGJlLEl0LmVuY29kaW5nKTtuLmdldCgkKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fChoZT09PTMyODc5fHxoZT09PTM1ODY2P3IudGV4SW1hZ2UzRChoZSwwLG50LCQud2lkdGgsJC5oZWlnaHQsJC5kZXB0aCwwLFR0LGJlLG51bGwpOnIudGV4SW1hZ2UyRChoZSwwLG50LCQud2lkdGgsJC5oZWlnaHQsMCxUdCxiZSxudWxsKSksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHQpLCQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwkdCxoZSxuLmdldChJdCkuX193ZWJnbFRleHR1cmUsMCx3dCgkKSk6ZS5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwkdCxoZSxuLmdldChJdCkuX193ZWJnbFRleHR1cmUsMCksci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gY3QodHQsJCxJdCl7aWYoZS5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLHR0KSwkLmRlcHRoQnVmZmVyJiYhJC5zdGVuY2lsQnVmZmVyKXtsZXQgJHQ9MzMxODk7aWYoSXR8fCQudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgaGU9JC5kZXB0aFRleHR1cmU7aGUmJmhlLmlzRGVwdGhUZXh0dXJlJiYoaGUudHlwZT09PWpkPyR0PTM2MDEyOmhlLnR5cGU9PT1IUCYmKCR0PTMzMTkwKSk7bGV0IFR0PXd0KCQpOyQudXNlUmVuZGVyVG9UZXh0dXJlP3AucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLFR0LCR0LCQud2lkdGgsJC5oZWlnaHQpOmUucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLFR0LCR0LCQud2lkdGgsJC5oZWlnaHQpfWVsc2UgZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLCR0LCQud2lkdGgsJC5oZWlnaHQpO2UuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwOTYsMzYxNjEsdHQpfWVsc2UgaWYoJC5kZXB0aEJ1ZmZlciYmJC5zdGVuY2lsQnVmZmVyKXtsZXQgJHQ9d3QoJCk7SXQmJiQudXNlUmVuZGVyYnVmZmVyP2UucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKDM2MTYxLCR0LDM1MDU2LCQud2lkdGgsJC5oZWlnaHQpOiQudXNlUmVuZGVyVG9UZXh0dXJlP3AucmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKDM2MTYxLCR0LDM1MDU2LCQud2lkdGgsJC5oZWlnaHQpOmUucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSwzNDA0MSwkLndpZHRoLCQuaGVpZ2h0KSxlLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLDMzMzA2LDM2MTYxLHR0KX1lbHNle2xldCAkdD0kLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMD8kLnRleHR1cmVbMF06JC50ZXh0dXJlLGhlPW8uY29udmVydCgkdC5mb3JtYXQsJHQuZW5jb2RpbmcpLFR0PW8uY29udmVydCgkdC50eXBlKSxiZT1rKCR0LmludGVybmFsRm9ybWF0LGhlLFR0LCR0LmVuY29kaW5nKSxudD13dCgkKTtJdCYmJC51c2VSZW5kZXJidWZmZXI/ZS5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsbnQsYmUsJC53aWR0aCwkLmhlaWdodCk6JC51c2VSZW5kZXJUb1RleHR1cmU/cC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsbnQsYmUsJC53aWR0aCwkLmhlaWdodCk6ZS5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLGJlLCQud2lkdGgsJC5oZWlnaHQpfWUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKX1mdW5jdGlvbiBYKHR0LCQpe2lmKCQmJiQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQpdGhyb3cgbmV3IEVycm9yKCJEZXB0aCBUZXh0dXJlIHdpdGggY3ViZSByZW5kZXIgdGFyZ2V0cyBpcyBub3Qgc3VwcG9ydGVkIik7aWYoci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsdHQpLCEoJC5kZXB0aFRleHR1cmUmJiQuZGVwdGhUZXh0dXJlLmlzRGVwdGhUZXh0dXJlKSl0aHJvdyBuZXcgRXJyb3IoInJlbmRlclRhcmdldC5kZXB0aFRleHR1cmUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBUSFJFRS5EZXB0aFRleHR1cmUiKTsoIW4uZ2V0KCQuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZXx8JC5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGghPT0kLndpZHRofHwkLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQhPT0kLmhlaWdodCkmJigkLmRlcHRoVGV4dHVyZS5pbWFnZS53aWR0aD0kLndpZHRoLCQuZGVwdGhUZXh0dXJlLmltYWdlLmhlaWdodD0kLmhlaWdodCwkLmRlcHRoVGV4dHVyZS5uZWVkc1VwZGF0ZT0hMCksVygkLmRlcHRoVGV4dHVyZSwwKTtsZXQgJHQ9bi5nZXQoJC5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlLGhlPXd0KCQpO2lmKCQuZGVwdGhUZXh0dXJlLmZvcm1hdD09PXowKSQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzNjA5NiwzNTUzLCR0LDAsaGUpOmUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MywkdCwwKTtlbHNlIGlmKCQuZGVwdGhUZXh0dXJlLmZvcm1hdD09PWt2KSQudXNlUmVuZGVyVG9UZXh0dXJlP3AuZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCwzMzMwNiwzNTUzLCR0LDAsaGUpOmUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MywkdCwwKTtlbHNlIHRocm93IG5ldyBFcnJvcigiVW5rbm93biBkZXB0aFRleHR1cmUgZm9ybWF0Iil9ZnVuY3Rpb24gZXQodHQpe2xldCAkPW4uZ2V0KHR0KSxJdD10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwO2lmKHR0LmRlcHRoVGV4dHVyZSYmISQuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcil7aWYoSXQpdGhyb3cgbmV3IEVycm9yKCJ0YXJnZXQuZGVwdGhUZXh0dXJlIG5vdCBzdXBwb3J0ZWQgaW4gQ3ViZSByZW5kZXIgdGFyZ2V0cyIpO1goJC5fX3dlYmdsRnJhbWVidWZmZXIsdHQpfWVsc2UgaWYoSXQpeyQuX193ZWJnbERlcHRoYnVmZmVyPVtdO2ZvcihsZXQgJHQ9MDskdDw2OyR0Kyspci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsJC5fX3dlYmdsRnJhbWVidWZmZXJbJHRdKSwkLl9fd2ViZ2xEZXB0aGJ1ZmZlclskdF09ZS5jcmVhdGVSZW5kZXJidWZmZXIoKSxjdCgkLl9fd2ViZ2xEZXB0aGJ1ZmZlclskdF0sdHQsITEpfWVsc2Ugci5iaW5kRnJhbWVidWZmZXIoMzYxNjAsJC5fX3dlYmdsRnJhbWVidWZmZXIpLCQuX193ZWJnbERlcHRoYnVmZmVyPWUuY3JlYXRlUmVuZGVyYnVmZmVyKCksY3QoJC5fX3dlYmdsRGVwdGhidWZmZXIsdHQsITEpO3IuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWZ1bmN0aW9uIGR0KHR0LCQsSXQpe2xldCAkdD1uLmdldCh0dCk7JCE9PXZvaWQgMCYmX3QoJHQuX193ZWJnbEZyYW1lYnVmZmVyLHR0LHR0LnRleHR1cmUsMzYwNjQsMzU1MyksSXQhPT12b2lkIDAmJmV0KHR0KX1mdW5jdGlvbiBxKHR0KXtsZXQgJD10dC50ZXh0dXJlLEl0PW4uZ2V0KHR0KSwkdD1uLmdldCgkKTt0dC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixJKSx0dC5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIT09ITAmJigkdC5fX3dlYmdsVGV4dHVyZT09PXZvaWQgMCYmKCR0Ll9fd2ViZ2xUZXh0dXJlPWUuY3JlYXRlVGV4dHVyZSgpKSwkdC5fX3ZlcnNpb249JC52ZXJzaW9uLGEubWVtb3J5LnRleHR1cmVzKyspO2xldCBoZT10dC5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD09PSEwLFR0PXR0LmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9PT0hMCxiZT0kLmlzRGF0YVRleHR1cmUzRHx8JC5pc0RhdGFUZXh0dXJlMkRBcnJheSxudD1iKHR0KXx8cztpZihoZSl7SXQuX193ZWJnbEZyYW1lYnVmZmVyPVtdO2ZvcihsZXQgQ3Q9MDtDdDw2O0N0KyspSXQuX193ZWJnbEZyYW1lYnVmZmVyW0N0XT1lLmNyZWF0ZUZyYW1lYnVmZmVyKCl9ZWxzZSBpZihJdC5fX3dlYmdsRnJhbWVidWZmZXI9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpLFR0KWlmKGkuZHJhd0J1ZmZlcnMpe2xldCBDdD10dC50ZXh0dXJlO2ZvcihsZXQgV3Q9MCxmZT1DdC5sZW5ndGg7V3Q8ZmU7V3QrKyl7bGV0IGF0PW4uZ2V0KEN0W1d0XSk7YXQuX193ZWJnbFRleHR1cmU9PT12b2lkIDAmJihhdC5fX3dlYmdsVGV4dHVyZT1lLmNyZWF0ZVRleHR1cmUoKSxhLm1lbW9yeS50ZXh0dXJlcysrKX19ZWxzZSBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFdlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIgb3IgV0VCR0xfZHJhd19idWZmZXJzIGV4dGVuc2lvbi4iKTtlbHNlIGlmKHR0LnVzZVJlbmRlcmJ1ZmZlcilpZihzKXtJdC5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI9ZS5jcmVhdGVGcmFtZWJ1ZmZlcigpLEl0Ll9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlcj1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpO2xldCBDdD1vLmNvbnZlcnQoJC5mb3JtYXQsJC5lbmNvZGluZyksV3Q9by5jb252ZXJ0KCQudHlwZSksZmU9aygkLmludGVybmFsRm9ybWF0LEN0LFd0LCQuZW5jb2RpbmcpLGF0PXd0KHR0KTtlLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSxhdCxmZSx0dC53aWR0aCx0dC5oZWlnaHQpLHIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLEl0Ll9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksZS5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA2NCwzNjE2MSxJdC5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXIpLGUuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxudWxsKSx0dC5kZXB0aEJ1ZmZlciYmKEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcj1lLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLGN0KEl0Ll9fd2ViZ2xEZXB0aFJlbmRlcmJ1ZmZlcix0dCwhMCkpLHIuYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIik7aWYoaGUpe3IuYmluZFRleHR1cmUoMzQwNjcsJHQuX193ZWJnbFRleHR1cmUpLGJ0KDM0MDY3LCQsbnQpO2ZvcihsZXQgQ3Q9MDtDdDw2O0N0KyspX3QoSXQuX193ZWJnbEZyYW1lYnVmZmVyW0N0XSx0dCwkLDM2MDY0LDM0MDY5K0N0KTtDKCQsbnQpJiZQKDM0MDY3KSxyLnVuYmluZFRleHR1cmUoKX1lbHNlIGlmKFR0KXtsZXQgQ3Q9dHQudGV4dHVyZTtmb3IobGV0IFd0PTAsZmU9Q3QubGVuZ3RoO1d0PGZlO1d0Kyspe2xldCBhdD1DdFtXdF0sc2U9bi5nZXQoYXQpO3IuYmluZFRleHR1cmUoMzU1MyxzZS5fX3dlYmdsVGV4dHVyZSksYnQoMzU1MyxhdCxudCksX3QoSXQuX193ZWJnbEZyYW1lYnVmZmVyLHR0LGF0LDM2MDY0K1d0LDM1NTMpLEMoYXQsbnQpJiZQKDM1NTMpfXIudW5iaW5kVGV4dHVyZSgpfWVsc2V7bGV0IEN0PTM1NTM7YmUmJihzP0N0PSQuaXNEYXRhVGV4dHVyZTNEPzMyODc5OjM1ODY2OmNvbnNvbGUud2FybigiVEhSRUUuRGF0YVRleHR1cmUzRCBhbmQgVEhSRUUuRGF0YVRleHR1cmUyREFycmF5IG9ubHkgc3VwcG9ydGVkIHdpdGggV2ViR0wyLiIpKSxyLmJpbmRUZXh0dXJlKEN0LCR0Ll9fd2ViZ2xUZXh0dXJlKSxidChDdCwkLG50KSxfdChJdC5fX3dlYmdsRnJhbWVidWZmZXIsdHQsJCwzNjA2NCxDdCksQygkLG50KSYmUChDdCksci51bmJpbmRUZXh0dXJlKCl9dHQuZGVwdGhCdWZmZXImJmV0KHR0KX1mdW5jdGlvbiBwdCh0dCl7bGV0ICQ9Yih0dCl8fHMsSXQ9dHQuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cz09PSEwP3R0LnRleHR1cmU6W3R0LnRleHR1cmVdO2ZvcihsZXQgJHQ9MCxoZT1JdC5sZW5ndGg7JHQ8aGU7JHQrKyl7bGV0IFR0PUl0WyR0XTtpZihDKFR0LCQpKXtsZXQgYmU9dHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQ/MzQwNjc6MzU1MyxudD1uLmdldChUdCkuX193ZWJnbFRleHR1cmU7ci5iaW5kVGV4dHVyZShiZSxudCksUChiZSksci51bmJpbmRUZXh0dXJlKCl9fX1mdW5jdGlvbiBodCh0dCl7aWYodHQudXNlUmVuZGVyYnVmZmVyKWlmKHMpe2xldCAkPXR0LndpZHRoLEl0PXR0LmhlaWdodCwkdD0xNjM4NCxoZT1bMzYwNjRdLFR0PXR0LnN0ZW5jaWxCdWZmZXI/MzMzMDY6MzYwOTY7dHQuZGVwdGhCdWZmZXImJmhlLnB1c2goVHQpLHR0Lmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5fHwodHQuZGVwdGhCdWZmZXImJigkdHw9MjU2KSx0dC5zdGVuY2lsQnVmZmVyJiYoJHR8PTEwMjQpKTtsZXQgYmU9bi5nZXQodHQpO3IuYmluZEZyYW1lYnVmZmVyKDM2MDA4LGJlLl9fd2ViZ2xNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlciksci5iaW5kRnJhbWVidWZmZXIoMzYwMDksYmUuX193ZWJnbEZyYW1lYnVmZmVyKSx0dC5pZ25vcmVEZXB0aEZvck11bHRpc2FtcGxlQ29weSYmKGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LFtUdF0pLGUuaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA5LFtUdF0pKSxlLmJsaXRGcmFtZWJ1ZmZlcigwLDAsJCxJdCwwLDAsJCxJdCwkdCw5NzI4KSxlLmludmFsaWRhdGVGcmFtZWJ1ZmZlcigzNjAwOCxoZSksci5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCksci5iaW5kRnJhbWVidWZmZXIoMzYwMDksYmUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpfWZ1bmN0aW9uIHd0KHR0KXtyZXR1cm4gcyYmKHR0LnVzZVJlbmRlcmJ1ZmZlcnx8dHQudXNlUmVuZGVyVG9UZXh0dXJlKT9NYXRoLm1pbihoLHR0LnNhbXBsZXMpOjB9ZnVuY3Rpb24ga3QodHQpe2xldCAkPWEucmVuZGVyLmZyYW1lO2QuZ2V0KHR0KSE9PSQmJihkLnNldCh0dCwkKSx0dC51cGRhdGUoKSl9ZnVuY3Rpb24gaWUodHQsJCl7bGV0IEl0PXR0LmVuY29kaW5nLCR0PXR0LmZvcm1hdCxoZT10dC50eXBlO3JldHVybiB0dC5pc0NvbXByZXNzZWRUZXh0dXJlPT09ITB8fHR0LmlzVmlkZW9UZXh0dXJlPT09ITB8fHR0LmZvcm1hdD09PWFVfHxJdCE9PVFkJiYoSXQ9PT1Zbj9zPT09ITE/dC5oYXMoIkVYVF9zUkdCIik9PT0hMCYmJHQ9PT1Rbz8odHQuZm9ybWF0PWFVLHR0Lm1pbkZpbHRlcj1vaSx0dC5nZW5lcmF0ZU1pcG1hcHM9ITEpOiQ9S2Yuc1JHQlRvTGluZWFyKCQpOigkdCE9PVFvfHxoZSE9PVpkKSYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBzUkdCIGVuY29kZWQgdGV4dHVyZXMgaGF2ZSB0byB1c2UgUkdCQUZvcm1hdCBhbmQgVW5zaWduZWRCeXRlVHlwZS4iKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBVbnN1cHBvcnRlZCB0ZXh0dXJlIGVuY29kaW5nOiIsSXQpKSwkfWxldCBlZT0hMSxMZT0hMTtmdW5jdGlvbiBhcih0dCwkKXt0dCYmdHQuaXNXZWJHTFJlbmRlclRhcmdldCYmKGVlPT09ITEmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxlZT0hMCksdHQ9dHQudGV4dHVyZSksVyh0dCwkKX1mdW5jdGlvbiBmcih0dCwkKXt0dCYmdHQuaXNXZWJHTEN1YmVSZW5kZXJUYXJnZXQmJihMZT09PSExJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzLnNhZmVTZXRUZXh0dXJlQ3ViZTogZG9uJ3QgdXNlIGN1YmUgcmVuZGVyIHRhcmdldHMgYXMgdGV4dHVyZXMuIFVzZSB0aGVpciAudGV4dHVyZSBwcm9wZXJ0eSBpbnN0ZWFkLiIpLExlPSEwKSx0dD10dC50ZXh0dXJlKSxvdCh0dCwkKX10aGlzLmFsbG9jYXRlVGV4dHVyZVVuaXQ9VSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPXosdGhpcy5zZXRUZXh0dXJlMkQ9Vyx0aGlzLnNldFRleHR1cmUyREFycmF5PVosdGhpcy5zZXRUZXh0dXJlM0Q9cnQsdGhpcy5zZXRUZXh0dXJlQ3ViZT1vdCx0aGlzLnJlYmluZFRleHR1cmVzPWR0LHRoaXMuc2V0dXBSZW5kZXJUYXJnZXQ9cSx0aGlzLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcD1wdCx0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PWh0LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj1ldCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPV90LHRoaXMuc2FmZVNldFRleHR1cmUyRD1hcix0aGlzLnNhZmVTZXRUZXh0dXJlQ3ViZT1mcn1mdW5jdGlvbiBYZmUoZSx0LHIpe2xldCBuPXIuaXNXZWJHTDI7ZnVuY3Rpb24gaShvLGE9bnVsbCl7bGV0IHM7aWYobz09PVpkKXJldHVybiA1MTIxO2lmKG89PT1wZmUpcmV0dXJuIDMyODE5O2lmKG89PT1kZmUpcmV0dXJuIDMyODIwO2lmKG89PT11ZmUpcmV0dXJuIDUxMjA7aWYobz09PWhmZSlyZXR1cm4gNTEyMjtpZihvPT09RzMpcmV0dXJuIDUxMjM7aWYobz09PWZmZSlyZXR1cm4gNTEyNDtpZihvPT09SFApcmV0dXJuIDUxMjU7aWYobz09PWpkKXJldHVybiA1MTI2O2lmKG89PT1DdilyZXR1cm4gbj81MTMxOihzPXQuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikscyE9PW51bGw/cy5IQUxGX0ZMT0FUX09FUzpudWxsKTtpZihvPT09bWZlKXJldHVybiA2NDA2O2lmKG89PT1RbylyZXR1cm4gNjQwODtpZihvPT09Z2ZlKXJldHVybiA2NDA5O2lmKG89PT1fZmUpcmV0dXJuIDY0MTA7aWYobz09PXowKXJldHVybiA2NDAyO2lmKG89PT1rdilyZXR1cm4gMzQwNDE7aWYobz09PXlmZSlyZXR1cm4gNjQwMztpZihvPT09YVUpcmV0dXJuIHM9dC5nZXQoIkVYVF9zUkdCIikscyE9PW51bGw/cy5TUkdCX0FMUEhBX0VYVDpudWxsO2lmKG89PT12ZmUpcmV0dXJuIDM2MjQ0O2lmKG89PT14ZmUpcmV0dXJuIDMzMzE5O2lmKG89PT1iZmUpcmV0dXJuIDMzMzIwO2lmKG89PT13ZmUpcmV0dXJuIDM2MjQ5O2lmKG89PT1aVnx8bz09PUpWfHxvPT09UVZ8fG89PT10VSlpZihhPT09WW4paWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGNfc3JnYiIpLHMhPT1udWxsKXtpZihvPT09WlYpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYobz09PUpWKXJldHVybiBzLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKG89PT1RVilyZXR1cm4gcy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZihvPT09dFUpcmV0dXJuIHMuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtlbHNlIGlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikscyE9PW51bGwpe2lmKG89PT1aVilyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKG89PT1KVilyZXR1cm4gcy5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZihvPT09UVYpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYobz09PXRVKXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWVsc2UgcmV0dXJuIG51bGw7aWYobz09PUl1dHx8bz09PUx1dHx8bz09PWt1dHx8bz09PVJ1dClpZihzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSxzIT09bnVsbCl7aWYobz09PUl1dClyZXR1cm4gcy5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1MdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRztpZihvPT09a3V0KXJldHVybiBzLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKG89PT1SdXQpcmV0dXJuIHMuQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUd9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09U2ZlKXJldHVybiBzPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSIpLHMhPT1udWxsP3MuQ09NUFJFU1NFRF9SR0JfRVRDMV9XRUJHTDpudWxsO2lmKG89PT1OdXR8fG89PT1EdXQpaWYocz10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2V0YyIpLHMhPT1udWxsKXtpZihvPT09TnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0VUQzI6cy5DT01QUkVTU0VEX1JHQjhfRVRDMjtpZihvPT09RHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQzpzLkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUN9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09T3V0fHxvPT09enV0fHxvPT09RnV0fHxvPT09QnV0fHxvPT09SHV0fHxvPT09VnV0fHxvPT09VXV0fHxvPT09cXV0fHxvPT09R3V0fHxvPT09V3V0fHxvPT09WXV0fHxvPT09anV0fHxvPT09WHV0fHxvPT09JHV0KWlmKHM9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hc3RjIikscyE9PW51bGwpe2lmKG89PT1PdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9LSFI7aWYobz09PXp1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUjtpZihvPT09RnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO2lmKG89PT1CdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFI7aWYobz09PUh1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUjtpZihvPT09VnV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO2lmKG89PT1VdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFI7aWYobz09PXF1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUjtpZihvPT09R3V0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOnMuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7aWYobz09PVd1dClyZXR1cm4gYT09PVluP3MuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSO2lmKG89PT1ZdXQpcmV0dXJuIGE9PT1Zbj9zLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFI6cy5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4X0tIUjtpZihvPT09anV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtpZihvPT09WHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwX0tIUjtpZihvPT09JHV0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEyX0tIUjpzLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUn1lbHNlIHJldHVybiBudWxsO2lmKG89PT1LdXQpaWYocz10LmdldCgiRVhUX3RleHR1cmVfY29tcHJlc3Npb25fYnB0YyIpLHMhPT1udWxsKXtpZihvPT09S3V0KXJldHVybiBhPT09WW4/cy5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6cy5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9ZWxzZSByZXR1cm4gbnVsbDtpZihvPT09QXYpcmV0dXJuIG4/MzQwNDI6KHM9dC5nZXQoIldFQkdMX2RlcHRoX3RleHR1cmUiKSxzIT09bnVsbD9zLlVOU0lHTkVEX0lOVF8yNF84X1dFQkdMOm51bGwpfXJldHVybntjb252ZXJ0Oml9fXZhciByNj1jbGFzcyBleHRlbmRzIFVpe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5jYW1lcmFzPXR9fTtyNi5wcm90b3R5cGUuaXNBcnJheUNhbWVyYT0hMDt2YXIgWGQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJHcm91cCJ9fTtYZC5wcm90b3R5cGUuaXNHcm91cD0hMDt2YXIgQ2dyPXt0eXBlOiJtb3ZlIn0sVVA9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl90YXJnZXRSYXk9bnVsbCx0aGlzLl9ncmlwPW51bGwsdGhpcy5faGFuZD1udWxsfWdldEhhbmRTcGFjZSgpe3JldHVybiB0aGlzLl9oYW5kPT09bnVsbCYmKHRoaXMuX2hhbmQ9bmV3IFhkLHRoaXMuX2hhbmQubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9oYW5kLnZpc2libGU9ITEsdGhpcy5faGFuZC5qb2ludHM9e30sdGhpcy5faGFuZC5pbnB1dFN0YXRlPXtwaW5jaGluZzohMX0pLHRoaXMuX2hhbmR9Z2V0VGFyZ2V0UmF5U3BhY2UoKXtyZXR1cm4gdGhpcy5fdGFyZ2V0UmF5PT09bnVsbCYmKHRoaXMuX3RhcmdldFJheT1uZXcgWGQsdGhpcy5fdGFyZ2V0UmF5Lm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEsdGhpcy5fdGFyZ2V0UmF5Lmhhc0xpbmVhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5saW5lYXJWZWxvY2l0eT1uZXcgaix0aGlzLl90YXJnZXRSYXkuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuX3RhcmdldFJheS5hbmd1bGFyVmVsb2NpdHk9bmV3IGopLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gdGhpcy5fZ3JpcD09PW51bGwmJih0aGlzLl9ncmlwPW5ldyBYZCx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgaix0aGlzLl9ncmlwLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSx0aGlzLl9ncmlwLmFuZ3VsYXJWZWxvY2l0eT1uZXcgaiksdGhpcy5fZ3JpcH1kaXNwYXRjaEV2ZW50KHQpe3JldHVybiB0aGlzLl90YXJnZXRSYXkhPT1udWxsJiZ0aGlzLl90YXJnZXRSYXkuZGlzcGF0Y2hFdmVudCh0KSx0aGlzLl9ncmlwIT09bnVsbCYmdGhpcy5fZ3JpcC5kaXNwYXRjaEV2ZW50KHQpLHRoaXMuX2hhbmQhPT1udWxsJiZ0aGlzLl9oYW5kLmRpc3BhdGNoRXZlbnQodCksdGhpc31kaXNjb25uZWN0KHQpe3JldHVybiB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTp0fSksdGhpcy5fdGFyZ2V0UmF5IT09bnVsbCYmKHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExKSx0aGlzLl9ncmlwIT09bnVsbCYmKHRoaXMuX2dyaXAudmlzaWJsZT0hMSksdGhpcy5faGFuZCE9PW51bGwmJih0aGlzLl9oYW5kLnZpc2libGU9ITEpLHRoaXN9dXBkYXRlKHQscixuKXtsZXQgaT1udWxsLG89bnVsbCxhPW51bGwscz10aGlzLl90YXJnZXRSYXksbD10aGlzLl9ncmlwLGM9dGhpcy5faGFuZDtpZih0JiZyLnNlc3Npb24udmlzaWJpbGl0eVN0YXRlIT09InZpc2libGUtYmx1cnJlZCIpaWYocyE9PW51bGwmJihpPXIuZ2V0UG9zZSh0LnRhcmdldFJheVNwYWNlLG4pLGkhPT1udWxsJiYocy5tYXRyaXguZnJvbUFycmF5KGkudHJhbnNmb3JtLm1hdHJpeCkscy5tYXRyaXguZGVjb21wb3NlKHMucG9zaXRpb24scy5yb3RhdGlvbixzLnNjYWxlKSxpLmxpbmVhclZlbG9jaXR5PyhzLmhhc0xpbmVhclZlbG9jaXR5PSEwLHMubGluZWFyVmVsb2NpdHkuY29weShpLmxpbmVhclZlbG9jaXR5KSk6cy5oYXNMaW5lYXJWZWxvY2l0eT0hMSxpLmFuZ3VsYXJWZWxvY2l0eT8ocy5oYXNBbmd1bGFyVmVsb2NpdHk9ITAscy5hbmd1bGFyVmVsb2NpdHkuY29weShpLmFuZ3VsYXJWZWxvY2l0eSkpOnMuaGFzQW5ndWxhclZlbG9jaXR5PSExLHRoaXMuZGlzcGF0Y2hFdmVudChDZ3IpKSksYyYmdC5oYW5kKXthPSEwO2ZvcihsZXQgZyBvZiB0LmhhbmQudmFsdWVzKCkpe2xldCBfPXIuZ2V0Sm9pbnRQb3NlKGcsbik7aWYoYy5qb2ludHNbZy5qb2ludE5hbWVdPT09dm9pZCAwKXtsZXQgeD1uZXcgWGQ7eC5tYXRyaXhBdXRvVXBkYXRlPSExLHgudmlzaWJsZT0hMSxjLmpvaW50c1tnLmpvaW50TmFtZV09eCxjLmFkZCh4KX1sZXQgeT1jLmpvaW50c1tnLmpvaW50TmFtZV07XyE9PW51bGwmJih5Lm1hdHJpeC5mcm9tQXJyYXkoXy50cmFuc2Zvcm0ubWF0cml4KSx5Lm1hdHJpeC5kZWNvbXBvc2UoeS5wb3NpdGlvbix5LnJvdGF0aW9uLHkuc2NhbGUpLHkuam9pbnRSYWRpdXM9Xy5yYWRpdXMpLHkudmlzaWJsZT1fIT09bnVsbH1sZXQgdT1jLmpvaW50c1siaW5kZXgtZmluZ2VyLXRpcCJdLGg9Yy5qb2ludHNbInRodW1iLXRpcCJdLGY9dS5wb3NpdGlvbi5kaXN0YW5jZVRvKGgucG9zaXRpb24pLHA9LjAyLGQ9LjAwNTtjLmlucHV0U3RhdGUucGluY2hpbmcmJmY+cCtkPyhjLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWMuaW5wdXRTdGF0ZS5waW5jaGluZyYmZjw9cC1kJiYoYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBsIT09bnVsbCYmdC5ncmlwU3BhY2UmJihvPXIuZ2V0UG9zZSh0LmdyaXBTcGFjZSxuKSxvIT09bnVsbCYmKGwubWF0cml4LmZyb21BcnJheShvLnRyYW5zZm9ybS5tYXRyaXgpLGwubWF0cml4LmRlY29tcG9zZShsLnBvc2l0aW9uLGwucm90YXRpb24sbC5zY2FsZSksby5saW5lYXJWZWxvY2l0eT8obC5oYXNMaW5lYXJWZWxvY2l0eT0hMCxsLmxpbmVhclZlbG9jaXR5LmNvcHkoby5saW5lYXJWZWxvY2l0eSkpOmwuaGFzTGluZWFyVmVsb2NpdHk9ITEsby5hbmd1bGFyVmVsb2NpdHk/KGwuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGwuYW5ndWxhclZlbG9jaXR5LmNvcHkoby5hbmd1bGFyVmVsb2NpdHkpKTpsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBzIT09bnVsbCYmKHMudmlzaWJsZT1pIT09bnVsbCksbCE9PW51bGwmJihsLnZpc2libGU9byE9PW51bGwpLGMhPT1udWxsJiYoYy52aXNpYmxlPWEhPT1udWxsKSx0aGlzfX0sbk09Y2xhc3MgZXh0ZW5kcyB4aXtjb25zdHJ1Y3Rvcih0LHIsbixpLG8sYSxzLGwsYyx1KXtpZih1PXUhPT12b2lkIDA/dTp6MCx1IT09ejAmJnUhPT1rdil0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7bj09PXZvaWQgMCYmdT09PXowJiYobj1HMyksbj09PXZvaWQgMCYmdT09PWt2JiYobj1Bdiksc3VwZXIobnVsbCxpLG8sYSxzLGwsdSxuLGMpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OnJ9LHRoaXMubWFnRmlsdGVyPXMhPT12b2lkIDA/czpMaSx0aGlzLm1pbkZpbHRlcj1sIT09dm9pZCAwP2w6TGksdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19O25NLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDt2YXIgcmh0PWNsYXNzIGV4dGVuZHMgVXN7Y29uc3RydWN0b3IodCxyKXtzdXBlcigpO2xldCBuPXRoaXMsaT1udWxsLG89MSxhPW51bGwscz0ibG9jYWwtZmxvb3IiLGw9dC5leHRlbnNpb25zLmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIiksYz1udWxsLHU9bnVsbCxoPW51bGwsZj1udWxsLHA9ITEsZD1udWxsLGc9ci5nZXRDb250ZXh0QXR0cmlidXRlcygpLF89bnVsbCx5PW51bGwseD1bXSxiPW5ldyBNYXAsUz1uZXcgVWk7Uy5sYXllcnMuZW5hYmxlKDEpLFMudmlld3BvcnQ9bmV3IGVuO2xldCBDPW5ldyBVaTtDLmxheWVycy5lbmFibGUoMiksQy52aWV3cG9ydD1uZXcgZW47bGV0IFA9W1MsQ10saz1uZXcgcjY7ay5sYXllcnMuZW5hYmxlKDEpLGsubGF5ZXJzLmVuYWJsZSgyKTtsZXQgTz1udWxsLEQ9bnVsbDt0aGlzLmNhbWVyYUF1dG9VcGRhdGU9ITAsdGhpcy5lbmFibGVkPSExLHRoaXMuaXNQcmVzZW50aW5nPSExLHRoaXMuZ2V0Q29udHJvbGxlcj1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBVUCx4W290XT1zdCksc3QuZ2V0VGFyZ2V0UmF5U3BhY2UoKX0sdGhpcy5nZXRDb250cm9sbGVyR3JpcD1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBVUCx4W290XT1zdCksc3QuZ2V0R3JpcFNwYWNlKCl9LHRoaXMuZ2V0SGFuZD1mdW5jdGlvbihvdCl7bGV0IHN0PXhbb3RdO3JldHVybiBzdD09PXZvaWQgMCYmKHN0PW5ldyBVUCx4W290XT1zdCksc3QuZ2V0SGFuZFNwYWNlKCl9O2Z1bmN0aW9uIEIob3Qpe2xldCBzdD1iLmdldChvdC5pbnB1dFNvdXJjZSk7c3QmJnN0LmRpc3BhdGNoRXZlbnQoe3R5cGU6b3QudHlwZSxkYXRhOm90LmlucHV0U291cmNlfSl9ZnVuY3Rpb24gSSgpe2IuZm9yRWFjaChmdW5jdGlvbihvdCxzdCl7b3QuZGlzY29ubmVjdChzdCl9KSxiLmNsZWFyKCksTz1udWxsLEQ9bnVsbCx0LnNldFJlbmRlclRhcmdldChfKSxmPW51bGwsaD1udWxsLHU9bnVsbCxpPW51bGwseT1udWxsLHJ0LnN0b3AoKSxuLmlzUHJlc2VudGluZz0hMSxuLmRpc3BhdGNoRXZlbnQoe3R5cGU6InNlc3Npb25lbmQifSl9dGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKG90KXtvPW90LG4uaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKG90KXtzPW90LG4uaXNQcmVzZW50aW5nPT09ITAmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaCE9PW51bGw/aDpmfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBkfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gaX0sdGhpcy5zZXRTZXNzaW9uPWZ1bmN0aW9uKG90KXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKGk9b3QsaSE9PW51bGwpe2lmKF89dC5nZXRSZW5kZXJUYXJnZXQoKSxpLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLEIpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZSIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJzcXVlZXplc3RhcnQiLEIpLGkuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsQiksaS5hZGRFdmVudExpc3RlbmVyKCJlbmQiLEkpLGkuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXRzb3VyY2VzY2hhbmdlIixMKSxnLnhyQ29tcGF0aWJsZSE9PSEwJiYoeWllbGQgci5tYWtlWFJDb21wYXRpYmxlKCkpLGkucmVuZGVyU3RhdGUubGF5ZXJzPT09dm9pZCAwfHx0LmNhcGFiaWxpdGllcy5pc1dlYkdMMj09PSExKXtsZXQgc3Q9e2FudGlhbGlhczppLnJlbmRlclN0YXRlLmxheWVycz09PXZvaWQgMD9nLmFudGlhbGlhczohMCxhbHBoYTpnLmFscGhhLGRlcHRoOmcuZGVwdGgsc3RlbmNpbDpnLnN0ZW5jaWwsZnJhbWVidWZmZXJTY2FsZUZhY3RvcjpvfTtmPW5ldyBYUldlYkdMTGF5ZXIoaSxyLHN0KSxpLnVwZGF0ZVJlbmRlclN0YXRlKHtiYXNlTGF5ZXI6Zn0pLHk9bmV3IHVzKGYuZnJhbWVidWZmZXJXaWR0aCxmLmZyYW1lYnVmZmVySGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpaZCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9ZWxzZXtwPWcuYW50aWFsaWFzO2xldCBzdD1udWxsLFN0PW51bGwsYnQ9bnVsbDtnLmRlcHRoJiYoYnQ9Zy5zdGVuY2lsPzM1MDU2OjMzMTkwLHN0PWcuc3RlbmNpbD9rdjp6MCxTdD1nLnN0ZW5jaWw/QXY6RzMpO2xldCBNdD17Y29sb3JGb3JtYXQ6dC5vdXRwdXRFbmNvZGluZz09PVluPzM1OTA3OjMyODU2LGRlcHRoRm9ybWF0OmJ0LHNjYWxlRmFjdG9yOm99O3U9bmV3IFhSV2ViR0xCaW5kaW5nKGksciksaD11LmNyZWF0ZVByb2plY3Rpb25MYXllcihNdCksaS51cGRhdGVSZW5kZXJTdGF0ZSh7bGF5ZXJzOltoXX0pLHA/eT1uZXcgajMoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpaZCxkZXB0aFRleHR1cmU6bmV3IG5NKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxTdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzdCksc3RlbmNpbEJ1ZmZlcjpnLnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyx1c2VSZW5kZXJUb1RleHR1cmU6bCxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSk6eT1uZXcgdXMoaC50ZXh0dXJlV2lkdGgsaC50ZXh0dXJlSGVpZ2h0LHtmb3JtYXQ6UW8sdHlwZTpaZCxkZXB0aFRleHR1cmU6bmV3IG5NKGgudGV4dHVyZVdpZHRoLGgudGV4dHVyZUhlaWdodCxTdCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCxzdCksc3RlbmNpbEJ1ZmZlcjpnLnN0ZW5jaWwsaWdub3JlRGVwdGg6aC5pZ25vcmVEZXB0aFZhbHVlcyxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSl9eS5pc1hSUmVuZGVyVGFyZ2V0PSEwLHRoaXMuc2V0Rm92ZWF0aW9uKDEpLGE9eWllbGQgaS5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UocykscnQuc2V0Q29udGV4dChpKSxydC5zdGFydCgpLG4uaXNQcmVzZW50aW5nPSEwLG4uZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbnN0YXJ0In0pfX0pfTtmdW5jdGlvbiBMKG90KXtsZXQgc3Q9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCBTdD0wO1N0PHgubGVuZ3RoO1N0KyspYi5zZXQoc3RbU3RdLHhbU3RdKTtmb3IobGV0IFN0PTA7U3Q8b3QucmVtb3ZlZC5sZW5ndGg7U3QrKyl7bGV0IGJ0PW90LnJlbW92ZWRbU3RdLE10PWIuZ2V0KGJ0KTtNdCYmKE10LmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpidH0pLGIuZGVsZXRlKGJ0KSl9Zm9yKGxldCBTdD0wO1N0PG90LmFkZGVkLmxlbmd0aDtTdCsrKXtsZXQgYnQ9b3QuYWRkZWRbU3RdLE10PWIuZ2V0KGJ0KTtNdCYmTXQuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOmJ0fSl9fWxldCBSPW5ldyBqLEY9bmV3IGo7ZnVuY3Rpb24geihvdCxzdCxTdCl7Ui5zZXRGcm9tTWF0cml4UG9zaXRpb24oc3QubWF0cml4V29ybGQpLEYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFN0Lm1hdHJpeFdvcmxkKTtsZXQgYnQ9Ui5kaXN0YW5jZVRvKEYpLE10PXN0LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsbHQ9U3QucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50cyxLdD1NdFsxNF0vKE10WzEwXS0xKSxfdD1NdFsxNF0vKE10WzEwXSsxKSxjdD0oTXRbOV0rMSkvTXRbNV0sWD0oTXRbOV0tMSkvTXRbNV0sZXQ9KE10WzhdLTEpL010WzBdLGR0PShsdFs4XSsxKS9sdFswXSxxPUt0KmV0LHB0PUt0KmR0LGh0PWJ0LygtZXQrZHQpLHd0PWh0Ki1ldDtzdC5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uob3QucG9zaXRpb24sb3QucXVhdGVybmlvbixvdC5zY2FsZSksb3QudHJhbnNsYXRlWCh3dCksb3QudHJhbnNsYXRlWihodCksb3QubWF0cml4V29ybGQuY29tcG9zZShvdC5wb3NpdGlvbixvdC5xdWF0ZXJuaW9uLG90LnNjYWxlKSxvdC5tYXRyaXhXb3JsZEludmVyc2UuY29weShvdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGt0PUt0K2h0LGllPV90K2h0LGVlPXEtd3QsTGU9cHQrKGJ0LXd0KSxhcj1jdCpfdC9pZSprdCxmcj1YKl90L2llKmt0O290LnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGVlLExlLGFyLGZyLGt0LGllKX1mdW5jdGlvbiBVKG90LHN0KXtzdD09PW51bGw/b3QubWF0cml4V29ybGQuY29weShvdC5tYXRyaXgpOm90Lm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXMoc3QubWF0cml4V29ybGQsb3QubWF0cml4KSxvdC5tYXRyaXhXb3JsZEludmVyc2UuY29weShvdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCl9dGhpcy51cGRhdGVDYW1lcmE9ZnVuY3Rpb24ob3Qpe2lmKGk9PT1udWxsKXJldHVybjtrLm5lYXI9Qy5uZWFyPVMubmVhcj1vdC5uZWFyLGsuZmFyPUMuZmFyPVMuZmFyPW90LmZhciwoTyE9PWsubmVhcnx8RCE9PWsuZmFyKSYmKGkudXBkYXRlUmVuZGVyU3RhdGUoe2RlcHRoTmVhcjprLm5lYXIsZGVwdGhGYXI6ay5mYXJ9KSxPPWsubmVhcixEPWsuZmFyKTtsZXQgc3Q9b3QucGFyZW50LFN0PWsuY2FtZXJhcztVKGssc3QpO2ZvcihsZXQgTXQ9MDtNdDxTdC5sZW5ndGg7TXQrKylVKFN0W010XSxzdCk7ay5tYXRyaXhXb3JsZC5kZWNvbXBvc2Uoay5wb3NpdGlvbixrLnF1YXRlcm5pb24say5zY2FsZSksb3QucG9zaXRpb24uY29weShrLnBvc2l0aW9uKSxvdC5xdWF0ZXJuaW9uLmNvcHkoay5xdWF0ZXJuaW9uKSxvdC5zY2FsZS5jb3B5KGsuc2NhbGUpLG90Lm1hdHJpeC5jb3B5KGsubWF0cml4KSxvdC5tYXRyaXhXb3JsZC5jb3B5KGsubWF0cml4V29ybGQpO2xldCBidD1vdC5jaGlsZHJlbjtmb3IobGV0IE10PTAsbHQ9YnQubGVuZ3RoO010PGx0O010KyspYnRbTXRdLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKTtTdC5sZW5ndGg9PT0yP3ooayxTLEMpOmsucHJvamVjdGlvbk1hdHJpeC5jb3B5KFMucHJvamVjdGlvbk1hdHJpeCl9LHRoaXMuZ2V0Q2FtZXJhPWZ1bmN0aW9uKCl7cmV0dXJuIGt9LHRoaXMuZ2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKCl7aWYoaCE9PW51bGwpcmV0dXJuIGguZml4ZWRGb3ZlYXRpb247aWYoZiE9PW51bGwpcmV0dXJuIGYuZml4ZWRGb3ZlYXRpb259LHRoaXMuc2V0Rm92ZWF0aW9uPWZ1bmN0aW9uKG90KXtoIT09bnVsbCYmKGguZml4ZWRGb3ZlYXRpb249b3QpLGYhPT1udWxsJiZmLmZpeGVkRm92ZWF0aW9uIT09dm9pZCAwJiYoZi5maXhlZEZvdmVhdGlvbj1vdCl9O2xldCBXPW51bGw7ZnVuY3Rpb24gWihvdCxzdCl7aWYoYz1zdC5nZXRWaWV3ZXJQb3NlKGEpLGQ9c3QsYyE9PW51bGwpe2xldCBidD1jLnZpZXdzO2YhPT1udWxsJiYodC5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcih5LGYuZnJhbWVidWZmZXIpLHQuc2V0UmVuZGVyVGFyZ2V0KHkpKTtsZXQgTXQ9ITE7YnQubGVuZ3RoIT09ay5jYW1lcmFzLmxlbmd0aCYmKGsuY2FtZXJhcy5sZW5ndGg9MCxNdD0hMCk7Zm9yKGxldCBsdD0wO2x0PGJ0Lmxlbmd0aDtsdCsrKXtsZXQgS3Q9YnRbbHRdLF90PW51bGw7aWYoZiE9PW51bGwpX3Q9Zi5nZXRWaWV3cG9ydChLdCk7ZWxzZXtsZXQgWD11LmdldFZpZXdTdWJJbWFnZShoLEt0KTtfdD1YLnZpZXdwb3J0LGx0PT09MCYmKHQuc2V0UmVuZGVyVGFyZ2V0VGV4dHVyZXMoeSxYLmNvbG9yVGV4dHVyZSxoLmlnbm9yZURlcHRoVmFsdWVzP3ZvaWQgMDpYLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KHkpKX1sZXQgY3Q9UFtsdF07Y3QubWF0cml4LmZyb21BcnJheShLdC50cmFuc2Zvcm0ubWF0cml4KSxjdC5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheShLdC5wcm9qZWN0aW9uTWF0cml4KSxjdC52aWV3cG9ydC5zZXQoX3QueCxfdC55LF90LndpZHRoLF90LmhlaWdodCksbHQ9PT0wJiZrLm1hdHJpeC5jb3B5KGN0Lm1hdHJpeCksTXQ9PT0hMCYmay5jYW1lcmFzLnB1c2goY3QpfX1sZXQgU3Q9aS5pbnB1dFNvdXJjZXM7Zm9yKGxldCBidD0wO2J0PHgubGVuZ3RoO2J0Kyspe2xldCBNdD14W2J0XSxsdD1TdFtidF07TXQudXBkYXRlKGx0LHN0LGEpfVcmJlcob3Qsc3QpLGQ9bnVsbH1sZXQgcnQ9bmV3IHpmZTtydC5zZXRBbmltYXRpb25Mb29wKFopLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihvdCl7Vz1vdH0sdGhpcy5kaXNwb3NlPWZ1bmN0aW9uKCl7fX19O2Z1bmN0aW9uIEFncihlKXtmdW5jdGlvbiB0KHkseCl7eS5mb2dDb2xvci52YWx1ZS5jb3B5KHguY29sb3IpLHguaXNGb2c/KHkuZm9nTmVhci52YWx1ZT14Lm5lYXIseS5mb2dGYXIudmFsdWU9eC5mYXIpOnguaXNGb2dFeHAyJiYoeS5mb2dEZW5zaXR5LnZhbHVlPXguZGVuc2l0eSl9ZnVuY3Rpb24gcih5LHgsYixTLEMpe3guaXNNZXNoQmFzaWNNYXRlcmlhbD9uKHkseCk6eC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KG4oeSx4KSxsKHkseCkpOnguaXNNZXNoVG9vbk1hdGVyaWFsPyhuKHkseCksdSh5LHgpKTp4LmlzTWVzaFBob25nTWF0ZXJpYWw/KG4oeSx4KSxjKHkseCkpOnguaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD8obih5LHgpLHguaXNNZXNoUGh5c2ljYWxNYXRlcmlhbD9mKHkseCxDKTpoKHkseCkpOnguaXNNZXNoTWF0Y2FwTWF0ZXJpYWw/KG4oeSx4KSxwKHkseCkpOnguaXNNZXNoRGVwdGhNYXRlcmlhbD8obih5LHgpLGQoeSx4KSk6eC5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhuKHkseCksZyh5LHgpKTp4LmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhuKHkseCksXyh5LHgpKTp4LmlzTGluZUJhc2ljTWF0ZXJpYWw/KGkoeSx4KSx4LmlzTGluZURhc2hlZE1hdGVyaWFsJiZvKHkseCkpOnguaXNQb2ludHNNYXRlcmlhbD9hKHkseCxiLFMpOnguaXNTcHJpdGVNYXRlcmlhbD9zKHkseCk6eC5pc1NoYWRvd01hdGVyaWFsPyh5LmNvbG9yLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSk6eC5pc1NoYWRlck1hdGVyaWFsJiYoeC51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfWZ1bmN0aW9uIG4oeSx4KXt5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5LHguY29sb3ImJnkuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHguZW1pc3NpdmUmJnkuZW1pc3NpdmUudmFsdWUuY29weSh4LmVtaXNzaXZlKS5tdWx0aXBseVNjYWxhcih4LmVtaXNzaXZlSW50ZW5zaXR5KSx4Lm1hcCYmKHkubWFwLnZhbHVlPXgubWFwKSx4LmFscGhhTWFwJiYoeS5hbHBoYU1hcC52YWx1ZT14LmFscGhhTWFwKSx4LnNwZWN1bGFyTWFwJiYoeS5zcGVjdWxhck1hcC52YWx1ZT14LnNwZWN1bGFyTWFwKSx4LmFscGhhVGVzdD4wJiYoeS5hbHBoYVRlc3QudmFsdWU9eC5hbHBoYVRlc3QpO2xldCBiPWUuZ2V0KHgpLmVudk1hcDtiJiYoeS5lbnZNYXAudmFsdWU9Yix5LmZsaXBFbnZNYXAudmFsdWU9Yi5pc0N1YmVUZXh0dXJlJiZiLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT09PSExPy0xOjEseS5yZWZsZWN0aXZpdHkudmFsdWU9eC5yZWZsZWN0aXZpdHkseS5pb3IudmFsdWU9eC5pb3IseS5yZWZyYWN0aW9uUmF0aW8udmFsdWU9eC5yZWZyYWN0aW9uUmF0aW8pLHgubGlnaHRNYXAmJih5LmxpZ2h0TWFwLnZhbHVlPXgubGlnaHRNYXAseS5saWdodE1hcEludGVuc2l0eS52YWx1ZT14LmxpZ2h0TWFwSW50ZW5zaXR5KSx4LmFvTWFwJiYoeS5hb01hcC52YWx1ZT14LmFvTWFwLHkuYW9NYXBJbnRlbnNpdHkudmFsdWU9eC5hb01hcEludGVuc2l0eSk7bGV0IFM7eC5tYXA/Uz14Lm1hcDp4LnNwZWN1bGFyTWFwP1M9eC5zcGVjdWxhck1hcDp4LmRpc3BsYWNlbWVudE1hcD9TPXguZGlzcGxhY2VtZW50TWFwOngubm9ybWFsTWFwP1M9eC5ub3JtYWxNYXA6eC5idW1wTWFwP1M9eC5idW1wTWFwOngucm91Z2huZXNzTWFwP1M9eC5yb3VnaG5lc3NNYXA6eC5tZXRhbG5lc3NNYXA/Uz14Lm1ldGFsbmVzc01hcDp4LmFscGhhTWFwP1M9eC5hbHBoYU1hcDp4LmVtaXNzaXZlTWFwP1M9eC5lbWlzc2l2ZU1hcDp4LmNsZWFyY29hdE1hcD9TPXguY2xlYXJjb2F0TWFwOnguY2xlYXJjb2F0Tm9ybWFsTWFwP1M9eC5jbGVhcmNvYXROb3JtYWxNYXA6eC5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/Uz14LmNsZWFyY29hdFJvdWdobmVzc01hcDp4LnNwZWN1bGFySW50ZW5zaXR5TWFwP1M9eC5zcGVjdWxhckludGVuc2l0eU1hcDp4LnNwZWN1bGFyQ29sb3JNYXA/Uz14LnNwZWN1bGFyQ29sb3JNYXA6eC50cmFuc21pc3Npb25NYXA/Uz14LnRyYW5zbWlzc2lvbk1hcDp4LnRoaWNrbmVzc01hcD9TPXgudGhpY2tuZXNzTWFwOnguc2hlZW5Db2xvck1hcD9TPXguc2hlZW5Db2xvck1hcDp4LnNoZWVuUm91Z2huZXNzTWFwJiYoUz14LnNoZWVuUm91Z2huZXNzTWFwKSxTIT09dm9pZCAwJiYoUy5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoUz1TLnRleHR1cmUpLFMubWF0cml4QXV0b1VwZGF0ZT09PSEwJiZTLnVwZGF0ZU1hdHJpeCgpLHkudXZUcmFuc2Zvcm0udmFsdWUuY29weShTLm1hdHJpeCkpO2xldCBDO3guYW9NYXA/Qz14LmFvTWFwOngubGlnaHRNYXAmJihDPXgubGlnaHRNYXApLEMhPT12b2lkIDAmJihDLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihDPUMudGV4dHVyZSksQy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJkMudXBkYXRlTWF0cml4KCkseS51djJUcmFuc2Zvcm0udmFsdWUuY29weShDLm1hdHJpeCkpfWZ1bmN0aW9uIGkoeSx4KXt5LmRpZmZ1c2UudmFsdWUuY29weSh4LmNvbG9yKSx5Lm9wYWNpdHkudmFsdWU9eC5vcGFjaXR5fWZ1bmN0aW9uIG8oeSx4KXt5LmRhc2hTaXplLnZhbHVlPXguZGFzaFNpemUseS50b3RhbFNpemUudmFsdWU9eC5kYXNoU2l6ZSt4LmdhcFNpemUseS5zY2FsZS52YWx1ZT14LnNjYWxlfWZ1bmN0aW9uIGEoeSx4LGIsUyl7eS5kaWZmdXNlLnZhbHVlLmNvcHkoeC5jb2xvcikseS5vcGFjaXR5LnZhbHVlPXgub3BhY2l0eSx5LnNpemUudmFsdWU9eC5zaXplKmIseS5zY2FsZS52YWx1ZT1TKi41LHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IEM7eC5tYXA/Qz14Lm1hcDp4LmFscGhhTWFwJiYoQz14LmFscGhhTWFwKSxDIT09dm9pZCAwJiYoQy5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJkMudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEMubWF0cml4KSl9ZnVuY3Rpb24gcyh5LHgpe3kuZGlmZnVzZS52YWx1ZS5jb3B5KHguY29sb3IpLHkub3BhY2l0eS52YWx1ZT14Lm9wYWNpdHkseS5yb3RhdGlvbi52YWx1ZT14LnJvdGF0aW9uLHgubWFwJiYoeS5tYXAudmFsdWU9eC5tYXApLHguYWxwaGFNYXAmJih5LmFscGhhTWFwLnZhbHVlPXguYWxwaGFNYXApLHguYWxwaGFUZXN0PjAmJih5LmFscGhhVGVzdC52YWx1ZT14LmFscGhhVGVzdCk7bGV0IGI7eC5tYXA/Yj14Lm1hcDp4LmFscGhhTWFwJiYoYj14LmFscGhhTWFwKSxiIT09dm9pZCAwJiYoYi5tYXRyaXhBdXRvVXBkYXRlPT09ITAmJmIudXBkYXRlTWF0cml4KCkseS51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGIubWF0cml4KSl9ZnVuY3Rpb24gbCh5LHgpe3guZW1pc3NpdmVNYXAmJih5LmVtaXNzaXZlTWFwLnZhbHVlPXguZW1pc3NpdmVNYXApfWZ1bmN0aW9uIGMoeSx4KXt5LnNwZWN1bGFyLnZhbHVlLmNvcHkoeC5zcGVjdWxhcikseS5zaGluaW5lc3MudmFsdWU9TWF0aC5tYXgoeC5zaGluaW5lc3MsMWUtNCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiB1KHkseCl7eC5ncmFkaWVudE1hcCYmKHkuZ3JhZGllbnRNYXAudmFsdWU9eC5ncmFkaWVudE1hcCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBoKHkseCl7eS5yb3VnaG5lc3MudmFsdWU9eC5yb3VnaG5lc3MseS5tZXRhbG5lc3MudmFsdWU9eC5tZXRhbG5lc3MseC5yb3VnaG5lc3NNYXAmJih5LnJvdWdobmVzc01hcC52YWx1ZT14LnJvdWdobmVzc01hcCkseC5tZXRhbG5lc3NNYXAmJih5Lm1ldGFsbmVzc01hcC52YWx1ZT14Lm1ldGFsbmVzc01hcCkseC5lbWlzc2l2ZU1hcCYmKHkuZW1pc3NpdmVNYXAudmFsdWU9eC5lbWlzc2l2ZU1hcCkseC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKSxlLmdldCh4KS5lbnZNYXAmJih5LmVudk1hcEludGVuc2l0eS52YWx1ZT14LmVudk1hcEludGVuc2l0eSl9ZnVuY3Rpb24gZih5LHgsYil7aCh5LHgpLHkuaW9yLnZhbHVlPXguaW9yLHguc2hlZW4+MCYmKHkuc2hlZW5Db2xvci52YWx1ZS5jb3B5KHguc2hlZW5Db2xvcikubXVsdGlwbHlTY2FsYXIoeC5zaGVlbikseS5zaGVlblJvdWdobmVzcy52YWx1ZT14LnNoZWVuUm91Z2huZXNzLHguc2hlZW5Db2xvck1hcCYmKHkuc2hlZW5Db2xvck1hcC52YWx1ZT14LnNoZWVuQ29sb3JNYXApLHguc2hlZW5Sb3VnaG5lc3NNYXAmJih5LnNoZWVuUm91Z2huZXNzTWFwLnZhbHVlPXguc2hlZW5Sb3VnaG5lc3NNYXApKSx4LmNsZWFyY29hdD4wJiYoeS5jbGVhcmNvYXQudmFsdWU9eC5jbGVhcmNvYXQseS5jbGVhcmNvYXRSb3VnaG5lc3MudmFsdWU9eC5jbGVhcmNvYXRSb3VnaG5lc3MseC5jbGVhcmNvYXRNYXAmJih5LmNsZWFyY29hdE1hcC52YWx1ZT14LmNsZWFyY29hdE1hcCkseC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAmJih5LmNsZWFyY29hdFJvdWdobmVzc01hcC52YWx1ZT14LmNsZWFyY29hdFJvdWdobmVzc01hcCkseC5jbGVhcmNvYXROb3JtYWxNYXAmJih5LmNsZWFyY29hdE5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5jbGVhcmNvYXROb3JtYWxTY2FsZSkseS5jbGVhcmNvYXROb3JtYWxNYXAudmFsdWU9eC5jbGVhcmNvYXROb3JtYWxNYXAseC5zaWRlPT09SWkmJnkuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSx4LnRyYW5zbWlzc2lvbj4wJiYoeS50cmFuc21pc3Npb24udmFsdWU9eC50cmFuc21pc3Npb24seS50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPWIudGV4dHVyZSx5LnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChiLndpZHRoLGIuaGVpZ2h0KSx4LnRyYW5zbWlzc2lvbk1hcCYmKHkudHJhbnNtaXNzaW9uTWFwLnZhbHVlPXgudHJhbnNtaXNzaW9uTWFwKSx5LnRoaWNrbmVzcy52YWx1ZT14LnRoaWNrbmVzcyx4LnRoaWNrbmVzc01hcCYmKHkudGhpY2tuZXNzTWFwLnZhbHVlPXgudGhpY2tuZXNzTWFwKSx5LmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9eC5hdHRlbnVhdGlvbkRpc3RhbmNlLHkuYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KHguYXR0ZW51YXRpb25Db2xvcikpLHkuc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9eC5zcGVjdWxhckludGVuc2l0eSx5LnNwZWN1bGFyQ29sb3IudmFsdWUuY29weSh4LnNwZWN1bGFyQ29sb3IpLHguc3BlY3VsYXJJbnRlbnNpdHlNYXAmJih5LnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPXguc3BlY3VsYXJJbnRlbnNpdHlNYXApLHguc3BlY3VsYXJDb2xvck1hcCYmKHkuc3BlY3VsYXJDb2xvck1hcC52YWx1ZT14LnNwZWN1bGFyQ29sb3JNYXApfWZ1bmN0aW9uIHAoeSx4KXt4Lm1hdGNhcCYmKHkubWF0Y2FwLnZhbHVlPXgubWF0Y2FwKSx4LmJ1bXBNYXAmJih5LmJ1bXBNYXAudmFsdWU9eC5idW1wTWFwLHkuYnVtcFNjYWxlLnZhbHVlPXguYnVtcFNjYWxlLHguc2lkZT09PUlpJiYoeS5idW1wU2NhbGUudmFsdWUqPS0xKSkseC5ub3JtYWxNYXAmJih5Lm5vcm1hbE1hcC52YWx1ZT14Lm5vcm1hbE1hcCx5Lm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoeC5ub3JtYWxTY2FsZSkseC5zaWRlPT09SWkmJnkubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLHguZGlzcGxhY2VtZW50TWFwJiYoeS5kaXNwbGFjZW1lbnRNYXAudmFsdWU9eC5kaXNwbGFjZW1lbnRNYXAseS5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT14LmRpc3BsYWNlbWVudFNjYWxlLHkuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT14LmRpc3BsYWNlbWVudEJpYXMpfWZ1bmN0aW9uIGQoeSx4KXt4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1mdW5jdGlvbiBnKHkseCl7eC5kaXNwbGFjZW1lbnRNYXAmJih5LmRpc3BsYWNlbWVudE1hcC52YWx1ZT14LmRpc3BsYWNlbWVudE1hcCx5LmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPXguZGlzcGxhY2VtZW50U2NhbGUseS5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPXguZGlzcGxhY2VtZW50QmlhcykseS5yZWZlcmVuY2VQb3NpdGlvbi52YWx1ZS5jb3B5KHgucmVmZXJlbmNlUG9zaXRpb24pLHkubmVhckRpc3RhbmNlLnZhbHVlPXgubmVhckRpc3RhbmNlLHkuZmFyRGlzdGFuY2UudmFsdWU9eC5mYXJEaXN0YW5jZX1mdW5jdGlvbiBfKHkseCl7eC5idW1wTWFwJiYoeS5idW1wTWFwLnZhbHVlPXguYnVtcE1hcCx5LmJ1bXBTY2FsZS52YWx1ZT14LmJ1bXBTY2FsZSx4LnNpZGU9PT1JaSYmKHkuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLHgubm9ybWFsTWFwJiYoeS5ub3JtYWxNYXAudmFsdWU9eC5ub3JtYWxNYXAseS5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KHgubm9ybWFsU2NhbGUpLHguc2lkZT09PUlpJiZ5Lm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSx4LmRpc3BsYWNlbWVudE1hcCYmKHkuZGlzcGxhY2VtZW50TWFwLnZhbHVlPXguZGlzcGxhY2VtZW50TWFwLHkuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9eC5kaXNwbGFjZW1lbnRTY2FsZSx5LmRpc3BsYWNlbWVudEJpYXMudmFsdWU9eC5kaXNwbGFjZW1lbnRCaWFzKX1yZXR1cm57cmVmcmVzaEZvZ1VuaWZvcm1zOnQscmVmcmVzaE1hdGVyaWFsVW5pZm9ybXM6cn19ZnVuY3Rpb24gUGdyKCl7bGV0IGU9UVAoImNhbnZhcyIpO3JldHVybiBlLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixlfWZ1bmN0aW9uIHJuKGU9e30pe2xldCB0PWUuY2FudmFzIT09dm9pZCAwP2UuY2FudmFzOlBncigpLHI9ZS5jb250ZXh0IT09dm9pZCAwP2UuY29udGV4dDpudWxsLG49ZS5hbHBoYSE9PXZvaWQgMD9lLmFscGhhOiExLGk9ZS5kZXB0aCE9PXZvaWQgMD9lLmRlcHRoOiEwLG89ZS5zdGVuY2lsIT09dm9pZCAwP2Uuc3RlbmNpbDohMCxhPWUuYW50aWFsaWFzIT09dm9pZCAwP2UuYW50aWFsaWFzOiExLHM9ZS5wcmVtdWx0aXBsaWVkQWxwaGEhPT12b2lkIDA/ZS5wcmVtdWx0aXBsaWVkQWxwaGE6ITAsbD1lLnByZXNlcnZlRHJhd2luZ0J1ZmZlciE9PXZvaWQgMD9lLnByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSxjPWUucG93ZXJQcmVmZXJlbmNlIT09dm9pZCAwP2UucG93ZXJQcmVmZXJlbmNlOiJkZWZhdWx0Iix1PWUuZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdCE9PXZvaWQgMD9lLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQ6ITEsaD1udWxsLGY9bnVsbCxwPVtdLGQ9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1RZCx0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9S2QsdGhpcy50b25lTWFwcGluZ0V4cG9zdXJlPTE7bGV0IGc9dGhpcyxfPSExLHk9MCx4PTAsYj1udWxsLFM9LTEsQz1udWxsLFA9bmV3IGVuLGs9bmV3IGVuLE89bnVsbCxEPXQud2lkdGgsQj10LmhlaWdodCxJPTEsTD1udWxsLFI9bnVsbCxGPW5ldyBlbigwLDAsRCxCKSx6PW5ldyBlbigwLDAsRCxCKSxVPSExLFc9bmV3IE52LFo9ITEscnQ9ITEsb3Q9bnVsbCxzdD1uZXcgTWUsU3Q9bmV3IGosYnQ9e2JhY2tncm91bmQ6bnVsbCxmb2c6bnVsbCxlbnZpcm9ubWVudDpudWxsLG92ZXJyaWRlTWF0ZXJpYWw6bnVsbCxpc1NjZW5lOiEwfTtmdW5jdGlvbiBNdCgpe3JldHVybiBiPT09bnVsbD9JOjF9bGV0IGx0PXI7ZnVuY3Rpb24gS3QoSyxndCl7Zm9yKGxldCBFdD0wO0V0PEsubGVuZ3RoO0V0Kyspe2xldCB4dD1LW0V0XSxGdD10LmdldENvbnRleHQoeHQsZ3QpO2lmKEZ0IT09bnVsbClyZXR1cm4gRnR9cmV0dXJuIG51bGx9dHJ5e2xldCBLPXthbHBoYTohMCxkZXB0aDppLHN0ZW5jaWw6byxhbnRpYWxpYXM6YSxwcmVtdWx0aXBsaWVkQWxwaGE6cyxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIixgdGhyZWUuanMgciR7WVV9YCksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixmZSwhMSksdC5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRyZXN0b3JlZCIsYXQsITEpLGx0PT09bnVsbCl7bGV0IGd0PVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZihnLmlzV2ViR0wxUmVuZGVyZXI9PT0hMCYmZ3Quc2hpZnQoKSxsdD1LdChndCxLKSxsdD09PW51bGwpdGhyb3cgS3QoZ3QpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9bHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PT09dm9pZCAwJiYobHQuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KX1jYXRjaChLKXt0aHJvdyBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK0subWVzc2FnZSksS31sZXQgX3QsY3QsWCxldCxkdCxxLHB0LGh0LHd0LGt0LGllLGVlLExlLGFyLGZyLHR0LCQsSXQsJHQsaGUsVHQsYmUsbnQ7ZnVuY3Rpb24gQ3QoKXtfdD1uZXcgSmRyKGx0KSxjdD1uZXcgWWRyKGx0LF90LGUpLF90LmluaXQoY3QpLGJlPW5ldyBYZmUobHQsX3QsY3QpLFg9bmV3IEVncihsdCxfdCxjdCksZXQ9bmV3IGVtcihsdCksZHQ9bmV3IGRncixxPW5ldyBUZ3IobHQsX3QsWCxkdCxjdCxiZSxldCkscHQ9bmV3IFhkcihnKSxodD1uZXcgWmRyKGcpLHd0PW5ldyBnZnIobHQsY3QpLG50PW5ldyBHZHIobHQsX3Qsd3QsY3QpLGt0PW5ldyBRZHIobHQsd3QsZXQsbnQpLGllPW5ldyBvbXIobHQsa3Qsd3QsZXQpLCR0PW5ldyBpbXIobHQsY3QscSksdHQ9bmV3IGpkcihkdCksZWU9bmV3IHBncihnLHB0LGh0LF90LGN0LG50LHR0KSxMZT1uZXcgQWdyKGR0KSxhcj1uZXcgZ2dyLGZyPW5ldyB3Z3IoX3QsY3QpLEl0PW5ldyBxZHIoZyxwdCxYLGllLG4scyksJD1uZXcgamZlKGcsaWUsY3QpLGhlPW5ldyBXZHIobHQsX3QsZXQsY3QpLFR0PW5ldyB0bXIobHQsX3QsZXQsY3QpLGV0LnByb2dyYW1zPWVlLnByb2dyYW1zLGcuY2FwYWJpbGl0aWVzPWN0LGcuZXh0ZW5zaW9ucz1fdCxnLnByb3BlcnRpZXM9ZHQsZy5yZW5kZXJMaXN0cz1hcixnLnNoYWRvd01hcD0kLGcuc3RhdGU9WCxnLmluZm89ZXR9Q3QoKTtsZXQgV3Q9bmV3IHJodChnLGx0KTt0aGlzLnhyPVd0LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBsdH0sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBsdC5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXtsZXQgSz1fdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0smJksubG9zZUNvbnRleHQoKX0sdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlPWZ1bmN0aW9uKCl7bGV0IEs9X3QuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtLJiZLLnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiBJfSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oSyl7SyE9PXZvaWQgMCYmKEk9Syx0aGlzLnNldFNpemUoRCxCLCExKSl9LHRoaXMuZ2V0U2l6ZT1mdW5jdGlvbihLKXtyZXR1cm4gSy5zZXQoRCxCKX0sdGhpcy5zZXRTaXplPWZ1bmN0aW9uKEssZ3QsRXQpe2lmKFd0LmlzUHJlc2VudGluZyl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDYW4ndCBjaGFuZ2Ugc2l6ZSB3aGlsZSBWUiBkZXZpY2UgaXMgcHJlc2VudGluZy4iKTtyZXR1cm59RD1LLEI9Z3QsdC53aWR0aD1NYXRoLmZsb29yKEsqSSksdC5oZWlnaHQ9TWF0aC5mbG9vcihndCpJKSxFdCE9PSExJiYodC5zdHlsZS53aWR0aD1LKyJweCIsdC5zdHlsZS5oZWlnaHQ9Z3QrInB4IiksdGhpcy5zZXRWaWV3cG9ydCgwLDAsSyxndCl9LHRoaXMuZ2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuc2V0KEQqSSxCKkkpLmZsb29yKCl9LHRoaXMuc2V0RHJhd2luZ0J1ZmZlclNpemU9ZnVuY3Rpb24oSyxndCxFdCl7RD1LLEI9Z3QsST1FdCx0LndpZHRoPU1hdGguZmxvb3IoSypFdCksdC5oZWlnaHQ9TWF0aC5mbG9vcihndCpFdCksdGhpcy5zZXRWaWV3cG9ydCgwLDAsSyxndCl9LHRoaXMuZ2V0Q3VycmVudFZpZXdwb3J0PWZ1bmN0aW9uKEspe3JldHVybiBLLmNvcHkoUCl9LHRoaXMuZ2V0Vmlld3BvcnQ9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShGKX0sdGhpcy5zZXRWaWV3cG9ydD1mdW5jdGlvbihLLGd0LEV0LHh0KXtLLmlzVmVjdG9yND9GLnNldChLLngsSy55LEsueixLLncpOkYuc2V0KEssZ3QsRXQseHQpLFgudmlld3BvcnQoUC5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKEkpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3I9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weSh6KX0sdGhpcy5zZXRTY2lzc29yPWZ1bmN0aW9uKEssZ3QsRXQseHQpe0suaXNWZWN0b3I0P3ouc2V0KEsueCxLLnksSy56LEsudyk6ei5zZXQoSyxndCxFdCx4dCksWC5zY2lzc29yKGsuY29weSh6KS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yVGVzdD1mdW5jdGlvbigpe3JldHVybiBVfSx0aGlzLnNldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKEspe1guc2V0U2Npc3NvclRlc3QoVT1LKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKEspe0w9S30sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oSyl7Uj1LfSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oSyl7cmV0dXJuIEsuY29weShJdC5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtJdC5zZXRDbGVhckNvbG9yLmFwcGx5KEl0LGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBJdC5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe0l0LnNldENsZWFyQWxwaGEuYXBwbHkoSXQsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihLLGd0LEV0KXtsZXQgeHQ9MDsoSz09PXZvaWQgMHx8SykmJih4dHw9MTYzODQpLChndD09PXZvaWQgMHx8Z3QpJiYoeHR8PTI1NiksKEV0PT09dm9pZCAwfHxFdCkmJih4dHw9MTAyNCksbHQuY2xlYXIoeHQpfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsZmUsITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLGF0LCExKSxhci5kaXNwb3NlKCksZnIuZGlzcG9zZSgpLGR0LmRpc3Bvc2UoKSxwdC5kaXNwb3NlKCksaHQuZGlzcG9zZSgpLGllLmRpc3Bvc2UoKSxudC5kaXNwb3NlKCksZWUuZGlzcG9zZSgpLFd0LmRpc3Bvc2UoKSxXdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLHplKSxXdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIix5biksb3QmJihvdC5kaXNwb3NlKCksb3Q9bnVsbCksV2kuc3RvcCgpfTtmdW5jdGlvbiBmZShLKXtLLnByZXZlbnREZWZhdWx0KCksY29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgTG9zdC4iKSxfPSEwfWZ1bmN0aW9uIGF0KCl7Y29uc29sZS5sb2coIlRIUkVFLldlYkdMUmVuZGVyZXI6IENvbnRleHQgUmVzdG9yZWQuIiksXz0hMTtsZXQgSz1ldC5hdXRvUmVzZXQsZ3Q9JC5lbmFibGVkLEV0PSQuYXV0b1VwZGF0ZSx4dD0kLm5lZWRzVXBkYXRlLEZ0PSQudHlwZTtDdCgpLGV0LmF1dG9SZXNldD1LLCQuZW5hYmxlZD1ndCwkLmF1dG9VcGRhdGU9RXQsJC5uZWVkc1VwZGF0ZT14dCwkLnR5cGU9RnR9ZnVuY3Rpb24gc2UoSyl7bGV0IGd0PUsudGFyZ2V0O2d0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHNlKSxRdChndCl9ZnVuY3Rpb24gUXQoSyl7Q2UoSyksZHQucmVtb3ZlKEspfWZ1bmN0aW9uIENlKEspe2xldCBndD1kdC5nZXQoSykucHJvZ3JhbXM7Z3QhPT12b2lkIDAmJihndC5mb3JFYWNoKGZ1bmN0aW9uKEV0KXtlZS5yZWxlYXNlUHJvZ3JhbShFdCl9KSxLLmlzU2hhZGVyTWF0ZXJpYWwmJmVlLnJlbGVhc2VTaGFkZXJDYWNoZShLKSl9dGhpcy5yZW5kZXJCdWZmZXJEaXJlY3Q9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdCxWZSl7Z3Q9PT1udWxsJiYoZ3Q9YnQpO2xldCBVZT1GdC5pc01lc2gmJkZ0Lm1hdHJpeFdvcmxkLmRldGVybWluYW50KCk8MCx0cj1jbihLLGd0LEV0LHh0LEZ0KTtYLnNldE1hdGVyaWFsKHh0LFVlKTtsZXQgS2U9RXQuaW5kZXgsWHI9RXQuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihLZT09PW51bGwpe2lmKFhyPT09dm9pZCAwfHxYci5jb3VudD09PTApcmV0dXJufWVsc2UgaWYoS2UuY291bnQ9PT0wKXJldHVybjtsZXQgX3I9MTt4dC53aXJlZnJhbWU9PT0hMCYmKEtlPWt0LmdldFdpcmVmcmFtZUF0dHJpYnV0ZShFdCksX3I9MiksbnQuc2V0dXAoRnQseHQsdHIsRXQsS2UpO2xldCBQcixYbj1oZTtLZSE9PW51bGwmJihQcj13dC5nZXQoS2UpLFhuPVR0LFhuLnNldEluZGV4KFByKSk7bGV0IG5wPUtlIT09bnVsbD9LZS5jb3VudDpYci5jb3VudCx1bT1FdC5kcmF3UmFuZ2Uuc3RhcnQqX3IsbXI9RXQuZHJhd1JhbmdlLmNvdW50Kl9yLEZsPVZlIT09bnVsbD9WZS5zdGFydCpfcjowLCRuPVZlIT09bnVsbD9WZS5jb3VudCpfcjoxLzAsQmw9TWF0aC5tYXgodW0sRmwpLHV4PU1hdGgubWluKG5wLHVtK21yLEZsKyRuKS0xLEhsPU1hdGgubWF4KDAsdXgtQmwrMSk7aWYoSGwhPT0wKXtpZihGdC5pc01lc2gpeHQud2lyZWZyYW1lPT09ITA/KFguc2V0TGluZVdpZHRoKHh0LndpcmVmcmFtZUxpbmV3aWR0aCpNdCgpKSxYbi5zZXRNb2RlKDEpKTpYbi5zZXRNb2RlKDQpO2Vsc2UgaWYoRnQuaXNMaW5lKXtsZXQgVmw9eHQubGluZXdpZHRoO1ZsPT09dm9pZCAwJiYoVmw9MSksWC5zZXRMaW5lV2lkdGgoVmwqTXQoKSksRnQuaXNMaW5lU2VnbWVudHM/WG4uc2V0TW9kZSgxKTpGdC5pc0xpbmVMb29wP1huLnNldE1vZGUoMik6WG4uc2V0TW9kZSgzKX1lbHNlIEZ0LmlzUG9pbnRzP1huLnNldE1vZGUoMCk6RnQuaXNTcHJpdGUmJlhuLnNldE1vZGUoNCk7aWYoRnQuaXNJbnN0YW5jZWRNZXNoKVhuLnJlbmRlckluc3RhbmNlcyhCbCxIbCxGdC5jb3VudCk7ZWxzZSBpZihFdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5KXtsZXQgVmw9TWF0aC5taW4oRXQuaW5zdGFuY2VDb3VudCxFdC5fbWF4SW5zdGFuY2VDb3VudCk7WG4ucmVuZGVySW5zdGFuY2VzKEJsLEhsLFZsKX1lbHNlIFhuLnJlbmRlcihCbCxIbCl9fSx0aGlzLmNvbXBpbGU9ZnVuY3Rpb24oSyxndCl7Zj1mci5nZXQoSyksZi5pbml0KCksZC5wdXNoKGYpLEsudHJhdmVyc2VWaXNpYmxlKGZ1bmN0aW9uKEV0KXtFdC5pc0xpZ2h0JiZFdC5sYXllcnMudGVzdChndC5sYXllcnMpJiYoZi5wdXNoTGlnaHQoRXQpLEV0LmNhc3RTaGFkb3cmJmYucHVzaFNoYWRvdyhFdCkpfSksZi5zZXR1cExpZ2h0cyhnLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxLLnRyYXZlcnNlKGZ1bmN0aW9uKEV0KXtsZXQgeHQ9RXQubWF0ZXJpYWw7aWYoeHQpaWYoQXJyYXkuaXNBcnJheSh4dCkpZm9yKGxldCBGdD0wO0Z0PHh0Lmxlbmd0aDtGdCsrKXtsZXQgVmU9eHRbRnRdO2NtKFZlLEssRXQpfWVsc2UgY20oeHQsSyxFdCl9KSxkLnBvcCgpLGY9bnVsbH07bGV0IFB0PW51bGw7ZnVuY3Rpb24gTnQoSyl7UHQmJlB0KEspfWZ1bmN0aW9uIHplKCl7V2kuc3RvcCgpfWZ1bmN0aW9uIHluKCl7V2kuc3RhcnQoKX1sZXQgV2k9bmV3IHpmZTtXaS5zZXRBbmltYXRpb25Mb29wKE50KSx0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmV2kuc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihLKXtQdD1LLFd0LnNldEFuaW1hdGlvbkxvb3AoSyksSz09PW51bGw/V2kuc3RvcCgpOldpLnN0YXJ0KCl9LFd0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsemUpLFd0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLHluKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihLLGd0KXtpZihndCE9PXZvaWQgMCYmZ3QuaXNDYW1lcmEhPT0hMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpO3JldHVybn1pZihfPT09ITApcmV0dXJuO0suYXV0b1VwZGF0ZT09PSEwJiZLLnVwZGF0ZU1hdHJpeFdvcmxkKCksZ3QucGFyZW50PT09bnVsbCYmZ3QudXBkYXRlTWF0cml4V29ybGQoKSxXdC5lbmFibGVkPT09ITAmJld0LmlzUHJlc2VudGluZz09PSEwJiYoV3QuY2FtZXJhQXV0b1VwZGF0ZT09PSEwJiZXdC51cGRhdGVDYW1lcmEoZ3QpLGd0PVd0LmdldENhbWVyYSgpKSxLLmlzU2NlbmU9PT0hMCYmSy5vbkJlZm9yZVJlbmRlcihnLEssZ3QsYiksZj1mci5nZXQoSyxkLmxlbmd0aCksZi5pbml0KCksZC5wdXNoKGYpLHN0Lm11bHRpcGx5TWF0cmljZXMoZ3QucHJvamVjdGlvbk1hdHJpeCxndC5tYXRyaXhXb3JsZEludmVyc2UpLFcuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoc3QpLHJ0PXRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQsWj10dC5pbml0KHRoaXMuY2xpcHBpbmdQbGFuZXMscnQsZ3QpLGg9YXIuZ2V0KEsscC5sZW5ndGgpLGguaW5pdCgpLHAucHVzaChoKSxBcihLLGd0LDAsZy5zb3J0T2JqZWN0cyksaC5maW5pc2goKSxnLnNvcnRPYmplY3RzPT09ITAmJmguc29ydChMLFIpLFo9PT0hMCYmdHQuYmVnaW5TaGFkb3dzKCk7bGV0IEV0PWYuc3RhdGUuc2hhZG93c0FycmF5O2lmKCQucmVuZGVyKEV0LEssZ3QpLFo9PT0hMCYmdHQuZW5kU2hhZG93cygpLHRoaXMuaW5mby5hdXRvUmVzZXQ9PT0hMCYmdGhpcy5pbmZvLnJlc2V0KCksSXQucmVuZGVyKGgsSyksZi5zZXR1cExpZ2h0cyhnLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxndC5pc0FycmF5Q2FtZXJhKXtsZXQgeHQ9Z3QuY2FtZXJhcztmb3IobGV0IEZ0PTAsVmU9eHQubGVuZ3RoO0Z0PFZlO0Z0Kyspe2xldCBVZT14dFtGdF07UGEoaCxLLFVlLFVlLnZpZXdwb3J0KX19ZWxzZSBQYShoLEssZ3QpO2IhPT1udWxsJiYocS51cGRhdGVNdWx0aXNhbXBsZVJlbmRlclRhcmdldChiKSxxLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChiKSksSy5pc1NjZW5lPT09ITAmJksub25BZnRlclJlbmRlcihnLEssZ3QpLFguYnVmZmVycy5kZXB0aC5zZXRUZXN0KCEwKSxYLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksWC5idWZmZXJzLmNvbG9yLnNldE1hc2soITApLFguc2V0UG9seWdvbk9mZnNldCghMSksbnQucmVzZXREZWZhdWx0U3RhdGUoKSxTPS0xLEM9bnVsbCxkLnBvcCgpLGQubGVuZ3RoPjA/Zj1kW2QubGVuZ3RoLTFdOmY9bnVsbCxwLnBvcCgpLHAubGVuZ3RoPjA/aD1wW3AubGVuZ3RoLTFdOmg9bnVsbH07ZnVuY3Rpb24gQXIoSyxndCxFdCx4dCl7aWYoSy52aXNpYmxlPT09ITEpcmV0dXJuO2lmKEsubGF5ZXJzLnRlc3QoZ3QubGF5ZXJzKSl7aWYoSy5pc0dyb3VwKUV0PUsucmVuZGVyT3JkZXI7ZWxzZSBpZihLLmlzTE9EKUsuYXV0b1VwZGF0ZT09PSEwJiZLLnVwZGF0ZShndCk7ZWxzZSBpZihLLmlzTGlnaHQpZi5wdXNoTGlnaHQoSyksSy5jYXN0U2hhZG93JiZmLnB1c2hTaGFkb3coSyk7ZWxzZSBpZihLLmlzU3ByaXRlKXtpZighSy5mcnVzdHVtQ3VsbGVkfHxXLmludGVyc2VjdHNTcHJpdGUoSykpe3h0JiZTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KHN0KTtsZXQgVWU9aWUudXBkYXRlKEspLHRyPUsubWF0ZXJpYWw7dHIudmlzaWJsZSYmaC5wdXNoKEssVWUsdHIsRXQsU3QueixudWxsKX19ZWxzZSBpZigoSy5pc01lc2h8fEsuaXNMaW5lfHxLLmlzUG9pbnRzKSYmKEsuaXNTa2lubmVkTWVzaCYmSy5za2VsZXRvbi5mcmFtZSE9PWV0LnJlbmRlci5mcmFtZSYmKEsuc2tlbGV0b24udXBkYXRlKCksSy5za2VsZXRvbi5mcmFtZT1ldC5yZW5kZXIuZnJhbWUpLCFLLmZydXN0dW1DdWxsZWR8fFcuaW50ZXJzZWN0c09iamVjdChLKSkpe3h0JiZTdC5zZXRGcm9tTWF0cml4UG9zaXRpb24oSy5tYXRyaXhXb3JsZCkuYXBwbHlNYXRyaXg0KHN0KTtsZXQgVWU9aWUudXBkYXRlKEspLHRyPUsubWF0ZXJpYWw7aWYoQXJyYXkuaXNBcnJheSh0cikpe2xldCBLZT1VZS5ncm91cHM7Zm9yKGxldCBYcj0wLF9yPUtlLmxlbmd0aDtYcjxfcjtYcisrKXtsZXQgUHI9S2VbWHJdLFhuPXRyW1ByLm1hdGVyaWFsSW5kZXhdO1huJiZYbi52aXNpYmxlJiZoLnB1c2goSyxVZSxYbixFdCxTdC56LFByKX19ZWxzZSB0ci52aXNpYmxlJiZoLnB1c2goSyxVZSx0cixFdCxTdC56LG51bGwpfX1sZXQgVmU9Sy5jaGlsZHJlbjtmb3IobGV0IFVlPTAsdHI9VmUubGVuZ3RoO1VlPHRyO1VlKyspQXIoVmVbVWVdLGd0LEV0LHh0KX1mdW5jdGlvbiBQYShLLGd0LEV0LHh0KXtsZXQgRnQ9Sy5vcGFxdWUsVmU9Sy50cmFuc21pc3NpdmUsVWU9Sy50cmFuc3BhcmVudDtmLnNldHVwTGlnaHRzVmlldyhFdCksVmUubGVuZ3RoPjAmJmhvKEZ0LGd0LEV0KSx4dCYmWC52aWV3cG9ydChQLmNvcHkoeHQpKSxGdC5sZW5ndGg+MCYmSWEoRnQsZ3QsRXQpLFZlLmxlbmd0aD4wJiZJYShWZSxndCxFdCksVWUubGVuZ3RoPjAmJklhKFVlLGd0LEV0KX1mdW5jdGlvbiBobyhLLGd0LEV0KXtpZihvdD09PW51bGwpe2xldCBVZT1hPT09ITAmJmN0LmlzV2ViR0wyPT09ITA/ajM6dXM7b3Q9bmV3IFVlKDEwMjQsMTAyNCx7Z2VuZXJhdGVNaXBtYXBzOiEwLHR5cGU6YmUuY29udmVydChDdikhPT1udWxsP0N2OlpkLG1pbkZpbHRlcjpveCxtYWdGaWx0ZXI6TGksd3JhcFM6Sm8sd3JhcFQ6Sm8sdXNlUmVuZGVyVG9UZXh0dXJlOl90LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KX1sZXQgeHQ9Zy5nZXRSZW5kZXJUYXJnZXQoKTtnLnNldFJlbmRlclRhcmdldChvdCksZy5jbGVhcigpO2xldCBGdD1nLnRvbmVNYXBwaW5nO2cudG9uZU1hcHBpbmc9S2QsSWEoSyxndCxFdCksZy50b25lTWFwcGluZz1GdCxxLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0KG90KSxxLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcChvdCksZy5zZXRSZW5kZXJUYXJnZXQoeHQpfWZ1bmN0aW9uIElhKEssZ3QsRXQpe2xldCB4dD1ndC5pc1NjZW5lPT09ITA/Z3Qub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2ZvcihsZXQgRnQ9MCxWZT1LLmxlbmd0aDtGdDxWZTtGdCsrKXtsZXQgVWU9S1tGdF0sdHI9VWUub2JqZWN0LEtlPVVlLmdlb21ldHJ5LFhyPXh0PT09bnVsbD9VZS5tYXRlcmlhbDp4dCxfcj1VZS5ncm91cDt0ci5sYXllcnMudGVzdChFdC5sYXllcnMpJiZseCh0cixndCxFdCxLZSxYcixfcil9fWZ1bmN0aW9uIGx4KEssZ3QsRXQseHQsRnQsVmUpe0sub25CZWZvcmVSZW5kZXIoZyxndCxFdCx4dCxGdCxWZSksSy5tb2RlbFZpZXdNYXRyaXgubXVsdGlwbHlNYXRyaWNlcyhFdC5tYXRyaXhXb3JsZEludmVyc2UsSy5tYXRyaXhXb3JsZCksSy5ub3JtYWxNYXRyaXguZ2V0Tm9ybWFsTWF0cml4KEsubW9kZWxWaWV3TWF0cml4KSxGdC5vbkJlZm9yZVJlbmRlcihnLGd0LEV0LHh0LEssVmUpLEZ0LnRyYW5zcGFyZW50PT09ITAmJkZ0LnNpZGU9PT1Mdj8oRnQuc2lkZT1JaSxGdC5uZWVkc1VwZGF0ZT0hMCxnLnJlbmRlckJ1ZmZlckRpcmVjdChFdCxndCx4dCxGdCxLLFZlKSxGdC5zaWRlPUl2LEZ0Lm5lZWRzVXBkYXRlPSEwLGcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEZ0LnNpZGU9THYpOmcucmVuZGVyQnVmZmVyRGlyZWN0KEV0LGd0LHh0LEZ0LEssVmUpLEsub25BZnRlclJlbmRlcihnLGd0LEV0LHh0LEZ0LFZlKX1mdW5jdGlvbiBjbShLLGd0LEV0KXtndC5pc1NjZW5lIT09ITAmJihndD1idCk7bGV0IHh0PWR0LmdldChLKSxGdD1mLnN0YXRlLmxpZ2h0cyxWZT1mLnN0YXRlLnNoYWRvd3NBcnJheSxVZT1GdC5zdGF0ZS52ZXJzaW9uLHRyPWVlLmdldFBhcmFtZXRlcnMoSyxGdC5zdGF0ZSxWZSxndCxFdCksS2U9ZWUuZ2V0UHJvZ3JhbUNhY2hlS2V5KHRyKSxYcj14dC5wcm9ncmFtczt4dC5lbnZpcm9ubWVudD1LLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/Z3QuZW52aXJvbm1lbnQ6bnVsbCx4dC5mb2c9Z3QuZm9nLHh0LmVudk1hcD0oSy5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2h0OnB0KS5nZXQoSy5lbnZNYXB8fHh0LmVudmlyb25tZW50KSxYcj09PXZvaWQgMCYmKEsuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsc2UpLFhyPW5ldyBNYXAseHQucHJvZ3JhbXM9WHIpO2xldCBfcj1Yci5nZXQoS2UpO2lmKF9yIT09dm9pZCAwKXtpZih4dC5jdXJyZW50UHJvZ3JhbT09PV9yJiZ4dC5saWdodHNTdGF0ZVZlcnNpb249PT1VZSlyZXR1cm4gSjAoSyx0ciksX3J9ZWxzZSB0ci51bmlmb3Jtcz1lZS5nZXRVbmlmb3JtcyhLKSxLLm9uQnVpbGQoRXQsdHIsZyksSy5vbkJlZm9yZUNvbXBpbGUodHIsZyksX3I9ZWUuYWNxdWlyZVByb2dyYW0odHIsS2UpLFhyLnNldChLZSxfcikseHQudW5pZm9ybXM9dHIudW5pZm9ybXM7bGV0IFByPXh0LnVuaWZvcm1zOyghSy5pc1NoYWRlck1hdGVyaWFsJiYhSy5pc1Jhd1NoYWRlck1hdGVyaWFsfHxLLmNsaXBwaW5nPT09ITApJiYoUHIuY2xpcHBpbmdQbGFuZXM9dHQudW5pZm9ybSksSjAoSyx0cikseHQubmVlZHNMaWdodHM9cnAoSykseHQubGlnaHRzU3RhdGVWZXJzaW9uPVVlLHh0Lm5lZWRzTGlnaHRzJiYoUHIuYW1iaWVudExpZ2h0Q29sb3IudmFsdWU9RnQuc3RhdGUuYW1iaWVudCxQci5saWdodFByb2JlLnZhbHVlPUZ0LnN0YXRlLnByb2JlLFByLmRpcmVjdGlvbmFsTGlnaHRzLnZhbHVlPUZ0LnN0YXRlLmRpcmVjdGlvbmFsLFByLmRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93LFByLnNwb3RMaWdodHMudmFsdWU9RnQuc3RhdGUuc3BvdCxQci5zcG90TGlnaHRTaGFkb3dzLnZhbHVlPUZ0LnN0YXRlLnNwb3RTaGFkb3csUHIucmVjdEFyZWFMaWdodHMudmFsdWU9RnQuc3RhdGUucmVjdEFyZWEsUHIubHRjXzEudmFsdWU9RnQuc3RhdGUucmVjdEFyZWFMVEMxLFByLmx0Y18yLnZhbHVlPUZ0LnN0YXRlLnJlY3RBcmVhTFRDMixQci5wb2ludExpZ2h0cy52YWx1ZT1GdC5zdGF0ZS5wb2ludCxQci5wb2ludExpZ2h0U2hhZG93cy52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvdyxQci5oZW1pc3BoZXJlTGlnaHRzLnZhbHVlPUZ0LnN0YXRlLmhlbWksUHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXAsUHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgudmFsdWU9RnQuc3RhdGUuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXgsUHIuc3BvdFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5zcG90U2hhZG93TWFwLFByLnNwb3RTaGFkb3dNYXRyaXgudmFsdWU9RnQuc3RhdGUuc3BvdFNoYWRvd01hdHJpeCxQci5wb2ludFNoYWRvd01hcC52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvd01hcCxQci5wb2ludFNoYWRvd01hdHJpeC52YWx1ZT1GdC5zdGF0ZS5wb2ludFNoYWRvd01hdHJpeCk7bGV0IFhuPV9yLmdldFVuaWZvcm1zKCksbnA9QjAuc2VxV2l0aFZhbHVlKFhuLnNlcSxQcik7cmV0dXJuIHh0LmN1cnJlbnRQcm9ncmFtPV9yLHh0LnVuaWZvcm1zTGlzdD1ucCxfcn1mdW5jdGlvbiBKMChLLGd0KXtsZXQgRXQ9ZHQuZ2V0KEspO0V0Lm91dHB1dEVuY29kaW5nPWd0Lm91dHB1dEVuY29kaW5nLEV0Lmluc3RhbmNpbmc9Z3QuaW5zdGFuY2luZyxFdC5za2lubmluZz1ndC5za2lubmluZyxFdC5tb3JwaFRhcmdldHM9Z3QubW9ycGhUYXJnZXRzLEV0Lm1vcnBoTm9ybWFscz1ndC5tb3JwaE5vcm1hbHMsRXQubW9ycGhUYXJnZXRzQ291bnQ9Z3QubW9ycGhUYXJnZXRzQ291bnQsRXQubnVtQ2xpcHBpbmdQbGFuZXM9Z3QubnVtQ2xpcHBpbmdQbGFuZXMsRXQubnVtSW50ZXJzZWN0aW9uPWd0Lm51bUNsaXBJbnRlcnNlY3Rpb24sRXQudmVydGV4QWxwaGFzPWd0LnZlcnRleEFscGhhcyxFdC52ZXJ0ZXhUYW5nZW50cz1ndC52ZXJ0ZXhUYW5nZW50cyxFdC50b25lTWFwcGluZz1ndC50b25lTWFwcGluZ31mdW5jdGlvbiBjbihLLGd0LEV0LHh0LEZ0KXtndC5pc1NjZW5lIT09ITAmJihndD1idCkscS5yZXNldFRleHR1cmVVbml0cygpO2xldCBWZT1ndC5mb2csVWU9eHQuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9ndC5lbnZpcm9ubWVudDpudWxsLHRyPWI9PT1udWxsP2cub3V0cHV0RW5jb2Rpbmc6Yi5pc1hSUmVuZGVyVGFyZ2V0PT09ITA/Yi50ZXh0dXJlLmVuY29kaW5nOlFkLEtlPSh4dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP2h0OnB0KS5nZXQoeHQuZW52TWFwfHxVZSksWHI9eHQudmVydGV4Q29sb3JzPT09ITAmJiEhRXQuYXR0cmlidXRlcy5jb2xvciYmRXQuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZT09PTQsX3I9ISF4dC5ub3JtYWxNYXAmJiEhRXQuYXR0cmlidXRlcy50YW5nZW50LFByPSEhRXQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLFhuPSEhRXQubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxucD1FdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24/RXQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLHVtPXh0LnRvbmVNYXBwZWQ/Zy50b25lTWFwcGluZzpLZCxtcj1kdC5nZXQoeHQpLEZsPWYuc3RhdGUubGlnaHRzO2lmKFo9PT0hMCYmKHJ0PT09ITB8fEshPT1DKSl7bGV0IHFzPUs9PT1DJiZ4dC5pZD09PVM7dHQuc2V0U3RhdGUoeHQsSyxxcyl9bGV0ICRuPSExO3h0LnZlcnNpb249PT1tci5fX3ZlcnNpb24/KG1yLm5lZWRzTGlnaHRzJiZtci5saWdodHNTdGF0ZVZlcnNpb24hPT1GbC5zdGF0ZS52ZXJzaW9ufHxtci5vdXRwdXRFbmNvZGluZyE9PXRyfHxGdC5pc0luc3RhbmNlZE1lc2gmJm1yLmluc3RhbmNpbmc9PT0hMXx8IUZ0LmlzSW5zdGFuY2VkTWVzaCYmbXIuaW5zdGFuY2luZz09PSEwfHxGdC5pc1NraW5uZWRNZXNoJiZtci5za2lubmluZz09PSExfHwhRnQuaXNTa2lubmVkTWVzaCYmbXIuc2tpbm5pbmc9PT0hMHx8bXIuZW52TWFwIT09S2V8fHh0LmZvZyYmbXIuZm9nIT09VmV8fG1yLm51bUNsaXBwaW5nUGxhbmVzIT09dm9pZCAwJiYobXIubnVtQ2xpcHBpbmdQbGFuZXMhPT10dC5udW1QbGFuZXN8fG1yLm51bUludGVyc2VjdGlvbiE9PXR0Lm51bUludGVyc2VjdGlvbil8fG1yLnZlcnRleEFscGhhcyE9PVhyfHxtci52ZXJ0ZXhUYW5nZW50cyE9PV9yfHxtci5tb3JwaFRhcmdldHMhPT1Qcnx8bXIubW9ycGhOb3JtYWxzIT09WG58fG1yLnRvbmVNYXBwaW5nIT09dW18fGN0LmlzV2ViR0wyPT09ITAmJm1yLm1vcnBoVGFyZ2V0c0NvdW50IT09bnApJiYoJG49ITApOigkbj0hMCxtci5fX3ZlcnNpb249eHQudmVyc2lvbik7bGV0IEJsPW1yLmN1cnJlbnRQcm9ncmFtOyRuPT09ITAmJihCbD1jbSh4dCxndCxGdCkpO2xldCB1eD0hMSxIbD0hMSxWbD0hMSxZaT1CbC5nZXRVbmlmb3JtcygpLGhtPW1yLnVuaWZvcm1zO2lmKFgudXNlUHJvZ3JhbShCbC5wcm9ncmFtKSYmKHV4PSEwLEhsPSEwLFZsPSEwKSx4dC5pZCE9PVMmJihTPXh0LmlkLEhsPSEwKSx1eHx8QyE9PUspe2lmKFlpLnNldFZhbHVlKGx0LCJwcm9qZWN0aW9uTWF0cml4IixLLnByb2plY3Rpb25NYXRyaXgpLGN0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJllpLnNldFZhbHVlKGx0LCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhLLmZhcisxKS9NYXRoLkxOMikpLEMhPT1LJiYoQz1LLEhsPSEwLFZsPSEwKSx4dC5pc1NoYWRlck1hdGVyaWFsfHx4dC5pc01lc2hQaG9uZ01hdGVyaWFsfHx4dC5pc01lc2hUb29uTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmVudk1hcCl7bGV0IHFzPVlpLm1hcC5jYW1lcmFQb3NpdGlvbjtxcyE9PXZvaWQgMCYmcXMuc2V0VmFsdWUobHQsU3Quc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEsubWF0cml4V29ybGQpKX0oeHQuaXNNZXNoUGhvbmdNYXRlcmlhbHx8eHQuaXNNZXNoVG9vbk1hdGVyaWFsfHx4dC5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fHh0LmlzTWVzaEJhc2ljTWF0ZXJpYWx8fHh0LmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fHh0LmlzU2hhZGVyTWF0ZXJpYWwpJiZZaS5zZXRWYWx1ZShsdCwiaXNPcnRob2dyYXBoaWMiLEsuaXNPcnRob2dyYXBoaWNDYW1lcmE9PT0hMCksKHh0LmlzTWVzaFBob25nTWF0ZXJpYWx8fHh0LmlzTWVzaFRvb25NYXRlcmlhbHx8eHQuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHx4dC5pc01lc2hCYXNpY01hdGVyaWFsfHx4dC5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHx4dC5pc1NoYWRlck1hdGVyaWFsfHx4dC5pc1NoYWRvd01hdGVyaWFsfHxGdC5pc1NraW5uZWRNZXNoKSYmWWkuc2V0VmFsdWUobHQsInZpZXdNYXRyaXgiLEsubWF0cml4V29ybGRJbnZlcnNlKX1pZihGdC5pc1NraW5uZWRNZXNoKXtZaS5zZXRPcHRpb25hbChsdCxGdCwiYmluZE1hdHJpeCIpLFlpLnNldE9wdGlvbmFsKGx0LEZ0LCJiaW5kTWF0cml4SW52ZXJzZSIpO2xldCBxcz1GdC5za2VsZXRvbjtxcyYmKGN0LmZsb2F0VmVydGV4VGV4dHVyZXM/KHFzLmJvbmVUZXh0dXJlPT09bnVsbCYmcXMuY29tcHV0ZUJvbmVUZXh0dXJlKCksWWkuc2V0VmFsdWUobHQsImJvbmVUZXh0dXJlIixxcy5ib25lVGV4dHVyZSxxKSxZaS5zZXRWYWx1ZShsdCwiYm9uZVRleHR1cmVTaXplIixxcy5ib25lVGV4dHVyZVNpemUpKTpZaS5zZXRPcHRpb25hbChsdCxxcywiYm9uZU1hdHJpY2VzIikpfXJldHVybiEhRXQmJihFdC5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24hPT12b2lkIDB8fEV0Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWwhPT12b2lkIDApJiYkdC51cGRhdGUoRnQsRXQseHQsQmwpLChIbHx8bXIucmVjZWl2ZVNoYWRvdyE9PUZ0LnJlY2VpdmVTaGFkb3cpJiYobXIucmVjZWl2ZVNoYWRvdz1GdC5yZWNlaXZlU2hhZG93LFlpLnNldFZhbHVlKGx0LCJyZWNlaXZlU2hhZG93IixGdC5yZWNlaXZlU2hhZG93KSksSGwmJihZaS5zZXRWYWx1ZShsdCwidG9uZU1hcHBpbmdFeHBvc3VyZSIsZy50b25lTWFwcGluZ0V4cG9zdXJlKSxtci5uZWVkc0xpZ2h0cyYmY3goaG0sVmwpLFZlJiZ4dC5mb2cmJkxlLnJlZnJlc2hGb2dVbmlmb3JtcyhobSxWZSksTGUucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoaG0seHQsSSxCLG90KSxCMC51cGxvYWQobHQsbXIudW5pZm9ybXNMaXN0LGhtLHEpKSx4dC5pc1NoYWRlck1hdGVyaWFsJiZ4dC51bmlmb3Jtc05lZWRVcGRhdGU9PT0hMCYmKEIwLnVwbG9hZChsdCxtci51bmlmb3Jtc0xpc3QsaG0scSkseHQudW5pZm9ybXNOZWVkVXBkYXRlPSExKSx4dC5pc1Nwcml0ZU1hdGVyaWFsJiZZaS5zZXRWYWx1ZShsdCwiY2VudGVyIixGdC5jZW50ZXIpLFlpLnNldFZhbHVlKGx0LCJtb2RlbFZpZXdNYXRyaXgiLEZ0Lm1vZGVsVmlld01hdHJpeCksWWkuc2V0VmFsdWUobHQsIm5vcm1hbE1hdHJpeCIsRnQubm9ybWFsTWF0cml4KSxZaS5zZXRWYWx1ZShsdCwibW9kZWxNYXRyaXgiLEZ0Lm1hdHJpeFdvcmxkKSxCbH1mdW5jdGlvbiBjeChLLGd0KXtLLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPWd0LEsubGlnaHRQcm9iZS5uZWVkc1VwZGF0ZT1ndCxLLmRpcmVjdGlvbmFsTGlnaHRzLm5lZWRzVXBkYXRlPWd0LEsuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5wb2ludExpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLnBvaW50TGlnaHRTaGFkb3dzLm5lZWRzVXBkYXRlPWd0LEsuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLnNwb3RMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9Z3QsSy5yZWN0QXJlYUxpZ2h0cy5uZWVkc1VwZGF0ZT1ndCxLLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9Z3R9ZnVuY3Rpb24gcnAoSyl7cmV0dXJuIEsuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxLLmlzTWVzaFRvb25NYXRlcmlhbHx8Sy5pc01lc2hQaG9uZ01hdGVyaWFsfHxLLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fEsuaXNTaGFkb3dNYXRlcmlhbHx8Sy5pc1NoYWRlck1hdGVyaWFsJiZLLmxpZ2h0cz09PSEwfXRoaXMuZ2V0QWN0aXZlQ3ViZUZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4geX0sdGhpcy5nZXRBY3RpdmVNaXBtYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiB4fSx0aGlzLmdldFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBifSx0aGlzLnNldFJlbmRlclRhcmdldFRleHR1cmVzPWZ1bmN0aW9uKEssZ3QsRXQpe2R0LmdldChLLnRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPWd0LGR0LmdldChLLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmU9RXQ7bGV0IHh0PWR0LmdldChLKTt4dC5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAseHQuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYoeHQuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcj1FdD09PXZvaWQgMCx4dC5fX2F1dG9BbGxvY2F0ZURlcHRoQnVmZmVyfHxLLnVzZVJlbmRlclRvVGV4dHVyZSYmKGNvbnNvbGUud2FybigicmVuZGVyLXRvLXRleHR1cmUgZXh0ZW5zaW9uIHdhcyBkaXNhYmxlZCBiZWNhdXNlIGFuIGV4dGVybmFsIHRleHR1cmUgd2FzIHByb3ZpZGVkIiksSy51c2VSZW5kZXJUb1RleHR1cmU9ITEsSy51c2VSZW5kZXJidWZmZXI9ITApKX0sdGhpcy5zZXRSZW5kZXJUYXJnZXRGcmFtZWJ1ZmZlcj1mdW5jdGlvbihLLGd0KXtsZXQgRXQ9ZHQuZ2V0KEspO0V0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj1ndCxFdC5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj1ndD09PXZvaWQgMH0sdGhpcy5zZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oSyxndD0wLEV0PTApe2I9Syx5PWd0LHg9RXQ7bGV0IHh0PSEwO2lmKEspe2xldCBLZT1kdC5nZXQoSyk7S2UuX191c2VEZWZhdWx0RnJhbWVidWZmZXIhPT12b2lkIDA/KFguYmluZEZyYW1lYnVmZmVyKDM2MTYwLG51bGwpLHh0PSExKTpLZS5fX3dlYmdsRnJhbWVidWZmZXI9PT12b2lkIDA/cS5zZXR1cFJlbmRlclRhcmdldChLKTpLZS5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJnEucmViaW5kVGV4dHVyZXMoSyxkdC5nZXQoSy50ZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSxkdC5nZXQoSy5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlKX1sZXQgRnQ9bnVsbCxWZT0hMSxVZT0hMTtpZihLKXtsZXQgS2U9Sy50ZXh0dXJlOyhLZS5pc0RhdGFUZXh0dXJlM0R8fEtlLmlzRGF0YVRleHR1cmUyREFycmF5KSYmKFVlPSEwKTtsZXQgWHI9ZHQuZ2V0KEspLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtLLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0PyhGdD1YcltndF0sVmU9ITApOksudXNlUmVuZGVyYnVmZmVyP0Z0PWR0LmdldChLKS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI6RnQ9WHIsUC5jb3B5KEsudmlld3BvcnQpLGsuY29weShLLnNjaXNzb3IpLE89Sy5zY2lzc29yVGVzdH1lbHNlIFAuY29weShGKS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpLGsuY29weSh6KS5tdWx0aXBseVNjYWxhcihJKS5mbG9vcigpLE89VTtpZihYLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxGdCkmJmN0LmRyYXdCdWZmZXJzJiZ4dCYmWC5kcmF3QnVmZmVycyhLLEZ0KSxYLnZpZXdwb3J0KFApLFguc2Npc3NvcihrKSxYLnNldFNjaXNzb3JUZXN0KE8pLFZlKXtsZXQgS2U9ZHQuZ2V0KEsudGV4dHVyZSk7bHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrZ3QsS2UuX193ZWJnbFRleHR1cmUsRXQpfWVsc2UgaWYoVWUpe2xldCBLZT1kdC5nZXQoSy50ZXh0dXJlKSxYcj1ndHx8MDtsdC5mcmFtZWJ1ZmZlclRleHR1cmVMYXllcigzNjE2MCwzNjA2NCxLZS5fX3dlYmdsVGV4dHVyZSxFdHx8MCxYcil9Uz0tMX0sdGhpcy5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzPWZ1bmN0aW9uKEssZ3QsRXQseHQsRnQsVmUsVWUpe2lmKCEoSyYmSy5pc1dlYkdMUmVuZGVyVGFyZ2V0KSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0LiIpO3JldHVybn1sZXQgdHI9ZHQuZ2V0KEspLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihLLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZVZSE9PXZvaWQgMCYmKHRyPXRyW1VlXSksdHIpe1guYmluZEZyYW1lYnVmZmVyKDM2MTYwLHRyKTt0cnl7bGV0IEtlPUsudGV4dHVyZSxYcj1LZS5mb3JtYXQsX3I9S2UudHlwZTtpZihYciE9PVFvJiZiZS5jb252ZXJ0KFhyKSE9PWx0LmdldFBhcmFtZXRlcigzNTczOSkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO3JldHVybn1sZXQgUHI9X3I9PT1DdiYmKF90LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iil8fGN0LmlzV2ViR0wyJiZfdC5oYXMoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKSk7aWYoX3IhPT1aZCYmYmUuY29udmVydChfcikhPT1sdC5nZXRQYXJhbWV0ZXIoMzU3MzgpJiYhKF9yPT09amQmJihjdC5pc1dlYkdMMnx8X3QuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdCIpfHxfdC5oYXMoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKSkmJiFQcil7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpO3JldHVybn1sdC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKDM2MTYwKT09PTM2MDUzP2d0Pj0wJiZndDw9Sy53aWR0aC14dCYmRXQ+PTAmJkV0PD1LLmhlaWdodC1GdCYmbHQucmVhZFBpeGVscyhndCxFdCx4dCxGdCxiZS5jb252ZXJ0KFhyKSxiZS5jb252ZXJ0KF9yKSxWZSk6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZWFkUGl4ZWxzIGZyb20gcmVuZGVyVGFyZ2V0IGZhaWxlZC4gRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLiIpfWZpbmFsbHl7bGV0IEtlPWIhPT1udWxsP2R0LmdldChiKS5fX3dlYmdsRnJhbWVidWZmZXI6bnVsbDtYLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxLZSl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oSyxndCxFdD0wKXtpZihndC5pc0ZyYW1lYnVmZmVyVGV4dHVyZSE9PSEwKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBjb3B5RnJhbWVidWZmZXJUb1RleHR1cmUoKSBjYW4gb25seSBiZSB1c2VkIHdpdGggRnJhbWVidWZmZXJUZXh0dXJlLiIpO3JldHVybn1sZXQgeHQ9TWF0aC5wb3coMiwtRXQpLEZ0PU1hdGguZmxvb3IoZ3QuaW1hZ2Uud2lkdGgqeHQpLFZlPU1hdGguZmxvb3IoZ3QuaW1hZ2UuaGVpZ2h0Knh0KTtxLnNldFRleHR1cmUyRChndCwwKSxsdC5jb3B5VGV4U3ViSW1hZ2UyRCgzNTUzLEV0LDAsMCxLLngsSy55LEZ0LFZlKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5jb3B5VGV4dHVyZVRvVGV4dHVyZT1mdW5jdGlvbihLLGd0LEV0LHh0PTApe2xldCBGdD1ndC5pbWFnZS53aWR0aCxWZT1ndC5pbWFnZS5oZWlnaHQsVWU9YmUuY29udmVydChFdC5mb3JtYXQpLHRyPWJlLmNvbnZlcnQoRXQudHlwZSk7cS5zZXRUZXh0dXJlMkQoRXQsMCksbHQucGl4ZWxTdG9yZWkoMzc0NDAsRXQuZmxpcFkpLGx0LnBpeGVsU3RvcmVpKDM3NDQxLEV0LnByZW11bHRpcGx5QWxwaGEpLGx0LnBpeGVsU3RvcmVpKDMzMTcsRXQudW5wYWNrQWxpZ25tZW50KSxndC5pc0RhdGFUZXh0dXJlP2x0LnRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LEZ0LFZlLFVlLHRyLGd0LmltYWdlLmRhdGEpOmd0LmlzQ29tcHJlc3NlZFRleHR1cmU/bHQuY29tcHJlc3NlZFRleFN1YkltYWdlMkQoMzU1Myx4dCxLLngsSy55LGd0Lm1pcG1hcHNbMF0ud2lkdGgsZ3QubWlwbWFwc1swXS5oZWlnaHQsVWUsZ3QubWlwbWFwc1swXS5kYXRhKTpsdC50ZXhTdWJJbWFnZTJEKDM1NTMseHQsSy54LEsueSxVZSx0cixndC5pbWFnZSkseHQ9PT0wJiZFdC5nZW5lcmF0ZU1pcG1hcHMmJmx0LmdlbmVyYXRlTWlwbWFwKDM1NTMpLFgudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oSyxndCxFdCx4dCxGdD0wKXtpZihnLmlzV2ViR0wxUmVuZGVyZXIpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO3JldHVybn1sZXQgVmU9Sy5tYXgueC1LLm1pbi54KzEsVWU9Sy5tYXgueS1LLm1pbi55KzEsdHI9Sy5tYXguei1LLm1pbi56KzEsS2U9YmUuY29udmVydCh4dC5mb3JtYXQpLFhyPWJlLmNvbnZlcnQoeHQudHlwZSksX3I7aWYoeHQuaXNEYXRhVGV4dHVyZTNEKXEuc2V0VGV4dHVyZTNEKHh0LDApLF9yPTMyODc5O2Vsc2UgaWYoeHQuaXNEYXRhVGV4dHVyZTJEQXJyYXkpcS5zZXRUZXh0dXJlMkRBcnJheSh4dCwwKSxfcj0zNTg2NjtlbHNle2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtyZXR1cm59bHQucGl4ZWxTdG9yZWkoMzc0NDAseHQuZmxpcFkpLGx0LnBpeGVsU3RvcmVpKDM3NDQxLHh0LnByZW11bHRpcGx5QWxwaGEpLGx0LnBpeGVsU3RvcmVpKDMzMTcseHQudW5wYWNrQWxpZ25tZW50KTtsZXQgUHI9bHQuZ2V0UGFyYW1ldGVyKDMzMTQpLFhuPWx0LmdldFBhcmFtZXRlcigzMjg3OCksbnA9bHQuZ2V0UGFyYW1ldGVyKDMzMTYpLHVtPWx0LmdldFBhcmFtZXRlcigzMzE1KSxtcj1sdC5nZXRQYXJhbWV0ZXIoMzI4NzcpLEZsPUV0LmlzQ29tcHJlc3NlZFRleHR1cmU/RXQubWlwbWFwc1swXTpFdC5pbWFnZTtsdC5waXhlbFN0b3JlaSgzMzE0LEZsLndpZHRoKSxsdC5waXhlbFN0b3JlaSgzMjg3OCxGbC5oZWlnaHQpLGx0LnBpeGVsU3RvcmVpKDMzMTYsSy5taW4ueCksbHQucGl4ZWxTdG9yZWkoMzMxNSxLLm1pbi55KSxsdC5waXhlbFN0b3JlaSgzMjg3NyxLLm1pbi56KSxFdC5pc0RhdGFUZXh0dXJlfHxFdC5pc0RhdGFUZXh0dXJlM0Q/bHQudGV4U3ViSW1hZ2UzRChfcixGdCxndC54LGd0LnksZ3QueixWZSxVZSx0cixLZSxYcixGbC5kYXRhKTpFdC5pc0NvbXByZXNzZWRUZXh0dXJlPyhjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXIuY29weVRleHR1cmVUb1RleHR1cmUzRDogdW50ZXN0ZWQgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBzcmNUZXh0dXJlLiIpLGx0LmNvbXByZXNzZWRUZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLEZsLmRhdGEpKTpsdC50ZXhTdWJJbWFnZTNEKF9yLEZ0LGd0LngsZ3QueSxndC56LFZlLFVlLHRyLEtlLFhyLEZsKSxsdC5waXhlbFN0b3JlaSgzMzE0LFByKSxsdC5waXhlbFN0b3JlaSgzMjg3OCxYbiksbHQucGl4ZWxTdG9yZWkoMzMxNixucCksbHQucGl4ZWxTdG9yZWkoMzMxNSx1bSksbHQucGl4ZWxTdG9yZWkoMzI4NzcsbXIpLEZ0PT09MCYmeHQuZ2VuZXJhdGVNaXBtYXBzJiZsdC5nZW5lcmF0ZU1pcG1hcChfciksWC51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oSyl7cS5zZXRUZXh0dXJlMkQoSywwKSxYLnVuYmluZFRleHR1cmUoKX0sdGhpcy5yZXNldFN0YXRlPWZ1bmN0aW9uKCl7eT0wLHg9MCxiPW51bGwsWC5yZXNldCgpLG50LnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX18hPSJ1bmRlZmluZWQiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1ybi5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwO3ZhciBtVT1jbGFzcyBleHRlbmRzIHJue307bVUucHJvdG90eXBlLmlzV2ViR0wxUmVuZGVyZXI9ITA7dmFyIE92PWNsYXNze2NvbnN0cnVjdG9yKHQscj0yNWUtNSl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IG5lKHQpLHRoaXMuZGVuc2l0eT1yfWNsb25lKCl7cmV0dXJuIG5ldyBPdih0aGlzLmNvbG9yLHRoaXMuZGVuc2l0eSl9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZ0V4cDIiLGNvbG9yOnRoaXMuY29sb3IuZ2V0SGV4KCksZGVuc2l0eTp0aGlzLmRlbnNpdHl9fX07T3YucHJvdG90eXBlLmlzRm9nRXhwMj0hMDt2YXIgenY9Y2xhc3N7Y29uc3RydWN0b3IodCxyPTEsbj0xZTMpe3RoaXMubmFtZT0iIix0aGlzLmNvbG9yPW5ldyBuZSh0KSx0aGlzLm5lYXI9cix0aGlzLmZhcj1ufWNsb25lKCl7cmV0dXJuIG5ldyB6dih0aGlzLmNvbG9yLHRoaXMubmVhcix0aGlzLmZhcil9dG9KU09OKCl7cmV0dXJue3R5cGU6IkZvZyIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxuZWFyOnRoaXMubmVhcixmYXI6dGhpcy5mYXJ9fX07enYucHJvdG90eXBlLmlzRm9nPSEwO3ZhciBxMD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNjZW5lIix0aGlzLmJhY2tncm91bmQ9bnVsbCx0aGlzLmVudmlyb25tZW50PW51bGwsdGhpcy5mb2c9bnVsbCx0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9bnVsbCx0aGlzLmF1dG9VcGRhdGU9ITAsdHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgib2JzZXJ2ZSIse2RldGFpbDp0aGlzfSkpfWNvcHkodCxyKXtyZXR1cm4gc3VwZXIuY29weSh0LHIpLHQuYmFja2dyb3VuZCE9PW51bGwmJih0aGlzLmJhY2tncm91bmQ9dC5iYWNrZ3JvdW5kLmNsb25lKCkpLHQuZW52aXJvbm1lbnQhPT1udWxsJiYodGhpcy5lbnZpcm9ubWVudD10LmVudmlyb25tZW50LmNsb25lKCkpLHQuZm9nIT09bnVsbCYmKHRoaXMuZm9nPXQuZm9nLmNsb25lKCkpLHQub3ZlcnJpZGVNYXRlcmlhbCE9PW51bGwmJih0aGlzLm92ZXJyaWRlTWF0ZXJpYWw9dC5vdmVycmlkZU1hdGVyaWFsLmNsb25lKCkpLHRoaXMuYXV0b1VwZGF0ZT10LmF1dG9VcGRhdGUsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHRoaXMuZm9nIT09bnVsbCYmKHIub2JqZWN0LmZvZz10aGlzLmZvZy50b0pTT04oKSkscn19O3EwLnByb3RvdHlwZS5pc1NjZW5lPSEwO3ZhciBlbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIpe3RoaXMuYXJyYXk9dCx0aGlzLnN0cmlkZT1yLHRoaXMuY291bnQ9dCE9PXZvaWQgMD90Lmxlbmd0aC9yOjAsdGhpcy51c2FnZT1XMyx0aGlzLnVwZGF0ZVJhbmdlPXtvZmZzZXQ6MCxjb3VudDotMX0sdGhpcy52ZXJzaW9uPTAsdGhpcy51dWlkPU5sKCl9b25VcGxvYWRDYWxsYmFjaygpe31zZXQgbmVlZHNVcGRhdGUodCl7dD09PSEwJiZ0aGlzLnZlcnNpb24rK31zZXRVc2FnZSh0KXtyZXR1cm4gdGhpcy51c2FnZT10LHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLmNvdW50PXQuY291bnQsdGhpcy5zdHJpZGU9dC5zdHJpZGUsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQscixuKXt0Kj10aGlzLnN0cmlkZSxuKj1yLnN0cmlkZTtmb3IobGV0IGk9MCxvPXRoaXMuc3RyaWRlO2k8bztpKyspdGhpcy5hcnJheVt0K2ldPXIuYXJyYXlbbitpXTtyZXR1cm4gdGhpc31zZXQodCxyPTApe3JldHVybiB0aGlzLmFycmF5LnNldCh0LHIpLHRoaXN9Y2xvbmUodCl7dC5hcnJheUJ1ZmZlcnM9PT12b2lkIDAmJih0LmFycmF5QnVmZmVycz17fSksdGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9PT12b2lkIDAmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1ObCgpKSx0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09PT12b2lkIDAmJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09dGhpcy5hcnJheS5zbGljZSgwKS5idWZmZXIpO2xldCByPW5ldyB0aGlzLmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSksbj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihyLHRoaXMuc3RyaWRlKTtyZXR1cm4gbi5zZXRVc2FnZSh0aGlzLnVzYWdlKSxufW9uVXBsb2FkKHQpe3JldHVybiB0aGlzLm9uVXBsb2FkQ2FsbGJhY2s9dCx0aGlzfXRvSlNPTih0KXtyZXR1cm4gdC5hcnJheUJ1ZmZlcnM9PT12b2lkIDAmJih0LmFycmF5QnVmZmVycz17fSksdGhpcy5hcnJheS5idWZmZXIuX3V1aWQ9PT12b2lkIDAmJih0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZD1ObCgpKSx0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09PT12b2lkIDAmJih0LmFycmF5QnVmZmVyc1t0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZF09QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXkuYnVmZmVyKSkpLHt1dWlkOnRoaXMudXVpZCxidWZmZXI6dGhpcy5hcnJheS5idWZmZXIuX3V1aWQsdHlwZTp0aGlzLmFycmF5LmNvbnN0cnVjdG9yLm5hbWUsc3RyaWRlOnRoaXMuc3RyaWRlfX19O2VtLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyPSEwO3ZhciBBaT1uZXcgaix0cD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbixpPSExKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXQsdGhpcy5pdGVtU2l6ZT1yLHRoaXMub2Zmc2V0PW4sdGhpcy5ub3JtYWxpemVkPWk9PT0hMH1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fWdldCBhcnJheSgpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9c2V0IG5lZWRzVXBkYXRlKHQpe3RoaXMuZGF0YS5uZWVkc1VwZGF0ZT10fWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuZGF0YS5jb3VudDtyPG47cisrKUFpLng9dGhpcy5nZXRYKHIpLEFpLnk9dGhpcy5nZXRZKHIpLEFpLno9dGhpcy5nZXRaKHIpLEFpLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihyLEFpLngsQWkueSxBaS56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IHI9MCxuPXRoaXMuY291bnQ7cjxuO3IrKylBaS54PXRoaXMuZ2V0WChyKSxBaS55PXRoaXMuZ2V0WShyKSxBaS56PXRoaXMuZ2V0WihyKSxBaS5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihyLEFpLngsQWkueSxBaS56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCByPTAsbj10aGlzLmNvdW50O3I8bjtyKyspQWkueD10aGlzLmdldFgociksQWkueT10aGlzLmdldFkociksQWkuej10aGlzLmdldFoociksQWkudHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKHIsQWkueCxBaS55LEFpLnopO3JldHVybiB0aGlzfXNldFgodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09cix0aGlzfXNldFkodCxyKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1yLHRoaXN9c2V0Wih0LHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPXIsdGhpc31zZXRXKHQscil7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109cix0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdfWdldFkodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19Z2V0Wih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX1nZXRXKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfXNldFhZKHQscixuKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09cix0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXN9c2V0WFlaKHQscixuLGkpe3JldHVybiB0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCx0aGlzLmRhdGEuYXJyYXlbdCswXT1yLHRoaXMuZGF0YS5hcnJheVt0KzFdPW4sdGhpcy5kYXRhLmFycmF5W3QrMl09aSx0aGlzfXNldFhZWlcodCxyLG4saSxvKXtyZXR1cm4gdD10KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQsdGhpcy5kYXRhLmFycmF5W3QrMF09cix0aGlzLmRhdGEuYXJyYXlbdCsxXT1uLHRoaXMuZGF0YS5hcnJheVt0KzJdPWksdGhpcy5kYXRhLmFycmF5W3QrM109byx0aGlzfWNsb25lKHQpe2lmKHQ9PT12b2lkIDApe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHRoaXMuY291bnQ7bisrKXtsZXQgaT1uKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKylyLnB1c2godGhpcy5kYXRhLmFycmF5W2krb10pfXJldHVybiBuZXcgSmUobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IociksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfWVsc2UgcmV0dXJuIHQuaW50ZXJsZWF2ZWRCdWZmZXJzPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEuY2xvbmUodCkpLG5ldyB0cCh0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0sdGhpcy5pdGVtU2l6ZSx0aGlzLm9mZnNldCx0aGlzLm5vcm1hbGl6ZWQpfXRvSlNPTih0KXtpZih0PT09dm9pZCAwKXtjb25zb2xlLmxvZygiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUudG9KU09OKCk6IFNlcmlhbGl6aW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHRoaXMuY291bnQ7bisrKXtsZXQgaT1uKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKylyLnB1c2godGhpcy5kYXRhLmFycmF5W2krb10pfXJldHVybntpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OnIsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fWVsc2UgcmV0dXJuIHQuaW50ZXJsZWF2ZWRCdWZmZXJzPT09dm9pZCAwJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnM9e30pLHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT09PXZvaWQgMCYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzW3RoaXMuZGF0YS51dWlkXT10aGlzLmRhdGEudG9KU09OKHQpKSx7aXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZTohMCxpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLGRhdGE6dGhpcy5kYXRhLnV1aWQsb2Zmc2V0OnRoaXMub2Zmc2V0LG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX19O3RwLnByb3RvdHlwZS5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBpTT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJTcHJpdGVNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5hbHBoYU1hcD1udWxsLHRoaXMucm90YXRpb249MCx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLnJvdGF0aW9uPXQucm90YXRpb24sdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O2lNLnByb3RvdHlwZS5pc1Nwcml0ZU1hdGVyaWFsPSEwO3ZhciBOMyxOUD1uZXcgaixEMz1uZXcgaixPMz1uZXcgaix6Mz1uZXcgTHQsRFA9bmV3IEx0LCRmZT1uZXcgTWUsSVY9bmV3IGosT1A9bmV3IGosTFY9bmV3IGosWXVlPW5ldyBMdCxtdXQ9bmV3IEx0LGp1ZT1uZXcgTHQsb009Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0KXtpZihzdXBlcigpLHRoaXMudHlwZT0iU3ByaXRlIixOMz09PXZvaWQgMCl7TjM9bmV3IFBlO2xldCByPW5ldyBGbG9hdDMyQXJyYXkoWy0uNSwtLjUsMCwwLDAsLjUsLS41LDAsMSwwLC41LC41LDAsMSwxLC0uNSwuNSwwLDAsMV0pLG49bmV3IGVtKHIsNSk7TjMuc2V0SW5kZXgoWzAsMSwyLDAsMiwzXSksTjMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHRwKG4sMywwLCExKSksTjMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHRwKG4sMiwzLCExKSl9dGhpcy5nZW9tZXRyeT1OMyx0aGlzLm1hdGVyaWFsPXQhPT12b2lkIDA/dDpuZXcgaU0sdGhpcy5jZW50ZXI9bmV3IEx0KC41LC41KX1yYXljYXN0KHQscil7dC5jYW1lcmE9PT1udWxsJiZjb25zb2xlLmVycm9yKCdUSFJFRS5TcHJpdGU6ICJSYXljYXN0ZXIuY2FtZXJhIiBuZWVkcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gcmF5Y2FzdCBhZ2FpbnN0IHNwcml0ZXMuJyksRDMuc2V0RnJvbU1hdHJpeFNjYWxlKHRoaXMubWF0cml4V29ybGQpLCRmZS5jb3B5KHQuY2FtZXJhLm1hdHJpeFdvcmxkKSx0aGlzLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKHQuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSx0aGlzLm1hdHJpeFdvcmxkKSxPMy5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tb2RlbFZpZXdNYXRyaXgpLHQuY2FtZXJhLmlzUGVyc3BlY3RpdmVDYW1lcmEmJnRoaXMubWF0ZXJpYWwuc2l6ZUF0dGVudWF0aW9uPT09ITEmJkQzLm11bHRpcGx5U2NhbGFyKC1PMy56KTtsZXQgbj10aGlzLm1hdGVyaWFsLnJvdGF0aW9uLGksbztuIT09MCYmKG89TWF0aC5jb3MobiksaT1NYXRoLnNpbihuKSk7bGV0IGE9dGhpcy5jZW50ZXI7a1YoSVYuc2V0KC0uNSwtLjUsMCksTzMsYSxEMyxpLG8pLGtWKE9QLnNldCguNSwtLjUsMCksTzMsYSxEMyxpLG8pLGtWKExWLnNldCguNSwuNSwwKSxPMyxhLEQzLGksbyksWXVlLnNldCgwLDApLG11dC5zZXQoMSwwKSxqdWUuc2V0KDEsMSk7bGV0IHM9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoSVYsT1AsTFYsITEsTlApO2lmKHM9PT1udWxsJiYoa1YoT1Auc2V0KC0uNSwuNSwwKSxPMyxhLEQzLGksbyksbXV0LnNldCgwLDEpLHM9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoSVYsTFYsT1AsITEsTlApLHM9PT1udWxsKSlyZXR1cm47bGV0IGw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oTlApO2w8dC5uZWFyfHxsPnQuZmFyfHxyLnB1c2goe2Rpc3RhbmNlOmwscG9pbnQ6TlAuY2xvbmUoKSx1djphaS5nZXRVVihOUCxJVixPUCxMVixZdWUsbXV0LGp1ZSxuZXcgTHQpLGZhY2U6bnVsbCxvYmplY3Q6dGhpc30pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdC5jZW50ZXIhPT12b2lkIDAmJnRoaXMuY2VudGVyLmNvcHkodC5jZW50ZXIpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzfX07b00ucHJvdG90eXBlLmlzU3ByaXRlPSEwO2Z1bmN0aW9uIGtWKGUsdCxyLG4saSxvKXt6My5zdWJWZWN0b3JzKGUscikuYWRkU2NhbGFyKC41KS5tdWx0aXBseShuKSxpIT09dm9pZCAwPyhEUC54PW8qejMueC1pKnozLnksRFAueT1pKnozLngrbyp6My55KTpEUC5jb3B5KHozKSxlLmNvcHkodCksZS54Kz1EUC54LGUueSs9RFAueSxlLmFwcGx5TWF0cml4NCgkZmUpfXZhciBSVj1uZXcgaixYdWU9bmV3IGosZ1U9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fY3VycmVudExldmVsPTAsdGhpcy50eXBlPSJMT0QiLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMse2xldmVsczp7ZW51bWVyYWJsZTohMCx2YWx1ZTpbXX0saXNMT0Q6e3ZhbHVlOiEwfX0pLHRoaXMuYXV0b1VwZGF0ZT0hMH1jb3B5KHQpe3N1cGVyLmNvcHkodCwhMSk7bGV0IHI9dC5sZXZlbHM7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXtsZXQgbz1yW25dO3RoaXMuYWRkTGV2ZWwoby5vYmplY3QuY2xvbmUoKSxvLmRpc3RhbmNlKX1yZXR1cm4gdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzfWFkZExldmVsKHQscj0wKXtyPU1hdGguYWJzKHIpO2xldCBuPXRoaXMubGV2ZWxzLGk7Zm9yKGk9MDtpPG4ubGVuZ3RoJiYhKHI8bltpXS5kaXN0YW5jZSk7aSsrKTtyZXR1cm4gbi5zcGxpY2UoaSwwLHtkaXN0YW5jZTpyLG9iamVjdDp0fSksdGhpcy5hZGQodCksdGhpc31nZXRDdXJyZW50TGV2ZWwoKXtyZXR1cm4gdGhpcy5fY3VycmVudExldmVsfWdldE9iamVjdEZvckRpc3RhbmNlKHQpe2xldCByPXRoaXMubGV2ZWxzO2lmKHIubGVuZ3RoPjApe2xldCBuLGk7Zm9yKG49MSxpPXIubGVuZ3RoO248aSYmISh0PHJbbl0uZGlzdGFuY2UpO24rKyk7cmV0dXJuIHJbbi0xXS5vYmplY3R9cmV0dXJuIG51bGx9cmF5Y2FzdCh0LHIpe2lmKHRoaXMubGV2ZWxzLmxlbmd0aD4wKXtSVi5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7bGV0IGk9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oUlYpO3RoaXMuZ2V0T2JqZWN0Rm9yRGlzdGFuY2UoaSkucmF5Y2FzdCh0LHIpfX11cGRhdGUodCl7bGV0IHI9dGhpcy5sZXZlbHM7aWYoci5sZW5ndGg+MSl7UlYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQubWF0cml4V29ybGQpLFh1ZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCk7bGV0IG49UlYuZGlzdGFuY2VUbyhYdWUpL3Quem9vbTtyWzBdLm9iamVjdC52aXNpYmxlPSEwO2xldCBpLG87Zm9yKGk9MSxvPXIubGVuZ3RoO2k8byYmbj49cltpXS5kaXN0YW5jZTtpKyspcltpLTFdLm9iamVjdC52aXNpYmxlPSExLHJbaV0ub2JqZWN0LnZpc2libGU9ITA7Zm9yKHRoaXMuX2N1cnJlbnRMZXZlbD1pLTE7aTxvO2krKylyW2ldLm9iamVjdC52aXNpYmxlPSExfX10b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3RoaXMuYXV0b1VwZGF0ZT09PSExJiYoci5vYmplY3QuYXV0b1VwZGF0ZT0hMSksci5vYmplY3QubGV2ZWxzPVtdO2xldCBuPXRoaXMubGV2ZWxzO2ZvcihsZXQgaT0wLG89bi5sZW5ndGg7aTxvO2krKyl7bGV0IGE9bltpXTtyLm9iamVjdC5sZXZlbHMucHVzaCh7b2JqZWN0OmEub2JqZWN0LnV1aWQsZGlzdGFuY2U6YS5kaXN0YW5jZX0pfXJldHVybiByfX0sJHVlPW5ldyBqLEt1ZT1uZXcgZW4sWnVlPW5ldyBlbixJZ3I9bmV3IGosSnVlPW5ldyBNZSxhTT1jbGFzcyBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlNraW5uZWRNZXNoIix0aGlzLmJpbmRNb2RlPSJhdHRhY2hlZCIsdGhpcy5iaW5kTWF0cml4PW5ldyBNZSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlPW5ldyBNZX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYmluZE1vZGU9dC5iaW5kTW9kZSx0aGlzLmJpbmRNYXRyaXguY29weSh0LmJpbmRNYXRyaXgpLHRoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0LmJpbmRNYXRyaXhJbnZlcnNlKSx0aGlzLnNrZWxldG9uPXQuc2tlbGV0b24sdGhpc31iaW5kKHQscil7dGhpcy5za2VsZXRvbj10LHI9PT12b2lkIDAmJih0aGlzLnVwZGF0ZU1hdHJpeFdvcmxkKCEwKSx0aGlzLnNrZWxldG9uLmNhbGN1bGF0ZUludmVyc2VzKCkscj10aGlzLm1hdHJpeFdvcmxkKSx0aGlzLmJpbmRNYXRyaXguY29weShyKSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkocikuaW52ZXJ0KCl9cG9zZSgpe3RoaXMuc2tlbGV0b24ucG9zZSgpfW5vcm1hbGl6ZVNraW5XZWlnaHRzKCl7bGV0IHQ9bmV3IGVuLHI9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnNraW5XZWlnaHQ7Zm9yKGxldCBuPTAsaT1yLmNvdW50O248aTtuKyspe3QueD1yLmdldFgobiksdC55PXIuZ2V0WShuKSx0Lno9ci5nZXRaKG4pLHQudz1yLmdldFcobik7bGV0IG89MS90Lm1hbmhhdHRhbkxlbmd0aCgpO28hPT0xLzA/dC5tdWx0aXBseVNjYWxhcihvKTp0LnNldCgxLDAsMCwwKSxyLnNldFhZWlcobix0LngsdC55LHQueix0LncpfX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLmJpbmRNb2RlPT09ImF0dGFjaGVkIj90aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodGhpcy5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk6dGhpcy5iaW5kTW9kZT09PSJkZXRhY2hlZCI/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMuYmluZE1hdHJpeCkuaW52ZXJ0KCk6Y29uc29sZS53YXJuKCJUSFJFRS5Ta2lubmVkTWVzaDogVW5yZWNvZ25pemVkIGJpbmRNb2RlOiAiK3RoaXMuYmluZE1vZGUpfWJvbmVUcmFuc2Zvcm0odCxyKXtsZXQgbj10aGlzLnNrZWxldG9uLGk9dGhpcy5nZW9tZXRyeTtLdWUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShpLmF0dHJpYnV0ZXMuc2tpbkluZGV4LHQpLFp1ZS5mcm9tQnVmZmVyQXR0cmlidXRlKGkuYXR0cmlidXRlcy5za2luV2VpZ2h0LHQpLCR1ZS5jb3B5KHIpLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXgpLHIuc2V0KDAsMCwwKTtmb3IobGV0IG89MDtvPDQ7bysrKXtsZXQgYT1adWUuZ2V0Q29tcG9uZW50KG8pO2lmKGEhPT0wKXtsZXQgcz1LdWUuZ2V0Q29tcG9uZW50KG8pO0p1ZS5tdWx0aXBseU1hdHJpY2VzKG4uYm9uZXNbc10ubWF0cml4V29ybGQsbi5ib25lSW52ZXJzZXNbc10pLHIuYWRkU2NhbGVkVmVjdG9yKElnci5jb3B5KCR1ZSkuYXBwbHlNYXRyaXg0KEp1ZSksYSl9fXJldHVybiByLmFwcGx5TWF0cml4NCh0aGlzLmJpbmRNYXRyaXhJbnZlcnNlKX19O2FNLnByb3RvdHlwZS5pc1NraW5uZWRNZXNoPSEwO3ZhciBzTT1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX07c00ucHJvdG90eXBlLmlzQm9uZT0hMDt2YXIgSmQ9Y2xhc3MgZXh0ZW5kcyB4aXtjb25zdHJ1Y3Rvcih0PW51bGwscj0xLG49MSxpLG8sYSxzLGwsYz1MaSx1PUxpLGgsZil7c3VwZXIobnVsbCxhLHMsbCxjLHUsaSxvLGgsZiksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOnIsaGVpZ2h0Om59LHRoaXMubWFnRmlsdGVyPWMsdGhpcy5taW5GaWx0ZXI9dSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtKZC5wcm90b3R5cGUuaXNEYXRhVGV4dHVyZT0hMDt2YXIgUXVlPW5ldyBNZSxMZ3I9bmV3IE1lLGxNPWNsYXNze2NvbnN0cnVjdG9yKHQ9W10scj1bXSl7dGhpcy51dWlkPU5sKCksdGhpcy5ib25lcz10LnNsaWNlKDApLHRoaXMuYm9uZUludmVyc2VzPXIsdGhpcy5ib25lTWF0cmljZXM9bnVsbCx0aGlzLmJvbmVUZXh0dXJlPW51bGwsdGhpcy5ib25lVGV4dHVyZVNpemU9MCx0aGlzLmZyYW1lPS0xLHRoaXMuaW5pdCgpfWluaXQoKXtsZXQgdD10aGlzLmJvbmVzLHI9dGhpcy5ib25lSW52ZXJzZXM7aWYodGhpcy5ib25lTWF0cmljZXM9bmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCoxNiksci5sZW5ndGg9PT0wKXRoaXMuY2FsY3VsYXRlSW52ZXJzZXMoKTtlbHNlIGlmKHQubGVuZ3RoIT09ci5sZW5ndGgpe2NvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE51bWJlciBvZiBpbnZlcnNlIGJvbmUgbWF0cmljZXMgZG9lcyBub3QgbWF0Y2ggYW1vdW50IG9mIGJvbmVzLiIpLHRoaXMuYm9uZUludmVyc2VzPVtdO2ZvcihsZXQgbj0wLGk9dGhpcy5ib25lcy5sZW5ndGg7bjxpO24rKyl0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNZSl9fWNhbGN1bGF0ZUludmVyc2VzKCl7dGhpcy5ib25lSW52ZXJzZXMubGVuZ3RoPTA7Zm9yKGxldCB0PTAscj10aGlzLmJvbmVzLmxlbmd0aDt0PHI7dCsrKXtsZXQgbj1uZXcgTWU7dGhpcy5ib25lc1t0XSYmbi5jb3B5KHRoaXMuYm9uZXNbdF0ubWF0cml4V29ybGQpLmludmVydCgpLHRoaXMuYm9uZUludmVyc2VzLnB1c2gobil9fXBvc2UoKXtmb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPXRoaXMuYm9uZXNbdF07biYmbi5tYXRyaXhXb3JsZC5jb3B5KHRoaXMuYm9uZUludmVyc2VzW3RdKS5pbnZlcnQoKX1mb3IobGV0IHQ9MCxyPXRoaXMuYm9uZXMubGVuZ3RoO3Q8cjt0Kyspe2xldCBuPXRoaXMuYm9uZXNbdF07biYmKG4ucGFyZW50JiZuLnBhcmVudC5pc0JvbmU/KG4ubWF0cml4LmNvcHkobi5wYXJlbnQubWF0cml4V29ybGQpLmludmVydCgpLG4ubWF0cml4Lm11bHRpcGx5KG4ubWF0cml4V29ybGQpKTpuLm1hdHJpeC5jb3B5KG4ubWF0cml4V29ybGQpLG4ubWF0cml4LmRlY29tcG9zZShuLnBvc2l0aW9uLG4ucXVhdGVybmlvbixuLnNjYWxlKSl9fXVwZGF0ZSgpe2xldCB0PXRoaXMuYm9uZXMscj10aGlzLmJvbmVJbnZlcnNlcyxuPXRoaXMuYm9uZU1hdHJpY2VzLGk9dGhpcy5ib25lVGV4dHVyZTtmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPXRbb10/dFtvXS5tYXRyaXhXb3JsZDpMZ3I7UXVlLm11bHRpcGx5TWF0cmljZXMocyxyW29dKSxRdWUudG9BcnJheShuLG8qMTYpfWkhPT1udWxsJiYoaS5uZWVkc1VwZGF0ZT0hMCl9Y2xvbmUoKXtyZXR1cm4gbmV3IGxNKHRoaXMuYm9uZXMsdGhpcy5ib25lSW52ZXJzZXMpfWNvbXB1dGVCb25lVGV4dHVyZSgpe2xldCB0PU1hdGguc3FydCh0aGlzLmJvbmVzLmxlbmd0aCo0KTt0PWtmZSh0KSx0PU1hdGgubWF4KHQsNCk7bGV0IHI9bmV3IEZsb2F0MzJBcnJheSh0KnQqNCk7ci5zZXQodGhpcy5ib25lTWF0cmljZXMpO2xldCBuPW5ldyBKZChyLHQsdCxRbyxqZCk7cmV0dXJuIG4ubmVlZHNVcGRhdGU9ITAsdGhpcy5ib25lTWF0cmljZXM9cix0aGlzLmJvbmVUZXh0dXJlPW4sdGhpcy5ib25lVGV4dHVyZVNpemU9dCx0aGlzfWdldEJvbmVCeU5hbWUodCl7Zm9yKGxldCByPTAsbj10aGlzLmJvbmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLmJvbmVzW3JdO2lmKGkubmFtZT09PXQpcmV0dXJuIGl9fWRpc3Bvc2UoKXt0aGlzLmJvbmVUZXh0dXJlIT09bnVsbCYmKHRoaXMuYm9uZVRleHR1cmUuZGlzcG9zZSgpLHRoaXMuYm9uZVRleHR1cmU9bnVsbCl9ZnJvbUpTT04odCxyKXt0aGlzLnV1aWQ9dC51dWlkO2ZvcihsZXQgbj0wLGk9dC5ib25lcy5sZW5ndGg7bjxpO24rKyl7bGV0IG89dC5ib25lc1tuXSxhPXJbb107YT09PXZvaWQgMCYmKGNvbnNvbGUud2FybigiVEhSRUUuU2tlbGV0b246IE5vIGJvbmUgZm91bmQgd2l0aCBVVUlEOiIsbyksYT1uZXcgc00pLHRoaXMuYm9uZXMucHVzaChhKSx0aGlzLmJvbmVJbnZlcnNlcy5wdXNoKG5ldyBNZSgpLmZyb21BcnJheSh0LmJvbmVJbnZlcnNlc1tuXSkpfXJldHVybiB0aGlzLmluaXQoKSx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiU2tlbGV0b24iLGdlbmVyYXRvcjoiU2tlbGV0b24udG9KU09OIn0sYm9uZXM6W10sYm9uZUludmVyc2VzOltdfTt0LnV1aWQ9dGhpcy51dWlkO2xldCByPXRoaXMuYm9uZXMsbj10aGlzLmJvbmVJbnZlcnNlcztmb3IobGV0IGk9MCxvPXIubGVuZ3RoO2k8bztpKyspe2xldCBhPXJbaV07dC5ib25lcy5wdXNoKGEudXVpZCk7bGV0IHM9bltpXTt0LmJvbmVJbnZlcnNlcy5wdXNoKHMudG9BcnJheSgpKX1yZXR1cm4gdH19LHJtPWNsYXNzIGV4dGVuZHMgSmV7Y29uc3RydWN0b3IodCxyLG4saT0xKXt0eXBlb2Ygbj09Im51bWJlciImJihpPW4sbj0hMSxjb25zb2xlLmVycm9yKCJUSFJFRS5JbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBub3JtYWxpemVkIGFzIHRoZSB0aGlyZCBhcmd1bWVudC4iKSksc3VwZXIodCxyLG4pLHRoaXMubWVzaFBlckF0dHJpYnV0ZT1pfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tZXNoUGVyQXR0cmlidXRlPXQubWVzaFBlckF0dHJpYnV0ZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0Lm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHQuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITAsdH19O3JtLnByb3RvdHlwZS5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgdGhlPW5ldyBNZSxlaGU9bmV3IE1lLE5WPVtdLHpQPW5ldyBlaSxuNj1jbGFzcyBleHRlbmRzIGVpe2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LHIpLHRoaXMuaW5zdGFuY2VNYXRyaXg9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkobioxNiksMTYpLHRoaXMuaW5zdGFuY2VDb2xvcj1udWxsLHRoaXMuY291bnQ9bix0aGlzLmZydXN0dW1DdWxsZWQ9ITF9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmluc3RhbmNlTWF0cml4LmNvcHkodC5pbnN0YW5jZU1hdHJpeCksdC5pbnN0YW5jZUNvbG9yIT09bnVsbCYmKHRoaXMuaW5zdGFuY2VDb2xvcj10Lmluc3RhbmNlQ29sb3IuY2xvbmUoKSksdGhpcy5jb3VudD10LmNvdW50LHRoaXN9Z2V0Q29sb3JBdCh0LHIpe3IuZnJvbUFycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfWdldE1hdHJpeEF0KHQscil7ci5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSx0KjE2KX1yYXljYXN0KHQscil7bGV0IG49dGhpcy5tYXRyaXhXb3JsZCxpPXRoaXMuY291bnQ7aWYoelAuZ2VvbWV0cnk9dGhpcy5nZW9tZXRyeSx6UC5tYXRlcmlhbD10aGlzLm1hdGVyaWFsLHpQLm1hdGVyaWFsIT09dm9pZCAwKWZvcihsZXQgbz0wO288aTtvKyspe3RoaXMuZ2V0TWF0cml4QXQobyx0aGUpLGVoZS5tdWx0aXBseU1hdHJpY2VzKG4sdGhlKSx6UC5tYXRyaXhXb3JsZD1laGUselAucmF5Y2FzdCh0LE5WKTtmb3IobGV0IGE9MCxzPU5WLmxlbmd0aDthPHM7YSsrKXtsZXQgbD1OVlthXTtsLmluc3RhbmNlSWQ9byxsLm9iamVjdD10aGlzLHIucHVzaChsKX1OVi5sZW5ndGg9MH19c2V0Q29sb3JBdCh0LHIpe3RoaXMuaW5zdGFuY2VDb2xvcj09PW51bGwmJih0aGlzLmluc3RhbmNlQ29sb3I9bmV3IHJtKG5ldyBGbG9hdDMyQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5jb3VudCozKSwzKSksci50b0FycmF5KHRoaXMuaW5zdGFuY2VDb2xvci5hcnJheSx0KjMpfXNldE1hdHJpeEF0KHQscil7ci50b0FycmF5KHRoaXMuaW5zdGFuY2VNYXRyaXguYXJyYXksdCoxNil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7fWRpc3Bvc2UoKXt0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc3Bvc2UifSl9fTtuNi5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBHaT1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtHaS5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgcmhlPW5ldyBqLG5oZT1uZXcgaixpaGU9bmV3IE1lLGd1dD1uZXcgSmYsRFY9bmV3IFpmLGNoPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodD1uZXcgUGUscj1uZXcgR2kpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1yLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9Y29tcHV0ZUxpbmVEaXN0YW5jZXMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSlpZih0LmluZGV4PT09bnVsbCl7bGV0IHI9dC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG49WzBdO2ZvcihsZXQgaT0xLG89ci5jb3VudDtpPG87aSsrKXJoZS5mcm9tQnVmZmVyQXR0cmlidXRlKHIsaS0xKSxuaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkpLG5baV09bltpLTFdLG5baV0rPXJoZS5kaXN0YW5jZVRvKG5oZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IHhlKG4sMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIik7cmV0dXJuIHRoaXN9cmF5Y2FzdCh0LHIpe2xldCBuPXRoaXMuZ2VvbWV0cnksaT10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuTGluZS50aHJlc2hvbGQsYT1uLmRyYXdSYW5nZTtpZihuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxEVi5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLERWLmFwcGx5TWF0cml4NChpKSxEVi5yYWRpdXMrPW8sdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShEVik9PT0hMSlyZXR1cm47aWhlLmNvcHkoaSkuaW52ZXJ0KCksZ3V0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChpaGUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnMsYz1uZXcgaix1PW5ldyBqLGg9bmV3IGosZj1uZXcgaixwPXRoaXMuaXNMaW5lU2VnbWVudHM/MjoxO2lmKG4uaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGQ9bi5pbmRleCxfPW4uYXR0cmlidXRlcy5wb3NpdGlvbjtpZihkIT09bnVsbCl7bGV0IHk9TWF0aC5tYXgoMCxhLnN0YXJ0KSx4PU1hdGgubWluKGQuY291bnQsYS5zdGFydCthLmNvdW50KTtmb3IobGV0IGI9eSxTPXgtMTtiPFM7Yis9cCl7bGV0IEM9ZC5nZXRYKGIpLFA9ZC5nZXRYKGIrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKF8sQyksdS5mcm9tQnVmZmVyQXR0cmlidXRlKF8sUCksZ3V0LmRpc3RhbmNlU3FUb1NlZ21lbnQoYyx1LGYsaCk+bCljb250aW51ZTtmLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtsZXQgTz10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhmKTtPPHQubmVhcnx8Tz50LmZhcnx8ci5wdXNoKHtkaXN0YW5jZTpPLHBvaW50OmguY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6YixmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX19ZWxzZXtsZXQgeT1NYXRoLm1heCgwLGEuc3RhcnQpLHg9TWF0aC5taW4oXy5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgYj15LFM9eC0xO2I8UztiKz1wKXtpZihjLmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxiKSx1LmZyb21CdWZmZXJBdHRyaWJ1dGUoXyxiKzEpLGd1dC5kaXN0YW5jZVNxVG9TZWdtZW50KGMsdSxmLGgpPmwpY29udGludWU7Zi5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCk7bGV0IFA9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oZik7UDx0Lm5lYXJ8fFA+dC5mYXJ8fHIucHVzaCh7ZGlzdGFuY2U6UCxwb2ludDpoLmNsb25lKCkuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpLGluZGV4OmIsZmFjZTpudWxsLGZhY2VJbmRleDpudWxsLG9iamVjdDp0aGlzfSl9fX1lbHNlIG4uaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IHI9dC5tb3JwaEF0dHJpYnV0ZXMsbj1PYmplY3Qua2V5cyhyKTtpZihuLmxlbmd0aD4wKXtsZXQgaT1yW25bMF1dO2lmKGkhPT12b2lkIDApe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLGE9aS5sZW5ndGg7bzxhO28rKyl7bGV0IHM9aVtvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtzXT1vfX19fWVsc2V7bGV0IHI9dC5tb3JwaFRhcmdldHM7ciE9PXZvaWQgMCYmci5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtjaC5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBvaGU9bmV3IGosYWhlPW5ldyBqLEFhPWNsYXNzIGV4dGVuZHMgY2h7Y29uc3RydWN0b3IodCxyKXtzdXBlcih0LHIpLHRoaXMudHlwZT0iTGluZVNlZ21lbnRzIn1jb21wdXRlTGluZURpc3RhbmNlcygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KWlmKHQuaW5kZXg9PT1udWxsKXtsZXQgcj10LmF0dHJpYnV0ZXMucG9zaXRpb24sbj1bXTtmb3IobGV0IGk9MCxvPXIuY291bnQ7aTxvO2krPTIpb2hlLmZyb21CdWZmZXJBdHRyaWJ1dGUocixpKSxhaGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLGkrMSksbltpXT1pPT09MD8wOm5baS0xXSxuW2krMV09bltpXStvaGUuZGlzdGFuY2VUbyhhaGUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyB4ZShuLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk6IENvbXB1dGF0aW9uIG9ubHkgcG9zc2libGUgd2l0aCBub24taW5kZXhlZCBCdWZmZXJHZW9tZXRyeS4iKTtlbHNlIHQuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZVNlZ21lbnRzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpc319O0FhLnByb3RvdHlwZS5pc0xpbmVTZWdtZW50cz0hMDt2YXIgaTY9Y2xhc3MgZXh0ZW5kcyBjaHtjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKHQsciksdGhpcy50eXBlPSJMaW5lTG9vcCJ9fTtpNi5wcm90b3R5cGUuaXNMaW5lTG9vcD0hMDt2YXIgbm09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLnNpemU9MSx0aGlzLnNpemVBdHRlbnVhdGlvbj0hMCx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5zaXplPXQuc2l6ZSx0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07bm0ucHJvdG90eXBlLmlzUG9pbnRzTWF0ZXJpYWw9ITA7dmFyIHNoZT1uZXcgTWUsbmh0PW5ldyBKZixPVj1uZXcgWmYselY9bmV3IGosaW09Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBQZSxyPW5ldyBubSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50cyIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9cix0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfXJheWNhc3QodCxyKXtsZXQgbj10aGlzLmdlb21ldHJ5LGk9dGhpcy5tYXRyaXhXb3JsZCxvPXQucGFyYW1zLlBvaW50cy50aHJlc2hvbGQsYT1uLmRyYXdSYW5nZTtpZihuLmJvdW5kaW5nU3BoZXJlPT09bnVsbCYmbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxPVi5jb3B5KG4uYm91bmRpbmdTcGhlcmUpLE9WLmFwcGx5TWF0cml4NChpKSxPVi5yYWRpdXMrPW8sdC5yYXkuaW50ZXJzZWN0c1NwaGVyZShPVik9PT0hMSlyZXR1cm47c2hlLmNvcHkoaSkuaW52ZXJ0KCksbmh0LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChzaGUpO2xldCBzPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1zKnM7aWYobi5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYz1uLmluZGV4LGg9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKGMhPT1udWxsKXtsZXQgZj1NYXRoLm1heCgwLGEuc3RhcnQpLHA9TWF0aC5taW4oYy5jb3VudCxhLnN0YXJ0K2EuY291bnQpO2ZvcihsZXQgZD1mLGc9cDtkPGc7ZCsrKXtsZXQgXz1jLmdldFgoZCk7elYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShoLF8pLGxoZSh6VixfLGwsaSx0LHIsdGhpcyl9fWVsc2V7bGV0IGY9TWF0aC5tYXgoMCxhLnN0YXJ0KSxwPU1hdGgubWluKGguY291bnQsYS5zdGFydCthLmNvdW50KTtmb3IobGV0IGQ9ZixnPXA7ZDxnO2QrKyl6Vi5mcm9tQnVmZmVyQXR0cmlidXRlKGgsZCksbGhlKHpWLGQsbCxpLHQscix0aGlzKX19ZWxzZSBjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMucmF5Y2FzdCgpIG5vIGxvbmdlciBzdXBwb3J0cyBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9dXBkYXRlTW9ycGhUYXJnZXRzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpe2xldCByPXQubW9ycGhBdHRyaWJ1dGVzLG49T2JqZWN0LmtleXMocik7aWYobi5sZW5ndGg+MCl7bGV0IGk9cltuWzBdXTtpZihpIT09dm9pZCAwKXt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcz1bXSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeT17fTtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspe2xldCBzPWlbb10ubmFtZXx8U3RyaW5nKG8pO3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnB1c2goMCksdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnlbc109b319fX1lbHNle2xldCByPXQubW9ycGhUYXJnZXRzO3IhPT12b2lkIDAmJnIubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLlBvaW50cy51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtpbS5wcm90b3R5cGUuaXNQb2ludHM9ITA7ZnVuY3Rpb24gbGhlKGUsdCxyLG4saSxvLGEpe2xldCBzPW5odC5kaXN0YW5jZVNxVG9Qb2ludChlKTtpZihzPHIpe2xldCBsPW5ldyBqO25odC5jbG9zZXN0UG9pbnRUb1BvaW50KGUsbCksbC5hcHBseU1hdHJpeDQobik7bGV0IGM9aS5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxpLm5lYXJ8fGM+aS5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChzKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDphfSl9fXZhciBfVT1jbGFzcyBleHRlbmRzIHhpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjKXtzdXBlcih0LHIsbixpLG8sYSxzLGwsYyksdGhpcy5taW5GaWx0ZXI9YSE9PXZvaWQgMD9hOm9pLHRoaXMubWFnRmlsdGVyPW8hPT12b2lkIDA/bzpvaSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzO2Z1bmN0aW9uIGgoKXt1Lm5lZWRzVXBkYXRlPSEwLHQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhoKX0icmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayJpbiB0JiZ0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soaCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5pbWFnZSkuY29weSh0aGlzKX11cGRhdGUoKXtsZXQgdD10aGlzLmltYWdlOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQ9PT0hMSYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fTtfVS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITA7dmFyIHlVPWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodCxyLG4pe3N1cGVyKHt3aWR0aDp0LGhlaWdodDpyfSksdGhpcy5mb3JtYXQ9bix0aGlzLm1hZ0ZpbHRlcj1MaSx0aGlzLm1pbkZpbHRlcj1MaSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07eVUucHJvdG90eXBlLmlzRnJhbWVidWZmZXJUZXh0dXJlPSEwO3ZhciBvNj1jbGFzcyBleHRlbmRzIHhpe2NvbnN0cnVjdG9yKHQscixuLGksbyxhLHMsbCxjLHUsaCxmKXtzdXBlcihudWxsLGEscyxsLGMsdSxpLG8saCxmKSx0aGlzLmltYWdlPXt3aWR0aDpyLGhlaWdodDpufSx0aGlzLm1pcG1hcHM9dCx0aGlzLmZsaXBZPSExLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExfX07bzYucHJvdG90eXBlLmlzQ29tcHJlc3NlZFRleHR1cmU9ITA7dmFyIHZVPWNsYXNzIGV4dGVuZHMgeGl7Y29uc3RydWN0b3IodCxyLG4saSxvLGEscyxsLGMpe3N1cGVyKHQscixuLGksbyxhLHMsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX07dlUucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgRnY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj04LG49MCxpPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOnIsdGhldGFTdGFydDpuLHRoZXRhTGVuZ3RoOml9LHI9TWF0aC5tYXgoMyxyKTtsZXQgbz1bXSxhPVtdLHM9W10sbD1bXSxjPW5ldyBqLHU9bmV3IEx0O2EucHVzaCgwLDAsMCkscy5wdXNoKDAsMCwxKSxsLnB1c2goLjUsLjUpO2ZvcihsZXQgaD0wLGY9MztoPD1yO2grKyxmKz0zKXtsZXQgcD1uK2gvcippO2MueD10Kk1hdGguY29zKHApLGMueT10Kk1hdGguc2luKHApLGEucHVzaChjLngsYy55LGMueikscy5wdXNoKDAsMCwxKSx1Lng9KGFbZl0vdCsxKS8yLHUueT0oYVtmKzFdL3QrMSkvMixsLnB1c2godS54LHUueSl9Zm9yKGxldCBoPTE7aDw9cjtoKyspby5wdXNoKGgsaCsxLDApO3RoaXMuc2V0SW5kZXgobyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoYSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKGwsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEZ2KHQucmFkaXVzLHQuc2VnbWVudHMsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sb209Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0xLG49MSxpPTgsbz0xLGE9ITEscz0wLGw9TWF0aC5QSSoyKXtzdXBlcigpLHRoaXMudHlwZT0iQ3lsaW5kZXJHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXNUb3A6dCxyYWRpdXNCb3R0b206cixoZWlnaHQ6bixyYWRpYWxTZWdtZW50czppLGhlaWdodFNlZ21lbnRzOm8sb3BlbkVuZGVkOmEsdGhldGFTdGFydDpzLHRoZXRhTGVuZ3RoOmx9O2xldCBjPXRoaXM7aT1NYXRoLmZsb29yKGkpLG89TWF0aC5mbG9vcihvKTtsZXQgdT1bXSxoPVtdLGY9W10scD1bXSxkPTAsZz1bXSxfPW4vMix5PTA7eCgpLGE9PT0hMSYmKHQ+MCYmYighMCkscj4wJiZiKCExKSksdGhpcy5zZXRJbmRleCh1KSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShoLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoZiwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUocCwyKSk7ZnVuY3Rpb24geCgpe2xldCBTPW5ldyBqLEM9bmV3IGosUD0wLGs9KHItdCkvbjtmb3IobGV0IE89MDtPPD1vO08rKyl7bGV0IEQ9W10sQj1PL28sST1CKihyLXQpK3Q7Zm9yKGxldCBMPTA7TDw9aTtMKyspe2xldCBSPUwvaSxGPVIqbCtzLHo9TWF0aC5zaW4oRiksVT1NYXRoLmNvcyhGKTtDLng9SSp6LEMueT0tQipuK18sQy56PUkqVSxoLnB1c2goQy54LEMueSxDLnopLFMuc2V0KHosayxVKS5ub3JtYWxpemUoKSxmLnB1c2goUy54LFMueSxTLnopLHAucHVzaChSLDEtQiksRC5wdXNoKGQrKyl9Zy5wdXNoKEQpfWZvcihsZXQgTz0wO088aTtPKyspZm9yKGxldCBEPTA7RDxvO0QrKyl7bGV0IEI9Z1tEXVtPXSxJPWdbRCsxXVtPXSxMPWdbRCsxXVtPKzFdLFI9Z1tEXVtPKzFdO3UucHVzaChCLEksUiksdS5wdXNoKEksTCxSKSxQKz02fWMuYWRkR3JvdXAoeSxQLDApLHkrPVB9ZnVuY3Rpb24gYihTKXtsZXQgQz1kLFA9bmV3IEx0LGs9bmV3IGosTz0wLEQ9Uz09PSEwP3Q6cixCPVM9PT0hMD8xOi0xO2ZvcihsZXQgTD0xO0w8PWk7TCsrKWgucHVzaCgwLF8qQiwwKSxmLnB1c2goMCxCLDApLHAucHVzaCguNSwuNSksZCsrO2xldCBJPWQ7Zm9yKGxldCBMPTA7TDw9aTtMKyspe2xldCBGPUwvaSpsK3Msej1NYXRoLmNvcyhGKSxVPU1hdGguc2luKEYpO2sueD1EKlUsay55PV8qQixrLno9RCp6LGgucHVzaChrLngsay55LGsueiksZi5wdXNoKDAsQiwwKSxQLng9eiouNSsuNSxQLnk9VSouNSpCKy41LHAucHVzaChQLngsUC55KSxkKyt9Zm9yKGxldCBMPTA7TDxpO0wrKyl7bGV0IFI9QytMLEY9SStMO1M9PT0hMD91LnB1c2goRixGKzEsUik6dS5wdXNoKEYrMSxGLFIpLE8rPTN9Yy5hZGRHcm91cCh5LE8sUz09PSEwPzE6MikseSs9T319c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgb20odC5yYWRpdXNUb3AsdC5yYWRpdXNCb3R0b20sdC5oZWlnaHQsdC5yYWRpYWxTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQub3BlbkVuZGVkLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LEJ2PWNsYXNzIGV4dGVuZHMgb217Y29uc3RydWN0b3IodD0xLHI9MSxuPTgsaT0xLG89ITEsYT0wLHM9TWF0aC5QSSoyKXtzdXBlcigwLHQscixuLGksbyxhLHMpLHRoaXMudHlwZT0iQ29uZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGhlaWdodDpyLHJhZGlhbFNlZ21lbnRzOm4saGVpZ2h0U2VnbWVudHM6aSxvcGVuRW5kZWQ6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c319c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgQnYodC5yYWRpdXMsdC5oZWlnaHQsdC5yYWRpYWxTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQub3BlbkVuZGVkLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LHVoPWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1bXSxyPVtdLG49MSxpPTApe3N1cGVyKCksdGhpcy50eXBlPSJQb2x5aGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17dmVydGljZXM6dCxpbmRpY2VzOnIscmFkaXVzOm4sZGV0YWlsOml9O2xldCBvPVtdLGE9W107cyhpKSxjKG4pLHUoKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoby5zbGljZSgpLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShhLDIpKSxpPT09MD90aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk6dGhpcy5ub3JtYWxpemVOb3JtYWxzKCk7ZnVuY3Rpb24gcyh4KXtsZXQgYj1uZXcgaixTPW5ldyBqLEM9bmV3IGo7Zm9yKGxldCBQPTA7UDxyLmxlbmd0aDtQKz0zKXAocltQKzBdLGIpLHAocltQKzFdLFMpLHAocltQKzJdLEMpLGwoYixTLEMseCl9ZnVuY3Rpb24gbCh4LGIsUyxDKXtsZXQgUD1DKzEsaz1bXTtmb3IobGV0IE89MDtPPD1QO08rKyl7a1tPXT1bXTtsZXQgRD14LmNsb25lKCkubGVycChTLE8vUCksQj1iLmNsb25lKCkubGVycChTLE8vUCksST1QLU87Zm9yKGxldCBMPTA7TDw9STtMKyspTD09PTAmJk89PT1QP2tbT11bTF09RDprW09dW0xdPUQuY2xvbmUoKS5sZXJwKEIsTC9JKX1mb3IobGV0IE89MDtPPFA7TysrKWZvcihsZXQgRD0wO0Q8MiooUC1PKS0xO0QrKyl7bGV0IEI9TWF0aC5mbG9vcihELzIpO0QlMj09PTA/KGYoa1tPXVtCKzFdKSxmKGtbTysxXVtCXSksZihrW09dW0JdKSk6KGYoa1tPXVtCKzFdKSxmKGtbTysxXVtCKzFdKSxmKGtbTysxXVtCXSkpfX1mdW5jdGlvbiBjKHgpe2xldCBiPW5ldyBqO2ZvcihsZXQgUz0wO1M8by5sZW5ndGg7Uys9MyliLng9b1tTKzBdLGIueT1vW1MrMV0sYi56PW9bUysyXSxiLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHgpLG9bUyswXT1iLngsb1tTKzFdPWIueSxvW1MrMl09Yi56fWZ1bmN0aW9uIHUoKXtsZXQgeD1uZXcgajtmb3IobGV0IGI9MDtiPG8ubGVuZ3RoO2IrPTMpe3gueD1vW2IrMF0seC55PW9bYisxXSx4Lno9b1tiKzJdO2xldCBTPV8oeCkvMi9NYXRoLlBJKy41LEM9eSh4KS9NYXRoLlBJKy41O2EucHVzaChTLDEtQyl9ZCgpLGgoKX1mdW5jdGlvbiBoKCl7Zm9yKGxldCB4PTA7eDxhLmxlbmd0aDt4Kz02KXtsZXQgYj1hW3grMF0sUz1hW3grMl0sQz1hW3grNF0sUD1NYXRoLm1heChiLFMsQyksaz1NYXRoLm1pbihiLFMsQyk7UD4uOSYmazwuMSYmKGI8LjImJihhW3grMF0rPTEpLFM8LjImJihhW3grMl0rPTEpLEM8LjImJihhW3grNF0rPTEpKX19ZnVuY3Rpb24gZih4KXtvLnB1c2goeC54LHgueSx4LnopfWZ1bmN0aW9uIHAoeCxiKXtsZXQgUz14KjM7Yi54PXRbUyswXSxiLnk9dFtTKzFdLGIuej10W1MrMl19ZnVuY3Rpb24gZCgpe2xldCB4PW5ldyBqLGI9bmV3IGosUz1uZXcgaixDPW5ldyBqLFA9bmV3IEx0LGs9bmV3IEx0LE89bmV3IEx0O2ZvcihsZXQgRD0wLEI9MDtEPG8ubGVuZ3RoO0QrPTksQis9Nil7eC5zZXQob1tEKzBdLG9bRCsxXSxvW0QrMl0pLGIuc2V0KG9bRCszXSxvW0QrNF0sb1tEKzVdKSxTLnNldChvW0QrNl0sb1tEKzddLG9bRCs4XSksUC5zZXQoYVtCKzBdLGFbQisxXSksay5zZXQoYVtCKzJdLGFbQiszXSksTy5zZXQoYVtCKzRdLGFbQis1XSksQy5jb3B5KHgpLmFkZChiKS5hZGQoUykuZGl2aWRlU2NhbGFyKDMpO2xldCBJPV8oQyk7ZyhQLEIrMCx4LEkpLGcoayxCKzIsYixJKSxnKE8sQis0LFMsSSl9fWZ1bmN0aW9uIGcoeCxiLFMsQyl7QzwwJiZ4Lng9PT0xJiYoYVtiXT14LngtMSksUy54PT09MCYmUy56PT09MCYmKGFbYl09Qy8yL01hdGguUEkrLjUpfWZ1bmN0aW9uIF8oeCl7cmV0dXJuIE1hdGguYXRhbjIoeC56LC14LngpfWZ1bmN0aW9uIHkoeCl7cmV0dXJuIE1hdGguYXRhbjIoLXgueSxNYXRoLnNxcnQoeC54KngueCt4LnoqeC56KSl9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IHVoKHQudmVydGljZXMsdC5pbmRpY2VzLHQucmFkaXVzLHQuZGV0YWlscyl9fSxIdj1jbGFzcyBleHRlbmRzIHVoe2NvbnN0cnVjdG9yKHQ9MSxyPTApe2xldCBuPSgxK01hdGguc3FydCg1KSkvMixpPTEvbixvPVstMSwtMSwtMSwtMSwtMSwxLC0xLDEsLTEsLTEsMSwxLDEsLTEsLTEsMSwtMSwxLDEsMSwtMSwxLDEsMSwwLC1pLC1uLDAsLWksbiwwLGksLW4sMCxpLG4sLWksLW4sMCwtaSxuLDAsaSwtbiwwLGksbiwwLC1uLDAsLWksbiwwLC1pLC1uLDAsaSxuLDAsaV0sYT1bMywxMSw3LDMsNywxNSwzLDE1LDEzLDcsMTksMTcsNywxNyw2LDcsNiwxNSwxNyw0LDgsMTcsOCwxMCwxNywxMCw2LDgsMCwxNiw4LDE2LDIsOCwyLDEwLDAsMTIsMSwwLDEsMTgsMCwxOCwxNiw2LDEwLDIsNiwyLDEzLDYsMTMsMTUsMiwxNiwxOCwyLDE4LDMsMiwzLDEzLDE4LDEsOSwxOCw5LDExLDE4LDExLDMsNCwxNCwxMiw0LDEyLDAsNCwwLDgsMTEsOSw1LDExLDUsMTksMTEsMTksNywxOSw1LDE0LDE5LDE0LDQsMTksNCwxNywxLDEyLDE0LDEsMTQsNSwxLDUsOV07c3VwZXIobyxhLHQsciksdGhpcy50eXBlPSJEb2RlY2FoZWRyb25HZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCxkZXRhaWw6cn19c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgSHYodC5yYWRpdXMsdC5kZXRhaWwpfX0sRlY9bmV3IGosQlY9bmV3IGosX3V0PW5ldyBqLEhWPW5ldyBhaSxhNj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bnVsbCxyPTEpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJFZGdlc0dlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e2dlb21ldHJ5OnQsdGhyZXNob2xkQW5nbGU6cn0sdCE9PW51bGwpe2xldCBpPU1hdGgucG93KDEwLDQpLG89TWF0aC5jb3MoUHYqciksYT10LmdldEluZGV4KCkscz10LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKSxsPWE/YS5jb3VudDpzLmNvdW50LGM9WzAsMCwwXSx1PVsiYSIsImIiLCJjIl0saD1uZXcgQXJyYXkoMyksZj17fSxwPVtdO2ZvcihsZXQgZD0wO2Q8bDtkKz0zKXthPyhjWzBdPWEuZ2V0WChkKSxjWzFdPWEuZ2V0WChkKzEpLGNbMl09YS5nZXRYKGQrMikpOihjWzBdPWQsY1sxXT1kKzEsY1syXT1kKzIpO2xldHthOmcsYjpfLGM6eX09SFY7aWYoZy5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1swXSksXy5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1sxXSkseS5mcm9tQnVmZmVyQXR0cmlidXRlKHMsY1syXSksSFYuZ2V0Tm9ybWFsKF91dCksaFswXT1gJHtNYXRoLnJvdW5kKGcueCppKX0sJHtNYXRoLnJvdW5kKGcueSppKX0sJHtNYXRoLnJvdW5kKGcueippKX1gLGhbMV09YCR7TWF0aC5yb3VuZChfLngqaSl9LCR7TWF0aC5yb3VuZChfLnkqaSl9LCR7TWF0aC5yb3VuZChfLnoqaSl9YCxoWzJdPWAke01hdGgucm91bmQoeS54KmkpfSwke01hdGgucm91bmQoeS55KmkpfSwke01hdGgucm91bmQoeS56KmkpfWAsIShoWzBdPT09aFsxXXx8aFsxXT09PWhbMl18fGhbMl09PT1oWzBdKSlmb3IobGV0IHg9MDt4PDM7eCsrKXtsZXQgYj0oeCsxKSUzLFM9aFt4XSxDPWhbYl0sUD1IVlt1W3hdXSxrPUhWW3VbYl1dLE89YCR7U31fJHtDfWAsRD1gJHtDfV8ke1N9YDtEIGluIGYmJmZbRF0/KF91dC5kb3QoZltEXS5ub3JtYWwpPD1vJiYocC5wdXNoKFAueCxQLnksUC56KSxwLnB1c2goay54LGsueSxrLnopKSxmW0RdPW51bGwpOk8gaW4gZnx8KGZbT109e2luZGV4MDpjW3hdLGluZGV4MTpjW2JdLG5vcm1hbDpfdXQuY2xvbmUoKX0pfX1mb3IobGV0IGQgaW4gZilpZihmW2RdKXtsZXR7aW5kZXgwOmcsaW5kZXgxOl99PWZbZF07RlYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShzLGcpLEJWLmZyb21CdWZmZXJBdHRyaWJ1dGUocyxfKSxwLnB1c2goRlYueCxGVi55LEZWLnopLHAucHVzaChCVi54LEJWLnksQlYueil9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUocCwzKSl9fX0sZnM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IkN1cnZlIix0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9Z2V0UG9pbnQoKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLiIpLG51bGx9Z2V0UG9pbnRBdCh0LHIpe2xldCBuPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQobixyKX1nZXRQb2ludHModD01KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludChuL3QpKTtyZXR1cm4gcn1nZXRTcGFjZWRQb2ludHModD01KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPD10O24rKylyLnB1c2godGhpcy5nZXRQb2ludEF0KG4vdCkpO3JldHVybiByfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7bGV0IHI9W10sbixpPXRoaXMuZ2V0UG9pbnQoMCksbz0wO3IucHVzaCgwKTtmb3IobGV0IGE9MTthPD10O2ErKyluPXRoaXMuZ2V0UG9pbnQoYS90KSxvKz1uLmRpc3RhbmNlVG8oaSksci5wdXNoKG8pLGk9bjtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9cixyfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQscil7bGV0IG49dGhpcy5nZXRMZW5ndGhzKCksaT0wLG89bi5sZW5ndGgsYTtyP2E9cjphPXQqbltvLTFdO2xldCBzPTAsbD1vLTEsYztmb3IoO3M8PWw7KWlmKGk9TWF0aC5mbG9vcihzKyhsLXMpLzIpLGM9bltpXS1hLGM8MClzPWkrMTtlbHNlIGlmKGM+MClsPWktMTtlbHNle2w9aTticmVha31pZihpPWwsbltpXT09PWEpcmV0dXJuIGkvKG8tMSk7bGV0IHU9bltpXSxmPW5baSsxXS11LHA9KGEtdSkvZjtyZXR1cm4oaStwKS8oby0xKX1nZXRUYW5nZW50KHQscil7bGV0IGk9dC0xZS00LG89dCsxZS00O2k8MCYmKGk9MCksbz4xJiYobz0xKTtsZXQgYT10aGlzLmdldFBvaW50KGkpLHM9dGhpcy5nZXRQb2ludChvKSxsPXJ8fChhLmlzVmVjdG9yMj9uZXcgTHQ6bmV3IGopO3JldHVybiBsLmNvcHkocykuc3ViKGEpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQscil7bGV0IG49dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KG4scil9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LHIpe2xldCBuPW5ldyBqLGk9W10sbz1bXSxhPVtdLHM9bmV3IGosbD1uZXcgTWU7Zm9yKGxldCBwPTA7cDw9dDtwKyspe2xldCBkPXAvdDtpW3BdPXRoaXMuZ2V0VGFuZ2VudEF0KGQsbmV3IGopfW9bMF09bmV3IGosYVswXT1uZXcgajtsZXQgYz1OdW1iZXIuTUFYX1ZBTFVFLHU9TWF0aC5hYnMoaVswXS54KSxoPU1hdGguYWJzKGlbMF0ueSksZj1NYXRoLmFicyhpWzBdLnopO3U8PWMmJihjPXUsbi5zZXQoMSwwLDApKSxoPD1jJiYoYz1oLG4uc2V0KDAsMSwwKSksZjw9YyYmbi5zZXQoMCwwLDEpLHMuY3Jvc3NWZWN0b3JzKGlbMF0sbikubm9ybWFsaXplKCksb1swXS5jcm9zc1ZlY3RvcnMoaVswXSxzKSxhWzBdLmNyb3NzVmVjdG9ycyhpWzBdLG9bMF0pO2ZvcihsZXQgcD0xO3A8PXQ7cCsrKXtpZihvW3BdPW9bcC0xXS5jbG9uZSgpLGFbcF09YVtwLTFdLmNsb25lKCkscy5jcm9zc1ZlY3RvcnMoaVtwLTFdLGlbcF0pLHMubGVuZ3RoKCk+TnVtYmVyLkVQU0lMT04pe3Mubm9ybWFsaXplKCk7bGV0IGQ9TWF0aC5hY29zKFpvKGlbcC0xXS5kb3QoaVtwXSksLTEsMSkpO29bcF0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhzLGQpKX1hW3BdLmNyb3NzVmVjdG9ycyhpW3BdLG9bcF0pfWlmKHI9PT0hMCl7bGV0IHA9TWF0aC5hY29zKFpvKG9bMF0uZG90KG9bdF0pLC0xLDEpKTtwLz10LGlbMF0uZG90KHMuY3Jvc3NWZWN0b3JzKG9bMF0sb1t0XSkpPjAmJihwPS1wKTtmb3IobGV0IGQ9MTtkPD10O2QrKylvW2RdLmFwcGx5TWF0cml4NChsLm1ha2VSb3RhdGlvbkF4aXMoaVtkXSxwKmQpKSxhW2RdLmNyb3NzVmVjdG9ycyhpW2RdLG9bZF0pfXJldHVybnt0YW5nZW50czppLG5vcm1hbHM6byxiaW5vcm1hbHM6YX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9dG9KU09OKCl7bGV0IHQ9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJDdXJ2ZSIsZ2VuZXJhdG9yOiJDdXJ2ZS50b0pTT04ifX07cmV0dXJuIHQuYXJjTGVuZ3RoRGl2aXNpb25zPXRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zLHQudHlwZT10aGlzLnR5cGUsdH1mcm9tSlNPTih0KXtyZXR1cm4gdGhpcy5hcmNMZW5ndGhEaXZpc2lvbnM9dC5hcmNMZW5ndGhEaXZpc2lvbnMsdGhpc319LFZ2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD0wLHI9MCxuPTEsaT0xLG89MCxhPU1hdGguUEkqMixzPSExLGw9MCl7c3VwZXIoKSx0aGlzLnR5cGU9IkVsbGlwc2VDdXJ2ZSIsdGhpcy5hWD10LHRoaXMuYVk9cix0aGlzLnhSYWRpdXM9bix0aGlzLnlSYWRpdXM9aSx0aGlzLmFTdGFydEFuZ2xlPW8sdGhpcy5hRW5kQW5nbGU9YSx0aGlzLmFDbG9ja3dpc2U9cyx0aGlzLmFSb3RhdGlvbj1sfWdldFBvaW50KHQscil7bGV0IG49cnx8bmV3IEx0LGk9TWF0aC5QSSoyLG89dGhpcy5hRW5kQW5nbGUtdGhpcy5hU3RhcnRBbmdsZSxhPU1hdGguYWJzKG8pPE51bWJlci5FUFNJTE9OO2Zvcig7bzwwOylvKz1pO2Zvcig7bz5pOylvLT1pO288TnVtYmVyLkVQU0lMT04mJihhP289MDpvPWkpLHRoaXMuYUNsb2Nrd2lzZT09PSEwJiYhYSYmKG89PT1pP289LWk6bz1vLWkpO2xldCBzPXRoaXMuYVN0YXJ0QW5nbGUrdCpvLGw9dGhpcy5hWCt0aGlzLnhSYWRpdXMqTWF0aC5jb3MocyksYz10aGlzLmFZK3RoaXMueVJhZGl1cypNYXRoLnNpbihzKTtpZih0aGlzLmFSb3RhdGlvbiE9PTApe2xldCB1PU1hdGguY29zKHRoaXMuYVJvdGF0aW9uKSxoPU1hdGguc2luKHRoaXMuYVJvdGF0aW9uKSxmPWwtdGhpcy5hWCxwPWMtdGhpcy5hWTtsPWYqdS1wKmgrdGhpcy5hWCxjPWYqaCtwKnUrdGhpcy5hWX1yZXR1cm4gbi5zZXQobCxjKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuYVg9dGhpcy5hWCx0LmFZPXRoaXMuYVksdC54UmFkaXVzPXRoaXMueFJhZGl1cyx0LnlSYWRpdXM9dGhpcy55UmFkaXVzLHQuYVN0YXJ0QW5nbGU9dGhpcy5hU3RhcnRBbmdsZSx0LmFFbmRBbmdsZT10aGlzLmFFbmRBbmdsZSx0LmFDbG9ja3dpc2U9dGhpcy5hQ2xvY2t3aXNlLHQuYVJvdGF0aW9uPXRoaXMuYVJvdGF0aW9uLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuYVg9dC5hWCx0aGlzLmFZPXQuYVksdGhpcy54UmFkaXVzPXQueFJhZGl1cyx0aGlzLnlSYWRpdXM9dC55UmFkaXVzLHRoaXMuYVN0YXJ0QW5nbGU9dC5hU3RhcnRBbmdsZSx0aGlzLmFFbmRBbmdsZT10LmFFbmRBbmdsZSx0aGlzLmFDbG9ja3dpc2U9dC5hQ2xvY2t3aXNlLHRoaXMuYVJvdGF0aW9uPXQuYVJvdGF0aW9uLHRoaXN9fTtWdi5wcm90b3R5cGUuaXNFbGxpcHNlQ3VydmU9ITA7dmFyIHM2PWNsYXNzIGV4dGVuZHMgVnZ7Y29uc3RydWN0b3IodCxyLG4saSxvLGEpe3N1cGVyKHQscixuLG4saSxvLGEpLHRoaXMudHlwZT0iQXJjQ3VydmUifX07czYucHJvdG90eXBlLmlzQXJjQ3VydmU9ITA7ZnVuY3Rpb24gT2h0KCl7bGV0IGU9MCx0PTAscj0wLG49MDtmdW5jdGlvbiBpKG8sYSxzLGwpe2U9byx0PXMscj0tMypvKzMqYS0yKnMtbCxuPTIqby0yKmErcytsfXJldHVybntpbml0Q2F0bXVsbFJvbTpmdW5jdGlvbihvLGEscyxsLGMpe2koYSxzLGMqKHMtbyksYyoobC1hKSl9LGluaXROb251bmlmb3JtQ2F0bXVsbFJvbTpmdW5jdGlvbihvLGEscyxsLGMsdSxoKXtsZXQgZj0oYS1vKS9jLShzLW8pLyhjK3UpKyhzLWEpL3UscD0ocy1hKS91LShsLWEpLyh1K2gpKyhsLXMpL2g7Zio9dSxwKj11LGkoYSxzLGYscCl9LGNhbGM6ZnVuY3Rpb24obyl7bGV0IGE9bypvLHM9YSpvO3JldHVybiBlK3QqbytyKmErbipzfX19dmFyIFZWPW5ldyBqLHl1dD1uZXcgT2h0LHZ1dD1uZXcgT2h0LHh1dD1uZXcgT2h0LGw2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1bXSxyPSExLG49ImNlbnRyaXBldGFsIixpPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1yLHRoaXMuY3VydmVUeXBlPW4sdGhpcy50ZW5zaW9uPWl9Z2V0UG9pbnQodCxyPW5ldyBqKXtsZXQgbj1yLGk9dGhpcy5wb2ludHMsbz1pLmxlbmd0aCxhPShvLSh0aGlzLmNsb3NlZD8wOjEpKSp0LHM9TWF0aC5mbG9vcihhKSxsPWEtczt0aGlzLmNsb3NlZD9zKz1zPjA/MDooTWF0aC5mbG9vcihNYXRoLmFicyhzKS9vKSsxKSpvOmw9PT0wJiZzPT09by0xJiYocz1vLTIsbD0xKTtsZXQgYyx1O3RoaXMuY2xvc2VkfHxzPjA/Yz1pWyhzLTEpJW9dOihWVi5zdWJWZWN0b3JzKGlbMF0saVsxXSkuYWRkKGlbMF0pLGM9VlYpO2xldCBoPWlbcyVvXSxmPWlbKHMrMSklb107aWYodGhpcy5jbG9zZWR8fHMrMjxvP3U9aVsocysyKSVvXTooVlYuc3ViVmVjdG9ycyhpW28tMV0saVtvLTJdKS5hZGQoaVtvLTFdKSx1PVZWKSx0aGlzLmN1cnZlVHlwZT09PSJjZW50cmlwZXRhbCJ8fHRoaXMuY3VydmVUeXBlPT09ImNob3JkYWwiKXtsZXQgcD10aGlzLmN1cnZlVHlwZT09PSJjaG9yZGFsIj8uNTouMjUsZD1NYXRoLnBvdyhjLmRpc3RhbmNlVG9TcXVhcmVkKGgpLHApLGc9TWF0aC5wb3coaC5kaXN0YW5jZVRvU3F1YXJlZChmKSxwKSxfPU1hdGgucG93KGYuZGlzdGFuY2VUb1NxdWFyZWQodSkscCk7ZzwxZS00JiYoZz0xKSxkPDFlLTQmJihkPWcpLF88MWUtNCYmKF89ZykseXV0LmluaXROb251bmlmb3JtQ2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsZCxnLF8pLHZ1dC5pbml0Tm9udW5pZm9ybUNhdG11bGxSb20oYy55LGgueSxmLnksdS55LGQsZyxfKSx4dXQuaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueixoLnosZi56LHUueixkLGcsXyl9ZWxzZSB0aGlzLmN1cnZlVHlwZT09PSJjYXRtdWxscm9tIiYmKHl1dC5pbml0Q2F0bXVsbFJvbShjLngsaC54LGYueCx1LngsdGhpcy50ZW5zaW9uKSx2dXQuaW5pdENhdG11bGxSb20oYy55LGgueSxmLnksdS55LHRoaXMudGVuc2lvbikseHV0LmluaXRDYXRtdWxsUm9tKGMueixoLnosZi56LHUueix0aGlzLnRlbnNpb24pKTtyZXR1cm4gbi5zZXQoeXV0LmNhbGMobCksdnV0LmNhbGMobCkseHV0LmNhbGMobCkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpcy5jbG9zZWQ9dC5jbG9zZWQsdGhpcy5jdXJ2ZVR5cGU9dC5jdXJ2ZVR5cGUsdGhpcy50ZW5zaW9uPXQudGVuc2lvbix0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXRoaXMucG9pbnRzW3JdO3QucG9pbnRzLnB1c2goaS50b0FycmF5KCkpfXJldHVybiB0LmNsb3NlZD10aGlzLmNsb3NlZCx0LmN1cnZlVHlwZT10aGlzLmN1cnZlVHlwZSx0LnRlbnNpb249dGhpcy50ZW5zaW9uLHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5wb2ludHM9W107Zm9yKGxldCByPTAsbj10LnBvaW50cy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5wb2ludHNbcl07dGhpcy5wb2ludHMucHVzaChuZXcgaigpLmZyb21BcnJheShpKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc319O2w2LnByb3RvdHlwZS5pc0NhdG11bGxSb21DdXJ2ZTM9ITA7ZnVuY3Rpb24gY2hlKGUsdCxyLG4saSl7bGV0IG89KG4tdCkqLjUsYT0oaS1yKSouNSxzPWUqZSxsPWUqcztyZXR1cm4oMipyLTIqbitvK2EpKmwrKC0zKnIrMypuLTIqby1hKSpzK28qZStyfWZ1bmN0aW9uIGtncihlLHQpe2xldCByPTEtZTtyZXR1cm4gcipyKnR9ZnVuY3Rpb24gUmdyKGUsdCl7cmV0dXJuIDIqKDEtZSkqZSp0fWZ1bmN0aW9uIE5ncihlLHQpe3JldHVybiBlKmUqdH1mdW5jdGlvbiBxUChlLHQscixuKXtyZXR1cm4ga2dyKGUsdCkrUmdyKGUscikrTmdyKGUsbil9ZnVuY3Rpb24gRGdyKGUsdCl7bGV0IHI9MS1lO3JldHVybiByKnIqcip0fWZ1bmN0aW9uIE9ncihlLHQpe2xldCByPTEtZTtyZXR1cm4gMypyKnIqZSp0fWZ1bmN0aW9uIHpncihlLHQpe3JldHVybiAzKigxLWUpKmUqZSp0fWZ1bmN0aW9uIEZncihlLHQpe3JldHVybiBlKmUqZSp0fWZ1bmN0aW9uIEdQKGUsdCxyLG4saSl7cmV0dXJuIERncihlLHQpK09ncihlLHIpK3pncihlLG4pK0ZncihlLGkpfXZhciBjTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9bmV3IEx0LHI9bmV3IEx0LG49bmV3IEx0LGk9bmV3IEx0KXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9cix0aGlzLnYyPW4sdGhpcy52Mz1pfWdldFBvaW50KHQscj1uZXcgTHQpe2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjIscz10aGlzLnYzO3JldHVybiBuLnNldChHUCh0LGkueCxvLngsYS54LHMueCksR1AodCxpLnksby55LGEueSxzLnkpKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O2NNLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIGM2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqLG49bmV3IGosaT1uZXcgail7c3VwZXIoKSx0aGlzLnR5cGU9IkN1YmljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bix0aGlzLnYzPWl9Z2V0UG9pbnQodCxyPW5ldyBqKXtsZXQgbj1yLGk9dGhpcy52MCxvPXRoaXMudjEsYT10aGlzLnYyLHM9dGhpcy52MztyZXR1cm4gbi5zZXQoR1AodCxpLngsby54LGEueCxzLngpLEdQKHQsaS55LG8ueSxhLnkscy55KSxHUCh0LGkueixvLnosYS56LHMueikpLG59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzLnYzLmNvcHkodC52MyksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdC52Mz10aGlzLnYzLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzLnYzLmZyb21BcnJheSh0LnYzKSx0aGlzfX07YzYucHJvdG90eXBlLmlzQ3ViaWNCZXppZXJDdXJ2ZTM9ITA7dmFyIFV2PWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgTHQscj1uZXcgTHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQ3VydmUiLHRoaXMudjE9dCx0aGlzLnYyPXJ9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cjtyZXR1cm4gdD09PTE/bi5jb3B5KHRoaXMudjIpOihuLmNvcHkodGhpcy52Mikuc3ViKHRoaXMudjEpLG4ubXVsdGlwbHlTY2FsYXIodCkuYWRkKHRoaXMudjEpKSxufWdldFBvaW50QXQodCxyKXtyZXR1cm4gdGhpcy5nZXRQb2ludCh0LHIpfWdldFRhbmdlbnQodCxyKXtsZXQgbj1yfHxuZXcgTHQ7cmV0dXJuIG4uY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSkubm9ybWFsaXplKCksbn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtVdi5wcm90b3R5cGUuaXNMaW5lQ3VydmU9ITA7dmFyIHhVPWNsYXNzIGV4dGVuZHMgZnN7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9cn1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXI7cmV0dXJuIHQ9PT0xP24uY29weSh0aGlzLnYyKToobi5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKSxuLm11bHRpcGx5U2NhbGFyKHQpLmFkZCh0aGlzLnYxKSksbn1nZXRQb2ludEF0KHQscil7cmV0dXJuIHRoaXMuZ2V0UG9pbnQodCxyKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fSx1TT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9bmV3IEx0LHI9bmV3IEx0LG49bmV3IEx0KXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUiLHRoaXMudjA9dCx0aGlzLnYxPXIsdGhpcy52Mj1ufWdldFBvaW50KHQscj1uZXcgTHQpe2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KHFQKHQsaS54LG8ueCxhLngpLHFQKHQsaS55LG8ueSxhLnkpKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3VNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlPSEwO3ZhciBoTT1jbGFzcyBleHRlbmRzIGZze2NvbnN0cnVjdG9yKHQ9bmV3IGoscj1uZXcgaixuPW5ldyBqKXtzdXBlcigpLHRoaXMudHlwZT0iUXVhZHJhdGljQmV6aWVyQ3VydmUzIix0aGlzLnYwPXQsdGhpcy52MT1yLHRoaXMudjI9bn1nZXRQb2ludCh0LHI9bmV3IGope2xldCBuPXIsaT10aGlzLnYwLG89dGhpcy52MSxhPXRoaXMudjI7cmV0dXJuIG4uc2V0KHFQKHQsaS54LG8ueCxhLngpLHFQKHQsaS55LG8ueSxhLnkpLHFQKHQsaS56LG8ueixhLnopKSxufWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC52MD10aGlzLnYwLnRvQXJyYXkoKSx0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O2hNLnByb3RvdHlwZS5pc1F1YWRyYXRpY0JlemllckN1cnZlMz0hMDt2YXIgZk09Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMudHlwZT0iU3BsaW5lQ3VydmUiLHRoaXMucG9pbnRzPXR9Z2V0UG9pbnQodCxyPW5ldyBMdCl7bGV0IG49cixpPXRoaXMucG9pbnRzLG89KGkubGVuZ3RoLTEpKnQsYT1NYXRoLmZsb29yKG8pLHM9by1hLGw9aVthPT09MD9hOmEtMV0sYz1pW2FdLHU9aVthPmkubGVuZ3RoLTI/aS5sZW5ndGgtMTphKzFdLGg9aVthPmkubGVuZ3RoLTM/aS5sZW5ndGgtMTphKzJdO3JldHVybiBuLnNldChjaGUocyxsLngsYy54LHUueCxoLngpLGNoZShzLGwueSxjLnksdS55LGgueSkpLG59Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgcj0wLG49dC5wb2ludHMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQucG9pbnRzW3JdO3RoaXMucG9pbnRzLnB1c2goaS5jbG9uZSgpKX1yZXR1cm4gdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTt0LnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXRoaXMucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10aGlzLnBvaW50c1tyXTt0LnBvaW50cy5wdXNoKGkudG9BcnJheSgpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IHI9MCxuPXQucG9pbnRzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LnBvaW50c1tyXTt0aGlzLnBvaW50cy5wdXNoKG5ldyBMdCgpLmZyb21BcnJheShpKSl9cmV0dXJuIHRoaXN9fTtmTS5wcm90b3R5cGUuaXNTcGxpbmVDdXJ2ZT0hMDt2YXIgemh0PU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLEFyY0N1cnZlOnM2LENhdG11bGxSb21DdXJ2ZTM6bDYsQ3ViaWNCZXppZXJDdXJ2ZTpjTSxDdWJpY0JlemllckN1cnZlMzpjNixFbGxpcHNlQ3VydmU6VnYsTGluZUN1cnZlOlV2LExpbmVDdXJ2ZTM6eFUsUXVhZHJhdGljQmV6aWVyQ3VydmU6dU0sUXVhZHJhdGljQmV6aWVyQ3VydmUzOmhNLFNwbGluZUN1cnZlOmZNfSksYlU9Y2xhc3MgZXh0ZW5kcyBmc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWFkZCh0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfWNsb3NlUGF0aCgpe2xldCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLHI9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKHIpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyBVdihyLHQpKX1nZXRQb2ludCh0LHIpe2xldCBuPXQqdGhpcy5nZXRMZW5ndGgoKSxpPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCksbz0wO2Zvcig7bzxpLmxlbmd0aDspe2lmKGlbb10+PW4pe2xldCBhPWlbb10tbixzPXRoaXMuY3VydmVzW29dLGw9cy5nZXRMZW5ndGgoKSxjPWw9PT0wPzA6MS1hL2w7cmV0dXJuIHMuZ2V0UG9pbnRBdChjLHIpfW8rK31yZXR1cm4gbnVsbH1nZXRMZW5ndGgoKXtsZXQgdD10aGlzLmdldEN1cnZlTGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuY2FjaGVMZW5ndGhzPW51bGwsdGhpcy5nZXRDdXJ2ZUxlbmd0aHMoKX1nZXRDdXJ2ZUxlbmd0aHMoKXtpZih0aGlzLmNhY2hlTGVuZ3RocyYmdGhpcy5jYWNoZUxlbmd0aHMubGVuZ3RoPT09dGhpcy5jdXJ2ZXMubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlTGVuZ3RocztsZXQgdD1bXSxyPTA7Zm9yKGxldCBuPTAsaT10aGlzLmN1cnZlcy5sZW5ndGg7bjxpO24rKylyKz10aGlzLmN1cnZlc1tuXS5nZXRMZW5ndGgoKSx0LnB1c2gocik7cmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzPXQsdH1nZXRTcGFjZWRQb2ludHModD00MCl7bGV0IHI9W107Zm9yKGxldCBuPTA7bjw9dDtuKyspci5wdXNoKHRoaXMuZ2V0UG9pbnQobi90KSk7cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZyLnB1c2goclswXSkscn1nZXRQb2ludHModD0xMil7bGV0IHI9W10sbjtmb3IobGV0IGk9MCxvPXRoaXMuY3VydmVzO2k8by5sZW5ndGg7aSsrKXtsZXQgYT1vW2ldLHM9YSYmYS5pc0VsbGlwc2VDdXJ2ZT90KjI6YSYmKGEuaXNMaW5lQ3VydmV8fGEuaXNMaW5lQ3VydmUzKT8xOmEmJmEuaXNTcGxpbmVDdXJ2ZT90KmEucG9pbnRzLmxlbmd0aDp0LGw9YS5nZXRQb2ludHMocyk7Zm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspe2xldCB1PWxbY107biYmbi5lcXVhbHModSl8fChyLnB1c2godSksbj11KX19cmV0dXJuIHRoaXMuYXV0b0Nsb3NlJiZyLmxlbmd0aD4xJiYhcltyLmxlbmd0aC0xXS5lcXVhbHMoclswXSkmJnIucHVzaChyWzBdKSxyfWNvcHkodCl7c3VwZXIuY29weSh0KSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXQuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmN1cnZlc1tyXTt0aGlzLmN1cnZlcy5wdXNoKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXMuYXV0b0Nsb3NlPXQuYXV0b0Nsb3NlLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5hdXRvQ2xvc2U9dGhpcy5hdXRvQ2xvc2UsdC5jdXJ2ZXM9W107Zm9yKGxldCByPTAsbj10aGlzLmN1cnZlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5jdXJ2ZXNbcl07dC5jdXJ2ZXMucHVzaChpLnRvSlNPTigpKX1yZXR1cm4gdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzLmN1cnZlcz1bXTtmb3IobGV0IHI9MCxuPXQuY3VydmVzLmxlbmd0aDtyPG47cisrKXtsZXQgaT10LmN1cnZlc1tyXTt0aGlzLmN1cnZlcy5wdXNoKG5ldyB6aHRbaS50eXBlXSgpLmZyb21KU09OKGkpKX1yZXR1cm4gdGhpc319LHF2PWNsYXNzIGV4dGVuZHMgYlV7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBhdGgiLHRoaXMuY3VycmVudFBvaW50PW5ldyBMdCx0JiZ0aGlzLnNldEZyb21Qb2ludHModCl9c2V0RnJvbVBvaW50cyh0KXt0aGlzLm1vdmVUbyh0WzBdLngsdFswXS55KTtmb3IobGV0IHI9MSxuPXQubGVuZ3RoO3I8bjtyKyspdGhpcy5saW5lVG8odFtyXS54LHRbcl0ueSk7cmV0dXJuIHRoaXN9bW92ZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LnNldCh0LHIpLHRoaXN9bGluZVRvKHQscil7bGV0IG49bmV3IFV2KHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IEx0KHQscikpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG4pLHRoaXMuY3VycmVudFBvaW50LnNldCh0LHIpLHRoaXN9cXVhZHJhdGljQ3VydmVUbyh0LHIsbixpKXtsZXQgbz1uZXcgdU0odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSxuZXcgTHQobixpKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG4saSksdGhpc31iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKXtsZXQgcz1uZXcgY00odGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKSxuZXcgTHQodCxyKSxuZXcgTHQobixpKSxuZXcgTHQobyxhKSk7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gocyksdGhpcy5jdXJyZW50UG9pbnQuc2V0KG8sYSksdGhpc31zcGxpbmVUaHJ1KHQpe2xldCByPVt0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpXS5jb25jYXQodCksbj1uZXcgZk0ocik7cmV0dXJuIHRoaXMuY3VydmVzLnB1c2gobiksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0W3QubGVuZ3RoLTFdKSx0aGlzfWFyYyh0LHIsbixpLG8sYSl7bGV0IHM9dGhpcy5jdXJyZW50UG9pbnQueCxsPXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzYXJjKHQrcyxyK2wsbixpLG8sYSksdGhpc31hYnNhcmModCxyLG4saSxvLGEpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCxyLG4sbixpLG8sYSksdGhpc31lbGxpcHNlKHQscixuLGksbyxhLHMsbCl7bGV0IGM9dGhpcy5jdXJyZW50UG9pbnQueCx1PXRoaXMuY3VycmVudFBvaW50Lnk7cmV0dXJuIHRoaXMuYWJzZWxsaXBzZSh0K2Mscit1LG4saSxvLGEscyxsKSx0aGlzfWFic2VsbGlwc2UodCxyLG4saSxvLGEscyxsKXtsZXQgYz1uZXcgVnYodCxyLG4saSxvLGEscyxsKTtpZih0aGlzLmN1cnZlcy5sZW5ndGg+MCl7bGV0IGg9Yy5nZXRQb2ludCgwKTtoLmVxdWFscyh0aGlzLmN1cnJlbnRQb2ludCl8fHRoaXMubGluZVRvKGgueCxoLnkpfXRoaXMuY3VydmVzLnB1c2goYyk7bGV0IHU9Yy5nZXRQb2ludCgxKTtyZXR1cm4gdGhpcy5jdXJyZW50UG9pbnQuY29weSh1KSx0aGlzfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jdXJyZW50UG9pbnQuY29weSh0LmN1cnJlbnRQb2ludCksdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5jdXJyZW50UG9pbnQ9dGhpcy5jdXJyZW50UG9pbnQudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMuY3VycmVudFBvaW50LmZyb21BcnJheSh0LmN1cnJlbnRQb2ludCksdGhpc319LEtjPWNsYXNzIGV4dGVuZHMgcXZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy51dWlkPU5sKCksdGhpcy50eXBlPSJTaGFwZSIsdGhpcy5ob2xlcz1bXX1nZXRQb2ludHNIb2xlcyh0KXtsZXQgcj1bXTtmb3IobGV0IG49MCxpPXRoaXMuaG9sZXMubGVuZ3RoO248aTtuKyspcltuXT10aGlzLmhvbGVzW25dLmdldFBvaW50cyh0KTtyZXR1cm4gcn1leHRyYWN0UG9pbnRzKHQpe3JldHVybntzaGFwZTp0aGlzLmdldFBvaW50cyh0KSxob2xlczp0aGlzLmdldFBvaW50c0hvbGVzKHQpfX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5ob2xlcz1bXTtmb3IobGV0IHI9MCxuPXQuaG9sZXMubGVuZ3RoO3I8bjtyKyspe2xldCBpPXQuaG9sZXNbcl07dGhpcy5ob2xlcy5wdXNoKGkuY2xvbmUoKSl9cmV0dXJuIHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC51dWlkPXRoaXMudXVpZCx0LmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dGhpcy5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dGhpcy5ob2xlc1tyXTt0LmhvbGVzLnB1c2goaS50b0pTT04oKSl9cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy51dWlkPXQudXVpZCx0aGlzLmhvbGVzPVtdO2ZvcihsZXQgcj0wLG49dC5ob2xlcy5sZW5ndGg7cjxuO3IrKyl7bGV0IGk9dC5ob2xlc1tyXTt0aGlzLmhvbGVzLnB1c2gobmV3IHF2KCkuZnJvbUpTT04oaSkpfXJldHVybiB0aGlzfX0sQmdyPXt0cmlhbmd1bGF0ZTpmdW5jdGlvbihlLHQscj0yKXtsZXQgbj10JiZ0Lmxlbmd0aCxpPW4/dFswXSpyOmUubGVuZ3RoLG89S2ZlKGUsMCxpLHIsITApLGE9W107aWYoIW98fG8ubmV4dD09PW8ucHJldilyZXR1cm4gYTtsZXQgcyxsLGMsdSxoLGYscDtpZihuJiYobz1HZ3IoZSx0LG8scikpLGUubGVuZ3RoPjgwKnIpe3M9Yz1lWzBdLGw9dT1lWzFdO2ZvcihsZXQgZD1yO2Q8aTtkKz1yKWg9ZVtkXSxmPWVbZCsxXSxoPHMmJihzPWgpLGY8bCYmKGw9ZiksaD5jJiYoYz1oKSxmPnUmJih1PWYpO3A9TWF0aC5tYXgoYy1zLHUtbCkscD1wIT09MD8xL3A6MH1yZXR1cm4gdTYobyxhLHIscyxsLHApLGF9fTtmdW5jdGlvbiBLZmUoZSx0LHIsbixpKXtsZXQgbyxhO2lmKGk9PT1lMHIoZSx0LHIsbik+MClmb3Iobz10O288cjtvKz1uKWE9dWhlKG8sZVtvXSxlW28rMV0sYSk7ZWxzZSBmb3Iobz1yLW47bz49dDtvLT1uKWE9dWhlKG8sZVtvXSxlW28rMV0sYSk7cmV0dXJuIGEmJktVKGEsYS5uZXh0KSYmKGY2KGEpLGE9YS5uZXh0KSxhfWZ1bmN0aW9uIEcwKGUsdCl7aWYoIWUpcmV0dXJuIGU7dHx8KHQ9ZSk7bGV0IHI9ZSxuO2RvIGlmKG49ITEsIXIuc3RlaW5lciYmKEtVKHIsci5uZXh0KXx8c2koci5wcmV2LHIsci5uZXh0KT09PTApKXtpZihmNihyKSxyPXQ9ci5wcmV2LHI9PT1yLm5leHQpYnJlYWs7bj0hMH1lbHNlIHI9ci5uZXh0O3doaWxlKG58fHIhPT10KTtyZXR1cm4gdH1mdW5jdGlvbiB1NihlLHQscixuLGksbyxhKXtpZighZSlyZXR1cm47IWEmJm8mJiRncihlLG4saSxvKTtsZXQgcz1lLGwsYztmb3IoO2UucHJldiE9PWUubmV4dDspe2lmKGw9ZS5wcmV2LGM9ZS5uZXh0LG8/VmdyKGUsbixpLG8pOkhncihlKSl7dC5wdXNoKGwuaS9yKSx0LnB1c2goZS5pL3IpLHQucHVzaChjLmkvciksZjYoZSksZT1jLm5leHQscz1jLm5leHQ7Y29udGludWV9aWYoZT1jLGU9PT1zKXthP2E9PT0xPyhlPVVncihHMChlKSx0LHIpLHU2KGUsdCxyLG4saSxvLDIpKTphPT09MiYmcWdyKGUsdCxyLG4saSxvKTp1NihHMChlKSx0LHIsbixpLG8sMSk7YnJlYWt9fX1mdW5jdGlvbiBIZ3IoZSl7bGV0IHQ9ZS5wcmV2LHI9ZSxuPWUubmV4dDtpZihzaSh0LHIsbik+PTApcmV0dXJuITE7bGV0IGk9ZS5uZXh0Lm5leHQ7Zm9yKDtpIT09ZS5wcmV2Oyl7aWYoSDModC54LHQueSxyLngsci55LG4ueCxuLnksaS54LGkueSkmJnNpKGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gVmdyKGUsdCxyLG4pe2xldCBpPWUucHJldixvPWUsYT1lLm5leHQ7aWYoc2koaSxvLGEpPj0wKXJldHVybiExO2xldCBzPWkueDxvLng/aS54PGEueD9pLng6YS54Om8ueDxhLng/by54OmEueCxsPWkueTxvLnk/aS55PGEueT9pLnk6YS55Om8ueTxhLnk/by55OmEueSxjPWkueD5vLng/aS54PmEueD9pLng6YS54Om8ueD5hLng/by54OmEueCx1PWkueT5vLnk/aS55PmEueT9pLnk6YS55Om8ueT5hLnk/by55OmEueSxoPWlodChzLGwsdCxyLG4pLGY9aWh0KGMsdSx0LHIsbikscD1lLnByZXZaLGQ9ZS5uZXh0Wjtmb3IoO3AmJnAuej49aCYmZCYmZC56PD1mOyl7aWYocCE9PWUucHJldiYmcCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnkscC54LHAueSkmJnNpKHAucHJldixwLHAubmV4dCk+PTB8fChwPXAucHJldlosZCE9PWUucHJldiYmZCE9PWUubmV4dCYmSDMoaS54LGkueSxvLngsby55LGEueCxhLnksZC54LGQueSkmJnNpKGQucHJldixkLGQubmV4dCk+PTApKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO3AmJnAuej49aDspe2lmKHAhPT1lLnByZXYmJnAhPT1lLm5leHQmJkgzKGkueCxpLnksby54LG8ueSxhLngsYS55LHAueCxwLnkpJiZzaShwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2QmJmQuejw9Zjspe2lmKGQhPT1lLnByZXYmJmQhPT1lLm5leHQmJkgzKGkueCxpLnksby54LG8ueSxhLngsYS55LGQueCxkLnkpJiZzaShkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBVZ3IoZSx0LHIpe2xldCBuPWU7ZG97bGV0IGk9bi5wcmV2LG89bi5uZXh0Lm5leHQ7IUtVKGksbykmJlpmZShpLG4sbi5uZXh0LG8pJiZoNihpLG8pJiZoNihvLGkpJiYodC5wdXNoKGkuaS9yKSx0LnB1c2gobi5pL3IpLHQucHVzaChvLmkvciksZjYobiksZjYobi5uZXh0KSxuPWU9byksbj1uLm5leHR9d2hpbGUobiE9PWUpO3JldHVybiBHMChuKX1mdW5jdGlvbiBxZ3IoZSx0LHIsbixpLG8pe2xldCBhPWU7ZG97bGV0IHM9YS5uZXh0Lm5leHQ7Zm9yKDtzIT09YS5wcmV2Oyl7aWYoYS5pIT09cy5pJiZKZ3IoYSxzKSl7bGV0IGw9SmZlKGEscyk7YT1HMChhLGEubmV4dCksbD1HMChsLGwubmV4dCksdTYoYSx0LHIsbixpLG8pLHU2KGwsdCxyLG4saSxvKTtyZXR1cm59cz1zLm5leHR9YT1hLm5leHR9d2hpbGUoYSE9PWUpfWZ1bmN0aW9uIEdncihlLHQscixuKXtsZXQgaT1bXSxvLGEscyxsLGM7Zm9yKG89MCxhPXQubGVuZ3RoO288YTtvKyspcz10W29dKm4sbD1vPGEtMT90W28rMV0qbjplLmxlbmd0aCxjPUtmZShlLHMsbCxuLCExKSxjPT09Yy5uZXh0JiYoYy5zdGVpbmVyPSEwKSxpLnB1c2goWmdyKGMpKTtmb3IoaS5zb3J0KFdnciksbz0wO288aS5sZW5ndGg7bysrKVlncihpW29dLHIpLHI9RzAocixyLm5leHQpO3JldHVybiByfWZ1bmN0aW9uIFdncihlLHQpe3JldHVybiBlLngtdC54fWZ1bmN0aW9uIFlncihlLHQpe2lmKHQ9amdyKGUsdCksdCl7bGV0IHI9SmZlKHQsZSk7RzAodCx0Lm5leHQpLEcwKHIsci5uZXh0KX19ZnVuY3Rpb24gamdyKGUsdCl7bGV0IHI9dCxuPWUueCxpPWUueSxvPS0xLzAsYTtkb3tpZihpPD1yLnkmJmk+PXIubmV4dC55JiZyLm5leHQueSE9PXIueSl7bGV0IGY9ci54KyhpLXIueSkqKHIubmV4dC54LXIueCkvKHIubmV4dC55LXIueSk7aWYoZjw9biYmZj5vKXtpZihvPWYsZj09PW4pe2lmKGk9PT1yLnkpcmV0dXJuIHI7aWYoaT09PXIubmV4dC55KXJldHVybiByLm5leHR9YT1yLng8ci5uZXh0Lng/cjpyLm5leHR9fXI9ci5uZXh0fXdoaWxlKHIhPT10KTtpZighYSlyZXR1cm4gbnVsbDtpZihuPT09bylyZXR1cm4gYTtsZXQgcz1hLGw9YS54LGM9YS55LHU9MS8wLGg7cj1hO2RvIG4+PXIueCYmci54Pj1sJiZuIT09ci54JiZIMyhpPGM/bjpvLGksbCxjLGk8Yz9vOm4saSxyLngsci55KSYmKGg9TWF0aC5hYnMoaS1yLnkpLyhuLXIueCksaDYocixlKSYmKGg8dXx8aD09PXUmJihyLng+YS54fHxyLng9PT1hLngmJlhncihhLHIpKSkmJihhPXIsdT1oKSkscj1yLm5leHQ7d2hpbGUociE9PXMpO3JldHVybiBhfWZ1bmN0aW9uIFhncihlLHQpe3JldHVybiBzaShlLnByZXYsZSx0LnByZXYpPDAmJnNpKHQubmV4dCxlLGUubmV4dCk8MH1mdW5jdGlvbiAkZ3IoZSx0LHIsbil7bGV0IGk9ZTtkbyBpLno9PT1udWxsJiYoaS56PWlodChpLngsaS55LHQscixuKSksaS5wcmV2Wj1pLnByZXYsaS5uZXh0Wj1pLm5leHQsaT1pLm5leHQ7d2hpbGUoaSE9PWUpO2kucHJldloubmV4dFo9bnVsbCxpLnByZXZaPW51bGwsS2dyKGkpfWZ1bmN0aW9uIEtncihlKXtsZXQgdCxyLG4saSxvLGEscyxsLGM9MTtkb3tmb3Iocj1lLGU9bnVsbCxvPW51bGwsYT0wO3I7KXtmb3IoYSsrLG49cixzPTAsdD0wO3Q8YyYmKHMrKyxuPW4ubmV4dFosISFuKTt0KyspO2ZvcihsPWM7cz4wfHxsPjAmJm47KXMhPT0wJiYobD09PTB8fCFufHxyLno8PW4ueik/KGk9cixyPXIubmV4dFoscy0tKTooaT1uLG49bi5uZXh0WixsLS0pLG8/by5uZXh0Wj1pOmU9aSxpLnByZXZaPW8sbz1pO3I9bn1vLm5leHRaPW51bGwsYyo9Mn13aGlsZShhPjEpO3JldHVybiBlfWZ1bmN0aW9uIGlodChlLHQscixuLGkpe3JldHVybiBlPTMyNzY3KihlLXIpKmksdD0zMjc2NyoodC1uKSppLGU9KGV8ZTw8OCkmMTY3MTE5MzUsZT0oZXxlPDw0KSYyNTI2NDUxMzUsZT0oZXxlPDwyKSY4NTg5OTM0NTksZT0oZXxlPDwxKSYxNDMxNjU1NzY1LHQ9KHR8dDw8OCkmMTY3MTE5MzUsdD0odHx0PDw0KSYyNTI2NDUxMzUsdD0odHx0PDwyKSY4NTg5OTM0NTksdD0odHx0PDwxKSYxNDMxNjU1NzY1LGV8dDw8MX1mdW5jdGlvbiBaZ3IoZSl7bGV0IHQ9ZSxyPWU7ZG8odC54PHIueHx8dC54PT09ci54JiZ0Lnk8ci55KSYmKHI9dCksdD10Lm5leHQ7d2hpbGUodCE9PWUpO3JldHVybiByfWZ1bmN0aW9uIEgzKGUsdCxyLG4saSxvLGEscyl7cmV0dXJuKGktYSkqKHQtcyktKGUtYSkqKG8tcyk+PTAmJihlLWEpKihuLXMpLShyLWEpKih0LXMpPj0wJiYoci1hKSooby1zKS0oaS1hKSoobi1zKT49MH1mdW5jdGlvbiBKZ3IoZSx0KXtyZXR1cm4gZS5uZXh0LmkhPT10LmkmJmUucHJldi5pIT09dC5pJiYhUWdyKGUsdCkmJihoNihlLHQpJiZoNih0LGUpJiZ0MHIoZSx0KSYmKHNpKGUucHJldixlLHQucHJldil8fHNpKGUsdC5wcmV2LHQpKXx8S1UoZSx0KSYmc2koZS5wcmV2LGUsZS5uZXh0KT4wJiZzaSh0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIHNpKGUsdCxyKXtyZXR1cm4odC55LWUueSkqKHIueC10LngpLSh0LngtZS54KSooci55LXQueSl9ZnVuY3Rpb24gS1UoZSx0KXtyZXR1cm4gZS54PT09dC54JiZlLnk9PT10Lnl9ZnVuY3Rpb24gWmZlKGUsdCxyLG4pe2xldCBpPXFWKHNpKGUsdCxyKSksbz1xVihzaShlLHQsbikpLGE9cVYoc2kocixuLGUpKSxzPXFWKHNpKHIsbix0KSk7cmV0dXJuISEoaSE9PW8mJmEhPT1zfHxpPT09MCYmVVYoZSxyLHQpfHxvPT09MCYmVVYoZSxuLHQpfHxhPT09MCYmVVYocixlLG4pfHxzPT09MCYmVVYocix0LG4pKX1mdW5jdGlvbiBVVihlLHQscil7cmV0dXJuIHQueDw9TWF0aC5tYXgoZS54LHIueCkmJnQueD49TWF0aC5taW4oZS54LHIueCkmJnQueTw9TWF0aC5tYXgoZS55LHIueSkmJnQueT49TWF0aC5taW4oZS55LHIueSl9ZnVuY3Rpb24gcVYoZSl7cmV0dXJuIGU+MD8xOmU8MD8tMTowfWZ1bmN0aW9uIFFncihlLHQpe2xldCByPWU7ZG97aWYoci5pIT09ZS5pJiZyLm5leHQuaSE9PWUuaSYmci5pIT09dC5pJiZyLm5leHQuaSE9PXQuaSYmWmZlKHIsci5uZXh0LGUsdCkpcmV0dXJuITA7cj1yLm5leHR9d2hpbGUociE9PWUpO3JldHVybiExfWZ1bmN0aW9uIGg2KGUsdCl7cmV0dXJuIHNpKGUucHJldixlLGUubmV4dCk8MD9zaShlLHQsZS5uZXh0KT49MCYmc2koZSxlLnByZXYsdCk+PTA6c2koZSx0LGUucHJldik8MHx8c2koZSxlLm5leHQsdCk8MH1mdW5jdGlvbiB0MHIoZSx0KXtsZXQgcj1lLG49ITEsaT0oZS54K3QueCkvMixvPShlLnkrdC55KS8yO2RvIHIueT5vIT1yLm5leHQueT5vJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooby1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0O3doaWxlKHIhPT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBKZmUoZSx0KXtsZXQgcj1uZXcgb2h0KGUuaSxlLngsZS55KSxuPW5ldyBvaHQodC5pLHQueCx0LnkpLGk9ZS5uZXh0LG89dC5wcmV2O3JldHVybiBlLm5leHQ9dCx0LnByZXY9ZSxyLm5leHQ9aSxpLnByZXY9cixuLm5leHQ9cixyLnByZXY9bixvLm5leHQ9bixuLnByZXY9byxufWZ1bmN0aW9uIHVoZShlLHQscixuKXtsZXQgaT1uZXcgb2h0KGUsdCxyKTtyZXR1cm4gbj8oaS5uZXh0PW4ubmV4dCxpLnByZXY9bixuLm5leHQucHJldj1pLG4ubmV4dD1pKTooaS5wcmV2PWksaS5uZXh0PWkpLGl9ZnVuY3Rpb24gZjYoZSl7ZS5uZXh0LnByZXY9ZS5wcmV2LGUucHJldi5uZXh0PWUubmV4dCxlLnByZXZaJiYoZS5wcmV2Wi5uZXh0Wj1lLm5leHRaKSxlLm5leHRaJiYoZS5uZXh0Wi5wcmV2Wj1lLnByZXZaKX1mdW5jdGlvbiBvaHQoZSx0LHIpe3RoaXMuaT1lLHRoaXMueD10LHRoaXMueT1yLHRoaXMucHJldj1udWxsLHRoaXMubmV4dD1udWxsLHRoaXMuej1udWxsLHRoaXMucHJldlo9bnVsbCx0aGlzLm5leHRaPW51bGwsdGhpcy5zdGVpbmVyPSExfWZ1bmN0aW9uIGUwcihlLHQscixuKXtsZXQgaT0wO2ZvcihsZXQgbz10LGE9ci1uO288cjtvKz1uKWkrPShlW2FdLWVbb10pKihlW28rMV0rZVthKzFdKSxhPW87cmV0dXJuIGl9dmFyIFpjPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCByPXQubGVuZ3RoLG49MDtmb3IobGV0IGk9ci0xLG89MDtvPHI7aT1vKyspbis9dFtpXS54KnRbb10ueS10W29dLngqdFtpXS55O3JldHVybiBuKi41fXN0YXRpYyBpc0Nsb2NrV2lzZSh0KXtyZXR1cm4gWmMuYXJlYSh0KTwwfXN0YXRpYyB0cmlhbmd1bGF0ZVNoYXBlKHQscil7bGV0IG49W10saT1bXSxvPVtdO2hoZSh0KSxmaGUobix0KTtsZXQgYT10Lmxlbmd0aDtyLmZvckVhY2goaGhlKTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylpLnB1c2goYSksYSs9cltsXS5sZW5ndGgsZmhlKG4scltsXSk7bGV0IHM9QmdyLnRyaWFuZ3VsYXRlKG4saSk7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDtsKz0zKW8ucHVzaChzLnNsaWNlKGwsbCszKSk7cmV0dXJuIG99fTtmdW5jdGlvbiBoaGUoZSl7bGV0IHQ9ZS5sZW5ndGg7dD4yJiZlW3QtMV0uZXF1YWxzKGVbMF0pJiZlLnBvcCgpfWZ1bmN0aW9uIGZoZShlLHQpe2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWUucHVzaCh0W3JdLngpLGUucHVzaCh0W3JdLnkpfXZhciBoaD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IEtjKFtuZXcgTHQoLjUsLjUpLG5ldyBMdCgtLjUsLjUpLG5ldyBMdCgtLjUsLS41KSxuZXcgTHQoLjUsLS41KV0pLHI9e30pe3N1cGVyKCksdGhpcy50eXBlPSJFeHRydWRlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsb3B0aW9uczpyfSx0PUFycmF5LmlzQXJyYXkodCk/dDpbdF07bGV0IG49dGhpcyxpPVtdLG89W107Zm9yKGxldCBzPTAsbD10Lmxlbmd0aDtzPGw7cysrKXtsZXQgYz10W3NdO2EoYyl9dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgeGUobywyKSksdGhpcy5jb21wdXRlVmVydGV4Tm9ybWFscygpO2Z1bmN0aW9uIGEocyl7bGV0IGw9W10sYz1yLmN1cnZlU2VnbWVudHMhPT12b2lkIDA/ci5jdXJ2ZVNlZ21lbnRzOjEyLHU9ci5zdGVwcyE9PXZvaWQgMD9yLnN0ZXBzOjEsaD1yLmRlcHRoIT09dm9pZCAwP3IuZGVwdGg6MSxmPXIuYmV2ZWxFbmFibGVkIT09dm9pZCAwP3IuYmV2ZWxFbmFibGVkOiEwLHA9ci5iZXZlbFRoaWNrbmVzcyE9PXZvaWQgMD9yLmJldmVsVGhpY2tuZXNzOi4yLGQ9ci5iZXZlbFNpemUhPT12b2lkIDA/ci5iZXZlbFNpemU6cC0uMSxnPXIuYmV2ZWxPZmZzZXQhPT12b2lkIDA/ci5iZXZlbE9mZnNldDowLF89ci5iZXZlbFNlZ21lbnRzIT09dm9pZCAwP3IuYmV2ZWxTZWdtZW50czozLHk9ci5leHRydWRlUGF0aCx4PXIuVVZHZW5lcmF0b3IhPT12b2lkIDA/ci5VVkdlbmVyYXRvcjpyMHI7ci5hbW91bnQhPT12b2lkIDAmJihjb25zb2xlLndhcm4oIlRIUkVFLkV4dHJ1ZGVCdWZmZXJHZW9tZXRyeTogYW1vdW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVwdGguIiksaD1yLmFtb3VudCk7bGV0IGIsUz0hMSxDLFAsayxPO3kmJihiPXkuZ2V0U3BhY2VkUG9pbnRzKHUpLFM9ITAsZj0hMSxDPXkuY29tcHV0ZUZyZW5ldEZyYW1lcyh1LCExKSxQPW5ldyBqLGs9bmV3IGosTz1uZXcgaiksZnx8KF89MCxwPTAsZD0wLGc9MCk7bGV0IEQ9cy5leHRyYWN0UG9pbnRzKGMpLEI9RC5zaGFwZSxJPUQuaG9sZXM7aWYoIVpjLmlzQ2xvY2tXaXNlKEIpKXtCPUIucmV2ZXJzZSgpO2ZvcihsZXQgcT0wLHB0PUkubGVuZ3RoO3E8cHQ7cSsrKXtsZXQgaHQ9SVtxXTtaYy5pc0Nsb2NrV2lzZShodCkmJihJW3FdPWh0LnJldmVyc2UoKSl9fWxldCBSPVpjLnRyaWFuZ3VsYXRlU2hhcGUoQixJKSxGPUI7Zm9yKGxldCBxPTAscHQ9SS5sZW5ndGg7cTxwdDtxKyspe2xldCBodD1JW3FdO0I9Qi5jb25jYXQoaHQpfWZ1bmN0aW9uIHoocSxwdCxodCl7cmV0dXJuIHB0fHxjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IHZlYyBkb2VzIG5vdCBleGlzdCIpLHB0LmNsb25lKCkubXVsdGlwbHlTY2FsYXIoaHQpLmFkZChxKX1sZXQgVT1CLmxlbmd0aCxXPVIubGVuZ3RoO2Z1bmN0aW9uIFoocSxwdCxodCl7bGV0IHd0LGt0LGllLGVlPXEueC1wdC54LExlPXEueS1wdC55LGFyPWh0LngtcS54LGZyPWh0LnktcS55LHR0PWVlKmVlK0xlKkxlLCQ9ZWUqZnItTGUqYXI7aWYoTWF0aC5hYnMoJCk+TnVtYmVyLkVQU0lMT04pe2xldCBJdD1NYXRoLnNxcnQodHQpLCR0PU1hdGguc3FydChhciphcitmcipmciksaGU9cHQueC1MZS9JdCxUdD1wdC55K2VlL0l0LGJlPWh0LngtZnIvJHQsbnQ9aHQueSthci8kdCxDdD0oKGJlLWhlKSpmci0obnQtVHQpKmFyKS8oZWUqZnItTGUqYXIpO3d0PWhlK2VlKkN0LXEueCxrdD1UdCtMZSpDdC1xLnk7bGV0IFd0PXd0Knd0K2t0Kmt0O2lmKFd0PD0yKXJldHVybiBuZXcgTHQod3Qsa3QpO2llPU1hdGguc3FydChXdC8yKX1lbHNle2xldCBJdD0hMTtlZT5OdW1iZXIuRVBTSUxPTj9hcj5OdW1iZXIuRVBTSUxPTiYmKEl0PSEwKTplZTwtTnVtYmVyLkVQU0lMT04/YXI8LU51bWJlci5FUFNJTE9OJiYoSXQ9ITApOk1hdGguc2lnbihMZSk9PT1NYXRoLnNpZ24oZnIpJiYoSXQ9ITApLEl0Pyh3dD0tTGUsa3Q9ZWUsaWU9TWF0aC5zcXJ0KHR0KSk6KHd0PWVlLGt0PUxlLGllPU1hdGguc3FydCh0dC8yKSl9cmV0dXJuIG5ldyBMdCh3dC9pZSxrdC9pZSl9bGV0IHJ0PVtdO2ZvcihsZXQgcT0wLHB0PUYubGVuZ3RoLGh0PXB0LTEsd3Q9cSsxO3E8cHQ7cSsrLGh0Kyssd3QrKylodD09PXB0JiYoaHQ9MCksd3Q9PT1wdCYmKHd0PTApLHJ0W3FdPVooRltxXSxGW2h0XSxGW3d0XSk7bGV0IG90PVtdLHN0LFN0PXJ0LmNvbmNhdCgpO2ZvcihsZXQgcT0wLHB0PUkubGVuZ3RoO3E8cHQ7cSsrKXtsZXQgaHQ9SVtxXTtzdD1bXTtmb3IobGV0IHd0PTAsa3Q9aHQubGVuZ3RoLGllPWt0LTEsZWU9d3QrMTt3dDxrdDt3dCsrLGllKyssZWUrKylpZT09PWt0JiYoaWU9MCksZWU9PT1rdCYmKGVlPTApLHN0W3d0XT1aKGh0W3d0XSxodFtpZV0saHRbZWVdKTtvdC5wdXNoKHN0KSxTdD1TdC5jb25jYXQoc3QpfWZvcihsZXQgcT0wO3E8XztxKyspe2xldCBwdD1xL18saHQ9cCpNYXRoLmNvcyhwdCpNYXRoLlBJLzIpLHd0PWQqTWF0aC5zaW4ocHQqTWF0aC5QSS8yKStnO2ZvcihsZXQga3Q9MCxpZT1GLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9eihGW2t0XSxydFtrdF0sd3QpO190KGVlLngsZWUueSwtaHQpfWZvcihsZXQga3Q9MCxpZT1JLmxlbmd0aDtrdDxpZTtrdCsrKXtsZXQgZWU9SVtrdF07c3Q9b3Rba3RdO2ZvcihsZXQgTGU9MCxhcj1lZS5sZW5ndGg7TGU8YXI7TGUrKyl7bGV0IGZyPXooZWVbTGVdLHN0W0xlXSx3dCk7X3QoZnIueCxmci55LC1odCl9fX1sZXQgYnQ9ZCtnO2ZvcihsZXQgcT0wO3E8VTtxKyspe2xldCBwdD1mP3ooQltxXSxTdFtxXSxidCk6QltxXTtTPyhrLmNvcHkoQy5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihwdC54KSxQLmNvcHkoQy5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKHB0LnkpLE8uY29weShiWzBdKS5hZGQoaykuYWRkKFApLF90KE8ueCxPLnksTy56KSk6X3QocHQueCxwdC55LDApfWZvcihsZXQgcT0xO3E8PXU7cSsrKWZvcihsZXQgcHQ9MDtwdDxVO3B0Kyspe2xldCBodD1mP3ooQltwdF0sU3RbcHRdLGJ0KTpCW3B0XTtTPyhrLmNvcHkoQy5ub3JtYWxzW3FdKS5tdWx0aXBseVNjYWxhcihodC54KSxQLmNvcHkoQy5iaW5vcm1hbHNbcV0pLm11bHRpcGx5U2NhbGFyKGh0LnkpLE8uY29weShiW3FdKS5hZGQoaykuYWRkKFApLF90KE8ueCxPLnksTy56KSk6X3QoaHQueCxodC55LGgvdSpxKX1mb3IobGV0IHE9Xy0xO3E+PTA7cS0tKXtsZXQgcHQ9cS9fLGh0PXAqTWF0aC5jb3MocHQqTWF0aC5QSS8yKSx3dD1kKk1hdGguc2luKHB0Kk1hdGguUEkvMikrZztmb3IobGV0IGt0PTAsaWU9Ri5sZW5ndGg7a3Q8aWU7a3QrKyl7bGV0IGVlPXooRltrdF0scnRba3RdLHd0KTtfdChlZS54LGVlLnksaCtodCl9Zm9yKGxldCBrdD0wLGllPUkubGVuZ3RoO2t0PGllO2t0Kyspe2xldCBlZT1JW2t0XTtzdD1vdFtrdF07Zm9yKGxldCBMZT0wLGFyPWVlLmxlbmd0aDtMZTxhcjtMZSsrKXtsZXQgZnI9eihlZVtMZV0sc3RbTGVdLHd0KTtTP190KGZyLngsZnIueStiW3UtMV0ueSxiW3UtMV0ueCtodCk6X3QoZnIueCxmci55LGgraHQpfX19TXQoKSxsdCgpO2Z1bmN0aW9uIE10KCl7bGV0IHE9aS5sZW5ndGgvMztpZihmKXtsZXQgcHQ9MCxodD1VKnB0O2ZvcihsZXQgd3Q9MDt3dDxXO3d0Kyspe2xldCBrdD1SW3d0XTtjdChrdFsyXStodCxrdFsxXStodCxrdFswXStodCl9cHQ9dStfKjIsaHQ9VSpwdDtmb3IobGV0IHd0PTA7d3Q8Vzt3dCsrKXtsZXQga3Q9Ult3dF07Y3Qoa3RbMF0raHQsa3RbMV0raHQsa3RbMl0raHQpfX1lbHNle2ZvcihsZXQgcHQ9MDtwdDxXO3B0Kyspe2xldCBodD1SW3B0XTtjdChodFsyXSxodFsxXSxodFswXSl9Zm9yKGxldCBwdD0wO3B0PFc7cHQrKyl7bGV0IGh0PVJbcHRdO2N0KGh0WzBdK1UqdSxodFsxXStVKnUsaHRbMl0rVSp1KX19bi5hZGRHcm91cChxLGkubGVuZ3RoLzMtcSwwKX1mdW5jdGlvbiBsdCgpe2xldCBxPWkubGVuZ3RoLzMscHQ9MDtLdChGLHB0KSxwdCs9Ri5sZW5ndGg7Zm9yKGxldCBodD0wLHd0PUkubGVuZ3RoO2h0PHd0O2h0Kyspe2xldCBrdD1JW2h0XTtLdChrdCxwdCkscHQrPWt0Lmxlbmd0aH1uLmFkZEdyb3VwKHEsaS5sZW5ndGgvMy1xLDEpfWZ1bmN0aW9uIEt0KHEscHQpe2xldCBodD1xLmxlbmd0aDtmb3IoOy0taHQ+PTA7KXtsZXQgd3Q9aHQsa3Q9aHQtMTtrdDwwJiYoa3Q9cS5sZW5ndGgtMSk7Zm9yKGxldCBpZT0wLGVlPXUrXyoyO2llPGVlO2llKyspe2xldCBMZT1VKmllLGFyPVUqKGllKzEpLGZyPXB0K3d0K0xlLHR0PXB0K2t0K0xlLCQ9cHQra3QrYXIsSXQ9cHQrd3QrYXI7WChmcix0dCwkLEl0KX19fWZ1bmN0aW9uIF90KHEscHQsaHQpe2wucHVzaChxKSxsLnB1c2gocHQpLGwucHVzaChodCl9ZnVuY3Rpb24gY3QocSxwdCxodCl7ZXQocSksZXQocHQpLGV0KGh0KTtsZXQgd3Q9aS5sZW5ndGgvMyxrdD14LmdlbmVyYXRlVG9wVVYobixpLHd0LTMsd3QtMix3dC0xKTtkdChrdFswXSksZHQoa3RbMV0pLGR0KGt0WzJdKX1mdW5jdGlvbiBYKHEscHQsaHQsd3Qpe2V0KHEpLGV0KHB0KSxldCh3dCksZXQocHQpLGV0KGh0KSxldCh3dCk7bGV0IGt0PWkubGVuZ3RoLzMsaWU9eC5nZW5lcmF0ZVNpZGVXYWxsVVYobixpLGt0LTYsa3QtMyxrdC0yLGt0LTEpO2R0KGllWzBdKSxkdChpZVsxXSksZHQoaWVbM10pLGR0KGllWzFdKSxkdChpZVsyXSksZHQoaWVbM10pfWZ1bmN0aW9uIGV0KHEpe2kucHVzaChsW3EqMyswXSksaS5wdXNoKGxbcSozKzFdKSxpLnB1c2gobFtxKjMrMl0pfWZ1bmN0aW9uIGR0KHEpe28ucHVzaChxLngpLG8ucHVzaChxLnkpfX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCkscj10aGlzLnBhcmFtZXRlcnMuc2hhcGVzLG49dGhpcy5wYXJhbWV0ZXJzLm9wdGlvbnM7cmV0dXJuIG4wcihyLG4sdCl9c3RhdGljIGZyb21KU09OKHQscil7bGV0IG49W107Zm9yKGxldCBvPTAsYT10LnNoYXBlcy5sZW5ndGg7bzxhO28rKyl7bGV0IHM9clt0LnNoYXBlc1tvXV07bi5wdXNoKHMpfWxldCBpPXQub3B0aW9ucy5leHRydWRlUGF0aDtyZXR1cm4gaSE9PXZvaWQgMCYmKHQub3B0aW9ucy5leHRydWRlUGF0aD1uZXcgemh0W2kudHlwZV0oKS5mcm9tSlNPTihpKSksbmV3IGhoKG4sdC5vcHRpb25zKX19LHIwcj17Z2VuZXJhdGVUb3BVVjpmdW5jdGlvbihlLHQscixuLGkpe2xldCBvPXRbciozXSxhPXRbciozKzFdLHM9dFtuKjNdLGw9dFtuKjMrMV0sYz10W2kqM10sdT10W2kqMysxXTtyZXR1cm5bbmV3IEx0KG8sYSksbmV3IEx0KHMsbCksbmV3IEx0KGMsdSldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24oZSx0LHIsbixpLG8pe2xldCBhPXRbciozXSxzPXRbciozKzFdLGw9dFtyKjMrMl0sYz10W24qM10sdT10W24qMysxXSxoPXRbbiozKzJdLGY9dFtpKjNdLHA9dFtpKjMrMV0sZD10W2kqMysyXSxnPXRbbyozXSxfPXRbbyozKzFdLHk9dFtvKjMrMl07cmV0dXJuIE1hdGguYWJzKHMtdSk8TWF0aC5hYnMoYS1jKT9bbmV3IEx0KGEsMS1sKSxuZXcgTHQoYywxLWgpLG5ldyBMdChmLDEtZCksbmV3IEx0KGcsMS15KV06W25ldyBMdChzLDEtbCksbmV3IEx0KHUsMS1oKSxuZXcgTHQocCwxLWQpLG5ldyBMdChfLDEteSldfX07ZnVuY3Rpb24gbjByKGUsdCxyKXtpZihyLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KGUpKWZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl7bGV0IG89ZVtuXTtyLnNoYXBlcy5wdXNoKG8udXVpZCl9ZWxzZSByLnNoYXBlcy5wdXNoKGUudXVpZCk7cmV0dXJuIHQuZXh0cnVkZVBhdGghPT12b2lkIDAmJihyLm9wdGlvbnMuZXh0cnVkZVBhdGg9dC5leHRydWRlUGF0aC50b0pTT04oKSkscn12YXIgR3Y9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj0oMStNYXRoLnNxcnQoNSkpLzIsaT1bLTEsbiwwLDEsbiwwLC0xLC1uLDAsMSwtbiwwLDAsLTEsbiwwLDEsbiwwLC0xLC1uLDAsMSwtbixuLDAsLTEsbiwwLDEsLW4sMCwtMSwtbiwwLDFdLG89WzAsMTEsNSwwLDUsMSwwLDEsNywwLDcsMTAsMCwxMCwxMSwxLDUsOSw1LDExLDQsMTEsMTAsMiwxMCw3LDYsNywxLDgsMyw5LDQsMyw0LDIsMywyLDYsMyw2LDgsMyw4LDksNCw5LDUsMiw0LDExLDYsMiwxMCw4LDYsNyw5LDgsMV07c3VwZXIoaSxvLHQsciksdGhpcy50eXBlPSJJY29zYWhlZHJvbkdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LGRldGFpbDpyfX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBHdih0LnJhZGl1cyx0LmRldGFpbCl9fSxXdj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9W25ldyBMdCgwLC41KSxuZXcgTHQoLjUsMCksbmV3IEx0KDAsLS41KV0scj0xMixuPTAsaT1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJMYXRoZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3BvaW50czp0LHNlZ21lbnRzOnIscGhpU3RhcnQ6bixwaGlMZW5ndGg6aX0scj1NYXRoLmZsb29yKHIpLGk9Wm8oaSwwLE1hdGguUEkqMik7bGV0IG89W10sYT1bXSxzPVtdLGw9W10sYz1bXSx1PTEvcixoPW5ldyBqLGY9bmV3IEx0LHA9bmV3IGosZD1uZXcgaixnPW5ldyBqLF89MCx5PTA7Zm9yKGxldCB4PTA7eDw9dC5sZW5ndGgtMTt4Kyspc3dpdGNoKHgpe2Nhc2UgMDpfPXRbeCsxXS54LXRbeF0ueCx5PXRbeCsxXS55LXRbeF0ueSxwLng9eSoxLHAueT0tXyxwLno9eSowLGcuY29weShwKSxwLm5vcm1hbGl6ZSgpLGwucHVzaChwLngscC55LHAueik7YnJlYWs7Y2FzZSB0Lmxlbmd0aC0xOmwucHVzaChnLngsZy55LGcueik7YnJlYWs7ZGVmYXVsdDpfPXRbeCsxXS54LXRbeF0ueCx5PXRbeCsxXS55LXRbeF0ueSxwLng9eSoxLHAueT0tXyxwLno9eSowLGQuY29weShwKSxwLngrPWcueCxwLnkrPWcueSxwLnorPWcueixwLm5vcm1hbGl6ZSgpLGwucHVzaChwLngscC55LHAueiksZy5jb3B5KGQpfWZvcihsZXQgeD0wO3g8PXI7eCsrKXtsZXQgYj1uK3gqdSppLFM9TWF0aC5zaW4oYiksQz1NYXRoLmNvcyhiKTtmb3IobGV0IFA9MDtQPD10Lmxlbmd0aC0xO1ArKyl7aC54PXRbUF0ueCpTLGgueT10W1BdLnksaC56PXRbUF0ueCpDLGEucHVzaChoLngsaC55LGgueiksZi54PXgvcixmLnk9UC8odC5sZW5ndGgtMSkscy5wdXNoKGYueCxmLnkpO2xldCBrPWxbMypQKzBdKlMsTz1sWzMqUCsxXSxEPWxbMypQKzBdKkM7Yy5wdXNoKGssTyxEKX19Zm9yKGxldCB4PTA7eDxyO3grKylmb3IobGV0IGI9MDtiPHQubGVuZ3RoLTE7YisrKXtsZXQgUz1iK3gqdC5sZW5ndGgsQz1TLFA9Uyt0Lmxlbmd0aCxrPVMrdC5sZW5ndGgrMSxPPVMrMTtvLnB1c2goQyxQLE8pLG8ucHVzaChrLE8sUCl9dGhpcy5zZXRJbmRleChvKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShzLDIpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgeGUoYywzKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgV3YodC5wb2ludHMsdC5zZWdtZW50cyx0LnBoaVN0YXJ0LHQucGhpTGVuZ3RoKX19LFcwPWNsYXNzIGV4dGVuZHMgdWh7Y29uc3RydWN0b3IodD0xLHI9MCl7bGV0IG49WzEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xLDAsMCwwLDEsMCwwLC0xXSxpPVswLDIsNCwwLDQsMywwLDMsNSwwLDUsMiwxLDIsNSwxLDUsMywxLDMsNCwxLDQsMl07c3VwZXIobixpLHQsciksdGhpcy50eXBlPSJPY3RhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFcwKHQucmFkaXVzLHQuZGV0YWlsKX19LFl2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0uNSxyPTEsbj04LGk9MSxvPTAsYT1NYXRoLlBJKjIpe3N1cGVyKCksdGhpcy50eXBlPSJSaW5nR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17aW5uZXJSYWRpdXM6dCxvdXRlclJhZGl1czpyLHRoZXRhU2VnbWVudHM6bixwaGlTZWdtZW50czppLHRoZXRhU3RhcnQ6byx0aGV0YUxlbmd0aDphfSxuPU1hdGgubWF4KDMsbiksaT1NYXRoLm1heCgxLGkpO2xldCBzPVtdLGw9W10sYz1bXSx1PVtdLGg9dCxmPShyLXQpL2kscD1uZXcgaixkPW5ldyBMdDtmb3IobGV0IGc9MDtnPD1pO2crKyl7Zm9yKGxldCBfPTA7Xzw9bjtfKyspe2xldCB5PW8rXy9uKmE7cC54PWgqTWF0aC5jb3MoeSkscC55PWgqTWF0aC5zaW4oeSksbC5wdXNoKHAueCxwLnkscC56KSxjLnB1c2goMCwwLDEpLGQueD0ocC54L3IrMSkvMixkLnk9KHAueS9yKzEpLzIsdS5wdXNoKGQueCxkLnkpfWgrPWZ9Zm9yKGxldCBnPTA7ZzxpO2crKyl7bGV0IF89ZyoobisxKTtmb3IobGV0IHk9MDt5PG47eSsrKXtsZXQgeD15K18sYj14LFM9eCtuKzEsQz14K24rMixQPXgrMTtzLnB1c2goYixTLFApLHMucHVzaChTLEMsUCl9fXRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHUsMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IFl2KHQuaW5uZXJSYWRpdXMsdC5vdXRlclJhZGl1cyx0LnRoZXRhU2VnbWVudHMsdC5waGlTZWdtZW50cyx0LnRoZXRhU3RhcnQsdC50aGV0YUxlbmd0aCl9fSxZMD1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9bmV3IEtjKFtuZXcgTHQoMCwuNSksbmV3IEx0KC0uNSwtLjUpLG5ldyBMdCguNSwtLjUpXSkscj0xMil7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYXBlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17c2hhcGVzOnQsY3VydmVTZWdtZW50czpyfTtsZXQgbj1bXSxpPVtdLG89W10sYT1bXSxzPTAsbD0wO2lmKEFycmF5LmlzQXJyYXkodCk9PT0hMSljKHQpO2Vsc2UgZm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspYyh0W3VdKSx0aGlzLmFkZEdyb3VwKHMsbCx1KSxzKz1sLGw9MDt0aGlzLnNldEluZGV4KG4pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShhLDIpKTtmdW5jdGlvbiBjKHUpe2xldCBoPWkubGVuZ3RoLzMsZj11LmV4dHJhY3RQb2ludHMocikscD1mLnNoYXBlLGQ9Zi5ob2xlcztaYy5pc0Nsb2NrV2lzZShwKT09PSExJiYocD1wLnJldmVyc2UoKSk7Zm9yKGxldCBfPTAseT1kLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1kW19dO1pjLmlzQ2xvY2tXaXNlKHgpPT09ITAmJihkW19dPXgucmV2ZXJzZSgpKX1sZXQgZz1aYy50cmlhbmd1bGF0ZVNoYXBlKHAsZCk7Zm9yKGxldCBfPTAseT1kLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1kW19dO3A9cC5jb25jYXQoeCl9Zm9yKGxldCBfPTAseT1wLmxlbmd0aDtfPHk7XysrKXtsZXQgeD1wW19dO2kucHVzaCh4LngseC55LDApLG8ucHVzaCgwLDAsMSksYS5wdXNoKHgueCx4LnkpfWZvcihsZXQgXz0wLHk9Zy5sZW5ndGg7Xzx5O18rKyl7bGV0IHg9Z1tfXSxiPXhbMF0raCxTPXhbMV0raCxDPXhbMl0raDtuLnB1c2goYixTLEMpLGwrPTN9fX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKSxyPXRoaXMucGFyYW1ldGVycy5zaGFwZXM7cmV0dXJuIGkwcihyLHQpfXN0YXRpYyBmcm9tSlNPTih0LHIpe2xldCBuPVtdO2ZvcihsZXQgaT0wLG89dC5zaGFwZXMubGVuZ3RoO2k8bztpKyspe2xldCBhPXJbdC5zaGFwZXNbaV1dO24ucHVzaChhKX1yZXR1cm4gbmV3IFkwKG4sdC5jdXJ2ZVNlZ21lbnRzKX19O2Z1bmN0aW9uIGkwcihlLHQpe2lmKHQuc2hhcGVzPVtdLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47cisrKXtsZXQgaT1lW3JdO3Quc2hhcGVzLnB1c2goaS51dWlkKX1lbHNlIHQuc2hhcGVzLnB1c2goZS51dWlkKTtyZXR1cm4gdH12YXIgajA9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PTEscj0zMixuPTE2LGk9MCxvPU1hdGguUEkqMixhPTAscz1NYXRoLlBJKXtzdXBlcigpLHRoaXMudHlwZT0iU3BoZXJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsd2lkdGhTZWdtZW50czpyLGhlaWdodFNlZ21lbnRzOm4scGhpU3RhcnQ6aSxwaGlMZW5ndGg6byx0aGV0YVN0YXJ0OmEsdGhldGFMZW5ndGg6c30scj1NYXRoLm1heCgzLE1hdGguZmxvb3IocikpLG49TWF0aC5tYXgoMixNYXRoLmZsb29yKG4pKTtsZXQgbD1NYXRoLm1pbihhK3MsTWF0aC5QSSksYz0wLHU9W10saD1uZXcgaixmPW5ldyBqLHA9W10sZD1bXSxnPVtdLF89W107Zm9yKGxldCB5PTA7eTw9bjt5Kyspe2xldCB4PVtdLGI9eS9uLFM9MDt5PT0wJiZhPT0wP1M9LjUvcjp5PT1uJiZsPT1NYXRoLlBJJiYoUz0tLjUvcik7Zm9yKGxldCBDPTA7Qzw9cjtDKyspe2xldCBQPUMvcjtoLng9LXQqTWF0aC5jb3MoaStQKm8pKk1hdGguc2luKGErYipzKSxoLnk9dCpNYXRoLmNvcyhhK2IqcyksaC56PXQqTWF0aC5zaW4oaStQKm8pKk1hdGguc2luKGErYipzKSxkLnB1c2goaC54LGgueSxoLnopLGYuY29weShoKS5ub3JtYWxpemUoKSxnLnB1c2goZi54LGYueSxmLnopLF8ucHVzaChQK1MsMS1iKSx4LnB1c2goYysrKX11LnB1c2goeCl9Zm9yKGxldCB5PTA7eTxuO3krKylmb3IobGV0IHg9MDt4PHI7eCsrKXtsZXQgYj11W3ldW3grMV0sUz11W3ldW3hdLEM9dVt5KzFdW3hdLFA9dVt5KzFdW3grMV07KHkhPT0wfHxhPjApJiZwLnB1c2goYixTLFApLCh5IT09bi0xfHxsPE1hdGguUEkpJiZwLnB1c2goUyxDLFApfXRoaXMuc2V0SW5kZXgocCksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoZCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGcsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKF8sMikpfXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGowKHQucmFkaXVzLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQucGhpU3RhcnQsdC5waGlMZW5ndGgsdC50aGV0YVN0YXJ0LHQudGhldGFMZW5ndGgpfX0sanY9Y2xhc3MgZXh0ZW5kcyB1aHtjb25zdHJ1Y3Rvcih0PTEscj0wKXtsZXQgbj1bMSwxLDEsLTEsLTEsMSwtMSwxLC0xLDEsLTEsLTFdLGk9WzIsMSwwLDAsMywyLDEsMywwLDIsMywxXTtzdXBlcihuLGksdCxyKSx0aGlzLnR5cGU9IlRldHJhaGVkcm9uR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsZGV0YWlsOnJ9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IGp2KHQucmFkaXVzLHQuZGV0YWlsKX19LFh2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD0xLHI9LjQsbj04LGk9NixvPU1hdGguUEkqMil7c3VwZXIoKSx0aGlzLnR5cGU9IlRvcnVzR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cmFkaXVzOnQsdHViZTpyLHJhZGlhbFNlZ21lbnRzOm4sdHVidWxhclNlZ21lbnRzOmksYXJjOm99LG49TWF0aC5mbG9vcihuKSxpPU1hdGguZmxvb3IoaSk7bGV0IGE9W10scz1bXSxsPVtdLGM9W10sdT1uZXcgaixoPW5ldyBqLGY9bmV3IGo7Zm9yKGxldCBwPTA7cDw9bjtwKyspZm9yKGxldCBkPTA7ZDw9aTtkKyspe2xldCBnPWQvaSpvLF89cC9uKk1hdGguUEkqMjtoLng9KHQrcipNYXRoLmNvcyhfKSkqTWF0aC5jb3MoZyksaC55PSh0K3IqTWF0aC5jb3MoXykpKk1hdGguc2luKGcpLGguej1yKk1hdGguc2luKF8pLHMucHVzaChoLngsaC55LGgueiksdS54PXQqTWF0aC5jb3MoZyksdS55PXQqTWF0aC5zaW4oZyksZi5zdWJWZWN0b3JzKGgsdSkubm9ybWFsaXplKCksbC5wdXNoKGYueCxmLnksZi56KSxjLnB1c2goZC9pKSxjLnB1c2gocC9uKX1mb3IobGV0IHA9MTtwPD1uO3ArKylmb3IobGV0IGQ9MTtkPD1pO2QrKyl7bGV0IGc9KGkrMSkqcCtkLTEsXz0oaSsxKSoocC0xKStkLTEseT0oaSsxKSoocC0xKStkLHg9KGkrMSkqcCtkO2EucHVzaChnLF8seCksYS5wdXNoKF8seSx4KX10aGlzLnNldEluZGV4KGEpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShsLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShjLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBYdih0LnJhZGl1cyx0LnR1YmUsdC5yYWRpYWxTZWdtZW50cyx0LnR1YnVsYXJTZWdtZW50cyx0LmFyYyl9fSwkdj1jbGFzcyBleHRlbmRzIFBle2NvbnN0cnVjdG9yKHQ9MSxyPS40LG49NjQsaT04LG89MixhPTMpe3N1cGVyKCksdGhpcy50eXBlPSJUb3J1c0tub3RHZW9tZXRyeSIsdGhpcy5wYXJhbWV0ZXJzPXtyYWRpdXM6dCx0dWJlOnIsdHVidWxhclNlZ21lbnRzOm4scmFkaWFsU2VnbWVudHM6aSxwOm8scTphfSxuPU1hdGguZmxvb3IobiksaT1NYXRoLmZsb29yKGkpO2xldCBzPVtdLGw9W10sYz1bXSx1PVtdLGg9bmV3IGosZj1uZXcgaixwPW5ldyBqLGQ9bmV3IGosZz1uZXcgaixfPW5ldyBqLHk9bmV3IGo7Zm9yKGxldCBiPTA7Yjw9bjsrK2Ipe2xldCBTPWIvbipvKk1hdGguUEkqMjt4KFMsbyxhLHQscCkseChTKy4wMSxvLGEsdCxkKSxfLnN1YlZlY3RvcnMoZCxwKSx5LmFkZFZlY3RvcnMoZCxwKSxnLmNyb3NzVmVjdG9ycyhfLHkpLHkuY3Jvc3NWZWN0b3JzKGcsXyksZy5ub3JtYWxpemUoKSx5Lm5vcm1hbGl6ZSgpO2ZvcihsZXQgQz0wO0M8PWk7KytDKXtsZXQgUD1DL2kqTWF0aC5QSSoyLGs9LXIqTWF0aC5jb3MoUCksTz1yKk1hdGguc2luKFApO2gueD1wLngrKGsqeS54K08qZy54KSxoLnk9cC55KyhrKnkueStPKmcueSksaC56PXAueisoayp5LnorTypnLnopLGwucHVzaChoLngsaC55LGgueiksZi5zdWJWZWN0b3JzKGgscCkubm9ybWFsaXplKCksYy5wdXNoKGYueCxmLnksZi56KSx1LnB1c2goYi9uKSx1LnB1c2goQy9pKX19Zm9yKGxldCBiPTE7Yjw9bjtiKyspZm9yKGxldCBTPTE7Uzw9aTtTKyspe2xldCBDPShpKzEpKihiLTEpKyhTLTEpLFA9KGkrMSkqYisoUy0xKSxrPShpKzEpKmIrUyxPPShpKzEpKihiLTEpK1M7cy5wdXNoKEMsUCxPKSxzLnB1c2goUCxrLE8pfXRoaXMuc2V0SW5kZXgocyksdGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoIm5vcm1hbCIsbmV3IHhlKGMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJ1diIsbmV3IHhlKHUsMikpO2Z1bmN0aW9uIHgoYixTLEMsUCxrKXtsZXQgTz1NYXRoLmNvcyhiKSxEPU1hdGguc2luKGIpLEI9Qy9TKmIsST1NYXRoLmNvcyhCKTtrLng9UCooMitJKSouNSpPLGsueT1QKigyK0kpKkQqLjUsay56PVAqTWF0aC5zaW4oQikqLjV9fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3ICR2KHQucmFkaXVzLHQudHViZSx0LnR1YnVsYXJTZWdtZW50cyx0LnJhZGlhbFNlZ21lbnRzLHQucCx0LnEpfX0sS3Y9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcih0PW5ldyBoTShuZXcgaigtMSwtMSwwKSxuZXcgaigtMSwxLDApLG5ldyBqKDEsMSwwKSkscj02NCxuPTEsaT04LG89ITEpe3N1cGVyKCksdGhpcy50eXBlPSJUdWJlR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17cGF0aDp0LHR1YnVsYXJTZWdtZW50czpyLHJhZGl1czpuLHJhZGlhbFNlZ21lbnRzOmksY2xvc2VkOm99O2xldCBhPXQuY29tcHV0ZUZyZW5ldEZyYW1lcyhyLG8pO3RoaXMudGFuZ2VudHM9YS50YW5nZW50cyx0aGlzLm5vcm1hbHM9YS5ub3JtYWxzLHRoaXMuYmlub3JtYWxzPWEuYmlub3JtYWxzO2xldCBzPW5ldyBqLGw9bmV3IGosYz1uZXcgTHQsdT1uZXcgaixoPVtdLGY9W10scD1bXSxkPVtdO2coKSx0aGlzLnNldEluZGV4KGQpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGgsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyB4ZShmLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyB4ZShwLDIpKTtmdW5jdGlvbiBnKCl7Zm9yKGxldCBiPTA7YjxyO2IrKylfKGIpO18obz09PSExP3I6MCkseCgpLHkoKX1mdW5jdGlvbiBfKGIpe3U9dC5nZXRQb2ludEF0KGIvcix1KTtsZXQgUz1hLm5vcm1hbHNbYl0sQz1hLmJpbm9ybWFsc1tiXTtmb3IobGV0IFA9MDtQPD1pO1ArKyl7bGV0IGs9UC9pKk1hdGguUEkqMixPPU1hdGguc2luKGspLEQ9LU1hdGguY29zKGspO2wueD1EKlMueCtPKkMueCxsLnk9RCpTLnkrTypDLnksbC56PUQqUy56K08qQy56LGwubm9ybWFsaXplKCksZi5wdXNoKGwueCxsLnksbC56KSxzLng9dS54K24qbC54LHMueT11LnkrbipsLnkscy56PXUueituKmwueixoLnB1c2gocy54LHMueSxzLnopfX1mdW5jdGlvbiB5KCl7Zm9yKGxldCBiPTE7Yjw9cjtiKyspZm9yKGxldCBTPTE7Uzw9aTtTKyspe2xldCBDPShpKzEpKihiLTEpKyhTLTEpLFA9KGkrMSkqYisoUy0xKSxrPShpKzEpKmIrUyxPPShpKzEpKihiLTEpK1M7ZC5wdXNoKEMsUCxPKSxkLnB1c2goUCxrLE8pfX1mdW5jdGlvbiB4KCl7Zm9yKGxldCBiPTA7Yjw9cjtiKyspZm9yKGxldCBTPTA7Uzw9aTtTKyspYy54PWIvcixjLnk9Uy9pLHAucHVzaChjLngsYy55KX19dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQucGF0aD10aGlzLnBhcmFtZXRlcnMucGF0aC50b0pTT04oKSx0fXN0YXRpYyBmcm9tSlNPTih0KXtyZXR1cm4gbmV3IEt2KG5ldyB6aHRbdC5wYXRoLnR5cGVdKCkuZnJvbUpTT04odC5wYXRoKSx0LnR1YnVsYXJTZWdtZW50cyx0LnJhZGl1cyx0LnJhZGlhbFNlZ21lbnRzLHQuY2xvc2VkKX19LHA2PWNsYXNzIGV4dGVuZHMgUGV7Y29uc3RydWN0b3IodD1udWxsKXtpZihzdXBlcigpLHRoaXMudHlwZT0iV2lyZWZyYW1lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17Z2VvbWV0cnk6dH0sdCE9PW51bGwpe2xldCByPVtdLG49bmV3IFNldCxpPW5ldyBqLG89bmV3IGo7aWYodC5pbmRleCE9PW51bGwpe2xldCBhPXQuYXR0cmlidXRlcy5wb3NpdGlvbixzPXQuaW5kZXgsbD10Lmdyb3VwcztsLmxlbmd0aD09PTAmJihsPVt7c3RhcnQ6MCxjb3VudDpzLmNvdW50LG1hdGVyaWFsSW5kZXg6MH1dKTtmb3IobGV0IGM9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpe2xldCBoPWxbY10sZj1oLnN0YXJ0LHA9aC5jb3VudDtmb3IobGV0IGQ9ZixnPWYrcDtkPGc7ZCs9Mylmb3IobGV0IF89MDtfPDM7XysrKXtsZXQgeT1zLmdldFgoZCtfKSx4PXMuZ2V0WChkKyhfKzEpJTMpO2kuZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHkpLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHgpLHBoZShpLG8sbik9PT0hMCYmKHIucHVzaChpLngsaS55LGkueiksci5wdXNoKG8ueCxvLnksby56KSl9fX1lbHNle2xldCBhPXQuYXR0cmlidXRlcy5wb3NpdGlvbjtmb3IobGV0IHM9MCxsPWEuY291bnQvMztzPGw7cysrKWZvcihsZXQgYz0wO2M8MztjKyspe2xldCB1PTMqcytjLGg9MypzKyhjKzEpJTM7aS5mcm9tQnVmZmVyQXR0cmlidXRlKGEsdSksby5mcm9tQnVmZmVyQXR0cmlidXRlKGEsaCkscGhlKGksbyxuKT09PSEwJiYoci5wdXNoKGkueCxpLnksaS56KSxyLnB1c2goby54LG8ueSxvLnopKX19dGhpcy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSl9fX07ZnVuY3Rpb24gcGhlKGUsdCxyKXtsZXQgbj1gJHtlLnh9LCR7ZS55fSwke2Uuen0tJHt0Lnh9LCR7dC55fSwke3Quen1gLGk9YCR7dC54fSwke3QueX0sJHt0Lnp9LSR7ZS54fSwke2UueX0sJHtlLnp9YDtyZXR1cm4gci5oYXMobik9PT0hMHx8ci5oYXMoaSk9PT0hMD8hMTooci5hZGQobixpKSwhMCl9dmFyIGRoZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxCb3hHZW9tZXRyeTpRZixCb3hCdWZmZXJHZW9tZXRyeTpRZixDaXJjbGVHZW9tZXRyeTpGdixDaXJjbGVCdWZmZXJHZW9tZXRyeTpGdixDb25lR2VvbWV0cnk6QnYsQ29uZUJ1ZmZlckdlb21ldHJ5OkJ2LEN5bGluZGVyR2VvbWV0cnk6b20sQ3lsaW5kZXJCdWZmZXJHZW9tZXRyeTpvbSxEb2RlY2FoZWRyb25HZW9tZXRyeTpIdixEb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeTpIdixFZGdlc0dlb21ldHJ5OmE2LEV4dHJ1ZGVHZW9tZXRyeTpoaCxFeHRydWRlQnVmZmVyR2VvbWV0cnk6aGgsSWNvc2FoZWRyb25HZW9tZXRyeTpHdixJY29zYWhlZHJvbkJ1ZmZlckdlb21ldHJ5Okd2LExhdGhlR2VvbWV0cnk6V3YsTGF0aGVCdWZmZXJHZW9tZXRyeTpXdixPY3RhaGVkcm9uR2VvbWV0cnk6VzAsT2N0YWhlZHJvbkJ1ZmZlckdlb21ldHJ5OlcwLFBsYW5lR2VvbWV0cnk6VjAsUGxhbmVCdWZmZXJHZW9tZXRyeTpWMCxQb2x5aGVkcm9uR2VvbWV0cnk6dWgsUG9seWhlZHJvbkJ1ZmZlckdlb21ldHJ5OnVoLFJpbmdHZW9tZXRyeTpZdixSaW5nQnVmZmVyR2VvbWV0cnk6WXYsU2hhcGVHZW9tZXRyeTpZMCxTaGFwZUJ1ZmZlckdlb21ldHJ5OlkwLFNwaGVyZUdlb21ldHJ5OmowLFNwaGVyZUJ1ZmZlckdlb21ldHJ5OmowLFRldHJhaGVkcm9uR2VvbWV0cnk6anYsVGV0cmFoZWRyb25CdWZmZXJHZW9tZXRyeTpqdixUb3J1c0dlb21ldHJ5Olh2LFRvcnVzQnVmZmVyR2VvbWV0cnk6WHYsVG9ydXNLbm90R2VvbWV0cnk6JHYsVG9ydXNLbm90QnVmZmVyR2VvbWV0cnk6JHYsVHViZUdlb21ldHJ5Okt2LFR1YmVCdWZmZXJHZW9tZXRyeTpLdixXaXJlZnJhbWVHZW9tZXRyeTpwNn0pLGQ2PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRvd01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9fTtkNi5wcm90b3R5cGUuaXNTaGFkb3dNYXRlcmlhbD0hMDt2YXIgcE09Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiJ9LHRoaXMudHlwZT0iTWVzaFN0YW5kYXJkTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IG5lKDE2Nzc3MjE1KSx0aGlzLnJvdWdobmVzcz0xLHRoaXMubWV0YWxuZXNzPTAsdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgbmUoMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07cE0ucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITA7dmFyIG02PWNsYXNzIGV4dGVuZHMgcE17Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLnR5cGU9Ik1lc2hQaHlzaWNhbE1hdGVyaWFsIix0aGlzLmNsZWFyY29hdE1hcD1udWxsLHRoaXMuY2xlYXJjb2F0Um91Z2huZXNzPTAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bnVsbCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwPW51bGwsdGhpcy5pb3I9MS41LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJyZWZsZWN0aXZpdHkiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWm8oMi41Kih0aGlzLmlvci0xKS8odGhpcy5pb3IrMSksMCwxKX0sc2V0OmZ1bmN0aW9uKHIpe3RoaXMuaW9yPSgxKy40KnIpLygxLS40KnIpfX0pLHRoaXMuc2hlZW5Db2xvcj1uZXcgbmUoMCksdGhpcy5zaGVlbkNvbG9yTWFwPW51bGwsdGhpcy5zaGVlblJvdWdobmVzcz0xLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9bnVsbCx0aGlzLnRyYW5zbWlzc2lvbk1hcD1udWxsLHRoaXMudGhpY2tuZXNzPTAsdGhpcy50aGlja25lc3NNYXA9bnVsbCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9MCx0aGlzLmF0dGVudWF0aW9uQ29sb3I9bmV3IG5lKDEsMSwxKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD1udWxsLHRoaXMuc3BlY3VsYXJDb2xvcj1uZXcgbmUoMSwxLDEpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD1udWxsLHRoaXMuX3NoZWVuPTAsdGhpcy5fY2xlYXJjb2F0PTAsdGhpcy5fdHJhbnNtaXNzaW9uPTAsdGhpcy5zZXRWYWx1ZXModCl9Z2V0IHNoZWVuKCl7cmV0dXJuIHRoaXMuX3NoZWVufXNldCBzaGVlbih0KXt0aGlzLl9zaGVlbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3NoZWVuPXR9Z2V0IGNsZWFyY29hdCgpe3JldHVybiB0aGlzLl9jbGVhcmNvYXR9c2V0IGNsZWFyY29hdCh0KXt0aGlzLl9jbGVhcmNvYXQ+MCE9dD4wJiZ0aGlzLnZlcnNpb24rKyx0aGlzLl9jbGVhcmNvYXQ9dH1nZXQgdHJhbnNtaXNzaW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zbWlzc2lvbn1zZXQgdHJhbnNtaXNzaW9uKHQpe3RoaXMuX3RyYW5zbWlzc2lvbj4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX3RyYW5zbWlzc2lvbj10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZWZpbmVzPXtTVEFOREFSRDoiIixQSFlTSUNBTDoiIn0sdGhpcy5jbGVhcmNvYXQ9dC5jbGVhcmNvYXQsdGhpcy5jbGVhcmNvYXRNYXA9dC5jbGVhcmNvYXRNYXAsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9dC5jbGVhcmNvYXRSb3VnaG5lc3MsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dC5jbGVhcmNvYXRSb3VnaG5lc3NNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9dC5jbGVhcmNvYXROb3JtYWxNYXAsdGhpcy5jbGVhcmNvYXROb3JtYWxTY2FsZS5jb3B5KHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLHRoaXMuaW9yPXQuaW9yLHRoaXMuc2hlZW49dC5zaGVlbix0aGlzLnNoZWVuQ29sb3IuY29weSh0LnNoZWVuQ29sb3IpLHRoaXMuc2hlZW5Db2xvck1hcD10LnNoZWVuQ29sb3JNYXAsdGhpcy5zaGVlblJvdWdobmVzcz10LnNoZWVuUm91Z2huZXNzLHRoaXMuc2hlZW5Sb3VnaG5lc3NNYXA9dC5zaGVlblJvdWdobmVzc01hcCx0aGlzLnRyYW5zbWlzc2lvbj10LnRyYW5zbWlzc2lvbix0aGlzLnRyYW5zbWlzc2lvbk1hcD10LnRyYW5zbWlzc2lvbk1hcCx0aGlzLnRoaWNrbmVzcz10LnRoaWNrbmVzcyx0aGlzLnRoaWNrbmVzc01hcD10LnRoaWNrbmVzc01hcCx0aGlzLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlLHRoaXMuYXR0ZW51YXRpb25Db2xvci5jb3B5KHQuYXR0ZW51YXRpb25Db2xvciksdGhpcy5zcGVjdWxhckludGVuc2l0eT10LnNwZWN1bGFySW50ZW5zaXR5LHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXA9dC5zcGVjdWxhckludGVuc2l0eU1hcCx0aGlzLnNwZWN1bGFyQ29sb3IuY29weSh0LnNwZWN1bGFyQ29sb3IpLHRoaXMuc3BlY3VsYXJDb2xvck1hcD10LnNwZWN1bGFyQ29sb3JNYXAsdGhpc319O202LnByb3RvdHlwZS5pc01lc2hQaHlzaWNhbE1hdGVyaWFsPSEwO3ZhciBnNj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoUGhvbmdNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMuc3BlY3VsYXI9bmV3IG5lKDExMTg0ODEpLHRoaXMuc2hpbmluZXNzPTMwLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT1heCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBMdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9RDYsdGhpcy5yZWZsZWN0aXZpdHk9MSx0aGlzLnJlZnJhY3Rpb25SYXRpbz0uOTgsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLnNwZWN1bGFyLmNvcHkodC5zcGVjdWxhciksdGhpcy5zaGluaW5lc3M9dC5zaGluaW5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07ZzYucHJvdG90eXBlLmlzTWVzaFBob25nTWF0ZXJpYWw9ITA7dmFyIF82PWNsYXNzIGV4dGVuZHMgcWl7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1RPT046IiJ9LHRoaXMudHlwZT0iTWVzaFRvb25NYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5ncmFkaWVudE1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyBuZSgwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX07XzYucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMDt2YXIgeTY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaE5vcm1hbE1hdGVyaWFsIix0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPWF4LHRoaXMubm9ybWFsU2NhbGU9bmV3IEx0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLmZvZz0hMSx0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcsdGhpc319O3k2LnByb3RvdHlwZS5pc01lc2hOb3JtYWxNYXRlcmlhbD0hMDt2YXIgdjY9Y2xhc3MgZXh0ZW5kcyBxaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgbmUoMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IG5lKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT1ENix0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY29sb3IuY29weSh0LmNvbG9yKSx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5zcGVjdWxhck1hcD10LnNwZWN1bGFyTWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmVudk1hcD10LmVudk1hcCx0aGlzLmNvbWJpbmU9dC5jb21iaW5lLHRoaXMucmVmbGVjdGl2aXR5PXQucmVmbGVjdGl2aXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXN9fTt2Ni5wcm90b3R5cGUuaXNNZXNoTGFtYmVydE1hdGVyaWFsPSEwO3ZhciB4Nj1jbGFzcyBleHRlbmRzIHFpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtNQVRDQVA6IiJ9LHRoaXMudHlwZT0iTWVzaE1hdGNhcE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyBuZSgxNjc3NzIxNSksdGhpcy5tYXRjYXA9bnVsbCx0aGlzLm1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9YXgsdGhpcy5ub3JtYWxTY2FsZT1uZXcgTHQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fTt4Ni5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITA7dmFyIGI2PWNsYXNzIGV4dGVuZHMgR2l7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVEYXNoZWRNYXRlcmlhbCIsdGhpcy5zY2FsZT0xLHRoaXMuZGFzaFNpemU9Myx0aGlzLmdhcFNpemU9MSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2NhbGU9dC5zY2FsZSx0aGlzLmRhc2hTaXplPXQuZGFzaFNpemUsdGhpcy5nYXBTaXplPXQuZ2FwU2l6ZSx0aGlzfX07YjYucHJvdG90eXBlLmlzTGluZURhc2hlZE1hdGVyaWFsPSEwO3ZhciBvMHI9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsU2hhZG93TWF0ZXJpYWw6ZDYsU3ByaXRlTWF0ZXJpYWw6aU0sUmF3U2hhZGVyTWF0ZXJpYWw6VTAsU2hhZGVyTWF0ZXJpYWw6bGgsUG9pbnRzTWF0ZXJpYWw6bm0sTWVzaFBoeXNpY2FsTWF0ZXJpYWw6bTYsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6cE0sTWVzaFBob25nTWF0ZXJpYWw6ZzYsTWVzaFRvb25NYXRlcmlhbDpfNixNZXNoTm9ybWFsTWF0ZXJpYWw6eTYsTWVzaExhbWJlcnRNYXRlcmlhbDp2NixNZXNoRGVwdGhNYXRlcmlhbDplTSxNZXNoRGlzdGFuY2VNYXRlcmlhbDpyTSxNZXNoQmFzaWNNYXRlcmlhbDpzaCxNZXNoTWF0Y2FwTWF0ZXJpYWw6eDYsTGluZURhc2hlZE1hdGVyaWFsOmI2LExpbmVCYXNpY01hdGVyaWFsOkdpLE1hdGVyaWFsOnFpfSksam49e2FycmF5U2xpY2U6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBqbi5pc1R5cGVkQXJyYXkoZSk/bmV3IGUuY29uc3RydWN0b3IoZS5zdWJhcnJheSh0LHIhPT12b2lkIDA/cjplLmxlbmd0aCkpOmUuc2xpY2UodCxyKX0sY29udmVydEFycmF5OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4hZXx8IXImJmUuY29uc3RydWN0b3I9PT10P2U6dHlwZW9mIHQuQllURVNfUEVSX0VMRU1FTlQ9PSJudW1iZXIiP25ldyB0KGUpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpfSxpc1R5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhlKSYmIShlIGluc3RhbmNlb2YgRGF0YVZpZXcpfSxnZXRLZXlmcmFtZU9yZGVyOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoaSxvKXtyZXR1cm4gZVtpXS1lW29dfWxldCByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO2ZvcihsZXQgaT0wO2khPT1yOysraSluW2ldPWk7cmV0dXJuIG4uc29ydCh0KSxufSxzb3J0ZWRBcnJheTpmdW5jdGlvbihlLHQscil7bGV0IG49ZS5sZW5ndGgsaT1uZXcgZS5jb25zdHJ1Y3RvcihuKTtmb3IobGV0IG89MCxhPTA7YSE9PW47KytvKXtsZXQgcz1yW29dKnQ7Zm9yKGxldCBsPTA7bCE9PXQ7KytsKWlbYSsrXT1lW3MrbF19cmV0dXJuIGl9LGZsYXR0ZW5KU09OOmZ1bmN0aW9uKGUsdCxyLG4pe2xldCBpPTEsbz1lWzBdO2Zvcig7byE9PXZvaWQgMCYmb1tuXT09PXZvaWQgMDspbz1lW2krK107aWYobz09PXZvaWQgMClyZXR1cm47bGV0IGE9b1tuXTtpZihhIT09dm9pZCAwKWlmKEFycmF5LmlzQXJyYXkoYSkpZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxyLnB1c2guYXBwbHkocixhKSksbz1lW2krK107d2hpbGUobyE9PXZvaWQgMCk7ZWxzZSBpZihhLnRvQXJyYXkhPT12b2lkIDApZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxhLnRvQXJyYXkocixyLmxlbmd0aCkpLG89ZVtpKytdO3doaWxlKG8hPT12b2lkIDApO2Vsc2UgZG8gYT1vW25dLGEhPT12b2lkIDAmJih0LnB1c2goby50aW1lKSxyLnB1c2goYSkpLG89ZVtpKytdO3doaWxlKG8hPT12b2lkIDApfSxzdWJjbGlwOmZ1bmN0aW9uKGUsdCxyLG4saT0zMCl7bGV0IG89ZS5jbG9uZSgpO28ubmFtZT10O2xldCBhPVtdO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbCl7bGV0IGM9by50cmFja3NbbF0sdT1jLmdldFZhbHVlU2l6ZSgpLGg9W10sZj1bXTtmb3IobGV0IHA9MDtwPGMudGltZXMubGVuZ3RoOysrcCl7bGV0IGQ9Yy50aW1lc1twXSppO2lmKCEoZDxyfHxkPj1uKSl7aC5wdXNoKGMudGltZXNbcF0pO2ZvcihsZXQgZz0wO2c8dTsrK2cpZi5wdXNoKGMudmFsdWVzW3AqdStnXSl9fWgubGVuZ3RoIT09MCYmKGMudGltZXM9am4uY29udmVydEFycmF5KGgsYy50aW1lcy5jb25zdHJ1Y3RvciksYy52YWx1ZXM9am4uY29udmVydEFycmF5KGYsYy52YWx1ZXMuY29uc3RydWN0b3IpLGEucHVzaChjKSl9by50cmFja3M9YTtsZXQgcz0xLzA7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKXM+by50cmFja3NbbF0udGltZXNbMF0mJihzPW8udHJhY2tzW2xdLnRpbWVzWzBdKTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpby50cmFja3NbbF0uc2hpZnQoLTEqcyk7cmV0dXJuIG8ucmVzZXREdXJhdGlvbigpLG99LG1ha2VDbGlwQWRkaXRpdmU6ZnVuY3Rpb24oZSx0PTAscj1lLG49MzApe248PTAmJihuPTMwKTtsZXQgaT1yLnRyYWNrcy5sZW5ndGgsbz10L247Zm9yKGxldCBhPTA7YTxpOysrYSl7bGV0IHM9ci50cmFja3NbYV0sbD1zLlZhbHVlVHlwZU5hbWU7aWYobD09PSJib29sInx8bD09PSJzdHJpbmciKWNvbnRpbnVlO2xldCBjPWUudHJhY2tzLmZpbmQoZnVuY3Rpb24oeSl7cmV0dXJuIHkubmFtZT09PXMubmFtZSYmeS5WYWx1ZVR5cGVOYW1lPT09bH0pO2lmKGM9PT12b2lkIDApY29udGludWU7bGV0IHU9MCxoPXMuZ2V0VmFsdWVTaXplKCk7cy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHU9aC8zKTtsZXQgZj0wLHA9Yy5nZXRWYWx1ZVNpemUoKTtjLmNyZWF0ZUludGVycG9sYW50LmlzSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kR0xURkN1YmljU3BsaW5lJiYoZj1wLzMpO2xldCBkPXMudGltZXMubGVuZ3RoLTEsZztpZihvPD1zLnRpbWVzWzBdKXtsZXQgeT11LHg9aC11O2c9am4uYXJyYXlTbGljZShzLnZhbHVlcyx5LHgpfWVsc2UgaWYobz49cy50aW1lc1tkXSl7bGV0IHk9ZCpoK3UseD15K2gtdTtnPWpuLmFycmF5U2xpY2Uocy52YWx1ZXMseSx4KX1lbHNle2xldCB5PXMuY3JlYXRlSW50ZXJwb2xhbnQoKSx4PXUsYj1oLXU7eS5ldmFsdWF0ZShvKSxnPWpuLmFycmF5U2xpY2UoeS5yZXN1bHRCdWZmZXIseCxiKX1sPT09InF1YXRlcm5pb24iJiZuZXcgdmkoKS5mcm9tQXJyYXkoZykubm9ybWFsaXplKCkuY29uanVnYXRlKCkudG9BcnJheShnKTtsZXQgXz1jLnRpbWVzLmxlbmd0aDtmb3IobGV0IHk9MDt5PF87Kyt5KXtsZXQgeD15KnArZjtpZihsPT09InF1YXRlcm5pb24iKXZpLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KGMudmFsdWVzLHgsZywwLGMudmFsdWVzLHgpO2Vsc2V7bGV0IGI9cC1mKjI7Zm9yKGxldCBTPTA7UzxiOysrUyljLnZhbHVlc1t4K1NdLT1nW1NdfX19cmV0dXJuIGUuYmxlbmRNb2RlPVJodCxlfX0sZmg9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSl7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPWkhPT12b2lkIDA/aTpuZXcgci5jb25zdHJ1Y3RvcihuKSx0aGlzLnNhbXBsZVZhbHVlcz1yLHRoaXMudmFsdWVTaXplPW4sdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxuPXRoaXMuX2NhY2hlZEluZGV4LGk9cltuXSxvPXJbbi0xXTt0OntlOntsZXQgYTtyOntuOmlmKCEodDxpKSl7Zm9yKGxldCBzPW4rMjs7KXtpZihpPT09dm9pZCAwKXtpZih0PG8pYnJlYWsgbjtyZXR1cm4gbj1yLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSx0LG8pfWlmKG49PT1zKWJyZWFrO2lmKG89aSxpPXJbKytuXSx0PGkpYnJlYWsgZX1hPXIubGVuZ3RoO2JyZWFrIHJ9aWYoISh0Pj1vKSl7bGV0IHM9clsxXTt0PHMmJihuPTIsbz1zKTtmb3IobGV0IGw9bi0yOzspe2lmKG89PT12b2lkIDApcmV0dXJuIHRoaXMuX2NhY2hlZEluZGV4PTAsdGhpcy5iZWZvcmVTdGFydF8oMCx0LGkpO2lmKG49PT1sKWJyZWFrO2lmKGk9byxvPXJbLS1uLTFdLHQ+PW8pYnJlYWsgZX1hPW4sbj0wO2JyZWFrIHJ9YnJlYWsgdH1mb3IoO248YTspe2xldCBzPW4rYT4+PjE7dDxyW3NdP2E9czpuPXMrMX1pZihpPXJbbl0sbz1yW24tMV0sbz09PXZvaWQgMClyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQsaSk7aWYoaT09PXZvaWQgMClyZXR1cm4gbj1yLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1uLHRoaXMuYWZ0ZXJFbmRfKG4tMSxvLHQpfXRoaXMuX2NhY2hlZEluZGV4PW4sdGhpcy5pbnRlcnZhbENoYW5nZWRfKG4sbyxpKX1yZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZV8obixvLHQsaSl9Z2V0U2V0dGluZ3NfKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N8fHRoaXMuRGVmYXVsdFNldHRpbmdzX31jb3B5U2FtcGxlVmFsdWVfKHQpe2xldCByPXRoaXMucmVzdWx0QnVmZmVyLG49dGhpcy5zYW1wbGVWYWx1ZXMsaT10aGlzLnZhbHVlU2l6ZSxvPXQqaTtmb3IobGV0IGE9MDthIT09aTsrK2EpclthXT1uW28rYV07cmV0dXJuIHJ9aW50ZXJwb2xhdGVfKCl7dGhyb3cgbmV3IEVycm9yKCJjYWxsIHRvIGFic3RyYWN0IG1ldGhvZCIpfWludGVydmFsQ2hhbmdlZF8oKXt9fTtmaC5wcm90b3R5cGUuYmVmb3JlU3RhcnRfPWZoLnByb3RvdHlwZS5jb3B5U2FtcGxlVmFsdWVfO2ZoLnByb3RvdHlwZS5hZnRlckVuZF89ZmgucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV87dmFyIHdVPWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSksdGhpcy5fd2VpZ2h0UHJldj0tMCx0aGlzLl9vZmZzZXRQcmV2PS0wLHRoaXMuX3dlaWdodE5leHQ9LTAsdGhpcy5fb2Zmc2V0TmV4dD0tMCx0aGlzLkRlZmF1bHRTZXR0aW5nc189e2VuZGluZ1N0YXJ0OkV2LGVuZGluZ0VuZDpFdn19aW50ZXJ2YWxDaGFuZ2VkXyh0LHIsbil7bGV0IGk9dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnMsbz10LTIsYT10KzEscz1pW29dLGw9aVthXTtpZihzPT09dm9pZCAwKXN3aXRjaCh0aGlzLmdldFNldHRpbmdzXygpLmVuZGluZ1N0YXJ0KXtjYXNlIFR2Om89dCxzPTIqci1uO2JyZWFrO2Nhc2UgWlA6bz1pLmxlbmd0aC0yLHM9citpW29dLWlbbysxXTticmVhaztkZWZhdWx0Om89dCxzPW59aWYobD09PXZvaWQgMClzd2l0Y2godGhpcy5nZXRTZXR0aW5nc18oKS5lbmRpbmdFbmQpe2Nhc2UgVHY6YT10LGw9MipuLXI7YnJlYWs7Y2FzZSBaUDphPTEsbD1uK2lbMV0taVswXTticmVhaztkZWZhdWx0OmE9dC0xLGw9cn1sZXQgYz0obi1yKSouNSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oci1zKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtbiksdGhpcy5fb2Zmc2V0UHJldj1vKnUsdGhpcy5fb2Zmc2V0TmV4dD1hKnV9aW50ZXJwb2xhdGVfKHQscixuLGkpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLGE9dGhpcy5zYW1wbGVWYWx1ZXMscz10aGlzLnZhbHVlU2l6ZSxsPXQqcyxjPWwtcyx1PXRoaXMuX29mZnNldFByZXYsaD10aGlzLl9vZmZzZXROZXh0LGY9dGhpcy5fd2VpZ2h0UHJldixwPXRoaXMuX3dlaWdodE5leHQsZD0obi1yKS8oaS1yKSxnPWQqZCxfPWcqZCx5PS1mKl8rMipmKmctZipkLHg9KDErZikqXysoLTEuNS0yKmYpKmcrKC0uNStmKSpkKzEsYj0oLTEtcCkqXysoMS41K3ApKmcrLjUqZCxTPXAqXy1wKmc7Zm9yKGxldCBDPTA7QyE9PXM7KytDKW9bQ109eSphW3UrQ10reCphW2MrQ10rYiphW2wrQ10rUyphW2grQ107cmV0dXJuIG99fSx3Nj1jbGFzcyBleHRlbmRzIGZoe2NvbnN0cnVjdG9yKHQscixuLGkpe3N1cGVyKHQscixuLGkpfWludGVycG9sYXRlXyh0LHIsbixpKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixhPXRoaXMuc2FtcGxlVmFsdWVzLHM9dGhpcy52YWx1ZVNpemUsbD10KnMsYz1sLXMsdT0obi1yKS8oaS1yKSxoPTEtdTtmb3IobGV0IGY9MDtmIT09czsrK2Ypb1tmXT1hW2MrZl0qaCthW2wrZl0qdTtyZXR1cm4gb319LFNVPWNsYXNzIGV4dGVuZHMgZmh7Y29uc3RydWN0b3IodCxyLG4saSl7c3VwZXIodCxyLG4saSl9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LERsPWNsYXNze2NvbnN0cnVjdG9yKHQscixuLGkpe2lmKHQ9PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHI9PT12b2lkIDB8fHIubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9am4uY29udmVydEFycmF5KHIsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9am4uY29udmVydEFycmF5KG4sdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihpfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCByPXQuY29uc3RydWN0b3IsbjtpZihyLnRvSlNPTiE9PXRoaXMudG9KU09OKW49ci50b0pTT04odCk7ZWxzZXtuPXtuYW1lOnQubmFtZSx0aW1lczpqbi5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOmpuLmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCBpPXQuZ2V0SW50ZXJwb2xhdGlvbigpO2khPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYobi5pbnRlcnBvbGF0aW9uPWkpfXJldHVybiBuLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLG59SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBTVSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgdzYodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IHdVKHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCByO3N3aXRjaCh0KXtjYXNlICRQOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTticmVhaztjYXNlIEtQOnI9dGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI7YnJlYWs7Y2FzZSBlVTpyPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoO2JyZWFrfWlmKHI9PT12b2lkIDApe2xldCBuPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9PT12b2lkIDApaWYodCE9PXRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pdGhpcy5zZXRJbnRlcnBvbGF0aW9uKHRoaXMuRGVmYXVsdEludGVycG9sYXRpb24pO2Vsc2UgdGhyb3cgbmV3IEVycm9yKG4pO3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLktleWZyYW1lVHJhY2s6IixuKSx0aGlzfXJldHVybiB0aGlzLmNyZWF0ZUludGVycG9sYW50PXIsdGhpc31nZXRJbnRlcnBvbGF0aW9uKCl7c3dpdGNoKHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2REaXNjcmV0ZTpyZXR1cm4gJFA7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcjpyZXR1cm4gS1A7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gZVV9fWdldFZhbHVlU2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGgvdGhpcy50aW1lcy5sZW5ndGh9c2hpZnQodCl7aWYodCE9PTApe2xldCByPXRoaXMudGltZXM7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pcltuXSs9dH1yZXR1cm4gdGhpc31zY2FsZSh0KXtpZih0IT09MSl7bGV0IHI9dGhpcy50aW1lcztmb3IobGV0IG49MCxpPXIubGVuZ3RoO24hPT1pOysrbilyW25dKj10fXJldHVybiB0aGlzfXRyaW0odCxyKXtsZXQgbj10aGlzLnRpbWVzLGk9bi5sZW5ndGgsbz0wLGE9aS0xO2Zvcig7byE9PWkmJm5bb108dDspKytvO2Zvcig7YSE9PS0xJiZuW2FdPnI7KS0tYTtpZigrK2EsbyE9PTB8fGEhPT1pKXtvPj1hJiYoYT1NYXRoLm1heChhLDEpLG89YS0xKTtsZXQgcz10aGlzLmdldFZhbHVlU2l6ZSgpO3RoaXMudGltZXM9am4uYXJyYXlTbGljZShuLG8sYSksdGhpcy52YWx1ZXM9am4uYXJyYXlTbGljZSh0aGlzLnZhbHVlcyxvKnMsYSpzKX1yZXR1cm4gdGhpc312YWxpZGF0ZSgpe2xldCB0PSEwLHI9dGhpcy5nZXRWYWx1ZVNpemUoKTtyLU1hdGguZmxvb3IocikhPT0wJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogSW52YWxpZCB2YWx1ZSBzaXplIGluIHRyYWNrLiIsdGhpcyksdD0hMSk7bGV0IG49dGhpcy50aW1lcyxpPXRoaXMudmFsdWVzLG89bi5sZW5ndGg7bz09PTAmJihjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUcmFjayBpcyBlbXB0eS4iLHRoaXMpLHQ9ITEpO2xldCBhPW51bGw7Zm9yKGxldCBzPTA7cyE9PW87cysrKXtsZXQgbD1uW3NdO2lmKHR5cGVvZiBsPT0ibnVtYmVyIiYmaXNOYU4obCkpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFRpbWUgaXMgbm90IGEgdmFsaWQgbnVtYmVyLiIsdGhpcyxzLGwpLHQ9ITE7YnJlYWt9aWYoYSE9PW51bGwmJmE+bCl7Y29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogT3V0IG9mIG9yZGVyIGtleXMuIix0aGlzLHMsbCxhKSx0PSExO2JyZWFrfWE9bH1pZihpIT09dm9pZCAwJiZqbi5pc1R5cGVkQXJyYXkoaSkpZm9yKGxldCBzPTAsbD1pLmxlbmd0aDtzIT09bDsrK3Mpe2xldCBjPWlbc107aWYoaXNOYU4oYykpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IFZhbHVlIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMscyxjKSx0PSExO2JyZWFrfX1yZXR1cm4gdH1vcHRpbWl6ZSgpe2xldCB0PWpuLmFycmF5U2xpY2UodGhpcy50aW1lcykscj1qbi5hcnJheVNsaWNlKHRoaXMudmFsdWVzKSxuPXRoaXMuZ2V0VmFsdWVTaXplKCksaT10aGlzLmdldEludGVycG9sYXRpb24oKT09PWVVLG89dC5sZW5ndGgtMSxhPTE7Zm9yKGxldCBzPTE7czxvOysrcyl7bGV0IGw9ITEsYz10W3NdLHU9dFtzKzFdO2lmKGMhPT11JiYocyE9PTF8fGMhPT10WzBdKSlpZihpKWw9ITA7ZWxzZXtsZXQgaD1zKm4sZj1oLW4scD1oK247Zm9yKGxldCBkPTA7ZCE9PW47KytkKXtsZXQgZz1yW2grZF07aWYoZyE9PXJbZitkXXx8ZyE9PXJbcCtkXSl7bD0hMDticmVha319fWlmKGwpe2lmKHMhPT1hKXt0W2FdPXRbc107bGV0IGg9cypuLGY9YSpuO2ZvcihsZXQgcD0wO3AhPT1uOysrcClyW2YrcF09cltoK3BdfSsrYX19aWYobz4wKXt0W2FdPXRbb107Zm9yKGxldCBzPW8qbixsPWEqbixjPTA7YyE9PW47KytjKXJbbCtjXT1yW3MrY107KythfXJldHVybiBhIT09dC5sZW5ndGg/KHRoaXMudGltZXM9am4uYXJyYXlTbGljZSh0LDAsYSksdGhpcy52YWx1ZXM9am4uYXJyYXlTbGljZShyLDAsYSpuKSk6KHRoaXMudGltZXM9dCx0aGlzLnZhbHVlcz1yKSx0aGlzfWNsb25lKCl7bGV0IHQ9am4uYXJyYXlTbGljZSh0aGlzLnRpbWVzLDApLHI9am4uYXJyYXlTbGljZSh0aGlzLnZhbHVlcywwKSxuPXRoaXMuY29uc3RydWN0b3IsaT1uZXcgbih0aGlzLm5hbWUsdCxyKTtyZXR1cm4gaS5jcmVhdGVJbnRlcnBvbGFudD10aGlzLmNyZWF0ZUludGVycG9sYW50LGl9fTtEbC5wcm90b3R5cGUuVGltZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O0RsLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9RmxvYXQzMkFycmF5O0RsLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj1LUDt2YXIgYW09Y2xhc3MgZXh0ZW5kcyBEbHt9O2FtLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIjthbS5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5O2FtLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0kUDthbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyPXZvaWQgMDthbS5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgUzY9Y2xhc3MgZXh0ZW5kcyBEbHt9O1M2LnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJjb2xvciI7dmFyIFp2PWNsYXNzIGV4dGVuZHMgRGx7fTtadi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0ibnVtYmVyIjt2YXIgTVU9Y2xhc3MgZXh0ZW5kcyBmaHtjb25zdHJ1Y3Rvcih0LHIsbixpKXtzdXBlcih0LHIsbixpKX1pbnRlcnBvbGF0ZV8odCxyLG4saSl7bGV0IG89dGhpcy5yZXN1bHRCdWZmZXIsYT10aGlzLnNhbXBsZVZhbHVlcyxzPXRoaXMudmFsdWVTaXplLGw9KG4tcikvKGktciksYz10KnM7Zm9yKGxldCB1PWMrcztjIT09dTtjKz00KXZpLnNsZXJwRmxhdChvLDAsYSxjLXMsYSxjLGwpO3JldHVybiBvfX0sWDA9Y2xhc3MgZXh0ZW5kcyBEbHtJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXIodCl7cmV0dXJuIG5ldyBNVSh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9fTtYMC5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0icXVhdGVybmlvbiI7WDAucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPUtQO1gwLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciBzbT1jbGFzcyBleHRlbmRzIERse307c20ucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9InN0cmluZyI7c20ucHJvdG90eXBlLlZhbHVlQnVmZmVyVHlwZT1BcnJheTtzbS5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249JFA7c20ucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDA7c20ucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIEp2PWNsYXNzIGV4dGVuZHMgRGx7fTtKdi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgUXY9Y2xhc3N7Y29uc3RydWN0b3IodCxyPS0xLG4saT1YVSl7dGhpcy5uYW1lPXQsdGhpcy50cmFja3M9bix0aGlzLmR1cmF0aW9uPXIsdGhpcy5ibGVuZE1vZGU9aSx0aGlzLnV1aWQ9TmwoKSx0aGlzLmR1cmF0aW9uPDAmJnRoaXMucmVzZXREdXJhdGlvbigpfXN0YXRpYyBwYXJzZSh0KXtsZXQgcj1bXSxuPXQudHJhY2tzLGk9MS8odC5mcHN8fDEpO2ZvcihsZXQgYT0wLHM9bi5sZW5ndGg7YSE9PXM7KythKXIucHVzaChzMHIoblthXSkuc2NhbGUoaSkpO2xldCBvPW5ldyB0aGlzKHQubmFtZSx0LmR1cmF0aW9uLHIsdC5ibGVuZE1vZGUpO3JldHVybiBvLnV1aWQ9dC51dWlkLG99c3RhdGljIHRvSlNPTih0KXtsZXQgcj1bXSxuPXQudHJhY2tzLGk9e25hbWU6dC5uYW1lLGR1cmF0aW9uOnQuZHVyYXRpb24sdHJhY2tzOnIsdXVpZDp0LnV1aWQsYmxlbmRNb2RlOnQuYmxlbmRNb2RlfTtmb3IobGV0IG89MCxhPW4ubGVuZ3RoO28hPT1hOysrbylyLnB1c2goRGwudG9KU09OKG5bb10pKTtyZXR1cm4gaX1zdGF0aWMgQ3JlYXRlRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2UodCxyLG4saSl7bGV0IG89ci5sZW5ndGgsYT1bXTtmb3IobGV0IHM9MDtzPG87cysrKXtsZXQgbD1bXSxjPVtdO2wucHVzaCgocytvLTEpJW8scywocysxKSVvKSxjLnB1c2goMCwxLDApO2xldCB1PWpuLmdldEtleWZyYW1lT3JkZXIobCk7bD1qbi5zb3J0ZWRBcnJheShsLDEsdSksYz1qbi5zb3J0ZWRBcnJheShjLDEsdSksIWkmJmxbMF09PT0wJiYobC5wdXNoKG8pLGMucHVzaChjWzBdKSksYS5wdXNoKG5ldyBadigiLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1siK3Jbc10ubmFtZSsiXSIsbCxjKS5zY2FsZSgxL24pKX1yZXR1cm4gbmV3IHRoaXModCwtMSxhKX1zdGF0aWMgZmluZEJ5TmFtZSh0LHIpe2xldCBuPXQ7aWYoIUFycmF5LmlzQXJyYXkodCkpe2xldCBpPXQ7bj1pLmdlb21ldHJ5JiZpLmdlb21ldHJ5LmFuaW1hdGlvbnN8fGkuYW5pbWF0aW9uc31mb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKylpZihuW2ldLm5hbWU9PT1yKXJldHVybiBuW2ldO3JldHVybiBudWxsfXN0YXRpYyBDcmVhdGVDbGlwc0Zyb21Nb3JwaFRhcmdldFNlcXVlbmNlcyh0LHIsbil7bGV0IGk9e30sbz0vXihbXHctXSo/KShbXGRdKykkLztmb3IobGV0IHM9MCxsPXQubGVuZ3RoO3M8bDtzKyspe2xldCBjPXRbc10sdT1jLm5hbWUubWF0Y2gobyk7aWYodSYmdS5sZW5ndGg+MSl7bGV0IGg9dVsxXSxmPWlbaF07Znx8KGlbaF09Zj1bXSksZi5wdXNoKGMpfX1sZXQgYT1bXTtmb3IobGV0IHMgaW4gaSlhLnB1c2godGhpcy5DcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZShzLGlbc10scixuKSk7cmV0dXJuIGF9c3RhdGljIHBhcnNlQW5pbWF0aW9uKHQscil7aWYoIXQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkFuaW1hdGlvbkNsaXA6IE5vIGFuaW1hdGlvbiBpbiBKU09OTG9hZGVyIGRhdGEuIiksbnVsbDtsZXQgbj1mdW5jdGlvbihoLGYscCxkLGcpe2lmKHAubGVuZ3RoIT09MCl7bGV0IF89W10seT1bXTtqbi5mbGF0dGVuSlNPTihwLF8seSxkKSxfLmxlbmd0aCE9PTAmJmcucHVzaChuZXcgaChmLF8seSkpfX0saT1bXSxvPXQubmFtZXx8ImRlZmF1bHQiLGE9dC5mcHN8fDMwLHM9dC5ibGVuZE1vZGUsbD10Lmxlbmd0aHx8LTEsYz10LmhpZXJhcmNoeXx8W107Zm9yKGxldCBoPTA7aDxjLmxlbmd0aDtoKyspe2xldCBmPWNbaF0ua2V5cztpZighKCFmfHxmLmxlbmd0aD09PTApKWlmKGZbMF0ubW9ycGhUYXJnZXRzKXtsZXQgcD17fSxkO2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspaWYoZltkXS5tb3JwaFRhcmdldHMpZm9yKGxldCBnPTA7ZzxmW2RdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7ZysrKXBbZltkXS5tb3JwaFRhcmdldHNbZ11dPS0xO2ZvcihsZXQgZyBpbiBwKXtsZXQgXz1bXSx5PVtdO2ZvcihsZXQgeD0wO3ghPT1mW2RdLm1vcnBoVGFyZ2V0cy5sZW5ndGg7Kyt4KXtsZXQgYj1mW2RdO18ucHVzaChiLnRpbWUpLHkucHVzaChiLm1vcnBoVGFyZ2V0PT09Zz8xOjApfWkucHVzaChuZXcgWnYoIi5tb3JwaFRhcmdldEluZmx1ZW5jZVsiK2crIl0iLF8seSkpfWw9cC5sZW5ndGgqKGF8fDEpfWVsc2V7bGV0IHA9Ii5ib25lc1siK3JbaF0ubmFtZSsiXSI7bihKdixwKyIucG9zaXRpb24iLGYsInBvcyIsaSksbihYMCxwKyIucXVhdGVybmlvbiIsZiwicm90IixpKSxuKEp2LHArIi5zY2FsZSIsZiwic2NsIixpKX19cmV0dXJuIGkubGVuZ3RoPT09MD9udWxsOm5ldyB0aGlzKG8sbCxpLHMpfXJlc2V0RHVyYXRpb24oKXtsZXQgdD10aGlzLnRyYWNrcyxyPTA7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXRoaXMudHJhY2tzW25dO3I9TWF0aC5tYXgocixvLnRpbWVzW28udGltZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy5kdXJhdGlvbj1yLHRoaXN9dHJpbSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMDtmb3IobGV0IHI9MDtyPHRoaXMudHJhY2tzLmxlbmd0aDtyKyspdD10JiZ0aGlzLnRyYWNrc1tyXS52YWxpZGF0ZSgpO3JldHVybiB0fW9wdGltaXplKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9Y2xvbmUoKXtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPHRoaXMudHJhY2tzLmxlbmd0aDtyKyspdC5wdXNoKHRoaXMudHJhY2tzW3JdLmNsb25lKCkpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX10b0pTT04oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b0pTT04odGhpcyl9fTtmdW5jdGlvbiBhMHIoZSl7c3dpdGNoKGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzY2FsYXIiOmNhc2UiZG91YmxlIjpjYXNlImZsb2F0IjpjYXNlIm51bWJlciI6Y2FzZSJpbnRlZ2VyIjpyZXR1cm4gWnY7Y2FzZSJ2ZWN0b3IiOmNhc2UidmVjdG9yMiI6Y2FzZSJ2ZWN0b3IzIjpjYXNlInZlY3RvcjQiOnJldHVybiBKdjtjYXNlImNvbG9yIjpyZXR1cm4gUzY7Y2FzZSJxdWF0ZXJuaW9uIjpyZXR1cm4gWDA7Y2FzZSJib29sIjpjYXNlImJvb2xlYW4iOnJldHVybiBhbTtjYXNlInN0cmluZyI6cmV0dXJuIHNtfXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVW5zdXBwb3J0ZWQgdHlwZU5hbWU6ICIrZSl9ZnVuY3Rpb24gczByKGUpe2lmKGUudHlwZT09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IHRyYWNrIHR5cGUgdW5kZWZpbmVkLCBjYW4gbm90IHBhcnNlIik7bGV0IHQ9YTByKGUudHlwZSk7aWYoZS50aW1lcz09PXZvaWQgMCl7bGV0IHI9W10sbj1bXTtqbi5mbGF0dGVuSlNPTihlLmtleXMscixuLCJ2YWx1ZSIpLGUudGltZXM9cixlLnZhbHVlcz1ufXJldHVybiB0LnBhcnNlIT09dm9pZCAwP3QucGFyc2UoZSk6bmV3IHQoZS5uYW1lLGUudGltZXMsZS52YWx1ZXMsZS5pbnRlcnBvbGF0aW9uKX12YXIgdHg9e2VuYWJsZWQ6ITEsZmlsZXM6e30sYWRkOmZ1bmN0aW9uKGUsdCl7dGhpcy5lbmFibGVkIT09ITEmJih0aGlzLmZpbGVzW2VdPXQpfSxnZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5lbmFibGVkIT09ITEpcmV0dXJuIHRoaXMuZmlsZXNbZV19LHJlbW92ZTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5maWxlc1tlXX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmZpbGVzPXt9fX0sTTY9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4pe2xldCBpPXRoaXMsbz0hMSxhPTAscz0wLGwsYz1bXTt0aGlzLm9uU3RhcnQ9dm9pZCAwLHRoaXMub25Mb2FkPXQsdGhpcy5vblByb2dyZXNzPXIsdGhpcy5vbkVycm9yPW4sdGhpcy5pdGVtU3RhcnQ9ZnVuY3Rpb24odSl7cysrLG89PT0hMSYmaS5vblN0YXJ0IT09dm9pZCAwJiZpLm9uU3RhcnQodSxhLHMpLG89ITB9LHRoaXMuaXRlbUVuZD1mdW5jdGlvbih1KXthKyssaS5vblByb2dyZXNzIT09dm9pZCAwJiZpLm9uUHJvZ3Jlc3ModSxhLHMpLGE9PT1zJiYobz0hMSxpLm9uTG9hZCE9PXZvaWQgMCYmaS5vbkxvYWQoKSl9LHRoaXMuaXRlbUVycm9yPWZ1bmN0aW9uKHUpe2kub25FcnJvciE9PXZvaWQgMCYmaS5vbkVycm9yKHUpfSx0aGlzLnJlc29sdmVVUkw9ZnVuY3Rpb24odSl7cmV0dXJuIGw/bCh1KTp1fSx0aGlzLnNldFVSTE1vZGlmaWVyPWZ1bmN0aW9uKHUpe3JldHVybiBsPXUsdGhpc30sdGhpcy5hZGRIYW5kbGVyPWZ1bmN0aW9uKHUsaCl7cmV0dXJuIGMucHVzaCh1LGgpLHRoaXN9LHRoaXMucmVtb3ZlSGFuZGxlcj1mdW5jdGlvbih1KXtsZXQgaD1jLmluZGV4T2YodSk7cmV0dXJuIGghPT0tMSYmYy5zcGxpY2UoaCwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odSl7Zm9yKGxldCBoPTAsZj1jLmxlbmd0aDtoPGY7aCs9Mil7bGV0IHA9Y1toXSxkPWNbaCsxXTtpZihwLmdsb2JhbCYmKHAubGFzdEluZGV4PTApLHAudGVzdCh1KSlyZXR1cm4gZH1yZXR1cm4gbnVsbH19fSxRZmU9bmV3IE02LGVhPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubWFuYWdlcj10IT09dm9pZCAwP3Q6UWZlLHRoaXMuY3Jvc3NPcmlnaW49ImFub255bW91cyIsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5wYXRoPSIiLHRoaXMucmVzb3VyY2VQYXRoPSIiLHRoaXMucmVxdWVzdEhlYWRlcj17fX1sb2FkKCl7fWxvYWRBc3luYyh0LHIpe2xldCBuPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGksbyl7bi5sb2FkKHQsaSxyLG8pfSl9cGFyc2UoKXt9c2V0Q3Jvc3NPcmlnaW4odCl7cmV0dXJuIHRoaXMuY3Jvc3NPcmlnaW49dCx0aGlzfXNldFdpdGhDcmVkZW50aWFscyh0KXtyZXR1cm4gdGhpcy53aXRoQ3JlZGVudGlhbHM9dCx0aGlzfXNldFBhdGgodCl7cmV0dXJuIHRoaXMucGF0aD10LHRoaXN9c2V0UmVzb3VyY2VQYXRoKHQpe3JldHVybiB0aGlzLnJlc291cmNlUGF0aD10LHRoaXN9c2V0UmVxdWVzdEhlYWRlcih0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0SGVhZGVyPXQsdGhpc319LFlkPXt9LEpjPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXt0PT09dm9pZCAwJiYodD0iIiksdGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10eC5nZXQodCk7aWYobyE9PXZvaWQgMClyZXR1cm4gdGhpcy5tYW5hZ2VyLml0ZW1TdGFydCh0KSxzZXRUaW1lb3V0KCgpPT57ciYmcihvKSx0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0sMCksbztpZihZZFt0XSE9PXZvaWQgMCl7WWRbdF0ucHVzaCh7b25Mb2FkOnIsb25Qcm9ncmVzczpuLG9uRXJyb3I6aX0pO3JldHVybn1ZZFt0XT1bXSxZZFt0XS5wdXNoKHtvbkxvYWQ6cixvblByb2dyZXNzOm4sb25FcnJvcjppfSk7bGV0IGE9bmV3IFJlcXVlc3QodCx7aGVhZGVyczpuZXcgSGVhZGVycyh0aGlzLnJlcXVlc3RIZWFkZXIpLGNyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzPyJpbmNsdWRlIjoic2FtZS1vcmlnaW4ifSkscz10aGlzLm1pbWVUeXBlLGw9dGhpcy5yZXNwb25zZVR5cGU7ZmV0Y2goYSkudGhlbihjPT57aWYoYy5zdGF0dXM9PT0yMDB8fGMuc3RhdHVzPT09MCl7aWYoYy5zdGF0dXM9PT0wJiZjb25zb2xlLndhcm4oIlRIUkVFLkZpbGVMb2FkZXI6IEhUVFAgU3RhdHVzIDAgcmVjZWl2ZWQuIiksdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0idW5kZWZpbmVkInx8Yy5ib2R5LmdldFJlYWRlcj09PXZvaWQgMClyZXR1cm4gYztsZXQgdT1ZZFt0XSxoPWMuYm9keS5nZXRSZWFkZXIoKSxmPWMuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIikscD1mP3BhcnNlSW50KGYpOjAsZD1wIT09MCxnPTAsXz1uZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0KHkpe3goKTtmdW5jdGlvbiB4KCl7aC5yZWFkKCkudGhlbigoe2RvbmU6Yix2YWx1ZTpTfSk9PntpZihiKXkuY2xvc2UoKTtlbHNle2crPVMuYnl0ZUxlbmd0aDtsZXQgQz1uZXcgUHJvZ3Jlc3NFdmVudCgicHJvZ3Jlc3MiLHtsZW5ndGhDb21wdXRhYmxlOmQsbG9hZGVkOmcsdG90YWw6cH0pO2ZvcihsZXQgUD0wLGs9dS5sZW5ndGg7UDxrO1ArKyl7bGV0IE89dVtQXTtPLm9uUHJvZ3Jlc3MmJk8ub25Qcm9ncmVzcyhDKX15LmVucXVldWUoUykseCgpfX0pfX19KTtyZXR1cm4gbmV3IFJlc3BvbnNlKF8pfWVsc2UgdGhyb3cgRXJyb3IoYGZldGNoIGZvciAiJHtjLnVybH0iIHJlc3BvbmRlZCB3aXRoICR7Yy5zdGF0dXN9OiAke2Muc3RhdHVzVGV4dH1gKX0pLnRoZW4oYz0+e3N3aXRjaChsKXtjYXNlImFycmF5YnVmZmVyIjpyZXR1cm4gYy5hcnJheUJ1ZmZlcigpO2Nhc2UiYmxvYiI6cmV0dXJuIGMuYmxvYigpO2Nhc2UiZG9jdW1lbnQiOnJldHVybiBjLnRleHQoKS50aGVuKHU9Pm5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodSxzKSk7Y2FzZSJqc29uIjpyZXR1cm4gYy5qc29uKCk7ZGVmYXVsdDppZihzPT09dm9pZCAwKXJldHVybiBjLnRleHQoKTt7bGV0IGg9L2NoYXJzZXQ9Ij8oW147IlxzXSopIj8vaS5leGVjKHMpLGY9aCYmaFsxXT9oWzFdLnRvTG93ZXJDYXNlKCk6dm9pZCAwLHA9bmV3IFRleHREZWNvZGVyKGYpO3JldHVybiBjLmFycmF5QnVmZmVyKCkudGhlbihkPT5wLmRlY29kZShkKSl9fX0pLnRoZW4oYz0+e3R4LmFkZCh0LGMpO2xldCB1PVlkW3RdO2RlbGV0ZSBZZFt0XTtmb3IobGV0IGg9MCxmPXUubGVuZ3RoO2g8ZjtoKyspe2xldCBwPXVbaF07cC5vbkxvYWQmJnAub25Mb2FkKGMpfX0pLmNhdGNoKGM9PntsZXQgdT1ZZFt0XTtpZih1PT09dm9pZCAwKXRocm93IHRoaXMubWFuYWdlci5pdGVtRXJyb3IodCksYztkZWxldGUgWWRbdF07Zm9yKGxldCBoPTAsZj11Lmxlbmd0aDtoPGY7aCsrKXtsZXQgcD11W2hdO3Aub25FcnJvciYmcC5vbkVycm9yKGMpfXRoaXMubWFuYWdlci5pdGVtRXJyb3IodCl9KS5maW5hbGx5KCgpPT57dGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9KSx0aGlzLm1hbmFnZXIuaXRlbVN0YXJ0KHQpfXNldFJlc3BvbnNlVHlwZSh0KXtyZXR1cm4gdGhpcy5yZXNwb25zZVR5cGU9dCx0aGlzfXNldE1pbWVUeXBlKHQpe3JldHVybiB0aGlzLm1pbWVUeXBlPXQsdGhpc319LGFodD1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKYyh0aGlzLm1hbmFnZXIpO2Euc2V0UGF0aCh0aGlzLnBhdGgpLGEuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLGEuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxhLmxvYWQodCxmdW5jdGlvbihzKXt0cnl7cihvLnBhcnNlKEpTT04ucGFyc2UocykpKX1jYXRjaChsKXtpP2kobCk6Y29uc29sZS5lcnJvcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpfX0sbixpKX1wYXJzZSh0KXtsZXQgcj1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IGk9UXYucGFyc2UodFtuXSk7ci5wdXNoKGkpfXJldHVybiByfX0sc2h0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9W10scz1uZXcgbzYsbD1uZXcgSmModGhpcy5tYW5hZ2VyKTtsLnNldFBhdGgodGhpcy5wYXRoKSxsLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxsLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxsLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscyk7bGV0IGM9MDtmdW5jdGlvbiB1KGgpe2wubG9hZCh0W2hdLGZ1bmN0aW9uKGYpe2xldCBwPW8ucGFyc2UoZiwhMCk7YVtoXT17d2lkdGg6cC53aWR0aCxoZWlnaHQ6cC5oZWlnaHQsZm9ybWF0OnAuZm9ybWF0LG1pcG1hcHM6cC5taXBtYXBzfSxjKz0xLGM9PT02JiYocC5taXBtYXBDb3VudD09PTEmJihzLm1pbkZpbHRlcj1vaSkscy5pbWFnZT1hLHMuZm9ybWF0PXAuZm9ybWF0LHMubmVlZHNVcGRhdGU9ITAsciYmcihzKSl9LG4saSl9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IobGV0IGg9MCxmPXQubGVuZ3RoO2g8ZjsrK2gpdShoKTtlbHNlIGwubG9hZCh0LGZ1bmN0aW9uKGgpe2xldCBmPW8ucGFyc2UoaCwhMCk7aWYoZi5pc0N1YmVtYXApe2xldCBwPWYubWlwbWFwcy5sZW5ndGgvZi5taXBtYXBDb3VudDtmb3IobGV0IGQ9MDtkPHA7ZCsrKXthW2RdPXttaXBtYXBzOltdfTtmb3IobGV0IGc9MDtnPGYubWlwbWFwQ291bnQ7ZysrKWFbZF0ubWlwbWFwcy5wdXNoKGYubWlwbWFwc1tkKmYubWlwbWFwQ291bnQrZ10pLGFbZF0uZm9ybWF0PWYuZm9ybWF0LGFbZF0ud2lkdGg9Zi53aWR0aCxhW2RdLmhlaWdodD1mLmhlaWdodH1zLmltYWdlPWF9ZWxzZSBzLmltYWdlLndpZHRoPWYud2lkdGgscy5pbWFnZS5oZWlnaHQ9Zi5oZWlnaHQscy5taXBtYXBzPWYubWlwbWFwcztmLm1pcG1hcENvdW50PT09MSYmKHMubWluRmlsdGVyPW9pKSxzLmZvcm1hdD1mLmZvcm1hdCxzLm5lZWRzVXBkYXRlPSEwLHImJnIocyl9LG4saSk7cmV0dXJuIHN9fSxleD1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7dGhpcy5wYXRoIT09dm9pZCAwJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLGE9dHguZ2V0KHQpO2lmKGEhPT12b2lkIDApcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe3ImJnIoYSksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLGE7bGV0IHM9UVAoImltZyIpO2Z1bmN0aW9uIGwoKXt1KCksdHguYWRkKHQsdGhpcyksciYmcih0aGlzKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX1mdW5jdGlvbiBjKGgpe3UoKSxpJiZpKGgpLG8ubWFuYWdlci5pdGVtRXJyb3IodCksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gdSgpe3MucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSkscy5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSl9cmV0dXJuIHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbCwhMSkscy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsYywhMSksdC5zdWJzdHIoMCw1KSE9PSJkYXRhOiImJnRoaXMuY3Jvc3NPcmlnaW4hPT12b2lkIDAmJihzLmNyb3NzT3JpZ2luPXRoaXMuY3Jvc3NPcmlnaW4pLG8ubWFuYWdlci5pdGVtU3RhcnQodCkscy5zcmM9dCxzfX0sRVU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPW5ldyBIMCxhPW5ldyBleCh0aGlzLm1hbmFnZXIpO2Euc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbiksYS5zZXRQYXRoKHRoaXMucGF0aCk7bGV0IHM9MDtmdW5jdGlvbiBsKGMpe2EubG9hZCh0W2NdLGZ1bmN0aW9uKHUpe28uaW1hZ2VzW2NdPXUscysrLHM9PT02JiYoby5uZWVkc1VwZGF0ZT0hMCxyJiZyKG8pKX0sdm9pZCAwLGkpfWZvcihsZXQgYz0wO2M8dC5sZW5ndGg7KytjKWwoYyk7cmV0dXJuIG99fSxUVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxyLG4saSl7bGV0IG89dGhpcyxhPW5ldyBKZCxzPW5ldyBKYyh0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxzLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxzLnNldFBhdGgodGhpcy5wYXRoKSxzLnNldFdpdGhDcmVkZW50aWFscyhvLndpdGhDcmVkZW50aWFscykscy5sb2FkKHQsZnVuY3Rpb24obCl7bGV0IGM9by5wYXJzZShsKTshY3x8KGMuaW1hZ2UhPT12b2lkIDA/YS5pbWFnZT1jLmltYWdlOmMuZGF0YSE9PXZvaWQgMCYmKGEuaW1hZ2Uud2lkdGg9Yy53aWR0aCxhLmltYWdlLmhlaWdodD1jLmhlaWdodCxhLmltYWdlLmRhdGE9Yy5kYXRhKSxhLndyYXBTPWMud3JhcFMhPT12b2lkIDA/Yy53cmFwUzpKbyxhLndyYXBUPWMud3JhcFQhPT12b2lkIDA/Yy53cmFwVDpKbyxhLm1hZ0ZpbHRlcj1jLm1hZ0ZpbHRlciE9PXZvaWQgMD9jLm1hZ0ZpbHRlcjpvaSxhLm1pbkZpbHRlcj1jLm1pbkZpbHRlciE9PXZvaWQgMD9jLm1pbkZpbHRlcjpvaSxhLmFuaXNvdHJvcHk9Yy5hbmlzb3Ryb3B5IT09dm9pZCAwP2MuYW5pc290cm9weToxLGMuZW5jb2RpbmchPT12b2lkIDAmJihhLmVuY29kaW5nPWMuZW5jb2RpbmcpLGMuZmxpcFkhPT12b2lkIDAmJihhLmZsaXBZPWMuZmxpcFkpLGMuZm9ybWF0IT09dm9pZCAwJiYoYS5mb3JtYXQ9Yy5mb3JtYXQpLGMudHlwZSE9PXZvaWQgMCYmKGEudHlwZT1jLnR5cGUpLGMubWlwbWFwcyE9PXZvaWQgMCYmKGEubWlwbWFwcz1jLm1pcG1hcHMsYS5taW5GaWx0ZXI9b3gpLGMubWlwbWFwQ291bnQ9PT0xJiYoYS5taW5GaWx0ZXI9b2kpLGMuZ2VuZXJhdGVNaXBtYXBzIT09dm9pZCAwJiYoYS5nZW5lcmF0ZU1pcG1hcHM9Yy5nZW5lcmF0ZU1pcG1hcHMpLGEubmVlZHNVcGRhdGU9ITAsciYmcihhLGMpKX0sbixpKSxhfX0sQ1U9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPW5ldyB4aSxhPW5ldyBleCh0aGlzLm1hbmFnZXIpO3JldHVybiBhLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLGEuc2V0UGF0aCh0aGlzLnBhdGgpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe28uaW1hZ2U9cyxvLm5lZWRzVXBkYXRlPSEwLHIhPT12b2lkIDAmJnIobyl9LG4saSksb319LE9sPWNsYXNzIGV4dGVuZHMgb3J7Y29uc3RydWN0b3IodCxyPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgbmUodCksdGhpcy5pbnRlbnNpdHk9cn1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCByPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gci5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxyLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdGhpcy5ncm91bmRDb2xvciE9PXZvaWQgMCYmKHIub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHRoaXMuZGlzdGFuY2UhPT12b2lkIDAmJihyLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx0aGlzLmFuZ2xlIT09dm9pZCAwJiYoci5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdGhpcy5kZWNheSE9PXZvaWQgMCYmKHIub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHRoaXMucGVudW1icmEhPT12b2lkIDAmJihyLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx0aGlzLnNoYWRvdyE9PXZvaWQgMCYmKHIub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSkscn19O09sLnByb3RvdHlwZS5pc0xpZ2h0PSEwO3ZhciBFNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcih0LG4pLHRoaXMudHlwZT0iSGVtaXNwaGVyZUxpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkob3IuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMuZ3JvdW5kQ29sb3I9bmV3IG5lKHIpfWNvcHkodCl7cmV0dXJuIE9sLnByb3RvdHlwZS5jb3B5LmNhbGwodGhpcyx0KSx0aGlzLmdyb3VuZENvbG9yLmNvcHkodC5ncm91bmRDb2xvciksdGhpc319O0U2LnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodD0hMDt2YXIgbWhlPW5ldyBNZSxnaGU9bmV3IGosX2hlPW5ldyBqLFQ2PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuY2FtZXJhPXQsdGhpcy5iaWFzPTAsdGhpcy5ub3JtYWxCaWFzPTAsdGhpcy5yYWRpdXM9MSx0aGlzLmJsdXJTYW1wbGVzPTgsdGhpcy5tYXBTaXplPW5ldyBMdCg1MTIsNTEyKSx0aGlzLm1hcD1udWxsLHRoaXMubWFwUGFzcz1udWxsLHRoaXMubWF0cml4PW5ldyBNZSx0aGlzLmF1dG9VcGRhdGU9ITAsdGhpcy5uZWVkc1VwZGF0ZT0hMSx0aGlzLl9mcnVzdHVtPW5ldyBOdix0aGlzLl9mcmFtZUV4dGVudHM9bmV3IEx0KDEsMSksdGhpcy5fdmlld3BvcnRDb3VudD0xLHRoaXMuX3ZpZXdwb3J0cz1bbmV3IGVuKDAsMCwxLDEpXX1nZXRWaWV3cG9ydENvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0Q291bnR9Z2V0RnJ1c3R1bSgpe3JldHVybiB0aGlzLl9mcnVzdHVtfXVwZGF0ZU1hdHJpY2VzKHQpe2xldCByPXRoaXMuY2FtZXJhLG49dGhpcy5tYXRyaXg7Z2hlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0Lm1hdHJpeFdvcmxkKSxyLnBvc2l0aW9uLmNvcHkoZ2hlKSxfaGUuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxyLmxvb2tBdChfaGUpLHIudXBkYXRlTWF0cml4V29ybGQoKSxtaGUubXVsdGlwbHlNYXRyaWNlcyhyLnByb2plY3Rpb25NYXRyaXgsci5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMuX2ZydXN0dW0uc2V0RnJvbVByb2plY3Rpb25NYXRyaXgobWhlKSxuLnNldCguNSwwLDAsLjUsMCwuNSwwLC41LDAsMCwuNSwuNSwwLDAsMCwxKSxuLm11bHRpcGx5KHIucHJvamVjdGlvbk1hdHJpeCksbi5tdWx0aXBseShyLm1hdHJpeFdvcmxkSW52ZXJzZSl9Z2V0Vmlld3BvcnQodCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0c1t0XX1nZXRGcmFtZUV4dGVudHMoKXtyZXR1cm4gdGhpcy5fZnJhbWVFeHRlbnRzfWRpc3Bvc2UoKXt0aGlzLm1hcCYmdGhpcy5tYXAuZGlzcG9zZSgpLHRoaXMubWFwUGFzcyYmdGhpcy5tYXBQYXNzLmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiB0aGlzLmNhbWVyYT10LmNhbWVyYS5jbG9uZSgpLHRoaXMuYmlhcz10LmJpYXMsdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy5tYXBTaXplLmNvcHkodC5tYXBTaXplKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gdGhpcy5iaWFzIT09MCYmKHQuYmlhcz10aGlzLmJpYXMpLHRoaXMubm9ybWFsQmlhcyE9PTAmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSx0aGlzLnJhZGl1cyE9PTEmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKHRoaXMubWFwU2l6ZS54IT09NTEyfHx0aGlzLm1hcFNpemUueSE9PTUxMikmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sQVU9Y2xhc3MgZXh0ZW5kcyBUNntjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBVaSg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgcj10aGlzLmNhbWVyYSxuPUpQKjIqdC5hbmdsZSp0aGlzLmZvY3VzLGk9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQsbz10LmRpc3RhbmNlfHxyLmZhcjsobiE9PXIuZm92fHxpIT09ci5hc3BlY3R8fG8hPT1yLmZhcikmJihyLmZvdj1uLHIuYXNwZWN0PWksci5mYXI9byxyLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O0FVLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMDt2YXIgQzY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9TWF0aC5QSS8zLG89MCxhPTEpe3N1cGVyKHQsciksdGhpcy50eXBlPSJTcG90TGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IG9yLHRoaXMuZGlzdGFuY2U9bix0aGlzLmFuZ2xlPWksdGhpcy5wZW51bWJyYT1vLHRoaXMuZGVjYXk9YSx0aGlzLnNoYWRvdz1uZXcgQVV9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvTWF0aC5QSX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuYW5nbGU9dC5hbmdsZSx0aGlzLnBlbnVtYnJhPXQucGVudW1icmEsdGhpcy5kZWNheT10LmRlY2F5LHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07QzYucHJvdG90eXBlLmlzU3BvdExpZ2h0PSEwO3ZhciB5aGU9bmV3IE1lLEZQPW5ldyBqLGJ1dD1uZXcgaixQVT1jbGFzcyBleHRlbmRzIFQ2e2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpKDkwLDEsLjUsNTAwKSksdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBMdCg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBlbigyLDEsMSwxKSxuZXcgZW4oMCwxLDEsMSksbmV3IGVuKDMsMSwxLDEpLG5ldyBlbigxLDEsMSwxKSxuZXcgZW4oMywwLDEsMSksbmV3IGVuKDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3IGooMSwwLDApLG5ldyBqKC0xLDAsMCksbmV3IGooMCwwLDEpLG5ldyBqKDAsMCwtMSksbmV3IGooMCwxLDApLG5ldyBqKDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyBqKDAsMSwwKSxuZXcgaigwLDEsMCksbmV3IGooMCwxLDApLG5ldyBqKDAsMSwwKSxuZXcgaigwLDAsMSksbmV3IGooMCwwLC0xKV19dXBkYXRlTWF0cmljZXModCxyPTApe2xldCBuPXRoaXMuY2FtZXJhLGk9dGhpcy5tYXRyaXgsbz10LmRpc3RhbmNlfHxuLmZhcjtvIT09bi5mYXImJihuLmZhcj1vLG4udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxGUC5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksbi5wb3NpdGlvbi5jb3B5KEZQKSxidXQuY29weShuLnBvc2l0aW9uKSxidXQuYWRkKHRoaXMuX2N1YmVEaXJlY3Rpb25zW3JdKSxuLnVwLmNvcHkodGhpcy5fY3ViZVVwc1tyXSksbi5sb29rQXQoYnV0KSxuLnVwZGF0ZU1hdHJpeFdvcmxkKCksaS5tYWtlVHJhbnNsYXRpb24oLUZQLngsLUZQLnksLUZQLnopLHloZS5tdWx0aXBseU1hdHJpY2VzKG4ucHJvamVjdGlvbk1hdHJpeCxuLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh5aGUpfX07UFUucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdz0hMDt2YXIgQTY9Y2xhc3MgZXh0ZW5kcyBPbHtjb25zdHJ1Y3Rvcih0LHIsbj0wLGk9MSl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlBvaW50TGlnaHQiLHRoaXMuZGlzdGFuY2U9bix0aGlzLmRlY2F5PWksdGhpcy5zaGFkb3c9bmV3IFBVfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSo0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKDQqTWF0aC5QSSl9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGlzdGFuY2U9dC5kaXN0YW5jZSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX07QTYucHJvdG90eXBlLmlzUG9pbnRMaWdodD0hMDt2YXIgSVU9Y2xhc3MgZXh0ZW5kcyBUNntjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBEdigtNSw1LDUsLTUsLjUsNTAwKSl9fTtJVS5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0U2hhZG93PSEwO3ZhciBQNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkRpcmVjdGlvbmFsTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShvci5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy50YXJnZXQ9bmV3IG9yLHRoaXMuc2hhZG93PW5ldyBJVX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fTtQNi5wcm90b3R5cGUuaXNEaXJlY3Rpb25hbExpZ2h0PSEwO3ZhciBJNj1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQscil7c3VwZXIodCxyKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9fTtJNi5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQ9ITA7dmFyIEw2PWNsYXNzIGV4dGVuZHMgT2x7Y29uc3RydWN0b3IodCxyLG49MTAsaT0xMCl7c3VwZXIodCxyKSx0aGlzLnR5cGU9IlJlY3RBcmVhTGlnaHQiLHRoaXMud2lkdGg9bix0aGlzLmhlaWdodD1pfWdldCBwb3dlcigpe3JldHVybiB0aGlzLmludGVuc2l0eSp0aGlzLndpZHRoKnRoaXMuaGVpZ2h0Kk1hdGguUEl9c2V0IHBvd2VyKHQpe3RoaXMuaW50ZW5zaXR5PXQvKHRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpc310b0pTT04odCl7bGV0IHI9c3VwZXIudG9KU09OKHQpO3JldHVybiByLm9iamVjdC53aWR0aD10aGlzLndpZHRoLHIub2JqZWN0LmhlaWdodD10aGlzLmhlaWdodCxyfX07TDYucHJvdG90eXBlLmlzUmVjdEFyZWFMaWdodD0hMDt2YXIgazY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmNvZWZmaWNpZW50cz1bXTtmb3IobGV0IHQ9MDt0PDk7dCsrKXRoaXMuY29lZmZpY2llbnRzLnB1c2gobmV3IGopfXNldCh0KXtmb3IobGV0IHI9MDtyPDk7cisrKXRoaXMuY29lZmZpY2llbnRzW3JdLmNvcHkodFtyXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LHIpe2xldCBuPXQueCxpPXQueSxvPXQueixhPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiByLmNvcHkoYVswXSkubXVsdGlwbHlTY2FsYXIoLjI4MjA5NSksci5hZGRTY2FsZWRWZWN0b3IoYVsxXSwuNDg4NjAzKmkpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMl0sLjQ4ODYwMypvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzNdLC40ODg2MDMqbiksci5hZGRTY2FsZWRWZWN0b3IoYVs0XSwxLjA5MjU0OCoobippKSksci5hZGRTY2FsZWRWZWN0b3IoYVs1XSwxLjA5MjU0OCooaSpvKSksci5hZGRTY2FsZWRWZWN0b3IoYVs2XSwuMzE1MzkyKigzKm8qby0xKSksci5hZGRTY2FsZWRWZWN0b3IoYVs3XSwxLjA5MjU0OCoobipvKSksci5hZGRTY2FsZWRWZWN0b3IoYVs4XSwuNTQ2Mjc0KihuKm4taSppKSkscn1nZXRJcnJhZGlhbmNlQXQodCxyKXtsZXQgbj10LngsaT10Lnksbz10LnosYT10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gci5jb3B5KGFbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMV0sMiouNTExNjY0KmkpLHIuYWRkU2NhbGVkVmVjdG9yKGFbMl0sMiouNTExNjY0Km8pLHIuYWRkU2NhbGVkVmVjdG9yKGFbM10sMiouNTExNjY0Km4pLHIuYWRkU2NhbGVkVmVjdG9yKGFbNF0sMiouNDI5MDQzKm4qaSksci5hZGRTY2FsZWRWZWN0b3IoYVs1XSwyKi40MjkwNDMqaSpvKSxyLmFkZFNjYWxlZFZlY3RvcihhWzZdLC43NDMxMjUqbypvLS4yNDc3MDgpLHIuYWRkU2NhbGVkVmVjdG9yKGFbN10sMiouNDI5MDQzKm4qbyksci5hZGRTY2FsZWRWZWN0b3IoYVs4XSwuNDI5MDQzKihuKm4taSppKSkscn1hZGQodCl7Zm9yKGxldCByPTA7cjw5O3IrKyl0aGlzLmNvZWZmaWNpZW50c1tyXS5hZGQodC5jb2VmZmljaWVudHNbcl0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQscil7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbbl0scik7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCByPTA7cjw5O3IrKyl0aGlzLmNvZWZmaWNpZW50c1tyXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQscil7Zm9yKGxldCBuPTA7bjw5O24rKyl0aGlzLmNvZWZmaWNpZW50c1tuXS5sZXJwKHQuY29lZmZpY2llbnRzW25dLHIpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IHI9MDtyPDk7cisrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tyXS5lcXVhbHModC5jb2VmZmljaWVudHNbcl0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9ZnJvbUFycmF5KHQscj0wKXtsZXQgbj10aGlzLmNvZWZmaWNpZW50cztmb3IobGV0IGk9MDtpPDk7aSsrKW5baV0uZnJvbUFycmF5KHQscitpKjMpO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxyPTApe2xldCBuPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgaT0wO2k8OTtpKyspbltpXS50b0FycmF5KHQscitpKjMpO3JldHVybiB0fXN0YXRpYyBnZXRCYXNpc0F0KHQscil7bGV0IG49dC54LGk9dC55LG89dC56O3JbMF09LjI4MjA5NSxyWzFdPS40ODg2MDMqaSxyWzJdPS40ODg2MDMqbyxyWzNdPS40ODg2MDMqbixyWzRdPTEuMDkyNTQ4Km4qaSxyWzVdPTEuMDkyNTQ4KmkqbyxyWzZdPS4zMTUzOTIqKDMqbypvLTEpLHJbN109MS4wOTI1NDgqbipvLHJbOF09LjU0NjI3NCoobipuLWkqaSl9fTtrNi5wcm90b3R5cGUuaXNTcGhlcmljYWxIYXJtb25pY3MzPSEwO3ZhciByeD1jbGFzcyBleHRlbmRzIE9se2NvbnN0cnVjdG9yKHQ9bmV3IGs2LHI9MSl7c3VwZXIodm9pZCAwLHIpLHRoaXMuc2g9dH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuc2guY29weSh0LnNoKSx0aGlzfWZyb21KU09OKHQpe3JldHVybiB0aGlzLmludGVuc2l0eT10LmludGVuc2l0eSx0aGlzLnNoLmZyb21BcnJheSh0LnNoKSx0aGlzfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIub2JqZWN0LnNoPXRoaXMuc2gudG9BcnJheSgpLHJ9fTtyeC5wcm90b3R5cGUuaXNMaWdodFByb2JlPSEwO3ZhciBMVT1jbGFzcyBleHRlbmRzIGVhe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudGV4dHVyZXM9e319bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKG8ubWFuYWdlcik7YS5zZXRQYXRoKG8ucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKG8ucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoby53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPXRoaXMudGV4dHVyZXM7ZnVuY3Rpb24gbihvKXtyZXR1cm4gcltvXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLG8pLHJbb119bGV0IGk9bmV3IG8wclt0LnR5cGVdO2lmKHQudXVpZCE9PXZvaWQgMCYmKGkudXVpZD10LnV1aWQpLHQubmFtZSE9PXZvaWQgMCYmKGkubmFtZT10Lm5hbWUpLHQuY29sb3IhPT12b2lkIDAmJmkuY29sb3IhPT12b2lkIDAmJmkuY29sb3Iuc2V0SGV4KHQuY29sb3IpLHQucm91Z2huZXNzIT09dm9pZCAwJiYoaS5yb3VnaG5lc3M9dC5yb3VnaG5lc3MpLHQubWV0YWxuZXNzIT09dm9pZCAwJiYoaS5tZXRhbG5lc3M9dC5tZXRhbG5lc3MpLHQuc2hlZW4hPT12b2lkIDAmJihpLnNoZWVuPXQuc2hlZW4pLHQuc2hlZW5Db2xvciE9PXZvaWQgMCYmKGkuc2hlZW5Db2xvcj1uZXcgbmUoKS5zZXRIZXgodC5zaGVlbkNvbG9yKSksdC5zaGVlblJvdWdobmVzcyE9PXZvaWQgMCYmKGkuc2hlZW5Sb3VnaG5lc3M9dC5zaGVlblJvdWdobmVzcyksdC5lbWlzc2l2ZSE9PXZvaWQgMCYmaS5lbWlzc2l2ZSE9PXZvaWQgMCYmaS5lbWlzc2l2ZS5zZXRIZXgodC5lbWlzc2l2ZSksdC5zcGVjdWxhciE9PXZvaWQgMCYmaS5zcGVjdWxhciE9PXZvaWQgMCYmaS5zcGVjdWxhci5zZXRIZXgodC5zcGVjdWxhciksdC5zcGVjdWxhckludGVuc2l0eSE9PXZvaWQgMCYmKGkuc3BlY3VsYXJJbnRlbnNpdHk9dC5zcGVjdWxhckludGVuc2l0eSksdC5zcGVjdWxhckNvbG9yIT09dm9pZCAwJiZpLnNwZWN1bGFyQ29sb3IhPT12b2lkIDAmJmkuc3BlY3VsYXJDb2xvci5zZXRIZXgodC5zcGVjdWxhckNvbG9yKSx0LnNoaW5pbmVzcyE9PXZvaWQgMCYmKGkuc2hpbmluZXNzPXQuc2hpbmluZXNzKSx0LmNsZWFyY29hdCE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0PXQuY2xlYXJjb2F0KSx0LmNsZWFyY29hdFJvdWdobmVzcyE9PXZvaWQgMCYmKGkuY2xlYXJjb2F0Um91Z2huZXNzPXQuY2xlYXJjb2F0Um91Z2huZXNzKSx0LnRyYW5zbWlzc2lvbiE9PXZvaWQgMCYmKGkudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uKSx0LnRoaWNrbmVzcyE9PXZvaWQgMCYmKGkudGhpY2tuZXNzPXQudGhpY2tuZXNzKSx0LmF0dGVudWF0aW9uRGlzdGFuY2UhPT12b2lkIDAmJihpLmF0dGVudWF0aW9uRGlzdGFuY2U9dC5hdHRlbnVhdGlvbkRpc3RhbmNlKSx0LmF0dGVudWF0aW9uQ29sb3IhPT12b2lkIDAmJmkuYXR0ZW51YXRpb25Db2xvciE9PXZvaWQgMCYmaS5hdHRlbnVhdGlvbkNvbG9yLnNldEhleCh0LmF0dGVudWF0aW9uQ29sb3IpLHQuZm9nIT09dm9pZCAwJiYoaS5mb2c9dC5mb2cpLHQuZmxhdFNoYWRpbmchPT12b2lkIDAmJihpLmZsYXRTaGFkaW5nPXQuZmxhdFNoYWRpbmcpLHQuYmxlbmRpbmchPT12b2lkIDAmJihpLmJsZW5kaW5nPXQuYmxlbmRpbmcpLHQuY29tYmluZSE9PXZvaWQgMCYmKGkuY29tYmluZT10LmNvbWJpbmUpLHQuc2lkZSE9PXZvaWQgMCYmKGkuc2lkZT10LnNpZGUpLHQuc2hhZG93U2lkZSE9PXZvaWQgMCYmKGkuc2hhZG93U2lkZT10LnNoYWRvd1NpZGUpLHQub3BhY2l0eSE9PXZvaWQgMCYmKGkub3BhY2l0eT10Lm9wYWNpdHkpLHQudHJhbnNwYXJlbnQhPT12b2lkIDAmJihpLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQpLHQuYWxwaGFUZXN0IT09dm9pZCAwJiYoaS5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QpLHQuZGVwdGhUZXN0IT09dm9pZCAwJiYoaS5kZXB0aFRlc3Q9dC5kZXB0aFRlc3QpLHQuZGVwdGhXcml0ZSE9PXZvaWQgMCYmKGkuZGVwdGhXcml0ZT10LmRlcHRoV3JpdGUpLHQuY29sb3JXcml0ZSE9PXZvaWQgMCYmKGkuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUpLHQuYWxwaGFXcml0ZSE9PXZvaWQgMCYmKGkuYWxwaGFXcml0ZT10LmFscGhhV3JpdGUpLHQuc3RlbmNpbFdyaXRlIT09dm9pZCAwJiYoaS5zdGVuY2lsV3JpdGU9dC5zdGVuY2lsV3JpdGUpLHQuc3RlbmNpbFdyaXRlTWFzayE9PXZvaWQgMCYmKGkuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2spLHQuc3RlbmNpbEZ1bmMhPT12b2lkIDAmJihpLnN0ZW5jaWxGdW5jPXQuc3RlbmNpbEZ1bmMpLHQuc3RlbmNpbFJlZiE9PXZvaWQgMCYmKGkuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYpLHQuc3RlbmNpbEZ1bmNNYXNrIT09dm9pZCAwJiYoaS5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2spLHQuc3RlbmNpbEZhaWwhPT12b2lkIDAmJihpLnN0ZW5jaWxGYWlsPXQuc3RlbmNpbEZhaWwpLHQuc3RlbmNpbFpGYWlsIT09dm9pZCAwJiYoaS5zdGVuY2lsWkZhaWw9dC5zdGVuY2lsWkZhaWwpLHQuc3RlbmNpbFpQYXNzIT09dm9pZCAwJiYoaS5zdGVuY2lsWlBhc3M9dC5zdGVuY2lsWlBhc3MpLHQud2lyZWZyYW1lIT09dm9pZCAwJiYoaS53aXJlZnJhbWU9dC53aXJlZnJhbWUpLHQud2lyZWZyYW1lTGluZXdpZHRoIT09dm9pZCAwJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgpLHQud2lyZWZyYW1lTGluZWNhcCE9PXZvaWQgMCYmKGkud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXApLHQud2lyZWZyYW1lTGluZWpvaW4hPT12b2lkIDAmJihpLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4pLHQucm90YXRpb24hPT12b2lkIDAmJihpLnJvdGF0aW9uPXQucm90YXRpb24pLHQubGluZXdpZHRoIT09MSYmKGkubGluZXdpZHRoPXQubGluZXdpZHRoKSx0LmRhc2hTaXplIT09dm9pZCAwJiYoaS5kYXNoU2l6ZT10LmRhc2hTaXplKSx0LmdhcFNpemUhPT12b2lkIDAmJihpLmdhcFNpemU9dC5nYXBTaXplKSx0LnNjYWxlIT09dm9pZCAwJiYoaS5zY2FsZT10LnNjYWxlKSx0LnBvbHlnb25PZmZzZXQhPT12b2lkIDAmJihpLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0KSx0LnBvbHlnb25PZmZzZXRGYWN0b3IhPT12b2lkIDAmJihpLnBvbHlnb25PZmZzZXRGYWN0b3I9dC5wb2x5Z29uT2Zmc2V0RmFjdG9yKSx0LnBvbHlnb25PZmZzZXRVbml0cyE9PXZvaWQgMCYmKGkucG9seWdvbk9mZnNldFVuaXRzPXQucG9seWdvbk9mZnNldFVuaXRzKSx0LmRpdGhlcmluZyE9PXZvaWQgMCYmKGkuZGl0aGVyaW5nPXQuZGl0aGVyaW5nKSx0LmFscGhhVG9Db3ZlcmFnZSE9PXZvaWQgMCYmKGkuYWxwaGFUb0NvdmVyYWdlPXQuYWxwaGFUb0NvdmVyYWdlKSx0LnByZW11bHRpcGxpZWRBbHBoYSE9PXZvaWQgMCYmKGkucHJlbXVsdGlwbGllZEFscGhhPXQucHJlbXVsdGlwbGllZEFscGhhKSx0LnZpc2libGUhPT12b2lkIDAmJihpLnZpc2libGU9dC52aXNpYmxlKSx0LnRvbmVNYXBwZWQhPT12b2lkIDAmJihpLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkKSx0LnVzZXJEYXRhIT09dm9pZCAwJiYoaS51c2VyRGF0YT10LnVzZXJEYXRhKSx0LnZlcnRleENvbG9ycyE9PXZvaWQgMCYmKHR5cGVvZiB0LnZlcnRleENvbG9ycz09Im51bWJlciI/aS52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnM+MDppLnZlcnRleENvbG9ycz10LnZlcnRleENvbG9ycyksdC51bmlmb3JtcyE9PXZvaWQgMClmb3IobGV0IG8gaW4gdC51bmlmb3Jtcyl7bGV0IGE9dC51bmlmb3Jtc1tvXTtzd2l0Y2goaS51bmlmb3Jtc1tvXT17fSxhLnR5cGUpe2Nhc2UidCI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uKGEudmFsdWUpO2JyZWFrO2Nhc2UiYyI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgbmUoKS5zZXRIZXgoYS52YWx1ZSk7YnJlYWs7Y2FzZSJ2MiI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgTHQoKS5mcm9tQXJyYXkoYS52YWx1ZSk7YnJlYWs7Y2FzZSJ2MyI6aS51bmlmb3Jtc1tvXS52YWx1ZT1uZXcgaigpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlInY0IjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBlbigpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlIm0zIjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBraSgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztjYXNlIm00IjppLnVuaWZvcm1zW29dLnZhbHVlPW5ldyBNZSgpLmZyb21BcnJheShhLnZhbHVlKTticmVhaztkZWZhdWx0OmkudW5pZm9ybXNbb10udmFsdWU9YS52YWx1ZX19aWYodC5kZWZpbmVzIT09dm9pZCAwJiYoaS5kZWZpbmVzPXQuZGVmaW5lcyksdC52ZXJ0ZXhTaGFkZXIhPT12b2lkIDAmJihpLnZlcnRleFNoYWRlcj10LnZlcnRleFNoYWRlciksdC5mcmFnbWVudFNoYWRlciE9PXZvaWQgMCYmKGkuZnJhZ21lbnRTaGFkZXI9dC5mcmFnbWVudFNoYWRlciksdC5leHRlbnNpb25zIT09dm9pZCAwKWZvcihsZXQgbyBpbiB0LmV4dGVuc2lvbnMpaS5leHRlbnNpb25zW29dPXQuZXh0ZW5zaW9uc1tvXTtpZih0LnNoYWRpbmchPT12b2lkIDAmJihpLmZsYXRTaGFkaW5nPXQuc2hhZGluZz09PTEpLHQuc2l6ZSE9PXZvaWQgMCYmKGkuc2l6ZT10LnNpemUpLHQuc2l6ZUF0dGVudWF0aW9uIT09dm9pZCAwJiYoaS5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24pLHQubWFwIT09dm9pZCAwJiYoaS5tYXA9bih0Lm1hcCkpLHQubWF0Y2FwIT09dm9pZCAwJiYoaS5tYXRjYXA9bih0Lm1hdGNhcCkpLHQuYWxwaGFNYXAhPT12b2lkIDAmJihpLmFscGhhTWFwPW4odC5hbHBoYU1hcCkpLHQuYnVtcE1hcCE9PXZvaWQgMCYmKGkuYnVtcE1hcD1uKHQuYnVtcE1hcCkpLHQuYnVtcFNjYWxlIT09dm9pZCAwJiYoaS5idW1wU2NhbGU9dC5idW1wU2NhbGUpLHQubm9ybWFsTWFwIT09dm9pZCAwJiYoaS5ub3JtYWxNYXA9bih0Lm5vcm1hbE1hcCkpLHQubm9ybWFsTWFwVHlwZSE9PXZvaWQgMCYmKGkubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUpLHQubm9ybWFsU2NhbGUhPT12b2lkIDApe2xldCBvPXQubm9ybWFsU2NhbGU7QXJyYXkuaXNBcnJheShvKT09PSExJiYobz1bbyxvXSksaS5ub3JtYWxTY2FsZT1uZXcgTHQoKS5mcm9tQXJyYXkobyl9cmV0dXJuIHQuZGlzcGxhY2VtZW50TWFwIT09dm9pZCAwJiYoaS5kaXNwbGFjZW1lbnRNYXA9bih0LmRpc3BsYWNlbWVudE1hcCkpLHQuZGlzcGxhY2VtZW50U2NhbGUhPT12b2lkIDAmJihpLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUpLHQuZGlzcGxhY2VtZW50QmlhcyE9PXZvaWQgMCYmKGkuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMpLHQucm91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5yb3VnaG5lc3NNYXA9bih0LnJvdWdobmVzc01hcCkpLHQubWV0YWxuZXNzTWFwIT09dm9pZCAwJiYoaS5tZXRhbG5lc3NNYXA9bih0Lm1ldGFsbmVzc01hcCkpLHQuZW1pc3NpdmVNYXAhPT12b2lkIDAmJihpLmVtaXNzaXZlTWFwPW4odC5lbWlzc2l2ZU1hcCkpLHQuZW1pc3NpdmVJbnRlbnNpdHkhPT12b2lkIDAmJihpLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHkpLHQuc3BlY3VsYXJNYXAhPT12b2lkIDAmJihpLnNwZWN1bGFyTWFwPW4odC5zcGVjdWxhck1hcCkpLHQuc3BlY3VsYXJJbnRlbnNpdHlNYXAhPT12b2lkIDAmJihpLnNwZWN1bGFySW50ZW5zaXR5TWFwPW4odC5zcGVjdWxhckludGVuc2l0eU1hcCkpLHQuc3BlY3VsYXJDb2xvck1hcCE9PXZvaWQgMCYmKGkuc3BlY3VsYXJDb2xvck1hcD1uKHQuc3BlY3VsYXJDb2xvck1hcCkpLHQuZW52TWFwIT09dm9pZCAwJiYoaS5lbnZNYXA9bih0LmVudk1hcCkpLHQuZW52TWFwSW50ZW5zaXR5IT09dm9pZCAwJiYoaS5lbnZNYXBJbnRlbnNpdHk9dC5lbnZNYXBJbnRlbnNpdHkpLHQucmVmbGVjdGl2aXR5IT09dm9pZCAwJiYoaS5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHkpLHQucmVmcmFjdGlvblJhdGlvIT09dm9pZCAwJiYoaS5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8pLHQubGlnaHRNYXAhPT12b2lkIDAmJihpLmxpZ2h0TWFwPW4odC5saWdodE1hcCkpLHQubGlnaHRNYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHkpLHQuYW9NYXAhPT12b2lkIDAmJihpLmFvTWFwPW4odC5hb01hcCkpLHQuYW9NYXBJbnRlbnNpdHkhPT12b2lkIDAmJihpLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHkpLHQuZ3JhZGllbnRNYXAhPT12b2lkIDAmJihpLmdyYWRpZW50TWFwPW4odC5ncmFkaWVudE1hcCkpLHQuY2xlYXJjb2F0TWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRNYXA9bih0LmNsZWFyY29hdE1hcCkpLHQuY2xlYXJjb2F0Um91Z2huZXNzTWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9bih0LmNsZWFyY29hdFJvdWdobmVzc01hcCkpLHQuY2xlYXJjb2F0Tm9ybWFsTWFwIT09dm9pZCAwJiYoaS5jbGVhcmNvYXROb3JtYWxNYXA9bih0LmNsZWFyY29hdE5vcm1hbE1hcCkpLHQuY2xlYXJjb2F0Tm9ybWFsU2NhbGUhPT12b2lkIDAmJihpLmNsZWFyY29hdE5vcm1hbFNjYWxlPW5ldyBMdCgpLmZyb21BcnJheSh0LmNsZWFyY29hdE5vcm1hbFNjYWxlKSksdC50cmFuc21pc3Npb25NYXAhPT12b2lkIDAmJihpLnRyYW5zbWlzc2lvbk1hcD1uKHQudHJhbnNtaXNzaW9uTWFwKSksdC50aGlja25lc3NNYXAhPT12b2lkIDAmJihpLnRoaWNrbmVzc01hcD1uKHQudGhpY2tuZXNzTWFwKSksdC5zaGVlbkNvbG9yTWFwIT09dm9pZCAwJiYoaS5zaGVlbkNvbG9yTWFwPW4odC5zaGVlbkNvbG9yTWFwKSksdC5zaGVlblJvdWdobmVzc01hcCE9PXZvaWQgMCYmKGkuc2hlZW5Sb3VnaG5lc3NNYXA9bih0LnNoZWVuUm91Z2huZXNzTWFwKSksaX1zZXRUZXh0dXJlcyh0KXtyZXR1cm4gdGhpcy50ZXh0dXJlcz10LHRoaXN9fSxkTT1jbGFzc3tzdGF0aWMgZGVjb2RlVGV4dCh0KXtpZih0eXBlb2YgVGV4dERlY29kZXIhPSJ1bmRlZmluZWQiKXJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodCk7bGV0IHI9IiI7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtuXSk7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHIpKX1jYXRjaChuKXtyZXR1cm4gcn19c3RhdGljIGV4dHJhY3RVcmxCYXNlKHQpe2xldCByPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gcj09PS0xPyIuLyI6dC5zdWJzdHIoMCxyKzEpfXN0YXRpYyByZXNvbHZlVVJMKHQscil7cmV0dXJuIHR5cGVvZiB0IT0ic3RyaW5nInx8dD09PSIiPyIiOigvXmh0dHBzPzpcL1wvL2kudGVzdChyKSYmL15cLy8udGVzdCh0KSYmKHI9ci5yZXBsYWNlKC8oXmh0dHBzPzpcL1wvW15cL10rKS4qL2ksIiQxIikpLC9eKGh0dHBzPzopP1wvXC8vaS50ZXN0KHQpfHwvXmRhdGE6LiosLiokL2kudGVzdCh0KXx8L15ibG9iOi4qJC9pLnRlc3QodCk/dDpyK3QpfX0sUjY9Y2xhc3MgZXh0ZW5kcyBQZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbnN0YW5jZUNvdW50PTEvMH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VDb3VudD10Lmluc3RhbmNlQ291bnQsdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKHRoaXMpO3JldHVybiB0Lmluc3RhbmNlQ291bnQ9dGhpcy5pbnN0YW5jZUNvdW50LHQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeT0hMCx0fX07UjYucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITA7dmFyIGtVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9bmV3IEpjKG8ubWFuYWdlcik7YS5zZXRQYXRoKG8ucGF0aCksYS5zZXRSZXF1ZXN0SGVhZGVyKG8ucmVxdWVzdEhlYWRlciksYS5zZXRXaXRoQ3JlZGVudGlhbHMoby53aXRoQ3JlZGVudGlhbHMpLGEubG9hZCh0LGZ1bmN0aW9uKHMpe3RyeXtyKG8ucGFyc2UoSlNPTi5wYXJzZShzKSkpfWNhdGNoKGwpe2k/aShsKTpjb25zb2xlLmVycm9yKGwpLG8ubWFuYWdlci5pdGVtRXJyb3IodCl9fSxuLGkpfXBhcnNlKHQpe2xldCByPXt9LG49e307ZnVuY3Rpb24gaShwLGQpe2lmKHJbZF0hPT12b2lkIDApcmV0dXJuIHJbZF07bGV0IF89cC5pbnRlcmxlYXZlZEJ1ZmZlcnNbZF0seT1vKHAsXy5idWZmZXIpLHg9QjMoXy50eXBlLHkpLGI9bmV3IGVtKHgsXy5zdHJpZGUpO3JldHVybiBiLnV1aWQ9Xy51dWlkLHJbZF09YixifWZ1bmN0aW9uIG8ocCxkKXtpZihuW2RdIT09dm9pZCAwKXJldHVybiBuW2RdO2xldCBfPXAuYXJyYXlCdWZmZXJzW2RdLHk9bmV3IFVpbnQzMkFycmF5KF8pLmJ1ZmZlcjtyZXR1cm4gbltkXT15LHl9bGV0IGE9dC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5P25ldyBSNjpuZXcgUGUscz10LmRhdGEuaW5kZXg7aWYocyE9PXZvaWQgMCl7bGV0IHA9QjMocy50eXBlLHMuYXJyYXkpO2Euc2V0SW5kZXgobmV3IEplKHAsMSkpfWxldCBsPXQuZGF0YS5hdHRyaWJ1dGVzO2ZvcihsZXQgcCBpbiBsKXtsZXQgZD1sW3BdLGc7aWYoZC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKXtsZXQgXz1pKHQuZGF0YSxkLmRhdGEpO2c9bmV3IHRwKF8sZC5pdGVtU2l6ZSxkLm9mZnNldCxkLm5vcm1hbGl6ZWQpfWVsc2V7bGV0IF89QjMoZC50eXBlLGQuYXJyYXkpLHk9ZC5pc0luc3RhbmNlZEJ1ZmZlckF0dHJpYnV0ZT9ybTpKZTtnPW5ldyB5KF8sZC5pdGVtU2l6ZSxkLm5vcm1hbGl6ZWQpfWQubmFtZSE9PXZvaWQgMCYmKGcubmFtZT1kLm5hbWUpLGQudXNhZ2UhPT12b2lkIDAmJmcuc2V0VXNhZ2UoZC51c2FnZSksZC51cGRhdGVSYW5nZSE9PXZvaWQgMCYmKGcudXBkYXRlUmFuZ2Uub2Zmc2V0PWQudXBkYXRlUmFuZ2Uub2Zmc2V0LGcudXBkYXRlUmFuZ2UuY291bnQ9ZC51cGRhdGVSYW5nZS5jb3VudCksYS5zZXRBdHRyaWJ1dGUocCxnKX1sZXQgYz10LmRhdGEubW9ycGhBdHRyaWJ1dGVzO2lmKGMpZm9yKGxldCBwIGluIGMpe2xldCBkPWNbcF0sZz1bXTtmb3IobGV0IF89MCx5PWQubGVuZ3RoO188eTtfKyspe2xldCB4PWRbX10sYjtpZih4LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBTPWkodC5kYXRhLHguZGF0YSk7Yj1uZXcgdHAoUyx4Lml0ZW1TaXplLHgub2Zmc2V0LHgubm9ybWFsaXplZCl9ZWxzZXtsZXQgUz1CMyh4LnR5cGUseC5hcnJheSk7Yj1uZXcgSmUoUyx4Lml0ZW1TaXplLHgubm9ybWFsaXplZCl9eC5uYW1lIT09dm9pZCAwJiYoYi5uYW1lPXgubmFtZSksZy5wdXNoKGIpfWEubW9ycGhBdHRyaWJ1dGVzW3BdPWd9dC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlJiYoYS5tb3JwaFRhcmdldHNSZWxhdGl2ZT0hMCk7bGV0IGg9dC5kYXRhLmdyb3Vwc3x8dC5kYXRhLmRyYXdjYWxsc3x8dC5kYXRhLm9mZnNldHM7aWYoaCE9PXZvaWQgMClmb3IobGV0IHA9MCxkPWgubGVuZ3RoO3AhPT1kOysrcCl7bGV0IGc9aFtwXTthLmFkZEdyb3VwKGcuc3RhcnQsZy5jb3VudCxnLm1hdGVyaWFsSW5kZXgpfWxldCBmPXQuZGF0YS5ib3VuZGluZ1NwaGVyZTtpZihmIT09dm9pZCAwKXtsZXQgcD1uZXcgajtmLmNlbnRlciE9PXZvaWQgMCYmcC5mcm9tQXJyYXkoZi5jZW50ZXIpLGEuYm91bmRpbmdTcGhlcmU9bmV3IFpmKHAsZi5yYWRpdXMpfXJldHVybiB0Lm5hbWUmJihhLm5hbWU9dC5uYW1lKSx0LnVzZXJEYXRhJiYoYS51c2VyRGF0YT10LnVzZXJEYXRhKSxhfX0sbGh0PWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LHIsbixpKXtsZXQgbz10aGlzLGE9dGhpcy5wYXRoPT09IiI/ZE0uZXh0cmFjdFVybEJhc2UodCk6dGhpcy5wYXRoO3RoaXMucmVzb3VyY2VQYXRoPXRoaXMucmVzb3VyY2VQYXRofHxhO2xldCBzPW5ldyBKYyh0aGlzLm1hbmFnZXIpO3Muc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihsKXtsZXQgYz1udWxsO3RyeXtjPUpTT04ucGFyc2UobCl9Y2F0Y2goaCl7aSE9PXZvaWQgMCYmaShoKSxjb25zb2xlLmVycm9yKCJUSFJFRTpPYmplY3RMb2FkZXI6IENhbid0IHBhcnNlICIrdCsiLiIsaC5tZXNzYWdlKTtyZXR1cm59bGV0IHU9Yy5tZXRhZGF0YTtpZih1PT09dm9pZCAwfHx1LnR5cGU9PT12b2lkIDB8fHUudHlwZS50b0xvd2VyQ2FzZSgpPT09Imdlb21ldHJ5Iil7Y29uc29sZS5lcnJvcigiVEhSRUUuT2JqZWN0TG9hZGVyOiBDYW4ndCBsb2FkICIrdCk7cmV0dXJufW8ucGFyc2UoYyxyKX0sbixpKX1sb2FkQXN5bmModCxyKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2xldCBuPXRoaXMsaT10aGlzLnBhdGg9PT0iIj9kTS5leHRyYWN0VXJsQmFzZSh0KTp0aGlzLnBhdGg7dGhpcy5yZXNvdXJjZVBhdGg9dGhpcy5yZXNvdXJjZVBhdGh8fGk7bGV0IG89bmV3IEpjKHRoaXMubWFuYWdlcik7by5zZXRQYXRoKHRoaXMucGF0aCksby5zZXRSZXF1ZXN0SGVhZGVyKHRoaXMucmVxdWVzdEhlYWRlciksby5zZXRXaXRoQ3JlZGVudGlhbHModGhpcy53aXRoQ3JlZGVudGlhbHMpO2xldCBhPXlpZWxkIG8ubG9hZEFzeW5jKHQscikscz1KU09OLnBhcnNlKGEpLGw9cy5tZXRhZGF0YTtpZihsPT09dm9pZCAwfHxsLnR5cGU9PT12b2lkIDB8fGwudHlwZS50b0xvd2VyQ2FzZSgpPT09Imdlb21ldHJ5Iil0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLk9iamVjdExvYWRlcjogQ2FuJ3QgbG9hZCAiK3QpO3JldHVybiB5aWVsZCBuLnBhcnNlQXN5bmMocyl9KX1wYXJzZSh0LHIpe2xldCBuPXRoaXMucGFyc2VBbmltYXRpb25zKHQuYW5pbWF0aW9ucyksaT10aGlzLnBhcnNlU2hhcGVzKHQuc2hhcGVzKSxvPXRoaXMucGFyc2VHZW9tZXRyaWVzKHQuZ2VvbWV0cmllcyxpKSxhPXRoaXMucGFyc2VJbWFnZXModC5pbWFnZXMsZnVuY3Rpb24oKXtyIT09dm9pZCAwJiZyKGMpfSkscz10aGlzLnBhcnNlVGV4dHVyZXModC50ZXh0dXJlcyxhKSxsPXRoaXMucGFyc2VNYXRlcmlhbHModC5tYXRlcmlhbHMscyksYz10aGlzLnBhcnNlT2JqZWN0KHQub2JqZWN0LG8sbCxzLG4pLHU9dGhpcy5wYXJzZVNrZWxldG9ucyh0LnNrZWxldG9ucyxjKTtpZih0aGlzLmJpbmRTa2VsZXRvbnMoYyx1KSxyIT09dm9pZCAwKXtsZXQgaD0hMTtmb3IobGV0IGYgaW4gYSlpZihhW2ZdaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50KXtoPSEwO2JyZWFrfWg9PT0hMSYmcihjKX1yZXR1cm4gY31wYXJzZUFzeW5jKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9dGhpcy5wYXJzZUFuaW1hdGlvbnModC5hbmltYXRpb25zKSxuPXRoaXMucGFyc2VTaGFwZXModC5zaGFwZXMpLGk9dGhpcy5wYXJzZUdlb21ldHJpZXModC5nZW9tZXRyaWVzLG4pLG89eWllbGQgdGhpcy5wYXJzZUltYWdlc0FzeW5jKHQuaW1hZ2VzKSxhPXRoaXMucGFyc2VUZXh0dXJlcyh0LnRleHR1cmVzLG8pLHM9dGhpcy5wYXJzZU1hdGVyaWFscyh0Lm1hdGVyaWFscyxhKSxsPXRoaXMucGFyc2VPYmplY3QodC5vYmplY3QsaSxzLGEsciksYz10aGlzLnBhcnNlU2tlbGV0b25zKHQuc2tlbGV0b25zLGwpO3JldHVybiB0aGlzLmJpbmRTa2VsZXRvbnMobCxjKSxsfSl9cGFyc2VTaGFwZXModCl7bGV0IHI9e307aWYodCE9PXZvaWQgMClmb3IobGV0IG49MCxpPXQubGVuZ3RoO248aTtuKyspe2xldCBvPW5ldyBLYygpLmZyb21KU09OKHRbbl0pO3Jbby51dWlkXT1vfXJldHVybiByfXBhcnNlU2tlbGV0b25zKHQscil7bGV0IG49e30saT17fTtpZihyLnRyYXZlcnNlKGZ1bmN0aW9uKG8pe28uaXNCb25lJiYoaVtvLnV1aWRdPW8pfSksdCE9PXZvaWQgMClmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPW5ldyBsTSgpLmZyb21KU09OKHRbb10saSk7bltzLnV1aWRdPXN9cmV0dXJuIG59cGFyc2VHZW9tZXRyaWVzKHQscil7bGV0IG49e307aWYodCE9PXZvaWQgMCl7bGV0IGk9bmV3IGtVO2ZvcihsZXQgbz0wLGE9dC5sZW5ndGg7bzxhO28rKyl7bGV0IHMsbD10W29dO3N3aXRjaChsLnR5cGUpe2Nhc2UiQnVmZmVyR2VvbWV0cnkiOmNhc2UiSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkiOnM9aS5wYXJzZShsKTticmVhaztjYXNlIkdlb21ldHJ5Ijpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3RMb2FkZXI6IFRoZSBsZWdhY3kgR2VvbWV0cnkgdHlwZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpO2JyZWFrO2RlZmF1bHQ6bC50eXBlIGluIGRoZT9zPWRoZVtsLnR5cGVdLmZyb21KU09OKGwscik6Y29uc29sZS53YXJuKGBUSFJFRS5PYmplY3RMb2FkZXI6IFVuc3VwcG9ydGVkIGdlb21ldHJ5IHR5cGUgIiR7bC50eXBlfSJgKX1zLnV1aWQ9bC51dWlkLGwubmFtZSE9PXZvaWQgMCYmKHMubmFtZT1sLm5hbWUpLHMuaXNCdWZmZXJHZW9tZXRyeT09PSEwJiZsLnVzZXJEYXRhIT09dm9pZCAwJiYocy51c2VyRGF0YT1sLnVzZXJEYXRhKSxuW2wudXVpZF09c319cmV0dXJuIG59cGFyc2VNYXRlcmlhbHModCxyKXtsZXQgbj17fSxpPXt9O2lmKHQhPT12b2lkIDApe2xldCBvPW5ldyBMVTtvLnNldFRleHR1cmVzKHIpO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7bGV0IGw9dFthXTtpZihsLnR5cGU9PT0iTXVsdGlNYXRlcmlhbCIpe2xldCBjPVtdO2ZvcihsZXQgdT0wO3U8bC5tYXRlcmlhbHMubGVuZ3RoO3UrKyl7bGV0IGg9bC5tYXRlcmlhbHNbdV07bltoLnV1aWRdPT09dm9pZCAwJiYobltoLnV1aWRdPW8ucGFyc2UoaCkpLGMucHVzaChuW2gudXVpZF0pfWlbbC51dWlkXT1jfWVsc2UgbltsLnV1aWRdPT09dm9pZCAwJiYobltsLnV1aWRdPW8ucGFyc2UobCkpLGlbbC51dWlkXT1uW2wudXVpZF19fXJldHVybiBpfXBhcnNlQW5pbWF0aW9ucyh0KXtsZXQgcj17fTtpZih0IT09dm9pZCAwKWZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT10W25dLG89UXYucGFyc2UoaSk7cltvLnV1aWRdPW99cmV0dXJuIHJ9cGFyc2VJbWFnZXModCxyKXtsZXQgbj10aGlzLGk9e30sbztmdW5jdGlvbiBhKGwpe3JldHVybiBuLm1hbmFnZXIuaXRlbVN0YXJ0KGwpLG8ubG9hZChsLGZ1bmN0aW9uKCl7bi5tYW5hZ2VyLml0ZW1FbmQobCl9LHZvaWQgMCxmdW5jdGlvbigpe24ubWFuYWdlci5pdGVtRXJyb3IobCksbi5tYW5hZ2VyLml0ZW1FbmQobCl9KX1mdW5jdGlvbiBzKGwpe2lmKHR5cGVvZiBsPT0ic3RyaW5nIil7bGV0IGM9bCx1PS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KGMpP2M6bi5yZXNvdXJjZVBhdGgrYztyZXR1cm4gYSh1KX1lbHNlIHJldHVybiBsLmRhdGE/e2RhdGE6QjMobC50eXBlLGwuZGF0YSksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9Om51bGx9aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCl7bGV0IGw9bmV3IE02KHIpO289bmV3IGV4KGwpLG8uc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7Zm9yKGxldCBjPTAsdT10Lmxlbmd0aDtjPHU7YysrKXtsZXQgaD10W2NdLGY9aC51cmw7aWYoQXJyYXkuaXNBcnJheShmKSl7aVtoLnV1aWRdPVtdO2ZvcihsZXQgcD0wLGQ9Zi5sZW5ndGg7cDxkO3ArKyl7bGV0IGc9ZltwXSxfPXMoZyk7XyE9PW51bGwmJihfIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9pW2gudXVpZF0ucHVzaChfKTppW2gudXVpZF0ucHVzaChuZXcgSmQoXy5kYXRhLF8ud2lkdGgsXy5oZWlnaHQpKSl9fWVsc2V7bGV0IHA9cyhoLnVybCk7cCE9PW51bGwmJihpW2gudXVpZF09cCl9fX1yZXR1cm4gaX1wYXJzZUltYWdlc0FzeW5jKHQpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHI9dGhpcyxuPXt9LGk7ZnVuY3Rpb24gbyhhKXtyZXR1cm4gUmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7bGV0IHM9YSxsPS9eKFwvXC8pfChbYS16XSs6KFwvXC8pPykvaS50ZXN0KHMpP3M6ci5yZXNvdXJjZVBhdGgrcztyZXR1cm4geWllbGQgaS5sb2FkQXN5bmMobCl9ZWxzZSByZXR1cm4gYS5kYXRhP3tkYXRhOkIzKGEudHlwZSxhLmRhdGEpLHdpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0fTpudWxsfSl9aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCl7aT1uZXcgZXgodGhpcy5tYW5hZ2VyKSxpLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pO2ZvcihsZXQgYT0wLHM9dC5sZW5ndGg7YTxzO2ErKyl7bGV0IGw9dFthXSxjPWwudXJsO2lmKEFycmF5LmlzQXJyYXkoYykpe25bbC51dWlkXT1bXTtmb3IobGV0IHU9MCxoPWMubGVuZ3RoO3U8aDt1Kyspe2xldCBmPWNbdV0scD15aWVsZCBvKGYpO3AhPT1udWxsJiYocCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ/bltsLnV1aWRdLnB1c2gocCk6bltsLnV1aWRdLnB1c2gobmV3IEpkKHAuZGF0YSxwLndpZHRoLHAuaGVpZ2h0KSkpfX1lbHNle2xldCB1PXlpZWxkIG8obC51cmwpO3UhPT1udWxsJiYobltsLnV1aWRdPXUpfX19cmV0dXJuIG59KX1wYXJzZVRleHR1cmVzKHQscil7ZnVuY3Rpb24gbihvLGEpe3JldHVybiB0eXBlb2Ygbz09Im51bWJlciI/bzooY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXIucGFyc2VUZXh0dXJlOiBDb25zdGFudCBzaG91bGQgYmUgaW4gbnVtZXJpYyBmb3JtLiIsbyksYVtvXSl9bGV0IGk9e307aWYodCE9PXZvaWQgMClmb3IobGV0IG89MCxhPXQubGVuZ3RoO288YTtvKyspe2xldCBzPXRbb107cy5pbWFnZT09PXZvaWQgMCYmY29uc29sZS53YXJuKCdUSFJFRS5PYmplY3RMb2FkZXI6IE5vICJpbWFnZSIgc3BlY2lmaWVkIGZvcicscy51dWlkKSxyW3MuaW1hZ2VdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIGltYWdlIixzLmltYWdlKTtsZXQgbCxjPXJbcy5pbWFnZV07QXJyYXkuaXNBcnJheShjKT8obD1uZXcgSDAoYyksYy5sZW5ndGg9PT02JiYobC5uZWVkc1VwZGF0ZT0hMCkpOihjJiZjLmRhdGE/bD1uZXcgSmQoYy5kYXRhLGMud2lkdGgsYy5oZWlnaHQpOmw9bmV3IHhpKGMpLGMmJihsLm5lZWRzVXBkYXRlPSEwKSksbC51dWlkPXMudXVpZCxzLm5hbWUhPT12b2lkIDAmJihsLm5hbWU9cy5uYW1lKSxzLm1hcHBpbmchPT12b2lkIDAmJihsLm1hcHBpbmc9bihzLm1hcHBpbmcsbDByKSkscy5vZmZzZXQhPT12b2lkIDAmJmwub2Zmc2V0LmZyb21BcnJheShzLm9mZnNldCkscy5yZXBlYXQhPT12b2lkIDAmJmwucmVwZWF0LmZyb21BcnJheShzLnJlcGVhdCkscy5jZW50ZXIhPT12b2lkIDAmJmwuY2VudGVyLmZyb21BcnJheShzLmNlbnRlcikscy5yb3RhdGlvbiE9PXZvaWQgMCYmKGwucm90YXRpb249cy5yb3RhdGlvbikscy53cmFwIT09dm9pZCAwJiYobC53cmFwUz1uKHMud3JhcFswXSx2aGUpLGwud3JhcFQ9bihzLndyYXBbMV0sdmhlKSkscy5mb3JtYXQhPT12b2lkIDAmJihsLmZvcm1hdD1zLmZvcm1hdCkscy50eXBlIT09dm9pZCAwJiYobC50eXBlPXMudHlwZSkscy5lbmNvZGluZyE9PXZvaWQgMCYmKGwuZW5jb2Rpbmc9cy5lbmNvZGluZykscy5taW5GaWx0ZXIhPT12b2lkIDAmJihsLm1pbkZpbHRlcj1uKHMubWluRmlsdGVyLHhoZSkpLHMubWFnRmlsdGVyIT09dm9pZCAwJiYobC5tYWdGaWx0ZXI9bihzLm1hZ0ZpbHRlcix4aGUpKSxzLmFuaXNvdHJvcHkhPT12b2lkIDAmJihsLmFuaXNvdHJvcHk9cy5hbmlzb3Ryb3B5KSxzLmZsaXBZIT09dm9pZCAwJiYobC5mbGlwWT1zLmZsaXBZKSxzLnByZW11bHRpcGx5QWxwaGEhPT12b2lkIDAmJihsLnByZW11bHRpcGx5QWxwaGE9cy5wcmVtdWx0aXBseUFscGhhKSxzLnVucGFja0FsaWdubWVudCE9PXZvaWQgMCYmKGwudW5wYWNrQWxpZ25tZW50PXMudW5wYWNrQWxpZ25tZW50KSxzLnVzZXJEYXRhIT09dm9pZCAwJiYobC51c2VyRGF0YT1zLnVzZXJEYXRhKSxpW3MudXVpZF09bH1yZXR1cm4gaX1wYXJzZU9iamVjdCh0LHIsbixpLG8pe2xldCBhO2Z1bmN0aW9uIHMoZil7cmV0dXJuIHJbZl09PT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0TG9hZGVyOiBVbmRlZmluZWQgZ2VvbWV0cnkiLGYpLHJbZl19ZnVuY3Rpb24gbChmKXtpZihmIT09dm9pZCAwKXtpZihBcnJheS5pc0FycmF5KGYpKXtsZXQgcD1bXTtmb3IobGV0IGQ9MCxnPWYubGVuZ3RoO2Q8ZztkKyspe2xldCBfPWZbZF07bltfXT09PXZvaWQgMCYmY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IFVuZGVmaW5lZCBtYXRlcmlhbCIsXykscC5wdXNoKG5bX10pfXJldHVybiBwfXJldHVybiBuW2ZdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIG1hdGVyaWFsIixmKSxuW2ZdfX1mdW5jdGlvbiBjKGYpe3JldHVybiBpW2ZdPT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogVW5kZWZpbmVkIHRleHR1cmUiLGYpLGlbZl19bGV0IHUsaDtzd2l0Y2godC50eXBlKXtjYXNlIlNjZW5lIjphPW5ldyBxMCx0LmJhY2tncm91bmQhPT12b2lkIDAmJihOdW1iZXIuaXNJbnRlZ2VyKHQuYmFja2dyb3VuZCk/YS5iYWNrZ3JvdW5kPW5ldyBuZSh0LmJhY2tncm91bmQpOmEuYmFja2dyb3VuZD1jKHQuYmFja2dyb3VuZCkpLHQuZW52aXJvbm1lbnQhPT12b2lkIDAmJihhLmVudmlyb25tZW50PWModC5lbnZpcm9ubWVudCkpLHQuZm9nIT09dm9pZCAwJiYodC5mb2cudHlwZT09PSJGb2ciP2EuZm9nPW5ldyB6dih0LmZvZy5jb2xvcix0LmZvZy5uZWFyLHQuZm9nLmZhcik6dC5mb2cudHlwZT09PSJGb2dFeHAyIiYmKGEuZm9nPW5ldyBPdih0LmZvZy5jb2xvcix0LmZvZy5kZW5zaXR5KSkpO2JyZWFrO2Nhc2UiUGVyc3BlY3RpdmVDYW1lcmEiOmE9bmV3IFVpKHQuZm92LHQuYXNwZWN0LHQubmVhcix0LmZhciksdC5mb2N1cyE9PXZvaWQgMCYmKGEuZm9jdXM9dC5mb2N1cyksdC56b29tIT09dm9pZCAwJiYoYS56b29tPXQuem9vbSksdC5maWxtR2F1Z2UhPT12b2lkIDAmJihhLmZpbG1HYXVnZT10LmZpbG1HYXVnZSksdC5maWxtT2Zmc2V0IT09dm9pZCAwJiYoYS5maWxtT2Zmc2V0PXQuZmlsbU9mZnNldCksdC52aWV3IT09dm9pZCAwJiYoYS52aWV3PU9iamVjdC5hc3NpZ24oe30sdC52aWV3KSk7YnJlYWs7Y2FzZSJPcnRob2dyYXBoaWNDYW1lcmEiOmE9bmV3IER2KHQubGVmdCx0LnJpZ2h0LHQudG9wLHQuYm90dG9tLHQubmVhcix0LmZhciksdC56b29tIT09dm9pZCAwJiYoYS56b29tPXQuem9vbSksdC52aWV3IT09dm9pZCAwJiYoYS52aWV3PU9iamVjdC5hc3NpZ24oe30sdC52aWV3KSk7YnJlYWs7Y2FzZSJBbWJpZW50TGlnaHQiOmE9bmV3IEk2KHQuY29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6YT1uZXcgUDYodC5jb2xvcix0LmludGVuc2l0eSk7YnJlYWs7Y2FzZSJQb2ludExpZ2h0IjphPW5ldyBBNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQuZGlzdGFuY2UsdC5kZWNheSk7YnJlYWs7Y2FzZSJSZWN0QXJlYUxpZ2h0IjphPW5ldyBMNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQud2lkdGgsdC5oZWlnaHQpO2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjphPW5ldyBDNih0LmNvbG9yLHQuaW50ZW5zaXR5LHQuZGlzdGFuY2UsdC5hbmdsZSx0LnBlbnVtYnJhLHQuZGVjYXkpO2JyZWFrO2Nhc2UiSGVtaXNwaGVyZUxpZ2h0IjphPW5ldyBFNih0LmNvbG9yLHQuZ3JvdW5kQ29sb3IsdC5pbnRlbnNpdHkpO2JyZWFrO2Nhc2UiTGlnaHRQcm9iZSI6YT1uZXcgcngoKS5mcm9tSlNPTih0KTticmVhaztjYXNlIlNraW5uZWRNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpLGE9bmV3IGFNKHUsaCksdC5iaW5kTW9kZSE9PXZvaWQgMCYmKGEuYmluZE1vZGU9dC5iaW5kTW9kZSksdC5iaW5kTWF0cml4IT09dm9pZCAwJiZhLmJpbmRNYXRyaXguZnJvbUFycmF5KHQuYmluZE1hdHJpeCksdC5za2VsZXRvbiE9PXZvaWQgMCYmKGEuc2tlbGV0b249dC5za2VsZXRvbik7YnJlYWs7Y2FzZSJNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpLGE9bmV3IGVpKHUsaCk7YnJlYWs7Y2FzZSJJbnN0YW5jZWRNZXNoIjp1PXModC5nZW9tZXRyeSksaD1sKHQubWF0ZXJpYWwpO2xldCBmPXQuY291bnQscD10Lmluc3RhbmNlTWF0cml4LGQ9dC5pbnN0YW5jZUNvbG9yO2E9bmV3IG42KHUsaCxmKSxhLmluc3RhbmNlTWF0cml4PW5ldyBybShuZXcgRmxvYXQzMkFycmF5KHAuYXJyYXkpLDE2KSxkIT09dm9pZCAwJiYoYS5pbnN0YW5jZUNvbG9yPW5ldyBybShuZXcgRmxvYXQzMkFycmF5KGQuYXJyYXkpLGQuaXRlbVNpemUpKTticmVhaztjYXNlIkxPRCI6YT1uZXcgZ1U7YnJlYWs7Y2FzZSJMaW5lIjphPW5ldyBjaChzKHQuZ2VvbWV0cnkpLGwodC5tYXRlcmlhbCkpO2JyZWFrO2Nhc2UiTGluZUxvb3AiOmE9bmV3IGk2KHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJMaW5lU2VnbWVudHMiOmE9bmV3IEFhKHModC5nZW9tZXRyeSksbCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJQb2ludENsb3VkIjpjYXNlIlBvaW50cyI6YT1uZXcgaW0ocyh0Lmdlb21ldHJ5KSxsKHQubWF0ZXJpYWwpKTticmVhaztjYXNlIlNwcml0ZSI6YT1uZXcgb00obCh0Lm1hdGVyaWFsKSk7YnJlYWs7Y2FzZSJHcm91cCI6YT1uZXcgWGQ7YnJlYWs7Y2FzZSJCb25lIjphPW5ldyBzTTticmVhaztkZWZhdWx0OmE9bmV3IG9yfWlmKGEudXVpZD10LnV1aWQsdC5uYW1lIT09dm9pZCAwJiYoYS5uYW1lPXQubmFtZSksdC5tYXRyaXghPT12b2lkIDA/KGEubWF0cml4LmZyb21BcnJheSh0Lm1hdHJpeCksdC5tYXRyaXhBdXRvVXBkYXRlIT09dm9pZCAwJiYoYS5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSksYS5tYXRyaXhBdXRvVXBkYXRlJiZhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnF1YXRlcm5pb24sYS5zY2FsZSkpOih0LnBvc2l0aW9uIT09dm9pZCAwJiZhLnBvc2l0aW9uLmZyb21BcnJheSh0LnBvc2l0aW9uKSx0LnJvdGF0aW9uIT09dm9pZCAwJiZhLnJvdGF0aW9uLmZyb21BcnJheSh0LnJvdGF0aW9uKSx0LnF1YXRlcm5pb24hPT12b2lkIDAmJmEucXVhdGVybmlvbi5mcm9tQXJyYXkodC5xdWF0ZXJuaW9uKSx0LnNjYWxlIT09dm9pZCAwJiZhLnNjYWxlLmZyb21BcnJheSh0LnNjYWxlKSksdC5jYXN0U2hhZG93IT09dm9pZCAwJiYoYS5jYXN0U2hhZG93PXQuY2FzdFNoYWRvdyksdC5yZWNlaXZlU2hhZG93IT09dm9pZCAwJiYoYS5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyksdC5zaGFkb3cmJih0LnNoYWRvdy5iaWFzIT09dm9pZCAwJiYoYS5zaGFkb3cuYmlhcz10LnNoYWRvdy5iaWFzKSx0LnNoYWRvdy5ub3JtYWxCaWFzIT09dm9pZCAwJiYoYS5zaGFkb3cubm9ybWFsQmlhcz10LnNoYWRvdy5ub3JtYWxCaWFzKSx0LnNoYWRvdy5yYWRpdXMhPT12b2lkIDAmJihhLnNoYWRvdy5yYWRpdXM9dC5zaGFkb3cucmFkaXVzKSx0LnNoYWRvdy5tYXBTaXplIT09dm9pZCAwJiZhLnNoYWRvdy5tYXBTaXplLmZyb21BcnJheSh0LnNoYWRvdy5tYXBTaXplKSx0LnNoYWRvdy5jYW1lcmEhPT12b2lkIDAmJihhLnNoYWRvdy5jYW1lcmE9dGhpcy5wYXJzZU9iamVjdCh0LnNoYWRvdy5jYW1lcmEpKSksdC52aXNpYmxlIT09dm9pZCAwJiYoYS52aXNpYmxlPXQudmlzaWJsZSksdC5mcnVzdHVtQ3VsbGVkIT09dm9pZCAwJiYoYS5mcnVzdHVtQ3VsbGVkPXQuZnJ1c3R1bUN1bGxlZCksdC5yZW5kZXJPcmRlciE9PXZvaWQgMCYmKGEucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlciksdC51c2VyRGF0YSE9PXZvaWQgMCYmKGEudXNlckRhdGE9dC51c2VyRGF0YSksdC5sYXllcnMhPT12b2lkIDAmJihhLmxheWVycy5tYXNrPXQubGF5ZXJzKSx0LmNoaWxkcmVuIT09dm9pZCAwKXtsZXQgZj10LmNoaWxkcmVuO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWEuYWRkKHRoaXMucGFyc2VPYmplY3QoZltwXSxyLG4saSxvKSl9aWYodC5hbmltYXRpb25zIT09dm9pZCAwKXtsZXQgZj10LmFuaW1hdGlvbnM7Zm9yKGxldCBwPTA7cDxmLmxlbmd0aDtwKyspe2xldCBkPWZbcF07YS5hbmltYXRpb25zLnB1c2gob1tkXSl9fWlmKHQudHlwZT09PSJMT0QiKXt0LmF1dG9VcGRhdGUhPT12b2lkIDAmJihhLmF1dG9VcGRhdGU9dC5hdXRvVXBkYXRlKTtsZXQgZj10LmxldmVscztmb3IobGV0IHA9MDtwPGYubGVuZ3RoO3ArKyl7bGV0IGQ9ZltwXSxnPWEuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgidXVpZCIsZC5vYmplY3QpO2chPT12b2lkIDAmJmEuYWRkTGV2ZWwoZyxkLmRpc3RhbmNlKX19cmV0dXJuIGF9YmluZFNrZWxldG9ucyh0LHIpe09iamVjdC5rZXlzKHIpLmxlbmd0aCE9PTAmJnQudHJhdmVyc2UoZnVuY3Rpb24obil7aWYobi5pc1NraW5uZWRNZXNoPT09ITAmJm4uc2tlbGV0b24hPT12b2lkIDApe2xldCBpPXJbbi5za2VsZXRvbl07aT09PXZvaWQgMD9jb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdExvYWRlcjogTm8gc2tlbGV0b24gZm91bmQgd2l0aCBVVUlEOiIsbi5za2VsZXRvbik6bi5iaW5kKGksbi5iaW5kTWF0cml4KX19KX1zZXRUZXh0dXJlUGF0aCh0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3RMb2FkZXI6IC5zZXRUZXh0dXJlUGF0aCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldFJlc291cmNlUGF0aCgpLiIpLHRoaXMuc2V0UmVzb3VyY2VQYXRoKHQpfX0sbDByPXtVVk1hcHBpbmc6alUsQ3ViZVJlZmxlY3Rpb25NYXBwaW5nOm54LEN1YmVSZWZyYWN0aW9uTWFwcGluZzppeCxFcXVpcmVjdGFuZ3VsYXJSZWZsZWN0aW9uTWFwcGluZzpXUCxFcXVpcmVjdGFuZ3VsYXJSZWZyYWN0aW9uTWFwcGluZzpZUCxDdWJlVVZSZWZsZWN0aW9uTWFwcGluZzp4TSxDdWJlVVZSZWZyYWN0aW9uTWFwcGluZzpPNn0sdmhlPXtSZXBlYXRXcmFwcGluZzpqUCxDbGFtcFRvRWRnZVdyYXBwaW5nOkpvLE1pcnJvcmVkUmVwZWF0V3JhcHBpbmc6WFB9LHhoZT17TmVhcmVzdEZpbHRlcjpMaSxOZWFyZXN0TWlwbWFwTmVhcmVzdEZpbHRlcjppVSxOZWFyZXN0TWlwbWFwTGluZWFyRmlsdGVyOm9VLExpbmVhckZpbHRlcjpvaSxMaW5lYXJNaXBtYXBOZWFyZXN0RmlsdGVyOmtodCxMaW5lYXJNaXBtYXBMaW5lYXJGaWx0ZXI6b3h9LFJVPWNsYXNzIGV4dGVuZHMgZWF7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdHlwZW9mIGNyZWF0ZUltYWdlQml0bWFwPT0idW5kZWZpbmVkIiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogY3JlYXRlSW1hZ2VCaXRtYXAoKSBub3Qgc3VwcG9ydGVkLiIpLHR5cGVvZiBmZXRjaD09InVuZGVmaW5lZCImJmNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VCaXRtYXBMb2FkZXI6IGZldGNoKCkgbm90IHN1cHBvcnRlZC4iKSx0aGlzLm9wdGlvbnM9e3ByZW11bHRpcGx5QWxwaGE6Im5vbmUifX1zZXRPcHRpb25zKHQpe3JldHVybiB0aGlzLm9wdGlvbnM9dCx0aGlzfWxvYWQodCxyLG4saSl7dD09PXZvaWQgMCYmKHQ9IiIpLHRoaXMucGF0aCE9PXZvaWQgMCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxhPXR4LmdldCh0KTtpZihhIT09dm9pZCAwKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyJiZyKGEpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxhO2xldCBzPXt9O3MuY3JlZGVudGlhbHM9dGhpcy5jcm9zc09yaWdpbj09PSJhbm9ueW1vdXMiPyJzYW1lLW9yaWdpbiI6ImluY2x1ZGUiLHMuaGVhZGVycz10aGlzLnJlcXVlc3RIZWFkZXIsZmV0Y2godCxzKS50aGVuKGZ1bmN0aW9uKGwpe3JldHVybiBsLmJsb2IoKX0pLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKGwsT2JqZWN0LmFzc2lnbihvLm9wdGlvbnMse2NvbG9yU3BhY2VDb252ZXJzaW9uOiJub25lIn0pKX0pLnRoZW4oZnVuY3Rpb24obCl7dHguYWRkKHQsbCksciYmcihsKSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLmNhdGNoKGZ1bmN0aW9uKGwpe2kmJmkobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KSxvLm1hbmFnZXIuaXRlbUVuZCh0KX0pLG8ubWFuYWdlci5pdGVtU3RhcnQodCl9fTtSVS5wcm90b3R5cGUuaXNJbWFnZUJpdG1hcExvYWRlcj0hMDt2YXIgR1YsRmh0PXtnZXRDb250ZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIEdWPT09dm9pZCAwJiYoR1Y9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKSxHVn0sc2V0Q29udGV4dDpmdW5jdGlvbihlKXtHVj1lfX0sTlU9Y2xhc3MgZXh0ZW5kcyBlYXtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQscixuLGkpe2xldCBvPXRoaXMsYT1uZXcgSmModGhpcy5tYW5hZ2VyKTthLnNldFJlc3BvbnNlVHlwZSgiYXJyYXlidWZmZXIiKSxhLnNldFBhdGgodGhpcy5wYXRoKSxhLnNldFJlcXVlc3RIZWFkZXIodGhpcy5yZXF1ZXN0SGVhZGVyKSxhLnNldFdpdGhDcmVkZW50aWFscyh0aGlzLndpdGhDcmVkZW50aWFscyksYS5sb2FkKHQsZnVuY3Rpb24ocyl7dHJ5e2xldCBsPXMuc2xpY2UoMCk7Rmh0LmdldENvbnRleHQoKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtyKHUpfSl9Y2F0Y2gobCl7aT9pKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LG4saSl9fSxEVT1jbGFzcyBleHRlbmRzIHJ4e2NvbnN0cnVjdG9yKHQscixuPTEpe3N1cGVyKHZvaWQgMCxuKTtsZXQgaT1uZXcgbmUoKS5zZXQodCksbz1uZXcgbmUoKS5zZXQociksYT1uZXcgaihpLnIsaS5nLGkuYikscz1uZXcgaihvLnIsby5nLG8uYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkoYSkuYWRkKHMpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkoYSkuc3ViKHMpLm11bHRpcGx5U2NhbGFyKGMpfX07RFUucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0UHJvYmU9ITA7dmFyIE9VPWNsYXNzIGV4dGVuZHMgcnh7Y29uc3RydWN0b3IodCxyPTEpe3N1cGVyKHZvaWQgMCxyKTtsZXQgbj1uZXcgbmUoKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KG4ucixuLmcsbi5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fTtPVS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgYmhlPW5ldyBNZSx3aGU9bmV3IE1lLHl2PW5ldyBNZSxjaHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IlN0ZXJlb0NhbWVyYSIsdGhpcy5hc3BlY3Q9MSx0aGlzLmV5ZVNlcD0uMDY0LHRoaXMuY2FtZXJhTD1uZXcgVWksdGhpcy5jYW1lcmFMLmxheWVycy5lbmFibGUoMSksdGhpcy5jYW1lcmFMLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jYW1lcmFSPW5ldyBVaSx0aGlzLmNhbWVyYVIubGF5ZXJzLmVuYWJsZSgyKSx0aGlzLmNhbWVyYVIubWF0cml4QXV0b1VwZGF0ZT0hMSx0aGlzLl9jYWNoZT17Zm9jdXM6bnVsbCxmb3Y6bnVsbCxhc3BlY3Q6bnVsbCxuZWFyOm51bGwsZmFyOm51bGwsem9vbTpudWxsLGV5ZVNlcDpudWxsfX11cGRhdGUodCl7bGV0IHI9dGhpcy5fY2FjaGU7aWYoci5mb2N1cyE9PXQuZm9jdXN8fHIuZm92IT09dC5mb3Z8fHIuYXNwZWN0IT09dC5hc3BlY3QqdGhpcy5hc3BlY3R8fHIubmVhciE9PXQubmVhcnx8ci5mYXIhPT10LmZhcnx8ci56b29tIT09dC56b29tfHxyLmV5ZVNlcCE9PXRoaXMuZXllU2VwKXtyLmZvY3VzPXQuZm9jdXMsci5mb3Y9dC5mb3Ysci5hc3BlY3Q9dC5hc3BlY3QqdGhpcy5hc3BlY3Qsci5uZWFyPXQubmVhcixyLmZhcj10LmZhcixyLnpvb209dC56b29tLHIuZXllU2VwPXRoaXMuZXllU2VwLHl2LmNvcHkodC5wcm9qZWN0aW9uTWF0cml4KTtsZXQgaT1yLmV5ZVNlcC8yLG89aSpyLm5lYXIvci5mb2N1cyxhPXIubmVhcipNYXRoLnRhbihQdipyLmZvdiouNSkvci56b29tLHMsbDt3aGUuZWxlbWVudHNbMTJdPS1pLGJoZS5lbGVtZW50c1sxMl09aSxzPS1hKnIuYXNwZWN0K28sbD1hKnIuYXNwZWN0K28seXYuZWxlbWVudHNbMF09MipyLm5lYXIvKGwtcykseXYuZWxlbWVudHNbOF09KGwrcykvKGwtcyksdGhpcy5jYW1lcmFMLnByb2plY3Rpb25NYXRyaXguY29weSh5dikscz0tYSpyLmFzcGVjdC1vLGw9YSpyLmFzcGVjdC1vLHl2LmVsZW1lbnRzWzBdPTIqci5uZWFyLyhsLXMpLHl2LmVsZW1lbnRzWzhdPShsK3MpLyhsLXMpLHRoaXMuY2FtZXJhUi5wcm9qZWN0aW9uTWF0cml4LmNvcHkoeXYpfXRoaXMuY2FtZXJhTC5tYXRyaXhXb3JsZC5jb3B5KHQubWF0cml4V29ybGQpLm11bHRpcGx5KHdoZSksdGhpcy5jYW1lcmFSLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCkubXVsdGlwbHkoYmhlKX19LG1NPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITApe3RoaXMuYXV0b1N0YXJ0PXQsdGhpcy5zdGFydFRpbWU9MCx0aGlzLm9sZFRpbWU9MCx0aGlzLmVsYXBzZWRUaW1lPTAsdGhpcy5ydW5uaW5nPSExfXN0YXJ0KCl7dGhpcy5zdGFydFRpbWU9U2hlKCksdGhpcy5vbGRUaW1lPXRoaXMuc3RhcnRUaW1lLHRoaXMuZWxhcHNlZFRpbWU9MCx0aGlzLnJ1bm5pbmc9ITB9c3RvcCgpe3RoaXMuZ2V0RWxhcHNlZFRpbWUoKSx0aGlzLnJ1bm5pbmc9ITEsdGhpcy5hdXRvU3RhcnQ9ITF9Z2V0RWxhcHNlZFRpbWUoKXtyZXR1cm4gdGhpcy5nZXREZWx0YSgpLHRoaXMuZWxhcHNlZFRpbWV9Z2V0RGVsdGEoKXtsZXQgdD0wO2lmKHRoaXMuYXV0b1N0YXJ0JiYhdGhpcy5ydW5uaW5nKXJldHVybiB0aGlzLnN0YXJ0KCksMDtpZih0aGlzLnJ1bm5pbmcpe2xldCByPVNoZSgpO3Q9KHItdGhpcy5vbGRUaW1lKS8xZTMsdGhpcy5vbGRUaW1lPXIsdGhpcy5lbGFwc2VkVGltZSs9dH1yZXR1cm4gdH19O2Z1bmN0aW9uIFNoZSgpe3JldHVybih0eXBlb2YgcGVyZm9ybWFuY2U9PSJ1bmRlZmluZWQiP0RhdGU6cGVyZm9ybWFuY2UpLm5vdygpfXZhciB2dj1uZXcgaixNaGU9bmV3IHZpLGMwcj1uZXcgaix4dj1uZXcgaix1aHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJBdWRpb0xpc3RlbmVyIix0aGlzLmNvbnRleHQ9Rmh0LmdldENvbnRleHQoKSx0aGlzLmdhaW49dGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKSx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZmlsdGVyPW51bGwsdGhpcy50aW1lRGVsdGE9MCx0aGlzLl9jbG9jaz1uZXcgbU19Z2V0SW5wdXQoKXtyZXR1cm4gdGhpcy5nYWlufXJlbW92ZUZpbHRlcigpe3JldHVybiB0aGlzLmZpbHRlciE9PW51bGwmJih0aGlzLmdhaW4uZGlzY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuZGlzY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXMuZ2Fpbi5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9bnVsbCksdGhpc31nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5maWx0ZXJ9c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLmZpbHRlciE9PW51bGw/KHRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuZmlsdGVyKSx0aGlzLmZpbHRlci5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbikpOnRoaXMuZ2Fpbi5kaXNjb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbiksdGhpcy5maWx0ZXI9dCx0aGlzLmdhaW4uY29ubmVjdCh0aGlzLmZpbHRlciksdGhpcy5maWx0ZXIuY29ubmVjdCh0aGlzLmNvbnRleHQuZGVzdGluYXRpb24pLHRoaXN9Z2V0TWFzdGVyVm9sdW1lKCl7cmV0dXJuIHRoaXMuZ2Fpbi5nYWluLnZhbHVlfXNldE1hc3RlclZvbHVtZSh0KXtyZXR1cm4gdGhpcy5nYWluLmdhaW4uc2V0VGFyZ2V0QXRUaW1lKHQsdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lLC4wMSksdGhpc311cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KTtsZXQgcj10aGlzLmNvbnRleHQubGlzdGVuZXIsbj10aGlzLnVwO2lmKHRoaXMudGltZURlbHRhPXRoaXMuX2Nsb2NrLmdldERlbHRhKCksdGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodnYsTWhlLGMwcikseHYuc2V0KDAsMCwtMSkuYXBwbHlRdWF0ZXJuaW9uKE1oZSksci5wb3NpdGlvblgpe2xldCBpPXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0aGlzLnRpbWVEZWx0YTtyLnBvc2l0aW9uWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh2di54LGkpLHIucG9zaXRpb25ZLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHZ2LnksaSksci5wb3NpdGlvbloubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUodnYueixpKSxyLmZvcndhcmRYLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHh2LngsaSksci5mb3J3YXJkWS5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh4di55LGkpLHIuZm9yd2FyZFoubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoeHYueixpKSxyLnVwWC5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShuLngsaSksci51cFkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUobi55LGkpLHIudXBaLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKG4ueixpKX1lbHNlIHIuc2V0UG9zaXRpb24odnYueCx2di55LHZ2LnopLHIuc2V0T3JpZW50YXRpb24oeHYueCx4di55LHh2Lnosbi54LG4ueSxuLnopfX0sTjY9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKHRoaXMuaXNQbGF5aW5nPT09ITApe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IEF1ZGlvIGlzIGFscmVhZHkgcGxheWluZy4iKTtyZXR1cm59aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59dGhpcy5fc3RhcnRlZEF0PXRoaXMuY29udGV4dC5jdXJyZW50VGltZSt0O2xldCByPXRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtyZXR1cm4gci5idWZmZXI9dGhpcy5idWZmZXIsci5sb29wPXRoaXMubG9vcCxyLmxvb3BTdGFydD10aGlzLmxvb3BTdGFydCxyLmxvb3BFbmQ9dGhpcy5sb29wRW5kLHIub25lbmRlZD10aGlzLm9uRW5kZWQuYmluZCh0aGlzKSxyLnN0YXJ0KHRoaXMuX3N0YXJ0ZWRBdCx0aGlzLl9wcm9ncmVzcyt0aGlzLm9mZnNldCx0aGlzLmR1cmF0aW9uKSx0aGlzLmlzUGxheWluZz0hMCx0aGlzLnNvdXJjZT1yLHRoaXMuc2V0RGV0dW5lKHRoaXMuZGV0dW5lKSx0aGlzLnNldFBsYXliYWNrUmF0ZSh0aGlzLnBsYXliYWNrUmF0ZSksdGhpcy5jb25uZWN0KCl9cGF1c2UoKXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLHRoaXMubG9vcD09PSEwJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpc31zdG9wKCl7aWYodGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTtyZXR1cm59cmV0dXJuIHRoaXMuX3Byb2dyZXNzPTAsdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSx0aGlzfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxyPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxyO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxyPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxyO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSx0aGlzLl9jb25uZWN0ZWQ9PT0hMD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHRoaXMuc291cmNlLmRldHVuZSE9PXZvaWQgMClyZXR1cm4gdGhpcy5pc1BsYXlpbmc9PT0hMCYmdGhpcy5zb3VyY2UuZGV0dW5lLnNldFRhcmdldEF0VGltZSh0aGlzLmRldHVuZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfWdldERldHVuZSgpe3JldHVybiB0aGlzLmRldHVuZX1nZXRGaWx0ZXIoKXtyZXR1cm4gdGhpcy5nZXRGaWx0ZXJzKClbMF19c2V0RmlsdGVyKHQpe3JldHVybiB0aGlzLnNldEZpbHRlcnModD9bdF06W10pfXNldFBsYXliYWNrUmF0ZSh0KXtpZih0aGlzLmhhc1BsYXliYWNrQ29udHJvbD09PSExKXtjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpO3JldHVybn1yZXR1cm4gdGhpcy5wbGF5YmFja1JhdGU9dCx0aGlzLmlzUGxheWluZz09PSEwJiZ0aGlzLnNvdXJjZS5wbGF5YmFja1JhdGUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMucGxheWJhY2tSYXRlLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITE/KGNvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIiksITEpOnRoaXMubG9vcH1zZXRMb29wKHQpe2lmKHRoaXMuaGFzUGxheWJhY2tDb250cm9sPT09ITEpe2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIik7cmV0dXJufXJldHVybiB0aGlzLmxvb3A9dCx0aGlzLmlzUGxheWluZz09PSEwJiYodGhpcy5zb3VyY2UubG9vcD10aGlzLmxvb3ApLHRoaXN9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0sYnY9bmV3IGosRWhlPW5ldyB2aSx1MHI9bmV3IGosd3Y9bmV3IGosaGh0PWNsYXNzIGV4dGVuZHMgTjZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5wYW5uZXI9dGhpcy5jb250ZXh0LmNyZWF0ZVBhbm5lcigpLHRoaXMucGFubmVyLnBhbm5pbmdNb2RlbD0iSFJURiIsdGhpcy5wYW5uZXIuY29ubmVjdCh0aGlzLmdhaW4pfWdldE91dHB1dCgpe3JldHVybiB0aGlzLnBhbm5lcn1nZXRSZWZEaXN0YW5jZSgpe3JldHVybiB0aGlzLnBhbm5lci5yZWZEaXN0YW5jZX1zZXRSZWZEaXN0YW5jZSh0KXtyZXR1cm4gdGhpcy5wYW5uZXIucmVmRGlzdGFuY2U9dCx0aGlzfWdldFJvbGxvZmZGYWN0b3IoKXtyZXR1cm4gdGhpcy5wYW5uZXIucm9sbG9mZkZhY3Rvcn1zZXRSb2xsb2ZmRmFjdG9yKHQpe3JldHVybiB0aGlzLnBhbm5lci5yb2xsb2ZmRmFjdG9yPXQsdGhpc31nZXREaXN0YW5jZU1vZGVsKCl7cmV0dXJuIHRoaXMucGFubmVyLmRpc3RhbmNlTW9kZWx9c2V0RGlzdGFuY2VNb2RlbCh0KXtyZXR1cm4gdGhpcy5wYW5uZXIuZGlzdGFuY2VNb2RlbD10LHRoaXN9Z2V0TWF4RGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5wYW5uZXIubWF4RGlzdGFuY2V9c2V0TWF4RGlzdGFuY2UodCl7cmV0dXJuIHRoaXMucGFubmVyLm1heERpc3RhbmNlPXQsdGhpc31zZXREaXJlY3Rpb25hbENvbmUodCxyLG4pe3JldHVybiB0aGlzLnBhbm5lci5jb25lSW5uZXJBbmdsZT10LHRoaXMucGFubmVyLmNvbmVPdXRlckFuZ2xlPXIsdGhpcy5wYW5uZXIuY29uZU91dGVyR2Fpbj1uLHRoaXN9dXBkYXRlTWF0cml4V29ybGQodCl7aWYoc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9PT0hMCYmdGhpcy5pc1BsYXlpbmc9PT0hMSlyZXR1cm47dGhpcy5tYXRyaXhXb3JsZC5kZWNvbXBvc2UoYnYsRWhlLHUwciksd3Yuc2V0KDAsMCwxKS5hcHBseVF1YXRlcm5pb24oRWhlKTtsZXQgcj10aGlzLnBhbm5lcjtpZihyLnBvc2l0aW9uWCl7bGV0IG49dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3RoaXMubGlzdGVuZXIudGltZURlbHRhO3IucG9zaXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKGJ2Lngsbiksci5wb3NpdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUoYnYueSxuKSxyLnBvc2l0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZShidi56LG4pLHIub3JpZW50YXRpb25YLmxpbmVhclJhbXBUb1ZhbHVlQXRUaW1lKHd2Lngsbiksci5vcmllbnRhdGlvblkubGluZWFyUmFtcFRvVmFsdWVBdFRpbWUod3YueSxuKSxyLm9yaWVudGF0aW9uWi5saW5lYXJSYW1wVG9WYWx1ZUF0VGltZSh3di56LG4pfWVsc2Ugci5zZXRQb3NpdGlvbihidi54LGJ2LnksYnYueiksci5zZXRPcmllbnRhdGlvbih3di54LHd2Lnksd3Yueil9fSx6VT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHI9MjA0OCl7dGhpcy5hbmFseXNlcj10LmNvbnRleHQuY3JlYXRlQW5hbHlzZXIoKSx0aGlzLmFuYWx5c2VyLmZmdFNpemU9cix0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkodGhpcy5hbmFseXNlci5mcmVxdWVuY3lCaW5Db3VudCksdC5nZXRPdXRwdXQoKS5jb25uZWN0KHRoaXMuYW5hbHlzZXIpfWdldEZyZXF1ZW5jeURhdGEoKXtyZXR1cm4gdGhpcy5hbmFseXNlci5nZXRCeXRlRnJlcXVlbmN5RGF0YSh0aGlzLmRhdGEpLHRoaXMuZGF0YX1nZXRBdmVyYWdlRnJlcXVlbmN5KCl7bGV0IHQ9MCxyPXRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXQrPXJbbl07cmV0dXJuIHQvci5sZW5ndGh9fSxGVT1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7dGhpcy5iaW5kaW5nPXQsdGhpcy52YWx1ZVNpemU9bjtsZXQgaSxvLGE7c3dpdGNoKHIpe2Nhc2UicXVhdGVybmlvbiI6aT10aGlzLl9zbGVycCxvPXRoaXMuX3NsZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5UXVhdGVybmlvbix0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KG4qNiksdGhpcy5fd29ya0luZGV4PTU7YnJlYWs7Y2FzZSJzdHJpbmciOmNhc2UiYm9vbCI6aT10aGlzLl9zZWxlY3Qsbz10aGlzLl9zZWxlY3QsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5T3RoZXIsdGhpcy5idWZmZXI9bmV3IEFycmF5KG4qNSk7YnJlYWs7ZGVmYXVsdDppPXRoaXMuX2xlcnAsbz10aGlzLl9sZXJwQWRkaXRpdmUsYT10aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYyx0aGlzLmJ1ZmZlcj1uZXcgRmxvYXQ2NEFycmF5KG4qNSl9dGhpcy5fbWl4QnVmZmVyUmVnaW9uPWksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmU9byx0aGlzLl9zZXRJZGVudGl0eT1hLHRoaXMuX29yaWdJbmRleD0zLHRoaXMuX2FkZEluZGV4PTQsdGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCx0aGlzLnVzZUNvdW50PTAsdGhpcy5yZWZlcmVuY2VDb3VudD0wfWFjY3VtdWxhdGUodCxyKXtsZXQgbj10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLG89dCppK2ksYT10aGlzLmN1bXVsYXRpdmVXZWlnaHQ7aWYoYT09PTApe2ZvcihsZXQgcz0wO3MhPT1pOysrcyluW28rc109bltzXTthPXJ9ZWxzZXthKz1yO2xldCBzPXIvYTt0aGlzLl9taXhCdWZmZXJSZWdpb24obixvLDAscyxpKX10aGlzLmN1bXVsYXRpdmVXZWlnaHQ9YX1hY2N1bXVsYXRlQWRkaXRpdmUodCl7bGV0IHI9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fYWRkSW5kZXg7dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9PT0wJiZ0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlKHIsaSwwLHQsbiksdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUrPXR9YXBwbHkodCl7bGV0IHI9dGhpcy52YWx1ZVNpemUsbj10aGlzLmJ1ZmZlcixpPXQqcityLG89dGhpcy5jdW11bGF0aXZlV2VpZ2h0LGE9dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUscz10aGlzLmJpbmRpbmc7aWYodGhpcy5jdW11bGF0aXZlV2VpZ2h0PTAsdGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmU9MCxvPDEpe2xldCBsPXIqdGhpcy5fb3JpZ0luZGV4O3RoaXMuX21peEJ1ZmZlclJlZ2lvbihuLGksbCwxLW8scil9YT4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShuLGksdGhpcy5fYWRkSW5kZXgqciwxLHIpO2ZvcihsZXQgbD1yLGM9cityO2whPT1jOysrbClpZihuW2xdIT09bltsK3JdKXtzLnNldFZhbHVlKG4saSk7YnJlYWt9fXNhdmVPcmlnaW5hbFN0YXRlKCl7bGV0IHQ9dGhpcy5iaW5kaW5nLHI9dGhpcy5idWZmZXIsbj10aGlzLnZhbHVlU2l6ZSxpPW4qdGhpcy5fb3JpZ0luZGV4O3QuZ2V0VmFsdWUocixpKTtmb3IobGV0IG89bixhPWk7byE9PWE7KytvKXJbb109cltpK28lbl07dGhpcy5fc2V0SWRlbnRpdHkoKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wfXJlc3RvcmVPcmlnaW5hbFN0YXRlKCl7bGV0IHQ9dGhpcy52YWx1ZVNpemUqMzt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsdCl9X3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCl7bGV0IHQ9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUscj10K3RoaXMudmFsdWVTaXplO2ZvcihsZXQgbj10O248cjtuKyspdGhpcy5idWZmZXJbbl09MH1fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpe2xldCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxyPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgbj0wO248dGhpcy52YWx1ZVNpemU7bisrKXRoaXMuYnVmZmVyW3Irbl09dGhpcy5idWZmZXJbdCtuXX1fc2VsZWN0KHQscixuLGksbyl7aWYoaT49LjUpZm9yKGxldCBhPTA7YSE9PW87KythKXRbcithXT10W24rYV19X3NsZXJwKHQscixuLGkpe3ZpLnNsZXJwRmxhdCh0LHIsdCxyLHQsbixpKX1fc2xlcnBBZGRpdGl2ZSh0LHIsbixpLG8pe2xldCBhPXRoaXMuX3dvcmtJbmRleCpvO3ZpLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsYSx0LHIsdCxuKSx2aS5zbGVycEZsYXQodCxyLHQscix0LGEsaSl9X2xlcnAodCxyLG4saSxvKXtsZXQgYT0xLWk7Zm9yKGxldCBzPTA7cyE9PW87KytzKXtsZXQgbD1yK3M7dFtsXT10W2xdKmErdFtuK3NdKml9fV9sZXJwQWRkaXRpdmUodCxyLG4saSxvKXtmb3IobGV0IGE9MDthIT09bzsrK2Epe2xldCBzPXIrYTt0W3NdPXRbc10rdFtuK2FdKml9fX0sQmh0PSJcXFtcXF1cXC46XFwvIixoMHI9bmV3IFJlZ0V4cCgiWyIrQmh0KyJdIiwiZyIpLEhodD0iW14iK0JodCsiXSIsZjByPSJbXiIrQmh0LnJlcGxhY2UoIlxcLiIsIiIpKyJdIixwMHI9LygoPzpXQytbXC86XSkqKS8uc291cmNlLnJlcGxhY2UoIldDIixIaHQpLGQwcj0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixmMHIpLG0wcj0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIixIaHQpLGcwcj0vXC4oV0MrKSg/OlxbKC4rKVxdKT8vLnNvdXJjZS5yZXBsYWNlKCJXQyIsSGh0KSxfMHI9bmV3IFJlZ0V4cCgiXiIrcDByK2QwcittMHIrZzByKyIkIikseTByPVsibWF0ZXJpYWwiLCJtYXRlcmlhbHMiLCJib25lcyJdLGZodD1jbGFzc3tjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9bnx8Q3IucGFyc2VUcmFja05hbWUocik7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8ocixpKX1nZXRWYWx1ZSh0LHIpe3RoaXMuYmluZCgpO2xldCBuPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXRoaXMuX2JpbmRpbmdzW25dO2khPT12b2lkIDAmJmkuZ2V0VmFsdWUodCxyKX1zZXRWYWx1ZSh0LHIpe2xldCBuPXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgaT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXS5zZXRWYWx1ZSh0LHIpfWJpbmQoKXtsZXQgdD10aGlzLl9iaW5kaW5ncztmb3IobGV0IHI9dGhpcy5fdGFyZ2V0R3JvdXAubkNhY2hlZE9iamVjdHNfLG49dC5sZW5ndGg7ciE9PW47KytyKXRbcl0uYmluZCgpfXVuYmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgcj10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18sbj10Lmxlbmd0aDtyIT09bjsrK3IpdFtyXS51bmJpbmQoKX19LENyPWNsYXNze2NvbnN0cnVjdG9yKHQscixuKXt0aGlzLnBhdGg9cix0aGlzLnBhcnNlZFBhdGg9bnx8Q3IucGFyc2VUcmFja05hbWUociksdGhpcy5ub2RlPUNyLmZpbmROb2RlKHQsdGhpcy5wYXJzZWRQYXRoLm5vZGVOYW1lKXx8dCx0aGlzLnJvb3ROb2RlPXQsdGhpcy5nZXRWYWx1ZT10aGlzLl9nZXRWYWx1ZV91bmJvdW5kLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5ib3VuZH1zdGF0aWMgY3JlYXRlKHQscixuKXtyZXR1cm4gdCYmdC5pc0FuaW1hdGlvbk9iamVjdEdyb3VwP25ldyBDci5Db21wb3NpdGUodCxyLG4pOm5ldyBDcih0LHIsbil9c3RhdGljIHNhbml0aXplTm9kZU5hbWUodCl7cmV0dXJuIHQucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoaDByLCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUodCl7bGV0IHI9XzByLmV4ZWModCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrdCk7bGV0IG49e25vZGVOYW1lOnJbMl0sb2JqZWN0TmFtZTpyWzNdLG9iamVjdEluZGV4OnJbNF0scHJvcGVydHlOYW1lOnJbNV0scHJvcGVydHlJbmRleDpyWzZdfSxpPW4ubm9kZU5hbWUmJm4ubm9kZU5hbWUubGFzdEluZGV4T2YoIi4iKTtpZihpIT09dm9pZCAwJiZpIT09LTEpe2xldCBvPW4ubm9kZU5hbWUuc3Vic3RyaW5nKGkrMSk7eTByLmluZGV4T2YobykhPT0tMSYmKG4ubm9kZU5hbWU9bi5ub2RlTmFtZS5zdWJzdHJpbmcoMCxpKSxuLm9iamVjdE5hbWU9byl9aWYobi5wcm9wZXJ0eU5hbWU9PT1udWxsfHxuLnByb3BlcnR5TmFtZS5sZW5ndGg9PT0wKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIit0KTtyZXR1cm4gbn1zdGF0aWMgZmluZE5vZGUodCxyKXtpZighcnx8cj09PSIifHxyPT09Ii4ifHxyPT09LTF8fHI9PT10Lm5hbWV8fHI9PT10LnV1aWQpcmV0dXJuIHQ7aWYodC5za2VsZXRvbil7bGV0IG49dC5za2VsZXRvbi5nZXRCb25lQnlOYW1lKHIpO2lmKG4hPT12b2lkIDApcmV0dXJuIG59aWYodC5jaGlsZHJlbil7bGV0IG49ZnVuY3Rpb24obyl7Zm9yKGxldCBhPTA7YTxvLmxlbmd0aDthKyspe2xldCBzPW9bYV07aWYocy5uYW1lPT09cnx8cy51dWlkPT09cilyZXR1cm4gcztsZXQgbD1uKHMuY2hpbGRyZW4pO2lmKGwpcmV0dXJuIGx9cmV0dXJuIG51bGx9LGk9bih0LmNoaWxkcmVuKTtpZihpKXJldHVybiBpfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdCh0LHIpe3Rbcl09dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSl0W3IrK109bltpXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KHQscil7dFtyXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KHQscil9X3NldFZhbHVlX2RpcmVjdCh0LHIpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT10W3JdfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUodCxyKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheSh0LHIpe2xldCBuPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IGk9MCxvPW4ubGVuZ3RoO2khPT1vOysraSluW2ldPXRbcisrXX1fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUodCxyKXtsZXQgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXT10W3IrK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXtsZXQgbj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBpPTAsbz1uLmxlbmd0aDtpIT09bzsrK2kpbltpXT10W3IrK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtyXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09dFtyXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUodCxyKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT10W3JdLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxyKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKHQscil7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheSh0LHIpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZSh0LHIpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkodCxyKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKHQscil7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZSh0LHIpfV9zZXRWYWx1ZV91bmJvdW5kKHQscil7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZSh0LHIpfWJpbmQoKXtsZXQgdD10aGlzLm5vZGUscj10aGlzLnBhcnNlZFBhdGgsbj1yLm9iamVjdE5hbWUsaT1yLnByb3BlcnR5TmFtZSxvPXIucHJvcGVydHlJbmRleDtpZih0fHwodD1Dci5maW5kTm9kZSh0aGlzLnJvb3ROb2RlLHIubm9kZU5hbWUpfHx0aGlzLnJvb3ROb2RlLHRoaXMubm9kZT10KSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYXZhaWxhYmxlLHRoaXMuc2V0VmFsdWU9dGhpcy5fc2V0VmFsdWVfdW5hdmFpbGFibGUsIXQpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogVHJ5aW5nIHRvIHVwZGF0ZSBub2RlIGZvciB0cmFjazogIit0aGlzLnBhdGgrIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIpO3JldHVybn1pZihuKXtsZXQgYz1yLm9iamVjdEluZGV4O3N3aXRjaChuKXtjYXNlIm1hdGVyaWFscyI6aWYoIXQubWF0ZXJpYWwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1hdGVyaWFsIGFzIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFsLiIsdGhpcyk7cmV0dXJufWlmKCF0Lm1hdGVyaWFsLm1hdGVyaWFscyl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO3JldHVybn10PXQubWF0ZXJpYWwubWF0ZXJpYWxzO2JyZWFrO2Nhc2UiYm9uZXMiOmlmKCF0LnNrZWxldG9uKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBib25lcyBhcyBub2RlIGRvZXMgbm90IGhhdmUgYSBza2VsZXRvbi4iLHRoaXMpO3JldHVybn10PXQuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1KyspaWYodFt1XS5uYW1lPT09Yyl7Yz11O2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodFtuXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gb2JqZWN0TmFtZSBvZiBub2RlIHVuZGVmaW5lZC4iLHRoaXMpO3JldHVybn10PXRbbl19aWYoYyE9PXZvaWQgMCl7aWYodFtjXT09PXZvaWQgMCl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyx0KTtyZXR1cm59dD10W2NdfX1sZXQgYT10W2ldO2lmKGE9PT12b2lkIDApe2xldCBjPXIubm9kZU5hbWU7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gdXBkYXRlIHByb3BlcnR5IGZvciB0cmFjazogIitjKyIuIitpKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iLHQpO3JldHVybn1sZXQgcz10aGlzLlZlcnNpb25pbmcuTm9uZTt0aGlzLnRhcmdldE9iamVjdD10LHQubmVlZHNVcGRhdGUhPT12b2lkIDA/cz10aGlzLlZlcnNpb25pbmcuTmVlZHNVcGRhdGU6dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlIT09dm9pZCAwJiYocz10aGlzLlZlcnNpb25pbmcuTWF0cml4V29ybGROZWVkc1VwZGF0ZSk7bGV0IGw9dGhpcy5CaW5kaW5nVHlwZS5EaXJlY3Q7aWYobyE9PXZvaWQgMCl7aWYoaT09PSJtb3JwaFRhcmdldEluZmx1ZW5jZXMiKXtpZighdC5nZW9tZXRyeSl7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtyZXR1cm59aWYodC5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXtpZighdC5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBiZWNhdXNlIG5vZGUgZG9lcyBub3QgaGF2ZSBhIGdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy4iLHRoaXMpO3JldHVybn10Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeVtvXSE9PXZvaWQgMCYmKG89dC5tb3JwaFRhcmdldERpY3Rpb25hcnlbb10pfWVsc2V7Y29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIG9uIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iLHRoaXMpO3JldHVybn19bD10aGlzLkJpbmRpbmdUeXBlLkFycmF5RWxlbWVudCx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSx0aGlzLnByb3BlcnR5SW5kZXg9b31lbHNlIGEuZnJvbUFycmF5IT09dm9pZCAwJiZhLnRvQXJyYXkhPT12b2lkIDA/KGw9dGhpcy5CaW5kaW5nVHlwZS5IYXNGcm9tVG9BcnJheSx0aGlzLnJlc29sdmVkUHJvcGVydHk9YSk6QXJyYXkuaXNBcnJheShhKT8obD10aGlzLkJpbmRpbmdUeXBlLkVudGlyZUFycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTp0aGlzLnByb3BlcnR5TmFtZT1pO3RoaXMuZ2V0VmFsdWU9dGhpcy5HZXR0ZXJCeUJpbmRpbmdUeXBlW2xdLHRoaXMuc2V0VmFsdWU9dGhpcy5TZXR0ZXJCeUJpbmRpbmdUeXBlQW5kVmVyc2lvbmluZ1tsXVtzXX11bmJpbmQoKXt0aGlzLm5vZGU9bnVsbCx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfX07Q3IuQ29tcG9zaXRlPWZodDtDci5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M307Q3IucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn07Q3IucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W0NyLnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LENyLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsQ3IucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XTtDci5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbQ3IucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0NyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLENyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxDci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV07dmFyIEJVPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy51dWlkPU5sKCksdGhpcy5fb2JqZWN0cz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLHRoaXMubkNhY2hlZE9iamVjdHNfPTA7bGV0IHQ9e307dGhpcy5faW5kaWNlc0J5VVVJRD10O2ZvcihsZXQgbj0wLGk9YXJndW1lbnRzLmxlbmd0aDtuIT09aTsrK24pdFthcmd1bWVudHNbbl0udXVpZF09bjt0aGlzLl9wYXRocz1bXSx0aGlzLl9wYXJzZWRQYXRocz1bXSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9iaW5kaW5nc0luZGljZXNCeVBhdGg9e307bGV0IHI9dGhpczt0aGlzLnN0YXRzPXtvYmplY3RzOntnZXQgdG90YWwoKXtyZXR1cm4gci5fb2JqZWN0cy5sZW5ndGh9LGdldCBpblVzZSgpe3JldHVybiB0aGlzLnRvdGFsLXIubkNhY2hlZE9iamVjdHNffX0sZ2V0IGJpbmRpbmdzUGVyT2JqZWN0KCl7cmV0dXJuIHIuX2JpbmRpbmdzLmxlbmd0aH19fWFkZCgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fcGF0aHMsaT10aGlzLl9wYXJzZWRQYXRocyxvPXRoaXMuX2JpbmRpbmdzLGE9by5sZW5ndGgscyxsPXQubGVuZ3RoLGM9dGhpcy5uQ2FjaGVkT2JqZWN0c187Zm9yKGxldCB1PTAsaD1hcmd1bWVudHMubGVuZ3RoO3UhPT1oOysrdSl7bGV0IGY9YXJndW1lbnRzW3VdLHA9Zi51dWlkLGQ9cltwXTtpZihkPT09dm9pZCAwKXtkPWwrKyxyW3BdPWQsdC5wdXNoKGYpO2ZvcihsZXQgZz0wLF89YTtnIT09XzsrK2cpb1tnXS5wdXNoKG5ldyBDcihmLG5bZ10saVtnXSkpfWVsc2UgaWYoZDxjKXtzPXRbZF07bGV0IGc9LS1jLF89dFtnXTtyW18udXVpZF09ZCx0W2RdPV8scltwXT1nLHRbZ109Zjtmb3IobGV0IHk9MCx4PWE7eSE9PXg7Kyt5KXtsZXQgYj1vW3ldLFM9YltnXSxDPWJbZF07YltkXT1TLEM9PT12b2lkIDAmJihDPW5ldyBDcihmLG5beV0saVt5XSkpLGJbZ109Q319ZWxzZSB0W2RdIT09cyYmY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uT2JqZWN0R3JvdXA6IERpZmZlcmVudCBvYmplY3RzIHdpdGggdGhlIHNhbWUgVVVJRCBkZXRlY3RlZC4gQ2xlYW4gdGhlIGNhY2hlcyBvciByZWNyZWF0ZSB5b3VyIGluZnJhc3RydWN0dXJlIHdoZW4gcmVsb2FkaW5nIHNjZW5lcy4iKX10aGlzLm5DYWNoZWRPYmplY3RzXz1jfXJlbW92ZSgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aCxvPXRoaXMubkNhY2hlZE9iamVjdHNfO2ZvcihsZXQgYT0wLHM9YXJndW1lbnRzLmxlbmd0aDthIT09czsrK2Epe2xldCBsPWFyZ3VtZW50c1thXSxjPWwudXVpZCx1PXJbY107aWYodSE9PXZvaWQgMCYmdT49byl7bGV0IGg9bysrLGY9dFtoXTtyW2YudXVpZF09dSx0W3VdPWYscltjXT1oLHRbaF09bDtmb3IobGV0IHA9MCxkPWk7cCE9PWQ7KytwKXtsZXQgZz1uW3BdLF89Z1toXSx5PWdbdV07Z1t1XT1fLGdbaF09eX19fXRoaXMubkNhY2hlZE9iamVjdHNfPW99dW5jYWNoZSgpe2xldCB0PXRoaXMuX29iamVjdHMscj10aGlzLl9pbmRpY2VzQnlVVUlELG49dGhpcy5fYmluZGluZ3MsaT1uLmxlbmd0aCxvPXRoaXMubkNhY2hlZE9iamVjdHNfLGE9dC5sZW5ndGg7Zm9yKGxldCBzPTAsbD1hcmd1bWVudHMubGVuZ3RoO3MhPT1sOysrcyl7bGV0IGM9YXJndW1lbnRzW3NdLHU9Yy51dWlkLGg9clt1XTtpZihoIT09dm9pZCAwKWlmKGRlbGV0ZSByW3VdLGg8byl7bGV0IGY9LS1vLHA9dFtmXSxkPS0tYSxnPXRbZF07cltwLnV1aWRdPWgsdFtoXT1wLHJbZy51dWlkXT1mLHRbZl09Zyx0LnBvcCgpO2ZvcihsZXQgXz0wLHk9aTtfIT09eTsrK18pe2xldCB4PW5bX10sYj14W2ZdLFM9eFtkXTt4W2hdPWIseFtmXT1TLHgucG9wKCl9fWVsc2V7bGV0IGY9LS1hLHA9dFtmXTtmPjAmJihyW3AudXVpZF09aCksdFtoXT1wLHQucG9wKCk7Zm9yKGxldCBkPTAsZz1pO2QhPT1nOysrZCl7bGV0IF89bltkXTtfW2hdPV9bZl0sXy5wb3AoKX19fXRoaXMubkNhY2hlZE9iamVjdHNfPW99c3Vic2NyaWJlXyh0LHIpe2xldCBuPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxpPW5bdF0sbz10aGlzLl9iaW5kaW5ncztpZihpIT09dm9pZCAwKXJldHVybiBvW2ldO2xldCBhPXRoaXMuX3BhdGhzLHM9dGhpcy5fcGFyc2VkUGF0aHMsbD10aGlzLl9vYmplY3RzLGM9bC5sZW5ndGgsdT10aGlzLm5DYWNoZWRPYmplY3RzXyxoPW5ldyBBcnJheShjKTtpPW8ubGVuZ3RoLG5bdF09aSxhLnB1c2godCkscy5wdXNoKHIpLG8ucHVzaChoKTtmb3IobGV0IGY9dSxwPWwubGVuZ3RoO2YhPT1wOysrZil7bGV0IGQ9bFtmXTtoW2ZdPW5ldyBDcihkLHQscil9cmV0dXJuIGh9dW5zdWJzY3JpYmVfKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzSW5kaWNlc0J5UGF0aCxuPXJbdF07aWYobiE9PXZvaWQgMCl7bGV0IGk9dGhpcy5fcGF0aHMsbz10aGlzLl9wYXJzZWRQYXRocyxhPXRoaXMuX2JpbmRpbmdzLHM9YS5sZW5ndGgtMSxsPWFbc10sYz10W3NdO3JbY109bixhW25dPWwsYS5wb3AoKSxvW25dPW9bc10sby5wb3AoKSxpW25dPWlbc10saS5wb3AoKX19fTtCVS5wcm90b3R5cGUuaXNBbmltYXRpb25PYmplY3RHcm91cD0hMDt2YXIgcGh0PWNsYXNze2NvbnN0cnVjdG9yKHQscixuPW51bGwsaT1yLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPXIsdGhpcy5fbG9jYWxSb290PW4sdGhpcy5ibGVuZE1vZGU9aTtsZXQgbz1yLnRyYWNrcyxhPW8ubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9e2VuZGluZ1N0YXJ0OkV2LGVuZGluZ0VuZDpFdn07Zm9yKGxldCBjPTA7YyE9PWE7KytjKXtsZXQgdT1vW2NdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO3NbY109dSx1LnNldHRpbmdzPWx9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1sLHRoaXMuX2ludGVycG9sYW50cz1zLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KGEpLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD1FZmUsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTEsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPTEsdGhpcy53ZWlnaHQ9MSx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9MSx0aGlzLnJlcGV0aXRpb25zPTEvMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy5jbGFtcFdoZW5GaW5pc2hlZD0hMSx0aGlzLnplcm9TbG9wZUF0U3RhcnQ9ITAsdGhpcy56ZXJvU2xvcGVBdEVuZD0hMH1wbGF5KCl7cmV0dXJuIHRoaXMuX21peGVyLl9hY3RpdmF0ZUFjdGlvbih0aGlzKSx0aGlzfXN0b3AoKXtyZXR1cm4gdGhpcy5fbWl4ZXIuX2RlYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpcy5yZXNldCgpfXJlc2V0KCl7cmV0dXJuIHRoaXMucGF1c2VkPSExLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnRpbWU9MCx0aGlzLl9sb29wQ291bnQ9LTEsdGhpcy5fc3RhcnRUaW1lPW51bGwsdGhpcy5zdG9wRmFkaW5nKCkuc3RvcFdhcnBpbmcoKX1pc1J1bm5pbmcoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5wYXVzZWQmJnRoaXMudGltZVNjYWxlIT09MCYmdGhpcy5fc3RhcnRUaW1lPT09bnVsbCYmdGhpcy5fbWl4ZXIuX2lzQWN0aXZlQWN0aW9uKHRoaXMpfWlzU2NoZWR1bGVkKCl7cmV0dXJuIHRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1zdGFydEF0KHQpe3JldHVybiB0aGlzLl9zdGFydFRpbWU9dCx0aGlzfXNldExvb3AodCxyKXtyZXR1cm4gdGhpcy5sb29wPXQsdGhpcy5yZXBldGl0aW9ucz1yLHRoaXN9c2V0RWZmZWN0aXZlV2VpZ2h0KHQpe3JldHVybiB0aGlzLndlaWdodD10LHRoaXMuX2VmZmVjdGl2ZVdlaWdodD10aGlzLmVuYWJsZWQ/dDowLHRoaXMuc3RvcEZhZGluZygpfWdldEVmZmVjdGl2ZVdlaWdodCgpe3JldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHR9ZmFkZUluKHQpe3JldHVybiB0aGlzLl9zY2hlZHVsZUZhZGluZyh0LDAsMSl9ZmFkZU91dCh0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwxLDApfWNyb3NzRmFkZUZyb20odCxyLG4pe2lmKHQuZmFkZU91dChyKSx0aGlzLmZhZGVJbihyKSxuKXtsZXQgaT10aGlzLl9jbGlwLmR1cmF0aW9uLG89dC5fY2xpcC5kdXJhdGlvbixhPW8vaSxzPWkvbzt0LndhcnAoMSxhLHIpLHRoaXMud2FycChzLDEscil9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxyLG4pe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxyLG4pfXN0b3BGYWRpbmcoKXtsZXQgdD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtyZXR1cm4gdCE9PW51bGwmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31zZXRFZmZlY3RpdmVUaW1lU2NhbGUodCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXQsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6dCx0aGlzLnN0b3BXYXJwaW5nKCl9Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX1zZXREdXJhdGlvbih0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi90LHRoaXMuc3RvcFdhcnBpbmcoKX1zeW5jV2l0aCh0KXtyZXR1cm4gdGhpcy50aW1lPXQudGltZSx0aGlzLnRpbWVTY2FsZT10LnRpbWVTY2FsZSx0aGlzLnN0b3BXYXJwaW5nKCl9aGFsdCh0KXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLHQpfXdhcnAodCxyLG4pe2xldCBpPXRoaXMuX21peGVyLG89aS50aW1lLGE9dGhpcy50aW1lU2NhbGUscz10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtzPT09bnVsbCYmKHM9aS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PXMpO2xldCBsPXMucGFyYW1ldGVyUG9zaXRpb25zLGM9cy5zYW1wbGVWYWx1ZXM7cmV0dXJuIGxbMF09byxsWzFdPW8rbixjWzBdPXQvYSxjWzFdPXIvYSx0aGlzfXN0b3BXYXJwaW5nKCl7bGV0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIHQhPT1udWxsJiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQscixuLGkpe2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuX3VwZGF0ZVdlaWdodCh0KTtyZXR1cm59bGV0IG89dGhpcy5fc3RhcnRUaW1lO2lmKG8hPT1udWxsKXtsZXQgbD0odC1vKSpuO2lmKGw8MHx8bj09PTApcmV0dXJuO3RoaXMuX3N0YXJ0VGltZT1udWxsLHI9bipsfXIqPXRoaXMuX3VwZGF0ZVRpbWVTY2FsZSh0KTtsZXQgYT10aGlzLl91cGRhdGVUaW1lKHIpLHM9dGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2lmKHM+MCl7bGV0IGw9dGhpcy5faW50ZXJwb2xhbnRzLGM9dGhpcy5fcHJvcGVydHlCaW5kaW5ncztzd2l0Y2godGhpcy5ibGVuZE1vZGUpe2Nhc2UgUmh0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUoYSksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUocyk7YnJlYWs7Y2FzZSBYVTpkZWZhdWx0OmZvcihsZXQgdT0wLGg9bC5sZW5ndGg7dSE9PWg7Kyt1KWxbdV0uZXZhbHVhdGUoYSksY1t1XS5hY2N1bXVsYXRlKGkscyl9fX1fdXBkYXRlV2VpZ2h0KHQpe2xldCByPTA7aWYodGhpcy5lbmFibGVkKXtyPXRoaXMud2VpZ2h0O2xldCBuPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKG4hPT1udWxsKXtsZXQgaT1uLmV2YWx1YXRlKHQpWzBdO3IqPWksdD5uLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLGk9PT0wJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9cixyfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IHI9MDtpZighdGhpcy5wYXVzZWQpe3I9dGhpcy50aW1lU2NhbGU7bGV0IG49dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7biE9PW51bGwmJihyKj1uLmV2YWx1YXRlKHQpWzBdLHQ+bi5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCkscj09PTA/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9cikpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9cixyfV91cGRhdGVUaW1lKHQpe2xldCByPXRoaXMuX2NsaXAuZHVyYXRpb24sbj10aGlzLmxvb3AsaT10aGlzLnRpbWUrdCxvPXRoaXMuX2xvb3BDb3VudCxhPW49PT1UZmU7aWYodD09PTApcmV0dXJuIG89PT0tMT9pOmEmJihvJjEpPT09MT9yLWk6aTtpZihuPT09TWZlKXtvPT09LTEmJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7dDp7aWYoaT49cilpPXI7ZWxzZSBpZihpPDApaT0wO2Vsc2V7dGhpcy50aW1lPWk7YnJlYWsgdH10aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSx0aGlzLnRpbWU9aSx0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ8MD8tMToxfSl9fWVsc2V7aWYobz09PS0xJiYodD49MD8obz0wLHRoaXMuX3NldEVuZGluZ3MoITAsdGhpcy5yZXBldGl0aW9ucz09PTAsYSkpOnRoaXMuX3NldEVuZGluZ3ModGhpcy5yZXBldGl0aW9ucz09PTAsITAsYSkpLGk+PXJ8fGk8MCl7bGV0IHM9TWF0aC5mbG9vcihpL3IpO2ktPXIqcyxvKz1NYXRoLmFicyhzKTtsZXQgbD10aGlzLnJlcGV0aXRpb25zLW87aWYobDw9MCl0aGlzLmNsYW1wV2hlbkZpbmlzaGVkP3RoaXMucGF1c2VkPSEwOnRoaXMuZW5hYmxlZD0hMSxpPXQ+MD9yOjAsdGhpcy50aW1lPWksdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToiZmluaXNoZWQiLGFjdGlvbjp0aGlzLGRpcmVjdGlvbjp0PjA/MTotMX0pO2Vsc2V7aWYobD09PTEpe2xldCBjPXQ8MDt0aGlzLl9zZXRFbmRpbmdzKGMsIWMsYSl9ZWxzZSB0aGlzLl9zZXRFbmRpbmdzKCExLCExLGEpO3RoaXMuX2xvb3BDb3VudD1vLHRoaXMudGltZT1pLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6Imxvb3AiLGFjdGlvbjp0aGlzLGxvb3BEZWx0YTpzfSl9fWVsc2UgdGhpcy50aW1lPWk7aWYoYSYmKG8mMSk9PT0xKXJldHVybiByLWl9cmV0dXJuIGl9X3NldEVuZGluZ3ModCxyLG4pe2xldCBpPXRoaXMuX2ludGVycG9sYW50U2V0dGluZ3M7bj8oaS5lbmRpbmdTdGFydD1UdixpLmVuZGluZ0VuZD1Udik6KHQ/aS5lbmRpbmdTdGFydD10aGlzLnplcm9TbG9wZUF0U3RhcnQ/VHY6RXY6aS5lbmRpbmdTdGFydD1aUCxyP2kuZW5kaW5nRW5kPXRoaXMuemVyb1Nsb3BlQXRFbmQ/VHY6RXY6aS5lbmRpbmdFbmQ9WlApfV9zY2hlZHVsZUZhZGluZyh0LHIsbil7bGV0IGk9dGhpcy5fbWl4ZXIsbz1pLnRpbWUsYT10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDthPT09bnVsbCYmKGE9aS5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PWEpO2xldCBzPWEucGFyYW1ldGVyUG9zaXRpb25zLGw9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIHNbMF09byxsWzBdPXIsc1sxXT1vK3QsbFsxXT1uLHRoaXN9fSxIVT1jbGFzcyBleHRlbmRzIFVze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fcm9vdD10LHRoaXMuX2luaXRNZW1vcnlNYW5hZ2VyKCksdGhpcy5fYWNjdUluZGV4PTAsdGhpcy50aW1lPTAsdGhpcy50aW1lU2NhbGU9MX1fYmluZEFjdGlvbih0LHIpe2xldCBuPXQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCxpPXQuX2NsaXAudHJhY2tzLG89aS5sZW5ndGgsYT10Ll9wcm9wZXJ0eUJpbmRpbmdzLHM9dC5faW50ZXJwb2xhbnRzLGw9bi51dWlkLGM9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHU9Y1tsXTt1PT09dm9pZCAwJiYodT17fSxjW2xdPXUpO2ZvcihsZXQgaD0wO2ghPT1vOysraCl7bGV0IGY9aVtoXSxwPWYubmFtZSxkPXVbcF07aWYoZCE9PXZvaWQgMCkrK2QucmVmZXJlbmNlQ291bnQsYVtoXT1kO2Vsc2V7aWYoZD1hW2hdLGQhPT12b2lkIDApe2QuX2NhY2hlSW5kZXg9PT1udWxsJiYoKytkLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhkLGwscCkpO2NvbnRpbnVlfWxldCBnPXImJnIuX3Byb3BlcnR5QmluZGluZ3NbaF0uYmluZGluZy5wYXJzZWRQYXRoO2Q9bmV3IEZVKENyLmNyZWF0ZShuLHAsZyksZi5WYWx1ZVR5cGVOYW1lLGYuZ2V0VmFsdWVTaXplKCkpLCsrZC5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZCxsLHApLGFbaF09ZH1zW2hdLnJlc3VsdEJ1ZmZlcj1kLmJ1ZmZlcn19X2FjdGl2YXRlQWN0aW9uKHQpe2lmKCF0aGlzLl9pc0FjdGl2ZUFjdGlvbih0KSl7aWYodC5fY2FjaGVJbmRleD09PW51bGwpe2xldCBuPSh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWQsaT10Ll9jbGlwLnV1aWQsbz10aGlzLl9hY3Rpb25zQnlDbGlwW2ldO3RoaXMuX2JpbmRBY3Rpb24odCxvJiZvLmtub3duQWN0aW9uc1swXSksdGhpcy5fYWRkSW5hY3RpdmVBY3Rpb24odCxpLG4pfWxldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07by51c2VDb3VudCsrPT09MCYmKHRoaXMuX2xlbmRCaW5kaW5nKG8pLG8uc2F2ZU9yaWdpbmFsU3RhdGUoKSl9dGhpcy5fbGVuZEFjdGlvbih0KX19X2RlYWN0aXZhdGVBY3Rpb24odCl7aWYodGhpcy5faXNBY3RpdmVBY3Rpb24odCkpe2xldCByPXQuX3Byb3BlcnR5QmluZGluZ3M7Zm9yKGxldCBuPTAsaT1yLmxlbmd0aDtuIT09aTsrK24pe2xldCBvPXJbbl07LS1vLnVzZUNvdW50PT09MCYmKG8ucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcobykpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKHQpfX1faW5pdE1lbW9yeU1hbmFnZXIoKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2xldCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtsZXQgcj10Ll9jYWNoZUluZGV4O3JldHVybiByIT09bnVsbCYmcjx0aGlzLl9uQWN0aXZlQWN0aW9uc31fYWRkSW5hY3RpdmVBY3Rpb24odCxyLG4pe2xldCBpPXRoaXMuX2FjdGlvbnMsbz10aGlzLl9hY3Rpb25zQnlDbGlwLGE9b1tyXTtpZihhPT09dm9pZCAwKWE9e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsb1tyXT1hO2Vsc2V7bGV0IHM9YS5rbm93bkFjdGlvbnM7dC5fYnlDbGlwQ2FjaGVJbmRleD1zLmxlbmd0aCxzLnB1c2godCl9dC5fY2FjaGVJbmRleD1pLmxlbmd0aCxpLnB1c2godCksYS5hY3Rpb25CeVJvb3Rbbl09dH1fcmVtb3ZlSW5hY3RpdmVBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXJbci5sZW5ndGgtMV0saT10Ll9jYWNoZUluZGV4O24uX2NhY2hlSW5kZXg9aSxyW2ldPW4sci5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7bGV0IG89dC5fY2xpcC51dWlkLGE9dGhpcy5fYWN0aW9uc0J5Q2xpcCxzPWFbb10sbD1zLmtub3duQWN0aW9ucyxjPWxbbC5sZW5ndGgtMV0sdT10Ll9ieUNsaXBDYWNoZUluZGV4O2MuX2J5Q2xpcENhY2hlSW5kZXg9dSxsW3VdPWMsbC5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGw7bGV0IGg9cy5hY3Rpb25CeVJvb3QsZj0odC5fbG9jYWxSb290fHx0aGlzLl9yb290KS51dWlkO2RlbGV0ZSBoW2ZdLGwubGVuZ3RoPT09MCYmZGVsZXRlIGFbb10sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KXtsZXQgcj10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgbj0wLGk9ci5sZW5ndGg7biE9PWk7KytuKXtsZXQgbz1yW25dOy0tby5yZWZlcmVuY2VDb3VudD09PTAmJnRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhvKX19X2xlbmRBY3Rpb24odCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQuX2NhY2hlSW5kZXgsaT10aGlzLl9uQWN0aXZlQWN0aW9ucysrLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X3Rha2VCYWNrQWN0aW9uKHQpe2xldCByPXRoaXMuX2FjdGlvbnMsbj10Ll9jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQWN0aW9ucyxvPXJbaV07dC5fY2FjaGVJbmRleD1pLHJbaV09dCxvLl9jYWNoZUluZGV4PW4scltuXT1vfV9hZGRJbmFjdGl2ZUJpbmRpbmcodCxyLG4pe2xldCBpPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSxvPXRoaXMuX2JpbmRpbmdzLGE9aVtyXTthPT09dm9pZCAwJiYoYT17fSxpW3JdPWEpLGFbbl09dCx0Ll9jYWNoZUluZGV4PW8ubGVuZ3RoLG8ucHVzaCh0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzLG49dC5iaW5kaW5nLGk9bi5yb290Tm9kZS51dWlkLG89bi5wYXRoLGE9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLHM9YVtpXSxsPXJbci5sZW5ndGgtMV0sYz10Ll9jYWNoZUluZGV4O2wuX2NhY2hlSW5kZXg9YyxyW2NdPWwsci5wb3AoKSxkZWxldGUgc1tvXSxPYmplY3Qua2V5cyhzKS5sZW5ndGg9PT0wJiZkZWxldGUgYVtpXX1fbGVuZEJpbmRpbmcodCl7bGV0IHI9dGhpcy5fYmluZGluZ3Msbj10Ll9jYWNoZUluZGV4LGk9dGhpcy5fbkFjdGl2ZUJpbmRpbmdzKyssbz1yW2ldO3QuX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fY2FjaGVJbmRleD1uLHJbbl09b31fdGFrZUJhY2tCaW5kaW5nKHQpe2xldCByPXRoaXMuX2JpbmRpbmdzLG49dC5fY2FjaGVJbmRleCxpPS0tdGhpcy5fbkFjdGl2ZUJpbmRpbmdzLG89cltpXTt0Ll9jYWNoZUluZGV4PWkscltpXT10LG8uX2NhY2hlSW5kZXg9bixyW25dPW99X2xlbmRDb250cm9sSW50ZXJwb2xhbnQoKXtsZXQgdD10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLHI9dGhpcy5fbkFjdGl2ZUNvbnRyb2xJbnRlcnBvbGFudHMrKyxuPXRbcl07cmV0dXJuIG49PT12b2lkIDAmJihuPW5ldyB3NihuZXcgRmxvYXQzMkFycmF5KDIpLG5ldyBGbG9hdDMyQXJyYXkoMiksMSx0aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyKSxuLl9fY2FjaGVJbmRleD1yLHRbcl09biksbn1fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCl7bGV0IHI9dGhpcy5fY29udHJvbEludGVycG9sYW50cyxuPXQuX19jYWNoZUluZGV4LGk9LS10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cyxvPXJbaV07dC5fX2NhY2hlSW5kZXg9aSxyW2ldPXQsby5fX2NhY2hlSW5kZXg9bixyW25dPW99Y2xpcEFjdGlvbih0LHIsbil7bGV0IGk9cnx8dGhpcy5fcm9vdCxvPWkudXVpZCxhPXR5cGVvZiB0PT0ic3RyaW5nIj9Rdi5maW5kQnlOYW1lKGksdCk6dCxzPWEhPT1udWxsP2EudXVpZDp0LGw9dGhpcy5fYWN0aW9uc0J5Q2xpcFtzXSxjPW51bGw7aWYobj09PXZvaWQgMCYmKGEhPT1udWxsP249YS5ibGVuZE1vZGU6bj1YVSksbCE9PXZvaWQgMCl7bGV0IGg9bC5hY3Rpb25CeVJvb3Rbb107aWYoaCE9PXZvaWQgMCYmaC5ibGVuZE1vZGU9PT1uKXJldHVybiBoO2M9bC5rbm93bkFjdGlvbnNbMF0sYT09PW51bGwmJihhPWMuX2NsaXApfWlmKGE9PT1udWxsKXJldHVybiBudWxsO2xldCB1PW5ldyBwaHQodGhpcyxhLHIsbik7cmV0dXJuIHRoaXMuX2JpbmRBY3Rpb24odSxjKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih1LHMsbyksdX1leGlzdGluZ0FjdGlvbih0LHIpe2xldCBuPXJ8fHRoaXMuX3Jvb3QsaT1uLnV1aWQsbz10eXBlb2YgdD09InN0cmluZyI/UXYuZmluZEJ5TmFtZShuLHQpOnQsYT1vP28udXVpZDp0LHM9dGhpcy5fYWN0aW9uc0J5Q2xpcFthXTtyZXR1cm4gcyE9PXZvaWQgMCYmcy5hY3Rpb25CeVJvb3RbaV18fG51bGx9c3RvcEFsbEFjdGlvbigpe2xldCB0PXRoaXMuX2FjdGlvbnMscj10aGlzLl9uQWN0aXZlQWN0aW9ucztmb3IobGV0IG49ci0xO24+PTA7LS1uKXRbbl0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXt0Kj10aGlzLnRpbWVTY2FsZTtsZXQgcj10aGlzLl9hY3Rpb25zLG49dGhpcy5fbkFjdGl2ZUFjdGlvbnMsaT10aGlzLnRpbWUrPXQsbz1NYXRoLnNpZ24odCksYT10aGlzLl9hY2N1SW5kZXhePTE7Zm9yKGxldCBjPTA7YyE9PW47KytjKXJbY10uX3VwZGF0ZShpLHQsbyxhKTtsZXQgcz10aGlzLl9iaW5kaW5ncyxsPXRoaXMuX25BY3RpdmVCaW5kaW5ncztmb3IobGV0IGM9MDtjIT09bDsrK2Mpc1tjXS5hcHBseShhKTtyZXR1cm4gdGhpc31zZXRUaW1lKHQpe3RoaXMudGltZT0wO2ZvcihsZXQgcj0wO3I8dGhpcy5fYWN0aW9ucy5sZW5ndGg7cisrKXRoaXMuX2FjdGlvbnNbcl0udGltZT0wO3JldHVybiB0aGlzLnVwZGF0ZSh0KX1nZXRSb290KCl7cmV0dXJuIHRoaXMuX3Jvb3R9dW5jYWNoZUNsaXAodCl7bGV0IHI9dGhpcy5fYWN0aW9ucyxuPXQudXVpZCxpPXRoaXMuX2FjdGlvbnNCeUNsaXAsbz1pW25dO2lmKG8hPT12b2lkIDApe2xldCBhPW8ua25vd25BY3Rpb25zO2ZvcihsZXQgcz0wLGw9YS5sZW5ndGg7cyE9PWw7KytzKXtsZXQgYz1hW3NdO3RoaXMuX2RlYWN0aXZhdGVBY3Rpb24oYyk7bGV0IHU9Yy5fY2FjaGVJbmRleCxoPXJbci5sZW5ndGgtMV07Yy5fY2FjaGVJbmRleD1udWxsLGMuX2J5Q2xpcENhY2hlSW5kZXg9bnVsbCxoLl9jYWNoZUluZGV4PXUsclt1XT1oLHIucG9wKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbihjKX1kZWxldGUgaVtuXX19dW5jYWNoZVJvb3QodCl7bGV0IHI9dC51dWlkLG49dGhpcy5fYWN0aW9uc0J5Q2xpcDtmb3IobGV0IGEgaW4gbil7bGV0IHM9blthXS5hY3Rpb25CeVJvb3QsbD1zW3JdO2whPT12b2lkIDAmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgaT10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsbz1pW3JdO2lmKG8hPT12b2lkIDApZm9yKGxldCBhIGluIG8pe2xldCBzPW9bYV07cy5yZXN0b3JlT3JpZ2luYWxTdGF0ZSgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZyhzKX19dW5jYWNoZUFjdGlvbih0LHIpe2xldCBuPXRoaXMuZXhpc3RpbmdBY3Rpb24odCxyKTtuIT09bnVsbCYmKHRoaXMuX2RlYWN0aXZhdGVBY3Rpb24obiksdGhpcy5fcmVtb3ZlSW5hY3RpdmVBY3Rpb24obikpfX07SFUucHJvdG90eXBlLl9jb250cm9sSW50ZXJwb2xhbnRzUmVzdWx0QnVmZmVyPW5ldyBGbG9hdDMyQXJyYXkoMSk7dmFyIGdNPWNsYXNze2NvbnN0cnVjdG9yKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogVHlwZSBwYXJhbWV0ZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4iKSx0PWFyZ3VtZW50c1sxXSksdGhpcy52YWx1ZT10fWNsb25lKCl7cmV0dXJuIG5ldyBnTSh0aGlzLnZhbHVlLmNsb25lPT09dm9pZCAwP3RoaXMudmFsdWU6dGhpcy52YWx1ZS5jbG9uZSgpKX19LFZVPWNsYXNzIGV4dGVuZHMgZW17Y29uc3RydWN0b3IodCxyLG49MSl7c3VwZXIodCxyKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9bn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgcj1zdXBlci5jbG9uZSh0KTtyZXR1cm4gci5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxyfXRvSlNPTih0KXtsZXQgcj1zdXBlci50b0pTT04odCk7cmV0dXJuIHIuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxyLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLHJ9fTtWVS5wcm90b3R5cGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMDt2YXIgVVU9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG4saSxvKXt0aGlzLmJ1ZmZlcj10LHRoaXMudHlwZT1yLHRoaXMuaXRlbVNpemU9bix0aGlzLmVsZW1lbnRTaXplPWksdGhpcy5jb3VudD1vLHRoaXMudmVyc2lvbj0wfXNldCBuZWVkc1VwZGF0ZSh0KXt0PT09ITAmJnRoaXMudmVyc2lvbisrfXNldEJ1ZmZlcih0KXtyZXR1cm4gdGhpcy5idWZmZXI9dCx0aGlzfXNldFR5cGUodCxyKXtyZXR1cm4gdGhpcy50eXBlPXQsdGhpcy5lbGVtZW50U2l6ZT1yLHRoaXN9c2V0SXRlbVNpemUodCl7cmV0dXJuIHRoaXMuaXRlbVNpemU9dCx0aGlzfXNldENvdW50KHQpe3JldHVybiB0aGlzLmNvdW50PXQsdGhpc319O1VVLnByb3RvdHlwZS5pc0dMQnVmZmVyQXR0cmlidXRlPSEwO3ZhciBkaHQ9Y2xhc3N7Y29uc3RydWN0b3IodCxyLG49MCxpPTEvMCl7dGhpcy5yYXk9bmV3IEpmKHQsciksdGhpcy5uZWFyPW4sdGhpcy5mYXI9aSx0aGlzLmNhbWVyYT1udWxsLHRoaXMubGF5ZXJzPW5ldyBYMyx0aGlzLnBhcmFtcz17TWVzaDp7fSxMaW5lOnt0aHJlc2hvbGQ6MX0sTE9EOnt9LFBvaW50czp7dGhyZXNob2xkOjF9LFNwcml0ZTp7fX19c2V0KHQscil7dGhpcy5yYXkuc2V0KHQscil9c2V0RnJvbUNhbWVyYSh0LHIpe3ImJnIuaXNQZXJzcGVjdGl2ZUNhbWVyYT8odGhpcy5yYXkub3JpZ2luLnNldEZyb21NYXRyaXhQb3NpdGlvbihyLm1hdHJpeFdvcmxkKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KHQueCx0LnksLjUpLnVucHJvamVjdChyKS5zdWIodGhpcy5yYXkub3JpZ2luKS5ub3JtYWxpemUoKSx0aGlzLmNhbWVyYT1yKTpyJiZyLmlzT3J0aG9ncmFwaGljQ2FtZXJhPyh0aGlzLnJheS5vcmlnaW4uc2V0KHQueCx0LnksKHIubmVhcityLmZhcikvKHIubmVhci1yLmZhcikpLnVucHJvamVjdChyKSx0aGlzLnJheS5kaXJlY3Rpb24uc2V0KDAsMCwtMSkudHJhbnNmb3JtRGlyZWN0aW9uKHIubWF0cml4V29ybGQpLHRoaXMuY2FtZXJhPXIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLlJheWNhc3RlcjogVW5zdXBwb3J0ZWQgY2FtZXJhIHR5cGU6ICIrci50eXBlKX1pbnRlcnNlY3RPYmplY3QodCxyPSEwLG49W10pe3JldHVybiBtaHQodCx0aGlzLG4sciksbi5zb3J0KFRoZSksbn1pbnRlcnNlY3RPYmplY3RzKHQscj0hMCxuPVtdKXtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspbWh0KHRbaV0sdGhpcyxuLHIpO3JldHVybiBuLnNvcnQoVGhlKSxufX07ZnVuY3Rpb24gVGhlKGUsdCl7cmV0dXJuIGUuZGlzdGFuY2UtdC5kaXN0YW5jZX1mdW5jdGlvbiBtaHQoZSx0LHIsbil7aWYoZS5sYXllcnMudGVzdCh0LmxheWVycykmJmUucmF5Y2FzdCh0LHIpLG49PT0hMCl7bGV0IGk9ZS5jaGlsZHJlbjtmb3IobGV0IG89MCxhPWkubGVuZ3RoO288YTtvKyspbWh0KGlbb10sdCxyLCEwKX19dmFyIF9NPWNsYXNze2NvbnN0cnVjdG9yKHQ9MSxyPTAsbj0wKXtyZXR1cm4gdGhpcy5yYWRpdXM9dCx0aGlzLnBoaT1yLHRoaXMudGhldGE9bix0aGlzfXNldCh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy5waGk9cix0aGlzLnRoZXRhPW4sdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzLnBoaT10LnBoaSx0aGlzLnRoZXRhPXQudGhldGEsdGhpc31tYWtlU2FmZSgpe3JldHVybiB0aGlzLnBoaT1NYXRoLm1heCgxZS02LE1hdGgubWluKE1hdGguUEktMWUtNix0aGlzLnBoaSkpLHRoaXN9c2V0RnJvbVZlY3RvcjModCl7cmV0dXJuIHRoaXMuc2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh0LngsdC55LHQueil9c2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPU1hdGguc3FydCh0KnQrcipyK24qbiksdGhpcy5yYWRpdXM9PT0wPyh0aGlzLnRoZXRhPTAsdGhpcy5waGk9MCk6KHRoaXMudGhldGE9TWF0aC5hdGFuMih0LG4pLHRoaXMucGhpPU1hdGguYWNvcyhabyhyL3RoaXMucmFkaXVzLC0xLDEpKSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcigpLmNvcHkodGhpcyl9fSxnaHQ9Y2xhc3N7Y29uc3RydWN0b3IodD0xLHI9MCxuPTApe3JldHVybiB0aGlzLnJhZGl1cz10LHRoaXMudGhldGE9cix0aGlzLnk9bix0aGlzfXNldCh0LHIsbil7cmV0dXJuIHRoaXMucmFkaXVzPXQsdGhpcy50aGV0YT1yLHRoaXMueT1uLHRoaXN9Y29weSh0KXtyZXR1cm4gdGhpcy5yYWRpdXM9dC5yYWRpdXMsdGhpcy50aGV0YT10LnRoZXRhLHRoaXMueT10LnksdGhpc31zZXRGcm9tVmVjdG9yMyh0KXtyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQueCx0LnksdC56KX1zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHQscixuKXtyZXR1cm4gdGhpcy5yYWRpdXM9TWF0aC5zcXJ0KHQqdCtuKm4pLHRoaXMudGhldGE9TWF0aC5hdGFuMih0LG4pLHRoaXMueT1yLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sQ2hlPW5ldyBMdCwkMD1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBMdCgxLzAsMS8wKSxyPW5ldyBMdCgtMS8wLC0xLzApKXt0aGlzLm1pbj10LHRoaXMubWF4PXJ9c2V0KHQscil7cmV0dXJuIHRoaXMubWluLmNvcHkodCksdGhpcy5tYXguY29weShyKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspdGhpcy5leHBhbmRCeVBvaW50KHRbcl0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQscil7bGV0IG49Q2hlLmNvcHkocikubXVsdGlwbHlTY2FsYXIoLjUpO3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLnN1YihuKSx0aGlzLm1heC5jb3B5KHQpLmFkZChuKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKCkuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQscil7cmV0dXJuIHIuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LHIpe3JldHVybiByLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gQ2hlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTskMC5wcm90b3R5cGUuaXNCb3gyPSEwO3ZhciBBaGU9bmV3IGosV1Y9bmV3IGoscVU9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaixyPW5ldyBqKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9cn1zZXQodCxyKXtyZXR1cm4gdGhpcy5zdGFydC5jb3B5KHQpLHRoaXMuZW5kLmNvcHkociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLnN0YXJ0LmNvcHkodC5zdGFydCksdGhpcy5lbmQuY29weSh0LmVuZCksdGhpc31nZXRDZW50ZXIodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLnN0YXJ0LHRoaXMuZW5kKS5tdWx0aXBseVNjYWxhciguNSl9ZGVsdGEodCl7cmV0dXJuIHQuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KX1kaXN0YW5jZVNxKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5lbmQpfWRpc3RhbmNlKCl7cmV0dXJuIHRoaXMuc3RhcnQuZGlzdGFuY2VUbyh0aGlzLmVuZCl9YXQodCxyKXtyZXR1cm4gdGhpcy5kZWx0YShyKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5zdGFydCl9Y2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LHIpe0FoZS5zdWJWZWN0b3JzKHQsdGhpcy5zdGFydCksV1Yuc3ViVmVjdG9ycyh0aGlzLmVuZCx0aGlzLnN0YXJ0KTtsZXQgbj1XVi5kb3QoV1YpLG89V1YuZG90KEFoZSkvbjtyZXR1cm4gciYmKG89Wm8obywwLDEpKSxvfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxyLG4pe2xldCBpPXRoaXMuY2xvc2VzdFBvaW50VG9Qb2ludFBhcmFtZXRlcih0LHIpO3JldHVybiB0aGlzLmRlbHRhKG4pLm11bHRpcGx5U2NhbGFyKGkpLmFkZCh0aGlzLnN0YXJ0KX1hcHBseU1hdHJpeDQodCl7cmV0dXJuIHRoaXMuc3RhcnQuYXBwbHlNYXRyaXg0KHQpLHRoaXMuZW5kLmFwcGx5TWF0cml4NCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5zdGFydC5lcXVhbHModGhpcy5zdGFydCkmJnQuZW5kLmVxdWFscyh0aGlzLmVuZCl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKS5jb3B5KHRoaXMpfX0sUGhlPW5ldyBqLF9odD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscil7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9cjtsZXQgbj1uZXcgUGUsaT1bMCwwLDAsMCwwLDEsMCwwLDAsMSwwLDEsMCwwLDAsLTEsMCwxLDAsMCwwLDAsMSwxLDAsMCwwLDAsLTEsMV07Zm9yKGxldCBhPTAscz0xLGw9MzI7YTxsO2ErKyxzKyspe2xldCBjPWEvbCpNYXRoLlBJKjIsdT1zL2wqTWF0aC5QSSoyO2kucHVzaChNYXRoLmNvcyhjKSxNYXRoLnNpbihjKSwxLE1hdGguY29zKHUpLE1hdGguc2luKHUpLDEpfW4uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpO2xldCBvPW5ldyBHaSh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmNvbmU9bmV3IEFhKG4sbyksdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNvbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMuY29uZS5tYXRlcmlhbC5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpO2xldCB0PXRoaXMubGlnaHQuZGlzdGFuY2U/dGhpcy5saWdodC5kaXN0YW5jZToxZTMscj10Kk1hdGgudGFuKHRoaXMubGlnaHQuYW5nbGUpO3RoaXMuY29uZS5zY2FsZS5zZXQocixyLHQpLFBoZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC50YXJnZXQubWF0cml4V29ybGQpLHRoaXMuY29uZS5sb29rQXQoUGhlKSx0aGlzLmNvbG9yIT09dm9pZCAwP3RoaXMuY29uZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5jb25lLm1hdGVyaWFsLmNvbG9yLmNvcHkodGhpcy5saWdodC5jb2xvcil9fSxPMD1uZXcgaixZVj1uZXcgTWUsd3V0PW5ldyBNZSxHVT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQpe2xldCByPXRwZSh0KSxuPW5ldyBQZSxpPVtdLG89W10sYT1uZXcgbmUoMCwwLDEpLHM9bmV3IG5lKDAsMSwwKTtmb3IobGV0IGM9MDtjPHIubGVuZ3RoO2MrKyl7bGV0IHU9cltjXTt1LnBhcmVudCYmdS5wYXJlbnQuaXNCb25lJiYoaS5wdXNoKDAsMCwwKSxpLnB1c2goMCwwLDApLG8ucHVzaChhLnIsYS5nLGEuYiksby5wdXNoKHMucixzLmcscy5iKSl9bi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUoaSwzKSksbi5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobywzKSk7bGV0IGw9bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITEsdG9uZU1hcHBlZDohMSx0cmFuc3BhcmVudDohMH0pO3N1cGVyKG4sbCksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9cix0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgcj10aGlzLmJvbmVzLG49dGhpcy5nZW9tZXRyeSxpPW4uZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO3d1dC5jb3B5KHRoaXMucm9vdC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7Zm9yKGxldCBvPTAsYT0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO3MucGFyZW50JiZzLnBhcmVudC5pc0JvbmUmJihZVi5tdWx0aXBseU1hdHJpY2VzKHd1dCxzLm1hdHJpeFdvcmxkKSxPMC5zZXRGcm9tTWF0cml4UG9zaXRpb24oWVYpLGkuc2V0WFlaKGEsTzAueCxPMC55LE8wLnopLFlWLm11bHRpcGx5TWF0cmljZXMod3V0LHMucGFyZW50Lm1hdHJpeFdvcmxkKSxPMC5zZXRGcm9tTWF0cml4UG9zaXRpb24oWVYpLGkuc2V0WFlaKGErMSxPMC54LE8wLnksTzAueiksYSs9Mil9bi5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITAsc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fTtmdW5jdGlvbiB0cGUoZSl7bGV0IHQ9W107ZSYmZS5pc0JvbmUmJnQucHVzaChlKTtmb3IobGV0IHI9MDtyPGUuY2hpbGRyZW4ubGVuZ3RoO3IrKyl0LnB1c2guYXBwbHkodCx0cGUoZS5jaGlsZHJlbltyXSkpO3JldHVybiB0fXZhciB5aHQ9Y2xhc3MgZXh0ZW5kcyBlaXtjb25zdHJ1Y3Rvcih0LHIsbil7bGV0IGk9bmV3IGowKHIsNCwyKSxvPW5ldyBzaCh7d2lyZWZyYW1lOiEwLGZvZzohMSx0b25lTWFwcGVkOiExfSk7c3VwZXIoaSxvKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMuY29sb3I9bix0aGlzLnR5cGU9IlBvaW50TGlnaHRIZWxwZXIiLHRoaXMubWF0cml4PXRoaXMubGlnaHQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9ZGlzcG9zZSgpe3RoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe3RoaXMuY29sb3IhPT12b2lkIDA/dGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik6dGhpcy5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpfX0sdjByPW5ldyBqLEloZT1uZXcgbmUsTGhlPW5ldyBuZSx2aHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0LHIsbil7c3VwZXIoKSx0aGlzLmxpZ2h0PXQsdGhpcy5saWdodC51cGRhdGVNYXRyaXhXb3JsZCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuY29sb3I9bjtsZXQgaT1uZXcgVzAocik7aS5yb3RhdGVZKE1hdGguUEkqLjUpLHRoaXMubWF0ZXJpYWw9bmV3IHNoKHt3aXJlZnJhbWU6ITAsZm9nOiExLHRvbmVNYXBwZWQ6ITF9KSx0aGlzLmNvbG9yPT09dm9pZCAwJiYodGhpcy5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITApO2xldCBvPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpLGE9bmV3IEZsb2F0MzJBcnJheShvLmNvdW50KjMpO2kuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IEplKGEsMykpLHRoaXMuYWRkKG5ldyBlaShpLHRoaXMubWF0ZXJpYWwpKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmNoaWxkcmVuWzBdLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLmNoaWxkcmVuWzBdLm1hdGVyaWFsLmRpc3Bvc2UoKX11cGRhdGUoKXtsZXQgdD10aGlzLmNoaWxkcmVuWzBdO2lmKHRoaXMuY29sb3IhPT12b2lkIDApdGhpcy5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvcik7ZWxzZXtsZXQgcj10Lmdlb21ldHJ5LmdldEF0dHJpYnV0ZSgiY29sb3IiKTtJaGUuY29weSh0aGlzLmxpZ2h0LmNvbG9yKSxMaGUuY29weSh0aGlzLmxpZ2h0Lmdyb3VuZENvbG9yKTtmb3IobGV0IG49MCxpPXIuY291bnQ7bjxpO24rKyl7bGV0IG89bjxpLzI/SWhlOkxoZTtyLnNldFhZWihuLG8ucixvLmcsby5iKX1yLm5lZWRzVXBkYXRlPSEwfXQubG9va0F0KHYwci5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCkubmVnYXRlKCkpfX0sV1U9Y2xhc3MgZXh0ZW5kcyBBYXtjb25zdHJ1Y3Rvcih0PTEwLHI9MTAsbj00NDczOTI0LGk9ODk0Nzg0OCl7bj1uZXcgbmUobiksaT1uZXcgbmUoaSk7bGV0IG89ci8yLGE9dC9yLHM9dC8yLGw9W10sYz1bXTtmb3IobGV0IGY9MCxwPTAsZD0tcztmPD1yO2YrKyxkKz1hKXtsLnB1c2goLXMsMCxkLHMsMCxkKSxsLnB1c2goZCwwLC1zLGQsMCxzKTtsZXQgZz1mPT09bz9uOmk7Zy50b0FycmF5KGMscCkscCs9MyxnLnRvQXJyYXkoYyxwKSxwKz0zLGcudG9BcnJheShjLHApLHArPTMsZy50b0FycmF5KGMscCkscCs9M31sZXQgdT1uZXcgUGU7dS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobCwzKSksdS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUoYywzKSk7bGV0IGg9bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pO3N1cGVyKHUsaCksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19LHhodD1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MTAscj0xNixuPTgsaT02NCxvPTQ0NzM5MjQsYT04OTQ3ODQ4KXtvPW5ldyBuZShvKSxhPW5ldyBuZShhKTtsZXQgcz1bXSxsPVtdO2ZvcihsZXQgaD0wO2g8PXI7aCsrKXtsZXQgZj1oL3IqKE1hdGguUEkqMikscD1NYXRoLnNpbihmKSp0LGQ9TWF0aC5jb3MoZikqdDtzLnB1c2goMCwwLDApLHMucHVzaChwLDAsZCk7bGV0IGc9aCYxP286YTtsLnB1c2goZy5yLGcuZyxnLmIpLGwucHVzaChnLnIsZy5nLGcuYil9Zm9yKGxldCBoPTA7aDw9bjtoKyspe2xldCBmPWgmMT9vOmEscD10LXQvbipoO2ZvcihsZXQgZD0wO2Q8aTtkKyspe2xldCBnPWQvaSooTWF0aC5QSSoyKSxfPU1hdGguc2luKGcpKnAseT1NYXRoLmNvcyhnKSpwO3MucHVzaChfLDAseSksbC5wdXNoKGYucixmLmcsZi5iKSxnPShkKzEpL2kqKE1hdGguUEkqMiksXz1NYXRoLnNpbihnKSpwLHk9TWF0aC5jb3MoZykqcCxzLnB1c2goXywwLHkpLGwucHVzaChmLnIsZi5nLGYuYil9fWxldCBjPW5ldyBQZTtjLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShzLDMpKSxjLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyB4ZShsLDMpKTtsZXQgdT1uZXcgR2koe3ZlcnRleENvbG9yczohMCx0b25lTWFwcGVkOiExfSk7c3VwZXIoYyx1KSx0aGlzLnR5cGU9IlBvbGFyR3JpZEhlbHBlciJ9fSxraGU9bmV3IGosalY9bmV3IGosUmhlPW5ldyBqLGJodD1jbGFzcyBleHRlbmRzIG9ye2NvbnN0cnVjdG9yKHQscixuKXtzdXBlcigpLHRoaXMubGlnaHQ9dCx0aGlzLmxpZ2h0LnVwZGF0ZU1hdHJpeFdvcmxkKCksdGhpcy5tYXRyaXg9dC5tYXRyaXhXb3JsZCx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5jb2xvcj1uLHI9PT12b2lkIDAmJihyPTEpO2xldCBpPW5ldyBQZTtpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbLXIsciwwLHIsciwwLHIsLXIsMCwtciwtciwwLC1yLHIsMF0sMykpO2xldCBvPW5ldyBHaSh7Zm9nOiExLHRvbmVNYXBwZWQ6ITF9KTt0aGlzLmxpZ2h0UGxhbmU9bmV3IGNoKGksbyksdGhpcy5hZGQodGhpcy5saWdodFBsYW5lKSxpPW5ldyBQZSxpLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbMCwwLDAsMCwwLDFdLDMpKSx0aGlzLnRhcmdldExpbmU9bmV3IGNoKGksbyksdGhpcy5hZGQodGhpcy50YXJnZXRMaW5lKSx0aGlzLnVwZGF0ZSgpfWRpc3Bvc2UoKXt0aGlzLmxpZ2h0UGxhbmUuZ2VvbWV0cnkuZGlzcG9zZSgpLHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5kaXNwb3NlKCksdGhpcy50YXJnZXRMaW5lLmdlb21ldHJ5LmRpc3Bvc2UoKSx0aGlzLnRhcmdldExpbmUubWF0ZXJpYWwuZGlzcG9zZSgpfXVwZGF0ZSgpe2toZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5saWdodC5tYXRyaXhXb3JsZCksalYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubGlnaHQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxSaGUuc3ViVmVjdG9ycyhqVixraGUpLHRoaXMubGlnaHRQbGFuZS5sb29rQXQoalYpLHRoaXMuY29sb3IhPT12b2lkIDA/KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5zZXQodGhpcy5jb2xvciksdGhpcy50YXJnZXRMaW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0aGlzLmNvbG9yKSk6KHRoaXMubGlnaHRQbGFuZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpLHRoaXMudGFyZ2V0TGluZS5tYXRlcmlhbC5jb2xvci5jb3B5KHRoaXMubGlnaHQuY29sb3IpKSx0aGlzLnRhcmdldExpbmUubG9va0F0KGpWKSx0aGlzLnRhcmdldExpbmUuc2NhbGUuej1SaGUubGVuZ3RoKCl9fSxYVj1uZXcgaix5aT1uZXcgUnYsd2h0PWNsYXNzIGV4dGVuZHMgQWF7Y29uc3RydWN0b3IodCl7bGV0IHI9bmV3IFBlLG49bmV3IEdpKHtjb2xvcjoxNjc3NzIxNSx2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pLGk9W10sbz1bXSxhPXt9LHM9bmV3IG5lKDE2NzU1MjAwKSxsPW5ldyBuZSgxNjcxMTY4MCksYz1uZXcgbmUoNDM3NzUpLHU9bmV3IG5lKDE2Nzc3MjE1KSxoPW5ldyBuZSgzMzU1NDQzKTtmKCJuMSIsIm4yIixzKSxmKCJuMiIsIm40IixzKSxmKCJuNCIsIm4zIixzKSxmKCJuMyIsIm4xIixzKSxmKCJmMSIsImYyIixzKSxmKCJmMiIsImY0IixzKSxmKCJmNCIsImYzIixzKSxmKCJmMyIsImYxIixzKSxmKCJuMSIsImYxIixzKSxmKCJuMiIsImYyIixzKSxmKCJuMyIsImYzIixzKSxmKCJuNCIsImY0IixzKSxmKCJwIiwibjEiLGwpLGYoInAiLCJuMiIsbCksZigicCIsIm4zIixsKSxmKCJwIiwibjQiLGwpLGYoInUxIiwidTIiLGMpLGYoInUyIiwidTMiLGMpLGYoInUzIiwidTEiLGMpLGYoImMiLCJ0Iix1KSxmKCJwIiwiYyIsaCksZigiY24xIiwiY24yIixoKSxmKCJjbjMiLCJjbjQiLGgpLGYoImNmMSIsImNmMiIsaCksZigiY2YzIiwiY2Y0IixoKTtmdW5jdGlvbiBmKGQsZyxfKXtwKGQsXykscChnLF8pfWZ1bmN0aW9uIHAoZCxnKXtpLnB1c2goMCwwLDApLG8ucHVzaChnLnIsZy5nLGcuYiksYVtkXT09PXZvaWQgMCYmKGFbZF09W10pLGFbZF0ucHVzaChpLmxlbmd0aC8zLTEpfXIuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKGksMykpLHIuc2V0QXR0cmlidXRlKCJjb2xvciIsbmV3IHhlKG8sMykpLHN1cGVyKHIsbiksdGhpcy50eXBlPSJDYW1lcmFIZWxwZXIiLHRoaXMuY2FtZXJhPXQsdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCYmdGhpcy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLHRoaXMubWF0cml4PXQubWF0cml4V29ybGQsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMucG9pbnRNYXA9YSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2xldCB0PXRoaXMuZ2VvbWV0cnkscj10aGlzLnBvaW50TWFwLG49MSxpPTE7eWkucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLmNhbWVyYS5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZSksUGkoImMiLHIsdCx5aSwwLDAsLTEpLFBpKCJ0IixyLHQseWksMCwwLDEpLFBpKCJuMSIscix0LHlpLC1uLC1pLC0xKSxQaSgibjIiLHIsdCx5aSxuLC1pLC0xKSxQaSgibjMiLHIsdCx5aSwtbixpLC0xKSxQaSgibjQiLHIsdCx5aSxuLGksLTEpLFBpKCJmMSIscix0LHlpLC1uLC1pLDEpLFBpKCJmMiIscix0LHlpLG4sLWksMSksUGkoImYzIixyLHQseWksLW4saSwxKSxQaSgiZjQiLHIsdCx5aSxuLGksMSksUGkoInUxIixyLHQseWksbiouNyxpKjEuMSwtMSksUGkoInUyIixyLHQseWksLW4qLjcsaSoxLjEsLTEpLFBpKCJ1MyIscix0LHlpLDAsaSoyLC0xKSxQaSgiY2YxIixyLHQseWksLW4sMCwxKSxQaSgiY2YyIixyLHQseWksbiwwLDEpLFBpKCJjZjMiLHIsdCx5aSwwLC1pLDEpLFBpKCJjZjQiLHIsdCx5aSwwLGksMSksUGkoImNuMSIscix0LHlpLC1uLDAsLTEpLFBpKCJjbjIiLHIsdCx5aSxuLDAsLTEpLFBpKCJjbjMiLHIsdCx5aSwwLC1pLC0xKSxQaSgiY240IixyLHQseWksMCxpLC0xKSx0LmdldEF0dHJpYnV0ZSgicG9zaXRpb24iKS5uZWVkc1VwZGF0ZT0hMH1kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9fTtmdW5jdGlvbiBQaShlLHQscixuLGksbyxhKXtYVi5zZXQoaSxvLGEpLnVucHJvamVjdChuKTtsZXQgcz10W2VdO2lmKHMhPT12b2lkIDApe2xldCBsPXIuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO2ZvcihsZXQgYz0wLHU9cy5sZW5ndGg7Yzx1O2MrKylsLnNldFhZWihzW2NdLFhWLngsWFYueSxYVi56KX19dmFyICRWPW5ldyB0YSx5TT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQscj0xNjc3Njk2MCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9bmV3IEZsb2F0MzJBcnJheSg4KjMpLG89bmV3IFBlO28uc2V0SW5kZXgobmV3IEplKG4sMSkpLG8uc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEplKGksMykpLHN1cGVyKG8sbmV3IEdpKHtjb2xvcjpyLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5vYmplY3Q9dCx0aGlzLnR5cGU9IkJveEhlbHBlciIsdGhpcy5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMudXBkYXRlKCl9dXBkYXRlKHQpe2lmKHQhPT12b2lkIDAmJmNvbnNvbGUud2FybigiVEhSRUUuQm94SGVscGVyOiAudXBkYXRlKCkgaGFzIG5vIGxvbmdlciBhcmd1bWVudHMuIiksdGhpcy5vYmplY3QhPT12b2lkIDAmJiRWLnNldEZyb21PYmplY3QodGhpcy5vYmplY3QpLCRWLmlzRW1wdHkoKSlyZXR1cm47bGV0IHI9JFYubWluLG49JFYubWF4LGk9dGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLG89aS5hcnJheTtvWzBdPW4ueCxvWzFdPW4ueSxvWzJdPW4ueixvWzNdPXIueCxvWzRdPW4ueSxvWzVdPW4ueixvWzZdPXIueCxvWzddPXIueSxvWzhdPW4ueixvWzldPW4ueCxvWzEwXT1yLnksb1sxMV09bi56LG9bMTJdPW4ueCxvWzEzXT1uLnksb1sxNF09ci56LG9bMTVdPXIueCxvWzE2XT1uLnksb1sxN109ci56LG9bMThdPXIueCxvWzE5XT1yLnksb1syMF09ci56LG9bMjFdPW4ueCxvWzIyXT1yLnksb1syM109ci56LGkubmVlZHNVcGRhdGU9ITAsdGhpcy5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1zZXRGcm9tT2JqZWN0KHQpe3JldHVybiB0aGlzLm9iamVjdD10LHRoaXMudXBkYXRlKCksdGhpc31jb3B5KHQpe3JldHVybiBBYS5wcm90b3R5cGUuY29weS5jYWxsKHRoaXMsdCksdGhpcy5vYmplY3Q9dC5vYmplY3QsdGhpc319LFNodD1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQscj0xNjc3Njk2MCl7bGV0IG49bmV3IFVpbnQxNkFycmF5KFswLDEsMSwyLDIsMywzLDAsNCw1LDUsNiw2LDcsNyw0LDAsNCwxLDUsMiw2LDMsN10pLGk9WzEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsLTEsLTEsMSwtMSwtMSwtMSwtMSwxLC0xLC0xXSxvPW5ldyBQZTtvLnNldEluZGV4KG5ldyBKZShuLDEpKSxvLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShpLDMpKSxzdXBlcihvLG5ldyBHaSh7Y29sb3I6cix0b25lTWFwcGVkOiExfSkpLHRoaXMuYm94PXQsdGhpcy50eXBlPSJCb3gzSGVscGVyIix0aGlzLmdlb21ldHJ5LmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpfXVwZGF0ZU1hdHJpeFdvcmxkKHQpe2xldCByPXRoaXMuYm94O3IuaXNFbXB0eSgpfHwoci5nZXRDZW50ZXIodGhpcy5wb3NpdGlvbiksci5nZXRTaXplKHRoaXMuc2NhbGUpLHRoaXMuc2NhbGUubXVsdGlwbHlTY2FsYXIoLjUpLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpKX19LE1odD1jbGFzcyBleHRlbmRzIGNoe2NvbnN0cnVjdG9yKHQscj0xLG49MTY3NzY5NjApe2xldCBpPW4sbz1bMSwtMSwxLC0xLDEsMSwtMSwtMSwxLDEsMSwxLC0xLDEsMSwtMSwtMSwxLDEsLTEsMSwxLDEsMSwwLDAsMSwwLDAsMF0sYT1uZXcgUGU7YS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUobywzKSksYS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzdXBlcihhLG5ldyBHaSh7Y29sb3I6aSx0b25lTWFwcGVkOiExfSkpLHRoaXMudHlwZT0iUGxhbmVIZWxwZXIiLHRoaXMucGxhbmU9dCx0aGlzLnNpemU9cjtsZXQgcz1bMSwxLDEsLTEsMSwxLC0xLC0xLDEsMSwxLDEsLTEsLTEsMSwxLC0xLDFdLGw9bmV3IFBlO2wuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IHhlKHMsMykpLGwuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksdGhpcy5hZGQobmV3IGVpKGwsbmV3IHNoKHtjb2xvcjppLG9wYWNpdHk6LjIsdHJhbnNwYXJlbnQ6ITAsZGVwdGhXcml0ZTohMSx0b25lTWFwcGVkOiExfSkpKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgcj0tdGhpcy5wbGFuZS5jb25zdGFudDtNYXRoLmFicyhyKTwxZS04JiYocj0xZS04KSx0aGlzLnNjYWxlLnNldCguNSp0aGlzLnNpemUsLjUqdGhpcy5zaXplLHIpLHRoaXMuY2hpbGRyZW5bMF0ubWF0ZXJpYWwuc2lkZT1yPDA/SWk6SXYsdGhpcy5sb29rQXQodGhpcy5wbGFuZS5ub3JtYWwpLHN1cGVyLnVwZGF0ZU1hdHJpeFdvcmxkKHQpfX0sTmhlPW5ldyBqLEtWLFN1dCxFaHQ9Y2xhc3MgZXh0ZW5kcyBvcntjb25zdHJ1Y3Rvcih0PW5ldyBqKDAsMCwxKSxyPW5ldyBqKDAsMCwwKSxuPTEsaT0xNjc3Njk2MCxvPW4qLjIsYT1vKi4yKXtzdXBlcigpLHRoaXMudHlwZT0iQXJyb3dIZWxwZXIiLEtWPT09dm9pZCAwJiYoS1Y9bmV3IFBlLEtWLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyB4ZShbMCwwLDAsMCwxLDBdLDMpKSxTdXQ9bmV3IG9tKDAsLjUsMSw1LDEpLFN1dC50cmFuc2xhdGUoMCwtLjUsMCkpLHRoaXMucG9zaXRpb24uY29weShyKSx0aGlzLmxpbmU9bmV3IGNoKEtWLG5ldyBHaSh7Y29sb3I6aSx0b25lTWFwcGVkOiExfSkpLHRoaXMubGluZS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuYWRkKHRoaXMubGluZSksdGhpcy5jb25lPW5ldyBlaShTdXQsbmV3IHNoKHtjb2xvcjppLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy5jb25lLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5hZGQodGhpcy5jb25lKSx0aGlzLnNldERpcmVjdGlvbih0KSx0aGlzLnNldExlbmd0aChuLG8sYSl9c2V0RGlyZWN0aW9uKHQpe2lmKHQueT4uOTk5OTkpdGhpcy5xdWF0ZXJuaW9uLnNldCgwLDAsMCwxKTtlbHNlIGlmKHQueTwtLjk5OTk5KXRoaXMucXVhdGVybmlvbi5zZXQoMSwwLDAsMCk7ZWxzZXtOaGUuc2V0KHQueiwwLC10LngpLm5vcm1hbGl6ZSgpO2xldCByPU1hdGguYWNvcyh0LnkpO3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKE5oZSxyKX19c2V0TGVuZ3RoKHQscj10Ki4yLG49ciouMil7dGhpcy5saW5lLnNjYWxlLnNldCgxLE1hdGgubWF4KDFlLTQsdC1yKSwxKSx0aGlzLmxpbmUudXBkYXRlTWF0cml4KCksdGhpcy5jb25lLnNjYWxlLnNldChuLHIsbiksdGhpcy5jb25lLnBvc2l0aW9uLnk9dCx0aGlzLmNvbmUudXBkYXRlTWF0cml4KCl9c2V0Q29sb3IodCl7dGhpcy5saW5lLm1hdGVyaWFsLmNvbG9yLnNldCh0KSx0aGlzLmNvbmUubWF0ZXJpYWwuY29sb3Iuc2V0KHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCwhMSksdGhpcy5saW5lLmNvcHkodC5saW5lKSx0aGlzLmNvbmUuY29weSh0LmNvbmUpLHRoaXN9fSx2TT1jbGFzcyBleHRlbmRzIEFhe2NvbnN0cnVjdG9yKHQ9MSl7bGV0IHI9WzAsMCwwLHQsMCwwLDAsMCwwLDAsdCwwLDAsMCwwLDAsMCx0XSxuPVsxLDAsMCwxLC42LDAsMCwxLDAsLjYsMSwwLDAsMCwxLDAsLjYsMV0saT1uZXcgUGU7aS5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgeGUociwzKSksaS5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgeGUobiwzKSk7bGV0IG89bmV3IEdpKHt2ZXJ0ZXhDb2xvcnM6ITAsdG9uZU1hcHBlZDohMX0pO3N1cGVyKGksbyksdGhpcy50eXBlPSJBeGVzSGVscGVyIn1zZXRDb2xvcnModCxyLG4pe2xldCBpPW5ldyBuZSxvPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5hcnJheTtyZXR1cm4gaS5zZXQodCksaS50b0FycmF5KG8sMCksaS50b0FycmF5KG8sMyksaS5zZXQociksaS50b0FycmF5KG8sNiksaS50b0FycmF5KG8sOSksaS5zZXQobiksaS50b0FycmF5KG8sMTIpLGkudG9BcnJheShvLDE1KSx0aGlzLmdlb21ldHJ5LmF0dHJpYnV0ZXMuY29sb3IubmVlZHNVcGRhdGU9ITAsdGhpc31kaXNwb3NlKCl7dGhpcy5nZW9tZXRyeS5kaXNwb3NlKCksdGhpcy5tYXRlcmlhbC5kaXNwb3NlKCl9fSxUaHQ9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IlNoYXBlUGF0aCIsdGhpcy5jb2xvcj1uZXcgbmUsdGhpcy5zdWJQYXRocz1bXSx0aGlzLmN1cnJlbnRQYXRoPW51bGx9bW92ZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBhdGg9bmV3IHF2LHRoaXMuc3ViUGF0aHMucHVzaCh0aGlzLmN1cnJlbnRQYXRoKSx0aGlzLmN1cnJlbnRQYXRoLm1vdmVUbyh0LHIpLHRoaXN9bGluZVRvKHQscil7cmV0dXJuIHRoaXMuY3VycmVudFBhdGgubGluZVRvKHQsciksdGhpc31xdWFkcmF0aWNDdXJ2ZVRvKHQscixuLGkpe3JldHVybiB0aGlzLmN1cnJlbnRQYXRoLnF1YWRyYXRpY0N1cnZlVG8odCxyLG4saSksdGhpc31iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKXtyZXR1cm4gdGhpcy5jdXJyZW50UGF0aC5iZXppZXJDdXJ2ZVRvKHQscixuLGksbyxhKSx0aGlzfXNwbGluZVRocnUodCl7cmV0dXJuIHRoaXMuY3VycmVudFBhdGguc3BsaW5lVGhydSh0KSx0aGlzfXRvU2hhcGVzKHQscil7ZnVuY3Rpb24gbih4KXtsZXQgYj1bXTtmb3IobGV0IFM9MCxDPXgubGVuZ3RoO1M8QztTKyspe2xldCBQPXhbU10saz1uZXcgS2M7ay5jdXJ2ZXM9UC5jdXJ2ZXMsYi5wdXNoKGspfXJldHVybiBifWZ1bmN0aW9uIGkoeCxiKXtsZXQgUz1iLmxlbmd0aCxDPSExO2ZvcihsZXQgUD1TLTEsaz0wO2s8UztQPWsrKyl7bGV0IE89YltQXSxEPWJba10sQj1ELngtTy54LEk9RC55LU8ueTtpZihNYXRoLmFicyhJKT5OdW1iZXIuRVBTSUxPTil7aWYoSTwwJiYoTz1iW2tdLEI9LUIsRD1iW1BdLEk9LUkpLHgueTxPLnl8fHgueT5ELnkpY29udGludWU7aWYoeC55PT09Ty55KXtpZih4Lng9PT1PLngpcmV0dXJuITB9ZWxzZXtsZXQgTD1JKih4LngtTy54KS1CKih4LnktTy55KTtpZihMPT09MClyZXR1cm4hMDtpZihMPDApY29udGludWU7Qz0hQ319ZWxzZXtpZih4LnkhPT1PLnkpY29udGludWU7aWYoRC54PD14LngmJngueDw9Ty54fHxPLng8PXgueCYmeC54PD1ELngpcmV0dXJuITB9fXJldHVybiBDfWxldCBvPVpjLmlzQ2xvY2tXaXNlLGE9dGhpcy5zdWJQYXRocztpZihhLmxlbmd0aD09PTApcmV0dXJuW107aWYocj09PSEwKXJldHVybiBuKGEpO2xldCBzLGwsYyx1PVtdO2lmKGEubGVuZ3RoPT09MSlyZXR1cm4gbD1hWzBdLGM9bmV3IEtjLGMuY3VydmVzPWwuY3VydmVzLHUucHVzaChjKSx1O2xldCBoPSFvKGFbMF0uZ2V0UG9pbnRzKCkpO2g9dD8haDpoO2xldCBmPVtdLHA9W10sZD1bXSxnPTAsXztwW2ddPXZvaWQgMCxkW2ddPVtdO2ZvcihsZXQgeD0wLGI9YS5sZW5ndGg7eDxiO3grKylsPWFbeF0sXz1sLmdldFBvaW50cygpLHM9byhfKSxzPXQ/IXM6cyxzPyghaCYmcFtnXSYmZysrLHBbZ109e3M6bmV3IEtjLHA6X30scFtnXS5zLmN1cnZlcz1sLmN1cnZlcyxoJiZnKyssZFtnXT1bXSk6ZFtnXS5wdXNoKHtoOmwscDpfWzBdfSk7aWYoIXBbMF0pcmV0dXJuIG4oYSk7aWYocC5sZW5ndGg+MSl7bGV0IHg9ITEsYj1bXTtmb3IobGV0IFM9MCxDPXAubGVuZ3RoO1M8QztTKyspZltTXT1bXTtmb3IobGV0IFM9MCxDPXAubGVuZ3RoO1M8QztTKyspe2xldCBQPWRbU107Zm9yKGxldCBrPTA7azxQLmxlbmd0aDtrKyspe2xldCBPPVBba10sRD0hMDtmb3IobGV0IEI9MDtCPHAubGVuZ3RoO0IrKylpKE8ucCxwW0JdLnApJiYoUyE9PUImJmIucHVzaCh7ZnJvbXM6Uyx0b3M6Qixob2xlOmt9KSxEPyhEPSExLGZbQl0ucHVzaChPKSk6eD0hMCk7RCYmZltTXS5wdXNoKE8pfX1iLmxlbmd0aD4wJiYoeHx8KGQ9ZikpfWxldCB5O2ZvcihsZXQgeD0wLGI9cC5sZW5ndGg7eDxiO3grKyl7Yz1wW3hdLnMsdS5wdXNoKGMpLHk9ZFt4XTtmb3IobGV0IFM9MCxDPXkubGVuZ3RoO1M8QztTKyspYy5ob2xlcy5wdXNoKHlbU10uaCl9cmV0dXJuIHV9fSxlcGU9bmV3IEZsb2F0MzJBcnJheSgxKSx4MHI9bmV3IEludDMyQXJyYXkoZXBlLmJ1ZmZlciksQ2h0PWNsYXNze3N0YXRpYyB0b0hhbGZGbG9hdCh0KXt0PjY1NTA0JiYoY29uc29sZS53YXJuKCJUSFJFRS5EYXRhVXRpbHMudG9IYWxmRmxvYXQoKTogdmFsdWUgZXhjZWVkcyA2NTUwNC4iKSx0PTY1NTA0KSxlcGVbMF09dDtsZXQgcj14MHJbMF0sbj1yPj4xNiYzMjc2OCxpPXI+PjEyJjIwNDcsbz1yPj4yMyYyNTU7cmV0dXJuIG88MTAzP246bz4xNDI/KG58PTMxNzQ0LG58PShvPT0yNTU/MDoxKSYmciY4Mzg4NjA3LG4pOm88MTEzPyhpfD0yMDQ4LG58PShpPj4xMTQtbykrKGk+PjExMy1vJjEpLG4pOihufD1vLTExMjw8MTB8aT4+MSxuKz1pJjEsbil9fSxiMHI9MCx3MHI9MSxTMHI9MCxNMHI9MSxFMHI9MjtmdW5jdGlvbiBUMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWVzaEZhY2VNYXRlcmlhbCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYW4gQXJyYXkgaW5zdGVhZC4iKSxlfWZ1bmN0aW9uIEMwcihlPVtdKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NdWx0aU1hdGVyaWFsIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhbiBBcnJheSBpbnN0ZWFkLiIpLGUuaXNNdWx0aU1hdGVyaWFsPSEwLGUubWF0ZXJpYWxzPWUsZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBlLnNsaWNlKCl9LGV9ZnVuY3Rpb24gQTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUG9pbnRDbG91ZCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50cy4iKSxuZXcgaW0oZSx0KX1mdW5jdGlvbiBQMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGUgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5TcHJpdGUuIiksbmV3IG9NKGUpfWZ1bmN0aW9uIEkwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlU3lzdGVtIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuUG9pbnRzLiIpLG5ldyBpbShlLHQpfWZ1bmN0aW9uIEwwcihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Qb2ludENsb3VkTWF0ZXJpYWwgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5Qb2ludHNNYXRlcmlhbC4iKSxuZXcgbm0oZSl9ZnVuY3Rpb24gazByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhcnRpY2xlQmFzaWNNYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBSMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGFydGljbGVTeXN0ZW1NYXRlcmlhbCBoYXMgYmVlbiByZW5hbWVkIHRvIFRIUkVFLlBvaW50c01hdGVyaWFsLiIpLG5ldyBubShlKX1mdW5jdGlvbiBOMHIoZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlcnRleCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuVmVjdG9yMyBpbnN0ZWFkLiIpLG5ldyBqKGUsdCxyKX1mdW5jdGlvbiBEMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5EeW5hbWljQnVmZmVyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKCkuc2V0VXNhZ2UoIFRIUkVFLkR5bmFtaWNEcmF3VXNhZ2UgKSBpbnN0ZWFkLiIpLG5ldyBKZShlLHQpLnNldFVzYWdlKFkzKX1mdW5jdGlvbiBPMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQ4QXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGxVKGUsdCl9ZnVuY3Rpb24gejByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50OEJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IGNVKGUsdCl9ZnVuY3Rpb24gRjByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVWludDhDbGFtcGVkQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuVWludDhDbGFtcGVkQnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgdVUoZSx0KX1mdW5jdGlvbiBCMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5JbnQxNkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkludDE2QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgaFUoZSx0KX1mdW5jdGlvbiBIMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5VaW50MTZBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5VaW50MTZCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyAkMyhlLHQpfWZ1bmN0aW9uIFYwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludDMyQXR0cmlidXRlIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBuZXcgVEhSRUUuSW50MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyBmVShlLHQpfWZ1bmN0aW9uIFUwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVpbnQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLlVpbnQzMkJ1ZmZlckF0dHJpYnV0ZSgpIGluc3RlYWQuIiksbmV3IEszKGUsdCl9ZnVuY3Rpb24gcTByKGUsdCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuRmxvYXQzMkF0dHJpYnV0ZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkZsb2F0MzJCdWZmZXJBdHRyaWJ1dGUoKSBpbnN0ZWFkLiIpLG5ldyB4ZShlLHQpfWZ1bmN0aW9uIEcwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZsb2F0NjRBdHRyaWJ1dGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5GbG9hdDY0QnVmZmVyQXR0cmlidXRlKCkgaW5zdGVhZC4iKSxuZXcgZFUoZSx0KX1mcy5jcmVhdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS5sb2coIlRIUkVFLkN1cnZlLmNyZWF0ZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQiKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGZzLnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXRQb2ludD10LGV9O3F2LnByb3RvdHlwZS5mcm9tUG9pbnRzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlBhdGg6IC5mcm9tUG9pbnRzKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVBvaW50cygpLiIpLHRoaXMuc2V0RnJvbVBvaW50cyhlKX07ZnVuY3Rpb24gVzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkF4aXNIZWxwZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5BeGVzSGVscGVyLiIpLG5ldyB2TShlKX1mdW5jdGlvbiBZMHIoZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3VuZGluZ0JveEhlbHBlciBoYXMgYmVlbiBkZXByZWNhdGVkLiBDcmVhdGluZyBhIFRIUkVFLkJveEhlbHBlciBpbnN0ZWFkLiIpLG5ldyB5TShlLHQpfWZ1bmN0aW9uIGowcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkVkZ2VzSGVscGVyIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5FZGdlc0dlb21ldHJ5IGluc3RlYWQuIiksbmV3IEFhKG5ldyBhNihlLmdlb21ldHJ5KSxuZXcgR2koe2NvbG9yOnQhPT12b2lkIDA/dDoxNjc3NzIxNX0pKX1XVS5wcm90b3R5cGUuc2V0Q29sb3JzPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuR3JpZEhlbHBlcjogc2V0Q29sb3JzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCwgcGFzcyB0aGVtIGluIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkLiIpfTtHVS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9O2Z1bmN0aW9uIFgwcihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldpcmVmcmFtZUhlbHBlciBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuV2lyZWZyYW1lR2VvbWV0cnkgaW5zdGVhZC4iKSxuZXcgQWEobmV3IHA2KGUuZ2VvbWV0cnkpLG5ldyBHaSh7Y29sb3I6dCE9PXZvaWQgMD90OjE2Nzc3MjE1fSkpfWVhLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksZE0uZXh0cmFjdFVybEJhc2UoZSl9O2VhLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fTtmdW5jdGlvbiAkMHIoZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuWEhSTG9hZGVyIGhhcyBiZWVuIHJlbmFtZWQgdG8gVEhSRUUuRmlsZUxvYWRlci4iKSxuZXcgSmMoZSl9ZnVuY3Rpb24gSzByKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJpbmFyeVRleHR1cmVMb2FkZXIgaGFzIGJlZW4gcmVuYW1lZCB0byBUSFJFRS5EYXRhVGV4dHVyZUxvYWRlci4iKSxuZXcgVFUoZSl9JDAucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gyOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9OyQwLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07JDAucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3goZSl9OyQwLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShlKX07dGEucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuY2VudGVyKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Q2VudGVyKCkuIiksdGhpcy5nZXRDZW50ZXIoZSl9O3RhLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5lbXB0eSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmlzRW1wdHkoKS4iKSx0aGlzLmlzRW1wdHkoKX07dGEucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3goZSl9O3RhLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblNwaGVyZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGUpfTt0YS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Cb3gzOiAuc2l6ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFNpemUoKS4iKSx0aGlzLmdldFNpemUoZSl9O1pmLnByb3RvdHlwZS5lbXB0eT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNwaGVyZTogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfTtOdi5wcm90b3R5cGUuc2V0RnJvbU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5GcnVzdHVtOiAuc2V0RnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KCkuIiksdGhpcy5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeChlKX07cVUucHJvdG90eXBlLmNlbnRlcj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5MaW5lMzogLmNlbnRlcigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldENlbnRlcigpLiIpLHRoaXMuZ2V0Q2VudGVyKGUpfTtraS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShlLHQpfTtraS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4Myh0aGlzKX07a2kucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07a2kucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxlLmFwcGx5TWF0cml4Myh0aGlzKX07a2kucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2tpLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkoZSkuaW52ZXJ0KCl9O01lLnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKGUpfTtNZS5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShlLHQpfTtNZS5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksbmV3IGooKS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMyl9O01lLnByb3RvdHlwZS5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oKS4iKSx0aGlzLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKGUpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlUb0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlUb0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yNCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXg0KHRoaXMpfTtNZS5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHlWZWN0b3IzQXJyYXkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlQXhpcz1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFZlY3RvcjMudHJhbnNmb3JtRGlyZWN0aW9uKCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUudHJhbnNmb3JtRGlyZWN0aW9uKHRoaXMpfTtNZS5wcm90b3R5cGUuY3Jvc3NWZWN0b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmNyb3NzVmVjdG9yKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHZlY3Rvci5hcHBseU1hdHJpeDQoIG1hdHJpeCApIGluc3RlYWQuIiksZS5hcHBseU1hdHJpeDQodGhpcyl9O01lLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZVg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O01lLnByb3RvdHlwZS5yb3RhdGVZPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVkoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUucm90YXRlWj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVaKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLnJvdGF0ZUJ5QXhpcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVCeUF4aXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtNZS5wcm90b3R5cGUuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhdHRyaWJ1dGUuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLGUuYXBwbHlNYXRyaXg0KHRoaXMpfTtNZS5wcm90b3R5cGUuYXBwbHlUb1ZlY3RvcjNBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5hcHBseVRvVmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07TWUucHJvdG90eXBlLm1ha2VGcnVzdHVtPWZ1bmN0aW9uKGUsdCxyLG4saSxvKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAubWFrZUZydXN0dW0oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLm1ha2VQZXJzcGVjdGl2ZSggbGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tLCBuZWFyLCBmYXIgKSBpbnN0ZWFkLiIpLHRoaXMubWFrZVBlcnNwZWN0aXZlKGUsdCxuLHIsaSxvKX07TWUucHJvdG90eXBlLmdldEludmVyc2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmdldEludmVyc2UoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbWF0cml4SW52LmNvcHkoIG1hdHJpeCApLmludmVydCgpOyBpbnN0ZWFkLiIpLHRoaXMuY29weShlKS5pbnZlcnQoKX07JGMucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uTGluZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5QbGFuZTogLmlzSW50ZXJzZWN0aW9uTGluZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNMaW5lKCkuIiksdGhpcy5pbnRlcnNlY3RzTGluZShlKX07dmkucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yMz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHlWZWN0b3IzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGlzIG5vdyB2ZWN0b3IuYXBwbHlRdWF0ZXJuaW9uKCBxdWF0ZXJuaW9uICkgaW5zdGVhZC4iKSxlLmFwcGx5UXVhdGVybmlvbih0aGlzKX07dmkucHJvdG90eXBlLmludmVyc2U9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuaW52ZXJzZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gaW52ZXJ0KCkuIiksdGhpcy5pbnZlcnQoKX07SmYucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uQm94PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChlKX07SmYucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uUGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25QbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNQbGFuZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1BsYW5lKGUpfTtKZi5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25TcGhlcmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUmF5OiAuaXNJbnRlcnNlY3Rpb25TcGhlcmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzU3BoZXJlKCkuIiksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKGUpfTthaS5wcm90b3R5cGUuYXJlYT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYXJlYSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEFyZWEoKS4iKSx0aGlzLmdldEFyZWEoKX07YWkucHJvdG90eXBlLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksdGhpcy5nZXRCYXJ5Y29vcmQoZSx0KX07YWkucHJvdG90eXBlLm1pZHBvaW50PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubWlkcG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRNaWRwb2ludCgpLiIpLHRoaXMuZ2V0TWlkcG9pbnQoZSl9O2FpLnByb3RvdHlwZW5vcm1hbD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLHRoaXMuZ2V0Tm9ybWFsKGUpfTthaS5wcm90b3R5cGUucGxhbmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5wbGFuZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldFBsYW5lKCkuIiksdGhpcy5nZXRQbGFuZShlKX07YWkuYmFyeWNvb3JkRnJvbVBvaW50PWZ1bmN0aW9uKGUsdCxyLG4saSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5iYXJ5Y29vcmRGcm9tUG9pbnQoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRCYXJ5Y29vcmQoKS4iKSxhaS5nZXRCYXJ5Y29vcmQoZSx0LHIsbixpKX07YWkubm9ybWFsPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAubm9ybWFsKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0Tm9ybWFsKCkuIiksYWkuZ2V0Tm9ybWFsKGUsdCxyLG4pfTtLYy5wcm90b3R5cGUuZXh0cmFjdEFsbFBvaW50cz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5TaGFwZTogLmV4dHJhY3RBbGxQb2ludHMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmV4dHJhY3RQb2ludHMoKSBpbnN0ZWFkLiIpLHRoaXMuZXh0cmFjdFBvaW50cyhlKX07S2MucHJvdG90eXBlLmV4dHJ1ZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRydWRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV4dHJ1ZGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IGhoKHRoaXMsZSl9O0tjLnByb3RvdHlwZS5tYWtlR2VvbWV0cnk9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5tYWtlR2VvbWV0cnkoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgU2hhcGVHZW9tZXRyeSgpIGluc3RlYWQuIiksbmV3IFkwKHRoaXMsZSl9O0x0LnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSx0LHIpfTtMdC5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oZSl9O0x0LnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX07ai5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuc2V0RXVsZXJGcm9tUm90YXRpb25NYXRyaXgoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgRXVsZXIuc2V0RnJvbVJvdGF0aW9uTWF0cml4KCkgaW5zdGVhZC4iKX07ai5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX07ai5wcm90b3R5cGUuZ2V0UG9zaXRpb25Gcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRQb3NpdGlvbkZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4UG9zaXRpb24oKS4iKSx0aGlzLnNldEZyb21NYXRyaXhQb3NpdGlvbihlKX07ai5wcm90b3R5cGUuZ2V0U2NhbGVGcm9tTWF0cml4PWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRTY2FsZUZyb21NYXRyaXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tTWF0cml4U2NhbGUoKS4iKSx0aGlzLnNldEZyb21NYXRyaXhTY2FsZShlKX07ai5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LGUpfTtqLnByb3RvdHlwZS5hcHBseVByb2plY3Rpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFwcGx5UHJvamVjdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuYXBwbHlNYXRyaXg0KCBtICkgaW5zdGVhZC4iKSx0aGlzLmFwcGx5TWF0cml4NChlKX07ai5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCxyKX07ai5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8oZSl9O2oucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtlbi5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKGUsdCxyKX07ZW4ucHJvdG90eXBlLmxlbmd0aE1hbmhhdHRhbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5sZW5ndGhNYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5MZW5ndGgoKS4iKSx0aGlzLm1hbmhhdHRhbkxlbmd0aCgpfTtvci5wcm90b3R5cGUuZ2V0Q2hpbGRCeU5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5nZXRDaGlsZEJ5TmFtZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE9iamVjdEJ5TmFtZSgpLiIpLHRoaXMuZ2V0T2JqZWN0QnlOYW1lKGUpfTtvci5wcm90b3R5cGUucmVuZGVyRGVwdGg9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAucmVuZGVyRGVwdGggaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5yZW5kZXJPcmRlciwgaW5zdGVhZC4iKX07b3IucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAudHJhbnNsYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC50cmFuc2xhdGVPbkF4aXMoIGF4aXMsIGRpc3RhbmNlICkgaW5zdGVhZC4iKSx0aGlzLnRyYW5zbGF0ZU9uQXhpcyh0LGUpfTtvci5wcm90b3R5cGUuZ2V0V29ybGRSb3RhdGlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk9iamVjdDNEOiAuZ2V0V29ybGRSb3RhdGlvbigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBUSFJFRS5PYmplY3QzRC5nZXRXb3JsZFF1YXRlcm5pb24oIHRhcmdldCApIGluc3RlYWQuIil9O29yLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG9yLnByb3RvdHlwZSx7ZXVsZXJPcmRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5ldWxlck9yZGVyIGlzIG5vdyAucm90YXRpb24ub3JkZXIuIiksdGhpcy5yb3RhdGlvbi5vcmRlcj1lfX0sdXNlUXVhdGVybmlvbjp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnVzZVF1YXRlcm5pb24gaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIGxpYnJhcnkgbm93IHVzZXMgcXVhdGVybmlvbnMgYnkgZGVmYXVsdC4iKX19fSk7ZWkucHJvdG90eXBlLnNldERyYXdNb2RlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLnNldERyYXdNb2RlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZWkucHJvdG90eXBlLHtkcmF3TW9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5kcmF3TW9kZSBoYXMgYmVlbiByZW1vdmVkLiBUaGUgcmVuZGVyZXIgbm93IGFsd2F5cyBhc3N1bWVzIFRIUkVFLlRyaWFuZ2xlc0RyYXdNb2RlLiIpLENmZX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWVzaDogLmRyYXdNb2RlIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9fX0pO2FNLnByb3RvdHlwZS5pbml0Qm9uZXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Ta2lubmVkTWVzaDogaW5pdEJvbmVzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07VWkucHJvdG90eXBlLnNldExlbnM9ZnVuY3Rpb24oZSx0KXtjb25zb2xlLndhcm4oIlRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhLnNldExlbnMgaXMgZGVwcmVjYXRlZC4gVXNlIC5zZXRGb2NhbExlbmd0aCBhbmQgLmZpbG1HYXVnZSBmb3IgYSBwaG90b2dyYXBoaWMgc2V0dXAuIiksdCE9PXZvaWQgMCYmKHRoaXMuZmlsbUdhdWdlPXQpLHRoaXMuc2V0Rm9jYWxMZW5ndGgoZSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9sLnByb3RvdHlwZSx7b25seVNoYWRvdzp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLm9ubHlTaGFkb3cgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHNoYWRvd0NhbWVyYUZvdjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGb3YgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZvdi4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZm92PWV9fSxzaGFkb3dDYW1lcmFMZWZ0OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUxlZnQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmxlZnQuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmxlZnQ9ZX19LHNoYWRvd0NhbWVyYVJpZ2h0OntzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVJpZ2h0IGlzIG5vdyAuc2hhZG93LmNhbWVyYS5yaWdodC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEucmlnaHQ9ZX19LHNoYWRvd0NhbWVyYVRvcDp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFUb3AgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnRvcC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEudG9wPWV9fSxzaGFkb3dDYW1lcmFCb3R0b206e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhQm90dG9tIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5ib3R0b20uIiksdGhpcy5zaGFkb3cuY2FtZXJhLmJvdHRvbT1lfX0sc2hhZG93Q2FtZXJhTmVhcjp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFOZWFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5uZWFyLiIpLHRoaXMuc2hhZG93LmNhbWVyYS5uZWFyPWV9fSxzaGFkb3dDYW1lcmFGYXI6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhRmFyIGlzIG5vdyAuc2hhZG93LmNhbWVyYS5mYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLmZhcj1lfX0sc2hhZG93Q2FtZXJhVmlzaWJsZTp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVZpc2libGUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG5ldyBUSFJFRS5DYW1lcmFIZWxwZXIoIGxpZ2h0LnNoYWRvdy5jYW1lcmEgKSBpbnN0ZWFkLiIpfX0sc2hhZG93Qmlhczp7c2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dCaWFzIGlzIG5vdyAuc2hhZG93LmJpYXMuIiksdGhpcy5zaGFkb3cuYmlhcz1lfX0sc2hhZG93RGFya25lc3M6e3NldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dEYXJrbmVzcyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93TWFwV2lkdGg6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwV2lkdGggaXMgbm93IC5zaGFkb3cubWFwU2l6ZS53aWR0aC4iKSx0aGlzLnNoYWRvdy5tYXBTaXplLndpZHRoPWV9fSxzaGFkb3dNYXBIZWlnaHQ6e3NldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93TWFwSGVpZ2h0IGlzIG5vdyAuc2hhZG93Lm1hcFNpemUuaGVpZ2h0LiIpLHRoaXMuc2hhZG93Lm1hcFNpemUuaGVpZ2h0PWV9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEplLnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5sZW5ndGggaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5jb3VudCBpbnN0ZWFkLiIpLHRoaXMuYXJyYXkubGVuZ3RofX0sZHluYW1pYzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy51c2FnZT09PVkzfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmR5bmFtaWMgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC51c2FnZSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoWTMpfX19KTtKZS5wcm90b3R5cGUuc2V0RHluYW1pYz1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShlPT09ITA/WTM6VzMpLHRoaXN9O0plLnByb3RvdHlwZS5jb3B5SW5kaWNlc0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuY29weUluZGljZXNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LEplLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9O1BlLnByb3RvdHlwZS5hZGRJbmRleD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkSW5kZXgoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRJbmRleCgpLiIpLHRoaXMuc2V0SW5kZXgoZSl9O1BlLnByb3RvdHlwZS5hZGRBdHRyaWJ1dGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEF0dHJpYnV0ZSgpLiIpLCEodCYmdC5pc0J1ZmZlckF0dHJpYnV0ZSkmJiEodCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlKT8oY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZEF0dHJpYnV0ZSgpIG5vdyBleHBlY3RzICggbmFtZSwgYXR0cmlidXRlICkuIiksdGhpcy5zZXRBdHRyaWJ1dGUoZSxuZXcgSmUoYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSkpKTplPT09ImluZGV4Ij8oY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS5hZGRBdHRyaWJ1dGU6IFVzZSAuc2V0SW5kZXgoKSBmb3IgaW5kZXggYXR0cmlidXRlLiIpLHRoaXMuc2V0SW5kZXgodCksdGhpcyk6dGhpcy5zZXRBdHRyaWJ1dGUoZSx0KX07UGUucHJvdG90eXBlLmFkZERyYXdDYWxsPWZ1bmN0aW9uKGUsdCxyKXtyIT09dm9pZCAwJiZjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBubyBsb25nZXIgc3VwcG9ydHMgaW5kZXhPZmZzZXQuIiksY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFkZERyYXdDYWxsKCkgaXMgbm93IC5hZGRHcm91cCgpLiIpLHRoaXMuYWRkR3JvdXAoZSx0KX07UGUucHJvdG90eXBlLmNsZWFyRHJhd0NhbGxzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNsZWFyRHJhd0NhbGxzKCkgaXMgbm93IC5jbGVhckdyb3VwcygpLiIpLHRoaXMuY2xlYXJHcm91cHMoKX07UGUucHJvdG90eXBlLmNvbXB1dGVPZmZzZXRzPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmNvbXB1dGVPZmZzZXRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07UGUucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLnJlbW92ZUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmRlbGV0ZUF0dHJpYnV0ZSgpLiIpLHRoaXMuZGVsZXRlQXR0cmlidXRlKGUpfTtQZS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KGUpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQZS5wcm90b3R5cGUse2RyYXdjYWxsczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuZHJhd2NhbGxzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319LG9mZnNldHM6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAub2Zmc2V0cyBoYXMgYmVlbiByZW5hbWVkIHRvIC5ncm91cHMuIiksdGhpcy5ncm91cHN9fX0pO2VtLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0RHluYW1pYygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAuc2V0VXNhZ2UoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0VXNhZ2UoZT09PSEwP1kzOlczKSx0aGlzfTtlbS5wcm90b3R5cGUuc2V0QXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlcjogLnNldEFycmF5IGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBCdWZmZXJHZW9tZXRyeSAuc2V0QXR0cmlidXRlIHRvIHJlcGxhY2UvcmVzaXplIGF0dHJpYnV0ZSBidWZmZXJzIil9O2hoLnByb3RvdHlwZS5nZXRBcnJheXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5nZXRBcnJheXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtoaC5wcm90b3R5cGUuYWRkU2hhcGVMaXN0PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGVMaXN0KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07aGgucHJvdG90eXBlLmFkZFNoYXBlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuRXh0cnVkZUdlb21ldHJ5OiAuYWRkU2hhcGUoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtxMC5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNjZW5lOiAuZGlzcG9zZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O2dNLnByb3RvdHlwZS5vblVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlVuaWZvcm06IC5vblVwZGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBvYmplY3Qub25CZWZvcmVSZW5kZXIoKSBpbnN0ZWFkLiIpLHRoaXN9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHFpLnByb3RvdHlwZSx7d3JhcEFyb3VuZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBBcm91bmQgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LG92ZXJkcmF3OntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLm92ZXJkcmF3IGhhcyBiZWVuIHJlbW92ZWQuIil9fSx3cmFwUkdCOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogLndyYXBSR0IgaGFzIGJlZW4gcmVtb3ZlZC4iKSxuZXcgbmV9fSxzaGFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAuc2hhZGluZyBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGJvb2xlYW4gLmZsYXRTaGFkaW5nIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKSx0aGlzLmZsYXRTaGFkaW5nPWU9PT1QaHR9fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPWV9fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGgucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1lfX19KTtybi5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KGUpLHRoaXMuY2xlYXIodCxyLG4pfTtybi5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKGUpfTtybi5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfTtybi5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX07cm4ucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufTtybi5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9O3JuLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX07cm4ucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfTtybi5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9O3JuLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KGUpfTtybi5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX07cm4ucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfTtybi5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9O3JuLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHJuLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1lfX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1lfX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ZT09PSEwP1luOlFkfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoamZlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KTtmdW5jdGlvbiBaMHIoZSx0LHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0Q3ViZSggd2lkdGgsIGhlaWdodCwgb3B0aW9ucyApIGlzIG5vdyBXZWJHTEN1YmVSZW5kZXJUYXJnZXQoIHNpemUsIG9wdGlvbnMgKS4iKSxuZXcgUTMoZSxyKX1PYmplY3QuZGVmaW5lUHJvcGVydGllcyh1cy5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1lfX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPWV9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPWV9fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKGUpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPWV9fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1lfX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1lfX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1lfX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihlKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1lfX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9ZX19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ZX19fSk7TjYucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oZSl7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4gbmV3IE5VKCkubG9hZChlLGZ1bmN0aW9uKG4pe3Quc2V0QnVmZmVyKG4pfSksdGhpc307elUucHJvdG90eXBlLmdldERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5BdWRpb0FuYWx5c2VyOiAuZ2V0RGF0YSgpIGlzIG5vdyAuZ2V0RnJlcXVlbmN5RGF0YSgpLiIpLHRoaXMuZ2V0RnJlcXVlbmN5RGF0YSgpfTtKMy5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihlLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShlLHQpfTtKMy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihlLHQscixuKX07S2YuY3Jvc3NPcmlnaW49dm9pZCAwO0tmLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKGUsdCxyLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IGk9bmV3IENVO2kuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89aS5sb2FkKGUscix2b2lkIDAsbik7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb307S2YubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKGUsdCxyLG4pe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgaT1uZXcgRVU7aS5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1pLmxvYWQoZSxyLHZvaWQgMCxuKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfTtLZi5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9O0tmLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfTtmdW5jdGlvbiBKMHIoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5DYW52YXNSZW5kZXJlciBoYXMgYmVlbiByZW1vdmVkIil9ZnVuY3Rpb24gUTByKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSlNPTkxvYWRlciBoYXMgYmVlbiByZW1vdmVkLiIpfXZhciB0X3I9e2NyZWF0ZU11bHRpTWF0ZXJpYWxPYmplY3Q6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfSxkZXRhY2g6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfSxhdHRhY2g6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5TY2VuZVV0aWxzIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vdXRpbHMvU2NlbmVVdGlscy5qcyIpfX07ZnVuY3Rpb24gZV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTGVuc0ZsYXJlIGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vb2JqZWN0cy9MZW5zZmxhcmUuanMiKX1mdW5jdGlvbiByX3IoKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuUGFyYW1ldHJpY0dlb21ldHJ5IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vZ2VvbWV0cmllcy9QYXJhbWV0cmljR2VvbWV0cnkuanMiKSxuZXcgUGV9ZnVuY3Rpb24gbl9yKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlRleHRHZW9tZXRyeSBoYXMgYmVlbiBtb3ZlZCB0byAvZXhhbXBsZXMvanNtL2dlb21ldHJpZXMvVGV4dEdlb21ldHJ5LmpzIiksbmV3IFBlfWZ1bmN0aW9uIGlfcigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkZvbnRMb2FkZXIgaGFzIGJlZW4gbW92ZWQgdG8gL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0ZvbnRMb2FkZXIuanMiKX1mdW5jdGlvbiBvX3IoKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Gb250IGhhcyBiZWVuIG1vdmVkIHRvIC9leGFtcGxlcy9qc20vbG9hZGVycy9Gb250TG9hZGVyLmpzIil9ZnVuY3Rpb24gYV9yKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuSW1tZWRpYXRlUmVuZGVyT2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuIil9dHlwZW9mIF9fVEhSRUVfREVWVE9PTFNfXyE9InVuZGVmaW5lZCImJl9fVEhSRUVfREVWVE9PTFNfXy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicmVnaXN0ZXIiLHtkZXRhaWw6e3JldmlzaW9uOllVfX0pKTt0eXBlb2Ygd2luZG93IT0idW5kZWZpbmVkIiYmKHdpbmRvdy5fX1RIUkVFX18/Y29uc29sZS53YXJuKCJXQVJOSU5HOiBNdWx0aXBsZSBpbnN0YW5jZXMgb2YgVGhyZWUuanMgYmVpbmcgaW1wb3J0ZWQuIik6d2luZG93Ll9fVEhSRUVfXz1ZVSk7dmFyIHJwZT17dHlwZToiY2hhbmdlIn0sVmh0PXt0eXBlOiJzdGFydCJ9LG5wZT17dHlwZToiZW5kIn0sWlU9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0LHIpe3N1cGVyKCkscj09PXZvaWQgMCYmY29uc29sZS53YXJuKCdUSFJFRS5PcmJpdENvbnRyb2xzOiBUaGUgc2Vjb25kIHBhcmFtZXRlciAiZG9tRWxlbWVudCIgaXMgbm93IG1hbmRhdG9yeS4nKSxyPT09ZG9jdW1lbnQmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLk9yYml0Q29udHJvbHM6ICJkb2N1bWVudCIgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgImRvbUVsZW1lbnQiLiBQbGVhc2UgdXNlICJyZW5kZXJlci5kb21FbGVtZW50IiBpbnN0ZWFkLicpLHRoaXMub2JqZWN0PXQsdGhpcy5kb21FbGVtZW50PXIsdGhpcy5kb21FbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uPSJub25lIix0aGlzLmVuYWJsZWQ9ITAsdGhpcy50YXJnZXQ9bmV3IGosdGhpcy5taW5EaXN0YW5jZT0wLHRoaXMubWF4RGlzdGFuY2U9MS8wLHRoaXMubWluWm9vbT0wLHRoaXMubWF4Wm9vbT0xLzAsdGhpcy5taW5Qb2xhckFuZ2xlPTAsdGhpcy5tYXhQb2xhckFuZ2xlPU1hdGguUEksdGhpcy5taW5BemltdXRoQW5nbGU9LTEvMCx0aGlzLm1heEF6aW11dGhBbmdsZT0xLzAsdGhpcy5lbmFibGVEYW1waW5nPSExLHRoaXMuZGFtcGluZ0ZhY3Rvcj0uMDUsdGhpcy5lbmFibGVab29tPSEwLHRoaXMuem9vbVNwZWVkPTEsdGhpcy5lbmFibGVSb3RhdGU9ITAsdGhpcy5yb3RhdGVTcGVlZD0xLHRoaXMuZW5hYmxlUGFuPSEwLHRoaXMucGFuU3BlZWQ9MSx0aGlzLnNjcmVlblNwYWNlUGFubmluZz0hMCx0aGlzLmtleVBhblNwZWVkPTcsdGhpcy5hdXRvUm90YXRlPSExLHRoaXMuYXV0b1JvdGF0ZVNwZWVkPTIsdGhpcy5rZXlzPXtMRUZUOiJBcnJvd0xlZnQiLFVQOiJBcnJvd1VwIixSSUdIVDoiQXJyb3dSaWdodCIsQk9UVE9NOiJBcnJvd0Rvd24ifSx0aGlzLm1vdXNlQnV0dG9ucz17TEVGVDpLMC5ST1RBVEUsTUlERExFOkswLkRPTExZLFJJR0hUOkswLlBBTn0sdGhpcy50b3VjaGVzPXtPTkU6WjAuUk9UQVRFLFRXTzpaMC5ET0xMWV9QQU59LHRoaXMudGFyZ2V0MD10aGlzLnRhcmdldC5jbG9uZSgpLHRoaXMucG9zaXRpb24wPXRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCksdGhpcy56b29tMD10aGlzLm9iamVjdC56b29tLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9bnVsbCx0aGlzLmdldFBvbGFyQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gcy5waGl9LHRoaXMuZ2V0QXppbXV0aGFsQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gcy50aGV0YX0sdGhpcy5nZXREaXN0YW5jZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9iamVjdC5wb3NpdGlvbi5kaXN0YW5jZVRvKHRoaXMudGFyZ2V0KX0sdGhpcy5saXN0ZW5Ub0tleUV2ZW50cz1mdW5jdGlvbihudCl7bnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnIpLHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHM9bnR9LHRoaXMuc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7bi50YXJnZXQwLmNvcHkobi50YXJnZXQpLG4ucG9zaXRpb24wLmNvcHkobi5vYmplY3QucG9zaXRpb24pLG4uem9vbTA9bi5vYmplY3Quem9vbX0sdGhpcy5yZXNldD1mdW5jdGlvbigpe24udGFyZ2V0LmNvcHkobi50YXJnZXQwKSxuLm9iamVjdC5wb3NpdGlvbi5jb3B5KG4ucG9zaXRpb24wKSxuLm9iamVjdC56b29tPW4uem9vbTAsbi5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpLG4uZGlzcGF0Y2hFdmVudChycGUpLG4udXBkYXRlKCksbz1pLk5PTkV9LHRoaXMudXBkYXRlPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqLEN0PW5ldyB2aSgpLnNldEZyb21Vbml0VmVjdG9ycyh0LnVwLG5ldyBqKDAsMSwwKSksV3Q9Q3QuY2xvbmUoKS5pbnZlcnQoKSxmZT1uZXcgaixhdD1uZXcgdmksc2U9MipNYXRoLlBJO3JldHVybiBmdW5jdGlvbigpe2xldCBDZT1uLm9iamVjdC5wb3NpdGlvbjtudC5jb3B5KENlKS5zdWIobi50YXJnZXQpLG50LmFwcGx5UXVhdGVybmlvbihDdCkscy5zZXRGcm9tVmVjdG9yMyhudCksbi5hdXRvUm90YXRlJiZvPT09aS5OT05FJiZEKGsoKSksbi5lbmFibGVEYW1waW5nPyhzLnRoZXRhKz1sLnRoZXRhKm4uZGFtcGluZ0ZhY3RvcixzLnBoaSs9bC5waGkqbi5kYW1waW5nRmFjdG9yKToocy50aGV0YSs9bC50aGV0YSxzLnBoaSs9bC5waGkpO2xldCBQdD1uLm1pbkF6aW11dGhBbmdsZSxOdD1uLm1heEF6aW11dGhBbmdsZTtyZXR1cm4gaXNGaW5pdGUoUHQpJiZpc0Zpbml0ZShOdCkmJihQdDwtTWF0aC5QST9QdCs9c2U6UHQ+TWF0aC5QSSYmKFB0LT1zZSksTnQ8LU1hdGguUEk/TnQrPXNlOk50Pk1hdGguUEkmJihOdC09c2UpLFB0PD1OdD9zLnRoZXRhPU1hdGgubWF4KFB0LE1hdGgubWluKE50LHMudGhldGEpKTpzLnRoZXRhPXMudGhldGE+KFB0K050KS8yP01hdGgubWF4KFB0LHMudGhldGEpOk1hdGgubWluKE50LHMudGhldGEpKSxzLnBoaT1NYXRoLm1heChuLm1pblBvbGFyQW5nbGUsTWF0aC5taW4obi5tYXhQb2xhckFuZ2xlLHMucGhpKSkscy5tYWtlU2FmZSgpLHMucmFkaXVzKj1jLHMucmFkaXVzPU1hdGgubWF4KG4ubWluRGlzdGFuY2UsTWF0aC5taW4obi5tYXhEaXN0YW5jZSxzLnJhZGl1cykpLG4uZW5hYmxlRGFtcGluZz09PSEwP24udGFyZ2V0LmFkZFNjYWxlZFZlY3Rvcih1LG4uZGFtcGluZ0ZhY3Rvcik6bi50YXJnZXQuYWRkKHUpLG50LnNldEZyb21TcGhlcmljYWwocyksbnQuYXBwbHlRdWF0ZXJuaW9uKFd0KSxDZS5jb3B5KG4udGFyZ2V0KS5hZGQobnQpLG4ub2JqZWN0Lmxvb2tBdChuLnRhcmdldCksbi5lbmFibGVEYW1waW5nPT09ITA/KGwudGhldGEqPTEtbi5kYW1waW5nRmFjdG9yLGwucGhpKj0xLW4uZGFtcGluZ0ZhY3Rvcix1Lm11bHRpcGx5U2NhbGFyKDEtbi5kYW1waW5nRmFjdG9yKSk6KGwuc2V0KDAsMCwwKSx1LnNldCgwLDAsMCkpLGM9MSxofHxmZS5kaXN0YW5jZVRvU3F1YXJlZChuLm9iamVjdC5wb3NpdGlvbik+YXx8OCooMS1hdC5kb3Qobi5vYmplY3QucXVhdGVybmlvbikpPmE/KG4uZGlzcGF0Y2hFdmVudChycGUpLGZlLmNvcHkobi5vYmplY3QucG9zaXRpb24pLGF0LmNvcHkobi5vYmplY3QucXVhdGVybmlvbiksaD0hMSwhMCk6ITF9fSgpLHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe24uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsSXQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaHQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixpZSksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixhciksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpLG4uX2RvbUVsZW1lbnRLZXlFdmVudHMhPT1udWxsJiZuLl9kb21FbGVtZW50S2V5RXZlbnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGZyKX07bGV0IG49dGhpcyxpPXtOT05FOi0xLFJPVEFURTowLERPTExZOjEsUEFOOjIsVE9VQ0hfUk9UQVRFOjMsVE9VQ0hfUEFOOjQsVE9VQ0hfRE9MTFlfUEFOOjUsVE9VQ0hfRE9MTFlfUk9UQVRFOjZ9LG89aS5OT05FLGE9MWUtNixzPW5ldyBfTSxsPW5ldyBfTSxjPTEsdT1uZXcgaixoPSExLGY9bmV3IEx0LHA9bmV3IEx0LGQ9bmV3IEx0LGc9bmV3IEx0LF89bmV3IEx0LHk9bmV3IEx0LHg9bmV3IEx0LGI9bmV3IEx0LFM9bmV3IEx0LEM9W10sUD17fTtmdW5jdGlvbiBrKCl7cmV0dXJuIDIqTWF0aC5QSS82MC82MCpuLmF1dG9Sb3RhdGVTcGVlZH1mdW5jdGlvbiBPKCl7cmV0dXJuIE1hdGgucG93KC45NSxuLnpvb21TcGVlZCl9ZnVuY3Rpb24gRChudCl7bC50aGV0YS09bnR9ZnVuY3Rpb24gQihudCl7bC5waGktPW50fWxldCBJPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwwKSxudC5tdWx0aXBseVNjYWxhcigtV3QpLHUuYWRkKG50KX19KCksTD1mdW5jdGlvbigpe2xldCBudD1uZXcgajtyZXR1cm4gZnVuY3Rpb24oV3QsZmUpe24uc2NyZWVuU3BhY2VQYW5uaW5nPT09ITA/bnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwxKToobnQuc2V0RnJvbU1hdHJpeENvbHVtbihmZSwwKSxudC5jcm9zc1ZlY3RvcnMobi5vYmplY3QudXAsbnQpKSxudC5tdWx0aXBseVNjYWxhcihXdCksdS5hZGQobnQpfX0oKSxSPWZ1bmN0aW9uKCl7bGV0IG50PW5ldyBqO3JldHVybiBmdW5jdGlvbihXdCxmZSl7bGV0IGF0PW4uZG9tRWxlbWVudDtpZihuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKXtsZXQgc2U9bi5vYmplY3QucG9zaXRpb247bnQuY29weShzZSkuc3ViKG4udGFyZ2V0KTtsZXQgUXQ9bnQubGVuZ3RoKCk7UXQqPU1hdGgudGFuKG4ub2JqZWN0LmZvdi8yKk1hdGguUEkvMTgwKSxJKDIqV3QqUXQvYXQuY2xpZW50SGVpZ2h0LG4ub2JqZWN0Lm1hdHJpeCksTCgyKmZlKlF0L2F0LmNsaWVudEhlaWdodCxuLm9iamVjdC5tYXRyaXgpfWVsc2Ugbi5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmE/KEkoV3QqKG4ub2JqZWN0LnJpZ2h0LW4ub2JqZWN0LmxlZnQpL24ub2JqZWN0Lnpvb20vYXQuY2xpZW50V2lkdGgsbi5vYmplY3QubWF0cml4KSxMKGZlKihuLm9iamVjdC50b3Atbi5vYmplY3QuYm90dG9tKS9uLm9iamVjdC56b29tL2F0LmNsaWVudEhlaWdodCxuLm9iamVjdC5tYXRyaXgpKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuIiksbi5lbmFibGVQYW49ITEpfX0oKTtmdW5jdGlvbiBGKG50KXtuLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhP2MvPW50Om4ub2JqZWN0LmlzT3J0aG9ncmFwaGljQ2FtZXJhPyhuLm9iamVjdC56b29tPU1hdGgubWF4KG4ubWluWm9vbSxNYXRoLm1pbihuLm1heFpvb20sbi5vYmplY3Quem9vbSpudCkpLG4ub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSxoPSEwKTooY29uc29sZS53YXJuKCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBkb2xseS96b29tIGRpc2FibGVkLiIpLG4uZW5hYmxlWm9vbT0hMSl9ZnVuY3Rpb24geihudCl7bi5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYT9jKj1udDpuLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYT8obi5vYmplY3Quem9vbT1NYXRoLm1heChuLm1pblpvb20sTWF0aC5taW4obi5tYXhab29tLG4ub2JqZWN0Lnpvb20vbnQpKSxuLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCksaD0hMCk6KGNvbnNvbGUud2FybigiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC4iKSxuLmVuYWJsZVpvb209ITEpfWZ1bmN0aW9uIFUobnQpe2Yuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSl9ZnVuY3Rpb24gVyhudCl7eC5zZXQobnQuY2xpZW50WCxudC5jbGllbnRZKX1mdW5jdGlvbiBaKG50KXtnLnNldChudC5jbGllbnRYLG50LmNsaWVudFkpfWZ1bmN0aW9uIHJ0KG50KXtwLnNldChudC5jbGllbnRYLG50LmNsaWVudFkpLGQuc3ViVmVjdG9ycyhwLGYpLm11bHRpcGx5U2NhbGFyKG4ucm90YXRlU3BlZWQpO2xldCBDdD1uLmRvbUVsZW1lbnQ7RCgyKk1hdGguUEkqZC54L0N0LmNsaWVudEhlaWdodCksQigyKk1hdGguUEkqZC55L0N0LmNsaWVudEhlaWdodCksZi5jb3B5KHApLG4udXBkYXRlKCl9ZnVuY3Rpb24gb3QobnQpe2Iuc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSksUy5zdWJWZWN0b3JzKGIseCksUy55PjA/RihPKCkpOlMueTwwJiZ6KE8oKSkseC5jb3B5KGIpLG4udXBkYXRlKCl9ZnVuY3Rpb24gc3QobnQpe18uc2V0KG50LmNsaWVudFgsbnQuY2xpZW50WSkseS5zdWJWZWN0b3JzKF8sZykubXVsdGlwbHlTY2FsYXIobi5wYW5TcGVlZCksUih5LngseS55KSxnLmNvcHkoXyksbi51cGRhdGUoKX1mdW5jdGlvbiBTdChudCl7bnQuZGVsdGFZPDA/eihPKCkpOm50LmRlbHRhWT4wJiZGKE8oKSksbi51cGRhdGUoKX1mdW5jdGlvbiBidChudCl7bGV0IEN0PSExO3N3aXRjaChudC5jb2RlKXtjYXNlIG4ua2V5cy5VUDpSKDAsbi5rZXlQYW5TcGVlZCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuQk9UVE9NOlIoMCwtbi5rZXlQYW5TcGVlZCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuTEVGVDpSKG4ua2V5UGFuU3BlZWQsMCksQ3Q9ITA7YnJlYWs7Y2FzZSBuLmtleXMuUklHSFQ6Uigtbi5rZXlQYW5TcGVlZCwwKSxDdD0hMDticmVha31DdCYmKG50LnByZXZlbnREZWZhdWx0KCksbi51cGRhdGUoKSl9ZnVuY3Rpb24gTXQoKXtpZihDLmxlbmd0aD09PTEpZi5zZXQoQ1swXS5wYWdlWCxDWzBdLnBhZ2VZKTtlbHNle2xldCBudD0uNSooQ1swXS5wYWdlWCtDWzFdLnBhZ2VYKSxDdD0uNSooQ1swXS5wYWdlWStDWzFdLnBhZ2VZKTtmLnNldChudCxDdCl9fWZ1bmN0aW9uIGx0KCl7aWYoQy5sZW5ndGg9PT0xKWcuc2V0KENbMF0ucGFnZVgsQ1swXS5wYWdlWSk7ZWxzZXtsZXQgbnQ9LjUqKENbMF0ucGFnZVgrQ1sxXS5wYWdlWCksQ3Q9LjUqKENbMF0ucGFnZVkrQ1sxXS5wYWdlWSk7Zy5zZXQobnQsQ3QpfX1mdW5jdGlvbiBLdCgpe2xldCBudD1DWzBdLnBhZ2VYLUNbMV0ucGFnZVgsQ3Q9Q1swXS5wYWdlWS1DWzFdLnBhZ2VZLFd0PU1hdGguc3FydChudCpudCtDdCpDdCk7eC5zZXQoMCxXdCl9ZnVuY3Rpb24gX3QoKXtuLmVuYWJsZVpvb20mJkt0KCksbi5lbmFibGVQYW4mJmx0KCl9ZnVuY3Rpb24gY3QoKXtuLmVuYWJsZVpvb20mJkt0KCksbi5lbmFibGVSb3RhdGUmJk10KCl9ZnVuY3Rpb24gWChudCl7aWYoQy5sZW5ndGg9PTEpcC5zZXQobnQucGFnZVgsbnQucGFnZVkpO2Vsc2V7bGV0IFd0PWJlKG50KSxmZT0uNSoobnQucGFnZVgrV3QueCksYXQ9LjUqKG50LnBhZ2VZK1d0LnkpO3Auc2V0KGZlLGF0KX1kLnN1YlZlY3RvcnMocCxmKS5tdWx0aXBseVNjYWxhcihuLnJvdGF0ZVNwZWVkKTtsZXQgQ3Q9bi5kb21FbGVtZW50O0QoMipNYXRoLlBJKmQueC9DdC5jbGllbnRIZWlnaHQpLEIoMipNYXRoLlBJKmQueS9DdC5jbGllbnRIZWlnaHQpLGYuY29weShwKX1mdW5jdGlvbiBldChudCl7aWYoQy5sZW5ndGg9PT0xKV8uc2V0KG50LnBhZ2VYLG50LnBhZ2VZKTtlbHNle2xldCBDdD1iZShudCksV3Q9LjUqKG50LnBhZ2VYK0N0LngpLGZlPS41KihudC5wYWdlWStDdC55KTtfLnNldChXdCxmZSl9eS5zdWJWZWN0b3JzKF8sZykubXVsdGlwbHlTY2FsYXIobi5wYW5TcGVlZCksUih5LngseS55KSxnLmNvcHkoXyl9ZnVuY3Rpb24gZHQobnQpe2xldCBDdD1iZShudCksV3Q9bnQucGFnZVgtQ3QueCxmZT1udC5wYWdlWS1DdC55LGF0PU1hdGguc3FydChXdCpXdCtmZSpmZSk7Yi5zZXQoMCxhdCksUy5zZXQoMCxNYXRoLnBvdyhiLnkveC55LG4uem9vbVNwZWVkKSksRihTLnkpLHguY29weShiKX1mdW5jdGlvbiBxKG50KXtuLmVuYWJsZVpvb20mJmR0KG50KSxuLmVuYWJsZVBhbiYmZXQobnQpfWZ1bmN0aW9uIHB0KG50KXtuLmVuYWJsZVpvb20mJmR0KG50KSxuLmVuYWJsZVJvdGF0ZSYmWChudCl9ZnVuY3Rpb24gaHQobnQpe24uZW5hYmxlZCE9PSExJiYoQy5sZW5ndGg9PT0wJiYobi5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKG50LnBvaW50ZXJJZCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIix3dCksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsa3QpKSwkdChudCksbnQucG9pbnRlclR5cGU9PT0idG91Y2giP3R0KG50KTplZShudCkpfWZ1bmN0aW9uIHd0KG50KXtuLmVuYWJsZWQhPT0hMSYmKG50LnBvaW50ZXJUeXBlPT09InRvdWNoIj8kKG50KTpMZShudCkpfWZ1bmN0aW9uIGt0KG50KXtoZShudCksQy5sZW5ndGg9PT0wJiYobi5kb21FbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShudC5wb2ludGVySWQpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsd3QpLG4uZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGt0KSksbi5kaXNwYXRjaEV2ZW50KG5wZSksbz1pLk5PTkV9ZnVuY3Rpb24gaWUobnQpe2hlKG50KX1mdW5jdGlvbiBlZShudCl7bGV0IEN0O3N3aXRjaChudC5idXR0b24pe2Nhc2UgMDpDdD1uLm1vdXNlQnV0dG9ucy5MRUZUO2JyZWFrO2Nhc2UgMTpDdD1uLm1vdXNlQnV0dG9ucy5NSURETEU7YnJlYWs7Y2FzZSAyOkN0PW4ubW91c2VCdXR0b25zLlJJR0hUO2JyZWFrO2RlZmF1bHQ6Q3Q9LTF9c3dpdGNoKEN0KXtjYXNlIEswLkRPTExZOmlmKG4uZW5hYmxlWm9vbT09PSExKXJldHVybjtXKG50KSxvPWkuRE9MTFk7YnJlYWs7Y2FzZSBLMC5ST1RBVEU6aWYobnQuY3RybEtleXx8bnQubWV0YUtleXx8bnQuc2hpZnRLZXkpe2lmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO1oobnQpLG89aS5QQU59ZWxzZXtpZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtVKG50KSxvPWkuUk9UQVRFfWJyZWFrO2Nhc2UgSzAuUEFOOmlmKG50LmN0cmxLZXl8fG50Lm1ldGFLZXl8fG50LnNoaWZ0S2V5KXtpZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtVKG50KSxvPWkuUk9UQVRFfWVsc2V7aWYobi5lbmFibGVQYW49PT0hMSlyZXR1cm47WihudCksbz1pLlBBTn1icmVhaztkZWZhdWx0Om89aS5OT05FfW8hPT1pLk5PTkUmJm4uZGlzcGF0Y2hFdmVudChWaHQpfWZ1bmN0aW9uIExlKG50KXtpZihuLmVuYWJsZWQhPT0hMSlzd2l0Y2gobyl7Y2FzZSBpLlJPVEFURTppZihuLmVuYWJsZVJvdGF0ZT09PSExKXJldHVybjtydChudCk7YnJlYWs7Y2FzZSBpLkRPTExZOmlmKG4uZW5hYmxlWm9vbT09PSExKXJldHVybjtvdChudCk7YnJlYWs7Y2FzZSBpLlBBTjppZihuLmVuYWJsZVBhbj09PSExKXJldHVybjtzdChudCk7YnJlYWt9fWZ1bmN0aW9uIGFyKG50KXtuLmVuYWJsZWQ9PT0hMXx8bi5lbmFibGVab29tPT09ITF8fG8hPT1pLk5PTkV8fChudC5wcmV2ZW50RGVmYXVsdCgpLG4uZGlzcGF0Y2hFdmVudChWaHQpLFN0KG50KSxuLmRpc3BhdGNoRXZlbnQobnBlKSl9ZnVuY3Rpb24gZnIobnQpe24uZW5hYmxlZD09PSExfHxuLmVuYWJsZVBhbj09PSExfHxidChudCl9ZnVuY3Rpb24gdHQobnQpe3N3aXRjaChUdChudCksQy5sZW5ndGgpe2Nhc2UgMTpzd2l0Y2gobi50b3VjaGVzLk9ORSl7Y2FzZSBaMC5ST1RBVEU6aWYobi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47TXQoKSxvPWkuVE9VQ0hfUk9UQVRFO2JyZWFrO2Nhc2UgWjAuUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO2x0KCksbz1pLlRPVUNIX1BBTjticmVhaztkZWZhdWx0Om89aS5OT05FfWJyZWFrO2Nhc2UgMjpzd2l0Y2gobi50b3VjaGVzLlRXTyl7Y2FzZSBaMC5ET0xMWV9QQU46aWYobi5lbmFibGVab29tPT09ITEmJm4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO190KCksbz1pLlRPVUNIX0RPTExZX1BBTjticmVhaztjYXNlIFowLkRPTExZX1JPVEFURTppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47Y3QoKSxvPWkuVE9VQ0hfRE9MTFlfUk9UQVRFO2JyZWFrO2RlZmF1bHQ6bz1pLk5PTkV9YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX1vIT09aS5OT05FJiZuLmRpc3BhdGNoRXZlbnQoVmh0KX1mdW5jdGlvbiAkKG50KXtzd2l0Y2goVHQobnQpLG8pe2Nhc2UgaS5UT1VDSF9ST1RBVEU6aWYobi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47WChudCksbi51cGRhdGUoKTticmVhaztjYXNlIGkuVE9VQ0hfUEFOOmlmKG4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO2V0KG50KSxuLnVwZGF0ZSgpO2JyZWFrO2Nhc2UgaS5UT1VDSF9ET0xMWV9QQU46aWYobi5lbmFibGVab29tPT09ITEmJm4uZW5hYmxlUGFuPT09ITEpcmV0dXJuO3EobnQpLG4udXBkYXRlKCk7YnJlYWs7Y2FzZSBpLlRPVUNIX0RPTExZX1JPVEFURTppZihuLmVuYWJsZVpvb209PT0hMSYmbi5lbmFibGVSb3RhdGU9PT0hMSlyZXR1cm47cHQobnQpLG4udXBkYXRlKCk7YnJlYWs7ZGVmYXVsdDpvPWkuTk9ORX19ZnVuY3Rpb24gSXQobnQpe24uZW5hYmxlZCE9PSExJiZudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uICR0KG50KXtDLnB1c2gobnQpfWZ1bmN0aW9uIGhlKG50KXtkZWxldGUgUFtudC5wb2ludGVySWRdO2ZvcihsZXQgQ3Q9MDtDdDxDLmxlbmd0aDtDdCsrKWlmKENbQ3RdLnBvaW50ZXJJZD09bnQucG9pbnRlcklkKXtDLnNwbGljZShDdCwxKTtyZXR1cm59fWZ1bmN0aW9uIFR0KG50KXtsZXQgQ3Q9UFtudC5wb2ludGVySWRdO0N0PT09dm9pZCAwJiYoQ3Q9bmV3IEx0LFBbbnQucG9pbnRlcklkXT1DdCksQ3Quc2V0KG50LnBhZ2VYLG50LnBhZ2VZKX1mdW5jdGlvbiBiZShudCl7bGV0IEN0PW50LnBvaW50ZXJJZD09PUNbMF0ucG9pbnRlcklkP0NbMV06Q1swXTtyZXR1cm4gUFtDdC5wb2ludGVySWRdfW4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsSXQpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsaHQpLG4uZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixpZSksbi5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhcix7cGFzc2l2ZTohMX0pLHRoaXMudXBkYXRlKCl9fTt2YXIgejY9Y2xhc3MgZXh0ZW5kcyBVc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX2xhc3RNZXNoPW51bGwsdGhpcy5fY2xvY2s9bmV3IG1NLHRoaXMuX2NhbnZhc1NpemU9bnVsbCx0aGlzLl9sYXllcnNDb25maWc9bnVsbCx0aGlzLl9ydW5Db2xvcj10fV9pc09iamVjdCh0KXt2YXIgcj10eXBlb2YgdDtyZXR1cm4gcj09Im9iamVjdCImJnQhPW51bGwmJiFBcnJheS5pc0FycmF5KHQpfV9hcHBseURlZmF1bHRzKHQscil7bGV0IG49e30saT1bdCxyXTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IGE9aVtvXTtmb3IobGV0IHMgaW4gYSl7bGV0IGw9cyBpbiBuO3RoaXMuX2lzT2JqZWN0KGFbc10pP25bc109dGhpcy5fYXBwbHlEZWZhdWx0cyhuW3NdfHx7fSxhW3NdKTpsfHwobltzXT1hW3NdKX19cmV0dXJuIG59X2NyZWF0ZUxheWVycygpe2lmKCEoIXRoaXMuX2xheWVyc0NvbmZpZ3x8IXRoaXMuX3NjZW5lfHwhdGhpcy5fbGFzdE1lc2gpKXtpZih0aGlzLl9sYXllcnNDb25maWcuc2hvd0JvdW5kaW5nQm94KXt2YXIgdD1uZXcgeU0odGhpcy5fbGFzdE1lc2gsbmV3IG5lKCJyZ2IoMCwgMCwgMjU1KSIpKTt0aGlzLl9zY2VuZS5hZGQodCl9aWYodGhpcy5fbGF5ZXJzQ29uZmlnLnNob3dBeGVzKXt2YXIgcj1uZXcgdk0oNSk7dGhpcy5fc2NlbmUuYWRkKHIpfX19c2V0TGF5ZXJzQ29uZmlnKHQpe3RoaXMuX2xheWVyc0NvbmZpZz10aGlzLl9hcHBseURlZmF1bHRzKHQsdGhpcy5fbGF5ZXJzQ29uZmlnfHx7fSl9X2NyZWF0ZVdvcmxkKHQscil7dmFyIGEscyxsLGM7aWYodGhpcy5pc1JlYWR5KCkpcmV0dXJuO3RoaXMuX3NjZW5lPW5ldyBxMDt2YXIgbj1uZXcgd01bdC5jYW1lcmEuY2xzXSh0LmNhbWVyYS5mb3YsKChhPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDphLndpZHRoKS8oKHM9dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOnMuaGVpZ2h0KSx0LmNhbWVyYS5uZWFyLHQuY2FtZXJhLmZhcik7dGhpcy5fY2FtZXJhPW4sdGhpcy5pbml0Q2FtZXJhUG9zaXRpb249dm9pZCAwLHQuY2FtZXJhLnBvc2l0aW9uJiYodGhpcy5pbml0Q2FtZXJhUG9zaXRpb249bmV3IGooKS5mcm9tQXJyYXkodC5jYW1lcmEucG9zaXRpb24pKSx0aGlzLmluaXRDYW1lcmFMb29rQXQ9dm9pZCAwLHQuY2FtZXJhLmxvb2tBdCYmKHRoaXMuaW5pdENhbWVyYUxvb2tBdD1uZXcgaigpLmZyb21BcnJheSh0LmNhbWVyYS5sb29rQXQpKTt2YXIgaT1uZXcgWlUobixyKTtsZXQgbz1pO28ubG9va1NwZWVkPS40LG8ubW92ZW1lbnRTcGVlZD0yMCxvLm5vRmx5PSEwLG8ubG9va1ZlcnRpY2FsPSEwLG8uY29uc3RyYWluVmVydGljYWw9ITAsby52ZXJ0aWNhbE1pbj0xLG8udmVydGljYWxNYXg9MixvLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9jYW1lcmFDb250cm9scz1pLHRoaXMuX3JlbmRlcmVyPW5ldyBybih7YW50aWFsaWFzOiEwfSksdGhpcy5fcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyksdGhpcy5fcmVuZGVyZXIuc2V0U2l6ZSgobD10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6bC53aWR0aCwoYz10aGlzLl9jYW52YXNTaXplKT09bnVsbD92b2lkIDA6Yy5oZWlnaHQpLHRoaXMuX3JlbmRlcmVyLnNldENsZWFyQ29sb3IoMTY3NzcyMTUsMSl9X2NsZWFyU2NlbmUoKXt2YXIgdDtpZih0aGlzLl9zY2VuZSlmb3IoO3RoaXMuX3NjZW5lLmNoaWxkcmVuLmxlbmd0aD4wOyl0aGlzLl9zY2VuZS5yZW1vdmUoKHQ9dGhpcy5fc2NlbmUpPT1udWxsP3ZvaWQgMDp0LmNoaWxkcmVuWzBdKX1nZXRSZW5kZXJlcigpe3JldHVybiB0aGlzLl9yZW5kZXJlcn1nZXRDYW1lcmFDb250cm9scygpe3JldHVybiB0aGlzLl9jYW1lcmFDb250cm9sc31pc1JlYWR5KCl7cmV0dXJuISF0aGlzLl9jYW1lcmEmJiEhdGhpcy5fY2FtZXJhQ29udHJvbHN9Z2V0Q2FtZXJhUG9zaXRpb24oKXt2YXIgdCxyLG47cmV0dXJue2ZhcjoodD10aGlzLl9jYW1lcmEpPT1udWxsP3ZvaWQgMDp0LmZhcixwb3NpdGlvbjoocj10aGlzLl9jYW1lcmEpPT1udWxsP3ZvaWQgMDpyLnBvc2l0aW9uLmNsb25lKCksdGFyZ2V0OihuPXRoaXMuX2NhbWVyYUNvbnRyb2xzKT09bnVsbD92b2lkIDA6bi50YXJnZXQuY2xvbmUoKX19c2V0Q2FudmFzU2l6ZSh0KXt0aGlzLl9jYW52YXNTaXplPXR9ZHJhdygpe3ZhciByLG4saSxvO3RoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgmJmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGlvbkZyYW1lSW5kZXgpLHRoaXMuX2NhbWVyYSYmKHRoaXMuX2NhbWVyYS5hc3BlY3Q9KChyPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpyLndpZHRoKS8oKG49dGhpcy5fY2FudmFzU2l6ZSk9PW51bGw/dm9pZCAwOm4uaGVpZ2h0KSx0aGlzLl9jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSx0aGlzLl9yZW5kZXJlci5zZXRTaXplKChpPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDppLndpZHRoLChvPXRoaXMuX2NhbnZhc1NpemUpPT1udWxsP3ZvaWQgMDpvLmhlaWdodCk7bGV0IHQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLl9jbG9jay5nZXREZWx0YSgpO3RoaXMuX2NhbWVyYUNvbnRyb2xzLnVwZGF0ZShhKSx0aGlzLl9hbmltYXRpb25GcmFtZUluZGV4PXJlcXVlc3RBbmltYXRpb25GcmFtZSh0KSx0aGlzLl9yZW5kZXJlci5yZW5kZXIodGhpcy5fc2NlbmUsdGhpcy5fY2FtZXJhKX0uYmluZCh0aGlzKTt0KCl9dXBkYXRlU2NlbmUodCxyKXtsZXQgbj17fTsiY29uZmlnImluIHQmJnQuY29uZmlnJiYobj1KU09OLnBhcnNlKHQuY29uZmlnKSksdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJiZWZvcmVVcGRhdGVTY2VuZSJ9KTtsZXQgaT17Y2FtZXJhOntjbHM6IlBlcnNwZWN0aXZlQ2FtZXJhIixmb3Y6NzUsbmVhcjouMSxmYXI6MWUzfSxsaWdodHM6W3tjbHM6IkFtYmllbnRMaWdodCIsY29sb3I6IiNmZmZmZmYiLGludGVuc2l0eTouNzV9LHtjbHM6IkRpcmVjdGlvbmFsTGlnaHQiLGNvbG9yOiIjZmZmZmZmIixpbnRlbnNpdHk6Ljc1LHBvc2l0aW9uOlswLC0xLDJdfV19O249dGhpcy5fYXBwbHlEZWZhdWx0cyhuLGkpLHRoaXMuX2NyZWF0ZVdvcmxkKG4sciksdGhpcy5fY2xlYXJTY2VuZSgpLHRoaXMuX2NyZWF0ZUxpZ2h0cyh0aGlzLl9zY2VuZSxuKSx0aGlzLl9jcmVhdGVHZW9tZXRyeSh0LG4pLHRoaXMuX2NyZWF0ZUxheWVycygpLHRoaXMuZHJhdygpfXJlc2V0Vmlldyh0KXt2YXIgbixpO2lmKCF0aGlzLmlzUmVhZHkoKSlyZXR1cm47KG49dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsfHxuLnJlc2V0KCk7bGV0IHI7IXQmJnRoaXMuX2xhc3RNZXNoJiYocj10aGlzLl9sYXN0TWVzaCksciYmKHRoaXMuX2ZpdE9iamVjdFRvVmlld3BvcnQociksdGhpcy5fbGFzdE1lc2g9ciksKGk9dGhpcy5fY2FtZXJhQ29udHJvbHMpPT1udWxsfHxpLnVwZGF0ZSgpfV9jcmVhdGVHZW9tZXRyeSh0LHIpe2xldCBuPXQubWVzaDtuLnZlcnRpY2VzJiZuLmZhY2VzJiZuLmZhY2VzLmxlbmd0aD90aGlzLl9jcmVhdGVNZXNoKG4scik6dGhpcy5fY3JlYXRlUG9pbnRDbG91ZChuLHIpfV9jcmVhdGVQb2ludENsb3VkKHQscil7dmFyIGg7bGV0IG49dC52ZXJ0aWNlcyxpPXQuY29sb3JzLG89e21hdGVyaWFsOntjbHM6IlBvaW50c01hdGVyaWFsIixzaXplOi4wMDV9fTtpJiZpLmxlbmd0aD09bi5sZW5ndGg/by5tYXRlcmlhbC52ZXJ0ZXhDb2xvcnM9ITA6by5tYXRlcmlhbC5jb2xvcj10aGlzLl9ydW5Db2xvcjtsZXQgYT10aGlzLl9hcHBseURlZmF1bHRzKHIsbykscz1uZXcgUGUsbD1uZXcgRmxvYXQzMkFycmF5KG4uZmxhdCgpKTtpZihzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKZShsLDMpKSxpJiZpLmxlbmd0aD09bi5sZW5ndGgpe2xldCBmPW5ldyBGbG9hdDMyQXJyYXkoaS5mbGF0KCkpO2ZvcihsZXQgcD0wO3A8Zi5sZW5ndGg7cCsrKWZbcF09ZltwXS8yNTU7cy5zZXRBdHRyaWJ1dGUoImNvbG9yIixuZXcgSmUoZiwzKSl9dmFyIGM9bmV3IHdNW2EubWF0ZXJpYWwuY2xzXShhLm1hdGVyaWFsKSx1PW5ldyBpbShzLGMpOyhoPXRoaXMuX3NjZW5lKT09bnVsbHx8aC5hZGQodSksdGhpcy5fbGFzdE1lc2g9dX1zZXRDYW1lcmFWaWV3cG9pbnQodCxyLG4pe3RoaXMuX3NpbGVudD0hMCx0aGlzLl9jYW1lcmEmJih0aGlzLl9jYW1lcmEuZmFyPXIsdGhpcy5fY2FtZXJhLnBvc2l0aW9uLnNldCh0LngsdC55LHQueiksdGhpcy5fY2FtZXJhLmxvb2tBdChuLmNsb25lKCkpLHRoaXMuX2NhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCkpLHRoaXMuX2NhbWVyYUNvbnRyb2xzJiYodGhpcy5fY2FtZXJhQ29udHJvbHMudGFyZ2V0PW4uY2xvbmUoKSx0aGlzLl9jYW1lcmFDb250cm9scy51cGRhdGUoKSksdGhpcy5fc2lsZW50PSExfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKHQpe3RoaXMuX3NpbGVudHx8dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsZXZlbnQ6dH0pfV9maXRPYmplY3RUb1ZpZXdwb3J0KHQpe3ZhciBwLGQsZztsZXQgbj1uZXcgdGEsaT1uZXcgaixvPW5ldyBqO24uc2V0RnJvbU9iamVjdCh0KSxuLmdldENlbnRlcihpKSxuLmdldFNpemUobyk7bGV0IGE9TWF0aC5tYXgoby54LG8ueSxvLnopLHM9KChwPXRoaXMuX2NhbWVyYSk9PW51bGw/dm9pZCAwOnAuZm92KSooTWF0aC5QSS8xODApLGw9TWF0aC5hYnMoYS8oMipNYXRoLnRhbihzLzIpKSkqMS4yNSxjPW4ubWluLnosdT1jPDA/LWMrbDpsLWMsaD0oZD10aGlzLmluaXRDYW1lcmFQb3NpdGlvbikhPW51bGw/ZDpuZXcgaihpLngsaS55LGwpLGY9KGc9dGhpcy5pbml0Q2FtZXJhTG9va0F0KSE9bnVsbD9nOmk7dGhpcy5zZXRDYW1lcmFWaWV3cG9pbnQoaCx1KjMsZil9X2NyZWF0ZU1lc2godCxyKXt2YXIgZjtsZXQgbj10LnZlcnRpY2VzLGk9dC5mYWNlcyxvPXQuY29sb3JzLGE9dGhpcy5fYXBwbHlEZWZhdWx0cyhyLHttYXRlcmlhbDp7Y2xzOiJNZXNoU3RhbmRhcmRNYXRlcmlhbCIsY29sb3I6IiNhMGEwYTAiLHJvdWdobmVzczoxLG1ldGFsbmVzczowfX0pLHM9bmV3IFBlLGw9bmV3IEZsb2F0MzJBcnJheShuLmZsYXQoKSk7cy5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgSmUobCwzKSk7bGV0IGM9bmV3IFVpbnQxNkFycmF5KGkuZmxhdCgpKTtpZihvJiZvLmxlbmd0aCl7bGV0IHA9by5mbGF0KCk7Zm9yKGxldCBkPTA7ZDxwLmxlbmd0aDtkKyspcFtkXT1wW2RdLzI1NTtzLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKZShuZXcgRmxvYXQzMkFycmF5KHApLDMpKSxhLm1hdGVyaWFsPWEubWF0ZXJpYWx8fHt9LGEubWF0ZXJpYWwudmVydGV4Q29sb3JzPSEwfXMuY2VudGVyKCkscy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSxzLnNldEluZGV4KG5ldyBKZShjLDEpKSxzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCk7bGV0IHU9bmV3IHdNW2EubWF0ZXJpYWwuY2xzXShhLm1hdGVyaWFsKSxoPW5ldyBlaShzLHUpO2guY2FzdFNoYWRvdz0hMCxoLnJlY2VpdmVTaGFkb3c9ITAsKGY9dGhpcy5fc2NlbmUpPT1udWxsfHxmLmFkZChoKSx0aGlzLl9sYXN0TWVzaD1ofV9jcmVhdGVMaWdodHModCxyKXtmb3IobGV0IG49MDtuPHIubGlnaHRzLmxlbmd0aDtuKyspe2xldCBpPXIubGlnaHRzW25dLG89bmV3IHdNW2kuY2xzXShpLmNvbG9yLGkuaW50ZW5zaXR5KTtpLnBvc2l0aW9uJiZvLnBvc2l0aW9uLnNldChpLnBvc2l0aW9uWzBdLGkucG9zaXRpb25bMV0saS5wb3NpdGlvblsyXSksdC5hZGQobyl9fX07dmFyIGtuPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNlbGVjdGVkVmlldz0iYWxsIix0aGlzLmFjdGl2ZT0hMSx0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb249Zm4sdGhpcy5fc3RlcHM9W10sdGhpcy5fbWVzaFZpZXdlckF0dGFjaGVkPSExLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQ9ITEsdGhpcy5faXNNZXNoTG9hZGluZz0hMX1nZXQgX3J1bkNvbG9yKCl7dmFyIHQ9dGhpcy5ydW47cmV0dXJuIHRoaXMuX2NvbG9yU2NhbGVGdW5jdGlvbih0KX1jb25uZWN0ZWRDYWxsYmFjaygpe3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5fZGF0YVByb3ZpZGVyPW5ldyBQUCh0aGlzLnJlcXVlc3RNYW5hZ2VyKTtsZXQgdD1uZXcgejYodGhpcy5fcnVuQ29sb3IpO3QuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JlVXBkYXRlU2NlbmUiLHRoaXMuX3VwZGF0ZUNhbnZhc1NpemUuYmluZCh0aGlzKSksdC5hZGRFdmVudExpc3RlbmVyKCJjYW1lcmFQb3NpdGlvbkNoYW5nZSIsdGhpcy5fb25DYW1lcmFQb3NpdGlvbkNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLl9tZXNoVmlld2VyPXR9cmVsb2FkKCl7IXRoaXMuYWN0aXZlfHwhdGhpcy5fZGF0YVByb3ZpZGVyfHwodGhpcy5faXNNZXNoTG9hZGluZz0hMCx0aGlzLl9kYXRhUHJvdmlkZXIucmVsb2FkKHRoaXMucnVuLHRoaXMudGFnLHRoaXMuc2FtcGxlKS50aGVuKHQ9PnshdHx8KHRoaXMuX3N0ZXBzPXQsdGhpcy5fc3RlcEluZGV4PXQubGVuZ3RoLTEpfSkuY2F0Y2godD0+e2lmKCF0fHwhdC5jb2RlfHx0LmNvZGUhPWR2LkNBTkNFTExFRCl0aHJvdyB0PXR8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcih0KX0pKX1fdXBkYXRlU2NlbmUoKXt2YXIgcjtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDshdHx8IXQubWVzaHx8KHRoaXMuX21lc2hWaWV3ZXIudXBkYXRlU2NlbmUodCx0aGlzKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkfHwodGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluaXRpYWxpemVkPSEwKSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWR8fCgocj10aGlzLnNoYWRvd1Jvb3QpPT1udWxsfHxyLmFwcGVuZENoaWxkKHRoaXMuX21lc2hWaWV3ZXIuZ2V0UmVuZGVyZXIoKS5kb21FbGVtZW50KSx0aGlzLl9tZXNoVmlld2VyQXR0YWNoZWQ9ITApKX1fZGVib3VuY2VkRmV0Y2hNZXNoKCl7dGhpcy5kZWJvdW5jZSgiZmV0Y2hNZXNoIiwoKT0+dGhpcy5fbWF5YmVGZXRjaE1lc2goKSwxMDApfV9tYXliZUZldGNoTWVzaCgpe3JldHVybiBSaSh0aGlzLG51bGwsZnVuY3Rpb24qKCl7bGV0IHQ9dGhpcy5fY3VycmVudFN0ZXA7aWYoISghdHx8dC5tZXNofHx0Lm1lc2hGZXRjaGluZykpe3QubWVzaEZldGNoaW5nPSEwLHRoaXMuX2lzTWVzaExvYWRpbmc9ITA7dHJ5e2xldCByPXlpZWxkIHRoaXMuX2RhdGFQcm92aWRlci5mZXRjaERhdGEodCx0aGlzLnJ1bix0aGlzLnRhZyx0aGlzLnNhbXBsZSk7dC5tZXNoPXJbMF0sdGhpcy5ub3RpZnlQYXRoKCJfY3VycmVudFN0ZXAubWVzaCIpfWNhdGNoKHIpe2lmKCFyfHwhci5jb2RlfHxyLmNvZGUhPWR2LkNBTkNFTExFRCl0aHJvdyByPXJ8fCJSZXNwb25zZSBwcm9jZXNzaW5nIGZhaWxlZC4iLG5ldyBFcnJvcihyKX1maW5hbGx5e3RoaXMuX2lzTWVzaExvYWRpbmc9ITEsdC5tZXNoRmV0Y2hpbmc9ITF9fX0pfV9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlKCl7aWYoIXRoaXMuX21lc2hWaWV3ZXIuaXNSZWFkeSgpKXJldHVybjtsZXQgdD1uZXcgQ3VzdG9tRXZlbnQoImNhbWVyYS1wb3NpdGlvbi1jaGFuZ2UiLHtkZXRhaWw6dGhpcy5fbWVzaFZpZXdlci5nZXRDYW1lcmFQb3NpdGlvbigpfSk7dGhpcy5kaXNwYXRjaEV2ZW50KHQpfXNldENhbWVyYVZpZXdwb2ludCh0LHIsbil7dGhpcy5fbWVzaFZpZXdlci5zZXRDYW1lcmFWaWV3cG9pbnQodCxyLG4pfV91cGRhdGVDYW52YXNTaXplKCl7bGV0IHQ9dGhpcy5vZmZzZXRXaWR0aCxyPXQsbj10aGlzLiQkKCIudGYtbWVzaC1sb2FkZXItaGVhZGVyIikub2Zmc2V0SGVpZ2h0LGk9e3dpZHRoOnQsaGVpZ2h0OnItbn07dGhpcy5fbWVzaFZpZXdlci5zZXRDYW52YXNTaXplKGkpfXJlZHJhdygpe3RoaXMuX3VwZGF0ZUNhbnZhc1NpemUoKSx0aGlzLmlzQ29ubmVjdGVkJiZ0aGlzLl9tZXNoVmlld2VyLmRyYXcoKX1faGFzQXRMZWFzdE9uZVN0ZXAodCl7cmV0dXJuISF0JiZ0Lmxlbmd0aD4wfV9oYXNNdWx0aXBsZVN0ZXBzKHQpe3JldHVybiEhdCYmdC5sZW5ndGg+MX1nZXQgX2N1cnJlbnRTdGVwKCl7dmFyIHQ9dGhpcy5fc3RlcHMscj10aGlzLl9zdGVwSW5kZXg7cmV0dXJuIHRbcl18fG51bGx9Z2V0IF9zdGVwVmFsdWUoKXtsZXQgdD10aGlzLl9jdXJyZW50U3RlcDtyZXR1cm4gdD90LnN0ZXA6MH1nZXQgX2N1cnJlbnRXYWxsVGltZSgpe2xldCB0PXRoaXMuX2N1cnJlbnRTdGVwO3JldHVybiB0P3MyKHQud2FsbF90aW1lKToiIn1fZ2V0TWF4U3RlcEluZGV4KHQpe3JldHVybiB0Lmxlbmd0aC0xfV9nZXRTYW1wbGVUZXh0KHQpe3JldHVybiBTdHJpbmcodCsxKX1faGFzTXVsdGlwbGVTYW1wbGVzKHQpe3JldHVybiB0PjF9X3VwZGF0ZVZpZXcoKXt2YXIgdD10aGlzLnNlbGVjdGVkVmlldzt0aGlzLl9tZXNoVmlld2VyJiZ0PT0iYWxsIiYmdGhpcy5fbWVzaFZpZXdlci5yZXNldFZpZXcoKX10b0xvY2FsZVN0cmluZ18odCl7cmV0dXJuIHQudG9Mb2NhbGVTdHJpbmcoKX19O2tuLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nIGNvbG9yPSJbW19ydW5Db2xvcl1dIiBjbGFzcz0idGYtbWVzaC1sb2FkZXItaGVhZGVyIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVNhbXBsZXMob2ZTYW1wbGVzKV1dIj4KICAgICAgICA8ZGl2PnNhbXBsZTogW1tfZ2V0U2FtcGxlVGV4dChzYW1wbGUpXV0gb2YgW1tvZlNhbXBsZXNdXTwvZGl2PgogICAgICA8L3RlbXBsYXRlPgogICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2hhc0F0TGVhc3RPbmVTdGVwKF9zdGVwcyldXSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1yb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCI+CiAgICAgICAgICAgIHN0ZXAKICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkIgogICAgICAgICAgICAgID5bW3RvTG9jYWxlU3RyaW5nXyhfc3RlcFZhbHVlKV1dPC9zcGFuCiAgICAgICAgICAgID4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZy1sYWJlbCBoZWFkaW5nLXJpZ2h0Ij4KICAgICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19jdXJyZW50V2FsbFRpbWVdXSI+CiAgICAgICAgICAgICAgW1tfY3VycmVudFdhbGxUaW1lXV0KICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFiZWwgcmlnaHQiPgogICAgICAgICAgICA8cGFwZXItc3Bpbm5lci1saXRlIGFjdGl2ZSBoaWRkZW4kPSJbWyFfaXNNZXNoTG9hZGluZ11dIj4KICAgICAgICAgICAgPC9wYXBlci1zcGlubmVyLWxpdGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19oYXNNdWx0aXBsZVN0ZXBzKF9zdGVwcyldXSI+CiAgICAgICAgPGRpdj4KICAgICAgICAgIDxwYXBlci1zbGlkZXIKICAgICAgICAgICAgaWQ9InN0ZXBzIgogICAgICAgICAgICBpbW1lZGlhdGUtdmFsdWU9Int7X3N0ZXBJbmRleH19IgogICAgICAgICAgICBtYXg9IltbX2dldE1heFN0ZXBJbmRleChfc3RlcHMpXV0iCiAgICAgICAgICAgIG1heC1tYXJrZXJzPSJbW19nZXRNYXhTdGVwSW5kZXgoX3N0ZXBzKV1dIgogICAgICAgICAgICBzbmFwcwogICAgICAgICAgICBzdGVwPSIxIgogICAgICAgICAgICB2YWx1ZT0ie3tfc3RlcEluZGV4fX0iCiAgICAgICAgICA+PC9wYXBlci1zbGlkZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICA8L3RmLWNhcmQtaGVhZGluZz4KICAgIDxzdHlsZT4KICAgICAgcGFwZXItc2xpZGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW4tbGVmdDogMXB4OwogICAgICAgIG1hcmdpbi1yaWdodDogMXB4OwogICAgICB9CiAgICAgIC50Zi1tZXNoLWxvYWRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTA1cHg7CiAgICAgIH0KICAgICAgW2hpZGRlbl0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInJ1biIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInRhZyIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrbi5wcm90b3R5cGUsInNhbXBsZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk51bWJlcn0pLHcoImRlc2lnbjp0eXBlIixOdW1iZXIpXSxrbi5wcm90b3R5cGUsIm9mU2FtcGxlcyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrbi5wcm90b3R5cGUsInNlbGVjdGVkVmlldyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiYWN0aXZlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sa24ucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIix6NildLGtuLnByb3RvdHlwZSwiX21lc2hWaWV3ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsUFApXSxrbi5wcm90b3R5cGUsIl9kYXRhUHJvdmlkZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa24ucHJvdG90eXBlLCJfY29sb3JTY2FsZUZ1bmN0aW9uIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXksbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sa24ucHJvdG90eXBlLCJfc3RlcHMiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGtuLnByb3RvdHlwZSwiX3N0ZXBJbmRleCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiX21lc2hWaWV3ZXJBdHRhY2hlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtuLnByb3RvdHlwZSwiX2NhbWVyYVBvc2l0aW9uSW5pdGlhbGl6ZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrbi5wcm90b3R5cGUsIl9pc01lc2hMb2FkaW5nIix2b2lkIDApO0UoW1J0KCJydW4iKSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrbi5wcm90b3R5cGUsIl9ydW5Db2xvciIsbnVsbCk7RShbQnQoInJ1biIsInRhZyIsImFjdGl2ZSIsIl9kYXRhUHJvdmlkZXIiLCJfbWVzaFZpZXdlciIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa24ucHJvdG90eXBlLCJyZWxvYWQiLG51bGwpO0UoW0J0KCJfY3VycmVudFN0ZXAuKiIsIl9tZXNoVmlld2VyIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrbi5wcm90b3R5cGUsIl91cGRhdGVTY2VuZSIsbnVsbCk7RShbQnQoIl9jdXJyZW50U3RlcCIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sa24ucHJvdG90eXBlLCJfZGVib3VuY2VkRmV0Y2hNZXNoIixudWxsKTtFKFtSdCgiX3N0ZXBzIiwiX3N0ZXBJbmRleCIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtuLnByb3RvdHlwZSwiX2N1cnJlbnRTdGVwIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLE51bWJlciksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa24ucHJvdG90eXBlLCJfc3RlcFZhbHVlIixudWxsKTtFKFtSdCgiX2N1cnJlbnRTdGVwIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa24ucHJvdG90eXBlLCJfY3VycmVudFdhbGxUaW1lIixudWxsKTtFKFtCdCgic2VsZWN0ZWRWaWV3IiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxrbi5wcm90b3R5cGUsIl91cGRhdGVWaWV3IixudWxsKTtrbj1FKFt5dCgidGYtbWVzaC1sb2FkZXIiKV0sa24pO3ZhciBwaD1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnJlbG9hZE9uUmVhZHk9ITAsdGhpcy5fdGFnRmlsdGVyPSIuKiIsdGhpcy5fc2VsZWN0ZWRWaWV3PSJhbGwiLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIiwoKT0+e3RoaXMuX2hhbmRsZVdpbmRvd1Jlc2l6ZSgpfSwhMSksdGhpcy5yZWxvYWRPblJlYWR5JiZ0aGlzLnJlbG9hZCgpfV9nZXRBbGxDaGlsZHJlbigpe3ZhciB0O3JldHVybiBBcnJheS5mcm9tKCh0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvckFsbCgidGYtbWVzaC1sb2FkZXIiKSl9X29uQ2FtZXJhUG9zaXRpb25DaGFuZ2VkKHQpe3RoaXMuX3NlbGVjdGVkVmlldz09InNoYXJlIiYmdGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHI9Pnt0LnRhcmdldCE9ciYmci5zZXRDYW1lcmFWaWV3cG9pbnQodC5kZXRhaWwucG9zaXRpb24sdC5kZXRhaWwuZmFyLHQuZGV0YWlsLnRhcmdldCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1yZWxvYWQoKXt0aGlzLl9mZXRjaFRhZ3MoKS50aGVuKHRoaXMuX3JlbG9hZE1lc2hlcy5iaW5kKHRoaXMpKX1faGFuZGxlV2luZG93UmVzaXplKCl7dGhpcy5fZ2V0QWxsQ2hpbGRyZW4oKS5mb3JFYWNoKHQ9Pnt0LnJlZHJhdygpfSl9X2ZldGNoVGFncygpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoIm1lc2giLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKHN4LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1zeC5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLl9kYXRhTm90Rm91bmQ9aS5sZW5ndGg9PT0wLHRoaXMuX3J1blRvVGFnSW5mbz1yfSl9X3JlbG9hZE1lc2hlcygpe3RoaXMuX2dldEFsbENoaWxkcmVuKCkuZm9yRWFjaCh0PT57dC5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtsZXQgaT1zeC5tYXBWYWx1ZXModCxsPT5PYmplY3Qua2V5cyhsKSksbz1RbChpLHIsbik7ZnVuY3Rpb24gYShsKXtsZXQgYz10W2wucnVuXVtsLnRhZ10uc2FtcGxlcztyZXR1cm4gc3gucmFuZ2UoYykubWFwKHU9Pk9iamVjdC5hc3NpZ24oe30sbCx7c2FtcGxlOnUsb2ZTYW1wbGVzOmN9KSl9cmV0dXJuIG8ubWFwKGw9Pk9iamVjdC5hc3NpZ24oe30sbCx7aXRlbXM6W10uY29uY2F0LmFwcGx5KFtdLGwuaXRlbXMubWFwKGEpKX0pKX19O3BoLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBzbG90PSJzaWRlYmFyIiBjbGFzcz0iYWxsLWNvbnRyb2xzIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gdmlldy1jb250cm9sIj4KICAgICAgICAgICAgPGgzIGNsYXNzPSJ0aXRsZSI+UG9pbnQgb2YgdmlldzwvaDM+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWdyb3VwCiAgICAgICAgICAgICAgICBpZD0idmlldy1yYWRpby1ncm91cCIKICAgICAgICAgICAgICAgIHNlbGVjdGVkPSJ7e19zZWxlY3RlZFZpZXd9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItcmFkaW8tYnV0dG9uIGlkPSJhbGwtcmFkaW8tYnV0dG9uIiBuYW1lPSJhbGwiPgogICAgICAgICAgICAgICAgICBEaXNwbGF5IGFsbCBwb2ludHMKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9ImFsbC1yYWRpby1idXR0b24iCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPSJyaWdodCIKICAgICAgICAgICAgICAgICAgb2Zmc2V0PSIwIgogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICBab29tIGFuZCBjZW50ZXIgY2FtZXJhIHRvIGRpc3BsYXkgYWxsIHBvaW50cyBhdCBvbmNlLiBOb3RlLAogICAgICAgICAgICAgICAgICB0aGF0IHNvbWUgcG9pbnRzIGNvdWxkIGJlIHRvbyBmYXIgKGkuZS4gdG9vIHNtYWxsKSB0byBiZQogICAgICAgICAgICAgICAgICB2aXNpYmxlLgogICAgICAgICAgICAgICAgPC9wYXBlci10b29sdGlwPgogICAgICAgICAgICAgICAgPHBhcGVyLXJhZGlvLWJ1dHRvbiBpZD0idXNlci1yYWRpby1idXR0b24iIG5hbWU9InVzZXIiPgogICAgICAgICAgICAgICAgICBDdXJyZW50IHZpZXcKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InVzZXItcmFkaW8tYnV0dG9uIgogICAgICAgICAgICAgICAgICBwb3NpdGlvbj0icmlnaHQiCiAgICAgICAgICAgICAgICAgIG9mZnNldD0iMCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgS2VlcCBjdXJyZW50IGNhbWVyYSBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbC4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICAgIDxwYXBlci1yYWRpby1idXR0b24gaWQ9InNoYXJlLXJhZGlvLWJ1dHRvbiIgbmFtZT0ic2hhcmUiPgogICAgICAgICAgICAgICAgICBTaGFyZSB2aWV3cG9pbnQKICAgICAgICAgICAgICAgIDwvcGFwZXItcmFkaW8tYnV0dG9uPgogICAgICAgICAgICAgICAgPHBhcGVyLXRvb2x0aXAKICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5PSIwIgogICAgICAgICAgICAgICAgICBmb3I9InNoYXJlLXJhZGlvLWJ1dHRvbiIKICAgICAgICAgICAgICAgICAgcG9zaXRpb249InJpZ2h0IgogICAgICAgICAgICAgICAgICBvZmZzZXQ9IjAiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIFNoYXJlIHZpZXdwb2ludCBhbW9uZyBhbGwgY2FtZXJhcy4KICAgICAgICAgICAgICAgIDwvcGFwZXItdG9vbHRpcD4KICAgICAgICAgICAgICA8L3BhcGVyLXJhZGlvLWdyb3VwPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBwb2ludCBjbG91ZCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgWW91IGhhdmVu4oCZdCB3cml0dGVuIGFueSBwb2ludCBjbG91ZCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuCiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtbWVzaC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICBzZWxlY3RlZC12aWV3PSJbW19zZWxlY3RlZFZpZXddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICBzYW1wbGU9IltbaXRlbS5zYW1wbGVdXSIKICAgICAgICAgICAgICAgICAgb2Ytc2FtcGxlcz0iW1tpdGVtLm9mU2FtcGxlc11dIgogICAgICAgICAgICAgICAgICByZXF1ZXN0LW1hbmFnZXI9IltbX3JlcXVlc3RNYW5hZ2VyXV0iCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Zi1tZXNoLWxvYWRlci1jb250YWluZXIiCiAgICAgICAgICAgICAgICAgIG9uLWNhbWVyYS1wb3NpdGlvbi1jaGFuZ2U9Il9vbkNhbWVyYVBvc2l0aW9uQ2hhbmdlZCIKICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDwvdGYtbWVzaC1sb2FkZXI+CiAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICAgICAgPC90Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldz4KICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgPC9kaXY+CiAgICA8L3RmLWRhc2hib2FyZC1sYXlvdXQ+CgogICAgPHN0eWxlIGluY2x1ZGU9ImRhc2hib2FyZC1zdHlsZSI+PC9zdHlsZT4KICAgIDxzdHlsZT4KICAgICAgLm5vLWRhdGEtd2FybmluZyB7CiAgICAgICAgbWF4LXdpZHRoOiA1NDBweDsKICAgICAgICBtYXJnaW46IDgwcHggYXV0byAwIGF1dG87CiAgICAgIH0KICAgICAgcGFwZXItcmFkaW8tYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIH0KICAgICAgLnNpZGViYXItc2VjdGlvbiBoMyB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDVweDsKICAgICAgfQoKICAgICAgLnJ1bnMtc2VsZWN0b3IgewogICAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgfQoKICAgICAgdGYtcnVucy1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgLnZpZXctY29udHJvbCBoMy50aXRsZSB7CiAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5hbGxjb250cm9scyAudmlldy1jb250cm9sIHBhcGVyLXJhZGlvLWdyb3VwIHsKICAgICAgICBtYXJnaW4tdG9wOiA1cHg7CiAgICAgIH0KICAgICAgLyogTGF5b3V0IG11c3QgYmUgaG9yaXpvbnRhbCwgaS5lLiBpdGVtcyBhcnJhbmdlZCBpbiBhIHJvdy4gSWYgaXRlbXMgY2Fubm90IGZpdCBpbiBhIHJvdywKICAgICAgICogdGhleSBzaG91bGQgYmUgbW92ZWQgdG8gbmV4dCBsaW5lLiBBbGwgaXRlbXMgbXVzdCBiZSBzcXVhcmUgYXQgYWxsIHRpbWVzLiBNaW5pbXVtIHNpemUgb2YKICAgICAgICogdGhlIGl0ZW0gaXMgNDgwcHguIFRoaXMgbWVhbnMgdGhhdCBtYXhpbXVtIHNpemUgb2YgdGhlIGl0ZW0gbXVzdCBiZSA0ODBweCArIDQ3OXB4ID0gOTU5cHguCiAgICAgICAqICovCiAgICAgIC5ob3Jpem9udGFsIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIHRmLW1lc2gtbG9hZGVyIHsKICAgICAgICB3aWR0aDogNDgwcHg7CiAgICAgICAgZmxleC1iYXNpczogNDgwcHg7CiAgICAgICAgZmxleC1ncm93OiAxOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwaC5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHBoLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxwaC5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxwaC5wcm90b3R5cGUsIl9kYXRhTm90Rm91bmQiLHZvaWQgMCk7RShbQSh7dHlwZTpTdHJpbmd9KSx3KCJkZXNpZ246dHlwZSIsU3RyaW5nKV0scGgucHJvdG90eXBlLCJfdGFnRmlsdGVyIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nLG5vdGlmeTohMH0pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxwaC5wcm90b3R5cGUsIl9zZWxlY3RlZFZpZXciLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0scGgucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGgucHJvdG90eXBlLCJfY2F0ZWdvcmllcyIsbnVsbCk7cGg9RShbeXQoIm1lc2gtZGFzaGJvYXJkIiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0scGgpO3ZhciBKVT1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5faW5zdGFsbENvbW1hbmQ9InBpcCBpbnN0YWxsIC1VIHRlbnNvcmJvYXJkLXBsdWdpbi1wcm9maWxlIn1fY29weUluc3RhbGxDb21tYW5kKCl7cmV0dXJuIFJpKHRoaXMsbnVsbCxmdW5jdGlvbiooKXtsZXQgdD0oKT0+UmkodGhpcyxudWxsLGZ1bmN0aW9uKigpe3RoaXMuJC5jb21tYW5kVGV4dGFyZWEuc2VsZWN0KCk7dHJ5e3lpZWxkIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuX2luc3RhbGxDb21tYW5kKX1jYXRjaChpKXtpZighZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKX19KSxyPXRoaXMuJC5jb3BpZWRNZXNzYWdlO3RyeXt5aWVsZCB0KCksci5pbm5lclRleHQ9IkNvcGllZC4ifWNhdGNoKG4pe3IuaW5uZXJUZXh0PSJGYWlsZWQgdG8gY29weSB0byBjbGlwYm9hcmQuIn19KX1fcmVtb3ZlQ29waWVkTWVzc2FnZSgpe2xldCB0PXRoaXMuJC5jb3BpZWRNZXNzYWdlO3QuaW5uZXJUZXh0PSIifX07SlUudGVtcGxhdGU9UWAKICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2UiPgogICAgICA8aDM+VGhlIHByb2ZpbGUgcGx1Z2luIGhhcyBtb3ZlZC48L2gzPgogICAgICA8cD4KICAgICAgICBQbGVhc2UgaW5zdGFsbCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIHByb2ZpbGUgcGx1Z2luIGZyb20gUHlQSSBieQogICAgICAgIHJ1bm5pbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGZyb20gdGhlIG1hY2hpbmUgcnVubmluZyBUZW5zb3JCb2FyZDoKICAgICAgPC9wPgogICAgICA8dGV4dGFyZWEKICAgICAgICBpZD0iY29tbWFuZFRleHRhcmVhIgogICAgICAgIHJlYWRvbmx5PSIiCiAgICAgICAgcm93cz0iMSIKICAgICAgICBvbi1ibHVyPSJfcmVtb3ZlQ29waWVkTWVzc2FnZSIKICAgICAgPgpbW19pbnN0YWxsQ29tbWFuZF1dPC90ZXh0YXJlYQogICAgICA+CiAgICAgIDxkaXYgaWQ9ImNvcHlDb250YWluZXIiPgogICAgICAgIDxzcGFuIGlkPSJjb3BpZWRNZXNzYWdlIj48L3NwYW4+CiAgICAgICAgPHBhcGVyLWJ1dHRvbiByYWlzZWQ9IiIgb24tdGFwPSJfY29weUluc3RhbGxDb21tYW5kIgogICAgICAgICAgPkNvcHkgdG8gY2xpcGJvYXJkPC9wYXBlci1idXR0b24KICAgICAgICA+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UgewogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICB9CiAgICAgICNjb21tYW5kVGV4dGFyZWEgewogICAgICAgIG1hcmdpbi10b3A6IDFleDsKICAgICAgICBwYWRkaW5nOiAxZXggMWVtOwogICAgICAgIHJlc2l6ZTogdmVydGljYWw7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgICAgI2NvcHlDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgI2NvcGllZE1lc3NhZ2UgewogICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgICBmbGV4LWdyb3c6IDE7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLEpVLnByb3RvdHlwZSwiX2luc3RhbGxDb21tYW5kIix2b2lkIDApO0pVPUUoW3l0KCJ0Zi1wcm9maWxlLXJlZGlyZWN0LWRhc2hib2FyZCIpXSxKVSk7dmFyIGxtPUVlKE9lKCksMSk7dmFyIHpsPUVlKE9lKCksMSksUVU9RWUod2woKSwxKTt2YXIgbm49Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fcnVuVG9QckN1cnZlRW50cnk9e30sdGhpcy5fcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeT17fSx0aGlzLl9jb2xvclNjYWxlRnVuY3Rpb249e3NjYWxlOmZufSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFuLHRoaXMuX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2Q9KCk9PntsZXQgdD1uZXcgUVUuU2NhbGVzLkxpbmVhcjtyZXR1cm57c2NhbGU6dCxheGlzOm5ldyBRVS5BeGVzLk51bWVyaWModCwiYm90dG9tIiksYWNjZXNzb3I6cj0+ci5yZWNhbGx9fSx0aGlzLl95VmFsdWVBY2Nlc3Nvcj10PT50LnByZWNpc2lvbix0aGlzLl90b29sdGlwQ29sdW1ucz0oKCk9PntsZXQgdD1XdShlMCkscj1uPT5pc05hTihuKT8iTmFOIjp0KG4pO3JldHVyblt7dGl0bGU6IlJ1biIsZXZhbHVhdGU6bj0+bi5kYXRhc2V0Lm1ldGFkYXRhKCkubmFtZX0se3RpdGxlOiJUaHJlc2hvbGQiLGV2YWx1YXRlOm49PnIobi5kYXR1bS50aHJlc2hvbGRzKX0se3RpdGxlOiJQcmVjaXNpb24iLGV2YWx1YXRlOm49PnIobi5kYXR1bS5wcmVjaXNpb24pfSx7dGl0bGU6IlJlY2FsbCIsZXZhbHVhdGU6bj0+cihuLmRhdHVtLnJlY2FsbCl9LHt0aXRsZToiVFAiLGV2YWx1YXRlOm49Pm4uZGF0dW0udHJ1ZV9wb3NpdGl2ZXN9LHt0aXRsZToiRlAiLGV2YWx1YXRlOm49Pm4uZGF0dW0uZmFsc2VfcG9zaXRpdmVzfSx7dGl0bGU6IlROIixldmFsdWF0ZTpuPT5uLmRhdHVtLnRydWVfbmVnYXRpdmVzfSx7dGl0bGU6IkZOIixldmFsdWF0ZTpuPT5uLmRhdHVtLmZhbHNlX25lZ2F0aXZlc31dfSkoKSx0aGlzLl9zZXJpZXNEYXRhRmllbGRzPVsidGhyZXNob2xkcyIsInByZWNpc2lvbiIsInJlY2FsbCIsInRydWVfcG9zaXRpdmVzIiwiZmFsc2VfcG9zaXRpdmVzIiwidHJ1ZV9uZWdhdGl2ZXMiLCJmYWxzZV9uZWdhdGl2ZXMiXSx0aGlzLl9kZWZhdWx0WFJhbmdlPVstLjA1LDEuMDVdLHRoaXMuX2RlZmF1bHRZUmFuZ2U9Wy0uMDUsMS4wNV0sdGhpcy5fcmVxdWVzdERhdGE9KHQscixuKT0+e2xldCBvPXZlKCkucGx1Z2luUm91dGUoInByX2N1cnZlcyIsIi9wcl9jdXJ2ZXMiKTtQcm9taXNlLmFsbCh0Lm1hcChhPT57bGV0IHM9YSxsPXRoaXMudGFnLGM9Q24obyx7dGFnOmwscnVuOnN9KTtyZXR1cm4gdGhpcy5yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KGMpLnRoZW4odT0+dm9pZCByKHtpdGVtOmEsZGF0YTp1fSkpfSkpLmZpbmFsbHkoKCk9PnZvaWQgbigpKX0sdGhpcy5fc21vb3RoaW5nRW5hYmxlZD0hMX1fY3JlYXRlUHJvY2Vzc0RhdGFGdW5jdGlvbigpe3JldHVybih0LHIsbik9Pnt0aGlzLnNldCgiX3J1blRvRGF0YU92ZXJUaW1lIixPYmplY3QuYXNzaWduKHt9LHRoaXMuX3J1blRvRGF0YU92ZXJUaW1lLG4pKX19X2NvbXB1dGVSdW5Db2xvcih0KXtyZXR1cm4gZm4odCl9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuX2F0dGFjaGVkPSEwLHRoaXMucmVsb2FkKCl9X2dldENoYXJ0RGF0YUxvYWRlcigpe3ZhciB0O3JldHVybih0PXRoaXMuc2hhZG93Um9vdCk9PW51bGw/dm9pZCAwOnQucXVlcnlTZWxlY3RvcigidGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciIpfXJlbG9hZCgpe2lmKCEhdGhpcy5fYXR0YWNoZWQpe2lmKHRoaXMucnVucy5sZW5ndGg9PT0wKXt0aGlzLnNldCgiX3J1blRvRGF0YU92ZXJUaW1lIix7fSk7cmV0dXJufXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpLnJlbG9hZCgpfX1fc2V0Q2hhcnREYXRhKCl7dmFyIHQ9dGhpcy5fcnVuVG9QckN1cnZlRW50cnkscj10aGlzLl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5LG49dGhpcy5fc2V0T2ZSZWxldmFudFJ1bnM7emwuZm9yT3duKHQsKGksbyk9PntsZXQgYT1yW29dO2lmKCEoYSYmdFtvXS5zdGVwPT09YS5zdGVwKSl7aWYoIW5bb10pe3RoaXMuX2NsZWFyU2VyaWVzRGF0YShvKTtyZXR1cm59dGhpcy5fdXBkYXRlU2VyaWVzRGF0YUZvclJ1bihvLGkpfX0pfV91cGRhdGVTZXJpZXNEYXRhRm9yUnVuKHQscil7bGV0IG49emwucmVkdWNlKHRoaXMuX3Nlcmllc0RhdGFGaWVsZHMsKGEscyk9PihhW3NdPXJbc10uc2xpY2UoKS5yZXZlcnNlKCksYSkse30pLGk9bmV3IEFycmF5KG5bdGhpcy5fc2VyaWVzRGF0YUZpZWxkc1swXV0ubGVuZ3RoKTtmb3IobGV0IGE9MDthPGkubGVuZ3RoO2ErKylpW2FdPXpsLm1hcFZhbHVlcyhuLHM9PnNbYV0pO2xldCBvPXRoaXMuX2dldENoYXJ0RGF0YUxvYWRlcigpO28uc2V0U2VyaWVzRGF0YSh0LGkpLG8uY29tbWl0Q2hhbmdlcygpfV9jbGVhclNlcmllc0RhdGEodCl7bGV0IHI9dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCk7ci5zZXRTZXJpZXNEYXRhKHQsW10pLHIuY29tbWl0Q2hhbmdlcygpfV91cGRhdGVSdW5Ub1ByQ3VydmVFbnRyeSgpe3ZhciB0PXRoaXMuX3J1blRvRGF0YU92ZXJUaW1lLHI9dGhpcy5ydW5Ub1N0ZXBDYXA7bGV0IG49e307emwuZm9yT3duKHQsKGksbyk9PnshaXx8IWkubGVuZ3RofHwobltvXT10aGlzLl9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcChyW29dLGkpKX0pLHRoaXMuc2V0KCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsdGhpcy5fcnVuVG9QckN1cnZlRW50cnkpLHRoaXMuc2V0KCJfcnVuVG9QckN1cnZlRW50cnkiLG4pfV9ub3RpZnlEYXRhQ2hhbmdlKCl7dmFyIHQ9dGhpcy5fcnVuVG9EYXRhT3ZlclRpbWU7dGhpcy5vbkRhdGFDaGFuZ2UmJnRoaXMub25EYXRhQ2hhbmdlKHQpfV9jb21wdXRlRW50cnlDbG9zZXN0T3JFcXVhbFRvU3RlcENhcCh0LHIpe2xldCBuPU1hdGgubWluKHpsLnNvcnRlZEluZGV4KHIubWFwKGk9Pmkuc3RlcCksdCksci5sZW5ndGgtMSk7cmV0dXJuIHJbbl19Z2V0IF9ydW5zV2l0aFN0ZXBBdmFpbGFibGUoKXt2YXIgdD10aGlzLnJ1bnMscj10aGlzLl9ydW5Ub1ByQ3VydmVFbnRyeTtyZXR1cm4gemwuZmlsdGVyKHQsbj0+cltuXSkuc29ydCgpfWdldCBfc2V0T2ZSZWxldmFudFJ1bnMoKXt2YXIgdD10aGlzLl9ydW5zV2l0aFN0ZXBBdmFpbGFibGU7bGV0IHI9e307cmV0dXJuIHpsLmZvckVhY2godCxuPT57cltuXT0hMH0pLHJ9X2NvbXB1dGVDdXJyZW50U3RlcEZvclJ1bih0LHIpe2xldCBuPXRbcl07cmV0dXJuIG4/bi5zdGVwOm51bGx9X2NvbXB1dGVDdXJyZW50V2FsbFRpbWVGb3JSdW4odCxyKXtsZXQgbj10W3JdO3JldHVybiBuP25ldyBEYXRlKG4ud2FsbF90aW1lKjFlMykudG9TdHJpbmcoKTpudWxsfV90b2dnbGVFeHBhbmRlZCh0KXt0aGlzLnNldCgiX2V4cGFuZGVkIiwhdGhpcy5fZXhwYW5kZWQpLHRoaXMucmVkcmF3KCl9X3Jlc2V0RG9tYWluKCl7dGhpcy5fZ2V0Q2hhcnREYXRhTG9hZGVyKCkucmVzZXREb21haW4oKX1yZWRyYXcoKXt0aGlzLl9nZXRDaGFydERhdGFMb2FkZXIoKS5yZWRyYXcoKX19O25uLnRlbXBsYXRlPVFgCiAgICA8dGYtY2FyZC1oZWFkaW5nCiAgICAgIHRhZz0iW1t0YWddXSIKICAgICAgZGlzcGxheS1uYW1lPSJbW3RhZ01ldGFkYXRhLmRpc3BsYXlOYW1lXV0iCiAgICAgIGRlc2NyaXB0aW9uPSJbW3RhZ01ldGFkYXRhLmRlc2NyaXB0aW9uXV0iCiAgICA+PC90Zi1jYXJkLWhlYWRpbmc+CgogICAgPHRmLWxpbmUtY2hhcnQtZGF0YS1sb2FkZXIKICAgICAgeC1jb21wb25lbnRzLWNyZWF0aW9uLW1ldGhvZD0iW1tfeENvbXBvbmVudHNDcmVhdGlvbk1ldGhvZF1dIgogICAgICB5LXZhbHVlLWFjY2Vzc29yPSJbW195VmFsdWVBY2Nlc3Nvcl1dIgogICAgICB0b29sdGlwLWNvbHVtbnM9IltbX3Rvb2x0aXBDb2x1bW5zXV0iCiAgICAgIGNvbG9yLXNjYWxlPSJbW19jb2xvclNjYWxlRnVuY3Rpb25dXSIKICAgICAgZGVmYXVsdC14LXJhbmdlPSJbW19kZWZhdWx0WFJhbmdlXV0iCiAgICAgIGRlZmF1bHQteS1yYW5nZT0iW1tfZGVmYXVsdFlSYW5nZV1dIgogICAgICBzbW9vdGhpbmctZW5hYmxlZD0iW1tfc21vb3RoaW5nRW5hYmxlZF1dIgogICAgICByZXF1ZXN0LW1hbmFnZXI9IltbcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgZGF0YS10by1sb2FkPSJbW3J1bnNdXSIKICAgICAgZGF0YS1zZXJpZXM9IltbcnVuc11dIgogICAgICBsb2FkLWtleT0iW1t0YWddXSIKICAgICAgcmVxdWVzdC1kYXRhPSJbW19yZXF1ZXN0RGF0YV1dIgogICAgICBsb2FkLWRhdGEtY2FsbGJhY2s9IltbX2NyZWF0ZVByb2Nlc3NEYXRhRnVuY3Rpb24oKV1dIgogICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICA+PC90Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyPgoKICAgIDxkaXYgaWQ9ImJ1dHRvbnMtcm93Ij4KICAgICAgPHBhcGVyLWljb24tYnV0dG9uCiAgICAgICAgc2VsZWN0ZWQkPSJbW19leHBhbmRlZF1dIgogICAgICAgIGljb249ImZ1bGxzY3JlZW4iCiAgICAgICAgb24tdGFwPSJfdG9nZ2xlRXhwYW5kZWQiCiAgICAgID48L3BhcGVyLWljb24tYnV0dG9uPgogICAgICA8cGFwZXItaWNvbi1idXR0b24KICAgICAgICBpY29uPSJzZXR0aW5ncy1vdmVyc2NhbiIKICAgICAgICBvbi10YXA9Il9yZXNldERvbWFpbiIKICAgICAgICB0aXRsZT0iUmVzZXQgYXhlcyB0byBbMCwgMV0uIgogICAgICA+PC9wYXBlci1pY29uLWJ1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9InN0ZXAtbGVnZW5kIj4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTdGVwQXZhaWxhYmxlXV0iIGFzPSJydW4iPgogICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1yb3ciPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0iY29sb3ItYm94IgogICAgICAgICAgICBzdHlsZT0iYmFja2dyb3VuZDogW1tfY29tcHV0ZVJ1bkNvbG9yKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICBbW3J1bl1dIGlzIGF0CiAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RlcC1sYWJlbC10ZXh0Ij4KICAgICAgICAgICAgc3RlcCBbW19jb21wdXRlQ3VycmVudFN0ZXBGb3JSdW4oX3J1blRvUHJDdXJ2ZUVudHJ5LCBydW4pXV0gPC9zcGFuCiAgICAgICAgICA+PGJyIC8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0id2FsbC10aW1lLWxhYmVsLXRleHQiPgogICAgICAgICAgICAoW1tfY29tcHV0ZUN1cnJlbnRXYWxsVGltZUZvclJ1bihfcnVuVG9QckN1cnZlRW50cnksIHJ1bildXSkKICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZW1wbGF0ZT4KICAgIDwvZGl2PgoKICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB3aWR0aDogNTAwcHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI1cHg7CiAgICAgIH0KICAgICAgOmhvc3QoW19leHBhbmRlZF0pIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICB0Zi1saW5lLWNoYXJ0LWRhdGEtbG9hZGVyIHsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICA6aG9zdChbX2V4cGFuZGVkXSkgdGYtbGluZS1jaGFydC1kYXRhLWxvYWRlciB7CiAgICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b24gewogICAgICAgIGNvbG9yOiAjMjE5NmYzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMCU7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQogICAgICAjYnV0dG9ucy1yb3cgcGFwZXItaWNvbi1idXR0b25bc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10Yi11aS1saWdodC1hY2NlbnQpOwogICAgICB9CiAgICAgICNzdGVwLWxlZ2VuZCB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LXNpemU6IDAuOGVtOwogICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMCAwIDAgMTBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAubGVnZW5kLXJvdyB7CiAgICAgICAgbWFyZ2luOiA1cHggMCA1cHggMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuY29sb3ItYm94IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQogICAgICAuc3RlcC1sYWJlbC10ZXh0IHsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQogICAgICAud2FsbC10aW1lLWxhYmVsLXRleHQgewogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtc2l6ZTogMC44ZW07CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sbm4ucHJvdG90eXBlLCJydW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLG5uLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwidGFnTWV0YWRhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJydW5Ub1N0ZXBDYXAiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsQWUpXSxubi5wcm90b3R5cGUsInJlcXVlc3RNYW5hZ2VyIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJhY3RpdmUiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLHJlZmxlY3RUb0F0dHJpYnV0ZTohMH0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sbm4ucHJvdG90eXBlLCJfZXhwYW5kZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfcnVuVG9QckN1cnZlRW50cnkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfcHJldmlvdXNSdW5Ub1ByQ3VydmVFbnRyeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxubi5wcm90b3R5cGUsIl9ydW5Ub0RhdGFPdmVyVGltZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbildLG5uLnByb3RvdHlwZSwib25EYXRhQ2hhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX2NvbG9yU2NhbGVGdW5jdGlvbiIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLG5uLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLG5uLnByb3RvdHlwZSwiX2F0dGFjaGVkIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLG5uLnByb3RvdHlwZSwiX3hDb21wb25lbnRzQ3JlYXRpb25NZXRob2QiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sbm4ucHJvdG90eXBlLCJfeVZhbHVlQWNjZXNzb3IiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLG5uLnByb3RvdHlwZSwiX3Rvb2x0aXBDb2x1bW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9zZXJpZXNEYXRhRmllbGRzIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9kZWZhdWx0WFJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6QXJyYXl9KSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpXSxubi5wcm90b3R5cGUsIl9kZWZhdWx0WVJhbmdlIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKV0sbm4ucHJvdG90eXBlLCJfcmVxdWVzdERhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxubi5wcm90b3R5cGUsIl9zbW9vdGhpbmdFbmFibGVkIix2b2lkIDApO0UoW0J0KCJydW5zIiwidGFnIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsInJlbG9hZCIsbnVsbCk7RShbQnQoIl9ydW5Ub1ByQ3VydmVFbnRyeSIsIl9wcmV2aW91c1J1blRvUHJDdXJ2ZUVudHJ5IiwiX3NldE9mUmVsZXZhbnRSdW5zIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsIl9zZXRDaGFydERhdGEiLG51bGwpO0UoW0J0KCJfcnVuVG9EYXRhT3ZlclRpbWUiLCJydW5Ub1N0ZXBDYXAiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLG5uLnByb3RvdHlwZSwiX3VwZGF0ZVJ1blRvUHJDdXJ2ZUVudHJ5IixudWxsKTtFKFtCdCgiX3J1blRvRGF0YU92ZXJUaW1lIiksdygiZGVzaWduOnR5cGUiLEZ1bmN0aW9uKSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pLHcoImRlc2lnbjpyZXR1cm50eXBlIix2b2lkIDApXSxubi5wcm90b3R5cGUsIl9ub3RpZnlEYXRhQ2hhbmdlIixudWxsKTtFKFtSdCgicnVucyIsIl9ydW5Ub1ByQ3VydmVFbnRyeSIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sbm4ucHJvdG90eXBlLCJfcnVuc1dpdGhTdGVwQXZhaWxhYmxlIixudWxsKTtFKFtSdCgiX3J1bnNXaXRoU3RlcEF2YWlsYWJsZSIpLHcoImRlc2lnbjp0eXBlIixPYmplY3QpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLG5uLnByb3RvdHlwZSwiX3NldE9mUmVsZXZhbnRSdW5zIixudWxsKTtubj1FKFt5dCgidGYtcHItY3VydmUtY2FyZCIpXSxubik7dmFyIFNNPUVlKE9lKCksMSk7dmFyIGVwPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3J1blRvU3RlcEluZGV4PXt9fV9jb21wdXRlQ29sb3JGb3JSdW4odCl7cmV0dXJuIGZuKHQpfV9jb21wdXRlVGltZVRleHRGb3JSdW4odCxyLG4saSl7bGV0IG89cltuXTtpZighU00uaXNOdW1iZXIobykpcmV0dXJuIiI7bGV0IGE9dFtuXTtpZighYSlyZXR1cm4iIjtsZXQgcz1hW29dW2ldO2lmKGk9PT0ic3RlcCIpcmV0dXJuYHN0ZXAgJHtzfWA7aWYoaT09PSJyZWxhdGl2ZSIpcmV0dXJuIHM8MT9gJHsocyoxZTMpLnRvRml4ZWQoMil9IG1zYDpgJHtzLnRvRml4ZWQoMil9IHNgO2lmKGk9PT0id2FsbF90aW1lIilyZXR1cm4gbmV3IERhdGUocyoxZTMpLnRvU3RyaW5nKCk7dGhyb3cgbmV3IEVycm9yKGBUaGUgZGlzcGxheSB0eXBlIG9mICR7aX0gaXMgbm90IHJlY29nbml6ZWQuYCl9X3NsaWRlclZhbHVlQ2hhbmdlZCh0KXtsZXQgcj10LnRhcmdldC5kYXRhc2V0LnJ1bixuPXQudGFyZ2V0LmltbWVkaWF0ZVZhbHVlLGk9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7aXNOYU4obik/ZGVsZXRlIGlbcl06aVtyXT10LnRhcmdldC5pbW1lZGlhdGVWYWx1ZSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1pfV9jb21wdXRlTWF4U3RlcEluZGV4Rm9yUnVuKHQscil7bGV0IG49dFtyXTtyZXR1cm4gbiYmbi5sZW5ndGg/bi5sZW5ndGgtMTowfV91cGRhdGVTdGVwc0Zvck5ld1J1bnMoKXt2YXIgdD10aGlzLnJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXM7bGV0IHI9T2JqZWN0LmFzc2lnbih7fSx0aGlzLl9ydW5Ub1N0ZXBJbmRleCk7U00uZm9yT3duKHQsKG4saSk9PntTTS5pc051bWJlcihyW2ldKXx8KHJbaV09bi5sZW5ndGgtMSl9KSx0aGlzLl9ydW5Ub1N0ZXBJbmRleD1yfV9nZXRTdGVwKHQscil7cmV0dXJuIHRoaXMuX3J1blRvU3RlcEluZGV4P3RoaXMuX3J1blRvU3RlcEluZGV4W3JdOjB9X2NvbXB1dGVSdW5Ub1N0ZXAodCxyKXtsZXQgbj17fTtyZXR1cm4gU00uZm9yT3duKHIsKGksbyk9PntsZXQgYT10W29dOyFhfHwobltvXT1hW2ldLnN0ZXApfSksbn1nZXQgX3J1bnNXaXRoU2xpZGVycygpe3ZhciB0PXRoaXMucnVucyxyPXRoaXMucnVuVG9BdmFpbGFibGVUaW1lRW50cmllcztyZXR1cm4gdC5maWx0ZXIobj0+cltuXSl9fTtlcC50ZW1wbGF0ZT1RYAogICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tfcnVuc1dpdGhTbGlkZXJzXV0iIGFzPSJydW4iPgogICAgICA8ZGl2IGNsYXNzPSJydW4td2lkZ2V0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJydW4tZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icnVuLWNvbG9yLWJveCIKICAgICAgICAgICAgc3R5bGU9ImJhY2tncm91bmQ6W1tfY29tcHV0ZUNvbG9yRm9yUnVuKHJ1bildXTsiCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJydW4tdGV4dCI+W1tydW5dXTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InN0ZXAtZGlzcGxheS1jb250YWluZXIiPgogICAgICAgICAgW1tfY29tcHV0ZVRpbWVUZXh0Rm9yUnVuKHJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMsIF9ydW5Ub1N0ZXBJbmRleCwKICAgICAgICAgIHJ1biwgdGltZURpc3BsYXlUeXBlKV1dCiAgICAgICAgPC9kaXY+CiAgICAgICAgPHBhcGVyLXNsaWRlcgogICAgICAgICAgZGF0YS1ydW4kPSJbW3J1bl1dIgogICAgICAgICAgc3RlcD0iMSIKICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgIG1heD0iW1tfY29tcHV0ZU1heFN0ZXBJbmRleEZvclJ1bihydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBydW4pXV0iCiAgICAgICAgICB2YWx1ZT0iW1tfZ2V0U3RlcChfcnVuVG9TdGVwSW5kZXgsIHJ1bildXSIKICAgICAgICAgIG9uLWltbWVkaWF0ZS12YWx1ZS1jaGFuZ2VkPSJfc2xpZGVyVmFsdWVDaGFuZ2VkIgogICAgICAgID48L3BhcGVyLXNsaWRlcj4KICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICAucnVuLXdpZGdldCB7CiAgICAgICAgbWFyZ2luOiAxMHB4IDAgMCAwOwogICAgICB9CiAgICAgIHBhcGVyLXNsaWRlciB7CiAgICAgICAgbWFyZ2luOiAtOHB4IDAgMCAtMTVweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAuc3RlcC1kaXNwbGF5LWNvbnRhaW5lciB7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBtYXJnaW46IDAgMTVweCAwIDA7CiAgICAgIH0KICAgICAgLnJ1bi10ZXh0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KICAgICAgLnJ1bi1jb2xvci1ib3ggewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGVwLnByb3RvdHlwZSwicnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlcC5wcm90b3R5cGUsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwLGNvbXB1dGVkOiJfY29tcHV0ZVJ1blRvU3RlcChydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzLCBfcnVuVG9TdGVwSW5kZXgpIn0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlcC5wcm90b3R5cGUsInJ1blRvU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxlcC5wcm90b3R5cGUsInRpbWVEaXNwbGF5VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxlcC5wcm90b3R5cGUsIl9ydW5Ub1N0ZXBJbmRleCIsdm9pZCAwKTtFKFtCdCgicnVuVG9BdmFpbGFibGVUaW1lRW50cmllcyIpLHcoImRlc2lnbjp0eXBlIixGdW5jdGlvbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKSx3KCJkZXNpZ246cmV0dXJudHlwZSIsdm9pZCAwKV0sZXAucHJvdG90eXBlLCJfdXBkYXRlU3RlcHNGb3JOZXdSdW5zIixudWxsKTtFKFtSdCgicnVucyIsInJ1blRvQXZhaWxhYmxlVGltZUVudHJpZXMiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGVwLnByb3RvdHlwZSwiX3J1bnNXaXRoU2xpZGVycyIsbnVsbCk7ZXA9RShbeXQoInRmLXByLWN1cnZlLXN0ZXBzLXNlbGVjdG9yIildLGVwKTt2YXIga289Y2xhc3MgZXh0ZW5kcyBHdChtdCl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl90aW1lRGlzcGxheVR5cGU9InN0ZXAiLHRoaXMuX3NlbGVjdGVkUnVucz1bXSx0aGlzLl9ydW5Ub1RhZ0luZm89e30sdGhpcy5fdGFnVG9SdW5Ub0RhdGE9e30sdGhpcy5fZ2V0Q2F0ZWdvcnlJdGVtS2V5PXQ9PnQudGFnLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx0aGlzLl9zdGVwPTB9cmVhZHkoKXtzdXBlci5yZWFkeSgpLHRoaXMucmVsb2FkT25SZWFkeSYmdGhpcy5yZWxvYWQoKX1yZWxvYWQoKXtQcm9taXNlLmFsbChbdGhpcy5fZmV0Y2hUYWdzKCldKS50aGVuKCgpPT57dGhpcy5fcmVsb2FkQ2FyZHMoKX0pfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfV9mZXRjaFRhZ3MoKXtsZXQgdD12ZSgpLnBsdWdpblJvdXRlKCJwcl9jdXJ2ZXMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKGxtLmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1sbS5tYXBWYWx1ZXMocixvPT5sbS5rZXlzKG8pKSxpPSRpKG4pO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixpLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWdJbmZvIixyKSx0aGlzLmFzeW5jKCgpPT57dGhpcy5zZXQoIl9jYXRlZ29yaWVzRG9tUmVhZHkiLCEwKX0pfSl9X3JlbG9hZENhcmRzKCl7dmFyIHQ7bG0uZm9yRWFjaCgodD10aGlzLnJvb3QpPT1udWxsP3ZvaWQgMDp0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXByLWN1cnZlLWNhcmQiKSxyPT57ci5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnSW5mbyxyPXRoaXMuX3NlbGVjdGVkUnVucyxuPXRoaXMuX3RhZ0ZpbHRlcjtsZXQgaT1sbS5tYXBWYWx1ZXModCxvPT5PYmplY3Qua2V5cyhvKSk7cmV0dXJuIHVFKGkscixuKX1nZXQgX3JlbGV2YW50U2VsZWN0ZWRSdW5zKCl7dmFyIHQ9dGhpcy5fc2VsZWN0ZWRSdW5zLHI9dGhpcy5fcnVuVG9UYWdJbmZvO3JldHVybiB0LmZpbHRlcihuPT5yW25dKX1fdGFnTWV0YWRhdGEodCxyLG4pe2xldCBpPXt9O3IuZm9yRWFjaChhPT57aVthXT10W2FdW25dfSk7bGV0IG89bi5yZXBsYWNlKC9cL3ByX2N1cnZlcyQvLCIiKTtyZXR1cm4gaVIoaSxvKX1fY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKHQpe3JldHVybiByPT57dGhpcy5zZXQoIl90YWdUb1J1blRvRGF0YSIsTXgoS2woe30sdGhpcy5fdGFnVG9SdW5Ub0RhdGEpLHtbdF06cn0pKX19Z2V0IF9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzKCl7dmFyIHQ9dGhpcy5fdGFnVG9SdW5Ub0RhdGE7bGV0IHI9e307Zm9yKGxldFtpLG9db2YgT2JqZWN0LmVudHJpZXModCkpZm9yKGxldFthXW9mIE9iamVjdC5lbnRyaWVzKG8pKShyW2FdPT1udWxsfHxpPHJbYV0pJiYoclthXT1pKTtsZXQgbj17fTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyhyKSl7bGV0IGE9dFtvXVtpXTtuW2ldPWEubWFwKHM9Pih7c3RlcDpzLnN0ZXAsd2FsbF90aW1lOnMud2FsbF90aW1lLHJlbGF0aXZlOnMud2FsbF90aW1lLWFbMF0ud2FsbF90aW1lfSkpfXJldHVybiBufX07a28udGVtcGxhdGU9UWAKICAgIDx0Zi1kYXNoYm9hcmQtbGF5b3V0PgogICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyIiBzbG90PSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9InRpbWUtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJUaW1lIERpc3BsYXkgVHlwZSIKICAgICAgICAgICAgICBzZWxlY3RlZC1pZD0ie3tfdGltZURpc3BsYXlUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24+CiAgICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAtLT4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbj4KICAgICAgICAgICAgICA8IS0tCiAgICAgICAgICAgIC0tPgogICAgICAgICAgICAgIDxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iIGlkPSJzdGVwcy1zZWxlY3Rvci1jb250YWluZXIiPgogICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1zdGVwcy1zZWxlY3RvcgogICAgICAgICAgICAgICAgcnVucz0iW1tfcmVsZXZhbnRTZWxlY3RlZFJ1bnNdXSIKICAgICAgICAgICAgICAgIHJ1bi10by1zdGVwPSJ7e19ydW5Ub1N0ZXB9fSIKICAgICAgICAgICAgICAgIHJ1bi10by1hdmFpbGFibGUtdGltZS1lbnRyaWVzPSJbW19ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzXV0iCiAgICAgICAgICAgICAgICB0aW1lLWRpc3BsYXktdHlwZT0iW1tfdGltZURpc3BsYXlUeXBlXV0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgIDwvdGYtcHItY3VydmUtc3RlcHMtc2VsZWN0b3I+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gcHJlY2lzaW9u4oCTcmVjYWxsIGN1cnZlIGRhdGEgd2FzIGZvdW5kLjwvaDM+CiAgICAgICAgICAgIDxwPlByb2JhYmxlIGNhdXNlczo8L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICBZb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHByZWNpc2lvbuKAk3JlY2FsbCBkYXRhIHRvIHlvdXIgZXZlbnQKICAgICAgICAgICAgICAgIGZpbGVzLgogICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgPGxpPlRlbnNvckJvYXJkIGNhbuKAmXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1wci1jdXJ2ZS1jYXJkCiAgICAgICAgICAgICAgICAgIGFjdGl2ZT0iW1thY3RpdmVdXSIKICAgICAgICAgICAgICAgICAgcnVucz0iW1tpdGVtLnJ1bnNdXSIKICAgICAgICAgICAgICAgICAgdGFnPSJbW2l0ZW0udGFnXV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoX3J1blRvVGFnSW5mbywgaXRlbS5ydW5zLCBpdGVtLnRhZyldXSIKICAgICAgICAgICAgICAgICAgcmVxdWVzdC1tYW5hZ2VyPSJbW19yZXF1ZXN0TWFuYWdlcl1dIgogICAgICAgICAgICAgICAgICBydW4tdG8tc3RlcC1jYXA9IltbX3J1blRvU3RlcF1dIgogICAgICAgICAgICAgICAgICBvbi1kYXRhLWNoYW5nZT0iW1tfY3JlYXRlRGF0YUNoYW5nZUNhbGxiYWNrKGl0ZW0udGFnKV1dIgogICAgICAgICAgICAgICAgPjwvdGYtcHItY3VydmUtY2FyZD4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KCiAgICA8c3R5bGUgaW5jbHVkZT0iZGFzaGJvYXJkLXN0eWxlIj48L3N0eWxlPgogICAgPHN0eWxlPgogICAgICAubm8tZGF0YS13YXJuaW5nIHsKICAgICAgICBtYXgtd2lkdGg6IDU0MHB4OwogICAgICAgIG1hcmdpbjogODBweCBhdXRvIDAgYXV0bzsKICAgICAgfQoKICAgICAgLyoqIERvIG5vdCBsZXQgdGhlIHN0ZXBzIHNlbGVjdG9yIG9jY2x1ZGUgdGhlIHJ1biBzZWxlY3Rvci4gKi8KICAgICAgI3N0ZXBzLXNlbGVjdG9yLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogNjAlOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgYDtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwicmVsb2FkT25SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrby5wcm90b3R5cGUsIl90aW1lRGlzcGxheVR5cGUiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGtvLnByb3RvdHlwZSwiX3NlbGVjdGVkUnVucyIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxrby5wcm90b3R5cGUsIl9ydW5Ub1RhZ0luZm8iLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfdGFnVG9SdW5Ub0RhdGEiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3Qsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLGtvLnByb3RvdHlwZSwiX3J1blRvU3RlcCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLGtvLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSxrby5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxrby5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sa28ucHJvdG90eXBlLCJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sa28ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwfSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLGtvLnByb3RvdHlwZSwiX3N0ZXAiLHZvaWQgMCk7RShbUnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsQXJyYXkpLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSldLGtvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLG51bGwpO0UoW1J0KCJfc2VsZWN0ZWRSdW5zIiwiX3J1blRvVGFnSW5mbyIpLHcoImRlc2lnbjp0eXBlIixBcnJheSksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sa28ucHJvdG90eXBlLCJfcmVsZXZhbnRTZWxlY3RlZFJ1bnMiLG51bGwpO0UoW1J0KCJfdGFnVG9SdW5Ub0RhdGEiKSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxrby5wcm90b3R5cGUsIl9ydW5Ub0F2YWlsYWJsZVRpbWVFbnRyaWVzIixudWxsKTtrbz1FKFt5dCgidGYtcHItY3VydmUtZGFzaGJvYXJkIildLGtvKTt2YXIgRjY9RWUoT2UoKSwxKTt2YXIgdW89Y2xhc3MgZXh0ZW5kcyBHdChuYil7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVsb2FkT25SZWFkeT0hMCx0aGlzLl9zaG93RG93bmxvYWRMaW5rcz12cCgiX3Nob3dEb3dubG9hZExpbmtzIix7ZGVmYXVsdFZhbHVlOiExLHVzZUxvY2FsU3RvcmFnZTohMH0pLmNhbGwodGhpcyksdGhpcy5fc21vb3RoaW5nV2VpZ2h0PWdFKCJfc21vb3RoaW5nV2VpZ2h0Iix7ZGVmYXVsdFZhbHVlOi42fSkuY2FsbCh0aGlzKSx0aGlzLl9pZ25vcmVZT3V0bGllcnM9dnAoIl9pZ25vcmVZT3V0bGllcnMiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSkuY2FsbCh0aGlzKSx0aGlzLl94VHlwZT1FZC5TVEVQLHRoaXMuX3NlbGVjdGVkUnVucz1bXSx0aGlzLl90YWdGaWx0ZXI9IiIsdGhpcy5fY2F0ZWdvcmllcz1bXSx0aGlzLl9nZXRDYXRlZ29yeUl0ZW1LZXk9dD0+dC50YWcsdGhpcy5fcmVxdWVzdE1hbmFnZXI9bmV3IEFlKDUwKSx0aGlzLl9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyPXhwKCJfc2hvd0Rvd25sb2FkTGlua3MiLHtkZWZhdWx0VmFsdWU6ITEsdXNlTG9jYWxTdG9yYWdlOiEwfSksdGhpcy5fc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXI9X0UoIl9zbW9vdGhpbmdXZWlnaHQiLHtkZWZhdWx0VmFsdWU6LjZ9KSx0aGlzLl9pZ25vcmVZT3V0bGllcnNPYnNlcnZlcj14cCgiX2lnbm9yZVlPdXRsaWVycyIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KX1nZXQgX3Ntb290aGluZ0VuYWJsZWQoKXt2YXIgdD10aGlzLl9zbW9vdGhpbmdXZWlnaHQ7cmV0dXJuIHQ+MH1fZ2V0Q2F0ZWdvcnlLZXkodCl7cmV0dXJuIHQubWV0YWRhdGEudHlwZT09TmEuU0VBUkNIX1JFU1VMVFM/IiI6dC5uYW1lfV9zaG91bGRPcGVuKHQpe3JldHVybiB0PD0yfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZENoYXJ0cygpfSl9X2ZldGNoVGFncygpe2xldCB0PXZlKCkucGx1Z2luUm91dGUoInNjYWxhcnMiLCIvdGFncyIpO3JldHVybiB0aGlzLl9yZXF1ZXN0TWFuYWdlci5yZXF1ZXN0KHQpLnRoZW4ocj0+e2lmKEY2LmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZ0luZm8pKXJldHVybjtsZXQgbj1GNi5tYXBWYWx1ZXMocixvPT5PYmplY3Qua2V5cyhvKSksaT0kaShuKTt0aGlzLnNldCgiX2RhdGFOb3RGb3VuZCIsaS5sZW5ndGg9PT0wKSx0aGlzLnNldCgiX3J1blRvVGFnSW5mbyIsciksdGhpcy5hc3luYygoKT0+e3RoaXMuc2V0KCJfY2F0ZWdvcmllc0RvbVJlYWR5IiwhMCl9KX0pfV9yZWxvYWRDaGFydHMoKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXNjYWxhci1jYXJkIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfV91cGRhdGVDYXRlZ29yaWVzKCl7dmFyIHQ9dGhpcy5fcnVuVG9UYWdJbmZvLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO2xldCBpLG89bixhPUY2Lm1hcFZhbHVlcyh0LHM9Pk9iamVjdC5rZXlzKHMpKTtpPXVFKGEscixvKSxpLmZvckVhY2gocz0+e3MuaXRlbXM9cy5pdGVtcy5tYXAobD0+KHt0YWc6bC50YWcsc2VyaWVzOmwucnVucy5tYXAoYz0+KHtydW46Yyx0YWc6bC50YWd9KSl9KSl9KSx0aGlzLnVwZGF0ZUFycmF5UHJvcCgiX2NhdGVnb3JpZXMiLGksdGhpcy5fZ2V0Q2F0ZWdvcnlLZXkpfV90YWdNZXRhZGF0YSh0LHIsbil7bGV0IGk9dC5uYW1lLG89bi50YWcsYT17fTtuLnNlcmllcy5mb3JFYWNoKCh7cnVuOnV9KT0+e2FbdV09clt1XVtvXX0pO2xldCBzPW8ucmVwbGFjZSgvXC9zY2FsYXJfc3VtbWFyeSQvLCIiKSx7ZGVzY3JpcHRpb246bCxkaXNwbGF5TmFtZTpjfT1pUihhLHMpO3JldHVybiB0Lm1ldGFkYXRhLnR5cGU9PU5hLlBSRUZJWF9HUk9VUCYmYy5zdGFydHNXaXRoKGkrIi8iKSYmKGM9Yy5zbGljZShpLmxlbmd0aCsxKSkse2Rlc2NyaXB0aW9uOmwsZGlzcGxheU5hbWU6Y319fTt1by50ZW1wbGF0ZT1RYAogICAgPHRmLWRhc2hib2FyZC1sYXlvdXQ+CiAgICAgIDxkaXYgY2xhc3M9InNpZGViYXIiIHNsb3Q9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0ic2hvdy1kb3dubG9hZC1saW5rcyIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X3Nob3dEb3dubG9hZExpbmtzfX0iCiAgICAgICAgICAgICAgICA+U2hvdyBkYXRhIGRvd25sb2FkIGxpbmtzPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgICAgPHBhcGVyLWNoZWNrYm94CiAgICAgICAgICAgICAgICBpZD0iaWdub3JlLXktb3V0bGllciIKICAgICAgICAgICAgICAgIGNoZWNrZWQ9Int7X2lnbm9yZVlPdXRsaWVyc319IgogICAgICAgICAgICAgICAgPklnbm9yZSBvdXRsaWVycyBpbiBjaGFydCBzY2FsaW5nPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICAgID4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgaWQ9InRvb2x0aXAtc29ydGluZyI+CiAgICAgICAgICAgICAgPGRpdj5Ub29sdGlwIHNvcnRpbmcgbWV0aG9kOjwvZGl2PgogICAgICAgICAgICAgIDxwYXBlci1kcm9wZG93bi1tZW51CiAgICAgICAgICAgICAgICBuby1sYWJlbC1mbG9hdAogICAgICAgICAgICAgICAgc2VsZWN0ZWQtaXRlbS1sYWJlbD0ie3tfdG9vbHRpcFNvcnRpbmdNZXRob2R9fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8cGFwZXItbGlzdGJveAogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcGRvd24tY29udGVudCIKICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9IjAiCiAgICAgICAgICAgICAgICAgIHNsb3Q9ImRyb3Bkb3duLWNvbnRlbnQiCiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlZmF1bHQ8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmRlc2NlbmRpbmc8L3BhcGVyLWl0ZW0+CiAgICAgICAgICAgICAgICAgIDxwYXBlci1pdGVtPmFzY2VuZGluZzwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgICAgPHBhcGVyLWl0ZW0+bmVhcmVzdDwvcGFwZXItaXRlbT4KICAgICAgICAgICAgICAgIDwvcGFwZXItbGlzdGJveD4KICAgICAgICAgICAgICA8L3BhcGVyLWRyb3Bkb3duLW1lbnU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtc21vb3RoaW5nLWlucHV0CiAgICAgICAgICAgICAgd2VpZ2h0PSJ7e19zbW9vdGhpbmdXZWlnaHR9fSIKICAgICAgICAgICAgICBzdGVwPSIwLjAwMSIKICAgICAgICAgICAgICBtaW49IjAiCiAgICAgICAgICAgICAgbWF4PSIwLjk5OSIKICAgICAgICAgICAgPjwvdGYtc21vb3RoaW5nLWlucHV0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24iPgogICAgICAgICAgICA8dGYtb3B0aW9uLXNlbGVjdG9yCiAgICAgICAgICAgICAgaWQ9IngtdHlwZS1zZWxlY3RvciIKICAgICAgICAgICAgICBuYW1lPSJIb3Jpem9udGFsIEF4aXMiCiAgICAgICAgICAgICAgc2VsZWN0ZWQtaWQ9Int7X3hUeXBlfX0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8cGFwZXItYnV0dG9uIGlkPSJzdGVwIj5zdGVwPC9wYXBlci1idXR0b24KICAgICAgICAgICAgICA+PCEtLQogICAgICAgICAgICAtLT48cGFwZXItYnV0dG9uIGlkPSJyZWxhdGl2ZSI+cmVsYXRpdmU8L3BhcGVyLWJ1dHRvbgogICAgICAgICAgICAgID48IS0tCiAgICAgICAgICAgIC0tPjxwYXBlci1idXR0b24gaWQ9IndhbGxfdGltZSI+d2FsbDwvcGFwZXItYnV0dG9uPgogICAgICAgICAgICA8L3RmLW9wdGlvbi1zZWxlY3Rvcj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItc2VjdGlvbiBydW5zLXNlbGVjdG9yIj4KICAgICAgICAgIDx0Zi1ydW5zLXNlbGVjdG9yIHNlbGVjdGVkLXJ1bnM9Int7X3NlbGVjdGVkUnVuc319Ij4KICAgICAgICAgIDwvdGYtcnVucy1zZWxlY3Rvcj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNlbnRlciIgc2xvdD0iY2VudGVyIj4KICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1pZiIgaWY9IltbX2RhdGFOb3RGb3VuZF1dIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5vLWRhdGEtd2FybmluZyI+CiAgICAgICAgICAgIDxoMz5ObyBzY2FsYXIgZGF0YSB3YXMgZm91bmQuPC9oMz4KICAgICAgICAgICAgPHA+UHJvYmFibGUgY2F1c2VzOjwvcD4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5Zb3UgaGF2ZW7igJl0IHdyaXR0ZW4gYW55IHNjYWxhciBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgICAgZ2V0LWNhdGVnb3J5LWl0ZW0ta2V5PSJbW19nZXRDYXRlZ29yeUl0ZW1LZXldXSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgIDx0ZW1wbGF0ZT4KICAgICAgICAgICAgICAgIDx0Zi1zY2FsYXItY2FyZAogICAgICAgICAgICAgICAgICBhY3RpdmU9IltbYWN0aXZlXV0iCiAgICAgICAgICAgICAgICAgIGRhdGEtdG8tbG9hZD0iW1tpdGVtLnNlcmllc11dIgogICAgICAgICAgICAgICAgICBpZ25vcmUteS1vdXRsaWVycz0iW1tfaWdub3JlWU91dGxpZXJzXV0iCiAgICAgICAgICAgICAgICAgIG11bHRpLWV4cGVyaW1lbnRzPSJbW19nZXRNdWx0aUV4cGVyaW1lbnRzKGRhdGFTZWxlY3Rpb24pXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgc2hvdy1kb3dubG9hZC1saW5rcz0iW1tfc2hvd0Rvd25sb2FkTGlua3NdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLWVuYWJsZWQ9IltbX3Ntb290aGluZ0VuYWJsZWRdXSIKICAgICAgICAgICAgICAgICAgc21vb3RoaW5nLXdlaWdodD0iW1tfc21vb3RoaW5nV2VpZ2h0XV0iCiAgICAgICAgICAgICAgICAgIHRhZy1tZXRhZGF0YT0iW1tfdGFnTWV0YWRhdGEoY2F0ZWdvcnksIF9ydW5Ub1RhZ0luZm8sIGl0ZW0pXV0iCiAgICAgICAgICAgICAgICAgIHRhZz0iW1tpdGVtLnRhZ11dIgogICAgICAgICAgICAgICAgICB0b29sdGlwLXNvcnRpbmctbWV0aG9kPSJbW190b29sdGlwU29ydGluZ01ldGhvZF1dIgogICAgICAgICAgICAgICAgICB4LXR5cGU9IltbX3hUeXBlXV0iCiAgICAgICAgICAgICAgICAgIGJhdGNoLXNpemU9IltbZmVhdHVyZUZsYWdzLnNjYWxhcnNCYXRjaFNpemVdXSIKICAgICAgICAgICAgICAgICAgaW4tY29sYWI9IltbZmVhdHVyZUZsYWdzLmluQ29sYWJdXSIKICAgICAgICAgICAgICAgID48L3RmLXNjYWxhci1jYXJkPgogICAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIDwvdGYtY2F0ZWdvcnktcGFnaW5hdGVkLXZpZXc+CiAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDwvZGl2PgogICAgPC90Zi1kYXNoYm9hcmQtbGF5b3V0PgoKICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgICN0b29sdGlwLXNvcnRpbmcgewogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTVweDsKICAgICAgfQoKICAgICAgI3Rvb2x0aXAtc29ydGluZyBwYXBlci1kcm9wZG93bi1tZW51IHsKICAgICAgICBtYXJnaW4tbGVmdDogMTBweDsKICAgICAgICAtLXBhcGVyLWlucHV0LWNvbnRhaW5lci1mb2N1cy1jb2xvcjogdmFyKC0tdGItb3JhbmdlLXN0cm9uZyk7CiAgICAgICAgd2lkdGg6IDEwNXB4OwogICAgICB9CgogICAgICAubGluZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICB9CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICAgIC5jZW50ZXIgewogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJyZWxvYWRPblJlYWR5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHVvLnByb3RvdHlwZSwiZmVhdHVyZUZsYWdzIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbixub3RpZnk6ITAsb2JzZXJ2ZXI6Il9zaG93RG93bmxvYWRMaW5rc09ic2VydmVyIn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sdW8ucHJvdG90eXBlLCJfc2hvd0Rvd25sb2FkTGlua3MiLHZvaWQgMCk7RShbQSh7dHlwZTpOdW1iZXIsbm90aWZ5OiEwLG9ic2VydmVyOiJfc21vb3RoaW5nV2VpZ2h0T2JzZXJ2ZXIifSksdygiZGVzaWduOnR5cGUiLE51bWJlcildLHVvLnByb3RvdHlwZSwiX3Ntb290aGluZ1dlaWdodCIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW4sb2JzZXJ2ZXI6Il9pZ25vcmVZT3V0bGllcnNPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2lnbm9yZVlPdXRsaWVycyIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx1by5wcm90b3R5cGUsIl94VHlwZSIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sdW8ucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLHVvLnByb3RvdHlwZSwiX3J1blRvVGFnSW5mbyIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLHVvLnByb3RvdHlwZSwiX2RhdGFOb3RGb3VuZCIsdm9pZCAwKTtFKFtBKHt0eXBlOlN0cmluZ30pLHcoImRlc2lnbjp0eXBlIixTdHJpbmcpXSx1by5wcm90b3R5cGUsIl90YWdGaWx0ZXIiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSx1by5wcm90b3R5cGUsIl9jYXRlZ29yaWVzRG9tUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLHVvLnByb3RvdHlwZSwiX2NhdGVnb3JpZXMiLHZvaWQgMCk7RShbQSh7dHlwZTpPYmplY3R9KSx3KCJkZXNpZ246dHlwZSIsT2JqZWN0KV0sdW8ucHJvdG90eXBlLCJfZ2V0Q2F0ZWdvcnlJdGVtS2V5Iix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sdW8ucHJvdG90eXBlLCJfcmVxdWVzdE1hbmFnZXIiLHZvaWQgMCk7RShbUnQoIl9zbW9vdGhpbmdXZWlnaHQiKSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbiksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sdW8ucHJvdG90eXBlLCJfc21vb3RoaW5nRW5hYmxlZCIsbnVsbCk7RShbQnQoIl9ydW5Ub1RhZ0luZm8iLCJfc2VsZWN0ZWRSdW5zIiwiX3RhZ0ZpbHRlciIsIl9jYXRlZ29yaWVzRG9tUmVhZHkiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLHVvLnByb3RvdHlwZSwiX3VwZGF0ZUNhdGVnb3JpZXMiLG51bGwpO3VvPUUoW3l0KCJ0Zi1zY2FsYXItZGFzaGJvYXJkIildLHVvKTt2YXIgaXBlPUVlKE9lKCksMSk7dmFyIGRoPWNsYXNzIGV4dGVuZHMgR3QobXQpe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZXh0cz1bXSx0aGlzLl9jYW5jZWxsZXI9bmV3IGFufWdldCBfcnVuQ29sb3IoKXt2YXIgdD10aGlzLnJ1bjtyZXR1cm4gZm4odCl9X2NoYW5nZVJ1bkNvbG9yKCl7dmFyIHQ9dGhpcy5fcnVuQ29sb3I7dGhpcy51cGRhdGVTdHlsZXMoeyItLXRiLXRleHQtbG9hZGVyLW91dGxpbmUiOnR9KX1hdHRhY2hlZCgpe3RoaXMucmVsb2FkKCl9cmVsb2FkKCl7aWYoIXRoaXMuaXNBdHRhY2hlZClyZXR1cm47dGhpcy5fY2FuY2VsbGVyLmNhbmNlbEFsbCgpO2xldCB0PXZlKCkscj1Dbih0LnBsdWdpblJvdXRlKCJ0ZXh0IiwiL3RleHQiKSx7dGFnOnRoaXMudGFnLHJ1bjp0aGlzLnJ1bixtYXJrZG93bjp0aGlzLm1hcmtkb3duRW5hYmxlZD8idHJ1ZSI6ImZhbHNlIn0pLG49dGhpcy5fY2FuY2VsbGVyLmNhbmNlbGxhYmxlKGk9PntpZihpLmNhbmNlbGxlZClyZXR1cm47bGV0IG89aS52YWx1ZS5tYXAoYT0+KHt3YWxsX3RpbWU6bmV3IERhdGUoYS53YWxsX3RpbWUqMWUzKSxzdGVwOmEuc3RlcCx0ZXh0OmEudGV4dH0pKTt0aGlzLnNldCgiX3RleHRzIixvLnNsaWNlKCkucmV2ZXJzZSgpKX0pO3RoaXMucmVxdWVzdE1hbmFnZXIucmVxdWVzdChyKS50aGVuKG4pfV9mb3JtYXRTdGVwKHQpe3JldHVybiB4bigiLCIpKHQpfX07ZGgudGVtcGxhdGU9UWAKICAgIDx0Zi1jYXJkLWhlYWRpbmcgcnVuPSJbW3J1bl1dIiB0YWc9IltbdGFnXV0iIGNvbG9yPSJbW19ydW5Db2xvcl1dIj4KICAgIDwvdGYtY2FyZC1oZWFkaW5nPgogICAgPHBhcGVyLW1hdGVyaWFsCiAgICAgIGVsZXZhdGlvbj0iMSIKICAgICAgaWQ9InN0ZXBzLWNvbnRhaW5lciIKICAgICAgY2xhc3M9ImNvbnRhaW5lciBzY3JvbGxiYXIiCiAgICA+CiAgICAgIDx0ZW1wbGF0ZSBpcz0iZG9tLXJlcGVhdCIgaXRlbXM9IltbX3RleHRzXV0iPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJzdGVwLWNvbnRhaW5lciI+CiAgICAgICAgICBzdGVwIDxzcGFuIGNsYXNzPSJzdGVwLXZhbHVlIj5bW19mb3JtYXRTdGVwKGl0ZW0uc3RlcCldXTwvc3Bhbj4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICAgIDxwYXBlci1tYXRlcmlhbCBlbGV2YXRpb249IjEiIGNsYXNzPSJ0ZXh0Ij4KICAgICAgICAgIDx0Zi1tYXJrZG93bi12aWV3IGh0bWw9IltbaXRlbS50ZXh0XV0iPjwvdGYtbWFya2Rvd24tdmlldz4KICAgICAgICA8L3BhcGVyLW1hdGVyaWFsPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9wYXBlci1tYXRlcmlhbD4KICAgIDxzdHlsZSBpbmNsdWRlPSJzY3JvbGxiYXItc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICAgIG1hcmdpbi1yaWdodDogMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNXB4OwogICAgICB9CiAgICAgIC5zY3JvbGxiYXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgI3N0ZXBzLWNvbnRhaW5lciB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkIC8qIGNvbG9yIGNvbXB1dGVkIGFuZCBzZXQgYXMgaW5saW5lIHN0eWxlICovOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG1heC1oZWlnaHQ6IDUwMHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS10Yi10ZXh0LWxvYWRlci1vdXRsaW5lKTsKICAgICAgfQogICAgICAudGV4dCB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDNweCAzcHggM3B4OwogICAgICAgIHBhZGRpbmc6IDVweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CiAgICAgIC5zdGVwLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdGItdWktbGlnaHQtYWNjZW50KTsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXRiLXVpLWJvcmRlcik7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7IC8qIHRvIGNvcnJlY3QgZm9yIGJvcmRlciAqLwogICAgICAgIHBhZGRpbmc6IDNweDsKICAgICAgfQogICAgICAuc3RlcC1jb250YWluZXI6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICAgIH0KCiAgICAgIHRmLWNhcmQtaGVhZGluZyB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICBgO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRoLnByb3RvdHlwZSwicnVuIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLGRoLnByb3RvdHlwZSwidGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sZGgucHJvdG90eXBlLCJtYXJrZG93bkVuYWJsZWQiLHZvaWQgMCk7RShbQSh7dHlwZTpBcnJheX0pLHcoImRlc2lnbjp0eXBlIixBcnJheSldLGRoLnByb3RvdHlwZSwiX3RleHRzIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLEFlKV0sZGgucHJvdG90eXBlLCJyZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixhbildLGRoLnByb3RvdHlwZSwiX2NhbmNlbGxlciIsdm9pZCAwKTtFKFtSdCgicnVuIiksdygiZGVzaWduOnR5cGUiLFN0cmluZyksdygiZGVzaWduOnBhcmFtdHlwZXMiLFtdKV0sZGgucHJvdG90eXBlLCJfcnVuQ29sb3IiLG51bGwpO0UoW0J0KCJfcnVuQ29sb3IiKSx3KCJkZXNpZ246dHlwZSIsRnVuY3Rpb24pLHcoImRlc2lnbjpwYXJhbXR5cGVzIixbXSksdygiZGVzaWduOnJldHVybnR5cGUiLHZvaWQgMCldLGRoLnByb3RvdHlwZSwiX2NoYW5nZVJ1bkNvbG9yIixudWxsKTtkaD1FKFt5dCgidGYtdGV4dC1sb2FkZXIiKV0sZGgpO3ZhciBRYz1jbGFzcyBleHRlbmRzIEd0KG10KXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5yZWxvYWRPblJlYWR5PSEwLHRoaXMuX21hcmtkb3duRW5hYmxlZD12cCgiX21hcmtkb3duRW5hYmxlZCIse2RlZmF1bHRWYWx1ZTohMCx1c2VMb2NhbFN0b3JhZ2U6ITB9KS5jYWxsKHRoaXMpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyBBZSx0aGlzLl9tYXJrZG93bkVuYWJsZWRTdG9yYWdlT2JzZXJ2ZXI9eHAoIl9tYXJrZG93bkVuYWJsZWQiLHtkZWZhdWx0VmFsdWU6ITAsdXNlTG9jYWxTdG9yYWdlOiEwfSl9c3RhdGljIGdldCBvYnNlcnZlcnMoKXtyZXR1cm5bIl9tYXJrZG93bkVuYWJsZWRPYnNlcnZlcihfbWFya2Rvd25FbmFibGVkKSJdfXJlYWR5KCl7c3VwZXIucmVhZHkoKSx0aGlzLnJlbG9hZE9uUmVhZHkmJnRoaXMucmVsb2FkKCl9cmVsb2FkKCl7dGhpcy5fZmV0Y2hUYWdzKCkudGhlbigoKT0+e3RoaXMuX3JlbG9hZFRleHRzKCl9KX1fc2hvdWxkT3Blbih0KXtyZXR1cm4gdDw9Mn1fZmV0Y2hUYWdzKCl7bGV0IHQ9dmUoKS5wbHVnaW5Sb3V0ZSgidGV4dCIsIi90YWdzIik7cmV0dXJuIHRoaXMuX3JlcXVlc3RNYW5hZ2VyLnJlcXVlc3QodCkudGhlbihyPT57aWYoaXBlLmlzRXF1YWwocix0aGlzLl9ydW5Ub1RhZykpcmV0dXJuO2xldCBuPSRpKHIpO3RoaXMuc2V0KCJfZGF0YU5vdEZvdW5kIixuLmxlbmd0aD09PTApLHRoaXMuc2V0KCJfcnVuVG9UYWciLHIpLHRoaXMuYXN5bmMoKCk9Pnt0aGlzLnNldCgiX2NhdGVnb3JpZXNEb21SZWFkeSIsITApfSl9KX1fcmVsb2FkVGV4dHMoKXt2YXIgdDsodD10aGlzLnJvb3QpPT1udWxsfHx0LnF1ZXJ5U2VsZWN0b3JBbGwoInRmLXRleHQtbG9hZGVyIikuZm9yRWFjaChyPT57ci5yZWxvYWQoKX0pfWdldCBfY2F0ZWdvcmllcygpe3ZhciB0PXRoaXMuX3J1blRvVGFnLHI9dGhpcy5fc2VsZWN0ZWRSdW5zLG49dGhpcy5fdGFnRmlsdGVyO3JldHVybiBRbCh0LHIsbil9X21hcmtkb3duRW5hYmxlZE9ic2VydmVyKCl7dGhpcy5fcmVsb2FkVGV4dHMoKX19O1FjLnRlbXBsYXRlPVFgCiAgICA8dGYtZGFzaGJvYXJkLWxheW91dD4KICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciIgc2xvdD0ic2lkZWJhciI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtaXRlbSI+CiAgICAgICAgICAgIDxwYXBlci1jaGVja2JveCBjaGVja2VkPSJ7e19tYXJrZG93bkVuYWJsZWR9fSIKICAgICAgICAgICAgICA+RW5hYmxlIE1hcmtkb3duPC9wYXBlci1jaGVja2JveAogICAgICAgICAgICA+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLXNlY3Rpb24gcnVucy1zZWxlY3RvciI+CiAgICAgICAgICA8dGYtcnVucy1zZWxlY3RvciBzZWxlY3RlZC1ydW5zPSJ7e19zZWxlY3RlZFJ1bnN9fSI+CiAgICAgICAgICA8L3RmLXJ1bnMtc2VsZWN0b3I+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiIHNsb3Q9ImNlbnRlciI+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbW19kYXRhTm90Rm91bmRdXSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuby1kYXRhLXdhcm5pbmciPgogICAgICAgICAgICA8aDM+Tm8gdGV4dCBkYXRhIHdhcyBmb3VuZC48L2gzPgogICAgICAgICAgICA8cD5Qcm9iYWJsZSBjYXVzZXM6PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPllvdSBoYXZlbuKAmXQgd3JpdHRlbiBhbnkgdGV4dCBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgICA8bGk+VGVuc29yQm9hcmQgY2Fu4oCZdCBmaW5kIHlvdXIgZXZlbnQgZmlsZXMuPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgIElmIHlvdeKAmXJlIG5ldyB0byB1c2luZyBUZW5zb3JCb2FyZCwgYW5kIHdhbnQgdG8gZmluZCBvdXQgaG93IHRvCiAgICAgICAgICAgICAgYWRkIGRhdGEgYW5kIHNldCB1cCB5b3VyIGV2ZW50IGZpbGVzLCBjaGVjayBvdXQgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIKICAgICAgICAgICAgICAgID5SRUFETUU8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIHBlcmhhcHMgdGhlCiAgICAgICAgICAgICAgPGEKICAgICAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiCiAgICAgICAgICAgICAgICA+VGVuc29yQm9hcmQgdHV0b3JpYWw8L2EKICAgICAgICAgICAgICA+LgogICAgICAgICAgICA8L3A+CgogICAgICAgICAgICA8cD4KICAgICAgICAgICAgICBJZiB5b3UgdGhpbmsgVGVuc29yQm9hcmQgaXMgY29uZmlndXJlZCBwcm9wZXJseSwgcGxlYXNlIHNlZQogICAgICAgICAgICAgIDxhCiAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIgogICAgICAgICAgICAgICAgPnRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXM8L2EKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgYW5kIGNvbnNpZGVyIGZpbGluZyBhbiBpc3N1ZSBvbiBHaXRIdWIuCiAgICAgICAgICAgIDwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgPHRlbXBsYXRlIGlzPSJkb20taWYiIGlmPSJbWyFfZGF0YU5vdEZvdW5kXV0iPgogICAgICAgICAgPHRmLXRhZy1maWx0ZXJlciB0YWctZmlsdGVyPSJ7e190YWdGaWx0ZXJ9fSI+PC90Zi10YWctZmlsdGVyZXI+CiAgICAgICAgICA8dGVtcGxhdGUgaXM9ImRvbS1yZXBlYXQiIGl0ZW1zPSJbW19jYXRlZ29yaWVzXV0iIGFzPSJjYXRlZ29yeSI+CiAgICAgICAgICAgIDx0Zi1jYXRlZ29yeS1wYWdpbmF0ZWQtdmlldwogICAgICAgICAgICAgIGNhdGVnb3J5PSJbW2NhdGVnb3J5XV0iCiAgICAgICAgICAgICAgaW5pdGlhbC1vcGVuZWQ9IltbX3Nob3VsZE9wZW4oaW5kZXgpXV0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8dGVtcGxhdGU+CiAgICAgICAgICAgICAgICA8dGYtdGV4dC1sb2FkZXIKICAgICAgICAgICAgICAgICAgYWN0aXZlPSJbW2FjdGl2ZV1dIgogICAgICAgICAgICAgICAgICB0YWc9IltbaXRlbS50YWddXSIKICAgICAgICAgICAgICAgICAgcnVuPSJbW2l0ZW0ucnVuXV0iCiAgICAgICAgICAgICAgICAgIHJlcXVlc3QtbWFuYWdlcj0iW1tfcmVxdWVzdE1hbmFnZXJdXSIKICAgICAgICAgICAgICAgICAgbWFya2Rvd24tZW5hYmxlZD0iW1tfbWFya2Rvd25FbmFibGVkXV0iCiAgICAgICAgICAgICAgICA+PC90Zi10ZXh0LWxvYWRlcj4KICAgICAgICAgICAgICA8L3RlbXBsYXRlPgogICAgICAgICAgICA8L3RmLWNhdGVnb3J5LXBhZ2luYXRlZC12aWV3PgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L3RlbXBsYXRlPgogICAgICA8L2Rpdj4KICAgIDwvdGYtZGFzaGJvYXJkLWxheW91dD4KICAgIDxzdHlsZSBpbmNsdWRlPSJkYXNoYm9hcmQtc3R5bGUiPjwvc3R5bGU+CiAgICA8c3R5bGU+CiAgICAgIC5uby1kYXRhLXdhcm5pbmcgewogICAgICAgIG1heC13aWR0aDogNTQwcHg7CiAgICAgICAgbWFyZ2luOiA4MHB4IGF1dG8gMCBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIGA7RShbQSh7dHlwZTpCb29sZWFufSksdygiZGVzaWduOnR5cGUiLEJvb2xlYW4pXSxRYy5wcm90b3R5cGUsInJlbG9hZE9uUmVhZHkiLHZvaWQgMCk7RShbQSh7dHlwZTpCb29sZWFuLG5vdGlmeTohMCxvYnNlcnZlcjoiX21hcmtkb3duRW5hYmxlZFN0b3JhZ2VPYnNlcnZlciJ9KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwiX21hcmtkb3duRW5hYmxlZCIsdm9pZCAwKTtFKFtBKHt0eXBlOkFycmF5fSksdygiZGVzaWduOnR5cGUiLEFycmF5KV0sUWMucHJvdG90eXBlLCJfc2VsZWN0ZWRSdW5zIix2b2lkIDApO0UoW0Eoe3R5cGU6T2JqZWN0fSksdygiZGVzaWduOnR5cGUiLE9iamVjdCldLFFjLnByb3RvdHlwZSwiX3J1blRvVGFnIix2b2lkIDApO0UoW0Eoe3R5cGU6Qm9vbGVhbn0pLHcoImRlc2lnbjp0eXBlIixCb29sZWFuKV0sUWMucHJvdG90eXBlLCJfZGF0YU5vdEZvdW5kIix2b2lkIDApO0UoW0Eoe3R5cGU6U3RyaW5nfSksdygiZGVzaWduOnR5cGUiLFN0cmluZyldLFFjLnByb3RvdHlwZSwiX3RhZ0ZpbHRlciIsdm9pZCAwKTtFKFtBKHt0eXBlOkJvb2xlYW59KSx3KCJkZXNpZ246dHlwZSIsQm9vbGVhbildLFFjLnByb3RvdHlwZSwiX2NhdGVnb3JpZXNEb21SZWFkeSIsdm9pZCAwKTtFKFtBKHt0eXBlOk9iamVjdH0pLHcoImRlc2lnbjp0eXBlIixPYmplY3QpXSxRYy5wcm90b3R5cGUsIl9yZXF1ZXN0TWFuYWdlciIsdm9pZCAwKTtFKFtSdCgiX3J1blRvVGFnIiwiX3NlbGVjdGVkUnVucyIsIl90YWdGaWx0ZXIiLCJfY2F0ZWdvcmllc0RvbVJlYWR5IiksdygiZGVzaWduOnR5cGUiLEFycmF5KSx3KCJkZXNpZ246cGFyYW10eXBlcyIsW10pXSxRYy5wcm90b3R5cGUsIl9jYXRlZ29yaWVzIixudWxsKTtRYz1FKFt5dCgidGYtdGV4dC1kYXNoYm9hcmQiKV0sUWMpO3ZhciBvcGU9Y2xhc3MgZXh0ZW5kcyBtdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdGVtcGxhdGU9bnVsbCx0aGlzLnRmX2JhY2tlbmQ9a0J9fTtvcGU9RShbeXQoInRmLWJhY2tlbmQiKV0sb3BlKTt2YXIgYXBlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy5ydW5zQ29sb3JTY2FsZT1mbn19O2FwZT1FKFt5dCgidGYtY29sb3Itc2NhbGUiKV0sYXBlKTt2YXIgc3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9mZWF0dXJlX2ZsYWdzPXRXfX07c3BlPUUoW3l0KCJ0Zi1mZWF0dXJlLWZsYWdzIildLHNwZSk7dmFyIGxwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfZ2xvYmFscz1SV319O2xwZT1FKFt5dCgidGYtZ2xvYmFscyIpXSxscGUpO3ZhciBVaHQ9e307S3MoVWh0LHtUZkRvbVJlcGVhdDooKT0+T2ksYWRkTGltaXRMaXN0ZW5lcjooKT0+cVcsZ2V0TGltaXQ6KCk9PldXLHJlbW92ZUxpbWl0TGlzdGVuZXI6KCk9PkdXLHNldExpbWl0OigpPT5yMmV9KTt2YXIgY3BlPWNsYXNzIGV4dGVuZHMgbXR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3RlbXBsYXRlPW51bGwsdGhpcy50Zl9wYWdpbmF0ZWRfdmlldz1VaHR9fTtjcGU9RShbeXQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIildLGNwZSk7dmFyIHVwZT1jbGFzcyBleHRlbmRzIG10e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl90ZW1wbGF0ZT1udWxsLHRoaXMudGZfc3RvcmFnZT1EQn19O3VwZT1FKFt5dCgidGYtc3RvcmFnZSIpXSx1cGUpO30pKCk7Ci8qIQogKiBpcy1wbGFpbi1vYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzLXBsYWluLW9iamVjdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTcsIEpvbiBTY2hsaW5rZXJ0LgogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuCiAqLwovKiEKICogaXNvYmplY3QgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L2lzb2JqZWN0PgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNywgSm9uIFNjaGxpbmtlcnQuCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZQp0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZQpMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQpLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuCgpTZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwovKioKICogQGZpbGVvdmVydmlldwogKiBAc3VwcHJlc3Mge2NoZWNrUHJvdG90eXBhbFR5cGVzfQogKiBAbGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTcgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQKICogYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heQogKiBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5CiAqIEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAKICogcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZAogKiBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5CiAqIGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkKICogR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUAogKiByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICogVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dAogKiBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dAogKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKICogQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28KICogc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKICovCi8qKgogKiBAbGljZW5zZQogKiBDb3B5cmlnaHQgKGMpIDIwMTggVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKICogaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0CiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdAogKiBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dAogKiBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwogKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0CiAqIGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAogKi8KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAyMSBWYWFkaW4gTHRkLgogKiBUaGlzIHByb2dyYW0gaXMgYXZhaWxhYmxlIHVuZGVyIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wLCBhdmFpbGFibGUgYXQgaHR0cHM6Ly92YWFkaW4uY29tL2xpY2Vuc2UvCiAqLwovKioKICogQGxpY2Vuc2UKICogQ29weXJpZ2h0IDIwMTAtMjAyMiBUaHJlZS5qcyBBdXRob3JzCiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKICovCi8qKgogKiBAbGljZW5zZQogKiBMb2Rhc2ggPGh0dHBzOi8vbG9kYXNoLmNvbS8+CiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL29wZW5qc2Yub3JnLz4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPgogKiBCYXNlZCBvbiBVbmRlcnNjb3JlLmpzIDEuOC4zIDxodHRwOi8vdW5kZXJzY29yZWpzLm9yZy9MSUNFTlNFPgogKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnMKICovCi8qKgogKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50IFBhbGFudGlyIFRlY2hub2xvZ2llcwogKiBAbGljZW5zZSBNSVQKICoKICogQGZpbGVvdmVydmlldyBtYW51YWxseSBhZGQgZDMtc2VsZWN0aW9uLW11bHRpIHRvIGQzIGRlZmF1bHQgYnVuZGxlLiBNb3N0IG9mIHRoaXMgY29kZSBpcwogKiBjb3BpZWQgZnJvbSBkMy1zZWxlY3Rpb24tbXVsdGlAMS4wLjAuCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZDMvZDMtc2VsZWN0aW9uLW11bHRpL2lzc3Vlcy8xMSBmb3Igd2h5IHdlIGhhdmUgdG8gZG8gdGhpcwogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgYSBjb252ZW5pZW50IHRodW5rIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgY29tbW9uIGNhc2UKICogb2YgY3JlYXRpbmcgYSBtZW1vaXplZCBmdW5jdGlvbiB0aGF0IHRha2VzIGl0cyBpbnB1dHMgZnJvbSBtdXRhYmxlIGNsYXNzIHByb3BlcnRpZXMuCiAqLwovKioKICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCBQYWxhbnRpciBUZWNobm9sb2dpZXMKICogQGxpY2Vuc2UgTUlUCiAqIEBmaWxlb3ZlcnZpZXcgSW1wbGVtZW50cyBhIGZ1bmN0aW9uIG1lbW9pemVyIHVzaW5nIHRoZSBTaWduYXR1cmUgQVBJLgogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKiBAZmlsZW92ZXJ2aWV3IEltcGxlbWVudHMgdGhlIFNpZ25hdHVyZSBBUEkgdG8gaGVscCBpbiBjb21wYXJpbmcgd2hlbiB0d28KICogUGxvdHRhYmxlIG9iamVjdHMgaGF2ZSAiY2hhbmdlZCIuCiAqCiAqIE1lbW9pemF0aW9uIGluIFBsb3R0YWJsZSBpcyBjb21wbGljYXRlZCBieSBtdXRhYmxlIHNjYWxlcyBhbmQgZGF0YXNldHMuIFdlIGNhbm5vdCBzaW1wbHkKICogcmVmZXJlbmNlIGNvbXBhcmUgdHdvIGUuZy4gc2NhbGVzIHNpbmNlIGl0IG1heSBoYXZlIGludGVybmFsbHkgbXV0YXRlZC4gVG8gcmVzb2x2ZSB0aGlzLAogKiB3ZSB3cml0ZSBhIHJlY3Vyc2l2ZSBTaWduYXR1cmUgaW50ZXJmYWNlIHRoYXQgaG9sZHMgYW4gaW1tdXRhYmxlIHNuYXBzaG90IG9mIHdoYXRldmVyCiAqIHN0YXRlIHRoZSBzY2FsZS9kYXRhIHdhcyBpbiBhdCB0aGUgdGltZS4gVGhlbiBvbiBtZW1vaXplZCBmdW5jdGlvbiBpbnZvY2F0aW9uIHdlIHNpZ24gdGhlCiAqIG5ldyBpbnB1dHMgYW5kIGNvbXBhcmUgdGhlIHNpZ25hdHVyZXMgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCByZWNvbXB1dGUuCiAqCiAqIFdlIG11c3QgaGFuZC13cml0ZSBhIHNpZ25hdHVyZSBmb3IgZWFjaCBjdXN0b20gY2xhc3Mgd2Ugd2lzaCB0byBzdXBwb3J0LgogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKi8KLyoqCiAqIENvcHlyaWdodCAyMDE3LXByZXNlbnQgUGFsYW50aXIgVGVjaG5vbG9naWVzCiAqIEBsaWNlbnNlIE1JVAogKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNiBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdApodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQgVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlCmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0IENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzCnBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0ClRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dApDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbwpzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE3IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0Cmh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dCBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUKZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQgQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMKcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28gc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudApmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KLyoqCkBsaWNlbnNlCkNvcHlyaWdodCAoYykgMjAxNyBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuClRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CkNvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiovCi8qKgpAbGljZW5zZQpDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgpUaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQKaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0IFRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZQpmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcwpwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzbyBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50CmZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dAoqLwovKioKQGxpY2Vuc2UKQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dApUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHQKQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc28Kc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHQKKi8KCigoKT0+e3ZhciBKZ2U9T2JqZWN0LmNyZWF0ZSxMRT1PYmplY3QuZGVmaW5lUHJvcGVydHksJGdlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZTBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzLHQwZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbjBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaG89KG4sdCk9PigpPT4obiYmKHQ9bihuPTApKSx0KSxSZD0obix0KT0+KCk9Pih0fHxuKCh0PXtleHBvcnRzOnt9fSkuZXhwb3J0cyx0KSx0LmV4cG9ydHMpLEJFPShuLHQpPT57Zm9yKHZhciBlIGluIHQpTEUobixlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9LEk2PShuLHQsZSxpKT0+e2lmKHQmJiJvYmplY3QiPT10eXBlb2YgdHx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpZm9yKGxldCByIG9mIGUwZSh0KSkhbjBlLmNhbGwobixyKSYmciE9PWUmJkxFKG4scix7Z2V0OigpPT50W3JdLGVudW1lcmFibGU6IShpPSRnZSh0LHIpKXx8aS5lbnVtZXJhYmxlfSk7cmV0dXJuIG59LG9OPShuLHQsZSk9PihlPW51bGwhPW4/SmdlKHQwZShuKSk6e30sSTYoIXQmJm4mJm4uX19lc01vZHVsZT9lOkxFKGUsImRlZmF1bHQiLHt2YWx1ZTpuLGVudW1lcmFibGU6ITB9KSxuKSksdVc9UmQoKERydCxlMSk9Pnt2YXIgajYsRzYsVzYscTYsWTYsWDYsUTYsSzYsWjYsSkUseU4sSjYsJDYsZVcsbTAsdFcsblcsaVcsclcsb1csc1csYVcsbFcsY1csJEU7IWZ1bmN0aW9uKG4pe3ZhciB0PSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjoib2JqZWN0Ij09dHlwZW9mIHRoaXM/dGhpczp7fTtmdW5jdGlvbiBlKGkscil7cmV0dXJuIGkhPT10JiYoImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pOmkuX19lc01vZHVsZT0hMCksZnVuY3Rpb24obyxzKXtyZXR1cm4gaVtvXT1yP3IobyxzKTpzfX0iZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgidHNsaWIiLFsiZXhwb3J0cyJdLGZ1bmN0aW9uKGkpe24oZSh0LGUoaSkpKX0pOm4oIm9iamVjdCI9PXR5cGVvZiBlMSYmIm9iamVjdCI9PXR5cGVvZiBlMS5leHBvcnRzP2UodCxlKGUxLmV4cG9ydHMpKTplKHQpKX0oZnVuY3Rpb24obil7dmFyIHQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGkscil7aS5fX3Byb3RvX189cn18fGZ1bmN0aW9uKGkscil7Zm9yKHZhciBvIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbykmJihpW29dPXJbb10pfTtqNj1mdW5jdGlvbihpLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByJiZudWxsIT09cil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHIpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG8oKXt0aGlzLmNvbnN0cnVjdG9yPWl9dChpLHIpLGkucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KG8ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBvKX0sRzY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oaSl7Zm9yKHZhciByLG89MSxzPWFyZ3VtZW50cy5sZW5ndGg7bzxzO28rKylmb3IodmFyIGEgaW4gcj1hcmd1bWVudHNbb10pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsYSkmJihpW2FdPXJbYV0pO3JldHVybiBpfSxXNj1mdW5jdGlvbihpLHIpe3ZhciBvPXt9O2Zvcih2YXIgcyBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLHMpJiZyLmluZGV4T2Yocyk8MCYmKG9bc109aVtzXSk7aWYobnVsbCE9aSYmImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBhPTA7Zm9yKHM9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhpKTthPHMubGVuZ3RoO2ErKylyLmluZGV4T2Yoc1thXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGksc1thXSkmJihvW3NbYV1dPWlbc1thXV0pfXJldHVybiBvfSxxNj1mdW5jdGlvbihpLHIsbyxzKXt2YXIgYyxhPWFyZ3VtZW50cy5sZW5ndGgsbD1hPDM/cjpudWxsPT09cz9zPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixvKTpzO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpbD1SZWZsZWN0LmRlY29yYXRlKGkscixvLHMpO2Vsc2UgZm9yKHZhciB1PWkubGVuZ3RoLTE7dT49MDt1LS0pKGM9aVt1XSkmJihsPShhPDM/YyhsKTphPjM/YyhyLG8sbCk6YyhyLG8pKXx8bCk7cmV0dXJuIGE+MyYmbCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsbyxsKSxsfSxZNj1mdW5jdGlvbihpLHIpe3JldHVybiBmdW5jdGlvbihvLHMpe3IobyxzLGkpfX0sWDY9ZnVuY3Rpb24oaSxyKXtpZigib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhKXJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGkscil9LFE2PWZ1bmN0aW9uKGkscixvLHMpe3JldHVybiBuZXcob3x8KG89UHJvbWlzZSkpKGZ1bmN0aW9uKGwsYyl7ZnVuY3Rpb24gdShoKXt0cnl7cChzLm5leHQoaCkpfWNhdGNoKGYpe2MoZil9fWZ1bmN0aW9uIGQoaCl7dHJ5e3Aocy50aHJvdyhoKSl9Y2F0Y2goZil7YyhmKX19ZnVuY3Rpb24gcChoKXtoLmRvbmU/bChoLnZhbHVlKTpmdW5jdGlvbihsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIG8/bDpuZXcgbyhmdW5jdGlvbihjKXtjKGwpfSl9KGgudmFsdWUpLnRoZW4odSxkKX1wKChzPXMuYXBwbHkoaSxyfHxbXSkpLm5leHQoKSl9KX0sSzY9ZnVuY3Rpb24oaSxyKXt2YXIgcyxhLGwsYyxvPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmxbMF0pdGhyb3cgbFsxXTtyZXR1cm4gbFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBjPXtuZXh0OnUoMCksdGhyb3c6dSgxKSxyZXR1cm46dSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGNbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksYztmdW5jdGlvbiB1KHApe3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZnVuY3Rpb24ocCl7aWYocyl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjJiYoYz0wLHBbMF0mJihvPTApKSxvOyl0cnl7aWYocz0xLGEmJihsPTImcFswXT9hLnJldHVybjpwWzBdP2EudGhyb3d8fCgobD1hLnJldHVybikmJmwuY2FsbChhKSwwKTphLm5leHQpJiYhKGw9bC5jYWxsKGEscFsxXSkpLmRvbmUpcmV0dXJuIGw7c3dpdGNoKGE9MCxsJiYocD1bMiZwWzBdLGwudmFsdWVdKSxwWzBdKXtjYXNlIDA6Y2FzZSAxOmw9cDticmVhaztjYXNlIDQ6cmV0dXJuIG8ubGFiZWwrKyx7dmFsdWU6cFsxXSxkb25lOiExfTtjYXNlIDU6by5sYWJlbCsrLGE9cFsxXSxwPVswXTtjb250aW51ZTtjYXNlIDc6cD1vLm9wcy5wb3AoKSxvLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKGw9KGw9by50cnlzKS5sZW5ndGg+MCYmbFtsLmxlbmd0aC0xXSkmJig2PT09cFswXXx8Mj09PXBbMF0pKXtvPTA7Y29udGludWV9aWYoMz09PXBbMF0mJighbHx8cFsxXT5sWzBdJiZwWzFdPGxbM10pKXtvLmxhYmVsPXBbMV07YnJlYWt9aWYoNj09PXBbMF0mJm8ubGFiZWw8bFsxXSl7by5sYWJlbD1sWzFdLGw9cDticmVha31pZihsJiZvLmxhYmVsPGxbMl0pe28ubGFiZWw9bFsyXSxvLm9wcy5wdXNoKHApO2JyZWFrfWxbMl0mJm8ub3BzLnBvcCgpLG8udHJ5cy5wb3AoKTtjb250aW51ZX1wPXIuY2FsbChpLG8pfWNhdGNoKGgpe3A9WzYsaF0sYT0wfWZpbmFsbHl7cz1sPTB9aWYoNSZwWzBdKXRocm93IHBbMV07cmV0dXJue3ZhbHVlOnBbMF0/cFsxXTp2b2lkIDAsZG9uZTohMH19KFtwLGhdKX19fSxaNj1mdW5jdGlvbihpLHIpe2Zvcih2YXIgbyBpbiBpKSJkZWZhdWx0IiE9PW8mJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixvKSYmJEUocixpLG8pfSwkRT1PYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGkscixvLHMpe3ZvaWQgMD09PXMmJihzPW8pO3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixvKTsoIWF8fCgiZ2V0ImluIGE/IXIuX19lc01vZHVsZTphLndyaXRhYmxlfHxhLmNvbmZpZ3VyYWJsZSkpJiYoYT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcltvXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxzLGEpfTpmdW5jdGlvbihpLHIsbyxzKXt2b2lkIDA9PT1zJiYocz1vKSxpW3NdPXJbb119LEpFPWZ1bmN0aW9uKGkpe3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixvPXImJmlbcl0scz0wO2lmKG8pcmV0dXJuIG8uY2FsbChpKTtpZihpJiYibnVtYmVyIj09dHlwZW9mIGkubGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGkmJnM+PWkubGVuZ3RoJiYoaT12b2lkIDApLHt2YWx1ZTppJiZpW3MrK10sZG9uZTohaX19fTt0aHJvdyBuZXcgVHlwZUVycm9yKHI/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpfSx5Tj1mdW5jdGlvbihpLHIpe3ZhciBvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmlbU3ltYm9sLml0ZXJhdG9yXTtpZighbylyZXR1cm4gaTt2YXIgYSxjLHM9by5jYWxsKGkpLGw9W107dHJ5e2Zvcig7KHZvaWQgMD09PXJ8fHItLSA+MCkmJiEoYT1zLm5leHQoKSkuZG9uZTspbC5wdXNoKGEudmFsdWUpfWNhdGNoKHUpe2M9e2Vycm9yOnV9fWZpbmFsbHl7dHJ5e2EmJiFhLmRvbmUmJihvPXMucmV0dXJuKSYmby5jYWxsKHMpfWZpbmFsbHl7aWYoYyl0aHJvdyBjLmVycm9yfX1yZXR1cm4gbH0sSjY9ZnVuY3Rpb24oKXtmb3IodmFyIGk9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspaT1pLmNvbmNhdCh5Tihhcmd1bWVudHNbcl0pKTtyZXR1cm4gaX0sJDY9ZnVuY3Rpb24oKXtmb3IodmFyIGk9MCxyPTAsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspaSs9YXJndW1lbnRzW3JdLmxlbmd0aDt2YXIgcz1BcnJheShpKSxhPTA7Zm9yKHI9MDtyPG87cisrKWZvcih2YXIgbD1hcmd1bWVudHNbcl0sYz0wLHU9bC5sZW5ndGg7Yzx1O2MrKyxhKyspc1thXT1sW2NdO3JldHVybiBzfSxlVz1mdW5jdGlvbihpLHIsbyl7aWYob3x8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBsLHM9MCxhPXIubGVuZ3RoO3M8YTtzKyspKGx8fCEocyBpbiByKSkmJihsfHwobD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLDAscykpLGxbc109cltzXSk7cmV0dXJuIGkuY29uY2F0KGx8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpKX0sbTA9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtMD8odGhpcy52PWksdGhpcyk6bmV3IG0wKGkpfSx0Vz1mdW5jdGlvbihpLHIsbyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhLHM9by5hcHBseShpLHJ8fFtdKSxsPVtdO3JldHVybiBhPXt9LGMoIm5leHQiKSxjKCJ0aHJvdyIpLGMoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGE7ZnVuY3Rpb24gYyhtKXtzW21dJiYoYVttXT1mdW5jdGlvbih4KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZyxiKXtsLnB1c2goW20seCxnLGJdKT4xfHx1KG0seCl9KX0pfWZ1bmN0aW9uIHUobSx4KXt0cnl7IWZ1bmN0aW9uKG0pe20udmFsdWUgaW5zdGFuY2VvZiBtMD9Qcm9taXNlLnJlc29sdmUobS52YWx1ZS52KS50aGVuKHAsaCk6ZihsWzBdWzJdLG0pfShzW21dKHgpKX1jYXRjaChnKXtmKGxbMF1bM10sZyl9fWZ1bmN0aW9uIHAobSl7dSgibmV4dCIsbSl9ZnVuY3Rpb24gaChtKXt1KCJ0aHJvdyIsbSl9ZnVuY3Rpb24gZihtLHgpe20oeCksbC5zaGlmdCgpLGwubGVuZ3RoJiZ1KGxbMF1bMF0sbFswXVsxXSl9fSxuVz1mdW5jdGlvbihpKXt2YXIgcixvO3JldHVybiByPXt9LHMoIm5leHQiKSxzKCJ0aHJvdyIsZnVuY3Rpb24oYSl7dGhyb3cgYX0pLHMoInJldHVybiIpLHJbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxyO2Z1bmN0aW9uIHMoYSxsKXtyW2FdPWlbYV0/ZnVuY3Rpb24oYyl7cmV0dXJuKG89IW8pP3t2YWx1ZTptMChpW2FdKGMpKSxkb25lOiJyZXR1cm4iPT09YX06bD9sKGMpOmN9Omx9fSxpVz1mdW5jdGlvbihpKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIG8scj1pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gcj9yLmNhbGwoaSk6KGk9SkUoaSksbz17fSxzKCJuZXh0IikscygidGhyb3ciKSxzKCJyZXR1cm4iKSxvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxvKTtmdW5jdGlvbiBzKGwpe29bbF09aVtsXSYmZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHUsZCl7IWZ1bmN0aW9uKGwsYyx1LGQpe1Byb21pc2UucmVzb2x2ZShkKS50aGVuKGZ1bmN0aW9uKHApe2woe3ZhbHVlOnAsZG9uZTp1fSl9LGMpfSh1LGQsKGM9aVtsXShjKSkuZG9uZSxjLnZhbHVlKX0pfX19LHJXPWZ1bmN0aW9uKGkscil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eT9PYmplY3QuZGVmaW5lUHJvcGVydHkoaSwicmF3Iix7dmFsdWU6cn0pOmkucmF3PXIsaX07dmFyIGU9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihpLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpyfSl9OmZ1bmN0aW9uKGkscil7aS5kZWZhdWx0PXJ9O29XPWZ1bmN0aW9uKGkpe2lmKGkmJmkuX19lc01vZHVsZSlyZXR1cm4gaTt2YXIgcj17fTtpZihudWxsIT1pKWZvcih2YXIgbyBpbiBpKSJkZWZhdWx0IiE9PW8mJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLG8pJiYkRShyLGksbyk7cmV0dXJuIGUocixpKSxyfSxzVz1mdW5jdGlvbihpKXtyZXR1cm4gaSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX19LGFXPWZ1bmN0aW9uKGkscixvLHMpe2lmKCJhIj09PW8mJiFzKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByP2khPT1yfHwhczohci5oYXMoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0Iik7cmV0dXJuIm0iPT09bz9zOiJhIj09PW8/cy5jYWxsKGkpOnM/cy52YWx1ZTpyLmdldChpKX0sbFc9ZnVuY3Rpb24oaSxyLG8scyxhKXtpZigibSI9PT1zKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpO2lmKCJhIj09PXMmJiFhKXRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlciIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByP2khPT1yfHwhYTohci5oYXMoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTtyZXR1cm4iYSI9PT1zP2EuY2FsbChpLG8pOmE/YS52YWx1ZT1vOnIuc2V0KGksbyksb30sY1c9ZnVuY3Rpb24oaSxyKXtpZihudWxsPT09cnx8Im9iamVjdCIhPXR5cGVvZiByJiYiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdCIpO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpP3I9PT1pOmkuaGFzKHIpfSxuKCJfX2V4dGVuZHMiLGo2KSxuKCJfX2Fzc2lnbiIsRzYpLG4oIl9fcmVzdCIsVzYpLG4oIl9fZGVjb3JhdGUiLHE2KSxuKCJfX3BhcmFtIixZNiksbigiX19tZXRhZGF0YSIsWDYpLG4oIl9fYXdhaXRlciIsUTYpLG4oIl9fZ2VuZXJhdG9yIixLNiksbigiX19leHBvcnRTdGFyIixaNiksbigiX19jcmVhdGVCaW5kaW5nIiwkRSksbigiX192YWx1ZXMiLEpFKSxuKCJfX3JlYWQiLHlOKSxuKCJfX3NwcmVhZCIsSjYpLG4oIl9fc3ByZWFkQXJyYXlzIiwkNiksbigiX19zcHJlYWRBcnJheSIsZVcpLG4oIl9fYXdhaXQiLG0wKSxuKCJfX2FzeW5jR2VuZXJhdG9yIix0VyksbigiX19hc3luY0RlbGVnYXRvciIsblcpLG4oIl9fYXN5bmNWYWx1ZXMiLGlXKSxuKCJfX21ha2VUZW1wbGF0ZU9iamVjdCIsclcpLG4oIl9faW1wb3J0U3RhciIsb1cpLG4oIl9faW1wb3J0RGVmYXVsdCIsc1cpLG4oIl9fY2xhc3NQcml2YXRlRmllbGRHZXQiLGFXKSxuKCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IixsVyksbigiX19jbGFzc1ByaXZhdGVGaWVsZEluIixjVyl9KX0pLG1aPVJkKGI1PT57InVzZSBzdHJpY3QiO3ZhciBuLHVoPWI1JiZiNS5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihuLHQsZSl7aWYoZXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBvLGk9MCxyPXQubGVuZ3RoO2k8cjtpKyspKG98fCEoaSBpbiB0KSkmJihvfHwobz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LDAsaSkpLG9baV09dFtpXSk7cmV0dXJuIG4uY29uY2F0KG98fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKX07bj1mdW5jdGlvbigpeyFmdW5jdGlvbihRKXt2YXIgcmU9US5wZXJmb3JtYW5jZTtmdW5jdGlvbiBfZShTdCl7cmUmJnJlLm1hcmsmJnJlLm1hcmsoU3QpfWZ1bmN0aW9uIEkoU3Qsd2Upe3JlJiZyZS5tZWFzdXJlJiZyZS5tZWFzdXJlKFN0LHdlKX1fZSgiWm9uZSIpO3ZhciBYPVEuX19ab25lX3N5bWJvbF9wcmVmaXh8fCJfX3pvbmVfc3ltYm9sX18iO2Z1bmN0aW9uICQoU3Qpe3JldHVybiBYK1N0fXZhciBuZT0hMD09PVFbJCgiZm9yY2VEdXBsaWNhdGVab25lQ2hlY2siKV07aWYoUS5ab25lKXtpZihuZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFEuWm9uZS5fX3N5bWJvbF9fKXRocm93IG5ldyBFcnJvcigiWm9uZSBhbHJlYWR5IGxvYWRlZC4iKTtyZXR1cm4gUS5ab25lfXZhciBtZT1mdW5jdGlvbigpe2Z1bmN0aW9uIFN0KHdlLEVlKXt0aGlzLl9wYXJlbnQ9d2UsdGhpcy5fbmFtZT1FZT9FZS5uYW1lfHwidW5uYW1lZCI6Ijxyb290PiIsdGhpcy5fcHJvcGVydGllcz1FZSYmRWUucHJvcGVydGllc3x8e30sdGhpcy5fem9uZURlbGVnYXRlPW5ldyBsdCh0aGlzLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll96b25lRGVsZWdhdGUsRWUpfXJldHVybiBTdC5hc3NlcnRab25lUGF0Y2hlZD1mdW5jdGlvbigpe2lmKFEuUHJvbWlzZSE9PWpuLlpvbmVBd2FyZVByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJab25lLmpzIGhhcyBkZXRlY3RlZCB0aGF0IFpvbmVBd2FyZVByb21pc2UgYCh3aW5kb3d8Z2xvYmFsKS5Qcm9taXNlYCBoYXMgYmVlbiBvdmVyd3JpdHRlbi5cbk1vc3QgbGlrZWx5IGNhdXNlIGlzIHRoYXQgYSBQcm9taXNlIHBvbHlmaWxsIGhhcyBiZWVuIGxvYWRlZCBhZnRlciBab25lLmpzIChQb2x5ZmlsbGluZyBQcm9taXNlIGFwaSBpcyBub3QgbmVjZXNzYXJ5IHdoZW4gem9uZS5qcyBpcyBsb2FkZWQuIElmIHlvdSBtdXN0IGxvYWQgb25lLCBkbyBzbyBiZWZvcmUgbG9hZGluZyB6b25lLmpzLikiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJyb290Iix7Z2V0OmZ1bmN0aW9uKCl7Zm9yKHZhciB3ZT1TdC5jdXJyZW50O3dlLnBhcmVudDspd2U9d2UucGFyZW50O3JldHVybiB3ZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsImN1cnJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYnIuem9uZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsImN1cnJlbnRUYXNrIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHhhfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFN0Ll9fbG9hZF9wYXRjaD1mdW5jdGlvbih3ZSxFZSxWZSl7aWYodm9pZCAwPT09VmUmJihWZT0hMSksam4uaGFzT3duUHJvcGVydHkod2UpKXtpZighVmUmJm5lKXRocm93IEVycm9yKCJBbHJlYWR5IGxvYWRlZCBwYXRjaDogIit3ZSl9ZWxzZSBpZighUVsiX19ab25lX2Rpc2FibGVfIit3ZV0pe3ZhciBrbj0iWm9uZToiK3dlO19lKGtuKSxqblt3ZV09RWUoUSxTdCxEciksSShrbixrbil9fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QucHJvdG90eXBlLCJwYXJlbnQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFyZW50fSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdC5wcm90b3R5cGUsIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxTdC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHdlKXt2YXIgRWU9dGhpcy5nZXRab25lV2l0aCh3ZSk7aWYoRWUpcmV0dXJuIEVlLl9wcm9wZXJ0aWVzW3dlXX0sU3QucHJvdG90eXBlLmdldFpvbmVXaXRoPWZ1bmN0aW9uKHdlKXtmb3IodmFyIEVlPXRoaXM7RWU7KXtpZihFZS5fcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSh3ZSkpcmV0dXJuIEVlO0VlPUVlLl9wYXJlbnR9cmV0dXJuIG51bGx9LFN0LnByb3RvdHlwZS5mb3JrPWZ1bmN0aW9uKHdlKXtpZighd2UpdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmZvcmsodGhpcyx3ZSl9LFN0LnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHdlLEVlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygd2UpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK3dlKTt2YXIgVmU9dGhpcy5fem9uZURlbGVnYXRlLmludGVyY2VwdCh0aGlzLHdlLEVlKSxrbj10aGlzO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBrbi5ydW5HdWFyZGVkKFZlLHRoaXMsYXJndW1lbnRzLEVlKX19LFN0LnByb3RvdHlwZS5ydW49ZnVuY3Rpb24od2UsRWUsVmUsa24pe2JyPXtwYXJlbnQ6YnIsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyx3ZSxFZSxWZSxrbil9ZmluYWxseXticj1ici5wYXJlbnR9fSxTdC5wcm90b3R5cGUucnVuR3VhcmRlZD1mdW5jdGlvbih3ZSxFZSxWZSxrbil7dm9pZCAwPT09RWUmJihFZT1udWxsKSxicj17cGFyZW50OmJyLHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLHdlLEVlLFZlLGtuKX1jYXRjaChJcil7aWYodGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsSXIpKXRocm93IElyfX1maW5hbGx5e2JyPWJyLnBhcmVudH19LFN0LnByb3RvdHlwZS5ydW5UYXNrPWZ1bmN0aW9uKHdlLEVlLFZlKXtpZih3ZS56b25lIT10aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIHJ1biBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyh3ZS56b25lfHxPdCkubmFtZSsiOyBFeGVjdXRpb246ICIrdGhpcy5uYW1lKyIpIik7aWYod2Uuc3RhdGUhPT13aXx8d2UudHlwZSE9PVNpJiZ3ZS50eXBlIT09VW4pe3ZhciBrbj13ZS5zdGF0ZSE9JG47a24mJndlLl90cmFuc2l0aW9uVG8oJG4sWW4pLHdlLnJ1bkNvdW50Kys7dmFyIElyPXhhO3hhPXdlLGJyPXtwYXJlbnQ6YnIsem9uZTp0aGlzfTt0cnl7d2UudHlwZT09VW4mJndlLmRhdGEmJiF3ZS5kYXRhLmlzUGVyaW9kaWMmJih3ZS5jYW5jZWxGbj12b2lkIDApO3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZVRhc2sodGhpcyx3ZSxFZSxWZSl9Y2F0Y2goeGMpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLHhjKSl0aHJvdyB4Y319ZmluYWxseXt3ZS5zdGF0ZSE9PXdpJiZ3ZS5zdGF0ZSE9PVlpJiYod2UudHlwZT09U2l8fHdlLmRhdGEmJndlLmRhdGEuaXNQZXJpb2RpYz9rbiYmd2UuX3RyYW5zaXRpb25UbyhZbiwkbik6KHdlLnJ1bkNvdW50PTAsdGhpcy5fdXBkYXRlVGFza0NvdW50KHdlLC0xKSxrbiYmd2UuX3RyYW5zaXRpb25Ubyh3aSwkbix3aSkpKSxicj1ici5wYXJlbnQseGE9SXJ9fX0sU3QucHJvdG90eXBlLnNjaGVkdWxlVGFzaz1mdW5jdGlvbih3ZSl7aWYod2Uuem9uZSYmd2Uuem9uZSE9PXRoaXMpZm9yKHZhciBFZT10aGlzO0VlOyl7aWYoRWU9PT13ZS56b25lKXRocm93IEVycm9yKCJjYW4gbm90IHJlc2NoZWR1bGUgdGFzayB0byAiLmNvbmNhdCh0aGlzLm5hbWUsIiB3aGljaCBpcyBkZXNjZW5kYW50cyBvZiB0aGUgb3JpZ2luYWwgem9uZSAiKS5jb25jYXQod2Uuem9uZS5uYW1lKSk7RWU9RWUucGFyZW50fXdlLl90cmFuc2l0aW9uVG8oYWksd2kpO3ZhciBWZT1bXTt3ZS5fem9uZURlbGVnYXRlcz1WZSx3ZS5fem9uZT10aGlzO3RyeXt3ZT10aGlzLl96b25lRGVsZWdhdGUuc2NoZWR1bGVUYXNrKHRoaXMsd2UpfWNhdGNoKGtuKXt0aHJvdyB3ZS5fdHJhbnNpdGlvblRvKFlpLGFpLHdpKSx0aGlzLl96b25lRGVsZWdhdGUuaGFuZGxlRXJyb3IodGhpcyxrbiksa259cmV0dXJuIHdlLl96b25lRGVsZWdhdGVzPT09VmUmJnRoaXMuX3VwZGF0ZVRhc2tDb3VudCh3ZSwxKSx3ZS5zdGF0ZT09YWkmJndlLl90cmFuc2l0aW9uVG8oWW4sYWkpLHdlfSxTdC5wcm90b3R5cGUuc2NoZWR1bGVNaWNyb1Rhc2s9ZnVuY3Rpb24od2UsRWUsVmUsa24pe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgSmUoQW4sd2UsRWUsVmUsa24sdm9pZCAwKSl9LFN0LnByb3RvdHlwZS5zY2hlZHVsZU1hY3JvVGFzaz1mdW5jdGlvbih3ZSxFZSxWZSxrbixJcil7cmV0dXJuIHRoaXMuc2NoZWR1bGVUYXNrKG5ldyBKZShVbix3ZSxFZSxWZSxrbixJcikpfSxTdC5wcm90b3R5cGUuc2NoZWR1bGVFdmVudFRhc2s9ZnVuY3Rpb24od2UsRWUsVmUsa24sSXIpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgSmUoU2ksd2UsRWUsVmUsa24sSXIpKX0sU3QucHJvdG90eXBlLmNhbmNlbFRhc2s9ZnVuY3Rpb24od2Upe2lmKHdlLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgY2FuY2VsbGVkIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKHdlLnpvbmV8fE90KS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZih3ZS5zdGF0ZT09PVlufHx3ZS5zdGF0ZT09PSRuKXt3ZS5fdHJhbnNpdGlvblRvKFl0LFluLCRuKTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyx3ZSl9Y2F0Y2goRWUpe3Rocm93IHdlLl90cmFuc2l0aW9uVG8oWWksWXQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLEVlKSxFZX1yZXR1cm4gdGhpcy5fdXBkYXRlVGFza0NvdW50KHdlLC0xKSx3ZS5fdHJhbnNpdGlvblRvKHdpLFl0KSx3ZS5ydW5Db3VudD0wLHdlfX0sU3QucHJvdG90eXBlLl91cGRhdGVUYXNrQ291bnQ9ZnVuY3Rpb24od2UsRWUpe3ZhciBWZT13ZS5fem9uZURlbGVnYXRlczstMT09RWUmJih3ZS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IodmFyIGtuPTA7a248VmUubGVuZ3RoO2tuKyspVmVba25dLl91cGRhdGVUYXNrQ291bnQod2UudHlwZSxFZSl9LFN0fSgpO21lLl9fc3ltYm9sX189JDt2YXIgcnIsS2U9e25hbWU6IiIsb25IYXNUYXNrOmZ1bmN0aW9uKFN0LHdlLEVlLFZlKXtyZXR1cm4gU3QuaGFzVGFzayhFZSxWZSl9LG9uU2NoZWR1bGVUYXNrOmZ1bmN0aW9uKFN0LHdlLEVlLFZlKXtyZXR1cm4gU3Quc2NoZWR1bGVUYXNrKEVlLFZlKX0sb25JbnZva2VUYXNrOmZ1bmN0aW9uKFN0LHdlLEVlLFZlLGtuLElyKXtyZXR1cm4gU3QuaW52b2tlVGFzayhFZSxWZSxrbixJcil9LG9uQ2FuY2VsVGFzazpmdW5jdGlvbihTdCx3ZSxFZSxWZSl7cmV0dXJuIFN0LmNhbmNlbFRhc2soRWUsVmUpfX0sbHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTdCh3ZSxFZSxWZSl7dGhpcy5fdGFza0NvdW50cz17bWljcm9UYXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT13ZSx0aGlzLl9wYXJlbnREZWxlZ2F0ZT1FZSx0aGlzLl9mb3JrWlM9VmUmJihWZSYmVmUub25Gb3JrP1ZlOkVlLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PVZlJiYoVmUub25Gb3JrP0VlOkVlLl9mb3JrRGxndCksdGhpcy5fZm9ya0N1cnJab25lPVZlJiYoVmUub25Gb3JrP3RoaXMuem9uZTpFZS5fZm9ya0N1cnJab25lKSx0aGlzLl9pbnRlcmNlcHRaUz1WZSYmKFZlLm9uSW50ZXJjZXB0P1ZlOkVlLl9pbnRlcmNlcHRaUyksdGhpcy5faW50ZXJjZXB0RGxndD1WZSYmKFZlLm9uSW50ZXJjZXB0P0VlOkVlLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9pbnRlcmNlcHRDdXJyWm9uZT1WZSYmKFZlLm9uSW50ZXJjZXB0P3RoaXMuem9uZTpFZS5faW50ZXJjZXB0Q3VyclpvbmUpLHRoaXMuX2ludm9rZVpTPVZlJiYoVmUub25JbnZva2U/VmU6RWUuX2ludm9rZVpTKSx0aGlzLl9pbnZva2VEbGd0PVZlJiYoVmUub25JbnZva2U/RWU6RWUuX2ludm9rZURsZ3QpLHRoaXMuX2ludm9rZUN1cnJab25lPVZlJiYoVmUub25JbnZva2U/dGhpcy56b25lOkVlLl9pbnZva2VDdXJyWm9uZSksdGhpcy5faGFuZGxlRXJyb3JaUz1WZSYmKFZlLm9uSGFuZGxlRXJyb3I/VmU6RWUuX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1WZSYmKFZlLm9uSGFuZGxlRXJyb3I/RWU6RWUuX2hhbmRsZUVycm9yRGxndCksdGhpcy5faGFuZGxlRXJyb3JDdXJyWm9uZT1WZSYmKFZlLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOkVlLl9oYW5kbGVFcnJvckN1cnJab25lKSx0aGlzLl9zY2hlZHVsZVRhc2taUz1WZSYmKFZlLm9uU2NoZWR1bGVUYXNrP1ZlOkVlLl9zY2hlZHVsZVRhc2taUyksdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1WZSYmKFZlLm9uU2NoZWR1bGVUYXNrP0VlOkVlLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1WZSYmKFZlLm9uU2NoZWR1bGVUYXNrP3RoaXMuem9uZTpFZS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLHRoaXMuX2ludm9rZVRhc2taUz1WZSYmKFZlLm9uSW52b2tlVGFzaz9WZTpFZS5faW52b2tlVGFza1pTKSx0aGlzLl9pbnZva2VUYXNrRGxndD1WZSYmKFZlLm9uSW52b2tlVGFzaz9FZTpFZS5faW52b2tlVGFza0RsZ3QpLHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZT1WZSYmKFZlLm9uSW52b2tlVGFzaz90aGlzLnpvbmU6RWUuX2ludm9rZVRhc2tDdXJyWm9uZSksdGhpcy5fY2FuY2VsVGFza1pTPVZlJiYoVmUub25DYW5jZWxUYXNrP1ZlOkVlLl9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PVZlJiYoVmUub25DYW5jZWxUYXNrP0VlOkVlLl9jYW5jZWxUYXNrRGxndCksdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPVZlJiYoVmUub25DYW5jZWxUYXNrP3RoaXMuem9uZTpFZS5fY2FuY2VsVGFza0N1cnJab25lKSx0aGlzLl9oYXNUYXNrWlM9bnVsbCx0aGlzLl9oYXNUYXNrRGxndD1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0T3duZXI9bnVsbCx0aGlzLl9oYXNUYXNrQ3VyclpvbmU9bnVsbDt2YXIga249VmUmJlZlLm9uSGFzVGFzazsoa258fEVlJiZFZS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1rbj9WZTpLZSx0aGlzLl9oYXNUYXNrRGxndD1FZSx0aGlzLl9oYXNUYXNrRGxndE93bmVyPXRoaXMsdGhpcy5faGFzVGFza0N1cnJab25lPXdlLFZlLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9S2UsdGhpcy5fc2NoZWR1bGVUYXNrRGxndD1FZSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT10aGlzLnpvbmUpLFZlLm9uSW52b2tlVGFza3x8KHRoaXMuX2ludm9rZVRhc2taUz1LZSx0aGlzLl9pbnZva2VUYXNrRGxndD1FZSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxWZS5vbkNhbmNlbFRhc2t8fCh0aGlzLl9jYW5jZWxUYXNrWlM9S2UsdGhpcy5fY2FuY2VsVGFza0RsZ3Q9RWUsdGhpcy5fY2FuY2VsVGFza0N1cnJab25lPXRoaXMuem9uZSkpfXJldHVybiBTdC5wcm90b3R5cGUuZm9yaz1mdW5jdGlvbih3ZSxFZSl7cmV0dXJuIHRoaXMuX2ZvcmtaUz90aGlzLl9mb3JrWlMub25Gb3JrKHRoaXMuX2ZvcmtEbGd0LHRoaXMuem9uZSx3ZSxFZSk6bmV3IG1lKHdlLEVlKX0sU3QucHJvdG90eXBlLmludGVyY2VwdD1mdW5jdGlvbih3ZSxFZSxWZSl7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsd2UsRWUsVmUpOkVlfSxTdC5wcm90b3R5cGUuaW52b2tlPWZ1bmN0aW9uKHdlLEVlLFZlLGtuLElyKXtyZXR1cm4gdGhpcy5faW52b2tlWlM/dGhpcy5faW52b2tlWlMub25JbnZva2UodGhpcy5faW52b2tlRGxndCx0aGlzLl9pbnZva2VDdXJyWm9uZSx3ZSxFZSxWZSxrbixJcik6RWUuYXBwbHkoVmUsa24pfSxTdC5wcm90b3R5cGUuaGFuZGxlRXJyb3I9ZnVuY3Rpb24od2UsRWUpe3JldHVybiF0aGlzLl9oYW5kbGVFcnJvclpTfHx0aGlzLl9oYW5kbGVFcnJvclpTLm9uSGFuZGxlRXJyb3IodGhpcy5faGFuZGxlRXJyb3JEbGd0LHRoaXMuX2hhbmRsZUVycm9yQ3VyclpvbmUsd2UsRWUpfSxTdC5wcm90b3R5cGUuc2NoZWR1bGVUYXNrPWZ1bmN0aW9uKHdlLEVlKXt2YXIgVmU9RWU7aWYodGhpcy5fc2NoZWR1bGVUYXNrWlMpdGhpcy5faGFzVGFza1pTJiZWZS5fem9uZURlbGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpLChWZT10aGlzLl9zY2hlZHVsZVRhc2taUy5vblNjaGVkdWxlVGFzayh0aGlzLl9zY2hlZHVsZVRhc2tEbGd0LHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lLHdlLEVlKSl8fChWZT1FZSk7ZWxzZSBpZihFZS5zY2hlZHVsZUZuKUVlLnNjaGVkdWxlRm4oRWUpO2Vsc2V7aWYoRWUudHlwZSE9QW4pdGhyb3cgbmV3IEVycm9yKCJUYXNrIGlzIG1pc3Npbmcgc2NoZWR1bGVGbi4iKTtNbihFZSl9cmV0dXJuIFZlfSxTdC5wcm90b3R5cGUuaW52b2tlVGFzaz1mdW5jdGlvbih3ZSxFZSxWZSxrbil7cmV0dXJuIHRoaXMuX2ludm9rZVRhc2taUz90aGlzLl9pbnZva2VUYXNrWlMub25JbnZva2VUYXNrKHRoaXMuX2ludm9rZVRhc2tEbGd0LHRoaXMuX2ludm9rZVRhc2tDdXJyWm9uZSx3ZSxFZSxWZSxrbik6RWUuY2FsbGJhY2suYXBwbHkoVmUsa24pfSxTdC5wcm90b3R5cGUuY2FuY2VsVGFzaz1mdW5jdGlvbih3ZSxFZSl7dmFyIFZlO2lmKHRoaXMuX2NhbmNlbFRhc2taUylWZT10aGlzLl9jYW5jZWxUYXNrWlMub25DYW5jZWxUYXNrKHRoaXMuX2NhbmNlbFRhc2tEbGd0LHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZSx3ZSxFZSk7ZWxzZXtpZighRWUuY2FuY2VsRm4pdGhyb3cgRXJyb3IoIlRhc2sgaXMgbm90IGNhbmNlbGFibGUiKTtWZT1FZS5jYW5jZWxGbihFZSl9cmV0dXJuIFZlfSxTdC5wcm90b3R5cGUuaGFzVGFzaz1mdW5jdGlvbih3ZSxFZSl7dHJ5e3RoaXMuX2hhc1Rhc2taUyYmdGhpcy5faGFzVGFza1pTLm9uSGFzVGFzayh0aGlzLl9oYXNUYXNrRGxndCx0aGlzLl9oYXNUYXNrQ3VyclpvbmUsd2UsRWUpfWNhdGNoKFZlKXt0aGlzLmhhbmRsZUVycm9yKHdlLFZlKX19LFN0LnByb3RvdHlwZS5fdXBkYXRlVGFza0NvdW50PWZ1bmN0aW9uKHdlLEVlKXt2YXIgVmU9dGhpcy5fdGFza0NvdW50cyxrbj1WZVt3ZV0sSXI9VmVbd2VdPWtuK0VlO2lmKElyPDApdGhyb3cgbmV3IEVycm9yKCJNb3JlIHRhc2tzIGV4ZWN1dGVkIHRoZW4gd2VyZSBzY2hlZHVsZWQuIik7MCE9a24mJjAhPUlyfHx0aGlzLmhhc1Rhc2sodGhpcy56b25lLHttaWNyb1Rhc2s6VmUubWljcm9UYXNrPjAsbWFjcm9UYXNrOlZlLm1hY3JvVGFzaz4wLGV2ZW50VGFzazpWZS5ldmVudFRhc2s+MCxjaGFuZ2U6d2V9KX0sU3R9KCksSmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTdCh3ZSxFZSxWZSxrbixJcix4Yyl7aWYodGhpcy5fem9uZT1udWxsLHRoaXMucnVuQ291bnQ9MCx0aGlzLl96b25lRGVsZWdhdGVzPW51bGwsdGhpcy5fc3RhdGU9Im5vdFNjaGVkdWxlZCIsdGhpcy50eXBlPXdlLHRoaXMuc291cmNlPUVlLHRoaXMuZGF0YT1rbix0aGlzLnNjaGVkdWxlRm49SXIsdGhpcy5jYW5jZWxGbj14YywhVmUpdGhyb3cgbmV3IEVycm9yKCJjYWxsYmFjayBpcyBub3QgZGVmaW5lZCIpO3RoaXMuY2FsbGJhY2s9VmU7dmFyIGN0PXRoaXM7dGhpcy5pbnZva2U9d2U9PT1TaSYma24mJmtuLnVzZUc/U3QuaW52b2tlVGFzazpmdW5jdGlvbigpe3JldHVybiBTdC5pbnZva2VUYXNrLmNhbGwoUSxjdCx0aGlzLGFyZ3VtZW50cyl9fXJldHVybiBTdC5pbnZva2VUYXNrPWZ1bmN0aW9uKHdlLEVlLFZlKXt3ZXx8KHdlPXRoaXMpLFZyKys7dHJ5e3JldHVybiB3ZS5ydW5Db3VudCsrLHdlLnpvbmUucnVuVGFzayh3ZSxFZSxWZSl9ZmluYWxseXsxPT1WciYmSG4oKSxWci0tfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LnByb3RvdHlwZSwiem9uZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl96b25lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdC5wcm90b3R5cGUsInN0YXRlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFN0LnByb3RvdHlwZS5jYW5jZWxTY2hlZHVsZVJlcXVlc3Q9ZnVuY3Rpb24oKXt0aGlzLl90cmFuc2l0aW9uVG8od2ksYWkpfSxTdC5wcm90b3R5cGUuX3RyYW5zaXRpb25Ubz1mdW5jdGlvbih3ZSxFZSxWZSl7aWYodGhpcy5fc3RhdGUhPT1FZSYmdGhpcy5fc3RhdGUhPT1WZSl0aHJvdyBuZXcgRXJyb3IoIiIuY29uY2F0KHRoaXMudHlwZSwiICciKS5jb25jYXQodGhpcy5zb3VyY2UsIic6IGNhbiBub3QgdHJhbnNpdGlvbiB0byAnIikuY29uY2F0KHdlLCInLCBleHBlY3Rpbmcgc3RhdGUgJyIpLmNvbmNhdChFZSwiJyIpLmNvbmNhdChWZT8iIG9yICciK1ZlKyInIjoiIiwiLCB3YXMgJyIpLmNvbmNhdCh0aGlzLl9zdGF0ZSwiJy4iKSk7dGhpcy5fc3RhdGU9d2Usd2U9PXdpJiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX0sU3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YSYmdHlwZW9mIHRoaXMuZGF0YS5oYW5kbGVJZDwidSI/dGhpcy5kYXRhLmhhbmRsZUlkLnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpfSxTdC5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6dGhpcy50eXBlLHN0YXRlOnRoaXMuc3RhdGUsc291cmNlOnRoaXMuc291cmNlLHpvbmU6dGhpcy56b25lLm5hbWUscnVuQ291bnQ6dGhpcy5ydW5Db3VudH19LFN0fSgpLGZ0PSQoInNldFRpbWVvdXQiKSxDdD0kKCJQcm9taXNlIiksSXQ9JCgidGhlbiIpLE50PVtdLGJuPSExO2Z1bmN0aW9uIEFpKFN0KXtpZihycnx8UVtDdF0mJihycj1RW0N0XS5yZXNvbHZlKDApKSxycil7dmFyIHdlPXJyW0l0XTt3ZXx8KHdlPXJyLnRoZW4pLHdlLmNhbGwocnIsU3QpfWVsc2UgUVtmdF0oU3QsMCl9ZnVuY3Rpb24gTW4oU3QpezA9PT1WciYmMD09PU50Lmxlbmd0aCYmQWkoSG4pLFN0JiZOdC5wdXNoKFN0KX1mdW5jdGlvbiBIbigpe2lmKCFibil7Zm9yKGJuPSEwO050Lmxlbmd0aDspe3ZhciBTdD1OdDtOdD1bXTtmb3IodmFyIHdlPTA7d2U8U3QubGVuZ3RoO3dlKyspe3ZhciBFZT1TdFt3ZV07dHJ5e0VlLnpvbmUucnVuVGFzayhFZSxudWxsLG51bGwpfWNhdGNoKFZlKXtEci5vblVuaGFuZGxlZEVycm9yKFZlKX19fURyLm1pY3JvdGFza0RyYWluRG9uZSgpLGJuPSExfX12YXIgT3Q9e25hbWU6Ik5PIFpPTkUifSx3aT0ibm90U2NoZWR1bGVkIixhaT0ic2NoZWR1bGluZyIsWW49InNjaGVkdWxlZCIsJG49InJ1bm5pbmciLFl0PSJjYW5jZWxpbmciLFlpPSJ1bmtub3duIixBbj0ibWljcm9UYXNrIixVbj0ibWFjcm9UYXNrIixTaT0iZXZlbnRUYXNrIixqbj17fSxEcj17c3ltYm9sOiQsY3VycmVudFpvbmVGcmFtZTpmdW5jdGlvbigpe3JldHVybiBicn0sb25VbmhhbmRsZWRFcnJvcjpBcixtaWNyb3Rhc2tEcmFpbkRvbmU6QXIsc2NoZWR1bGVNaWNyb1Rhc2s6TW4sc2hvd1VuY2F1Z2h0RXJyb3I6ZnVuY3Rpb24oKXtyZXR1cm4hbWVbJCgiaWdub3JlQ29uc29sZUVycm9yVW5jYXVnaHRFcnJvciIpXX0scGF0Y2hFdmVudFRhcmdldDpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaE9uUHJvcGVydGllczpBcixwYXRjaE1ldGhvZDpmdW5jdGlvbigpe3JldHVybiBBcn0sYmluZEFyZ3VtZW50czpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaFRoZW46ZnVuY3Rpb24oKXtyZXR1cm4gQXJ9LHBhdGNoTWFjcm9UYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxwYXRjaEV2ZW50UHJvdG90eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxpc0lFT3JFZGdlOmZ1bmN0aW9uKCl7cmV0dXJuITF9LGdldEdsb2JhbE9iamVjdHM6ZnVuY3Rpb24oKXt9LE9iamVjdERlZmluZVByb3BlcnR5OmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24oKXt9LE9iamVjdENyZWF0ZTpmdW5jdGlvbigpe30sQXJyYXlTbGljZTpmdW5jdGlvbigpe3JldHVybltdfSxwYXRjaENsYXNzOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSx3cmFwV2l0aEN1cnJlbnRab25lOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxmaWx0ZXJQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGF0dGFjaE9yaWdpblRvUGF0Y2hlZDpmdW5jdGlvbigpe3JldHVybiBBcn0sX3JlZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oKXtyZXR1cm4gQXJ9LHBhdGNoQ2FsbGJhY2tzOmZ1bmN0aW9uKCl7cmV0dXJuIEFyfSxuYXRpdmVTY2hlZHVsZU1pY3JvVGFzazpBaX0sYnI9e3BhcmVudDpudWxsLHpvbmU6bmV3IG1lKG51bGwsbnVsbCl9LHhhPW51bGwsVnI9MDtmdW5jdGlvbiBBcigpe31JKCJab25lIiwiWm9uZSIpLFEuWm9uZT1tZX0odHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZzZWxmfHxnbG9iYWwpO3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdD1PYmplY3QuZGVmaW5lUHJvcGVydHksZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsaT1PYmplY3QuY3JlYXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLG89ImFkZEV2ZW50TGlzdGVuZXIiLHM9InJlbW92ZUV2ZW50TGlzdGVuZXIiLGE9Wm9uZS5fX3N5bWJvbF9fKG8pLGw9Wm9uZS5fX3N5bWJvbF9fKHMpLGM9InRydWUiLHU9ImZhbHNlIixkPVpvbmUuX19zeW1ib2xfXygiIik7ZnVuY3Rpb24gcChRLHJlKXtyZXR1cm4gWm9uZS5jdXJyZW50LndyYXAoUSxyZSl9ZnVuY3Rpb24gaChRLHJlLF9lLEksWCl7cmV0dXJuIFpvbmUuY3VycmVudC5zY2hlZHVsZU1hY3JvVGFzayhRLHJlLF9lLEksWCl9dmFyIGY9Wm9uZS5fX3N5bWJvbF9fLG09dHlwZW9mIHdpbmRvdzwidSIseD1tP3dpbmRvdzp2b2lkIDAsZz1tJiZ4fHwib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGZ8fGdsb2JhbDtmdW5jdGlvbiBEKFEscmUpe2Zvcih2YXIgX2U9US5sZW5ndGgtMTtfZT49MDtfZS0tKSJmdW5jdGlvbiI9PXR5cGVvZiBRW19lXSYmKFFbX2VdPXAoUVtfZV0scmUrIl8iK19lKSk7cmV0dXJuIFF9ZnVuY3Rpb24gayhRKXtyZXR1cm4hUXx8ITEhPT1RLndyaXRhYmxlJiYhKCJmdW5jdGlvbiI9PXR5cGVvZiBRLmdldCYmdHlwZW9mIFEuc2V0PiJ1Iil9dmFyIFo9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLHo9ISgibnciaW4gZykmJnR5cGVvZiBnLnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKGcucHJvY2VzcyksZmU9IXomJiFaJiYhKCFtfHwheC5IVE1MRWxlbWVudCksdWU9dHlwZW9mIGcucHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwoZy5wcm9jZXNzKSYmIVomJiEoIW18fCF4LkhUTUxFbGVtZW50KSxoZT17fSx3PWZ1bmN0aW9uKFEpe2lmKFE9UXx8Zy5ldmVudCl7dmFyIHJlPWhlW1EudHlwZV07cmV8fChyZT1oZVtRLnR5cGVdPWYoIk9OX1BST1BFUlRZIitRLnR5cGUpKTt2YXIgWCxfZT10aGlzfHxRLnRhcmdldHx8ZyxJPV9lW3JlXTtpZihmZSYmX2U9PT14JiYiZXJyb3IiPT09US50eXBlKXt2YXIgJD1ROyEwPT09KFg9SSYmSS5jYWxsKHRoaXMsJC5tZXNzYWdlLCQuZmlsZW5hbWUsJC5saW5lbm8sJC5jb2xubywkLmVycm9yKSkmJlEucHJldmVudERlZmF1bHQoKX1lbHNlIG51bGwhPShYPUkmJkkuYXBwbHkodGhpcyxhcmd1bWVudHMpKSYmIVgmJlEucHJldmVudERlZmF1bHQoKTtyZXR1cm4gWH19O2Z1bmN0aW9uIEYoUSxyZSxfZSl7dmFyIEk9bihRLHJlKTtpZighSSYmX2UmJm4oX2UscmUpJiYoST17ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxJJiZJLmNvbmZpZ3VyYWJsZSl7dmFyICQ9Zigib24iK3JlKyJwYXRjaGVkIik7aWYoIVEuaGFzT3duUHJvcGVydHkoJCl8fCFRWyRdKXtkZWxldGUgSS53cml0YWJsZSxkZWxldGUgSS52YWx1ZTt2YXIgbmU9SS5nZXQsbWU9SS5zZXQsS2U9cmUuc2xpY2UoMiksbHQ9aGVbS2VdO2x0fHwobHQ9aGVbS2VdPWYoIk9OX1BST1BFUlRZIitLZSkpLEkuc2V0PWZ1bmN0aW9uKEplKXt2YXIgZnQ9dGhpczshZnQmJlE9PT1nJiYoZnQ9ZyksZnQmJigiZnVuY3Rpb24iPT10eXBlb2YgZnRbbHRdJiZmdC5yZW1vdmVFdmVudExpc3RlbmVyKEtlLHcpLG1lJiZtZS5jYWxsKGZ0LG51bGwpLGZ0W2x0XT1KZSwiZnVuY3Rpb24iPT10eXBlb2YgSmUmJmZ0LmFkZEV2ZW50TGlzdGVuZXIoS2UsdywhMSkpfSxJLmdldD1mdW5jdGlvbigpe3ZhciBKZT10aGlzO2lmKCFKZSYmUT09PWcmJihKZT1nKSwhSmUpcmV0dXJuIG51bGw7dmFyIGZ0PUplW2x0XTtpZihmdClyZXR1cm4gZnQ7aWYobmUpe3ZhciBDdD1uZS5jYWxsKHRoaXMpO2lmKEN0KXJldHVybiBJLnNldC5jYWxsKHRoaXMsQ3QpLCJmdW5jdGlvbiI9PXR5cGVvZiBKZS5yZW1vdmVBdHRyaWJ1dGUmJkplLnJlbW92ZUF0dHJpYnV0ZShyZSksQ3R9cmV0dXJuIG51bGx9LHQoUSxyZSxJKSxRWyRdPSEwfX19ZnVuY3Rpb24gcShRLHJlLF9lKXtpZihyZSlmb3IodmFyIEk9MDtJPHJlLmxlbmd0aDtJKyspRihRLCJvbiIrcmVbSV0sX2UpO2Vsc2V7dmFyIFg9W107Zm9yKHZhciAkIGluIFEpIm9uIj09JC5zbGljZSgwLDIpJiZYLnB1c2goJCk7Zm9yKHZhciBuZT0wO25lPFgubGVuZ3RoO25lKyspRihRLFhbbmVdLF9lKX19dmFyIEs9Zigib3JpZ2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIGRlKFEpe3ZhciByZT1nW1FdO2lmKHJlKXtnW2YoUSldPXJlLGdbUV09ZnVuY3Rpb24oKXt2YXIgWD1EKGFyZ3VtZW50cyxRKTtzd2l0Y2goWC5sZW5ndGgpe2Nhc2UgMDp0aGlzW0tdPW5ldyByZTticmVhaztjYXNlIDE6dGhpc1tLXT1uZXcgcmUoWFswXSk7YnJlYWs7Y2FzZSAyOnRoaXNbS109bmV3IHJlKFhbMF0sWFsxXSk7YnJlYWs7Y2FzZSAzOnRoaXNbS109bmV3IHJlKFhbMF0sWFsxXSxYWzJdKTticmVhaztjYXNlIDQ6dGhpc1tLXT1uZXcgcmUoWFswXSxYWzFdLFhbMl0sWFszXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkFyZyBsaXN0IHRvbyBsb25nLiIpfX0sbGUoZ1tRXSxyZSk7dmFyIEksX2U9bmV3IHJlKGZ1bmN0aW9uKCl7fSk7Zm9yKEkgaW4gX2UpIlhNTEh0dHBSZXF1ZXN0Ij09PVEmJiJyZXNwb25zZUJsb2IiPT09SXx8ZnVuY3Rpb24oWCl7ImZ1bmN0aW9uIj09dHlwZW9mIF9lW1hdP2dbUV0ucHJvdG90eXBlW1hdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbS11bWF0uYXBwbHkodGhpc1tLXSxhcmd1bWVudHMpfTp0KGdbUV0ucHJvdG90eXBlLFgse3NldDpmdW5jdGlvbigkKXsiZnVuY3Rpb24iPT10eXBlb2YgJD8odGhpc1tLXVtYXT1wKCQsUSsiLiIrWCksbGUodGhpc1tLXVtYXSwkKSk6dGhpc1tLXVtYXT0kfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tLXVtYXX19KX0oSSk7Zm9yKEkgaW4gcmUpInByb3RvdHlwZSIhPT1JJiZyZS5oYXNPd25Qcm9wZXJ0eShJKSYmKGdbUV1bSV09cmVbSV0pfX1mdW5jdGlvbiBZKFEscmUsX2Upe2Zvcih2YXIgST1RO0kmJiFJLmhhc093blByb3BlcnR5KHJlKTspST1lKEkpOyFJJiZRW3JlXSYmKEk9USk7dmFyIFg9ZihyZSksJD1udWxsO2lmKEkmJighKCQ9SVtYXSl8fCFJLmhhc093blByb3BlcnR5KFgpKSYmKCQ9SVtYXT1JW3JlXSxrKEkmJm4oSSxyZSkpKSl7dmFyIG1lPV9lKCQsWCxyZSk7SVtyZV09ZnVuY3Rpb24oKXtyZXR1cm4gbWUodGhpcyxhcmd1bWVudHMpfSxsZShJW3JlXSwkKX1yZXR1cm4gJH1mdW5jdGlvbiBhZShRLHJlLF9lKXt2YXIgST1udWxsO2Z1bmN0aW9uIFgoJCl7dmFyIG5lPSQuZGF0YTtyZXR1cm4gbmUuYXJnc1tuZS5jYklkeF09ZnVuY3Rpb24oKXskLmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEkuYXBwbHkobmUudGFyZ2V0LG5lLmFyZ3MpLCR9ST1ZKFEscmUsZnVuY3Rpb24oJCl7cmV0dXJuIGZ1bmN0aW9uKG5lLG1lKXt2YXIgS2U9X2UobmUsbWUpO3JldHVybiBLZS5jYklkeD49MCYmImZ1bmN0aW9uIj09dHlwZW9mIG1lW0tlLmNiSWR4XT9oKEtlLm5hbWUsbWVbS2UuY2JJZHhdLEtlLFgpOiQuYXBwbHkobmUsbWUpfX0pfWZ1bmN0aW9uIGxlKFEscmUpe1FbZigiT3JpZ2luYWxEZWxlZ2F0ZSIpXT1yZX12YXIgSWU9ITEsdmU9ITE7ZnVuY3Rpb24gbnQoKXtpZihJZSlyZXR1cm4gdmU7SWU9ITA7dHJ5e3ZhciBRPXgubmF2aWdhdG9yLnVzZXJBZ2VudDsoLTEhPT1RLmluZGV4T2YoIk1TSUUgIil8fC0xIT09US5pbmRleE9mKCJUcmlkZW50LyIpfHwtMSE9PVEuaW5kZXhPZigiRWRnZS8iKSkmJih2ZT0hMCl9Y2F0Y2h7fXJldHVybiB2ZX1ab25lLl9fbG9hZF9wYXRjaCgiWm9uZUF3YXJlUHJvbWlzZSIsZnVuY3Rpb24oUSxyZSxfZSl7dmFyIEk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixYPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxuZT1fZS5zeW1ib2wsbWU9W10sS2U9ITA9PT1RW25lKCJESVNBQkxFX1dSQVBQSU5HX1VOQ0FVR0hUX1BST01JU0VfUkVKRUNUSU9OIildLGx0PW5lKCJQcm9taXNlIiksSmU9bmUoInRoZW4iKTtfZS5vblVuaGFuZGxlZEVycm9yPWZ1bmN0aW9uKGN0KXtpZihfZS5zaG93VW5jYXVnaHRFcnJvcigpKXt2YXIgVnQ9Y3QmJmN0LnJlamVjdGlvbjtWdD9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixWdCBpbnN0YW5jZW9mIEVycm9yP1Z0Lm1lc3NhZ2U6VnQsIjsgWm9uZToiLGN0LnpvbmUubmFtZSwiOyBUYXNrOiIsY3QudGFzayYmY3QudGFzay5zb3VyY2UsIjsgVmFsdWU6IixWdCxWdCBpbnN0YW5jZW9mIEVycm9yP1Z0LnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcihjdCl9fSxfZS5taWNyb3Rhc2tEcmFpbkRvbmU9ZnVuY3Rpb24oKXtmb3IodmFyIGN0PWZ1bmN0aW9uKCl7dmFyIFZ0PW1lLnNoaWZ0KCk7dHJ5e1Z0LnpvbmUucnVuR3VhcmRlZChmdW5jdGlvbigpe3Rocm93IFZ0LnRocm93T3JpZ2luYWw/VnQucmVqZWN0aW9uOlZ0fSl9Y2F0Y2goRHQpeyFmdW5jdGlvbihjdCl7X2Uub25VbmhhbmRsZWRFcnJvcihjdCk7dHJ5e3ZhciBWdD1yZVtDdF07ImZ1bmN0aW9uIj09dHlwZW9mIFZ0JiZWdC5jYWxsKHRoaXMsY3QpfWNhdGNoe319KER0KX19O21lLmxlbmd0aDspY3QoKX07dmFyIEN0PW5lKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpO2Z1bmN0aW9uIE50KGN0KXtyZXR1cm4gY3QmJmN0LnRoZW59ZnVuY3Rpb24gYm4oY3Qpe3JldHVybiBjdH1mdW5jdGlvbiBycihjdCl7cmV0dXJuIEVlLnJlamVjdChjdCl9dmFyIEFpPW5lKCJzdGF0ZSIpLE1uPW5lKCJ2YWx1ZSIpLEhuPW5lKCJmaW5hbGx5IiksT3Q9bmUoInBhcmVudFByb21pc2VWYWx1ZSIpLHdpPW5lKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxZbj1udWxsLFl0PSExO2Z1bmN0aW9uIEFuKGN0LFZ0KXtyZXR1cm4gZnVuY3Rpb24oRHQpe3RyeXtEcihjdCxWdCxEdCl9Y2F0Y2goaXQpe0RyKGN0LCExLGl0KX19fXZhciBVbj1mdW5jdGlvbigpe3ZhciBjdD0hMTtyZXR1cm4gZnVuY3Rpb24oRHQpe3JldHVybiBmdW5jdGlvbigpe2N0fHwoY3Q9ITAsRHQuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19fSxqbj1uZSgiY3VycmVudFRhc2tUcmFjZSIpO2Z1bmN0aW9uIERyKGN0LFZ0LER0KXt2YXIgaXQ9VW4oKTtpZihjdD09PUR0KXRocm93IG5ldyBUeXBlRXJyb3IoIlByb21pc2UgcmVzb2x2ZWQgd2l0aCBpdHNlbGYiKTtpZihjdFtBaV09PT1Zbil7dmFyIGNuPW51bGw7dHJ5eygib2JqZWN0Ij09dHlwZW9mIER0fHwiZnVuY3Rpb24iPT10eXBlb2YgRHQpJiYoY249RHQmJkR0LnRoZW4pfWNhdGNoKG1pKXtyZXR1cm4gaXQoZnVuY3Rpb24oKXtEcihjdCwhMSxtaSl9KSgpLGN0fWlmKFZ0IT09WXQmJkR0IGluc3RhbmNlb2YgRWUmJkR0Lmhhc093blByb3BlcnR5KEFpKSYmRHQuaGFzT3duUHJvcGVydHkoTW4pJiZEdFtBaV0hPT1Zbil4YShEdCksRHIoY3QsRHRbQWldLER0W01uXSk7ZWxzZSBpZihWdCE9PVl0JiYiZnVuY3Rpb24iPT10eXBlb2YgY24pdHJ5e2NuLmNhbGwoRHQsaXQoQW4oY3QsVnQpKSxpdChBbihjdCwhMSkpKX1jYXRjaChtaSl7aXQoZnVuY3Rpb24oKXtEcihjdCwhMSxtaSl9KSgpfWVsc2V7Y3RbQWldPVZ0O3ZhciBxbj1jdFtNbl07aWYoY3RbTW5dPUR0LGN0W0huXT09PUhuJiYhMD09PVZ0JiYoY3RbQWldPWN0W3dpXSxjdFtNbl09Y3RbT3RdKSxWdD09PVl0JiZEdCBpbnN0YW5jZW9mIEVycm9yKXt2YXIgQm49cmUuY3VycmVudFRhc2smJnJlLmN1cnJlbnRUYXNrLmRhdGEmJnJlLmN1cnJlbnRUYXNrLmRhdGEuX19jcmVhdGlvblRyYWNlX187Qm4mJlgoRHQsam4se2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOkJufSl9Zm9yKHZhciBsaT0wO2xpPHFuLmxlbmd0aDspVnIoY3QscW5bbGkrK10scW5bbGkrK10scW5bbGkrK10scW5bbGkrK10pO2lmKDA9PXFuLmxlbmd0aCYmVnQ9PVl0KXtjdFtBaV09MDt2YXIgY2k9RHQ7dHJ5e3Rocm93IG5ldyBFcnJvcigiVW5jYXVnaHQgKGluIHByb21pc2UpOiAiK2Z1bmN0aW9uKGN0KXtyZXR1cm4gY3QmJmN0LnRvU3RyaW5nPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZz8oY3QuY29uc3RydWN0b3ImJmN0LmNvbnN0cnVjdG9yLm5hbWV8fCIiKSsiOiAiK0pTT04uc3RyaW5naWZ5KGN0KTpjdD9jdC50b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdCl9KER0KSsoRHQmJkR0LnN0YWNrPyJcbiIrRHQuc3RhY2s6IiIpKX1jYXRjaChtaSl7Y2k9bWl9S2UmJihjaS50aHJvd09yaWdpbmFsPSEwKSxjaS5yZWplY3Rpb249RHQsY2kucHJvbWlzZT1jdCxjaS56b25lPXJlLmN1cnJlbnQsY2kudGFzaz1yZS5jdXJyZW50VGFzayxtZS5wdXNoKGNpKSxfZS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIGN0fXZhciBicj1uZSgicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiB4YShjdCl7aWYoMD09PWN0W0FpXSl7dHJ5e3ZhciBWdD1yZVticl07VnQmJiJmdW5jdGlvbiI9PXR5cGVvZiBWdCYmVnQuY2FsbCh0aGlzLHtyZWplY3Rpb246Y3RbTW5dLHByb21pc2U6Y3R9KX1jYXRjaHt9Y3RbQWldPVl0O2Zvcih2YXIgRHQ9MDtEdDxtZS5sZW5ndGg7RHQrKyljdD09PW1lW0R0XS5wcm9taXNlJiZtZS5zcGxpY2UoRHQsMSl9fWZ1bmN0aW9uIFZyKGN0LFZ0LER0LGl0LGNuKXt4YShjdCk7dmFyIHFuPWN0W0FpXSxCbj1xbj8iZnVuY3Rpb24iPT10eXBlb2YgaXQ/aXQ6Ym46ImZ1bmN0aW9uIj09dHlwZW9mIGNuP2NuOnJyO1Z0LnNjaGVkdWxlTWljcm9UYXNrKCJQcm9taXNlLnRoZW4iLGZ1bmN0aW9uKCl7dHJ5e3ZhciBsaT1jdFtNbl0sY2k9ISFEdCYmSG49PT1EdFtIbl07Y2kmJihEdFtPdF09bGksRHRbd2ldPXFuKTt2YXIgbWk9VnQucnVuKEJuLHZvaWQgMCxjaSYmQm4hPT1yciYmQm4hPT1ibj9bXTpbbGldKTtEcihEdCwhMCxtaSl9Y2F0Y2goSWkpe0RyKER0LCExLElpKX19LER0KX12YXIgU3Q9ZnVuY3Rpb24oKXt9LHdlPVEuQWdncmVnYXRlRXJyb3IsRWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjdChWdCl7dmFyIER0PXRoaXM7aWYoIShEdCBpbnN0YW5jZW9mIGN0KSl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYW4gaW5zdGFuY2VvZiBQcm9taXNlLiIpO0R0W0FpXT1ZbixEdFtNbl09W107dHJ5e3ZhciBpdD1VbigpO1Z0JiZWdChpdChBbihEdCwhMCkpLGl0KEFuKER0LFl0KSkpfWNhdGNoKGNuKXtEcihEdCwhMSxjbil9fXJldHVybiBjdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiBab25lQXdhcmVQcm9taXNlKCkgeyBbbmF0aXZlIGNvZGVdIH0ifSxjdC5yZXNvbHZlPWZ1bmN0aW9uKFZ0KXtyZXR1cm4gRHIobmV3IHRoaXMobnVsbCksITAsVnQpfSxjdC5yZWplY3Q9ZnVuY3Rpb24oVnQpe3JldHVybiBEcihuZXcgdGhpcyhudWxsKSxZdCxWdCl9LGN0LmFueT1mdW5jdGlvbihWdCl7aWYoIVZ0fHwiZnVuY3Rpb24iIT10eXBlb2YgVnRbU3ltYm9sLml0ZXJhdG9yXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHdlKFtdLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKTt2YXIgRHQ9W10saXQ9MDt0cnl7Zm9yKHZhciBjbj0wLHFuPVZ0O2NuPHFuLmxlbmd0aDtjbisrKWl0KyssRHQucHVzaChjdC5yZXNvbHZlKHFuW2NuXSkpfWNhdGNoe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgd2UoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpfWlmKDA9PT1pdClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHdlKFtdLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKTt2YXIgbGk9ITEsY2k9W107cmV0dXJuIG5ldyBjdChmdW5jdGlvbihtaSxJaSl7Zm9yKHZhciBQcj0wO1ByPER0Lmxlbmd0aDtQcisrKUR0W1ByXS50aGVuKGZ1bmN0aW9uKGZzKXtsaXx8KGxpPSEwLG1pKGZzKSl9LGZ1bmN0aW9uKGZzKXtjaS5wdXNoKGZzKSwwPT0tLWl0JiYobGk9ITAsSWkobmV3IHdlKGNpLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfSxjdC5yYWNlPWZ1bmN0aW9uKFZ0KXt2YXIgRHQsaXQsY249bmV3IHRoaXMoZnVuY3Rpb24oSWksUHIpe0R0PUlpLGl0PVByfSk7ZnVuY3Rpb24gcW4oSWkpe0R0KElpKX1mdW5jdGlvbiBCbihJaSl7aXQoSWkpfWZvcih2YXIgbGk9MCxjaT1WdDtsaTxjaS5sZW5ndGg7bGkrKyl7dmFyIG1pPWNpW2xpXTtOdChtaSl8fChtaT10aGlzLnJlc29sdmUobWkpKSxtaS50aGVuKHFuLEJuKX1yZXR1cm4gY259LGN0LmFsbD1mdW5jdGlvbihWdCl7cmV0dXJuIGN0LmFsbFdpdGhDYWxsYmFjayhWdCl9LGN0LmFsbFNldHRsZWQ9ZnVuY3Rpb24oVnQpe3JldHVybih0aGlzJiZ0aGlzLnByb3RvdHlwZSBpbnN0YW5jZW9mIGN0P3RoaXM6Y3QpLmFsbFdpdGhDYWxsYmFjayhWdCx7dGhlbkNhbGxiYWNrOmZ1bmN0aW9uKGl0KXtyZXR1cm57c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOml0fX0sZXJyb3JDYWxsYmFjazpmdW5jdGlvbihpdCl7cmV0dXJue3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjppdH19fSl9LGN0LmFsbFdpdGhDYWxsYmFjaz1mdW5jdGlvbihWdCxEdCl7Zm9yKHZhciBpdCxjbixxbj1uZXcgdGhpcyhmdW5jdGlvbihTbyx0cyl7aXQ9U28sY249dHN9KSxCbj0yLGxpPTAsY2k9W10sbWk9ZnVuY3Rpb24oU28pe050KFNvKXx8KFNvPUlpLnJlc29sdmUoU28pKTt2YXIgdHM9bGk7dHJ5e1NvLnRoZW4oZnVuY3Rpb24ocG8pe2NpW3RzXT1EdD9EdC50aGVuQ2FsbGJhY2socG8pOnBvLDA9PS0tQm4mJml0KGNpKX0sZnVuY3Rpb24ocG8pe0R0PyhjaVt0c109RHQuZXJyb3JDYWxsYmFjayhwbyksMD09LS1CbiYmaXQoY2kpKTpjbihwbyl9KX1jYXRjaChwbyl7Y24ocG8pfUJuKyssbGkrK30sSWk9dGhpcyxQcj0wLGZzPVZ0O1ByPGZzLmxlbmd0aDtQcisrKW1pKGZzW1ByXSk7cmV0dXJuIDA9PShCbi09MikmJml0KGNpKSxxbn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0LnByb3RvdHlwZSxTeW1ib2wudG9TdHJpbmdUYWcse2dldDpmdW5jdGlvbigpe3JldHVybiJQcm9taXNlIn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY3QucHJvdG90eXBlLFN5bWJvbC5zcGVjaWVzLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY3R9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksY3QucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oVnQsRHQpe3ZhciBpdCxjbj1udWxsPT09KGl0PXRoaXMuY29uc3RydWN0b3IpfHx2b2lkIDA9PT1pdD92b2lkIDA6aXRbU3ltYm9sLnNwZWNpZXNdOyghY258fCJmdW5jdGlvbiIhPXR5cGVvZiBjbikmJihjbj10aGlzLmNvbnN0cnVjdG9yfHxjdCk7dmFyIHFuPW5ldyBjbihTdCksQm49cmUuY3VycmVudDtyZXR1cm4gdGhpc1tBaV09PVluP3RoaXNbTW5dLnB1c2goQm4scW4sVnQsRHQpOlZyKHRoaXMsQm4scW4sVnQsRHQpLHFufSxjdC5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oVnQpe3JldHVybiB0aGlzLnRoZW4obnVsbCxWdCl9LGN0LnByb3RvdHlwZS5maW5hbGx5PWZ1bmN0aW9uKFZ0KXt2YXIgRHQsaXQ9bnVsbD09PShEdD10aGlzLmNvbnN0cnVjdG9yKXx8dm9pZCAwPT09RHQ/dm9pZCAwOkR0W1N5bWJvbC5zcGVjaWVzXTsoIWl0fHwiZnVuY3Rpb24iIT10eXBlb2YgaXQpJiYoaXQ9Y3QpO3ZhciBjbj1uZXcgaXQoU3QpO2NuW0huXT1Ibjt2YXIgcW49cmUuY3VycmVudDtyZXR1cm4gdGhpc1tBaV09PVluP3RoaXNbTW5dLnB1c2gocW4sY24sVnQsVnQpOlZyKHRoaXMscW4sY24sVnQsVnQpLGNufSxjdH0oKTtFZS5yZXNvbHZlPUVlLnJlc29sdmUsRWUucmVqZWN0PUVlLnJlamVjdCxFZS5yYWNlPUVlLnJhY2UsRWUuYWxsPUVlLmFsbDt2YXIgVmU9UVtsdF09US5Qcm9taXNlO1EuUHJvbWlzZT1FZTt2YXIga249bmUoInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gSXIoY3Qpe3ZhciBWdD1jdC5wcm90b3R5cGUsRHQ9SShWdCwidGhlbiIpO2lmKCFEdHx8ITEhPT1EdC53cml0YWJsZSYmRHQuY29uZmlndXJhYmxlKXt2YXIgaXQ9VnQudGhlbjtWdFtKZV09aXQsY3QucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oY24scW4pe3ZhciBCbj10aGlzO3JldHVybiBuZXcgRWUoZnVuY3Rpb24oY2ksbWkpe2l0LmNhbGwoQm4sY2ksbWkpfSkudGhlbihjbixxbil9LGN0W2tuXT0hMH19cmV0dXJuIF9lLnBhdGNoVGhlbj1JcixWZSYmKElyKFZlKSxZKFEsImZldGNoIixmdW5jdGlvbihjdCl7cmV0dXJuIGZ1bmN0aW9uKGN0KXtyZXR1cm4gZnVuY3Rpb24oVnQsRHQpe3ZhciBpdD1jdC5hcHBseShWdCxEdCk7aWYoaXQgaW5zdGFuY2VvZiBFZSlyZXR1cm4gaXQ7dmFyIGNuPWl0LmNvbnN0cnVjdG9yO3JldHVybiBjbltrbl18fElyKGNuKSxpdH19KGN0KX0pKSxQcm9taXNlW3JlLl9fc3ltYm9sX18oInVuY2F1Z2h0UHJvbWlzZUVycm9ycyIpXT1tZSxFZX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0b1N0cmluZyIsZnVuY3Rpb24oUSl7dmFyIHJlPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxfZT1mKCJPcmlnaW5hbERlbGVnYXRlIiksST1mKCJQcm9taXNlIiksWD1mKCJFcnJvciIpLCQ9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdGhpcyl7dmFyIGx0PXRoaXNbX2VdO2lmKGx0KXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBsdD9yZS5jYWxsKGx0KTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobHQpO2lmKHRoaXM9PT1Qcm9taXNlKXt2YXIgSmU9UVtJXTtpZihKZSlyZXR1cm4gcmUuY2FsbChKZSl9aWYodGhpcz09PUVycm9yKXt2YXIgZnQ9UVtYXTtpZihmdClyZXR1cm4gcmUuY2FsbChmdCl9fXJldHVybiByZS5jYWxsKHRoaXMpfTskW19lXT1yZSxGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9JDt2YXIgbmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpuZS5jYWxsKHRoaXMpfX0pO3ZhciBndD0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyIFVlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe2d0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixVZSxVZSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRlc3QiLFVlLFVlKX1jYXRjaHtndD0hMX12YXIgZmksV2kscWksZWUsVyxBZT17dXNlRzohMH0sdG49e30scHQ9e30sd3Q9bmV3IFJlZ0V4cCgiXiIrZCsiKFxcdyspKHRydWV8ZmFsc2UpJCIpLFRlPWYoInByb3BhZ2F0aW9uU3RvcHBlZCIpO2Z1bmN0aW9uIHh0KFEscmUpe3ZhciBfZT0ocmU/cmUoUSk6USkrdSxJPShyZT9yZShRKTpRKStjLFg9ZCtfZSwkPWQrSTt0bltRXT17fSx0bltRXVt1XT1YLHRuW1FdW2NdPSR9ZnVuY3Rpb24gbXQoUSxyZSxfZSxJKXt2YXIgWD1JJiZJLmFkZHx8bywkPUkmJkkucm18fHMsbmU9SSYmSS5saXN0ZW5lcnN8fCJldmVudExpc3RlbmVycyIsbWU9SSYmSS5ybUFsbHx8InJlbW92ZUFsbExpc3RlbmVycyIsS2U9ZihYKSxsdD0iLiIrWCsiOiIsQ3Q9ZnVuY3Rpb24oSG4sT3Qsd2kpe2lmKCFIbi5pc1JlbW92ZWQpe3ZhciBZbixhaT1Ibi5jYWxsYmFjazsib2JqZWN0Ij09dHlwZW9mIGFpJiZhaS5oYW5kbGVFdmVudCYmKEhuLmNhbGxiYWNrPWZ1bmN0aW9uKFlpKXtyZXR1cm4gYWkuaGFuZGxlRXZlbnQoWWkpfSxIbi5vcmlnaW5hbERlbGVnYXRlPWFpKTt0cnl7SG4uaW52b2tlKEhuLE90LFt3aV0pfWNhdGNoKFlpKXtZbj1ZaX12YXIgJG49SG4ub3B0aW9ucztyZXR1cm4gJG4mJiJvYmplY3QiPT10eXBlb2YgJG4mJiRuLm9uY2UmJk90WyRdLmNhbGwoT3Qsd2kudHlwZSxIbi5vcmlnaW5hbERlbGVnYXRlP0huLm9yaWdpbmFsRGVsZWdhdGU6SG4uY2FsbGJhY2ssJG4pLFlufX07ZnVuY3Rpb24gSXQoSG4sT3Qsd2kpe2lmKE90PU90fHxRLmV2ZW50KXt2YXIgYWk9SG58fE90LnRhcmdldHx8USxZbj1haVt0bltPdC50eXBlXVt3aT9jOnVdXTtpZihZbil7dmFyICRuPVtdO2lmKDE9PT1Zbi5sZW5ndGgpKFl0PUN0KFluWzBdLGFpLE90KSkmJiRuLnB1c2goWXQpO2Vsc2UgZm9yKHZhciBZaT1Zbi5zbGljZSgpLEFuPTA7QW48WWkubGVuZ3RoJiYoIU90fHwhMCE9PU90W1RlXSk7QW4rKyl7dmFyIFl0OyhZdD1DdChZaVtBbl0sYWksT3QpKSYmJG4ucHVzaChZdCl9aWYoMT09PSRuLmxlbmd0aCl0aHJvdyAkblswXTt2YXIgVW49ZnVuY3Rpb24oU2kpe3ZhciBqbj0kbltTaV07cmUubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soZnVuY3Rpb24oKXt0aHJvdyBqbn0pfTtmb3IoQW49MDtBbjwkbi5sZW5ndGg7QW4rKylVbihBbil9fX12YXIgTnQ9ZnVuY3Rpb24oSG4pe3JldHVybiBJdCh0aGlzLEhuLCExKX0sYm49ZnVuY3Rpb24oSG4pe3JldHVybiBJdCh0aGlzLEhuLCEwKX07ZnVuY3Rpb24gcnIoSG4sT3Qpe2lmKCFIbilyZXR1cm4hMTt2YXIgd2k9ITA7T3QmJnZvaWQgMCE9PU90LnVzZUcmJih3aT1PdC51c2VHKTt2YXIgYWk9T3QmJk90LnZoLFluPSEwO090JiZ2b2lkIDAhPT1PdC5jaGtEdXAmJihZbj1PdC5jaGtEdXApO3ZhciAkbj0hMTtPdCYmdm9pZCAwIT09T3QucnQmJigkbj1PdC5ydCk7Zm9yKHZhciBZdD1IbjtZdCYmIVl0Lmhhc093blByb3BlcnR5KFgpOylZdD1lKFl0KTtpZighWXQmJkhuW1hdJiYoWXQ9SG4pLCFZdHx8WXRbS2VdKXJldHVybiExO3ZhciBicixZaT1PdCYmT3QuZXZlbnROYW1lVG9TdHJpbmcsQW49e30sVW49WXRbS2VdPVl0W1hdLFNpPVl0W2YoJCldPVl0WyRdLGpuPVl0W2YobmUpXT1ZdFtuZV0sRHI9WXRbZihtZSldPVl0W21lXTtmdW5jdGlvbiB4YShpdCxjbil7cmV0dXJuIWd0JiYib2JqZWN0Ij09dHlwZW9mIGl0JiZpdD8hIWl0LmNhcHR1cmU6Z3QmJmNuPyJib29sZWFuIj09dHlwZW9mIGl0P3tjYXB0dXJlOml0LHBhc3NpdmU6ITB9Oml0PyJvYmplY3QiPT10eXBlb2YgaXQmJiExIT09aXQucGFzc2l2ZT9PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saXQpLHtwYXNzaXZlOiEwfSk6aXQ6e3Bhc3NpdmU6ITB9Oml0fU90JiZPdC5wcmVwZW5kJiYoYnI9WXRbZihPdC5wcmVwZW5kKV09WXRbT3QucHJlcGVuZF0pO3ZhciBWZT13aT9mdW5jdGlvbihpdCl7aWYoIUFuLmlzRXhpc3RpbmcpcmV0dXJuIFVuLmNhbGwoQW4udGFyZ2V0LEFuLmV2ZW50TmFtZSxBbi5jYXB0dXJlP2JuOk50LEFuLm9wdGlvbnMpfTpmdW5jdGlvbihpdCl7cmV0dXJuIFVuLmNhbGwoQW4udGFyZ2V0LEFuLmV2ZW50TmFtZSxpdC5pbnZva2UsQW4ub3B0aW9ucyl9LGtuPXdpP2Z1bmN0aW9uKGl0KXtpZighaXQuaXNSZW1vdmVkKXt2YXIgY249dG5baXQuZXZlbnROYW1lXSxxbj12b2lkIDA7Y24mJihxbj1jbltpdC5jYXB0dXJlP2M6dV0pO3ZhciBCbj1xbiYmaXQudGFyZ2V0W3FuXTtpZihCbilmb3IodmFyIGxpPTA7bGk8Qm4ubGVuZ3RoO2xpKyspaWYoQm5bbGldPT09aXQpe0JuLnNwbGljZShsaSwxKSxpdC5pc1JlbW92ZWQ9ITAsMD09PUJuLmxlbmd0aCYmKGl0LmFsbFJlbW92ZWQ9ITAsaXQudGFyZ2V0W3FuXT1udWxsKTticmVha319aWYoaXQuYWxsUmVtb3ZlZClyZXR1cm4gU2kuY2FsbChpdC50YXJnZXQsaXQuZXZlbnROYW1lLGl0LmNhcHR1cmU/Ym46TnQsaXQub3B0aW9ucyl9OmZ1bmN0aW9uKGl0KXtyZXR1cm4gU2kuY2FsbChpdC50YXJnZXQsaXQuZXZlbnROYW1lLGl0Lmludm9rZSxpdC5vcHRpb25zKX0seGM9T3QmJk90LmRpZmY/T3QuZGlmZjpmdW5jdGlvbihpdCxjbil7dmFyIHFuPXR5cGVvZiBjbjtyZXR1cm4iZnVuY3Rpb24iPT09cW4mJml0LmNhbGxiYWNrPT09Y258fCJvYmplY3QiPT09cW4mJml0Lm9yaWdpbmFsRGVsZWdhdGU9PT1jbn0sY3Q9Wm9uZVtmKCJVTlBBVENIRURfRVZFTlRTIildLFZ0PVFbZigiUEFTU0lWRV9FVkVOVFMiKV0sRHQ9ZnVuY3Rpb24oaXQsY24scW4sQm4sbGksY2kpe3JldHVybiB2b2lkIDA9PT1saSYmKGxpPSExKSx2b2lkIDA9PT1jaSYmKGNpPSExKSxmdW5jdGlvbigpe3ZhciBtaT10aGlzfHxRLElpPWFyZ3VtZW50c1swXTtPdCYmT3QudHJhbnNmZXJFdmVudE5hbWUmJihJaT1PdC50cmFuc2ZlckV2ZW50TmFtZShJaSkpO3ZhciBQcj1hcmd1bWVudHNbMV07aWYoIVByKXJldHVybiBpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoeiYmInVuY2F1Z2h0RXhjZXB0aW9uIj09PUlpKXJldHVybiBpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGZzPSExO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBQcil7aWYoIVByLmhhbmRsZUV2ZW50KXJldHVybiBpdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZnM9ITB9aWYoIWFpfHxhaShpdCxQcixtaSxhcmd1bWVudHMpKXt2YXIgUGQ9Z3QmJiEhVnQmJi0xIT09VnQuaW5kZXhPZihJaSksU289eGEoYXJndW1lbnRzWzJdLFBkKTtpZihjdClmb3IodmFyIHRzPTA7dHM8Y3QubGVuZ3RoO3RzKyspaWYoSWk9PT1jdFt0c10pcmV0dXJuIFBkP2l0LmNhbGwobWksSWksUHIsU28pOml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgcG89ISFTbyYmKCJib29sZWFuIj09dHlwZW9mIFNvfHxTby5jYXB0dXJlKSxhMD0hKCFTb3x8Im9iamVjdCIhPXR5cGVvZiBTbykmJlNvLm9uY2UsWmdlPVpvbmUuY3VycmVudCxyTj10bltJaV07ck58fCh4dChJaSxZaSksck49dG5bSWldKTt2YXIgRTY9ck5bcG8/Yzp1XSxsMD1taVtFNl0sVDY9ITE7aWYobDApe2lmKFQ2PSEwLFluKWZvcih0cz0wO3RzPGwwLmxlbmd0aDt0cysrKWlmKHhjKGwwW3RzXSxQcikpcmV0dXJufWVsc2UgbDA9bWlbRTZdPVtdO3ZhciBORSxENj1taS5jb25zdHJ1Y3Rvci5uYW1lLEE2PXB0W0Q2XTtBNiYmKE5FPUE2W0lpXSksTkV8fChORT1ENitjbisoWWk/WWkoSWkpOklpKSksQW4ub3B0aW9ucz1TbyxhMCYmKEFuLm9wdGlvbnMub25jZT0hMSksQW4udGFyZ2V0PW1pLEFuLmNhcHR1cmU9cG8sQW4uZXZlbnROYW1lPUlpLEFuLmlzRXhpc3Rpbmc9VDY7dmFyIHR4PXdpP0FlOnZvaWQgMDt0eCYmKHR4LnRhc2tEYXRhPUFuKTt2YXIgTnA9WmdlLnNjaGVkdWxlRXZlbnRUYXNrKE5FLFByLHR4LHFuLEJuKTtpZihBbi50YXJnZXQ9bnVsbCx0eCYmKHR4LnRhc2tEYXRhPW51bGwpLGEwJiYoU28ub25jZT0hMCksIWd0JiYiYm9vbGVhbiI9PXR5cGVvZiBOcC5vcHRpb25zfHwoTnAub3B0aW9ucz1TbyksTnAudGFyZ2V0PW1pLE5wLmNhcHR1cmU9cG8sTnAuZXZlbnROYW1lPUlpLGZzJiYoTnAub3JpZ2luYWxEZWxlZ2F0ZT1QciksY2k/bDAudW5zaGlmdChOcCk6bDAucHVzaChOcCksbGkpcmV0dXJuIG1pfX19O3JldHVybiBZdFtYXT1EdChVbixsdCxWZSxrbiwkbiksYnImJihZdC5wcmVwZW5kTGlzdGVuZXI9RHQoYnIsIi5wcmVwZW5kTGlzdGVuZXI6IixmdW5jdGlvbihpdCl7cmV0dXJuIGJyLmNhbGwoQW4udGFyZ2V0LEFuLmV2ZW50TmFtZSxpdC5pbnZva2UsQW4ub3B0aW9ucyl9LGtuLCRuLCEwKSksWXRbJF09ZnVuY3Rpb24oKXt2YXIgaXQ9dGhpc3x8USxjbj1hcmd1bWVudHNbMF07T3QmJk90LnRyYW5zZmVyRXZlbnROYW1lJiYoY249T3QudHJhbnNmZXJFdmVudE5hbWUoY24pKTt2YXIgcW49YXJndW1lbnRzWzJdLEJuPSEhcW4mJigiYm9vbGVhbiI9PXR5cGVvZiBxbnx8cW4uY2FwdHVyZSksbGk9YXJndW1lbnRzWzFdO2lmKCFsaSlyZXR1cm4gU2kuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCFhaXx8YWkoU2ksbGksaXQsYXJndW1lbnRzKSl7dmFyIG1pLGNpPXRuW2NuXTtjaSYmKG1pPWNpW0JuP2M6dV0pO3ZhciBJaT1taSYmaXRbbWldO2lmKElpKWZvcih2YXIgUHI9MDtQcjxJaS5sZW5ndGg7UHIrKyl7dmFyIGZzPUlpW1ByXTtpZih4YyhmcyxsaSkpe2lmKElpLnNwbGljZShQciwxKSxmcy5pc1JlbW92ZWQ9ITAsMD09PUlpLmxlbmd0aCYmKGZzLmFsbFJlbW92ZWQ9ITAsaXRbbWldPW51bGwsInN0cmluZyI9PXR5cGVvZiBjbikpe3ZhciBQZD1kKyJPTl9QUk9QRVJUWSIrY247aXRbUGRdPW51bGx9cmV0dXJuIGZzLnpvbmUuY2FuY2VsVGFzayhmcyksJG4/aXQ6dm9pZCAwfX1yZXR1cm4gU2kuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sWXRbbmVdPWZ1bmN0aW9uKCl7dmFyIGl0PXRoaXN8fFEsY249YXJndW1lbnRzWzBdO090JiZPdC50cmFuc2ZlckV2ZW50TmFtZSYmKGNuPU90LnRyYW5zZmVyRXZlbnROYW1lKGNuKSk7Zm9yKHZhciBxbj1bXSxCbj1jZShpdCxZaT9ZaShjbik6Y24pLGxpPTA7bGk8Qm4ubGVuZ3RoO2xpKyspe3ZhciBjaT1CbltsaV0sbWk9Y2kub3JpZ2luYWxEZWxlZ2F0ZT9jaS5vcmlnaW5hbERlbGVnYXRlOmNpLmNhbGxiYWNrO3FuLnB1c2gobWkpfXJldHVybiBxbn0sWXRbbWVdPWZ1bmN0aW9uKCl7dmFyIGl0PXRoaXN8fFEsY249YXJndW1lbnRzWzBdO2lmKGNuKXtPdCYmT3QudHJhbnNmZXJFdmVudE5hbWUmJihjbj1PdC50cmFuc2ZlckV2ZW50TmFtZShjbikpO3ZhciBJaT10bltjbl07aWYoSWkpe3ZhciBQcj1JaVt1XSxmcz1JaVtjXSxQZD1pdFtQcl0sU289aXRbZnNdO2lmKFBkKWZvcih2YXIgdHM9UGQuc2xpY2UoKSxCbj0wO0JuPHRzLmxlbmd0aDtCbisrKXRoaXNbJF0uY2FsbCh0aGlzLGNuLChwbz10c1tCbl0pLm9yaWdpbmFsRGVsZWdhdGU/cG8ub3JpZ2luYWxEZWxlZ2F0ZTpwby5jYWxsYmFjayxwby5vcHRpb25zKTtpZihTbylmb3IodHM9U28uc2xpY2UoKSxCbj0wO0JuPHRzLmxlbmd0aDtCbisrKXt2YXIgcG87dGhpc1skXS5jYWxsKHRoaXMsY24sKHBvPXRzW0JuXSkub3JpZ2luYWxEZWxlZ2F0ZT9wby5vcmlnaW5hbERlbGVnYXRlOnBvLmNhbGxiYWNrLHBvLm9wdGlvbnMpfX19ZWxzZXt2YXIgcW49T2JqZWN0LmtleXMoaXQpO2ZvcihCbj0wO0JuPHFuLmxlbmd0aDtCbisrKXt2YXIgbGk9cW5bQm5dLGNpPXd0LmV4ZWMobGkpLG1pPWNpJiZjaVsxXTttaSYmInJlbW92ZUxpc3RlbmVyIiE9PW1pJiZ0aGlzW21lXS5jYWxsKHRoaXMsbWkpfXRoaXNbbWVdLmNhbGwodGhpcywicmVtb3ZlTGlzdGVuZXIiKX1pZigkbilyZXR1cm4gdGhpc30sbGUoWXRbWF0sVW4pLGxlKFl0WyRdLFNpKSxEciYmbGUoWXRbbWVdLERyKSxqbiYmbGUoWXRbbmVdLGpuKSwhMH1mb3IodmFyIEFpPVtdLE1uPTA7TW48X2UubGVuZ3RoO01uKyspQWlbTW5dPXJyKF9lW01uXSxJKTtyZXR1cm4gQWl9ZnVuY3Rpb24gY2UoUSxyZSl7aWYoIXJlKXt2YXIgX2U9W107Zm9yKHZhciBJIGluIFEpe3ZhciBYPXd0LmV4ZWMoSSksJD1YJiZYWzFdO2lmKCQmJighcmV8fCQ9PT1yZSkpe3ZhciBuZT1RW0ldO2lmKG5lKWZvcih2YXIgbWU9MDttZTxuZS5sZW5ndGg7bWUrKylfZS5wdXNoKG5lW21lXSl9fXJldHVybiBfZX12YXIgS2U9dG5bcmVdO0tlfHwoeHQocmUpLEtlPXRuW3JlXSk7dmFyIGx0PVFbS2VbdV1dLEplPVFbS2VbY11dO3JldHVybiBsdD9KZT9sdC5jb25jYXQoSmUpOmx0LnNsaWNlKCk6SmU/SmUuc2xpY2UoKTpbXX1mdW5jdGlvbiBkdChRLHJlKXt2YXIgX2U9US5FdmVudDtfZSYmX2UucHJvdG90eXBlJiZyZS5wYXRjaE1ldGhvZChfZS5wcm90b3R5cGUsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsZnVuY3Rpb24oSSl7cmV0dXJuIGZ1bmN0aW9uKFgsJCl7WFtUZV09ITAsSSYmSS5hcHBseShYLCQpfX0pfWZ1bmN0aW9uIFdlKFEscmUsX2UsSSxYKXt2YXIgJD1ab25lLl9fc3ltYm9sX18oSSk7aWYoIXJlWyRdKXt2YXIgbmU9cmVbJF09cmVbSV07cmVbSV09ZnVuY3Rpb24obWUsS2UsbHQpe3JldHVybiBLZSYmS2UucHJvdG90eXBlJiZYLmZvckVhY2goZnVuY3Rpb24oSmUpe3ZhciBmdD0iIi5jb25jYXQoX2UsIi4iKS5jb25jYXQoSSwiOjoiKStKZSxDdD1LZS5wcm90b3R5cGU7dHJ5e2lmKEN0Lmhhc093blByb3BlcnR5KEplKSl7dmFyIEl0PVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEN0LEplKTtJdCYmSXQudmFsdWU/KEl0LnZhbHVlPVEud3JhcFdpdGhDdXJyZW50Wm9uZShJdC52YWx1ZSxmdCksUS5fcmVkZWZpbmVQcm9wZXJ0eShLZS5wcm90b3R5cGUsSmUsSXQpKTpDdFtKZV0mJihDdFtKZV09US53cmFwV2l0aEN1cnJlbnRab25lKEN0W0plXSxmdCkpfWVsc2UgQ3RbSmVdJiYoQ3RbSmVdPVEud3JhcFdpdGhDdXJyZW50Wm9uZShDdFtKZV0sZnQpKX1jYXRjaHt9fSksbmUuY2FsbChyZSxtZSxLZSxsdCl9LFEuYXR0YWNoT3JpZ2luVG9QYXRjaGVkKHJlW0ldLG5lKX19ZnVuY3Rpb24gTXQoUSxyZSxfZSl7aWYoIV9lfHwwPT09X2UubGVuZ3RoKXJldHVybiByZTt2YXIgST1fZS5maWx0ZXIoZnVuY3Rpb24oJCl7cmV0dXJuICQudGFyZ2V0PT09UX0pO2lmKCFJfHwwPT09SS5sZW5ndGgpcmV0dXJuIHJlO3ZhciBYPUlbMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gcmUuZmlsdGVyKGZ1bmN0aW9uKCQpe3JldHVybi0xPT09WC5pbmRleE9mKCQpfSl9ZnVuY3Rpb24gYnQoUSxyZSxfZSxJKXtRJiZxKFEsTXQoUSxyZSxfZSksSSl9ZnVuY3Rpb24gaG4oUSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFEpLmZpbHRlcihmdW5jdGlvbihyZSl7cmV0dXJuIHJlLnN0YXJ0c1dpdGgoIm9uIikmJnJlLmxlbmd0aD4yfSkubWFwKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUuc3Vic3RyaW5nKDIpfSl9ZnVuY3Rpb24gVHQoUSxyZSxfZSl7dmFyIEk9X2UuY29uZmlndXJhYmxlO3JldHVybiB3bihRLHJlLF9lPXFlKFEscmUsX2UpLEkpfWZ1bmN0aW9uIG1uKFEscmUpe3JldHVybiBRJiZRW1ddJiZRW1ddW3JlXX1mdW5jdGlvbiBxZShRLHJlLF9lKXtyZXR1cm4gT2JqZWN0LmlzRnJvemVuKF9lKXx8KF9lLmNvbmZpZ3VyYWJsZT0hMCksX2UuY29uZmlndXJhYmxlfHwoIVFbV10mJiFPYmplY3QuaXNGcm96ZW4oUSkmJldpKFEsVyx7d3JpdGFibGU6ITAsdmFsdWU6e319KSxRW1ddJiYoUVtXXVtyZV09ITApKSxfZX1mdW5jdGlvbiB3bihRLHJlLF9lLEkpe3RyeXtyZXR1cm4gV2koUSxyZSxfZSl9Y2F0Y2gobmUpe2lmKCFfZS5jb25maWd1cmFibGUpdGhyb3cgbmU7dHlwZW9mIEk+InUiP2RlbGV0ZSBfZS5jb25maWd1cmFibGU6X2UuY29uZmlndXJhYmxlPUk7dHJ5e3JldHVybiBXaShRLHJlLF9lKX1jYXRjaChtZSl7dmFyIFg9ITE7aWYoKCJjcmVhdGVkQ2FsbGJhY2siPT09cmV8fCJhdHRhY2hlZENhbGxiYWNrIj09PXJlfHwiZGV0YWNoZWRDYWxsYmFjayI9PT1yZXx8ImF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayI9PT1yZSkmJihYPSEwKSwhWCl0aHJvdyBtZTt2YXIgJD1udWxsO3RyeXskPUpTT04uc3RyaW5naWZ5KF9lKX1jYXRjaHskPV9lLnRvU3RyaW5nKCl9Y29uc29sZS5sb2coIkF0dGVtcHRpbmcgdG8gY29uZmlndXJlICciLmNvbmNhdChyZSwiJyB3aXRoIGRlc2NyaXB0b3IgJyIpLmNvbmNhdCgkLCInIG9uIG9iamVjdCAnIikuY29uY2F0KFEsIicgYW5kIGdvdCBlcnJvciwgZ2l2aW5nIHVwOiAiKS5jb25jYXQobWUpKX19fVpvbmUuX19sb2FkX3BhdGNoKCJ1dGlsIixmdW5jdGlvbihRLHJlLF9lKXt2YXIgST1obihRKTtfZS5wYXRjaE9uUHJvcGVydGllcz1xLF9lLnBhdGNoTWV0aG9kPVksX2UuYmluZEFyZ3VtZW50cz1ELF9lLnBhdGNoTWFjcm9UYXNrPWFlO3ZhciBYPXJlLl9fc3ltYm9sX18oIkJMQUNLX0xJU1RFRF9FVkVOVFMiKSwkPXJlLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTtRWyRdJiYoUVtYXT1RWyRdKSxRW1hdJiYocmVbWF09cmVbJF09UVtYXSksX2UucGF0Y2hFdmVudFByb3RvdHlwZT1kdCxfZS5wYXRjaEV2ZW50VGFyZ2V0PW10LF9lLmlzSUVPckVkZ2U9bnQsX2UuT2JqZWN0RGVmaW5lUHJvcGVydHk9dCxfZS5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I9bixfZS5PYmplY3RDcmVhdGU9aSxfZS5BcnJheVNsaWNlPXIsX2UucGF0Y2hDbGFzcz1kZSxfZS53cmFwV2l0aEN1cnJlbnRab25lPXAsX2UuZmlsdGVyUHJvcGVydGllcz1NdCxfZS5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQ9bGUsX2UuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LF9lLnBhdGNoQ2FsbGJhY2tzPVdlLF9lLmdldEdsb2JhbE9iamVjdHM9ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsU291cmNlczpwdCx6b25lU3ltYm9sRXZlbnROYW1lczp0bixldmVudE5hbWVzOkksaXNCcm93c2VyOmZlLGlzTWl4OnVlLGlzTm9kZTp6LFRSVUVfU1RSOmMsRkFMU0VfU1RSOnUsWk9ORV9TWU1CT0xfUFJFRklYOmQsQUREX0VWRU5UX0xJU1RFTkVSX1NUUjpvLFJFTU9WRV9FVkVOVF9MSVNURU5FUl9TVFI6c319fSk7dmFyIFEsRXM9dWgodWgodWgodWgodWgodWgodWgodWgoW10sWyJhYm9ydCIsImFuaW1hdGlvbmNhbmNlbCIsImFuaW1hdGlvbmVuZCIsImFuaW1hdGlvbml0ZXJhdGlvbiIsImF1eGNsaWNrIiwiYmVmb3JlaW5wdXQiLCJibHVyIiwiY2FuY2VsIiwiY2FucGxheSIsImNhbnBsYXl0aHJvdWdoIiwiY2hhbmdlIiwiY29tcG9zaXRpb25zdGFydCIsImNvbXBvc2l0aW9udXBkYXRlIiwiY29tcG9zaXRpb25lbmQiLCJjdWVjaGFuZ2UiLCJjbGljayIsImNsb3NlIiwiY29udGV4dG1lbnUiLCJjdXJlY2hhbmdlIiwiZGJsY2xpY2siLCJkcmFnIiwiZHJhZ2VuZCIsImRyYWdlbnRlciIsImRyYWdleGl0IiwiZHJhZ2xlYXZlIiwiZHJhZ292ZXIiLCJkcm9wIiwiZHVyYXRpb25jaGFuZ2UiLCJlbXB0aWVkIiwiZW5kZWQiLCJlcnJvciIsImZvY3VzIiwiZm9jdXNpbiIsImZvY3Vzb3V0IiwiZ290cG9pbnRlcmNhcHR1cmUiLCJpbnB1dCIsImludmFsaWQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImxvYWQiLCJsb2Fkc3RhcnQiLCJsb2FkZWRkYXRhIiwibG9hZGVkbWV0YWRhdGEiLCJsb3N0cG9pbnRlcmNhcHR1cmUiLCJtb3VzZWRvd24iLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsIm1vdXNlbW92ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsIm1vdXNld2hlZWwiLCJvcmllbnRhdGlvbmNoYW5nZSIsInBhdXNlIiwicGxheSIsInBsYXlpbmciLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcmRvd24iLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJwb2ludGVybG9ja2NoYW5nZSIsIm1venBvaW50ZXJsb2NrY2hhbmdlIiwid2Via2l0cG9pbnRlcmxvY2tlcmNoYW5nZSIsInBvaW50ZXJsb2NrZXJyb3IiLCJtb3pwb2ludGVybG9ja2Vycm9yIiwid2Via2l0cG9pbnRlcmxvY2tlcnJvciIsInBvaW50ZXJtb3ZlIiwicG9pbnRvdXQiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJ1cCIsInByb2dyZXNzIiwicmF0ZWNoYW5nZSIsInJlc2V0IiwicmVzaXplIiwic2Nyb2xsIiwic2Vla2VkIiwic2Vla2luZyIsInNlbGVjdCIsInNlbGVjdGlvbmNoYW5nZSIsInNlbGVjdHN0YXJ0Iiwic2hvdyIsInNvcnQiLCJzdGFsbGVkIiwic3VibWl0Iiwic3VzcGVuZCIsInRpbWV1cGRhdGUiLCJ2b2x1bWVjaGFuZ2UiLCJ0b3VjaGNhbmNlbCIsInRvdWNobW92ZSIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsInRyYW5zaXRpb25jYW5jZWwiLCJ0cmFuc2l0aW9uZW5kIiwid2FpdGluZyIsIndoZWVsIl0sITApLFsid2ViZ2xjb250ZXh0cmVzdG9yZWQiLCJ3ZWJnbGNvbnRleHRsb3N0Iiwid2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvciJdLCEwKSxbImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZWVycm9yIl0sITApLFsidG9nZ2xlIl0sITApLFsiYWZ0ZXJzY3JpcHRleGVjdXRlIiwiYmVmb3Jlc2NyaXB0ZXhlY3V0ZSIsIkRPTUNvbnRlbnRMb2FkZWQiLCJmcmVlemUiLCJmdWxsc2NyZWVuY2hhbmdlIiwibW96ZnVsbHNjcmVlbmNoYW5nZSIsIndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiLCJtc2Z1bGxzY3JlZW5jaGFuZ2UiLCJmdWxsc2NyZWVuZXJyb3IiLCJtb3pmdWxsc2NyZWVuZXJyb3IiLCJ3ZWJraXRmdWxsc2NyZWVuZXJyb3IiLCJtc2Z1bGxzY3JlZW5lcnJvciIsInJlYWR5c3RhdGVjaGFuZ2UiLCJ2aXNpYmlsaXR5Y2hhbmdlIiwicmVzdW1lIl0sITApLFsiYWJzb2x1dGVkZXZpY2VvcmllbnRhdGlvbiIsImFmdGVyaW5wdXQiLCJhZnRlcnByaW50IiwiYXBwaW5zdGFsbGVkIiwiYmVmb3JlaW5zdGFsbHByb21wdCIsImJlZm9yZXByaW50IiwiYmVmb3JldW5sb2FkIiwiZGV2aWNlbGlnaHQiLCJkZXZpY2Vtb3Rpb24iLCJkZXZpY2VvcmllbnRhdGlvbiIsImRldmljZW9yaWVudGF0aW9uYWJzb2x1dGUiLCJkZXZpY2Vwcm94aW1pdHkiLCJoYXNoY2hhbmdlIiwibGFuZ3VhZ2VjaGFuZ2UiLCJtZXNzYWdlIiwibW96YmVmb3JlcGFpbnQiLCJvZmZsaW5lIiwib25saW5lIiwicGFpbnQiLCJwYWdlc2hvdyIsInBhZ2VoaWRlIiwicG9wc3RhdGUiLCJyZWplY3Rpb25oYW5kbGVkIiwic3RvcmFnZSIsInVuaGFuZGxlZHJlamVjdGlvbiIsInVubG9hZCIsInVzZXJwcm94aW1pdHkiLCJ2cmRpc3BsYXljb25uZWN0ZWQiLCJ2cmRpc3BsYXlkaXNjb25uZWN0ZWQiLCJ2cmRpc3BsYXlwcmVzZW50Y2hhbmdlIl0sITApLFsiYmVmb3JlY29weSIsImJlZm9yZWN1dCIsImJlZm9yZXBhc3RlIiwiY29weSIsImN1dCIsInBhc3RlIiwiZHJhZ3N0YXJ0IiwibG9hZGVuZCIsImFuaW1hdGlvbnN0YXJ0Iiwic2VhcmNoIiwidHJhbnNpdGlvbnJ1biIsInRyYW5zaXRpb25zdGFydCIsIndlYmtpdGFuaW1hdGlvbmVuZCIsIndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbiIsIndlYmtpdGFuaW1hdGlvbnN0YXJ0Iiwid2Via2l0dHJhbnNpdGlvbmVuZCJdLCEwKSxbImFjdGl2YXRlIiwiYWZ0ZXJ1cGRhdGUiLCJhcmlhcmVxdWVzdCIsImJlZm9yZWFjdGl2YXRlIiwiYmVmb3JlZGVhY3RpdmF0ZSIsImJlZm9yZWVkaXRmb2N1cyIsImJlZm9yZXVwZGF0ZSIsImNlbGxjaGFuZ2UiLCJjb250cm9sc2VsZWN0IiwiZGF0YWF2YWlsYWJsZSIsImRhdGFzZXRjaGFuZ2VkIiwiZGF0YXNldGNvbXBsZXRlIiwiZXJyb3J1cGRhdGUiLCJmaWx0ZXJjaGFuZ2UiLCJsYXlvdXRjb21wbGV0ZSIsImxvc2VjYXB0dXJlIiwibW92ZSIsIm1vdmVlbmQiLCJtb3Zlc3RhcnQiLCJwcm9wZXJ0eWNoYW5nZSIsInJlc2l6ZWVuZCIsInJlc2l6ZXN0YXJ0Iiwicm93ZW50ZXIiLCJyb3dleGl0Iiwicm93c2RlbGV0ZSIsInJvd3NpbnNlcnRlZCIsImNvbW1hbmQiLCJjb21wYXNzbmVlZHNjYWxpYnJhdGlvbiIsImRlYWN0aXZhdGUiLCJoZWxwIiwibXNjb250ZW50em9vbSIsIm1zbWFuaXB1bGF0aW9uc3RhdGVjaGFuZ2VkIiwibXNnZXN0dXJlY2hhbmdlIiwibXNnZXN0dXJlZG91YmxldGFwIiwibXNnZXN0dXJlZW5kIiwibXNnZXN0dXJlaG9sZCIsIm1zZ2VzdHVyZXN0YXJ0IiwibXNnZXN0dXJldGFwIiwibXNnb3Rwb2ludGVyY2FwdHVyZSIsIm1zaW5lcnRpYXN0YXJ0IiwibXNsb3N0cG9pbnRlcmNhcHR1cmUiLCJtc3BvaW50ZXJjYW5jZWwiLCJtc3BvaW50ZXJkb3duIiwibXNwb2ludGVyZW50ZXIiLCJtc3BvaW50ZXJob3ZlciIsIm1zcG9pbnRlcmxlYXZlIiwibXNwb2ludGVybW92ZSIsIm1zcG9pbnRlcm91dCIsIm1zcG9pbnRlcm92ZXIiLCJtc3BvaW50ZXJ1cCIsInBvaW50ZXJvdXQiLCJtc3NpdGVtb2RlanVtcGxpc3RpdGVtcmVtb3ZlZCIsIm1zdGh1bWJuYWlsY2xpY2siLCJzdG9wIiwic3RvcmFnZWNvbW1pdCJdLCEwKTsoUT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KVsoImxlZ2FjeVBhdGNoIiwoUS5fX1pvbmVfc3ltYm9sX3ByZWZpeHx8Il9fem9uZV9zeW1ib2xfXyIpKyJsZWdhY3lQYXRjaCIpXT1mdW5jdGlvbigpe3ZhciBJPVEuWm9uZTtJLl9fbG9hZF9wYXRjaCgiZGVmaW5lUHJvcGVydHkiLGZ1bmN0aW9uKFgsJCxuZSl7bmUuX3JlZGVmaW5lUHJvcGVydHk9VHQsZmk9Wm9uZS5fX3N5bWJvbF9fLFdpPU9iamVjdFtmaSgiZGVmaW5lUHJvcGVydHkiKV09T2JqZWN0LmRlZmluZVByb3BlcnR5LHFpPU9iamVjdFtmaSgiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIildPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZWU9T2JqZWN0LmNyZWF0ZSxXPWZpKCJ1bmNvbmZpZ3VyYWJsZXMiKSxPYmplY3QuZGVmaW5lUHJvcGVydHk9ZnVuY3Rpb24oUSxyZSxfZSl7aWYobW4oUSxyZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFzc2lnbiB0byByZWFkIG9ubHkgcHJvcGVydHkgJyIrcmUrIicgb2YgIitRKTt2YXIgST1fZS5jb25maWd1cmFibGU7cmV0dXJuInByb3RvdHlwZSIhPT1yZSYmKF9lPXFlKFEscmUsX2UpKSx3bihRLHJlLF9lLEkpfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcz1mdW5jdGlvbihRLHJlKXtPYmplY3Qua2V5cyhyZSkuZm9yRWFjaChmdW5jdGlvbihuZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFEsbmUscmVbbmVdKX0pO2Zvcih2YXIgX2U9MCxJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocmUpO19lPEkubGVuZ3RoO19lKyspe3ZhciBYPUlbX2VdO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmUsWCk/LmVudW1lcmFibGUmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShRLFgscmVbWF0pfXJldHVybiBRfSxPYmplY3QuY3JlYXRlPWZ1bmN0aW9uKFEscmUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgcmUmJiFPYmplY3QuaXNGcm96ZW4ocmUpJiZPYmplY3Qua2V5cyhyZSkuZm9yRWFjaChmdW5jdGlvbihfZSl7cmVbX2VdPXFlKFEsX2UscmVbX2VdKX0pLGVlKFEscmUpfSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yPWZ1bmN0aW9uKFEscmUpe3ZhciBfZT1xaShRLHJlKTtyZXR1cm4gX2UmJm1uKFEscmUpJiYoX2UuY29uZmlndXJhYmxlPSExKSxfZX19KSxJLl9fbG9hZF9wYXRjaCgicmVnaXN0ZXJFbGVtZW50IixmdW5jdGlvbihYLCQsbmUpeyFmdW5jdGlvbihRLHJlKXt2YXIgX2U9cmUuZ2V0R2xvYmFsT2JqZWN0cygpOyhfZS5pc0Jyb3dzZXJ8fF9lLmlzTWl4KSYmInJlZ2lzdGVyRWxlbWVudCJpbiBRLmRvY3VtZW50JiZyZS5wYXRjaENhbGxiYWNrcyhyZSxkb2N1bWVudCwiRG9jdW1lbnQiLCJyZWdpc3RlckVsZW1lbnQiLFsiY3JlYXRlZENhbGxiYWNrIiwiYXR0YWNoZWRDYWxsYmFjayIsImRldGFjaGVkQ2FsbGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXSl9KFgsbmUpfSksSS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0TGVnYWN5IixmdW5jdGlvbihYLCQsbmUpeyhmdW5jdGlvbihRLHJlKXt2YXIgX2U9cmUuZ2V0R2xvYmFsT2JqZWN0cygpLEk9X2UuZXZlbnROYW1lcyxYPV9lLmdsb2JhbFNvdXJjZXMsJD1fZS56b25lU3ltYm9sRXZlbnROYW1lcyxuZT1fZS5UUlVFX1NUUixtZT1fZS5GQUxTRV9TVFIsS2U9X2UuWk9ORV9TWU1CT0xfUFJFRklYLEplPSJBcHBsaWNhdGlvbkNhY2hlLEV2ZW50U291cmNlLEZpbGVSZWFkZXIsSW5wdXRNZXRob2RDb250ZXh0LE1lZGlhQ29udHJvbGxlcixNZXNzYWdlUG9ydCxOb2RlLFBlcmZvcm1hbmNlLFNWR0VsZW1lbnRJbnN0YW5jZSxTaGFyZWRXb3JrZXIsVGV4dFRyYWNrLFRleHRUcmFja0N1ZSxUZXh0VHJhY2tMaXN0LFdlYktpdE5hbWVkRmxvdyxXaW5kb3csV29ya2VyLFdvcmtlckdsb2JhbFNjb3BlLFhNTEh0dHBSZXF1ZXN0LFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQsWE1MSHR0cFJlcXVlc3RVcGxvYWQsSURCUmVxdWVzdCxJREJPcGVuREJSZXF1ZXN0LElEQkRhdGFiYXNlLElEQlRyYW5zYWN0aW9uLElEQkN1cnNvcixEQkluZGV4LFdlYlNvY2tldCIuc3BsaXQoIiwiKSxmdD0iRXZlbnRUYXJnZXQiLEN0PVtdLEl0PVEud3RmLE50PSJBbmNob3IsQXJlYSxBdWRpbyxCUixCYXNlLEJhc2VGb250LEJvZHksQnV0dG9uLENhbnZhcyxDb250ZW50LERMaXN0LERpcmVjdG9yeSxEaXYsRW1iZWQsRmllbGRTZXQsRm9udCxGb3JtLEZyYW1lLEZyYW1lU2V0LEhSLEhlYWQsSGVhZGluZyxIdG1sLElGcmFtZSxJbWFnZSxJbnB1dCxLZXlnZW4sTEksTGFiZWwsTGVnZW5kLExpbmssTWFwLE1hcnF1ZWUsTWVkaWEsTWVudSxNZXRhLE1ldGVyLE1vZCxPTGlzdCxPYmplY3QsT3B0R3JvdXAsT3B0aW9uLE91dHB1dCxQYXJhZ3JhcGgsUHJlLFByb2dyZXNzLFF1b3RlLFNjcmlwdCxTZWxlY3QsU291cmNlLFNwYW4sU3R5bGUsVGFibGVDYXB0aW9uLFRhYmxlQ2VsbCxUYWJsZUNvbCxUYWJsZSxUYWJsZVJvdyxUYWJsZVNlY3Rpb24sVGV4dEFyZWEsVGl0bGUsVHJhY2ssVUxpc3QsVW5rbm93bixWaWRlbyIuc3BsaXQoIiwiKTtJdD9DdD1OdC5tYXAoZnVuY3Rpb24oVnIpe3JldHVybiJIVE1MIitWcisiRWxlbWVudCJ9KS5jb25jYXQoSmUpOlFbZnRdP0N0LnB1c2goZnQpOkN0PUplO2Zvcih2YXIgYm49US5fX1pvbmVfZGlzYWJsZV9JRV9jaGVja3x8ITEscnI9US5fX1pvbmVfZW5hYmxlX2Nyb3NzX2NvbnRleHRfY2hlY2t8fCExLEFpPXJlLmlzSUVPckVkZ2UoKSxIbj0iW29iamVjdCBGdW5jdGlvbldyYXBwZXJdIixPdD0iZnVuY3Rpb24gX19CUk9XU0VSVE9PTFNfQ09OU09MRV9TQUZFRlVOQygpIHsgW25hdGl2ZSBjb2RlXSB9Iix3aT17TVNQb2ludGVyQ2FuY2VsOiJwb2ludGVyY2FuY2VsIixNU1BvaW50ZXJEb3duOiJwb2ludGVyZG93biIsTVNQb2ludGVyRW50ZXI6InBvaW50ZXJlbnRlciIsTVNQb2ludGVySG92ZXI6InBvaW50ZXJob3ZlciIsTVNQb2ludGVyTGVhdmU6InBvaW50ZXJsZWF2ZSIsTVNQb2ludGVyTW92ZToicG9pbnRlcm1vdmUiLE1TUG9pbnRlck91dDoicG9pbnRlcm91dCIsTVNQb2ludGVyT3ZlcjoicG9pbnRlcm92ZXIiLE1TUG9pbnRlclVwOiJwb2ludGVydXAifSxhaT0wO2FpPEkubGVuZ3RoO2FpKyspe3ZhciBZaT1LZSsoKFluPUlbYWldKSttZSksQW49S2UrKFluK25lKTskW1luXT17fSwkW1luXVttZV09WWksJFtZbl1bbmVdPUFufWZvcihhaT0wO2FpPE50Lmxlbmd0aDthaSsrKWZvcih2YXIgVW49TnRbYWldLFNpPVhbVW5dPXt9LGpuPTA7am48SS5sZW5ndGg7am4rKyl7dmFyIFluO1NpW1luPUlbam5dXT1VbisiLmFkZEV2ZW50TGlzdGVuZXI6IitZbn12YXIgYnI9W107Zm9yKGFpPTA7YWk8Q3QubGVuZ3RoO2FpKyspe3ZhciB4YT1RW0N0W2FpXV07YnIucHVzaCh4YSYmeGEucHJvdG90eXBlKX1yZS5wYXRjaEV2ZW50VGFyZ2V0KFEscmUsYnIse3ZoOmZ1bmN0aW9uKFZyLEFyLFN0LHdlKXtpZighYm4mJkFpKWlmKHJyKXRyeXtpZigoRWU9QXIudG9TdHJpbmcoKSk9PT1Ibnx8RWU9PU90KXJldHVybiBWci5hcHBseShTdCx3ZSksITF9Y2F0Y2h7cmV0dXJuIFZyLmFwcGx5KFN0LHdlKSwhMX1lbHNle3ZhciBFZTtpZigoRWU9QXIudG9TdHJpbmcoKSk9PT1Ibnx8RWU9PU90KXJldHVybiBWci5hcHBseShTdCx3ZSksITF9ZWxzZSBpZihycil0cnl7QXIudG9TdHJpbmcoKX1jYXRjaHtyZXR1cm4gVnIuYXBwbHkoU3Qsd2UpLCExfXJldHVybiEwfSx0cmFuc2ZlckV2ZW50TmFtZTpmdW5jdGlvbihWcil7cmV0dXJuIHdpW1ZyXXx8VnJ9fSksWm9uZVtyZS5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV09ISFRW2Z0XX0pKFgsbmUpLGZ1bmN0aW9uKFEscmUpe3ZhciBfZT1RLmdldEdsb2JhbE9iamVjdHMoKTtpZigoIV9lLmlzTm9kZXx8X2UuaXNNaXgpJiYhZnVuY3Rpb24oUSxyZSl7dmFyIF9lPVEuZ2V0R2xvYmFsT2JqZWN0cygpO2lmKChfZS5pc0Jyb3dzZXJ8fF9lLmlzTWl4KSYmIVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSwib25jbGljayIpJiZ0eXBlb2YgRWxlbWVudDwidSIpe3ZhciAkPVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIik7aWYoJCYmISQuY29uZmlndXJhYmxlKXJldHVybiExO2lmKCQpe1EuT2JqZWN0RGVmaW5lUHJvcGVydHkoRWxlbWVudC5wcm90b3R5cGUsIm9uY2xpY2siLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KTt2YXIgbWU9ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5vbmNsaWNrO3JldHVybiBRLk9iamVjdERlZmluZVByb3BlcnR5KEVsZW1lbnQucHJvdG90eXBlLCJvbmNsaWNrIiwkKSxtZX19dmFyIEtlPXJlLlhNTEh0dHBSZXF1ZXN0O2lmKCFLZSlyZXR1cm4hMTt2YXIgbHQ9Im9ucmVhZHlzdGF0ZWNoYW5nZSIsSmU9S2UucHJvdG90eXBlLGZ0PVEuT2JqZWN0R2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEplLGx0KTtpZihmdClyZXR1cm4gUS5PYmplY3REZWZpbmVQcm9wZXJ0eShKZSxsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksbWU9ISEoQ3Q9bmV3IEtlKS5vbnJlYWR5c3RhdGVjaGFuZ2UsUS5PYmplY3REZWZpbmVQcm9wZXJ0eShKZSxsdCxmdHx8e30pLG1lO3ZhciBJdD1RLnN5bWJvbCgiZmFrZSIpO1EuT2JqZWN0RGVmaW5lUHJvcGVydHkoSmUsbHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW0l0XX0sc2V0OmZ1bmN0aW9uKEFpKXt0aGlzW0l0XT1BaX19KTt2YXIgQ3QsTnQ9ZnVuY3Rpb24oKXt9O3JldHVybihDdD1uZXcgS2UpLm9ucmVhZHlzdGF0ZWNoYW5nZT1OdCxtZT1DdFtJdF09PT1OdCxDdC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxtZX0oUSxyZSkpe3ZhciAkPXR5cGVvZiBXZWJTb2NrZXQ8InUiOyhmdW5jdGlvbihRKXtmb3IodmFyIHJlPVEuc3ltYm9sKCJ1bmJvdW5kIiksX2U9ZnVuY3Rpb24oWCl7dmFyICQ9RXNbWF0sbmU9Im9uIiskO3NlbGYuYWRkRXZlbnRMaXN0ZW5lcigkLGZ1bmN0aW9uKG1lKXt2YXIgbHQsSmUsS2U9bWUudGFyZ2V0O2ZvcihKZT1LZT9LZS5jb25zdHJ1Y3Rvci5uYW1lKyIuIituZToidW5rbm93bi4iK25lO0tlOylLZVtuZV0mJiFLZVtuZV1bcmVdJiYoKGx0PVEud3JhcFdpdGhDdXJyZW50Wm9uZShLZVtuZV0sSmUpKVtyZV09S2VbbmVdLEtlW25lXT1sdCksS2U9S2UucGFyZW50RWxlbWVudH0sITApfSxJPTA7STxFcy5sZW5ndGg7SSsrKV9lKEkpfSkoUSksUS5wYXRjaENsYXNzKCJYTUxIdHRwUmVxdWVzdCIpLCQmJmZ1bmN0aW9uKFEscmUpe3ZhciBfZT1RLmdldEdsb2JhbE9iamVjdHMoKSxJPV9lLkFERF9FVkVOVF9MSVNURU5FUl9TVFIsWD1fZS5SRU1PVkVfRVZFTlRfTElTVEVORVJfU1RSLCQ9cmUuV2ViU29ja2V0O3JlLkV2ZW50VGFyZ2V0fHxRLnBhdGNoRXZlbnRUYXJnZXQocmUsUSxbJC5wcm90b3R5cGVdKSxyZS5XZWJTb2NrZXQ9ZnVuY3Rpb24oS2UsbHQpe3ZhciBmdCxDdCxKZT1hcmd1bWVudHMubGVuZ3RoPjE/bmV3ICQoS2UsbHQpOm5ldyAkKEtlKSxJdD1RLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcihKZSwib25tZXNzYWdlIik7cmV0dXJuIEl0JiYhMT09PUl0LmNvbmZpZ3VyYWJsZT8oZnQ9US5PYmplY3RDcmVhdGUoSmUpLEN0PUplLFtJLFgsInNlbmQiLCJjbG9zZSJdLmZvckVhY2goZnVuY3Rpb24oTnQpe2Z0W050XT1mdW5jdGlvbigpe3ZhciBibj1RLkFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpO2lmKE50PT09SXx8TnQ9PT1YKXt2YXIgcnI9Ym4ubGVuZ3RoPjA/Ym5bMF06dm9pZCAwO2lmKHJyKXt2YXIgQWk9Wm9uZS5fX3N5bWJvbF9fKCJPTl9QUk9QRVJUWSIrcnIpO0plW0FpXT1mdFtBaV19fXJldHVybiBKZVtOdF0uYXBwbHkoSmUsYm4pfX0pKTpmdD1KZSxRLnBhdGNoT25Qcm9wZXJ0aWVzKGZ0LFsiY2xvc2UiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcGVuIl0sQ3QpLGZ0fTt2YXIgbmU9cmUuV2ViU29ja2V0O2Zvcih2YXIgbWUgaW4gJCluZVttZV09JFttZV19KFEscmUpLFpvbmVbUS5zeW1ib2woInBhdGNoRXZlbnRzIildPSEwfX0obmUsWCl9KX07dmFyIGJhPWYoInpvbmVUYXNrIik7ZnVuY3Rpb24gYmMoUSxyZSxfZSxJKXt2YXIgWD1udWxsLCQ9bnVsbDtfZSs9STt2YXIgbmU9e307ZnVuY3Rpb24gbWUobHQpe3ZhciBKZT1sdC5kYXRhO3JldHVybiBKZS5hcmdzWzBdPWZ1bmN0aW9uKCl7cmV0dXJuIGx0Lmludm9rZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEplLmhhbmRsZUlkPVguYXBwbHkoUSxKZS5hcmdzKSxsdH1mdW5jdGlvbiBLZShsdCl7cmV0dXJuICQuY2FsbChRLGx0LmRhdGEuaGFuZGxlSWQpfVg9WShRLHJlKz1JLGZ1bmN0aW9uKGx0KXtyZXR1cm4gZnVuY3Rpb24oSmUsZnQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmdFswXSl7dmFyIEN0PXtpc1BlcmlvZGljOiJJbnRlcnZhbCI9PT1JLGRlbGF5OiJUaW1lb3V0Ij09PUl8fCJJbnRlcnZhbCI9PT1JP2Z0WzFdfHwwOnZvaWQgMCxhcmdzOmZ0fSxJdD1mdFswXTtmdFswXT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gSXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7Q3QuaXNQZXJpb2RpY3x8KCJudW1iZXIiPT10eXBlb2YgQ3QuaGFuZGxlSWQ/ZGVsZXRlIG5lW0N0LmhhbmRsZUlkXTpDdC5oYW5kbGVJZCYmKEN0LmhhbmRsZUlkW2JhXT1udWxsKSl9fTt2YXIgTnQ9aChyZSxmdFswXSxDdCxtZSxLZSk7aWYoIU50KXJldHVybiBOdDt2YXIgYm49TnQuZGF0YS5oYW5kbGVJZDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGJuP25lW2JuXT1OdDpibiYmKGJuW2JhXT1OdCksYm4mJmJuLnJlZiYmYm4udW5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBibi5yZWYmJiJmdW5jdGlvbiI9PXR5cGVvZiBibi51bnJlZiYmKE50LnJlZj1ibi5yZWYuYmluZChibiksTnQudW5yZWY9Ym4udW5yZWYuYmluZChibikpLCJudW1iZXIiPT10eXBlb2YgYm58fGJuP2JuOk50fXJldHVybiBsdC5hcHBseShRLGZ0KX19KSwkPVkoUSxfZSxmdW5jdGlvbihsdCl7cmV0dXJuIGZ1bmN0aW9uKEplLGZ0KXt2YXIgSXQsQ3Q9ZnRbMF07Im51bWJlciI9PXR5cGVvZiBDdD9JdD1uZVtDdF06KEl0PUN0JiZDdFtiYV0pfHwoSXQ9Q3QpLEl0JiYic3RyaW5nIj09dHlwZW9mIEl0LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1JdC5zdGF0ZSYmKEl0LmNhbmNlbEZuJiZJdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1JdC5ydW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIEN0P2RlbGV0ZSBuZVtDdF06Q3QmJihDdFtiYV09bnVsbCksSXQuem9uZS5jYW5jZWxUYXNrKEl0KSk6bHQuYXBwbHkoUSxmdCl9fSl9Wm9uZS5fX2xvYWRfcGF0Y2goImxlZ2FjeSIsZnVuY3Rpb24oUSl7dmFyIHJlPVFbWm9uZS5fX3N5bWJvbF9fKCJsZWdhY3lQYXRjaCIpXTtyZSYmcmUoKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJxdWV1ZU1pY3JvdGFzayIsZnVuY3Rpb24oUSxyZSxfZSl7X2UucGF0Y2hNZXRob2QoUSwicXVldWVNaWNyb3Rhc2siLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihYLCQpe3JlLmN1cnJlbnQuc2NoZWR1bGVNaWNyb1Rhc2soInF1ZXVlTWljcm90YXNrIiwkWzBdKX19KX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLGZ1bmN0aW9uKFEpe3ZhciBfZT0iY2xlYXIiO2JjKFEsInNldCIsX2UsIlRpbWVvdXQiKSxiYyhRLCJzZXQiLF9lLCJJbnRlcnZhbCIpLGJjKFEsInNldCIsX2UsIkltbWVkaWF0ZSIpfSksWm9uZS5fX2xvYWRfcGF0Y2goInJlcXVlc3RBbmltYXRpb25GcmFtZSIsZnVuY3Rpb24oUSl7YmMoUSwicmVxdWVzdCIsImNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYmMoUSwibW96UmVxdWVzdCIsIm1vekNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYmMoUSwid2Via2l0UmVxdWVzdCIsIndlYmtpdENhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIil9KSxab25lLl9fbG9hZF9wYXRjaCgiYmxvY2tpbmciLGZ1bmN0aW9uKFEscmUpe2Zvcih2YXIgX2U9WyJhbGVydCIsInByb21wdCIsImNvbmZpcm0iXSxJPTA7STxfZS5sZW5ndGg7SSsrKVkoUSxfZVtJXSxmdW5jdGlvbigkLG5lLG1lKXtyZXR1cm4gZnVuY3Rpb24oS2UsbHQpe3JldHVybiByZS5jdXJyZW50LnJ1bigkLFEsbHQsbWUpfX0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IixmdW5jdGlvbihRLHJlLF9lKXsoZnVuY3Rpb24oUSxyZSl7cmUucGF0Y2hFdmVudFByb3RvdHlwZShRLHJlKX0pKFEsX2UpLGZ1bmN0aW9uKFEscmUpe2lmKCFab25lW3JlLnN5bWJvbCgicGF0Y2hFdmVudFRhcmdldCIpXSl7Zm9yKHZhciBfZT1yZS5nZXRHbG9iYWxPYmplY3RzKCksST1fZS5ldmVudE5hbWVzLFg9X2Uuem9uZVN5bWJvbEV2ZW50TmFtZXMsJD1fZS5UUlVFX1NUUixuZT1fZS5GQUxTRV9TVFIsbWU9X2UuWk9ORV9TWU1CT0xfUFJFRklYLEtlPTA7S2U8SS5sZW5ndGg7S2UrKyl7dmFyIGx0PUlbS2VdLEN0PW1lKyhsdCtuZSksSXQ9bWUrKGx0KyQpO1hbbHRdPXt9LFhbbHRdW25lXT1DdCxYW2x0XVskXT1JdH12YXIgTnQ9US5FdmVudFRhcmdldDtOdCYmTnQucHJvdG90eXBlJiZyZS5wYXRjaEV2ZW50VGFyZ2V0KFEscmUsW050JiZOdC5wcm90b3R5cGVdKX19KFEsX2UpO3ZhciBJPVEuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtJJiZJLnByb3RvdHlwZSYmX2UucGF0Y2hFdmVudFRhcmdldChRLF9lLFtJLnByb3RvdHlwZV0pfSksWm9uZS5fX2xvYWRfcGF0Y2goIk11dGF0aW9uT2JzZXJ2ZXIiLGZ1bmN0aW9uKFEscmUsX2Upe2RlKCJNdXRhdGlvbk9ic2VydmVyIiksZGUoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsZnVuY3Rpb24oUSxyZSxfZSl7ZGUoIkludGVyc2VjdGlvbk9ic2VydmVyIil9KSxab25lLl9fbG9hZF9wYXRjaCgiRmlsZVJlYWRlciIsZnVuY3Rpb24oUSxyZSxfZSl7ZGUoIkZpbGVSZWFkZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJvbl9wcm9wZXJ0eSIsZnVuY3Rpb24oUSxyZSxfZSl7IWZ1bmN0aW9uKFEscmUpe2lmKCghenx8dWUpJiYhWm9uZVtRLnN5bWJvbCgicGF0Y2hFdmVudHMiKV0pe3ZhciBfZT1yZS5fX1pvbmVfaWdub3JlX29uX3Byb3BlcnRpZXMsST1bXTtpZihmZSl7dmFyIFg9d2luZG93O0k9SS5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1lbnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTt2YXIgJD1mdW5jdGlvbigpe3RyeXt2YXIgUT14Lm5hdmlnYXRvci51c2VyQWdlbnQ7aWYoLTEhPT1RLmluZGV4T2YoIk1TSUUgIil8fC0xIT09US5pbmRleE9mKCJUcmlkZW50LyIpKXJldHVybiEwfWNhdGNoe31yZXR1cm4hMX0oKT9be3RhcmdldDpYLGlnbm9yZVByb3BlcnRpZXM6WyJlcnJvciJdfV06W107YnQoWCxobihYKSxfZSYmX2UuY29uY2F0KCQpLGUoWCkpfUk9SS5jb25jYXQoWyJYTUxIdHRwUmVxdWVzdCIsIlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQiLCJJREJJbmRleCIsIklEQlJlcXVlc3QiLCJJREJPcGVuREJSZXF1ZXN0IiwiSURCRGF0YWJhc2UiLCJJREJUcmFuc2FjdGlvbiIsIklEQkN1cnNvciIsIldlYlNvY2tldCJdKTtmb3IodmFyIG5lPTA7bmU8SS5sZW5ndGg7bmUrKyl7dmFyIG1lPXJlW0lbbmVdXTttZSYmbWUucHJvdG90eXBlJiZidChtZS5wcm90b3R5cGUsaG4obWUucHJvdG90eXBlKSxfZSl9fX0oX2UsUSl9KSxab25lLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxlbWVudHMiLGZ1bmN0aW9uKFEscmUsX2UpeyFmdW5jdGlvbihRLHJlKXt2YXIgX2U9cmUuZ2V0R2xvYmFsT2JqZWN0cygpOyhfZS5pc0Jyb3dzZXJ8fF9lLmlzTWl4KSYmUS5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIFEmJnJlLnBhdGNoQ2FsbGJhY2tzKHJlLFEuY3VzdG9tRWxlbWVudHMsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIixbImNvbm5lY3RlZENhbGxiYWNrIiwiZGlzY29ubmVjdGVkQ2FsbGJhY2siLCJhZG9wdGVkQ2FsbGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXSl9KFEsX2UpfSksWm9uZS5fX2xvYWRfcGF0Y2goIlhIUiIsZnVuY3Rpb24oUSxyZSl7IWZ1bmN0aW9uKGx0KXt2YXIgSmU9bHQuWE1MSHR0cFJlcXVlc3Q7aWYoSmUpe3ZhciBmdD1KZS5wcm90b3R5cGUsSXQ9ZnRbYV0sTnQ9ZnRbbF07aWYoIUl0KXt2YXIgYm49bHQuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihibil7dmFyIHJyPWJuLnByb3RvdHlwZTtJdD1yclthXSxOdD1ycltsXX19dmFyIEFpPSJyZWFkeXN0YXRlY2hhbmdlIixNbj0ic2NoZWR1bGVkIixhaT1ZKGZ0LCJvcGVuIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihVbixTaSl7cmV0dXJuIFVuW0ldPTA9PVNpWzJdLFVuW25lXT1TaVsxXSxhaS5hcHBseShVbixTaSl9fSksJG49ZigiZmV0Y2hUYXNrQWJvcnRpbmciKSxZdD1mKCJmZXRjaFRhc2tTY2hlZHVsaW5nIiksWWk9WShmdCwic2VuZCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oVW4sU2kpe2lmKCEwPT09cmUuY3VycmVudFtZdF18fFVuW0ldKXJldHVybiBZaS5hcHBseShVbixTaSk7dmFyIGpuPXt0YXJnZXQ6VW4sdXJsOlVuW25lXSxpc1BlcmlvZGljOiExLGFyZ3M6U2ksYWJvcnRlZDohMX0sRHI9aCgiWE1MSHR0cFJlcXVlc3Quc2VuZCIsT3Qsam4sSG4sd2kpO1VuJiYhMD09PVVuW21lXSYmIWpuLmFib3J0ZWQmJkRyLnN0YXRlPT09TW4mJkRyLmludm9rZSgpfX0pLEFuPVkoZnQsImFib3J0IixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihVbixTaSl7dmFyIGpuPWZ1bmN0aW9uKFVuKXtyZXR1cm4gVW5bX2VdfShVbik7aWYoam4mJiJzdHJpbmciPT10eXBlb2Ygam4udHlwZSl7aWYobnVsbD09am4uY2FuY2VsRm58fGpuLmRhdGEmJmpuLmRhdGEuYWJvcnRlZClyZXR1cm47am4uem9uZS5jYW5jZWxUYXNrKGpuKX1lbHNlIGlmKCEwPT09cmUuY3VycmVudFskbl0pcmV0dXJuIEFuLmFwcGx5KFVuLFNpKX19KX1mdW5jdGlvbiBIbihVbil7dmFyIFNpPVVuLmRhdGEsam49U2kudGFyZ2V0O2puWyRdPSExLGpuW21lXT0hMTt2YXIgRHI9am5bWF07SXR8fChJdD1qblthXSxOdD1qbltsXSksRHImJk50LmNhbGwoam4sQWksRHIpO3ZhciBicj1qbltYXT1mdW5jdGlvbigpe2lmKGpuLnJlYWR5U3RhdGU9PT1qbi5ET05FKWlmKCFTaS5hYm9ydGVkJiZqblskXSYmVW4uc3RhdGU9PT1Nbil7dmFyIFZyPWpuW3JlLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtpZigwIT09am4uc3RhdHVzJiZWciYmVnIubGVuZ3RoPjApe3ZhciBBcj1Vbi5pbnZva2U7VW4uaW52b2tlPWZ1bmN0aW9uKCl7Zm9yKHZhciBTdD1qbltyZS5fX3N5bWJvbF9fKCJsb2FkZmFsc2UiKV0sd2U9MDt3ZTxTdC5sZW5ndGg7d2UrKylTdFt3ZV09PT1VbiYmU3Quc3BsaWNlKHdlLDEpOyFTaS5hYm9ydGVkJiZVbi5zdGF0ZT09PU1uJiZBci5jYWxsKFVuKX0sVnIucHVzaChVbil9ZWxzZSBVbi5pbnZva2UoKX1lbHNlIVNpLmFib3J0ZWQmJiExPT09am5bJF0mJihqblttZV09ITApfTtyZXR1cm4gSXQuY2FsbChqbixBaSxiciksam5bX2VdfHwoam5bX2VdPVVuKSxZaS5hcHBseShqbixTaS5hcmdzKSxqblskXT0hMCxVbn1mdW5jdGlvbiBPdCgpe31mdW5jdGlvbiB3aShVbil7dmFyIFNpPVVuLmRhdGE7cmV0dXJuIFNpLmFib3J0ZWQ9ITAsQW4uYXBwbHkoU2kudGFyZ2V0LFNpLmFyZ3MpfX0oUSk7dmFyIF9lPWYoInhoclRhc2siKSxJPWYoInhoclN5bmMiKSxYPWYoInhockxpc3RlbmVyIiksJD1mKCJ4aHJTY2hlZHVsZWQiKSxuZT1mKCJ4aHJVUkwiKSxtZT1mKCJ4aHJFcnJvckJlZm9yZVNjaGVkdWxlZCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixmdW5jdGlvbihRKXtRLm5hdmlnYXRvciYmUS5uYXZpZ2F0b3IuZ2VvbG9jYXRpb24mJmZ1bmN0aW9uKFEscmUpe2Zvcih2YXIgX2U9US5jb25zdHJ1Y3Rvci5uYW1lLEk9ZnVuY3Rpb24oJCl7dmFyIGx0LEplLG5lPXJlWyRdLG1lPVFbbmVdO2lmKG1lKXtpZighayhuKFEsbmUpKSlyZXR1cm4iY29udGludWUiO1FbbmVdPShKZT1mdW5jdGlvbigpe3JldHVybiBsdC5hcHBseSh0aGlzLEQoYXJndW1lbnRzLF9lKyIuIituZSkpfSxsZShKZSxsdD1tZSksSmUpfX0sWD0wO1g8cmUubGVuZ3RoO1grKylJKFgpfShRLm5hdmlnYXRvci5nZW9sb2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IixmdW5jdGlvbihRLHJlKXtmdW5jdGlvbiBfZShJKXtyZXR1cm4gZnVuY3Rpb24oWCl7Y2UoUSxJKS5mb3JFYWNoKGZ1bmN0aW9uKG5lKXt2YXIgbWU9US5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ7aWYobWUpe3ZhciBLZT1uZXcgbWUoSSx7cHJvbWlzZTpYLnByb21pc2UscmVhc29uOlgucmVqZWN0aW9ufSk7bmUuaW52b2tlKEtlKX19KX19US5Qcm9taXNlUmVqZWN0aW9uRXZlbnQmJihyZVtmKCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIpXT1fZSgidW5oYW5kbGVkcmVqZWN0aW9uIikscmVbZigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKV09X2UoInJlamVjdGlvbmhhbmRsZWQiKSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6bigpfSksSGI9UmQoJG89PnsidXNlIHN0cmljdCI7dmFyIEZKZT0kbyYmJG8uX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX07ZnVuY3Rpb24gVmhlKG4sdCl7cmV0dXJuIE1hdGguZmxvb3IodCgpKm4pfWZ1bmN0aW9uIGxGKG4pe2Zvcih2YXIgdD1bXSxlPTA7ZTxuO2UrKyl0LnB1c2godm9pZCAwKTtyZXR1cm4gdH1mdW5jdGlvbiBRRyhuLHQpe3JldHVybiBsRihuKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdH0pfWZ1bmN0aW9uIEhoZShuKXtyZXR1cm4gUUcobiwwKX1mdW5jdGlvbiBVaGUobil7cmV0dXJuIG4ucmVkdWNlKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkbywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksJG8udGF1UmFuZEludD1WaGUsJG8udGF1UmFuZD1mdW5jdGlvbihuKXtyZXR1cm4gbigpfSwkby5ub3JtPWZ1bmN0aW9uKG4pe3ZhciB0LGUsaT0wO3RyeXtmb3IodmFyIHI9RkplKG4pLG89ci5uZXh0KCk7IW8uZG9uZTtvPXIubmV4dCgpKWkrPU1hdGgucG93KG8udmFsdWUsMil9Y2F0Y2goYSl7dD17ZXJyb3I6YX19ZmluYWxseXt0cnl7byYmIW8uZG9uZSYmKGU9ci5yZXR1cm4pJiZlLmNhbGwocil9ZmluYWxseXtpZih0KXRocm93IHQuZXJyb3J9fXJldHVybiBNYXRoLnNxcnQoaSl9LCRvLmVtcHR5PWxGLCRvLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBsRihuKS5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pfSwkby5maWxsZWQ9UUcsJG8uemVyb3M9SGhlLCRvLm9uZXM9ZnVuY3Rpb24obil7cmV0dXJuIFFHKG4sMSl9LCRvLmxpbmVhcj1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGxGKGUpLm1hcChmdW5jdGlvbihpLHIpe3JldHVybiBuK3IqKCh0LW4pLyhlLTEpKX0pfSwkby5zdW09VWhlLCRvLm1lYW49ZnVuY3Rpb24obil7cmV0dXJuIFVoZShuKS9uLmxlbmd0aH0sJG8ubWF4PWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD0wLGU9MDtlPG4ubGVuZ3RoO2UrKyl0PW5bZV0+dD9uW2VdOnQ7cmV0dXJuIHR9LCRvLm1heDJkPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdD0wLGU9MDtlPG4ubGVuZ3RoO2UrKylmb3IodmFyIGk9MDtpPG5bZV0ubGVuZ3RoO2krKyl0PW5bZV1baV0+dD9uW2VdW2ldOnQ7cmV0dXJuIHR9LCRvLnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbihuLHQsZSl7Zm9yKHZhciBpPUhoZShuKSxyPTA7cjxuO3IrKylmb3IodmFyIG89ITA7bzspe2Zvcih2YXIgcz1WaGUodCxlKSxhPSExLGw9MDtsPHI7bCsrKWlmKHM9PT1pW2xdKXthPSEwO2JyZWFrfWF8fChvPSExKSxpW3JdPXN9cmV0dXJuIGl9LCRvLnJlc2hhcGUyZD1mdW5jdGlvbihuLHQsZSl7dmFyIGk9W10sbz0wO2lmKG4ubGVuZ3RoIT09dCplKXRocm93IG5ldyBFcnJvcigiQXJyYXkgZGltZW5zaW9ucyBtdXN0IG1hdGNoIGlucHV0IGxlbmd0aC4iKTtmb3IodmFyIHM9MDtzPHQ7cysrKXtmb3IodmFyIGE9W10sbD0wO2w8ZTtsKyspYS5wdXNoKG5bb10pLG8rPTE7aS5wdXNoKGEpfXJldHVybiBpfX0pLFpHPVJkKGZ1PT57InVzZSBzdHJpY3QiO3ZhciBxSmU9ZnUmJmZ1Ll9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciB0PXt9O2lmKG51bGwhPW4pZm9yKHZhciBlIGluIG4pT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobixlKSYmKHRbZV09bltlXSk7cmV0dXJuIHQuZGVmYXVsdD1uLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShmdSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHdFPXFKZShIYigpKTtmdW5jdGlvbiB6aGUobix0KXt2YXIgZT1mdW5jdGlvbihyKXtyZXR1cm4gd0UuZW1wdHkobikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHdFLmZpbGxlZCh0LHIpfSl9LGk9W107cmV0dXJuIGkucHVzaChlKC0xKSksaS5wdXNoKGUoMS8wKSksaS5wdXNoKGUoMCkpLGl9ZnVuY3Rpb24gS0cobix0LGUsaSxyKXt0PU1hdGguZmxvb3IodCk7dmFyIG89blswXVt0XTtpZihlPj1uWzFdW3RdWzBdKXJldHVybiAwO2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWlmKGk9PT1vW2xdKXJldHVybiAwO3JldHVybiBqaGUobix0LGUsaSxyKX1mdW5jdGlvbiBqaGUobix0LGUsaSxyKXt2YXIgbz1uWzBdW3RdLHM9blsxXVt0XSxhPW5bMl1bdF07aWYoZT49c1swXSlyZXR1cm4gMDtzWzBdPWUsb1swXT1pLGFbMF09cjtmb3IodmFyIGw9MCxjPTA7Oyl7dmFyIHU9MipsKzEsZD11KzEscD1uWzBdWzBdLmxlbmd0aDtpZih1Pj1wKWJyZWFrO2lmKGQ+PXApe2lmKCEoc1t1XT5lKSlicmVhaztjPXV9ZWxzZSBpZihzW3VdPj1zW2RdKXtpZighKGU8c1t1XSkpYnJlYWs7Yz11fWVsc2V7aWYoIShlPHNbZF0pKWJyZWFrO2M9ZH1zW2xdPXNbY10sb1tsXT1vW2NdLGFbbF09YVtjXSxsPWN9cmV0dXJuIHNbbF09ZSxvW2xdPWksYVtsXT1yLDF9ZnVuY3Rpb24gS0plKG4sdCxlLGkpe2Zvcig7MippKzE8ZTspe3ZhciByPTIqaSsxLG89cisxLHM9aTtpZihuW3NdPG5bcl0mJihzPXIpLG88ZSYmbltzXTxuW29dJiYocz1vKSxzPT09aSlicmVhazt2YXIgYT1uW2ldO25baV09bltzXSxuW3NdPWE7dmFyIGw9dFtpXTt0W2ldPXRbc10sdFtzXT1sLGk9c319ZnUubWFrZUhlYXA9emhlLGZ1LnJlamVjdGlvblNhbXBsZT1mdW5jdGlvbihuLHQsZSl7Zm9yKHZhciBpPXdFLnplcm9zKG4pLHI9MDtyPG47cisrKXtmb3IodmFyIG89ITAscz0wO287KXtzPXdFLnRhdVJhbmRJbnQodCxlKTtmb3IodmFyIGE9ITEsbD0wO2w8cjtsKyspaWYocz09PWlbbF0pe2E9ITA7YnJlYWt9YXx8KG89ITEpfWlbcl09c31yZXR1cm4gaX0sZnUuaGVhcFB1c2g9S0csZnUudW5jaGVja2VkSGVhcFB1c2g9amhlLGZ1LmJ1aWxkQ2FuZGlkYXRlcz1mdW5jdGlvbihuLHQsZSxpLHIpe2Zvcih2YXIgbz16aGUodCxpKSxzPTA7czx0O3MrKylmb3IodmFyIGE9MDthPGU7YSsrKWlmKCEoblswXVtzXVthXTwwKSl7dmFyIGw9blswXVtzXVthXSxjPW5bMl1bc11bYV0sdT13RS50YXVSYW5kKHIpO0tHKG8scyx1LGwsYyksS0cobyxsLHUscyxjKSxuWzJdW3NdW2FdPTB9cmV0dXJuIG99LGZ1LmRlaGVhcFNvcnQ9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW5bMF0sZT1uWzFdLGk9MDtpPHQubGVuZ3RoO2krKylmb3IodmFyIHI9dFtpXSxvPWVbaV0scz0wO3M8ci5sZW5ndGgtMTtzKyspe3ZhciBhPXIubGVuZ3RoLXMtMSxsPW8ubGVuZ3RoLXMtMSxjPXJbMF07clswXT1yW2FdLHJbYV09Yzt2YXIgdT1vWzBdO29bMF09b1tsXSxvW2xdPXUsS0plKG8scixsLDApfXJldHVybntpbmRpY2VzOnQsd2VpZ2h0czplfX0sZnUuc21hbGxlc3RGbGFnZ2VkPWZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW5bMF1bdF0saT1uWzFdW3RdLHI9blsyXVt0XSxvPTEvMCxzPS0xLGE9MDthPmUubGVuZ3RoO2ErKykxPT09clthXSYmaVthXTxvJiYobz1pW2FdLHM9YSk7cmV0dXJuIHM+PTA/KHJbc109MCxNYXRoLmZsb29yKGVbc10pKTotMX19KSxKRz1SZChlcz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgY0Y9ZXMmJmVzLl9fcmVhZHx8ZnVuY3Rpb24obix0KXt2YXIgZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5pdGVyYXRvcl07aWYoIWUpcmV0dXJuIG47dmFyIHIscyxpPWUuY2FsbChuKSxvPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT10fHx0LS0gPjApJiYhKHI9aS5uZXh0KCkpLmRvbmU7KW8ucHVzaChyLnZhbHVlKX1jYXRjaChhKXtzPXtlcnJvcjphfX1maW5hbGx5e3RyeXtyJiYhci5kb25lJiYoZT1pLnJldHVybikmJmUuY2FsbChpKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19cmV0dXJuIG99LEpKZT1lcyYmZXMuX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX0sJEplPWVzJiZlcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG4pe2lmKG4mJm4uX19lc01vZHVsZSlyZXR1cm4gbjt2YXIgdD17fTtpZihudWxsIT1uKWZvcih2YXIgZSBpbiBuKU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSkmJih0W2VdPW5bZV0pO3JldHVybiB0LmRlZmF1bHQ9bix0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZXMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBTRSxHaGU9JEplKEhiKCkpLFViPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUsaSxyKXtpZih0aGlzLmVudHJpZXM9bmV3IE1hcCx0aGlzLm5Sb3dzPTAsdGhpcy5uQ29scz0wLHQubGVuZ3RoIT09ZS5sZW5ndGh8fHQubGVuZ3RoIT09aS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJyb3dzLCBjb2xzIGFuZCB2YWx1ZXMgYXJyYXlzIG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIik7dGhpcy5uUm93cz1yWzBdLHRoaXMubkNvbHM9clsxXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9dFtvXSxhPWVbb107dGhpcy5jaGVja0RpbXMocyxhKTt2YXIgbD10aGlzLm1ha2VLZXkocyxhKTt0aGlzLmVudHJpZXMuc2V0KGwse3ZhbHVlOmlbb10scm93OnMsY29sOmF9KX19cmV0dXJuIG4ucHJvdG90eXBlLm1ha2VLZXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCsiOiIrZX0sbi5wcm90b3R5cGUuY2hlY2tEaW1zPWZ1bmN0aW9uKHQsZSl7aWYoISh0PHRoaXMublJvd3MmJmU8dGhpcy5uQ29scykpdGhyb3cgbmV3IEVycm9yKCJyb3cgYW5kL29yIGNvbCBzcGVjaWZpZWQgb3V0c2lkZSBvZiBtYXRyaXggZGltZW5zaW9ucyIpfSxuLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCxlLGkpe3RoaXMuY2hlY2tEaW1zKHQsZSk7dmFyIHI9dGhpcy5tYWtlS2V5KHQsZSk7dGhpcy5lbnRyaWVzLmhhcyhyKT90aGlzLmVudHJpZXMuZ2V0KHIpLnZhbHVlPWk6dGhpcy5lbnRyaWVzLnNldChyLHt2YWx1ZTppLHJvdzp0LGNvbDplfSl9LG4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUsaSl7dm9pZCAwPT09aSYmKGk9MCksdGhpcy5jaGVja0RpbXModCxlKTt2YXIgcj10aGlzLm1ha2VLZXkodCxlKTtyZXR1cm4gdGhpcy5lbnRyaWVzLmhhcyhyKT90aGlzLmVudHJpZXMuZ2V0KHIpLnZhbHVlOml9LG4ucHJvdG90eXBlLmdldEFsbD1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIGU9W107cmV0dXJuIHRoaXMuZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2UucHVzaChpKX0pLHQmJmUuc29ydChmdW5jdGlvbihpLHIpe3JldHVybiBpLnJvdz09PXIucm93P2kuY29sLXIuY29sOmkucm93LXIucm93fSksZX0sbi5wcm90b3R5cGUuZ2V0RGltcz1mdW5jdGlvbigpe3JldHVyblt0aGlzLm5Sb3dzLHRoaXMubkNvbHNdfSxuLnByb3RvdHlwZS5nZXRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBjRih0LDIpWzFdLnJvd30pfSxuLnByb3RvdHlwZS5nZXRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnRyaWVzLGZ1bmN0aW9uKHQpe3JldHVybiBjRih0LDIpWzFdLmNvbH0pfSxuLnByb3RvdHlwZS5nZXRWYWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXMsZnVuY3Rpb24odCl7cmV0dXJuIGNGKHQsMilbMV0udmFsdWV9KX0sbi5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbih0KXt0aGlzLmVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdChlLnZhbHVlLGUucm93LGUuY29sKX0pfSxuLnByb3RvdHlwZS5tYXA9ZnVuY3Rpb24odCl7dmFyIGU9W107dGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24ocil7ZS5wdXNoKHQoci52YWx1ZSxyLnJvdyxyLmNvbCkpfSk7dmFyIGk9W3RoaXMublJvd3MsdGhpcy5uQ29sc107cmV0dXJuIG5ldyBuKHRoaXMuZ2V0Um93cygpLHRoaXMuZ2V0Q29scygpLGUsaSl9LG4ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9R2hlLmVtcHR5KHRoaXMublJvd3MpLm1hcChmdW5jdGlvbigpe3JldHVybiBHaGUuemVyb3ModC5uQ29scyl9KTtyZXR1cm4gdGhpcy5lbnRyaWVzLmZvckVhY2goZnVuY3Rpb24ocil7aVtyLnJvd11bci5jb2xdPXIudmFsdWV9KSxpfSxufSgpO2VzLlNwYXJzZU1hdHJpeD1VYixlcy50cmFuc3Bvc2U9ZnVuY3Rpb24obil7dmFyIHQ9W10sZT1bXSxpPVtdO3JldHVybiBuLmZvckVhY2goZnVuY3Rpb24obyxzLGEpe3QucHVzaChzKSxlLnB1c2goYSksaS5wdXNoKG8pfSksbmV3IFViKGUsdCxpLFtuLm5Db2xzLG4ublJvd3NdKX0sZXMuaWRlbnRpdHk9ZnVuY3Rpb24obil7Zm9yKHZhciBlPWNGKG4sMSlbMF0saT1uZXcgVWIoW10sW10sW10sbikscj0wO3I8ZTtyKyspaS5zZXQocixyLDEpO3JldHVybiBpfSxlcy5wYWlyd2lzZU11bHRpcGx5PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVGKG4sdCxmdW5jdGlvbihlLGkpe3JldHVybiBlKml9KX0sZXMuYWRkPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVGKG4sdCxmdW5jdGlvbihlLGkpe3JldHVybiBlK2l9KX0sZXMuc3VidHJhY3Q9ZnVuY3Rpb24obix0KXtyZXR1cm4gdUYobix0LGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGUtaX0pfSxlcy5tYXhpbXVtPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHVGKG4sdCxmdW5jdGlvbihlLGkpe3JldHVybiBlPmk/ZTppfSl9LGVzLm11bHRpcGx5U2NhbGFyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlKnR9KX0sZXMuZWxpbWluYXRlWmVyb3M9ZnVuY3Rpb24obil7Zm9yKHZhciB0PW5ldyBTZXQsZT1uLmdldFZhbHVlcygpLGk9bi5nZXRSb3dzKCkscj1uLmdldENvbHMoKSxvPTA7bzxlLmxlbmd0aDtvKyspMD09PWVbb10mJnQuYWRkKG8pO3ZhciBzPWZ1bmN0aW9uKHUsZCl7cmV0dXJuIXQuaGFzKGQpfSxhPWUuZmlsdGVyKHMpLGw9aS5maWx0ZXIocyksYz1yLmZpbHRlcihzKTtyZXR1cm4gbmV3IFViKGwsYyxhLG4uZ2V0RGltcygpKX0sZXMubm9ybWFsaXplPWZ1bmN0aW9uKG4sdCl7dm9pZCAwPT09dCYmKHQ9ImwyIik7dmFyIGUsaSxyPWMkZVt0XSxvPW5ldyBNYXA7bi5mb3JFYWNoKGZ1bmN0aW9uKGQscCxoKXt2YXIgZj1vLmdldChwKXx8W107Zi5wdXNoKGgpLG8uc2V0KHAsZil9KTt2YXIgcz1uZXcgVWIoW10sW10sW10sbi5nZXREaW1zKCkpLGE9ZnVuY3Rpb24oZCl7Zm9yKHZhciBwPW8uZ2V0KGQpLnNvcnQoKSxoPXAubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBuLmdldChkLHgpfSksZj1yKGgpLG09MDttPGYubGVuZ3RoO20rKylzLnNldChkLHBbbV0sZlttXSl9O3RyeXtmb3IodmFyIGw9SkplKG8ua2V5cygpKSxjPWwubmV4dCgpOyFjLmRvbmU7Yz1sLm5leHQoKSlhKGMudmFsdWUpfWNhdGNoKGQpe2U9e2Vycm9yOmR9fWZpbmFsbHl7dHJ5e2MmJiFjLmRvbmUmJihpPWwucmV0dXJuKSYmaS5jYWxsKGwpfWZpbmFsbHl7aWYoZSl0aHJvdyBlLmVycm9yfX1yZXR1cm4gc307dmFyIGMkZT0oKFNFPXt9KS5tYXg9ZnVuY3Rpb24obil7Zm9yKHZhciB0PS0xLzAsZT0wO2U8bi5sZW5ndGg7ZSsrKXQ9bltlXT50P25bZV06dDtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkvdH0pfSxTRS5sMT1mdW5jdGlvbihuKXtmb3IodmFyIHQ9MCxlPTA7ZTxuLmxlbmd0aDtlKyspdCs9bltlXTtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIGkvdH0pfSxTRS5sMj1mdW5jdGlvbihuKXtmb3IodmFyIHQ9MCxlPTA7ZTxuLmxlbmd0aDtlKyspdCs9TWF0aC5wb3cobltlXSwyKTtyZXR1cm4gbi5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyhpLDIpL3QpfSl9LFNFKTtmdW5jdGlvbiB1RihuLHQsZSl7Zm9yKHZhciBpPW5ldyBTZXQscj1bXSxvPVtdLHM9W10sYT1mdW5jdGlvbihELFQpe3IucHVzaChEKSxvLnB1c2goVCk7dmFyIGs9ZShuLmdldChELFQpLHQuZ2V0KEQsVCkpO3MucHVzaChrKX0sbD1uLmdldFZhbHVlcygpLGM9bi5nZXRSb3dzKCksdT1uLmdldENvbHMoKSxkPTA7ZDxsLmxlbmd0aDtkKyspaS5hZGQoKHA9Y1tkXSkrIjoiKyhoPXVbZF0pKSxhKHAsaCk7dmFyIG09dC5nZXRWYWx1ZXMoKSx4PXQuZ2V0Um93cygpLGc9dC5nZXRDb2xzKCk7Zm9yKGQ9MDtkPG0ubGVuZ3RoO2QrKyl7dmFyIHAsaDtpLmhhcygocD14W2RdKSsiOiIrKGg9Z1tkXSkpfHxhKHAsaCl9cmV0dXJuIG5ldyBVYihyLG8scyxbbi5uUm93cyxuLm5Db2xzXSl9ZXMuZ2V0Q1NSPWZ1bmN0aW9uKG4pe3ZhciB0PVtdO24uZm9yRWFjaChmdW5jdGlvbihkLHAsaCl7dC5wdXNoKHt2YWx1ZTpkLHJvdzpwLGNvbDpofSl9KSx0LnNvcnQoZnVuY3Rpb24oZCxwKXtyZXR1cm4gZC5yb3c9PT1wLnJvdz9kLmNvbC1wLmNvbDpkLnJvdy1wLnJvd30pO2Zvcih2YXIgZT1bXSxpPVtdLHI9W10sbz0tMSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBhPXRbc10sbD1hLnJvdyxjPWEuY29sLHU9YS52YWx1ZTtsIT09byYmKG89bCxyLnB1c2gocykpLGUucHVzaChjKSxpLnB1c2godSl9cmV0dXJue2luZGljZXM6ZSx2YWx1ZXM6aSxpbmRwdHI6cn19fSksaTY9UmQoWWE9PnsidXNlIHN0cmljdCI7dmFyIGQkZT1ZYSYmWWEuX19yZWFkfHxmdW5jdGlvbihuLHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXTtpZighZSlyZXR1cm4gbjt2YXIgcixzLGk9ZS5jYWxsKG4pLG89W107dHJ5e2Zvcig7KHZvaWQgMD09PXR8fHQtLSA+MCkmJiEocj1pLm5leHQoKSkuZG9uZTspby5wdXNoKHIudmFsdWUpfWNhdGNoKGEpe3M9e2Vycm9yOmF9fWZpbmFsbHl7dHJ5e3ImJiFyLmRvbmUmJihlPWkucmV0dXJuKSYmZS5jYWxsKGkpfWZpbmFsbHl7aWYocyl0aHJvdyBzLmVycm9yfX1yZXR1cm4gb30sV2hlPVlhJiZZYS5fX3NwcmVhZHx8ZnVuY3Rpb24oKXtmb3IodmFyIG49W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspbj1uLmNvbmNhdChkJGUoYXJndW1lbnRzW3RdKSk7cmV0dXJuIG59LHAkZT1ZYSYmWWEuX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX0saCRlPVlhJiZZYS5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG4pe2lmKG4mJm4uX19lc01vZHVsZSlyZXR1cm4gbjt2YXIgdD17fTtpZihudWxsIT1uKWZvcih2YXIgZSBpbiBuKU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sZSkmJih0W2VdPW5bZV0pO3JldHVybiB0LmRlZmF1bHQ9bix0fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoWWEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBYcz1oJGUoSGIoKSkscWhlPWZ1bmN0aW9uKHQsZSxpLHIpe3RoaXMuaHlwZXJwbGFuZXM9dCx0aGlzLm9mZnNldHM9ZSx0aGlzLmNoaWxkcmVuPWksdGhpcy5pbmRpY2VzPXJ9O2Z1bmN0aW9uICRHKG4sdCxlLGkscil7aWYodm9pZCAwPT09ZSYmKGU9MzApLHQubGVuZ3RoPmUpe3ZhciBvPWZ1bmN0aW9uKG4sdCxlKXtmb3IodmFyIGk9blswXS5sZW5ndGgscj1Ycy50YXVSYW5kSW50KHQubGVuZ3RoLGUpLG89WHMudGF1UmFuZEludCh0Lmxlbmd0aCxlKSxzPXRbcl0sYT10W289KG8rPXI9PT1vPzE6MCkldC5sZW5ndGhdLGw9MCxjPVhzLnplcm9zKGkpLHU9MDt1PGMubGVuZ3RoO3UrKyljW3VdPW5bc11bdV0tblthXVt1XSxsLT1jW3VdKihuW3NdW3VdK25bYV1bdV0pLzI7dmFyIGQ9MCxwPTAsaD1Ycy56ZXJvcyh0Lmxlbmd0aCk7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKyl7Zm9yKHZhciBmPWwsbT0wO208aTttKyspZis9Y1ttXSpuW3RbdV1dW21dOzA9PT1mPyhoW3VdPVhzLnRhdVJhbmRJbnQoMixlKSwwPT09aFt1XT9kKz0xOnArPTEpOmY+MD8oaFt1XT0wLGQrPTEpOihoW3VdPTEscCs9MSl9dmFyIHg9WHMuemVyb3MoZCksZz1Ycy56ZXJvcyhwKTtmb3IoZD0wLHA9MCx1PTA7dTxoLmxlbmd0aDt1KyspMD09PWhbdV0/KHhbZF09dFt1XSxkKz0xKTooZ1twXT10W3VdLHArPTEpO3JldHVybntpbmRpY2VzTGVmdDp4LGluZGljZXNSaWdodDpnLGh5cGVycGxhbmU6YyxvZmZzZXQ6bH19KG4sdCxyKSxhPW8uaW5kaWNlc1JpZ2h0LGw9by5oeXBlcnBsYW5lLGM9by5vZmZzZXQ7cmV0dXJue2xlZnRDaGlsZDokRyhuLG8uaW5kaWNlc0xlZnQsZSxpKzEscikscmlnaHRDaGlsZDokRyhuLGEsZSxpKzEsciksaXNMZWFmOiExLGh5cGVycGxhbmU6bCxvZmZzZXQ6Y319cmV0dXJue2luZGljZXM6dCxpc0xlYWY6ITB9fWZ1bmN0aW9uIGU2KG4sdCxlLGkscixvLHMpe3ZhciBhO2lmKG4uaXNMZWFmKXJldHVybiBpW29dWzBdPS1zLChhPXJbc10pLnNwbGljZS5hcHBseShhLFdoZShbMCxuLmluZGljZXMubGVuZ3RoXSxuLmluZGljZXMpKSx7bm9kZU51bTpvLGxlYWZOdW06cys9MX07dFtvXT1uLmh5cGVycGxhbmUsZVtvXT1uLm9mZnNldCxpW29dWzBdPW8rMTt2YXIgbD1vLGM9ZTYobi5sZWZ0Q2hpbGQsdCxlLGkscixvKzEscyk7cmV0dXJuIHM9Yy5sZWFmTnVtLGlbbF1bMV09KG89Yy5ub2RlTnVtKSsxLHtub2RlTnVtOihjPWU2KG4ucmlnaHRDaGlsZCx0LGUsaSxyLG8rMSxzKSkubm9kZU51bSxsZWFmTnVtOmMubGVhZk51bX19ZnVuY3Rpb24gdDYobil7cmV0dXJuIG4uaXNMZWFmPzE6MSt0NihuLmxlZnRDaGlsZCkrdDYobi5yaWdodENoaWxkKX1mdW5jdGlvbiBuNihuKXtyZXR1cm4gbi5pc0xlYWY/MTpuNihuLmxlZnRDaGlsZCkrbjYobi5yaWdodENoaWxkKX1mdW5jdGlvbiB5JGUobix0LGUsaSl7Zm9yKHZhciByPXQsbz0wO288ZS5sZW5ndGg7bysrKXIrPW5bb10qZVtvXTtyZXR1cm4gMD09PXI/WHMudGF1UmFuZEludCgyLGkpOnI+MD8wOjF9WWEuRmxhdFRyZWU9cWhlLFlhLm1ha2VGb3Jlc3Q9ZnVuY3Rpb24obix0LGUsaSl7dmFyIHI9TWF0aC5tYXgoMTAsdCksbz1Ycy5yYW5nZShlKS5tYXAoZnVuY3Rpb24oYSxsKXtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIHZvaWQgMD09PXQmJih0PTMwKSwkRyhuLFhzLnJhbmdlKG4ubGVuZ3RoKSx0LGUsaSl9KG4scixsLGkpfSkscz1vLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24obix0KXt2YXIgZT10NihuKSxpPW42KG4pLHI9WHMucmFuZ2UoZSkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIFhzLnplcm9zKG4uaHlwZXJwbGFuZT9uLmh5cGVycGxhbmUubGVuZ3RoOjApfSksbz1Ycy56ZXJvcyhlKSxzPVhzLnJhbmdlKGUpLm1hcChmdW5jdGlvbigpe3JldHVyblstMSwtMV19KSxhPVhzLnJhbmdlKGkpLm1hcChmdW5jdGlvbigpe3JldHVybiBYcy5yYW5nZSh0KS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4tMX0pfSk7cmV0dXJuIGU2KG4scixvLHMsYSwwLDApLG5ldyBxaGUocixvLHMsYSl9KGEscil9KTtyZXR1cm4gc30sWWEubWFrZUxlYWZBcnJheT1mdW5jdGlvbihuKXt2YXIgdCxlO2lmKG4ubGVuZ3RoPjApe3ZhciBpPVtdO3RyeXtmb3IodmFyIHI9cCRlKG4pLG89ci5uZXh0KCk7IW8uZG9uZTtvPXIubmV4dCgpKWkucHVzaC5hcHBseShpLFdoZShvLnZhbHVlLmluZGljZXMpKX1jYXRjaChhKXt0PXtlcnJvcjphfX1maW5hbGx5e3RyeXtvJiYhby5kb25lJiYoZT1yLnJldHVybikmJmUuY2FsbChyKX1maW5hbGx5e2lmKHQpdGhyb3cgdC5lcnJvcn19cmV0dXJuIGl9cmV0dXJuW1stMV1dfSxZYS5zZWFyY2hGbGF0VHJlZT1mdW5jdGlvbihuLHQsZSl7Zm9yKHZhciBpPTA7dC5jaGlsZHJlbltpXVswXT4wOylpPTA9PT15JGUodC5oeXBlcnBsYW5lc1tpXSx0Lm9mZnNldHNbaV0sbixlKT90LmNoaWxkcmVuW2ldWzBdOnQuY2hpbGRyZW5baV1bMV07cmV0dXJuIHQuaW5kaWNlc1stMSp0LmNoaWxkcmVuW2ldWzBdXX19KSxRaGU9UmQoSWQ9PnsidXNlIHN0cmljdCI7dmFyIFloZT1JZCYmSWQuX192YWx1ZXN8fGZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXSxlPTA7cmV0dXJuIHQ/dC5jYWxsKG4pOntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIG4mJmU+PW4ubGVuZ3RoJiYobj12b2lkIDApLHt2YWx1ZTpuJiZuW2UrK10sZG9uZTohbn19fX0sZEY9SWQmJklkLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obil7aWYobiYmbi5fX2VzTW9kdWxlKXJldHVybiBuO3ZhciB0PXt9O2lmKG51bGwhPW4pZm9yKHZhciBlIGluIG4pT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobixlKSYmKHRbZV09bltlXSk7cmV0dXJuIHQuZGVmYXVsdD1uLHR9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShJZCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHlhPWRGKFpHKCkpLHgkZT1kRihKRygpKSxDJGU9ZEYoaTYoKSksWGhlPWRGKEhiKCkpO0lkLm1ha2VOTkRlc2NlbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gZnVuY3Rpb24oaSxyLG8scyxhLGwsYyx1KXt2b2lkIDA9PT1zJiYocz0xMCksdm9pZCAwPT09YSYmKGE9NTApLHZvaWQgMD09PWwmJihsPS4wMDEpLHZvaWQgMD09PWMmJihjPS41KSx2b2lkIDA9PT11JiYodT0hMCk7Zm9yKHZhciBkPWkubGVuZ3RoLHA9eWEubWFrZUhlYXAoaS5sZW5ndGgsbyksaD0wO2g8aS5sZW5ndGg7aCsrKWZvcih2YXIgZj15YS5yZWplY3Rpb25TYW1wbGUobyxpLmxlbmd0aCx0KSxtPTA7bTxmLmxlbmd0aDttKyspe3ZhciB4PW4oaVtoXSxpW2ZbbV1dKTt5YS5oZWFwUHVzaChwLGgseCxmW21dLDEpLHlhLmhlYXBQdXNoKHAsZlttXSx4LGgsMSl9aWYodSlmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKylmb3IoaD0wO2g8cltnXS5sZW5ndGgmJiEocltnXVtoXTwwKTtoKyspZm9yKG09aCsxO208cltnXS5sZW5ndGgmJiEocltnXVttXTwwKTttKyspeD1uKGlbcltnXVtoXV0saVtyW2ddW21dXSkseWEuaGVhcFB1c2gocCxyW2ddW2hdLHgscltnXVttXSwxKSx5YS5oZWFwUHVzaChwLHJbZ11bbV0seCxyW2ddW2hdLDEpO2ZvcihnPTA7ZzxzO2crKyl7dmFyIGI9eWEuYnVpbGRDYW5kaWRhdGVzKHAsZCxvLGEsdCksRD0wO2ZvcihoPTA7aDxkO2grKylmb3IobT0wO208YTttKyspe3ZhciBUPU1hdGguZmxvb3IoYlswXVtoXVttXSk7aWYoIShUPDB8fFhoZS50YXVSYW5kKHQpPGMpKWZvcih2YXIgaz0wO2s8YTtrKyspe3ZhciBaPU1hdGguZmxvb3IoYlswXVtoXVtrXSk7WjwwfHwhYlsyXVtoXVttXSYmIWJbMl1baF1ba118fCh4PW4oaVtUXSxpW1pdKSxEKz15YS5oZWFwUHVzaChwLFQseCxaLDEpLEQrPXlhLmhlYXBQdXNoKHAsWix4LFQsMSkpfX1pZihEPD1sKm8qaS5sZW5ndGgpYnJlYWt9cmV0dXJuIHlhLmRlaGVhcFNvcnQocCl9fSxJZC5tYWtlSW5pdGlhbGl6YXRpb25zPWZ1bmN0aW9uKG4pe3JldHVybntpbml0RnJvbVJhbmRvbTpmdW5jdGlvbihpLHIsbyxzLGEpe2Zvcih2YXIgbD0wO2w8by5sZW5ndGg7bCsrKWZvcih2YXIgYz1YaGUucmVqZWN0aW9uU2FtcGxlKGksci5sZW5ndGgsYSksdT0wO3U8Yy5sZW5ndGg7dSsrKWlmKCEoY1t1XTwwKSl7dmFyIGQ9bihyW2NbdV1dLG9bbF0pO3lhLmhlYXBQdXNoKHMsbCxkLGNbdV0sMSl9fSxpbml0RnJvbVRyZWU6ZnVuY3Rpb24oaSxyLG8scyxhKXtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoO2wrKylmb3IodmFyIGM9QyRlLnNlYXJjaEZsYXRUcmVlKG9bbF0saSxhKSx1PTA7dTxjLmxlbmd0aDt1Kyspe2lmKGNbdV08MClyZXR1cm47dmFyIGQ9bihyW2NbdV1dLG9bbF0pO3lhLmhlYXBQdXNoKHMsbCxkLGNbdV0sMSl9fX19LElkLm1ha2VJbml0aWFsaXplZE5OU2VhcmNoPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlLGkscixvKXtmb3IodmFyIHMsYSxsPXgkZS5nZXRDU1IoaSksYz1sLmluZGljZXMsdT1sLmluZHB0cixkPTA7ZDxvLmxlbmd0aDtkKyspZm9yKHZhciBwPW5ldyBTZXQoclswXVtkXSk7Oyl7dmFyIGg9eWEuc21hbGxlc3RGbGFnZ2VkKHIsZCk7aWYoLTE9PT1oKWJyZWFrO3ZhciBmPWMuc2xpY2UodVtoXSx1W2grMV0pO3RyeXtmb3IodmFyIG09WWhlKGYpLHg9bS5uZXh0KCk7IXguZG9uZTt4PW0ubmV4dCgpKXt2YXIgZz14LnZhbHVlO2lmKGchPT1oJiYtMSE9PWcmJiFwLmhhcyhnKSl7dmFyIGI9bihlW2ddLG9bZF0pO3lhLnVuY2hlY2tlZEhlYXBQdXNoKHIsZCxiLGcsMSkscC5hZGQoZyl9fX1jYXRjaChEKXtzPXtlcnJvcjpEfX1maW5hbGx5e3RyeXt4JiYheC5kb25lJiYoYT1tLnJldHVybikmJmEuY2FsbChtKX1maW5hbGx5e2lmKHMpdGhyb3cgcy5lcnJvcn19fXJldHVybiByfX0sSWQuaW5pdGlhbGl6ZVNlYXJjaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGM9eWEubWFrZUhlYXAoZS5sZW5ndGgsaSk7aWYocihpLHQsZSxjLHMpLG4pdHJ5e2Zvcih2YXIgdT1ZaGUobiksZD11Lm5leHQoKTshZC5kb25lO2Q9dS5uZXh0KCkpbyhkLnZhbHVlLHQsZSxjLHMpfWNhdGNoKGgpe2E9e2Vycm9yOmh9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihsPXUucmV0dXJuKSYmbC5jYWxsKHUpfWZpbmFsbHl7aWYoYSl0aHJvdyBhLmVycm9yfX1yZXR1cm4gY319KTtmdW5jdGlvbiBFRShuKXtyZXR1cm4gVCRlLmNhbGwobikuZW5kc1dpdGgoIkFycmF5XSIpfXZhciBUJGUsS2hlPWhvKCgpPT57VCRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmd9KTtmdW5jdGlvbiBwRihuLHQsZSl7bGV0IGk9MCxyPWUodCk7Zm9yKGxldCBvPTA7bzxuLngubGVuZ3RoO28rKylpKz1NYXRoLmFicyhuLnlbb10tcihuLnhbb10pKTtyZXR1cm4gaX12YXIgWmhlPWhvKCgpPT57fSk7ZnVuY3Rpb24gSWYobil7cmV0dXJuIEQkZS5jYWxsKG4pLmVuZHNXaXRoKCJBcnJheV0iKX12YXIgRCRlLGhGPWhvKCgpPT57RCRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmd9KTtmdW5jdGlvbiBBJGUobil7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFJZihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IGJlIGFuIGFycmF5Iik7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3Qgbm90IGJlIGVtcHR5Iik7dmFyIGU9dC5mcm9tSW5kZXgsaT12b2lkIDA9PT1lPzA6ZSxyPXQudG9JbmRleCxvPXZvaWQgMD09PXI/bi5sZW5ndGg6cjtpZihpPDB8fGk+PW4ubGVuZ3RofHwhTnVtYmVyLmlzSW50ZWdlcihpKSl0aHJvdyBuZXcgRXJyb3IoImZyb21JbmRleCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBzbWFsbGVyIHRoYW4gbGVuZ3RoIik7aWYobzw9aXx8bz5uLmxlbmd0aHx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEVycm9yKCJ0b0luZGV4IG11c3QgYmUgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gZnJvbUluZGV4IGFuZCBhdCBtb3N0IGVxdWFsIHRvIGxlbmd0aCIpO2Zvcih2YXIgcz1uW2ldLGE9aSsxO2E8bzthKyspblthXT5zJiYocz1uW2FdKTtyZXR1cm4gc312YXIgSmhlLCRoZT1obygoKT0+e2hGKCksSmhlPUEkZX0pO2Z1bmN0aW9uIEkkZShuKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIUlmKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3QgYmUgYW4gYXJyYXkiKTtpZigwPT09bi5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW5wdXQgbXVzdCBub3QgYmUgZW1wdHkiKTt2YXIgZT10LmZyb21JbmRleCxpPXZvaWQgMD09PWU/MDplLHI9dC50b0luZGV4LG89dm9pZCAwPT09cj9uLmxlbmd0aDpyO2lmKGk8MHx8aT49bi5sZW5ndGh8fCFOdW1iZXIuaXNJbnRlZ2VyKGkpKXRocm93IG5ldyBFcnJvcigiZnJvbUluZGV4IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHNtYWxsZXIgdGhhbiBsZW5ndGgiKTtpZihvPD1pfHxvPm4ubGVuZ3RofHwhTnVtYmVyLmlzSW50ZWdlcihvKSl0aHJvdyBuZXcgRXJyb3IoInRvSW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBmcm9tSW5kZXggYW5kIGF0IG1vc3QgZXF1YWwgdG8gbGVuZ3RoIik7Zm9yKHZhciBzPW5baV0sYT1pKzE7YTxvO2ErKyluW2FdPHMmJihzPW5bYV0pO3JldHVybiBzfXZhciBlZmUsdGZlPWhvKCgpPT57aEYoKSxlZmU9SSRlfSk7ZnVuY3Rpb24gUCRlKG4pe3ZhciBlLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFJZihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnB1dCBtdXN0IGJlIGFuIGFycmF5Iik7aWYoMD09PW4ubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImlucHV0IG11c3Qgbm90IGJlIGVtcHR5Iik7aWYodm9pZCAwIT09dC5vdXRwdXQpe2lmKCFJZih0Lm91dHB1dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigib3V0cHV0IG9wdGlvbiBtdXN0IGJlIGFuIGFycmF5IGlmIHNwZWNpZmllZCIpO2U9dC5vdXRwdXR9ZWxzZSBlPW5ldyBBcnJheShuLmxlbmd0aCk7dmFyIGk9ZWZlKG4pLHI9SmhlKG4pO2lmKGk9PT1yKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW5pbXVtIGFuZCBtYXhpbXVtIGlucHV0IHZhbHVlcyBhcmUgZXF1YWwuIENhbm5vdCByZXNjYWxlIGEgY29uc3RhbnQgYXJyYXkiKTt2YXIgbz10Lm1pbixzPXZvaWQgMD09PW8/dC5hdXRvTWluTWF4P2k6MDpvLGE9dC5tYXgsbD12b2lkIDA9PT1hP3QuYXV0b01pbk1heD9yOjE6YTtpZihzPj1sKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gb3B0aW9uIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCBvcHRpb24iKTtmb3IodmFyIGM9KGwtcykvKHItaSksdT0wO3U8bi5sZW5ndGg7dSsrKWVbdV09KG5bdV0taSkqYytzO3JldHVybiBlfXZhciByNixuZmU9aG8oKCk9PntoRigpLCRoZSgpLHRmZSgpLHI2PVAkZX0pO2Z1bmN0aW9uIHJmZSgpe3JldHVybiBvNih0aGlzKX1mdW5jdGlvbiBvNihuLHQ9e30pe2xldHttYXhSb3dzOmU9MTUsbWF4Q29sdW1uczppPTEwLG1heE51bVNpemU6cj04fT10O3JldHVybmAke24uY29uc3RydWN0b3IubmFtZX0ge1xuJHtmRn1bXG4ke2lmZX0ke2Z1bmN0aW9uKG4sdCxlLGkpe2xldHtyb3dzOnIsY29sdW1uczpvfT1uLHM9TWF0aC5taW4ocix0KSxhPU1hdGgubWluKG8sZSksbD1bXTtmb3IobGV0IGM9MDtjPHM7YysrKXtsZXQgdT1bXTtmb3IobGV0IGQ9MDtkPGE7ZCsrKXUucHVzaChPJGUobi5nZXQoYyxkKSxpKSk7bC5wdXNoKGAke3Uuam9pbigiICIpfWApfXJldHVybiBhIT09byYmKGxbbC5sZW5ndGgtMV0rPWAgLi4uICR7by1lfSBtb3JlIGNvbHVtbnNgKSxzIT09ciYmbC5wdXNoKGAuLi4gJHtyLXR9IG1vcmUgcm93c2ApLGwuam9pbihgXG4ke2lmZX1gKX0obixlLGkscil9XG4ke2ZGfV1cbiR7ZkZ9cm93czogJHtuLnJvd3N9XG4ke2ZGfWNvbHVtbnM6ICR7bi5jb2x1bW5zfVxufWB9ZnVuY3Rpb24gTyRlKG4sdCl7bGV0IGU9U3RyaW5nKG4pO2lmKGUubGVuZ3RoPD10KXJldHVybiBlLnBhZEVuZCh0LCIgIik7bGV0IGk9bi50b1ByZWNpc2lvbih0LTIpO2lmKGkubGVuZ3RoPD10KXJldHVybiBpO2xldCByPW4udG9FeHBvbmVudGlhbCh0LTIpLG89ci5pbmRleE9mKCJlIikscz1yLnNsaWNlKG8pO3JldHVybiByLnNsaWNlKDAsdC1zLmxlbmd0aCkrc312YXIgZkYsaWZlLG9mZT1obygoKT0+e2ZGPSIgIi5yZXBlYXQoMiksaWZlPSIgIi5yZXBlYXQoNCl9KSxhZmU9aG8oKCk9Pnt9KTtmdW5jdGlvbiBnYyhuLHQsZSl7aWYodDwwfHx0PihlP24ucm93czpuLnJvd3MtMSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJvdyBpbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBfYyhuLHQsZSl7aWYodDwwfHx0PihlP24uY29sdW1uczpuLmNvbHVtbnMtMSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkNvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBuMChuLHQpe2lmKHQudG8xREFycmF5JiYodD10LnRvMURBcnJheSgpKSx0Lmxlbmd0aCE9PW4uY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMiKTtyZXR1cm4gdH1mdW5jdGlvbiBpMChuLHQpe2lmKHQudG8xREFycmF5JiYodD10LnRvMURBcnJheSgpKSx0Lmxlbmd0aCE9PW4ucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidmVjdG9yIHNpemUgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyIG9mIHJvd3MiKTtyZXR1cm4gdH1mdW5jdGlvbiBrJGUobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5leHBlY3RlZCB0eXBlIGZvciByb3cgaW5kaWNlcyIpO2lmKHQuc29tZShpPT5pPDB8fGk+PW4ucm93cykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInJvdyBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8KHQ9QXJyYXkuZnJvbSh0KSksdH1mdW5jdGlvbiBGJGUobix0KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigidW5leHBlY3RlZCB0eXBlIGZvciBjb2x1bW4gaW5kaWNlcyIpO2lmKHQuc29tZShpPT5pPDB8fGk+PW4uY29sdW1ucykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImNvbHVtbiBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKTtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KXx8KHQ9QXJyYXkuZnJvbSh0KSksdH1mdW5jdGlvbiBzNihuLHQsZSxpLHIpe2lmKDUhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJleHBlY3RlZCA0IGFyZ3VtZW50cyIpO2lmKG1GKCJzdGFydFJvdyIsdCksbUYoImVuZFJvdyIsZSksbUYoInN0YXJ0Q29sdW1uIixpKSxtRigiZW5kQ29sdW1uIixyKSx0PmV8fGk+cnx8dDwwfHx0Pj1uLnJvd3N8fGU8MHx8ZT49bi5yb3dzfHxpPDB8fGk+PW4uY29sdW1uc3x8cjwwfHxyPj1uLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlN1Ym1hdHJpeCBpbmRpY2VzIGFyZSBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBURShuLHQ9MCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuO2krKyllLnB1c2godCk7cmV0dXJuIGV9ZnVuY3Rpb24gbUYobix0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtufSBtdXN0IGJlIGEgbnVtYmVyYCl9ZnVuY3Rpb24gcjAobil7aWYobi5pc0VtcHR5KCkpdGhyb3cgbmV3IEVycm9yKCJFbXB0eSBtYXRyaXggaGFzIG5vIGVsZW1lbnRzIHRvIGluZGV4Iil9dmFyIGE2PWhvKCgpPT57fSksVGZlPWhvKCgpPT57YTYoKX0pO2Z1bmN0aW9uIERmZShuLHQpe3JldHVybiBuLXR9dmFyIHRpLHJuLEFsLEFFLG8wPWhvKCgpPT57dmFyIG4sdDtuZmUoKSxvZmUoKSxhZmUoKSxUZmUoKSxhNigpLHRpPWNsYXNze3N0YXRpYyBmcm9tMURBcnJheSh0LGUsaSl7aWYodCplIT09aS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoImRhdGEgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGdpdmVuIGRpbWVuc2lvbnMiKTtsZXQgbz1uZXcgcm4odCxlKTtmb3IobGV0IHM9MDtzPHQ7cysrKWZvcihsZXQgYT0wO2E8ZTthKyspby5zZXQocyxhLGlbcyplK2FdKTtyZXR1cm4gb31zdGF0aWMgcm93VmVjdG9yKHQpe2xldCBlPW5ldyBybigxLHQubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyllLnNldCgwLGksdFtpXSk7cmV0dXJuIGV9c3RhdGljIGNvbHVtblZlY3Rvcih0KXtsZXQgZT1uZXcgcm4odC5sZW5ndGgsMSk7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspZS5zZXQoaSwwLHRbaV0pO3JldHVybiBlfXN0YXRpYyB6ZXJvcyh0LGUpe3JldHVybiBuZXcgcm4odCxlKX1zdGF0aWMgb25lcyh0LGUpe3JldHVybiBuZXcgcm4odCxlKS5maWxsKDEpfXN0YXRpYyByYW5kKHQsZSxpPXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHtyYW5kb206cj1NYXRoLnJhbmRvbX09aSxvPW5ldyBybih0LGUpO2ZvcihsZXQgcz0wO3M8dDtzKyspZm9yKGxldCBhPTA7YTxlO2ErKylvLnNldChzLGEscigpKTtyZXR1cm4gb31zdGF0aWMgcmFuZEludCh0LGUsaT17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtsZXR7bWluOnI9MCxtYXg6bz0xZTMscmFuZG9tOnM9TWF0aC5yYW5kb219PWk7aWYoIU51bWJlci5pc0ludGVnZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigibWluIG11c3QgYmUgYW4gaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoIm1heCBtdXN0IGJlIGFuIGludGVnZXIiKTtpZihyPj1vKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IGE9by1yLGw9bmV3IHJuKHQsZSk7Zm9yKGxldCBjPTA7Yzx0O2MrKylmb3IobGV0IHU9MDt1PGU7dSsrKXtsZXQgZD1yK01hdGgucm91bmQocygpKmEpO2wuc2V0KGMsdSxkKX1yZXR1cm4gbH1zdGF0aWMgZXllKHQsZSxpKXt2b2lkIDA9PT1lJiYoZT10KSx2b2lkIDA9PT1pJiYoaT0xKTtsZXQgcj1NYXRoLm1pbih0LGUpLG89dGhpcy56ZXJvcyh0LGUpO2ZvcihsZXQgcz0wO3M8cjtzKyspby5zZXQocyxzLGkpO3JldHVybiBvfXN0YXRpYyBkaWFnKHQsZSxpKXtsZXQgcj10Lmxlbmd0aDt2b2lkIDA9PT1lJiYoZT1yKSx2b2lkIDA9PT1pJiYoaT1lKTtsZXQgbz1NYXRoLm1pbihyLGUsaSkscz10aGlzLnplcm9zKGUsaSk7Zm9yKGxldCBhPTA7YTxvO2ErKylzLnNldChhLGEsdFthXSk7cmV0dXJuIHN9c3RhdGljIG1pbih0LGUpe3Q9dGhpcy5jaGVja01hdHJpeCh0KSxlPXRoaXMuY2hlY2tNYXRyaXgoZSk7bGV0IGk9dC5yb3dzLHI9dC5jb2x1bW5zLG89bmV3IHJuKGkscik7Zm9yKGxldCBzPTA7czxpO3MrKylmb3IobGV0IGE9MDthPHI7YSsrKW8uc2V0KHMsYSxNYXRoLm1pbih0LmdldChzLGEpLGUuZ2V0KHMsYSkpKTtyZXR1cm4gb31zdGF0aWMgbWF4KHQsZSl7dD10aGlzLmNoZWNrTWF0cml4KHQpLGU9dGhpcy5jaGVja01hdHJpeChlKTtsZXQgaT10LnJvd3Mscj10LmNvbHVtbnMsbz1uZXcgdGhpcyhpLHIpO2ZvcihsZXQgcz0wO3M8aTtzKyspZm9yKGxldCBhPTA7YTxyO2ErKylvLnNldChzLGEsTWF0aC5tYXgodC5nZXQocyxhKSxlLmdldChzLGEpKSk7cmV0dXJuIG99c3RhdGljIGNoZWNrTWF0cml4KHQpe3JldHVybiB0aS5pc01hdHJpeCh0KT90Om5ldyBybih0KX1zdGF0aWMgaXNNYXRyaXgodCl7cmV0dXJuIG51bGwhPXQmJiJNYXRyaXgiPT09dC5rbGFzc31nZXQgc2l6ZSgpe3JldHVybiB0aGlzLnJvd3MqdGhpcy5jb2x1bW5zfWFwcGx5KHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIG11c3QgYmUgYSBmdW5jdGlvbiIpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdC5jYWxsKHRoaXMsZSxpKTtyZXR1cm4gdGhpc310bzFEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXQucHVzaCh0aGlzLmdldChlLGkpKTtyZXR1cm4gdH10bzJEQXJyYXkoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspe3QucHVzaChbXSk7Zm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRbZV0ucHVzaCh0aGlzLmdldChlLGkpKX1yZXR1cm4gdH10b0pTT04oKXtyZXR1cm4gdGhpcy50bzJEQXJyYXkoKX1pc1Jvd1ZlY3Rvcigpe3JldHVybiAxPT09dGhpcy5yb3dzfWlzQ29sdW1uVmVjdG9yKCl7cmV0dXJuIDE9PT10aGlzLmNvbHVtbnN9aXNWZWN0b3IoKXtyZXR1cm4gMT09PXRoaXMucm93c3x8MT09PXRoaXMuY29sdW1uc31pc1NxdWFyZSgpe3JldHVybiB0aGlzLnJvd3M9PT10aGlzLmNvbHVtbnN9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5yb3dzfHwwPT09dGhpcy5jb2x1bW5zfWlzU3ltbWV0cmljKCl7aWYodGhpcy5pc1NxdWFyZSgpKXtmb3IobGV0IHQ9MDt0PHRoaXMucm93czt0KyspZm9yKGxldCBlPTA7ZTw9dDtlKyspaWYodGhpcy5nZXQodCxlKSE9PXRoaXMuZ2V0KGUsdCkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9aXNFY2hlbG9uRm9ybSgpe2xldCB0PTAsZT0wLGk9LTEscj0hMCxvPSExO2Zvcig7dDx0aGlzLnJvd3MmJnI7KXtmb3IoZT0wLG89ITE7ZTx0aGlzLmNvbHVtbnMmJiExPT09bzspMD09PXRoaXMuZ2V0KHQsZSk/ZSsrOjE9PT10aGlzLmdldCh0LGUpJiZlPmk/KG89ITAsaT1lKToocj0hMSxvPSEwKTt0Kyt9cmV0dXJuIHJ9aXNSZWR1Y2VkRWNoZWxvbkZvcm0oKXtsZXQgdD0wLGU9MCxpPS0xLHI9ITAsbz0hMTtmb3IoO3Q8dGhpcy5yb3dzJiZyOyl7Zm9yKGU9MCxvPSExO2U8dGhpcy5jb2x1bW5zJiYhMT09PW87KTA9PT10aGlzLmdldCh0LGUpP2UrKzoxPT09dGhpcy5nZXQodCxlKSYmZT5pPyhvPSEwLGk9ZSk6KHI9ITEsbz0hMCk7Zm9yKGxldCBzPWUrMTtzPHRoaXMucm93cztzKyspMCE9PXRoaXMuZ2V0KHQscykmJihyPSExKTt0Kyt9cmV0dXJuIHJ9ZWNoZWxvbkZvcm0oKXtsZXQgdD10aGlzLmNsb25lKCksZT0wLGk9MDtmb3IoO2U8dC5yb3dzJiZpPHQuY29sdW1uczspe2xldCByPWU7Zm9yKGxldCBvPWU7bzx0LnJvd3M7bysrKXQuZ2V0KG8saSk+dC5nZXQocixpKSYmKHI9byk7aWYoMD09PXQuZ2V0KHIsaSkpaSsrO2Vsc2V7dC5zd2FwUm93cyhlLHIpO2xldCBvPXQuZ2V0KGUsaSk7Zm9yKGxldCBzPWk7czx0LmNvbHVtbnM7cysrKXQuc2V0KGUscyx0LmdldChlLHMpL28pO2ZvcihsZXQgcz1lKzE7czx0LnJvd3M7cysrKXtsZXQgYT10LmdldChzLGkpL3QuZ2V0KGUsaSk7dC5zZXQocyxpLDApO2ZvcihsZXQgbD1pKzE7bDx0LmNvbHVtbnM7bCsrKXQuc2V0KHMsbCx0LmdldChzLGwpLXQuZ2V0KGUsbCkqYSl9ZSsrLGkrK319cmV0dXJuIHR9cmVkdWNlZEVjaGVsb25Gb3JtKCl7bGV0IHQ9dGhpcy5lY2hlbG9uRm9ybSgpLGU9dC5jb2x1bW5zLGk9dC5yb3dzLHI9aS0xO2Zvcig7cj49MDspaWYoMD09PXQubWF4Um93KHIpKXItLTtlbHNle2xldCBvPTAscz0hMTtmb3IoO288aSYmITE9PT1zOykxPT09dC5nZXQocixvKT9zPSEwOm8rKztmb3IobGV0IGE9MDthPHI7YSsrKXtsZXQgbD10LmdldChhLG8pO2ZvcihsZXQgYz1vO2M8ZTtjKyspe2xldCB1PXQuZ2V0KGEsYyktbCp0LmdldChyLGMpO3Quc2V0KGEsYyx1KX19ci0tfXJldHVybiB0fXNldCgpe3Rocm93IG5ldyBFcnJvcigic2V0IG1ldGhvZCBpcyB1bmltcGxlbWVudGVkIil9Z2V0KCl7dGhyb3cgbmV3IEVycm9yKCJnZXQgbWV0aG9kIGlzIHVuaW1wbGVtZW50ZWQiKX1yZXBlYXQodD17fSl7aWYoIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtsZXR7cm93czplPTEsY29sdW1uczppPTF9PXQ7aWYoIU51bWJlci5pc0ludGVnZXIoZSl8fGU8PTApdGhyb3cgbmV3IFR5cGVFcnJvcigicm93cyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGkpfHxpPD0wKXRocm93IG5ldyBUeXBlRXJyb3IoImNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTtsZXQgcj1uZXcgcm4odGhpcy5yb3dzKmUsdGhpcy5jb2x1bW5zKmkpO2ZvcihsZXQgbz0wO288ZTtvKyspZm9yKGxldCBzPTA7czxpO3MrKylyLnNldFN1Yk1hdHJpeCh0aGlzLHRoaXMucm93cypvLHRoaXMuY29sdW1ucypzKTtyZXR1cm4gcn1maWxsKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHQpO3JldHVybiB0aGlzfW5lZygpe3JldHVybiB0aGlzLm11bFMoLTEpfWdldFJvdyh0KXtnYyh0aGlzLHQpO2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyllLnB1c2godGhpcy5nZXQodCxpKSk7cmV0dXJuIGV9Z2V0Um93VmVjdG9yKHQpe3JldHVybiBybi5yb3dWZWN0b3IodGhpcy5nZXRSb3codCkpfXNldFJvdyh0LGUpe2djKHRoaXMsdCksZT1uMCh0aGlzLGUpO2ZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyl0aGlzLnNldCh0LGksZVtpXSk7cmV0dXJuIHRoaXN9c3dhcFJvd3ModCxlKXtnYyh0aGlzLHQpLGdjKHRoaXMsZSk7Zm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXtsZXQgcj10aGlzLmdldCh0LGkpO3RoaXMuc2V0KHQsaSx0aGlzLmdldChlLGkpKSx0aGlzLnNldChlLGkscil9cmV0dXJuIHRoaXN9Z2V0Q29sdW1uKHQpe19jKHRoaXMsdCk7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWUucHVzaCh0aGlzLmdldChpLHQpKTtyZXR1cm4gZX1nZXRDb2x1bW5WZWN0b3IodCl7cmV0dXJuIHJuLmNvbHVtblZlY3Rvcih0aGlzLmdldENvbHVtbih0KSl9c2V0Q29sdW1uKHQsZSl7X2ModGhpcyx0KSxlPWkwKHRoaXMsZSk7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKXRoaXMuc2V0KGksdCxlW2ldKTtyZXR1cm4gdGhpc31zd2FwQ29sdW1ucyh0LGUpe19jKHRoaXMsdCksX2ModGhpcyxlKTtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspe2xldCByPXRoaXMuZ2V0KGksdCk7dGhpcy5zZXQoaSx0LHRoaXMuZ2V0KGksZSkpLHRoaXMuc2V0KGksZSxyKX1yZXR1cm4gdGhpc31hZGRSb3dWZWN0b3IodCl7dD1uMCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkrdFtpXSk7cmV0dXJuIHRoaXN9c3ViUm93VmVjdG9yKHQpe3Q9bjAodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUsaSx0aGlzLmdldChlLGkpLXRbaV0pO3JldHVybiB0aGlzfW11bFJvd1ZlY3Rvcih0KXt0PW4wKHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyl0aGlzLnNldChlLGksdGhpcy5nZXQoZSxpKSp0W2ldKTtyZXR1cm4gdGhpc31kaXZSb3dWZWN0b3IodCl7dD1uMCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkvdFtpXSk7cmV0dXJuIHRoaXN9YWRkQ29sdW1uVmVjdG9yKHQpe3Q9aTAodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUsaSx0aGlzLmdldChlLGkpK3RbZV0pO3JldHVybiB0aGlzfXN1YkNvbHVtblZlY3Rvcih0KXt0PWkwKHRoaXMsdCk7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8dGhpcy5jb2x1bW5zO2krKyl0aGlzLnNldChlLGksdGhpcy5nZXQoZSxpKS10W2VdKTtyZXR1cm4gdGhpc31tdWxDb2x1bW5WZWN0b3IodCl7dD1pMCh0aGlzLHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkqdFtlXSk7cmV0dXJuIHRoaXN9ZGl2Q29sdW1uVmVjdG9yKHQpe3Q9aTAodGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KGUsaSx0aGlzLmdldChlLGkpL3RbZV0pO3JldHVybiB0aGlzfW11bFJvdyh0LGUpe2djKHRoaXMsdCk7Zm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuc2V0KHQsaSx0aGlzLmdldCh0LGkpKmUpO3JldHVybiB0aGlzfW11bENvbHVtbih0LGUpe19jKHRoaXMsdCk7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKXRoaXMuc2V0KGksdCx0aGlzLmdldChpLHQpKmUpO3JldHVybiB0aGlzfW1heCgpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IHQ9dGhpcy5nZXQoMCwwKTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspZm9yKGxldCBpPTA7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuZ2V0KGUsaSk+dCYmKHQ9dGhpcy5nZXQoZSxpKSk7cmV0dXJuIHR9bWF4SW5kZXgoKXtyMCh0aGlzKTtsZXQgdD10aGlzLmdldCgwLDApLGU9WzAsMF07Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLmdldChpLHIpPnQmJih0PXRoaXMuZ2V0KGksciksZVswXT1pLGVbMV09cik7cmV0dXJuIGV9bWluKCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgdD10aGlzLmdldCgwLDApO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5nZXQoZSxpKTx0JiYodD10aGlzLmdldChlLGkpKTtyZXR1cm4gdH1taW5JbmRleCgpe3IwKHRoaXMpO2xldCB0PXRoaXMuZ2V0KDAsMCksZT1bMCwwXTtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuZ2V0KGkscik8dCYmKHQ9dGhpcy5nZXQoaSxyKSxlWzBdPWksZVsxXT1yKTtyZXR1cm4gZX1tYXhSb3codCl7aWYoZ2ModGhpcyx0KSx0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCBlPXRoaXMuZ2V0KHQsMCk7Zm9yKGxldCBpPTE7aTx0aGlzLmNvbHVtbnM7aSsrKXRoaXMuZ2V0KHQsaSk+ZSYmKGU9dGhpcy5nZXQodCxpKSk7cmV0dXJuIGV9bWF4Um93SW5kZXgodCl7Z2ModGhpcyx0KSxyMCh0aGlzKTtsZXQgZT10aGlzLmdldCh0LDApLGk9W3QsMF07Zm9yKGxldCByPTE7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuZ2V0KHQscik+ZSYmKGU9dGhpcy5nZXQodCxyKSxpWzFdPXIpO3JldHVybiBpfW1pblJvdyh0KXtpZihnYyh0aGlzLHQpLHRoaXMuaXNFbXB0eSgpKXJldHVybiBOYU47bGV0IGU9dGhpcy5nZXQodCwwKTtmb3IobGV0IGk9MTtpPHRoaXMuY29sdW1ucztpKyspdGhpcy5nZXQodCxpKTxlJiYoZT10aGlzLmdldCh0LGkpKTtyZXR1cm4gZX1taW5Sb3dJbmRleCh0KXtnYyh0aGlzLHQpLHIwKHRoaXMpO2xldCBlPXRoaXMuZ2V0KHQsMCksaT1bdCwwXTtmb3IobGV0IHI9MTtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5nZXQodCxyKTxlJiYoZT10aGlzLmdldCh0LHIpLGlbMV09cik7cmV0dXJuIGl9bWF4Q29sdW1uKHQpe2lmKF9jKHRoaXMsdCksdGhpcy5pc0VtcHR5KCkpcmV0dXJuIE5hTjtsZXQgZT10aGlzLmdldCgwLHQpO2ZvcihsZXQgaT0xO2k8dGhpcy5yb3dzO2krKyl0aGlzLmdldChpLHQpPmUmJihlPXRoaXMuZ2V0KGksdCkpO3JldHVybiBlfW1heENvbHVtbkluZGV4KHQpe19jKHRoaXMsdCkscjAodGhpcyk7bGV0IGU9dGhpcy5nZXQoMCx0KSxpPVswLHRdO2ZvcihsZXQgcj0xO3I8dGhpcy5yb3dzO3IrKyl0aGlzLmdldChyLHQpPmUmJihlPXRoaXMuZ2V0KHIsdCksaVswXT1yKTtyZXR1cm4gaX1taW5Db2x1bW4odCl7aWYoX2ModGhpcyx0KSx0aGlzLmlzRW1wdHkoKSlyZXR1cm4gTmFOO2xldCBlPXRoaXMuZ2V0KDAsdCk7Zm9yKGxldCBpPTE7aTx0aGlzLnJvd3M7aSsrKXRoaXMuZ2V0KGksdCk8ZSYmKGU9dGhpcy5nZXQoaSx0KSk7cmV0dXJuIGV9bWluQ29sdW1uSW5kZXgodCl7X2ModGhpcyx0KSxyMCh0aGlzKTtsZXQgZT10aGlzLmdldCgwLHQpLGk9WzAsdF07Zm9yKGxldCByPTE7cjx0aGlzLnJvd3M7cisrKXRoaXMuZ2V0KHIsdCk8ZSYmKGU9dGhpcy5nZXQocix0KSxpWzBdPXIpO3JldHVybiBpfWRpYWcoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPVtdO2ZvcihsZXQgaT0wO2k8dDtpKyspZS5wdXNoKHRoaXMuZ2V0KGksaSkpO3JldHVybiBlfW5vcm0odD0iZnJvYmVuaXVzIil7bGV0IGU9MDtpZigibWF4Ij09PXQpcmV0dXJuIHRoaXMubWF4KCk7aWYoImZyb2Jlbml1cyI9PT10KXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKWUrPXRoaXMuZ2V0KGkscikqdGhpcy5nZXQoaSxyKTtyZXR1cm4gTWF0aC5zcXJ0KGUpfXRocm93IG5ldyBSYW5nZUVycm9yKGB1bmtub3duIG5vcm0gdHlwZTogJHt0fWApfWN1bXVsYXRpdmVTdW0oKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdCs9dGhpcy5nZXQoZSxpKSx0aGlzLnNldChlLGksdCk7cmV0dXJuIHRoaXN9ZG90KHQpe3RpLmlzTWF0cml4KHQpJiYodD10LnRvMURBcnJheSgpKTtsZXQgZT10aGlzLnRvMURBcnJheSgpO2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInZlY3RvcnMgZG8gbm90IGhhdmUgdGhlIHNhbWUgc2l6ZSIpO2xldCBpPTA7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspaSs9ZVtyXSp0W3JdO3JldHVybiBpfW1tdWwodCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLnJvd3MsaT10aGlzLmNvbHVtbnMscj10LmNvbHVtbnMsbz1uZXcgcm4oZSxyKSxzPW5ldyBGbG9hdDY0QXJyYXkoaSk7Zm9yKGxldCBhPTA7YTxyO2ErKyl7Zm9yKGxldCBsPTA7bDxpO2wrKylzW2xdPXQuZ2V0KGwsYSk7Zm9yKGxldCBsPTA7bDxlO2wrKyl7bGV0IGM9MDtmb3IobGV0IHU9MDt1PGk7dSsrKWMrPXRoaXMuZ2V0KGwsdSkqc1t1XTtvLnNldChsLGEsYyl9fXJldHVybiBvfXN0cmFzc2VuMngyKHQpe3Q9cm4uY2hlY2tNYXRyaXgodCk7bGV0IGU9bmV3IHJuKDIsMiksaT10aGlzLmdldCgwLDApLHI9dC5nZXQoMCwwKSxvPXRoaXMuZ2V0KDAsMSkscz10LmdldCgwLDEpLGE9dGhpcy5nZXQoMSwwKSxsPXQuZ2V0KDEsMCksYz10aGlzLmdldCgxLDEpLHU9dC5nZXQoMSwxKSxkPShpK2MpKihyK3UpLHA9KGErYykqcixoPWkqKHMtdSksZj1jKihsLXIpLG09KGkrbykqdSxEPWgrbSxUPXArZixrPWQtcCtoKyhhLWkpKihyK3MpO3JldHVybiBlLnNldCgwLDAsZCtmLW0rKG8tYykqKGwrdSkpLGUuc2V0KDAsMSxEKSxlLnNldCgxLDAsVCksZS5zZXQoMSwxLGspLGV9c3RyYXNzZW4zeDModCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT1uZXcgcm4oMywzKSxpPXRoaXMuZ2V0KDAsMCkscj10aGlzLmdldCgwLDEpLG89dGhpcy5nZXQoMCwyKSxzPXRoaXMuZ2V0KDEsMCksYT10aGlzLmdldCgxLDEpLGw9dGhpcy5nZXQoMSwyKSxjPXRoaXMuZ2V0KDIsMCksdT10aGlzLmdldCgyLDEpLGQ9dGhpcy5nZXQoMiwyKSxwPXQuZ2V0KDAsMCksaD10LmdldCgwLDEpLGY9dC5nZXQoMCwyKSxtPXQuZ2V0KDEsMCkseD10LmdldCgxLDEpLGc9dC5nZXQoMSwyKSxiPXQuZ2V0KDIsMCksRD10LmdldCgyLDEpLFQ9dC5nZXQoMiwyKSxaPShpLXMpKigtaCt4KSxmZT0oLWkrcythKSoocC1oK3gpLHVlPShzK2EpKigtcCtoKSxoZT1pKnAsdz0oLWkrYyt1KSoocC1mK2cpLEY9KC1pK2MpKihmLWcpLHE9KGMrdSkqKC1wK2YpLFk9KC1vK3UrZCkqKHgrYi1EKSxhZT0oby1kKSooeC1EKSxsZT1vKmIsSWU9KHUrZCkqKC1iK0QpLHZlPSgtbythK2wpKihnK2ItVCksRGU9KG8tbCkqKGctVCksbnQ9KGErbCkqKC1iK1QpLFRlPShpK3Irby1zLWEtdS1kKSp4K2ZlK3VlK2hlK1krbGUrSWUseHQ9aGUrdytxKyhpK3Irby1hLWwtYy11KSpnK2xlK3ZlK250LG10PVorYSooLXAraCttLXgtZy1iK1QpK2ZlK2hlK2xlK3ZlK0RlLGNlPVorZmUrdWUraGUrbCpELGR0PWxlK3ZlK0RlK250K3MqZixXZT1oZSt3K0YrdSooLXArZittLXgtZy1iK0QpK1krYWUrbGUsTXQ9WSthZStsZStJZStjKmgsYnQ9aGUrdytGK3ErZCpUO3JldHVybiBlLnNldCgwLDAsaGUrbGUrciptKSxlLnNldCgwLDEsVGUpLGUuc2V0KDAsMix4dCksZS5zZXQoMSwwLG10KSxlLnNldCgxLDEsY2UpLGUuc2V0KDEsMixkdCksZS5zZXQoMiwwLFdlKSxlLnNldCgyLDEsTXQpLGUuc2V0KDIsMixidCksZX1tbXVsU3RyYXNzZW4odCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLmNsb25lKCksaT1lLnJvd3Mscj1lLmNvbHVtbnMsbz10LnJvd3Mscz10LmNvbHVtbnM7ZnVuY3Rpb24gYShkLHAsaCl7aWYoZC5yb3dzPT09cCYmZC5jb2x1bW5zPT09aClyZXR1cm4gZDt7bGV0IHg9dGkuemVyb3MocCxoKTtyZXR1cm4geD14LnNldFN1Yk1hdHJpeChkLDAsMCkseH19ciE9PW8mJmNvbnNvbGUud2FybihgTXVsdGlwbHlpbmcgJHtpfSB4ICR7cn0gYW5kICR7b30geCAke3N9IG1hdHJpeDogZGltZW5zaW9ucyBkbyBub3QgbWF0Y2guYCk7bGV0IGw9TWF0aC5tYXgoaSxvKSxjPU1hdGgubWF4KHIscyk7cmV0dXJuIGU9YShlLGwsYyksZnVuY3Rpb24gdShkLHAsaCxmKXtpZihoPD01MTJ8fGY8PTUxMilyZXR1cm4gZC5tbXVsKHApO2glMj09MSYmZiUyPT0xPyhkPWEoZCxoKzEsZisxKSxwPWEocCxoKzEsZisxKSk6aCUyPT0xPyhkPWEoZCxoKzEsZikscD1hKHAsaCsxLGYpKTpmJTI9PTEmJihkPWEoZCxoLGYrMSkscD1hKHAsaCxmKzEpKTtsZXQgbT1wYXJzZUludChkLnJvd3MvMiwxMCkseD1wYXJzZUludChkLmNvbHVtbnMvMiwxMCksZz1kLnN1Yk1hdHJpeCgwLG0tMSwwLHgtMSksYj1wLnN1Yk1hdHJpeCgwLG0tMSwwLHgtMSksRD1kLnN1Yk1hdHJpeCgwLG0tMSx4LGQuY29sdW1ucy0xKSxUPXAuc3ViTWF0cml4KDAsbS0xLHgscC5jb2x1bW5zLTEpLGs9ZC5zdWJNYXRyaXgobSxkLnJvd3MtMSwwLHgtMSksWj1wLnN1Yk1hdHJpeChtLHAucm93cy0xLDAseC0xKSx6PWQuc3ViTWF0cml4KG0sZC5yb3dzLTEseCxkLmNvbHVtbnMtMSksZmU9cC5zdWJNYXRyaXgobSxwLnJvd3MtMSx4LHAuY29sdW1ucy0xKSx1ZT11KHRpLmFkZChnLHopLHRpLmFkZChiLGZlKSxtLHgpLGhlPXUodGkuYWRkKGsseiksYixtLHgpLHc9dShnLHRpLnN1YihULGZlKSxtLHgpLEY9dSh6LHRpLnN1YihaLGIpLG0seCkscT11KHRpLmFkZChnLEQpLGZlLG0seCksSz11KHRpLnN1YihrLGcpLHRpLmFkZChiLFQpLG0seCksZGU9dSh0aS5zdWIoRCx6KSx0aS5hZGQoWixmZSksbSx4KSxZPXRpLmFkZCh1ZSxGKTtZLnN1YihxKSxZLmFkZChkZSk7bGV0IGFlPXRpLmFkZCh3LHEpLGxlPXRpLmFkZChoZSxGKSxJZT10aS5zdWIodWUsaGUpO0llLmFkZCh3KSxJZS5hZGQoSyk7bGV0IHZlPXRpLnplcm9zKDIqWS5yb3dzLDIqWS5jb2x1bW5zKTtyZXR1cm4gdmU9dmUuc2V0U3ViTWF0cml4KFksMCwwKSx2ZT12ZS5zZXRTdWJNYXRyaXgoYWUsWS5yb3dzLDApLHZlPXZlLnNldFN1Yk1hdHJpeChsZSwwLFkuY29sdW1ucyksdmU9dmUuc2V0U3ViTWF0cml4KEllLFkucm93cyxZLmNvbHVtbnMpLHZlLnN1Yk1hdHJpeCgwLGgtMSwwLGYtMSl9KGUsdD1hKHQsbCxjKSxsLGMpfXNjYWxlUm93cyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHttaW46ZT0wLG1heDppPTF9PXQ7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKCFOdW1iZXIuaXNGaW5pdGUoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYSBudW1iZXIiKTtpZihlPj1pKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IHI9bmV3IHJuKHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgbz0wO288dGhpcy5yb3dzO28rKyl7bGV0IHM9dGhpcy5nZXRSb3cobyk7cy5sZW5ndGg+MCYmcjYocyx7bWluOmUsbWF4Omksb3V0cHV0OnN9KSxyLnNldFJvdyhvLHMpfXJldHVybiByfXNjYWxlQ29sdW1ucyh0PXt9KXtpZigib2JqZWN0IiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHttaW46ZT0wLG1heDppPTF9PXQ7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtaW4gbXVzdCBiZSBhIG51bWJlciIpO2lmKCFOdW1iZXIuaXNGaW5pdGUoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigibWF4IG11c3QgYmUgYSBudW1iZXIiKTtpZihlPj1pKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaW4gbXVzdCBiZSBzbWFsbGVyIHRoYW4gbWF4Iik7bGV0IHI9bmV3IHJuKHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl7bGV0IHM9dGhpcy5nZXRDb2x1bW4obyk7cy5sZW5ndGgmJnI2KHMse21pbjplLG1heDppLG91dHB1dDpzfSksci5zZXRDb2x1bW4obyxzKX1yZXR1cm4gcn1mbGlwUm93cygpe2xldCB0PU1hdGguY2VpbCh0aGlzLmNvbHVtbnMvMik7Zm9yKGxldCBlPTA7ZTx0aGlzLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8dDtpKyspe2xldCByPXRoaXMuZ2V0KGUsaSksbz10aGlzLmdldChlLHRoaXMuY29sdW1ucy0xLWkpO3RoaXMuc2V0KGUsaSxvKSx0aGlzLnNldChlLHRoaXMuY29sdW1ucy0xLWkscil9cmV0dXJuIHRoaXN9ZmxpcENvbHVtbnMoKXtsZXQgdD1NYXRoLmNlaWwodGhpcy5yb3dzLzIpO2ZvcihsZXQgZT0wO2U8dGhpcy5jb2x1bW5zO2UrKylmb3IobGV0IGk9MDtpPHQ7aSsrKXtsZXQgcj10aGlzLmdldChpLGUpLG89dGhpcy5nZXQodGhpcy5yb3dzLTEtaSxlKTt0aGlzLnNldChpLGUsbyksdGhpcy5zZXQodGhpcy5yb3dzLTEtaSxlLHIpfXJldHVybiB0aGlzfWtyb25lY2tlclByb2R1Y3QodCl7dD1ybi5jaGVja01hdHJpeCh0KTtsZXQgZT10aGlzLnJvd3MsaT10aGlzLmNvbHVtbnMscj10LnJvd3Msbz10LmNvbHVtbnMscz1uZXcgcm4oZSpyLGkqbyk7Zm9yKGxldCBhPTA7YTxlO2ErKylmb3IobGV0IGw9MDtsPGk7bCsrKWZvcihsZXQgYz0wO2M8cjtjKyspZm9yKGxldCB1PTA7dTxvO3UrKylzLnNldChyKmErYyxvKmwrdSx0aGlzLmdldChhLGwpKnQuZ2V0KGMsdSkpO3JldHVybiBzfWtyb25lY2tlclN1bSh0KXtpZih0PXJuLmNoZWNrTWF0cml4KHQpLCF0aGlzLmlzU3F1YXJlKCl8fCF0LmlzU3F1YXJlKCkpdGhyb3cgbmV3IEVycm9yKCJLcm9uZWNrZXIgU3VtIG5lZWRzIHR3byBTcXVhcmUgTWF0cmljZXMiKTtsZXQgZT10aGlzLnJvd3MsaT10LnJvd3Mscj10aGlzLmtyb25lY2tlclByb2R1Y3Qocm4uZXllKGksaSkpLG89cm4uZXllKGUsZSkua3JvbmVja2VyUHJvZHVjdCh0KTtyZXR1cm4gci5hZGQobyl9dHJhbnNwb3NlKCl7bGV0IHQ9bmV3IHJuKHRoaXMuY29sdW1ucyx0aGlzLnJvd3MpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdC5zZXQoaSxlLHRoaXMuZ2V0KGUsaSkpO3JldHVybiB0fXNvcnRSb3dzKHQ9RGZlKXtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspdGhpcy5zZXRSb3coZSx0aGlzLmdldFJvdyhlKS5zb3J0KHQpKTtyZXR1cm4gdGhpc31zb3J0Q29sdW1ucyh0PURmZSl7Zm9yKGxldCBlPTA7ZTx0aGlzLmNvbHVtbnM7ZSsrKXRoaXMuc2V0Q29sdW1uKGUsdGhpcy5nZXRDb2x1bW4oZSkuc29ydCh0KSk7cmV0dXJuIHRoaXN9c3ViTWF0cml4KHQsZSxpLHIpe3M2KHRoaXMsdCxlLGkscik7bGV0IG89bmV3IHJuKGUtdCsxLHItaSsxKTtmb3IobGV0IHM9dDtzPD1lO3MrKylmb3IobGV0IGE9aTthPD1yO2ErKylvLnNldChzLXQsYS1pLHRoaXMuZ2V0KHMsYSkpO3JldHVybiBvfXN1Yk1hdHJpeFJvdyh0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09aSYmKGk9dGhpcy5jb2x1bW5zLTEpLGU+aXx8ZTwwfHxlPj10aGlzLmNvbHVtbnN8fGk8MHx8aT49dGhpcy5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTtsZXQgcj1uZXcgcm4odC5sZW5ndGgsaS1lKzEpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKWZvcihsZXQgcz1lO3M8PWk7cysrKXtpZih0W29dPDB8fHRbb10+PXRoaXMucm93cyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgUm93IGluZGV4IG91dCBvZiByYW5nZTogJHt0W29dfWApO3Iuc2V0KG8scy1lLHRoaXMuZ2V0KHRbb10scykpfXJldHVybiByfXN1Yk1hdHJpeENvbHVtbih0LGUsaSl7aWYodm9pZCAwPT09ZSYmKGU9MCksdm9pZCAwPT09aSYmKGk9dGhpcy5yb3dzLTEpLGU+aXx8ZTwwfHxlPj10aGlzLnJvd3N8fGk8MHx8aT49dGhpcy5yb3dzKXRocm93IG5ldyBSYW5nZUVycm9yKCJBcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTtsZXQgcj1uZXcgcm4oaS1lKzEsdC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKWZvcihsZXQgcz1lO3M8PWk7cysrKXtpZih0W29dPDB8fHRbb10+PXRoaXMuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ29sdW1uIGluZGV4IG91dCBvZiByYW5nZTogJHt0W29dfWApO3Iuc2V0KHMtZSxvLHRoaXMuZ2V0KHMsdFtvXSkpfXJldHVybiByfXNldFN1Yk1hdHJpeCh0LGUsaSl7aWYoKHQ9cm4uY2hlY2tNYXRyaXgodCkpLmlzRW1wdHkoKSlyZXR1cm4gdGhpcztzNih0aGlzLGUsZSt0LnJvd3MtMSxpLGkrdC5jb2x1bW5zLTEpO2ZvcihsZXQgcz0wO3M8dC5yb3dzO3MrKylmb3IobGV0IGE9MDthPHQuY29sdW1uczthKyspdGhpcy5zZXQoZStzLGkrYSx0LmdldChzLGEpKTtyZXR1cm4gdGhpc31zZWxlY3Rpb24odCxlKXtsZXQgaT1mdW5jdGlvbihuLHQsZSl7cmV0dXJue3JvdzprJGUobix0KSxjb2x1bW46RiRlKG4sZSl9fSh0aGlzLHQsZSkscj1uZXcgcm4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihsZXQgbz0wO288aS5yb3cubGVuZ3RoO28rKyl7bGV0IHM9aS5yb3dbb107Zm9yKGxldCBhPTA7YTxpLmNvbHVtbi5sZW5ndGg7YSsrKXIuc2V0KG8sYSx0aGlzLmdldChzLGkuY29sdW1uW2FdKSl9cmV0dXJuIHJ9dHJhY2UoKXtsZXQgdD1NYXRoLm1pbih0aGlzLnJvd3MsdGhpcy5jb2x1bW5zKSxlPTA7Zm9yKGxldCBpPTA7aTx0O2krKyllKz10aGlzLmdldChpLGkpO3JldHVybiBlfWNsb25lKCl7bGV0IHQ9bmV3IHJuKHRoaXMucm93cyx0aGlzLmNvbHVtbnMpO2ZvcihsZXQgZT0wO2U8dGhpcy5yb3dzO2UrKylmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspdC5zZXQoZSxpLHRoaXMuZ2V0KGUsaSkpO3JldHVybiB0fXN1bSh0KXtzd2l0Y2godCl7Y2FzZSJyb3ciOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1URShuLnJvd3MpO2ZvcihsZXQgZT0wO2U8bi5yb3dzOysrZSlmb3IobGV0IGk9MDtpPG4uY29sdW1uczsrK2kpdFtlXSs9bi5nZXQoZSxpKTtyZXR1cm4gdH0odGhpcyk7Y2FzZSJjb2x1bW4iOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1URShuLmNvbHVtbnMpO2ZvcihsZXQgZT0wO2U8bi5yb3dzOysrZSlmb3IobGV0IGk9MDtpPG4uY29sdW1uczsrK2kpdFtpXSs9bi5nZXQoZSxpKTtyZXR1cm4gdH0odGhpcyk7Y2FzZSB2b2lkIDA6cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PTA7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zO2krKyl0Kz1uLmdldChlLGkpO3JldHVybiB0fSh0aGlzKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19cHJvZHVjdCh0KXtzd2l0Y2godCl7Y2FzZSJyb3ciOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD1URShuLnJvd3MsMSk7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7KytlKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zOysraSl0W2VdKj1uLmdldChlLGkpO3JldHVybiB0fSh0aGlzKTtjYXNlImNvbHVtbiI6cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PVRFKG4uY29sdW1ucywxKTtmb3IobGV0IGU9MDtlPG4ucm93czsrK2UpZm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7KytpKXRbaV0qPW4uZ2V0KGUsaSk7cmV0dXJuIHR9KHRoaXMpO2Nhc2Ugdm9pZCAwOnJldHVybiBmdW5jdGlvbihuKXtsZXQgdD0xO2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKylmb3IobGV0IGk9MDtpPG4uY29sdW1ucztpKyspdCo9bi5nZXQoZSxpKTtyZXR1cm4gdH0odGhpcyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3B0aW9uOiAke3R9YCl9fW1lYW4odCl7bGV0IGU9dGhpcy5zdW0odCk7c3dpdGNoKHQpe2Nhc2Uicm93Ijpmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZVtpXS89dGhpcy5jb2x1bW5zO3JldHVybiBlO2Nhc2UiY29sdW1uIjpmb3IobGV0IGk9MDtpPHRoaXMuY29sdW1ucztpKyspZVtpXS89dGhpcy5yb3dzO3JldHVybiBlO2Nhc2Ugdm9pZCAwOnJldHVybiBlL3RoaXMuc2l6ZTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19dmFyaWFuY2UodCxlPXt9KXtpZigib2JqZWN0Ij09dHlwZW9mIHQmJihlPXQsdD12b2lkIDApLCJvYmplY3QiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iik7bGV0e3VuYmlhc2VkOmk9ITAsbWVhbjpyPXRoaXMubWVhbih0KX09ZTtpZigiYm9vbGVhbiIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoInVuYmlhc2VkIG11c3QgYmUgYSBib29sZWFuIik7c3dpdGNoKHQpe2Nhc2Uicm93IjppZighQXJyYXkuaXNBcnJheShyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJtZWFuIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPW4ucm93cyxyPW4uY29sdW1ucyxvPVtdO2ZvcihsZXQgcz0wO3M8aTtzKyspe2xldCBhPTAsbD0wLGM9MDtmb3IobGV0IHU9MDt1PHI7dSsrKWM9bi5nZXQocyx1KS1lW3NdLGErPWMsbCs9YypjO28ucHVzaCh0PyhsLWEqYS9yKS8oci0xKToobC1hKmEvcikvcil9cmV0dXJuIG99KHRoaXMsaSxyKTtjYXNlImNvbHVtbiI6aWYoIUFycmF5LmlzQXJyYXkocikpdGhyb3cgbmV3IFR5cGVFcnJvcigibWVhbiBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLnJvd3Mscj1uLmNvbHVtbnMsbz1bXTtmb3IobGV0IHM9MDtzPHI7cysrKXtsZXQgYT0wLGw9MCxjPTA7Zm9yKGxldCB1PTA7dTxpO3UrKyljPW4uZ2V0KHUscyktZVtzXSxhKz1jLGwrPWMqYztvLnB1c2godD8obC1hKmEvaSkvKGktMSk6KGwtYSphL2kpL2kpfXJldHVybiBvfSh0aGlzLGkscik7Y2FzZSB2b2lkIDA6aWYoIm51bWJlciIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoIm1lYW4gbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5yb3dzLHI9bi5jb2x1bW5zLG89aSpyLHM9MCxhPTAsbD0wO2ZvcihsZXQgYz0wO2M8aTtjKyspZm9yKGxldCB1PTA7dTxyO3UrKylsPW4uZ2V0KGMsdSktZSxzKz1sLGErPWwqbDtyZXR1cm4gdD8oYS1zKnMvbykvKG8tMSk6KGEtcypzL28pL299KHRoaXMsaSxyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19c3RhbmRhcmREZXZpYXRpb24odCxlKXsib2JqZWN0Ij09dHlwZW9mIHQmJihlPXQsdD12b2lkIDApO2xldCBpPXRoaXMudmFyaWFuY2UodCxlKTtpZih2b2lkIDA9PT10KXJldHVybiBNYXRoLnNxcnQoaSk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT1NYXRoLnNxcnQoaVtyXSk7cmV0dXJuIGl9Y2VudGVyKHQsZT17fSl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYoZT10LHQ9dm9pZCAwKSwib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIpO2xldHtjZW50ZXI6aT10aGlzLm1lYW4odCl9PWU7c3dpdGNoKHQpe2Nhc2Uicm93IjppZighQXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjZW50ZXIgbXVzdCBiZSBhbiBhcnJheSIpO3JldHVybiBmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKylmb3IobGV0IGk9MDtpPG4uY29sdW1ucztpKyspbi5zZXQoZSxpLG4uZ2V0KGUsaSktdFtlXSl9KHRoaXMsaSksdGhpcztjYXNlImNvbHVtbiI6aWYoIUFycmF5LmlzQXJyYXkoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2VudGVyIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4ucm93cztlKyspZm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7aSsrKW4uc2V0KGUsaSxuLmdldChlLGkpLXRbaV0pfSh0aGlzLGkpLHRoaXM7Y2FzZSB2b2lkIDA6aWYoIm51bWJlciIhPXR5cGVvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoImNlbnRlciBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zO2krKyluLnNldChlLGksbi5nZXQoZSxpKS10KX0odGhpcyxpKSx0aGlzO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wdGlvbjogJHt0fWApfX1zY2FsZSh0LGU9e30pe2lmKCJvYmplY3QiPT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCksIm9iamVjdCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiKTtsZXQgaT1lLnNjYWxlO3N3aXRjaCh0KXtjYXNlInJvdyI6aWYodm9pZCAwPT09aSlpPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKyl7bGV0IGk9MDtmb3IobGV0IHI9MDtyPG4uY29sdW1ucztyKyspaSs9TWF0aC5wb3cobi5nZXQoZSxyKSwyKS8obi5jb2x1bW5zLTEpO3QucHVzaChNYXRoLnNxcnQoaSkpfXJldHVybiB0fSh0aGlzKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGkpKXRocm93IG5ldyBUeXBlRXJyb3IoInNjYWxlIG11c3QgYmUgYW4gYXJyYXkiKTtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPG4ucm93cztlKyspZm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7aSsrKW4uc2V0KGUsaSxuLmdldChlLGkpL3RbZV0pfSh0aGlzLGkpLHRoaXM7Y2FzZSJjb2x1bW4iOmlmKHZvaWQgMD09PWkpaT1mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPG4uY29sdW1ucztlKyspe2xldCBpPTA7Zm9yKGxldCByPTA7cjxuLnJvd3M7cisrKWkrPU1hdGgucG93KG4uZ2V0KHIsZSksMikvKG4ucm93cy0xKTt0LnB1c2goTWF0aC5zcXJ0KGkpKX1yZXR1cm4gdH0odGhpcyk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShpKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzY2FsZSBtdXN0IGJlIGFuIGFycmF5Iik7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLnJvd3M7ZSsrKWZvcihsZXQgaT0wO2k8bi5jb2x1bW5zO2krKyluLnNldChlLGksbi5nZXQoZSxpKS90W2ldKX0odGhpcyxpKSx0aGlzO2Nhc2Ugdm9pZCAwOmlmKHZvaWQgMD09PWkpaT1mdW5jdGlvbihuKXtsZXQgdD1uLnNpemUtMSxlPTA7Zm9yKGxldCBpPTA7aTxuLmNvbHVtbnM7aSsrKWZvcihsZXQgcj0wO3I8bi5yb3dzO3IrKyllKz1NYXRoLnBvdyhuLmdldChyLGkpLDIpL3Q7cmV0dXJuIE1hdGguc3FydChlKX0odGhpcyk7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcigic2NhbGUgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0wO2U8bi5yb3dzO2UrKylmb3IobGV0IGk9MDtpPG4uY29sdW1ucztpKyspbi5zZXQoZSxpLG4uZ2V0KGUsaSkvdCl9KHRoaXMsaSksdGhpcztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcHRpb246ICR7dH1gKX19dG9TdHJpbmcodCl7cmV0dXJuIG82KHRoaXMsdCl9fSx0aS5wcm90b3R5cGUua2xhc3M9Ik1hdHJpeCIsdHlwZW9mIFN5bWJvbDwidSImJih0aS5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09cmZlKSx0aS5yYW5kb209dGkucmFuZCx0aS5yYW5kb21JbnQ9dGkucmFuZEludCx0aS5kaWFnb25hbD10aS5kaWFnLHRpLnByb3RvdHlwZS5kaWFnb25hbD10aS5wcm90b3R5cGUuZGlhZyx0aS5pZGVudGl0eT10aS5leWUsdGkucHJvdG90eXBlLm5lZ2F0ZT10aS5wcm90b3R5cGUubmVnLHRpLnByb3RvdHlwZS50ZW5zb3JQcm9kdWN0PXRpLnByb3RvdHlwZS5rcm9uZWNrZXJQcm9kdWN0LHJuPWNsYXNzIGV4dGVuZHMgdGl7Y29uc3RydWN0b3IodCxlKXtpZihzdXBlcigpLHJuLmlzTWF0cml4KHQpKXJldHVybiB0LmNsb25lKCk7aWYoTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCl7aWYodGhpcy5kYXRhPVtdLCEoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49MCkpdGhyb3cgbmV3IFR5cGVFcnJvcigibkNvbHVtbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTtmb3IobGV0IGk9MDtpPHQ7aSsrKXRoaXMuZGF0YS5wdXNoKG5ldyBGbG9hdDY0QXJyYXkoZSkpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciBvciBhbiBhcnJheSIpO3tsZXQgaT10O2lmKCJudW1iZXIiIT10eXBlb2YoZT0odD1pLmxlbmd0aCk/aVswXS5sZW5ndGg6MCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiRGF0YSBtdXN0IGJlIGEgMkQgYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudCIpO3RoaXMuZGF0YT1bXTtmb3IobGV0IHI9MDtyPHQ7cisrKXtpZihpW3JdLmxlbmd0aCE9PWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluY29uc2lzdGVudCBhcnJheSBkaW1lbnNpb25zIik7dGhpcy5kYXRhLnB1c2goRmxvYXQ2NEFycmF5LmZyb20oaVtyXSkpfX19dGhpcy5yb3dzPXQsdGhpcy5jb2x1bW5zPWV9c2V0KHQsZSxpKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdPWksdGhpc31nZXQodCxlKXtyZXR1cm4gdGhpcy5kYXRhW3RdW2VdfXJlbW92ZVJvdyh0KXtyZXR1cm4gZ2ModGhpcyx0KSx0aGlzLmRhdGEuc3BsaWNlKHQsMSksdGhpcy5yb3dzLT0xLHRoaXN9YWRkUm93KHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXQsdD10aGlzLnJvd3MpLGdjKHRoaXMsdCwhMCksZT1GbG9hdDY0QXJyYXkuZnJvbShuMCh0aGlzLGUpKSx0aGlzLmRhdGEuc3BsaWNlKHQsMCxlKSx0aGlzLnJvd3MrPTEsdGhpc31yZW1vdmVDb2x1bW4odCl7X2ModGhpcyx0KTtmb3IobGV0IGU9MDtlPHRoaXMucm93cztlKyspe2xldCBpPW5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zLTEpO2ZvcihsZXQgcj0wO3I8dDtyKyspaVtyXT10aGlzLmRhdGFbZV1bcl07Zm9yKGxldCByPXQrMTtyPHRoaXMuY29sdW1ucztyKyspaVtyLTFdPXRoaXMuZGF0YVtlXVtyXTt0aGlzLmRhdGFbZV09aX1yZXR1cm4gdGhpcy5jb2x1bW5zLT0xLHRoaXN9YWRkQ29sdW1uKHQsZSl7dHlwZW9mIGU+InUiJiYoZT10LHQ9dGhpcy5jb2x1bW5zKSxfYyh0aGlzLHQsITApLGU9aTAodGhpcyxlKTtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspe2xldCByPW5ldyBGbG9hdDY0QXJyYXkodGhpcy5jb2x1bW5zKzEpLG89MDtmb3IoO288dDtvKyspcltvXT10aGlzLmRhdGFbaV1bb107Zm9yKHJbbysrXT1lW2ldO288dGhpcy5jb2x1bW5zKzE7bysrKXJbb109dGhpcy5kYXRhW2ldW28tMV07dGhpcy5kYXRhW2ldPXJ9cmV0dXJuIHRoaXMuY29sdW1ucys9MSx0aGlzfX0sdD1ybiwobj10aSkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5hZGRTKGkpOnRoaXMuYWRkTShpKX0sbi5wcm90b3R5cGUuYWRkUz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pK2kpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5hZGRNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKStpLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi5hZGQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkuYWRkKHIpfSxuLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oaSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpP3RoaXMuc3ViUyhpKTp0aGlzLnN1Yk0oaSl9LG4ucHJvdG90eXBlLnN1YlM9ZnVuY3Rpb24oaSl7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKS1pKTtyZXR1cm4gdGhpc30sbi5wcm90b3R5cGUuc3ViTT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyktaS5nZXQocixvKSk7cmV0dXJuIHRoaXN9LG4uc3ViPWZ1bmN0aW9uKGkscil7cmV0dXJuIG5ldyB0KGkpLnN1YihyKX0sbi5wcm90b3R5cGUuc3VidHJhY3Q9bi5wcm90b3R5cGUuc3ViLG4ucHJvdG90eXBlLnN1YnRyYWN0Uz1uLnByb3RvdHlwZS5zdWJTLG4ucHJvdG90eXBlLnN1YnRyYWN0TT1uLnByb3RvdHlwZS5zdWJNLG4uc3VidHJhY3Q9bi5zdWIsbi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLm11bFMoaSk6dGhpcy5tdWxNKGkpfSxuLnByb3RvdHlwZS5tdWxTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbykqaSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm11bE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pKmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLm11bD1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5tdWwocil9LG4ucHJvdG90eXBlLm11bHRpcGx5PW4ucHJvdG90eXBlLm11bCxuLnByb3RvdHlwZS5tdWx0aXBseVM9bi5wcm90b3R5cGUubXVsUyxuLnByb3RvdHlwZS5tdWx0aXBseU09bi5wcm90b3R5cGUubXVsTSxuLm11bHRpcGx5PW4ubXVsLG4ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5kaXZTKGkpOnRoaXMuZGl2TShpKX0sbi5wcm90b3R5cGUuZGl2Uz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pL2kpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5kaXZNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKS9pLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi5kaXY9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkuZGl2KHIpfSxuLnByb3RvdHlwZS5kaXZpZGU9bi5wcm90b3R5cGUuZGl2LG4ucHJvdG90eXBlLmRpdmlkZVM9bi5wcm90b3R5cGUuZGl2UyxuLnByb3RvdHlwZS5kaXZpZGVNPW4ucHJvdG90eXBlLmRpdk0sbi5kaXZpZGU9bi5kaXYsbi5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLm1vZFMoaSk6dGhpcy5tb2RNKGkpfSxuLnByb3RvdHlwZS5tb2RTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyklaSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm1vZE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pJWkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLm1vZD1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5tb2Qocil9LG4ucHJvdG90eXBlLm1vZHVsdXM9bi5wcm90b3R5cGUubW9kLG4ucHJvdG90eXBlLm1vZHVsdXNTPW4ucHJvdG90eXBlLm1vZFMsbi5wcm90b3R5cGUubW9kdWx1c009bi5wcm90b3R5cGUubW9kTSxuLm1vZHVsdXM9bi5tb2Qsbi5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLmFuZFMoaSk6dGhpcy5hbmRNKGkpfSxuLnByb3RvdHlwZS5hbmRTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbykmaSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmFuZE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pJmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLmFuZD1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5hbmQocil9LG4ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLm9yUyhpKTp0aGlzLm9yTShpKX0sbi5wcm90b3R5cGUub3JTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyl8aSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLm9yTT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyl8aS5nZXQocixvKSk7cmV0dXJuIHRoaXN9LG4ub3I9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkub3Iocil9LG4ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy54b3JTKGkpOnRoaXMueG9yTShpKX0sbi5wcm90b3R5cGUueG9yUz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pXmkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS54b3JNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKV5pLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi54b3I9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkueG9yKHIpfSxuLnByb3RvdHlwZS5sZWZ0U2hpZnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpP3RoaXMubGVmdFNoaWZ0UyhpKTp0aGlzLmxlZnRTaGlmdE0oaSl9LG4ucHJvdG90eXBlLmxlZnRTaGlmdFM9ZnVuY3Rpb24oaSl7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKTw8aSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmxlZnRTaGlmdE09ZnVuY3Rpb24oaSl7aWYoaT10LmNoZWNrTWF0cml4KGkpLHRoaXMucm93cyE9PWkucm93c3x8dGhpcy5jb2x1bW5zIT09aS5jb2x1bW5zKXRocm93IG5ldyBSYW5nZUVycm9yKCJNYXRyaWNlcyBkaW1lbnNpb25zIG11c3QgYmUgZXF1YWwiKTtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pPDxpLmdldChyLG8pKTtyZXR1cm4gdGhpc30sbi5sZWZ0U2hpZnQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkubGVmdFNoaWZ0KHIpfSxuLnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0PWZ1bmN0aW9uKGkpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTKGkpOnRoaXMuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdE0oaSl9LG4ucHJvdG90eXBlLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnRTPWZ1bmN0aW9uKGkpe2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyk+PmkpO3JldHVybiB0aGlzfSxuLnByb3RvdHlwZS5zaWduUHJvcGFnYXRpbmdSaWdodFNoaWZ0TT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLHRoaXMuZ2V0KHIsbyk+PmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLnNpZ25Qcm9wYWdhdGluZ1JpZ2h0U2hpZnQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkuc2lnblByb3BhZ2F0aW5nUmlnaHRTaGlmdChyKX0sbi5wcm90b3R5cGUucmlnaHRTaGlmdD1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5yaWdodFNoaWZ0UyhpKTp0aGlzLnJpZ2h0U2hpZnRNKGkpfSxuLnByb3RvdHlwZS5yaWdodFNoaWZ0Uz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyx0aGlzLmdldChyLG8pPj4+aSk7cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLnJpZ2h0U2hpZnRNPWZ1bmN0aW9uKGkpe2lmKGk9dC5jaGVja01hdHJpeChpKSx0aGlzLnJvd3MhPT1pLnJvd3N8fHRoaXMuY29sdW1ucyE9PWkuY29sdW1ucyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiTWF0cmljZXMgZGltZW5zaW9ucyBtdXN0IGJlIGVxdWFsIik7Zm9yKGxldCByPTA7cjx0aGlzLnJvd3M7cisrKWZvcihsZXQgbz0wO288dGhpcy5jb2x1bW5zO28rKyl0aGlzLnNldChyLG8sdGhpcy5nZXQocixvKT4+PmkuZ2V0KHIsbykpO3JldHVybiB0aGlzfSxuLnJpZ2h0U2hpZnQ9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IHQoaSkucmlnaHRTaGlmdChyKX0sbi5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0PW4ucHJvdG90eXBlLnJpZ2h0U2hpZnQsbi5wcm90b3R5cGUuemVyb0ZpbGxSaWdodFNoaWZ0Uz1uLnByb3RvdHlwZS5yaWdodFNoaWZ0UyxuLnByb3RvdHlwZS56ZXJvRmlsbFJpZ2h0U2hpZnRNPW4ucHJvdG90eXBlLnJpZ2h0U2hpZnRNLG4uemVyb0ZpbGxSaWdodFNoaWZ0PW4ucmlnaHRTaGlmdCxuLnByb3RvdHlwZS5ub3Q9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscix+dGhpcy5nZXQoaSxyKSk7cmV0dXJuIHRoaXN9LG4ubm90PWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5ub3QoKX0sbi5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5hYnModGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmFicz1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuYWJzKCl9LG4ucHJvdG90eXBlLmFjb3M9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmFjb3ModGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmFjb3M9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmFjb3MoKX0sbi5wcm90b3R5cGUuYWNvc2g9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmFjb3NoKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5hY29zaD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuYWNvc2goKX0sbi5wcm90b3R5cGUuYXNpbj1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguYXNpbih0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uYXNpbj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuYXNpbigpfSxuLnByb3RvdHlwZS5hc2luaD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguYXNpbmgodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmFzaW5oPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5hc2luaCgpfSxuLnByb3RvdHlwZS5hdGFuPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5hdGFuKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5hdGFuPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5hdGFuKCl9LG4ucHJvdG90eXBlLmF0YW5oPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5hdGFuaCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uYXRhbmg9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmF0YW5oKCl9LG4ucHJvdG90eXBlLmNicnQ9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmNicnQodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmNicnQ9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmNicnQoKX0sbi5wcm90b3R5cGUuY2VpbD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguY2VpbCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uY2VpbD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuY2VpbCgpfSxuLnByb3RvdHlwZS5jbHozMj1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguY2x6MzIodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmNsejMyPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5jbHozMigpfSxuLnByb3RvdHlwZS5jb3M9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmNvcyh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uY29zPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5jb3MoKX0sbi5wcm90b3R5cGUuY29zaD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguY29zaCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uY29zaD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuY29zaCgpfSxuLnByb3RvdHlwZS5leHA9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmV4cCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uZXhwPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5leHAoKX0sbi5wcm90b3R5cGUuZXhwbTE9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmV4cG0xKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5leHBtMT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuZXhwbTEoKX0sbi5wcm90b3R5cGUuZmxvb3I9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLmZsb29yKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5mbG9vcj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuZmxvb3IoKX0sbi5wcm90b3R5cGUuZnJvdW5kPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5mcm91bmQodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmZyb3VuZD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuZnJvdW5kKCl9LG4ucHJvdG90eXBlLmxvZz1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgubG9nKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5sb2c9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLmxvZygpfSxuLnByb3RvdHlwZS5sb2cxcD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgubG9nMXAodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmxvZzFwPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5sb2cxcCgpfSxuLnByb3RvdHlwZS5sb2cxMD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgubG9nMTAodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLmxvZzEwPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5sb2cxMCgpfSxuLnByb3RvdHlwZS5sb2cyPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5sb2cyKHRoaXMuZ2V0KGkscikpKTtyZXR1cm4gdGhpc30sbi5sb2cyPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS5sb2cyKCl9LG4ucHJvdG90eXBlLnJvdW5kPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5yb3VuZCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4ucm91bmQ9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLnJvdW5kKCl9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLnNpZ24odGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnNpZ249ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLnNpZ24oKX0sbi5wcm90b3R5cGUuc2luPWZ1bmN0aW9uKCl7Zm9yKGxldCBpPTA7aTx0aGlzLnJvd3M7aSsrKWZvcihsZXQgcj0wO3I8dGhpcy5jb2x1bW5zO3IrKyl0aGlzLnNldChpLHIsTWF0aC5zaW4odGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnNpbj1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuc2luKCl9LG4ucHJvdG90eXBlLnNpbmg9ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLnNpbmgodGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnNpbmg9ZnVuY3Rpb24oaSl7cmV0dXJuIG5ldyB0KGkpLnNpbmgoKX0sbi5wcm90b3R5cGUuc3FydD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGguc3FydCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4uc3FydD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkuc3FydCgpfSxuLnByb3RvdHlwZS50YW49ZnVuY3Rpb24oKXtmb3IobGV0IGk9MDtpPHRoaXMucm93cztpKyspZm9yKGxldCByPTA7cjx0aGlzLmNvbHVtbnM7cisrKXRoaXMuc2V0KGkscixNYXRoLnRhbih0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4udGFuPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS50YW4oKX0sbi5wcm90b3R5cGUudGFuaD1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgudGFuaCh0aGlzLmdldChpLHIpKSk7cmV0dXJuIHRoaXN9LG4udGFuaD1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IHQoaSkudGFuaCgpfSxuLnByb3RvdHlwZS50cnVuYz1mdW5jdGlvbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5yb3dzO2krKylmb3IobGV0IHI9MDtyPHRoaXMuY29sdW1ucztyKyspdGhpcy5zZXQoaSxyLE1hdGgudHJ1bmModGhpcy5nZXQoaSxyKSkpO3JldHVybiB0aGlzfSxuLnRydW5jPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgdChpKS50cnVuYygpfSxuLnBvdz1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgdChpKS5wb3cocil9LG4ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihpKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5wb3dTKGkpOnRoaXMucG93TShpKX0sbi5wcm90b3R5cGUucG93Uz1mdW5jdGlvbihpKXtmb3IobGV0IHI9MDtyPHRoaXMucm93cztyKyspZm9yKGxldCBvPTA7bzx0aGlzLmNvbHVtbnM7bysrKXRoaXMuc2V0KHIsbyxNYXRoLnBvdyh0aGlzLmdldChyLG8pLGkpKTtyZXR1cm4gdGhpc30sbi5wcm90b3R5cGUucG93TT1mdW5jdGlvbihpKXtpZihpPXQuY2hlY2tNYXRyaXgoaSksdGhpcy5yb3dzIT09aS5yb3dzfHx0aGlzLmNvbHVtbnMhPT1pLmNvbHVtbnMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk1hdHJpY2VzIGRpbWVuc2lvbnMgbXVzdCBiZSBlcXVhbCIpO2ZvcihsZXQgcj0wO3I8dGhpcy5yb3dzO3IrKylmb3IobGV0IG89MDtvPHRoaXMuY29sdW1ucztvKyspdGhpcy5zZXQocixvLE1hdGgucG93KHRoaXMuZ2V0KHIsbyksaS5nZXQocixvKSkpO3JldHVybiB0aGlzfX0pLEFmZT1obygoKT0+e30pLERFPWhvKCgpPT57bzAoKSxBbD1jbGFzcyBleHRlbmRzIHRpe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kYXRhPXQsdGhpcy5yb3dzPXQubGVuZ3RoLHRoaXMuY29sdW1ucz10WzBdLmxlbmd0aH1zZXQodCxlLGkpe3JldHVybiB0aGlzLmRhdGFbdF1bZV09aSx0aGlzfWdldCh0LGUpe3JldHVybiB0aGlzLmRhdGFbdF1bZV19fX0pLElmZT1obygoKT0+e28wKCksREUoKSxBRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtsZXQgYSxsLGMsdSxkLHAsaCxmLG0sZT0odD1BbC5jaGVja01hdHJpeCh0KSkuY2xvbmUoKSxpPWUucm93cyxyPWUuY29sdW1ucyxvPW5ldyBGbG9hdDY0QXJyYXkoaSkscz0xO2ZvcihhPTA7YTxpO2ErKylvW2FdPWE7Zm9yKGY9bmV3IEZsb2F0NjRBcnJheShpKSxsPTA7bDxyO2wrKyl7Zm9yKGE9MDthPGk7YSsrKWZbYV09ZS5nZXQoYSxsKTtmb3IoYT0wO2E8aTthKyspe2ZvcihtPU1hdGgubWluKGEsbCksZD0wLGM9MDtjPG07YysrKWQrPWUuZ2V0KGEsYykqZltjXTtmW2FdLT1kLGUuc2V0KGEsbCxmW2FdKX1mb3IodT1sLGE9bCsxO2E8aTthKyspTWF0aC5hYnMoZlthXSk+TWF0aC5hYnMoZlt1XSkmJih1PWEpO2lmKHUhPT1sKXtmb3IoYz0wO2M8cjtjKyspcD1lLmdldCh1LGMpLGUuc2V0KHUsYyxlLmdldChsLGMpKSxlLnNldChsLGMscCk7aD1vW3VdLG9bdV09b1tsXSxvW2xdPWgscz0tc31pZihsPGkmJjAhPT1lLmdldChsLGwpKWZvcihhPWwrMTthPGk7YSsrKWUuc2V0KGEsbCxlLmdldChhLGwpL2UuZ2V0KGwsbCkpfXRoaXMuTFU9ZSx0aGlzLnBpdm90VmVjdG9yPW8sdGhpcy5waXZvdFNpZ249c31pc1Npbmd1bGFyKCl7bGV0IHQ9dGhpcy5MVSxlPXQuY29sdW1ucztmb3IobGV0IGk9MDtpPGU7aSsrKWlmKDA9PT10LmdldChpLGkpKXJldHVybiEwO3JldHVybiExfXNvbHZlKHQpe3Q9cm4uY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5MVTtpZihlLnJvd3MhPT10LnJvd3MpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1hdHJpeCBkaW1lbnNpb25zIik7aWYodGhpcy5pc1Npbmd1bGFyKCkpdGhyb3cgbmV3IEVycm9yKCJMVSBtYXRyaXggaXMgc2luZ3VsYXIiKTtsZXQgYSxsLGMscj10LmNvbHVtbnMsbz10LnN1Yk1hdHJpeFJvdyh0aGlzLnBpdm90VmVjdG9yLDAsci0xKSxzPWUuY29sdW1ucztmb3IoYz0wO2M8cztjKyspZm9yKGE9YysxO2E8czthKyspZm9yKGw9MDtsPHI7bCsrKW8uc2V0KGEsbCxvLmdldChhLGwpLW8uZ2V0KGMsbCkqZS5nZXQoYSxjKSk7Zm9yKGM9cy0xO2M+PTA7Yy0tKXtmb3IobD0wO2w8cjtsKyspby5zZXQoYyxsLG8uZ2V0KGMsbCkvZS5nZXQoYyxjKSk7Zm9yKGE9MDthPGM7YSsrKWZvcihsPTA7bDxyO2wrKylvLnNldChhLGwsby5nZXQoYSxsKS1vLmdldChjLGwpKmUuZ2V0KGEsYykpfXJldHVybiBvfWdldCBkZXRlcm1pbmFudCgpe2xldCB0PXRoaXMuTFU7aWYoIXQuaXNTcXVhcmUoKSl0aHJvdyBuZXcgRXJyb3IoIk1hdHJpeCBtdXN0IGJlIHNxdWFyZSIpO2xldCBlPXRoaXMucGl2b3RTaWduLGk9dC5jb2x1bW5zO2ZvcihsZXQgcj0wO3I8aTtyKyspZSo9dC5nZXQocixyKTtyZXR1cm4gZX1nZXQgbG93ZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQ9dGhpcy5MVSxlPXQucm93cyxpPXQuY29sdW1ucyxyPW5ldyBybihlLGkpO2ZvcihsZXQgbz0wO288ZTtvKyspZm9yKGxldCBzPTA7czxpO3MrKylyLnNldChvLHMsbz5zP3QuZ2V0KG8scyk6bz09PXM/MTowKTtyZXR1cm4gcn1nZXQgdXBwZXJUcmlhbmd1bGFyTWF0cml4KCl7bGV0IHQ9dGhpcy5MVSxlPXQucm93cyxpPXQuY29sdW1ucyxyPW5ldyBybihlLGkpO2ZvcihsZXQgbz0wO288ZTtvKyspZm9yKGxldCBzPTA7czxpO3MrKylyLnNldChvLHMsbzw9cz90LmdldChvLHMpOjApO3JldHVybiByfWdldCBwaXZvdFBlcm11dGF0aW9uVmVjdG9yKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5waXZvdFZlY3Rvcil9fX0pO2Z1bmN0aW9uIE9wKG4sdCl7bGV0IGU9MDtyZXR1cm4gTWF0aC5hYnMobik+TWF0aC5hYnModCk/KGU9dC9uLE1hdGguYWJzKG4pKk1hdGguc3FydCgxK2UqZSkpOjAhPT10PyhlPW4vdCxNYXRoLmFicyh0KSpNYXRoLnNxcnQoMStlKmUpKTowfXZhciBJRSx6YixsNj1obygoKT0+e30pLFBmZT1obygoKT0+e28wKCksREUoKSxsNigpLElFPWNsYXNze2NvbnN0cnVjdG9yKHQpe2xldCBzLGEsbCxjLGU9KHQ9QWwuY2hlY2tNYXRyaXgodCkpLmNsb25lKCksaT10LnJvd3Mscj10LmNvbHVtbnMsbz1uZXcgRmxvYXQ2NEFycmF5KHIpO2ZvcihsPTA7bDxyO2wrKyl7bGV0IHU9MDtmb3Iocz1sO3M8aTtzKyspdT1PcCh1LGUuZ2V0KHMsbCkpO2lmKDAhPT11KXtmb3IoZS5nZXQobCxsKTwwJiYodT0tdSkscz1sO3M8aTtzKyspZS5zZXQocyxsLGUuZ2V0KHMsbCkvdSk7Zm9yKGUuc2V0KGwsbCxlLmdldChsLGwpKzEpLGE9bCsxO2E8cjthKyspe2ZvcihjPTAscz1sO3M8aTtzKyspYys9ZS5nZXQocyxsKSplLmdldChzLGEpO2ZvcihjPS1jL2UuZ2V0KGwsbCkscz1sO3M8aTtzKyspZS5zZXQocyxhLGUuZ2V0KHMsYSkrYyplLmdldChzLGwpKX19b1tsXT0tdX10aGlzLlFSPWUsdGhpcy5SZGlhZz1vfXNvbHZlKHQpe3Q9cm4uY2hlY2tNYXRyaXgodCk7bGV0IGU9dGhpcy5RUixpPWUucm93cztpZih0LnJvd3MhPT1pKXRocm93IG5ldyBFcnJvcigiTWF0cml4IHJvdyBkaW1lbnNpb25zIG11c3QgYWdyZWUiKTtpZighdGhpcy5pc0Z1bGxSYW5rKCkpdGhyb3cgbmV3IEVycm9yKCJNYXRyaXggaXMgcmFuayBkZWZpY2llbnQiKTtsZXQgYSxsLGMsdSxyPXQuY29sdW1ucyxvPXQuY2xvbmUoKSxzPWUuY29sdW1ucztmb3IoYz0wO2M8cztjKyspZm9yKGw9MDtsPHI7bCsrKXtmb3IodT0wLGE9YzthPGk7YSsrKXUrPWUuZ2V0KGEsYykqby5nZXQoYSxsKTtmb3IodT0tdS9lLmdldChjLGMpLGE9YzthPGk7YSsrKW8uc2V0KGEsbCxvLmdldChhLGwpK3UqZS5nZXQoYSxjKSl9Zm9yKGM9cy0xO2M+PTA7Yy0tKXtmb3IobD0wO2w8cjtsKyspby5zZXQoYyxsLG8uZ2V0KGMsbCkvdGhpcy5SZGlhZ1tjXSk7Zm9yKGE9MDthPGM7YSsrKWZvcihsPTA7bDxyO2wrKylvLnNldChhLGwsby5nZXQoYSxsKS1vLmdldChjLGwpKmUuZ2V0KGEsYykpfXJldHVybiBvLnN1Yk1hdHJpeCgwLHMtMSwwLHItMSl9aXNGdWxsUmFuaygpe2xldCB0PXRoaXMuUVIuY29sdW1ucztmb3IobGV0IGU9MDtlPHQ7ZSsrKWlmKDA9PT10aGlzLlJkaWFnW2VdKXJldHVybiExO3JldHVybiEwfWdldCB1cHBlclRyaWFuZ3VsYXJNYXRyaXgoKXtsZXQgcixvLHQ9dGhpcy5RUixlPXQuY29sdW1ucyxpPW5ldyBybihlLGUpO2ZvcihyPTA7cjxlO3IrKylmb3Iobz0wO288ZTtvKyspaS5zZXQocixvLHI8bz90LmdldChyLG8pOnI9PT1vP3RoaXMuUmRpYWdbcl06MCk7cmV0dXJuIGl9Z2V0IG9ydGhvZ29uYWxNYXRyaXgoKXtsZXQgbyxzLGEsbCx0PXRoaXMuUVIsZT10LnJvd3MsaT10LmNvbHVtbnMscj1uZXcgcm4oZSxpKTtmb3IoYT1pLTE7YT49MDthLS0pe2ZvcihvPTA7bzxlO28rKylyLnNldChvLGEsMCk7Zm9yKHIuc2V0KGEsYSwxKSxzPWE7czxpO3MrKylpZigwIT09dC5nZXQoYSxhKSl7Zm9yKGw9MCxvPWE7bzxlO28rKylsKz10LmdldChvLGEpKnIuZ2V0KG8scyk7Zm9yKGw9LWwvdC5nZXQoYSxhKSxvPWE7bzxlO28rKylyLnNldChvLHMsci5nZXQobyxzKStsKnQuZ2V0KG8sYSkpfX1yZXR1cm4gcn19fSksUmZlPWhvKCgpPT57bzAoKSxERSgpLGw2KCksemI9Y2xhc3N7Y29uc3RydWN0b3IodCxlPXt9KXtpZigodD1BbC5jaGVja01hdHJpeCh0KSkuaXNFbXB0eSgpKXRocm93IG5ldyBFcnJvcigiTWF0cml4IG11c3QgYmUgbm9uLWVtcHR5Iik7bGV0IGQsaT10LnJvd3Mscj10LmNvbHVtbnMse2NvbXB1dGVMZWZ0U2luZ3VsYXJWZWN0b3JzOm89ITAsY29tcHV0ZVJpZ2h0U2luZ3VsYXJWZWN0b3JzOnM9ITAsYXV0b1RyYW5zcG9zZTphPSExfT1lLGw9Qm9vbGVhbihvKSxjPUJvb2xlYW4ocyksdT0hMTtpZihpPHIpaWYoYSl7ZD10LnRyYW5zcG9zZSgpLGk9ZC5yb3dzLHI9ZC5jb2x1bW5zLHU9ITA7bGV0IHc9bDtsPWMsYz13fWVsc2UgZD10LmNsb25lKCksY29uc29sZS53YXJuKCJDb21wdXRpbmcgU1ZEIG9uIGEgbWF0cml4IHdpdGggbW9yZSBjb2x1bW5zIHRoYW4gcm93cy4gQ29uc2lkZXIgZW5hYmxpbmcgYXV0b1RyYW5zcG9zZSIpO2Vsc2UgZD10LmNsb25lKCk7bGV0IHA9TWF0aC5taW4oaSxyKSxoPU1hdGgubWluKGkrMSxyKSxmPW5ldyBGbG9hdDY0QXJyYXkoaCksbT1uZXcgcm4oaSxwKSx4PW5ldyBybihyLHIpLGc9bmV3IEZsb2F0NjRBcnJheShyKSxiPW5ldyBGbG9hdDY0QXJyYXkoaSksRD1uZXcgRmxvYXQ2NEFycmF5KGgpO2ZvcihsZXQgdz0wO3c8aDt3KyspRFt3XT13O2xldCBUPU1hdGgubWluKGktMSxyKSxrPU1hdGgubWF4KDAsTWF0aC5taW4oci0yLGkpKSxaPU1hdGgubWF4KFQsayk7Zm9yKGxldCB3PTA7dzxaO3crKyl7aWYodzxUKXtmW3ddPTA7Zm9yKGxldCBGPXc7RjxpO0YrKylmW3ddPU9wKGZbd10sZC5nZXQoRix3KSk7aWYoMCE9PWZbd10pe2QuZ2V0KHcsdyk8MCYmKGZbd109LWZbd10pO2ZvcihsZXQgRj13O0Y8aTtGKyspZC5zZXQoRix3LGQuZ2V0KEYsdykvZlt3XSk7ZC5zZXQodyx3LGQuZ2V0KHcsdykrMSl9Zlt3XT0tZlt3XX1mb3IobGV0IEY9dysxO0Y8cjtGKyspe2lmKHc8VCYmMCE9PWZbd10pe2xldCBxPTA7Zm9yKGxldCBLPXc7SzxpO0srKylxKz1kLmdldChLLHcpKmQuZ2V0KEssRik7cT0tcS9kLmdldCh3LHcpO2ZvcihsZXQgSz13O0s8aTtLKyspZC5zZXQoSyxGLGQuZ2V0KEssRikrcSpkLmdldChLLHcpKX1nW0ZdPWQuZ2V0KHcsRil9aWYobCYmdzxUKWZvcihsZXQgRj13O0Y8aTtGKyspbS5zZXQoRix3LGQuZ2V0KEYsdykpO2lmKHc8ayl7Z1t3XT0wO2ZvcihsZXQgRj13KzE7RjxyO0YrKylnW3ddPU9wKGdbd10sZ1tGXSk7aWYoMCE9PWdbd10pe2dbdysxXTwwJiYoZ1t3XT0wLWdbd10pO2ZvcihsZXQgRj13KzE7RjxyO0YrKylnW0ZdLz1nW3ddO2dbdysxXSs9MX1pZihnW3ddPS1nW3ddLHcrMTxpJiYwIT09Z1t3XSl7Zm9yKGxldCBGPXcrMTtGPGk7RisrKWJbRl09MDtmb3IobGV0IEY9dysxO0Y8aTtGKyspZm9yKGxldCBxPXcrMTtxPHI7cSsrKWJbRl0rPWdbcV0qZC5nZXQoRixxKTtmb3IobGV0IEY9dysxO0Y8cjtGKyspe2xldCBxPS1nW0ZdL2dbdysxXTtmb3IobGV0IEs9dysxO0s8aTtLKyspZC5zZXQoSyxGLGQuZ2V0KEssRikrcSpiW0tdKX19aWYoYylmb3IobGV0IEY9dysxO0Y8cjtGKyspeC5zZXQoRix3LGdbRl0pfX1sZXQgej1NYXRoLm1pbihyLGkrMSk7aWYoVDxyJiYoZltUXT1kLmdldChULFQpKSxpPHomJihmW3otMV09MCksaysxPHomJihnW2tdPWQuZ2V0KGssei0xKSksZ1t6LTFdPTAsbCl7Zm9yKGxldCB3PVQ7dzxwO3crKyl7Zm9yKGxldCBGPTA7RjxpO0YrKyltLnNldChGLHcsMCk7bS5zZXQodyx3LDEpfWZvcihsZXQgdz1ULTE7dz49MDt3LS0paWYoMCE9PWZbd10pe2ZvcihsZXQgRj13KzE7RjxwO0YrKyl7bGV0IHE9MDtmb3IobGV0IEs9dztLPGk7SysrKXErPW0uZ2V0KEssdykqbS5nZXQoSyxGKTtxPS1xL20uZ2V0KHcsdyk7Zm9yKGxldCBLPXc7SzxpO0srKyltLnNldChLLEYsbS5nZXQoSyxGKStxKm0uZ2V0KEssdykpfWZvcihsZXQgRj13O0Y8aTtGKyspbS5zZXQoRix3LC1tLmdldChGLHcpKTttLnNldCh3LHcsMSttLmdldCh3LHcpKTtmb3IobGV0IEY9MDtGPHctMTtGKyspbS5zZXQoRix3LDApfWVsc2V7Zm9yKGxldCBGPTA7RjxpO0YrKyltLnNldChGLHcsMCk7bS5zZXQodyx3LDEpfX1pZihjKWZvcihsZXQgdz1yLTE7dz49MDt3LS0pe2lmKHc8ayYmMCE9PWdbd10pZm9yKGxldCBGPXcrMTtGPHI7RisrKXtsZXQgcT0wO2ZvcihsZXQgSz13KzE7SzxyO0srKylxKz14LmdldChLLHcpKnguZ2V0KEssRik7cT0tcS94LmdldCh3KzEsdyk7Zm9yKGxldCBLPXcrMTtLPHI7SysrKXguc2V0KEssRix4LmdldChLLEYpK3EqeC5nZXQoSyx3KSl9Zm9yKGxldCBGPTA7RjxyO0YrKyl4LnNldChGLHcsMCk7eC5zZXQodyx3LDEpfWxldCBmZT16LTEsdWU9MCxoZT1OdW1iZXIuRVBTSUxPTjtmb3IoO3o+MDspe2xldCB3LEY7Zm9yKHc9ei0yO3c+PS0xJiYtMSE9PXc7dy0tKXtsZXQgcT1OdW1iZXIuTUlOX1ZBTFVFK2hlKk1hdGguYWJzKGZbd10rTWF0aC5hYnMoZlt3KzFdKSk7aWYoTWF0aC5hYnMoZ1t3XSk8PXF8fE51bWJlci5pc05hTihnW3ddKSl7Z1t3XT0wO2JyZWFrfX1pZih3PT09ei0yKUY9NDtlbHNle2xldCBxO2ZvcihxPXotMTtxPj13JiZxIT09dztxLS0pe2xldCBLPShxIT09ej9NYXRoLmFicyhnW3FdKTowKSsocSE9PXcrMT9NYXRoLmFicyhnW3EtMV0pOjApO2lmKE1hdGguYWJzKGZbcV0pPD1oZSpLKXtmW3FdPTA7YnJlYWt9fXE9PT13P0Y9MzpxPT09ei0xP0Y9MTooRj0yLHc9cSl9c3dpdGNoKHcrKyxGKXtjYXNlIDE6e2xldCBxPWdbei0yXTtnW3otMl09MDtmb3IobGV0IEs9ei0yO0s+PXc7Sy0tKXtsZXQgZGU9T3AoZltLXSxxKSxZPWZbS10vZGUsYWU9cS9kZTtpZihmW0tdPWRlLEshPT13JiYocT0tYWUqZ1tLLTFdLGdbSy0xXT1ZKmdbSy0xXSksYylmb3IobGV0IGxlPTA7bGU8cjtsZSsrKWRlPVkqeC5nZXQobGUsSykrYWUqeC5nZXQobGUsei0xKSx4LnNldChsZSx6LTEsLWFlKnguZ2V0KGxlLEspK1kqeC5nZXQobGUsei0xKSkseC5zZXQobGUsSyxkZSl9YnJlYWt9Y2FzZSAyOntsZXQgcT1nW3ctMV07Z1t3LTFdPTA7Zm9yKGxldCBLPXc7Szx6O0srKyl7bGV0IGRlPU9wKGZbS10scSksWT1mW0tdL2RlLGFlPXEvZGU7aWYoZltLXT1kZSxxPS1hZSpnW0tdLGdbS109WSpnW0tdLGwpZm9yKGxldCBsZT0wO2xlPGk7bGUrKylkZT1ZKm0uZ2V0KGxlLEspK2FlKm0uZ2V0KGxlLHctMSksbS5zZXQobGUsdy0xLC1hZSptLmdldChsZSxLKStZKm0uZ2V0KGxlLHctMSkpLG0uc2V0KGxlLEssZGUpfWJyZWFrfWNhc2UgMzp7bGV0IHE9TWF0aC5tYXgoTWF0aC5hYnMoZlt6LTFdKSxNYXRoLmFicyhmW3otMl0pLE1hdGguYWJzKGdbei0yXSksTWF0aC5hYnMoZlt3XSksTWF0aC5hYnMoZ1t3XSkpLEs9Zlt6LTFdL3EsZGU9Zlt6LTJdL3EsWT1nW3otMl0vcSxhZT1mW3ddL3EsbGU9Z1t3XS9xLEllPSgoZGUrSykqKGRlLUspK1kqWSkvMix2ZT1LKlkqKEsqWSksRGU9MDsoMCE9PUllfHwwIT09dmUpJiYoRGU9SWU8MD8wLU1hdGguc3FydChJZSpJZSt2ZSk6TWF0aC5zcXJ0KEllKkllK3ZlKSxEZT12ZS8oSWUrRGUpKTtsZXQgbnQ9KGFlK0spKihhZS1LKStEZSxndD1hZSpsZTtmb3IobGV0IFVlPXc7VWU8ei0xO1VlKyspe2xldCBBZT1PcChudCxndCk7MD09PUFlJiYoQWU9TnVtYmVyLk1JTl9WQUxVRSk7bGV0IHRuPW50L0FlLHB0PWd0L0FlO2lmKFVlIT09dyYmKGdbVWUtMV09QWUpLG50PXRuKmZbVWVdK3B0KmdbVWVdLGdbVWVdPXRuKmdbVWVdLXB0KmZbVWVdLGd0PXB0KmZbVWUrMV0sZltVZSsxXT10bipmW1VlKzFdLGMpZm9yKGxldCB3dD0wO3d0PHI7d3QrKylBZT10bip4LmdldCh3dCxVZSkrcHQqeC5nZXQod3QsVWUrMSkseC5zZXQod3QsVWUrMSwtcHQqeC5nZXQod3QsVWUpK3RuKnguZ2V0KHd0LFVlKzEpKSx4LnNldCh3dCxVZSxBZSk7aWYoQWU9T3AobnQsZ3QpLDA9PT1BZSYmKEFlPU51bWJlci5NSU5fVkFMVUUpLHRuPW50L0FlLHB0PWd0L0FlLGZbVWVdPUFlLG50PXRuKmdbVWVdK3B0KmZbVWUrMV0sZltVZSsxXT0tcHQqZ1tVZV0rdG4qZltVZSsxXSxndD1wdCpnW1VlKzFdLGdbVWUrMV09dG4qZ1tVZSsxXSxsJiZVZTxpLTEpZm9yKGxldCB3dD0wO3d0PGk7d3QrKylBZT10biptLmdldCh3dCxVZSkrcHQqbS5nZXQod3QsVWUrMSksbS5zZXQod3QsVWUrMSwtcHQqbS5nZXQod3QsVWUpK3RuKm0uZ2V0KHd0LFVlKzEpKSxtLnNldCh3dCxVZSxBZSl9Z1t6LTJdPW50LHVlKz0xO2JyZWFrfWNhc2UgNDppZihmW3ddPD0wJiYoZlt3XT1mW3ddPDA/LWZbd106MCxjKSlmb3IobGV0IHE9MDtxPD1mZTtxKyspeC5zZXQocSx3LC14LmdldChxLHcpKTtmb3IoO3c8ZmUmJiEoZlt3XT49Zlt3KzFdKTspe2xldCBxPWZbd107aWYoZlt3XT1mW3crMV0sZlt3KzFdPXEsYyYmdzxyLTEpZm9yKGxldCBLPTA7SzxyO0srKylxPXguZ2V0KEssdysxKSx4LnNldChLLHcrMSx4LmdldChLLHcpKSx4LnNldChLLHcscSk7aWYobCYmdzxpLTEpZm9yKGxldCBLPTA7SzxpO0srKylxPW0uZ2V0KEssdysxKSxtLnNldChLLHcrMSxtLmdldChLLHcpKSxtLnNldChLLHcscSk7dysrfXVlPTAsei0tfX1pZih1KXtsZXQgdz14O3g9bSxtPXd9dGhpcy5tPWksdGhpcy5uPXIsdGhpcy5zPWYsdGhpcy5VPW0sdGhpcy5WPXh9c29sdmUodCl7bGV0IGU9dCxpPXRoaXMudGhyZXNob2xkLHI9dGhpcy5zLmxlbmd0aCxvPXJuLnplcm9zKHIscik7Zm9yKGxldCBwPTA7cDxyO3ArKylNYXRoLmFicyh0aGlzLnNbcF0pPD1pP28uc2V0KHAscCwwKTpvLnNldChwLHAsMS90aGlzLnNbcF0pO2xldCBzPXRoaXMuVSxhPXRoaXMucmlnaHRTaW5ndWxhclZlY3RvcnMsbD1hLm1tdWwobyksYz1hLnJvd3MsdT1zLnJvd3MsZD1ybi56ZXJvcyhjLHUpO2ZvcihsZXQgcD0wO3A8YztwKyspZm9yKGxldCBoPTA7aDx1O2grKyl7bGV0IGY9MDtmb3IobGV0IG09MDttPHI7bSsrKWYrPWwuZ2V0KHAsbSkqcy5nZXQoaCxtKTtkLnNldChwLGgsZil9cmV0dXJuIGQubW11bChlKX1zb2x2ZUZvckRpYWdvbmFsKHQpe3JldHVybiB0aGlzLnNvbHZlKHJuLmRpYWcodCkpfWludmVyc2UoKXtsZXQgdD10aGlzLlYsZT10aGlzLnRocmVzaG9sZCxpPXQucm93cyxyPXQuY29sdW1ucyxvPW5ldyBybihpLHRoaXMucy5sZW5ndGgpO2ZvcihsZXQgdT0wO3U8aTt1KyspZm9yKGxldCBkPTA7ZDxyO2QrKylNYXRoLmFicyh0aGlzLnNbZF0pPmUmJm8uc2V0KHUsZCx0LmdldCh1LGQpL3RoaXMuc1tkXSk7bGV0IHM9dGhpcy5VLGE9cy5yb3dzLGw9cy5jb2x1bW5zLGM9bmV3IHJuKGksYSk7Zm9yKGxldCB1PTA7dTxpO3UrKylmb3IobGV0IGQ9MDtkPGE7ZCsrKXtsZXQgcD0wO2ZvcihsZXQgaD0wO2g8bDtoKyspcCs9by5nZXQodSxoKSpzLmdldChkLGgpO2Muc2V0KHUsZCxwKX1yZXR1cm4gY31nZXQgY29uZGl0aW9uKCl7cmV0dXJuIHRoaXMuc1swXS90aGlzLnNbTWF0aC5taW4odGhpcy5tLHRoaXMubiktMV19Z2V0IG5vcm0yKCl7cmV0dXJuIHRoaXMuc1swXX1nZXQgcmFuaygpe2xldCB0PU1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXSpOdW1iZXIuRVBTSUxPTixlPTAsaT10aGlzLnM7Zm9yKGxldCByPTAsbz1pLmxlbmd0aDtyPG87cisrKWlbcl0+dCYmZSsrO3JldHVybiBlfWdldCBkaWFnb25hbCgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMucyl9Z2V0IHRocmVzaG9sZCgpe3JldHVybiBOdW1iZXIuRVBTSUxPTi8yKk1hdGgubWF4KHRoaXMubSx0aGlzLm4pKnRoaXMuc1swXX1nZXQgbGVmdFNpbmd1bGFyVmVjdG9ycygpe3JldHVybiB0aGlzLlV9Z2V0IHJpZ2h0U2luZ3VsYXJWZWN0b3JzKCl7cmV0dXJuIHRoaXMuVn1nZXQgZGlhZ29uYWxNYXRyaXgoKXtyZXR1cm4gcm4uZGlhZyh0aGlzLnMpfX19KTt2YXIga2ZlPWhvKCgpPT57SWZlKCksUGZlKCksUmZlKCksbzAoKSxERSgpfSksRmZlPWhvKCgpPT57bzAoKSxBZmUoKSxrZmUoKX0pO2Z1bmN0aW9uIHU2KG4sdCxlLGkscil7bGV0IHM9cm4uZXllKHQubGVuZ3RoLHQubGVuZ3RoLGUqaSppKSxhPXIodCksbD1uZXcgRmxvYXQ2NEFycmF5KG4ueC5sZW5ndGgpO2ZvcihsZXQgcD0wO3A8bi54Lmxlbmd0aDtwKyspbFtwXT1hKG4ueFtwXSk7bGV0IGM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1lLmxlbmd0aCxzPW4ueC5sZW5ndGgsYT1uZXcgQXJyYXkobyk7Zm9yKGxldCBsPTA7bDxvO2wrKyl7YVtsXT1uZXcgQXJyYXkocyk7bGV0IGM9ZS5zbGljZSgpO2NbbF0rPWk7bGV0IHU9cihjKTtmb3IobGV0IGQ9MDtkPHM7ZCsrKWFbbF1bZF09dFtkXS11KG4ueFtkXSl9cmV0dXJuIG5ldyBybihhKX0obixsLHQsaSxyKSx1PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi54Lmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09W24ueVtyXS10W3JdXTtyZXR1cm4gbmV3IHJuKGkpfShuLGwpLGQ9ZnVuY3Rpb24obix0PSExKXtyZXR1cm4gbj1BbC5jaGVja01hdHJpeChuKSx0P25ldyB6YihuKS5pbnZlcnNlKCk6ZnVuY3Rpb24obix0LGU9ITEpe3JldHVybiBuPUFsLmNoZWNrTWF0cml4KG4pLHQ9QWwuY2hlY2tNYXRyaXgodCksZT9uZXcgemIobikuc29sdmUodCk6bi5pc1NxdWFyZSgpP25ldyBBRShuKS5zb2x2ZSh0KTpuZXcgSUUobikuc29sdmUodCl9KG4scm4uZXllKG4ucm93cykpfShzLmFkZChjLm1tdWwoYy50cmFuc3Bvc2UoKSkpKTtyZXR1cm4odD0odD1uZXcgcm4oW3RdKSkuc3ViKGQubW11bChjKS5tbXVsKHUpLm11bChpKS50cmFuc3Bvc2UoKSkpLnRvMURBcnJheSgpfXZhciBOZmU9aG8oKCk9PntGZmUoKX0pLEJmZT17fTtmdW5jdGlvbiBMZmUobix0LGU9e30pe2xldHttYXhJdGVyYXRpb25zOmk9MTAwLGdyYWRpZW50RGlmZmVyZW5jZTpyPS4xLGRhbXBpbmc6bz0wLGVycm9yVG9sZXJhbmNlOnM9LjAxLG1pblZhbHVlczphLG1heFZhbHVlczpsLGluaXRpYWxWYWx1ZXM6Y309ZTtpZihvPD0wKXRocm93IG5ldyBFcnJvcigiVGhlIGRhbXBpbmcgb3B0aW9uIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTtpZighbi54fHwhbi55KXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgcGFyYW1ldGVyIG11c3QgaGF2ZSB4IGFuZCB5IGVsZW1lbnRzIik7aWYoIUVFKG4ueCl8fG4ueC5sZW5ndGg8Mnx8IUVFKG4ueSl8fG4ueS5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIHBhcmFtZXRlciBlbGVtZW50cyBtdXN0IGJlIGFuIGFycmF5IHdpdGggbW9yZSB0aGFuIDIgcG9pbnRzIik7aWYobi54Lmxlbmd0aCE9PW4ueS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJUaGUgZGF0YSBwYXJhbWV0ZXIgZWxlbWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUiKTtsZXQgdT1jfHxuZXcgQXJyYXkodC5sZW5ndGgpLmZpbGwoMSksZD11Lmxlbmd0aDtpZihsPWx8fG5ldyBBcnJheShkKS5maWxsKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxhPWF8fG5ldyBBcnJheShkKS5maWxsKE51bWJlci5NSU5fU0FGRV9JTlRFR0VSKSxsLmxlbmd0aCE9PWEubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibWluVmFsdWVzIGFuZCBtYXhWYWx1ZXMgbXVzdCBiZSB0aGUgc2FtZSBzaXplIik7aWYoIUVFKHUpKXRocm93IG5ldyBFcnJvcigiaW5pdGlhbFZhbHVlcyBtdXN0IGJlIGFuIGFycmF5Iik7bGV0IGYscD1wRihuLHUsdCksaD1wPD1zO2ZvcihmPTA7ZjxpJiYhaDtmKyspe3U9dTYobix1LG8scix0KTtmb3IobGV0IG09MDttPGQ7bSsrKXVbbV09TWF0aC5taW4oTWF0aC5tYXgoYVttXSx1W21dKSxsW21dKTtpZihwPXBGKG4sdSx0KSxpc05hTihwKSlicmVhaztoPXA8PXN9cmV0dXJue3BhcmFtZXRlclZhbHVlczp1LHBhcmFtZXRlckVycm9yOnAsaXRlcmF0aW9uczpmfX1CRShCZmUse2RlZmF1bHQ6KCk9PkxmZX0pO3ZhciBWZmU9aG8oKCk9PntLaGUoKSxaaGUoKSxOZmUoKX0pLEpmZT1SZCh3bz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSGZlPXdvJiZ3by5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBuZXcoZXx8KGU9UHJvbWlzZSkpKGZ1bmN0aW9uKHIsbyl7ZnVuY3Rpb24gcyhjKXt0cnl7bChpLm5leHQoYykpfWNhdGNoKHUpe28odSl9fWZ1bmN0aW9uIGEoYyl7dHJ5e2woaS50aHJvdyhjKSl9Y2F0Y2godSl7byh1KX19ZnVuY3Rpb24gbChjKXtjLmRvbmU/cihjLnZhbHVlKTpuZXcgZShmdW5jdGlvbih1KXt1KGMudmFsdWUpfSkudGhlbihzLGEpfWwoKGk9aS5hcHBseShuLHR8fFtdKSkubmV4dCgpKX0pfSxVZmU9d28mJndvLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihuLHQpe3ZhciBpLHIsbyxzLGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb1swXSl0aHJvdyBvWzFdO3JldHVybiBvWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHM9e25leHQ6YSgwKSx0aHJvdzphKDEpLHJldHVybjphKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoc1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzO2Z1bmN0aW9uIGEoYyl7cmV0dXJuIGZ1bmN0aW9uKHUpe3JldHVybiBmdW5jdGlvbihjKXtpZihpKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2U7KXRyeXtpZihpPTEsciYmKG89MiZjWzBdP3IucmV0dXJuOmNbMF0/ci50aHJvd3x8KChvPXIucmV0dXJuKSYmby5jYWxsKHIpLDApOnIubmV4dCkmJiEobz1vLmNhbGwocixjWzFdKSkuZG9uZSlyZXR1cm4gbztzd2l0Y2gocj0wLG8mJihjPVsyJmNbMF0sby52YWx1ZV0pLGNbMF0pe2Nhc2UgMDpjYXNlIDE6bz1jO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZS5sYWJlbCsrLHt2YWx1ZTpjWzFdLGRvbmU6ITF9O2Nhc2UgNTplLmxhYmVsKysscj1jWzFdLGM9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjPWUub3BzLnBvcCgpLGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEobz0obz1lLnRyeXMpLmxlbmd0aD4wJiZvW28ubGVuZ3RoLTFdKSYmKDY9PT1jWzBdfHwyPT09Y1swXSkpe2U9MDtjb250aW51ZX1pZigzPT09Y1swXSYmKCFvfHxjWzFdPm9bMF0mJmNbMV08b1szXSkpe2UubGFiZWw9Y1sxXTticmVha31pZig2PT09Y1swXSYmZS5sYWJlbDxvWzFdKXtlLmxhYmVsPW9bMV0sbz1jO2JyZWFrfWlmKG8mJmUubGFiZWw8b1syXSl7ZS5sYWJlbD1vWzJdLGUub3BzLnB1c2goYyk7YnJlYWt9b1syXSYmZS5vcHMucG9wKCksZS50cnlzLnBvcCgpO2NvbnRpbnVlfWM9dC5jYWxsKG4sZSl9Y2F0Y2godSl7Yz1bNix1XSxyPTB9ZmluYWxseXtpPW89MH1pZig1JmNbMF0pdGhyb3cgY1sxXTtyZXR1cm57dmFsdWU6Y1swXT9jWzFdOnZvaWQgMCxkb25lOiEwfX0oW2MsdV0pfX19LGQ2PXdvJiZ3by5fX3JlYWR8fGZ1bmN0aW9uKG4sdCl7dmFyIGU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmbltTeW1ib2wuaXRlcmF0b3JdO2lmKCFlKXJldHVybiBuO3ZhciByLHMsaT1lLmNhbGwobiksbz1bXTt0cnl7Zm9yKDsodm9pZCAwPT09dHx8dC0tID4wKSYmIShyPWkubmV4dCgpKS5kb25lOylvLnB1c2goci52YWx1ZSl9Y2F0Y2goYSl7cz17ZXJyb3I6YX19ZmluYWxseXt0cnl7ciYmIXIuZG9uZSYmKGU9aS5yZXR1cm4pJiZlLmNhbGwoaSl9ZmluYWxseXtpZihzKXRocm93IHMuZXJyb3J9fXJldHVybiBvfSx6ZmU9d28mJndvLl9fc3ByZWFkfHxmdW5jdGlvbigpe2Zvcih2YXIgbj1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyluPW4uY29uY2F0KGQ2KGFyZ3VtZW50c1t0XSkpO3JldHVybiBufSxQRT13byYmd28uX19pbXBvcnRTdGFyfHxmdW5jdGlvbihuKXtpZihuJiZuLl9fZXNNb2R1bGUpcmV0dXJuIG47dmFyIHQ9e307aWYobnVsbCE9bilmb3IodmFyIGUgaW4gbilPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpJiYodFtlXT1uW2VdKTtyZXR1cm4gdC5kZWZhdWx0PW4sdH0sQiRlPXdvJiZ3by5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHdvLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbixWJGU9UEUoWkcoKSksY289UEUoSkcoKSksZ0Y9UEUoUWhlKCkpLGpmZT1QRShpNigpKSxNbz1QRShIYigpKSxIJGU9QiRlKChWZmUoKSxuPUJmZSxJNihMRSh7fSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbikpKSxfRj0uMDAxLFUkZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCl7dm9pZCAwPT09dCYmKHQ9e30pO3ZhciBlPXRoaXM7dGhpcy5sZWFybmluZ1JhdGU9MSx0aGlzLmxvY2FsQ29ubmVjdGl2aXR5PTEsdGhpcy5taW5EaXN0PS4xLHRoaXMubkNvbXBvbmVudHM9Mix0aGlzLm5FcG9jaHM9MCx0aGlzLm5OZWlnaGJvcnM9MTUsdGhpcy5uZWdhdGl2ZVNhbXBsZVJhdGU9NSx0aGlzLnJhbmRvbT1NYXRoLnJhbmRvbSx0aGlzLnJlcHVsc2lvblN0cmVuZ3RoPTEsdGhpcy5zZXRPcE1peFJhdGlvPTEsdGhpcy5zcHJlYWQ9MSx0aGlzLnRyYW5zZm9ybVF1ZXVlU2l6ZT00LHRoaXMudGFyZ2V0TWV0cmljPSJjYXRlZ29yaWNhbCIsdGhpcy50YXJnZXRXZWlnaHQ9LjUsdGhpcy50YXJnZXROTmVpZ2hib3JzPXRoaXMubk5laWdoYm9ycyx0aGlzLmRpc3RhbmNlRm49WWZlLHRoaXMuaXNJbml0aWFsaXplZD0hMSx0aGlzLnJwRm9yZXN0PVtdLHRoaXMuZW1iZWRkaW5nPVtdLHRoaXMub3B0aW1pemF0aW9uU3RhdGU9bmV3IGokZTt2YXIgaT1mdW5jdGlvbihyKXt2b2lkIDAhPT10W3JdJiYoZVtyXT10W3JdKX07aSgiZGlzdGFuY2VGbiIpLGkoImxlYXJuaW5nUmF0ZSIpLGkoImxvY2FsQ29ubmVjdGl2aXR5IiksaSgibWluRGlzdCIpLGkoIm5Db21wb25lbnRzIiksaSgibkVwb2NocyIpLGkoIm5OZWlnaGJvcnMiKSxpKCJuZWdhdGl2ZVNhbXBsZVJhdGUiKSxpKCJyYW5kb20iKSxpKCJyZXB1bHNpb25TdHJlbmd0aCIpLGkoInNldE9wTWl4UmF0aW8iKSxpKCJzcHJlYWQiKSxpKCJ0cmFuc2Zvcm1RdWV1ZVNpemUiKX1yZXR1cm4gbi5wcm90b3R5cGUuZml0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmluaXRpYWxpemVGaXQodCksdGhpcy5vcHRpbWl6ZUxheW91dCgpLHRoaXMuZW1iZWRkaW5nfSxuLnByb3RvdHlwZS5maXRBc3luYz1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT1mdW5jdGlvbigpe3JldHVybiEwfSksSGZlKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBVZmUodGhpcyxmdW5jdGlvbihpKXtzd2l0Y2goaS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmluaXRpYWxpemVGaXQodCksWzQsdGhpcy5vcHRpbWl6ZUxheW91dEFzeW5jKGUpXTtjYXNlIDE6cmV0dXJuIGkuc2VudCgpLFsyLHRoaXMuZW1iZWRkaW5nXX19KX0pfSxuLnByb3RvdHlwZS5zZXRTdXBlcnZpc2VkUHJvamVjdGlvbj1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KSx0aGlzLlk9dCx0aGlzLnRhcmdldE1ldHJpYz1lLnRhcmdldE1ldHJpY3x8dGhpcy50YXJnZXRNZXRyaWMsdGhpcy50YXJnZXRXZWlnaHQ9ZS50YXJnZXRXZWlnaHR8fHRoaXMudGFyZ2V0V2VpZ2h0LHRoaXMudGFyZ2V0Tk5laWdoYm9ycz1lLnRhcmdldE5OZWlnaGJvcnN8fHRoaXMudGFyZ2V0Tk5laWdoYm9yc30sbi5wcm90b3R5cGUuc2V0UHJlY29tcHV0ZWRLTk49ZnVuY3Rpb24odCxlKXt0aGlzLmtubkluZGljZXM9dCx0aGlzLmtubkRpc3RhbmNlcz1lfSxuLnByb3RvdHlwZS5pbml0aWFsaXplRml0PWZ1bmN0aW9uKHQpe2lmKHQubGVuZ3RoPD10aGlzLm5OZWlnaGJvcnMpdGhyb3cgbmV3IEVycm9yKCJOb3QgZW5vdWdoIGRhdGEgcG9pbnRzICgiK3QubGVuZ3RoKyIpIHRvIGNyZWF0ZSBuTmVpZ2hib3JzOiAiK3RoaXMubk5laWdoYm9ycysiLiAgQWRkIG1vcmUgZGF0YSBwb2ludHMgb3IgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uLiIpO2lmKHRoaXMuWD09PXQmJnRoaXMuaXNJbml0aWFsaXplZClyZXR1cm4gdGhpcy5nZXRORXBvY2hzKCk7aWYodGhpcy5YPXQsIXRoaXMua25uSW5kaWNlcyYmIXRoaXMua25uRGlzdGFuY2VzKXt2YXIgZT10aGlzLm5lYXJlc3ROZWlnaGJvcnModCk7dGhpcy5rbm5JbmRpY2VzPWUua25uSW5kaWNlcyx0aGlzLmtubkRpc3RhbmNlcz1lLmtubkRpc3RhbmNlc310aGlzLmdyYXBoPXRoaXMuZnV6enlTaW1wbGljaWFsU2V0KHQsdGhpcy5uTmVpZ2hib3JzLHRoaXMuc2V0T3BNaXhSYXRpbyksdGhpcy5tYWtlU2VhcmNoRm5zKCksdGhpcy5zZWFyY2hHcmFwaD10aGlzLm1ha2VTZWFyY2hHcmFwaCh0KSx0aGlzLnByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uKCk7dmFyIGk9dGhpcy5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZygpLG89aS50YWlsLHM9aS5lcG9jaHNQZXJTYW1wbGU7cmV0dXJuIHRoaXMub3B0aW1pemF0aW9uU3RhdGUuaGVhZD1pLmhlYWQsdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS50YWlsPW8sdGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5lcG9jaHNQZXJTYW1wbGU9cyx0aGlzLmluaXRpYWxpemVPcHRpbWl6YXRpb24oKSx0aGlzLnByZXBhcmVGb3JPcHRpbWl6YXRpb25Mb29wKCksdGhpcy5pc0luaXRpYWxpemVkPSEwLHRoaXMuZ2V0TkVwb2NocygpfSxuLnByb3RvdHlwZS5tYWtlU2VhcmNoRm5zPWZ1bmN0aW9uKCl7dmFyIHQ9Z0YubWFrZUluaXRpYWxpemF0aW9ucyh0aGlzLmRpc3RhbmNlRm4pLGk9dC5pbml0RnJvbVJhbmRvbTt0aGlzLmluaXRGcm9tVHJlZT10LmluaXRGcm9tVHJlZSx0aGlzLmluaXRGcm9tUmFuZG9tPWksdGhpcy5zZWFyY2g9Z0YubWFrZUluaXRpYWxpemVkTk5TZWFyY2godGhpcy5kaXN0YW5jZUZuKX0sbi5wcm90b3R5cGUubWFrZVNlYXJjaEdyYXBoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmtubkluZGljZXMsaT10aGlzLmtubkRpc3RhbmNlcyxvPW5ldyBjby5TcGFyc2VNYXRyaXgoW10sW10sW10sW3QubGVuZ3RoLHQubGVuZ3RoXSkscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgYT1lW3NdLGw9aVtzXSxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciBkPWxbY107ZD4wJiZvLnNldChzLGFbY10sZCl9dmFyIHA9Y28udHJhbnNwb3NlKG8pO3JldHVybiBjby5tYXhpbXVtKG8scCl9LG4ucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLGk9dGhpcy5YO2lmKHZvaWQgMD09PWl8fDA9PT1pLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIk5vIGRhdGEgaGFzIGJlZW4gZml0LiIpO3ZhciByPU1hdGguZmxvb3IodGhpcy5uTmVpZ2hib3JzKnRoaXMudHJhbnNmb3JtUXVldWVTaXplKTtyPU1hdGgubWluKGkubGVuZ3RoLHIpO3ZhciBvPWdGLmluaXRpYWxpemVTZWFyY2godGhpcy5ycEZvcmVzdCxpLHQscix0aGlzLmluaXRGcm9tUmFuZG9tLHRoaXMuaW5pdEZyb21UcmVlLHRoaXMucmFuZG9tKSxzPXRoaXMuc2VhcmNoKGksdGhpcy5zZWFyY2hHcmFwaCxvLHQpLGE9ViRlLmRlaGVhcFNvcnQocyksbD1hLmluZGljZXMsYz1hLndlaWdodHM7bD1sLm1hcChmdW5jdGlvbihkZSl7cmV0dXJuIGRlLnNsaWNlKDAsZS5uTmVpZ2hib3JzKX0pLGM9Yy5tYXAoZnVuY3Rpb24oZGUpe3JldHVybiBkZS5zbGljZSgwLGUubk5laWdoYm9ycyl9KTt2YXIgdT1NYXRoLm1heCgwLHRoaXMubG9jYWxDb25uZWN0aXZpdHktMSksZD10aGlzLnNtb290aEtOTkRpc3RhbmNlKGMsdGhpcy5uTmVpZ2hib3JzLHUpLGY9dGhpcy5jb21wdXRlTWVtYmVyc2hpcFN0cmVuZ3RocyhsLGMsZC5zaWdtYXMsZC5yaG9zKSxEPW5ldyBjby5TcGFyc2VNYXRyaXgoZi5yb3dzLGYuY29scyxmLnZhbHMsW3QubGVuZ3RoLGkubGVuZ3RoXSksVD1jby5ub3JtYWxpemUoRCwibDEiKSxrPWNvLmdldENTUihUKSxaPXQubGVuZ3RoLHVlPVpmZShNby5yZXNoYXBlMmQoay5pbmRpY2VzLFosdGhpcy5uTmVpZ2hib3JzKSxNby5yZXNoYXBlMmQoay52YWx1ZXMsWix0aGlzLm5OZWlnaGJvcnMpLHRoaXMuZW1iZWRkaW5nKSxoZT10aGlzLm5FcG9jaHM/dGhpcy5uRXBvY2hzLzM6RC5uUm93czw9MWU0PzEwMDozMCx3PUQuZ2V0VmFsdWVzKCkucmVkdWNlKGZ1bmN0aW9uKGRlLFkpe3JldHVybiBZPmRlP1k6ZGV9LDApO0Q9RC5tYXAoZnVuY3Rpb24oZGUpe3JldHVybiBkZTx3L2hlPzA6ZGV9KSxEPWNvLmVsaW1pbmF0ZVplcm9zKEQpO3ZhciBGPXRoaXMubWFrZUVwb2Noc1BlclNhbXBsZShELmdldFZhbHVlcygpLGhlKSxxPUQuZ2V0Um93cygpLEs9RC5nZXRDb2xzKCk7cmV0dXJuIHRoaXMuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzKHtoZWFkRW1iZWRkaW5nOnVlLHRhaWxFbWJlZGRpbmc6dGhpcy5lbWJlZGRpbmcsaGVhZDpxLHRhaWw6SyxjdXJyZW50RXBvY2g6MCxuRXBvY2hzOmhlLG5WZXJ0aWNlczpELmdldERpbXMoKVsxXSxlcG9jaHNQZXJTYW1wbGU6Rn0pLHRoaXMucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3AoKSx0aGlzLm9wdGltaXplTGF5b3V0KCl9LG4ucHJvdG90eXBlLnByb2Nlc3NHcmFwaEZvclN1cGVydmlzZWRQcm9qZWN0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5ZO2lmKGUpe2lmKGUubGVuZ3RoIT09dGhpcy5YLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBvZiBYIGFuZCB5IG11c3QgYmUgZXF1YWwiKTsiY2F0ZWdvcmljYWwiPT09dGhpcy50YXJnZXRNZXRyaWMmJih0aGlzLmdyYXBoPXRoaXMuY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uKHRoaXMuZ3JhcGgsZSx0aGlzLnRhcmdldFdlaWdodDwxPzEvKDEtdGhpcy50YXJnZXRXZWlnaHQpKjIuNToxZTEyKSl9fSxuLnByb3RvdHlwZS5zdGVwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2g7cmV0dXJuIHQ8dGhpcy5nZXRORXBvY2hzKCkmJnRoaXMub3B0aW1pemVMYXlvdXRTdGVwKHQpLHRoaXMub3B0aW1pemF0aW9uU3RhdGUuY3VycmVudEVwb2NofSxuLnByb3RvdHlwZS5nZXRFbWJlZGRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWJlZGRpbmd9LG4ucHJvdG90eXBlLm5lYXJlc3ROZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGYscj10aGlzLm5OZWlnaGJvcnMscz1nRi5tYWtlTk5EZXNjZW50KHRoaXMuZGlzdGFuY2VGbix0aGlzLnJhbmRvbSksbD01K01hdGguZmxvb3IoLjU9PShmPU1hdGgucG93KHQubGVuZ3RoLC41KS8yMCk/MDpNYXRoLnJvdW5kKGYpKSxjPU1hdGgubWF4KDUsTWF0aC5mbG9vcihNYXRoLnJvdW5kKGZ1bmN0aW9uKGYpe3JldHVybiBNYXRoLmxvZyhmKS9NYXRoLmxvZygyKX0odC5sZW5ndGgpKSkpO3RoaXMucnBGb3Jlc3Q9amZlLm1ha2VGb3Jlc3QodCxyLGwsdGhpcy5yYW5kb20pO3ZhciBkPXModCxqZmUubWFrZUxlYWZBcnJheSh0aGlzLnJwRm9yZXN0KSxyLGMpO3JldHVybntrbm5JbmRpY2VzOmQuaW5kaWNlcyxrbm5EaXN0YW5jZXM6ZC53ZWlnaHRzfX0sbi5wcm90b3R5cGUuZnV6enlTaW1wbGljaWFsU2V0PWZ1bmN0aW9uKHQsZSxpKXt2b2lkIDA9PT1pJiYoaT0xKTt2YXIgcj10aGlzLG89ci5rbm5JbmRpY2VzLHM9dm9pZCAwPT09bz9bXTpvLGE9ci5rbm5EaXN0YW5jZXMsbD12b2lkIDA9PT1hP1tdOmEsdT10aGlzLnNtb290aEtOTkRpc3RhbmNlKGwsZSxyLmxvY2FsQ29ubmVjdGl2aXR5KSxoPXRoaXMuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHMocyxsLHUuc2lnbWFzLHUucmhvcyksYj1uZXcgY28uU3BhcnNlTWF0cml4KGgucm93cyxoLmNvbHMsaC52YWxzLFt0Lmxlbmd0aCx0Lmxlbmd0aF0pLEQ9Y28udHJhbnNwb3NlKGIpLFQ9Y28ucGFpcndpc2VNdWx0aXBseShiLEQpLGs9Y28uc3VidHJhY3QoY28uYWRkKGIsRCksVCksWj1jby5tdWx0aXBseVNjYWxhcihrLGkpLHo9Y28ubXVsdGlwbHlTY2FsYXIoVCwxLWkpO3JldHVybiBjby5hZGQoWix6KX0sbi5wcm90b3R5cGUuY2F0ZWdvcmljYWxTaW1wbGljaWFsU2V0SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxpLHIpe3ZvaWQgMD09PXImJihyPTEpO3ZhciBvPVFmZSh0LGUscixpKTtyZXR1cm4gS2ZlKG89Y28uZWxpbWluYXRlWmVyb3MobykpfSxuLnByb3RvdHlwZS5zbW9vdGhLTk5EaXN0YW5jZT1mdW5jdGlvbih0LGUsaSxyLG8pe3ZvaWQgMD09PWkmJihpPTEpLHZvaWQgMD09PXImJihyPTY0KSx2b2lkIDA9PT1vJiYobz0xKTtmb3IodmFyIHM9TWF0aC5sb2coZSkvTWF0aC5sb2coMikqbyxhPU1vLnplcm9zKHQubGVuZ3RoKSxsPU1vLnplcm9zKHQubGVuZ3RoKSxjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PTAsZD0xLzAscD0xLGg9dFtjXSxmPWguZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiB6PjB9KTtpZihmLmxlbmd0aD49aSl7dmFyIG09TWF0aC5mbG9vcihpKSx4PWktbTttPjA/KGFbY109ZlttLTFdLHg+MWUtNSYmKGFbY10rPXgqKGZbbV0tZlttLTFdKSkpOmFbY109eCpmWzBdfWVsc2UgZi5sZW5ndGg+MCYmKGFbY109TW8ubWF4KGYpKTtmb3IodmFyIGc9MDtnPHI7ZysrKXtmb3IodmFyIGI9MCxEPTE7RDx0W2NdLmxlbmd0aDtEKyspe3ZhciBUPXRbY11bRF0tYVtjXTtiKz1UPjA/TWF0aC5leHAoLVQvcCk6MX1pZihNYXRoLmFicyhiLXMpPDFlLTUpYnJlYWs7Yj5zP3A9KHUrKGQ9cCkpLzI6KHU9cCxkPT09MS8wP3AqPTI6cD0odStkKS8yKX1pZihsW2NdPXAsYVtjXT4wKXt2YXIgaz1Nby5tZWFuKGgpO2xbY108X0YqayYmKGxbY109X0Yqayl9ZWxzZXt2YXIgWj1Nby5tZWFuKHQubWFwKE1vLm1lYW4pKTtsW2NdPF9GKlomJihsW2NdPV9GKlopfX1yZXR1cm57c2lnbWFzOmwscmhvczphfX0sbi5wcm90b3R5cGUuY29tcHV0ZU1lbWJlcnNoaXBTdHJlbmd0aHM9ZnVuY3Rpb24odCxlLGkscil7Zm9yKHZhciBvPXQubGVuZ3RoLHM9dFswXS5sZW5ndGgsYT1Nby56ZXJvcyhvKnMpLGw9TW8uemVyb3MobypzKSxjPU1vLnplcm9zKG8qcyksdT0wO3U8bzt1KyspZm9yKHZhciBkPTA7ZDxzO2QrKyl7dmFyIHA9MDstMSE9PXRbdV1bZF0mJihwPXRbdV1bZF09PT11PzA6ZVt1XVtkXS1yW3VdPD0wPzE6TWF0aC5leHAoLShlW3VdW2RdLXJbdV0pL2lbdV0pLGFbdSpzK2RdPXUsbFt1KnMrZF09dFt1XVtkXSxjW3UqcytkXT1wKX1yZXR1cm57cm93czphLGNvbHM6bCx2YWxzOmN9fSxuLnByb3RvdHlwZS5pbml0aWFsaXplU2ltcGxpY2lhbFNldEVtYmVkZGluZz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5nZXRORXBvY2hzKCksaT10aGlzLm5Db21wb25lbnRzLHI9dGhpcy5ncmFwaC5nZXRWYWx1ZXMoKSxvPTAscz0wO3M8ci5sZW5ndGg7cysrKW88cltzXSYmKG89cltzXSk7dmFyIGw9dGhpcy5ncmFwaC5tYXAoZnVuY3Rpb24obSl7cmV0dXJuIG08by9lPzA6bX0pO3RoaXMuZW1iZWRkaW5nPU1vLnplcm9zKGwublJvd3MpLm1hcChmdW5jdGlvbigpe3JldHVybiBNby56ZXJvcyhpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gMjAqTW8udGF1UmFuZCh0LnJhbmRvbSktMTB9KX0pO3ZhciBjPVtdLHU9W10sZD1bXSxwPWwuZ2V0QWxsKCk7Zm9yKHM9MDtzPHAubGVuZ3RoO3MrKyl7dmFyIGg9cFtzXTtoLnZhbHVlJiYoYy5wdXNoKGgudmFsdWUpLGQucHVzaChoLnJvdyksdS5wdXNoKGguY29sKSl9cmV0dXJue2hlYWQ6dSx0YWlsOmQsZXBvY2hzUGVyU2FtcGxlOnRoaXMubWFrZUVwb2Noc1BlclNhbXBsZShjLGUpfX0sbi5wcm90b3R5cGUubWFrZUVwb2Noc1BlclNhbXBsZT1mdW5jdGlvbih0LGUpe3ZhciBpPU1vLmZpbGxlZCh0Lmxlbmd0aCwtMSkscj1Nby5tYXgodCksbz10Lm1hcChmdW5jdGlvbihzKXtyZXR1cm4gcy9yKmV9KTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKHMsYSl7cz4wJiYoaVthXT1lL29bYV0pfSksaX0sbi5wcm90b3R5cGUuYXNzaWduT3B0aW1pemF0aW9uU3RhdGVQYXJhbWV0ZXJzPWZ1bmN0aW9uKHQpe09iamVjdC5hc3NpZ24odGhpcy5vcHRpbWl6YXRpb25TdGF0ZSx0KX0sbi5wcm90b3R5cGUucHJlcGFyZUZvck9wdGltaXphdGlvbkxvb3A9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9dC5yZXB1bHNpb25TdHJlbmd0aCxpPXQubGVhcm5pbmdSYXRlLHI9dC5uZWdhdGl2ZVNhbXBsZVJhdGUsbz10aGlzLm9wdGltaXphdGlvblN0YXRlLHM9by5lcG9jaHNQZXJTYW1wbGUsYT1vLmhlYWRFbWJlZGRpbmcsYz1hWzBdLmxlbmd0aCx1PWEubGVuZ3RoPT09by50YWlsRW1iZWRkaW5nLmxlbmd0aCxkPXMubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmL3J9KSxwPXpmZShkKSxoPXpmZShzKTt0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7ZXBvY2hPZk5leHRTYW1wbGU6aCxlcG9jaE9mTmV4dE5lZ2F0aXZlU2FtcGxlOnAsZXBvY2hzUGVyTmVnYXRpdmVTYW1wbGU6ZCxtb3ZlT3RoZXI6dSxpbml0aWFsQWxwaGE6aSxhbHBoYTppLGdhbW1hOmUsZGltOmN9KX0sbi5wcm90b3R5cGUuaW5pdGlhbGl6ZU9wdGltaXphdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW1iZWRkaW5nLGU9dGhpcy5lbWJlZGRpbmcsaT10aGlzLm9wdGltaXphdGlvblN0YXRlLHI9aS5oZWFkLG89aS50YWlsLHM9aS5lcG9jaHNQZXJTYW1wbGUsYT10aGlzLmdldE5FcG9jaHMoKSxsPXRoaXMuZ3JhcGgubkNvbHMsYz1YZmUodGhpcy5zcHJlYWQsdGhpcy5taW5EaXN0KTt0aGlzLmFzc2lnbk9wdGltaXphdGlvblN0YXRlUGFyYW1ldGVycyh7aGVhZEVtYmVkZGluZzp0LHRhaWxFbWJlZGRpbmc6ZSxoZWFkOnIsdGFpbDpvLGVwb2Noc1BlclNhbXBsZTpzLGE6Yy5hLGI6Yy5iLG5FcG9jaHM6YSxuVmVydGljZXM6bH0pfSxuLnByb3RvdHlwZS5vcHRpbWl6ZUxheW91dFN0ZXA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3B0aW1pemF0aW9uU3RhdGUsaT1lLmhlYWQscj1lLnRhaWwsbz1lLmhlYWRFbWJlZGRpbmcscz1lLnRhaWxFbWJlZGRpbmcsYT1lLmVwb2Noc1BlclNhbXBsZSxsPWUuZXBvY2hPZk5leHRTYW1wbGUsYz1lLmVwb2NoT2ZOZXh0TmVnYXRpdmVTYW1wbGUsdT1lLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlLGQ9ZS5tb3ZlT3RoZXIscD1lLmluaXRpYWxBbHBoYSxoPWUuYWxwaGEsZj1lLmdhbW1hLG09ZS5hLHg9ZS5iLGc9ZS5kaW0sYj1lLm5FcG9jaHMsRD1lLm5WZXJ0aWNlcyxrPTA7azxhLmxlbmd0aDtrKyspaWYoIShsW2tdPnQpKXt2YXIgWj1pW2tdLGZlPW9bWl0sdWU9c1tyW2tdXSxoZT1xZmUoZmUsdWUpLHc9MDtoZT4wJiYodz0tMiptKngqTWF0aC5wb3coaGUseC0xKSx3Lz1tKk1hdGgucG93KGhlLHgpKzEpO2Zvcih2YXIgRj0wO0Y8ZztGKyspe3ZhciBxPVdmZSh3KihmZVtGXS11ZVtGXSksNCk7ZmVbRl0rPXEqaCxkJiYodWVbRl0rPS1xKmgpfWxba10rPWFba107Zm9yKHZhciBLPU1hdGguZmxvb3IoKHQtY1trXSkvdVtrXSksZGU9MDtkZTxLO2RlKyspe3ZhciBZPU1vLnRhdVJhbmRJbnQoRCx0aGlzLnJhbmRvbSksYWU9c1tZXSxsZT1xZmUoZmUsYWUpLEllPTA7aWYobGU+MClJZT0yKmYqeCxJZS89KC4wMDErbGUpKihtKk1hdGgucG93KGxlLHgpKzEpO2Vsc2UgaWYoWj09PVkpY29udGludWU7Zm9yKEY9MDtGPGc7RisrKXE9NCxJZT4wJiYocT1XZmUoSWUqKGZlW0ZdLWFlW0ZdKSw0KSksZmVbRl0rPXEqaH1jW2tdKz1LKnVba119cmV0dXJuIGUuYWxwaGE9cCooMS10L2IpLGUuY3VycmVudEVwb2NoKz0xLG99LG4ucHJvdG90eXBlLm9wdGltaXplTGF5b3V0QXN5bmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gdm9pZCAwPT09dCYmKHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGkscil7dmFyIG89ZnVuY3Rpb24oKXtyZXR1cm4gSGZlKGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzLGEsYyx1LGQ7cmV0dXJuIFVmZSh0aGlzLGZ1bmN0aW9uKHApe3RyeXtpZihhPShzPXRoaXMub3B0aW1pemF0aW9uU3RhdGUpLm5FcG9jaHMsdGhpcy5lbWJlZGRpbmc9dGhpcy5vcHRpbWl6ZUxheW91dFN0ZXAocy5jdXJyZW50RXBvY2gpLHU9ITE9PT10KGM9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZS5jdXJyZW50RXBvY2gpLGQ9Yz09PWEsdXx8ZClyZXR1cm5bMixpKGQpXTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG8oKX0sMCl9Y2F0Y2goaCl7cihoKX1yZXR1cm5bMl19KX0pfTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIG8oKX0sMCl9KX0sbi5wcm90b3R5cGUub3B0aW1pemVMYXlvdXQ9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0pO2Zvcih2YXIgZT0hMSxpPVtdOyFlOyl7dmFyIHI9dGhpcy5vcHRpbWl6YXRpb25TdGF0ZSxvPXIubkVwb2NocztpPXRoaXMub3B0aW1pemVMYXlvdXRTdGVwKHIuY3VycmVudEVwb2NoKTt2YXIgYT10aGlzLm9wdGltaXphdGlvblN0YXRlLmN1cnJlbnRFcG9jaCxsPSExPT09dChhKTtlPWE9PT1vfHxsfXJldHVybiBpfSxuLnByb3RvdHlwZS5nZXRORXBvY2hzPWZ1bmN0aW9uKCl7aWYodGhpcy5uRXBvY2hzPjApcmV0dXJuIHRoaXMubkVwb2Noczt2YXIgZT10aGlzLmdyYXBoLm5Sb3dzO3JldHVybiBlPD0yNTAwPzUwMDplPD01ZTM/NDAwOmU8PTc1MDA/MzAwOjIwMH0sbn0oKTtmdW5jdGlvbiBZZmUobix0KXtmb3IodmFyIGU9MCxpPTA7aTxuLmxlbmd0aDtpKyspZSs9TWF0aC5wb3cobltpXS10W2ldLDIpO3JldHVybiBNYXRoLnNxcnQoZSl9d28uVU1BUD1VJGUsd28uZXVjbGlkZWFuPVlmZSx3by5jb3NpbmU9ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9MCxpPTAscj0wLG89MDtvPG4ubGVuZ3RoO28rKyllKz1uW29dKnRbb10saSs9TWF0aC5wb3cobltvXSwyKSxyKz1NYXRoLnBvdyh0W29dLDIpO3JldHVybiAwPT09aSYmMD09PXI/MDowPT09aXx8MD09PXI/MToxLWUvTWF0aC5zcXJ0KGkqcil9O3ZhciBqJGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRFcG9jaD0wLHRoaXMuaGVhZEVtYmVkZGluZz1bXSx0aGlzLnRhaWxFbWJlZGRpbmc9W10sdGhpcy5oZWFkPVtdLHRoaXMudGFpbD1bXSx0aGlzLmVwb2Noc1BlclNhbXBsZT1bXSx0aGlzLmVwb2NoT2ZOZXh0U2FtcGxlPVtdLHRoaXMuZXBvY2hPZk5leHROZWdhdGl2ZVNhbXBsZT1bXSx0aGlzLmVwb2Noc1Blck5lZ2F0aXZlU2FtcGxlPVtdLHRoaXMubW92ZU90aGVyPSEwLHRoaXMuaW5pdGlhbEFscGhhPTEsdGhpcy5hbHBoYT0xLHRoaXMuZ2FtbWE9MSx0aGlzLmE9MS41NzY5NDM0NjAzMTEzMDc3LHRoaXMuYj0uODk1MDYwODc3OTEwOTczMyx0aGlzLmRpbT0yLHRoaXMubkVwb2Nocz01MDAsdGhpcy5uVmVydGljZXM9MH07ZnVuY3Rpb24gV2ZlKG4sdCl7cmV0dXJuIG4+dD90Om48LXQ/LXQ6bn1mdW5jdGlvbiBxZmUobix0KXtmb3IodmFyIGU9MCxpPTA7aTxuLmxlbmd0aDtpKyspZSs9TWF0aC5wb3cobltpXS10W2ldLDIpO3JldHVybiBlfWZ1bmN0aW9uIFhmZShuLHQpe3ZhciBpPU1vLmxpbmVhcigwLDMqbiwzMDApLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcDx0PzE6cH0pLHI9TW8uemVyb3MoaS5sZW5ndGgpLm1hcChmdW5jdGlvbihwLGgpe3JldHVybiBpW2hdPj10P01hdGguZXhwKC0oaVtoXS10KS9uKTpwfSksbD1IJGUuZGVmYXVsdCh7eDppLHk6cn0sZnVuY3Rpb24ocCl7dmFyIGg9ZDYocCwyKSxmPWhbMF0sbT1oWzFdO3JldHVybiBmdW5jdGlvbih4KXtyZXR1cm4gMS8oMStmKk1hdGgucG93KHgsMiptKSl9fSx7ZGFtcGluZzoxLjUsaW5pdGlhbFZhbHVlczpbLjUsLjVdLGdyYWRpZW50RGlmZmVyZW5jZTouMSxtYXhJdGVyYXRpb25zOjEwMCxlcnJvclRvbGVyYW5jZTouMDF9KS5wYXJhbWV0ZXJWYWx1ZXMsYz1kNihsLDIpO3JldHVybnthOmNbMF0sYjpjWzFdfX1mdW5jdGlvbiBRZmUobix0LGUsaSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPTEpLHZvaWQgMD09PWkmJihpPTUpLG4ubWFwKGZ1bmN0aW9uKHIsbyxzKXtyZXR1cm4tMT09PXRbb118fC0xPT09dFtzXT9yKk1hdGguZXhwKC1lKTp0W29dIT09dFtzXT9yKk1hdGguZXhwKC1pKTpyfSl9ZnVuY3Rpb24gS2ZlKG4pe249Y28ubm9ybWFsaXplKG4sIm1heCIpO3ZhciB0PWNvLnRyYW5zcG9zZShuKSxlPWNvLnBhaXJ3aXNlTXVsdGlwbHkodCxuKTtyZXR1cm4gbj1jby5hZGQobixjby5zdWJ0cmFjdCh0LGUpKSxjby5lbGltaW5hdGVaZXJvcyhuKX1mdW5jdGlvbiBaZmUobix0LGUpe2Zvcih2YXIgaT1Nby56ZXJvcyhuLmxlbmd0aCkubWFwKGZ1bmN0aW9uKGwpe3JldHVybiBNby56ZXJvcyhlWzBdLmxlbmd0aCl9KSxyPTA7cjxuLmxlbmd0aDtyKyspZm9yKHZhciBvPTA7bzxuWzBdLmxlbmd0aDtvKyspZm9yKHZhciBzPTA7czxlWzBdLmxlbmd0aDtzKyspaVtyXVtzXSs9dFtyXVtvXSplW25bcl1bb11dW3NdO3JldHVybiBpfXdvLmZpbmRBQlBhcmFtcz1YZmUsd28uZmFzdEludGVyc2VjdGlvbj1RZmUsd28ucmVzZXRMb2NhbENvbm5lY3Rpdml0eT1LZmUsd28uaW5pdFRyYW5zZm9ybT1aZmV9KSwkZmU9UmQocDY9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHA2LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgRyRlPUpmZSgpO3A2LlVNQVA9RyRlLlVNQVB9KTtmdW5jdGlvbiBFbihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn1mdW5jdGlvbiBjMChuKXtsZXQgZT1uKGk9PntFcnJvci5jYWxsKGkpLGkuc3RhY2s9KG5ldyBFcnJvcikuc3RhY2t9KTtyZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX12YXIgVkU9YzAobj0+ZnVuY3Rpb24oZSl7bih0aGlzKSx0aGlzLm1lc3NhZ2U9ZT9gJHtlLmxlbmd0aH0gZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbiR7ZS5tYXAoKGkscik9PmAke3IrMX0pICR7aS50b1N0cmluZygpfWApLmpvaW4oIlxuICAiKX1gOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9ZX0pO2Z1bmN0aW9uIGtmKG4sdCl7aWYobil7bGV0IGU9bi5pbmRleE9mKHQpOzA8PWUmJm4uc3BsaWNlKGUsMSl9fXZhciBTbj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluaXRpYWxUZWFyZG93bj10LHRoaXMuY2xvc2VkPSExLHRoaXMuX3BhcmVudGFnZT1udWxsLHRoaXMuX2ZpbmFsaXplcnM9bnVsbH11bnN1YnNjcmliZSgpe2xldCB0O2lmKCF0aGlzLmNsb3NlZCl7dGhpcy5jbG9zZWQ9ITA7bGV0e19wYXJlbnRhZ2U6ZX09dGhpcztpZihlKWlmKHRoaXMuX3BhcmVudGFnZT1udWxsLEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBvIG9mIGUpby5yZW1vdmUodGhpcyk7ZWxzZSBlLnJlbW92ZSh0aGlzKTtsZXR7aW5pdGlhbFRlYXJkb3duOml9PXRoaXM7aWYoRW4oaSkpdHJ5e2koKX1jYXRjaChvKXt0PW8gaW5zdGFuY2VvZiBWRT9vLmVycm9yczpbb119bGV0e19maW5hbGl6ZXJzOnJ9PXRoaXM7aWYocil7dGhpcy5fZmluYWxpemVycz1udWxsO2ZvcihsZXQgbyBvZiByKXRyeXtQNihvKX1jYXRjaChzKXt0PXQ/P1tdLHMgaW5zdGFuY2VvZiBWRT90PVsuLi50LC4uLnMuZXJyb3JzXTp0LnB1c2gocyl9fWlmKHQpdGhyb3cgbmV3IFZFKHQpfX1hZGQodCl7dmFyIGU7aWYodCYmdCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpUDYodCk7ZWxzZXtpZih0IGluc3RhbmNlb2YgU24pe2lmKHQuY2xvc2VkfHx0Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO3QuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGU9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWU/ZTpbXSkucHVzaCh0KX19X2hhc1BhcmVudCh0KXtsZXR7X3BhcmVudGFnZTplfT10aGlzO3JldHVybiBlPT09dHx8QXJyYXkuaXNBcnJheShlKSYmZS5pbmNsdWRlcyh0KX1fYWRkUGFyZW50KHQpe2xldHtfcGFyZW50YWdlOmV9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoZSk/KGUucHVzaCh0KSxlKTplP1tlLHRdOnR9X3JlbW92ZVBhcmVudCh0KXtsZXR7X3BhcmVudGFnZTplfT10aGlzO2U9PT10P3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoZSkmJmtmKGUsdCl9cmVtb3ZlKHQpe2xldHtfZmluYWxpemVyczplfT10aGlzO2UmJmtmKGUsdCksdCBpbnN0YW5jZW9mIFNuJiZ0Ll9yZW1vdmVQYXJlbnQodGhpcyl9fTtTbi5FTVBUWT0oKCk9PntsZXQgbj1uZXcgU247cmV0dXJuIG4uY2xvc2VkPSEwLG59KSgpO3ZhciBzTj1Tbi5FTVBUWTtmdW5jdGlvbiBIRShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFNufHxuJiYiY2xvc2VkImluIG4mJkVuKG4ucmVtb3ZlKSYmRW4obi5hZGQpJiZFbihuLnVuc3Vic2NyaWJlKX1mdW5jdGlvbiBQNihuKXtFbihuKT9uKCk6bi51bnN1YnNjcmliZSgpfXZhciBDYz17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSx1MD17c2V0VGltZW91dChuLHQsLi4uZSl7bGV0e2RlbGVnYXRlOml9PXUwO3JldHVybiBpPy5zZXRUaW1lb3V0P2kuc2V0VGltZW91dChuLHQsLi4uZSk6c2V0VGltZW91dChuLHQsLi4uZSl9LGNsZWFyVGltZW91dChuKXtsZXR7ZGVsZWdhdGU6dH09dTA7cmV0dXJuKHQ/LmNsZWFyVGltZW91dHx8Y2xlYXJUaW1lb3V0KShuKX0sZGVsZWdhdGU6dm9pZCAwfTtmdW5jdGlvbiBVRShuKXt1MC5zZXRUaW1lb3V0KCgpPT57bGV0e29uVW5oYW5kbGVkRXJyb3I6dH09Q2M7aWYoIXQpdGhyb3cgbjt0KG4pfSl9ZnVuY3Rpb24gTWMoKXt9dmFyIFI2PWFOKCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBhTihuLHQsZSl7cmV0dXJue2tpbmQ6bix2YWx1ZTp0LGVycm9yOmV9fXZhciBGZj1udWxsO2Z1bmN0aW9uIGQwKG4pe2lmKENjLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2xldCB0PSFGZjtpZih0JiYoRmY9e2Vycm9yVGhyb3duOiExLGVycm9yOm51bGx9KSxuKCksdCl7bGV0e2Vycm9yVGhyb3duOmUsZXJyb3I6aX09RmY7aWYoRmY9bnVsbCxlKXRocm93IGl9fWVsc2UgbigpfXZhciBOZj1jbGFzcyBleHRlbmRzIFNue2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsdD8odGhpcy5kZXN0aW5hdGlvbj10LEhFKHQpJiZ0LmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj1zMGV9c3RhdGljIGNyZWF0ZSh0LGUsaSl7cmV0dXJuIG5ldyBPZCh0LGUsaSl9bmV4dCh0KXt0aGlzLmlzU3RvcHBlZD9jTihhTigiTiIsdCx2b2lkIDApLHRoaXMpOnRoaXMuX25leHQodCl9ZXJyb3IodCl7dGhpcy5pc1N0b3BwZWQ/Y04oYU4oIkUiLHZvaWQgMCx0KSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IodCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/Y04oUjYsdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQodCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KHQpfV9lcnJvcih0KXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcih0KX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fSxyMGU9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7ZnVuY3Rpb24gbE4obix0KXtyZXR1cm4gcjBlLmNhbGwobix0KX12YXIgT2Q9Y2xhc3MgZXh0ZW5kcyBOZntjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI7aWYoc3VwZXIoKSxFbih0KXx8IXQpcj17bmV4dDp0Pz92b2lkIDAsZXJyb3I6ZT8/dm9pZCAwLGNvbXBsZXRlOmk/P3ZvaWQgMH07ZWxzZXtsZXQgbzt0aGlzJiZDYy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQ/KG89T2JqZWN0LmNyZWF0ZSh0KSxvLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKCkscj17bmV4dDp0Lm5leHQmJmxOKHQubmV4dCxvKSxlcnJvcjp0LmVycm9yJiZsTih0LmVycm9yLG8pLGNvbXBsZXRlOnQuY29tcGxldGUmJmxOKHQuY29tcGxldGUsbyl9KTpyPXR9dGhpcy5kZXN0aW5hdGlvbj1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5wYXJ0aWFsT2JzZXJ2ZXI9dH1uZXh0KHQpe2xldHtwYXJ0aWFsT2JzZXJ2ZXI6ZX09dGhpcztpZihlLm5leHQpdHJ5e2UubmV4dCh0KX1jYXRjaChpKXt6RShpKX19ZXJyb3IodCl7bGV0e3BhcnRpYWxPYnNlcnZlcjplfT10aGlzO2lmKGUuZXJyb3IpdHJ5e2UuZXJyb3IodCl9Y2F0Y2goaSl7ekUoaSl9ZWxzZSB6RSh0KX1jb21wbGV0ZSgpe2xldHtwYXJ0aWFsT2JzZXJ2ZXI6dH09dGhpcztpZih0LmNvbXBsZXRlKXRyeXt0LmNvbXBsZXRlKCl9Y2F0Y2goZSl7ekUoZSl9fX0ocil9fTtmdW5jdGlvbiB6RShuKXtDYy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uKG4pe0NjLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJkZmJiYoRmYuZXJyb3JUaHJvd249ITAsRmYuZXJyb3I9bil9KG4pOlVFKG4pfWZ1bmN0aW9uIGNOKG4sdCl7bGV0e29uU3RvcHBlZE5vdGlmaWNhdGlvbjplfT1DYztlJiZ1MC5zZXRUaW1lb3V0KCgpPT5lKG4sdCkpfXZhciBzMGU9e2Nsb3NlZDohMCxuZXh0Ok1jLGVycm9yOmZ1bmN0aW9uKG4pe3Rocm93IG59LGNvbXBsZXRlOk1jfSxwMD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gbXMobil7cmV0dXJuIG59ZnVuY3Rpb24gcE4obil7cmV0dXJuIDA9PT1uLmxlbmd0aD9tczoxPT09bi5sZW5ndGg/blswXTpmdW5jdGlvbihlKXtyZXR1cm4gbi5yZWR1Y2UoKGkscik9PnIoaSksZSl9fXZhciB1bj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2UmJih0aGlzLl9zdWJzY3JpYmU9ZSl9bGlmdChlKXtsZXQgaT1uZXcgbjtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLm9wZXJhdG9yPWUsaX1zdWJzY3JpYmUoZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe3JldHVybiBuJiZuIGluc3RhbmNlb2YgTmZ8fGZ1bmN0aW9uKG4pe3JldHVybiBuJiZFbihuLm5leHQpJiZFbihuLmVycm9yKSYmRW4obi5jb21wbGV0ZSl9KG4pJiZIRShuKX0oZSk/ZTpuZXcgT2QoZSxpLHIpO3JldHVybiBkMCgoKT0+e2xldHtvcGVyYXRvcjpzLHNvdXJjZTphfT10aGlzO28uYWRkKHM/cy5jYWxsKG8sYSk6YT90aGlzLl9zdWJzY3JpYmUobyk6dGhpcy5fdHJ5U3Vic2NyaWJlKG8pKX0pLG99X3RyeVN1YnNjcmliZShlKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShlKX1jYXRjaChpKXtlLmVycm9yKGkpfX1mb3JFYWNoKGUsaSl7cmV0dXJuIG5ldyhpPU42KGkpKSgocixvKT0+e2xldCBzPW5ldyBPZCh7bmV4dDphPT57dHJ5e2UoYSl9Y2F0Y2gobCl7byhsKSxzLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpvLGNvbXBsZXRlOnJ9KTt0aGlzLnN1YnNjcmliZShzKX0pfV9zdWJzY3JpYmUoZSl7dmFyIGk7cmV0dXJuIG51bGw9PT0oaT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc3Vic2NyaWJlKGUpfVtwMF0oKXtyZXR1cm4gdGhpc31waXBlKC4uLmUpe3JldHVybiBwTihlKSh0aGlzKX10b1Byb21pc2UoZSl7cmV0dXJuIG5ldyhlPU42KGUpKSgoaSxyKT0+e2xldCBvO3RoaXMuc3Vic2NyaWJlKHM9Pm89cyxzPT5yKHMpLCgpPT5pKG8pKX0pfX1yZXR1cm4gbi5jcmVhdGU9dD0+bmV3IG4odCksbn0pKCk7ZnVuY3Rpb24gTjYobil7dmFyIHQ7cmV0dXJuIG51bGwhPT0odD1uPz9DYy5Qcm9taXNlKSYmdm9pZCAwIT09dD90OlByb21pc2V9ZnVuY3Rpb24gaE4obil7cmV0dXJuIEVuKG4/LmxpZnQpfWZ1bmN0aW9uIGVuKG4pe3JldHVybiB0PT57aWYoaE4odCkpcmV0dXJuIHQubGlmdChmdW5jdGlvbihlKXt0cnl7cmV0dXJuIG4oZSx0aGlzKX1jYXRjaChpKXt0aGlzLmVycm9yKGkpfX0pO3Rocm93IG5ldyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fWZ1bmN0aW9uIGp0KG4sdCxlLGkscil7cmV0dXJuIG5ldyBueChuLHQsZSxpLHIpfXZhciBmTixueD1jbGFzcyBleHRlbmRzIE5me2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzKXtzdXBlcih0KSx0aGlzLm9uRmluYWxpemU9byx0aGlzLnNob3VsZFVuc3Vic2NyaWJlPXMsdGhpcy5fbmV4dD1lP2Z1bmN0aW9uKGEpe3RyeXtlKGEpfWNhdGNoKGwpe3QuZXJyb3IobCl9fTpzdXBlci5fbmV4dCx0aGlzLl9lcnJvcj1yP2Z1bmN0aW9uKGEpe3RyeXtyKGEpfWNhdGNoKGwpe3QuZXJyb3IobCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fZXJyb3IsdGhpcy5fY29tcGxldGU9aT9mdW5jdGlvbigpe3RyeXtpKCl9Y2F0Y2goYSl7dC5lcnJvcihhKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19OnN1cGVyLl9jb21wbGV0ZX11bnN1YnNjcmliZSgpe3ZhciB0O2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe2xldHtjbG9zZWQ6ZX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFlJiYobnVsbD09PSh0PXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PXR8fHQuY2FsbCh0aGlzKSl9fX0saXg9Y2xhc3MgZXh0ZW5kcyB1bntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5zb3VyY2U9dCx0aGlzLnN1YmplY3RGYWN0b3J5PWUsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLGhOKHQpJiYodGhpcy5saWZ0PXQubGlmdCl9X3N1YnNjcmliZSh0KXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKHQpfWdldFN1YmplY3QoKXtsZXQgdD10aGlzLl9zdWJqZWN0O3JldHVybighdHx8dC5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9X3RlYXJkb3duKCl7dGhpcy5fcmVmQ291bnQ9MDtsZXR7X2Nvbm5lY3Rpb246dH09dGhpczt0aGlzLl9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0Py51bnN1YnNjcmliZSgpfWNvbm5lY3QoKXtsZXQgdD10aGlzLl9jb25uZWN0aW9uO2lmKCF0KXt0PXRoaXMuX2Nvbm5lY3Rpb249bmV3IFNuO2xldCBlPXRoaXMuZ2V0U3ViamVjdCgpO3QuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShqdChlLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksZS5jb21wbGV0ZSgpfSxpPT57dGhpcy5fdGVhcmRvd24oKSxlLmVycm9yKGkpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSx0LmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVsbCx0PVNuLkVNUFRZKX1yZXR1cm4gdH1yZWZDb3VudCgpe3JldHVybiBlbigobix0KT0+e2xldCBlPW51bGw7bi5fcmVmQ291bnQrKztsZXQgaT1qdCh0LHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIW58fG4uX3JlZkNvdW50PD0wfHwwPC0tbi5fcmVmQ291bnQpcmV0dXJuIHZvaWQoZT1udWxsKTtsZXQgcj1uLl9jb25uZWN0aW9uLG89ZTtlPW51bGwsciYmKCFvfHxyPT09bykmJnIudW5zdWJzY3JpYmUoKSx0LnVuc3Vic2NyaWJlKCl9KTtuLnN1YnNjcmliZShpKSxpLmNsb3NlZHx8KGU9bi5jb25uZWN0KCkpfSkodGhpcyl9fSxoMD17c2NoZWR1bGUobil7bGV0IHQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9Y2FuY2VsQW5pbWF0aW9uRnJhbWUse2RlbGVnYXRlOml9PWgwO2kmJih0PWkucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGU9aS5jYW5jZWxBbmltYXRpb25GcmFtZSk7bGV0IHI9dChvPT57ZT12b2lkIDAsbihvKX0pO3JldHVybiBuZXcgU24oKCk9PmU/LihyKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5uKXtsZXR7ZGVsZWdhdGU6dH09aDA7cmV0dXJuKHQ/LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5uKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4ubil7bGV0e2RlbGVnYXRlOnR9PWgwO3JldHVybih0Py5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpKC4uLm4pfSxkZWxlZ2F0ZTp2b2lkIDB9LEI2PWMwKG49PmZ1bmN0aW9uKCl7bih0aGlzKSx0aGlzLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzLm1lc3NhZ2U9Im9iamVjdCB1bnN1YnNjcmliZWQifSksa2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHVue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmNsb3NlZD0hMSx0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCx0aGlzLm9ic2VydmVycz1bXSx0aGlzLmlzU3RvcHBlZD0hMSx0aGlzLmhhc0Vycm9yPSExLHRoaXMudGhyb3duRXJyb3I9bnVsbH1saWZ0KGUpe2xldCBpPW5ldyBqRSh0aGlzLHRoaXMpO3JldHVybiBpLm9wZXJhdG9yPWUsaX1fdGhyb3dJZkNsb3NlZCgpe2lmKHRoaXMuY2xvc2VkKXRocm93IG5ldyBCNn1uZXh0KGUpe2QwKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IobGV0IGkgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWkubmV4dChlKX19KX1lcnJvcihlKXtkMCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1lO2xldHtvYnNlcnZlcnM6aX09dGhpcztmb3IoO2kubGVuZ3RoOylpLnNoaWZ0KCkuZXJyb3IoZSl9fSl9Y29tcGxldGUoKXtkMCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaXNTdG9wcGVkPSEwO2xldHtvYnNlcnZlcnM6ZX09dGhpcztmb3IoO2UubGVuZ3RoOyllLnNoaWZ0KCkuY29tcGxldGUoKX19KX11bnN1YnNjcmliZSgpe3RoaXMuaXNTdG9wcGVkPXRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPXRoaXMuY3VycmVudE9ic2VydmVycz1udWxsfWdldCBvYnNlcnZlZCgpe3ZhciBlO3JldHVybihudWxsPT09KGU9dGhpcy5vYnNlcnZlcnMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmxlbmd0aCk+MH1fdHJ5U3Vic2NyaWJlKGUpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc3VwZXIuX3RyeVN1YnNjcmliZShlKX1fc3Vic2NyaWJlKGUpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSx0aGlzLl9pbm5lclN1YnNjcmliZShlKX1faW5uZXJTdWJzY3JpYmUoZSl7bGV0e2hhc0Vycm9yOmksaXNTdG9wcGVkOnIsb2JzZXJ2ZXJzOm99PXRoaXM7cmV0dXJuIGl8fHI/c046KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLG8ucHVzaChlKSxuZXcgU24oKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxrZihvLGUpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpe2xldHtoYXNFcnJvcjppLHRocm93bkVycm9yOnIsaXNTdG9wcGVkOm99PXRoaXM7aT9lLmVycm9yKHIpOm8mJmUuY29tcGxldGUoKX1hc09ic2VydmFibGUoKXtsZXQgZT1uZXcgdW47cmV0dXJuIGUuc291cmNlPXRoaXMsZX19cmV0dXJuIG4uY3JlYXRlPSh0LGUpPT5uZXcgakUodCxlKSxufSkoKSxqRT1jbGFzcyBleHRlbmRzIGtle2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPXQsdGhpcy5zb3VyY2U9ZX1uZXh0KHQpe3ZhciBlLGk7bnVsbD09PShpPW51bGw9PT0oZT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5uZXh0KXx8dm9pZCAwPT09aXx8aS5jYWxsKGUsdCl9ZXJyb3IodCl7dmFyIGUsaTtudWxsPT09KGk9bnVsbD09PShlPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVycm9yKXx8dm9pZCAwPT09aXx8aS5jYWxsKGUsdCl9Y29tcGxldGUoKXt2YXIgdCxlO251bGw9PT0oZT1udWxsPT09KHQ9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY29tcGxldGUpfHx2b2lkIDA9PT1lfHxlLmNhbGwodCl9X3N1YnNjcmliZSh0KXt2YXIgZSxpO3JldHVybiBudWxsIT09KGk9bnVsbD09PShlPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zdWJzY3JpYmUodCkpJiZ2b2lkIDAhPT1pP2k6c059fSxocj1jbGFzcyBleHRlbmRzIGtle2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fdmFsdWU9dH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUodCl7bGV0IGU9c3VwZXIuX3N1YnNjcmliZSh0KTtyZXR1cm4hZS5jbG9zZWQmJnQubmV4dCh0aGlzLl92YWx1ZSksZX1nZXRWYWx1ZSgpe2xldHtoYXNFcnJvcjp0LHRocm93bkVycm9yOmUsX3ZhbHVlOml9PXRoaXM7aWYodCl0aHJvdyBlO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksaX1uZXh0KHQpe3N1cGVyLm5leHQodGhpcy5fdmFsdWU9dCl9fSxyeD17bm93OigpPT4ocnguZGVsZWdhdGV8fERhdGUpLm5vdygpLGRlbGVnYXRlOnZvaWQgMH0sTGY9Y2xhc3MgZXh0ZW5kcyBrZXtjb25zdHJ1Y3Rvcih0PTEvMCxlPTEvMCxpPXJ4KXtzdXBlcigpLHRoaXMuX2J1ZmZlclNpemU9dCx0aGlzLl93aW5kb3dUaW1lPWUsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9aSx0aGlzLl9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz1lPT09MS8wLHRoaXMuX2J1ZmZlclNpemU9TWF0aC5tYXgoMSx0KSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4KDEsZSl9bmV4dCh0KXtsZXR7aXNTdG9wcGVkOmUsX2J1ZmZlcjppLF9pbmZpbml0ZVRpbWVXaW5kb3c6cixfdGltZXN0YW1wUHJvdmlkZXI6byxfd2luZG93VGltZTpzfT10aGlzO2V8fChpLnB1c2godCksIXImJmkucHVzaChvLm5vdygpK3MpKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dCh0KX1fc3Vic2NyaWJlKHQpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7bGV0IGU9dGhpcy5faW5uZXJTdWJzY3JpYmUodCkse19pbmZpbml0ZVRpbWVXaW5kb3c6aSxfYnVmZmVyOnJ9PXRoaXMsbz1yLnNsaWNlKCk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aCYmIXQuY2xvc2VkO3MrPWk/MToyKXQubmV4dChvW3NdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyh0KSxlfV90cmltQnVmZmVyKCl7bGV0e19idWZmZXJTaXplOnQsX3RpbWVzdGFtcFByb3ZpZGVyOmUsX2J1ZmZlcjppLF9pbmZpbml0ZVRpbWVXaW5kb3c6cn09dGhpcyxvPShyPzE6MikqdDtpZih0PDEvMCYmbzxpLmxlbmd0aCYmaS5zcGxpY2UoMCxpLmxlbmd0aC1vKSwhcil7bGV0IHM9ZS5ub3coKSxhPTA7Zm9yKGxldCBsPTE7bDxpLmxlbmd0aCYmaVtsXTw9cztsKz0yKWE9bDthJiZpLnNwbGljZSgwLGErMSl9fX0sR0U9Y2xhc3MgZXh0ZW5kcyBTbntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCl9c2NoZWR1bGUodCxlPTApe3JldHVybiB0aGlzfX0sb3g9e3NldEludGVydmFsKG4sdCwuLi5lKXtsZXR7ZGVsZWdhdGU6aX09b3g7cmV0dXJuIGk/LnNldEludGVydmFsP2kuc2V0SW50ZXJ2YWwobix0LC4uLmUpOnNldEludGVydmFsKG4sdCwuLi5lKX0sY2xlYXJJbnRlcnZhbChuKXtsZXR7ZGVsZWdhdGU6dH09b3g7cmV0dXJuKHQ/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9LGd1PWNsYXNzIGV4dGVuZHMgR0V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWUsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKHQsZT0wKXt2YXIgaTtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPXQ7bGV0IHI9dGhpcy5pZCxvPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1yJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKG8scixlKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9ZSx0aGlzLmlkPW51bGwhPT0oaT10aGlzLmlkKSYmdm9pZCAwIT09aT9pOnRoaXMucmVxdWVzdEFzeW5jSWQobyx0aGlzLmlkLGUpLHRoaXN9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG94LnNldEludGVydmFsKHQuZmx1c2guYmluZCh0LHRoaXMpLGkpfXJlY3ljbGVBc3luY0lkKHQsZSxpPTApe2lmKG51bGwhPWkmJnRoaXMuZGVsYXk9PT1pJiYhMT09PXRoaXMucGVuZGluZylyZXR1cm4gZTtudWxsIT1lJiZveC5jbGVhckludGVydmFsKGUpfWV4ZWN1dGUodCxlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO2xldCBpPXRoaXMuX2V4ZWN1dGUodCxlKTtpZihpKXJldHVybiBpOyExPT09dGhpcy5wZW5kaW5nJiZudWxsIT10aGlzLmlkJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLHRoaXMuaWQsbnVsbCkpfV9leGVjdXRlKHQsZSl7bGV0IHIsaT0hMTt0cnl7dGhpcy53b3JrKHQpfWNhdGNoKG8pe2k9ITAscj1vfHxuZXcgRXJyb3IoIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3IiKX1pZihpKXJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCkscn11bnN1YnNjcmliZSgpe2lmKCF0aGlzLmNsb3NlZCl7bGV0e2lkOnQsc2NoZWR1bGVyOmV9PXRoaXMse2FjdGlvbnM6aX09ZTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxrZihpLHRoaXMpLG51bGwhPXQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZSx0LG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fSxjMGU9MSxtTj17fTtmdW5jdGlvbiBWNihuKXtyZXR1cm4gbiBpbiBtTiYmKGRlbGV0ZSBtTltuXSwhMCl9dmFyIEg2PXtzZXRJbW1lZGlhdGUobil7bGV0IHQ9YzBlKys7cmV0dXJuIG1OW3RdPSEwLGZOfHwoZk49UHJvbWlzZS5yZXNvbHZlKCkpLGZOLnRoZW4oKCk9PlY2KHQpJiZuKCkpLHR9LGNsZWFySW1tZWRpYXRlKG4pe1Y2KG4pfX0se3NldEltbWVkaWF0ZTp1MGUsY2xlYXJJbW1lZGlhdGU6ZDBlfT1INixzeD17c2V0SW1tZWRpYXRlKC4uLm4pe2xldHtkZWxlZ2F0ZTp0fT1zeDtyZXR1cm4odD8uc2V0SW1tZWRpYXRlfHx1MGUpKC4uLm4pfSxjbGVhckltbWVkaWF0ZShuKXtsZXR7ZGVsZWdhdGU6dH09c3g7cmV0dXJuKHQ/LmNsZWFySW1tZWRpYXRlfHxkMGUpKG4pfSxkZWxlZ2F0ZTp2b2lkIDB9LExwPWNsYXNze2NvbnN0cnVjdG9yKHQsZT1McC5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj10LHRoaXMubm93PWV9c2NoZWR1bGUodCxlPTAsaSl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyx0KS5zY2hlZHVsZShpLGUpfX07THAubm93PXJ4Lm5vdzt2YXIgX3U9Y2xhc3MgZXh0ZW5kcyBMcHtjb25zdHJ1Y3Rvcih0LGU9THAubm93KXtzdXBlcih0LGUpLHRoaXMuYWN0aW9ucz1bXSx0aGlzLl9hY3RpdmU9ITF9Zmx1c2godCl7bGV0IGkse2FjdGlvbnM6ZX09dGhpcztpZih0aGlzLl9hY3RpdmUpZS5wdXNoKHQpO2Vsc2V7dGhpcy5fYWN0aXZlPSEwO2Rve2lmKGk9dC5leGVjdXRlKHQuc3RhdGUsdC5kZWxheSkpYnJlYWt9d2hpbGUodD1lLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxpKXtmb3IoO3Q9ZS5zaGlmdCgpOyl0LnVuc3Vic2NyaWJlKCk7dGhyb3cgaX19fX0sZjA9bmV3IGNsYXNzIGV4dGVuZHMgX3V7Zmx1c2godCl7dGhpcy5fYWN0aXZlPSEwO2xldCBlPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2xldCByLHthY3Rpb25zOml9PXRoaXM7dD10fHxpLnNoaWZ0KCk7ZG97aWYocj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLHIpe2Zvcig7KHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyByfX19KGNsYXNzIGV4dGVuZHMgZ3V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPT1pJiZpPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLGkpOih0LmFjdGlvbnMucHVzaCh0aGlzKSx0Ll9zY2hlZHVsZWR8fCh0Ll9zY2hlZHVsZWQ9c3guc2V0SW1tZWRpYXRlKHQuZmx1c2guYmluZCh0LHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7dmFyIHI7aWYobnVsbCE9aT9pPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZCh0LGUsaSk7bGV0e2FjdGlvbnM6b309dDtudWxsIT1lJiYobnVsbD09PShyPW9bby5sZW5ndGgtMV0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmlkKSE9PWUmJihzeC5jbGVhckltbWVkaWF0ZShlKSx0Ll9zY2hlZHVsZWQ9dm9pZCAwKX19KSxrZD1uZXcgX3UoZ3UpLFU2PWtkLGdOPW5ldyBjbGFzcyBleHRlbmRzIF91e30oY2xhc3MgZXh0ZW5kcyBndXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy5zY2hlZHVsZXI9dCx0aGlzLndvcms9ZX1zY2hlZHVsZSh0LGU9MCl7cmV0dXJuIGU+MD9zdXBlci5zY2hlZHVsZSh0LGUpOih0aGlzLmRlbGF5PWUsdGhpcy5zdGF0ZT10LHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpLHRoaXMpfWV4ZWN1dGUodCxlKXtyZXR1cm4gZT4wfHx0aGlzLmNsb3NlZD9zdXBlci5leGVjdXRlKHQsZSk6dGhpcy5fZXhlY3V0ZSh0LGUpfXJlcXVlc3RBc3luY0lkKHQsZSxpPTApe3JldHVybiBudWxsIT1pJiZpPjB8fG51bGw9PWkmJnRoaXMuZGVsYXk+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZCh0LGUsaSk6KHQuZmx1c2godGhpcyksMCl9fSksX049bmV3IGNsYXNzIGV4dGVuZHMgX3V7Zmx1c2godCl7dGhpcy5fYWN0aXZlPSEwO2xldCBlPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2xldCByLHthY3Rpb25zOml9PXRoaXM7dD10fHxpLnNoaWZ0KCk7ZG97aWYocj10LmV4ZWN1dGUodC5zdGF0ZSx0LmRlbGF5KSlicmVha313aGlsZSgodD1pWzBdKSYmdC5pZD09PWUmJmkuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLHIpe2Zvcig7KHQ9aVswXSkmJnQuaWQ9PT1lJiZpLnNoaWZ0KCk7KXQudW5zdWJzY3JpYmUoKTt0aHJvdyByfX19KGNsYXNzIGV4dGVuZHMgZ3V7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMuc2NoZWR1bGVyPXQsdGhpcy53b3JrPWV9cmVxdWVzdEFzeW5jSWQodCxlLGk9MCl7cmV0dXJuIG51bGwhPT1pJiZpPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQodCxlLGkpOih0LmFjdGlvbnMucHVzaCh0aGlzKSx0Ll9zY2hlZHVsZWR8fCh0Ll9zY2hlZHVsZWQ9aDAucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT50LmZsdXNoKHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQodCxlLGk9MCl7dmFyIHI7aWYobnVsbCE9aT9pPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZCh0LGUsaSk7bGV0e2FjdGlvbnM6b309dDtudWxsIT1lJiYobnVsbD09PShyPW9bby5sZW5ndGgtMV0pfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmlkKSE9PWUmJihoMC5jYW5jZWxBbmltYXRpb25GcmFtZShlKSx0Ll9zY2hlZHVsZWQ9dm9pZCAwKX19KSxlbz1uZXcgdW4obj0+bi5jb21wbGV0ZSgpKTtmdW5jdGlvbiBaRShuKXtyZXR1cm4gbiYmRW4obi5zY2hlZHVsZSl9ZnVuY3Rpb24gdk4obil7cmV0dXJuIG5bbi5sZW5ndGgtMV19ZnVuY3Rpb24gdnUobil7cmV0dXJuIEVuKHZOKG4pKT9uLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiB5dShuKXtyZXR1cm4gWkUodk4obikpP24ucG9wKCk6dm9pZCAwfXZhciBkVz1vTih1VygpLDEpLHtfX2RlY29yYXRlOnBXLF9fYXdhaXRlcjpoVyxfX2F3YWl0OnQxLF9fYXN5bmNHZW5lcmF0b3I6ZlcsX19hc3luY1ZhbHVlczptV309ZFcuZGVmYXVsdCxnMD1uPT5uJiYibnVtYmVyIj09dHlwZW9mIG4ubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgbjtmdW5jdGlvbiBuMShuKXtyZXR1cm4gRW4obj8udGhlbil9ZnVuY3Rpb24gaTEobil7cmV0dXJuIEVuKG5bcDBdKX1mdW5jdGlvbiByMShuKXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJkVuKG4/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIG8xKG4pe3JldHVybiBuZXcgVHlwZUVycm9yKGBZb3UgcHJvdmlkZWQgJHtudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuPyJhbiBpbnZhbGlkIG9iamVjdCI6YCcke259J2B9IHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuYCl9dmFyIHMxPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IiO2Z1bmN0aW9uIGExKG4pe3JldHVybiBFbihuPy5bczFdKX1mdW5jdGlvbiBsMShuKXtyZXR1cm4gZlcodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7bGV0IGU9bi5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtsZXR7dmFsdWU6aSxkb25lOnJ9PXlpZWxkIHQxKGUucmVhZCgpKTtpZihyKXJldHVybiB5aWVsZCB0MSh2b2lkIDApO3lpZWxkIHlpZWxkIHQxKGkpfX1maW5hbGx5e2UucmVsZWFzZUxvY2soKX19KX1mdW5jdGlvbiBjMShuKXtyZXR1cm4gRW4obj8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBnaShuKXtpZihuIGluc3RhbmNlb2YgdW4pcmV0dXJuIG47aWYobnVsbCE9bil7aWYoaTEobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdW4odD0+e2xldCBlPW5bcDBdKCk7aWYoRW4oZS5zdWJzY3JpYmUpKXJldHVybiBlLnN1YnNjcmliZSh0KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpfSl9KG4pO2lmKGcwKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IHVuKHQ9Pntmb3IobGV0IGU9MDtlPG4ubGVuZ3RoJiYhdC5jbG9zZWQ7ZSsrKXQubmV4dChuW2VdKTt0LmNvbXBsZXRlKCl9KX0obik7aWYobjEobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdW4odD0+e24udGhlbihlPT57dC5jbG9zZWR8fCh0Lm5leHQoZSksdC5jb21wbGV0ZSgpKX0sZT0+dC5lcnJvcihlKSkudGhlbihudWxsLFVFKX0pfShuKTtpZihyMShuKSlyZXR1cm4gZ1cobik7aWYoYTEobikpcmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgdW4odD0+e2ZvcihsZXQgZSBvZiBuKWlmKHQubmV4dChlKSx0LmNsb3NlZClyZXR1cm47dC5jb21wbGV0ZSgpfSl9KG4pO2lmKGMxKG4pKXJldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZ1cobDEobikpfShuKX10aHJvdyBvMShuKX1mdW5jdGlvbiBnVyhuKXtyZXR1cm4gbmV3IHVuKHQ9PnsoZnVuY3Rpb24obix0KXt2YXIgZSxpLHIsbztyZXR1cm4gaFcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RyeXtmb3IoZT1tVyhuKTshKGk9eWllbGQgZS5uZXh0KCkpLmRvbmU7KWlmKHQubmV4dChpLnZhbHVlKSx0LmNsb3NlZClyZXR1cm59Y2F0Y2gocyl7cj17ZXJyb3I6c319ZmluYWxseXt0cnl7aSYmIWkuZG9uZSYmKG89ZS5yZXR1cm4pJiYoeWllbGQgby5jYWxsKGUpKX1maW5hbGx5e2lmKHIpdGhyb3cgci5lcnJvcn19dC5jb21wbGV0ZSgpfSl9KShuLHQpLmNhdGNoKGU9PnQuZXJyb3IoZSkpfSl9ZnVuY3Rpb24gQ2Eobix0LGUsaT0wLHI9ITEpe2xldCBvPXQuc2NoZWR1bGUoZnVuY3Rpb24oKXtlKCkscj9uLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsaSkpOnRoaXMudW5zdWJzY3JpYmUoKX0saSk7aWYobi5hZGQobyksIXIpcmV0dXJuIG99ZnVuY3Rpb24gQmYobix0PTApe3JldHVybiBlbigoZSxpKT0+e2Uuc3Vic2NyaWJlKGp0KGkscj0+Q2EoaSxuLCgpPT5pLm5leHQociksdCksKCk9PkNhKGksbiwoKT0+aS5jb21wbGV0ZSgpLHQpLHI9PkNhKGksbiwoKT0+aS5lcnJvcihyKSx0KSkpfSl9ZnVuY3Rpb24gdTEobix0PTApe3JldHVybiBlbigoZSxpKT0+e2kuYWRkKG4uc2NoZWR1bGUoKCk9PmUuc3Vic2NyaWJlKGkpLHQpKX0pfWZ1bmN0aW9uIGQxKG4sdCl7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgdW4oZT0+e0NhKGUsdCwoKT0+e2xldCBpPW5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7Q2EoZSx0LCgpPT57aS5uZXh0KCkudGhlbihyPT57ci5kb25lP2UuY29tcGxldGUoKTplLm5leHQoci52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIEVvKG4sdCl7cmV0dXJuIHQ/ZnVuY3Rpb24obix0KXtpZihudWxsIT1uKXtpZihpMShuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gZ2kobikucGlwZSh1MSh0KSxCZih0KSl9KG4sdCk7aWYoZzAobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyB1bihlPT57bGV0IGk9MDtyZXR1cm4gdC5zY2hlZHVsZShmdW5jdGlvbigpe2k9PT1uLmxlbmd0aD9lLmNvbXBsZXRlKCk6KGUubmV4dChuW2krK10pLGUuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0obix0KTtpZihuMShuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gZ2kobikucGlwZSh1MSh0KSxCZih0KSl9KG4sdCk7aWYocjEobikpcmV0dXJuIGQxKG4sdCk7aWYoYTEobikpcmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyB1bihlPT57bGV0IGk7cmV0dXJuIENhKGUsdCwoKT0+e2k9bltzMV0oKSxDYShlLHQsKCk9PntsZXQgcixvO3RyeXsoe3ZhbHVlOnIsZG9uZTpvfT1pLm5leHQoKSl9Y2F0Y2gocyl7cmV0dXJuIHZvaWQgZS5lcnJvcihzKX1vP2UuY29tcGxldGUoKTplLm5leHQocil9LDAsITApfSksKCk9PkVuKGk/LnJldHVybikmJmkucmV0dXJuKCl9KX0obix0KTtpZihjMShuKSlyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gZDEobDEobiksdCl9KG4sdCl9dGhyb3cgbzEobil9KG4sdCk6Z2kobil9ZnVuY3Rpb24gWHQoLi4ubil7cmV0dXJuIEVvKG4seXUobikpfWZ1bmN0aW9uIHdjKG4sdCl7bGV0IGU9RW4obik/bjooKT0+bixpPXI9PnIuZXJyb3IoZSgpKTtyZXR1cm4gbmV3IHVuKHQ/cj0+dC5zY2hlZHVsZShpLDAscik6aSl9dmFyIFJsPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmtpbmQ9dCx0aGlzLnZhbHVlPWUsdGhpcy5lcnJvcj1pLHRoaXMuaGFzVmFsdWU9Ik4iPT09dH1vYnNlcnZlKHQpe3JldHVybiBiTih0aGlzLHQpfWRvKHQsZSxpKXtsZXR7a2luZDpyLHZhbHVlOm8sZXJyb3I6c309dGhpcztyZXR1cm4iTiI9PT1yP3Q/LihvKToiRSI9PT1yP2U/LihzKTppPy4oKX1hY2NlcHQodCxlLGkpe3ZhciByO3JldHVybiBFbihudWxsPT09KHI9dCl8fHZvaWQgMD09PXI/dm9pZCAwOnIubmV4dCk/dGhpcy5vYnNlcnZlKHQpOnRoaXMuZG8odCxlLGkpfXRvT2JzZXJ2YWJsZSgpe2xldHtraW5kOnQsdmFsdWU6ZSxlcnJvcjppfT10aGlzLHI9Ik4iPT09dD9YdChlKToiRSI9PT10P3djKCgpPT5pKToiQyI9PT10P2VvOjA7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihgVW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCAke3R9YCk7cmV0dXJuIHJ9c3RhdGljIGNyZWF0ZU5leHQodCl7cmV0dXJuIG5ldyBSbCgiTiIsdCl9c3RhdGljIGNyZWF0ZUVycm9yKHQpe3JldHVybiBuZXcgUmwoIkUiLHZvaWQgMCx0KX1zdGF0aWMgY3JlYXRlQ29tcGxldGUoKXtyZXR1cm4gUmwuY29tcGxldGVOb3RpZmljYXRpb259fTtmdW5jdGlvbiBiTihuLHQpe3ZhciBlLGkscjtsZXR7a2luZDpvLHZhbHVlOnMsZXJyb3I6YX09bjtpZigic3RyaW5nIiE9dHlwZW9mIG8pdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7Ik4iPT09bz9udWxsPT09KGU9dC5uZXh0KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHQscyk6IkUiPT09bz9udWxsPT09KGk9dC5lcnJvcil8fHZvaWQgMD09PWl8fGkuY2FsbCh0LGEpOm51bGw9PT0ocj10LmNvbXBsZXRlKXx8dm9pZCAwPT09cnx8ci5jYWxsKHQpfWZ1bmN0aW9uIGF4KG4pe3JldHVybiEhbiYmKG4gaW5zdGFuY2VvZiB1bnx8RW4obi5saWZ0KSYmRW4obi5zdWJzY3JpYmUpKX1SbC5jb21wbGV0ZU5vdGlmaWNhdGlvbj1uZXcgUmwoIkMiKTt2YXIgXzA9YzAobj0+ZnVuY3Rpb24oKXtuKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBMKG4sdCl7cmV0dXJuIGVuKChlLGkpPT57bGV0IHI9MDtlLnN1YnNjcmliZShqdChpLG89PntpLm5leHQobi5jYWxsKHQsbyxyKyspKX0pKX0pfXZhcntpc0FycmF5OnkwZX09QXJyYXk7ZnVuY3Rpb24gQnAobil7cmV0dXJuIEwodD0+ZnVuY3Rpb24obix0KXtyZXR1cm4geTBlKHQpP24oLi4udCk6bih0KX0obix0KSl9dmFye2lzQXJyYXk6eDBlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6QzBlLHByb3RvdHlwZTpNMGUsa2V5czp3MGV9PU9iamVjdDtmdW5jdGlvbiBwMShuKXtpZigxPT09bi5sZW5ndGgpe2xldCB0PW5bMF07aWYoeDBlKHQpKXJldHVybnthcmdzOnQsa2V5czpudWxsfTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiYmIm9iamVjdCI9PXR5cGVvZiBuJiZDMGUobik9PT1NMGV9KHQpKXtsZXQgZT13MGUodCk7cmV0dXJue2FyZ3M6ZS5tYXAoaT0+dFtpXSksa2V5czplfX19cmV0dXJue2FyZ3M6bixrZXlzOm51bGx9fWZ1bmN0aW9uIGgxKG4sdCl7cmV0dXJuIG4ucmVkdWNlKChlLGkscik9PihlW2ldPXRbcl0sZSkse30pfWZ1bmN0aW9uIEx0KC4uLm4pe2xldCB0PXl1KG4pLGU9dnUobikse2FyZ3M6aSxrZXlzOnJ9PXAxKG4pO2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gRW8oW10sdCk7bGV0IG89bmV3IHVuKHhOKGksdCxyP3M9PmgxKHIscyk6bXMpKTtyZXR1cm4gZT9vLnBpcGUoQnAoZSkpOm99ZnVuY3Rpb24geE4obix0LGU9bXMpe3JldHVybiBpPT57d1codCwoKT0+e2xldHtsZW5ndGg6cn09bixvPW5ldyBBcnJheShyKSxzPXIsYT1yO2ZvcihsZXQgbD0wO2w8cjtsKyspd1codCwoKT0+e2xldCBjPUVvKG5bbF0sdCksdT0hMTtjLnN1YnNjcmliZShqdChpLGQ9PntvW2xdPWQsdXx8KHU9ITAsYS0tKSxhfHxpLm5leHQoZShvLnNsaWNlKCkpKX0sKCk9PnstLXN8fGkuY29tcGxldGUoKX0pKX0saSl9LGkpfX1mdW5jdGlvbiB3VyhuLHQsZSl7bj9DYShlLG4sdCk6dCgpfWZ1bmN0aW9uIHhuKG4sdCxlPTEvMCl7cmV0dXJuIEVuKHQpP3huKChpLHIpPT5MKChvLHMpPT50KGksbyxyLHMpKShnaShuKGkscikpKSxlKTooIm51bWJlciI9PXR5cGVvZiB0JiYoZT10KSxlbigoaSxyKT0+ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtsZXQgbD1bXSxjPTAsdT0wLGQ9ITEscD0oKT0+e2QmJiFsLmxlbmd0aCYmIWMmJnQuY29tcGxldGUoKX0saD1tPT5jPGk/ZihtKTpsLnB1c2gobSksZj1tPT57YysrO2xldCB4PSExO2dpKGUobSx1KyspKS5zdWJzY3JpYmUoanQodCxnPT57dC5uZXh0KGcpfSwoKT0+e3g9ITB9LHZvaWQgMCwoKT0+e2lmKHgpdHJ5e2ZvcihjLS07bC5sZW5ndGgmJmM8aTspe2xldCBnPWwuc2hpZnQoKTtmKGcpfXAoKX1jYXRjaChnKXt0LmVycm9yKGcpfX0pKX07cmV0dXJuIG4uc3Vic2NyaWJlKGp0KHQsaCwoKT0+e2Q9ITAscCgpfSkpLCgpPT57fX0oaSxyLG4sZSkpKX1mdW5jdGlvbiBmMShuPTEvMCl7cmV0dXJuIHhuKG1zLG4pfWZ1bmN0aW9uIFZwKC4uLm4pe3JldHVybiBmMSgxKShFbyhuLHl1KG4pKSl9ZnVuY3Rpb24gUWEobil7cmV0dXJuIG5ldyB1bih0PT57Z2kobigpKS5zdWJzY3JpYmUodCl9KX1mdW5jdGlvbiBsciguLi5uKXtsZXQgdD12dShuKSx7YXJnczplLGtleXM6aX09cDEobikscj1uZXcgdW4obz0+e2xldHtsZW5ndGg6c309ZTtpZighcylyZXR1cm4gdm9pZCBvLmNvbXBsZXRlKCk7bGV0IGE9bmV3IEFycmF5KHMpLGw9cyxjPXM7Zm9yKGxldCB1PTA7dTxzO3UrKyl7bGV0IGQ9ITE7Z2koZVt1XSkuc3Vic2NyaWJlKGp0KG8scD0+e2R8fChkPSEwLGMtLSksYVt1XT1wfSwoKT0+bC0tLHZvaWQgMCwoKT0+eyghbHx8IWQpJiYoY3x8by5uZXh0KGk/aDEoaSxhKTphKSxvLmNvbXBsZXRlKCkpfSkpfX0pO3JldHVybiB0P3IucGlwZShCcCh0KSk6cn12YXIgRTBlPVsiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciJdLFQwZT1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIl0sRDBlPVsib24iLCJvZmYiXTtmdW5jdGlvbiBfaShuLHQsZSxpKXtpZihFbihlKSYmKGk9ZSxlPXZvaWQgMCksaSlyZXR1cm4gX2kobix0LGUpLnBpcGUoQnAoaSkpO2xldFtyLG9dPWZ1bmN0aW9uKG4pe3JldHVybiBFbihuLmFkZEV2ZW50TGlzdGVuZXIpJiZFbihuLnJlbW92ZUV2ZW50TGlzdGVuZXIpfShuKT9UMGUubWFwKHM9PmE9Pm5bc10odCxhLGUpKTpmdW5jdGlvbihuKXtyZXR1cm4gRW4obi5hZGRMaXN0ZW5lcikmJkVuKG4ucmVtb3ZlTGlzdGVuZXIpfShuKT9FMGUubWFwKFRXKG4sdCkpOmZ1bmN0aW9uKG4pe3JldHVybiBFbihuLm9uKSYmRW4obi5vZmYpfShuKT9EMGUubWFwKFRXKG4sdCkpOltdO2lmKCFyJiZnMChuKSlyZXR1cm4geG4ocz0+X2kocyx0LGUpKShnaShuKSk7aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTtyZXR1cm4gbmV3IHVuKHM9PntsZXQgYT0oLi4ubCk9PnMubmV4dCgxPGwubGVuZ3RoP2w6bFswXSk7cmV0dXJuIHIoYSksKCk9Pm8oYSl9KX1mdW5jdGlvbiBUVyhuLHQpe3JldHVybiBlPT5pPT5uW2VdKHQsaSl9ZnVuY3Rpb24gS2Eobj0wLHQsZT1VNil7bGV0IGk9LTE7cmV0dXJuIG51bGwhPXQmJihaRSh0KT9lPXQ6aT10KSxuZXcgdW4ocj0+e2xldCBvPWZ1bmN0aW9uKG4pe3JldHVybiBuIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKG4pfShuKT8rbi1lLm5vdygpOm47bzwwJiYobz0wKTtsZXQgcz0wO3JldHVybiBlLnNjaGVkdWxlKGZ1bmN0aW9uKCl7ci5jbG9zZWR8fChyLm5leHQocysrKSwwPD1pP3RoaXMuc2NoZWR1bGUodm9pZCAwLGkpOnIuY29tcGxldGUoKSl9LG8pfSl9ZnVuY3Rpb24gSnQoLi4ubil7bGV0IHQ9eXUobiksZT1mdW5jdGlvbihuLHQpe3JldHVybiJudW1iZXIiPT10eXBlb2Ygdk4obik/bi5wb3AoKToxLzB9KG4pLGk9bjtyZXR1cm4gaS5sZW5ndGg/MT09PWkubGVuZ3RoP2dpKGlbMF0pOmYxKGUpKEVvKGksdCkpOmVvfXZhcntpc0FycmF5OlIwZX09QXJyYXk7ZnVuY3Rpb24gbTEobil7cmV0dXJuIDE9PT1uLmxlbmd0aCYmUjBlKG5bMF0pP25bMF06bn1mdW5jdGlvbiBZZShuLHQpe3JldHVybiBlbigoZSxpKT0+e2xldCByPTA7ZS5zdWJzY3JpYmUoanQoaSxvPT5uLmNhbGwodCxvLHIrKykmJmkubmV4dChvKSkpfSl9ZnVuY3Rpb24gYnUobix0PWtkKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGVuKCh0LGUpPT57bGV0IGk9ITEscj1udWxsLG89bnVsbCxzPSExLGE9KCk9PntpZihvPy51bnN1YnNjcmliZSgpLG89bnVsbCxpKXtpPSExO2xldCBjPXI7cj1udWxsLGUubmV4dChjKX1zJiZlLmNvbXBsZXRlKCl9LGw9KCk9PntvPW51bGwscyYmZS5jb21wbGV0ZSgpfTt0LnN1YnNjcmliZShqdChlLGM9PntpPSEwLHI9YyxvfHxnaShuKCkpLnN1YnNjcmliZShvPWp0KGUsYSxsKSl9LCgpPT57cz0hMCwoIWl8fCFvfHxvLmNsb3NlZCkmJmUuY29tcGxldGUoKX0pKX0pfSgoKT0+S2Eobix0KSl9ZnVuY3Rpb24gZm8obil7cmV0dXJuIGVuKCh0LGUpPT57bGV0IG8saT1udWxsLHI9ITE7aT10LnN1YnNjcmliZShqdChlLHZvaWQgMCx2b2lkIDAscz0+e289Z2kobihzLGZvKG4pKHQpKSksaT8oaS51bnN1YnNjcmliZSgpLGk9bnVsbCxvLnN1YnNjcmliZShlKSk6cj0hMH0pKSxyJiYoaS51bnN1YnNjcmliZSgpLGk9bnVsbCxvLnN1YnNjcmliZShlKSl9KX1mdW5jdGlvbiBBVyhuLHQsZSxpLHIpe3JldHVybihvLHMpPT57bGV0IGE9ZSxsPXQsYz0wO28uc3Vic2NyaWJlKGp0KHMsdT0+e2xldCBkPWMrKztsPWE/bihsLHUsZCk6KGE9ITAsdSksaSYmcy5uZXh0KGwpfSxyJiYoKCk9PnthJiZzLm5leHQobCkscy5jb21wbGV0ZSgpfSkpKX19ZnVuY3Rpb24gd04oLi4ubil7bGV0IHQ9dnUobik7cmV0dXJuIHQ/ZnVuY3Rpb24oLi4ubil7cmV0dXJuIHBOKG4pfSh3TiguLi5uKSxCcCh0KSk6ZW4oKGUsaSk9Pnt4TihbZSwuLi5tMShuKV0pKGkpfSl9ZnVuY3Rpb24gZnIoLi4ubil7cmV0dXJuIHdOKC4uLm4pfWZ1bmN0aW9uIEhyKG4sdD1rZCl7cmV0dXJuIGVuKChlLGkpPT57bGV0IHI9bnVsbCxvPW51bGwscz1udWxsLGE9KCk9PntpZihyKXtyLnVuc3Vic2NyaWJlKCkscj1udWxsO2xldCBjPW87bz1udWxsLGkubmV4dChjKX19O2Z1bmN0aW9uIGwoKXtsZXQgYz1zK24sdT10Lm5vdygpO2lmKHU8YylyZXR1cm4gcj10aGlzLnNjaGVkdWxlKHZvaWQgMCxjLXUpLHZvaWQgaS5hZGQocik7YSgpfWUuc3Vic2NyaWJlKGp0KGksYz0+e289YyxzPXQubm93KCkscnx8KHI9dC5zY2hlZHVsZShsLG4pLGkuYWRkKHIpKX0sKCk9PnthKCksaS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntvPXI9bnVsbH0pKX0pfWZ1bmN0aW9uIF8xKG4pe3JldHVybiBlbigodCxlKT0+e2xldCBpPSExO3Quc3Vic2NyaWJlKGp0KGUscj0+e2k9ITAsZS5uZXh0KHIpfSwoKT0+e2l8fGUubmV4dChuKSxlLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBRdChuKXtyZXR1cm4gbjw9MD8oKT0+ZW86ZW4oKHQsZSk9PntsZXQgaT0wO3Quc3Vic2NyaWJlKGp0KGUscj0+eysraTw9biYmKGUubmV4dChyKSxuPD1pJiZlLmNvbXBsZXRlKCkpfSkpfSl9ZnVuY3Rpb24gbHgoKXtyZXR1cm4gZW4oKG4sdCk9PntuLnN1YnNjcmliZShqdCh0LE1jKSl9KX1mdW5jdGlvbiB2MChuLHQpe3JldHVybiB0P2U9PlZwKHQucGlwZShRdCgxKSxseCgpKSxlLnBpcGUodjAobikpKTp4bigoZSxpKT0+bihlLGkpLnBpcGUoUXQoMSksZnVuY3Rpb24obil7cmV0dXJuIEwoKCk9Pm4pfShlKSkpfWZ1bmN0aW9uIE9sKG4sdD1rZCl7bGV0IGU9S2Eobix0KTtyZXR1cm4gdjAoKCk9PmUpfWZ1bmN0aW9uIHlpKG4sdD1tcyl7cmV0dXJuIG49bj8/TzBlLGVuKChlLGkpPT57bGV0IHIsbz0hMDtlLnN1YnNjcmliZShqdChpLHM9PntsZXQgYT10KHMpOyhvfHwhbihyLGEpKSYmKG89ITEscj1hLGkubmV4dChzKSl9KSl9KX1mdW5jdGlvbiBPMGUobix0KXtyZXR1cm4gbj09PXR9ZnVuY3Rpb24gdjEobj1rMGUpe3JldHVybiBlbigodCxlKT0+e2xldCBpPSExO3Quc3Vic2NyaWJlKGp0KGUscj0+e2k9ITAsZS5uZXh0KHIpfSwoKT0+aT9lLmNvbXBsZXRlKCk6ZS5lcnJvcihuKCkpKSl9KX1mdW5jdGlvbiBrMGUoKXtyZXR1cm4gbmV3IF8wfWZ1bmN0aW9uIHkxKG4sdCl7cmV0dXJuIHQ/ZT0+ZS5waXBlKHkxKChpLHIpPT5naShuKGkscikpLnBpcGUoTCgobyxzKT0+dChpLG8scixzKSkpKSk6ZW4oKGUsaSk9PntsZXQgcj0wLG89bnVsbCxzPSExO2Uuc3Vic2NyaWJlKGp0KGksYT0+e298fChvPWp0KGksdm9pZCAwLCgpPT57bz1udWxsLHMmJmkuY29tcGxldGUoKX0pLGdpKG4oYSxyKyspKS5zdWJzY3JpYmUobykpfSwoKT0+e3M9ITAsIW8mJmkuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIHgxKG4sdCxlLGkpe3JldHVybiBlbigocixvKT0+e2xldCBzO3QmJiJmdW5jdGlvbiIhPXR5cGVvZiB0Pyh7ZHVyYXRpb246ZSxlbGVtZW50OnMsY29ubmVjdG9yOml9PXQpOnM9dDtsZXQgYT1uZXcgTWFwLGw9Zj0+e2EuZm9yRWFjaChmKSxmKG8pfSxjPWY9PmwobT0+bS5lcnJvcihmKSksdT0wLGQ9ITEscD1uZXcgbngobyxmPT57dHJ5e2xldCBtPW4oZikseD1hLmdldChtKTtpZigheCl7YS5zZXQobSx4PWk/aSgpOm5ldyBrZSk7bGV0IGc9ZnVuY3Rpb24oZixtKXtsZXQgeD1uZXcgdW4oZz0+e3UrKztsZXQgYj1tLnN1YnNjcmliZShnKTtyZXR1cm4oKT0+e2IudW5zdWJzY3JpYmUoKSwwPT0tLXUmJmQmJnAudW5zdWJzY3JpYmUoKX19KTtyZXR1cm4geC5rZXk9Zix4fShtLHgpO2lmKG8ubmV4dChnKSxlKXtsZXQgYj1qdCh4LCgpPT57eC5jb21wbGV0ZSgpLGI/LnVuc3Vic2NyaWJlKCl9LHZvaWQgMCx2b2lkIDAsKCk9PmEuZGVsZXRlKG0pKTtwLmFkZChnaShlKGcpKS5zdWJzY3JpYmUoYikpfX14Lm5leHQocz9zKGYpOmYpfWNhdGNoKG0pe2MobSl9fSwoKT0+bChmPT5mLmNvbXBsZXRlKCkpLGMsKCk9PmEuY2xlYXIoKSwoKT0+KGQ9ITAsMD09PXUpKTtyLnN1YnNjcmliZShwKX0pfWZ1bmN0aW9uIFBXKG4pe3JldHVybiBuPD0wPygpPT5lbzplbigodCxlKT0+e2xldCBpPVtdO3Quc3Vic2NyaWJlKGp0KGUscj0+e2kucHVzaChyKSxuPGkubGVuZ3RoJiZpLnNoaWZ0KCl9LCgpPT57Zm9yKGxldCByIG9mIGkpZS5uZXh0KHIpO2UuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57aT1udWxsfSkpfSl9ZnVuY3Rpb24geTAoKXtyZXR1cm4gZW4oKG4sdCk9PntsZXQgZSxpPSExO24uc3Vic2NyaWJlKGp0KHQscj0+e2xldCBvPWU7ZT1yLGkmJnQubmV4dChbbyxyXSksaT0hMH0pKX0pfWZ1bmN0aW9uIFRzKG49e30pe2xldHtjb25uZWN0b3I6dD0oKCk9Pm5ldyBrZSkscmVzZXRPbkVycm9yOmU9ITAscmVzZXRPbkNvbXBsZXRlOmk9ITAscmVzZXRPblJlZkNvdW50WmVybzpyPSEwfT1uO3JldHVybiBvPT57bGV0IHMsYSxsLGM9MCx1PSExLGQ9ITEscD0oKT0+e2E/LnVuc3Vic2NyaWJlKCksYT12b2lkIDB9LGg9KCk9PntwKCkscz1sPXZvaWQgMCx1PWQ9ITF9LGY9KCk9PntsZXQgbT1zO2goKSxtPy51bnN1YnNjcmliZSgpfTtyZXR1cm4gZW4oKG0seCk9PntjKyssIWQmJiF1JiZwKCk7bGV0IGc9bD1sPz90KCk7eC5hZGQoKCk9PntjLS0sMD09PWMmJiFkJiYhdSYmKGE9Uk4oZixyKSl9KSxnLnN1YnNjcmliZSh4KSwhcyYmYz4wJiYocz1uZXcgT2Qoe25leHQ6Yj0+Zy5uZXh0KGIpLGVycm9yOmI9PntkPSEwLHAoKSxhPVJOKGgsZSxiKSxnLmVycm9yKGIpfSxjb21wbGV0ZTooKT0+e3U9ITAscCgpLGE9Uk4oaCxpKSxnLmNvbXBsZXRlKCl9fSksZ2kobSkuc3Vic2NyaWJlKHMpKX0pKG8pfX1mdW5jdGlvbiBSTihuLHQsLi4uZSl7aWYoITA9PT10KXJldHVybiB2b2lkIG4oKTtpZighMT09PXQpcmV0dXJuO2xldCBpPW5ldyBPZCh7bmV4dDooKT0+e2kudW5zdWJzY3JpYmUoKSxuKCl9fSk7cmV0dXJuIHQoLi4uZSkuc3Vic2NyaWJlKGkpfWZ1bmN0aW9uIE1hKG4sdCxlKXtsZXQgaSxyPSExO3JldHVybiBuJiYib2JqZWN0Ij09dHlwZW9mIG4/KHtidWZmZXJTaXplOmk9MS8wLHdpbmRvd1RpbWU6dD0xLzAscmVmQ291bnQ6cj0hMSxzY2hlZHVsZXI6ZX09bik6aT1uPz8xLzAsVHMoe2Nvbm5lY3RvcjooKT0+bmV3IExmKGksdCxlKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86cn0pfWZ1bmN0aW9uIFphKG4pe3JldHVybiBZZSgodCxlKT0+bjw9ZSl9ZnVuY3Rpb24gem4oLi4ubil7bGV0IHQ9eXUobik7cmV0dXJuIGVuKChlLGkpPT57KHQ/VnAobixlLHQpOlZwKG4sZSkpLnN1YnNjcmliZShpKX0pfWZ1bmN0aW9uIHVpKG4sdCl7cmV0dXJuIGVuKChlLGkpPT57bGV0IHI9bnVsbCxvPTAscz0hMSxhPSgpPT5zJiYhciYmaS5jb21wbGV0ZSgpO2Uuc3Vic2NyaWJlKGp0KGksbD0+e3I/LnVuc3Vic2NyaWJlKCk7bGV0IGM9MCx1PW8rKztnaShuKGwsdSkpLnN1YnNjcmliZShyPWp0KGksZD0+aS5uZXh0KHQ/dChsLGQsdSxjKyspOmQpLCgpPT57cj1udWxsLGEoKX0pKX0sKCk9PntzPSEwLGEoKX0pKX0pfWZ1bmN0aW9uIHN0KG4pe3JldHVybiBlbigodCxlKT0+e2dpKG4pLnN1YnNjcmliZShqdChlLCgpPT5lLmNvbXBsZXRlKCksTWMpKSwhZS5jbG9zZWQmJnQuc3Vic2NyaWJlKGUpfSl9ZnVuY3Rpb24gY3gobix0PSExKXtyZXR1cm4gZW4oKGUsaSk9PntsZXQgcj0wO2Uuc3Vic2NyaWJlKGp0KGksbz0+e2xldCBzPW4obyxyKyspOyhzfHx0KSYmaS5uZXh0KG8pLCFzJiZpLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBrdChuLHQsZSl7bGV0IGk9RW4obil8fHR8fGU/e25leHQ6bixlcnJvcjp0LGNvbXBsZXRlOmV9Om47cmV0dXJuIGk/ZW4oKHIsbyk9Pnt2YXIgcztudWxsPT09KHM9aS5zdWJzY3JpYmUpfHx2b2lkIDA9PT1zfHxzLmNhbGwoaSk7bGV0IGE9ITA7ci5zdWJzY3JpYmUoanQobyxsPT57dmFyIGM7bnVsbD09PShjPWkubmV4dCl8fHZvaWQgMD09PWN8fGMuY2FsbChpLGwpLG8ubmV4dChsKX0sKCk9Pnt2YXIgbDthPSExLG51bGw9PT0obD1pLmNvbXBsZXRlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpLG8uY29tcGxldGUoKX0sbD0+e3ZhciBjO2E9ITEsbnVsbD09PShjPWkuZXJyb3IpfHx2b2lkIDA9PT1jfHxjLmNhbGwoaSxsKSxvLmVycm9yKGwpfSwoKT0+e3ZhciBsLGM7YSYmKG51bGw9PT0obD1pLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09bHx8bC5jYWxsKGkpKSxudWxsPT09KGM9aS5maW5hbGl6ZSl8fHZvaWQgMD09PWN8fGMuY2FsbChpKX0pKX0pOm1zfXZhciBPTj17bGVhZGluZzohMCx0cmFpbGluZzohMX07ZnVuY3Rpb24gYjAobix0PWtkLGU9T04pe2xldCBpPUthKG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdD1PTil7cmV0dXJuIGVuKChlLGkpPT57bGV0e2xlYWRpbmc6cix0cmFpbGluZzpvfT10LHM9ITEsYT1udWxsLGw9bnVsbCxjPSExLHU9KCk9PntsPy51bnN1YnNjcmliZSgpLGw9bnVsbCxvJiYoaCgpLGMmJmkuY29tcGxldGUoKSl9LGQ9KCk9PntsPW51bGwsYyYmaS5jb21wbGV0ZSgpfSxwPWY9Pmw9Z2kobihmKSkuc3Vic2NyaWJlKGp0KGksdSxkKSksaD0oKT0+e2lmKHMpe3M9ITE7bGV0IGY9YTthPW51bGwsaS5uZXh0KGYpLCFjJiZwKGYpfX07ZS5zdWJzY3JpYmUoanQoaSxmPT57cz0hMCxhPWYsKCFsfHxsLmNsb3NlZCkmJihyP2goKTpwKGYpKX0sKCk9PntjPSEwLCghKG8mJnMmJmwpfHxsLmNsb3NlZCkmJmkuY29tcGxldGUoKX0pKX0pfSgoKT0+aSxlKX1mdW5jdGlvbiBXdCguLi5uKXtsZXQgdD12dShuKTtyZXR1cm4gZW4oKGUsaSk9PntsZXQgcj1uLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPW4ubWFwKCgpPT4hMSksYT0hMTtmb3IobGV0IGw9MDtsPHI7bCsrKWdpKG5bbF0pLnN1YnNjcmliZShqdChpLGM9PntvW2xdPWMsIWEmJiFzW2xdJiYoc1tsXT0hMCwoYT1zLmV2ZXJ5KG1zKSkmJihzPW51bGwpKX0sTWMpKTtlLnN1YnNjcmliZShqdChpLGw9PntpZihhKXtsZXQgYz1bbCwuLi5vXTtpLm5leHQodD90KC4uLmMpOmMpfX0pKX0pfWZ1bmN0aW9uIG1yKG4pe2ZvcihsZXQgdCBpbiBuKWlmKG5bdF09PT1tcilyZXR1cm4gdDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBvbiB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIGtOKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmIW4uaGFzT3duUHJvcGVydHkoZSkmJihuW2VdPXRbZV0pfWZ1bmN0aW9uIFRvKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbjtpZihBcnJheS5pc0FycmF5KG4pKXJldHVybiJbIituLm1hcChUbykuam9pbigiLCAiKSsiXSI7aWYobnVsbD09bilyZXR1cm4iIituO2lmKG4ub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7bi5vdmVycmlkZGVuTmFtZX1gO2lmKG4ubmFtZSlyZXR1cm5gJHtuLm5hbWV9YDtsZXQgdD1uLnRvU3RyaW5nKCk7aWYobnVsbD09dClyZXR1cm4iIit0O2xldCBlPXQuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWU/dDp0LnN1YnN0cmluZygwLGUpfWZ1bmN0aW9uIHRMKG4sdCl7cmV0dXJuIG51bGw9PW58fCIiPT09bj9udWxsPT09dD8iIjp0Om51bGw9PXR8fCIiPT09dD9uOm4rIiAiK3R9dmFyIEYwZT1tcih7X19mb3J3YXJkX3JlZl9fOm1yfSk7ZnVuY3Rpb24gSm4obil7cmV0dXJuIG4uX19mb3J3YXJkX3JlZl9fPUpuLG4udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gVG8odGhpcygpKX0sbn1mdW5jdGlvbiBLaShuKXtyZXR1cm4gRTcobik/bigpOm59ZnVuY3Rpb24gRTcobil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4mJm4uaGFzT3duUHJvcGVydHkoRjBlKSYmbi5fX2ZvcndhcmRfcmVmX189PT1Kbn12YXIgQXQ9Y2xhc3MgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKGZ1bmN0aW9uKG4sdCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMobil9JHt0PyI6ICIrdC50cmltKCk6IiJ9YH0odCxlKSksdGhpcy5jb2RlPXR9fTtmdW5jdGlvbiBLbihuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bjpudWxsPT1uPyIiOlN0cmluZyhuKX1mdW5jdGlvbiBvMyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uLm5hbWV8fG4udG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLm5hbWV8fG4udHlwZS50b1N0cmluZygpOktuKG4pfWZ1bmN0aW9uIHMzKG4sdCl7dGhyb3cgbmV3IEF0KC0yMDEsITEpfWZ1bmN0aW9uIFQ3KG4sdCxlLGkpe3Rocm93IG5ldyBFcnJvcihgQVNTRVJUSU9OIEVSUk9SOiAke259YCsobnVsbD09aT8iIjpgIFtFeHBlY3RlZD0+ICR7ZX0gJHtpfSAke3R9IDw9QWN0dWFsXWApKX1mdW5jdGlvbiB5ZShuKXtyZXR1cm57dG9rZW46bi50b2tlbixwcm92aWRlZEluOm4ucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5Om4uZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIFYobil7cmV0dXJue3Byb3ZpZGVyczpuLnByb3ZpZGVyc3x8W10saW1wb3J0czpuLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBhMyhuKXtyZXR1cm4gT1cobixMMSl8fE9XKG4sRDcpfWZ1bmN0aW9uIE9XKG4sdCl7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsfWZ1bmN0aW9uIGtXKG4pe3JldHVybiBuJiYobi5oYXNPd25Qcm9wZXJ0eShuTCl8fG4uaGFzT3duUHJvcGVydHkoVTBlKSk/bltuTF06bnVsbH12YXIgaUwsTDE9bXIoeyJcdTAyNzVwcm92Ijptcn0pLG5MPW1yKHsiXHUwMjc1aW5qIjptcn0pLEQ3PW1yKHtuZ0luamVjdGFibGVEZWY6bXJ9KSxVMGU9bXIoe25nSW5qZWN0b3JEZWY6bXJ9KSxkaT0oKCk9PntyZXR1cm4obj1kaXx8KGRpPXt9KSlbbi5EZWZhdWx0PTBdPSJEZWZhdWx0IixuW24uSG9zdD0xXT0iSG9zdCIsbltuLlNlbGY9Ml09IlNlbGYiLG5bbi5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLG5bbi5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGRpO3ZhciBufSkoKTtmdW5jdGlvbiBrbChuKXtsZXQgdD1pTDtyZXR1cm4gaUw9bix0fWZ1bmN0aW9uIEE3KG4sdCxlKXtsZXQgaT1hMyhuKTtyZXR1cm4gaSYmInJvb3QiPT1pLnByb3ZpZGVkSW4/dm9pZCAwPT09aS52YWx1ZT9pLnZhbHVlPWkuZmFjdG9yeSgpOmkudmFsdWU6ZSZkaS5PcHRpb25hbD9udWxsOnZvaWQgMCE9PXQ/dDp2b2lkIHMzKFRvKG4pKX1mdW5jdGlvbiBaZihuKXtyZXR1cm57dG9TdHJpbmc6bn0udG9TdHJpbmcoKX12YXIgcHg9KCgpPT57cmV0dXJuKG49cHh8fChweD17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixweDt2YXIgbn0pKCksSmE9KCgpPT57cmV0dXJuKG49SmF8fChKYT17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixKYTt2YXIgbn0pKCksdG89KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLEEwPXt9LFFpPVtdLGNUPW1yKHsiXHUwMjc1Y21wIjptcn0pLGwzPW1yKHsiXHUwMjc1ZGlyIjptcn0pLGMzPW1yKHsiXHUwMjc1cGlwZSI6bXJ9KSxJNz1tcih7Ilx1MDI3NW1vZCI6bXJ9KSxOZD1tcih7Ilx1MDI3NWZhYyI6bXJ9KSxoeD1tcih7X19OR19FTEVNRU5UX0lEX186bXJ9KSxqMGU9MDtmdW5jdGlvbiBSKG4pe3JldHVybiBaZigoKT0+e2xldCBlPSEwPT09bi5zdGFuZGFsb25lLGk9e30scj17dHlwZTpuLnR5cGUscHJvdmlkZXJzUmVzb2x2ZXI6bnVsbCxkZWNsczpuLmRlY2xzLHZhcnM6bi52YXJzLGZhY3Rvcnk6bnVsbCx0ZW1wbGF0ZTpuLnRlbXBsYXRlfHxudWxsLGNvbnN0czpuLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3RvcnM6bi5uZ0NvbnRlbnRTZWxlY3RvcnMsaG9zdEJpbmRpbmdzOm4uaG9zdEJpbmRpbmdzfHxudWxsLGhvc3RWYXJzOm4uaG9zdFZhcnN8fDAsaG9zdEF0dHJzOm4uaG9zdEF0dHJzfHxudWxsLGNvbnRlbnRRdWVyaWVzOm4uY29udGVudFF1ZXJpZXN8fG51bGwsZGVjbGFyZWRJbnB1dHM6aSxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsZXhwb3J0QXM6bi5leHBvcnRBc3x8bnVsbCxvblB1c2g6bi5jaGFuZ2VEZXRlY3Rpb249PT1weC5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsc3RhbmRhbG9uZTplLGRlcGVuZGVuY2llczplJiZuLmRlcGVuZGVuY2llc3x8bnVsbCxnZXRTdGFuZGFsb25lSW5qZWN0b3I6bnVsbCxzZWxlY3RvcnM6bi5zZWxlY3RvcnN8fFFpLHZpZXdRdWVyeTpuLnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpuLmZlYXR1cmVzfHxudWxsLGRhdGE6bi5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOm4uZW5jYXBzdWxhdGlvbnx8SmEuRW11bGF0ZWQsaWQ6ImMiK2owZSsrLHN0eWxlczpuLnN0eWxlc3x8UWksXzpudWxsLHNldElucHV0Om51bGwsc2NoZW1hczpuLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbH0sbz1uLmRlcGVuZGVuY2llcyxzPW4uZmVhdHVyZXM7cmV0dXJuIHIuaW5wdXRzPU5XKG4uaW5wdXRzLGkpLHIub3V0cHV0cz1OVyhuLm91dHB1dHMpLHMmJnMuZm9yRWFjaChhPT5hKHIpKSxyLmRpcmVjdGl2ZURlZnM9bz8oKT0+KCJmdW5jdGlvbiI9PXR5cGVvZiBvP28oKTpvKS5tYXAoUDcpLmZpbHRlcihGVyk6bnVsbCxyLnBpcGVEZWZzPW8/KCk9PigiZnVuY3Rpb24iPT10eXBlb2Ygbz9vKCk6bykubWFwKExkKS5maWx0ZXIoRlcpOm51bGwscn0pfWZ1bmN0aW9uIE54KG4sdCxlKXtsZXQgaT1uLlx1MDI3NWNtcDtpLmRpcmVjdGl2ZURlZnM9KCk9PigiZnVuY3Rpb24iPT10eXBlb2YgdD90KCk6dCkubWFwKFA3KSxpLnBpcGVEZWZzPSgpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGU/ZSgpOmUpLm1hcChMZCl9ZnVuY3Rpb24gUDcobil7cmV0dXJuIE5sKG4pfHxHZihuKX1mdW5jdGlvbiBGVyhuKXtyZXR1cm4gbnVsbCE9PW59ZnVuY3Rpb24gSChuKXtyZXR1cm4gWmYoKCk9Pih7dHlwZTpuLnR5cGUsYm9vdHN0cmFwOm4uYm9vdHN0cmFwfHxRaSxkZWNsYXJhdGlvbnM6bi5kZWNsYXJhdGlvbnN8fFFpLGltcG9ydHM6bi5pbXBvcnRzfHxRaSxleHBvcnRzOm4uZXhwb3J0c3x8UWksdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOm4uc2NoZW1hc3x8bnVsbCxpZDpuLmlkfHxudWxsfSkpfWZ1bmN0aW9uIE5XKG4sdCl7aWYobnVsbD09bilyZXR1cm4gQTA7bGV0IGU9e307Zm9yKGxldCBpIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShpKSl7bGV0IHI9bltpXSxvPXI7QXJyYXkuaXNBcnJheShyKSYmKG89clsxXSxyPXJbMF0pLGVbcl09aSx0JiYodFtyXT1vKX1yZXR1cm4gZX12YXIgSGU9UjtmdW5jdGlvbiBCMChuKXtyZXR1cm57dHlwZTpuLnR5cGUsbmFtZTpuLm5hbWUsZmFjdG9yeTpudWxsLHB1cmU6ITEhPT1uLnB1cmUsc3RhbmRhbG9uZTohMD09PW4uc3RhbmRhbG9uZSxvbkRlc3Ryb3k6bi50eXBlLnByb3RvdHlwZS5uZ09uRGVzdHJveXx8bnVsbH19ZnVuY3Rpb24gTmwobil7cmV0dXJuIG5bY1RdfHxudWxsfWZ1bmN0aW9uIEdmKG4pe3JldHVybiBuW2wzXXx8bnVsbH1mdW5jdGlvbiBMZChuKXtyZXR1cm4gbltjM118fG51bGx9ZnVuY3Rpb24gUjcobil7bGV0IHQ9Tmwobil8fEdmKG4pfHxMZChuKTtyZXR1cm4gbnVsbCE9PXQmJnQuc3RhbmRhbG9uZX1mdW5jdGlvbiBJMChuLHQpe2xldCBlPW5bSTddfHxudWxsO2lmKCFlJiYhMD09PXQpdGhyb3cgbmV3IEVycm9yKGBUeXBlICR7VG8obil9IGRvZXMgbm90IGhhdmUgJ1x1MDI3NW1vZCcgcHJvcGVydHkuYCk7cmV0dXJuIGV9ZnVuY3Rpb24gemYobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobikmJiJvYmplY3QiPT10eXBlb2YgblsxXX1mdW5jdGlvbiBWZChuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKSYmITA9PT1uWzFdfWZ1bmN0aW9uIHAzKG4pe3JldHVybiAwIT0oOCZuLmZsYWdzKX1mdW5jdGlvbiBoMyhuKXtyZXR1cm4gMj09KDImbi5mbGFncyl9ZnVuY3Rpb24gZFQobil7cmV0dXJuIDE9PSgxJm4uZmxhZ3MpfWZ1bmN0aW9uIEFjKG4pe3JldHVybiBudWxsIT09bi50ZW1wbGF0ZX1mdW5jdGlvbiBxMGUobil7cmV0dXJuIDAhPSgyNTYmblsyXSl9ZnVuY3Rpb24gV2Yobix0KXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eShOZCk/bltOZF06bnVsbH1mdW5jdGlvbiBGdCgpe3JldHVybiBGN31mdW5jdGlvbiBGNyhuKXtyZXR1cm4gbi50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKG4uc2V0SW5wdXQ9WDBlKSxZMGV9ZnVuY3Rpb24gWTBlKCl7bGV0IG49TDcodGhpcyksdD1uPy5jdXJyZW50O2lmKHQpe2xldCBlPW4ucHJldmlvdXM7aWYoZT09PUEwKW4ucHJldmlvdXM9dDtlbHNlIGZvcihsZXQgaSBpbiB0KWVbaV09dFtpXTtuLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKHQpfX1mdW5jdGlvbiBYMGUobix0LGUsaSl7bGV0IHI9TDcobil8fGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5bTjddPXR9KG4se3ByZXZpb3VzOkEwLGN1cnJlbnQ6bnVsbH0pLG89ci5jdXJyZW50fHwoci5jdXJyZW50PXt9KSxzPXIucHJldmlvdXMsYT10aGlzLmRlY2xhcmVkSW5wdXRzW2VdLGw9c1thXTtvW2FdPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5wcmV2aW91c1ZhbHVlPXQsdGhpcy5jdXJyZW50VmFsdWU9ZSx0aGlzLmZpcnN0Q2hhbmdlPWl9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX0obCYmbC5jdXJyZW50VmFsdWUsdCxzPT09QTApLG5baV09dH1GdC5uZ0luaGVyaXQ9ITA7dmFyIE43PSJfX25nU2ltcGxlQ2hhbmdlc19fIjtmdW5jdGlvbiBMNyhuKXtyZXR1cm4gbltON118fG51bGx9ZnVuY3Rpb24gJGEobil7Zm9yKDtBcnJheS5pc0FycmF5KG4pOyluPW5bMF07cmV0dXJuIG59ZnVuY3Rpb24gcFQobix0KXtyZXR1cm4gJGEodFtuXSl9ZnVuY3Rpb24gVWwobix0KXtyZXR1cm4gJGEodFtuLmluZGV4XSl9ZnVuY3Rpb24gSDcobix0KXtyZXR1cm4gbi5kYXRhW3RdfWZ1bmN0aW9uIEgwKG4sdCl7cmV0dXJuIG5bdF19ZnVuY3Rpb24gcXAobix0KXtsZXQgZT10W25dO3JldHVybiB6ZihlKT9lOmVbMF19ZnVuY3Rpb24gVTEobil7cmV0dXJuIDY0PT0oNjQmblsyXSl9ZnVuY3Rpb24gVXAobix0KXtyZXR1cm4gbnVsbD09dD9udWxsOm5bdF19ZnVuY3Rpb24gVTcobil7blsxOF09MH1mdW5jdGlvbiBmMyhuLHQpe25bNV0rPXQ7bGV0IGU9bixpPW5bM107Zm9yKDtudWxsIT09aSYmKDE9PT10JiYxPT09ZVs1XXx8LTE9PT10JiYwPT09ZVs1XSk7KWlbNV0rPXQsZT1pLGk9aVszXX12YXIgWm49e2xGcmFtZTpRNyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITB9O2Z1bmN0aW9uIHo3KCl7cmV0dXJuIFpuLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiBydCgpe3JldHVybiBabi5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gRmkoKXtyZXR1cm4gWm4ubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIG9lKG4pe3JldHVybiBabi5sRnJhbWUuY29udGV4dExWaWV3PW4sbls4XX1mdW5jdGlvbiBzZShuKXtyZXR1cm4gWm4ubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLG59ZnVuY3Rpb24gem8oKXtsZXQgbj1qNygpO2Zvcig7bnVsbCE9PW4mJjY0PT09bi50eXBlOyluPW4ucGFyZW50O3JldHVybiBufWZ1bmN0aW9uIGo3KCl7cmV0dXJuIFpuLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gd3goKXtsZXQgbj1abi5sRnJhbWUsdD1uLmN1cnJlbnRUTm9kZTtyZXR1cm4gbi5pc1BhcmVudD90OnQucGFyZW50fWZ1bmN0aW9uIE11KG4sdCl7bGV0IGU9Wm4ubEZyYW1lO2UuY3VycmVudFROb2RlPW4sZS5pc1BhcmVudD10fWZ1bmN0aW9uIG0zKCl7cmV0dXJuIFpuLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBnMygpe1puLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBLcygpe2xldCBuPVpuLmxGcmFtZSx0PW4uYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PXQmJih0PW4uYmluZGluZ1Jvb3RJbmRleD1uLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSx0fWZ1bmN0aW9uIEhkKCl7cmV0dXJuIFpuLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gRzcobil7cmV0dXJuIFpuLmxGcmFtZS5iaW5kaW5nSW5kZXg9bn1mdW5jdGlvbiBVMCgpe3JldHVybiBabi5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24gVWQobil7bGV0IHQ9Wm4ubEZyYW1lLGU9dC5iaW5kaW5nSW5kZXg7cmV0dXJuIHQuYmluZGluZ0luZGV4PXQuYmluZGluZ0luZGV4K24sZX1mdW5jdGlvbiBXNyhuKXtabi5sRnJhbWUuaW5JMThuPW59ZnVuY3Rpb24gc19lKG4sdCl7bGV0IGU9Wm4ubEZyYW1lO2UuYmluZGluZ0luZGV4PWUuYmluZGluZ1Jvb3RJbmRleD1uLHNMKHQpfWZ1bmN0aW9uIHNMKG4pe1puLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9bn1mdW5jdGlvbiBfMyhuKXtsZXQgdD1abi5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09dD9udWxsOm5bdF19ZnVuY3Rpb24gcTcoKXtyZXR1cm4gWm4ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIHYzKG4pe1puLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleD1ufWZ1bmN0aW9uIGxfZShuKXtsZXQgdD1uWzFdO3JldHVybiAyPT09dC50eXBlP3QuZGVjbFROb2RlOjE9PT10LnR5cGU/bls2XTpudWxsfWZ1bmN0aW9uIFk3KG4sdCxlKXtpZihlJmRpLlNraXBTZWxmKXtsZXQgcj10LG89bjtmb3IoOyEocj1yLnBhcmVudCxudWxsIT09cnx8ZSZkaS5Ib3N0fHwocj1sX2UobyksbnVsbD09PXJ8fChvPW9bMTVdLDEwJnIudHlwZSkpKTspO2lmKG51bGw9PT1yKXJldHVybiExO3Q9cixuPW99bGV0IGk9Wm4ubEZyYW1lPVg3KCk7cmV0dXJuIGkuY3VycmVudFROb2RlPXQsaS5sVmlldz1uLCEwfWZ1bmN0aW9uIHkzKG4pe2xldCB0PVg3KCksZT1uWzFdO1puLmxGcmFtZT10LHQuY3VycmVudFROb2RlPWUuZmlyc3RDaGlsZCx0LmxWaWV3PW4sdC50Vmlldz1lLHQuY29udGV4dExWaWV3PW4sdC5iaW5kaW5nSW5kZXg9ZS5iaW5kaW5nU3RhcnRJbmRleCx0LmluSTE4bj0hMX1mdW5jdGlvbiBYNygpe2xldCBuPVpuLmxGcmFtZSx0PW51bGw9PT1uP251bGw6bi5jaGlsZDtyZXR1cm4gbnVsbD09PXQ/UTcobik6dH1mdW5jdGlvbiBRNyhuKXtsZXQgdD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50Om4sY2hpbGQ6bnVsbCxpbkkxOG46ITF9O3JldHVybiBudWxsIT09biYmKG4uY2hpbGQ9dCksdH1mdW5jdGlvbiBLNygpe2xldCBuPVpuLmxGcmFtZTtyZXR1cm4gWm4ubEZyYW1lPW4ucGFyZW50LG4uY3VycmVudFROb2RlPW51bGwsbi5sVmlldz1udWxsLG59dmFyIFo3PUs3O2Z1bmN0aW9uIGIzKCl7bGV0IG49SzcoKTtuLmlzUGFyZW50PSEwLG4udFZpZXc9bnVsbCxuLnNlbGVjdGVkSW5kZXg9LTEsbi5jb250ZXh0TFZpZXc9bnVsbCxuLmVsZW1lbnREZXB0aENvdW50PTAsbi5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsbi5jdXJyZW50TmFtZXNwYWNlPW51bGwsbi5iaW5kaW5nUm9vdEluZGV4PS0xLG4uYmluZGluZ0luZGV4PS0xLG4uY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBacygpe3JldHVybiBabi5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiB6cChuKXtabi5sRnJhbWUuc2VsZWN0ZWRJbmRleD1ufWZ1bmN0aW9uIG5vKCl7bGV0IG49Wm4ubEZyYW1lO3JldHVybiBINyhuLnRWaWV3LG4uc2VsZWN0ZWRJbmRleCl9ZnVuY3Rpb24gSW4oKXtabi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ic3ZnIn1mdW5jdGlvbiBKcygpe1puLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlPW51bGx9ZnVuY3Rpb24gaFQobix0KXtmb3IobGV0IGU9dC5kaXJlY3RpdmVTdGFydCxpPXQuZGlyZWN0aXZlRW5kO2U8aTtlKyspe2xldCBvPW4uZGF0YVtlXS50eXBlLnByb3RvdHlwZSx7bmdBZnRlckNvbnRlbnRJbml0OnMsbmdBZnRlckNvbnRlbnRDaGVja2VkOmEsbmdBZnRlclZpZXdJbml0OmwsbmdBZnRlclZpZXdDaGVja2VkOmMsbmdPbkRlc3Ryb3k6dX09bztzJiYobi5jb250ZW50SG9va3N8fChuLmNvbnRlbnRIb29rcz1bXSkpLnB1c2goLWUscyksYSYmKChuLmNvbnRlbnRIb29rc3x8KG4uY29udGVudEhvb2tzPVtdKSkucHVzaChlLGEpLChuLmNvbnRlbnRDaGVja0hvb2tzfHwobi5jb250ZW50Q2hlY2tIb29rcz1bXSkpLnB1c2goZSxhKSksbCYmKG4udmlld0hvb2tzfHwobi52aWV3SG9va3M9W10pKS5wdXNoKC1lLGwpLGMmJigobi52aWV3SG9va3N8fChuLnZpZXdIb29rcz1bXSkpLnB1c2goZSxjKSwobi52aWV3Q2hlY2tIb29rc3x8KG4udmlld0NoZWNrSG9va3M9W10pKS5wdXNoKGUsYykpLG51bGwhPXUmJihuLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKSkucHVzaChlLHUpfX1mdW5jdGlvbiBEMShuLHQsZSl7Sjcobix0LDMsZSl9ZnVuY3Rpb24gQTEobix0LGUsaSl7KDMmblsyXSk9PT1lJiZKNyhuLHQsZSxpKX1mdW5jdGlvbiBGTihuLHQpe2xldCBlPW5bMl07KDMmZSk9PT10JiYoZSY9MjA0NyxlKz0xLG5bMl09ZSl9ZnVuY3Rpb24gSjcobix0LGUsaSl7bGV0IG89aT8/LTEscz10Lmxlbmd0aC0xLGE9MDtmb3IobGV0IGw9dm9pZCAwIT09aT82NTUzNSZuWzE4XTowO2w8cztsKyspaWYoIm51bWJlciI9PXR5cGVvZiB0W2wrMV0pe2lmKGE9dFtsXSxudWxsIT1pJiZhPj1pKWJyZWFrfWVsc2UgdFtsXTwwJiYoblsxOF0rPTY1NTM2KSwoYTxvfHwtMT09bykmJihtX2UobixlLHQsbCksblsxOF09KDQyOTQ5MDE3NjAmblsxOF0pK2wrMiksbCsrfWZ1bmN0aW9uIG1fZShuLHQsZSxpKXtsZXQgcj1lW2ldPDAsbz1lW2krMV0sYT1uW3I/LWVbaV06ZVtpXV07aWYocil7aWYoblsyXT4+MTE8blsxOF0+PjE2JiYoMyZuWzJdKT09PXQpe25bMl0rPTIwNDg7dHJ5e28uY2FsbChhKX1maW5hbGx5e319fWVsc2UgdHJ5e28uY2FsbChhKX1maW5hbGx5e319dmFyIHFmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmZhY3Rvcnk9dCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9ZSx0aGlzLmluamVjdEltcGw9aX19O2Z1bmN0aW9uIHoxKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aDspe2xldCByPWVbaV07aWYoIm51bWJlciI9PXR5cGVvZiByKXtpZigwIT09cilicmVhaztpKys7bGV0IG89ZVtpKytdLHM9ZVtpKytdLGE9ZVtpKytdO24uc2V0QXR0cmlidXRlKHQscyxhLG8pfWVsc2V7bGV0IG89cixzPWVbKytpXTtiX2Uobyk/bi5zZXRQcm9wZXJ0eSh0LG8scyk6bi5zZXRBdHRyaWJ1dGUodCxvLHMpLGkrK319cmV0dXJuIGl9ZnVuY3Rpb24gJDcobil7cmV0dXJuIDM9PT1ufHw0PT09bnx8Nj09PW59ZnVuY3Rpb24gYl9lKG4pe3JldHVybiA2ND09PW4uY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBqMShuLHQpe2lmKG51bGwhPT10JiYwIT09dC5sZW5ndGgpaWYobnVsbD09PW58fDA9PT1uLmxlbmd0aCluPXQuc2xpY2UoKTtlbHNle2xldCBlPS0xO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgcj10W2ldOyJudW1iZXIiPT10eXBlb2Ygcj9lPXI6MD09PWV8fFZXKG4sZSxyLG51bGwsLTE9PT1lfHwyPT09ZT90WysraV06bnVsbCl9fXJldHVybiBufWZ1bmN0aW9uIFZXKG4sdCxlLGkscil7bGV0IG89MCxzPW4ubGVuZ3RoO2lmKC0xPT09dClzPS0xO2Vsc2UgZm9yKDtvPG4ubGVuZ3RoOyl7bGV0IGE9bltvKytdO2lmKCJudW1iZXIiPT10eXBlb2YgYSl7aWYoYT09PXQpe3M9LTE7YnJlYWt9aWYoYT50KXtzPW8tMTticmVha319fWZvcig7bzxuLmxlbmd0aDspe2xldCBhPW5bb107aWYoIm51bWJlciI9PXR5cGVvZiBhKWJyZWFrO2lmKGE9PT1lKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09ciYmKG5bbysxXT1yKSk7aWYoaT09PW5bbysxXSlyZXR1cm4gdm9pZChuW28rMl09cil9bysrLG51bGwhPT1pJiZvKyssbnVsbCE9PXImJm8rK30tMSE9PXMmJihuLnNwbGljZShzLDAsdCksbz1zKzEpLG4uc3BsaWNlKG8rKywwLGUpLG51bGwhPT1pJiZuLnNwbGljZShvKyssMCxpKSxudWxsIT09ciYmbi5zcGxpY2UobysrLDAscil9ZnVuY3Rpb24gZTkobil7cmV0dXJuLTEhPT1ufWZ1bmN0aW9uIEcxKG4pe3JldHVybiAzMjc2NyZufWZ1bmN0aW9uIFcxKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4+PjE2fShuKSxpPXQ7Zm9yKDtlPjA7KWk9aVsxNV0sZS0tO3JldHVybiBpfXZhciBhTD0hMDtmdW5jdGlvbiBxMShuKXtsZXQgdD1hTDtyZXR1cm4gYUw9bix0fXZhciBNX2U9MCx4dT17fTtmdW5jdGlvbiBTeChuLHQpe2xldCBlPWk5KG4sdCk7aWYoLTEhPT1lKXJldHVybiBlO2xldCBpPXRbMV07aS5maXJzdENyZWF0ZVBhc3MmJihuLmluamVjdG9ySW5kZXg9dC5sZW5ndGgsTk4oaS5kYXRhLG4pLE5OKHQsbnVsbCksTk4oaS5ibHVlcHJpbnQsbnVsbCkpO2xldCByPUMzKG4sdCksbz1uLmluamVjdG9ySW5kZXg7aWYoZTkocikpe2xldCBzPUcxKHIpLGE9VzEocix0KSxsPWFbMV0uZGF0YTtmb3IobGV0IGM9MDtjPDg7YysrKXRbbytjXT1hW3MrY118bFtzK2NdfXJldHVybiB0W28rOF09cixvfWZ1bmN0aW9uIE5OKG4sdCl7bi5wdXNoKDAsMCwwLDAsMCwwLDAsMCx0KX1mdW5jdGlvbiBpOShuLHQpe3JldHVybi0xPT09bi5pbmplY3RvckluZGV4fHxuLnBhcmVudCYmbi5wYXJlbnQuaW5qZWN0b3JJbmRleD09PW4uaW5qZWN0b3JJbmRleHx8bnVsbD09PXRbbi5pbmplY3RvckluZGV4KzhdPy0xOm4uaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBDMyhuLHQpe2lmKG4ucGFyZW50JiYtMSE9PW4ucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIG4ucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGU9MCxpPW51bGwscj10O2Zvcig7bnVsbCE9PXI7KXtpZihpPWw5KHIpLG51bGw9PT1pKXJldHVybi0xO2lmKGUrKyxyPXJbMTVdLC0xIT09aS5pbmplY3RvckluZGV4KXJldHVybiBpLmluamVjdG9ySW5kZXh8ZTw8MTZ9cmV0dXJuLTF9ZnVuY3Rpb24gWTEobix0LGUpeyFmdW5jdGlvbihuLHQsZSl7bGV0IGk7InN0cmluZyI9PXR5cGVvZiBlP2k9ZS5jaGFyQ29kZUF0KDApfHwwOmUuaGFzT3duUHJvcGVydHkoaHgpJiYoaT1lW2h4XSksbnVsbD09aSYmKGk9ZVtoeF09TV9lKyspO2xldCByPTI1NSZpO3QuZGF0YVtuKyhyPj41KV18PTE8PHJ9KG4sdCxlKX1mdW5jdGlvbiByOShuLHQsZSl7aWYoZSZkaS5PcHRpb25hbHx8dm9pZCAwIT09bilyZXR1cm4gbjtzMygpfWZ1bmN0aW9uIG85KG4sdCxlLGkpe2lmKGUmZGkuT3B0aW9uYWwmJnZvaWQgMD09PWkmJihpPW51bGwpLDA9PShlJihkaS5TZWxmfGRpLkhvc3QpKSl7bGV0IHI9bls5XSxvPWtsKHZvaWQgMCk7dHJ5e3JldHVybiByP3IuZ2V0KHQsaSxlJmRpLk9wdGlvbmFsKTpBNyh0LGksZSZkaS5PcHRpb25hbCl9ZmluYWxseXtrbChvKX19cmV0dXJuIHI5KGksMCxlKX1mdW5jdGlvbiBzOShuLHQsZSxpPWRpLkRlZmF1bHQscil7aWYobnVsbCE9PW4pe2lmKDEwMjQmdFsyXSl7bGV0IHM9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1uLHM9dDtmb3IoO251bGwhPT1vJiZudWxsIT09cyYmMTAyNCZzWzJdJiYhKDI1NiZzWzJdKTspe2xldCBhPWE5KG8scyxlLGl8ZGkuU2VsZix4dSk7aWYoYSE9PXh1KXJldHVybiBhO2xldCBsPW8ucGFyZW50O2lmKCFsKXtsZXQgYz1zWzIxXTtpZihjKXtsZXQgdT1jLmdldChlLHh1LGkpO2lmKHUhPT14dSlyZXR1cm4gdX1sPWw5KHMpLHM9c1sxNV19bz1sfXJldHVybiByfShuLHQsZSxpLHh1KTtpZihzIT09eHUpcmV0dXJuIHN9bGV0IG89YTkobix0LGUsaSx4dSk7aWYobyE9PXh1KXJldHVybiBvfXJldHVybiBvOSh0LGUsaSxyKX1mdW5jdGlvbiBhOShuLHQsZSxpLHIpe2xldCBvPWZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciPT10eXBlb2YgbilyZXR1cm4gbi5jaGFyQ29kZUF0KDApfHwwO2xldCB0PW4uaGFzT3duUHJvcGVydHkoaHgpP25baHhdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/dD49MD8yNTUmdDpEX2U6dH0oZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe2lmKCFZNyh0LG4saSkpcmV0dXJuIGkmZGkuSG9zdD9yOShyLDAsaSk6bzkodCxlLGkscik7dHJ5e2xldCBzPW8oaSk7aWYobnVsbCE9c3x8aSZkaS5PcHRpb25hbClyZXR1cm4gcztzMygpfWZpbmFsbHl7WjcoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIG8pe2xldCBzPW51bGwsYT1pOShuLHQpLGw9LTEsYz1pJmRpLkhvc3Q/dFsxNl1bNl06bnVsbDtmb3IoKC0xPT09YXx8aSZkaS5Ta2lwU2VsZikmJihsPS0xPT09YT9DMyhuLHQpOnRbYSs4XSwtMSE9PWwmJlVXKGksITEpPyhzPXRbMV0sYT1HMShsKSx0PVcxKGwsdCkpOmE9LTEpOy0xIT09YTspe2xldCB1PXRbMV07aWYoSFcobyxhLHUuZGF0YSkpe2xldCBkPUVfZShhLHQsZSxzLGksYyk7aWYoZCE9PXh1KXJldHVybiBkfWw9dFthKzhdLC0xIT09bCYmVVcoaSx0WzFdLmRhdGFbYSs4XT09PWMpJiZIVyhvLGEsdCk/KHM9dSxhPUcxKGwpLHQ9VzEobCx0KSk6YT0tMX19cmV0dXJuIHJ9ZnVuY3Rpb24gRV9lKG4sdCxlLGkscixvKXtsZXQgcz10WzFdLGE9cy5kYXRhW24rOF0sdT1JMShhLHMsZSxudWxsPT1pP2gzKGEpJiZhTDppIT1zJiYwIT0oMyZhLnR5cGUpLHImZGkuSG9zdCYmbz09PWEpO3JldHVybiBudWxsIT09dT9CeCh0LHMsdSxhKTp4dX1mdW5jdGlvbiBJMShuLHQsZSxpLHIpe2xldCBvPW4ucHJvdmlkZXJJbmRleGVzLHM9dC5kYXRhLGE9MTA0ODU3NSZvLGw9bi5kaXJlY3RpdmVTdGFydCx1PW8+PjIwLHA9cj9hK3U6bi5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBoPWk/YTphK3U7aDxwO2grKyl7bGV0IGY9c1toXTtpZihoPGwmJmU9PT1mfHxoPj1sJiZmLnR5cGU9PT1lKXJldHVybiBofWlmKHIpe2xldCBoPXNbbF07aWYoaCYmQWMoaCkmJmgudHlwZT09PWUpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gQngobix0LGUsaSl7bGV0IHI9bltlXSxvPXQuZGF0YTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIHFmfShyKSl7bGV0IHM9cjtzLnJlc29sdmluZyYmZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgQXQoLTIwMCxgQ2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBESSBkZXRlY3RlZCBmb3IgJHtufWApfShvMyhvW2VdKSk7bGV0IGE9cTEocy5jYW5TZWVWaWV3UHJvdmlkZXJzKTtzLnJlc29sdmluZz0hMDtsZXQgbD1zLmluamVjdEltcGw/a2wocy5pbmplY3RJbXBsKTpudWxsO1k3KG4saSxkaS5EZWZhdWx0KTt0cnl7cj1uW2VdPXMuZmFjdG9yeSh2b2lkIDAsbyxuLGkpLHQuZmlyc3RDcmVhdGVQYXNzJiZlPj1pLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbihuLHQsZSl7bGV0e25nT25DaGFuZ2VzOmksbmdPbkluaXQ6cixuZ0RvQ2hlY2s6b309dC50eXBlLnByb3RvdHlwZTtpZihpKXtsZXQgcz1GNyh0KTsoZS5wcmVPcmRlckhvb2tzfHwoZS5wcmVPcmRlckhvb2tzPVtdKSkucHVzaChuLHMpLChlLnByZU9yZGVyQ2hlY2tIb29rc3x8KGUucHJlT3JkZXJDaGVja0hvb2tzPVtdKSkucHVzaChuLHMpfXImJihlLnByZU9yZGVySG9va3N8fChlLnByZU9yZGVySG9va3M9W10pKS5wdXNoKDAtbixyKSxvJiYoKGUucHJlT3JkZXJIb29rc3x8KGUucHJlT3JkZXJIb29rcz1bXSkpLnB1c2gobixvKSwoZS5wcmVPcmRlckNoZWNrSG9va3N8fChlLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2gobixvKSl9KGUsb1tlXSx0KX1maW5hbGx5e251bGwhPT1sJiZrbChsKSxxMShhKSxzLnJlc29sdmluZz0hMSxaNygpfX1yZXR1cm4gcn1mdW5jdGlvbiBIVyhuLHQsZSl7cmV0dXJuISEoZVt0KyhuPj41KV0mMTw8bil9ZnVuY3Rpb24gVVcobix0KXtyZXR1cm4hKG4mZGkuU2VsZnx8biZkaS5Ib3N0JiZ0KX12YXIgamY9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl90Tm9kZT10LHRoaXMuX2xWaWV3PWV9Z2V0KHQsZSxpKXtyZXR1cm4gczkodGhpcy5fdE5vZGUsdGhpcy5fbFZpZXcsdCxpLGUpfX07ZnVuY3Rpb24gRF9lKCl7cmV0dXJuIG5ldyBqZih6bygpLHJ0KCkpfWZ1bmN0aW9uIHBpKG4pe3JldHVybiBaZigoKT0+e2xldCB0PW4ucHJvdG90eXBlLmNvbnN0cnVjdG9yLGU9dFtOZF18fGxMKHQpLGk9T2JqZWN0LnByb3RvdHlwZSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZihuLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtyJiZyIT09aTspe2xldCBvPXJbTmRdfHxsTChyKTtpZihvJiZvIT09ZSlyZXR1cm4gbztyPU9iamVjdC5nZXRQcm90b3R5cGVPZihyKX1yZXR1cm4gbz0+bmV3IG99KX1mdW5jdGlvbiBsTChuKXtyZXR1cm4gRTcobik/KCk9PntsZXQgdD1sTChLaShuKSk7cmV0dXJuIHQmJnQoKX06V2Yobil9ZnVuY3Rpb24gbDkobil7bGV0IHQ9blsxXSxlPXQudHlwZTtyZXR1cm4gMj09PWU/dC5kZWNsVE5vZGU6MT09PWU/bls2XTpudWxsfWZ1bmN0aW9uIHZvKG4pe3JldHVybiBmdW5jdGlvbihuLHQpe2lmKCJjbGFzcyI9PT10KXJldHVybiBuLmNsYXNzZXM7aWYoInN0eWxlIj09PXQpcmV0dXJuIG4uc3R5bGVzO2xldCBlPW4uYXR0cnM7aWYoZSl7bGV0IGk9ZS5sZW5ndGgscj0wO2Zvcig7cjxpOyl7bGV0IG89ZVtyXTtpZigkNyhvKSlicmVhaztpZigwPT09bylyKz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBvKWZvcihyKys7cjxpJiYic3RyaW5nIj09dHlwZW9mIGVbcl07KXIrKztlbHNle2lmKG89PT10KXJldHVybiBlW3IrMV07cis9Mn19fXJldHVybiBudWxsfSh6bygpLG4pfXZhciBNMD0iX19hbm5vdGF0aW9uc19fIix3MD0iX19wYXJhbWV0ZXJzX18iLFMwPSJfX3Byb3BfX21ldGFkYXRhX18iO2Z1bmN0aW9uIFZ4KG4sdCxlLGkscil7cmV0dXJuIFpmKCgpPT57bGV0IG89TTModCk7ZnVuY3Rpb24gcyguLi5hKXtpZih0aGlzIGluc3RhbmNlb2YgcylyZXR1cm4gby5jYWxsKHRoaXMsLi4uYSksdGhpcztsZXQgbD1uZXcgcyguLi5hKTtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHImJnIodSwuLi5hKSwodS5oYXNPd25Qcm9wZXJ0eShNMCk/dVtNMF06T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsTTAse3ZhbHVlOltdfSlbTTBdKS5wdXNoKGwpLGkmJmkodSksdX19cmV0dXJuIGUmJihzLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSkscy5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixzLmFubm90YXRpb25DbHM9cyxzfSl9ZnVuY3Rpb24gTTMobil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe2lmKG4pe2xldCBpPW4oLi4uZSk7Zm9yKGxldCByIGluIGkpdGhpc1tyXT1pW3JdfX19ZnVuY3Rpb24gejAobix0LGUpe3JldHVybiBaZigoKT0+e2xldCBpPU0zKHQpO2Z1bmN0aW9uIHIoLi4ubyl7aWYodGhpcyBpbnN0YW5jZW9mIHIpcmV0dXJuIGkuYXBwbHkodGhpcyxvKSx0aGlzO2xldCBzPW5ldyByKC4uLm8pO3JldHVybiBhLmFubm90YXRpb249cyxhO2Z1bmN0aW9uIGEobCxjLHUpe2xldCBkPWwuaGFzT3duUHJvcGVydHkodzApP2xbdzBdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLHcwLHt2YWx1ZTpbXX0pW3cwXTtmb3IoO2QubGVuZ3RoPD11OylkLnB1c2gobnVsbCk7cmV0dXJuKGRbdV09ZFt1XXx8W10pLnB1c2gocyksbH19cmV0dXJuIGUmJihyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksci5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixyLmFubm90YXRpb25DbHM9cixyfSl9ZnVuY3Rpb24gWXAobix0LGUsaSl7cmV0dXJuIFpmKCgpPT57bGV0IHI9TTModCk7ZnVuY3Rpb24gbyguLi5zKXtpZih0aGlzIGluc3RhbmNlb2YgbylyZXR1cm4gci5hcHBseSh0aGlzLHMpLHRoaXM7bGV0IGE9bmV3IG8oLi4ucyk7cmV0dXJuIGZ1bmN0aW9uKGMsdSl7bGV0IGQ9Yy5jb25zdHJ1Y3RvcixwPWQuaGFzT3duUHJvcGVydHkoUzApP2RbUzBdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLFMwLHt2YWx1ZTp7fX0pW1MwXTtwW3VdPXAuaGFzT3duUHJvcGVydHkodSkmJnBbdV18fFtdLHBbdV0udW5zaGlmdChhKSxpJiZpKGMsdSwuLi5zKX19cmV0dXJuIGUmJihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSksby5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9bixvLmFubm90YXRpb25DbHM9byxvfSl9dmFyIElfZT16MCgiQXR0cmlidXRlIixuPT4oe2F0dHJpYnV0ZU5hbWU6bixfX05HX0VMRU1FTlRfSURfXzooKT0+dm8obil9KSkscGU9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9kZXNjPXQsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBlP3RoaXMuX19OR19FTEVNRU5UX0lEX189ZTp2b2lkIDAhPT1lJiYodGhpcy5cdTAyNzVwcm92PXllKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46ZS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTplLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9uVG9rZW4gJHt0aGlzLl9kZXNjfWB9fSxSMD0obmV3IHBlKCJBbmFseXplRm9yRW50cnlDb21wb25lbnRzIiksY2xhc3N7fSk7ZnVuY3Rpb24gTGwobil7bGV0IHQ9dG8ubmc7aWYodCYmdC5cdTAyNzVjb21waWxlckZhY2FkZSlyZXR1cm4gdC5cdTAyNzVjb21waWxlckZhY2FkZTt0aHJvdyBuZXcgRXJyb3IoIkpJVCBjb21waWxlciB1bmF2YWlsYWJsZSIpfVlwKCJDb250ZW50Q2hpbGRyZW4iLChuLHQ9e30pPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITEsaXNWaWV3UXVlcnk6ITEsZGVzY2VuZGFudHM6ITEsZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk6ITAsLi4udH0pLFIwKSxZcCgiQ29udGVudENoaWxkIiwobix0PXt9KT0+KHtzZWxlY3RvcjpuLGZpcnN0OiEwLGlzVmlld1F1ZXJ5OiExLGRlc2NlbmRhbnRzOiEwLC4uLnR9KSxSMCksWXAoIlZpZXdDaGlsZHJlbiIsKG4sdD17fSk9Pih7c2VsZWN0b3I6bixmaXJzdDohMSxpc1ZpZXdRdWVyeTohMCxkZXNjZW5kYW50czohMCxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTohMCwuLi50fSksUjApLFlwKCJWaWV3Q2hpbGQiLChuLHQpPT4oe3NlbGVjdG9yOm4sZmlyc3Q6ITAsaXNWaWV3UXVlcnk6ITAsZGVzY2VuZGFudHM6ITAsLi4udH0pLFIwKTt2YXIgUF9lPUZ1bmN0aW9uO2Z1bmN0aW9uIHV4KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIEZkKG4sdCl7dm9pZCAwPT09dCYmKHQ9bik7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07QXJyYXkuaXNBcnJheShpKT8odD09PW4mJih0PW4uc2xpY2UoMCxlKSksRmQoaSx0KSk6dCE9PW4mJnQucHVzaChpKX1yZXR1cm4gdH1mdW5jdGlvbiBFeChuLHQpe24uZm9yRWFjaChlPT5BcnJheS5pc0FycmF5KGUpP0V4KGUsdCk6dChlKSl9ZnVuY3Rpb24gdTkobix0LGUpe3Q+PW4ubGVuZ3RoP24ucHVzaChlKTpuLnNwbGljZSh0LDAsZSl9ZnVuY3Rpb24gWDEobix0KXtyZXR1cm4gdD49bi5sZW5ndGgtMT9uLnBvcCgpOm4uc3BsaWNlKHQsMSlbMF19ZnVuY3Rpb24gZngobix0KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPG47aSsrKWUucHVzaCh0KTtyZXR1cm4gZX1mdW5jdGlvbiBlbChuLHQsZSl7bGV0IGk9SHgobix0KTtyZXR1cm4gaT49MD9uWzF8aV09ZTooaT1+aSxmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uLmxlbmd0aDtpZihyPT10KW4ucHVzaChlLGkpO2Vsc2UgaWYoMT09PXIpbi5wdXNoKGksblswXSksblswXT1lO2Vsc2V7Zm9yKHItLSxuLnB1c2gobltyLTFdLG5bcl0pO3I+dDspbltyXT1uW3ItMl0sci0tO25bdF09ZSxuW3QrMV09aX19KG4saSx0LGUpKSxpfWZ1bmN0aW9uIExOKG4sdCl7bGV0IGU9SHgobix0KTtpZihlPj0wKXJldHVybiBuWzF8ZV19ZnVuY3Rpb24gSHgobix0KXtyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPTAscj1uLmxlbmd0aD4+MTtmb3IoO3IhPT1pOyl7bGV0IG89aSsoci1pPj4xKSxzPW5bbzw8MV07aWYodD09PXMpcmV0dXJuIG88PDE7cz50P3I9bzppPW8rMX1yZXR1cm5+KHI8PDEpfShuLHQpfXZhciBGX2U9L15mdW5jdGlvblxzK1xTK1woXClccyp7W1xzXFNdK1wuYXBwbHlcKHRoaXMsXHMqKGFyZ3VtZW50c3woPzpbXigpXStcKFxbXF0sKT9bXigpXStcKGFyZ3VtZW50c1wpLiopXCkvLE5fZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3svLExfZT0vXmNsYXNzXHMrW0EtWmEtelxkJF9dKlxzKmV4dGVuZHNccytbXntdK3tbXHNcU10qY29uc3RydWN0b3JccypcKC8sQl9lPS9eY2xhc3NccytbQS1aYS16XGQkX10qXHMqZXh0ZW5kc1xzK1tee10re1tcc1xTXSpjb25zdHJ1Y3RvclxzKlwoXClccyp7W159XSpzdXBlclwoXC5cLlwuYXJndW1lbnRzXCkvO2Z1bmN0aW9uIEJOKG4pe3JldHVybiBuP24ubWFwKHQ9Pm5ldygwLHQudHlwZS5hbm5vdGF0aW9uQ2xzKSguLi50LmFyZ3M/dC5hcmdzOltdKSk6W119ZnVuY3Rpb24gQzEobil7bGV0IHQ9bi5wcm90b3R5cGU/T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKTpudWxsO3JldHVybih0P3QuY29uc3RydWN0b3I6bnVsbCl8fE9iamVjdH12YXIgbXgsVHg9e30sdUw9Il9fTkdfRElfRkxBR19fIixRMT0ibmdUZW1wVG9rZW5QYXRoIix6X2U9L1xuL2dtLHpXPSJfX3NvdXJjZSI7ZnVuY3Rpb24geDAobil7bGV0IHQ9bXg7cmV0dXJuIG14PW4sdH1mdW5jdGlvbiBHX2Uobix0PWRpLkRlZmF1bHQpe2lmKHZvaWQgMD09PW14KXRocm93IG5ldyBBdCgtMjAzLCExKTtyZXR1cm4gbnVsbD09PW14P0E3KG4sdm9pZCAwLHQpOm14LmdldChuLHQmZGkuT3B0aW9uYWw/bnVsbDp2b2lkIDAsdCl9ZnVuY3Rpb24gaihuLHQ9ZGkuRGVmYXVsdCl7cmV0dXJuKGlMfHxHX2UpKEtpKG4pLHQpfWZ1bmN0aW9uIGQ5KG4pe3Rocm93IG5ldyBBdCgyMDIsITEpfWZ1bmN0aW9uIGpvKG4sdD1kaS5EZWZhdWx0KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQmJih0PTB8KHQub3B0aW9uYWwmJjgpfCh0Lmhvc3QmJjEpfCh0LnNlbGYmJjIpfCh0LnNraXBTZWxmJiY0KSksaihuLHQpfWZ1bmN0aW9uIGRMKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1LaShuW2VdKTtpZihBcnJheS5pc0FycmF5KGkpKXtpZigwPT09aS5sZW5ndGgpdGhyb3cgbmV3IEF0KDkwMCwhMSk7bGV0IHIsbz1kaS5EZWZhdWx0O2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgYT1pW3NdLGw9V19lKGEpOyJudW1iZXIiPT10eXBlb2YgbD8tMT09PWw/cj1hLnRva2VuOm98PWw6cj1hfXQucHVzaChqKHIsbykpfWVsc2UgdC5wdXNoKGooaSkpfXJldHVybiB0fWZ1bmN0aW9uIFV4KG4sdCl7cmV0dXJuIG5bdUxdPXQsbi5wcm90b3R5cGVbdUxdPXQsbn1mdW5jdGlvbiBXX2Uobil7cmV0dXJuIG5bdUxdfXZhciBqMD1VeCh6MCgiSW5qZWN0IixuPT4oe3Rva2VuOm59KSksLTEpLG5zPVV4KHowKCJPcHRpb25hbCIpLDgpLHczPVV4KHowKCJTZWxmIiksMiksdGw9VXgoejAoIlNraXBTZWxmIiksNCksWF9lPVV4KHowKCJIb3N0IiksMSksalc9bnVsbDtmdW5jdGlvbiBTMygpe3JldHVybiBqVz1qV3x8bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX3JlZmxlY3Q9dHx8dG8uUmVmbGVjdH1mYWN0b3J5KHQpe3JldHVybiguLi5lKT0+bmV3IHQoLi4uZSl9X3ppcFR5cGVzQW5kQW5ub3RhdGlvbnModCxlKXtsZXQgaTtpPWZ4KHR5cGVvZiB0PiJ1Ij9lLmxlbmd0aDp0Lmxlbmd0aCk7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXT10eXBlb2YgdD4idSI/W106dFtyXSYmdFtyXSE9T2JqZWN0P1t0W3JdXTpbXSxlJiZudWxsIT1lW3JdJiYoaVtyXT1pW3JdLmNvbmNhdChlW3JdKSk7cmV0dXJuIGl9X293blBhcmFtZXRlcnModCxlKXtsZXQgaT10LnRvU3RyaW5nKCk7aWYoRl9lLnRlc3Qobj1pKXx8Ql9lLnRlc3Qobil8fE5fZS50ZXN0KG4pJiYhTF9lLnRlc3QobikpcmV0dXJuIG51bGw7dmFyIG47aWYodC5wYXJhbWV0ZXJzJiZ0LnBhcmFtZXRlcnMhPT1lLnBhcmFtZXRlcnMpcmV0dXJuIHQucGFyYW1ldGVycztsZXQgcj10LmN0b3JQYXJhbWV0ZXJzO2lmKHImJnIhPT1lLmN0b3JQYXJhbWV0ZXJzKXtsZXQgYT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cixsPWEubWFwKHU9PnUmJnUudHlwZSksYz1hLm1hcCh1PT51JiZCTih1LmRlY29yYXRvcnMpKTtyZXR1cm4gdGhpcy5femlwVHlwZXNBbmRBbm5vdGF0aW9ucyhsLGMpfWxldCBvPXQuaGFzT3duUHJvcGVydHkodzApJiZ0W3cwXSxzPXRoaXMuX3JlZmxlY3QmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEmJnRoaXMuX3JlZmxlY3QuZ2V0T3duTWV0YWRhdGEoImRlc2lnbjpwYXJhbXR5cGVzIix0KTtyZXR1cm4gc3x8bz90aGlzLl96aXBUeXBlc0FuZEFubm90YXRpb25zKHMsbyk6ZngodC5sZW5ndGgpfXBhcmFtZXRlcnModCl7aWYoIXV4KHQpKXJldHVybltdO2xldCBlPUMxKHQpLGk9dGhpcy5fb3duUGFyYW1ldGVycyh0LGUpO3JldHVybiFpJiZlIT09T2JqZWN0JiYoaT10aGlzLnBhcmFtZXRlcnMoZSkpLGl8fFtdfV9vd25Bbm5vdGF0aW9ucyh0LGUpe2lmKHQuYW5ub3RhdGlvbnMmJnQuYW5ub3RhdGlvbnMhPT1lLmFubm90YXRpb25zKXtsZXQgaT10LmFubm90YXRpb25zO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpJiZpLmFubm90YXRpb25zJiYoaT1pLmFubm90YXRpb25zKSxpfXJldHVybiB0LmRlY29yYXRvcnMmJnQuZGVjb3JhdG9ycyE9PWUuZGVjb3JhdG9ycz9CTih0LmRlY29yYXRvcnMpOnQuaGFzT3duUHJvcGVydHkoTTApP3RbTTBdOm51bGx9YW5ub3RhdGlvbnModCl7aWYoIXV4KHQpKXJldHVybltdO2xldCBlPUMxKHQpLGk9dGhpcy5fb3duQW5ub3RhdGlvbnModCxlKXx8W107cmV0dXJuKGUhPT1PYmplY3Q/dGhpcy5hbm5vdGF0aW9ucyhlKTpbXSkuY29uY2F0KGkpfV9vd25Qcm9wTWV0YWRhdGEodCxlKXtpZih0LnByb3BNZXRhZGF0YSYmdC5wcm9wTWV0YWRhdGEhPT1lLnByb3BNZXRhZGF0YSl7bGV0IGk9dC5wcm9wTWV0YWRhdGE7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGkmJmkucHJvcE1ldGFkYXRhJiYoaT1pLnByb3BNZXRhZGF0YSksaX1pZih0LnByb3BEZWNvcmF0b3JzJiZ0LnByb3BEZWNvcmF0b3JzIT09ZS5wcm9wRGVjb3JhdG9ycyl7bGV0IGk9dC5wcm9wRGVjb3JhdG9ycyxyPXt9O3JldHVybiBPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntyW29dPUJOKGlbb10pfSkscn1yZXR1cm4gdC5oYXNPd25Qcm9wZXJ0eShTMCk/dFtTMF06bnVsbH1wcm9wTWV0YWRhdGEodCl7aWYoIXV4KHQpKXJldHVybnt9O2xldCBlPUMxKHQpLGk9e307aWYoZSE9PU9iamVjdCl7bGV0IG89dGhpcy5wcm9wTWV0YWRhdGEoZSk7T2JqZWN0LmtleXMobykuZm9yRWFjaChzPT57aVtzXT1vW3NdfSl9bGV0IHI9dGhpcy5fb3duUHJvcE1ldGFkYXRhKHQsZSk7cmV0dXJuIHImJk9iamVjdC5rZXlzKHIpLmZvckVhY2gobz0+e2xldCBzPVtdO2kuaGFzT3duUHJvcGVydHkobykmJnMucHVzaCguLi5pW29dKSxzLnB1c2goLi4ucltvXSksaVtvXT1zfSksaX1vd25Qcm9wTWV0YWRhdGEodCl7cmV0dXJuIHV4KHQpJiZ0aGlzLl9vd25Qcm9wTWV0YWRhdGEodCxDMSh0KSl8fHt9fWhhc0xpZmVjeWNsZUhvb2sodCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIFBfZSYmZSBpbiB0LnByb3RvdHlwZX19fWZ1bmN0aW9uIGZUKG4pe3JldHVybiBwOShTMygpLnBhcmFtZXRlcnMobikpfWZ1bmN0aW9uIHA5KG4pe3JldHVybiBuLm1hcCh0PT5mdW5jdGlvbihuKXtsZXQgdD17dG9rZW46bnVsbCxhdHRyaWJ1dGU6bnVsbCxob3N0OiExLG9wdGlvbmFsOiExLHNlbGY6ITEsc2tpcFNlbGY6ITF9O2lmKEFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjApZm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aWYodm9pZCAwPT09aSljb250aW51ZTtsZXQgcj1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaSk7aWYoaSBpbnN0YW5jZW9mIG5zfHwiT3B0aW9uYWwiPT09ci5uZ01ldGFkYXRhTmFtZSl0Lm9wdGlvbmFsPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIHRsfHwiU2tpcFNlbGYiPT09ci5uZ01ldGFkYXRhTmFtZSl0LnNraXBTZWxmPSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIHczfHwiU2VsZiI9PT1yLm5nTWV0YWRhdGFOYW1lKXQuc2VsZj0hMDtlbHNlIGlmKGkgaW5zdGFuY2VvZiBYX2V8fCJIb3N0Ij09PXIubmdNZXRhZGF0YU5hbWUpdC5ob3N0PSEwO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGowKXQudG9rZW49aS50b2tlbjtlbHNlIGlmKGkgaW5zdGFuY2VvZiBJX2Upe2lmKHZvaWQgMD09PWkuYXR0cmlidXRlTmFtZSl0aHJvdyBuZXcgQXQoMjA0LCExKTt0LmF0dHJpYnV0ZT1pLmF0dHJpYnV0ZU5hbWV9ZWxzZSB0LnRva2VuPWl9ZWxzZSB0LnRva2VuPXZvaWQgMD09PW58fEFycmF5LmlzQXJyYXkobikmJjA9PT1uLmxlbmd0aD9udWxsOm47cmV0dXJuIHR9KHQpKX12YXIgRHg9bmV3IE1hcCxoOT1uZXcgU2V0O2Z1bmN0aW9uIGY5KG4pe3JldHVybiEhKG4udGVtcGxhdGVVcmwmJiFuLmhhc093blByb3BlcnR5KCJ0ZW1wbGF0ZSIpfHxuLnN0eWxlVXJscyYmbi5zdHlsZVVybHMubGVuZ3RoKX12YXIgcEwsTTEsdzEsR1c9bmV3IE1hcDtmdW5jdGlvbiBtOShuLHQpeyhmdW5jdGlvbihuLHQsZSl7aWYodCYmdCE9PWUpdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgbW9kdWxlIHJlZ2lzdGVyZWQgZm9yICR7bn0gLSAke1RvKHQpfSB2cyAke1RvKHQubmFtZSl9YCl9KSh0LEdXLmdldCh0KXx8bnVsbCxuKSxHVy5zZXQodCxuKX1mdW5jdGlvbiBfOSgpe3JldHVybiB2b2lkIDAhPT1wTD9wTDp0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50OnZvaWQgMH1mdW5jdGlvbiB2OSgpe2lmKHZvaWQgMD09PU0xJiYoTTE9bnVsbCx0by50cnVzdGVkVHlwZXMpKXRyeXtNMT10by50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyIix7Y3JlYXRlSFRNTDpuPT5uLGNyZWF0ZVNjcmlwdDpuPT5uLGNyZWF0ZVNjcmlwdFVSTDpuPT5ufSl9Y2F0Y2h7fXJldHVybiBNMX1mdW5jdGlvbiBPMChuKXtyZXR1cm4gdjkoKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBFMygpe2lmKHZvaWQgMD09PXcxJiYodzE9bnVsbCx0by50cnVzdGVkVHlwZXMpKXRyeXt3MT10by50cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KCJhbmd1bGFyI3Vuc2FmZS1ieXBhc3MiLHtjcmVhdGVIVE1MOm49Pm4sY3JlYXRlU2NyaXB0Om49Pm4sY3JlYXRlU2NyaXB0VVJMOm49Pm59KX1jYXRjaHt9cmV0dXJuIHcxfWZ1bmN0aW9uIFdXKG4pe3JldHVybiBFMygpPy5jcmVhdGVIVE1MKG4pfHxufWZ1bmN0aW9uIHFXKG4pe3JldHVybiBFMygpPy5jcmVhdGVTY3JpcHQobil8fG59ZnVuY3Rpb24gWVcobil7cmV0dXJuIEUzKCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn12YXIgQmQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5PXR9dG9TdHJpbmcoKXtyZXR1cm5gU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzogJHt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHl9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgfX0saEw9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJIVE1MIn19LGZMPWNsYXNzIGV4dGVuZHMgQmR7Z2V0VHlwZU5hbWUoKXtyZXR1cm4iU3R5bGUifX0sbUw9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJTY3JpcHQifX0sZ0w9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJVUkwifX0sX0w9Y2xhc3MgZXh0ZW5kcyBCZHtnZXRUeXBlTmFtZSgpe3JldHVybiJSZXNvdXJjZVVSTCJ9fTtmdW5jdGlvbiBUYShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEJkP24uY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpufWZ1bmN0aW9uIFBjKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBCZCYmbi5nZXRUeXBlTmFtZSgpfHxudWxsfShuKTtpZihudWxsIT1lJiZlIT09dCl7aWYoIlJlc291cmNlVVJMIj09PWUmJiJVUkwiPT09dClyZXR1cm4hMDt0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGEgc2FmZSAke3R9LCBnb3QgYSAke2V9IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcylgKX1yZXR1cm4gZT09PXR9ZnVuY3Rpb24gdzkobil7bGV0IHQ9bmV3IHlMKG4pO3JldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE8wKCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyB2TCh0KTp0fXZhciB2TD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9dH1nZXRJbmVydEJvZHlFbGVtZW50KHQpe3Q9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+Iit0O3RyeXtsZXQgZT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhPMCh0KSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWU/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQodCk6KGUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKSxlKX1jYXRjaHtyZXR1cm4gbnVsbH19fSx5TD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmRlZmF1bHREb2M9dCx0aGlzLmluZXJ0RG9jdW1lbnQ9dGhpcy5kZWZhdWx0RG9jLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgic2FuaXRpemF0aW9uLWluZXJ0IiksbnVsbD09dGhpcy5pbmVydERvY3VtZW50LmJvZHkpe2xldCBlPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJodG1sIik7dGhpcy5pbmVydERvY3VtZW50LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7ZS5hcHBlbmRDaGlsZChpKX19Z2V0SW5lcnRCb2R5RWxlbWVudCh0KXtsZXQgZT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtpZigiY29udGVudCJpbiBlKXJldHVybiBlLmlubmVySFRNTD1PMCh0KSxlO2xldCBpPXRoaXMuaW5lcnREb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7cmV0dXJuIGkuaW5uZXJIVE1MPU8wKHQpLHRoaXMuZGVmYXVsdERvYy5kb2N1bWVudE1vZGUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGl9c3RyaXBDdXN0b21Oc0F0dHJzKHQpe2xldCBlPXQuYXR0cmlidXRlcztmb3IobGV0IHI9ZS5sZW5ndGgtMTswPHI7ci0tKXtsZXQgcz1lLml0ZW0ocikubmFtZTsoInhtbG5zOm5zMSI9PT1zfHwwPT09cy5pbmRleE9mKCJuczE6IikpJiZ0LnJlbW92ZUF0dHJpYnV0ZShzKX1sZXQgaT10LmZpcnN0Q2hpbGQ7Zm9yKDtpOylpLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuc3RyaXBDdXN0b21Oc0F0dHJzKGkpLGk9aS5uZXh0U2libGluZ319LGF2ZT0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZGF0YXxmdHB8dGVsfGZpbGV8c21zKTp8W14mOi8/I10qKD86Wy8/I118JCkpL2dpO2Z1bmN0aW9uIHp4KG4pe3JldHVybihuPVN0cmluZyhuKSkubWF0Y2goYXZlKT9uOiJ1bnNhZmU6IitufWZ1bmN0aW9uIHpkKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBuLnNwbGl0KCIsIikpdFtlXT0hMDtyZXR1cm4gdH1mdW5jdGlvbiBqeCguLi5uKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgaW4gZSllLmhhc093blByb3BlcnR5KGkpJiYodFtpXT0hMCk7cmV0dXJuIHR9dmFyIFMxLFM5PXpkKCJhcmVhLGJyLGNvbCxocixpbWcsd2JyIiksRTk9emQoImNvbGdyb3VwLGRkLGR0LGxpLHAsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIiKSxUOT16ZCgicnAscnQiKSxsdmU9angoVDksRTkpLGN2ZT1qeChFOSx6ZCgiYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJsb2NrcXVvdGUsY2FwdGlvbixjZW50ZXIsZGVsLGRldGFpbHMsZGlhbG9nLGRpcixkaXYsZGwsZmlndXJlLGZpZ2NhcHRpb24sZm9vdGVyLGgxLGgyLGgzLGg0LGg1LGg2LGhlYWRlcixoZ3JvdXAsaHIsaW5zLG1haW4sbWFwLG1lbnUsbmF2LG9sLHByZSxzZWN0aW9uLHN1bW1hcnksdGFibGUsdWwiKSksdXZlPWp4KFQ5LHpkKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksYkw9angoUzksY3ZlLHV2ZSxsdmUpLFQzPXpkKCJiYWNrZ3JvdW5kLGNpdGUsaHJlZixpdGVtdHlwZSxsb25nZGVzYyxwb3N0ZXIsc3JjLHhsaW5rOmhyZWYiKSxkdmU9emQoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLHB2ZT16ZCgiYXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEtZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFyaWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25seSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFsdWVub3csYXJpYS12YWx1ZXRleHQiKSxEOT1qeChUMyxkdmUscHZlKSxodmU9emQoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpLGZ2ZT0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csbXZlPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBYVyhuKXtyZXR1cm4gbi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShmdmUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIisoMTAyNCoodC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsodC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShtdmUsZnVuY3Rpb24odCl7cmV0dXJuIiYjIit0LmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7Iil9ZnVuY3Rpb24gRDMobix0KXtsZXQgZT1udWxsO3RyeXtTMT1TMXx8dzkobik7bGV0IGk9dD9TdHJpbmcodCk6IiI7ZT1TMS5nZXRJbmVydEJvZHlFbGVtZW50KGkpO2xldCByPTUsbz1pO2Rve2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtyLS0saT1vLG89ZS5pbm5lckhUTUwsZT1TMS5nZXRJbmVydEJvZHlFbGVtZW50KGkpfXdoaWxlKGkhPT1vKTtsZXQgYT0obmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbih0KXtsZXQgZT10LmZpcnN0Q2hpbGQsaT0hMDtmb3IoO2U7KWlmKGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERT9pPXRoaXMuc3RhcnRFbGVtZW50KGUpOmUubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERT90aGlzLmNoYXJzKGUubm9kZVZhbHVlKTp0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCxpJiZlLmZpcnN0Q2hpbGQpZT1lLmZpcnN0Q2hpbGQ7ZWxzZSBmb3IoO2U7KXtlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuZW5kRWxlbWVudChlKTtsZXQgcj10aGlzLmNoZWNrQ2xvYmJlcmVkRWxlbWVudChlLGUubmV4dFNpYmxpbmcpO2lmKHIpe2U9cjticmVha31lPXRoaXMuY2hlY2tDbG9iYmVyZWRFbGVtZW50KGUsZS5wYXJlbnROb2RlKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighYkwuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCFodmUuaGFzT3duUHJvcGVydHkoZSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goZSk7bGV0IGk9dC5hdHRyaWJ1dGVzO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtsZXQgbz1pLml0ZW0ocikscz1vLm5hbWUsYT1zLnRvTG93ZXJDYXNlKCk7aWYoIUQ5Lmhhc093blByb3BlcnR5KGEpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgbD1vLnZhbHVlO1QzW2FdJiYobD16eChsKSksdGhpcy5idWYucHVzaCgiICIscywnPSInLFhXKGwpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtiTC5oYXNPd25Qcm9wZXJ0eShlKSYmIVM5Lmhhc093blByb3BlcnR5KGUpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGUpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnModCl7dGhpcy5idWYucHVzaChYVyh0KSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KHQsZSl7aWYoZSYmKHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHt0Lm91dGVySFRNTH1gKTtyZXR1cm4gZX19KS5zYW5pdGl6ZUNoaWxkcmVuKENMKGUpfHxlKTtyZXR1cm4gTzAoYSl9ZmluYWxseXtpZihlKXtsZXQgaT1DTChlKXx8ZTtmb3IoO2kuZmlyc3RDaGlsZDspaS5yZW1vdmVDaGlsZChpLmZpcnN0Q2hpbGQpfX19ZnVuY3Rpb24gQ0wobil7cmV0dXJuImNvbnRlbnQiaW4gbiYmZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PW4ubm9kZU5hbWV9KG4pP24uY29udGVudDpudWxsfXZhciBtbz0oKCk9PntyZXR1cm4obj1tb3x8KG1vPXt9KSlbbi5OT05FPTBdPSJOT05FIixuW24uSFRNTD0xXT0iSFRNTCIsbltuLlNUWUxFPTJdPSJTVFlMRSIsbltuLlNDUklQVD0zXT0iU0NSSVBUIixuW24uVVJMPTRdPSJVUkwiLG5bbi5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsbW87dmFyIG59KSgpO2Z1bmN0aW9uIEEzKG4pe2xldCB0PUd4KCk7cmV0dXJuIHQ/V1codC5zYW5pdGl6ZShtby5IVE1MLG4pfHwiIik6UGMobiwiSFRNTCIpP1dXKFRhKG4pKTpEMyhfOSgpLEtuKG4pKX1mdW5jdGlvbiB6bChuKXtsZXQgdD1HeCgpO3JldHVybiB0P3Quc2FuaXRpemUobW8uVVJMLG4pfHwiIjpQYyhuLCJVUkwiKT9UYShuKTp6eChLbihuKSl9ZnVuY3Rpb24gQTkobil7bGV0IHQ9R3goKTtpZih0KXJldHVybiBZVyh0LnNhbml0aXplKG1vLlJFU09VUkNFX1VSTCxuKXx8IiIpO2lmKFBjKG4sIlJlc291cmNlVVJMIikpcmV0dXJuIFlXKFRhKG4pKTt0aHJvdyBuZXcgQXQoOTA0LCExKX1mdW5jdGlvbiBHeCgpe2xldCBuPXJ0KCk7cmV0dXJuIG4mJm5bMTJdfXZhciBtVD1uZXcgcGUoIkVOVklST05NRU5UX0lOSVRJQUxJWkVSIiksSTk9bmV3IHBlKCJJTkpFQ1RPUiIsLTEpLFA5PW5ldyBwZSgiSU5KRUNUT1JfREVGX1RZUEVTIiksSzE9Y2xhc3N7Z2V0KHQsZT1UeCl7aWYoZT09PVR4KXtsZXQgaT1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtUbyh0KX0hYCk7dGhyb3cgaS5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsaX1yZXR1cm4gZX19O2Z1bmN0aW9uIE12ZSguLi5uKXtyZXR1cm57Ilx1MDI3NXByb3ZpZGVycyI6UjkoMCxuKX19ZnVuY3Rpb24gUjkobiwuLi50KXtsZXQgcixlPVtdLGk9bmV3IFNldDtyZXR1cm4gRXgodCxvPT57bGV0IHM9bztNTChzLGUsW10saSkmJihyfHwocj1bXSksci5wdXNoKHMpKX0pLHZvaWQgMCE9PXImJk85KHIsZSksZX1mdW5jdGlvbiBPOShuLHQpe2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXR7cHJvdmlkZXJzOnJ9PW5bZV07RXgocixvPT57dC5wdXNoKG8pfSl9fWZ1bmN0aW9uIE1MKG4sdCxlLGkpe2lmKCEobj1LaShuKSkpcmV0dXJuITE7bGV0IHI9bnVsbCxvPWtXKG4pLHM9IW8mJk5sKG4pO2lmKG98fHMpe2lmKHMmJiFzLnN0YW5kYWxvbmUpcmV0dXJuITE7cj1ufWVsc2V7bGV0IGw9bi5uZ01vZHVsZTtpZihvPWtXKGwpLCFvKXJldHVybiExO3I9bH1sZXQgYT1pLmhhcyhyKTtpZihzKXtpZihhKXJldHVybiExO2lmKGkuYWRkKHIpLHMuZGVwZW5kZW5jaWVzKXtsZXQgbD0iZnVuY3Rpb24iPT10eXBlb2Ygcy5kZXBlbmRlbmNpZXM/cy5kZXBlbmRlbmNpZXMoKTpzLmRlcGVuZGVuY2llcztmb3IobGV0IGMgb2YgbClNTChjLHQsZSxpKX19ZWxzZXtpZighbylyZXR1cm4hMTt7aWYobnVsbCE9by5pbXBvcnRzJiYhYSl7bGV0IGM7aS5hZGQocik7dHJ5e0V4KG8uaW1wb3J0cyx1PT57TUwodSx0LGUsaSkmJihjfHwoYz1bXSksYy5wdXNoKHUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PWMmJk85KGMsdCl9aWYoIWEpe2xldCBjPVdmKHIpfHwoKCk9Pm5ldyByKTt0LnB1c2goe3Byb3ZpZGU6cix1c2VGYWN0b3J5OmMsZGVwczpRaX0se3Byb3ZpZGU6UDksdXNlVmFsdWU6cixtdWx0aTohMH0se3Byb3ZpZGU6bVQsdXNlVmFsdWU6KCk9PmoociksbXVsdGk6ITB9KX1sZXQgbD1vLnByb3ZpZGVycztudWxsPT1sfHxhfHxFeChsLHU9Pnt0LnB1c2godSl9KX19cmV0dXJuIHIhPT1uJiZ2b2lkIDAhPT1uLnByb3ZpZGVyc312YXIgd3ZlPW1yKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTptcn0pO2Z1bmN0aW9uIGs5KG4pe3JldHVybiBudWxsIT09biYmIm9iamVjdCI9PXR5cGVvZiBuJiZ3dmUgaW4gbn1mdW5jdGlvbiBrMChuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbn12YXIgVk4sZ1Q9bmV3IHBlKCJTZXQgSW5qZWN0b3Igc2NvcGUuIiksUDE9e30sRHZlPXt9O2Z1bmN0aW9uIEkzKCl7cmV0dXJuIHZvaWQgMD09PVZOJiYoVk49bmV3IEsxKSxWTn12YXIganA9Y2xhc3N7fSxaMT1jbGFzcyBleHRlbmRzIGpwe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKCksdGhpcy5wYXJlbnQ9ZSx0aGlzLnNvdXJjZT1pLHRoaXMuc2NvcGVzPXIsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxTTCh0LHM9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHMpKSx0aGlzLnJlY29yZHMuc2V0KEk5LEUwKHZvaWQgMCx0aGlzKSksci5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQoanAsRTAodm9pZCAwLHRoaXMpKTtsZXQgbz10aGlzLnJlY29yZHMuZ2V0KGdUKTtudWxsIT1vJiYic3RyaW5nIj09dHlwZW9mIG8udmFsdWUmJnRoaXMuc2NvcGVzLmFkZChvLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChQOS5tdWx0aSxRaSxkaS5TZWxmKSl9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO3RyeXtmb3IobGV0IHQgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcyl0Lm5nT25EZXN0cm95KCk7Zm9yKGxldCB0IG9mIHRoaXMuX29uRGVzdHJveUhvb2tzKXQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5sZW5ndGg9MH19b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUhvb2tzLnB1c2godCl9cnVuSW5Db250ZXh0KHQpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7bGV0IGU9eDAodGhpcyksaT1rbCh2b2lkIDApO3RyeXtyZXR1cm4gdCgpfWZpbmFsbHl7eDAoZSksa2woaSl9fWdldCh0LGU9VHgsaT1kaS5EZWZhdWx0KXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2xldCByPXgwKHRoaXMpLG89a2wodm9pZCAwKTt0cnl7aWYoIShpJmRpLlNraXBTZWxmKSl7bGV0IGE9dGhpcy5yZWNvcmRzLmdldCh0KTtpZih2b2lkIDA9PT1hKXtsZXQgbD0oImZ1bmN0aW9uIj09dHlwZW9mKG49dCl8fCJvYmplY3QiPT10eXBlb2YgbiYmbiBpbnN0YW5jZW9mIHBlKSYmYTModCk7YT1sJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKGwpP0UwKHdMKHQpLFAxKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQodCxhKX1pZihudWxsIT1hKXJldHVybiB0aGlzLmh5ZHJhdGUodCxhKX1yZXR1cm4oaSZkaS5TZWxmP0kzKCk6dGhpcy5wYXJlbnQpLmdldCh0LGU9aSZkaS5PcHRpb25hbCYmZT09PVR4P251bGw6ZSl9Y2F0Y2gocyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PXMubmFtZSl7aWYoKHNbUTFdPXNbUTFdfHxbXSkudW5zaGlmdChUbyh0KSkscil0aHJvdyBzO3JldHVybiBmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uW1ExXTt0aHJvdyB0W3pXXSYmci51bnNoaWZ0KHRbelddKSxuLm1lc3NhZ2U9ZnVuY3Rpb24obix0LGUsaT1udWxsKXtuPW4mJiJcbiI9PT1uLmNoYXJBdCgwKSYmIlx1MDI3NSI9PW4uY2hhckF0KDEpP24uc2xpY2UoMik6bjtsZXQgcj1Ubyh0KTtpZihBcnJheS5pc0FycmF5KHQpKXI9dC5tYXAoVG8pLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgdCl7bGV0IG89W107Zm9yKGxldCBzIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShzKSl7bGV0IGE9dFtzXTtvLnB1c2gocysiOiIrKCJzdHJpbmciPT10eXBlb2YgYT9KU09OLnN0cmluZ2lmeShhKTpUbyhhKSkpfXI9YHske28uam9pbigiLCAiKX19YH1yZXR1cm5gJHtlfSR7aT8iKCIraSsiKSI6IiJ9WyR7cn1dOiAke24ucmVwbGFjZSh6X2UsIlxuICAiKX1gfSgiXG4iK24ubWVzc2FnZSxyLGUsaSksbi5uZ1Rva2VuUGF0aD1yLG5bUTFdPW51bGwsbn0ocyx0LCJSM0luamVjdG9yRXJyb3IiLHRoaXMuc291cmNlKX10aHJvdyBzfWZpbmFsbHl7a2wobykseDAocil9dmFyIG59cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7bGV0IHQ9eDAodGhpcyksZT1rbCh2b2lkIDApO3RyeXtsZXQgaT10aGlzLmdldChtVC5tdWx0aSxRaSxkaS5TZWxmKTtmb3IobGV0IHIgb2YgaSlyKCl9ZmluYWxseXt4MCh0KSxrbChlKX19dG9TdHJpbmcoKXtsZXQgdD1bXSxlPXRoaXMucmVjb3Jkcztmb3IobGV0IGkgb2YgZS5rZXlzKCkpdC5wdXNoKFRvKGkpKTtyZXR1cm5gUjNJbmplY3Rvclske3Quam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEF0KDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKHQpe2xldCBlPWswKHQ9S2kodCkpP3Q6S2kodCYmdC5wcm92aWRlKSxpPWZ1bmN0aW9uKG4pe3JldHVybiBrOShuKT9FMCh2b2lkIDAsbi51c2VWYWx1ZSk6RTAoRjkobiksUDEpfSh0KTtpZihrMCh0KXx8ITAhPT10Lm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoZSk7ZWxzZXtsZXQgcj10aGlzLnJlY29yZHMuZ2V0KGUpO3J8fChyPUUwKHZvaWQgMCxQMSwhMCksci5mYWN0b3J5PSgpPT5kTChyLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGUscikpLGU9dCxyLm11bHRpLnB1c2godCl9dGhpcy5yZWNvcmRzLnNldChlLGkpfWh5ZHJhdGUodCxlKXtyZXR1cm4gZS52YWx1ZT09PVAxJiYoZS52YWx1ZT1EdmUsZS52YWx1ZT1lLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBlLnZhbHVlJiZlLnZhbHVlJiZudWxsIT09KG49ZS52YWx1ZSkmJiJvYmplY3QiPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4ubmdPbkRlc3Ryb3kmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGUudmFsdWUpLGUudmFsdWU7dmFyIG59aW5qZWN0YWJsZURlZkluU2NvcGUodCl7aWYoIXQucHJvdmlkZWRJbilyZXR1cm4hMTtsZXQgZT1LaSh0LnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT8iYW55Ij09PWV8fHRoaXMuc2NvcGVzLmhhcyhlKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGUpfX07ZnVuY3Rpb24gd0wobil7bGV0IHQ9YTMobiksZT1udWxsIT09dD90LmZhY3Rvcnk6V2Yobik7aWYobnVsbCE9PWUpcmV0dXJuIGU7aWYobiBpbnN0YW5jZW9mIHBlKXRocm93IG5ldyBBdCgyMDQsITEpO2lmKG4gaW5zdGFuY2VvZiBGdW5jdGlvbilyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9bi5sZW5ndGg7aWYodD4wKXRocm93IGZ4KHQsIj8iKSxuZXcgQXQoMjA0LCExKTtsZXQgZT1mdW5jdGlvbihuKXtsZXQgdD1uJiYobltMMV18fG5bRDddKTtpZih0KXtsZXQgZT1mdW5jdGlvbihuKXtpZihuLmhhc093blByb3BlcnR5KCJuYW1lIikpcmV0dXJuIG4ubmFtZTtsZXQgdD0oIiIrbikubWF0Y2goL15mdW5jdGlvblxzKihbXlxzKF0rKS8pO3JldHVybiBudWxsPT09dD8iIjp0WzFdfShuKTtyZXR1cm4gY29uc29sZS53YXJuKGBERVBSRUNBVEVEOiBESSBpcyBpbnN0YW50aWF0aW5nIGEgdG9rZW4gIiR7ZX0iIHRoYXQgaW5oZXJpdHMgaXRzIEBJbmplY3RhYmxlIGRlY29yYXRvciBidXQgZG9lcyBub3QgcHJvdmlkZSBvbmUgaXRzZWxmLlxuVGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIEFuZ3VsYXIuIFBsZWFzZSBhZGQgQEluamVjdGFibGUoKSB0byB0aGUgIiR7ZX0iIGNsYXNzLmApLHR9cmV0dXJuIG51bGx9KG4pO3JldHVybiBudWxsIT09ZT8oKT0+ZS5mYWN0b3J5KG4pOigpPT5uZXcgbn0obik7dGhyb3cgbmV3IEF0KDIwNCwhMSl9ZnVuY3Rpb24gRjkobix0LGUpe2xldCBpO2lmKGswKG4pKXtsZXQgcj1LaShuKTtyZXR1cm4gV2Yocil8fHdMKHIpfWlmKGs5KG4pKWk9KCk9PktpKG4udXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24obil7cmV0dXJuISghbnx8IW4udXNlRmFjdG9yeSl9KG4pKWk9KCk9Pm4udXNlRmFjdG9yeSguLi5kTChuLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbihuKXtyZXR1cm4hKCFufHwhbi51c2VFeGlzdGluZyl9KG4pKWk9KCk9PmooS2kobi51c2VFeGlzdGluZykpO2Vsc2V7bGV0IHI9S2kobiYmKG4udXNlQ2xhc3N8fG4ucHJvdmlkZSkpO2lmKCFmdW5jdGlvbihuKXtyZXR1cm4hIW4uZGVwc30obikpcmV0dXJuIFdmKHIpfHx3TChyKTtpPSgpPT5uZXcgciguLi5kTChuLmRlcHMpKX1yZXR1cm4gaX1mdW5jdGlvbiBFMChuLHQsZT0hMSl7cmV0dXJue2ZhY3Rvcnk6bix2YWx1ZTp0LG11bHRpOmU/W106dm9pZCAwfX1mdW5jdGlvbiBrdmUobil7cmV0dXJuISFuLlx1MDI3NXByb3ZpZGVyc31mdW5jdGlvbiBTTChuLHQpe2ZvcihsZXQgZSBvZiBuKUFycmF5LmlzQXJyYXkoZSk/U0woZSx0KTprdmUoZSk/U0woZS5cdTAyNzVwcm92aWRlcnMsdCk6dChlKX12YXIgRUw9Y2xhc3N7fSxKMT1jbGFzc3t9LFRMPWNsYXNze3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KHQpe3Rocm93IGZ1bmN0aW9uKG4pe2xldCB0PUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9yeSBmb3VuZCBmb3IgJHtUbyhuKX0uIERpZCB5b3UgYWRkIGl0IHRvIEBOZ01vZHVsZS5lbnRyeUNvbXBvbmVudHM/YCk7cmV0dXJuIHQubmdDb21wb25lbnQ9bix0fSh0KX19LGdzPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5VTEw9bmV3IFRMLG59KSgpO2Z1bmN0aW9uIEx2ZSgpe3JldHVybiBHMCh6bygpLHJ0KCkpfWZ1bmN0aW9uIEcwKG4sdCl7cmV0dXJuIG5ldyBSZShVbChuLHQpKX12YXIgUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9ZX19cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189THZlLG59KSgpO2Z1bmN0aW9uIEJ2ZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlP24ubmF0aXZlRWxlbWVudDpufW5ldyBwZSgiUmVuZGVyZXIySW50ZXJjZXB0b3IiKTt2YXIgd3U9Y2xhc3N7fSxFdT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24oKXtsZXQgbj1ydCgpLGU9cXAoem8oKS5pbmRleCxuKTtyZXR1cm4oemYoZSk/ZTpuKVsxMV19KCksbn0pKCksSHZlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4scHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLG59KSgpLEljPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10LHRoaXMubWFqb3I9dC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9dC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9dC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19LFV2ZT1uZXcgSWMoIjE0LjIuMTEiKSxITj17fTtmdW5jdGlvbiBVTihuKXtyZXR1cm4gbi5uZ09yaWdpbmFsRXJyb3J9dmFyIFFzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKHQpe2xldCBlPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKHQpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIix0KSxlJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsZSl9X2ZpbmRPcmlnaW5hbEVycm9yKHQpe2xldCBlPXQmJlVOKHQpO2Zvcig7ZSYmVU4oZSk7KWU9VU4oZSk7cmV0dXJuIGV8fG51bGx9fSxqdmU9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxHdmU9Lyg8fD4pLyxOOT1uZXcgTWFwLFl2ZT0wLFFXPSJfX25nQ29udGV4dF9fIjtmdW5jdGlvbiBTdShuLHQpe3pmKHQpPyhuW1FXXT10WzIwXSxmdW5jdGlvbihuKXtOOS5zZXQoblsyMF0sbil9KHQpKTpuW1FXXT10fWZ1bmN0aW9uIFd4KG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gX1Qobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudH1mdW5jdGlvbiBSMShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIEZ1bmN0aW9uP24oKTpufXZhciBETCxCbD0oKCk9PntyZXR1cm4obj1CbHx8KEJsPXt9KSlbbi5JbXBvcnRhbnQ9MV09IkltcG9ydGFudCIsbltuLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsQmw7dmFyIG59KSgpO2Z1bmN0aW9uIFAzKG4sdCl7cmV0dXJuIERMKG4sdCl9ZnVuY3Rpb24gUjMobil7bGV0IHQ9blszXTtyZXR1cm4gVmQodCk/dFszXTp0fWZ1bmN0aW9uIE8zKG4pe3JldHVybiBCOShuWzEzXSl9ZnVuY3Rpb24gazMobil7cmV0dXJuIEI5KG5bNF0pfWZ1bmN0aW9uIEI5KG4pe2Zvcig7bnVsbCE9PW4mJiFWZChuKTspbj1uWzRdO3JldHVybiBufWZ1bmN0aW9uIFQwKG4sdCxlLGkscil7aWYobnVsbCE9aSl7bGV0IG8scz0hMTtWZChpKT9vPWk6emYoaSkmJihzPSEwLGk9aVswXSk7bGV0IGE9JGEoaSk7MD09PW4mJm51bGwhPT1lP251bGw9PXI/RzkodCxlLGEpOllmKHQsZSxhLHJ8fG51bGwsITApOjE9PT1uJiZudWxsIT09ZT9ZZih0LGUsYSxyfHxudWxsLCEwKToyPT09bj9LOSh0LGEscyk6Mz09PW4mJnQuZGVzdHJveU5vZGUoYSksbnVsbCE9byYmZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1lWzddO28hPT0kYShlKSYmVDAodCxuLGksbyxyKTtmb3IobGV0IGE9MTA7YTxlLmxlbmd0aDthKyspe2xldCBsPWVbYV07cXgobFsxXSxsLG4sdCxpLG8pfX0odCxuLG8sZSxyKX19ZnVuY3Rpb24gRjMobix0KXtyZXR1cm4gbi5jcmVhdGVUZXh0KHQpfWZ1bmN0aW9uIFY5KG4sdCxlKXtuLnNldFZhbHVlKHQsZSl9ZnVuY3Rpb24gZXllKG4sdCl7cmV0dXJuIG4uY3JlYXRlQ29tbWVudChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKGp2ZSx0PT50LnJlcGxhY2UoR3ZlLCJcdTIwMGIkMVx1MjAwYiIpKX0odCkpfWZ1bmN0aW9uIE4zKG4sdCxlKXtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KHQsZSl9ZnVuY3Rpb24gSDkobix0KXtsZXQgZT1uWzldLGk9ZS5pbmRleE9mKHQpLHI9dFszXTs1MTImdFsyXSYmKHRbMl0mPS01MTMsZjMociwtMSkpLGUuc3BsaWNlKGksMSl9ZnVuY3Rpb24gQUwobix0KXtpZihuLmxlbmd0aDw9MTApcmV0dXJuO2xldCBlPTEwK3QsaT1uW2VdO2lmKGkpe2xldCByPWlbMTddO251bGwhPT1yJiZyIT09biYmSDkocixpKSx0PjAmJihuW2UtMV1bNF09aVs0XSk7bGV0IG89WDEobiwxMCt0KTshZnVuY3Rpb24obix0KXtxeChuLHQsdFsxMV0sMixudWxsLG51bGwpLHRbMF09bnVsbCx0WzZdPW51bGx9KGlbMV0saSk7bGV0IHM9b1sxOV07bnVsbCE9PXMmJnMuZGV0YWNoVmlldyhvWzFdKSxpWzNdPW51bGwsaVs0XT1udWxsLGlbMl0mPS02NX1yZXR1cm4gaX1mdW5jdGlvbiBVOShuLHQpe2lmKCEoMTI4JnRbMl0pKXtsZXQgZT10WzExXTtlLmRlc3Ryb3lOb2RlJiZxeChuLHQsZSwzLG51bGwsbnVsbCksZnVuY3Rpb24obil7bGV0IHQ9blsxM107aWYoIXQpcmV0dXJuIHpOKG5bMV0sbik7Zm9yKDt0Oyl7bGV0IGU9bnVsbDtpZih6Zih0KSllPXRbMTNdO2Vsc2V7bGV0IGk9dFsxMF07aSYmKGU9aSl9aWYoIWUpe2Zvcig7dCYmIXRbNF0mJnQhPT1uOyl6Zih0KSYmek4odFsxXSx0KSx0PXRbM107bnVsbD09PXQmJih0PW4pLHpmKHQpJiZ6Tih0WzFdLHQpLGU9dCYmdFs0XX10PWV9fSh0KX19ZnVuY3Rpb24gek4obix0KXtpZighKDEyOCZ0WzJdKSl7dFsyXSY9LTY1LHRbMl18PTEyOCxmdW5jdGlvbihuLHQpe2xldCBlO2lmKG51bGwhPW4mJm51bGwhPShlPW4uZGVzdHJveUhvb2tzKSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCByPXRbZVtpXV07aWYoIShyIGluc3RhbmNlb2YgcWYpKXtsZXQgbz1lW2krMV07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrPTIpe2xldCBhPXJbb1tzXV0sbD1vW3MrMV07dHJ5e2wuY2FsbChhKX1maW5hbGx5e319ZWxzZSB0cnl7by5jYWxsKHIpfWZpbmFsbHl7fX19fShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5jbGVhbnVwLGk9dFs3XSxyPS0xO2lmKG51bGwhPT1lKWZvcihsZXQgbz0wO288ZS5sZW5ndGgtMTtvKz0yKWlmKCJzdHJpbmciPT10eXBlb2YgZVtvXSl7bGV0IHM9ZVtvKzFdLGE9ImZ1bmN0aW9uIj09dHlwZW9mIHM/cyh0KTokYSh0W3NdKSxsPWlbcj1lW28rMl1dLGM9ZVtvKzNdOyJib29sZWFuIj09dHlwZW9mIGM/YS5yZW1vdmVFdmVudExpc3RlbmVyKGVbb10sbCxjKTpjPj0wP2lbcj1jXSgpOmlbcj0tY10udW5zdWJzY3JpYmUoKSxvKz0yfWVsc2V7bGV0IHM9aVtyPWVbbysxXV07ZVtvXS5jYWxsKHMpfWlmKG51bGwhPT1pKXtmb3IobGV0IG89cisxO288aS5sZW5ndGg7bysrKSgwLGlbb10pKCk7dFs3XT1udWxsfX0obix0KSwxPT09dFsxXS50eXBlJiZ0WzExXS5kZXN0cm95KCk7bGV0IGU9dFsxN107aWYobnVsbCE9PWUmJlZkKHRbM10pKXtlIT09dFszXSYmSDkoZSx0KTtsZXQgaT10WzE5XTtudWxsIT09aSYmaS5kZXRhY2hWaWV3KG4pfSFmdW5jdGlvbihuKXtOOS5kZWxldGUoblsyMF0pfSh0KX19ZnVuY3Rpb24gejkobix0LGUpe3JldHVybiBqOShuLHQucGFyZW50LGUpfWZ1bmN0aW9uIGo5KG4sdCxlKXtsZXQgaT10O2Zvcig7bnVsbCE9PWkmJjQwJmkudHlwZTspaT0odD1pKS5wYXJlbnQ7aWYobnVsbD09PWkpcmV0dXJuIGVbMF07aWYoMiZpLmZsYWdzKXtsZXQgcj1uLmRhdGFbaS5kaXJlY3RpdmVTdGFydF0uZW5jYXBzdWxhdGlvbjtpZihyPT09SmEuTm9uZXx8cj09PUphLkVtdWxhdGVkKXJldHVybiBudWxsfXJldHVybiBVbChpLGUpfWZ1bmN0aW9uIFlmKG4sdCxlLGkscil7bi5pbnNlcnRCZWZvcmUodCxlLGkscil9ZnVuY3Rpb24gRzkobix0LGUpe24uYXBwZW5kQ2hpbGQodCxlKX1mdW5jdGlvbiBLVyhuLHQsZSxpLHIpe251bGwhPT1pP1lmKG4sdCxlLGkscik6Rzkobix0LGUpfWZ1bmN0aW9uIHZUKG4sdCl7cmV0dXJuIG4ucGFyZW50Tm9kZSh0KX1mdW5jdGlvbiBXOShuLHQsZSl7cmV0dXJuIFk5KG4sdCxlKX1mdW5jdGlvbiBxOShuLHQsZSl7cmV0dXJuIDQwJm4udHlwZT9VbChuLGUpOm51bGx9dmFyIElMLFk5PXE5O2Z1bmN0aW9uIFg5KG4sdCl7WTk9bixJTD10fWZ1bmN0aW9uIHlUKG4sdCxlLGkpe2xldCByPXo5KG4saSx0KSxvPXRbMTFdLGE9VzkoaS5wYXJlbnR8fHRbNl0saSx0KTtpZihudWxsIT1yKWlmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspS1cobyxyLGVbbF0sYSwhMSk7ZWxzZSBLVyhvLHIsZSxhLCExKTt2b2lkIDAhPT1JTCYmSUwobyxpLHQsZSxyKX1mdW5jdGlvbiBPMShuLHQpe2lmKG51bGwhPT10KXtsZXQgZT10LnR5cGU7aWYoMyZlKXJldHVybiBVbCh0LG4pO2lmKDQmZSlyZXR1cm4gUEwoLTEsblt0LmluZGV4XSk7aWYoOCZlKXtsZXQgaT10LmNoaWxkO2lmKG51bGwhPT1pKXJldHVybiBPMShuLGkpO3tsZXQgcj1uW3QuaW5kZXhdO3JldHVybiBWZChyKT9QTCgtMSxyKTokYShyKX19aWYoMzImZSlyZXR1cm4gUDModCxuKSgpfHwkYShuW3QuaW5kZXhdKTt7bGV0IGk9UTkobix0KTtyZXR1cm4gbnVsbCE9PWk/QXJyYXkuaXNBcnJheShpKT9pWzBdOk8xKFIzKG5bMTZdKSxpKTpPMShuLHQubmV4dCl9fXJldHVybiBudWxsfWZ1bmN0aW9uIFE5KG4sdCl7cmV0dXJuIG51bGwhPT10P25bMTZdWzZdLnByb2plY3Rpb25bdC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFBMKG4sdCl7bGV0IGU9MTArbisxO2lmKGU8dC5sZW5ndGgpe2xldCBpPXRbZV0scj1pWzFdLmZpcnN0Q2hpbGQ7aWYobnVsbCE9PXIpcmV0dXJuIE8xKGkscil9cmV0dXJuIHRbN119ZnVuY3Rpb24gSzkobix0LGUpe2xldCBpPXZUKG4sdCk7aSYmZnVuY3Rpb24obix0LGUsaSl7bi5yZW1vdmVDaGlsZCh0LGUsaSl9KG4saSx0LGUpfWZ1bmN0aW9uIEwzKG4sdCxlLGkscixvLHMpe2Zvcig7bnVsbCE9ZTspe2xldCBhPWlbZS5pbmRleF0sbD1lLnR5cGU7aWYocyYmMD09PXQmJihhJiZTdSgkYShhKSxpKSxlLmZsYWdzfD00KSw2NCE9KDY0JmUuZmxhZ3MpKWlmKDgmbClMMyhuLHQsZS5jaGlsZCxpLHIsbywhMSksVDAodCxuLHIsYSxvKTtlbHNlIGlmKDMyJmwpe2xldCB1LGM9UDMoZSxpKTtmb3IoO3U9YygpOylUMCh0LG4scix1LG8pO1QwKHQsbixyLGEsbyl9ZWxzZSAxNiZsP1o5KG4sdCxpLGUscixvKTpUMCh0LG4scixhLG8pO2U9cz9lLnByb2plY3Rpb25OZXh0OmUubmV4dH19ZnVuY3Rpb24gcXgobix0LGUsaSxyLG8pe0wzKGUsaSxuLmZpcnN0Q2hpbGQsdCxyLG8sITEpfWZ1bmN0aW9uIFo5KG4sdCxlLGkscixvKXtsZXQgcz1lWzE2XSxsPXNbNl0ucHJvamVjdGlvbltpLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTA7YzxsLmxlbmd0aDtjKyspVDAodCxuLHIsbFtjXSxvKTtlbHNlIEwzKG4sdCxsLHNbM10scixvLCEwKX1mdW5jdGlvbiBKOShuLHQsZSl7bi5zZXRBdHRyaWJ1dGUodCwic3R5bGUiLGUpfWZ1bmN0aW9uIEIzKG4sdCxlKXsiIj09PWU/bi5yZW1vdmVBdHRyaWJ1dGUodCwiY2xhc3MiKTpuLnNldEF0dHJpYnV0ZSh0LCJjbGFzcyIsZSl9ZnVuY3Rpb24gJDkobix0LGUpe2xldCBpPW4ubGVuZ3RoO2Zvcig7Oyl7bGV0IHI9bi5pbmRleE9mKHQsZSk7aWYoLTE9PT1yKXJldHVybiByO2lmKDA9PT1yfHxuLmNoYXJDb2RlQXQoci0xKTw9MzIpe2xldCBvPXQubGVuZ3RoO2lmKHIrbz09PWl8fG4uY2hhckNvZGVBdChyK28pPD0zMilyZXR1cm4gcn1lPXIrMX19dmFyIGVxPSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gZnllKG4sdCxlKXtsZXQgaT0wO2Zvcig7aTxuLmxlbmd0aDspe2xldCByPW5baSsrXTtpZihlJiYiY2xhc3MiPT09cil7aWYocj1uW2ldLC0xIT09JDkoci50b0xvd2VyQ2FzZSgpLHQsMCkpcmV0dXJuITB9ZWxzZSBpZigxPT09cil7Zm9yKDtpPG4ubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKHI9bltpKytdKTspaWYoci50b0xvd2VyQ2FzZSgpPT09dClyZXR1cm4hMDtyZXR1cm4hMX19cmV0dXJuITF9ZnVuY3Rpb24gdHEobil7cmV0dXJuIDQ9PT1uLnR5cGUmJm4udmFsdWUhPT1lcX1mdW5jdGlvbiBteWUobix0LGUpe3JldHVybiB0PT09KDQhPT1uLnR5cGV8fGU/bi52YWx1ZTplcSl9ZnVuY3Rpb24gZ3llKG4sdCxlKXtsZXQgaT00LHI9bi5hdHRyc3x8W10sbz1mdW5jdGlvbihuKXtmb3IobGV0IHQ9MDt0PG4ubGVuZ3RoO3QrKylpZigkNyhuW3RdKSlyZXR1cm4gdDtyZXR1cm4gbi5sZW5ndGh9KHIpLHM9ITE7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspe2xldCBsPXRbYV07aWYoIm51bWJlciIhPXR5cGVvZiBsKXtpZighcylpZig0Jmkpe2lmKGk9MnwxJmksIiIhPT1sJiYhbXllKG4sbCxlKXx8IiI9PT1sJiYxPT09dC5sZW5ndGgpe2lmKFNjKGkpKXJldHVybiExO3M9ITB9fWVsc2V7bGV0IGM9OCZpP2w6dFsrK2FdO2lmKDgmaSYmbnVsbCE9PW4uYXR0cnMpe2lmKCFmeWUobi5hdHRycyxjLGUpKXtpZihTYyhpKSlyZXR1cm4hMTtzPSEwfWNvbnRpbnVlfWxldCBkPV95ZSg4Jmk/ImNsYXNzIjpsLHIsdHEobiksZSk7aWYoLTE9PT1kKXtpZihTYyhpKSlyZXR1cm4hMTtzPSEwO2NvbnRpbnVlfWlmKCIiIT09Yyl7bGV0IHA7cD1kPm8/IiI6cltkKzFdLnRvTG93ZXJDYXNlKCk7bGV0IGg9OCZpP3A6bnVsbDtpZihoJiYtMSE9PSQ5KGgsYywwKXx8MiZpJiZjIT09cCl7aWYoU2MoaSkpcmV0dXJuITE7cz0hMH19fX1lbHNle2lmKCFzJiYhU2MoaSkmJiFTYyhsKSlyZXR1cm4hMTtpZihzJiZTYyhsKSljb250aW51ZTtzPSExLGk9bHwxJml9fXJldHVybiBTYyhpKXx8c31mdW5jdGlvbiBTYyhuKXtyZXR1cm4gMD09KDEmbil9ZnVuY3Rpb24gX3llKG4sdCxlLGkpe2lmKG51bGw9PT10KXJldHVybi0xO2xldCByPTA7aWYoaXx8IWUpe2xldCBvPSExO2Zvcig7cjx0Lmxlbmd0aDspe2xldCBzPXRbcl07aWYocz09PW4pcmV0dXJuIHI7aWYoMz09PXN8fDY9PT1zKW89ITA7ZWxzZXtpZigxPT09c3x8Mj09PXMpe2xldCBhPXRbKytyXTtmb3IoOyJzdHJpbmciPT10eXBlb2YgYTspYT10Wysrcl07Y29udGludWV9aWYoND09PXMpYnJlYWs7aWYoMD09PXMpe3IrPTQ7Y29udGludWV9fXIrPW8/MToyfXJldHVybi0xfXJldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5kZXhPZig0KTtpZihlPi0xKWZvcihlKys7ZTxuLmxlbmd0aDspe2xldCBpPW5bZV07aWYoIm51bWJlciI9PXR5cGVvZiBpKXJldHVybi0xO2lmKGk9PT10KXJldHVybiBlO2UrK31yZXR1cm4tMX0odCxuKX1mdW5jdGlvbiBucShuLHQsZT0hMSl7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspaWYoZ3llKG4sdFtpXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB4eWUobix0KXtlOmZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgaT10W2VdO2lmKG4ubGVuZ3RoPT09aS5sZW5ndGgpe2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKWlmKG5bcl0hPT1pW3JdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIFpXKG4sdCl7cmV0dXJuIG4/Ijpub3QoIit0LnRyaW0oKSsiKSI6dH1mdW5jdGlvbiBDeWUobil7bGV0IHQ9blswXSxlPTEsaT0yLHI9IiIsbz0hMTtmb3IoO2U8bi5sZW5ndGg7KXtsZXQgcz1uW2VdO2lmKCJzdHJpbmciPT10eXBlb2YgcylpZigyJmkpe2xldCBhPW5bKytlXTtyKz0iWyIrcysoYS5sZW5ndGg+MD8nPSInK2ErJyInOiIiKSsiXSJ9ZWxzZSA4Jmk/cis9Ii4iK3M6NCZpJiYocis9IiAiK3MpO2Vsc2UiIiE9PXImJiFTYyhzKSYmKHQrPVpXKG8scikscj0iIiksaT1zLG89b3x8IVNjKGkpO2UrK31yZXR1cm4iIiE9PXImJih0Kz1aVyhvLHIpKSx0fXZhciBRbj17fTtmdW5jdGlvbiBDKG4pe2lxKEZpKCkscnQoKSxacygpK24sITEpfWZ1bmN0aW9uIGlxKG4sdCxlLGkpe2lmKCFpKWlmKDM9PSgzJnRbMl0pKXtsZXQgbz1uLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09byYmRDEodCxvLGUpfWVsc2V7bGV0IG89bi5wcmVPcmRlckhvb2tzO251bGwhPT1vJiZBMSh0LG8sMCxlKX16cChlKX12YXIgSlc9eyJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp5ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlYsIlx1MDI3NVx1MDI3NWluamVjdCI6aiwiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiOmQ5LHJlc29sdmVGb3J3YXJkUmVmOktpfTt2YXIgRXllPW1yKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTptcn0pO2Z1bmN0aW9uICRXKG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUNsYXNzfWZ1bmN0aW9uIGU3KG4pe3JldHVybiB2b2lkIDAhPT1uLnVzZUZhY3Rvcnl9dmFyIHJxPVZ4KCJJbmplY3RhYmxlIix2b2lkIDAsdm9pZCAwLHZvaWQgMCwobix0KT0+ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtuLmhhc093blByb3BlcnR5KEwxKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sTDEse2dldDooKT0+KG51bGw9PT1lJiYoZT1MbCgpLmNvbXBpbGVJbmplY3RhYmxlKEpXLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1cHJvdi5qc2AsZnVuY3Rpb24obix0KXtsZXQgZT10fHx7cHJvdmlkZWRJbjpudWxsfSxpPXtuYW1lOm4ubmFtZSx0eXBlOm4sdHlwZUFyZ3VtZW50Q291bnQ6MCxwcm92aWRlZEluOmUucHJvdmlkZWRJbn07cmV0dXJuKCRXKGUpfHxlNyhlKSkmJnZvaWQgMCE9PWUuZGVwcyYmKGkuZGVwcz1wOShlLmRlcHMpKSwkVyhlKT9pLnVzZUNsYXNzPWUudXNlQ2xhc3M6ZnVuY3Rpb24obil7cmV0dXJuIEV5ZSBpbiBufShlKT9pLnVzZVZhbHVlPWUudXNlVmFsdWU6ZTcoZSk/aS51c2VGYWN0b3J5PWUudXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi51c2VFeGlzdGluZ30oZSkmJihpLnVzZUV4aXN0aW5nPWUudXNlRXhpc3RpbmcpLGl9KG4sdCkpKSxlKX0pLG4uaGFzT3duUHJvcGVydHkoTmQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobixOZCx7Z2V0OigpPT57aWYobnVsbD09PWkpe2xldCByPUxsKCk7aT1yLmNvbXBpbGVGYWN0b3J5KEpXLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTpuLm5hbWUsdHlwZTpuLHR5cGVBcmd1bWVudENvdW50OjAsZGVwczpmVChuKSx0YXJnZXQ6ci5GYWN0b3J5VGFyZ2V0LkluamVjdGFibGV9KX1yZXR1cm4gaX0sY29uZmlndXJhYmxlOiEwfSl9KG4sdCkpO2Z1bmN0aW9uIHQ3KG4sdD1udWxsLGU9bnVsbCxpKXtsZXQgcj1vcShuLHQsZSxpKTtyZXR1cm4gci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxyfWZ1bmN0aW9uIG9xKG4sdD1udWxsLGU9bnVsbCxpLHI9bmV3IFNldCl7bGV0IG89W2V8fFFpLE12ZShuKV07cmV0dXJuIGk9aXx8KCJvYmplY3QiPT10eXBlb2Ygbj92b2lkIDA6VG8obikpLG5ldyBaMShvLHR8fEkzKCksaXx8bnVsbCxyKX12YXIgWG49KCgpPT57Y2xhc3MgbntzdGF0aWMgY3JlYXRlKGUsaSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdDcoe25hbWU6IiJ9LGksZSwiIik7e2xldCByPWUubmFtZT8/IiI7cmV0dXJuIHQ3KHtuYW1lOnJ9LGUucGFyZW50LGUucHJvdmlkZXJzLHIpfX19cmV0dXJuIG4uVEhST1dfSUZfTk9UX0ZPVU5EPVR4LG4uTlVMTD1uZXcgSzEsbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+aihJOSl9KSxuLl9fTkdfRUxFTUVOVF9JRF9fPS0xLG59KSgpLGd4PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7aWYodGhpcy50b2tlbj10LHRoaXMuaWQ9ZSwhdCl0aHJvdyBuZXcgQXQoMjA4LCExKTt0aGlzLmRpc3BsYXlOYW1lPVRvKHRoaXMudG9rZW4pfXN0YXRpYyBnZXQodCl7cmV0dXJuIG43LmdldChLaSh0KSl9c3RhdGljIGdldCBudW1iZXJPZktleXMoKXtyZXR1cm4gbjcubnVtYmVyT2ZLZXlzfX0sbjc9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fYWxsS2V5cz1uZXcgTWFwfWdldCh0KXtpZih0IGluc3RhbmNlb2YgZ3gpcmV0dXJuIHQ7aWYodGhpcy5fYWxsS2V5cy5oYXModCkpcmV0dXJuIHRoaXMuX2FsbEtleXMuZ2V0KHQpO2xldCBlPW5ldyBneCh0LGd4Lm51bWJlck9mS2V5cyk7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2V0KHQsZSksZX1nZXQgbnVtYmVyT2ZLZXlzKCl7cmV0dXJuIHRoaXMuX2FsbEtleXMuc2l6ZX19O2Z1bmN0aW9uIE0obix0PWRpLkRlZmF1bHQpe2xldCBlPXJ0KCk7cmV0dXJuIG51bGw9PT1lP2oobix0KTpzOSh6bygpLGUsS2kobiksdCl9ZnVuY3Rpb24gbmwoKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX1mdW5jdGlvbiBFMShuLHQpe3JldHVybiBuPDwxN3x0PDwyfWZ1bmN0aW9uIFhmKG4pe3JldHVybiBuPj4xNyYzMjc2N31mdW5jdGlvbiBPTChuKXtyZXR1cm4gMnxufWZ1bmN0aW9uIEYwKG4pe3JldHVybigxMzEwNjgmbik+PjJ9ZnVuY3Rpb24gak4obix0KXtyZXR1cm4tMTMxMDY5Jm58dDw8Mn1mdW5jdGlvbiBrTChuKXtyZXR1cm4gMXxufWZ1bmN0aW9uIHNxKG4sdCl7bGV0IGU9bi5jb250ZW50UXVlcmllcztpZihudWxsIT09ZSlmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krPTIpe2xldCByPWVbaV0sbz1lW2krMV07aWYoLTEhPT1vKXtsZXQgcz1uLmRhdGFbb107djMocikscy5jb250ZW50UXVlcmllcygyLHRbb10sbyl9fX1mdW5jdGlvbiBiVChuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPXQuYmx1ZXByaW50LnNsaWNlKCk7cmV0dXJuIGRbMF09cixkWzJdPTc2fGksKG51bGwhPT11fHxuJiYxMDI0Jm5bMl0pJiYoZFsyXXw9MTAyNCksVTcoZCksZFszXT1kWzE1XT1uLGRbOF09ZSxkWzEwXT1zfHxuJiZuWzEwXSxkWzExXT1hfHxuJiZuWzExXSxkWzEyXT1sfHxuJiZuWzEyXXx8bnVsbCxkWzldPWN8fG4mJm5bOV18fG51bGwsZFs2XT1vLGRbMjBdPVl2ZSsrLGRbMjFdPXUsZFsxNl09Mj09dC50eXBlP25bMTZdOmQsZH1mdW5jdGlvbiBXMChuLHQsZSxpLHIpe2xldCBvPW4uZGF0YVt0XTtpZihudWxsPT09bylvPVYzKG4sdCxlLGksciksWm4ubEZyYW1lLmluSTE4biYmKG8uZmxhZ3N8PTY0KTtlbHNlIGlmKDY0Jm8udHlwZSl7by50eXBlPWUsby52YWx1ZT1pLG8uYXR0cnM9cjtsZXQgcz13eCgpO28uaW5qZWN0b3JJbmRleD1udWxsPT09cz8tMTpzLmluamVjdG9ySW5kZXh9cmV0dXJuIE11KG8sITApLG99ZnVuY3Rpb24gVjMobix0LGUsaSxyKXtsZXQgbz1qNygpLHM9bTMoKSxsPW4uZGF0YVt0XT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJue3R5cGU6ZSxpbmRleDppLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp0P3QuaW5qZWN0b3JJbmRleDotMSxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOjAscHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6cixhdHRyczpvLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0Vmlld3M6bnVsbCxuZXh0Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDp0LHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCxzP286byYmby5wYXJlbnQsZSx0LGkscik7cmV0dXJuIG51bGw9PT1uLmZpcnN0Q2hpbGQmJihuLmZpcnN0Q2hpbGQ9bCksbnVsbCE9PW8mJihzP251bGw9PW8uY2hpbGQmJm51bGwhPT1sLnBhcmVudCYmKG8uY2hpbGQ9bCk6bnVsbD09PW8ubmV4dCYmKG8ubmV4dD1sKSksbH1mdW5jdGlvbiBxMChuLHQsZSxpKXtpZigwPT09ZSlyZXR1cm4tMTtsZXQgcj10Lmxlbmd0aDtmb3IobGV0IG89MDtvPGU7bysrKXQucHVzaChpKSxuLmJsdWVwcmludC5wdXNoKGkpLG4uZGF0YS5wdXNoKG51bGwpO3JldHVybiByfWZ1bmN0aW9uIEgzKG4sdCxlKXt5Myh0KTt0cnl7bGV0IGk9bi52aWV3UXVlcnk7bnVsbCE9PWkmJk5MKDEsaSxlKTtsZXQgcj1uLnRlbXBsYXRlO251bGwhPT1yJiZhcShuLHQsciwxLGUpLG4uZmlyc3RDcmVhdGVQYXNzJiYobi5maXJzdENyZWF0ZVBhc3M9ITEpLG4uc3RhdGljQ29udGVudFF1ZXJpZXMmJnNxKG4sdCksbi5zdGF0aWNWaWV3UXVlcmllcyYmTkwoMixuLnZpZXdRdWVyeSxlKTtsZXQgbz1uLmNvbXBvbmVudHM7bnVsbCE9PW8mJmZ1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspJHllKG4sdFtlXSl9KHQsbyl9Y2F0Y2goaSl7dGhyb3cgbi5maXJzdENyZWF0ZVBhc3MmJihuLmluY29tcGxldGVGaXJzdFBhc3M9ITAsbi5maXJzdENyZWF0ZVBhc3M9ITEpLGl9ZmluYWxseXt0WzJdJj0tNSxiMygpfX1mdW5jdGlvbiB4VChuLHQsZSxpKXtsZXQgcj10WzJdO2lmKDEyOCE9KDEyOCZyKSl7eTModCk7dHJ5e1U3KHQpLEc3KG4uYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1lJiZhcShuLHQsZSwyLGkpO2xldCBzPTM9PSgzJnIpO2lmKHMpe2xldCBjPW4ucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1jJiZEMSh0LGMsbnVsbCl9ZWxzZXtsZXQgYz1uLnByZU9yZGVySG9va3M7bnVsbCE9PWMmJkExKHQsYywwLG51bGwpLEZOKHQsMCl9aWYoZnVuY3Rpb24obil7Zm9yKGxldCB0PU8zKG4pO251bGwhPT10O3Q9azModCkpe2lmKCF0WzJdKWNvbnRpbnVlO2xldCBlPXRbOV07Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVbaV0sbz1yWzNdOzA9PSg1MTImclsyXSkmJmYzKG8sMSksclsyXXw9NTEyfX19KHQpLGZ1bmN0aW9uKG4pe2ZvcihsZXQgdD1PMyhuKTtudWxsIT09dDt0PWszKHQpKWZvcihsZXQgZT0xMDtlPHQubGVuZ3RoO2UrKyl7bGV0IGk9dFtlXSxyPWlbMV07VTEoaSkmJnhUKHIsaSxyLnRlbXBsYXRlLGlbOF0pfX0odCksbnVsbCE9PW4uY29udGVudFF1ZXJpZXMmJnNxKG4sdCkscyl7bGV0IGM9bi5jb250ZW50Q2hlY2tIb29rcztudWxsIT09YyYmRDEodCxjKX1lbHNle2xldCBjPW4uY29udGVudEhvb2tzO251bGwhPT1jJiZBMSh0LGMsMSksRk4odCwxKX0hZnVuY3Rpb24obix0KXtsZXQgZT1uLmhvc3RCaW5kaW5nT3BDb2RlcztpZihudWxsIT09ZSl0cnl7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCByPWVbaV07aWYocjwwKXpwKH5yKTtlbHNle2xldCBvPXIscz1lWysraV0sYT1lWysraV07c19lKHMsbyksYSgyLHRbb10pfX19ZmluYWxseXt6cCgtMSl9fShuLHQpO2xldCBhPW4uY29tcG9uZW50cztudWxsIT09YSYmZnVuY3Rpb24obix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKylKeWUobix0W2VdKX0odCxhKTtsZXQgbD1uLnZpZXdRdWVyeTtpZihudWxsIT09bCYmTkwoMixsLGkpLHMpe2xldCBjPW4udmlld0NoZWNrSG9va3M7bnVsbCE9PWMmJkQxKHQsYyl9ZWxzZXtsZXQgYz1uLnZpZXdIb29rcztudWxsIT09YyYmQTEodCxjLDIpLEZOKHQsMil9ITA9PT1uLmZpcnN0VXBkYXRlUGFzcyYmKG4uZmlyc3RVcGRhdGVQYXNzPSExKSx0WzJdJj0tNDEsNTEyJnRbMl0mJih0WzJdJj0tNTEzLGYzKHRbM10sLTEpKX1maW5hbGx5e2IzKCl9fX1mdW5jdGlvbiBhcShuLHQsZSxpLHIpe2xldCBvPVpzKCkscz0yJmk7dHJ5e3pwKC0xKSxzJiZ0Lmxlbmd0aD4yMiYmaXEobix0LDIyLCExKSxlKGkscil9ZmluYWxseXt6cChvKX19ZnVuY3Rpb24gbHEobix0LGUpe2lmKHAzKHQpKXtsZXQgcj10LmRpcmVjdGl2ZUVuZDtmb3IobGV0IG89dC5kaXJlY3RpdmVTdGFydDtvPHI7bysrKXtsZXQgcz1uLmRhdGFbb107cy5jb250ZW50UXVlcmllcyYmcy5jb250ZW50UXVlcmllcygxLGVbb10sbyl9fX1mdW5jdGlvbiBVMyhuLHQsZSl7IXo3KCl8fChmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1lLmRpcmVjdGl2ZVN0YXJ0LG89ZS5kaXJlY3RpdmVFbmQ7bi5maXJzdENyZWF0ZVBhc3N8fFN4KGUsdCksU3UoaSx0KTtsZXQgcz1lLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBhPXI7YTxvO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9QWMobCk7YyYmWXllKHQsZSxsKTtsZXQgdT1CeCh0LG4sYSxlKTtTdSh1LHQpLG51bGwhPT1zJiZYeWUoMCxhLXIsdSxsLDAscyksYyYmKHFwKGUuaW5kZXgsdClbOF09dSl9fShuLHQsZSxVbChlLHQpKSwxMjg9PSgxMjgmZS5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lLmRpcmVjdGl2ZVN0YXJ0LHI9ZS5kaXJlY3RpdmVFbmQsbz1lLmluZGV4LHM9Wm4ubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDt0cnl7enAobyk7Zm9yKGxldCBhPWk7YTxyO2ErKyl7bGV0IGw9bi5kYXRhW2FdLGM9dFthXTtzTChhKSwobnVsbCE9PWwuaG9zdEJpbmRpbmdzfHwwIT09bC5ob3N0VmFyc3x8bnVsbCE9PWwuaG9zdEF0dHJzKSYmZnEobCxjKX19ZmluYWxseXt6cCgtMSksc0wocyl9fShuLHQsZSkpfWZ1bmN0aW9uIHozKG4sdCxlPVVsKXtsZXQgaT10LmxvY2FsTmFtZXM7aWYobnVsbCE9PWkpe2xldCByPXQuaW5kZXgrMTtmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rPTIpe2xldCBzPWlbbysxXSxhPS0xPT09cz9lKHQsbik6bltzXTtuW3IrK109YX19fWZ1bmN0aW9uIGNxKG4pe2xldCB0PW4udFZpZXc7cmV0dXJuIG51bGw9PT10fHx0LmluY29tcGxldGVGaXJzdFBhc3M/bi50Vmlldz1qMygxLG51bGwsbi50ZW1wbGF0ZSxuLmRlY2xzLG4udmFycyxuLmRpcmVjdGl2ZURlZnMsbi5waXBlRGVmcyxuLnZpZXdRdWVyeSxuLnNjaGVtYXMsbi5jb25zdHMpOnR9ZnVuY3Rpb24gajMobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9MjIraSxkPXUrcixwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0O2krKyllLnB1c2goaTxuP251bGw6UW4pO3JldHVybiBlfSh1LGQpLGg9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmM7cmV0dXJuIHBbMV09e3R5cGU6bixibHVlcHJpbnQ6cCx0ZW1wbGF0ZTplLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6YSxkZWNsVE5vZGU6dCxkYXRhOnAuc2xpY2UoKS5maWxsKG51bGwsdSksYmluZGluZ1N0YXJ0SW5kZXg6dSxleHBhbmRvU3RhcnRJbmRleDpkLGhvc3RCaW5kaW5nT3BDb2RlczpudWxsLGZpcnN0Q3JlYXRlUGFzczohMCxmaXJzdFVwZGF0ZVBhc3M6ITAsc3RhdGljVmlld1F1ZXJpZXM6ITEsc3RhdGljQ29udGVudFF1ZXJpZXM6ITEscHJlT3JkZXJIb29rczpudWxsLHByZU9yZGVyQ2hlY2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRDaGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxjbGVhbnVwOm51bGwsY29udGVudFF1ZXJpZXM6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIG8/bygpOm8scGlwZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBzP3MoKTpzLGZpcnN0Q2hpbGQ6bnVsbCxzY2hlbWFzOmwsY29uc3RzOmgsaW5jb21wbGV0ZUZpcnN0UGFzczohMX19ZnVuY3Rpb24gdXEobix0LGUsaSl7bGV0IHI9eHEodCk7bnVsbD09PWU/ci5wdXNoKGkpOihyLnB1c2goZSksbi5maXJzdENyZWF0ZVBhc3MmJkNxKG4pLnB1c2goaSxyLmxlbmd0aC0xKSl9ZnVuY3Rpb24gaTcobix0LGUpe2ZvcihsZXQgaSBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkoaSkpe2xldCByPW5baV07KGU9bnVsbD09PWU/e306ZSkuaGFzT3duUHJvcGVydHkoaSk/ZVtpXS5wdXNoKHQscik6ZVtpXT1bdCxyXX1yZXR1cm4gZX1mdW5jdGlvbiBkcShuLHQpe2xldCBpPXQuZGlyZWN0aXZlRW5kLHI9bi5kYXRhLG89dC5hdHRycyxzPVtdLGE9bnVsbCxsPW51bGw7Zm9yKGxldCBjPXQuZGlyZWN0aXZlU3RhcnQ7YzxpO2MrKyl7bGV0IHU9cltjXSxkPXUuaW5wdXRzLHA9bnVsbD09PW98fHRxKHQpP251bGw6UXllKGQsbyk7cy5wdXNoKHApLGE9aTcoZCxjLGEpLGw9aTcodS5vdXRwdXRzLGMsbCl9bnVsbCE9PWEmJihhLmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYodC5mbGFnc3w9MTYpLGEuaGFzT3duUHJvcGVydHkoInN0eWxlIikmJih0LmZsYWdzfD0zMikpLHQuaW5pdGlhbElucHV0cz1zLHQuaW5wdXRzPWEsdC5vdXRwdXRzPWx9ZnVuY3Rpb24gaWwobix0LGUsaSxyLG8scyxhKXtsZXQgdSxsPVVsKHQsZSksYz10LmlucHV0czshYSYmbnVsbCE9YyYmKHU9Y1tpXSk/KHEzKG4sZSx1LGksciksaDModCkmJnBxKGUsdC5pbmRleCkpOjMmdC50eXBlJiYoaT1mdW5jdGlvbihuKXtyZXR1cm4iY2xhc3MiPT09bj8iY2xhc3NOYW1lIjoiZm9yIj09PW4/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PW4/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09bj8iaW5uZXJIVE1MIjoicmVhZG9ubHkiPT09bj8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1uPyJ0YWJJbmRleCI6bn0oaSkscj1udWxsIT1zP3Mocix0LnZhbHVlfHwiIixpKTpyLG8uc2V0UHJvcGVydHkobCxpLHIpKX1mdW5jdGlvbiBwcShuLHQpe2xldCBlPXFwKHQsbik7MTYmZVsyXXx8KGVbMl18PTMyKX1mdW5jdGlvbiBHMyhuLHQsZSxpKXtsZXQgcj0hMTtpZih6NygpKXtsZXQgbz1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5kaXJlY3RpdmVSZWdpc3RyeSxyPW51bGw7aWYoaSlmb3IobGV0IG89MDtvPGkubGVuZ3RoO28rKyl7bGV0IHM9aVtvXTtucShlLHMuc2VsZWN0b3JzLCExKSYmKHJ8fChyPVtdKSxZMShTeChlLHQpLG4scy50eXBlKSxBYyhzKT8obXEobixlKSxyLnVuc2hpZnQocykpOnIucHVzaChzKSl9cmV0dXJuIHJ9KG4sdCxlKSxzPW51bGw9PT1pP251bGw6eyIiOi0xfTtpZihudWxsIT09byl7cj0hMCxncShlLG4uZGF0YS5sZW5ndGgsby5sZW5ndGgpO2ZvcihsZXQgdT0wO3U8by5sZW5ndGg7dSsrKXtsZXQgZD1vW3VdO2QucHJvdmlkZXJzUmVzb2x2ZXImJmQucHJvdmlkZXJzUmVzb2x2ZXIoZCl9bGV0IGE9ITEsbD0hMSxjPXEwKG4sdCxvLmxlbmd0aCxudWxsKTtmb3IobGV0IHU9MDt1PG8ubGVuZ3RoO3UrKyl7bGV0IGQ9b1t1XTtlLm1lcmdlZEF0dHJzPWoxKGUubWVyZ2VkQXR0cnMsZC5ob3N0QXR0cnMpLF9xKG4sZSx0LGMsZCkscXllKGMsZCxzKSxudWxsIT09ZC5jb250ZW50UXVlcmllcyYmKGUuZmxhZ3N8PTgpLChudWxsIT09ZC5ob3N0QmluZGluZ3N8fG51bGwhPT1kLmhvc3RBdHRyc3x8MCE9PWQuaG9zdFZhcnMpJiYoZS5mbGFnc3w9MTI4KTtsZXQgcD1kLnR5cGUucHJvdG90eXBlOyFhJiYocC5uZ09uQ2hhbmdlc3x8cC5uZ09uSW5pdHx8cC5uZ0RvQ2hlY2spJiYoKG4ucHJlT3JkZXJIb29rc3x8KG4ucHJlT3JkZXJIb29rcz1bXSkpLnB1c2goZS5pbmRleCksYT0hMCksIWwmJihwLm5nT25DaGFuZ2VzfHxwLm5nRG9DaGVjaykmJigobi5wcmVPcmRlckNoZWNrSG9va3N8fChuLnByZU9yZGVyQ2hlY2tIb29rcz1bXSkpLnB1c2goZS5pbmRleCksbD0hMCksYysrfWRxKG4sZSl9cyYmZnVuY3Rpb24obix0LGUpe2lmKHQpe2xldCBpPW4ubG9jYWxOYW1lcz1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrPTIpe2xldCBvPWVbdFtyKzFdXTtpZihudWxsPT1vKXRocm93IG5ldyBBdCgtMzAxLCExKTtpLnB1c2godFtyXSxvKX19fShlLGkscyl9cmV0dXJuIGUubWVyZ2VkQXR0cnM9ajEoZS5tZXJnZWRBdHRycyxlLmF0dHJzKSxyfWZ1bmN0aW9uIGhxKG4sdCxlLGkscixvKXtsZXQgcz1vLmhvc3RCaW5kaW5ncztpZihzKXtsZXQgYT1uLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09YSYmKGE9bi5ob3N0QmluZGluZ09wQ29kZXM9W10pO2xldCBsPX50LmluZGV4OyhmdW5jdGlvbihuKXtsZXQgdD1uLmxlbmd0aDtmb3IoO3Q+MDspe2xldCBlPW5bLS10XTtpZigibnVtYmVyIj09dHlwZW9mIGUmJmU8MClyZXR1cm4gZX1yZXR1cm4gMH0pKGEpIT1sJiZhLnB1c2gobCksYS5wdXNoKGkscixzKX19ZnVuY3Rpb24gZnEobix0KXtudWxsIT09bi5ob3N0QmluZGluZ3MmJm4uaG9zdEJpbmRpbmdzKDEsdCl9ZnVuY3Rpb24gbXEobix0KXt0LmZsYWdzfD0yLChuLmNvbXBvbmVudHN8fChuLmNvbXBvbmVudHM9W10pKS5wdXNoKHQuaW5kZXgpfWZ1bmN0aW9uIHF5ZShuLHQsZSl7aWYoZSl7aWYodC5leHBvcnRBcylmb3IobGV0IGk9MDtpPHQuZXhwb3J0QXMubGVuZ3RoO2krKyllW3QuZXhwb3J0QXNbaV1dPW47QWModCkmJihlWyIiXT1uKX19ZnVuY3Rpb24gZ3Eobix0LGUpe24uZmxhZ3N8PTEsbi5kaXJlY3RpdmVTdGFydD10LG4uZGlyZWN0aXZlRW5kPXQrZSxuLnByb3ZpZGVySW5kZXhlcz10fWZ1bmN0aW9uIF9xKG4sdCxlLGkscil7bi5kYXRhW2ldPXI7bGV0IG89ci5mYWN0b3J5fHwoci5mYWN0b3J5PVdmKHIudHlwZSkpLHM9bmV3IHFmKG8sQWMociksTSk7bi5ibHVlcHJpbnRbaV09cyxlW2ldPXMsaHEobix0LDAsaSxxMChuLGUsci5ob3N0VmFycyxRbikscil9ZnVuY3Rpb24gWXllKG4sdCxlKXtsZXQgaT1VbCh0LG4pLHI9Y3EoZSksbz1uWzEwXSxzPUNUKG4sYlQobixyLG51bGwsZS5vblB1c2g/MzI6MTYsaSx0LG8sby5jcmVhdGVSZW5kZXJlcihpLGUpLG51bGwsbnVsbCxudWxsKSk7blt0LmluZGV4XT1zfWZ1bmN0aW9uIFR1KG4sdCxlLGkscixvKXtsZXQgcz1VbChuLHQpO1czKHRbMTFdLHMsbyxuLnZhbHVlLGUsaSxyKX1mdW5jdGlvbiBXMyhuLHQsZSxpLHIsbyxzKXtpZihudWxsPT1vKW4ucmVtb3ZlQXR0cmlidXRlKHQscixlKTtlbHNle2xldCBhPW51bGw9PXM/S24obyk6cyhvLGl8fCIiLHIpO24uc2V0QXR0cmlidXRlKHQscixhLGUpfX1mdW5jdGlvbiBYeWUobix0LGUsaSxyLG8pe2xldCBzPW9bdF07aWYobnVsbCE9PXMpe2xldCBhPWkuc2V0SW5wdXQ7Zm9yKGxldCBsPTA7bDxzLmxlbmd0aDspe2xldCBjPXNbbCsrXSx1PXNbbCsrXSxkPXNbbCsrXTtudWxsIT09YT9pLnNldElucHV0KGUsZCxjLHUpOmVbdV09ZH19fWZ1bmN0aW9uIFF5ZShuLHQpe2xldCBlPW51bGwsaT0wO2Zvcig7aTx0Lmxlbmd0aDspe2xldCByPXRbaV07aWYoMCE9PXIpaWYoNSE9PXIpe2lmKCJudW1iZXIiPT10eXBlb2YgcilicmVhaztuLmhhc093blByb3BlcnR5KHIpJiYobnVsbD09PWUmJihlPVtdKSxlLnB1c2gocixuW3JdLHRbaSsxXSkpLGkrPTJ9ZWxzZSBpKz0yO2Vsc2UgaSs9NH1yZXR1cm4gZX1mdW5jdGlvbiB2cShuLHQsZSxpKXtyZXR1cm4gbmV3IEFycmF5KG4sITAsITEsdCxudWxsLDAsaSxlLG51bGwsbnVsbCl9ZnVuY3Rpb24gSnllKG4sdCl7bGV0IGU9cXAodCxuKTtpZihVMShlKSl7bGV0IGk9ZVsxXTs0OCZlWzJdP3hUKGksZSxpLnRlbXBsYXRlLGVbOF0pOmVbNV0+MCYmRkwoZSl9fWZ1bmN0aW9uIEZMKG4pe2ZvcihsZXQgaT1PMyhuKTtudWxsIT09aTtpPWszKGkpKWZvcihsZXQgcj0xMDtyPGkubGVuZ3RoO3IrKyl7bGV0IG89aVtyXTtpZihVMShvKSlpZig1MTImb1syXSl7bGV0IHM9b1sxXTt4VChzLG8scy50ZW1wbGF0ZSxvWzhdKX1lbHNlIG9bNV0+MCYmRkwobyl9bGV0IGU9blsxXS5jb21wb25lbnRzO2lmKG51bGwhPT1lKWZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtsZXQgcj1xcChlW2ldLG4pO1UxKHIpJiZyWzVdPjAmJkZMKHIpfX1mdW5jdGlvbiAkeWUobix0KXtsZXQgZT1xcCh0LG4pLGk9ZVsxXTsoZnVuY3Rpb24obix0KXtmb3IobGV0IGU9dC5sZW5ndGg7ZTxuLmJsdWVwcmludC5sZW5ndGg7ZSsrKXQucHVzaChuLmJsdWVwcmludFtlXSl9KShpLGUpLEgzKGksZSxlWzhdKX1mdW5jdGlvbiBDVChuLHQpe3JldHVybiBuWzEzXT9uWzE0XVs0XT10Om5bMTNdPXQsblsxNF09dCx0fWZ1bmN0aW9uIHlxKG4pe2Zvcig7bjspe25bMl18PTMyO2xldCB0PVIzKG4pO2lmKHEwZShuKSYmIXQpcmV0dXJuIG47bj10fXJldHVybiBudWxsfWZ1bmN0aW9uIGJxKG4sdCxlLGk9ITApe2xldCByPXRbMTBdO3IuYmVnaW4mJnIuYmVnaW4oKTt0cnl7eFQobix0LG4udGVtcGxhdGUsZSl9Y2F0Y2gocyl7dGhyb3cgaSYmd3EodCxzKSxzfWZpbmFsbHl7ci5lbmQmJnIuZW5kKCl9fWZ1bmN0aW9uIE5MKG4sdCxlKXt2MygwKSx0KG4sZSl9ZnVuY3Rpb24geHEobil7cmV0dXJuIG5bN118fChuWzddPVtdKX1mdW5jdGlvbiBDcShuKXtyZXR1cm4gbi5jbGVhbnVwfHwobi5jbGVhbnVwPVtdKX1mdW5jdGlvbiBNcShuLHQsZSl7cmV0dXJuKG51bGw9PT1ufHxBYyhuKSkmJihlPWZ1bmN0aW9uKG4pe2Zvcig7QXJyYXkuaXNBcnJheShuKTspe2lmKCJvYmplY3QiPT10eXBlb2YgblsxXSlyZXR1cm4gbjtuPW5bMF19cmV0dXJuIG51bGx9KGVbdC5pbmRleF0pKSxlWzExXX1mdW5jdGlvbiB3cShuLHQpe2xldCBlPW5bOV0saT1lP2UuZ2V0KFFzLG51bGwpOm51bGw7aSYmaS5oYW5kbGVFcnJvcih0KX1mdW5jdGlvbiBxMyhuLHQsZSxpLHIpe2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7KXtsZXQgcz1lW28rK10sYT1lW28rK10sbD10W3NdLGM9bi5kYXRhW3NdO251bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxyLGksYSk6bFthXT1yfX1mdW5jdGlvbiBqZChuLHQsZSl7bGV0IGk9cFQodCxuKTtWOShuWzExXSxpLGUpfWZ1bmN0aW9uICQxKG4sdCxlKXtsZXQgaT1lP24uc3R5bGVzOm51bGwscj1lP24uY2xhc3NlczpudWxsLG89MDtpZihudWxsIT09dClmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKyl7bGV0IGE9dFtzXTsibnVtYmVyIj09dHlwZW9mIGE/bz1hOjE9PW8/cj10TChyLGEpOjI9PW8mJihpPXRMKGksYSsiOiAiK3RbKytzXSsiOyIpKX1lP24uc3R5bGVzPWk6bi5zdHlsZXNXaXRob3V0SG9zdD1pLGU/bi5jbGFzc2VzPXI6bi5jbGFzc2VzV2l0aG91dEhvc3Q9cn1mdW5jdGlvbiBrMShuLHQsZSxpLHI9ITEpe2Zvcig7bnVsbCE9PWU7KXtsZXQgbz10W2UuaW5kZXhdO2lmKG51bGwhPT1vJiZpLnB1c2goJGEobykpLFZkKG8pKWZvcihsZXQgYT0xMDthPG8ubGVuZ3RoO2ErKyl7bGV0IGw9b1thXSxjPWxbMV0uZmlyc3RDaGlsZDtudWxsIT09YyYmazEobFsxXSxsLGMsaSl9bGV0IHM9ZS50eXBlO2lmKDgmcylrMShuLHQsZS5jaGlsZCxpKTtlbHNlIGlmKDMyJnMpe2xldCBsLGE9UDMoZSx0KTtmb3IoO2w9YSgpOylpLnB1c2gobCl9ZWxzZSBpZigxNiZzKXtsZXQgYT1ROSh0LGUpO2lmKEFycmF5LmlzQXJyYXkoYSkpaS5wdXNoKC4uLmEpO2Vsc2V7bGV0IGw9UjModFsxNl0pO2sxKGxbMV0sbCxhLGksITApfX1lPXI/ZS5wcm9qZWN0aW9uTmV4dDplLm5leHR9cmV0dXJuIGl9dmFyIFFmPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fbFZpZXc9dCx0aGlzLl9jZFJlZkluamVjdGluZ1ZpZXc9ZSx0aGlzLl9hcHBSZWY9bnVsbCx0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMX1nZXQgcm9vdE5vZGVzKCl7bGV0IHQ9dGhpcy5fbFZpZXcsZT10WzFdO3JldHVybiBrMShlLHQsZS5maXJzdENoaWxkLFtdKX1nZXQgY29udGV4dCgpe3JldHVybiB0aGlzLl9sVmlld1s4XX1zZXQgY29udGV4dCh0KXt0aGlzLl9sVmlld1s4XT10fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMTI4PT0oMTI4JnRoaXMuX2xWaWV3WzJdKX1kZXN0cm95KCl7aWYodGhpcy5fYXBwUmVmKXRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpO2Vsc2UgaWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpe2xldCB0PXRoaXMuX2xWaWV3WzNdO2lmKFZkKHQpKXtsZXQgZT10WzhdLGk9ZT9lLmluZGV4T2YodGhpcyk6LTE7aT4tMSYmKEFMKHQsaSksWDEoZSxpKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTkodGhpcy5fbFZpZXdbMV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveSh0KXt1cSh0aGlzLl9sVmlld1sxXSx0aGlzLl9sVmlldyxudWxsLHQpfW1hcmtGb3JDaGVjaygpe3lxKHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3WzJdJj0tNjV9cmVhdHRhY2goKXt0aGlzLl9sVmlld1syXXw9NjR9ZGV0ZWN0Q2hhbmdlcygpe2JxKHRoaXMuX2xWaWV3WzFdLHRoaXMuX2xWaWV3LHRoaXMuY29udGV4dCl9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBBdCg5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFjaEZyb21BcHBSZWYoKXt2YXIgdDt0aGlzLl9hcHBSZWY9bnVsbCxxeCh0aGlzLl9sVmlld1sxXSx0PXRoaXMuX2xWaWV3LHRbMTFdLDIsbnVsbCxudWxsKX1hdHRhY2hUb0FwcFJlZih0KXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgQXQoOTAyLCExKTt0aGlzLl9hcHBSZWY9dH19LExMPWNsYXNzIGV4dGVuZHMgUWZ7Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5fdmlldz10fWRldGVjdENoYW5nZXMoKXtsZXQgdD10aGlzLl92aWV3O2JxKHRbMV0sdCx0WzhdLCExKX1jaGVja05vQ2hhbmdlcygpe31nZXQgY29udGV4dCgpe3JldHVybiBudWxsfX0sQXg9Y2xhc3MgZXh0ZW5kcyBnc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMubmdNb2R1bGU9dH1yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0KXtsZXQgZT1ObCh0KTtyZXR1cm4gbmV3IGVUKGUsdGhpcy5uZ01vZHVsZSl9fTtmdW5jdGlvbiByNyhuKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gbiluLmhhc093blByb3BlcnR5KGUpJiZ0LnB1c2goe3Byb3BOYW1lOm5bZV0sdGVtcGxhdGVOYW1lOmV9KTtyZXR1cm4gdH12YXIgZVQ9Y2xhc3MgZXh0ZW5kcyBKMXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5jb21wb25lbnREZWY9dCx0aGlzLm5nTW9kdWxlPWUsdGhpcy5jb21wb25lbnRUeXBlPXQudHlwZSx0aGlzLnNlbGVjdG9yPXQuc2VsZWN0b3JzLm1hcChDeWUpLmpvaW4oIiwiKSx0aGlzLm5nQ29udGVudFNlbGVjdG9ycz10Lm5nQ29udGVudFNlbGVjdG9ycz90Lm5nQ29udGVudFNlbGVjdG9yczpbXSx0aGlzLmlzQm91bmRUb01vZHVsZT0hIWV9Z2V0IGlucHV0cygpe3JldHVybiByNyh0aGlzLmNvbXBvbmVudERlZi5pbnB1dHMpfWdldCBvdXRwdXRzKCl7cmV0dXJuIHI3KHRoaXMuY29tcG9uZW50RGVmLm91dHB1dHMpfWNyZWF0ZSh0LGUsaSxyKXtsZXQgbz0ocj1yfHx0aGlzLm5nTW9kdWxlKWluc3RhbmNlb2YganA/cjpyPy5pbmplY3RvcjtvJiZudWxsIT09dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYobz10aGlzLmNvbXBvbmVudERlZi5nZXRTdGFuZGFsb25lSW5qZWN0b3Iobyl8fG8pO2xldCBzPW8/bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pbmplY3Rvcj10LHRoaXMucGFyZW50SW5qZWN0b3I9ZX1nZXQodCxlLGkpe2xldCByPXRoaXMuaW5qZWN0b3IuZ2V0KHQsSE4saSk7cmV0dXJuIHIhPT1ITnx8ZT09PUhOP3I6dGhpcy5wYXJlbnRJbmplY3Rvci5nZXQodCxlLGkpfX0odCxvKTp0LGE9cy5nZXQod3UsbnVsbCk7aWYobnVsbD09PWEpdGhyb3cgbmV3IEF0KDQwNywhMSk7bGV0IG0seCxsPXMuZ2V0KEh2ZSxudWxsKSxjPWEuY3JlYXRlUmVuZGVyZXIobnVsbCx0aGlzLmNvbXBvbmVudERlZiksdT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLGQ9aT9mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG4uc2VsZWN0Um9vdEVsZW1lbnQodCxlPT09SmEuU2hhZG93RG9tKX0oYyxpLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24pOk4zKGMsdSxmdW5jdGlvbihuKXtsZXQgdD1uLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT10PyJzdmciOiJtYXRoIj09PXQ/Im1hdGgiOm51bGx9KHUpKSxwPXRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD8yODg6MjcyLGg9ajMoMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksZj1iVChudWxsLGgsbnVsbCxwLG51bGwsbnVsbCxhLGMsbCxzLG51bGwpO3kzKGYpO3RyeXtsZXQgZz1mdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9ZVsxXTtlWzIyXT1uO2xldCBsPVcwKHMsMjIsMiwiI2hvc3QiLG51bGwpLGM9bC5tZXJnZWRBdHRycz10Lmhvc3RBdHRycztudWxsIT09YyYmKCQxKGwsYywhMCksbnVsbCE9PW4mJih6MShyLG4sYyksbnVsbCE9PWwuY2xhc3NlcyYmQjMocixuLGwuY2xhc3NlcyksbnVsbCE9PWwuc3R5bGVzJiZKOShyLG4sbC5zdHlsZXMpKSk7bGV0IHU9aS5jcmVhdGVSZW5kZXJlcihuLHQpLGQ9YlQoZSxjcSh0KSxudWxsLHQub25QdXNoPzMyOjE2LGVbMjJdLGwsaSx1LG51bGwsbnVsbCxudWxsKTtyZXR1cm4gcy5maXJzdENyZWF0ZVBhc3MmJihZMShTeChsLGUpLHMsdC50eXBlKSxtcShzLGwpLGdxKGwsZS5sZW5ndGgsMSkpLENUKGUsZCksZVsyMl09ZH0oZCx0aGlzLmNvbXBvbmVudERlZixmLGEsYyk7aWYoZClpZihpKXoxKGMsZCxbIm5nLXZlcnNpb24iLFV2ZS5mdWxsXSk7ZWxzZXtsZXR7YXR0cnM6YixjbGFzc2VzOkR9PWZ1bmN0aW9uKG4pe2xldCB0PVtdLGU9W10saT0xLHI9Mjtmb3IoO2k8bi5sZW5ndGg7KXtsZXQgbz1uW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgbykyPT09cj8iIiE9PW8mJnQucHVzaChvLG5bKytpXSk6OD09PXImJmUucHVzaChvKTtlbHNle2lmKCFTYyhyKSlicmVhaztyPW99aSsrfXJldHVybnthdHRyczp0LGNsYXNzZXM6ZX19KHRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXSk7YiYmejEoYyxkLGIpLEQmJkQubGVuZ3RoPjAmJkIzKGMsZCxELmpvaW4oIiAiKSl9aWYoeD1INyhoLDIyKSx2b2lkIDAhPT1lKXtsZXQgYj14LnByb2plY3Rpb249W107Zm9yKGxldCBEPTA7RDx0aGlzLm5nQ29udGVudFNlbGVjdG9ycy5sZW5ndGg7RCsrKXtsZXQgVD1lW0RdO2IucHVzaChudWxsIT1UP0FycmF5LmZyb20oVCk6bnVsbCl9fW09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9ZVsxXSxvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT16bygpO24uZmlyc3RDcmVhdGVQYXNzJiYoZS5wcm92aWRlcnNSZXNvbHZlciYmZS5wcm92aWRlcnNSZXNvbHZlcihlKSxfcShuLGksdCxxMChuLHQsMSxudWxsKSxlKSxkcShuLGkpKTtsZXQgcj1CeCh0LG4saS5kaXJlY3RpdmVTdGFydCxpKTtTdShyLHQpO2xldCBvPVVsKGksdCk7cmV0dXJuIG8mJlN1KG8sdCkscn0ocixlLHQpO2lmKG5bOF09ZVs4XT1vLG51bGwhPT1pKWZvcihsZXQgYSBvZiBpKWEobyx0KTtpZih0LmNvbnRlbnRRdWVyaWVzKXtsZXQgYT16bygpO3QuY29udGVudFF1ZXJpZXMoMSxvLGEuZGlyZWN0aXZlU3RhcnQpfWxldCBzPXpvKCk7cmV0dXJuIXIuZmlyc3RDcmVhdGVQYXNzfHxudWxsPT09dC5ob3N0QmluZGluZ3MmJm51bGw9PT10Lmhvc3RBdHRyc3x8KHpwKHMuaW5kZXgpLGhxKGVbMV0scywwLHMuZGlyZWN0aXZlU3RhcnQscy5kaXJlY3RpdmVFbmQsdCksZnEodCxvKSksb30oZyx0aGlzLmNvbXBvbmVudERlZixmLFtyYmVdKSxIMyhoLGYsbnVsbCl9ZmluYWxseXtiMygpfXJldHVybiBuZXcgVkwodGhpcy5jb21wb25lbnRUeXBlLG0sRzAoeCxmKSxmLHgpfX0sVkw9KG5ldyBBeCxjbGFzcyBleHRlbmRzIEVMe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWksdGhpcy5fcm9vdExWaWV3PXIsdGhpcy5fdE5vZGU9byx0aGlzLmluc3RhbmNlPWUsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBMTChyKSx0aGlzLmNvbXBvbmVudFR5cGU9dH1zZXRJbnB1dCh0LGUpe2xldCByLGk9dGhpcy5fdE5vZGUuaW5wdXRzO2lmKG51bGwhPT1pJiYocj1pW3RdKSl7bGV0IG89dGhpcy5fcm9vdExWaWV3O3EzKG9bMV0sbyxyLHQsZSkscHEobyx0aGlzLl90Tm9kZS5pbmRleCl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgamYodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KHQpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KHQpfX0pO2Z1bmN0aW9uIHJiZSgpe2xldCBuPXpvKCk7aFQocnQoKVsxXSxuKX1mdW5jdGlvbiBTcShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcn1mdW5jdGlvbiB0dChuKXtsZXQgdD1TcShuLnR5cGUpLGU9ITAsaT1bbl07Zm9yKDt0Oyl7bGV0IHI7aWYoQWMobikpcj10Llx1MDI3NWNtcHx8dC5cdTAyNzVkaXI7ZWxzZXtpZih0Llx1MDI3NWNtcCl0aHJvdyBuZXcgQXQoOTAzLCExKTtyPXQuXHUwMjc1ZGlyfWlmKHIpe2lmKGUpe2kucHVzaChyKTtsZXQgcz1uO3MuaW5wdXRzPUdOKG4uaW5wdXRzKSxzLmRlY2xhcmVkSW5wdXRzPUdOKG4uZGVjbGFyZWRJbnB1dHMpLHMub3V0cHV0cz1HTihuLm91dHB1dHMpO2xldCBhPXIuaG9zdEJpbmRpbmdzO2EmJmxiZShuLGEpO2xldCBsPXIudmlld1F1ZXJ5LGM9ci5jb250ZW50UXVlcmllcztpZihsJiZzYmUobixsKSxjJiZhYmUobixjKSxrTihuLmlucHV0cyxyLmlucHV0cyksa04obi5kZWNsYXJlZElucHV0cyxyLmRlY2xhcmVkSW5wdXRzKSxrTihuLm91dHB1dHMsci5vdXRwdXRzKSxBYyhyKSYmci5kYXRhLmFuaW1hdGlvbil7bGV0IHU9bi5kYXRhO3UuYW5pbWF0aW9uPSh1LmFuaW1hdGlvbnx8W10pLmNvbmNhdChyLmRhdGEuYW5pbWF0aW9uKX19bGV0IG89ci5mZWF0dXJlcztpZihvKWZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKXtsZXQgYT1vW3NdO2EmJmEubmdJbmhlcml0JiZhKG4pLGE9PT10dCYmKGU9ITEpfX10PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KX0hZnVuY3Rpb24obil7bGV0IHQ9MCxlPW51bGw7Zm9yKGxldCBpPW4ubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPW5baV07ci5ob3N0VmFycz10Kz1yLmhvc3RWYXJzLHIuaG9zdEF0dHJzPWoxKHIuaG9zdEF0dHJzLGU9ajEoZSxyLmhvc3RBdHRycykpfX0oaSl9ZnVuY3Rpb24gR04obil7cmV0dXJuIG49PT1BMD97fTpuPT09UWk/W106bn1mdW5jdGlvbiBzYmUobix0KXtsZXQgZT1uLnZpZXdRdWVyeTtuLnZpZXdRdWVyeT1lPyhpLHIpPT57dChpLHIpLGUoaSxyKX06dH1mdW5jdGlvbiBhYmUobix0KXtsZXQgZT1uLmNvbnRlbnRRdWVyaWVzO24uY29udGVudFF1ZXJpZXM9ZT8oaSxyLG8pPT57dChpLHIsbyksZShpLHIsbyl9OnR9ZnVuY3Rpb24gbGJlKG4sdCl7bGV0IGU9bi5ob3N0QmluZGluZ3M7bi5ob3N0QmluZGluZ3M9ZT8oaSxyKT0+e3QoaSxyKSxlKGkscil9OnR9dmFyIGNiZT1bInByb3ZpZGVyc1Jlc29sdmVyIl0sdWJlPVsidGVtcGxhdGUiLCJkZWNscyIsImNvbnN0cyIsInZhcnMiLCJvblB1c2giLCJuZ0NvbnRlbnRTZWxlY3RvcnMiLCJzdHlsZXMiLCJlbmNhcHN1bGF0aW9uIiwic2NoZW1hcyJdO3ZhciBUMT1udWxsO2Z1bmN0aW9uIE1UKCl7aWYoIVQxKXtsZXQgbj10by5TeW1ib2w7aWYobiYmbi5pdGVyYXRvcilUMT1uLml0ZXJhdG9yO2Vsc2V7bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTWFwLnByb3RvdHlwZSk7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDsrK2Upe2xldCBpPXRbZV07ImVudHJpZXMiIT09aSYmInNpemUiIT09aSYmTWFwLnByb3RvdHlwZVtpXT09PU1hcC5wcm90b3R5cGUuZW50cmllcyYmKFQxPWkpfX19cmV0dXJuIFQxfWZ1bmN0aW9uIHdUKG4pe3JldHVybiEhWTMobikmJihBcnJheS5pc0FycmF5KG4pfHwhKG4gaW5zdGFuY2VvZiBNYXApJiZNVCgpaW4gbil9ZnVuY3Rpb24gWTMobil7cmV0dXJuIG51bGwhPT1uJiYoImZ1bmN0aW9uIj09dHlwZW9mIG58fCJvYmplY3QiPT10eXBlb2Ygbil9ZnVuY3Rpb24gRHUobix0LGUpe3JldHVybiBuW3RdPWV9ZnVuY3Rpb24gWXgobix0KXtyZXR1cm4gblt0XX1mdW5jdGlvbiBEcyhuLHQsZSl7cmV0dXJuIU9iamVjdC5pcyhuW3RdLGUpJiYoblt0XT1lLCEwKX1mdW5jdGlvbiBLZihuLHQsZSxpKXtsZXQgcj1EcyhuLHQsZSk7cmV0dXJuIERzKG4sdCsxLGkpfHxyfWZ1bmN0aW9uIFNUKG4sdCxlLGkscil7bGV0IG89S2Yobix0LGUsaSk7cmV0dXJuIERzKG4sdCsyLHIpfHxvfWZ1bmN0aW9uIFZsKG4sdCxlLGkscixvKXtsZXQgcz1LZihuLHQsZSxpKTtyZXR1cm4gS2Yobix0KzIscixvKXx8c31mdW5jdGlvbiB6ZShuLHQsZSxpKXtsZXQgcj1ydCgpO3JldHVybiBEcyhyLFUwKCksdCkmJihGaSgpLFR1KG5vKCkscixuLHQsZSxpKSksemV9ZnVuY3Rpb24gWTAobix0KXtsZXQgZT0hMSxpPUhkKCk7Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKWU9RHMobixpKyssdFtvXSl8fGU7aWYoRzcoaSksIWUpcmV0dXJuIFFuO2xldCByPXRbMF07Zm9yKGxldCBvPTE7bzx0Lmxlbmd0aDtvKz0yKXIrPUtuKHRbb10pK3RbbysxXTtyZXR1cm4gcn1mdW5jdGlvbiBYMChuLHQsZSxpKXtyZXR1cm4gRHMobixVMCgpLGUpP3QrS24oZSkraTpRbn1mdW5jdGlvbiBRMChuLHQsZSxpLHIsbyl7bGV0IGE9S2YobixIZCgpLGUscik7cmV0dXJuIFVkKDIpLGE/dCtLbihlKStpK0tuKHIpK286UW59ZnVuY3Rpb24gSzAobix0LGUsaSxyLG8scyxhKXtsZXQgYz1TVChuLEhkKCksZSxyLHMpO3JldHVybiBVZCgzKSxjP3QrS24oZSkraStLbihyKStvK0tuKHMpK2E6UW59ZnVuY3Rpb24gWjAobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IGQ9VmwobixIZCgpLGUscixzLGwpO3JldHVybiBVZCg0KSxkP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYzpRbn1mdW5jdGlvbiBKMChuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9SGQoKSxoPVZsKG4scCxlLHIscyxsKTtyZXR1cm4gaD1EcyhuLHArNCx1KXx8aCxVZCg1KSxoP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYytLbih1KStkOlFufWZ1bmN0aW9uICQwKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCl7bGV0IGY9SGQoKSxtPVZsKG4sZixlLHIscyxsKTtyZXR1cm4gbT1LZihuLGYrNCx1LHApfHxtLFVkKDYpLG0/dCtLbihlKStpK0tuKHIpK28rS24ocykrYStLbihsKStjK0tuKHUpK2QrS24ocCkraDpRbn1mdW5jdGlvbiBlXyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtsZXQgeD1IZCgpLGc9Vmwobix4LGUscixzLGwpO3JldHVybiBnPVNUKG4seCs0LHUscCxmKXx8ZyxVZCg3KSxnP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYytLbih1KStkK0tuKHApK2grS24oZikrbTpRbn1mdW5jdGlvbiB0XyhuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgsZyl7bGV0IGI9SGQoKSxEPVZsKG4sYixlLHIscyxsKTtyZXR1cm4gRD1WbChuLGIrNCx1LHAsZix4KXx8RCxVZCg4KSxEP3QrS24oZSkraStLbihyKStvK0tuKHMpK2ErS24obCkrYytLbih1KStkK0tuKHApK2grS24oZikrbStLbih4KStnOlFufWZ1bmN0aW9uIEUobix0LGUsaSxyLG8scyxhKXtsZXQgbD1ydCgpLGM9RmkoKSx1PW4rMjIsZD1jLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCl7bGV0IGM9dC5jb25zdHMsdT1XMCh0LG4sNCxzfHxudWxsLFVwKGMsYSkpO0czKHQsZSx1LFVwKGMsbCkpLGhUKHQsdSk7bGV0IGQ9dS50Vmlld3M9ajMoMix1LGkscixvLHQuZGlyZWN0aXZlUmVnaXN0cnksdC5waXBlUmVnaXN0cnksbnVsbCx0LnNjaGVtYXMsYyk7cmV0dXJuIG51bGwhPT10LnF1ZXJpZXMmJih0LnF1ZXJpZXMudGVtcGxhdGUodCx1KSxkLnF1ZXJpZXM9dC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcodSkpLHV9KHUsYyxsLHQsZSxpLHIsbyxzKTpjLmRhdGFbdV07TXUoZCwhMSk7bGV0IHA9bFsxMV0uY3JlYXRlQ29tbWVudCgiIik7eVQoYyxsLHAsZCksU3UocCxsKSxDVChsLGxbdV09dnEocCxsLHAsZCkpLGRUKGQpJiZVMyhjLGwsZCksbnVsbCE9cyYmejMobCxkLGEpfWZ1bmN0aW9uICRlKG4pe3JldHVybiBIMChabi5sRnJhbWUuY29udGV4dExWaWV3LDIyK24pfWZ1bmN0aW9uIHkobix0LGUpe2xldCBpPXJ0KCk7cmV0dXJuIERzKGksVTAoKSx0KSYmaWwoRmkoKSxubygpLGksbix0LGlbMTFdLGUsITEpLHl9ZnVuY3Rpb24gSEwobix0LGUsaSxyKXtsZXQgcz1yPyJjbGFzcyI6InN0eWxlIjtxMyhuLGUsdC5pbnB1dHNbc10scyxpKX1mdW5jdGlvbiBfKG4sdCxlLGkpe2xldCByPXJ0KCksbz1GaSgpLHM9MjIrbixhPXJbMTFdLGw9cltzXT1OMyhhLHQsWm4ubEZyYW1lLmN1cnJlbnROYW1lc3BhY2UpLGM9by5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7bGV0IGE9dC5jb25zdHMsYz1XMCh0LG4sMixyLFVwKGEsbykpO3JldHVybiBHMyh0LGUsYyxVcChhLHMpKSxudWxsIT09Yy5hdHRycyYmJDEoYyxjLmF0dHJzLCExKSxudWxsIT09Yy5tZXJnZWRBdHRycyYmJDEoYyxjLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09dC5xdWVyaWVzJiZ0LnF1ZXJpZXMuZWxlbWVudFN0YXJ0KHQsYyksY30ocyxvLHIsMCx0LGUsaSk6by5kYXRhW3NdO011KGMsITApO2xldCB1PWMubWVyZ2VkQXR0cnM7bnVsbCE9PXUmJnoxKGEsbCx1KTtsZXQgZD1jLmNsYXNzZXM7bnVsbCE9PWQmJkIzKGEsbCxkKTtsZXQgcD1jLnN0eWxlcztyZXR1cm4gbnVsbCE9PXAmJko5KGEsbCxwKSw2NCE9KDY0JmMuZmxhZ3MpJiZ5VChvLHIsbCxjKSwwPT09Wm4ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50JiZTdShsLHIpLFpuLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrLGRUKGMpJiYoVTMobyxyLGMpLGxxKG8sYyxyKSksbnVsbCE9PWkmJnozKHIsYyksX31mdW5jdGlvbiB2KCl7bGV0IG49em8oKTttMygpP2czKCk6KG49bi5wYXJlbnQsTXUobiwhMSkpO2xldCB0PW47Wm4ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50LS07bGV0IGU9RmkoKTtyZXR1cm4gZS5maXJzdENyZWF0ZVBhc3MmJihoVChlLG4pLHAzKG4pJiZlLnF1ZXJpZXMuZWxlbWVudEVuZChuKSksbnVsbCE9dC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uKG4pe3JldHVybiAwIT0oMTYmbi5mbGFncyl9KHQpJiZITChlLHQscnQoKSx0LmNsYXNzZXNXaXRob3V0SG9zdCwhMCksbnVsbCE9dC5zdHlsZXNXaXRob3V0SG9zdCYmZnVuY3Rpb24obil7cmV0dXJuIDAhPSgzMiZuLmZsYWdzKX0odCkmJkhMKGUsdCxydCgpLHQuc3R5bGVzV2l0aG91dEhvc3QsITEpLHZ9ZnVuY3Rpb24gTyhuLHQsZSxpKXtyZXR1cm4gXyhuLHQsZSxpKSx2KCksT31mdW5jdGlvbiBzbihuLHQsZSl7bGV0IGk9cnQoKSxyPUZpKCksbz1uKzIyLHM9ci5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz10LmNvbnN0cyxzPVVwKG8saSksYT1XMCh0LG4sOCwibmctY29udGFpbmVyIixzKTtyZXR1cm4gbnVsbCE9PXMmJiQxKGEscywhMCksRzModCxlLGEsVXAobyxyKSksbnVsbCE9PXQucXVlcmllcyYmdC5xdWVyaWVzLmVsZW1lbnRTdGFydCh0LGEpLGF9KG8scixpLHQsZSk6ci5kYXRhW29dO011KHMsITApO2xldCBhPWlbb109aVsxMV0uY3JlYXRlQ29tbWVudCgiIik7cmV0dXJuIHlUKHIsaSxhLHMpLFN1KGEsaSksZFQocykmJihVMyhyLGkscyksbHEocixzLGkpKSxudWxsIT1lJiZ6MyhpLHMpLHNufWZ1bmN0aW9uIGFuKCl7bGV0IG49em8oKSx0PUZpKCk7cmV0dXJuIG0zKCk/ZzMoKToobj1uLnBhcmVudCxNdShuLCExKSksdC5maXJzdENyZWF0ZVBhc3MmJihoVCh0LG4pLHAzKG4pJiZ0LnF1ZXJpZXMuZWxlbWVudEVuZChuKSksYW59ZnVuY3Rpb24gTmkobix0LGUpe3JldHVybiBzbihuLHQsZSksYW4oKSxOaX1mdW5jdGlvbiBQZSgpe3JldHVybiBydCgpfWZ1bmN0aW9uIG5fKG4pe3JldHVybiEhbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4udGhlbn1mdW5jdGlvbiBYMyhuKXtyZXR1cm4hIW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLnN1YnNjcmliZX12YXIgUTM9WDM7ZnVuY3Rpb24gUChuLHQsZSxpKXtsZXQgcj1ydCgpLG89RmkoKSxzPXpvKCk7cmV0dXJuIEZxKG8scixyWzExXSxzLG4sdCwwLGkpLFB9ZnVuY3Rpb24gaV8obix0KXtsZXQgZT16bygpLGk9cnQoKSxyPUZpKCk7cmV0dXJuIEZxKHIsaSxNcShfMyhyLmRhdGEpLGUsaSksZSxuLHQpLGlffWZ1bmN0aW9uIEZxKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9ZFQoaSksdT1uLmZpcnN0Q3JlYXRlUGFzcyYmQ3EobikscD14cSh0KSxoPSEwO2lmKDMmaS50eXBlfHxhKXtsZXQgeD1VbChpLHQpLGc9YT9hKHgpOngsYj1wLmxlbmd0aCxEPWE/az0+YSgkYShrW2kuaW5kZXhdKSk6aS5pbmRleCxUPW51bGw7aWYoIWEmJmwmJihUPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW4uY2xlYW51cDtpZihudWxsIT1yKWZvcihsZXQgbz0wO288ci5sZW5ndGgtMTtvKz0yKXtsZXQgcz1yW29dO2lmKHM9PT1lJiZyW28rMV09PT1pKXtsZXQgYT10WzddLGw9cltvKzJdO3JldHVybiBhLmxlbmd0aD5sP2FbbF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHMmJihvKz0yKX1yZXR1cm4gbnVsbH0obix0LHIsaS5pbmRleCkpLG51bGwhPT1UKShULl9fbmdMYXN0TGlzdGVuZXJGbl9ffHxUKS5fX25nTmV4dExpc3RlbmVyRm5fXz1vLFQuX19uZ0xhc3RMaXN0ZW5lckZuX189byxoPSExO2Vsc2V7bz1zNyhpLHQsMCxvLCExKTtsZXQgaz1lLmxpc3RlbihnLHIsbyk7cC5wdXNoKG8sayksdSYmdS5wdXNoKHIsRCxiLGIrMSl9fWVsc2Ugbz1zNyhpLHQsMCxvLCExKTtsZXQgbSxmPWkub3V0cHV0cztpZihoJiZudWxsIT09ZiYmKG09ZltyXSkpe2xldCB4PW0ubGVuZ3RoO2lmKHgpZm9yKGxldCBnPTA7Zzx4O2crPTIpe2xldCBaPXRbbVtnXV1bbVtnKzFdXS5zdWJzY3JpYmUobyksej1wLmxlbmd0aDtwLnB1c2gobyxaKSx1JiZ1LnB1c2gocixpLmluZGV4LHosLSh6KzEpKX19fWZ1bmN0aW9uIG83KG4sdCxlLGkpe3RyeXtyZXR1cm4hMSE9PWUoaSl9Y2F0Y2gocil7cmV0dXJuIHdxKG4sciksITF9fWZ1bmN0aW9uIHM3KG4sdCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uIG8ocyl7aWYocz09PUZ1bmN0aW9uKXJldHVybiBpO3lxKDImbi5mbGFncz9xcChuLmluZGV4LHQpOnQpO2xldCBsPW83KHQsMCxpLHMpLGM9by5fX25nTmV4dExpc3RlbmVyRm5fXztmb3IoO2M7KWw9bzcodCwwLGMscykmJmwsYz1jLl9fbmdOZXh0TGlzdGVuZXJGbl9fO3JldHVybiByJiYhMT09PWwmJihzLnByZXZlbnREZWZhdWx0KCkscy5yZXR1cm5WYWx1ZT0hMSksbH19ZnVuY3Rpb24gUyhuPTEpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4oWm4ubEZyYW1lLmNvbnRleHRMVmlldz1mdW5jdGlvbihuLHQpe2Zvcig7bj4wOyl0PXRbMTVdLG4tLTtyZXR1cm4gdH0obixabi5sRnJhbWUuY29udGV4dExWaWV3KSlbOF19KG4pfWZ1bmN0aW9uIHZiZShuLHQpe2xldCBlPW51bGwsaT1mdW5jdGlvbihuKXtsZXQgdD1uLmF0dHJzO2lmKG51bGwhPXQpe2xldCBlPXQuaW5kZXhPZig1KTtpZigwPT0oMSZlKSlyZXR1cm4gdFtlKzFdfXJldHVybiBudWxsfShuKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IG89dFtyXTtpZigiKiIhPT1vKXtpZihudWxsPT09aT9ucShuLG8sITApOnh5ZShpLG8pKXJldHVybiByfWVsc2UgZT1yfXJldHVybiBlfWZ1bmN0aW9uIHhpKG4pe2xldCB0PXJ0KClbMTZdWzZdO2lmKCF0LnByb2plY3Rpb24pe2xldCBpPXQucHJvamVjdGlvbj1meChuP24ubGVuZ3RoOjEsbnVsbCkscj1pLnNsaWNlKCksbz10LmNoaWxkO2Zvcig7bnVsbCE9PW87KXtsZXQgcz1uP3ZiZShvLG4pOjA7bnVsbCE9PXMmJihyW3NdP3Jbc10ucHJvamVjdGlvbk5leHQ9bzppW3NdPW8scltzXT1vKSxvPW8ubmV4dH19fWZ1bmN0aW9uIFZuKG4sdD0wLGUpe2xldCBpPXJ0KCkscj1GaSgpLG89VzAociwyMituLDE2LG51bGwsZXx8bnVsbCk7bnVsbD09PW8ucHJvamVjdGlvbiYmKG8ucHJvamVjdGlvbj10KSxnMygpLDY0IT0oNjQmby5mbGFncykmJmZ1bmN0aW9uKG4sdCxlKXtaOSh0WzExXSwwLHQsZSx6OShuLGUsdCksVzkoZS5wYXJlbnR8fHRbNl0sZSx0KSl9KHIsaSxvKX1mdW5jdGlvbiBaaShuLHQsZSl7cmV0dXJuIFh4KG4sIiIsdCwiIixlKSxaaX1mdW5jdGlvbiBYeChuLHQsZSxpLHIpe2xldCBvPXJ0KCkscz1YMChvLHQsZSxpKTtyZXR1cm4gcyE9PVFuJiZpbChGaSgpLG5vKCksbyxuLHMsb1sxMV0sciwhMSksWHh9ZnVuY3Rpb24gRVQobix0LGUsaSxyLG8scyl7bGV0IGE9cnQoKSxsPVEwKGEsdCxlLGkscixvKTtyZXR1cm4gbCE9PVFuJiZpbChGaSgpLG5vKCksYSxuLGwsYVsxMV0scywhMSksRVR9ZnVuY3Rpb24gYTcobix0LGUsaSxyKXtsZXQgbz1uW2UrMV0scz1udWxsPT09dCxhPWk/WGYobyk6RjAobyksbD0hMTtmb3IoOzAhPT1hJiYoITE9PT1sfHxzKTspe2xldCB1PW5bYSsxXTt4YmUoblthXSx0KSYmKGw9ITAsblthKzFdPWk/a0wodSk6T0wodSkpLGE9aT9YZih1KTpGMCh1KX1sJiYobltlKzFdPWk/T0wobyk6a0wobykpfWZ1bmN0aW9uIHhiZShuLHQpe3JldHVybiBudWxsPT09bnx8bnVsbD09dHx8KEFycmF5LmlzQXJyYXkobik/blsxXTpuKT09PXR8fCEoIUFycmF5LmlzQXJyYXkobil8fCJzdHJpbmciIT10eXBlb2YgdCkmJkh4KG4sdCk+PTB9dmFyIFVvPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiBqcShuKXtyZXR1cm4gbi5zdWJzdHJpbmcoVW8ua2V5LFVvLmtleUVuZCl9ZnVuY3Rpb24gQ2JlKG4pe3JldHVybiBuLnN1YnN0cmluZyhVby52YWx1ZSxVby52YWx1ZUVuZCl9ZnVuY3Rpb24gR3Eobix0KXtsZXQgZT1Vby50ZXh0RW5kO3JldHVybiBlPT09dD8tMToodD1Vby5rZXlFbmQ9ZnVuY3Rpb24obix0LGUpe2Zvcig7dDxlJiZuLmNoYXJDb2RlQXQodCk+MzI7KXQrKztyZXR1cm4gdH0obixVby5rZXk9dCxlKSxOMChuLHQsZSkpfWZ1bmN0aW9uIFdxKG4sdCl7bGV0IGU9VW8udGV4dEVuZCxpPVVvLmtleT1OMChuLHQsZSk7cmV0dXJuIGU9PT1pPy0xOihpPVVvLmtleUVuZD1mdW5jdGlvbihuLHQsZSl7bGV0IGk7Zm9yKDt0PGUmJig0NT09PShpPW4uY2hhckNvZGVBdCh0KSl8fDk1PT09aXx8KC0zMyZpKT49NjUmJigtMzMmaSk8PTkwfHxpPj00OCYmaTw9NTcpOyl0Kys7cmV0dXJuIHR9KG4saSxlKSxpPWw3KG4saSxlKSxpPVVvLnZhbHVlPU4wKG4saSxlKSxpPVVvLnZhbHVlRW5kPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT0tMSxyPS0xLG89LTEscz10LGE9cztmb3IoO3M8ZTspe2xldCBsPW4uY2hhckNvZGVBdChzKyspO2lmKDU5PT09bClyZXR1cm4gYTszND09PWx8fDM5PT09bD9hPXM9YzcobixsLHMsZSk6dD09PXMtNCYmODU9PT1vJiY4Mj09PXImJjc2PT09aSYmNDA9PT1sP2E9cz1jNyhuLDQxLHMsZSk6bD4zMiYmKGE9cyksbz1yLHI9aSxpPS0zMyZsfXJldHVybiBhfShuLGksZSksbDcobixpLGUpKX1mdW5jdGlvbiBxcShuKXtVby5rZXk9MCxVby5rZXlFbmQ9MCxVby52YWx1ZT0wLFVvLnZhbHVlRW5kPTAsVW8udGV4dEVuZD1uLmxlbmd0aH1mdW5jdGlvbiBOMChuLHQsZSl7Zm9yKDt0PGUmJm4uY2hhckNvZGVBdCh0KTw9MzI7KXQrKztyZXR1cm4gdH1mdW5jdGlvbiBsNyhuLHQsZSxpKXtyZXR1cm4odD1OMChuLHQsZSkpPGUmJnQrKyx0fWZ1bmN0aW9uIGM3KG4sdCxlLGkpe2xldCByPS0xLG89ZTtmb3IoO288aTspe2xldCBzPW4uY2hhckNvZGVBdChvKyspO2lmKHM9PXQmJjkyIT09cilyZXR1cm4gbztyPTkyPT1zJiY5Mj09PXI/MDpzfXRocm93IG5ldyBFcnJvcn1mdW5jdGlvbiBQdChuLHQsZSl7cmV0dXJuIFJjKG4sdCxlLCExKSxQdH1mdW5jdGlvbiBldChuLHQpe3JldHVybiBSYyhuLHQsbnVsbCwhMCksZXR9ZnVuY3Rpb24gamwobil7T2MoUXEsRGJlLG4sITEpfWZ1bmN0aW9uIERiZShuLHQpe2ZvcihsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gcXEobiksV3EobixOMChuLDAsVW8udGV4dEVuZCkpfSh0KTtlPj0wO2U9V3EodCxlKSlRcShuLGpxKHQpLENiZSh0KSl9ZnVuY3Rpb24gRGEobil7T2MoZWwsQXUsbiwhMCl9ZnVuY3Rpb24gQXUobix0KXtmb3IobGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIHFxKG4pLEdxKG4sTjAobiwwLFVvLnRleHRFbmQpKX0odCk7ZT49MDtlPUdxKHQsZSkpZWwobixqcSh0KSwhMCl9ZnVuY3Rpb24gUmMobix0LGUsaSl7bGV0IHI9cnQoKSxvPUZpKCkscz1VZCgyKTtvLmZpcnN0VXBkYXRlUGFzcyYmWHEobyxuLHMsaSksdCE9PVFuJiZEcyhyLHMsdCkmJktxKG8sby5kYXRhW1pzKCldLHIsclsxMV0sbixyW3MrMV09ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2YgdD9uKz10OiJvYmplY3QiPT10eXBlb2YgbiYmKG49VG8oVGEobikpKSksbn0odCxlKSxpLHMpfWZ1bmN0aW9uIE9jKG4sdCxlLGkpe2xldCByPUZpKCksbz1VZCgyKTtyLmZpcnN0VXBkYXRlUGFzcyYmWHEocixudWxsLG8saSk7bGV0IHM9cnQoKTtpZihlIT09UW4mJkRzKHMsbyxlKSl7bGV0IGE9ci5kYXRhW1pzKCldO2lmKFpxKGEsaSkmJiFZcShyLG8pKXtsZXQgbD1pP2EuY2xhc3Nlc1dpdGhvdXRIb3N0OmEuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PWwmJihlPXRMKGwsZXx8IiIpKSxITChyLGEscyxlLGkpfWVsc2UhZnVuY3Rpb24obix0LGUsaSxyLG8scyxhKXtyPT09UW4mJihyPVFpKTtsZXQgbD0wLGM9MCx1PTA8ci5sZW5ndGg/clswXTpudWxsLGQ9MDxvLmxlbmd0aD9vWzBdOm51bGw7Zm9yKDtudWxsIT09dXx8bnVsbCE9PWQ7KXtsZXQgbSxwPWw8ci5sZW5ndGg/cltsKzFdOnZvaWQgMCxoPWM8by5sZW5ndGg/b1tjKzFdOnZvaWQgMCxmPW51bGw7dT09PWQ/KGwrPTIsYys9MixwIT09aCYmKGY9ZCxtPWgpKTpudWxsPT09ZHx8bnVsbCE9PXUmJnU8ZD8obCs9MixmPXUpOihjKz0yLGY9ZCxtPWgpLG51bGwhPT1mJiZLcShuLHQsZSxpLGYsbSxzLGEpLHU9bDxyLmxlbmd0aD9yW2xdOm51bGwsZD1jPG8ubGVuZ3RoP29bY106bnVsbH19KHIsYSxzLHNbMTFdLHNbbysxXSxzW28rMV09ZnVuY3Rpb24obix0LGUpe2lmKG51bGw9PWV8fCIiPT09ZSlyZXR1cm4gUWk7bGV0IGk9W10scj1UYShlKTtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKW4oaSxyW29dLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2Ygcilmb3IobGV0IG8gaW4gcilyLmhhc093blByb3BlcnR5KG8pJiZuKGksbyxyW29dKTtlbHNlInN0cmluZyI9PXR5cGVvZiByJiZ0KGkscik7cmV0dXJuIGl9KG4sdCxlKSxpLG8pfX1mdW5jdGlvbiBZcShuLHQpe3JldHVybiB0Pj1uLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIFhxKG4sdCxlLGkpe2xldCByPW4uZGF0YTtpZihudWxsPT09cltlKzFdKXtsZXQgbz1yW1pzKCldLHM9WXEobixlKTtacShvLGkpJiZudWxsPT09dCYmIXMmJih0PSExKSx0PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPV8zKG4pLG89aT90LnJlc2lkdWFsQ2xhc3Nlczp0LnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1yKTA9PT0oaT90LmNsYXNzQmluZGluZ3M6dC5zdHlsZUJpbmRpbmdzKSYmKGU9SXgoZT1XTihudWxsLG4sdCxlLGkpLHQuYXR0cnMsaSksbz1udWxsKTtlbHNle2xldCBzPXQuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT1zfHxuW3NdIT09cilpZihlPVdOKHIsbix0LGUsaSksbnVsbD09PW8pe2xldCBsPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1lP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3M7aWYoMCE9PUYwKGkpKXJldHVybiBuW1hmKGkpXX0obix0LGkpO3ZvaWQgMCE9PWwmJkFycmF5LmlzQXJyYXkobCkmJihsPVdOKG51bGwsbix0LGxbMV0saSksbD1JeChsLHQuYXR0cnMsaSksZnVuY3Rpb24obix0LGUsaSl7bltYZihlP3QuY2xhc3NCaW5kaW5nczp0LnN0eWxlQmluZGluZ3MpXT1pfShuLHQsaSxsKSl9ZWxzZSBvPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaSxyPXQuZGlyZWN0aXZlRW5kO2ZvcihsZXQgbz0xK3QuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7bzxyO28rKylpPUl4KGksbltvXS5ob3N0QXR0cnMsZSk7cmV0dXJuIEl4KGksdC5hdHRycyxlKX0obix0LGkpfXJldHVybiB2b2lkIDAhPT1vJiYoaT90LnJlc2lkdWFsQ2xhc3Nlcz1vOnQucmVzaWR1YWxTdHlsZXM9byksZX0ocixvLHQsaSksZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW8/dC5jbGFzc0JpbmRpbmdzOnQuc3R5bGVCaW5kaW5ncyxhPVhmKHMpLGw9RjAocyk7bltpXT1lO2xldCB1LGM9ITE7aWYoQXJyYXkuaXNBcnJheShlKSl7bGV0IGQ9ZTt1PWRbMV0sKG51bGw9PT11fHxIeChkLHUpPjApJiYoYz0hMCl9ZWxzZSB1PWU7aWYocilpZigwIT09bCl7bGV0IHA9WGYoblthKzFdKTtuW2krMV09RTEocCxhKSwwIT09cCYmKG5bcCsxXT1qTihuW3ArMV0saSkpLG5bYSsxXT1mdW5jdGlvbihuLHQpe3JldHVybiAxMzEwNzEmbnx0PDwxN30oblthKzFdLGkpfWVsc2UgbltpKzFdPUUxKGEsMCksMCE9PWEmJihuW2ErMV09ak4oblthKzFdLGkpKSxhPWk7ZWxzZSBuW2krMV09RTEobCwwKSwwPT09YT9hPWk6bltsKzFdPWpOKG5bbCsxXSxpKSxsPWk7YyYmKG5baSsxXT1PTChuW2krMV0pKSxhNyhuLHUsaSwhMCksYTcobix1LGksITEpLGZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IG89cj9uLnJlc2lkdWFsQ2xhc3NlczpuLnJlc2lkdWFsU3R5bGVzO251bGwhPW8mJiJzdHJpbmciPT10eXBlb2YgdCYmSHgobyx0KT49MCYmKGVbaSsxXT1rTChlW2krMV0pKX0odCx1LG4saSxvKSxzPUUxKGEsbCksbz90LmNsYXNzQmluZGluZ3M9czp0LnN0eWxlQmluZGluZ3M9c30ocixvLHQsZSxzLGkpfX1mdW5jdGlvbiBXTihuLHQsZSxpLHIpe2xldCBvPW51bGwscz1lLmRpcmVjdGl2ZUVuZCxhPWUuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09YT9hPWUuZGlyZWN0aXZlU3RhcnQ6YSsrO2E8cyYmKG89dFthXSxpPUl4KGksby5ob3N0QXR0cnMsciksbyE9PW4pOylhKys7cmV0dXJuIG51bGwhPT1uJiYoZS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1hKSxpfWZ1bmN0aW9uIEl4KG4sdCxlKXtsZXQgaT1lPzE6MixyPS0xO2lmKG51bGwhPT10KWZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W29dOyJudW1iZXIiPT10eXBlb2Ygcz9yPXM6cj09PWkmJihBcnJheS5pc0FycmF5KG4pfHwobj12b2lkIDA9PT1uP1tdOlsiIixuXSksZWwobixzLCEhZXx8dFsrK29dKSl9cmV0dXJuIHZvaWQgMD09PW4/bnVsbDpufWZ1bmN0aW9uIFFxKG4sdCxlKXtlbChuLHQsVGEoZSkpfWZ1bmN0aW9uIEtxKG4sdCxlLGkscixvLHMsYSl7aWYoISgzJnQudHlwZSkpcmV0dXJuO2xldCBsPW4uZGF0YSxjPWxbYSsxXSx1PWZ1bmN0aW9uKG4pe3JldHVybiAxPT0oMSZuKX0oYyk/dTcobCx0LGUscixGMChjKSxzKTp2b2lkIDA7dFQodSl8fCh0VChvKXx8ZnVuY3Rpb24obil7cmV0dXJuIDI9PSgyJm4pfShjKSYmKG89dTcobCxudWxsLGUscixhLHMpKSxmdW5jdGlvbihuLHQsZSxpLHIpe2lmKHQpcj9uLmFkZENsYXNzKGUsaSk6bi5yZW1vdmVDbGFzcyhlLGkpO2Vsc2V7bGV0IG89LTE9PT1pLmluZGV4T2YoIi0iKT92b2lkIDA6QmwuRGFzaENhc2U7bnVsbD09cj9uLnJlbW92ZVN0eWxlKGUsaSxvKTooInN0cmluZyI9PXR5cGVvZiByJiZyLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihyPXIuc2xpY2UoMCwtMTApLG98PUJsLkltcG9ydGFudCksbi5zZXRTdHlsZShlLGkscixvKSl9fShpLHMscFQoWnMoKSxlKSxyLG8pKX1mdW5jdGlvbiB1NyhuLHQsZSxpLHIsbyl7bGV0IGEscz1udWxsPT09dDtmb3IoO3I+MDspe2xldCBsPW5bcl0sYz1BcnJheS5pc0FycmF5KGwpLHU9Yz9sWzFdOmwsZD1udWxsPT09dSxwPWVbcisxXTtwPT09UW4mJihwPWQ/UWk6dm9pZCAwKTtsZXQgaD1kP0xOKHAsaSk6dT09PWk/cDp2b2lkIDA7aWYoYyYmIXRUKGgpJiYoaD1MTihsLGkpKSx0VChoKSYmKGE9aCxzKSlyZXR1cm4gYTtsZXQgZj1uW3IrMV07cj1zP1hmKGYpOkYwKGYpfWlmKG51bGwhPT10KXtsZXQgbD1vP3QucmVzaWR1YWxDbGFzc2VzOnQucmVzaWR1YWxTdHlsZXM7bnVsbCE9bCYmKGE9TE4obCxpKSl9cmV0dXJuIGF9ZnVuY3Rpb24gdFQobil7cmV0dXJuIHZvaWQgMCE9PW59ZnVuY3Rpb24gWnEobix0KXtyZXR1cm4gMCE9KG4uZmxhZ3MmKHQ/MTY6MzIpKX1mdW5jdGlvbiBBKG4sdD0iIil7bGV0IGU9cnQoKSxpPUZpKCkscj1uKzIyLG89aS5maXJzdENyZWF0ZVBhc3M/VzAoaSxyLDEsdCxudWxsKTppLmRhdGFbcl0scz1lW3JdPUYzKGVbMTFdLHQpO3lUKGksZSxzLG8pLE11KG8sITEpfWZ1bmN0aW9uIHl0KG4pe3JldHVybiBqZSgiIixuLCIiKSx5dH1mdW5jdGlvbiBqZShuLHQsZSl7bGV0IGk9cnQoKSxyPVgwKGksbix0LGUpO3JldHVybiByIT09UW4mJmpkKGksWnMoKSxyKSxqZX1mdW5jdGlvbiBYcChuLHQsZSxpLHIpe2xldCBvPXJ0KCkscz1RMChvLG4sdCxlLGkscik7cmV0dXJuIHMhPT1RbiYmamQobyxacygpLHMpLFhwfWZ1bmN0aW9uIFRUKG4sdCxlLGkscixvLHMpe2xldCBhPXJ0KCksbD1LMChhLG4sdCxlLGkscixvLHMpO3JldHVybiBsIT09UW4mJmpkKGEsWnMoKSxsKSxUVH1mdW5jdGlvbiBReChuLHQsZSl7T2MoZWwsQXUsWDAocnQoKSxuLHQsZSksITApfWZ1bmN0aW9uIF9zKG4sdCxlKXtsZXQgaT1ydCgpO3JldHVybiBEcyhpLFUwKCksdCkmJmlsKEZpKCksbm8oKSxpLG4sdCxpWzExXSxlLCEwKSxfc31mdW5jdGlvbiByXyhuLHQsZSl7bGV0IGk9cnQoKTtpZihEcyhpLFUwKCksdCkpe2xldCBvPUZpKCkscz1ubygpO2lsKG8scyxpLG4sdCxNcShfMyhvLmRhdGEpLHMsaSksZSwhMCl9cmV0dXJuIHJffXZhciBWZj12b2lkIDAsZXhlPVsiZW4iLFtbImEiLCJwIl0sWyJBTSIsIlBNIl0sVmZdLFtbIkFNIiwiUE0iXSxWZixWZl0sW1siUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLFsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sWyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLFsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXV0sVmYsW1siSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sWyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLFZmLFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMCxbNiwwXSxbIk0vZC95eSIsIk1NTSBkLCB5IiwiTU1NTSBkLCB5IiwiRUVFRSwgTU1NTSBkLCB5Il0sWyJoOm1tIGEiLCJoOm1tOnNzIGEiLCJoOm1tOnNzIGEgeiIsImg6bW06c3MgYSB6enp6Il0sWyJ7MX0sIHswfSIsVmYsInsxfSAnYXQnIHswfSIsVmZdLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiVVNEIiwiJCIsIlVTIERvbGxhciIse30sImx0ciIsZnVuY3Rpb24obil7bGV0IGU9TWF0aC5mbG9vcihNYXRoLmFicyhuKSksaT1uLnRvU3RyaW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09ZSYmMD09PWk/MTo1fV0scU49e307ZnVuY3Rpb24gQWEobil7bGV0IHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0obiksZT1kNyh0KTtpZihlKXJldHVybiBlO2xldCBpPXQuc3BsaXQoIi0iKVswXTtpZihlPWQ3KGkpLGUpcmV0dXJuIGU7aWYoImVuIj09PWkpcmV0dXJuIGV4ZTt0aHJvdyBuZXcgQXQoNzAxLCExKX1mdW5jdGlvbiBkNyhuKXtyZXR1cm4gbiBpbiBxTnx8KHFOW25dPXRvLm5nJiZ0by5uZy5jb21tb24mJnRvLm5nLmNvbW1vbi5sb2NhbGVzJiZ0by5uZy5jb21tb24ubG9jYWxlc1tuXSkscU5bbl19dmFyIFJyPSgoKT0+e3JldHVybihuPVJyfHwoUnI9e30pKVtuLkxvY2FsZUlkPTBdPSJMb2NhbGVJZCIsbltuLkRheVBlcmlvZHNGb3JtYXQ9MV09IkRheVBlcmlvZHNGb3JtYXQiLG5bbi5EYXlQZXJpb2RzU3RhbmRhbG9uZT0yXT0iRGF5UGVyaW9kc1N0YW5kYWxvbmUiLG5bbi5EYXlzRm9ybWF0PTNdPSJEYXlzRm9ybWF0IixuW24uRGF5c1N0YW5kYWxvbmU9NF09IkRheXNTdGFuZGFsb25lIixuW24uTW9udGhzRm9ybWF0PTVdPSJNb250aHNGb3JtYXQiLG5bbi5Nb250aHNTdGFuZGFsb25lPTZdPSJNb250aHNTdGFuZGFsb25lIixuW24uRXJhcz03XT0iRXJhcyIsbltuLkZpcnN0RGF5T2ZXZWVrPThdPSJGaXJzdERheU9mV2VlayIsbltuLldlZWtlbmRSYW5nZT05XT0iV2Vla2VuZFJhbmdlIixuW24uRGF0ZUZvcm1hdD0xMF09IkRhdGVGb3JtYXQiLG5bbi5UaW1lRm9ybWF0PTExXT0iVGltZUZvcm1hdCIsbltuLkRhdGVUaW1lRm9ybWF0PTEyXT0iRGF0ZVRpbWVGb3JtYXQiLG5bbi5OdW1iZXJTeW1ib2xzPTEzXT0iTnVtYmVyU3ltYm9scyIsbltuLk51bWJlckZvcm1hdHM9MTRdPSJOdW1iZXJGb3JtYXRzIixuW24uQ3VycmVuY3lDb2RlPTE1XT0iQ3VycmVuY3lDb2RlIixuW24uQ3VycmVuY3lTeW1ib2w9MTZdPSJDdXJyZW5jeVN5bWJvbCIsbltuLkN1cnJlbmN5TmFtZT0xN109IkN1cnJlbmN5TmFtZSIsbltuLkN1cnJlbmNpZXM9MThdPSJDdXJyZW5jaWVzIixuW24uRGlyZWN0aW9uYWxpdHk9MTldPSJEaXJlY3Rpb25hbGl0eSIsbltuLlBsdXJhbENhc2U9MjBdPSJQbHVyYWxDYXNlIixuW24uRXh0cmFEYXRhPTIxXT0iRXh0cmFEYXRhIixScjt2YXIgbn0pKCksbnhlPVsiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiXTt2YXIgblQ9ImVuLVVTIixmWT17bWFya2VyOiJlbGVtZW50In0sbVk9e21hcmtlcjoiSUNVIn0sRWM9KCgpPT57cmV0dXJuKG49RWN8fChFYz17fSkpW24uU0hJRlQ9Ml09IlNISUZUIixuW24uQVBQRU5EX0VBR0VSTFk9MV09IkFQUEVORF9FQUdFUkxZIixuW24uQ09NTUVOVD0yXT0iQ09NTUVOVCIsRWM7dmFyIG59KSgpLGdZPW5UO2Z1bmN0aW9uIF9ZKG4sdCxlKXtsZXQgaT10Lmluc2VydEJlZm9yZUluZGV4LHI9QXJyYXkuaXNBcnJheShpKT9pWzBdOmk7cmV0dXJuIG51bGw9PT1yP3E5KG4sMCxlKTokYShlW3JdKX1mdW5jdGlvbiB2WShuLHQsZSxpLHIpe2xldCBvPXQuaW5zZXJ0QmVmb3JlSW5kZXg7aWYoQXJyYXkuaXNBcnJheShvKSl7bGV0IHM9aSxhPW51bGw7aWYoMyZ0LnR5cGV8fChhPXMscz1yKSxudWxsIT09cyYmMD09KDImdC5mbGFncykpZm9yKGxldCBsPTE7bDxvLmxlbmd0aDtsKyspWWYobixzLGVbb1tsXV0sYSwhMSl9fWZ1bmN0aW9uIHlZKG4sdCl7aWYobi5wdXNoKHQpLG4ubGVuZ3RoPjEpZm9yKGxldCBlPW4ubGVuZ3RoLTI7ZT49MDtlLS0pe2xldCBpPW5bZV07YlkoaSl8fGF4ZShpLHQpJiZudWxsPT09bHhlKGkpJiZjeGUoaSx0LmluZGV4KX19ZnVuY3Rpb24gYlkobil7cmV0dXJuISg2NCZuLnR5cGUpfWZ1bmN0aW9uIGF4ZShuLHQpe3JldHVybiBiWSh0KXx8bi5pbmRleD50LmluZGV4fWZ1bmN0aW9uIGx4ZShuKXtsZXQgdD1uLmluc2VydEJlZm9yZUluZGV4O3JldHVybiBBcnJheS5pc0FycmF5KHQpP3RbMF06dH1mdW5jdGlvbiBjeGUobix0KXtsZXQgZT1uLmluc2VydEJlZm9yZUluZGV4O0FycmF5LmlzQXJyYXkoZSk/ZVswXT10OihYOShfWSx2WSksbi5pbnNlcnRCZWZvcmVJbmRleD10KX1mdW5jdGlvbiBfeChuLHQpe2xldCBlPW4uZGF0YVt0XTtyZXR1cm4gbnVsbD09PWV8fCJzdHJpbmciPT10eXBlb2YgZT9udWxsOmUuaGFzT3duUHJvcGVydHkoImN1cnJlbnRDYXNlTFZpZXdJbmRleCIpP2U6ZS52YWx1ZX1mdW5jdGlvbiBweGUobix0LGUpe2xldCBpPVYzKG4sZSw2NCxudWxsLG51bGwpO3JldHVybiB5WSh0LGkpLGl9ZnVuY3Rpb24gRFQobix0KXtsZXQgZT10W24uY3VycmVudENhc2VMVmlld0luZGV4XTtyZXR1cm4gbnVsbD09PWU/ZTplPDA/fmU6ZX1mdW5jdGlvbiBoeGUobil7cmV0dXJuIG4+Pj4xN31mdW5jdGlvbiBmeGUobil7cmV0dXJuKDEzMTA3MCZuKT4+PjF9dmFyIFB4PTAsdng9MDtmdW5jdGlvbiB4WShuLHQsZSxpKXtsZXQgcyxyPWVbMTFdLG89bnVsbDtmb3IobGV0IGE9MDthPHQubGVuZ3RoO2ErKyl7bGV0IGw9dFthXTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2xldCBjPXRbKythXTtudWxsPT09ZVtjXSYmKGVbY109RjMocixsKSl9ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGwpc3dpdGNoKDEmbCl7Y2FzZSAwOmxldCB1LGQsYz1oeGUobCk7aWYobnVsbD09PW8mJihvPWMscz12VChyLGkpKSxjPT09bz8odT1pLGQ9cyk6KHU9bnVsbCxkPSRhKGVbY10pKSxudWxsIT09ZCl7bGV0IG09ZnhlKGwpO1lmKHIsZCxlW21dLHUsITEpO2xldCBnPV94KG4sbSk7aWYobnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyl7bGV0IGI9RFQoZyxlKTtudWxsIT09YiYmeFkobixnLmNyZWF0ZVtiXSxlLGVbZy5hbmNob3JJZHhdKX19YnJlYWs7Y2FzZSAxOmxldCBoPXRbKythXSxmPXRbKythXTtXMyhyLHBUKGw+Pj4xLGUpLG51bGwsbnVsbCxoLGYsbnVsbCl9ZWxzZSBzd2l0Y2gobCl7Y2FzZSBtWTpsZXQgYz10WysrYV0sdT10WysrYV07bnVsbD09PWVbdV0mJlN1KGVbdV09ZXllKHIsYyksZSk7YnJlYWs7Y2FzZSBmWTpsZXQgZD10WysrYV0scD10WysrYV07bnVsbD09PWVbcF0mJlN1KGVbcF09TjMocixkLG51bGwpLGUpfX19ZnVuY3Rpb24gQ1kobix0LGUsaSxyKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXSxhPWVbKytvXTtpZihzJnIpe2xldCBsPSIiO2ZvcihsZXQgYz1vKzE7Yzw9bythO2MrKyl7bGV0IHU9ZVtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbCs9dTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdSlpZih1PDApbCs9S24odFtpLXVdKTtlbHNle2xldCBkPXU+Pj4yO3N3aXRjaCgzJnUpe2Nhc2UgMTpsZXQgcD1lWysrY10saD1lWysrY10sZj1uLmRhdGFbZF07InN0cmluZyI9PXR5cGVvZiBmP1czKHRbMTFdLHRbZF0sbnVsbCxmLHAsbCxoKTppbChuLGYsdCxwLGwsdFsxMV0saCwhMSk7YnJlYWs7Y2FzZSAwOmxldCBtPXRbZF07bnVsbCE9PW0mJlY5KHRbMTFdLG0sbCk7YnJlYWs7Y2FzZSAyOnl4ZShuLF94KG4sZCksdCxsKTticmVhaztjYXNlIDM6cDcobixfeChuLGQpLGksdCl9fX19ZWxzZXtsZXQgbD1lW28rMV07aWYobD4wJiYzPT0oMyZsKSl7bGV0IHU9X3gobixsPj4+Mik7dFt1LmN1cnJlbnRDYXNlTFZpZXdJbmRleF08MCYmcDcobix1LGksdCl9fW8rPWF9fWZ1bmN0aW9uIHA3KG4sdCxlLGkpe2xldCByPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdO2lmKG51bGwhPT1yKXtsZXQgbz1QeDtyPDAmJihyPWlbdC5jdXJyZW50Q2FzZUxWaWV3SW5kZXhdPX5yLG89LTEpLENZKG4saSx0LnVwZGF0ZVtyXSxlLG8pfX1mdW5jdGlvbiB5eGUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZT1uLmNhc2VzLmluZGV4T2YodCk7aWYoLTE9PT1lKXN3aXRjaChuLnR5cGUpe2Nhc2UgMTp7bGV0IGk9ZnVuY3Rpb24obix0KXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gQWEobilbUnIuUGx1cmFsQ2FzZV19KHQpKHBhcnNlSW50KG4sMTApKSxpPW54ZVtlXTtyZXR1cm4gdm9pZCAwIT09aT9pOiJvdGhlciJ9KHQsZ1kpO2U9bi5jYXNlcy5pbmRleE9mKGkpLC0xPT09ZSYmIm90aGVyIiE9PWkmJihlPW4uY2FzZXMuaW5kZXhPZigib3RoZXIiKSk7YnJlYWt9Y2FzZSAwOmU9bi5jYXNlcy5pbmRleE9mKCJvdGhlciIpfXJldHVybi0xPT09ZT9udWxsOmV9KHQsaSk7aWYoRFQodCxlKSE9PXImJihNWShuLHQsZSksZVt0LmN1cnJlbnRDYXNlTFZpZXdJbmRleF09bnVsbD09PXI/bnVsbDp+cixudWxsIT09cikpe2xldCBzPWVbdC5hbmNob3JJZHhdO3MmJnhZKG4sdC5jcmVhdGVbcl0sZSxzKX19ZnVuY3Rpb24gTVkobix0LGUpe2xldCBpPURUKHQsZSk7aWYobnVsbCE9PWkpe2xldCByPXQucmVtb3ZlW2ldO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHM+MCl7bGV0IGE9cFQocyxlKTtudWxsIT09YSYmSzkoZVsxMV0sYSl9ZWxzZSBNWShuLF94KG4sfnMpLGUpfX19ZnVuY3Rpb24geHhlKCl7bGV0IGUsaSxuPVtdLHQ9LTE7ZnVuY3Rpb24gbyhhLGwpe3Q9MDtsZXQgYz1EVChhLGwpO2k9bnVsbCE9PWM/YS5yZW1vdmVbY106UWl9ZnVuY3Rpb24gcygpe2lmKHQ8aS5sZW5ndGgpe2xldCBhPWlbdCsrXTtyZXR1cm4gYT4wP2VbYV06KG4ucHVzaCh0LGkpLG8oZVsxXS5kYXRhW35hXSxlKSxzKCkpfXJldHVybiAwPT09bi5sZW5ndGg/bnVsbDooaT1uLnBvcCgpLHQ9bi5wb3AoKSxzKCkpfXJldHVybiBmdW5jdGlvbihhLGwpe2ZvcihlPWw7bi5sZW5ndGg7KW4ucG9wKCk7cmV0dXJuIG8oYS52YWx1ZSxsKSxzfX12YXIgaVQ9L1x1ZmZmZChcZCspOj9cZCpcdWZmZmQvZ2ksQ3hlPS8oe1xzKlx1ZmZmZFxkKzo/XGQqXHVmZmZkXHMqLFxzKlxTezZ9XHMqLFtcc1xTXSp9KS9naSxNeGU9L1x1ZmZmZChcZCspXHVmZmZkLyx3WT0vXlxzKihcdWZmZmRcZCs6P1xkKlx1ZmZmZClccyosXHMqKHNlbGVjdHxwbHVyYWwpXHMqLC8sd3hlPS9cdWZmZmRcLz9cKihcZCs6XGQrKVx1ZmZmZC9naSxTeGU9L1x1ZmZmZChcLz9bIypdXGQrKTo/XGQqXHVmZmZkL2dpLEV4ZT0vXHVFNTAwL2c7ZnVuY3Rpb24gU1kobix0LGUsaSxyLG8scyl7bGV0IGE9cTAobixpLDEsbnVsbCksbD1hPDxFYy5TSElGVCxjPXd4KCk7dD09PWMmJihjPW51bGwpLG51bGw9PT1jJiYobHw9RWMuQVBQRU5EX0VBR0VSTFkpLHMmJihsfD1FYy5DT01NRU5ULGZ1bmN0aW9uKG4pe3ZvaWQgMD09PURMJiYoREw9bigpKX0oeHhlKSksci5wdXNoKGwsbnVsbD09PW8/IiI6byk7bGV0IHU9VjMobixhLHM/MzI6MSxudWxsPT09bz8iIjpvLG51bGwpO3lZKGUsdSk7bGV0IGQ9dS5pbmRleDtyZXR1cm4gTXUodSwhMSksbnVsbCE9PWMmJnQhPT1jJiZmdW5jdGlvbihuLHQpe2xldCBlPW4uaW5zZXJ0QmVmb3JlSW5kZXg7bnVsbD09PWU/KFg5KF9ZLHZZKSxlPW4uaW5zZXJ0QmVmb3JlSW5kZXg9W251bGwsdF0pOihmdW5jdGlvbihuLHQsZSl7MSE9biYmVDcoIkV4cGVjdGluZyBhcnJheSBoZXJlIixuLCEwLCI9PSIpfShBcnJheS5pc0FycmF5KGUpKSxlLnB1c2godCkpfShjLGQpLHV9ZnVuY3Rpb24gQXhlKG4sdCxlLGkscixvLHMpe2xldCBhPXMubWF0Y2goaVQpLGw9U1kobix0LGUsbyxpLGE/bnVsbDpzLCExKTthJiZieChyLHMsbC5pbmRleCxudWxsLDAsbnVsbCl9ZnVuY3Rpb24gYngobix0LGUsaSxyLG8pe2xldCBzPW4ubGVuZ3RoLGE9cysxO24ucHVzaChudWxsLG51bGwpO2xldCBsPXMrMixjPXQuc3BsaXQoaVQpLHU9MDtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXTtpZigxJmQpe2xldCBoPXIrcGFyc2VJbnQocCwxMCk7bi5wdXNoKC0xLWgpLHV8PUVZKGgpfWVsc2UiIiE9PXAmJm4ucHVzaChwKX1yZXR1cm4gbi5wdXNoKGU8PDJ8KGk/MTowKSksaSYmbi5wdXNoKGksbyksbltzXT11LG5bYV09bi5sZW5ndGgtbCx1fWZ1bmN0aW9uIFB4ZShuKXtsZXQgdD0wO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uW2VdOyJudW1iZXIiPT10eXBlb2YgaSYmaTwwJiZ0Kyt9cmV0dXJuIHR9ZnVuY3Rpb24gRVkobil7cmV0dXJuIDE8PE1hdGgubWluKG4sMzEpfWZ1bmN0aW9uIGg3KG4pe2xldCB0LG8sZT0iIixpPTAscj0hMTtmb3IoO251bGwhPT0odD13eGUuZXhlYyhuKSk7KXI/dFswXT09PWBcdWZmZmQvKiR7b31cdWZmZmRgJiYoaT10LmluZGV4LHI9ITEpOihlKz1uLnN1YnN0cmluZyhpLHQuaW5kZXgrdFswXS5sZW5ndGgpLG89dFsxXSxyPSEwKTtyZXR1cm4gZSs9bi5zbGljZShpKSxlfWZ1bmN0aW9uIFRZKG4sdCxlLGkscixvKXtsZXQgcz0wLGE9e3R5cGU6ci50eXBlLGN1cnJlbnRDYXNlTFZpZXdJbmRleDpxMChuLHQsMSxudWxsKSxhbmNob3JJZHg6byxjYXNlczpbXSxjcmVhdGU6W10scmVtb3ZlOltdLHVwZGF0ZTpbXX07KGZ1bmN0aW9uKG4sdCxlKXtuLnB1c2goRVkodC5tYWluQmluZGluZyksMiwtMS10Lm1haW5CaW5kaW5nLGU8PDJ8Mil9KShlLHIsbyksZnVuY3Rpb24obix0LGUpe2xldCBpPW4uZGF0YVt0XTtudWxsPT09aT9uLmRhdGFbdF09ZTppLnZhbHVlPWV9KG4sbyxhKTtsZXQgbD1yLnZhbHVlcztmb3IobGV0IGM9MDtjPGwubGVuZ3RoO2MrKyl7bGV0IHU9bFtjXSxkPVtdO2ZvcihsZXQgcD0wO3A8dS5sZW5ndGg7cCsrKXtsZXQgaD11W3BdO2lmKCJzdHJpbmciIT10eXBlb2YgaCl7bGV0IGY9ZC5wdXNoKGgpLTE7dVtwXT1gXHgzYyEtLVx1ZmZmZCR7Zn1cdWZmZmQtLVx4M2VgfX1zPUZ4ZShuLGEsdCxlLGksci5jYXNlc1tjXSx1LmpvaW4oIiIpLGQpfHN9cyYmZnVuY3Rpb24obix0LGUpe24ucHVzaCh0LDEsZTw8MnwzKX0oZSxzLG8pfWZ1bmN0aW9uIGt4ZShuKXtsZXQgdD1bXSxlPVtdLGk9MSxyPTAsbz1VTChuPW4ucmVwbGFjZSh3WSxmdW5jdGlvbihzLGEsbCl7cmV0dXJuIGk9InNlbGVjdCI9PT1sPzA6MSxyPXBhcnNlSW50KGEuc2xpY2UoMSksMTApLCIifSkpO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7KXtsZXQgYT1vW3MrK10udHJpbSgpOzE9PT1pJiYoYT1hLnJlcGxhY2UoL1xzKig/Oj0pPyhcdyspXHMqLywiJDEiKSksYS5sZW5ndGgmJnQucHVzaChhKTtsZXQgbD1VTChvW3MrK10pO3QubGVuZ3RoPmUubGVuZ3RoJiZlLnB1c2gobCl9cmV0dXJue3R5cGU6aSxtYWluQmluZGluZzpyLGNhc2VzOnQsdmFsdWVzOmV9fWZ1bmN0aW9uIFVMKG4pe2lmKCFuKXJldHVybltdO2xldCBvLHQ9MCxlPVtdLGk9W10scj0vW3t9XS9nO2ZvcihyLmxhc3RJbmRleD0wO289ci5leGVjKG4pOyl7bGV0IGE9by5pbmRleDtpZigifSI9PW9bMF0pe2lmKGUucG9wKCksMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7d1kudGVzdChsKT9pLnB1c2goa3hlKGwpKTppLnB1c2gobCksdD1hKzF9fWVsc2V7aWYoMD09ZS5sZW5ndGgpe2xldCBsPW4uc3Vic3RyaW5nKHQsYSk7aS5wdXNoKGwpLHQ9YSsxfWUucHVzaCgieyIpfX1sZXQgcz1uLnN1YnN0cmluZyh0KTtyZXR1cm4gaS5wdXNoKHMpLGl9ZnVuY3Rpb24gRnhlKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9W10sYz1bXSx1PVtdO3QuY2FzZXMucHVzaChvKSx0LmNyZWF0ZS5wdXNoKGwpLHQucmVtb3ZlLnB1c2goYyksdC51cGRhdGUucHVzaCh1KTtsZXQgcD13OShfOSgpKS5nZXRJbmVydEJvZHlFbGVtZW50KHMpLGg9Q0wocCl8fHA7cmV0dXJuIGg/RFkobix0LGUsaSxsLGMsdSxoLHIsYSwwKTowfWZ1bmN0aW9uIERZKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9MCxwPWEuZmlyc3RDaGlsZDtmb3IoO3A7KXtsZXQgaD1xMChuLGUsMSxudWxsKTtzd2l0Y2gocC5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpsZXQgZj1wLG09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCk7aWYoYkwuaGFzT3duUHJvcGVydHkobSkpe1lOKHIsZlksbSxsLGgpLG4uZGF0YVtoXT1tO2xldCBEPWYuYXR0cmlidXRlcztmb3IobGV0IFQ9MDtUPEQubGVuZ3RoO1QrKyl7bGV0IGs9RC5pdGVtKFQpLFo9ay5uYW1lLnRvTG93ZXJDYXNlKCk7ay52YWx1ZS5tYXRjaChpVCk/RDkuaGFzT3duUHJvcGVydHkoWikmJmJ4KHMsay52YWx1ZSxoLGsubmFtZSwwLFQzW1pdP3p4Om51bGwpOlZ4ZShyLGgsayl9ZD1EWShuLHQsZSxpLHIsbyxzLHAsaCxjLHUrMSl8ZCxmNyhvLGgsdSl9YnJlYWs7Y2FzZSBOb2RlLlRFWFRfTk9ERTpsZXQgeD1wLnRleHRDb250ZW50fHwiIixnPXgubWF0Y2goaVQpO1lOKHIsbnVsbCxnPyIiOngsbCxoKSxmNyhvLGgsdSksZyYmKGQ9Yngocyx4LGgsbnVsbCwwLG51bGwpfGQpO2JyZWFrO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6bGV0IGI9TXhlLmV4ZWMocC50ZXh0Q29udGVudHx8IiIpO2lmKGIpe2xldCBUPWNbcGFyc2VJbnQoYlsxXSwxMCldO1lOKHIsbVksIiIsbCxoKSxUWShuLGUsaSxsLFQsaCksTnhlKG8saCx1KX19cD1wLm5leHRTaWJsaW5nfXJldHVybiBkfWZ1bmN0aW9uIGY3KG4sdCxlKXswPT09ZSYmbi5wdXNoKHQpfWZ1bmN0aW9uIE54ZShuLHQsZSl7MD09PWUmJihuLnB1c2gofnQpLG4ucHVzaCh0KSl9ZnVuY3Rpb24gWU4obix0LGUsaSxyKXtudWxsIT09dCYmbi5wdXNoKHQpLG4ucHVzaChlLHIsZnVuY3Rpb24obix0LGUpe3JldHVybiAwfHQ8PDE3fGU8PDF9KDAsaSxyKSl9ZnVuY3Rpb24gVnhlKG4sdCxlKXtuLnB1c2godDw8MXwxLGUubmFtZSxlLnZhbHVlKX12YXIgSHhlPS9cWyhcdWZmZmQuKz9cdWZmZmQ/KVxdLyxVeGU9L1xbKFx1ZmZmZC4rP1x1ZmZmZD8pXF18KFx1ZmZmZFwvP1wqXGQrOlxkK1x1ZmZmZCkvZyx6eGU9Lyh7XHMqKShWQVJfKFBMVVJBTHxTRUxFQ1QpKF9cZCspPykoXHMqLCkvZyxqeGU9L3soW0EtWjAtOV9dKyl9L2csR3hlPS9cdWZmZmRJMThOX0VYUF8oSUNVKF9cZCspPylcdWZmZmQvZyxXeGU9L1wvXCovLHF4ZT0vXGQrXDooXGQrKS87ZnVuY3Rpb24gQVkobix0LGU9LTEpe2xldCBpPUZpKCkscj1ydCgpLG89MjIrbixzPVVwKGkuY29uc3RzLHQpLGE9d3goKTtpLmZpcnN0Q3JlYXRlUGFzcyYmZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPXd4KCksYT1bXSxsPVtdLGM9W1tdXTtyPWZ1bmN0aW9uKG4sdCl7aWYoZnVuY3Rpb24obil7cmV0dXJuLTE9PT1ufSh0KSlyZXR1cm4gaDcobik7e2xldCBlPW4uaW5kZXhPZihgOiR7dH1cdWZmZmRgKSsyK3QudG9TdHJpbmcoKS5sZW5ndGgsaT1uLnNlYXJjaChuZXcgUmVnRXhwKGBcdWZmZmRcXC9cXCpcXGQrOiR7dH1cdWZmZmRgKSk7cmV0dXJuIGg3KG4uc3Vic3RyaW5nKGUsaSkpfX0ocixvKTtsZXQgdT1mdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKEV4ZSwiICIpfShyKS5zcGxpdChTeGUpO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXtsZXQgcD11W2RdO2lmKDA9PSgxJmQpKXtsZXQgaD1VTChwKTtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7bGV0IG09aFtmXTtpZigwPT0oMSZmKSl7bGV0IHg9bTsiIiE9PXgmJkF4ZShuLHMsY1swXSxhLGwsZSx4KX1lbHNle2xldCB4PW07aWYoIm9iamVjdCIhPXR5cGVvZiB4KXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIElDVSBleHByZXNzaW9uIGluICIke3J9IiBtZXNzYWdlLmApO1RZKG4sZSxsLHQseCxTWShuLHMsY1swXSxlLGEsIiIsITApLmluZGV4KX19fWVsc2V7bGV0IGg9NDc9PT1wLmNoYXJDb2RlQXQoMCksbT0ocC5jaGFyQ29kZUF0KGg/MTowKSwyMitOdW1iZXIucGFyc2VJbnQocC5zdWJzdHJpbmcoaD8yOjEpKSk7aWYoaCljLnNoaWZ0KCksTXUod3goKSwhMSk7ZWxzZXtsZXQgeD1weGUobixjWzBdLG0pO2MudW5zaGlmdChbXSksTXUoeCwhMCl9fX1uLmRhdGFbaV09e2NyZWF0ZTphLHVwZGF0ZTpsfX0oaSxudWxsPT09YT8wOmEuaW5kZXgscixvLHMsZSk7bGV0IGw9aS5kYXRhW29dLHU9ajkoaSxhPT09cls2XT9udWxsOmEscik7KGZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPW5bMTFdO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcz10W28rK10sYT10W29dLGw9KHMmRWMuQ09NTUVOVCk9PT1FYy5DT01NRU5ULGM9KHMmRWMuQVBQRU5EX0VBR0VSTFkpPT09RWMuQVBQRU5EX0VBR0VSTFksdT1zPj4+RWMuU0hJRlQsZD1uW3VdO251bGw9PT1kJiYoZD1uW3VdPWw/ci5jcmVhdGVDb21tZW50KGEpOkYzKHIsYSkpLGMmJm51bGwhPT1lJiZZZihyLGUsZCxpLCExKX19KShyLGwuY3JlYXRlLHUsYSYmOCZhLnR5cGU/clthLmluZGV4XTpudWxsKSxXNyghMCl9ZnVuY3Rpb24gSVkoKXtXNyghMSl9ZnVuY3Rpb24gQVQobix0LGUpe0FZKG4sdCxlKSxJWSgpfWZ1bmN0aW9uIEt4KG4pe3JldHVybiBmdW5jdGlvbihuKXtuJiYoUHh8PTE8PE1hdGgubWluKHZ4LDMxKSksdngrK30oRHMocnQoKSxVMCgpLG4pKSxLeH1mdW5jdGlvbiBJVChuKXshZnVuY3Rpb24obix0LGUpe2lmKHZ4PjApe2xldCBpPW4uZGF0YVtlXTtDWShuLHQsQXJyYXkuaXNBcnJheShpKT9pOmkudXBkYXRlLEhkKCktdngtMSxQeCl9UHg9MCx2eD0wfShGaSgpLHJ0KCksbisyMil9ZnVuY3Rpb24gUFQobix0PXt9KXtyZXR1cm4gZnVuY3Rpb24obix0PXt9KXtsZXQgZT1uO2lmKEh4ZS50ZXN0KG4pKXtsZXQgaT17fSxyPVswXTtlPWUucmVwbGFjZShVeGUsKG8scyxhKT0+e2xldCBsPXN8fGEsYz1pW2xdfHxbXTtpZihjLmxlbmd0aHx8KGwuc3BsaXQoInwiKS5mb3JFYWNoKG09PntsZXQgeD1tLm1hdGNoKHF4ZSksZz14P3BhcnNlSW50KHhbMV0sMTApOjAsYj1XeGUudGVzdChtKTtjLnB1c2goW2csYixtXSl9KSxpW2xdPWMpLCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYGkxOG4gcG9zdHByb2Nlc3M6IHVubWF0Y2hlZCBwbGFjZWhvbGRlciAtICR7bH1gKTtsZXQgdT1yW3IubGVuZ3RoLTFdLGQ9MDtmb3IobGV0IG09MDttPGMubGVuZ3RoO20rKylpZihjW21dWzBdPT09dSl7ZD1tO2JyZWFrfWxldFtwLGgsZl09Y1tkXTtyZXR1cm4gaD9yLnBvcCgpOnUhPT1wJiZyLnB1c2gocCksYy5zcGxpY2UoZCwxKSxmfSl9cmV0dXJuIE9iamVjdC5rZXlzKHQpLmxlbmd0aCYmKGU9ZS5yZXBsYWNlKHp4ZSwoaSxyLG8scyxhLGwpPT50Lmhhc093blByb3BlcnR5KG8pP2Ake3J9JHt0W29dfSR7bH1gOmkpLGU9ZS5yZXBsYWNlKGp4ZSwoaSxyKT0+dC5oYXNPd25Qcm9wZXJ0eShyKT90W3JdOmkpLGU9ZS5yZXBsYWNlKEd4ZSwoaSxyKT0+e2lmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07aWYoIW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgaTE4biBwb3N0cHJvY2VzczogdW5tYXRjaGVkIElDVSAtICR7aX0gd2l0aCBrZXk6ICR7cn1gKTtyZXR1cm4gby5zaGlmdCgpfXJldHVybiBpfSkpLGV9KG4sdCl9ZnVuY3Rpb24gekwobix0LGUsaSxyKXtpZihuPUtpKG4pLEFycmF5LmlzQXJyYXkobikpZm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspekwobltvXSx0LGUsaSxyKTtlbHNle2xldCBvPUZpKCkscz1ydCgpLGE9azAobik/bjpLaShuLnByb3ZpZGUpLGw9RjkobiksYz16bygpLHU9MTA0ODU3NSZjLnByb3ZpZGVySW5kZXhlcyxkPWMuZGlyZWN0aXZlU3RhcnQscD1jLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYoazAobil8fCFuLm11bHRpKXtsZXQgaD1uZXcgcWYobCxyLE0pLGY9UU4oYSx0LHI/dTp1K3AsZCk7LTE9PT1mPyhZMShTeChjLHMpLG8sYSksWE4obyxuLHQubGVuZ3RoKSx0LnB1c2goYSksYy5kaXJlY3RpdmVTdGFydCsrLGMuZGlyZWN0aXZlRW5kKyssciYmKGMucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxlLnB1c2goaCkscy5wdXNoKGgpKTooZVtmXT1oLHNbZl09aCl9ZWxzZXtsZXQgaD1RTihhLHQsdStwLGQpLGY9UU4oYSx0LHUsdStwKSxtPWg+PTAmJmVbaF0seD1mPj0wJiZlW2ZdO2lmKHImJiF4fHwhciYmIW0pe1kxKFN4KGMscyksbyxhKTtsZXQgZz1mdW5jdGlvbihuLHQsZSxpLHIpe2xldCBvPW5ldyBxZihuLGUsTSk7cmV0dXJuIG8ubXVsdGk9W10sby5pbmRleD10LG8uY29tcG9uZW50UHJvdmlkZXJzPTAsUFkobyxyLGkmJiFlKSxvfShyP1p4ZTpLeGUsZS5sZW5ndGgscixpLGwpOyFyJiZ4JiYoZVtmXS5wcm92aWRlckZhY3Rvcnk9ZyksWE4obyxuLHQubGVuZ3RoLDApLHQucHVzaChhKSxjLmRpcmVjdGl2ZVN0YXJ0KyssYy5kaXJlY3RpdmVFbmQrKyxyJiYoYy5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGUucHVzaChnKSxzLnB1c2goZyl9ZWxzZSBYTihvLG4saD4tMT9oOmYsUFkoZVtyP2Y6aF0sbCwhciYmaSkpOyFyJiZpJiZ4JiZlW2ZdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gWE4obix0LGUsaSl7bGV0IHI9azAodCksbz1mdW5jdGlvbihuKXtyZXR1cm4hIW4udXNlQ2xhc3N9KHQpO2lmKHJ8fG8pe2xldCBsPShvP0tpKHQudXNlQ2xhc3MpOnQpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihsKXtsZXQgYz1uLmRlc3Ryb3lIb29rc3x8KG4uZGVzdHJveUhvb2tzPVtdKTtpZighciYmdC5tdWx0aSl7bGV0IHU9Yy5pbmRleE9mKGUpOy0xPT09dT9jLnB1c2goZSxbaSxsXSk6Y1t1KzFdLnB1c2goaSxsKX1lbHNlIGMucHVzaChlLGwpfX19ZnVuY3Rpb24gUFkobix0LGUpe3JldHVybiBlJiZuLmNvbXBvbmVudFByb3ZpZGVycysrLG4ubXVsdGkucHVzaCh0KS0xfWZ1bmN0aW9uIFFOKG4sdCxlLGkpe2ZvcihsZXQgcj1lO3I8aTtyKyspaWYodFtyXT09PW4pcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gS3hlKG4sdCxlLGkpe3JldHVybiBqTCh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBaeGUobix0LGUsaSl7bGV0IG8scj10aGlzLm11bHRpO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtsZXQgcz10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsYT1CeChlLGVbMV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsaSk7bz1hLnNsaWNlKDAscyksakwocixvKTtmb3IobGV0IGw9cztsPGEubGVuZ3RoO2wrKylvLnB1c2goYVtsXSl9ZWxzZSBvPVtdLGpMKHIsbyk7cmV0dXJuIG99ZnVuY3Rpb24gakwobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0LnB1c2goKDAsbltlXSkoKSk7cmV0dXJuIHR9ZnVuY3Rpb24gJHQobix0PVtdKXtyZXR1cm4gZT0+e2UucHJvdmlkZXJzUmVzb2x2ZXI9KGkscik9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1GaSgpO2lmKGkuZmlyc3RDcmVhdGVQYXNzKXtsZXQgcj1BYyhuKTt6TChlLGkuZGF0YSxpLmJsdWVwcmludCxyLCEwKSx6TCh0LGkuZGF0YSxpLmJsdWVwcmludCxyLCExKX19KGkscj9yKG4pOm4sdCl9fXZhciBHcD1jbGFzc3t9LEdMPWNsYXNze30sV0w9Y2xhc3MgZXh0ZW5kcyBHcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCksdGhpcy5fcGFyZW50PWUsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IEF4KHRoaXMpO2xldCBpPUkwKHQpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9UjEoaS5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9b3EodCxlLFt7cHJvdmlkZTpHcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpncyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLFRvKHQpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KHQpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtsZXQgdD10aGlzLl9yM0luamVjdG9yOyF0LmRlc3Ryb3llZCYmdC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goZT0+ZSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kodCl7dGhpcy5kZXN0cm95Q2JzLnB1c2godCl9fSxxTD1jbGFzcyBleHRlbmRzIEdMe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPXR9Y3JlYXRlKHQpe3JldHVybiBuZXcgV0wodGhpcy5tb2R1bGVUeXBlLHQpfX0sWUw9Y2xhc3MgZXh0ZW5kcyBHcHtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgQXgodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2xldCByPW5ldyBaMShbLi4udCx7cHJvdmlkZTpHcCx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpncyx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGV8fEkzKCksaSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9cixyLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpfWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kodCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kodCl9fSxlQ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9pbmplY3Rvcj1lLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoZSl7aWYoIWUuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGUuaWQpKXtsZXQgaT1SOSgwLGUudHlwZSkscj1pLmxlbmd0aD4wP2Z1bmN0aW9uKG4sdCxlPW51bGwpe3JldHVybiBuZXcgWUwobix0LGUpLmluamVjdG9yfShbaV0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHtlLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoZS5pZCxyKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGUuaWQpfW5nT25EZXN0cm95KCl7dHJ5e2ZvcihsZXQgZSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09ZSYmZS5kZXN0cm95KCl9ZmluYWxseXt0aGlzLmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IG4oaihqcCkpfSksbn0pKCk7ZnVuY3Rpb24gUXAobix0LGUpe2xldCBpPUtzKCkrbixyPXJ0KCk7cmV0dXJuIHJbaV09PT1Rbj9EdShyLGksZT90LmNhbGwoZSk6dCgpKTpZeChyLGkpfWZ1bmN0aW9uIE9uKG4sdCxlLGkpe3JldHVybiBSWShydCgpLEtzKCksbix0LGUsaSl9ZnVuY3Rpb24gUXIobix0LGUsaSxyKXtyZXR1cm4gT1kocnQoKSxLcygpLG4sdCxlLGkscil9ZnVuY3Rpb24gWngobix0LGUsaSxyLG8pe3JldHVybiBrWShydCgpLEtzKCksbix0LGUsaSxyLG8pfWZ1bmN0aW9uIEszKG4sdCxlLGkscixvLHMpe3JldHVybiBGWShydCgpLEtzKCksbix0LGUsaSxyLG8scyl9ZnVuY3Rpb24gWjMobix0LGUsaSxyLG8scyxhKXtsZXQgbD1LcygpK24sYz1ydCgpLHU9VmwoYyxsLGUsaSxyLG8pO3JldHVybiBEcyhjLGwrNCxzKXx8dT9EdShjLGwrNSxhP3QuY2FsbChhLGUsaSxyLG8scyk6dChlLGkscixvLHMpKTpZeChjLGwrNSl9ZnVuY3Rpb24gSngobix0KXtsZXQgZT1uW3RdO3JldHVybiBlPT09UW4/dm9pZCAwOmV9ZnVuY3Rpb24gUlkobix0LGUsaSxyLG8pe2xldCBzPXQrZTtyZXR1cm4gRHMobixzLHIpP0R1KG4scysxLG8/aS5jYWxsKG8scik6aShyKSk6SngobixzKzEpfWZ1bmN0aW9uIE9ZKG4sdCxlLGkscixvLHMpe2xldCBhPXQrZTtyZXR1cm4gS2YobixhLHIsbyk/RHUobixhKzIscz9pLmNhbGwocyxyLG8pOmkocixvKSk6SngobixhKzIpfWZ1bmN0aW9uIGtZKG4sdCxlLGkscixvLHMsYSl7bGV0IGw9dCtlO3JldHVybiBTVChuLGwscixvLHMpP0R1KG4sbCszLGE/aS5jYWxsKGEscixvLHMpOmkocixvLHMpKTpKeChuLGwrMyl9ZnVuY3Rpb24gRlkobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXQrZTtyZXR1cm4gVmwobixjLHIsbyxzLGEpP0R1KG4sYys0LGw/aS5jYWxsKGwscixvLHMsYSk6aShyLG8scyxhKSk6SngobixjKzQpfWZ1bmN0aW9uIE5ZKG4sdCxlLGkscixvKXtsZXQgcz10K2UsYT0hMTtmb3IobGV0IGw9MDtsPHIubGVuZ3RoO2wrKylEcyhuLHMrKyxyW2xdKSYmKGE9ITApO3JldHVybiBhP0R1KG4scyxpLmFwcGx5KG8scikpOkp4KG4scyl9ZnVuY3Rpb24gQihuLHQpe2xldCBpLGU9RmkoKSxyPW4rMjI7ZS5maXJzdENyZWF0ZVBhc3M/KGk9ZnVuY3Rpb24obix0KXtpZih0KWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgaT10W2VdO2lmKG49PT1pLm5hbWUpcmV0dXJuIGl9fSh0LGUucGlwZVJlZ2lzdHJ5KSxlLmRhdGFbcl09aSxpLm9uRGVzdHJveSYmKGUuZGVzdHJveUhvb2tzfHwoZS5kZXN0cm95SG9va3M9W10pKS5wdXNoKHIsaS5vbkRlc3Ryb3kpKTppPWUuZGF0YVtyXTtsZXQgbz1pLmZhY3Rvcnl8fChpLmZhY3Rvcnk9V2YoaS50eXBlKSkscz1rbChNKTt0cnl7bGV0IGE9cTEoITEpLGw9bygpO3JldHVybiBxMShhKSxmdW5jdGlvbihuLHQsZSxpKXtlPj1uLmRhdGEubGVuZ3RoJiYobi5kYXRhW2VdPW51bGwsbi5ibHVlcHJpbnRbZV09bnVsbCksdFtlXT1pfShlLHJ0KCkscixsKSxsfWZpbmFsbHl7a2wocyl9fWZ1bmN0aW9uIFUobix0LGUpe2xldCBpPW4rMjIscj1ydCgpLG89SDAocixpKTtyZXR1cm4gJHgocixpKT9SWShyLEtzKCksdCxvLnRyYW5zZm9ybSxlLG8pOm8udHJhbnNmb3JtKGUpfWZ1bmN0aW9uIEpmKG4sdCxlLGkpe2xldCByPW4rMjIsbz1ydCgpLHM9SDAobyxyKTtyZXR1cm4gJHgobyxyKT9PWShvLEtzKCksdCxzLnRyYW5zZm9ybSxlLGkscyk6cy50cmFuc2Zvcm0oZSxpKX1mdW5jdGlvbiBKMyhuLHQsZSxpLHIpe2xldCBvPW4rMjIscz1ydCgpLGE9SDAocyxvKTtyZXR1cm4gJHgocyxvKT9rWShzLEtzKCksdCxhLnRyYW5zZm9ybSxlLGkscixhKTphLnRyYW5zZm9ybShlLGkscil9ZnVuY3Rpb24gJHgobix0KXtyZXR1cm4gblsxXS5kYXRhW3RdLnB1cmV9ZnVuY3Rpb24gS04obil7cmV0dXJuIHQ9PntzZXRUaW1lb3V0KG4sdm9pZCAwLHQpfX12YXIgRz1jbGFzcyBleHRlbmRzIGtle2NvbnN0cnVjdG9yKHQ9ITEpe3N1cGVyKCksdGhpcy5fX2lzQXN5bmM9dH1lbWl0KHQpe3N1cGVyLm5leHQodCl9c3Vic2NyaWJlKHQsZSxpKXtsZXQgcj10LG89ZXx8KCgpPT5udWxsKSxzPWk7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXtsZXQgbD10O3I9bC5uZXh0Py5iaW5kKGwpLG89bC5lcnJvcj8uYmluZChsKSxzPWwuY29tcGxldGU/LmJpbmQobCl9dGhpcy5fX2lzQXN5bmMmJihvPUtOKG8pLHImJihyPUtOKHIpKSxzJiYocz1LTihzKSkpO2xldCBhPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpyLGVycm9yOm8sY29tcGxldGU6c30pO3JldHVybiB0IGluc3RhbmNlb2YgU24mJnQuYWRkKGEpLGF9fTtmdW5jdGlvbiBjQ2UoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tNVCgpXSgpfXZhciBIbD1jbGFzc3tjb25zdHJ1Y3Rvcih0PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT10LHRoaXMuZGlydHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtsZXQgZT1NVCgpLGk9SGwucHJvdG90eXBlO2lbZV18fChpW2VdPWNDZSl9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEcpfWdldCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0c1t0XX1tYXAodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMubWFwKHQpfWZpbHRlcih0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maWx0ZXIodCl9ZmluZCh0KXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5maW5kKHQpfXJlZHVjZSh0LGUpe3JldHVybiB0aGlzLl9yZXN1bHRzLnJlZHVjZSh0LGUpfWZvckVhY2godCl7dGhpcy5fcmVzdWx0cy5mb3JFYWNoKHQpfXNvbWUodCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc29tZSh0KX10b0FycmF5KCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuc2xpY2UoKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9yZXN1bHRzLnRvU3RyaW5nKCl9cmVzZXQodCxlKXtsZXQgaT10aGlzO2kuZGlydHk9ITE7bGV0IHI9RmQodCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24obix0LGUpe2lmKG4ubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspe2xldCByPW5baV0sbz10W2ldO2lmKGUmJihyPWUociksbz1lKG8pKSxvIT09cilyZXR1cm4hMX1yZXR1cm4hMH0oaS5fcmVzdWx0cyxyLGUpKSYmKGkuX3Jlc3VsdHM9cixpLmxlbmd0aD1yLmxlbmd0aCxpLmxhc3Q9clt0aGlzLmxlbmd0aC0xXSxpLmZpcnN0PXJbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3RoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITB9ZGVzdHJveSgpe3RoaXMuY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuY2hhbmdlcy51bnN1YnNjcmliZSgpfX0sVmk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189cENlLG59KSgpLHVDZT1WaSxkQ2U9Y2xhc3MgZXh0ZW5kcyB1Q2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fZGVjbGFyYXRpb25MVmlldz10LHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lcj1lLHRoaXMuZWxlbWVudFJlZj1pfWNyZWF0ZUVtYmVkZGVkVmlldyh0LGUpe2xldCBpPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlld3Mscj1iVCh0aGlzLl9kZWNsYXJhdGlvbkxWaWV3LGksdCwxNixudWxsLGkuZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLG51bGwsZXx8bnVsbCk7clsxN109dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIuaW5kZXhdO2xldCBzPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbMTldO3JldHVybiBudWxsIT09cyYmKHJbMTldPXMuY3JlYXRlRW1iZWRkZWRWaWV3KGkpKSxIMyhpLHIsdCksbmV3IFFmKHIpfX07ZnVuY3Rpb24gcENlKCl7cmV0dXJuIFJUKHpvKCkscnQoKSl9ZnVuY3Rpb24gUlQobix0KXtyZXR1cm4gNCZuLnR5cGU/bmV3IGRDZSh0LG4sRzAobix0KSk6bnVsbH12YXIgT2k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uX19OR19FTEVNRU5UX0lEX189aENlLG59KSgpO2Z1bmN0aW9uIGhDZSgpe3JldHVybiBCWSh6bygpLHJ0KCkpfXZhciBmQ2U9T2ksTFk9Y2xhc3MgZXh0ZW5kcyBmQ2V7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKCksdGhpcy5fbENvbnRhaW5lcj10LHRoaXMuX2hvc3RUTm9kZT1lLHRoaXMuX2hvc3RMVmlldz1pfWdldCBlbGVtZW50KCl7cmV0dXJuIEcwKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgamYodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IHBhcmVudEluamVjdG9yKCl7bGV0IHQ9QzModGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoZTkodCkpe2xldCBlPVcxKHQsdGhpcy5faG9zdExWaWV3KSxpPUcxKHQpO3JldHVybiBuZXcgamYoZVsxXS5kYXRhW2krOF0sZSl9cmV0dXJuIG5ldyBqZihudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldCh0KXtsZXQgZT1nNyh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWUmJmVbdF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC0xMH1jcmVhdGVFbWJlZGRlZFZpZXcodCxlLGkpe2xldCByLG87Im51bWJlciI9PXR5cGVvZiBpP3I9aTpudWxsIT1pJiYocj1pLmluZGV4LG89aS5pbmplY3Rvcik7bGV0IHM9dC5jcmVhdGVFbWJlZGRlZFZpZXcoZXx8e30sbyk7cmV0dXJuIHRoaXMuaW5zZXJ0KHMsciksc31jcmVhdGVDb21wb25lbnQodCxlLGkscixvKXtsZXQgYSxzPXQmJiF1eCh0KTtpZihzKWE9ZTtlbHNle2xldCBkPWV8fHt9O2E9ZC5pbmRleCxpPWQuaW5qZWN0b3Iscj1kLnByb2plY3RhYmxlTm9kZXMsbz1kLmVudmlyb25tZW50SW5qZWN0b3J8fGQubmdNb2R1bGVSZWZ9bGV0IGw9cz90Om5ldyBlVChObCh0KSksYz1pfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFvJiZudWxsPT1sLm5nTW9kdWxlKXtsZXQgcD0ocz9jOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChqcCxudWxsKTtwJiYobz1wKX1sZXQgdT1sLmNyZWF0ZShjLHIsdm9pZCAwLG8pO3JldHVybiB0aGlzLmluc2VydCh1Lmhvc3RWaWV3LGEpLHV9aW5zZXJ0KHQsZSl7bGV0IGk9dC5fbFZpZXcscj1pWzFdO2lmKFZkKGlbM10pKXtsZXQgdT10aGlzLmluZGV4T2YodCk7aWYoLTEhPT11KXRoaXMuZGV0YWNoKHUpO2Vsc2V7bGV0IGQ9aVszXSxwPW5ldyBMWShkLGRbNl0sZFszXSk7cC5kZXRhY2gocC5pbmRleE9mKHQpKX19bGV0IG89dGhpcy5fYWRqdXN0SW5kZXgoZSkscz10aGlzLl9sQ29udGFpbmVyOyFmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xMCtpLG89ZS5sZW5ndGg7aT4wJiYoZVtyLTFdWzRdPXQpLGk8by0xMD8odFs0XT1lW3JdLHU5KGUsMTAraSx0KSk6KGUucHVzaCh0KSx0WzRdPW51bGwpLHRbM109ZTtsZXQgcz10WzE3XTtudWxsIT09cyYmZSE9PXMmJmZ1bmN0aW9uKG4sdCl7bGV0IGU9bls5XTt0WzE2XSE9PXRbM11bM11bMTZdJiYoblsyXT0hMCksbnVsbD09PWU/bls5XT1bdF06ZS5wdXNoKHQpfShzLHQpO2xldCBhPXRbMTldO251bGwhPT1hJiZhLmluc2VydFZpZXcobiksdFsyXXw9NjR9KHIsaSxzLG8pO2xldCBhPVBMKG8scyksbD1pWzExXSxjPXZUKGwsc1s3XSk7cmV0dXJuIG51bGwhPT1jJiZmdW5jdGlvbihuLHQsZSxpLHIsbyl7aVswXT1yLGlbNl09dCxxeChuLGksZSwxLHIsbyl9KHIsc1s2XSxsLGksYyxhKSx0LmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLHU5KFpOKHMpLG8sdCksdH1tb3ZlKHQsZSl7cmV0dXJuIHRoaXMuaW5zZXJ0KHQsZSl9aW5kZXhPZih0KXtsZXQgZT1nNyh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWU/ZS5pbmRleE9mKHQpOi0xfXJlbW92ZSh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPUFMKHRoaXMuX2xDb250YWluZXIsZSk7aSYmKFgxKFpOKHRoaXMuX2xDb250YWluZXIpLGUpLFU5KGlbMV0saSkpfWRldGFjaCh0KXtsZXQgZT10aGlzLl9hZGp1c3RJbmRleCh0LC0xKSxpPUFMKHRoaXMuX2xDb250YWluZXIsZSk7cmV0dXJuIGkmJm51bGwhPVgxKFpOKHRoaXMuX2xDb250YWluZXIpLGUpP25ldyBRZihpKTpudWxsfV9hZGp1c3RJbmRleCh0LGU9MCl7cmV0dXJuIHQ/P3RoaXMubGVuZ3RoK2V9fTtmdW5jdGlvbiBnNyhuKXtyZXR1cm4gbls4XX1mdW5jdGlvbiBaTihuKXtyZXR1cm4gbls4XXx8KG5bOF09W10pfWZ1bmN0aW9uIEJZKG4sdCl7bGV0IGUsaT10W24uaW5kZXhdO2lmKFZkKGkpKWU9aTtlbHNle2xldCByO2lmKDgmbi50eXBlKXI9JGEoaSk7ZWxzZXtsZXQgbz10WzExXTtyPW8uY3JlYXRlQ29tbWVudCgiIik7bGV0IHM9VWwobix0KTtZZihvLHZUKG8scykscixmdW5jdGlvbihuLHQpe3JldHVybiBuLm5leHRTaWJsaW5nKHQpfShvLHMpLCExKX10W24uaW5kZXhdPWU9dnEoaSx0LHIsbiksQ1QodCxlKX1yZXR1cm4gbmV3IExZKGUsbix0KX12YXIgUng9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5xdWVyeUxpc3Q9dCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgUngodGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19LE94PWNsYXNze2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMucXVlcmllcz10fWNyZWF0ZUVtYmVkZGVkVmlldyh0KXtsZXQgZT10LnF1ZXJpZXM7aWYobnVsbCE9PWUpe2xldCBpPW51bGwhPT10LmNvbnRlbnRRdWVyaWVzP3QuY29udGVudFF1ZXJpZXNbMF06ZS5sZW5ndGgscj1bXTtmb3IobGV0IG89MDtvPGk7bysrKXtsZXQgcz1lLmdldEJ5SW5kZXgobyk7ci5wdXNoKHRoaXMucXVlcmllc1tzLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgT3gocil9cmV0dXJuIG51bGx9aW5zZXJ0Vmlldyh0KXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKHQpfWRldGFjaFZpZXcodCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyh0KXtmb3IobGV0IGU9MDtlPHRoaXMucXVlcmllcy5sZW5ndGg7ZSsrKW51bGwhPT16WSh0LGUpLm1hdGNoZXMmJnRoaXMucXVlcmllc1tlXS5zZXREaXJ0eSgpfX0sclQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGk9bnVsbCl7dGhpcy5wcmVkaWNhdGU9dCx0aGlzLmZsYWdzPWUsdGhpcy5yZWFkPWl9fSxreD1jbGFzc3tjb25zdHJ1Y3Rvcih0PVtdKXt0aGlzLnF1ZXJpZXM9dH1lbGVtZW50U3RhcnQodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS5lbGVtZW50U3RhcnQodCxlKX1lbGVtZW50RW5kKHQpe2ZvcihsZXQgZT0wO2U8dGhpcy5xdWVyaWVzLmxlbmd0aDtlKyspdGhpcy5xdWVyaWVzW2VdLmVsZW1lbnRFbmQodCl9ZW1iZWRkZWRUVmlldyh0KXtsZXQgZT1udWxsO2ZvcihsZXQgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXtsZXQgcj1udWxsIT09ZT9lLmxlbmd0aDowLG89dGhpcy5nZXRCeUluZGV4KGkpLmVtYmVkZGVkVFZpZXcodCxyKTtvJiYoby5pbmRleEluRGVjbGFyYXRpb25WaWV3PWksbnVsbCE9PWU/ZS5wdXNoKG8pOmU9W29dKX1yZXR1cm4gbnVsbCE9PWU/bmV3IGt4KGUpOm51bGx9dGVtcGxhdGUodCxlKXtmb3IobGV0IGk9MDtpPHRoaXMucXVlcmllcy5sZW5ndGg7aSsrKXRoaXMucXVlcmllc1tpXS50ZW1wbGF0ZSh0LGUpfWdldEJ5SW5kZXgodCl7cmV0dXJuIHRoaXMucXVlcmllc1t0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sodCl7dGhpcy5xdWVyaWVzLnB1c2godCl9fSxGeD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9LTEpe3RoaXMubWV0YWRhdGE9dCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1lfWVsZW1lbnRTdGFydCh0LGUpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShlKSYmdGhpcy5tYXRjaFROb2RlKHQsZSl9ZWxlbWVudEVuZCh0KXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PXQuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUodCxlKXt0aGlzLmVsZW1lbnRTdGFydCh0LGUpfWVtYmVkZGVkVFZpZXcodCxlKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKHQpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLXQuaW5kZXgsZSksbmV3IEZ4KHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUodCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEhPSgxJnRoaXMubWV0YWRhdGEuZmxhZ3MpKXtsZXQgZT10aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleCxpPXQucGFyZW50O2Zvcig7bnVsbCE9PWkmJjgmaS50eXBlJiZpLmluZGV4IT09ZTspaT1pLnBhcmVudDtyZXR1cm4gZT09PShudWxsIT09aT9pLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4dE5vZGV9bWF0Y2hUTm9kZSh0LGUpe2xldCBpPXRoaXMubWV0YWRhdGEucHJlZGljYXRlO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspe2xldCBvPWlbcl07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLF9DZShlLG8pKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsSTEoZSx0LG8sITEsITEpKX1lbHNlIGk9PT1WaT80JmUudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbih0LGUsSTEoZSx0LGksITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24odCxlLGkpe2lmKG51bGwhPT1pKXtsZXQgcj10aGlzLm1ldGFkYXRhLnJlYWQ7aWYobnVsbCE9PXIpaWYocj09PVJlfHxyPT09T2l8fHI9PT1WaSYmNCZlLnR5cGUpdGhpcy5hZGRNYXRjaChlLmluZGV4LC0yKTtlbHNle2xldCBvPUkxKGUsdCxyLCExLCExKTtudWxsIT09byYmdGhpcy5hZGRNYXRjaChlLmluZGV4LG8pfWVsc2UgdGhpcy5hZGRNYXRjaChlLmluZGV4LGkpfX1hZGRNYXRjaCh0LGUpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVt0LGVdOnRoaXMubWF0Y2hlcy5wdXNoKHQsZSl9fTtmdW5jdGlvbiBfQ2Uobix0KXtsZXQgZT1uLmxvY2FsTmFtZXM7aWYobnVsbCE9PWUpZm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKz0yKWlmKGVbaV09PT10KXJldHVybiBlW2krMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24geUNlKG4sdCxlLGkpe3JldHVybi0xPT09ZT9mdW5jdGlvbihuLHQpe3JldHVybiAxMSZuLnR5cGU/RzAobix0KTo0Jm4udHlwZT9SVChuLHQpOm51bGx9KHQsbik6LTI9PT1lP2Z1bmN0aW9uKG4sdCxlKXtyZXR1cm4gZT09PVJlP0cwKHQsbik6ZT09PVZpP1JUKHQsbik6ZT09PU9pP0JZKHQsbik6dm9pZCAwfShuLHQsaSk6QngobixuWzFdLGUsdCl9ZnVuY3Rpb24gVlkobix0LGUsaSl7bGV0IHI9dFsxOV0ucXVlcmllc1tpXTtpZihudWxsPT09ci5tYXRjaGVzKXtsZXQgbz1uLmRhdGEscz1lLm1hdGNoZXMsYT1bXTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrPTIpe2xldCBjPXNbbF07YS5wdXNoKGM8MD9udWxsOnlDZSh0LG9bY10sc1tsKzFdLGUubWV0YWRhdGEucmVhZCkpfXIubWF0Y2hlcz1hfXJldHVybiByLm1hdGNoZXN9ZnVuY3Rpb24gUUwobix0LGUsaSl7bGV0IHI9bi5xdWVyaWVzLmdldEJ5SW5kZXgoZSksbz1yLm1hdGNoZXM7aWYobnVsbCE9PW8pe2xldCBzPVZZKG4sdCxyLGUpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSs9Mil7bGV0IGw9b1thXTtpZihsPjApaS5wdXNoKHNbYS8yXSk7ZWxzZXtsZXQgYz1vW2ErMV0sdT10Wy1sXTtmb3IobGV0IGQ9MTA7ZDx1Lmxlbmd0aDtkKyspe2xldCBwPXVbZF07cFsxN109PT1wWzNdJiZRTChwWzFdLHAsYyxpKX1pZihudWxsIT09dVs5XSl7bGV0IGQ9dVs5XTtmb3IobGV0IHA9MDtwPGQubGVuZ3RoO3ArKyl7bGV0IGg9ZFtwXTtRTChoWzFdLGgsYyxpKX19fX19cmV0dXJuIGl9ZnVuY3Rpb24gTmUobil7bGV0IHQ9cnQoKSxlPUZpKCksaT1xNygpO3YzKGkrMSk7bGV0IHI9elkoZSxpKTtpZihuLmRpcnR5JiZmdW5jdGlvbihuKXtyZXR1cm4gND09KDQmblsyXSl9KHQpPT09KDI9PSgyJnIubWV0YWRhdGEuZmxhZ3MpKSl7aWYobnVsbD09PXIubWF0Y2hlcyluLnJlc2V0KFtdKTtlbHNle2xldCBvPXIuY3Jvc3Nlc05nVGVtcGxhdGU/UUwoZSx0LGksW10pOlZZKGUsdCxyLGkpO24ucmVzZXQobyxCdmUpLG4ubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gb3Qobix0LGUpe2xldCBpPUZpKCk7aS5maXJzdENyZWF0ZVBhc3MmJihVWShpLG5ldyByVChuLHQsZSksLTEpLDI9PSgyJnQpJiYoaS5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLEhZKGkscnQoKSx0KX1mdW5jdGlvbiBFaShuLHQsZSxpKXtsZXQgcj1GaSgpO2lmKHIuZmlyc3RDcmVhdGVQYXNzKXtsZXQgbz16bygpO1VZKHIsbmV3IHJUKHQsZSxpKSxvLmluZGV4KSxmdW5jdGlvbihuLHQpe2xldCBlPW4uY29udGVudFF1ZXJpZXN8fChuLmNvbnRlbnRRdWVyaWVzPVtdKTt0IT09KGUubGVuZ3RoP2VbZS5sZW5ndGgtMV06LTEpJiZlLnB1c2gobi5xdWVyaWVzLmxlbmd0aC0xLHQpfShyLG4pLDI9PSgyJmUpJiYoci5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9SFkocixydCgpLGUpfWZ1bmN0aW9uIExlKCl7cmV0dXJuIG49cnQoKSx0PXE3KCksblsxOV0ucXVlcmllc1t0XS5xdWVyeUxpc3Q7dmFyIG4sdH1mdW5jdGlvbiBIWShuLHQsZSl7bGV0IGk9bmV3IEhsKDQ9PSg0JmUpKTt1cShuLHQsaSxpLmRlc3Ryb3kpLG51bGw9PT10WzE5XSYmKHRbMTldPW5ldyBPeCksdFsxOV0ucXVlcmllcy5wdXNoKG5ldyBSeChpKSl9ZnVuY3Rpb24gVVkobix0LGUpe251bGw9PT1uLnF1ZXJpZXMmJihuLnF1ZXJpZXM9bmV3IGt4KSxuLnF1ZXJpZXMudHJhY2sobmV3IEZ4KHQsZSkpfWZ1bmN0aW9uIHpZKG4sdCl7cmV0dXJuIG4ucXVlcmllcy5nZXRCeUluZGV4KHQpfWZ1bmN0aW9uIHF0KG4sdCl7cmV0dXJuIFJUKG4sdCl9dmFyIEhwPXsiXHUwMjc1XHUwMjc1YXR0cmlidXRlIjp6ZSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGUxIjpmdW5jdGlvbiBFcShuLHQsZSxpLHIsbyl7bGV0IHM9cnQoKSxhPVgwKHMsdCxlLGkpO3JldHVybiBhIT09UW4mJlR1KG5vKCkscyxuLGEscixvKSxFcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMiI6ZnVuY3Rpb24gVHEobix0LGUsaSxyLG8scyxhKXtsZXQgbD1ydCgpLGM9UTAobCx0LGUsaSxyLG8pO3JldHVybiBjIT09UW4mJlR1KG5vKCksbCxuLGMscyxhKSxUcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlMyI6ZnVuY3Rpb24gRHEobix0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9cnQoKSxkPUswKHUsdCxlLGkscixvLHMsYSk7cmV0dXJuIGQhPT1RbiYmVHUobm8oKSx1LG4sZCxsLGMpLERxfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBBcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCl7bGV0IHA9cnQoKSxoPVowKHAsdCxlLGkscixvLHMsYSxsLGMpO3JldHVybiBoIT09UW4mJlR1KG5vKCkscCxuLGgsdSxkKSxBcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNSI6ZnVuY3Rpb24gSXEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXtsZXQgZj1ydCgpLG09SjAoZix0LGUsaSxyLG8scyxhLGwsYyx1LGQpO3JldHVybiBtIT09UW4mJlR1KG5vKCksZixuLG0scCxoKSxJcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlNiI6ZnVuY3Rpb24gUHEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSl7bGV0IHg9cnQoKSxnPSQwKHgsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCk7cmV0dXJuIGchPT1RbiYmVHUobm8oKSx4LG4sZyxmLG0pLFBxfSwiXHUwMjc1XHUwMjc1YXR0cmlidXRlSW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBScShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgsZyl7bGV0IGI9cnQoKSxEPWVfKGIsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0pO3JldHVybiBEIT09UW4mJlR1KG5vKCksYixuLEQseCxnKSxScX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlOCI6ZnVuY3Rpb24gT3Eobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4LGcsYixEKXtsZXQgVD1ydCgpLGs9dF8oVCx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4LGcpO3JldHVybiBrIT09UW4mJlR1KG5vKCksVCxuLGssYixEKSxPcX0sIlx1MDI3NVx1MDI3NWF0dHJpYnV0ZUludGVycG9sYXRlViI6ZnVuY3Rpb24ga3Eobix0LGUsaSl7bGV0IHI9cnQoKSxvPVkwKHIsdCk7cmV0dXJuIG8hPT1RbiYmVHUobm8oKSxyLG4sbyxlLGkpLGtxfSwiXHUwMjc1XHUwMjc1ZGVmaW5lQ29tcG9uZW50IjpSLCJcdTAyNzVcdTAyNzVkZWZpbmVEaXJlY3RpdmUiOkhlLCJcdTAyNzVcdTAyNzVkZWZpbmVJbmplY3RhYmxlIjp5ZSwiXHUwMjc1XHUwMjc1ZGVmaW5lSW5qZWN0b3IiOlYsIlx1MDI3NVx1MDI3NWRlZmluZU5nTW9kdWxlIjpILCJcdTAyNzVcdTAyNzVkZWZpbmVQaXBlIjpCMCwiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0IjpNLCJcdTAyNzVcdTAyNzVnZXRJbmhlcml0ZWRGYWN0b3J5IjpwaSwiXHUwMjc1XHUwMjc1aW5qZWN0IjpqLCJcdTAyNzVcdTAyNzVpbmplY3RBdHRyaWJ1dGUiOnZvLCJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSI6bmwsIlx1MDI3NVx1MDI3NWludmFsaWRGYWN0b3J5RGVwIjpkOSwiXHUwMjc1XHUwMjc1dGVtcGxhdGVSZWZFeHRyYWN0b3IiOnF0LCJcdTAyNzVcdTAyNzVyZXNldFZpZXciOnNlLCJcdTAyNzVcdTAyNzVOZ09uQ2hhbmdlc0ZlYXR1cmUiOkZ0LCJcdTAyNzVcdTAyNzVQcm92aWRlcnNGZWF0dXJlIjokdCwiXHUwMjc1XHUwMjc1Q29weURlZmluaXRpb25GZWF0dXJlIjpmdW5jdGlvbihuKXtsZXQgZSx0PVNxKG4udHlwZSk7ZT1BYyhuKT90Llx1MDI3NWNtcDp0Llx1MDI3NWRpcjtsZXQgaT1uO2ZvcihsZXQgciBvZiBjYmUpaVtyXT1lW3JdO2lmKEFjKGUpKWZvcihsZXQgciBvZiB1YmUpaVtyXT1lW3JdfSwiXHUwMjc1XHUwMjc1SW5oZXJpdERlZmluaXRpb25GZWF0dXJlIjp0dCwiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiOmZ1bmN0aW9uKG4pe24uZ2V0U3RhbmRhbG9uZUluamVjdG9yPXQ9PnQuZ2V0KGVDZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3Iobil9LCJcdTAyNzVcdTAyNzVuZXh0Q29udGV4dCI6UywiXHUwMjc1XHUwMjc1bmFtZXNwYWNlSFRNTCI6SnMsIlx1MDI3NVx1MDI3NW5hbWVzcGFjZU1hdGhNTCI6ZnVuY3Rpb24oKXtabi5sRnJhbWUuY3VycmVudE5hbWVzcGFjZT0ibWF0aCJ9LCJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciOkluLCJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyI6ZnVuY3Rpb24oKXtabi5iaW5kaW5nc0VuYWJsZWQ9ITB9LCJcdTAyNzVcdTAyNzVkaXNhYmxlQmluZGluZ3MiOmZ1bmN0aW9uKCl7Wm4uYmluZGluZ3NFbmFibGVkPSExfSwiXHUwMjc1XHUwMjc1ZWxlbWVudFN0YXJ0IjpfLCJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIjp2LCJcdTAyNzVcdTAyNzVlbGVtZW50IjpPLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiOnNuLCJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyRW5kIjphbiwiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lciI6TmksIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiOlFwLCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24xIjpPbiwiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMiI6UXIsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiOlp4LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb240IjpLMywiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNSI6WjMsIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtsZXQgYz1LcygpK24sdT1ydCgpLGQ9VmwodSxjLGUsaSxyLG8pO3JldHVybiBLZih1LGMrNCxzLGEpfHxkP0R1KHUsYys2LGw/dC5jYWxsKGwsZSxpLHIsbyxzLGEpOnQoZSxpLHIsbyxzLGEpKTpZeCh1LGMrNil9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb243IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjKXtsZXQgdT1LcygpK24sZD1ydCgpLHA9VmwoZCx1LGUsaSxyLG8pO3JldHVybiBTVChkLHUrNCxzLGEsbCl8fHA/RHUoZCx1KzcsYz90LmNhbGwoYyxlLGkscixvLHMsYSxsKTp0KGUsaSxyLG8scyxhLGwpKTpZeChkLHUrNyl9LCJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPUtzKCkrbixwPXJ0KCksaD1WbChwLGQsZSxpLHIsbyk7cmV0dXJuIFZsKHAsZCs0LHMsYSxsLGMpfHxoP0R1KHAsZCs4LHU/dC5jYWxsKHUsZSxpLHIsbyxzLGEsbCxjKTp0KGUsaSxyLG8scyxhLGwsYykpOll4KHAsZCs4KX0sIlx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiOmZ1bmN0aW9uKG4sdCxlLGkpe3JldHVybiBOWShydCgpLEtzKCksbix0LGUsaSl9LCJcdTAyNzVcdTAyNzVnZXRDdXJyZW50VmlldyI6UGUsIlx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3IjpvZSwiXHUwMjc1XHUwMjc1bGlzdGVuZXIiOlAsIlx1MDI3NVx1MDI3NXByb2plY3Rpb24iOlZuLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiOnJfLCJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiOmlfLCJcdTAyNzVcdTAyNzVwaXBlQmluZDEiOlUsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMiI6SmYsIlx1MDI3NVx1MDI3NXBpcGVCaW5kMyI6SjMsIlx1MDI3NVx1MDI3NXBpcGVCaW5kNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPW4rMjIsYT1ydCgpLGw9SDAoYSxzKTtyZXR1cm4gJHgoYSxzKT9GWShhLEtzKCksdCxsLnRyYW5zZm9ybSxlLGkscixvLGwpOmwudHJhbnNmb3JtKGUsaSxyLG8pfSwiXHUwMjc1XHUwMjc1cGlwZUJpbmRWIjpmdW5jdGlvbihuLHQsZSl7bGV0IGk9bisyMixyPXJ0KCksbz1IMChyLGkpO3JldHVybiAkeChyLGkpP05ZKHIsS3MoKSx0LG8udHJhbnNmb3JtLGUsbyk6by50cmFuc2Zvcm0uYXBwbHkobyxlKX0sIlx1MDI3NVx1MDI3NXByb2plY3Rpb25EZWYiOnhpLCJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiOl9zLCJcdTAyNzVcdTAyNzVwcm9wZXJ0eSI6eSwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZSI6WmksIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIjpYeCwiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTIiOkVULCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMyI6ZnVuY3Rpb24gTnEobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXJ0KCksdT1LMChjLHQsZSxpLHIsbyxzLGEpO3JldHVybiB1IT09UW4mJmlsKEZpKCksbm8oKSxjLG4sdSxjWzExXSxsLCExKSxOcX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0IjpmdW5jdGlvbiBMcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPXJ0KCkscD1aMChkLHQsZSxpLHIsbyxzLGEsbCxjKTtyZXR1cm4gcCE9PVFuJiZpbChGaSgpLG5vKCksZCxuLHAsZFsxMV0sdSwhMSksTHF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSI6ZnVuY3Rpb24gQnEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9cnQoKSxmPUowKGgsdCxlLGkscixvLHMsYSxsLGMsdSxkKTtyZXR1cm4gZiE9PVFuJiZpbChGaSgpLG5vKCksaCxuLGYsaFsxMV0scCwhMSksQnF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNiI6ZnVuY3Rpb24gVnEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPXJ0KCkseD0kMChtLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpO3JldHVybiB4IT09UW4mJmlsKEZpKCksbm8oKSxtLG4seCxtWzExXSxmLCExKSxWcX0sIlx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3IjpmdW5jdGlvbiBIcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2xldCBnPXJ0KCksYj1lXyhnLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKTtyZXR1cm4gYiE9PVFuJiZpbChGaSgpLG5vKCksZyxuLGIsZ1sxMV0seCwhMSksSHF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCI6ZnVuY3Rpb24gVXEobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4LGcsYil7bGV0IEQ9cnQoKSxUPXRfKEQsdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxnKTtyZXR1cm4gVCE9PVFuJiZpbChGaSgpLG5vKCksRCxuLFQsRFsxMV0sYiwhMSksVXF9LCJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlViI6ZnVuY3Rpb24genEobix0LGUpe2xldCBpPXJ0KCkscj1ZMChpLHQpO3JldHVybiByIT09UW4mJmlsKEZpKCksbm8oKSxpLG4scixpWzExXSxlLCExKSx6cX0sIlx1MDI3NVx1MDI3NXBpcGUiOkIsIlx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCI6TmUsIlx1MDI3NVx1MDI3NXZpZXdRdWVyeSI6b3QsIlx1MDI3NVx1MDI3NWxvYWRRdWVyeSI6TGUsIlx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSI6RWksIlx1MDI3NVx1MDI3NXJlZmVyZW5jZSI6JGUsIlx1MDI3NVx1MDI3NWNsYXNzTWFwIjpEYSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTEiOlF4LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiI6ZnVuY3Rpb24obix0LGUsaSxyKXtPYyhlbCxBdSxRMChydCgpLG4sdCxlLGksciksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe09jKGVsLEF1LEswKHJ0KCksbix0LGUsaSxyLG8scyksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsKXtPYyhlbCxBdSxaMChydCgpLG4sdCxlLGkscixvLHMsYSxsKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1KXtPYyhlbCxBdSxKMChydCgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe09jKGVsLEF1LCQwKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKXtPYyhlbCxBdSxlXyhydCgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKSwhMCl9LCJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4KXtPYyhlbCxBdSx0XyhydCgpLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCksITApfSwiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiOmZ1bmN0aW9uKG4pe09jKGVsLEF1LFkwKHJ0KCksbiksITApfSwiXHUwMjc1XHUwMjc1c3R5bGVNYXAiOmpsLCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMSI6ZnVuY3Rpb24obix0LGUpe2psKFgwKHJ0KCksbix0LGUpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIjpmdW5jdGlvbihuLHQsZSxpLHIpe2psKFEwKHJ0KCksbix0LGUsaSxyKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyl7amwoSzAocnQoKSxuLHQsZSxpLHIsbyxzKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNCI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwpe2psKFowKHJ0KCksbix0LGUsaSxyLG8scyxhLGwpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2psKEowKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7amwoJDAocnQoKSxuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNyI6ZnVuY3Rpb24obix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2psKGVfKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpKX0sIlx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4IjpmdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2psKHRfKHJ0KCksbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSx4KSl9LCJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViI6ZnVuY3Rpb24obil7amwoWTAocnQoKSxuKSl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3AiOlB0LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiOmZ1bmN0aW9uIHJZKG4sdCxlLGkscil7cmV0dXJuIFJjKG4sWDAocnQoKSx0LGUsaSksciwhMSkscll9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiOmZ1bmN0aW9uIG9ZKG4sdCxlLGkscixvLHMpe3JldHVybiBSYyhuLFEwKHJ0KCksdCxlLGkscixvKSxzLCExKSxvWX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlMyI6ZnVuY3Rpb24gc1kobix0LGUsaSxyLG8scyxhLGwpe3JldHVybiBSYyhuLEswKHJ0KCksdCxlLGkscixvLHMsYSksbCwhMSksc1l9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiOmZ1bmN0aW9uIGFZKG4sdCxlLGkscixvLHMsYSxsLGMsdSl7cmV0dXJuIFJjKG4sWjAocnQoKSx0LGUsaSxyLG8scyxhLGwsYyksdSwhMSksYVl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiOmZ1bmN0aW9uIGxZKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3JldHVybiBSYyhuLEowKHJ0KCksdCxlLGkscixvLHMsYSxsLGMsdSxkKSxwLCExKSxsWX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlNiI6ZnVuY3Rpb24gY1kobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe3JldHVybiBSYyhuLCQwKHJ0KCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCksZiwhMSksY1l9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciOmZ1bmN0aW9uIHVZKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCl7cmV0dXJuIFJjKG4sZV8ocnQoKSx0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYsbSkseCwhMSksdVl9LCJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiOmZ1bmN0aW9uIGRZKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxnLGIpe3JldHVybiBSYyhuLHRfKHJ0KCksdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxnKSxiLCExKSxkWX0sIlx1MDI3NVx1MDI3NXN0eWxlUHJvcEludGVycG9sYXRlViI6ZnVuY3Rpb24gcFkobix0LGUpe3JldHVybiBSYyhuLFkwKHJ0KCksdCksZSwhMSkscFl9LCJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiOmV0LCJcdTAyNzVcdTAyNzVhZHZhbmNlIjpDLCJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSI6RSwiXHUwMjc1XHUwMjc1dGV4dCI6QSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlIjp5dCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSI6amUsIlx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTIiOlhwLCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUzIjpUVCwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCI6ZnVuY3Rpb24gSnEobix0LGUsaSxyLG8scyxhLGwpe2xldCBjPXJ0KCksdT1aMChjLG4sdCxlLGkscixvLHMsYSxsKTtyZXR1cm4gdSE9PVFuJiZqZChjLFpzKCksdSksSnF9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1IjpmdW5jdGlvbiAkcShuLHQsZSxpLHIsbyxzLGEsbCxjLHUpe2xldCBkPXJ0KCkscD1KMChkLG4sdCxlLGkscixvLHMsYSxsLGMsdSk7cmV0dXJuIHAhPT1RbiYmamQoZCxacygpLHApLCRxfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNiI6ZnVuY3Rpb24gZVkobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7bGV0IGg9cnQoKSxmPSQwKGgsbix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCk7cmV0dXJuIGYhPT1RbiYmamQoaCxacygpLGYpLGVZfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyI6ZnVuY3Rpb24gdFkobix0LGUsaSxyLG8scyxhLGwsYyx1LGQscCxoLGYpe2xldCBtPXJ0KCkseD1lXyhtLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmKTtyZXR1cm4geCE9PVFuJiZqZChtLFpzKCkseCksdFl9LCJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4IjpmdW5jdGlvbiBuWShuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2xldCBnPXJ0KCksYj10XyhnLG4sdCxlLGkscixvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCk7cmV0dXJuIGIhPT1RbiYmamQoZyxacygpLGIpLG5ZfSwiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlViI6ZnVuY3Rpb24gaVkobil7bGV0IHQ9cnQoKSxlPVkwKHQsbik7cmV0dXJuIGUhPT1RbiYmamQodCxacygpLGUpLGlZfSwiXHUwMjc1XHUwMjc1aTE4biI6QVQsIlx1MDI3NVx1MDI3NWkxOG5BdHRyaWJ1dGVzIjpmdW5jdGlvbihuLHQpe2xldCBlPUZpKCk7IWZ1bmN0aW9uKG4sdCxlKXtsZXQgcj16bygpLmluZGV4LG89W107aWYobi5maXJzdENyZWF0ZVBhc3MmJm51bGw9PT1uLmRhdGFbdF0pe2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cys9Mil7bGV0IGE9ZVtzXSxsPWVbcysxXTtpZigiIiE9PWwpe2lmKEN4ZS50ZXN0KGwpKXRocm93IG5ldyBFcnJvcihgSUNVIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGF0dHJpYnV0ZXMuIE1lc3NhZ2U6ICIke2x9Ii5gKTtieChvLGwscixhLFB4ZShvKSxudWxsKX19bi5kYXRhW3RdPW99fShlLG4rMjIsVXAoZS5jb25zdHMsdCkpfSwiXHUwMjc1XHUwMjc1aTE4bkV4cCI6S3gsIlx1MDI3NVx1MDI3NWkxOG5TdGFydCI6QVksIlx1MDI3NVx1MDI3NWkxOG5FbmQiOklZLCJcdTAyNzVcdTAyNzVpMThuQXBwbHkiOklULCJcdTAyNzVcdTAyNzVpMThuUG9zdHByb2Nlc3MiOlBULCJcdTAyNzVcdTAyNzVyZXNvbHZlV2luZG93IjpXeCwiXHUwMjc1XHUwMjc1cmVzb2x2ZURvY3VtZW50IjpfVCwiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiOmZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQuYm9keX0sIlx1MDI3NVx1MDI3NXNldENvbXBvbmVudFNjb3BlIjpOeCwiXHUwMjc1XHUwMjc1c2V0TmdNb2R1bGVTY29wZSI6ZnVuY3Rpb24obix0KXtyZXR1cm4gWmYoKCk9PntsZXQgZT1JMChuLCEwKTtlLmRlY2xhcmF0aW9ucz10LmRlY2xhcmF0aW9uc3x8UWksZS5pbXBvcnRzPXQuaW1wb3J0c3x8UWksZS5leHBvcnRzPXQuZXhwb3J0c3x8UWl9KX0sIlx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIjptOSwiXHUwMjc1XHUwMjc1c2FuaXRpemVIdG1sIjpBMywiXHUwMjc1XHUwMjc1c2FuaXRpemVTdHlsZSI6ZnVuY3Rpb24obil7bGV0IHQ9R3goKTtyZXR1cm4gdD90LnNhbml0aXplKG1vLlNUWUxFLG4pfHwiIjpQYyhuLCJTdHlsZSIpP1RhKG4pOktuKG4pfSwiXHUwMjc1XHUwMjc1c2FuaXRpemVSZXNvdXJjZVVybCI6QTksIlx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0IjpmdW5jdGlvbihuKXtsZXQgdD1HeCgpO2lmKHQpcmV0dXJuIHFXKHQuc2FuaXRpemUobW8uU0NSSVBULG4pfHwiIik7aWYoUGMobiwiU2NyaXB0IikpcmV0dXJuIHFXKFRhKG4pKTt0aHJvdyBuZXcgQXQoOTA1LCExKX0sIlx1MDI3NVx1MDI3NXNhbml0aXplVXJsIjp6bCwiXHUwMjc1XHUwMjc1c2FuaXRpemVVcmxPclJlc291cmNlVXJsIjpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuInNyYyI9PT10JiYoImVtYmVkIj09PW58fCJmcmFtZSI9PT1ufHwiaWZyYW1lIj09PW58fCJtZWRpYSI9PT1ufHwic2NyaXB0Ij09PW4pfHwiaHJlZiI9PT10JiYoImJhc2UiPT09bnx8ImxpbmsiPT09bik/QTk6emx9KHQsZSkobil9LCJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50SHRtbCI6ZnVuY3Rpb24obil7cmV0dXJuIE8wKG5bMF0pfSwiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudFJlc291cmNlVXJsIjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHY5KCk/LmNyZWF0ZVNjcmlwdFVSTChuKXx8bn0oblswXSl9LGZvcndhcmRSZWY6Sm4scmVzb2x2ZUZvcndhcmRSZWY6S2l9O2Z1bmN0aW9uIGpZKG4pe3JldHVybiEhSTAobil9dmFyIEYxPVtdLEpOPSExO2Z1bmN0aW9uIEdZKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uZXZlcnkoR1kpOiEhS2kobil9ZnVuY3Rpb24gSUNlKG4sdCl7bGV0IGU9RmQodC5kZWNsYXJhdGlvbnN8fFFpKSxpPUwwKG4pO2UuZm9yRWFjaChyPT57KHI9S2kocikpLmhhc093blByb3BlcnR5KGNUKT9XWShObChyKSxpKTohci5oYXNPd25Qcm9wZXJ0eShsMykmJiFyLmhhc093blByb3BlcnR5KGMzKSYmKHIubmdTZWxlY3RvclNjb3BlPW4pfSl9ZnVuY3Rpb24gV1kobix0KXtuLmRpcmVjdGl2ZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5kaXJlY3RpdmVzKS5tYXAoZT0+ZS5oYXNPd25Qcm9wZXJ0eShjVCk/TmwoZSk6R2YoZSkpLmZpbHRlcihlPT4hIWUpLG4ucGlwZURlZnM9KCk9PkFycmF5LmZyb20odC5jb21waWxhdGlvbi5waXBlcykubWFwKGU9PkxkKGUpKSxuLnNjaGVtYXM9dC5zY2hlbWFzLG4udFZpZXc9bnVsbH1mdW5jdGlvbiBMMChuKXtpZihqWShuKSlyZXR1cm4gZnVuY3Rpb24obil7bGV0IHQ9STAobiwhMCk7aWYobnVsbCE9PXQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXMpcmV0dXJuIHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM7bGV0IGU9e3NjaGVtYXM6dC5zY2hlbWFzfHxudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fX07cmV0dXJuIFIxKHQuaW1wb3J0cykuZm9yRWFjaChpPT57bGV0IHI9TDAoaSk7ci5leHBvcnRlZC5kaXJlY3RpdmVzLmZvckVhY2gobz0+ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChvKSksci5leHBvcnRlZC5waXBlcy5mb3JFYWNoKG89PmUuY29tcGlsYXRpb24ucGlwZXMuYWRkKG8pKX0pLFIxKHQuZGVjbGFyYXRpb25zKS5mb3JFYWNoKGk9PntMZChpKT9lLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChpKTplLmNvbXBpbGF0aW9uLmRpcmVjdGl2ZXMuYWRkKGkpfSksUjEodC5leHBvcnRzKS5mb3JFYWNoKGk9PntsZXQgcj1pO2lmKGpZKHIpKXtsZXQgbz1MMChyKTtvLmV4cG9ydGVkLmRpcmVjdGl2ZXMuZm9yRWFjaChzPT57ZS5jb21waWxhdGlvbi5kaXJlY3RpdmVzLmFkZChzKSxlLmV4cG9ydGVkLmRpcmVjdGl2ZXMuYWRkKHMpfSksby5leHBvcnRlZC5waXBlcy5mb3JFYWNoKHM9PntlLmNvbXBpbGF0aW9uLnBpcGVzLmFkZChzKSxlLmV4cG9ydGVkLnBpcGVzLmFkZChzKX0pfWVsc2UgTGQocik/ZS5leHBvcnRlZC5waXBlcy5hZGQocik6ZS5leHBvcnRlZC5kaXJlY3RpdmVzLmFkZChyKX0pLHQudHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM9ZSxlfShuKTtpZihSNyhuKSl7aWYobnVsbCE9PShObChuKXx8R2YobikpKXJldHVybntzY2hlbWFzOm51bGwsY29tcGlsYXRpb246e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0fSxleHBvcnRlZDp7ZGlyZWN0aXZlczpuZXcgU2V0KFtuXSkscGlwZXM6bmV3IFNldH19O2lmKG51bGwhPT1MZChuKSlyZXR1cm57c2NoZW1hczpudWxsLGNvbXBpbGF0aW9uOntkaXJlY3RpdmVzOm5ldyBTZXQscGlwZXM6bmV3IFNldH0sZXhwb3J0ZWQ6e2RpcmVjdGl2ZXM6bmV3IFNldCxwaXBlczpuZXcgU2V0KFtuXSl9fX10aHJvdyBuZXcgRXJyb3IoYCR7bi5uYW1lfSBkb2VzIG5vdCBoYXZlIGEgbW9kdWxlIGRlZiAoXHUwMjc1bW9kIHByb3BlcnR5KWApfWZ1bmN0aW9uIF83KG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdm9pZCAwIT09bi5uZ01vZHVsZX0obik/bi5uZ01vZHVsZTpufXZhciAkTj0wO2Z1bmN0aW9uIHFZKG4sdCl7bGV0IGU9bnVsbDtYWShuLHR8fHt9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixsMyx7Z2V0OigpPT57aWYobnVsbD09PWUpe2xldCBpPVlZKG4sdHx8e30pO2U9TGwoKS5jb21waWxlRGlyZWN0aXZlKEhwLGkuc291cmNlTWFwVXJsLGkubWV0YWRhdGEpfXJldHVybiBlfSxjb25maWd1cmFibGU6ITF9KX1mdW5jdGlvbiBZWShuLHQpe2xldCBlPW4mJm4ubmFtZSxpPWBuZzovLy8ke2V9L1x1MDI3NWRpci5qc2Ascj1MbCgpLG89UVkobix0KTtyZXR1cm4gby50eXBlU291cmNlU3Bhbj1yLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixlLGkpLG8udXNlc0luaGVyaXRhbmNlJiZLWShuKSx7bWV0YWRhdGE6byxzb3VyY2VNYXBVcmw6aX19ZnVuY3Rpb24gWFkobix0KXtsZXQgZT1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLE5kLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9WVkobix0KSxyPUxsKCk7ZT1yLmNvbXBpbGVGYWN0b3J5KEhwLGBuZzovLy8ke24ubmFtZX0vXHUwMjc1ZmFjLmpzYCx7bmFtZTppLm1ldGFkYXRhLm5hbWUsdHlwZTppLm1ldGFkYXRhLnR5cGUsdHlwZUFyZ3VtZW50Q291bnQ6MCxkZXBzOmZUKG4pLHRhcmdldDpyLkZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMX0pfWZ1bmN0aW9uIEZDZShuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKT09PU9iamVjdC5wcm90b3R5cGV9ZnVuY3Rpb24gUVkobix0KXtsZXQgZT1TMygpLGk9ZS5vd25Qcm9wTWV0YWRhdGEobik7cmV0dXJue25hbWU6bi5uYW1lLHR5cGU6bixzZWxlY3Rvcjp2b2lkIDAhPT10LnNlbGVjdG9yP3Quc2VsZWN0b3I6bnVsbCxob3N0OnQuaG9zdHx8QTAscHJvcE1ldGFkYXRhOmksaW5wdXRzOnQuaW5wdXRzfHxRaSxvdXRwdXRzOnQub3V0cHV0c3x8UWkscXVlcmllczp2NyhuLGksWlkpLGxpZmVjeWNsZTp7dXNlc09uQ2hhbmdlczplLmhhc0xpZmVjeWNsZUhvb2sobiwibmdPbkNoYW5nZXMiKX0sdHlwZVNvdXJjZVNwYW46bnVsbCx1c2VzSW5oZXJpdGFuY2U6IUZDZShuKSxleHBvcnRBczpCQ2UodC5leHBvcnRBcykscHJvdmlkZXJzOnQucHJvdmlkZXJzfHxudWxsLHZpZXdRdWVyaWVzOnY3KG4saSxKWSksaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX1mdW5jdGlvbiBLWShuKXtsZXQgdD1PYmplY3QucHJvdG90eXBlLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4ucHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjtmb3IoO2UmJmUhPT10OykhR2YoZSkmJiFObChlKSYmSENlKGUpJiZxWShlLG51bGwpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfWZ1bmN0aW9uIE5DZShuKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/ZVgobik6S2kobil9ZnVuY3Rpb24gTENlKG4sdCl7cmV0dXJue3Byb3BlcnR5TmFtZTpuLHByZWRpY2F0ZTpOQ2UodC5zZWxlY3RvciksZGVzY2VuZGFudHM6dC5kZXNjZW5kYW50cyxmaXJzdDp0LmZpcnN0LHJlYWQ6dC5yZWFkP3QucmVhZDpudWxsLHN0YXRpYzohIXQuc3RhdGljLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5OiEhdC5lbWl0RGlzdGluY3RDaGFuZ2VzT25seX19ZnVuY3Rpb24gdjcobix0LGUpe2xldCBpPVtdO2ZvcihsZXQgciBpbiB0KWlmKHQuaGFzT3duUHJvcGVydHkocikpe2xldCBvPXRbcl07by5mb3JFYWNoKHM9PntpZihlKHMpKXtpZighcy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoYENhbid0IGNvbnN0cnVjdCBhIHF1ZXJ5IGZvciB0aGUgcHJvcGVydHkgIiR7cn0iIG9mICIke28zKG4pfSIgc2luY2UgdGhlIHF1ZXJ5IHNlbGVjdG9yIHdhc24ndCBkZWZpbmVkLmApO2lmKG8uc29tZSgkWSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tYmluZSBASW5wdXQgZGVjb3JhdG9ycyB3aXRoIHF1ZXJ5IGRlY29yYXRvcnMiKTtpLnB1c2goTENlKHIscykpfX0pfXJldHVybiBpfWZ1bmN0aW9uIEJDZShuKXtyZXR1cm4gdm9pZCAwPT09bj9udWxsOmVYKG4pfWZ1bmN0aW9uIFpZKG4pe2xldCB0PW4ubmdNZXRhZGF0YU5hbWU7cmV0dXJuIkNvbnRlbnRDaGlsZCI9PT10fHwiQ29udGVudENoaWxkcmVuIj09PXR9ZnVuY3Rpb24gSlkobil7bGV0IHQ9bi5uZ01ldGFkYXRhTmFtZTtyZXR1cm4iVmlld0NoaWxkIj09PXR8fCJWaWV3Q2hpbGRyZW4iPT09dH1mdW5jdGlvbiAkWShuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBlWChuKXtyZXR1cm4gbi5zcGxpdCgiLCIpLm1hcCh0PT50LnRyaW0oKSl9dmFyIFZDZT1bIm5nT25DaGFuZ2VzIiwibmdPbkluaXQiLCJuZ09uRGVzdHJveSIsIm5nRG9DaGVjayIsIm5nQWZ0ZXJWaWV3SW5pdCIsIm5nQWZ0ZXJWaWV3Q2hlY2tlZCIsIm5nQWZ0ZXJDb250ZW50SW5pdCIsIm5nQWZ0ZXJDb250ZW50Q2hlY2tlZCJdO2Z1bmN0aW9uIEhDZShuKXtsZXQgdD1TMygpO2lmKFZDZS5zb21lKGk9PnQuaGFzTGlmZWN5Y2xlSG9vayhuLGkpKSlyZXR1cm4hMDtsZXQgZT10LnByb3BNZXRhZGF0YShuKTtmb3IobGV0IGkgaW4gZSl7bGV0IHI9ZVtpXTtmb3IobGV0IG89MDtvPHIubGVuZ3RoO28rKyl7bGV0IHM9cltvXSxhPXMubmdNZXRhZGF0YU5hbWU7aWYoJFkocyl8fFpZKHMpfHxKWShzKXx8Ik91dHB1dCI9PT1hfHwiSG9zdEJpbmRpbmciPT09YXx8Ikhvc3RMaXN0ZW5lciI9PT1hKXJldHVybiEwfX1yZXR1cm4hMX1mdW5jdGlvbiB5NyhuLHQpe3JldHVybnt0eXBlOm4sbmFtZTpuLm5hbWUscGlwZU5hbWU6dC5uYW1lLHB1cmU6dm9pZCAwPT09dC5wdXJlfHx0LnB1cmUsaXNTdGFuZGFsb25lOiEhdC5zdGFuZGFsb25lfX12YXIgekNlPVZ4KCJEaXJlY3RpdmUiLChuPXt9KT0+bix2b2lkIDAsdm9pZCAwLChuLHQpPT5xWShuLHQpKTtmdW5jdGlvbiBvVCguLi5uKXt9VngoIkNvbXBvbmVudCIsKG49e30pPT4oe2NoYW5nZURldGVjdGlvbjpweC5EZWZhdWx0LC4uLm59KSx6Q2Usdm9pZCAwLChuLHQpPT5mdW5jdGlvbihuLHQpe2xldCBlPW51bGw7KGZ1bmN0aW9uKG4sdCl7ZjkodCkmJihEeC5zZXQobix0KSxoOS5hZGQobikpfSkobix0KSxYWShuLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGNULHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IGk9TGwoKTtpZihmOSh0KSl7bGV0IGM9W2BDb21wb25lbnQgJyR7bi5uYW1lfScgaXMgbm90IHJlc29sdmVkOmBdO3Rocm93IHQudGVtcGxhdGVVcmwmJmMucHVzaChgIC0gdGVtcGxhdGVVcmw6ICR7dC50ZW1wbGF0ZVVybH1gKSx0LnN0eWxlVXJscyYmdC5zdHlsZVVybHMubGVuZ3RoJiZjLnB1c2goYCAtIHN0eWxlVXJsczogJHtKU09OLnN0cmluZ2lmeSh0LnN0eWxlVXJscyl9YCksYy5wdXNoKCJEaWQgeW91IHJ1biBhbmQgd2FpdCBmb3IgJ3Jlc29sdmVDb21wb25lbnRSZXNvdXJjZXMoKSc/IiksbmV3IEVycm9yKGMuam9pbigiXG4iKSl9bGV0IHI9bnVsbCxvPXQucHJlc2VydmVXaGl0ZXNwYWNlczt2b2lkIDA9PT1vJiYobz1udWxsIT09ciYmdm9pZCAwIT09ci5wcmVzZXJ2ZVdoaXRlc3BhY2VzJiZyLnByZXNlcnZlV2hpdGVzcGFjZXMpO2xldCBzPXQuZW5jYXBzdWxhdGlvbjt2b2lkIDA9PT1zJiYocz1udWxsIT09ciYmdm9pZCAwIT09ci5kZWZhdWx0RW5jYXBzdWxhdGlvbj9yLmRlZmF1bHRFbmNhcHN1bGF0aW9uOkphLkVtdWxhdGVkKTtsZXQgYT10LnRlbXBsYXRlVXJsfHxgbmc6Ly8vJHtuLm5hbWV9L3RlbXBsYXRlLmh0bWxgLGw9ey4uLlFZKG4sdCksdHlwZVNvdXJjZVNwYW46aS5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsbi5uYW1lLGEpLHRlbXBsYXRlOnQudGVtcGxhdGV8fCIiLHByZXNlcnZlV2hpdGVzcGFjZXM6byxzdHlsZXM6dC5zdHlsZXN8fFFpLGFuaW1hdGlvbnM6dC5hbmltYXRpb25zLGRlY2xhcmF0aW9uczpbXSxjaGFuZ2VEZXRlY3Rpb246dC5jaGFuZ2VEZXRlY3Rpb24sZW5jYXBzdWxhdGlvbjpzLGludGVycG9sYXRpb246dC5pbnRlcnBvbGF0aW9uLHZpZXdQcm92aWRlcnM6dC52aWV3UHJvdmlkZXJzfHxudWxsLGlzU3RhbmRhbG9uZTohIXQuc3RhbmRhbG9uZX07JE4rKzt0cnl7aWYobC51c2VzSW5oZXJpdGFuY2UmJktZKG4pLGU9aS5jb21waWxlQ29tcG9uZW50KEhwLGEsbCksdC5zdGFuZGFsb25lKXtsZXQgYz1GZCh0LmltcG9ydHN8fFFpKSx7ZGlyZWN0aXZlRGVmczp1LHBpcGVEZWZzOmR9PWZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7cmV0dXJue2RpcmVjdGl2ZURlZnM6KCk9PntpZihudWxsPT09ZSl7ZT1bTmwobildO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPUtpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJMChsKSl7bGV0IGM9TDAobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQuZGlyZWN0aXZlcyl7bGV0IGQ9TmwodSl8fEdmKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGUucHVzaChkKSl9fWVsc2V7bGV0IGM9TmwobCl8fEdmKGwpO2MmJmUucHVzaChjKX19fXJldHVybiBlfSxwaXBlRGVmczooKT0+e2lmKG51bGw9PT1pKXtpPVtdO2xldCBzPW5ldyBTZXQ7Zm9yKGxldCBhIG9mIHQpe2xldCBsPUtpKGEpO2lmKCFzLmhhcyhsKSlpZihzLmFkZChsKSxJMChsKSl7bGV0IGM9TDAobCk7Zm9yKGxldCB1IG9mIGMuZXhwb3J0ZWQucGlwZXMpe2xldCBkPUxkKHUpO2QmJiFzLmhhcyh1KSYmKHMuYWRkKHUpLGkucHVzaChkKSl9fWVsc2V7bGV0IGM9TGQobCk7YyYmaS5wdXNoKGMpfX19cmV0dXJuIGl9fX0obixjKTtlLmRpcmVjdGl2ZURlZnM9dSxlLnBpcGVEZWZzPWQsZS5kZXBlbmRlbmNpZXM9KCk9PmMubWFwKEtpKX19ZmluYWxseXskTi0tfWlmKDA9PT0kTiYmZnVuY3Rpb24oKXtpZighSk4pe0pOPSEwO3RyeXtmb3IobGV0IG49RjEubGVuZ3RoLTE7bj49MDtuLS0pe2xldHttb2R1bGVUeXBlOnQsbmdNb2R1bGU6ZX09RjFbbl07ZS5kZWNsYXJhdGlvbnMmJmUuZGVjbGFyYXRpb25zLmV2ZXJ5KEdZKSYmKEYxLnNwbGljZShuLDEpLElDZSh0LGUpKX19ZmluYWxseXtKTj0hMX19fSgpLGZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLm5nU2VsZWN0b3JTY29wZX0obikpe2xldCBjPUwwKG4ubmdTZWxlY3RvclNjb3BlKTtXWShlLGMpfWlmKHQuc2NoZW1hcyl7aWYoIXQuc3RhbmRhbG9uZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSAnc2NoZW1hcycgd2FzIHNwZWNpZmllZCBmb3IgdGhlICR7bzMobil9IGJ1dCBpcyBvbmx5IHZhbGlkIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgc3RhbmRhbG9uZS5gKTtlLnNjaGVtYXM9dC5zY2hlbWFzfWVsc2UgdC5zdGFuZGFsb25lJiYoZS5zY2hlbWFzPVtdKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLFZ4KCJQaXBlIixuPT4oe3B1cmU6ITAsLi4ubn0pLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdCl7bGV0IGU9bnVsbCxpPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sTmQse2dldDooKT0+e2lmKG51bGw9PT1pKXtsZXQgcj15NyhuLHQpLG89TGwoKTtpPW8uY29tcGlsZUZhY3RvcnkoSHAsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVmYWMuanNgLHtuYW1lOnIubmFtZSx0eXBlOnIudHlwZSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6ZlQobiksdGFyZ2V0Om8uRmFjdG9yeVRhcmdldC5QaXBlfSl9cmV0dXJuIGl9LGNvbmZpZ3VyYWJsZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGMzLHtnZXQ6KCk9PntpZihudWxsPT09ZSl7bGV0IHI9eTcobix0KTtlPUxsKCkuY29tcGlsZVBpcGUoSHAsYG5nOi8vLyR7ci5uYW1lfS9cdTAyNzVwaXBlLmpzYCxyKX1yZXR1cm4gZX0sY29uZmlndXJhYmxlOiExfSl9KG4sdCkpLFlwKCJJbnB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksWXAoIk91dHB1dCIsbj0+KHtiaW5kaW5nUHJvcGVydHlOYW1lOm59KSksWXAoIkhvc3RCaW5kaW5nIixuPT4oe2hvc3RQcm9wZXJ0eU5hbWU6bn0pKSxZcCgiSG9zdExpc3RlbmVyIiwobix0KT0+KHtldmVudE5hbWU6bixhcmdzOnR9KSksVngoIk5nTW9kdWxlIixuPT5uLHZvaWQgMCx2b2lkIDAsKG4sdCk9PmZ1bmN0aW9uKG4sdD17fSl7KGZ1bmN0aW9uKG4sdCxlPSExKXtsZXQgaT1GZCh0LmRlY2xhcmF0aW9uc3x8UWkpLHI9bnVsbDtPYmplY3QuZGVmaW5lUHJvcGVydHkobixJNyx7Y29uZmlndXJhYmxlOiEwLGdldDooKT0+KG51bGw9PT1yJiYocj1MbCgpLmNvbXBpbGVOZ01vZHVsZShIcCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NW1vZC5qc2Ase3R5cGU6bixib290c3RyYXA6RmQodC5ib290c3RyYXB8fFFpKS5tYXAoS2kpLGRlY2xhcmF0aW9uczppLm1hcChLaSksaW1wb3J0czpGZCh0LmltcG9ydHN8fFFpKS5tYXAoS2kpLm1hcChfNyksZXhwb3J0czpGZCh0LmV4cG9ydHN8fFFpKS5tYXAoS2kpLm1hcChfNyksc2NoZW1hczp0LnNjaGVtYXM/RmQodC5zY2hlbWFzKTpudWxsLGlkOnQuaWR8fG51bGx9KSxyLnNjaGVtYXN8fChyLnNjaGVtYXM9W10pKSxyKX0pO2xldCBvPW51bGw7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sTmQse2dldDooKT0+e2lmKG51bGw9PT1vKXtsZXQgYT1MbCgpO289YS5jb21waWxlRmFjdG9yeShIcCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWZhYy5qc2Ase25hbWU6bi5uYW1lLHR5cGU6bixkZXBzOmZUKG4pLHRhcmdldDphLkZhY3RvcnlUYXJnZXQuTmdNb2R1bGUsdHlwZUFyZ3VtZW50Q291bnQ6MH0pfXJldHVybiBvfSxjb25maWd1cmFibGU6ITF9KTtsZXQgcz1udWxsO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLG5MLHtnZXQ6KCk9PntpZihudWxsPT09cyl7bGV0IGE9e25hbWU6bi5uYW1lLHR5cGU6bixwcm92aWRlcnM6dC5wcm92aWRlcnN8fFFpLGltcG9ydHM6Wyh0LmltcG9ydHN8fFFpKS5tYXAoS2kpLCh0LmV4cG9ydHN8fFFpKS5tYXAoS2kpXX07cz1MbCgpLmNvbXBpbGVJbmplY3RvcihIcCxgbmc6Ly8vJHtuLm5hbWV9L1x1MDI3NWluai5qc2AsYSl9cmV0dXJuIHN9LGNvbmZpZ3VyYWJsZTohMX0pfSkobix0KSx2b2lkIDAhPT10LmlkJiZtOShuLHQuaWQpLGZ1bmN0aW9uKG4sdCl7RjEucHVzaCh7bW9kdWxlVHlwZTpuLG5nTW9kdWxlOnR9KX0obix0KX0obix0KSk7dmFyICQzPW5ldyBwZSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKSxPVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuYXBwSW5pdHM9ZSx0aGlzLnJlc29sdmU9b1QsdGhpcy5yZWplY3Q9b1QsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoaSxyKT0+e3RoaXMucmVzb2x2ZT1pLHRoaXMucmVqZWN0PXJ9KX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtsZXQgZT1bXSxpPSgpPT57dGhpcy5kb25lPSEwLHRoaXMucmVzb2x2ZSgpfTtpZih0aGlzLmFwcEluaXRzKWZvcihsZXQgcj0wO3I8dGhpcy5hcHBJbml0cy5sZW5ndGg7cisrKXtsZXQgbz10aGlzLmFwcEluaXRzW3JdKCk7aWYobl8obykpZS5wdXNoKG8pO2Vsc2UgaWYoUTMobykpe2xldCBzPW5ldyBQcm9taXNlKChhLGwpPT57by5zdWJzY3JpYmUoe2NvbXBsZXRlOmEsZXJyb3I6bH0pfSk7ZS5wdXNoKHMpfX1Qcm9taXNlLmFsbChlKS50aGVuKCgpPT57aSgpfSkuY2F0Y2gocj0+e3RoaXMucmVqZWN0KHIpfSksMD09PWUubGVuZ3RoJiZpKCksdGhpcy5pbml0aWFsaXplZD0hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaigkMyw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksJGY9bmV3IHBlKCJBcHBJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm5gJHtlTCgpfSR7ZUwoKX0ke2VMKCl9YH19KTtmdW5jdGlvbiBlTCgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3K01hdGguZmxvb3IoMjUqTWF0aC5yYW5kb20oKSkpfXZhciBlQj1uZXcgcGUoIlBsYXRmb3JtIEluaXRpYWxpemVyIiksR2Q9bmV3IHBlKCJQbGF0Zm9ybSBJRCIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxHQ2U9bmV3IHBlKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpLFBpPShuZXcgcGUoIkFwcGxpY2F0aW9uIFBhY2thZ2VzIFJvb3QgVVJMIiksbmV3IHBlKCJBbmltYXRpb25Nb2R1bGVUeXBlIikpLFdkPW5ldyBwZSgiTG9jYWxlSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5qbyhXZCxkaS5PcHRpb25hbHxkaS5Ta2lwU2VsZil8fHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxuVH0pLFhDZT0obmV3IHBlKCJEZWZhdWx0Q3VycmVuY3lDb2RlIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlVTRCJ9KSxuZXcgcGUoIlRyYW5zbGF0aW9ucyIpLG5ldyBwZSgiVHJhbnNsYXRpb25zRm9ybWF0IiksbmV3IHBlKCJjb21waWxlck9wdGlvbnMiKSxQcm9taXNlLnJlc29sdmUoMCkpO2Z1bmN0aW9uIEtMKG4pe3R5cGVvZiBab25lPiJ1Ij9YQ2UudGhlbigoKT0+e24mJm4uYXBwbHkobnVsbCxudWxsKX0pOlpvbmUuY3VycmVudC5zY2hlZHVsZU1pY3JvVGFzaygic2NoZWR1bGVNaWNyb3Rhc2siLG4pfXZhciBfdD1jbGFzc3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6dD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmU9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246aT0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyghMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBHKCExKSx0aGlzLm9uU3RhYmxlPW5ldyBHKCExKSx0aGlzLm9uRXJyb3I9bmV3IEcoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgQXQoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7bGV0IHI9dGhpcztpZihyLl9uZXN0aW5nPTAsci5fb3V0ZXI9ci5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuQXN5bmNTdGFja1RhZ2dpbmdab25lU3BlYyl7bGV0IG89Wm9uZS5Bc3luY1N0YWNrVGFnZ2luZ1pvbmVTcGVjO3IuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IG8oIkFuZ3VsYXIiKSl9Wm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKHIuX2lubmVyPXIuX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSx0JiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihyLl9pbm5lcj1yLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLHIuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbj0haSYmZSxyLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWksci5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsci5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXtsZXQgbj10by5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsdD10by5jYW5jZWxBbmltYXRpb25GcmFtZTtpZih0eXBlb2YgWm9uZTwidSImJm4mJnQpe2xldCBlPW5bWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2UmJihuPWUpO2xldCBpPXRbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2kmJih0PWkpfXJldHVybntuYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6bixuYXRpdmVDYW5jZWxBbmltYXRpb25GcmFtZTp0fX0oKS5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsZnVuY3Rpb24obil7bGV0IHQ9KCk9PnshZnVuY3Rpb24obil7bi5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KG4ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPW4ubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwodG8sKCk9PntuLmZha2VUb3BFdmVudFRhc2t8fChuLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e24ubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLFpMKG4pLG4uaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsdEIobiksbi5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxuLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxaTChuKSl9KG4pfTtuLl9pbm5lcj1uLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGUsaSxyLG8scyxhKT0+e3RyeXtyZXR1cm4gYjcobiksZS5pbnZva2VUYXNrKHIsbyxzLGEpfWZpbmFsbHl7KG4uc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1vLnR5cGV8fG4uc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiZ0KCkseDcobil9fSxvbkludm9rZTooZSxpLHIsbyxzLGEsbCk9Pnt0cnl7cmV0dXJuIGI3KG4pLGUuaW52b2tlKHIsbyxzLGEsbCl9ZmluYWxseXtuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZ0KCkseDcobil9fSxvbkhhc1Rhc2s6KGUsaSxyLG8pPT57ZS5oYXNUYXNrKHIsbyksaT09PXImJigibWljcm9UYXNrIj09by5jaGFuZ2U/KG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPW8ubWljcm9UYXNrLFpMKG4pLHRCKG4pKToibWFjcm9UYXNrIj09by5jaGFuZ2UmJihuLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPW8ubWFjcm9UYXNrKSl9LG9uSGFuZGxlRXJyb3I6KGUsaSxyLG8pPT4oZS5oYW5kbGVFcnJvcihyLG8pLG4ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4ub25FcnJvci5lbWl0KG8pKSwhMSl9KX0ocil9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50LmdldCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIV90LmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBBdCg5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoX3QuaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEF0KDkwOSwhMSl9cnVuKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKHQsZSxpKX1ydW5UYXNrKHQsZSxpLHIpe2xldCBvPXRoaXMuX2lubmVyLHM9by5zY2hlZHVsZUV2ZW50VGFzaygiTmdab25lRXZlbnQ6ICIrcix0LEtDZSxvVCxvVCk7dHJ5e3JldHVybiBvLnJ1blRhc2socyxlLGkpfWZpbmFsbHl7by5jYW5jZWxUYXNrKHMpfX1ydW5HdWFyZGVkKHQsZSxpKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZCh0LGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bih0KX19LEtDZT17fTtmdW5jdGlvbiB0QihuKXtpZigwPT1uLl9uZXN0aW5nJiYhbi5oYXNQZW5kaW5nTWljcm90YXNrcyYmIW4uaXNTdGFibGUpdHJ5e24uX25lc3RpbmcrKyxuLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKG4uX25lc3RpbmctLSwhbi5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7bi5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bi5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e24uaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBaTChuKXtuLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKG4uX2hhc1BlbmRpbmdNaWNyb3Rhc2tzfHwobi5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxuLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1uLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gYjcobil7bi5fbmVzdGluZysrLG4uaXNTdGFibGUmJihuLmlzU3RhYmxlPSExLG4ub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiB4NyhuKXtuLl9uZXN0aW5nLS0sdEIobil9dmFyIGlCLG5CPW5ldyBwZSgiIiksZUM9bmV3IHBlKCIiKSxrVD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLnJlZ2lzdHJ5PWksdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLGlCfHwoZnVuY3Rpb24obil7aUI9bn0ociksci5hZGRUb1dpbmRvdyhpKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksZS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50LmdldCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2RpZFdvcms9ITAsdGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9PntfdC5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCksS0woKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0NvdW50Kz0xLHRoaXMuX2RpZFdvcms9ITAsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3BlbmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSlLTCgoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5ndGg7KXtsZXQgZT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGUudGltZW91dElkKSxlLmRvbmVDYih0aGlzLl9kaWRXb3JrKX10aGlzLl9kaWRXb3JrPSExfSk7ZWxzZXtsZXQgZT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGk9PiFpLnVwZGF0ZUNifHwhaS51cGRhdGVDYihlKXx8KGNsZWFyVGltZW91dChpLnRpbWVvdXRJZCksITEpKSx0aGlzLl9kaWRXb3JrPSEwfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMudGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChlPT4oe3NvdXJjZTplLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmUuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmUuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhlLGkscil7bGV0IG89LTE7aSYmaT4wJiYobz1zZXRUaW1lb3V0KCgpPT57dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIocz0+cy50aW1lb3V0SWQhPT1vKSxlKHRoaXMuX2RpZFdvcmssdGhpcy5nZXRQZW5kaW5nVGFza3MoKSl9LGkpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmUsdGltZW91dElkOm8sdXBkYXRlQ2I6cn0pfXdoZW5TdGFibGUoZSxpLHIpe2lmKHImJiF0aGlzLnRhc2tUcmFja2luZ1pvbmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soZSxpLHIpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGUpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihlLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKX1maW5kUHJvdmlkZXJzKGUsaSxyKXtyZXR1cm5bXX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihfdCksaihGVCksaihlQykpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEZUPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGUsaSl7dGhpcy5fYXBwbGljYXRpb25zLnNldChlLGkpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihlKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGUpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShlKXtyZXR1cm4gdGhpcy5fYXBwbGljYXRpb25zLmdldChlKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5kVGVzdGFiaWxpdHlJblRyZWUoZSxpPSEwKXtyZXR1cm4gaUI/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGUsaSk/P251bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxufSkoKSx4eD1udWxsLHRYPW5ldyBwZSgiQWxsb3dNdWx0aXBsZVRva2VuIiksblg9bmV3IHBlKCJQbGF0Zm9ybURlc3Ryb3lMaXN0ZW5lcnMiKTtmdW5jdGlvbiByQihuLHQsZT1bXSl7bGV0IGk9YFBsYXRmb3JtOiAke3R9YCxyPW5ldyBwZShpKTtyZXR1cm4obz1bXSk9PntsZXQgcz1pWCgpO2lmKCFzfHxzLmluamVjdG9yLmdldCh0WCwhMSkpe2xldCBhPVsuLi5lLC4uLm8se3Byb3ZpZGU6cix1c2VWYWx1ZTohMH1dO24/bihhKTpmdW5jdGlvbihuKXtpZih4eCYmIXh4LmdldCh0WCwhMSkpdGhyb3cgbmV3IEF0KDQwMCwhMSk7eHg9bjtsZXQgdD1uLmdldChyWCk7KGZ1bmN0aW9uKG4pe2xldCB0PW4uZ2V0KGVCLG51bGwpO3QmJnQuZm9yRWFjaChlPT5lKCkpfSkobil9KGZ1bmN0aW9uKG49W10sdCl7cmV0dXJuIFhuLmNyZWF0ZSh7bmFtZTp0LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z1QsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6blgsdXNlVmFsdWU6bmV3IFNldChbKCk9Pnh4PW51bGxdKX0sLi4ubl19KX0oYSxpKSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PWlYKCk7aWYoIXQpdGhyb3cgbmV3IEF0KDQwMSwhMSk7cmV0dXJuIHR9KCl9fWZ1bmN0aW9uIGlYKCl7cmV0dXJuIHh4Py5nZXQoclgpPz9udWxsfXZhciByWD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX2luamVjdG9yPWUsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0KXtsZXQgZTtyZXR1cm4gZT0ibm9vcCI9PT1uP25ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgRyx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEcsdGhpcy5vblN0YWJsZT1uZXcgRyx0aGlzLm9uRXJyb3I9bmV3IEd9cnVuKHQsZSxpKXtyZXR1cm4gdC5hcHBseShlLGkpfXJ1bkd1YXJkZWQodCxlLGkpe3JldHVybiB0LmFwcGx5KGUsaSl9cnVuT3V0c2lkZUFuZ3VsYXIodCl7cmV0dXJuIHQoKX1ydW5UYXNrKHQsZSxpLHIpe3JldHVybiB0LmFwcGx5KGUsaSl9fTooInpvbmUuanMiPT09bj92b2lkIDA6bil8fG5ldyBfdCh0KSxlfShpPy5uZ1pvbmUsZnVuY3Rpb24obil7cmV0dXJue2VuYWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lRXZlbnRDb2FsZXNjaW5nKXx8ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246ISghbnx8IW4ubmdab25lUnVuQ29hbGVzY2luZyl8fCExfX0oaSkpLG89W3twcm92aWRlOl90LHVzZVZhbHVlOnJ9XTtyZXR1cm4gci5ydW4oKCk9PntsZXQgcz1Ybi5jcmVhdGUoe3Byb3ZpZGVyczpvLHBhcmVudDp0aGlzLmluamVjdG9yLG5hbWU6ZS5tb2R1bGVUeXBlLm5hbWV9KSxhPWUuY3JlYXRlKHMpLGw9YS5pbmplY3Rvci5nZXQoUXMsbnVsbCk7aWYoIWwpdGhyb3cgbmV3IEF0KDQwMiwhMSk7cmV0dXJuIHIucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgYz1yLm9uRXJyb3Iuc3Vic2NyaWJlKHtuZXh0OnU9PntsLmhhbmRsZUVycm9yKHUpfX0pO2Eub25EZXN0cm95KCgpPT57TjEodGhpcy5fbW9kdWxlcyxhKSxjLnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uKG4sdCxlKXt0cnl7bGV0IGk9ZSgpO3JldHVybiBuXyhpKT9pLmNhdGNoKHI9Pnt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKHIpKSxyfSk6aX1jYXRjaChpKXt0aHJvdyB0LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uLmhhbmRsZUVycm9yKGkpKSxpfX0obCxyLCgpPT57bGV0IGM9YS5pbmplY3Rvci5nZXQoT1QpO3JldHVybiBjLnJ1bkluaXRpYWxpemVycygpLGMuZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uKG4peyhmdW5jdGlvbihuLHQpe251bGw9PW4mJlQ3KCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIixuLG51bGwsIiE9Iil9KShuKSwic3RyaW5nIj09dHlwZW9mIG4mJihnWT1uLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIikpfShhLmluamVjdG9yLmdldChXZCxuVCl8fG5UKSx0aGlzLl9tb2R1bGVEb0Jvb3RzdHJhcChhKSxhKSl9KX0pfWJvb3RzdHJhcE1vZHVsZShlLGk9W10pe2xldCByPW9YKHt9LGkpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IHFMKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUoaSl9KDAsMCxlKS50aGVuKG89PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShvLHIpKX1fbW9kdWxlRG9Cb290c3RyYXAoZSl7bGV0IGk9ZS5pbmplY3Rvci5nZXQoSXUpO2lmKGUuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApZS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKHI9PmkuYm9vdHN0cmFwKHIpKTtlbHNle2lmKCFlLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IEF0KDQwMywhMSk7ZS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGkpfXRoaXMuX21vZHVsZXMucHVzaChlKX1vbkRlc3Ryb3koZSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGUpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBBdCg0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goaT0+aSgpKTtsZXQgZT10aGlzLl9pbmplY3Rvci5nZXQoblgsbnVsbCk7ZSYmKGUuZm9yRWFjaChpPT5pKCkpLGUuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFhuKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIG9YKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dC5yZWR1Y2Uob1gsbik6ey4uLm4sLi4udH19dmFyIEl1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX3pvbmU9ZSx0aGlzLl9pbmplY3Rvcj1pLHRoaXMuX2V4Y2VwdGlvbkhhbmRsZXI9cix0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fc3RhYmxlPSEwLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy50aWNrKCl9KX19KTtsZXQgbz1uZXcgdW4oYT0+e3RoaXMuX3N0YWJsZT10aGlzLl96b25lLmlzU3RhYmxlJiYhdGhpcy5fem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MsdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EubmV4dCh0aGlzLl9zdGFibGUpLGEuY29tcGxldGUoKX0pfSkscz1uZXcgdW4oYT0+e2xldCBsO3RoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsPXRoaXMuX3pvbmUub25TdGFibGUuc3Vic2NyaWJlKCgpPT57X3QuYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLEtMKCgpPT57IXRoaXMuX3N0YWJsZSYmIXRoaXMuX3pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3MmJiF0aGlzLl96b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5fc3RhYmxlPSEwLGEubmV4dCghMCkpfSl9KX0pO2xldCBjPXRoaXMuX3pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntfdC5hc3NlcnRJbkFuZ3VsYXJab25lKCksdGhpcy5fc3RhYmxlJiYodGhpcy5fc3RhYmxlPSExLHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLm5leHQoITEpfSkpfSk7cmV0dXJuKCk9PntsLnVuc3Vic2NyaWJlKCksYy51bnN1YnNjcmliZSgpfX0pO3RoaXMuaXNTdGFibGU9SnQobyxzLnBpcGUoVHMoKSkpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoZSxpKXtsZXQgcyxyPWUgaW5zdGFuY2VvZiBKMTtpZighdGhpcy5faW5qZWN0b3IuZ2V0KE9UKS5kb25lKXRocm93IXImJlI3KGUpLG5ldyBBdCg0MDUsZmFsc2UpO3M9cj9lOnRoaXMuX2luamVjdG9yLmdldChncykucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHMuY29tcG9uZW50VHlwZSk7bGV0IGE9ZnVuY3Rpb24obil7cmV0dXJuIG4uaXNCb3VuZFRvTW9kdWxlfShzKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KEdwKSxjPXMuY3JlYXRlKFhuLk5VTEwsW10saXx8cy5zZWxlY3RvcixhKSx1PWMubG9jYXRpb24ubmF0aXZlRWxlbWVudCxkPWMuaW5qZWN0b3IuZ2V0KG5CLG51bGwpO3JldHVybiBkPy5yZWdpc3RlckFwcGxpY2F0aW9uKHUpLGMub25EZXN0cm95KCgpPT57dGhpcy5kZXRhY2hWaWV3KGMuaG9zdFZpZXcpLE4xKHRoaXMuY29tcG9uZW50cyxjKSxkPy51bnJlZ2lzdGVyQXBwbGljYXRpb24odSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KGMpLGN9dGljaygpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBBdCgxMDEsITEpO3RyeXt0aGlzLl9ydW5uaW5nVGljaz0hMDtmb3IobGV0IGUgb2YgdGhpcy5fdmlld3MpZS5kZXRlY3RDaGFuZ2VzKCl9Y2F0Y2goZSl7dGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fZXhjZXB0aW9uSGFuZGxlci5oYW5kbGVFcnJvcihlKSl9ZmluYWxseXt0aGlzLl9ydW5uaW5nVGljaz0hMX19YXR0YWNoVmlldyhlKXtsZXQgaT1lO3RoaXMuX3ZpZXdzLnB1c2goaSksaS5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGUpe2xldCBpPWU7TjEodGhpcy5fdmlld3MsaSksaS5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoZSl7dGhpcy5hdHRhY2hWaWV3KGUuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGUpLHRoaXMuX2luamVjdG9yLmdldChHQ2UsW10pLmNvbmNhdCh0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLmZvckVhY2gocj0+cihlKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVzdHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZT0+ZSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1maW5hbGx5e3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGUpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goZSksKCk9Pk4xKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsZSl9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgQXQoNDA2LCExKTtsZXQgZT10aGlzLl9pbmplY3RvcjtlLmRlc3Ryb3kmJiFlLmRlc3Ryb3llZCYmZS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF90KSxqKGpwKSxqKFFzKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gTjEobix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX12YXIgc1g9ITAsYVg9ITE7ZnVuY3Rpb24gdEMoKXtyZXR1cm4gYVg9ITAsc1h9dmFyIG5uPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLl9fTkdfRUxFTUVOVF9JRF9fPXVNZSxufSkoKTtmdW5jdGlvbiB1TWUobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihoMyhuKSYmIWUpe2xldCBpPXFwKG4uaW5kZXgsdCk7cmV0dXJuIG5ldyBRZihpLGkpfXJldHVybiA0NyZuLnR5cGU/bmV3IFFmKHRbMTZdLHQpOm51bGx9KHpvKCkscnQoKSwxNj09KDE2Jm4pKX12YXIgc1Q9Y2xhc3N7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHModCl7cmV0dXJuIHdUKHQpfWNyZWF0ZSh0KXtyZXR1cm4gbmV3ICRMKHQpfX0scE1lPShuLHQpPT50LCRMPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMubGVuZ3RoPTAsdGhpcy5fbGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3VubGlua2VkUmVjb3Jkcz1udWxsLHRoaXMuX3ByZXZpb3VzSXRIZWFkPW51bGwsdGhpcy5faXRIZWFkPW51bGwsdGhpcy5faXRUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD1udWxsLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9tb3Zlc0hlYWQ9bnVsbCx0aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbCx0aGlzLl9yZW1vdmFsc1RhaWw9bnVsbCx0aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsLHRoaXMuX3RyYWNrQnlGbj10fHxwTWV9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5faXRIZWFkO251bGwhPT1lO2U9ZS5fbmV4dCl0KGUpfWZvckVhY2hPcGVyYXRpb24odCl7bGV0IGU9dGhpcy5faXRIZWFkLGk9dGhpcy5fcmVtb3ZhbHNIZWFkLHI9MCxvPW51bGw7Zm9yKDtlfHxpOyl7bGV0IHM9IWl8fGUmJmUuY3VycmVudEluZGV4PE03KGkscixvKT9lOmksYT1NNyhzLHIsbyksbD1zLmN1cnJlbnRJbmRleDtpZihzPT09aSlyLS0saT1pLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGU9ZS5fbmV4dCxudWxsPT1zLnByZXZpb3VzSW5kZXgpcisrO2Vsc2V7b3x8KG89W10pO2xldCBjPWEtcix1PWwtcjtpZihjIT11KXtmb3IobGV0IHA9MDtwPGM7cCsrKXtsZXQgaD1wPG8ubGVuZ3RoP29bcF06b1twXT0wLGY9aCtwO3U8PWYmJmY8YyYmKG9bcF09aCsxKX1vW3MucHJldmlvdXNJbmRleF09dS1jfX1hIT09bCYmdChzLGEsbCl9fWZvckVhY2hQcmV2aW91c0l0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UHJldmlvdXMpdChlKX1mb3JFYWNoQWRkZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0QWRkZWQpdChlKX1mb3JFYWNoTW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX21vdmVzSGVhZDtudWxsIT09ZTtlPWUuX25leHRNb3ZlZCl0KGUpfWZvckVhY2hSZW1vdmVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWU7ZT1lLl9uZXh0UmVtb3ZlZCl0KGUpfWZvckVhY2hJZGVudGl0eUNoYW5nZSh0KXtsZXQgZTtmb3IoZT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dElkZW50aXR5Q2hhbmdlKXQoZSl9ZGlmZih0KXtpZihudWxsPT10JiYodD1bXSksIXdUKHQpKXRocm93IG5ldyBBdCg5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKHQpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sodCl7dGhpcy5fcmVzZXQoKTtsZXQgcixvLHMsZT10aGlzLl9pdEhlYWQsaT0hMTtpZihBcnJheS5pc0FycmF5KHQpKXt0aGlzLmxlbmd0aD10Lmxlbmd0aDtmb3IobGV0IGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPXRbYV0scz10aGlzLl90cmFja0J5Rm4oYSxvKSxudWxsIT09ZSYmT2JqZWN0LmlzKGUudHJhY2tCeUlkLHMpPyhpJiYoZT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihlLG8scyxhKSksT2JqZWN0LmlzKGUuaXRlbSxvKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoZSxvKSk6KGU9dGhpcy5fbWlzbWF0Y2goZSxvLHMsYSksaT0hMCksZT1lLl9uZXh0fWVsc2Ugcj0wLGZ1bmN0aW9uKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuKSlmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKyl0KG5bZV0pO2Vsc2V7bGV0IGksZT1uW01UKCldKCk7Zm9yKDshKGk9ZS5uZXh0KCkpLmRvbmU7KXQoaS52YWx1ZSl9fSh0LGE9PntzPXRoaXMuX3RyYWNrQnlGbihyLGEpLG51bGwhPT1lJiZPYmplY3QuaXMoZS50cmFja0J5SWQscyk/KGkmJihlPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGUsYSxzLHIpKSxPYmplY3QuaXMoZS5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShlLGEpKTooZT10aGlzLl9taXNtYXRjaChlLGEscyxyKSxpPSEwKSxlPWUuX25leHQscisrfSksdGhpcy5sZW5ndGg9cjtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoZSksdGhpcy5jb2xsZWN0aW9uPXQsdGhpcy5pc0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCB0O2Zvcih0PXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09dDt0PXQuX25leHQpdC5fbmV4dFByZXZpb3VzPXQuX25leHQ7Zm9yKHQ9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzSW5kZXg9dC5jdXJyZW50SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHQ9dGhpcy5fbW92ZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dE1vdmVkKXQucHJldmlvdXNJbmRleD10LmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2godCxlLGkscil7bGV0IG87cmV0dXJuIG51bGw9PT10P289dGhpcy5faXRUYWlsOihvPXQuX3ByZXYsdGhpcy5fcmVtb3ZlKHQpKSxudWxsIT09KHQ9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoaSxudWxsKSk/KE9iamVjdC5pcyh0Lml0ZW0sZSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKHQsZSksdGhpcy5fcmVpbnNlcnRBZnRlcih0LG8scikpOm51bGwhPT0odD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGkscikpPyhPYmplY3QuaXModC5pdGVtLGUpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZSh0LGUpLHRoaXMuX21vdmVBZnRlcih0LG8scikpOnQ9dGhpcy5fYWRkQWZ0ZXIobmV3IGUzKGUsaSksbyxyKSx0fV92ZXJpZnlSZWluc2VydGlvbih0LGUsaSxyKXtsZXQgbz1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChpLG51bGwpO3JldHVybiBudWxsIT09bz90PXRoaXMuX3JlaW5zZXJ0QWZ0ZXIobyx0Ll9wcmV2LHIpOnQuY3VycmVudEluZGV4IT1yJiYodC5jdXJyZW50SW5kZXg9cix0aGlzLl9hZGRUb01vdmVzKHQscikpLHR9X3RydW5jYXRlKHQpe2Zvcig7bnVsbCE9PXQ7KXtsZXQgZT10Ll9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKSx0PWV9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIodCxlLGkpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUodCk7bGV0IHI9dC5fcHJldlJlbW92ZWQsbz10Ll9uZXh0UmVtb3ZlZDtyZXR1cm4gbnVsbD09PXI/dGhpcy5fcmVtb3ZhbHNIZWFkPW86ci5fbmV4dFJlbW92ZWQ9byxudWxsPT09bz90aGlzLl9yZW1vdmFsc1RhaWw9cjpvLl9wcmV2UmVtb3ZlZD1yLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fbW92ZUFmdGVyKHQsZSxpKXtyZXR1cm4gdGhpcy5fdW5saW5rKHQpLHRoaXMuX2luc2VydEFmdGVyKHQsZSxpKSx0aGlzLl9hZGRUb01vdmVzKHQsaSksdH1fYWRkQWZ0ZXIodCxlLGkpe3JldHVybiB0aGlzLl9pbnNlcnRBZnRlcih0LGUsaSksdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsPT09dGhpcy5fYWRkaXRpb25zVGFpbD90aGlzLl9hZGRpdGlvbnNIZWFkPXQ6dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPXQsdH1faW5zZXJ0QWZ0ZXIodCxlLGkpe2xldCByPW51bGw9PT1lP3RoaXMuX2l0SGVhZDplLl9uZXh0O3JldHVybiB0Ll9uZXh0PXIsdC5fcHJldj1lLG51bGw9PT1yP3RoaXMuX2l0VGFpbD10OnIuX3ByZXY9dCxudWxsPT09ZT90aGlzLl9pdEhlYWQ9dDplLl9uZXh0PXQsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBhVCksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQodCksdC5jdXJyZW50SW5kZXg9aSx0fV9yZW1vdmUodCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKHQpKX1fdW5saW5rKHQpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZSh0KTtsZXQgZT10Ll9wcmV2LGk9dC5fbmV4dDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faXRIZWFkPWk6ZS5fbmV4dD1pLG51bGw9PT1pP3RoaXMuX2l0VGFpbD1lOmkuX3ByZXY9ZSx0fV9hZGRUb01vdmVzKHQsZSl7cmV0dXJuIHQucHJldmlvdXNJbmRleD09PWV8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9dDp0aGlzLl9tb3Zlc1RhaWwuX25leHRNb3ZlZD10KSx0fV9hZGRUb1JlbW92YWxzKHQpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBhVCksdGhpcy5fdW5saW5rZWRSZWNvcmRzLnB1dCh0KSx0LmN1cnJlbnRJbmRleD1udWxsLHQuX25leHRSZW1vdmVkPW51bGwsbnVsbD09PXRoaXMuX3JlbW92YWxzVGFpbD8odGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzSGVhZD10LHQuX3ByZXZSZW1vdmVkPW51bGwpOih0Ll9wcmV2UmVtb3ZlZD10aGlzLl9yZW1vdmFsc1RhaWwsdGhpcy5fcmVtb3ZhbHNUYWlsPXRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9dCksdH1fYWRkSWRlbnRpdHlDaGFuZ2UodCxlKXtyZXR1cm4gdC5pdGVtPWUsdGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsPT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD90aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkPXQ6dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbC5fbmV4dElkZW50aXR5Q2hhbmdlPXQsdH19LGUzPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5pdGVtPXQsdGhpcy50cmFja0J5SWQ9ZSx0aGlzLmN1cnJlbnRJbmRleD1udWxsLHRoaXMucHJldmlvdXNJbmRleD1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldkR1cD1udWxsLHRoaXMuX25leHREdXA9bnVsbCx0aGlzLl9wcmV2UmVtb3ZlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dE1vdmVkPW51bGwsdGhpcy5fbmV4dElkZW50aXR5Q2hhbmdlPW51bGx9fSxhVD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9cHV0KHQpe2xldCBlPXQudHJhY2tCeUlkLGk9dGhpcy5tYXAuZ2V0KGUpO2l8fChpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2hlYWQ9bnVsbCx0aGlzLl90YWlsPW51bGx9YWRkKHQpe251bGw9PT10aGlzLl9oZWFkPyh0aGlzLl9oZWFkPXRoaXMuX3RhaWw9dCx0Ll9uZXh0RHVwPW51bGwsdC5fcHJldkR1cD1udWxsKToodGhpcy5fdGFpbC5fbmV4dER1cD10LHQuX3ByZXZEdXA9dGhpcy5fdGFpbCx0Ll9uZXh0RHVwPW51bGwsdGhpcy5fdGFpbD10KX1nZXQodCxlKXtsZXQgaTtmb3IoaT10aGlzLl9oZWFkO251bGwhPT1pO2k9aS5fbmV4dER1cClpZigobnVsbD09PWV8fGU8PWkuY3VycmVudEluZGV4KSYmT2JqZWN0LmlzKGkudHJhY2tCeUlkLHQpKXJldHVybiBpO3JldHVybiBudWxsfXJlbW92ZSh0KXtsZXQgZT10Ll9wcmV2RHVwLGk9dC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWU/dGhpcy5faGVhZD1pOmUuX25leHREdXA9aSxudWxsPT09aT90aGlzLl90YWlsPWU6aS5fcHJldkR1cD1lLG51bGw9PT10aGlzLl9oZWFkfX0sdGhpcy5tYXAuc2V0KGUsaSkpLGkuYWRkKHQpfWdldCh0LGUpe2xldCByPXRoaXMubWFwLmdldCh0KTtyZXR1cm4gcj9yLmdldCh0LGUpOm51bGx9cmVtb3ZlKHQpe2xldCBlPXQudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoZSkucmVtb3ZlKHQpJiZ0aGlzLm1hcC5kZWxldGUoZSksdH1nZXQgaXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fTtmdW5jdGlvbiBNNyhuLHQsZSl7bGV0IGk9bi5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1pKXJldHVybiBpO2xldCByPTA7cmV0dXJuIGUmJmk8ZS5sZW5ndGgmJihyPWVbaV0pLGkrdCtyfXZhciBsVD1jbGFzc3tjb25zdHJ1Y3Rvcigpe31zdXBwb3J0cyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1hcHx8WTModCl9Y3JlYXRlKCl7cmV0dXJuIG5ldyBuM319LG4zPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0odCl7bGV0IGU7Zm9yKGU9dGhpcy5fbWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHQpdChlKX1mb3JFYWNoUHJldmlvdXNJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09ZTtlPWUuX25leHRQcmV2aW91cyl0KGUpfWZvckVhY2hDaGFuZ2VkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09ZTtlPWUuX25leHRDaGFuZ2VkKXQoZSl9Zm9yRWFjaEFkZGVkSXRlbSh0KXtsZXQgZTtmb3IoZT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1lO2U9ZS5fbmV4dEFkZGVkKXQoZSl9Zm9yRWFjaFJlbW92ZWRJdGVtKHQpe2xldCBlO2ZvcihlPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09ZTtlPWUuX25leHRSZW1vdmVkKXQoZSl9ZGlmZih0KXtpZih0KXtpZighKHQgaW5zdGFuY2VvZiBNYXB8fFkzKHQpKSl0aHJvdyBuZXcgQXQoOTAwLCExKX1lbHNlIHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayh0KT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKHQpe3RoaXMuX3Jlc2V0KCk7bGV0IGU9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2godCwoaSxyKT0+e2lmKGUmJmUua2V5PT09cil0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhlLGkpLHRoaXMuX2FwcGVuZEFmdGVyPWUsZT1lLl9uZXh0O2Vsc2V7bGV0IG89dGhpcy5fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkocixpKTtlPXRoaXMuX2luc2VydEJlZm9yZU9yQXBwZW5kKGUsbyl9fSksZSl7ZS5fcHJldiYmKGUuX3ByZXYuX25leHQ9bnVsbCksdGhpcy5fcmVtb3ZhbHNIZWFkPWU7Zm9yKGxldCBpPWU7bnVsbCE9PWk7aT1pLl9uZXh0UmVtb3ZlZClpPT09dGhpcy5fbWFwSGVhZCYmKHRoaXMuX21hcEhlYWQ9bnVsbCksdGhpcy5fcmVjb3Jkcy5kZWxldGUoaS5rZXkpLGkuX25leHRSZW1vdmVkPWkuX25leHQsaS5wcmV2aW91c1ZhbHVlPWkuY3VycmVudFZhbHVlLGkuY3VycmVudFZhbHVlPW51bGwsaS5fcHJldj1udWxsLGkuX25leHQ9bnVsbH1yZXR1cm4gdGhpcy5fY2hhbmdlc1RhaWwmJih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bnVsbCksdGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSx0aGlzLmlzRGlydHl9X2luc2VydEJlZm9yZU9yQXBwZW5kKHQsZSl7aWYodCl7bGV0IGk9dC5fcHJldjtyZXR1cm4gZS5fbmV4dD10LGUuX3ByZXY9aSx0Ll9wcmV2PWUsaSYmKGkuX25leHQ9ZSksdD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWUpLHRoaXMuX2FwcGVuZEFmdGVyPXQsdH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWUsZS5fcHJldj10aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1lLHRoaXMuX2FwcGVuZEFmdGVyPWUsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkodCxlKXtpZih0aGlzLl9yZWNvcmRzLmhhcyh0KSl7bGV0IHI9dGhpcy5fcmVjb3Jkcy5nZXQodCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMocixlKTtsZXQgbz1yLl9wcmV2LHM9ci5fbmV4dDtyZXR1cm4gbyYmKG8uX25leHQ9cykscyYmKHMuX3ByZXY9byksci5fbmV4dD1udWxsLHIuX3ByZXY9bnVsbCxyfWxldCBpPW5ldyBpMyh0KTtyZXR1cm4gdGhpcy5fcmVjb3Jkcy5zZXQodCxpKSxpLmN1cnJlbnRWYWx1ZT1lLHRoaXMuX2FkZFRvQWRkaXRpb25zKGkpLGl9X3Jlc2V0KCl7aWYodGhpcy5pc0RpcnR5KXtsZXQgdDtmb3IodGhpcy5fcHJldmlvdXNNYXBIZWFkPXRoaXMuX21hcEhlYWQsdD10aGlzLl9wcmV2aW91c01hcEhlYWQ7bnVsbCE9PXQ7dD10Ll9uZXh0KXQuX25leHRQcmV2aW91cz10Ll9uZXh0O2Zvcih0PXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT10O3Q9dC5fbmV4dENoYW5nZWQpdC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlO2Zvcih0PXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9dDt0PXQuX25leHRBZGRlZCl0LnByZXZpb3VzVmFsdWU9dC5jdXJyZW50VmFsdWU7dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9bnVsbH19X21heWJlQWRkVG9DaGFuZ2VzKHQsZSl7T2JqZWN0LmlzKGUsdC5jdXJyZW50VmFsdWUpfHwodC5wcmV2aW91c1ZhbHVlPXQuY3VycmVudFZhbHVlLHQuY3VycmVudFZhbHVlPWUsdGhpcy5fYWRkVG9DaGFuZ2VzKHQpKX1fYWRkVG9BZGRpdGlvbnModCl7bnVsbD09PXRoaXMuX2FkZGl0aW9uc0hlYWQ/dGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPXQ6KHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD10LHRoaXMuX2FkZGl0aW9uc1RhaWw9dCl9X2FkZFRvQ2hhbmdlcyh0KXtudWxsPT09dGhpcy5fY2hhbmdlc0hlYWQ/dGhpcy5fY2hhbmdlc0hlYWQ9dGhpcy5fY2hhbmdlc1RhaWw9dDoodGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPXQsdGhpcy5fY2hhbmdlc1RhaWw9dCl9X2ZvckVhY2godCxlKXt0IGluc3RhbmNlb2YgTWFwP3QuZm9yRWFjaChlKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PmUodFtpXSxpKSl9fSxpMz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmtleT10LHRoaXMucHJldmlvdXNWYWx1ZT1udWxsLHRoaXMuY3VycmVudFZhbHVlPW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXY9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRDaGFuZ2VkPW51bGx9fTtmdW5jdGlvbiB3Nygpe3JldHVybiBuZXcga2MoW25ldyBzVF0pfXZhciBrYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKG51bGwhPWkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHx3NygpKSxkZXBzOltbbixuZXcgdGwsbmV3IG5zXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihudWxsIT1pKXJldHVybiBpO3Rocm93IG5ldyBBdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6dzd9KSxufSkoKTtmdW5jdGlvbiBTNygpe3JldHVybiBuZXcgbkMoW25ldyBsVF0pfXZhciBuQz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZmFjdG9yaWVzPWV9c3RhdGljIGNyZWF0ZShlLGkpe2lmKGkpe2xldCByPWkuZmFjdG9yaWVzLnNsaWNlKCk7ZT1lLmNvbmNhdChyKX1yZXR1cm4gbmV3IG4oZSl9c3RhdGljIGV4dGVuZChlKXtyZXR1cm57cHJvdmlkZTpuLHVzZUZhY3Rvcnk6aT0+bi5jcmVhdGUoZSxpfHxTNygpKSxkZXBzOltbbixuZXcgdGwsbmV3IG5zXV19fWZpbmQoZSl7bGV0IGk9dGhpcy5mYWN0b3JpZXMuZmluZChyPT5yLnN1cHBvcnRzKGUpKTtpZihpKXJldHVybiBpO3Rocm93IG5ldyBBdCg5MDEsITEpfX1yZXR1cm4gbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6Uzd9KSxufSkoKSxoTWU9W25ldyBsVF0sZk1lPVtuZXcgc1RdLGNYPShuZXcga2MoZk1lKSxuZXcgbkMoaE1lKSxyQihudWxsLCJjb3JlIixbXSkpLHVYPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEl1KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIE5UKG4pe3JldHVybiJib29sZWFuIj09dHlwZW9mIG4/bjpudWxsIT1uJiYiZmFsc2UiIT09bn12YXIgV2w9KCgpPT57cmV0dXJuKG49V2x8fChXbD17fSkpW24uUkFXX1RFWFQ9MF09IlJBV19URVhUIixuW24uRVNDQVBBQkxFX1JBV19URVhUPTFdPSJFU0NBUEFCTEVfUkFXX1RFWFQiLG5bbi5QQVJTQUJMRV9EQVRBPTJdPSJQQVJTQUJMRV9EQVRBIixXbDt2YXIgbn0pKCk7ZnVuY3Rpb24gS2Qobil7aWYoIjoiIT1uWzBdKXJldHVybltudWxsLG5dO2xldCB0PW4uaW5kZXhPZigiOiIsMSk7aWYoLTE9PT10KXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZm9ybWF0ICIke259IiBleHBlY3RpbmcgIjpuYW1lc3BhY2U6bmFtZSJgKTtyZXR1cm5bbi5zbGljZSgxLHQpLG4uc2xpY2UodCsxKV19ZnVuY3Rpb24gQ0Iobil7cmV0dXJuIm5nLWNvbnRhaW5lciI9PT1LZChuKVsxXX1mdW5jdGlvbiBNQihuKXtyZXR1cm4ibmctY29udGVudCI9PT1LZChuKVsxXX1mdW5jdGlvbiBkWChuKXtyZXR1cm4gbnVsbD09PW4/bnVsbDpLZChuKVswXX1mdW5jdGlvbiB3QihuLHQpe3JldHVybiBuP2A6JHtufToke3R9YDp0fXZhciBwWCxMVCxlaT1jbGFzc3tjb25zdHJ1Y3Rvcih7Y2xvc2VkQnlDaGlsZHJlbjp0LGltcGxpY2l0TmFtZXNwYWNlUHJlZml4OmUsY29udGVudFR5cGU6aT1XbC5QQVJTQUJMRV9EQVRBLGNsb3NlZEJ5UGFyZW50OnI9ITEsaXNWb2lkOm89ITEsaWdub3JlRmlyc3RMZjpzPSExLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTphPSExfT17fSl7dGhpcy5jbG9zZWRCeUNoaWxkcmVuPXt9LHRoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5jYW5TZWxmQ2xvc2U9ITEsdCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGw9PnRoaXMuY2xvc2VkQnlDaGlsZHJlbltsXT0hMCksdGhpcy5pc1ZvaWQ9byx0aGlzLmNsb3NlZEJ5UGFyZW50PXJ8fG8sdGhpcy5pbXBsaWNpdE5hbWVzcGFjZVByZWZpeD1lfHxudWxsLHRoaXMuY29udGVudFR5cGU9aSx0aGlzLmlnbm9yZUZpcnN0TGY9cyx0aGlzLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZT1hfWlzQ2xvc2VkQnlDaGlsZCh0KXtyZXR1cm4gdGhpcy5pc1ZvaWR8fHQudG9Mb3dlckNhc2UoKWluIHRoaXMuY2xvc2VkQnlDaGlsZHJlbn1nZXRDb250ZW50VHlwZSh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHRoaXMuY29udGVudFR5cGU/KHZvaWQgMD09PXQ/dm9pZCAwOnRoaXMuY29udGVudFR5cGVbdF0pPz90aGlzLmNvbnRlbnRUeXBlLmRlZmF1bHQ6dGhpcy5jb250ZW50VHlwZX19O2Z1bmN0aW9uIEZWKG4pe3JldHVybiBMVHx8KHBYPW5ldyBlaSxMVD17YmFzZTpuZXcgZWkoe2lzVm9pZDohMH0pLG1ldGE6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxhcmVhOm5ldyBlaSh7aXNWb2lkOiEwfSksZW1iZWQ6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxsaW5rOm5ldyBlaSh7aXNWb2lkOiEwfSksaW1nOm5ldyBlaSh7aXNWb2lkOiEwfSksaW5wdXQ6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxwYXJhbTpuZXcgZWkoe2lzVm9pZDohMH0pLGhyOm5ldyBlaSh7aXNWb2lkOiEwfSksYnI6bmV3IGVpKHtpc1ZvaWQ6ITB9KSxzb3VyY2U6bmV3IGVpKHtpc1ZvaWQ6ITB9KSx0cmFjazpuZXcgZWkoe2lzVm9pZDohMH0pLHdicjpuZXcgZWkoe2lzVm9pZDohMH0pLHA6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsiYWRkcmVzcyIsImFydGljbGUiLCJhc2lkZSIsImJsb2NrcXVvdGUiLCJkaXYiLCJkbCIsImZpZWxkc2V0IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWRlciIsImhncm91cCIsImhyIiwibWFpbiIsIm5hdiIsIm9sIiwicCIsInByZSIsInNlY3Rpb24iLCJ0YWJsZSIsInVsIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0aGVhZDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il19KSx0Ym9keTpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSIsInRmb290Il0sY2xvc2VkQnlQYXJlbnQ6ITB9KSx0Zm9vdDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJ0Ym9keSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksdHI6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsidHIiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRkOm5ldyBlaSh7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLHRoOm5ldyBlaSh7Y2xvc2VkQnlDaGlsZHJlbjpbInRkIiwidGgiXSxjbG9zZWRCeVBhcmVudDohMH0pLGNvbDpuZXcgZWkoe2lzVm9pZDohMH0pLHN2ZzpuZXcgZWkoe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmcifSksZm9yZWlnbk9iamVjdDpuZXcgZWkoe2ltcGxpY2l0TmFtZXNwYWNlUHJlZml4OiJzdmciLHByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZTohMH0pLG1hdGg6bmV3IGVpKHtpbXBsaWNpdE5hbWVzcGFjZVByZWZpeDoibWF0aCJ9KSxsaTpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJsaSJdLGNsb3NlZEJ5UGFyZW50OiEwfSksZHQ6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdfSksZGQ6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsiZHQiLCJkZCJdLGNsb3NlZEJ5UGFyZW50OiEwfSkscmI6bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsicmIiLCJydCIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxydDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHJ0YzpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0YyIsInJwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxycDpuZXcgZWkoe2Nsb3NlZEJ5Q2hpbGRyZW46WyJyYiIsInJ0IiwicnRjIiwicnAiXSxjbG9zZWRCeVBhcmVudDohMH0pLG9wdGdyb3VwOm5ldyBlaSh7Y2xvc2VkQnlDaGlsZHJlbjpbIm9wdGdyb3VwIl0sY2xvc2VkQnlQYXJlbnQ6ITB9KSxvcHRpb246bmV3IGVpKHtjbG9zZWRCeUNoaWxkcmVuOlsib3B0aW9uIiwib3B0Z3JvdXAiXSxjbG9zZWRCeVBhcmVudDohMH0pLHByZTpuZXcgZWkoe2lnbm9yZUZpcnN0TGY6ITB9KSxsaXN0aW5nOm5ldyBlaSh7aWdub3JlRmlyc3RMZjohMH0pLHN0eWxlOm5ldyBlaSh7Y29udGVudFR5cGU6V2wuUkFXX1RFWFR9KSxzY3JpcHQ6bmV3IGVpKHtjb250ZW50VHlwZTpXbC5SQVdfVEVYVH0pLHRpdGxlOm5ldyBlaSh7Y29udGVudFR5cGU6e2RlZmF1bHQ6V2wuRVNDQVBBQkxFX1JBV19URVhULHN2ZzpXbC5QQVJTQUJMRV9EQVRBfX0pLHRleHRhcmVhOm5ldyBlaSh7Y29udGVudFR5cGU6V2wuRVNDQVBBQkxFX1JBV19URVhULGlnbm9yZUZpcnN0TGY6ITB9KX0pLExUW25dPz9MVFtuLnRvTG93ZXJDYXNlKCldPz9wWH12YXIgaFg9bmV3IFJlZ0V4cCgiKFxcOm5vdFxcKCl8KChbXFwuXFwjXT8pWy1cXHddKyl8KD86XFxbKFstLlxcdypcXFxcJF0rKSg/Oj0oW1wiJ10/KShbXlxcXVwiJ10qKVxcNSk/XFxdKXwoXFwpKXwoXFxzKixcXHMqKSIsImciKSxaZD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuZWxlbWVudD1udWxsLHRoaXMuY2xhc3NOYW1lcz1bXSx0aGlzLmF0dHJzPVtdLHRoaXMubm90U2VsZWN0b3JzPVtdfXN0YXRpYyBwYXJzZSh0KXtsZXQgbyxlPVtdLGk9KGwsYyk9PntjLm5vdFNlbGVjdG9ycy5sZW5ndGg+MCYmIWMuZWxlbWVudCYmMD09Yy5jbGFzc05hbWVzLmxlbmd0aCYmMD09Yy5hdHRycy5sZW5ndGgmJihjLmVsZW1lbnQ9IioiKSxsLnB1c2goYyl9LHI9bmV3IFpkLHM9cixhPSExO2ZvcihoWC5sYXN0SW5kZXg9MDtvPWhYLmV4ZWModCk7KXtpZihvWzFdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTmVzdGluZyA6bm90IGluIGEgc2VsZWN0b3IgaXMgbm90IGFsbG93ZWQiKTthPSEwLHM9bmV3IFpkLHIubm90U2VsZWN0b3JzLnB1c2gocyl9bGV0IGw9b1syXTtpZihsKXtsZXQgdT1vWzNdOyIjIj09PXU/cy5hZGRBdHRyaWJ1dGUoImlkIixsLnNsaWNlKDEpKToiLiI9PT11P3MuYWRkQ2xhc3NOYW1lKGwuc2xpY2UoMSkpOnMuc2V0RWxlbWVudChsKX1sZXQgYz1vWzRdO2lmKGMmJnMuYWRkQXR0cmlidXRlKHMudW5lc2NhcGVBdHRyaWJ1dGUoYyksb1s2XSksb1s3XSYmKGE9ITEscz1yKSxvWzhdKXtpZihhKXRocm93IG5ldyBFcnJvcigiTXVsdGlwbGUgc2VsZWN0b3JzIGluIDpub3QgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpKGUscikscj1zPW5ldyBaZH19cmV0dXJuIGkoZSxyKSxlfXVuZXNjYXBlQXR0cmlidXRlKHQpe2xldCBlPSIiLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBvPXQuY2hhckF0KHIpO2lmKCJcXCIhPT1vKXtpZigiJCI9PT1vJiYhaSl0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGluIGF0dHJpYnV0ZSBzZWxlY3RvciAiJHt0fSIuIFVuZXNjYXBlZCAiJCIgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGVzY2FwZSB3aXRoICJcXCQiLmApO2k9ITEsZSs9b31lbHNlIGk9ITB9cmV0dXJuIGV9ZXNjYXBlQXR0cmlidXRlKHQpe3JldHVybiB0LnJlcGxhY2UoL1xcL2csIlxcXFwiKS5yZXBsYWNlKC9cJC9nLCJcXCQiKX1pc0VsZW1lbnRTZWxlY3Rvcigpe3JldHVybiB0aGlzLmhhc0VsZW1lbnRTZWxlY3RvcigpJiYwPT10aGlzLmNsYXNzTmFtZXMubGVuZ3RoJiYwPT10aGlzLmF0dHJzLmxlbmd0aCYmMD09PXRoaXMubm90U2VsZWN0b3JzLmxlbmd0aH1oYXNFbGVtZW50U2VsZWN0b3IoKXtyZXR1cm4hIXRoaXMuZWxlbWVudH1zZXRFbGVtZW50KHQ9bnVsbCl7dGhpcy5lbGVtZW50PXR9Z2V0TWF0Y2hpbmdFbGVtZW50VGVtcGxhdGUoKXtsZXQgdD10aGlzLmVsZW1lbnR8fCJkaXYiLGU9dGhpcy5jbGFzc05hbWVzLmxlbmd0aD4wP2AgY2xhc3M9IiR7dGhpcy5jbGFzc05hbWVzLmpvaW4oIiAiKX0iYDoiIixpPSIiO2ZvcihsZXQgcj0wO3I8dGhpcy5hdHRycy5sZW5ndGg7cis9MilpKz1gICR7dGhpcy5hdHRyc1tyXX0keyIiIT09dGhpcy5hdHRyc1tyKzFdP2A9IiR7dGhpcy5hdHRyc1tyKzFdfSJgOiIifWA7cmV0dXJuIEZWKHQpLmlzVm9pZD9gPCR7dH0ke2V9JHtpfS8+YDpgPCR7dH0ke2V9JHtpfT48LyR7dH0+YH1nZXRBdHRycygpe2xldCB0PVtdO3JldHVybiB0aGlzLmNsYXNzTmFtZXMubGVuZ3RoPjAmJnQucHVzaCgiY2xhc3MiLHRoaXMuY2xhc3NOYW1lcy5qb2luKCIgIikpLHQuY29uY2F0KHRoaXMuYXR0cnMpfWFkZEF0dHJpYnV0ZSh0LGU9IiIpe3RoaXMuYXR0cnMucHVzaCh0LGUmJmUudG9Mb3dlckNhc2UoKXx8IiIpfWFkZENsYXNzTmFtZSh0KXt0aGlzLmNsYXNzTmFtZXMucHVzaCh0LnRvTG93ZXJDYXNlKCkpfXRvU3RyaW5nKCl7bGV0IHQ9dGhpcy5lbGVtZW50fHwiIjtpZih0aGlzLmNsYXNzTmFtZXMmJnRoaXMuY2xhc3NOYW1lcy5mb3JFYWNoKGU9PnQrPWAuJHtlfWApLHRoaXMuYXR0cnMpZm9yKGxldCBlPTA7ZTx0aGlzLmF0dHJzLmxlbmd0aDtlKz0yKXtsZXQgaT10aGlzLmVzY2FwZUF0dHJpYnV0ZSh0aGlzLmF0dHJzW2VdKSxyPXRoaXMuYXR0cnNbZSsxXTt0Kz1gWyR7aX0ke3I/Ij0iK3I6IiJ9XWB9cmV0dXJuIHRoaXMubm90U2VsZWN0b3JzLmZvckVhY2goZT0+dCs9YDpub3QoJHtlfSlgKSx0fX0scWQ9KCgpPT57cmV0dXJuKG49cWR8fChxZD17fSkpW24uRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixuW24uTm9uZT0yXT0iTm9uZSIsbltuLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixxZDt2YXIgbn0pKCksY0M9KCgpPT57cmV0dXJuKG49Y0N8fChjQz17fSkpW24uT25QdXNoPTBdPSJPblB1c2giLG5bbi5EZWZhdWx0PTFdPSJEZWZhdWx0IixjQzt2YXIgbn0pKCksaW89KCgpPT57cmV0dXJuKG49aW98fChpbz17fSkpW24uTk9ORT0wXT0iTk9ORSIsbltuLkhUTUw9MV09IkhUTUwiLG5bbi5TVFlMRT0yXT0iU1RZTEUiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLlVSTD00XT0iVVJMIixuW24uUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLGlvO3ZhciBufSkoKTtmdW5jdGlvbiB2TWUobil7bGV0IHQ9ZnVuY3Rpb24obil7bGV0IHQ9bi5jbGFzc05hbWVzJiZuLmNsYXNzTmFtZXMubGVuZ3RoP1s4LC4uLm4uY2xhc3NOYW1lc106W107cmV0dXJuW24uZWxlbWVudCYmIioiIT09bi5lbGVtZW50P24uZWxlbWVudDoiIiwuLi5uLmF0dHJzLC4uLnRdfShuKSxlPW4ubm90U2VsZWN0b3JzJiZuLm5vdFNlbGVjdG9ycy5sZW5ndGg/bi5ub3RTZWxlY3RvcnMubWFwKGk9PmZ1bmN0aW9uKG4pe2xldCB0PW4uY2xhc3NOYW1lcyYmbi5jbGFzc05hbWVzLmxlbmd0aD9bOCwuLi5uLmNsYXNzTmFtZXNdOltdO3JldHVybiBuLmVsZW1lbnQ/WzUsbi5lbGVtZW50LC4uLm4uYXR0cnMsLi4udF06bi5hdHRycy5sZW5ndGg/WzMsLi4ubi5hdHRycywuLi50XTpuLmNsYXNzTmFtZXMmJm4uY2xhc3NOYW1lcy5sZW5ndGg/WzksLi4ubi5jbGFzc05hbWVzXTpbXX0oaSkpOltdO3JldHVybiB0LmNvbmNhdCguLi5lKX1mdW5jdGlvbiBOVihuKXtyZXR1cm4gbj9aZC5wYXJzZShuKS5tYXAodk1lKTpbXX12YXIgeU1lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBPUShuLHQsZSl7bGV0IGk9bi5pbmRleE9mKHQpO3JldHVybi0xPT1pP2U6W24uc2xpY2UoMCxpKS50cmltKCksbi5zbGljZShpKzEpLnRyaW0oKV19ZnVuY3Rpb24gUVQobil7dGhyb3cgbmV3IEVycm9yKGBJbnRlcm5hbCBFcnJvcjogJHtufWApfWZ1bmN0aW9uIExWKG4pe2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1uLmNoYXJDb2RlQXQoZSk7aWYoaT49NTUyOTYmJmk8PTU2MzE5JiZuLmxlbmd0aD5lKzEpe2xldCByPW4uY2hhckNvZGVBdChlKzEpO3I+PTU2MzIwJiZyPD01NzM0MyYmKGUrKyxpPShpLTU1Mjk2PDwxMCkrci01NjMyMCs2NTUzNil9aTw9MTI3P3QucHVzaChpKTppPD0yMDQ3P3QucHVzaChpPj42JjMxfDE5Miw2MyZpfDEyOCk6aTw9NjU1MzU/dC5wdXNoKGk+PjEyfDIyNCxpPj42JjYzfDEyOCw2MyZpfDEyOCk6aTw9MjA5NzE1MSYmdC5wdXNoKGk+PjE4Jjd8MjQwLGk+PjEyJjYzfDEyOCxpPj42JjYzfDEyOCw2MyZpfDEyOCl9cmV0dXJuIHR9ZnVuY3Rpb24ga1Eobil7aWYoInN0cmluZyI9PXR5cGVvZiBuKXJldHVybiBuO2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIlsiK24ubWFwKGtRKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1uKXJldHVybiIiK247aWYobi5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtuLm92ZXJyaWRkZW5OYW1lfWA7aWYobi5uYW1lKXJldHVybmAke24ubmFtZX1gO2lmKCFuLnRvU3RyaW5nKXJldHVybiJvYmplY3QiO2xldCB0PW4udG9TdHJpbmcoKTtpZihudWxsPT10KXJldHVybiIiK3Q7bGV0IGU9dC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09ZT90OnQuc3Vic3RyaW5nKDAsZSl9dmFyIHBfPSgoKT0+dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksbmg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kaWdpdHM9dH1zdGF0aWMgemVybygpe3JldHVybiBuZXcgbmgoWzBdKX1zdGF0aWMgb25lKCl7cmV0dXJuIG5ldyBuaChbMV0pfWNsb25lKCl7cmV0dXJuIG5ldyBuaCh0aGlzLmRpZ2l0cy5zbGljZSgpKX1hZGQodCl7bGV0IGU9dGhpcy5jbG9uZSgpO3JldHVybiBlLmFkZFRvU2VsZih0KSxlfWFkZFRvU2VsZih0KXtsZXQgZT1NYXRoLm1heCh0aGlzLmRpZ2l0cy5sZW5ndGgsdC5kaWdpdHMubGVuZ3RoKSxpPTA7Zm9yKGxldCByPTA7cjxlO3IrKyl7bGV0IG89aTtyPHRoaXMuZGlnaXRzLmxlbmd0aCYmKG8rPXRoaXMuZGlnaXRzW3JdKSxyPHQuZGlnaXRzLmxlbmd0aCYmKG8rPXQuZGlnaXRzW3JdKSxvPj0xMD8odGhpcy5kaWdpdHNbcl09by0xMCxpPTEpOih0aGlzLmRpZ2l0c1tyXT1vLGk9MCl9aT4wJiYodGhpcy5kaWdpdHNbZV09MSl9dG9TdHJpbmcoKXtsZXQgdD0iIjtmb3IobGV0IGU9dGhpcy5kaWdpdHMubGVuZ3RoLTE7ZT49MDtlLS0pdCs9dGhpcy5kaWdpdHNbZV07cmV0dXJuIHR9fSxLVD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvd2VyT2ZUd29zPVt0XX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnBvd2VyT2ZUd29zWzBdfW11bHRpcGx5QnkodCl7bGV0IGU9bmguemVybygpO3JldHVybiB0aGlzLm11bHRpcGx5QnlBbmRBZGRUbyh0LGUpLGV9bXVsdGlwbHlCeUFuZEFkZFRvKHQsZSl7Zm9yKGxldCBpPTA7MCE9PXQ7dD4+Pj0xLGkrKylpZigxJnQpe2xldCByPXRoaXMuZ2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byhpKTtlLmFkZFRvU2VsZihyKX19Z2V0TXVsdGlwbGllZEJ5UG93ZXJPZlR3byh0KXtmb3IobGV0IGU9dGhpcy5wb3dlck9mVHdvcy5sZW5ndGg7ZTw9dDtlKyspe2xldCBpPXRoaXMucG93ZXJPZlR3b3NbZS0xXTt0aGlzLnBvd2VyT2ZUd29zW2VdPWkuYWRkKGkpfXJldHVybiB0aGlzLnBvd2VyT2ZUd29zW3RdfX07ZnVuY3Rpb24gU01lKG4pe3JldHVybiBmdW5jdGlvbihuKXtsZXQgdD1MVihuKSxlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5sZW5ndGgrMz4+PjIsaT1bXTtmb3IobGV0IHI9MDtyPGU7cisrKWlbcl09ZW0obiw0KnIsdCk7cmV0dXJuIGl9KHQsRmMuQmlnKSxpPTgqdC5sZW5ndGgscj1mdW5jdGlvbihuLHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wO2k8ODA7aSsrKWUucHVzaCh1bmRlZmluZWQpO3JldHVybiBlfSgpLG89MTczMjU4NDE5MyxzPTQwMjMyMzM0MTcsYT0yNTYyMzgzMTAyLGw9MjcxNzMzODc4LGM9MzI4NTM3NzUyMDtlW2k+PjVdfD0xMjg8PDI0LWklMzIsZVsxNSsoaSs2ND4+OTw8NCldPWk7Zm9yKGxldCB1PTA7dTxlLmxlbmd0aDt1Kz0xNil7bGV0IGQ9byxwPXMsaD1hLGY9bCxtPWM7Zm9yKGxldCB4PTA7eDw4MDt4Kyspe3JbeF09eDwxNj9lW3UreF06b0Ioclt4LTNdXnJbeC04XV5yW3gtMTRdXnJbeC0xNl0sMSk7bGV0IGc9SU1lKHgscyxhLGwpLGI9Z1swXSxEPWdbMV0sVD1bb0Iobyw1KSxiLGMsRCxyW3hdXS5yZWR1Y2UoZWEpO2M9bCxsPWEsYT1vQihzLDMwKSxzPW8sbz1UfW89ZWEobyxkKSxzPWVhKHMscCksYT1lYShhLGgpLGw9ZWEobCxmKSxjPWVhKGMsbSl9cmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PSIiO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKXtsZXQgaT1EQihuLGUpO3QrPShpPj4+NCkudG9TdHJpbmcoMTYpKygxNSZpKS50b1N0cmluZygxNil9cmV0dXJuIHQudG9Mb3dlckNhc2UoKX0oZnVuY3Rpb24obil7cmV0dXJuIG4ucmVkdWNlKCh0LGUpPT50LmNvbmNhdChmdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPDQ7ZSsrKXQucHVzaChuPj4+OCooMy1lKSYyNTUpO3JldHVybiB0fShlKSksW10pfShbbyxzLGEsbCxjXSkpfShmdW5jdGlvbihuKXtyZXR1cm4gbi5tYXAodD0+dC52aXNpdChUTWUsbnVsbCkpfShuLm5vZGVzKS5qb2luKCIiKStgWyR7bi5tZWFuaW5nfV1gKX1mdW5jdGlvbiBGUShuKXtsZXQgdD1uZXcgVEI7cmV0dXJuIEFEKG4ubm9kZXMubWFwKGk9PmkudmlzaXQodCxudWxsKSkuam9pbigiIiksbi5tZWFuaW5nKX12YXIgWlQ9Y2xhc3N7dmlzaXRUZXh0KHQsZSl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCxlKXtyZXR1cm5gWyR7dC5jaGlsZHJlbi5tYXAoaT0+aS52aXNpdCh0aGlzKSkuam9pbigiLCAiKX1dYH12aXNpdEljdSh0LGUpe2xldCBpPU9iamVjdC5rZXlzKHQuY2FzZXMpLm1hcChyPT5gJHtyfSB7JHt0LmNhc2VzW3JdLnZpc2l0KHRoaXMpfX1gKTtyZXR1cm5geyR7dC5leHByZXNzaW9ufSwgJHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHQuaXNWb2lkP2A8cGggdGFnIG5hbWU9IiR7dC5zdGFydE5hbWV9Ii8+YDpgPHBoIHRhZyBuYW1lPSIke3Quc3RhcnROYW1lfSI+JHt0LmNoaWxkcmVuLm1hcChpPT5pLnZpc2l0KHRoaXMpKS5qb2luKCIsICIpfTwvcGggbmFtZT0iJHt0LmNsb3NlTmFtZX0iPmB9dmlzaXRQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0LnZhbHVlP2A8cGggbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWV9PC9waD5gOmA8cGggbmFtZT0iJHt0Lm5hbWV9Ii8+YH12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuYDxwaCBpY3UgbmFtZT0iJHt0Lm5hbWV9Ij4ke3QudmFsdWUudmlzaXQodGhpcyl9PC9waD5gfX0sVE1lPW5ldyBaVCxUQj1jbGFzcyBleHRlbmRzIFpUe3Zpc2l0SWN1KHQsZSl7bGV0IGk9T2JqZWN0LmtleXModC5jYXNlcykubWFwKHI9PmAke3J9IHske3QuY2FzZXNbcl0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LnR5cGV9LCAke2kuam9pbigiLCAiKX19YH19O2Z1bmN0aW9uIElNZShuLHQsZSxpKXtyZXR1cm4gbjwyMD9bdCZlfH50JmksMTUxODUwMDI0OV06bjw0MD9bdF5lXmksMTg1OTc3NTM5M106bjw2MD9bdCZlfHQmaXxlJmksMjQwMDk1OTcwOF06W3ReZV5pLDMzOTU0Njk3ODJdfWZ1bmN0aW9uIGdYKG4pe2xldCB0PUxWKG4pLGU9X1godCwwKSxpPV9YKHQsMTAyMDcyKTtyZXR1cm4gMD09ZSYmKDA9PWl8fDE9PWkpJiYoZV49MzE5NzkwMDYzLGlePS0xODAxNDEwMjY0KSxbZSxpXX1mdW5jdGlvbiBBRChuLHQ9IiIpe2xldCBlPWdYKG4pO2lmKHQpe2xldCBvPWdYKHQpO2U9ZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLHI9dFswXSxzPU5RKG5bMV0sdFsxXSksYT1zWzBdLGw9c1sxXTtyZXR1cm5bZWEoZWEoZSxyKSxhKSxsXX0oZnVuY3Rpb24obix0KXtsZXQgZT1uWzBdLGk9blsxXTtyZXR1cm5bZTw8MXxpPj4+MzEsaTw8MXxlPj4+MzFdfShlKSxvKX1yZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT15WC50b1RoZVBvd2VyT2YoMCkubXVsdGlwbHlCeSh0KTtyZXR1cm4geVgudG9UaGVQb3dlck9mKDQpLm11bHRpcGx5QnlBbmRBZGRUbyhuLGUpLGUudG9TdHJpbmcoKX0oMjE0NzQ4MzY0NyZlWzBdLGVbMV0pfWZ1bmN0aW9uIF9YKG4sdCl7bGV0IHIsZT0yNjU0NDM1NzY5LGk9MjY1NDQzNTc2OSxvPW4ubGVuZ3RoO2ZvcihyPTA7cisxMjw9bztyKz0xMil7ZT1lYShlLGVtKG4scixGYy5MaXR0bGUpKSxpPWVhKGksZW0obixyKzQsRmMuTGl0dGxlKSk7bGV0IHM9dlgoZSxpLHQ9ZWEodCxlbShuLHIrOCxGYy5MaXR0bGUpKSk7ZT1zWzBdLGk9c1sxXSx0PXNbMl19cmV0dXJuIGU9ZWEoZSxlbShuLHIsRmMuTGl0dGxlKSksaT1lYShpLGVtKG4scis0LEZjLkxpdHRsZSkpLHQ9ZWEodCxvKSx2WChlLGksdD1lYSh0LGVtKG4scis4LEZjLkxpdHRsZSk8PDgpKVsyXX1mdW5jdGlvbiB2WChuLHQsZSl7cmV0dXJuIG49aXMobix0KSxuPWlzKG4sZSksbl49ZT4+PjEzLHQ9aXModCxlKSx0PWlzKHQsbiksdF49bjw8OCxlPWlzKGUsbiksZT1pcyhlLHQpLGVePXQ+Pj4xMyxuPWlzKG4sdCksbj1pcyhuLGUpLG5ePWU+Pj4xMix0PWlzKHQsZSksdD1pcyh0LG4pLHRePW48PDE2LGU9aXMoZSxuKSxlPWlzKGUsdCksZV49dD4+PjUsbj1pcyhuLHQpLG49aXMobixlKSxuXj1lPj4+Myx0PWlzKHQsZSksdD1pcyh0LG4pLHRePW48PDEwLGU9aXMoZSxuKSxlPWlzKGUsdCksW24sdCxlXj10Pj4+MTVdfXZhciBGYz0oKCk9PntyZXR1cm4obj1GY3x8KEZjPXt9KSlbbi5MaXR0bGU9MF09IkxpdHRsZSIsbltuLkJpZz0xXT0iQmlnIixGYzt2YXIgbn0pKCk7ZnVuY3Rpb24gZWEobix0KXtyZXR1cm4gTlEobix0KVsxXX1mdW5jdGlvbiBOUShuLHQpe2xldCBlPSg2NTUzNSZuKSsoNjU1MzUmdCksaT0obj4+PjE2KSsodD4+PjE2KSsoZT4+PjE2KTtyZXR1cm5baT4+PjE2LGk8PDE2fDY1NTM1JmVdfWZ1bmN0aW9uIGlzKG4sdCl7bGV0IGU9KDY1NTM1Jm4pLSg2NTUzNSZ0KTtyZXR1cm4obj4+MTYpLSh0Pj4xNikrKGU+PjE2KTw8MTZ8NjU1MzUmZX1mdW5jdGlvbiBvQihuLHQpe3JldHVybiBuPDx0fG4+Pj4zMi10fWZ1bmN0aW9uIERCKG4sdCl7cmV0dXJuIHQ+PW4ubGVuZ3RoPzA6blt0XX1mdW5jdGlvbiBlbShuLHQsZSl7bGV0IGk9MDtpZihlPT09RmMuQmlnKWZvcihsZXQgcj0wO3I8NDtyKyspaSs9REIobix0K3IpPDwyNC04KnI7ZWxzZSBmb3IobGV0IHI9MDtyPDQ7cisrKWkrPURCKG4sdCtyKTw8OCpyO3JldHVybiBpfXZhciB5WD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5iYXNlPXQsdGhpcy5leHBvbmVudHM9W25ldyBLVChuaC5vbmUoKSldfXRvVGhlUG93ZXJPZih0KXtmb3IobGV0IGU9dGhpcy5leHBvbmVudHMubGVuZ3RoO2U8PXQ7ZSsrKXtsZXQgaT10aGlzLmV4cG9uZW50c1tlLTFdLm11bHRpcGx5QnkodGhpcy5iYXNlKTt0aGlzLmV4cG9uZW50c1tlXT1uZXcgS1QoaSl9cmV0dXJuIHRoaXMuZXhwb25lbnRzW3RdfX0oMjU2KSxqVD0oKCk9PntyZXR1cm4obj1qVHx8KGpUPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uQ29uc3Q9MV09IkNvbnN0IixqVDt2YXIgbn0pKCksSlQ9Y2xhc3N7Y29uc3RydWN0b3IodD1qVC5Ob25lKXt0aGlzLm1vZGlmaWVycz10fWhhc01vZGlmaWVyKHQpe3JldHVybiAwIT0odGhpcy5tb2RpZmllcnMmdCl9fSxCYz0oKCk9PntyZXR1cm4obj1CY3x8KEJjPXt9KSlbbi5EeW5hbWljPTBdPSJEeW5hbWljIixuW24uQm9vbD0xXT0iQm9vbCIsbltuLlN0cmluZz0yXT0iU3RyaW5nIixuW24uSW50PTNdPSJJbnQiLG5bbi5OdW1iZXI9NF09Ik51bWJlciIsbltuLkZ1bmN0aW9uPTVdPSJGdW5jdGlvbiIsbltuLkluZmVycmVkPTZdPSJJbmZlcnJlZCIsbltuLk5vbmU9N109Ik5vbmUiLEJjO3ZhciBufSkoKSxCdT1jbGFzcyBleHRlbmRzIEpUe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoZSksdGhpcy5uYW1lPXR9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRCdWlsdGluVHlwZSh0aGlzLGUpfX0sVmM9Y2xhc3MgZXh0ZW5kcyBKVHtjb25zdHJ1Y3Rvcih0LGUsaT1udWxsKXtzdXBlcihlKSx0aGlzLnZhbHVlPXQsdGhpcy50eXBlUGFyYW1zPWl9dmlzaXRUeXBlKHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uVHlwZSh0aGlzLGUpfX0sVl89bmV3IEJ1KEJjLkR5bmFtaWMpLFBhPW5ldyBCdShCYy5JbmZlcnJlZCksQk1lPW5ldyBCdShCYy5Cb29sKSxaQz0obmV3IEJ1KEJjLkludCksbmV3IEJ1KEJjLk51bWJlcikpLExRPW5ldyBCdShCYy5TdHJpbmcpLEpkPShuZXcgQnUoQmMuRnVuY3Rpb24pLG5ldyBCdShCYy5Ob25lKSksYW09KCgpPT57cmV0dXJuKG49YW18fChhbT17fSkpW24uTWludXM9MF09Ik1pbnVzIixuW24uUGx1cz0xXT0iUGx1cyIsYW07dmFyIG59KSgpLENuPSgoKT0+e3JldHVybihuPUNufHwoQ249e30pKVtuLkVxdWFscz0wXT0iRXF1YWxzIixuW24uTm90RXF1YWxzPTFdPSJOb3RFcXVhbHMiLG5bbi5JZGVudGljYWw9Ml09IklkZW50aWNhbCIsbltuLk5vdElkZW50aWNhbD0zXT0iTm90SWRlbnRpY2FsIixuW24uTWludXM9NF09Ik1pbnVzIixuW24uUGx1cz01XT0iUGx1cyIsbltuLkRpdmlkZT02XT0iRGl2aWRlIixuW24uTXVsdGlwbHk9N109Ik11bHRpcGx5IixuW24uTW9kdWxvPThdPSJNb2R1bG8iLG5bbi5BbmQ9OV09IkFuZCIsbltuLk9yPTEwXT0iT3IiLG5bbi5CaXR3aXNlQW5kPTExXT0iQml0d2lzZUFuZCIsbltuLkxvd2VyPTEyXT0iTG93ZXIiLG5bbi5Mb3dlckVxdWFscz0xM109Ikxvd2VyRXF1YWxzIixuW24uQmlnZ2VyPTE0XT0iQmlnZ2VyIixuW24uQmlnZ2VyRXF1YWxzPTE1XT0iQmlnZ2VyRXF1YWxzIixuW24uTnVsbGlzaENvYWxlc2NlPTE2XT0iTnVsbGlzaENvYWxlc2NlIixDbjt2YXIgbn0pKCk7ZnVuY3Rpb24gQlEobix0LGUpe2xldCBpPW4ubGVuZ3RoO2lmKGkhPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGk7cisrKWlmKCFlKG5bcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gVWMobix0KXtyZXR1cm4gQlEobix0LChlLGkpPT5lLmlzRXF1aXZhbGVudChpKSl9dmFyIE9yPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50eXBlPXR8fG51bGwsdGhpcy5zb3VyY2VTcGFuPWV8fG51bGx9cHJvcCh0LGUpe3JldHVybiBuZXcgYl8odGhpcyx0LG51bGwsZSl9a2V5KHQsZSxpKXtyZXR1cm4gbmV3IE1DKHRoaXMsdCxlLGkpfWNhbGxGbih0LGUsaSl7cmV0dXJuIG5ldyBvaCh0aGlzLHQsbnVsbCxlLGkpfWluc3RhbnRpYXRlKHQsZSxpKXtyZXR1cm4gbmV3IGRtKHRoaXMsdCxlLGkpfWNvbmRpdGlvbmFsKHQsZT1udWxsLGkpe3JldHVybiBuZXcgYkModGhpcyx0LGUsbnVsbCxpKX1lcXVhbHModCxlKXtyZXR1cm4gbmV3IGdyKENuLkVxdWFscyx0aGlzLHQsbnVsbCxlKX1ub3RFcXVhbHModCxlKXtyZXR1cm4gbmV3IGdyKENuLk5vdEVxdWFscyx0aGlzLHQsbnVsbCxlKX1pZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGdyKENuLklkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1ub3RJZGVudGljYWwodCxlKXtyZXR1cm4gbmV3IGdyKENuLk5vdElkZW50aWNhbCx0aGlzLHQsbnVsbCxlKX1taW51cyh0LGUpe3JldHVybiBuZXcgZ3IoQ24uTWludXMsdGhpcyx0LG51bGwsZSl9cGx1cyh0LGUpe3JldHVybiBuZXcgZ3IoQ24uUGx1cyx0aGlzLHQsbnVsbCxlKX1kaXZpZGUodCxlKXtyZXR1cm4gbmV3IGdyKENuLkRpdmlkZSx0aGlzLHQsbnVsbCxlKX1tdWx0aXBseSh0LGUpe3JldHVybiBuZXcgZ3IoQ24uTXVsdGlwbHksdGhpcyx0LG51bGwsZSl9bW9kdWxvKHQsZSl7cmV0dXJuIG5ldyBncihDbi5Nb2R1bG8sdGhpcyx0LG51bGwsZSl9YW5kKHQsZSl7cmV0dXJuIG5ldyBncihDbi5BbmQsdGhpcyx0LG51bGwsZSl9Yml0d2lzZUFuZCh0LGUsaT0hMCl7cmV0dXJuIG5ldyBncihDbi5CaXR3aXNlQW5kLHRoaXMsdCxudWxsLGUsaSl9b3IodCxlKXtyZXR1cm4gbmV3IGdyKENuLk9yLHRoaXMsdCxudWxsLGUpfWxvd2VyKHQsZSl7cmV0dXJuIG5ldyBncihDbi5Mb3dlcix0aGlzLHQsbnVsbCxlKX1sb3dlckVxdWFscyh0LGUpe3JldHVybiBuZXcgZ3IoQ24uTG93ZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9YmlnZ2VyKHQsZSl7cmV0dXJuIG5ldyBncihDbi5CaWdnZXIsdGhpcyx0LG51bGwsZSl9YmlnZ2VyRXF1YWxzKHQsZSl7cmV0dXJuIG5ldyBncihDbi5CaWdnZXJFcXVhbHMsdGhpcyx0LG51bGwsZSl9aXNCbGFuayh0KXtyZXR1cm4gdGhpcy5lcXVhbHMoV1QsdCl9bnVsbGlzaENvYWxlc2NlKHQsZSl7cmV0dXJuIG5ldyBncihDbi5OdWxsaXNoQ29hbGVzY2UsdGhpcyx0LG51bGwsZSl9dG9TdG10KCl7cmV0dXJuIG5ldyBIdSh0aGlzLG51bGwpfX0sdW09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLm5hbWU9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1bSYmdGhpcy5uYW1lPT09dC5uYW1lfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRWYXJFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgZ0ModGhpcy5uYW1lLHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0sdl89Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmV4cHI9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFR5cGVvZkV4cHIodGhpcyxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2XyYmdC5leHByLmlzRXF1aXZhbGVudCh0aGlzLmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4gdGhpcy5leHByLmlzQ29uc3RhbnQoKX19LExuPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5ub2RlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgTG4mJnRoaXMubm9kZT09PXQubm9kZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcmFwcGVkTm9kZUV4cHIodGhpcyxlKX19LGdDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaXx8ZS50eXBlLHIpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBnQyYmdGhpcy5uYW1lPT09dC5uYW1lJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZVZhckV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyBWdSh0aGlzLm5hbWUsdGhpcy52YWx1ZSx0LGUsdGhpcy5zb3VyY2VTcGFuKX10b0NvbnN0RGVjbCgpe3JldHVybiB0aGlzLnRvRGVjbFN0bXQoUGEsbGwuRmluYWwpfX0sX0M9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKHJ8fGkudHlwZSxvKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5pbmRleD1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBfQyYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRXcml0ZUtleUV4cHIodGhpcyxlKX19LHZDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihyfHxpLnR5cGUsbyksdGhpcy5yZWNlaXZlcj10LHRoaXMubmFtZT1lLHRoaXMudmFsdWU9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB2QyYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMubmFtZT09PXQubmFtZSYmdGhpcy52YWx1ZS5pc0VxdWl2YWxlbnQodC52YWx1ZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0V3JpdGVQcm9wRXhwcih0aGlzLGUpfX0sb2g9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITEpe3N1cGVyKGksciksdGhpcy5mbj10LHRoaXMuYXJncz1lLHRoaXMucHVyZT1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG9oJiZ0aGlzLmZuLmlzRXF1aXZhbGVudCh0LmZuKSYmVWModGhpcy5hcmdzLHQuYXJncykmJnRoaXMucHVyZT09PXQucHVyZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRJbnZva2VGdW5jdGlvbkV4cHIodGhpcyxlKX19LHlDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnRhZz10LHRoaXMudGVtcGxhdGU9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5QyYmdGhpcy50YWcuaXNFcXVpdmFsZW50KHQudGFnKSYmQlEodGhpcy50ZW1wbGF0ZS5lbGVtZW50cyx0LnRlbXBsYXRlLmVsZW1lbnRzLChlLGkpPT5lLnRleHQ9PT1pLnRleHQpJiZVYyh0aGlzLnRlbXBsYXRlLmV4cHJlc3Npb25zLHQudGVtcGxhdGUuZXhwcmVzc2lvbnMpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0aGlzLGUpfX0sZG09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcihpLHIpLHRoaXMuY2xhc3NFeHByPXQsdGhpcy5hcmdzPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgZG0mJnRoaXMuY2xhc3NFeHByLmlzRXF1aXZhbGVudCh0LmNsYXNzRXhwcikmJlVjKHRoaXMuYXJncyx0LmFyZ3MpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdEluc3RhbnRpYXRlRXhwcih0aGlzLGUpfX0sY2w9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLnZhbHVlPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgY2wmJnRoaXMudmFsdWU9PT10LnZhbHVlfWlzQ29uc3RhbnQoKXtyZXR1cm4hMH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExpdGVyYWxFeHByKHRoaXMsZSl9fSwkVD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuZWxlbWVudHM9dCx0aGlzLmV4cHJlc3Npb25zPWV9fSxlRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5yYXdUZXh0PWk/P2U/LnRvU3RyaW5nKCk/P0lCKEdUKHQpKX19LGxtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWV9fSxoXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZXh0PXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5hc3NvY2lhdGVkTWVzc2FnZT1pfX0sQUI9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKExRLG8pLHRoaXMubWV0YUJsb2NrPXQsdGhpcy5tZXNzYWdlUGFydHM9ZSx0aGlzLnBsYWNlSG9sZGVyTmFtZXM9aSx0aGlzLmV4cHJlc3Npb25zPXJ9aXNFcXVpdmFsZW50KHQpe3JldHVybiExfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdExvY2FsaXplZFN0cmluZyh0aGlzLGUpfXNlcmlhbGl6ZUkxOG5IZWFkKCl7bGV0IHQ9dGhpcy5tZXRhQmxvY2suZGVzY3JpcHRpb258fCIiO3JldHVybiB0aGlzLm1ldGFCbG9jay5tZWFuaW5nJiYodD1gJHt0aGlzLm1ldGFCbG9jay5tZWFuaW5nfXwke3R9YCksdGhpcy5tZXRhQmxvY2suY3VzdG9tSWQmJih0PWAke3R9QEAke3RoaXMubWV0YUJsb2NrLmN1c3RvbUlkfWApLHRoaXMubWV0YUJsb2NrLmxlZ2FjeUlkcyYmdGhpcy5tZXRhQmxvY2subGVnYWN5SWRzLmZvckVhY2goZT0+e3Q9YCR7dH1cdTI0MWYke2V9YH0pLHhYKHQsdGhpcy5tZXNzYWdlUGFydHNbMF0udGV4dCx0aGlzLmdldE1lc3NhZ2VQYXJ0U291cmNlU3BhbigwKSl9Z2V0TWVzc2FnZVBhcnRTb3VyY2VTcGFuKHQpe3JldHVybiB0aGlzLm1lc3NhZ2VQYXJ0c1t0XT8uc291cmNlU3Bhbj8/dGhpcy5zb3VyY2VTcGFufWdldFBsYWNlaG9sZGVyU291cmNlU3Bhbih0KXtyZXR1cm4gdGhpcy5wbGFjZUhvbGRlck5hbWVzW3RdPy5zb3VyY2VTcGFuPz90aGlzLmV4cHJlc3Npb25zW3RdPy5zb3VyY2VTcGFuPz90aGlzLnNvdXJjZVNwYW59c2VyaWFsaXplSTE4blRlbXBsYXRlUGFydCh0KXtsZXQgZT10aGlzLnBsYWNlSG9sZGVyTmFtZXNbdC0xXSxpPXRoaXMubWVzc2FnZVBhcnRzW3RdLHI9ZS50ZXh0O3JldHVybiAwPT09ZS5hc3NvY2lhdGVkTWVzc2FnZT8ubGVnYWN5SWRzLmxlbmd0aCYmKHIrPWBAQCR7QUQoZS5hc3NvY2lhdGVkTWVzc2FnZS5tZXNzYWdlU3RyaW5nLGUuYXNzb2NpYXRlZE1lc3NhZ2UubWVhbmluZyl9YCkseFgocixpLnRleHQsdGhpcy5nZXRNZXNzYWdlUGFydFNvdXJjZVNwYW4odCkpfX0sR1Q9bj0+bi5yZXBsYWNlKC9cXC9nLCJcXFxcIiksek1lPW49Pm4ucmVwbGFjZSgvXjovLCJcXDoiKSxqTWU9bj0+bi5yZXBsYWNlKC86L2csIlxcOiIpLElCPW49Pm4ucmVwbGFjZSgvYC9nLCJcXGAiKS5yZXBsYWNlKC9cJHsvZywiJFxceyIpO2Z1bmN0aW9uIHhYKG4sdCxlKXtyZXR1cm4iIj09PW4/e2Nvb2tlZDp0LHJhdzpJQih6TWUoR1QodCkpKSxyYW5nZTplfTp7Y29va2VkOmA6JHtufToke3R9YCxyYXc6SUIoYDoke2pNZShHVChuKSl9OiR7R1QodCl9YCkscmFuZ2U6ZX19dmFyIHlfPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyKXtzdXBlcihlLHIpLHRoaXMudmFsdWU9dCx0aGlzLnR5cGVQYXJhbXM9aX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5XyYmdGhpcy52YWx1ZS5uYW1lPT09dC52YWx1ZS5uYW1lJiZ0aGlzLnZhbHVlLm1vZHVsZU5hbWU9PT10LnZhbHVlLm1vZHVsZU5hbWUmJnRoaXMudmFsdWUucnVudGltZT09PXQudmFsdWUucnVudGltZX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRFeHRlcm5hbEV4cHIodGhpcyxlKX19LGJDPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGk9bnVsbCxyLG8pe3N1cGVyKHJ8fGUudHlwZSxvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMuZmFsc2VDYXNlPWksdGhpcy50cnVlQ2FzZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJDJiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZ0aGlzLnRydWVDYXNlLmlzRXF1aXZhbGVudCh0LnRydWVDYXNlKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bnx8bnVsbD09dD9uPT10Om4uaXNFcXVpdmFsZW50KHQpfSh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Q29uZGl0aW9uYWxFeHByKHRoaXMsZSl9fSx4Qz1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoQk1lLGUpLHRoaXMuY29uZGl0aW9uPXR9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgeEMmJnRoaXMuY29uZGl0aW9uLmlzRXF1aXZhbGVudCh0LmNvbmRpdGlvbil9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0Tm90RXhwcih0aGlzLGUpfX0saWE9Y2xhc3N7Y29uc3RydWN0b3IodCxlPW51bGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdGhpcy5uYW1lPT09dC5uYW1lfX0scG09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGksciksdGhpcy5wYXJhbXM9dCx0aGlzLnN0YXRlbWVudHM9ZSx0aGlzLm5hbWU9b31pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBwbSYmVWModGhpcy5wYXJhbXMsdC5wYXJhbXMpJiZVYyh0aGlzLnN0YXRlbWVudHMsdC5zdGF0ZW1lbnRzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRGdW5jdGlvbkV4cHIodGhpcyxlKX10b0RlY2xTdG10KHQsZSl7cmV0dXJuIG5ldyB3Qyh0LHRoaXMucGFyYW1zLHRoaXMuc3RhdGVtZW50cyx0aGlzLnR5cGUsZSx0aGlzLnNvdXJjZVNwYW4pfX0sQ0M9Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSxyLG89ITApe3N1cGVyKGl8fFpDLHIpLHRoaXMub3BlcmF0b3I9dCx0aGlzLmV4cHI9ZSx0aGlzLnBhcmVucz1vfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENDJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHRoaXMsZSl9fSxncj1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPSEwKXtzdXBlcihyfHxlLnR5cGUsbyksdGhpcy5vcGVyYXRvcj10LHRoaXMucmhzPWksdGhpcy5wYXJlbnM9cyx0aGlzLmxocz1lfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGdyJiZ0aGlzLm9wZXJhdG9yPT09dC5vcGVyYXRvciYmdGhpcy5saHMuaXNFcXVpdmFsZW50KHQubGhzKSYmdGhpcy5yaHMuaXNFcXVpdmFsZW50KHQucmhzKX1pc0NvbnN0YW50KCl7cmV0dXJuITF9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodGhpcyxlKX19LGJfPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoaSxyKSx0aGlzLnJlY2VpdmVyPXQsdGhpcy5uYW1lPWV9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgYl8mJnRoaXMucmVjZWl2ZXIuaXNFcXVpdmFsZW50KHQucmVjZWl2ZXIpJiZ0aGlzLm5hbWU9PT10Lm5hbWV9aXNDb25zdGFudCgpe3JldHVybiExfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0UmVhZFByb3BFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgdkModGhpcy5yZWNlaXZlcix0aGlzLm5hbWUsdCxudWxsLHRoaXMuc291cmNlU3Bhbil9fSxNQz1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKGksciksdGhpcy5yZWNlaXZlcj10LHRoaXMuaW5kZXg9ZX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNQyYmdGhpcy5yZWNlaXZlci5pc0VxdWl2YWxlbnQodC5yZWNlaXZlcikmJnRoaXMuaW5kZXguaXNFcXVpdmFsZW50KHQuaW5kZXgpfWlzQ29uc3RhbnQoKXtyZXR1cm4hMX12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gdC52aXNpdFJlYWRLZXlFeHByKHRoaXMsZSl9c2V0KHQpe3JldHVybiBuZXcgX0ModGhpcy5yZWNlaXZlcix0aGlzLmluZGV4LHQsbnVsbCx0aGlzLnNvdXJjZVNwYW4pfX0saG09Y2xhc3MgZXh0ZW5kcyBPcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoZSxpKSx0aGlzLmVudHJpZXM9dH1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LmlzQ29uc3RhbnQoKSl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2YgaG0mJlVjKHRoaXMuZW50cmllcyx0LmVudHJpZXMpfXZpc2l0RXhwcmVzc2lvbih0LGUpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5RXhwcih0aGlzLGUpfX0sdEQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMua2V5PXQsdGhpcy52YWx1ZT1lLHRoaXMucXVvdGVkPWl9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0aGlzLmtleT09PXQua2V5JiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX19LHhfPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbnRyaWVzPXQsdGhpcy52YWx1ZVR5cGU9bnVsbCxlJiYodGhpcy52YWx1ZVR5cGU9ZS52YWx1ZVR5cGUpfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHhfJiZVYyh0aGlzLmVudHJpZXMsdC5lbnRyaWVzKX1pc0NvbnN0YW50KCl7cmV0dXJuIHRoaXMuZW50cmllcy5ldmVyeSh0PT50LnZhbHVlLmlzQ29uc3RhbnQoKSl9dmlzaXRFeHByZXNzaW9uKHQsZSl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwRXhwcih0aGlzLGUpfX0sUEI9bmV3IGNsKG51bGwsbnVsbCxudWxsKSxXVD1uZXcgY2wobnVsbCxQYSxudWxsKSxsbD0oKCk9PntyZXR1cm4obj1sbHx8KGxsPXt9KSlbbi5Ob25lPTBdPSJOb25lIixuW24uRmluYWw9MV09IkZpbmFsIixuW24uUHJpdmF0ZT0yXT0iUHJpdmF0ZSIsbltuLkV4cG9ydGVkPTRdPSJFeHBvcnRlZCIsbltuLlN0YXRpYz04XT0iU3RhdGljIixsbDt2YXIgbn0pKCksUkI9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudGV4dD10LHRoaXMubXVsdGlsaW5lPWUsdGhpcy50cmFpbGluZ05ld2xpbmU9aX10b1N0cmluZygpe3JldHVybiB0aGlzLm11bHRpbGluZT9gICR7dGhpcy50ZXh0fSBgOnRoaXMudGV4dH19LG5EPWNsYXNzIGV4dGVuZHMgUkJ7Y29uc3RydWN0b3IodCl7c3VwZXIoIiIsITAsITApLHRoaXMudGFncz10fXRvU3RyaW5nKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4iIjtpZigxPT09bi5sZW5ndGgmJm5bMF0udGFnTmFtZSYmIW5bMF0udGV4dClyZXR1cm5gKiR7TVgoblswXSl9IGA7bGV0IHQ9IipcbiI7Zm9yKGxldCBlIG9mIG4pdCs9IiAqIix0Kz1NWChlKS5yZXBsYWNlKC9cbi9nLCJcbiAqICIpLHQrPSJcbiI7cmV0dXJuIHQrPSIgIix0fSh0aGlzLnRhZ3MpfX0sZm09Y2xhc3N7Y29uc3RydWN0b3IodD1sbC5Ob25lLGU9bnVsbCxpKXt0aGlzLm1vZGlmaWVycz10LHRoaXMuc291cmNlU3Bhbj1lLHRoaXMubGVhZGluZ0NvbW1lbnRzPWl9aGFzTW9kaWZpZXIodCl7cmV0dXJuIDAhPSh0aGlzLm1vZGlmaWVycyZ0KX1hZGRMZWFkaW5nQ29tbWVudCh0KXt0aGlzLmxlYWRpbmdDb21tZW50cz10aGlzLmxlYWRpbmdDb21tZW50cz8/W10sdGhpcy5sZWFkaW5nQ29tbWVudHMucHVzaCh0KX19LFZ1PWNsYXNzIGV4dGVuZHMgZm17Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHIsbyxzKSx0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy50eXBlPWl8fGUmJmUudHlwZXx8bnVsbH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBWdSYmdGhpcy5uYW1lPT09dC5uYW1lJiYodGhpcy52YWx1ZT8hIXQudmFsdWUmJnRoaXMudmFsdWUuaXNFcXVpdmFsZW50KHQudmFsdWUpOiF0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0RGVjbGFyZVZhclN0bXQodGhpcyxlKX19LHdDPWNsYXNzIGV4dGVuZHMgZm17Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSl7c3VwZXIobyxzLGEpLHRoaXMubmFtZT10LHRoaXMucGFyYW1zPWUsdGhpcy5zdGF0ZW1lbnRzPWksdGhpcy50eXBlPXJ8fG51bGx9aXNFcXVpdmFsZW50KHQpe3JldHVybiB0IGluc3RhbmNlb2Ygd0MmJlVjKHRoaXMucGFyYW1zLHQucGFyYW1zKSYmVWModGhpcy5zdGF0ZW1lbnRzLHQuc3RhdGVtZW50cyl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodGhpcyxlKX19LEh1PWNsYXNzIGV4dGVuZHMgZm17Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGxsLk5vbmUsZSxpKSx0aGlzLmV4cHI9dH1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBIdSYmdGhpcy5leHByLmlzRXF1aXZhbGVudCh0LmV4cHIpfXZpc2l0U3RhdGVtZW50KHQsZSl7cmV0dXJuIHQudmlzaXRFeHByZXNzaW9uU3RtdCh0aGlzLGUpfX0sRG89Y2xhc3MgZXh0ZW5kcyBmbXtjb25zdHJ1Y3Rvcih0LGU9bnVsbCxpKXtzdXBlcihsbC5Ob25lLGUsaSksdGhpcy52YWx1ZT10fWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIERvJiZ0aGlzLnZhbHVlLmlzRXF1aXZhbGVudCh0LnZhbHVlKX12aXNpdFN0YXRlbWVudCh0LGUpe3JldHVybiB0LnZpc2l0UmV0dXJuU3RtdCh0aGlzLGUpfX0sU0M9Y2xhc3MgZXh0ZW5kcyBmbXtjb25zdHJ1Y3Rvcih0LGUsaT1bXSxyLG8pe3N1cGVyKGxsLk5vbmUscixvKSx0aGlzLmNvbmRpdGlvbj10LHRoaXMudHJ1ZUNhc2U9ZSx0aGlzLmZhbHNlQ2FzZT1pfWlzRXF1aXZhbGVudCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFNDJiZ0aGlzLmNvbmRpdGlvbi5pc0VxdWl2YWxlbnQodC5jb25kaXRpb24pJiZVYyh0aGlzLnRydWVDYXNlLHQudHJ1ZUNhc2UpJiZVYyh0aGlzLmZhbHNlQ2FzZSx0LmZhbHNlQ2FzZSl9dmlzaXRTdGF0ZW1lbnQodCxlKXtyZXR1cm4gdC52aXNpdElmU3RtdCh0aGlzLGUpfX07ZnVuY3Rpb24gUmkobix0LGUpe3JldHVybiBuZXcgdW0obix0LGUpfWZ1bmN0aW9uIFRuKG4sdD1udWxsLGUpe3JldHVybiBuZXcgeV8obixudWxsLHQsZSl9ZnVuY3Rpb24gdWwobix0LGUpe3JldHVybiBuZXcgVmMobix0LGUpfWZ1bmN0aW9uIEJWKG4pe3JldHVybiBuZXcgdl8obil9ZnVuY3Rpb24gX3Iobix0LGUpe3JldHVybiBuZXcgaG0obix0LGUpfWZ1bmN0aW9uIHFsKG4sdD1udWxsKXtyZXR1cm4gbmV3IHhfKG4ubWFwKGU9Pm5ldyB0RChlLmtleSxlLnZhbHVlLGUucXVvdGVkKSksdCxudWxsKX1mdW5jdGlvbiByYShuLHQsZSxpLHIpe3JldHVybiBuZXcgcG0obix0LGUsaSxyKX1mdW5jdGlvbiBWVihuLHQsZSxpLHIpe3JldHVybiBuZXcgU0Mobix0LGUsaSxyKX1mdW5jdGlvbiBDWChuLHQsZSxpKXtyZXR1cm4gbmV3IHlDKG4sdCxlLGkpfWZ1bmN0aW9uIGh0KG4sdCxlKXtyZXR1cm4gbmV3IGNsKG4sdCxlKX1mdW5jdGlvbiBWUShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNsJiZudWxsPT09bi52YWx1ZX1mdW5jdGlvbiBNWChuKXtsZXQgdD0iIjtpZihuLnRhZ05hbWUmJih0Kz1gIEAke24udGFnTmFtZX1gKSxuLnRleHQpe2lmKG4udGV4dC5tYXRjaCgvXC9cKnxcKlwvLykpdGhyb3cgbmV3IEVycm9yKCdKU0RvYyB0ZXh0IGNhbm5vdCBjb250YWluICIvKiIgYW5kICIqLyInKTt0Kz0iICIrbi50ZXh0LnJlcGxhY2UoL0AvZywiXFxAIil9cmV0dXJuIHR9dmFyIHdYPVJpKCI8dW5rbm93bj4iKSxIUT17fSxDXz1jbGFzcyBleHRlbmRzIE9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQudHlwZSksdGhpcy5yZXNvbHZlZD10LHRoaXMub3JpZ2luYWw9dH12aXNpdEV4cHJlc3Npb24odCxlKXtyZXR1cm4gZT09PUhRP3RoaXMub3JpZ2luYWwudmlzaXRFeHByZXNzaW9uKHQsZSk6dGhpcy5yZXNvbHZlZC52aXNpdEV4cHJlc3Npb24odCxlKX1pc0VxdWl2YWxlbnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBDXyYmdGhpcy5yZXNvbHZlZC5pc0VxdWl2YWxlbnQodC5yZXNvbHZlZCl9aXNDb25zdGFudCgpe3JldHVybiEwfWZpeHVwKHQpe3RoaXMucmVzb2x2ZWQ9dCx0aGlzLnNoYXJlZD0hMH19LGlEPWNsYXNze2NvbnN0cnVjdG9yKHQ9ITEpe3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkPXQsdGhpcy5zdGF0ZW1lbnRzPVtdLHRoaXMubGl0ZXJhbHM9bmV3IE1hcCx0aGlzLmxpdGVyYWxGYWN0b3JpZXM9bmV3IE1hcCx0aGlzLm5leHROYW1lSW5kZXg9MH1nZXRDb25zdExpdGVyYWwodCxlKXtpZih0IGluc3RhbmNlb2YgY2wmJiFTWCh0KXx8dCBpbnN0YW5jZW9mIENfKXJldHVybiB0O2xldCBpPXRoaXMua2V5T2YodCkscj10aGlzLmxpdGVyYWxzLmdldChpKSxvPSExO2lmKHJ8fChyPW5ldyBDXyh0KSx0aGlzLmxpdGVyYWxzLnNldChpLHIpLG89ITApLCFvJiYhci5zaGFyZWR8fG8mJmUpe2xldCBhLGwscz10aGlzLmZyZXNoTmFtZSgpO3RoaXMuaXNDbG9zdXJlQ29tcGlsZXJFbmFibGVkJiZTWCh0KT8oYT1SaShzKS5zZXQobmV3IHBtKFtdLFtuZXcgRG8odCldKSksbD1SaShzKS5jYWxsRm4oW10pKTooYT1SaShzKS5zZXQodCksbD1SaShzKSksdGhpcy5zdGF0ZW1lbnRzLnB1c2goYS50b0RlY2xTdG10KFBhLGxsLkZpbmFsKSksci5maXh1cChsKX1yZXR1cm4gcn1nZXRMaXRlcmFsRmFjdG9yeSh0KXtpZih0IGluc3RhbmNlb2YgaG0pe2xldCBlPXQuZW50cmllcy5tYXAocj0+ci5pc0NvbnN0YW50KCk/cjp3WCksaT10aGlzLmtleU9mKF9yKGUpKTtyZXR1cm4gdGhpcy5fZ2V0TGl0ZXJhbEZhY3RvcnkoaSx0LmVudHJpZXMscj0+X3IocikpfXtsZXQgZT1xbCh0LmVudHJpZXMubWFwKHI9Pih7a2V5OnIua2V5LHZhbHVlOnIudmFsdWUuaXNDb25zdGFudCgpP3IudmFsdWU6d1gscXVvdGVkOnIucXVvdGVkfSkpKSxpPXRoaXMua2V5T2YoZSk7cmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KGksdC5lbnRyaWVzLm1hcChyPT5yLnZhbHVlKSxyPT5xbChyLm1hcCgobyxzKT0+KHtrZXk6dC5lbnRyaWVzW3NdLmtleSx2YWx1ZTpvLHF1b3RlZDp0LmVudHJpZXNbc10ucXVvdGVkfSkpKSl9fV9nZXRMaXRlcmFsRmFjdG9yeSh0LGUsaSl7bGV0IHI9dGhpcy5saXRlcmFsRmFjdG9yaWVzLmdldCh0KSxvPWUuZmlsdGVyKHM9PiFzLmlzQ29uc3RhbnQoKSk7aWYoIXIpe2xldCBzPWUubWFwKCh1LGQpPT51LmlzQ29uc3RhbnQoKT90aGlzLmdldENvbnN0TGl0ZXJhbCh1LCEwKTpSaShgYSR7ZH1gKSksbD1yYShzLmZpbHRlcihLTWUpLm1hcCh1PT5uZXcgaWEodS5uYW1lLFZfKSksW25ldyBEbyhpKHMpKV0sUGEpLGM9dGhpcy5mcmVzaE5hbWUoKTt0aGlzLnN0YXRlbWVudHMucHVzaChSaShjKS5zZXQobCkudG9EZWNsU3RtdChQYSxsbC5GaW5hbCkpLHI9UmkoYyksdGhpcy5saXRlcmFsRmFjdG9yaWVzLnNldCh0LHIpfXJldHVybntsaXRlcmFsRmFjdG9yeTpyLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOm99fXVuaXF1ZU5hbWUodCl7cmV0dXJuYCR7dH0ke3RoaXMubmV4dE5hbWVJbmRleCsrfWB9ZnJlc2hOYW1lKCl7cmV0dXJuIHRoaXMudW5pcXVlTmFtZSgiX2MiKX1rZXlPZih0KXtyZXR1cm4gdC52aXNpdEV4cHJlc3Npb24obmV3IE9CLEhRKX19LE9CPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52aXNpdFdyYXBwZWROb2RlRXhwcj1ycyx0aGlzLnZpc2l0V3JpdGVWYXJFeHByPXJzLHRoaXMudmlzaXRXcml0ZUtleUV4cHI9cnMsdGhpcy52aXNpdFdyaXRlUHJvcEV4cHI9cnMsdGhpcy52aXNpdEludm9rZUZ1bmN0aW9uRXhwcj1ycyx0aGlzLnZpc2l0VGFnZ2VkVGVtcGxhdGVFeHByPXJzLHRoaXMudmlzaXRJbnN0YW50aWF0ZUV4cHI9cnMsdGhpcy52aXNpdENvbmRpdGlvbmFsRXhwcj1ycyx0aGlzLnZpc2l0Tm90RXhwcj1ycyx0aGlzLnZpc2l0QXNzZXJ0Tm90TnVsbEV4cHI9cnMsdGhpcy52aXNpdENhc3RFeHByPXJzLHRoaXMudmlzaXRGdW5jdGlvbkV4cHI9cnMsdGhpcy52aXNpdFVuYXJ5T3BlcmF0b3JFeHByPXJzLHRoaXMudmlzaXRCaW5hcnlPcGVyYXRvckV4cHI9cnMsdGhpcy52aXNpdFJlYWRQcm9wRXhwcj1ycyx0aGlzLnZpc2l0UmVhZEtleUV4cHI9cnMsdGhpcy52aXNpdENvbW1hRXhwcj1ycyx0aGlzLnZpc2l0TG9jYWxpemVkU3RyaW5nPXJzfXZpc2l0TGl0ZXJhbEV4cHIodCl7cmV0dXJuYCR7InN0cmluZyI9PXR5cGVvZiB0LnZhbHVlPyciJyt0LnZhbHVlKyciJzp0LnZhbHVlfWB9dmlzaXRMaXRlcmFsQXJyYXlFeHByKHQsZSl7cmV0dXJuYFske3QuZW50cmllcy5tYXAoaT0+aS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSkuam9pbigiLCIpfV1gfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm5geyR7dC5lbnRyaWVzLm1hcChvPT5gJHsobz0+e2xldCBzPW8ucXVvdGVkPyciJzoiIjtyZXR1cm5gJHtzfSR7by5rZXl9JHtzfWB9KShvKX06JHtvLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfWApLmpvaW4oIiwiKX1gfXZpc2l0RXh0ZXJuYWxFeHByKHQpe3JldHVybiB0LnZhbHVlLm1vZHVsZU5hbWU/YEVYOiR7dC52YWx1ZS5tb2R1bGVOYW1lfToke3QudmFsdWUubmFtZX1gOmBFWDoke3QudmFsdWUucnVudGltZS5uYW1lfWB9dmlzaXRSZWFkVmFyRXhwcih0KXtyZXR1cm5gVkFSOiR7dC5uYW1lfWB9dmlzaXRUeXBlb2ZFeHByKHQsZSl7cmV0dXJuYFRZUEVPRjoke3QuZXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKX1gfX07ZnVuY3Rpb24gcnMobil7dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0YXRlOiBWaXNpdG9yICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2Vzbid0IGhhbmRsZSAke24uY29uc3RydWN0b3IubmFtZX1gKX1mdW5jdGlvbiBLTWUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiB1bX1mdW5jdGlvbiBTWChuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIGNsJiYic3RyaW5nIj09dHlwZW9mIG4udmFsdWUmJm4udmFsdWUubGVuZ3RoPj01MH12YXIgeGU9IkBhbmd1bGFyL2NvcmUiLHRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLk5FV19NRVRIT0Q9ImZhY3RvcnkiLG4uVFJBTlNGT1JNX01FVEhPRD0idHJhbnNmb3JtIixuLlBBVENIX0RFUFM9InBhdGNoZWREZXBzIixuLmNvcmU9e25hbWU6bnVsbCxtb2R1bGVOYW1lOnhlfSxuLm5hbWVzcGFjZUhUTUw9e25hbWU6Ilx1MDI3NVx1MDI3NW5hbWVzcGFjZUhUTUwiLG1vZHVsZU5hbWU6eGV9LG4ubmFtZXNwYWNlTWF0aE1MPXtuYW1lOiJcdTAyNzVcdTAyNzVuYW1lc3BhY2VNYXRoTUwiLG1vZHVsZU5hbWU6eGV9LG4ubmFtZXNwYWNlU1ZHPXtuYW1lOiJcdTAyNzVcdTAyNzVuYW1lc3BhY2VTVkciLG1vZHVsZU5hbWU6eGV9LG4uZWxlbWVudD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudCIsbW9kdWxlTmFtZTp4ZX0sbi5lbGVtZW50U3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWVsZW1lbnRTdGFydCIsbW9kdWxlTmFtZTp4ZX0sbi5lbGVtZW50RW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50RW5kIixtb2R1bGVOYW1lOnhlfSxuLmFkdmFuY2U9e25hbWU6Ilx1MDI3NVx1MDI3NWFkdmFuY2UiLG1vZHVsZU5hbWU6eGV9LG4uc3ludGhldGljSG9zdFByb3BlcnR5PXtuYW1lOiJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0UHJvcGVydHkiLG1vZHVsZU5hbWU6eGV9LG4uc3ludGhldGljSG9zdExpc3RlbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVzeW50aGV0aWNIb3N0TGlzdGVuZXIiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGUiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6eGV9LG4uYXR0cmlidXRlSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVhdHRyaWJ1dGVJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NQcm9wPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc1Byb3AiLG1vZHVsZU5hbWU6eGV9LG4uZWxlbWVudENvbnRhaW5lclN0YXJ0PXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyU3RhcnQiLG1vZHVsZU5hbWU6eGV9LG4uZWxlbWVudENvbnRhaW5lckVuZD17bmFtZToiXHUwMjc1XHUwMjc1ZWxlbWVudENvbnRhaW5lckVuZCIsbW9kdWxlTmFtZTp4ZX0sbi5lbGVtZW50Q29udGFpbmVyPXtuYW1lOiJcdTAyNzVcdTAyNzVlbGVtZW50Q29udGFpbmVyIixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcCIsbW9kdWxlTmFtZTp4ZX0sbi5zdHlsZU1hcEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTI9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlMyIsbW9kdWxlTmFtZTp4ZX0sbi5zdHlsZU1hcEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTU9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlNiIsbW9kdWxlTmFtZTp4ZX0sbi5zdHlsZU1hcEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1c3R5bGVNYXBJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVNYXBJbnRlcnBvbGF0ZTg9e25hbWU6Ilx1MDI3NVx1MDI3NXN0eWxlTWFwSW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnhlfSxuLnN0eWxlTWFwSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZU1hcEludGVycG9sYXRlViIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcD17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXAiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnhlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlMiIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcEludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnhlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlNSIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcEludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4uY2xhc3NNYXBJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NWNsYXNzTWFwSW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnhlfSxuLmNsYXNzTWFwSW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVjbGFzc01hcEludGVycG9sYXRlOCIsbW9kdWxlTmFtZTp4ZX0sbi5jbGFzc01hcEludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1Y2xhc3NNYXBJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3AiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGUxPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTEiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTIiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGUzPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU0PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTQiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTUiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU2PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU3PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTciLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZTgiLG1vZHVsZU5hbWU6eGV9LG4uc3R5bGVQcm9wSW50ZXJwb2xhdGVWPXtuYW1lOiJcdTAyNzVcdTAyNzVzdHlsZVByb3BJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4ubmV4dENvbnRleHQ9e25hbWU6Ilx1MDI3NVx1MDI3NW5leHRDb250ZXh0Iixtb2R1bGVOYW1lOnhlfSxuLnJlc2V0Vmlldz17bmFtZToiXHUwMjc1XHUwMjc1cmVzZXRWaWV3Iixtb2R1bGVOYW1lOnhlfSxuLnRlbXBsYXRlQ3JlYXRlPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZW1wbGF0ZSIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0Iixtb2R1bGVOYW1lOnhlfSxuLmVuYWJsZUJpbmRpbmdzPXtuYW1lOiJcdTAyNzVcdTAyNzVlbmFibGVCaW5kaW5ncyIsbW9kdWxlTmFtZTp4ZX0sbi5kaXNhYmxlQmluZGluZ3M9e25hbWU6Ilx1MDI3NVx1MDI3NWRpc2FibGVCaW5kaW5ncyIsbW9kdWxlTmFtZTp4ZX0sbi5nZXRDdXJyZW50Vmlldz17bmFtZToiXHUwMjc1XHUwMjc1Z2V0Q3VycmVudFZpZXciLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUiLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlMT17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlMSIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0SW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGUyIixtb2R1bGVOYW1lOnhlfSxuLnRleHRJbnRlcnBvbGF0ZTM9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlND17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNCIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0SW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU1Iixtb2R1bGVOYW1lOnhlfSxuLnRleHRJbnRlcnBvbGF0ZTY9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4udGV4dEludGVycG9sYXRlNz17bmFtZToiXHUwMjc1XHUwMjc1dGV4dEludGVycG9sYXRlNyIsbW9kdWxlTmFtZTp4ZX0sbi50ZXh0SW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzV0ZXh0SW50ZXJwb2xhdGU4Iixtb2R1bGVOYW1lOnhlfSxuLnRleHRJbnRlcnBvbGF0ZVY9e25hbWU6Ilx1MDI3NVx1MDI3NXRleHRJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4ucmVzdG9yZVZpZXc9e25hbWU6Ilx1MDI3NVx1MDI3NXJlc3RvcmVWaWV3Iixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvbjA9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjAiLG1vZHVsZU5hbWU6eGV9LG4ucHVyZUZ1bmN0aW9uMT17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uMSIsbW9kdWxlTmFtZTp4ZX0sbi5wdXJlRnVuY3Rpb24yPXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb24yIixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvbjM9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjMiLG1vZHVsZU5hbWU6eGV9LG4ucHVyZUZ1bmN0aW9uND17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNCIsbW9kdWxlTmFtZTp4ZX0sbi5wdXJlRnVuY3Rpb241PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb241Iixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvbjY9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvbjYiLG1vZHVsZU5hbWU6eGV9LG4ucHVyZUZ1bmN0aW9uNz17bmFtZToiXHUwMjc1XHUwMjc1cHVyZUZ1bmN0aW9uNyIsbW9kdWxlTmFtZTp4ZX0sbi5wdXJlRnVuY3Rpb244PXtuYW1lOiJcdTAyNzVcdTAyNzVwdXJlRnVuY3Rpb244Iixtb2R1bGVOYW1lOnhlfSxuLnB1cmVGdW5jdGlvblY9e25hbWU6Ilx1MDI3NVx1MDI3NXB1cmVGdW5jdGlvblYiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQxPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDEiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQyPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDIiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQzPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDMiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmQ0PXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZDQiLG1vZHVsZU5hbWU6eGV9LG4ucGlwZUJpbmRWPXtuYW1lOiJcdTAyNzVcdTAyNzVwaXBlQmluZFYiLG1vZHVsZU5hbWU6eGV9LG4uaG9zdFByb3BlcnR5PXtuYW1lOiJcdTAyNzVcdTAyNzVob3N0UHJvcGVydHkiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHk9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5Iixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTE9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGUxIixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGUyPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlMiIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlMz17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTMiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTQ9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU0Iixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU1PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlNSIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlNj17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZTYiLG1vZHVsZU5hbWU6eGV9LG4ucHJvcGVydHlJbnRlcnBvbGF0ZTc9e25hbWU6Ilx1MDI3NVx1MDI3NXByb3BlcnR5SW50ZXJwb2xhdGU3Iixtb2R1bGVOYW1lOnhlfSxuLnByb3BlcnR5SW50ZXJwb2xhdGU4PXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9wZXJ0eUludGVycG9sYXRlOCIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9wZXJ0eUludGVycG9sYXRlVj17bmFtZToiXHUwMjc1XHUwMjc1cHJvcGVydHlJbnRlcnBvbGF0ZVYiLG1vZHVsZU5hbWU6eGV9LG4uaTE4bj17bmFtZToiXHUwMjc1XHUwMjc1aTE4biIsbW9kdWxlTmFtZTp4ZX0sbi5pMThuQXR0cmlidXRlcz17bmFtZToiXHUwMjc1XHUwMjc1aTE4bkF0dHJpYnV0ZXMiLG1vZHVsZU5hbWU6eGV9LG4uaTE4bkV4cD17bmFtZToiXHUwMjc1XHUwMjc1aTE4bkV4cCIsbW9kdWxlTmFtZTp4ZX0sbi5pMThuU3RhcnQ9e25hbWU6Ilx1MDI3NVx1MDI3NWkxOG5TdGFydCIsbW9kdWxlTmFtZTp4ZX0sbi5pMThuRW5kPXtuYW1lOiJcdTAyNzVcdTAyNzVpMThuRW5kIixtb2R1bGVOYW1lOnhlfSxuLmkxOG5BcHBseT17bmFtZToiXHUwMjc1XHUwMjc1aTE4bkFwcGx5Iixtb2R1bGVOYW1lOnhlfSxuLmkxOG5Qb3N0cHJvY2Vzcz17bmFtZToiXHUwMjc1XHUwMjc1aTE4blBvc3Rwcm9jZXNzIixtb2R1bGVOYW1lOnhlfSxuLnBpcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXBpcGUiLG1vZHVsZU5hbWU6eGV9LG4ucHJvamVjdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1cHJvamVjdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5wcm9qZWN0aW9uRGVmPXtuYW1lOiJcdTAyNzVcdTAyNzVwcm9qZWN0aW9uRGVmIixtb2R1bGVOYW1lOnhlfSxuLnJlZmVyZW5jZT17bmFtZToiXHUwMjc1XHUwMjc1cmVmZXJlbmNlIixtb2R1bGVOYW1lOnhlfSxuLmluamVjdD17bmFtZToiXHUwMjc1XHUwMjc1aW5qZWN0Iixtb2R1bGVOYW1lOnhlfSxuLmluamVjdEF0dHJpYnV0ZT17bmFtZToiXHUwMjc1XHUwMjc1aW5qZWN0QXR0cmlidXRlIixtb2R1bGVOYW1lOnhlfSxuLmRpcmVjdGl2ZUluamVjdD17bmFtZToiXHUwMjc1XHUwMjc1ZGlyZWN0aXZlSW5qZWN0Iixtb2R1bGVOYW1lOnhlfSxuLmludmFsaWRGYWN0b3J5PXtuYW1lOiJcdTAyNzVcdTAyNzVpbnZhbGlkRmFjdG9yeSIsbW9kdWxlTmFtZTp4ZX0sbi5pbnZhbGlkRmFjdG9yeURlcD17bmFtZToiXHUwMjc1XHUwMjc1aW52YWxpZEZhY3RvcnlEZXAiLG1vZHVsZU5hbWU6eGV9LG4udGVtcGxhdGVSZWZFeHRyYWN0b3I9e25hbWU6Ilx1MDI3NVx1MDI3NXRlbXBsYXRlUmVmRXh0cmFjdG9yIixtb2R1bGVOYW1lOnhlfSxuLmZvcndhcmRSZWY9e25hbWU6ImZvcndhcmRSZWYiLG1vZHVsZU5hbWU6eGV9LG4ucmVzb2x2ZUZvcndhcmRSZWY9e25hbWU6InJlc29sdmVGb3J3YXJkUmVmIixtb2R1bGVOYW1lOnhlfSxuLlx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGUiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZUluamVjdGFibGU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZUluamVjdGFibGUiLG1vZHVsZU5hbWU6eGV9LG4uSW5qZWN0YWJsZURlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVJbmplY3RhYmxlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6eGV9LG4ucmVzb2x2ZVdpbmRvdz17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZVdpbmRvdyIsbW9kdWxlTmFtZTp4ZX0sbi5yZXNvbHZlRG9jdW1lbnQ9e25hbWU6Ilx1MDI3NVx1MDI3NXJlc29sdmVEb2N1bWVudCIsbW9kdWxlTmFtZTp4ZX0sbi5yZXNvbHZlQm9keT17bmFtZToiXHUwMjc1XHUwMjc1cmVzb2x2ZUJvZHkiLG1vZHVsZU5hbWU6eGV9LG4uZGVmaW5lQ29tcG9uZW50PXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVDb21wb25lbnQiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZUNvbXBvbmVudD17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlQ29tcG9uZW50Iixtb2R1bGVOYW1lOnhlfSxuLnNldENvbXBvbmVudFNjb3BlPXtuYW1lOiJcdTAyNzVcdTAyNzVzZXRDb21wb25lbnRTY29wZSIsbW9kdWxlTmFtZTp4ZX0sbi5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneT17bmFtZToiQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kiLG1vZHVsZU5hbWU6eGV9LG4uVmlld0VuY2Fwc3VsYXRpb249e25hbWU6IlZpZXdFbmNhcHN1bGF0aW9uIixtb2R1bGVOYW1lOnhlfSxuLkNvbXBvbmVudERlY2xhcmF0aW9uPXtuYW1lOiJcdTAyNzVcdTAyNzVDb21wb25lbnREZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5GYWN0b3J5RGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUZhY3RvcnlEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5kZWNsYXJlRmFjdG9yeT17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlRmFjdG9yeSIsbW9kdWxlTmFtZTp4ZX0sbi5GYWN0b3J5VGFyZ2V0PXtuYW1lOiJcdTAyNzVcdTAyNzVGYWN0b3J5VGFyZ2V0Iixtb2R1bGVOYW1lOnhlfSxuLmRlZmluZURpcmVjdGl2ZT17bmFtZToiXHUwMjc1XHUwMjc1ZGVmaW5lRGlyZWN0aXZlIixtb2R1bGVOYW1lOnhlfSxuLmRlY2xhcmVEaXJlY3RpdmU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZURpcmVjdGl2ZSIsbW9kdWxlTmFtZTp4ZX0sbi5EaXJlY3RpdmVEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1RGlyZWN0aXZlRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6eGV9LG4uSW5qZWN0b3JEZWY9e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdG9yRGVmIixtb2R1bGVOYW1lOnhlfSxuLkluamVjdG9yRGVjbGFyYXRpb249e25hbWU6Ilx1MDI3NVx1MDI3NUluamVjdG9yRGVjbGFyYXRpb24iLG1vZHVsZU5hbWU6eGV9LG4uZGVmaW5lSW5qZWN0b3I9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZUluamVjdG9yIixtb2R1bGVOYW1lOnhlfSxuLmRlY2xhcmVJbmplY3Rvcj17bmFtZToiXHUwMjc1XHUwMjc1bmdEZWNsYXJlSW5qZWN0b3IiLG1vZHVsZU5hbWU6eGV9LG4uTmdNb2R1bGVEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1TmdNb2R1bGVEZWNsYXJhdGlvbiIsbW9kdWxlTmFtZTp4ZX0sbi5Nb2R1bGVXaXRoUHJvdmlkZXJzPXtuYW1lOiJNb2R1bGVXaXRoUHJvdmlkZXJzIixtb2R1bGVOYW1lOnhlfSxuLmRlZmluZU5nTW9kdWxlPXtuYW1lOiJcdTAyNzVcdTAyNzVkZWZpbmVOZ01vZHVsZSIsbW9kdWxlTmFtZTp4ZX0sbi5kZWNsYXJlTmdNb2R1bGU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZU5nTW9kdWxlIixtb2R1bGVOYW1lOnhlfSxuLnNldE5nTW9kdWxlU2NvcGU9e25hbWU6Ilx1MDI3NVx1MDI3NXNldE5nTW9kdWxlU2NvcGUiLG1vZHVsZU5hbWU6eGV9LG4ucmVnaXN0ZXJOZ01vZHVsZVR5cGU9e25hbWU6Ilx1MDI3NVx1MDI3NXJlZ2lzdGVyTmdNb2R1bGVUeXBlIixtb2R1bGVOYW1lOnhlfSxuLlBpcGVEZWNsYXJhdGlvbj17bmFtZToiXHUwMjc1XHUwMjc1UGlwZURlY2xhcmF0aW9uIixtb2R1bGVOYW1lOnhlfSxuLmRlZmluZVBpcGU9e25hbWU6Ilx1MDI3NVx1MDI3NWRlZmluZVBpcGUiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZVBpcGU9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZVBpcGUiLG1vZHVsZU5hbWU6eGV9LG4uZGVjbGFyZUNsYXNzTWV0YWRhdGE9e25hbWU6Ilx1MDI3NVx1MDI3NW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEiLG1vZHVsZU5hbWU6eGV9LG4uc2V0Q2xhc3NNZXRhZGF0YT17bmFtZToiXHUwMjc1c2V0Q2xhc3NNZXRhZGF0YSIsbW9kdWxlTmFtZTp4ZX0sbi5xdWVyeVJlZnJlc2g9e25hbWU6Ilx1MDI3NVx1MDI3NXF1ZXJ5UmVmcmVzaCIsbW9kdWxlTmFtZTp4ZX0sbi52aWV3UXVlcnk9e25hbWU6Ilx1MDI3NVx1MDI3NXZpZXdRdWVyeSIsbW9kdWxlTmFtZTp4ZX0sbi5sb2FkUXVlcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWxvYWRRdWVyeSIsbW9kdWxlTmFtZTp4ZX0sbi5jb250ZW50UXVlcnk9e25hbWU6Ilx1MDI3NVx1MDI3NWNvbnRlbnRRdWVyeSIsbW9kdWxlTmFtZTp4ZX0sbi5OZ09uQ2hhbmdlc0ZlYXR1cmU9e25hbWU6Ilx1MDI3NVx1MDI3NU5nT25DaGFuZ2VzRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5Jbmhlcml0RGVmaW5pdGlvbkZlYXR1cmU9e25hbWU6Ilx1MDI3NVx1MDI3NUluaGVyaXREZWZpbml0aW9uRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5Db3B5RGVmaW5pdGlvbkZlYXR1cmU9e25hbWU6Ilx1MDI3NVx1MDI3NUNvcHlEZWZpbml0aW9uRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5TdGFuZGFsb25lRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1U3RhbmRhbG9uZUZlYXR1cmUiLG1vZHVsZU5hbWU6eGV9LG4uUHJvdmlkZXJzRmVhdHVyZT17bmFtZToiXHUwMjc1XHUwMjc1UHJvdmlkZXJzRmVhdHVyZSIsbW9kdWxlTmFtZTp4ZX0sbi5saXN0ZW5lcj17bmFtZToiXHUwMjc1XHUwMjc1bGlzdGVuZXIiLG1vZHVsZU5hbWU6eGV9LG4uZ2V0SW5oZXJpdGVkRmFjdG9yeT17bmFtZToiXHUwMjc1XHUwMjc1Z2V0SW5oZXJpdGVkRmFjdG9yeSIsbW9kdWxlTmFtZTp4ZX0sbi5zYW5pdGl6ZUh0bWw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplSHRtbCIsbW9kdWxlTmFtZTp4ZX0sbi5zYW5pdGl6ZVN0eWxlPXtuYW1lOiJcdTAyNzVcdTAyNzVzYW5pdGl6ZVN0eWxlIixtb2R1bGVOYW1lOnhlfSxuLnNhbml0aXplUmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplUmVzb3VyY2VVcmwiLG1vZHVsZU5hbWU6eGV9LG4uc2FuaXRpemVTY3JpcHQ9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplU2NyaXB0Iixtb2R1bGVOYW1lOnhlfSxuLnNhbml0aXplVXJsPXtuYW1lOiJcdTAyNzVcdTAyNzVzYW5pdGl6ZVVybCIsbW9kdWxlTmFtZTp4ZX0sbi5zYW5pdGl6ZVVybE9yUmVzb3VyY2VVcmw9e25hbWU6Ilx1MDI3NVx1MDI3NXNhbml0aXplVXJsT3JSZXNvdXJjZVVybCIsbW9kdWxlTmFtZTp4ZX0sbi50cnVzdENvbnN0YW50SHRtbD17bmFtZToiXHUwMjc1XHUwMjc1dHJ1c3RDb25zdGFudEh0bWwiLG1vZHVsZU5hbWU6eGV9LG4udHJ1c3RDb25zdGFudFJlc291cmNlVXJsPXtuYW1lOiJcdTAyNzVcdTAyNzV0cnVzdENvbnN0YW50UmVzb3VyY2VVcmwiLG1vZHVsZU5hbWU6eGV9LG59KSgpO2Z1bmN0aW9uIEJUKG4pe249bjwwPzErKC1uPDwxKTpuPDwxO2xldCB0PSIiO2Rve2xldCBlPTMxJm47KG4+Pj01KT4wJiYoZXw9MzIpLHQrPXNDKGUpfXdoaWxlKG4+MCk7cmV0dXJuIHR9ZnVuY3Rpb24gc0Mobil7aWYobjwwfHxuPj02NCl0aHJvdyBuZXcgRXJyb3IoIkNhbiBvbmx5IGVuY29kZSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDYzXSIpO3JldHVybiJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIltuXX12YXIgdHdlPS8nfFxcfFxufFxyfFwkL2csbndlPS9eWyRBLVpfXVswLTlBLVpfJF0qJC9pLHJEPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5kZW50PXQsdGhpcy5wYXJ0c0xlbmd0aD0wLHRoaXMucGFydHM9W10sdGhpcy5zcmNTcGFucz1bXX19LEVDPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2luZGVudD10LHRoaXMuX2xpbmVzPVtuZXcgckQodCldfXN0YXRpYyBjcmVhdGVSb290KCl7cmV0dXJuIG5ldyBFQygwKX1nZXQgX2N1cnJlbnRMaW5lKCl7cmV0dXJuIHRoaXMuX2xpbmVzW3RoaXMuX2xpbmVzLmxlbmd0aC0xXX1wcmludGxuKHQsZT0iIil7dGhpcy5wcmludCh0fHxudWxsLGUsITApfWxpbmVJc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLl9jdXJyZW50TGluZS5wYXJ0cy5sZW5ndGh9bGluZUxlbmd0aCgpe3JldHVybiB0aGlzLl9jdXJyZW50TGluZS5pbmRlbnQqIiAgIi5sZW5ndGgrdGhpcy5fY3VycmVudExpbmUucGFydHNMZW5ndGh9cHJpbnQodCxlLGk9ITEpe2UubGVuZ3RoPjAmJih0aGlzLl9jdXJyZW50TGluZS5wYXJ0cy5wdXNoKGUpLHRoaXMuX2N1cnJlbnRMaW5lLnBhcnRzTGVuZ3RoKz1lLmxlbmd0aCx0aGlzLl9jdXJyZW50TGluZS5zcmNTcGFucy5wdXNoKHQmJnQuc291cmNlU3Bhbnx8bnVsbCkpLGkmJnRoaXMuX2xpbmVzLnB1c2gobmV3IHJEKHRoaXMuX2luZGVudCkpfXJlbW92ZUVtcHR5TGFzdExpbmUoKXt0aGlzLmxpbmVJc0VtcHR5KCkmJnRoaXMuX2xpbmVzLnBvcCgpfWluY0luZGVudCgpe3RoaXMuX2luZGVudCsrLHRoaXMubGluZUlzRW1wdHkoKSYmKHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudD10aGlzLl9pbmRlbnQpfWRlY0luZGVudCgpe3RoaXMuX2luZGVudC0tLHRoaXMubGluZUlzRW1wdHkoKSYmKHRoaXMuX2N1cnJlbnRMaW5lLmluZGVudD10aGlzLl9pbmRlbnQpfXRvU291cmNlKCl7cmV0dXJuIHRoaXMuc291cmNlTGluZXMubWFwKHQ9PnQucGFydHMubGVuZ3RoPjA/RVgodC5pbmRlbnQpK3QucGFydHMuam9pbigiIik6IiIpLmpvaW4oIlxuIil9dG9Tb3VyY2VNYXBHZW5lcmF0b3IodCxlPTApe2xldCBpPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0PW51bGwpe3RoaXMuZmlsZT10LHRoaXMuc291cmNlc0NvbnRlbnQ9bmV3IE1hcCx0aGlzLmxpbmVzPVtdLHRoaXMubGFzdENvbDA9MCx0aGlzLmhhc01hcHBpbmdzPSExfWFkZFNvdXJjZSh0LGU9bnVsbCl7cmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnQuaGFzKHQpfHx0aGlzLnNvdXJjZXNDb250ZW50LnNldCh0LGUpLHRoaXN9YWRkTGluZSgpe3JldHVybiB0aGlzLmxpbmVzLnB1c2goW10pLHRoaXMubGFzdENvbDA9MCx0aGlzfWFkZE1hcHBpbmcodCxlLGkscil7aWYoIXRoaXMuY3VycmVudExpbmUpdGhyb3cgbmV3IEVycm9yKCJBIGxpbmUgbXVzdCBiZSBhZGRlZCBiZWZvcmUgbWFwcGluZ3MgY2FuIGJlIGFkZGVkIik7aWYobnVsbCE9ZSYmIXRoaXMuc291cmNlc0NvbnRlbnQuaGFzKGUpKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBzb3VyY2UgZmlsZSAiJHtlfSJgKTtpZihudWxsPT10KXRocm93IG5ldyBFcnJvcigiVGhlIGNvbHVtbiBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUgbXVzdCBiZSBwcm92aWRlZCIpO2lmKHQ8dGhpcy5sYXN0Q29sMCl0aHJvdyBuZXcgRXJyb3IoIk1hcHBpbmcgc2hvdWxkIGJlIGFkZGVkIGluIG91dHB1dCBvcmRlciIpO2lmKGUmJihudWxsPT1pfHxudWxsPT1yKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzb3VyY2UgbG9jYXRpb24gbXVzdCBiZSBwcm92aWRlZCB3aGVuIGEgc291cmNlIHVybCBpcyBwcm92aWRlZCIpO3JldHVybiB0aGlzLmhhc01hcHBpbmdzPSEwLHRoaXMubGFzdENvbDA9dCx0aGlzLmN1cnJlbnRMaW5lLnB1c2goe2NvbDA6dCxzb3VyY2VVcmw6ZSxzb3VyY2VMaW5lMDppLHNvdXJjZUNvbDA6cn0pLHRoaXN9Z2V0IGN1cnJlbnRMaW5lKCl7cmV0dXJuIHRoaXMubGluZXMuc2xpY2UoLTEpWzBdfXRvSlNPTigpe2lmKCF0aGlzLmhhc01hcHBpbmdzKXJldHVybiBudWxsO2xldCB0PW5ldyBNYXAsZT1bXSxpPVtdO0FycmF5LmZyb20odGhpcy5zb3VyY2VzQ29udGVudC5rZXlzKCkpLmZvckVhY2goKGMsdSk9Pnt0LnNldChjLHUpLGUucHVzaChjKSxpLnB1c2godGhpcy5zb3VyY2VzQ29udGVudC5nZXQoYyl8fG51bGwpfSk7bGV0IHI9IiIsbz0wLHM9MCxhPTAsbD0wO3JldHVybiB0aGlzLmxpbmVzLmZvckVhY2goYz0+e289MCxyKz1jLm1hcCh1PT57bGV0IGQ9QlQodS5jb2wwLW8pO3JldHVybiBvPXUuY29sMCxudWxsIT11LnNvdXJjZVVybCYmKGQrPUJUKHQuZ2V0KHUuc291cmNlVXJsKS1zKSxzPXQuZ2V0KHUuc291cmNlVXJsKSxkKz1CVCh1LnNvdXJjZUxpbmUwLWEpLGE9dS5zb3VyY2VMaW5lMCxkKz1CVCh1LnNvdXJjZUNvbDAtbCksbD11LnNvdXJjZUNvbDApLGR9KS5qb2luKCIsIikscis9IjsifSkscj1yLnNsaWNlKDAsLTEpLHtmaWxlOnRoaXMuZmlsZXx8IiIsdmVyc2lvbjozLHNvdXJjZVJvb3Q6IiIsc291cmNlczplLHNvdXJjZXNDb250ZW50OmksbWFwcGluZ3M6cn19dG9Kc0NvbW1lbnQoKXtyZXR1cm4gdGhpcy5oYXNNYXBwaW5ncz8iLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwiK2Z1bmN0aW9uKG4pe2xldCB0PSIiLGU9TFYobik7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDspe2xldCByPWVbaSsrXSxvPWk8ZS5sZW5ndGg/ZVtpKytdOm51bGwscz1pPGUubGVuZ3RoP2VbaSsrXTpudWxsO3QrPXNDKHI+PjIpLHQrPXNDKCgzJnIpPDw0fChudWxsPT09bz8wOm8+PjQpKSx0Kz1udWxsPT09bz8iPSI6c0MoKDE1Jm8pPDwyfChudWxsPT09cz8wOnM+PjYpKSx0Kz1udWxsPT09b3x8bnVsbD09PXM/Ij0iOnNDKDYzJnMpfXJldHVybiB0fShKU09OLnN0cmluZ2lmeSh0aGlzLG51bGwsMCkpOiIifX0odCkscj0hMSxvPSgpPT57cnx8KGkuYWRkU291cmNlKHQsIiAiKS5hZGRNYXBwaW5nKDAsdCwwLDApLHI9ITApfTtmb3IobGV0IHM9MDtzPGU7cysrKWkuYWRkTGluZSgpLG8oKTtyZXR1cm4gdGhpcy5zb3VyY2VMaW5lcy5mb3JFYWNoKChzLGEpPT57aS5hZGRMaW5lKCk7bGV0IGw9cy5zcmNTcGFucyxjPXMucGFydHMsdT1zLmluZGVudCoiICAiLmxlbmd0aCxkPTA7Zm9yKDtkPGwubGVuZ3RoJiYhbFtkXTspdSs9Y1tkXS5sZW5ndGgsZCsrO2ZvcihkPGwubGVuZ3RoJiYwPT09YSYmMD09PXU/cj0hMDpvKCk7ZDxsLmxlbmd0aDspe2xldCBwPWxbZF0saD1wLnN0YXJ0LmZpbGUsZj1wLnN0YXJ0LmxpbmUsbT1wLnN0YXJ0LmNvbDtmb3IoaS5hZGRTb3VyY2UoaC51cmwsaC5jb250ZW50KS5hZGRNYXBwaW5nKHUsaC51cmwsZixtKSx1Kz1jW2RdLmxlbmd0aCxkKys7ZDxsLmxlbmd0aCYmKHA9PT1sW2RdfHwhbFtkXSk7KXUrPWNbZF0ubGVuZ3RoLGQrK319KSxpfXNwYW5PZih0LGUpe2xldCBpPXRoaXMuX2xpbmVzW3RdO2lmKGkpe2xldCByPWUtRVgoaS5pbmRlbnQpLmxlbmd0aDtmb3IobGV0IG89MDtvPGkucGFydHMubGVuZ3RoO28rKyl7bGV0IHM9aS5wYXJ0c1tvXTtpZihzLmxlbmd0aD5yKXJldHVybiBpLnNyY1NwYW5zW29dO3ItPXMubGVuZ3RofX1yZXR1cm4gbnVsbH1nZXQgc291cmNlTGluZXMoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RoJiYwPT09dGhpcy5fbGluZXNbdGhpcy5fbGluZXMubGVuZ3RoLTFdLnBhcnRzLmxlbmd0aD90aGlzLl9saW5lcy5zbGljZSgwLC0xKTp0aGlzLl9saW5lc319LE5CPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2VzY2FwZURvbGxhckluU3RyaW5ncz10fXByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSl7aWYodm9pZCAwIT09dC5sZWFkaW5nQ29tbWVudHMpZm9yKGxldCBpIG9mIHQubGVhZGluZ0NvbW1lbnRzKWkgaW5zdGFuY2VvZiBuRD9lLnByaW50KHQsYC8qJHtpLnRvU3RyaW5nKCl9Ki9gLGkudHJhaWxpbmdOZXdsaW5lKTppLm11bHRpbGluZT9lLnByaW50KHQsYC8qICR7aS50ZXh0fSAqL2AsaS50cmFpbGluZ05ld2xpbmUpOmkudGV4dC5zcGxpdCgiXG4iKS5mb3JFYWNoKHI9PntlLnByaW50bG4odCxgLy8gJHtyfWApfSl9dmlzaXRFeHByZXNzaW9uU3RtdCh0LGUpe3JldHVybiB0aGlzLnByaW50TGVhZGluZ0NvbW1lbnRzKHQsZSksdC5leHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnRsbih0LCI7IiksbnVsbH12aXNpdFJldHVyblN0bXQodCxlKXtyZXR1cm4gdGhpcy5wcmludExlYWRpbmdDb21tZW50cyh0LGUpLGUucHJpbnQodCwicmV0dXJuICIpLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludGxuKHQsIjsiKSxudWxsfXZpc2l0SWZTdG10KHQsZSl7dGhpcy5wcmludExlYWRpbmdDb21tZW50cyh0LGUpLGUucHJpbnQodCwiaWYgKCIpLHQuY29uZGl0aW9uLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiKSB7Iik7bGV0IGk9bnVsbCE9dC5mYWxzZUNhc2UmJnQuZmFsc2VDYXNlLmxlbmd0aD4wO3JldHVybiB0LnRydWVDYXNlLmxlbmd0aDw9MSYmIWk/KGUucHJpbnQodCwiICIpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQudHJ1ZUNhc2UsZSksZS5yZW1vdmVFbXB0eUxhc3RMaW5lKCksZS5wcmludCh0LCIgIikpOihlLnByaW50bG4oKSxlLmluY0luZGVudCgpLHRoaXMudmlzaXRBbGxTdGF0ZW1lbnRzKHQudHJ1ZUNhc2UsZSksZS5kZWNJbmRlbnQoKSxpJiYoZS5wcmludGxuKHQsIn0gZWxzZSB7IiksZS5pbmNJbmRlbnQoKSx0aGlzLnZpc2l0QWxsU3RhdGVtZW50cyh0LmZhbHNlQ2FzZSxlKSxlLmRlY0luZGVudCgpKSksZS5wcmludGxuKHQsIn0iKSxudWxsfXZpc2l0V3JpdGVWYXJFeHByKHQsZSl7bGV0IGk9ZS5saW5lSXNFbXB0eSgpO3JldHVybiBpfHxlLnByaW50KHQsIigiKSxlLnByaW50KHQsYCR7dC5uYW1lfSA9IGApLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksaXx8ZS5wcmludCh0LCIpIiksbnVsbH12aXNpdFdyaXRlS2V5RXhwcih0LGUpe2xldCBpPWUubGluZUlzRW1wdHkoKTtyZXR1cm4gaXx8ZS5wcmludCh0LCIoIiksdC5yZWNlaXZlci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIlsiKSx0LmluZGV4LnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiXSA9ICIpLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksaXx8ZS5wcmludCh0LCIpIiksbnVsbH12aXNpdFdyaXRlUHJvcEV4cHIodCxlKXtsZXQgaT1lLmxpbmVJc0VtcHR5KCk7cmV0dXJuIGl8fGUucHJpbnQodCwiKCIpLHQucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LGAuJHt0Lm5hbWV9ID0gYCksdC52YWx1ZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxpfHxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0SW52b2tlRnVuY3Rpb25FeHByKHQsZSl7cmV0dXJuIHQuZm4udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIoIiksdGhpcy52aXNpdEFsbEV4cHJlc3Npb25zKHQuYXJncyxlLCIsIiksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0LGUpe3QudGFnLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCwiYCIrdC50ZW1wbGF0ZS5lbGVtZW50c1swXS5yYXdUZXh0KTtmb3IobGV0IGk9MTtpPHQudGVtcGxhdGUuZWxlbWVudHMubGVuZ3RoO2krKyllLnByaW50KHQsIiR7IiksdC50ZW1wbGF0ZS5leHByZXNzaW9uc1tpLTFdLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgfSR7dC50ZW1wbGF0ZS5lbGVtZW50c1tpXS5yYXdUZXh0fWApO3JldHVybiBlLnByaW50KHQsImAiKSxudWxsfXZpc2l0V3JhcHBlZE5vZGVFeHByKHQsZSl7dGhyb3cgbmV3IEVycm9yKCJBYnN0cmFjdCBlbWl0dGVyIGNhbm5vdCB2aXNpdCBXcmFwcGVkTm9kZUV4cHIuIil9dmlzaXRUeXBlb2ZFeHByKHQsZSl7ZS5wcmludCh0LCJ0eXBlb2YgIiksdC5leHByLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfXZpc2l0UmVhZFZhckV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LHQubmFtZSksbnVsbH12aXNpdEluc3RhbnRpYXRlRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIm5ldyAiKSx0LmNsYXNzRXhwci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIigiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5hcmdzLGUsIiwiKSxlLnByaW50KHQsIikiKSxudWxsfXZpc2l0TGl0ZXJhbEV4cHIodCxlKXtsZXQgaT10LnZhbHVlO3JldHVybiBlLnByaW50KHQsInN0cmluZyI9PXR5cGVvZiBpP3JtKGksdGhpcy5fZXNjYXBlRG9sbGFySW5TdHJpbmdzKTpgJHtpfWApLG51bGx9dmlzaXRMb2NhbGl6ZWRTdHJpbmcodCxlKXtsZXQgaT10LnNlcmlhbGl6ZUkxOG5IZWFkKCk7ZS5wcmludCh0LCIkbG9jYWxpemUgYCIraS5yYXcpO2ZvcihsZXQgcj0xO3I8dC5tZXNzYWdlUGFydHMubGVuZ3RoO3IrKyllLnByaW50KHQsIiR7IiksdC5leHByZXNzaW9uc1tyLTFdLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgfSR7dC5zZXJpYWxpemVJMThuVGVtcGxhdGVQYXJ0KHIpLnJhd31gKTtyZXR1cm4gZS5wcmludCh0LCJgIiksbnVsbH12aXNpdENvbmRpdGlvbmFsRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIigiKSx0LmNvbmRpdGlvbi52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIj8gIiksdC50cnVlQ2FzZS52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIjogIiksdC5mYWxzZUNhc2UudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdE5vdEV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LCIhIiksdC5jb25kaXRpb24udmlzaXRFeHByZXNzaW9uKHRoaXMsZSksbnVsbH12aXNpdFVuYXJ5T3BlcmF0b3JFeHByKHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UgYW0uUGx1czppPSIrIjticmVhaztjYXNlIGFtLk1pbnVzOmk9Ii0iO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdC5wYXJlbnMmJmUucHJpbnQodCwiKCIpLGUucHJpbnQodCxpKSx0LmV4cHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksdC5wYXJlbnMmJmUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRCaW5hcnlPcGVyYXRvckV4cHIodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRvcil7Y2FzZSBDbi5FcXVhbHM6aT0iPT0iO2JyZWFrO2Nhc2UgQ24uSWRlbnRpY2FsOmk9Ij09PSI7YnJlYWs7Y2FzZSBDbi5Ob3RFcXVhbHM6aT0iIT0iO2JyZWFrO2Nhc2UgQ24uTm90SWRlbnRpY2FsOmk9IiE9PSI7YnJlYWs7Y2FzZSBDbi5BbmQ6aT0iJiYiO2JyZWFrO2Nhc2UgQ24uQml0d2lzZUFuZDppPSImIjticmVhaztjYXNlIENuLk9yOmk9Inx8IjticmVhaztjYXNlIENuLlBsdXM6aT0iKyI7YnJlYWs7Y2FzZSBDbi5NaW51czppPSItIjticmVhaztjYXNlIENuLkRpdmlkZTppPSIvIjticmVhaztjYXNlIENuLk11bHRpcGx5Omk9IioiO2JyZWFrO2Nhc2UgQ24uTW9kdWxvOmk9IiUiO2JyZWFrO2Nhc2UgQ24uTG93ZXI6aT0iPCI7YnJlYWs7Y2FzZSBDbi5Mb3dlckVxdWFsczppPSI8PSI7YnJlYWs7Y2FzZSBDbi5CaWdnZXI6aT0iPiI7YnJlYWs7Y2FzZSBDbi5CaWdnZXJFcXVhbHM6aT0iPj0iO2JyZWFrO2Nhc2UgQ24uTnVsbGlzaENvYWxlc2NlOmk9Ij8/IjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9cmV0dXJuIHQucGFyZW5zJiZlLnByaW50KHQsIigiKSx0Lmxocy52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsYCAke2l9IGApLHQucmhzLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLHQucGFyZW5zJiZlLnByaW50KHQsIikiKSxudWxsfXZpc2l0UmVhZFByb3BFeHByKHQsZSl7cmV0dXJuIHQucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCIuIiksZS5wcmludCh0LHQubmFtZSksbnVsbH12aXNpdFJlYWRLZXlFeHByKHQsZSl7cmV0dXJuIHQucmVjZWl2ZXIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSksZS5wcmludCh0LCJbIiksdC5pbmRleC52aXNpdEV4cHJlc3Npb24odGhpcyxlKSxlLnByaW50KHQsIl0iKSxudWxsfXZpc2l0TGl0ZXJhbEFycmF5RXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsIlsiKSx0aGlzLnZpc2l0QWxsRXhwcmVzc2lvbnModC5lbnRyaWVzLGUsIiwiKSxlLnByaW50KHQsIl0iKSxudWxsfXZpc2l0TGl0ZXJhbE1hcEV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LCJ7IiksdGhpcy52aXNpdEFsbE9iamVjdHMoaT0+e2UucHJpbnQodCxgJHtybShpLmtleSx0aGlzLl9lc2NhcGVEb2xsYXJJblN0cmluZ3MsaS5xdW90ZWQpfTpgKSxpLnZhbHVlLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfSx0LmVudHJpZXMsZSwiLCIpLGUucHJpbnQodCwifSIpLG51bGx9dmlzaXRDb21tYUV4cHIodCxlKXtyZXR1cm4gZS5wcmludCh0LCIoIiksdGhpcy52aXNpdEFsbEV4cHJlc3Npb25zKHQucGFydHMsZSwiLCIpLGUucHJpbnQodCwiKSIpLG51bGx9dmlzaXRBbGxFeHByZXNzaW9ucyh0LGUsaSl7dGhpcy52aXNpdEFsbE9iamVjdHMocj0+ci52aXNpdEV4cHJlc3Npb24odGhpcyxlKSx0LGUsaSl9dmlzaXRBbGxPYmplY3RzKHQsZSxpLHIpe2xldCBvPSExO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXM+MCYmKGkubGluZUxlbmd0aCgpPjgwPyhpLnByaW50KG51bGwsciwhMCksb3x8KGkuaW5jSW5kZW50KCksaS5pbmNJbmRlbnQoKSxvPSEwKSk6aS5wcmludChudWxsLHIsITEpKSx0KGVbc10pO28mJihpLmRlY0luZGVudCgpLGkuZGVjSW5kZW50KCkpfXZpc2l0QWxsU3RhdGVtZW50cyh0LGUpe3QuZm9yRWFjaChpPT5pLnZpc2l0U3RhdGVtZW50KHRoaXMsZSkpfX07ZnVuY3Rpb24gcm0obix0LGU9ITApe2lmKG51bGw9PW4pcmV0dXJuIG51bGw7bGV0IGk9bi5yZXBsYWNlKHR3ZSwoLi4ubyk9PiIkIj09b1swXT90PyJcXCQiOiIkIjoiXG4iPT1vWzBdPyJcXG4iOiJcciI9PW9bMF0/IlxcciI6YFxcJHtvWzBdfWApO3JldHVybiBlfHwhbndlLnRlc3QoaSk/YCcke2l9J2A6aX1mdW5jdGlvbiBFWChuKXtsZXQgdD0iIjtmb3IobGV0IGU9MDtlPG47ZSsrKXQrPSIgICI7cmV0dXJuIHR9ZnVuY3Rpb24gSUQobix0KXtpZigwPT09dClyZXR1cm4gdWwobik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0O2krKyllLnB1c2goVl8pO3JldHVybiB1bChuLHZvaWQgMCxlKX1mdW5jdGlvbiB6UShuKXtyZXR1cm5gQCR7bn1gfWZ1bmN0aW9uIHJ3ZShuLHQpe2xldCBlPXJtKHQsITEsITEpO3JldHVybiBlIT09dD9gJHtufVske2V9XWA6YCR7bn0uJHt0fWB9ZnVuY3Rpb24galEobix0KXtyZXR1cm5gYW5pbWF0aW9uXyR7bn1fJHt0fWB9ZnVuY3Rpb24gQXMobil7bGV0IHQ9bmV3IExuKG4pO3JldHVybnt2YWx1ZTp0LHR5cGU6dH19ZnVuY3Rpb24gb20obix0KXtsZXQgZT1fcihuLm1hcChpPT5pLnZhbHVlKSk7cmV0dXJuIHQ/cmEoW10sW25ldyBEbyhlKV0pOmV9ZnVuY3Rpb24gSFYobix0KXtyZXR1cm57ZXhwcmVzc2lvbjpuLGZvcndhcmRSZWY6dH19dmFyIGZfPSgoKT0+e3JldHVybihuPWZffHwoZl89e30pKVtuLkNsYXNzPTBdPSJDbGFzcyIsbltuLkZ1bmN0aW9uPTFdPSJGdW5jdGlvbiIsZl87dmFyIG59KSgpLE5jPSgoKT0+e3JldHVybihuPU5jfHwoTmM9e30pKVtuLkRpcmVjdGl2ZT0wXT0iRGlyZWN0aXZlIixuW24uQ29tcG9uZW50PTFdPSJDb21wb25lbnQiLG5bbi5JbmplY3RhYmxlPTJdPSJJbmplY3RhYmxlIixuW24uUGlwZT0zXT0iUGlwZSIsbltuLk5nTW9kdWxlPTRdPSJOZ01vZHVsZSIsTmM7dmFyIG59KSgpO2Z1bmN0aW9uIG5tKG4pe2xldCB0PVJpKCJ0IiksZT1udWxsLGk9RFgobik/dDpuZXcgZ3IoQ24uT3IsdCxuLmludGVybmFsVHlwZSkscj1udWxsO251bGwhPT1uLmRlcHM/ImludmFsaWQiIT09bi5kZXBzJiYocj1uZXcgZG0oaSxUWChuLmRlcHMsbi50YXJnZXQpKSk6KGU9UmkoYFx1MDI3NSR7bi5uYW1lfV9CYXNlRmFjdG9yeWApLHI9ZS5jYWxsRm4oW2ldKSk7bGV0IG89W10scz1udWxsO2Z1bmN0aW9uIGEoYyl7bGV0IHU9UmkoInIiKTtvLnB1c2godS5zZXQoUEIpLnRvRGVjbFN0bXQoKSk7bGV0IGQ9bnVsbCE9PXI/dS5zZXQocikudG9TdG10KCk6VG4odGUuaW52YWxpZEZhY3RvcnkpLmNhbGxGbihbXSkudG9TdG10KCk7cmV0dXJuIG8ucHVzaChWVih0LFtkXSxbdS5zZXQoYykudG9TdG10KCldKSksdX1pZihEWChuKSl7bGV0IGM9VFgobi5kZWxlZ2F0ZURlcHMsbi50YXJnZXQpO3M9YShuZXcobi5kZWxlZ2F0ZVR5cGU9PT1mXy5DbGFzcz9kbTpvaCkobi5kZWxlZ2F0ZSxjKSl9ZWxzZSBzPWZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLmV4cHJlc3Npb259KG4pP2Eobi5leHByZXNzaW9uKTpyO2lmKG51bGw9PT1zKW8ucHVzaChUbih0ZS5pbnZhbGlkRmFjdG9yeSkuY2FsbEZuKFtdKS50b1N0bXQoKSk7ZWxzZSBpZihudWxsIT09ZSl7bGV0IGM9VG4odGUuZ2V0SW5oZXJpdGVkRmFjdG9yeSkuY2FsbEZuKFtuLmludGVybmFsVHlwZV0pLHU9bmV3IGdyKENuLk9yLGUsZS5zZXQoYykpO28ucHVzaChuZXcgRG8odS5jYWxsRm4oW2ldKSkpfWVsc2Ugby5wdXNoKG5ldyBEbyhzKSk7bGV0IGw9cmEoW25ldyBpYSgidCIsVl8pXSxvLFBhLHZvaWQgMCxgJHtuLm5hbWV9X0ZhY3RvcnlgKTtyZXR1cm4gbnVsbCE9PWUmJihsPXJhKFtdLFtuZXcgVnUoZS5uYW1lKSxuZXcgRG8obCldKS5jYWxsRm4oW10sdm9pZCAwLCEwKSkse2V4cHJlc3Npb246bCxzdGF0ZW1lbnRzOltdLHR5cGU6Y3dlKG4pfX1mdW5jdGlvbiBjd2Uobil7bGV0IHQ9bnVsbCE9PW4uZGVwcyYmImludmFsaWQiIT09bi5kZXBzP2Z1bmN0aW9uKG4pe2xldCB0PSExLGU9bi5tYXAoaT0+e2xldCByPWZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiBudWxsIT09bi5hdHRyaWJ1dGVOYW1lVHlwZSYmdC5wdXNoKHtrZXk6ImF0dHJpYnV0ZSIsdmFsdWU6bi5hdHRyaWJ1dGVOYW1lVHlwZSxxdW90ZWQ6ITF9KSxuLm9wdGlvbmFsJiZ0LnB1c2goe2tleToib3B0aW9uYWwiLHZhbHVlOmh0KCEwKSxxdW90ZWQ6ITF9KSxuLmhvc3QmJnQucHVzaCh7a2V5OiJob3N0Iix2YWx1ZTpodCghMCkscXVvdGVkOiExfSksbi5zZWxmJiZ0LnB1c2goe2tleToic2VsZiIsdmFsdWU6aHQoITApLHF1b3RlZDohMX0pLG4uc2tpcFNlbGYmJnQucHVzaCh7a2V5OiJza2lwU2VsZiIsdmFsdWU6aHQoITApLHF1b3RlZDohMX0pLHQubGVuZ3RoPjA/cWwodCk6bnVsbH0oaSk7cmV0dXJuIG51bGwhPT1yPyh0PSEwLHIpOmh0KG51bGwpfSk7cmV0dXJuIHQ/dWwoX3IoZSkpOkpkfShuLmRlcHMpOkpkO3JldHVybiB1bChUbih0ZS5GYWN0b3J5RGVjbGFyYXRpb24sW0lEKG4udHlwZS50eXBlLG4udHlwZUFyZ3VtZW50Q291bnQpLHRdKSl9ZnVuY3Rpb24gVFgobix0KXtyZXR1cm4gbi5tYXAoKGUsaSk9PmZ1bmN0aW9uKG4sdCxlKXtpZihudWxsPT09bi50b2tlbilyZXR1cm4gVG4odGUuaW52YWxpZEZhY3RvcnlEZXApLmNhbGxGbihbaHQoZSldKTtpZihudWxsPT09bi5hdHRyaWJ1dGVOYW1lVHlwZSl7bGV0IGk9MHwobi5zZWxmPzI6MCl8KG4uc2tpcFNlbGY/NDowKXwobi5ob3N0PzE6MCl8KG4ub3B0aW9uYWw/ODowKXwodD09PU5jLlBpcGU/MTY6MCkscj0wIT09aXx8bi5vcHRpb25hbD9odChpKTpudWxsLG89W24udG9rZW5dO3ImJm8ucHVzaChyKTtsZXQgcz1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSBOYy5Db21wb25lbnQ6Y2FzZSBOYy5EaXJlY3RpdmU6Y2FzZSBOYy5QaXBlOnJldHVybiB0ZS5kaXJlY3RpdmVJbmplY3Q7ZGVmYXVsdDpyZXR1cm4gdGUuaW5qZWN0fX0odCk7cmV0dXJuIFRuKHMpLmNhbGxGbihvKX1yZXR1cm4gVG4odGUuaW5qZWN0QXR0cmlidXRlKS5jYWxsRm4oW24udG9rZW5dKX0oZSx0LGkpKX1mdW5jdGlvbiBEWChuKXtyZXR1cm4gdm9pZCAwIT09bi5kZWxlZ2F0ZVR5cGV9dmFyIE1fPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzKX19LFRDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWUsdGhpcy5pMThuPWl9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRCb3VuZFRleHQodGhpcyl9fSxEQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW8sdGhpcy5pMThuPXN9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRUZXh0QXR0cmlidXRlKHRoaXMpfX0sd189Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuc2VjdXJpdHlDb250ZXh0PWksdGhpcy52YWx1ZT1yLHRoaXMudW5pdD1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMua2V5U3Bhbj1hLHRoaXMudmFsdWVTcGFuPWwsdGhpcy5pMThuPWN9c3RhdGljIGZyb21Cb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LGUpe2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBhdHRyaWJ1dGVzIGJ1dCB3YXMgbm90IGZvciAke3QubmFtZX06ICR7dC5zb3VyY2VTcGFufWApO3JldHVybiBuZXcgd18odC5uYW1lLHQudHlwZSx0LnNlY3VyaXR5Q29udGV4dCx0LnZhbHVlLHQudW5pdCx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLGUpfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRBdHRyaWJ1dGUodGhpcyl9fSxTXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwpe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuaGFuZGxlcj1pLHRoaXMudGFyZ2V0PXIsdGhpcy5waGFzZT1vLHRoaXMuc291cmNlU3Bhbj1zLHRoaXMuaGFuZGxlclNwYW49YSx0aGlzLmtleVNwYW49bH1zdGF0aWMgZnJvbVBhcnNlZEV2ZW50KHQpe2xldCBlPTA9PT10LnR5cGU/dC50YXJnZXRPclBoYXNlOm51bGwsaT0xPT09dC50eXBlP3QudGFyZ2V0T3JQaGFzZTpudWxsO2lmKHZvaWQgMD09PXQua2V5U3Bhbil0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgc3RhdGU6IGtleVNwYW4gbXVzdCBiZSBkZWZpbmVkIGZvciBib3VuZCBldmVudCBidXQgd2FzIG5vdCBmb3IgJHt0Lm5hbWV9OiAke3Quc291cmNlU3Bhbn1gKTtyZXR1cm4gbmV3IFNfKHQubmFtZSx0LnR5cGUsdC5oYW5kbGVyLGUsaSx0LnNvdXJjZVNwYW4sdC5oYW5kbGVyU3Bhbix0LmtleVNwYW4pfXZpc2l0KHQpe3JldHVybiB0LnZpc2l0Qm91bmRFdmVudCh0aGlzKX19LEVfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMubmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy5jaGlsZHJlbj1vLHRoaXMucmVmZXJlbmNlcz1zLHRoaXMuc291cmNlU3Bhbj1hLHRoaXMuc3RhcnRTb3VyY2VTcGFuPWwsdGhpcy5lbmRTb3VyY2VTcGFuPWMsdGhpcy5pMThuPXV9dmlzaXQodCl7cmV0dXJuIHQudmlzaXRFbGVtZW50KHRoaXMpfX0sdUM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMudGFnTmFtZT10LHRoaXMuYXR0cmlidXRlcz1lLHRoaXMuaW5wdXRzPWksdGhpcy5vdXRwdXRzPXIsdGhpcy50ZW1wbGF0ZUF0dHJzPW8sdGhpcy5jaGlsZHJlbj1zLHRoaXMucmVmZXJlbmNlcz1hLHRoaXMudmFyaWFibGVzPWwsdGhpcy5zb3VyY2VTcGFuPWMsdGhpcy5zdGFydFNvdXJjZVNwYW49dSx0aGlzLmVuZFNvdXJjZVNwYW49ZCx0aGlzLmkxOG49cH12aXNpdCh0KXtyZXR1cm4gdC52aXNpdFRlbXBsYXRlKHRoaXMpfX0sb0Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvKXt0aGlzLm5hbWU9dCx0aGlzLnZhbHVlPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5rZXlTcGFuPXIsdGhpcy52YWx1ZVNwYW49b312aXNpdCh0KXtyZXR1cm4gdC52aXNpdFZhcmlhYmxlKHRoaXMpfX0sc0Q9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy52YXJzPXQsdGhpcy5wbGFjZWhvbGRlcnM9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmkxOG49cn12aXNpdCh0KXtyZXR1cm4gdC52aXNpdEljdSh0aGlzKX19O2Z1bmN0aW9uIEFYKG4sdCl7bGV0IGU9W107aWYobi52aXNpdClmb3IobGV0IGkgb2YgdCluLnZpc2l0KGkpfHxpLnZpc2l0KG4pO2Vsc2UgZm9yKGxldCBpIG9mIHQpe2xldCByPWkudmlzaXQobik7ciYmZS5wdXNoKHIpfXJldHVybiBlfXZhciBGdT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5ub2Rlcz10LHRoaXMucGxhY2Vob2xkZXJzPWUsdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZT1pLHRoaXMubWVhbmluZz1yLHRoaXMuZGVzY3JpcHRpb249byx0aGlzLmN1c3RvbUlkPXMsdGhpcy5pZD10aGlzLmN1c3RvbUlkLHRoaXMubGVnYWN5SWRzPVtdLHRoaXMubWVzc2FnZVN0cmluZz1mdW5jdGlvbihuKXtsZXQgdD1uZXcgVUI7cmV0dXJuIG4ubWFwKGk9PmkudmlzaXQodCkpLmpvaW4oIiIpfSh0aGlzLm5vZGVzKSx0aGlzLnNvdXJjZXM9dC5sZW5ndGg/W3tmaWxlUGF0aDp0WzBdLnNvdXJjZVNwYW4uc3RhcnQuZmlsZS51cmwsc3RhcnRMaW5lOnRbMF0uc291cmNlU3Bhbi5zdGFydC5saW5lKzEsc3RhcnRDb2w6dFswXS5zb3VyY2VTcGFuLnN0YXJ0LmNvbCsxLGVuZExpbmU6dFt0Lmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZC5saW5lKzEsZW5kQ29sOnRbMF0uc291cmNlU3Bhbi5zdGFydC5jb2wrMX1dOltdfX0sbF89Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnZhbHVlPXQsdGhpcy5zb3VyY2VTcGFuPWV9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdFRleHQodGhpcyxlKX19LG1tPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5jaGlsZHJlbj10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb250YWluZXIodGhpcyxlKX19LGFEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZXhwcmVzc2lvbj10LHRoaXMudHlwZT1lLHRoaXMuY2FzZXM9aSx0aGlzLnNvdXJjZVNwYW49cn12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1KHRoaXMsZSl9fSxsRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy52YWx1ZT10LHRoaXMubmFtZT1lLHRoaXMuc291cmNlU3Bhbj1pfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRQbGFjZWhvbGRlcih0aGlzLGUpfX0sVF89Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudmFsdWU9dCx0aGlzLm5hbWU9ZSx0aGlzLnNvdXJjZVNwYW49aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0SWN1UGxhY2Vob2xkZXIodGhpcyxlKX19LFVCPWNsYXNze3Zpc2l0VGV4dCh0KXtyZXR1cm4gdC52YWx1ZX12aXNpdENvbnRhaW5lcih0KXtyZXR1cm4gdC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9dmlzaXRJY3UodCl7bGV0IGU9T2JqZWN0LmtleXModC5jYXNlcykubWFwKGk9PmAke2l9IHske3QuY2FzZXNbaV0udmlzaXQodGhpcyl9fWApO3JldHVybmB7JHt0LmV4cHJlc3Npb25QbGFjZWhvbGRlcn0sICR7dC50eXBlfSwgJHtlLmpvaW4oIiAiKX19YH12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe2xldCBlPXQuY2hpbGRyZW4ubWFwKGk9PmkudmlzaXQodGhpcykpLmpvaW4oIiIpO3JldHVybmB7JCR7dC5zdGFydE5hbWV9fSR7ZX17JCR7dC5jbG9zZU5hbWV9fWB9dmlzaXRQbGFjZWhvbGRlcih0KXtyZXR1cm5geyQke3QubmFtZX19YH12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3JldHVybmB7JCR7dC5uYW1lfX1gfX07bmV3IGNsYXNze3Zpc2l0VGFnKHQpe2xldCBlPXRoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyk7aWYoMD09dC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuYDwke3QubmFtZX0ke2V9Lz5gO2xldCBpPXQuY2hpbGRyZW4ubWFwKHI9PnIudmlzaXQodGhpcykpO3JldHVybmA8JHt0Lm5hbWV9JHtlfT4ke2kuam9pbigiIil9PC8ke3QubmFtZX0+YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXREZWNsYXJhdGlvbih0KXtyZXR1cm5gPD94bWwke3RoaXMuX3NlcmlhbGl6ZUF0dHJpYnV0ZXModC5hdHRycyl9ID8+YH1fc2VyaWFsaXplQXR0cmlidXRlcyh0KXtsZXQgZT1PYmplY3Qua2V5cyh0KS5tYXAoaT0+YCR7aX09IiR7dFtpXX0iYCkuam9pbigiICIpO3JldHVybiBlLmxlbmd0aD4wPyIgIitlOiIifXZpc2l0RG9jdHlwZSh0KXtyZXR1cm5gPCFET0NUWVBFICR7dC5yb290VGFnfSBbXG4ke3QuZHRkfVxuXT5gfX07dmFyIGpCPSJpMThuLSI7ZnVuY3Rpb24gQUMobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGdX1mdW5jdGlvbiBWVChuKXtyZXR1cm4gQUMobikmJjE9PT1uLm5vZGVzLmxlbmd0aCYmbi5ub2Rlc1swXWluc3RhbmNlb2YgYUR9ZnVuY3Rpb24gQ3dlKG4pe3JldHVybiEhbi5pMThufWZ1bmN0aW9uIFdRKG4pe3JldHVybiBuLm5vZGVzWzBdfWZ1bmN0aW9uIFBEKG4sdD0wKXtyZXR1cm5gXHVmZmZkJHtufSR7dD4wP2A6JHt0fWA6IiJ9XHVmZmZkYH1mdW5jdGlvbiBTd2Uobj0wKXtsZXQgdD1uO3JldHVybigpPT50Kyt9ZnVuY3Rpb24gUFgobil7bGV0IHQ9e307cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+e3RbaV09aHQoZS5sZW5ndGg+MT9gWyR7ZS5qb2luKCJ8Iil9XWA6ZVswXSl9KSx0fWZ1bmN0aW9uIHFUKG4sdCwuLi5lKXtsZXQgaT1uLmdldCh0KXx8W107aS5wdXNoKC4uLmUpLG4uc2V0KHQsaSl9ZnVuY3Rpb24gcVEobix0PTAsZT0wKXtsZXQgaT10LHI9bmV3IE1hcCxvPW4gaW5zdGFuY2VvZiBGdT9uLm5vZGVzLmZpbmQocz0+cyBpbnN0YW5jZW9mIG1tKTpuO3JldHVybiBvJiZvLmNoaWxkcmVuLmZpbHRlcihzPT5zIGluc3RhbmNlb2YgbEQpLmZvckVhY2goKHMsYSk9PntsZXQgbD1QRChpK2EsZSk7cVQocixzLm5hbWUsbCl9KSxyfWZ1bmN0aW9uIFVWKG49e30sdCl7bGV0IGU9e307cmV0dXJuIG4mJk9iamVjdC5rZXlzKG4pLmxlbmd0aCYmT2JqZWN0LmtleXMobikuZm9yRWFjaChpPT5lW0pDKGksdCldPW5baV0pLGV9ZnVuY3Rpb24gSkMobix0PSEwKXtsZXQgZT1mdW5jdGlvbihuKXtyZXR1cm4gbi50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1teQS1aMC05X10vZywiXyIpfShuKTtpZighdClyZXR1cm4gZTtsZXQgcixpPWUuc3BsaXQoIl8iKTtpZigxPT09aS5sZW5ndGgpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTsvXlxkKyQvLnRlc3QoaVtpLmxlbmd0aC0xXSkmJihyPWkucG9wKCkpO2xldCBvPWkuc2hpZnQoKS50b0xvd2VyQ2FzZSgpO3JldHVybiBpLmxlbmd0aCYmKG8rPWkubWFwKHM9PnMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKS5qb2luKCIiKSkscj9gJHtvfV8ke3J9YDpvfWZ1bmN0aW9uIFJYKG4pe3JldHVybmBNU0dfJHtufWAudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBFd2Uobil7cmV0dXJuIG5ldyBWdShuLm5hbWUsdm9pZCAwLFBhLHZvaWQgMCxuLnNvdXJjZVNwYW4pfXZhciBUd2U9L1stLl0vLEhjPSJjdHgiLCRDPSJyZiIsWVE9InJlc3RvcmVkQ3R4IixSd2U9bmV3IFNldChbdGUuZWxlbWVudCx0ZS5lbGVtZW50U3RhcnQsdGUuZWxlbWVudEVuZCx0ZS5lbGVtZW50Q29udGFpbmVyLHRlLmVsZW1lbnRDb250YWluZXJTdGFydCx0ZS5lbGVtZW50Q29udGFpbmVyRW5kLHRlLmkxOG5FeHAsdGUubGlzdGVuZXIsdGUuY2xhc3NQcm9wLHRlLnN5bnRoZXRpY0hvc3RMaXN0ZW5lcix0ZS5ob3N0UHJvcGVydHksdGUuc3ludGhldGljSG9zdFByb3BlcnR5LHRlLnByb3BlcnR5LHRlLnByb3BlcnR5SW50ZXJwb2xhdGUxLHRlLnByb3BlcnR5SW50ZXJwb2xhdGUyLHRlLnByb3BlcnR5SW50ZXJwb2xhdGUzLHRlLnByb3BlcnR5SW50ZXJwb2xhdGU0LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU1LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU2LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU3LHRlLnByb3BlcnR5SW50ZXJwb2xhdGU4LHRlLnByb3BlcnR5SW50ZXJwb2xhdGVWLHRlLmF0dHJpYnV0ZSx0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTEsdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUyLHRlLmF0dHJpYnV0ZUludGVycG9sYXRlMyx0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTQsdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU1LHRlLmF0dHJpYnV0ZUludGVycG9sYXRlNix0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTcsdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU4LHRlLmF0dHJpYnV0ZUludGVycG9sYXRlVix0ZS5zdHlsZVByb3AsdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUxLHRlLnN0eWxlUHJvcEludGVycG9sYXRlMix0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZTMsdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU0LHRlLnN0eWxlUHJvcEludGVycG9sYXRlNSx0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZTYsdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU3LHRlLnN0eWxlUHJvcEludGVycG9sYXRlOCx0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZVYsdGUudGV4dEludGVycG9sYXRlLHRlLnRleHRJbnRlcnBvbGF0ZTEsdGUudGV4dEludGVycG9sYXRlMix0ZS50ZXh0SW50ZXJwb2xhdGUzLHRlLnRleHRJbnRlcnBvbGF0ZTQsdGUudGV4dEludGVycG9sYXRlNSx0ZS50ZXh0SW50ZXJwb2xhdGU2LHRlLnRleHRJbnRlcnBvbGF0ZTcsdGUudGV4dEludGVycG9sYXRlOCx0ZS50ZXh0SW50ZXJwb2xhdGVWXSk7ZnVuY3Rpb24gZ20obix0LGUpe3JldHVybiBUbih0LG51bGwsbikuY2FsbEZuKGUsbil9ZnVuY3Rpb24gWFEobix0KXtsZXQgZT1udWxsO3JldHVybigpPT4oZXx8KG4ucHVzaChuZXcgVnUoIl90Iix2b2lkIDAsVl8pKSxlPVJpKHQpKSxlKX1mdW5jdGlvbiBpQyhuKXt0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc3RhdGU6IFZpc2l0b3IgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGRvZXNuJ3QgaGFuZGxlICR7bi5jb25zdHJ1Y3Rvci5uYW1lfWApfWZ1bmN0aW9uIE51KG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP19yKG4ubWFwKE51KSk6aHQobixQYSl9ZnVuY3Rpb24gT1gobix0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikubGVuZ3RoPjA/ZnVuY3Rpb24obix0KXtyZXR1cm4gcWwoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikubWFwKGU9PntsZXQgcixvLHMsYSxpPW5bZV07cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/KFtvLHJdPWkscz1lLGE9byE9PXIpOihzPXI9ZSxvPWksYT0hMSkse2tleTpzLHF1b3RlZDpUd2UudGVzdChzKSx2YWx1ZTp0JiZhP19yKFtOdShvKSxOdShyKV0pOk51KG8pfX0pKX0obix0KTpudWxsfWZ1bmN0aW9uIHNCKG4pe2Zvcig7VlEobltuLmxlbmd0aC0xXSk7KW4ucG9wKCk7cmV0dXJuIG59ZnVuY3Rpb24ga3dlKG4sdCl7aWYoQXJyYXkuaXNBcnJheShuLnByZWRpY2F0ZSkpe2xldCBlPVtdO3JldHVybiBuLnByZWRpY2F0ZS5mb3JFYWNoKGk9PntsZXQgcj1pLnNwbGl0KCIsIikubWFwKG89Pmh0KG8udHJpbSgpKSk7ZS5wdXNoKC4uLnIpfSksdC5nZXRDb25zdExpdGVyYWwoX3IoZSksITApfXN3aXRjaChuLnByZWRpY2F0ZS5mb3J3YXJkUmVmKXtjYXNlIDA6Y2FzZSAyOnJldHVybiBuLnByZWRpY2F0ZS5leHByZXNzaW9uO2Nhc2UgMTpyZXR1cm4gVG4odGUucmVzb2x2ZUZvcndhcmRSZWYpLmNhbGxGbihbbi5wcmVkaWNhdGUuZXhwcmVzc2lvbl0pfX12YXIgc2g9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnZhbHVlcz1bXX1zZXQodCxlKXtlJiZ0aGlzLnZhbHVlcy5wdXNoKHtrZXk6dCx2YWx1ZTplLHF1b3RlZDohMX0pfXRvTGl0ZXJhbE1hcCgpe3JldHVybiBxbCh0aGlzLnZhbHVlcyl9fTtmdW5jdGlvbiB3bShuKXtsZXR7ZXhwcmVzc2lvbnM6dCxzdHJpbmdzOmV9PW47cmV0dXJuIDE9PT10Lmxlbmd0aCYmMj09PWUubGVuZ3RoJiYiIj09PWVbMF0mJiIiPT09ZVsxXT8xOnQubGVuZ3RoK2UubGVuZ3RofWZ1bmN0aW9uIGNEKG4pe2xldCB0PVtdLGU9bnVsbCxpPW51bGwscj0wO2ZvcihsZXQgbyBvZiBuKXtsZXQgcz0oImZ1bmN0aW9uIj09dHlwZW9mIG8ucGFyYW1zT3JGbj9vLnBhcmFtc09yRm4oKTpvLnBhcmFtc09yRm4pPz9bXSxhPUFycmF5LmlzQXJyYXkocyk/czpbc107cjw1MDAmJmk9PT1vLnJlZmVyZW5jZSYmUndlLmhhcyhpKT8oZT1lLmNhbGxGbihhLGUuc291cmNlU3BhbikscisrKToobnVsbCE9PWUmJnQucHVzaChlLnRvU3RtdCgpKSxlPWdtKG8uc3BhbixvLnJlZmVyZW5jZSxhKSxpPW8ucmVmZXJlbmNlLHI9MCl9cmV0dXJuIG51bGwhPT1lJiZ0LnB1c2goZS50b1N0bXQoKSksdH1mdW5jdGlvbiBrWChuLHQpe2xldCBlPW51bGwsaT17bmFtZTpuLm5hbWUsdHlwZTpuLnR5cGUsaW50ZXJuYWxUeXBlOm4uaW50ZXJuYWxUeXBlLHR5cGVBcmd1bWVudENvdW50Om4udHlwZUFyZ3VtZW50Q291bnQsZGVwczpbXSx0YXJnZXQ6TmMuSW5qZWN0YWJsZX07aWYodm9pZCAwIT09bi51c2VDbGFzcyl7bGV0IGwsYT1uLnVzZUNsYXNzLmV4cHJlc3Npb24uaXNFcXVpdmFsZW50KG4uaW50ZXJuYWxUeXBlKTt2b2lkIDAhPT1uLmRlcHMmJihsPW4uZGVwcyksZT12b2lkIDAhPT1sP25tKHsuLi5pLGRlbGVnYXRlOm4udXNlQ2xhc3MuZXhwcmVzc2lvbixkZWxlZ2F0ZURlcHM6bCxkZWxlZ2F0ZVR5cGU6Zl8uQ2xhc3N9KTphP25tKGkpOntzdGF0ZW1lbnRzOltdLGV4cHJlc3Npb246Rlgobi50eXBlLnZhbHVlLG4udXNlQ2xhc3MuZXhwcmVzc2lvbix0KX19ZWxzZSBlPXZvaWQgMCE9PW4udXNlRmFjdG9yeT92b2lkIDAhPT1uLmRlcHM/bm0oey4uLmksZGVsZWdhdGU6bi51c2VGYWN0b3J5LGRlbGVnYXRlRGVwczpuLmRlcHN8fFtdLGRlbGVnYXRlVHlwZTpmXy5GdW5jdGlvbn0pOntzdGF0ZW1lbnRzOltdLGV4cHJlc3Npb246cmEoW10sW25ldyBEbyhuLnVzZUZhY3RvcnkuY2FsbEZuKFtdKSldKX06dm9pZCAwIT09bi51c2VWYWx1ZT9ubSh7Li4uaSxleHByZXNzaW9uOm4udXNlVmFsdWUuZXhwcmVzc2lvbn0pOnZvaWQgMCE9PW4udXNlRXhpc3Rpbmc/bm0oey4uLmksZXhwcmVzc2lvbjpUbih0ZS5pbmplY3QpLmNhbGxGbihbbi51c2VFeGlzdGluZy5leHByZXNzaW9uXSl9KTp7c3RhdGVtZW50czpbXSxleHByZXNzaW9uOkZYKG4udHlwZS52YWx1ZSxuLmludGVybmFsVHlwZSx0KX07bGV0IHI9bi5pbnRlcm5hbFR5cGUsbz1uZXcgc2g7cmV0dXJuIG8uc2V0KCJ0b2tlbiIsciksby5zZXQoImZhY3RvcnkiLGUuZXhwcmVzc2lvbiksbnVsbCE9PW4ucHJvdmlkZWRJbi5leHByZXNzaW9uLnZhbHVlJiZvLnNldCgicHJvdmlkZWRJbiIsZnVuY3Rpb24oe2V4cHJlc3Npb246bixmb3J3YXJkUmVmOnR9KXtzd2l0Y2godCl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gbjtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBUbih0ZS5mb3J3YXJkUmVmKS5jYWxsRm4oW3JhKFtdLFtuZXcgRG8obildKV0pfShuKX19KG4ucHJvdmlkZWRJbikpLHtleHByZXNzaW9uOlRuKHRlLlx1MDI3NVx1MDI3NWRlZmluZUluamVjdGFibGUpLmNhbGxGbihbby50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSx0eXBlOkZ3ZShuKSxzdGF0ZW1lbnRzOmUuc3RhdGVtZW50c319ZnVuY3Rpb24gRndlKG4pe3JldHVybiBuZXcgVmMoVG4odGUuSW5qZWN0YWJsZURlY2xhcmF0aW9uLFtJRChuLnR5cGUudHlwZSxuLnR5cGVBcmd1bWVudENvdW50KV0pKX1mdW5jdGlvbiBGWChuLHQsZSl7cmV0dXJuIG4ubm9kZT09PXQubm9kZT90LnByb3AoIlx1MDI3NWZhYyIpOk5YKGU/VG4odGUucmVzb2x2ZUZvcndhcmRSZWYpLmNhbGxGbihbdF0pOnQpfWZ1bmN0aW9uIE5YKG4pe3JldHVybiByYShbbmV3IGlhKCJ0IixWXyldLFtuZXcgRG8obi5wcm9wKCJcdTAyNzVmYWMiKS5jYWxsRm4oW1JpKCJ0IildKSldKX12YXIgTndlPVsvXlxzKiQvLC9bPD5dLywvXlt7fV0kLywvJigjfFthLXpdKS9pLC9eXC9cLy9dLERfPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWV9c3RhdGljIGZyb21BcnJheSh0KXtyZXR1cm4gdD8oZnVuY3Rpb24obix0KXtpZihudWxsIT10JiYoIUFycmF5LmlzQXJyYXkodCl8fDIhPXQubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkICdpbnRlcnBvbGF0aW9uJyB0byBiZSBhbiBhcnJheSwgW3N0YXJ0LCBlbmRdLiIpO2lmKG51bGwhPXQpe2xldCBlPXRbMF0saT10WzFdO053ZS5mb3JFYWNoKHI9PntpZihyLnRlc3QoZSl8fHIudGVzdChpKSl0aHJvdyBuZXcgRXJyb3IoYFsnJHtlfScsICcke2l9J10gY29udGFpbnMgdW51c2FibGUgaW50ZXJwb2xhdGlvbiBzeW1ib2wuYCl9KX19KDAsdCksbmV3IERfKHRbMF0sdFsxXSkpOlB1fX0sUHU9bmV3IERfKCJ7eyIsIn19IiksdGg9MTIzLE91PTEyNTtmdW5jdGlvbiBRVihuKXtyZXR1cm4gbj49OSYmbjw9MzJ8fDE2MD09bn1mdW5jdGlvbiAkcChuKXtyZXR1cm4gNDg8PW4mJm48PTU3fWZ1bmN0aW9uIEtWKG4pe3JldHVybiBuPj05NyYmbjw9MTIyfHxuPj02NSYmbjw9OTB9ZnVuY3Rpb24gY0sobil7cmV0dXJuIDEwPT09bnx8MTM9PT1ufWZ1bmN0aW9uIFZYKG4pe3JldHVybiA0ODw9biYmbjw9NTV9ZnVuY3Rpb24gV0Iobil7cmV0dXJuIDM5PT09bnx8MzQ9PT1ufHw5Nj09PW59dmFyIHZtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuZmlsZT10LHRoaXMub2Zmc2V0PWUsdGhpcy5saW5lPWksdGhpcy5jb2w9cn10b1N0cmluZygpe3JldHVybiBudWxsIT10aGlzLm9mZnNldD9gJHt0aGlzLmZpbGUudXJsfUAke3RoaXMubGluZX06JHt0aGlzLmNvbH1gOnRoaXMuZmlsZS51cmx9bW92ZUJ5KHQpe2xldCBlPXRoaXMuZmlsZS5jb250ZW50LGk9ZS5sZW5ndGgscj10aGlzLm9mZnNldCxvPXRoaXMubGluZSxzPXRoaXMuY29sO2Zvcig7cj4wJiZ0PDA7KWlmKHItLSx0KyssMTA9PWUuY2hhckNvZGVBdChyKSl7by0tO2xldCBsPWUuc3Vic3RyaW5nKDAsci0xKS5sYXN0SW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKSk7cz1sPjA/ci1sOnJ9ZWxzZSBzLS07Zm9yKDtyPGkmJnQ+MDspe2xldCBhPWUuY2hhckNvZGVBdChyKTtyKyssdC0tLDEwPT1hPyhvKysscz0wKTpzKyt9cmV0dXJuIG5ldyB2bSh0aGlzLmZpbGUscixvLHMpfWdldENvbnRleHQodCxlKXtsZXQgaT10aGlzLmZpbGUuY29udGVudCxyPXRoaXMub2Zmc2V0O2lmKG51bGwhPXIpe3I+aS5sZW5ndGgtMSYmKHI9aS5sZW5ndGgtMSk7bGV0IG89cixzPTAsYT0wO2Zvcig7czx0JiZyPjAmJihyLS0scysrLCJcbiIhPWlbcl18fCsrYSE9ZSk7KTtmb3Iocz0wLGE9MDtzPHQmJm88aS5sZW5ndGgtMSYmKG8rKyxzKyssIlxuIiE9aVtvXXx8KythIT1lKTspO3JldHVybntiZWZvcmU6aS5zdWJzdHJpbmcocix0aGlzLm9mZnNldCksYWZ0ZXI6aS5zdWJzdHJpbmcodGhpcy5vZmZzZXQsbysxKX19cmV0dXJuIG51bGx9fSxwRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29udGVudD10LHRoaXMudXJsPWV9fSxHbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT10LHI9bnVsbCl7dGhpcy5zdGFydD10LHRoaXMuZW5kPWUsdGhpcy5mdWxsU3RhcnQ9aSx0aGlzLmRldGFpbHM9cn10b1N0cmluZygpe3JldHVybiB0aGlzLnN0YXJ0LmZpbGUuY29udGVudC5zdWJzdHJpbmcodGhpcy5zdGFydC5vZmZzZXQsdGhpcy5lbmQub2Zmc2V0KX19LGt1PSgoKT0+e3JldHVybihuPWt1fHwoa3U9e30pKVtuLldBUk5JTkc9MF09IldBUk5JTkciLG5bbi5FUlJPUj0xXT0iRVJST1IiLGt1O3ZhciBufSkoKSx5bT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT1rdS5FUlJPUil7dGhpcy5zcGFuPXQsdGhpcy5tc2c9ZSx0aGlzLmxldmVsPWl9Y29udGV4dHVhbE1lc3NhZ2UoKXtsZXQgdD10aGlzLnNwYW4uc3RhcnQuZ2V0Q29udGV4dCgxMDAsMyk7cmV0dXJuIHQ/YCR7dGhpcy5tc2d9ICgiJHt0LmJlZm9yZX1bJHtrdVt0aGlzLmxldmVsXX0gLT5dJHt0LmFmdGVyfSIpYDp0aGlzLm1zZ310b1N0cmluZygpe2xldCB0PXRoaXMuc3Bhbi5kZXRhaWxzP2AsICR7dGhpcy5zcGFuLmRldGFpbHN9YDoiIjtyZXR1cm5gJHt0aGlzLmNvbnRleHR1YWxNZXNzYWdlKCl9OiAke3RoaXMuc3Bhbi5zdGFydH0ke3R9YH19LFp3ZT0wO2Z1bmN0aW9uIG1fKG4pe3JldHVybiBuLnJlcGxhY2UoL1xXL2csIl8iKX12YXIgSFQsSFg9Jyh0aGlzJiZ0aGlzLl9fbWFrZVRlbXBsYXRlT2JqZWN0fHxmdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHk/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInJhdyIse3ZhbHVlOnR9KTplLnJhdz10LGV9KScscUI9Y2xhc3MgZXh0ZW5kcyBOQntjb25zdHJ1Y3Rvcigpe3N1cGVyKCExKX12aXNpdFdyYXBwZWROb2RlRXhwcih0LGUpe3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGVtaXQgYSBXcmFwcGVkTm9kZUV4cHIgaW4gSmF2YXNjcmlwdC4iKX12aXNpdERlY2xhcmVWYXJTdG10KHQsZSl7cmV0dXJuIGUucHJpbnQodCxgdmFyICR7dC5uYW1lfWApLHQudmFsdWUmJihlLnByaW50KHQsIiA9ICIpLHQudmFsdWUudmlzaXRFeHByZXNzaW9uKHRoaXMsZSkpLGUucHJpbnRsbih0LCI7IiksbnVsbH12aXNpdFRhZ2dlZFRlbXBsYXRlRXhwcih0LGUpe2xldCBpPXQudGVtcGxhdGUuZWxlbWVudHM7cmV0dXJuIHQudGFnLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpLGUucHJpbnQodCxgKCR7SFh9KGApLGUucHJpbnQodCxgWyR7aS5tYXAocj0+cm0oci50ZXh0LCExKSkuam9pbigiLCAiKX1dLCBgKSxlLnByaW50KHQsYFske2kubWFwKHI9PnJtKHIucmF3VGV4dCwhMSkpLmpvaW4oIiwgIil9XSlgKSx0LnRlbXBsYXRlLmV4cHJlc3Npb25zLmZvckVhY2gocj0+e2UucHJpbnQodCwiLCAiKSxyLnZpc2l0RXhwcmVzc2lvbih0aGlzLGUpfSksZS5wcmludCh0LCIpIiksbnVsbH12aXNpdEZ1bmN0aW9uRXhwcih0LGUpe3JldHVybiBlLnByaW50KHQsYGZ1bmN0aW9uJHt0Lm5hbWU/IiAiK3QubmFtZToiIn0oYCksdGhpcy5fdmlzaXRQYXJhbXModC5wYXJhbXMsZSksZS5wcmludGxuKHQsIikgeyIpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC5zdGF0ZW1lbnRzLGUpLGUuZGVjSW5kZW50KCksZS5wcmludCh0LCJ9IiksbnVsbH12aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKXtyZXR1cm4gZS5wcmludCh0LGBmdW5jdGlvbiAke3QubmFtZX0oYCksdGhpcy5fdmlzaXRQYXJhbXModC5wYXJhbXMsZSksZS5wcmludGxuKHQsIikgeyIpLGUuaW5jSW5kZW50KCksdGhpcy52aXNpdEFsbFN0YXRlbWVudHModC5zdGF0ZW1lbnRzLGUpLGUuZGVjSW5kZW50KCksZS5wcmludGxuKHQsIn0iKSxudWxsfXZpc2l0TG9jYWxpemVkU3RyaW5nKHQsZSl7ZS5wcmludCh0LGAkbG9jYWxpemUoJHtIWH0oYCk7bGV0IGk9W3Quc2VyaWFsaXplSTE4bkhlYWQoKV07Zm9yKGxldCByPTE7cjx0Lm1lc3NhZ2VQYXJ0cy5sZW5ndGg7cisrKWkucHVzaCh0LnNlcmlhbGl6ZUkxOG5UZW1wbGF0ZVBhcnQocikpO3JldHVybiBlLnByaW50KHQsYFske2kubWFwKHI9PnJtKHIuY29va2VkLCExKSkuam9pbigiLCAiKX1dLCBgKSxlLnByaW50KHQsYFske2kubWFwKHI9PnJtKHIucmF3LCExKSkuam9pbigiLCAiKX1dKWApLHQuZXhwcmVzc2lvbnMuZm9yRWFjaChyPT57ZS5wcmludCh0LCIsICIpLHIudmlzaXRFeHByZXNzaW9uKHRoaXMsZSl9KSxlLnByaW50KHQsIikiKSxudWxsfV92aXNpdFBhcmFtcyh0LGUpe3RoaXMudmlzaXRBbGxPYmplY3RzKGk9PmUucHJpbnQobnVsbCxpLm5hbWUpLHQsZSwiLCIpfX07ZnVuY3Rpb24gVVgoLi4ubil7aWYoIXBfLnRydXN0ZWRUeXBlcylyZXR1cm4gbmV3IEZ1bmN0aW9uKC4uLm4pO2xldCBpPWAoZnVuY3Rpb24gYW5vbnltb3VzKCR7bi5zbGljZSgwLC0xKS5qb2luKCIsIil9XG4pIHsgJHtuW24ubGVuZ3RoLTFdfVxufSlgLHI9cF8uZXZhbChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih2b2lkIDA9PT1IVCYmKEhUPW51bGwscF8udHJ1c3RlZFR5cGVzKSl0cnl7SFQ9cF8udHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtaml0Iix7Y3JlYXRlU2NyaXB0Om49Pm59KX1jYXRjaHt9cmV0dXJuIEhUfSgpPy5jcmVhdGVTY3JpcHQobil8fG59KGkpKTtyZXR1cm4gdm9pZCAwPT09ci5iaW5kP25ldyBGdW5jdGlvbiguLi5uKTooci50b1N0cmluZz0oKT0+aSxyLmJpbmQocF8pKX12YXIgWEI9Y2xhc3MgZXh0ZW5kcyBxQntjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMucmVmUmVzb2x2ZXI9dCx0aGlzLl9ldmFsQXJnTmFtZXM9W10sdGhpcy5fZXZhbEFyZ1ZhbHVlcz1bXSx0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzPVtdfWNyZWF0ZVJldHVyblN0bXQodCl7bmV3IERvKG5ldyB4Xyh0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzLm1hcChpPT5uZXcgdEQoaSxSaShpKSwhMSkpKSkudmlzaXRTdGF0ZW1lbnQodGhpcyx0KX1nZXRBcmdzKCl7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTx0aGlzLl9ldmFsQXJnTmFtZXMubGVuZ3RoO2UrKyl0W3RoaXMuX2V2YWxBcmdOYW1lc1tlXV09dGhpcy5fZXZhbEFyZ1ZhbHVlc1tlXTtyZXR1cm4gdH12aXNpdEV4dGVybmFsRXhwcih0LGUpe3JldHVybiB0aGlzLl9lbWl0UmVmZXJlbmNlVG9FeHRlcm5hbCh0LHRoaXMucmVmUmVzb2x2ZXIucmVzb2x2ZUV4dGVybmFsUmVmZXJlbmNlKHQudmFsdWUpLGUpLG51bGx9dmlzaXRXcmFwcGVkTm9kZUV4cHIodCxlKXtyZXR1cm4gdGhpcy5fZW1pdFJlZmVyZW5jZVRvRXh0ZXJuYWwodCx0Lm5vZGUsZSksbnVsbH12aXNpdERlY2xhcmVWYXJTdG10KHQsZSl7cmV0dXJuIHQuaGFzTW9kaWZpZXIobGwuRXhwb3J0ZWQpJiZ0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzLnB1c2godC5uYW1lKSxzdXBlci52aXNpdERlY2xhcmVWYXJTdG10KHQsZSl9dmlzaXREZWNsYXJlRnVuY3Rpb25TdG10KHQsZSl7cmV0dXJuIHQuaGFzTW9kaWZpZXIobGwuRXhwb3J0ZWQpJiZ0aGlzLl9ldmFsRXhwb3J0ZWRWYXJzLnB1c2godC5uYW1lKSxzdXBlci52aXNpdERlY2xhcmVGdW5jdGlvblN0bXQodCxlKX1fZW1pdFJlZmVyZW5jZVRvRXh0ZXJuYWwodCxlLGkpe2xldCByPXRoaXMuX2V2YWxBcmdWYWx1ZXMuaW5kZXhPZihlKTtpZigtMT09PXIpe3I9dGhpcy5fZXZhbEFyZ1ZhbHVlcy5sZW5ndGgsdGhpcy5fZXZhbEFyZ1ZhbHVlcy5wdXNoKGUpO2xldCBvPWZ1bmN0aW9uKG4pe2lmKCFufHwhbi5yZWZlcmVuY2UpcmV0dXJuIG51bGw7bGV0IHQ9bi5yZWZlcmVuY2U7aWYodC5fX2Fub255bW91c1R5cGUpcmV0dXJuIHQuX19hbm9ueW1vdXNUeXBlO2lmKHQuX19mb3J3YXJkX3JlZl9fKXJldHVybiJfX2ZvcndhcmRfcmVmX18iO2xldCBlPWtRKHQpO3JldHVybiBlLmluZGV4T2YoIigiKT49MD8oZT0iYW5vbnltb3VzXyIrWndlKyssdC5fX2Fub255bW91c1R5cGU9ZSk6ZT1tXyhlKSxlfSh7cmVmZXJlbmNlOmV9KXx8InZhbCI7dGhpcy5fZXZhbEFyZ05hbWVzLnB1c2goYGppdF8ke299XyR7cn1gKX1pLnByaW50KHQsdGhpcy5fZXZhbEFyZ05hbWVzW3JdKX19O2Z1bmN0aW9uIHpYKG4pe2xldCB0PW5ldyBzaDtudWxsIT09bi5wcm92aWRlcnMmJnQuc2V0KCJwcm92aWRlcnMiLG4ucHJvdmlkZXJzKSxuLmltcG9ydHMubGVuZ3RoPjAmJnQuc2V0KCJpbXBvcnRzIixfcihuLmltcG9ydHMpKTtsZXQgZT1Ubih0ZS5kZWZpbmVJbmplY3RvcikuY2FsbEZuKFt0LnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGk9ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBWYyhUbih0ZS5JbmplY3RvckRlY2xhcmF0aW9uLFtuZXcgVmMobi50eXBlLnR5cGUpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgZ189KCgpPT57cmV0dXJuKG49Z198fChnXz17fSkpW24uSW5saW5lPTBdPSJJbmxpbmUiLG5bbi5TaWRlRWZmZWN0PTFdPSJTaWRlRWZmZWN0IixuW24uT21pdD0yXT0iT21pdCIsZ187dmFyIG59KSgpO2Z1bmN0aW9uIGlTZShuKXtsZXR7YWRqYWNlbnRUeXBlOnQsaW50ZXJuYWxUeXBlOmUsYm9vdHN0cmFwOmksZGVjbGFyYXRpb25zOnIsaW1wb3J0czpvLGV4cG9ydHM6cyxzY2hlbWFzOmEsY29udGFpbnNGb3J3YXJkRGVjbHM6bCxzZWxlY3RvclNjb3BlTW9kZTpjLGlkOnV9PW4sZD1bXSxwPW5ldyBzaDtpZihwLnNldCgidHlwZSIsZSksaS5sZW5ndGg+MCYmcC5zZXQoImJvb3RzdHJhcCIsb20oaSxsKSksYz09PWdfLklubGluZSlyLmxlbmd0aD4wJiZwLnNldCgiZGVjbGFyYXRpb25zIixvbShyLGwpKSxvLmxlbmd0aD4wJiZwLnNldCgiaW1wb3J0cyIsb20obyxsKSkscy5sZW5ndGg+MCYmcC5zZXQoImV4cG9ydHMiLG9tKHMsbCkpO2Vsc2UgaWYoYz09PWdfLlNpZGVFZmZlY3Qpe2xldCBtPWZ1bmN0aW9uKG4pe2xldHthZGphY2VudFR5cGU6dCxkZWNsYXJhdGlvbnM6ZSxpbXBvcnRzOmksZXhwb3J0czpyLGNvbnRhaW5zRm9yd2FyZERlY2xzOm99PW4scz1uZXcgc2g7aWYoZS5sZW5ndGg+MCYmcy5zZXQoImRlY2xhcmF0aW9ucyIsb20oZSxvKSksaS5sZW5ndGg+MCYmcy5zZXQoImltcG9ydHMiLG9tKGksbykpLHIubGVuZ3RoPjAmJnMuc2V0KCJleHBvcnRzIixvbShyLG8pKSwwPT09T2JqZWN0LmtleXMocy52YWx1ZXMpLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obix0KXtsZXQgZT1uZXcgeV8oe25hbWU6Im5nSml0TW9kZSIsbW9kdWxlTmFtZTpudWxsfSksaT1uZXcgZ3IoQ24uSWRlbnRpY2FsLG5ldyB2XyhlKSxodCgidW5kZWZpbmVkIikpLHI9bmV3IGdyKENuLk9yLGksZSx2b2lkIDAsdm9pZCAwLCEwKTtyZXR1cm4gbmV3IGdyKENuLkFuZCxyLHQpfSgwLG4pfShuZXcgb2goVG4odGUuc2V0TmdNb2R1bGVTY29wZSksW3Qscy50b0xpdGVyYWxNYXAoKV0pKSxjPW5ldyBwbShbXSxbbC50b1N0bXQoKV0pO3JldHVybiBuZXcgb2goYyxbXSkudG9TdG10KCl9KG4pO251bGwhPT1tJiZkLnB1c2gobSl9bnVsbCE9PWEmJmEubGVuZ3RoPjAmJnAuc2V0KCJzY2hlbWFzIixfcihhLm1hcChtPT5tLnZhbHVlKSkpLG51bGwhPT11JiYocC5zZXQoImlkIix1KSxkLnB1c2goVG4odGUucmVnaXN0ZXJOZ01vZHVsZVR5cGUpLmNhbGxGbihbdCx1XSkudG9TdG10KCkpKTtsZXQgaD1Ubih0ZS5kZWZpbmVOZ01vZHVsZSkuY2FsbEZuKFtwLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLGY9ZnVuY3Rpb24oe3R5cGU6bixkZWNsYXJhdGlvbnM6dCxleHBvcnRzOmUsaW1wb3J0czppLGluY2x1ZGVJbXBvcnRUeXBlczpyLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6b30pe3JldHVybiBuZXcgVmMoVG4odGUuTmdNb2R1bGVEZWNsYXJhdGlvbixbbmV3IFZjKG4udHlwZSksbnVsbD09PW8/YUIodCk6YVNlKG8pLHI/YUIoaSk6SmQsYUIoZSldKSl9KG4pO3JldHVybntleHByZXNzaW9uOmgsdHlwZTpmLHN0YXRlbWVudHM6ZH19ZnVuY3Rpb24gYUIobil7bGV0IHQ9bi5tYXAoZT0+QlYoZS50eXBlKSk7cmV0dXJuIG4ubGVuZ3RoPjA/dWwoX3IodCkpOkpkfWZ1bmN0aW9uIGFTZShuKXtsZXQgdD1uLm1hcChlPT5CVihlKSk7cmV0dXJuIG4ubGVuZ3RoPjA/dWwoX3IodCkpOkpkfWZ1bmN0aW9uIGpYKG4pe2xldCB0PVtdO3QucHVzaCh7a2V5OiJuYW1lIix2YWx1ZTpodChuLnBpcGVOYW1lKSxxdW90ZWQ6ITF9KSx0LnB1c2goe2tleToidHlwZSIsdmFsdWU6bi50eXBlLnZhbHVlLHF1b3RlZDohMX0pLHQucHVzaCh7a2V5OiJwdXJlIix2YWx1ZTpodChuLnB1cmUpLHF1b3RlZDohMX0pLG4uaXNTdGFuZGFsb25lJiZ0LnB1c2goe2tleToic3RhbmRhbG9uZSIsdmFsdWU6aHQoITApLHF1b3RlZDohMX0pO2xldCBlPVRuKHRlLmRlZmluZVBpcGUpLmNhbGxGbihbcWwodCldLHZvaWQgMCwhMCksaT1mdW5jdGlvbihuKXtyZXR1cm4gbmV3IFZjKFRuKHRlLlBpcGVEZWNsYXJhdGlvbixbSUQobi50eXBlLnR5cGUsbi50eXBlQXJndW1lbnRDb3VudCksbmV3IFZjKG5ldyBjbChuLnBpcGVOYW1lKSksbmV3IFZjKG5ldyBjbChuLmlzU3RhbmRhbG9uZSkpXSkpfShuKTtyZXR1cm57ZXhwcmVzc2lvbjplLHR5cGU6aSxzdGF0ZW1lbnRzOltdfX12YXIgX189KCgpPT57cmV0dXJuKG49X198fChfXz17fSkpW24uRGlyZWN0aXZlPTBdPSJEaXJlY3RpdmUiLG5bbi5QaXBlPTFdPSJQaXBlIixuW24uTmdNb2R1bGU9Ml09Ik5nTW9kdWxlIixfXzt2YXIgbn0pKCksUkM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5pbnB1dD1lLHRoaXMuZXJyTG9jYXRpb249aSx0aGlzLmN0eExvY2F0aW9uPXIsdGhpcy5tZXNzYWdlPWBQYXJzZXIgRXJyb3I6ICR7dH0gJHtpfSBbJHtlfV0gaW4gJHtyfWB9fSxibT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RhcnQ9dCx0aGlzLmVuZD1lfXRvQWJzb2x1dGUodCl7cmV0dXJuIG5ldyBhbCh0K3RoaXMuc3RhcnQsdCt0aGlzLmVuZCl9fSxBbz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3Bhbj10LHRoaXMuc291cmNlU3Bhbj1lfXRvU3RyaW5nKCl7cmV0dXJuIkFTVCJ9fSxBXz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMubmFtZVNwYW49aX19LElhPWNsYXNzIGV4dGVuZHMgQW97dmlzaXQodCxlPW51bGwpe319LHhtPWNsYXNzIGV4dGVuZHMgQW97dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0SW1wbGljaXRSZWNlaXZlcih0aGlzLGUpfX0sT0M9Y2xhc3MgZXh0ZW5kcyB4bXt2aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRUaGlzUmVjZWl2ZXI/Lih0aGlzLGUpfX0sa0M9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0Q2hhaW4odGhpcyxlKX19LEZDPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMuY29uZGl0aW9uPWksdGhpcy50cnVlRXhwPXIsdGhpcy5mYWxzZUV4cD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdENvbmRpdGlvbmFsKHRoaXMsZSl9fSxMdT1jbGFzcyBleHRlbmRzIEFfe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlLGkpLHRoaXMucmVjZWl2ZXI9cix0aGlzLm5hbWU9b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRQcm9wZXJ0eVJlYWQodGhpcyxlKX19LE5DPWNsYXNzIGV4dGVuZHMgQV97Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3N1cGVyKHQsZSxpKSx0aGlzLnJlY2VpdmVyPXIsdGhpcy5uYW1lPW8sdGhpcy52YWx1ZT1zfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByb3BlcnR5V3JpdGUodGhpcyxlKX19LExDPWNsYXNzIGV4dGVuZHMgQV97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUsaSksdGhpcy5yZWNlaXZlcj1yLHRoaXMubmFtZT1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFNhZmVQcm9wZXJ0eVJlYWQodGhpcyxlKX19LElfPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRLZXllZFJlYWQodGhpcyxlKX19LFBfPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlS2V5ZWRSZWFkKHRoaXMsZSl9fSxCQz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5rZXk9cix0aGlzLnZhbHVlPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0S2V5ZWRXcml0ZSh0aGlzLGUpfX0sUl89Y2xhc3MgZXh0ZW5kcyBBX3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLHMpLHRoaXMuZXhwPWksdGhpcy5uYW1lPXIsdGhpcy5hcmdzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0UGlwZSh0aGlzLGUpfX0sdGE9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLnZhbHVlPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0aGlzLGUpfX0sT189Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb25zPWl9dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0TGl0ZXJhbEFycmF5KHRoaXMsZSl9fSxWQz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5rZXlzPWksdGhpcy52YWx1ZXM9cn12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRMaXRlcmFsTWFwKHRoaXMsZSl9fSx2cz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSksdGhpcy5zdHJpbmdzPWksdGhpcy5leHByZXNzaW9ucz1yfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEludGVycG9sYXRpb24odGhpcyxlKX19LEdsPWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcih0LGUpLHRoaXMub3BlcmF0aW9uPWksdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1vfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdEJpbmFyeSh0aGlzLGUpfX0semM9Y2xhc3MgZXh0ZW5kcyBHbHtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcih0LGUsbyxzLGEpLHRoaXMub3BlcmF0b3I9aSx0aGlzLmV4cHI9cix0aGlzLmxlZnQ9bnVsbCx0aGlzLnJpZ2h0PW51bGwsdGhpcy5vcGVyYXRpb249bnVsbH1zdGF0aWMgY3JlYXRlTWludXModCxlLGkpe3JldHVybiBuZXcgemModCxlLCItIixpLCItIixuZXcgdGEodCxlLDApLGkpfXN0YXRpYyBjcmVhdGVQbHVzKHQsZSxpKXtyZXR1cm4gbmV3IHpjKHQsZSwiKyIsaSwiLSIsaSxuZXcgdGEodCxlLDApKX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHZvaWQgMCE9PXQudmlzaXRVbmFyeT90LnZpc2l0VW5hcnkodGhpcyxlKTp0LnZpc2l0QmluYXJ5KHRoaXMsZSl9fSxIQz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcih0LGUpLHRoaXMuZXhwcmVzc2lvbj1pfXZpc2l0KHQsZT1udWxsKXtyZXR1cm4gdC52aXNpdFByZWZpeE5vdCh0aGlzLGUpfX0sVUM9Y2xhc3MgZXh0ZW5kcyBBb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKSx0aGlzLmV4cHJlc3Npb249aX12aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXROb25OdWxsQXNzZXJ0KHRoaXMsZSl9fSxhaD1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRDYWxsKHRoaXMsZSl9fSxrXz1jbGFzcyBleHRlbmRzIEFve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIodCxlKSx0aGlzLnJlY2VpdmVyPWksdGhpcy5hcmdzPXIsdGhpcy5hcmd1bWVudFNwYW49b312aXNpdCh0LGU9bnVsbCl7cmV0dXJuIHQudmlzaXRTYWZlQ2FsbCh0aGlzLGUpfX0sYWw9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9ZX19LFJ1PWNsYXNzIGV4dGVuZHMgQW97Y29uc3RydWN0b3IodCxlLGkscixvKXtzdXBlcihuZXcgYm0oMCxudWxsPT09ZT8wOmUubGVuZ3RoKSxuZXcgYWwocixudWxsPT09ZT9yOnIrZS5sZW5ndGgpKSx0aGlzLmFzdD10LHRoaXMuc291cmNlPWUsdGhpcy5sb2NhdGlvbj1pLHRoaXMuZXJyb3JzPW99dmlzaXQodCxlPW51bGwpe3JldHVybiB0LnZpc2l0QVNUV2l0aFNvdXJjZT90LnZpc2l0QVNUV2l0aFNvdXJjZSh0aGlzLGUpOnRoaXMuYXN0LnZpc2l0KHQsZSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLnNvdXJjZX0gaW4gJHt0aGlzLmxvY2F0aW9ufWB9fSx6Qz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5zb3VyY2VTcGFuPXQsdGhpcy5rZXk9ZSx0aGlzLnZhbHVlPWl9fSxaQj1jbGFzc3t2aXNpdCh0LGUpe3QudmlzaXQodGhpcyxlKX12aXNpdFVuYXJ5KHQsZSl7dGhpcy52aXNpdCh0LmV4cHIsZSl9dmlzaXRCaW5hcnkodCxlKXt0aGlzLnZpc2l0KHQubGVmdCxlKSx0aGlzLnZpc2l0KHQucmlnaHQsZSl9dmlzaXRDaGFpbih0LGUpe3RoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7dGhpcy52aXNpdCh0LmNvbmRpdGlvbixlKSx0aGlzLnZpc2l0KHQudHJ1ZUV4cCxlKSx0aGlzLnZpc2l0KHQuZmFsc2VFeHAsZSl9dmlzaXRQaXBlKHQsZSl7dGhpcy52aXNpdCh0LmV4cCxlKSx0aGlzLnZpc2l0QWxsKHQuYXJncyxlKX12aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXt9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXt9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0S2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSksdGhpcy52aXNpdCh0LnZhbHVlLGUpfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zLGUpfXZpc2l0TGl0ZXJhbE1hcCh0LGUpe3RoaXMudmlzaXRBbGwodC52YWx1ZXMsZSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7fXZpc2l0UHJlZml4Tm90KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXROb25OdWxsQXNzZXJ0KHQsZSl7dGhpcy52aXNpdCh0LmV4cHJlc3Npb24sZSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC52YWx1ZSxlKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXQodC5rZXksZSl9dmlzaXRDYWxsKHQsZSl7dGhpcy52aXNpdCh0LnJlY2VpdmVyLGUpLHRoaXMudmlzaXRBbGwodC5hcmdzLGUpfXZpc2l0U2FmZUNhbGwodCxlKXt0aGlzLnZpc2l0KHQucmVjZWl2ZXIsZSksdGhpcy52aXNpdEFsbCh0LmFyZ3MsZSl9dmlzaXRBbGwodCxlKXtmb3IobGV0IGkgb2YgdCl0aGlzLnZpc2l0KGksZSl9fSxKQj1jbGFzc3t2aXNpdEltcGxpY2l0UmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdFRoaXNSZWNlaXZlcih0LGUpe3JldHVybiB0fXZpc2l0SW50ZXJwb2xhdGlvbih0LGUpe3JldHVybiBuZXcgdnModC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRMaXRlcmFsUHJpbWl0aXZlKHQsZSl7cmV0dXJuIG5ldyB0YSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQudmFsdWUpfXZpc2l0UHJvcGVydHlSZWFkKHQsZSl7cmV0dXJuIG5ldyBMdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sdC5yZWNlaXZlci52aXNpdCh0aGlzKSx0Lm5hbWUpfXZpc2l0UHJvcGVydHlXcml0ZSh0LGUpe3JldHVybiBuZXcgTkModC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0U2FmZVByb3BlcnR5UmVhZCh0LGUpe3JldHVybiBuZXcgTEModC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5uYW1lKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3JldHVybiBuZXcgT18odC5zcGFuLHQuc291cmNlU3Bhbix0aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpKX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IFZDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5rZXlzLHRoaXMudmlzaXRBbGwodC52YWx1ZXMpKX12aXNpdFVuYXJ5KHQsZSl7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIHpjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHIudmlzaXQodGhpcykpO2Nhc2UiLSI6cmV0dXJuIHpjLmNyZWF0ZU1pbnVzKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5leHByLnZpc2l0KHRoaXMpKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5rbm93biB1bmFyeSBvcGVyYXRvciAke3Qub3BlcmF0b3J9YCl9fXZpc2l0QmluYXJ5KHQsZSl7cmV0dXJuIG5ldyBHbCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLHQubGVmdC52aXNpdCh0aGlzKSx0LnJpZ2h0LnZpc2l0KHRoaXMpKX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiBuZXcgSEModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiBuZXcgVUModC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cHJlc3Npb24udmlzaXQodGhpcykpfXZpc2l0Q29uZGl0aW9uYWwodCxlKXtyZXR1cm4gbmV3IEZDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5jb25kaXRpb24udmlzaXQodGhpcyksdC50cnVlRXhwLnZpc2l0KHRoaXMpLHQuZmFsc2VFeHAudmlzaXQodGhpcykpfXZpc2l0UGlwZSh0LGUpe3JldHVybiBuZXcgUl8odC5zcGFuLHQuc291cmNlU3Bhbix0LmV4cC52aXNpdCh0aGlzKSx0Lm5hbWUsdGhpcy52aXNpdEFsbCh0LmFyZ3MpLHQubmFtZVNwYW4pfXZpc2l0S2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBJXyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfXZpc2l0S2V5ZWRXcml0ZSh0LGUpe3JldHVybiBuZXcgQkModC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHQua2V5LnZpc2l0KHRoaXMpLHQudmFsdWUudmlzaXQodGhpcykpfXZpc2l0Q2FsbCh0LGUpe3JldHVybiBuZXcgYWgodC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRTYWZlQ2FsbCh0LGUpe3JldHVybiBuZXcga18odC5zcGFuLHQuc291cmNlU3Bhbix0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHRoaXMudmlzaXRBbGwodC5hcmdzKSx0LmFyZ3VtZW50U3Bhbil9dmlzaXRBbGwodCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDsrK2kpZVtpXT10W2ldLnZpc2l0KHRoaXMpO3JldHVybiBlfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gbmV3IGtDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKSl9dmlzaXRTYWZlS2V5ZWRSZWFkKHQsZSl7cmV0dXJuIG5ldyBQXyh0LnNwYW4sdC5zb3VyY2VTcGFuLHQucmVjZWl2ZXIudmlzaXQodGhpcyksdC5rZXkudmlzaXQodGhpcykpfX0sJEI9Y2xhc3N7dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIHR9dmlzaXRUaGlzUmVjZWl2ZXIodCxlKXtyZXR1cm4gdH12aXNpdEludGVycG9sYXRpb24odCxlKXtsZXQgaT10aGlzLnZpc2l0QWxsKHQuZXhwcmVzc2lvbnMpO3JldHVybiBpIT09dC5leHByZXNzaW9ucz9uZXcgdnModC5zcGFuLHQuc291cmNlU3Bhbix0LnN0cmluZ3MsaSk6dH12aXNpdExpdGVyYWxQcmltaXRpdmUodCxlKXtyZXR1cm4gdH12aXNpdFByb3BlcnR5UmVhZCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyP25ldyBMdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4saSx0Lm5hbWUpOnR9dmlzaXRQcm9wZXJ0eVdyaXRlKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKSxyPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC52YWx1ZT9uZXcgTkModC5zcGFuLHQuc291cmNlU3Bhbix0Lm5hbWVTcGFuLGksdC5uYW1lLHIpOnR9dmlzaXRTYWZlUHJvcGVydHlSZWFkKHQsZSl7bGV0IGk9dC5yZWNlaXZlci52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQucmVjZWl2ZXI/bmV3IExDKHQuc3Bhbix0LnNvdXJjZVNwYW4sdC5uYW1lU3BhbixpLHQubmFtZSk6dH12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyk7cmV0dXJuIGkhPT10LmV4cHJlc3Npb25zP25ldyBPXyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpOnR9dmlzaXRMaXRlcmFsTWFwKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LnZhbHVlcyk7cmV0dXJuIGkhPT10LnZhbHVlcz9uZXcgVkModC5zcGFuLHQuc291cmNlU3Bhbix0LmtleXMsaSk6dH12aXNpdFVuYXJ5KHQsZSl7bGV0IGk9dC5leHByLnZpc2l0KHRoaXMpO2lmKGkhPT10LmV4cHIpc3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6cmV0dXJuIHpjLmNyZWF0ZVBsdXModC5zcGFuLHQuc291cmNlU3BhbixpKTtjYXNlIi0iOnJldHVybiB6Yy5jcmVhdGVNaW51cyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHVuYXJ5IG9wZXJhdG9yICR7dC5vcGVyYXRvcn1gKX1yZXR1cm4gdH12aXNpdEJpbmFyeSh0LGUpe2xldCBpPXQubGVmdC52aXNpdCh0aGlzKSxyPXQucmlnaHQudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmxlZnR8fHIhPT10LnJpZ2h0P25ldyBHbCh0LnNwYW4sdC5zb3VyY2VTcGFuLHQub3BlcmF0aW9uLGkscik6dH12aXNpdFByZWZpeE5vdCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgSEModC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbj9uZXcgVUModC5zcGFuLHQuc291cmNlU3BhbixpKTp0fXZpc2l0Q29uZGl0aW9uYWwodCxlKXtsZXQgaT10LmNvbmRpdGlvbi52aXNpdCh0aGlzKSxyPXQudHJ1ZUV4cC52aXNpdCh0aGlzKSxvPXQuZmFsc2VFeHAudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LmNvbmRpdGlvbnx8ciE9PXQudHJ1ZUV4cHx8byE9PXQuZmFsc2VFeHA/bmV3IEZDKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyLG8pOnR9dmlzaXRQaXBlKHQsZSl7bGV0IGk9dC5leHAudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LmV4cHx8ciE9PXQuYXJncz9uZXcgUl8odC5zcGFuLHQuc291cmNlU3BhbixpLHQubmFtZSxyLHQubmFtZVNwYW4pOnR9dmlzaXRLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IElfKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fXZpc2l0S2V5ZWRXcml0ZSh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10LmtleS52aXNpdCh0aGlzKSxvPXQudmFsdWUudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXl8fG8hPT10LnZhbHVlP25ldyBCQyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscixvKTp0fXZpc2l0QWxsKHQpe2xldCBlPVtdLGk9ITE7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3Ipe2xldCBvPXRbcl0scz1vLnZpc2l0KHRoaXMpO2Vbcl09cyxpPWl8fHMhPT1vfXJldHVybiBpP2U6dH12aXNpdENoYWluKHQsZSl7bGV0IGk9dGhpcy52aXNpdEFsbCh0LmV4cHJlc3Npb25zKTtyZXR1cm4gaSE9PXQuZXhwcmVzc2lvbnM/bmV3IGtDKHQuc3Bhbix0LnNvdXJjZVNwYW4saSk6dH12aXNpdENhbGwodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MpO3JldHVybiBpIT09dC5yZWNlaXZlcnx8ciE9PXQuYXJncz9uZXcgYWgodC5zcGFuLHQuc291cmNlU3BhbixpLHIsdC5hcmd1bWVudFNwYW4pOnR9dmlzaXRTYWZlQ2FsbCh0LGUpe2xldCBpPXQucmVjZWl2ZXIudmlzaXQodGhpcykscj10aGlzLnZpc2l0QWxsKHQuYXJncyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5hcmdzP25ldyBrXyh0LnNwYW4sdC5zb3VyY2VTcGFuLGkscix0LmFyZ3VtZW50U3Bhbik6dH12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtsZXQgaT10LnJlY2VpdmVyLnZpc2l0KHRoaXMpLHI9dC5rZXkudmlzaXQodGhpcyk7cmV0dXJuIGkhPT10LnJlY2VpdmVyfHxyIT09dC5rZXk/bmV3IFBfKHQuc3Bhbix0LnNvdXJjZVNwYW4saSxyKTp0fX0scEM9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMpe3RoaXMubmFtZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMudHlwZT1pLHRoaXMuc291cmNlU3Bhbj1yLHRoaXMua2V5U3Bhbj1vLHRoaXMudmFsdWVTcGFuPXMsdGhpcy5pc0xpdGVyYWw9dGhpcy50eXBlPT09aWguTElURVJBTF9BVFRSLHRoaXMuaXNBbmltYXRpb249dGhpcy50eXBlPT09aWguQU5JTUFUSU9OfX0saWg9KCgpPT57cmV0dXJuKG49aWh8fChpaD17fSkpW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkxJVEVSQUxfQVRUUj0xXT0iTElURVJBTF9BVFRSIixuW24uQU5JTUFUSU9OPTJdPSJBTklNQVRJT04iLGloO3ZhciBufSkoKSxoRD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLm5hbWU9dCx0aGlzLnRhcmdldE9yUGhhc2U9ZSx0aGlzLnR5cGU9aSx0aGlzLmhhbmRsZXI9cix0aGlzLnNvdXJjZVNwYW49byx0aGlzLmhhbmRsZXJTcGFuPXMsdGhpcy5rZXlTcGFuPWF9fSxlVj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLnNvdXJjZVNwYW49aSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vfX0sZkQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsKXt0aGlzLm5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNlY3VyaXR5Q29udGV4dD1pLHRoaXMudmFsdWU9cix0aGlzLnVuaXQ9byx0aGlzLnNvdXJjZVNwYW49cyx0aGlzLmtleVNwYW49YSx0aGlzLnZhbHVlU3Bhbj1sfX0sakM9Y2xhc3N7fTtmdW5jdGlvbiBjU2Uobix0LGUsaSxyLG8scyl7bnx8KG49bmV3IG1EKHMpKTtsZXQgYT1mdW5jdGlvbihuLHQpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBpVihuKTtyZXR1cm4gdC52aXNpdChlKX0obix0KX0oe2NyZWF0ZUxpdGVyYWxBcnJheUNvbnZlcnRlcjpkPT5wPT5fcihwKSxjcmVhdGVMaXRlcmFsTWFwQ29udmVydGVyOmQ9PnA9PnFsKGQubWFwKChmLG0pPT4oe2tleTpmLmtleSx2YWx1ZTpwW21dLHF1b3RlZDpmLnF1b3RlZH0pKSksY3JlYXRlUGlwZUNvbnZlcnRlcjpkPT57dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIFN0YXRlOiBBY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byBjb250YWluIHBpcGVzLiBQaXBlOiAke2R9YCl9fSxlKSxsPW5ldyBHQyhuLHQsaSwhMSxyLG8pLGM9W107aEsoYS52aXNpdChsLHppLlN0YXRlbWVudCksYyksZnVuY3Rpb24obix0LGUpe2ZvcihsZXQgaT1uLTE7aT49MDtpLS0pZS51bnNoaWZ0KHBLKHQsaSkpfShsLnRlbXBvcmFyeUNvdW50LGksYyksbC51c2VzSW1wbGljaXRSZWNlaXZlciYmbi5ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCk7bGV0IHU9Yy5sZW5ndGgtMTtpZih1Pj0wKXtsZXQgZD1jW3VdO2QgaW5zdGFuY2VvZiBIdSYmKGNbdV09bmV3IERvKGQuZXhwcikpfXJldHVybiBjfWZ1bmN0aW9uIHVLKG4sdCxlLGkpe258fChuPW5ldyBtRCk7bGV0IHI9bmV3IEdDKG4sdCxpLCExKSxvPWUudmlzaXQocix6aS5FeHByZXNzaW9uKSxzPWRLKHIsaSk7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc3RtdHM9dCx0aGlzLmN1cnJWYWxFeHByPWV9fShzLG8pfWZ1bmN0aW9uIGRLKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTA7aTxuLnRlbXBvcmFyeUNvdW50O2krKyllLnB1c2gocEsodCxpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gblYobix0KXtyZXR1cm5gdG1wXyR7bn1fJHt0fWB9ZnVuY3Rpb24gcEsobix0KXtyZXR1cm4gbmV3IFZ1KG5WKG4sdCkpfWpDLmV2ZW50PVJpKCIkZXZlbnQiKTt2YXIgemk9KCgpPT57cmV0dXJuKG49eml8fCh6aT17fSkpW24uU3RhdGVtZW50PTBdPSJTdGF0ZW1lbnQiLG5bbi5FeHByZXNzaW9uPTFdPSJFeHByZXNzaW9uIix6aTt2YXIgbn0pKCk7ZnVuY3Rpb24gR1gobix0KXtpZihuIT09emkuRXhwcmVzc2lvbil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGFuIGV4cHJlc3Npb24sIGJ1dCBzYXcgJHt0fWApfWZ1bmN0aW9uICRzKG4sdCl7cmV0dXJuIG49PT16aS5TdGF0ZW1lbnQ/dC50b1N0bXQoKTp0fXZhciBpVj1jbGFzcyBleHRlbmRzIEpCe2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5fY29udmVydGVyRmFjdG9yeT10fXZpc2l0UGlwZSh0LGUpe2xldCBpPVt0LmV4cCwuLi50LmFyZ3NdLm1hcChyPT5yLnZpc2l0KHRoaXMsZSkpO3JldHVybiBuZXcgcmgodC5zcGFuLHQuc291cmNlU3BhbixpLHRoaXMuX2NvbnZlcnRlckZhY3RvcnkuY3JlYXRlUGlwZUNvbnZlcnRlcih0Lm5hbWUsaS5sZW5ndGgpKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe2xldCBpPXQuZXhwcmVzc2lvbnMubWFwKHI9PnIudmlzaXQodGhpcyxlKSk7cmV0dXJuIG5ldyByaCh0LnNwYW4sdC5zb3VyY2VTcGFuLGksdGhpcy5fY29udmVydGVyRmFjdG9yeS5jcmVhdGVMaXRlcmFsQXJyYXlDb252ZXJ0ZXIodC5leHByZXNzaW9ucy5sZW5ndGgpKX12aXNpdExpdGVyYWxNYXAodCxlKXtsZXQgaT10LnZhbHVlcy5tYXAocj0+ci52aXNpdCh0aGlzLGUpKTtyZXR1cm4gbmV3IHJoKHQuc3Bhbix0LnNvdXJjZVNwYW4saSx0aGlzLl9jb252ZXJ0ZXJGYWN0b3J5LmNyZWF0ZUxpdGVyYWxNYXBDb252ZXJ0ZXIodC5rZXlzKSl9fSxHQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7dGhpcy5fbG9jYWxSZXNvbHZlcj10LHRoaXMuX2ltcGxpY2l0UmVjZWl2ZXI9ZSx0aGlzLmJpbmRpbmdJZD1pLHRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uPXIsdGhpcy5iYXNlU291cmNlU3Bhbj1vLHRoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzPXMsdGhpcy5fbm9kZU1hcD1uZXcgTWFwLHRoaXMuX3Jlc3VsdE1hcD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRUZW1wb3Jhcnk9MCx0aGlzLnRlbXBvcmFyeUNvdW50PTAsdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMX12aXNpdFVuYXJ5KHQsZSl7bGV0IGk7c3dpdGNoKHQub3BlcmF0b3Ipe2Nhc2UiKyI6aT1hbS5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1hbS5NaW51czticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0b3IgJHt0Lm9wZXJhdG9yfWApfXJldHVybiAkcyhlLG5ldyBDQyhpLHRoaXMuX3Zpc2l0KHQuZXhwcix6aS5FeHByZXNzaW9uKSx2b2lkIDAsdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRCaW5hcnkodCxlKXtsZXQgaTtzd2l0Y2godC5vcGVyYXRpb24pe2Nhc2UiKyI6aT1Dbi5QbHVzO2JyZWFrO2Nhc2UiLSI6aT1Dbi5NaW51czticmVhaztjYXNlIioiOmk9Q24uTXVsdGlwbHk7YnJlYWs7Y2FzZSIvIjppPUNuLkRpdmlkZTticmVhaztjYXNlIiUiOmk9Q24uTW9kdWxvO2JyZWFrO2Nhc2UiJiYiOmk9Q24uQW5kO2JyZWFrO2Nhc2UifHwiOmk9Q24uT3I7YnJlYWs7Y2FzZSI9PSI6aT1Dbi5FcXVhbHM7YnJlYWs7Y2FzZSIhPSI6aT1Dbi5Ob3RFcXVhbHM7YnJlYWs7Y2FzZSI9PT0iOmk9Q24uSWRlbnRpY2FsO2JyZWFrO2Nhc2UiIT09IjppPUNuLk5vdElkZW50aWNhbDticmVhaztjYXNlIjwiOmk9Q24uTG93ZXI7YnJlYWs7Y2FzZSI+IjppPUNuLkJpZ2dlcjticmVhaztjYXNlIjw9IjppPUNuLkxvd2VyRXF1YWxzO2JyZWFrO2Nhc2UiPj0iOmk9Q24uQmlnZ2VyRXF1YWxzO2JyZWFrO2Nhc2UiPz8iOnJldHVybiB0aGlzLmNvbnZlcnROdWxsaXNoQ29hbGVzY2UodCxlKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uICR7dC5vcGVyYXRpb259YCl9cmV0dXJuICRzKGUsbmV3IGdyKGksdGhpcy5fdmlzaXQodC5sZWZ0LHppLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQucmlnaHQsemkuRXhwcmVzc2lvbiksdm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0Q2hhaW4odCxlKXtyZXR1cm4gZnVuY3Rpb24obix0KXtpZihuIT09emkuU3RhdGVtZW50KXRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQsIGJ1dCBzYXcgJHt0fWApfShlLHQpLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyxlKX12aXNpdENvbmRpdGlvbmFsKHQsZSl7cmV0dXJuICRzKGUsdGhpcy5fdmlzaXQodC5jb25kaXRpb24semkuRXhwcmVzc2lvbikuY29uZGl0aW9uYWwodGhpcy5fdmlzaXQodC50cnVlRXhwLHppLkV4cHJlc3Npb24pLHRoaXMuX3Zpc2l0KHQuZmFsc2VFeHAsemkuRXhwcmVzc2lvbiksdGhpcy5jb252ZXJ0U291cmNlU3Bhbih0LnNwYW4pKSl9dmlzaXRQaXBlKHQsZSl7dGhyb3cgbmV3IEVycm9yKGBJbGxlZ2FsIHN0YXRlOiBQaXBlcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucy4gUGlwZTogJHt0Lm5hbWV9YCl9dmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl7cmV0dXJuIEdYKGUsdCksdGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj0hMCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyfXZpc2l0VGhpc1JlY2VpdmVyKHQsZSl7cmV0dXJuIHRoaXMudmlzaXRJbXBsaWNpdFJlY2VpdmVyKHQsZSl9dmlzaXRJbnRlcnBvbGF0aW9uKHQsZSl7aWYoIXRoaXMuc3VwcG9ydHNJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnRlcnBvbGF0aW9uIik7R1goZSx0KTtsZXQgaT1bXTtmb3IobGV0IG89MDtvPHQuc3RyaW5ncy5sZW5ndGgtMTtvKyspaS5wdXNoKGh0KHQuc3RyaW5nc1tvXSkpLGkucHVzaCh0aGlzLl92aXNpdCh0LmV4cHJlc3Npb25zW29dLHppLkV4cHJlc3Npb24pKTtpLnB1c2goaHQodC5zdHJpbmdzW3Quc3RyaW5ncy5sZW5ndGgtMV0pKTtsZXQgcj10LnN0cmluZ3M7cmV0dXJuIDI9PT1yLmxlbmd0aCYmIiI9PT1yWzBdJiYiIj09PXJbMV0/aT1baVsxXV06dC5leHByZXNzaW9ucy5sZW5ndGg+PTkmJihpPVtfcihpKV0pLG5ldyByVihpKX12aXNpdEtleWVkUmVhZCh0LGUpe2xldCBpPXRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KTtyZXR1cm4gaT90aGlzLmNvbnZlcnRTYWZlQWNjZXNzKHQsaSxlKTokcyhlLHRoaXMuX3Zpc2l0KHQucmVjZWl2ZXIsemkuRXhwcmVzc2lvbikua2V5KHRoaXMuX3Zpc2l0KHQua2V5LHppLkV4cHJlc3Npb24pKSl9dmlzaXRLZXllZFdyaXRlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5yZWNlaXZlcix6aS5FeHByZXNzaW9uKSxyPXRoaXMuX3Zpc2l0KHQua2V5LHppLkV4cHJlc3Npb24pLG89dGhpcy5fdmlzaXQodC52YWx1ZSx6aS5FeHByZXNzaW9uKTtyZXR1cm4gaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJnRoaXMuX2xvY2FsUmVzb2x2ZXIubWF5YmVSZXN0b3JlVmlldygpLCRzKGUsaS5rZXkocikuc2V0KG8pKX12aXNpdExpdGVyYWxBcnJheSh0LGUpe3Rocm93IG5ldyBFcnJvcigiSWxsZWdhbCBTdGF0ZTogbGl0ZXJhbCBhcnJheXMgc2hvdWxkIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBmdW5jdGlvbnMiKX12aXNpdExpdGVyYWxNYXAodCxlKXt0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgU3RhdGU6IGxpdGVyYWwgbWFwcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIGZ1bmN0aW9ucyIpfXZpc2l0TGl0ZXJhbFByaW1pdGl2ZSh0LGUpe3JldHVybiAkcyhlLGh0KHQudmFsdWUsbnVsbD09dC52YWx1ZXx8ITA9PT10LnZhbHVlfHwhMD09PXQudmFsdWU/UGE6dm9pZCAwLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfV9nZXRMb2NhbCh0LGUpe3JldHVybiB0aGlzLl9sb2NhbFJlc29sdmVyLmdsb2JhbHM/Lmhhcyh0KSYmZSBpbnN0YW5jZW9mIE9DP251bGw6dGhpcy5fbG9jYWxSZXNvbHZlci5nZXRMb2NhbCh0KX12aXNpdFByZWZpeE5vdCh0LGUpe3JldHVybiAkcyhlLGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG5ldyB4QyhuLHZvaWQgMCl9KHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbix6aS5FeHByZXNzaW9uKSkpfXZpc2l0Tm9uTnVsbEFzc2VydCh0LGUpe3JldHVybiAkcyhlLHRoaXMuX3Zpc2l0KHQuZXhwcmVzc2lvbix6aS5FeHByZXNzaW9uKSl9dmlzaXRQcm9wZXJ0eVJlYWQodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7e2xldCByPW51bGwsbz10aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyLHM9dGhpcy5fdmlzaXQodC5yZWNlaXZlcix6aS5FeHByZXNzaW9uKTtyZXR1cm4gcz09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXImJihyPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKSxyJiYodGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcj1vLHRoaXMuYWRkSW1wbGljaXRSZWNlaXZlckFjY2Vzcyh0Lm5hbWUpKSksbnVsbD09ciYmKHI9cy5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSwkcyhlLHIpfX12aXNpdFByb3BlcnR5V3JpdGUodCxlKXtsZXQgaT10aGlzLl92aXNpdCh0LnJlY2VpdmVyLHppLkV4cHJlc3Npb24pLHI9dGhpcy51c2VzSW1wbGljaXRSZWNlaXZlcixvPW51bGw7aWYoaT09PXRoaXMuX2ltcGxpY2l0UmVjZWl2ZXIpe2xldCBzPXRoaXMuX2dldExvY2FsKHQubmFtZSx0LnJlY2VpdmVyKTtpZihzKXtpZighKHMgaW5zdGFuY2VvZiBiXykpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXNzaWduIHZhbHVlICIke3QudmFsdWUgaW5zdGFuY2VvZiBMdT90LnZhbHVlLm5hbWU6dm9pZCAwfSIgdG8gdGVtcGxhdGUgdmFyaWFibGUgIiR7dC5uYW1lfSIuIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LmApO289cyx0aGlzLnVzZXNJbXBsaWNpdFJlY2VpdmVyPXIsdGhpcy5hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQubmFtZSl9fXJldHVybiBudWxsPT09byYmKG89aS5wcm9wKHQubmFtZSx0aGlzLmNvbnZlcnRTb3VyY2VTcGFuKHQuc3BhbikpKSwkcyhlLG8uc2V0KHRoaXMuX3Zpc2l0KHQudmFsdWUsemkuRXhwcmVzc2lvbikpKX12aXNpdFNhZmVQcm9wZXJ0eVJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdFNhZmVLZXllZFJlYWQodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX12aXNpdEFsbCh0LGUpe3JldHVybiB0Lm1hcChpPT50aGlzLl92aXNpdChpLGUpKX12aXNpdENhbGwodCxlKXtsZXQgaT10aGlzLmxlZnRNb3N0U2FmZU5vZGUodCk7aWYoaSlyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LGksZSk7bGV0IHI9dGhpcy52aXNpdEFsbCh0LmFyZ3MsemkuRXhwcmVzc2lvbik7aWYodCBpbnN0YW5jZW9mIHJoKXJldHVybiAkcyhlLHQuY29udmVydGVyKHIpKTtsZXQgbz10LnJlY2VpdmVyO2lmKG8gaW5zdGFuY2VvZiBMdSYmby5yZWNlaXZlciBpbnN0YW5jZW9mIHhtJiYhKG8ucmVjZWl2ZXIgaW5zdGFuY2VvZiBPQykmJiIkYW55Ij09PW8ubmFtZSl7aWYoMSE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYWxsIHRvICRhbnksIGV4cGVjdGVkIDEgYXJndW1lbnQgYnV0IHJlY2VpdmVkICR7ci5sZW5ndGh8fCJub25lIn1gKTtyZXR1cm4gJHMoZSxyWzBdKX1yZXR1cm4gJHMoZSx0aGlzLl92aXNpdChvLHppLkV4cHJlc3Npb24pLmNhbGxGbihyLHRoaXMuY29udmVydFNvdXJjZVNwYW4odC5zcGFuKSkpfXZpc2l0U2FmZUNhbGwodCxlKXtyZXR1cm4gdGhpcy5jb252ZXJ0U2FmZUFjY2Vzcyh0LHRoaXMubGVmdE1vc3RTYWZlTm9kZSh0KSxlKX1fdmlzaXQodCxlKXtyZXR1cm4gdGhpcy5fcmVzdWx0TWFwLmdldCh0KXx8KHRoaXMuX25vZGVNYXAuZ2V0KHQpfHx0KS52aXNpdCh0aGlzLGUpfWNvbnZlcnRTYWZlQWNjZXNzKHQsZSxpKXtsZXQgbyxyPXRoaXMuX3Zpc2l0KGUucmVjZWl2ZXIsemkuRXhwcmVzc2lvbik7dGhpcy5uZWVkc1RlbXBvcmFyeUluU2FmZUFjY2VzcyhlLnJlY2VpdmVyKSYmKG89dGhpcy5hbGxvY2F0ZVRlbXBvcmFyeSgpLHI9by5zZXQociksdGhpcy5fcmVzdWx0TWFwLnNldChlLnJlY2VpdmVyLG8pKTtsZXQgcz1yLmlzQmxhbmsoKTt0aGlzLl9ub2RlTWFwLnNldChlLGUgaW5zdGFuY2VvZiBrXz9uZXcgYWgoZS5zcGFuLGUuc291cmNlU3BhbixlLnJlY2VpdmVyLGUuYXJncyxlLmFyZ3VtZW50U3Bhbik6ZSBpbnN0YW5jZW9mIFBfP25ldyBJXyhlLnNwYW4sZS5zb3VyY2VTcGFuLGUucmVjZWl2ZXIsZS5rZXkpOm5ldyBMdShlLnNwYW4sZS5zb3VyY2VTcGFuLGUubmFtZVNwYW4sZS5yZWNlaXZlcixlLm5hbWUpKTtsZXQgYT10aGlzLl92aXNpdCh0LHppLkV4cHJlc3Npb24pO3JldHVybiB0aGlzLl9ub2RlTWFwLmRlbGV0ZShlKSxvJiZ0aGlzLnJlbGVhc2VUZW1wb3JhcnkobyksJHMoaSxzLmNvbmRpdGlvbmFsKFBCLGEpKX1jb252ZXJ0TnVsbGlzaENvYWxlc2NlKHQsZSl7bGV0IGk9dGhpcy5fdmlzaXQodC5sZWZ0LHppLkV4cHJlc3Npb24pLHI9dGhpcy5fdmlzaXQodC5yaWdodCx6aS5FeHByZXNzaW9uKSxvPXRoaXMuYWxsb2NhdGVUZW1wb3JhcnkoKTtyZXR1cm4gdGhpcy5yZWxlYXNlVGVtcG9yYXJ5KG8pLCRzKGUsby5zZXQoaSkubm90SWRlbnRpY2FsKFBCKS5hbmQoby5ub3RJZGVudGljYWwoaHQodm9pZCAwKSkpLmNvbmRpdGlvbmFsKG8scikpfWxlZnRNb3N0U2FmZU5vZGUodCl7bGV0IGU9KGkscik9Pih0aGlzLl9ub2RlTWFwLmdldChyKXx8cikudmlzaXQoaSk7cmV0dXJuIHQudmlzaXQoe3Zpc2l0VW5hcnk6aT0+bnVsbCx2aXNpdEJpbmFyeTppPT5udWxsLHZpc2l0Q2hhaW46aT0+bnVsbCx2aXNpdENvbmRpdGlvbmFsOmk9Pm51bGwsdmlzaXRDYWxsKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil9LHZpc2l0U2FmZUNhbGwoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKXx8aX0sdmlzaXRJbXBsaWNpdFJlY2VpdmVyOmk9Pm51bGwsdmlzaXRUaGlzUmVjZWl2ZXI6aT0+bnVsbCx2aXNpdEludGVycG9sYXRpb246aT0+bnVsbCx2aXNpdEtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfSx2aXNpdEtleWVkV3JpdGU6aT0+bnVsbCx2aXNpdExpdGVyYWxBcnJheTppPT5udWxsLHZpc2l0TGl0ZXJhbE1hcDppPT5udWxsLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTppPT5udWxsLHZpc2l0UGlwZTppPT5udWxsLHZpc2l0UHJlZml4Tm90Omk9Pm51bGwsdmlzaXROb25OdWxsQXNzZXJ0Omk9Pm51bGwsdmlzaXRQcm9wZXJ0eVJlYWQoaSl7cmV0dXJuIGUodGhpcyxpLnJlY2VpdmVyKX0sdmlzaXRQcm9wZXJ0eVdyaXRlOmk9Pm51bGwsdmlzaXRTYWZlUHJvcGVydHlSZWFkKGkpe3JldHVybiBlKHRoaXMsaS5yZWNlaXZlcil8fGl9LHZpc2l0U2FmZUtleWVkUmVhZChpKXtyZXR1cm4gZSh0aGlzLGkucmVjZWl2ZXIpfHxpfX0pfW5lZWRzVGVtcG9yYXJ5SW5TYWZlQWNjZXNzKHQpe2xldCBlPShyLG8pPT5vJiYodGhpcy5fbm9kZU1hcC5nZXQobyl8fG8pLnZpc2l0KHIpO3JldHVybiB0LnZpc2l0KHt2aXNpdFVuYXJ5KHIpe3JldHVybiBlKHRoaXMsci5leHByKX0sdmlzaXRCaW5hcnkocil7cmV0dXJuIGUodGhpcyxyLmxlZnQpfHxlKHRoaXMsci5yaWdodCl9LHZpc2l0Q2hhaW46cj0+ITEsdmlzaXRDb25kaXRpb25hbChyKXtyZXR1cm4gZSh0aGlzLHIuY29uZGl0aW9uKXx8ZSh0aGlzLHIudHJ1ZUV4cCl8fGUodGhpcyxyLmZhbHNlRXhwKX0sdmlzaXRDYWxsOnI9PiEwLHZpc2l0U2FmZUNhbGw6cj0+ITAsdmlzaXRJbXBsaWNpdFJlY2VpdmVyOnI9PiExLHZpc2l0VGhpc1JlY2VpdmVyOnI9PiExLHZpc2l0SW50ZXJwb2xhdGlvbihyKXtyZXR1cm4oKHIsbyk9Pm8uc29tZShzPT5lKHIscykpKSh0aGlzLHIuZXhwcmVzc2lvbnMpfSx2aXNpdEtleWVkUmVhZDpyPT4hMSx2aXNpdEtleWVkV3JpdGU6cj0+ITEsdmlzaXRMaXRlcmFsQXJyYXk6cj0+ITAsdmlzaXRMaXRlcmFsTWFwOnI9PiEwLHZpc2l0TGl0ZXJhbFByaW1pdGl2ZTpyPT4hMSx2aXNpdFBpcGU6cj0+ITAsdmlzaXRQcmVmaXhOb3Qocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdE5vbk51bGxBc3NlcnQocil7cmV0dXJuIGUodGhpcyxyLmV4cHJlc3Npb24pfSx2aXNpdFByb3BlcnR5UmVhZDpyPT4hMSx2aXNpdFByb3BlcnR5V3JpdGU6cj0+ITEsdmlzaXRTYWZlUHJvcGVydHlSZWFkOnI9PiExLHZpc2l0U2FmZUtleWVkUmVhZDpyPT4hMX0pfWFsbG9jYXRlVGVtcG9yYXJ5KCl7bGV0IHQ9dGhpcy5fY3VycmVudFRlbXBvcmFyeSsrO3JldHVybiB0aGlzLnRlbXBvcmFyeUNvdW50PU1hdGgubWF4KHRoaXMuX2N1cnJlbnRUZW1wb3JhcnksdGhpcy50ZW1wb3JhcnlDb3VudCksbmV3IHVtKG5WKHRoaXMuYmluZGluZ0lkLHQpKX1yZWxlYXNlVGVtcG9yYXJ5KHQpe2lmKHRoaXMuX2N1cnJlbnRUZW1wb3JhcnktLSx0Lm5hbWUhPW5WKHRoaXMuYmluZGluZ0lkLHRoaXMuX2N1cnJlbnRUZW1wb3JhcnkpKXRocm93IG5ldyBFcnJvcihgVGVtcG9yYXJ5ICR7dC5uYW1lfSByZWxlYXNlZCBvdXQgb2Ygb3JkZXJgKX1jb252ZXJ0U291cmNlU3Bhbih0KXtpZih0aGlzLmJhc2VTb3VyY2VTcGFuKXtsZXQgZT10aGlzLmJhc2VTb3VyY2VTcGFuLnN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KSxpPXRoaXMuYmFzZVNvdXJjZVNwYW4uc3RhcnQubW92ZUJ5KHQuZW5kKSxyPXRoaXMuYmFzZVNvdXJjZVNwYW4uZnVsbFN0YXJ0Lm1vdmVCeSh0LnN0YXJ0KTtyZXR1cm4gbmV3IEdvKGUsaSxyKX1yZXR1cm4gbnVsbH1hZGRJbXBsaWNpdFJlY2VpdmVyQWNjZXNzKHQpe3RoaXMuaW1wbGljaXRSZWNlaXZlckFjY2Vzc2VzJiZ0aGlzLmltcGxpY2l0UmVjZWl2ZXJBY2Nlc3Nlcy5hZGQodCl9fTtmdW5jdGlvbiBoSyhuLHQpe0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKGU9PmhLKGUsdCkpOnQucHVzaChuKX1mdW5jdGlvbiBsQigpe3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uIil9dmFyIHJWPWNsYXNzIGV4dGVuZHMgT3J7Y29uc3RydWN0b3IodCl7c3VwZXIobnVsbCxudWxsKSx0aGlzLmFyZ3M9dCx0aGlzLmlzQ29uc3RhbnQ9bEIsdGhpcy5pc0VxdWl2YWxlbnQ9bEIsdGhpcy52aXNpdEV4cHJlc3Npb249bEJ9fSxtRD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdsb2JhbHM9dH1ub3RpZnlJbXBsaWNpdFJlY2VpdmVyVXNlKCl7fW1heWJlUmVzdG9yZVZpZXcoKXt9Z2V0TG9jYWwodCl7cmV0dXJuIHQ9PT1qQy5ldmVudC5uYW1lP2pDLmV2ZW50Om51bGx9fSxyaD1jbGFzcyBleHRlbmRzIGFoe2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxuZXcgSWEodCxlKSxpLG51bGwpLHRoaXMuY29udmVydGVyPXJ9fSxtU2U9L3BvbHlmaWxsLW5leHQtc2VsZWN0b3JbXn1dKmNvbnRlbnQ6W1xzXSo/KFsnIl0pKC4qPylcMVs7XHNdKn0oW157XSo/KXsvZ2ltLGdTZT0vKHBvbHlmaWxsLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxXWD0vKHBvbHlmaWxsLXVuc2NvcGVkLXJ1bGUpW159XSooY29udGVudDpbXHNdKihbJyJdKSguKj8pXDMpWztcc10qW159XSp9L2dpbSxnRD0iLXNoYWRvd2Nzc2hvc3QiLFpWPSItc2hhZG93Y3NzY29udGV4dCIsSlY9Iig/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSk/KFteLHtdKikiLF9TZT1uZXcgUmVnRXhwKGdEK0pWLCJnaW0iKSx2U2U9bmV3IFJlZ0V4cChaVitKViwiZ2ltIikseVNlPW5ldyBSZWdFeHAoWlYrSlYsImltIiksdG09Z0QrIi1uby1jb21iaW5hdG9yIixxWD0vLXNoYWRvd2Nzc2hvc3Qtbm8tY29tYmluYXRvcihbXlxzXSopLyxiU2U9Wy86OnNoYWRvdy9nLC86OmNvbnRlbnQvZywvXC9zaGFkb3ctZGVlcFwvL2csL1wvc2hhZG93XC8vZ10sWVg9Lyg/Oj4+Pil8KD86XC9kZWVwXC8pfCg/Ojo6bmctZGVlcCkvZyxkXz0vLXNoYWRvd2Nzc2hvc3QvZ2ltLENTZT0vOmhvc3QvZ2ltLE1TZT0vOmhvc3QtY29udGV4dC9naW0sd1NlPS9cL1wqW1xzXFNdKj9cKlwvL2csRVNlPS9cL1wqXHMqI1xzKnNvdXJjZShNYXBwaW5nKT9VUkw9W1xzXFNdKz9cKlwvL2csY0I9IiVCTE9DSyUiLEFTZT0vKFxzKikoW147XHtcfV0rPykoXHMqKSgoPzp7JUJMT0NLJX0/XHMqOz8pfCg/OlxzKjspKS9nLElTZT0vJVFVT1RFRCUvZyxQU2U9bmV3IE1hcChbWyJ7IiwifSJdXSksUlNlPW5ldyBNYXAoW1snIicsJyInXSxbIiciLCInIl1dKSxXQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc2VsZWN0b3I9dCx0aGlzLmNvbnRlbnQ9ZX19O2Z1bmN0aW9uIFhYKG4sdCl7bGV0IGU9UVgobixSU2UsIiVRVU9URUQlIiksaT1RWChlLmVzY2FwZWRTdHJpbmcsUFNlLGNCKSxyPTAsbz0wO3JldHVybiBpLmVzY2FwZWRTdHJpbmcucmVwbGFjZShBU2UsKC4uLnMpPT57bGV0IGE9c1syXSxsPSIiLGM9c1s0XSx1PSIiO2MmJmMuc3RhcnRzV2l0aCgieyIrY0IpJiYobD1pLmJsb2Nrc1tyKytdLGM9Yy5zdWJzdHJpbmcoY0IubGVuZ3RoKzEpLHU9InsiKTtsZXQgZD10KG5ldyBXQyhhLGwpKTtyZXR1cm5gJHtzWzFdfSR7ZC5zZWxlY3Rvcn0ke3NbM119JHt1fSR7ZC5jb250ZW50fSR7Y31gfSkucmVwbGFjZShJU2UsKCk9PmUuYmxvY2tzW28rK10pfWZ1bmN0aW9uIFFYKG4sdCxlKXtsZXQgbCxjLGk9W10scj1bXSxvPTAscz0wLGE9LTE7Zm9yKGxldCB1PTA7dTxuLmxlbmd0aDt1Kyspe2xldCBkPW5bdV07IlxcIj09PWQ/dSsrOmQ9PT1jPyhvLS0sMD09PW8mJihyLnB1c2gobi5zdWJzdHJpbmcoYSx1KSksaS5wdXNoKGUpLHM9dSxhPS0xLGw9Yz12b2lkIDApKTpkPT09bD9vKys6MD09PW8mJnQuaGFzKGQpJiYobD1kLGM9dC5nZXQoZCksbz0xLGE9dSsxLGkucHVzaChuLnN1YnN0cmluZyhzLGEpKSl9cmV0dXJuLTEhPT1hPyhyLnB1c2gobi5zdWJzdHJpbmcoYSkpLGkucHVzaChlKSk6aS5wdXNoKG4uc3Vic3RyaW5nKHMpKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLmVzY2FwZWRTdHJpbmc9dCx0aGlzLmJsb2Nrcz1lfX0oaS5qb2luKCIiKSxyKX1mdW5jdGlvbiBrU2Uobix0KXtsZXQgZT1uLmxlbmd0aDtmb3IobGV0IGk9MTtpPHQ7aSsrKWZvcihsZXQgcj0wO3I8ZTtyKyspbltyK2kqZV09bltyXS5zbGljZSgwKX1mdW5jdGlvbiBLWChuKXtsZXQgdD1uLmNoYXJDb2RlQXQoMCk7aWYodD09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoMzk9PXR8fDM0PT10KSl7bGV0IGk9bi5zdWJzdHJpbmcoMSxuLmxlbmd0aC0xKTstMT09aS5pbmRleE9mKCInIikmJi0xPT1pLmluZGV4T2YoJyInKSYmKG49aSl9cmV0dXJuIG59ZnVuY3Rpb24gZksobil7cmV0dXJuIG4ucmVwbGFjZSgvW2Etel1bQS1aXS9nLHQ9PnQuY2hhckF0KDApKyItIit0LmNoYXJBdCgxKSkudG9Mb3dlckNhc2UoKX12YXIgdkQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZGlyZWN0aXZlRXhwcj10LHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITEsdGhpcy5oYXNCaW5kaW5ncz0hMSx0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSExLHRoaXMuX2NsYXNzTWFwSW5wdXQ9bnVsbCx0aGlzLl9zdHlsZU1hcElucHV0PW51bGwsdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9bnVsbCx0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz1udWxsLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9bnVsbCx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD1udWxsLHRoaXMuX3N0eWxlc0luZGV4PW5ldyBNYXAsdGhpcy5fY2xhc3Nlc0luZGV4PW5ldyBNYXAsdGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzPVtdLHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz1bXX1yZWdpc3RlckJvdW5kSW5wdXQodCl7bGV0IGU9bnVsbCxpPXQubmFtZTtzd2l0Y2godC50eXBlKXtjYXNlIDA6ZT10aGlzLnJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZShpLHQudmFsdWUsdC5zb3VyY2VTcGFuKTticmVhaztjYXNlIDM6ZT10aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChpLCExLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQudW5pdCk7YnJlYWs7Y2FzZSAyOmU9dGhpcy5yZWdpc3RlckNsYXNzSW5wdXQoaSwhMSx0LnZhbHVlLHQuc291cmNlU3Bhbil9cmV0dXJuISFlfXJlZ2lzdGVySW5wdXRCYXNlZE9uTmFtZSh0LGUsaSl7bGV0IHI9bnVsbCxvPXQuc3Vic3RyaW5nKDAsNikscz0ic3R5bGUiPT09dHx8InN0eWxlLiI9PT1vfHwic3R5bGUhIj09PW87aWYoc3x8IXMmJigiY2xhc3MiPT09dHx8ImNsYXNzLiI9PT1vfHwiY2xhc3MhIj09PW8pKXtsZXQgbD0iLiIhPT10LmNoYXJBdCg1KSxjPXQuc2xpY2UobD81OjYpO3I9cz90aGlzLnJlZ2lzdGVyU3R5bGVJbnB1dChjLGwsZSxpKTp0aGlzLnJlZ2lzdGVyQ2xhc3NJbnB1dChjLGwsZSxpKX1yZXR1cm4gcn1yZWdpc3RlclN0eWxlSW5wdXQodCxlLGkscixvKXtpZigkWChpKSlyZXR1cm4gbnVsbDt0LnN0YXJ0c1dpdGgoIi0tIil8fCh0PWZLKHQpKTtsZXR7cHJvcGVydHk6cyxoYXNPdmVycmlkZUZsYWc6YSxzdWZmaXg6bH09SlgodCksYz17bmFtZTpzLHN1ZmZpeDpvPSJzdHJpbmciPT10eXBlb2YgbyYmMCE9PW8ubGVuZ3RoP286bCx2YWx1ZTppLHNvdXJjZVNwYW46cixoYXNPdmVycmlkZUZsYWc6YX07cmV0dXJuIGU/dGhpcy5fc3R5bGVNYXBJbnB1dD1jOigodGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM9dGhpcy5fc2luZ2xlU3R5bGVJbnB1dHN8fFtdKS5wdXNoKGMpLFpYKHRoaXMuX3N0eWxlc0luZGV4LHMpKSx0aGlzLl9sYXN0U3R5bGluZ0lucHV0PWMsdGhpcy5fZmlyc3RTdHlsaW5nSW5wdXQ9dGhpcy5fZmlyc3RTdHlsaW5nSW5wdXR8fGMsdGhpcy5fY2hlY2tGb3JQaXBlcyhpKSx0aGlzLmhhc0JpbmRpbmdzPSEwLGN9cmVnaXN0ZXJDbGFzc0lucHV0KHQsZSxpLHIpe2lmKCRYKGkpKXJldHVybiBudWxsO2xldHtwcm9wZXJ0eTpvLGhhc092ZXJyaWRlRmxhZzpzfT1KWCh0KSxhPXtuYW1lOm8sdmFsdWU6aSxzb3VyY2VTcGFuOnIsaGFzT3ZlcnJpZGVGbGFnOnMsc3VmZml4Om51bGx9O3JldHVybiBlP3RoaXMuX2NsYXNzTWFwSW5wdXQ9YTooKHRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzPXRoaXMuX3NpbmdsZUNsYXNzSW5wdXRzfHxbXSkucHVzaChhKSxaWCh0aGlzLl9jbGFzc2VzSW5kZXgsbykpLHRoaXMuX2xhc3RTdHlsaW5nSW5wdXQ9YSx0aGlzLl9maXJzdFN0eWxpbmdJbnB1dD10aGlzLl9maXJzdFN0eWxpbmdJbnB1dHx8YSx0aGlzLl9jaGVja0ZvclBpcGVzKGkpLHRoaXMuaGFzQmluZGluZ3M9ITAsYX1fY2hlY2tGb3JQaXBlcyh0KXt0IGluc3RhbmNlb2YgUnUmJnQuYXN0IGluc3RhbmNlb2YgUl8mJih0aGlzLmhhc0JpbmRpbmdzV2l0aFBpcGVzPSEwKX1yZWdpc3RlclN0eWxlQXR0cih0KXt0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXM9ZnVuY3Rpb24obil7bGV0IHQ9W10sZT0wLGk9MCxyPTAsbz0wLHM9MCxhPW51bGwsbD0hMTtmb3IoO2U8bi5sZW5ndGg7KXN3aXRjaChuLmNoYXJDb2RlQXQoZSsrKSl7Y2FzZSA0MDppKys7YnJlYWs7Y2FzZSA0MTppLS07YnJlYWs7Y2FzZSAzOTpsPWx8fG8+MCwwPT09cj9yPTM5OjM5PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSAzNDpsPWx8fG8+MCwwPT09cj9yPTM0OjM0PT09ciYmOTIhPT1uLmNoYXJDb2RlQXQoZS0xKSYmKHI9MCk7YnJlYWs7Y2FzZSA1ODohYSYmMD09PWkmJjA9PT1yJiYoYT1mSyhuLnN1YnN0cmluZyhzLGUtMSkudHJpbSgpKSxvPWUpO2JyZWFrO2Nhc2UgNTk6aWYoYSYmbz4wJiYwPT09aSYmMD09PXIpe2xldCB1PW4uc3Vic3RyaW5nKG8sZS0xKS50cmltKCk7dC5wdXNoKGEsbD9LWCh1KTp1KSxzPWUsbz0wLGE9bnVsbCxsPSExfX1pZihhJiZvKXtsZXQgYz1uLnNsaWNlKG8pLnRyaW0oKTt0LnB1c2goYSxsP0tYKGMpOmMpfXJldHVybiB0fSh0KSx0aGlzLl9oYXNJbml0aWFsVmFsdWVzPSEwfXJlZ2lzdGVyQ2xhc3NBdHRyKHQpe3RoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcz10LnRyaW0oKS5zcGxpdCgvXHMrL2cpLHRoaXMuX2hhc0luaXRpYWxWYWx1ZXM9ITB9cG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKHQpe2lmKHRoaXMuX2luaXRpYWxDbGFzc1ZhbHVlcy5sZW5ndGgpe3QucHVzaChodCgxKSk7Zm9yKGxldCBlPTA7ZTx0aGlzLl9pbml0aWFsQ2xhc3NWYWx1ZXMubGVuZ3RoO2UrKyl0LnB1c2goaHQodGhpcy5faW5pdGlhbENsYXNzVmFsdWVzW2VdKSl9aWYodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzLmxlbmd0aCl7dC5wdXNoKGh0KDIpKTtmb3IobGV0IGU9MDtlPHRoaXMuX2luaXRpYWxTdHlsZVZhbHVlcy5sZW5ndGg7ZSs9Mil0LnB1c2goaHQodGhpcy5faW5pdGlhbFN0eWxlVmFsdWVzW2VdKSxodCh0aGlzLl9pbml0aWFsU3R5bGVWYWx1ZXNbZSsxXSkpfX1hc3NpZ25Ib3N0QXR0cnModCxlKXt0aGlzLl9kaXJlY3RpdmVFeHByJiYodC5sZW5ndGh8fHRoaXMuX2hhc0luaXRpYWxWYWx1ZXMpJiYodGhpcy5wb3B1bGF0ZUluaXRpYWxTdHlsaW5nQXR0cnModCksZS5zZXQoImhvc3RBdHRycyIsX3IodCkpKX1idWlsZENsYXNzTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX2NsYXNzTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITAsdGhpcy5fY2xhc3NNYXBJbnB1dCk6bnVsbH1idWlsZFN0eWxlTWFwSW5zdHJ1Y3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0eWxlTWFwSW5wdXQ/dGhpcy5fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsITEsdGhpcy5fc3R5bGVNYXBJbnB1dCk6bnVsbH1fYnVpbGRNYXBCYXNlZEluc3RydWN0aW9uKHQsZSxpKXtsZXQgcyxyPTIsbz1pLnZhbHVlLnZpc2l0KHQpO3JldHVybiBvIGluc3RhbmNlb2YgdnM/KHIrPW8uZXhwcmVzc2lvbnMubGVuZ3RoLHM9ZT9mdW5jdGlvbihuKXtzd2l0Y2god20obikpe2Nhc2UgMTpyZXR1cm4gdGUuY2xhc3NNYXA7Y2FzZSAzOnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlMTtjYXNlIDU6cmV0dXJuIHRlLmNsYXNzTWFwSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gdGUuY2xhc3NNYXBJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNDtjYXNlIDExOnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlNztjYXNlIDE3OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiB0ZS5jbGFzc01hcEludGVycG9sYXRlVn19KG8pOmZ1bmN0aW9uKG4pe3N3aXRjaCh3bShuKSl7Y2FzZSAxOnJldHVybiB0ZS5zdHlsZU1hcDtjYXNlIDM6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUuc3R5bGVNYXBJbnRlcnBvbGF0ZTI7Y2FzZSA3OnJldHVybiB0ZS5zdHlsZU1hcEludGVycG9sYXRlMztjYXNlIDk6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU1O2Nhc2UgMTM6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU2O2Nhc2UgMTU6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGU4O2RlZmF1bHQ6cmV0dXJuIHRlLnN0eWxlTWFwSW50ZXJwb2xhdGVWfX0obykpOnM9ZT90ZS5jbGFzc01hcDp0ZS5zdHlsZU1hcCx7cmVmZXJlbmNlOnMsY2FsbHM6W3tzdXBwb3J0c0ludGVycG9sYXRpb246ITAsc291cmNlU3BhbjppLnNvdXJjZVNwYW4sYWxsb2NhdGVCaW5kaW5nU2xvdHM6cixwYXJhbXM6YT0+e2xldCBsPWEobyk7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpbbF19fV19fV9idWlsZFNpbmdsZUlucHV0cyh0LGUsaSxyLG8pe2xldCBzPVtdO3JldHVybiBlLmZvckVhY2goYT0+e2xldCBsPXNbcy5sZW5ndGgtMV0sYz1hLnZhbHVlLnZpc2l0KGkpLHU9dCxkPTI7YyBpbnN0YW5jZW9mIHZzJiYoZCs9Yy5leHByZXNzaW9ucy5sZW5ndGgsciYmKHU9cihjKSkpO2xldCBwPXtzb3VyY2VTcGFuOmEuc291cmNlU3BhbixhbGxvY2F0ZUJpbmRpbmdTbG90czpkLHN1cHBvcnRzSW50ZXJwb2xhdGlvbjohIXIscGFyYW1zOmg9PntsZXQgZj1bXTtmLnB1c2goaHQoYS5uYW1lKSk7bGV0IG09aChjKTtyZXR1cm4gQXJyYXkuaXNBcnJheShtKT9mLnB1c2goLi4ubSk6Zi5wdXNoKG0pLCFvJiZudWxsIT09YS5zdWZmaXgmJmYucHVzaChodChhLnN1ZmZpeCkpLGZ9fTtsJiZsLnJlZmVyZW5jZT09PXU/bC5jYWxscy5wdXNoKHApOnMucHVzaCh7cmVmZXJlbmNlOnUsY2FsbHM6W3BdfSl9KSxzfV9idWlsZENsYXNzSW5wdXRzKHQpe3JldHVybiB0aGlzLl9zaW5nbGVDbGFzc0lucHV0cz90aGlzLl9idWlsZFNpbmdsZUlucHV0cyh0ZS5jbGFzc1Byb3AsdGhpcy5fc2luZ2xlQ2xhc3NJbnB1dHMsdCxudWxsLCEwKTpbXX1fYnVpbGRTdHlsZUlucHV0cyh0KXtyZXR1cm4gdGhpcy5fc2luZ2xlU3R5bGVJbnB1dHM/dGhpcy5fYnVpbGRTaW5nbGVJbnB1dHModGUuc3R5bGVQcm9wLHRoaXMuX3NpbmdsZVN0eWxlSW5wdXRzLHQsVlNlLCExKTpbXX1idWlsZFVwZGF0ZUxldmVsSW5zdHJ1Y3Rpb25zKHQpe2xldCBlPVtdO2lmKHRoaXMuaGFzQmluZGluZ3Mpe2xldCBpPXRoaXMuYnVpbGRTdHlsZU1hcEluc3RydWN0aW9uKHQpO2kmJmUucHVzaChpKTtsZXQgcj10aGlzLmJ1aWxkQ2xhc3NNYXBJbnN0cnVjdGlvbih0KTtyJiZlLnB1c2gociksZS5wdXNoKC4uLnRoaXMuX2J1aWxkU3R5bGVJbnB1dHModCkpLGUucHVzaCguLi50aGlzLl9idWlsZENsYXNzSW5wdXRzKHQpKX1yZXR1cm4gZX19O2Z1bmN0aW9uIFpYKG4sdCl7bi5oYXModCl8fG4uc2V0KHQsbi5zaXplKX1mdW5jdGlvbiBKWChuKXtsZXQgdD0hMSxlPW4uaW5kZXhPZigiIWltcG9ydGFudCIpOy0xIT09ZSYmKG49ZT4wP24uc3Vic3RyaW5nKDAsZSk6IiIsdD0hMCk7bGV0IGk9bnVsbCxyPW4sbz1uLmxhc3RJbmRleE9mKCIuIik7cmV0dXJuIG8+MCYmKGk9bi5zbGljZShvKzEpLHI9bi5zdWJzdHJpbmcoMCxvKSkse3Byb3BlcnR5OnIsc3VmZml4OmksaGFzT3ZlcnJpZGVGbGFnOnR9fWZ1bmN0aW9uIFZTZShuKXtzd2l0Y2god20obikpe2Nhc2UgMTpyZXR1cm4gdGUuc3R5bGVQcm9wO2Nhc2UgMzpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLnN0eWxlUHJvcEludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiB0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gdGUuc3R5bGVQcm9wSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLnN0eWxlUHJvcEludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiB0ZS5zdHlsZVByb3BJbnRlcnBvbGF0ZVZ9fWZ1bmN0aW9uICRYKG4pe3JldHVybiBuIGluc3RhbmNlb2YgUnUmJihuPW4uYXN0KSxuIGluc3RhbmNlb2YgSWF9dmFyIG5pPSgoKT0+e3JldHVybihuPW5pfHwobmk9e30pKVtuLkNoYXJhY3Rlcj0wXT0iQ2hhcmFjdGVyIixuW24uSWRlbnRpZmllcj0xXT0iSWRlbnRpZmllciIsbltuLlByaXZhdGVJZGVudGlmaWVyPTJdPSJQcml2YXRlSWRlbnRpZmllciIsbltuLktleXdvcmQ9M109IktleXdvcmQiLG5bbi5TdHJpbmc9NF09IlN0cmluZyIsbltuLk9wZXJhdG9yPTVdPSJPcGVyYXRvciIsbltuLk51bWJlcj02XT0iTnVtYmVyIixuW24uRXJyb3I9N109IkVycm9yIixuaTt2YXIgbn0pKCksVVNlPVsidmFyIiwibGV0IiwiYXMiLCJudWxsIiwidW5kZWZpbmVkIiwidHJ1ZSIsImZhbHNlIiwiaWYiLCJlbHNlIiwidGhpcyJdLHlEPWNsYXNze3Rva2VuaXplKHQpe2xldCBlPW5ldyBsVih0KSxpPVtdLHI9ZS5zY2FuVG9rZW4oKTtmb3IoO251bGwhPXI7KWkucHVzaChyKSxyPWUuc2NhblRva2VuKCk7cmV0dXJuIGl9fSxqYz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3RoaXMuaW5kZXg9dCx0aGlzLmVuZD1lLHRoaXMudHlwZT1pLHRoaXMubnVtVmFsdWU9cix0aGlzLnN0clZhbHVlPW99aXNDaGFyYWN0ZXIodCl7cmV0dXJuIHRoaXMudHlwZT09bmkuQ2hhcmFjdGVyJiZ0aGlzLm51bVZhbHVlPT10fWlzTnVtYmVyKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuTnVtYmVyfWlzU3RyaW5nKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuU3RyaW5nfWlzT3BlcmF0b3IodCl7cmV0dXJuIHRoaXMudHlwZT09bmkuT3BlcmF0b3ImJnRoaXMuc3RyVmFsdWU9PXR9aXNJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuSWRlbnRpZmllcn1pc1ByaXZhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuUHJpdmF0ZUlkZW50aWZpZXJ9aXNLZXl3b3JkKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZH1pc0tleXdvcmRMZXQoKXtyZXR1cm4gdGhpcy50eXBlPT1uaS5LZXl3b3JkJiYibGV0Ij09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRBcygpe3JldHVybiB0aGlzLnR5cGU9PW5pLktleXdvcmQmJiJhcyI9PXRoaXMuc3RyVmFsdWV9aXNLZXl3b3JkTnVsbCgpe3JldHVybiB0aGlzLnR5cGU9PW5pLktleXdvcmQmJiJudWxsIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRVbmRlZmluZWQoKXtyZXR1cm4gdGhpcy50eXBlPT1uaS5LZXl3b3JkJiYidW5kZWZpbmVkIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRUcnVlKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZCYmInRydWUiPT10aGlzLnN0clZhbHVlfWlzS2V5d29yZEZhbHNlKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZCYmImZhbHNlIj09dGhpcy5zdHJWYWx1ZX1pc0tleXdvcmRUaGlzKCl7cmV0dXJuIHRoaXMudHlwZT09bmkuS2V5d29yZCYmInRoaXMiPT10aGlzLnN0clZhbHVlfWlzRXJyb3IoKXtyZXR1cm4gdGhpcy50eXBlPT1uaS5FcnJvcn10b051bWJlcigpe3JldHVybiB0aGlzLnR5cGU9PW5pLk51bWJlcj90aGlzLm51bVZhbHVlOi0xfXRvU3RyaW5nKCl7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSBuaS5DaGFyYWN0ZXI6Y2FzZSBuaS5JZGVudGlmaWVyOmNhc2UgbmkuS2V5d29yZDpjYXNlIG5pLk9wZXJhdG9yOmNhc2UgbmkuUHJpdmF0ZUlkZW50aWZpZXI6Y2FzZSBuaS5TdHJpbmc6Y2FzZSBuaS5FcnJvcjpyZXR1cm4gdGhpcy5zdHJWYWx1ZTtjYXNlIG5pLk51bWJlcjpyZXR1cm4gdGhpcy5udW1WYWx1ZS50b1N0cmluZygpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fX07ZnVuY3Rpb24gZVEobix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLkNoYXJhY3RlcixlLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWZ1bmN0aW9uIHVCKG4sdCxlKXtyZXR1cm4gbmV3IGpjKG4sdCxuaS5PcGVyYXRvciwwLGUpfXZhciBkQj1uZXcgamMoLTEsLTEsbmkuQ2hhcmFjdGVyLDAsIiIpLGxWPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuaW5wdXQ9dCx0aGlzLnBlZWs9MCx0aGlzLmluZGV4PS0xLHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuYWR2YW5jZSgpfWFkdmFuY2UoKXt0aGlzLnBlZWs9Kyt0aGlzLmluZGV4Pj10aGlzLmxlbmd0aD8wOnRoaXMuaW5wdXQuY2hhckNvZGVBdCh0aGlzLmluZGV4KX1zY2FuVG9rZW4oKXtsZXQgdD10aGlzLmlucHV0LGU9dGhpcy5sZW5ndGgsaT10aGlzLnBlZWsscj10aGlzLmluZGV4O2Zvcig7aTw9MzI7KXtpZigrK3I+PWUpe2k9MDticmVha31pPXQuY2hhckNvZGVBdChyKX1pZih0aGlzLnBlZWs9aSx0aGlzLmluZGV4PXIscj49ZSlyZXR1cm4gbnVsbDtpZih0UShpKSlyZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpO2lmKCRwKGkpKXJldHVybiB0aGlzLnNjYW5OdW1iZXIocik7bGV0IG89cjtzd2l0Y2goaSl7Y2FzZSA0NjpyZXR1cm4gdGhpcy5hZHZhbmNlKCksJHAodGhpcy5wZWVrKT90aGlzLnNjYW5OdW1iZXIobyk6ZVEobyx0aGlzLmluZGV4LDQ2KTtjYXNlIDQwOmNhc2UgNDE6Y2FzZSB0aDpjYXNlIE91OmNhc2UgOTE6Y2FzZSA5MzpjYXNlIDQ0OmNhc2UgNTg6Y2FzZSA1OTpyZXR1cm4gdGhpcy5zY2FuQ2hhcmFjdGVyKG8saSk7Y2FzZSAzOTpjYXNlIDM0OnJldHVybiB0aGlzLnNjYW5TdHJpbmcoKTtjYXNlIDM1OnJldHVybiB0aGlzLnNjYW5Qcml2YXRlSWRlbnRpZmllcigpO2Nhc2UgNDM6Y2FzZSA0NTpjYXNlIDQyOmNhc2UgNDc6Y2FzZSAzNzpjYXNlIDk0OnJldHVybiB0aGlzLnNjYW5PcGVyYXRvcihvLFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpO2Nhc2UgNjM6cmV0dXJuIHRoaXMuc2NhblF1ZXN0aW9uKG8pO2Nhc2UgNjA6Y2FzZSA2MjpyZXR1cm4gdGhpcy5zY2FuQ29tcGxleE9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSw2MSwiPSIpO2Nhc2UgMzM6Y2FzZSA2MTpyZXR1cm4gdGhpcy5zY2FuQ29tcGxleE9wZXJhdG9yKG8sU3RyaW5nLmZyb21DaGFyQ29kZShpKSw2MSwiPSIsNjEsIj0iKTtjYXNlIDM4OnJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IobywiJiIsMzgsIiYiKTtjYXNlIDEyNDpyZXR1cm4gdGhpcy5zY2FuQ29tcGxleE9wZXJhdG9yKG8sInwiLDEyNCwifCIpO2Nhc2UgMTYwOmZvcig7UVYodGhpcy5wZWVrKTspdGhpcy5hZHZhbmNlKCk7cmV0dXJuIHRoaXMuc2NhblRva2VuKCl9cmV0dXJuIHRoaXMuYWR2YW5jZSgpLHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIFske1N0cmluZy5mcm9tQ2hhckNvZGUoaSl9XWAsMCl9c2NhbkNoYXJhY3Rlcih0LGUpe3JldHVybiB0aGlzLmFkdmFuY2UoKSxlUSh0LHRoaXMuaW5kZXgsZSl9c2Nhbk9wZXJhdG9yKHQsZSl7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLHVCKHQsdGhpcy5pbmRleCxlKX1zY2FuQ29tcGxleE9wZXJhdG9yKHQsZSxpLHIsbyxzKXt0aGlzLmFkdmFuY2UoKTtsZXQgYT1lO3JldHVybiB0aGlzLnBlZWs9PWkmJih0aGlzLmFkdmFuY2UoKSxhKz1yKSxudWxsIT1vJiZ0aGlzLnBlZWs9PW8mJih0aGlzLmFkdmFuY2UoKSxhKz1zKSx1Qih0LHRoaXMuaW5kZXgsYSl9c2NhbklkZW50aWZpZXIoKXtsZXQgdD10aGlzLmluZGV4O2Zvcih0aGlzLmFkdmFuY2UoKTtuUSh0aGlzLnBlZWspOyl0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO3JldHVybiBVU2UuaW5kZXhPZihlKT4tMT9mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBqYyhuLHQsbmkuS2V5d29yZCwwLGUpfSh0LHRoaXMuaW5kZXgsZSk6ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLklkZW50aWZpZXIsMCxlKX0odCx0aGlzLmluZGV4LGUpfXNjYW5Qcml2YXRlSWRlbnRpZmllcigpe2xldCB0PXRoaXMuaW5kZXg7aWYodGhpcy5hZHZhbmNlKCksIXRRKHRoaXMucGVlaykpcmV0dXJuIHRoaXMuZXJyb3IoIkludmFsaWQgY2hhcmFjdGVyIFsjXSIsLTEpO2Zvcig7blEodGhpcy5wZWVrKTspdGhpcy5hZHZhbmNlKCk7bGV0IGU9dGhpcy5pbnB1dC5zdWJzdHJpbmcodCx0aGlzLmluZGV4KTtyZXR1cm4gZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLlByaXZhdGVJZGVudGlmaWVyLDAsZSl9KHQsdGhpcy5pbmRleCxlKX1zY2FuTnVtYmVyKHQpe2xldCBlPXRoaXMuaW5kZXg9PT10LGk9ITE7Zm9yKHRoaXMuYWR2YW5jZSgpOzspe2lmKCEkcCh0aGlzLnBlZWspKWlmKDk1PT09dGhpcy5wZWVrKXtpZighJHAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgtMSkpfHwhJHAodGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgrMSkpKXJldHVybiB0aGlzLmVycm9yKCJJbnZhbGlkIG51bWVyaWMgc2VwYXJhdG9yIiwwKTtpPSEwfWVsc2UgaWYoNDY9PT10aGlzLnBlZWspZT0hMTtlbHNle2lmKDEwMSE9KG49dGhpcy5wZWVrKSYmNjkhPW4pYnJlYWs7aWYodGhpcy5hZHZhbmNlKCksUVNlKHRoaXMucGVlaykmJnRoaXMuYWR2YW5jZSgpLCEkcCh0aGlzLnBlZWspKXJldHVybiB0aGlzLmVycm9yKCJJbnZhbGlkIGV4cG9uZW50IiwtMSk7ZT0hMX10aGlzLmFkdmFuY2UoKX12YXIgbjtsZXQgcj10aGlzLmlucHV0LnN1YnN0cmluZyh0LHRoaXMuaW5kZXgpO2kmJihyPXIucmVwbGFjZSgvXy9nLCIiKSk7bGV0IG89ZT9mdW5jdGlvbihuKXtsZXQgdD1wYXJzZUludChuKTtpZihpc05hTih0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW50ZWdlciBsaXRlcmFsIHdoZW4gcGFyc2luZyAiK24pO3JldHVybiB0fShyKTpwYXJzZUZsb2F0KHIpO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBqYyhuLHQsbmkuTnVtYmVyLGUsIiIpfSh0LHRoaXMuaW5kZXgsbyl9c2NhblN0cmluZygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLnBlZWs7dGhpcy5hZHZhbmNlKCk7bGV0IGk9IiIscj10aGlzLmluZGV4LG89dGhpcy5pbnB1dDtmb3IoO3RoaXMucGVlayE9ZTspaWYoOTI9PXRoaXMucGVlayl7bGV0IGE7aWYoaSs9by5zdWJzdHJpbmcocix0aGlzLmluZGV4KSx0aGlzLmFkdmFuY2UoKSx0aGlzLnBlZWs9dGhpcy5wZWVrLDExNz09dGhpcy5wZWVrKXtsZXQgbD1vLnN1YnN0cmluZyh0aGlzLmluZGV4KzEsdGhpcy5pbmRleCs1KTtpZighL15bMC05YS1mXSskL2kudGVzdChsKSlyZXR1cm4gdGhpcy5lcnJvcihgSW52YWxpZCB1bmljb2RlIGVzY2FwZSBbXFx1JHtsfV1gLDApO2E9cGFyc2VJbnQobCwxNik7Zm9yKGxldCBjPTA7Yzw1O2MrKyl0aGlzLmFkdmFuY2UoKX1lbHNlIGE9S1NlKHRoaXMucGVlayksdGhpcy5hZHZhbmNlKCk7aSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKSxyPXRoaXMuaW5kZXh9ZWxzZXtpZigwPT10aGlzLnBlZWspcmV0dXJuIHRoaXMuZXJyb3IoIlVudGVybWluYXRlZCBxdW90ZSIsMCk7dGhpcy5hZHZhbmNlKCl9bGV0IHM9by5zdWJzdHJpbmcocix0aGlzLmluZGV4KTtyZXR1cm4gdGhpcy5hZHZhbmNlKCksZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgamMobix0LG5pLlN0cmluZywwLGUpfSh0LHRoaXMuaW5kZXgsaStzKX1zY2FuUXVlc3Rpb24odCl7dGhpcy5hZHZhbmNlKCk7bGV0IGU9Ij8iO3JldHVybig2Mz09PXRoaXMucGVla3x8NDY9PT10aGlzLnBlZWspJiYoZSs9NDY9PT10aGlzLnBlZWs/Ii4iOiI/Iix0aGlzLmFkdmFuY2UoKSksdUIodCx0aGlzLmluZGV4LGUpfWVycm9yKHQsZSl7bGV0IGk9dGhpcy5pbmRleCtlO3JldHVybiBmdW5jdGlvbihuLHQsZSl7cmV0dXJuIG5ldyBqYyhuLHQsbmkuRXJyb3IsMCxlKX0oaSx0aGlzLmluZGV4LGBMZXhlciBFcnJvcjogJHt0fSBhdCBjb2x1bW4gJHtpfSBpbiBleHByZXNzaW9uIFske3RoaXMuaW5wdXR9XWApfX07ZnVuY3Rpb24gdFEobil7cmV0dXJuIDk3PD1uJiZuPD0xMjJ8fDY1PD1uJiZuPD05MHx8OTU9PW58fDM2PT1ufWZ1bmN0aW9uIG5RKG4pe3JldHVybiBLVihuKXx8JHAobil8fDk1PT1ufHwzNj09bn1mdW5jdGlvbiBRU2Uobil7cmV0dXJuIDQ1PT1ufHw0Mz09bn1mdW5jdGlvbiBLU2Uobil7c3dpdGNoKG4pe2Nhc2UgMTEwOnJldHVybiAxMDtjYXNlIDEwMjpyZXR1cm4gMTI7Y2FzZSAxMTQ6cmV0dXJuIDEzO2Nhc2UgMTE2OnJldHVybiA5O2Nhc2UgMTE4OnJldHVybiAxMTtkZWZhdWx0OnJldHVybiBufX12YXIgYkQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fbGV4ZXI9dCx0aGlzLmVycm9ycz1bXX1wYXJzZUFjdGlvbih0LGUsaSxyLG89UHUpe3RoaXMuX2NoZWNrTm9JbnRlcnBvbGF0aW9uKHQsaSxvKTtsZXQgcz10aGlzLl9zdHJpcENvbW1lbnRzKHQpLGE9dGhpcy5fbGV4ZXIudG9rZW5pemUocyksbD0xO2UmJihsfD0yKTtsZXQgYz1uZXcgaW0odCxpLHIsYSxsLHRoaXMuZXJyb3JzLDApLnBhcnNlQ2hhaW4oKTtyZXR1cm4gbmV3IFJ1KGMsdCxpLHIsdGhpcy5lcnJvcnMpfXBhcnNlQmluZGluZyh0LGUsaSxyPVB1KXtsZXQgbz10aGlzLl9wYXJzZUJpbmRpbmdBc3QodCxlLGkscik7cmV0dXJuIG5ldyBSdShvLHQsZSxpLHRoaXMuZXJyb3JzKX1jaGVja1NpbXBsZUV4cHJlc3Npb24odCl7bGV0IGU9bmV3IGRWO3JldHVybiB0LnZpc2l0KGUpLGUuZXJyb3JzfXBhcnNlU2ltcGxlQmluZGluZyh0LGUsaSxyPVB1KXtsZXQgbz10aGlzLl9wYXJzZUJpbmRpbmdBc3QodCxlLGkscikscz10aGlzLmNoZWNrU2ltcGxlRXhwcmVzc2lvbihvKTtyZXR1cm4gcy5sZW5ndGg+MCYmdGhpcy5fcmVwb3J0RXJyb3IoYEhvc3QgYmluZGluZyBleHByZXNzaW9uIGNhbm5vdCBjb250YWluICR7cy5qb2luKCIgIil9YCx0LGUpLG5ldyBSdShvLHQsZSxpLHRoaXMuZXJyb3JzKX1fcmVwb3J0RXJyb3IodCxlLGkscil7dGhpcy5lcnJvcnMucHVzaChuZXcgUkModCxlLGkscikpfV9wYXJzZUJpbmRpbmdBc3QodCxlLGkscil7dGhpcy5fY2hlY2tOb0ludGVycG9sYXRpb24odCxlLHIpO2xldCBvPXRoaXMuX3N0cmlwQ29tbWVudHModCkscz10aGlzLl9sZXhlci50b2tlbml6ZShvKTtyZXR1cm4gbmV3IGltKHQsZSxpLHMsMCx0aGlzLmVycm9ycywwKS5wYXJzZUNoYWluKCl9cGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLHIsbyl7bGV0IHM9dGhpcy5fbGV4ZXIudG9rZW5pemUoZSk7cmV0dXJuIG5ldyBpbShlLGksbyxzLDAsdGhpcy5lcnJvcnMsMCkucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHtzb3VyY2U6dCxzcGFuOm5ldyBhbChyLHIrdC5sZW5ndGgpfSl9cGFyc2VJbnRlcnBvbGF0aW9uKHQsZSxpLHIsbz1QdSl7bGV0e3N0cmluZ3M6cyxleHByZXNzaW9uczphLG9mZnNldHM6bH09dGhpcy5zcGxpdEludGVycG9sYXRpb24odCxlLHIsbyk7aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsO2xldCBjPVtdO2ZvcihsZXQgdT0wO3U8YS5sZW5ndGg7Kyt1KXtsZXQgcD10aGlzLl9zdHJpcENvbW1lbnRzKGFbdV0udGV4dCksaD10aGlzLl9sZXhlci50b2tlbml6ZShwKSxmPW5ldyBpbSh0LGUsaSxoLDAsdGhpcy5lcnJvcnMsbFt1XSkucGFyc2VDaGFpbigpO2MucHVzaChmKX1yZXR1cm4gdGhpcy5jcmVhdGVJbnRlcnBvbGF0aW9uQXN0KHMubWFwKHU9PnUudGV4dCksYyx0LGUsaSl9cGFyc2VJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbih0LGUsaSl7bGV0IHI9dGhpcy5fc3RyaXBDb21tZW50cyh0KSxvPXRoaXMuX2xleGVyLnRva2VuaXplKHIpLHM9bmV3IGltKHQsZSxpLG8sMCx0aGlzLmVycm9ycywwKS5wYXJzZUNoYWluKCk7cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhdGlvbkFzdChbIiIsIiJdLFtzXSx0LGUsaSl9Y3JlYXRlSW50ZXJwb2xhdGlvbkFzdCh0LGUsaSxyLG8pe2xldCBzPW5ldyBibSgwLGkubGVuZ3RoKSxhPW5ldyB2cyhzLHMudG9BYnNvbHV0ZShvKSx0LGUpO3JldHVybiBuZXcgUnUoYSxpLHIsbyx0aGlzLmVycm9ycyl9c3BsaXRJbnRlcnBvbGF0aW9uKHQsZSxpLHI9UHUpe2xldCBvPVtdLHM9W10sYT1bXSxsPWk/ZnVuY3Rpb24obil7bGV0IHQ9bmV3IE1hcCxlPTAsaT0wLHI9MDtmb3IoO3I8bi5sZW5ndGg7KXtsZXQgbz1uW3JdO2lmKDk9PT1vLnR5cGUpe2xldFtzLGFdPW8ucGFydHM7ZSs9YS5sZW5ndGgsaSs9cy5sZW5ndGh9ZWxzZXtsZXQgcz1vLnBhcnRzLnJlZHVjZSgoYSxsKT0+YStsLmxlbmd0aCwwKTtpKz1zLGUrPXN9dC5zZXQoaSxlKSxyKyt9cmV0dXJuIHR9KGkpOm51bGwsYz0wLHU9ITEsZD0hMSx7c3RhcnQ6cCxlbmQ6aH09cjtmb3IoO2M8dC5sZW5ndGg7KWlmKHUpe2xldCBmPWMsbT1mK3AubGVuZ3RoLHg9dGhpcy5fZ2V0SW50ZXJwb2xhdGlvbkVuZEluZGV4KHQsaCxtKTtpZigtMT09PXgpe3U9ITEsZD0hMDticmVha31sZXQgZz14K2gubGVuZ3RoLGI9dC5zdWJzdHJpbmcobSx4KTswPT09Yi50cmltKCkubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQmxhbmsgZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGludGVycG9sYXRlZCBzdHJpbmdzIix0LGBhdCBjb2x1bW4gJHtjfSBpbmAsZSkscy5wdXNoKHt0ZXh0OmIsc3RhcnQ6ZixlbmQ6Z30pO2xldCBUPShsPy5nZXQoZik/P2YpK3AubGVuZ3RoO2EucHVzaChUKSxjPWcsdT0hMX1lbHNle2xldCBmPWM7Yz10LmluZGV4T2YocCxjKSwtMT09PWMmJihjPXQubGVuZ3RoKTtsZXQgbT10LnN1YnN0cmluZyhmLGMpO28ucHVzaCh7dGV4dDptLHN0YXJ0OmYsZW5kOmN9KSx1PSEwfWlmKCF1KWlmKGQpe2xldCBmPW9bby5sZW5ndGgtMV07Zi50ZXh0Kz10LnN1YnN0cmluZyhjKSxmLmVuZD10Lmxlbmd0aH1lbHNlIG8ucHVzaCh7dGV4dDp0LnN1YnN0cmluZyhjKSxzdGFydDpjLGVuZDp0Lmxlbmd0aH0pO3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc3RyaW5ncz10LHRoaXMuZXhwcmVzc2lvbnM9ZSx0aGlzLm9mZnNldHM9aX19KG8scyxhKX13cmFwTGl0ZXJhbFByaW1pdGl2ZSh0LGUsaSl7bGV0IHI9bmV3IGJtKDAsbnVsbD09dD8wOnQubGVuZ3RoKTtyZXR1cm4gbmV3IFJ1KG5ldyB0YShyLHIudG9BYnNvbHV0ZShpKSx0KSx0LGUsaSx0aGlzLmVycm9ycyl9X3N0cmlwQ29tbWVudHModCl7bGV0IGU9dGhpcy5fY29tbWVudFN0YXJ0KHQpO3JldHVybiBudWxsIT1lP3Quc3Vic3RyaW5nKDAsZSk6dH1fY29tbWVudFN0YXJ0KHQpe2xldCBlPW51bGw7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aC0xO2krKyl7bGV0IHI9dC5jaGFyQ29kZUF0KGkpLG89dC5jaGFyQ29kZUF0KGkrMSk7aWYoNDc9PT1yJiY0Nz09byYmbnVsbD09ZSlyZXR1cm4gaTtlPT09cj9lPW51bGw6bnVsbD09ZSYmV0IocikmJihlPXIpfXJldHVybiBudWxsfV9jaGVja05vSW50ZXJwb2xhdGlvbih0LGUse3N0YXJ0OmksZW5kOnJ9KXtsZXQgbz0tMSxzPS0xO2ZvcihsZXQgYSBvZiB0aGlzLl9mb3JFYWNoVW5xdW90ZWRDaGFyKHQsMCkpaWYoLTE9PT1vKXQuc3RhcnRzV2l0aChpKSYmKG89YSk7ZWxzZSBpZihzPXRoaXMuX2dldEludGVycG9sYXRpb25FbmRJbmRleCh0LHIsYSkscz4tMSlicmVhaztvPi0xJiZzPi0xJiZ0aGlzLl9yZXBvcnRFcnJvcihgR290IGludGVycG9sYXRpb24gKCR7aX0ke3J9KSB3aGVyZSBleHByZXNzaW9uIHdhcyBleHBlY3RlZGAsdCxgYXQgY29sdW1uICR7b30gaW5gLGUpfV9nZXRJbnRlcnBvbGF0aW9uRW5kSW5kZXgodCxlLGkpe2ZvcihsZXQgciBvZiB0aGlzLl9mb3JFYWNoVW5xdW90ZWRDaGFyKHQsaSkpe2lmKHQuc3RhcnRzV2l0aChlLHIpKXJldHVybiByO2lmKHQuc3RhcnRzV2l0aCgiLy8iLHIpKXJldHVybiB0LmluZGV4T2YoZSxyKX1yZXR1cm4tMX0qX2ZvckVhY2hVbnF1b3RlZENoYXIodCxlKXtsZXQgaT1udWxsLHI9MDtmb3IobGV0IG89ZTtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTshV0IodC5jaGFyQ29kZUF0KG8pKXx8bnVsbCE9PWkmJmkhPT1zfHxyJTIhPTA/bnVsbD09PWkmJih5aWVsZCBvKTppPW51bGw9PT1pP3M6bnVsbCxyPSJcXCI9PT1zP3IrMTowfX19LHNtPSgoKT0+e3JldHVybihuPXNtfHwoc209e30pKVtuLk5vbmU9MF09Ik5vbmUiLG5bbi5Xcml0YWJsZT0xXT0iV3JpdGFibGUiLHNtO3ZhciBufSkoKSxpbT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXt0aGlzLmlucHV0PXQsdGhpcy5sb2NhdGlvbj1lLHRoaXMuYWJzb2x1dGVPZmZzZXQ9aSx0aGlzLnRva2Vucz1yLHRoaXMucGFyc2VGbGFncz1vLHRoaXMuZXJyb3JzPXMsdGhpcy5vZmZzZXQ9YSx0aGlzLnJwYXJlbnNFeHBlY3RlZD0wLHRoaXMucmJyYWNrZXRzRXhwZWN0ZWQ9MCx0aGlzLnJicmFjZXNFeHBlY3RlZD0wLHRoaXMuY29udGV4dD1zbS5Ob25lLHRoaXMuc291cmNlU3BhbkNhY2hlPW5ldyBNYXAsdGhpcy5pbmRleD0wfXBlZWsodCl7bGV0IGU9dGhpcy5pbmRleCt0O3JldHVybiBlPHRoaXMudG9rZW5zLmxlbmd0aD90aGlzLnRva2Vuc1tlXTpkQn1nZXQgbmV4dCgpe3JldHVybiB0aGlzLnBlZWsoMCl9Z2V0IGF0RU9GKCl7cmV0dXJuIHRoaXMuaW5kZXg+PXRoaXMudG9rZW5zLmxlbmd0aH1nZXQgaW5wdXRJbmRleCgpe3JldHVybiB0aGlzLmF0RU9GP3RoaXMuY3VycmVudEVuZEluZGV4OnRoaXMubmV4dC5pbmRleCt0aGlzLm9mZnNldH1nZXQgY3VycmVudEVuZEluZGV4KCl7cmV0dXJuIHRoaXMuaW5kZXg+MD90aGlzLnBlZWsoLTEpLmVuZCt0aGlzLm9mZnNldDowPT09dGhpcy50b2tlbnMubGVuZ3RoP3RoaXMuaW5wdXQubGVuZ3RoK3RoaXMub2Zmc2V0OnRoaXMubmV4dC5pbmRleCt0aGlzLm9mZnNldH1nZXQgY3VycmVudEFic29sdXRlT2Zmc2V0KCl7cmV0dXJuIHRoaXMuYWJzb2x1dGVPZmZzZXQrdGhpcy5pbnB1dEluZGV4fXNwYW4odCxlKXtsZXQgaT10aGlzLmN1cnJlbnRFbmRJbmRleDtpZih2b2lkIDAhPT1lJiZlPnRoaXMuY3VycmVudEVuZEluZGV4JiYoaT1lKSx0Pmkpe2xldCByPWk7aT10LHQ9cn1yZXR1cm4gbmV3IGJtKHQsaSl9c291cmNlU3Bhbih0LGUpe2xldCBpPWAke3R9QCR7dGhpcy5pbnB1dEluZGV4fToke2V9YDtyZXR1cm4gdGhpcy5zb3VyY2VTcGFuQ2FjaGUuaGFzKGkpfHx0aGlzLnNvdXJjZVNwYW5DYWNoZS5zZXQoaSx0aGlzLnNwYW4odCxlKS50b0Fic29sdXRlKHRoaXMuYWJzb2x1dGVPZmZzZXQpKSx0aGlzLnNvdXJjZVNwYW5DYWNoZS5nZXQoaSl9YWR2YW5jZSgpe3RoaXMuaW5kZXgrK313aXRoQ29udGV4dCh0LGUpe3RoaXMuY29udGV4dHw9dDtsZXQgaT1lKCk7cmV0dXJuIHRoaXMuY29udGV4dF49dCxpfWNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcih0KXtyZXR1cm4hIXRoaXMubmV4dC5pc0NoYXJhY3Rlcih0KSYmKHRoaXMuYWR2YW5jZSgpLCEwKX1wZWVrS2V5d29yZExldCgpe3JldHVybiB0aGlzLm5leHQuaXNLZXl3b3JkTGV0KCl9cGVla0tleXdvcmRBcygpe3JldHVybiB0aGlzLm5leHQuaXNLZXl3b3JkQXMoKX1leHBlY3RDaGFyYWN0ZXIodCl7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIodCl8fHRoaXMuZXJyb3IoYE1pc3NpbmcgZXhwZWN0ZWQgJHtTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfWApfWNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKHQpe3JldHVybiEhdGhpcy5uZXh0LmlzT3BlcmF0b3IodCkmJih0aGlzLmFkdmFuY2UoKSwhMCl9ZXhwZWN0T3BlcmF0b3IodCl7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcih0KXx8dGhpcy5lcnJvcihgTWlzc2luZyBleHBlY3RlZCBvcGVyYXRvciAke3R9YCl9cHJldHR5UHJpbnRUb2tlbih0KXtyZXR1cm4gdD09PWRCPyJlbmQgb2YgaW5wdXQiOmB0b2tlbiAke3R9YH1leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkKCl7bGV0IHQ9dGhpcy5uZXh0O3JldHVybiB0LmlzSWRlbnRpZmllcigpfHx0LmlzS2V5d29yZCgpPyh0aGlzLmFkdmFuY2UoKSx0LnRvU3RyaW5nKCkpOih0LmlzUHJpdmF0ZUlkZW50aWZpZXIoKT90aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHQsImV4cGVjdGVkIGlkZW50aWZpZXIgb3Iga2V5d29yZCIpOnRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgJHt0aGlzLnByZXR0eVByaW50VG9rZW4odCl9LCBleHBlY3RlZCBpZGVudGlmaWVyIG9yIGtleXdvcmRgKSxudWxsKX1leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKXtsZXQgdD10aGlzLm5leHQ7cmV0dXJuIHQuaXNJZGVudGlmaWVyKCl8fHQuaXNLZXl3b3JkKCl8fHQuaXNTdHJpbmcoKT8odGhpcy5hZHZhbmNlKCksdC50b1N0cmluZygpKToodC5pc1ByaXZhdGVJZGVudGlmaWVyKCk/dGhpcy5fcmVwb3J0RXJyb3JGb3JQcml2YXRlSWRlbnRpZmllcih0LCJleHBlY3RlZCBpZGVudGlmaWVyLCBrZXl3b3JkIG9yIHN0cmluZyIpOnRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgJHt0aGlzLnByZXR0eVByaW50VG9rZW4odCl9LCBleHBlY3RlZCBpZGVudGlmaWVyLCBrZXl3b3JkLCBvciBzdHJpbmdgKSwiIil9cGFyc2VDaGFpbigpe2xldCB0PVtdLGU9dGhpcy5pbnB1dEluZGV4O2Zvcig7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGg7KXtsZXQgaT10aGlzLnBhcnNlUGlwZSgpO2lmKHQucHVzaChpKSx0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig1OSkpZm9yKDEmdGhpcy5wYXJzZUZsYWdzfHx0aGlzLmVycm9yKCJCaW5kaW5nIGV4cHJlc3Npb24gY2Fubm90IGNvbnRhaW4gY2hhaW5lZCBleHByZXNzaW9uIik7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTkpOyk7ZWxzZSBpZih0aGlzLmluZGV4PHRoaXMudG9rZW5zLmxlbmd0aCl7bGV0IHI9dGhpcy5pbmRleDtpZih0aGlzLmVycm9yKGBVbmV4cGVjdGVkIHRva2VuICcke3RoaXMubmV4dH0nYCksdGhpcy5pbmRleD09PXIpYnJlYWt9fWlmKDA9PT10Lmxlbmd0aCl7bGV0IGk9dGhpcy5vZmZzZXQscj10aGlzLm9mZnNldCt0aGlzLmlucHV0Lmxlbmd0aDtyZXR1cm4gbmV3IElhKHRoaXMuc3BhbihpLHIpLHRoaXMuc291cmNlU3BhbihpLHIpKX1yZXR1cm4gMT09dC5sZW5ndGg/dFswXTpuZXcga0ModGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSx0KX1wYXJzZVBpcGUoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlRXhwcmVzc2lvbigpO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoInwiKSl7MSZ0aGlzLnBhcnNlRmxhZ3MmJnRoaXMuZXJyb3IoIkNhbm5vdCBoYXZlIGEgcGlwZSBpbiBhbiBhY3Rpb24gZXhwcmVzc2lvbiIpO2Rve2xldCBvLHMsaT10aGlzLmlucHV0SW5kZXgscj10aGlzLmV4cGVjdElkZW50aWZpZXJPcktleXdvcmQoKTtudWxsIT09cj9vPXRoaXMuc291cmNlU3BhbihpKToocj0iIixzPS0xIT09dGhpcy5uZXh0LmluZGV4P3RoaXMubmV4dC5pbmRleDp0aGlzLmlucHV0Lmxlbmd0aCt0aGlzLm9mZnNldCxvPW5ldyBibShzLHMpLnRvQWJzb2x1dGUodGhpcy5hYnNvbHV0ZU9mZnNldCkpO2xldCBhPVtdO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpOylhLnB1c2godGhpcy5wYXJzZUV4cHJlc3Npb24oKSk7ZT1uZXcgUl8odGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0LHMpLGUscixhLG8pfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoInwiKSl9cmV0dXJuIGV9cGFyc2VFeHByZXNzaW9uKCl7cmV0dXJuIHRoaXMucGFyc2VDb25kaXRpb25hbCgpfXBhcnNlQ29uZGl0aW9uYWwoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlTG9naWNhbE9yKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPyIpKXtsZXQgcixpPXRoaXMucGFyc2VQaXBlKCk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpKXI9dGhpcy5wYXJzZVBpcGUoKTtlbHNle2xldCBzPXRoaXMuaW5wdXQuc3Vic3RyaW5nKHQsdGhpcy5pbnB1dEluZGV4KTt0aGlzLmVycm9yKGBDb25kaXRpb25hbCBleHByZXNzaW9uICR7c30gcmVxdWlyZXMgYWxsIDMgZXhwcmVzc2lvbnNgKSxyPW5ldyBJYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKX1yZXR1cm4gbmV3IEZDKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksZSxpLHIpfXJldHVybiBlfXBhcnNlTG9naWNhbE9yKCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZUxvZ2ljYWxBbmQoKTtmb3IoO3RoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoInx8Iik7KXtsZXQgaT10aGlzLnBhcnNlTG9naWNhbEFuZCgpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksInx8IixlLGkpfXJldHVybiBlfXBhcnNlTG9naWNhbEFuZCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VOdWxsaXNoQ29hbGVzY2luZygpO2Zvcig7dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiJiYiKTspe2xldCBpPXRoaXMucGFyc2VOdWxsaXNoQ29hbGVzY2luZygpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksIiYmIixlLGkpfXJldHVybiBlfXBhcnNlTnVsbGlzaENvYWxlc2NpbmcoKXtsZXQgdD10aGlzLmlucHV0SW5kZXgsZT10aGlzLnBhcnNlRXF1YWxpdHkoKTtmb3IoO3RoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj8/Iik7KXtsZXQgaT10aGlzLnBhcnNlRXF1YWxpdHkoKTtlPW5ldyBHbCh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCI/PyIsZSxpKX1yZXR1cm4gZX1wYXJzZUVxdWFsaXR5KCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4LGU9dGhpcy5wYXJzZVJlbGF0aW9uYWwoKTtmb3IoO3RoaXMubmV4dC50eXBlPT1uaS5PcGVyYXRvcjspe2xldCBpPXRoaXMubmV4dC5zdHJWYWx1ZTtzd2l0Y2goaSl7Y2FzZSI9PSI6Y2FzZSI9PT0iOmNhc2UiIT0iOmNhc2UiIT09Ijp0aGlzLmFkdmFuY2UoKTtsZXQgcj10aGlzLnBhcnNlUmVsYXRpb25hbCgpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksaSxlLHIpO2NvbnRpbnVlfWJyZWFrfXJldHVybiBlfXBhcnNlUmVsYXRpb25hbCgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VBZGRpdGl2ZSgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PW5pLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIjwiOmNhc2UiPiI6Y2FzZSI8PSI6Y2FzZSI+PSI6dGhpcy5hZHZhbmNlKCk7bGV0IHI9dGhpcy5wYXJzZUFkZGl0aXZlKCk7ZT1uZXcgR2wodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VBZGRpdGl2ZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VNdWx0aXBsaWNhdGl2ZSgpO2Zvcig7dGhpcy5uZXh0LnR5cGU9PW5pLk9wZXJhdG9yOyl7bGV0IGk9dGhpcy5uZXh0LnN0clZhbHVlO3N3aXRjaChpKXtjYXNlIisiOmNhc2UiLSI6dGhpcy5hZHZhbmNlKCk7bGV0IHI9dGhpcy5wYXJzZU11bHRpcGxpY2F0aXZlKCk7ZT1uZXcgR2wodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpLGUscik7Y29udGludWV9YnJlYWt9cmV0dXJuIGV9cGFyc2VNdWx0aXBsaWNhdGl2ZSgpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VQcmVmaXgoKTtmb3IoO3RoaXMubmV4dC50eXBlPT1uaS5PcGVyYXRvcjspe2xldCBpPXRoaXMubmV4dC5zdHJWYWx1ZTtzd2l0Y2goaSl7Y2FzZSIqIjpjYXNlIiUiOmNhc2UiLyI6dGhpcy5hZHZhbmNlKCk7bGV0IHI9dGhpcy5wYXJzZVByZWZpeCgpO2U9bmV3IEdsKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksaSxlLHIpO2NvbnRpbnVlfWJyZWFrfXJldHVybiBlfXBhcnNlUHJlZml4KCl7aWYodGhpcy5uZXh0LnR5cGU9PW5pLk9wZXJhdG9yKXtsZXQgaSx0PXRoaXMuaW5wdXRJbmRleDtzd2l0Y2godGhpcy5uZXh0LnN0clZhbHVlKXtjYXNlIisiOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSx6Yy5jcmVhdGVQbHVzKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksaSk7Y2FzZSItIjpyZXR1cm4gdGhpcy5hZHZhbmNlKCksaT10aGlzLnBhcnNlUHJlZml4KCksemMuY3JlYXRlTWludXModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKTtjYXNlIiEiOnJldHVybiB0aGlzLmFkdmFuY2UoKSxpPXRoaXMucGFyc2VQcmVmaXgoKSxuZXcgSEModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxpKX19cmV0dXJuIHRoaXMucGFyc2VDYWxsQ2hhaW4oKX1wYXJzZUNhbGxDaGFpbigpe2xldCB0PXRoaXMuaW5wdXRJbmRleCxlPXRoaXMucGFyc2VQcmltYXJ5KCk7Zm9yKDs7KWlmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQ2KSllPXRoaXMucGFyc2VBY2Nlc3NNZW1iZXIoZSx0LCExKTtlbHNlIGlmKHRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj8uIikpZT10aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig0MCk/dGhpcy5wYXJzZUNhbGwoZSx0LCEwKTp0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSk/dGhpcy5wYXJzZUtleWVkUmVhZE9yV3JpdGUoZSx0LCEwKTp0aGlzLnBhcnNlQWNjZXNzTWVtYmVyKGUsdCwhMCk7ZWxzZSBpZih0aGlzLmNvbnN1bWVPcHRpb25hbENoYXJhY3Rlcig5MSkpZT10aGlzLnBhcnNlS2V5ZWRSZWFkT3JXcml0ZShlLHQsITEpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDApKWU9dGhpcy5wYXJzZUNhbGwoZSx0LCExKTtlbHNle2lmKCF0aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCIhIikpcmV0dXJuIGU7ZT1uZXcgVUModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlKX19cGFyc2VQcmltYXJ5KCl7bGV0IHQ9dGhpcy5pbnB1dEluZGV4O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQwKSl7dGhpcy5ycGFyZW5zRXhwZWN0ZWQrKztsZXQgZT10aGlzLnBhcnNlUGlwZSgpO3JldHVybiB0aGlzLnJwYXJlbnNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDQxKSxlfWlmKHRoaXMubmV4dC5pc0tleXdvcmROdWxsKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyB0YSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLG51bGwpO2lmKHRoaXMubmV4dC5pc0tleXdvcmRVbmRlZmluZWQoKSlyZXR1cm4gdGhpcy5hZHZhbmNlKCksbmV3IHRhKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCksdm9pZCAwKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkVHJ1ZSgpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgdGEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSwhMCk7aWYodGhpcy5uZXh0LmlzS2V5d29yZEZhbHNlKCkpcmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyB0YSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLCExKTtpZih0aGlzLm5leHQuaXNLZXl3b3JkVGhpcygpKXJldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgT0ModGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSk7aWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoOTEpKXt0aGlzLnJicmFja2V0c0V4cGVjdGVkKys7bGV0IGU9dGhpcy5wYXJzZUV4cHJlc3Npb25MaXN0KDkzKTtyZXR1cm4gdGhpcy5yYnJhY2tldHNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKDkzKSxuZXcgT18odGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlKX1pZih0aGlzLm5leHQuaXNDaGFyYWN0ZXIodGgpKXJldHVybiB0aGlzLnBhcnNlTGl0ZXJhbE1hcCgpO2lmKHRoaXMubmV4dC5pc0lkZW50aWZpZXIoKSlyZXR1cm4gdGhpcy5wYXJzZUFjY2Vzc01lbWJlcihuZXcgeG0odGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSksdCwhMSk7aWYodGhpcy5uZXh0LmlzTnVtYmVyKCkpe2xldCBlPXRoaXMubmV4dC50b051bWJlcigpO3JldHVybiB0aGlzLmFkdmFuY2UoKSxuZXcgdGEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSxlKX1pZih0aGlzLm5leHQuaXNTdHJpbmcoKSl7bGV0IGU9dGhpcy5uZXh0LnRvU3RyaW5nKCk7cmV0dXJuIHRoaXMuYWR2YW5jZSgpLG5ldyB0YSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpLGUpfXJldHVybiB0aGlzLm5leHQuaXNQcml2YXRlSWRlbnRpZmllcigpPyh0aGlzLl9yZXBvcnRFcnJvckZvclByaXZhdGVJZGVudGlmaWVyKHRoaXMubmV4dCxudWxsKSxuZXcgSWEodGhpcy5zcGFuKHQpLHRoaXMuc291cmNlU3Bhbih0KSkpOnRoaXMuaW5kZXg+PXRoaXMudG9rZW5zLmxlbmd0aD8odGhpcy5lcnJvcihgVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbjogJHt0aGlzLmlucHV0fWApLG5ldyBJYSh0aGlzLnNwYW4odCksdGhpcy5zb3VyY2VTcGFuKHQpKSk6KHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgdG9rZW4gJHt0aGlzLm5leHR9YCksbmV3IElhKHRoaXMuc3Bhbih0KSx0aGlzLnNvdXJjZVNwYW4odCkpKX1wYXJzZUV4cHJlc3Npb25MaXN0KHQpe2xldCBlPVtdO2Rve2lmKHRoaXMubmV4dC5pc0NoYXJhY3Rlcih0KSlicmVhaztlLnB1c2godGhpcy5wYXJzZVBpcGUoKSl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTtyZXR1cm4gZX1wYXJzZUxpdGVyYWxNYXAoKXtsZXQgdD1bXSxlPVtdLGk9dGhpcy5pbnB1dEluZGV4O2lmKHRoaXMuZXhwZWN0Q2hhcmFjdGVyKHRoKSwhdGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoT3UpKXt0aGlzLnJicmFjZXNFeHBlY3RlZCsrO2Rve2xldCByPXRoaXMuaW5wdXRJbmRleCxvPXRoaXMubmV4dC5pc1N0cmluZygpLHM9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkT3JTdHJpbmcoKTtpZih0LnB1c2goe2tleTpzLHF1b3RlZDpvfSksbyl0aGlzLmV4cGVjdENoYXJhY3Rlcig1OCksZS5wdXNoKHRoaXMucGFyc2VQaXBlKCkpO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpKWUucHVzaCh0aGlzLnBhcnNlUGlwZSgpKTtlbHNle2xldCBhPXRoaXMuc3BhbihyKSxsPXRoaXMuc291cmNlU3BhbihyKTtlLnB1c2gobmV3IEx1KGEsbCxsLG5ldyB4bShhLGwpLHMpKX19d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpKTt0aGlzLnJicmFjZXNFeHBlY3RlZC0tLHRoaXMuZXhwZWN0Q2hhcmFjdGVyKE91KX1yZXR1cm4gbmV3IFZDKHRoaXMuc3BhbihpKSx0aGlzLnNvdXJjZVNwYW4oaSksdCxlKX1wYXJzZUFjY2Vzc01lbWJlcih0LGUsaSl7bGV0IGEscj10aGlzLmlucHV0SW5kZXgsbz10aGlzLndpdGhDb250ZXh0KHNtLldyaXRhYmxlLCgpPT57bGV0IGw9dGhpcy5leHBlY3RJZGVudGlmaWVyT3JLZXl3b3JkKCk/PyIiO3JldHVybiAwPT09bC5sZW5ndGgmJnRoaXMuZXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIgZm9yIHByb3BlcnR5IGFjY2VzcyIsdC5zcGFuLmVuZCksbH0pLHM9dGhpcy5zb3VyY2VTcGFuKHIpO2lmKGkpdGhpcy5jb25zdW1lT3B0aW9uYWxBc3NpZ25tZW50KCk/KHRoaXMuZXJyb3IoIlRoZSAnPy4nIG9wZXJhdG9yIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBhc3NpZ25tZW50IiksYT1uZXcgSWEodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSkpOmE9bmV3IExDKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkscyx0LG8pO2Vsc2UgaWYodGhpcy5jb25zdW1lT3B0aW9uYWxBc3NpZ25tZW50KCkpe2lmKCEoMSZ0aGlzLnBhcnNlRmxhZ3MpKXJldHVybiB0aGlzLmVycm9yKCJCaW5kaW5ncyBjYW5ub3QgY29udGFpbiBhc3NpZ25tZW50cyIpLG5ldyBJYSh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpKTtsZXQgbD10aGlzLnBhcnNlQ29uZGl0aW9uYWwoKTthPW5ldyBOQyh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHMsdCxvLGwpfWVsc2UgYT1uZXcgTHUodGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSxzLHQsbyk7cmV0dXJuIGF9cGFyc2VDYWxsKHQsZSxpKXtsZXQgcj10aGlzLmlucHV0SW5kZXg7dGhpcy5ycGFyZW5zRXhwZWN0ZWQrKztsZXQgbz10aGlzLnBhcnNlQ2FsbEFyZ3VtZW50cygpLHM9dGhpcy5zcGFuKHIsdGhpcy5pbnB1dEluZGV4KS50b0Fic29sdXRlKHRoaXMuYWJzb2x1dGVPZmZzZXQpO3RoaXMuZXhwZWN0Q2hhcmFjdGVyKDQxKSx0aGlzLnJwYXJlbnNFeHBlY3RlZC0tO2xldCBhPXRoaXMuc3BhbihlKSxsPXRoaXMuc291cmNlU3BhbihlKTtyZXR1cm4gaT9uZXcga18oYSxsLHQsbyxzKTpuZXcgYWgoYSxsLHQsbyxzKX1jb25zdW1lT3B0aW9uYWxBc3NpZ25tZW50KCl7cmV0dXJuIDImdGhpcy5wYXJzZUZsYWdzJiZ0aGlzLm5leHQuaXNPcGVyYXRvcigiISIpJiZ0aGlzLnBlZWsoMSkuaXNPcGVyYXRvcigiPSIpPyh0aGlzLmFkdmFuY2UoKSx0aGlzLmFkdmFuY2UoKSwhMCk6dGhpcy5jb25zdW1lT3B0aW9uYWxPcGVyYXRvcigiPSIpfXBhcnNlQ2FsbEFyZ3VtZW50cygpe2lmKHRoaXMubmV4dC5pc0NoYXJhY3Rlcig0MSkpcmV0dXJuW107bGV0IHQ9W107ZG97dC5wdXNoKHRoaXMucGFyc2VQaXBlKCkpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDQ0KSk7cmV0dXJuIHR9ZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCl7bGV0IHQ9IiIsZT0hMSxpPXRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0O2Rve3QrPXRoaXMuZXhwZWN0SWRlbnRpZmllck9yS2V5d29yZE9yU3RyaW5nKCksZT10aGlzLmNvbnN1bWVPcHRpb25hbE9wZXJhdG9yKCItIiksZSYmKHQrPSItIil9d2hpbGUoZSk7cmV0dXJue3NvdXJjZTp0LHNwYW46bmV3IGFsKGksaSt0Lmxlbmd0aCl9fXBhcnNlVGVtcGxhdGVCaW5kaW5ncyh0KXtsZXQgZT1bXTtmb3IoZS5wdXNoKC4uLnRoaXMucGFyc2VEaXJlY3RpdmVLZXl3b3JkQmluZGluZ3ModCkpO3RoaXMuaW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoOyl7bGV0IGk9dGhpcy5wYXJzZUxldEJpbmRpbmcoKTtpZihpKWUucHVzaChpKTtlbHNle2xldCByPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCksbz10aGlzLnBhcnNlQXNCaW5kaW5nKHIpO28/ZS5wdXNoKG8pOihyLnNvdXJjZT10LnNvdXJjZStyLnNvdXJjZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStyLnNvdXJjZS5zdWJzdHJpbmcoMSksZS5wdXNoKC4uLnRoaXMucGFyc2VEaXJlY3RpdmVLZXl3b3JkQmluZGluZ3MocikpKX10aGlzLmNvbnN1bWVTdGF0ZW1lbnRUZXJtaW5hdG9yKCl9cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy50ZW1wbGF0ZUJpbmRpbmdzPXQsdGhpcy53YXJuaW5ncz1lLHRoaXMuZXJyb3JzPWl9fShlLFtdLHRoaXMuZXJyb3JzKX1wYXJzZUtleWVkUmVhZE9yV3JpdGUodCxlLGkpe3JldHVybiB0aGlzLndpdGhDb250ZXh0KHNtLldyaXRhYmxlLCgpPT57dGhpcy5yYnJhY2tldHNFeHBlY3RlZCsrO2xldCByPXRoaXMucGFyc2VQaXBlKCk7aWYociBpbnN0YW5jZW9mIElhJiZ0aGlzLmVycm9yKCJLZXkgYWNjZXNzIGNhbm5vdCBiZSBlbXB0eSIpLHRoaXMucmJyYWNrZXRzRXhwZWN0ZWQtLSx0aGlzLmV4cGVjdENoYXJhY3Rlcig5MyksIXRoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj0iKSlyZXR1cm4gaT9uZXcgUF8odGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSx0LHIpOm5ldyBJXyh0aGlzLnNwYW4oZSksdGhpcy5zb3VyY2VTcGFuKGUpLHQscik7aWYoIWkpe2xldCBvPXRoaXMucGFyc2VDb25kaXRpb25hbCgpO3JldHVybiBuZXcgQkModGhpcy5zcGFuKGUpLHRoaXMuc291cmNlU3BhbihlKSx0LHIsbyl9cmV0dXJuIHRoaXMuZXJyb3IoIlRoZSAnPy4nIG9wZXJhdG9yIGNhbm5vdCBiZSB1c2VkIGluIHRoZSBhc3NpZ25tZW50IiksbmV3IElhKHRoaXMuc3BhbihlKSx0aGlzLnNvdXJjZVNwYW4oZSkpfSl9cGFyc2VEaXJlY3RpdmVLZXl3b3JkQmluZGluZ3ModCl7bGV0IGU9W107dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNTgpO2xldCBpPXRoaXMuZ2V0RGlyZWN0aXZlQm91bmRUYXJnZXQoKSxyPXRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0LG89dGhpcy5wYXJzZUFzQmluZGluZyh0KTtvfHwodGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpLHI9dGhpcy5jdXJyZW50QWJzb2x1dGVPZmZzZXQpO2xldCBzPW5ldyBhbCh0LnNwYW4uc3RhcnQscik7cmV0dXJuIGUucHVzaChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuc291cmNlU3Bhbj10LHRoaXMua2V5PWUsdGhpcy52YWx1ZT1pfX0ocyx0LGkpKSxvJiZlLnB1c2gobyksZX1nZXREaXJlY3RpdmVCb3VuZFRhcmdldCgpe2lmKHRoaXMubmV4dD09PWRCfHx0aGlzLnBlZWtLZXl3b3JkQXMoKXx8dGhpcy5wZWVrS2V5d29yZExldCgpKXJldHVybiBudWxsO2xldCB0PXRoaXMucGFyc2VQaXBlKCkse3N0YXJ0OmUsZW5kOml9PXQuc3BhbixyPXRoaXMuaW5wdXQuc3Vic3RyaW5nKGUsaSk7cmV0dXJuIG5ldyBSdSh0LHIsdGhpcy5sb2NhdGlvbix0aGlzLmFic29sdXRlT2Zmc2V0K2UsdGhpcy5lcnJvcnMpfXBhcnNlQXNCaW5kaW5nKHQpe2lmKCF0aGlzLnBlZWtLZXl3b3JkQXMoKSlyZXR1cm4gbnVsbDt0aGlzLmFkdmFuY2UoKTtsZXQgZT10aGlzLmV4cGVjdFRlbXBsYXRlQmluZGluZ0tleSgpO3RoaXMuY29uc3VtZVN0YXRlbWVudFRlcm1pbmF0b3IoKTtsZXQgaT1uZXcgYWwodC5zcGFuLnN0YXJ0LHRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0KTtyZXR1cm4gbmV3IHpDKGksZSx0KX1wYXJzZUxldEJpbmRpbmcoKXtpZighdGhpcy5wZWVrS2V5d29yZExldCgpKXJldHVybiBudWxsO2xldCB0PXRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0O3RoaXMuYWR2YW5jZSgpO2xldCBlPXRoaXMuZXhwZWN0VGVtcGxhdGVCaW5kaW5nS2V5KCksaT1udWxsO3RoaXMuY29uc3VtZU9wdGlvbmFsT3BlcmF0b3IoIj0iKSYmKGk9dGhpcy5leHBlY3RUZW1wbGF0ZUJpbmRpbmdLZXkoKSksdGhpcy5jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpO2xldCByPW5ldyBhbCh0LHRoaXMuY3VycmVudEFic29sdXRlT2Zmc2V0KTtyZXR1cm4gbmV3IHpDKHIsZSxpKX1jb25zdW1lU3RhdGVtZW50VGVybWluYXRvcigpe3RoaXMuY29uc3VtZU9wdGlvbmFsQ2hhcmFjdGVyKDU5KXx8dGhpcy5jb25zdW1lT3B0aW9uYWxDaGFyYWN0ZXIoNDQpfWVycm9yKHQsZT1udWxsKXt0aGlzLmVycm9ycy5wdXNoKG5ldyBSQyh0LHRoaXMuaW5wdXQsdGhpcy5sb2NhdGlvblRleHQoZSksdGhpcy5sb2NhdGlvbikpLHRoaXMuc2tpcCgpfWxvY2F0aW9uVGV4dCh0PW51bGwpe3JldHVybiBudWxsPT10JiYodD10aGlzLmluZGV4KSx0PHRoaXMudG9rZW5zLmxlbmd0aD9gYXQgY29sdW1uICR7dGhpcy50b2tlbnNbdF0uaW5kZXgrMX0gaW5gOiJhdCB0aGUgZW5kIG9mIHRoZSBleHByZXNzaW9uIn1fcmVwb3J0RXJyb3JGb3JQcml2YXRlSWRlbnRpZmllcih0LGUpe2xldCBpPWBQcml2YXRlIGlkZW50aWZpZXJzIGFyZSBub3Qgc3VwcG9ydGVkLiBVbmV4cGVjdGVkIHByaXZhdGUgaWRlbnRpZmllcjogJHt0fWA7bnVsbCE9PWUmJihpKz1gLCAke2V9YCksdGhpcy5lcnJvcihpKX1za2lwKCl7bGV0IHQ9dGhpcy5uZXh0O2Zvcig7dGhpcy5pbmRleDx0aGlzLnRva2Vucy5sZW5ndGgmJiF0LmlzQ2hhcmFjdGVyKDU5KSYmIXQuaXNPcGVyYXRvcigifCIpJiYodGhpcy5ycGFyZW5zRXhwZWN0ZWQ8PTB8fCF0LmlzQ2hhcmFjdGVyKDQxKSkmJih0aGlzLnJicmFjZXNFeHBlY3RlZDw9MHx8IXQuaXNDaGFyYWN0ZXIoT3UpKSYmKHRoaXMucmJyYWNrZXRzRXhwZWN0ZWQ8PTB8fCF0LmlzQ2hhcmFjdGVyKDkzKSkmJiEodGhpcy5jb250ZXh0JnNtLldyaXRhYmxlJiZ0LmlzT3BlcmF0b3IoIj0iKSk7KXRoaXMubmV4dC5pc0Vycm9yKCkmJnRoaXMuZXJyb3JzLnB1c2gobmV3IFJDKHRoaXMubmV4dC50b1N0cmluZygpLHRoaXMuaW5wdXQsdGhpcy5sb2NhdGlvblRleHQoKSx0aGlzLmxvY2F0aW9uKSksdGhpcy5hZHZhbmNlKCksdD10aGlzLm5leHR9fSxkVj1jbGFzcyBleHRlbmRzIFpCe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmVycm9ycz1bXX12aXNpdFBpcGUoKXt0aGlzLmVycm9ycy5wdXNoKCJwaXBlcyIpfX0sQ209Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZVNwYW49dCx0aGlzLmkxOG49ZX19LEZfPWNsYXNzIGV4dGVuZHMgQ217Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoZSxyKSx0aGlzLnZhbHVlPXQsdGhpcy50b2tlbnM9aX12aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0VGV4dCh0aGlzLGUpfX0sTl89Y2xhc3MgZXh0ZW5kcyBDbXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIocixzKSx0aGlzLnN3aXRjaFZhbHVlPXQsdGhpcy50eXBlPWUsdGhpcy5jYXNlcz1pLHRoaXMuc3dpdGNoVmFsdWVTb3VyY2VTcGFuPW99dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdEV4cGFuc2lvbih0aGlzLGUpfX0saFY9Y2xhc3MgZXh0ZW5kcyBDbXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhKXtzdXBlcihpLGEpLHRoaXMubmFtZT10LHRoaXMudmFsdWU9ZSx0aGlzLmtleVNwYW49cix0aGlzLnZhbHVlU3Bhbj1vLHRoaXMudmFsdWVUb2tlbnM9c312aXNpdCh0LGUpe3JldHVybiB0LnZpc2l0QXR0cmlidXRlKHRoaXMsZSl9fSxxQz1jbGFzcyBleHRlbmRzIENte2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzPW51bGwsYSl7c3VwZXIocixhKSx0aGlzLm5hbWU9dCx0aGlzLmF0dHJzPWUsdGhpcy5jaGlsZHJlbj1pLHRoaXMuc3RhcnRTb3VyY2VTcGFuPW8sdGhpcy5lbmRTb3VyY2VTcGFuPXN9dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdEVsZW1lbnQodGhpcyxlKX19LHhEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy52YWx1ZT10LHRoaXMuc291cmNlU3Bhbj1lfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRDb21tZW50KHRoaXMsZSl9fTtmdW5jdGlvbiBVdShuLHQsZT1udWxsKXtsZXQgaT1bXSxyPW4udmlzaXQ/bz0+bi52aXNpdChvLGUpfHxvLnZpc2l0KG4sZSk6bz0+by52aXNpdChuLGUpO3JldHVybiB0LmZvckVhY2gobz0+e2xldCBzPXIobyk7cyYmaS5wdXNoKHMpfSksaX12YXIgQ0Q9e0FFbGlnOiJceGM2IixBTVA6IiYiLGFtcDoiJiIsQWFjdXRlOiJceGMxIixBYnJldmU6Ilx1MDEwMiIsQWNpcmM6Ilx4YzIiLEFjeToiXHUwNDEwIixBZnI6Ilx1ZDgzNVx1ZGQwNCIsQWdyYXZlOiJceGMwIixBbHBoYToiXHUwMzkxIixBbWFjcjoiXHUwMTAwIixBbmQ6Ilx1MmE1MyIsQW9nb246Ilx1MDEwNCIsQW9wZjoiXHVkODM1XHVkZDM4IixBcHBseUZ1bmN0aW9uOiJcdTIwNjEiLGFmOiJcdTIwNjEiLEFyaW5nOiJceGM1IixhbmdzdDoiXHhjNSIsQXNjcjoiXHVkODM1XHVkYzljIixBc3NpZ246Ilx1MjI1NCIsY29sb25lOiJcdTIyNTQiLGNvbG9uZXE6Ilx1MjI1NCIsQXRpbGRlOiJceGMzIixBdW1sOiJceGM0IixCYWNrc2xhc2g6Ilx1MjIxNiIsc2V0bWludXM6Ilx1MjIxNiIsc2V0bW46Ilx1MjIxNiIsc21hbGxzZXRtaW51czoiXHUyMjE2Iixzc2V0bW46Ilx1MjIxNiIsQmFydjoiXHUyYWU3IixCYXJ3ZWQ6Ilx1MjMwNiIsZG91YmxlYmFyd2VkZ2U6Ilx1MjMwNiIsQmN5OiJcdTA0MTEiLEJlY2F1c2U6Ilx1MjIzNSIsYmVjYXVzOiJcdTIyMzUiLGJlY2F1c2U6Ilx1MjIzNSIsQmVybm91bGxpczoiXHUyMTJjIixCc2NyOiJcdTIxMmMiLGJlcm5vdToiXHUyMTJjIixCZXRhOiJcdTAzOTIiLEJmcjoiXHVkODM1XHVkZDA1IixCb3BmOiJcdWQ4MzVcdWRkMzkiLEJyZXZlOiJcdTAyZDgiLGJyZXZlOiJcdTAyZDgiLEJ1bXBlcToiXHUyMjRlIixIdW1wRG93bkh1bXA6Ilx1MjI0ZSIsYnVtcDoiXHUyMjRlIixDSGN5OiJcdTA0MjciLENPUFk6Ilx4YTkiLGNvcHk6Ilx4YTkiLENhY3V0ZToiXHUwMTA2IixDYXA6Ilx1MjJkMiIsQ2FwaXRhbERpZmZlcmVudGlhbEQ6Ilx1MjE0NSIsREQ6Ilx1MjE0NSIsQ2F5bGV5czoiXHUyMTJkIixDZnI6Ilx1MjEyZCIsQ2Nhcm9uOiJcdTAxMGMiLENjZWRpbDoiXHhjNyIsQ2NpcmM6Ilx1MDEwOCIsQ2NvbmludDoiXHUyMjMwIixDZG90OiJcdTAxMGEiLENlZGlsbGE6Ilx4YjgiLGNlZGlsOiJceGI4IixDZW50ZXJEb3Q6Ilx4YjciLGNlbnRlcmRvdDoiXHhiNyIsbWlkZG90OiJceGI3IixDaGk6Ilx1MDNhNyIsQ2lyY2xlRG90OiJcdTIyOTkiLG9kb3Q6Ilx1MjI5OSIsQ2lyY2xlTWludXM6Ilx1MjI5NiIsb21pbnVzOiJcdTIyOTYiLENpcmNsZVBsdXM6Ilx1MjI5NSIsb3BsdXM6Ilx1MjI5NSIsQ2lyY2xlVGltZXM6Ilx1MjI5NyIsb3RpbWVzOiJcdTIyOTciLENsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjMyIixjd2NvbmludDoiXHUyMjMyIixDbG9zZUN1cmx5RG91YmxlUXVvdGU6Ilx1MjAxZCIscmRxdW86Ilx1MjAxZCIscmRxdW9yOiJcdTIwMWQiLENsb3NlQ3VybHlRdW90ZToiXHUyMDE5Iixyc3F1bzoiXHUyMDE5Iixyc3F1b3I6Ilx1MjAxOSIsQ29sb246Ilx1MjIzNyIsUHJvcG9ydGlvbjoiXHUyMjM3IixDb2xvbmU6Ilx1MmE3NCIsQ29uZ3J1ZW50OiJcdTIyNjEiLGVxdWl2OiJcdTIyNjEiLENvbmludDoiXHUyMjJmIixEb3VibGVDb250b3VySW50ZWdyYWw6Ilx1MjIyZiIsQ29udG91ckludGVncmFsOiJcdTIyMmUiLGNvbmludDoiXHUyMjJlIixvaW50OiJcdTIyMmUiLENvcGY6Ilx1MjEwMiIsY29tcGxleGVzOiJcdTIxMDIiLENvcHJvZHVjdDoiXHUyMjEwIixjb3Byb2Q6Ilx1MjIxMCIsQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDoiXHUyMjMzIixhd2NvbmludDoiXHUyMjMzIixDcm9zczoiXHUyYTJmIixDc2NyOiJcdWQ4MzVcdWRjOWUiLEN1cDoiXHUyMmQzIixDdXBDYXA6Ilx1MjI0ZCIsYXN5bXBlcToiXHUyMjRkIixERG90cmFoZDoiXHUyOTExIixESmN5OiJcdTA0MDIiLERTY3k6Ilx1MDQwNSIsRFpjeToiXHUwNDBmIixEYWdnZXI6Ilx1MjAyMSIsZGRhZ2dlcjoiXHUyMDIxIixEYXJyOiJcdTIxYTEiLERhc2h2OiJcdTJhZTQiLERvdWJsZUxlZnRUZWU6Ilx1MmFlNCIsRGNhcm9uOiJcdTAxMGUiLERjeToiXHUwNDE0IixEZWw6Ilx1MjIwNyIsbmFibGE6Ilx1MjIwNyIsRGVsdGE6Ilx1MDM5NCIsRGZyOiJcdWQ4MzVcdWRkMDciLERpYWNyaXRpY2FsQWN1dGU6Ilx4YjQiLGFjdXRlOiJceGI0IixEaWFjcml0aWNhbERvdDoiXHUwMmQ5Iixkb3Q6Ilx1MDJkOSIsRGlhY3JpdGljYWxEb3VibGVBY3V0ZToiXHUwMmRkIixkYmxhYzoiXHUwMmRkIixEaWFjcml0aWNhbEdyYXZlOiJgIixncmF2ZToiYCIsRGlhY3JpdGljYWxUaWxkZToiXHUwMmRjIix0aWxkZToiXHUwMmRjIixEaWFtb25kOiJcdTIyYzQiLGRpYW06Ilx1MjJjNCIsZGlhbW9uZDoiXHUyMmM0IixEaWZmZXJlbnRpYWxEOiJcdTIxNDYiLGRkOiJcdTIxNDYiLERvcGY6Ilx1ZDgzNVx1ZGQzYiIsRG90OiJceGE4IixEb3VibGVEb3Q6Ilx4YTgiLGRpZToiXHhhOCIsdW1sOiJceGE4IixEb3REb3Q6Ilx1MjBkYyIsRG90RXF1YWw6Ilx1MjI1MCIsZG90ZXE6Ilx1MjI1MCIsZXNkb3Q6Ilx1MjI1MCIsRG91YmxlRG93bkFycm93OiJcdTIxZDMiLERvd25hcnJvdzoiXHUyMWQzIixkQXJyOiJcdTIxZDMiLERvdWJsZUxlZnRBcnJvdzoiXHUyMWQwIixMZWZ0YXJyb3c6Ilx1MjFkMCIsbEFycjoiXHUyMWQwIixEb3VibGVMZWZ0UmlnaHRBcnJvdzoiXHUyMWQ0IixMZWZ0cmlnaHRhcnJvdzoiXHUyMWQ0IixoQXJyOiJcdTIxZDQiLGlmZjoiXHUyMWQ0IixEb3VibGVMb25nTGVmdEFycm93OiJcdTI3ZjgiLExvbmdsZWZ0YXJyb3c6Ilx1MjdmOCIseGxBcnI6Ilx1MjdmOCIsRG91YmxlTG9uZ0xlZnRSaWdodEFycm93OiJcdTI3ZmEiLExvbmdsZWZ0cmlnaHRhcnJvdzoiXHUyN2ZhIix4aEFycjoiXHUyN2ZhIixEb3VibGVMb25nUmlnaHRBcnJvdzoiXHUyN2Y5IixMb25ncmlnaHRhcnJvdzoiXHUyN2Y5Iix4ckFycjoiXHUyN2Y5IixEb3VibGVSaWdodEFycm93OiJcdTIxZDIiLEltcGxpZXM6Ilx1MjFkMiIsUmlnaHRhcnJvdzoiXHUyMWQyIixyQXJyOiJcdTIxZDIiLERvdWJsZVJpZ2h0VGVlOiJcdTIyYTgiLHZEYXNoOiJcdTIyYTgiLERvdWJsZVVwQXJyb3c6Ilx1MjFkMSIsVXBhcnJvdzoiXHUyMWQxIix1QXJyOiJcdTIxZDEiLERvdWJsZVVwRG93bkFycm93OiJcdTIxZDUiLFVwZG93bmFycm93OiJcdTIxZDUiLHZBcnI6Ilx1MjFkNSIsRG91YmxlVmVydGljYWxCYXI6Ilx1MjIyNSIscGFyOiJcdTIyMjUiLHBhcmFsbGVsOiJcdTIyMjUiLHNob3J0cGFyYWxsZWw6Ilx1MjIyNSIsc3BhcjoiXHUyMjI1IixEb3duQXJyb3c6Ilx1MjE5MyIsU2hvcnREb3duQXJyb3c6Ilx1MjE5MyIsZGFycjoiXHUyMTkzIixkb3duYXJyb3c6Ilx1MjE5MyIsRG93bkFycm93QmFyOiJcdTI5MTMiLERvd25BcnJvd1VwQXJyb3c6Ilx1MjFmNSIsZHVhcnI6Ilx1MjFmNSIsRG93bkJyZXZlOiJcdTAzMTEiLERvd25MZWZ0UmlnaHRWZWN0b3I6Ilx1Mjk1MCIsRG93bkxlZnRUZWVWZWN0b3I6Ilx1Mjk1ZSIsRG93bkxlZnRWZWN0b3I6Ilx1MjFiZCIsbGVmdGhhcnBvb25kb3duOiJcdTIxYmQiLGxoYXJkOiJcdTIxYmQiLERvd25MZWZ0VmVjdG9yQmFyOiJcdTI5NTYiLERvd25SaWdodFRlZVZlY3RvcjoiXHUyOTVmIixEb3duUmlnaHRWZWN0b3I6Ilx1MjFjMSIscmhhcmQ6Ilx1MjFjMSIscmlnaHRoYXJwb29uZG93bjoiXHUyMWMxIixEb3duUmlnaHRWZWN0b3JCYXI6Ilx1Mjk1NyIsRG93blRlZToiXHUyMmE0Iix0b3A6Ilx1MjJhNCIsRG93blRlZUFycm93OiJcdTIxYTciLG1hcHN0b2Rvd246Ilx1MjFhNyIsRHNjcjoiXHVkODM1XHVkYzlmIixEc3Ryb2s6Ilx1MDExMCIsRU5HOiJcdTAxNGEiLEVUSDoiXHhkMCIsRWFjdXRlOiJceGM5IixFY2Fyb246Ilx1MDExYSIsRWNpcmM6Ilx4Y2EiLEVjeToiXHUwNDJkIixFZG90OiJcdTAxMTYiLEVmcjoiXHVkODM1XHVkZDA4IixFZ3JhdmU6Ilx4YzgiLEVsZW1lbnQ6Ilx1MjIwOCIsaW46Ilx1MjIwOCIsaXNpbjoiXHUyMjA4Iixpc2ludjoiXHUyMjA4IixFbWFjcjoiXHUwMTEyIixFbXB0eVNtYWxsU3F1YXJlOiJcdTI1ZmIiLEVtcHR5VmVyeVNtYWxsU3F1YXJlOiJcdTI1YWIiLEVvZ29uOiJcdTAxMTgiLEVvcGY6Ilx1ZDgzNVx1ZGQzYyIsRXBzaWxvbjoiXHUwMzk1IixFcXVhbDoiXHUyYTc1IixFcXVhbFRpbGRlOiJcdTIyNDIiLGVxc2ltOiJcdTIyNDIiLGVzaW06Ilx1MjI0MiIsRXF1aWxpYnJpdW06Ilx1MjFjYyIscmlnaHRsZWZ0aGFycG9vbnM6Ilx1MjFjYyIscmxoYXI6Ilx1MjFjYyIsRXNjcjoiXHUyMTMwIixleHBlY3RhdGlvbjoiXHUyMTMwIixFc2ltOiJcdTJhNzMiLEV0YToiXHUwMzk3IixFdW1sOiJceGNiIixFeGlzdHM6Ilx1MjIwMyIsZXhpc3Q6Ilx1MjIwMyIsRXhwb25lbnRpYWxFOiJcdTIxNDciLGVlOiJcdTIxNDciLGV4cG9uZW50aWFsZToiXHUyMTQ3IixGY3k6Ilx1MDQyNCIsRmZyOiJcdWQ4MzVcdWRkMDkiLEZpbGxlZFNtYWxsU3F1YXJlOiJcdTI1ZmMiLEZpbGxlZFZlcnlTbWFsbFNxdWFyZToiXHUyNWFhIixibGFja3NxdWFyZToiXHUyNWFhIixzcXVhcmY6Ilx1MjVhYSIsc3F1ZjoiXHUyNWFhIixGb3BmOiJcdWQ4MzVcdWRkM2QiLEZvckFsbDoiXHUyMjAwIixmb3JhbGw6Ilx1MjIwMCIsRm91cmllcnRyZjoiXHUyMTMxIixGc2NyOiJcdTIxMzEiLEdKY3k6Ilx1MDQwMyIsR1Q6Ij4iLGd0OiI+IixHYW1tYToiXHUwMzkzIixHYW1tYWQ6Ilx1MDNkYyIsR2JyZXZlOiJcdTAxMWUiLEdjZWRpbDoiXHUwMTIyIixHY2lyYzoiXHUwMTFjIixHY3k6Ilx1MDQxMyIsR2RvdDoiXHUwMTIwIixHZnI6Ilx1ZDgzNVx1ZGQwYSIsR2c6Ilx1MjJkOSIsZ2dnOiJcdTIyZDkiLEdvcGY6Ilx1ZDgzNVx1ZGQzZSIsR3JlYXRlckVxdWFsOiJcdTIyNjUiLGdlOiJcdTIyNjUiLGdlcToiXHUyMjY1IixHcmVhdGVyRXF1YWxMZXNzOiJcdTIyZGIiLGdlbDoiXHUyMmRiIixndHJlcWxlc3M6Ilx1MjJkYiIsR3JlYXRlckZ1bGxFcXVhbDoiXHUyMjY3IixnRToiXHUyMjY3IixnZXFxOiJcdTIyNjciLEdyZWF0ZXJHcmVhdGVyOiJcdTJhYTIiLEdyZWF0ZXJMZXNzOiJcdTIyNzciLGdsOiJcdTIyNzciLGd0cmxlc3M6Ilx1MjI3NyIsR3JlYXRlclNsYW50RXF1YWw6Ilx1MmE3ZSIsZ2Vxc2xhbnQ6Ilx1MmE3ZSIsZ2VzOiJcdTJhN2UiLEdyZWF0ZXJUaWxkZToiXHUyMjczIixnc2ltOiJcdTIyNzMiLGd0cnNpbToiXHUyMjczIixHc2NyOiJcdWQ4MzVcdWRjYTIiLEd0OiJcdTIyNmIiLE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiJcdTIyNmIiLGdnOiJcdTIyNmIiLEhBUkRjeToiXHUwNDJhIixIYWNlazoiXHUwMmM3IixjYXJvbjoiXHUwMmM3IixIYXQ6Il4iLEhjaXJjOiJcdTAxMjQiLEhmcjoiXHUyMTBjIixQb2luY2FyZXBsYW5lOiJcdTIxMGMiLEhpbGJlcnRTcGFjZToiXHUyMTBiIixIc2NyOiJcdTIxMGIiLGhhbWlsdDoiXHUyMTBiIixIb3BmOiJcdTIxMGQiLHF1YXRlcm5pb25zOiJcdTIxMGQiLEhvcml6b250YWxMaW5lOiJcdTI1MDAiLGJveGg6Ilx1MjUwMCIsSHN0cm9rOiJcdTAxMjYiLEh1bXBFcXVhbDoiXHUyMjRmIixidW1wZToiXHUyMjRmIixidW1wZXE6Ilx1MjI0ZiIsSUVjeToiXHUwNDE1IixJSmxpZzoiXHUwMTMyIixJT2N5OiJcdTA0MDEiLElhY3V0ZToiXHhjZCIsSWNpcmM6Ilx4Y2UiLEljeToiXHUwNDE4IixJZG90OiJcdTAxMzAiLElmcjoiXHUyMTExIixJbToiXHUyMTExIixpbWFnZToiXHUyMTExIixpbWFncGFydDoiXHUyMTExIixJZ3JhdmU6Ilx4Y2MiLEltYWNyOiJcdTAxMmEiLEltYWdpbmFyeUk6Ilx1MjE0OCIsaWk6Ilx1MjE0OCIsSW50OiJcdTIyMmMiLEludGVncmFsOiJcdTIyMmIiLGludDoiXHUyMjJiIixJbnRlcnNlY3Rpb246Ilx1MjJjMiIsYmlnY2FwOiJcdTIyYzIiLHhjYXA6Ilx1MjJjMiIsSW52aXNpYmxlQ29tbWE6Ilx1MjA2MyIsaWM6Ilx1MjA2MyIsSW52aXNpYmxlVGltZXM6Ilx1MjA2MiIsaXQ6Ilx1MjA2MiIsSW9nb246Ilx1MDEyZSIsSW9wZjoiXHVkODM1XHVkZDQwIixJb3RhOiJcdTAzOTkiLElzY3I6Ilx1MjExMCIsaW1hZ2xpbmU6Ilx1MjExMCIsSXRpbGRlOiJcdTAxMjgiLEl1a2N5OiJcdTA0MDYiLEl1bWw6Ilx4Y2YiLEpjaXJjOiJcdTAxMzQiLEpjeToiXHUwNDE5IixKZnI6Ilx1ZDgzNVx1ZGQwZCIsSm9wZjoiXHVkODM1XHVkZDQxIixKc2NyOiJcdWQ4MzVcdWRjYTUiLEpzZXJjeToiXHUwNDA4IixKdWtjeToiXHUwNDA0IixLSGN5OiJcdTA0MjUiLEtKY3k6Ilx1MDQwYyIsS2FwcGE6Ilx1MDM5YSIsS2NlZGlsOiJcdTAxMzYiLEtjeToiXHUwNDFhIixLZnI6Ilx1ZDgzNVx1ZGQwZSIsS29wZjoiXHVkODM1XHVkZDQyIixLc2NyOiJcdWQ4MzVcdWRjYTYiLExKY3k6Ilx1MDQwOSIsTFQ6IjwiLGx0OiI8IixMYWN1dGU6Ilx1MDEzOSIsTGFtYmRhOiJcdTAzOWIiLExhbmc6Ilx1MjdlYSIsTGFwbGFjZXRyZjoiXHUyMTEyIixMc2NyOiJcdTIxMTIiLGxhZ3JhbjoiXHUyMTEyIixMYXJyOiJcdTIxOWUiLHR3b2hlYWRsZWZ0YXJyb3c6Ilx1MjE5ZSIsTGNhcm9uOiJcdTAxM2QiLExjZWRpbDoiXHUwMTNiIixMY3k6Ilx1MDQxYiIsTGVmdEFuZ2xlQnJhY2tldDoiXHUyN2U4IixsYW5nOiJcdTI3ZTgiLGxhbmdsZToiXHUyN2U4IixMZWZ0QXJyb3c6Ilx1MjE5MCIsU2hvcnRMZWZ0QXJyb3c6Ilx1MjE5MCIsbGFycjoiXHUyMTkwIixsZWZ0YXJyb3c6Ilx1MjE5MCIsc2xhcnI6Ilx1MjE5MCIsTGVmdEFycm93QmFyOiJcdTIxZTQiLGxhcnJiOiJcdTIxZTQiLExlZnRBcnJvd1JpZ2h0QXJyb3c6Ilx1MjFjNiIsbGVmdHJpZ2h0YXJyb3dzOiJcdTIxYzYiLGxyYXJyOiJcdTIxYzYiLExlZnRDZWlsaW5nOiJcdTIzMDgiLGxjZWlsOiJcdTIzMDgiLExlZnREb3VibGVCcmFja2V0OiJcdTI3ZTYiLGxvYnJrOiJcdTI3ZTYiLExlZnREb3duVGVlVmVjdG9yOiJcdTI5NjEiLExlZnREb3duVmVjdG9yOiJcdTIxYzMiLGRoYXJsOiJcdTIxYzMiLGRvd25oYXJwb29ubGVmdDoiXHUyMWMzIixMZWZ0RG93blZlY3RvckJhcjoiXHUyOTU5IixMZWZ0Rmxvb3I6Ilx1MjMwYSIsbGZsb29yOiJcdTIzMGEiLExlZnRSaWdodEFycm93OiJcdTIxOTQiLGhhcnI6Ilx1MjE5NCIsbGVmdHJpZ2h0YXJyb3c6Ilx1MjE5NCIsTGVmdFJpZ2h0VmVjdG9yOiJcdTI5NGUiLExlZnRUZWU6Ilx1MjJhMyIsZGFzaHY6Ilx1MjJhMyIsTGVmdFRlZUFycm93OiJcdTIxYTQiLG1hcHN0b2xlZnQ6Ilx1MjFhNCIsTGVmdFRlZVZlY3RvcjoiXHUyOTVhIixMZWZ0VHJpYW5nbGU6Ilx1MjJiMiIsdmFydHJpYW5nbGVsZWZ0OiJcdTIyYjIiLHZsdHJpOiJcdTIyYjIiLExlZnRUcmlhbmdsZUJhcjoiXHUyOWNmIixMZWZ0VHJpYW5nbGVFcXVhbDoiXHUyMmI0IixsdHJpZToiXHUyMmI0Iix0cmlhbmdsZWxlZnRlcToiXHUyMmI0IixMZWZ0VXBEb3duVmVjdG9yOiJcdTI5NTEiLExlZnRVcFRlZVZlY3RvcjoiXHUyOTYwIixMZWZ0VXBWZWN0b3I6Ilx1MjFiZiIsdWhhcmw6Ilx1MjFiZiIsdXBoYXJwb29ubGVmdDoiXHUyMWJmIixMZWZ0VXBWZWN0b3JCYXI6Ilx1Mjk1OCIsTGVmdFZlY3RvcjoiXHUyMWJjIixsZWZ0aGFycG9vbnVwOiJcdTIxYmMiLGxoYXJ1OiJcdTIxYmMiLExlZnRWZWN0b3JCYXI6Ilx1Mjk1MiIsTGVzc0VxdWFsR3JlYXRlcjoiXHUyMmRhIixsZWc6Ilx1MjJkYSIsbGVzc2VxZ3RyOiJcdTIyZGEiLExlc3NGdWxsRXF1YWw6Ilx1MjI2NiIsbEU6Ilx1MjI2NiIsbGVxcToiXHUyMjY2IixMZXNzR3JlYXRlcjoiXHUyMjc2IixsZXNzZ3RyOiJcdTIyNzYiLGxnOiJcdTIyNzYiLExlc3NMZXNzOiJcdTJhYTEiLExlc3NTbGFudEVxdWFsOiJcdTJhN2QiLGxlcXNsYW50OiJcdTJhN2QiLGxlczoiXHUyYTdkIixMZXNzVGlsZGU6Ilx1MjI3MiIsbGVzc3NpbToiXHUyMjcyIixsc2ltOiJcdTIyNzIiLExmcjoiXHVkODM1XHVkZDBmIixMbDoiXHUyMmQ4IixMbGVmdGFycm93OiJcdTIxZGEiLGxBYXJyOiJcdTIxZGEiLExtaWRvdDoiXHUwMTNmIixMb25nTGVmdEFycm93OiJcdTI3ZjUiLGxvbmdsZWZ0YXJyb3c6Ilx1MjdmNSIseGxhcnI6Ilx1MjdmNSIsTG9uZ0xlZnRSaWdodEFycm93OiJcdTI3ZjciLGxvbmdsZWZ0cmlnaHRhcnJvdzoiXHUyN2Y3Iix4aGFycjoiXHUyN2Y3IixMb25nUmlnaHRBcnJvdzoiXHUyN2Y2Iixsb25ncmlnaHRhcnJvdzoiXHUyN2Y2Iix4cmFycjoiXHUyN2Y2IixMb3BmOiJcdWQ4MzVcdWRkNDMiLExvd2VyTGVmdEFycm93OiJcdTIxOTkiLHN3YXJyOiJcdTIxOTkiLHN3YXJyb3c6Ilx1MjE5OSIsTG93ZXJSaWdodEFycm93OiJcdTIxOTgiLHNlYXJyOiJcdTIxOTgiLHNlYXJyb3c6Ilx1MjE5OCIsTHNoOiJcdTIxYjAiLGxzaDoiXHUyMWIwIixMc3Ryb2s6Ilx1MDE0MSIsTHQ6Ilx1MjI2YSIsTmVzdGVkTGVzc0xlc3M6Ilx1MjI2YSIsbGw6Ilx1MjI2YSIsTWFwOiJcdTI5MDUiLE1jeToiXHUwNDFjIixNZWRpdW1TcGFjZToiXHUyMDVmIixNZWxsaW50cmY6Ilx1MjEzMyIsTXNjcjoiXHUyMTMzIixwaG1tYXQ6Ilx1MjEzMyIsTWZyOiJcdWQ4MzVcdWRkMTAiLE1pbnVzUGx1czoiXHUyMjEzIixtbnBsdXM6Ilx1MjIxMyIsbXA6Ilx1MjIxMyIsTW9wZjoiXHVkODM1XHVkZDQ0IixNdToiXHUwMzljIixOSmN5OiJcdTA0MGEiLE5hY3V0ZToiXHUwMTQzIixOY2Fyb246Ilx1MDE0NyIsTmNlZGlsOiJcdTAxNDUiLE5jeToiXHUwNDFkIixOZWdhdGl2ZU1lZGl1bVNwYWNlOiJcdTIwMGIiLE5lZ2F0aXZlVGhpY2tTcGFjZToiXHUyMDBiIixOZWdhdGl2ZVRoaW5TcGFjZToiXHUyMDBiIixOZWdhdGl2ZVZlcnlUaGluU3BhY2U6Ilx1MjAwYiIsWmVyb1dpZHRoU3BhY2U6Ilx1MjAwYiIsTmV3TGluZToiXG4iLE5mcjoiXHVkODM1XHVkZDExIixOb0JyZWFrOiJcdTIwNjAiLE5vbkJyZWFraW5nU3BhY2U6Ilx4YTAiLG5ic3A6Ilx4YTAiLE5vcGY6Ilx1MjExNSIsbmF0dXJhbHM6Ilx1MjExNSIsTm90OiJcdTJhZWMiLE5vdENvbmdydWVudDoiXHUyMjYyIixuZXF1aXY6Ilx1MjI2MiIsTm90Q3VwQ2FwOiJcdTIyNmQiLE5vdERvdWJsZVZlcnRpY2FsQmFyOiJcdTIyMjYiLG5wYXI6Ilx1MjIyNiIsbnBhcmFsbGVsOiJcdTIyMjYiLG5zaG9ydHBhcmFsbGVsOiJcdTIyMjYiLG5zcGFyOiJcdTIyMjYiLE5vdEVsZW1lbnQ6Ilx1MjIwOSIsbm90aW46Ilx1MjIwOSIsbm90aW52YToiXHUyMjA5IixOb3RFcXVhbDoiXHUyMjYwIixuZToiXHUyMjYwIixOb3RFcXVhbFRpbGRlOiJcdTIyNDJcdTAzMzgiLG5lc2ltOiJcdTIyNDJcdTAzMzgiLE5vdEV4aXN0czoiXHUyMjA0IixuZXhpc3Q6Ilx1MjIwNCIsbmV4aXN0czoiXHUyMjA0IixOb3RHcmVhdGVyOiJcdTIyNmYiLG5ndDoiXHUyMjZmIixuZ3RyOiJcdTIyNmYiLE5vdEdyZWF0ZXJFcXVhbDoiXHUyMjcxIixuZ2U6Ilx1MjI3MSIsbmdlcToiXHUyMjcxIixOb3RHcmVhdGVyRnVsbEVxdWFsOiJcdTIyNjdcdTAzMzgiLG5nRToiXHUyMjY3XHUwMzM4IixuZ2VxcToiXHUyMjY3XHUwMzM4IixOb3RHcmVhdGVyR3JlYXRlcjoiXHUyMjZiXHUwMzM4IixuR3R2OiJcdTIyNmJcdTAzMzgiLE5vdEdyZWF0ZXJMZXNzOiJcdTIyNzkiLG50Z2w6Ilx1MjI3OSIsTm90R3JlYXRlclNsYW50RXF1YWw6Ilx1MmE3ZVx1MDMzOCIsbmdlcXNsYW50OiJcdTJhN2VcdTAzMzgiLG5nZXM6Ilx1MmE3ZVx1MDMzOCIsTm90R3JlYXRlclRpbGRlOiJcdTIyNzUiLG5nc2ltOiJcdTIyNzUiLE5vdEh1bXBEb3duSHVtcDoiXHUyMjRlXHUwMzM4IixuYnVtcDoiXHUyMjRlXHUwMzM4IixOb3RIdW1wRXF1YWw6Ilx1MjI0Zlx1MDMzOCIsbmJ1bXBlOiJcdTIyNGZcdTAzMzgiLE5vdExlZnRUcmlhbmdsZToiXHUyMmVhIixubHRyaToiXHUyMmVhIixudHJpYW5nbGVsZWZ0OiJcdTIyZWEiLE5vdExlZnRUcmlhbmdsZUJhcjoiXHUyOWNmXHUwMzM4IixOb3RMZWZ0VHJpYW5nbGVFcXVhbDoiXHUyMmVjIixubHRyaWU6Ilx1MjJlYyIsbnRyaWFuZ2xlbGVmdGVxOiJcdTIyZWMiLE5vdExlc3M6Ilx1MjI2ZSIsbmxlc3M6Ilx1MjI2ZSIsbmx0OiJcdTIyNmUiLE5vdExlc3NFcXVhbDoiXHUyMjcwIixubGU6Ilx1MjI3MCIsbmxlcToiXHUyMjcwIixOb3RMZXNzR3JlYXRlcjoiXHUyMjc4IixudGxnOiJcdTIyNzgiLE5vdExlc3NMZXNzOiJcdTIyNmFcdTAzMzgiLG5MdHY6Ilx1MjI2YVx1MDMzOCIsTm90TGVzc1NsYW50RXF1YWw6Ilx1MmE3ZFx1MDMzOCIsbmxlcXNsYW50OiJcdTJhN2RcdTAzMzgiLG5sZXM6Ilx1MmE3ZFx1MDMzOCIsTm90TGVzc1RpbGRlOiJcdTIyNzQiLG5sc2ltOiJcdTIyNzQiLE5vdE5lc3RlZEdyZWF0ZXJHcmVhdGVyOiJcdTJhYTJcdTAzMzgiLE5vdE5lc3RlZExlc3NMZXNzOiJcdTJhYTFcdTAzMzgiLE5vdFByZWNlZGVzOiJcdTIyODAiLG5wcjoiXHUyMjgwIixucHJlYzoiXHUyMjgwIixOb3RQcmVjZWRlc0VxdWFsOiJcdTJhYWZcdTAzMzgiLG5wcmU6Ilx1MmFhZlx1MDMzOCIsbnByZWNlcToiXHUyYWFmXHUwMzM4IixOb3RQcmVjZWRlc1NsYW50RXF1YWw6Ilx1MjJlMCIsbnByY3VlOiJcdTIyZTAiLE5vdFJldmVyc2VFbGVtZW50OiJcdTIyMGMiLG5vdG5pOiJcdTIyMGMiLG5vdG5pdmE6Ilx1MjIwYyIsTm90UmlnaHRUcmlhbmdsZToiXHUyMmViIixucnRyaToiXHUyMmViIixudHJpYW5nbGVyaWdodDoiXHUyMmViIixOb3RSaWdodFRyaWFuZ2xlQmFyOiJcdTI5ZDBcdTAzMzgiLE5vdFJpZ2h0VHJpYW5nbGVFcXVhbDoiXHUyMmVkIixucnRyaWU6Ilx1MjJlZCIsbnRyaWFuZ2xlcmlnaHRlcToiXHUyMmVkIixOb3RTcXVhcmVTdWJzZXQ6Ilx1MjI4Zlx1MDMzOCIsTm90U3F1YXJlU3Vic2V0RXF1YWw6Ilx1MjJlMiIsbnNxc3ViZToiXHUyMmUyIixOb3RTcXVhcmVTdXBlcnNldDoiXHUyMjkwXHUwMzM4IixOb3RTcXVhcmVTdXBlcnNldEVxdWFsOiJcdTIyZTMiLG5zcXN1cGU6Ilx1MjJlMyIsTm90U3Vic2V0OiJcdTIyODJcdTIwZDIiLG5zdWJzZXQ6Ilx1MjI4Mlx1MjBkMiIsdm5zdWI6Ilx1MjI4Mlx1MjBkMiIsTm90U3Vic2V0RXF1YWw6Ilx1MjI4OCIsbnN1YmU6Ilx1MjI4OCIsbnN1YnNldGVxOiJcdTIyODgiLE5vdFN1Y2NlZWRzOiJcdTIyODEiLG5zYzoiXHUyMjgxIixuc3VjYzoiXHUyMjgxIixOb3RTdWNjZWVkc0VxdWFsOiJcdTJhYjBcdTAzMzgiLG5zY2U6Ilx1MmFiMFx1MDMzOCIsbnN1Y2NlcToiXHUyYWIwXHUwMzM4IixOb3RTdWNjZWVkc1NsYW50RXF1YWw6Ilx1MjJlMSIsbnNjY3VlOiJcdTIyZTEiLE5vdFN1Y2NlZWRzVGlsZGU6Ilx1MjI3Zlx1MDMzOCIsTm90U3VwZXJzZXQ6Ilx1MjI4M1x1MjBkMiIsbnN1cHNldDoiXHUyMjgzXHUyMGQyIix2bnN1cDoiXHUyMjgzXHUyMGQyIixOb3RTdXBlcnNldEVxdWFsOiJcdTIyODkiLG5zdXBlOiJcdTIyODkiLG5zdXBzZXRlcToiXHUyMjg5IixOb3RUaWxkZToiXHUyMjQxIixuc2ltOiJcdTIyNDEiLE5vdFRpbGRlRXF1YWw6Ilx1MjI0NCIsbnNpbWU6Ilx1MjI0NCIsbnNpbWVxOiJcdTIyNDQiLE5vdFRpbGRlRnVsbEVxdWFsOiJcdTIyNDciLG5jb25nOiJcdTIyNDciLE5vdFRpbGRlVGlsZGU6Ilx1MjI0OSIsbmFwOiJcdTIyNDkiLG5hcHByb3g6Ilx1MjI0OSIsTm90VmVydGljYWxCYXI6Ilx1MjIyNCIsbm1pZDoiXHUyMjI0Iixuc2hvcnRtaWQ6Ilx1MjIyNCIsbnNtaWQ6Ilx1MjIyNCIsTnNjcjoiXHVkODM1XHVkY2E5IixOdGlsZGU6Ilx4ZDEiLE51OiJcdTAzOWQiLE9FbGlnOiJcdTAxNTIiLE9hY3V0ZToiXHhkMyIsT2NpcmM6Ilx4ZDQiLE9jeToiXHUwNDFlIixPZGJsYWM6Ilx1MDE1MCIsT2ZyOiJcdWQ4MzVcdWRkMTIiLE9ncmF2ZToiXHhkMiIsT21hY3I6Ilx1MDE0YyIsT21lZ2E6Ilx1MDNhOSIsb2htOiJcdTAzYTkiLE9taWNyb246Ilx1MDM5ZiIsT29wZjoiXHVkODM1XHVkZDQ2IixPcGVuQ3VybHlEb3VibGVRdW90ZToiXHUyMDFjIixsZHF1bzoiXHUyMDFjIixPcGVuQ3VybHlRdW90ZToiXHUyMDE4Iixsc3F1bzoiXHUyMDE4IixPcjoiXHUyYTU0IixPc2NyOiJcdWQ4MzVcdWRjYWEiLE9zbGFzaDoiXHhkOCIsT3RpbGRlOiJceGQ1IixPdGltZXM6Ilx1MmEzNyIsT3VtbDoiXHhkNiIsT3ZlckJhcjoiXHUyMDNlIixvbGluZToiXHUyMDNlIixPdmVyQnJhY2U6Ilx1MjNkZSIsT3ZlckJyYWNrZXQ6Ilx1MjNiNCIsdGJyazoiXHUyM2I0IixPdmVyUGFyZW50aGVzaXM6Ilx1MjNkYyIsUGFydGlhbEQ6Ilx1MjIwMiIscGFydDoiXHUyMjAyIixQY3k6Ilx1MDQxZiIsUGZyOiJcdWQ4MzVcdWRkMTMiLFBoaToiXHUwM2E2IixQaToiXHUwM2EwIixQbHVzTWludXM6Ilx4YjEiLHBsdXNtbjoiXHhiMSIscG06Ilx4YjEiLFBvcGY6Ilx1MjExOSIscHJpbWVzOiJcdTIxMTkiLFByOiJcdTJhYmIiLFByZWNlZGVzOiJcdTIyN2EiLHByOiJcdTIyN2EiLHByZWM6Ilx1MjI3YSIsUHJlY2VkZXNFcXVhbDoiXHUyYWFmIixwcmU6Ilx1MmFhZiIscHJlY2VxOiJcdTJhYWYiLFByZWNlZGVzU2xhbnRFcXVhbDoiXHUyMjdjIixwcmN1ZToiXHUyMjdjIixwcmVjY3VybHllcToiXHUyMjdjIixQcmVjZWRlc1RpbGRlOiJcdTIyN2UiLHByZWNzaW06Ilx1MjI3ZSIscHJzaW06Ilx1MjI3ZSIsUHJpbWU6Ilx1MjAzMyIsUHJvZHVjdDoiXHUyMjBmIixwcm9kOiJcdTIyMGYiLFByb3BvcnRpb25hbDoiXHUyMjFkIixwcm9wOiJcdTIyMWQiLHByb3B0bzoiXHUyMjFkIix2YXJwcm9wdG86Ilx1MjIxZCIsdnByb3A6Ilx1MjIxZCIsUHNjcjoiXHVkODM1XHVkY2FiIixQc2k6Ilx1MDNhOCIsUVVPVDonIicscXVvdDonIicsUWZyOiJcdWQ4MzVcdWRkMTQiLFFvcGY6Ilx1MjExYSIscmF0aW9uYWxzOiJcdTIxMWEiLFFzY3I6Ilx1ZDgzNVx1ZGNhYyIsUkJhcnI6Ilx1MjkxMCIsZHJia2Fyb3c6Ilx1MjkxMCIsUkVHOiJceGFlIixjaXJjbGVkUjoiXHhhZSIscmVnOiJceGFlIixSYWN1dGU6Ilx1MDE1NCIsUmFuZzoiXHUyN2ViIixSYXJyOiJcdTIxYTAiLHR3b2hlYWRyaWdodGFycm93OiJcdTIxYTAiLFJhcnJ0bDoiXHUyOTE2IixSY2Fyb246Ilx1MDE1OCIsUmNlZGlsOiJcdTAxNTYiLFJjeToiXHUwNDIwIixSZToiXHUyMTFjIixSZnI6Ilx1MjExYyIscmVhbDoiXHUyMTFjIixyZWFscGFydDoiXHUyMTFjIixSZXZlcnNlRWxlbWVudDoiXHUyMjBiIixTdWNoVGhhdDoiXHUyMjBiIixuaToiXHUyMjBiIixuaXY6Ilx1MjIwYiIsUmV2ZXJzZUVxdWlsaWJyaXVtOiJcdTIxY2IiLGxlZnRyaWdodGhhcnBvb25zOiJcdTIxY2IiLGxyaGFyOiJcdTIxY2IiLFJldmVyc2VVcEVxdWlsaWJyaXVtOiJcdTI5NmYiLGR1aGFyOiJcdTI5NmYiLFJobzoiXHUwM2ExIixSaWdodEFuZ2xlQnJhY2tldDoiXHUyN2U5IixyYW5nOiJcdTI3ZTkiLHJhbmdsZToiXHUyN2U5IixSaWdodEFycm93OiJcdTIxOTIiLFNob3J0UmlnaHRBcnJvdzoiXHUyMTkyIixyYXJyOiJcdTIxOTIiLHJpZ2h0YXJyb3c6Ilx1MjE5MiIsc3JhcnI6Ilx1MjE5MiIsUmlnaHRBcnJvd0JhcjoiXHUyMWU1IixyYXJyYjoiXHUyMWU1IixSaWdodEFycm93TGVmdEFycm93OiJcdTIxYzQiLHJpZ2h0bGVmdGFycm93czoiXHUyMWM0IixybGFycjoiXHUyMWM0IixSaWdodENlaWxpbmc6Ilx1MjMwOSIscmNlaWw6Ilx1MjMwOSIsUmlnaHREb3VibGVCcmFja2V0OiJcdTI3ZTciLHJvYnJrOiJcdTI3ZTciLFJpZ2h0RG93blRlZVZlY3RvcjoiXHUyOTVkIixSaWdodERvd25WZWN0b3I6Ilx1MjFjMiIsZGhhcnI6Ilx1MjFjMiIsZG93bmhhcnBvb25yaWdodDoiXHUyMWMyIixSaWdodERvd25WZWN0b3JCYXI6Ilx1Mjk1NSIsUmlnaHRGbG9vcjoiXHUyMzBiIixyZmxvb3I6Ilx1MjMwYiIsUmlnaHRUZWU6Ilx1MjJhMiIsdmRhc2g6Ilx1MjJhMiIsUmlnaHRUZWVBcnJvdzoiXHUyMWE2IixtYXA6Ilx1MjFhNiIsbWFwc3RvOiJcdTIxYTYiLFJpZ2h0VGVlVmVjdG9yOiJcdTI5NWIiLFJpZ2h0VHJpYW5nbGU6Ilx1MjJiMyIsdmFydHJpYW5nbGVyaWdodDoiXHUyMmIzIix2cnRyaToiXHUyMmIzIixSaWdodFRyaWFuZ2xlQmFyOiJcdTI5ZDAiLFJpZ2h0VHJpYW5nbGVFcXVhbDoiXHUyMmI1IixydHJpZToiXHUyMmI1Iix0cmlhbmdsZXJpZ2h0ZXE6Ilx1MjJiNSIsUmlnaHRVcERvd25WZWN0b3I6Ilx1Mjk0ZiIsUmlnaHRVcFRlZVZlY3RvcjoiXHUyOTVjIixSaWdodFVwVmVjdG9yOiJcdTIxYmUiLHVoYXJyOiJcdTIxYmUiLHVwaGFycG9vbnJpZ2h0OiJcdTIxYmUiLFJpZ2h0VXBWZWN0b3JCYXI6Ilx1Mjk1NCIsUmlnaHRWZWN0b3I6Ilx1MjFjMCIscmhhcnU6Ilx1MjFjMCIscmlnaHRoYXJwb29udXA6Ilx1MjFjMCIsUmlnaHRWZWN0b3JCYXI6Ilx1Mjk1MyIsUm9wZjoiXHUyMTFkIixyZWFsczoiXHUyMTFkIixSb3VuZEltcGxpZXM6Ilx1Mjk3MCIsUnJpZ2h0YXJyb3c6Ilx1MjFkYiIsckFhcnI6Ilx1MjFkYiIsUnNjcjoiXHUyMTFiIixyZWFsaW5lOiJcdTIxMWIiLFJzaDoiXHUyMWIxIixyc2g6Ilx1MjFiMSIsUnVsZURlbGF5ZWQ6Ilx1MjlmNCIsU0hDSGN5OiJcdTA0MjkiLFNIY3k6Ilx1MDQyOCIsU09GVGN5OiJcdTA0MmMiLFNhY3V0ZToiXHUwMTVhIixTYzoiXHUyYWJjIixTY2Fyb246Ilx1MDE2MCIsU2NlZGlsOiJcdTAxNWUiLFNjaXJjOiJcdTAxNWMiLFNjeToiXHUwNDIxIixTZnI6Ilx1ZDgzNVx1ZGQxNiIsU2hvcnRVcEFycm93OiJcdTIxOTEiLFVwQXJyb3c6Ilx1MjE5MSIsdWFycjoiXHUyMTkxIix1cGFycm93OiJcdTIxOTEiLFNpZ21hOiJcdTAzYTMiLFNtYWxsQ2lyY2xlOiJcdTIyMTgiLGNvbXBmbjoiXHUyMjE4IixTb3BmOiJcdWQ4MzVcdWRkNGEiLFNxcnQ6Ilx1MjIxYSIscmFkaWM6Ilx1MjIxYSIsU3F1YXJlOiJcdTI1YTEiLHNxdToiXHUyNWExIixzcXVhcmU6Ilx1MjVhMSIsU3F1YXJlSW50ZXJzZWN0aW9uOiJcdTIyOTMiLHNxY2FwOiJcdTIyOTMiLFNxdWFyZVN1YnNldDoiXHUyMjhmIixzcXN1YjoiXHUyMjhmIixzcXN1YnNldDoiXHUyMjhmIixTcXVhcmVTdWJzZXRFcXVhbDoiXHUyMjkxIixzcXN1YmU6Ilx1MjI5MSIsc3FzdWJzZXRlcToiXHUyMjkxIixTcXVhcmVTdXBlcnNldDoiXHUyMjkwIixzcXN1cDoiXHUyMjkwIixzcXN1cHNldDoiXHUyMjkwIixTcXVhcmVTdXBlcnNldEVxdWFsOiJcdTIyOTIiLHNxc3VwZToiXHUyMjkyIixzcXN1cHNldGVxOiJcdTIyOTIiLFNxdWFyZVVuaW9uOiJcdTIyOTQiLHNxY3VwOiJcdTIyOTQiLFNzY3I6Ilx1ZDgzNVx1ZGNhZSIsU3RhcjoiXHUyMmM2Iixzc3RhcmY6Ilx1MjJjNiIsU3ViOiJcdTIyZDAiLFN1YnNldDoiXHUyMmQwIixTdWJzZXRFcXVhbDoiXHUyMjg2IixzdWJlOiJcdTIyODYiLHN1YnNldGVxOiJcdTIyODYiLFN1Y2NlZWRzOiJcdTIyN2IiLHNjOiJcdTIyN2IiLHN1Y2M6Ilx1MjI3YiIsU3VjY2VlZHNFcXVhbDoiXHUyYWIwIixzY2U6Ilx1MmFiMCIsc3VjY2VxOiJcdTJhYjAiLFN1Y2NlZWRzU2xhbnRFcXVhbDoiXHUyMjdkIixzY2N1ZToiXHUyMjdkIixzdWNjY3VybHllcToiXHUyMjdkIixTdWNjZWVkc1RpbGRlOiJcdTIyN2YiLHNjc2ltOiJcdTIyN2YiLHN1Y2NzaW06Ilx1MjI3ZiIsU3VtOiJcdTIyMTEiLHN1bToiXHUyMjExIixTdXA6Ilx1MjJkMSIsU3Vwc2V0OiJcdTIyZDEiLFN1cGVyc2V0OiJcdTIyODMiLHN1cDoiXHUyMjgzIixzdXBzZXQ6Ilx1MjI4MyIsU3VwZXJzZXRFcXVhbDoiXHUyMjg3IixzdXBlOiJcdTIyODciLHN1cHNldGVxOiJcdTIyODciLFRIT1JOOiJceGRlIixUUkFERToiXHUyMTIyIix0cmFkZToiXHUyMTIyIixUU0hjeToiXHUwNDBiIixUU2N5OiJcdTA0MjYiLFRhYjoiXHQiLFRhdToiXHUwM2E0IixUY2Fyb246Ilx1MDE2NCIsVGNlZGlsOiJcdTAxNjIiLFRjeToiXHUwNDIyIixUZnI6Ilx1ZDgzNVx1ZGQxNyIsVGhlcmVmb3JlOiJcdTIyMzQiLHRoZXJlNDoiXHUyMjM0Iix0aGVyZWZvcmU6Ilx1MjIzNCIsVGhldGE6Ilx1MDM5OCIsVGhpY2tTcGFjZToiXHUyMDVmXHUyMDBhIixUaGluU3BhY2U6Ilx1MjAwOSIsdGhpbnNwOiJcdTIwMDkiLFRpbGRlOiJcdTIyM2MiLHNpbToiXHUyMjNjIix0aGlja3NpbToiXHUyMjNjIix0aGtzaW06Ilx1MjIzYyIsVGlsZGVFcXVhbDoiXHUyMjQzIixzaW1lOiJcdTIyNDMiLHNpbWVxOiJcdTIyNDMiLFRpbGRlRnVsbEVxdWFsOiJcdTIyNDUiLGNvbmc6Ilx1MjI0NSIsVGlsZGVUaWxkZToiXHUyMjQ4IixhcDoiXHUyMjQ4IixhcHByb3g6Ilx1MjI0OCIsYXN5bXA6Ilx1MjI0OCIsdGhpY2thcHByb3g6Ilx1MjI0OCIsdGhrYXA6Ilx1MjI0OCIsVG9wZjoiXHVkODM1XHVkZDRiIixUcmlwbGVEb3Q6Ilx1MjBkYiIsdGRvdDoiXHUyMGRiIixUc2NyOiJcdWQ4MzVcdWRjYWYiLFRzdHJvazoiXHUwMTY2IixVYWN1dGU6Ilx4ZGEiLFVhcnI6Ilx1MjE5ZiIsVWFycm9jaXI6Ilx1Mjk0OSIsVWJyY3k6Ilx1MDQwZSIsVWJyZXZlOiJcdTAxNmMiLFVjaXJjOiJceGRiIixVY3k6Ilx1MDQyMyIsVWRibGFjOiJcdTAxNzAiLFVmcjoiXHVkODM1XHVkZDE4IixVZ3JhdmU6Ilx4ZDkiLFVtYWNyOiJcdTAxNmEiLFVuZGVyQmFyOiJfIixsb3diYXI6Il8iLFVuZGVyQnJhY2U6Ilx1MjNkZiIsVW5kZXJCcmFja2V0OiJcdTIzYjUiLGJicms6Ilx1MjNiNSIsVW5kZXJQYXJlbnRoZXNpczoiXHUyM2RkIixVbmlvbjoiXHUyMmMzIixiaWdjdXA6Ilx1MjJjMyIseGN1cDoiXHUyMmMzIixVbmlvblBsdXM6Ilx1MjI4ZSIsdXBsdXM6Ilx1MjI4ZSIsVW9nb246Ilx1MDE3MiIsVW9wZjoiXHVkODM1XHVkZDRjIixVcEFycm93QmFyOiJcdTI5MTIiLFVwQXJyb3dEb3duQXJyb3c6Ilx1MjFjNSIsdWRhcnI6Ilx1MjFjNSIsVXBEb3duQXJyb3c6Ilx1MjE5NSIsdXBkb3duYXJyb3c6Ilx1MjE5NSIsdmFycjoiXHUyMTk1IixVcEVxdWlsaWJyaXVtOiJcdTI5NmUiLHVkaGFyOiJcdTI5NmUiLFVwVGVlOiJcdTIyYTUiLGJvdDoiXHUyMmE1Iixib3R0b206Ilx1MjJhNSIscGVycDoiXHUyMmE1IixVcFRlZUFycm93OiJcdTIxYTUiLG1hcHN0b3VwOiJcdTIxYTUiLFVwcGVyTGVmdEFycm93OiJcdTIxOTYiLG53YXJyOiJcdTIxOTYiLG53YXJyb3c6Ilx1MjE5NiIsVXBwZXJSaWdodEFycm93OiJcdTIxOTciLG5lYXJyOiJcdTIxOTciLG5lYXJyb3c6Ilx1MjE5NyIsVXBzaToiXHUwM2QyIix1cHNpaDoiXHUwM2QyIixVcHNpbG9uOiJcdTAzYTUiLFVyaW5nOiJcdTAxNmUiLFVzY3I6Ilx1ZDgzNVx1ZGNiMCIsVXRpbGRlOiJcdTAxNjgiLFV1bWw6Ilx4ZGMiLFZEYXNoOiJcdTIyYWIiLFZiYXI6Ilx1MmFlYiIsVmN5OiJcdTA0MTIiLFZkYXNoOiJcdTIyYTkiLFZkYXNobDoiXHUyYWU2IixWZWU6Ilx1MjJjMSIsYmlndmVlOiJcdTIyYzEiLHh2ZWU6Ilx1MjJjMSIsVmVyYmFyOiJcdTIwMTYiLFZlcnQ6Ilx1MjAxNiIsVmVydGljYWxCYXI6Ilx1MjIyMyIsbWlkOiJcdTIyMjMiLHNob3J0bWlkOiJcdTIyMjMiLHNtaWQ6Ilx1MjIyMyIsVmVydGljYWxMaW5lOiJ8Iix2ZXJiYXI6InwiLHZlcnQ6InwiLFZlcnRpY2FsU2VwYXJhdG9yOiJcdTI3NTgiLFZlcnRpY2FsVGlsZGU6Ilx1MjI0MCIsd3I6Ilx1MjI0MCIsd3JlYXRoOiJcdTIyNDAiLFZlcnlUaGluU3BhY2U6Ilx1MjAwYSIsaGFpcnNwOiJcdTIwMGEiLFZmcjoiXHVkODM1XHVkZDE5IixWb3BmOiJcdWQ4MzVcdWRkNGQiLFZzY3I6Ilx1ZDgzNVx1ZGNiMSIsVnZkYXNoOiJcdTIyYWEiLFdjaXJjOiJcdTAxNzQiLFdlZGdlOiJcdTIyYzAiLGJpZ3dlZGdlOiJcdTIyYzAiLHh3ZWRnZToiXHUyMmMwIixXZnI6Ilx1ZDgzNVx1ZGQxYSIsV29wZjoiXHVkODM1XHVkZDRlIixXc2NyOiJcdWQ4MzVcdWRjYjIiLFhmcjoiXHVkODM1XHVkZDFiIixYaToiXHUwMzllIixYb3BmOiJcdWQ4MzVcdWRkNGYiLFhzY3I6Ilx1ZDgzNVx1ZGNiMyIsWUFjeToiXHUwNDJmIixZSWN5OiJcdTA0MDciLFlVY3k6Ilx1MDQyZSIsWWFjdXRlOiJceGRkIixZY2lyYzoiXHUwMTc2IixZY3k6Ilx1MDQyYiIsWWZyOiJcdWQ4MzVcdWRkMWMiLFlvcGY6Ilx1ZDgzNVx1ZGQ1MCIsWXNjcjoiXHVkODM1XHVkY2I0IixZdW1sOiJcdTAxNzgiLFpIY3k6Ilx1MDQxNiIsWmFjdXRlOiJcdTAxNzkiLFpjYXJvbjoiXHUwMTdkIixaY3k6Ilx1MDQxNyIsWmRvdDoiXHUwMTdiIixaZXRhOiJcdTAzOTYiLFpmcjoiXHUyMTI4Iix6ZWV0cmY6Ilx1MjEyOCIsWm9wZjoiXHUyMTI0IixpbnRlZ2VyczoiXHUyMTI0Iixac2NyOiJcdWQ4MzVcdWRjYjUiLGFhY3V0ZToiXHhlMSIsYWJyZXZlOiJcdTAxMDMiLGFjOiJcdTIyM2UiLG1zdHBvczoiXHUyMjNlIixhY0U6Ilx1MjIzZVx1MDMzMyIsYWNkOiJcdTIyM2YiLGFjaXJjOiJceGUyIixhY3k6Ilx1MDQzMCIsYWVsaWc6Ilx4ZTYiLGFmcjoiXHVkODM1XHVkZDFlIixhZ3JhdmU6Ilx4ZTAiLGFsZWZzeW06Ilx1MjEzNSIsYWxlcGg6Ilx1MjEzNSIsYWxwaGE6Ilx1MDNiMSIsYW1hY3I6Ilx1MDEwMSIsYW1hbGc6Ilx1MmEzZiIsYW5kOiJcdTIyMjciLHdlZGdlOiJcdTIyMjciLGFuZGFuZDoiXHUyYTU1IixhbmRkOiJcdTJhNWMiLGFuZHNsb3BlOiJcdTJhNTgiLGFuZHY6Ilx1MmE1YSIsYW5nOiJcdTIyMjAiLGFuZ2xlOiJcdTIyMjAiLGFuZ2U6Ilx1MjlhNCIsYW5nbXNkOiJcdTIyMjEiLG1lYXN1cmVkYW5nbGU6Ilx1MjIyMSIsYW5nbXNkYWE6Ilx1MjlhOCIsYW5nbXNkYWI6Ilx1MjlhOSIsYW5nbXNkYWM6Ilx1MjlhYSIsYW5nbXNkYWQ6Ilx1MjlhYiIsYW5nbXNkYWU6Ilx1MjlhYyIsYW5nbXNkYWY6Ilx1MjlhZCIsYW5nbXNkYWc6Ilx1MjlhZSIsYW5nbXNkYWg6Ilx1MjlhZiIsYW5ncnQ6Ilx1MjIxZiIsYW5ncnR2YjoiXHUyMmJlIixhbmdydHZiZDoiXHUyOTlkIixhbmdzcGg6Ilx1MjIyMiIsYW5nemFycjoiXHUyMzdjIixhb2dvbjoiXHUwMTA1Iixhb3BmOiJcdWQ4MzVcdWRkNTIiLGFwRToiXHUyYTcwIixhcGFjaXI6Ilx1MmE2ZiIsYXBlOiJcdTIyNGEiLGFwcHJveGVxOiJcdTIyNGEiLGFwaWQ6Ilx1MjI0YiIsYXBvczoiJyIsYXJpbmc6Ilx4ZTUiLGFzY3I6Ilx1ZDgzNVx1ZGNiNiIsYXN0OiIqIixtaWRhc3Q6IioiLGF0aWxkZToiXHhlMyIsYXVtbDoiXHhlNCIsYXdpbnQ6Ilx1MmExMSIsYk5vdDoiXHUyYWVkIixiYWNrY29uZzoiXHUyMjRjIixiY29uZzoiXHUyMjRjIixiYWNrZXBzaWxvbjoiXHUwM2Y2IixiZXBzaToiXHUwM2Y2IixiYWNrcHJpbWU6Ilx1MjAzNSIsYnByaW1lOiJcdTIwMzUiLGJhY2tzaW06Ilx1MjIzZCIsYnNpbToiXHUyMjNkIixiYWNrc2ltZXE6Ilx1MjJjZCIsYnNpbWU6Ilx1MjJjZCIsYmFydmVlOiJcdTIyYmQiLGJhcndlZDoiXHUyMzA1IixiYXJ3ZWRnZToiXHUyMzA1IixiYnJrdGJyazoiXHUyM2I2IixiY3k6Ilx1MDQzMSIsYmRxdW86Ilx1MjAxZSIsbGRxdW9yOiJcdTIwMWUiLGJlbXB0eXY6Ilx1MjliMCIsYmV0YToiXHUwM2IyIixiZXRoOiJcdTIxMzYiLGJldHdlZW46Ilx1MjI2YyIsdHdpeHQ6Ilx1MjI2YyIsYmZyOiJcdWQ4MzVcdWRkMWYiLGJpZ2NpcmM6Ilx1MjVlZiIseGNpcmM6Ilx1MjVlZiIsYmlnb2RvdDoiXHUyYTAwIix4b2RvdDoiXHUyYTAwIixiaWdvcGx1czoiXHUyYTAxIix4b3BsdXM6Ilx1MmEwMSIsYmlnb3RpbWVzOiJcdTJhMDIiLHhvdGltZToiXHUyYTAyIixiaWdzcWN1cDoiXHUyYTA2Iix4c3FjdXA6Ilx1MmEwNiIsYmlnc3RhcjoiXHUyNjA1IixzdGFyZjoiXHUyNjA1IixiaWd0cmlhbmdsZWRvd246Ilx1MjViZCIseGR0cmk6Ilx1MjViZCIsYmlndHJpYW5nbGV1cDoiXHUyNWIzIix4dXRyaToiXHUyNWIzIixiaWd1cGx1czoiXHUyYTA0Iix4dXBsdXM6Ilx1MmEwNCIsYmthcm93OiJcdTI5MGQiLHJiYXJyOiJcdTI5MGQiLGJsYWNrbG96ZW5nZToiXHUyOWViIixsb3pmOiJcdTI5ZWIiLGJsYWNrdHJpYW5nbGU6Ilx1MjViNCIsdXRyaWY6Ilx1MjViNCIsYmxhY2t0cmlhbmdsZWRvd246Ilx1MjViZSIsZHRyaWY6Ilx1MjViZSIsYmxhY2t0cmlhbmdsZWxlZnQ6Ilx1MjVjMiIsbHRyaWY6Ilx1MjVjMiIsYmxhY2t0cmlhbmdsZXJpZ2h0OiJcdTI1YjgiLHJ0cmlmOiJcdTI1YjgiLGJsYW5rOiJcdTI0MjMiLGJsazEyOiJcdTI1OTIiLGJsazE0OiJcdTI1OTEiLGJsazM0OiJcdTI1OTMiLGJsb2NrOiJcdTI1ODgiLGJuZToiPVx1MjBlNSIsYm5lcXVpdjoiXHUyMjYxXHUyMGU1Iixibm90OiJcdTIzMTAiLGJvcGY6Ilx1ZDgzNVx1ZGQ1MyIsYm93dGllOiJcdTIyYzgiLGJveERMOiJcdTI1NTciLGJveERSOiJcdTI1NTQiLGJveERsOiJcdTI1NTYiLGJveERyOiJcdTI1NTMiLGJveEg6Ilx1MjU1MCIsYm94SEQ6Ilx1MjU2NiIsYm94SFU6Ilx1MjU2OSIsYm94SGQ6Ilx1MjU2NCIsYm94SHU6Ilx1MjU2NyIsYm94VUw6Ilx1MjU1ZCIsYm94VVI6Ilx1MjU1YSIsYm94VWw6Ilx1MjU1YyIsYm94VXI6Ilx1MjU1OSIsYm94VjoiXHUyNTUxIixib3hWSDoiXHUyNTZjIixib3hWTDoiXHUyNTYzIixib3hWUjoiXHUyNTYwIixib3hWaDoiXHUyNTZiIixib3hWbDoiXHUyNTYyIixib3hWcjoiXHUyNTVmIixib3hib3g6Ilx1MjljOSIsYm94ZEw6Ilx1MjU1NSIsYm94ZFI6Ilx1MjU1MiIsYm94ZGw6Ilx1MjUxMCIsYm94ZHI6Ilx1MjUwYyIsYm94aEQ6Ilx1MjU2NSIsYm94aFU6Ilx1MjU2OCIsYm94aGQ6Ilx1MjUyYyIsYm94aHU6Ilx1MjUzNCIsYm94bWludXM6Ilx1MjI5ZiIsbWludXNiOiJcdTIyOWYiLGJveHBsdXM6Ilx1MjI5ZSIscGx1c2I6Ilx1MjI5ZSIsYm94dGltZXM6Ilx1MjJhMCIsdGltZXNiOiJcdTIyYTAiLGJveHVMOiJcdTI1NWIiLGJveHVSOiJcdTI1NTgiLGJveHVsOiJcdTI1MTgiLGJveHVyOiJcdTI1MTQiLGJveHY6Ilx1MjUwMiIsYm94dkg6Ilx1MjU2YSIsYm94dkw6Ilx1MjU2MSIsYm94dlI6Ilx1MjU1ZSIsYm94dmg6Ilx1MjUzYyIsYm94dmw6Ilx1MjUyNCIsYm94dnI6Ilx1MjUxYyIsYnJ2YmFyOiJceGE2Iixic2NyOiJcdWQ4MzVcdWRjYjciLGJzZW1pOiJcdTIwNGYiLGJzb2w6IlxcIixic29sYjoiXHUyOWM1Iixic29saHN1YjoiXHUyN2M4IixidWxsOiJcdTIwMjIiLGJ1bGxldDoiXHUyMDIyIixidW1wRToiXHUyYWFlIixjYWN1dGU6Ilx1MDEwNyIsY2FwOiJcdTIyMjkiLGNhcGFuZDoiXHUyYTQ0IixjYXBicmN1cDoiXHUyYTQ5IixjYXBjYXA6Ilx1MmE0YiIsY2FwY3VwOiJcdTJhNDciLGNhcGRvdDoiXHUyYTQwIixjYXBzOiJcdTIyMjlcdWZlMDAiLGNhcmV0OiJcdTIwNDEiLGNjYXBzOiJcdTJhNGQiLGNjYXJvbjoiXHUwMTBkIixjY2VkaWw6Ilx4ZTciLGNjaXJjOiJcdTAxMDkiLGNjdXBzOiJcdTJhNGMiLGNjdXBzc206Ilx1MmE1MCIsY2RvdDoiXHUwMTBiIixjZW1wdHl2OiJcdTI5YjIiLGNlbnQ6Ilx4YTIiLGNmcjoiXHVkODM1XHVkZDIwIixjaGN5OiJcdTA0NDciLGNoZWNrOiJcdTI3MTMiLGNoZWNrbWFyazoiXHUyNzEzIixjaGk6Ilx1MDNjNyIsY2lyOiJcdTI1Y2IiLGNpckU6Ilx1MjljMyIsY2lyYzoiXHUwMmM2IixjaXJjZXE6Ilx1MjI1NyIsY2lyZToiXHUyMjU3IixjaXJjbGVhcnJvd2xlZnQ6Ilx1MjFiYSIsb2xhcnI6Ilx1MjFiYSIsY2lyY2xlYXJyb3dyaWdodDoiXHUyMWJiIixvcmFycjoiXHUyMWJiIixjaXJjbGVkUzoiXHUyNGM4IixvUzoiXHUyNGM4IixjaXJjbGVkYXN0OiJcdTIyOWIiLG9hc3Q6Ilx1MjI5YiIsY2lyY2xlZGNpcmM6Ilx1MjI5YSIsb2NpcjoiXHUyMjlhIixjaXJjbGVkZGFzaDoiXHUyMjlkIixvZGFzaDoiXHUyMjlkIixjaXJmbmludDoiXHUyYTEwIixjaXJtaWQ6Ilx1MmFlZiIsY2lyc2NpcjoiXHUyOWMyIixjbHViczoiXHUyNjYzIixjbHVic3VpdDoiXHUyNjYzIixjb2xvbjoiOiIsY29tbWE6IiwiLGNvbW1hdDoiQCIsY29tcDoiXHUyMjAxIixjb21wbGVtZW50OiJcdTIyMDEiLGNvbmdkb3Q6Ilx1MmE2ZCIsY29wZjoiXHVkODM1XHVkZDU0Iixjb3B5c3I6Ilx1MjExNyIsY3JhcnI6Ilx1MjFiNSIsY3Jvc3M6Ilx1MjcxNyIsY3NjcjoiXHVkODM1XHVkY2I4Iixjc3ViOiJcdTJhY2YiLGNzdWJlOiJcdTJhZDEiLGNzdXA6Ilx1MmFkMCIsY3N1cGU6Ilx1MmFkMiIsY3Rkb3Q6Ilx1MjJlZiIsY3VkYXJybDoiXHUyOTM4IixjdWRhcnJyOiJcdTI5MzUiLGN1ZXByOiJcdTIyZGUiLGN1cmx5ZXFwcmVjOiJcdTIyZGUiLGN1ZXNjOiJcdTIyZGYiLGN1cmx5ZXFzdWNjOiJcdTIyZGYiLGN1bGFycjoiXHUyMWI2IixjdXJ2ZWFycm93bGVmdDoiXHUyMWI2IixjdWxhcnJwOiJcdTI5M2QiLGN1cDoiXHUyMjJhIixjdXBicmNhcDoiXHUyYTQ4IixjdXBjYXA6Ilx1MmE0NiIsY3VwY3VwOiJcdTJhNGEiLGN1cGRvdDoiXHUyMjhkIixjdXBvcjoiXHUyYTQ1IixjdXBzOiJcdTIyMmFcdWZlMDAiLGN1cmFycjoiXHUyMWI3IixjdXJ2ZWFycm93cmlnaHQ6Ilx1MjFiNyIsY3VyYXJybToiXHUyOTNjIixjdXJseXZlZToiXHUyMmNlIixjdXZlZToiXHUyMmNlIixjdXJseXdlZGdlOiJcdTIyY2YiLGN1d2VkOiJcdTIyY2YiLGN1cnJlbjoiXHhhNCIsY3dpbnQ6Ilx1MjIzMSIsY3lsY3R5OiJcdTIzMmQiLGRIYXI6Ilx1Mjk2NSIsZGFnZ2VyOiJcdTIwMjAiLGRhbGV0aDoiXHUyMTM4IixkYXNoOiJcdTIwMTAiLGh5cGhlbjoiXHUyMDEwIixkYmthcm93OiJcdTI5MGYiLHJCYXJyOiJcdTI5MGYiLGRjYXJvbjoiXHUwMTBmIixkY3k6Ilx1MDQzNCIsZGRhcnI6Ilx1MjFjYSIsZG93bmRvd25hcnJvd3M6Ilx1MjFjYSIsZGRvdHNlcToiXHUyYTc3IixlRERvdDoiXHUyYTc3IixkZWc6Ilx4YjAiLGRlbHRhOiJcdTAzYjQiLGRlbXB0eXY6Ilx1MjliMSIsZGZpc2h0OiJcdTI5N2YiLGRmcjoiXHVkODM1XHVkZDIxIixkaWFtb25kc3VpdDoiXHUyNjY2IixkaWFtczoiXHUyNjY2IixkaWdhbW1hOiJcdTAzZGQiLGdhbW1hZDoiXHUwM2RkIixkaXNpbjoiXHUyMmYyIixkaXY6Ilx4ZjciLGRpdmlkZToiXHhmNyIsZGl2aWRlb250aW1lczoiXHUyMmM3IixkaXZvbng6Ilx1MjJjNyIsZGpjeToiXHUwNDUyIixkbGNvcm46Ilx1MjMxZSIsbGxjb3JuZXI6Ilx1MjMxZSIsZGxjcm9wOiJcdTIzMGQiLGRvbGxhcjoiJCIsZG9wZjoiXHVkODM1XHVkZDU1Iixkb3RlcWRvdDoiXHUyMjUxIixlRG90OiJcdTIyNTEiLGRvdG1pbnVzOiJcdTIyMzgiLG1pbnVzZDoiXHUyMjM4Iixkb3RwbHVzOiJcdTIyMTQiLHBsdXNkbzoiXHUyMjE0Iixkb3RzcXVhcmU6Ilx1MjJhMSIsc2RvdGI6Ilx1MjJhMSIsZHJjb3JuOiJcdTIzMWYiLGxyY29ybmVyOiJcdTIzMWYiLGRyY3JvcDoiXHUyMzBjIixkc2NyOiJcdWQ4MzVcdWRjYjkiLGRzY3k6Ilx1MDQ1NSIsZHNvbDoiXHUyOWY2Iixkc3Ryb2s6Ilx1MDExMSIsZHRkb3Q6Ilx1MjJmMSIsZHRyaToiXHUyNWJmIix0cmlhbmdsZWRvd246Ilx1MjViZiIsZHdhbmdsZToiXHUyOWE2IixkemN5OiJcdTA0NWYiLGR6aWdyYXJyOiJcdTI3ZmYiLGVhY3V0ZToiXHhlOSIsZWFzdGVyOiJcdTJhNmUiLGVjYXJvbjoiXHUwMTFiIixlY2lyOiJcdTIyNTYiLGVxY2lyYzoiXHUyMjU2IixlY2lyYzoiXHhlYSIsZWNvbG9uOiJcdTIyNTUiLGVxY29sb246Ilx1MjI1NSIsZWN5OiJcdTA0NGQiLGVkb3Q6Ilx1MDExNyIsZWZEb3Q6Ilx1MjI1MiIsZmFsbGluZ2RvdHNlcToiXHUyMjUyIixlZnI6Ilx1ZDgzNVx1ZGQyMiIsZWc6Ilx1MmE5YSIsZWdyYXZlOiJceGU4IixlZ3M6Ilx1MmE5NiIsZXFzbGFudGd0cjoiXHUyYTk2IixlZ3Nkb3Q6Ilx1MmE5OCIsZWw6Ilx1MmE5OSIsZWxpbnRlcnM6Ilx1MjNlNyIsZWxsOiJcdTIxMTMiLGVsczoiXHUyYTk1IixlcXNsYW50bGVzczoiXHUyYTk1IixlbHNkb3Q6Ilx1MmE5NyIsZW1hY3I6Ilx1MDExMyIsZW1wdHk6Ilx1MjIwNSIsZW1wdHlzZXQ6Ilx1MjIwNSIsZW1wdHl2OiJcdTIyMDUiLHZhcm5vdGhpbmc6Ilx1MjIwNSIsZW1zcDEzOiJcdTIwMDQiLGVtc3AxNDoiXHUyMDA1IixlbXNwOiJcdTIwMDMiLGVuZzoiXHUwMTRiIixlbnNwOiJcdTIwMDIiLGVvZ29uOiJcdTAxMTkiLGVvcGY6Ilx1ZDgzNVx1ZGQ1NiIsZXBhcjoiXHUyMmQ1IixlcGFyc2w6Ilx1MjllMyIsZXBsdXM6Ilx1MmE3MSIsZXBzaToiXHUwM2I1IixlcHNpbG9uOiJcdTAzYjUiLGVwc2l2OiJcdTAzZjUiLHN0cmFpZ2h0ZXBzaWxvbjoiXHUwM2Y1Iix2YXJlcHNpbG9uOiJcdTAzZjUiLGVxdWFsczoiPSIsZXF1ZXN0OiJcdTIyNWYiLHF1ZXN0ZXE6Ilx1MjI1ZiIsZXF1aXZERDoiXHUyYTc4IixlcXZwYXJzbDoiXHUyOWU1IixlckRvdDoiXHUyMjUzIixyaXNpbmdkb3RzZXE6Ilx1MjI1MyIsZXJhcnI6Ilx1Mjk3MSIsZXNjcjoiXHUyMTJmIixldGE6Ilx1MDNiNyIsZXRoOiJceGYwIixldW1sOiJceGViIixldXJvOiJcdTIwYWMiLGV4Y2w6IiEiLGZjeToiXHUwNDQ0IixmZW1hbGU6Ilx1MjY0MCIsZmZpbGlnOiJcdWZiMDMiLGZmbGlnOiJcdWZiMDAiLGZmbGxpZzoiXHVmYjA0IixmZnI6Ilx1ZDgzNVx1ZGQyMyIsZmlsaWc6Ilx1ZmIwMSIsZmpsaWc6ImZqIixmbGF0OiJcdTI2NmQiLGZsbGlnOiJcdWZiMDIiLGZsdG5zOiJcdTI1YjEiLGZub2Y6Ilx1MDE5MiIsZm9wZjoiXHVkODM1XHVkZDU3Iixmb3JrOiJcdTIyZDQiLHBpdGNoZm9yazoiXHUyMmQ0Iixmb3JrdjoiXHUyYWQ5IixmcGFydGludDoiXHUyYTBkIixmcmFjMTI6Ilx4YmQiLGhhbGY6Ilx4YmQiLGZyYWMxMzoiXHUyMTUzIixmcmFjMTQ6Ilx4YmMiLGZyYWMxNToiXHUyMTU1IixmcmFjMTY6Ilx1MjE1OSIsZnJhYzE4OiJcdTIxNWIiLGZyYWMyMzoiXHUyMTU0IixmcmFjMjU6Ilx1MjE1NiIsZnJhYzM0OiJceGJlIixmcmFjMzU6Ilx1MjE1NyIsZnJhYzM4OiJcdTIxNWMiLGZyYWM0NToiXHUyMTU4IixmcmFjNTY6Ilx1MjE1YSIsZnJhYzU4OiJcdTIxNWQiLGZyYWM3ODoiXHUyMTVlIixmcmFzbDoiXHUyMDQ0Iixmcm93bjoiXHUyMzIyIixzZnJvd246Ilx1MjMyMiIsZnNjcjoiXHVkODM1XHVkY2JiIixnRWw6Ilx1MmE4YyIsZ3RyZXFxbGVzczoiXHUyYThjIixnYWN1dGU6Ilx1MDFmNSIsZ2FtbWE6Ilx1MDNiMyIsZ2FwOiJcdTJhODYiLGd0cmFwcHJveDoiXHUyYTg2IixnYnJldmU6Ilx1MDExZiIsZ2NpcmM6Ilx1MDExZCIsZ2N5OiJcdTA0MzMiLGdkb3Q6Ilx1MDEyMSIsZ2VzY2M6Ilx1MmFhOSIsZ2VzZG90OiJcdTJhODAiLGdlc2RvdG86Ilx1MmE4MiIsZ2VzZG90b2w6Ilx1MmE4NCIsZ2VzbDoiXHUyMmRiXHVmZTAwIixnZXNsZXM6Ilx1MmE5NCIsZ2ZyOiJcdWQ4MzVcdWRkMjQiLGdpbWVsOiJcdTIxMzciLGdqY3k6Ilx1MDQ1MyIsZ2xFOiJcdTJhOTIiLGdsYToiXHUyYWE1IixnbGo6Ilx1MmFhNCIsZ25FOiJcdTIyNjkiLGduZXFxOiJcdTIyNjkiLGduYXA6Ilx1MmE4YSIsZ25hcHByb3g6Ilx1MmE4YSIsZ25lOiJcdTJhODgiLGduZXE6Ilx1MmE4OCIsZ25zaW06Ilx1MjJlNyIsZ29wZjoiXHVkODM1XHVkZDU4Iixnc2NyOiJcdTIxMGEiLGdzaW1lOiJcdTJhOGUiLGdzaW1sOiJcdTJhOTAiLGd0Y2M6Ilx1MmFhNyIsZ3RjaXI6Ilx1MmE3YSIsZ3Rkb3Q6Ilx1MjJkNyIsZ3RyZG90OiJcdTIyZDciLGd0bFBhcjoiXHUyOTk1IixndHF1ZXN0OiJcdTJhN2MiLGd0cmFycjoiXHUyOTc4IixndmVydG5lcXE6Ilx1MjI2OVx1ZmUwMCIsZ3ZuRToiXHUyMjY5XHVmZTAwIixoYXJkY3k6Ilx1MDQ0YSIsaGFycmNpcjoiXHUyOTQ4IixoYXJydzoiXHUyMWFkIixsZWZ0cmlnaHRzcXVpZ2Fycm93OiJcdTIxYWQiLGhiYXI6Ilx1MjEwZiIsaHNsYXNoOiJcdTIxMGYiLHBsYW5jazoiXHUyMTBmIixwbGFua3Y6Ilx1MjEwZiIsaGNpcmM6Ilx1MDEyNSIsaGVhcnRzOiJcdTI2NjUiLGhlYXJ0c3VpdDoiXHUyNjY1IixoZWxsaXA6Ilx1MjAyNiIsbWxkcjoiXHUyMDI2IixoZXJjb246Ilx1MjJiOSIsaGZyOiJcdWQ4MzVcdWRkMjUiLGhrc2Vhcm93OiJcdTI5MjUiLHNlYXJoazoiXHUyOTI1Iixoa3N3YXJvdzoiXHUyOTI2Iixzd2FyaGs6Ilx1MjkyNiIsaG9hcnI6Ilx1MjFmZiIsaG9tdGh0OiJcdTIyM2IiLGhvb2tsZWZ0YXJyb3c6Ilx1MjFhOSIsbGFycmhrOiJcdTIxYTkiLGhvb2tyaWdodGFycm93OiJcdTIxYWEiLHJhcnJoazoiXHUyMWFhIixob3BmOiJcdWQ4MzVcdWRkNTkiLGhvcmJhcjoiXHUyMDE1Iixoc2NyOiJcdWQ4MzVcdWRjYmQiLGhzdHJvazoiXHUwMTI3IixoeWJ1bGw6Ilx1MjA0MyIsaWFjdXRlOiJceGVkIixpY2lyYzoiXHhlZSIsaWN5OiJcdTA0MzgiLGllY3k6Ilx1MDQzNSIsaWV4Y2w6Ilx4YTEiLGlmcjoiXHVkODM1XHVkZDI2IixpZ3JhdmU6Ilx4ZWMiLGlpaWludDoiXHUyYTBjIixxaW50OiJcdTJhMGMiLGlpaW50OiJcdTIyMmQiLHRpbnQ6Ilx1MjIyZCIsaWluZmluOiJcdTI5ZGMiLGlpb3RhOiJcdTIxMjkiLGlqbGlnOiJcdTAxMzMiLGltYWNyOiJcdTAxMmIiLGltYXRoOiJcdTAxMzEiLGlub2RvdDoiXHUwMTMxIixpbW9mOiJcdTIyYjciLGltcGVkOiJcdTAxYjUiLGluY2FyZToiXHUyMTA1IixpbmZpbjoiXHUyMjFlIixpbmZpbnRpZToiXHUyOWRkIixpbnRjYWw6Ilx1MjJiYSIsaW50ZXJjYWw6Ilx1MjJiYSIsaW50bGFyaGs6Ilx1MmExNyIsaW50cHJvZDoiXHUyYTNjIixpcHJvZDoiXHUyYTNjIixpb2N5OiJcdTA0NTEiLGlvZ29uOiJcdTAxMmYiLGlvcGY6Ilx1ZDgzNVx1ZGQ1YSIsaW90YToiXHUwM2I5IixpcXVlc3Q6Ilx4YmYiLGlzY3I6Ilx1ZDgzNVx1ZGNiZSIsaXNpbkU6Ilx1MjJmOSIsaXNpbmRvdDoiXHUyMmY1Iixpc2luczoiXHUyMmY0Iixpc2luc3Y6Ilx1MjJmMyIsaXRpbGRlOiJcdTAxMjkiLGl1a2N5OiJcdTA0NTYiLGl1bWw6Ilx4ZWYiLGpjaXJjOiJcdTAxMzUiLGpjeToiXHUwNDM5IixqZnI6Ilx1ZDgzNVx1ZGQyNyIsam1hdGg6Ilx1MDIzNyIsam9wZjoiXHVkODM1XHVkZDViIixqc2NyOiJcdWQ4MzVcdWRjYmYiLGpzZXJjeToiXHUwNDU4IixqdWtjeToiXHUwNDU0IixrYXBwYToiXHUwM2JhIixrYXBwYXY6Ilx1MDNmMCIsdmFya2FwcGE6Ilx1MDNmMCIsa2NlZGlsOiJcdTAxMzciLGtjeToiXHUwNDNhIixrZnI6Ilx1ZDgzNVx1ZGQyOCIsa2dyZWVuOiJcdTAxMzgiLGtoY3k6Ilx1MDQ0NSIsa2pjeToiXHUwNDVjIixrb3BmOiJcdWQ4MzVcdWRkNWMiLGtzY3I6Ilx1ZDgzNVx1ZGNjMCIsbEF0YWlsOiJcdTI5MWIiLGxCYXJyOiJcdTI5MGUiLGxFZzoiXHUyYThiIixsZXNzZXFxZ3RyOiJcdTJhOGIiLGxIYXI6Ilx1Mjk2MiIsbGFjdXRlOiJcdTAxM2EiLGxhZW1wdHl2OiJcdTI5YjQiLGxhbWJkYToiXHUwM2JiIixsYW5nZDoiXHUyOTkxIixsYXA6Ilx1MmE4NSIsbGVzc2FwcHJveDoiXHUyYTg1IixsYXF1bzoiXHhhYiIsbGFycmJmczoiXHUyOTFmIixsYXJyZnM6Ilx1MjkxZCIsbGFycmxwOiJcdTIxYWIiLGxvb3BhcnJvd2xlZnQ6Ilx1MjFhYiIsbGFycnBsOiJcdTI5MzkiLGxhcnJzaW06Ilx1Mjk3MyIsbGFycnRsOiJcdTIxYTIiLGxlZnRhcnJvd3RhaWw6Ilx1MjFhMiIsbGF0OiJcdTJhYWIiLGxhdGFpbDoiXHUyOTE5IixsYXRlOiJcdTJhYWQiLGxhdGVzOiJcdTJhYWRcdWZlMDAiLGxiYXJyOiJcdTI5MGMiLGxiYnJrOiJcdTI3NzIiLGxicmFjZToieyIsbGN1YjoieyIsbGJyYWNrOiJbIixsc3FiOiJbIixsYnJrZToiXHUyOThiIixsYnJrc2xkOiJcdTI5OGYiLGxicmtzbHU6Ilx1Mjk4ZCIsbGNhcm9uOiJcdTAxM2UiLGxjZWRpbDoiXHUwMTNjIixsY3k6Ilx1MDQzYiIsbGRjYToiXHUyOTM2IixsZHJkaGFyOiJcdTI5NjciLGxkcnVzaGFyOiJcdTI5NGIiLGxkc2g6Ilx1MjFiMiIsbGU6Ilx1MjI2NCIsbGVxOiJcdTIyNjQiLGxlZnRsZWZ0YXJyb3dzOiJcdTIxYzciLGxsYXJyOiJcdTIxYzciLGxlZnR0aHJlZXRpbWVzOiJcdTIyY2IiLGx0aHJlZToiXHUyMmNiIixsZXNjYzoiXHUyYWE4IixsZXNkb3Q6Ilx1MmE3ZiIsbGVzZG90bzoiXHUyYTgxIixsZXNkb3RvcjoiXHUyYTgzIixsZXNnOiJcdTIyZGFcdWZlMDAiLGxlc2dlczoiXHUyYTkzIixsZXNzZG90OiJcdTIyZDYiLGx0ZG90OiJcdTIyZDYiLGxmaXNodDoiXHUyOTdjIixsZnI6Ilx1ZDgzNVx1ZGQyOSIsbGdFOiJcdTJhOTEiLGxoYXJ1bDoiXHUyOTZhIixsaGJsazoiXHUyNTg0IixsamN5OiJcdTA0NTkiLGxsaGFyZDoiXHUyOTZiIixsbHRyaToiXHUyNWZhIixsbWlkb3Q6Ilx1MDE0MCIsbG1vdXN0OiJcdTIzYjAiLGxtb3VzdGFjaGU6Ilx1MjNiMCIsbG5FOiJcdTIyNjgiLGxuZXFxOiJcdTIyNjgiLGxuYXA6Ilx1MmE4OSIsbG5hcHByb3g6Ilx1MmE4OSIsbG5lOiJcdTJhODciLGxuZXE6Ilx1MmE4NyIsbG5zaW06Ilx1MjJlNiIsbG9hbmc6Ilx1MjdlYyIsbG9hcnI6Ilx1MjFmZCIsbG9uZ21hcHN0bzoiXHUyN2ZjIix4bWFwOiJcdTI3ZmMiLGxvb3BhcnJvd3JpZ2h0OiJcdTIxYWMiLHJhcnJscDoiXHUyMWFjIixsb3BhcjoiXHUyOTg1Iixsb3BmOiJcdWQ4MzVcdWRkNWQiLGxvcGx1czoiXHUyYTJkIixsb3RpbWVzOiJcdTJhMzQiLGxvd2FzdDoiXHUyMjE3Iixsb3o6Ilx1MjVjYSIsbG96ZW5nZToiXHUyNWNhIixscGFyOiIoIixscGFybHQ6Ilx1Mjk5MyIsbHJoYXJkOiJcdTI5NmQiLGxybToiXHUyMDBlIixscnRyaToiXHUyMmJmIixsc2FxdW86Ilx1MjAzOSIsbHNjcjoiXHVkODM1XHVkY2MxIixsc2ltZToiXHUyYThkIixsc2ltZzoiXHUyYThmIixsc3F1b3I6Ilx1MjAxYSIsc2JxdW86Ilx1MjAxYSIsbHN0cm9rOiJcdTAxNDIiLGx0Y2M6Ilx1MmFhNiIsbHRjaXI6Ilx1MmE3OSIsbHRpbWVzOiJcdTIyYzkiLGx0bGFycjoiXHUyOTc2IixsdHF1ZXN0OiJcdTJhN2IiLGx0clBhcjoiXHUyOTk2IixsdHJpOiJcdTI1YzMiLHRyaWFuZ2xlbGVmdDoiXHUyNWMzIixsdXJkc2hhcjoiXHUyOTRhIixsdXJ1aGFyOiJcdTI5NjYiLGx2ZXJ0bmVxcToiXHUyMjY4XHVmZTAwIixsdm5FOiJcdTIyNjhcdWZlMDAiLG1ERG90OiJcdTIyM2EiLG1hY3I6Ilx4YWYiLHN0cm5zOiJceGFmIixtYWxlOiJcdTI2NDIiLG1hbHQ6Ilx1MjcyMCIsbWFsdGVzZToiXHUyNzIwIixtYXJrZXI6Ilx1MjVhZSIsbWNvbW1hOiJcdTJhMjkiLG1jeToiXHUwNDNjIixtZGFzaDoiXHUyMDE0IixtZnI6Ilx1ZDgzNVx1ZGQyYSIsbWhvOiJcdTIxMjciLG1pY3JvOiJceGI1IixtaWRjaXI6Ilx1MmFmMCIsbWludXM6Ilx1MjIxMiIsbWludXNkdToiXHUyYTJhIixtbGNwOiJcdTJhZGIiLG1vZGVsczoiXHUyMmE3Iixtb3BmOiJcdWQ4MzVcdWRkNWUiLG1zY3I6Ilx1ZDgzNVx1ZGNjMiIsbXU6Ilx1MDNiYyIsbXVsdGltYXA6Ilx1MjJiOCIsbXVtYXA6Ilx1MjJiOCIsbkdnOiJcdTIyZDlcdTAzMzgiLG5HdDoiXHUyMjZiXHUyMGQyIixuTGVmdGFycm93OiJcdTIxY2QiLG5sQXJyOiJcdTIxY2QiLG5MZWZ0cmlnaHRhcnJvdzoiXHUyMWNlIixuaEFycjoiXHUyMWNlIixuTGw6Ilx1MjJkOFx1MDMzOCIsbkx0OiJcdTIyNmFcdTIwZDIiLG5SaWdodGFycm93OiJcdTIxY2YiLG5yQXJyOiJcdTIxY2YiLG5WRGFzaDoiXHUyMmFmIixuVmRhc2g6Ilx1MjJhZSIsbmFjdXRlOiJcdTAxNDQiLG5hbmc6Ilx1MjIyMFx1MjBkMiIsbmFwRToiXHUyYTcwXHUwMzM4IixuYXBpZDoiXHUyMjRiXHUwMzM4IixuYXBvczoiXHUwMTQ5IixuYXR1cjoiXHUyNjZlIixuYXR1cmFsOiJcdTI2NmUiLG5jYXA6Ilx1MmE0MyIsbmNhcm9uOiJcdTAxNDgiLG5jZWRpbDoiXHUwMTQ2IixuY29uZ2RvdDoiXHUyYTZkXHUwMzM4IixuY3VwOiJcdTJhNDIiLG5jeToiXHUwNDNkIixuZGFzaDoiXHUyMDEzIixuZUFycjoiXHUyMWQ3IixuZWFyaGs6Ilx1MjkyNCIsbmVkb3Q6Ilx1MjI1MFx1MDMzOCIsbmVzZWFyOiJcdTI5MjgiLHRvZWE6Ilx1MjkyOCIsbmZyOiJcdWQ4MzVcdWRkMmIiLG5oYXJyOiJcdTIxYWUiLG5sZWZ0cmlnaHRhcnJvdzoiXHUyMWFlIixuaHBhcjoiXHUyYWYyIixuaXM6Ilx1MjJmYyIsbmlzZDoiXHUyMmZhIixuamN5OiJcdTA0NWEiLG5sRToiXHUyMjY2XHUwMzM4IixubGVxcToiXHUyMjY2XHUwMzM4IixubGFycjoiXHUyMTlhIixubGVmdGFycm93OiJcdTIxOWEiLG5sZHI6Ilx1MjAyNSIsbm9wZjoiXHVkODM1XHVkZDVmIixub3Q6Ilx4YWMiLG5vdGluRToiXHUyMmY5XHUwMzM4Iixub3RpbmRvdDoiXHUyMmY1XHUwMzM4Iixub3RpbnZiOiJcdTIyZjciLG5vdGludmM6Ilx1MjJmNiIsbm90bml2YjoiXHUyMmZlIixub3RuaXZjOiJcdTIyZmQiLG5wYXJzbDoiXHUyYWZkXHUyMGU1IixucGFydDoiXHUyMjAyXHUwMzM4IixucG9saW50OiJcdTJhMTQiLG5yYXJyOiJcdTIxOWIiLG5yaWdodGFycm93OiJcdTIxOWIiLG5yYXJyYzoiXHUyOTMzXHUwMzM4IixucmFycnc6Ilx1MjE5ZFx1MDMzOCIsbnNjcjoiXHVkODM1XHVkY2MzIixuc3ViOiJcdTIyODQiLG5zdWJFOiJcdTJhYzVcdTAzMzgiLG5zdWJzZXRlcXE6Ilx1MmFjNVx1MDMzOCIsbnN1cDoiXHUyMjg1Iixuc3VwRToiXHUyYWM2XHUwMzM4Iixuc3Vwc2V0ZXFxOiJcdTJhYzZcdTAzMzgiLG50aWxkZToiXHhmMSIsbnU6Ilx1MDNiZCIsbnVtOiIjIixudW1lcm86Ilx1MjExNiIsbnVtc3A6Ilx1MjAwNyIsbnZEYXNoOiJcdTIyYWQiLG52SGFycjoiXHUyOTA0IixudmFwOiJcdTIyNGRcdTIwZDIiLG52ZGFzaDoiXHUyMmFjIixudmdlOiJcdTIyNjVcdTIwZDIiLG52Z3Q6Ij5cdTIwZDIiLG52aW5maW46Ilx1MjlkZSIsbnZsQXJyOiJcdTI5MDIiLG52bGU6Ilx1MjI2NFx1MjBkMiIsbnZsdDoiPFx1MjBkMiIsbnZsdHJpZToiXHUyMmI0XHUyMGQyIixudnJBcnI6Ilx1MjkwMyIsbnZydHJpZToiXHUyMmI1XHUyMGQyIixudnNpbToiXHUyMjNjXHUyMGQyIixud0FycjoiXHUyMWQ2Iixud2FyaGs6Ilx1MjkyMyIsbnduZWFyOiJcdTI5MjciLG9hY3V0ZToiXHhmMyIsb2NpcmM6Ilx4ZjQiLG9jeToiXHUwNDNlIixvZGJsYWM6Ilx1MDE1MSIsb2RpdjoiXHUyYTM4IixvZHNvbGQ6Ilx1MjliYyIsb2VsaWc6Ilx1MDE1MyIsb2ZjaXI6Ilx1MjliZiIsb2ZyOiJcdWQ4MzVcdWRkMmMiLG9nb246Ilx1MDJkYiIsb2dyYXZlOiJceGYyIixvZ3Q6Ilx1MjljMSIsb2hiYXI6Ilx1MjliNSIsb2xjaXI6Ilx1MjliZSIsb2xjcm9zczoiXHUyOWJiIixvbHQ6Ilx1MjljMCIsb21hY3I6Ilx1MDE0ZCIsb21lZ2E6Ilx1MDNjOSIsb21pY3JvbjoiXHUwM2JmIixvbWlkOiJcdTI5YjYiLG9vcGY6Ilx1ZDgzNVx1ZGQ2MCIsb3BhcjoiXHUyOWI3IixvcGVycDoiXHUyOWI5IixvcjoiXHUyMjI4Iix2ZWU6Ilx1MjIyOCIsb3JkOiJcdTJhNWQiLG9yZGVyOiJcdTIxMzQiLG9yZGVyb2Y6Ilx1MjEzNCIsb3NjcjoiXHUyMTM0IixvcmRmOiJceGFhIixvcmRtOiJceGJhIixvcmlnb2Y6Ilx1MjJiNiIsb3JvcjoiXHUyYTU2IixvcnNsb3BlOiJcdTJhNTciLG9ydjoiXHUyYTViIixvc2xhc2g6Ilx4ZjgiLG9zb2w6Ilx1MjI5OCIsb3RpbGRlOiJceGY1IixvdGltZXNhczoiXHUyYTM2IixvdW1sOiJceGY2IixvdmJhcjoiXHUyMzNkIixwYXJhOiJceGI2IixwYXJzaW06Ilx1MmFmMyIscGFyc2w6Ilx1MmFmZCIscGN5OiJcdTA0M2YiLHBlcmNudDoiJSIscGVyaW9kOiIuIixwZXJtaWw6Ilx1MjAzMCIscGVydGVuazoiXHUyMDMxIixwZnI6Ilx1ZDgzNVx1ZGQyZCIscGhpOiJcdTAzYzYiLHBoaXY6Ilx1MDNkNSIsc3RyYWlnaHRwaGk6Ilx1MDNkNSIsdmFycGhpOiJcdTAzZDUiLHBob25lOiJcdTI2MGUiLHBpOiJcdTAzYzAiLHBpdjoiXHUwM2Q2Iix2YXJwaToiXHUwM2Q2IixwbGFuY2toOiJcdTIxMGUiLHBsdXM6IisiLHBsdXNhY2lyOiJcdTJhMjMiLHBsdXNjaXI6Ilx1MmEyMiIscGx1c2R1OiJcdTJhMjUiLHBsdXNlOiJcdTJhNzIiLHBsdXNzaW06Ilx1MmEyNiIscGx1c3R3bzoiXHUyYTI3Iixwb2ludGludDoiXHUyYTE1Iixwb3BmOiJcdWQ4MzVcdWRkNjEiLHBvdW5kOiJceGEzIixwckU6Ilx1MmFiMyIscHJhcDoiXHUyYWI3IixwcmVjYXBwcm94OiJcdTJhYjciLHByZWNuYXBwcm94OiJcdTJhYjkiLHBybmFwOiJcdTJhYjkiLHByZWNuZXFxOiJcdTJhYjUiLHBybkU6Ilx1MmFiNSIscHJlY25zaW06Ilx1MjJlOCIscHJuc2ltOiJcdTIyZTgiLHByaW1lOiJcdTIwMzIiLHByb2ZhbGFyOiJcdTIzMmUiLHByb2ZsaW5lOiJcdTIzMTIiLHByb2ZzdXJmOiJcdTIzMTMiLHBydXJlbDoiXHUyMmIwIixwc2NyOiJcdWQ4MzVcdWRjYzUiLHBzaToiXHUwM2M4IixwdW5jc3A6Ilx1MjAwOCIscWZyOiJcdWQ4MzVcdWRkMmUiLHFvcGY6Ilx1ZDgzNVx1ZGQ2MiIscXByaW1lOiJcdTIwNTciLHFzY3I6Ilx1ZDgzNVx1ZGNjNiIscXVhdGludDoiXHUyYTE2IixxdWVzdDoiPyIsckF0YWlsOiJcdTI5MWMiLHJIYXI6Ilx1Mjk2NCIscmFjZToiXHUyMjNkXHUwMzMxIixyYWN1dGU6Ilx1MDE1NSIscmFlbXB0eXY6Ilx1MjliMyIscmFuZ2Q6Ilx1Mjk5MiIscmFuZ2U6Ilx1MjlhNSIscmFxdW86Ilx4YmIiLHJhcnJhcDoiXHUyOTc1IixyYXJyYmZzOiJcdTI5MjAiLHJhcnJjOiJcdTI5MzMiLHJhcnJmczoiXHUyOTFlIixyYXJycGw6Ilx1Mjk0NSIscmFycnNpbToiXHUyOTc0IixyYXJydGw6Ilx1MjFhMyIscmlnaHRhcnJvd3RhaWw6Ilx1MjFhMyIscmFycnc6Ilx1MjE5ZCIscmlnaHRzcXVpZ2Fycm93OiJcdTIxOWQiLHJhdGFpbDoiXHUyOTFhIixyYXRpbzoiXHUyMjM2IixyYmJyazoiXHUyNzczIixyYnJhY2U6In0iLHJjdWI6In0iLHJicmFjazoiXSIscnNxYjoiXSIscmJya2U6Ilx1Mjk4YyIscmJya3NsZDoiXHUyOThlIixyYnJrc2x1OiJcdTI5OTAiLHJjYXJvbjoiXHUwMTU5IixyY2VkaWw6Ilx1MDE1NyIscmN5OiJcdTA0NDAiLHJkY2E6Ilx1MjkzNyIscmRsZGhhcjoiXHUyOTY5IixyZHNoOiJcdTIxYjMiLHJlY3Q6Ilx1MjVhZCIscmZpc2h0OiJcdTI5N2QiLHJmcjoiXHVkODM1XHVkZDJmIixyaGFydWw6Ilx1Mjk2YyIscmhvOiJcdTAzYzEiLHJob3Y6Ilx1MDNmMSIsdmFycmhvOiJcdTAzZjEiLHJpZ2h0cmlnaHRhcnJvd3M6Ilx1MjFjOSIscnJhcnI6Ilx1MjFjOSIscmlnaHR0aHJlZXRpbWVzOiJcdTIyY2MiLHJ0aHJlZToiXHUyMmNjIixyaW5nOiJcdTAyZGEiLHJsbToiXHUyMDBmIixybW91c3Q6Ilx1MjNiMSIscm1vdXN0YWNoZToiXHUyM2IxIixybm1pZDoiXHUyYWVlIixyb2FuZzoiXHUyN2VkIixyb2FycjoiXHUyMWZlIixyb3BhcjoiXHUyOTg2Iixyb3BmOiJcdWQ4MzVcdWRkNjMiLHJvcGx1czoiXHUyYTJlIixyb3RpbWVzOiJcdTJhMzUiLHJwYXI6IikiLHJwYXJndDoiXHUyOTk0IixycHBvbGludDoiXHUyYTEyIixyc2FxdW86Ilx1MjAzYSIscnNjcjoiXHVkODM1XHVkY2M3IixydGltZXM6Ilx1MjJjYSIscnRyaToiXHUyNWI5Iix0cmlhbmdsZXJpZ2h0OiJcdTI1YjkiLHJ0cmlsdHJpOiJcdTI5Y2UiLHJ1bHVoYXI6Ilx1Mjk2OCIscng6Ilx1MjExZSIsc2FjdXRlOiJcdTAxNWIiLHNjRToiXHUyYWI0IixzY2FwOiJcdTJhYjgiLHN1Y2NhcHByb3g6Ilx1MmFiOCIsc2Nhcm9uOiJcdTAxNjEiLHNjZWRpbDoiXHUwMTVmIixzY2lyYzoiXHUwMTVkIixzY25FOiJcdTJhYjYiLHN1Y2NuZXFxOiJcdTJhYjYiLHNjbmFwOiJcdTJhYmEiLHN1Y2NuYXBwcm94OiJcdTJhYmEiLHNjbnNpbToiXHUyMmU5IixzdWNjbnNpbToiXHUyMmU5IixzY3BvbGludDoiXHUyYTEzIixzY3k6Ilx1MDQ0MSIsc2RvdDoiXHUyMmM1IixzZG90ZToiXHUyYTY2IixzZUFycjoiXHUyMWQ4IixzZWN0OiJceGE3IixzZW1pOiI7IixzZXN3YXI6Ilx1MjkyOSIsdG9zYToiXHUyOTI5IixzZXh0OiJcdTI3MzYiLHNmcjoiXHVkODM1XHVkZDMwIixzaGFycDoiXHUyNjZmIixzaGNoY3k6Ilx1MDQ0OSIsc2hjeToiXHUwNDQ4IixzaHk6Ilx4YWQiLHNpZ21hOiJcdTAzYzMiLHNpZ21hZjoiXHUwM2MyIixzaWdtYXY6Ilx1MDNjMiIsdmFyc2lnbWE6Ilx1MDNjMiIsc2ltZG90OiJcdTJhNmEiLHNpbWc6Ilx1MmE5ZSIsc2ltZ0U6Ilx1MmFhMCIsc2ltbDoiXHUyYTlkIixzaW1sRToiXHUyYTlmIixzaW1uZToiXHUyMjQ2IixzaW1wbHVzOiJcdTJhMjQiLHNpbXJhcnI6Ilx1Mjk3MiIsc21hc2hwOiJcdTJhMzMiLHNtZXBhcnNsOiJcdTI5ZTQiLHNtaWxlOiJcdTIzMjMiLHNzbWlsZToiXHUyMzIzIixzbXQ6Ilx1MmFhYSIsc210ZToiXHUyYWFjIixzbXRlczoiXHUyYWFjXHVmZTAwIixzb2Z0Y3k6Ilx1MDQ0YyIsc29sOiIvIixzb2xiOiJcdTI5YzQiLHNvbGJhcjoiXHUyMzNmIixzb3BmOiJcdWQ4MzVcdWRkNjQiLHNwYWRlczoiXHUyNjYwIixzcGFkZXN1aXQ6Ilx1MjY2MCIsc3FjYXBzOiJcdTIyOTNcdWZlMDAiLHNxY3VwczoiXHUyMjk0XHVmZTAwIixzc2NyOiJcdWQ4MzVcdWRjYzgiLHN0YXI6Ilx1MjYwNiIsc3ViOiJcdTIyODIiLHN1YnNldDoiXHUyMjgyIixzdWJFOiJcdTJhYzUiLHN1YnNldGVxcToiXHUyYWM1IixzdWJkb3Q6Ilx1MmFiZCIsc3ViZWRvdDoiXHUyYWMzIixzdWJtdWx0OiJcdTJhYzEiLHN1Ym5FOiJcdTJhY2IiLHN1YnNldG5lcXE6Ilx1MmFjYiIsc3VibmU6Ilx1MjI4YSIsc3Vic2V0bmVxOiJcdTIyOGEiLHN1YnBsdXM6Ilx1MmFiZiIsc3VicmFycjoiXHUyOTc5IixzdWJzaW06Ilx1MmFjNyIsc3Vic3ViOiJcdTJhZDUiLHN1YnN1cDoiXHUyYWQzIixzdW5nOiJcdTI2NmEiLHN1cDE6Ilx4YjkiLHN1cDI6Ilx4YjIiLHN1cDM6Ilx4YjMiLHN1cEU6Ilx1MmFjNiIsc3Vwc2V0ZXFxOiJcdTJhYzYiLHN1cGRvdDoiXHUyYWJlIixzdXBkc3ViOiJcdTJhZDgiLHN1cGVkb3Q6Ilx1MmFjNCIsc3VwaHNvbDoiXHUyN2M5IixzdXBoc3ViOiJcdTJhZDciLHN1cGxhcnI6Ilx1Mjk3YiIsc3VwbXVsdDoiXHUyYWMyIixzdXBuRToiXHUyYWNjIixzdXBzZXRuZXFxOiJcdTJhY2MiLHN1cG5lOiJcdTIyOGIiLHN1cHNldG5lcToiXHUyMjhiIixzdXBwbHVzOiJcdTJhYzAiLHN1cHNpbToiXHUyYWM4IixzdXBzdWI6Ilx1MmFkNCIsc3Vwc3VwOiJcdTJhZDYiLHN3QXJyOiJcdTIxZDkiLHN3bndhcjoiXHUyOTJhIixzemxpZzoiXHhkZiIsdGFyZ2V0OiJcdTIzMTYiLHRhdToiXHUwM2M0Iix0Y2Fyb246Ilx1MDE2NSIsdGNlZGlsOiJcdTAxNjMiLHRjeToiXHUwNDQyIix0ZWxyZWM6Ilx1MjMxNSIsdGZyOiJcdWQ4MzVcdWRkMzEiLHRoZXRhOiJcdTAzYjgiLHRoZXRhc3ltOiJcdTAzZDEiLHRoZXRhdjoiXHUwM2QxIix2YXJ0aGV0YToiXHUwM2QxIix0aG9ybjoiXHhmZSIsdGltZXM6Ilx4ZDciLHRpbWVzYmFyOiJcdTJhMzEiLHRpbWVzZDoiXHUyYTMwIix0b3Bib3Q6Ilx1MjMzNiIsdG9wY2lyOiJcdTJhZjEiLHRvcGY6Ilx1ZDgzNVx1ZGQ2NSIsdG9wZm9yazoiXHUyYWRhIix0cHJpbWU6Ilx1MjAzNCIsdHJpYW5nbGU6Ilx1MjViNSIsdXRyaToiXHUyNWI1Iix0cmlhbmdsZXE6Ilx1MjI1YyIsdHJpZToiXHUyMjVjIix0cmlkb3Q6Ilx1MjVlYyIsdHJpbWludXM6Ilx1MmEzYSIsdHJpcGx1czoiXHUyYTM5Iix0cmlzYjoiXHUyOWNkIix0cml0aW1lOiJcdTJhM2IiLHRycGV6aXVtOiJcdTIzZTIiLHRzY3I6Ilx1ZDgzNVx1ZGNjOSIsdHNjeToiXHUwNDQ2Iix0c2hjeToiXHUwNDViIix0c3Ryb2s6Ilx1MDE2NyIsdUhhcjoiXHUyOTYzIix1YWN1dGU6Ilx4ZmEiLHVicmN5OiJcdTA0NWUiLHVicmV2ZToiXHUwMTZkIix1Y2lyYzoiXHhmYiIsdWN5OiJcdTA0NDMiLHVkYmxhYzoiXHUwMTcxIix1ZmlzaHQ6Ilx1Mjk3ZSIsdWZyOiJcdWQ4MzVcdWRkMzIiLHVncmF2ZToiXHhmOSIsdWhibGs6Ilx1MjU4MCIsdWxjb3JuOiJcdTIzMWMiLHVsY29ybmVyOiJcdTIzMWMiLHVsY3JvcDoiXHUyMzBmIix1bHRyaToiXHUyNWY4Iix1bWFjcjoiXHUwMTZiIix1b2dvbjoiXHUwMTczIix1b3BmOiJcdWQ4MzVcdWRkNjYiLHVwc2k6Ilx1MDNjNSIsdXBzaWxvbjoiXHUwM2M1Iix1cHVwYXJyb3dzOiJcdTIxYzgiLHV1YXJyOiJcdTIxYzgiLHVyY29ybjoiXHUyMzFkIix1cmNvcm5lcjoiXHUyMzFkIix1cmNyb3A6Ilx1MjMwZSIsdXJpbmc6Ilx1MDE2ZiIsdXJ0cmk6Ilx1MjVmOSIsdXNjcjoiXHVkODM1XHVkY2NhIix1dGRvdDoiXHUyMmYwIix1dGlsZGU6Ilx1MDE2OSIsdXVtbDoiXHhmYyIsdXdhbmdsZToiXHUyOWE3Iix2QmFyOiJcdTJhZTgiLHZCYXJ2OiJcdTJhZTkiLHZhbmdydDoiXHUyOTljIix2YXJzdWJzZXRuZXE6Ilx1MjI4YVx1ZmUwMCIsdnN1Ym5lOiJcdTIyOGFcdWZlMDAiLHZhcnN1YnNldG5lcXE6Ilx1MmFjYlx1ZmUwMCIsdnN1Ym5FOiJcdTJhY2JcdWZlMDAiLHZhcnN1cHNldG5lcToiXHUyMjhiXHVmZTAwIix2c3VwbmU6Ilx1MjI4Ylx1ZmUwMCIsdmFyc3Vwc2V0bmVxcToiXHUyYWNjXHVmZTAwIix2c3VwbkU6Ilx1MmFjY1x1ZmUwMCIsdmN5OiJcdTA0MzIiLHZlZWJhcjoiXHUyMmJiIix2ZWVlcToiXHUyMjVhIix2ZWxsaXA6Ilx1MjJlZSIsdmZyOiJcdWQ4MzVcdWRkMzMiLHZvcGY6Ilx1ZDgzNVx1ZGQ2NyIsdnNjcjoiXHVkODM1XHVkY2NiIix2emlnemFnOiJcdTI5OWEiLHdjaXJjOiJcdTAxNzUiLHdlZGJhcjoiXHUyYTVmIix3ZWRnZXE6Ilx1MjI1OSIsd2VpZXJwOiJcdTIxMTgiLHdwOiJcdTIxMTgiLHdmcjoiXHVkODM1XHVkZDM0Iix3b3BmOiJcdWQ4MzVcdWRkNjgiLHdzY3I6Ilx1ZDgzNVx1ZGNjYyIseGZyOiJcdWQ4MzVcdWRkMzUiLHhpOiJcdTAzYmUiLHhuaXM6Ilx1MjJmYiIseG9wZjoiXHVkODM1XHVkZDY5Iix4c2NyOiJcdWQ4MzVcdWRjY2QiLHlhY3V0ZToiXHhmZCIseWFjeToiXHUwNDRmIix5Y2lyYzoiXHUwMTc3Iix5Y3k6Ilx1MDQ0YiIseWVuOiJceGE1Iix5ZnI6Ilx1ZDgzNVx1ZGQzNiIseWljeToiXHUwNDU3Iix5b3BmOiJcdWQ4MzVcdWRkNmEiLHlzY3I6Ilx1ZDgzNVx1ZGNjZSIseXVjeToiXHUwNDRlIix5dW1sOiJceGZmIix6YWN1dGU6Ilx1MDE3YSIsemNhcm9uOiJcdTAxN2UiLHpjeToiXHUwNDM3Iix6ZG90OiJcdTAxN2MiLHpldGE6Ilx1MDNiNiIsemZyOiJcdWQ4MzVcdWRkMzciLHpoY3k6Ilx1MDQzNiIsemlncmFycjoiXHUyMWRkIix6b3BmOiJcdWQ4MzVcdWRkNmIiLHpzY3I6Ilx1ZDgzNVx1ZGNjZiIsendqOiJcdTIwMGQiLHp3bmo6Ilx1MjAwYyIsbmdzcDoiXHVlNTAwIn0saEM9Y2xhc3MgZXh0ZW5kcyB5bXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoaSx0KSx0aGlzLnRva2VuVHlwZT1lfX0sZUVlPS9cclxuPy9nO2Z1bmN0aW9uIHJDKG4pe3JldHVybmBVbmV4cGVjdGVkIGNoYXJhY3RlciAiJHswPT09bj8iRU9GIjpTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfSJgfWZ1bmN0aW9uIGlRKG4pe3JldHVybmBVbmtub3duIGVudGl0eSAiJHtufSIgLSB1c2UgdGhlICImIzxkZWNpbWFsPjsiIG9yICAiJiN4PGhleD47IiBzeW50YXhgfXZhciBmQz0oKCk9PntyZXR1cm4obj1mQ3x8KGZDPXt9KSkuSEVYPSJoZXhhZGVjaW1hbCIsbi5ERUM9ImRlY2ltYWwiLGZDO3ZhciBufSkoKSxtQz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmVycm9yPXR9fTtmdW5jdGlvbiBybChuKXtyZXR1cm4hUVYobil8fDA9PT1ufWZ1bmN0aW9uIHJRKG4pe3JldHVybiBRVihuKXx8NjI9PT1ufHw2MD09PW58fDQ3PT09bnx8Mzk9PT1ufHwzND09PW58fDYxPT09bnx8MD09PW59ZnVuY3Rpb24gaUVlKG4pe3JldHVybiA1OT09PW58fDA9PT1ufHwhZnVuY3Rpb24obil7cmV0dXJuIG4+PTk3JiZuPD0xMDJ8fG4+PTY1JiZuPD03MHx8JHAobil9KG4pfWZ1bmN0aW9uIHJFZShuKXtyZXR1cm4gNTk9PT1ufHwwPT09bnx8IUtWKG4pfWZ1bmN0aW9uIG9RKG4pe3JldHVybiBuPj05NyYmbjw9MTIyP24tOTcrNjU6bn12YXIgTW09Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtpZih0IGluc3RhbmNlb2YgTW0pe3RoaXMuZmlsZT10LmZpbGUsdGhpcy5pbnB1dD10LmlucHV0LHRoaXMuZW5kPXQuZW5kO2xldCBpPXQuc3RhdGU7dGhpcy5zdGF0ZT17cGVlazppLnBlZWssb2Zmc2V0Omkub2Zmc2V0LGxpbmU6aS5saW5lLGNvbHVtbjppLmNvbHVtbn19ZWxzZXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlByb2dyYW1taW5nIGVycm9yOiB0aGUgcmFuZ2UgYXJndW1lbnQgbXVzdCBiZSBwcm92aWRlZCB3aXRoIGEgZmlsZSBhcmd1bWVudC4iKTt0aGlzLmZpbGU9dCx0aGlzLmlucHV0PXQuY29udGVudCx0aGlzLmVuZD1lLmVuZFBvcyx0aGlzLnN0YXRlPXtwZWVrOi0xLG9mZnNldDplLnN0YXJ0UG9zLGxpbmU6ZS5zdGFydExpbmUsY29sdW1uOmUuc3RhcnRDb2x9fX1jbG9uZSgpe3JldHVybiBuZXcgTW0odGhpcyl9cGVlaygpe3JldHVybiB0aGlzLnN0YXRlLnBlZWt9Y2hhcnNMZWZ0KCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhdGUub2Zmc2V0fWRpZmYodCl7cmV0dXJuIHRoaXMuc3RhdGUub2Zmc2V0LXQuc3RhdGUub2Zmc2V0fWFkdmFuY2UoKXt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLnN0YXRlKX1pbml0KCl7dGhpcy51cGRhdGVQZWVrKHRoaXMuc3RhdGUpfWdldFNwYW4odCxlKXtsZXQgaT10PXR8fHRoaXM7aWYoZSlmb3IoO3RoaXMuZGlmZih0KT4wJiYtMSE9PWUuaW5kZXhPZih0LnBlZWsoKSk7KWk9PT10JiYodD10LmNsb25lKCkpLHQuYWR2YW5jZSgpO2xldCByPXRoaXMubG9jYXRpb25Gcm9tQ3Vyc29yKHQpLG89dGhpcy5sb2NhdGlvbkZyb21DdXJzb3IodGhpcykscz1pIT09dD90aGlzLmxvY2F0aW9uRnJvbUN1cnNvcihpKTpyO3JldHVybiBuZXcgR28ocixvLHMpfWdldENoYXJzKHQpe3JldHVybiB0aGlzLmlucHV0LnN1YnN0cmluZyh0LnN0YXRlLm9mZnNldCx0aGlzLnN0YXRlLm9mZnNldCl9Y2hhckF0KHQpe3JldHVybiB0aGlzLmlucHV0LmNoYXJDb2RlQXQodCl9YWR2YW5jZVN0YXRlKHQpe2lmKHQub2Zmc2V0Pj10aGlzLmVuZCl0aHJvdyB0aGlzLnN0YXRlPXQsbmV3IFlDKCdVbmV4cGVjdGVkIGNoYXJhY3RlciAiRU9GIicsdGhpcyk7bGV0IGU9dGhpcy5jaGFyQXQodC5vZmZzZXQpOzEwPT09ZT8odC5saW5lKyssdC5jb2x1bW49MCk6Y0soZSl8fHQuY29sdW1uKyssdC5vZmZzZXQrKyx0aGlzLnVwZGF0ZVBlZWsodCl9dXBkYXRlUGVlayh0KXt0LnBlZWs9dC5vZmZzZXQ+PXRoaXMuZW5kPzA6dGhpcy5jaGFyQXQodC5vZmZzZXQpfWxvY2F0aW9uRnJvbUN1cnNvcih0KXtyZXR1cm4gbmV3IHZtKHQuZmlsZSx0LnN0YXRlLm9mZnNldCx0LnN0YXRlLmxpbmUsdC5zdGF0ZS5jb2x1bW4pfX0sTF89Y2xhc3MgZXh0ZW5kcyBNbXtjb25zdHJ1Y3Rvcih0LGUpe3QgaW5zdGFuY2VvZiBMXz8oc3VwZXIodCksdGhpcy5pbnRlcm5hbFN0YXRlPXsuLi50LmludGVybmFsU3RhdGV9KTooc3VwZXIodCxlKSx0aGlzLmludGVybmFsU3RhdGU9dGhpcy5zdGF0ZSl9YWR2YW5jZSgpe3RoaXMuc3RhdGU9dGhpcy5pbnRlcm5hbFN0YXRlLHN1cGVyLmFkdmFuY2UoKSx0aGlzLnByb2Nlc3NFc2NhcGVTZXF1ZW5jZSgpfWluaXQoKXtzdXBlci5pbml0KCksdGhpcy5wcm9jZXNzRXNjYXBlU2VxdWVuY2UoKX1jbG9uZSgpe3JldHVybiBuZXcgTF8odGhpcyl9Z2V0Q2hhcnModCl7bGV0IGU9dC5jbG9uZSgpLGk9IiI7Zm9yKDtlLmludGVybmFsU3RhdGUub2Zmc2V0PHRoaXMuaW50ZXJuYWxTdGF0ZS5vZmZzZXQ7KWkrPVN0cmluZy5mcm9tQ29kZVBvaW50KGUucGVlaygpKSxlLmFkdmFuY2UoKTtyZXR1cm4gaX1wcm9jZXNzRXNjYXBlU2VxdWVuY2UoKXtsZXQgdD0oKT0+dGhpcy5pbnRlcm5hbFN0YXRlLnBlZWs7aWYoOTI9PT10KCkpaWYodGhpcy5pbnRlcm5hbFN0YXRlPXsuLi50aGlzLnN0YXRlfSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLDExMD09PXQoKSl0aGlzLnN0YXRlLnBlZWs9MTA7ZWxzZSBpZigxMTQ9PT10KCkpdGhpcy5zdGF0ZS5wZWVrPTEzO2Vsc2UgaWYoMTE4PT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMTtlbHNlIGlmKDExNj09PXQoKSl0aGlzLnN0YXRlLnBlZWs9OTtlbHNlIGlmKDk4PT09dCgpKXRoaXMuc3RhdGUucGVlaz04O2Vsc2UgaWYoMTAyPT09dCgpKXRoaXMuc3RhdGUucGVlaz0xMjtlbHNlIGlmKDExNz09PXQoKSlpZih0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHQoKT09PXRoKXt0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpO2xldCBlPXRoaXMuY2xvbmUoKSxpPTA7Zm9yKDt0KCkhPT1PdTspdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSxpKys7dGhpcy5zdGF0ZS5wZWVrPXRoaXMuZGVjb2RlSGV4RGlnaXRzKGUsaSl9ZWxzZXtsZXQgZT10aGlzLmNsb25lKCk7dGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLmFkdmFuY2VTdGF0ZSh0aGlzLmludGVybmFsU3RhdGUpLHRoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5zdGF0ZS5wZWVrPXRoaXMuZGVjb2RlSGV4RGlnaXRzKGUsNCl9ZWxzZSBpZigxMjA9PT10KCkpe3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSk7bGV0IGU9dGhpcy5jbG9uZSgpO3RoaXMuYWR2YW5jZVN0YXRlKHRoaXMuaW50ZXJuYWxTdGF0ZSksdGhpcy5zdGF0ZS5wZWVrPXRoaXMuZGVjb2RlSGV4RGlnaXRzKGUsMil9ZWxzZSBpZihWWCh0KCkpKXtsZXQgZT0iIixpPTAscj10aGlzLmNsb25lKCk7Zm9yKDtWWCh0KCkpJiZpPDM7KXI9dGhpcy5jbG9uZSgpLGUrPVN0cmluZy5mcm9tQ29kZVBvaW50KHQoKSksdGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSxpKys7dGhpcy5zdGF0ZS5wZWVrPXBhcnNlSW50KGUsOCksdGhpcy5pbnRlcm5hbFN0YXRlPXIuaW50ZXJuYWxTdGF0ZX1lbHNlIGNLKHRoaXMuaW50ZXJuYWxTdGF0ZS5wZWVrKT8odGhpcy5hZHZhbmNlU3RhdGUodGhpcy5pbnRlcm5hbFN0YXRlKSx0aGlzLnN0YXRlPXRoaXMuaW50ZXJuYWxTdGF0ZSk6dGhpcy5zdGF0ZS5wZWVrPXRoaXMuaW50ZXJuYWxTdGF0ZS5wZWVrfWRlY29kZUhleERpZ2l0cyh0LGUpe2xldCBpPXRoaXMuaW5wdXQuc2xpY2UodC5pbnRlcm5hbFN0YXRlLm9mZnNldCx0LmludGVybmFsU3RhdGUub2Zmc2V0K2UpLHI9cGFyc2VJbnQoaSwxNik7aWYoaXNOYU4ocikpdGhyb3cgdC5zdGF0ZT10LmludGVybmFsU3RhdGUsbmV3IFlDKCJJbnZhbGlkIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSIsdCk7cmV0dXJuIHJ9fSxZQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMubXNnPXQsdGhpcy5jdXJzb3I9ZX19LG9sPWNsYXNzIGV4dGVuZHMgeW17Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGUsaSksdGhpcy5lbGVtZW50TmFtZT10fXN0YXRpYyBjcmVhdGUodCxlLGkpe3JldHVybiBuZXcgb2wodCxlLGkpfX0sTUQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnJvb3ROb2Rlcz10LHRoaXMuZXJyb3JzPWV9fSxnVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmdldFRhZ0RlZmluaXRpb249dH1wYXJzZSh0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obix0LGUsaT17fSl7bGV0IHI9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9nZXRUYWdEZWZpbml0aW9uPWUsdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrPVtdLHRoaXMuX2luSW50ZXJwb2xhdGlvbj0hMSx0aGlzLnRva2Vucz1bXSx0aGlzLmVycm9ycz1bXSx0aGlzLm5vbk5vcm1hbGl6ZWRJY3VFeHByZXNzaW9ucz1bXSx0aGlzLl90b2tlbml6ZUljdT1pLnRva2VuaXplRXhwYW5zaW9uRm9ybXN8fCExLHRoaXMuX2ludGVycG9sYXRpb25Db25maWc9aS5pbnRlcnBvbGF0aW9uQ29uZmlnfHxQdSx0aGlzLl9sZWFkaW5nVHJpdmlhQ29kZVBvaW50cz1pLmxlYWRpbmdUcml2aWFDaGFycyYmaS5sZWFkaW5nVHJpdmlhQ2hhcnMubWFwKG89Pm8uY29kZVBvaW50QXQoMCl8fDApO2xldCByPWkucmFuZ2V8fHtlbmRQb3M6dC5jb250ZW50Lmxlbmd0aCxzdGFydFBvczowLHN0YXJ0TGluZTowLHN0YXJ0Q29sOjB9O3RoaXMuX2N1cnNvcj1pLmVzY2FwZWRTdHJpbmc/bmV3IExfKHQscik6bmV3IE1tKHQsciksdGhpcy5fcHJlc2VydmVMaW5lRW5kaW5ncz1pLnByZXNlcnZlTGluZUVuZGluZ3N8fCExLHRoaXMuX2VzY2FwZWRTdHJpbmc9aS5lc2NhcGVkU3RyaW5nfHwhMSx0aGlzLl9pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXM9aS5pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXN8fCExO3RyeXt0aGlzLl9jdXJzb3IuaW5pdCgpfWNhdGNoKG8pe3RoaXMuaGFuZGxlRXJyb3Iobyl9fV9wcm9jZXNzQ2FycmlhZ2VSZXR1cm5zKHQpe3JldHVybiB0aGlzLl9wcmVzZXJ2ZUxpbmVFbmRpbmdzP3Q6dC5yZXBsYWNlKGVFZSwiXG4iKX10b2tlbml6ZSgpe2Zvcig7MCE9PXRoaXMuX2N1cnNvci5wZWVrKCk7KXtsZXQgdD10aGlzLl9jdXJzb3IuY2xvbmUoKTt0cnl7dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDYwKT90aGlzLl9hdHRlbXB0Q2hhckNvZGUoMzMpP3RoaXMuX2F0dGVtcHRDaGFyQ29kZSg5MSk/dGhpcy5fY29uc3VtZUNkYXRhKHQpOnRoaXMuX2F0dGVtcHRDaGFyQ29kZSg0NSk/dGhpcy5fY29uc3VtZUNvbW1lbnQodCk6dGhpcy5fY29uc3VtZURvY1R5cGUodCk6dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KT90aGlzLl9jb25zdW1lVGFnQ2xvc2UodCk6dGhpcy5fY29uc3VtZVRhZ09wZW4odCk6dGhpcy5fdG9rZW5pemVJY3UmJnRoaXMuX3Rva2VuaXplRXhwYW5zaW9uRm9ybSgpfHx0aGlzLl9jb25zdW1lV2l0aEludGVycG9sYXRpb24oNSw4LCgpPT50aGlzLl9pc1RleHRFbmQoKSwoKT0+dGhpcy5faXNUYWdTdGFydCgpKX1jYXRjaChlKXt0aGlzLmhhbmRsZUVycm9yKGUpfX10aGlzLl9iZWdpblRva2VuKDI0KSx0aGlzLl9lbmRUb2tlbihbXSl9X3Rva2VuaXplRXhwYW5zaW9uRm9ybSgpe2lmKHRoaXMuaXNFeHBhbnNpb25Gb3JtU3RhcnQoKSlyZXR1cm4gdGhpcy5fY29uc3VtZUV4cGFuc2lvbkZvcm1TdGFydCgpLCEwO2lmKHRoaXMuX2N1cnNvci5wZWVrKCkhPT1PdSYmdGhpcy5faXNJbkV4cGFuc2lvbkZvcm0oKSlyZXR1cm4gdGhpcy5fY29uc3VtZUV4cGFuc2lvbkNhc2VTdGFydCgpLCEwO2lmKHRoaXMuX2N1cnNvci5wZWVrKCk9PT1PdSl7aWYodGhpcy5faXNJbkV4cGFuc2lvbkNhc2UoKSlyZXR1cm4gdGhpcy5fY29uc3VtZUV4cGFuc2lvbkNhc2VFbmQoKSwhMDtpZih0aGlzLl9pc0luRXhwYW5zaW9uRm9ybSgpKXJldHVybiB0aGlzLl9jb25zdW1lRXhwYW5zaW9uRm9ybUVuZCgpLCEwfXJldHVybiExfV9iZWdpblRva2VuKHQsZT10aGlzLl9jdXJzb3IuY2xvbmUoKSl7dGhpcy5fY3VycmVudFRva2VuU3RhcnQ9ZSx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPXR9X2VuZFRva2VuKHQsZSl7aWYobnVsbD09PXRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0KXRocm93IG5ldyBoQygiUHJvZ3JhbW1pbmcgZXJyb3IgLSBhdHRlbXB0ZWQgdG8gZW5kIGEgdG9rZW4gd2hlbiB0aGVyZSB3YXMgbm8gc3RhcnQgdG8gdGhlIHRva2VuIix0aGlzLl9jdXJyZW50VG9rZW5UeXBlLHRoaXMuX2N1cnNvci5nZXRTcGFuKGUpKTtpZihudWxsPT09dGhpcy5fY3VycmVudFRva2VuVHlwZSl0aHJvdyBuZXcgaEMoIlByb2dyYW1taW5nIGVycm9yIC0gYXR0ZW1wdGVkIHRvIGVuZCBhIHRva2VuIHdoaWNoIGhhcyBubyB0b2tlbiB0eXBlIixudWxsLHRoaXMuX2N1cnNvci5nZXRTcGFuKHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0KSk7bGV0IGk9e3R5cGU6dGhpcy5fY3VycmVudFRva2VuVHlwZSxwYXJ0czp0LHNvdXJjZVNwYW46KGU/P3RoaXMuX2N1cnNvcikuZ2V0U3Bhbih0aGlzLl9jdXJyZW50VG9rZW5TdGFydCx0aGlzLl9sZWFkaW5nVHJpdmlhQ29kZVBvaW50cyl9O3JldHVybiB0aGlzLnRva2Vucy5wdXNoKGkpLHRoaXMuX2N1cnJlbnRUb2tlblN0YXJ0PW51bGwsdGhpcy5fY3VycmVudFRva2VuVHlwZT1udWxsLGl9X2NyZWF0ZUVycm9yKHQsZSl7dGhpcy5faXNJbkV4cGFuc2lvbkZvcm0oKSYmKHQrPScgKERvIHlvdSBoYXZlIGFuIHVuZXNjYXBlZCAieyIgaW4geW91ciB0ZW1wbGF0ZT8gVXNlICJ7eyBcJ3tcJyB9fSIpIHRvIGVzY2FwZSBpdC4pJyk7bGV0IGk9bmV3IGhDKHQsdGhpcy5fY3VycmVudFRva2VuVHlwZSxlKTtyZXR1cm4gdGhpcy5fY3VycmVudFRva2VuU3RhcnQ9bnVsbCx0aGlzLl9jdXJyZW50VG9rZW5UeXBlPW51bGwsbmV3IG1DKGkpfWhhbmRsZUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiBZQyYmKHQ9dGhpcy5fY3JlYXRlRXJyb3IodC5tc2csdGhpcy5fY3Vyc29yLmdldFNwYW4odC5jdXJzb3IpKSksISh0IGluc3RhbmNlb2YgbUMpKXRocm93IHQ7dGhpcy5lcnJvcnMucHVzaCh0LmVycm9yKX1fYXR0ZW1wdENoYXJDb2RlKHQpe3JldHVybiB0aGlzLl9jdXJzb3IucGVlaygpPT09dCYmKHRoaXMuX2N1cnNvci5hZHZhbmNlKCksITApfV9hdHRlbXB0Q2hhckNvZGVDYXNlSW5zZW5zaXRpdmUodCl7cmV0dXJuISFmdW5jdGlvbihuLHQpe3JldHVybiBvUShuKT09PW9RKHQpfSh0aGlzLl9jdXJzb3IucGVlaygpLHQpJiYodGhpcy5fY3Vyc29yLmFkdmFuY2UoKSwhMCl9X3JlcXVpcmVDaGFyQ29kZSh0KXtsZXQgZT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZighdGhpcy5fYXR0ZW1wdENoYXJDb2RlKHQpKXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKHJDKHRoaXMuX2N1cnNvci5wZWVrKCkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKGUpKX1fYXR0ZW1wdFN0cih0KXtsZXQgZT10Lmxlbmd0aDtpZih0aGlzLl9jdXJzb3IuY2hhcnNMZWZ0KCk8ZSlyZXR1cm4hMTtsZXQgaT10aGlzLl9jdXJzb3IuY2xvbmUoKTtmb3IobGV0IHI9MDtyPGU7cisrKWlmKCF0aGlzLl9hdHRlbXB0Q2hhckNvZGUodC5jaGFyQ29kZUF0KHIpKSlyZXR1cm4gdGhpcy5fY3Vyc29yPWksITE7cmV0dXJuITB9X2F0dGVtcHRTdHJDYXNlSW5zZW5zaXRpdmUodCl7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIXRoaXMuX2F0dGVtcHRDaGFyQ29kZUNhc2VJbnNlbnNpdGl2ZSh0LmNoYXJDb2RlQXQoZSkpKXJldHVybiExO3JldHVybiEwfV9yZXF1aXJlU3RyKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKCF0aGlzLl9hdHRlbXB0U3RyKHQpKXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKHJDKHRoaXMuX2N1cnNvci5wZWVrKCkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKGUpKX1fYXR0ZW1wdENoYXJDb2RlVW50aWxGbih0KXtmb3IoOyF0KHRoaXMuX2N1cnNvci5wZWVrKCkpOyl0aGlzLl9jdXJzb3IuYWR2YW5jZSgpfV9yZXF1aXJlQ2hhckNvZGVVbnRpbEZuKHQsZSl7bGV0IGk9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbih0KSx0aGlzLl9jdXJzb3IuZGlmZihpKTxlKXRocm93IHRoaXMuX2NyZWF0ZUVycm9yKHJDKHRoaXMuX2N1cnNvci5wZWVrKCkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKGkpKX1fYXR0ZW1wdFVudGlsQ2hhcih0KXtmb3IoO3RoaXMuX2N1cnNvci5wZWVrKCkhPT10Oyl0aGlzLl9jdXJzb3IuYWR2YW5jZSgpfV9yZWFkQ2hhcigpe2xldCB0PVN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuX2N1cnNvci5wZWVrKCkpO3JldHVybiB0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHR9X2NvbnN1bWVFbnRpdHkodCl7dGhpcy5fYmVnaW5Ub2tlbig5KTtsZXQgZT10aGlzLl9jdXJzb3IuY2xvbmUoKTtpZih0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZSgzNSkpe2xldCBpPXRoaXMuX2F0dGVtcHRDaGFyQ29kZSgxMjApfHx0aGlzLl9hdHRlbXB0Q2hhckNvZGUoODgpLHI9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihpRWUpLDU5IT10aGlzLl9jdXJzb3IucGVlaygpKXRocm93IHRoaXMuX2N1cnNvci5hZHZhbmNlKCksdGhpcy5fY3JlYXRlRXJyb3IoZnVuY3Rpb24obix0KXtyZXR1cm5gVW5hYmxlIHRvIHBhcnNlIGVudGl0eSAiJHt0fSIgLSAke259IGNoYXJhY3RlciByZWZlcmVuY2UgZW50aXRpZXMgbXVzdCBlbmQgd2l0aCAiOyJgfShpP2ZDLkhFWDpmQy5ERUMsdGhpcy5fY3Vyc29yLmdldENoYXJzKGUpKSx0aGlzLl9jdXJzb3IuZ2V0U3BhbigpKTtsZXQgbz10aGlzLl9jdXJzb3IuZ2V0Q2hhcnMocik7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTt0cnl7bGV0IHM9cGFyc2VJbnQobyxpPzE2OjEwKTt0aGlzLl9lbmRUb2tlbihbU3RyaW5nLmZyb21DaGFyQ29kZShzKSx0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSldKX1jYXRjaHt0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihpUSh0aGlzLl9jdXJzb3IuZ2V0Q2hhcnMoZSkpLHRoaXMuX2N1cnNvci5nZXRTcGFuKCkpfX1lbHNle2xldCBpPXRoaXMuX2N1cnNvci5jbG9uZSgpO2lmKHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ockVlKSw1OSE9dGhpcy5fY3Vyc29yLnBlZWsoKSl0aGlzLl9iZWdpblRva2VuKHQsZSksdGhpcy5fY3Vyc29yPWksdGhpcy5fZW5kVG9rZW4oWyImIl0pO2Vsc2V7bGV0IHI9dGhpcy5fY3Vyc29yLmdldENoYXJzKGkpO3RoaXMuX2N1cnNvci5hZHZhbmNlKCk7bGV0IG89Q0Rbcl07aWYoIW8pdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IoaVEociksdGhpcy5fY3Vyc29yLmdldFNwYW4oZSkpO3RoaXMuX2VuZFRva2VuKFtvLGAmJHtyfTtgXSl9fX1fY29uc3VtZVJhd1RleHQodCxlKXt0aGlzLl9iZWdpblRva2VuKHQ/Njo3KTtsZXQgaT1bXTtmb3IoOzspe2xldCByPXRoaXMuX2N1cnNvci5jbG9uZSgpLG89ZSgpO2lmKHRoaXMuX2N1cnNvcj1yLG8pYnJlYWs7dCYmMzg9PT10aGlzLl9jdXJzb3IucGVlaygpPyh0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhpLmpvaW4oIiIpKV0pLGkubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUVudGl0eSg2KSx0aGlzLl9iZWdpblRva2VuKDYpKTppLnB1c2godGhpcy5fcmVhZENoYXIoKSl9dGhpcy5fZW5kVG9rZW4oW3RoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoaS5qb2luKCIiKSldKX1fY29uc3VtZUNvbW1lbnQodCl7dGhpcy5fYmVnaW5Ub2tlbigxMCx0KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDUpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9jb25zdW1lUmF3VGV4dCghMSwoKT0+dGhpcy5fYXR0ZW1wdFN0cigiLS1ceDNlIikpLHRoaXMuX2JlZ2luVG9rZW4oMTEpLHRoaXMuX3JlcXVpcmVTdHIoIi0tXHgzZSIpLHRoaXMuX2VuZFRva2VuKFtdKX1fY29uc3VtZUNkYXRhKHQpe3RoaXMuX2JlZ2luVG9rZW4oMTIsdCksdGhpcy5fcmVxdWlyZVN0cigiQ0RBVEFbIiksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2NvbnN1bWVSYXdUZXh0KCExLCgpPT50aGlzLl9hdHRlbXB0U3RyKCJdXT4iKSksdGhpcy5fYmVnaW5Ub2tlbigxMyksdGhpcy5fcmVxdWlyZVN0cigiXV0+IiksdGhpcy5fZW5kVG9rZW4oW10pfV9jb25zdW1lRG9jVHlwZSh0KXt0aGlzLl9iZWdpblRva2VuKDE4LHQpO2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO3RoaXMuX2F0dGVtcHRVbnRpbENoYXIoNjIpO2xldCBpPXRoaXMuX2N1cnNvci5nZXRDaGFycyhlKTt0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHRoaXMuX2VuZFRva2VuKFtpXSl9X2NvbnN1bWVQcmVmaXhBbmROYW1lKCl7bGV0IHQ9dGhpcy5fY3Vyc29yLmNsb25lKCksZT0iIjtmb3IoOzU4IT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmISgoKG49dGhpcy5fY3Vyc29yLnBlZWsoKSk8OTd8fDEyMjxuKSYmKG48NjV8fDkwPG4pJiYobjw0OHx8bj41NykpOyl0aGlzLl9jdXJzb3IuYWR2YW5jZSgpO3ZhciBuO2xldCBpO3JldHVybiA1OD09PXRoaXMuX2N1cnNvci5wZWVrKCk/KGU9dGhpcy5fY3Vyc29yLmdldENoYXJzKHQpLHRoaXMuX2N1cnNvci5hZHZhbmNlKCksaT10aGlzLl9jdXJzb3IuY2xvbmUoKSk6aT10LHRoaXMuX3JlcXVpcmVDaGFyQ29kZVVudGlsRm4oclEsIiI9PT1lPzA6MSksW2UsdGhpcy5fY3Vyc29yLmdldENoYXJzKGkpXX1fY29uc3VtZVRhZ09wZW4odCl7bGV0IGUsaSxyO3RyeXtpZighS1YodGhpcy5fY3Vyc29yLnBlZWsoKSkpdGhyb3cgdGhpcy5fY3JlYXRlRXJyb3IockModGhpcy5fY3Vyc29yLnBlZWsoKSksdGhpcy5fY3Vyc29yLmdldFNwYW4odCkpO2ZvcihyPXRoaXMuX2NvbnN1bWVUYWdPcGVuU3RhcnQodCksaT1yLnBhcnRzWzBdLGU9ci5wYXJ0c1sxXSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKTs0NyE9PXRoaXMuX2N1cnNvci5wZWVrKCkmJjYyIT09dGhpcy5fY3Vyc29yLnBlZWsoKSYmNjAhPT10aGlzLl9jdXJzb3IucGVlaygpJiYwIT09dGhpcy5fY3Vyc29yLnBlZWsoKTspdGhpcy5fY29uc3VtZUF0dHJpYnV0ZU5hbWUoKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjEpJiYodGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihybCksdGhpcy5fY29uc3VtZUF0dHJpYnV0ZVZhbHVlKCkpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ocmwpO3RoaXMuX2NvbnN1bWVUYWdPcGVuRW5kKCl9Y2F0Y2gocyl7aWYocyBpbnN0YW5jZW9mIG1DKXJldHVybiB2b2lkKHI/ci50eXBlPTQ6KHRoaXMuX2JlZ2luVG9rZW4oNSx0KSx0aGlzLl9lbmRUb2tlbihbIjwiXSkpKTt0aHJvdyBzfWxldCBvPXRoaXMuX2dldFRhZ0RlZmluaXRpb24oZSkuZ2V0Q29udGVudFR5cGUoaSk7bz09PVdsLlJBV19URVhUP3RoaXMuX2NvbnN1bWVSYXdUZXh0V2l0aFRhZ0Nsb3NlKGksZSwhMSk6bz09PVdsLkVTQ0FQQUJMRV9SQVdfVEVYVCYmdGhpcy5fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UoaSxlLCEwKX1fY29uc3VtZVJhd1RleHRXaXRoVGFnQ2xvc2UodCxlLGkpe3RoaXMuX2NvbnN1bWVSYXdUZXh0KGksKCk9PiEhKHRoaXMuX2F0dGVtcHRDaGFyQ29kZSg2MCkmJnRoaXMuX2F0dGVtcHRDaGFyQ29kZSg0NykmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9hdHRlbXB0U3RyQ2FzZUluc2Vuc2l0aXZlKGUpKSkmJih0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGUoNjIpKSksdGhpcy5fYmVnaW5Ub2tlbigzKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGVVbnRpbEZuKHI9PjYyPT09ciwzKSx0aGlzLl9jdXJzb3IuYWR2YW5jZSgpLHRoaXMuX2VuZFRva2VuKFt0LGVdKX1fY29uc3VtZVRhZ09wZW5TdGFydCh0KXt0aGlzLl9iZWdpblRva2VuKDAsdCk7bGV0IGU9dGhpcy5fY29uc3VtZVByZWZpeEFuZE5hbWUoKTtyZXR1cm4gdGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVBdHRyaWJ1dGVOYW1lKCl7bGV0IHQ9dGhpcy5fY3Vyc29yLnBlZWsoKTtpZigzOT09PXR8fDM0PT09dCl0aHJvdyB0aGlzLl9jcmVhdGVFcnJvcihyQyh0KSx0aGlzLl9jdXJzb3IuZ2V0U3BhbigpKTt0aGlzLl9iZWdpblRva2VuKDE0KTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3RoaXMuX2VuZFRva2VuKGUpfV9jb25zdW1lQXR0cmlidXRlVmFsdWUoKXtpZigzOT09PXRoaXMuX2N1cnNvci5wZWVrKCl8fDM0PT09dGhpcy5fY3Vyc29yLnBlZWsoKSl7bGV0IGU9dGhpcy5fY3Vyc29yLnBlZWsoKTt0aGlzLl9jb25zdW1lUXVvdGUoZSk7bGV0IGk9KCk9PnRoaXMuX2N1cnNvci5wZWVrKCk9PT1lO3RoaXMuX2NvbnN1bWVXaXRoSW50ZXJwb2xhdGlvbigxNiwxNyxpLGkpLHRoaXMuX2NvbnN1bWVRdW90ZShlKX1lbHNle2xldCBlPSgpPT5yUSh0aGlzLl9jdXJzb3IucGVlaygpKTt0aGlzLl9jb25zdW1lV2l0aEludGVycG9sYXRpb24oMTYsMTcsZSxlKX19X2NvbnN1bWVRdW90ZSh0KXt0aGlzLl9iZWdpblRva2VuKDE1KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodCksdGhpcy5fZW5kVG9rZW4oW1N0cmluZy5mcm9tQ29kZVBvaW50KHQpXSl9X2NvbnN1bWVUYWdPcGVuRW5kKCl7bGV0IHQ9dGhpcy5fYXR0ZW1wdENoYXJDb2RlKDQ3KT8yOjE7dGhpcy5fYmVnaW5Ub2tlbih0KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUoNjIpLHRoaXMuX2VuZFRva2VuKFtdKX1fY29uc3VtZVRhZ0Nsb3NlKHQpe3RoaXMuX2JlZ2luVG9rZW4oMyx0KSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKTtsZXQgZT10aGlzLl9jb25zdW1lUHJlZml4QW5kTmFtZSgpO3RoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ocmwpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZSg2MiksdGhpcy5fZW5kVG9rZW4oZSl9X2NvbnN1bWVFeHBhbnNpb25Gb3JtU3RhcnQoKXt0aGlzLl9iZWdpblRva2VuKDE5KSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodGgpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucHVzaCgxOSksdGhpcy5fYmVnaW5Ub2tlbig3KTtsZXQgdD10aGlzLl9yZWFkVW50aWwoNDQpLGU9dGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyh0KTtpZih0aGlzLl9pMThuTm9ybWFsaXplTGluZUVuZGluZ3NJbklDVXMpdGhpcy5fZW5kVG9rZW4oW2VdKTtlbHNle2xldCByPXRoaXMuX2VuZFRva2VuKFt0XSk7ZSE9PXQmJnRoaXMubm9uTm9ybWFsaXplZEljdUV4cHJlc3Npb25zLnB1c2gocil9dGhpcy5fcmVxdWlyZUNoYXJDb2RlKDQ0KSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9iZWdpblRva2VuKDcpO2xldCBpPXRoaXMuX3JlYWRVbnRpbCg0NCk7dGhpcy5fZW5kVG9rZW4oW2ldKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUoNDQpLHRoaXMuX2F0dGVtcHRDaGFyQ29kZVVudGlsRm4ocmwpfV9jb25zdW1lRXhwYW5zaW9uQ2FzZVN0YXJ0KCl7dGhpcy5fYmVnaW5Ub2tlbigyMCk7bGV0IHQ9dGhpcy5fcmVhZFVudGlsKHRoKS50cmltKCk7dGhpcy5fZW5kVG9rZW4oW3RdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9iZWdpblRva2VuKDIxKSx0aGlzLl9yZXF1aXJlQ2hhckNvZGUodGgpLHRoaXMuX2VuZFRva2VuKFtdKSx0aGlzLl9hdHRlbXB0Q2hhckNvZGVVbnRpbEZuKHJsKSx0aGlzLl9leHBhbnNpb25DYXNlU3RhY2sucHVzaCgyMSl9X2NvbnN1bWVFeHBhbnNpb25DYXNlRW5kKCl7dGhpcy5fYmVnaW5Ub2tlbigyMiksdGhpcy5fcmVxdWlyZUNoYXJDb2RlKE91KSx0aGlzLl9lbmRUb2tlbihbXSksdGhpcy5fYXR0ZW1wdENoYXJDb2RlVW50aWxGbihybCksdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLnBvcCgpfV9jb25zdW1lRXhwYW5zaW9uRm9ybUVuZCgpe3RoaXMuX2JlZ2luVG9rZW4oMjMpLHRoaXMuX3JlcXVpcmVDaGFyQ29kZShPdSksdGhpcy5fZW5kVG9rZW4oW10pLHRoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5wb3AoKX1fY29uc3VtZVdpdGhJbnRlcnBvbGF0aW9uKHQsZSxpLHIpe3RoaXMuX2JlZ2luVG9rZW4odCk7bGV0IG89W107Zm9yKDshaSgpOyl7bGV0IHM9dGhpcy5fY3Vyc29yLmNsb25lKCk7dGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZyYmdGhpcy5fYXR0ZW1wdFN0cih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLnN0YXJ0KT8odGhpcy5fZW5kVG9rZW4oW3RoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoby5qb2luKCIiKSldLHMpLG8ubGVuZ3RoPTAsdGhpcy5fY29uc3VtZUludGVycG9sYXRpb24oZSxzLHIpLHRoaXMuX2JlZ2luVG9rZW4odCkpOjM4PT09dGhpcy5fY3Vyc29yLnBlZWsoKT8odGhpcy5fZW5kVG9rZW4oW3RoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoby5qb2luKCIiKSldKSxvLmxlbmd0aD0wLHRoaXMuX2NvbnN1bWVFbnRpdHkodCksdGhpcy5fYmVnaW5Ub2tlbih0KSk6by5wdXNoKHRoaXMuX3JlYWRDaGFyKCkpfXRoaXMuX2luSW50ZXJwb2xhdGlvbj0hMSx0aGlzLl9lbmRUb2tlbihbdGhpcy5fcHJvY2Vzc0NhcnJpYWdlUmV0dXJucyhvLmpvaW4oIiIpKV0pfV9jb25zdW1lSW50ZXJwb2xhdGlvbih0LGUsaSl7bGV0IHI9W107dGhpcy5fYmVnaW5Ub2tlbih0LGUpLHIucHVzaCh0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLnN0YXJ0KTtsZXQgbz10aGlzLl9jdXJzb3IuY2xvbmUoKSxzPW51bGwsYT0hMTtmb3IoOzAhPT10aGlzLl9jdXJzb3IucGVlaygpJiYobnVsbD09PWl8fCFpKCkpOyl7bGV0IGw9dGhpcy5fY3Vyc29yLmNsb25lKCk7aWYodGhpcy5faXNUYWdTdGFydCgpKXJldHVybiB0aGlzLl9jdXJzb3I9bCxyLnB1c2godGhpcy5fZ2V0UHJvY2Vzc2VkQ2hhcnMobyxsKSksdm9pZCB0aGlzLl9lbmRUb2tlbihyKTtpZihudWxsPT09cyl7aWYodGhpcy5fYXR0ZW1wdFN0cih0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnLmVuZCkpcmV0dXJuIHIucHVzaCh0aGlzLl9nZXRQcm9jZXNzZWRDaGFycyhvLGwpKSxyLnB1c2godGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZy5lbmQpLHZvaWQgdGhpcy5fZW5kVG9rZW4ocik7dGhpcy5fYXR0ZW1wdFN0cigiLy8iKSYmKGE9ITApfWxldCBjPXRoaXMuX2N1cnNvci5wZWVrKCk7dGhpcy5fY3Vyc29yLmFkdmFuY2UoKSw5Mj09PWM/dGhpcy5fY3Vyc29yLmFkdmFuY2UoKTpjPT09cz9zPW51bGw6IWEmJm51bGw9PT1zJiZXQihjKSYmKHM9Yyl9ci5wdXNoKHRoaXMuX2dldFByb2Nlc3NlZENoYXJzKG8sdGhpcy5fY3Vyc29yKSksdGhpcy5fZW5kVG9rZW4ocil9X2dldFByb2Nlc3NlZENoYXJzKHQsZSl7cmV0dXJuIHRoaXMuX3Byb2Nlc3NDYXJyaWFnZVJldHVybnMoZS5nZXRDaGFycyh0KSl9X2lzVGV4dEVuZCgpe3JldHVybiEhKHRoaXMuX2lzVGFnU3RhcnQoKXx8MD09PXRoaXMuX2N1cnNvci5wZWVrKCl8fHRoaXMuX3Rva2VuaXplSWN1JiYhdGhpcy5faW5JbnRlcnBvbGF0aW9uJiYodGhpcy5pc0V4cGFuc2lvbkZvcm1TdGFydCgpfHx0aGlzLl9jdXJzb3IucGVlaygpPT09T3UmJnRoaXMuX2lzSW5FeHBhbnNpb25DYXNlKCkpKX1faXNUYWdTdGFydCgpe2lmKDYwPT09dGhpcy5fY3Vyc29yLnBlZWsoKSl7bGV0IHQ9dGhpcy5fY3Vyc29yLmNsb25lKCk7dC5hZHZhbmNlKCk7bGV0IGU9dC5wZWVrKCk7aWYoOTc8PWUmJmU8PTEyMnx8NjU8PWUmJmU8PTkwfHw0Nz09PWV8fDMzPT09ZSlyZXR1cm4hMH1yZXR1cm4hMX1fcmVhZFVudGlsKHQpe2xldCBlPXRoaXMuX2N1cnNvci5jbG9uZSgpO3JldHVybiB0aGlzLl9hdHRlbXB0VW50aWxDaGFyKHQpLHRoaXMuX2N1cnNvci5nZXRDaGFycyhlKX1faXNJbkV4cGFuc2lvbkNhc2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrLmxlbmd0aD4wJiYyMT09PXRoaXMuX2V4cGFuc2lvbkNhc2VTdGFja1t0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoLTFdfV9pc0luRXhwYW5zaW9uRm9ybSgpe3JldHVybiB0aGlzLl9leHBhbnNpb25DYXNlU3RhY2subGVuZ3RoPjAmJjE5PT09dGhpcy5fZXhwYW5zaW9uQ2FzZVN0YWNrW3RoaXMuX2V4cGFuc2lvbkNhc2VTdGFjay5sZW5ndGgtMV19aXNFeHBhbnNpb25Gb3JtU3RhcnQoKXtpZih0aGlzLl9jdXJzb3IucGVlaygpIT09dGgpcmV0dXJuITE7aWYodGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZyl7bGV0IHQ9dGhpcy5fY3Vyc29yLmNsb25lKCksZT10aGlzLl9hdHRlbXB0U3RyKHRoaXMuX2ludGVycG9sYXRpb25Db25maWcuc3RhcnQpO3JldHVybiB0aGlzLl9jdXJzb3I9dCwhZX1yZXR1cm4hMH19KG5ldyBwRChuLHQpLGUsaSk7cmV0dXJuIHIudG9rZW5pemUoKSxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudG9rZW5zPXQsdGhpcy5lcnJvcnM9ZSx0aGlzLm5vbk5vcm1hbGl6ZWRJY3VFeHByZXNzaW9ucz1pfX0oZnVuY3Rpb24obil7bGV0IGUsdD1bXTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IHI9bltpXTtlJiY1PT09ZS50eXBlJiY1PT09ci50eXBlfHxlJiYxNj09PWUudHlwZSYmMTY9PT1yLnR5cGU/KGUucGFydHNbMF0rPXIucGFydHNbMF0sZS5zb3VyY2VTcGFuLmVuZD1yLnNvdXJjZVNwYW4uZW5kKTooZT1yLHQucHVzaChlKSl9cmV0dXJuIHR9KHIudG9rZW5zKSxyLmVycm9ycyxyLm5vbk5vcm1hbGl6ZWRJY3VFeHByZXNzaW9ucyl9KHQsZSx0aGlzLmdldFRhZ0RlZmluaXRpb24saSksbz1uZXcgWEMoci50b2tlbnMsdGhpcy5nZXRUYWdEZWZpbml0aW9uKTtyZXR1cm4gby5idWlsZCgpLG5ldyBNRChvLnJvb3ROb2RlcyxyLmVycm9ycy5jb25jYXQoby5lcnJvcnMpKX19LFhDPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy50b2tlbnM9dCx0aGlzLmdldFRhZ0RlZmluaXRpb249ZSx0aGlzLl9pbmRleD0tMSx0aGlzLl9lbGVtZW50U3RhY2s9W10sdGhpcy5yb290Tm9kZXM9W10sdGhpcy5lcnJvcnM9W10sdGhpcy5fYWR2YW5jZSgpfWJ1aWxkKCl7Zm9yKDsyNCE9PXRoaXMuX3BlZWsudHlwZTspMD09PXRoaXMuX3BlZWsudHlwZXx8ND09PXRoaXMuX3BlZWsudHlwZT90aGlzLl9jb25zdW1lU3RhcnRUYWcodGhpcy5fYWR2YW5jZSgpKTozPT09dGhpcy5fcGVlay50eXBlP3RoaXMuX2NvbnN1bWVFbmRUYWcodGhpcy5fYWR2YW5jZSgpKToxMj09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVDZGF0YSh0aGlzLl9hZHZhbmNlKCkpKToxMD09PXRoaXMuX3BlZWsudHlwZT8odGhpcy5fY2xvc2VWb2lkRWxlbWVudCgpLHRoaXMuX2NvbnN1bWVDb21tZW50KHRoaXMuX2FkdmFuY2UoKSkpOjU9PT10aGlzLl9wZWVrLnR5cGV8fDc9PT10aGlzLl9wZWVrLnR5cGV8fDY9PT10aGlzLl9wZWVrLnR5cGU/KHRoaXMuX2Nsb3NlVm9pZEVsZW1lbnQoKSx0aGlzLl9jb25zdW1lVGV4dCh0aGlzLl9hZHZhbmNlKCkpKToxOT09PXRoaXMuX3BlZWsudHlwZT90aGlzLl9jb25zdW1lRXhwYW5zaW9uKHRoaXMuX2FkdmFuY2UoKSk6dGhpcy5fYWR2YW5jZSgpfV9hZHZhbmNlKCl7bGV0IHQ9dGhpcy5fcGVlaztyZXR1cm4gdGhpcy5faW5kZXg8dGhpcy50b2tlbnMubGVuZ3RoLTEmJnRoaXMuX2luZGV4KyssdGhpcy5fcGVlaz10aGlzLnRva2Vuc1t0aGlzLl9pbmRleF0sdH1fYWR2YW5jZUlmKHQpe3JldHVybiB0aGlzLl9wZWVrLnR5cGU9PT10P3RoaXMuX2FkdmFuY2UoKTpudWxsfV9jb25zdW1lQ2RhdGEodCl7dGhpcy5fY29uc3VtZVRleHQodGhpcy5fYWR2YW5jZSgpKSx0aGlzLl9hZHZhbmNlSWYoMTMpfV9jb25zdW1lQ29tbWVudCh0KXtsZXQgZT10aGlzLl9hZHZhbmNlSWYoNyk7dGhpcy5fYWR2YW5jZUlmKDExKTtsZXQgaT1udWxsIT1lP2UucGFydHNbMF0udHJpbSgpOm51bGw7dGhpcy5fYWRkVG9QYXJlbnQobmV3IHhEKGksdC5zb3VyY2VTcGFuKSl9X2NvbnN1bWVFeHBhbnNpb24odCl7bGV0IGU9dGhpcy5fYWR2YW5jZSgpLGk9dGhpcy5fYWR2YW5jZSgpLHI9W107Zm9yKDsyMD09PXRoaXMuX3BlZWsudHlwZTspe2xldCBzPXRoaXMuX3BhcnNlRXhwYW5zaW9uQ2FzZSgpO2lmKCFzKXJldHVybjtyLnB1c2gocyl9aWYoMjMhPT10aGlzLl9wZWVrLnR5cGUpcmV0dXJuIHZvaWQgdGhpcy5lcnJvcnMucHVzaChvbC5jcmVhdGUobnVsbCx0aGlzLl9wZWVrLnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKTtsZXQgbz1uZXcgR28odC5zb3VyY2VTcGFuLnN0YXJ0LHRoaXMuX3BlZWsuc291cmNlU3Bhbi5lbmQsdC5zb3VyY2VTcGFuLmZ1bGxTdGFydCk7dGhpcy5fYWRkVG9QYXJlbnQobmV3IE5fKGUucGFydHNbMF0saS5wYXJ0c1swXSxyLG8sZS5zb3VyY2VTcGFuKSksdGhpcy5fYWR2YW5jZSgpfV9wYXJzZUV4cGFuc2lvbkNhc2UoKXtsZXQgdD10aGlzLl9hZHZhbmNlKCk7aWYoMjEhPT10aGlzLl9wZWVrLnR5cGUpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKG51bGwsdGhpcy5fcGVlay5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd7Jy4iKSksbnVsbDtsZXQgZT10aGlzLl9hZHZhbmNlKCksaT10aGlzLl9jb2xsZWN0RXhwYW5zaW9uRXhwVG9rZW5zKGUpO2lmKCFpKXJldHVybiBudWxsO2xldCByPXRoaXMuX2FkdmFuY2UoKTtpLnB1c2goe3R5cGU6MjQscGFydHM6W10sc291cmNlU3BhbjpyLnNvdXJjZVNwYW59KTtsZXQgbz1uZXcgWEMoaSx0aGlzLmdldFRhZ0RlZmluaXRpb24pO2lmKG8uYnVpbGQoKSxvLmVycm9ycy5sZW5ndGg+MClyZXR1cm4gdGhpcy5lcnJvcnM9dGhpcy5lcnJvcnMuY29uY2F0KG8uZXJyb3JzKSxudWxsO2xldCBzPW5ldyBHbyh0LnNvdXJjZVNwYW4uc3RhcnQsci5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSxhPW5ldyBHbyhlLnNvdXJjZVNwYW4uc3RhcnQsci5zb3VyY2VTcGFuLmVuZCxlLnNvdXJjZVNwYW4uZnVsbFN0YXJ0KTtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy52YWx1ZT10LHRoaXMuZXhwcmVzc2lvbj1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMudmFsdWVTb3VyY2VTcGFuPXIsdGhpcy5leHBTb3VyY2VTcGFuPW99dmlzaXQodCxlKXtyZXR1cm4gdC52aXNpdEV4cGFuc2lvbkNhc2UodGhpcyxlKX19KHQucGFydHNbMF0sby5yb290Tm9kZXMscyx0LnNvdXJjZVNwYW4sYSl9X2NvbGxlY3RFeHBhbnNpb25FeHBUb2tlbnModCl7bGV0IGU9W10saT1bMjFdO2Zvcig7Oyl7aWYoKDE5PT09dGhpcy5fcGVlay50eXBlfHwyMT09PXRoaXMuX3BlZWsudHlwZSkmJmkucHVzaCh0aGlzLl9wZWVrLnR5cGUpLDIyPT09dGhpcy5fcGVlay50eXBlKXtpZighc1EoaSwyMSkpcmV0dXJuIHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKG51bGwsdC5zb3VyY2VTcGFuLCJJbnZhbGlkIElDVSBtZXNzYWdlLiBNaXNzaW5nICd9Jy4iKSksbnVsbDtpZihpLnBvcCgpLDA9PT1pLmxlbmd0aClyZXR1cm4gZX1pZigyMz09PXRoaXMuX3BlZWsudHlwZSl7aWYoIXNRKGksMTkpKXJldHVybiB0aGlzLmVycm9ycy5wdXNoKG9sLmNyZWF0ZShudWxsLHQuc291cmNlU3BhbiwiSW52YWxpZCBJQ1UgbWVzc2FnZS4gTWlzc2luZyAnfScuIikpLG51bGw7aS5wb3AoKX1pZigyND09PXRoaXMuX3BlZWsudHlwZSlyZXR1cm4gdGhpcy5lcnJvcnMucHVzaChvbC5jcmVhdGUobnVsbCx0LnNvdXJjZVNwYW4sIkludmFsaWQgSUNVIG1lc3NhZ2UuIE1pc3NpbmcgJ30nLiIpKSxudWxsO2UucHVzaCh0aGlzLl9hZHZhbmNlKCkpfX1fY29uc3VtZVRleHQodCl7bGV0IGU9W3RdLGk9dC5zb3VyY2VTcGFuLHI9dC5wYXJ0c1swXTtpZihyLmxlbmd0aD4wJiYiXG4iPT09clswXSl7bGV0IG89dGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpO251bGwhPW8mJjA9PT1vLmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKG8ubmFtZSkuaWdub3JlRmlyc3RMZiYmKHI9ci5zdWJzdHJpbmcoMSksZVswXT17dHlwZTp0LnR5cGUsc291cmNlU3Bhbjp0LnNvdXJjZVNwYW4scGFydHM6W3JdfSl9Zm9yKDs4PT09dGhpcy5fcGVlay50eXBlfHw1PT09dGhpcy5fcGVlay50eXBlfHw5PT09dGhpcy5fcGVlay50eXBlOyl0PXRoaXMuX2FkdmFuY2UoKSxlLnB1c2godCkscis9OD09PXQudHlwZT90LnBhcnRzLmpvaW4oIiIpLnJlcGxhY2UoLyYoW147XSspOy9nLGFRKTo5PT09dC50eXBlP3QucGFydHNbMF06dC5wYXJ0cy5qb2luKCIiKTtyLmxlbmd0aD4wJiZ0aGlzLl9hZGRUb1BhcmVudChuZXcgRl8ocixuZXcgR28oaS5zdGFydCx0LnNvdXJjZVNwYW4uZW5kLGkuZnVsbFN0YXJ0LGkuZGV0YWlscyksZSkpfV9jbG9zZVZvaWRFbGVtZW50KCl7bGV0IHQ9dGhpcy5fZ2V0UGFyZW50RWxlbWVudCgpO3QmJnRoaXMuZ2V0VGFnRGVmaW5pdGlvbih0Lm5hbWUpLmlzVm9pZCYmdGhpcy5fZWxlbWVudFN0YWNrLnBvcCgpfV9jb25zdW1lU3RhcnRUYWcodCl7bGV0W2UsaV09dC5wYXJ0cyxyPVtdO2Zvcig7MTQ9PT10aGlzLl9wZWVrLnR5cGU7KXIucHVzaCh0aGlzLl9jb25zdW1lQXR0cih0aGlzLl9hZHZhbmNlKCkpKTtsZXQgbz10aGlzLl9nZXRFbGVtZW50RnVsbE5hbWUoZSxpLHRoaXMuX2dldFBhcmVudEVsZW1lbnQoKSkscz0hMTtpZigyPT09dGhpcy5fcGVlay50eXBlKXt0aGlzLl9hZHZhbmNlKCkscz0hMDtsZXQgZD10aGlzLmdldFRhZ0RlZmluaXRpb24obyk7ZC5jYW5TZWxmQ2xvc2V8fG51bGwhPT1kWChvKXx8ZC5pc1ZvaWR8fHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKG8sdC5zb3VyY2VTcGFuLGBPbmx5IHZvaWQgYW5kIGZvcmVpZ24gZWxlbWVudHMgY2FuIGJlIHNlbGYgY2xvc2VkICIke3QucGFydHNbMV19ImApKX1lbHNlIDE9PT10aGlzLl9wZWVrLnR5cGUmJih0aGlzLl9hZHZhbmNlKCkscz0hMSk7bGV0IGE9dGhpcy5fcGVlay5zb3VyY2VTcGFuLmZ1bGxTdGFydCxsPW5ldyBHbyh0LnNvdXJjZVNwYW4uc3RhcnQsYSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSxjPW5ldyBHbyh0LnNvdXJjZVNwYW4uc3RhcnQsYSx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0KSx1PW5ldyBxQyhvLHIsW10sbCxjLHZvaWQgMCk7dGhpcy5fcHVzaEVsZW1lbnQodSkscz90aGlzLl9wb3BFbGVtZW50KG8sbCk6ND09PXQudHlwZSYmKHRoaXMuX3BvcEVsZW1lbnQobyxudWxsKSx0aGlzLmVycm9ycy5wdXNoKG9sLmNyZWF0ZShvLGwsYE9wZW5pbmcgdGFnICIke299IiBub3QgdGVybWluYXRlZC5gKSkpfV9wdXNoRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7ZSYmdGhpcy5nZXRUYWdEZWZpbml0aW9uKGUubmFtZSkuaXNDbG9zZWRCeUNoaWxkKHQubmFtZSkmJnRoaXMuX2VsZW1lbnRTdGFjay5wb3AoKSx0aGlzLl9hZGRUb1BhcmVudCh0KSx0aGlzLl9lbGVtZW50U3RhY2sucHVzaCh0KX1fY29uc3VtZUVuZFRhZyh0KXtsZXQgZT10aGlzLl9nZXRFbGVtZW50RnVsbE5hbWUodC5wYXJ0c1swXSx0LnBhcnRzWzFdLHRoaXMuX2dldFBhcmVudEVsZW1lbnQoKSk7dGhpcy5nZXRUYWdEZWZpbml0aW9uKGUpLmlzVm9pZD90aGlzLmVycm9ycy5wdXNoKG9sLmNyZWF0ZShlLHQuc291cmNlU3BhbixgVm9pZCBlbGVtZW50cyBkbyBub3QgaGF2ZSBlbmQgdGFncyAiJHt0LnBhcnRzWzFdfSJgKSk6dGhpcy5fcG9wRWxlbWVudChlLHQuc291cmNlU3Bhbil8fHRoaXMuZXJyb3JzLnB1c2gob2wuY3JlYXRlKGUsdC5zb3VyY2VTcGFuLGBVbmV4cGVjdGVkIGNsb3NpbmcgdGFnICIke2V9Ii4gSXQgbWF5IGhhcHBlbiB3aGVuIHRoZSB0YWcgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQgYnkgYW5vdGhlciB0YWcuIEZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zeW50YXguaHRtbCNjbG9zaW5nLWVsZW1lbnRzLXRoYXQtaGF2ZS1pbXBsaWVkLWVuZC10YWdzYCkpfV9wb3BFbGVtZW50KHQsZSl7bGV0IGk9ITE7Zm9yKGxldCByPXRoaXMuX2VsZW1lbnRTdGFjay5sZW5ndGgtMTtyPj0wO3ItLSl7bGV0IG89dGhpcy5fZWxlbWVudFN0YWNrW3JdO2lmKG8ubmFtZT09PXQpcmV0dXJuIG8uZW5kU291cmNlU3Bhbj1lLG8uc291cmNlU3Bhbi5lbmQ9bnVsbCE9PWU/ZS5lbmQ6by5zb3VyY2VTcGFuLmVuZCx0aGlzLl9lbGVtZW50U3RhY2suc3BsaWNlKHIsdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC1yKSwhaTt0aGlzLmdldFRhZ0RlZmluaXRpb24oby5uYW1lKS5jbG9zZWRCeVBhcmVudHx8KGk9ITApfXJldHVybiExfV9jb25zdW1lQXR0cih0KXtsZXQgZT13Qih0LnBhcnRzWzBdLHQucGFydHNbMV0pLGk9dC5zb3VyY2VTcGFuLmVuZDsxNT09PXRoaXMuX3BlZWsudHlwZSYmdGhpcy5fYWR2YW5jZSgpO2xldCBzLGEscj0iIixvPVtdO2lmKDE2PT09dGhpcy5fcGVlay50eXBlKWZvcihzPXRoaXMuX3BlZWsuc291cmNlU3BhbixhPXRoaXMuX3BlZWsuc291cmNlU3Bhbi5lbmQ7MTY9PT10aGlzLl9wZWVrLnR5cGV8fDE3PT09dGhpcy5fcGVlay50eXBlfHw5PT09dGhpcy5fcGVlay50eXBlOyl7bGV0IHU9dGhpcy5fYWR2YW5jZSgpO28ucHVzaCh1KSxyKz0xNz09PXUudHlwZT91LnBhcnRzLmpvaW4oIiIpLnJlcGxhY2UoLyYoW147XSspOy9nLGFRKTo5PT09dS50eXBlP3UucGFydHNbMF06dS5wYXJ0cy5qb2luKCIiKSxhPWk9dS5zb3VyY2VTcGFuLmVuZH0xNT09PXRoaXMuX3BlZWsudHlwZSYmKGk9dGhpcy5fYWR2YW5jZSgpLnNvdXJjZVNwYW4uZW5kKTtsZXQgYz1zJiZhJiZuZXcgR28ocy5zdGFydCxhLHMuZnVsbFN0YXJ0KTtyZXR1cm4gbmV3IGhWKGUscixuZXcgR28odC5zb3VyY2VTcGFuLnN0YXJ0LGksdC5zb3VyY2VTcGFuLmZ1bGxTdGFydCksdC5zb3VyY2VTcGFuLGMsby5sZW5ndGg+MD9vOnZvaWQgMCx2b2lkIDApfV9nZXRQYXJlbnRFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTdGFjay5sZW5ndGg+MD90aGlzLl9lbGVtZW50U3RhY2tbdGhpcy5fZWxlbWVudFN0YWNrLmxlbmd0aC0xXTpudWxsfV9hZGRUb1BhcmVudCh0KXtsZXQgZT10aGlzLl9nZXRQYXJlbnRFbGVtZW50KCk7bnVsbCE9ZT9lLmNoaWxkcmVuLnB1c2godCk6dGhpcy5yb290Tm9kZXMucHVzaCh0KX1fZ2V0RWxlbWVudEZ1bGxOYW1lKHQsZSxpKXtpZigiIj09PXQmJiIiPT09KHQ9dGhpcy5nZXRUYWdEZWZpbml0aW9uKGUpLmltcGxpY2l0TmFtZXNwYWNlUHJlZml4fHwiIikmJm51bGwhPWkpe2xldCByPUtkKGkubmFtZSlbMV07dGhpcy5nZXRUYWdEZWZpbml0aW9uKHIpLnByZXZlbnROYW1lc3BhY2VJbmhlcml0YW5jZXx8KHQ9ZFgoaS5uYW1lKSl9cmV0dXJuIHdCKHQsZSl9fTtmdW5jdGlvbiBzUShuLHQpe3JldHVybiBuLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdPT09dH1mdW5jdGlvbiBhUShuLHQpe3JldHVybiB2b2lkIDAhPT1DRFt0XT9DRFt0XXx8bjovXiN4W2EtZjAtOV0rJC9pLnRlc3QodCk/U3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zbGljZSgyKSwxNikpOi9eI1xkKyQvLnRlc3QodCk/U3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zbGljZSgxKSwxMCkpOm59dmFyIFhULF9WPWNsYXNzIGV4dGVuZHMgZ1Z7Y29uc3RydWN0b3IoKXtzdXBlcihGVil9cGFyc2UodCxlLGkpe3JldHVybiBzdXBlci5wYXJzZSh0LGUsaSl9fSxnSz0ibmdQcmVzZXJ2ZVdoaXRlc3BhY2VzIixsRWU9bmV3IFNldChbInByZSIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJzY3JpcHQiLCJzdHlsZSJdKSxfSz0iIFxmXG5cclx0XHZcdTE2ODBcdTE4MGVcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmIixjRWU9bmV3IFJlZ0V4cChgW14ke19LfV1gKSx1RWU9bmV3IFJlZ0V4cChgWyR7X0t9XXsyLH1gLCJnIik7ZnVuY3Rpb24gdksobil7cmV0dXJuIG4ucmVwbGFjZShuZXcgUmVnRXhwKCJcdWU1MDAiLCJnIiksIiAiKX1mdW5jdGlvbiB5SyhuKXtyZXR1cm4gdksobikucmVwbGFjZSh1RWUsIiAiKX1mdW5jdGlvbiB3RChuLHQ9ITEpe3JldHVybiBxbChPYmplY3Qua2V5cyhuKS5tYXAoZT0+KHtrZXk6ZSxxdW90ZWQ6dCx2YWx1ZTpuW2VdfSkpKX1mdW5jdGlvbiBsUSgpe3JldHVybiBYVHx8KFhUPXt9LFVUKGlvLkhUTUwsWyJpZnJhbWV8c3JjZG9jIiwiKnxpbm5lckhUTUwiLCIqfG91dGVySFRNTCJdKSxVVChpby5TVFlMRSxbIip8c3R5bGUiXSksVVQoaW8uVVJMLFsiKnxmb3JtQWN0aW9uIiwiYXJlYXxocmVmIiwiYXJlYXxwaW5nIiwiYXVkaW98c3JjIiwiYXxocmVmIiwiYXxwaW5nIiwiYmxvY2txdW90ZXxjaXRlIiwiYm9keXxiYWNrZ3JvdW5kIiwiZGVsfGNpdGUiLCJmb3JtfGFjdGlvbiIsImltZ3xzcmMiLCJpbnB1dHxzcmMiLCJpbnN8Y2l0ZSIsInF8Y2l0ZSIsInNvdXJjZXxzcmMiLCJ0cmFja3xzcmMiLCJ2aWRlb3xwb3N0ZXIiLCJ2aWRlb3xzcmMiXSksVVQoaW8uUkVTT1VSQ0VfVVJMLFsiYXBwbGV0fGNvZGUiLCJhcHBsZXR8Y29kZWJhc2UiLCJiYXNlfGhyZWYiLCJlbWJlZHxzcmMiLCJmcmFtZXxzcmMiLCJoZWFkfHByb2ZpbGUiLCJodG1sfG1hbmlmZXN0IiwiaWZyYW1lfHNyYyIsImxpbmt8aHJlZiIsIm1lZGlhfHNyYyIsIm9iamVjdHxjb2RlYmFzZSIsIm9iamVjdHxkYXRhIiwic2NyaXB0fHNyYyJdKSksWFR9ZnVuY3Rpb24gVVQobix0KXtmb3IobGV0IGUgb2YgdClYVFtlLnRvTG93ZXJDYXNlKCldPW59dmFyIHlWPWNsYXNze30sdkVlPVsiW0VsZW1lbnRdfHRleHRDb250ZW50LCVjbGFzc0xpc3QsY2xhc3NOYW1lLGlkLGlubmVySFRNTCwqYmVmb3JlY29weSwqYmVmb3JlY3V0LCpiZWZvcmVwYXN0ZSwqY29weSwqY3V0LCpwYXN0ZSwqc2VhcmNoLCpzZWxlY3RzdGFydCwqd2Via2l0ZnVsbHNjcmVlbmNoYW5nZSwqd2Via2l0ZnVsbHNjcmVlbmVycm9yLCp3aGVlbCxvdXRlckhUTUwsI3Njcm9sbExlZnQsI3Njcm9sbFRvcCxzbG90LCptZXNzYWdlLCptb3pmdWxsc2NyZWVuY2hhbmdlLCptb3pmdWxsc2NyZWVuZXJyb3IsKm1venBvaW50ZXJsb2NrY2hhbmdlLCptb3pwb2ludGVybG9ja2Vycm9yLCp3ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yLCp3ZWJnbGNvbnRleHRsb3N0LCp3ZWJnbGNvbnRleHRyZXN0b3JlZCIsIltIVE1MRWxlbWVudF1eW0VsZW1lbnRdfGFjY2Vzc0tleSxjb250ZW50RWRpdGFibGUsZGlyLCFkcmFnZ2FibGUsIWhpZGRlbixpbm5lclRleHQsbGFuZywqYWJvcnQsKmF1eGNsaWNrLCpibHVyLCpjYW5jZWwsKmNhbnBsYXksKmNhbnBsYXl0aHJvdWdoLCpjaGFuZ2UsKmNsaWNrLCpjbG9zZSwqY29udGV4dG1lbnUsKmN1ZWNoYW5nZSwqZGJsY2xpY2ssKmRyYWcsKmRyYWdlbmQsKmRyYWdlbnRlciwqZHJhZ2xlYXZlLCpkcmFnb3ZlciwqZHJhZ3N0YXJ0LCpkcm9wLCpkdXJhdGlvbmNoYW5nZSwqZW1wdGllZCwqZW5kZWQsKmVycm9yLCpmb2N1cywqZ290cG9pbnRlcmNhcHR1cmUsKmlucHV0LCppbnZhbGlkLCprZXlkb3duLCprZXlwcmVzcywqa2V5dXAsKmxvYWQsKmxvYWRlZGRhdGEsKmxvYWRlZG1ldGFkYXRhLCpsb2Fkc3RhcnQsKmxvc3Rwb2ludGVyY2FwdHVyZSwqbW91c2Vkb3duLCptb3VzZWVudGVyLCptb3VzZWxlYXZlLCptb3VzZW1vdmUsKm1vdXNlb3V0LCptb3VzZW92ZXIsKm1vdXNldXAsKm1vdXNld2hlZWwsKnBhdXNlLCpwbGF5LCpwbGF5aW5nLCpwb2ludGVyY2FuY2VsLCpwb2ludGVyZG93biwqcG9pbnRlcmVudGVyLCpwb2ludGVybGVhdmUsKnBvaW50ZXJtb3ZlLCpwb2ludGVyb3V0LCpwb2ludGVyb3ZlciwqcG9pbnRlcnVwLCpwcm9ncmVzcywqcmF0ZWNoYW5nZSwqcmVzZXQsKnJlc2l6ZSwqc2Nyb2xsLCpzZWVrZWQsKnNlZWtpbmcsKnNlbGVjdCwqc2hvdywqc3RhbGxlZCwqc3VibWl0LCpzdXNwZW5kLCp0aW1ldXBkYXRlLCp0b2dnbGUsKnZvbHVtZWNoYW5nZSwqd2FpdGluZyxvdXRlclRleHQsIXNwZWxsY2hlY2ssJXN0eWxlLCN0YWJJbmRleCx0aXRsZSwhdHJhbnNsYXRlIiwiYWJicixhZGRyZXNzLGFydGljbGUsYXNpZGUsYixiZGksYmRvLGNpdGUsY29kZSxkZCxkZm4sZHQsZW0sZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixpLGtiZCxtYWluLG1hcmssbmF2LG5vc2NyaXB0LHJiLHJwLHJ0LHJ0YyxydWJ5LHMsc2FtcCxzZWN0aW9uLHNtYWxsLHN0cm9uZyxzdWIsc3VwLHUsdmFyLHdicl5bSFRNTEVsZW1lbnRdfGFjY2Vzc0tleSxjb250ZW50RWRpdGFibGUsZGlyLCFkcmFnZ2FibGUsIWhpZGRlbixpbm5lclRleHQsbGFuZywqYWJvcnQsKmF1eGNsaWNrLCpibHVyLCpjYW5jZWwsKmNhbnBsYXksKmNhbnBsYXl0aHJvdWdoLCpjaGFuZ2UsKmNsaWNrLCpjbG9zZSwqY29udGV4dG1lbnUsKmN1ZWNoYW5nZSwqZGJsY2xpY2ssKmRyYWcsKmRyYWdlbmQsKmRyYWdlbnRlciwqZHJhZ2xlYXZlLCpkcmFnb3ZlciwqZHJhZ3N0YXJ0LCpkcm9wLCpkdXJhdGlvbmNoYW5nZSwqZW1wdGllZCwqZW5kZWQsKmVycm9yLCpmb2N1cywqZ290cG9pbnRlcmNhcHR1cmUsKmlucHV0LCppbnZhbGlkLCprZXlkb3duLCprZXlwcmVzcywqa2V5dXAsKmxvYWQsKmxvYWRlZGRhdGEsKmxvYWRlZG1ldGFkYXRhLCpsb2Fkc3RhcnQsKmxvc3Rwb2ludGVyY2FwdHVyZSwqbW91c2Vkb3duLCptb3VzZWVudGVyLCptb3VzZWxlYXZlLCptb3VzZW1vdmUsKm1vdXNlb3V0LCptb3VzZW92ZXIsKm1vdXNldXAsKm1vdXNld2hlZWwsKnBhdXNlLCpwbGF5LCpwbGF5aW5nLCpwb2ludGVyY2FuY2VsLCpwb2ludGVyZG93biwqcG9pbnRlcmVudGVyLCpwb2ludGVybGVhdmUsKnBvaW50ZXJtb3ZlLCpwb2ludGVyb3V0LCpwb2ludGVyb3ZlciwqcG9pbnRlcnVwLCpwcm9ncmVzcywqcmF0ZWNoYW5nZSwqcmVzZXQsKnJlc2l6ZSwqc2Nyb2xsLCpzZWVrZWQsKnNlZWtpbmcsKnNlbGVjdCwqc2hvdywqc3RhbGxlZCwqc3VibWl0LCpzdXNwZW5kLCp0aW1ldXBkYXRlLCp0b2dnbGUsKnZvbHVtZWNoYW5nZSwqd2FpdGluZyxvdXRlclRleHQsIXNwZWxsY2hlY2ssJXN0eWxlLCN0YWJJbmRleCx0aXRsZSwhdHJhbnNsYXRlIiwibWVkaWFeW0hUTUxFbGVtZW50XXwhYXV0b3BsYXksIWNvbnRyb2xzLCVjb250cm9sc0xpc3QsJWNyb3NzT3JpZ2luLCNjdXJyZW50VGltZSwhZGVmYXVsdE11dGVkLCNkZWZhdWx0UGxheWJhY2tSYXRlLCFkaXNhYmxlUmVtb3RlUGxheWJhY2ssIWxvb3AsIW11dGVkLCplbmNyeXB0ZWQsKndhaXRpbmdmb3JrZXksI3BsYXliYWNrUmF0ZSxwcmVsb2FkLHNyYywlc3JjT2JqZWN0LCN2b2x1bWUiLCI6c3ZnOl5bSFRNTEVsZW1lbnRdfCphYm9ydCwqYXV4Y2xpY2ssKmJsdXIsKmNhbmNlbCwqY2FucGxheSwqY2FucGxheXRocm91Z2gsKmNoYW5nZSwqY2xpY2ssKmNsb3NlLCpjb250ZXh0bWVudSwqY3VlY2hhbmdlLCpkYmxjbGljaywqZHJhZywqZHJhZ2VuZCwqZHJhZ2VudGVyLCpkcmFnbGVhdmUsKmRyYWdvdmVyLCpkcmFnc3RhcnQsKmRyb3AsKmR1cmF0aW9uY2hhbmdlLCplbXB0aWVkLCplbmRlZCwqZXJyb3IsKmZvY3VzLCpnb3Rwb2ludGVyY2FwdHVyZSwqaW5wdXQsKmludmFsaWQsKmtleWRvd24sKmtleXByZXNzLCprZXl1cCwqbG9hZCwqbG9hZGVkZGF0YSwqbG9hZGVkbWV0YWRhdGEsKmxvYWRzdGFydCwqbG9zdHBvaW50ZXJjYXB0dXJlLCptb3VzZWRvd24sKm1vdXNlZW50ZXIsKm1vdXNlbGVhdmUsKm1vdXNlbW92ZSwqbW91c2VvdXQsKm1vdXNlb3ZlciwqbW91c2V1cCwqbW91c2V3aGVlbCwqcGF1c2UsKnBsYXksKnBsYXlpbmcsKnBvaW50ZXJjYW5jZWwsKnBvaW50ZXJkb3duLCpwb2ludGVyZW50ZXIsKnBvaW50ZXJsZWF2ZSwqcG9pbnRlcm1vdmUsKnBvaW50ZXJvdXQsKnBvaW50ZXJvdmVyLCpwb2ludGVydXAsKnByb2dyZXNzLCpyYXRlY2hhbmdlLCpyZXNldCwqcmVzaXplLCpzY3JvbGwsKnNlZWtlZCwqc2Vla2luZywqc2VsZWN0LCpzaG93LCpzdGFsbGVkLCpzdWJtaXQsKnN1c3BlbmQsKnRpbWV1cGRhdGUsKnRvZ2dsZSwqdm9sdW1lY2hhbmdlLCp3YWl0aW5nLCVzdHlsZSwjdGFiSW5kZXgiLCI6c3ZnOmdyYXBoaWNzXjpzdmc6fCIsIjpzdmc6YW5pbWF0aW9uXjpzdmc6fCpiZWdpbiwqZW5kLCpyZXBlYXQiLCI6c3ZnOmdlb21ldHJ5Xjpzdmc6fCIsIjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbl46c3ZnOnwiLCI6c3ZnOmdyYWRpZW50Xjpzdmc6fCIsIjpzdmc6dGV4dENvbnRlbnReOnN2ZzpncmFwaGljc3wiLCI6c3ZnOnRleHRQb3NpdGlvbmluZ146c3ZnOnRleHRDb250ZW50fCIsImFeW0hUTUxFbGVtZW50XXxjaGFyc2V0LGNvb3Jkcyxkb3dubG9hZCxoYXNoLGhvc3QsaG9zdG5hbWUsaHJlZixocmVmbGFuZyxuYW1lLHBhc3N3b3JkLHBhdGhuYW1lLHBpbmcscG9ydCxwcm90b2NvbCxyZWZlcnJlclBvbGljeSxyZWwscmV2LHNlYXJjaCxzaGFwZSx0YXJnZXQsdGV4dCx0eXBlLHVzZXJuYW1lIiwiYXJlYV5bSFRNTEVsZW1lbnRdfGFsdCxjb29yZHMsZG93bmxvYWQsaGFzaCxob3N0LGhvc3RuYW1lLGhyZWYsIW5vSHJlZixwYXNzd29yZCxwYXRobmFtZSxwaW5nLHBvcnQscHJvdG9jb2wscmVmZXJyZXJQb2xpY3kscmVsLHNlYXJjaCxzaGFwZSx0YXJnZXQsdXNlcm5hbWUiLCJhdWRpb15tZWRpYXwiLCJicl5bSFRNTEVsZW1lbnRdfGNsZWFyIiwiYmFzZV5bSFRNTEVsZW1lbnRdfGhyZWYsdGFyZ2V0IiwiYm9keV5bSFRNTEVsZW1lbnRdfGFMaW5rLGJhY2tncm91bmQsYmdDb2xvcixsaW5rLCpiZWZvcmV1bmxvYWQsKmJsdXIsKmVycm9yLCpmb2N1cywqaGFzaGNoYW5nZSwqbGFuZ3VhZ2VjaGFuZ2UsKmxvYWQsKm1lc3NhZ2UsKm9mZmxpbmUsKm9ubGluZSwqcGFnZWhpZGUsKnBhZ2VzaG93LCpwb3BzdGF0ZSwqcmVqZWN0aW9uaGFuZGxlZCwqcmVzaXplLCpzY3JvbGwsKnN0b3JhZ2UsKnVuaGFuZGxlZHJlamVjdGlvbiwqdW5sb2FkLHRleHQsdkxpbmsiLCJidXR0b25eW0hUTUxFbGVtZW50XXwhYXV0b2ZvY3VzLCFkaXNhYmxlZCxmb3JtQWN0aW9uLGZvcm1FbmN0eXBlLGZvcm1NZXRob2QsIWZvcm1Ob1ZhbGlkYXRlLGZvcm1UYXJnZXQsbmFtZSx0eXBlLHZhbHVlIiwiY2FudmFzXltIVE1MRWxlbWVudF18I2hlaWdodCwjd2lkdGgiLCJjb250ZW50XltIVE1MRWxlbWVudF18c2VsZWN0IiwiZGxeW0hUTUxFbGVtZW50XXwhY29tcGFjdCIsImRhdGFsaXN0XltIVE1MRWxlbWVudF18IiwiZGV0YWlsc15bSFRNTEVsZW1lbnRdfCFvcGVuIiwiZGlhbG9nXltIVE1MRWxlbWVudF18IW9wZW4scmV0dXJuVmFsdWUiLCJkaXJeW0hUTUxFbGVtZW50XXwhY29tcGFjdCIsImRpdl5bSFRNTEVsZW1lbnRdfGFsaWduIiwiZW1iZWReW0hUTUxFbGVtZW50XXxhbGlnbixoZWlnaHQsbmFtZSxzcmMsdHlwZSx3aWR0aCIsImZpZWxkc2V0XltIVE1MRWxlbWVudF18IWRpc2FibGVkLG5hbWUiLCJmb250XltIVE1MRWxlbWVudF18Y29sb3IsZmFjZSxzaXplIiwiZm9ybV5bSFRNTEVsZW1lbnRdfGFjY2VwdENoYXJzZXQsYWN0aW9uLGF1dG9jb21wbGV0ZSxlbmNvZGluZyxlbmN0eXBlLG1ldGhvZCxuYW1lLCFub1ZhbGlkYXRlLHRhcmdldCIsImZyYW1lXltIVE1MRWxlbWVudF18ZnJhbWVCb3JkZXIsbG9uZ0Rlc2MsbWFyZ2luSGVpZ2h0LG1hcmdpbldpZHRoLG5hbWUsIW5vUmVzaXplLHNjcm9sbGluZyxzcmMiLCJmcmFtZXNldF5bSFRNTEVsZW1lbnRdfGNvbHMsKmJlZm9yZXVubG9hZCwqYmx1ciwqZXJyb3IsKmZvY3VzLCpoYXNoY2hhbmdlLCpsYW5ndWFnZWNoYW5nZSwqbG9hZCwqbWVzc2FnZSwqb2ZmbGluZSwqb25saW5lLCpwYWdlaGlkZSwqcGFnZXNob3csKnBvcHN0YXRlLCpyZWplY3Rpb25oYW5kbGVkLCpyZXNpemUsKnNjcm9sbCwqc3RvcmFnZSwqdW5oYW5kbGVkcmVqZWN0aW9uLCp1bmxvYWQscm93cyIsImhyXltIVE1MRWxlbWVudF18YWxpZ24sY29sb3IsIW5vU2hhZGUsc2l6ZSx3aWR0aCIsImhlYWReW0hUTUxFbGVtZW50XXwiLCJoMSxoMixoMyxoNCxoNSxoNl5bSFRNTEVsZW1lbnRdfGFsaWduIiwiaHRtbF5bSFRNTEVsZW1lbnRdfHZlcnNpb24iLCJpZnJhbWVeW0hUTUxFbGVtZW50XXxhbGlnbiwhYWxsb3dGdWxsc2NyZWVuLGZyYW1lQm9yZGVyLGhlaWdodCxsb25nRGVzYyxtYXJnaW5IZWlnaHQsbWFyZ2luV2lkdGgsbmFtZSxyZWZlcnJlclBvbGljeSwlc2FuZGJveCxzY3JvbGxpbmcsc3JjLHNyY2RvYyx3aWR0aCIsImltZ15bSFRNTEVsZW1lbnRdfGFsaWduLGFsdCxib3JkZXIsJWNyb3NzT3JpZ2luLCNoZWlnaHQsI2hzcGFjZSwhaXNNYXAsbG9uZ0Rlc2MsbG93c3JjLG5hbWUscmVmZXJyZXJQb2xpY3ksc2l6ZXMsc3JjLHNyY3NldCx1c2VNYXAsI3ZzcGFjZSwjd2lkdGgiLCJpbnB1dF5bSFRNTEVsZW1lbnRdfGFjY2VwdCxhbGlnbixhbHQsYXV0b2NhcGl0YWxpemUsYXV0b2NvbXBsZXRlLCFhdXRvZm9jdXMsIWNoZWNrZWQsIWRlZmF1bHRDaGVja2VkLGRlZmF1bHRWYWx1ZSxkaXJOYW1lLCFkaXNhYmxlZCwlZmlsZXMsZm9ybUFjdGlvbixmb3JtRW5jdHlwZSxmb3JtTWV0aG9kLCFmb3JtTm9WYWxpZGF0ZSxmb3JtVGFyZ2V0LCNoZWlnaHQsIWluY3JlbWVudGFsLCFpbmRldGVybWluYXRlLG1heCwjbWF4TGVuZ3RoLG1pbiwjbWluTGVuZ3RoLCFtdWx0aXBsZSxuYW1lLHBhdHRlcm4scGxhY2Vob2xkZXIsIXJlYWRPbmx5LCFyZXF1aXJlZCxzZWxlY3Rpb25EaXJlY3Rpb24sI3NlbGVjdGlvbkVuZCwjc2VsZWN0aW9uU3RhcnQsI3NpemUsc3JjLHN0ZXAsdHlwZSx1c2VNYXAsdmFsdWUsJXZhbHVlQXNEYXRlLCN2YWx1ZUFzTnVtYmVyLCN3aWR0aCIsImxpXltIVE1MRWxlbWVudF18dHlwZSwjdmFsdWUiLCJsYWJlbF5bSFRNTEVsZW1lbnRdfGh0bWxGb3IiLCJsZWdlbmReW0hUTUxFbGVtZW50XXxhbGlnbiIsImxpbmteW0hUTUxFbGVtZW50XXxhcyxjaGFyc2V0LCVjcm9zc09yaWdpbiwhZGlzYWJsZWQsaHJlZixocmVmbGFuZyxpbnRlZ3JpdHksbWVkaWEscmVmZXJyZXJQb2xpY3kscmVsLCVyZWxMaXN0LHJldiwlc2l6ZXMsdGFyZ2V0LHR5cGUiLCJtYXBeW0hUTUxFbGVtZW50XXxuYW1lIiwibWFycXVlZV5bSFRNTEVsZW1lbnRdfGJlaGF2aW9yLGJnQ29sb3IsZGlyZWN0aW9uLGhlaWdodCwjaHNwYWNlLCNsb29wLCNzY3JvbGxBbW91bnQsI3Njcm9sbERlbGF5LCF0cnVlU3BlZWQsI3ZzcGFjZSx3aWR0aCIsIm1lbnVeW0hUTUxFbGVtZW50XXwhY29tcGFjdCIsIm1ldGFeW0hUTUxFbGVtZW50XXxjb250ZW50LGh0dHBFcXVpdixuYW1lLHNjaGVtZSIsIm1ldGVyXltIVE1MRWxlbWVudF18I2hpZ2gsI2xvdywjbWF4LCNtaW4sI29wdGltdW0sI3ZhbHVlIiwiaW5zLGRlbF5bSFRNTEVsZW1lbnRdfGNpdGUsZGF0ZVRpbWUiLCJvbF5bSFRNTEVsZW1lbnRdfCFjb21wYWN0LCFyZXZlcnNlZCwjc3RhcnQsdHlwZSIsIm9iamVjdF5bSFRNTEVsZW1lbnRdfGFsaWduLGFyY2hpdmUsYm9yZGVyLGNvZGUsY29kZUJhc2UsY29kZVR5cGUsZGF0YSwhZGVjbGFyZSxoZWlnaHQsI2hzcGFjZSxuYW1lLHN0YW5kYnksdHlwZSx1c2VNYXAsI3ZzcGFjZSx3aWR0aCIsIm9wdGdyb3VwXltIVE1MRWxlbWVudF18IWRpc2FibGVkLGxhYmVsIiwib3B0aW9uXltIVE1MRWxlbWVudF18IWRlZmF1bHRTZWxlY3RlZCwhZGlzYWJsZWQsbGFiZWwsIXNlbGVjdGVkLHRleHQsdmFsdWUiLCJvdXRwdXReW0hUTUxFbGVtZW50XXxkZWZhdWx0VmFsdWUsJWh0bWxGb3IsbmFtZSx2YWx1ZSIsInBeW0hUTUxFbGVtZW50XXxhbGlnbiIsInBhcmFtXltIVE1MRWxlbWVudF18bmFtZSx0eXBlLHZhbHVlLHZhbHVlVHlwZSIsInBpY3R1cmVeW0hUTUxFbGVtZW50XXwiLCJwcmVeW0hUTUxFbGVtZW50XXwjd2lkdGgiLCJwcm9ncmVzc15bSFRNTEVsZW1lbnRdfCNtYXgsI3ZhbHVlIiwicSxibG9ja3F1b3RlLGNpdGVeW0hUTUxFbGVtZW50XXwiLCJzY3JpcHReW0hUTUxFbGVtZW50XXwhYXN5bmMsY2hhcnNldCwlY3Jvc3NPcmlnaW4sIWRlZmVyLGV2ZW50LGh0bWxGb3IsaW50ZWdyaXR5LHNyYyx0ZXh0LHR5cGUiLCJzZWxlY3ReW0hUTUxFbGVtZW50XXxhdXRvY29tcGxldGUsIWF1dG9mb2N1cywhZGlzYWJsZWQsI2xlbmd0aCwhbXVsdGlwbGUsbmFtZSwhcmVxdWlyZWQsI3NlbGVjdGVkSW5kZXgsI3NpemUsdmFsdWUiLCJzaGFkb3deW0hUTUxFbGVtZW50XXwiLCJzbG90XltIVE1MRWxlbWVudF18bmFtZSIsInNvdXJjZV5bSFRNTEVsZW1lbnRdfG1lZGlhLHNpemVzLHNyYyxzcmNzZXQsdHlwZSIsInNwYW5eW0hUTUxFbGVtZW50XXwiLCJzdHlsZV5bSFRNTEVsZW1lbnRdfCFkaXNhYmxlZCxtZWRpYSx0eXBlIiwiY2FwdGlvbl5bSFRNTEVsZW1lbnRdfGFsaWduIiwidGgsdGReW0hUTUxFbGVtZW50XXxhYmJyLGFsaWduLGF4aXMsYmdDb2xvcixjaCxjaE9mZiwjY29sU3BhbixoZWFkZXJzLGhlaWdodCwhbm9XcmFwLCNyb3dTcGFuLHNjb3BlLHZBbGlnbix3aWR0aCIsImNvbCxjb2xncm91cF5bSFRNTEVsZW1lbnRdfGFsaWduLGNoLGNoT2ZmLCNzcGFuLHZBbGlnbix3aWR0aCIsInRhYmxlXltIVE1MRWxlbWVudF18YWxpZ24sYmdDb2xvcixib3JkZXIsJWNhcHRpb24sY2VsbFBhZGRpbmcsY2VsbFNwYWNpbmcsZnJhbWUscnVsZXMsc3VtbWFyeSwldEZvb3QsJXRIZWFkLHdpZHRoIiwidHJeW0hUTUxFbGVtZW50XXxhbGlnbixiZ0NvbG9yLGNoLGNoT2ZmLHZBbGlnbiIsInRmb290LHRoZWFkLHRib2R5XltIVE1MRWxlbWVudF18YWxpZ24sY2gsY2hPZmYsdkFsaWduIiwidGVtcGxhdGVeW0hUTUxFbGVtZW50XXwiLCJ0ZXh0YXJlYV5bSFRNTEVsZW1lbnRdfGF1dG9jYXBpdGFsaXplLGF1dG9jb21wbGV0ZSwhYXV0b2ZvY3VzLCNjb2xzLGRlZmF1bHRWYWx1ZSxkaXJOYW1lLCFkaXNhYmxlZCwjbWF4TGVuZ3RoLCNtaW5MZW5ndGgsbmFtZSxwbGFjZWhvbGRlciwhcmVhZE9ubHksIXJlcXVpcmVkLCNyb3dzLHNlbGVjdGlvbkRpcmVjdGlvbiwjc2VsZWN0aW9uRW5kLCNzZWxlY3Rpb25TdGFydCx2YWx1ZSx3cmFwIiwidGl0bGVeW0hUTUxFbGVtZW50XXx0ZXh0IiwidHJhY2teW0hUTUxFbGVtZW50XXwhZGVmYXVsdCxraW5kLGxhYmVsLHNyYyxzcmNsYW5nIiwidWxeW0hUTUxFbGVtZW50XXwhY29tcGFjdCx0eXBlIiwidW5rbm93bl5bSFRNTEVsZW1lbnRdfCIsInZpZGVvXm1lZGlhfCNoZWlnaHQscG9zdGVyLCN3aWR0aCIsIjpzdmc6YV46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6YW5pbWF0ZV46c3ZnOmFuaW1hdGlvbnwiLCI6c3ZnOmFuaW1hdGVNb3Rpb25eOnN2ZzphbmltYXRpb258IiwiOnN2ZzphbmltYXRlVHJhbnNmb3JtXjpzdmc6YW5pbWF0aW9ufCIsIjpzdmc6Y2lyY2xlXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpjbGlwUGF0aF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6ZGVmc146c3ZnOmdyYXBoaWNzfCIsIjpzdmc6ZGVzY146c3ZnOnwiLCI6c3ZnOmRpc2NhcmReOnN2Zzp8IiwiOnN2ZzplbGxpcHNlXjpzdmc6Z2VvbWV0cnl8IiwiOnN2ZzpmZUJsZW5kXjpzdmc6fCIsIjpzdmc6ZmVDb2xvck1hdHJpeF46c3ZnOnwiLCI6c3ZnOmZlQ29tcG9uZW50VHJhbnNmZXJeOnN2Zzp8IiwiOnN2ZzpmZUNvbXBvc2l0ZV46c3ZnOnwiLCI6c3ZnOmZlQ29udm9sdmVNYXRyaXheOnN2Zzp8IiwiOnN2ZzpmZURpZmZ1c2VMaWdodGluZ146c3ZnOnwiLCI6c3ZnOmZlRGlzcGxhY2VtZW50TWFwXjpzdmc6fCIsIjpzdmc6ZmVEaXN0YW50TGlnaHReOnN2Zzp8IiwiOnN2ZzpmZURyb3BTaGFkb3deOnN2Zzp8IiwiOnN2ZzpmZUZsb29kXjpzdmc6fCIsIjpzdmc6ZmVGdW5jQV46c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUZ1bmNCXjpzdmc6Y29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbnwiLCI6c3ZnOmZlRnVuY0deOnN2Zzpjb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9ufCIsIjpzdmc6ZmVGdW5jUl46c3ZnOmNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb258IiwiOnN2ZzpmZUdhdXNzaWFuQmx1cl46c3ZnOnwiLCI6c3ZnOmZlSW1hZ2VeOnN2Zzp8IiwiOnN2ZzpmZU1lcmdlXjpzdmc6fCIsIjpzdmc6ZmVNZXJnZU5vZGVeOnN2Zzp8IiwiOnN2ZzpmZU1vcnBob2xvZ3leOnN2Zzp8IiwiOnN2ZzpmZU9mZnNldF46c3ZnOnwiLCI6c3ZnOmZlUG9pbnRMaWdodF46c3ZnOnwiLCI6c3ZnOmZlU3BlY3VsYXJMaWdodGluZ146c3ZnOnwiLCI6c3ZnOmZlU3BvdExpZ2h0Xjpzdmc6fCIsIjpzdmc6ZmVUaWxlXjpzdmc6fCIsIjpzdmc6ZmVUdXJidWxlbmNlXjpzdmc6fCIsIjpzdmc6ZmlsdGVyXjpzdmc6fCIsIjpzdmc6Zm9yZWlnbk9iamVjdF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6Z146c3ZnOmdyYXBoaWNzfCIsIjpzdmc6aW1hZ2VeOnN2ZzpncmFwaGljc3wiLCI6c3ZnOmxpbmVeOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOmxpbmVhckdyYWRpZW50Xjpzdmc6Z3JhZGllbnR8IiwiOnN2ZzptcGF0aF46c3ZnOnwiLCI6c3ZnOm1hcmtlcl46c3ZnOnwiLCI6c3ZnOm1hc2teOnN2Zzp8IiwiOnN2ZzptZXRhZGF0YV46c3ZnOnwiLCI6c3ZnOnBhdGheOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnBhdHRlcm5eOnN2Zzp8IiwiOnN2Zzpwb2x5Z29uXjpzdmc6Z2VvbWV0cnl8IiwiOnN2Zzpwb2x5bGluZV46c3ZnOmdlb21ldHJ5fCIsIjpzdmc6cmFkaWFsR3JhZGllbnReOnN2ZzpncmFkaWVudHwiLCI6c3ZnOnJlY3ReOnN2ZzpnZW9tZXRyeXwiLCI6c3ZnOnN2Z146c3ZnOmdyYXBoaWNzfCNjdXJyZW50U2NhbGUsI3pvb21BbmRQYW4iLCI6c3ZnOnNjcmlwdF46c3ZnOnx0eXBlIiwiOnN2ZzpzZXReOnN2ZzphbmltYXRpb258IiwiOnN2ZzpzdG9wXjpzdmc6fCIsIjpzdmc6c3R5bGVeOnN2Zzp8IWRpc2FibGVkLG1lZGlhLHRpdGxlLHR5cGUiLCI6c3ZnOnN3aXRjaF46c3ZnOmdyYXBoaWNzfCIsIjpzdmc6c3ltYm9sXjpzdmc6fCIsIjpzdmc6dHNwYW5eOnN2Zzp0ZXh0UG9zaXRpb25pbmd8IiwiOnN2Zzp0ZXh0Xjpzdmc6dGV4dFBvc2l0aW9uaW5nfCIsIjpzdmc6dGV4dFBhdGheOnN2Zzp0ZXh0Q29udGVudHwiLCI6c3ZnOnRpdGxlXjpzdmc6fCIsIjpzdmc6dXNlXjpzdmc6Z3JhcGhpY3N8IiwiOnN2Zzp2aWV3Xjpzdmc6fCN6b29tQW5kUGFuIiwiZGF0YV5bSFRNTEVsZW1lbnRdfHZhbHVlIiwia2V5Z2VuXltIVE1MRWxlbWVudF18IWF1dG9mb2N1cyxjaGFsbGVuZ2UsIWRpc2FibGVkLGZvcm0sa2V5dHlwZSxuYW1lIiwibWVudWl0ZW1eW0hUTUxFbGVtZW50XXx0eXBlLGxhYmVsLGljb24sIWRpc2FibGVkLCFjaGVja2VkLHJhZGlvZ3JvdXAsIWRlZmF1bHQiLCJzdW1tYXJ5XltIVE1MRWxlbWVudF18IiwidGltZV5bSFRNTEVsZW1lbnRdfGRhdGVUaW1lIiwiOnN2ZzpjdXJzb3JeOnN2Zzp8Il0sYks9bmV3IE1hcChPYmplY3QuZW50cmllcyh7Y2xhc3M6ImNsYXNzTmFtZSIsZm9yOiJodG1sRm9yIixmb3JtYWN0aW9uOiJmb3JtQWN0aW9uIixpbm5lckh0bWw6ImlubmVySFRNTCIscmVhZG9ubHk6InJlYWRPbmx5Iix0YWJpbmRleDoidGFiSW5kZXgifSkpLHlFZT1BcnJheS5mcm9tKGJLKS5yZWR1Y2UoKG4sW3QsZV0pPT4obi5zZXQodCxlKSxuKSxuZXcgTWFwKSxTRD1jbGFzcyBleHRlbmRzIHlWe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9zY2hlbWE9bmV3IE1hcCx0aGlzLl9ldmVudFNjaGVtYT1uZXcgTWFwLHZFZS5mb3JFYWNoKHQ9PntsZXQgZT1uZXcgTWFwLGk9bmV3IFNldCxbcixvXT10LnNwbGl0KCJ8Iikscz1vLnNwbGl0KCIsIiksW2EsbF09ci5zcGxpdCgiXiIpO2Euc3BsaXQoIiwiKS5mb3JFYWNoKHU9Pnt0aGlzLl9zY2hlbWEuc2V0KHUudG9Mb3dlckNhc2UoKSxlKSx0aGlzLl9ldmVudFNjaGVtYS5zZXQodS50b0xvd2VyQ2FzZSgpLGkpfSk7bGV0IGM9bCYmdGhpcy5fc2NoZW1hLmdldChsLnRvTG93ZXJDYXNlKCkpO2lmKGMpe2ZvcihsZXRbdSxkXW9mIGMpZS5zZXQodSxkKTtmb3IobGV0IHUgb2YgdGhpcy5fZXZlbnRTY2hlbWEuZ2V0KGwudG9Mb3dlckNhc2UoKSkpaS5hZGQodSl9cy5mb3JFYWNoKHU9PntpZih1Lmxlbmd0aD4wKXN3aXRjaCh1WzBdKXtjYXNlIioiOmkuYWRkKHUuc3Vic3RyaW5nKDEpKTticmVhaztjYXNlIiEiOmUuc2V0KHUuc3Vic3RyaW5nKDEpLCJib29sZWFuIik7YnJlYWs7Y2FzZSIjIjplLnNldCh1LnN1YnN0cmluZygxKSwibnVtYmVyIik7YnJlYWs7Y2FzZSIlIjplLnNldCh1LnN1YnN0cmluZygxKSwib2JqZWN0Iik7YnJlYWs7ZGVmYXVsdDplLnNldCh1LCJzdHJpbmciKX19KX0pfWhhc1Byb3BlcnR5KHQsZSxpKXtpZihpLnNvbWUobz0+Im5vLWVycm9ycy1zY2hlbWEiPT09by5uYW1lKSlyZXR1cm4hMDtpZih0LmluZGV4T2YoIi0iKT4tMSl7aWYoQ0IodCl8fE1CKHQpKXJldHVybiExO2lmKGkuc29tZShvPT4iY3VzdG9tLWVsZW1lbnRzIj09PW8ubmFtZSkpcmV0dXJuITB9cmV0dXJuKHRoaXMuX3NjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKXx8dGhpcy5fc2NoZW1hLmdldCgidW5rbm93biIpKS5oYXMoZSl9aGFzRWxlbWVudCh0LGUpe3JldHVybiEhKGUuc29tZShpPT4ibm8tZXJyb3JzLXNjaGVtYSI9PT1pLm5hbWUpfHx0LmluZGV4T2YoIi0iKT4tMSYmKENCKHQpfHxNQih0KXx8ZS5zb21lKGk9PiJjdXN0b20tZWxlbWVudHMiPT09aS5uYW1lKSkpfHx0aGlzLl9zY2hlbWEuaGFzKHQudG9Mb3dlckNhc2UoKSl9c2VjdXJpdHlDb250ZXh0KHQsZSxpKXtpJiYoZT10aGlzLmdldE1hcHBlZFByb3BOYW1lKGUpKSx0PXQudG9Mb3dlckNhc2UoKSxlPWUudG9Mb3dlckNhc2UoKTtsZXQgcj1sUSgpW3QrInwiK2VdO3JldHVybiByfHwocj1sUSgpWyIqfCIrZV0scnx8aW8uTk9ORSl9Z2V0TWFwcGVkUHJvcE5hbWUodCl7cmV0dXJuIGJLLmdldCh0KT8/dH1nZXREZWZhdWx0Q29tcG9uZW50RWxlbWVudE5hbWUoKXtyZXR1cm4ibmctY29tcG9uZW50In12YWxpZGF0ZVByb3BlcnR5KHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgib24iKT97ZXJyb3I6ITAsbXNnOmBCaW5kaW5nIHRvIGV2ZW50IHByb3BlcnR5ICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5cbklmICcke3R9JyBpcyBhIGRpcmVjdGl2ZSBpbnB1dCwgbWFrZSBzdXJlIHRoZSBkaXJlY3RpdmUgaXMgaW1wb3J0ZWQgYnkgdGhlIGN1cnJlbnQgbW9kdWxlLmB9OntlcnJvcjohMX19dmFsaWRhdGVBdHRyaWJ1dGUodCl7cmV0dXJuIHQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJvbiIpP3tlcnJvcjohMCxtc2c6YEJpbmRpbmcgdG8gZXZlbnQgYXR0cmlidXRlICcke3R9JyBpcyBkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zLCBwbGVhc2UgdXNlICgke3Quc2xpY2UoMil9KT0uLi5gfTp7ZXJyb3I6ITF9fWFsbEtub3duRWxlbWVudE5hbWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fc2NoZW1hLmtleXMoKSl9YWxsS25vd25BdHRyaWJ1dGVzT2ZFbGVtZW50KHQpe2xldCBlPXRoaXMuX3NjaGVtYS5nZXQodC50b0xvd2VyQ2FzZSgpKXx8dGhpcy5fc2NoZW1hLmdldCgidW5rbm93biIpO3JldHVybiBBcnJheS5mcm9tKGUua2V5cygpKS5tYXAoaT0+eUVlLmdldChpKT8/aSl9YWxsS25vd25FdmVudHNPZkVsZW1lbnQodCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fZXZlbnRTY2hlbWEuZ2V0KHQudG9Mb3dlckNhc2UoKSk/P1tdKX1ub3JtYWxpemVBbmltYXRpb25TdHlsZVByb3BlcnR5KHQpe3JldHVybiB0LnJlcGxhY2UoeU1lLCguLi50KT0+dFsxXS50b1VwcGVyQ2FzZSgpKX1ub3JtYWxpemVBbmltYXRpb25TdHlsZVZhbHVlKHQsZSxpKXtsZXQgcj0iIixvPWkudG9TdHJpbmcoKS50cmltKCkscz1udWxsO2lmKGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIndpZHRoIjpjYXNlImhlaWdodCI6Y2FzZSJtaW5XaWR0aCI6Y2FzZSJtaW5IZWlnaHQiOmNhc2UibWF4V2lkdGgiOmNhc2UibWF4SGVpZ2h0IjpjYXNlImxlZnQiOmNhc2UidG9wIjpjYXNlImJvdHRvbSI6Y2FzZSJyaWdodCI6Y2FzZSJmb250U2l6ZSI6Y2FzZSJvdXRsaW5lV2lkdGgiOmNhc2Uib3V0bGluZU9mZnNldCI6Y2FzZSJwYWRkaW5nVG9wIjpjYXNlInBhZGRpbmdMZWZ0IjpjYXNlInBhZGRpbmdCb3R0b20iOmNhc2UicGFkZGluZ1JpZ2h0IjpjYXNlIm1hcmdpblRvcCI6Y2FzZSJtYXJnaW5MZWZ0IjpjYXNlIm1hcmdpbkJvdHRvbSI6Y2FzZSJtYXJnaW5SaWdodCI6Y2FzZSJib3JkZXJSYWRpdXMiOmNhc2UiYm9yZGVyV2lkdGgiOmNhc2UiYm9yZGVyVG9wV2lkdGgiOmNhc2UiYm9yZGVyTGVmdFdpZHRoIjpjYXNlImJvcmRlclJpZ2h0V2lkdGgiOmNhc2UiYm9yZGVyQm90dG9tV2lkdGgiOmNhc2UidGV4dEluZGVudCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHQpJiYwIT09aSYmIjAiIT09aSlpZigibnVtYmVyIj09dHlwZW9mIGkpcj0icHgiO2Vsc2V7bGV0IGE9aS5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO2EmJjA9PWFbMV0ubGVuZ3RoJiYocz1gUGxlYXNlIHByb3ZpZGUgYSBDU1MgdW5pdCB2YWx1ZSBmb3IgJHtlfToke2l9YCl9cmV0dXJue2Vycm9yOnMsdmFsdWU6bytyfX19LGNRPW5ldyBTZXQoWyJpZnJhbWV8c3JjZG9jIiwiKnxpbm5lcmh0bWwiLCIqfG91dGVyaHRtbCIsImVtYmVkfHNyYyIsIm9iamVjdHxjb2RlYmFzZSIsIm9iamVjdHxkYXRhIl0pO2Z1bmN0aW9uIHhLKG4sdCl7cmV0dXJuIG49bi50b0xvd2VyQ2FzZSgpLHQ9dC50b0xvd2VyQ2FzZSgpLGNRLmhhcyhuKyJ8Iit0KXx8Y1EuaGFzKCIqfCIrdCl9dmFyIHBCPSJhbmltYXRlLSI7ZnVuY3Rpb24gaEIobil7cmV0dXJuIkAiPT1uWzBdfWZ1bmN0aW9uIGZCKG4sdCxlLGkpe2xldCByPVtdO3JldHVybiBaZC5wYXJzZSh0KS5mb3JFYWNoKG89PntsZXQgcz1vLmVsZW1lbnQ/W28uZWxlbWVudF06bi5hbGxLbm93bkVsZW1lbnROYW1lcygpLGE9bmV3IFNldChvLm5vdFNlbGVjdG9ycy5maWx0ZXIoYz0+Yy5pc0VsZW1lbnRTZWxlY3RvcigpKS5tYXAoYz0+Yy5lbGVtZW50KSksbD1zLmZpbHRlcihjPT4hYS5oYXMoYykpO3IucHVzaCguLi5sLm1hcChjPT5uLnNlY3VyaXR5Q29udGV4dChjLGUsaSkpKX0pLDA9PT1yLmxlbmd0aD9baW8uTk9ORV06QXJyYXkuZnJvbShuZXcgU2V0KHIpKS5zb3J0KCl9ZnVuY3Rpb24gS3Aobix0KXtsZXQgZT10LnN0YXJ0LW4uc3RhcnQub2Zmc2V0LGk9dC5lbmQtbi5lbmQub2Zmc2V0O3JldHVybiBuZXcgR28obi5zdGFydC5tb3ZlQnkoZSksbi5lbmQubW92ZUJ5KGkpLG4uZnVsbFN0YXJ0Lm1vdmVCeShlKSxuLmRldGFpbHMpfXZhciBFRWU9L14oW146Lz8jXSspOi87ZnVuY3Rpb24gQ0sobil7bGV0IHQ9bnVsbCxlPW51bGwsaT1udWxsLHI9ITEsbz0iIjtuLmF0dHJzLmZvckVhY2gobD0+e2xldCBjPWwubmFtZS50b0xvd2VyQ2FzZSgpOyJzZWxlY3QiPT1jP3Q9bC52YWx1ZToiaHJlZiI9PWM/ZT1sLnZhbHVlOiJyZWwiPT1jP2k9bC52YWx1ZToibmdOb25CaW5kYWJsZSI9PWwubmFtZT9yPSEwOiJuZ1Byb2plY3RBcyI9PWwubmFtZSYmbC52YWx1ZS5sZW5ndGg+MCYmKG89bC52YWx1ZSl9KSx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT09bnx8MD09PW4ubGVuZ3RoPyIqIjpufSh0KTtsZXQgcz1uLm5hbWUudG9Mb3dlckNhc2UoKSxhPW5hLk9USEVSO3JldHVybiBNQihzKT9hPW5hLk5HX0NPTlRFTlQ6InN0eWxlIj09cz9hPW5hLlNUWUxFOiJzY3JpcHQiPT1zP2E9bmEuU0NSSVBUOiJsaW5rIj09cyYmInN0eWxlc2hlZXQiPT1pJiYoYT1uYS5TVFlMRVNIRUVUKSxuZXcgeFYoYSx0LGUscixvKX12YXIgbmE9KCgpPT57cmV0dXJuKG49bmF8fChuYT17fSkpW24uTkdfQ09OVEVOVD0wXT0iTkdfQ09OVEVOVCIsbltuLlNUWUxFPTFdPSJTVFlMRSIsbltuLlNUWUxFU0hFRVQ9Ml09IlNUWUxFU0hFRVQiLG5bbi5TQ1JJUFQ9M109IlNDUklQVCIsbltuLk9USEVSPTRdPSJPVEhFUiIsbmE7dmFyIG59KSgpLHhWPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy50eXBlPXQsdGhpcy5zZWxlY3RBdHRyPWUsdGhpcy5ocmVmQXR0cj1pLHRoaXMubm9uQmluZGFibGU9cix0aGlzLnByb2plY3RBcz1vfX0sTEVlPS9eKD86KGJpbmQtKXwobGV0LSl8KHJlZi18Iyl8KG9uLSl8KGJpbmRvbi0pfChAKSkoLiopJC8sWnBfQkFOQU5BX0JPWD17c3RhcnQ6IlsoIixlbmQ6IildIn0sWnBfUFJPUEVSVFk9e3N0YXJ0OiJbIixlbmQ6Il0ifSxacF9FVkVOVD17c3RhcnQ6IigiLGVuZDoiKSJ9LEhFZT1uZXcgY2xhc3N7dmlzaXRFbGVtZW50KHQpe2xldCBlPUNLKHQpO2lmKGUudHlwZT09PW5hLlNDUklQVHx8ZS50eXBlPT09bmEuU1RZTEV8fGUudHlwZT09PW5hLlNUWUxFU0hFRVQpcmV0dXJuIG51bGw7bGV0IGk9VXUodGhpcyx0LmNoaWxkcmVuLG51bGwpO3JldHVybiBuZXcgRV8odC5uYW1lLFV1KHRoaXMsdC5hdHRycyksW10sW10saSxbXSx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuKX12aXNpdENvbW1lbnQodCl7cmV0dXJuIG51bGx9dmlzaXRBdHRyaWJ1dGUodCl7cmV0dXJuIG5ldyBEQyh0Lm5hbWUsdC52YWx1ZSx0LnNvdXJjZVNwYW4sdC5rZXlTcGFuLHQudmFsdWVTcGFuLHQuaTE4bil9dmlzaXRUZXh0KHQpe3JldHVybiBuZXcgTV8odC52YWx1ZSx0LnNvdXJjZVNwYW4pfXZpc2l0RXhwYW5zaW9uKHQpe3JldHVybiBudWxsfXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gbnVsbH19O2Z1bmN0aW9uIF9RKG4pe3JldHVybi9eZGF0YS0vaS50ZXN0KG4pP24uc3Vic3RyaW5nKDUpOm59ZnVuY3Rpb24gbUIobix0KXt0LnB1c2goLi4ubi5tYXAoZT0+U18uZnJvbVBhcnNlZEV2ZW50KGUpKSl9dmFyIExjPSgoKT0+e3JldHVybihuPUxjfHwoTGM9e30pKVtuLkVMRU1FTlQ9MF09IkVMRU1FTlQiLG5bbi5URU1QTEFURT0xXT0iVEVNUExBVEUiLExjO3ZhciBufSkoKSxRQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHI9bnVsbCxvLHMpe3RoaXMuaW5kZXg9dCx0aGlzLnJlZj1lLHRoaXMubGV2ZWw9aSx0aGlzLnRlbXBsYXRlSW5kZXg9cix0aGlzLm1ldGE9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5iaW5kaW5ncz1uZXcgU2V0LHRoaXMucGxhY2Vob2xkZXJzPW5ldyBNYXAsdGhpcy5pc0VtaXR0ZWQ9ITEsdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50PTAsdGhpcy5fcmVnaXN0cnk9c3x8e2dldFVuaXF1ZUlkOlN3ZSgpLGljdXM6bmV3IE1hcH0sdGhpcy5pZD10aGlzLl9yZWdpc3RyeS5nZXRVbmlxdWVJZCgpfWFwcGVuZFRhZyh0LGUsaSxyKXtlLmlzVm9pZCYmcnx8cVQodGhpcy5wbGFjZWhvbGRlcnMsZS5pc1ZvaWR8fCFyP2Uuc3RhcnROYW1lOmUuY2xvc2VOYW1lLHt0eXBlOnQsaW5kZXg6aSxjdHg6dGhpcy5pZCxpc1ZvaWQ6ZS5pc1ZvaWQsY2xvc2VkOnJ9KX1nZXQgaWN1cygpe3JldHVybiB0aGlzLl9yZWdpc3RyeS5pY3VzfWdldCBpc1Jvb3QoKXtyZXR1cm4gMD09PXRoaXMubGV2ZWx9Z2V0IGlzUmVzb2x2ZWQoKXtyZXR1cm4gMD09PXRoaXMuX3VucmVzb2x2ZWRDdHhDb3VudH1nZXRTZXJpYWxpemVkUGxhY2Vob2xkZXJzKCl7bGV0IHQ9bmV3IE1hcDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMuZm9yRWFjaCgoZSxpKT0+dC5zZXQoaSxlLm1hcChXRWUpKSksdH1hcHBlbmRCaW5kaW5nKHQpe3RoaXMuYmluZGluZ3MuYWRkKHQpfWFwcGVuZEljdSh0LGUpe3FUKHRoaXMuX3JlZ2lzdHJ5LmljdXMsdCxlKX1hcHBlbmRCb3VuZFRleHQodCl7cVEodCx0aGlzLmJpbmRpbmdzLnNpemUsdGhpcy5pZCkuZm9yRWFjaCgoaSxyKT0+cVQodGhpcy5wbGFjZWhvbGRlcnMsciwuLi5pKSl9YXBwZW5kVGVtcGxhdGUodCxlKXt0aGlzLmFwcGVuZFRhZyhMYy5URU1QTEFURSx0LGUsITEpLHRoaXMuYXBwZW5kVGFnKExjLlRFTVBMQVRFLHQsZSwhMCksdGhpcy5fdW5yZXNvbHZlZEN0eENvdW50Kyt9YXBwZW5kRWxlbWVudCh0LGUsaSl7dGhpcy5hcHBlbmRUYWcoTGMuRUxFTUVOVCx0LGUsaSl9YXBwZW5kUHJvamVjdGlvbih0LGUpe3RoaXMuYXBwZW5kVGFnKExjLkVMRU1FTlQsdCxlLCExKSx0aGlzLmFwcGVuZFRhZyhMYy5FTEVNRU5ULHQsZSwhMCl9Zm9ya0NoaWxkQ29udGV4dCh0LGUsaSl7cmV0dXJuIG5ldyBRQyh0LHRoaXMucmVmLHRoaXMubGV2ZWwrMSxlLGksdGhpcy5fcmVnaXN0cnkpfXJlY29uY2lsZUNoaWxkQ29udGV4dCh0KXtbInN0YXJ0IiwiY2xvc2UiXS5mb3JFYWNoKGk9PntsZXQgcz0odGhpcy5wbGFjZWhvbGRlcnMuZ2V0KHQubWV0YVtgJHtpfU5hbWVgXSl8fFtdKS5maW5kKHZRKHRoaXMuaWQsdC50ZW1wbGF0ZUluZGV4KSk7cyYmKHMuY3R4PXQuaWQpfSksdC5wbGFjZWhvbGRlcnMuZm9yRWFjaCgoaSxyKT0+e2xldCBvPXRoaXMucGxhY2Vob2xkZXJzLmdldChyKTtpZighbylyZXR1cm4gdm9pZCB0aGlzLnBsYWNlaG9sZGVycy5zZXQocixpKTtsZXQgcz1vLmZpbmRJbmRleCh2USh0LmlkLHQudGVtcGxhdGVJbmRleCkpO2lmKHM+PTApe2xldCBhPXIuc3RhcnRzV2l0aCgiQ0xPU0UiKTtyLmVuZHNXaXRoKCJORy1URU1QTEFURSIpP28uc3BsaWNlKHMrKGE/MDoxKSwwLC4uLmkpOihpW2E/aS5sZW5ndGgtMTowXS50bXBsPW9bc10sby5zcGxpY2UocywxLC4uLmkpKX1lbHNlIG8ucHVzaCguLi5pKTt0aGlzLnBsYWNlaG9sZGVycy5zZXQocixvKX0pLHRoaXMuX3VucmVzb2x2ZWRDdHhDb3VudC0tfX07ZnVuY3Rpb24gZ0Iobix0LGUsaSl7cmV0dXJuIFBEKGAke2k/Ii8iOiIifSR7bn0ke3R9YCxlKX1mdW5jdGlvbiBfQihuLHtpbmRleDp0LGN0eDplLGlzVm9pZDppfSxyKXtyZXR1cm4gaT9nQihuLHQsZSkrZ0Iobix0LGUsITApOmdCKG4sdCxlLHIpfWZ1bmN0aW9uIHZRKG4sdCl7cmV0dXJuIGU9PiJvYmplY3QiPT10eXBlb2YgZSYmZS50eXBlPT09TGMuVEVNUExBVEUmJmUuaW5kZXg9PT10JiZlLmN0eD09PW59ZnVuY3Rpb24gV0VlKG4pe2xldCB0PShyLG8pPT5fQigiIyIscixvKSxlPShyLG8pPT5fQigiKiIscixvKTtzd2l0Y2gobi50eXBlKXtjYXNlIExjLkVMRU1FTlQ6cmV0dXJuIG4uY2xvc2VkP3QobiwhMCkrKG4udG1wbD9lKG4udG1wbCwhMCk6IiIpOm4udG1wbD9lKG4udG1wbCkrdChuKSsobi5pc1ZvaWQ/ZShuLnRtcGwsITApOiIiKTp0KG4pO2Nhc2UgTGMuVEVNUExBVEU6cmV0dXJuIGUobixuLmNsb3NlZCk7ZGVmYXVsdDpyZXR1cm4gbn19dmFyIHFFZT1uZXcgY2xhc3N7dmlzaXRUZXh0KHQpe3JldHVybiB0LnZhbHVlfXZpc2l0Q29udGFpbmVyKHQpe3JldHVybiB0LmNoaWxkcmVuLm1hcChlPT5lLnZpc2l0KHRoaXMpKS5qb2luKCIiKX12aXNpdEljdSh0KXtsZXQgZT1PYmplY3Qua2V5cyh0LmNhc2VzKS5tYXAocj0+YCR7cn0geyR7dC5jYXNlc1tyXS52aXNpdCh0aGlzKX19YCk7cmV0dXJuYHske3QuZXhwcmVzc2lvblBsYWNlaG9sZGVyfSwgJHt0LnR5cGV9LCAke2Uuam9pbigiICIpfX1gfXZpc2l0VGFnUGxhY2Vob2xkZXIodCl7cmV0dXJuIHQuaXNWb2lkP3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpOmAke3RoaXMuZm9ybWF0UGgodC5zdGFydE5hbWUpfSR7dC5jaGlsZHJlbi5tYXAoZT0+ZS52aXNpdCh0aGlzKSkuam9pbigiIil9JHt0aGlzLmZvcm1hdFBoKHQuY2xvc2VOYW1lKX1gfXZpc2l0UGxhY2Vob2xkZXIodCl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX12aXNpdEljdVBsYWNlaG9sZGVyKHQsZSl7cmV0dXJuIHRoaXMuZm9ybWF0UGgodC5uYW1lKX1mb3JtYXRQaCh0KXtyZXR1cm5geyR7SkModCwhMSl9fWB9fTtmdW5jdGlvbiBNSyhuKXtyZXR1cm4gbi52aXNpdChxRWUpfXZhciB5UT17QToiTElOSyIsQjoiQk9MRF9URVhUIixCUjoiTElORV9CUkVBSyIsRU06IkVNUEhBU0lTRURfVEVYVCIsSDE6IkhFQURJTkdfTEVWRUwxIixIMjoiSEVBRElOR19MRVZFTDIiLEgzOiJIRUFESU5HX0xFVkVMMyIsSDQ6IkhFQURJTkdfTEVWRUw0IixINToiSEVBRElOR19MRVZFTDUiLEg2OiJIRUFESU5HX0xFVkVMNiIsSFI6IkhPUklaT05UQUxfUlVMRSIsSToiSVRBTElDX1RFWFQiLExJOiJMSVNUX0lURU0iLExJTks6Ik1FRElBX0xJTksiLE9MOiJPUkRFUkVEX0xJU1QiLFA6IlBBUkFHUkFQSCIsUToiUVVPVEFUSU9OIixTOiJTVFJJS0VUSFJPVUdIX1RFWFQiLFNNQUxMOiJTTUFMTF9URVhUIixTVUI6IlNVQlNUUklQVCIsU1VQOiJTVVBFUlNDUklQVCIsVEJPRFk6IlRBQkxFX0JPRFkiLFREOiJUQUJMRV9DRUxMIixURk9PVDoiVEFCTEVfRk9PVEVSIixUSDoiVEFCTEVfSEVBREVSX0NFTEwiLFRIRUFEOiJUQUJMRV9IRUFERVIiLFRSOiJUQUJMRV9ST1ciLFRUOiJNT05PU1BBQ0VEX1RFWFQiLFU6IlVOREVSTElORURfVEVYVCIsVUw6IlVOT1JERVJFRF9MSVNUIn0sU1Y9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHM9e30sdGhpcy5fc2lnbmF0dXJlVG9OYW1lPXt9fWdldFN0YXJ0VGFnUGxhY2Vob2xkZXJOYW1lKHQsZSxpKXtsZXQgcj10aGlzLl9oYXNoVGFnKHQsZSxpKTtpZih0aGlzLl9zaWduYXR1cmVUb05hbWVbcl0pcmV0dXJuIHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXTtsZXQgbz10LnRvVXBwZXJDYXNlKCkscz15UVtvXXx8YFRBR18ke299YCxhPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShpP3M6YFNUQVJUXyR7c31gKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdPWEsYX1nZXRDbG9zZVRhZ1BsYWNlaG9sZGVyTmFtZSh0KXtsZXQgZT10aGlzLl9oYXNoQ2xvc2luZ1RhZyh0KTtpZih0aGlzLl9zaWduYXR1cmVUb05hbWVbZV0pcmV0dXJuIHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXTtsZXQgaT10LnRvVXBwZXJDYXNlKCksbz10aGlzLl9nZW5lcmF0ZVVuaXF1ZU5hbWUoYENMT1NFXyR7eVFbaV18fGBUQUdfJHtpfWB9YCk7cmV0dXJuIHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtlXT1vLG99Z2V0UGxhY2Vob2xkZXJOYW1lKHQsZSl7bGV0IGk9dC50b1VwcGVyQ2FzZSgpLHI9YFBIOiAke2l9PSR7ZX1gO2lmKHRoaXMuX3NpZ25hdHVyZVRvTmFtZVtyXSlyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdO2xldCBvPXRoaXMuX2dlbmVyYXRlVW5pcXVlTmFtZShpKTtyZXR1cm4gdGhpcy5fc2lnbmF0dXJlVG9OYW1lW3JdPW8sb31nZXRVbmlxdWVQbGFjZWhvbGRlcih0KXtyZXR1cm4gdGhpcy5fZ2VuZXJhdGVVbmlxdWVOYW1lKHQudG9VcHBlckNhc2UoKSl9X2hhc2hUYWcodCxlLGkpe3JldHVybmA8JHt0fWArT2JqZWN0LmtleXMoZSkuc29ydCgpLm1hcChhPT5gICR7YX09JHtlW2FdfWApLmpvaW4oIiIpKyhpPyIvPiI6YD48LyR7dH0+YCl9X2hhc2hDbG9zaW5nVGFnKHQpe3JldHVybiB0aGlzLl9oYXNoVGFnKGAvJHt0fWAse30sITEpfV9nZW5lcmF0ZVVuaXF1ZU5hbWUodCl7aWYoIXRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50cy5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5fcGxhY2VIb2xkZXJOYW1lQ291bnRzW3RdPTEsdDtsZXQgaT10aGlzLl9wbGFjZUhvbGRlck5hbWVDb3VudHNbdF07cmV0dXJuIHRoaXMuX3BsYWNlSG9sZGVyTmFtZUNvdW50c1t0XT1pKzEsYCR7dH1fJHtpfWB9fSxZRWU9bmV3IGJEKG5ldyB5RCk7ZnVuY3Rpb24gUUVlKG4sdCl7cmV0dXJuIHR9dmFyICRFZT0vXC9cL1tcc1xTXSppMThuW1xzXFNdKlwoW1xzXFNdKnBoW1xzXFNdKj1bXHNcU10qKCJ8JykoW1xzXFNdKj8pXDFbXHNcU10qXCkvZyxUVj1jbGFzcyBleHRlbmRzIHlte2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKX19LHQxZT0obix0KT0+KG4gaW5zdGFuY2VvZiBDbSYmKHQgaW5zdGFuY2VvZiBUXyYmbi5pMThuIGluc3RhbmNlb2YgRnUmJih0LnByZXZpb3VzTWVzc2FnZT1uLmkxOG4pLG4uaTE4bj10KSx0KSxFRD1jbGFzc3tjb25zdHJ1Y3Rvcih0PVB1LGU9ITEsaT0hMSl7dGhpcy5pbnRlcnBvbGF0aW9uQ29uZmlnPXQsdGhpcy5rZWVwSTE4bkF0dHJzPWUsdGhpcy5lbmFibGVJMThuTGVnYWN5TWVzc2FnZUlkRm9ybWF0PWksdGhpcy5oYXNJMThuTWV0YT0hMSx0aGlzLl9lcnJvcnM9W10sdGhpcy5fY3JlYXRlSTE4bk1lc3NhZ2U9ZnVuY3Rpb24obil7bGV0IHQ9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fZXhwcmVzc2lvblBhcnNlcj10LHRoaXMuX2ludGVycG9sYXRpb25Db25maWc9ZX10b0kxOG5NZXNzYWdlKHQsZT0iIixpPSIiLHI9IiIsbyl7bGV0IHM9e2lzSWN1OjE9PXQubGVuZ3RoJiZ0WzBdaW5zdGFuY2VvZiBOXyxpY3VEZXB0aDowLHBsYWNlaG9sZGVyUmVnaXN0cnk6bmV3IFNWLHBsYWNlaG9sZGVyVG9Db250ZW50Ont9LHBsYWNlaG9sZGVyVG9NZXNzYWdlOnt9LHZpc2l0Tm9kZUZuOm98fFFFZX0sYT1VdSh0aGlzLHQscyk7cmV0dXJuIG5ldyBGdShhLHMucGxhY2Vob2xkZXJUb0NvbnRlbnQscy5wbGFjZWhvbGRlclRvTWVzc2FnZSxlLGkscil9dmlzaXRFbGVtZW50KHQsZSl7bGV0IGk9VXUodGhpcyx0LmNoaWxkcmVuLGUpLHI9e307dC5hdHRycy5mb3JFYWNoKGM9PntyW2MubmFtZV09Yy52YWx1ZX0pO2xldCBvPUZWKHQubmFtZSkuaXNWb2lkLHM9ZS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFN0YXJ0VGFnUGxhY2Vob2xkZXJOYW1lKHQubmFtZSxyLG8pO2UucGxhY2Vob2xkZXJUb0NvbnRlbnRbc109e3RleHQ6dC5zdGFydFNvdXJjZVNwYW4udG9TdHJpbmcoKSxzb3VyY2VTcGFuOnQuc3RhcnRTb3VyY2VTcGFufTtsZXQgYT0iIjtvfHwoYT1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0Q2xvc2VUYWdQbGFjZWhvbGRlck5hbWUodC5uYW1lKSxlLnBsYWNlaG9sZGVyVG9Db250ZW50W2FdPXt0ZXh0OmA8LyR7dC5uYW1lfT5gLHNvdXJjZVNwYW46dC5lbmRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW59KTtsZXQgbD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3RoaXMudGFnPXQsdGhpcy5hdHRycz1lLHRoaXMuc3RhcnROYW1lPWksdGhpcy5jbG9zZU5hbWU9cix0aGlzLmNoaWxkcmVuPW8sdGhpcy5pc1ZvaWQ9cyx0aGlzLnNvdXJjZVNwYW49YSx0aGlzLnN0YXJ0U291cmNlU3Bhbj1sLHRoaXMuZW5kU291cmNlU3Bhbj1jfXZpc2l0KHQsZSl7cmV0dXJuIHQudmlzaXRUYWdQbGFjZWhvbGRlcih0aGlzLGUpfX0odC5uYW1lLHIscyxhLGksbyx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGwpfXZpc2l0QXR0cmlidXRlKHQsZSl7bGV0IGk9dm9pZCAwPT09dC52YWx1ZVRva2Vuc3x8MT09PXQudmFsdWVUb2tlbnMubGVuZ3RoP25ldyBsXyh0LnZhbHVlLHQudmFsdWVTcGFufHx0LnNvdXJjZVNwYW4pOnRoaXMuX3Zpc2l0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKHQudmFsdWVUb2tlbnMsdC52YWx1ZVNwYW58fHQuc291cmNlU3BhbixlLHQuaTE4bik7cmV0dXJuIGUudmlzaXROb2RlRm4odCxpKX12aXNpdFRleHQodCxlKXtsZXQgaT0xPT09dC50b2tlbnMubGVuZ3RoP25ldyBsXyh0LnZhbHVlLHQuc291cmNlU3Bhbik6dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC50b2tlbnMsdC5zb3VyY2VTcGFuLGUsdC5pMThuKTtyZXR1cm4gZS52aXNpdE5vZGVGbih0LGkpfXZpc2l0Q29tbWVudCh0LGUpe3JldHVybiBudWxsfXZpc2l0RXhwYW5zaW9uKHQsZSl7ZS5pY3VEZXB0aCsrO2xldCBpPXt9LHI9bmV3IGFEKHQuc3dpdGNoVmFsdWUsdC50eXBlLGksdC5zb3VyY2VTcGFuKTtpZih0LmNhc2VzLmZvckVhY2goYT0+e2lbYS52YWx1ZV09bmV3IG1tKGEuZXhwcmVzc2lvbi5tYXAobD0+bC52aXNpdCh0aGlzLGUpKSxhLmV4cFNvdXJjZVNwYW4pfSksZS5pY3VEZXB0aC0tLGUuaXNJY3V8fGUuaWN1RGVwdGg+MCl7bGV0IGE9ZS5wbGFjZWhvbGRlclJlZ2lzdHJ5LmdldFVuaXF1ZVBsYWNlaG9sZGVyKGBWQVJfJHt0LnR5cGV9YCk7cmV0dXJuIHIuZXhwcmVzc2lvblBsYWNlaG9sZGVyPWEsZS5wbGFjZWhvbGRlclRvQ29udGVudFthXT17dGV4dDp0LnN3aXRjaFZhbHVlLHNvdXJjZVNwYW46dC5zd2l0Y2hWYWx1ZVNvdXJjZVNwYW59LGUudmlzaXROb2RlRm4odCxyKX1sZXQgbz1lLnBsYWNlaG9sZGVyUmVnaXN0cnkuZ2V0UGxhY2Vob2xkZXJOYW1lKCJJQ1UiLHQuc291cmNlU3Bhbi50b1N0cmluZygpKTtlLnBsYWNlaG9sZGVyVG9NZXNzYWdlW29dPXRoaXMudG9JMThuTWVzc2FnZShbdF0sIiIsIiIsIiIsdm9pZCAwKTtsZXQgcz1uZXcgVF8ocixvLHQuc291cmNlU3Bhbik7cmV0dXJuIGUudmlzaXROb2RlRm4odCxzKX12aXNpdEV4cGFuc2lvbkNhc2UodCxlKXt0aHJvdyBuZXcgRXJyb3IoIlVucmVhY2hhYmxlIGNvZGUiKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89W10scz0hMTtmb3IobGV0IGEgb2YgdClzd2l0Y2goYS50eXBlKXtjYXNlIDg6Y2FzZSAxNzpzPSEwO2xldCBsPWEucGFydHNbMV0sYz1sLnNwbGl0KCRFZSlbMl18fCJJTlRFUlBPTEFUSU9OIix1PWkucGxhY2Vob2xkZXJSZWdpc3RyeS5nZXRQbGFjZWhvbGRlck5hbWUoYyxsKTtpLnBsYWNlaG9sZGVyVG9Db250ZW50W3VdPXt0ZXh0OmEucGFydHMuam9pbigiIiksc291cmNlU3BhbjphLnNvdXJjZVNwYW59LG8ucHVzaChuZXcgbEQobCx1LGEuc291cmNlU3BhbikpO2JyZWFrO2RlZmF1bHQ6aWYoYS5wYXJ0c1swXS5sZW5ndGg+MCl7bGV0IGQ9b1tvLmxlbmd0aC0xXTtkIGluc3RhbmNlb2YgbF8/KGQudmFsdWUrPWEucGFydHNbMF0sZC5zb3VyY2VTcGFuPW5ldyBHbyhkLnNvdXJjZVNwYW4uc3RhcnQsYS5zb3VyY2VTcGFuLmVuZCxkLnNvdXJjZVNwYW4uZnVsbFN0YXJ0LGQuc291cmNlU3Bhbi5kZXRhaWxzKSk6by5wdXNoKG5ldyBsXyhhLnBhcnRzWzBdLGEuc291cmNlU3BhbikpfX1yZXR1cm4gcz8oZnVuY3Rpb24obix0KXtpZih0IGluc3RhbmNlb2YgRnUmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVzO2lmKDEhPT10Lmxlbmd0aHx8ISh0WzBdaW5zdGFuY2VvZiBtbSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHByZXZpb3VzIGkxOG4gbWVzc2FnZSAtIGV4cGVjdGVkIGl0IHRvIGNvbnNpc3Qgb2Ygb25seSBhIHNpbmdsZSBgQ29udGFpbmVyYCBub2RlLiIpfSh0KSx0PXQubm9kZXNbMF0pLHQgaW5zdGFuY2VvZiBtbSl7IWZ1bmN0aW9uKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBudW1iZXIgb2YgaTE4biBtZXNzYWdlIGNoaWxkcmVuIGNoYW5nZWQgYmV0d2VlbiBmaXJzdCBhbmQgc2Vjb25kIHBhc3MuIik7aWYobi5zb21lKChlLGkpPT50W2ldLmNvbnN0cnVjdG9yIT09ZS5jb25zdHJ1Y3RvcikpdGhyb3cgbmV3IEVycm9yKCJUaGUgdHlwZXMgb2YgdGhlIGkxOG4gbWVzc2FnZSBjaGlsZHJlbiBjaGFuZ2VkIGJldHdlZW4gZmlyc3QgYW5kIHNlY29uZCBwYXNzLiIpfSh0LmNoaWxkcmVuLG4pO2ZvcihsZXQgZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0uc291cmNlU3Bhbj10LmNoaWxkcmVuW2VdLnNvdXJjZVNwYW59fShvLHIpLG5ldyBtbShvLGUpKTpvWzBdfX0oWUVlLG4pO3JldHVybihlLGkscixvLHMpPT50LnRvSTE4bk1lc3NhZ2UoZSxpLHIsbyxzKX0odGhpcy5pbnRlcnBvbGF0aW9uQ29uZmlnKX1fZ2VuZXJhdGVJMThuTWVzc2FnZSh0LGU9IiIsaSl7bGV0e21lYW5pbmc6cixkZXNjcmlwdGlvbjpvLGN1c3RvbUlkOnN9PXRoaXMuX3BhcnNlTWV0YWRhdGEoZSksYT10aGlzLl9jcmVhdGVJMThuTWVzc2FnZSh0LHIsbyxzLGkpO3JldHVybiB0aGlzLl9zZXRNZXNzYWdlSWQoYSxlKSx0aGlzLl9zZXRMZWdhY3lJZHMoYSxlKSxhfXZpc2l0QWxsV2l0aEVycm9ycyh0KXtsZXQgZT10Lm1hcChpPT5pLnZpc2l0KHRoaXMsbnVsbCkpO3JldHVybiBuZXcgTUQoZSx0aGlzLl9lcnJvcnMpfXZpc2l0RWxlbWVudCh0KXtsZXQgZTtpZihmdW5jdGlvbihuKXtyZXR1cm4gbi5hdHRycy5zb21lKHQ9PmZ1bmN0aW9uKG4pe3JldHVybiJpMThuIj09PW58fG4uc3RhcnRzV2l0aChqQil9KHQubmFtZSkpfSh0KSl7dGhpcy5oYXNJMThuTWV0YT0hMDtsZXQgaT1bXSxyPXt9O2ZvcihsZXQgbyBvZiB0LmF0dHJzKWlmKCJpMThuIj09PW8ubmFtZSllPXRoaXMuX2dlbmVyYXRlSTE4bk1lc3NhZ2UodC5jaGlsZHJlbix0LmkxOG58fG8udmFsdWUsdDFlKSwwPT09ZS5ub2Rlcy5sZW5ndGgmJihlPXZvaWQgMCksdC5pMThuPWU7ZWxzZSBpZihvLm5hbWUuc3RhcnRzV2l0aChqQikpe2xldCBzPW8ubmFtZS5zbGljZShqQi5sZW5ndGgpO3hLKHQubmFtZSxzKT90aGlzLl9yZXBvcnRFcnJvcihvLGBUcmFuc2xhdGluZyBhdHRyaWJ1dGUgJyR7c30nIGlzIGRpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuYCk6cltzXT1vLnZhbHVlfWVsc2UgaS5wdXNoKG8pO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aClmb3IobGV0IG8gb2YgaSl7bGV0IHM9cltvLm5hbWVdO3ZvaWQgMCE9PXMmJm8udmFsdWUmJihvLmkxOG49dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZShbb10sby5pMThufHxzKSl9dGhpcy5rZWVwSTE4bkF0dHJzfHwodC5hdHRycz1pKX1yZXR1cm4gVXUodGhpcyx0LmNoaWxkcmVuLGUpLHR9dmlzaXRFeHBhbnNpb24odCxlKXtsZXQgaSxyPXQuaTE4bjtpZih0aGlzLmhhc0kxOG5NZXRhPSEwLHIgaW5zdGFuY2VvZiBUXyl7bGV0IG89ci5uYW1lO2k9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZShbdF0sciksV1EoaSkubmFtZT1vLG51bGwhPT1lJiYoZS5wbGFjZWhvbGRlclRvTWVzc2FnZVtvXT1pKX1lbHNlIGk9dGhpcy5fZ2VuZXJhdGVJMThuTWVzc2FnZShbdF0sZXx8cik7cmV0dXJuIHQuaTE4bj1pLHR9dmlzaXRUZXh0KHQpe3JldHVybiB0fXZpc2l0QXR0cmlidXRlKHQpe3JldHVybiB0fXZpc2l0Q29tbWVudCh0KXtyZXR1cm4gdH12aXNpdEV4cGFuc2lvbkNhc2UodCl7cmV0dXJuIHR9X3BhcnNlTWV0YWRhdGEodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKG49IiIpe2xldCB0LGUsaTtpZihuPW4udHJpbSgpKXtsZXQgcyxyPW4uaW5kZXhPZigiQEAiKSxvPW4uaW5kZXhPZigifCIpO1tzLHRdPXI+LTE/W24uc2xpY2UoMCxyKSxuLnNsaWNlKHIrMildOltuLCIiXSxbZSxpXT1vPi0xP1tzLnNsaWNlKDAsbykscy5zbGljZShvKzEpXTpbIiIsc119cmV0dXJue2N1c3RvbUlkOnQsbWVhbmluZzplLGRlc2NyaXB0aW9uOml9fSh0KTp0IGluc3RhbmNlb2YgRnU/dDp7fX1fc2V0TWVzc2FnZUlkKHQsZSl7dmFyIG47dC5pZHx8KHQuaWQ9ZSBpbnN0YW5jZW9mIEZ1JiZlLmlkfHwobj10KS5pZHx8RlEobikpfV9zZXRMZWdhY3lJZHModCxlKXtpZih0aGlzLmVuYWJsZUkxOG5MZWdhY3lNZXNzYWdlSWRGb3JtYXQpdC5sZWdhY3lJZHM9W1NNZSh0KSxGUSh0KV07ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGUpe2xldCBpPWUgaW5zdGFuY2VvZiBGdT9lOmUgaW5zdGFuY2VvZiBUXz9lLnByZXZpb3VzTWVzc2FnZTp2b2lkIDA7dC5sZWdhY3lJZHM9aT9pLmxlZ2FjeUlkczpbXX19X3JlcG9ydEVycm9yKHQsZSl7dGhpcy5fZXJyb3JzLnB1c2gobmV3IFRWKHQuc291cmNlU3BhbixlKSl9fTtmdW5jdGlvbiBhMWUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZXMubWFwKHQ9PnQudmlzaXQobDFlLG51bGwpKS5qb2luKCIiKX0odCksbz1baHQocildO09iamVjdC5rZXlzKGkpLmxlbmd0aCYmKG8ucHVzaCh3RChVVihpLCEwKSwhMCkpLG8ucHVzaCh3RCh7b3JpZ2luYWxfY29kZTpxbChPYmplY3Qua2V5cyhpKS5tYXAobD0+KHtrZXk6SkMobCkscXVvdGVkOiEwLHZhbHVlOmh0KHQucGxhY2Vob2xkZXJzW2xdP3QucGxhY2Vob2xkZXJzW2xdLnNvdXJjZVNwYW4udG9TdHJpbmcoKTp0LnBsYWNlaG9sZGVyVG9NZXNzYWdlW2xdLm5vZGVzLm1hcChjPT5jLnNvdXJjZVNwYW4udG9TdHJpbmcoKSkuam9pbigiIikpfSkpKX0pKSk7bGV0IHM9ZS5zZXQoUmkoImdvb2cuZ2V0TXNnIikuY2FsbEZuKG8pKS50b0NvbnN0RGVjbCgpO3JldHVybiBzLmFkZExlYWRpbmdDb21tZW50KGZ1bmN0aW9uKG4pe2xldCB0PVtdO3JldHVybiB0LnB1c2gobi5kZXNjcmlwdGlvbj97dGFnTmFtZToiZGVzYyIsdGV4dDpuLmRlc2NyaXB0aW9ufTp7dGFnTmFtZToic3VwcHJlc3MiLHRleHQ6Inttc2dEZXNjcmlwdGlvbnN9In0pLG4ubWVhbmluZyYmdC5wdXNoKHt0YWdOYW1lOiJtZWFuaW5nIix0ZXh0Om4ubWVhbmluZ30pLGZ1bmN0aW9uKG49W10pe3JldHVybiBuZXcgbkQobil9KHQpfSh0KSksW3MsbmV3IEh1KG4uc2V0KGUpKV19dmFyIGwxZT1uZXcgY2xhc3N7Zm9ybWF0UGgodCl7cmV0dXJuYHskJHtKQyh0KX19YH12aXNpdFRleHQodCl7cmV0dXJuIHQudmFsdWV9dmlzaXRDb250YWluZXIodCl7cmV0dXJuIHQuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfXZpc2l0SWN1KHQpe3JldHVybiBNSyh0KX12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe3JldHVybiB0LmlzVm9pZD90aGlzLmZvcm1hdFBoKHQuc3RhcnROYW1lKTpgJHt0aGlzLmZvcm1hdFBoKHQuc3RhcnROYW1lKX0ke3QuY2hpbGRyZW4ubWFwKGU9PmUudmlzaXQodGhpcykpLmpvaW4oIiIpfSR7dGhpcy5mb3JtYXRQaCh0LmNsb3NlTmFtZSl9YH12aXNpdFBsYWNlaG9sZGVyKHQpe3JldHVybiB0aGlzLmZvcm1hdFBoKHQubmFtZSl9dmlzaXRJY3VQbGFjZWhvbGRlcih0LGUpe3JldHVybiB0aGlzLmZvcm1hdFBoKHQubmFtZSl9fTtmdW5jdGlvbiB1MWUobix0LGUpe2xldHttZXNzYWdlUGFydHM6aSxwbGFjZUhvbGRlcnM6cn09ZnVuY3Rpb24obil7bGV0IHQ9W10sZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnBsYWNlaG9sZGVyVG9NZXNzYWdlPXQsdGhpcy5waWVjZXM9ZX12aXNpdFRleHQodCl7aWYodGhpcy5waWVjZXNbdGhpcy5waWVjZXMubGVuZ3RoLTFdaW5zdGFuY2VvZiBsbSl0aGlzLnBpZWNlc1t0aGlzLnBpZWNlcy5sZW5ndGgtMV0udGV4dCs9dC52YWx1ZTtlbHNle2xldCBlPW5ldyBHbyh0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5lbmQsdC5zb3VyY2VTcGFuLmZ1bGxTdGFydCx0LnNvdXJjZVNwYW4uZGV0YWlscyk7dGhpcy5waWVjZXMucHVzaChuZXcgbG0odC52YWx1ZSxlKSl9fXZpc2l0Q29udGFpbmVyKHQpe3QuY2hpbGRyZW4uZm9yRWFjaChlPT5lLnZpc2l0KHRoaXMpKX12aXNpdEljdSh0KXt0aGlzLnBpZWNlcy5wdXNoKG5ldyBsbShNSyh0KSx0LnNvdXJjZVNwYW4pKX12aXNpdFRhZ1BsYWNlaG9sZGVyKHQpe3RoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQuc3RhcnROYW1lLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pKSx0LmlzVm9pZHx8KHQuY2hpbGRyZW4uZm9yRWFjaChlPT5lLnZpc2l0KHRoaXMpKSx0aGlzLnBpZWNlcy5wdXNoKHRoaXMuY3JlYXRlUGxhY2Vob2xkZXJQaWVjZSh0LmNsb3NlTmFtZSx0LmVuZFNvdXJjZVNwYW4/P3Quc291cmNlU3BhbikpKX12aXNpdFBsYWNlaG9sZGVyKHQpe3RoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQubmFtZSx0LnNvdXJjZVNwYW4pKX12aXNpdEljdVBsYWNlaG9sZGVyKHQpe3RoaXMucGllY2VzLnB1c2godGhpcy5jcmVhdGVQbGFjZWhvbGRlclBpZWNlKHQubmFtZSx0LnNvdXJjZVNwYW4sdGhpcy5wbGFjZWhvbGRlclRvTWVzc2FnZVt0Lm5hbWVdKSl9Y3JlYXRlUGxhY2Vob2xkZXJQaWVjZSh0LGUsaSl7cmV0dXJuIG5ldyBoXyhKQyh0LCExKSxlLGkpfX0obi5wbGFjZWhvbGRlclRvTWVzc2FnZSx0KTtyZXR1cm4gbi5ub2Rlcy5mb3JFYWNoKGk9PmkudmlzaXQoZSkpLGZ1bmN0aW9uKG4pe2xldCB0PVtdLGU9W107blswXWluc3RhbmNlb2YgaF8mJnQucHVzaCh2QihuWzBdLnNvdXJjZVNwYW4uc3RhcnQpKTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krKyl7bGV0IHI9bltpXTtyIGluc3RhbmNlb2YgbG0/dC5wdXNoKHIpOihlLnB1c2gociksbltpLTFdaW5zdGFuY2VvZiBoXyYmdC5wdXNoKHZCKG5baS0xXS5zb3VyY2VTcGFuLmVuZCkpKX1yZXR1cm4gbltuLmxlbmd0aC0xXWluc3RhbmNlb2YgaF8mJnQucHVzaCh2QihuW24ubGVuZ3RoLTFdLnNvdXJjZVNwYW4uZW5kKSkse21lc3NhZ2VQYXJ0czp0LHBsYWNlSG9sZGVyczplfX0odCl9KHQpLG89ZnVuY3Rpb24obil7bGV0IHQ9bi5ub2Rlc1swXTtyZXR1cm4gbmV3IEdvKHQuc291cmNlU3Bhbi5mdWxsU3RhcnQsbi5ub2Rlc1tuLm5vZGVzLmxlbmd0aC0xXS5zb3VyY2VTcGFuLmVuZCx0LnNvdXJjZVNwYW4uZnVsbFN0YXJ0LHQuc291cmNlU3Bhbi5kZXRhaWxzKX0odCkscz1yLm1hcChjPT5lW2MudGV4dF0pLGE9ZnVuY3Rpb24obix0LGUsaSxyKXtyZXR1cm4gbmV3IEFCKG4sdCxlLGkscil9KHQsaSxyLHMsbyksbD1uLnNldChhKTtyZXR1cm5bbmV3IEh1KGwpXX1mdW5jdGlvbiB2QihuKXtyZXR1cm4gbmV3IGxtKCIiLG5ldyBHbyhuLG4pKX12YXIgd0s9bmV3IFNldChbIiRldmVudCJdKSx5Qj1uZXcgTWFwKFtbIndpbmRvdyIsdGUucmVzb2x2ZVdpbmRvd10sWyJkb2N1bWVudCIsdGUucmVzb2x2ZURvY3VtZW50XSxbImJvZHkiLHRlLnJlc29sdmVCb2R5XV0pLGcxZT1bIiAiLCJcbiIsIlxyIiwiXHQiXTtmdW5jdGlvbiBsaChuLHQpe3JldHVybiBWVihSaSgkQykuYml0d2lzZUFuZChodChuKSxudWxsLCExKSx0KX1mdW5jdGlvbiBTSyhuLHQ9bnVsbCxlPW51bGwpe2xldHt0eXBlOmksbmFtZTpyLHRhcmdldDpvLHBoYXNlOnMsaGFuZGxlcjphfT1uO2lmKG8mJiF5Qi5oYXMobykpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGdsb2JhbCB0YXJnZXQgJyR7b30nIGRlZmluZWQgZm9yICcke3J9JyBldmVudC5cbiAgICAgICAgU3VwcG9ydGVkIGxpc3Qgb2YgZ2xvYmFsIHRhcmdldHM6ICR7QXJyYXkuZnJvbSh5Qi5rZXlzKCkpfS5gKTtsZXQgbD0iJGV2ZW50IixjPW5ldyBTZXQsdT1udWxsPT09ZXx8MD09PWUuYmluZGluZ0xldmVsP1JpKEhjKTplLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKSxkPWNTZShlLHUsYSwiYiIsbi5oYW5kbGVyU3BhbixjLHdLKSxwPVtdLGg9ZT8udmFyaWFibGVEZWNsYXJhdGlvbnMoKSxmPWU/LnJlc3RvcmVWaWV3U3RhdGVtZW50KCk7aWYoaCYmcC5wdXNoKC4uLmgpLHAucHVzaCguLi5kKSxmKXtwLnVuc2hpZnQoZik7bGV0IFQ9cFtwLmxlbmd0aC0xXTtUIGluc3RhbmNlb2YgRG8/cFtwLmxlbmd0aC0xXT1uZXcgRG8oZ20oVC52YWx1ZS5zb3VyY2VTcGFuLHRlLnJlc2V0VmlldyxbVC52YWx1ZV0pKTpwLnB1c2gobmV3IEh1KGdtKG51bGwsdGUucmVzZXRWaWV3LFtdKSkpfWxldCBtPTE9PT1pP2Z1bmN0aW9uKG4sdCl7cmV0dXJuYEAke259LiR7dH1gfShyLHMpOnIseD10JiZtXyh0KSxnPVtdO2MuaGFzKGwpJiZnLnB1c2gobmV3IGlhKGwsVl8pKTtsZXQgYj1yYShnLHAsUGEsbnVsbCx4KSxEPVtodChtKSxiXTtyZXR1cm4gbyYmRC5wdXNoKGh0KCExKSxUbih5Qi5nZXQobykpKSxEfXZhciBLQz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaT0wLHIsbyxzLGEsbCxjLHUsZD1mdW5jdGlvbigpe3JldHVybntwcmVwYXJlU3RhdGVtZW50czpbXSxjb25zdEV4cHJlc3Npb25zOltdLGkxOG5WYXJSZWZzQ2FjaGU6bmV3IE1hcH19KCkpe3RoaXMuY29uc3RhbnRQb29sPXQsdGhpcy5sZXZlbD1pLHRoaXMuY29udGV4dE5hbWU9cix0aGlzLmkxOG5Db250ZXh0PW8sdGhpcy50ZW1wbGF0ZUluZGV4PXMsdGhpcy50ZW1wbGF0ZU5hbWU9YSx0aGlzLl9uYW1lc3BhY2U9bCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcz11LHRoaXMuX2NvbnN0YW50cz1kLHRoaXMuX2RhdGFJbmRleD0wLHRoaXMuX2JpbmRpbmdDb250ZXh0PTAsdGhpcy5fcHJlZml4Q29kZT1bXSx0aGlzLl9jcmVhdGlvbkNvZGVGbnM9W10sdGhpcy5fdXBkYXRlQ29kZUZucz1bXSx0aGlzLl9jdXJyZW50SW5kZXg9MCx0aGlzLl90ZW1wVmFyaWFibGVzPVtdLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zPVtdLHRoaXMuaTE4bj1udWxsLHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzPTAsdGhpcy5fYmluZGluZ1Nsb3RzPTAsdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cz1bXSx0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9MCx0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj1udWxsLHRoaXMudmlzaXRSZWZlcmVuY2U9aUMsdGhpcy52aXNpdFZhcmlhYmxlPWlDLHRoaXMudmlzaXRUZXh0QXR0cmlidXRlPWlDLHRoaXMudmlzaXRCb3VuZEF0dHJpYnV0ZT1pQyx0aGlzLnZpc2l0Qm91bmRFdmVudD1pQyx0aGlzLl9iaW5kaW5nU2NvcGU9ZS5uZXN0ZWRTY29wZShpKSx0aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXg9Yy5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywiXyIpKyJfIix0aGlzLl92YWx1ZUNvbnZlcnRlcj1uZXcgVEQodCwoKT0+dGhpcy5hbGxvY2F0ZURhdGFTbG90KCkscD0+dGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzKHApLChwLGgsZixtKT0+e3RoaXMuX2JpbmRpbmdTY29wZS5zZXQodGhpcy5sZXZlbCxoLG0pLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLHRlLnBpcGUsW2h0KGYpLGh0KHApXSl9KX1idWlsZFRlbXBsYXRlRnVuY3Rpb24odCxlLGk9MCxyKXt0aGlzLl9uZ0NvbnRlbnRTZWxlY3RvcnNPZmZzZXQ9aSx0aGlzLl9uYW1lc3BhY2UhPT10ZS5uYW1lc3BhY2VIVE1MJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24obnVsbCx0aGlzLl9uYW1lc3BhY2UpLGUuZm9yRWFjaChoPT50aGlzLnJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyhoKSk7bGV0IG89dGhpcy5pMThuQ29udGV4dHx8QUMocikmJiFWVChyKSYmISgxPT09KG49dCkubGVuZ3RoJiZuWzBdaW5zdGFuY2VvZiBFXyYmdFswXS5pMThuPT09cikscz1iQih0KTt2YXIgbjtpZihvJiZ0aGlzLmkxOG5TdGFydChudWxsLHIscyksQVgodGhpcyx0KSx0aGlzLl9wdXJlRnVuY3Rpb25TbG90cys9dGhpcy5fYmluZGluZ1Nsb3RzLHRoaXMuX3ZhbHVlQ29udmVydGVyLnVwZGF0ZVBpcGVTbG90T2Zmc2V0cyh0aGlzLl9iaW5kaW5nU2xvdHMpLHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zLmZvckVhY2goaD0+aCgpKSwwPT09dGhpcy5sZXZlbCYmdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGgpe2xldCBoPVtdO2lmKHRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoPjF8fCIqIiE9PXRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHNbMF0pe2xldCBmPXRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubWFwKG09PiIqIiE9PW0/TlYobSk6bSk7aC5wdXNoKHRoaXMuY29uc3RhbnRQb29sLmdldENvbnN0TGl0ZXJhbChOdShmKSwhMCkpfXRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihudWxsLHRlLnByb2plY3Rpb25EZWYsaCwhMCl9byYmdGhpcy5pMThuRW5kKG51bGwscyk7bGV0IGE9Y0QodGhpcy5fY3JlYXRpb25Db2RlRm5zKSxsPWNEKHRoaXMuX3VwZGF0ZUNvZGVGbnMpLGM9dGhpcy5fYmluZGluZ1Njb3BlLnZpZXdTbmFwc2hvdFN0YXRlbWVudHMoKSx1PXRoaXMuX2JpbmRpbmdTY29wZS52YXJpYWJsZURlY2xhcmF0aW9ucygpLmNvbmNhdCh0aGlzLl90ZW1wVmFyaWFibGVzKSxkPWEubGVuZ3RoPjA/W2xoKDEsYy5jb25jYXQoYSkpXTpbXSxwPWwubGVuZ3RoPjA/W2xoKDIsdS5jb25jYXQobCkpXTpbXTtyZXR1cm4gcmEoW25ldyBpYSgkQyxaQyksbmV3IGlhKEhjLG51bGwpXSxbLi4udGhpcy5fcHJlZml4Q29kZSwuLi5kLC4uLnBdLFBhLG51bGwsdGhpcy50ZW1wbGF0ZU5hbWUpfWdldExvY2FsKHQpe3JldHVybiB0aGlzLl9iaW5kaW5nU2NvcGUuZ2V0KHQpfW5vdGlmeUltcGxpY2l0UmVjZWl2ZXJVc2UoKXt0aGlzLl9iaW5kaW5nU2NvcGUubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpfW1heWJlUmVzdG9yZVZpZXcoKXt0aGlzLl9iaW5kaW5nU2NvcGUubWF5YmVSZXN0b3JlVmlldygpfWkxOG5UcmFuc2xhdGUodCxlPXt9LGkscil7bGV0IG89aXx8dGhpcy5pMThuR2VuZXJhdGVNYWluQmxvY2tWYXIoKSxhPWZ1bmN0aW9uKG4sdCxlLGk9e30scil7bGV0IG89W0V3ZSh0KSxWVihCVihSaShNUSkpLm5vdElkZW50aWNhbChodCgidW5kZWZpbmVkIixMUSkpLmFuZChSaShNUSkpLGExZSh0LG4sZSxpKSx1MWUodCxuLFVWKGksITEpKSldO3JldHVybiByJiZvLnB1c2gobmV3IEh1KHQuc2V0KHIodCkpKSksb30odCxvLHRoaXMuaTE4bkdlbmVyYXRlQ2xvc3VyZVZhcih0LmlkKSxlLHIpO3JldHVybiB0aGlzLl9jb25zdGFudHMucHJlcGFyZVN0YXRlbWVudHMucHVzaCguLi5hKSxvfXJlZ2lzdGVyQ29udGV4dFZhcmlhYmxlcyh0KXtsZXQgZT10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCksaT10aGlzLmxldmVsLHI9UmkodC5uYW1lK2UpO3RoaXMuX2JpbmRpbmdTY29wZS5zZXQoaSx0Lm5hbWUsciwxLChvLHMpPT57bGV0IGE7cmV0dXJuIG8uYmluZGluZ0xldmVsPT09aT9vLmlzTGlzdGVuZXJTY29wZSgpJiZvLmhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKT8oYT1SaShZUSksby5ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCkpOmE9UmkoSGMpOmE9by5nZXRTaGFyZWRDb250ZXh0TmFtZShpKXx8SVYocyksW3Iuc2V0KGEucHJvcCh0LnZhbHVlfHwiJGltcGxpY2l0IikpLnRvQ29uc3REZWNsKCldfSl9aTE4bkFwcGVuZEJpbmRpbmdzKHQpe3QubGVuZ3RoPjAmJnQuZm9yRWFjaChlPT50aGlzLmkxOG4uYXBwZW5kQmluZGluZyhlKSl9aTE4bkJpbmRQcm9wcyh0KXtsZXQgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChpPT57bGV0IHI9dFtpXTtpZihyIGluc3RhbmNlb2YgTV8pZVtpXT1odChyLnZhbHVlKTtlbHNle2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMobyksbyBpbnN0YW5jZW9mIHZzKXtsZXR7c3RyaW5nczpzLGV4cHJlc3Npb25zOmF9PW8se2lkOmwsYmluZGluZ3M6Y309dGhpcy5pMThuLHU9ZnVuY3Rpb24obix0PTAsZT0wKXtpZighbi5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9IiIscj1uLmxlbmd0aC0xO2ZvcihsZXQgbz0wO288cjtvKyspaSs9YCR7bltvXX0ke1BEKHQrbyxlKX1gO3JldHVybiBpKz1uW3JdLGl9KHMsYy5zaXplLGwpO3RoaXMuaTE4bkFwcGVuZEJpbmRpbmdzKGEpLGVbaV09aHQodSl9fX0pLGV9aTE4bkdlbmVyYXRlTWFpbkJsb2NrVmFyKCl7cmV0dXJuIFJpKHRoaXMuY29uc3RhbnRQb29sLnVuaXF1ZU5hbWUoImkxOG5fIikpfWkxOG5HZW5lcmF0ZUNsb3N1cmVWYXIodCl7bGV0IGUsaT10aGlzLmZpbGVCYXNlZEkxOG5TdWZmaXgudG9VcHBlckNhc2UoKTtpZih0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyl7bGV0IHI9UlgoIkVYVEVSTkFMXyIpLG89dGhpcy5jb25zdGFudFBvb2wudW5pcXVlTmFtZShpKTtlPWAke3J9JHttXyh0KX0kJCR7b31gfWVsc2V7bGV0IHI9UlgoaSk7ZT10aGlzLmNvbnN0YW50UG9vbC51bmlxdWVOYW1lKHIpfXJldHVybiBSaShlKX1pMThuVXBkYXRlUmVmKHQpe2xldHtpY3VzOmUsbWV0YTppLGlzUm9vdDpyLGlzUmVzb2x2ZWQ6byxpc0VtaXR0ZWQ6c309dDtpZihyJiZvJiYhcyYmIVZUKGkpKXt0LmlzRW1pdHRlZD0hMDtsZXQgZCxhPXQuZ2V0U2VyaWFsaXplZFBsYWNlaG9sZGVycygpLGw9e30sYz1hLnNpemU/UFgoYSk6e307ZS5zaXplJiZlLmZvckVhY2goKHAsaCk9PntpZigxPT09cC5sZW5ndGgpY1toXT1wWzBdO2Vsc2V7bGV0IGY9UEQoYEkxOE5fRVhQXyR7aH1gKTtjW2hdPWh0KGYpLGxbaF09X3IocCl9fSksKEFycmF5LmZyb20oYS52YWx1ZXMoKSkuc29tZShwPT5wLmxlbmd0aD4xKXx8T2JqZWN0LmtleXMobCkubGVuZ3RoKSYmKGQ9cD0+e2xldCBoPVtwXTtyZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiZoLnB1c2god0QobCwhMCkpLGdtKG51bGwsdGUuaTE4blBvc3Rwcm9jZXNzLGgpfSksdGhpcy5pMThuVHJhbnNsYXRlKGksYyx0LnJlZixkKX19aTE4blN0YXJ0KHQ9bnVsbCxlLGkpe2xldCByPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4bj10aGlzLmkxOG5Db250ZXh0P3RoaXMuaTE4bkNvbnRleHQuZm9ya0NoaWxkQ29udGV4dChyLHRoaXMudGVtcGxhdGVJbmRleCxlKTpuZXcgUUMocix0aGlzLmkxOG5HZW5lcmF0ZU1haW5CbG9ja1ZhcigpLDAsdGhpcy50ZW1wbGF0ZUluZGV4LGUpO2xldHtpZDpvLHJlZjpzfT10aGlzLmkxOG4sYT1baHQociksdGhpcy5hZGRUb0NvbnN0cyhzKV07bz4wJiZhLnB1c2goaHQobykpLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih0LGk/dGUuaTE4bjp0ZS5pMThuU3RhcnQsYSl9aTE4bkVuZCh0PW51bGwsZSl7aWYoIXRoaXMuaTE4bil0aHJvdyBuZXcgRXJyb3IoImkxOG5FbmQgaXMgZXhlY3V0ZWQgd2l0aCBubyBpMThuIGNvbnRleHQgcHJlc2VudCIpO3RoaXMuaTE4bkNvbnRleHQ/KHRoaXMuaTE4bkNvbnRleHQucmVjb25jaWxlQ2hpbGRDb250ZXh0KHRoaXMuaTE4biksdGhpcy5pMThuVXBkYXRlUmVmKHRoaXMuaTE4bkNvbnRleHQpKTp0aGlzLmkxOG5VcGRhdGVSZWYodGhpcy5pMThuKTtsZXR7aW5kZXg6aSxiaW5kaW5nczpyfT10aGlzLmkxOG47aWYoci5zaXplKXtmb3IobGV0IG8gb2Ygcil0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UodGhpcy5nZXRDb25zdENvdW50KCktMSx0LHRlLmkxOG5FeHAsKCk9PnRoaXMuY29udmVydFByb3BlcnR5QmluZGluZyhvKSk7dGhpcy51cGRhdGVJbnN0cnVjdGlvbih0LHRlLmkxOG5BcHBseSxbaHQoaSldKX1lfHx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odCx0ZS5pMThuRW5kKSx0aGlzLmkxOG49bnVsbH1pMThuQXR0cmlidXRlc0luc3RydWN0aW9uKHQsZSxpKXtsZXQgcj0hMSxvPVtdO2lmKGUuZm9yRWFjaChzPT57bGV0IGE9cy5pMThuLGw9cy52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhsKSxsIGluc3RhbmNlb2YgdnMpe2xldCB1PVBYKHFRKGEpKTtvLnB1c2goaHQocy5uYW1lKSx0aGlzLmkxOG5UcmFuc2xhdGUoYSx1KSksbC5leHByZXNzaW9ucy5mb3JFYWNoKGQ9PntyPSEwLHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LGksdGUuaTE4bkV4cCwoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKGQpKX0pfX0pLG8ubGVuZ3RoPjApe2xldCBzPWh0KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxhPXRoaXMuYWRkVG9Db25zdHMoX3IobykpO3RoaXMuY3JlYXRpb25JbnN0cnVjdGlvbihpLHRlLmkxOG5BdHRyaWJ1dGVzLFtzLGFdKSxyJiZ0aGlzLnVwZGF0ZUluc3RydWN0aW9uKGksdGUuaTE4bkFwcGx5LFtzXSl9fWdldE5hbWVzcGFjZUluc3RydWN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIm1hdGgiOnJldHVybiB0ZS5uYW1lc3BhY2VNYXRoTUw7Y2FzZSJzdmciOnJldHVybiB0ZS5uYW1lc3BhY2VTVkc7ZGVmYXVsdDpyZXR1cm4gdGUubmFtZXNwYWNlSFRNTH19YWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24odCxlKXt0aGlzLl9uYW1lc3BhY2U9dCx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24oZS5zdGFydFNvdXJjZVNwYW4sdCl9aW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24odCxlLGkscixvLHMpe3RoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHIuc291cmNlU3Bhbix0LCgpPT5baHQoaSksLi4udGhpcy5nZXRVcGRhdGVJbnN0cnVjdGlvbkFyZ3VtZW50cyhvKSwuLi5zXSl9dmlzaXRDb250ZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9dGhpcy5fbmdDb250ZW50U2VsZWN0b3JzT2Zmc2V0K3RoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoLHI9W2h0KGUpXTt0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2godC5zZWxlY3Rvcik7bGV0IG89dC5hdHRyaWJ1dGVzLmZpbHRlcihhPT4ic2VsZWN0IiE9PWEubmFtZS50b0xvd2VyQ2FzZSgpKSxzPXRoaXMuZ2V0QXR0cmlidXRlRXhwcmVzc2lvbnModC5uYW1lLG8sW10sW10pO3MubGVuZ3RoPjA/ci5wdXNoKGh0KGkpLF9yKHMpKTowIT09aSYmci5wdXNoKGh0KGkpKSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnByb2plY3Rpb24sciksdGhpcy5pMThuJiZ0aGlzLmkxOG4uYXBwZW5kUHJvamVjdGlvbih0LmkxOG4sZSl9dmlzaXRFbGVtZW50KHQpe2xldCBlPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpLGk9bmV3IHZEKG51bGwpLHI9ITEsbz1BQyh0LmkxOG4pJiYhVlQodC5pMThuKSxzPVtdLFthLGxdPUtkKHQubmFtZSksYz1DQih0Lm5hbWUpO2ZvcihsZXQgdWUgb2YgdC5hdHRyaWJ1dGVzKXtsZXR7bmFtZTpoZSx2YWx1ZTp3fT11ZTsibmdOb25CaW5kYWJsZSI9PT1oZT9yPSEwOiJzdHlsZSI9PT1oZT9pLnJlZ2lzdGVyU3R5bGVBdHRyKHcpOiJjbGFzcyI9PT1oZT9pLnJlZ2lzdGVyQ2xhc3NBdHRyKHcpOnMucHVzaCh1ZSl9bGV0IHU9W2h0KGUpXTtjfHx1LnB1c2goaHQobCkpO2xldCBkPVtdLHA9W107dC5pbnB1dHMuZm9yRWFjaCh1ZT0+e2kucmVnaXN0ZXJCb3VuZElucHV0KHVlKXx8KDA9PT11ZS50eXBlJiZ1ZS5pMThuP3AucHVzaCh1ZSk6ZC5wdXNoKHVlKSl9KTtsZXQgaD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKHQubmFtZSxzLGQsdC5vdXRwdXRzLGksW10scCk7dS5wdXNoKHRoaXMuYWRkQXR0cnNUb0NvbnN0cyhoKSk7bGV0IGY9dGhpcy5wcmVwYXJlUmVmc0FycmF5KHQucmVmZXJlbmNlcyk7dS5wdXNoKHRoaXMuYWRkVG9Db25zdHMoZikpO2xldCBtPXRoaXMuX25hbWVzcGFjZSx4PXRoaXMuZ2V0TmFtZXNwYWNlSW5zdHJ1Y3Rpb24oYSk7eCE9PW0mJnRoaXMuYWRkTmFtZXNwYWNlSW5zdHJ1Y3Rpb24oeCx0KSx0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlKTtsZXQgZz0hbyYmdGhpcy5pMThuPyFiQih0LmNoaWxkcmVuKTp0LmNoaWxkcmVuLmxlbmd0aD4wLGI9IWkuaGFzQmluZGluZ3NXaXRoUGlwZXMmJjA9PT10Lm91dHB1dHMubGVuZ3RoJiYwPT09cC5sZW5ndGgmJiFnLEQ9IWImJmJCKHQuY2hpbGRyZW4pO2lmKGIpdGhpcy5jcmVhdGlvbkluc3RydWN0aW9uKHQuc291cmNlU3BhbixjP3RlLmVsZW1lbnRDb250YWluZXI6dGUuZWxlbWVudCxzQih1KSk7ZWxzZXtpZih0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sYz90ZS5lbGVtZW50Q29udGFpbmVyU3RhcnQ6dGUuZWxlbWVudFN0YXJ0LHNCKHUpKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zdGFydFNvdXJjZVNwYW4sdGUuZGlzYWJsZUJpbmRpbmdzKSxwLmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oZSxwLHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLHQub3V0cHV0cy5sZW5ndGg+MClmb3IobGV0IHVlIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odWUuc291cmNlU3Bhbix0ZS5saXN0ZW5lcix0aGlzLnByZXBhcmVMaXN0ZW5lclBhcmFtZXRlcih0Lm5hbWUsdWUsZSkpO28mJnRoaXMuaTE4blN0YXJ0KHQuc3RhcnRTb3VyY2VTcGFuLHQuaTE4bixEKX1sZXQgVD1pLmJ1aWxkVXBkYXRlTGV2ZWxJbnN0cnVjdGlvbnModGhpcy5fdmFsdWVDb252ZXJ0ZXIpLGs9VC5sZW5ndGgtMTtmb3IobGV0IHVlPTA7dWU8PWs7dWUrKyl0aGlzLl9iaW5kaW5nU2xvdHMrPXRoaXMucHJvY2Vzc1N0eWxpbmdVcGRhdGVJbnN0cnVjdGlvbihlLFRbdWVdKTtsZXQgWj1odCh2b2lkIDApLHo9W10sZmU9W107ZC5mb3JFYWNoKHVlPT57bGV0IGhlPXVlLnR5cGU7aWYoND09PWhlKXtsZXQgdz11ZS52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlciksRj0hKHcgaW5zdGFuY2VvZiB0YSYmIXcudmFsdWUpO3RoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHModyksei5wdXNoKHtzcGFuOnVlLnNvdXJjZVNwYW4scGFyYW1zT3JGbjp6VCgoKT0+Rj90aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcodyk6Wix6USh1ZS5uYW1lKSl9KX1lbHNle2lmKHVlLmkxOG4pcmV0dXJuO2xldCB3PXVlLnZhbHVlLnZpc2l0KHRoaXMuX3ZhbHVlQ29udmVydGVyKTtpZih2b2lkIDAhPT13KXtsZXQgRj1bXSxbcSxLXT1LZCh1ZS5uYW1lKSxZPVRLKHVlLnNlY3VyaXR5Q29udGV4dCwxPT09aGUpO2lmKFkmJkYucHVzaChZKSxxKXtsZXQgYWU9aHQocSk7WT9GLnB1c2goYWUpOkYucHVzaChodChudWxsKSxhZSl9aWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyh3KSwwPT09aGUpdyBpbnN0YW5jZW9mIHZzP3RoaXMuaW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24oQ1EodyksZSxLLHVlLHcsRik6ei5wdXNoKHtzcGFuOnVlLnNvdXJjZVNwYW4scGFyYW1zT3JGbjp6VCgoKT0+dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHcpLEssRil9KTtlbHNlIGlmKDE9PT1oZSlpZih3IGluc3RhbmNlb2YgdnMmJndtKHcpPjEpdGhpcy5pbnRlcnBvbGF0ZWRVcGRhdGVJbnN0cnVjdGlvbihmdW5jdGlvbihuKXtzd2l0Y2god20obikpe2Nhc2UgMzpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUyO2Nhc2UgNzpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLmF0dHJpYnV0ZUludGVycG9sYXRlNTtjYXNlIDEzOnJldHVybiB0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gdGUuYXR0cmlidXRlSW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLmF0dHJpYnV0ZUludGVycG9sYXRlODtkZWZhdWx0OnJldHVybiB0ZS5hdHRyaWJ1dGVJbnRlcnBvbGF0ZVZ9fSh3KSxlLEssdWUsdyxGKTtlbHNle2xldCBhZT13IGluc3RhbmNlb2YgdnM/dy5leHByZXNzaW9uc1swXTp3O2ZlLnB1c2goe3NwYW46dWUuc291cmNlU3BhbixwYXJhbXNPckZuOnpUKCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcoYWUpLEssRil9KX1lbHNlIHRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHVlLnNvdXJjZVNwYW4sdGUuY2xhc3NQcm9wLCgpPT5baHQoZSksaHQoSyksdGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHcpLC4uLkZdKX19fSk7Zm9yKGxldCB1ZSBvZiB6KXRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZShlLHVlLnNwYW4sdGUucHJvcGVydHksdWUucGFyYW1zT3JGbik7Zm9yKGxldCB1ZSBvZiBmZSl0aGlzLnVwZGF0ZUluc3RydWN0aW9uV2l0aEFkdmFuY2UoZSx1ZS5zcGFuLHRlLmF0dHJpYnV0ZSx1ZS5wYXJhbXNPckZuKTtpZihBWCh0aGlzLHQuY2hpbGRyZW4pLCFvJiZ0aGlzLmkxOG4mJnRoaXMuaTE4bi5hcHBlbmRFbGVtZW50KHQuaTE4bixlLCEwKSwhYil7bGV0IHVlPXQuZW5kU291cmNlU3Bhbj8/dC5zb3VyY2VTcGFuO28mJnRoaXMuaTE4bkVuZCh1ZSxEKSxyJiZ0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odWUsdGUuZW5hYmxlQmluZGluZ3MpLHRoaXMuY3JlYXRpb25JbnN0cnVjdGlvbih1ZSxjP3RlLmVsZW1lbnRDb250YWluZXJFbmQ6dGUuZWxlbWVudEVuZCl9fXZpc2l0VGVtcGxhdGUodCl7bGV0IGU9Im5nLXRlbXBsYXRlIixpPXRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpO3RoaXMuaTE4biYmdGhpcy5pMThuLmFwcGVuZFRlbXBsYXRlKHQuaTE4bixpKTtsZXQgcj10LnRhZ05hbWU/S2QodC50YWdOYW1lKVsxXTp0LnRhZ05hbWUsbz1gJHt0aGlzLmNvbnRleHROYW1lfSR7dC50YWdOYW1lPyJfIittXyh0LnRhZ05hbWUpOiIifV8ke2l9YCxzPWAke299X1RlbXBsYXRlYCxhPVtodChpKSxSaShzKSxodChyKV0sbD10aGlzLmdldEF0dHJpYnV0ZUV4cHJlc3Npb25zKGUsdC5hdHRyaWJ1dGVzLHQuaW5wdXRzLHQub3V0cHV0cyx2b2lkIDAsdC50ZW1wbGF0ZUF0dHJzKTtpZihhLnB1c2godGhpcy5hZGRBdHRyc1RvQ29uc3RzKGwpKSx0LnJlZmVyZW5jZXMmJnQucmVmZXJlbmNlcy5sZW5ndGgpe2xldCB1PXRoaXMucHJlcGFyZVJlZnNBcnJheSh0LnJlZmVyZW5jZXMpO2EucHVzaCh0aGlzLmFkZFRvQ29uc3RzKHUpKSxhLnB1c2goVG4odGUudGVtcGxhdGVSZWZFeHRyYWN0b3IpKX1sZXQgYz1uZXcgS0ModGhpcy5jb25zdGFudFBvb2wsdGhpcy5fYmluZGluZ1Njb3BlLHRoaXMubGV2ZWwrMSxvLHRoaXMuaTE4bixpLHMsdGhpcy5fbmFtZXNwYWNlLHRoaXMuZmlsZUJhc2VkSTE4blN1ZmZpeCx0aGlzLmkxOG5Vc2VFeHRlcm5hbElkcyx0aGlzLl9jb25zdGFudHMpO2lmKHRoaXMuX25lc3RlZFRlbXBsYXRlRm5zLnB1c2goKCk9PntsZXQgdT1jLmJ1aWxkVGVtcGxhdGVGdW5jdGlvbih0LmNoaWxkcmVuLHQudmFyaWFibGVzLHRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoK3RoaXMuX25nQ29udGVudFNlbGVjdG9yc09mZnNldCx0LmkxOG4pO3RoaXMuY29uc3RhbnRQb29sLnN0YXRlbWVudHMucHVzaCh1LnRvRGVjbFN0bXQocykpLGMuX25nQ29udGVudFJlc2VydmVkU2xvdHMubGVuZ3RoJiZ0aGlzLl9uZ0NvbnRlbnRSZXNlcnZlZFNsb3RzLnB1c2goLi4uYy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cyl9KSx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnRlbXBsYXRlQ3JlYXRlLCgpPT4oYS5zcGxpY2UoMiwwLGh0KGMuZ2V0Q29uc3RDb3VudCgpKSxodChjLmdldFZhckNvdW50KCkpKSxzQihhKSkpLHRoaXMudGVtcGxhdGVQcm9wZXJ0eUJpbmRpbmdzKGksdC50ZW1wbGF0ZUF0dHJzKSxyPT09ZSl7bGV0W3UsZF09ZnVuY3Rpb24obix0KXtsZXQgZT1bXSxpPVtdO2ZvcihsZXQgciBvZiBuKSh0KHIpP2U6aSkucHVzaChyKTtyZXR1cm5bZSxpXX0odC5pbnB1dHMsQ3dlKTt1Lmxlbmd0aD4wJiZ0aGlzLmkxOG5BdHRyaWJ1dGVzSW5zdHJ1Y3Rpb24oaSx1LHQuc3RhcnRTb3VyY2VTcGFuPz90LnNvdXJjZVNwYW4pLGQubGVuZ3RoPjAmJnRoaXMudGVtcGxhdGVQcm9wZXJ0eUJpbmRpbmdzKGksZCk7Zm9yKGxldCBwIG9mIHQub3V0cHV0cyl0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24ocC5zb3VyY2VTcGFuLHRlLmxpc3RlbmVyLHRoaXMucHJlcGFyZUxpc3RlbmVyUGFyYW1ldGVyKCJuZ190ZW1wbGF0ZSIscCxpKSl9fXZpc2l0Qm91bmRUZXh0KHQpe2lmKHRoaXMuaTE4bil7bGV0IHI9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7cmV0dXJuIHRoaXMuYWxsb2NhdGVCaW5kaW5nU2xvdHMociksdm9pZChyIGluc3RhbmNlb2YgdnMmJih0aGlzLmkxOG4uYXBwZW5kQm91bmRUZXh0KHQuaTE4biksdGhpcy5pMThuQXBwZW5kQmluZGluZ3Moci5leHByZXNzaW9ucykpKX1sZXQgZT10aGlzLmFsbG9jYXRlRGF0YVNsb3QoKTt0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnRleHQsW2h0KGUpXSk7bGV0IGk9dC52YWx1ZS52aXNpdCh0aGlzLl92YWx1ZUNvbnZlcnRlcik7dGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhpKSxpIGluc3RhbmNlb2YgdnM/dGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKGUsdC5zb3VyY2VTcGFuLGZ1bmN0aW9uKG4pe3N3aXRjaCh3bShuKSl7Y2FzZSAxOnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGU7Y2FzZSAzOnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGUxO2Nhc2UgNTpyZXR1cm4gdGUudGV4dEludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIHRlLnRleHRJbnRlcnBvbGF0ZTM7Y2FzZSA5OnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGU0O2Nhc2UgMTE6cmV0dXJuIHRlLnRleHRJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gdGUudGV4dEludGVycG9sYXRlNjtjYXNlIDE1OnJldHVybiB0ZS50ZXh0SW50ZXJwb2xhdGU3O2Nhc2UgMTc6cmV0dXJuIHRlLnRleHRJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gdGUudGV4dEludGVycG9sYXRlVn19KGkpLCgpPT50aGlzLmdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKGkpKTpRVCgiVGV4dCBub2RlcyBzaG91bGQgYmUgaW50ZXJwb2xhdGVkIGFuZCBuZXZlciBib3VuZCBkaXJlY3RseS4iKX12aXNpdFRleHQodCl7dGhpcy5pMThufHx0aGlzLmNyZWF0aW9uSW5zdHJ1Y3Rpb24odC5zb3VyY2VTcGFuLHRlLnRleHQsW2h0KHRoaXMuYWxsb2NhdGVEYXRhU2xvdCgpKSxodCh0LnZhbHVlKV0pfXZpc2l0SWN1KHQpe2xldCBlPSExO3RoaXMuaTE4bnx8KGU9ITAsdGhpcy5pMThuU3RhcnQobnVsbCx0LmkxOG4sITApKTtsZXQgaT10aGlzLmkxOG4scj10aGlzLmkxOG5CaW5kUHJvcHModC52YXJzKSxvPXRoaXMuaTE4bkJpbmRQcm9wcyh0LnBsYWNlaG9sZGVycykscz10LmkxOG4sYT1sPT57bGV0IHU9VVYoey4uLnIsLi4ub30sITEpO3JldHVybiBnbShudWxsLHRlLmkxOG5Qb3N0cHJvY2VzcyxbbCx3RCh1LCEwKV0pfTtpZihWVChpLm1ldGEpKXRoaXMuaTE4blRyYW5zbGF0ZShzLHt9LGkucmVmLGEpO2Vsc2V7bGV0IGw9dGhpcy5pMThuVHJhbnNsYXRlKHMse30sdm9pZCAwLGEpO2kuYXBwZW5kSWN1KFdRKHMpLm5hbWUsbCl9cmV0dXJuIGUmJnRoaXMuaTE4bkVuZChudWxsLCEwKSxudWxsfWFsbG9jYXRlRGF0YVNsb3QoKXtyZXR1cm4gdGhpcy5fZGF0YUluZGV4Kyt9Z2V0Q29uc3RDb3VudCgpe3JldHVybiB0aGlzLl9kYXRhSW5kZXh9Z2V0VmFyQ291bnQoKXtyZXR1cm4gdGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHN9Z2V0Q29uc3RzKCl7cmV0dXJuIHRoaXMuX2NvbnN0YW50c31nZXROZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5fbmdDb250ZW50UmVzZXJ2ZWRTbG90cy5sZW5ndGg/dGhpcy5jb25zdGFudFBvb2wuZ2V0Q29uc3RMaXRlcmFsKE51KHRoaXMuX25nQ29udGVudFJlc2VydmVkU2xvdHMpLCEwKTpudWxsfWJpbmRpbmdDb250ZXh0KCl7cmV0dXJuIiIrdGhpcy5fYmluZGluZ0NvbnRleHQrK310ZW1wbGF0ZVByb3BlcnR5QmluZGluZ3ModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgZSl7aWYoIShyIGluc3RhbmNlb2Ygd18pKWNvbnRpbnVlO2xldCBvPXIudmFsdWUudmlzaXQodGhpcy5fdmFsdWVDb252ZXJ0ZXIpO2lmKHZvaWQgMCE9PW8paWYodGhpcy5hbGxvY2F0ZUJpbmRpbmdTbG90cyhvKSxvIGluc3RhbmNlb2YgdnMpe2xldCBzPVtdO3RoaXMuaW50ZXJwb2xhdGVkVXBkYXRlSW5zdHJ1Y3Rpb24oQ1EobyksdCxyLm5hbWUscixvLHMpfWVsc2UgaS5wdXNoKHtzcGFuOnIuc291cmNlU3BhbixwYXJhbXNPckZuOnpUKCgpPT50aGlzLmNvbnZlcnRQcm9wZXJ0eUJpbmRpbmcobyksci5uYW1lKX0pfWZvcihsZXQgciBvZiBpKXRoaXMudXBkYXRlSW5zdHJ1Y3Rpb25XaXRoQWR2YW5jZSh0LHIuc3Bhbix0ZS5wcm9wZXJ0eSxyLnBhcmFtc09yRm4pfWluc3RydWN0aW9uRm4odCxlLGkscixvPSExKXt0W28/InVuc2hpZnQiOiJwdXNoIl0oe3NwYW46ZSxyZWZlcmVuY2U6aSxwYXJhbXNPckZuOnJ9KX1wcm9jZXNzU3R5bGluZ1VwZGF0ZUluc3RydWN0aW9uKHQsZSl7bGV0IGk9MDtpZihlKWZvcihsZXQgciBvZiBlLmNhbGxzKWkrPXIuYWxsb2NhdGVCaW5kaW5nU2xvdHMsdGhpcy51cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsci5zb3VyY2VTcGFuLGUucmVmZXJlbmNlLCgpPT5yLnBhcmFtcyhvPT5yLnN1cHBvcnRzSW50ZXJwb2xhdGlvbiYmbyBpbnN0YW5jZW9mIHZzP3RoaXMuZ2V0VXBkYXRlSW5zdHJ1Y3Rpb25Bcmd1bWVudHMobyk6dGhpcy5jb252ZXJ0UHJvcGVydHlCaW5kaW5nKG8pKSk7cmV0dXJuIGl9Y3JlYXRpb25JbnN0cnVjdGlvbih0LGUsaSxyKXt0aGlzLmluc3RydWN0aW9uRm4odGhpcy5fY3JlYXRpb25Db2RlRm5zLHQsZSxpfHxbXSxyKX11cGRhdGVJbnN0cnVjdGlvbldpdGhBZHZhbmNlKHQsZSxpLHIpe3RoaXMuYWRkQWR2YW5jZUluc3RydWN0aW9uSWZOZWNlc3NhcnkodCxlKSx0aGlzLnVwZGF0ZUluc3RydWN0aW9uKGUsaSxyKX11cGRhdGVJbnN0cnVjdGlvbih0LGUsaSl7dGhpcy5pbnN0cnVjdGlvbkZuKHRoaXMuX3VwZGF0ZUNvZGVGbnMsdCxlLGl8fFtdKX1hZGRBZHZhbmNlSW5zdHJ1Y3Rpb25JZk5lY2Vzc2FyeSh0LGUpe2lmKHQhPT10aGlzLl9jdXJyZW50SW5kZXgpe2xldCBpPXQtdGhpcy5fY3VycmVudEluZGV4O2lmKGk8MSl0aHJvdyBuZXcgRXJyb3IoImFkdmFuY2UgaW5zdHJ1Y3Rpb24gY2FuIG9ubHkgZ28gZm9yd2FyZHMiKTt0aGlzLmluc3RydWN0aW9uRm4odGhpcy5fdXBkYXRlQ29kZUZucyxlLHRlLmFkdmFuY2UsW2h0KGkpXSksdGhpcy5fY3VycmVudEluZGV4PXR9fWFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHModCl7bGV0IGU9dGhpcy5fcHVyZUZ1bmN0aW9uU2xvdHM7cmV0dXJuIHRoaXMuX3B1cmVGdW5jdGlvblNsb3RzKz10LGV9YWxsb2NhdGVCaW5kaW5nU2xvdHModCl7dGhpcy5fYmluZGluZ1Nsb3RzKz10IGluc3RhbmNlb2YgdnM/dC5leHByZXNzaW9ucy5sZW5ndGg6MX1nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpe3JldHVybiB0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj90aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcjp0aGlzLl9pbXBsaWNpdFJlY2VpdmVyRXhwcj0wPT09dGhpcy5sZXZlbD9SaShIYyk6dGhpcy5fYmluZGluZ1Njb3BlLmdldE9yQ3JlYXRlU2hhcmVkQ29udGV4dFZhcigwKX1jb252ZXJ0UHJvcGVydHlCaW5kaW5nKHQpe2xldCBlPXVLKHRoaXMsdGhpcy5nZXRJbXBsaWNpdFJlY2VpdmVyRXhwcigpLHQsdGhpcy5iaW5kaW5nQ29udGV4dCgpKSxpPWUuY3VyclZhbEV4cHI7cmV0dXJuIHRoaXMuX3RlbXBWYXJpYWJsZXMucHVzaCguLi5lLnN0bXRzKSxpfWdldFVwZGF0ZUluc3RydWN0aW9uQXJndW1lbnRzKHQpe2xldHthcmdzOmUsc3RtdHM6aX09ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9bmV3IEdDKG4sdCxpLCEwKSxvPXIudmlzaXRJbnRlcnBvbGF0aW9uKGUsemkuRXhwcmVzc2lvbik7cmV0dXJuIHIudXNlc0ltcGxpY2l0UmVjZWl2ZXImJm4ubm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpLHtzdG10czpkSyhyLGkpLGFyZ3M6by5hcmdzfX0odGhpcyx0aGlzLmdldEltcGxpY2l0UmVjZWl2ZXJFeHByKCksdCx0aGlzLmJpbmRpbmdDb250ZXh0KCkpO3JldHVybiB0aGlzLl90ZW1wVmFyaWFibGVzLnB1c2goLi4uaSksZX1nZXRBdHRyaWJ1dGVFeHByZXNzaW9ucyh0LGUsaSxyLG8scz1bXSxhPVtdKXtsZXQgdSxsPW5ldyBTZXQsYz1bXTtmb3IobGV0IHAgb2YgZSlpZigibmdQcm9qZWN0QXMiPT09cC5uYW1lJiYodT1wKSxwLmkxOG4pe2xldCBmLHtpMThuVmFyUmVmc0NhY2hlOmh9PXRoaXMuX2NvbnN0YW50cztoLmhhcyhwLmkxOG4pP2Y9aC5nZXQocC5pMThuKTooZj10aGlzLmkxOG5UcmFuc2xhdGUocC5pMThuKSxoLnNldChwLmkxOG4sZikpLGMucHVzaChodChwLm5hbWUpLGYpfWVsc2UgYy5wdXNoKC4uLnhRKHAubmFtZSksRTFlKHQscCkpO2Z1bmN0aW9uIGQocCxoKXsic3RyaW5nIj09dHlwZW9mIHA/bC5oYXMocCl8fChjLnB1c2goLi4ueFEocCkpLHZvaWQgMCE9PWgmJmMucHVzaChoKSxsLmFkZChwKSk6Yy5wdXNoKGh0KHApKX1pZih1JiZjLnB1c2goLi4uZnVuY3Rpb24obil7bGV0IHQ9TlYobi52YWx1ZSlbMF07cmV0dXJuW2h0KDUpLE51KHQpXX0odSkpLG8mJm8ucG9wdWxhdGVJbml0aWFsU3R5bGluZ0F0dHJzKGMpLGkubGVuZ3RofHxyLmxlbmd0aCl7bGV0IHA9Yy5sZW5ndGg7Zm9yKGxldCBoPTA7aDxpLmxlbmd0aDtoKyspe2xldCBmPWlbaF07NCE9PWYudHlwZSYmMSE9PWYudHlwZSYmZChmLm5hbWUpfWZvcihsZXQgaD0wO2g8ci5sZW5ndGg7aCsrKXtsZXQgZj1yW2hdOzEhPT1mLnR5cGUmJmQoZi5uYW1lKX1jLmxlbmd0aCE9PXAmJmMuc3BsaWNlKHAsMCxodCgzKSl9cmV0dXJuIHMubGVuZ3RoJiYoYy5wdXNoKGh0KDQpKSxzLmZvckVhY2gocD0+ZChwLm5hbWUpKSksYS5sZW5ndGgmJihjLnB1c2goaHQoNikpLGEuZm9yRWFjaChwPT5kKHAubmFtZSkpKSxjfWFkZFRvQ29uc3RzKHQpe2lmKFZRKHQpKXJldHVybiBXVDtsZXQgZT10aGlzLl9jb25zdGFudHMuY29uc3RFeHByZXNzaW9ucztmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlzRXF1aXZhbGVudCh0KSlyZXR1cm4gaHQoaSk7cmV0dXJuIGh0KGUucHVzaCh0KS0xKX1hZGRBdHRyc1RvQ29uc3RzKHQpe3JldHVybiB0Lmxlbmd0aD4wP3RoaXMuYWRkVG9Db25zdHMoX3IodCkpOldUfXByZXBhcmVSZWZzQXJyYXkodCl7cmV0dXJuIHQmJjAhPT10Lmxlbmd0aD9OdShESyh0Lm1hcChpPT57bGV0IHI9dGhpcy5hbGxvY2F0ZURhdGFTbG90KCksbz10aGlzLl9iaW5kaW5nU2NvcGUuZnJlc2hSZWZlcmVuY2VOYW1lKCkscz10aGlzLmxldmVsLGE9Umkobyk7cmV0dXJuIHRoaXMuX2JpbmRpbmdTY29wZS5zZXQocyxpLm5hbWUsYSwwLChsLGMpPT57bGV0IHU9Yz4wP1tJVihjKS50b1N0bXQoKV06W10sZD1hLnNldChUbih0ZS5yZWZlcmVuY2UpLmNhbGxGbihbaHQocildKSk7cmV0dXJuIHUuY29uY2F0KGQudG9Db25zdERlY2woKSl9LCEwKSxbaS5uYW1lLGkudmFsdWVdfSkpKTpXVH1wcmVwYXJlTGlzdGVuZXJQYXJhbWV0ZXIodCxlLGkpe3JldHVybigpPT57bGV0IHI9ZS5uYW1lLG89MT09PWUudHlwZT9qUShyLGUucGhhc2UpOm1fKHIpLHM9YCR7dGhpcy50ZW1wbGF0ZU5hbWV9XyR7dH1fJHtvfV8ke2l9X2xpc3RlbmVyYCxhPXRoaXMuX2JpbmRpbmdTY29wZS5uZXN0ZWRTY29wZSh0aGlzLl9iaW5kaW5nU2NvcGUuYmluZGluZ0xldmVsLHdLKTtyZXR1cm4gU0soZSxzLGEpfX19LFREPWNsYXNzIGV4dGVuZHMgJEJ7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoKSx0aGlzLmNvbnN0YW50UG9vbD10LHRoaXMuYWxsb2NhdGVTbG90PWUsdGhpcy5hbGxvY2F0ZVB1cmVGdW5jdGlvblNsb3RzPWksdGhpcy5kZWZpbmVQaXBlPXIsdGhpcy5fcGlwZUJpbmRFeHBycz1bXX12aXNpdFBpcGUodCxlKXtsZXQgaT10aGlzLmFsbG9jYXRlU2xvdCgpLHI9YFBJUEU6JHtpfWAsbz10aGlzLmFsbG9jYXRlUHVyZUZ1bmN0aW9uU2xvdHMoMit0LmFyZ3MubGVuZ3RoKSxzPW5ldyBMdSh0LnNwYW4sdC5zb3VyY2VTcGFuLHQubmFtZVNwYW4sbmV3IHhtKHQuc3Bhbix0LnNvdXJjZVNwYW4pLHIpLHtpZGVudGlmaWVyOmEsaXNWYXJMZW5ndGg6bH09ZnVuY3Rpb24obil7bGV0IHQ9djFlW24ubGVuZ3RoXTtyZXR1cm57aWRlbnRpZmllcjp0fHx0ZS5waXBlQmluZFYsaXNWYXJMZW5ndGg6IXR9fSh0LmFyZ3MpO3RoaXMuZGVmaW5lUGlwZSh0Lm5hbWUscixpLFRuKGEpKTtsZXQgYz1bdC5leHAsLi4udC5hcmdzXSx1PXRoaXMudmlzaXRBbGwobD9bbmV3IE9fKHQuc3Bhbix0LnNvdXJjZVNwYW4sYyldOmMpLGQ9bmV3IGFoKHQuc3Bhbix0LnNvdXJjZVNwYW4scyxbbmV3IHRhKHQuc3Bhbix0LnNvdXJjZVNwYW4saSksbmV3IHRhKHQuc3Bhbix0LnNvdXJjZVNwYW4sbyksLi4udV0sbnVsbCk7cmV0dXJuIHRoaXMuX3BpcGVCaW5kRXhwcnMucHVzaChkKSxkfXVwZGF0ZVBpcGVTbG90T2Zmc2V0cyh0KXt0aGlzLl9waXBlQmluZEV4cHJzLmZvckVhY2goZT0+e2UuYXJnc1sxXS52YWx1ZSs9dH0pfXZpc2l0TGl0ZXJhbEFycmF5KHQsZSl7cmV0dXJuIG5ldyByaCh0LnNwYW4sdC5zb3VyY2VTcGFuLHRoaXMudmlzaXRBbGwodC5leHByZXNzaW9ucyksaT0+e2xldCByPV9yKGkpO3JldHVybiBiUSh0aGlzLmNvbnN0YW50UG9vbCxyLHRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cyl9KX12aXNpdExpdGVyYWxNYXAodCxlKXtyZXR1cm4gbmV3IHJoKHQuc3Bhbix0LnNvdXJjZVNwYW4sdGhpcy52aXNpdEFsbCh0LnZhbHVlcyksaT0+e2xldCByPXFsKGkubWFwKChvLHMpPT4oe2tleTp0LmtleXNbc10ua2V5LHZhbHVlOm8scXVvdGVkOnQua2V5c1tzXS5xdW90ZWR9KSkpO3JldHVybiBiUSh0aGlzLmNvbnN0YW50UG9vbCxyLHRoaXMuYWxsb2NhdGVQdXJlRnVuY3Rpb25TbG90cyl9KX19LHYxZT1bdGUucGlwZUJpbmQxLHRlLnBpcGVCaW5kMix0ZS5waXBlQmluZDMsdGUucGlwZUJpbmQ0XSxiMWU9W3RlLnB1cmVGdW5jdGlvbjAsdGUucHVyZUZ1bmN0aW9uMSx0ZS5wdXJlRnVuY3Rpb24yLHRlLnB1cmVGdW5jdGlvbjMsdGUucHVyZUZ1bmN0aW9uNCx0ZS5wdXJlRnVuY3Rpb241LHRlLnB1cmVGdW5jdGlvbjYsdGUucHVyZUZ1bmN0aW9uNyx0ZS5wdXJlRnVuY3Rpb244XTtmdW5jdGlvbiBJVihuKXtyZXR1cm4gVG4odGUubmV4dENvbnRleHQpLmNhbGxGbihuPjE/W2h0KG4pXTpbXSl9ZnVuY3Rpb24gYlEobix0LGUpe2xldHtsaXRlcmFsRmFjdG9yeTppLGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOnJ9PW4uZ2V0TGl0ZXJhbEZhY3RvcnkodCksbz1lKDErci5sZW5ndGgpLHtpZGVudGlmaWVyOnMsaXNWYXJMZW5ndGg6YX09ZnVuY3Rpb24obil7bGV0IHQ9YjFlW24ubGVuZ3RoXTtyZXR1cm57aWRlbnRpZmllcjp0fHx0ZS5wdXJlRnVuY3Rpb25WLGlzVmFyTGVuZ3RoOiF0fX0ociksbD1baHQobyksaV07cmV0dXJuIGE/bC5wdXNoKF9yKHIpKTpsLnB1c2goLi4uciksVG4ocykuY2FsbEZuKGwpfWZ1bmN0aW9uIHhRKG4pe2xldFt0LGVdPUtkKG4pLGk9aHQoZSk7cmV0dXJuIHQ/W2h0KDApLGh0KHQpLGldOltpXX12YXIgb189IiQkc2hhcmVkX2N0eCQkIixCXz1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT1udWxsLGkpe2lmKHRoaXMuYmluZGluZ0xldmVsPXQsdGhpcy5wYXJlbnQ9ZSx0aGlzLmdsb2JhbHM9aSx0aGlzLm1hcD1uZXcgTWFwLHRoaXMucmVmZXJlbmNlTmFtZUluZGV4PTAsdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlPW51bGwsdGhpcy51c2VzUmVzdG9yZWRWaWV3Q29udGV4dD0hMSx2b2lkIDAhPT1pKWZvcihsZXQgciBvZiBpKXRoaXMuc2V0KDAscixSaShyKSl9c3RhdGljIGNyZWF0ZVJvb3RTY29wZSgpe3JldHVybiBuZXcgQl99Z2V0KHQpe2xldCBlPXRoaXM7Zm9yKDtlOyl7bGV0IGk9ZS5tYXAuZ2V0KHQpO2lmKG51bGwhPWkpcmV0dXJuIGUhPT10aGlzJiYoaT17cmV0cmlldmFsTGV2ZWw6aS5yZXRyaWV2YWxMZXZlbCxsaHM6aS5saHMsZGVjbGFyZUxvY2FsQ2FsbGJhY2s6aS5kZWNsYXJlTG9jYWxDYWxsYmFjayxkZWNsYXJlOiExLHByaW9yaXR5OmkucHJpb3JpdHl9LHRoaXMubWFwLnNldCh0LGkpLHRoaXMubWF5YmVHZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIoaSksdGhpcy5tYXliZVJlc3RvcmVWaWV3KCkpLGkuZGVjbGFyZUxvY2FsQ2FsbGJhY2smJiFpLmRlY2xhcmUmJihpLmRlY2xhcmU9ITApLGkubGhzO2U9ZS5wYXJlbnR9cmV0dXJuIDA9PT10aGlzLmJpbmRpbmdMZXZlbD9udWxsOnRoaXMuZ2V0Q29tcG9uZW50UHJvcGVydHkodCl9c2V0KHQsZSxpLHI9MCxvLHMpe2lmKHRoaXMubWFwLmhhcyhlKSl7aWYocylyZXR1cm4gdGhpcztRVChgVGhlIG5hbWUgJHtlfSBpcyBhbHJlYWR5IGRlZmluZWQgaW4gc2NvcGUgdG8gYmUgJHt0aGlzLm1hcC5nZXQoZSl9YCl9cmV0dXJuIHRoaXMubWFwLnNldChlLHtyZXRyaWV2YWxMZXZlbDp0LGxoczppLGRlY2xhcmU6ITEsZGVjbGFyZUxvY2FsQ2FsbGJhY2s6byxwcmlvcml0eTpyfSksdGhpc31nZXRMb2NhbCh0KXtyZXR1cm4gdGhpcy5nZXQodCl9bm90aWZ5SW1wbGljaXRSZWNlaXZlclVzZSgpezAhPT10aGlzLmJpbmRpbmdMZXZlbCYmKHRoaXMubWFwLmdldChvXyswKS5kZWNsYXJlPSEwKX1uZXN0ZWRTY29wZSh0LGUpe2xldCBpPW5ldyBCXyh0LHRoaXMsZSk7cmV0dXJuIHQ+MCYmaS5nZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIoMCksaX1nZXRPckNyZWF0ZVNoYXJlZENvbnRleHRWYXIodCl7bGV0IGU9b18rdDtyZXR1cm4gdGhpcy5tYXAuaGFzKGUpfHx0aGlzLmdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0KSx0aGlzLm1hcC5nZXQoZSkubGhzfWdldFNoYXJlZENvbnRleHROYW1lKHQpe2xldCBlPXRoaXMubWFwLmdldChvXyt0KTtyZXR1cm4gZSYmZS5kZWNsYXJlP2UubGhzOm51bGx9bWF5YmVHZW5lcmF0ZVNoYXJlZENvbnRleHRWYXIodCl7aWYoMT09PXQucHJpb3JpdHkmJnQucmV0cmlldmFsTGV2ZWw8dGhpcy5iaW5kaW5nTGV2ZWwpe2xldCBlPXRoaXMubWFwLmdldChvXyt0LnJldHJpZXZhbExldmVsKTtlP2UuZGVjbGFyZT0hMDp0aGlzLmdlbmVyYXRlU2hhcmVkQ29udGV4dFZhcih0LnJldHJpZXZhbExldmVsKX19Z2VuZXJhdGVTaGFyZWRDb250ZXh0VmFyKHQpe2xldCBlPVJpKEhjK3RoaXMuZnJlc2hSZWZlcmVuY2VOYW1lKCkpO3RoaXMubWFwLnNldChvXyt0LHtyZXRyaWV2YWxMZXZlbDp0LGxoczplLGRlY2xhcmVMb2NhbENhbGxiYWNrOihpLHIpPT5bZS5zZXQoSVYocikpLnRvQ29uc3REZWNsKCldLGRlY2xhcmU6ITEscHJpb3JpdHk6Mn0pfWdldENvbXBvbmVudFByb3BlcnR5KHQpe2xldCBlPXRoaXMubWFwLmdldChvXyswKTtyZXR1cm4gZS5kZWNsYXJlPSEwLHRoaXMubWF5YmVSZXN0b3JlVmlldygpLGUubGhzLnByb3AodCl9bWF5YmVSZXN0b3JlVmlldygpe3RoaXMuaXNMaXN0ZW5lclNjb3BlKCkmJih0aGlzLnBhcmVudC5yZXN0b3JlVmlld1ZhcmlhYmxlfHwodGhpcy5wYXJlbnQucmVzdG9yZVZpZXdWYXJpYWJsZT1SaSh0aGlzLnBhcmVudC5mcmVzaFJlZmVyZW5jZU5hbWUoKSkpLHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZT10aGlzLnBhcmVudC5yZXN0b3JlVmlld1ZhcmlhYmxlKX1yZXN0b3JlVmlld1N0YXRlbWVudCgpe2lmKHRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZSl7bGV0IHQ9Z20obnVsbCx0ZS5yZXN0b3JlVmlldyxbdGhpcy5yZXN0b3JlVmlld1ZhcmlhYmxlXSk7cmV0dXJuIHRoaXMudXNlc1Jlc3RvcmVkVmlld0NvbnRleHQ/UmkoWVEpLnNldCh0KS50b0NvbnN0RGVjbCgpOnQudG9TdG10KCl9cmV0dXJuIG51bGx9dmlld1NuYXBzaG90U3RhdGVtZW50cygpe3JldHVybiB0aGlzLnJlc3RvcmVWaWV3VmFyaWFibGU/W3RoaXMucmVzdG9yZVZpZXdWYXJpYWJsZS5zZXQoZ20obnVsbCx0ZS5nZXRDdXJyZW50VmlldyxbXSkpLnRvQ29uc3REZWNsKCldOltdfWlzTGlzdGVuZXJTY29wZSgpe3JldHVybiB0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuYmluZGluZ0xldmVsPT09dGhpcy5iaW5kaW5nTGV2ZWx9dmFyaWFibGVEZWNsYXJhdGlvbnMoKXtsZXQgdD0wO3JldHVybiBBcnJheS5mcm9tKHRoaXMubWFwLnZhbHVlcygpKS5maWx0ZXIoZT0+ZS5kZWNsYXJlKS5zb3J0KChlLGkpPT5pLnJldHJpZXZhbExldmVsLWUucmV0cmlldmFsTGV2ZWx8fGkucHJpb3JpdHktZS5wcmlvcml0eSkucmVkdWNlKChlLGkpPT57bGV0IHI9dGhpcy5iaW5kaW5nTGV2ZWwtaS5yZXRyaWV2YWxMZXZlbCxvPWkuZGVjbGFyZUxvY2FsQ2FsbGJhY2sodGhpcyxyLXQpO3JldHVybiB0PXIsZS5jb25jYXQobyl9LFtdKX1mcmVzaFJlZmVyZW5jZU5hbWUoKXtsZXQgdD10aGlzO2Zvcig7dC5wYXJlbnQ7KXQ9dC5wYXJlbnQ7cmV0dXJuIl9yIit0LnJlZmVyZW5jZU5hbWVJbmRleCsrfWhhc1Jlc3RvcmVWaWV3VmFyaWFibGUoKXtyZXR1cm4hIXRoaXMucmVzdG9yZVZpZXdWYXJpYWJsZX1ub3RpZnlSZXN0b3JlZFZpZXdDb250ZXh0VXNlKCl7dGhpcy51c2VzUmVzdG9yZWRWaWV3Q29udGV4dD0hMH19O2Z1bmN0aW9uIENRKG4pe3N3aXRjaCh3bShuKSl7Y2FzZSAxOnJldHVybiB0ZS5wcm9wZXJ0eUludGVycG9sYXRlO2Nhc2UgMzpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTE7Y2FzZSA1OnJldHVybiB0ZS5wcm9wZXJ0eUludGVycG9sYXRlMjtjYXNlIDc6cmV0dXJuIHRlLnByb3BlcnR5SW50ZXJwb2xhdGUzO2Nhc2UgOTpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTQ7Y2FzZSAxMTpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTU7Y2FzZSAxMzpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTY7Y2FzZSAxNTpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTc7Y2FzZSAxNzpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZTg7ZGVmYXVsdDpyZXR1cm4gdGUucHJvcGVydHlJbnRlcnBvbGF0ZVZ9fWZ1bmN0aW9uIFMxZShuLHQsZT17fSl7bGV0e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZW5hYmxlSTE4bkxlZ2FjeU1lc3NhZ2VJZEZvcm1hdDpvfT1lLHM9REQoaSksbD0obmV3IF9WKS5wYXJzZShuLHQse2xlYWRpbmdUcml2aWFDaGFyczpnMWUsLi4uZSx0b2tlbml6ZUV4cGFuc2lvbkZvcm1zOiEwfSk7aWYoIWUuYWx3YXlzQXR0ZW1wdEh0bWxUb1IzQXN0Q29udmVyc2lvbiYmbC5lcnJvcnMmJmwuZXJyb3JzLmxlbmd0aD4wKXtsZXQgRD17aW50ZXJwb2xhdGlvbkNvbmZpZzppLHByZXNlcnZlV2hpdGVzcGFjZXM6cixlcnJvcnM6bC5lcnJvcnMsbm9kZXM6W10sc3R5bGVVcmxzOltdLHN0eWxlczpbXSxuZ0NvbnRlbnRTZWxlY3RvcnM6W119O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJihELmNvbW1lbnROb2Rlcz1bXSksRH1sZXQgYz1sLnJvb3ROb2Rlcyx1PW5ldyBFRChpLCFyLG8pLGQ9dS52aXNpdEFsbFdpdGhFcnJvcnMoYyk7aWYoIWUuYWx3YXlzQXR0ZW1wdEh0bWxUb1IzQXN0Q29udmVyc2lvbiYmZC5lcnJvcnMmJmQuZXJyb3JzLmxlbmd0aD4wKXtsZXQgRD17aW50ZXJwb2xhdGlvbkNvbmZpZzppLHByZXNlcnZlV2hpdGVzcGFjZXM6cixlcnJvcnM6ZC5lcnJvcnMsbm9kZXM6W10sc3R5bGVVcmxzOltdLHN0eWxlczpbXSxuZ0NvbnRlbnRTZWxlY3RvcnM6W119O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJihELmNvbW1lbnROb2Rlcz1bXSksRH1jPWQucm9vdE5vZGVzLHJ8fChjPVV1KG5ldyBjbGFzc3t2aXNpdEVsZW1lbnQodCxlKXtyZXR1cm4gbEVlLmhhcyh0Lm5hbWUpfHx0LmF0dHJzLnNvbWUodD0+dC5uYW1lPT09Z0spP25ldyBxQyh0Lm5hbWUsVXUodGhpcyx0LmF0dHJzKSx0LmNoaWxkcmVuLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKTpuZXcgcUModC5uYW1lLHQuYXR0cnMsZnVuY3Rpb24obix0KXtsZXQgZT1bXTtyZXR1cm4gdC5mb3JFYWNoKChpLHIpPT57bGV0IHM9aS52aXNpdChuLHtwcmV2OnRbci0xXSxuZXh0OnRbcisxXX0pO3MmJmUucHVzaChzKX0pLGV9KHRoaXMsdC5jaGlsZHJlbiksdC5zb3VyY2VTcGFuLHQuc3RhcnRTb3VyY2VTcGFuLHQuZW5kU291cmNlU3Bhbix0LmkxOG4pfXZpc2l0QXR0cmlidXRlKHQsZSl7cmV0dXJuIHQubmFtZSE9PWdLP3Q6bnVsbH12aXNpdFRleHQodCxlKXtpZih0LnZhbHVlLm1hdGNoKGNFZSl8fGUmJihlLnByZXYgaW5zdGFuY2VvZiBOX3x8ZS5uZXh0IGluc3RhbmNlb2YgTl8pKXtsZXQgbz10LnRva2Vucy5tYXAoYT0+NT09PWEudHlwZT9mdW5jdGlvbih7dHlwZTpuLHBhcnRzOnQsc291cmNlU3BhbjplfSl7cmV0dXJue3R5cGU6bixwYXJ0czpbeUsodFswXSldLHNvdXJjZVNwYW46ZX19KGEpOmEpLHM9eUsodC52YWx1ZSk7cmV0dXJuIG5ldyBGXyhzLHQuc291cmNlU3BhbixvLHQuaTE4bil9cmV0dXJuIG51bGx9dmlzaXRDb21tZW50KHQsZSl7cmV0dXJuIHR9dmlzaXRFeHBhbnNpb24odCxlKXtyZXR1cm4gdH12aXNpdEV4cGFuc2lvbkNhc2UodCxlKXtyZXR1cm4gdH19LGMpLHUuaGFzSTE4bk1ldGEmJihjPVV1KG5ldyBFRChpLCExKSxjKSkpO2xldHtub2RlczpwLGVycm9yczpoLHN0eWxlVXJsczpmLHN0eWxlczptLG5nQ29udGVudFNlbGVjdG9yczp4LGNvbW1lbnROb2RlczpnfT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5iaW5kaW5nUGFyc2VyPXQsdGhpcy5vcHRpb25zPWUsdGhpcy5lcnJvcnM9W10sdGhpcy5zdHlsZXM9W10sdGhpcy5zdHlsZVVybHM9W10sdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9W10sdGhpcy5jb21tZW50Tm9kZXM9W10sdGhpcy5pbkkxOG5CbG9jaz0hMX12aXNpdEVsZW1lbnQodCl7bGV0IGU9QUModC5pMThuKTtlJiYodGhpcy5pbkkxOG5CbG9jayYmdGhpcy5yZXBvcnRFcnJvcigiQ2Fubm90IG1hcmsgYW4gZWxlbWVudCBhcyB0cmFuc2xhdGFibGUgaW5zaWRlIG9mIGEgdHJhbnNsYXRhYmxlIHNlY3Rpb24uIFBsZWFzZSByZW1vdmUgdGhlIG5lc3RlZCBpMThuIG1hcmtlci4iLHQuc291cmNlU3BhbiksdGhpcy5pbkkxOG5CbG9jaz0hMCk7bGV0IGk9Q0sodCk7aWYoaS50eXBlPT09bmEuU0NSSVBUKXJldHVybiBudWxsO2lmKGkudHlwZT09PW5hLlNUWUxFKXtsZXQgeD0xPT09KG49dCkuY2hpbGRyZW4ubGVuZ3RoJiZuLmNoaWxkcmVuWzBdaW5zdGFuY2VvZiBGXz9uLmNoaWxkcmVuWzBdLnZhbHVlOm51bGw7cmV0dXJuIG51bGwhPT14JiZ0aGlzLnN0eWxlcy5wdXNoKHgpLG51bGx9aWYoaS50eXBlPT09bmEuU1RZTEVTSEVFVCYmZnVuY3Rpb24obil7aWYobnVsbD09bnx8MD09PW4ubGVuZ3RofHwiLyI9PW5bMF0pcmV0dXJuITE7bGV0IHQ9bi5tYXRjaChFRWUpO3JldHVybiBudWxsPT09dHx8InBhY2thZ2UiPT10WzFdfHwiYXNzZXQiPT10WzFdfShpLmhyZWZBdHRyKSlyZXR1cm4gdGhpcy5zdHlsZVVybHMucHVzaChpLmhyZWZBdHRyKSxudWxsO3ZhciBuO2xldCByPWZ1bmN0aW9uKG4pe3JldHVybiJuZy10ZW1wbGF0ZSI9PT1LZChuKVsxXX0odC5uYW1lKSxvPVtdLHM9W10sYT1bXSxsPVtdLGM9W10sdT17fSxkPVtdLHA9W10saD0hMTtmb3IobGV0IHggb2YgdC5hdHRycyl7bGV0IGc9ITEsYj1fUSh4Lm5hbWUpLEQ9ITE7aWYoeC5pMThuJiYodVt4Lm5hbWVdPXguaTE4biksYi5zdGFydHNXaXRoKCIqIikpe2gmJnRoaXMucmVwb3J0RXJyb3IoIkNhbid0IGhhdmUgbXVsdGlwbGUgdGVtcGxhdGUgYmluZGluZ3Mgb24gb25lIGVsZW1lbnQuIFVzZSBvbmx5IG9uZSBhdHRyaWJ1dGUgcHJlZml4ZWQgd2l0aCAqIix4LnNvdXJjZVNwYW4pLEQ9ITAsaD0hMDtsZXQgVD14LnZhbHVlLGs9Yi5zdWJzdHJpbmcoIioiLmxlbmd0aCksWj1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbmxpbmVUZW1wbGF0ZUJpbmRpbmcoayxULHguc291cmNlU3Bhbix4LnZhbHVlU3Bhbj94LnZhbHVlU3Bhbi5zdGFydC5vZmZzZXQ6eC5zb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldCt4Lm5hbWUubGVuZ3RoLFtdLGQsWiwhMCkscC5wdXNoKC4uLloubWFwKGZlPT5uZXcgb0QoZmUubmFtZSxmZS52YWx1ZSxmZS5zb3VyY2VTcGFuLGZlLmtleVNwYW4sZmUudmFsdWVTcGFuKSkpfWVsc2UgZz10aGlzLnBhcnNlQXR0cmlidXRlKHIseCxbXSxvLHMsYSxsKTshZyYmIUQmJmMucHVzaCh0aGlzLnZpc2l0QXR0cmlidXRlKHgpKX1sZXQgbSxmPVV1KGkubm9uQmluZGFibGU/SEVlOnRoaXMsdC5jaGlsZHJlbik7aWYoaS50eXBlPT09bmEuTkdfQ09OVEVOVCl7dC5jaGlsZHJlbiYmIXQuY2hpbGRyZW4uZXZlcnkoYj0+ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiBGXyYmMD09bi52YWx1ZS50cmltKCkubGVuZ3RofShiKXx8ZnVuY3Rpb24obil7cmV0dXJuIG4gaW5zdGFuY2VvZiB4RH0oYikpJiZ0aGlzLnJlcG9ydEVycm9yKCI8bmctY29udGVudD4gZWxlbWVudCBjYW5ub3QgaGF2ZSBjb250ZW50LiIsdC5zb3VyY2VTcGFuKTtsZXQgeD1pLnNlbGVjdEF0dHIsZz10LmF0dHJzLm1hcChiPT50aGlzLnZpc2l0QXR0cmlidXRlKGIpKTttPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnNlbGVjdG9yPXQsdGhpcy5hdHRyaWJ1dGVzPWUsdGhpcy5zb3VyY2VTcGFuPWksdGhpcy5pMThuPXIsdGhpcy5uYW1lPSJuZy1jb250ZW50In12aXNpdCh0KXtyZXR1cm4gdC52aXNpdENvbnRlbnQodGhpcyl9fSh4LGcsdC5zb3VyY2VTcGFuLHQuaTE4biksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnMucHVzaCh4KX1lbHNlIGlmKHIpe2xldCB4PXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXModC5uYW1lLG8sdSk7bT1uZXcgdUModC5uYW1lLGMseC5ib3VuZCxzLFtdLGYsbCxhLHQuc291cmNlU3Bhbix0LnN0YXJ0U291cmNlU3Bhbix0LmVuZFNvdXJjZVNwYW4sdC5pMThuKX1lbHNle2xldCB4PXRoaXMuZXh0cmFjdEF0dHJpYnV0ZXModC5uYW1lLG8sdSk7bT1uZXcgRV8odC5uYW1lLGMseC5ib3VuZCxzLGYsbCx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHQuaTE4bil9aWYoaCl7bGV0IHg9dGhpcy5leHRyYWN0QXR0cmlidXRlcygibmctdGVtcGxhdGUiLGQsdSksZz1bXTt4LmxpdGVyYWwuZm9yRWFjaChrPT5nLnB1c2goaykpLHguYm91bmQuZm9yRWFjaChrPT5nLnB1c2goaykpO2xldCBiPW0gaW5zdGFuY2VvZiBFXz97YXR0cmlidXRlczptLmF0dHJpYnV0ZXMsaW5wdXRzOm0uaW5wdXRzLG91dHB1dHM6bS5vdXRwdXRzfTp7YXR0cmlidXRlczpbXSxpbnB1dHM6W10sb3V0cHV0czpbXX07bT1uZXcgdUMobSBpbnN0YW5jZW9mIHVDP251bGw6bS5uYW1lLGIuYXR0cmlidXRlcyxiLmlucHV0cyxiLm91dHB1dHMsZyxbbV0sW10scCx0LnNvdXJjZVNwYW4sdC5zdGFydFNvdXJjZVNwYW4sdC5lbmRTb3VyY2VTcGFuLHImJmU/dm9pZCAwOnQuaTE4bil9cmV0dXJuIGUmJih0aGlzLmluSTE4bkJsb2NrPSExKSxtfXZpc2l0QXR0cmlidXRlKHQpe3JldHVybiBuZXcgREModC5uYW1lLHQudmFsdWUsdC5zb3VyY2VTcGFuLHQua2V5U3Bhbix0LnZhbHVlU3Bhbix0LmkxOG4pfXZpc2l0VGV4dCh0KXtyZXR1cm4gdGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odC52YWx1ZSx0LnNvdXJjZVNwYW4sdC50b2tlbnMsdC5pMThuKX12aXNpdEV4cGFuc2lvbih0KXtpZighdC5pMThuKXJldHVybiBudWxsO2lmKCFBQyh0LmkxOG4pKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlICIke3QuaTE4bi5jb25zdHJ1Y3Rvcn0iIGZvciAiaTE4biIgcHJvcGVydHkgb2YgJHt0LnNvdXJjZVNwYW4udG9TdHJpbmcoKX0uIEV4cGVjdGVkIGEgIk1lc3NhZ2UiYCk7bGV0IGU9dC5pMThuLGk9e30scj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZS5wbGFjZWhvbGRlcnMpLmZvckVhY2gobz0+e2xldCBzPWUucGxhY2Vob2xkZXJzW29dO2lmKG8uc3RhcnRzV2l0aCgiVkFSXyIpKXtsZXQgYT1vLnRyaW0oKSxsPXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHMudGV4dCxzLnNvdXJjZVNwYW4pO2lbYV09bmV3IFRDKGwscy5zb3VyY2VTcGFuKX1lbHNlIHJbb109dGhpcy5fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24ocy50ZXh0LHMuc291cmNlU3BhbixudWxsKX0pLG5ldyBzRChpLHIsdC5zb3VyY2VTcGFuLGUpfXZpc2l0RXhwYW5zaW9uQ2FzZSh0KXtyZXR1cm4gbnVsbH12aXNpdENvbW1lbnQodCl7cmV0dXJuIHRoaXMub3B0aW9ucy5jb2xsZWN0Q29tbWVudE5vZGVzJiZ0aGlzLmNvbW1lbnROb2Rlcy5wdXNoKG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMudmFsdWU9dCx0aGlzLnNvdXJjZVNwYW49ZX12aXNpdCh0KXt0aHJvdyBuZXcgRXJyb3IoInZpc2l0KCkgbm90IGltcGxlbWVudGVkIGZvciBDb21tZW50Iil9fSh0LnZhbHVlfHwiIix0LnNvdXJjZVNwYW4pKSxudWxsfWV4dHJhY3RBdHRyaWJ1dGVzKHQsZSxpKXtsZXQgcj1bXSxvPVtdO3JldHVybiBlLmZvckVhY2gocz0+e2xldCBhPWlbcy5uYW1lXTtpZihzLmlzTGl0ZXJhbClvLnB1c2gobmV3IERDKHMubmFtZSxzLmV4cHJlc3Npb24uc291cmNlfHwiIixzLnNvdXJjZVNwYW4scy5rZXlTcGFuLHMudmFsdWVTcGFuLGEpKTtlbHNle2xldCBsPXRoaXMuYmluZGluZ1BhcnNlci5jcmVhdGVCb3VuZEVsZW1lbnRQcm9wZXJ0eSh0LHMsITAsITEpO3IucHVzaCh3Xy5mcm9tQm91bmRFbGVtZW50UHJvcGVydHkobCxhKSl9fSkse2JvdW5kOnIsbGl0ZXJhbDpvfX1wYXJzZUF0dHJpYnV0ZSh0LGUsaSxyLG8scyxhKXtsZXQgbD1fUShlLm5hbWUpLGM9ZS52YWx1ZSx1PWUuc291cmNlU3BhbixkPWUudmFsdWVTcGFuP2UudmFsdWVTcGFuLnN0YXJ0Lm9mZnNldDp1LnN0YXJ0Lm9mZnNldDtmdW5jdGlvbiBwKGcsYixEKXtsZXQgaz1nLnN0YXJ0Lm1vdmVCeShiLmxlbmd0aCsoZS5uYW1lLmxlbmd0aC1sLmxlbmd0aCkpLFo9ay5tb3ZlQnkoRC5sZW5ndGgpO3JldHVybiBuZXcgR28oayxaLGssRCl9bGV0IGg9bC5tYXRjaChMRWUpO2lmKGgpe2lmKG51bGwhPWhbMV0pe2xldCBnPWhbN10sYj1wKHUsaFsxXSxnKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoZyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIsYil9ZWxzZSBpZihoWzJdKWlmKHQpe2xldCBnPWhbN10sYj1wKHUsaFsyXSxnKTt0aGlzLnBhcnNlVmFyaWFibGUoZyxjLHUsYixlLnZhbHVlU3BhbixzKX1lbHNlIHRoaXMucmVwb3J0RXJyb3IoJyJsZXQtIiBpcyBvbmx5IHN1cHBvcnRlZCBvbiBuZy10ZW1wbGF0ZSBlbGVtZW50cy4nLHUpO2Vsc2UgaWYoaFszXSl7bGV0IGc9aFs3XSxiPXAodSxoWzNdLGcpO3RoaXMucGFyc2VSZWZlcmVuY2UoZyxjLHUsYixlLnZhbHVlU3BhbixhKX1lbHNlIGlmKGhbNF0pe2xldCBnPVtdLGI9aFs3XSxEPXAodSxoWzRdLGIpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZUV2ZW50KGIsYywhMSx1LGUudmFsdWVTcGFufHx1LGksZyxEKSxtQihnLG8pfWVsc2UgaWYoaFs1XSl7bGV0IGc9aFs3XSxiPXAodSxoWzVdLGcpO3RoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhnLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscixiKSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KGcsYyx1LGUudmFsdWVTcGFuLGksbyxiKX1lbHNlIGlmKGhbNl0pe2xldCBnPXAodSwiIixsKTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VMaXRlcmFsQXR0cihsLGMsdSxkLGUudmFsdWVTcGFuLGkscixnKX1yZXR1cm4hMH1sZXQgZj1udWxsO2lmKGwuc3RhcnRzV2l0aChacF9CQU5BTkFfQk9YLnN0YXJ0KT9mPVpwX0JBTkFOQV9CT1g6bC5zdGFydHNXaXRoKFpwX1BST1BFUlRZLnN0YXJ0KT9mPVpwX1BST1BFUlRZOmwuc3RhcnRzV2l0aChacF9FVkVOVC5zdGFydCkmJihmPVpwX0VWRU5UKSxudWxsIT09ZiYmbC5lbmRzV2l0aChmLmVuZCkmJmwubGVuZ3RoPmYuc3RhcnQubGVuZ3RoK2YuZW5kLmxlbmd0aCl7bGV0IGc9bC5zdWJzdHJpbmcoZi5zdGFydC5sZW5ndGgsbC5sZW5ndGgtZi5lbmQubGVuZ3RoKSxiPXAodSxmLnN0YXJ0LGcpO2lmKGYuc3RhcnQ9PT1acF9CQU5BTkFfQk9YLnN0YXJ0KXRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5QmluZGluZyhnLGMsITEsdSxkLGUudmFsdWVTcGFuLGkscixiKSx0aGlzLnBhcnNlQXNzaWdubWVudEV2ZW50KGcsYyx1LGUudmFsdWVTcGFuLGksbyxiKTtlbHNlIGlmKGYuc3RhcnQ9PT1acF9QUk9QRVJUWS5zdGFydCl0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VQcm9wZXJ0eUJpbmRpbmcoZyxjLCExLHUsZCxlLnZhbHVlU3BhbixpLHIsYik7ZWxzZXtsZXQgRD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChnLGMsITEsdSxlLnZhbHVlU3Bhbnx8dSxpLEQsYiksbUIoRCxvKX1yZXR1cm4hMH1sZXQgbT1wKHUsIiIsbCk7cmV0dXJuIHRoaXMuYmluZGluZ1BhcnNlci5wYXJzZVByb3BlcnR5SW50ZXJwb2xhdGlvbihsLGMsdSxlLnZhbHVlU3BhbixpLHIsbSxlLnZhbHVlVG9rZW5zPz9udWxsKX1fdmlzaXRUZXh0V2l0aEludGVycG9sYXRpb24odCxlLGkscil7bGV0IG89dksodCkscz10aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VJbnRlcnBvbGF0aW9uKG8sZSxpKTtyZXR1cm4gcz9uZXcgVEMocyxlLHIpOm5ldyBNXyhvLGUpfXBhcnNlVmFyaWFibGUodCxlLGkscixvLHMpe3QuaW5kZXhPZigiLSIpPi0xP3RoaXMucmVwb3J0RXJyb3IoJyItIiBpcyBub3QgYWxsb3dlZCBpbiB2YXJpYWJsZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoJiZ0aGlzLnJlcG9ydEVycm9yKCJWYXJpYWJsZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSkscy5wdXNoKG5ldyBvRCh0LGUsaSxyLG8pKX1wYXJzZVJlZmVyZW5jZSh0LGUsaSxyLG8scyl7dC5pbmRleE9mKCItIik+LTE/dGhpcy5yZXBvcnRFcnJvcignIi0iIGlzIG5vdCBhbGxvd2VkIGluIHJlZmVyZW5jZSBuYW1lcycsaSk6MD09PXQubGVuZ3RoP3RoaXMucmVwb3J0RXJyb3IoIlJlZmVyZW5jZSBkb2VzIG5vdCBoYXZlIGEgbmFtZSIsaSk6cy5zb21lKGE9PmEubmFtZT09PXQpJiZ0aGlzLnJlcG9ydEVycm9yKGBSZWZlcmVuY2UgIiMke3R9IiBpcyBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlYCxpKSxzLnB1c2gobmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5uYW1lPXQsdGhpcy52YWx1ZT1lLHRoaXMuc291cmNlU3Bhbj1pLHRoaXMua2V5U3Bhbj1yLHRoaXMudmFsdWVTcGFuPW99dmlzaXQodCl7cmV0dXJuIHQudmlzaXRSZWZlcmVuY2UodGhpcyl9fSh0LGUsaSxyLG8pKX1wYXJzZUFzc2lnbm1lbnRFdmVudCh0LGUsaSxyLG8scyxhKXtsZXQgbD1bXTt0aGlzLmJpbmRpbmdQYXJzZXIucGFyc2VFdmVudChgJHt0fUNoYW5nZWAsYCR7ZX0gPSRldmVudGAsITAsaSxyfHxpLG8sbCxhKSxtQihsLHMpfXJlcG9ydEVycm9yKHQsZSxpPWt1LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyB5bShlLHQsaSkpfX0odCxlKSxzPXtub2RlczpVdShpLG4pLGVycm9yczp0LmVycm9ycy5jb25jYXQoaS5lcnJvcnMpLHN0eWxlVXJsczppLnN0eWxlVXJscyxzdHlsZXM6aS5zdHlsZXMsbmdDb250ZW50U2VsZWN0b3JzOmkubmdDb250ZW50U2VsZWN0b3JzfTtyZXR1cm4gZS5jb2xsZWN0Q29tbWVudE5vZGVzJiYocy5jb21tZW50Tm9kZXM9aS5jb21tZW50Tm9kZXMpLHN9KGMscyx7Y29sbGVjdENvbW1lbnROb2RlczohIWUuY29sbGVjdENvbW1lbnROb2Rlc30pO2gucHVzaCguLi5sLmVycm9ycywuLi5kLmVycm9ycyk7bGV0IGI9e2ludGVycG9sYXRpb25Db25maWc6aSxwcmVzZXJ2ZVdoaXRlc3BhY2VzOnIsZXJyb3JzOmgubGVuZ3RoPjA/aDpudWxsLG5vZGVzOnAsc3R5bGVVcmxzOmYsc3R5bGVzOm0sbmdDb250ZW50U2VsZWN0b3JzOnh9O3JldHVybiBlLmNvbGxlY3RDb21tZW50Tm9kZXMmJihiLmNvbW1lbnROb2Rlcz1nKSxifXZhciBFSz1uZXcgU0Q7ZnVuY3Rpb24gREQobj1QdSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9leHByUGFyc2VyPXQsdGhpcy5faW50ZXJwb2xhdGlvbkNvbmZpZz1lLHRoaXMuX3NjaGVtYVJlZ2lzdHJ5PWksdGhpcy5lcnJvcnM9cn1nZXQgaW50ZXJwb2xhdGlvbkNvbmZpZygpe3JldHVybiB0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnfWNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VQcm9wZXJ0eUJpbmRpbmcocixvLCEwLGUsZS5zdGFydC5vZmZzZXQsdm9pZCAwLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IHByb3BlcnR5IGJpbmRpbmcgIiR7cn0iIG5lZWRzIHRvIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIGJ1dCBnb3QgIiR7b30iICgke3R5cGVvZiBvfSlgLGUpfXJldHVybiBpfWNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgT2JqZWN0LmtleXModCkpe2xldCBvPXRbcl07InN0cmluZyI9PXR5cGVvZiBvP3RoaXMucGFyc2VFdmVudChyLG8sITEsZSxlLFtdLGksZSk6dGhpcy5fcmVwb3J0RXJyb3IoYFZhbHVlIG9mIHRoZSBob3N0IGxpc3RlbmVyICIke3J9IiBuZWVkcyB0byBiZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYW4gZXhwcmVzc2lvbiBidXQgZ290ICIke299IiAoJHt0eXBlb2Ygb30pYCxlKX1yZXR1cm4gaX1wYXJzZUludGVycG9sYXRpb24odCxlLGkpe2xldCByPWUuc3RhcnQudG9TdHJpbmcoKSxvPWUuZnVsbFN0YXJ0Lm9mZnNldDt0cnl7bGV0IHM9dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb24odCxyLG8saSx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxlKSxzfWNhdGNoKHMpe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtzfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbyl9fXBhcnNlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24odCxlKXtsZXQgaT1lLnN0YXJ0LnRvU3RyaW5nKCkscj1lLnN0YXJ0Lm9mZnNldDt0cnl7bGV0IG89dGhpcy5fZXhwclBhcnNlci5wYXJzZUludGVycG9sYXRpb25FeHByZXNzaW9uKHQsaSxyKTtyZXR1cm4gbyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhvLmVycm9ycyxlKSxvfWNhdGNoKG8pe3JldHVybiB0aGlzLl9yZXBvcnRFcnJvcihgJHtvfWAsZSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLGkscil9fXBhcnNlSW5saW5lVGVtcGxhdGVCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCl7bGV0IHU9dGhpcy5fcGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxpLGkuc3RhcnQub2Zmc2V0KyIqIi5sZW5ndGgscik7Zm9yKGxldCBkIG9mIHUpe2xldCBwPUtwKGksZC5zb3VyY2VTcGFuKSxoPWQua2V5LnNvdXJjZSxmPUtwKGksZC5rZXkuc3Bhbik7aWYoZCBpbnN0YW5jZW9mIHpDKXtsZXQgbT1kLnZhbHVlP2QudmFsdWUuc291cmNlOiIkaW1wbGljaXQiLHg9ZC52YWx1ZT9LcChpLGQudmFsdWUuc3Bhbik6dm9pZCAwO2EucHVzaChuZXcgZVYoaCxtLHAsZix4KSl9ZWxzZSBpZihkLnZhbHVlKXtsZXQgbT1sP3A6aSx4PUtwKGksZC52YWx1ZS5hc3Quc291cmNlU3Bhbik7dGhpcy5fcGFyc2VQcm9wZXJ0eUFzdChoLGQudmFsdWUsbSxmLHgsbyxzKX1lbHNlIG8ucHVzaChbaCwiIl0pLHRoaXMucGFyc2VMaXRlcmFsQXR0cihoLG51bGwsZixyLHZvaWQgMCxvLHMsZil9fV9wYXJzZVRlbXBsYXRlQmluZGluZ3ModCxlLGkscixvKXtsZXQgcz1pLnN0YXJ0LnRvU3RyaW5nKCk7dHJ5e2xldCBhPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VUZW1wbGF0ZUJpbmRpbmdzKHQsZSxzLHIsbyk7cmV0dXJuIHRoaXMuX3JlcG9ydEV4cHJlc3Npb25QYXJzZXJFcnJvcnMoYS5lcnJvcnMsaSksYS53YXJuaW5ncy5mb3JFYWNoKGw9Pnt0aGlzLl9yZXBvcnRFcnJvcihsLGksa3UuV0FSTklORyl9KSxhLnRlbXBsYXRlQmluZGluZ3N9Y2F0Y2goYSl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke2F9YCxpKSxbXX19cGFyc2VMaXRlcmFsQXR0cih0LGUsaSxyLG8scyxhLGwpe2hCKHQpPyh0PXQuc3Vic3RyaW5nKDEpLHZvaWQgMCE9PWwmJihsPUtwKGwsbmV3IGFsKGwuc3RhcnQub2Zmc2V0KzEsbC5lbmQub2Zmc2V0KSkpLGUmJnRoaXMuX3JlcG9ydEVycm9yKCdBc3NpZ25pbmcgYW5pbWF0aW9uIHRyaWdnZXJzIHZpYSBAcHJvcD0iZXhwIiBhdHRyaWJ1dGVzIHdpdGggYW4gZXhwcmVzc2lvbiBpcyBpbnZhbGlkLiBVc2UgcHJvcGVydHkgYmluZGluZ3MgKGUuZy4gW0Bwcm9wXT0iZXhwIikgb3IgdXNlIGFuIGF0dHJpYnV0ZSB3aXRob3V0IGEgdmFsdWUgKGUuZy4gQHByb3ApIGluc3RlYWQuJyxpLGt1LkVSUk9SKSx0aGlzLl9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLGwsbyxzLGEpKTphLnB1c2gobmV3IHBDKHQsdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZShlLCIiLHIpLGloLkxJVEVSQUxfQVRUUixpLGwsbykpfXBhcnNlUHJvcGVydHlCaW5kaW5nKHQsZSxpLHIsbyxzLGEsbCxjKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJQcm9wZXJ0eSBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIscik7bGV0IHU9ITE7dC5zdGFydHNXaXRoKHBCKT8odT0hMCx0PXQuc3Vic3RyaW5nKHBCLmxlbmd0aCksdm9pZCAwIT09YyYmKGM9S3AoYyxuZXcgYWwoYy5zdGFydC5vZmZzZXQrcEIubGVuZ3RoLGMuZW5kLm9mZnNldCkpKSk6aEIodCkmJih1PSEwLHQ9dC5zdWJzdHJpbmcoMSksdm9pZCAwIT09YyYmKGM9S3AoYyxuZXcgYWwoYy5zdGFydC5vZmZzZXQrMSxjLmVuZC5vZmZzZXQpKSkpLHU/dGhpcy5fcGFyc2VBbmltYXRpb24odCxlLHIsbyxjLHMsYSxsKTp0aGlzLl9wYXJzZVByb3BlcnR5QXN0KHQsdGhpcy5fcGFyc2VCaW5kaW5nKGUsaSxzfHxyLG8pLHIsYyxzLGEsbCl9cGFyc2VQcm9wZXJ0eUludGVycG9sYXRpb24odCxlLGkscixvLHMsYSxsKXtsZXQgYz10aGlzLnBhcnNlSW50ZXJwb2xhdGlvbihlLHJ8fGksbCk7cmV0dXJuISFjJiYodGhpcy5fcGFyc2VQcm9wZXJ0eUFzdCh0LGMsaSxhLHIsbyxzKSwhMCl9X3BhcnNlUHJvcGVydHlBc3QodCxlLGkscixvLHMsYSl7cy5wdXNoKFt0LGUuc291cmNlXSksYS5wdXNoKG5ldyBwQyh0LGUsaWguREVGQVVMVCxpLHIsbykpfV9wYXJzZUFuaW1hdGlvbih0LGUsaSxyLG8scyxhLGwpezA9PT10Lmxlbmd0aCYmdGhpcy5fcmVwb3J0RXJyb3IoIkFuaW1hdGlvbiB0cmlnZ2VyIGlzIG1pc3NpbmciLGkpO2xldCBjPXRoaXMuX3BhcnNlQmluZGluZyhlfHwidW5kZWZpbmVkIiwhMSxzfHxpLHIpO2EucHVzaChbdCxjLnNvdXJjZV0pLGwucHVzaChuZXcgcEModCxjLGloLkFOSU1BVElPTixpLG8scykpfV9wYXJzZUJpbmRpbmcodCxlLGkscil7bGV0IG89KGkmJmkuc3RhcnR8fCIodW5rbm93bikiKS50b1N0cmluZygpO3RyeXtsZXQgcz1lP3RoaXMuX2V4cHJQYXJzZXIucGFyc2VTaW1wbGVCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpOnRoaXMuX2V4cHJQYXJzZXIucGFyc2VCaW5kaW5nKHQsbyxyLHRoaXMuX2ludGVycG9sYXRpb25Db25maWcpO3JldHVybiBzJiZ0aGlzLl9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHMuZXJyb3JzLGkpLHN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIsbyxyKX19Y3JlYXRlQm91bmRFbGVtZW50UHJvcGVydHkodCxlLGk9ITEscj0hMCl7aWYoZS5pc0FuaW1hdGlvbilyZXR1cm4gbmV3IGZEKGUubmFtZSw0LGlvLk5PTkUsZS5leHByZXNzaW9uLG51bGwsZS5zb3VyY2VTcGFuLGUua2V5U3BhbixlLnZhbHVlU3Bhbik7bGV0IHMsYyxvPW51bGwsYT1udWxsLGw9ZS5uYW1lLnNwbGl0KCIuIik7aWYobC5sZW5ndGg+MSlpZigiYXR0ciI9PWxbMF0pe2E9bC5zbGljZSgxKS5qb2luKCIuIiksaXx8dGhpcy5fdmFsaWRhdGVQcm9wZXJ0eU9yQXR0cmlidXRlTmFtZShhLGUuc291cmNlU3BhbiwhMCksYz1mQih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LGEsITApO2xldCB1PWEuaW5kZXhPZigiOiIpO2lmKHU+LTEpe2xldCBkPWEuc3Vic3RyaW5nKDAsdSkscD1hLnN1YnN0cmluZyh1KzEpO2E9d0IoZCxwKX1zPTF9ZWxzZSJjbGFzcyI9PWxbMF0/KGE9bFsxXSxzPTIsYz1baW8uTk9ORV0pOiJzdHlsZSI9PWxbMF0mJihvPWwubGVuZ3RoPjI/bFsyXTpudWxsLGE9bFsxXSxzPTMsYz1baW8uU1RZTEVdKTtpZihudWxsPT09YSl7bGV0IHU9dGhpcy5fc2NoZW1hUmVnaXN0cnkuZ2V0TWFwcGVkUHJvcE5hbWUoZS5uYW1lKTthPXI/dTplLm5hbWUsYz1mQih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHUsITEpLHM9MCxpfHx0aGlzLl92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHUsZS5zb3VyY2VTcGFuLCExKX1yZXR1cm4gbmV3IGZEKGEscyxjWzBdLGUuZXhwcmVzc2lvbixvLGUuc291cmNlU3BhbixlLmtleVNwYW4sZS52YWx1ZVNwYW4pfXBhcnNlRXZlbnQodCxlLGkscixvLHMsYSxsKXswPT09dC5sZW5ndGgmJnRoaXMuX3JlcG9ydEVycm9yKCJFdmVudCBuYW1lIGlzIG1pc3NpbmcgaW4gYmluZGluZyIsciksaEIodCk/KHQ9dC5zbGljZSgxKSx2b2lkIDAhPT1sJiYobD1LcChsLG5ldyBhbChsLnN0YXJ0Lm9mZnNldCsxLGwuZW5kLm9mZnNldCkpKSx0aGlzLl9wYXJzZUFuaW1hdGlvbkV2ZW50KHQsZSxpLHIsbyxhLGwpKTp0aGlzLl9wYXJzZVJlZ3VsYXJFdmVudCh0LGUsaSxyLG8scyxhLGwpfWNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHModCxlLGkpe2xldCByPXRoaXMuX3NjaGVtYVJlZ2lzdHJ5LmdldE1hcHBlZFByb3BOYW1lKGUpO3JldHVybiBmQih0aGlzLl9zY2hlbWFSZWdpc3RyeSx0LHIsaSl9X3BhcnNlQW5pbWF0aW9uRXZlbnQodCxlLGkscixvLHMsYSl7bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gT1EobiwiLiIsdCl9KHQsW3QsIiJdKSxjPWxbMF0sdT1sWzFdLnRvTG93ZXJDYXNlKCksZD10aGlzLl9wYXJzZUFjdGlvbihlLGksbyk7cy5wdXNoKG5ldyBoRChjLHUsMSxkLHIsbyxhKSksMD09PWMubGVuZ3RoJiZ0aGlzLl9yZXBvcnRFcnJvcigiQW5pbWF0aW9uIGV2ZW50IG5hbWUgaXMgbWlzc2luZyBpbiBiaW5kaW5nIixyKSx1PyJzdGFydCIhPT11JiYiZG9uZSIhPT11JiZ0aGlzLl9yZXBvcnRFcnJvcihgVGhlIHByb3ZpZGVkIGFuaW1hdGlvbiBvdXRwdXQgcGhhc2UgdmFsdWUgIiR7dX0iIGZvciAiQCR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgKHVzZSBzdGFydCBvciBkb25lKWAscik6dGhpcy5fcmVwb3J0RXJyb3IoYFRoZSBhbmltYXRpb24gdHJpZ2dlciBvdXRwdXQgZXZlbnQgKEAke2N9KSBpcyBtaXNzaW5nIGl0cyBwaGFzZSB2YWx1ZSBuYW1lIChzdGFydCBvciBkb25lIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkKWAscil9X3BhcnNlUmVndWxhckV2ZW50KHQsZSxpLHIsbyxzLGEsbCl7bGV0W2MsdV09ZnVuY3Rpb24obix0KXtyZXR1cm4gT1EobiwiOiIsdCl9KHQsW251bGwsdF0pLGQ9dGhpcy5fcGFyc2VBY3Rpb24oZSxpLG8pO3MucHVzaChbdCxkLnNvdXJjZV0pLGEucHVzaChuZXcgaEQodSxjLDAsZCxyLG8sbCkpfV9wYXJzZUFjdGlvbih0LGUsaSl7bGV0IHI9KGkmJmkuc3RhcnR8fCIodW5rbm93biIpLnRvU3RyaW5nKCksbz1pJiZpLnN0YXJ0P2kuc3RhcnQub2Zmc2V0OjA7dHJ5e2xldCBzPXRoaXMuX2V4cHJQYXJzZXIucGFyc2VBY3Rpb24odCxlLHIsbyx0aGlzLl9pbnRlcnBvbGF0aW9uQ29uZmlnKTtyZXR1cm4gcyYmdGhpcy5fcmVwb3J0RXhwcmVzc2lvblBhcnNlckVycm9ycyhzLmVycm9ycyxpKSwhc3x8cy5hc3QgaW5zdGFuY2VvZiBJYT8odGhpcy5fcmVwb3J0RXJyb3IoIkVtcHR5IGV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCIsaSksdGhpcy5fZXhwclBhcnNlci53cmFwTGl0ZXJhbFByaW1pdGl2ZSgiRVJST1IiLHIsbykpOnN9Y2F0Y2gocyl7cmV0dXJuIHRoaXMuX3JlcG9ydEVycm9yKGAke3N9YCxpKSx0aGlzLl9leHByUGFyc2VyLndyYXBMaXRlcmFsUHJpbWl0aXZlKCJFUlJPUiIscixvKX19X3JlcG9ydEVycm9yKHQsZSxpPWt1LkVSUk9SKXt0aGlzLmVycm9ycy5wdXNoKG5ldyB5bShlLHQsaSkpfV9yZXBvcnRFeHByZXNzaW9uUGFyc2VyRXJyb3JzKHQsZSl7Zm9yKGxldCBpIG9mIHQpdGhpcy5fcmVwb3J0RXJyb3IoaS5tZXNzYWdlLGUpfV92YWxpZGF0ZVByb3BlcnR5T3JBdHRyaWJ1dGVOYW1lKHQsZSxpKXtsZXQgcj1pP3RoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlQXR0cmlidXRlKHQpOnRoaXMuX3NjaGVtYVJlZ2lzdHJ5LnZhbGlkYXRlUHJvcGVydHkodCk7ci5lcnJvciYmdGhpcy5fcmVwb3J0RXJyb3Ioci5tc2csZSxrdS5FUlJPUil9fShuZXcgYkQobmV3IHlEKSxuLEVLLFtdKX1mdW5jdGlvbiBUSyhuLHQpe3N3aXRjaChuKXtjYXNlIGlvLkhUTUw6cmV0dXJuIFRuKHRlLnNhbml0aXplSHRtbCk7Y2FzZSBpby5TQ1JJUFQ6cmV0dXJuIFRuKHRlLnNhbml0aXplU2NyaXB0KTtjYXNlIGlvLlNUWUxFOnJldHVybiB0P1RuKHRlLnNhbml0aXplU3R5bGUpOm51bGw7Y2FzZSBpby5VUkw6cmV0dXJuIFRuKHRlLnNhbml0aXplVXJsKTtjYXNlIGlvLlJFU09VUkNFX1VSTDpyZXR1cm4gVG4odGUuc2FuaXRpemVSZXNvdXJjZVVybCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gRTFlKG4sdCl7bGV0IGU9TnUodC52YWx1ZSk7aWYoIXhLKG4sdC5uYW1lKSlyZXR1cm4gZTtzd2l0Y2goRUsuc2VjdXJpdHlDb250ZXh0KG4sdC5uYW1lLCEwKSl7Y2FzZSBpby5IVE1MOnJldHVybiBDWChUbih0ZS50cnVzdENvbnN0YW50SHRtbCksbmV3ICRUKFtuZXcgZUQodC52YWx1ZSldLFtdKSx2b2lkIDAsdC52YWx1ZVNwYW4pO2Nhc2UgaW8uUkVTT1VSQ0VfVVJMOnJldHVybiBDWChUbih0ZS50cnVzdENvbnN0YW50UmVzb3VyY2VVcmwpLG5ldyAkVChbbmV3IGVEKHQudmFsdWUpXSxbXSksdm9pZCAwLHQudmFsdWVTcGFuKTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBEMWUobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBNX3x8biBpbnN0YW5jZW9mIFRDfHxuIGluc3RhbmNlb2Ygc0R9ZnVuY3Rpb24gYkIobil7cmV0dXJuIG4uZXZlcnkoRDFlKX1mdW5jdGlvbiB6VChuLHQsZSl7cmV0dXJuKCk9PntsZXQgaT1uKCkscj1BcnJheS5pc0FycmF5KGkpP2k6W2ldO3JldHVybiBlJiZyLnB1c2goLi4uZSksdCYmci51bnNoaWZ0KGh0KHQpKSxyfX12YXIgTVE9Im5nSTE4bkNsb3N1cmVNb2RlIjtmdW5jdGlvbiBESyhuKXtyZXR1cm4gbi5yZWR1Y2UoKHQsZSk9PntsZXQgaT1BcnJheS5pc0FycmF5KGUpP0RLKGUpOmU7cmV0dXJuIHQuY29uY2F0KGkpfSxbXSl9dmFyIFAxZT0vYXR0clwuKFteXF1dKykvO2Z1bmN0aW9uIElLKG4sdCxlKXtsZXQgaT1uZXcgc2gscj1OVihuLnNlbGVjdG9yKTtyZXR1cm4gaS5zZXQoInR5cGUiLG4uaW50ZXJuYWxUeXBlKSxyLmxlbmd0aD4wJiZpLnNldCgic2VsZWN0b3JzIixOdShyKSksbi5xdWVyaWVzLmxlbmd0aD4wJiZpLnNldCgiY29udGVudFF1ZXJpZXMiLGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bXSxyPVtdLG89WFEociwiX3QiKTtmb3IobGV0IGEgb2Ygbil7aS5wdXNoKFRuKHRlLmNvbnRlbnRRdWVyeSkuY2FsbEZuKFtSaSgiZGlySW5kZXgiKSwuLi5SSyhhLHQpXSkudG9TdG10KCkpO2xldCBsPW8oKSxjPVRuKHRlLmxvYWRRdWVyeSkuY2FsbEZuKFtdKSx1PVRuKHRlLnF1ZXJ5UmVmcmVzaCkuY2FsbEZuKFtsLnNldChjKV0pLGQ9UmkoSGMpLnByb3AoYS5wcm9wZXJ0eU5hbWUpLnNldChhLmZpcnN0P2wucHJvcCgiZmlyc3QiKTpsKTtyLnB1c2godS5hbmQoZCkudG9TdG10KCkpfWxldCBzPWU/YCR7ZX1fQ29udGVudFF1ZXJpZXNgOm51bGw7cmV0dXJuIHJhKFtuZXcgaWEoJEMsWkMpLG5ldyBpYShIYyxudWxsKSxuZXcgaWEoImRpckluZGV4IixudWxsKV0sW2xoKDEsaSksbGgoMixyKV0sUGEsbnVsbCxzKX0obi5xdWVyaWVzLHQsbi5uYW1lKSksbi52aWV3UXVlcmllcy5sZW5ndGgmJmkuc2V0KCJ2aWV3UXVlcnkiLGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bXSxyPVtdLG89WFEociwiX3QiKTtuLmZvckVhY2goYT0+e2xldCBsPVRuKHRlLnZpZXdRdWVyeSkuY2FsbEZuKFJLKGEsdCkpO2kucHVzaChsLnRvU3RtdCgpKTtsZXQgYz1vKCksdT1Ubih0ZS5sb2FkUXVlcnkpLmNhbGxGbihbXSksZD1Ubih0ZS5xdWVyeVJlZnJlc2gpLmNhbGxGbihbYy5zZXQodSldKSxwPVJpKEhjKS5wcm9wKGEucHJvcGVydHlOYW1lKS5zZXQoYS5maXJzdD9jLnByb3AoImZpcnN0Iik6Yyk7ci5wdXNoKGQuYW5kKHApLnRvU3RtdCgpKX0pO2xldCBzPWU/YCR7ZX1fUXVlcnlgOm51bGw7cmV0dXJuIHJhKFtuZXcgaWEoJEMsWkMpLG5ldyBpYShIYyxudWxsKV0sW2xoKDEsaSksbGgoMixyKV0sUGEsbnVsbCxzKX0obi52aWV3UXVlcmllcyx0LG4ubmFtZSkpLGkuc2V0KCJob3N0QmluZGluZ3MiLGZ1bmN0aW9uKG4sdCxlLGkscixvLHMpe2xldCBhPVJpKEhjKSxsPW5ldyB2RChhKSx7c3R5bGVBdHRyOmMsY2xhc3NBdHRyOnV9PW4uc3BlY2lhbEF0dHJpYnV0ZXM7dm9pZCAwIT09YyYmbC5yZWdpc3RlclN0eWxlQXR0cihjKSx2b2lkIDAhPT11JiZsLnJlZ2lzdGVyQ2xhc3NBdHRyKHUpO2xldCBkPVtdLHA9W10saD1bXSxmPXQsbT1lLmNyZWF0ZURpcmVjdGl2ZUhvc3RFdmVudEFzdHMobi5saXN0ZW5lcnMsZik7bSYmbS5sZW5ndGgmJmQucHVzaCguLi5mdW5jdGlvbihuLHQpe2xldCBlPVtdLGk9W10scj1bXTtmb3IobGV0IG8gb2Ygbil7bGV0IHM9by5uYW1lJiZtXyhvLm5hbWUpLGE9MT09PW8udHlwZT9qUShzLG8udGFyZ2V0T3JQaGFzZSk6cyxsPXQmJnM/YCR7dH1fJHthfV9Ib3N0QmluZGluZ0hhbmRsZXJgOm51bGwsYz1TSyhTXy5mcm9tUGFyc2VkRXZlbnQobyksbCk7MT09by50eXBlP2kucHVzaChjKTplLnB1c2goYyl9Zm9yKGxldCBvIG9mIGkpci5wdXNoKHtyZWZlcmVuY2U6dGUuc3ludGhldGljSG9zdExpc3RlbmVyLHBhcmFtc09yRm46byxzcGFuOm51bGx9KTtmb3IobGV0IG8gb2YgZSlyLnB1c2goe3JlZmVyZW5jZTp0ZS5saXN0ZW5lcixwYXJhbXNPckZuOm8sc3BhbjpudWxsfSk7cmV0dXJuIHJ9KG0sbykpO2xldCB4PWUuY3JlYXRlQm91bmRIb3N0UHJvcGVydGllcyhuLnByb3BlcnRpZXMsZiksZz1bXSxiPTA7eCYmeC5mb3JFYWNoKHVlPT57bC5yZWdpc3RlcklucHV0QmFzZWRPbk5hbWUodWUubmFtZSx1ZS5leHByZXNzaW9uLGYpP2IrPTI6KGcucHVzaCh1ZSksYisrKX0pO2xldCBELFQ9KCk9PihEfHwoRD1uZXcgVEQoaSwoKT0+UVQoIlVuZXhwZWN0ZWQgbm9kZSIpLGhlPT57bGV0IHc9YjtyZXR1cm4gYis9aGUsd30sKCk9PlFUKCJVbmV4cGVjdGVkIHBpcGUiKSkpLEQpLGs9W10sWj1bXSx6PVtdO2ZvcihsZXQgdWUgb2YgZyl7bGV0IGhlPXVlLmV4cHJlc3Npb24udmlzaXQoVCgpKSx3PVNRKGEsaGUpLHtiaW5kaW5nTmFtZTpGLGluc3RydWN0aW9uOnEsaXNBdHRyaWJ1dGU6S309cTFlKHVlKSxkZT1lLmNhbGNQb3NzaWJsZVNlY3VyaXR5Q29udGV4dHMocixGLEspLmZpbHRlcihsZT0+bGUhPT1pby5OT05FKSxZPW51bGw7ZGUubGVuZ3RoJiYoWT0yPT09ZGUubGVuZ3RoJiZkZS5pbmRleE9mKGlvLlVSTCk+LTEmJmRlLmluZGV4T2YoaW8uUkVTT1VSQ0VfVVJMKT4tMT9Ubih0ZS5zYW5pdGl6ZVVybE9yUmVzb3VyY2VVcmwpOlRLKGRlWzBdLEspKTtsZXQgYWU9W2h0KEYpLHcuY3VyclZhbEV4cHJdO1kmJmFlLnB1c2goWSksaC5wdXNoKC4uLncuc3RtdHMpLHE9PT10ZS5ob3N0UHJvcGVydHk/ay5wdXNoKGFlKTpxPT09dGUuYXR0cmlidXRlP1oucHVzaChhZSk6cT09PXRlLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eT96LnB1c2goYWUpOnAucHVzaCh7cmVmZXJlbmNlOnEscGFyYW1zT3JGbjphZSxzcGFuOm51bGx9KX1mb3IobGV0IHVlIG9mIGspcC5wdXNoKHtyZWZlcmVuY2U6dGUuaG9zdFByb3BlcnR5LHBhcmFtc09yRm46dWUsc3BhbjpudWxsfSk7Zm9yKGxldCB1ZSBvZiBaKXAucHVzaCh7cmVmZXJlbmNlOnRlLmF0dHJpYnV0ZSxwYXJhbXNPckZuOnVlLHNwYW46bnVsbH0pO2ZvcihsZXQgdWUgb2YgeilwLnB1c2goe3JlZmVyZW5jZTp0ZS5zeW50aGV0aWNIb3N0UHJvcGVydHkscGFyYW1zT3JGbjp1ZSxzcGFuOm51bGx9KTtsZXQgZmU9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG4pKXtsZXQgaT1uW2VdO3QucHVzaChodChlKSxpKX1yZXR1cm4gdH0obi5hdHRyaWJ1dGVzKTtpZihsLmFzc2lnbkhvc3RBdHRycyhmZSxzKSxsLmhhc0JpbmRpbmdzJiZsLmJ1aWxkVXBkYXRlTGV2ZWxJbnN0cnVjdGlvbnMoVCgpKS5mb3JFYWNoKHVlPT57Zm9yKGxldCBoZSBvZiB1ZS5jYWxscyliKz1NYXRoLm1heChoZS5hbGxvY2F0ZUJpbmRpbmdTbG90cy0yLDApLHAucHVzaCh7cmVmZXJlbmNlOnVlLnJlZmVyZW5jZSxwYXJhbXNPckZuOlcxZShoZSxhLFNRKSxzcGFuOm51bGx9KX0pLGImJnMuc2V0KCJob3N0VmFycyIsaHQoYikpLGQubGVuZ3RoPjB8fHAubGVuZ3RoPjApe2xldCB1ZT1vP2Ake299X0hvc3RCaW5kaW5nc2A6bnVsbCxoZT1bXTtyZXR1cm4gZC5sZW5ndGg+MCYmaGUucHVzaChsaCgxLGNEKGQpKSkscC5sZW5ndGg+MCYmaGUucHVzaChsaCgyLGguY29uY2F0KGNEKHApKSkpLHJhKFtuZXcgaWEoJEMsWkMpLG5ldyBpYShIYyxudWxsKV0saGUsUGEsbnVsbCx1ZSl9cmV0dXJuIG51bGx9KG4uaG9zdCxuLnR5cGVTb3VyY2VTcGFuLGUsdCxuLnNlbGVjdG9yfHwiIixuLm5hbWUsaSkpLGkuc2V0KCJpbnB1dHMiLE9YKG4uaW5wdXRzLCEwKSksaS5zZXQoIm91dHB1dHMiLE9YKG4ub3V0cHV0cykpLG51bGwhPT1uLmV4cG9ydEFzJiZpLnNldCgiZXhwb3J0QXMiLF9yKG4uZXhwb3J0QXMubWFwKG89Pmh0KG8pKSkpLG4uaXNTdGFuZGFsb25lJiZpLnNldCgic3RhbmRhbG9uZSIsaHQoITApKSxpfWZ1bmN0aW9uIFBLKG4sdCl7bGV0IGU9W10saT10LnByb3ZpZGVycyxyPXQudmlld1Byb3ZpZGVycztpZihpfHxyKXtsZXQgbz1baXx8bmV3IGhtKFtdKV07ciYmby5wdXNoKHIpLGUucHVzaChUbih0ZS5Qcm92aWRlcnNGZWF0dXJlKS5jYWxsRm4obykpfXQudXNlc0luaGVyaXRhbmNlJiZlLnB1c2goVG4odGUuSW5oZXJpdERlZmluaXRpb25GZWF0dXJlKSksdC5mdWxsSW5oZXJpdGFuY2UmJmUucHVzaChUbih0ZS5Db3B5RGVmaW5pdGlvbkZlYXR1cmUpKSx0LmxpZmVjeWNsZS51c2VzT25DaGFuZ2VzJiZlLnB1c2goVG4odGUuTmdPbkNoYW5nZXNGZWF0dXJlKSksdC5oYXNPd25Qcm9wZXJ0eSgidGVtcGxhdGUiKSYmdC5pc1N0YW5kYWxvbmUmJmUucHVzaChUbih0ZS5TdGFuZGFsb25lRmVhdHVyZSkpLGUubGVuZ3RoJiZuLnNldCgiZmVhdHVyZXMiLF9yKGUpKX1mdW5jdGlvbiBSSyhuLHQpe2xldCBlPVtrd2Uobix0KSxodChCMWUobikpXTtyZXR1cm4gbi5yZWFkJiZlLnB1c2gobi5yZWFkKSxlfWZ1bmN0aW9uIEIxZShuKXtyZXR1cm4obi5kZXNjZW5kYW50cz8xOjApfChuLnN0YXRpYz8yOjApfChuLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5PzQ6MCl9ZnVuY3Rpb24gVTFlKG4pe3JldHVybiB1bChodChuKSl9ZnVuY3Rpb24gd1Eobil7cmV0dXJuIHVsKHFsKE9iamVjdC5rZXlzKG4pLm1hcChlPT4oe2tleTplLHZhbHVlOmh0KEFycmF5LmlzQXJyYXkobltlXSk/bltlXVswXTpuW2VdKSxxdW90ZWQ6ITB9KSkpKX1mdW5jdGlvbiBQVihuKXtyZXR1cm4gbi5sZW5ndGg+MD91bChfcihuLm1hcCh0PT5odCh0KSkpKTpKZH1mdW5jdGlvbiBPSyhuKXtsZXQgdD1udWxsIT09bi5zZWxlY3Rvcj9uLnNlbGVjdG9yLnJlcGxhY2UoL1xuL2csIiIpOm51bGw7cmV0dXJuW0lEKG4udHlwZS50eXBlLG4udHlwZUFyZ3VtZW50Q291bnQpLG51bGwhPT10P1UxZSh0KTpKZCxudWxsIT09bi5leHBvcnRBcz9QVihuLmV4cG9ydEFzKTpKZCx3UShuLmlucHV0cyksd1Eobi5vdXRwdXRzKSxQVihuLnF1ZXJpZXMubWFwKGU9PmUucHJvcGVydHlOYW1lKSldfWZ1bmN0aW9uIFNRKG4sdCl7cmV0dXJuIHVLKG51bGwsbix0LCJiIil9ZnVuY3Rpb24gVzFlKG4sdCxlKXtyZXR1cm4gbi5wYXJhbXMoaT0+ZSh0LGkpLmN1cnJWYWxFeHByKX1mdW5jdGlvbiBxMWUobil7bGV0IGUsdD1uLm5hbWUsaT10Lm1hdGNoKFAxZSk7cmV0dXJuIGk/KHQ9aVsxXSxlPXRlLmF0dHJpYnV0ZSk6bi5pc0FuaW1hdGlvbj8odD16USh0KSxlPXRlLnN5bnRoZXRpY0hvc3RQcm9wZXJ0eSk6ZT10ZS5ob3N0UHJvcGVydHkse2JpbmRpbmdOYW1lOnQsaW5zdHJ1Y3Rpb246ZSxpc0F0dHJpYnV0ZTohIWl9fXZhciBuLFgxZT0vXig/OlxbKFteXF1dKylcXSl8KD86XCgoW15cKV0rKVwpKSQvLFJWPWNsYXNze307ZnVuY3Rpb24gRVEobil7cmV0dXJuey4uLm4scHJlZGljYXRlOmtLKG4ucHJlZGljYXRlKSxyZWFkOm4ucmVhZD9uZXcgTG4obi5yZWFkKTpudWxsLHN0YXRpYzpuLnN0YXRpYyxlbWl0RGlzdGluY3RDaGFuZ2VzT25seTpuLmVtaXREaXN0aW5jdENoYW5nZXNPbmx5fX1mdW5jdGlvbiBUUShuKXtyZXR1cm57cHJvcGVydHlOYW1lOm4ucHJvcGVydHlOYW1lLGZpcnN0Om4uZmlyc3Q/PyExLHByZWRpY2F0ZTprSyhuLnByZWRpY2F0ZSksZGVzY2VuZGFudHM6bi5kZXNjZW5kYW50cz8/ITEscmVhZDpuLnJlYWQ/bmV3IExuKG4ucmVhZCk6bnVsbCxzdGF0aWM6bi5zdGF0aWM/PyExLGVtaXREaXN0aW5jdENoYW5nZXNPbmx5Om4uZW1pdERpc3RpbmN0Q2hhbmdlc09ubHk/PyEwfX1mdW5jdGlvbiBrSyhuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOkhWKG5ldyBMbihuKSwxKX1mdW5jdGlvbiBEUShuKXtsZXQgdD1SUShuLmlucHV0c3x8W10pLGU9UlEobi5vdXRwdXRzfHxbXSksaT1uLnByb3BNZXRhZGF0YSxyPXt9LG89e307Zm9yKGxldCBzIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShzKSYmaVtzXS5mb3JFYWNoKGE9PntsVGUoYSk/cltzXT1hLmJpbmRpbmdQcm9wZXJ0eU5hbWU/W2EuYmluZGluZ1Byb3BlcnR5TmFtZSxzXTpzOmNUZShhKSYmKG9bc109YS5iaW5kaW5nUHJvcGVydHlOYW1lfHxzKX0pO3JldHVybnsuLi5uLHR5cGVBcmd1bWVudENvdW50OjAsdHlwZVNvdXJjZVNwYW46bi50eXBlU291cmNlU3Bhbix0eXBlOkFzKG4udHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihuLnR5cGUpLGRlcHM6bnVsbCxob3N0Om9UZShuLnByb3BNZXRhZGF0YSxuLnR5cGVTb3VyY2VTcGFuLG4uaG9zdCksaW5wdXRzOnsuLi50LC4uLnJ9LG91dHB1dHM6ey4uLmUsLi4ub30scXVlcmllczpuLnF1ZXJpZXMubWFwKEVRKSxwcm92aWRlcnM6bnVsbCE9bi5wcm92aWRlcnM/bmV3IExuKG4ucHJvdmlkZXJzKTpudWxsLHZpZXdRdWVyaWVzOm4udmlld1F1ZXJpZXMubWFwKEVRKSxmdWxsSW5oZXJpdGFuY2U6ITF9fWZ1bmN0aW9uIEZLKG4sdCl7cmV0dXJue25hbWU6bi50eXBlLm5hbWUsdHlwZTpBcyhuLnR5cGUpLHR5cGVTb3VyY2VTcGFuOnQsaW50ZXJuYWxUeXBlOm5ldyBMbihuLnR5cGUpLHNlbGVjdG9yOm4uc2VsZWN0b3I/P251bGwsaW5wdXRzOm4uaW5wdXRzPz97fSxvdXRwdXRzOm4ub3V0cHV0cz8/e30saG9zdDpKMWUobi5ob3N0KSxxdWVyaWVzOihuLnF1ZXJpZXM/P1tdKS5tYXAoVFEpLHZpZXdRdWVyaWVzOihuLnZpZXdRdWVyaWVzPz9bXSkubWFwKFRRKSxwcm92aWRlcnM6dm9pZCAwIT09bi5wcm92aWRlcnM/bmV3IExuKG4ucHJvdmlkZXJzKTpudWxsLGV4cG9ydEFzOm4uZXhwb3J0QXM/P251bGwsdXNlc0luaGVyaXRhbmNlOm4udXNlc0luaGVyaXRhbmNlPz8hMSxsaWZlY3ljbGU6e3VzZXNPbkNoYW5nZXM6bi51c2VzT25DaGFuZ2VzPz8hMX0sZGVwczpudWxsLHR5cGVBcmd1bWVudENvdW50OjAsZnVsbEluaGVyaXRhbmNlOiExLGlzU3RhbmRhbG9uZTpuLmlzU3RhbmRhbG9uZT8/ITF9fWZ1bmN0aW9uIEoxZShuPXt9KXtyZXR1cm57YXR0cmlidXRlczokMWUobi5hdHRyaWJ1dGVzPz97fSksbGlzdGVuZXJzOm4ubGlzdGVuZXJzPz97fSxwcm9wZXJ0aWVzOm4ucHJvcGVydGllcz8/e30sc3BlY2lhbEF0dHJpYnV0ZXM6e2NsYXNzQXR0cjpuLmNsYXNzQXR0cmlidXRlLHN0eWxlQXR0cjpuLnN0eWxlQXR0cmlidXRlfX19ZnVuY3Rpb24gJDFlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhuKSl0W2VdPW5ldyBMbihuW2VdKTtyZXR1cm4gdH1mdW5jdGlvbiB0VGUobil7cmV0dXJuey4uLm4sdHlwZTpuZXcgTG4obi50eXBlKX19ZnVuY3Rpb24geEIobix0PW51bGwpe3JldHVybntraW5kOl9fLkRpcmVjdGl2ZSxpc0NvbXBvbmVudDp0fHwiY29tcG9uZW50Ij09PW4ua2luZCxzZWxlY3RvcjpuLnNlbGVjdG9yLHR5cGU6bmV3IExuKG4udHlwZSksaW5wdXRzOm4uaW5wdXRzPz9bXSxvdXRwdXRzOm4ub3V0cHV0cz8/W10sZXhwb3J0QXM6bi5leHBvcnRBcz8/bnVsbH19ZnVuY3Rpb24gaVRlKG4pe3JldHVybntraW5kOl9fLlBpcGUsbmFtZTpuLm5hbWUsdHlwZTpuZXcgTG4obi50eXBlKX19ZnVuY3Rpb24gTksobix0LGUsaSxyKXtsZXQgbz1yP0RfLmZyb21BcnJheShyKTpQdSxzPVMxZShuLGUse3ByZXNlcnZlV2hpdGVzcGFjZXM6aSxpbnRlcnBvbGF0aW9uQ29uZmlnOm99KTtpZihudWxsIT09cy5lcnJvcnMpe2xldCBhPXMuZXJyb3JzLm1hcChsPT5sLnRvU3RyaW5nKCkpLmpvaW4oIiwgIik7dGhyb3cgbmV3IEVycm9yKGBFcnJvcnMgZHVyaW5nIEpJVCBjb21waWxhdGlvbiBvZiB0ZW1wbGF0ZSBmb3IgJHt0fTogJHthfWApfXJldHVybnt0ZW1wbGF0ZTpzLGludGVycG9sYXRpb246b319ZnVuY3Rpb24gc18obix0KXtpZihuLmhhc093blByb3BlcnR5KHQpKXJldHVybiBIVihuZXcgTG4oblt0XSksMCl9ZnVuY3Rpb24gQVEobix0KXtpZihuLmhhc093blByb3BlcnR5KHQpKXJldHVybiBuZXcgTG4oblt0XSl9ZnVuY3Rpb24gSVEobil7cmV0dXJuIEhWKCJmdW5jdGlvbiI9PXR5cGVvZiBuP25ldyBMbihuKTpuZXcgY2wobj8/bnVsbCksMCl9ZnVuY3Rpb24gTEsobil7bGV0IHQ9bnVsbCE9bi5hdHRyaWJ1dGUsZT1udWxsPT09bi50b2tlbj9udWxsOm5ldyBMbihuLnRva2VuKTtyZXR1cm4gQksodD9uZXcgTG4obi5hdHRyaWJ1dGUpOmUsdCxuLmhvc3Qsbi5vcHRpb25hbCxuLnNlbGYsbi5za2lwU2VsZil9ZnVuY3Rpb24gUFEobil7bGV0IHQ9bi5hdHRyaWJ1dGU/PyExO3JldHVybiBCSyhudWxsPT09bi50b2tlbj9udWxsOm5ldyBMbihuLnRva2VuKSx0LG4uaG9zdD8/ITEsbi5vcHRpb25hbD8/ITEsbi5zZWxmPz8hMSxuLnNraXBTZWxmPz8hMSl9ZnVuY3Rpb24gQksobix0LGUsaSxyLG8pe3JldHVybnt0b2tlbjpuLGF0dHJpYnV0ZU5hbWVUeXBlOnQ/aHQoInVua25vd24iKTpudWxsLGhvc3Q6ZSxvcHRpb25hbDppLHNlbGY6cixza2lwU2VsZjpvfX1mdW5jdGlvbiBvVGUobix0LGUpe2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PXt9LGU9e30saT17fSxyPXt9O2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHM9bltvXSxhPW8ubWF0Y2goWDFlKTtpZihudWxsPT09YSlzd2l0Y2gobyl7Y2FzZSJjbGFzcyI6aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiQ2xhc3MgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO3IuY2xhc3NBdHRyPXM7YnJlYWs7Y2FzZSJzdHlsZSI6aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiU3R5bGUgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO3Iuc3R5bGVBdHRyPXM7YnJlYWs7ZGVmYXVsdDp0W29dPSJzdHJpbmciPT10eXBlb2Ygcz9odChzKTpzfWVsc2UgaWYobnVsbCE9YVsxXSl7aWYoInN0cmluZyIhPXR5cGVvZiBzKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHkgYmluZGluZyBtdXN0IGJlIHN0cmluZyIpO2lbYVsxXV09c31lbHNlIGlmKG51bGwhPWFbMl0pe2lmKCJzdHJpbmciIT10eXBlb2Ygcyl0aHJvdyBuZXcgRXJyb3IoIkV2ZW50IGJpbmRpbmcgbXVzdCBiZSBzdHJpbmciKTtlW2FbMl1dPXN9fXJldHVybnthdHRyaWJ1dGVzOnQsbGlzdGVuZXJzOmUscHJvcGVydGllczppLHNwZWNpYWxBdHRyaWJ1dGVzOnJ9fShlfHx7fSkscj1mdW5jdGlvbihuLHQpe2xldCBlPUREKCk7cmV0dXJuIGUuY3JlYXRlRGlyZWN0aXZlSG9zdEV2ZW50QXN0cyhuLmxpc3RlbmVycyx0KSxlLmNyZWF0ZUJvdW5kSG9zdFByb3BlcnRpZXMobi5wcm9wZXJ0aWVzLHQpLGUuZXJyb3JzfShpLHQpO2lmKHIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihyLm1hcChvPT5vLm1zZykuam9pbigiXG4iKSk7Zm9yKGxldCBvIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShvKSYmbltvXS5mb3JFYWNoKHM9PntzVGUocyk/aS5wcm9wZXJ0aWVzW3MuaG9zdFByb3BlcnR5TmFtZXx8b109cndlKCJ0aGlzIixvKTphVGUocykmJihpLmxpc3RlbmVyc1tzLmV2ZW50TmFtZXx8b109YCR7b30oJHsocy5hcmdzfHxbXSkuam9pbigiLCIpfSlgKX0pO3JldHVybiBpfWZ1bmN0aW9uIHNUZShuKXtyZXR1cm4iSG9zdEJpbmRpbmciPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBhVGUobil7cmV0dXJuIkhvc3RMaXN0ZW5lciI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIGxUZShuKXtyZXR1cm4iSW5wdXQiPT09bi5uZ01ldGFkYXRhTmFtZX1mdW5jdGlvbiBjVGUobil7cmV0dXJuIk91dHB1dCI9PT1uLm5nTWV0YWRhdGFOYW1lfWZ1bmN0aW9uIFJRKG4pe3JldHVybiBuLnJlZHVjZSgodCxlKT0+e2xldFtpLHJdPWUuc3BsaXQoIjoiLDIpLm1hcChvPT5vLnRyaW0oKSk7cmV0dXJuIHRbaV09cnx8aSx0fSx7fSl9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZnVsbD10O2xldCBlPXQuc3BsaXQoIi4iKTt0aGlzLm1ham9yPWVbMF0sdGhpcy5taW5vcj1lWzFdLHRoaXMucGF0Y2g9ZS5zbGljZSgyKS5qb2luKCIuIil9fSgiMTQuMi4xMSIpLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2xvc2VkQnlQYXJlbnQ9ITEsdGhpcy5pc1ZvaWQ9ITEsdGhpcy5pZ25vcmVGaXJzdExmPSExLHRoaXMuY2FuU2VsZkNsb3NlPSEwLHRoaXMucHJldmVudE5hbWVzcGFjZUluaGVyaXRhbmNlPSExfXJlcXVpcmVFeHRyYVBhcmVudCh0KXtyZXR1cm4hMX1pc0Nsb3NlZEJ5Q2hpbGQodCl7cmV0dXJuITF9Z2V0Q29udGVudFR5cGUoKXtyZXR1cm4gV2wuUEFSU0FCTEVfREFUQX19LCgobj1wXykubmd8fChuLm5nPXt9KSkuXHUwMjc1Y29tcGlsZXJGYWNhZGU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQ9bmV3IGNsYXNze2V2YWx1YXRlU3RhdGVtZW50cyh0LGUsaSxyKXtsZXQgbz1uZXcgWEIoaSkscz1FQy5jcmVhdGVSb290KCk7cmV0dXJuIGUubGVuZ3RoPjAmJiFlWzBdLmlzRXF1aXZhbGVudChodCgidXNlIHN0cmljdCIpLnRvU3RtdCgpKSYmKGU9W2h0KCJ1c2Ugc3RyaWN0IikudG9TdG10KCksLi4uZV0pLG8udmlzaXRBbGxTdGF0ZW1lbnRzKGUscyksby5jcmVhdGVSZXR1cm5TdG10KHMpLHRoaXMuZXZhbHVhdGVDb2RlKHQscyxvLmdldEFyZ3MoKSxyKX1ldmFsdWF0ZUNvZGUodCxlLGkscil7bGV0IG89YCJ1c2Ugc3RyaWN0Ijske2UudG9Tb3VyY2UoKX1cbi8vIyBzb3VyY2VVUkw9JHt0fWAscz1bXSxhPVtdO2ZvcihsZXQgYyBpbiBpKWEucHVzaChpW2NdKSxzLnB1c2goYyk7aWYocil7bGV0IGM9VVgoLi4ucy5jb25jYXQoInJldHVybiBudWxsOyIpKS50b1N0cmluZygpLHU9Yy5zbGljZSgwLGMuaW5kZXhPZigicmV0dXJuIG51bGw7IikpLnNwbGl0KCJcbiIpLmxlbmd0aC0xO28rPWBcbiR7ZS50b1NvdXJjZU1hcEdlbmVyYXRvcih0LHUpLnRvSnNDb21tZW50KCl9YH1sZXQgbD1VWCguLi5zLmNvbmNhdChvKSk7cmV0dXJuIHRoaXMuZXhlY3V0ZUZ1bmN0aW9uKGwsYSl9ZXhlY3V0ZUZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQoLi4uZSl9fSl7dGhpcy5qaXRFdmFsdWF0b3I9dCx0aGlzLkZhY3RvcnlUYXJnZXQ9TmMsdGhpcy5SZXNvdXJjZUxvYWRlcj1SVix0aGlzLmVsZW1lbnRTY2hlbWFSZWdpc3RyeT1uZXcgU0R9Y29tcGlsZVBpcGUodCxlLGkpe2xldCBvPWpYKHtuYW1lOmkubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAsZGVwczpudWxsLHBpcGVOYW1lOmkucGlwZU5hbWUscHVyZTppLnB1cmUsaXNTdGFuZGFsb25lOmkuaXNTdGFuZGFsb25lfSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlUGlwZURlY2xhcmF0aW9uKHQsZSxpKXtsZXQgbz1qWCh7bmFtZToobj1pKS50eXBlLm5hbWUsdHlwZTpBcyhuLnR5cGUpLGludGVybmFsVHlwZTpuZXcgTG4obi50eXBlKSx0eXBlQXJndW1lbnRDb3VudDowLHBpcGVOYW1lOm4ubmFtZSxkZXBzOm51bGwscHVyZTpuLnB1cmU/PyEwLGlzU3RhbmRhbG9uZTpuLmlzU3RhbmRhbG9uZT8/ITF9KTt2YXIgbjtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVJbmplY3RhYmxlKHQsZSxpKXtsZXR7ZXhwcmVzc2lvbjpyLHN0YXRlbWVudHM6b309a1goe25hbWU6aS5uYW1lLHR5cGU6QXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IExuKGkudHlwZSksdHlwZUFyZ3VtZW50Q291bnQ6aS50eXBlQXJndW1lbnRDb3VudCxwcm92aWRlZEluOklRKGkucHJvdmlkZWRJbiksdXNlQ2xhc3M6c18oaSwidXNlQ2xhc3MiKSx1c2VGYWN0b3J5OkFRKGksInVzZUZhY3RvcnkiKSx1c2VWYWx1ZTpzXyhpLCJ1c2VWYWx1ZSIpLHVzZUV4aXN0aW5nOnNfKGksInVzZUV4aXN0aW5nIiksZGVwczppLmRlcHM/Lm1hcChMSyl9LCEwKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLG8pfWNvbXBpbGVJbmplY3RhYmxlRGVjbGFyYXRpb24odCxlLGkpe2xldHtleHByZXNzaW9uOnIsc3RhdGVtZW50czpvfT1rWCh7bmFtZTppLnR5cGUubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OjAscHJvdmlkZWRJbjpJUShpLnByb3ZpZGVkSW4pLHVzZUNsYXNzOnNfKGksInVzZUNsYXNzIiksdXNlRmFjdG9yeTpBUShpLCJ1c2VGYWN0b3J5IiksdXNlVmFsdWU6c18oaSwidXNlVmFsdWUiKSx1c2VFeGlzdGluZzpzXyhpLCJ1c2VFeGlzdGluZyIpLGRlcHM6aS5kZXBzPy5tYXAoUFEpfSwhMCk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLHQsZSxvKX1jb21waWxlSW5qZWN0b3IodCxlLGkpe2xldCBvPXpYKHtuYW1lOmkubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHByb3ZpZGVyczppLnByb3ZpZGVycyYmaS5wcm92aWRlcnMubGVuZ3RoPjA/bmV3IExuKGkucHJvdmlkZXJzKTpudWxsLGltcG9ydHM6aS5pbXBvcnRzLm1hcChzPT5uZXcgTG4ocykpfSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihvLmV4cHJlc3Npb24sdCxlLFtdKX1jb21waWxlSW5qZWN0b3JEZWNsYXJhdGlvbih0LGUsaSl7bGV0IHI9e25hbWU6KG49aSkudHlwZS5uYW1lLHR5cGU6QXMobi50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IExuKG4udHlwZSkscHJvdmlkZXJzOnZvaWQgMCE9PW4ucHJvdmlkZXJzJiZuLnByb3ZpZGVycy5sZW5ndGg+MD9uZXcgTG4obi5wcm92aWRlcnMpOm51bGwsaW1wb3J0czp2b2lkIDAhPT1uLmltcG9ydHM/bi5pbXBvcnRzLm1hcCh0PT5uZXcgTG4odCkpOltdfSxvPXpYKHIpO3ZhciBuO3JldHVybiB0aGlzLmppdEV4cHJlc3Npb24oby5leHByZXNzaW9uLHQsZSxbXSl9Y29tcGlsZU5nTW9kdWxlKHQsZSxpKXtsZXQgbz1pU2Uoe3R5cGU6QXMoaS50eXBlKSxpbnRlcm5hbFR5cGU6bmV3IExuKGkudHlwZSksYWRqYWNlbnRUeXBlOm5ldyBMbihpLnR5cGUpLGJvb3RzdHJhcDppLmJvb3RzdHJhcC5tYXAoQXMpLGRlY2xhcmF0aW9uczppLmRlY2xhcmF0aW9ucy5tYXAoQXMpLHB1YmxpY0RlY2xhcmF0aW9uVHlwZXM6bnVsbCxpbXBvcnRzOmkuaW1wb3J0cy5tYXAoQXMpLGluY2x1ZGVJbXBvcnRUeXBlczohMCxleHBvcnRzOmkuZXhwb3J0cy5tYXAoQXMpLHNlbGVjdG9yU2NvcGVNb2RlOmdfLklubGluZSxjb250YWluc0ZvcndhcmREZWNsczohMSxzY2hlbWFzOmkuc2NoZW1hcz9pLnNjaGVtYXMubWFwKEFzKTpudWxsLGlkOmkuaWQ/bmV3IExuKGkuaWQpOm51bGx9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKG8uZXhwcmVzc2lvbix0LGUsW10pfWNvbXBpbGVOZ01vZHVsZURlY2xhcmF0aW9uKHQsZSxpKXtsZXQgcj1mdW5jdGlvbihuKXtsZXQgdD1uZXcgc2g7cmV0dXJuIHQuc2V0KCJ0eXBlIixuZXcgTG4obi50eXBlKSksdm9pZCAwIT09bi5ib290c3RyYXAmJnQuc2V0KCJib290c3RyYXAiLG5ldyBMbihuLmJvb3RzdHJhcCkpLHZvaWQgMCE9PW4uZGVjbGFyYXRpb25zJiZ0LnNldCgiZGVjbGFyYXRpb25zIixuZXcgTG4obi5kZWNsYXJhdGlvbnMpKSx2b2lkIDAhPT1uLmltcG9ydHMmJnQuc2V0KCJpbXBvcnRzIixuZXcgTG4obi5pbXBvcnRzKSksdm9pZCAwIT09bi5leHBvcnRzJiZ0LnNldCgiZXhwb3J0cyIsbmV3IExuKG4uZXhwb3J0cykpLHZvaWQgMCE9PW4uc2NoZW1hcyYmdC5zZXQoInNjaGVtYXMiLG5ldyBMbihuLnNjaGVtYXMpKSx2b2lkIDAhPT1uLmlkJiZ0LnNldCgiaWQiLG5ldyBMbihuLmlkKSksVG4odGUuZGVmaW5lTmdNb2R1bGUpLmNhbGxGbihbdC50b0xpdGVyYWxNYXAoKV0pfShpKTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIsdCxlLFtdKX1jb21waWxlRGlyZWN0aXZlKHQsZSxpKXtsZXQgcj1EUShpKTtyZXR1cm4gdGhpcy5jb21waWxlRGlyZWN0aXZlRnJvbU1ldGEodCxlLHIpfWNvbXBpbGVEaXJlY3RpdmVEZWNsYXJhdGlvbih0LGUsaSl7bGV0IG89RksoaSx0aGlzLmNyZWF0ZVBhcnNlU291cmNlU3BhbigiRGlyZWN0aXZlIixpLnR5cGUubmFtZSxlKSk7cmV0dXJuIHRoaXMuY29tcGlsZURpcmVjdGl2ZUZyb21NZXRhKHQsZSxvKX1jb21waWxlRGlyZWN0aXZlRnJvbU1ldGEodCxlLGkpe2xldCByPW5ldyBpRCxzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1JSyhuLHQsZSk7UEsoaSxuKTtsZXQgcj1Ubih0ZS5kZWZpbmVEaXJlY3RpdmUpLmNhbGxGbihbaS50b0xpdGVyYWxNYXAoKV0sdm9pZCAwLCEwKSxvPWZ1bmN0aW9uKG4pe2xldCB0PU9LKG4pO3JldHVybiB0LnB1c2goSmQpLHQucHVzaCh1bChodChuLmlzU3RhbmRhbG9uZSkpKSx1bChUbih0ZS5EaXJlY3RpdmVEZWNsYXJhdGlvbix0KSl9KG4pO3JldHVybntleHByZXNzaW9uOnIsdHlwZTpvLHN0YXRlbWVudHM6W119fShpLHIsREQoKSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihzLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y29tcGlsZUNvbXBvbmVudCh0LGUsaSl7bGV0e3RlbXBsYXRlOnIsaW50ZXJwb2xhdGlvbjpvfT1OSyhpLnRlbXBsYXRlLGkubmFtZSxlLGkucHJlc2VydmVXaGl0ZXNwYWNlcyxpLmludGVycG9sYXRpb24pLHM9ey4uLmksLi4uRFEoaSksc2VsZWN0b3I6aS5zZWxlY3Rvcnx8dGhpcy5lbGVtZW50U2NoZW1hUmVnaXN0cnkuZ2V0RGVmYXVsdENvbXBvbmVudEVsZW1lbnROYW1lKCksdGVtcGxhdGU6cixkZWNsYXJhdGlvbnM6aS5kZWNsYXJhdGlvbnMubWFwKHRUZSksZGVjbGFyYXRpb25MaXN0RW1pdE1vZGU6MCxzdHlsZXM6Wy4uLmkuc3R5bGVzLC4uLnIuc3R5bGVzXSxlbmNhcHN1bGF0aW9uOmkuZW5jYXBzdWxhdGlvbixpbnRlcnBvbGF0aW9uOm8sY2hhbmdlRGV0ZWN0aW9uOmkuY2hhbmdlRGV0ZWN0aW9uLGFuaW1hdGlvbnM6bnVsbCE9aS5hbmltYXRpb25zP25ldyBMbihpLmFuaW1hdGlvbnMpOm51bGwsdmlld1Byb3ZpZGVyczpudWxsIT1pLnZpZXdQcm92aWRlcnM/bmV3IExuKGkudmlld1Byb3ZpZGVycyk6bnVsbCxyZWxhdGl2ZUNvbnRleHRGaWxlUGF0aDoiIixpMThuVXNlRXh0ZXJuYWxJZHM6ITB9O3JldHVybiB0aGlzLmNvbXBpbGVDb21wb25lbnRGcm9tTWV0YSh0LGBuZzovLy8ke2kubmFtZX0uanNgLHMpfWNvbXBpbGVDb21wb25lbnREZWNsYXJhdGlvbih0LGUsaSl7bGV0IG89ZnVuY3Rpb24obix0LGUpe2xldHt0ZW1wbGF0ZTppLGludGVycG9sYXRpb246cn09Tksobi50ZW1wbGF0ZSxuLnR5cGUubmFtZSxlLG4ucHJlc2VydmVXaGl0ZXNwYWNlcz8/ITEsbi5pbnRlcnBvbGF0aW9uKSxvPVtdO2lmKG4uZGVwZW5kZW5jaWVzKWZvcihsZXQgcyBvZiBuLmRlcGVuZGVuY2llcylzd2l0Y2gocy5raW5kKXtjYXNlImRpcmVjdGl2ZSI6Y2FzZSJjb21wb25lbnQiOm8ucHVzaCh4QihzKSk7YnJlYWs7Y2FzZSJwaXBlIjpvLnB1c2goaVRlKHMpKX1lbHNlKG4uY29tcG9uZW50c3x8bi5kaXJlY3RpdmVzfHxuLnBpcGVzKSYmKG4uY29tcG9uZW50cyYmby5wdXNoKC4uLm4uY29tcG9uZW50cy5tYXAocz0+eEIocywhMCkpKSxuLmRpcmVjdGl2ZXMmJm8ucHVzaCguLi5uLmRpcmVjdGl2ZXMubWFwKHM9PnhCKHMpKSksbi5waXBlcyYmby5wdXNoKC4uLmZ1bmN0aW9uKG4pe3JldHVybiBuP09iamVjdC5rZXlzKG4pLm1hcCh0PT4oe2tpbmQ6X18uUGlwZSxuYW1lOnQsdHlwZTpuZXcgTG4oblt0XSl9KSk6W119KG4ucGlwZXMpKSk7cmV0dXJuey4uLkZLKG4sdCksdGVtcGxhdGU6aSxzdHlsZXM6bi5zdHlsZXM/P1tdLGRlY2xhcmF0aW9uczpvLHZpZXdQcm92aWRlcnM6dm9pZCAwIT09bi52aWV3UHJvdmlkZXJzP25ldyBMbihuLnZpZXdQcm92aWRlcnMpOm51bGwsYW5pbWF0aW9uczp2b2lkIDAhPT1uLmFuaW1hdGlvbnM/bmV3IExuKG4uYW5pbWF0aW9ucyk6bnVsbCxjaGFuZ2VEZXRlY3Rpb246bi5jaGFuZ2VEZXRlY3Rpb24/P2NDLkRlZmF1bHQsZW5jYXBzdWxhdGlvbjpuLmVuY2Fwc3VsYXRpb24/P3FkLkVtdWxhdGVkLGludGVycG9sYXRpb246cixkZWNsYXJhdGlvbkxpc3RFbWl0TW9kZToyLHJlbGF0aXZlQ29udGV4dEZpbGVQYXRoOiIiLGkxOG5Vc2VFeHRlcm5hbElkczohMH19KGksdGhpcy5jcmVhdGVQYXJzZVNvdXJjZVNwYW4oIkNvbXBvbmVudCIsaS50eXBlLm5hbWUsZSksZSk7cmV0dXJuIHRoaXMuY29tcGlsZUNvbXBvbmVudEZyb21NZXRhKHQsZSxvKX1jb21waWxlQ29tcG9uZW50RnJvbU1ldGEodCxlLGkpe2xldCByPW5ldyBpRCxzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1JSyhuLHQsZSk7UEsoaSxuKTtsZXQgcj1uLnNlbGVjdG9yJiZaZC5wYXJzZShuLnNlbGVjdG9yKSxvPXImJnJbMF07aWYobyl7bGV0IGc9by5nZXRBdHRycygpO2cubGVuZ3RoJiZpLnNldCgiYXR0cnMiLHQuZ2V0Q29uc3RMaXRlcmFsKF9yKGcubWFwKGI9Pmh0KG51bGwhPWI/Yjp2b2lkIDApKSksITApKX1sZXQgcz1uLm5hbWUsYT1zP2Ake3N9X1RlbXBsYXRlYDpudWxsLGw9bi5jaGFuZ2VEZXRlY3Rpb24sYz1uLnRlbXBsYXRlLHU9bmV3IEtDKHQsQl8uY3JlYXRlUm9vdFNjb3BlKCksMCxzLG51bGwsbnVsbCxhLHRlLm5hbWVzcGFjZUhUTUwsbi5yZWxhdGl2ZUNvbnRleHRGaWxlUGF0aCxuLmkxOG5Vc2VFeHRlcm5hbElkcyksZD11LmJ1aWxkVGVtcGxhdGVGdW5jdGlvbihjLm5vZGVzLFtdKSxwPXUuZ2V0TmdDb250ZW50U2VsZWN0b3JzKCk7cCYmaS5zZXQoIm5nQ29udGVudFNlbGVjdG9ycyIscCksaS5zZXQoImRlY2xzIixodCh1LmdldENvbnN0Q291bnQoKSkpLGkuc2V0KCJ2YXJzIixodCh1LmdldFZhckNvdW50KCkpKTtsZXR7Y29uc3RFeHByZXNzaW9uczpoLHByZXBhcmVTdGF0ZW1lbnRzOmZ9PXUuZ2V0Q29uc3RzKCk7aWYoaC5sZW5ndGg+MCl7bGV0IGc9X3IoaCk7Zi5sZW5ndGg+MCYmKGc9cmEoW10sWy4uLmYsbmV3IERvKGcpXSkpLGkuc2V0KCJjb25zdHMiLGcpfWlmKGkuc2V0KCJ0ZW1wbGF0ZSIsZCksbi5kZWNsYXJhdGlvbnMubGVuZ3RoPjAmJmkuc2V0KCJkZXBlbmRlbmNpZXMiLGZ1bmN0aW9uKG4sdCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gbjtjYXNlIDE6cmV0dXJuIHJhKFtdLFtuZXcgRG8obildKTtjYXNlIDI6bGV0IGU9bi5wcm9wKCJtYXAiKS5jYWxsRm4oW1RuKHRlLnJlc29sdmVGb3J3YXJkUmVmKV0pO3JldHVybiByYShbXSxbbmV3IERvKGUpXSl9fShfcihuLmRlY2xhcmF0aW9ucy5tYXAoZz0+Zy50eXBlKSksbi5kZWNsYXJhdGlvbkxpc3RFbWl0TW9kZSkpLG51bGw9PT1uLmVuY2Fwc3VsYXRpb24mJihuLmVuY2Fwc3VsYXRpb249cWQuRW11bGF0ZWQpLG4uc3R5bGVzJiZuLnN0eWxlcy5sZW5ndGgpe2xldCBiPShuLmVuY2Fwc3VsYXRpb249PXFkLkVtdWxhdGVkP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmljdFN0eWxpbmc9ITB9c2hpbUNzc1RleHQodCxlLGk9IiIpe2xldCByPXQubWF0Y2goRVNlKXx8W107cmV0dXJuIHQ9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZSh3U2UsIiIpfSh0KSx0PXRoaXMuX2luc2VydERpcmVjdGl2ZXModCksW3RoaXMuX3Njb3BlQ3NzVGV4dCh0LGUsaSksLi4ucl0uam9pbigiXG4iKX1faW5zZXJ0RGlyZWN0aXZlcyh0KXtyZXR1cm4gdD10aGlzLl9pbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQodCksdGhpcy5faW5zZXJ0UG9seWZpbGxSdWxlc0luQ3NzVGV4dCh0KX1faW5zZXJ0UG9seWZpbGxEaXJlY3RpdmVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2UobVNlLGZ1bmN0aW9uKC4uLmUpe3JldHVybiBlWzJdKyJ7In0pfV9pbnNlcnRQb2x5ZmlsbFJ1bGVzSW5Dc3NUZXh0KHQpe3JldHVybiB0LnJlcGxhY2UoZ1NlLCguLi5lKT0+e2xldCBpPWVbMF0ucmVwbGFjZShlWzFdLCIiKS5yZXBsYWNlKGVbMl0sIiIpO3JldHVybiBlWzRdK2l9KX1fc2NvcGVDc3NUZXh0KHQsZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpO3JldHVybiB0PXRoaXMuX2luc2VydFBvbHlmaWxsSG9zdEluQ3NzVGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRDb2xvbkhvc3QodCksdD10aGlzLl9jb252ZXJ0Q29sb25Ib3N0Q29udGV4dCh0KSx0PXRoaXMuX2NvbnZlcnRTaGFkb3dET01TZWxlY3RvcnModCksZSYmKHQ9dGhpcy5fc2NvcGVTZWxlY3RvcnModCxlLGkpKSwodD10KyJcbiIrcikudHJpbSgpfV9leHRyYWN0VW5zY29wZWRSdWxlc0Zyb21Dc3NUZXh0KHQpe2xldCBpLGU9IiI7Zm9yKFdYLmxhc3RJbmRleD0wO251bGwhPT0oaT1XWC5leGVjKHQpKTspZSs9aVswXS5yZXBsYWNlKGlbMl0sIiIpLnJlcGxhY2UoaVsxXSxpWzRdKSsiXG5cbiI7cmV0dXJuIGV9X2NvbnZlcnRDb2xvbkhvc3QodCl7cmV0dXJuIHQucmVwbGFjZShfU2UsKGUsaSxyKT0+e2lmKGkpe2xldCBvPVtdLHM9aS5zcGxpdCgiLCIpLm1hcChhPT5hLnRyaW0oKSk7Zm9yKGxldCBhIG9mIHMpe2lmKCFhKWJyZWFrO2xldCBsPXRtK2EucmVwbGFjZShnRCwiIikrcjtvLnB1c2gobCl9cmV0dXJuIG8uam9pbigiLCIpfXJldHVybiB0bStyfSl9X2NvbnZlcnRDb2xvbkhvc3RDb250ZXh0KHQpe3JldHVybiB0LnJlcGxhY2UodlNlLGU9PntsZXQgcixpPVtbXV07Zm9yKDtyPXlTZS5leGVjKGUpOyl7bGV0IG89KHJbMV0/PyIiKS50cmltKCkuc3BsaXQoIiwiKS5tYXAoYT0+YS50cmltKCkpLmZpbHRlcihhPT4iIiE9PWEpLHM9aS5sZW5ndGg7a1NlKGksby5sZW5ndGgpO2ZvcihsZXQgYT0wO2E8by5sZW5ndGg7YSsrKWZvcihsZXQgbD0wO2w8cztsKyspaVtsK2Eqc10ucHVzaChvW2FdKTtlPXJbMl19cmV0dXJuIGkubWFwKG89PmZ1bmN0aW9uKG4sdCl7bGV0IGU9dG07ZF8ubGFzdEluZGV4PTA7bGV0IGk9ZF8udGVzdCh0KTtpZigwPT09bi5sZW5ndGgpcmV0dXJuIGUrdDtsZXQgcj1bbi5wb3AoKXx8IiJdO2Zvcig7bi5sZW5ndGg+MDspe2xldCBvPXIubGVuZ3RoLHM9bi5wb3AoKTtmb3IobGV0IGE9MDthPG87YSsrKXtsZXQgbD1yW2FdO3JbMipvK2FdPWwrIiAiK3MscltvK2FdPXMrIiAiK2wsclthXT1zK2x9fXJldHVybiByLm1hcChvPT5pP2Ake299JHt0fWA6YCR7b30ke2V9JHt0fSwgJHtvfSAke2V9JHt0fWApLmpvaW4oIiwiKX0obyxlKSkuam9pbigiLCAiKX0pfV9jb252ZXJ0U2hhZG93RE9NU2VsZWN0b3JzKHQpe3JldHVybiBiU2UucmVkdWNlKChlLGkpPT5lLnJlcGxhY2UoaSwiICIpLHQpfV9zY29wZVNlbGVjdG9ycyh0LGUsaSl7cmV0dXJuIFhYKHQscj0+e2xldCBvPXIuc2VsZWN0b3Iscz1yLmNvbnRlbnQ7cmV0dXJuIkAiIT09ci5zZWxlY3RvclswXT9vPXRoaXMuX3Njb3BlU2VsZWN0b3Ioci5zZWxlY3RvcixlLGksdGhpcy5zdHJpY3RTdHlsaW5nKTpyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBtZWRpYSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBzdXBwb3J0cyIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBkb2N1bWVudCIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBsYXllciIpP3M9dGhpcy5fc2NvcGVTZWxlY3RvcnMoci5jb250ZW50LGUsaSk6KHIuc2VsZWN0b3Iuc3RhcnRzV2l0aCgiQGZvbnQtZmFjZSIpfHxyLnNlbGVjdG9yLnN0YXJ0c1dpdGgoIkBwYWdlIikpJiYocz10aGlzLl9zdHJpcFNjb3BpbmdTZWxlY3RvcnMoci5jb250ZW50KSksbmV3IFdDKG8scyl9KX1fc3RyaXBTY29waW5nU2VsZWN0b3JzKHQpe3JldHVybiBYWCh0LGU9PntsZXQgaT1lLnNlbGVjdG9yLnJlcGxhY2UoWVgsIiAiKS5yZXBsYWNlKHFYLCIgIik7cmV0dXJuIG5ldyBXQyhpLGUuY29udGVudCl9KX1fc2NvcGVTZWxlY3Rvcih0LGUsaSxyKXtyZXR1cm4gdC5zcGxpdCgiLCIpLm1hcChvPT5vLnRyaW0oKS5zcGxpdChZWCkpLm1hcChvPT57bGV0W3MsLi4uYV09bztyZXR1cm5bKGM9PnRoaXMuX3NlbGVjdG9yTmVlZHNTY29waW5nKGMsZSk/cj90aGlzLl9hcHBseVN0cmljdFNlbGVjdG9yU2NvcGUoYyxlLGkpOnRoaXMuX2FwcGx5U2VsZWN0b3JTY29wZShjLGUsaSk6YykocyksLi4uYV0uam9pbigiICIpfSkuam9pbigiLCAiKX1fc2VsZWN0b3JOZWVkc1Njb3BpbmcodCxlKXtyZXR1cm4hdGhpcy5fbWFrZVNjb3BlTWF0Y2hlcihlKS50ZXN0KHQpfV9tYWtlU2NvcGVNYXRjaGVyKHQpe3JldHVybiB0PXQucmVwbGFjZSgvXFsvZywiXFxbIikucmVwbGFjZSgvXF0vZywiXFxdIiksbmV3IFJlZ0V4cCgiXigiK3QrIikoWz5cXHN+K1suLHs6XVtcXHNcXFNdKik/JCIsIm0iKX1fYXBwbHlTZWxlY3RvclNjb3BlKHQsZSxpKXtyZXR1cm4gdGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKX1fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKHQsZSxpKXtpZihkXy5sYXN0SW5kZXg9MCxkXy50ZXN0KHQpKXtsZXQgcj10aGlzLnN0cmljdFN0eWxpbmc/YFske2l9XWA6ZTtyZXR1cm4gdC5yZXBsYWNlKHFYLChvLHMpPT5zLnJlcGxhY2UoLyhbXjpdKikoOiopKC4qKS8sKGEsbCxjLHUpPT5sK3IrYyt1KSkucmVwbGFjZShkXyxyKyIgIil9cmV0dXJuIGUrIiAiK3R9X2FwcGx5U3RyaWN0U2VsZWN0b3JTY29wZSh0LGUsaSl7bGV0IHUsbz0iWyIrKGU9ZS5yZXBsYWNlKC9cW2lzPShbXlxdXSopXF0vZywobSwuLi54KT0+eFswXSkpKyJdIixzPW09PntsZXQgeD1tLnRyaW0oKTtpZigheClyZXR1cm4iIjtpZihtLmluZGV4T2YodG0pPi0xKXg9dGhpcy5fYXBwbHlTaW1wbGVTZWxlY3RvclNjb3BlKG0sZSxpKTtlbHNle2xldCBnPW0ucmVwbGFjZShkXywiIik7aWYoZy5sZW5ndGg+MCl7bGV0IGI9Zy5tYXRjaCgvKFteOl0qKSg6KikoLiopLyk7YiYmKHg9YlsxXStvK2JbMl0rYlszXSl9fXJldHVybiB4fSxhPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBsYWNlaG9sZGVycz1bXSx0aGlzLmluZGV4PTAsdD10aGlzLl9lc2NhcGVSZWdleE1hdGNoZXModCwvKFxbW15cXV0qXF0pL2cpLHQ9dGhpcy5fZXNjYXBlUmVnZXhNYXRjaGVzKHQsLyhcXC4pL2cpLHRoaXMuX2NvbnRlbnQ9dC5yZXBsYWNlKC8oOm50aC1bLVx3XSspKFwoW14pXStcKSkvZywoZSxpLHIpPT57bGV0IG89YF9fcGgtJHt0aGlzLmluZGV4fV9fYDtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnMucHVzaChyKSx0aGlzLmluZGV4KyssaStvfSl9cmVzdG9yZSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9fX3BoLShcZCspX18vZywoZSxpKT0+dGhpcy5wbGFjZWhvbGRlcnNbK2ldKX1jb250ZW50KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnR9X2VzY2FwZVJlZ2V4TWF0Y2hlcyh0LGUpe3JldHVybiB0LnJlcGxhY2UoZSwoaSxyKT0+e2xldCBvPWBfX3BoLSR7dGhpcy5pbmRleH1fX2A7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJzLnB1c2gociksdGhpcy5pbmRleCsrLG99KX19KHQpLGw9IiIsYz0wLGQ9LyggfD58XCt8fig/IT0pKVxzKi9nLGg9ISgodD1hLmNvbnRlbnQoKSkuaW5kZXhPZih0bSk+LTEpO2Zvcig7bnVsbCE9PSh1PWQuZXhlYyh0KSk7KXtsZXQgbT11WzFdLHg9dC5zbGljZShjLHUuaW5kZXgpLnRyaW0oKTtoPWh8fHguaW5kZXhPZih0bSk+LTEsbCs9YCR7aD9zKHgpOnh9ICR7bX0gYCxjPWQubGFzdEluZGV4fWxldCBmPXQuc3Vic3RyaW5nKGMpO3JldHVybiBoPWh8fGYuaW5kZXhPZih0bSk+LTEsbCs9aD9zKGYpOmYsYS5yZXN0b3JlKGwpfV9pbnNlcnRQb2x5ZmlsbEhvc3RJbkNzc1RleHQodCl7cmV0dXJuIHQucmVwbGFjZShNU2UsWlYpLnJlcGxhY2UoQ1NlLGdEKX19O3JldHVybiBuLm1hcChyPT5pLnNoaW1Dc3NUZXh0KHIsIl9uZ2NvbnRlbnQtJUNPTVAlIiwiX25naG9zdC0lQ09NUCUiKSl9KG4uc3R5bGVzKTpuLnN0eWxlcykucmVkdWNlKChELFQpPT4oVC50cmltKCkubGVuZ3RoPjAmJkQucHVzaCh0LmdldENvbnN0TGl0ZXJhbChodChUKSkpLEQpLFtdKTtiLmxlbmd0aD4wJiZpLnNldCgic3R5bGVzIixfcihiKSl9ZWxzZSBuLmVuY2Fwc3VsYXRpb249PT1xZC5FbXVsYXRlZCYmKG4uZW5jYXBzdWxhdGlvbj1xZC5Ob25lKTtuLmVuY2Fwc3VsYXRpb24hPT1xZC5FbXVsYXRlZCYmaS5zZXQoImVuY2Fwc3VsYXRpb24iLGh0KG4uZW5jYXBzdWxhdGlvbikpLG51bGwhPT1uLmFuaW1hdGlvbnMmJmkuc2V0KCJkYXRhIixxbChbe2tleToiYW5pbWF0aW9uIix2YWx1ZTpuLmFuaW1hdGlvbnMscXVvdGVkOiExfV0pKSxudWxsIT1sJiZsIT09Y0MuRGVmYXVsdCYmaS5zZXQoImNoYW5nZURldGVjdGlvbiIsaHQobCkpO2xldCBtPVRuKHRlLmRlZmluZUNvbXBvbmVudCkuY2FsbEZuKFtpLnRvTGl0ZXJhbE1hcCgpXSx2b2lkIDAsITApLHg9ZnVuY3Rpb24obil7bGV0IHQ9T0sobik7cmV0dXJuIHQucHVzaChQVihuLnRlbXBsYXRlLm5nQ29udGVudFNlbGVjdG9ycykpLHQucHVzaCh1bChodChuLmlzU3RhbmRhbG9uZSkpKSx1bChUbih0ZS5Db21wb25lbnREZWNsYXJhdGlvbix0KSl9KG4pO3JldHVybntleHByZXNzaW9uOm0sdHlwZTp4LHN0YXRlbWVudHM6W119fShpLHIsREQoaS5pbnRlcnBvbGF0aW9uKSk7cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihzLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y29tcGlsZUZhY3RvcnkodCxlLGkpe2xldCByPW5tKHtuYW1lOmkubmFtZSx0eXBlOkFzKGkudHlwZSksaW50ZXJuYWxUeXBlOm5ldyBMbihpLnR5cGUpLHR5cGVBcmd1bWVudENvdW50OmkudHlwZUFyZ3VtZW50Q291bnQsZGVwczoobj1pLmRlcHMsbnVsbD09bj9udWxsOm4ubWFwKExLKSksdGFyZ2V0OmkudGFyZ2V0fSk7dmFyIG47cmV0dXJuIHRoaXMuaml0RXhwcmVzc2lvbihyLmV4cHJlc3Npb24sdCxlLHIuc3RhdGVtZW50cyl9Y29tcGlsZUZhY3RvcnlEZWNsYXJhdGlvbih0LGUsaSl7bGV0IHI9bm0oe25hbWU6aS50eXBlLm5hbWUsdHlwZTpBcyhpLnR5cGUpLGludGVybmFsVHlwZTpuZXcgTG4oaS50eXBlKSx0eXBlQXJndW1lbnRDb3VudDowLGRlcHM6QXJyYXkuaXNBcnJheShpLmRlcHMpP2kuZGVwcy5tYXAoUFEpOmkuZGVwcyx0YXJnZXQ6aS50YXJnZXR9KTtyZXR1cm4gdGhpcy5qaXRFeHByZXNzaW9uKHIuZXhwcmVzc2lvbix0LGUsci5zdGF0ZW1lbnRzKX1jcmVhdGVQYXJzZVNvdXJjZVNwYW4odCxlLGkpe3JldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IHI9bmV3IHBEKCIiLGBpbiAke259ICR7dH0gaW4gJHtlfWApO3JldHVybiBuZXcgR28obmV3IHZtKHIsLTEsLTEsLTEpLG5ldyB2bShyLC0xLC0xLC0xKSl9KHQsZSxpKX1qaXRFeHByZXNzaW9uKHQsZSxpLHIpe2xldCBvPVsuLi5yLG5ldyBWdSgiJGRlZiIsdCx2b2lkIDAsbGwuRXhwb3J0ZWQpXTtyZXR1cm4gdGhpcy5qaXRFdmFsdWF0b3IuZXZhbHVhdGVTdGF0ZW1lbnRzKGksbyxuZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5jb250ZXh0PXR9cmVzb2x2ZUV4dGVybmFsUmVmZXJlbmNlKHQpe2lmKCJAYW5ndWxhci9jb3JlIiE9PXQubW9kdWxlTmFtZSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGV4dGVybmFsIHJlZmVyZW5jZSB0byAke3QubW9kdWxlTmFtZX0sIG9ubHkgcmVmZXJlbmNlcyB0byBAYW5ndWxhci9jb3JlIGFyZSBzdXBwb3J0ZWQuYCk7aWYoIXRoaXMuY29udGV4dC5oYXNPd25Qcm9wZXJ0eSh0Lm5hbWUpKXRocm93IG5ldyBFcnJvcihgTm8gdmFsdWUgcHJvdmlkZWQgZm9yIEBhbmd1bGFyL2NvcmUgc3ltYm9sICcke3QubmFtZX0nLmApO3JldHVybiB0aGlzLmNvbnRleHRbdC5uYW1lXX19KGUpLCEwKS4kZGVmfX07dmFyIE9EPWZ1bmN0aW9uKG4sLi4udCl7aWYoT0QudHJhbnNsYXRlKXtsZXQgaT1PRC50cmFuc2xhdGUobix0KTtuPWlbMF0sdD1pWzFdfWxldCBlPVZLKG5bMF0sbi5yYXdbMF0pO2ZvcihsZXQgaT0xO2k8bi5sZW5ndGg7aSsrKWUrPXRbaS0xXStWSyhuW2ldLG4ucmF3W2ldKTtyZXR1cm4gZX07ZnVuY3Rpb24gVksobix0KXtyZXR1cm4iOiI9PT10LmNoYXJBdCgwKT9uLnN1YnN0cmluZyhmdW5jdGlvbihuLHQpe2ZvcihsZXQgZT0xLGk9MTtlPG4ubGVuZ3RoO2UrKyxpKyspaWYoIlxcIj09PXRbaV0paSsrO2Vsc2UgaWYoIjoiPT09bltlXSlyZXR1cm4gZTt0aHJvdyBuZXcgRXJyb3IoYFVudGVybWluYXRlZCAkbG9jYWxpemUgbWV0YWRhdGEgYmxvY2sgaW4gIiR7dH0iLmApfShuLHQpKzEpOm59KCgpPT50eXBlb2YgZ2xvYmFsVGhpczwidSImJmdsb2JhbFRoaXN8fHR5cGVvZiBnbG9iYWw8InUiJiZnbG9iYWx8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZzZWxmKSgpLiRsb2NhbGl6ZT1PRDt2YXIgcjU9bnVsbDtmdW5jdGlvbiBZbCgpe3JldHVybiByNX12YXIgekQ9Y2xhc3N7fSxIdD1uZXcgcGUoIkRvY3VtZW50VG9rZW4iKSxLSz0oKCk9PntjbGFzcyBue2hpc3RvcnlHbyhlKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gaihaSyl9LHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO25ldyBwZSgiTG9jYXRpb24gSW5pdGlhbGl6ZWQiKTt2YXIgWks9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEtLe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZG9jPWUsdGhpcy5faW5pdCgpfV9pbml0KCl7dGhpcy5sb2NhdGlvbj13aW5kb3cubG9jYXRpb24sdGhpcy5faGlzdG9yeT13aW5kb3cuaGlzdG9yeX1nZXRCYXNlSHJlZkZyb21ET00oKXtyZXR1cm4gWWwoKS5nZXRCYXNlSHJlZih0aGlzLl9kb2MpfW9uUG9wU3RhdGUoZSl7bGV0IGk9WWwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBpLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsZSl9b25IYXNoQ2hhbmdlKGUpe2xldCBpPVlsKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gaS5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlLCExKSwoKT0+aS5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixlKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLmxvY2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMubG9jYXRpb24ucHJvdG9jb2x9Z2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLnBhdGhuYW1lfWdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5sb2NhdGlvbi5oYXNofXNldCBwYXRobmFtZShlKXt0aGlzLmxvY2F0aW9uLnBhdGhuYW1lPWV9cHVzaFN0YXRlKGUsaSxyKXtVSygpP3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGUsaSxyKTp0aGlzLmxvY2F0aW9uLmhhc2g9cn1yZXBsYWNlU3RhdGUoZSxpLHIpe1VLKCk/dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoZSxpLHIpOnRoaXMubG9jYXRpb24uaGFzaD1yfWZvcndhcmQoKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5faGlzdG9yeS5iYWNrKCl9aGlzdG9yeUdvKGU9MCl7dGhpcy5faGlzdG9yeS5nbyhlKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9oaXN0b3J5LnN0YXRlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBaSyhqKEh0KSl9LHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLG59KSgpO2Z1bmN0aW9uIFVLKCl7cmV0dXJuISF3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGV9ZnVuY3Rpb24gSksobix0KXtpZigwPT1uLmxlbmd0aClyZXR1cm4gdDtpZigwPT10Lmxlbmd0aClyZXR1cm4gbjtsZXQgZT0wO3JldHVybiBuLmVuZHNXaXRoKCIvIikmJmUrKyx0LnN0YXJ0c1dpdGgoIi8iKSYmZSsrLDI9PWU/bit0LnN1YnN0cmluZygxKToxPT1lP24rdDpuKyIvIit0fWZ1bmN0aW9uIHpLKG4pe2xldCB0PW4ubWF0Y2goLyN8XD98JC8pLGU9dCYmdC5pbmRleHx8bi5sZW5ndGg7cmV0dXJuIG4uc2xpY2UoMCxlLSgiLyI9PT1uW2UtMV0/MTowKSkrbi5zbGljZShlKX1mdW5jdGlvbiBTbShuKXtyZXR1cm4gbiYmIj8iIT09blswXT8iPyIrbjpufXZhciBjNT0oKCk9PntjbGFzcyBue2hpc3RvcnlHbyhlKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gam8oeVRlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSx2VGU9bmV3IHBlKCJhcHBCYXNlSHJlZiIpLHlUZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgYzV7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249ZSx0aGlzLl9yZW1vdmVMaXN0ZW5lckZucz1bXSx0aGlzLl9iYXNlSHJlZj1pPz90aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldEJhc2VIcmVmRnJvbURPTSgpPz9qbyhIdCkubG9jYXRpb24/Lm9yaWdpbj8/IiJ9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKGUpe3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKGUpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wcmVwYXJlRXh0ZXJuYWxVcmwoZSl7cmV0dXJuIEpLKHRoaXMuX2Jhc2VIcmVmLGUpfXBhdGgoZT0hMSl7bGV0IGk9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStTbSh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCkscj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIHImJmU/YCR7aX0ke3J9YDppfXB1c2hTdGF0ZShlLGkscixvKXtsZXQgcz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChyK1NtKG8pKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShlLGkscyl9cmVwbGFjZVN0YXRlKGUsaSxyLG8pe2xldCBzPXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKHIrU20obykpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKGUsaSxzKX1mb3J3YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28oZT0wKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhpc3RvcnlHbz8uKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEtLKSxqKHZUZSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaU09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9zdWJqZWN0PW5ldyBHLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5PWU7bGV0IGk9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VIcmVmPXpLKGpLKGkpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUocj0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOnIuc3RhdGUsdHlwZTpyLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGU9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoZSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1cnJlbnRQYXRoRXF1YWxUbyhlLGk9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoZStTbShpKSl9bm9ybWFsaXplKGUpe3JldHVybiBuLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbihuLHQpe3JldHVybiBuJiZ0LnN0YXJ0c1dpdGgobik/dC5zdWJzdHJpbmcobi5sZW5ndGgpOnR9KHRoaXMuX2Jhc2VIcmVmLGpLKGUpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGUpe3JldHVybiBlJiYiLyIhPT1lWzBdJiYoZT0iLyIrZSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxVcmwoZSl9Z28oZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1NtKGkpKSxyKX1yZXBsYWNlU3RhdGUoZSxpPSIiLHI9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUociwiIixlLGkpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChlK1NtKGkpKSxyKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhlPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4oZSl9b25VcmxDaGFuZ2UoZSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGUpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbnx8KHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj10aGlzLnN1YnNjcmliZShpPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGkudXJsLGkuc3RhdGUpfSkpLCgpPT57bGV0IGk9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoZSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShpLDEpLDA9PT10aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhlPSIiLGkpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JFYWNoKHI9PnIoZSxpKSl9c3Vic2NyaWJlKGUsaSxyKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6ZSxlcnJvcjppLGNvbXBsZXRlOnJ9KX19cmV0dXJuIG4ubm9ybWFsaXplUXVlcnlQYXJhbXM9U20sbi5qb2luV2l0aFNsYXNoPUpLLG4uc3RyaXBUcmFpbGluZ1NsYXNoPXpLLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihjNSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgaU0oaihjNSkpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGpLKG4pe3JldHVybiBuLnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgSEQ9KCgpPT4oZnVuY3Rpb24obil7bltuLkRlY2ltYWw9MF09IkRlY2ltYWwiLG5bbi5QZXJjZW50PTFdPSJQZXJjZW50IixuW24uQ3VycmVuY3k9Ml09IkN1cnJlbmN5IixuW24uU2NpZW50aWZpYz0zXT0iU2NpZW50aWZpYyJ9KEhEfHwoSEQ9e30pKSxIRCkpKCkseXM9KCgpPT4oZnVuY3Rpb24obil7bltuLkZvcm1hdD0wXT0iRm9ybWF0IixuW24uU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSJ9KHlzfHwoeXM9e30pKSx5cykpKCksb3I9KCgpPT4oZnVuY3Rpb24obil7bltuLk5hcnJvdz0wXT0iTmFycm93IixuW24uQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixuW24uV2lkZT0yXT0iV2lkZSIsbltuLlNob3J0PTNdPSJTaG9ydCJ9KG9yfHwob3I9e30pKSxvcikpKCksb2E9KCgpPT4oZnVuY3Rpb24obil7bltuLlNob3J0PTBdPSJTaG9ydCIsbltuLk1lZGl1bT0xXT0iTWVkaXVtIixuW24uTG9uZz0yXT0iTG9uZyIsbltuLkZ1bGw9M109IkZ1bGwifShvYXx8KG9hPXt9KSksb2EpKSgpLElzPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5EZWNpbWFsPTBdPSJEZWNpbWFsIixuW24uR3JvdXA9MV09Ikdyb3VwIixuW24uTGlzdD0yXT0iTGlzdCIsbltuLlBlcmNlbnRTaWduPTNdPSJQZXJjZW50U2lnbiIsbltuLlBsdXNTaWduPTRdPSJQbHVzU2lnbiIsbltuLk1pbnVzU2lnbj01XT0iTWludXNTaWduIixuW24uRXhwb25lbnRpYWw9Nl09IkV4cG9uZW50aWFsIixuW24uU3VwZXJzY3JpcHRpbmdFeHBvbmVudD03XT0iU3VwZXJzY3JpcHRpbmdFeHBvbmVudCIsbltuLlBlck1pbGxlPThdPSJQZXJNaWxsZSIsbltuLkluZmluaXR5PTldPSJJbmZpbml0eSIsbltuLk5hTj0xMF09Ik5hTiIsbltuLlRpbWVTZXBhcmF0b3I9MTFdPSJUaW1lU2VwYXJhdG9yIixuW24uQ3VycmVuY3lEZWNpbWFsPTEyXT0iQ3VycmVuY3lEZWNpbWFsIixuW24uQ3VycmVuY3lHcm91cD0xM109IkN1cnJlbmN5R3JvdXAifShJc3x8KElzPXt9KSksSXMpKSgpO2Z1bmN0aW9uIGtEKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLkRhdGVGb3JtYXRdLHQpfWZ1bmN0aW9uIEZEKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLlRpbWVGb3JtYXRdLHQpfWZ1bmN0aW9uIE5EKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLkRhdGVUaW1lRm9ybWF0XSx0KX1mdW5jdGlvbiBlcChuLHQpe2xldCBlPUFhKG4pLGk9ZVtSci5OdW1iZXJTeW1ib2xzXVt0XTtpZih0eXBlb2YgaT4idSIpe2lmKHQ9PT1Jcy5DdXJyZW5jeURlY2ltYWwpcmV0dXJuIGVbUnIuTnVtYmVyU3ltYm9sc11bSXMuRGVjaW1hbF07aWYodD09PUlzLkN1cnJlbmN5R3JvdXApcmV0dXJuIGVbUnIuTnVtYmVyU3ltYm9sc11bSXMuR3JvdXBdfXJldHVybiBpfWZ1bmN0aW9uICRLKG4pe2lmKCFuW1JyLkV4dHJhRGF0YV0pdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGV4dHJhIGxvY2FsZSBkYXRhIGZvciB0aGUgbG9jYWxlICIke25bUnIuTG9jYWxlSWRdfSIuIFVzZSAicmVnaXN0ZXJMb2NhbGVEYXRhIiB0byBsb2FkIG5ldyBkYXRhLiBTZWUgdGhlICJJMThuIGd1aWRlIiBvbiBhbmd1bGFyLmlvIHRvIGtub3cgbW9yZS5gKX1mdW5jdGlvbiBYbChuLHQpe2ZvcihsZXQgZT10O2U+LTE7ZS0tKWlmKHR5cGVvZiBuW2VdPCJ1IilyZXR1cm4gbltlXTt0aHJvdyBuZXcgRXJyb3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gJFYobil7bGV0W3QsZV09bi5zcGxpdCgiOiIpO3JldHVybntob3VyczordCxtaW51dGVzOitlfX12YXIgSVRlPS9eKFxkezQsfSktPyhcZFxkKS0/KFxkXGQpKD86VChcZFxkKSg/Ojo/KFxkXGQpKD86Oj8oXGRcZCkoPzpcLihcZCspKT8pPyk/KFp8KFsrLV0pKFxkXGQpOj8oXGRcZCkpPyk/JC8sdE09e30sUFRlPS8oKD86W15CRUdITE1PU1dZWmFiY2RobXN3eXonXSspfCg/OicoPzpbXiddfCcnKSonKXwoPzpHezEsNX18eXsxLDR9fFl7MSw0fXxNezEsNX18THsxLDV9fHd7MSwyfXxXezF9fGR7MSwyfXxFezEsNn18Y3sxLDZ9fGF7MSw1fXxiezEsNX18QnsxLDV9fGh7MSwyfXxIezEsMn18bXsxLDJ9fHN7MSwyfXxTezEsM318ensxLDR9fFp7MSw1fXxPezEsNH0pKShbXHNcU10qKS8sV2M9KCgpPT4oZnVuY3Rpb24obil7bltuLlNob3J0PTBdPSJTaG9ydCIsbltuLlNob3J0R01UPTFdPSJTaG9ydEdNVCIsbltuLkxvbmc9Ml09IkxvbmciLG5bbi5FeHRlbmRlZD0zXT0iRXh0ZW5kZWQifShXY3x8KFdjPXt9KSksV2MpKSgpLFVpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5GdWxsWWVhcj0wXT0iRnVsbFllYXIiLG5bbi5Nb250aD0xXT0iTW9udGgiLG5bbi5EYXRlPTJdPSJEYXRlIixuW24uSG91cnM9M109IkhvdXJzIixuW24uTWludXRlcz00XT0iTWludXRlcyIsbltuLlNlY29uZHM9NV09IlNlY29uZHMiLG5bbi5GcmFjdGlvbmFsU2Vjb25kcz02XT0iRnJhY3Rpb25hbFNlY29uZHMiLG5bbi5EYXk9N109IkRheSJ9KFVpfHwoVWk9e30pKSxVaSkpKCksSGk9KCgpPT4oZnVuY3Rpb24obil7bltuLkRheVBlcmlvZHM9MF09IkRheVBlcmlvZHMiLG5bbi5EYXlzPTFdPSJEYXlzIixuW24uTW9udGhzPTJdPSJNb250aHMiLG5bbi5FcmFzPTNdPSJFcmFzIn0oSGl8fChIaT17fSkpLEhpKSkoKTtmdW5jdGlvbiBSVGUobix0LGUsaSl7bGV0IHI9ZnVuY3Rpb24obil7aWYoR0sobikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuJiYhaXNOYU4obikpcmV0dXJuIG5ldyBEYXRlKG4pO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7aWYobj1uLnRyaW0oKSwvXihcZHs0fSgtXGR7MSwyfSgtXGR7MSwyfSk/KT8pJC8udGVzdChuKSl7bGV0W3Isbz0xLHM9MV09bi5zcGxpdCgiLSIpLm1hcChhPT4rYSk7cmV0dXJuIGpEKHIsby0xLHMpfWxldCBpLGU9cGFyc2VGbG9hdChuKTtpZighaXNOYU4obi1lKSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoaT1uLm1hdGNoKElUZSkpcmV0dXJuIGZ1bmN0aW9uKG4pe2xldCB0PW5ldyBEYXRlKDApLGU9MCxpPTAscj1uWzhdP3Quc2V0VVRDRnVsbFllYXI6dC5zZXRGdWxsWWVhcixvPW5bOF0/dC5zZXRVVENIb3Vyczp0LnNldEhvdXJzO25bOV0mJihlPU51bWJlcihuWzldK25bMTBdKSxpPU51bWJlcihuWzldK25bMTFdKSksci5jYWxsKHQsTnVtYmVyKG5bMV0pLE51bWJlcihuWzJdKS0xLE51bWJlcihuWzNdKSk7bGV0IHM9TnVtYmVyKG5bNF18fDApLWUsYT1OdW1iZXIobls1XXx8MCktaSxsPU51bWJlcihuWzZdfHwwKSxjPU1hdGguZmxvb3IoMWUzKnBhcnNlRmxvYXQoIjAuIisobls3XXx8MCkpKTtyZXR1cm4gby5jYWxsKHQscyxhLGwsYyksdH0oaSl9bGV0IHQ9bmV3IERhdGUobik7aWYoIUdLKHQpKXRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGNvbnZlcnQgIiR7bn0iIGludG8gYSBkYXRlYCk7cmV0dXJuIHR9KG4pO3Q9JGQoZSx0KXx8dDtsZXQgYSxzPVtdO2Zvcig7dDspe2lmKGE9UFRlLmV4ZWModCksIWEpe3MucHVzaCh0KTticmVha317cz1zLmNvbmNhdChhLnNsaWNlKDEpKTtsZXQgdT1zLnBvcCgpO2lmKCF1KWJyZWFrO3Q9dX19bGV0IGw9ci5nZXRUaW1lem9uZU9mZnNldCgpO2kmJihsPXRaKGksbCkscj1mdW5jdGlvbihuLHQsZSl7bGV0IHI9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybiBmdW5jdGlvbihuLHQpe3JldHVybihuPW5ldyBEYXRlKG4uZ2V0VGltZSgpKSkuc2V0TWludXRlcyhuLmdldE1pbnV0ZXMoKSt0KSxufShuLC0xKih0Wih0LHIpLXIpKX0ocixpKSk7bGV0IGM9IiI7cmV0dXJuIHMuZm9yRWFjaCh1PT57bGV0IGQ9ZnVuY3Rpb24obil7aWYodDVbbl0pcmV0dXJuIHQ1W25dO2xldCB0O3N3aXRjaChuKXtjYXNlIkciOmNhc2UiR0ciOmNhc2UiR0dHIjp0PXhyKEhpLkVyYXMsb3IuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiR0dHRyI6dD14cihIaS5FcmFzLG9yLldpZGUpO2JyZWFrO2Nhc2UiR0dHR0ciOnQ9eHIoSGkuRXJhcyxvci5OYXJyb3cpO2JyZWFrO2Nhc2UieSI6dD1JbyhVaS5GdWxsWWVhciwxLDAsITEsITApO2JyZWFrO2Nhc2UieXkiOnQ9SW8oVWkuRnVsbFllYXIsMiwwLCEwLCEwKTticmVhaztjYXNlInl5eSI6dD1JbyhVaS5GdWxsWWVhciwzLDAsITEsITApO2JyZWFrO2Nhc2UieXl5eSI6dD1JbyhVaS5GdWxsWWVhciw0LDAsITEsITApO2JyZWFrO2Nhc2UiWSI6dD1WRCgxKTticmVhaztjYXNlIllZIjp0PVZEKDIsITApO2JyZWFrO2Nhc2UiWVlZIjp0PVZEKDMpO2JyZWFrO2Nhc2UiWVlZWSI6dD1WRCg0KTticmVhaztjYXNlIk0iOmNhc2UiTCI6dD1JbyhVaS5Nb250aCwxLDEpO2JyZWFrO2Nhc2UiTU0iOmNhc2UiTEwiOnQ9SW8oVWkuTW9udGgsMiwxKTticmVhaztjYXNlIk1NTSI6dD14cihIaS5Nb250aHMsb3IuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiTU1NTSI6dD14cihIaS5Nb250aHMsb3IuV2lkZSk7YnJlYWs7Y2FzZSJNTU1NTSI6dD14cihIaS5Nb250aHMsb3IuTmFycm93KTticmVhaztjYXNlIkxMTCI6dD14cihIaS5Nb250aHMsb3IuQWJicmV2aWF0ZWQseXMuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJMTExMIjp0PXhyKEhpLk1vbnRocyxvci5XaWRlLHlzLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiTExMTEwiOnQ9eHIoSGkuTW9udGhzLG9yLk5hcnJvdyx5cy5TdGFuZGFsb25lKTticmVhaztjYXNlInciOnQ9ZTUoMSk7YnJlYWs7Y2FzZSJ3dyI6dD1lNSgyKTticmVhaztjYXNlIlciOnQ9ZTUoMSwhMCk7YnJlYWs7Y2FzZSJkIjp0PUlvKFVpLkRhdGUsMSk7YnJlYWs7Y2FzZSJkZCI6dD1JbyhVaS5EYXRlLDIpO2JyZWFrO2Nhc2UiYyI6Y2FzZSJjYyI6dD1JbyhVaS5EYXksMSk7YnJlYWs7Y2FzZSJjY2MiOnQ9eHIoSGkuRGF5cyxvci5BYmJyZXZpYXRlZCx5cy5TdGFuZGFsb25lKTticmVhaztjYXNlImNjY2MiOnQ9eHIoSGkuRGF5cyxvci5XaWRlLHlzLlN0YW5kYWxvbmUpO2JyZWFrO2Nhc2UiY2NjY2MiOnQ9eHIoSGkuRGF5cyxvci5OYXJyb3cseXMuU3RhbmRhbG9uZSk7YnJlYWs7Y2FzZSJjY2NjY2MiOnQ9eHIoSGkuRGF5cyxvci5TaG9ydCx5cy5TdGFuZGFsb25lKTticmVhaztjYXNlIkUiOmNhc2UiRUUiOmNhc2UiRUVFIjp0PXhyKEhpLkRheXMsb3IuQWJicmV2aWF0ZWQpO2JyZWFrO2Nhc2UiRUVFRSI6dD14cihIaS5EYXlzLG9yLldpZGUpO2JyZWFrO2Nhc2UiRUVFRUUiOnQ9eHIoSGkuRGF5cyxvci5OYXJyb3cpO2JyZWFrO2Nhc2UiRUVFRUVFIjp0PXhyKEhpLkRheXMsb3IuU2hvcnQpO2JyZWFrO2Nhc2UiYSI6Y2FzZSJhYSI6Y2FzZSJhYWEiOnQ9eHIoSGkuRGF5UGVyaW9kcyxvci5BYmJyZXZpYXRlZCk7YnJlYWs7Y2FzZSJhYWFhIjp0PXhyKEhpLkRheVBlcmlvZHMsb3IuV2lkZSk7YnJlYWs7Y2FzZSJhYWFhYSI6dD14cihIaS5EYXlQZXJpb2RzLG9yLk5hcnJvdyk7YnJlYWs7Y2FzZSJiIjpjYXNlImJiIjpjYXNlImJiYiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLkFiYnJldmlhdGVkLHlzLlN0YW5kYWxvbmUsITApO2JyZWFrO2Nhc2UiYmJiYiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLldpZGUseXMuU3RhbmRhbG9uZSwhMCk7YnJlYWs7Y2FzZSJiYmJiYiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLk5hcnJvdyx5cy5TdGFuZGFsb25lLCEwKTticmVhaztjYXNlIkIiOmNhc2UiQkIiOmNhc2UiQkJCIjp0PXhyKEhpLkRheVBlcmlvZHMsb3IuQWJicmV2aWF0ZWQseXMuRm9ybWF0LCEwKTticmVhaztjYXNlIkJCQkIiOnQ9eHIoSGkuRGF5UGVyaW9kcyxvci5XaWRlLHlzLkZvcm1hdCwhMCk7YnJlYWs7Y2FzZSJCQkJCQiI6dD14cihIaS5EYXlQZXJpb2RzLG9yLk5hcnJvdyx5cy5Gb3JtYXQsITApO2JyZWFrO2Nhc2UiaCI6dD1JbyhVaS5Ib3VycywxLC0xMik7YnJlYWs7Y2FzZSJoaCI6dD1JbyhVaS5Ib3VycywyLC0xMik7YnJlYWs7Y2FzZSJIIjp0PUlvKFVpLkhvdXJzLDEpO2JyZWFrO2Nhc2UiSEgiOnQ9SW8oVWkuSG91cnMsMik7YnJlYWs7Y2FzZSJtIjp0PUlvKFVpLk1pbnV0ZXMsMSk7YnJlYWs7Y2FzZSJtbSI6dD1JbyhVaS5NaW51dGVzLDIpO2JyZWFrO2Nhc2UicyI6dD1JbyhVaS5TZWNvbmRzLDEpO2JyZWFrO2Nhc2Uic3MiOnQ9SW8oVWkuU2Vjb25kcywyKTticmVhaztjYXNlIlMiOnQ9SW8oVWkuRnJhY3Rpb25hbFNlY29uZHMsMSk7YnJlYWs7Y2FzZSJTUyI6dD1JbyhVaS5GcmFjdGlvbmFsU2Vjb25kcywyKTticmVhaztjYXNlIlNTUyI6dD1JbyhVaS5GcmFjdGlvbmFsU2Vjb25kcywzKTticmVhaztjYXNlIloiOmNhc2UiWloiOmNhc2UiWlpaIjp0PUJEKFdjLlNob3J0KTticmVhaztjYXNlIlpaWlpaIjp0PUJEKFdjLkV4dGVuZGVkKTticmVhaztjYXNlIk8iOmNhc2UiT08iOmNhc2UiT09PIjpjYXNlInoiOmNhc2UienoiOmNhc2Uienp6Ijp0PUJEKFdjLlNob3J0R01UKTticmVhaztjYXNlIk9PT08iOmNhc2UiWlpaWiI6Y2FzZSJ6enp6Ijp0PUJEKFdjLkxvbmcpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJuIHQ1W25dPXQsdH0odSk7Yys9ZD9kKHIsZSxsKToiJyciPT09dT8iJyI6dS5yZXBsYWNlKC8oXid8JyQpL2csIiIpLnJlcGxhY2UoLycnL2csIiciKX0pLGN9ZnVuY3Rpb24gakQobix0LGUpe2xldCBpPW5ldyBEYXRlKDApO3JldHVybiBpLnNldEZ1bGxZZWFyKG4sdCxlKSxpLnNldEhvdXJzKDAsMCwwKSxpfWZ1bmN0aW9uICRkKG4sdCl7bGV0IGU9ZnVuY3Rpb24obil7cmV0dXJuIEFhKG4pW1JyLkxvY2FsZUlkXX0obik7aWYodE1bZV09dE1bZV18fHt9LHRNW2VdW3RdKXJldHVybiB0TVtlXVt0XTtsZXQgaT0iIjtzd2l0Y2godCl7Y2FzZSJzaG9ydERhdGUiOmk9a0QobixvYS5TaG9ydCk7YnJlYWs7Y2FzZSJtZWRpdW1EYXRlIjppPWtEKG4sb2EuTWVkaXVtKTticmVhaztjYXNlImxvbmdEYXRlIjppPWtEKG4sb2EuTG9uZyk7YnJlYWs7Y2FzZSJmdWxsRGF0ZSI6aT1rRChuLG9hLkZ1bGwpO2JyZWFrO2Nhc2Uic2hvcnRUaW1lIjppPUZEKG4sb2EuU2hvcnQpO2JyZWFrO2Nhc2UibWVkaXVtVGltZSI6aT1GRChuLG9hLk1lZGl1bSk7YnJlYWs7Y2FzZSJsb25nVGltZSI6aT1GRChuLG9hLkxvbmcpO2JyZWFrO2Nhc2UiZnVsbFRpbWUiOmk9RkQobixvYS5GdWxsKTticmVhaztjYXNlInNob3J0IjpsZXQgcj0kZChuLCJzaG9ydFRpbWUiKSxvPSRkKG4sInNob3J0RGF0ZSIpO2k9TEQoTkQobixvYS5TaG9ydCksW3Isb10pO2JyZWFrO2Nhc2UibWVkaXVtIjpsZXQgcz0kZChuLCJtZWRpdW1UaW1lIiksYT0kZChuLCJtZWRpdW1EYXRlIik7aT1MRChORChuLG9hLk1lZGl1bSksW3MsYV0pO2JyZWFrO2Nhc2UibG9uZyI6bGV0IGw9JGQobiwibG9uZ1RpbWUiKSxjPSRkKG4sImxvbmdEYXRlIik7aT1MRChORChuLG9hLkxvbmcpLFtsLGNdKTticmVhaztjYXNlImZ1bGwiOmxldCB1PSRkKG4sImZ1bGxUaW1lIiksZD0kZChuLCJmdWxsRGF0ZSIpO2k9TEQoTkQobixvYS5GdWxsKSxbdSxkXSl9cmV0dXJuIGkmJih0TVtlXVt0XT1pKSxpfWZ1bmN0aW9uIExEKG4sdCl7cmV0dXJuIHQmJihuPW4ucmVwbGFjZSgvXHsoW159XSspfS9nLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIG51bGwhPXQmJmkgaW4gdD90W2ldOmV9KSksbn1mdW5jdGlvbiBHYyhuLHQsZT0iLSIsaSxyKXtsZXQgbz0iIjsobjwwfHxyJiZuPD0wKSYmKHI/bj0xLW46KG49LW4sbz1lKSk7bGV0IHM9U3RyaW5nKG4pO2Zvcig7cy5sZW5ndGg8dDspcz0iMCIrcztyZXR1cm4gaSYmKHM9cy5zbGljZShzLmxlbmd0aC10KSksbytzfWZ1bmN0aW9uIElvKG4sdCxlPTAsaT0hMSxyPSExKXtyZXR1cm4gZnVuY3Rpb24obyxzKXtsZXQgYT1mdW5jdGlvbihuLHQpe3N3aXRjaChuKXtjYXNlIFVpLkZ1bGxZZWFyOnJldHVybiB0LmdldEZ1bGxZZWFyKCk7Y2FzZSBVaS5Nb250aDpyZXR1cm4gdC5nZXRNb250aCgpO2Nhc2UgVWkuRGF0ZTpyZXR1cm4gdC5nZXREYXRlKCk7Y2FzZSBVaS5Ib3VyczpyZXR1cm4gdC5nZXRIb3VycygpO2Nhc2UgVWkuTWludXRlczpyZXR1cm4gdC5nZXRNaW51dGVzKCk7Y2FzZSBVaS5TZWNvbmRzOnJldHVybiB0LmdldFNlY29uZHMoKTtjYXNlIFVpLkZyYWN0aW9uYWxTZWNvbmRzOnJldHVybiB0LmdldE1pbGxpc2Vjb25kcygpO2Nhc2UgVWkuRGF5OnJldHVybiB0LmdldERheSgpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERhdGVUeXBlIHZhbHVlICIke259Ii5gKX19KG4sbyk7aWYoKGU+MHx8YT4tZSkmJihhKz1lKSxuPT09VWkuSG91cnMpMD09PWEmJi0xMj09PWUmJihhPTEyKTtlbHNlIGlmKG49PT1VaS5GcmFjdGlvbmFsU2Vjb25kcylyZXR1cm4gZnVuY3Rpb24obix0KXtyZXR1cm4gR2MobiwzKS5zdWJzdHJpbmcoMCx0KX0oYSx0KTtsZXQgbD1lcChzLElzLk1pbnVzU2lnbik7cmV0dXJuIEdjKGEsdCxsLGkscil9fWZ1bmN0aW9uIHhyKG4sdCxlPXlzLkZvcm1hdCxpPSExKXtyZXR1cm4gZnVuY3Rpb24ocixvKXtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSxyLG8pe3N3aXRjaChlKXtjYXNlIEhpLk1vbnRoczpyZXR1cm4gZnVuY3Rpb24obix0LGUpe2xldCBpPUFhKG4pLG89WGwoW2lbUnIuTW9udGhzRm9ybWF0XSxpW1JyLk1vbnRoc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gWGwobyxlKX0odCxyLGkpW24uZ2V0TW9udGgoKV07Y2FzZSBIaS5EYXlzOnJldHVybiBmdW5jdGlvbihuLHQsZSl7bGV0IGk9QWEobiksbz1YbChbaVtSci5EYXlzRm9ybWF0XSxpW1JyLkRheXNTdGFuZGFsb25lXV0sdCk7cmV0dXJuIFhsKG8sZSl9KHQscixpKVtuLmdldERheSgpXTtjYXNlIEhpLkRheVBlcmlvZHM6bGV0IHM9bi5nZXRIb3VycygpLGE9bi5nZXRNaW51dGVzKCk7aWYobyl7bGV0IGM9ZnVuY3Rpb24obil7bGV0IHQ9QWEobik7cmV0dXJuICRLKHQpLCh0W1JyLkV4dHJhRGF0YV1bMl18fFtdKS5tYXAoaT0+InN0cmluZyI9PXR5cGVvZiBpPyRWKGkpOlskVihpWzBdKSwkVihpWzFdKV0pfSh0KSx1PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BYShuKTskSyhpKTtsZXQgbz1YbChbaVtSci5FeHRyYURhdGFdWzBdLGlbUnIuRXh0cmFEYXRhXVsxXV0sdCl8fFtdO3JldHVybiBYbChvLGUpfHxbXX0odCxyLGkpLGQ9Yy5maW5kSW5kZXgocD0+e2lmKEFycmF5LmlzQXJyYXkocCkpe2xldFtoLGZdPXAsbT1zPj1oLmhvdXJzJiZhPj1oLm1pbnV0ZXMseD1zPGYuaG91cnN8fHM9PT1mLmhvdXJzJiZhPGYubWludXRlcztpZihoLmhvdXJzPGYuaG91cnMpe2lmKG0mJngpcmV0dXJuITB9ZWxzZSBpZihtfHx4KXJldHVybiEwfWVsc2UgaWYocC5ob3Vycz09PXMmJnAubWludXRlcz09PWEpcmV0dXJuITA7cmV0dXJuITF9KTtpZigtMSE9PWQpcmV0dXJuIHVbZF19cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1BYShuKSxvPVhsKFtpW1JyLkRheVBlcmlvZHNGb3JtYXRdLGlbUnIuRGF5UGVyaW9kc1N0YW5kYWxvbmVdXSx0KTtyZXR1cm4gWGwobyxlKX0odCxyLGkpW3M8MTI/MDoxXTtjYXNlIEhpLkVyYXM6cmV0dXJuIGZ1bmN0aW9uKG4sdCl7cmV0dXJuIFhsKEFhKG4pW1JyLkVyYXNdLHQpfSh0LGkpW24uZ2V0RnVsbFllYXIoKTw9MD8wOjFdO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHRyYW5zbGF0aW9uIHR5cGUgJHtlfWApfX0ocixvLG4sdCxlLGkpfX1mdW5jdGlvbiBCRChuKXtyZXR1cm4gZnVuY3Rpb24odCxlLGkpe2xldCByPS0xKmksbz1lcChlLElzLk1pbnVzU2lnbikscz1yPjA/TWF0aC5mbG9vcihyLzYwKTpNYXRoLmNlaWwoci82MCk7c3dpdGNoKG4pe2Nhc2UgV2MuU2hvcnQ6cmV0dXJuKHI+PTA/IisiOiIiKStHYyhzLDIsbykrR2MoTWF0aC5hYnMociU2MCksMixvKTtjYXNlIFdjLlNob3J0R01UOnJldHVybiJHTVQiKyhyPj0wPyIrIjoiIikrR2MocywxLG8pO2Nhc2UgV2MuTG9uZzpyZXR1cm4iR01UIisocj49MD8iKyI6IiIpK0djKHMsMixvKSsiOiIrR2MoTWF0aC5hYnMociU2MCksMixvKTtjYXNlIFdjLkV4dGVuZGVkOnJldHVybiAwPT09aT8iWiI6KHI+PTA/IisiOiIiKStHYyhzLDIsbykrIjoiK0djKE1hdGguYWJzKHIlNjApLDIsbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gem9uZSB3aWR0aCAiJHtufSJgKX19fWZ1bmN0aW9uIGVaKG4pe3JldHVybiBqRChuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKyg0LW4uZ2V0RGF5KCkpKX1mdW5jdGlvbiBlNShuLHQ9ITEpe3JldHVybiBmdW5jdGlvbihlLGkpe2xldCByO2lmKHQpe2xldCBvPW5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksMSkuZ2V0RGF5KCktMSxzPWUuZ2V0RGF0ZSgpO3I9MStNYXRoLmZsb29yKChzK28pLzcpfWVsc2V7bGV0IG89ZVooZSkscz1mdW5jdGlvbihuKXtsZXQgdD1qRChuLDAsMSkuZ2V0RGF5KCk7cmV0dXJuIGpEKG4sMCwxKyh0PD00PzQ6MTEpLXQpfShvLmdldEZ1bGxZZWFyKCkpLGE9by5nZXRUaW1lKCktcy5nZXRUaW1lKCk7cj0xK01hdGgucm91bmQoYS82MDQ4ZTUpfXJldHVybiBHYyhyLG4sZXAoaSxJcy5NaW51c1NpZ24pKX19ZnVuY3Rpb24gVkQobix0PSExKXtyZXR1cm4gZnVuY3Rpb24oZSxpKXtyZXR1cm4gR2MoZVooZSkuZ2V0RnVsbFllYXIoKSxuLGVwKGksSXMuTWludXNTaWduKSx0KX19dmFyIHQ1PXt9O2Z1bmN0aW9uIHRaKG4sdCl7bj1uLnJlcGxhY2UoLzovZywiIik7bGV0IGU9RGF0ZS5wYXJzZSgiSmFuIDAxLCAxOTcwIDAwOjAwOjAwICIrbikvNmU0O3JldHVybiBpc05hTihlKT90OmV9ZnVuY3Rpb24gR0sobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4obi52YWx1ZU9mKCkpfXZhciBqVGU9L14oXGQrKT9cLigoXGQrKSgtKFxkKykpPyk/JC87ZnVuY3Rpb24gdTUobix0LGUpe2xldCBpPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIEFhKG4pW1JyLk51bWJlckZvcm1hdHNdW3RdfSh0LEhELkRlY2ltYWwpLHI9ZnVuY3Rpb24obix0PSItIil7bGV0IGU9e21pbkludDoxLG1pbkZyYWM6MCxtYXhGcmFjOjAscG9zUHJlOiIiLHBvc1N1ZjoiIixuZWdQcmU6IiIsbmVnU3VmOiIiLGdTaXplOjAsbGdTaXplOjB9LGk9bi5zcGxpdCgiOyIpLHI9aVswXSxvPWlbMV0scz0tMSE9PXIuaW5kZXhPZigiLiIpP3Iuc3BsaXQoIi4iKTpbci5zdWJzdHJpbmcoMCxyLmxhc3RJbmRleE9mKCIwIikrMSksci5zdWJzdHJpbmcoci5sYXN0SW5kZXhPZigiMCIpKzEpXSxhPXNbMF0sbD1zWzFdfHwiIjtlLnBvc1ByZT1hLnN1YnN0cmluZygwLGEuaW5kZXhPZigiIyIpKTtmb3IobGV0IHU9MDt1PGwubGVuZ3RoO3UrKyl7bGV0IGQ9bC5jaGFyQXQodSk7IjAiPT09ZD9lLm1pbkZyYWM9ZS5tYXhGcmFjPXUrMToiIyI9PT1kP2UubWF4RnJhYz11KzE6ZS5wb3NTdWYrPWR9bGV0IGM9YS5zcGxpdCgiLCIpO2lmKGUuZ1NpemU9Y1sxXT9jWzFdLmxlbmd0aDowLGUubGdTaXplPWNbMl18fGNbMV0/KGNbMl18fGNbMV0pLmxlbmd0aDowLG8pe2xldCB1PXIubGVuZ3RoLWUucG9zUHJlLmxlbmd0aC1lLnBvc1N1Zi5sZW5ndGgsZD1vLmluZGV4T2YoIiMiKTtlLm5lZ1ByZT1vLnN1YnN0cmluZygwLGQpLnJlcGxhY2UoLycvZywiIiksZS5uZWdTdWY9by5zbGljZShkK3UpLnJlcGxhY2UoLycvZywiIil9ZWxzZSBlLm5lZ1ByZT10K2UucG9zUHJlLGUubmVnU3VmPWUucG9zU3VmO3JldHVybiBlfShpLGVwKHQsSXMuTWludXNTaWduKSk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscixvLHM9ITEpe2xldCBhPSIiLGw9ITE7aWYoaXNGaW5pdGUobikpe2xldCBjPWZ1bmN0aW9uKG4pe2xldCBpLHIsbyxzLGEsdD1NYXRoLmFicyhuKSsiIixlPTA7Zm9yKChyPXQuaW5kZXhPZigiLiIpKT4tMSYmKHQ9dC5yZXBsYWNlKCIuIiwiIikpLChvPXQuc2VhcmNoKC9lL2kpKT4wPyhyPDAmJihyPW8pLHIrPSt0LnNsaWNlKG8rMSksdD10LnN1YnN0cmluZygwLG8pKTpyPDAmJihyPXQubGVuZ3RoKSxvPTA7IjAiPT09dC5jaGFyQXQobyk7bysrKTtpZihvPT09KGE9dC5sZW5ndGgpKWk9WzBdLHI9MTtlbHNle2ZvcihhLS07IjAiPT09dC5jaGFyQXQoYSk7KWEtLTtmb3Ioci09byxpPVtdLHM9MDtvPD1hO28rKyxzKyspaVtzXT1OdW1iZXIodC5jaGFyQXQobykpfXJldHVybiByPjIyJiYoaT1pLnNwbGljZSgwLDIxKSxlPXItMSxyPTEpLHtkaWdpdHM6aSxleHBvbmVudDplLGludGVnZXJMZW46cn19KG4pO3MmJihjPWZ1bmN0aW9uKG4pe2lmKDA9PT1uLmRpZ2l0c1swXSlyZXR1cm4gbjtsZXQgdD1uLmRpZ2l0cy5sZW5ndGgtbi5pbnRlZ2VyTGVuO3JldHVybiBuLmV4cG9uZW50P24uZXhwb25lbnQrPTI6KDA9PT10P24uZGlnaXRzLnB1c2goMCwwKToxPT09dCYmbi5kaWdpdHMucHVzaCgwKSxuLmludGVnZXJMZW4rPTIpLG59KGMpKTtsZXQgdT10Lm1pbkludCxkPXQubWluRnJhYyxwPXQubWF4RnJhYztpZihvKXtsZXQgYj1vLm1hdGNoKGpUZSk7aWYobnVsbD09PWIpdGhyb3cgbmV3IEVycm9yKGAke299IGlzIG5vdCBhIHZhbGlkIGRpZ2l0IGluZm9gKTtsZXQgRD1iWzFdLFQ9YlszXSxrPWJbNV07bnVsbCE9RCYmKHU9aTUoRCkpLG51bGwhPVQmJihkPWk1KFQpKSxudWxsIT1rP3A9aTUoayk6bnVsbCE9VCYmZD5wJiYocD1kKX0hZnVuY3Rpb24obix0LGUpe2lmKHQ+ZSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgZnJhY3Rpb24gKCR7dH0pIGlzIGhpZ2hlciB0aGFuIHRoZSBtYXhpbXVtICgke2V9KS5gKTtsZXQgaT1uLmRpZ2l0cyxyPWkubGVuZ3RoLW4uaW50ZWdlckxlbixvPU1hdGgubWluKE1hdGgubWF4KHQsciksZSkscz1vK24uaW50ZWdlckxlbixhPWlbc107aWYocz4wKXtpLnNwbGljZShNYXRoLm1heChuLmludGVnZXJMZW4scykpO2ZvcihsZXQgZD1zO2Q8aS5sZW5ndGg7ZCsrKWlbZF09MH1lbHNle3I9TWF0aC5tYXgoMCxyKSxuLmludGVnZXJMZW49MSxpLmxlbmd0aD1NYXRoLm1heCgxLHM9bysxKSxpWzBdPTA7Zm9yKGxldCBkPTE7ZDxzO2QrKylpW2RdPTB9aWYoYT49NSlpZihzLTE8MCl7Zm9yKGxldCBkPTA7ZD5zO2QtLSlpLnVuc2hpZnQoMCksbi5pbnRlZ2VyTGVuKys7aS51bnNoaWZ0KDEpLG4uaW50ZWdlckxlbisrfWVsc2UgaVtzLTFdKys7Zm9yKDtyPE1hdGgubWF4KDAsbyk7cisrKWkucHVzaCgwKTtsZXQgbD0wIT09byxjPXQrbi5pbnRlZ2VyTGVuLHU9aS5yZWR1Y2VSaWdodChmdW5jdGlvbihkLHAsaCxmKXtyZXR1cm4gZltoXT0ocCs9ZCk8MTA/cDpwLTEwLGwmJigwPT09ZltoXSYmaD49Yz9mLnBvcCgpOmw9ITEpLHA+PTEwPzE6MH0sMCk7dSYmKGkudW5zaGlmdCh1KSxuLmludGVnZXJMZW4rKyl9KGMsZCxwKTtsZXQgaD1jLmRpZ2l0cyxmPWMuaW50ZWdlckxlbixtPWMuZXhwb25lbnQseD1bXTtmb3IobD1oLmV2ZXJ5KGI9PiFiKTtmPHU7ZisrKWgudW5zaGlmdCgwKTtmb3IoO2Y8MDtmKyspaC51bnNoaWZ0KDApO2Y+MD94PWguc3BsaWNlKGYsaC5sZW5ndGgpOih4PWgsaD1bMF0pO2xldCBnPVtdO2ZvcihoLmxlbmd0aD49dC5sZ1NpemUmJmcudW5zaGlmdChoLnNwbGljZSgtdC5sZ1NpemUsaC5sZW5ndGgpLmpvaW4oIiIpKTtoLmxlbmd0aD50LmdTaXplOylnLnVuc2hpZnQoaC5zcGxpY2UoLXQuZ1NpemUsaC5sZW5ndGgpLmpvaW4oIiIpKTtoLmxlbmd0aCYmZy51bnNoaWZ0KGguam9pbigiIikpLGE9Zy5qb2luKGVwKGUsaSkpLHgubGVuZ3RoJiYoYSs9ZXAoZSxyKSt4LmpvaW4oIiIpKSxtJiYoYSs9ZXAoZSxJcy5FeHBvbmVudGlhbCkrIisiK20pfWVsc2UgYT1lcChlLElzLkluZmluaXR5KTtyZXR1cm4gYT1uPDAmJiFsP3QubmVnUHJlK2ErdC5uZWdTdWY6dC5wb3NQcmUrYSt0LnBvc1N1ZixhfShuLHIsdCxJcy5Hcm91cCxJcy5EZWNpbWFsLGUpfWZ1bmN0aW9uIGk1KG4pe2xldCB0PXBhcnNlSW50KG4pO2lmKGlzTmFOKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnRlZ2VyIGxpdGVyYWwgd2hlbiBwYXJzaW5nICIrbik7cmV0dXJuIHR9ZnVuY3Rpb24gcUQobix0KXt0PWVuY29kZVVSSUNvbXBvbmVudCh0KTtmb3IobGV0IGUgb2Ygbi5zcGxpdCgiOyIpKXtsZXQgaT1lLmluZGV4T2YoIj0iKSxbcixvXT0tMT09aT9bZSwiIl06W2Uuc2xpY2UoMCxpKSxlLnNsaWNlKGkrMSldO2lmKHIudHJpbSgpPT09dClyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KG8pfXJldHVybiBudWxsfXZhciBGbj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2l0ZXJhYmxlRGlmZmVycz1lLHRoaXMuX2tleVZhbHVlRGlmZmVycz1pLHRoaXMuX25nRWw9cix0aGlzLl9yZW5kZXJlcj1vLHRoaXMuX2l0ZXJhYmxlRGlmZmVyPW51bGwsdGhpcy5fa2V5VmFsdWVEaWZmZXI9bnVsbCx0aGlzLl9pbml0aWFsQ2xhc3Nlcz1bXSx0aGlzLl9yYXdDbGFzcz1udWxsfXNldCBrbGFzcyhlKXt0aGlzLl9yZW1vdmVDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9pbml0aWFsQ2xhc3Nlcz0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgvXHMrLyk6W10sdGhpcy5fYXBwbHlDbGFzc2VzKHRoaXMuX2luaXRpYWxDbGFzc2VzKSx0aGlzLl9hcHBseUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpfXNldCBuZ0NsYXNzKGUpe3RoaXMuX3JlbW92ZUNsYXNzZXModGhpcy5fcmF3Q2xhc3MpLHRoaXMuX2FwcGx5Q2xhc3Nlcyh0aGlzLl9pbml0aWFsQ2xhc3NlcyksdGhpcy5faXRlcmFibGVEaWZmZXI9bnVsbCx0aGlzLl9rZXlWYWx1ZURpZmZlcj1udWxsLHRoaXMuX3Jhd0NsYXNzPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KC9ccysvKTplLHRoaXMuX3Jhd0NsYXNzJiYod1QodGhpcy5fcmF3Q2xhc3MpP3RoaXMuX2l0ZXJhYmxlRGlmZmVyPXRoaXMuX2l0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuX3Jhd0NsYXNzKS5jcmVhdGUoKTp0aGlzLl9rZXlWYWx1ZURpZmZlcj10aGlzLl9rZXlWYWx1ZURpZmZlcnMuZmluZCh0aGlzLl9yYXdDbGFzcykuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2l0ZXJhYmxlRGlmZmVyKXtsZXQgZT10aGlzLl9pdGVyYWJsZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTtlJiZ0aGlzLl9hcHBseUl0ZXJhYmxlQ2hhbmdlcyhlKX1lbHNlIGlmKHRoaXMuX2tleVZhbHVlRGlmZmVyKXtsZXQgZT10aGlzLl9rZXlWYWx1ZURpZmZlci5kaWZmKHRoaXMuX3Jhd0NsYXNzKTtlJiZ0aGlzLl9hcHBseUtleVZhbHVlQ2hhbmdlcyhlKX19X2FwcGx5S2V5VmFsdWVDaGFuZ2VzKGUpe2UuZm9yRWFjaEFkZGVkSXRlbShpPT50aGlzLl90b2dnbGVDbGFzcyhpLmtleSxpLmN1cnJlbnRWYWx1ZSkpLGUuZm9yRWFjaENoYW5nZWRJdGVtKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGkua2V5LGkuY3VycmVudFZhbHVlKSksZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oaT0+e2kucHJldmlvdXNWYWx1ZSYmdGhpcy5fdG9nZ2xlQ2xhc3MoaS5rZXksITEpfSl9X2FwcGx5SXRlcmFibGVDaGFuZ2VzKGUpe2UuZm9yRWFjaEFkZGVkSXRlbShpPT57aWYoInN0cmluZyIhPXR5cGVvZiBpLml0ZW0pdGhyb3cgbmV3IEVycm9yKGBOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICR7VG8oaS5pdGVtKX1gKTt0aGlzLl90b2dnbGVDbGFzcyhpLml0ZW0sITApfSksZS5mb3JFYWNoUmVtb3ZlZEl0ZW0oaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaS5pdGVtLCExKSl9X2FwcGx5Q2xhc3NlcyhlKXtlJiYoQXJyYXkuaXNBcnJheShlKXx8ZSBpbnN0YW5jZW9mIFNldD9lLmZvckVhY2goaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaSwhMCkpOk9iamVjdC5rZXlzKGUpLmZvckVhY2goaT0+dGhpcy5fdG9nZ2xlQ2xhc3MoaSwhIWVbaV0pKSl9X3JlbW92ZUNsYXNzZXMoZSl7ZSYmKEFycmF5LmlzQXJyYXkoZSl8fGUgaW5zdGFuY2VvZiBTZXQ/ZS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITEpKTpPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGk9PnRoaXMuX3RvZ2dsZUNsYXNzKGksITEpKSl9X3RvZ2dsZUNsYXNzKGUsaSl7KGU9ZS50cmltKCkpJiZlLnNwbGl0KC9ccysvZykuZm9yRWFjaChyPT57aT90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscik6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LHIpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oa2MpLE0obkMpLE0oUmUpLE0oRXUpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOlsiY2xhc3MiLCJrbGFzcyJdLG5nQ2xhc3M6Im5nQ2xhc3MifSxzdGFuZGFsb25lOiEwfSksbn0pKCksZG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fdmlld0NvbnRhaW5lcj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX25nRm9yT2Y9bnVsbCx0aGlzLl9uZ0Zvck9mRGlydHk9ITAsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nRm9yT2YoZSl7dGhpcy5fbmdGb3JPZj1lLHRoaXMuX25nRm9yT2ZEaXJ0eT0hMH1zZXQgbmdGb3JUcmFja0J5KGUpe3RoaXMuX3RyYWNrQnlGbj1lfWdldCBuZ0ZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fdHJhY2tCeUZufXNldCBuZ0ZvclRlbXBsYXRlKGUpe2UmJih0aGlzLl90ZW1wbGF0ZT1lKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtsZXQgZT10aGlzLl9uZ0Zvck9mOyF0aGlzLl9kaWZmZXImJmUmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSh0aGlzLm5nRm9yVHJhY2tCeSkpfWlmKHRoaXMuX2RpZmZlcil7bGV0IGU9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdGb3JPZik7ZSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGUpfX1fYXBwbHlDaGFuZ2VzKGUpe2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXI7ZS5mb3JFYWNoT3BlcmF0aW9uKChyLG8scyk9PntpZihudWxsPT1yLnByZXZpb3VzSW5kZXgpaS5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuJGltcGxpY2l0PXQsdGhpcy5uZ0Zvck9mPWUsdGhpcy5pbmRleD1pLHRoaXMuY291bnQ9cn1nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9Z2V0IG9kZCgpe3JldHVybiF0aGlzLmV2ZW59fShyLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXM/dm9pZCAwOnMpO2Vsc2UgaWYobnVsbD09cylpLnJlbW92ZShudWxsPT09bz92b2lkIDA6byk7ZWxzZSBpZihudWxsIT09byl7bGV0IGE9aS5nZXQobyk7aS5tb3ZlKGEscyksWUsoYSxyKX19KTtmb3IobGV0IHI9MCxvPWkubGVuZ3RoO3I8bztyKyspe2xldCBhPWkuZ2V0KHIpLmNvbnRleHQ7YS5pbmRleD1yLGEuY291bnQ9byxhLm5nRm9yT2Y9dGhpcy5fbmdGb3JPZn1lLmZvckVhY2hJZGVudGl0eUNoYW5nZShyPT57WUsoaS5nZXQoci5jdXJyZW50SW5kZXgpLHIpfSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoZSxpKXtyZXR1cm4hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShPaSksTShWaSksTShrYykpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JUZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9LHN0YW5kYWxvbmU6ITB9KSxufSkoKTtmdW5jdGlvbiBZSyhuLHQpe24uY29udGV4dC4kaW1wbGljaXQ9dC5pdGVtfXZhciBCZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fdmlld0NvbnRhaW5lcj1lLHRoaXMuX2NvbnRleHQ9bmV3IHM1LHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9aX1zZXQgbmdJZihlKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD10aGlzLl9jb250ZXh0Lm5nSWY9ZSx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZUaGVuKGUpe1hLKCJuZ0lmVGhlbiIsZSksdGhpcy5fdGhlblRlbXBsYXRlUmVmPWUsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZFbHNlKGUpe1hLKCJuZ0lmRWxzZSIsZSksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPWUsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoZSxpKXtyZXR1cm4hMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShPaSksTShWaSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ0lmIiwiIl1dLGlucHV0czp7bmdJZjoibmdJZiIsbmdJZlRoZW46Im5nSWZUaGVuIixuZ0lmRWxzZToibmdJZkVsc2UifSxzdGFuZGFsb25lOiEwfSksbn0pKCksczU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfX07ZnVuY3Rpb24gWEsobix0KXtpZih0JiYhdC5jcmVhdGVFbWJlZGRlZFZpZXcpdGhyb3cgbmV3IEVycm9yKGAke259IG11c3QgYmUgYSBUZW1wbGF0ZVJlZiwgYnV0IHJlY2VpdmVkICcke1RvKHQpfScuYCl9dmFyIFdEPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj10LHRoaXMuX3RlbXBsYXRlUmVmPWUsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKHQpe3QmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IXQmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX0sQ3I9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRVc2VkPSExLHRoaXMuX2Nhc2VDb3VudD0wLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITF9c2V0IG5nU3dpdGNoKGUpe3RoaXMuX25nU3dpdGNoPWUsMD09PXRoaXMuX2Nhc2VDb3VudCYmdGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCEwKX1fYWRkQ2FzZSgpe3JldHVybiB0aGlzLl9jYXNlQ291bnQrK31fYWRkRGVmYXVsdChlKXt0aGlzLl9kZWZhdWx0Vmlld3N8fCh0aGlzLl9kZWZhdWx0Vmlld3M9W10pLHRoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGUpfV9tYXRjaENhc2UoZSl7bGV0IGk9ZT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9dGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8aSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXgrKyx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9PT10aGlzLl9jYXNlQ291bnQmJih0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoIXRoaXMuX2xhc3RDYXNlc01hdGNoZWQpLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD0wLHRoaXMuX2xhc3RDYXNlc01hdGNoZWQ9ITEpLGl9X3VwZGF0ZURlZmF1bHRDYXNlcyhlKXtpZih0aGlzLl9kZWZhdWx0Vmlld3MmJmUhPT10aGlzLl9kZWZhdWx0VXNlZCl7dGhpcy5fZGVmYXVsdFVzZWQ9ZTtmb3IobGV0IGk9MDtpPHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg7aSsrKXRoaXMuX2RlZmF1bHRWaWV3c1tpXS5lbmZvcmNlU3RhdGUoZSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2giLCIiXV0saW5wdXRzOntuZ1N3aXRjaDoibmdTd2l0Y2gifSxzdGFuZGFsb25lOiEwfSksbn0pKCksVXI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5uZ1N3aXRjaD1yLHIuX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBXRChlLGkpfW5nRG9DaGVjaygpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSxNKFZpKSxNKENyLDkpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hDYXNlIiwiIl1dLGlucHV0czp7bmdTd2l0Y2hDYXNlOiJuZ1N3aXRjaENhc2UifSxzdGFuZGFsb25lOiEwfSksbn0pKCksY2g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7ci5fYWRkRGVmYXVsdChuZXcgV0QoZSxpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oT2kpLE0oVmkpLE0oQ3IsOSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaERlZmF1bHQiLCIiXV0sc3RhbmRhbG9uZTohMH0pLG59KSgpLHp1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX25nRWw9ZSx0aGlzLl9kaWZmZXJzPWksdGhpcy5fcmVuZGVyZXI9cix0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoZSl7dGhpcy5fbmdTdHlsZT1lLCF0aGlzLl9kaWZmZXImJmUmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGUpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nU3R5bGUpO2UmJnRoaXMuX2FwcGx5Q2hhbmdlcyhlKX19X3NldFN0eWxlKGUsaSl7bGV0W3Isb109ZS5zcGxpdCgiLiIpLHM9LTE9PT1yLmluZGV4T2YoIi0iKT92b2lkIDA6QmwuRGFzaENhc2U7bnVsbCE9aT90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscixvP2Ake2l9JHtvfWA6aSxzKTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQscixzKX1fYXBwbHlDaGFuZ2VzKGUpe2UuZm9yRWFjaFJlbW92ZWRJdGVtKGk9PnRoaXMuX3NldFN0eWxlKGkua2V5LG51bGwpKSxlLmZvckVhY2hBZGRlZEl0ZW0oaT0+dGhpcy5fc2V0U3R5bGUoaS5rZXksaS5jdXJyZW50VmFsdWUpKSxlLmZvckVhY2hDaGFuZ2VkSXRlbShpPT50aGlzLl9zZXRTdHlsZShpLmtleSxpLmN1cnJlbnRWYWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKG5DKSxNKEV1KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5wdXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn0sc3RhbmRhbG9uZTohMH0pLG59KSgpLG9zPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX3ZpZXdSZWY9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I9bnVsbH1uZ09uQ2hhbmdlcyhlKXtpZihlLm5nVGVtcGxhdGVPdXRsZXR8fGUubmdUZW1wbGF0ZU91dGxldEluamVjdG9yKXtsZXQgaT10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmkucmVtb3ZlKGkuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXtsZXR7bmdUZW1wbGF0ZU91dGxldDpyLG5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Om8sbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOnN9PXRoaXM7dGhpcy5fdmlld1JlZj1pLmNyZWF0ZUVtYmVkZGVkVmlldyhyLG8scz97aW5qZWN0b3I6c306dm9pZCAwKX1lbHNlIHRoaXMuX3ZpZXdSZWY9bnVsbH1lbHNlIHRoaXMuX3ZpZXdSZWYmJmUubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJnRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJih0aGlzLl92aWV3UmVmLmNvbnRleHQ9dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oT2kpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltGdF19KSxufSkoKTtmdW5jdGlvbiBZRChuLHQpe3JldHVybiBuZXcgQXQoMjEwMCwhMSl9dmFyIEpUZT1uZXcgY2xhc3N7Y3JlYXRlU3Vic2NyaXB0aW9uKHQsZSl7cmV0dXJuIHQudGhlbihlLGk9Pnt0aHJvdyBpfSl9ZGlzcG9zZSh0KXt9fSwkVGU9bmV3IGNsYXNze2NyZWF0ZVN1YnNjcmlwdGlvbih0LGUpe3JldHVybiB0LnN1YnNjcmliZSh7bmV4dDplLGVycm9yOmk9Pnt0aHJvdyBpfX0pfWRpc3Bvc2UodCl7dC51bnN1YnNjcmliZSgpfX0sR2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsLHRoaXMuX3N0cmF0ZWd5PW51bGwsdGhpcy5fcmVmPWV9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24mJnRoaXMuX2Rpc3Bvc2UoKSx0aGlzLl9yZWY9bnVsbH10cmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuX29iaj9lIT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0oZSkpOnRoaXMuX2xhdGVzdFZhbHVlOihlJiZ0aGlzLl9zdWJzY3JpYmUoZSksdGhpcy5fbGF0ZXN0VmFsdWUpfV9zdWJzY3JpYmUoZSl7dGhpcy5fb2JqPWUsdGhpcy5fc3RyYXRlZ3k9dGhpcy5fc2VsZWN0U3RyYXRlZ3koZSksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbihlLGk9PnRoaXMuX3VwZGF0ZUxhdGVzdFZhbHVlKGUsaSkpfV9zZWxlY3RTdHJhdGVneShlKXtpZihuXyhlKSlyZXR1cm4gSlRlO2lmKFgzKGUpKXJldHVybiAkVGU7dGhyb3cgWUQoKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91cGRhdGVMYXRlc3RWYWx1ZShlLGkpe2U9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1pLHRoaXMuX3JlZi5tYXJrRm9yQ2hlY2soKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0obm4sMTYpKX0sbi5cdTAyNzVwaXBlPUIwKHtuYW1lOiJhc3luYyIsdHlwZTpuLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLG59KSgpLGVEZT1uZXcgcGUoIkRBVEVfUElQRV9ERUZBVUxUX1RJTUVaT05FIiksVV89KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMubG9jYWxlPWUsdGhpcy5kZWZhdWx0VGltZXpvbmU9aX10cmFuc2Zvcm0oZSxpPSJtZWRpdW1EYXRlIixyLG8pe2lmKG51bGw9PWV8fCIiPT09ZXx8ZSE9ZSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFJUZShlLGksb3x8dGhpcy5sb2NhbGUscj8/dGhpcy5kZWZhdWx0VGltZXpvbmU/P3ZvaWQgMCl9Y2F0Y2gocyl7dGhyb3cgWUQoKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oV2QsMTYpLE0oZURlLDI0KSl9LG4uXHUwMjc1cGlwZT1CMCh7bmFtZToiZGF0ZSIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMH0pLG59KSgpLFFsPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbG9jYWxlPWV9dHJhbnNmb3JtKGUsaSxyKXtpZighZnVuY3Rpb24obil7cmV0dXJuIShudWxsPT1ufHwiIj09PW58fG4hPW4pfShlKSlyZXR1cm4gbnVsbDtyPXJ8fHRoaXMuX2xvY2FsZTt0cnl7bGV0IG89ZnVuY3Rpb24obil7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhaXNOYU4oTnVtYmVyKG4pLXBhcnNlRmxvYXQobikpKXJldHVybiBOdW1iZXIobik7aWYoIm51bWJlciIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihgJHtufSBpcyBub3QgYSBudW1iZXJgKTtyZXR1cm4gbn0oZSk7cmV0dXJuIHU1KG8scixpKX1jYXRjaChvKXt0aHJvdyBZRCgpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShXZCwxNikpfSxuLlx1MDI3NXBpcGU9QjAoe25hbWU6Im51bWJlciIsdHlwZTpuLHB1cmU6ITAsc3RhbmRhbG9uZTohMH0pLG59KSgpLG5aPSgoKT0+e2NsYXNzIG57dHJhbnNmb3JtKGUsaSxyKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKCF0aGlzLnN1cHBvcnRzKGUpKXRocm93IFlEKCk7cmV0dXJuIGUuc2xpY2UoaSxyKX1zdXBwb3J0cyhlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV8fEFycmF5LmlzQXJyYXkoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXBpcGU9QjAoe25hbWU6InNsaWNlIix0eXBlOm4scHVyZTohMSxzdGFuZGFsb25lOiEwfSksbn0pKCksTWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGQ1PSJicm93c2VyIjtmdW5jdGlvbiBYRChuKXtyZXR1cm4gbj09PWQ1fW5ldyBJYygiMTQuMi4xMSIpO3ZhciBFbT1jbGFzc3t9O2Z1bmN0aW9uIHNEZShuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCIvIik/bi5zbGljZSgxKTpufW5ldyBwZSgiUFJFQ09OTkVDVF9DSEVDS19CTE9DS0xJU1QiKTt2YXIgYURlPW49Pm4uc3JjLGxEZT1uZXcgcGUoIkltYWdlTG9hZGVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+YURlfSk7ZnVuY3Rpb24gUUQobix0KXtyZXR1cm4gZnVuY3Rpb24oaSxyPXtlbnN1cmVQcmVjb25uZWN0OiEwfSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKCJzdHJpbmciIT10eXBlb2Ygbnx8IiI9PT1uLnRyaW0oKSlyZXR1cm4hMTt0cnl7cmV0dXJuIG5ldyBVUkwobiksITB9Y2F0Y2h7cmV0dXJuITF9fShpKXx8ZnVuY3Rpb24obix0KXt0aHJvdyBuZXcgQXQoMjk1OSwhMSl9KCksaT1mdW5jdGlvbihuKXtyZXR1cm4gbi5lbmRzV2l0aCgiLyIpP24uc2xpY2UoMCwtMSk6bn0oaSksW3twcm92aWRlOmxEZSx1c2VWYWx1ZTphPT4oZnVuY3Rpb24obil7cmV0dXJuL15odHRwcz86XC9cLy8udGVzdChuKX0oYS5zcmMpJiZmdW5jdGlvbihuLHQpe3Rocm93IG5ldyBBdCgyOTU5LCExKX0oKSxuKGksey4uLmEsc3JjOnNEZShhLnNyYyl9KSl9XX19UUQoZnVuY3Rpb24obix0KXtsZXQgZT0iZm9ybWF0PWF1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3aWR0aD0ke3Qud2lkdGh9YCksYCR7bn0vY2RuLWNnaS9pbWFnZS8ke2V9LyR7dC5zcmN9YH0pLFFEKGZ1bmN0aW9uKG4sdCl7bGV0IGU9ImZfYXV0byxxX2F1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3XyR7dC53aWR0aH1gKSxgJHtufS9pbWFnZS91cGxvYWQvJHtlfS8ke3Quc3JjfWB9KSxRRChmdW5jdGlvbihuLHQpe2xldCBlPSJ0cjpxLWF1dG8iO3JldHVybiB0LndpZHRoJiYoZSs9YCx3LSR7dC53aWR0aH1gKSxgJHtufS8ke2V9LyR7dC5zcmN9YH0pLFFEKGZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IFVSTChgJHtufS8ke3Quc3JjfWApO3JldHVybiBlLnNlYXJjaFBhcmFtcy5zZXQoImF1dG8iLCJmb3JtYXQiKSx0LndpZHRoJiZlLnNlYXJjaFBhcmFtcy5zZXQoInciLHQud2lkdGgudG9TdHJpbmcoKSksZS5ocmVmfSk7dmFyIEtELGg1PWNsYXNzIGV4dGVuZHMgekR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fSxhTT1jbGFzcyBleHRlbmRzIGg1e3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbihuKXtyNXx8KHI1PW4pfShuZXcgYU0pfW9uQW5kQ2FuY2VsKHQsZSxpKXtyZXR1cm4gdC5hZGRFdmVudExpc3RlbmVyKGUsaSwhMSksKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpLCExKX19ZGlzcGF0Y2hFdmVudCh0LGUpe3QuZGlzcGF0Y2hFdmVudChlKX1yZW1vdmUodCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9Y3JlYXRlRWxlbWVudCh0LGUpe3JldHVybihlPWV8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQodCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUodCl7cmV0dXJuIHQubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KHQsZSl7cmV0dXJuIndpbmRvdyI9PT1lP3dpbmRvdzoiZG9jdW1lbnQiPT09ZT90OiJib2R5Ij09PWU/dC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYodCl7bGV0IGU9KHJNPXJNfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIikpP3JNLmdldEF0dHJpYnV0ZSgiaHJlZiIpOm51bGw7cmV0dXJuIG51bGw9PWU/bnVsbDpmdW5jdGlvbihuKXsoS0Q9S0R8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuc2V0QXR0cmlidXRlKCJocmVmIixuKTtsZXQgdD1LRC5wYXRobmFtZTtyZXR1cm4iLyI9PT10LmNoYXJBdCgwKT90OmAvJHt0fWB9KGUpfXJlc2V0QmFzZUVsZW1lbnQoKXtyTT1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudH1nZXRDb29raWUodCl7cmV0dXJuIHFEKGRvY3VtZW50LmNvb2tpZSx0KX19LHJNPW51bGwsY1o9bmV3IHBlKCJUUkFOU0lUSU9OX0lEIikseURlPVt7cHJvdmlkZTokMyx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4oKT0+e2UuZ2V0KE9UKS5kb25lUHJvbWlzZS50aGVuKCgpPT57bGV0IGk9WWwoKSxyPXQucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbbmctdHJhbnNpdGlvbj0iJHtufSJdYCk7Zm9yKGxldCBvPTA7bzxyLmxlbmd0aDtvKyspaS5yZW1vdmUocltvXSl9KX19LGRlcHM6W2NaLEh0LFhuXSxtdWx0aTohMH1dLGJEZT0oKCk9PntjbGFzcyBue2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWkQ9bmV3IHBlKCJFdmVudE1hbmFnZXJQbHVnaW5zIiksSkQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3pvbmU9aSx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1uZXcgTWFwLGUuZm9yRWFjaChyPT5yLm1hbmFnZXI9dGhpcyksdGhpcy5fcGx1Z2lucz1lLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGkpLmFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpfWFkZEdsb2JhbEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGkpLmFkZEdsb2JhbEV2ZW50TGlzdGVuZXIoZSxpLHIpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihlKXtsZXQgaT10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoZSk7aWYoaSlyZXR1cm4gaTtsZXQgcj10aGlzLl9wbHVnaW5zO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXQgcz1yW29dO2lmKHMuc3VwcG9ydHMoZSkpcmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChlLHMpLHN9dGhyb3cgbmV3IEVycm9yKGBObyBldmVudCBtYW5hZ2VyIHBsdWdpbiBmb3VuZCBmb3IgZXZlbnQgJHtlfWApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFpEKSxqKF90KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJEQ9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZG9jPXR9YWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsaSl7bGV0IHI9WWwoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsdCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBldmVudCB0YXJnZXQgJHtyfSBmb3IgZXZlbnQgJHtlfWApO3JldHVybiB0aGlzLmFkZEV2ZW50TGlzdGVuZXIocixlLGkpfX0sdVo9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0eWxlc1NldD1uZXcgU2V0fWFkZFN0eWxlcyhlKXtsZXQgaT1uZXcgU2V0O2UuZm9yRWFjaChyPT57dGhpcy5fc3R5bGVzU2V0LmhhcyhyKXx8KHRoaXMuX3N0eWxlc1NldC5hZGQociksaS5hZGQocikpfSksdGhpcy5vblN0eWxlc0FkZGVkKGkpfW9uU3R5bGVzQWRkZWQoZSl7fWdldEFsbFN0eWxlcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX3N0eWxlc1NldCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG9NPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB1Wntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX2RvYz1lLHRoaXMuX2hvc3ROb2Rlcz1uZXcgTWFwLHRoaXMuX2hvc3ROb2Rlcy5zZXQoZS5oZWFkLFtdKX1fYWRkU3R5bGVzVG9Ib3N0KGUsaSxyKXtlLmZvckVhY2gobz0+e2xldCBzPXRoaXMuX2RvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3MudGV4dENvbnRlbnQ9byxyLnB1c2goaS5hcHBlbmRDaGlsZChzKSl9KX1hZGRIb3N0KGUpe2xldCBpPVtdO3RoaXMuX2FkZFN0eWxlc1RvSG9zdCh0aGlzLl9zdHlsZXNTZXQsZSxpKSx0aGlzLl9ob3N0Tm9kZXMuc2V0KGUsaSl9cmVtb3ZlSG9zdChlKXtsZXQgaT10aGlzLl9ob3N0Tm9kZXMuZ2V0KGUpO2kmJmkuZm9yRWFjaChpWiksdGhpcy5faG9zdE5vZGVzLmRlbGV0ZShlKX1vblN0eWxlc0FkZGVkKGUpe3RoaXMuX2hvc3ROb2Rlcy5mb3JFYWNoKChpLHIpPT57dGhpcy5fYWRkU3R5bGVzVG9Ib3N0KGUscixpKX0pfW5nT25EZXN0cm95KCl7dGhpcy5faG9zdE5vZGVzLmZvckVhY2goZT0+ZS5mb3JFYWNoKGlaKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBpWihuKXtZbCgpLnJlbW92ZShuKX12YXIgcDU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sXzU9LyVDT01QJS9nO2Z1bmN0aW9uIGVBKG4sdCxlKXtmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyl7bGV0IHI9dFtpXTtBcnJheS5pc0FycmF5KHIpP2VBKG4scixlKToocj1yLnJlcGxhY2UoXzUsbiksZS5wdXNoKHIpKX1yZXR1cm4gZX1mdW5jdGlvbiBvWihuKXtyZXR1cm4gdD0+e2lmKCJfX25nVW53cmFwX18iPT09dClyZXR1cm4gbjshMT09PW4odCkmJih0LnByZXZlbnREZWZhdWx0KCksdC5yZXR1cm5WYWx1ZT0hMSl9fXZhciBzTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmV2ZW50TWFuYWdlcj1lLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1pLHRoaXMuYXBwSWQ9cix0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgbE0oZSl9Y3JlYXRlUmVuZGVyZXIoZSxpKXtpZighZXx8IWkpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO3N3aXRjaChpLmVuY2Fwc3VsYXRpb24pe2Nhc2UgSmEuRW11bGF0ZWQ6e2xldCByPXRoaXMucmVuZGVyZXJCeUNvbXBJZC5nZXQoaS5pZCk7cmV0dXJuIHJ8fChyPW5ldyBtNSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsaSx0aGlzLmFwcElkKSx0aGlzLnJlbmRlcmVyQnlDb21wSWQuc2V0KGkuaWQscikpLHIuYXBwbHlUb0hvc3QoZSkscn1jYXNlIDE6Y2FzZSBKYS5TaGFkb3dEb206cmV0dXJuIG5ldyBnNSh0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnNoYXJlZFN0eWxlc0hvc3QsZSxpKTtkZWZhdWx0OmlmKCF0aGlzLnJlbmRlcmVyQnlDb21wSWQuaGFzKGkuaWQpKXtsZXQgcj1lQShpLmlkLGkuc3R5bGVzLFtdKTt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHIpLHRoaXMucmVuZGVyZXJCeUNvbXBJZC5zZXQoaS5pZCx0aGlzLmRlZmF1bHRSZW5kZXJlcil9cmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyfX1iZWdpbigpe31lbmQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSkQpLGoob00pLGooJGYpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxsTT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmV2ZW50TWFuYWdlcj10LHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGVzdHJveU5vZGU9bnVsbH1kZXN0cm95KCl7fWNyZWF0ZUVsZW1lbnQodCxlKXtyZXR1cm4gZT9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocDVbZV18fGUsdCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0KX1jcmVhdGVDb21tZW50KHQpe3JldHVybiBkb2N1bWVudC5jcmVhdGVDb21tZW50KHQpfWNyZWF0ZVRleHQodCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpfWFwcGVuZENoaWxkKHQsZSl7KGFaKHQpP3QuY29udGVudDp0KS5hcHBlbmRDaGlsZChlKX1pbnNlcnRCZWZvcmUodCxlLGkpe3QmJihhWih0KT90LmNvbnRlbnQ6dCkuaW5zZXJ0QmVmb3JlKGUsaSl9cmVtb3ZlQ2hpbGQodCxlKXt0JiZ0LnJlbW92ZUNoaWxkKGUpfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7bGV0IGk9InN0cmluZyI9PXR5cGVvZiB0P2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk6dDtpZighaSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZWxlY3RvciAiJHt0fSIgZGlkIG5vdCBtYXRjaCBhbnkgZWxlbWVudHNgKTtyZXR1cm4gZXx8KGkudGV4dENvbnRlbnQ9IiIpLGl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKHQpe3JldHVybiB0Lm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZSh0LGUsaSxyKXtpZihyKXtlPXIrIjoiK2U7bGV0IG89cDVbcl07bz90LnNldEF0dHJpYnV0ZU5TKG8sZSxpKTp0LnNldEF0dHJpYnV0ZShlLGkpfWVsc2UgdC5zZXRBdHRyaWJ1dGUoZSxpKX1yZW1vdmVBdHRyaWJ1dGUodCxlLGkpe2lmKGkpe2xldCByPXA1W2ldO3I/dC5yZW1vdmVBdHRyaWJ1dGVOUyhyLGUpOnQucmVtb3ZlQXR0cmlidXRlKGAke2l9OiR7ZX1gKX1lbHNlIHQucmVtb3ZlQXR0cmlidXRlKGUpfWFkZENsYXNzKHQsZSl7dC5jbGFzc0xpc3QuYWRkKGUpfXJlbW92ZUNsYXNzKHQsZSl7dC5jbGFzc0xpc3QucmVtb3ZlKGUpfXNldFN0eWxlKHQsZSxpLHIpe3ImKEJsLkRhc2hDYXNlfEJsLkltcG9ydGFudCk/dC5zdHlsZS5zZXRQcm9wZXJ0eShlLGksciZCbC5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOnQuc3R5bGVbZV09aX1yZW1vdmVTdHlsZSh0LGUsaSl7aSZCbC5EYXNoQ2FzZT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOnQuc3R5bGVbZV09IiJ9c2V0UHJvcGVydHkodCxlLGkpe3RbZV09aX1zZXRWYWx1ZSh0LGUpe3Qubm9kZVZhbHVlPWV9bGlzdGVuKHQsZSxpKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dGhpcy5ldmVudE1hbmFnZXIuYWRkR2xvYmFsRXZlbnRMaXN0ZW5lcih0LGUsb1ooaSkpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodCxlLG9aKGkpKX19O2Z1bmN0aW9uIGFaKG4pe3JldHVybiJURU1QTEFURSI9PT1uLnRhZ05hbWUmJnZvaWQgMCE9PW4uY29udGVudH0iQCIuY2hhckNvZGVBdCgwKTt2YXIgbTU9Y2xhc3MgZXh0ZW5kcyBsTXtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0KSx0aGlzLmNvbXBvbmVudD1pO2xldCBvPWVBKHIrIi0iK2kuaWQsaS5zdHlsZXMsW10pO2UuYWRkU3R5bGVzKG8pLHRoaXMuY29udGVudEF0dHI9ZnVuY3Rpb24obil7cmV0dXJuIl9uZ2NvbnRlbnQtJUNPTVAlIi5yZXBsYWNlKF81LG4pfShyKyItIitpLmlkKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uKG4pe3JldHVybiJfbmdob3N0LSVDT01QJSIucmVwbGFjZShfNSxuKX0ocisiLSIraS5pZCl9YXBwbHlUb0hvc3QodCl7c3VwZXIuc2V0QXR0cmlidXRlKHQsdGhpcy5ob3N0QXR0ciwiIil9Y3JlYXRlRWxlbWVudCh0LGUpe2xldCBpPXN1cGVyLmNyZWF0ZUVsZW1lbnQodCxlKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKGksdGhpcy5jb250ZW50QXR0ciwiIiksaX19LGc1PWNsYXNzIGV4dGVuZHMgbE17Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWUsdGhpcy5ob3N0RWw9aSx0aGlzLnNoYWRvd1Jvb3Q9aS5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtsZXQgbz1lQShyLmlkLHIuc3R5bGVzLFtdKTtmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKyl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTthLnRleHRDb250ZW50PW9bc10sdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGEpfX1ub2RlT3JTaGFkb3dSb290KHQpe3JldHVybiB0PT09dGhpcy5ob3N0RWw/dGhpcy5zaGFkb3dSb290OnR9ZGVzdHJveSgpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVIb3N0KHRoaXMuc2hhZG93Um9vdCl9YXBwZW5kQ2hpbGQodCxlKXtyZXR1cm4gc3VwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpLGUpfWluc2VydEJlZm9yZSh0LGUsaSl7cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSxpKX1yZW1vdmVDaGlsZCh0LGUpe3JldHVybiBzdXBlci5yZW1vdmVDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QodCksZSl9cGFyZW50Tm9kZSh0KXtyZXR1cm4gdGhpcy5ub2RlT3JTaGFkb3dSb290KHN1cGVyLnBhcmVudE5vZGUodGhpcy5ub2RlT3JTaGFkb3dSb290KHQpKSl9fSxFRGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzICREe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfXN1cHBvcnRzKGUpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoZSxpLHIpe3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoaSxyLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKX1yZW1vdmVFdmVudExpc3RlbmVyKGUsaSxyKXtyZXR1cm4gZS5yZW1vdmVFdmVudExpc3RlbmVyKGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxsWj1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxURGU9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LEREZT17YWx0Om49Pm4uYWx0S2V5LGNvbnRyb2w6bj0+bi5jdHJsS2V5LG1ldGE6bj0+bi5tZXRhS2V5LHNoaWZ0Om49Pm4uc2hpZnRLZXl9LEFEZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgJER7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9c3VwcG9ydHMoZSl7cmV0dXJuIG51bGwhPW4ucGFyc2VFdmVudE5hbWUoZSl9YWRkRXZlbnRMaXN0ZW5lcihlLGkscil7bGV0IG89bi5wYXJzZUV2ZW50TmFtZShpKSxzPW4uZXZlbnRDYWxsYmFjayhvLmZ1bGxLZXkscix0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4gdGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+WWwoKS5vbkFuZENhbmNlbChlLG8uZG9tRXZlbnROYW1lLHMpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoZSl7bGV0IGk9ZS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIikscj1pLnNoaWZ0KCk7aWYoMD09PWkubGVuZ3RofHwia2V5ZG93biIhPT1yJiYia2V5dXAiIT09cilyZXR1cm4gbnVsbDtsZXQgbz1uLl9ub3JtYWxpemVLZXkoaS5wb3AoKSkscz0iIixhPWkuaW5kZXhPZigiY29kZSIpO2lmKGE+LTEmJihpLnNwbGljZShhLDEpLHM9ImNvZGUuIiksbFouZm9yRWFjaChjPT57bGV0IHU9aS5pbmRleE9mKGMpO3U+LTEmJihpLnNwbGljZSh1LDEpLHMrPWMrIi4iKX0pLHMrPW8sMCE9aS5sZW5ndGh8fDA9PT1vLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgbD17fTtyZXR1cm4gbC5kb21FdmVudE5hbWU9cixsLmZ1bGxLZXk9cyxsfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoZSxpKXtsZXQgcj1URGVbZS5rZXldfHxlLmtleSxvPSIiO3JldHVybiBpLmluZGV4T2YoImNvZGUuIik+LTEmJihyPWUuY29kZSxvPSJjb2RlLiIpLCEobnVsbD09cnx8IXIpJiYocj1yLnRvTG93ZXJDYXNlKCksIiAiPT09cj9yPSJzcGFjZSI6Ii4iPT09ciYmKHI9ImRvdCIpLGxaLmZvckVhY2gocz0+e3MhPT1yJiYoMCxERGVbc10pKGUpJiYobys9cysiLiIpfSksbys9cixvPT09aSl9c3RhdGljIGV2ZW50Q2FsbGJhY2soZSxpLHIpe3JldHVybiBvPT57bi5tYXRjaEV2ZW50RnVsbEtleUNvZGUobyxlKSYmci5ydW5HdWFyZGVkKCgpPT5pKG8pKX19c3RhdGljIF9ub3JtYWxpemVLZXkoZSl7cmV0dXJuImVzYyI9PT1lPyJlc2NhcGUiOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxPRGU9W3twcm92aWRlOkdkLHVzZVZhbHVlOmQ1fSx7cHJvdmlkZTplQix1c2VWYWx1ZTpmdW5jdGlvbigpe2FNLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTpIdCx1c2VGYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3BMPW59KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLHk1PXJCKGNYLCJicm93c2VyIixPRGUpLHBaPW5ldyBwZSgiIiksa0RlPVt7cHJvdmlkZTplQyx1c2VDbGFzczpjbGFzc3thZGRUb1dpbmRvdyh0KXt0by5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGkscj0hMCk9PntsZXQgbz10LmZpbmRUZXN0YWJpbGl0eUluVHJlZShpLHIpO2lmKG51bGw9PW8pdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB0ZXN0YWJpbGl0eSBmb3IgZWxlbWVudC4iKTtyZXR1cm4gb30sdG8uZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9KCk9PnQuZ2V0QWxsVGVzdGFiaWxpdGllcygpLHRvLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PnQuZ2V0QWxsUm9vdEVsZW1lbnRzKCksdG8uZnJhbWV3b3JrU3RhYmlsaXplcnN8fCh0by5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksdG8uZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChpPT57bGV0IHI9dG8uZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKSxvPXIubGVuZ3RoLHM9ITEsYT1mdW5jdGlvbihsKXtzPXN8fGwsby0tLDA9PW8mJmkocyl9O3IuZm9yRWFjaChmdW5jdGlvbihsKXtsLndoZW5TdGFibGUoYSl9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUsaSl7cmV0dXJuIG51bGw9PWU/bnVsbDp0LmdldFRlc3RhYmlsaXR5KGUpPz8oaT9ZbCgpLmlzU2hhZG93Um9vdChlKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0LGUuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUodCxlLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6bkIsdXNlQ2xhc3M6a1QsZGVwczpbX3QsRlQsZUNdfSx7cHJvdmlkZTprVCx1c2VDbGFzczprVCxkZXBzOltfdCxGVCxlQ119XSxGRGU9W3twcm92aWRlOmdULHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6UXMsdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgUXN9LGRlcHM6W119LHtwcm92aWRlOlpELHVzZUNsYXNzOkVEZSxtdWx0aTohMCxkZXBzOltIdCxfdCxHZF19LHtwcm92aWRlOlpELHVzZUNsYXNzOkFEZSxtdWx0aTohMCxkZXBzOltIdF19LHtwcm92aWRlOnNNLHVzZUNsYXNzOnNNLGRlcHM6W0pELG9NLCRmXX0se3Byb3ZpZGU6d3UsdXNlRXhpc3Rpbmc6c019LHtwcm92aWRlOnVaLHVzZUV4aXN0aW5nOm9NfSx7cHJvdmlkZTpvTSx1c2VDbGFzczpvTSxkZXBzOltIdF19LHtwcm92aWRlOkpELHVzZUNsYXNzOkpELGRlcHM6W1pELF90XX0se3Byb3ZpZGU6RW0sdXNlQ2xhc3M6YkRlLGRlcHM6W119LFtdXSx0QT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oZSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOlt7cHJvdmlkZTokZix1c2VWYWx1ZTplLmFwcElkfSx7cHJvdmlkZTpjWix1c2VFeGlzdGluZzokZn0seURlXX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoocFosMTIpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOlsuLi5GRGUsLi4ua0RlXSxpbXBvcnRzOltNZSx1WF19KSxufSkoKSxUbT0obmV3IHBlKCJIYW1tZXJHZXN0dXJlQ29uZmlnIiksbmV3IHBlKCJIYW1tZXJMb2FkZXIiKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyhlfHxuKTpqKGhaKSxpfSxwcm92aWRlZEluOiJyb290In0pLG59KSgpKSxoWj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVG17Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLl9kb2M9ZX1zYW5pdGl6ZShlLGkpe2lmKG51bGw9PWkpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2UgbW8uTk9ORTpyZXR1cm4gaTtjYXNlIG1vLkhUTUw6cmV0dXJuIFBjKGksIkhUTUwiKT9UYShpKTpEMyh0aGlzLl9kb2MsU3RyaW5nKGkpKS50b1N0cmluZygpO2Nhc2UgbW8uU1RZTEU6cmV0dXJuIFBjKGksIlN0eWxlIik/VGEoaSk6aTtjYXNlIG1vLlNDUklQVDppZihQYyhpLCJTY3JpcHQiKSlyZXR1cm4gVGEoaSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHNjcmlwdCBjb250ZXh0Iik7Y2FzZSBtby5VUkw6cmV0dXJuIFBjKGksIlVSTCIpP1RhKGkpOnp4KFN0cmluZyhpKSk7Y2FzZSBtby5SRVNPVVJDRV9VUkw6aWYoUGMoaSwiUmVzb3VyY2VVUkwiKSlyZXR1cm4gVGEoaSk7dGhyb3cgbmV3IEVycm9yKCJ1bnNhZmUgdmFsdWUgdXNlZCBpbiBhIHJlc291cmNlIFVSTCBjb250ZXh0IChzZWUgaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcykiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBTZWN1cml0eUNvbnRleHQgJHtlfSAoc2VlIGh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MpYCl9fWJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGUpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGhMKG4pfShlKX1ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZkwobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RTY3JpcHQoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgbUwobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZ0wobil9KGUpfWJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG5ldyBfTChuKX0oZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6ZnVuY3Rpb24oZSl7bGV0IGk9bnVsbDtyZXR1cm4gaT1lP25ldyBlOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgaFoobi5nZXQoSHQpKX0oaihYbikpLGl9LHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksY009KG5ldyBJYygiMTQuMi4xMSIpLG9OKG1aKCksMSksY2xhc3N7fSksbkE9Y2xhc3N7fSxqdT0iKiI7ZnVuY3Rpb24gS3Iobix0KXtyZXR1cm57dHlwZTo3LG5hbWU6bixkZWZpbml0aW9uczp0LG9wdGlvbnM6e319fWZ1bmN0aW9uIGppKG4sdD1udWxsKXtyZXR1cm57dHlwZTo0LHN0eWxlczp0LHRpbWluZ3M6bn19ZnVuY3Rpb24geDUobix0PW51bGwpe3JldHVybnt0eXBlOjMsc3RlcHM6bixvcHRpb25zOnR9fWZ1bmN0aW9uIGlBKG4sdD1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOm4sb3B0aW9uczp0fX1mdW5jdGlvbiBnbihuKXtyZXR1cm57dHlwZTo2LHN0eWxlczpuLG9mZnNldDpudWxsfX1mdW5jdGlvbiBraShuLHQsZSl7cmV0dXJue3R5cGU6MCxuYW1lOm4sc3R5bGVzOnQsb3B0aW9uczplfX1mdW5jdGlvbiBEbShuKXtyZXR1cm57dHlwZTo1LHN0ZXBzOm59fWZ1bmN0aW9uIExpKG4sdCxlPW51bGwpe3JldHVybnt0eXBlOjEsZXhwcjpuLGFuaW1hdGlvbjp0LG9wdGlvbnM6ZX19ZnVuY3Rpb24gQW0obj1udWxsKXtyZXR1cm57dHlwZTo5LG9wdGlvbnM6bn19ZnVuY3Rpb24gSW0obix0LGU9bnVsbCl7cmV0dXJue3R5cGU6MTEsc2VsZWN0b3I6bixhbmltYXRpb246dCxvcHRpb25zOmV9fWZ1bmN0aW9uIGdaKG4pe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4obil9dmFyIGRoPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPXQrZX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KHQpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKHQpLHRoaXMuX29uU3RhcnRGbnMucHVzaCh0KX1vbkRvbmUodCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaCh0KSx0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtnWigoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbih0KXt0aGlzLl9wb3NpdGlvbj10aGlzLnRvdGFsVGltZT90KnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sodCl7bGV0IGU9InN0YXJ0Ij09dD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZucztlLmZvckVhY2goaT0+aSgpKSxlLmxlbmd0aD0wfX0sdU09Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9dDtsZXQgZT0wLGk9MCxyPTAsbz10aGlzLnBsYXllcnMubGVuZ3RoOzA9PW8/Z1ooKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVycy5mb3JFYWNoKHM9PntzLm9uRG9uZSgoKT0+eysrZT09byYmdGhpcy5fb25GaW5pc2goKX0pLHMub25EZXN0cm95KCgpPT57KytpPT1vJiZ0aGlzLl9vbkRlc3Ryb3koKX0pLHMub25TdGFydCgoKT0+eysrcj09byYmdGhpcy5fb25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKChzLGEpPT5NYXRoLm1heChzLGEudG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5pbml0KCkpfW9uU3RhcnQodCl7dGhpcy5fb25TdGFydEZucy5wdXNoKHQpfV9vblN0YXJ0KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZSh0KXt0aGlzLl9vbkRvbmVGbnMucHVzaCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2godCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucGF1c2UoKSl9cmVzdGFydCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucmVzdGFydCgpKX1maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2godD0+dC5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9PnQucmVzZXQoKSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITF9c2V0UG9zaXRpb24odCl7bGV0IGU9dCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChpPT57bGV0IHI9aS50b3RhbFRpbWU/TWF0aC5taW4oMSxlL2kudG90YWxUaW1lKToxO2kuc2V0UG9zaXRpb24ocil9KX1nZXRQb3NpdGlvbigpe2xldCB0PXRoaXMucGxheWVycy5yZWR1Y2UoKGUsaSk9Pm51bGw9PT1lfHxpLnRvdGFsVGltZT5lLnRvdGFsVGltZT9pOmUsbnVsbCk7cmV0dXJuIG51bGwhPXQ/dC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKHQ9Pnt0LmJlZm9yZURlc3Ryb3kmJnQuYmVmb3JlRGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PXQ/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7ZS5mb3JFYWNoKGk9PmkoKSksZS5sZW5ndGg9MH19O2Z1bmN0aW9uIF9aKG4pe3JldHVybiBuZXcgQXQoM2UzLCExKX1mdW5jdGlvbiB6NSgpe3JldHVybiB0eXBlb2YgcHJvY2VzczwidSImJiJbb2JqZWN0IHByb2Nlc3NdIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl9ZnVuY3Rpb24gcGgobil7c3dpdGNoKG4ubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBkaDtjYXNlIDE6cmV0dXJuIG5bMF07ZGVmYXVsdDpyZXR1cm4gbmV3IHVNKG4pfX1mdW5jdGlvbiBSWihuLHQsZSxpLHI9bmV3IE1hcCxvPW5ldyBNYXApe2xldCBzPVtdLGE9W10sbD0tMSxjPW51bGw7aWYoaS5mb3JFYWNoKHU9PntsZXQgZD11LmdldCgib2Zmc2V0IikscD1kPT1sLGg9cCYmY3x8bmV3IE1hcDt1LmZvckVhY2goKGYsbSk9PntsZXQgeD1tLGc9ZjtpZigib2Zmc2V0IiE9PW0pc3dpdGNoKHg9dC5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoeCxzKSxnKXtjYXNlIiEiOmc9ci5nZXQobSk7YnJlYWs7Y2FzZSBqdTpnPW8uZ2V0KG0pO2JyZWFrO2RlZmF1bHQ6Zz10Lm5vcm1hbGl6ZVN0eWxlVmFsdWUobSx4LGcscyl9aC5zZXQoeCxnKX0pLHB8fGEucHVzaChoKSxjPWgsbD1kfSkscy5sZW5ndGgpdGhyb3cgbmV3IEF0KDM1MDIsITEpO3JldHVybiBhfWZ1bmN0aW9uIGo1KG4sdCxlLGkpe3N3aXRjaCh0KXtjYXNlInN0YXJ0IjpuLm9uU3RhcnQoKCk9PmkoZSYmQzUoZSwic3RhcnQiLG4pKSk7YnJlYWs7Y2FzZSJkb25lIjpuLm9uRG9uZSgoKT0+aShlJiZDNShlLCJkb25lIixuKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6bi5vbkRlc3Ryb3koKCk9PmkoZSYmQzUoZSwiZGVzdHJveSIsbikpKX19ZnVuY3Rpb24gQzUobix0LGUpe2xldCBvPUc1KG4uZWxlbWVudCxuLnRyaWdnZXJOYW1lLG4uZnJvbVN0YXRlLG4udG9TdGF0ZSx0fHxuLnBoYXNlTmFtZSxlLnRvdGFsVGltZT8/bi50b3RhbFRpbWUsISFlLmRpc2FibGVkKSxzPW4uX2RhdGE7cmV0dXJuIG51bGwhPXMmJihvLl9kYXRhPXMpLG99ZnVuY3Rpb24gRzUobix0LGUsaSxyPSIiLG89MCxzKXtyZXR1cm57ZWxlbWVudDpuLHRyaWdnZXJOYW1lOnQsZnJvbVN0YXRlOmUsdG9TdGF0ZTppLHBoYXNlTmFtZTpyLHRvdGFsVGltZTpvLGRpc2FibGVkOiEhc319ZnVuY3Rpb24gcGwobix0LGUpe2xldCBpPW4uZ2V0KHQpO3JldHVybiBpfHxuLnNldCh0LGk9ZSksaX1mdW5jdGlvbiB2WihuKXtsZXQgdD1uLmluZGV4T2YoIjoiKTtyZXR1cm5bbi5zdWJzdHJpbmcoMSx0KSxuLnNsaWNlKHQrMSldfXZhciBENT0obix0KT0+ITEsT1o9KG4sdCxlKT0+W10sa1o9bnVsbDtmdW5jdGlvbiBXNShuKXtsZXQgdD1uLnBhcmVudE5vZGV8fG4uaG9zdDtyZXR1cm4gdD09PWtaP251bGw6dH0oejUoKXx8dHlwZW9mIEVsZW1lbnQ8InUiKSYmKHR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1Ij8oa1o9KCgpPT5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpKCksRDU9KG4sdCk9Pntmb3IoO3Q7KXtpZih0PT09bilyZXR1cm4hMDt0PVc1KHQpfXJldHVybiExfSk6RDU9KG4sdCk9Pm4uY29udGFpbnModCksT1o9KG4sdCxlKT0+e2lmKGUpcmV0dXJuIEFycmF5LmZyb20obi5xdWVyeVNlbGVjdG9yQWxsKHQpKTtsZXQgaT1uLnF1ZXJ5U2VsZWN0b3IodCk7cmV0dXJuIGk/W2ldOltdfSk7dmFyIFBtPW51bGwseVo9ITE7dmFyIEZaPUQ1LE5aPU9aLHE1PSgoKT0+e2NsYXNzIG57dmFsaWRhdGVTdHlsZVByb3BlcnR5KGUpe3JldHVybiBmdW5jdGlvbihuKXtQbXx8KFBtPSh0eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmJvZHk6bnVsbCl8fHt9LHlaPSEhUG0uc3R5bGUmJiJXZWJraXRBcHBlYXJhbmNlImluIFBtLnN0eWxlKTtsZXQgdD0hMDtyZXR1cm4gUG0uc3R5bGUmJiFmdW5jdGlvbihuKXtyZXR1cm4iZWJraXQiPT1uLnN1YnN0cmluZygxLDYpfShuKSYmKHQ9biBpbiBQbS5zdHlsZSwhdCYmeVomJih0PSJXZWJraXQiK24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKWluIFBtLnN0eWxlKSksdH0oZSl9bWF0Y2hlc0VsZW1lbnQoZSxpKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoZSxpKXtyZXR1cm4gRlooZSxpKX1nZXRQYXJlbnRFbGVtZW50KGUpe3JldHVybiBXNShlKX1xdWVyeShlLGkscil7cmV0dXJuIE5aKGUsaSxyKX1jb21wdXRlU3R5bGUoZSxpLHIpe3JldHVybiByfHwiIn1hbmltYXRlKGUsaSxyLG8scyxhPVtdLGwpe3JldHVybiBuZXcgZGgocixvKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdk09KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uTk9PUD1uZXcgcTUsbn0pKCksQlo9Im5nLWVudGVyIixBNT0ibmctbGVhdmUiLG9BPSJuZy10cmlnZ2VyIixjQT0iLm5nLXRyaWdnZXIiLGJaPSJuZy1hbmltYXRpbmciLEk1PSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiB0cChuKXtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47bGV0IHQ9bi5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hdHx8dC5sZW5ndGg8Mj8wOlA1KHBhcnNlRmxvYXQodFsxXSksdFsyXSl9ZnVuY3Rpb24gUDUobix0KXtyZXR1cm4icyI9PT10PzFlMypuOm59ZnVuY3Rpb24gdUEobix0LGUpe3JldHVybiBuLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP246ZnVuY3Rpb24obix0LGUpe2xldCByLG89MCxzPSIiO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bGV0IGE9bi5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PWEpcmV0dXJuIHQucHVzaChfWigpKSx7ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiIn07cj1QNShwYXJzZUZsb2F0KGFbMV0pLGFbMl0pO2xldCBsPWFbM107bnVsbCE9bCYmKG89UDUocGFyc2VGbG9hdChsKSxhWzRdKSk7bGV0IGM9YVs1XTtjJiYocz1jKX1lbHNlIHI9bjtpZighZSl7bGV0IGE9ITEsbD10Lmxlbmd0aDtyPDAmJih0LnB1c2gobmV3IEF0KDMxMDAsITEpKSxhPSEwKSxvPDAmJih0LnB1c2gobmV3IEF0KDMxMDEsITEpKSxhPSEwKSxhJiZ0LnNwbGljZShsLDAsX1ooKSl9cmV0dXJue2R1cmF0aW9uOnIsZGVsYXk6byxlYXNpbmc6c319KG4sdCxlKX1mdW5jdGlvbiB5TShuLHQ9e30pe3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKGU9Pnt0W2VdPW5bZV19KSx0fWZ1bmN0aW9uIFZaKG4pe2xldCB0PW5ldyBNYXA7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZvckVhY2goZT0+e3Quc2V0KGUsbltlXSl9KSx0fWZ1bmN0aW9uIGpfKG4sdD1uZXcgTWFwLGUpe2lmKGUpZm9yKGxldFtpLHJdb2YgZSl0LnNldChpLHIpO2ZvcihsZXRbaSxyXW9mIG4pdC5zZXQoaSxyKTtyZXR1cm4gdH1mdW5jdGlvbiB4WihuLHQsZSl7cmV0dXJuIGU/dCsiOiIrZSsiOyI6IiJ9ZnVuY3Rpb24gSFoobil7bGV0IHQ9IiI7Zm9yKGxldCBlPTA7ZTxuLnN0eWxlLmxlbmd0aDtlKyspe2xldCBpPW4uc3R5bGUuaXRlbShlKTt0Kz14WigwLGksbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGkpKX1mb3IobGV0IGUgaW4gbi5zdHlsZSluLnN0eWxlLmhhc093blByb3BlcnR5KGUpJiYhZS5zdGFydHNXaXRoKCJfIikmJih0Kz14WigwLFNBZShlKSxuLnN0eWxlW2VdKSk7bi5zZXRBdHRyaWJ1dGUoInN0eWxlIix0KX1mdW5jdGlvbiBHdShuLHQsZSl7bi5zdHlsZSYmKHQuZm9yRWFjaCgoaSxyKT0+e2xldCBvPVk1KHIpO2UmJiFlLmhhcyhyKSYmZS5zZXQocixuLnN0eWxlW29dKSxuLnN0eWxlW29dPWl9KSx6NSgpJiZIWihuKSl9ZnVuY3Rpb24gT20obix0KXtuLnN0eWxlJiYodC5mb3JFYWNoKChlLGkpPT57bGV0IHI9WTUoaSk7bi5zdHlsZVtyXT0iIn0pLHo1KCkmJkhaKG4pKX1mdW5jdGlvbiBkTShuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT8xPT1uLmxlbmd0aD9uWzBdOmlBKG4pOm59dmFyIFI1PW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIFVaKG4pe2xldCB0PVtdO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bGV0IGU7Zm9yKDtlPVI1LmV4ZWMobik7KXQucHVzaChlWzFdKTtSNS5sYXN0SW5kZXg9MH1yZXR1cm4gdH1mdW5jdGlvbiBoTShuLHQsZSl7bGV0IGk9bi50b1N0cmluZygpLHI9aS5yZXBsYWNlKFI1LChvLHMpPT57bGV0IGE9dFtzXTtyZXR1cm4gbnVsbD09YSYmKGUucHVzaChuZXcgQXQoMzAwMywhMSkpLGE9IiIpLGEudG9TdHJpbmcoKX0pO3JldHVybiByPT1pP246cn1mdW5jdGlvbiBkQShuKXtsZXQgdD1bXSxlPW4ubmV4dCgpO2Zvcig7IWUuZG9uZTspdC5wdXNoKGUudmFsdWUpLGU9bi5uZXh0KCk7cmV0dXJuIHR9dmFyIHdBZT0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gWTUobil7cmV0dXJuIG4ucmVwbGFjZSh3QWUsKC4uLnQpPT50WzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIFNBZShuKXtyZXR1cm4gbi5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZGwobix0LGUpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgNzpyZXR1cm4gbi52aXNpdFRyaWdnZXIodCxlKTtjYXNlIDA6cmV0dXJuIG4udmlzaXRTdGF0ZSh0LGUpO2Nhc2UgMTpyZXR1cm4gbi52aXNpdFRyYW5zaXRpb24odCxlKTtjYXNlIDI6cmV0dXJuIG4udmlzaXRTZXF1ZW5jZSh0LGUpO2Nhc2UgMzpyZXR1cm4gbi52aXNpdEdyb3VwKHQsZSk7Y2FzZSA0OnJldHVybiBuLnZpc2l0QW5pbWF0ZSh0LGUpO2Nhc2UgNTpyZXR1cm4gbi52aXNpdEtleWZyYW1lcyh0LGUpO2Nhc2UgNjpyZXR1cm4gbi52aXNpdFN0eWxlKHQsZSk7Y2FzZSA4OnJldHVybiBuLnZpc2l0UmVmZXJlbmNlKHQsZSk7Y2FzZSA5OnJldHVybiBuLnZpc2l0QW5pbWF0ZUNoaWxkKHQsZSk7Y2FzZSAxMDpyZXR1cm4gbi52aXNpdEFuaW1hdGVSZWYodCxlKTtjYXNlIDExOnJldHVybiBuLnZpc2l0UXVlcnkodCxlKTtjYXNlIDEyOnJldHVybiBuLnZpc2l0U3RhZ2dlcih0LGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEF0KDMwMDQsITEpfX1mdW5jdGlvbiB6WihuLHQpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShuKVt0XX1mdW5jdGlvbiBJQWUobix0KXtsZXQgZT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goaT0+ZnVuY3Rpb24obix0LGUpe2lmKCI6Ij09blswXSl7bGV0IGw9ZnVuY3Rpb24obix0KXtzd2l0Y2gobil7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtjYXNlIjppbmNyZW1lbnQiOnJldHVybihlLGkpPT5wYXJzZUZsb2F0KGkpPnBhcnNlRmxvYXQoZSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oZSxpKT0+cGFyc2VGbG9hdChpKTxwYXJzZUZsb2F0KGUpO2RlZmF1bHQ6cmV0dXJuIHQucHVzaChuZXcgQXQoMzAxNiwhMSkpLCIqID0+ICoifX0obixlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbClyZXR1cm4gdm9pZCB0LnB1c2gobCk7bj1sfWxldCBpPW4ubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWl8fGkubGVuZ3RoPDQpcmV0dXJuIGUucHVzaChuZXcgQXQoMzAxNSwhMSkpLHQ7bGV0IHI9aVsxXSxvPWlbMl0scz1pWzNdO3QucHVzaChDWihyLHMpKSwiPCI9PW9bMF0mJiEoIioiPT1yJiYiKiI9PXMpJiZ0LnB1c2goQ1oocyxyKSl9KGksZSx0KSk6ZS5wdXNoKG4pLGV9dmFyIHNBPW5ldyBTZXQoWyJ0cnVlIiwiMSJdKSxhQT1uZXcgU2V0KFsiZmFsc2UiLCIwIl0pO2Z1bmN0aW9uIENaKG4sdCl7bGV0IGU9c0EuaGFzKG4pfHxhQS5oYXMobiksaT1zQS5oYXModCl8fGFBLmhhcyh0KTtyZXR1cm4ocixvKT0+e2xldCBzPSIqIj09bnx8bj09cixhPSIqIj09dHx8dD09bztyZXR1cm4hcyYmZSYmImJvb2xlYW4iPT10eXBlb2YgciYmKHM9cj9zQS5oYXMobik6YUEuaGFzKG4pKSwhYSYmaSYmImJvb2xlYW4iPT10eXBlb2YgbyYmKGE9bz9zQS5oYXModCk6YUEuaGFzKHQpKSxzJiZhfX12YXIgT0FlPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIHFaKG4sdCxlLGkpe3JldHVybiBuZXcgTzUobikuYnVpbGQodCxlLGkpfXZhciBPNT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9kcml2ZXI9dH1idWlsZCh0LGUsaSl7bGV0IHI9bmV3IGs1KGUpO3JldHVybiB0aGlzLl9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKHIpLGRsKHRoaXMsZE0odCkscil9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUodCl7dC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIix0LmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHQuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcgTWFwKSx0LmN1cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKHQsZSl7bGV0IGk9ZS5xdWVyeUNvdW50PTAscj1lLmRlcENvdW50PTAsbz1bXSxzPVtdO3JldHVybiJAIj09dC5uYW1lLmNoYXJBdCgwKSYmZS5lcnJvcnMucHVzaChuZXcgQXQoMzAwNiwhMSkpLHQuZGVmaW5pdGlvbnMuZm9yRWFjaChhPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShlKSwwPT1hLnR5cGUpe2xldCBsPWEsYz1sLm5hbWU7Yy50b1N0cmluZygpLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaCh1PT57bC5uYW1lPXUsby5wdXNoKHRoaXMudmlzaXRTdGF0ZShsLGUpKX0pLGwubmFtZT1jfWVsc2UgaWYoMT09YS50eXBlKXtsZXQgbD10aGlzLnZpc2l0VHJhbnNpdGlvbihhLGUpO2krPWwucXVlcnlDb3VudCxyKz1sLmRlcENvdW50LHMucHVzaChsKX1lbHNlIGUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMDcsITEpKX0pLHt0eXBlOjcsbmFtZTp0Lm5hbWUsc3RhdGVzOm8sdHJhbnNpdGlvbnM6cyxxdWVyeUNvdW50OmksZGVwQ291bnQ6cixvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUodCxlKXtsZXQgaT10aGlzLnZpc2l0U3R5bGUodC5zdHlsZXMsZSkscj10Lm9wdGlvbnMmJnQub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYoaS5jb250YWluc0R5bmFtaWNTdHlsZXMpe2xldCBvPW5ldyBTZXQscz1yfHx7fTtpLnN0eWxlcy5mb3JFYWNoKGE9PnthIGluc3RhbmNlb2YgTWFwJiZhLmZvckVhY2gobD0+e1VaKGwpLmZvckVhY2goYz0+e3MuaGFzT3duUHJvcGVydHkoYyl8fG8uYWRkKGMpfSl9KX0pLG8uc2l6ZSYmKGRBKG8udmFsdWVzKCkpLGUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMDgsITEpKSl9cmV0dXJue3R5cGU6MCxuYW1lOnQubmFtZSxzdHlsZTppLG9wdGlvbnM6cj97cGFyYW1zOnJ9Om51bGx9fXZpc2l0VHJhbnNpdGlvbih0LGUpe2UucXVlcnlDb3VudD0wLGUuZGVwQ291bnQ9MDtsZXQgaT1kbCh0aGlzLGRNKHQuYW5pbWF0aW9uKSxlKTtyZXR1cm57dHlwZToxLG1hdGNoZXJzOklBZSh0LmV4cHIsZS5lcnJvcnMpLGFuaW1hdGlvbjppLHF1ZXJ5Q291bnQ6ZS5xdWVyeUNvdW50LGRlcENvdW50OmUuZGVwQ291bnQsb3B0aW9uczpSbSh0Lm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKHQsZSl7cmV0dXJue3R5cGU6MixzdGVwczp0LnN0ZXBzLm1hcChpPT5kbCh0aGlzLGksZSkpLG9wdGlvbnM6Um0odC5vcHRpb25zKX19dmlzaXRHcm91cCh0LGUpe2xldCBpPWUuY3VycmVudFRpbWUscj0wLG89dC5zdGVwcy5tYXAocz0+e2UuY3VycmVudFRpbWU9aTtsZXQgYT1kbCh0aGlzLHMsZSk7cmV0dXJuIHI9TWF0aC5tYXgocixlLmN1cnJlbnRUaW1lKSxhfSk7cmV0dXJuIGUuY3VycmVudFRpbWU9cix7dHlwZTozLHN0ZXBzOm8sb3B0aW9uczpSbSh0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGUodCxlKXtsZXQgaT1mdW5jdGlvbihuLHQpe2lmKG4uaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIG47aWYoIm51bWJlciI9PXR5cGVvZiBuKXJldHVybiBNNSh1QShuLHQpLmR1cmF0aW9uLDAsIiIpO2xldCBlPW47aWYoZS5zcGxpdCgvXHMrLykuc29tZShvPT4ieyI9PW8uY2hhckF0KDApJiYieyI9PW8uY2hhckF0KDEpKSl7bGV0IG89TTUoMCwwLCIiKTtyZXR1cm4gby5keW5hbWljPSEwLG8uc3RyVmFsdWU9ZSxvfWxldCByPXVBKGUsdCk7cmV0dXJuIE01KHIuZHVyYXRpb24sci5kZWxheSxyLmVhc2luZyl9KHQudGltaW5ncyxlLmVycm9ycyk7ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9aTtsZXQgcixvPXQuc3R5bGVzP3Quc3R5bGVzOmduKHt9KTtpZig1PT1vLnR5cGUpcj10aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk7ZWxzZXtsZXQgcz10LnN0eWxlcyxhPSExO2lmKCFzKXthPSEwO2xldCBjPXt9O2kuZWFzaW5nJiYoYy5lYXNpbmc9aS5lYXNpbmcpLHM9Z24oYyl9ZS5jdXJyZW50VGltZSs9aS5kdXJhdGlvbitpLmRlbGF5O2xldCBsPXRoaXMudmlzaXRTdHlsZShzLGUpO2wuaXNFbXB0eVN0ZXA9YSxyPWx9cmV0dXJuIGUuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6NCx0aW1pbmdzOmksc3R5bGU6cixvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUodCxlKXtsZXQgaT10aGlzLl9tYWtlU3R5bGVBc3QodCxlKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChpLGUpLGl9X21ha2VTdHlsZUFzdCh0LGUpe2xldCBpPVtdLHI9QXJyYXkuaXNBcnJheSh0LnN0eWxlcyk/dC5zdHlsZXM6W3Quc3R5bGVzXTtmb3IobGV0IGEgb2Ygcikic3RyaW5nIj09dHlwZW9mIGE/YT09PWp1P2kucHVzaChhKTplLmVycm9ycy5wdXNoKG5ldyBBdCgzMDAyLCExKSk6aS5wdXNoKFZaKGEpKTtsZXQgbz0hMSxzPW51bGw7cmV0dXJuIGkuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmKGEuaGFzKCJlYXNpbmciKSYmKHM9YS5nZXQoImVhc2luZyIpLGEuZGVsZXRlKCJlYXNpbmciKSksIW8pKWZvcihsZXQgbCBvZiBhLnZhbHVlcygpKWlmKGwudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtvPSEwO2JyZWFrfX0pLHt0eXBlOjYsc3R5bGVzOmksZWFzaW5nOnMsb2Zmc2V0OnQub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpvLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QodCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxyPWUuY3VycmVudFRpbWUsbz1lLmN1cnJlbnRUaW1lO2kmJm8+MCYmKG8tPWkuZHVyYXRpb24raS5kZWxheSksdC5zdHlsZXMuZm9yRWFjaChzPT57InN0cmluZyIhPXR5cGVvZiBzJiZzLmZvckVhY2goKGEsbCk9PntsZXQgYz1lLmNvbGxlY3RlZFN0eWxlcy5nZXQoZS5jdXJyZW50UXVlcnlTZWxlY3RvciksdT1jLmdldChsKSxkPSEwO3UmJihvIT1yJiZvPj11LnN0YXJ0VGltZSYmcjw9dS5lbmRUaW1lJiYoZS5lcnJvcnMucHVzaChuZXcgQXQoMzAxMCwhMSkpLGQ9ITEpLG89dS5zdGFydFRpbWUpLGQmJmMuc2V0KGwse3N0YXJ0VGltZTpvLGVuZFRpbWU6cn0pLGUub3B0aW9ucyYmZnVuY3Rpb24obix0LGUpe2xldCBpPXQucGFyYW1zfHx7fSxyPVVaKG4pO3IubGVuZ3RoJiZyLmZvckVhY2gobz0+e2kuaGFzT3duUHJvcGVydHkobyl8fGUucHVzaChuZXcgQXQoMzAwMSwhMSkpfSl9KGEsZS5vcHRpb25zLGUuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXModCxlKXtsZXQgaT17dHlwZTo1LHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFlLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gZS5lcnJvcnMucHVzaChuZXcgQXQoMzAxMSwhMSkpLGk7bGV0IG89MCxzPVtdLGE9ITEsbD0hMSxjPTAsdT10LnN0ZXBzLm1hcChnPT57bGV0IGI9dGhpcy5fbWFrZVN0eWxlQXN0KGcsZSksRD1udWxsIT1iLm9mZnNldD9iLm9mZnNldDpmdW5jdGlvbihuKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaChlPT57aWYoZSBpbnN0YW5jZW9mIE1hcCYmZS5oYXMoIm9mZnNldCIpKXtsZXQgaT1lO3Q9cGFyc2VGbG9hdChpLmdldCgib2Zmc2V0IikpLGkuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKG4gaW5zdGFuY2VvZiBNYXAmJm4uaGFzKCJvZmZzZXQiKSl7bGV0IGU9bjt0PXBhcnNlRmxvYXQoZS5nZXQoIm9mZnNldCIpKSxlLmRlbGV0ZSgib2Zmc2V0Iil9cmV0dXJuIHR9KGIuc3R5bGVzKSxUPTA7cmV0dXJuIG51bGwhPUQmJihvKyssVD1iLm9mZnNldD1EKSxsPWx8fFQ8MHx8VD4xLGE9YXx8VDxjLGM9VCxzLnB1c2goVCksYn0pO2wmJmUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMTIsITEpKSxhJiZlLmVycm9ycy5wdXNoKG5ldyBBdCgzMjAwLCExKSk7bGV0IGQ9dC5zdGVwcy5sZW5ndGgscD0wO28+MCYmbzxkP2UuZXJyb3JzLnB1c2gobmV3IEF0KDMyMDIsITEpKTowPT1vJiYocD0xLyhkLTEpKTtsZXQgaD1kLTEsZj1lLmN1cnJlbnRUaW1lLG09ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MseD1tLmR1cmF0aW9uO3JldHVybiB1LmZvckVhY2goKGcsYik9PntsZXQgRD1wPjA/Yj09aD8xOnAqYjpzW2JdLFQ9RCp4O2UuY3VycmVudFRpbWU9ZittLmRlbGF5K1QsbS5kdXJhdGlvbj1ULHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoZyxlKSxnLm9mZnNldD1ELGkuc3R5bGVzLnB1c2goZyl9KSxpfXZpc2l0UmVmZXJlbmNlKHQsZSl7cmV0dXJue3R5cGU6OCxhbmltYXRpb246ZGwodGhpcyxkTSh0LmFuaW1hdGlvbiksZSksb3B0aW9uczpSbSh0Lm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZCh0LGUpe3JldHVybiBlLmRlcENvdW50Kysse3R5cGU6OSxvcHRpb25zOlJtKHQub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZVJlZih0LGUpe3JldHVybnt0eXBlOjEwLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKHQuYW5pbWF0aW9uLGUpLG9wdGlvbnM6Um0odC5vcHRpb25zKX19dmlzaXRRdWVyeSh0LGUpe2xldCBpPWUuY3VycmVudFF1ZXJ5U2VsZWN0b3Iscj10Lm9wdGlvbnN8fHt9O2UucXVlcnlDb3VudCsrLGUuY3VycmVudFF1ZXJ5PXQ7bGV0W28sc109ZnVuY3Rpb24obil7bGV0IHQ9ISFuLnNwbGl0KC9ccyosXHMqLykuZmluZChlPT4iOnNlbGYiPT1lKTtyZXR1cm4gdCYmKG49bi5yZXBsYWNlKE9BZSwiIikpLG49bi5yZXBsYWNlKC9AXCovZyxjQSkucmVwbGFjZSgvQFx3Ky9nLGU9PmNBKyItIitlLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csSTUpLFtuLHRdfSh0LnNlbGVjdG9yKTtlLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWkubGVuZ3RoP2krIiAiK286byxwbChlLmNvbGxlY3RlZFN0eWxlcyxlLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2xldCBhPWRsKHRoaXMsZE0odC5hbmltYXRpb24pLGUpO3JldHVybiBlLmN1cnJlbnRRdWVyeT1udWxsLGUuY3VycmVudFF1ZXJ5U2VsZWN0b3I9aSx7dHlwZToxMSxzZWxlY3RvcjpvLGxpbWl0OnIubGltaXR8fDAsb3B0aW9uYWw6ISFyLm9wdGlvbmFsLGluY2x1ZGVTZWxmOnMsYW5pbWF0aW9uOmEsb3JpZ2luYWxTZWxlY3Rvcjp0LnNlbGVjdG9yLG9wdGlvbnM6Um0odC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKHQsZSl7ZS5jdXJyZW50UXVlcnl8fGUuZXJyb3JzLnB1c2gobmV3IEF0KDMwMTMsITEpKTtsZXQgaT0iZnVsbCI9PT10LnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTp1QSh0LnRpbWluZ3MsZS5lcnJvcnMsITApO3JldHVybnt0eXBlOjEyLGFuaW1hdGlvbjpkbCh0aGlzLGRNKHQuYW5pbWF0aW9uKSxlKSx0aW1pbmdzOmksb3B0aW9uczpudWxsfX19LGs1PWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZXJyb3JzPXQsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRoaXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0aW9ucz1udWxsLHRoaXMudW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3IFNldH19O2Z1bmN0aW9uIFJtKG4pe3JldHVybiBuPyhuPXlNKG4pKS5wYXJhbXMmJihuLnBhcmFtcz1mdW5jdGlvbihuKXtyZXR1cm4gbj95TShuKTpudWxsfShuLnBhcmFtcykpOm49e30sbn1mdW5jdGlvbiBNNShuLHQsZSl7cmV0dXJue2R1cmF0aW9uOm4sZGVsYXk6dCxlYXNpbmc6ZX19ZnVuY3Rpb24gWDUobix0LGUsaSxyLG8scz1udWxsLGE9ITEpe3JldHVybnt0eXBlOjEsZWxlbWVudDpuLGtleWZyYW1lczp0LHByZVN0eWxlUHJvcHM6ZSxwb3N0U3R5bGVQcm9wczppLGR1cmF0aW9uOnIsZGVsYXk6byx0b3RhbFRpbWU6citvLGVhc2luZzpzLHN1YlRpbWVsaW5lOmF9fXZhciBmTT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldCh0KXtyZXR1cm4gdGhpcy5fbWFwLmdldCh0KXx8W119YXBwZW5kKHQsZSl7bGV0IGk9dGhpcy5fbWFwLmdldCh0KTtpfHx0aGlzLl9tYXAuc2V0KHQsaT1bXSksaS5wdXNoKC4uLmUpfWhhcyh0KXtyZXR1cm4gdGhpcy5fbWFwLmhhcyh0KX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX0sSEFlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSx6QWU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIFlaKG4sdCxlLGkscixvPW5ldyBNYXAscz1uZXcgTWFwLGEsbCxjPVtdKXtyZXR1cm4obmV3IEY1KS5idWlsZEtleWZyYW1lcyhuLHQsZSxpLHIsbyxzLGEsbCxjKX12YXIgRjU9Y2xhc3N7YnVpbGRLZXlmcmFtZXModCxlLGkscixvLHMsYSxsLGMsdT1bXSl7Yz1jfHxuZXcgZk07bGV0IGQ9bmV3IG1NKHQsZSxjLHIsbyx1LFtdKTtkLm9wdGlvbnM9bDtsZXQgcD1sLmRlbGF5P3RwKGwuZGVsYXkpOjA7ZC5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChwKSxkLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW3NdLG51bGwsZC5lcnJvcnMsbCksZGwodGhpcyxpLGQpO2xldCBoPWQudGltZWxpbmVzLmZpbHRlcihmPT5mLmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKGgubGVuZ3RoJiZhLnNpemUpe2xldCBmO2ZvcihsZXQgbT1oLmxlbmd0aC0xO20+PTA7bS0tKXtsZXQgeD1oW21dO2lmKHguZWxlbWVudD09PWUpe2Y9eDticmVha319ZiYmIWYuYWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKSYmZi5zZXRTdHlsZXMoW2FdLG51bGwsZC5lcnJvcnMsbCl9cmV0dXJuIGgubGVuZ3RoP2gubWFwKGY9PmYuYnVpbGRLZXlmcmFtZXMoKSk6W1g1KGUsW10sW10sW10sMCxwLCIiLCExKV19dmlzaXRUcmlnZ2VyKHQsZSl7fXZpc2l0U3RhdGUodCxlKXt9dmlzaXRUcmFuc2l0aW9uKHQsZSl7fXZpc2l0QW5pbWF0ZUNoaWxkKHQsZSl7bGV0IGk9ZS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGUuZWxlbWVudCk7aWYoaSl7bGV0IHI9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyksbz1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxzPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGkscixyLm9wdGlvbnMpO28hPXMmJmUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHMpfWUucHJldmlvdXNOb2RlPXR9dmlzaXRBbmltYXRlUmVmKHQsZSl7bGV0IGk9ZS5jcmVhdGVTdWJDb250ZXh0KHQub3B0aW9ucyk7aS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLl9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhbdC5vcHRpb25zLHQuYW5pbWF0aW9uLm9wdGlvbnNdLGUsaSksdGhpcy52aXNpdFJlZmVyZW5jZSh0LmFuaW1hdGlvbixpKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShpLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZS5wcmV2aW91c05vZGU9dH1fYXBwbHlBbmltYXRpb25SZWZEZWxheXModCxlLGkpe2ZvcihsZXQgciBvZiB0KXtsZXQgbz1yPy5kZWxheTtpZihvKXtsZXQgcz0ibnVtYmVyIj09dHlwZW9mIG8/bzp0cChoTShvLHI/LnBhcmFtcz8/e30sZS5lcnJvcnMpKTtpLmRlbGF5TmV4dFN0ZXAocyl9fX1fdmlzaXRTdWJJbnN0cnVjdGlvbnModCxlLGkpe2xldCBvPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHM9bnVsbCE9aS5kdXJhdGlvbj90cChpLmR1cmF0aW9uKTpudWxsLGE9bnVsbCE9aS5kZWxheT90cChpLmRlbGF5KTpudWxsO3JldHVybiAwIT09cyYmdC5mb3JFYWNoKGw9PntsZXQgYz1lLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLHMsYSk7bz1NYXRoLm1heChvLGMuZHVyYXRpb24rYy5kZWxheSl9KSxvfXZpc2l0UmVmZXJlbmNlKHQsZSl7ZS51cGRhdGVPcHRpb25zKHQub3B0aW9ucywhMCksZGwodGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10fXZpc2l0U2VxdWVuY2UodCxlKXtsZXQgaT1lLnN1YkNvbnRleHRDb3VudCxyPWUsbz10Lm9wdGlvbnM7aWYobyYmKG8ucGFyYW1zfHxvLmRlbGF5KSYmKHI9ZS5jcmVhdGVTdWJDb250ZXh0KG8pLHIudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCksbnVsbCE9by5kZWxheSkpezY9PXIucHJldmlvdXNOb2RlLnR5cGUmJihyLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxyLnByZXZpb3VzTm9kZT1oQSk7bGV0IHM9dHAoby5kZWxheSk7ci5kZWxheU5leHRTdGVwKHMpfXQuc3RlcHMubGVuZ3RoJiYodC5zdGVwcy5mb3JFYWNoKHM9PmRsKHRoaXMscyxyKSksci5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksci5zdWJDb250ZXh0Q291bnQ+aSYmci50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdEdyb3VwKHQsZSl7bGV0IGk9W10scj1lLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxvPXQub3B0aW9ucyYmdC5vcHRpb25zLmRlbGF5P3RwKHQub3B0aW9ucy5kZWxheSk6MDt0LnN0ZXBzLmZvckVhY2gocz0+e2xldCBhPWUuY3JlYXRlU3ViQ29udGV4dCh0Lm9wdGlvbnMpO28mJmEuZGVsYXlOZXh0U3RlcChvKSxkbCh0aGlzLHMsYSkscj1NYXRoLm1heChyLGEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxpLnB1c2goYS5jdXJyZW50VGltZWxpbmUpfSksaS5mb3JFYWNoKHM9PmUuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMocykpLGUudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHIpLGUucHJldmlvdXNOb2RlPXR9X3Zpc2l0VGltaW5nKHQsZSl7aWYodC5keW5hbWljKXtsZXQgaT10LnN0clZhbHVlO3JldHVybiB1QShlLnBhcmFtcz9oTShpLGUucGFyYW1zLGUuZXJyb3JzKTppLGUuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246dC5kdXJhdGlvbixkZWxheTp0LmRlbGF5LGVhc2luZzp0LmVhc2luZ319dmlzaXRBbmltYXRlKHQsZSl7bGV0IGk9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcodC50aW1pbmdzLGUpLHI9ZS5jdXJyZW50VGltZWxpbmU7aS5kZWxheSYmKGUuaW5jcmVtZW50VGltZShpLmRlbGF5KSxyLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtsZXQgbz10LnN0eWxlOzU9PW8udHlwZT90aGlzLnZpc2l0S2V5ZnJhbWVzKG8sZSk6KGUuaW5jcmVtZW50VGltZShpLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUobyxlKSxyLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxlLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLGUucHJldmlvdXNOb2RlPXR9dmlzaXRTdHlsZSh0LGUpe2xldCBpPWUuY3VycmVudFRpbWVsaW5lLHI9ZS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IXImJmkuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpJiZpLmZvcndhcmRGcmFtZSgpO2xldCBvPXImJnIuZWFzaW5nfHx0LmVhc2luZzt0LmlzRW1wdHlTdGVwP2kuYXBwbHlFbXB0eVN0ZXAobyk6aS5zZXRTdHlsZXModC5zdHlsZXMsbyxlLmVycm9ycyxlLm9wdGlvbnMpLGUucHJldmlvdXNOb2RlPXR9dmlzaXRLZXlmcmFtZXModCxlKXtsZXQgaT1lLmN1cnJlbnRBbmltYXRlVGltaW5ncyxyPWUuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLG89aS5kdXJhdGlvbixhPWUuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRUaW1lbGluZTthLmVhc2luZz1pLmVhc2luZyx0LnN0eWxlcy5mb3JFYWNoKGw9PnthLmZvcndhcmRUaW1lKChsLm9mZnNldHx8MCkqbyksYS5zZXRTdHlsZXMobC5zdHlsZXMsbC5lYXNpbmcsZS5lcnJvcnMsZS5vcHRpb25zKSxhLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhhKSxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShyK28pLGUucHJldmlvdXNOb2RlPXR9dmlzaXRRdWVyeSh0LGUpe2xldCBpPWUuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHI9dC5vcHRpb25zfHx7fSxvPXIuZGVsYXk/dHAoci5kZWxheSk6MDtvJiYoNj09PWUucHJldmlvdXNOb2RlLnR5cGV8fDA9PWkmJmUuY3VycmVudFRpbWVsaW5lLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxlLnByZXZpb3VzTm9kZT1oQSk7bGV0IHM9aSxhPWUuaW52b2tlUXVlcnkodC5zZWxlY3Rvcix0Lm9yaWdpbmFsU2VsZWN0b3IsdC5saW1pdCx0LmluY2x1ZGVTZWxmLCEhci5vcHRpb25hbCxlLmVycm9ycyk7ZS5jdXJyZW50UXVlcnlUb3RhbD1hLmxlbmd0aDtsZXQgbD1udWxsO2EuZm9yRWFjaCgoYyx1KT0+e2UuY3VycmVudFF1ZXJ5SW5kZXg9dTtsZXQgZD1lLmNyZWF0ZVN1YkNvbnRleHQodC5vcHRpb25zLGMpO28mJmQuZGVsYXlOZXh0U3RlcChvKSxjPT09ZS5lbGVtZW50JiYobD1kLmN1cnJlbnRUaW1lbGluZSksZGwodGhpcyx0LmFuaW1hdGlvbixkKSxkLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxzPU1hdGgubWF4KHMsZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksZS5jdXJyZW50UXVlcnlJbmRleD0wLGUuY3VycmVudFF1ZXJ5VG90YWw9MCxlLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShzKSxsJiYoZS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhsKSxlLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksZS5wcmV2aW91c05vZGU9dH12aXNpdFN0YWdnZXIodCxlKXtsZXQgaT1lLnBhcmVudENvbnRleHQscj1lLmN1cnJlbnRUaW1lbGluZSxvPXQudGltaW5ncyxzPU1hdGguYWJzKG8uZHVyYXRpb24pLGE9cyooZS5jdXJyZW50UXVlcnlUb3RhbC0xKSxsPXMqZS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goby5kdXJhdGlvbjwwPyJyZXZlcnNlIjpvLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpsPWEtbDticmVhaztjYXNlImZ1bGwiOmw9aS5jdXJyZW50U3RhZ2dlclRpbWV9bGV0IHU9ZS5jdXJyZW50VGltZWxpbmU7bCYmdS5kZWxheU5leHRTdGVwKGwpO2xldCBkPXUuY3VycmVudFRpbWU7ZGwodGhpcyx0LmFuaW1hdGlvbixlKSxlLnByZXZpb3VzTm9kZT10LGkuY3VycmVudFN0YWdnZXJUaW1lPXIuY3VycmVudFRpbWUtZCsoci5zdGFydFRpbWUtaS5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1lKX19LGhBPXt9LG1NPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCl7dGhpcy5fZHJpdmVyPXQsdGhpcy5lbGVtZW50PWUsdGhpcy5zdWJJbnN0cnVjdGlvbnM9aSx0aGlzLl9lbnRlckNsYXNzTmFtZT1yLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPW8sdGhpcy5lcnJvcnM9cyx0aGlzLnRpbWVsaW5lcz1hLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9aEEsdGhpcy5zdWJDb250ZXh0Q291bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPWx8fG5ldyBHXyh0aGlzLl9kcml2ZXIsZSwwKSxhLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXQscj10aGlzLm9wdGlvbnM7bnVsbCE9aS5kdXJhdGlvbiYmKHIuZHVyYXRpb249dHAoaS5kdXJhdGlvbikpLG51bGwhPWkuZGVsYXkmJihyLmRlbGF5PXRwKGkuZGVsYXkpKTtsZXQgbz1pLnBhcmFtcztpZihvKXtsZXQgcz1yLnBhcmFtcztzfHwocz10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGE9PnsoIWV8fCFzLmhhc093blByb3BlcnR5KGEpKSYmKHNbYV09aE0ob1thXSxzLHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7bGV0IHQ9e307aWYodGhpcy5vcHRpb25zKXtsZXQgZT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGUpe2xldCBpPXQucGFyYW1zPXt9O09iamVjdC5rZXlzKGUpLmZvckVhY2gocj0+e2lbcl09ZVtyXX0pfX1yZXR1cm4gdH1jcmVhdGVTdWJDb250ZXh0KHQ9bnVsbCxlLGkpe2xldCByPWV8fHRoaXMuZWxlbWVudCxvPW5ldyBtTSh0aGlzLl9kcml2ZXIscix0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHIsaXx8MCkpO3JldHVybiBvLnByZXZpb3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxvLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxvLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxvLnVwZGF0ZU9wdGlvbnModCksby5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUluZGV4LG8uY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxvLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLG99dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHQpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1oQSx0aGlzLmN1cnJlbnRUaW1lbGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCx0KSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUodCxlLGkpe2xldCByPXtkdXJhdGlvbjplPz90LmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhpPz8wKSt0LmRlbGF5LGVhc2luZzoiIn0sbz1uZXcgTjUodGhpcy5fZHJpdmVyLHQuZWxlbWVudCx0LmtleWZyYW1lcyx0LnByZVN0eWxlUHJvcHMsdC5wb3N0U3R5bGVQcm9wcyxyLHQuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKG8pLHJ9aW5jcmVtZW50VGltZSh0KXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbit0KX1kZWxheU5leHRTdGVwKHQpe3Q+MCYmdGhpcy5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcCh0KX1pbnZva2VRdWVyeSh0LGUsaSxyLG8scyl7bGV0IGE9W107aWYociYmYS5wdXNoKHRoaXMuZWxlbWVudCksdC5sZW5ndGg+MCl7dD0odD10LnJlcGxhY2UoSEFlLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoekFlLCIuIit0aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IGM9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCx0LDEhPWkpOzAhPT1pJiYoYz1pPDA/Yy5zbGljZShjLmxlbmd0aCtpLGMubGVuZ3RoKTpjLnNsaWNlKDAsaSkpLGEucHVzaCguLi5jKX1yZXR1cm4hbyYmMD09YS5sZW5ndGgmJnMucHVzaChuZXcgQXQoMzAxNCwhMSkpLGF9fSxHXz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9kcml2ZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLnN0YXJ0VGltZT1pLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1yLHRoaXMuZHVyYXRpb249MCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PW5ldyBNYXAsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNrRmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGUpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGUsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2FzZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lK3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcCh0KXtsZXQgZT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJnRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZTt0aGlzLmR1cmF0aW9ufHxlPyh0aGlzLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWUrdCksZSYmdGhpcy5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk6dGhpcy5zdGFydFRpbWUrPXR9Zm9yayh0LGUpe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyBHXyh0aGlzLl9kcml2ZXIsdCxlfHx0aGlzLmN1cnJlbnRUaW1lLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cCl9X2xvYWRLZXlmcmFtZSgpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1mb3J3YXJkVGltZSh0KXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249dCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUodCxlKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLnNldCh0LGUpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLnNldCh0LGUpLHRoaXMuX3N0eWxlU3VtbWFyeS5zZXQodCx7dGltZTp0aGlzLmN1cnJlbnRUaW1lLHZhbHVlOmV9KX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlFbXB0eVN0ZXAodCl7dCYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsdCk7Zm9yKGxldFtlLGldb2YgdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpdGhpcy5fYmFja0ZpbGwuc2V0KGUsaXx8anUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSxqdSk7dGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1zZXRTdHlsZXModCxlLGkscil7ZSYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsZSk7bGV0IG89ciYmci5wYXJhbXN8fHt9LHM9ZnVuY3Rpb24obix0KXtsZXQgaSxlPW5ldyBNYXA7cmV0dXJuIG4uZm9yRWFjaChyPT57aWYoIioiPT09cil7aT1pfHx0LmtleXMoKTtmb3IobGV0IG8gb2YgaSllLnNldChvLGp1KX1lbHNlIGpfKHIsZSl9KSxlfSh0LHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKTtmb3IobGV0W2EsbF1vZiBzKXtsZXQgYz1oTShsLG8saSk7dGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQoYSxjKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhcyhhKXx8dGhpcy5fYmFja0ZpbGwuc2V0KGEsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuZ2V0KGEpPz9qdSksdGhpcy5fdXBkYXRlU3R5bGUoYSxjKX19YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKCh0LGUpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChlLHQpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuZm9yRWFjaCgodCxlKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5oYXMoZSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoZSx0KX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W3QsZV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KHQsZSksdGhpcy5fdXBkYXRlU3R5bGUodCxlKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtsZXQgdD1bXTtmb3IobGV0IGUgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKXQucHVzaChlKTtyZXR1cm4gdH1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHQpe3QuX3N0eWxlU3VtbWFyeS5mb3JFYWNoKChlLGkpPT57bGV0IHI9dGhpcy5fc3R5bGVTdW1tYXJ5LmdldChpKTsoIXJ8fGUudGltZT5yLnRpbWUpJiZ0aGlzLl91cGRhdGVTdHlsZShpLGUudmFsdWUpfSl9YnVpbGRLZXlmcmFtZXMoKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpO2xldCB0PW5ldyBTZXQsZT1uZXcgU2V0LGk9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbixyPVtdO3RoaXMuX2tleWZyYW1lcy5mb3JFYWNoKChhLGwpPT57bGV0IGM9al8oYSxuZXcgTWFwLHRoaXMuX2JhY2tGaWxsKTtjLmZvckVhY2goKHUsZCk9PnsiISI9PT11P3QuYWRkKGQpOnU9PT1qdSYmZS5hZGQoZCl9KSxpfHxjLnNldCgib2Zmc2V0IixsL3RoaXMuZHVyYXRpb24pLHIucHVzaChjKX0pO2xldCBvPXQuc2l6ZT9kQSh0LnZhbHVlcygpKTpbXSxzPWUuc2l6ZT9kQShlLnZhbHVlcygpKTpbXTtpZihpKXtsZXQgYT1yWzBdLGw9bmV3IE1hcChhKTthLnNldCgib2Zmc2V0IiwwKSxsLnNldCgib2Zmc2V0IiwxKSxyPVthLGxdfXJldHVybiBYNSh0aGlzLmVsZW1lbnQscixvLHMsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fSxONT1jbGFzcyBleHRlbmRzIEdfe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGE9ITEpe3N1cGVyKHQsZSxzLmRlbGF5KSx0aGlzLmtleWZyYW1lcz1pLHRoaXMucHJlU3R5bGVQcm9wcz1yLHRoaXMucG9zdFN0eWxlUHJvcHM9byx0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1hLHRoaXMudGltaW5ncz17ZHVyYXRpb246cy5kdXJhdGlvbixkZWxheTpzLmRlbGF5LGVhc2luZzpzLmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgdD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6ZSxkdXJhdGlvbjppLGVhc2luZzpyfT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmUpe2xldCBvPVtdLHM9aStlLGE9ZS9zLGw9al8odFswXSk7bC5zZXQoIm9mZnNldCIsMCksby5wdXNoKGwpO2xldCBjPWpfKHRbMF0pO2Muc2V0KCJvZmZzZXQiLHdaKGEpKSxvLnB1c2goYyk7bGV0IHU9dC5sZW5ndGgtMTtmb3IobGV0IGQ9MTtkPD11O2QrKyl7bGV0IHA9al8odFtkXSksaD1wLmdldCgib2Zmc2V0Iik7cC5zZXQoIm9mZnNldCIsd1ooKGUraCppKS9zKSksby5wdXNoKHApfWk9cyxlPTAscj0iIix0PW99cmV0dXJuIFg1KHRoaXMuZWxlbWVudCx0LHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGksZSxyLCEwKX19O2Z1bmN0aW9uIHdaKG4sdD0zKXtsZXQgZT1NYXRoLnBvdygxMCx0LTEpO3JldHVybiBNYXRoLnJvdW5kKG4qZSkvZX12YXIga209Y2xhc3N7fSxHQWU9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVudCIsInBlcnNwZWN0aXZlIl0pLGZBPWNsYXNzIGV4dGVuZHMga217bm9ybWFsaXplUHJvcGVydHlOYW1lKHQsZSl7cmV0dXJuIFk1KHQpfW5vcm1hbGl6ZVN0eWxlVmFsdWUodCxlLGkscil7bGV0IG89IiIscz1pLnRvU3RyaW5nKCkudHJpbSgpO2lmKEdBZS5oYXMoZSkmJjAhPT1pJiYiMCIhPT1pKWlmKCJudW1iZXIiPT10eXBlb2YgaSlvPSJweCI7ZWxzZXtsZXQgYT1pLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7YSYmMD09YVsxXS5sZW5ndGgmJnIucHVzaChuZXcgQXQoMzAwNSwhMSkpfXJldHVybiBzK299fTtmdW5jdGlvbiBTWihuLHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwKXtyZXR1cm57dHlwZTowLGVsZW1lbnQ6bix0cmlnZ2VyTmFtZTp0LGlzUmVtb3ZhbFRyYW5zaXRpb246cixmcm9tU3RhdGU6ZSxmcm9tU3R5bGVzOm8sdG9TdGF0ZTppLHRvU3R5bGVzOnMsdGltZWxpbmVzOmEscXVlcmllZEVsZW1lbnRzOmwscHJlU3R5bGVQcm9wczpjLHBvc3RTdHlsZVByb3BzOnUsdG90YWxUaW1lOmQsZXJyb3JzOnB9fXZhciB3NT17fSxtQT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5fdHJpZ2dlck5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX3N0YXRlU3R5bGVzPWl9bWF0Y2godCxlLGkscil7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJuIG4uc29tZShvPT5vKHQsZSxpLHIpKX0odGhpcy5hc3QubWF0Y2hlcnMsdCxlLGkscil9YnVpbGRTdHlsZXModCxlLGkpe2xldCByPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT10JiYocj10aGlzLl9zdGF0ZVN0eWxlcy5nZXQodD8udG9TdHJpbmcoKSl8fHIpLHI/ci5idWlsZFN0eWxlcyhlLGkpOm5ldyBNYXB9YnVpbGQodCxlLGkscixvLHMsYSxsLGMsdSl7bGV0IGQ9W10scD10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8dzUsZj10aGlzLmJ1aWxkU3R5bGVzKGksYSYmYS5wYXJhbXN8fHc1LGQpLG09bCYmbC5wYXJhbXN8fHc1LHg9dGhpcy5idWlsZFN0eWxlcyhyLG0sZCksZz1uZXcgU2V0LGI9bmV3IE1hcCxEPW5ldyBNYXAsVD0idm9pZCI9PT1yLGs9e3BhcmFtczpxQWUobSxwKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sWj11P1tdOllaKHQsZSx0aGlzLmFzdC5hbmltYXRpb24sbyxzLGYseCxrLGMsZCksej0wO2lmKFouZm9yRWFjaCh1ZT0+e3o9TWF0aC5tYXgodWUuZHVyYXRpb24rdWUuZGVsYXkseil9KSxkLmxlbmd0aClyZXR1cm4gU1ooZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsVCxmLHgsW10sW10sYixELHosZCk7Wi5mb3JFYWNoKHVlPT57bGV0IGhlPXVlLmVsZW1lbnQsdz1wbChiLGhlLG5ldyBTZXQpO3VlLnByZVN0eWxlUHJvcHMuZm9yRWFjaChxPT53LmFkZChxKSk7bGV0IEY9cGwoRCxoZSxuZXcgU2V0KTt1ZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKHE9PkYuYWRkKHEpKSxoZSE9PWUmJmcuYWRkKGhlKX0pO2xldCBmZT1kQShnLnZhbHVlcygpKTtyZXR1cm4gU1ooZSx0aGlzLl90cmlnZ2VyTmFtZSxpLHIsVCxmLHgsWixmZSxiLEQseil9fTtmdW5jdGlvbiBxQWUobix0KXtsZXQgZT15TSh0KTtmb3IobGV0IGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiZudWxsIT1uW2ldJiYoZVtpXT1uW2ldKTtyZXR1cm4gZX1mdW5jdGlvbiBFWihuLHQsZSl7bi5oYXModCk/bi5oYXMoZSl8fG4uc2V0KGUsbi5nZXQodCkpOm4uaGFzKGUpJiZuLnNldCh0LG4uZ2V0KGUpKX12YXIgUUFlPW5ldyBmTSxUWj0ibmctYW5pbWF0ZS1xdWV1ZWQiLFM1PSJuZy1hbmltYXRlLWRpc2FibGVkIixlSWU9W10sWFo9e25hbWVzcGFjZUlkOiIiLHNldEZvclJlbW92YWw6ITEsc2V0Rm9yTW92ZTohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITF9LHRJZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yTW92ZTohMSxzZXRGb3JSZW1vdmFsOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMH0sS2w9Il9fbmdfcmVtb3ZlZCIsZ009Y2xhc3N7Y29uc3RydWN0b3IodCxlPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWU7bGV0IGk9dCYmdC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKTtpZih0aGlzLnZhbHVlPWZ1bmN0aW9uKG4pe3JldHVybiBuPz9udWxsfShpP3QudmFsdWU6dCksaSl7bGV0IG89eU0odCk7ZGVsZXRlIG8udmFsdWUsdGhpcy5vcHRpb25zPW99ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhpcy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31hYnNvcmJPcHRpb25zKHQpe2xldCBlPXQucGFyYW1zO2lmKGUpe2xldCBpPXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57bnVsbD09aVtyXSYmKGlbcl09ZVtyXSl9KX19fSxwTT0idm9pZCIsRTU9bmV3IGdNKHBNKSxfTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMudHJpZ2dlck5hbWU9ZSx0aGlzLmVsZW1lbnQ9aSx0aGlzLl9wbGF5ZXI9bmV3IGRoLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIodCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPXQsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGUsaSk9PntlLmZvckVhY2gocj0+ajUodCxpLHZvaWQgMCxyKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZSh0LnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKHQpe3RoaXMudG90YWxUaW1lPXR9c3luY1BsYXllckV2ZW50cyh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJnQub25TdGFydCgoKT0+ZS50cmlnZ2VyQ2FsbGJhY2soInN0YXJ0IikpLHQub25Eb25lKCgpPT50aGlzLmZpbmlzaCgpKSx0Lm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KCkpfV9xdWV1ZUV2ZW50KHQsZSl7cGwodGhpcy5fcXVldWVkQ2FsbGJhY2tzLHQsW10pLnB1c2goZSl9b25Eb25lKHQpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkb25lIix0KSx0aGlzLl9wbGF5ZXIub25Eb25lKHQpfW9uU3RhcnQodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoInN0YXJ0Iix0KSx0aGlzLl9wbGF5ZXIub25TdGFydCh0KX1vbkRlc3Ryb3kodCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRlc3Ryb3kiLHQpLHRoaXMuX3BsYXllci5vbkRlc3Ryb3kodCl9aW5pdCgpe3RoaXMuX3BsYXllci5pbml0KCl9aGFzU3RhcnRlZCgpe3JldHVybiF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLmhhc1N0YXJ0ZWQoKX1wbGF5KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGxheSgpfXBhdXNlKCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucGF1c2UoKX1yZXN0YXJ0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzdGFydCgpfWZpbmlzaCgpe3RoaXMuX3BsYXllci5maW5pc2goKX1kZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fcGxheWVyLmRlc3Ryb3koKX1yZXNldCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc2V0KCl9c2V0UG9zaXRpb24odCl7dGhpcy5xdWV1ZWR8fHRoaXMuX3BsYXllci5zZXRQb3NpdGlvbih0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnF1ZXVlZD8wOnRoaXMuX3BsYXllci5nZXRQb3NpdGlvbigpfXRyaWdnZXJDYWxsYmFjayh0KXtsZXQgZT10aGlzLl9wbGF5ZXI7ZS50cmlnZ2VyQ2FsbGJhY2smJmUudHJpZ2dlckNhbGxiYWNrKHQpfX07ZnVuY3Rpb24gbEEobil7cmV0dXJuIG4mJjE9PT1uLm5vZGVUeXBlfWZ1bmN0aW9uIERaKG4sdCl7bGV0IGU9bi5zdHlsZS5kaXNwbGF5O3JldHVybiBuLnN0eWxlLmRpc3BsYXk9dD8/Im5vbmUiLGV9ZnVuY3Rpb24gQVoobix0LGUsaSxyKXtsZXQgbz1bXTtlLmZvckVhY2gobD0+by5wdXNoKERaKGwpKSk7bGV0IHM9W107aS5mb3JFYWNoKChsLGMpPT57bGV0IHU9bmV3IE1hcDtsLmZvckVhY2goZD0+e2xldCBwPXQuY29tcHV0ZVN0eWxlKGMsZCxyKTt1LnNldChkLHApLCghcHx8MD09cC5sZW5ndGgpJiYoY1tLbF09dEllLHMucHVzaChjKSl9KSxuLnNldChjLHUpfSk7bGV0IGE9MDtyZXR1cm4gZS5mb3JFYWNoKGw9PkRaKGwsb1thKytdKSksc31mdW5jdGlvbiBJWihuLHQpe2xldCBlPW5ldyBNYXA7aWYobi5mb3JFYWNoKGE9PmUuc2V0KGEsW10pKSwwPT10Lmxlbmd0aClyZXR1cm4gZTtsZXQgcj1uZXcgU2V0KHQpLG89bmV3IE1hcDtmdW5jdGlvbiBzKGEpe2lmKCFhKXJldHVybiAxO2xldCBsPW8uZ2V0KGEpO2lmKGwpcmV0dXJuIGw7bGV0IGM9YS5wYXJlbnROb2RlO3JldHVybiBsPWUuaGFzKGMpP2M6ci5oYXMoYyk/MTpzKGMpLG8uc2V0KGEsbCksbH1yZXR1cm4gdC5mb3JFYWNoKGE9PntsZXQgbD1zKGEpOzEhPT1sJiZlLmdldChsKS5wdXNoKGEpfSksZX1mdW5jdGlvbiBabChuLHQpe24uY2xhc3NMaXN0Py5hZGQodCl9ZnVuY3Rpb24gel8obix0KXtuLmNsYXNzTGlzdD8ucmVtb3ZlKHQpfWZ1bmN0aW9uIG9JZShuLHQsZSl7cGgoZSkub25Eb25lKCgpPT5uLnByb2Nlc3NMZWF2ZU5vZGUodCkpfWZ1bmN0aW9uIFFaKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPW5bZV07aSBpbnN0YW5jZW9mIHVNP1FaKGkucGxheWVycyx0KTp0LnB1c2goaSl9fWZ1bmN0aW9uIFBaKG4sdCxlKXtsZXQgaT1lLmdldChuKTtpZighaSlyZXR1cm4hMTtsZXQgcj10LmdldChuKTtyZXR1cm4gcj9pLmZvckVhY2gobz0+ci5hZGQobykpOnQuc2V0KG4saSksZS5kZWxldGUobiksITB9dmFyIGhoPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmJvZHlOb2RlPXQsdGhpcy5fZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShyLG8pPT57fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuZHJpdmVyPWUsdGhpcy5fbm9ybWFsaXplcj1pLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0ocixvKT0+e319X29uUmVtb3ZhbENvbXBsZXRlKHQsZSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZSh0LGUpfWdldCBxdWV1ZWRQbGF5ZXJzKCl7bGV0IHQ9W107cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxpc3QuZm9yRWFjaChlPT57ZS5wbGF5ZXJzLmZvckVhY2goaT0+e2kucXVldWVkJiZ0LnB1c2goaSl9KX0pLHR9Y3JlYXRlTmFtZXNwYWNlKHQsZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLmlkPXQsdGhpcy5ob3N0RWxlbWVudD1lLHRoaXMuX2VuZ2luZT1pLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz1uZXcgTWFwLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIit0LFpsKGUsdGhpcy5faG9zdENsYXNzTmFtZSl9bGlzdGVuKHQsZSxpLHIpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoZSkpdGhyb3cgbmV3IEF0KDMzMDIsITEpO2lmKG51bGw9PWl8fDA9PWkubGVuZ3RoKXRocm93IG5ldyBBdCgzMzAzLCExKTtpZighZnVuY3Rpb24obil7cmV0dXJuInN0YXJ0Ij09bnx8ImRvbmUiPT1ufShpKSl0aHJvdyBuZXcgQXQoMzQwMCwhMSk7bGV0IG89cGwodGhpcy5fZWxlbWVudExpc3RlbmVycyx0LFtdKSxzPXtuYW1lOmUscGhhc2U6aSxjYWxsYmFjazpyfTtvLnB1c2gocyk7bGV0IGE9cGwodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCx0LG5ldyBNYXApO3JldHVybiBhLmhhcyhlKXx8KFpsKHQsb0EpLFpsKHQsb0ErIi0iK2UpLGEuc2V0KGUsRTUpKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57bGV0IGw9by5pbmRleE9mKHMpO2w+PTAmJm8uc3BsaWNlKGwsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKGUpfHxhLmRlbGV0ZShlKX0pfX1yZWdpc3Rlcih0LGUpe3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXModCkmJih0aGlzLl90cmlnZ2Vycy5zZXQodCxlKSwhMCl9X2dldFRyaWdnZXIodCl7bGV0IGU9dGhpcy5fdHJpZ2dlcnMuZ2V0KHQpO2lmKCFlKXRocm93IG5ldyBBdCgzNDAxLCExKTtyZXR1cm4gZX10cmlnZ2VyKHQsZSxpLHI9ITApe2xldCBvPXRoaXMuX2dldFRyaWdnZXIoZSkscz1uZXcgX00odGhpcy5pZCxlLHQpLGE9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7YXx8KFpsKHQsb0EpLFpsKHQsb0ErIi0iK2UpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KHQsYT1uZXcgTWFwKSk7bGV0IGw9YS5nZXQoZSksYz1uZXcgZ00oaSx0aGlzLmlkKTtpZighKGkmJmkuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZsJiZjLmFic29yYk9wdGlvbnMobC5vcHRpb25zKSxhLnNldChlLGMpLGx8fChsPUU1KSxjLnZhbHVlIT09cE0mJmwudmFsdWU9PT1jLnZhbHVlKXtpZighZnVuY3Rpb24obix0KXtsZXQgZT1PYmplY3Qua2V5cyhuKSxpPU9iamVjdC5rZXlzKHQpO2lmKGUubGVuZ3RoIT1pLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89ZVtyXTtpZighdC5oYXNPd25Qcm9wZXJ0eShvKXx8bltvXSE9PXRbb10pcmV0dXJuITF9cmV0dXJuITB9KGwucGFyYW1zLGMucGFyYW1zKSl7bGV0IG09W10seD1vLm1hdGNoU3R5bGVzKGwudmFsdWUsbC5wYXJhbXMsbSksZz1vLm1hdGNoU3R5bGVzKGMudmFsdWUsYy5wYXJhbXMsbSk7bS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKG0pOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57T20odCx4KSxHdSh0LGcpfSl9cmV0dXJufWxldCBwPXBsKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LHQsW10pO3AuZm9yRWFjaChtPT57bS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmbS50cmlnZ2VyTmFtZT09ZSYmbS5xdWV1ZWQmJm0uZGVzdHJveSgpfSk7bGV0IGg9by5tYXRjaFRyYW5zaXRpb24obC52YWx1ZSxjLnZhbHVlLHQsYy5wYXJhbXMpLGY9ITE7aWYoIWgpe2lmKCFyKXJldHVybjtoPW8uZmFsbGJhY2tUcmFuc2l0aW9uLGY9ITB9cmV0dXJuIHRoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6ZSx0cmFuc2l0aW9uOmgsZnJvbVN0YXRlOmwsdG9TdGF0ZTpjLHBsYXllcjpzLGlzRmFsbGJhY2tUcmFuc2l0aW9uOmZ9KSxmfHwoWmwodCxUWikscy5vblN0YXJ0KCgpPT57el8odCxUWil9KSkscy5vbkRvbmUoKCk9PntsZXQgbT10aGlzLnBsYXllcnMuaW5kZXhPZihzKTttPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKG0sMSk7bGV0IHg9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKHgpe2xldCBnPXguaW5kZXhPZihzKTtnPj0wJiZ4LnNwbGljZShnLDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHMpLHAucHVzaChzKSxzfWRlcmVnaXN0ZXIodCl7dGhpcy5fdHJpZ2dlcnMuZGVsZXRlKHQpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZm9yRWFjaChlPT5lLmRlbGV0ZSh0KSksdGhpcy5fZWxlbWVudExpc3RlbmVycy5mb3JFYWNoKChlLGkpPT57dGhpcy5fZWxlbWVudExpc3RlbmVycy5zZXQoaSxlLmZpbHRlcihyPT5yLm5hbWUhPXQpKX0pfWNsZWFyRWxlbWVudENhY2hlKHQpe3RoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZGVsZXRlKHQpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZGVsZXRlKHQpO2xldCBlPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldCh0KTtlJiYoZS5mb3JFYWNoKGk9PmkuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUodCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkodCxjQSwhMCk7aS5mb3JFYWNoKHI9PntpZihyW0tsXSlyZXR1cm47bGV0IG89dGhpcy5fZW5naW5lLmZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChyKTtvLnNpemU/by5mb3JFYWNoKHM9PnMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHIsZSwhMSwhMCkpOnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUocil9KSx0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT5pLmZvckVhY2gocj0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShyKSkpfXRyaWdnZXJMZWF2ZUFuaW1hdGlvbih0LGUsaSxyKXtsZXQgbz10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldCh0KSxzPW5ldyBNYXA7aWYobyl7bGV0IGE9W107aWYoby5mb3JFYWNoKChsLGMpPT57aWYocy5zZXQoYyxsLnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoYykpe2xldCB1PXRoaXMudHJpZ2dlcih0LGMscE0scik7dSYmYS5wdXNoKHUpfX0pLGEubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1lbnRBc1JlbW92ZWQodGhpcy5pZCx0LCEwLGUscyksaSYmcGgoYSkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZSh0KSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpe2xldCBlPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KHQpLGk9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQodCk7aWYoZSYmaSl7bGV0IHI9bmV3IFNldDtlLmZvckVhY2gobz0+e2xldCBzPW8ubmFtZTtpZihyLmhhcyhzKSlyZXR1cm47ci5hZGQocyk7bGV0IGw9dGhpcy5fdHJpZ2dlcnMuZ2V0KHMpLmZhbGxiYWNrVHJhbnNpdGlvbixjPWkuZ2V0KHMpfHxFNSx1PW5ldyBnTShwTSksZD1uZXcgX00odGhpcy5pZCxzLHQpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OnQsdHJpZ2dlck5hbWU6cyx0cmFuc2l0aW9uOmwsZnJvbVN0YXRlOmMsdG9TdGF0ZTp1LHBsYXllcjpkLGlzRmFsbGJhY2tUcmFuc2l0aW9uOiEwfSl9KX19cmVtb3ZlTm9kZSh0LGUpe2xldCBpPXRoaXMuX2VuZ2luZTtpZih0LmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0LGUpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKHQsZSwhMCkpcmV0dXJuO2xldCByPSExO2lmKGkudG90YWxBbmltYXRpb25zKXtsZXQgbz1pLnBsYXllcnMubGVuZ3RoP2kucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpOltdO2lmKG8mJm8ubGVuZ3RoKXI9ITA7ZWxzZXtsZXQgcz10O2Zvcig7cz1zLnBhcmVudE5vZGU7KWlmKGkuc3RhdGVzQnlFbGVtZW50LmdldChzKSl7cj0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKHQpLHIpaS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLHQsITEsZSk7ZWxzZXtsZXQgbz10W0tsXTsoIW98fG89PT1YWikmJihpLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUodCkpLGkuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KSxpLl9vblJlbW92YWxDb21wbGV0ZSh0LGUpKX19aW5zZXJ0Tm9kZSh0LGUpe1psKHQsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyh0KXtsZXQgZT1bXTtyZXR1cm4gdGhpcy5fcXVldWUuZm9yRWFjaChpPT57bGV0IHI9aS5wbGF5ZXI7aWYoci5kZXN0cm95ZWQpcmV0dXJuO2xldCBvPWkuZWxlbWVudCxzPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KG8pO3MmJnMuZm9yRWFjaChhPT57aWYoYS5uYW1lPT1pLnRyaWdnZXJOYW1lKXtsZXQgbD1HNShvLGkudHJpZ2dlck5hbWUsaS5mcm9tU3RhdGUudmFsdWUsaS50b1N0YXRlLnZhbHVlKTtsLl9kYXRhPXQsajUoaS5wbGF5ZXIsYS5waGFzZSxsLGEuY2FsbGJhY2spfX0pLHIubWFya2VkRm9yRGVzdHJveT90aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e3IuZGVzdHJveSgpfSk6ZS5wdXNoKGkpfSksdGhpcy5fcXVldWU9W10sZS5zb3J0KChpLHIpPT57bGV0IG89aS50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCxzPXIudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PW98fDA9PXM/by1zOnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGkuZWxlbWVudCxyLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KHQpe3RoaXMucGxheWVycy5mb3JFYWNoKGU9PmUuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LHQpfWVsZW1lbnRDb250YWluc0RhdGEodCl7bGV0IGU9ITE7cmV0dXJuIHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuaGFzKHQpJiYoZT0hMCksZT0hIXRoaXMuX3F1ZXVlLmZpbmQoaT0+aS5lbGVtZW50PT09dCl8fGUsZX19KHQsZSx0aGlzKTtyZXR1cm4gdGhpcy5ib2R5Tm9kZSYmdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KHRoaXMuYm9keU5vZGUsZSk/dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoaSxlKToodGhpcy5uZXdIb3N0RWxlbWVudHMuc2V0KGUsaSksdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpKSx0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF09aX1fYmFsYW5jZU5hbWVzcGFjZUxpc3QodCxlKXtsZXQgaT10aGlzLl9uYW1lc3BhY2VMaXN0LHI9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihpLmxlbmd0aC0xPj0wKXtsZXQgcz0hMSxhPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoZSk7Zm9yKDthOyl7bGV0IGw9ci5nZXQoYSk7aWYobCl7bGV0IGM9aS5pbmRleE9mKGwpO2kuc3BsaWNlKGMrMSwwLHQpLHM9ITA7YnJlYWt9YT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpfXN8fGkudW5zaGlmdCh0KX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gci5zZXQoZSx0KSx0fXJlZ2lzdGVyKHQsZSl7bGV0IGk9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3JldHVybiBpfHwoaT10aGlzLmNyZWF0ZU5hbWVzcGFjZSh0LGUpKSxpfXJlZ2lzdGVyVHJpZ2dlcih0LGUsaSl7bGV0IHI9dGhpcy5fbmFtZXNwYWNlTG9va3VwW3RdO3ImJnIucmVnaXN0ZXIoZSxpKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KHQsZSl7aWYoIXQpcmV0dXJuO2xldCBpPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO3RoaXMuYWZ0ZXJGbHVzaCgoKT0+e3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGkuaG9zdEVsZW1lbnQpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbdF07bGV0IHI9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGkpO3I+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Quc3BsaWNlKHIsMSl9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+aS5kZXN0cm95KGUpKX1fZmV0Y2hOYW1lc3BhY2UodCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFt0XX1mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQodCl7bGV0IGU9bmV3IFNldCxpPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCh0KTtpZihpKWZvcihsZXQgciBvZiBpLnZhbHVlcygpKWlmKHIubmFtZXNwYWNlSWQpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHIubmFtZXNwYWNlSWQpO28mJmUuYWRkKG8pfXJldHVybiBlfXRyaWdnZXIodCxlLGkscil7aWYobEEoZSkpe2xldCBvPXRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpO2lmKG8pcmV0dXJuIG8udHJpZ2dlcihlLGksciksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZSh0LGUsaSxyKXtpZighbEEoZSkpcmV0dXJuO2xldCBvPWVbS2xdO2lmKG8mJm8uc2V0Rm9yUmVtb3ZhbCl7by5zZXRGb3JSZW1vdmFsPSExLG8uc2V0Rm9yTW92ZT0hMDtsZXQgcz10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihlKTtzPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHMsMSl9aWYodCl7bGV0IHM9dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk7cyYmcy5pbnNlcnROb2RlKGUsaSl9ciYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGUpfWNvbGxlY3RFbnRlckVsZW1lbnQodCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2godCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKHQsZSl7ZT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKHQpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZCh0KSxabCh0LFM1KSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyh0KSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUodCksel8odCxTNSkpfXJlbW92ZU5vZGUodCxlLGkscil7aWYobEEoZSkpe2xldCBvPXQ/dGhpcy5fZmV0Y2hOYW1lc3BhY2UodCk6bnVsbDtpZihvP28ucmVtb3ZlTm9kZShlLHIpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQodCxlLCExLHIpLGkpe2xldCBzPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGUpO3MmJnMuaWQhPT10JiZzLnJlbW92ZU5vZGUoZSxyKX19ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShlLHIpfW1hcmtFbGVtZW50QXNSZW1vdmVkKHQsZSxpLHIsbyl7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goZSksZVtLbF09e25hbWVzcGFjZUlkOnQsc2V0Rm9yUmVtb3ZhbDpyLGhhc0FuaW1hdGlvbjppLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6b319bGlzdGVuKHQsZSxpLHIsbyl7cmV0dXJuIGxBKGUpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmxpc3RlbihlLGkscixvKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24odCxlLGkscixvKXtyZXR1cm4gdC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLHQuZWxlbWVudCx0LmZyb21TdGF0ZS52YWx1ZSx0LnRvU3RhdGUudmFsdWUsaSxyLHQuZnJvbVN0YXRlLm9wdGlvbnMsdC50b1N0YXRlLm9wdGlvbnMsZSxvKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKHQpe2xldCBlPXRoaXMuZHJpdmVyLnF1ZXJ5KHQsY0EsITApO2UuZm9yRWFjaChpPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChpKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoZT10aGlzLmRyaXZlci5xdWVyeSh0LEk1LCEwKSxlLmZvckVhY2goaT0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGkpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodCk7ZSYmZS5mb3JFYWNoKGk9PntpLnF1ZXVlZD9pLm1hcmtlZEZvckRlc3Ryb3k9ITA6aS5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KHQpe2xldCBlPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KHQpO2UmJmUuZm9yRWFjaChpPT5pLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4gcGgodGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PnQoKSk7dCgpfSl9cHJvY2Vzc0xlYXZlTm9kZSh0KXtsZXQgZT10W0tsXTtpZihlJiZlLnNldEZvclJlbW92YWwpe2lmKHRbS2xdPVhaLGUubmFtZXNwYWNlSWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyh0KTtsZXQgaT10aGlzLl9mZXRjaE5hbWVzcGFjZShlLm5hbWVzcGFjZUlkKTtpJiZpLmNsZWFyRWxlbWVudENhY2hlKHQpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKHQsZS5zZXRGb3JSZW1vdmFsKX10LmNsYXNzTGlzdD8uY29udGFpbnMoUzUpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZCh0LCExKSx0aGlzLmRyaXZlci5xdWVyeSh0LCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goaT0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGksITEpfSl9Zmx1c2godD0tMSl7bGV0IGU9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGkscik9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGkscikpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtpKyspWmwodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2ldLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2xldCBpPVtdO3RyeXtlPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhpLHQpfWZpbmFsbHl7Zm9yKGxldCByPTA7cjxpLmxlbmd0aDtyKyspaVtyXSgpfX1lbHNlIGZvcihsZXQgaT0wO2k8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtpKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tpXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goaT0+aSgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtsZXQgaT10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGUubGVuZ3RoP3BoKGUpLm9uRG9uZSgoKT0+e2kuZm9yRWFjaChyPT5yKCkpfSk6aS5mb3JFYWNoKHI9PnIoKSl9fXJlcG9ydEVycm9yKHQpe3Rocm93IG5ldyBBdCgzNDAyLCExKX1fZmx1c2hBbmltYXRpb25zKHQsZSl7bGV0IGk9bmV3IGZNLHI9W10sbz1uZXcgTWFwLHM9W10sYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAsdT1uZXcgU2V0O3RoaXMuZGlzYWJsZWROb2Rlcy5mb3JFYWNoKFk9Pnt1LmFkZChZKTtsZXQgYWU9dGhpcy5kcml2ZXIucXVlcnkoWSwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCBsZT0wO2xlPGFlLmxlbmd0aDtsZSsrKXUuYWRkKGFlW2xlXSl9KTtsZXQgZD10aGlzLmJvZHlOb2RlLHA9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLGg9SVoocCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLGY9bmV3IE1hcCxtPTA7aC5mb3JFYWNoKChZLGFlKT0+e2xldCBsZT1CWittKys7Zi5zZXQoYWUsbGUpLFkuZm9yRWFjaChJZT0+WmwoSWUsbGUpKX0pO2xldCB4PVtdLGc9bmV3IFNldCxiPW5ldyBTZXQ7Zm9yKGxldCBZPTA7WTx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO1krKyl7bGV0IGFlPXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tZXSxsZT1hZVtLbF07bGUmJmxlLnNldEZvclJlbW92YWwmJih4LnB1c2goYWUpLGcuYWRkKGFlKSxsZS5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoYWUsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaChJZT0+Zy5hZGQoSWUpKTpiLmFkZChhZSkpfWxldCBEPW5ldyBNYXAsVD1JWihwLEFycmF5LmZyb20oZykpO1QuZm9yRWFjaCgoWSxhZSk9PntsZXQgbGU9QTUrbSsrO0Quc2V0KGFlLGxlKSxZLmZvckVhY2goSWU9PlpsKEllLGxlKSl9KSx0LnB1c2goKCk9PntoLmZvckVhY2goKFksYWUpPT57bGV0IGxlPWYuZ2V0KGFlKTtZLmZvckVhY2goSWU9PnpfKEllLGxlKSl9KSxULmZvckVhY2goKFksYWUpPT57bGV0IGxlPUQuZ2V0KGFlKTtZLmZvckVhY2goSWU9PnpfKEllLGxlKSl9KSx4LmZvckVhY2goWT0+e3RoaXMucHJvY2Vzc0xlYXZlTm9kZShZKX0pfSk7bGV0IGs9W10sWj1bXTtmb3IobGV0IFk9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtZPj0wO1ktLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1ldLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoZSkuZm9yRWFjaChsZT0+e2xldCBJZT1sZS5wbGF5ZXIsdmU9bGUuZWxlbWVudDtpZihrLnB1c2goSWUpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2xldCBwdD12ZVtLbF07aWYocHQmJnB0LnNldEZvck1vdmUpe2lmKHB0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJnB0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKGxlLnRyaWdnZXJOYW1lKSl7bGV0IHd0PXB0LnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KGxlLnRyaWdnZXJOYW1lKSxUZT10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobGUuZWxlbWVudCk7aWYoVGUmJlRlLmhhcyhsZS50cmlnZ2VyTmFtZSkpe2xldCB4dD1UZS5nZXQobGUudHJpZ2dlck5hbWUpO3h0LnZhbHVlPXd0LFRlLnNldChsZS50cmlnZ2VyTmFtZSx4dCl9fXJldHVybiB2b2lkIEllLmRlc3Ryb3koKX19bGV0IERlPSFkfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQsdmUpLG50PUQuZ2V0KHZlKSxndD1mLmdldCh2ZSksVWU9dGhpcy5fYnVpbGRJbnN0cnVjdGlvbihsZSxpLGd0LG50LERlKTtpZihVZS5lcnJvcnMmJlVlLmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgWi5wdXNoKFVlKTtpZihEZSlyZXR1cm4gSWUub25TdGFydCgoKT0+T20odmUsVWUuZnJvbVN0eWxlcykpLEllLm9uRGVzdHJveSgoKT0+R3UodmUsVWUudG9TdHlsZXMpKSx2b2lkIHIucHVzaChJZSk7aWYobGUuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIEllLm9uU3RhcnQoKCk9Pk9tKHZlLFVlLmZyb21TdHlsZXMpKSxJZS5vbkRlc3Ryb3koKCk9Pkd1KHZlLFVlLnRvU3R5bGVzKSksdm9pZCByLnB1c2goSWUpO2xldCBBZT1bXTtVZS50aW1lbGluZXMuZm9yRWFjaChwdD0+e3B0LnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMocHQuZWxlbWVudCl8fEFlLnB1c2gocHQpfSksVWUudGltZWxpbmVzPUFlLGkuYXBwZW5kKHZlLFVlLnRpbWVsaW5lcykscy5wdXNoKHtpbnN0cnVjdGlvbjpVZSxwbGF5ZXI6SWUsZWxlbWVudDp2ZX0pLFVlLnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKHB0PT5wbChhLHB0LFtdKS5wdXNoKEllKSksVWUucHJlU3R5bGVQcm9wcy5mb3JFYWNoKChwdCx3dCk9PntpZihwdC5zaXplKXtsZXQgVGU9bC5nZXQod3QpO1RlfHxsLnNldCh3dCxUZT1uZXcgU2V0KSxwdC5mb3JFYWNoKCh4dCxtdCk9PlRlLmFkZChtdCkpfX0pLFVlLnBvc3RTdHlsZVByb3BzLmZvckVhY2goKHB0LHd0KT0+e2xldCBUZT1jLmdldCh3dCk7VGV8fGMuc2V0KHd0LFRlPW5ldyBTZXQpLHB0LmZvckVhY2goKHh0LG10KT0+VGUuYWRkKG10KSl9KX0pO2lmKFoubGVuZ3RoKXtsZXQgWT1bXTtaLmZvckVhY2goYWU9PntZLnB1c2gobmV3IEF0KDM1MDUsITEpKX0pLGsuZm9yRWFjaChhZT0+YWUuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKFkpfWxldCB6PW5ldyBNYXAsZmU9bmV3IE1hcDtzLmZvckVhY2goWT0+e2xldCBhZT1ZLmVsZW1lbnQ7aS5oYXMoYWUpJiYoZmUuc2V0KGFlLGFlKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChZLnBsYXllci5uYW1lc3BhY2VJZCxZLmluc3RydWN0aW9uLHopKX0pLHIuZm9yRWFjaChZPT57bGV0IGFlPVkuZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoYWUsITEsWS5uYW1lc3BhY2VJZCxZLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goSWU9PntwbCh6LGFlLFtdKS5wdXNoKEllKSxJZS5kZXN0cm95KCl9KX0pO2xldCB1ZT14LmZpbHRlcihZPT5QWihZLGwsYykpLGhlPW5ldyBNYXA7QVooaGUsdGhpcy5kcml2ZXIsYixjLGp1KS5mb3JFYWNoKFk9PntQWihZLGwsYykmJnVlLnB1c2goWSl9KTtsZXQgRj1uZXcgTWFwO2guZm9yRWFjaCgoWSxhZSk9PntBWihGLHRoaXMuZHJpdmVyLG5ldyBTZXQoWSksbCwiISIpfSksdWUuZm9yRWFjaChZPT57bGV0IGFlPWhlLmdldChZKSxsZT1GLmdldChZKTtoZS5zZXQoWSxuZXcgTWFwKFsuLi5BcnJheS5mcm9tKGFlPy5lbnRyaWVzKCk/P1tdKSwuLi5BcnJheS5mcm9tKGxlPy5lbnRyaWVzKCk/P1tdKV0pKX0pO2xldCBxPVtdLEs9W10sZGU9e307cy5mb3JFYWNoKFk9PntsZXR7ZWxlbWVudDphZSxwbGF5ZXI6bGUsaW5zdHJ1Y3Rpb246SWV9PVk7aWYoaS5oYXMoYWUpKXtpZih1LmhhcyhhZSkpcmV0dXJuIGxlLm9uRGVzdHJveSgoKT0+R3UoYWUsSWUudG9TdHlsZXMpKSxsZS5kaXNhYmxlZD0hMCxsZS5vdmVycmlkZVRvdGFsVGltZShJZS50b3RhbFRpbWUpLHZvaWQgci5wdXNoKGxlKTtsZXQgdmU9ZGU7aWYoZmUuc2l6ZT4xKXtsZXQgbnQ9YWUsZ3Q9W107Zm9yKDtudD1udC5wYXJlbnROb2RlOyl7bGV0IFVlPWZlLmdldChudCk7aWYoVWUpe3ZlPVVlO2JyZWFrfWd0LnB1c2gobnQpfWd0LmZvckVhY2goVWU9PmZlLnNldChVZSx2ZSkpfWxldCBEZT10aGlzLl9idWlsZEFuaW1hdGlvbihsZS5uYW1lc3BhY2VJZCxJZSx6LG8sRixoZSk7aWYobGUuc2V0UmVhbFBsYXllcihEZSksdmU9PT1kZSlxLnB1c2gobGUpO2Vsc2V7bGV0IG50PXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQodmUpO250JiZudC5sZW5ndGgmJihsZS5wYXJlbnRQbGF5ZXI9cGgobnQpKSxyLnB1c2gobGUpfX1lbHNlIE9tKGFlLEllLmZyb21TdHlsZXMpLGxlLm9uRGVzdHJveSgoKT0+R3UoYWUsSWUudG9TdHlsZXMpKSxLLnB1c2gobGUpLHUuaGFzKGFlKSYmci5wdXNoKGxlKX0pLEsuZm9yRWFjaChZPT57bGV0IGFlPW8uZ2V0KFkuZWxlbWVudCk7aWYoYWUmJmFlLmxlbmd0aCl7bGV0IGxlPXBoKGFlKTtZLnNldFJlYWxQbGF5ZXIobGUpfX0pLHIuZm9yRWFjaChZPT57WS5wYXJlbnRQbGF5ZXI/WS5zeW5jUGxheWVyRXZlbnRzKFkucGFyZW50UGxheWVyKTpZLmRlc3Ryb3koKX0pO2ZvcihsZXQgWT0wO1k8eC5sZW5ndGg7WSsrKXtsZXQgYWU9eFtZXSxsZT1hZVtLbF07aWYoel8oYWUsQTUpLGxlJiZsZS5oYXNBbmltYXRpb24pY29udGludWU7bGV0IEllPVtdO2lmKGEuc2l6ZSl7bGV0IERlPWEuZ2V0KGFlKTtEZSYmRGUubGVuZ3RoJiZJZS5wdXNoKC4uLkRlKTtsZXQgbnQ9dGhpcy5kcml2ZXIucXVlcnkoYWUsSTUsITApO2ZvcihsZXQgZ3Q9MDtndDxudC5sZW5ndGg7Z3QrKyl7bGV0IFVlPWEuZ2V0KG50W2d0XSk7VWUmJlVlLmxlbmd0aCYmSWUucHVzaCguLi5VZSl9fWxldCB2ZT1JZS5maWx0ZXIoRGU9PiFEZS5kZXN0cm95ZWQpO3ZlLmxlbmd0aD9vSWUodGhpcyxhZSx2ZSk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKGFlKX1yZXR1cm4geC5sZW5ndGg9MCxxLmZvckVhY2goWT0+e3RoaXMucGxheWVycy5wdXNoKFkpLFkub25Eb25lKCgpPT57WS5kZXN0cm95KCk7bGV0IGFlPXRoaXMucGxheWVycy5pbmRleE9mKFkpO3RoaXMucGxheWVycy5zcGxpY2UoYWUsMSl9KSxZLnBsYXkoKX0pLHF9ZWxlbWVudENvbnRhaW5zRGF0YSh0LGUpe2xldCBpPSExLHI9ZVtLbF07cmV0dXJuIHImJnIuc2V0Rm9yUmVtb3ZhbCYmKGk9ITApLHRoaXMucGxheWVyc0J5RWxlbWVudC5oYXMoZSkmJihpPSEwKSx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMuc3RhdGVzQnlFbGVtZW50LmhhcyhlKSYmKGk9ITApLHRoaXMuX2ZldGNoTmFtZXNwYWNlKHQpLmVsZW1lbnRDb250YWluc0RhdGEoZSl8fGl9YWZ0ZXJGbHVzaCh0KXt0aGlzLl9mbHVzaEZucy5wdXNoKHQpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSh0KXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaCh0KX1fZ2V0UHJldmlvdXNQbGF5ZXJzKHQsZSxpLHIsbyl7bGV0IHM9W107aWYoZSl7bGV0IGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQodCk7YSYmKHM9YSl9ZWxzZXtsZXQgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KHQpO2lmKGEpe2xldCBsPSFvfHxvPT1wTTthLmZvckVhY2goYz0+e2MucXVldWVkfHwhbCYmYy50cmlnZ2VyTmFtZSE9cnx8cy5wdXNoKGMpfSl9fXJldHVybihpfHxyKSYmKHM9cy5maWx0ZXIoYT0+IShpJiZpIT1hLm5hbWVzcGFjZUlkfHxyJiZyIT1hLnRyaWdnZXJOYW1lKSkpLHN9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKHQsZSxpKXtsZXQgbz1lLmVsZW1lbnQscz1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOnQsYT1lLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmUudHJpZ2dlck5hbWU7Zm9yKGxldCBsIG9mIGUudGltZWxpbmVzKXtsZXQgYz1sLmVsZW1lbnQsdT1jIT09byxkPXBsKGksYyxbXSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGMsdSxzLGEsZS50b1N0YXRlKS5mb3JFYWNoKGg9PntsZXQgZj1oLmdldFJlYWxQbGF5ZXIoKTtmLmJlZm9yZURlc3Ryb3kmJmYuYmVmb3JlRGVzdHJveSgpLGguZGVzdHJveSgpLGQucHVzaChoKX0pfU9tKG8sZS5mcm9tU3R5bGVzKX1fYnVpbGRBbmltYXRpb24odCxlLGkscixvLHMpe2xldCBhPWUudHJpZ2dlck5hbWUsbD1lLmVsZW1lbnQsYz1bXSx1PW5ldyBTZXQsZD1uZXcgU2V0LHA9ZS50aW1lbGluZXMubWFwKGY9PntsZXQgbT1mLmVsZW1lbnQ7dS5hZGQobSk7bGV0IHg9bVtLbF07aWYoeCYmeC5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IGRoKGYuZHVyYXRpb24sZi5kZWxheSk7bGV0IGc9bSE9PWwsYj1mdW5jdGlvbihuKXtsZXQgdD1bXTtyZXR1cm4gUVoobix0KSx0fSgoaS5nZXQobSl8fGVJZSkubWFwKHo9PnouZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKHo9PiEhei5lbGVtZW50JiZ6LmVsZW1lbnQ9PT1tKSxEPW8uZ2V0KG0pLFQ9cy5nZXQobSksaz1SWigwLHRoaXMuX25vcm1hbGl6ZXIsMCxmLmtleWZyYW1lcyxELFQpLFo9dGhpcy5fYnVpbGRQbGF5ZXIoZixrLGIpO2lmKGYuc3ViVGltZWxpbmUmJnImJmQuYWRkKG0pLGcpe2xldCB6PW5ldyBfTSh0LGEsbSk7ei5zZXRSZWFsUGxheWVyKFopLGMucHVzaCh6KX1yZXR1cm4gWn0pO2MuZm9yRWFjaChmPT57cGwodGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxmLmVsZW1lbnQsW10pLnB1c2goZiksZi5vbkRvbmUoKCk9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uLmdldCh0KTtpZihpKXtpZihpLmxlbmd0aCl7bGV0IHI9aS5pbmRleE9mKGUpO2kuc3BsaWNlKHIsMSl9MD09aS5sZW5ndGgmJm4uZGVsZXRlKHQpfXJldHVybiBpfSh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LGYuZWxlbWVudCxmKSl9KSx1LmZvckVhY2goZj0+WmwoZixiWikpO2xldCBoPXBoKHApO3JldHVybiBoLm9uRGVzdHJveSgoKT0+e3UuZm9yRWFjaChmPT56XyhmLGJaKSksR3UobCxlLnRvU3R5bGVzKX0pLGQuZm9yRWFjaChmPT57cGwocixmLFtdKS5wdXNoKGgpfSksaH1fYnVpbGRQbGF5ZXIodCxlLGkpe3JldHVybiBlLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUodC5lbGVtZW50LGUsdC5kdXJhdGlvbix0LmRlbGF5LHQuZWFzaW5nLGkpOm5ldyBkaCh0LmR1cmF0aW9uLHQuZGVsYXkpfX0odCxlLGkpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7dGhpcy5ib2R5Tm9kZT10LHRoaXMuX2RyaXZlcj1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVyc0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIodCxlKXtsZXQgaT1bXSxvPXFaKHRoaXMuX2RyaXZlcixlLGksW10pO2lmKGkubGVuZ3RoKXRocm93IG5ldyBBdCgzNTAzLCExKTt0aGlzLl9hbmltYXRpb25zLnNldCh0LG8pfV9idWlsZFBsYXllcih0LGUsaSl7bGV0IHI9dC5lbGVtZW50LG89UlooMCx0aGlzLl9ub3JtYWxpemVyLDAsdC5rZXlmcmFtZXMsZSxpKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFuaW1hdGUocixvLHQuZHVyYXRpb24sdC5kZWxheSx0LmVhc2luZyxbXSwhMCl9Y3JlYXRlKHQsZSxpPXt9KXtsZXQgcyxyPVtdLG89dGhpcy5fYW5pbWF0aW9ucy5nZXQodCksYT1uZXcgTWFwO2lmKG8/KHM9WVoodGhpcy5fZHJpdmVyLGUsbyxCWixBNSxuZXcgTWFwLG5ldyBNYXAsaSxRQWUscikscy5mb3JFYWNoKHU9PntsZXQgZD1wbChhLHUuZWxlbWVudCxuZXcgTWFwKTt1LnBvc3RTdHlsZVByb3BzLmZvckVhY2gocD0+ZC5zZXQocCxudWxsKSl9KSk6KHIucHVzaChuZXcgQXQoMzMwMCwhMSkpLHM9W10pLHIubGVuZ3RoKXRocm93IG5ldyBBdCgzNTA0LCExKTthLmZvckVhY2goKHUsZCk9Pnt1LmZvckVhY2goKHAsaCk9Pnt1LnNldChoLHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUoZCxoLGp1KSl9KX0pO2xldCBjPXBoKHMubWFwKHU9PntsZXQgZD1hLmdldCh1LmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcih1LG5ldyBNYXAsZCl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldCh0LGMpLGMub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kodCkpLHRoaXMucGxheWVycy5wdXNoKGMpLGN9ZGVzdHJveSh0KXtsZXQgZT10aGlzLl9nZXRQbGF5ZXIodCk7ZS5kZXN0cm95KCksdGhpcy5fcGxheWVyc0J5SWQuZGVsZXRlKHQpO2xldCBpPXRoaXMucGxheWVycy5pbmRleE9mKGUpO2k+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoaSwxKX1fZ2V0UGxheWVyKHQpe2xldCBlPXRoaXMuX3BsYXllcnNCeUlkLmdldCh0KTtpZighZSl0aHJvdyBuZXcgQXQoMzMwMSwhMSk7cmV0dXJuIGV9bGlzdGVuKHQsZSxpLHIpe2xldCBvPUc1KGUsIiIsIiIsIiIpO3JldHVybiBqNSh0aGlzLl9nZXRQbGF5ZXIodCksaSxvLHIpLCgpPT57fX1jb21tYW5kKHQsZSxpLHIpe2lmKCJyZWdpc3RlciI9PWkpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3Rlcih0LHJbMF0pO2lmKCJjcmVhdGUiPT1pKXJldHVybiB2b2lkIHRoaXMuY3JlYXRlKHQsZSxyWzBdfHx7fSk7bGV0IG89dGhpcy5fZ2V0UGxheWVyKHQpO3N3aXRjaChpKXtjYXNlInBsYXkiOm8ucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOm8ucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpvLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpvLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6by5maW5pc2goKTticmVhaztjYXNlImluaXQiOm8uaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOm8uc2V0UG9zaXRpb24ocGFyc2VGbG9hdChyWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kodCl9fX0odCxlLGkpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KHIsbyk9PnRoaXMub25SZW1vdmFsQ29tcGxldGUocixvKX1yZWdpc3RlclRyaWdnZXIodCxlLGkscixvKXtsZXQgcz10KyItIityLGE9dGhpcy5fdHJpZ2dlckNhY2hlW3NdO2lmKCFhKXtsZXQgbD1bXSx1PXFaKHRoaXMuX2RyaXZlcixvLGwsW10pO2lmKGwubGVuZ3RoKXRocm93IG5ldyBBdCgzNDA0LCExKTthPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLm5hbWU9dCx0aGlzLmFzdD1lLHRoaXMuX25vcm1hbGl6ZXI9aSx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0ZXM9bmV3IE1hcCxlLnN0YXRlcy5mb3JFYWNoKHI9PntsZXQgbz1yLm9wdGlvbnMmJnIub3B0aW9ucy5wYXJhbXN8fHt9O3RoaXMuc3RhdGVzLnNldChyLm5hbWUsbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLnN0eWxlcz10LHRoaXMuZGVmYXVsdFBhcmFtcz1lLHRoaXMubm9ybWFsaXplcj1pfWJ1aWxkU3R5bGVzKHQsZSl7bGV0IGk9bmV3IE1hcCxyPXlNKHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2gobz0+e2xldCBzPXRbb107bnVsbCE9PXMmJihyW29dPXMpfSksdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2gobz0+eyJzdHJpbmciIT10eXBlb2YgbyYmby5mb3JFYWNoKChzLGEpPT57cyYmKHM9aE0ocyxyLGUpKTtsZXQgbD10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplUHJvcGVydHlOYW1lKGEsZSk7cz10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplU3R5bGVWYWx1ZShhLGwscyxlKSxpLnNldChsLHMpfSl9KSxpfX0oci5zdHlsZSxvLGkpKX0pLEVaKHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLEVaKHRoaXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxlLnRyYW5zaXRpb25zLmZvckVhY2gocj0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyBtQSh0LHIsdGhpcy5zdGF0ZXMpKX0pLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbmV3IG1BKG4se3R5cGU6MSxhbmltYXRpb246e3R5cGU6MixzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlsocyxhKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sdCl9KHQsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5hc3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbih0LGUsaSxyKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQocz0+cy5tYXRjaCh0LGUsaSxyKSl8fG51bGx9bWF0Y2hTdHlsZXModCxlLGkpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxlcyh0LGUsaSl9fShuLHQsZSl9KHIsdSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbc109YX10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihlLHIsYSl9cmVnaXN0ZXIodCxlKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKHQsZSl9ZGVzdHJveSh0LGUpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveSh0LGUpfW9uSW5zZXJ0KHQsZSxpLHIpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZSh0LGUsaSxyKX1vblJlbW92ZSh0LGUsaSxyKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUodCxlLHJ8fCExLGkpfWRpc2FibGVBbmltYXRpb25zKHQsZSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQodCxlKX1wcm9jZXNzKHQsZSxpLHIpe2lmKCJAIj09aS5jaGFyQXQoMCkpe2xldFtvLHNdPXZaKGkpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQobyxlLHMscil9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIodCxlLGkscil9bGlzdGVuKHQsZSxpLHIsbyl7aWYoIkAiPT1pLmNoYXJBdCgwKSl7bGV0W3MsYV09dlooaSk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3RlbihzLGUsYSxvKX1yZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4odCxlLGkscixvKX1mbHVzaCh0PS0xKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKHQpfWdldCBwbGF5ZXJzKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycy5jb25jYXQodGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVycyl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX0sY0llPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9zdGFydFN0eWxlcz1pLHRoaXMuX2VuZFN0eWxlcz1yLHRoaXMuX3N0YXRlPTA7bGV0IG89bi5pbml0aWFsU3R5bGVzQnlFbGVtZW50LmdldChlKTtvfHxuLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGUsbz1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPW99c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJkd1KHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihHdSh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKEd1KHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKG4uaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhpcy5fc3RhcnRTdHlsZXMmJihPbSh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoT20odGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSxHdSh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1yZXR1cm4gbi5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwLG59KSgpO2Z1bmN0aW9uIFQ1KG4pe2xldCB0PW51bGw7cmV0dXJuIG4uZm9yRWFjaCgoZSxpKT0+eyhmdW5jdGlvbihuKXtyZXR1cm4iZGlzcGxheSI9PT1ufHwicG9zaXRpb24iPT09bn0pKGkpJiYodD10fHxuZXcgTWFwLHQuc2V0KGksZSkpfSksdH12YXIgZ0E9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5lbGVtZW50PXQsdGhpcy5rZXlmcmFtZXM9ZSx0aGlzLm9wdGlvbnM9aSx0aGlzLl9zcGVjaWFsU3R5bGVzPXIsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PW5ldyBNYXAsdGhpcy5fZHVyYXRpb249aS5kdXJhdGlvbix0aGlzLl9kZWxheT1pLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7bGV0IHQ9dGhpcy5rZXlmcmFtZXM7dGhpcy5kb21QbGF5ZXI9dGhpcy5fdHJpZ2dlcldlYkFuaW1hdGlvbih0aGlzLmVsZW1lbnQsdCx0aGlzLm9wdGlvbnMpLHRoaXMuX2ZpbmFsS2V5ZnJhbWU9dC5sZW5ndGg/dFt0Lmxlbmd0aC0xXTpuZXcgTWFwLHRoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsKCk9PnRoaXMuX29uRmluaXNoKCkpfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KHQpe2xldCBlPVtdO3JldHVybiB0LmZvckVhY2goaT0+e2UucHVzaChPYmplY3QuZnJvbUVudHJpZXMoaSkpfSksZX1fdHJpZ2dlcldlYkFuaW1hdGlvbih0LGUsaSl7cmV0dXJuIHQuYW5pbWF0ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoZSksaSl9b25TdGFydCh0KXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaCh0KSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2godCl9b25Eb25lKHQpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2godCksdGhpcy5fb25Eb25lRm5zLnB1c2godCl9b25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKHQpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydEZucy5mb3JFYWNoKHQ9PnQoKSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5kb21QbGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7dGhpcy5kb21QbGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2godD0+dCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKHQpe3ZvaWQgMD09PXRoaXMuZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT10KnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7bGV0IHQ9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYmdGhpcy5fZmluYWxLZXlmcmFtZS5mb3JFYWNoKChpLHIpPT57Im9mZnNldCIhPT1yJiZ0LnNldChyLHRoaXMuX2ZpbmlzaGVkP2k6eloodGhpcy5lbGVtZW50LHIpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PXR9dHJpZ2dlckNhbGxiYWNrKHQpe2xldCBlPSJzdGFydCI9PT10P3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2UuZm9yRWFjaChpPT5pKCkpLGUubGVuZ3RoPTB9fSxwSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGNNe2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl9uZXh0QW5pbWF0aW9uSWQ9MCx0aGlzLl9yZW5kZXJlcj1lLmNyZWF0ZVJlbmRlcmVyKGkuYm9keSx7aWQ6IjAiLGVuY2Fwc3VsYXRpb246SmEuTm9uZSxzdHlsZXM6W10sZGF0YTp7YW5pbWF0aW9uOltdfX0pfWJ1aWxkKGUpe2xldCBpPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO2xldCByPUFycmF5LmlzQXJyYXkoZSk/aUEoZSk6ZTtyZXR1cm4gWloodGhpcy5fcmVuZGVyZXIsbnVsbCxpLCJyZWdpc3RlciIsW3JdKSxuZXcgUTUoaSx0aGlzLl9yZW5kZXJlcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGood3UpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxRNT1jbGFzcyBleHRlbmRzIG5Be2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIoKSx0aGlzLl9pZD10LHRoaXMuX3JlbmRlcmVyPWV9Y3JlYXRlKHQsZSl7cmV0dXJuIG5ldyBLNSh0aGlzLl9pZCx0LGV8fHt9LHRoaXMuX3JlbmRlcmVyKX19LEs1PWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaWQ9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1yLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLnRvdGFsVGltZT0wLHRoaXMuX2NvbW1hbmQoImNyZWF0ZSIsaSl9X2xpc3Rlbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LGBAQCR7dGhpcy5pZH06JHt0fWAsZSl9X2NvbW1hbmQodCwuLi5lKXtyZXR1cm4gWloodGhpcy5fcmVuZGVyZXIsdGhpcy5lbGVtZW50LHRoaXMuaWQsdCxlKX1vbkRvbmUodCl7dGhpcy5fbGlzdGVuKCJkb25lIix0KX1vblN0YXJ0KHQpe3RoaXMuX2xpc3Rlbigic3RhcnQiLHQpfW9uRGVzdHJveSh0KXt0aGlzLl9saXN0ZW4oImRlc3Ryb3kiLHQpfWluaXQoKXt0aGlzLl9jb21tYW5kKCJpbml0Iil9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLl9jb21tYW5kKCJwbGF5IiksdGhpcy5fc3RhcnRlZD0hMH1wYXVzZSgpe3RoaXMuX2NvbW1hbmQoInBhdXNlIil9cmVzdGFydCgpe3RoaXMuX2NvbW1hbmQoInJlc3RhcnQiKX1maW5pc2goKXt0aGlzLl9jb21tYW5kKCJmaW5pc2giKX1kZXN0cm95KCl7dGhpcy5fY29tbWFuZCgiZGVzdHJveSIpfXJlc2V0KCl7dGhpcy5fY29tbWFuZCgicmVzZXQiKSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKHQpe3RoaXMuX2NvbW1hbmQoInNldFBvc2l0aW9uIix0KX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLl9yZW5kZXJlci5lbmdpbmUucGxheWVyc1srdGhpcy5pZF0/LmdldFBvc2l0aW9uKCk/PzB9fTtmdW5jdGlvbiBaWihuLHQsZSxpLHIpe3JldHVybiBuLnNldFByb3BlcnR5KHQsYEBAJHtlfToke2l9YCxyKX12YXIgSlo9IkAuZGlzYWJsZWQiLGhJZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmRlbGVnYXRlPWUsdGhpcy5lbmdpbmU9aSx0aGlzLl96b25lPXIsdGhpcy5fY3VycmVudElkPTAsdGhpcy5fbWljcm90YXNrSWQ9MSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W10sdGhpcy5fcmVuZGVyZXJDYWNoZT1uZXcgTWFwLHRoaXMuX2NkUmVjdXJEZXB0aD0wLHRoaXMucHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoMCksaS5vblJlbW92YWxDb21wbGV0ZT0obyxzKT0+e2xldCBhPXM/LnBhcmVudE5vZGUobyk7YSYmcy5yZW1vdmVDaGlsZChhLG8pfX1jcmVhdGVSZW5kZXJlcihlLGkpe2xldCBvPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIoZSxpKTtpZighKGUmJmkmJmkuZGF0YSYmaS5kYXRhLmFuaW1hdGlvbikpe2xldCB1PXRoaXMuX3JlbmRlcmVyQ2FjaGUuZ2V0KG8pO3JldHVybiB1fHwodT1uZXcgeUEoIiIsbyx0aGlzLmVuZ2luZSwoKT0+dGhpcy5fcmVuZGVyZXJDYWNoZS5kZWxldGUobykpLHRoaXMuX3JlbmRlcmVyQ2FjaGUuc2V0KG8sdSkpLHV9bGV0IHM9aS5pZCxhPWkuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3RlcihhLGUpO2xldCBsPXU9PntBcnJheS5pc0FycmF5KHUpP3UuZm9yRWFjaChsKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIocyxhLGUsdS5uYW1lLHUpfTtyZXR1cm4gaS5kYXRhLmFuaW1hdGlvbi5mb3JFYWNoKGwpLG5ldyBaNSh0aGlzLGEsbyx0aGlzLmVuZ2luZSl9YmVnaW4oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7dGhpcy5wcm9taXNlLnRoZW4oKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGUsaSxyKXtlPj0wJiZlPHRoaXMuX21pY3JvdGFza0lkP3RoaXMuX3pvbmUucnVuKCgpPT5pKHIpKTooMD09dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyLmxlbmd0aCYmUHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e3RoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5mb3JFYWNoKG89PntsZXRbcyxhXT1vO3MoYSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlci5wdXNoKFtpLHJdKSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHd1KSxqKGhoKSxqKF90KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseUE9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5uYW1lc3BhY2VJZD10LHRoaXMuZGVsZWdhdGU9ZSx0aGlzLmVuZ2luZT1pLHRoaXMuX29uRGVzdHJveT1yLHRoaXMuZGVzdHJveU5vZGU9dGhpcy5kZWxlZ2F0ZS5kZXN0cm95Tm9kZT9vPT5lLmRlc3Ryb3lOb2RlKG8pOm51bGx9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhfWRlc3Ryb3koKXt0aGlzLmVuZ2luZS5kZXN0cm95KHRoaXMubmFtZXNwYWNlSWQsdGhpcy5kZWxlZ2F0ZSksdGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Py4oKX1jcmVhdGVFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlRWxlbWVudCh0LGUpfWNyZWF0ZUNvbW1lbnQodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlQ29tbWVudCh0KX1jcmVhdGVUZXh0KHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZVRleHQodCl9YXBwZW5kQ2hpbGQodCxlKXt0aGlzLmRlbGVnYXRlLmFwcGVuZENoaWxkKHQsZSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQsITEpfWluc2VydEJlZm9yZSh0LGUsaSxyPSEwKXt0aGlzLmRlbGVnYXRlLmluc2VydEJlZm9yZSh0LGUsaSksdGhpcy5lbmdpbmUub25JbnNlcnQodGhpcy5uYW1lc3BhY2VJZCxlLHQscil9cmVtb3ZlQ2hpbGQodCxlLGkpe3RoaXMuZW5naW5lLm9uUmVtb3ZlKHRoaXMubmFtZXNwYWNlSWQsZSx0aGlzLmRlbGVnYXRlLGkpfXNlbGVjdFJvb3RFbGVtZW50KHQsZSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQodCxlKX1wYXJlbnROb2RlKHQpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUodCl9bmV4dFNpYmxpbmcodCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcodCl9c2V0QXR0cmlidXRlKHQsZSxpLHIpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKHQsZSxpLHIpfXJlbW92ZUF0dHJpYnV0ZSh0LGUsaSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUodCxlLGkpfWFkZENsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyh0LGUpfXJlbW92ZUNsYXNzKHQsZSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyh0LGUpfXNldFN0eWxlKHQsZSxpLHIpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUodCxlLGkscil9cmVtb3ZlU3R5bGUodCxlLGkpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUodCxlLGkpfXNldFByb3BlcnR5KHQsZSxpKXsiQCI9PWUuY2hhckF0KDApJiZlPT1KWj90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsISFpKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KHQsZSxpKX1zZXRWYWx1ZSh0LGUpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUodCxlKX1saXN0ZW4odCxlLGkpe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsaSl9ZGlzYWJsZUFuaW1hdGlvbnModCxlKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyh0LGUpfX0sWjU9Y2xhc3MgZXh0ZW5kcyB5QXtjb25zdHJ1Y3Rvcih0LGUsaSxyLG8pe3N1cGVyKGUsaSxyLG8pLHRoaXMuZmFjdG9yeT10LHRoaXMubmFtZXNwYWNlSWQ9ZX1zZXRQcm9wZXJ0eSh0LGUsaSl7IkAiPT1lLmNoYXJBdCgwKT8iLiI9PWUuY2hhckF0KDEpJiZlPT1KWj90aGlzLmRpc2FibGVBbmltYXRpb25zKHQsaT12b2lkIDA9PT1pfHwhIWkpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCx0LGUuc2xpY2UoMSksaSk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eSh0LGUsaSl9bGlzdGVuKHQsZSxpKXtpZigiQCI9PWUuY2hhckF0KDApKXtsZXQgcj1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gbn19KHQpLG89ZS5zbGljZSgxKSxzPSIiO3JldHVybiJAIiE9by5jaGFyQXQoMCkmJihbbyxzXT1mdW5jdGlvbihuKXtsZXQgdD1uLmluZGV4T2YoIi4iKTtyZXR1cm5bbi5zdWJzdHJpbmcoMCx0KSxuLnNsaWNlKHQrMSldfShvKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQscixvLHMsYT0+e3RoaXMuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soYS5fZGF0YXx8LTEsaSxhKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3Rlbih0LGUsaSl9fSxnSWU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhoe2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUuYm9keSxpLHIpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSxqKHZNKSxqKGttKSxqKEl1KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksJFo9W3twcm92aWRlOmNNLHVzZUNsYXNzOnBJZX0se3Byb3ZpZGU6a20sdXNlRmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBuZXcgZkF9fSx7cHJvdmlkZTpoaCx1c2VDbGFzczpnSWV9LHtwcm92aWRlOnd1LHVzZUZhY3Rvcnk6ZnVuY3Rpb24obix0LGUpe3JldHVybiBuZXcgaEllKG4sdCxlKX0sZGVwczpbc00saGgsX3RdfV0sS1o9W3twcm92aWRlOnZNLHVzZUZhY3Rvcnk6KCk9Pm5ldyBjbGFzc3t2YWxpZGF0ZVN0eWxlUHJvcGVydHkodCl7cmV0dXJuITB9dmFsaWRhdGVBbmltYXRhYmxlU3R5bGVQcm9wZXJ0eSh0KXtyZXR1cm4hMH1tYXRjaGVzRWxlbWVudCh0LGUpe3JldHVybiExfWNvbnRhaW5zRWxlbWVudCh0LGUpe3JldHVybiBGWih0LGUpfWdldFBhcmVudEVsZW1lbnQodCl7cmV0dXJuIFc1KHQpfXF1ZXJ5KHQsZSxpKXtyZXR1cm4gTloodCxlLGkpfWNvbXB1dGVTdHlsZSh0LGUsaSl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpW2VdfWFuaW1hdGUodCxlLGkscixvLHM9W10pe2xldCBsPXtkdXJhdGlvbjppLGRlbGF5OnIsZmlsbDowPT1yPyJib3RoIjoiZm9yd2FyZHMifTtvJiYobC5lYXNpbmc9byk7bGV0IGM9bmV3IE1hcCx1PXMuZmlsdGVyKGg9PmggaW5zdGFuY2VvZiBnQSk7KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1ufHwwPT09dH0pKGkscikmJnUuZm9yRWFjaChoPT57aC5jdXJyZW50U25hcHNob3QuZm9yRWFjaCgoZixtKT0+Yy5zZXQobSxmKSl9KTtsZXQgZD1mdW5jdGlvbihuKXtyZXR1cm4gbi5sZW5ndGg/blswXWluc3RhbmNlb2YgTWFwP246bi5tYXAodD0+VloodCkpOltdfShlKS5tYXAoaD0+al8oaCkpO2Q9ZnVuY3Rpb24obix0LGUpe2lmKGUuc2l6ZSYmdC5sZW5ndGgpe2xldCBpPXRbMF0scj1bXTtpZihlLmZvckVhY2goKG8scyk9PntpLmhhcyhzKXx8ci5wdXNoKHMpLGkuc2V0KHMsbyl9KSxyLmxlbmd0aClmb3IobGV0IG89MTtvPHQubGVuZ3RoO28rKyl7bGV0IHM9dFtvXTtyLmZvckVhY2goYT0+cy5zZXQoYSx6WihuLGEpKSl9fXJldHVybiB0fSh0LGQsYyk7bGV0IHA9ZnVuY3Rpb24obix0KXtsZXQgZT1udWxsLGk9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg/KGU9VDUodFswXSksdC5sZW5ndGg+MSYmKGk9VDUodFt0Lmxlbmd0aC0xXSkpKTp0IGluc3RhbmNlb2YgTWFwJiYoZT1UNSh0KSksZXx8aT9uZXcgY0llKG4sZSxpKTpudWxsfSh0LGQpO3JldHVybiBuZXcgZ0EodCxkLGwscCl9fX0se3Byb3ZpZGU6UGksdXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uJFpdLHlJZT1be3Byb3ZpZGU6dk0sdXNlQ2xhc3M6cTV9LHtwcm92aWRlOlBpLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLiRaXSxlSj0oKCk9PntjbGFzcyBue3N0YXRpYyB3aXRoQ29uZmlnKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczplLmRpc2FibGVBbmltYXRpb25zP3lJZTpLWn19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6S1osaW1wb3J0czpbdEFdfSksbn0pKCksdDQ9e307ZnVuY3Rpb24gYmUobix0KXtpZih0NFtuXT0odDRbbl18fDApKzEsImZ1bmN0aW9uIj09dHlwZW9mIHQpcmV0dXJuIEo1KG4sKC4uLmkpPT4oey4uLnQoLi4uaSksdHlwZTpufSkpO3N3aXRjaCh0P3QuX2FzOiJlbXB0eSIpe2Nhc2UiZW1wdHkiOnJldHVybiBKNShuLCgpPT4oe3R5cGU6bn0pKTtjYXNlInByb3BzIjpyZXR1cm4gSjUobixpPT4oey4uLmksdHlwZTpufSkpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNvbmZpZy4iKX19ZnVuY3Rpb24gSjUobix0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInR5cGUiLHt2YWx1ZTpuLHdyaXRhYmxlOiExfSl9dmFyIGdKPSJAbmdyeC9zdG9yZS9pbml0IixxXz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaHJ7Y29uc3RydWN0b3IoKXtzdXBlcih7dHlwZTpnSn0pfW5leHQoZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiXG4gICAgICAgIERpc3BhdGNoIGV4cGVjdGVkIGFuIG9iamVjdCwgaW5zdGVhZCBpdCByZWNlaXZlZCBhIGZ1bmN0aW9uLlxuICAgICAgICBJZiB5b3UncmUgdXNpbmcgdGhlIGNyZWF0ZUFjdGlvbiBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb25cbiAgICAgICAgYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBhY3Rpb24uIEZvciBleGFtcGxlLCBzb21lQWN0aW9uIHNob3VsZCBiZSBzb21lQWN0aW9uKCkuIik7aWYodHlwZW9mIGU+InUiKXRocm93IG5ldyBUeXBlRXJyb3IoIkFjdGlvbnMgbXVzdCBiZSBvYmplY3RzIik7aWYodHlwZW9mIGUudHlwZT4idSIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQWN0aW9ucyBtdXN0IGhhdmUgYSB0eXBlIHByb3BlcnR5Iik7c3VwZXIubmV4dChlKX1jb21wbGV0ZSgpe31uZ09uRGVzdHJveSgpe3N1cGVyLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGJJZT1bcV9dLF9KPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgUm9vdCBHdWFyZCIpLHRKPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgSW5pdGlhbCBTdGF0ZSIpLG80PW5ldyBwZSgiQG5ncngvc3RvcmUgSW5pdGlhbCBTdGF0ZSIpLHZKPW5ldyBwZSgiQG5ncngvc3RvcmUgUmVkdWNlciBGYWN0b3J5Iiksbko9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSZWR1Y2VyIEZhY3RvcnkgUHJvdmlkZXIiKSx5Sj1uZXcgcGUoIkBuZ3J4L3N0b3JlIEluaXRpYWwgUmVkdWNlcnMiKSwkNT1uZXcgcGUoIkBuZ3J4L3N0b3JlIEludGVybmFsIEluaXRpYWwgUmVkdWNlcnMiKSxpSj1uZXcgcGUoIkBuZ3J4L3N0b3JlIFN0b3JlIEZlYXR1cmVzIikscko9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBTdG9yZSBSZWR1Y2VycyIpLGU0PW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBSZWR1Y2VycyIpLG9KPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBDb25maWdzIiksYko9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBTdG9yZSBGZWF0dXJlcyIpLHNKPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgRmVhdHVyZSBSZWR1Y2VycyBUb2tlbiIpLHhKPW5ldyBwZSgiQG5ncngvc3RvcmUgRmVhdHVyZSBSZWR1Y2VycyIpLGFKPW5ldyBwZSgiQG5ncngvc3RvcmUgVXNlciBQcm92aWRlZCBNZXRhIFJlZHVjZXJzIiksV189bmV3IHBlKCJAbmdyeC9zdG9yZSBNZXRhIFJlZHVjZXJzIiksbEo9bmV3IHBlKCJAbmdyeC9zdG9yZSBJbnRlcm5hbCBSZXNvbHZlZCBNZXRhIFJlZHVjZXJzIiksY0o9bmV3IHBlKCJAbmdyeC9zdG9yZSBVc2VyIFJ1bnRpbWUgQ2hlY2tzIENvbmZpZyIpLHVKPW5ldyBwZSgiQG5ncngvc3RvcmUgSW50ZXJuYWwgVXNlciBSdW50aW1lIENoZWNrcyBDb25maWciKSxiTT1uZXcgcGUoIkBuZ3J4L3N0b3JlIEludGVybmFsIFJ1bnRpbWUgQ2hlY2tzIiksczQ9bmV3IHBlKCJAbmdyeC9zdG9yZSBDaGVjayBpZiBBY3Rpb24gdHlwZXMgYXJlIHVuaXF1ZSIpO2Z1bmN0aW9uIEZtKG4sdD17fSl7bGV0IGU9T2JqZWN0LmtleXMobiksaT17fTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7bGV0IHM9ZVtvXTsiZnVuY3Rpb24iPT10eXBlb2YgbltzXSYmKGlbc109bltzXSl9bGV0IHI9T2JqZWN0LmtleXMoaSk7cmV0dXJuIGZ1bmN0aW9uKHMsYSl7cz12b2lkIDA9PT1zP3Q6cztsZXQgbD0hMSxjPXt9O2ZvcihsZXQgdT0wO3U8ci5sZW5ndGg7dSsrKXtsZXQgZD1yW3VdLGg9c1tkXSxmPSgwLGlbZF0pKGgsYSk7Y1tkXT1mLGw9bHx8ZiE9PWh9cmV0dXJuIGw/YzpzfX1mdW5jdGlvbiBNQSguLi5uKXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiB0O2xldCBlPW5bbi5sZW5ndGgtMV07cmV0dXJuIG4uc2xpY2UoMCwtMSkucmVkdWNlUmlnaHQoKHIsbyk9Pm8ociksZSh0KSl9fWZ1bmN0aW9uIENKKG4sdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPjAmJihuPU1BLmFwcGx5KG51bGwsWy4uLnQsbl0pKSwoZSxpKT0+e2xldCByPW4oZSk7cmV0dXJuKG8scyk9PnIobz12b2lkIDA9PT1vP2k6byxzKX19bmV3IHBlKCJAbmdyeC9zdG9yZSBSb290IFN0b3JlIFByb3ZpZGVyIiksbmV3IHBlKCJAbmdyeC9zdG9yZSBGZWF0dXJlIFN0YXRlIFByb3ZpZGVyIik7dmFyIHhNPWNsYXNzIGV4dGVuZHMgdW57fSxiQT1jbGFzcyBleHRlbmRzIHFfe30seEE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhye2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKG8ocixpKSksdGhpcy5kaXNwYXRjaGVyPWUsdGhpcy5pbml0aWFsU3RhdGU9aSx0aGlzLnJlZHVjZXJzPXIsdGhpcy5yZWR1Y2VyRmFjdG9yeT1vfWdldCBjdXJyZW50UmVkdWNlcnMoKXtyZXR1cm4gdGhpcy5yZWR1Y2Vyc31hZGRGZWF0dXJlKGUpe3RoaXMuYWRkRmVhdHVyZXMoW2VdKX1hZGRGZWF0dXJlcyhlKXtsZXQgaT1lLnJlZHVjZSgocix7cmVkdWNlcnM6byxyZWR1Y2VyRmFjdG9yeTpzLG1ldGFSZWR1Y2VyczphLGluaXRpYWxTdGF0ZTpsLGtleTpjfSk9PntsZXQgdT0iZnVuY3Rpb24iPT10eXBlb2Ygbz9mdW5jdGlvbihuKXtsZXQgdD1BcnJheS5pc0FycmF5KG4pJiZuLmxlbmd0aD4wP01BKC4uLm4pOmU9PmU7cmV0dXJuKGUsaSk9PihlPXQoZSksKHIsbyk9PmUocj12b2lkIDA9PT1yP2k6cixvKSl9KGEpKG8sbCk6Q0oocyxhKShvLGwpO3JldHVybiByW2NdPXUscn0se30pO3RoaXMuYWRkUmVkdWNlcnMoaSl9cmVtb3ZlRmVhdHVyZShlKXt0aGlzLnJlbW92ZUZlYXR1cmVzKFtlXSl9cmVtb3ZlRmVhdHVyZXMoZSl7dGhpcy5yZW1vdmVSZWR1Y2VycyhlLm1hcChpPT5pLmtleSkpfWFkZFJlZHVjZXIoZSxpKXt0aGlzLmFkZFJlZHVjZXJzKHtbZV06aX0pfWFkZFJlZHVjZXJzKGUpe3RoaXMucmVkdWNlcnM9ey4uLnRoaXMucmVkdWNlcnMsLi4uZX0sdGhpcy51cGRhdGVSZWR1Y2VycyhPYmplY3Qua2V5cyhlKSl9cmVtb3ZlUmVkdWNlcihlKXt0aGlzLnJlbW92ZVJlZHVjZXJzKFtlXSl9cmVtb3ZlUmVkdWNlcnMoZSl7ZS5mb3JFYWNoKGk9Pnt0aGlzLnJlZHVjZXJzPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE9iamVjdC5rZXlzKG4pLmZpbHRlcihlPT5lIT09dCkucmVkdWNlKChlLGkpPT5PYmplY3QuYXNzaWduKGUse1tpXTpuW2ldfSkse30pfSh0aGlzLnJlZHVjZXJzLGkpfSksdGhpcy51cGRhdGVSZWR1Y2VycyhlKX11cGRhdGVSZWR1Y2VycyhlKXt0aGlzLm5leHQodGhpcy5yZWR1Y2VyRmFjdG9yeSh0aGlzLnJlZHVjZXJzLHRoaXMuaW5pdGlhbFN0YXRlKSksdGhpcy5kaXNwYXRjaGVyLm5leHQoe3R5cGU6IkBuZ3J4L3N0b3JlL3VwZGF0ZS1yZWR1Y2VycyIsZmVhdHVyZXM6ZX0pfW5nT25EZXN0cm95KCl7dGhpcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGJBKSxqKG80KSxqKHlKKSxqKHZKKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksRUllPVt4QSx7cHJvdmlkZTp4TSx1c2VFeGlzdGluZzp4QX0se3Byb3ZpZGU6YkEsdXNlRXhpc3Rpbmc6cV99XSxDTT0oKCk9PntjbGFzcyBuIGV4dGVuZHMga2V7bmdPbkRlc3Ryb3koKXt0aGlzLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxUSWU9W0NNXSxDQT1jbGFzcyBleHRlbmRzIHVue30sZEo9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGhye2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKG8pO2xldCBjPWUucGlwZShCZihnTikpLnBpcGUoV3QoaSkpLnBpcGUoZnVuY3Rpb24obix0KXtyZXR1cm4gZW4oQVcobix0LGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oREllLHtzdGF0ZTpvfSkpO3RoaXMuc3RhdGVTdWJzY3JpcHRpb249Yy5zdWJzY3JpYmUoKHtzdGF0ZTp1LGFjdGlvbjpkfSk9Pnt0aGlzLm5leHQodSksci5uZXh0KGQpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0YXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5jb21wbGV0ZSgpfX1yZXR1cm4gbi5JTklUPWdKLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihxXyksaih4TSksaihDTSksaihvNCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIERJZShuPXtzdGF0ZTp2b2lkIDB9LFt0LGVdKXtsZXR7c3RhdGU6aX09bjtyZXR1cm57c3RhdGU6ZShpLHQpLGFjdGlvbjp0fX12YXIgQUllPVtkSix7cHJvdmlkZTpDQSx1c2VFeGlzdGluZzpkSn1dLENlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB1bntjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLmFjdGlvbnNPYnNlcnZlcj1pLHRoaXMucmVkdWNlck1hbmFnZXI9cix0aGlzLnNvdXJjZT1lfXNlbGVjdChlLC4uLmkpe3JldHVybiB2dC5jYWxsKG51bGwsZSwuLi5pKSh0aGlzKX1saWZ0KGUpe2xldCBpPW5ldyBuKHRoaXMsdGhpcy5hY3Rpb25zT2JzZXJ2ZXIsdGhpcy5yZWR1Y2VyTWFuYWdlcik7cmV0dXJuIGkub3BlcmF0b3I9ZSxpfWRpc3BhdGNoKGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLm5leHQoZSl9bmV4dChlKXt0aGlzLmFjdGlvbnNPYnNlcnZlci5uZXh0KGUpfWVycm9yKGUpe3RoaXMuYWN0aW9uc09ic2VydmVyLmVycm9yKGUpfWNvbXBsZXRlKCl7dGhpcy5hY3Rpb25zT2JzZXJ2ZXIuY29tcGxldGUoKX1hZGRSZWR1Y2VyKGUsaSl7dGhpcy5yZWR1Y2VyTWFuYWdlci5hZGRSZWR1Y2VyKGUsaSl9cmVtb3ZlUmVkdWNlcihlKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLnJlbW92ZVJlZHVjZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooQ0EpLGoocV8pLGooeEEpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxJSWU9W0NlXTtmdW5jdGlvbiB2dChuLHQsLi4uZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe2xldCBvO2lmKCJzdHJpbmciPT10eXBlb2Ygbil7bGV0IHM9W3QsLi4uZV0uZmlsdGVyKEJvb2xlYW4pO289ci5waXBlKGZ1bmN0aW9uKC4uLm4pe2xldCB0PW4ubGVuZ3RoO2lmKDA9PT10KXRocm93IG5ldyBFcnJvcigibGlzdCBvZiBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBlbXB0eS4iKTtyZXR1cm4gTChlPT57bGV0IGk9ZTtmb3IobGV0IHI9MDtyPHQ7cisrKXtsZXQgbz1pPy5bbltyXV07aWYoISh0eXBlb2YgbzwidSIpKXJldHVybjtpPW99cmV0dXJuIGl9KX0obiwuLi5zKSl9ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmV4cGVjdGVkIHR5cGUgJyR7dHlwZW9mIG59JyBpbiBzZWxlY3Qgb3BlcmF0b3IsIGV4cGVjdGVkICdzdHJpbmcnIG9yICdmdW5jdGlvbidgKTtvPXIucGlwZShMKHM9Pm4ocyx0KSkpfXJldHVybiBvLnBpcGUoeWkoKSl9fXZhciBhND0iaHR0cHM6Ly9uZ3J4LmlvL2d1aWRlL3N0b3JlL2NvbmZpZ3VyYXRpb24vcnVudGltZS1jaGVja3MiO2Z1bmN0aW9uIHBKKG4pe3JldHVybiB2b2lkIDA9PT1ufWZ1bmN0aW9uIGhKKG4pe3JldHVybiBudWxsPT09bn1mdW5jdGlvbiBNSihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKX1mdW5jdGlvbiB3SihuKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1ufWZ1bmN0aW9uIG40KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBufWZ1bmN0aW9uIGZKKG4sdCl7cmV0dXJuIG49PT10fWZ1bmN0aW9uIEhJZShuLHQsZSl7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspaWYoIWUobltpXSx0W2ldKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBTSihuLHQ9ZkosZT1mSil7bGV0IG8saT1udWxsLHI9bnVsbDtyZXR1cm57bWVtb2l6ZWQ6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1vKXJldHVybiBvLnJlc3VsdDtpZighaSlyZXR1cm4gcj1uLmFwcGx5KG51bGwsYXJndW1lbnRzKSxpPWFyZ3VtZW50cyxyO2lmKCFISWUoYXJndW1lbnRzLGksdCkpcmV0dXJuIHI7bGV0IHU9bi5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIGk9YXJndW1lbnRzLGUocix1KT9yOihyPXUsdSl9LHJlc2V0OmZ1bmN0aW9uKCl7aT1udWxsLHI9bnVsbH0sc2V0UmVzdWx0OmZ1bmN0aW9uKHUpe289e3Jlc3VsdDp1fX0sY2xlYXJSZXN1bHQ6ZnVuY3Rpb24oKXtvPXZvaWQgMH19fWZ1bmN0aW9uIEooLi4ubil7cmV0dXJuIGZ1bmN0aW9uKG4sdD17c3RhdGVGbjpVSWV9KXtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7bGV0IGk9ZTtpZihBcnJheS5pc0FycmF5KGlbMF0pKXtsZXRbdSwuLi5kXT1pO2k9Wy4uLnUsLi4uZF19bGV0IHI9aS5zbGljZSgwLGkubGVuZ3RoLTEpLG89aVtpLmxlbmd0aC0xXSxzPXIuZmlsdGVyKHU9PnUucmVsZWFzZSYmImZ1bmN0aW9uIj09dHlwZW9mIHUucmVsZWFzZSksYT1uKGZ1bmN0aW9uKC4uLnUpe3JldHVybiBvLmFwcGx5KG51bGwsdSl9KSxsPVNKKGZ1bmN0aW9uKHUsZCl7cmV0dXJuIHQuc3RhdGVGbi5hcHBseShudWxsLFt1LHIsZCxhXSl9KTtyZXR1cm4gT2JqZWN0LmFzc2lnbihsLm1lbW9pemVkLHtyZWxlYXNlOmZ1bmN0aW9uKCl7bC5yZXNldCgpLGEucmVzZXQoKSxzLmZvckVhY2godT0+dS5yZWxlYXNlKCkpfSxwcm9qZWN0b3I6YS5tZW1vaXplZCxzZXRSZXN1bHQ6bC5zZXRSZXN1bHQsY2xlYXJSZXN1bHQ6bC5jbGVhclJlc3VsdH0pfX0oU0opKC4uLm4pfWZ1bmN0aW9uIFVJZShuLHQsZSxpKXtpZih2b2lkIDA9PT1lKXtsZXQgbz10Lm1hcChzPT5zKG4pKTtyZXR1cm4gaS5tZW1vaXplZC5hcHBseShudWxsLG8pfWxldCByPXQubWFwKG89Pm8obixlKSk7cmV0dXJuIGkubWVtb2l6ZWQuYXBwbHkobnVsbCxbLi4ucixlXSl9ZnVuY3Rpb24gTXIobil7cmV0dXJuIEoodD0+e2xldCBlPXRbbl07cmV0dXJuIHRDKCkmJiEobiBpbiB0KSYmY29uc29sZS53YXJuKGBAbmdyeC9zdG9yZTogVGhlIGZlYXR1cmUgbmFtZSAiJHtufSIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHN0YXRlLCB0aGVyZWZvcmUgY3JlYXRlRmVhdHVyZVNlbGVjdG9yIGNhbm5vdCBhY2Nlc3MgaXQuICBCZSBzdXJlIGl0IGlzIGltcG9ydGVkIGluIGEgbG9hZGVkIG1vZHVsZSB1c2luZyBTdG9yZU1vZHVsZS5mb3JSb290KCcke259JywgLi4uKSBvciBTdG9yZU1vZHVsZS5mb3JGZWF0dXJlKCcke259JywgLi4uKS4gIElmIHRoZSBkZWZhdWx0IHN0YXRlIGlzIGludGVuZGVkIHRvIGJlIHVuZGVmaW5lZCwgYXMgaXMgdGhlIGNhc2Ugd2l0aCByb3V0ZXIgc3RhdGUsIHRoaXMgZGV2ZWxvcG1lbnQtb25seSB3YXJuaW5nIG1lc3NhZ2UgY2FuIGJlIGlnbm9yZWQuYCksZX0sdD0+dCl9ZnVuY3Rpb24gakllKG4sdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBwZT9uLmdldCh0KTp0fWZ1bmN0aW9uIEdJZShuLHQsZSl7cmV0dXJuIGUubWFwKChpLHIpPT57aWYodFtyXWluc3RhbmNlb2YgcGUpe2xldCBvPW4uZ2V0KHRbcl0pO3JldHVybntrZXk6aS5rZXkscmVkdWNlckZhY3Rvcnk6by5yZWR1Y2VyRmFjdG9yeT9vLnJlZHVjZXJGYWN0b3J5OkZtLG1ldGFSZWR1Y2VyczpvLm1ldGFSZWR1Y2Vycz9vLm1ldGFSZWR1Y2VyczpbXSxpbml0aWFsU3RhdGU6by5pbml0aWFsU3RhdGV9fXJldHVybiBpfSl9ZnVuY3Rpb24gV0llKG4sdCl7cmV0dXJuIHQubWFwKGk9PmkgaW5zdGFuY2VvZiBwZT9uLmdldChpKTppKX1mdW5jdGlvbiBFSihuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKCk6bn1mdW5jdGlvbiBxSWUobix0KXtyZXR1cm4gbi5jb25jYXQodCl9ZnVuY3Rpb24gWUllKG4pe2lmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHJvb3QgU3RvcmUgaGFzIGJlZW4gcHJvdmlkZWQgbW9yZSB0aGFuIG9uY2UuIEZlYXR1cmUgbW9kdWxlcyBzaG91bGQgcHJvdmlkZSBmZWF0dXJlIHN0YXRlcyBpbnN0ZWFkLiIpO3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiBpNChuKXtPYmplY3QuZnJlZXplKG4pO2xldCB0PW40KG4pO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhuKS5mb3JFYWNoKGU9PntpZighZS5zdGFydHNXaXRoKCJcdTAyNzUiKSYmZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sdCl9KG4sZSkmJighdHx8ImNhbGxlciIhPT1lJiYiY2FsbGVlIiE9PWUmJiJhcmd1bWVudHMiIT09ZSkpe2xldCBpPW5bZV07KHdKKGkpfHxuNChpKSkmJiFPYmplY3QuaXNGcm96ZW4oaSkmJmk0KGkpfX0pLG59ZnVuY3Rpb24gcjQobix0PVtdKXtyZXR1cm4ocEoobil8fGhKKG4pKSYmMD09PXQubGVuZ3RoP3twYXRoOlsicm9vdCJdLHZhbHVlOm59Ok9iamVjdC5rZXlzKG4pLnJlZHVjZSgoaSxyKT0+e2lmKGkpcmV0dXJuIGk7bGV0IG89bltyXTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG40KG4pJiZuLmhhc093blByb3BlcnR5KCJcdTAyNzVjbXAiKX0obyk/aTohKHBKKG8pfHxoSihvKXx8ZnVuY3Rpb24obil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBufShvKXx8ZnVuY3Rpb24obil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbn0obyl8fGZ1bmN0aW9uKG4pe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbn0obyl8fE1KKG8pKSYmKGZ1bmN0aW9uKG4pe2lmKCFmdW5jdGlvbihuKXtyZXR1cm4gd0oobikmJiFNSihuKX0obikpcmV0dXJuITE7bGV0IHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiB0PT09T2JqZWN0LnByb3RvdHlwZXx8bnVsbD09PXR9KG8pP3I0KG8sWy4uLnQscl0pOntwYXRoOlsuLi50LHJdLHZhbHVlOm99KX0sITEpfWZ1bmN0aW9uIG1KKG4sdCl7aWYoITE9PT1uKXJldHVybjtsZXQgZT1uLnBhdGguam9pbigiLiIpLGk9bmV3IEVycm9yKGBEZXRlY3RlZCB1bnNlcmlhbGl6YWJsZSAke3R9IGF0ICIke2V9Ii4gJHthNH0jc3RyaWN0JHt0fXNlcmlhbGl6YWJpbGl0eWApO3Rocm93IGkudmFsdWU9bi52YWx1ZSxpLnVuc2VyaWFsaXphYmxlUGF0aD1lLGl9ZnVuY3Rpb24gWkllKG4pe3JldHVybiB0QygpP3tzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25TZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvbldpdGhpbk5nWm9uZTohMSxzdHJpY3RBY3Rpb25UeXBlVW5pcXVlbmVzczohMSwuLi5ufTp7c3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6ITEsc3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5OiExLHN0cmljdFN0YXRlSW1tdXRhYmlsaXR5OiExLHN0cmljdEFjdGlvbkltbXV0YWJpbGl0eTohMSxzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6ITEsc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3M6ITF9fWZ1bmN0aW9uIEpJZSh7c3RyaWN0QWN0aW9uU2VyaWFsaXphYmlsaXR5Om4sc3RyaWN0U3RhdGVTZXJpYWxpemFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7dC5hY3Rpb24oaSkmJm1KKHI0KGkpLCJhY3Rpb24iKTtsZXQgcj1uKGUsaSk7cmV0dXJuIHQuc3RhdGUoKSYmbUoocjQociksInN0YXRlIikscn19KGUse2FjdGlvbjppPT5uJiYhbDQoaSksc3RhdGU6KCk9PnR9KTplfWZ1bmN0aW9uICRJZSh7c3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5Om4sc3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6dH0pe3JldHVybiBlPT5ufHx0P2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7bGV0IHI9dC5hY3Rpb24oaSk/aTQoaSk6aSxvPW4oZSxyKTtyZXR1cm4gdC5zdGF0ZSgpP2k0KG8pOm99fShlLHthY3Rpb246aT0+biYmIWw0KGkpLHN0YXRlOigpPT50fSk6ZX1mdW5jdGlvbiBsNChuKXtyZXR1cm4gbi50eXBlLnN0YXJ0c1dpdGgoIkBuZ3J4Iil9ZnVuY3Rpb24gZTJlKHtzdHJpY3RBY3Rpb25XaXRoaW5OZ1pvbmU6bn0pe3JldHVybiB0PT5uP2Z1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7aWYodC5hY3Rpb24oaSkmJiFfdC5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiAnJHtpLnR5cGV9JyBydW5uaW5nIG91dHNpZGUgTmdab25lLiAke2E0fSNzdHJpY3RhY3Rpb253aXRoaW5uZ3pvbmVgKTtyZXR1cm4gbihlLGkpfX0odCx7YWN0aW9uOmU9Pm4mJiFsNChlKX0pOnR9ZnVuY3Rpb24gdDJlKG4pe3JldHVyblt7cHJvdmlkZTp1Six1c2VWYWx1ZTpufSx7cHJvdmlkZTpjSix1c2VGYWN0b3J5Om4yZSxkZXBzOlt1Sl19LHtwcm92aWRlOmJNLGRlcHM6W2NKXSx1c2VGYWN0b3J5OlpJZX0se3Byb3ZpZGU6V18sbXVsdGk6ITAsZGVwczpbYk1dLHVzZUZhY3Rvcnk6JEllfSx7cHJvdmlkZTpXXyxtdWx0aTohMCxkZXBzOltiTV0sdXNlRmFjdG9yeTpKSWV9LHtwcm92aWRlOldfLG11bHRpOiEwLGRlcHM6W2JNXSx1c2VGYWN0b3J5OmUyZX1dfWZ1bmN0aW9uIFRKKCl7cmV0dXJuW3twcm92aWRlOnM0LG11bHRpOiEwLGRlcHM6W2JNXSx1c2VGYWN0b3J5OmkyZX1dfWZ1bmN0aW9uIG4yZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBpMmUobil7aWYoIW4uc3RyaWN0QWN0aW9uVHlwZVVuaXF1ZW5lc3MpcmV0dXJuO2xldCB0PU9iamVjdC5lbnRyaWVzKHQ0KS5maWx0ZXIoKFssZV0pPT5lPjEpLm1hcCgoW2VdKT0+ZSk7aWYodC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gdHlwZXMgYXJlIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uY2UsICR7dC5tYXAoZT0+YCIke2V9ImApLmpvaW4oIiwgIil9LiAke2E0fSNzdHJpY3RhY3Rpb250eXBldW5pcXVlbmVzc2ApfWZ1bmN0aW9uIHIyZShuLHQpe3JldHVyblt7cHJvdmlkZTpfSix1c2VGYWN0b3J5OllJZSxkZXBzOltbQ2UsbmV3IG5zLG5ldyB0bF1dfSx7cHJvdmlkZTp0Six1c2VWYWx1ZTp0LmluaXRpYWxTdGF0ZX0se3Byb3ZpZGU6bzQsdXNlRmFjdG9yeTpFSixkZXBzOlt0Sl19LHtwcm92aWRlOiQ1LHVzZVZhbHVlOm59LHtwcm92aWRlOnJKLHVzZUV4aXN0aW5nOm4gaW5zdGFuY2VvZiBwZT9uOiQ1fSx7cHJvdmlkZTp5SixkZXBzOltYbiwkNSxbbmV3IGowKHJKKV1dLHVzZUZhY3Rvcnk6akllfSx7cHJvdmlkZTphSix1c2VWYWx1ZTp0Lm1ldGFSZWR1Y2Vycz90Lm1ldGFSZWR1Y2VyczpbXX0se3Byb3ZpZGU6bEosZGVwczpbV18sYUpdLHVzZUZhY3Rvcnk6cUllfSx7cHJvdmlkZTpuSix1c2VWYWx1ZTp0LnJlZHVjZXJGYWN0b3J5P3QucmVkdWNlckZhY3Rvcnk6Rm19LHtwcm92aWRlOnZKLGRlcHM6W25KLGxKXSx1c2VGYWN0b3J5OkNKfSxiSWUsRUllLFRJZSxBSWUsSUllLHQyZSh0LnJ1bnRpbWVDaGVja3MpLFRKKCldfWZ1bmN0aW9uIG8yZShuLHQsZT17fSl7cmV0dXJuW3twcm92aWRlOm9KLG11bHRpOiEwLHVzZVZhbHVlOm4gaW5zdGFuY2VvZiBPYmplY3Q/e306ZX0se3Byb3ZpZGU6aUosbXVsdGk6ITAsdXNlVmFsdWU6e2tleTpuIGluc3RhbmNlb2YgT2JqZWN0P24ubmFtZTpuLHJlZHVjZXJGYWN0b3J5OmUgaW5zdGFuY2VvZiBwZXx8IWUucmVkdWNlckZhY3Rvcnk/Rm06ZS5yZWR1Y2VyRmFjdG9yeSxtZXRhUmVkdWNlcnM6ZSBpbnN0YW5jZW9mIHBlfHwhZS5tZXRhUmVkdWNlcnM/W106ZS5tZXRhUmVkdWNlcnMsaW5pdGlhbFN0YXRlOmUgaW5zdGFuY2VvZiBwZXx8IWUuaW5pdGlhbFN0YXRlP3ZvaWQgMDplLmluaXRpYWxTdGF0ZX19LHtwcm92aWRlOmJKLGRlcHM6W1huLG9KLGlKXSx1c2VGYWN0b3J5OkdJZX0se3Byb3ZpZGU6ZTQsbXVsdGk6ITAsdXNlVmFsdWU6biBpbnN0YW5jZW9mIE9iamVjdD9uLnJlZHVjZXI6dH0se3Byb3ZpZGU6c0osbXVsdGk6ITAsdXNlRXhpc3Rpbmc6dCBpbnN0YW5jZW9mIHBlP3Q6ZTR9LHtwcm92aWRlOnhKLG11bHRpOiEwLGRlcHM6W1huLGU0LFtuZXcgajAoc0opXV0sdXNlRmFjdG9yeTpXSWV9LFRKKCldfXZhciBNTT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoocV8pLGooeE0pLGooQ00pLGooQ2UpLGooX0osOCksaihzNCw4KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLHdBPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLmZlYXR1cmVzPWUsdGhpcy5mZWF0dXJlUmVkdWNlcnM9aSx0aGlzLnJlZHVjZXJNYW5hZ2VyPXI7bGV0IGE9ZS5tYXAoKGwsYyk9PntsZXQgZD1pLnNoaWZ0KClbY107cmV0dXJuey4uLmwscmVkdWNlcnM6ZCxpbml0aWFsU3RhdGU6RUoobC5pbml0aWFsU3RhdGUpfX0pO3IuYWRkRmVhdHVyZXMoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlZHVjZXJNYW5hZ2VyLnJlbW92ZUZlYXR1cmVzKHRoaXMuZmVhdHVyZXMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGJKKSxqKHhKKSxqKHhBKSxqKE1NKSxqKHM0LDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksd3I9KCgpPT57Y2xhc3MgbntzdGF0aWMgZm9yUm9vdChlLGk9e30pe3JldHVybntuZ01vZHVsZTpNTSxwcm92aWRlcnM6Wy4uLnIyZShlLGkpXX19c3RhdGljIGZvckZlYXR1cmUoZSxpLHI9e30pe3JldHVybntuZ01vZHVsZTp3QSxwcm92aWRlcnM6Wy4uLm8yZShlLGkscildfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIFNlKC4uLm4pe3JldHVybntyZWR1Y2VyOm4ucG9wKCksdHlwZXM6bi5tYXAoaT0+aS50eXBlKX19ZnVuY3Rpb24gdnIobiwuLi50KXtsZXQgZT1uZXcgTWFwO2ZvcihsZXQgaSBvZiB0KWZvcihsZXQgciBvZiBpLnR5cGVzKXtsZXQgbz1lLmdldChyKTtlLnNldChyLG8/KGEsbCk9PmkucmVkdWNlcihvKGEsbCksbCk6aS5yZWR1Y2VyKX1yZXR1cm4gZnVuY3Rpb24oaT1uLHIpe2xldCBvPWUuZ2V0KHIudHlwZSk7cmV0dXJuIG8/byhpLHIpOml9fXZhciBzMmU9e2Rpc3BhdGNoOiEwLHVzZUVmZmVjdHNFcnJvckhhbmRsZXI6ITB9LEVBPSJfX0BuZ3J4L2VmZmVjdHNfY3JlYXRlX18iO2Z1bmN0aW9uIGNyKG4sdCl7bGV0IGU9bigpLGk9ey4uLnMyZSwuLi50fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsRUEse3ZhbHVlOml9KSxlfWZ1bmN0aW9uIGEyZShuKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobikuZmlsdGVyKGk9PiEoIW5baV18fCFuW2ldLmhhc093blByb3BlcnR5KEVBKSkmJm5baV1bRUFdLmhhc093blByb3BlcnR5KCJkaXNwYXRjaCIpKS5tYXAoaT0+KHtwcm9wZXJ0eU5hbWU6aSwuLi5uW2ldW0VBXX0pKX1mdW5jdGlvbiB1NChuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pfXZhciBJSj0iX19AbmdyeC9lZmZlY3RzX18iO2Z1bmN0aW9uIGwyZShuKXtyZXR1cm4gTUEodTJlLHU0KShuKX1mdW5jdGlvbiB1MmUobil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBuLmNvbnN0cnVjdG9yLmhhc093blByb3BlcnR5KElKKX0obik/bi5jb25zdHJ1Y3RvcltJSl06W119ZnVuY3Rpb24gUEoobix0LGU9MTApe3JldHVybiBuLnBpcGUoZm8oaT0+KHQmJnQuaGFuZGxlRXJyb3IoaSksZTw9MT9uOlBKKG4sdCxlLTEpKSkpfXZhciBQbz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdW57Y29uc3RydWN0b3IoZSl7c3VwZXIoKSxlJiYodGhpcy5zb3VyY2U9ZSl9bGlmdChlKXtsZXQgaT1uZXcgbjtyZXR1cm4gaS5zb3VyY2U9dGhpcyxpLm9wZXJhdG9yPWUsaX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihDTSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIGlpKC4uLm4pe3JldHVybiBZZSh0PT5uLnNvbWUoZT0+InN0cmluZyI9PXR5cGVvZiBlP2U9PT10LnR5cGU6ZS50eXBlPT09dC50eXBlKSl9dmFyIFJKPW5ldyBwZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEd1YXJkIiksU0E9bmV3IHBlKCJAbmdyeC9lZmZlY3RzIFVzZXIgUHJvdmlkZWQgRWZmZWN0cyIpLGM0PW5ldyBwZSgiQG5ncngvZWZmZWN0cyBJbnRlcm5hbCBSb290IEVmZmVjdHMiKSxPSj1uZXcgcGUoIkBuZ3J4L2VmZmVjdHMgUm9vdCBFZmZlY3RzIiksREo9bmV3IHBlKCJAbmdyeC9lZmZlY3RzIEludGVybmFsIEZlYXR1cmUgRWZmZWN0cyIpLGtKPW5ldyBwZSgiQG5ncngvZWZmZWN0cyBGZWF0dXJlIEVmZmVjdHMiKSxmMmU9bmV3IHBlKCJAbmdyeC9lZmZlY3RzIEVmZmVjdHMgRXJyb3IgSGFuZGxlciIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PlBKfSksRko9IkBuZ3J4L2VmZmVjdHMvaW5pdCI7ZnVuY3Rpb24gdzJlKG4pe3JldHVybiBkNChuLCJuZ3J4T25Jbml0RWZmZWN0cyIpfWZ1bmN0aW9uIGQ0KG4sdCl7cmV0dXJuIG4mJnQgaW4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG5bdF19YmUoRkopO3ZhciBOSj0oKCk9PntjbGFzcyBuIGV4dGVuZHMga2V7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuZXJyb3JIYW5kbGVyPWUsdGhpcy5lZmZlY3RzRXJyb3JIYW5kbGVyPWl9YWRkRWZmZWN0cyhlKXt0aGlzLm5leHQoZSl9dG9BY3Rpb25zKCl7cmV0dXJuIHRoaXMucGlwZSh4MSh1NCkseG4oZT0+ZS5waXBlKHgxKFMyZSkpKSx4bihlPT57bGV0IGk9ZS5waXBlKHkxKG89PmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGU9PntsZXQgaT1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dTQobikuY29uc3RydWN0b3IubmFtZSxyPWZ1bmN0aW9uKG4pe3JldHVybltsMmUsYTJlXS5yZWR1Y2UoKGUsaSk9PmUuY29uY2F0KGkobikpLFtdKX0obikubWFwKCh7cHJvcGVydHlOYW1lOm8sZGlzcGF0Y2g6cyx1c2VFZmZlY3RzRXJyb3JIYW5kbGVyOmF9KT0+e2xldCBsPSJmdW5jdGlvbiI9PXR5cGVvZiBuW29dP25bb10oKTpuW29dLGM9YT9lKGwsdCk6bDtyZXR1cm4hMT09PXM/Yy5waXBlKGx4KCkpOmMucGlwZShlbigobix0KT0+e24uc3Vic2NyaWJlKGp0KHQsZT0+e3QubmV4dChSbC5jcmVhdGVOZXh0KGUpKX0sKCk9Pnt0Lm5leHQoUmwuY3JlYXRlQ29tcGxldGUoKSksdC5jb21wbGV0ZSgpfSxlPT57dC5uZXh0KFJsLmNyZWF0ZUVycm9yKGUpKSx0LmNvbXBsZXRlKCl9KSl9KSkucGlwZShMKGQ9Pih7ZWZmZWN0Om5bb10sbm90aWZpY2F0aW9uOmQscHJvcGVydHlOYW1lOm8sc291cmNlTmFtZTppLHNvdXJjZUluc3RhbmNlOm59KSkpfSk7cmV0dXJuIEp0KC4uLnIpfShlLG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBkNChuLCJuZ3J4T25SdW5FZmZlY3RzIil9KGUpP2UubmdyeE9uUnVuRWZmZWN0cyhpKTppfX0odGhpcy5lcnJvckhhbmRsZXIsdGhpcy5lZmZlY3RzRXJyb3JIYW5kbGVyKShvKSksTChvPT4oZnVuY3Rpb24obix0KXtpZigiTiI9PT1uLm5vdGlmaWNhdGlvbi5raW5kKXtsZXQgZT1uLm5vdGlmaWNhdGlvbi52YWx1ZTshZnVuY3Rpb24obil7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIG4mJm4mJm4udHlwZSYmInN0cmluZyI9PXR5cGVvZiBuLnR5cGV9KGUpJiZ0LmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRWZmZWN0ICR7ZnVuY3Rpb24oe3Byb3BlcnR5TmFtZTpuLHNvdXJjZUluc3RhbmNlOnQsc291cmNlTmFtZTplfSl7bGV0IGk9ImZ1bmN0aW9uIj09dHlwZW9mIHRbbl07cmV0dXJuYCIke2V9LiR7U3RyaW5nKG4pfSR7aT8iKCkiOiIifSJgfShuKX0gZGlzcGF0Y2hlZCBhbiBpbnZhbGlkIGFjdGlvbjogJHtmdW5jdGlvbihuKXt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pfWNhdGNoe3JldHVybiBufX0oZSl9YCkpfX0obyx0aGlzLmVycm9ySGFuZGxlciksby5ub3RpZmljYXRpb24pKSxZZShvPT4iTiI9PT1vLmtpbmQmJm51bGwhPW8udmFsdWUpLGVuKChuLHQpPT57bi5zdWJzY3JpYmUoanQodCxlPT5iTihlLHQpKSl9KSk7cmV0dXJuIEp0KGksZS5waXBlKFF0KDEpLFllKHcyZSksTChvPT5vLm5ncnhPbkluaXRFZmZlY3RzKCkpKSl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUXMpLGooZjJlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gUzJlKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gZDQobiwibmdyeE9uSWRlbnRpZnlFZmZlY3RzIil9KG4pP24ubmdyeE9uSWRlbnRpZnlFZmZlY3RzKCk6IiJ9dmFyIExKPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmVmZmVjdFNvdXJjZXM9ZSx0aGlzLnN0b3JlPWksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGx9Z2V0IGlzU3RhcnRlZCgpe3JldHVybiEhdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufXN0YXJ0KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9ufHwodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPXRoaXMuZWZmZWN0U291cmNlcy50b0FjdGlvbnMoKS5zdWJzY3JpYmUodGhpcy5zdG9yZSkpfW5nT25EZXN0cm95KCl7dGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uJiYodGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5lZmZlY3RzU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKE5KKSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksQko9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXt0aGlzLnNvdXJjZXM9ZSxpLnN0YXJ0KCksby5mb3JFYWNoKGM9PmUuYWRkRWZmZWN0cyhjKSksci5kaXNwYXRjaCh7dHlwZTpGSn0pfWFkZEVmZmVjdHMoZSl7dGhpcy5zb3VyY2VzLmFkZEVmZmVjdHMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooTkopLGooTEopLGooQ2UpLGooT0opLGooTU0sOCksaih3QSw4KSxqKFJKLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksVDJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7aS5mb3JFYWNoKHM9PnMuZm9yRWFjaChhPT5lLmFkZEVmZmVjdHMoYSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihCSiksaihrSiksaihNTSw4KSxqKHdBLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCkscm89KCgpPT57Y2xhc3MgbntzdGF0aWMgZm9yRmVhdHVyZShlPVtdKXtyZXR1cm57bmdNb2R1bGU6VDJlLHByb3ZpZGVyczpbZSx7cHJvdmlkZTpESixtdWx0aTohMCx1c2VWYWx1ZTplfSx7cHJvdmlkZTpTQSxtdWx0aTohMCx1c2VWYWx1ZTpbXX0se3Byb3ZpZGU6a0osbXVsdGk6ITAsdXNlRmFjdG9yeTpBSixkZXBzOltYbixESixTQV19XX19c3RhdGljIGZvclJvb3QoZT1bXSl7cmV0dXJue25nTW9kdWxlOkJKLHByb3ZpZGVyczpbZSx7cHJvdmlkZTpjNCx1c2VWYWx1ZTpbZV19LHtwcm92aWRlOlJKLHVzZUZhY3Rvcnk6QTJlLGRlcHM6W1tMSixuZXcgbnMsbmV3IHRsXSxbYzQsbmV3IHczXV19LHtwcm92aWRlOlNBLG11bHRpOiEwLHVzZVZhbHVlOltdfSx7cHJvdmlkZTpPSix1c2VGYWN0b3J5OkFKLGRlcHM6W1huLGM0LFNBXX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIEFKKG4sdCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpLnB1c2goLi4ucik7Zm9yKGxldCByIG9mIGUpaS5wdXNoKC4uLnIpO3JldHVybiBmdW5jdGlvbihuLHQpe3JldHVybiB0Lm1hcChlPT5uLmdldChlKSl9KG4saSl9ZnVuY3Rpb24gQTJlKG4sdCl7aWYoKDEhPT10Lmxlbmd0aHx8MCE9PXRbMF0ubGVuZ3RoKSYmbil0aHJvdyBuZXcgVHlwZUVycm9yKCJFZmZlY3RzTW9kdWxlLmZvclJvb3QoKSBjYWxsZWQgdHdpY2UuIEZlYXR1cmUgbW9kdWxlcyBzaG91bGQgdXNlIEVmZmVjdHNNb2R1bGUuZm9yRmVhdHVyZSgpIGluc3RlYWQuIik7cmV0dXJuImd1YXJkZWQifXZhciBoaT0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5LTk9XTj0wXT0iVU5LTk9XTiIsbltuLkVYUEVSSU1FTlRTPTFdPSJFWFBFUklNRU5UUyIsbltuLkVYUEVSSU1FTlQ9Ml09IkVYUEVSSU1FTlQiLG5bbi5DT01QQVJFX0VYUEVSSU1FTlQ9M109IkNPTVBBUkVfRVhQRVJJTUVOVCIsbltuLk5PVF9TRVQ9NF09Ik5PVF9TRVQiLG5bbi5GTEFHUz01XT0iRkxBR1MifShoaXx8KGhpPXt9KSksaGkpKSgpLFRBPSJkZWZhdWx0RXhwZXJpbWVudElkIixZXz0oKCk9PihmdW5jdGlvbihuKXtuW24uRVhQRVJJTUVOVFM9MF09IkVYUEVSSU1FTlRTIixuW24uREFTSEJPQVJEPTFdPSJEQVNIQk9BUkQifShZX3x8KFlfPXt9KSksWV8pKSgpO2Z1bmN0aW9uIFNNKG4pe3JldHVybiBuLnNwbGl0KCIsIikubWFwKHQ9PntsZXQgZT10LmluZGV4T2YoIjoiKTtpZihlPDApdGhyb3cgbmV3IEVycm9yKGBFeHBlY3QgY29sb24gZGVsaW1pdGluZyBuYW1lIGFuZCBJRDogJHt0fWApO2xldCBpPXQuc2xpY2UoMCxlKSxyPXQuc2xpY2UoZSsxKTtpZighcil0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdCBpZCB0byBiZSBub24tZmFsc3k6ICR7dH1gKTtyZXR1cm57bmFtZTppLGlkOnJ9fSl9ZnVuY3Rpb24gVkoobil7cmV0dXJuIG4ubWFwKCh7YWxpYXM6dCxpZDplfSk9PmAke3R9OiR7ZX1gKS5qb2luKCIsIil9ZnVuY3Rpb24gd00obix0KXtzd2l0Y2gobil7Y2FzZSBoaS5FWFBFUklNRU5UOnJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZXhwZXJpbWVudElkIik/W3QuZXhwZXJpbWVudElkXTpbVEFdO2Nhc2UgaGkuQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBTTSh0LmV4cGVyaW1lbnRJZHMpLm1hcCgoe2lkOml9KT0+aSk7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gUHMobix0KXtpZighbnx8IXQpcmV0dXJuIG49PT10O2lmKG4ucm91dGVLaW5kIT09dC5yb3V0ZUtpbmQpcmV0dXJuITE7bGV0IGU9d00obi5yb3V0ZUtpbmQsbi5wYXJhbXMpLGk9d00odC5yb3V0ZUtpbmQsdC5wYXJhbXMpO2lmKG51bGw9PT1lfHxudWxsPT09aSlyZXR1cm4gZT09PWk7aWYoZS5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMTtsZXQgcj1pLnNvcnQoKTtyZXR1cm4gZS5zb3J0KCkuZXZlcnkoKG8scyk9PnJbc109PT1vKX1mdW5jdGlvbiBwNChuKXtzd2l0Y2gobil7Y2FzZSBoaS5FWFBFUklNRU5UUzpyZXR1cm4gWV8uRVhQRVJJTUVOVFM7Y2FzZSBoaS5FWFBFUklNRU5UOmNhc2UgaGkuQ09NUEFSRV9FWFBFUklNRU5UOnJldHVybiBZXy5EQVNIQk9BUkQ7Y2FzZSBoaS5VTktOT1dOOmNhc2UgaGkuTk9UX1NFVDpjYXNlIGhpLkZMQUdTOnJldHVybiBudWxsfX1mdW5jdGlvbiBEQShuLHQsZSl7bGV0IGk9cDQobik7cmV0dXJuIG51bGwhPT1pJiYhZS5zb21lKHI9PnIuZGVlcExpbmtHcm91cD09PWkmJnIubmFtZXNwYWNlSWQ9PT10KX12YXIgakpfZ2V0SHJlZj0oKT0+d2luZG93LmxvY2F0aW9uLmhyZWYsTm09KCgpPT57Y2xhc3MgbntnZXRIcmVmKCl7cmV0dXJuIGpKX2dldEhyZWYoKX1nZXRTZWFyY2goKXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLGk9W107cmV0dXJuIGUuZm9yRWFjaCgocixvKT0+e2kucHVzaCh7a2V5Om8sdmFsdWU6cn0pfSksaX1nZXRIYXNoKCl7cmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5oYXNofWdldFBhdGgoKXtyZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWdldEhpc3RvcnlTdGF0ZSgpe3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZX1yZXBsYWNlU3RhdGVVcmwoZSl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfXB1c2hTdGF0ZVVybChlKXt3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwiIixlKX1yZXBsYWNlU3RhdGVEYXRhKGUpe3dpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShlLCIiKX1vblBvcFN0YXRlKCl7cmV0dXJuIF9pKHdpbmRvdywicG9wc3RhdGUiKS5waXBlKEwoZT0+KHtwYXRobmFtZTp0aGlzLmdldFBhdGgoKSxzdGF0ZTplLnN0YXRlfSkpKX1nZXRSZXNvbHZlZFBhdGgoZSl7cmV0dXJuIG5ldyBVUkwoZSxqSl9nZXRIcmVmKCkpLnBhdGhuYW1lfWdldEZ1bGxQYXRoKGUsaSxyKXtsZXQgbz10aGlzLmdldFJlc29sdmVkUGF0aChlKSxzPSIiO3JldHVybiBpLmxlbmd0aCYmKHM9Ij8iK2Z1bmN0aW9uKG4pe2xldCB0PW5ldyBVUkxTZWFyY2hQYXJhbXM7Zm9yKGxldHtrZXk6ZSx2YWx1ZTppfW9mIG4pdC5hcHBlbmQoZSxpKTtyZXR1cm4gdH0oaSkudG9TdHJpbmcoKSksYCR7b30ke3N9JHtyP3RoaXMuZ2V0SGFzaCgpOiIifWB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLExtPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5hcHBSb290PXRoaXMuZ2V0QXBwUm9vdEZyb21NZXRhRWxlbWVudChlKX1nZXRBcHBSb290RnJvbU1ldGFFbGVtZW50KGUpe2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQgbWV0YVtuYW1lPSJ0Yi1yZWxhdGl2ZS1yb290Il0nKTtpZighaSlyZXR1cm4iLyI7bGV0e3BhdGhuYW1lOnJ9PW5ldyBVUkwoaS5jb250ZW50LGUuZ2V0SHJlZigpKTtyZXR1cm4gci5yZXBsYWNlKC9cLyokLywiLyIpfWdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoZSl7cmV0dXJuIHRoaXMuYXBwUm9vdC5zbGljZSgwLC0xKStlfWdldEFwcFJvb3RsZXNzUGF0aG5hbWUoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCh0aGlzLmFwcFJvb3QpPyIvIitlLnNsaWNlKHRoaXMuYXBwUm9vdC5sZW5ndGgpOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooTm0pKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxYXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltObV19KSxufSkoKSxRXz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltMbV0saW1wb3J0czpbWF9dfSksbn0pKCksbTQ9bmV3IHBlKCJbQXBwIFJvdXRpbmddIERpcnR5IFVwZGF0ZXMiKSxBQT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHlVcGRhdGVzU2VsZWN0b3JGYWN0b3JpZXM9ZX1nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKXtyZXR1cm4gdGhpcy5kaXJ0eVVwZGF0ZXNTZWxlY3RvckZhY3Rvcmllcz8/W119c3RhdGljIHJlZ2lzdGVyRGlydHlVcGRhdGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6bTQsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG00LDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksR0o9YmUoIltBcHAgUm91dGluZ10gRGlzY2FyZGluZyBVbnNhdmVkIFVwZGF0ZXMiKSxLXz1iZSgiW0FwcCBSb3V0aW5nXSBTdGF0ZSBSZWh5ZHJhdGVkIEZyb20gVXJsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUE9YmUoIltBcHAgUm91dGluZ10gUm91dGUgQ29uZmlnIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGc0PWJlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW9uIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBBPWJlKCJbQXBwIFJvdXRpbmddIEluIEFwcCBOYXZpZ2F0aW5nIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSmw9YmUoIltBcHAgUm91dGluZ10gSW4gQXBwIE5hdmlnYXRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLF80PW5ldyBwZSgiW0FwcCBSb3V0aW5nXSBQcm9ncmFtbWF0aWNhbCBOYXZpZ2F0aW9uIFByb3ZpZGVyIiksUkE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnByb3ZpZGVycz1uZXcgTWFwO2ZvcihsZXQgaSBvZiBlfHxbXSl7aWYodGhpcy5wcm92aWRlcnMuaGFzKGkuYWN0aW9uQ3JlYXRvci50eXBlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgIiR7aS5hY3Rpb25DcmVhdG9yLnR5cGV9IiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIG5hdi4gTXVsdGlwbGUgbmF2aWdhdGlvbnMgb24gc2FtZSBraWNrIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChpLmFjdGlvbkNyZWF0b3IudHlwZSxpLmxhbWJkYSl9fWdldE5hdmlnYXRpb24oZSl7bGV0IGk9dGhpcy5wcm92aWRlcnMuZ2V0KGUudHlwZSk7cmV0dXJuIGk/aShlKTpudWxsfXN0YXRpYyByZWdpc3RlclByb2dyYW1tYXRpY2FsTmF2aWdhdGlvbihlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOl80LG11bHRpOiEwLHVzZUZhY3Rvcnk6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihfNCw4KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpO2Z1bmN0aW9uIEVNKG4pe3JldHVybiBudWxsIT1uLnJvdXRlS2luZH1mdW5jdGlvbiBiNChuKXtyZXR1cm4gWEoobikubWFwKGU9PntsZXQgaT1lLnN0YXJ0c1dpdGgoIjoiKTtyZXR1cm4gaT97cGF0aFBhcnQ6ZSxpc1BhcmFtOiEwLHBhcmFtTmFtZTplLnNsaWNlKDEpfTp7cGF0aFBhcnQ6ZSxpc1BhcmFtOml9fSl9dmFyIFpfPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsaWRhdGVDb25maWcodCksdGhpcy5wYXRoRnJhZ21lbnRzPWI0KHQucGF0aCksdGhpcy5wYXRoTWF0Y2hlcnM9dGhpcy5nZXRQYXRoTWF0Y2hlcnModGhpcy5wYXRoRnJhZ21lbnRzKX1zdGF0aWMgZ2V0TWF0Y2hlcih0KXtyZXR1cm4gRU0odCk/bmV3IFRNKHQpOmZ1bmN0aW9uKG4pe3JldHVybiB2b2lkIDAhPT1uLnJlZGlyZWN0aW9uUGF0aH0odCk/bmV3IHY0KHQpOm5ldyB5NCh0KX12YWxpZGF0ZUNvbmZpZyh7cGF0aDp0fSl7aWYoIXQuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBzaG91bGQgc3RhcnQgd2l0aCAnLycuICR7dH1gKTtsZXQgZT0wO2Zvcig7KGU9dC5pbmRleE9mKCI6IixlKzEpKT49MDspe2lmKCIvIiE9PXRbZS0xXSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgY29uZmlnLnBhdGggcGFyYW1ldGVyIHNob3VsZCBjb21lIGFmdGVyICcvJy4gJHt0fWApO2lmKHZvaWQgMD09PXRbZSsxXXx8Ii8iPT09dFtlKzFdKXRocm93IG5ldyBSYW5nZUVycm9yKGBjb25maWcucGF0aCBwYXJhbWV0ZXIgc2hvdWxkIGhhdmUgbm9uLWVtcHR5IG5hbWUuICR7dH1gKX19Z2V0UGF0aE1hdGNoZXJzKHQpe3JldHVybiB0Lm1hcChlPT57bGV0e3BhdGhQYXJ0Oml9PWU7cmV0dXJuIGUuaXNQYXJhbT9yPT4oe2lzUGFyYW1QYXRoUGFydDohMCxwYXJ0TWF0Y2hlZDohMCxwYXJhbU5hbWU6ZS5wYXJhbU5hbWUscGFyYW1WYWx1ZTpyfSk6cj0+KHtpc1BhcmFtUGF0aFBhcnQ6ITEscGFydE1hdGNoZWQ6cj09PWl9KX0pfW1hdGNoKHQpe2xldCBlPXt9O2lmKHRoaXMucGF0aE1hdGNoZXJzLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybntyZXN1bHQ6ITF9O2xldCBpPTA7Zm9yKGxldCByIG9mIHRoaXMucGF0aE1hdGNoZXJzKXtsZXQgcz1yKHRbaSsrXSk7aWYoIXMucGFydE1hdGNoZWQpcmV0dXJue3Jlc3VsdDohMX07cy5pc1BhcmFtUGF0aFBhcnQmJihlPXsuLi5lLFtzLnBhcmFtTmFtZV06cy5wYXJhbVZhbHVlfSl9cmV0dXJue3Jlc3VsdDohMCxwYXJhbXM6ZSxwYXRoUGFydHM6dCxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1tYXRjaEJ5UGFyYW1zKHQpe3JldHVybntyZXN1bHQ6ITAscGFyYW1zOnQscGF0aFBhcnRzOnRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucGF0aEZyYWdtZW50cyx0KSxpc1JlZGlyZWN0aW9uOiExLHJlZGlyZWN0aW9uUXVlcnlQYXJhbXM6dm9pZCAwfX1yZXByb2plY3RQYXRoQnlQYXJhbXModCxlKXtsZXQgaT1bXTtmb3IobGV0IHIgb2YgdClpZihyLmlzUGFyYW0pe2xldHtwYXJhbU5hbWU6b309cjtpZighZS5oYXNPd25Qcm9wZXJ0eShvKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgRmFpbGVkIHRvIHJlcHJvamVjdCBwYXJhbWV0ZXIuICIke299IiBwYXJhbWV0ZXIgc2hvdWxkIGJlIHByZXNlbnQuYCk7aS5wdXNoKGVbb10pfWVsc2UgaS5wdXNoKHIucGF0aFBhcnQpO3JldHVybiBpfX0sVE09Y2xhc3MgZXh0ZW5kcyBaX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH19LHY0PWNsYXNzIGV4dGVuZHMgWl97Y29uc3RydWN0b3IodCl7c3VwZXIodCksdGhpcy5kZWZpbml0aW9uPXQsdGhpcy5yZWRpcmVjdGlvbkZyYWdtZW50cz1iNCh0LnJlZGlyZWN0aW9uUGF0aCl9bWF0Y2godCl7bGV0IGU9c3VwZXIubWF0Y2godCk7aWYoIWUucmVzdWx0KXJldHVybiBlO2xldCBpPXRoaXMucmVwcm9qZWN0UGF0aEJ5UGFyYW1zKHRoaXMucmVkaXJlY3Rpb25GcmFnbWVudHMsZS5wYXJhbXMpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczp2b2lkIDB9fX0seTQ9Y2xhc3MgZXh0ZW5kcyBaX3tjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLmRlZmluaXRpb249dH1tYXRjaCh0KXtsZXQgZT1zdXBlci5tYXRjaCh0KTtpZighZS5yZXN1bHQpcmV0dXJuIGU7bGV0e3BhdGhQYXJ0czppLHF1ZXJ5UGFyYW1zOnJ9PXRoaXMuZGVmaW5pdGlvbi5yZWRpcmVjdG9yKHQpO3JldHVybntyZXN1bHQ6ITAscGFyYW1zOmUucGFyYW1zLHBhdGhQYXJ0czppLGlzUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25RdWVyeVBhcmFtczpyfX19LERNPWNsYXNze2NvbnN0cnVjdG9yKHQsZT0zKXtpZih0aGlzLm1heFJlZGlyZWN0aW9uPWUsZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJtYXhSZWRpcmVjdGlvbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlIG51bWJlciIpO3RoaXMudmFsaWRhdGVSb3V0ZUNvbmZpZ3ModCksdGhpcy5kZWZhdWx0Um91dGVDb25maWc9bnVsbCx0aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycz1uZXcgTWFwLHRoaXMuY29uZmlnTWF0Y2hlcnM9W107Zm9yKGxldCBpIG9mIHQpe2xldCByPVpfLmdldE1hdGNoZXIoaSk7dGhpcy5jb25maWdNYXRjaGVycy5wdXNoKHIpLHIgaW5zdGFuY2VvZiBUTSYmKHRoaXMucm91dGVLaW5kVG9Db25jcmV0ZUNvbmZpZ01hdGNoZXJzLnNldChyLmRlZmluaXRpb24ucm91dGVLaW5kLHIpLHIuZGVmaW5pdGlvbi5kZWZhdWx0Um91dGUmJih0aGlzLmRlZmF1bHRSb3V0ZUNvbmZpZz1yKSl9fXZhbGlkYXRlUm91dGVDb25maWdzKHQpe2xldCBlPXQuZmlsdGVyKEVNKSxpPWUuZmlsdGVyKG89Pm8uZGVmYXVsdFJvdXRlKTtpZihpLmxlbmd0aD4xKXtsZXQgbz1pLm1hcCgoe3BhdGg6c30pPT5zKS5qb2luKCIsICIpO3Rocm93IG5ldyBSYW5nZUVycm9yKGBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBkZWZhdWx0Um91dGVzLiAke299YCl9aWYoMT09PWkubGVuZ3RoKXtsZXR7cGF0aDpvfT1pWzBdO2lmKEJvb2xlYW4oYjQobykuZmluZCgoe2lzUGFyYW06YX0pPT5hKSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEEgZGVmYXVsdFJvdXRlIGNhbm5vdCBoYXZlIGFueSBwYXJhbXMuICR7b31gKX1sZXQgcj1uZXcgU2V0O2ZvcihsZXR7cm91dGVLaW5kOm99b2YgZSl7aWYoci5oYXMobykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE11bHRpcGxlIHJvdXRlIGNvbmZpZ3VyYXRpb24gZm9yIGtpbmQ6ICR7b30uIENvbmZpZ3VyYXRpb25zIHNob3VsZCBoYXZlIHVuaXF1ZSByb3V0ZUtpbmRzYCk7ci5hZGQobyl9fWdlbmVyYXRlQWN0aW9uKHQsZSl7cmV0dXJuIHQuYWN0aW9uR2VuZXJhdG9yP3QuYWN0aW9uR2VuZXJhdG9yKGUpOm51bGx9bWF0Y2godCl7aWYoIXQucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBSYW5nZUVycm9yKCdOYXZpZ2F0aW9uIGhhcyB0byBtYWRlIHdpdGggcGF0aG5hbWUgdGhhdCBzdGFydHMgd2l0aCAiLyInKTtsZXQgbyxlPVhKKHQucGF0aG5hbWUpLGk9MCxyPSExO2Zvcig7Oyl7bGV0IHM9ITE7Zm9yKGxldCBhIG9mIHRoaXMuY29uZmlnTWF0Y2hlcnMpe2xldCBsPWEubWF0Y2goZSk7aWYobC5yZXN1bHQpe3M9ITA7bGV0e3BhcmFtczpjLHBhdGhQYXJ0czp1LGlzUmVkaXJlY3Rpb246ZH09bDtpZihkKXtlPXUscj0hMCxvPWwucmVkaXJlY3Rpb25RdWVyeVBhcmFtczticmVha31pZighKGEgaW5zdGFuY2VvZiBUTSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk5vIGNvbmNyZXRlIHJvdXRlIGRlZmluaXRpb24gYG1hdGNoYCByZXR1cm4gcmVkaXJlY3Rpb24iKTtsZXR7ZGVmaW5pdGlvbjpwfT1hLGg9e3JvdXRlS2luZDpwLnJvdXRlS2luZCxwYXJhbXM6YyxwYXRobmFtZTpZSih1KSxkZWVwTGlua1Byb3ZpZGVyOnAuZGVlcExpbmtQcm92aWRlcnx8bnVsbCxhY3Rpb246dGhpcy5nZW5lcmF0ZUFjdGlvbihwLHUpfTtyZXR1cm4gcj97Li4uaCxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6b306ey4uLmgsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExfX19aWYociYmaSsrLCFzfHxpPnRoaXMubWF4UmVkaXJlY3Rpb24pYnJlYWt9aWYoaT50aGlzLm1heFJlZGlyZWN0aW9uKXRocm93IG5ldyBFcnJvcihgUG90ZW50aWFsIHJlZGlyZWN0aW9uIGxvb3AgKHJlZGlyZWN0aW5nIG1vcmUgdGhhbiAke3RoaXMubWF4UmVkaXJlY3Rpb259IHRpbWVzLiBQbGVhc2UgZG8gbm90IGhhdmUgY3ljbGVzIGluIHRoZSByb3V0ZXMuYCk7aWYodGhpcy5kZWZhdWx0Um91dGVDb25maWcpe2xldHtkZWZpbml0aW9uOnN9PXRoaXMuZGVmYXVsdFJvdXRlQ29uZmlnO3JldHVybntyb3V0ZUtpbmQ6cy5yb3V0ZUtpbmQsZGVlcExpbmtQcm92aWRlcjpzLmRlZXBMaW5rUHJvdmlkZXI/P251bGwscGF0aG5hbWU6cy5wYXRoLHBhcmFtczp7fSxvcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb246ITAscmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM6dm9pZCAwLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKHMsZSl9fXJldHVybiBudWxsfW1hdGNoQnlSb3V0ZUtpbmQodCxlKXtsZXQgaT10aGlzLnJvdXRlS2luZFRvQ29uY3JldGVDb25maWdNYXRjaGVycy5nZXQodCk7aWYoIWkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFJlcXVpcmVzIGNvbmZpZ3VyYXRpb24gZm9yIHJvdXRlS2luZDogJHt0fWApO2xldCByPWkubWF0Y2hCeVBhcmFtcyhlKTtyZXR1cm57cm91dGVLaW5kOnQscGFyYW1zOmUscGF0aG5hbWU6WUooci5wYXRoUGFydHMpLGRlZXBMaW5rUHJvdmlkZXI6aS5kZWZpbml0aW9uLmRlZXBMaW5rUHJvdmlkZXJ8fG51bGwsb3JpZ2luYXRlRnJvbVJlZGlyZWN0aW9uOiExLGFjdGlvbjp0aGlzLmdlbmVyYXRlQWN0aW9uKGkuZGVmaW5pdGlvbixyLnBhdGhQYXJ0cyl9fX07ZnVuY3Rpb24gWEoobil7cmV0dXJuIG4uc3BsaXQoIi8iKS5zbGljZSgxKX1mdW5jdGlvbiBZSihuKXtyZXR1cm4iLyIrbi5qb2luKCIvIil9dmFyIHg0PW5ldyBwZSgiW0FwcCBSb3V0aW5nXSBSb3V0ZSBDb25maWciKSxxYz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2lmKHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudD1uZXcgTWFwLCFlKXJldHVybiB2b2lkKHRoaXMucm91dGVDb25maWdzPW5ldyBETShbXSkpO2xldCBpPVtdO2ZvcihsZXQgciBvZiBlKWZvcihsZXQgbyBvZiByKWkucHVzaChvKTt0aGlzLnJvdXRlQ29uZmlncz1uZXcgRE0oaSksaS5mb3JFYWNoKHI9PntFTShyKSYmdGhpcy5yb3V0ZUtpbmRUb05nQ29tcG9uZW50LnNldChyLnJvdXRlS2luZCxyLm5nQ29tcG9uZW50KX0pfWdldFJlZ2lzdGVyZWRSb3V0ZUtpbmRzKCl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5rZXlzKCl9Z2V0Um91dGVDb25maWdzKCl7cmV0dXJuIHRoaXMucm91dGVDb25maWdzfWdldE5nQ29tcG9uZW50QnlSb3V0ZUtpbmQoZSl7cmV0dXJuIHRoaXMucm91dGVLaW5kVG9OZ0NvbXBvbmVudC5nZXQoZSl8fG51bGx9c3RhdGljIHJlZ2lzdGVyUm91dGVzKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6eDQsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHg0LDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksT0E9ImFwcF9yb3V0aW5nIixBTT1NcihPQSksUmE9SihBTSxuPT5uLmFjdGl2ZVJvdXRlKSxaSj1KKEFNLG49Pm4ubmV4dFJvdXRlKSxKSj1KKEFNLG49Pm4uYWN0aXZlTmFtZXNwYWNlSWQpLCRKPUooQU0sbj0+bi5yZWh5ZHJhdGVkRGVlcExpbmtzKSxlJD1KKEFNLG49Pm4ucmVnaXN0ZXJlZFJvdXRlS2V5cykscXU9SihSYSxuPT5uP24ucm91dGVLaW5kOmhpLk5PVF9TRVQpLE00PUooUmEsbj0+bj9uLnBhcmFtczp7fSksV289SihxdSxNNCwobix0KT0+d00obix0KSksWXU9KEoocXUsTTQsKG4sdCk9PntpZihuIT09aGkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1TTShuLmV4cGVyaW1lbnRJZHMpO2ZvcihsZXR7aWQ6aSxuYW1lOnJ9b2YgZSlyJiZ0LnNldChpLHIpO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pLEoocXUsTTQsKG4sdCk9PntpZihuIT09aGkuQ09NUEFSRV9FWFBFUklNRU5UKXJldHVybnt9O2xldCBpPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBNYXAsZT1TTShuLmV4cGVyaW1lbnRJZHMpLGk9MDtmb3IobGV0e2lkOnIsbmFtZTpvfW9mIGUpaSsrLCF0LmhhcyhyKSYmdC5zZXQocix7YWxpYXNUZXh0Om8sYWxpYXNOdW1iZXI6aX0pO3JldHVybiB0fSh0KTtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGkuZW50cmllcygpKX0pKSx3ND1iZSgiW0FwcCBSb3V0aW5nXSBFZmZlY3RzIEluaXQiKSxzYT0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5DSEFOR0VEPTBdPSJVTkNIQU5HRUQiLG5bbi5ORVc9MV09Ik5FVyIsbltuLkZST01fSElTVE9SWT0yXT0iRlJPTV9ISVNUT1JZIn0oc2F8fChzYT17fSkpLHNhKSkoKSx0JD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5sb2NhdGlvbj1yLHRoaXMuZGlydHlVcGRhdGVzUmVnaXN0cnk9byx0aGlzLnJlZ2lzdHJ5PXMsdGhpcy5wcm9ncmFtbWF0aWNhbE5hdk1vZHVsZT1hLHRoaXMuYXBwUm9vdFByb3ZpZGVyPWwsdGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkPXRoaXMuYWN0aW9ucyQucGlwZShpaShnNCksTChjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUuc3RhcnRzV2l0aCgiLyIpP3RoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QoYy5wYXRobmFtZSk6dGhpcy5sb2NhdGlvbi5nZXRSZXNvbHZlZFBhdGgoYy5wYXRobmFtZSksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMSxyZXBsYWNlU3RhdGU6Yy5yZXBsYWNlU3RhdGU/PyExLG5hbWVzcGFjZVVwZGF0ZTp7b3B0aW9uOmMucmVzZXROYW1lc3BhY2VkU3RhdGU/c2EuTkVXOnNhLlVOQ0hBTkdFRH19fSkpKSx0aGlzLmJvb3RzdHJhcFJlZHVjZXJzJD1jcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGlpKHc0KSxMKCgpPT5JQSh7cm91dGVLaW5kczpuZXcgU2V0KHRoaXMucmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJvdXRlS2luZHMoKSl9KSkpKSx0aGlzLm9uSW5pdCQ9dGhpcy5hY3Rpb25zJC5waXBlKGlpKHc0KSkucGlwZShPbCgwKSxMKCgpPT57bGV0IGM9dGhpcy5sb2NhdGlvbi5nZXRIaXN0b3J5U3RhdGUoKT8ubmFtZXNwYWNlSWQsdT12b2lkIDA9PT1jP3tvcHRpb246c2EuTkVXfTp7b3B0aW9uOnNhLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjfTtyZXR1cm57cGF0aG5hbWU6dGhpcy5sb2NhdGlvbi5nZXRQYXRoKCksb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnV9fX0pKSx0aGlzLm9uUG9wU3RhdGUkPXRoaXMubG9jYXRpb24ub25Qb3BTdGF0ZSgpLnBpcGUoTChjPT4oe3BhdGhuYW1lOmMucGF0aG5hbWUsb3B0aW9uczp7YnJvd3NlckluaXRpYXRlZDohMCxyZXBsYWNlU3RhdGU6ITAsbmFtZXNwYWNlVXBkYXRlOnZvaWQgMD09PWMuc3RhdGU/Lm5hbWVzcGFjZUlkP3tvcHRpb246c2EuVU5DSEFOR0VEfTp7b3B0aW9uOnNhLkZST01fSElTVE9SWSxuYW1lc3BhY2VJZDpjLnN0YXRlLm5hbWVzcGFjZUlkfX19KSkpLHRoaXMudXNlckluaXROYXZSb3V0ZSQ9SnQodGhpcy5vbk5hdmlnYXRpb25SZXF1ZXN0ZWQkLHRoaXMub25Jbml0JCx0aGlzLm9uUG9wU3RhdGUkKS5waXBlKEwoYz0+e2lmKCFjLnBhdGhuYW1lLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoYFtBcHAgcm91dGluZ10gcGF0aG5hbWUgbXVzdCBzdGFydCB3aXRoICcvJy4gR290OiAke2MucGF0aG5hbWV9YCk7cmV0dXJuey4uLmMscGF0aG5hbWU6dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QXBwUm9vdGxlc3NQYXRobmFtZShjLnBhdGhuYW1lKX19KSxMKGM9Pih7cm91dGVNYXRjaDp0aGlzLnJvdXRlQ29uZmlncy5tYXRjaChjKSxvcHRpb25zOmMub3B0aW9uc30pKSksdGhpcy5wcm9ncmFtbWF0aWNhbE5hdlJvdXRlJD10aGlzLmFjdGlvbnMkLnBpcGUoTChjPT50aGlzLnByb2dyYW1tYXRpY2FsTmF2TW9kdWxlLmdldE5hdmlnYXRpb24oYykpLFllKGM9Pm51bGwhPT1jKSxMKGM9PntsZXQgZix1PWMse3JlcGxhY2VTdGF0ZTpkPSExLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnAscm91dGVLaW5kOmh9PXU7cmV0dXJuIGY9dS5yb3V0ZUtpbmQ9PT1oaS5DT01QQVJFX0VYUEVSSU1FTlQ/e2V4cGVyaW1lbnRJZHM6VkoodS5yb3V0ZVBhcmFtcy5hbGlhc0FuZEV4cGVyaW1lbnRJZHMpfTp1LnJvdXRlUGFyYW1zLHtyZXBsYWNlU3RhdGU6ZCxyb3V0ZUtpbmQ6aCxyb3V0ZVBhcmFtczpmLHJlc2V0TmFtZXNwYWNlZFN0YXRlOnB9fSksTCgoe3JlcGxhY2VTdGF0ZTpjLHJvdXRlS2luZDp1LHJvdXRlUGFyYW1zOmQscmVzZXROYW1lc3BhY2VkU3RhdGU6cH0pPT4oe3JvdXRlTWF0Y2g6dGhpcy5yb3V0ZUNvbmZpZ3M/dGhpcy5yb3V0ZUNvbmZpZ3MubWF0Y2hCeVJvdXRlS2luZCh1LGQpOm51bGwsb3B0aW9uczp7cmVwbGFjZVN0YXRlOmMsYnJvd3NlckluaXRpYXRlZDohMSxuYW1lc3BhY2VVcGRhdGU6e29wdGlvbjpwP3NhLk5FVzpzYS5VTkNIQU5HRUR9fX0pKSksdGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJD1KdCh0aGlzLnVzZXJJbml0TmF2Um91dGUkLHRoaXMucHJvZ3JhbW1hdGljYWxOYXZSb3V0ZSQpLnBpcGUoWWUoKHtyb3V0ZU1hdGNoOmN9KT0+Qm9vbGVhbihjKSksTCgoe3JvdXRlTWF0Y2g6YyxvcHRpb25zOnV9KT0+KHtyb3V0ZU1hdGNoOmMsb3B0aW9uczp1fSkpKSx0aGlzLm5hdmlnYXRlJD1jcigoKT0+dGhpcy52YWxpZGF0ZWRSb3V0ZU1hdGNoJC5waXBlKFd0KHRoaXMuc3RvcmUuc2VsZWN0KFJhKSkseG4oKFtkLHBdKT0+e2xldCBoPW51bGwhPT1wJiZQcyhwLGQucm91dGVNYXRjaCksZj10aGlzLmRpcnR5VXBkYXRlc1JlZ2lzdHJ5LmdldERpcnR5VXBkYXRlc1NlbGVjdG9ycygpO3JldHVybiBofHwhZi5sZW5ndGg/WHQoZCk6bHIodGhpcy5kaXJ0eVVwZGF0ZXNSZWdpc3RyeS5nZXREaXJ0eVVwZGF0ZXNTZWxlY3RvcnMoKS5tYXAobT0+dGhpcy5zdG9yZS5zZWxlY3QobSkucGlwZShRdCgxKSkpKS5waXBlKEwobT0+dm9pZCAwIT09bVswXS5leHBlcmltZW50SWRzJiZtWzBdLmV4cGVyaW1lbnRJZHMubGVuZ3RoPjApLFllKG09PntpZihtKXtsZXQgeD13aW5kb3cuY29uZmlybSgiWW91IGhhdmUgdW5zYXZlZCBlZGl0cywgYXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2NhcmQgdGhlbT8iKTtyZXR1cm4geCYmdGhpcy5zdG9yZS5kaXNwYXRjaChHSigpKSx4fXJldHVybiEwfSksTCgoKT0+ZCkpfSksV3QodGhpcy5zdG9yZS5zZWxlY3QoJEopKSxrdCgoW3tyb3V0ZU1hdGNoOmQsb3B0aW9uczpwfSxoXSk9PntpZighcC5icm93c2VySW5pdGlhdGVkfHwhZC5kZWVwTGlua1Byb3ZpZGVyfHxwLm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1zYS5GUk9NX0hJU1RPUlkmJiFEQShkLnJvdXRlS2luZCxwLm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZCxoKSlyZXR1cm47bGV0IGY9ZC5vcmlnaW5hdGVGcm9tUmVkaXJlY3Rpb24mJmQucmVkaXJlY3Rpb25Pbmx5UXVlcnlQYXJhbXM/ZC5yZWRpcmVjdGlvbk9ubHlRdWVyeVBhcmFtczp0aGlzLmxvY2F0aW9uLmdldFNlYXJjaCgpLG09ZC5kZWVwTGlua1Byb3ZpZGVyLmRlc2VyaWFsaXplUXVlcnlQYXJhbXMoZik7dGhpcy5zdG9yZS5kaXNwYXRjaChLXyh7cm91dGVLaW5kOmQucm91dGVLaW5kLHBhcnRpYWxTdGF0ZTptfSkpfSksa3QoKFt7cm91dGVNYXRjaDpkfV0pPT57ZC5hY3Rpb24mJnRoaXMuc3RvcmUuZGlzcGF0Y2goZC5hY3Rpb24pfSksdWkoKFt7cm91dGVNYXRjaDpkLG9wdGlvbnM6cH1dKT0+bnVsbD09PWQuZGVlcExpbmtQcm92aWRlcj9YdCh7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6W10sb3B0aW9uczpwfSk6ZC5kZWVwTGlua1Byb3ZpZGVyLnNlcmlhbGl6ZVN0YXRlVG9RdWVyeVBhcmFtcyh0aGlzLnN0b3JlKS5waXBlKEwoKGgsZik9Pih7cm91dGU6e3JvdXRlS2luZDpkLnJvdXRlS2luZCxwYXJhbXM6ZC5wYXJhbXN9LHBhdGhuYW1lOmQucGF0aG5hbWUscXVlcnlQYXJhbXM6aCxvcHRpb25zOjA9PT1mP3A6ey4uLnAsbmFtZXNwYWNlVXBkYXRlOntvcHRpb246c2EuVU5DSEFOR0VEfSxyZXBsYWNlU3RhdGU6ITB9fSkpKSksa3QoKHtyb3V0ZTpkfSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFBBKHthZnRlcjpkfSkpfSksSHIoMCkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoUmEpKSxMKChbZCxwXSk9PntsZXQgaD1udWxsPT09cHx8bnVsbD09PWQucm91dGV8fFBzKHAsZC5yb3V0ZSk7cmV0dXJuey4uLmQscHJlc2VydmVIYXNoOmh9fSksa3QoKHtwcmVzZXJ2ZUhhc2g6ZCxwYXRobmFtZTpwLHF1ZXJ5UGFyYW1zOmgsb3B0aW9uczpmfSk9PnsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5wYXRobmFtZT09PXQucGF0aG5hbWUmJm4ucXVlcnlQYXJhbXMubGVuZ3RoPT09dC5xdWVyeVBhcmFtcy5sZW5ndGgmJm4ucXVlcnlQYXJhbXMuZXZlcnkoKGUsaSk9PntsZXQgcj10LnF1ZXJ5UGFyYW1zW2ldO3JldHVybiBlLmtleT09PXIua2V5JiZlLnZhbHVlPT09ci52YWx1ZX0pfSkoe3BhdGhuYW1lOnAscXVlcnlQYXJhbXM6aH0se3BhdGhuYW1lOnRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFwcFJvb3RsZXNzUGF0aG5hbWUodGhpcy5sb2NhdGlvbi5nZXRQYXRoKCkpLHF1ZXJ5UGFyYW1zOnRoaXMubG9jYXRpb24uZ2V0U2VhcmNoKCl9KXx8KGYucmVwbGFjZVN0YXRlP3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlVXJsKHRoaXMuYXBwUm9vdFByb3ZpZGVyLmdldEFic1BhdGhuYW1lV2l0aEFwcFJvb3QodGhpcy5sb2NhdGlvbi5nZXRGdWxsUGF0aChwLGgsZCkpKTp0aGlzLmxvY2F0aW9uLnB1c2hTdGF0ZVVybCh0aGlzLmFwcFJvb3RQcm92aWRlci5nZXRBYnNQYXRobmFtZVdpdGhBcHBSb290KHRoaXMubG9jYXRpb24uZ2V0RnVsbFBhdGgocCxoLGQpKSkpfSkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoUmEpLHRoaXMuc3RvcmUuc2VsZWN0KEpKKSksTCgoW3tyb3V0ZTpkLG9wdGlvbnM6cH0saCxmXSk9PntsZXQgbT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIHQubmFtZXNwYWNlVXBkYXRlLm9wdGlvbj09PXNhLkZST01fSElTVE9SWT90Lm5hbWVzcGFjZVVwZGF0ZS5uYW1lc3BhY2VJZDpudWxsPT1lfHx0Lm5hbWVzcGFjZVVwZGF0ZS5vcHRpb249PT1zYS5ORVc/YCR7RGF0ZS5ub3coKS50b1N0cmluZygpfToke2Z1bmN0aW9uKCl7bGV0IG49bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXMobik7bGV0IHQ9IiI7Zm9yKGxldCBlIG9mIG4pdCs9KGU+PjQpLnRvU3RyaW5nKDE2KTtyZXR1cm4gdH0oKX1gOmV9KDAscCxmKTtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGVEYXRhKHsuLi50aGlzLmxvY2F0aW9uLmdldEhpc3RvcnlTdGF0ZSgpLG5hbWVzcGFjZUlkOm19KSxKbCh7YmVmb3JlOmgsYWZ0ZXI6ZCxiZWZvcmVOYW1lc3BhY2VJZDpmLGFmdGVyTmFtZXNwYWNlSWQ6bX0pfSkpKSx0aGlzLnJvdXRlQ29uZmlncz1zLmdldFJvdXRlQ29uZmlncygpfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIHc0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooTm0pLGooQUEpLGoocWMpLGooUkEpLGooTG0pKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxrMmU9dnIoe2FjdGl2ZVJvdXRlOm51bGwsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6bnVsbCxyZWh5ZHJhdGVkRGVlcExpbmtzOltdLHJlZ2lzdGVyZWRSb3V0ZUtleXM6bmV3IFNldH0sU2UoUEEsKG4se2FmdGVyOnR9KT0+KHsuLi5uLG5leHRSb3V0ZTp0fSkpLFNlKEpsLChuLHthZnRlcjp0LGFmdGVyTmFtZXNwYWNlSWQ6ZX0pPT57bGV0IGk9bi5yZWh5ZHJhdGVkRGVlcExpbmtzO3JldHVybiBEQSh0LnJvdXRlS2luZCxlLGkpJiYoaT1bLi4uaV0saS5wdXNoKHtkZWVwTGlua0dyb3VwOnA0KHQucm91dGVLaW5kKSxuYW1lc3BhY2VJZDplfSkpLHsuLi5uLGFjdGl2ZVJvdXRlOnQsbmV4dFJvdXRlOm51bGwsYWN0aXZlTmFtZXNwYWNlSWQ6ZSxyZWh5ZHJhdGVkRGVlcExpbmtzOml9fSksU2UoSUEsKG4se3JvdXRlS2luZHM6dH0pPT4oey4uLm4scmVnaXN0ZXJlZFJvdXRlS2V5czp0fSkpKTtmdW5jdGlvbiBuJChuLHQpe3JldHVybiBrMmUobix0KX12YXIgSl89KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbQUEsUkFdLGltcG9ydHM6W3FjLHdyLmZvckZlYXR1cmUoT0EsbiQpLHJvLmZvckZlYXR1cmUoW3QkXSksUV8sWF9dfSksbn0pKCksaSQ9Il9fdGFiX18iLHIkPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRmU3RvcmFnZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIiksZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZ2xvYmFscyIpLnRmX2dsb2JhbHMuc2V0VXNlSGFzaCghMCksdGhpcy50ZlN0b3JhZ2UudGZfc3RvcmFnZS5taWdyYXRlTGVnYWN5VVJMU2NoZW1lKCl9Z2V0U3RyaW5nKGUpe3JldHVybiB0aGlzLnRmU3RvcmFnZS50Zl9zdG9yYWdlLmdldFN0cmluZyhlKX1zZXRTdHJpbmcoZSxpLHIpe3RoaXMudGZTdG9yYWdlLnRmX3N0b3JhZ2Uuc2V0U3RyaW5nKGUsaSxyKX1nZXRQbHVnaW5JZCgpe3JldHVybiB0aGlzLmdldFN0cmluZyhpJCl9c2V0UGx1Z2luSWQoZSxpKXt0aGlzLnNldFN0cmluZyhpJCxlLGkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxmaD1jbGFzc3t9LFM0PW5ldyBwZSgiW1BlcnNpc3RlbnQgU2V0dGluZ3NdIEdsb2JhbCBTZXR0aW5ncyIpLFNyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5nbG9iYWxTZXR0aW5nU2VsZWN0b3JzPVtdLGUmJih0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM9ZS5tYXAoaT0+aSgpKSl9Z2V0R2xvYmFsU2V0dGluZ1NlbGVjdG9ycygpe3JldHVybiB0aGlzLmdsb2JhbFNldHRpbmdTZWxlY3RvcnM/P1tdfXN0YXRpYyBkZWZpbmVHbG9iYWxTZXR0aW5nKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6UzQsbXVsdGk6ITAsdXNlVmFsdWU6ZX1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihTNCw4KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLE9hPSgoKT0+KGZ1bmN0aW9uKG4pe24uQlJPV1NFUl9ERUZBVUxUPSJicm93c2VyX2RlZmF1bHQiLG4uTElHSFQ9ImxpZ2h0IixuLkRBUks9ImRhcmsifShPYXx8KE9hPXt9KSksT2EpKSgpLG8kPSJfdGJfZ2xvYmFsX3NldHRpbmdzLnRpbWVzZXJpZXMiLHMkPSJfdGJfZ2xvYmFsX3NldHRpbmdzIixhJD0ibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lc3RhbXAiLGtBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEZBPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEU0PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGQXt1aVRvQmFja2VuZChlKXtsZXQgaT17fTtyZXR1cm4gdm9pZCAwIT09ZS5pZ25vcmVPdXRsaWVycyYmKGkuaWdub3JlT3V0bGllcnM9ZS5pZ25vcmVPdXRsaWVycyksdm9pZCAwIT09ZS5zY2FsYXJTbW9vdGhpbmcmJihpLnNjYWxhclNtb290aGluZz1lLnNjYWxhclNtb290aGluZyksdm9pZCAwIT09ZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkJiYoaS5hdXRvUmVsb2FkPWUuYXV0b1JlbG9hZCksdm9pZCAwIT09ZS5hdXRvUmVsb2FkUGVyaW9kSW5NcyYmKGkuYXV0b1JlbG9hZFBlcmlvZEluTXM9ZS5hdXRvUmVsb2FkUGVyaW9kSW5Ncyksdm9pZCAwIT09ZS5wYWdlU2l6ZSYmKGkucGFnaW5hdGlvblNpemU9ZS5wYWdlU2l6ZSksdm9pZCAwIT09ZS50aGVtZU92ZXJyaWRlJiYoaS50aGVtZT1lLnRoZW1lT3ZlcnJpZGUpLHZvaWQgMCE9PWUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLHZvaWQgMCE9PWUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLHZvaWQgMCE9PWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCYmKGkudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZD1lLnRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQpLHZvaWQgMCE9PWUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLHZvaWQgMCE9PWUuc3RlcFNlbGVjdG9yRW5hYmxlZCYmKGkuc3RlcFNlbGVjdG9yRW5hYmxlZD1lLnN0ZXBTZWxlY3RvckVuYWJsZWQpLHZvaWQgMCE9PWUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLHZvaWQgMCE9PWUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGl9YmFja2VuZFRvVWkoZSl7bGV0IGk9e307cmV0dXJuIGUuaGFzT3duUHJvcGVydHkoInNjYWxhclNtb290aGluZyIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2NhbGFyU21vb3RoaW5nJiYoaS5zY2FsYXJTbW9vdGhpbmc9ZS5zY2FsYXJTbW9vdGhpbmcpLGUuaGFzT3duUHJvcGVydHkoImlnbm9yZU91dGxpZXJzIikmJiJib29sZWFuIj09dHlwZW9mIGUuaWdub3JlT3V0bGllcnMmJihpLmlnbm9yZU91dGxpZXJzPWUuaWdub3JlT3V0bGllcnMpLGUuaGFzT3duUHJvcGVydHkoInRvb2x0aXBTb3J0IikmJiJzdHJpbmciPT10eXBlb2YgZS50b29sdGlwU29ydCYmKGkudG9vbHRpcFNvcnQ9ZS50b29sdGlwU29ydCksZS5oYXNPd25Qcm9wZXJ0eSgiYXV0b1JlbG9hZCIpJiYiYm9vbGVhbiI9PXR5cGVvZiBlLmF1dG9SZWxvYWQmJihpLmF1dG9SZWxvYWQ9ZS5hdXRvUmVsb2FkKSxlLmhhc093blByb3BlcnR5KCJhdXRvUmVsb2FkUGVyaW9kSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUuYXV0b1JlbG9hZFBlcmlvZEluTXMmJihpLmF1dG9SZWxvYWRQZXJpb2RJbk1zPWUuYXV0b1JlbG9hZFBlcmlvZEluTXMpLGUuaGFzT3duUHJvcGVydHkoInBhZ2luYXRpb25TaXplIikmJiJudW1iZXIiPT10eXBlb2YgZS5wYWdpbmF0aW9uU2l6ZSYmKGkucGFnZVNpemU9ZS5wYWdpbmF0aW9uU2l6ZSksZS5oYXNPd25Qcm9wZXJ0eSgidGhlbWUiKSYmInN0cmluZyI9PXR5cGVvZiBlLnRoZW1lJiZuZXcgU2V0KE9iamVjdC52YWx1ZXMoT2EpKS5oYXMoZS50aGVtZSkmJihpLnRoZW1lT3ZlcnJpZGU9ZS50aGVtZSksZS5oYXNPd25Qcm9wZXJ0eSgibm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyIpJiYibnVtYmVyIj09dHlwZW9mIGUubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5NcyYmKGkubm90aWZpY2F0aW9uTGFzdFJlYWRUaW1lSW5Ncz1lLm5vdGlmaWNhdGlvbkxhc3RSZWFkVGltZUluTXMpLGUuaGFzT3duUHJvcGVydHkoInNpZGVCYXJXaWR0aEluUGVyY2VudCIpJiYibnVtYmVyIj09dHlwZW9mIGUuc2lkZUJhcldpZHRoSW5QZXJjZW50JiYoaS5zaWRlQmFyV2lkdGhJblBlcmNlbnQ9ZS5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLGUuaGFzT3duUHJvcGVydHkoInRpbWVTZXJpZXNTZXR0aW5nc1BhbmVPcGVuZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkJiYoaS50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPWUudGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZCksZS5oYXNPd25Qcm9wZXJ0eSgidGltZVNlcmllc0NhcmRNaW5XaWR0aCIpJiYibnVtYmVyIj09dHlwZW9mIGUudGltZVNlcmllc0NhcmRNaW5XaWR0aCYmKGkudGltZVNlcmllc0NhcmRNaW5XaWR0aD1lLnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLGUuaGFzT3duUHJvcGVydHkoInN0ZXBTZWxlY3RvckVuYWJsZWQiKSYmImJvb2xlYW4iPT10eXBlb2YgZS5zdGVwU2VsZWN0b3JFbmFibGVkJiYoaS5zdGVwU2VsZWN0b3JFbmFibGVkPWUuc3RlcFNlbGVjdG9yRW5hYmxlZCksZS5oYXNPd25Qcm9wZXJ0eSgicmFuZ2VTZWxlY3Rpb25FbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUucmFuZ2VTZWxlY3Rpb25FbmFibGVkJiYoaS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ9ZS5yYW5nZVNlbGVjdGlvbkVuYWJsZWQpLGUuaGFzT3duUHJvcGVydHkoImxpbmtlZFRpbWVFbmFibGVkIikmJiJib29sZWFuIj09dHlwZW9mIGUubGlua2VkVGltZUVuYWJsZWQmJihpLmxpbmtlZFRpbWVFbmFibGVkPWUubGlua2VkVGltZUVuYWJsZWQpLGl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxsJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY29udmVydGVyPWV9c2V0U2V0dGluZ3MoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpP3RoaXMuZ2V0U2V0dGluZ3MoKS5waXBlKGt0KGk9Pntsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzJCxKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnZlcnRlci51aVRvQmFja2VuZCh7Li4uaSwuLi5lfSkpKSxsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShvJCksbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYSQpfSksTCgoKT0+e30pKTplb31kZXNlcmlhbGl6ZShlKXt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2h7cmV0dXJue319fWdldFNldHRpbmdzKCl7bGV0IGU9bG9jYWxTdG9yYWdlLmdldEl0ZW0oYSQpO3JldHVybiBYdCh7Li4udGhpcy5jb252ZXJ0ZXIuYmFja2VuZFRvVWkodGhpcy5kZXNlcmlhbGl6ZShlP0pTT04uc3RyaW5naWZ5KHtub3RpZmljYXRpb25MYXN0UmVhZFRpbWVJbk1zOk51bWJlcihlKX0pOiJ7fSIpKSwuLi50aGlzLmNvbnZlcnRlci5iYWNrZW5kVG9VaSh0aGlzLmRlc2VyaWFsaXplKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG8kKT8/Int9IikpLC4uLnRoaXMuY29udmVydGVyLmJhY2tlbmRUb1VpKHRoaXMuZGVzZXJpYWxpemUobG9jYWxTdG9yYWdlLmdldEl0ZW0ocyQpPz8ie30iKSl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihGQSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGMkPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3twcm92aWRlOmtBLHVzZUNsYXNzOmwkfSxFNCx7cHJvdmlkZTpGQSx1c2VFeGlzdGluZzpFNH1dfSksbn0pKCksWWM9YmUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBHbG9iYWwgU2V0dGluZ3MgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdSQ9YmUoIltQZXJzaXN0ZW50IFNldHRpbmdzXSBFZmZlY3RzIEluaXQiKSxkJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5jb25maWdNb2R1bGU9cix0aGlzLmRhdGFTb3VyY2U9byx0aGlzLmluaXRpYWxpemVBbmRVcGRhdGVTZXR0aW5ncyQ9Y3IoKCk9PntsZXQgcz10aGlzLmFjdGlvbnMkLnBpcGUoaWkodSQpLHhuKCgpPT50aGlzLmRhdGFTb3VyY2UuZ2V0U2V0dGluZ3MoKSksa3QoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goWWMoe3BhcnRpYWxTZXR0aW5nczphfSkpfSksT2woMCkseG4oKCk9Pkp0KC4uLnRoaXMuY29uZmlnTW9kdWxlLmdldEdsb2JhbFNldHRpbmdTZWxlY3RvcnMoKS5tYXAobD0+dGhpcy5zdG9yZS5zZWxlY3QobCkucGlwZSh5aSgoYyx1KT0+e2xldCBkPU9iamVjdC52YWx1ZXMoYykscD1PYmplY3QudmFsdWVzKHUpO3JldHVybiBkLmxlbmd0aD09PXAubGVuZ3RoJiZkLmV2ZXJ5KChoLGYpPT5oPT09cFtmXSl9KSxaYSgxKSkpKSksVHMoKSk7cmV0dXJuIHMucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gZW4oKHQsZSk9PntsZXQgaT1bXTtyZXR1cm4gdC5zdWJzY3JpYmUoanQoZSxyPT5pLnB1c2gociksKCk9PntlLm5leHQoaSksZS5jb21wbGV0ZSgpfSkpLG4uc3Vic2NyaWJlKGp0KGUsKCk9PntsZXQgcj1pO2k9W10sZS5uZXh0KHIpfSxNYykpLCgpPT57aT1udWxsfX0pfShzLnBpcGUoSHIoNTAwKSkpLHhuKGE9PntsZXQgbD17fTtmb3IobGV0IGMgb2YgYSlPYmplY3QuYXNzaWduKGwsYyk7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5zZXRTZXR0aW5ncyhsKX0pKX0se2Rpc3BhdGNoOiExfSl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gdSQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihQbyksaihDZSksaihTciksaihrQSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFQ0PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1NyXSxpbXBvcnRzOltyby5mb3JGZWF0dXJlKFtkJF0pLGMkXX0pLG59KSgpLExBPWNsYXNze30sQkE9Y2xhc3N7fSxobD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm5vcm1hbGl6ZWROYW1lcz1uZXcgTWFwLHRoaXMubGF6eVVwZGF0ZT1udWxsLHQ/dGhpcy5sYXp5SW5pdD0ic3RyaW5nIj09dHlwZW9mIHQ/KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCx0LnNwbGl0KCJcbiIpLmZvckVhY2goZT0+e2xldCBpPWUuaW5kZXhPZigiOiIpO2lmKGk+MCl7bGV0IHI9ZS5zbGljZSgwLGkpLG89ci50b0xvd2VyQ2FzZSgpLHM9ZS5zbGljZShpKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUocixvKSx0aGlzLmhlYWRlcnMuaGFzKG8pP3RoaXMuaGVhZGVycy5nZXQobykucHVzaChzKTp0aGlzLmhlYWRlcnMuc2V0KG8sW3NdKX19KX06KCk9Pnt0aGlzLmhlYWRlcnM9bmV3IE1hcCxPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGU9PntsZXQgaT10W2VdLHI9ZS50b0xvd2VyQ2FzZSgpOyJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSxpLmxlbmd0aD4wJiYodGhpcy5oZWFkZXJzLnNldChyLGkpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShlLHIpKX0pfTp0aGlzLmhlYWRlcnM9bmV3IE1hcH1oYXModCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5oYXModC50b0xvd2VyQ2FzZSgpKX1nZXQodCl7dGhpcy5pbml0KCk7bGV0IGU9dGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpO3JldHVybiBlJiZlLmxlbmd0aD4wP2VbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldCh0LnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOnQsdmFsdWU6ZSxvcDoiYSJ9KX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTp0LHZhbHVlOmUsb3A6InMifSl9ZGVsZXRlKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6dCx2YWx1ZTplLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUodCxlKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoZSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGhsP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaCh0PT50aGlzLmFwcGx5VXBkYXRlKHQpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKHQpe3QuaW5pdCgpLEFycmF5LmZyb20odC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChlPT57dGhpcy5oZWFkZXJzLnNldChlLHQuaGVhZGVycy5nZXQoZSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChlLHQubm9ybWFsaXplZE5hbWVzLmdldChlKSl9KX1jbG9uZSh0KXtsZXQgZT1uZXcgaGw7cmV0dXJuIGUubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIGhsP3RoaXMubGF6eUluaXQ6dGhpcyxlLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbdF0pLGV9YXBwbHlVcGRhdGUodCl7bGV0IGU9dC5uYW1lLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgaT10LnZhbHVlO2lmKCJzdHJpbmciPT10eXBlb2YgaSYmKGk9W2ldKSwwPT09aS5sZW5ndGgpcmV0dXJuO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZSh0Lm5hbWUsZSk7bGV0IHI9KCJhIj09PXQub3A/dGhpcy5oZWFkZXJzLmdldChlKTp2b2lkIDApfHxbXTtyLnB1c2goLi4uaSksdGhpcy5oZWFkZXJzLnNldChlLHIpO2JyZWFrO2Nhc2UiZCI6bGV0IG89dC52YWx1ZTtpZihvKXtsZXQgcz10aGlzLmhlYWRlcnMuZ2V0KGUpO2lmKCFzKXJldHVybjtzPXMuZmlsdGVyKGE9Pi0xPT09by5pbmRleE9mKGEpKSwwPT09cy5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoZSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGUpKTp0aGlzLmhlYWRlcnMuc2V0KGUscyl9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGUpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShlKX19Zm9yRWFjaCh0KXt0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLmtleXMoKSkuZm9yRWFjaChlPT50KHRoaXMubm9ybWFsaXplZE5hbWVzLmdldChlKSx0aGlzLmhlYWRlcnMuZ2V0KGUpKSl9fSxWMmU9LyUoXGRbYS1mMC05XSkvZ2ksSDJlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6IjsiLCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtmdW5jdGlvbiBwJChuKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KG4pLnJlcGxhY2UoVjJlLCh0LGUpPT5IMmVbZV0/P3QpfWZ1bmN0aW9uIE5BKG4pe3JldHVybmAke259YH12YXIgWHU9Y2xhc3N7Y29uc3RydWN0b3IodD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9dC5lbmNvZGVyfHxuZXcgY2xhc3N7ZW5jb2RlS2V5KHQpe3JldHVybiBwJCh0KX1lbmNvZGVWYWx1ZSh0KXtyZXR1cm4gcCQodCl9ZGVjb2RlS2V5KHQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQodCl9ZGVjb2RlVmFsdWUodCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh0KX19LHQuZnJvbVN0cmluZyl7aWYodC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bmV3IE1hcDtyZXR1cm4gbi5sZW5ndGg+MCYmbi5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2gocj0+e2xldCBvPXIuaW5kZXhPZigiPSIpLFtzLGFdPS0xPT1vP1t0LmRlY29kZUtleShyKSwiIl06W3QuZGVjb2RlS2V5KHIuc2xpY2UoMCxvKSksdC5kZWNvZGVWYWx1ZShyLnNsaWNlKG8rMSkpXSxsPWUuZ2V0KHMpfHxbXTtsLnB1c2goYSksZS5zZXQocyxsKX0pLGV9KHQuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgdC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKHQuZnJvbU9iamVjdCkuZm9yRWFjaChlPT57bGV0IGk9dC5mcm9tT2JqZWN0W2VdLHI9QXJyYXkuaXNBcnJheShpKT9pLm1hcChOQSk6W05BKGkpXTt0aGlzLm1hcC5zZXQoZSxyKX0pKTp0aGlzLm1hcD1udWxsfWhhcyh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuaGFzKHQpfWdldCh0KXt0aGlzLmluaXQoKTtsZXQgZT10aGlzLm1hcC5nZXQodCk7cmV0dXJuIGU/ZVswXTpudWxsfWdldEFsbCh0KXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KHQpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZCh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImEifSl9YXBwZW5kQWxsKHQpe2xldCBlPVtdO3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGk9PntsZXQgcj10W2ldO0FycmF5LmlzQXJyYXkocik/ci5mb3JFYWNoKG89PntlLnB1c2goe3BhcmFtOmksdmFsdWU6byxvcDoiYSJ9KX0pOmUucHVzaCh7cGFyYW06aSx2YWx1ZTpyLG9wOiJhIn0pfSksdGhpcy5jbG9uZShlKX1zZXQodCxlKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06dCx2YWx1ZTplLG9wOiJzIn0pfWRlbGV0ZSh0LGUpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTp0LHZhbHVlOmUsb3A6ImQifSl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5rZXlzKCkubWFwKHQ9PntsZXQgZT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KHQpO3JldHVybiB0aGlzLm1hcC5nZXQodCkubWFwKGk9PmUrIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShpKSkuam9pbigiJiIpfSkuZmlsdGVyKHQ9PiIiIT09dCkuam9pbigiJiIpfWNsb25lKHQpe2xldCBlPW5ldyBYdSh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gZS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsZS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQodCksZX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKHQ9PnRoaXMubWFwLnNldCh0LHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQodCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaCh0PT57c3dpdGNoKHQub3Ape2Nhc2UiYSI6Y2FzZSJzIjpsZXQgZT0oImEiPT09dC5vcD90aGlzLm1hcC5nZXQodC5wYXJhbSk6dm9pZCAwKXx8W107ZS5wdXNoKE5BKHQudmFsdWUpKSx0aGlzLm1hcC5zZXQodC5wYXJhbSxlKTticmVhaztjYXNlImQiOmlmKHZvaWQgMD09PXQudmFsdWUpe3RoaXMubWFwLmRlbGV0ZSh0LnBhcmFtKTticmVha317bGV0IGk9dGhpcy5tYXAuZ2V0KHQucGFyYW0pfHxbXSxyPWkuaW5kZXhPZihOQSh0LnZhbHVlKSk7LTEhPT1yJiZpLnNwbGljZShyLDEpLGkubGVuZ3RoPjA/dGhpcy5tYXAuc2V0KHQucGFyYW0saSk6dGhpcy5tYXAuZGVsZXRlKHQucGFyYW0pfX19KSx0aGlzLmNsb25lRnJvbT10aGlzLnVwZGF0ZXM9bnVsbCl9fTtmdW5jdGlvbiBoJChuKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmbiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIGYkKG4pe3JldHVybiB0eXBlb2YgQmxvYjwidSImJm4gaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIG0kKG4pe3JldHVybiB0eXBlb2YgRm9ybURhdGE8InUiJiZuIGluc3RhbmNlb2YgRm9ybURhdGF9dmFyIEJtPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2xldCBvO2lmKHRoaXMudXJsPWUsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9dC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIkRFTEVURSI6Y2FzZSJHRVQiOmNhc2UiSEVBRCI6Y2FzZSJPUFRJT05TIjpjYXNlIkpTT05QIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX0odGhpcy5tZXRob2QpfHxyPyh0aGlzLmJvZHk9dm9pZCAwIT09aT9pOm51bGwsbz1yKTpvPWksbyYmKHRoaXMucmVwb3J0UHJvZ3Jlc3M9ISFvLnJlcG9ydFByb2dyZXNzLHRoaXMud2l0aENyZWRlbnRpYWxzPSEhby53aXRoQ3JlZGVudGlhbHMsby5yZXNwb25zZVR5cGUmJih0aGlzLnJlc3BvbnNlVHlwZT1vLnJlc3BvbnNlVHlwZSksby5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPW8uaGVhZGVycyksby5jb250ZXh0JiYodGhpcy5jb250ZXh0PW8uY29udGV4dCksby5wYXJhbXMmJih0aGlzLnBhcmFtcz1vLnBhcmFtcykpLHRoaXMuaGVhZGVyc3x8KHRoaXMuaGVhZGVycz1uZXcgaGwpLHRoaXMuY29udGV4dHx8KHRoaXMuY29udGV4dD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldCh0LGUpe3JldHVybiB0aGlzLm1hcC5zZXQodCxlKSx0aGlzfWdldCh0KXtyZXR1cm4gdGhpcy5tYXAuaGFzKHQpfHx0aGlzLm1hcC5zZXQodCx0LmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQodCl9ZGVsZXRlKHQpe3JldHVybiB0aGlzLm1hcC5kZWxldGUodCksdGhpc31oYXModCl7cmV0dXJuIHRoaXMubWFwLmhhcyh0KX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19KSx0aGlzLnBhcmFtcyl7bGV0IHM9dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09cy5sZW5ndGgpdGhpcy51cmxXaXRoUGFyYW1zPWU7ZWxzZXtsZXQgYT1lLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9ZSsoLTE9PT1hPyI/IjphPGUubGVuZ3RoLTE/IiYiOiIiKStzfX1lbHNlIHRoaXMucGFyYW1zPW5ldyBYdSx0aGlzLnVybFdpdGhQYXJhbXM9ZX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDpoJCh0aGlzLmJvZHkpfHxmJCh0aGlzLmJvZHkpfHxtJCh0aGlzLmJvZHkpfHxmdW5jdGlvbihuKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJm4gaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSl8fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBYdT90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxtJCh0aGlzLmJvZHkpP251bGw6ZiQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpoJCh0aGlzLmJvZHkpP251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIFh1PyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUodD17fSl7bGV0IGU9dC5tZXRob2R8fHRoaXMubWV0aG9kLGk9dC51cmx8fHRoaXMudXJsLHI9dC5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLG89dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHkscz12b2lkIDAhPT10LndpdGhDcmVkZW50aWFscz90LndpdGhDcmVkZW50aWFsczp0aGlzLndpdGhDcmVkZW50aWFscyxhPXZvaWQgMCE9PXQucmVwb3J0UHJvZ3Jlc3M/dC5yZXBvcnRQcm9ncmVzczp0aGlzLnJlcG9ydFByb2dyZXNzLGw9dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsYz10LnBhcmFtc3x8dGhpcy5wYXJhbXMsdT10LmNvbnRleHQ/P3RoaXMuY29udGV4dDtyZXR1cm4gdm9pZCAwIT09dC5zZXRIZWFkZXJzJiYobD1PYmplY3Qua2V5cyh0LnNldEhlYWRlcnMpLnJlZHVjZSgoZCxwKT0+ZC5zZXQocCx0LnNldEhlYWRlcnNbcF0pLGwpKSx0LnNldFBhcmFtcyYmKGM9T2JqZWN0LmtleXModC5zZXRQYXJhbXMpLnJlZHVjZSgoZCxwKT0+ZC5zZXQocCx0LnNldFBhcmFtc1twXSksYykpLG5ldyBCbShlLGksbyx7cGFyYW1zOmMsaGVhZGVyczpsLGNvbnRleHQ6dSxyZXBvcnRQcm9ncmVzczphLHJlc3BvbnNlVHlwZTpyLHdpdGhDcmVkZW50aWFsczpzfSl9fSxtaD0oKCk9PihmdW5jdGlvbihuKXtuW24uU2VudD0wXT0iU2VudCIsbltuLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsbltuLlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsbltuLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLG5bbi5SZXNwb25zZT00XT0iUmVzcG9uc2UiLG5bbi5Vc2VyPTVdPSJVc2VyIn0obWh8fChtaD17fSkpLG1oKSkoKSxQTT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MjAwLGk9Ik9LIil7dGhpcy5oZWFkZXJzPXQuaGVhZGVyc3x8bmV3IGhsLHRoaXMuc3RhdHVzPXZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOmUsdGhpcy5zdGF0dXNUZXh0PXQuc3RhdHVzVGV4dHx8aSx0aGlzLnVybD10LnVybHx8bnVsbCx0aGlzLm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMH19LFJNPWNsYXNzIGV4dGVuZHMgUE17Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksdGhpcy50eXBlPW1oLlJlc3BvbnNlSGVhZGVyfWNsb25lKHQ9e30pe3JldHVybiBuZXcgUk0oe2hlYWRlcnM6dC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PXQuc3RhdHVzP3Quc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6dC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOnQudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fSwkXz1jbGFzcyBleHRlbmRzIFBNe2NvbnN0cnVjdG9yKHQ9e30pe3N1cGVyKHQpLHRoaXMudHlwZT1taC5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09dC5ib2R5P3QuYm9keTpudWxsfWNsb25lKHQ9e30pe3JldHVybiBuZXcgJF8oe2JvZHk6dm9pZCAwIT09dC5ib2R5P3QuYm9keTp0aGlzLmJvZHksaGVhZGVyczp0LmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09dC5zdGF0dXM/dC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDp0LnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6dC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19LG5wPWNsYXNzIGV4dGVuZHMgUE17Y29uc3RydWN0b3IodCl7c3VwZXIodCwwLCJVbmtub3duIEVycm9yIiksdGhpcy5uYW1lPSJIdHRwRXJyb3JSZXNwb25zZSIsdGhpcy5vaz0hMSx0aGlzLm1lc3NhZ2U9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwP2BIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yICR7dC51cmx8fCIodW5rbm93biB1cmwpIn1gOmBIdHRwIGZhaWx1cmUgcmVzcG9uc2UgZm9yICR7dC51cmx8fCIodW5rbm93biB1cmwpIn06ICR7dC5zdGF0dXN9ICR7dC5zdGF0dXNUZXh0fWAsdGhpcy5lcnJvcj10LmVycm9yfHxudWxsfX07ZnVuY3Rpb24gRDQobix0KXtyZXR1cm57Ym9keTp0LGhlYWRlcnM6bi5oZWFkZXJzLGNvbnRleHQ6bi5jb250ZXh0LG9ic2VydmU6bi5vYnNlcnZlLHBhcmFtczpuLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpuLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpuLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6bi53aXRoQ3JlZGVudGlhbHN9fXZhciBWbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaGFuZGxlcj1lfXJlcXVlc3QoZSxpLHI9e30pe2xldCBvO2lmKGUgaW5zdGFuY2VvZiBCbSlvPWU7ZWxzZXtsZXQgbCxjO2w9ci5oZWFkZXJzIGluc3RhbmNlb2YgaGw/ci5oZWFkZXJzOm5ldyBobChyLmhlYWRlcnMpLHIucGFyYW1zJiYoYz1yLnBhcmFtcyBpbnN0YW5jZW9mIFh1P3IucGFyYW1zOm5ldyBYdSh7ZnJvbU9iamVjdDpyLnBhcmFtc30pKSxvPW5ldyBCbShlLGksdm9pZCAwIT09ci5ib2R5P3IuYm9keTpudWxsLHtoZWFkZXJzOmwsY29udGV4dDpyLmNvbnRleHQscGFyYW1zOmMscmVwb3J0UHJvZ3Jlc3M6ci5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6ci5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6ci53aXRoQ3JlZGVudGlhbHN9KX1sZXQgcz1YdChvKS5waXBlKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEVuKHQpP3huKG4sdCwxKTp4bihuLDEpfShsPT50aGlzLmhhbmRsZXIuaGFuZGxlKGwpKSk7aWYoZSBpbnN0YW5jZW9mIEJtfHwiZXZlbnRzIj09PXIub2JzZXJ2ZSlyZXR1cm4gcztsZXQgYT1zLnBpcGUoWWUobD0+bCBpbnN0YW5jZW9mICRfKSk7c3dpdGNoKHIub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChvLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIGEucGlwZShMKGw9PntpZihudWxsIT09bC5ib2R5JiYhKGwuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhbiBBcnJheUJ1ZmZlci4iKTtyZXR1cm4gbC5ib2R5fSkpO2Nhc2UiYmxvYiI6cmV0dXJuIGEucGlwZShMKGw9PntpZihudWxsIT09bC5ib2R5JiYhKGwuYm9keSBpbnN0YW5jZW9mIEJsb2IpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgQmxvYi4iKTtyZXR1cm4gbC5ib2R5fSkpO2Nhc2UidGV4dCI6cmV0dXJuIGEucGlwZShMKGw9PntpZihudWxsIT09bC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIGwuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gbC5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIGEucGlwZShMKGw9PmwuYm9keSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBhO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKGBVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAke3Iub2JzZXJ2ZX19YCl9fWRlbGV0ZShlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkRFTEVURSIsZSxpKX1nZXQoZSxpPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJHRVQiLGUsaSl9aGVhZChlLGk9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkhFQUQiLGUsaSl9anNvbnAoZSxpKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsZSx7cGFyYW1zOihuZXcgWHUpLmFwcGVuZChpLCJKU09OUF9DQUxMQkFDSyIpLG9ic2VydmU6ImJvZHkiLHJlc3BvbnNlVHlwZToianNvbiJ9KX1vcHRpb25zKGUsaT17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsZSxpKX1wYXRjaChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUEFUQ0giLGUsRDQocixpKSl9cG9zdChlLGkscj17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUE9TVCIsZSxENChyLGkpKX1wdXQoZSxpLHI9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBVVCIsZSxENChyLGkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihMQSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEhBPW5ldyBwZSgiSFRUUF9JTlRFUkNFUFRPUlMiKSxqMmU9KCgpPT57Y2xhc3MgbntpbnRlcmNlcHQoZSxpKXtyZXR1cm4gaS5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLEcyZT0vXlwpXF1cfScsP1xuLyxnJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMueGhyRmFjdG9yeT1lfWhhbmRsZShlKXtpZigiSlNPTlAiPT09ZS5tZXRob2QpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gY29uc3RydWN0IEpzb25wIHJlcXVlc3Qgd2l0aG91dCBIdHRwQ2xpZW50SnNvbnBNb2R1bGUgaW5zdGFsbGVkLiIpO3JldHVybiBuZXcgdW4oaT0+e2xldCByPXRoaXMueGhyRmFjdG9yeS5idWlsZCgpO2lmKHIub3BlbihlLm1ldGhvZCxlLnVybFdpdGhQYXJhbXMpLGUud2l0aENyZWRlbnRpYWxzJiYoci53aXRoQ3JlZGVudGlhbHM9ITApLGUuaGVhZGVycy5mb3JFYWNoKChoLGYpPT5yLnNldFJlcXVlc3RIZWFkZXIoaCxmLmpvaW4oIiwiKSkpLGUuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHxyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFlLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7bGV0IGg9ZS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1oJiZyLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaCl9aWYoZS5yZXNwb25zZVR5cGUpe2xldCBoPWUucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7ci5yZXNwb25zZVR5cGU9Impzb24iIT09aD9oOiJ0ZXh0In1sZXQgbz1lLnNlcmlhbGl6ZUJvZHkoKSxzPW51bGwsYT0oKT0+e2lmKG51bGwhPT1zKXJldHVybiBzO2xldCBoPXIuc3RhdHVzVGV4dHx8Ik9LIixmPW5ldyBobChyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxtPWZ1bmN0aW9uKG4pe3JldHVybiJyZXNwb25zZVVSTCJpbiBuJiZuLnJlc3BvbnNlVVJMP24ucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3Qobi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/bi5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHIpfHxlLnVybDtyZXR1cm4gcz1uZXcgUk0oe2hlYWRlcnM6ZixzdGF0dXM6ci5zdGF0dXMsc3RhdHVzVGV4dDpoLHVybDptfSksc30sbD0oKT0+e2xldHtoZWFkZXJzOmgsc3RhdHVzOmYsc3RhdHVzVGV4dDptLHVybDp4fT1hKCksZz1udWxsOzIwNCE9PWYmJihnPXR5cGVvZiByLnJlc3BvbnNlPiJ1Ij9yLnJlc3BvbnNlVGV4dDpyLnJlc3BvbnNlKSwwPT09ZiYmKGY9Zz8yMDA6MCk7bGV0IGI9Zj49MjAwJiZmPDMwMDtpZigianNvbiI9PT1lLnJlc3BvbnNlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBnKXtsZXQgRD1nO2c9Zy5yZXBsYWNlKEcyZSwiIik7dHJ5e2c9IiIhPT1nP0pTT04ucGFyc2UoZyk6bnVsbH1jYXRjaChUKXtnPUQsYiYmKGI9ITEsZz17ZXJyb3I6VCx0ZXh0Omd9KX19Yj8oaS5uZXh0KG5ldyAkXyh7Ym9keTpnLGhlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOnh8fHZvaWQgMH0pKSxpLmNvbXBsZXRlKCkpOmkuZXJyb3IobmV3IG5wKHtlcnJvcjpnLGhlYWRlcnM6aCxzdGF0dXM6ZixzdGF0dXNUZXh0Om0sdXJsOnh8fHZvaWQgMH0pKX0sYz1oPT57bGV0e3VybDpmfT1hKCksbT1uZXcgbnAoe2Vycm9yOmgsc3RhdHVzOnIuc3RhdHVzfHwwLHN0YXR1c1RleHQ6ci5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOmZ8fHZvaWQgMH0pO2kuZXJyb3IobSl9LHU9ITEsZD1oPT57dXx8KGkubmV4dChhKCkpLHU9ITApO2xldCBmPXt0eXBlOm1oLkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmgubG9hZGVkfTtoLmxlbmd0aENvbXB1dGFibGUmJihmLnRvdGFsPWgudG90YWwpLCJ0ZXh0Ij09PWUucmVzcG9uc2VUeXBlJiYhIXIucmVzcG9uc2VUZXh0JiYoZi5wYXJ0aWFsVGV4dD1yLnJlc3BvbnNlVGV4dCksaS5uZXh0KGYpfSxwPWg9PntsZXQgZj17dHlwZTptaC5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6aC5sb2FkZWR9O2gubGVuZ3RoQ29tcHV0YWJsZSYmKGYudG90YWw9aC50b3RhbCksaS5uZXh0KGYpfTtyZXR1cm4gci5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixsKSxyLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGMpLHIuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLGUucmVwb3J0UHJvZ3Jlc3MmJihyLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixkKSxudWxsIT09byYmci51cGxvYWQmJnIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixwKSksci5zZW5kKG8pLGkubmV4dCh7dHlwZTptaC5TZW50fSksKCk9PntyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsYyksZS5yZXBvcnRQcm9ncmVzcyYmKHIucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGQpLG51bGwhPT1vJiZyLnVwbG9hZCYmci51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxyLnJlYWR5U3RhdGUhPT1yLkRPTkUmJnIuYWJvcnQoKX19KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihFbSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE80PW5ldyBwZSgiWFNSRl9DT09LSUVfTkFNRSIpLGs0PW5ldyBwZSgiWFNSRl9IRUFERVJfTkFNRSIpLFZBPWNsYXNze30scTJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZG9jPWUsdGhpcy5wbGF0Zm9ybT1pLHRoaXMuY29va2llTmFtZT1yLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZlciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2xldCBlPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGUhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1xRChlLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWUpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSxqKEdkKSxqKE80KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQTQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudG9rZW5TZXJ2aWNlPWUsdGhpcy5oZWFkZXJOYW1lPWl9aW50ZXJjZXB0KGUsaSl7bGV0IHI9ZS51cmwudG9Mb3dlckNhc2UoKTtpZigiR0VUIj09PWUubWV0aG9kfHwiSEVBRCI9PT1lLm1ldGhvZHx8ci5zdGFydHNXaXRoKCJodHRwOi8vIil8fHIuc3RhcnRzV2l0aCgiaHR0cHM6Ly8iKSlyZXR1cm4gaS5oYW5kbGUoZSk7bGV0IG89dGhpcy50b2tlblNlcnZpY2UuZ2V0VG9rZW4oKTtyZXR1cm4gbnVsbCE9PW8mJiFlLmhlYWRlcnMuaGFzKHRoaXMuaGVhZGVyTmFtZSkmJihlPWUuY2xvbmUoe2hlYWRlcnM6ZS5oZWFkZXJzLnNldCh0aGlzLmhlYWRlck5hbWUsbyl9KSksaS5oYW5kbGUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVkEpLGooazQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxZMmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuYmFja2VuZD1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNoYWluPW51bGx9aGFuZGxlKGUpe2lmKG51bGw9PT10aGlzLmNoYWluKXtsZXQgaT10aGlzLmluamVjdG9yLmdldChIQSxbXSk7dGhpcy5jaGFpbj1pLnJlZHVjZVJpZ2h0KChyLG8pPT5uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLm5leHQ9dCx0aGlzLmludGVyY2VwdG9yPWV9aGFuZGxlKHQpe3JldHVybiB0aGlzLmludGVyY2VwdG9yLmludGVyY2VwdCh0LHRoaXMubmV4dCl9fShyLG8pLHRoaXMuYmFja2VuZCl9cmV0dXJuIHRoaXMuY2hhaW4uaGFuZGxlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEJBKSxqKFhuKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksWDJlPSgoKT0+e2NsYXNzIG57c3RhdGljIGRpc2FibGUoKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOkE0LHVzZUNsYXNzOmoyZX1dfX1zdGF0aWMgd2l0aE9wdGlvbnMoZT17fSl7cmV0dXJue25nTW9kdWxlOm4scHJvdmlkZXJzOltlLmNvb2tpZU5hbWU/e3Byb3ZpZGU6TzQsdXNlVmFsdWU6ZS5jb29raWVOYW1lfTpbXSxlLmhlYWRlck5hbWU/e3Byb3ZpZGU6azQsdXNlVmFsdWU6ZS5oZWFkZXJOYW1lfTpbXV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltBNCx7cHJvdmlkZTpIQSx1c2VFeGlzdGluZzpBNCxtdWx0aTohMH0se3Byb3ZpZGU6VkEsdXNlQ2xhc3M6cTJlfSx7cHJvdmlkZTpPNCx1c2VWYWx1ZToiWFNSRi1UT0tFTiJ9LHtwcm92aWRlOms0LHVzZVZhbHVlOiJYLVhTUkYtVE9LRU4ifV19KSxufSkoKSxfJD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltWbSx7cHJvdmlkZTpMQSx1c2VDbGFzczpZMmV9LGckLHtwcm92aWRlOkJBLHVzZUV4aXN0aW5nOmckfV0saW1wb3J0czpbWDJlLndpdGhPcHRpb25zKHtjb29raWVOYW1lOiJYU1JGLVRPS0VOIixoZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4ifSldfSksbn0pKCksVUE9ImZlYXR1cmUiLGV2PU1yKFVBKSxnaD1KKGV2LG49Pm4uaXNGZWF0dXJlRmxhZ3NMb2FkZWQpLGJzPUooZXYsbj0+KHsuLi5uLmRlZmF1bHRGbGFncywuLi5uLmZsYWdPdmVycmlkZXN9KSkseSQ9SihldixuPT5uLmRlZmF1bHRGbGFncyksekE9SihldixuPT5uLmZsYWdPdmVycmlkZXN8fHt9KSxIbT1KKGV2LG49Pm4ubWV0YWRhdGEpLGpBPUooZXYsbj0+e2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuLmZsYWdPdmVycmlkZXMpe2xldCBpPW4ubWV0YWRhdGFbZV07aSYmaS5xdWVyeVBhcmFtT3ZlcnJpZGUmJmkuc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW4mJih0W2VdPW4uZmxhZ092ZXJyaWRlc1tlXSl9cmV0dXJuIHR9KSxiJD1KKGJzLG49Pm4uaXNBdXRvRGFya01vZGVBbGxvd2VkKSxRdT1KKGJzLG49Pm51bGwhPT1uLmVuYWJsZURhcmtNb2RlT3ZlcnJpZGU/bi5lbmFibGVEYXJrTW9kZU92ZXJyaWRlOm4uZGVmYXVsdEVuYWJsZURhcmtNb2RlKSxHQT1KKGJzLG49Pm4uZW5hYmxlRGFya01vZGVPdmVycmlkZSkseCQ9SihicyxuPT5uLmVuYWJsZWRFeHBlcmltZW50YWxQbHVnaW5zKSxDJD1KKGJzLG49Pm4uaW5Db2xhYiksV0E9SihicyxuPT5uLm1ldHJpY3NJbWFnZVN1cHBvcnRFbmFibGVkKSxNJD1KKGJzLG49Pm4uZW5hYmxlZExpbmtlZFRpbWUpLHckPUooYnMsbj0+bi5mb3JjZVN2ZyksUyQ9SihicyxuPT5uLmVuYWJsZWRTY2FsYXJEYXRhVGFibGUpLEUkPUooYnMsbj0+bi5lbmFibGVTaG93RmxhZ3MpLFQkPUooYnMsbj0+bi5hbGxvd1JhbmdlU2VsZWN0aW9uKSxEJD1KKGJzLG49Pm4uZW5hYmxlZFByb3NwZWN0aXZlRm9iKSxxQT1KKGJzLG49Pm4uZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbik7ZnVuY3Rpb24gUTJlKG4pe2xldCB0PXt9O2ZvcihsZXRbZSxpXW9mIG4uZW50cmllcygpKXRbZV09aTtyZXR1cm4gdH1mdW5jdGlvbiBGNChuKXtsZXQgdD1uLmhlYWRlcnN8fG5ldyBobDtyZXR1cm4gdD10LmFwcGVuZCgiWC1YU1JGLVByb3RlY3RlZCIsIjEiKSx7Li4ubixoZWFkZXJzOnR9fXZhciBrYT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFwcFJvb3RQcm92aWRlcj1lLHRoaXMuaHR0cD1pLHRoaXMuc3RvcmU9cn1yZXNvbHZlQXBwUm9vdChlKXtyZXR1cm4gZS5zdGFydHNXaXRoKCIvIik/dGhpcy5hcHBSb290UHJvdmlkZXIuZ2V0QWJzUGF0aG5hbWVXaXRoQXBwUm9vdChlKTplfWdldChlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksaSl9cG9zdChlLGkscj17fSl7cmV0dXJuIHI9RjQociksdGhpcy5zdG9yZS5zZWxlY3QoZ2gpLnBpcGUoWWUobz0+Qm9vbGVhbihvKSksUXQoMSksV3QodGhpcy5zdG9yZS5zZWxlY3QoQyQpKSx4bigoWyxvXSk9PntsZXQgcz10aGlzLnJlc29sdmVBcHBSb290KGUpO3JldHVybiBvP3RoaXMuaHR0cC5nZXQocyx7aGVhZGVyczpyLmhlYWRlcnM/P3t9LHBhcmFtczpRMmUoaSl9KTp0aGlzLmh0dHAucG9zdChzLGkscil9KSl9cHV0KGUsaSxyPXt9KXtyZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLnJlc29sdmVBcHBSb290KGUpLGksRjQocikpfWRlbGV0ZShlLGk9e30pe3JldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMucmVzb2x2ZUFwcFJvb3QoZSksRjQoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKExtKSxqKFZtKSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksS3U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpba2FdLGltcG9ydHM6W18kLFFfXX0pLG59KSgpLCRsPSgoKT0+KGZ1bmN0aW9uKG4pe24uVU5LTk9XTj0iVU5LTk9XTiIsbi5OT1RfRk9VTkQ9Ik5PVF9GT1VORCIsbi5QRVJNSVNTSU9OX0RFTklFRD0iUEVSTUlTU0lPTl9ERU5JRUQifSgkbHx8KCRsPXt9KSksJGwpKSgpLEEkPW5ldyBwZSgiVGVuc29yQm9hcmQgYnJhbmQgbmFtZSIpLFJvPSgoKT0+KGZ1bmN0aW9uKG4pe24uU1RFUD0ic3RlcCIsbi5XQUxMX1RJTUU9IndhbGxfdGltZSIsbi5SRUxBVElWRT0icmVsYXRpdmUifShSb3x8KFJvPXt9KSksUm8pKSgpLHpyPSgoKT0+KGZ1bmN0aW9uKG4pe24uT0ZGU0VUPSJvZmZzZXQiLG4uT1ZFUkxBWT0ib3ZlcmxheSJ9KHpyfHwoenI9e30pKSx6cikpKCk7ZnVuY3Rpb24gSSQobil7bGV0IHQ9JGwuVU5LTk9XTjtyZXR1cm4gbiBpbnN0YW5jZW9mIG5wJiYoNDA0PT09bi5zdGF0dXMmJih0PSRsLk5PVF9GT1VORCksNDAzPT09bi5zdGF0dXMmJih0PSRsLlBFUk1JU1NJT05fREVOSUVEKSksd2MobmV3IE9NKHQpKX12YXIgT009Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5mYWlsdXJlQ29kZT10fX0sWUE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZSx0aGlzLnRmQmFja2VuZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1iYWNrZW5kIikudGZfYmFja2VuZH1mZXRjaFBsdWdpbnNMaXN0aW5nKGUpe2xldCBpPWZ1bmN0aW9uKG4pe2lmKCFuLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgdD1uZXcgVVJMU2VhcmNoUGFyYW1zO2ZvcihsZXQgZSBvZiBuKXQuYXBwZW5kKCJleHBlcmltZW50YWxQbHVnaW4iLGUpO3JldHVybiB0fShlKSxyPWk/YGRhdGEvcGx1Z2luc19saXN0aW5nPyR7aS50b1N0cmluZygpfWA6ImRhdGEvcGx1Z2luc19saXN0aW5nIjtyZXR1cm4gdGhpcy5odHRwLmdldChyKS5waXBlKGZvKEkkKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiBscihbdGhpcy5odHRwLmdldCgiZGF0YS9lbnZpcm9ubWVudCIpLEVvKHRoaXMudGZCYWNrZW5kLmVudmlyb25tZW50U3RvcmUucmVmcmVzaCgpKV0pLnBpcGUoTCgoW3JdKT0+ciksZm8oSSQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihrYSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLFAkPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1lBXSxpbXBvcnRzOltLdV19KSxufSkoKSxPZT0oKCk9PihmdW5jdGlvbihuKXtuW24uTk9UX0xPQURFRD0wXT0iTk9UX0xPQURFRCIsbltuLkxPQURFRD0xXT0iTE9BREVEIixuW24uTE9BRElORz0yXT0iTE9BRElORyIsbltuLkZBSUxFRD0zXT0iRkFJTEVEIn0oT2V8fChPZT17fSkpLE9lKSkoKSxadT1iZSgiW0NvcmVdIFBsdWdpbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWEE9YmUoIltDb3JlXSBQbHVnaW4gVXJsIEhhc2ggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFIkPWJlKCJbQ29yZV0gTG9hZGVkIiksRmE9YmUoIltDb3JlXSBVc2VyIFRyaWdnZXJlZCBSZWxvYWQiKSxhYT1iZSgiW0NvcmVdIEF1dG8gUmVsb2FkIiksUUE9YmUoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIFJlcXVlc3RlZCIpLFVtPWJlKCJbQ29yZV0gUGx1Z2luTGlzdGluZyBGZXRjaCBTdWNjZXNzZnVsIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksa009YmUoIltDb3JlXSBQbHVnaW5MaXN0aW5nIEZldGNoIEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEtBPWJlKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBSZXF1ZXN0ZWQiKSxaQT1iZSgiW0NvcmVdIFBvbHltZXIgQ29tcG9uZW50IFJ1bnMgRmV0Y2ggU3VjY2Vzc2Z1bCIpLEpBPWJlKCJbQ29yZV0gUG9seW1lciBDb21wb25lbnQgUnVucyBGZXRjaCBGYWlsZWQiKSwkQT1iZSgiW0NvcmVdIEVudmlyb25tZW50IEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPJD1iZSgiW0NvcmVdIFJ1biBTZWxlY3Rpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGskPWJlKCJbQ29yZV0gUnVuIEZldGNoIFN1Y2Nlc3NmdWwiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxudj1iZSgiW0NvcmVdIFNpZGUgQmFyIFdpZHRoIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KTtmdW5jdGlvbiB6bShuLHQsZSl7bGV0IGk9T2JqZWN0LmtleXMobikscj17Li4ubiwuLi50LHByaXZhdGVOYW1lc3BhY2VkU3RhdGU6e319O3JldHVybntpbml0aWFsU3RhdGU6cixyZWR1Y2Vyczp2cihyLFNlKEpsLChhLHtiZWZvcmU6bCxhZnRlcjpjLGJlZm9yZU5hbWVzcGFjZUlkOnUsYWZ0ZXJOYW1lc3BhY2VJZDpkfSk9PntsZXQgcD1hO3JldHVybiB1IT09ZCYmKHA9ZnVuY3Rpb24oYSxsLGMpe2xldCB1PXsuLi5hLnByaXZhdGVOYW1lc3BhY2VkU3RhdGV9O2lmKGwpe2xldCBwPXt9O2ZvcihsZXQgaCBvZiBpKXBbaF09YVtoXTt1PXsuLi51LFtsXTpwfX1sZXQgZD17fTtyZXR1cm4gYS5wcml2YXRlTmFtZXNwYWNlZFN0YXRlPy5bY10/ZD1hLnByaXZhdGVOYW1lc3BhY2VkU3RhdGVbY106bCYmKGQ9biksey4uLmEsLi4uZCxwcml2YXRlTmFtZXNwYWNlZFN0YXRlOnV9fShhLHUsZCkpLGUmJihwPWUocCxsLGMpKSxwfSkpfX1mdW5jdGlvbiBqbSguLi5uKXtyZXR1cm4odCxlKT0+e2xldCBpPXQ7Zm9yKGxldCByIG9mIG4paT1yKGksZSk7cmV0dXJuIGl9fXZhciBGTT17YWN0aXZlUGx1Z2luOm51bGwscGx1Z2luczp7fSxjb3JlRGF0YUxvYWRTdGF0ZTp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0scGx1Z2luc0xpc3RMb2FkZWQ6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGwsZmFpbHVyZUNvZGU6bnVsbH0sZW52aXJvbm1lbnQ6e2RhdGFfbG9jYXRpb246IiIsd2luZG93X3RpdGxlOiIifSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0scG9seW1lckludGVyb3BSdW5zOltdLHBvbHltZXJJbnRlcm9wUnVuU2VsZWN0aW9uOm5ldyBTZXQsc2lkZUJhcldpZHRoSW5QZXJjZW50OjIwfSwkMmU9dnIoRk0sU2UoWnUsWEEsKG4se3BsdWdpbjp0fSk9Pih7Li4ubixhY3RpdmVQbHVnaW46dH0pKSxTZShRQSxuPT4oey4uLm4sY29yZURhdGFMb2FkU3RhdGU6ey4uLm4uY29yZURhdGFMb2FkU3RhdGUsc3RhdGU6T2UuTE9BRElOR30scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6T2UuTE9BRElOR319KSksU2Uoa00sKG4se2ZhaWx1cmVDb2RlOnR9KT0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOk9lLkZBSUxFRH0scGx1Z2luc0xpc3RMb2FkZWQ6ey4uLm4ucGx1Z2luc0xpc3RMb2FkZWQsc3RhdGU6T2UuRkFJTEVELGZhaWx1cmVDb2RlOnR9fSkpLFNlKFVtLChuLHtwbHVnaW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLmZpbmQocz0+dFtzXS5lbmFibGVkKXx8bnVsbCxpPW4uYWN0aXZlUGx1Z2lufHxlLHI9RGF0ZS5ub3coKSxvPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucG9seW1lclJ1bnNMb2FkU3RhdGUuc3RhdGU9PT1PZS5MT0FERUQmJihvPXtzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnJ9KSx7Li4ubixhY3RpdmVQbHVnaW46aSxjb3JlRGF0YUxvYWRTdGF0ZTpvLHBsdWdpbnM6dCxwbHVnaW5zTGlzdExvYWRlZDp7c3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpyLGZhaWx1cmVDb2RlOm51bGx9fX0pLFNlKEtBLG49Pih7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTp7Li4ubi5jb3JlRGF0YUxvYWRTdGF0ZSxzdGF0ZTpPZS5MT0FESU5HfSxwb2x5bWVyUnVuc0xvYWRTdGF0ZTp7Li4ubi5wb2x5bWVyUnVuc0xvYWRTdGF0ZSxzdGF0ZTpPZS5MT0FESU5HfX0pKSxTZShaQSxuPT57bGV0IHQ9RGF0ZS5ub3coKSxlPW4uY29yZURhdGFMb2FkU3RhdGU7cmV0dXJuIG4ucGx1Z2luc0xpc3RMb2FkZWQuc3RhdGU9PT1PZS5MT0FERUQmJihlPXtzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOnR9KSx7Li4ubixjb3JlRGF0YUxvYWRTdGF0ZTplLHBvbHltZXJSdW5zTG9hZFN0YXRlOnsuLi5uLnBvbHltZXJSdW5zTG9hZFN0YXRlLHN0YXRlOk9lLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6dH19fSksU2UoSkEsbj0+KHsuLi5uLGNvcmVEYXRhTG9hZFN0YXRlOnsuLi5uLmNvcmVEYXRhTG9hZFN0YXRlLHN0YXRlOk9lLkZBSUxFRH0scG9seW1lclJ1bnNMb2FkU3RhdGU6ey4uLm4ucG9seW1lclJ1bnNMb2FkU3RhdGUsc3RhdGU6T2UuRkFJTEVEfX0pKSxTZSgkQSwobix7ZW52aXJvbm1lbnQ6dH0pPT4oey4uLm4sZW52aXJvbm1lbnQ6dH0pKSxTZShrJCwobix7cnVuczp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1bnM6dH0pKSxTZShPJCwobix7bmV4dFNlbGVjdGlvbjp0fSk9Pih7Li4ubixwb2x5bWVySW50ZXJvcFJ1blNlbGVjdGlvbjpuZXcgU2V0KHQpfSkpLFNlKG52LChuLHt3aWR0aEluUGVyY2VudDp0fSk9Pih7Li4ubixzaWRlQmFyV2lkdGhJblBlcmNlbnQ6TWF0aC5taW4oTWF0aC5tYXgoMCx0KSwxMDApfSkpLFNlKFljLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0IGU9ey4uLm59LGk9dC5zaWRlQmFyV2lkdGhJblBlcmNlbnQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wJiZpPD0xMDAmJihlLnNpZGVCYXJXaWR0aEluUGVyY2VudD1pKSxlfSkpLHtyZWR1Y2VyczplUGV9PXptKEZNLHt9KTtmdW5jdGlvbiBGJChuLHQpe3JldHVybiBqbSgkMmUsZVBlKShuLHQpfXZhciBfaD1NcigiY29yZSIpLG5JPUooX2gsbj0+bi5wbHVnaW5zTGlzdExvYWRlZCksTiQ9SihfaCxuPT5uLnBvbHltZXJSdW5zTG9hZFN0YXRlKSxMJD1KKF9oLG49Pm4uY29yZURhdGFMb2FkU3RhdGUuc3RhdGUpLGl2PUooX2gsbj0+bi5jb3JlRGF0YUxvYWRTdGF0ZS5sYXN0TG9hZGVkVGltZUluTXMpLFJzPUooX2gsbj0+bi5hY3RpdmVQbHVnaW4pLHJ2PUooX2gsbj0+bi5wbHVnaW5zKSxvdj1KKF9oLG49Pm4uZW52aXJvbm1lbnQpLGlJPUooX2gsbj0+bi5zaWRlQmFyV2lkdGhJblBlcmNlbnQpLEIkPW5ldyBTZXQoW2hpLkNPTVBBUkVfRVhQRVJJTUVOVCxoaS5FWFBFUklNRU5ULGhpLk5PVF9TRVRdKSxWJD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMud2ViYXBwRGF0YVNvdXJjZT1yLHRoaXMudGZCYWNrZW5kPXtyZWY6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtYmFja2VuZCIpLnRmX2JhY2tlbmR9LHRoaXMub25EYXNoYm9hcmRMb2FkJD1KdCh0aGlzLmFjdGlvbnMkLnBpcGUoaWkoUiQsSmwpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFJhKSkseWkoKFssb10sWyxzXSk9PlBzKG8scykpKSx0aGlzLmFjdGlvbnMkLnBpcGUoaWkoYWEsRmEpKSkucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChxdSkpLFllKChbLG9dKT0+QiQuaGFzKG8pKSxiMCgxLHZvaWQgMCx7bGVhZGluZzohMH0pKSx0aGlzLmZldGNoV2ViQXBwRGF0YSQ9Y3IoKCk9PntsZXQgbz10aGlzLm9uRGFzaGJvYXJkTG9hZCQucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChuSSksdGhpcy5zdG9yZS5zZWxlY3QoeCQpKSxZZSgoWyx7c3RhdGU6YX1dKT0+YSE9PU9lLkxPQURJTkcpLGt0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKFFBKCkpKSx4bigoWywsYV0pPT5mdW5jdGlvbiguLi5uKXtsZXQgdD12dShuKSxlPW0xKG4pO3JldHVybiBlLmxlbmd0aD9uZXcgdW4oaT0+e2xldCByPWUubWFwKCgpPT5bXSksbz1lLm1hcCgoKT0+ITEpO2kuYWRkKCgpPT57cj1vPW51bGx9KTtmb3IobGV0IHM9MDshaS5jbG9zZWQmJnM8ZS5sZW5ndGg7cysrKWdpKGVbc10pLnN1YnNjcmliZShqdChpLGE9PntpZihyW3NdLnB1c2goYSksci5ldmVyeShsPT5sLmxlbmd0aCkpe2xldCBsPXIubWFwKGM9PmMuc2hpZnQoKSk7aS5uZXh0KHQ/dCguLi5sKTpsKSxyLnNvbWUoKGMsdSk9PiFjLmxlbmd0aCYmb1t1XSkmJmkuY29tcGxldGUoKX19LCgpPT57b1tzXT0hMCwhcltzXS5sZW5ndGgmJmkuY29tcGxldGUoKX0pKTtyZXR1cm4oKT0+e3I9bz1udWxsfX0pOmVvfSh0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hQbHVnaW5zTGlzdGluZyhhKSx0aGlzLmZldGNoRW52aXJvbm1lbnQoKSkucGlwZShMKChbbF0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChVbSh7cGx1Z2luczpsfSkpfSksZm8obD0+KHRoaXMuc3RvcmUuZGlzcGF0Y2goa00obCBpbnN0YW5jZW9mIE9NP3tmYWlsdXJlQ29kZTpsLmZhaWx1cmVDb2RlfTp7ZmFpbHVyZUNvZGU6JGwuVU5LTk9XTn0pKSxlbykpKSkpO3JldHVybiBKdChvLHRoaXMub25EYXNoYm9hcmRMb2FkJC5waXBlKEwoKFssYV0pPT5hKSx1aShhPT5hIT09aGkuQ09NUEFSRV9FWFBFUklNRU5UP1h0KFtdKTp0aGlzLnN0b3JlLnNlbGVjdChZdSkucGlwZSh5aSgobCxjKT0+e2xldCB1PU9iamVjdC5lbnRyaWVzKGwpLGQ9bmV3IE1hcChPYmplY3QuZW50cmllcyhjKSk7aWYodS5sZW5ndGghPT1kLnNpemUpcmV0dXJuITE7Zm9yKGxldFtwLGhdb2YgdSlpZighZC5nZXQocCl8fGQuZ2V0KHApLmFsaWFzVGV4dCE9PWguYWxpYXNUZXh0fHxkLmdldChwKS5hbGlhc051bWJlciE9PWguYWxpYXNOdW1iZXIpcmV0dXJuITE7cmV0dXJuITB9KSxPbCgwKSxiMCg1MDAsdm9pZCAwLHtsZWFkaW5nOiEwLHRyYWlsaW5nOiEwfSkpKSxXdCh0aGlzLnN0b3JlLnNlbGVjdChxdSksdGhpcy5zdG9yZS5zZWxlY3QoTiQpKSxZZSgoWyxhLGxdKT0+QiQuaGFzKGEpJiZsLnN0YXRlIT09T2UuTE9BRElORyksa3QoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEtBKCkpfSksdWkoKCk9PnRoaXMucmVmcmVzaFBvbHltZXJSdW5zKCkpLGt0KCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaChaQSgpKX0pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChKQSgpKSxlbykpKSl9LHtkaXNwYXRjaDohMX0pLHRoaXMuZGlzcGF0Y2hDaGFuZ2VQbHVnaW4kPWNyKCgpPT5KdCh0aGlzLm9uRGFzaGJvYXJkTG9hZCQsdGhpcy5hY3Rpb25zJC5waXBlKGlpKFVtKSkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoUnMpKSxMKChbLG9dKT0+bykseWkoKSxZZShvPT5udWxsIT09byksUXQoMSksa3Qobz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goWnUoe3BsdWdpbjpvfSkpfSkpLHtkaXNwYXRjaDohMX0pfXJlZnJlc2hQb2x5bWVyUnVucygpe3JldHVybiBFbyh0aGlzLnRmQmFja2VuZC5yZWYucnVuc1N0b3JlLnJlZnJlc2goKSl9ZmV0Y2hFbnZpcm9ubWVudCgpe3JldHVybiB0aGlzLndlYmFwcERhdGFTb3VyY2UuZmV0Y2hFbnZpcm9ubWVudCgpLnBpcGUoa3QoZT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goJEEoe2Vudmlyb25tZW50OmV9KSl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooWUEpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxOND1uZXcgcGUoIkNvcmUgRmVhdHVyZSBDb25maWciKTtmdW5jdGlvbiBIJChuKXtyZXR1cm57aW5pdGlhbFN0YXRlOnsuLi5GTSxhY3RpdmVQbHVnaW46bi5nZXRQbHVnaW5JZCgpfHxudWxsfX19ZnVuY3Rpb24gaVBlKCl7cmV0dXJuIEooaUksbj0+KHtzaWRlQmFyV2lkdGhJblBlcmNlbnQ6bn0pKX12YXIgZWM9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6TjQsZGVwczpbZmhdLHVzZUZhY3Rvcnk6SCR9XSxpbXBvcnRzOltyby5mb3JGZWF0dXJlKFtWJF0pLHdyLmZvckZlYXR1cmUoImNvcmUiLEYkLE40KSxQJCxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKGlQZSldfSksbn0pKCksVSQ9bmV3IHBlKCJbQWxlcnRdIEFjdGlvbi1Uby1BbGVydCBQcm92aWRlciIpLEp1PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5wcm92aWRlcnM9bmV3IE1hcDtmb3IobGV0IGkgb2YgZXx8W10pZm9yKGxldCByIG9mIGkpe2lmKHRoaXMucHJvdmlkZXJzLmhhcyhyLmFjdGlvbkNyZWF0b3IudHlwZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYCIke3IuYWN0aW9uQ3JlYXRvci50eXBlfSIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGZvciBhbGVydHMuIE11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgYWN0aW9uIGlzIG5vdCBhbGxvd2VkLmApO3RoaXMucHJvdmlkZXJzLnNldChyLmFjdGlvbkNyZWF0b3IudHlwZSxyLmFsZXJ0RnJvbUFjdGlvbil9fWdldEFsZXJ0RnJvbUFjdGlvbihlKXtsZXQgaT10aGlzLnByb3ZpZGVycy5nZXQoZS50eXBlKTtyZXR1cm4gaT9pKGUpOm51bGx9c3RhdGljIHJlZ2lzdGVyQWxlcnRBY3Rpb25zKGUpe3JldHVybntuZ01vZHVsZTpuLHByb3ZpZGVyczpbe3Byb3ZpZGU6VSQsbXVsdGk6ITAsdXNlRmFjdG9yeTplfV19fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFUkLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksckk9YmUoIltSdW5zXSBGZXRjaCBSdW5zIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHZoPWJlKCJbUnVuc10gRmV0Y2ggUnVucyBTdWNjZWVkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzdj1iZSgiW1J1bnNdIEZldGNoIFJ1bnMgRmFpbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksb0k9YmUoIltSdW5zXSBSdW4gU2VsZWN0aW9uIFRvZ2dsZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzST1iZSgiW1J1bnNdIFNpbmdsZSBSdW4gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhST1iZSgiW1J1bnNdIFJ1biBQYWdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbEk9YmUoIltSdW5zXSBSdW4gU2VsZWN0b3IgUGFnaW5hdGlvbiBPcHRpb24gQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGNJPWJlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5NPWJlKCJbUnVuc10gUnVuIFNlbGVjdG9yIFJlZ2V4IEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdUk9YmUoIltSdW5zXSBSdW4gQ29sb3IgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGRJPWJlKCJbUnVuc10gUnVuIFRhYmxlIFNob3duIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYXY9YmUoIltSdW5zXSBSdW4gR3JvdXAgQnkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLENpPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5ESVNDUkVURT0wXT0iRElTQ1JFVEUiLG5bbi5JTlRFUlZBTD0xXT0iSU5URVJWQUwifShDaXx8KENpPXt9KSksQ2kpKSgpLHBJPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEdtPXt9O0JFKEdtLHtocGFyYW1zRGlzY3JldGVIcGFyYW1GaWx0ZXJDaGFuZ2VkOigpPT5WNCxocGFyYW1zSW50ZXJ2YWxIcGFyYW1GaWx0ZXJDaGFuZ2VkOigpPT5INCxocGFyYW1zTWV0cmljRmlsdGVyQ2hhbmdlZDooKT0+VTR9KTt2YXIgVjQ9YmUoIltIcGFyYW1zXSBIcGFyYW1zIERpc2NyZXRlIEhwYXJhbSBGaWx0ZXIgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEg0PWJlKCJbSHBhcmFtc10gSHBhcmFtcyBJbnRlcnZhbCBIcGFyYW0gRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxVND1iZSgiW0hwYXJhbXNdIEhwYXJhbXMgTWV0cmljIEZpbHRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24gV20obil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFsuLi5uXS5zb3J0KCkpfWZ1bmN0aW9uIExNKG4pe2xldCB0PW5ldyBNYXAsZT1uZXcgTWFwLGk9bmV3IE1hcDtmb3IobGV0IHIgb2Ygbilmb3IobGV0W28sc11vZiByKWlmKHMudHlwZT09PUNpLkRJU0NSRVRFKXtsZXR7cG9zc2libGVWYWx1ZXM6YSx2YWx1ZXM6bH09ZS5nZXQobyl8fHtwb3NzaWJsZVZhbHVlczpuZXcgU2V0LHZhbHVlczpuZXcgU2V0fTtmb3IobGV0IGMgb2Ygcy5maWx0ZXJWYWx1ZXMpbC5hZGQoYyk7Zm9yKGxldCBjIG9mIHMucG9zc2libGVWYWx1ZXMpYS5hZGQoYyk7ZS5zZXQobyx7cG9zc2libGVWYWx1ZXM6YSx2YWx1ZXM6bH0pfWVsc2V7bGV0IGE9aS5nZXQobyk7aS5zZXQobyx7ZmlsdGVyTG93ZXJWYWx1ZTpNYXRoLm1pbihzLmZpbHRlckxvd2VyVmFsdWUsYT8uZmlsdGVyTG93ZXJWYWx1ZT8/MS8wKSxmaWx0ZXJVcHBlclZhbHVlOk1hdGgubWF4KHMuZmlsdGVyVXBwZXJWYWx1ZSxhPy5maWx0ZXJVcHBlclZhbHVlPz8tMS8wKSxtaW5WYWx1ZTpNYXRoLm1pbihzLm1pblZhbHVlLGE/Lm1pblZhbHVlPz8xLzApLG1heFZhbHVlOk1hdGgubWF4KHMubWF4VmFsdWUsYT8ubWF4VmFsdWU/Py0xLzApfSl9Zm9yKGxldFtyLHt2YWx1ZXM6byxwb3NzaWJsZVZhbHVlczpzfV1vZiBlKXQuc2V0KHIse3R5cGU6Q2kuRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpbLi4uc10sZmlsdGVyVmFsdWVzOlsuLi5vXX0pO2ZvcihsZXRbcix7bWluVmFsdWU6byxtYXhWYWx1ZTpzLGZpbHRlckxvd2VyVmFsdWU6YSxmaWx0ZXJVcHBlclZhbHVlOmx9XW9mIGkpe2lmKHQuaGFzKHIpKXtsZXQgYz10LmdldChyKTtpZihjLnR5cGU9PT1DaS5ESVNDUkVURSYmYy5wb3NzaWJsZVZhbHVlcy5zb21lKHU9PnUpKXRocm93IG5ldyBSYW5nZUVycm9yKGBDYW5ub3QgY29tYmluZSBocGFyYW0sICR7cn0sIGFzIGl0IGlzIG9mIG1peGVkIHR5cGVzLmApfXQuc2V0KHIse3R5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpvLG1heFZhbHVlOnMsZmlsdGVyTG93ZXJWYWx1ZTphLGZpbHRlclVwcGVyVmFsdWU6bH0pfXJldHVybiB0fWZ1bmN0aW9uIGhJKG4pe2xldCB0PW5ldyBNYXA7Zm9yKGxldCBlIG9mIG4pZm9yKGxldFtpLHJdb2YgZSl7bGV0IG89dC5nZXQoaSk7dC5zZXQoaSx7dHlwZTpDaS5JTlRFUlZBTCxpbmNsdWRlVW5kZWZpbmVkOiEwLC4uLm8sbWluVmFsdWU6TWF0aC5taW4oci5taW5WYWx1ZSxvPy5taW5WYWx1ZT8/MS8wKSxtYXhWYWx1ZTpNYXRoLm1heChyLm1heFZhbHVlLG8/Lm1heFZhbHVlPz8tMS8wKSxmaWx0ZXJMb3dlclZhbHVlOk1hdGgubWluKHIuZmlsdGVyTG93ZXJWYWx1ZSxvPy5maWx0ZXJMb3dlclZhbHVlPz8xLzApLGZpbHRlclVwcGVyVmFsdWU6TWF0aC5tYXgoci5maWx0ZXJVcHBlclZhbHVlLG8/LmZpbHRlclVwcGVyVmFsdWU/Py0xLzApfSl9cmV0dXJuIHR9dmFyIGxQZT12cih7c3BlY3M6e30sZmlsdGVyczp7fX0sU2UoVjQsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkczplLGhwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99PXQscz1XbShlKSxhPW4uZmlsdGVyc1tzXT8/e2hwYXJhbXM6bmV3IE1hcH0sbD1hLmhwYXJhbXMuZ2V0KGkpO2lmKGwmJmwudHlwZSE9PUNpLkRJU0NSRVRFKXRocm93IG5ldyBSYW5nZUVycm9yKGBOZXcgZGlzY3JldGUgZmlsdGVyIG9mICR7aX0gY29uZmxpY3RzIGV4aXN0aW5nIGZpbHRlciBvZiBgK0NpW2wudHlwZV0pO2xldCBjPUxNKGUuZmlsdGVyKGg9PkJvb2xlYW4obi5zcGVjc1toXSkpLm1hcChoPT5uLnNwZWNzW2hdLmhwYXJhbS5kZWZhdWx0RmlsdGVycykpLmdldChpKTtpZighYyl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgaHBhcmFtLCAke2l9LCB3aGVuIGl0IGlzIG5vdCBrbm93biBmb3IgZXhwZXJpbWVudElkczogJHtlLmpvaW4oIiwgIil9YCk7aWYoYy50eXBlIT09Q2kuRElTQ1JFVEUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0ICR7aX0gd2hlbiBkZWZhdWx0IGZpbHRlciBpcyBub3Qgb2YgZGlzY3JldGUgdHlwZS5gKTtsZXQgdT1uZXcgU2V0KGMucG9zc2libGVWYWx1ZXMpLGQ9Wy4uLnJdLmZpbHRlcihoPT4hdS5oYXMoaCkpO2lmKGQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgTmV3IGZpbHRlciBmb3IgJHtpfSBoYXMgbW9yZSB0aGFuIG9uZSB2YWx1ZSB0aGF0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzcGVjLiBCYWQgdmFsdWVzOiAke2Quam9pbigiLCAiKX1gKTtsZXQgcD1uZXcgTWFwKGEuaHBhcmFtcyk7cmV0dXJuIHAuc2V0KGksey4uLmwsdHlwZTpDaS5ESVNDUkVURSxpbmNsdWRlVW5kZWZpbmVkOm8scG9zc2libGVWYWx1ZXM6Wy4uLnVdLGZpbHRlclZhbHVlczpyfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFtzXTp7Li4uYSxocGFyYW1zOnB9fX19KSxTZShINCwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsaHBhcmFtTmFtZTppLGZpbHRlckxvd2VyVmFsdWU6cixmaWx0ZXJVcHBlclZhbHVlOm8saW5jbHVkZVVuZGVmaW5lZDpzfT10LGE9V20oZSksbD1uLmZpbHRlcnNbYV0/P3ttZXRyaWNzOm5ldyBNYXAsaHBhcmFtczpuZXcgTWFwfSxjPWwuaHBhcmFtcy5nZXQoaSk7aWYoYyYmYy50eXBlIT09Q2kuSU5URVJWQUwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYE5ldyBpbnRlcnZhbCBmaWx0ZXIgb2YgJHtpfSBjb25mbGljdHMgZXhpc3RpbmcgZmlsdGVyIG9mIGArQ2lbYy50eXBlXSk7bGV0IHU9TE0oZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0uaHBhcmFtLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCF1KXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBocGFyYSwgJHtpfSwgd2hlbiBpdCBpcyBub3Qga25vd24gZm9yIGV4cGVyaW1lbnRJZHM6ICR7ZS5qb2luKCIsICIpfWApO2lmKHUudHlwZSE9PUNpLklOVEVSVkFMKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCAke2l9IHdoZW4gZGVmYXVsdCBmaWx0ZXIgaXMgbm90IG9mIGludGVydmFsIHR5cGUuYCk7bGV0IGQ9bmV3IE1hcChsLmhwYXJhbXMpO3JldHVybiBkLnNldChpLHsuLi5jLHR5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOnUubWluVmFsdWUsbWF4VmFsdWU6dS5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxocGFyYW1zOmR9fX19KSxTZShVNCwobix0KT0+e2xldHtleHBlcmltZW50SWRzOmUsbWV0cmljVGFnOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PXQsYT1XbShlKSxsPW4uZmlsdGVyc1thXT8/e21ldHJpY3M6bmV3IE1hcCxocGFyYW1zOm5ldyBNYXB9LGM9aEkoZS5maWx0ZXIocD0+Qm9vbGVhbihuLnNwZWNzW3BdKSkubWFwKHA9Pm4uc3BlY3NbcF0ubWV0cmljLmRlZmF1bHRGaWx0ZXJzKSkuZ2V0KGkpO2lmKCFjKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBtZXRyaWMsICR7aX0sIHdoZW4gaXQgaXMgbm90IGtub3duIGZvciBleHBlcmltZW50SWRzOiAke2Uuam9pbigiLCAiKX1gKTtsZXQgdT1sLm1ldHJpY3MuZ2V0KGkpLGQ9bmV3IE1hcChsLm1ldHJpY3MpO3JldHVybiBkLnNldChpLHsuLi51LHR5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDpzLG1pblZhbHVlOmMubWluVmFsdWUsbWF4VmFsdWU6Yy5tYXhWYWx1ZSxmaWx0ZXJMb3dlclZhbHVlOnIsZmlsdGVyVXBwZXJWYWx1ZTpvfSksey4uLm4sZmlsdGVyczp7Li4ubi5maWx0ZXJzLFthXTp7Li4ubCxtZXRyaWNzOmR9fX19KSxTZSh2aCwobix0KT0+e2lmKDA9PT1PYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLnNwZWNzfSxpPW5ldyBNYXAscj1uZXcgU2V0O2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyh0Lm5ld1J1bnNBbmRNZXRhZGF0YSkpe2xldCBzPW5ldyBNYXAsYT1uZXcgTWFwLGw9bmV3IE1hcCxjPW5ldyBNYXAse3J1bnM6dSxtZXRhZGF0YTpkfT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtvXTtmb3IobGV0IHAgb2YgdSl7bGV0IGg9ZC5ydW5Ub0hwYXJhbXNBbmRNZXRyaWNzW3AuaWRdO2lmKGgpZm9yKGxldCBmIG9mIGgubWV0cmljcyl7bGV0IG09aS5nZXQoZi50YWcpO2kuc2V0KGYudGFnLHttaW46bT9NYXRoLm1pbihtLm1pbixmLnZhbHVlKTpmLnZhbHVlLG1heDptP01hdGgubWF4KG0ubWF4LGYudmFsdWUpOmYudmFsdWV9KX19Zm9yKGxldHtuYW1lOnAsZG9tYWluOmh9b2YgZC5ocGFyYW1TcGVjcylpZihoLnR5cGU9PT1DaS5ESVNDUkVURSl7bGV0IGY9bC5nZXQocCl8fG5ldyBTZXQ7Zm9yKGxldCBtIG9mIGgudmFsdWVzKWYuYWRkKG0pO2wuc2V0KHAsZil9ZWxzZXtsZXQgZj1jLmdldChwKTtjLnNldChwLHttaW5WYWx1ZTpmP01hdGgubWluKGgubWluVmFsdWUsZi5taW5WYWx1ZSk6aC5taW5WYWx1ZSxtYXhWYWx1ZTpmP01hdGgubWF4KGgubWF4VmFsdWUsZi5tYXhWYWx1ZSk6aC5tYXhWYWx1ZX0pfWZvcihsZXQgcCBvZiBkLm1ldHJpY1NwZWNzKXIuYWRkKHAudGFnKTtmb3IobGV0W3AsaF1vZiBsKXMuc2V0KHAse3R5cGU6Q2kuRElTQ1JFVEUsaW5jbHVkZVVuZGVmaW5lZDohMCxwb3NzaWJsZVZhbHVlczpbLi4uaF0sZmlsdGVyVmFsdWVzOlsuLi5oXX0pO2ZvcihsZXRbcCx7bWluVmFsdWU6aCxtYXhWYWx1ZTpmfV1vZiBjKXMuc2V0KHAse3R5cGU6Q2kuSU5URVJWQUwsaW5jbHVkZVVuZGVmaW5lZDohMCxtaW5WYWx1ZTpoLG1heFZhbHVlOmYsZmlsdGVyTG93ZXJWYWx1ZTpoLGZpbHRlclVwcGVyVmFsdWU6Zn0pO2ZvcihsZXQgcCBvZiByKXtsZXQgaD1pLmdldChwKSxmPWg/Lm1pbj8/MCxtPWg/Lm1heD8/MDthLnNldChwLHt0eXBlOkNpLklOVEVSVkFMLGluY2x1ZGVVbmRlZmluZWQ6ITAsbWluVmFsdWU6ZixtYXhWYWx1ZTptLGZpbHRlckxvd2VyVmFsdWU6ZixmaWx0ZXJVcHBlclZhbHVlOm19KX1lW29dPXtocGFyYW06ey4uLmVbb10/LmhwYXJhbSxzcGVjczpkLmhwYXJhbVNwZWNzLGRlZmF1bHRGaWx0ZXJzOnN9LG1ldHJpYzp7Li4uZVtvXT8ubWV0cmljLHNwZWNzOmQubWV0cmljU3BlY3MsZGVmYXVsdEZpbHRlcnM6YX19fXJldHVybnsuLi5uLHNwZWNzOmV9fSkpO2Z1bmN0aW9uIHokKG4sdCl7cmV0dXJuIGxQZShuLHQpfXZhciBmST0iaHBhcmFtcyIsaiQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoZkkseiQpXX0pLG59KSgpLG1JPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltqJF19KSxufSkoKTtmdW5jdGlvbiBjUGUobix0KXtyZXR1cm5gJHt0fS8ke259YH12YXIgRyQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZX1mZXRjaFJ1bnMoZSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoImRhdGEvcnVucyIpLnBpcGUoTChpPT5pLm1hcChyPT4oe2lkOmNQZShyLGUpLG5hbWU6cixzdGFydFRpbWU6MH0pKSkpfWZldGNoSHBhcmFtc01ldGFkYXRhKGUpe3JldHVybiBYdCh7aHBhcmFtU3BlY3M6W10sbWV0cmljU3BlY3M6W10scnVuVG9IcGFyYW1zQW5kTWV0cmljczp7fX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGthKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksVyQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6cEksdXNlQ2xhc3M6RyR9XX0pLG59KSgpLHEkPUooTXIoImFsZXJ0cyIpLG49Pm4ubGF0ZXN0QWxlcnQpLF9JPSJleHBlcmltZW50cyIscFBlPUooTXIoX0kpLG49Pm4uZGF0YSksdkk9SihwUGUsKG4sdCk9PntsZXR7ZXhwZXJpbWVudElkOmV9PXQ7cmV0dXJuIG4uZXhwZXJpbWVudE1hcFtlXXx8bnVsbH0pLHJpPSgoKT0+KGZ1bmN0aW9uKG4pe24uU0NBTEFSUz0ic2NhbGFycyIsbi5ISVNUT0dSQU1TPSJoaXN0b2dyYW1zIixuLklNQUdFUz0iaW1hZ2VzIn0ocml8fChyaT17fSkpLHJpKSkoKSxKaT0oKCk9PihmdW5jdGlvbihuKXtuW24uU1RFUD0wXT0iU1RFUCIsbltuLlJFTEFUSVZFPTFdPSJSRUxBVElWRSIsbltuLldBTExfVElNRT0yXT0iV0FMTF9USU1FIn0oSml8fChKaT17fSkpLEppKSkoKSxCTT0idGltZXNlcmllcyI7ZnVuY3Rpb24gWCQobil7cmV0dXJuIG49PT1yaS5TQ0FMQVJTfHxuPT09cmkuSElTVE9HUkFNU3x8bj09PXJpLklNQUdFU312YXIgaFBlPVtyaS5JTUFHRVNdO2Z1bmN0aW9uIGZsKG4pe3JldHVybiBoUGUuaW5jbHVkZXMobil9dmFyIGZQZT1bcmkuSElTVE9HUkFNUyxyaS5JTUFHRVNdO2Z1bmN0aW9uIG1sKG4pe3JldHVybiBmUGUuaW5jbHVkZXMobil9ZnVuY3Rpb24gejQobil7cmV0dXJuIG1sKG4ucGx1Z2luKX12YXIgJHU9Y2xhc3N7fTtmdW5jdGlvbiBiSShuKXtyZXR1cm4gbi5oYXNPd25Qcm9wZXJ0eSgiZXJyb3IiKX12YXIgajQ9ImRhdGEvcGx1Z2luL3RpbWVzZXJpZXMiO2Z1bmN0aW9uIFEkKG4pe2xldCB0PW4uaW5kZXhPZigiLyIpO3JldHVybntydW46bi5zdWJzdHJpbmcodCsxKSxleHBlcmltZW50SWQ6bi5zdWJzdHJpbmcoMCx0KX19ZnVuY3Rpb24gWiQobix0KXtyZXR1cm5gJHt0fS8ke259YH1mdW5jdGlvbiBLJChuLHQpe2xldHtydW5Ub1NlcmllczplLHJ1bjppLC4uLnJ9PW4sbz17Li4ucn07cmV0dXJuIGUmJihvLnJ1blRvU2VyaWVzPUc0KGUsdCkpLGkmJihvLnJ1bklkPVokKGksdCkpLG99ZnVuY3Rpb24gRzQobix0KXtsZXQgZT17fTtmb3IobGV0IGkgaW4gbiluLmhhc093blByb3BlcnR5KGkpJiYoZVtaJChpLHQpXT1uW2ldKTtyZXR1cm4gZX12YXIgSiQ9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaHR0cD1lLHRoaXMuc3RvcmU9aX1mZXRjaFRhZ01ldGFkYXRhKGUpe2xldCBpPWUubWFwKG89PnRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7b30vJHtqNH0vdGFnc2ApLnBpcGUoTChhPT5mdW5jdGlvbihuLHQpe2xldCBlPXt9O2ZvcihsZXQgaSBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHI9aTtpZihmbChyKSl7bGV0e3RhZ1J1blNhbXBsZWRJbmZvOm8sLi4uc309bltyXSxhPXt9O2ZvcihsZXQgbCBpbiBvKW8uaGFzT3duUHJvcGVydHkobCkmJihhW2xdPUc0KG9bbF0sdCkpO2Vbcl09ey4uLnMsdGFnUnVuU2FtcGxlZEluZm86YX19ZWxzZXtsZXR7cnVuVGFnSW5mbzpvLC4uLnN9PW5bcl07ZVtyXT17Li4ucyxydW5UYWdJbmZvOkc0KG8sdCl9fX1yZXR1cm4gZX0oYSxvKSkpKSxyPXRoaXMuc3RvcmUuc2VsZWN0KGdoKS5waXBlKFllKEJvb2xlYW4pLFF0KDEpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFdBKSksTCgoWyxvXSk9Pm8pKTtyZXR1cm4gbHIoaSkucGlwZShXdChyKSxMKChbbyxzXSk9PntsZXQgYT1mdW5jdGlvbihuKXtsZXQgdD17fTtmb3IobGV0IGUgb2Ygbilmb3IobGV0IGkgb2YgT2JqZWN0LnZhbHVlcyhyaSkpaWYoZmwoaSkpe3RbaV09dFtpXXx8e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX07bGV0e3RhZ0Rlc2NyaXB0aW9uczpyLHRhZ1J1blNhbXBsZWRJbmZvOm99PWVbaV07dFtpXS50YWdEZXNjcmlwdGlvbnM9ey4uLnRbaV0udGFnRGVzY3JpcHRpb25zLC4uLnJ9O2xldCBzPXRbaV0udGFnUnVuU2FtcGxlZEluZm87Zm9yKGxldCBhIG9mIE9iamVjdC5rZXlzKG8pKXtzW2FdPXNbYV18fHt9O2ZvcihsZXQgbCBvZiBPYmplY3Qua2V5cyhvW2FdKSlzW2FdW2xdPW9bYV1bbF19fWVsc2V7dFtpXT10W2ldfHx7dGFnRGVzY3JpcHRpb25zOnt9LHJ1blRhZ0luZm86e319O2xldHt0YWdEZXNjcmlwdGlvbnM6cixydW5UYWdJbmZvOm99PWVbaV07dFtpXS50YWdEZXNjcmlwdGlvbnM9ey4uLnRbaV0udGFnRGVzY3JpcHRpb25zLC4uLnJ9LHRbaV0ucnVuVGFnSW5mbz17Li4udFtpXS5ydW5UYWdJbmZvLC4uLm99fXJldHVybiB0fShvKTtyZXR1cm4gc3x8KGFbcmkuSU1BR0VTXT17dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1J1blNhbXBsZWRJbmZvOnt9fSksYX0pKX1mZXRjaFRpbWVTZXJpZXMoZSl7bGV0IGk9ZS5tYXAocj0+e2lmKG1sKHIucGx1Z2luKSl7bGV0e3J1bklkOmwsLi4uY309cix7cnVuOnUsZXhwZXJpbWVudElkOmR9PVEkKGwpLHA9ey4uLmMscnVuOnV9O3JldHVybiB0aGlzLmZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KHAsZCkucGlwZShMKCh7cmVzcG9uc2U6aCxleHBlcmltZW50SWQ6Zn0pPT5LJChoLGYpKSl9bGV0e2V4cGVyaW1lbnRJZHM6bywuLi5zfT1yO3JldHVybiBscihvLm1hcChsPT50aGlzLmZldGNoVGltZVNlcmllc0JhY2tlbmRSZXF1ZXN0KHMsbCkpKS5waXBlKEwobD0+e2xldHtydW5Ub1NlcmllczpjLGVycm9yOnUsLi4uZH09bFswXS5yZXNwb25zZSxwPWQ7Zm9yKGxldHtyZXNwb25zZTpoLGV4cGVyaW1lbnRJZDpmfW9mIGwpe2xldCBtPUskKGgsZik7aWYocC5lcnJvciljb250aW51ZTtsZXR7cnVuVG9TZXJpZXM6eCxlcnJvcjpnfT1tO2lmKGcpcC5lcnJvcj1nLHAucnVuVG9TZXJpZXM9dm9pZCAwO2Vsc2V7cC5ydW5Ub1Nlcmllcz1wLnJ1blRvU2VyaWVzfHx7fTtmb3IobGV0IGIgb2YgT2JqZWN0LmtleXMoeCkpcC5ydW5Ub1Nlcmllc1tiXT14W2JdfX1yZXR1cm4gcH0pKX0pO3JldHVybiBscihpKX1mZXRjaFRpbWVTZXJpZXNCYWNrZW5kUmVxdWVzdChlLGkpe2xldCByPW5ldyBGb3JtRGF0YTtyZXR1cm4gci5hcHBlbmQoInJlcXVlc3RzIixKU09OLnN0cmluZ2lmeShbZV0pKSx0aGlzLmh0dHAucG9zdChgL2V4cGVyaW1lbnQvJHtpfS8ke2o0fS90aW1lU2VyaWVzYCxyKS5waXBlKEwobz0+KHtyZXNwb25zZTpvWzBdLGV4cGVyaW1lbnRJZDppfSkpKX1pbWFnZVVybChlKXtyZXR1cm5gJHtqNH0vaW1hZ2VEYXRhP2ltYWdlSWQ9JHtlfWB9ZG93bmxvYWRVcmwoZSxpLHIsbyl7bGV0IGwse3J1bjpzLGV4cGVyaW1lbnRJZDphfT1RJChyKTtpZihlIT09cmkuU0NBTEFSUyl0aHJvdyBuZXcgRXJyb3IoYE5vdCBpbXBsZW1lbnRlZDogZG93bmxvYWRVcmwgZm9yICR7ZX0gaXMgbm90IGltcGxlbWVudGVkIHlldGApO2lmKGw9InNjYWxhcnMvc2NhbGFycyIsIWEpdGhyb3cgbmV3IEVycm9yKCJleHBlcmltZW50SWQgaXMgZW1wdHk7IGl0IGlzIHJlcXVpcmVkIHRvIGZvcm0gZG93bmxvYWRVcmwuIik7cmV0dXJuYC9leHBlcmltZW50LyR7YX0vZGF0YS9wbHVnaW4vc2NhbGFycy9zY2FsYXJzPyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7dGFnOmkscnVuOnMsZm9ybWF0Om99KX1gfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKGthKSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdlBlPW5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkseEk9KCgpPT57Y2xhc3MgbntnZXRQYXJhbXMoKXtyZXR1cm4gdlBlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxWTT0idGJfZmVhdHVyZV9mbGFnX3N0b3JhZ2Vfa2V5IixXND0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucXVlcnlQYXJhbXM9ZX1nZXRGZWF0dXJlcyhlLGkpe2xldCByPWU/dGhpcy5nZXRQYXJ0aWFsRmVhdHVyZXNGcm9tTWVkaWFRdWVyeSgpOnt9LG89ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikucmVkdWNlKChlLFtpLHJdKT0+e2xldCBvPWZ1bmN0aW9uKG4sdCl7bGV0IGU9bi5xdWVyeVBhcmFtT3ZlcnJpZGU7aWYoIWV8fCF0LmhhcyhlKSlyZXR1cm4gbnVsbDtsZXQgaT10LmdldChlKTtyZXR1cm4gbnVsbD09aT9udWxsOm4ucGFyc2VWYWx1ZShpKX0ocix0KTtyZXR1cm4gbnVsbCE9PW8mJihlW2ldPW8pLGV9LHt9KX0oaSx0aGlzLnF1ZXJ5UGFyYW1zLmdldFBhcmFtcygpKTtyZXR1cm57Li4uciwuLi5PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModGhpcy5nZXRQZXJzaXN0ZW50RmVhdHVyZUZsYWdzKCkpLmZpbHRlcigoW2FdKT0+aVthXSkpLC4uLm99fXBlcnNpc3RGZWF0dXJlRmxhZ3MoZSl7bGV0IHI9ey4uLnRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpLC4uLmV9O2xvY2FsU3RvcmFnZS5zZXRJdGVtKFZNLEpTT04uc3RyaW5naWZ5KHIpKX1yZXNldFBlcnNpc3RlZEZlYXR1cmVGbGFnKGUpe2xldCBpPXRoaXMuZ2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpO2lmKG51bGwhPWlbZV0pe2lmKGRlbGV0ZSBpW2VdLDA9PT1PYmplY3Qua2V5cyhpKS5sZW5ndGgpcmV0dXJuIHZvaWQgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVk0pO2xvY2FsU3RvcmFnZS5zZXRJdGVtKFZNLEpTT04uc3RyaW5naWZ5KGkpKX19cmVzZXRBbGxQZXJzaXN0ZWRGZWF0dXJlRmxhZ3MoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShWTSl9Z2V0UGVyc2lzdGVudEZlYXR1cmVGbGFncygpe2xldCBlPWxvY2FsU3RvcmFnZS5nZXRJdGVtKFZNKTtyZXR1cm4gbnVsbD09ZT97fTpKU09OLnBhcnNlKGUpfWdldFBhcnRpYWxGZWF0dXJlc0Zyb21NZWRpYVF1ZXJ5KCl7bGV0IGU9e307cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikubWF0Y2hlcyYmKGUuZGVmYXVsdEVuYWJsZURhcmtNb2RlPSEwKSxlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHhJKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksQ0k9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdGVlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1c0LHhJLHtwcm92aWRlOkNJLHVzZUNsYXNzOlc0fV19KSxufSkoKSxITT1iZSgiW0ZFQVRVUkUgRkxBR10gUGFydGlhbCBGZWF0dXJlIEZsYWdzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE1JPWJlKCJbRkVBVFVSRSBGTEFHXSBFbmFibGUgRGFyayBNb2RlIE92ZXJyaWRlIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxxbT1iZSgiW0ZFQVRVUkUgRkxBR10gU3RvcmUgdGhlIGZlYXR1cmUgZmxhZ3MgaW4gcGVyc2lzdGVudCBsb2NhbFN0b3JhZ2UiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5aD1iZSgiW0ZFQVRVUkUgRkxBR10gUmVzZXQgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGx2PWJlKCJbRkVBVFVSRSBGTEFHXSBSZXNldCBhbGwgZmVhdHVyZSBmbGFnIG92ZXJyaWRlcyIpLHE0PSJfdGJfZm9yY2Vfc3ZnIix3ST0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7fWdldEZvcmNlU3ZnRmxhZygpe3JldHVybiEhbG9jYWxTdG9yYWdlLmdldEl0ZW0ocTQpfXVwZGF0ZUZvcmNlU3ZnRmxhZyhlKXtlP2xvY2FsU3RvcmFnZS5zZXRJdGVtKHE0LCJwcmVzZW50Iik6bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocTQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxuZWU9YmUoIltGRUFUVVJFIEZMQUddIEVmZmVjdHMgSW5pdCIpLGllZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy5mb3JjZVN2Z0RhdGFTb3VyY2U9byx0aGlzLnRmRmVhdHVyZUZsYWdzPXtyZWY6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGYtZmVhdHVyZS1mbGFncyIpLnRmX2ZlYXR1cmVfZmxhZ3N9LHRoaXMuZ2V0RmVhdHVyZUZsYWdzJD1jcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGlpKG5lZSksZnIodGhpcy5zdG9yZS5zZWxlY3QoYiQpLHRoaXMuc3RvcmUuc2VsZWN0KEhtKSksTCgoWyxzLGFdKT0+e2xldCBsPXRoaXMuZGF0YVNvdXJjZS5nZXRGZWF0dXJlcyhzLGEpO3JldHVybiBudWxsIT1sLmZvcmNlU3ZnP3RoaXMuZm9yY2VTdmdEYXRhU291cmNlLnVwZGF0ZUZvcmNlU3ZnRmxhZyhsLmZvcmNlU3ZnKTp0aGlzLmZvcmNlU3ZnRGF0YVNvdXJjZS5nZXRGb3JjZVN2Z0ZsYWcoKSYmKGwuZm9yY2VTdmc9ITApLEhNKHtmZWF0dXJlczpsfSl9KSkpLHRoaXMudXBkYXRlUG9seW1lckZlYXR1cmVGbGFncyQ9Y3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShpaShITSksV3QodGhpcy5zdG9yZS5zZWxlY3QoYnMpLHRoaXMuc3RvcmUuc2VsZWN0KGpBKSksa3QoKFsscyxhXSk9Pnt0aGlzLnRmRmVhdHVyZUZsYWdzLnJlZi5zZXRGZWF0dXJlRmxhZ3MocyxhKX0pKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLnN0b3JlRmVhdHVyZUZsYWckPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoaWkocW0pLGt0KCh7ZmxhZ3M6c30pPT57dGhpcy5kYXRhU291cmNlLnBlcnNpc3RGZWF0dXJlRmxhZ3Mocyl9KSkse2Rpc3BhdGNoOiExfSksdGhpcy5yZXNldEZlYXR1cmVGbGFnT3ZlcnJpZGVzJD1jcigoKT0+dGhpcy5hY3Rpb25zJC5waXBlKGlpKHloKSxrdCgoe2ZsYWdzOnN9KT0+e3MuZm9yRWFjaChhPT57dGhpcy5kYXRhU291cmNlLnJlc2V0UGVyc2lzdGVkRmVhdHVyZUZsYWcoYSl9KX0pKSx7ZGlzcGF0Y2g6ITF9KSx0aGlzLnJlc2V0QWxsRmVhdHVyZUZsYWdPdmVycmlkZXMkPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoaWkobHYpLGt0KCgpPT57dGhpcy5kYXRhU291cmNlLnJlc2V0QWxsUGVyc2lzdGVkRmVhdHVyZUZsYWdzKCl9KSkse2Rpc3BhdGNoOiExfSl9bmdyeE9uSW5pdEVmZmVjdHMoKXtyZXR1cm4gbmVlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooQ0kpLGood0kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxyZWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbd0ldfSksbn0pKCksc2VlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lfWludGVyY2VwdChlLGkpe3JldHVybiB0aGlzLnN0b3JlLnBpcGUodnQoakEpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gaT0+aS5waXBlKG4/WWUoKHIsbyk9Pm4ocixvLGkpKTptcyxRdCgxKSxlP18xKHQpOnYxKCgpPT5uZXcgXzApKX0oKSx1aShyPT4oZT1lLmNsb25lKHtoZWFkZXJzOmUuaGVhZGVycy5zZXQoIlgtVGVuc29yQm9hcmQtRmVhdHVyZS1GbGFncyIsSlNPTi5zdHJpbmdpZnkocikpfSksaS5oYW5kbGUoZSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooQ2UpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKTtmdW5jdGlvbiBpcChuKXtyZXR1cm4iZmFsc2UiIT09bn12YXIgWTQ9e3NjYWxhcnNCYXRjaFNpemU6e2RlZmF1bHRWYWx1ZTp2b2lkIDAscXVlcnlQYXJhbU92ZXJyaWRlOiJzY2FsYXJzQmF0Y2hTaXplIixwYXJzZVZhbHVlOnBhcnNlSW50fSxlbmFibGVkRXhwZXJpbWVudGFsUGx1Z2luczp7ZGVmYXVsdFZhbHVlOltdLHF1ZXJ5UGFyYW1PdmVycmlkZToiZXhwZXJpbWVudGFsUGx1Z2luIixwYXJzZVZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiBuP24uc3BsaXQoIiwiKTpbXX19LGVuYWJsZWRMaW5rZWRUaW1lOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVMaW5rZWRUaW1lIixwYXJzZVZhbHVlOmlwfSxlbmFibGVkU2NhbGFyRGF0YVRhYmxlOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVEYXRhVGFibGUiLHBhcnNlVmFsdWU6aXB9LGZvcmNlU3ZnOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJmb3JjZVNWRyIscGFyc2VWYWx1ZTppcH0sZW5hYmxlRGFya01vZGVPdmVycmlkZTp7ZGVmYXVsdFZhbHVlOm51bGwscXVlcnlQYXJhbU92ZXJyaWRlOm51bGx9LGRlZmF1bHRFbmFibGVEYXJrTW9kZTp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZGFya01vZGUiLHBhcnNlVmFsdWU6aXB9LGlzQXV0b0RhcmtNb2RlQWxsb3dlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxpbkNvbGFiOntkZWZhdWx0VmFsdWU6ITEscXVlcnlQYXJhbU92ZXJyaWRlOiJ0ZW5zb3Jib2FyZENvbGFiIixwYXJzZVZhbHVlOmlwfSxtZXRyaWNzSW1hZ2VTdXBwb3J0RW5hYmxlZDp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZTpudWxsfSxlbmFibGVTaG93RmxhZ3M6e2RlZmF1bHRWYWx1ZTohMSxxdWVyeVBhcmFtT3ZlcnJpZGU6InNob3dGbGFncyIscGFyc2VWYWx1ZTppcH0sYWxsb3dSYW5nZVNlbGVjdGlvbjp7ZGVmYXVsdFZhbHVlOiEwLHF1ZXJ5UGFyYW1PdmVycmlkZToiYWxsb3dSYW5nZVNlbGVjdGlvbiIscGFyc2VWYWx1ZTppcH0sZW5hYmxlZFByb3NwZWN0aXZlRm9iOntkZWZhdWx0VmFsdWU6ITAscXVlcnlQYXJhbU92ZXJyaWRlOiJlbmFibGVQcm9zcGVjdGl2ZUZvYiIscGFyc2VWYWx1ZTppcH0sZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbjp7ZGVmYXVsdFZhbHVlOiExLHF1ZXJ5UGFyYW1PdmVycmlkZToiZW5hYmxlU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbiIscGFyc2VWYWx1ZTppcH19LFg0PXtpc0ZlYXR1cmVGbGFnc0xvYWRlZDohMSxkZWZhdWx0RmxhZ3M6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLnJlZHVjZSgodCxbZSxpXSk9Pih0W2VdPWkuZGVmYXVsdFZhbHVlLHQpLHt9KX0oWTQpLG1ldGFkYXRhOlk0LGZsYWdPdmVycmlkZXM6e319LFE0PW5ldyBwZSgiW0ZlYXR1cmUgRmxhZ10gU3RvcmUgQ29uZmlnIik7ZnVuY3Rpb24gbGVlKCl7cmV0dXJue2luaXRpYWxTdGF0ZTpYNH19dmFyIEVQZT12cihYNCxTZShITSwobix7ZmVhdHVyZXM6dH0pPT4oey4uLm4saXNGZWF0dXJlRmxhZ3NMb2FkZWQ6ITAsZmxhZ092ZXJyaWRlczp7Li4ubi5mbGFnT3ZlcnJpZGVzLC4uLnR9fSkpLFNlKE1JLChuLHtlbmFibGVEYXJrTW9kZTp0fSk9Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnsuLi5uLmZsYWdPdmVycmlkZXMsZW5hYmxlRGFya01vZGVPdmVycmlkZTp0fX0pKSxTZShxbSwobix0KT0+KHsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcywuLi50LmZsYWdzfX0pKSxTZSh5aCwobix0KT0+e2lmKCF0fHwhdC5mbGFnc3x8IXQuZmxhZ3MubGVuZ3RoKXJldHVybiBuO2xldCBlPXsuLi5uLmZsYWdPdmVycmlkZXN9O3JldHVybiB0LmZsYWdzLmZvckVhY2goaT0+e2RlbGV0ZSBlW2ldfSksey4uLm4sZmxhZ092ZXJyaWRlczplfX0pLFNlKGx2LG49Pih7Li4ubixmbGFnT3ZlcnJpZGVzOnt9fSkpLFNlKFljLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57aWYoIXQudGhlbWVPdmVycmlkZSlyZXR1cm4gbjtsZXQgZTtzd2l0Y2godC50aGVtZU92ZXJyaWRlKXtjYXNlIE9hLkJST1dTRVJfREVGQVVMVDplPW51bGw7YnJlYWs7Y2FzZSBPYS5EQVJLOmU9ITA7YnJlYWs7Y2FzZSBPYS5MSUdIVDplPSExfXJldHVybnsuLi5uLGZsYWdPdmVycmlkZXM6ey4uLm4uZmxhZ092ZXJyaWRlcyxlbmFibGVEYXJrTW9kZU92ZXJyaWRlOmV9fX0pKTtmdW5jdGlvbiBjZWUobix0KXtyZXR1cm4gRVBlKG4sdCl9ZnVuY3Rpb24gVFBlKCl7cmV0dXJuIEooR0Esbj0+bnVsbD09PW4/e3RoZW1lT3ZlcnJpZGU6T2EuQlJPV1NFUl9ERUZBVUxUfTp7dGhlbWVPdmVycmlkZTpuP09hLkRBUks6T2EuTElHSFR9KX12YXIgY3Y9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6UTQsdXNlRmFjdG9yeTpsZWV9LHtwcm92aWRlOkhBLHVzZUNsYXNzOnNlZSxtdWx0aTohMH1dLGltcG9ydHM6W3JlZSx0ZWUsd3IuZm9yRmVhdHVyZShVQSxjZWUsUTQpLHJvLmZvckZlYXR1cmUoW2llZV0pLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoVFBlKV19KSxufSkoKSxTST0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOlt7cHJvdmlkZTokdSx1c2VDbGFzczpKJH1dLGltcG9ydHM6W2N2LEt1XX0pLG59KSgpO2Z1bmN0aW9uIHJwKG4sdCxlLGkpe3JldHVybiBuW3RdLmhhc093blByb3BlcnR5KGUpP2ZsKHQpP25bdF1bZV0uaGFzT3duUHJvcGVydHkoaSk/blt0XVtlXVtpXTpudWxsOm5bdF1bZV06bnVsbH1mdW5jdGlvbiBFSShuLHQsZSxpKXtpZihmbCh0KSl7bGV0IHM9ey4uLm5bdF19LGE9ZnVuY3Rpb24obix0LGUpe2xldCByPW4uaGFzT3duUHJvcGVydHkodCk/ey4uLm5bdF19Ont9LG89ci5oYXNPd25Qcm9wZXJ0eShlKTtyZXR1cm4gcltlXT1vP3suLi5yW2VdfTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LHJ9KHMsZSxpKTtyZXR1cm4gc1tlXT1hLHN9bGV0IHI9ey4uLm5bdF19LG89ci5oYXNPd25Qcm9wZXJ0eShlKTtyZXR1cm4gcltlXT1vP3suLi5yW2VdfTp7cnVuVG9TZXJpZXM6e30scnVuVG9Mb2FkU3RhdGU6e319LHJ9ZnVuY3Rpb24gcGVlKG4pe3JldHVybiBKU09OLnN0cmluZ2lmeShuKX1mdW5jdGlvbiBUSShuLHQsZSl7bGV0IGk9ey4uLmV9O2ZvcihsZXQgciBvZiB0KWlbcl09bjtyZXR1cm4gaX1mdW5jdGlvbiB1dihuLHQsZSxpKXtpZihmbCh0KSl7bGV0IG89blt0XS50YWdSdW5TYW1wbGVkSW5mbztyZXR1cm4gby5oYXNPd25Qcm9wZXJ0eShlKT9PYmplY3Qua2V5cyhvW2VdKS5maWx0ZXIoYT0+aTxvW2VdW2FdLm1heFNhbXBsZXNQZXJTdGVwKTpbXX1sZXQgcj1uW3RdLnRhZ1RvUnVucztyZXR1cm4gci5oYXNPd25Qcm9wZXJ0eShlKT9yW2VdOltdfWZ1bmN0aW9uIFBQZShuLHQpe3JldHVybiBuLnBsdWdpbj09PXQucGx1Z2luJiZuLnRhZz09PXQudGFnJiZuLnNhbXBsZT09PXQuc2FtcGxlJiYobi5ydW5JZD09PXQucnVuSWR8fCFuLnJ1bklkJiYhdC5ydW5JZCl9ZnVuY3Rpb24gSzQobix0LGUsaSxyLG8scyl7bGV0IGE9bmV3IFNldChuKSxsPVtdO2ZvcihsZXQgdSBvZiBuKWZvcihsZXQgZCBvZiB0KWlmKFBQZShlW2RdLHUpKXtsLnB1c2goZCksYS5kZWxldGUodSk7YnJlYWt9aWYoIWwubGVuZ3RoKXJldHVybnt1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpuLGNhcmRNZXRhZGF0YU1hcDplLGNhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6c307bGV0IGM9e2NhcmRUb1Bpbm5lZENvcHk6aSxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6cixwaW5uZWRDYXJkVG9PcmlnaW5hbDpvLGNhcmRTdGVwSW5kZXg6cyxjYXJkTWV0YWRhdGFNYXA6ZX07Zm9yKGxldCB1IG9mIGwpYz1aNCh1LGMuY2FyZFRvUGlubmVkQ29weSxjLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxjLnBpbm5lZENhcmRUb09yaWdpbmFsLGMuY2FyZFN0ZXBJbmRleCxjLmNhcmRNZXRhZGF0YU1hcCk7cmV0dXJuey4uLmMsdW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHM6Wy4uLmFdfX1mdW5jdGlvbiBaNChuLHQsZSxpLHIsbyl7aWYodC5oYXMobikpcmV0dXJue2NhcmRUb1Bpbm5lZENvcHk6dCxjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6ZSxwaW5uZWRDYXJkVG9PcmlnaW5hbDppLGNhcmRTdGVwSW5kZXg6cixjYXJkTWV0YWRhdGFNYXA6b307bGV0IHM9bmV3IE1hcCh0KSxhPW5ldyBNYXAoZSksbD1uZXcgTWFwKGkpLGM9ey4uLnJ9LHU9ey4uLm99LGQ9ZnVuY3Rpb24obil7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtiYXNlQ2FyZElkOm59KX0obik7cy5zZXQobixkKSxhLnNldChuLGQpLGwuc2V0KGQsbiksci5oYXNPd25Qcm9wZXJ0eShuKSYmKGNbZF09cltuXSk7bGV0IHA9b1tuXTtpZighcCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBwaW4gYSBjYXJkIHdpdGhvdXQgbWV0YWRhdGEiKTtyZXR1cm4gdVtkXT1wLHtjYXJkVG9QaW5uZWRDb3B5OnMsY2FyZFRvUGlubmVkQ29weUNhY2hlOmEscGlubmVkQ2FyZFRvT3JpZ2luYWw6bCxjYXJkU3RlcEluZGV4OmMsY2FyZE1ldGFkYXRhTWFwOnV9fWZ1bmN0aW9uIERJKG4pe3JldHVybiBuLnBpbm5lZENhcmRUb09yaWdpbmFsLnNpemUrbi51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcy5sZW5ndGg8MTB9ZnVuY3Rpb24gSjQobix0LGUsaSl7bGV0IHI9ey4uLm59O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKG89PntpZighby5pbmNsdWRlcygnInBsdWdpbiI6ImltYWdlcyInKSlyZXR1cm47bGV0IHM9JDQobyx0LGUpLGE9bnVsbDtpZihudWxsPT09aS5lbmQpYT1mdW5jdGlvbihuLHQpe2xldCBlPXQuaW5kZXhPZihuKTtpZigtMSE9PWUpcmV0dXJue2luZGV4OmUsaXNDbG9zZXN0OiExfTtmb3IobGV0IGk9MDtpPHQubGVuZ3RoLTE7aSsrKXtsZXQgcj10W2ldLG89dFtpKzFdLHM9LjEqKG8tcik7aWYobjxyKXJldHVybiBudWxsO2lmKCEobj5vKSl7aWYobi1yPD1zKXJldHVybntpbmRleDppLGlzQ2xvc2VzdDohMH07aWYoby1uPD1zKXJldHVybntpbmRleDppKzEsaXNDbG9zZXN0OiEwfX19cmV0dXJuIG51bGx9KGkuc3RhcnQuc3RlcCxzKTtlbHNle2xldCBjPXNbbltvXS5pbmRleF0sdT1mdW5jdGlvbihuLHQpe2lmKCFuKXJldHVybltdO2lmKG51bGw9PT1uLmVuZClyZXR1cm4tMSE9PXQuaW5kZXhPZihuLnN0YXJ0LnN0ZXApP1tuLnN0YXJ0LnN0ZXBdOltdO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KWk+PW4uc3RhcnQuc3RlcCYmaTw9bi5lbmQuc3RlcCYmZS5wdXNoKGkpO3JldHVybiBlfShpLHMpO2E9ZnVuY3Rpb24obix0LGUpe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbnVsbDtsZXQgaT1uWzBdLHI9bltuLmxlbmd0aC0xXTtyZXR1cm4gZT5yP3tpbmRleDp0LmluZGV4T2YociksaXNDbG9zZXN0OiExfTplPGk/e2luZGV4OnQuaW5kZXhPZihpKSxpc0Nsb3Nlc3Q6ITF9Om51bGx9KHUscyxjKX1udWxsIT09YSYmKHJbb109YSl9KSxyfWZ1bmN0aW9uICQ0KG4sdCxlKXtpZighdC5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm5bXTtsZXR7cGx1Z2luOmksdGFnOnIsc2FtcGxlOm8scnVuSWQ6c309dFtuXTtpZihudWxsPT09cylyZXR1cm5bXTtsZXQgYT1ycChlLGkscixvKTtyZXR1cm4gbnVsbCE9PWEmJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkocyk/YS5ydW5Ub1Nlcmllc1tzXS5tYXAobD0+bC5zdGVwKTpbXX12YXIgT289KCgpPT4oZnVuY3Rpb24obil7bi5ERUZBVUxUPSJkZWZhdWx0IixuLkFMUEhBQkVUSUNBTD0iYWxwaGFiZXRpY2FsIixuLkFTQ0VORElORz0iYXNjZW5kaW5nIixuLkRFU0NFTkRJTkc9ImRlc2NlbmRpbmciLG4uTkVBUkVTVD0ibmVhcmVzdCIsbi5ORUFSRVNUX1k9Im5lYXJlc3RfWSJ9KE9vfHwoT289e30pKSxPbykpKCksQUk9Im1ldHJpY3MiLElJPXtjYXJkTWluV2lkdGg6bnVsbCx0b29sdGlwU29ydDpPby5BTFBIQUJFVElDQUwsaWdub3JlT3V0bGllcnM6ITAseEF4aXNUeXBlOkppLlNURVAsc2NhbGFyU21vb3RoaW5nOi42LHNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1g6ITEsaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaToxZTMsaW1hZ2VDb250cmFzdEluTWlsbGk6MWUzLGltYWdlU2hvd0FjdHVhbFNpemU6ITEsaGlzdG9ncmFtTW9kZTp6ci5PRkZTRVR9LHVyPU1yKEFJKSxVTT1KKHVyLG49Pm4udGFnTWV0YWRhdGFMb2FkU3RhdGUpLExQZT0oSih1cixuPT5uLnRhZ01ldGFkYXRhKSxKKHVyLG49Pm4uY2FyZExpc3QpKSxiaD1KKHVyLChuLHQpPT57aWYoIW4uY2FyZE1ldGFkYXRhTWFwLmhhc093blByb3BlcnR5KHQpKXJldHVybiBPZS5OT1RfTE9BREVEO2xldHtwbHVnaW46ZSx0YWc6aSxydW5JZDpyLHNhbXBsZTpvfT1uLmNhcmRNZXRhZGF0YU1hcFt0XSxzPXJwKG4udGltZVNlcmllc0RhdGEsZSxpLG8pO2lmKCFzKXJldHVybiBPZS5OT1RfTE9BREVEO2xldCBhPXMucnVuVG9Mb2FkU3RhdGU7aWYocilyZXR1cm4gYS5oYXNPd25Qcm9wZXJ0eShyKT9hW3JdOk9lLk5PVF9MT0FERUQ7bGV0IGw9dXYobi50YWdNZXRhZGF0YSxlLGksbyk7aWYoIWwubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgYSBjYXJkIHdob3NlIHRhZyBoYXMgbm8gcnVucyIpO3JldHVybiBsLmV2ZXJ5KGM9PmFbY109PT1PZS5MT0FERUQpP09lLkxPQURFRDpsLnNvbWUoYz0+YVtjXT09PU9lLkxPQURJTkcpP09lLkxPQURJTkc6T2UuTk9UX0xPQURFRH0pLHhoPUoodXIsKG4sdCk9PntpZighbi5jYXJkTWV0YWRhdGFNYXAuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIG51bGw7bGV0e3BsdWdpbjplLHRhZzppLHNhbXBsZTpyfT1uLmNhcmRNZXRhZGF0YU1hcFt0XSxvPXJwKG4udGltZVNlcmllc0RhdGEsZSxpLHIpO3JldHVybiBvP28ucnVuVG9TZXJpZXM6bnVsbH0pLGVIPUoodXIsbj0+bi5jYXJkTWV0YWRhdGFNYXApLHRjPUooZUgsKG4sdCk9Pm4uaGFzT3duUHJvcGVydHkodCk/blt0XTpudWxsKSxCUGU9Sih1cixuPT5uLnZpc2libGVDYXJkTWFwKSxtZWU9SihCUGUsbj0+bmV3IFNldChuLnZhbHVlcygpKSksUEk9SihMUGUsZUgsKG4sdCk9Pm4uZmlsdGVyKGU9PnQuaGFzT3duUHJvcGVydHkoZSkpLm1hcChlPT4oe2NhcmRJZDplLC4uLnRbZV19KSkpLHRIPUoodXIsKG4sdCk9Pm4uY2FyZFN0ZXBJbmRleC5oYXNPd25Qcm9wZXJ0eSh0KT9uLmNhcmRTdGVwSW5kZXhbdF06bnVsbCksZ2VlPUoodXIsKG4sdCk9PiQ0KHQsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSkpLF9lZT1KKHVyLG49Pm4uY2FyZFRvUGlubmVkQ29weSksVlBlPUoodXIsbj0+bi5waW5uZWRDYXJkVG9PcmlnaW5hbCksek09SihfZWUsZUgsKG4sdCk9PlsuLi5uLnZhbHVlcygpXS5maWx0ZXIoZT0+dC5oYXNPd25Qcm9wZXJ0eShlKSkubWFwKGU9Pih7Y2FyZElkOmUsLi4udFtlXX0pKSksQ2g9SihfZWUsVlBlLChuLHQsZSk9Pm4uaGFzKGUpfHx0LmhhcyhlKSksdmVlPUoodXIsbj0+bi51bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkcykseWVlPUoodXIsbj0+REkobikpLGVkPUoodXIsbj0+KHsuLi5uLnNldHRpbmdzLC4uLm4uc2V0dGluZ092ZXJyaWRlc30pKSxiZWU9Sih1cixuPT5uLnNldHRpbmdPdmVycmlkZXMpLGR2PUooZWQsbj0+bi5jYXJkTWluV2lkdGgpLHB2PUooZWQsbj0+bi50b29sdGlwU29ydCksaHY9SihlZCxuPT5uLmlnbm9yZU91dGxpZXJzKSx0ZD1KKGVkLG49Pm4ueEF4aXNUeXBlKSxSST1KKGVkLG49Pm4uaGlzdG9ncmFtTW9kZSksb3A9SihlZCxuPT5uLnNjYWxhclNtb290aGluZyksT0k9SihlZCxuPT5uLnNjYWxhclBhcnRpdGlvbk5vbk1vbm90b25pY1gpLGtJPUooZWQsbj0+bi5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSxGST1KKGVkLG49Pm4uaW1hZ2VDb250cmFzdEluTWlsbGkpLE5JPUooZWQsbj0+bi5pbWFnZVNob3dBY3R1YWxTaXplKSxYYz1KKHVyLG49Pm4udGFnRmlsdGVyKSxMST1KKHVyLChuLHQpPT5Cb29sZWFuKG4udGFnR3JvdXBFeHBhbmRlZC5nZXQodCkpKSxZbT1KKHVyLG49Pm4ubGlua2VkVGltZUVuYWJsZWQpLGZ2PUoodXIsbj0+bi5zdGVwU2VsZWN0b3JFbmFibGVkKSxtdj1KKHVyLG49Pm4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkKSxuSD1KKHVyLG49PntsZXR7bWluOnQsbWF4OmV9PW4uc3RlcE1pbk1heDtyZXR1cm57bWluOnQ9PT0xLzA/MDp0LG1heDplPT09LTEvMD8xZTM6ZX19KSxCST1KKHVyLG49Pm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyksVkk9Sih1cixuPT5uLnJhbmdlU2VsZWN0aW9uSGVhZGVycyksaUg9Sih1cixuSCwobix0KT0+bi5saW5rZWRUaW1lU2VsZWN0aW9uP24ubGlua2VkVGltZVNlbGVjdGlvbjp7c3RhcnQ6e3N0ZXA6dC5taW59LGVuZDpudWxsfSksWG09Sih1cixpSCwobix0KT0+bi5saW5rZWRUaW1lRW5hYmxlZD90Om51bGwpLG5kPUoodXIsbj0+bi5maWx0ZXJlZFBsdWdpblR5cGVzKSxIST1KKHVyLG49Pm4uaXNTZXR0aW5nc1BhbmVPcGVuKSxVST1KKHVyLG49Pm4uaXNTbGlkZW91dE1lbnVPcGVuKSxDZWU9TXIoIm5vdGlmaWNhdGlvbiIpLGlkPShKKENlZSxuPT5uLm5vdGlmaWNhdGlvbnMpLEooQ2VlLG49Pm4ubGFzdFJlYWRUaW1lc3RhbXBJbk1zPz8tMSksKCgpPT4oZnVuY3Rpb24obil7bltuLkVYUEVSSU1FTlRfTkFNRT0wXT0iRVhQRVJJTUVOVF9OQU1FIixuW24uSFBBUkFNPTFdPSJIUEFSQU0iLG5bbi5NRVRSSUM9Ml09Ik1FVFJJQyIsbltuLlJVTl9OQU1FPTNdPSJSVU5fTkFNRSJ9KGlkfHwoaWQ9e30pKSxpZCkpKCkpLHNyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5SVU49MF09IlJVTiIsbltuLkVYUEVSSU1FTlQ9MV09IkVYUEVSSU1FTlQiLG5bbi5SRUdFWD0yXT0iUkVHRVgifShzcnx8KHNyPXt9KSksc3IpKSgpO2Z1bmN0aW9uIEdNKG4sdCxlKXtsZXQgaT17fSxyPVtdLG89e21hdGNoZXM6aSxub25NYXRjaGVzOnJ9O3N3aXRjaChuLmtleSl7Y2FzZSBzci5SVU46Zm9yKGxldCBhIG9mIHQpaVthLmlkXT1bYV07YnJlYWs7Y2FzZSBzci5FWFBFUklNRU5UOmZvcihsZXQgYSBvZiB0KXtsZXQgbD1lW2EuaWRdLGM9aVtsXXx8W107Yy5wdXNoKGEpLGlbbF09Y31icmVhaztjYXNlIHNyLlJFR0VYOmlmKCFuLnJlZ2V4U3RyaW5nKWJyZWFrO2xldCBzO3RyeXtzPW5ldyBSZWdFeHAobi5yZWdleFN0cmluZyl9Y2F0Y2h7YnJlYWt9Zm9yKGxldCBhIG9mIHQpe2xldCBsPWEubmFtZS5tYXRjaChzKTtpZihsKXtsZXQgdT1sLmxlbmd0aD4xP0pTT04uc3RyaW5naWZ5KGwuc2xpY2UoMSkpOiJwc2V1ZG9fZ3JvdXAiLGQ9aVt1XXx8W107ZC5wdXNoKGEpLGlbdV09ZH1lbHNlIHIucHVzaChhKX19cmV0dXJuIG99ZnVuY3Rpb24gakkobix0KXtyZXR1cm4gbj09PXNyLlJFR0VYP3trZXk6bixyZWdleFN0cmluZzp0Pz8iIn06e2tleTpufX12YXIgTWVlPU1yKCJydW5zIiksZ2w9SihNZWUsbj0+bi5kYXRhKSx3ZWU9SihnbCxuPT5uLnJ1bklkVG9FeHBJZCksR0k9SihnbCwobix0KT0+bi5ydW5JZFRvRXhwSWRbdC5ydW5JZF0/P251bGwpLFdJPUooZ2wsKG4sdCk9Pm4ucnVuTWV0YWRhdGFbdC5ydW5JZF0/P251bGwpLHJkPUooZ2wsKG4sdCk9PihuLnJ1bklkc1t0LmV4cGVyaW1lbnRJZF18fFtdKS5maWx0ZXIoaT0+Qm9vbGVhbihuLnJ1bk1ldGFkYXRhW2ldKSkubWFwKGk9Pm4ucnVuTWV0YWRhdGFbaV0pKSxTZWU9SihnbCwobix0KT0+bi5ydW5JZHNbdC5leHBlcmltZW50SWRdPz9bXSkscUk9SihnbCxuPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKG4ucnVuTWV0YWRhdGEpKSksV009SihnbCwobix0KT0+bi5ydW5zTG9hZFN0YXRlW3QuZXhwZXJpbWVudElkXXx8e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOk9lLk5PVF9MT0FERUR9KSxySD1KKGdsLG49Pm51bGwhPT1uLnVzZXJTZXRHcm91cEJ5S2V5P2pJKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpOm51bGwpLEVlZT1KKHJILGdsLChuLHQpPT5uPz90LmluaXRpYWxHcm91cEJ5KSxRbT1KKGdsLG49Pm4ucmVnZXhGaWx0ZXIpLG9IPUooTWVlLG49Pm4udWkpLHNIPUoob0gsbj0+bi5wYWdpbmF0aW9uT3B0aW9uKSxhSD1KKG9ILG49Pm4uc29ydCksVGVlPUoob0gsbj0+bi5zZWxlY3Rpb25TdGF0ZSksRGVlPUooZ2wsbj0+bi5ydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeSksQWVlPUooZ2wsbj0+bi5kZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnkpLFlJPUooZ2wsbj0+bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpLFhJPWJlKCJbU2V0dGluZ3NdIFJlbG9hZCBFbmFibGUgVG9nZ2xlZCIpLFFJPWJlKCJbU2V0dGluZ3NdIFJlbG9hZCBQZXJpb2QgQ2hhbmdlIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksS0k9YmUoIltTZXR0aW5nc10gUGFnZSBTaXplIENoYW5nZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5hPXt9O0JFKE5hLHtnZXRDb2xvclBhbGV0dGU6KCk9PkhQZSxnZXRQYWdlU2l6ZTooKT0+S20sZ2V0UmVsb2FkRW5hYmxlZDooKT0+WU0sZ2V0UmVsb2FkUGVyaW9kSW5NczooKT0+WE0sZ2V0U2V0dGluZ3NMb2FkU3RhdGU6KCk9PmxIfSk7dmFyIFpJPSJzZXR0aW5ncyIsUmVlPXtzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCksc2V0dGluZ3M6e3JlbG9hZFBlcmlvZEluTXM6M2U0LHJlbG9hZEVuYWJsZWQ6ITEscGFnZVNpemU6MTIsY29sb3JQYWxldHRlOntpZDoiZGVmYXVsdCIsbmFtZToiRGVmYWx0Iixjb2xvcnM6W3tuYW1lOiJTbGF0ZSIsbGlnaHRIZXg6IiM0MjUwNjYiLGRhcmtIZXg6IiM4ZTk4YTMifSx7bmFtZToiQ3lhbiIsbGlnaHRIZXg6IiMxMmI1Y2IiLGRhcmtIZXg6IiMxMmI1Y2IifSx7bmFtZToiUGluayIsbGlnaHRIZXg6IiNlNTI1OTIiLGRhcmtIZXg6IiNlNTI1OTIifSx7bmFtZToiWWVsbG93IixsaWdodEhleDoiI2Y5YWIwMCIsZGFya0hleDoiI2Y5YWIwMCJ9LHtuYW1lOiJQdXJwbGUiLGxpZ2h0SGV4OiIjOTMzNGU2IixkYXJrSGV4OiIjOTMzNGU2In0se25hbWU6IkxpZ2h0IEdyZWVuIixsaWdodEhleDoiIzdjYjM0MiIsZGFya0hleDoiIzdjYjM0MiJ9LHtuYW1lOiJPcmFuZ2UiLGxpZ2h0SGV4OiIjZTg3MTBhIixkYXJrSGV4OiIjZTg3MTBhIn1dLGluYWN0aXZlOntuYW1lOiJHcmF5IixsaWdodEhleDoiI2UwZTBlMCIsZGFya0hleDoiIzNiM2IzYiJ9fX19LHFNPU1yKFpJKSxsSD1KKHFNLG49Pm4uc3RhdGUpLFlNPUoocU0sbj0+bi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkKSxYTT1KKHFNLG49Pm4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcyksS209SihxTSxuPT5uLnNldHRpbmdzLnBhZ2VTaXplKSxIUGU9SihxTSxuPT5uLnNldHRpbmdzLmNvbG9yUGFsZXR0ZSk7ZnVuY3Rpb24gSkkobix0LGUpe2lmKCF0KXJldHVybiEwO2xldCBpO3RyeXtpPW5ldyBSZWdFeHAodCwiaSIpfWNhdGNoe3JldHVybiExfWxldCByPVtuLnJ1bk5hbWVdO3JldHVybiBlJiZyLnB1c2gobi5leHBlcmltZW50QWxpYXMuYWxpYXNUZXh0LGAke24uZXhwZXJpbWVudEFsaWFzLmFsaWFzVGV4dH0vJHtuLnJ1bk5hbWV9YCksci5zb21lKG89PmkudGVzdChvKSl9dmFyIFVQZT1KKFdvLFRlZSx3ZWUsKG4sdCxlKT0+e2lmKCFuKXJldHVybiBuZXcgTWFwO2xldCBpPW5ldyBNYXA7Zm9yKGxldFtyLG9db2YgdC5lbnRyaWVzKCkpe2xldCBzPWVbcl07cyYmbi5pbmRleE9mKHMpPj0wJiZpLnNldChyLG8pfXJldHVybiBpfSksb289SihXbyxVUGUsUW0sbj0+e2xldCB0PVdvKG4pPz9bXSxlPVl1KG4pLGk9bmV3IE1hcDtmb3IobGV0IHIgb2YgdCl7bGV0IG89cmQobix7ZXhwZXJpbWVudElkOnJ9KTtmb3IobGV0IHMgb2YgbylpLnNldChzLmlkLHtydW5OYW1lOnMubmFtZSxleHBlcmltZW50QWxpYXM6ZVtyXX0pfXJldHVybiBpfSxxdSwobix0LGUsaSxyKT0+e2lmKCFuKXJldHVybiBudWxsO2xldCBvPXI9PT1oaS5DT01QQVJFX0VYUEVSSU1FTlQscz1uZXcgTWFwO2ZvcihsZXRbYSxsXW9mIHQuZW50cmllcygpKXtsZXQgYz1pLmdldChhKTtzLnNldChhLEpJKGMsZSxvKSYmbCl9cmV0dXJuIHN9KSxuYz1KKE5hLmdldENvbG9yUGFsZXR0ZSxBZWUsRGVlLFF1LChuLHQsZSxpKT0+e2xldCByPXt9O3JldHVybiB0LmZvckVhY2goKG8scyk9PntsZXQgYT1pP24uaW5hY3RpdmUuZGFya0hleDpuLmluYWN0aXZlLmxpZ2h0SGV4O2lmKGUuaGFzKHMpKWE9ZS5nZXQocyk7ZWxzZSBpZihvPj0wKXtsZXQgbD1uLmNvbG9yc1tvJW4uY29sb3JzLmxlbmd0aF07YT1pP2wuZGFya0hleDpsLmxpZ2h0SGV4fXJbc109YX0pLHJ9KSxPZWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLnJ1bnNEYXRhU291cmNlPXIsdGhpcy5sb2FkUnVuc09uUnVuVGFibGVTaG93biQ9Y3IoKCk9PnRoaXMuYWN0aW9ucyQucGlwZShpaShkSSkseG4oKHtleHBlcmltZW50SWRzOm99KT0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxhPT5hPT09T2UuRkFJTEVEfHxhPT09T2UuTk9UX0xPQURFRCkucGlwZShZZShhPT4hIWEubGVuZ3RoKSx4bihhPT50aGlzLmZldGNoQWxsUnVuc0xpc3QobyxhKSkpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJvdXRlQ2hhbmdlJD10aGlzLmFjdGlvbnMkLnBpcGUoaWkoSmwpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFJhKSkseWkoKFssb10sWyxzXSk9PlBzKG8scykpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFdvKSksWWUoKFssb10pPT4hIW8pLEwoKFssb10pPT5vKSx4bihvPT50aGlzLmdldEV4cGVyaW1lbnRzV2l0aExvYWRTdGF0ZShvLHM9PnM9PT1PZS5GQUlMRUR8fHM9PT1PZS5OT1RfTE9BREVEKS5waXBlKEwocz0+KHtleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOnN9KSkpKSksdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJlbG9hZCQ9dGhpcy5hY3Rpb25zJC5waXBlKGlpKGFhLEZhKSxXdCh0aGlzLnN0b3JlLnNlbGVjdChXbykpLFllKChbLG9dKT0+ISFvKSxMKChbLG9dKT0+bykseG4obz0+dGhpcy5nZXRFeHBlcmltZW50c1dpdGhMb2FkU3RhdGUobyxzPT5zIT09T2UuTE9BRElORykucGlwZShMKHM9Pih7ZXhwZXJpbWVudElkczpvLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDpzfSkpKSkpLHRoaXMubG9hZFJ1bnNPbk5hdmlnYXRpb25PclJlbG9hZCQ9Y3IoKCk9Pkp0KHRoaXMuZXhwZXJpbWVudHNXaXRoU3RhbGVSdW5zT25Sb3V0ZUNoYW5nZSQsdGhpcy5leHBlcmltZW50c1dpdGhTdGFsZVJ1bnNPblJlbG9hZCQpLnBpcGUoeG4oKHtleHBlcmltZW50SWRzOm8sZXhwZXJpbWVudElkc1RvQmVGZXRjaGVkOnN9KT0+dGhpcy5mZXRjaEFsbFJ1bnNMaXN0KG8scykpKSx7ZGlzcGF0Y2g6ITF9KX1nZXRSdW5zTGlzdExvYWRTdGF0ZShlKXtyZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoV00se2V4cGVyaW1lbnRJZDplfSkucGlwZShRdCgxKSl9Z2V0RXhwZXJpbWVudHNXaXRoTG9hZFN0YXRlKGUsaSl7cmV0dXJuIGxyKGUubWFwKHI9PnRoaXMuZ2V0UnVuc0xpc3RMb2FkU3RhdGUocikpKS5waXBlKEwocj0+ZS5maWx0ZXIoKG8scyk9PmkocltzXS5zdGF0ZSkpKSl9ZmV0Y2hBbGxSdW5zTGlzdChlLGkpe3JldHVybiBYdCh7ZXhwZXJpbWVudElkczplLGV4cGVyaW1lbnRJZHNUb0JlRmV0Y2hlZDppfSkucGlwZShrdCgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gockkoe2V4cGVyaW1lbnRJZHM6ZSxyZXF1ZXN0ZWRFeHBlcmltZW50SWRzOml9KSl9KSx4bigoKT0+e2xldCByPW5ldyBTZXQoaSk7cmV0dXJuIGxyKGUubWFwKHM9PnIuaGFzKHMpP3RoaXMuZmV0Y2hSdW5zRm9yRXhwZXJpbWVudChzKTp0aGlzLm1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKHMpKSl9KSxMKHI9PntsZXQgbz17fSxzPVtdO2ZvcihsZXQgYSBvZiByKXMucHVzaCguLi5hLnJ1bnMpLGEuZnJvbVJlbW90ZSYmKG9bYS5leHBlcmltZW50SWRdPXtydW5zOmEucnVucyxtZXRhZGF0YTphLm1ldGFkYXRhfSk7cmV0dXJue25ld1J1bnNBbmRNZXRhZGF0YTpvLHJ1bnNGb3JBbGxFeHBlcmltZW50czpzfX0pLGt0KCh7bmV3UnVuc0FuZE1ldGFkYXRhOnIscnVuc0ZvckFsbEV4cGVyaW1lbnRzOm99KT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2godmgoe2V4cGVyaW1lbnRJZHM6ZSxuZXdSdW5zQW5kTWV0YWRhdGE6cixydW5zRm9yQWxsRXhwZXJpbWVudHM6b30pKX0pLGZvKHI9Pih0aGlzLnN0b3JlLmRpc3BhdGNoKHN2KHtleHBlcmltZW50SWRzOmUscmVxdWVzdGVkRXhwZXJpbWVudElkczppfSkpLFh0KG51bGwpKSksTCgoKT0+bnVsbCkpfW1heWJlV2FpdEZvclJ1bnNBbmRHZXRSdW5zKGUpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChXTSx7ZXhwZXJpbWVudElkOmV9KS5waXBlKFllKGk9Pmkuc3RhdGUhPT1PZS5MT0FESU5HKSxRdCgxKSx4bihpPT5pLnN0YXRlPT09T2UuRkFJTEVEP3djKG5ldyBFcnJvcigiUGVuZGluZyByZXF1ZXN0IGZhaWxlZCIpKTpYdChpKSksV3QodGhpcy5zdG9yZS5zZWxlY3QocmQse2V4cGVyaW1lbnRJZDplfSkpLEwoKFssaV0pPT4oe2Zyb21SZW1vdGU6ITEsZXhwZXJpbWVudElkOmUscnVuczppfSkpKX1mZXRjaFJ1bnNGb3JFeHBlcmltZW50KGUpe3JldHVybiBscihbdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaFJ1bnMoZSksdGhpcy5ydW5zRGF0YVNvdXJjZS5mZXRjaEhwYXJhbXNNZXRhZGF0YShlKV0pLnBpcGUoTCgoW2kscl0pPT4oe2Zyb21SZW1vdGU6ITAsZXhwZXJpbWVudElkOmUscnVuczppLG1ldGFkYXRhOnJ9KSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFBvKSxqKENlKSxqKHBJKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaWM9KCgpPT4oZnVuY3Rpb24obil7bi5BU0M9ImFzYyIsbi5ERVNDPSJkZXNjIixuLlVOU0VUPSIifShpY3x8KGljPXt9KSksaWMpKSgpLHtpbml0aWFsU3RhdGU6elBlLHJlZHVjZXJzOmpQZX09em0oe3J1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXAsZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5Om5ldyBNYXAsZ3JvdXBLZXlUb0NvbG9ySWQ6bmV3IE1hcCxpbml0aWFsR3JvdXBCeTp7a2V5OnNyLlJVTn0sdXNlclNldEdyb3VwQnlLZXk6bnVsbCxjb2xvckdyb3VwUmVnZXhTdHJpbmc6IiIscmVnZXhGaWx0ZXI6IiJ9LHtydW5JZHM6e30scnVuSWRUb0V4cElkOnt9LHJ1bk1ldGFkYXRhOnt9LHJ1bnNMb2FkU3RhdGU6e319LChuLHQsZSk9PlBzKHQsZSk/bjp7Li4ubixpbml0aWFsR3JvdXBCeTp7a2V5OmUucm91dGVLaW5kPT09aGkuQ09NUEFSRV9FWFBFUklNRU5UP3NyLkVYUEVSSU1FTlQ6c3IuUlVOfX0pLEdQZT12cih6UGUsU2UoS18sKG4se3JvdXRlS2luZDp0LHBhcnRpYWxTdGF0ZTplfSk9PntpZih0IT09aGkuQ09NUEFSRV9FWFBFUklNRU5UJiZ0IT09aGkuRVhQRVJJTUVOVClyZXR1cm4gbjtsZXQgcj1lLnJ1bnMuZ3JvdXBCeSxvPWUucnVucy5yZWdleEZpbHRlcj8/IiI7aWYoIXImJiFvKXJldHVybiBuO2xldHtjb2xvckdyb3VwUmVnZXhTdHJpbmc6cyx1c2VyU2V0R3JvdXBCeUtleTphfT1uO3JldHVybiByJiYocz1yLmtleT09PXNyLlJFR0VYP3IucmVnZXhTdHJpbmc6bi5jb2xvckdyb3VwUmVnZXhTdHJpbmcsYT1yLmtleT8/bnVsbCksey4uLm4sY29sb3JHcm91cFJlZ2V4U3RyaW5nOnMscmVnZXhGaWx0ZXI6byx1c2VyU2V0R3JvdXBCeUtleTphfX0pLFNlKHJJLChuLHQpPT57bGV0IGU9ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBpIG9mIHQucmVxdWVzdGVkRXhwZXJpbWVudElkcyllW2ldPWVbaV0/ey4uLmVbaV0sc3RhdGU6T2UuTE9BRElOR306e2xhc3RMb2FkZWRUaW1lSW5NczpudWxsLHN0YXRlOk9lLkxPQURJTkd9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSxTZSh2aCwobix0KT0+e2xldCBlPXsuLi5uLnJ1bklkc30saT17Li4ubi5ydW5NZXRhZGF0YX0scj17Li4ubi5ydW5JZFRvRXhwSWR9LG89ey4uLm4ucnVuc0xvYWRTdGF0ZX07Zm9yKGxldCBzIG9mIE9iamVjdC5rZXlzKHQubmV3UnVuc0FuZE1ldGFkYXRhKSl7bGV0e3J1bnM6YSxtZXRhZGF0YTpsfT10Lm5ld1J1bnNBbmRNZXRhZGF0YVtzXTtlW3NdPWEubWFwKCh7aWQ6Y30pPT5jKSxvW3NdPXsuLi5vW3NdLGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpLHN0YXRlOk9lLkxPQURFRH07Zm9yKGxldCBjIG9mIGEpe2xldCB1PWwucnVuVG9IcGFyYW1zQW5kTWV0cmljc1tjLmlkXTtpW2MuaWRdPXsuLi5jLGhwYXJhbXM6dT91LmhwYXJhbXM6bnVsbCxtZXRyaWNzOnU/dS5tZXRyaWNzOm51bGx9LHJbYy5pZF09c319cmV0dXJuey4uLm4scnVuSWRzOmUscnVuSWRUb0V4cElkOnIscnVuTWV0YWRhdGE6aSxydW5zTG9hZFN0YXRlOm99fSksU2Uoc3YsKG4sdCk9PntsZXQgZT17Li4ubi5ydW5zTG9hZFN0YXRlfTtmb3IobGV0IGkgb2YgdC5yZXF1ZXN0ZWRFeHBlcmltZW50SWRzKWVbaV09ZVtpXT97Li4uZVtpXSxzdGF0ZTpPZS5GQUlMRUR9OntsYXN0TG9hZGVkVGltZUluTXM6bnVsbCxzdGF0ZTpPZS5GQUlMRUR9O3JldHVybnsuLi5uLHJ1bnNMb2FkU3RhdGU6ZX19KSxTZSh2aCwobix7cnVuc0ZvckFsbEV4cGVyaW1lbnRzOnR9KT0+e2xldCBlPW5ldyBNYXAobi5ncm91cEtleVRvQ29sb3JJZCksaT1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxyPW4uaW5pdGlhbEdyb3VwQnk7bnVsbCE9PW4udXNlclNldEdyb3VwQnlLZXkmJihyPWpJKG4udXNlclNldEdyb3VwQnlLZXksbi5jb2xvckdyb3VwUmVnZXhTdHJpbmcpKTtsZXQgbz1HTShyLHQsbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKG8ubWF0Y2hlcykuZm9yRWFjaCgoW3MsYV0pPT57bGV0IGw9ZS5nZXQocyk/P2Uuc2l6ZTtlLnNldChzLGwpO2ZvcihsZXQgYyBvZiBhKWkuc2V0KGMuaWQsbCl9KTtmb3IobGV0IHMgb2Ygby5ub25NYXRjaGVzKWkuc2V0KHMuaWQsLTEpO3JldHVybnsuLi5uLGRlZmF1bHRSdW5Db2xvcklkRm9yR3JvdXBCeTppLGdyb3VwS2V5VG9Db2xvcklkOmV9fSksU2UoYXYsKG4se2V4cGVyaW1lbnRJZHM6dCxncm91cEJ5OmV9KT0+e2xldCBpPW5ldyBNYXAscj1uZXcgTWFwKG4uZGVmYXVsdFJ1bkNvbG9ySWRGb3JHcm91cEJ5KSxzPUdNKGUsdC5mbGF0TWFwKGw9Pm4ucnVuSWRzW2xdKS5tYXAobD0+bi5ydW5NZXRhZGF0YVtsXSksbi5ydW5JZFRvRXhwSWQpO09iamVjdC5lbnRyaWVzKHMubWF0Y2hlcykuZm9yRWFjaCgoW2wsY10pPT57bGV0IHU9aS5nZXQobCk/P2kuc2l6ZTtpLnNldChsLHUpO2ZvcihsZXQgZCBvZiBjKXIuc2V0KGQuaWQsdSl9KTtmb3IobGV0IGwgb2Ygcy5ub25NYXRjaGVzKXIuc2V0KGwuaWQsLTEpO2xldCBhPWUua2V5PT09c3IuUkVHRVg/ZS5yZWdleFN0cmluZzpuLmNvbG9yR3JvdXBSZWdleFN0cmluZztyZXR1cm57Li4ubixjb2xvckdyb3VwUmVnZXhTdHJpbmc6YSx1c2VyU2V0R3JvdXBCeUtleTplLmtleSxkZWZhdWx0UnVuQ29sb3JJZEZvckdyb3VwQnk6cixncm91cEtleVRvQ29sb3JJZDppLHJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5Om5ldyBNYXB9fSksU2UodUksKG4se3J1bklkOnQsbmV3Q29sb3I6ZX0pPT57bGV0IGk9bmV3IE1hcChuLnJ1bkNvbG9yT3ZlcnJpZGVGb3JHcm91cEJ5KTtyZXR1cm4gaS5zZXQodCxlKSx7Li4ubixydW5Db2xvck92ZXJyaWRlRm9yR3JvdXBCeTppfX0pLFNlKE5NLChuLHQpPT4oey4uLm4scmVnZXhGaWx0ZXI6dC5yZWdleFN0cmluZ30pKSksV1BlPWptKEdQZSxqUGUpLHFQZT17a2V5Om51bGwsZGlyZWN0aW9uOmljLlVOU0VUfSx7aW5pdGlhbFN0YXRlOllQZSxyZWR1Y2VyczpYUGV9PXptKHtwYWdpbmF0aW9uT3B0aW9uOntwYWdlSW5kZXg6MCxwYWdlU2l6ZToxMH0sc29ydDpxUGUsc2VsZWN0aW9uU3RhdGU6bmV3IE1hcH0se30pLFFQZT12cihZUGUsU2UobEksKG4se3BhZ2VTaXplOnQscGFnZUluZGV4OmV9KT0+KHsuLi5uLHBhZ2luYXRpb25PcHRpb246e3BhZ2VTaXplOnQscGFnZUluZGV4OmV9fSkpLFNlKE5NLChuLHQpPT4oey4uLm4scGFnaW5hdGlvbk9wdGlvbjp7Li4ubi5wYWdpbmF0aW9uT3B0aW9uLHBhZ2VJbmRleDowfX0pKSxTZShjSSwobix0KT0+KHsuLi5uLHNvcnQ6e2tleTp0LmtleSxkaXJlY3Rpb246dC5kaXJlY3Rpb259fSkpLFNlKHZoLChuLHQpPT57bGV0IGU9bmV3IE1hcChuLnNlbGVjdGlvblN0YXRlKSxpPXQucnVuc0ZvckFsbEV4cGVyaW1lbnRzLmxlbmd0aDw9NTAwO2ZvcihsZXQgciBvZiB0LnJ1bnNGb3JBbGxFeHBlcmltZW50cyllLmhhcyhyLmlkKXx8ZS5zZXQoci5pZCxpKTtyZXR1cm57Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pLFNlKG9JLChuLHtydW5JZDp0fSk9PntsZXQgZT1uZXcgTWFwKG4uc2VsZWN0aW9uU3RhdGUpO3JldHVybiBlLnNldCh0LCFCb29sZWFuKGUuZ2V0KHQpKSksey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZShzSSwobix7cnVuSWQ6dH0pPT57bGV0IGU9bmV3IE1hcDtmb3IobGV0IGkgb2Ygbi5zZWxlY3Rpb25TdGF0ZS5rZXlzKCkpZS5zZXQoaSx0PT09aSk7cmV0dXJuey4uLm4sc2VsZWN0aW9uU3RhdGU6ZX19KSxTZShhSSwobix7cnVuSWRzOnR9KT0+e2xldCBlPW5ldyBNYXAobi5zZWxlY3Rpb25TdGF0ZSksaT0hdC5ldmVyeShyPT5Cb29sZWFuKGUuZ2V0KHIpKSk7Zm9yKGxldCByIG9mIHQpZS5zZXQocixpKTtyZXR1cm57Li4ubixzZWxlY3Rpb25TdGF0ZTplfX0pKSxLUGU9am0oUVBlLFhQZSk7ZnVuY3Rpb24ga2VlKG4sdCl7cmV0dXJuIEZtKHtkYXRhOldQZSx1aTpLUGV9KShuLHQpfWZ1bmN0aW9uIFpQZSgpe3JldHVyblt7YWN0aW9uQ3JlYXRvcjpzdixhbGVydEZyb21BY3Rpb246KCk9Pih7bG9jYWxpemVkTWVzc2FnZToiRmFpbGVkIHRvIGZldGNoIHJ1bnMifSl9XX12YXIgJEk9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoInJ1bnMiLGtlZSkscm8uZm9yRmVhdHVyZShbT2VlXSksVyQsSnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoWlBlKSxtSV19KSxufSkoKSxzcD0oKCk9PihmdW5jdGlvbihuKXtuLlJVTlNfQ0hBTkdFRD0iZXhwZXJpbWVudGFsLlJ1bnNDaGFuZ2VkIixuLkdFVF9SVU5TPSJleHBlcmltZW50YWwuR2V0UnVucyIsbi5HRVRfVVJMX0RBVEE9ImV4cGVyaW1lbnRhbC5HZXRVUkxQbHVnaW5EYXRhIixuLkRBVEFfUkVMT0FERUQ9ImV4cGVyaW1lbnRhbC5EYXRhUmVsb2FkZWQifShzcHx8KHNwPXt9KSksc3ApKSgpLE5lZT1uZXcgV2Vha01hcCxndj1uZXcgU2V0LGNIPW5ldyBNYXAsdDI9bmV3IE1hcDtmdW5jdGlvbiBMZWUobix0KXtyZXR1cm4gZT0+e2xldCBpPXQyLmdldCh0KSxyPU5lZS5nZXQoaSl8fG51bGw7cmV0dXJuIG4ocixlKX19d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZigiZXhwZXJpbWVudGFsLmJvb3RzdHJhcCIhPT1uLmRhdGEpcmV0dXJuO2xldCB0PW4ucG9ydHNbMF07aWYoIXQpcmV0dXJuO2xldCBlPW4uc291cmNlP24uc291cmNlLmZyYW1lRWxlbWVudDpudWxsOyFlfHxmdW5jdGlvbihuLHQpe2xldCBlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnBvcnQ9dCx0aGlzLmlkPTAsdGhpcy5yZXNwb25zZVdhaXRzPW5ldyBNYXAsdGhpcy5saXN0ZW5lcnM9bmV3IE1hcCx0aGlzLnBvcnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZT0+dGhpcy5vbk1lc3NhZ2UoZSkpfWxpc3Rlbih0LGUpe3RoaXMubGlzdGVuZXJzLnNldCh0LGUpfXVubGlzdGVuKHQpe3RoaXMubGlzdGVuZXJzLmRlbGV0ZSh0KX1hc3luYyBvbk1lc3NhZ2UodCl7bGV0IGU9SlNPTi5wYXJzZSh0LmRhdGEpLGk9ZS50eXBlLHI9ZS5pZCxvPWUucGF5bG9hZCxzPWUuZXJyb3I7aWYoZS5pc1JlcGx5KXtpZighdGhpcy5yZXNwb25zZVdhaXRzLmhhcyhyKSlyZXR1cm47bGV0e3Jlc29sdmU6ZCxyZWplY3Q6cH09dGhpcy5yZXNwb25zZVdhaXRzLmdldChyKTtyZXR1cm4gdGhpcy5yZXNwb25zZVdhaXRzLmRlbGV0ZShyKSx2b2lkKHM/cChuZXcgRXJyb3IocykpOmQobykpfWxldCBsPW51bGwsYz1udWxsO2lmKHRoaXMubGlzdGVuZXJzLmhhcyhpKSl7bGV0IGQ9dGhpcy5saXN0ZW5lcnMuZ2V0KGkpO3RyeXtsPWF3YWl0IGQobyl9Y2F0Y2gocCl7Yz1wfX10aGlzLnBvc3RNZXNzYWdlKHt0eXBlOmksaWQ6cixwYXlsb2FkOmwsZXJyb3I6Yyxpc1JlcGx5OiEwfSl9cG9zdE1lc3NhZ2UodCl7dGhpcy5wb3J0LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KHQpKX1zZW5kTWVzc2FnZSh0LGUpe2xldCBpPXRoaXMuaWQrKztyZXR1cm4gdGhpcy5wb3N0TWVzc2FnZSh7dHlwZTp0LGlkOmkscGF5bG9hZDplLGVycm9yOm51bGwsaXNSZXBseTohMX0pLG5ldyBQcm9taXNlKChvLHMpPT57dGhpcy5yZXNwb25zZVdhaXRzLnNldChpLHtyZXNvbHZlOm8scmVqZWN0OnN9KX0pfX0obik7Z3YuYWRkKGUpLHQyLnNldChlLHQpLG4uc3RhcnQoKTtmb3IobGV0W2kscl1vZiBjSCl7bGV0IG89TGVlKHIsZSk7ZS5saXN0ZW4oaSxvKX19KHQsZSl9KTt2YXIgZEgsX3Y9KCgpPT57Y2xhc3Mgbnticm9hZGNhc3QoZSxpKXtyZXR1cm4gZnVuY3Rpb24obix0KXtmb3IobGV0IGkgb2YgZ3YpdDIuZ2V0KGkpLmlzQ29ubmVjdGVkfHwoZ3YuZGVsZXRlKGkpLHQyLmRlbGV0ZShpKSk7bGV0IGU9Wy4uLmd2XS5tYXAoaT0+aS5zZW5kTWVzc2FnZShuLHQpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9KGUsaSl9bGlzdGVuKGUsaSl7IWZ1bmN0aW9uKG4sdCl7Y0guc2V0KG4sdCk7Zm9yKGxldCBlIG9mIGd2KXtsZXQgaT1MZWUodCxlKTtlLmxpc3RlbihuLGkpfX0oZSxpKX11bmxpc3RlbihlKXshZnVuY3Rpb24obil7Y0guZGVsZXRlKG4pO2ZvcihsZXQgdCBvZiBndil0LnVubGlzdGVuKG4pfShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksbjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaXBjPWUsdGhpcy5zdG9yZT1pfWluaXQoKXtsZXQgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Zi1zdG9yYWdlIik7dGhpcy5pcGMubGlzdGVuKHNwLkdFVF9VUkxfREFUQSxpPT57aWYoIWkpcmV0dXJuO2xldCByPWBwLiR7aS5wbHVnaW5OYW1lfS5gLG89e30scz1lLnRmX3N0b3JhZ2UuZ2V0VXJsSGFzaERpY3QoKTtmb3IobGV0IGEgaW4gcylhLnN0YXJ0c1dpdGgocikmJihvW2Euc3Vic3RyaW5nKHIubGVuZ3RoKV09c1thXSk7cmV0dXJuIG99KSx0aGlzLnN0b3JlLnNlbGVjdChpdikucGlwZShZZShpPT5udWxsIT09aSkseWkoKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5pcGMuYnJvYWRjYXN0KHNwLkRBVEFfUkVMT0FERUQsdm9pZCAwKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF92KSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaTI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaXBjPWUsdGhpcy5zdG9yZT1pfWluaXQoKXtsZXQgZT10aGlzLnN0b3JlLnNlbGVjdChXbykucGlwZSh4bihpPT5pP0x0KGkubWFwKG89PnRoaXMuc3RvcmUuc2VsZWN0KHJkLHtleHBlcmltZW50SWQ6b30pKSkucGlwZShMKG89Pm8uZmxhdCgpKSx5aSgobyxzKT0+by5sZW5ndGg9PT1zLmxlbmd0aCYmby5ldmVyeSgoYSxsKT0+c1tsXS5pZD09PWEuaWQpKSxMKG89Pm8ubWFwKCh7bmFtZTpzfSk9PnMpKSk6WHQoW10pKSk7ZS5zdWJzY3JpYmUoaT0+e3RoaXMuaXBjLmJyb2FkY2FzdChzcC5SVU5TX0NIQU5HRUQsaSl9KSx0aGlzLmlwYy5saXN0ZW4oc3AuR0VUX1JVTlMsKCk9PmUucGlwZShRdCgxKSkudG9Qcm9taXNlKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF92KSxqKENlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCkscjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe2kuaW5pdCgpLGUuaW5pdCgpfXJlZ2lzdGVyUGx1Z2luSWZyYW1lKGUsaSl7IWZ1bmN0aW9uKG4sdCl7TmVlLnNldChuLHtwbHVnaW5OYW1lOnR9KX0oZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihpMiksaihuMikpfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W192LG4yLGkyXSxpbXBvcnRzOltKXyxlYywkSV19KSxufSkoKSx2dj1iZSgiW0FsZXJ0XSBBbGVydCBSZXBvcnRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEhlZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuYWxlcnRBY3Rpb25Nb2R1bGU9cix0aGlzLnJlcG9ydFJlZ2lzdGVyZWRBY3Rpb25BbGVydHMkPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoa3Qobz0+e2xldCBzPXRoaXMuYWxlcnRBY3Rpb25Nb2R1bGUuZ2V0QWxlcnRGcm9tQWN0aW9uKG8pO3MmJnRoaXMuc3RvcmUuZGlzcGF0Y2godnYocykpfSkpLHtkaXNwYXRjaDohMX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFBvKSxqKENlKSxqKEp1KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksYVJlPXZyKHtsYXRlc3RBbGVydDpudWxsfSxTZSh2diwobix7bG9jYWxpemVkTWVzc2FnZTp0LGZvbGxvd3VwQWN0aW9uOmV9KT0+e2xldCBpPXtsb2NhbGl6ZWRNZXNzYWdlOnQsY3JlYXRlZDpEYXRlLm5vdygpfTtyZXR1cm4gZSYmKGkuZm9sbG93dXBBY3Rpb249ZSksey4uLm4sbGF0ZXN0QWxlcnQ6aX19KSk7ZnVuY3Rpb24gVWVlKG4sdCl7cmV0dXJuIGFSZShuLHQpfXRyeXtkSD10eXBlb2YgSW50bDwidSImJkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe2RIPSExfXZhciB5dixRTSxvMixabSx1SCxvaT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtSWQ9ZSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP1hEKHRoaXMuX3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIWRIKSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlzQnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEdkKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksemVlPVsiY29sb3IiLCJidXR0b24iLCJjaGVja2JveCIsImRhdGUiLCJkYXRldGltZS1sb2NhbCIsImVtYWlsIiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwibW9udGgiLCJudW1iZXIiLCJwYXNzd29yZCIsInJhZGlvIiwicmFuZ2UiLCJyZXNldCIsInNlYXJjaCIsInN1Ym1pdCIsInRlbCIsInRleHQiLCJ0aW1lIiwidXJsIiwid2VlayJdO2Z1bmN0aW9uIHBIKCl7aWYoeXYpcmV0dXJuIHl2O2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudClyZXR1cm4geXY9bmV3IFNldCh6ZWUpO2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIHl2PW5ldyBTZXQoemVlLmZpbHRlcih0PT4obi5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4udHlwZT09PXQpKSl9ZnVuY3Rpb24gbGEobil7cmV0dXJuIGZ1bmN0aW9uKCl7aWYobnVsbD09UU0mJnR5cGVvZiB3aW5kb3c8InUiKXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9PlFNPSEwfSkpfWZpbmFsbHl7UU09UU18fCExfXJldHVybiBRTX0oKT9uOiEhbi5jYXB0dXJlfWZ1bmN0aW9uIHMyKCl7aWYobnVsbD09Wm0pe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8fCFkb2N1bWVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIEVsZW1lbnR8fCFFbGVtZW50KXJldHVybiBabT0hMTtpZigic2Nyb2xsQmVoYXZpb3IiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlKVptPSEwO2Vsc2V7bGV0IG49RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87Wm09ISFuJiYhL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3Qobi50b1N0cmluZygpKX19cmV0dXJuIFptfWZ1bmN0aW9uIGJ2KCl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50KXJldHVybiAwO2lmKG51bGw9PW8yKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0PW4uc3R5bGU7bi5kaXI9InJ0bCIsdC53aWR0aD0iMXB4Iix0Lm92ZXJmbG93PSJhdXRvIix0LnZpc2liaWxpdHk9ImhpZGRlbiIsdC5wb2ludGVyRXZlbnRzPSJub25lIix0LnBvc2l0aW9uPSJhYnNvbHV0ZSI7bGV0IGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksaT1lLnN0eWxlO2kud2lkdGg9IjJweCIsaS5oZWlnaHQ9IjFweCIsbi5hcHBlbmRDaGlsZChlKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG4pLG8yPTAsMD09PW4uc2Nyb2xsTGVmdCYmKG4uc2Nyb2xsTGVmdD0xLG8yPTA9PT1uLnNjcm9sbExlZnQ/MToyKSxuLnJlbW92ZSgpfXJldHVybiBvMn1mdW5jdGlvbiBhMihuKXtpZihmdW5jdGlvbigpe2lmKG51bGw9PXVIKXtsZXQgbj10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmhlYWQ6bnVsbDt1SD0hKCFufHwhbi5jcmVhdGVTaGFkb3dSb290JiYhbi5hdHRhY2hTaGFkb3cpfXJldHVybiB1SH0oKSl7bGV0IHQ9bi5nZXRSb290Tm9kZT9uLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hhZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiB0fXJldHVybiBudWxsfWZ1bmN0aW9uIEtNKCl7bGV0IG49dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQ/ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDpudWxsO2Zvcig7biYmbi5zaGFkb3dSb290Oyl7bGV0IHQ9bi5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYodD09PW4pYnJlYWs7bj10fXJldHVybiBufWZ1bmN0aW9uIFFjKG4pe3JldHVybiBuLmNvbXBvc2VkUGF0aD9uLmNvbXBvc2VkUGF0aCgpWzBdOm4udGFyZ2V0fWZ1bmN0aW9uIFpNKCl7cmV0dXJuIHR5cGVvZiBfX2thcm1hX188InUiJiYhIV9fa2FybWFfX3x8dHlwZW9mIGphc21pbmU8InUiJiYhIWphc21pbmV8fHR5cGVvZiBqZXN0PCJ1IiYmISFqZXN0fHx0eXBlb2YgTW9jaGE8InUiJiYhIU1vY2hhfWZ1bmN0aW9uIGtyKG4sLi4udCl7cmV0dXJuIHQubGVuZ3RoP3Quc29tZShlPT5uW2VdKTpuLmFsdEtleXx8bi5zaGlmdEtleXx8bi5jdHJsS2V5fHxuLm1ldGFLZXl9ZnVuY3Rpb24gUnQobil7cmV0dXJuIG51bGwhPW4mJiJmYWxzZSIhPWAke259YH1mdW5jdGlvbiBCaShuLHQ9MCl7cmV0dXJuIGhIKG4pP051bWJlcihuKTp0fWZ1bmN0aW9uIGhIKG4pe3JldHVybiFpc05hTihwYXJzZUZsb2F0KG4pKSYmIWlzTmFOKE51bWJlcihuKSl9ZnVuY3Rpb24geHYobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bjpbbl19ZnVuY3Rpb24geW8obil7cmV0dXJuIG51bGw9PW4/IiI6InN0cmluZyI9PXR5cGVvZiBuP246YCR7bn1weGB9ZnVuY3Rpb24gTGEobil7cmV0dXJuIG4gaW5zdGFuY2VvZiBSZT9uLm5hdGl2ZUVsZW1lbnQ6bn12YXIgQ3YsR2VlPSgoKT0+e2NsYXNzIG57Y3JlYXRlKGUpe3JldHVybiB0eXBlb2YgTXV0YXRpb25PYnNlcnZlcj4idSI/bnVsbDpuZXcgTXV0YXRpb25PYnNlcnZlcihlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksdVJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5fbXV0YXRpb25PYnNlcnZlckZhY3Rvcnk9ZSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzPW5ldyBNYXB9bmdPbkRlc3Ryb3koKXt0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuX2NsZWFudXBPYnNlcnZlcihpKSl9b2JzZXJ2ZShlKXtsZXQgaT1MYShlKTtyZXR1cm4gbmV3IHVuKHI9PntsZXQgcz10aGlzLl9vYnNlcnZlRWxlbWVudChpKS5zdWJzY3JpYmUocik7cmV0dXJuKCk9PntzLnVuc3Vic2NyaWJlKCksdGhpcy5fdW5vYnNlcnZlRWxlbWVudChpKX19KX1fb2JzZXJ2ZUVsZW1lbnQoZSl7aWYodGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5oYXMoZSkpdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZSkuY291bnQrKztlbHNle2xldCBpPW5ldyBrZSxyPXRoaXMuX211dGF0aW9uT2JzZXJ2ZXJGYWN0b3J5LmNyZWF0ZShvPT5pLm5leHQobykpO3ImJnIub2JzZXJ2ZShlLHtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5zZXQoZSx7b2JzZXJ2ZXI6cixzdHJlYW06aSxjb3VudDoxfSl9cmV0dXJuIHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLnN0cmVhbX1fdW5vYnNlcnZlRWxlbWVudChlKXt0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlKSYmKHRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpLmNvdW50LS0sdGhpcy5fb2JzZXJ2ZWRFbGVtZW50cy5nZXQoZSkuY291bnR8fHRoaXMuX2NsZWFudXBPYnNlcnZlcihlKSl9X2NsZWFudXBPYnNlcnZlcihlKXtpZih0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmhhcyhlKSl7bGV0e29ic2VydmVyOmksc3RyZWFtOnJ9PXRoaXMuX29ic2VydmVkRWxlbWVudHMuZ2V0KGUpO2kmJmkuZGlzY29ubmVjdCgpLHIuY29tcGxldGUoKSx0aGlzLl9vYnNlcnZlZEVsZW1lbnRzLmRlbGV0ZShlKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooR2VlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksd2g9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY29udGVudE9ic2VydmVyPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuZXZlbnQ9bmV3IEcsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY3VycmVudFN1YnNjcmlwdGlvbj1udWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoZSl7dGhpcy5fZGlzYWJsZWQ9UnQoZSksdGhpcy5fZGlzYWJsZWQ/dGhpcy5fdW5zdWJzY3JpYmUoKTp0aGlzLl9zdWJzY3JpYmUoKX1nZXQgZGVib3VuY2UoKXtyZXR1cm4gdGhpcy5fZGVib3VuY2V9c2V0IGRlYm91bmNlKGUpe3RoaXMuX2RlYm91bmNlPUJpKGUpLHRoaXMuX3N1YnNjcmliZSgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpeyF0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fc3Vic2NyaWJlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bnN1YnNjcmliZSgpfV9zdWJzY3JpYmUoKXt0aGlzLl91bnN1YnNjcmliZSgpO2xldCBlPXRoaXMuX2NvbnRlbnRPYnNlcnZlci5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYpO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2N1cnJlbnRTdWJzY3JpcHRpb249KHRoaXMuZGVib3VuY2U/ZS5waXBlKEhyKHRoaXMuZGVib3VuY2UpKTplKS5zdWJzY3JpYmUodGhpcy5ldmVudCl9KX1fdW5zdWJzY3JpYmUoKXt0aGlzLl9jdXJyZW50U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHVSZSksTShSZSksTShfdCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtPYnNlcnZlQ29udGVudCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImRpc2FibGVkIl0sZGVib3VuY2U6ImRlYm91bmNlIn0sb3V0cHV0czp7ZXZlbnQ6ImNka09ic2VydmVDb250ZW50In0sZXhwb3J0QXM6WyJjZGtPYnNlcnZlQ29udGVudCJdfSksbn0pKCksb2Q9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbR2VlXX0pLG59KSgpLFdlZT1uZXcgU2V0LGRSZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbWF0Y2hNZWRpYT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJndpbmRvdy5tYXRjaE1lZGlhP3dpbmRvdy5tYXRjaE1lZGlhLmJpbmQod2luZG93KTpoUmV9bWF0Y2hNZWRpYShlKXtyZXR1cm4odGhpcy5fcGxhdGZvcm0uV0VCS0lUfHx0aGlzLl9wbGF0Zm9ybS5CTElOSykmJmZ1bmN0aW9uKG4pe2lmKCFXZWUuaGFzKG4pKXRyeXtDdnx8KChDdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJ0ZXh0L2NzcyIpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoQ3YpKSxDdi5zaGVldCYmKEN2LnNoZWV0Lmluc2VydFJ1bGUoYEBtZWRpYSAke259IHtib2R5eyB9fWAsMCksV2VlLmFkZChuKSl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19KGUpLHRoaXMuX21hdGNoTWVkaWEoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoob2kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBoUmUobil7cmV0dXJue21hdGNoZXM6ImFsbCI9PT1ufHwiIj09PW4sbWVkaWE6bixhZGRMaXN0ZW5lcjooKT0+e30scmVtb3ZlTGlzdGVuZXI6KCk9Pnt9fX12YXIgSm09KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX21lZGlhTWF0Y2hlcj1lLHRoaXMuX3pvbmU9aSx0aGlzLl9xdWVyaWVzPW5ldyBNYXAsdGhpcy5fZGVzdHJveVN1YmplY3Q9bmV3IGtlfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveVN1YmplY3QubmV4dCgpLHRoaXMuX2Rlc3Ryb3lTdWJqZWN0LmNvbXBsZXRlKCl9aXNNYXRjaGVkKGUpe3JldHVybiBxZWUoeHYoZSkpLnNvbWUocj0+dGhpcy5fcmVnaXN0ZXJRdWVyeShyKS5tcWwubWF0Y2hlcyl9b2JzZXJ2ZShlKXtsZXQgbz1MdChxZWUoeHYoZSkpLm1hcChzPT50aGlzLl9yZWdpc3RlclF1ZXJ5KHMpLm9ic2VydmFibGUpKTtyZXR1cm4gbz1WcChvLnBpcGUoUXQoMSkpLG8ucGlwZShaYSgxKSxIcigwKSkpLG8ucGlwZShMKHM9PntsZXQgYT17bWF0Y2hlczohMSxicmVha3BvaW50czp7fX07cmV0dXJuIHMuZm9yRWFjaCgoe21hdGNoZXM6bCxxdWVyeTpjfSk9PnthLm1hdGNoZXM9YS5tYXRjaGVzfHxsLGEuYnJlYWtwb2ludHNbY109bH0pLGF9KSl9X3JlZ2lzdGVyUXVlcnkoZSl7aWYodGhpcy5fcXVlcmllcy5oYXMoZSkpcmV0dXJuIHRoaXMuX3F1ZXJpZXMuZ2V0KGUpO2xldCBpPXRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaE1lZGlhKGUpLG89e29ic2VydmFibGU6bmV3IHVuKHM9PntsZXQgYT1sPT50aGlzLl96b25lLnJ1bigoKT0+cy5uZXh0KGwpKTtyZXR1cm4gaS5hZGRMaXN0ZW5lcihhKSwoKT0+e2kucmVtb3ZlTGlzdGVuZXIoYSl9fSkucGlwZSh6bihpKSxMKCh7bWF0Y2hlczpzfSk9Pih7cXVlcnk6ZSxtYXRjaGVzOnN9KSksc3QodGhpcy5fZGVzdHJveVN1YmplY3QpKSxtcWw6aX07cmV0dXJuIHRoaXMuX3F1ZXJpZXMuc2V0KGUsbyksb319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihkUmUpLGooX3QpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBxZWUobil7cmV0dXJuIG4ubWFwKHQ9PnQuc3BsaXQoIiwiKSkucmVkdWNlKCh0LGUpPT50LmNvbmNhdChlKSkubWFwKHQ9PnQudHJpbSgpKX1mdW5jdGlvbiBwMihuLHQpe3JldHVybihuLmdldEF0dHJpYnV0ZSh0KXx8IiIpLm1hdGNoKC9cUysvZyl8fFtdfXZhciAkZWU9ImNkay1kZXNjcmliZWRieS1tZXNzYWdlIix1Mj0iY2RrLWRlc2NyaWJlZGJ5LWhvc3QiLGdIPTAsZjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX3BsYXRmb3JtPWksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5PW5ldyBNYXAsdGhpcy5fbWVzc2FnZXNDb250YWluZXI9bnVsbCx0aGlzLl9pZD0iIitnSCsrLHRoaXMuX2RvY3VtZW50PWUsdGhpcy5faWQ9am8oJGYpKyItIitnSCsrfWRlc2NyaWJlKGUsaSxyKXtpZighdGhpcy5fY2FuQmVEZXNjcmliZWQoZSxpKSlyZXR1cm47bGV0IG89ZkgoaSxyKTsic3RyaW5nIiE9dHlwZW9mIGk/KFhlZShpLHRoaXMuX2lkKSx0aGlzLl9tZXNzYWdlUmVnaXN0cnkuc2V0KG8se21lc3NhZ2VFbGVtZW50OmkscmVmZXJlbmNlQ291bnQ6MH0pKTp0aGlzLl9tZXNzYWdlUmVnaXN0cnkuaGFzKG8pfHx0aGlzLl9jcmVhdGVNZXNzYWdlRWxlbWVudChpLHIpLHRoaXMuX2lzRWxlbWVudERlc2NyaWJlZEJ5TWVzc2FnZShlLG8pfHx0aGlzLl9hZGRNZXNzYWdlUmVmZXJlbmNlKGUsbyl9cmVtb3ZlRGVzY3JpcHRpb24oZSxpLHIpe2lmKCFpfHwhdGhpcy5faXNFbGVtZW50Tm9kZShlKSlyZXR1cm47bGV0IG89ZkgoaSxyKTtpZih0aGlzLl9pc0VsZW1lbnREZXNjcmliZWRCeU1lc3NhZ2UoZSxvKSYmdGhpcy5fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLG8pLCJzdHJpbmciPT10eXBlb2YgaSl7bGV0IHM9dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChvKTtzJiYwPT09cy5yZWZlcmVuY2VDb3VudCYmdGhpcy5fZGVsZXRlTWVzc2FnZUVsZW1lbnQobyl9MD09PXRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5jaGlsZE5vZGVzLmxlbmd0aCYmKHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyLnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPW51bGwpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgWyR7dTJ9PSIke3RoaXMuX2lkfSJdYCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5fcmVtb3ZlQ2RrRGVzY3JpYmVkQnlSZWZlcmVuY2VJZHMoZVtpXSksZVtpXS5yZW1vdmVBdHRyaWJ1dGUodTIpO3RoaXMuX21lc3NhZ2VzQ29udGFpbmVyPy5yZW1vdmUoKSx0aGlzLl9tZXNzYWdlc0NvbnRhaW5lcj1udWxsLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5jbGVhcigpfV9jcmVhdGVNZXNzYWdlRWxlbWVudChlLGkpe2xldCByPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1hlZShyLHRoaXMuX2lkKSxyLnRleHRDb250ZW50PWUsaSYmci5zZXRBdHRyaWJ1dGUoInJvbGUiLGkpLHRoaXMuX2NyZWF0ZU1lc3NhZ2VzQ29udGFpbmVyKCksdGhpcy5fbWVzc2FnZXNDb250YWluZXIuYXBwZW5kQ2hpbGQociksdGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LnNldChmSChlLGkpLHttZXNzYWdlRWxlbWVudDpyLHJlZmVyZW5jZUNvdW50OjB9KX1fZGVsZXRlTWVzc2FnZUVsZW1lbnQoZSl7dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChlKT8ubWVzc2FnZUVsZW1lbnQ/LnJlbW92ZSgpLHRoaXMuX21lc3NhZ2VSZWdpc3RyeS5kZWxldGUoZSl9X2NyZWF0ZU1lc3NhZ2VzQ29udGFpbmVyKCl7aWYodGhpcy5fbWVzc2FnZXNDb250YWluZXIpcmV0dXJuO2xldCBlPSJjZGstZGVzY3JpYmVkYnktbWVzc2FnZS1jb250YWluZXIiLGk9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7ZX1bcGxhdGZvcm09InNlcnZlciJdYCk7Zm9yKGxldCBvPTA7bzxpLmxlbmd0aDtvKyspaVtvXS5yZW1vdmUoKTtsZXQgcj10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsci5jbGFzc0xpc3QuYWRkKGUpLHIuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHRoaXMuX3BsYXRmb3JtJiYhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyJiZyLnNldEF0dHJpYnV0ZSgicGxhdGZvcm0iLCJzZXJ2ZXIiKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHIpLHRoaXMuX21lc3NhZ2VzQ29udGFpbmVyPXJ9X3JlbW92ZUNka0Rlc2NyaWJlZEJ5UmVmZXJlbmNlSWRzKGUpe2xldCBpPXAyKGUsImFyaWEtZGVzY3JpYmVkYnkiKS5maWx0ZXIocj0+MCE9ci5pbmRleE9mKCRlZSkpO2Uuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixpLmpvaW4oIiAiKSl9X2FkZE1lc3NhZ2VSZWZlcmVuY2UoZSxpKXtsZXQgcj10aGlzLl9tZXNzYWdlUmVnaXN0cnkuZ2V0KGkpOyhmdW5jdGlvbihuLHQsZSl7bGV0IGk9cDIobix0KTtpLnNvbWUocj0+ci50cmltKCk9PWUudHJpbSgpKXx8KGkucHVzaChlLnRyaW0oKSksbi5zZXRBdHRyaWJ1dGUodCxpLmpvaW4oIiAiKSkpfSkoZSwiYXJpYS1kZXNjcmliZWRieSIsci5tZXNzYWdlRWxlbWVudC5pZCksZS5zZXRBdHRyaWJ1dGUodTIsdGhpcy5faWQpLHIucmVmZXJlbmNlQ291bnQrK31fcmVtb3ZlTWVzc2FnZVJlZmVyZW5jZShlLGkpe2xldCByPXRoaXMuX21lc3NhZ2VSZWdpc3RyeS5nZXQoaSk7ci5yZWZlcmVuY2VDb3VudC0tLGZ1bmN0aW9uKG4sdCxlKXtsZXQgcj1wMihuLHQpLmZpbHRlcihvPT5vIT1lLnRyaW0oKSk7ci5sZW5ndGg/bi5zZXRBdHRyaWJ1dGUodCxyLmpvaW4oIiAiKSk6bi5yZW1vdmVBdHRyaWJ1dGUodCl9KGUsImFyaWEtZGVzY3JpYmVkYnkiLHIubWVzc2FnZUVsZW1lbnQuaWQpLGUucmVtb3ZlQXR0cmlidXRlKHUyKX1faXNFbGVtZW50RGVzY3JpYmVkQnlNZXNzYWdlKGUsaSl7bGV0IHI9cDIoZSwiYXJpYS1kZXNjcmliZWRieSIpLG89dGhpcy5fbWVzc2FnZVJlZ2lzdHJ5LmdldChpKSxzPW8mJm8ubWVzc2FnZUVsZW1lbnQuaWQ7cmV0dXJuISFzJiYtMSE9ci5pbmRleE9mKHMpfV9jYW5CZURlc2NyaWJlZChlLGkpe2lmKCF0aGlzLl9pc0VsZW1lbnROb2RlKGUpKXJldHVybiExO2lmKGkmJiJvYmplY3QiPT10eXBlb2YgaSlyZXR1cm4hMDtsZXQgcj1udWxsPT1pPyIiOmAke2l9YC50cmltKCksbz1lLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpO3JldHVybiEoIXJ8fG8mJm8udHJpbSgpPT09cil9X2lzRWxlbWVudE5vZGUoZSl7cmV0dXJuIGUubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpLGoob2kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiBmSChuLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2Ygbj9gJHt0fHwiIn0vJHtufWA6bn1mdW5jdGlvbiBYZWUobix0KXtuLmlkfHwobi5pZD1gJHskZWV9LSR7dH0tJHtnSCsrfWApfXZhciBoMj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9pdGVtcz10LHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD0tMSx0aGlzLl9hY3RpdmVJdGVtPW51bGwsdGhpcy5fd3JhcD0hMSx0aGlzLl9sZXR0ZXJLZXlTdHJlYW09bmV3IGtlLHRoaXMuX3R5cGVhaGVhZFN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl92ZXJ0aWNhbD0hMCx0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzPVtdLHRoaXMuX2hvbWVBbmRFbmQ9ITEsdGhpcy5fc2tpcFByZWRpY2F0ZUZuPWU9PmUuZGlzYWJsZWQsdGhpcy5fcHJlc3NlZExldHRlcnM9W10sdGhpcy50YWJPdXQ9bmV3IGtlLHRoaXMuY2hhbmdlPW5ldyBrZSx0IGluc3RhbmNlb2YgSGwmJnQuY2hhbmdlcy5zdWJzY3JpYmUoZT0+e2lmKHRoaXMuX2FjdGl2ZUl0ZW0pe2xldCByPWUudG9BcnJheSgpLmluZGV4T2YodGhpcy5fYWN0aXZlSXRlbSk7cj4tMSYmciE9PXRoaXMuX2FjdGl2ZUl0ZW1JbmRleCYmKHRoaXMuX2FjdGl2ZUl0ZW1JbmRleD1yKX19KX1za2lwUHJlZGljYXRlKHQpe3JldHVybiB0aGlzLl9za2lwUHJlZGljYXRlRm49dCx0aGlzfXdpdGhXcmFwKHQ9ITApe3JldHVybiB0aGlzLl93cmFwPXQsdGhpc313aXRoVmVydGljYWxPcmllbnRhdGlvbih0PSEwKXtyZXR1cm4gdGhpcy5fdmVydGljYWw9dCx0aGlzfXdpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odCl7cmV0dXJuIHRoaXMuX2hvcml6b250YWw9dCx0aGlzfXdpdGhBbGxvd2VkTW9kaWZpZXJLZXlzKHQpe3JldHVybiB0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzPXQsdGhpc313aXRoVHlwZUFoZWFkKHQ9MjAwKXtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdHlwZWFoZWFkU3Vic2NyaXB0aW9uPXRoaXMuX2xldHRlcktleVN0cmVhbS5waXBlKGt0KGU9PnRoaXMuX3ByZXNzZWRMZXR0ZXJzLnB1c2goZSkpLEhyKHQpLFllKCgpPT50aGlzLl9wcmVzc2VkTGV0dGVycy5sZW5ndGg+MCksTCgoKT0+dGhpcy5fcHJlc3NlZExldHRlcnMuam9pbigiIikpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IHI9MTtyPGkubGVuZ3RoKzE7cisrKXtsZXQgbz0odGhpcy5fYWN0aXZlSXRlbUluZGV4K3IpJWkubGVuZ3RoLHM9aVtvXTtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKHMpJiYwPT09cy5nZXRMYWJlbCgpLnRvVXBwZXJDYXNlKCkudHJpbSgpLmluZGV4T2YoZSkpe3RoaXMuc2V0QWN0aXZlSXRlbShvKTticmVha319dGhpcy5fcHJlc3NlZExldHRlcnM9W119KSx0aGlzfXdpdGhIb21lQW5kRW5kKHQ9ITApe3JldHVybiB0aGlzLl9ob21lQW5kRW5kPXQsdGhpc31zZXRBY3RpdmVJdGVtKHQpe2xldCBlPXRoaXMuX2FjdGl2ZUl0ZW07dGhpcy51cGRhdGVBY3RpdmVJdGVtKHQpLHRoaXMuX2FjdGl2ZUl0ZW0hPT1lJiZ0aGlzLmNoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZUl0ZW1JbmRleCl9b25LZXlkb3duKHQpe2xldCBlPXQua2V5Q29kZSxyPVsiYWx0S2V5IiwiY3RybEtleSIsIm1ldGFLZXkiLCJzaGlmdEtleSJdLmV2ZXJ5KG89PiF0W29dfHx0aGlzLl9hbGxvd2VkTW9kaWZpZXJLZXlzLmluZGV4T2Yobyk+LTEpO3N3aXRjaChlKXtjYXNlIDk6cmV0dXJuIHZvaWQgdGhpcy50YWJPdXQubmV4dCgpO2Nhc2UgNDA6aWYodGhpcy5fdmVydGljYWwmJnIpe3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzODppZih0aGlzLl92ZXJ0aWNhbCYmcil7dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTticmVha31yZXR1cm47Y2FzZSAzOTppZih0aGlzLl9ob3Jpem9udGFsJiZyKXsicnRsIj09PXRoaXMuX2hvcml6b250YWw/dGhpcy5zZXRQcmV2aW91c0l0ZW1BY3RpdmUoKTp0aGlzLnNldE5leHRJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzc6aWYodGhpcy5faG9yaXpvbnRhbCYmcil7InJ0bCI9PT10aGlzLl9ob3Jpem9udGFsP3RoaXMuc2V0TmV4dEl0ZW1BY3RpdmUoKTp0aGlzLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtjYXNlIDM2OmlmKHRoaXMuX2hvbWVBbmRFbmQmJnIpe3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7YnJlYWt9cmV0dXJuO2Nhc2UgMzU6aWYodGhpcy5faG9tZUFuZEVuZCYmcil7dGhpcy5zZXRMYXN0SXRlbUFjdGl2ZSgpO2JyZWFrfXJldHVybjtkZWZhdWx0OnJldHVybiB2b2lkKChyfHxrcih0LCJzaGlmdEtleSIpKSYmKHQua2V5JiYxPT09dC5rZXkubGVuZ3RoP3RoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KHQua2V5LnRvTG9jYWxlVXBwZXJDYXNlKCkpOihlPj02NSYmZTw9OTB8fGU+PTQ4JiZlPD01NykmJnRoaXMuX2xldHRlcktleVN0cmVhbS5uZXh0KFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpKSl9dGhpcy5fcHJlc3NlZExldHRlcnM9W10sdC5wcmV2ZW50RGVmYXVsdCgpfWdldCBhY3RpdmVJdGVtSW5kZXgoKXtyZXR1cm4gdGhpcy5fYWN0aXZlSXRlbUluZGV4fWdldCBhY3RpdmVJdGVtKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUl0ZW19aXNUeXBpbmcoKXtyZXR1cm4gdGhpcy5fcHJlc3NlZExldHRlcnMubGVuZ3RoPjB9c2V0Rmlyc3RJdGVtQWN0aXZlKCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgoMCwxKX1zZXRMYXN0SXRlbUFjdGl2ZSgpe3RoaXMuX3NldEFjdGl2ZUl0ZW1CeUluZGV4KHRoaXMuX2l0ZW1zLmxlbmd0aC0xLC0xKX1zZXROZXh0SXRlbUFjdGl2ZSgpe3RoaXMuX2FjdGl2ZUl0ZW1JbmRleDwwP3RoaXMuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fc2V0QWN0aXZlSXRlbUJ5RGVsdGEoMSl9c2V0UHJldmlvdXNJdGVtQWN0aXZlKCl7dGhpcy5fYWN0aXZlSXRlbUluZGV4PDAmJnRoaXMuX3dyYXA/dGhpcy5zZXRMYXN0SXRlbUFjdGl2ZSgpOnRoaXMuX3NldEFjdGl2ZUl0ZW1CeURlbHRhKC0xKX11cGRhdGVBY3RpdmVJdGVtKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKSxpPSJudW1iZXIiPT10eXBlb2YgdD90OmUuaW5kZXhPZih0KTt0aGlzLl9hY3RpdmVJdGVtPWVbaV0/P251bGwsdGhpcy5fYWN0aXZlSXRlbUluZGV4PWl9X3NldEFjdGl2ZUl0ZW1CeURlbHRhKHQpe3RoaXMuX3dyYXA/dGhpcy5fc2V0QWN0aXZlSW5XcmFwTW9kZSh0KTp0aGlzLl9zZXRBY3RpdmVJbkRlZmF1bHRNb2RlKHQpfV9zZXRBY3RpdmVJbldyYXBNb2RlKHQpe2xldCBlPXRoaXMuX2dldEl0ZW1zQXJyYXkoKTtmb3IobGV0IGk9MTtpPD1lLmxlbmd0aDtpKyspe2xldCByPSh0aGlzLl9hY3RpdmVJdGVtSW5kZXgrdCppK2UubGVuZ3RoKSVlLmxlbmd0aDtpZighdGhpcy5fc2tpcFByZWRpY2F0ZUZuKGVbcl0pKXJldHVybiB2b2lkIHRoaXMuc2V0QWN0aXZlSXRlbShyKX19X3NldEFjdGl2ZUluRGVmYXVsdE1vZGUodCl7dGhpcy5fc2V0QWN0aXZlSXRlbUJ5SW5kZXgodGhpcy5fYWN0aXZlSXRlbUluZGV4K3QsdCl9X3NldEFjdGl2ZUl0ZW1CeUluZGV4KHQsZSl7bGV0IGk9dGhpcy5fZ2V0SXRlbXNBcnJheSgpO2lmKGlbdF0pe2Zvcig7dGhpcy5fc2tpcFByZWRpY2F0ZUZuKGlbdF0pOylpZighaVt0Kz1lXSlyZXR1cm47dGhpcy5zZXRBY3RpdmVJdGVtKHQpfX1fZ2V0SXRlbXNBcnJheSgpe3JldHVybiB0aGlzLl9pdGVtcyBpbnN0YW5jZW9mIEhsP3RoaXMuX2l0ZW1zLnRvQXJyYXkoKTp0aGlzLl9pdGVtc319LHd2PWNsYXNzIGV4dGVuZHMgaDJ7c2V0QWN0aXZlSXRlbSh0KXt0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5zZXRJbmFjdGl2ZVN0eWxlcygpLHN1cGVyLnNldEFjdGl2ZUl0ZW0odCksdGhpcy5hY3RpdmVJdGVtJiZ0aGlzLmFjdGl2ZUl0ZW0uc2V0QWN0aXZlU3R5bGVzKCl9fSxTaD1jbGFzcyBleHRlbmRzIGgye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcmlnaW49InByb2dyYW0ifXNldEZvY3VzT3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXNldEFjdGl2ZUl0ZW0odCl7c3VwZXIuc2V0QWN0aXZlSXRlbSh0KSx0aGlzLmFjdGl2ZUl0ZW0mJnRoaXMuYWN0aXZlSXRlbS5mb2N1cyh0aGlzLl9vcmlnaW4pfX0sU3Y9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9wbGF0Zm9ybT1lfWlzRGlzYWJsZWQoZSl7cmV0dXJuIGUuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuISEobi5vZmZzZXRXaWR0aHx8bi5vZmZzZXRIZWlnaHR8fCJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldENsaWVudFJlY3RzJiZuLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oZSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoZSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7bGV0IGk9ZnVuY3Rpb24obil7dHJ5e3JldHVybiBuLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uKG4pe3JldHVybiBuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShlKSk7aWYoaSYmKC0xPT09UWVlKGkpfHwhdGhpcy5pc1Zpc2libGUoaSkpKXJldHVybiExO2xldCByPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxvPVFlZShlKTtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09bzohKCJpZnJhbWUiPT09cnx8Im9iamVjdCI9PT1yfHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYmIWZ1bmN0aW9uKG4pe2xldCB0PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxlPSJpbnB1dCI9PT10JiZuLnR5cGU7cmV0dXJuInRleHQiPT09ZXx8InBhc3N3b3JkIj09PWV8fCJzZWxlY3QiPT09dHx8InRleHRhcmVhIj09PXR9KGUpKSYmKCJhdWRpbyI9PT1yPyEhZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0xIT09bzoidmlkZW8iPT09cj8tMSE9PW8mJihudWxsIT09b3x8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8ZS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmUudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiFmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuImlucHV0Ij09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShuKSYmImhpZGRlbiI9PW4udHlwZX0obikmJihmdW5jdGlvbihuKXtsZXQgdD1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXR8fCJzZWxlY3QiPT09dHx8ImJ1dHRvbiI9PT10fHwidGV4dGFyZWEiPT09dH0obil8fGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4iYSI9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0obikmJm4uaGFzQXR0cmlidXRlKCJocmVmIil9KG4pfHxuLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fGV0ZShuKSl9KGUpJiYhdGhpcy5pc0Rpc2FibGVkKGUpJiYoaT8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG9pKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCk7ZnVuY3Rpb24gZXRlKG4pe2lmKCFuLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09bi50YWJJbmRleClyZXR1cm4hMTtsZXQgdD1uLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4hKCF0fHxpc05hTihwYXJzZUludCh0LDEwKSkpfWZ1bmN0aW9uIFFlZShuKXtpZighZXRlKG4pKXJldHVybiBudWxsO2xldCB0PXBhcnNlSW50KG4uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwxMCk7cmV0dXJuIGlzTmFOKHQpPy0xOnR9dmFyIEpNPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2NoZWNrZXI9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kb2N1bWVudD1yfWNyZWF0ZShlLGk9ITEpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscixvPSExKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY2hlY2tlcj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsb3x8dGhpcy5hdHRhY2hBbmNob3JzKCl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZCh0KXt0aGlzLl9lbmFibGVkPXQsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsdGhpcy5fZW5kQW5jaG9yKSl9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3N0YXJ0QW5jaG9yLGU9dGhpcy5fZW5kQW5jaG9yO3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLHQucmVtb3ZlKCkpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxlLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRoaXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KHQpe3JldHVybiBuZXcgUHJvbWlzZShlPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5lKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudCh0KSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeSh0KXtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+ZSh0aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHt0fV0sIFtjZGtGb2N1c1JlZ2lvbiR7dH1dLCBbY2RrLWZvY3VzLSR7dH1dYCk7cmV0dXJuInN0YXJ0Ij09dD9lLmxlbmd0aD9lWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmUubGVuZ3RoP2VbZS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KX1mb2N1c0luaXRpYWxFbGVtZW50KHQpe2xldCBlPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihlKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShlKSl7bGV0IGk9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoZSk7cmV0dXJuIGk/LmZvY3VzKHQpLCEhaX1yZXR1cm4gZS5mb2N1cyh0KSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KHQpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQodCl7bGV0IGU9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoInN0YXJ0Iik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCh0KXtsZXQgZT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGUmJmUuZm9jdXModCksISFlfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0KXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKHQpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUodCkpcmV0dXJuIHQ7bGV0IGU9dC5jaGlsZHJlbjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7bGV0IHI9ZVtpXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQodCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZSh0KSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKHQpKXJldHVybiB0O2xldCBlPXQuY2hpbGRyZW47Zm9yKGxldCBpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2xldCByPWVbaV0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChlW2ldKTpudWxsO2lmKHIpcmV0dXJuIHJ9cmV0dXJuIG51bGx9X2NyZWF0ZUFuY2hvcigpe2xldCB0PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLHQpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpc3VhbGx5LWhpZGRlbiIpLHQuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksdC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHR9X3RvZ2dsZUFuY2hvclRhYkluZGV4KHQsZSl7dD9lLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6ZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyh0KXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodCx0aGlzLl9lbmRBbmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKHQpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT90KCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSh0KX19KGUsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooU3YpLGooX3QpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKTtmdW5jdGlvbiAkTShuKXtyZXR1cm4gMD09PW4uYnV0dG9uc3x8MD09PW4ub2Zmc2V0WCYmMD09PW4ub2Zmc2V0WX1mdW5jdGlvbiBldyhuKXtsZXQgdD1uLnRvdWNoZXMmJm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlcyYmbi5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCF0fHwtMSE9PXQuaWRlbnRpZmllcnx8bnVsbCE9dC5yYWRpdXNYJiYxIT09dC5yYWRpdXNYfHxudWxsIT10LnJhZGl1c1kmJjEhPT10LnJhZGl1c1kpfW5ldyBwZSgiRk9DVVNfVFJBUF9JTkVSVF9TVFJBVEVHWSIpO3ZhciBrUmU9bmV3IHBlKCJjZGstaW5wdXQtbW9kYWxpdHktZGV0ZWN0b3Itb3B0aW9ucyIpLEZSZT17aWdub3JlS2V5czpbMTgsMTcsMjI0LDkxLDE2XX0sTXY9bGEoe3Bhc3NpdmU6ITAsY2FwdHVyZTohMH0pLE5SZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX3BsYXRmb3JtPWUsdGhpcy5fbW9zdFJlY2VudFRhcmdldD1udWxsLHRoaXMuX21vZGFsaXR5PW5ldyBocihudWxsKSx0aGlzLl9sYXN0VG91Y2hNcz0wLHRoaXMuX29uS2V5ZG93bj1zPT57dGhpcy5fb3B0aW9ucz8uaWdub3JlS2V5cz8uc29tZShhPT5hPT09cy5rZXlDb2RlKXx8KHRoaXMuX21vZGFsaXR5Lm5leHQoImtleWJvYXJkIiksdGhpcy5fbW9zdFJlY2VudFRhcmdldD1RYyhzKSl9LHRoaXMuX29uTW91c2Vkb3duPXM9PntEYXRlLm5vdygpLXRoaXMuX2xhc3RUb3VjaE1zPDY1MHx8KHRoaXMuX21vZGFsaXR5Lm5leHQoJE0ocyk/ImtleWJvYXJkIjoibW91c2UiKSx0aGlzLl9tb3N0UmVjZW50VGFyZ2V0PVFjKHMpKX0sdGhpcy5fb25Ub3VjaHN0YXJ0PXM9PntldyhzKT90aGlzLl9tb2RhbGl0eS5uZXh0KCJrZXlib2FyZCIpOih0aGlzLl9sYXN0VG91Y2hNcz1EYXRlLm5vdygpLHRoaXMuX21vZGFsaXR5Lm5leHQoInRvdWNoIiksdGhpcy5fbW9zdFJlY2VudFRhcmdldD1RYyhzKSl9LHRoaXMuX29wdGlvbnM9ey4uLkZSZSwuLi5vfSx0aGlzLm1vZGFsaXR5RGV0ZWN0ZWQ9dGhpcy5fbW9kYWxpdHkucGlwZShaYSgxKSksdGhpcy5tb2RhbGl0eUNoYW5nZWQ9dGhpcy5tb2RhbGl0eURldGVjdGVkLnBpcGUoeWkoKSksZS5pc0Jyb3dzZXImJmkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX29uS2V5ZG93bixNdiksci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2Vkb3duLE12KSxyLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxNdil9KX1nZXQgbW9zdFJlY2VudE1vZGFsaXR5KCl7cmV0dXJuIHRoaXMuX21vZGFsaXR5LnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kYWxpdHkuY29tcGxldGUoKSx0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9vbktleWRvd24sTXYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZWRvd24sTXYpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX29uVG91Y2hzdGFydCxNdikpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG9pKSxqKF90KSxqKEh0KSxqKGtSZSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksTFJlPW5ldyBwZSgibGl2ZUFubm91bmNlckVsZW1lbnQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSksVlJlPW5ldyBwZSgiTElWRV9BTk5PVU5DRVJfREVGQVVMVF9PUFRJT05TIiksdHc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl9uZ1pvbmU9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1vLHRoaXMuX2RvY3VtZW50PXIsdGhpcy5fbGl2ZUVsZW1lbnQ9ZXx8dGhpcy5fY3JlYXRlTGl2ZUVsZW1lbnQoKX1hbm5vdW5jZShlLC4uLmkpe2xldCBvLHMscj10aGlzLl9kZWZhdWx0T3B0aW9ucztyZXR1cm4gMT09PWkubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGlbMF0/cz1pWzBdOltvLHNdPWksdGhpcy5jbGVhcigpLGNsZWFyVGltZW91dCh0aGlzLl9wcmV2aW91c1RpbWVvdXQpLG98fChvPXImJnIucG9saXRlbmVzcz9yLnBvbGl0ZW5lc3M6InBvbGl0ZSIpLG51bGw9PXMmJnImJihzPXIuZHVyYXRpb24pLHRoaXMuX2xpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1saXZlIixvKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pih0aGlzLl9jdXJyZW50UHJvbWlzZXx8KHRoaXMuX2N1cnJlbnRQcm9taXNlPW5ldyBQcm9taXNlKGE9PnRoaXMuX2N1cnJlbnRSZXNvbHZlPWEpKSxjbGVhclRpbWVvdXQodGhpcy5fcHJldmlvdXNUaW1lb3V0KSx0aGlzLl9wcmV2aW91c1RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuX2xpdmVFbGVtZW50LnRleHRDb250ZW50PWUsIm51bWJlciI9PXR5cGVvZiBzJiYodGhpcy5fcHJldmlvdXNUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuY2xlYXIoKSxzKSksdGhpcy5fY3VycmVudFJlc29sdmUoKSx0aGlzLl9jdXJyZW50UHJvbWlzZT10aGlzLl9jdXJyZW50UmVzb2x2ZT12b2lkIDB9LDEwMCksdGhpcy5fY3VycmVudFByb21pc2UpKX1jbGVhcigpe3RoaXMuX2xpdmVFbGVtZW50JiYodGhpcy5fbGl2ZUVsZW1lbnQudGV4dENvbnRlbnQ9IiIpfW5nT25EZXN0cm95KCl7Y2xlYXJUaW1lb3V0KHRoaXMuX3ByZXZpb3VzVGltZW91dCksdGhpcy5fbGl2ZUVsZW1lbnQ/LnJlbW92ZSgpLHRoaXMuX2xpdmVFbGVtZW50PW51bGwsdGhpcy5fY3VycmVudFJlc29sdmU/LigpLHRoaXMuX2N1cnJlbnRQcm9taXNlPXRoaXMuX2N1cnJlbnRSZXNvbHZlPXZvaWQgMH1fY3JlYXRlTGl2ZUVsZW1lbnQoKXtsZXQgZT0iY2RrLWxpdmUtYW5ub3VuY2VyLWVsZW1lbnQiLGk9dGhpcy5fZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKSxyPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKWlbb10ucmVtb3ZlKCk7cmV0dXJuIHIuY2xhc3NMaXN0LmFkZChlKSxyLmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSxyLnNldEF0dHJpYnV0ZSgiYXJpYS1hdG9taWMiLCJ0cnVlIiksci5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsInBvbGl0ZSIpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocikscn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihMUmUsOCksaihfdCksaihIdCksaihWUmUsOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLEhSZT1uZXcgcGUoImNkay1mb2N1cy1tb25pdG9yLWRlZmF1bHQtb3B0aW9ucyIpLGQyPWxhKHtwYXNzaXZlOiEwLGNhcHR1cmU6ITB9KSxGcj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyl7dGhpcy5fbmdab25lPWUsdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9pbnB1dE1vZGFsaXR5RGV0ZWN0b3I9cix0aGlzLl9vcmlnaW49bnVsbCx0aGlzLl93aW5kb3dGb2N1c2VkPSExLHRoaXMuX29yaWdpbkZyb21Ub3VjaEludGVyYWN0aW9uPSExLHRoaXMuX2VsZW1lbnRJbmZvPW5ldyBNYXAsdGhpcy5fbW9uaXRvcmVkRWxlbWVudENvdW50PTAsdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQ9bmV3IE1hcCx0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyPSgpPT57dGhpcy5fd2luZG93Rm9jdXNlZD0hMCx0aGlzLl93aW5kb3dGb2N1c1RpbWVvdXRJZD13aW5kb3cuc2V0VGltZW91dCgoKT0+dGhpcy5fd2luZG93Rm9jdXNlZD0hMSl9LHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3I9bmV3IGtlLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXI9YT0+e2ZvcihsZXQgYz1RYyhhKTtjO2M9Yy5wYXJlbnRFbGVtZW50KSJmb2N1cyI9PT1hLnR5cGU/dGhpcy5fb25Gb2N1cyhhLGMpOnRoaXMuX29uQmx1cihhLGMpfSx0aGlzLl9kb2N1bWVudD1vLHRoaXMuX2RldGVjdGlvbk1vZGU9cz8uZGV0ZWN0aW9uTW9kZXx8MH1tb25pdG9yKGUsaT0hMSl7bGV0IHI9TGEoZSk7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8MSE9PXIubm9kZVR5cGUpcmV0dXJuIFh0KG51bGwpO2xldCBvPWEyKHIpfHx0aGlzLl9nZXREb2N1bWVudCgpLHM9dGhpcy5fZWxlbWVudEluZm8uZ2V0KHIpO2lmKHMpcmV0dXJuIGkmJihzLmNoZWNrQ2hpbGRyZW49ITApLHMuc3ViamVjdDtsZXQgYT17Y2hlY2tDaGlsZHJlbjppLHN1YmplY3Q6bmV3IGtlLHJvb3ROb2RlOm99O3JldHVybiB0aGlzLl9lbGVtZW50SW5mby5zZXQocixhKSx0aGlzLl9yZWdpc3Rlckdsb2JhbExpc3RlbmVycyhhKSxhLnN1YmplY3R9c3RvcE1vbml0b3JpbmcoZSl7bGV0IGk9TGEoZSkscj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSk7ciYmKHIuc3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3NldENsYXNzZXMoaSksdGhpcy5fZWxlbWVudEluZm8uZGVsZXRlKGkpLHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVycyhyKSl9Zm9jdXNWaWEoZSxpLHIpe2xldCBvPUxhKGUpO289PT10aGlzLl9nZXREb2N1bWVudCgpLmFjdGl2ZUVsZW1lbnQ/dGhpcy5fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyhvKS5mb3JFYWNoKChbYSxsXSk9PnRoaXMuX29yaWdpbkNoYW5nZWQoYSxpLGwpKToodGhpcy5fc2V0T3JpZ2luKGkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmZvY3VzJiZvLmZvY3VzKHIpKX1uZ09uRGVzdHJveSgpe3RoaXMuX2VsZW1lbnRJbmZvLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfV9nZXREb2N1bWVudCgpe3JldHVybiB0aGlzLl9kb2N1bWVudHx8ZG9jdW1lbnR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9nZXREb2N1bWVudCgpLmRlZmF1bHRWaWV3fHx3aW5kb3d9X2dldEZvY3VzT3JpZ2luKGUpe3JldHVybiB0aGlzLl9vcmlnaW4/dGhpcy5fb3JpZ2luRnJvbVRvdWNoSW50ZXJhY3Rpb24/dGhpcy5fc2hvdWxkQmVBdHRyaWJ1dGVkVG9Ub3VjaChlKT8idG91Y2giOiJwcm9ncmFtIjp0aGlzLl9vcmlnaW46dGhpcy5fd2luZG93Rm9jdXNlZCYmdGhpcy5fbGFzdEZvY3VzT3JpZ2luP3RoaXMuX2xhc3RGb2N1c09yaWdpbjplJiZ0aGlzLl9pc0xhc3RJbnRlcmFjdGlvbkZyb21JbnB1dExhYmVsKGUpPyJtb3VzZSI6InByb2dyYW0ifV9zaG91bGRCZUF0dHJpYnV0ZWRUb1RvdWNoKGUpe3JldHVybiAxPT09dGhpcy5fZGV0ZWN0aW9uTW9kZXx8ISFlPy5jb250YWlucyh0aGlzLl9pbnB1dE1vZGFsaXR5RGV0ZWN0b3IuX21vc3RSZWNlbnRUYXJnZXQpfV9zZXRDbGFzc2VzKGUsaSl7ZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGstZm9jdXNlZCIsISFpKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay10b3VjaC1mb2N1c2VkIiwidG91Y2giPT09aSksZS5jbGFzc0xpc3QudG9nZ2xlKCJjZGsta2V5Ym9hcmQtZm9jdXNlZCIsImtleWJvYXJkIj09PWkpLGUuY2xhc3NMaXN0LnRvZ2dsZSgiY2RrLW1vdXNlLWZvY3VzZWQiLCJtb3VzZSI9PT1pKSxlLmNsYXNzTGlzdC50b2dnbGUoImNkay1wcm9ncmFtLWZvY3VzZWQiLCJwcm9ncmFtIj09PWkpfV9zZXRPcmlnaW4oZSxpPSExKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9vcmlnaW49ZSx0aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj0idG91Y2giPT09ZSYmaSwwPT09dGhpcy5fZGV0ZWN0aW9uTW9kZSYmKGNsZWFyVGltZW91dCh0aGlzLl9vcmlnaW5UaW1lb3V0SWQpLHRoaXMuX29yaWdpblRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT50aGlzLl9vcmlnaW49bnVsbCx0aGlzLl9vcmlnaW5Gcm9tVG91Y2hJbnRlcmFjdGlvbj82NTA6MSkpfSl9X29uRm9jdXMoZSxpKXtsZXQgcj10aGlzLl9lbGVtZW50SW5mby5nZXQoaSksbz1RYyhlKTshcnx8IXIuY2hlY2tDaGlsZHJlbiYmaSE9PW98fHRoaXMuX29yaWdpbkNoYW5nZWQoaSx0aGlzLl9nZXRGb2N1c09yaWdpbihvKSxyKX1fb25CbHVyKGUsaSl7bGV0IHI9dGhpcy5fZWxlbWVudEluZm8uZ2V0KGkpOyFyfHxyLmNoZWNrQ2hpbGRyZW4mJmUucmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUmJmkuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KXx8KHRoaXMuX3NldENsYXNzZXMoaSksdGhpcy5fZW1pdE9yaWdpbihyLG51bGwpKX1fZW1pdE9yaWdpbihlLGkpe2Uuc3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnN1YmplY3QubmV4dChpKSl9X3JlZ2lzdGVyR2xvYmFsTGlzdGVuZXJzKGUpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2xldCBpPWUucm9vdE5vZGUscj10aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5nZXQoaSl8fDA7cnx8dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixkMiksaS5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl9yb290Tm9kZUZvY3VzQW5kQmx1ckxpc3RlbmVyLGQyKX0pLHRoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LnNldChpLHIrMSksMT09Kyt0aGlzLl9tb25pdG9yZWRFbGVtZW50Q291bnQmJih0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9nZXRXaW5kb3coKS5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5fd2luZG93Rm9jdXNMaXN0ZW5lcil9KSx0aGlzLl9pbnB1dE1vZGFsaXR5RGV0ZWN0b3IubW9kYWxpdHlEZXRlY3RlZC5waXBlKHN0KHRoaXMuX3N0b3BJbnB1dE1vZGFsaXR5RGV0ZWN0b3IpKS5zdWJzY3JpYmUobz0+e3RoaXMuX3NldE9yaWdpbihvLCEwKX0pKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXJzKGUpe2xldCBpPWUucm9vdE5vZGU7aWYodGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuaGFzKGkpKXtsZXQgcj10aGlzLl9yb290Tm9kZUZvY3VzTGlzdGVuZXJDb3VudC5nZXQoaSk7cj4xP3RoaXMuX3Jvb3ROb2RlRm9jdXNMaXN0ZW5lckNvdW50LnNldChpLHItMSk6KGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuX3Jvb3ROb2RlRm9jdXNBbmRCbHVyTGlzdGVuZXIsZDIpLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fcm9vdE5vZGVGb2N1c0FuZEJsdXJMaXN0ZW5lcixkMiksdGhpcy5fcm9vdE5vZGVGb2N1c0xpc3RlbmVyQ291bnQuZGVsZXRlKGkpKX0tLXRoaXMuX21vbml0b3JlZEVsZW1lbnRDb3VudHx8KHRoaXMuX2dldFdpbmRvdygpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLl93aW5kb3dGb2N1c0xpc3RlbmVyKSx0aGlzLl9zdG9wSW5wdXRNb2RhbGl0eURldGVjdG9yLm5leHQoKSxjbGVhclRpbWVvdXQodGhpcy5fd2luZG93Rm9jdXNUaW1lb3V0SWQpLGNsZWFyVGltZW91dCh0aGlzLl9vcmlnaW5UaW1lb3V0SWQpKX1fb3JpZ2luQ2hhbmdlZChlLGkscil7dGhpcy5fc2V0Q2xhc3NlcyhlLGkpLHRoaXMuX2VtaXRPcmlnaW4ocixpKSx0aGlzLl9sYXN0Rm9jdXNPcmlnaW49aX1fZ2V0Q2xvc2VzdEVsZW1lbnRzSW5mbyhlKXtsZXQgaT1bXTtyZXR1cm4gdGhpcy5fZWxlbWVudEluZm8uZm9yRWFjaCgocixvKT0+eyhvPT09ZXx8ci5jaGVja0NoaWxkcmVuJiZvLmNvbnRhaW5zKGUpKSYmaS5wdXNoKFtvLHJdKX0pLGl9X2lzTGFzdEludGVyYWN0aW9uRnJvbUlucHV0TGFiZWwoZSl7bGV0e19tb3N0UmVjZW50VGFyZ2V0OmksbW9zdFJlY2VudE1vZGFsaXR5OnJ9PXRoaXMuX2lucHV0TW9kYWxpdHlEZXRlY3RvcjtpZigibW91c2UiIT09cnx8IWl8fGk9PT1lfHwiSU5QVVQiIT09ZS5ub2RlTmFtZSYmIlRFWFRBUkVBIiE9PWUubm9kZU5hbWV8fGUuZGlzYWJsZWQpcmV0dXJuITE7bGV0IG89ZS5sYWJlbHM7aWYobylmb3IobGV0IHM9MDtzPG8ubGVuZ3RoO3MrKylpZihvW3NdLmNvbnRhaW5zKGkpKXJldHVybiEwO3JldHVybiExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF90KSxqKG9pKSxqKE5SZSksaihIdCw4KSxqKEhSZSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksbnRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fZm9jdXNPcmlnaW49bnVsbCx0aGlzLmNka0ZvY3VzQ2hhbmdlPW5ldyBHfWdldCBmb2N1c09yaWdpbigpe3JldHVybiB0aGlzLl9mb2N1c09yaWdpbn1uZ0FmdGVyVmlld0luaXQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbj10aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcihlLDE9PT1lLm5vZGVUeXBlJiZlLmhhc0F0dHJpYnV0ZSgiY2RrTW9uaXRvclN1YnRyZWVGb2N1cyIpKS5zdWJzY3JpYmUoaT0+e3RoaXMuX2ZvY3VzT3JpZ2luPWksdGhpcy5jZGtGb2N1c0NoYW5nZS5lbWl0KGkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbiYmdGhpcy5fbW9uaXRvclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEZyKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiXSxbIiIsImNka01vbml0b3JTdWJ0cmVlRm9jdXMiLCIiXV0sb3V0cHV0czp7Y2RrRm9jdXNDaGFuZ2U6ImNka0ZvY3VzQ2hhbmdlIn0sZXhwb3J0QXM6WyJjZGtNb25pdG9yRm9jdXMiXX0pLG59KSgpLEtlZT0iY2RrLWhpZ2gtY29udHJhc3QtYmxhY2stb24td2hpdGUiLFplZT0iY2RrLWhpZ2gtY29udHJhc3Qtd2hpdGUtb24tYmxhY2siLG1IPSJjZGstaGlnaC1jb250cmFzdC1hY3RpdmUiLENIPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLl9wbGF0Zm9ybT1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fYnJlYWtwb2ludFN1YnNjcmlwdGlvbj1qbyhKbSkub2JzZXJ2ZSgiKGZvcmNlZC1jb2xvcnM6IGFjdGl2ZSkiKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oYXNDaGVja2VkSGlnaENvbnRyYXN0TW9kZSYmKHRoaXMuX2hhc0NoZWNrZWRIaWdoQ29udHJhc3RNb2RlPSExLHRoaXMuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCkpfSl9Z2V0SGlnaENvbnRyYXN0TW9kZSgpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuIDA7bGV0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InJnYigxLDIsMykiLGUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO2xldCBpPXRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3cscj1pJiZpLmdldENvbXB1dGVkU3R5bGU/aS5nZXRDb21wdXRlZFN0eWxlKGUpOm51bGwsbz0ociYmci5iYWNrZ3JvdW5kQ29sb3J8fCIiKS5yZXBsYWNlKC8gL2csIiIpO3N3aXRjaChlLnJlbW92ZSgpLG8pe2Nhc2UicmdiKDAsMCwwKSI6Y2FzZSJyZ2IoNDUsNTAsNTQpIjpjYXNlInJnYigzMiwzMiwzMikiOnJldHVybiAyO2Nhc2UicmdiKDI1NSwyNTUsMjU1KSI6Y2FzZSJyZ2IoMjU1LDI1MCwyMzkpIjpyZXR1cm4gMX1yZXR1cm4gMH1uZ09uRGVzdHJveSgpe3RoaXMuX2JyZWFrcG9pbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1fYXBwbHlCb2R5SGlnaENvbnRyYXN0TW9kZUNzc0NsYXNzZXMoKXtpZighdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGUmJnRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fZG9jdW1lbnQuYm9keSl7bGV0IGU9dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3Q7ZS5yZW1vdmUobUgsS2VlLFplZSksdGhpcy5faGFzQ2hlY2tlZEhpZ2hDb250cmFzdE1vZGU9ITA7bGV0IGk9dGhpcy5nZXRIaWdoQ29udHJhc3RNb2RlKCk7MT09PWk/ZS5hZGQobUgsS2VlKToyPT09aSYmZS5hZGQobUgsWmVlKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoob2kpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxFdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe2UuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooQ0gpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbb2RdfSksbn0pKCksVVJlPW5ldyBwZSgiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGpvKEh0KX19KSxqUmU9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2ksJGk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXtpZih0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdlPW5ldyBHLGUpe2xldCByPWUuZG9jdW1lbnRFbGVtZW50P2UuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsO3RoaXMudmFsdWU9ZnVuY3Rpb24obil7bGV0IHQ9bj8udG9Mb3dlckNhc2UoKXx8IiI7cmV0dXJuImF1dG8iPT09dCYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8ubGFuZ3VhZ2U/alJlLnRlc3QobmF2aWdhdG9yLmxhbmd1YWdlKT8icnRsIjoibHRyIjoicnRsIj09PXQ/InJ0bCI6Imx0ciJ9KChlLmJvZHk/ZS5ib2R5LmRpcjpudWxsKXx8cnx8Imx0ciIpfX1uZ09uRGVzdHJveSgpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVVJlLDgpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxEaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCk7ZnVuY3Rpb24gV1JlKG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1wc2V1ZG8tY2hlY2tib3giLDQpLDImbil7bGV0IGU9UygpO3koInN0YXRlIixlLnNlbGVjdGVkPyJjaGVja2VkIjoidW5jaGVja2VkIikoImRpc2FibGVkIixlLmRpc2FibGVkKX19ZnVuY3Rpb24gcVJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiw1KSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiKCIsZS5ncm91cC5sYWJlbCwiKSIpfX12YXIgWVJlPVsiKiJdLHN0ZT0obmV3IEljKCIxNC4yLjciKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5TVEFOREFSRF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIixuLkRFQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuMCwwLjAsMC4yLDEpIixuLkFDQ0VMRVJBVElPTl9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMSwxKSIsbi5TSEFSUF9DVVJWRT0iY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC42LDEpIixufSkoKSksYXRlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLkNPTVBMRVg9IjM3NW1zIixuLkVOVEVSSU5HPSIyMjVtcyIsbi5FWElUSU5HPSIxOTVtcyIsbn0pKCksUVJlPW5ldyBwZSgibWF0LXNhbml0eS1jaGVja3MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksbG49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fc2FuaXR5Q2hlY2tzPWksdGhpcy5fZG9jdW1lbnQ9cix0aGlzLl9oYXNEb25lR2xvYmFsQ2hlY2tzPSExLGUuX2FwcGx5Qm9keUhpZ2hDb250cmFzdE1vZGVDc3NDbGFzc2VzKCksdGhpcy5faGFzRG9uZUdsb2JhbENoZWNrc3x8KHRoaXMuX2hhc0RvbmVHbG9iYWxDaGVja3M9ITApfV9jaGVja0lzRW5hYmxlZChlKXtyZXR1cm4hWk0oKSYmKCJib29sZWFuIj09dHlwZW9mIHRoaXMuX3Nhbml0eUNoZWNrcz90aGlzLl9zYW5pdHlDaGVja3M6ISF0aGlzLl9zYW5pdHlDaGVja3NbZV0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKENIKSxqKFFSZSw4KSxqKEh0KSl9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W0RoLERoXX0pLG59KSgpO2Z1bmN0aW9uIHNvKG4pe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4udCl7c3VwZXIoLi4udCksdGhpcy5fZGlzYWJsZWQ9ITF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZCh0KXt0aGlzLl9kaXNhYmxlZD1SdCh0KX19fWZ1bmN0aW9uIGtvKG4sdCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi5lKXtzdXBlciguLi5lKSx0aGlzLmRlZmF1bHRDb2xvcj10LHRoaXMuY29sb3I9dH1nZXQgY29sb3IoKXtyZXR1cm4gdGhpcy5fY29sb3J9c2V0IGNvbG9yKGUpe2xldCBpPWV8fHRoaXMuZGVmYXVsdENvbG9yO2khPT10aGlzLl9jb2xvciYmKHRoaXMuX2NvbG9yJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShgbWF0LSR7dGhpcy5fY29sb3J9YCksaSYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYG1hdC0ke2l9YCksdGhpcy5fY29sb3I9aSl9fX1mdW5jdGlvbiBxbyhuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2Rpc2FibGVSaXBwbGU9ITF9Z2V0IGRpc2FibGVSaXBwbGUoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZVJpcHBsZX1zZXQgZGlzYWJsZVJpcHBsZSh0KXt0aGlzLl9kaXNhYmxlUmlwcGxlPVJ0KHQpfX19ZnVuY3Rpb24gb2Mobix0PTApe3JldHVybiBjbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoLi4uZSl7c3VwZXIoLi4uZSksdGhpcy5fdGFiSW5kZXg9dCx0aGlzLmRlZmF1bHRUYWJJbmRleD10fWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmRpc2FibGVkPy0xOnRoaXMuX3RhYkluZGV4fXNldCB0YWJJbmRleChlKXt0aGlzLl90YWJJbmRleD1udWxsIT1lP0JpKGUpOnRoaXMuZGVmYXVsdFRhYkluZGV4fX19ZnVuY3Rpb24gRHYobil7cmV0dXJuIGNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvciguLi50KXtzdXBlciguLi50KSx0aGlzLmVycm9yU3RhdGU9ITF9dXBkYXRlRXJyb3JTdGF0ZSgpe2xldCB0PXRoaXMuZXJyb3JTdGF0ZSxvPSh0aGlzLmVycm9yU3RhdGVNYXRjaGVyfHx0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIpLmlzRXJyb3JTdGF0ZSh0aGlzLm5nQ29udHJvbD90aGlzLm5nQ29udHJvbC5jb250cm9sOm51bGwsdGhpcy5fcGFyZW50Rm9ybUdyb3VwfHx0aGlzLl9wYXJlbnRGb3JtKTtvIT09dCYmKHRoaXMuZXJyb3JTdGF0ZT1vLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9fX1mdW5jdGlvbiBtMihuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX2lzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzPVtdLHRoaXMuaW5pdGlhbGl6ZWQ9bmV3IHVuKGU9Pnt0aGlzLl9pc0luaXRpYWxpemVkP3RoaXMuX25vdGlmeVN1YnNjcmliZXIoZSk6dGhpcy5fcGVuZGluZ1N1YnNjcmliZXJzLnB1c2goZSl9KX1fbWFya0luaXRpYWxpemVkKCl7dGhpcy5faXNJbml0aWFsaXplZD0hMCx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnMuZm9yRWFjaCh0aGlzLl9ub3RpZnlTdWJzY3JpYmVyKSx0aGlzLl9wZW5kaW5nU3Vic2NyaWJlcnM9bnVsbH1fbm90aWZ5U3Vic2NyaWJlcih0KXt0Lm5leHQoKSx0LmNvbXBsZXRlKCl9fX1uZXcgcGUoIk1BVF9EQVRFX0xPQ0FMRSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gam8oV2QpfX0pLG5ldyBwZSgibWF0LWRhdGUtZm9ybWF0cyIpO3ZhciBjZD0oKCk9PntjbGFzcyBue2lzRXJyb3JTdGF0ZShlLGkpe3JldHVybiEhKGUmJmUuaW52YWxpZCYmKGUudG91Y2hlZHx8aSYmaS5zdWJtaXR0ZWQpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksaXRlPXtlbnRlckR1cmF0aW9uOjIyNSxleGl0RHVyYXRpb246MTUwfSxNSD1sYSh7cGFzc2l2ZTohMH0pLHJ0ZT1bIm1vdXNlZG93biIsInRvdWNoc3RhcnQiXSxvdGU9WyJtb3VzZXVwIiwibW91c2VsZWF2ZSIsInRvdWNoZW5kIiwidG91Y2hjYW5jZWwiXSxUdj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl90YXJnZXQ9dCx0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2FjdGl2ZVJpcHBsZXM9bmV3IE1hcCx0aGlzLl9wb2ludGVyVXBFdmVudHNSZWdpc3RlcmVkPSExLHIuaXNCcm93c2VyJiYodGhpcy5fY29udGFpbmVyRWxlbWVudD1MYShpKSl9ZmFkZUluUmlwcGxlKHQsZSxpPXt9KXtsZXQgcj10aGlzLl9jb250YWluZXJSZWN0PXRoaXMuX2NvbnRhaW5lclJlY3R8fHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz17Li4uaXRlLC4uLmkuYW5pbWF0aW9ufTtpLmNlbnRlcmVkJiYodD1yLmxlZnQrci53aWR0aC8yLGU9ci50b3Arci5oZWlnaHQvMik7bGV0IHM9aS5yYWRpdXN8fGZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1NYXRoLm1heChNYXRoLmFicyhuLWUubGVmdCksTWF0aC5hYnMobi1lLnJpZ2h0KSkscj1NYXRoLm1heChNYXRoLmFicyh0LWUudG9wKSxNYXRoLmFicyh0LWUuYm90dG9tKSk7cmV0dXJuIE1hdGguc3FydChpKmkrcipyKX0odCxlLHIpLGE9dC1yLmxlZnQsbD1lLXIudG9wLGM9by5lbnRlckR1cmF0aW9uLHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dS5jbGFzc0xpc3QuYWRkKCJtYXQtcmlwcGxlLWVsZW1lbnQiKSx1LnN0eWxlLmxlZnQ9YS1zKyJweCIsdS5zdHlsZS50b3A9bC1zKyJweCIsdS5zdHlsZS5oZWlnaHQ9MipzKyJweCIsdS5zdHlsZS53aWR0aD0yKnMrInB4IixudWxsIT1pLmNvbG9yJiYodS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9aS5jb2xvciksdS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YCR7Y31tc2AsdGhpcy5fY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh1KTtsZXQgZD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh1KSxoPWQudHJhbnNpdGlvbkR1cmF0aW9uLGY9Im5vbmUiPT09ZC50cmFuc2l0aW9uUHJvcGVydHl8fCIwcyI9PT1ofHwiMHMsIDBzIj09PWgsbT1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlLGkscj0hMSl7dGhpcy5fcmVuZGVyZXI9dCx0aGlzLmVsZW1lbnQ9ZSx0aGlzLmNvbmZpZz1pLHRoaXMuX2FuaW1hdGlvbkZvcmNpYmx5RGlzYWJsZWRUaHJvdWdoQ3NzPXIsdGhpcy5zdGF0ZT0zfWZhZGVPdXQoKXt0aGlzLl9yZW5kZXJlci5mYWRlT3V0UmlwcGxlKHRoaXMpfX0odGhpcyx1LGksZik7dS5zdHlsZS50cmFuc2Zvcm09InNjYWxlM2QoMSwgMSwgMSkiLG0uc3RhdGU9MCxpLnBlcnNpc3RlbnR8fCh0aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlPW0pO2xldCB4PW51bGw7cmV0dXJuIWYmJihjfHxvLmV4aXREdXJhdGlvbikmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCBnPSgpPT50aGlzLl9maW5pc2hSaXBwbGVUcmFuc2l0aW9uKG0pLGI9KCk9PnRoaXMuX2Rlc3Ryb3lSaXBwbGUobSk7dS5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixnKSx1LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25jYW5jZWwiLGIpLHg9e29uVHJhbnNpdGlvbkVuZDpnLG9uVHJhbnNpdGlvbkNhbmNlbDpifX0pLHRoaXMuX2FjdGl2ZVJpcHBsZXMuc2V0KG0seCksKGZ8fCFjKSYmdGhpcy5fZmluaXNoUmlwcGxlVHJhbnNpdGlvbihtKSxtfWZhZGVPdXRSaXBwbGUodCl7aWYoMj09PXQuc3RhdGV8fDM9PT10LnN0YXRlKXJldHVybjtsZXQgZT10LmVsZW1lbnQsaT17Li4uaXRlLC4uLnQuY29uZmlnLmFuaW1hdGlvbn07ZS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249YCR7aS5leGl0RHVyYXRpb259bXNgLGUuc3R5bGUub3BhY2l0eT0iMCIsdC5zdGF0ZT0yLCh0Ll9hbmltYXRpb25Gb3JjaWJseURpc2FibGVkVGhyb3VnaENzc3x8IWkuZXhpdER1cmF0aW9uKSYmdGhpcy5fZmluaXNoUmlwcGxlVHJhbnNpdGlvbih0KX1mYWRlT3V0QWxsKCl7dGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+dC5mYWRlT3V0KCkpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fZ2V0QWN0aXZlUmlwcGxlcygpLmZvckVhY2godD0+e3QuY29uZmlnLnBlcnNpc3RlbnR8fHQuZmFkZU91dCgpfSl9c2V0dXBUcmlnZ2VyRXZlbnRzKHQpe2xldCBlPUxhKHQpOyFlfHxlPT09dGhpcy5fdHJpZ2dlckVsZW1lbnR8fCh0aGlzLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCksdGhpcy5fdHJpZ2dlckVsZW1lbnQ9ZSx0aGlzLl9yZWdpc3RlckV2ZW50cyhydGUpKX1oYW5kbGVFdmVudCh0KXsibW91c2Vkb3duIj09PXQudHlwZT90aGlzLl9vbk1vdXNlZG93bih0KToidG91Y2hzdGFydCI9PT10LnR5cGU/dGhpcy5fb25Ub3VjaFN0YXJ0KHQpOnRoaXMuX29uUG9pbnRlclVwKCksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZHx8KHRoaXMuX3JlZ2lzdGVyRXZlbnRzKG90ZSksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZD0hMCl9X2ZpbmlzaFJpcHBsZVRyYW5zaXRpb24odCl7MD09PXQuc3RhdGU/dGhpcy5fc3RhcnRGYWRlT3V0VHJhbnNpdGlvbih0KToyPT09dC5zdGF0ZSYmdGhpcy5fZGVzdHJveVJpcHBsZSh0KX1fc3RhcnRGYWRlT3V0VHJhbnNpdGlvbih0KXtsZXQgZT10PT09dGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZSx7cGVyc2lzdGVudDppfT10LmNvbmZpZzt0LnN0YXRlPTEsIWkmJighZXx8IXRoaXMuX2lzUG9pbnRlckRvd24pJiZ0LmZhZGVPdXQoKX1fZGVzdHJveVJpcHBsZSh0KXtsZXQgZT10aGlzLl9hY3RpdmVSaXBwbGVzLmdldCh0KT8/bnVsbDt0aGlzLl9hY3RpdmVSaXBwbGVzLmRlbGV0ZSh0KSx0aGlzLl9hY3RpdmVSaXBwbGVzLnNpemV8fCh0aGlzLl9jb250YWluZXJSZWN0PW51bGwpLHQ9PT10aGlzLl9tb3N0UmVjZW50VHJhbnNpZW50UmlwcGxlJiYodGhpcy5fbW9zdFJlY2VudFRyYW5zaWVudFJpcHBsZT1udWxsKSx0LnN0YXRlPTMsbnVsbCE9PWUmJih0LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsZS5vblRyYW5zaXRpb25FbmQpLHQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uY2FuY2VsIixlLm9uVHJhbnNpdGlvbkNhbmNlbCkpLHQuZWxlbWVudC5yZW1vdmUoKX1fb25Nb3VzZWRvd24odCl7bGV0IGU9JE0odCksaT10aGlzLl9sYXN0VG91Y2hTdGFydEV2ZW50JiZEYXRlLm5vdygpPHRoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQrODAwOyF0aGlzLl90YXJnZXQucmlwcGxlRGlzYWJsZWQmJiFlJiYhaSYmKHRoaXMuX2lzUG9pbnRlckRvd249ITAsdGhpcy5mYWRlSW5SaXBwbGUodC5jbGllbnRYLHQuY2xpZW50WSx0aGlzLl90YXJnZXQucmlwcGxlQ29uZmlnKSl9X29uVG91Y2hTdGFydCh0KXtpZighdGhpcy5fdGFyZ2V0LnJpcHBsZURpc2FibGVkJiYhZXcodCkpe3RoaXMuX2xhc3RUb3VjaFN0YXJ0RXZlbnQ9RGF0ZS5ub3coKSx0aGlzLl9pc1BvaW50ZXJEb3duPSEwO2xldCBlPXQuY2hhbmdlZFRvdWNoZXM7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdGhpcy5mYWRlSW5SaXBwbGUoZVtpXS5jbGllbnRYLGVbaV0uY2xpZW50WSx0aGlzLl90YXJnZXQucmlwcGxlQ29uZmlnKX19X29uUG9pbnRlclVwKCl7IXRoaXMuX2lzUG9pbnRlckRvd258fCh0aGlzLl9pc1BvaW50ZXJEb3duPSExLHRoaXMuX2dldEFjdGl2ZVJpcHBsZXMoKS5mb3JFYWNoKHQ9PnshdC5jb25maWcucGVyc2lzdGVudCYmKDE9PT10LnN0YXRlfHx0LmNvbmZpZy50ZXJtaW5hdGVPblBvaW50ZXJVcCYmMD09PXQuc3RhdGUpJiZ0LmZhZGVPdXQoKX0pKX1fcmVnaXN0ZXJFdmVudHModCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dC5mb3JFYWNoKGU9Pnt0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGUsdGhpcyxNSCl9KX0pfV9nZXRBY3RpdmVSaXBwbGVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYWN0aXZlUmlwcGxlcy5rZXlzKCkpfV9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl7dGhpcy5fdHJpZ2dlckVsZW1lbnQmJihydGUuZm9yRWFjaCh0PT57dGhpcy5fdHJpZ2dlckVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LHRoaXMsTUgpfSksdGhpcy5fcG9pbnRlclVwRXZlbnRzUmVnaXN0ZXJlZCYmb3RlLmZvckVhY2godD0+e3RoaXMuX3RyaWdnZXJFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodCx0aGlzLE1IKX0pKX19LGcyPW5ldyBwZSgibWF0LXJpcHBsZS1nbG9iYWwtb3B0aW9ucyIpLFlvPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzKXt0aGlzLl9lbGVtZW50UmVmPWUsdGhpcy5fYW5pbWF0aW9uTW9kZT1zLHRoaXMucmFkaXVzPTAsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5faXNJbml0aWFsaXplZD0hMSx0aGlzLl9nbG9iYWxPcHRpb25zPW98fHt9LHRoaXMuX3JpcHBsZVJlbmRlcmVyPW5ldyBUdih0aGlzLGksZSxyKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe2UmJnRoaXMuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKSx0aGlzLl9kaXNhYmxlZD1lLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ8fHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1zZXQgdHJpZ2dlcihlKXt0aGlzLl90cmlnZ2VyPWUsdGhpcy5fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl9bmdPbkluaXQoKXt0aGlzLl9pc0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwVHJpZ2dlckV2ZW50c0lmRW5hYmxlZCgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuX3JlbW92ZVRyaWdnZXJFdmVudHMoKX1mYWRlT3V0QWxsKCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbCgpfWZhZGVPdXRBbGxOb25QZXJzaXN0ZW50KCl7dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZU91dEFsbE5vblBlcnNpc3RlbnQoKX1nZXQgcmlwcGxlQ29uZmlnKCl7cmV0dXJue2NlbnRlcmVkOnRoaXMuY2VudGVyZWQscmFkaXVzOnRoaXMucmFkaXVzLGNvbG9yOnRoaXMuY29sb3IsYW5pbWF0aW9uOnsuLi50aGlzLl9nbG9iYWxPcHRpb25zLmFuaW1hdGlvbiwuLi4iTm9vcEFuaW1hdGlvbnMiPT09dGhpcy5fYW5pbWF0aW9uTW9kZT97ZW50ZXJEdXJhdGlvbjowLGV4aXREdXJhdGlvbjowfTp7fSwuLi50aGlzLmFuaW1hdGlvbn0sdGVybWluYXRlT25Qb2ludGVyVXA6dGhpcy5fZ2xvYmFsT3B0aW9ucy50ZXJtaW5hdGVPblBvaW50ZXJVcH19Z2V0IHJpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fCEhdGhpcy5fZ2xvYmFsT3B0aW9ucy5kaXNhYmxlZH1fc2V0dXBUcmlnZ2VyRXZlbnRzSWZFbmFibGVkKCl7IXRoaXMuZGlzYWJsZWQmJnRoaXMuX2lzSW5pdGlhbGl6ZWQmJnRoaXMuX3JpcHBsZVJlbmRlcmVyLnNldHVwVHJpZ2dlckV2ZW50cyh0aGlzLnRyaWdnZXIpfWxhdW5jaChlLGk9MCxyKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5fcmlwcGxlUmVuZGVyZXIuZmFkZUluUmlwcGxlKGUsaSx7Li4udGhpcy5yaXBwbGVDb25maWcsLi4ucn0pOnRoaXMuX3JpcHBsZVJlbmRlcmVyLmZhZGVJblJpcHBsZSgwLDAsey4uLnRoaXMucmlwcGxlQ29uZmlnLC4uLmV9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShfdCksTShvaSksTShnMiw4KSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwibWF0LXJpcHBsZSIsIiJdLFsiIiwibWF0UmlwcGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXJpcHBsZSJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXJpcHBsZS11bmJvdW5kZWQiLGkudW5ib3VuZGVkKX0saW5wdXRzOntjb2xvcjpbIm1hdFJpcHBsZUNvbG9yIiwiY29sb3IiXSx1bmJvdW5kZWQ6WyJtYXRSaXBwbGVVbmJvdW5kZWQiLCJ1bmJvdW5kZWQiXSxjZW50ZXJlZDpbIm1hdFJpcHBsZUNlbnRlcmVkIiwiY2VudGVyZWQiXSxyYWRpdXM6WyJtYXRSaXBwbGVSYWRpdXMiLCJyYWRpdXMiXSxhbmltYXRpb246WyJtYXRSaXBwbGVBbmltYXRpb24iLCJhbmltYXRpb24iXSxkaXNhYmxlZDpbIm1hdFJpcHBsZURpc2FibGVkIiwiZGlzYWJsZWQiXSx0cmlnZ2VyOlsibWF0UmlwcGxlVHJpZ2dlciIsInRyaWdnZXIiXX0sZXhwb3J0QXM6WyJtYXRSaXBwbGUiXX0pLG59KSgpLF9sPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltsbixsbl19KSxufSkoKSwkUmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hbmltYXRpb25Nb2RlPWUsdGhpcy5zdGF0ZT0idW5jaGVja2VkIix0aGlzLmRpc2FibGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFBpLDgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtcHNldWRvLWNoZWNrYm94Il1dLGhvc3RBdHRyczpbMSwibWF0LXBzZXVkby1jaGVja2JveCJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXBzZXVkby1jaGVja2JveC1pbmRldGVybWluYXRlIiwiaW5kZXRlcm1pbmF0ZSI9PT1pLnN0YXRlKSgibWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkIiwiY2hlY2tlZCI9PT1pLnN0YXRlKSgibWF0LXBzZXVkby1jaGVja2JveC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSl9LGlucHV0czp7c3RhdGU6InN0YXRlIixkaXNhYmxlZDoiZGlzYWJsZWQifSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sc3R5bGVzOlsnLm1hdC1wc2V1ZG8tY2hlY2tib3h7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MDt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksYmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSl9Lm1hdC1wc2V1ZG8tY2hlY2tib3g6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtjb250ZW50OiIiO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIGN1cnJlbnRDb2xvcjt0cmFuc2l0aW9uOm9wYWNpdHkgOTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAwLjEpfS5tYXQtcHNldWRvLWNoZWNrYm94Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCwubWF0LXBzZXVkby1jaGVja2JveC5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGV7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1wc2V1ZG8tY2hlY2tib3guX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXBzZXVkby1jaGVja2JveC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtcHNldWRvLWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcHNldWRvLWNoZWNrYm94LWluZGV0ZXJtaW5hdGU6OmFmdGVye3RvcDo1cHg7bGVmdDoxcHg7d2lkdGg6MTBweDtvcGFjaXR5OjE7Ym9yZGVyLXJhZGl1czoycHh9Lm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZDo6YWZ0ZXJ7dG9wOjIuNHB4O2xlZnQ6MXB4O3dpZHRoOjhweDtoZWlnaHQ6M3B4O2JvcmRlci1sZWZ0OjJweCBzb2xpZCBjdXJyZW50Q29sb3I7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtib3gtc2l6aW5nOmNvbnRlbnQtYm94fSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGVPZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbbG5dfSksbn0pKCksaXc9bmV3IHBlKCJNQVRfT1BUSU9OX1BBUkVOVF9DT01QT05FTlQiKSxydz0oc28oY2xhc3N7fSksbmV3IHBlKCJNYXRPcHRncm91cCIpKSx0T2U9MCxudz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9ITEpe3RoaXMuc291cmNlPXQsdGhpcy5pc1VzZXJJbnB1dD1lfX0sbk9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fcGFyZW50PXIsdGhpcy5ncm91cD1vLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPSIiLHRoaXMuaWQ9Im1hdC1vcHRpb24tIit0T2UrKyx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlPW5ldyBHLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcga2V9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Lm11bHRpcGxlfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5ncm91cCYmdGhpcy5ncm91cC5kaXNhYmxlZHx8dGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGUpe3RoaXMuX2Rpc2FibGVkPVJ0KGUpfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpc2FibGVSaXBwbGUpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5fYWN0aXZlfWdldCB2aWV3VmFsdWUoKXtyZXR1cm4odGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS50ZXh0Q29udGVudHx8IiIpLnRyaW0oKX1zZWxlY3QoKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCgpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fZW1pdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCkpfWZvY3VzKGUsaSl7bGV0IHI9dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKTsiZnVuY3Rpb24iPT10eXBlb2Ygci5mb2N1cyYmci5mb2N1cyhpKX1zZXRBY3RpdmVTdHlsZXMoKXt0aGlzLl9hY3RpdmV8fCh0aGlzLl9hY3RpdmU9ITAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfXNldEluYWN0aXZlU3R5bGVzKCl7dGhpcy5fYWN0aXZlJiYodGhpcy5fYWN0aXZlPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXRMYWJlbCgpe3JldHVybiB0aGlzLnZpZXdWYWx1ZX1faGFuZGxlS2V5ZG93bihlKXsoMTM9PT1lLmtleUNvZGV8fDMyPT09ZS5rZXlDb2RlKSYmIWtyKGUpJiYodGhpcy5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSxlLnByZXZlbnREZWZhdWx0KCkpfV9zZWxlY3RWaWFJbnRlcmFjdGlvbigpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9zZWxlY3RlZD0hdGhpcy5tdWx0aXBsZXx8IXRoaXMuX3NlbGVjdGVkLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuX2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudCghMCkpfV9nZXRBcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZHx8IXRoaXMubXVsdGlwbGUmJm51bGx9X2dldFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuZGlzYWJsZWQ/Ii0xIjoiMCJ9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudH1uZ0FmdGVyVmlld0NoZWNrZWQoKXtpZih0aGlzLl9zZWxlY3RlZCl7bGV0IGU9dGhpcy52aWV3VmFsdWU7ZSE9PXRoaXMuX21vc3RSZWNlbnRWaWV3VmFsdWUmJih0aGlzLl9tb3N0UmVjZW50Vmlld1ZhbHVlPWUsdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQoKSl9fW5nT25EZXN0cm95KCl7dGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9X2VtaXRTZWxlY3Rpb25DaGFuZ2VFdmVudChlPSExKXt0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV3IG53KHRoaXMsZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7bmwoKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIsaWQ6ImlkIixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntvblNlbGVjdGlvbkNoYW5nZToib25TZWxlY3Rpb25DaGFuZ2UifX0pLG59KSgpLE9zPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBuT2V7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oaXcsOCksTShydyw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LW9wdGlvbiJdXSxob3N0QXR0cnM6WyJyb2xlIiwib3B0aW9uIiwxLCJtYXQtb3B0aW9uIiwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSwyJmUmJihfcygiaWQiLGkuaWQpLHplKCJ0YWJpbmRleCIsaS5fZ2V0VGFiSW5kZXgoKSkoImFyaWEtc2VsZWN0ZWQiLGkuX2dldEFyaWFTZWxlY3RlZCgpKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSxldCgibWF0LXNlbGVjdGVkIixpLnNlbGVjdGVkKSgibWF0LW9wdGlvbi1tdWx0aXBsZSIsaS5tdWx0aXBsZSkoIm1hdC1hY3RpdmUiLGkuYWN0aXZlKSgibWF0LW9wdGlvbi1kaXNhYmxlZCIsaS5kaXNhYmxlZCkpfSxleHBvcnRBczpbIm1hdE9wdGlvbiJdLGZlYXR1cmVzOlt0dF0sbmdDb250ZW50U2VsZWN0b3JzOllSZSxkZWNsczo1LHZhcnM6NCxjb25zdHM6W1siY2xhc3MiLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsxLCJtYXQtb3B0aW9uLXRleHQiXSxbImNsYXNzIiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsNCwibmdJZiJdLFsibWF0LXJpcHBsZSIsIiIsMSwibWF0LW9wdGlvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZVRyaWdnZXIiLCJtYXRSaXBwbGVEaXNhYmxlZCJdLFsxLCJtYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveCIsMywic3RhdGUiLCJkaXNhYmxlZCJdLFsxLCJjZGstdmlzdWFsbHktaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxFKDAsV1JlLDEsMiwibWF0LXBzZXVkby1jaGVja2JveCIsMCksXygxLCJzcGFuIiwxKSxWbigyKSx2KCksRSgzLHFSZSwyLDEsInNwYW4iLDIpLE8oNCwiZGl2IiwzKSksMiZlJiYoeSgibmdJZiIsaS5tdWx0aXBsZSksQygzKSx5KCJuZ0lmIixpLmdyb3VwJiZpLmdyb3VwLl9pbmVydCksQygxKSx5KCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuZGlzYWJsZWR8fGkuZGlzYWJsZVJpcHBsZSkpfSxkZXBlbmRlbmNpZXM6W1lvLEJlLCRSZV0sc3R5bGVzOlsnLm1hdC1vcHRpb257d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDhweDtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bWF4LXdpZHRoOjEwMCU7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWF4LXdpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94O2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LW9wdGlvbltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9W2Rpcj1ydGxdIC5tYXQtb3B0aW9ue3RleHQtYWxpZ246cmlnaHR9Lm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1yaWdodDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LW9wdGlvbiAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH1bZGlyPXJ0bF0gLm1hdC1vcHRpb24gLm1hdC1pY29ue21hcmdpbi1sZWZ0OjE2cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1vcHRpb25bYXJpYS1kaXNhYmxlZD10cnVlXXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LW9wdGdyb3VwIC5tYXQtb3B0aW9uOm5vdCgubWF0LW9wdGlvbi1tdWx0aXBsZSl7cGFkZGluZy1sZWZ0OjMycHh9W2Rpcj1ydGxdIC5tYXQtb3B0Z3JvdXAgLm1hdC1vcHRpb246bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKXtwYWRkaW5nLWxlZnQ6MTZweDtwYWRkaW5nLXJpZ2h0OjMycHh9Lm1hdC1vcHRpb24ubWF0LWFjdGl2ZTo6YmVmb3Jle2NvbnRlbnQ6IiJ9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvblthcmlhLWRpc2FibGVkPXRydWVde29wYWNpdHk6LjV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW9wdGlvbi5tYXQtc2VsZWN0ZWQ6bm90KC5tYXQtb3B0aW9uLW11bHRpcGxlKTo6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6MTBweDtoZWlnaHQ6MDtib3JkZXItYm90dG9tOnNvbGlkIDEwcHg7Ym9yZGVyLXJhZGl1czoxMHB4fVtkaXI9cnRsXSAuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtb3B0aW9uLm1hdC1zZWxlY3RlZDpub3QoLm1hdC1vcHRpb24tbXVsdGlwbGUpOjphZnRlcntyaWdodDphdXRvO2xlZnQ6MTZweH0ubWF0LW9wdGlvbi10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtb3B0aW9uIC5tYXQtb3B0aW9uLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtb3B0aW9uLXBzZXVkby1jaGVja2JveHttYXJnaW4tcmlnaHQ6OHB4fVtkaXI9cnRsXSAubWF0LW9wdGlvbi1wc2V1ZG8tY2hlY2tib3h7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDowfSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIG93KG4sdCxlKXtpZihlLmxlbmd0aCl7bGV0IGk9dC50b0FycmF5KCkscj1lLnRvQXJyYXkoKSxvPTA7Zm9yKGxldCBzPTA7czxuKzE7cysrKWlbc10uZ3JvdXAmJmlbc10uZ3JvdXA9PT1yW29dJiZvKys7cmV0dXJuIG99cmV0dXJuIDB9ZnVuY3Rpb24gXzIobix0LGUsaSl7cmV0dXJuIG48ZT9uOm4rdD5lK2k/TWF0aC5tYXgoMCxuLWkrdCk6ZX12YXIgQXY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W19sLE1lLGxuLGVPZV19KSxufSkoKSxsdGU9WyJtYXQtYnV0dG9uIiwiIl0sY3RlPVsiKiJdLG9PZT1bIm1hdC1idXR0b24iLCJtYXQtZmxhdC1idXR0b24iLCJtYXQtaWNvbi1idXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIm1hdC1taW5pLWZhYiIsIm1hdC1mYWIiXSxzT2U9a28oc28ocW8oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSksX249KCgpPT57Y2xhc3MgbiBleHRlbmRzIHNPZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fZm9jdXNNb25pdG9yPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1yLHRoaXMuaXNSb3VuZEJ1dHRvbj10aGlzLl9oYXNIb3N0QXR0cmlidXRlcygibWF0LWZhYiIsIm1hdC1taW5pLWZhYiIpLHRoaXMuaXNJY29uQnV0dG9uPXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKCJtYXQtaWNvbi1idXR0b24iKTtmb3IobGV0IG8gb2Ygb09lKXRoaXMuX2hhc0hvc3RBdHRyaWJ1dGVzKG8pJiZ0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQobyk7ZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1idXR0b24tYmFzZSIpLHRoaXMuaXNSb3VuZEJ1dHRvbiYmKHRoaXMuY29sb3I9ImFjY2VudCIpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZ2V0SG9zdEVsZW1lbnQoKSxlLGkpOnRoaXMuX2dldEhvc3RFbGVtZW50KCkuZm9jdXMoaSl9X2dldEhvc3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1faXNSaXBwbGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVSaXBwbGV8fHRoaXMuZGlzYWJsZWR9X2hhc0hvc3RBdHRyaWJ1dGVzKC4uLmUpe3JldHVybiBlLnNvbWUoaT0+dGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5oYXNBdHRyaWJ1dGUoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEZyKSxNKFBpLDgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJidXR0b24iLCJtYXQtYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtcmFpc2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWljb24tYnV0dG9uIiwiIl0sWyJidXR0b24iLCJtYXQtZmFiIiwiIl0sWyJidXR0b24iLCJtYXQtbWluaS1mYWIiLCIiXSxbImJ1dHRvbiIsIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiJdLFsiYnV0dG9uIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoWW8sNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yaXBwbGU9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksZXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uIl0sZmVhdHVyZXM6W3R0XSxhdHRyczpsdGUsbmdDb250ZW50U2VsZWN0b3JzOmN0ZSxkZWNsczo0LHZhcnM6NSxjb25zdHM6W1sxLCJtYXQtYnV0dG9uLXdyYXBwZXIiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWJ1dHRvbi1yaXBwbGUiLDMsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlQ2VudGVyZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWzEsIm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHhpKCksXygwLCJzcGFuIiwwKSxWbigxKSx2KCksTygyLCJzcGFuIiwxKSgzLCJzcGFuIiwyKSksMiZlJiYoQygyKSxldCgibWF0LWJ1dHRvbi1yaXBwbGUtcm91bmQiLGkuaXNSb3VuZEJ1dHRvbnx8aS5pc0ljb25CdXR0b24pLHkoIm1hdFJpcHBsZURpc2FibGVkIixpLl9pc1JpcHBsZURpc2FibGVkKCkpKCJtYXRSaXBwbGVDZW50ZXJlZCIsaS5pc0ljb25CdXR0b24pKCJtYXRSaXBwbGVUcmlnZ2VyIixpLl9nZXRIb3N0RWxlbWVudCgpKSl9LGRlcGVuZGVuY2llczpbWW9dLHN0eWxlczpbIi5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbiAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MH0ubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMDR9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbjpob3Zlcjpub3QoLm1hdC1idXR0b24tZGlzYWJsZWQpIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfX0ubWF0LWJ1dHRvbiwubWF0LWljb24tYnV0dG9uLC5tYXQtc3Ryb2tlZC1idXR0b24sLm1hdC1mbGF0LWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGV9Lm1hdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1pY29uLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LXN0cm9rZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtZmxhdC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LWljb24tYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1zdHJva2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtZmxhdC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1pY29uLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtc3Ryb2tlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWZsYXQtYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b257Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LXJhaXNlZC1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXJhaXNlZC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtcmFpc2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LXJhaXNlZC1idXR0b24uX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXN0cm9rZWQtYnV0dG9ue2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO3BhZGRpbmc6MCAxNXB4O2xpbmUtaGVpZ2h0OjM0cHh9Lm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZSwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOi0xcHg7bGVmdDotMXB4O3JpZ2h0Oi0xcHg7Ym90dG9tOi0xcHh9Lm1hdC1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1mYWIubWF0LWJ1dHRvbi1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdH0ubWF0LWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzoxNnB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MjRweH0ubWF0LW1pbmktZmFie2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTttaW4td2lkdGg6MDtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O3BhZGRpbmc6MDtmbGV4LXNocmluazowfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtbWluaS1mYWIuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LW1pbmktZmFiLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4xMn0ubWF0LW1pbmktZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWluaS1mYWIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXJ7cGFkZGluZzo4cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtaWNvbi1idXR0b257cGFkZGluZzowO21pbi13aWR0aDowO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7ZmxleC1zaHJpbms6MDtsaW5lLWhlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6NTAlfS5tYXQtaWNvbi1idXR0b24gaSwubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntsaW5lLWhlaWdodDoyNHB4fS5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtib3JkZXItcmFkaXVzOmluaGVyaXR9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGU6bm90KDplbXB0eSl7dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1idXR0b24tcmlwcGxlLXJvdW5ke2JvcmRlci1yYWRpdXM6NTAlO3otaW5kZXg6MX0ubWF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1mbGF0LWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1zdHJva2VkLWJ1dHRvbiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1yYWlzZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPiosLm1hdC1taW5pLWZhYiAubWF0LWJ1dHRvbi13cmFwcGVyPip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24sLm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1zdWZmaXggLm1hdC1pY29uLWJ1dHRvbntkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTppbmhlcml0O3dpZHRoOjIuNWVtO2hlaWdodDoyLjVlbX0ubWF0LWZsYXQtYnV0dG9uOjpiZWZvcmUsLm1hdC1yYWlzZWQtYnV0dG9uOjpiZWZvcmUsLm1hdC1mYWI6OmJlZm9yZSwubWF0LW1pbmktZmFiOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDJweCkgKiAtMSl9Lm1hdC1zdHJva2VkLWJ1dHRvbjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAzcHgpICogLTEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZsYXQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1yYWlzZWQtYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pY29uLWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmFiLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1taW5pLWZhYntvdXRsaW5lOnNvbGlkIDFweH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxJdj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgX257Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoaSxlLHIpLHRoaXMuX25nWm9uZT1vLHRoaXMuX2hhbHREaXNhYmxlZEV2ZW50cz1zPT57dGhpcy5kaXNhYmxlZCYmKHMucHJldmVudERlZmF1bHQoKSxzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19bmdBZnRlclZpZXdJbml0KCl7c3VwZXIubmdBZnRlclZpZXdJbml0KCksdGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX0pOnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5faGFsdERpc2FibGVkRXZlbnRzKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oYWx0RGlzYWJsZWRFdmVudHMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEZyKSxNKFJlKSxNKFBpLDgpLE0oX3QsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImEiLCJtYXQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LXJhaXNlZC1idXR0b24iLCIiXSxbImEiLCJtYXQtaWNvbi1idXR0b24iLCIiXSxbImEiLCJtYXQtZmFiIiwiIl0sWyJhIiwibWF0LW1pbmktZmFiIiwiIl0sWyJhIiwibWF0LXN0cm9rZWQtYnV0dG9uIiwiIl0sWyJhIiwibWF0LWZsYXQtYnV0dG9uIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWZvY3VzLWluZGljYXRvciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoemUoInRhYmluZGV4IixpLmRpc2FibGVkPy0xOmkudGFiSW5kZXgpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSksZXQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkoIm1hdC1idXR0b24tZGlzYWJsZWQiLGkuZGlzYWJsZWQpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4In0sZXhwb3J0QXM6WyJtYXRCdXR0b24iLCJtYXRBbmNob3IiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmx0ZSxuZ0NvbnRlbnRTZWxlY3RvcnM6Y3RlLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsIm1hdC1idXR0b24td3JhcHBlciJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtYnV0dG9uLXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVDZW50ZXJlZCIsIm1hdFJpcHBsZVRyaWdnZXIiXSxbMSwibWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxfKDAsInNwYW4iLDApLFZuKDEpLHYoKSxPKDIsInNwYW4iLDEpKDMsInNwYW4iLDIpKSwyJmUmJihDKDIpLGV0KCJtYXQtYnV0dG9uLXJpcHBsZS1yb3VuZCIsaS5pc1JvdW5kQnV0dG9ufHxpLmlzSWNvbkJ1dHRvbikseSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZUNlbnRlcmVkIixpLmlzSWNvbkJ1dHRvbikoIm1hdFJpcHBsZVRyaWdnZXIiLGkuX2dldEhvc3RFbGVtZW50KCkpKX0sZGVwZW5kZW5jaWVzOltZb10sc3R5bGVzOlsiLm1hdC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTowfS5tYXQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5Oi4wNH1AbWVkaWEoaG92ZXI6IG5vbmUpey5tYXQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uOmhvdmVyOm5vdCgubWF0LWJ1dHRvbi1kaXNhYmxlZCkgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXtvcGFjaXR5OjB9fS5tYXQtYnV0dG9uLC5tYXQtaWNvbi1idXR0b24sLm1hdC1zdHJva2VkLWJ1dHRvbiwubWF0LWZsYXQtYnV0dG9ue2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOm5vbmU7Ym9yZGVyOm5vbmU7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowO21pbi13aWR0aDo2NHB4O2xpbmUtaGVpZ2h0OjM2cHg7cGFkZGluZzowIDE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWljb24tYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtc3Ryb2tlZC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1mbGF0LWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVkLC5tYXQtaWNvbi1idXR0b24ubWF0LWJ1dHRvbi1kaXNhYmxlZCwubWF0LXN0cm9rZWQtYnV0dG9uLm1hdC1idXR0b24tZGlzYWJsZWQsLm1hdC1mbGF0LWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtaWNvbi1idXR0b24uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LWljb24tYnV0dG9uLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheSwubWF0LXN0cm9rZWQtYnV0dG9uLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1zdHJva2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mbGF0LWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtZmxhdC1idXR0b24uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVyLC5tYXQtaWNvbi1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsLm1hdC1zdHJva2VkLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lciwubWF0LWZsYXQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSl9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtcmFpc2VkLWJ1dHRvbi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtcmFpc2VkLWJ1dHRvbi5jZGstcHJvZ3JhbS1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouMTJ9Lm1hdC1yYWlzZWQtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtcmFpc2VkLWJ1dHRvbi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtc3Ryb2tlZC1idXR0b257Ym9yZGVyOjFweCBzb2xpZCBjdXJyZW50Q29sb3I7cGFkZGluZzowIDE1cHg7bGluZS1oZWlnaHQ6MzRweH0ubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXJpcHBsZS5tYXQtcmlwcGxlLC5tYXQtc3Ryb2tlZC1idXR0b24gLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6LTFweDtsZWZ0Oi0xcHg7cmlnaHQ6LTFweDtib3R0b206LTFweH0ubWF0LWZhYntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MDttaW4td2lkdGg6NjRweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OnZpc2libGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO3RyYW5zaXRpb246YmFja2dyb3VuZCA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3gtc2hhZG93IDI4MG1zIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7bWluLXdpZHRoOjA7Ym9yZGVyLXJhZGl1czo1MCU7d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjA7ZmxleC1zaHJpbms6MH0ubWF0LWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LWZhYi5tYXQtYnV0dG9uLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5tYXQtZmFiLmNkay1rZXlib2FyZC1mb2N1c2VkIC5tYXQtYnV0dG9uLWZvY3VzLW92ZXJsYXksLm1hdC1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtZmFiOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtZmFiLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjE2cHggMDtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoyNHB4fS5tYXQtbWluaS1mYWJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpwb2ludGVyO291dGxpbmU6bm9uZTtib3JkZXI6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtkaXNwbGF5OmlubGluZS1ibG9jazt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjA7bWluLXdpZHRoOjY0cHg7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMTZweDtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm94LXNoYWRvdyAyODBtcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpO21pbi13aWR0aDowO2JvcmRlci1yYWRpdXM6NTAlO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7cGFkZGluZzowO2ZsZXgtc2hyaW5rOjB9Lm1hdC1taW5pLWZhYjo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MH0ubWF0LW1pbmktZmFiLm1hdC1idXR0b24tZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1taW5pLWZhYi5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5LC5tYXQtbWluaS1mYWIuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfS5tYXQtbWluaS1mYWI6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC1taW5pLWZhYi5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtbWluaS1mYWIgLm1hdC1idXR0b24td3JhcHBlcntwYWRkaW5nOjhweCAwO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1pY29uLWJ1dHRvbntwYWRkaW5nOjA7bWluLXdpZHRoOjA7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmbGV4LXNocmluazowO2xpbmUtaGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCV9Lm1hdC1pY29uLWJ1dHRvbiBpLC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue2xpbmUtaGVpZ2h0OjI0cHh9Lm1hdC1idXR0b24tcmlwcGxlLm1hdC1yaXBwbGUsLm1hdC1idXR0b24tZm9jdXMtb3ZlcmxheXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ubWF0LWJ1dHRvbi1yaXBwbGUubWF0LXJpcHBsZTpub3QoOmVtcHR5KXt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0ubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgMjAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWJ1dHRvbi1mb2N1cy1vdmVybGF5e3RyYW5zaXRpb246bm9uZX0ubWF0LWJ1dHRvbi1yaXBwbGUtcm91bmR7Ym9yZGVyLXJhZGl1czo1MCU7ei1pbmRleDoxfS5tYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LWZsYXQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXN0cm9rZWQtYnV0dG9uIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LXJhaXNlZC1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtaWNvbi1idXR0b24gLm1hdC1idXR0b24td3JhcHBlcj4qLC5tYXQtZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+KiwubWF0LW1pbmktZmFiIC5tYXQtYnV0dG9uLXdyYXBwZXI+Knt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQ6bm90KC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSkgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Zm9udC1zaXplOmluaGVyaXQ7d2lkdGg6Mi41ZW07aGVpZ2h0OjIuNWVtfS5tYXQtZmxhdC1idXR0b246OmJlZm9yZSwubWF0LXJhaXNlZC1idXR0b246OmJlZm9yZSwubWF0LWZhYjo6YmVmb3JlLC5tYXQtbWluaS1mYWI6OmJlZm9yZXttYXJnaW46Y2FsYyhjYWxjKHZhcigtLW1hdC1mb2N1cy1pbmRpY2F0b3ItYm9yZGVyLXdpZHRoLCAzcHgpICsgMnB4KSAqIC0xKX0ubWF0LXN0cm9rZWQtYnV0dG9uOjpiZWZvcmV7bWFyZ2luOmNhbGMoY2FsYyh2YXIoLS1tYXQtZm9jdXMtaW5kaWNhdG9yLWJvcmRlci13aWR0aCwgM3B4KSArIDNweCkgKiAtMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbiwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZmxhdC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXJhaXNlZC1idXR0b24sLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWljb24tYnV0dG9uLC5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mYWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1pbmktZmFie291dGxpbmU6c29saWQgMXB4fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFBuPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltfbCxsbixsbl19KSxufSkoKSxQdj1jbGFzc3t9LHYyPWNsYXNzIGV4dGVuZHMgUHZ7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLl9kYXRhPXR9Y29ubmVjdCgpe3JldHVybiBheCh0aGlzLl9kYXRhKT90aGlzLl9kYXRhOlh0KHRoaXMuX2RhdGEpfWRpc2Nvbm5lY3QoKXt9fSx5Mj1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMudmlld0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKHQsZSxpLHIsbyl7dC5mb3JFYWNoT3BlcmF0aW9uKChzLGEsbCk9PntsZXQgYyx1O251bGw9PXMucHJldmlvdXNJbmRleD8oYz10aGlzLl9pbnNlcnRWaWV3KCgpPT5pKHMsYSxsKSxsLGUscihzKSksdT1jPzE6MCk6bnVsbD09bD8odGhpcy5fZGV0YWNoQW5kQ2FjaGVWaWV3KGEsZSksdT0zKTooYz10aGlzLl9tb3ZlVmlldyhhLGwsZSxyKHMpKSx1PTIpLG8mJm8oe2NvbnRleHQ6Yz8uY29udGV4dCxvcGVyYXRpb246dSxyZWNvcmQ6c30pfSl9ZGV0YWNoKCl7Zm9yKGxldCB0IG9mIHRoaXMuX3ZpZXdDYWNoZSl0LmRlc3Ryb3koKTt0aGlzLl92aWV3Q2FjaGU9W119X2luc2VydFZpZXcodCxlLGkscil7bGV0IG89dGhpcy5faW5zZXJ0Vmlld0Zyb21DYWNoZShlLGkpO2lmKG8pcmV0dXJuIHZvaWQoby5jb250ZXh0LiRpbXBsaWNpdD1yKTtsZXQgcz10KCk7cmV0dXJuIGkuY3JlYXRlRW1iZWRkZWRWaWV3KHMudGVtcGxhdGVSZWYscy5jb250ZXh0LHMuaW5kZXgpfV9kZXRhY2hBbmRDYWNoZVZpZXcodCxlKXtsZXQgaT1lLmRldGFjaCh0KTt0aGlzLl9tYXliZUNhY2hlVmlldyhpLGUpfV9tb3ZlVmlldyh0LGUsaSxyKXtsZXQgbz1pLmdldCh0KTtyZXR1cm4gaS5tb3ZlKG8sZSksby5jb250ZXh0LiRpbXBsaWNpdD1yLG99X21heWJlQ2FjaGVWaWV3KHQsZSl7aWYodGhpcy5fdmlld0NhY2hlLmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2godCk7ZWxzZXtsZXQgaT1lLmluZGV4T2YodCk7LTE9PT1pP3QuZGVzdHJveSgpOmUucmVtb3ZlKGkpfX1faW5zZXJ0Vmlld0Zyb21DYWNoZSh0LGUpe2xldCBpPXRoaXMuX3ZpZXdDYWNoZS5wb3AoKTtyZXR1cm4gaSYmZS5pbnNlcnQoaSx0KSxpfHxudWxsfX0sQWg9Y2xhc3N7Y29uc3RydWN0b3IodD0hMSxlLGk9ITAscil7dGhpcy5fbXVsdGlwbGU9dCx0aGlzLl9lbWl0Q2hhbmdlcz1pLHRoaXMuY29tcGFyZVdpdGg9cix0aGlzLl9zZWxlY3Rpb249bmV3IFNldCx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0PVtdLHRoaXMuX3NlbGVjdGVkVG9FbWl0PVtdLHRoaXMuY2hhbmdlZD1uZXcga2UsZSYmZS5sZW5ndGgmJih0P2UuZm9yRWFjaChvPT50aGlzLl9tYXJrU2VsZWN0ZWQobykpOnRoaXMuX21hcmtTZWxlY3RlZChlWzBdKSx0aGlzLl9zZWxlY3RlZFRvRW1pdC5sZW5ndGg9MCl9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkfHwodGhpcy5fc2VsZWN0ZWQ9QXJyYXkuZnJvbSh0aGlzLl9zZWxlY3Rpb24udmFsdWVzKCkpKSx0aGlzLl9zZWxlY3RlZH1zZWxlY3QoLi4udCl7dGhpcy5fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpLHQuZm9yRWFjaChpPT50aGlzLl9tYXJrU2VsZWN0ZWQoaSkpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1kZXNlbGVjdCguLi50KXt0aGlzLl92ZXJpZnlWYWx1ZUFzc2lnbm1lbnQodCksdC5mb3JFYWNoKGk9PnRoaXMuX3VubWFya1NlbGVjdGVkKGkpKTtsZXQgZT10aGlzLl9oYXNRdWV1ZWRDaGFuZ2VzKCk7cmV0dXJuIHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpLGV9c2V0U2VsZWN0aW9uKC4uLnQpe3RoaXMuX3ZlcmlmeVZhbHVlQXNzaWdubWVudCh0KTtsZXQgZT10aGlzLnNlbGVjdGVkLGk9bmV3IFNldCh0KTt0LmZvckVhY2gobz0+dGhpcy5fbWFya1NlbGVjdGVkKG8pKSxlLmZpbHRlcihvPT4haS5oYXMobykpLmZvckVhY2gobz0+dGhpcy5fdW5tYXJrU2VsZWN0ZWQobykpO2xldCByPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkscn10b2dnbGUodCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCh0KT90aGlzLmRlc2VsZWN0KHQpOnRoaXMuc2VsZWN0KHQpfWNsZWFyKHQ9ITApe3RoaXMuX3VubWFya0FsbCgpO2xldCBlPXRoaXMuX2hhc1F1ZXVlZENoYW5nZXMoKTtyZXR1cm4gdCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksZX1pc1NlbGVjdGVkKHQpe2lmKHRoaXMuY29tcGFyZVdpdGgpe2ZvcihsZXQgZSBvZiB0aGlzLl9zZWxlY3Rpb24paWYodGhpcy5jb21wYXJlV2l0aChlLHQpKXJldHVybiEwO3JldHVybiExfXJldHVybiB0aGlzLl9zZWxlY3Rpb24uaGFzKHQpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuX3NlbGVjdGlvbi5zaXplfWhhc1ZhbHVlKCl7cmV0dXJuIXRoaXMuaXNFbXB0eSgpfXNvcnQodCl7dGhpcy5fbXVsdGlwbGUmJnRoaXMuc2VsZWN0ZWQmJnRoaXMuX3NlbGVjdGVkLnNvcnQodCl9aXNNdWx0aXBsZVNlbGVjdGlvbigpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1fZW1pdENoYW5nZUV2ZW50KCl7dGhpcy5fc2VsZWN0ZWQ9bnVsbCwodGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RofHx0aGlzLl9kZXNlbGVjdGVkVG9FbWl0Lmxlbmd0aCkmJih0aGlzLmNoYW5nZWQubmV4dCh7c291cmNlOnRoaXMsYWRkZWQ6dGhpcy5fc2VsZWN0ZWRUb0VtaXQscmVtb3ZlZDp0aGlzLl9kZXNlbGVjdGVkVG9FbWl0fSksdGhpcy5fZGVzZWxlY3RlZFRvRW1pdD1bXSx0aGlzLl9zZWxlY3RlZFRvRW1pdD1bXSl9X21hcmtTZWxlY3RlZCh0KXt0aGlzLmlzU2VsZWN0ZWQodCl8fCh0aGlzLl9tdWx0aXBsZXx8dGhpcy5fdW5tYXJrQWxsKCksdGhpcy5pc1NlbGVjdGVkKHQpfHx0aGlzLl9zZWxlY3Rpb24uYWRkKHQpLHRoaXMuX2VtaXRDaGFuZ2VzJiZ0aGlzLl9zZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrU2VsZWN0ZWQodCl7dGhpcy5pc1NlbGVjdGVkKHQpJiYodGhpcy5fc2VsZWN0aW9uLmRlbGV0ZSh0KSx0aGlzLl9lbWl0Q2hhbmdlcyYmdGhpcy5fZGVzZWxlY3RlZFRvRW1pdC5wdXNoKHQpKX1fdW5tYXJrQWxsKCl7dGhpcy5pc0VtcHR5KCl8fHRoaXMuX3NlbGVjdGlvbi5mb3JFYWNoKHQ9PnRoaXMuX3VubWFya1NlbGVjdGVkKHQpKX1fdmVyaWZ5VmFsdWVBc3NpZ25tZW50KHQpe31faGFzUXVldWVkQ2hhbmdlcygpe3JldHVybiEoIXRoaXMuX2Rlc2VsZWN0ZWRUb0VtaXQubGVuZ3RoJiYhdGhpcy5fc2VsZWN0ZWRUb0VtaXQubGVuZ3RoKX19LFNIPW5ldyBwZSgiX1ZpZXdSZXBlYXRlciIpLGFPZT1bImNvbnRlbnRXcmFwcGVyIl0sbE9lPVsiKiJdLGh0ZT1uZXcgcGUoIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7ZnVuY3Rpb24gY09lKG4pe3JldHVybiBuLl9zY3JvbGxTdHJhdGVneX12YXIgYjI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1TaXplPTIwLHRoaXMuX21pbkJ1ZmZlclB4PTEwMCx0aGlzLl9tYXhCdWZmZXJQeD0yMDAsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBrZSx0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKHlpKCkpLHRoaXMuX3ZpZXdwb3J0PW51bGwsdGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWl9YXR0YWNoKHQpe3RoaXMuX3ZpZXdwb3J0PXQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZSh0LGUsaSl7dGhpcy5faXRlbVNpemU9dCx0aGlzLl9taW5CdWZmZXJQeD1lLHRoaXMuX21heEJ1ZmZlclB4PWksdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KHQsZSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KHQqdGhpcy5faXRlbVNpemUsZSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXshdGhpcy5fdmlld3BvcnR8fHRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXplKX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47bGV0IHQ9dGhpcy5fdmlld3BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpLGU9e3N0YXJ0OnQuc3RhcnQsZW5kOnQuZW5kfSxpPXRoaXMuX3ZpZXdwb3J0LmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpLG89dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLHM9dGhpcy5faXRlbVNpemU+MD9vL3RoaXMuX2l0ZW1TaXplOjA7aWYoZS5lbmQ+cil7bGV0IGw9TWF0aC5jZWlsKGkvdGhpcy5faXRlbVNpemUpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbihzLHItbCkpO3MhPWMmJihzPWMsbz1jKnRoaXMuX2l0ZW1TaXplLGUuc3RhcnQ9TWF0aC5mbG9vcihzKSksZS5lbmQ9TWF0aC5tYXgoMCxNYXRoLm1pbihyLGUuc3RhcnQrbCkpfWxldCBhPW8tZS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihhPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1lLnN0YXJ0KXtsZXQgbD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LWEpL3RoaXMuX2l0ZW1TaXplKTtlLnN0YXJ0PU1hdGgubWF4KDAsZS5zdGFydC1sKSxlLmVuZD1NYXRoLm1pbihyLE1hdGguY2VpbChzKyhpK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6ZSkpfWVsc2V7bGV0IGw9ZS5lbmQqdGhpcy5faXRlbVNpemUtKG8raSk7aWYobDx0aGlzLl9taW5CdWZmZXJQeCYmZS5lbmQhPXIpe2xldCBjPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtbCkvdGhpcy5faXRlbVNpemUpO2M+MCYmKGUuZW5kPU1hdGgubWluKHIsZS5lbmQrYyksZS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Iocy10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShlKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqZS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5uZXh0KE1hdGguZmxvb3IocykpfX0odGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9pdGVtU2l6ZX1zZXQgaXRlbVNpemUoZSl7dGhpcy5faXRlbVNpemU9QmkoZSl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX21pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeChlKXt0aGlzLl9taW5CdWZmZXJQeD1CaShlKX1nZXQgbWF4QnVmZmVyUHgoKXtyZXR1cm4gdGhpcy5fbWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGUpe3RoaXMuX21heEJ1ZmZlclB4PUJpKGUpfW5nT25DaGFuZ2VzKCl7dGhpcy5fc2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5pdGVtU2l6ZSx0aGlzLm1pbkJ1ZmZlclB4LHRoaXMubWF4QnVmZmVyUHgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IiwiaXRlbVNpemUiLCIiXV0saW5wdXRzOntpdGVtU2l6ZToiaXRlbVNpemUiLG1pbkJ1ZmZlclB4OiJtaW5CdWZmZXJQeCIsbWF4QnVmZmVyUHg6Im1heEJ1ZmZlclB4In0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpodGUsdXNlRmFjdG9yeTpjT2UsZGVwczpbSm4oKCk9Pm4pXX1dKSxGdF19KSxufSkoKSwkbT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9uZ1pvbmU9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX3Njcm9sbGVkPW5ldyBrZSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9zY3JvbGxlZENvdW50PTAsdGhpcy5zY3JvbGxDb250YWluZXJzPW5ldyBNYXAsdGhpcy5fZG9jdW1lbnQ9cn1yZWdpc3RlcihlKXt0aGlzLnNjcm9sbENvbnRhaW5lcnMuaGFzKGUpfHx0aGlzLnNjcm9sbENvbnRhaW5lcnMuc2V0KGUsZS5lbGVtZW50U2Nyb2xsZWQoKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoZSkpKX1kZXJlZ2lzdGVyKGUpe2xldCBpPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoZSk7aSYmKGkudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGUpKX1zY3JvbGxlZChlPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyB1bihpPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2xldCByPWU+MD90aGlzLl9zY3JvbGxlZC5waXBlKGJ1KGUpKS5zdWJzY3JpYmUoaSk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGkpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntyLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6WHQoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGUsaSk9PnRoaXMuZGVyZWdpc3RlcihpKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGUsaSl7bGV0IHI9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoZSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoaSkucGlwZShZZShvPT4hb3x8ci5pbmRleE9mKG8pPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGUpe2xldCBpPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgocixvKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQobyxlKSYmaS5wdXNoKG8pfSksaX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZSxpKXtsZXQgcj1MYShpKSxvPWUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYocj09bylyZXR1cm4hMH13aGlsZShyPXIucGFyZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+X2kodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKF90KSxqKG9pKSxqKEh0LDgpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxJaD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuZWxlbWVudFJlZj1lLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1pLHRoaXMubmdab25lPXIsdGhpcy5kaXI9byx0aGlzLl9kZXN0cm95ZWQ9bmV3IGtlLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgdW4ocz0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pl9pKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShzKSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRvKGUpe2xldCBpPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LHI9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1lLmxlZnQmJihlLmxlZnQ9cj9lLmVuZDplLnN0YXJ0KSxudWxsPT1lLnJpZ2h0JiYoZS5yaWdodD1yP2Uuc3RhcnQ6ZS5lbmQpLG51bGwhPWUuYm90dG9tJiYoZS50b3A9aS5zY3JvbGxIZWlnaHQtaS5jbGllbnRIZWlnaHQtZS5ib3R0b20pLHImJjAhPWJ2KCk/KG51bGwhPWUubGVmdCYmKGUucmlnaHQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUubGVmdCksMj09YnYoKT9lLmxlZnQ9ZS5yaWdodDoxPT1idigpJiYoZS5sZWZ0PWUucmlnaHQ/LWUucmlnaHQ6ZS5yaWdodCkpOm51bGwhPWUucmlnaHQmJihlLmxlZnQ9aS5zY3JvbGxXaWR0aC1pLmNsaWVudFdpZHRoLWUucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9PcHRpb25zKGUpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtzMigpP2kuc2Nyb2xsVG8oZSk6KG51bGwhPWUudG9wJiYoaS5zY3JvbGxUb3A9ZS50b3ApLG51bGwhPWUubGVmdCYmKGkuc2Nyb2xsTGVmdD1lLmxlZnQpKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGUpe2xldCBpPSJsZWZ0IixyPSJyaWdodCIsbz10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09ZSlyZXR1cm4gby5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWUpcmV0dXJuIG8uc2Nyb2xsSGVpZ2h0LW8uY2xpZW50SGVpZ2h0LW8uc2Nyb2xsVG9wO2xldCBzPXRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFsdWU7cmV0dXJuInN0YXJ0Ij09ZT9lPXM/cjppOiJlbmQiPT1lJiYoZT1zP2k6cikscyYmMj09YnYoKT9lPT1pP28uc2Nyb2xsV2lkdGgtby5jbGllbnRXaWR0aC1vLnNjcm9sbExlZnQ6by5zY3JvbGxMZWZ0OnMmJjE9PWJ2KCk/ZT09aT9vLnNjcm9sbExlZnQrby5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoOi1vLnNjcm9sbExlZnQ6ZT09aT9vLnNjcm9sbExlZnQ6by5zY3JvbGxXaWR0aC1vLmNsaWVudFdpZHRoLW8uc2Nyb2xsTGVmdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTSgkbSksTShfdCksTSgkaSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dfSksbn0pKCksVmE9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9jaGFuZ2U9bmV3IGtlLHRoaXMuX2NoYW5nZUxpc3RlbmVyPW89Pnt0aGlzLl9jaGFuZ2UubmV4dChvKX0sdGhpcy5fZG9jdW1lbnQ9cixpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoZS5pc0Jyb3dzZXIpe2xldCBvPXRoaXMuX2dldFdpbmRvdygpO28uYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksby5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtsZXQgZT17d2lkdGg6dGhpcy5fdmlld3BvcnRTaXplLndpZHRoLGhlaWdodDp0aGlzLl92aWV3cG9ydFNpemUuaGVpZ2h0fTtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyfHwodGhpcy5fdmlld3BvcnRTaXplPW51bGwpLGV9Z2V0Vmlld3BvcnRSZWN0KCl7bGV0IGU9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDplLnRvcCxsZWZ0OmUubGVmdCxib3R0b206ZS50b3ArcixyaWdodDplLmxlZnQraSxoZWlnaHQ6cix3aWR0aDppfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtsZXQgZT10aGlzLl9kb2N1bWVudCxpPXRoaXMuX2dldFdpbmRvdygpLHI9ZS5kb2N1bWVudEVsZW1lbnQsbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LW8udG9wfHxlLmJvZHkuc2Nyb2xsVG9wfHxpLnNjcm9sbFl8fHIuc2Nyb2xsVG9wfHwwLGxlZnQ6LW8ubGVmdHx8ZS5ib2R5LnNjcm9sbExlZnR8fGkuc2Nyb2xsWHx8ci5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoZT0yMCl7cmV0dXJuIGU+MD90aGlzLl9jaGFuZ2UucGlwZShidShlKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6ZS5pbm5lcldpZHRoLGhlaWdodDplLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGoob2kpLGooX3QpLGooSHQsOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGR0ZT1uZXcgcGUoIlZJUlRVQUxfU0NST0xMQUJMRSIpLHBPZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgSWh7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9bWVhc3VyZVZpZXdwb3J0U2l6ZShlKXtsZXQgaT10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT1lP2kuY2xpZW50V2lkdGg6aS5jbGllbnRIZWlnaHR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oJG0pLE0oX3QpLE0oJGksOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxmT2U9dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTwidSI/X046ZjAsZWc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBPZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUsYSxyLHMpLHRoaXMuZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLnNjcm9sbGFibGU9Yyx0aGlzLl9wbGF0Zm9ybT1qbyhvaSksdGhpcy5fZGV0YWNoZWRTdWJqZWN0PW5ldyBrZSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdD1uZXcga2UsdGhpcy5fb3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9hcHBlbmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgdW4odT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoZD0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5uZ1pvbmUucnVuKCgpPT51Lm5leHQoZCkpKSkpLHRoaXMucmVuZGVyZWRSYW5nZVN0cmVhbT10aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdCx0aGlzLl90b3RhbENvbnRlbnRTaXplPTAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9IiIsdGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSIiLHRoaXMuX3JlbmRlcmVkUmFuZ2U9e3N0YXJ0OjAsZW5kOjB9LHRoaXMuX2RhdGFMZW5ndGg9MCx0aGlzLl92aWV3cG9ydFNpemU9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9MCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1Tbi5FTVBUWSx0aGlzLl92aWV3cG9ydENoYW5nZXM9bC5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNoZWNrVmlld3BvcnRTaXplKCl9KSx0aGlzLnNjcm9sbGFibGV8fCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstdmlydHVhbC1zY3JvbGxhYmxlIiksdGhpcy5zY3JvbGxhYmxlPXRoaXMpfWdldCBvcmllbnRhdGlvbigpe3JldHVybiB0aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oZSl7dGhpcy5fb3JpZW50YXRpb24hPT1lJiYodGhpcy5fb3JpZW50YXRpb249ZSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfWdldCBhcHBlbmRPbmx5KCl7cmV0dXJuIHRoaXMuX2FwcGVuZE9ubHl9c2V0IGFwcGVuZE9ubHkoZSl7dGhpcy5fYXBwZW5kT25seT1SdChlKX1uZ09uSW5pdCgpeyF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCh0aGlzLnNjcm9sbGFibGU9PT10aGlzJiZzdXBlci5uZ09uSW5pdCgpLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLnNjcm9sbGFibGUuZWxlbWVudFNjcm9sbGVkKCkucGlwZSh6bihudWxsKSxidSgwLGZPZSkpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50U2Nyb2xsZWQoKSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QuY29tcGxldGUoKSx0aGlzLl9kZXRhY2hlZFN1YmplY3QuY29tcGxldGUoKSx0aGlzLl92aWV3cG9ydENoYW5nZXMudW5zdWJzY3JpYmUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWF0dGFjaChlKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Zvck9mPWUsdGhpcy5fZm9yT2YuZGF0YVN0cmVhbS5waXBlKHN0KHRoaXMuX2RldGFjaGVkU3ViamVjdCkpLnN1YnNjcmliZShpPT57bGV0IHI9aS5sZW5ndGg7ciE9PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPXIsdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZpZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5nZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGUpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2VdfXNldFRvdGFsQ29udGVudFNpemUoZSl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PWUmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPWUsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZShlKXsoZnVuY3Rpb24obix0KXtyZXR1cm4gbi5zdGFydD09dC5zdGFydCYmbi5lbmQ9PXQuZW5kfSkodGhpcy5fcmVuZGVyZWRSYW5nZSxlKXx8KHRoaXMuYXBwZW5kT25seSYmKGU9e3N0YXJ0OjAsZW5kOk1hdGgubWF4KHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kLGUuZW5kKX0pLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0Lm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZT1lKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRSZW5kZXJlZCgpKSl9Z2V0T2Zmc2V0VG9SZW5kZXJlZENvbnRlbnRTdGFydCgpe3JldHVybiB0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/bnVsbDp0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXR9c2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KGUsaT0idG8tc3RhcnQiKXtlPXRoaXMuYXBwZW5kT25seSYmInRvLXN0YXJ0Ij09PWk/MDplO2xldCBvPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRhdGlvbixzPW8/IlgiOiJZIixsPWB0cmFuc2xhdGUke3N9KCR7TnVtYmVyKChvJiZ0aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlPy0xOjEpKmUpfXB4KWA7dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PWUsInRvLWVuZCI9PT1pJiYobCs9YCB0cmFuc2xhdGUke3N9KC0xMDAlKWAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSEwKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0hPWwmJih0aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm09bCx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCgpPT57dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPyh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQtPXRoaXMubWVhc3VyZVJlbmRlcmVkQ29udGVudFNpemUoKSx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITEsdGhpcy5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0KSk6dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25SZW5kZXJlZE9mZnNldENoYW5nZWQoKX0pKX1zY3JvbGxUb09mZnNldChlLGk9ImF1dG8iKXtsZXQgcj17YmVoYXZpb3I6aX07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9yLnN0YXJ0PWU6ci50b3A9ZSx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8ocil9c2Nyb2xsVG9JbmRleChlLGk9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGUsaSl9bWVhc3VyZVNjcm9sbE9mZnNldChlKXtsZXQgaTtyZXR1cm4gaT10aGlzLnNjcm9sbGFibGU9PXRoaXM/cj0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChyKTpyPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldChyKSxNYXRoLm1heCgwLGkoZT8/KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zmc2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldChlKXtsZXQgaSxyPSJsZWZ0IixvPSJyaWdodCIscz0icnRsIj09dGhpcy5kaXI/LnZhbHVlO2k9InN0YXJ0Ij09ZT9zP286cjoiZW5kIj09ZT9zP3I6bzplfHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6InRvcCIpO2xldCBhPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChpKTtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbaV0tYX1tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpe2xldCBlPXRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0fW1lYXN1cmVSYW5nZVNpemUoZSl7cmV0dXJuIHRoaXMuX2Zvck9mP3RoaXMuX2Zvck9mLm1lYXN1cmVSYW5nZVNpemUoZSx0aGlzLm9yaWVudGF0aW9uKTowfWNoZWNrVmlld3BvcnRTaXplKCl7dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKX1fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpe3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLnNjcm9sbGFibGUubWVhc3VyZVZpZXdwb3J0U2l6ZSh0aGlzLm9yaWVudGF0aW9uKX1fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZChlKXtlJiZ0aGlzLl9ydW5BZnRlckNoYW5nZURldGVjdGlvbi5wdXNoKGUpLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZ3x8KHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMCx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX2RvQ2hhbmdlRGV0ZWN0aW9uKCl9KSkpfV9kb0NoYW5nZURldGVjdGlvbigpe3RoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9yZW5kZXJlZENvbnRlbnRUcmFuc2Zvcm0sdGhpcy5uZ1pvbmUucnVuKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7bGV0IGU9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGxldCBpIG9mIGUpaSgpfV9jYWxjdWxhdGVTcGFjZXJTaXplKCl7dGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/IiI6YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9gJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YDoiIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShubiksTShfdCksTShodGUsOCksTSgkaSw4KSxNKCRtKSxNKFZhKSxNKGR0ZSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoYU9lLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2NvbnRlbnRXcmFwcGVyPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1pLm9yaWVudGF0aW9uKSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1pLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6ImFwcGVuZE9ubHkifSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpJaCx1c2VGYWN0b3J5Oih0LGUpPT50fHxlLGRlcHM6W1tuZXcgbnMsbmV3IGowKGR0ZSldLG5dfV0pLHR0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6bE9lLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzEsImNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLF8oMCwiZGl2IiwwLDEpLFZuKDIpLHYoKSxPKDMsImRpdiIsMikpLDImZSYmKEMoMyksUHQoIndpZHRoIixpLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsaS5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1zY3JvbGxhYmxle292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4taGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHB0ZShuLHQsZSl7aWYoIWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2xldCByPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuImhvcml6b250YWwiPT09bj8ic3RhcnQiPT09dD9yLmxlZnQ6ci5yaWdodDoic3RhcnQiPT09dD9yLnRvcDpyLmJvdHRvbX12YXIgeDI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1lLHRoaXMuX3RlbXBsYXRlPWksdGhpcy5fZGlmZmVycz1yLHRoaXMuX3ZpZXdSZXBlYXRlcj1vLHRoaXMuX3ZpZXdwb3J0PXMsdGhpcy52aWV3Q2hhbmdlPW5ldyBrZSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcga2UsdGhpcy5kYXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoem4obnVsbCkseTAoKSx1aSgoW2wsY10pPT50aGlzLl9jaGFuZ2VEYXRhU291cmNlKGwsYykpLE1hKDEpKSx0aGlzLl9kaWZmZXI9bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IGtlLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUobD0+e3RoaXMuX2RhdGE9bCx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShsPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1sLHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZhLnJ1bigoKT0+dGhpcy52aWV3Q2hhbmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihlKXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9ZSxmdW5jdGlvbihuKXtyZXR1cm4gbiYmImZ1bmN0aW9uIj09dHlwZW9mIG4uY29ubmVjdCYmIShuIGluc3RhbmNlb2YgaXgpfShlKT90aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KGUpOnRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLm5leHQobmV3IHYyKGF4KGUpP2U6QXJyYXkuZnJvbShlfHxbXSkpKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGUpe3RoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PWU/KGkscik9PmUoaSsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0OjApLHIpOnZvaWQgMH1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKGUpe2UmJih0aGlzLl9uZWVkc1VwZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT1lKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoZSl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemU9QmkoZSl9bWVhc3VyZVJhbmdlU2l6ZShlLGkpe2lmKGUuc3RhcnQ+PWUuZW5kKXJldHVybiAwO2xldCBzLGEscj1lLnN0YXJ0LXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsbz1lLmVuZC1lLnN0YXJ0O2ZvcihsZXQgbD0wO2w8bztsKyspe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXtzPWE9Yy5yb290Tm9kZXNbMF07YnJlYWt9fWZvcihsZXQgbD1vLTE7bD4tMTtsLS0pe2xldCBjPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGwrcik7aWYoYyYmYy5yb290Tm9kZXMubGVuZ3RoKXthPWMucm9vdE5vZGVzW2Mucm9vdE5vZGVzLmxlbmd0aC0xXTticmVha319cmV0dXJuIHMmJmE/cHRlKGksImVuZCIsYSktcHRlKGksInN0YXJ0IixzKTowfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlciYmdGhpcy5fbmVlZHNVcGRhdGUpe2xldCBlPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2U/dGhpcy5fYXBwbHlDaGFuZ2VzKGUpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25SZW5kZXJlZERhdGFDaGFuZ2UoKXshdGhpcy5fcmVuZGVyZWRSYW5nZXx8KHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoZSxpKT0+dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT90aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5KGUsaSk6aSkpLHRoaXMuX25lZWRzVXBkYXRlPSEwKX1fY2hhbmdlRGF0YVNvdXJjZShlLGkpe3JldHVybiBlJiZlLmRpc2Nvbm5lY3QodGhpcyksdGhpcy5fbmVlZHNVcGRhdGU9ITAsaT9pLmNvbm5lY3QodGhpcyk6WHQoKX1fdXBkYXRlQ29udGV4dCgpe2xldCBlPXRoaXMuX2RhdGEubGVuZ3RoLGk9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtpLS07KXtsZXQgcj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChpKTtyLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtpLHIuY29udGV4dC5jb3VudD1lLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoci5jb250ZXh0KSxyLmRldGVjdENoYW5nZXMoKX19X2FwcGx5Q2hhbmdlcyhlKXt0aGlzLl92aWV3UmVwZWF0ZXIuYXBwbHlDaGFuZ2VzKGUsdGhpcy5fdmlld0NvbnRhaW5lclJlZiwobyxzLGEpPT50aGlzLl9nZXRFbWJlZGRlZFZpZXdBcmdzKG8sYSksbz0+by5pdGVtKSxlLmZvckVhY2hJZGVudGl0eUNoYW5nZShvPT57dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoby5jdXJyZW50SW5kZXgpLmNvbnRleHQuJGltcGxpY2l0PW8uaXRlbX0pO2xldCBpPXRoaXMuX2RhdGEubGVuZ3RoLHI9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtyLS07KXtsZXQgbz10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChyKTtvLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtyLG8uY29udGV4dC5jb3VudD1pLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoby5jb250ZXh0KX19X3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZSl7ZS5maXJzdD0wPT09ZS5pbmRleCxlLmxhc3Q9ZS5pbmRleD09PWUuY291bnQtMSxlLmV2ZW49ZS5pbmRleCUyPT0wLGUub2RkPSFlLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoZSxpKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVtcGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmUuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5fY2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4Oml9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSxNKFZpKSxNKGtjKSxNKFNIKSxNKGVnLDQpLE0oX3QpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6U0gsdXNlQ2xhc3M6eTJ9XSldfSksbn0pKCksdWQ9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLFpjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltEaCx1ZCxEaCx1ZF19KSxufSkoKSxzdz1jbGFzc3thdHRhY2godCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkSG9zdD10LHQuYXR0YWNoKHRoaXMpfWRldGFjaCgpe2xldCB0PXRoaXMuX2F0dGFjaGVkSG9zdDtudWxsIT10JiYodGhpcy5fYXR0YWNoZWRIb3N0PW51bGwsdC5kZXRhY2goKSl9Z2V0IGlzQXR0YWNoZWQoKXtyZXR1cm4gbnVsbCE9dGhpcy5fYXR0YWNoZWRIb3N0fXNldEF0dGFjaGVkSG9zdCh0KXt0aGlzLl9hdHRhY2hlZEhvc3Q9dH19LCRjPWNsYXNzIGV4dGVuZHMgc3d7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIoKSx0aGlzLmNvbXBvbmVudD10LHRoaXMudmlld0NvbnRhaW5lclJlZj1lLHRoaXMuaW5qZWN0b3I9aSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1yfX0sa3M9Y2xhc3MgZXh0ZW5kcyBzd3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcigpLHRoaXMudGVtcGxhdGVSZWY9dCx0aGlzLnZpZXdDb250YWluZXJSZWY9ZSx0aGlzLmNvbnRleHQ9aSx0aGlzLmluamVjdG9yPXJ9Z2V0IG9yaWdpbigpe3JldHVybiB0aGlzLnRlbXBsYXRlUmVmLmVsZW1lbnRSZWZ9YXR0YWNoKHQsZT10aGlzLmNvbnRleHQpe3JldHVybiB0aGlzLmNvbnRleHQ9ZSxzdXBlci5hdHRhY2godCl9ZGV0YWNoKCl7cmV0dXJuIHRoaXMuY29udGV4dD12b2lkIDAsc3VwZXIuZGV0YWNoKCl9fSxUSD1jbGFzcyBleHRlbmRzIHN3e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5lbGVtZW50PXQgaW5zdGFuY2VvZiBSZT90Lm5hdGl2ZUVsZW1lbnQ6dH19LFBoPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5faXNEaXNwb3NlZD0hMSx0aGlzLmF0dGFjaERvbVBvcnRhbD1udWxsfWhhc0F0dGFjaGVkKCl7cmV0dXJuISF0aGlzLl9hdHRhY2hlZFBvcnRhbH1hdHRhY2godCl7cmV0dXJuIHQgaW5zdGFuY2VvZiAkYz8odGhpcy5fYXR0YWNoZWRQb3J0YWw9dCx0aGlzLmF0dGFjaENvbXBvbmVudFBvcnRhbCh0KSk6dCBpbnN0YW5jZW9mIGtzPyh0aGlzLl9hdHRhY2hlZFBvcnRhbD10LHRoaXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwodCkpOnRoaXMuYXR0YWNoRG9tUG9ydGFsJiZ0IGluc3RhbmNlb2YgVEg/KHRoaXMuX2F0dGFjaGVkUG9ydGFsPXQsdGhpcy5hdHRhY2hEb21Qb3J0YWwodCkpOnZvaWQgMH1kZXRhY2goKXt0aGlzLl9hdHRhY2hlZFBvcnRhbCYmKHRoaXMuX2F0dGFjaGVkUG9ydGFsLnNldEF0dGFjaGVkSG9zdChudWxsKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsKSx0aGlzLl9pbnZva2VEaXNwb3NlRm4oKX1kaXNwb3NlKCl7dGhpcy5oYXNBdHRhY2hlZCgpJiZ0aGlzLmRldGFjaCgpLHRoaXMuX2ludm9rZURpc3Bvc2VGbigpLHRoaXMuX2lzRGlzcG9zZWQ9ITB9c2V0RGlzcG9zZUZuKHQpe3RoaXMuX2Rpc3Bvc2VGbj10fV9pbnZva2VEaXNwb3NlRm4oKXt0aGlzLl9kaXNwb3NlRm4mJih0aGlzLl9kaXNwb3NlRm4oKSx0aGlzLl9kaXNwb3NlRm49bnVsbCl9fSxhdz1jbGFzcyBleHRlbmRzIFBoe2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7c3VwZXIoKSx0aGlzLm91dGxldEVsZW1lbnQ9dCx0aGlzLl9jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLl9hcHBSZWY9aSx0aGlzLl9kZWZhdWx0SW5qZWN0b3I9cix0aGlzLmF0dGFjaERvbVBvcnRhbD1zPT57bGV0IGE9cy5lbGVtZW50LGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiZG9tLXBvcnRhbCIpO2EucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobCxhKSx0aGlzLm91dGxldEVsZW1lbnQuYXBwZW5kQ2hpbGQoYSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9cyxzdXBlci5zZXREaXNwb3NlRm4oKCk9PntsLnBhcmVudE5vZGUmJmwucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYSxsKX0pfSx0aGlzLl9kb2N1bWVudD1vfWF0dGFjaENvbXBvbmVudFBvcnRhbCh0KXtsZXQgcixpPSh0LmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0LmNvbXBvbmVudCk7cmV0dXJuIHQudmlld0NvbnRhaW5lclJlZj8ocj10LnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGksdC52aWV3Q29udGFpbmVyUmVmLmxlbmd0aCx0LmluamVjdG9yfHx0LnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3IpLHRoaXMuc2V0RGlzcG9zZUZuKCgpPT5yLmRlc3Ryb3koKSkpOihyPWkuY3JlYXRlKHQuaW5qZWN0b3J8fHRoaXMuX2RlZmF1bHRJbmplY3Rvcnx8WG4uTlVMTCksdGhpcy5fYXBwUmVmLmF0dGFjaFZpZXcoci5ob3N0VmlldyksdGhpcy5zZXREaXNwb3NlRm4oKCk9Pnt0aGlzLl9hcHBSZWYudmlld0NvdW50PjAmJnRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHIuaG9zdFZpZXcpLHIuZGVzdHJveSgpfSkpLHRoaXMub3V0bGV0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9nZXRDb21wb25lbnRSb290Tm9kZShyKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxyfWF0dGFjaFRlbXBsYXRlUG9ydGFsKHQpe2xldCBlPXQudmlld0NvbnRhaW5lclJlZixpPWUuY3JlYXRlRW1iZWRkZWRWaWV3KHQudGVtcGxhdGVSZWYsdC5jb250ZXh0LHtpbmplY3Rvcjp0LmluamVjdG9yfSk7cmV0dXJuIGkucm9vdE5vZGVzLmZvckVhY2gocj0+dGhpcy5vdXRsZXRFbGVtZW50LmFwcGVuZENoaWxkKHIpKSxpLmRldGVjdENoYW5nZXMoKSx0aGlzLnNldERpc3Bvc2VGbigoKT0+e2xldCByPWUuaW5kZXhPZihpKTstMSE9PXImJmUucmVtb3ZlKHIpfSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9dCxpfWRpc3Bvc2UoKXtzdXBlci5kaXNwb3NlKCksdGhpcy5vdXRsZXRFbGVtZW50LnJlbW92ZSgpfV9nZXRDb21wb25lbnRSb290Tm9kZSh0KXtyZXR1cm4gdC5ob3N0Vmlldy5yb290Tm9kZXNbMF19fSxmdGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGtze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSxpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShWaSksTShPaSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWwiLCIiXV0sZXhwb3J0QXM6WyJjZGtQb3J0YWwiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZGE9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFBoe2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1lLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9aSx0aGlzLl9pc0luaXRpYWxpemVkPSExLHRoaXMuYXR0YWNoZWQ9bmV3IEcsdGhpcy5hdHRhY2hEb21Qb3J0YWw9bz0+e2xldCBzPW8uZWxlbWVudCxhPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoImRvbS1wb3J0YWwiKTtvLnNldEF0dGFjaGVkSG9zdCh0aGlzKSxzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEscyksdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChzKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1vLHN1cGVyLnNldERpc3Bvc2VGbigoKT0+e2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChzLGEpfSl9LHRoaXMuX2RvY3VtZW50PXJ9Z2V0IHBvcnRhbCgpe3JldHVybiB0aGlzLl9hdHRhY2hlZFBvcnRhbH1zZXQgcG9ydGFsKGUpe3RoaXMuaGFzQXR0YWNoZWQoKSYmIWUmJiF0aGlzLl9pc0luaXRpYWxpemVkfHwodGhpcy5oYXNBdHRhY2hlZCgpJiZzdXBlci5kZXRhY2goKSxlJiZzdXBlci5hdHRhY2goZSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZXx8bnVsbCl9Z2V0IGF0dGFjaGVkUmVmKCl7cmV0dXJuIHRoaXMuX2F0dGFjaGVkUmVmfW5nT25Jbml0KCl7dGhpcy5faXNJbml0aWFsaXplZD0hMH1uZ09uRGVzdHJveSgpe3N1cGVyLmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1udWxsLHRoaXMuX2F0dGFjaGVkUmVmPW51bGx9YXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPW51bGwhPWUudmlld0NvbnRhaW5lclJlZj9lLnZpZXdDb250YWluZXJSZWY6dGhpcy5fdmlld0NvbnRhaW5lclJlZixvPShlLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcnx8dGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyKS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShlLmNvbXBvbmVudCkscz1pLmNyZWF0ZUNvbXBvbmVudChvLGkubGVuZ3RoLGUuaW5qZWN0b3J8fGkuaW5qZWN0b3IpO3JldHVybiBpIT09dGhpcy5fdmlld0NvbnRhaW5lclJlZiYmdGhpcy5fZ2V0Um9vdE5vZGUoKS5hcHBlbmRDaGlsZChzLmhvc3RWaWV3LnJvb3ROb2Rlc1swXSksc3VwZXIuc2V0RGlzcG9zZUZuKCgpPT5zLmRlc3Ryb3koKSksdGhpcy5fYXR0YWNoZWRQb3J0YWw9ZSx0aGlzLl9hdHRhY2hlZFJlZj1zLHRoaXMuYXR0YWNoZWQuZW1pdChzKSxzfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe2Uuc2V0QXR0YWNoZWRIb3N0KHRoaXMpO2xldCBpPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGUudGVtcGxhdGVSZWYsZS5jb250ZXh0LHtpbmplY3RvcjplLmluamVjdG9yfSk7cmV0dXJuIHN1cGVyLnNldERpc3Bvc2VGbigoKT0+dGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpKSx0aGlzLl9hdHRhY2hlZFBvcnRhbD1lLHRoaXMuX2F0dGFjaGVkUmVmPWksdGhpcy5hdHRhY2hlZC5lbWl0KGkpLGl9X2dldFJvb3ROb2RlKCl7bGV0IGU9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7cmV0dXJuIGUubm9kZVR5cGU9PT1lLkVMRU1FTlRfTk9ERT9lOmUucGFyZW50Tm9kZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShncyksTShPaSksTShIdCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGtQb3J0YWxPdXRsZXQiLCIiXV0saW5wdXRzOntwb3J0YWw6WyJjZGtQb3J0YWxPdXRsZXQiLCJwb3J0YWwiXX0sb3V0cHV0czp7YXR0YWNoZWQ6ImF0dGFjaGVkIn0sZXhwb3J0QXM6WyJjZGtQb3J0YWxPdXRsZXQiXSxmZWF0dXJlczpbdHRdfSksbn0pKCksZXU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLG10ZT1zMigpLE0yPWNsYXNze2VuYWJsZSgpe31kaXNhYmxlKCl7fWF0dGFjaCgpe319O2Z1bmN0aW9uIElIKG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLmJvdHRvbTxlLnRvcHx8bi50b3A+ZS5ib3R0b218fG4ucmlnaHQ8ZS5sZWZ0fHxuLmxlZnQ+ZS5yaWdodCl9ZnVuY3Rpb24gZ3RlKG4sdCl7cmV0dXJuIHQuc29tZShlPT5uLnRvcDxlLnRvcHx8bi5ib3R0b20+ZS5ib3R0b218fG4ubGVmdDxlLmxlZnR8fG4ucmlnaHQ+ZS5yaWdodCl9dmFyIG5nPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuX3Njcm9sbERpc3BhdGNoZXI9dCx0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fbmdab25lPWksdGhpcy5fY29uZmlnPXIsdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPW51bGx9YXR0YWNoKHQpe3RoaXMuX292ZXJsYXlSZWY9dH1lbmFibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb258fCh0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5zY3JvbGxlZCh0aGlzLl9jb25maWc/dGhpcy5fY29uZmlnLnNjcm9sbFRocm90dGxlOjApLnN1YnNjcmliZSgoKT0+e2lmKHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKSx0aGlzLl9jb25maWcmJnRoaXMuX2NvbmZpZy5hdXRvQ2xvc2Upe2xldCBlPXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOmksaGVpZ2h0OnJ9PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCk7SUgoZSxbe3dpZHRoOmksaGVpZ2h0OnIsYm90dG9tOnIscmlnaHQ6aSx0b3A6MCxsZWZ0OjB9XSkmJih0aGlzLmRpc2FibGUoKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKSl9fSkpfWRpc2FibGUoKXt0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24mJih0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249bnVsbCl9ZGV0YWNoKCl7dGhpcy5kaXNhYmxlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsfX0sbU9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1lLHRoaXMuX3ZpZXdwb3J0UnVsZXI9aSx0aGlzLl9uZ1pvbmU9cix0aGlzLm5vb3A9KCk9Pm5ldyBNMix0aGlzLmNsb3NlPXM9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPXQsdGhpcy5fbmdab25lPWUsdGhpcy5fdmlld3BvcnRSdWxlcj1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2RldGFjaD0oKT0+e3RoaXMuZGlzYWJsZSgpLHRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSl9fWF0dGFjaCh0KXt0aGlzLl9vdmVybGF5UmVmPXR9ZW5hYmxlKCl7aWYodGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uKXJldHVybjtsZXQgdD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKDApO3RoaXMuX2NvbmZpZyYmdGhpcy5fY29uZmlnLnRocmVzaG9sZCYmdGhpcy5fY29uZmlnLnRocmVzaG9sZD4xPyh0aGlzLl9pbml0aWFsU2Nyb2xsUG9zaXRpb249dGhpcy5fdmlld3BvcnRSdWxlci5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkudG9wLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj10LnN1YnNjcmliZSgoKT0+e2xldCBlPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLnRvcDtNYXRoLmFicyhlLXRoaXMuX2luaXRpYWxTY3JvbGxQb3NpdGlvbik+dGhpcy5fY29uZmlnLnRocmVzaG9sZD90aGlzLl9kZXRhY2goKTp0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSk6dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXQuc3Vic2NyaWJlKHRoaXMuX2RldGFjaCl9ZGlzYWJsZSgpe3RoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiYmKHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbj1udWxsKX1kZXRhY2goKXt0aGlzLmRpc2FibGUoKSx0aGlzLl9vdmVybGF5UmVmPW51bGx9fSh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHMpLHRoaXMuYmxvY2s9KCk9Pm5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX3ZpZXdwb3J0UnVsZXI9dCx0aGlzLl9wcmV2aW91c0hUTUxTdHlsZXM9e3RvcDoiIixsZWZ0OiIifSx0aGlzLl9pc0VuYWJsZWQ9ITEsdGhpcy5fZG9jdW1lbnQ9ZX1hdHRhY2goKXt9ZW5hYmxlKCl7aWYodGhpcy5fY2FuQmVFbmFibGVkKCkpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudDt0aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3ByZXZpb3VzSFRNTFN0eWxlcy5sZWZ0PXQuc3R5bGUubGVmdHx8IiIsdGhpcy5fcHJldmlvdXNIVE1MU3R5bGVzLnRvcD10LnN0eWxlLnRvcHx8IiIsdC5zdHlsZS5sZWZ0PXlvKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLmxlZnQpLHQuc3R5bGUudG9wPXlvKC10aGlzLl9wcmV2aW91c1Njcm9sbFBvc2l0aW9uLnRvcCksdC5jbGFzc0xpc3QuYWRkKCJjZGstZ2xvYmFsLXNjcm9sbGJsb2NrIiksdGhpcy5faXNFbmFibGVkPSEwfX1kaXNhYmxlKCl7aWYodGhpcy5faXNFbmFibGVkKXtsZXQgdD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaT10LnN0eWxlLHI9dGhpcy5fZG9jdW1lbnQuYm9keS5zdHlsZSxvPWkuc2Nyb2xsQmVoYXZpb3J8fCIiLHM9ci5zY3JvbGxCZWhhdmlvcnx8IiI7dGhpcy5faXNFbmFibGVkPSExLGkubGVmdD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMubGVmdCxpLnRvcD10aGlzLl9wcmV2aW91c0hUTUxTdHlsZXMudG9wLHQuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLWdsb2JhbC1zY3JvbGxibG9jayIpLG10ZSYmKGkuc2Nyb2xsQmVoYXZpb3I9ci5zY3JvbGxCZWhhdmlvcj0iYXV0byIpLHdpbmRvdy5zY3JvbGwodGhpcy5fcHJldmlvdXNTY3JvbGxQb3NpdGlvbi5sZWZ0LHRoaXMuX3ByZXZpb3VzU2Nyb2xsUG9zaXRpb24udG9wKSxtdGUmJihpLnNjcm9sbEJlaGF2aW9yPW8sci5zY3JvbGxCZWhhdmlvcj1zKX19X2NhbkJlRW5hYmxlZCgpe2lmKHRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImNkay1nbG9iYWwtc2Nyb2xsYmxvY2siKXx8dGhpcy5faXNFbmFibGVkKXJldHVybiExO2xldCBlPXRoaXMuX2RvY3VtZW50LmJvZHksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybiBlLnNjcm9sbEhlaWdodD5pLmhlaWdodHx8ZS5zY3JvbGxXaWR0aD5pLndpZHRofX0odGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kb2N1bWVudCksdGhpcy5yZXBvc2l0aW9uPXM9Pm5ldyBuZyh0aGlzLl9zY3JvbGxEaXNwYXRjaGVyLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fbmdab25lLHMpLHRoaXMuX2RvY3VtZW50PW99fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooJG0pLGooVmEpLGooX3QpLGooSHQpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxzYz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLnNjcm9sbFN0cmF0ZWd5PW5ldyBNMix0aGlzLnBhbmVsQ2xhc3M9IiIsdGhpcy5oYXNCYWNrZHJvcD0hMSx0aGlzLmJhY2tkcm9wQ2xhc3M9ImNkay1vdmVybGF5LWRhcmstYmFja2Ryb3AiLHRoaXMuZGlzcG9zZU9uTmF2aWdhdGlvbj0hMSx0KXtsZXQgZT1PYmplY3Qua2V5cyh0KTtmb3IobGV0IGkgb2YgZSl2b2lkIDAhPT10W2ldJiYodGhpc1tpXT10W2ldKX19fSx4dGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9hdHRhY2hlZE92ZXJsYXlzPVtdLHRoaXMuX2RvY3VtZW50PWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpfWFkZChlKXt0aGlzLnJlbW92ZShlKSx0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnB1c2goZSl9cmVtb3ZlKGUpe2xldCBpPXRoaXMuX2F0dGFjaGVkT3ZlcmxheXMuaW5kZXhPZihlKTtpPi0xJiZ0aGlzLl9hdHRhY2hlZE92ZXJsYXlzLnNwbGljZShpLDEpLDA9PT10aGlzLl9hdHRhY2hlZE92ZXJsYXlzLmxlbmd0aCYmdGhpcy5kZXRhY2goKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihIdCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGdPZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeHRle2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoZSksdGhpcy5fbmdab25lPWksdGhpcy5fa2V5ZG93bkxpc3RlbmVyPXI9PntsZXQgbz10aGlzLl9hdHRhY2hlZE92ZXJsYXlzO2ZvcihsZXQgcz1vLmxlbmd0aC0xO3M+LTE7cy0tKWlmKG9bc10uX2tleWRvd25FdmVudHMub2JzZXJ2ZXJzLmxlbmd0aD4wKXtsZXQgYT1vW3NdLl9rZXlkb3duRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5hLm5leHQocikpOmEubmV4dChyKTticmVha319fWFkZChlKXtzdXBlci5hZGQoZSksdGhpcy5faXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMuX2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsdGhpcy5fa2V5ZG93bkxpc3RlbmVyKSk6dGhpcy5fZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIix0aGlzLl9rZXlkb3duTGlzdGVuZXIpLHRoaXMuX2lzQXR0YWNoZWQ9ITApfWRldGFjaCgpe3RoaXMuX2lzQXR0YWNoZWQmJih0aGlzLl9kb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHRoaXMuX2tleWRvd25MaXN0ZW5lciksdGhpcy5faXNBdHRhY2hlZD0hMSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpLGooX3QsOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLF9PZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeHRle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlKSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2N1cnNvclN0eWxlSXNTZXQ9ITEsdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcj1vPT57dGhpcy5fcG9pbnRlckRvd25FdmVudFRhcmdldD1RYyhvKX0sdGhpcy5fY2xpY2tMaXN0ZW5lcj1vPT57bGV0IHM9UWMobyksYT0iY2xpY2siPT09by50eXBlJiZ0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0P3RoaXMuX3BvaW50ZXJEb3duRXZlbnRUYXJnZXQ6czt0aGlzLl9wb2ludGVyRG93bkV2ZW50VGFyZ2V0PW51bGw7bGV0IGw9dGhpcy5fYXR0YWNoZWRPdmVybGF5cy5zbGljZSgpO2ZvcihsZXQgYz1sLmxlbmd0aC0xO2M+LTE7Yy0tKXtsZXQgdT1sW2NdO2lmKHUuX291dHNpZGVQb2ludGVyRXZlbnRzLm9ic2VydmVycy5sZW5ndGg8MXx8IXUuaGFzQXR0YWNoZWQoKSljb250aW51ZTtpZih1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKHMpfHx1Lm92ZXJsYXlFbGVtZW50LmNvbnRhaW5zKGEpKWJyZWFrO2xldCBkPXUuX291dHNpZGVQb2ludGVyRXZlbnRzO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5kLm5leHQobykpOmQubmV4dChvKX19fWFkZChlKXtpZihzdXBlci5hZGQoZSksIXRoaXMuX2lzQXR0YWNoZWQpe2xldCBpPXRoaXMuX2RvY3VtZW50LmJvZHk7dGhpcy5fbmdab25lP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoaSkpOnRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKGkpLHRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX2N1cnNvclN0eWxlSXNTZXQmJih0aGlzLl9jdXJzb3JPcmlnaW5hbFZhbHVlPWkuc3R5bGUuY3Vyc29yLGkuc3R5bGUuY3Vyc29yPSJwb2ludGVyIix0aGlzLl9jdXJzb3JTdHlsZUlzU2V0PSEwKSx0aGlzLl9pc0F0dGFjaGVkPSEwfX1kZXRhY2goKXtpZih0aGlzLl9pc0F0dGFjaGVkKXtsZXQgZT10aGlzLl9kb2N1bWVudC5ib2R5O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLHRoaXMuX3BsYXRmb3JtLklPUyYmdGhpcy5fY3Vyc29yU3R5bGVJc1NldCYmKGUuc3R5bGUuY3Vyc29yPXRoaXMuX2N1cnNvck9yaWdpbmFsVmFsdWUsdGhpcy5fY3Vyc29yU3R5bGVJc1NldD0hMSksdGhpcy5faXNBdHRhY2hlZD0hMX19X2FkZEV2ZW50TGlzdGVuZXJzKGUpe2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiYXV4Y2xpY2siLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApLGUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLHRoaXMuX2NsaWNrTGlzdGVuZXIsITApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKEh0KSxqKG9pKSxqKF90LDgpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxSdj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1lfW5nT25EZXN0cm95KCl7dGhpcy5fY29udGFpbmVyRWxlbWVudD8ucmVtb3ZlKCl9Z2V0Q29udGFpbmVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9jb250YWluZXJFbGVtZW50fHx0aGlzLl9jcmVhdGVDb250YWluZXIoKSx0aGlzLl9jb250YWluZXJFbGVtZW50fV9jcmVhdGVDb250YWluZXIoKXtsZXQgZT0iY2RrLW92ZXJsYXktY29udGFpbmVyIjtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fFpNKCkpe2xldCByPXRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2V9W3BsYXRmb3JtPSJzZXJ2ZXIiXSwgLiR7ZX1bcGxhdGZvcm09InRlc3QiXWApO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXJbb10ucmVtb3ZlKCl9bGV0IGk9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7aS5jbGFzc0xpc3QuYWRkKGUpLFpNKCk/aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwidGVzdCIpOnRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8aS5zZXRBdHRyaWJ1dGUoInBsYXRmb3JtIiwic2VydmVyIiksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpKSx0aGlzLl9jb250YWluZXJFbGVtZW50PWl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooSHQpLGoob2kpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxkZD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1PSExKXt0aGlzLl9wb3J0YWxPdXRsZXQ9dCx0aGlzLl9ob3N0PWUsdGhpcy5fcGFuZT1pLHRoaXMuX2NvbmZpZz1yLHRoaXMuX25nWm9uZT1vLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcj1zLHRoaXMuX2RvY3VtZW50PWEsdGhpcy5fbG9jYXRpb249bCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPWMsdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPXUsdGhpcy5fYmFja2Ryb3BFbGVtZW50PW51bGwsdGhpcy5fYmFja2Ryb3BDbGljaz1uZXcga2UsdGhpcy5fYXR0YWNobWVudHM9bmV3IGtlLHRoaXMuX2RldGFjaG1lbnRzPW5ldyBrZSx0aGlzLl9sb2NhdGlvbkNoYW5nZXM9U24uRU1QVFksdGhpcy5fYmFja2Ryb3BDbGlja0hhbmRsZXI9ZD0+dGhpcy5fYmFja2Ryb3BDbGljay5uZXh0KGQpLHRoaXMuX2JhY2tkcm9wVHJhbnNpdGlvbmVuZEhhbmRsZXI9ZD0+e3RoaXMuX2Rpc3Bvc2VCYWNrZHJvcChkLnRhcmdldCl9LHRoaXMuX2tleWRvd25FdmVudHM9bmV3IGtlLHRoaXMuX291dHNpZGVQb2ludGVyRXZlbnRzPW5ldyBrZSxyLnNjcm9sbFN0cmF0ZWd5JiYodGhpcy5fc2Nyb2xsU3RyYXRlZ3k9ci5zY3JvbGxTdHJhdGVneSx0aGlzLl9zY3JvbGxTdHJhdGVneS5hdHRhY2godGhpcykpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ci5wb3NpdGlvblN0cmF0ZWd5fWdldCBvdmVybGF5RWxlbWVudCgpe3JldHVybiB0aGlzLl9wYW5lfWdldCBiYWNrZHJvcEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fYmFja2Ryb3BFbGVtZW50fWdldCBob3N0RWxlbWVudCgpe3JldHVybiB0aGlzLl9ob3N0fWF0dGFjaCh0KXshdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiZ0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQmJnRoaXMuX3ByZXZpb3VzSG9zdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KTtsZXQgZT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoKHQpO3JldHVybiB0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLl91cGRhdGVTdGFja2luZ09yZGVyKCksdGhpcy5fdXBkYXRlRWxlbWVudFNpemUoKSx0aGlzLl91cGRhdGVFbGVtZW50RGlyZWN0aW9uKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpLHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFF0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMudXBkYXRlUG9zaXRpb24oKX0pLHRoaXMuX3RvZ2dsZVBvaW50ZXJFdmVudHMoITApLHRoaXMuX2NvbmZpZy5oYXNCYWNrZHJvcCYmdGhpcy5fYXR0YWNoQmFja2Ryb3AoKSx0aGlzLl9jb25maWcucGFuZWxDbGFzcyYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHRoaXMuX2NvbmZpZy5wYW5lbENsYXNzLCEwKSx0aGlzLl9hdHRhY2htZW50cy5uZXh0KCksdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyLmFkZCh0aGlzKSx0aGlzLl9jb25maWcuZGlzcG9zZU9uTmF2aWdhdGlvbiYmKHRoaXMuX2xvY2F0aW9uQ2hhbmdlcz10aGlzLl9sb2NhdGlvbi5zdWJzY3JpYmUoKCk9PnRoaXMuZGlzcG9zZSgpKSksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5hZGQodGhpcyksImZ1bmN0aW9uIj09dHlwZW9mIGU/Lm9uRGVzdHJveSYmZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5kZXRhY2goKSkpfSksZX1kZXRhY2goKXtpZighdGhpcy5oYXNBdHRhY2hlZCgpKXJldHVybjt0aGlzLmRldGFjaEJhY2tkcm9wKCksdGhpcy5fdG9nZ2xlUG9pbnRlckV2ZW50cyghMSksdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5kZXRhY2gmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGV0YWNoKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJnRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtsZXQgdD10aGlzLl9wb3J0YWxPdXRsZXQuZGV0YWNoKCk7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzLm5leHQoKSx0aGlzLl9rZXlib2FyZERpc3BhdGNoZXIucmVtb3ZlKHRoaXMpLHRoaXMuX2RldGFjaENvbnRlbnRXaGVuU3RhYmxlKCksdGhpcy5fbG9jYXRpb25DaGFuZ2VzLnVuc3Vic2NyaWJlKCksdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdH1kaXNwb3NlKCl7bGV0IHQ9dGhpcy5oYXNBdHRhY2hlZCgpO3RoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJnRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kuZGlzcG9zZSgpLHRoaXMuX2Rpc3Bvc2VTY3JvbGxTdHJhdGVneSgpLHRoaXMuX2Rpc3Bvc2VCYWNrZHJvcCh0aGlzLl9iYWNrZHJvcEVsZW1lbnQpLHRoaXMuX2xvY2F0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlci5yZW1vdmUodGhpcyksdGhpcy5fcG9ydGFsT3V0bGV0LmRpc3Bvc2UoKSx0aGlzLl9hdHRhY2htZW50cy5jb21wbGV0ZSgpLHRoaXMuX2JhY2tkcm9wQ2xpY2suY29tcGxldGUoKSx0aGlzLl9rZXlkb3duRXZlbnRzLmNvbXBsZXRlKCksdGhpcy5fb3V0c2lkZVBvaW50ZXJFdmVudHMuY29tcGxldGUoKSx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLnJlbW92ZSh0aGlzKSx0aGlzLl9ob3N0Py5yZW1vdmUoKSx0aGlzLl9wcmV2aW91c0hvc3RQYXJlbnQ9dGhpcy5fcGFuZT10aGlzLl9ob3N0PW51bGwsdCYmdGhpcy5fZGV0YWNobWVudHMubmV4dCgpLHRoaXMuX2RldGFjaG1lbnRzLmNvbXBsZXRlKCl9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9YmFja2Ryb3BDbGljaygpe3JldHVybiB0aGlzLl9iYWNrZHJvcENsaWNrfWF0dGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2F0dGFjaG1lbnRzfWRldGFjaG1lbnRzKCl7cmV0dXJuIHRoaXMuX2RldGFjaG1lbnRzfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fa2V5ZG93bkV2ZW50c31vdXRzaWRlUG9pbnRlckV2ZW50cygpe3JldHVybiB0aGlzLl9vdXRzaWRlUG9pbnRlckV2ZW50c31nZXRDb25maWcoKXtyZXR1cm4gdGhpcy5fY29uZmlnfXVwZGF0ZVBvc2l0aW9uKCl7dGhpcy5fcG9zaXRpb25TdHJhdGVneSYmdGhpcy5fcG9zaXRpb25TdHJhdGVneS5hcHBseSgpfXVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodCl7dCE9PXRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kmJih0aGlzLl9wb3NpdGlvblN0cmF0ZWd5JiZ0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LmRpc3Bvc2UoKSx0aGlzLl9wb3NpdGlvblN0cmF0ZWd5PXQsdGhpcy5oYXNBdHRhY2hlZCgpJiYodC5hdHRhY2godGhpcyksdGhpcy51cGRhdGVQb3NpdGlvbigpKSl9dXBkYXRlU2l6ZSh0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZywuLi50fSx0aGlzLl91cGRhdGVFbGVtZW50U2l6ZSgpfXNldERpcmVjdGlvbih0KXt0aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZyxkaXJlY3Rpb246dH0sdGhpcy5fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpfWFkZFBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITApfXJlbW92ZVBhbmVsQ2xhc3ModCl7dGhpcy5fcGFuZSYmdGhpcy5fdG9nZ2xlQ2xhc3Nlcyh0aGlzLl9wYW5lLHQsITEpfWdldERpcmVjdGlvbigpe2xldCB0PXRoaXMuX2NvbmZpZy5kaXJlY3Rpb247cmV0dXJuIHQ/InN0cmluZyI9PXR5cGVvZiB0P3Q6dC52YWx1ZToibHRyIn11cGRhdGVTY3JvbGxTdHJhdGVneSh0KXt0IT09dGhpcy5fc2Nyb2xsU3RyYXRlZ3kmJih0aGlzLl9kaXNwb3NlU2Nyb2xsU3RyYXRlZ3koKSx0aGlzLl9zY3JvbGxTdHJhdGVneT10LHRoaXMuaGFzQXR0YWNoZWQoKSYmKHQuYXR0YWNoKHRoaXMpLHQuZW5hYmxlKCkpKX1fdXBkYXRlRWxlbWVudERpcmVjdGlvbigpe3RoaXMuX2hvc3Quc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuZ2V0RGlyZWN0aW9uKCkpfV91cGRhdGVFbGVtZW50U2l6ZSgpe2lmKCF0aGlzLl9wYW5lKXJldHVybjtsZXQgdD10aGlzLl9wYW5lLnN0eWxlO3Qud2lkdGg9eW8odGhpcy5fY29uZmlnLndpZHRoKSx0LmhlaWdodD15byh0aGlzLl9jb25maWcuaGVpZ2h0KSx0Lm1pbldpZHRoPXlvKHRoaXMuX2NvbmZpZy5taW5XaWR0aCksdC5taW5IZWlnaHQ9eW8odGhpcy5fY29uZmlnLm1pbkhlaWdodCksdC5tYXhXaWR0aD15byh0aGlzLl9jb25maWcubWF4V2lkdGgpLHQubWF4SGVpZ2h0PXlvKHRoaXMuX2NvbmZpZy5tYXhIZWlnaHQpfV90b2dnbGVQb2ludGVyRXZlbnRzKHQpe3RoaXMuX3BhbmUuc3R5bGUucG9pbnRlckV2ZW50cz10PyIiOiJub25lIn1fYXR0YWNoQmFja2Ryb3AoKXtsZXQgdD0iY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyI7dGhpcy5fYmFja2Ryb3BFbGVtZW50PXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjZGstb3ZlcmxheS1iYWNrZHJvcCIpLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmdGhpcy5fYmFja2Ryb3BFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LWJhY2tkcm9wLW5vb3AtYW5pbWF0aW9uIiksdGhpcy5fY29uZmlnLmJhY2tkcm9wQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fYmFja2Ryb3BFbGVtZW50LHRoaXMuX2NvbmZpZy5iYWNrZHJvcENsYXNzLCEwKSx0aGlzLl9ob3N0LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX2JhY2tkcm9wRWxlbWVudCx0aGlzLl9ob3N0KSx0aGlzLl9iYWNrZHJvcEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX2JhY2tkcm9wQ2xpY2tIYW5kbGVyKSwhdGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkJiZ0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLl9iYWNrZHJvcEVsZW1lbnQmJnRoaXMuX2JhY2tkcm9wRWxlbWVudC5jbGFzc0xpc3QuYWRkKHQpfSl9KTp0aGlzLl9iYWNrZHJvcEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0KX1fdXBkYXRlU3RhY2tpbmdPcmRlcigpe3RoaXMuX2hvc3QubmV4dFNpYmxpbmcmJnRoaXMuX2hvc3QucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLl9ob3N0KX1kZXRhY2hCYWNrZHJvcCgpe2xldCB0PXRoaXMuX2JhY2tkcm9wRWxlbWVudDtpZih0KXtpZih0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fZGlzcG9zZUJhY2tkcm9wKHQpO3QuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZyIpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3QuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsdGhpcy5fYmFja2Ryb3BUcmFuc2l0aW9uZW5kSGFuZGxlcil9KSx0LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLHRoaXMuX2JhY2tkcm9wVGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQoKCk9Pnt0aGlzLl9kaXNwb3NlQmFja2Ryb3AodCl9LDUwMCkpfX1fdG9nZ2xlQ2xhc3Nlcyh0LGUsaSl7bGV0IHI9eHYoZXx8W10pLmZpbHRlcihvPT4hIW8pO3IubGVuZ3RoJiYoaT90LmNsYXNzTGlzdC5hZGQoLi4ucik6dC5jbGFzc0xpc3QucmVtb3ZlKC4uLnIpKX1fZGV0YWNoQ29udGVudFdoZW5TdGFibGUoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdD10aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShzdChKdCh0aGlzLl9hdHRhY2htZW50cyx0aGlzLl9kZXRhY2htZW50cykpKS5zdWJzY3JpYmUoKCk9PnsoIXRoaXMuX3BhbmV8fCF0aGlzLl9ob3N0fHwwPT09dGhpcy5fcGFuZS5jaGlsZHJlbi5sZW5ndGgpJiYodGhpcy5fcGFuZSYmdGhpcy5fY29uZmlnLnBhbmVsQ2xhc3MmJnRoaXMuX3RvZ2dsZUNsYXNzZXModGhpcy5fcGFuZSx0aGlzLl9jb25maWcucGFuZWxDbGFzcywhMSksdGhpcy5faG9zdCYmdGhpcy5faG9zdC5wYXJlbnRFbGVtZW50JiYodGhpcy5fcHJldmlvdXNIb3N0UGFyZW50PXRoaXMuX2hvc3QucGFyZW50RWxlbWVudCx0aGlzLl9ob3N0LnJlbW92ZSgpKSx0LnVuc3Vic2NyaWJlKCkpfSl9KX1fZGlzcG9zZVNjcm9sbFN0cmF0ZWd5KCl7bGV0IHQ9dGhpcy5fc2Nyb2xsU3RyYXRlZ3k7dCYmKHQuZGlzYWJsZSgpLHQuZGV0YWNoJiZ0LmRldGFjaCgpKX1fZGlzcG9zZUJhY2tkcm9wKHQpe3QmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9iYWNrZHJvcENsaWNrSGFuZGxlciksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIix0aGlzLl9iYWNrZHJvcFRyYW5zaXRpb25lbmRIYW5kbGVyKSx0LnJlbW92ZSgpLHRoaXMuX2JhY2tkcm9wRWxlbWVudD09PXQmJih0aGlzLl9iYWNrZHJvcEVsZW1lbnQ9bnVsbCkpLHRoaXMuX2JhY2tkcm9wVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9iYWNrZHJvcFRpbWVvdXQpLHRoaXMuX2JhY2tkcm9wVGltZW91dD12b2lkIDApfX0sX3RlPSJjZGstb3ZlcmxheS1jb25uZWN0ZWQtcG9zaXRpb24tYm91bmRpbmctYm94Iix2T2U9LyhbQS1aYS16JV0rKSQvO2Z1bmN0aW9uIHRnKG4sdCl7Zm9yKGxldCBlIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShlKSYmKG5bZV09dFtlXSk7cmV0dXJuIG59ZnVuY3Rpb24gdnRlKG4pe2lmKCJudW1iZXIiIT10eXBlb2YgbiYmbnVsbCE9bil7bGV0W3QsZV09bi5zcGxpdCh2T2UpO3JldHVybiBlJiYicHgiIT09ZT9udWxsOnBhcnNlRmxvYXQodCl9cmV0dXJuIG58fG51bGx9ZnVuY3Rpb24geXRlKG4pe3JldHVybnt0b3A6TWF0aC5mbG9vcihuLnRvcCkscmlnaHQ6TWF0aC5mbG9vcihuLnJpZ2h0KSxib3R0b206TWF0aC5mbG9vcihuLmJvdHRvbSksbGVmdDpNYXRoLmZsb29yKG4ubGVmdCksd2lkdGg6TWF0aC5mbG9vcihuLndpZHRoKSxoZWlnaHQ6TWF0aC5mbG9vcihuLmhlaWdodCl9fXZhciBidGU9ImNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyIix5T2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvKXt0aGlzLl92aWV3cG9ydFJ1bGVyPWUsdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9wbGF0Zm9ybT1yLHRoaXMuX292ZXJsYXlDb250YWluZXI9b31nbG9iYWwoKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fY3NzUG9zaXRpb249InN0YXRpYyIsdGhpcy5fdG9wT2Zmc2V0PSIiLHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl9hbGlnbkl0ZW1zPSIiLHRoaXMuX3hQb3NpdGlvbj0iIix0aGlzLl94T2Zmc2V0PSIiLHRoaXMuX3dpZHRoPSIiLHRoaXMuX2hlaWdodD0iIix0aGlzLl9pc0Rpc3Bvc2VkPSExfWF0dGFjaCh0KXtsZXQgZT10LmdldENvbmZpZygpO3RoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl93aWR0aCYmIWUud2lkdGgmJnQudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fd2lkdGh9KSx0aGlzLl9oZWlnaHQmJiFlLmhlaWdodCYmdC51cGRhdGVTaXplKHtoZWlnaHQ6dGhpcy5faGVpZ2h0fSksdC5ob3N0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGJ0ZSksdGhpcy5faXNEaXNwb3NlZD0hMX10b3AodD0iIil7cmV0dXJuIHRoaXMuX2JvdHRvbU9mZnNldD0iIix0aGlzLl90b3BPZmZzZXQ9dCx0aGlzLl9hbGlnbkl0ZW1zPSJmbGV4LXN0YXJ0Iix0aGlzfWxlZnQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImxlZnQiLHRoaXN9Ym90dG9tKHQ9IiIpe3JldHVybiB0aGlzLl90b3BPZmZzZXQ9IiIsdGhpcy5fYm90dG9tT2Zmc2V0PXQsdGhpcy5fYWxpZ25JdGVtcz0iZmxleC1lbmQiLHRoaXN9cmlnaHQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249InJpZ2h0Iix0aGlzfXN0YXJ0KHQ9IiIpe3JldHVybiB0aGlzLl94T2Zmc2V0PXQsdGhpcy5feFBvc2l0aW9uPSJzdGFydCIsdGhpc31lbmQodD0iIil7cmV0dXJuIHRoaXMuX3hPZmZzZXQ9dCx0aGlzLl94UG9zaXRpb249ImVuZCIsdGhpc313aWR0aCh0PSIiKXtyZXR1cm4gdGhpcy5fb3ZlcmxheVJlZj90aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOnR9KTp0aGlzLl93aWR0aD10LHRoaXN9aGVpZ2h0KHQ9IiIpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OnR9KTp0aGlzLl9oZWlnaHQ9dCx0aGlzfWNlbnRlckhvcml6b250YWxseSh0PSIiKXtyZXR1cm4gdGhpcy5sZWZ0KHQpLHRoaXMuX3hQb3NpdGlvbj0iY2VudGVyIix0aGlzfWNlbnRlclZlcnRpY2FsbHkodD0iIil7cmV0dXJuIHRoaXMudG9wKHQpLHRoaXMuX2FsaWduSXRlbXM9ImNlbnRlciIsdGhpc31hcHBseSgpe2lmKCF0aGlzLl9vdmVybGF5UmVmfHwhdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKXJldHVybjtsZXQgdD10aGlzLl9vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnN0eWxlLGU9dGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZSxpPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkse3dpZHRoOnIsaGVpZ2h0Om8sbWF4V2lkdGg6cyxtYXhIZWlnaHQ6YX09aSxsPSEoIjEwMCUiIT09ciYmIjEwMHZ3IiE9PXJ8fHMmJiIxMDAlIiE9PXMmJiIxMDB2dyIhPT1zKSxjPSEoIjEwMCUiIT09byYmIjEwMHZoIiE9PW98fGEmJiIxMDAlIiE9PWEmJiIxMDB2aCIhPT1hKSx1PXRoaXMuX3hQb3NpdGlvbixkPXRoaXMuX3hPZmZzZXQscD0icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uLGg9IiIsZj0iIixtPSIiO2w/bT0iZmxleC1zdGFydCI6ImNlbnRlciI9PT11PyhtPSJjZW50ZXIiLHA/Zj1kOmg9ZCk6cD8ibGVmdCI9PT11fHwiZW5kIj09PXU/KG09ImZsZXgtZW5kIixoPWQpOigicmlnaHQiPT09dXx8InN0YXJ0Ij09PXUpJiYobT0iZmxleC1zdGFydCIsZj1kKToibGVmdCI9PT11fHwic3RhcnQiPT09dT8obT0iZmxleC1zdGFydCIsaD1kKTooInJpZ2h0Ij09PXV8fCJlbmQiPT09dSkmJihtPSJmbGV4LWVuZCIsZj1kKSx0LnBvc2l0aW9uPXRoaXMuX2Nzc1Bvc2l0aW9uLHQubWFyZ2luTGVmdD1sPyIwIjpoLHQubWFyZ2luVG9wPWM/IjAiOnRoaXMuX3RvcE9mZnNldCx0Lm1hcmdpbkJvdHRvbT10aGlzLl9ib3R0b21PZmZzZXQsdC5tYXJnaW5SaWdodD1sPyIwIjpmLGUuanVzdGlmeUNvbnRlbnQ9bSxlLmFsaWduSXRlbXM9Yz8iZmxleC1zdGFydCI6dGhpcy5fYWxpZ25JdGVtc31kaXNwb3NlKCl7aWYodGhpcy5faXNEaXNwb3NlZHx8IXRoaXMuX292ZXJsYXlSZWYpcmV0dXJuO2xldCB0PXRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUsZT10aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50LGk9ZS5zdHlsZTtlLmNsYXNzTGlzdC5yZW1vdmUoYnRlKSxpLmp1c3RpZnlDb250ZW50PWkuYWxpZ25JdGVtcz10Lm1hcmdpblRvcD10Lm1hcmdpbkJvdHRvbT10Lm1hcmdpbkxlZnQ9dC5tYXJnaW5SaWdodD10LnBvc2l0aW9uPSIiLHRoaXMuX292ZXJsYXlSZWY9bnVsbCx0aGlzLl9pc0Rpc3Bvc2VkPSEwfX19ZmxleGlibGVDb25uZWN0ZWRUbyhlKXtyZXR1cm4gbmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIsbyl7dGhpcy5fdmlld3BvcnRSdWxlcj1lLHRoaXMuX2RvY3VtZW50PWksdGhpcy5fcGxhdGZvcm09cix0aGlzLl9vdmVybGF5Q29udGFpbmVyPW8sdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZT17d2lkdGg6MCxoZWlnaHQ6MH0sdGhpcy5faXNQdXNoZWQ9ITEsdGhpcy5fY2FuUHVzaD0hMCx0aGlzLl9ncm93QWZ0ZXJPcGVuPSExLHRoaXMuX2hhc0ZsZXhpYmxlRGltZW5zaW9ucz0hMCx0aGlzLl9wb3NpdGlvbkxvY2tlZD0hMSx0aGlzLl92aWV3cG9ydE1hcmdpbj0wLHRoaXMuX3Njcm9sbGFibGVzPVtdLHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucz1bXSx0aGlzLl9wb3NpdGlvbkNoYW5nZXM9bmV3IGtlLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl9vZmZzZXRYPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10sdGhpcy5wb3NpdGlvbkNoYW5nZXM9dGhpcy5fcG9zaXRpb25DaGFuZ2VzLHRoaXMuc2V0T3JpZ2luKHQpfWdldCBwb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5fcHJlZmVycmVkUG9zaXRpb25zfWF0dGFjaCh0KXt0aGlzLl92YWxpZGF0ZVBvc2l0aW9ucygpLHQuaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmFkZChfdGUpLHRoaXMuX292ZXJsYXlSZWY9dCx0aGlzLl9ib3VuZGluZ0JveD10Lmhvc3RFbGVtZW50LHRoaXMuX3BhbmU9dC5vdmVybGF5RWxlbWVudCx0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX2lzSW5pdGlhbFJlbmRlcj0hMCx0aGlzLl9sYXN0UG9zaXRpb249bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc0luaXRpYWxSZW5kZXI9ITAsdGhpcy5hcHBseSgpfSl9YXBwbHkoKXtpZih0aGlzLl9pc0Rpc3Bvc2VkfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighdGhpcy5faXNJbml0aWFsUmVuZGVyJiZ0aGlzLl9wb3NpdGlvbkxvY2tlZCYmdGhpcy5fbGFzdFBvc2l0aW9uKXJldHVybiB2b2lkIHRoaXMucmVhcHBseUxhc3RQb3NpdGlvbigpO3RoaXMuX2NsZWFyUGFuZWxDbGFzc2VzKCksdGhpcy5fcmVzZXRPdmVybGF5RWxlbWVudFN0eWxlcygpLHRoaXMuX3Jlc2V0Qm91bmRpbmdCb3hTdHlsZXMoKSx0aGlzLl92aWV3cG9ydFJlY3Q9dGhpcy5fZ2V0TmFycm93ZWRWaWV3cG9ydFJlY3QoKSx0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHMsdD10aGlzLl9vcmlnaW5SZWN0LGU9dGhpcy5fb3ZlcmxheVJlY3QsaT10aGlzLl92aWV3cG9ydFJlY3Qscj10aGlzLl9jb250YWluZXJSZWN0LG89W107Zm9yKGxldCBhIG9mIHRoaXMuX3ByZWZlcnJlZFBvc2l0aW9ucyl7bGV0IGw9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodCxyLGEpLGM9dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGwsZSxhKSx1PXRoaXMuX2dldE92ZXJsYXlGaXQoYyxlLGksYSk7aWYodS5pc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydClyZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGEsbCk7dGhpcy5fY2FuRml0V2l0aEZsZXhpYmxlRGltZW5zaW9ucyh1LGMsaSk/by5wdXNoKHtwb3NpdGlvbjphLG9yaWdpbjpsLG92ZXJsYXlSZWN0OmUsYm91bmRpbmdCb3hSZWN0OnRoaXMuX2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdChsLGEpfSk6KCFzfHxzLm92ZXJsYXlGaXQudmlzaWJsZUFyZWE8dS52aXNpYmxlQXJlYSkmJihzPXtvdmVybGF5Rml0OnUsb3ZlcmxheVBvaW50OmMsb3JpZ2luUG9pbnQ6bCxwb3NpdGlvbjphLG92ZXJsYXlSZWN0OmV9KX1pZihvLmxlbmd0aCl7bGV0IGE9bnVsbCxsPS0xO2ZvcihsZXQgYyBvZiBvKXtsZXQgdT1jLmJvdW5kaW5nQm94UmVjdC53aWR0aCpjLmJvdW5kaW5nQm94UmVjdC5oZWlnaHQqKGMucG9zaXRpb24ud2VpZ2h0fHwxKTt1PmwmJihsPXUsYT1jKX1yZXR1cm4gdGhpcy5faXNQdXNoZWQ9ITEsdm9pZCB0aGlzLl9hcHBseVBvc2l0aW9uKGEucG9zaXRpb24sYS5vcmlnaW4pfWlmKHRoaXMuX2NhblB1c2gpcmV0dXJuIHRoaXMuX2lzUHVzaGVkPSEwLHZvaWQgdGhpcy5fYXBwbHlQb3NpdGlvbihzLnBvc2l0aW9uLHMub3JpZ2luUG9pbnQpO3RoaXMuX2FwcGx5UG9zaXRpb24ocy5wb3NpdGlvbixzLm9yaWdpblBvaW50KX1kZXRhY2goKXt0aGlzLl9jbGVhclBhbmVsQ2xhc3NlcygpLHRoaXMuX2xhc3RQb3NpdGlvbj1udWxsLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD1udWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWRpc3Bvc2UoKXt0aGlzLl9pc0Rpc3Bvc2VkfHwodGhpcy5fYm91bmRpbmdCb3gmJnRnKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IiIsbGVmdDoiIixyaWdodDoiIixib3R0b206IiIsaGVpZ2h0OiIiLHdpZHRoOiIiLGFsaWduSXRlbXM6IiIsanVzdGlmeUNvbnRlbnQ6IiJ9KSx0aGlzLl9wYW5lJiZ0aGlzLl9yZXNldE92ZXJsYXlFbGVtZW50U3R5bGVzKCksdGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKF90ZSksdGhpcy5kZXRhY2goKSx0aGlzLl9wb3NpdGlvbkNoYW5nZXMuY29tcGxldGUoKSx0aGlzLl9vdmVybGF5UmVmPXRoaXMuX2JvdW5kaW5nQm94PW51bGwsdGhpcy5faXNEaXNwb3NlZD0hMCl9cmVhcHBseUxhc3RQb3NpdGlvbigpe2lmKHRoaXMuX2lzRGlzcG9zZWR8fCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuO2xldCB0PXRoaXMuX2xhc3RQb3NpdGlvbjtpZih0KXt0aGlzLl9vcmlnaW5SZWN0PXRoaXMuX2dldE9yaWdpblJlY3QoKSx0aGlzLl9vdmVybGF5UmVjdD10aGlzLl9wYW5lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3ZpZXdwb3J0UmVjdD10aGlzLl9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpLHRoaXMuX2NvbnRhaW5lclJlY3Q9dGhpcy5fb3ZlcmxheUNvbnRhaW5lci5nZXRDb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGU9dGhpcy5fZ2V0T3JpZ2luUG9pbnQodGhpcy5fb3JpZ2luUmVjdCx0aGlzLl9jb250YWluZXJSZWN0LHQpO3RoaXMuX2FwcGx5UG9zaXRpb24odCxlKX1lbHNlIHRoaXMuYXBwbHkoKX13aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnModCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVzPXQsdGhpc313aXRoUG9zaXRpb25zKHQpe3JldHVybiB0aGlzLl9wcmVmZXJyZWRQb3NpdGlvbnM9dCwtMT09PXQuaW5kZXhPZih0aGlzLl9sYXN0UG9zaXRpb24pJiYodGhpcy5fbGFzdFBvc2l0aW9uPW51bGwpLHRoaXMuX3ZhbGlkYXRlUG9zaXRpb25zKCksdGhpc313aXRoVmlld3BvcnRNYXJnaW4odCl7cmV0dXJuIHRoaXMuX3ZpZXdwb3J0TWFyZ2luPXQsdGhpc313aXRoRmxleGlibGVEaW1lbnNpb25zKHQ9ITApe3JldHVybiB0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnM9dCx0aGlzfXdpdGhHcm93QWZ0ZXJPcGVuKHQ9ITApe3JldHVybiB0aGlzLl9ncm93QWZ0ZXJPcGVuPXQsdGhpc313aXRoUHVzaCh0PSEwKXtyZXR1cm4gdGhpcy5fY2FuUHVzaD10LHRoaXN9d2l0aExvY2tlZFBvc2l0aW9uKHQ9ITApe3JldHVybiB0aGlzLl9wb3NpdGlvbkxvY2tlZD10LHRoaXN9c2V0T3JpZ2luKHQpe3JldHVybiB0aGlzLl9vcmlnaW49dCx0aGlzfXdpdGhEZWZhdWx0T2Zmc2V0WCh0KXtyZXR1cm4gdGhpcy5fb2Zmc2V0WD10LHRoaXN9d2l0aERlZmF1bHRPZmZzZXRZKHQpe3JldHVybiB0aGlzLl9vZmZzZXRZPXQsdGhpc313aXRoVHJhbnNmb3JtT3JpZ2luT24odCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU9yaWdpblNlbGVjdG9yPXQsdGhpc31fZ2V0T3JpZ2luUG9pbnQodCxlLGkpe2xldCByLG87aWYoImNlbnRlciI9PWkub3JpZ2luWClyPXQubGVmdCt0LndpZHRoLzI7ZWxzZXtsZXQgcz10aGlzLl9pc1J0bCgpP3QucmlnaHQ6dC5sZWZ0LGE9dGhpcy5faXNSdGwoKT90LmxlZnQ6dC5yaWdodDtyPSJzdGFydCI9PWkub3JpZ2luWD9zOmF9cmV0dXJuIGUubGVmdDwwJiYoci09ZS5sZWZ0KSxvPSJjZW50ZXIiPT1pLm9yaWdpblk/dC50b3ArdC5oZWlnaHQvMjoidG9wIj09aS5vcmlnaW5ZP3QudG9wOnQuYm90dG9tLGUudG9wPDAmJihvLT1lLnRvcCkse3g6cix5Om99fV9nZXRPdmVybGF5UG9pbnQodCxlLGkpe2xldCByLG87cmV0dXJuIHI9ImNlbnRlciI9PWkub3ZlcmxheVg/LWUud2lkdGgvMjoic3RhcnQiPT09aS5vdmVybGF5WD90aGlzLl9pc1J0bCgpPy1lLndpZHRoOjA6dGhpcy5faXNSdGwoKT8wOi1lLndpZHRoLG89ImNlbnRlciI9PWkub3ZlcmxheVk/LWUuaGVpZ2h0LzI6InRvcCI9PWkub3ZlcmxheVk/MDotZS5oZWlnaHQse3g6dC54K3IseTp0Lnkrb319X2dldE92ZXJsYXlGaXQodCxlLGkscil7bGV0IG89eXRlKGUpLHt4OnMseTphfT10LGw9dGhpcy5fZ2V0T2Zmc2V0KHIsIngiKSxjPXRoaXMuX2dldE9mZnNldChyLCJ5Iik7bCYmKHMrPWwpLGMmJihhKz1jKTtsZXQgcD0wLWEsaD1hK28uaGVpZ2h0LWkuaGVpZ2h0LGY9dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby53aWR0aCwwLXMscytvLndpZHRoLWkud2lkdGgpLG09dGhpcy5fc3VidHJhY3RPdmVyZmxvd3Moby5oZWlnaHQscCxoKSx4PWYqbTtyZXR1cm57dmlzaWJsZUFyZWE6eCxpc0NvbXBsZXRlbHlXaXRoaW5WaWV3cG9ydDpvLndpZHRoKm8uaGVpZ2h0PT09eCxmaXRzSW5WaWV3cG9ydFZlcnRpY2FsbHk6bT09PW8uaGVpZ2h0LGZpdHNJblZpZXdwb3J0SG9yaXpvbnRhbGx5OmY9PW8ud2lkdGh9fV9jYW5GaXRXaXRoRmxleGlibGVEaW1lbnNpb25zKHQsZSxpKXtpZih0aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMpe2xldCByPWkuYm90dG9tLWUueSxvPWkucmlnaHQtZS54LHM9dnRlKHRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWluSGVpZ2h0KSxhPXZ0ZSh0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpLm1pbldpZHRoKSxjPXQuZml0c0luVmlld3BvcnRIb3Jpem9udGFsbHl8fG51bGwhPWEmJmE8PW87cmV0dXJuKHQuZml0c0luVmlld3BvcnRWZXJ0aWNhbGx5fHxudWxsIT1zJiZzPD1yKSYmY31yZXR1cm4hMX1fcHVzaE92ZXJsYXlPblNjcmVlbih0LGUsaSl7aWYodGhpcy5fcHJldmlvdXNQdXNoQW1vdW50JiZ0aGlzLl9wb3NpdGlvbkxvY2tlZClyZXR1cm57eDp0LngrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50LngseTp0LnkrdGhpcy5fcHJldmlvdXNQdXNoQW1vdW50Lnl9O2xldCByPXl0ZShlKSxvPXRoaXMuX3ZpZXdwb3J0UmVjdCxzPU1hdGgubWF4KHQueCtyLndpZHRoLW8ud2lkdGgsMCksYT1NYXRoLm1heCh0Lnkrci5oZWlnaHQtby5oZWlnaHQsMCksbD1NYXRoLm1heChvLnRvcC1pLnRvcC10LnksMCksYz1NYXRoLm1heChvLmxlZnQtaS5sZWZ0LXQueCwwKSx1PTAsZD0wO3JldHVybiB1PXIud2lkdGg8PW8ud2lkdGg/Y3x8LXM6dC54PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28ubGVmdC1pLmxlZnQtdC54OjAsZD1yLmhlaWdodDw9by5oZWlnaHQ/bHx8LWE6dC55PHRoaXMuX3ZpZXdwb3J0TWFyZ2luP28udG9wLWkudG9wLXQueTowLHRoaXMuX3ByZXZpb3VzUHVzaEFtb3VudD17eDp1LHk6ZH0se3g6dC54K3UseTp0LnkrZH19X2FwcGx5UG9zaXRpb24odCxlKXtpZih0aGlzLl9zZXRUcmFuc2Zvcm1PcmlnaW4odCksdGhpcy5fc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoZSx0KSx0aGlzLl9zZXRCb3VuZGluZ0JveFN0eWxlcyhlLHQpLHQucGFuZWxDbGFzcyYmdGhpcy5fYWRkUGFuZWxDbGFzc2VzKHQucGFuZWxDbGFzcyksdGhpcy5fbGFzdFBvc2l0aW9uPXQsdGhpcy5fcG9zaXRpb25DaGFuZ2VzLm9ic2VydmVycy5sZW5ndGgpe2xldCBpPXRoaXMuX2dldFNjcm9sbFZpc2liaWxpdHkoKSxyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuY29ubmVjdGlvblBhaXI9dCx0aGlzLnNjcm9sbGFibGVWaWV3UHJvcGVydGllcz1lfX0odCxpKTt0aGlzLl9wb3NpdGlvbkNoYW5nZXMubmV4dChyKX10aGlzLl9pc0luaXRpYWxSZW5kZXI9ITF9X3NldFRyYW5zZm9ybU9yaWdpbih0KXtpZighdGhpcy5fdHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IpcmV0dXJuO2xldCBpLGU9dGhpcy5fYm91bmRpbmdCb3gucXVlcnlTZWxlY3RvckFsbCh0aGlzLl90cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcikscj10Lm92ZXJsYXlZO2k9ImNlbnRlciI9PT10Lm92ZXJsYXlYPyJjZW50ZXIiOnRoaXMuX2lzUnRsKCk/InN0YXJ0Ij09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCI6InN0YXJ0Ij09PXQub3ZlcmxheVg/ImxlZnQiOiJyaWdodCI7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspZVtvXS5zdHlsZS50cmFuc2Zvcm1PcmlnaW49YCR7aX0gJHtyfWB9X2NhbGN1bGF0ZUJvdW5kaW5nQm94UmVjdCh0LGUpe2xldCBvLHMsYSx1LGQscCxpPXRoaXMuX3ZpZXdwb3J0UmVjdCxyPXRoaXMuX2lzUnRsKCk7aWYoInRvcCI9PT1lLm92ZXJsYXlZKXM9dC55LG89aS5oZWlnaHQtcyt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNlIGlmKCJib3R0b20iPT09ZS5vdmVybGF5WSlhPWkuaGVpZ2h0LXQueSsyKnRoaXMuX3ZpZXdwb3J0TWFyZ2luLG89aS5oZWlnaHQtYSt0aGlzLl92aWV3cG9ydE1hcmdpbjtlbHNle2xldCBoPU1hdGgubWluKGkuYm90dG9tLXQueStpLnRvcCx0LnkpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS5oZWlnaHQ7bz0yKmgscz10LnktaCxvPmYmJiF0aGlzLl9pc0luaXRpYWxSZW5kZXImJiF0aGlzLl9ncm93QWZ0ZXJPcGVuJiYocz10LnktZi8yKX1pZigiZW5kIj09PWUub3ZlcmxheVgmJiFyfHwic3RhcnQiPT09ZS5vdmVybGF5WCYmcilwPWkud2lkdGgtdC54K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHU9dC54LXRoaXMuX3ZpZXdwb3J0TWFyZ2luO2Vsc2UgaWYoInN0YXJ0Ij09PWUub3ZlcmxheVgmJiFyfHwiZW5kIj09PWUub3ZlcmxheVgmJnIpZD10LngsdT1pLnJpZ2h0LXQueDtlbHNle2xldCBoPU1hdGgubWluKGkucmlnaHQtdC54K2kubGVmdCx0LngpLGY9dGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aDt1PTIqaCxkPXQueC1oLHU+ZiYmIXRoaXMuX2lzSW5pdGlhbFJlbmRlciYmIXRoaXMuX2dyb3dBZnRlck9wZW4mJihkPXQueC1mLzIpfXJldHVybnt0b3A6cyxsZWZ0OmQsYm90dG9tOmEscmlnaHQ6cCx3aWR0aDp1LGhlaWdodDpvfX1fc2V0Qm91bmRpbmdCb3hTdHlsZXModCxlKXtsZXQgaT10aGlzLl9jYWxjdWxhdGVCb3VuZGluZ0JveFJlY3QodCxlKTshdGhpcy5faXNJbml0aWFsUmVuZGVyJiYhdGhpcy5fZ3Jvd0FmdGVyT3BlbiYmKGkuaGVpZ2h0PU1hdGgubWluKGkuaGVpZ2h0LHRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemUuaGVpZ2h0KSxpLndpZHRoPU1hdGgubWluKGkud2lkdGgsdGhpcy5fbGFzdEJvdW5kaW5nQm94U2l6ZS53aWR0aCkpO2xldCByPXt9O2lmKHRoaXMuX2hhc0V4YWN0UG9zaXRpb24oKSlyLnRvcD1yLmxlZnQ9IjAiLHIuYm90dG9tPXIucmlnaHQ9ci5tYXhIZWlnaHQ9ci5tYXhXaWR0aD0iIixyLndpZHRoPXIuaGVpZ2h0PSIxMDAlIjtlbHNle2xldCBvPXRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkubWF4SGVpZ2h0LHM9dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5tYXhXaWR0aDtyLmhlaWdodD15byhpLmhlaWdodCksci50b3A9eW8oaS50b3ApLHIuYm90dG9tPXlvKGkuYm90dG9tKSxyLndpZHRoPXlvKGkud2lkdGgpLHIubGVmdD15byhpLmxlZnQpLHIucmlnaHQ9eW8oaS5yaWdodCksci5hbGlnbkl0ZW1zPSJjZW50ZXIiPT09ZS5vdmVybGF5WD8iY2VudGVyIjoiZW5kIj09PWUub3ZlcmxheVg/ImZsZXgtZW5kIjoiZmxleC1zdGFydCIsci5qdXN0aWZ5Q29udGVudD0iY2VudGVyIj09PWUub3ZlcmxheVk/ImNlbnRlciI6ImJvdHRvbSI9PT1lLm92ZXJsYXlZPyJmbGV4LWVuZCI6ImZsZXgtc3RhcnQiLG8mJihyLm1heEhlaWdodD15byhvKSkscyYmKHIubWF4V2lkdGg9eW8ocykpfXRoaXMuX2xhc3RCb3VuZGluZ0JveFNpemU9aSx0Zyh0aGlzLl9ib3VuZGluZ0JveC5zdHlsZSxyKX1fcmVzZXRCb3VuZGluZ0JveFN0eWxlcygpe3RnKHRoaXMuX2JvdW5kaW5nQm94LnN0eWxlLHt0b3A6IjAiLGxlZnQ6IjAiLHJpZ2h0OiIwIixib3R0b206IjAiLGhlaWdodDoiIix3aWR0aDoiIixhbGlnbkl0ZW1zOiIiLGp1c3RpZnlDb250ZW50OiIifSl9X3Jlc2V0T3ZlcmxheUVsZW1lbnRTdHlsZXMoKXt0Zyh0aGlzLl9wYW5lLnN0eWxlLHt0b3A6IiIsbGVmdDoiIixib3R0b206IiIscmlnaHQ6IiIscG9zaXRpb246IiIsdHJhbnNmb3JtOiIifSl9X3NldE92ZXJsYXlFbGVtZW50U3R5bGVzKHQsZSl7bGV0IGk9e30scj10aGlzLl9oYXNFeGFjdFBvc2l0aW9uKCksbz10aGlzLl9oYXNGbGV4aWJsZURpbWVuc2lvbnMscz10aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO2lmKHIpe2xldCB1PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO3RnKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WShlLHQsdSkpLHRnKGksdGhpcy5fZ2V0RXhhY3RPdmVybGF5WChlLHQsdSkpfWVsc2UgaS5wb3NpdGlvbj0ic3RhdGljIjtsZXQgYT0iIixsPXRoaXMuX2dldE9mZnNldChlLCJ4IiksYz10aGlzLl9nZXRPZmZzZXQoZSwieSIpO2wmJihhKz1gdHJhbnNsYXRlWCgke2x9cHgpIGApLGMmJihhKz1gdHJhbnNsYXRlWSgke2N9cHgpYCksaS50cmFuc2Zvcm09YS50cmltKCkscy5tYXhIZWlnaHQmJihyP2kubWF4SGVpZ2h0PXlvKHMubWF4SGVpZ2h0KTpvJiYoaS5tYXhIZWlnaHQ9IiIpKSxzLm1heFdpZHRoJiYocj9pLm1heFdpZHRoPXlvKHMubWF4V2lkdGgpOm8mJihpLm1heFdpZHRoPSIiKSksdGcodGhpcy5fcGFuZS5zdHlsZSxpKX1fZ2V0RXhhY3RPdmVybGF5WSh0LGUsaSl7bGV0IHI9e3RvcDoiIixib3R0b206IiJ9LG89dGhpcy5fZ2V0T3ZlcmxheVBvaW50KGUsdGhpcy5fb3ZlcmxheVJlY3QsdCk7cmV0dXJuIHRoaXMuX2lzUHVzaGVkJiYobz10aGlzLl9wdXNoT3ZlcmxheU9uU2NyZWVuKG8sdGhpcy5fb3ZlcmxheVJlY3QsaSkpLCJib3R0b20iPT09dC5vdmVybGF5WT9yLmJvdHRvbT10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LShvLnkrdGhpcy5fb3ZlcmxheVJlY3QuaGVpZ2h0KSsicHgiOnIudG9wPXlvKG8ueSkscn1fZ2V0RXhhY3RPdmVybGF5WCh0LGUsaSl7bGV0IHMscj17bGVmdDoiIixyaWdodDoiIn0sbz10aGlzLl9nZXRPdmVybGF5UG9pbnQoZSx0aGlzLl9vdmVybGF5UmVjdCx0KTtyZXR1cm4gdGhpcy5faXNQdXNoZWQmJihvPXRoaXMuX3B1c2hPdmVybGF5T25TY3JlZW4obyx0aGlzLl9vdmVybGF5UmVjdCxpKSkscz10aGlzLl9pc1J0bCgpPyJlbmQiPT09dC5vdmVybGF5WD8ibGVmdCI6InJpZ2h0IjoiZW5kIj09PXQub3ZlcmxheVg/InJpZ2h0IjoibGVmdCIsInJpZ2h0Ij09PXM/ci5yaWdodD10aGlzLl9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtKG8ueCt0aGlzLl9vdmVybGF5UmVjdC53aWR0aCkrInB4IjpyLmxlZnQ9eW8oby54KSxyfV9nZXRTY3JvbGxWaXNpYmlsaXR5KCl7bGV0IHQ9dGhpcy5fZ2V0T3JpZ2luUmVjdCgpLGU9dGhpcy5fcGFuZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPXRoaXMuX3Njcm9sbGFibGVzLm1hcChyPT5yLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtyZXR1cm57aXNPcmlnaW5DbGlwcGVkOmd0ZSh0LGkpLGlzT3JpZ2luT3V0c2lkZVZpZXc6SUgodCxpKSxpc092ZXJsYXlDbGlwcGVkOmd0ZShlLGkpLGlzT3ZlcmxheU91dHNpZGVWaWV3OklIKGUsaSl9fV9zdWJ0cmFjdE92ZXJmbG93cyh0LC4uLmUpe3JldHVybiBlLnJlZHVjZSgoaSxyKT0+aS1NYXRoLm1heChyLDApLHQpfV9nZXROYXJyb3dlZFZpZXdwb3J0UmVjdCgpe2xldCB0PXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxlPXRoaXMuX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57dG9wOmkudG9wK3RoaXMuX3ZpZXdwb3J0TWFyZ2luLGxlZnQ6aS5sZWZ0K3RoaXMuX3ZpZXdwb3J0TWFyZ2luLHJpZ2h0OmkubGVmdCt0LXRoaXMuX3ZpZXdwb3J0TWFyZ2luLGJvdHRvbTppLnRvcCtlLXRoaXMuX3ZpZXdwb3J0TWFyZ2luLHdpZHRoOnQtMip0aGlzLl92aWV3cG9ydE1hcmdpbixoZWlnaHQ6ZS0yKnRoaXMuX3ZpZXdwb3J0TWFyZ2lufX1faXNSdGwoKXtyZXR1cm4icnRsIj09PXRoaXMuX292ZXJsYXlSZWYuZ2V0RGlyZWN0aW9uKCl9X2hhc0V4YWN0UG9zaXRpb24oKXtyZXR1cm4hdGhpcy5faGFzRmxleGlibGVEaW1lbnNpb25zfHx0aGlzLl9pc1B1c2hlZH1fZ2V0T2Zmc2V0KHQsZSl7cmV0dXJuIngiPT09ZT9udWxsPT10Lm9mZnNldFg/dGhpcy5fb2Zmc2V0WDp0Lm9mZnNldFg6bnVsbD09dC5vZmZzZXRZP3RoaXMuX29mZnNldFk6dC5vZmZzZXRZfV92YWxpZGF0ZVBvc2l0aW9ucygpe31fYWRkUGFuZWxDbGFzc2VzKHQpe3RoaXMuX3BhbmUmJnh2KHQpLmZvckVhY2goZT0+eyIiIT09ZSYmLTE9PT10aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLmluZGV4T2YoZSkmJih0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLnB1c2goZSksdGhpcy5fcGFuZS5jbGFzc0xpc3QuYWRkKGUpKX0pfV9jbGVhclBhbmVsQ2xhc3Nlcygpe3RoaXMuX3BhbmUmJih0aGlzLl9hcHBsaWVkUGFuZWxDbGFzc2VzLmZvckVhY2godD0+e3RoaXMuX3BhbmUuY2xhc3NMaXN0LnJlbW92ZSh0KX0pLHRoaXMuX2FwcGxpZWRQYW5lbENsYXNzZXM9W10pfV9nZXRPcmlnaW5SZWN0KCl7bGV0IHQ9dGhpcy5fb3JpZ2luO2lmKHQgaW5zdGFuY2VvZiBSZSlyZXR1cm4gdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHQgaW5zdGFuY2VvZiBFbGVtZW50KXJldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBlPXQud2lkdGh8fDAsaT10LmhlaWdodHx8MDtyZXR1cm57dG9wOnQueSxib3R0b206dC55K2ksbGVmdDp0LngscmlnaHQ6dC54K2UsaGVpZ2h0Omksd2lkdGg6ZX19fShlLHRoaXMuX3ZpZXdwb3J0UnVsZXIsdGhpcy5fZG9jdW1lbnQsdGhpcy5fcGxhdGZvcm0sdGhpcy5fb3ZlcmxheUNvbnRhaW5lcil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVmEpLGooSHQpLGoob2kpLGooUnYpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxufSkoKSxiT2U9MCx0cj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKXt0aGlzLnNjcm9sbFN0cmF0ZWdpZXM9ZSx0aGlzLl9vdmVybGF5Q29udGFpbmVyPWksdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPXIsdGhpcy5fcG9zaXRpb25CdWlsZGVyPW8sdGhpcy5fa2V5Ym9hcmREaXNwYXRjaGVyPXMsdGhpcy5faW5qZWN0b3I9YSx0aGlzLl9uZ1pvbmU9bCx0aGlzLl9kb2N1bWVudD1jLHRoaXMuX2RpcmVjdGlvbmFsaXR5PXUsdGhpcy5fbG9jYXRpb249ZCx0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyPXAsdGhpcy5fYW5pbWF0aW9uc01vZHVsZVR5cGU9aH1jcmVhdGUoZSl7bGV0IGk9dGhpcy5fY3JlYXRlSG9zdEVsZW1lbnQoKSxyPXRoaXMuX2NyZWF0ZVBhbmVFbGVtZW50KGkpLG89dGhpcy5fY3JlYXRlUG9ydGFsT3V0bGV0KHIpLHM9bmV3IHNjKGUpO3JldHVybiBzLmRpcmVjdGlvbj1zLmRpcmVjdGlvbnx8dGhpcy5fZGlyZWN0aW9uYWxpdHkudmFsdWUsbmV3IGRkKG8saSxyLHMsdGhpcy5fbmdab25lLHRoaXMuX2tleWJvYXJkRGlzcGF0Y2hlcix0aGlzLl9kb2N1bWVudCx0aGlzLl9sb2NhdGlvbix0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLCJOb29wQW5pbWF0aW9ucyI9PT10aGlzLl9hbmltYXRpb25zTW9kdWxlVHlwZSl9cG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb25CdWlsZGVyfV9jcmVhdGVQYW5lRWxlbWVudChlKXtsZXQgaT10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gaS5pZD0iY2RrLW92ZXJsYXktIitiT2UrKyxpLmNsYXNzTGlzdC5hZGQoImNkay1vdmVybGF5LXBhbmUiKSxlLmFwcGVuZENoaWxkKGkpLGl9X2NyZWF0ZUhvc3RFbGVtZW50KCl7bGV0IGU9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpLmFwcGVuZENoaWxkKGUpLGV9X2NyZWF0ZVBvcnRhbE91dGxldChlKXtyZXR1cm4gdGhpcy5fYXBwUmVmfHwodGhpcy5fYXBwUmVmPXRoaXMuX2luamVjdG9yLmdldChJdSkpLG5ldyBhdyhlLHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcix0aGlzLl9hcHBSZWYsdGhpcy5faW5qZWN0b3IsdGhpcy5fZG9jdW1lbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG1PZSksaihSdiksaihncyksaih5T2UpLGooZ09lKSxqKFhuKSxqKF90KSxqKEh0KSxqKCRpKSxqKGlNKSxqKF9PZSksaihQaSw4KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCkseE9lPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJ0b3AiLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6InRvcCJ9XSxDdGU9bmV3IHBlKCJjZGstY29ubmVjdGVkLW92ZXJsYXktc2Nyb2xsLXN0cmF0ZWd5IiksaWc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsZW1lbnRSZWY9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjZGstb3ZlcmxheS1vcmlnaW4iLCIiXSxbIiIsIm92ZXJsYXktb3JpZ2luIiwiIl0sWyIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIl1dLGV4cG9ydEFzOlsiY2RrT3ZlcmxheU9yaWdpbiJdfSksbn0pKCksUmg9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9kaXI9cyx0aGlzLl9oYXNCYWNrZHJvcD0hMSx0aGlzLl9sb2NrUG9zaXRpb249ITEsdGhpcy5fZ3Jvd0FmdGVyT3Blbj0hMSx0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9ITEsdGhpcy5fcHVzaD0hMSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fZGV0YWNoU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMudmlld3BvcnRNYXJnaW49MCx0aGlzLm9wZW49ITEsdGhpcy5kaXNhYmxlQ2xvc2U9ITEsdGhpcy5iYWNrZHJvcENsaWNrPW5ldyBHLHRoaXMucG9zaXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5hdHRhY2g9bmV3IEcsdGhpcy5kZXRhY2g9bmV3IEcsdGhpcy5vdmVybGF5S2V5ZG93bj1uZXcgRyx0aGlzLm92ZXJsYXlPdXRzaWRlQ2xpY2s9bmV3IEcsdGhpcy5fdGVtcGxhdGVQb3J0YWw9bmV3IGtzKGksciksdGhpcy5fc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5PW8sdGhpcy5zY3JvbGxTdHJhdGVneT10aGlzLl9zY3JvbGxTdHJhdGVneUZhY3RvcnkoKX1nZXQgb2Zmc2V0WCgpe3JldHVybiB0aGlzLl9vZmZzZXRYfXNldCBvZmZzZXRYKGUpe3RoaXMuX29mZnNldFg9ZSx0aGlzLl9wb3NpdGlvbiYmdGhpcy5fdXBkYXRlUG9zaXRpb25TdHJhdGVneSh0aGlzLl9wb3NpdGlvbil9Z2V0IG9mZnNldFkoKXtyZXR1cm4gdGhpcy5fb2Zmc2V0WX1zZXQgb2Zmc2V0WShlKXt0aGlzLl9vZmZzZXRZPWUsdGhpcy5fcG9zaXRpb24mJnRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pfWdldCBoYXNCYWNrZHJvcCgpe3JldHVybiB0aGlzLl9oYXNCYWNrZHJvcH1zZXQgaGFzQmFja2Ryb3AoZSl7dGhpcy5faGFzQmFja2Ryb3A9UnQoZSl9Z2V0IGxvY2tQb3NpdGlvbigpe3JldHVybiB0aGlzLl9sb2NrUG9zaXRpb259c2V0IGxvY2tQb3NpdGlvbihlKXt0aGlzLl9sb2NrUG9zaXRpb249UnQoZSl9Z2V0IGZsZXhpYmxlRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnN9c2V0IGZsZXhpYmxlRGltZW5zaW9ucyhlKXt0aGlzLl9mbGV4aWJsZURpbWVuc2lvbnM9UnQoZSl9Z2V0IGdyb3dBZnRlck9wZW4oKXtyZXR1cm4gdGhpcy5fZ3Jvd0FmdGVyT3Blbn1zZXQgZ3Jvd0FmdGVyT3BlbihlKXt0aGlzLl9ncm93QWZ0ZXJPcGVuPVJ0KGUpfWdldCBwdXNoKCl7cmV0dXJuIHRoaXMuX3B1c2h9c2V0IHB1c2goZSl7dGhpcy5fcHVzaD1SdChlKX1nZXQgb3ZlcmxheVJlZigpe3JldHVybiB0aGlzLl9vdmVybGF5UmVmfWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIn1uZ09uRGVzdHJveSgpe3RoaXMuX2F0dGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2RldGFjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9zaXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9wb3NpdGlvbiYmKHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5fcG9zaXRpb24pLHRoaXMuX292ZXJsYXlSZWYudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy53aWR0aCxtaW5XaWR0aDp0aGlzLm1pbldpZHRoLGhlaWdodDp0aGlzLmhlaWdodCxtaW5IZWlnaHQ6dGhpcy5taW5IZWlnaHR9KSxlLm9yaWdpbiYmdGhpcy5vcGVuJiZ0aGlzLl9wb3NpdGlvbi5hcHBseSgpKSxlLm9wZW4mJih0aGlzLm9wZW4/dGhpcy5fYXR0YWNoT3ZlcmxheSgpOnRoaXMuX2RldGFjaE92ZXJsYXkoKSl9X2NyZWF0ZU92ZXJsYXkoKXsoIXRoaXMucG9zaXRpb25zfHwhdGhpcy5wb3NpdGlvbnMubGVuZ3RoKSYmKHRoaXMucG9zaXRpb25zPXhPZSk7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZj10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9idWlsZENvbmZpZygpKTt0aGlzLl9hdHRhY2hTdWJzY3JpcHRpb249ZS5hdHRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5hdHRhY2guZW1pdCgpKSx0aGlzLl9kZXRhY2hTdWJzY3JpcHRpb249ZS5kZXRhY2htZW50cygpLnN1YnNjcmliZSgoKT0+dGhpcy5kZXRhY2guZW1pdCgpKSxlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheUtleWRvd24ubmV4dChpKSwyNz09PWkua2V5Q29kZSYmIXRoaXMuZGlzYWJsZUNsb3NlJiYha3IoaSkmJihpLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGV0YWNoT3ZlcmxheSgpKX0pLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5zdWJzY3JpYmUoaT0+e3RoaXMub3ZlcmxheU91dHNpZGVDbGljay5uZXh0KGkpfSl9X2J1aWxkQ29uZmlnKCl7bGV0IGU9dGhpcy5fcG9zaXRpb249dGhpcy5wb3NpdGlvblN0cmF0ZWd5fHx0aGlzLl9jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCksaT1uZXcgc2Moe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTplLHNjcm9sbFN0cmF0ZWd5OnRoaXMuc2Nyb2xsU3RyYXRlZ3ksaGFzQmFja2Ryb3A6dGhpcy5oYXNCYWNrZHJvcH0pO3JldHVybih0aGlzLndpZHRofHwwPT09dGhpcy53aWR0aCkmJihpLndpZHRoPXRoaXMud2lkdGgpLCh0aGlzLmhlaWdodHx8MD09PXRoaXMuaGVpZ2h0KSYmKGkuaGVpZ2h0PXRoaXMuaGVpZ2h0KSwodGhpcy5taW5XaWR0aHx8MD09PXRoaXMubWluV2lkdGgpJiYoaS5taW5XaWR0aD10aGlzLm1pbldpZHRoKSwodGhpcy5taW5IZWlnaHR8fDA9PT10aGlzLm1pbkhlaWdodCkmJihpLm1pbkhlaWdodD10aGlzLm1pbkhlaWdodCksdGhpcy5iYWNrZHJvcENsYXNzJiYoaS5iYWNrZHJvcENsYXNzPXRoaXMuYmFja2Ryb3BDbGFzcyksdGhpcy5wYW5lbENsYXNzJiYoaS5wYW5lbENsYXNzPXRoaXMucGFuZWxDbGFzcyksaX1fdXBkYXRlUG9zaXRpb25TdHJhdGVneShlKXtsZXQgaT10aGlzLnBvc2l0aW9ucy5tYXAocj0+KHtvcmlnaW5YOnIub3JpZ2luWCxvcmlnaW5ZOnIub3JpZ2luWSxvdmVybGF5WDpyLm92ZXJsYXlYLG92ZXJsYXlZOnIub3ZlcmxheVksb2Zmc2V0WDpyLm9mZnNldFh8fHRoaXMub2Zmc2V0WCxvZmZzZXRZOnIub2Zmc2V0WXx8dGhpcy5vZmZzZXRZLHBhbmVsQ2xhc3M6ci5wYW5lbENsYXNzfHx2b2lkIDB9KSk7cmV0dXJuIGUuc2V0T3JpZ2luKHRoaXMuX2dldEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneU9yaWdpbigpKS53aXRoUG9zaXRpb25zKGkpLndpdGhGbGV4aWJsZURpbWVuc2lvbnModGhpcy5mbGV4aWJsZURpbWVuc2lvbnMpLndpdGhQdXNoKHRoaXMucHVzaCkud2l0aEdyb3dBZnRlck9wZW4odGhpcy5ncm93QWZ0ZXJPcGVuKS53aXRoVmlld3BvcnRNYXJnaW4odGhpcy52aWV3cG9ydE1hcmdpbikud2l0aExvY2tlZFBvc2l0aW9uKHRoaXMubG9ja1Bvc2l0aW9uKS53aXRoVHJhbnNmb3JtT3JpZ2luT24odGhpcy50cmFuc2Zvcm1PcmlnaW5TZWxlY3Rvcil9X2NyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKXtsZXQgZT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9nZXRGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4oKSk7cmV0dXJuIHRoaXMuX3VwZGF0ZVBvc2l0aW9uU3RyYXRlZ3koZSksZX1fZ2V0RmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luIGluc3RhbmNlb2YgaWc/dGhpcy5vcmlnaW4uZWxlbWVudFJlZjp0aGlzLm9yaWdpbn1fYXR0YWNoT3ZlcmxheSgpe3RoaXMuX292ZXJsYXlSZWY/dGhpcy5fb3ZlcmxheVJlZi5nZXRDb25maWcoKS5oYXNCYWNrZHJvcD10aGlzLmhhc0JhY2tkcm9wOnRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCl8fHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKHRoaXMuX3RlbXBsYXRlUG9ydGFsKSx0aGlzLmhhc0JhY2tkcm9wP3RoaXMuX2JhY2tkcm9wU3Vic2NyaXB0aW9uPXRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZShlPT57dGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoZSl9KTp0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjAmJih0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbj10aGlzLl9wb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMucGlwZShjeCgoKT0+dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoPjApKS5zdWJzY3JpYmUoZT0+e3RoaXMucG9zaXRpb25DaGFuZ2UuZW1pdChlKSwwPT09dGhpcy5wb3NpdGlvbkNoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9wb3NpdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfSkpfV9kZXRhY2hPdmVybGF5KCl7dGhpcy5fb3ZlcmxheVJlZiYmdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLl9iYWNrZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Bvc2l0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0odHIpLE0oVmkpLE0oT2kpLE0oQ3RlKSxNKCRpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrLWNvbm5lY3RlZC1vdmVybGF5IiwiIl0sWyIiLCJjb25uZWN0ZWQtb3ZlcmxheSIsIiJdLFsiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheSIsIiJdXSxpbnB1dHM6e29yaWdpbjpbImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLCJvcmlnaW4iXSxwb3NpdGlvbnM6WyJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwicG9zaXRpb25zIl0scG9zaXRpb25TdHJhdGVneTpbImNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5IiwicG9zaXRpb25TdHJhdGVneSJdLG9mZnNldFg6WyJjZGtDb25uZWN0ZWRPdmVybGF5T2Zmc2V0WCIsIm9mZnNldFgiXSxvZmZzZXRZOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJvZmZzZXRZIl0sd2lkdGg6WyJjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGgiLCJ3aWR0aCJdLGhlaWdodDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIZWlnaHQiLCJoZWlnaHQiXSxtaW5XaWR0aDpbImNka0Nvbm5lY3RlZE92ZXJsYXlNaW5XaWR0aCIsIm1pbldpZHRoIl0sbWluSGVpZ2h0OlsiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbkhlaWdodCIsIm1pbkhlaWdodCJdLGJhY2tkcm9wQ2xhc3M6WyJjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcyIsImJhY2tkcm9wQ2xhc3MiXSxwYW5lbENsYXNzOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJwYW5lbENsYXNzIl0sdmlld3BvcnRNYXJnaW46WyJjZGtDb25uZWN0ZWRPdmVybGF5Vmlld3BvcnRNYXJnaW4iLCJ2aWV3cG9ydE1hcmdpbiJdLHNjcm9sbFN0cmF0ZWd5OlsiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5Iiwic2Nyb2xsU3RyYXRlZ3kiXSxvcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJvcGVuIl0sZGlzYWJsZUNsb3NlOlsiY2RrQ29ubmVjdGVkT3ZlcmxheURpc2FibGVDbG9zZSIsImRpc2FibGVDbG9zZSJdLHRyYW5zZm9ybU9yaWdpblNlbGVjdG9yOlsiY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uIiwidHJhbnNmb3JtT3JpZ2luU2VsZWN0b3IiXSxoYXNCYWNrZHJvcDpbImNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCIsImhhc0JhY2tkcm9wIl0sbG9ja1Bvc2l0aW9uOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImxvY2tQb3NpdGlvbiJdLGZsZXhpYmxlRGltZW5zaW9uczpbImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJmbGV4aWJsZURpbWVuc2lvbnMiXSxncm93QWZ0ZXJPcGVuOlsiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCJncm93QWZ0ZXJPcGVuIl0scHVzaDpbImNka0Nvbm5lY3RlZE92ZXJsYXlQdXNoIiwicHVzaCJdfSxvdXRwdXRzOntiYWNrZHJvcENsaWNrOiJiYWNrZHJvcENsaWNrIixwb3NpdGlvbkNoYW5nZToicG9zaXRpb25DaGFuZ2UiLGF0dGFjaDoiYXR0YWNoIixkZXRhY2g6ImRldGFjaCIsb3ZlcmxheUtleWRvd246Im92ZXJsYXlLZXlkb3duIixvdmVybGF5T3V0c2lkZUNsaWNrOiJvdmVybGF5T3V0c2lkZUNsaWNrIn0sZXhwb3J0QXM6WyJjZGtDb25uZWN0ZWRPdmVybGF5Il0sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLE1PZT17cHJvdmlkZTpDdGUsZGVwczpbdHJdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKCl9fSxzcz0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOlt0cixNT2VdLGltcG9ydHM6W0RoLGV1LFpjLFpjXX0pLG59KSgpO2Z1bmN0aW9uIHdPZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMikoMSwiYnV0dG9uIiwzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLmFjdGlvbigpKX0pLEEoMiksdigpKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygyKSx5dChlLmRhdGEuYWN0aW9uKX19ZnVuY3Rpb24gU09lKG4sdCl7fXZhciB3Mj1uZXcgcGUoIk1hdFNuYWNrQmFyRGF0YSIpLE92PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wb2xpdGVuZXNzPSJhc3NlcnRpdmUiLHRoaXMuYW5ub3VuY2VtZW50TWVzc2FnZT0iIix0aGlzLmR1cmF0aW9uPTAsdGhpcy5kYXRhPW51bGwsdGhpcy5ob3Jpem9udGFsUG9zaXRpb249ImNlbnRlciIsdGhpcy52ZXJ0aWNhbFBvc2l0aW9uPSJib3R0b20ifX0sRU9lPU1hdGgucG93KDIsMzEpLTEscmc9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLl9vdmVybGF5UmVmPWUsdGhpcy5fYWZ0ZXJEaXNtaXNzZWQ9bmV3IGtlLHRoaXMuX2FmdGVyT3BlbmVkPW5ldyBrZSx0aGlzLl9vbkFjdGlvbj1uZXcga2UsdGhpcy5fZGlzbWlzc2VkQnlBY3Rpb249ITEsdGhpcy5jb250YWluZXJJbnN0YW5jZT10LHQuX29uRXhpdC5zdWJzY3JpYmUoKCk9PnRoaXMuX2ZpbmlzaERpc21pc3MoKSl9ZGlzbWlzcygpe3RoaXMuX2FmdGVyRGlzbWlzc2VkLmNsb3NlZHx8dGhpcy5jb250YWluZXJJbnN0YW5jZS5leGl0KCksY2xlYXJUaW1lb3V0KHRoaXMuX2R1cmF0aW9uVGltZW91dElkKX1kaXNtaXNzV2l0aEFjdGlvbigpe3RoaXMuX29uQWN0aW9uLmNsb3NlZHx8KHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSEwLHRoaXMuX29uQWN0aW9uLm5leHQoKSx0aGlzLl9vbkFjdGlvbi5jb21wbGV0ZSgpLHRoaXMuZGlzbWlzcygpKSxjbGVhclRpbWVvdXQodGhpcy5fZHVyYXRpb25UaW1lb3V0SWQpfWNsb3NlV2l0aEFjdGlvbigpe3RoaXMuZGlzbWlzc1dpdGhBY3Rpb24oKX1fZGlzbWlzc0FmdGVyKHQpe3RoaXMuX2R1cmF0aW9uVGltZW91dElkPXNldFRpbWVvdXQoKCk9PnRoaXMuZGlzbWlzcygpLE1hdGgubWluKHQsRU9lKSl9X29wZW4oKXt0aGlzLl9hZnRlck9wZW5lZC5jbG9zZWR8fCh0aGlzLl9hZnRlck9wZW5lZC5uZXh0KCksdGhpcy5fYWZ0ZXJPcGVuZWQuY29tcGxldGUoKSl9X2ZpbmlzaERpc21pc3MoKXt0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl9vbkFjdGlvbi5jbG9zZWR8fHRoaXMuX29uQWN0aW9uLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJEaXNtaXNzZWQubmV4dCh7ZGlzbWlzc2VkQnlBY3Rpb246dGhpcy5fZGlzbWlzc2VkQnlBY3Rpb259KSx0aGlzLl9hZnRlckRpc21pc3NlZC5jb21wbGV0ZSgpLHRoaXMuX2Rpc21pc3NlZEJ5QWN0aW9uPSExfWFmdGVyRGlzbWlzc2VkKCl7cmV0dXJuIHRoaXMuX2FmdGVyRGlzbWlzc2VkfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuY29udGFpbmVySW5zdGFuY2UuX29uRW50ZXJ9b25BY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25BY3Rpb259fSxUT2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc25hY2tCYXJSZWY9ZSx0aGlzLmRhdGE9aX1hY3Rpb24oKXt0aGlzLnNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKCl9Z2V0IGhhc0FjdGlvbigpe3JldHVybiEhdGhpcy5kYXRhLmFjdGlvbn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShyZyksTSh3MikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNpbXBsZS1zbmFjay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtc2ltcGxlLXNuYWNrYmFyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbMSwibWF0LXNpbXBsZS1zbmFjay1iYXItY29udGVudCJdLFsiY2xhc3MiLCJtYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJtYXQtc2ltcGxlLXNuYWNrYmFyLWFjdGlvbiJdLFsibWF0LWJ1dHRvbiIsIiIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNwYW4iLDApLEEoMSksdigpLEUoMix3T2UsMywxLCJkaXYiLDEpKSwyJmUmJihDKDEpLHl0KGkuZGF0YS5tZXNzYWdlKSxDKDEpLHkoIm5nSWYiLGkuaGFzQWN0aW9uKSl9LGRlcGVuZGVuY2llczpbQmUsX25dLHN0eWxlczpbIi5tYXQtc2ltcGxlLXNuYWNrYmFye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bGluZS1oZWlnaHQ6MjBweDtvcGFjaXR5OjF9Lm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue2ZsZXgtc2hyaW5rOjA7bWFyZ2luOi04cHggLThweCAtOHB4IDhweH0ubWF0LXNpbXBsZS1zbmFja2Jhci1hY3Rpb24gYnV0dG9ue21heC1oZWlnaHQ6MzZweDttaW4td2lkdGg6MH1bZGlyPXJ0bF0gLm1hdC1zaW1wbGUtc25hY2tiYXItYWN0aW9ue21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXJpZ2h0OjhweH0ubWF0LXNpbXBsZS1zbmFjay1iYXItY29udGVudHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxET2U9e3NuYWNrQmFyU3RhdGU6S3IoInN0YXRlIixba2koInZvaWQsIGhpZGRlbiIsZ24oe3RyYW5zZm9ybToic2NhbGUoMC44KSIsb3BhY2l0eTowfSkpLGtpKCJ2aXNpYmxlIixnbih7dHJhbnNmb3JtOiJzY2FsZSgxKSIsb3BhY2l0eToxfSkpLExpKCIqID0+IHZpc2libGUiLGppKCIxNTBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxMaSgiKiA9PiB2b2lkLCAqID0+IGhpZGRlbiIsamkoIjc1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKSIsZ24oe29wYWNpdHk6MH0pKSldKX0sQU9lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBQaHtjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fbmdab25lPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fcGxhdGZvcm09byx0aGlzLnNuYWNrQmFyQ29uZmlnPXMsdGhpcy5fYW5ub3VuY2VEZWxheT0xNTAsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uQW5ub3VuY2U9bmV3IGtlLHRoaXMuX29uRXhpdD1uZXcga2UsdGhpcy5fb25FbnRlcj1uZXcga2UsdGhpcy5fYW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuYXR0YWNoRG9tUG9ydGFsPWE9Pnt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBsPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwoYSk7cmV0dXJuIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKSxsfSx0aGlzLl9saXZlPSJhc3NlcnRpdmUiIT09cy5wb2xpdGVuZXNzfHxzLmFubm91bmNlbWVudE1lc3NhZ2U/Im9mZiI9PT1zLnBvbGl0ZW5lc3M/Im9mZiI6InBvbGl0ZSI6ImFzc2VydGl2ZSIsdGhpcy5fcGxhdGZvcm0uRklSRUZPWCYmKCJwb2xpdGUiPT09dGhpcy5fbGl2ZSYmKHRoaXMuX3JvbGU9InN0YXR1cyIpLCJhc3NlcnRpdmUiPT09dGhpcy5fbGl2ZSYmKHRoaXMuX3JvbGU9ImFsZXJ0IikpfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXt0aGlzLl9hc3NlcnROb3RBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hDb21wb25lbnRQb3J0YWwoZSk7cmV0dXJuIHRoaXMuX2FmdGVyUG9ydGFsQXR0YWNoZWQoKSxpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe3RoaXMuX2Fzc2VydE5vdEF0dGFjaGVkKCk7bGV0IGk9dGhpcy5fcG9ydGFsT3V0bGV0LmF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpO3JldHVybiB0aGlzLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksaX1vbkFuaW1hdGlvbkVuZChlKXtsZXR7ZnJvbVN0YXRlOmksdG9TdGF0ZTpyfT1lO2lmKCgidm9pZCI9PT1yJiYidm9pZCIhPT1pfHwiaGlkZGVuIj09PXIpJiZ0aGlzLl9jb21wbGV0ZUV4aXQoKSwidmlzaWJsZSI9PT1yKXtsZXQgbz10aGlzLl9vbkVudGVyO3RoaXMuX25nWm9uZS5ydW4oKCk9PntvLm5leHQoKSxvLmNvbXBsZXRlKCl9KX19ZW50ZXIoKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9hbmltYXRpb25TdGF0ZT0idmlzaWJsZSIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuX3NjcmVlblJlYWRlckFubm91bmNlKCkpfWV4aXQoKXtyZXR1cm4gdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX2FuaW1hdGlvblN0YXRlPSJoaWRkZW4iLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hdC1leGl0IiwiIiksY2xlYXJUaW1lb3V0KHRoaXMuX2Fubm91bmNlVGltZW91dElkKX0pLHRoaXMuX29uRXhpdH1uZ09uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9jb21wbGV0ZUV4aXQoKX1fY29tcGxldGVFeGl0KCl7dGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZShRdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX29uRXhpdC5uZXh0KCksdGhpcy5fb25FeGl0LmNvbXBsZXRlKCl9KX0pfV9hZnRlclBvcnRhbEF0dGFjaGVkKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9dGhpcy5zbmFja0JhckNvbmZpZy5wYW5lbENsYXNzO2kmJihBcnJheS5pc0FycmF5KGkpP2kuZm9yRWFjaChyPT5lLmNsYXNzTGlzdC5hZGQocikpOmUuY2xhc3NMaXN0LmFkZChpKSl9X2Fzc2VydE5vdEF0dGFjaGVkKCl7dGhpcy5fcG9ydGFsT3V0bGV0Lmhhc0F0dGFjaGVkKCl9X3NjcmVlblJlYWRlckFubm91bmNlKCl7dGhpcy5fYW5ub3VuY2VUaW1lb3V0SWR8fHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2Fubm91bmNlVGltZW91dElkPXNldFRpbWVvdXQoKCk9PntsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2FyaWEtaGlkZGVuXSIpLGk9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIlthcmlhLWxpdmVdIik7aWYoZSYmaSl7bGV0IHI9bnVsbDt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmZS5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmKHI9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksZS5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiksaS5hcHBlbmRDaGlsZChlKSxyPy5mb2N1cygpLHRoaXMuX29uQW5ub3VuY2UubmV4dCgpLHRoaXMuX29uQW5ub3VuY2UuY29tcGxldGUoKX19LHRoaXMuX2Fubm91bmNlRGVsYXkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oX3QpLE0oUmUpLE0obm4pLE0ob2kpLE0oT3YpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bix2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGRhLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3BvcnRhbE91dGxldD1yLmZpcnN0KX19LGZlYXR1cmVzOlt0dF19KSxufSkoKSxJT2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEFPZXtfYWZ0ZXJQb3J0YWxBdHRhY2hlZCgpe3N1cGVyLl9hZnRlclBvcnRhbEF0dGFjaGVkKCksImNlbnRlciI9PT10aGlzLnNuYWNrQmFyQ29uZmlnLmhvcml6b250YWxQb3NpdGlvbiYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hdC1zbmFjay1iYXItY2VudGVyIiksInRvcCI9PT10aGlzLnNuYWNrQmFyQ29uZmlnLnZlcnRpY2FsUG9zaXRpb24mJnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCJtYXQtc25hY2stYmFyLXRvcCIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic25hY2stYmFyLWNvbnRhaW5lciJdXSxob3N0QXR0cnM6WzEsIm1hdC1zbmFjay1iYXItY29udGFpbmVyIl0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmlfKCJAc3RhdGUuZG9uZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25BbmltYXRpb25FbmQobyl9KSwyJmUmJnJfKCJAc3RhdGUiLGkuX2FuaW1hdGlvblN0YXRlKX0sZmVhdHVyZXM6W3R0XSxkZWNsczozLHZhcnM6Mixjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWyJjZGtQb3J0YWxPdXRsZXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCksRSgxLFNPZSwwLDAsIm5nLXRlbXBsYXRlIiwxKSx2KCksTygyLCJkaXYiKSksMiZlJiYoQygyKSx6ZSgiYXJpYS1saXZlIixpLl9saXZlKSgicm9sZSIsaS5fcm9sZSkpfSxkZXBlbmRlbmNpZXM6W2RhXSxzdHlsZXM6WyIubWF0LXNuYWNrLWJhci1jb250YWluZXJ7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjI0cHg7bWF4LXdpZHRoOjMzdnc7bWluLXdpZHRoOjM0NHB4O3BhZGRpbmc6MTRweCAxNnB4O21pbi1oZWlnaHQ6NDhweDt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcntib3JkZXI6c29saWQgMXB4fS5tYXQtc25hY2stYmFyLWhhbmRzZXR7d2lkdGg6MTAwJX0ubWF0LXNuYWNrLWJhci1oYW5kc2V0IC5tYXQtc25hY2stYmFyLWNvbnRhaW5lcnttYXJnaW46OHB4O21heC13aWR0aDoxMDAlO21pbi13aWR0aDowO3dpZHRoOjEwMCV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbRE9lLnNuYWNrQmFyU3RhdGVdfX0pLG59KSgpLGtIPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltzcyxldSxNZSxQbixsbixsbl19KSxufSkoKSxNdGU9bmV3IHBlKCJtYXQtc25hY2stYmFyLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IE92fX0pLFJPZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5fbGl2ZT1pLHRoaXMuX2luamVjdG9yPXIsdGhpcy5fYnJlYWtwb2ludE9ic2VydmVyPW8sdGhpcy5fcGFyZW50U25hY2tCYXI9cyx0aGlzLl9kZWZhdWx0Q29uZmlnPWEsdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1udWxsfWdldCBfb3BlbmVkU25hY2tCYXJSZWYoKXtsZXQgZT10aGlzLl9wYXJlbnRTbmFja0JhcjtyZXR1cm4gZT9lLl9vcGVuZWRTbmFja0JhclJlZjp0aGlzLl9zbmFja0JhclJlZkF0VGhpc0xldmVsfXNldCBfb3BlbmVkU25hY2tCYXJSZWYoZSl7dGhpcy5fcGFyZW50U25hY2tCYXI/dGhpcy5fcGFyZW50U25hY2tCYXIuX29wZW5lZFNuYWNrQmFyUmVmPWU6dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbD1lfW9wZW5Gcm9tQ29tcG9uZW50KGUsaSl7cmV0dXJuIHRoaXMuX2F0dGFjaChlLGkpfW9wZW5Gcm9tVGVtcGxhdGUoZSxpKXtyZXR1cm4gdGhpcy5fYXR0YWNoKGUsaSl9b3BlbihlLGk9IiIscil7bGV0IG89ey4uLnRoaXMuX2RlZmF1bHRDb25maWcsLi4ucn07cmV0dXJuIG8uZGF0YT17bWVzc2FnZTplLGFjdGlvbjppfSxvLmFubm91bmNlbWVudE1lc3NhZ2U9PT1lJiYoby5hbm5vdW5jZW1lbnRNZXNzYWdlPXZvaWQgMCksdGhpcy5vcGVuRnJvbUNvbXBvbmVudCh0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50LG8pfWRpc21pc3MoKXt0aGlzLl9vcGVuZWRTbmFja0JhclJlZiYmdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuZGlzbWlzcygpfW5nT25EZXN0cm95KCl7dGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCYmdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCl9X2F0dGFjaFNuYWNrQmFyQ29udGFpbmVyKGUsaSl7bGV0IG89WG4uY3JlYXRlKHtwYXJlbnQ6aSYmaS52aWV3Q29udGFpbmVyUmVmJiZpLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3J8fHRoaXMuX2luamVjdG9yLHByb3ZpZGVyczpbe3Byb3ZpZGU6T3YsdXNlVmFsdWU6aX1dfSkscz1uZXcgJGModGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxpLnZpZXdDb250YWluZXJSZWYsbyksYT1lLmF0dGFjaChzKTtyZXR1cm4gYS5pbnN0YW5jZS5zbmFja0JhckNvbmZpZz1pLGEuaW5zdGFuY2V9X2F0dGFjaChlLGkpe2xldCByPXsuLi5uZXcgT3YsLi4udGhpcy5fZGVmYXVsdENvbmZpZywuLi5pfSxvPXRoaXMuX2NyZWF0ZU92ZXJsYXkocikscz10aGlzLl9hdHRhY2hTbmFja0JhckNvbnRhaW5lcihvLHIpLGE9bmV3IHJnKHMsbyk7aWYoZSBpbnN0YW5jZW9mIFZpKXtsZXQgbD1uZXcga3MoZSxudWxsLHskaW1wbGljaXQ6ci5kYXRhLHNuYWNrQmFyUmVmOmF9KTthLmluc3RhbmNlPXMuYXR0YWNoVGVtcGxhdGVQb3J0YWwobCl9ZWxzZXtsZXQgbD10aGlzLl9jcmVhdGVJbmplY3RvcihyLGEpLGM9bmV3ICRjKGUsdm9pZCAwLGwpLHU9cy5hdHRhY2hDb21wb25lbnRQb3J0YWwoYyk7YS5pbnN0YW5jZT11Lmluc3RhbmNlfXJldHVybiB0aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSIpLnBpcGUoc3Qoby5kZXRhY2htZW50cygpKSkuc3Vic2NyaWJlKGw9PntvLm92ZXJsYXlFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUodGhpcy5oYW5kc2V0Q3NzQ2xhc3MsbC5tYXRjaGVzKX0pLHIuYW5ub3VuY2VtZW50TWVzc2FnZSYmcy5fb25Bbm5vdW5jZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9saXZlLmFubm91bmNlKHIuYW5ub3VuY2VtZW50TWVzc2FnZSxyLnBvbGl0ZW5lc3MpfSksdGhpcy5fYW5pbWF0ZVNuYWNrQmFyKGEsciksdGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9YSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZn1fYW5pbWF0ZVNuYWNrQmFyKGUsaSl7ZS5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuX29wZW5lZFNuYWNrQmFyUmVmPT1lJiYodGhpcy5fb3BlbmVkU25hY2tCYXJSZWY9bnVsbCksaS5hbm5vdW5jZW1lbnRNZXNzYWdlJiZ0aGlzLl9saXZlLmNsZWFyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZj8odGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCk9PntlLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCl9KSx0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCkpOmUuY29udGFpbmVySW5zdGFuY2UuZW50ZXIoKSxpLmR1cmF0aW9uJiZpLmR1cmF0aW9uPjAmJmUuYWZ0ZXJPcGVuZWQoKS5zdWJzY3JpYmUoKCk9PmUuX2Rpc21pc3NBZnRlcihpLmR1cmF0aW9uKSl9X2NyZWF0ZU92ZXJsYXkoZSl7bGV0IGk9bmV3IHNjO2kuZGlyZWN0aW9uPWUuZGlyZWN0aW9uO2xldCByPXRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxvPSJydGwiPT09ZS5kaXJlY3Rpb24scz0ibGVmdCI9PT1lLmhvcml6b250YWxQb3NpdGlvbnx8InN0YXJ0Ij09PWUuaG9yaXpvbnRhbFBvc2l0aW9uJiYhb3x8ImVuZCI9PT1lLmhvcml6b250YWxQb3NpdGlvbiYmbyxhPSFzJiYiY2VudGVyIiE9PWUuaG9yaXpvbnRhbFBvc2l0aW9uO3JldHVybiBzP3IubGVmdCgiMCIpOmE/ci5yaWdodCgiMCIpOnIuY2VudGVySG9yaXpvbnRhbGx5KCksInRvcCI9PT1lLnZlcnRpY2FsUG9zaXRpb24/ci50b3AoIjAiKTpyLmJvdHRvbSgiMCIpLGkucG9zaXRpb25TdHJhdGVneT1yLHRoaXMuX292ZXJsYXkuY3JlYXRlKGkpfV9jcmVhdGVJbmplY3RvcihlLGkpe3JldHVybiBYbi5jcmVhdGUoe3BhcmVudDplJiZlLnZpZXdDb250YWluZXJSZWYmJmUudmlld0NvbnRhaW5lclJlZi5pbmplY3Rvcnx8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOlt7cHJvdmlkZTpyZyx1c2VWYWx1ZTppfSx7cHJvdmlkZTp3Mix1c2VWYWx1ZTplLmRhdGF9XX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHRyKSxqKHR3KSxqKFhuKSxqKEptKSxqKG4sMTIpLGooTXRlKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksd3RlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBST2V7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEpe3N1cGVyKGUsaSxyLG8scyxhKSx0aGlzLnNpbXBsZVNuYWNrQmFyQ29tcG9uZW50PVRPZSx0aGlzLnNuYWNrQmFyQ29udGFpbmVyQ29tcG9uZW50PUlPZSx0aGlzLmhhbmRzZXRDc3NDbGFzcz0ibWF0LXNuYWNrLWJhci1oYW5kc2V0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaih0ciksaih0dyksaihYbiksaihKbSksaihuLDEyKSxqKE10ZSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOmtIfSksbn0pKCksT09lPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxFdGU9IlxcdTAwMDAtXFx1MDAyMFxcdTAwN2YtXFx1MDA5ZiIsRk9lPW5ldyBSZWdFeHAoIig/OlthLXpBLVpdW2EtekEtWjAtOSsuLV17Mix9OlxcL1xcL3xkYXRhOnx3d3dcXC4pW15cXHMiK0V0ZSsnIl17Mix9W15cXHMnK0V0ZSsiXCInKX1cXF0sOjsuIT9dIiwiZ3UiKTtmdW5jdGlvbiBEdGUobil7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7dC5mbGFncy5pbmNsdWRlcygiZyIpfHwodD1uZXcgUmVnRXhwKHQsdC5mbGFncysiZyIpKTtsZXQgZT1bXSxpPTA7Zm9yKGxldCByIG9mIG4ubWF0Y2hBbGwodCkpe2xldCBvPXIuaW5kZXgscz1yWzBdO28+aSYmZS5wdXNoKHtpbmRleDppLHRleHQ6bi5zdWJzdHJpbmcoaSxvKSxtYXRjaGVzUmVnZXg6ITF9KSxlLnB1c2goe2luZGV4Om8sdGV4dDpzLG1hdGNoZXNSZWdleDohMH0pLGk9bytzLmxlbmd0aH1yZXR1cm4gbi5sZW5ndGg+aSYmZS5wdXNoKHtpbmRleDppLHRleHQ6bi5zdWJzdHJpbmcoaSxuLmxlbmd0aCksbWF0Y2hlc1JlZ2V4OiExfSksZX0obixGT2UpLm1hcCgoe21hdGNoZXNSZWdleDp0LHRleHQ6ZX0pPT4oe2lzVVJMOnQsdGV4dDplfSkpfWZ1bmN0aW9uIE5PZShuLHQpe2lmKDEmbiYmKHNuKDApLEEoMSksYW4oKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0O0MoMSksamUoIiAiLGUudGV4dCwiICIpfX1mdW5jdGlvbiBMT2Uobix0KXtpZigxJm4mJihfKDAsImEiLDcpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7WmkoImhyZWYiLGUudGV4dCx6bCksQygxKSx5dChlLnRleHQpfX1mdW5jdGlvbiBCT2Uobix0KXtpZigxJm4mJihzbigwKSxFKDEsTk9lLDIsMSwibmctY29udGFpbmVyIiw1KSxFKDIsTE9lLDIsMiwibmctdGVtcGxhdGUiLG51bGwsNixxdCksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPSRlKDMpO0MoMSkseSgibmdJZiIsIWUuaXNVUkwpKCJuZ0lmRWxzZSIsaSl9fWZ1bmN0aW9uIFZPZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImJ1dHRvbiIsOCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkFjdGlvbkJ1dHRvbkNsaWNrZWQoKSl9KSxBKDEpLHYoKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLGplKCIgIixlLmFsZXJ0LmZvbGxvd3VwQWN0aW9uLmxvY2FsaXplZExhYmVsLCIgIil9fXZhciBBdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5zbmFja0JhclJlZj1lLHRoaXMudW5rbm93bkRhdGE9aSx0aGlzLnN0b3JlPXIsdGhpcy5zcGxpdEJ5VVJMPUR0ZSx0aGlzLmFsZXJ0PWl9YXN5bmMgb25BY3Rpb25CdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCk7bGV0IGU9YXdhaXQgdGhpcy5hbGVydC5mb2xsb3d1cEFjdGlvbi5nZXRGb2xsb3d1cEFjdGlvbih0aGlzLnN0b3JlKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGUpfW9uQ2xvc2VCdXR0b25DbGlja2VkKCl7dGhpcy5zbmFja0JhclJlZi5kaXNtaXNzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0ocmcpLE0odzIpLE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJhbGVydC1kaXNwbGF5LXNuYWNrYmFyIl1dLGRlY2xzOjYsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gY2xvc2UgdGhlIHNuYWNrYmFyIG1lc3NhZ2XikJ9lYTRkOWZlNjE0MjBhM2ZjZTgxY2Y1NGM0YzYxNWUzYzE5YzY0NmE24pCfMTUzNjA4NzUxOTc0MzcwNzM2MjpEaXNtaXNzYCxbWzEsIm1lc3NhZ2UiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtYnV0dG9uIiwiIiwiY2xhc3MiLCJmb2xsb3d1cC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJkaXNtaXNzLWJ1dHRvbiIsMywiY2xpY2siXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsaW5rUGllY2UiLCIiXSxbInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLDMsImhyZWYiXSxbIm1hdC1idXR0b24iLCIiLDEsImZvbGxvd3VwLWJ1dHRvbiIsMywiY2xpY2siXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApLEUoMSxCT2UsNCwyLCJuZy1jb250YWluZXIiLDEpLHYoKSxfKDIsImRpdiIsMiksRSgzLFZPZSwyLDEsImJ1dHRvbiIsMyksXyg0LCJidXR0b24iLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VCdXR0b25DbGlja2VkKCl9KSxBKDUsIiBEaXNtaXNzICIpLHYoKSgpKSwyJmUmJihDKDEpLHkoIm5nRm9yT2YiLGkuc3BsaXRCeVVSTChpLmFsZXJ0LmxvY2FsaXplZE1lc3NhZ2UpKSxDKDIpLHkoIm5nSWYiLGkuYWxlcnQuZm9sbG93dXBBY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltkbixCZSxfbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbjo1cHggMDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6aW5oZXJpdH0uY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tbGVmdDphdXRvfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSXRlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5zbmFja0Jhcj1pLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9bmdPbkluaXQoKXt0aGlzLnN0b3JlLnNlbGVjdChxJCkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFllKGU9PkJvb2xlYW4oZSkpKS5zdWJzY3JpYmUoZT0+e3RoaXMuc2hvd0FsZXJ0KGUpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXNob3dBbGVydChlKXt0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KEF0ZSx7ZHVyYXRpb246NWUzLGhvcml6b250YWxQb3NpdGlvbjoic3RhcnQiLHZlcnRpY2FsUG9zaXRpb246ImJvdHRvbSIsZGF0YTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0od3RlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYWxlcnQtc25hY2tiYXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFMyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxQbixrSF19KSxufSkoKSxFMj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbSnUsUzIsd3IuZm9yRmVhdHVyZSgiYWxlcnRzIixVZWUpLHJvLmZvckZlYXR1cmUoW0hlZV0pXX0pLG59KSgpO2Z1bmN0aW9uIFVPZShuLHQpe312YXIgb2c9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuY2xvc2VPbk5hdmlnYXRpb249ITAsdGhpcy5jbG9zZU9uRGVzdHJveT0hMH19LE5IPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBQaHtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2ZvY3VzVHJhcEZhY3Rvcnk9aSx0aGlzLl9jb25maWc9byx0aGlzLl9pbnRlcmFjdGl2aXR5Q2hlY2tlcj1zLHRoaXMuX25nWm9uZT1hLHRoaXMuX292ZXJsYXlSZWY9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZD1udWxsLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwsdGhpcy5hdHRhY2hEb21Qb3J0YWw9dT0+e3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCBkPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hEb21Qb3J0YWwodSk7cmV0dXJuIHRoaXMuX2NvbnRlbnRBdHRhY2hlZCgpLGR9LHRoaXMuX2FyaWFMYWJlbGxlZEJ5PXRoaXMuX2NvbmZpZy5hcmlhTGFiZWxsZWRCeXx8bnVsbCx0aGlzLl9kb2N1bWVudD1yfV9jb250ZW50QXR0YWNoZWQoKXt0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCksdGhpcy5faGFuZGxlQmFja2Ryb3BDbGlja3MoKSx0aGlzLl9jYXB0dXJlSW5pdGlhbEZvY3VzKCl9X2NhcHR1cmVJbml0aWFsRm9jdXMoKXt0aGlzLl90cmFwRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Jlc3RvcmVGb2N1cygpfWF0dGFjaENvbXBvbmVudFBvcnRhbChlKXt0aGlzLl9wb3J0YWxPdXRsZXQuaGFzQXR0YWNoZWQoKTtsZXQgaT10aGlzLl9wb3J0YWxPdXRsZXQuYXR0YWNoQ29tcG9uZW50UG9ydGFsKGUpO3JldHVybiB0aGlzLl9jb250ZW50QXR0YWNoZWQoKSxpfWF0dGFjaFRlbXBsYXRlUG9ydGFsKGUpe3RoaXMuX3BvcnRhbE91dGxldC5oYXNBdHRhY2hlZCgpO2xldCBpPXRoaXMuX3BvcnRhbE91dGxldC5hdHRhY2hUZW1wbGF0ZVBvcnRhbChlKTtyZXR1cm4gdGhpcy5fY29udGVudEF0dGFjaGVkKCksaX1fcmVjYXB0dXJlRm9jdXMoKXt0aGlzLl9jb250YWluc0ZvY3VzKCl8fHRoaXMuX3RyYXBGb2N1cygpfV9mb3JjZUZvY3VzKGUsaSl7dGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNGb2N1c2FibGUoZSl8fChlLnRhYkluZGV4PS0xLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2xldCByPSgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsciksZS5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9O2UuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsciksZS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHIpfSkpLGUuZm9jdXMoaSl9X2ZvY3VzQnlDc3NTZWxlY3RvcihlLGkpe2xldCByPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGUpO3ImJnRoaXMuX2ZvcmNlRm9jdXMocixpKX1fdHJhcEZvY3VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3N3aXRjaCh0aGlzLl9jb25maWcuYXV0b0ZvY3VzKXtjYXNlITE6Y2FzZSJkaWFsb2ciOnRoaXMuX2NvbnRhaW5zRm9jdXMoKXx8ZS5mb2N1cygpO2JyZWFrO2Nhc2UhMDpjYXNlImZpcnN0LXRhYmJhYmxlIjp0aGlzLl9mb2N1c1RyYXAuZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpLnRoZW4oaT0+e2l8fHRoaXMuX2ZvY3VzRGlhbG9nQ29udGFpbmVyKCl9KTticmVhaztjYXNlImZpcnN0LWhlYWRpbmciOnRoaXMuX2ZvY3VzQnlDc3NTZWxlY3RvcignaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgW3JvbGU9ImhlYWRpbmciXScpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fZm9jdXNCeUNzc1NlbGVjdG9yKHRoaXMuX2NvbmZpZy5hdXRvRm9jdXMpfX1fcmVzdG9yZUZvY3VzKCl7bGV0IGU9dGhpcy5fY29uZmlnLnJlc3RvcmVGb2N1cyxpPW51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlP2k9dGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKToiYm9vbGVhbiI9PXR5cGVvZiBlP2k9ZT90aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZDpudWxsOmUmJihpPWUpLHRoaXMuX2NvbmZpZy5yZXN0b3JlRm9jdXMmJmkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmZvY3VzKXtsZXQgcj1LTSgpLG89dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Oyghcnx8cj09PXRoaXMuX2RvY3VtZW50LmJvZHl8fHI9PT1vfHxvLmNvbnRhaW5zKHIpKSYmKHRoaXMuX2ZvY3VzTW9uaXRvcj8odGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKGksdGhpcy5fY2xvc2VJbnRlcmFjdGlvblR5cGUpLHRoaXMuX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPW51bGwpOmkuZm9jdXMoKSl9dGhpcy5fZm9jdXNUcmFwJiZ0aGlzLl9mb2N1c1RyYXAuZGVzdHJveSgpfV9mb2N1c0RpYWxvZ0NvbnRhaW5lcigpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyYmdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9X2NvbnRhaW5zRm9jdXMoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaT1LTSgpO3JldHVybiBlPT09aXx8ZS5jb250YWlucyhpKX1faW5pdGlhbGl6ZUZvY3VzVHJhcCgpe3RoaXMuX2ZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLHRoaXMuX2RvY3VtZW50JiYodGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ9S00oKSl9X2hhbmRsZUJhY2tkcm9wQ2xpY2tzKCl7dGhpcy5fb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5fY29uZmlnLmRpc2FibGVDbG9zZSYmdGhpcy5fcmVjYXB0dXJlRm9jdXMoKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEpNKSxNKEh0LDgpLE0ob2cpLE0oU3YpLE0oX3QpLE0oZGQpLE0oRnIpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjZGstZGlhbG9nLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGRhLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3BvcnRhbE91dGxldD1yLmZpcnN0KX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsImNkay1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJpZCIsaS5fY29uZmlnLmlkfHxudWxsKSgicm9sZSIsaS5fY29uZmlnLnJvbGUpKCJhcmlhLW1vZGFsIixpLl9jb25maWcuYXJpYU1vZGFsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLl9jb25maWcuYXJpYUxhYmVsP251bGw6aS5fYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWxhYmVsIixpLl9jb25maWcuYXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsaS5fY29uZmlnLmFyaWFEZXNjcmliZWRCeXx8bnVsbCl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFVPZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltkYV0sc3R5bGVzOlsiLmNkay1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OmluaGVyaXQ7bWF4LWhlaWdodDppbmhlcml0fSJdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGx3PWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5vdmVybGF5UmVmPXQsdGhpcy5jb25maWc9ZSx0aGlzLmNsb3NlZD1uZXcga2UsdGhpcy5kaXNhYmxlQ2xvc2U9ZS5kaXNhYmxlQ2xvc2UsdGhpcy5iYWNrZHJvcENsaWNrPXQuYmFja2Ryb3BDbGljaygpLHRoaXMua2V5ZG93bkV2ZW50cz10LmtleWRvd25FdmVudHMoKSx0aGlzLm91dHNpZGVQb2ludGVyRXZlbnRzPXQub3V0c2lkZVBvaW50ZXJFdmVudHMoKSx0aGlzLmlkPWUuaWQsdGhpcy5rZXlkb3duRXZlbnRzLnN1YnNjcmliZShpPT57Mjc9PT1pLmtleUNvZGUmJiF0aGlzLmRpc2FibGVDbG9zZSYmIWtyKGkpJiYoaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2Uodm9pZCAwLHtmb2N1c09yaWdpbjoia2V5Ym9hcmQifSkpfSksdGhpcy5iYWNrZHJvcENsaWNrLnN1YnNjcmliZSgoKT0+e3RoaXMuZGlzYWJsZUNsb3NlfHx0aGlzLmNsb3NlKHZvaWQgMCx7Zm9jdXNPcmlnaW46Im1vdXNlIn0pfSl9Y2xvc2UodCxlKXtpZih0aGlzLmNvbnRhaW5lckluc3RhbmNlKXtsZXQgaT10aGlzLmNsb3NlZDt0aGlzLmNvbnRhaW5lckluc3RhbmNlLl9jbG9zZUludGVyYWN0aW9uVHlwZT1lPy5mb2N1c09yaWdpbnx8InByb2dyYW0iLHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCksaS5uZXh0KHQpLGkuY29tcGxldGUoKSx0aGlzLmNvbXBvbmVudEluc3RhbmNlPXRoaXMuY29udGFpbmVySW5zdGFuY2U9bnVsbH19dXBkYXRlUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDp0LGhlaWdodDplfSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLm92ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMub3ZlcmxheVJlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9fSxQdGU9bmV3IHBlKCJEaWFsb2dTY3JvbGxTdHJhdGVneSIpLHpPZT1uZXcgcGUoIkRpYWxvZ0RhdGEiKSxqT2U9bmV3IHBlKCJEZWZhdWx0RGlhbG9nQ29uZmlnIiksV09lPXtwcm92aWRlOlB0ZSxkZXBzOlt0cl0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCl9fSxxT2U9MCxMSD0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXt0aGlzLl9vdmVybGF5PWUsdGhpcy5faW5qZWN0b3I9aSx0aGlzLl9kZWZhdWx0T3B0aW9ucz1yLHRoaXMuX3BhcmVudERpYWxvZz1vLHRoaXMuX292ZXJsYXlDb250YWluZXI9cyx0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsPVtdLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw9bmV3IGtlLHRoaXMuX2FmdGVyT3BlbmVkQXRUaGlzTGV2ZWw9bmV3IGtlLHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cz1uZXcgTWFwLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9UWEoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKHpuKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBvcGVuRGlhbG9ncygpe3JldHVybiB0aGlzLl9wYXJlbnREaWFsb2c/dGhpcy5fcGFyZW50RGlhbG9nLm9wZW5EaWFsb2dzOnRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWx9Z2V0IGFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cuYWZ0ZXJPcGVuZWQ6dGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbH1vcGVuKGUsaSl7KGk9ey4uLnRoaXMuX2RlZmF1bHRPcHRpb25zfHxuZXcgb2csLi4uaX0pLmlkPWkuaWR8fCJjZGstZGlhbG9nLSIrcU9lKyssaS5pZCYmdGhpcy5nZXREaWFsb2dCeUlkKGkuaWQpO2xldCBvPXRoaXMuX2dldE92ZXJsYXlDb25maWcoaSkscz10aGlzLl9vdmVybGF5LmNyZWF0ZShvKSxhPW5ldyBsdyhzLGkpLGw9dGhpcy5fYXR0YWNoQ29udGFpbmVyKHMsYSxpKTtyZXR1cm4gYS5jb250YWluZXJJbnN0YW5jZT1sLHRoaXMuX2F0dGFjaERpYWxvZ0NvbnRlbnQoZSxhLGwsaSksdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGh8fHRoaXMuX2hpZGVOb25EaWFsb2dDb250ZW50RnJvbUFzc2lzdGl2ZVRlY2hub2xvZ3koKSx0aGlzLm9wZW5EaWFsb2dzLnB1c2goYSksYS5jbG9zZWQuc3Vic2NyaWJlKCgpPT50aGlzLl9yZW1vdmVPcGVuRGlhbG9nKGEsITApKSx0aGlzLmFmdGVyT3BlbmVkLm5leHQoYSksYX1jbG9zZUFsbCgpe0ZIKHRoaXMub3BlbkRpYWxvZ3MsZT0+ZS5jbG9zZSgpKX1nZXREaWFsb2dCeUlkKGUpe3JldHVybiB0aGlzLm9wZW5EaWFsb2dzLmZpbmQoaT0+aS5pZD09PWUpfW5nT25EZXN0cm95KCl7RkgodGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbCxlPT57ITE9PT1lLmNvbmZpZy5jbG9zZU9uRGVzdHJveSYmdGhpcy5fcmVtb3ZlT3BlbkRpYWxvZyhlLCExKX0pLEZIKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwsZT0+ZS5jbG9zZSgpKSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsLmNvbXBsZXRlKCksdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbC5jb21wbGV0ZSgpLHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWw9W119X2dldE92ZXJsYXlDb25maWcoZSl7bGV0IGk9bmV3IHNjKHtwb3NpdGlvblN0cmF0ZWd5OmUucG9zaXRpb25TdHJhdGVneXx8dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmdsb2JhbCgpLmNlbnRlckhvcml6b250YWxseSgpLmNlbnRlclZlcnRpY2FsbHkoKSxzY3JvbGxTdHJhdGVneTplLnNjcm9sbFN0cmF0ZWd5fHx0aGlzLl9zY3JvbGxTdHJhdGVneSgpLHBhbmVsQ2xhc3M6ZS5wYW5lbENsYXNzLGhhc0JhY2tkcm9wOmUuaGFzQmFja2Ryb3AsZGlyZWN0aW9uOmUuZGlyZWN0aW9uLG1pbldpZHRoOmUubWluV2lkdGgsbWluSGVpZ2h0OmUubWluSGVpZ2h0LG1heFdpZHRoOmUubWF4V2lkdGgsbWF4SGVpZ2h0OmUubWF4SGVpZ2h0LHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LGRpc3Bvc2VPbk5hdmlnYXRpb246ZS5jbG9zZU9uTmF2aWdhdGlvbn0pO3JldHVybiBlLmJhY2tkcm9wQ2xhc3MmJihpLmJhY2tkcm9wQ2xhc3M9ZS5iYWNrZHJvcENsYXNzKSxpfV9hdHRhY2hDb250YWluZXIoZSxpLHIpe2xldCBhLG89ci5pbmplY3Rvcnx8ci52aWV3Q29udGFpbmVyUmVmPy5pbmplY3RvcixzPVt7cHJvdmlkZTpvZyx1c2VWYWx1ZTpyfSx7cHJvdmlkZTpsdyx1c2VWYWx1ZTppfSx7cHJvdmlkZTpkZCx1c2VWYWx1ZTplfV07ci5jb250YWluZXI/ImZ1bmN0aW9uIj09dHlwZW9mIHIuY29udGFpbmVyP2E9ci5jb250YWluZXI6KGE9ci5jb250YWluZXIudHlwZSxzLnB1c2goLi4uci5jb250YWluZXIucHJvdmlkZXJzKHIpKSk6YT1OSDtsZXQgbD1uZXcgJGMoYSxyLnZpZXdDb250YWluZXJSZWYsWG4uY3JlYXRlKHtwYXJlbnQ6b3x8dGhpcy5faW5qZWN0b3IscHJvdmlkZXJzOnN9KSxyLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcik7cmV0dXJuIGUuYXR0YWNoKGwpLmluc3RhbmNlfV9hdHRhY2hEaWFsb2dDb250ZW50KGUsaSxyLG8pe2lmKGUgaW5zdGFuY2VvZiBWaSl7bGV0IHM9dGhpcy5fY3JlYXRlSW5qZWN0b3IobyxpLHIsdm9pZCAwKSxhPXskaW1wbGljaXQ6by5kYXRhLGRpYWxvZ1JlZjppfTtvLnRlbXBsYXRlQ29udGV4dCYmKGE9ey4uLmEsLi4uImZ1bmN0aW9uIj09dHlwZW9mIG8udGVtcGxhdGVDb250ZXh0P28udGVtcGxhdGVDb250ZXh0KCk6by50ZW1wbGF0ZUNvbnRleHR9KSxyLmF0dGFjaFRlbXBsYXRlUG9ydGFsKG5ldyBrcyhlLG51bGwsYSxzKSl9ZWxzZXtsZXQgcz10aGlzLl9jcmVhdGVJbmplY3RvcihvLGkscix0aGlzLl9pbmplY3RvciksYT1yLmF0dGFjaENvbXBvbmVudFBvcnRhbChuZXcgJGMoZSxvLnZpZXdDb250YWluZXJSZWYscyxvLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikpO2kuY29tcG9uZW50SW5zdGFuY2U9YS5pbnN0YW5jZX19X2NyZWF0ZUluamVjdG9yKGUsaSxyLG8pe2xldCBzPWUuaW5qZWN0b3J8fGUudmlld0NvbnRhaW5lclJlZj8uaW5qZWN0b3IsYT1be3Byb3ZpZGU6ek9lLHVzZVZhbHVlOmUuZGF0YX0se3Byb3ZpZGU6bHcsdXNlVmFsdWU6aX1dO3JldHVybiBlLnByb3ZpZGVycyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLnByb3ZpZGVycz9hLnB1c2goLi4uZS5wcm92aWRlcnMoaSxlLHIpKTphLnB1c2goLi4uZS5wcm92aWRlcnMpKSxlLmRpcmVjdGlvbiYmKCFzfHwhcy5nZXQoJGksbnVsbCxkaS5PcHRpb25hbCkpJiZhLnB1c2goe3Byb3ZpZGU6JGksdXNlVmFsdWU6e3ZhbHVlOmUuZGlyZWN0aW9uLGNoYW5nZTpYdCgpfX0pLFhuLmNyZWF0ZSh7cGFyZW50OnN8fG8scHJvdmlkZXJzOmF9KX1fcmVtb3ZlT3BlbkRpYWxvZyhlLGkpe2xldCByPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZihlKTtyPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UociwxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8KHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChvLHMpPT57bz9zLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLG8pOnMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpfSksdGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLmNsZWFyKCksaSYmdGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpKX1faGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpe2xldCBlPXRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO2lmKGUucGFyZW50RWxlbWVudCl7bGV0IGk9ZS5wYXJlbnRFbGVtZW50LmNoaWxkcmVuO2ZvcihsZXQgcj1pLmxlbmd0aC0xO3I+LTE7ci0tKXtsZXQgbz1pW3JdO28hPT1lJiYiU0NSSVBUIiE9PW8ubm9kZU5hbWUmJiJTVFlMRSIhPT1vLm5vZGVOYW1lJiYhby5oYXNBdHRyaWJ1dGUoImFyaWEtbGl2ZSIpJiYodGhpcy5fYXJpYUhpZGRlbkVsZW1lbnRzLnNldChvLG8uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKSxvLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIikpfX19X2dldEFmdGVyQWxsQ2xvc2VkKCl7bGV0IGU9dGhpcy5fcGFyZW50RGlhbG9nO3JldHVybiBlP2UuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaih0ciksaihYbiksaihqT2UsOCksaihuLDEyKSxqKFJ2KSxqKFB0ZSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpO2Z1bmN0aW9uIEZIKG4sdCl7bGV0IGU9bi5sZW5ndGg7Zm9yKDtlLS07KXQobltlXSl9dmFyIFJ0ZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltMSCxXT2VdLGltcG9ydHM6W3NzLGV1LEV2LGV1XX0pLG59KSgpO2Z1bmN0aW9uIFlPZShuLHQpe312YXIga3Y9e3BhcmFtczp7ZW50ZXJBbmltYXRpb25EdXJhdGlvbjoiMTUwbXMiLGV4aXRBbmltYXRpb25EdXJhdGlvbjoiNzVtcyJ9fSxYT2U9e2RpYWxvZ0NvbnRhaW5lcjpLcigiZGlhbG9nQ29udGFpbmVyIixba2koInZvaWQsIGV4aXQiLGduKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJzY2FsZSgwLjcpIn0pKSxraSgiZW50ZXIiLGduKHt0cmFuc2Zvcm06Im5vbmUifSkpLExpKCIqID0+IGVudGVyIix4NShbamkoInt7ZW50ZXJBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixnbih7dHJhbnNmb3JtOiJub25lIixvcGFjaXR5OjF9KSksSW0oIkAqIixBbSgpLHtvcHRpb25hbDohMH0pXSksa3YpLExpKCIqID0+IHZvaWQsICogPT4gZXhpdCIseDUoW2ppKCJ7e2V4aXRBbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKSIsZ24oe29wYWNpdHk6MH0pKSxJbSgiQCoiLEFtKCkse29wdGlvbmFsOiEwfSldKSxrdildKX0sRnY9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnJvbGU9ImRpYWxvZyIsdGhpcy5wYW5lbENsYXNzPSIiLHRoaXMuaGFzQmFja2Ryb3A9ITAsdGhpcy5iYWNrZHJvcENsYXNzPSIiLHRoaXMuZGlzYWJsZUNsb3NlPSExLHRoaXMud2lkdGg9IiIsdGhpcy5oZWlnaHQ9IiIsdGhpcy5tYXhXaWR0aD0iODB2dyIsdGhpcy5kYXRhPW51bGwsdGhpcy5hcmlhRGVzY3JpYmVkQnk9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFNb2RhbD0hMCx0aGlzLmF1dG9Gb2N1cz0iZmlyc3QtdGFiYmFibGUiLHRoaXMucmVzdG9yZUZvY3VzPSEwLHRoaXMuZGVsYXlGb2N1c1RyYXA9ITAsdGhpcy5jbG9zZU9uTmF2aWdhdGlvbj0hMCx0aGlzLmVudGVyQW5pbWF0aW9uRHVyYXRpb249a3YucGFyYW1zLmVudGVyQW5pbWF0aW9uRHVyYXRpb24sdGhpcy5leGl0QW5pbWF0aW9uRHVyYXRpb249a3YucGFyYW1zLmV4aXRBbmltYXRpb25EdXJhdGlvbn19LFFPZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTkh7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlLGkscixvLHMsYSxsLGMpLHRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZD1uZXcgR31fY2FwdHVyZUluaXRpYWxGb2N1cygpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcHx8dGhpcy5fdHJhcEZvY3VzKCl9X29wZW5BbmltYXRpb25Eb25lKGUpe3RoaXMuX2NvbmZpZy5kZWxheUZvY3VzVHJhcCYmdGhpcy5fdHJhcEZvY3VzKCksdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJvcGVuZWQiLHRvdGFsVGltZTplfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSk0pLE0oSHQsOCksTShGdiksTShTdiksTShfdCksTShkZCksTShGcikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxmZWF0dXJlczpbdHRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxLT2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFFPZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSl7c3VwZXIoZSxpLHIsbyxzLGEsbCx1KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1jLHRoaXMuX3N0YXRlPSJlbnRlciJ9X29uQW5pbWF0aW9uRG9uZSh7dG9TdGF0ZTplLHRvdGFsVGltZTppfSl7ImVudGVyIj09PWU/dGhpcy5fb3BlbkFuaW1hdGlvbkRvbmUoaSk6ImV4aXQiPT09ZSYmdGhpcy5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLm5leHQoe3N0YXRlOiJjbG9zZWQiLHRvdGFsVGltZTppfSl9X29uQW5pbWF0aW9uU3RhcnQoe3RvU3RhdGU6ZSx0b3RhbFRpbWU6aX0peyJlbnRlciI9PT1lP3RoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToib3BlbmluZyIsdG90YWxUaW1lOml9KTooImV4aXQiPT09ZXx8InZvaWQiPT09ZSkmJnRoaXMuX2FuaW1hdGlvblN0YXRlQ2hhbmdlZC5uZXh0KHtzdGF0ZToiY2xvc2luZyIsdG90YWxUaW1lOml9KX1fc3RhcnRFeGl0QW5pbWF0aW9uKCl7dGhpcy5fc3RhdGU9ImV4aXQiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9nZXRBbmltYXRpb25TdGF0ZSgpe3JldHVybnt2YWx1ZTp0aGlzLl9zdGF0ZSxwYXJhbXM6e2VudGVyQW5pbWF0aW9uRHVyYXRpb246dGhpcy5fY29uZmlnLmVudGVyQW5pbWF0aW9uRHVyYXRpb258fGt2LnBhcmFtcy5lbnRlckFuaW1hdGlvbkR1cmF0aW9uLGV4aXRBbmltYXRpb25EdXJhdGlvbjp0aGlzLl9jb25maWcuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufHxrdi5wYXJhbXMuZXhpdEFuaW1hdGlvbkR1cmF0aW9ufX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSk0pLE0oSHQsOCksTShGdiksTShTdiksTShfdCksTShkZCksTShubiksTShGcikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1kaWFsb2ctY29udGFpbmVyIl1dLGhvc3RBdHRyczpbInRhYmluZGV4IiwiLTEiLDEsIm1hdC1kaWFsb2ctY29udGFpbmVyIl0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJmlfKCJAZGlhbG9nQ29udGFpbmVyLnN0YXJ0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25BbmltYXRpb25TdGFydChvKX0pKCJAZGlhbG9nQ29udGFpbmVyLmRvbmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbkFuaW1hdGlvbkRvbmUobyl9KSwyJmUmJihfcygiaWQiLGkuX2NvbmZpZy5pZCksemUoImFyaWEtbW9kYWwiLGkuX2NvbmZpZy5hcmlhTW9kYWwpKCJyb2xlIixpLl9jb25maWcucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsaS5fY29uZmlnLmFyaWFMYWJlbD9udWxsOmkuX2FyaWFMYWJlbGxlZEJ5KSgiYXJpYS1sYWJlbCIsaS5fY29uZmlnLmFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGkuX2NvbmZpZy5hcmlhRGVzY3JpYmVkQnl8fG51bGwpLHJfKCJAZGlhbG9nQ29udGFpbmVyIixpLl9nZXRBbmltYXRpb25TdGF0ZSgpKSl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbImNka1BvcnRhbE91dGxldCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLFlPZSwwLDAsIm5nLXRlbXBsYXRlIiwwKX0sZGVwZW5kZW5jaWVzOltkYV0sc3R5bGVzOlsiLm1hdC1kaWFsb2ctY29udGFpbmVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoyNHB4O2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzphdXRvO291dGxpbmU6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6aW5oZXJpdDttYXgtaGVpZ2h0OmluaGVyaXR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWRpYWxvZy1jb250YWluZXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1kaWFsb2ctY29udGVudHtkaXNwbGF5OmJsb2NrO21hcmdpbjowIC0yNHB4O3BhZGRpbmc6MCAyNHB4O21heC1oZWlnaHQ6NjV2aDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5tYXQtZGlhbG9nLXRpdGxle21hcmdpbjowIDAgMjBweDtkaXNwbGF5OmJsb2NrfS5tYXQtZGlhbG9nLWFjdGlvbnN7cGFkZGluZzo4cHggMDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLWhlaWdodDo1MnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmNvbnRlbnQtYm94O21hcmdpbi1ib3R0b206LTI0cHh9Lm1hdC1kaWFsb2ctYWN0aW9ucy5tYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyLC5tYXQtZGlhbG9nLWFjdGlvbnNbYWxpZ249Y2VudGVyXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5tYXQtZGlhbG9nLWFjdGlvbnMubWF0LWRpYWxvZy1hY3Rpb25zLWFsaWduLWVuZCwubWF0LWRpYWxvZy1hY3Rpb25zW2FsaWduPWVuZF17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1idXR0b24tYmFzZSsubWF0LWJ1dHRvbi1iYXNlLC5tYXQtZGlhbG9nLWFjdGlvbnMgLm1hdC1tZGMtYnV0dG9uLWJhc2UrLm1hdC1tZGMtYnV0dG9uLWJhc2V7bWFyZ2luLWxlZnQ6OHB4fVtkaXI9cnRsXSAubWF0LWRpYWxvZy1hY3Rpb25zIC5tYXQtYnV0dG9uLWJhc2UrLm1hdC1idXR0b24tYmFzZSxbZGlyPXJ0bF0gLm1hdC1kaWFsb2ctYWN0aW9ucyAubWF0LW1kYy1idXR0b24tYmFzZSsubWF0LW1kYy1idXR0b24tYmFzZXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDo4cHh9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbWE9lLmRpYWxvZ0NvbnRhaW5lcl19fSksbn0pKCksdHU9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMuX3JlZj10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlPWksdGhpcy5fYWZ0ZXJPcGVuZWQ9bmV3IGtlLHRoaXMuX2JlZm9yZUNsb3NlZD1uZXcga2UsdGhpcy5fc3RhdGU9MCx0aGlzLmRpc2FibGVDbG9zZT1lLmRpc2FibGVDbG9zZSx0aGlzLmlkPXQuaWQsaS5fYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLnBpcGUoWWUocj0+Im9wZW5lZCI9PT1yLnN0YXRlKSxRdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fYWZ0ZXJPcGVuZWQubmV4dCgpLHRoaXMuX2FmdGVyT3BlbmVkLmNvbXBsZXRlKCl9KSxpLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShZZShyPT4iY2xvc2VkIj09PXIuc3RhdGUpLFF0KDEpKS5zdWJzY3JpYmUoKCk9PntjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VGYWxsYmFja1RpbWVvdXQpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSx0Lm92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0aGlzLl9yZXN1bHQpLHRoaXMuX2JlZm9yZUNsb3NlZC5jb21wbGV0ZSgpLHRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCl9KSxKdCh0aGlzLmJhY2tkcm9wQ2xpY2soKSx0aGlzLmtleWRvd25FdmVudHMoKS5waXBlKFllKHI9PjI3PT09ci5rZXlDb2RlJiYhdGhpcy5kaXNhYmxlQ2xvc2UmJiFrcihyKSkpKS5zdWJzY3JpYmUocj0+e3RoaXMuZGlzYWJsZUNsb3NlfHwoci5wcmV2ZW50RGVmYXVsdCgpLE90ZSh0aGlzLCJrZXlkb3duIj09PXIudHlwZT8ia2V5Ym9hcmQiOiJtb3VzZSIpKX0pfWNsb3NlKHQpe3RoaXMuX3Jlc3VsdD10LHRoaXMuX2NvbnRhaW5lckluc3RhbmNlLl9hbmltYXRpb25TdGF0ZUNoYW5nZWQucGlwZShZZShlPT4iY2xvc2luZyI9PT1lLnN0YXRlKSxRdCgxKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl9iZWZvcmVDbG9zZWQubmV4dCh0KSx0aGlzLl9iZWZvcmVDbG9zZWQuY29tcGxldGUoKSx0aGlzLl9yZWYub3ZlcmxheVJlZi5kZXRhY2hCYWNrZHJvcCgpLHRoaXMuX2Nsb3NlRmFsbGJhY2tUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuX2ZpbmlzaERpYWxvZ0Nsb3NlKCksZS50b3RhbFRpbWUrMTAwKX0pLHRoaXMuX3N0YXRlPTEsdGhpcy5fY29udGFpbmVySW5zdGFuY2UuX3N0YXJ0RXhpdEFuaW1hdGlvbigpfWFmdGVyT3BlbmVkKCl7cmV0dXJuIHRoaXMuX2FmdGVyT3BlbmVkfWFmdGVyQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX3JlZi5jbG9zZWR9YmVmb3JlQ2xvc2VkKCl7cmV0dXJuIHRoaXMuX2JlZm9yZUNsb3NlZH1iYWNrZHJvcENsaWNrKCl7cmV0dXJuIHRoaXMuX3JlZi5iYWNrZHJvcENsaWNrfWtleWRvd25FdmVudHMoKXtyZXR1cm4gdGhpcy5fcmVmLmtleWRvd25FdmVudHN9dXBkYXRlUG9zaXRpb24odCl7bGV0IGU9dGhpcy5fcmVmLmNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5O3JldHVybiB0JiYodC5sZWZ0fHx0LnJpZ2h0KT90LmxlZnQ/ZS5sZWZ0KHQubGVmdCk6ZS5yaWdodCh0LnJpZ2h0KTplLmNlbnRlckhvcml6b250YWxseSgpLHQmJih0LnRvcHx8dC5ib3R0b20pP3QudG9wP2UudG9wKHQudG9wKTplLmJvdHRvbSh0LmJvdHRvbSk6ZS5jZW50ZXJWZXJ0aWNhbGx5KCksdGhpcy5fcmVmLnVwZGF0ZVBvc2l0aW9uKCksdGhpc311cGRhdGVTaXplKHQ9IiIsZT0iIil7cmV0dXJuIHRoaXMuX3JlZi51cGRhdGVTaXplKHQsZSksdGhpc31hZGRQYW5lbENsYXNzKHQpe3JldHVybiB0aGlzLl9yZWYuYWRkUGFuZWxDbGFzcyh0KSx0aGlzfXJlbW92ZVBhbmVsQ2xhc3ModCl7cmV0dXJuIHRoaXMuX3JlZi5yZW1vdmVQYW5lbENsYXNzKHQpLHRoaXN9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fc3RhdGV9X2ZpbmlzaERpYWxvZ0Nsb3NlKCl7dGhpcy5fc3RhdGU9Mix0aGlzLl9yZWYuY2xvc2UodGhpcy5fcmVzdWx0LHtmb2N1c09yaWdpbjp0aGlzLl9jbG9zZUludGVyYWN0aW9uVHlwZX0pLHRoaXMuY29tcG9uZW50SW5zdGFuY2U9bnVsbH19O2Z1bmN0aW9uIE90ZShuLHQsZSl7cmV0dXJuIG4uX2Nsb3NlSW50ZXJhY3Rpb25UeXBlPXQsbi5jbG9zZShlKX12YXIgY3c9bmV3IHBlKCJNYXREaWFsb2dEYXRhIiksWk9lPW5ldyBwZSgibWF0LWRpYWxvZy1kZWZhdWx0LW9wdGlvbnMiKSxrdGU9bmV3IHBlKCJtYXQtZGlhbG9nLXNjcm9sbC1zdHJhdGVneSIpLCRPZT17cHJvdmlkZTprdGUsZGVwczpbdHJdLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuKCk9Pm4uc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpfX0sZWtlPTAsdGtlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCl7dGhpcy5fb3ZlcmxheT1lLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fcGFyZW50RGlhbG9nPW8sdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3I9bCx0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlPWMsdGhpcy5fZGlhbG9nRGF0YVRva2VuPXUsdGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbD1bXSx0aGlzLl9hZnRlckFsbENsb3NlZEF0VGhpc0xldmVsPW5ldyBrZSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsPW5ldyBrZSx0aGlzLl9pZFByZWZpeD0ibWF0LWRpYWxvZy0iLHRoaXMuYWZ0ZXJBbGxDbG9zZWQ9UWEoKCk9PnRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoP3RoaXMuX2dldEFmdGVyQWxsQ2xvc2VkKCk6dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5waXBlKHpuKHZvaWQgMCkpKSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hLHRoaXMuX2RpYWxvZz1pLmdldChMSCl9Z2V0IG9wZW5EaWFsb2dzKCl7cmV0dXJuIHRoaXMuX3BhcmVudERpYWxvZz90aGlzLl9wYXJlbnREaWFsb2cub3BlbkRpYWxvZ3M6dGhpcy5fb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbH1nZXQgYWZ0ZXJPcGVuZWQoKXtyZXR1cm4gdGhpcy5fcGFyZW50RGlhbG9nP3RoaXMuX3BhcmVudERpYWxvZy5hZnRlck9wZW5lZDp0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsfV9nZXRBZnRlckFsbENsb3NlZCgpe2xldCBlPXRoaXMuX3BhcmVudERpYWxvZztyZXR1cm4gZT9lLl9nZXRBZnRlckFsbENsb3NlZCgpOnRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWx9b3BlbihlLGkpe2xldCByOyhpPXsuLi50aGlzLl9kZWZhdWx0T3B0aW9uc3x8bmV3IEZ2LC4uLml9KS5pZD1pLmlkfHxgJHt0aGlzLl9pZFByZWZpeH0ke2VrZSsrfWAsaS5zY3JvbGxTdHJhdGVneT1pLnNjcm9sbFN0cmF0ZWd5fHx0aGlzLl9zY3JvbGxTdHJhdGVneSgpO2xldCBvPXRoaXMuX2RpYWxvZy5vcGVuKGUsey4uLmkscG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCkuY2VudGVySG9yaXpvbnRhbGx5KCkuY2VudGVyVmVydGljYWxseSgpLGRpc2FibGVDbG9zZTohMCxjbG9zZU9uRGVzdHJveTohMSxjb250YWluZXI6e3R5cGU6dGhpcy5fZGlhbG9nQ29udGFpbmVyVHlwZSxwcm92aWRlcnM6KCk9Plt7cHJvdmlkZTpGdix1c2VWYWx1ZTppfSx7cHJvdmlkZTpvZyx1c2VWYWx1ZTppfV19LHRlbXBsYXRlQ29udGV4dDooKT0+KHtkaWFsb2dSZWY6cn0pLHByb3ZpZGVyczoocyxhLGwpPT4ocj1uZXcgdGhpcy5fZGlhbG9nUmVmQ29uc3RydWN0b3IocyxpLGwpLHIudXBkYXRlUG9zaXRpb24oaT8ucG9zaXRpb24pLFt7cHJvdmlkZTp0aGlzLl9kaWFsb2dDb250YWluZXJUeXBlLHVzZVZhbHVlOmx9LHtwcm92aWRlOnRoaXMuX2RpYWxvZ0RhdGFUb2tlbix1c2VWYWx1ZTphLmRhdGF9LHtwcm92aWRlOnRoaXMuX2RpYWxvZ1JlZkNvbnN0cnVjdG9yLHVzZVZhbHVlOnJ9XSl9KTtyZXR1cm4gci5jb21wb25lbnRJbnN0YW5jZT1vLmNvbXBvbmVudEluc3RhbmNlLHRoaXMub3BlbkRpYWxvZ3MucHVzaChyKSx0aGlzLmFmdGVyT3BlbmVkLm5leHQociksci5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKT0+e2xldCBzPXRoaXMub3BlbkRpYWxvZ3MuaW5kZXhPZihyKTtzPi0xJiYodGhpcy5vcGVuRGlhbG9ncy5zcGxpY2UocywxKSx0aGlzLm9wZW5EaWFsb2dzLmxlbmd0aHx8dGhpcy5fZ2V0QWZ0ZXJBbGxDbG9zZWQoKS5uZXh0KCkpfSkscn1jbG9zZUFsbCgpe3RoaXMuX2Nsb3NlRGlhbG9ncyh0aGlzLm9wZW5EaWFsb2dzKX1nZXREaWFsb2dCeUlkKGUpe3JldHVybiB0aGlzLm9wZW5EaWFsb2dzLmZpbmQoaT0+aS5pZD09PWUpfW5nT25EZXN0cm95KCl7dGhpcy5fY2xvc2VEaWFsb2dzKHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwpLHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKSx0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCl9X2Nsb3NlRGlhbG9ncyhlKXtsZXQgaT1lLmxlbmd0aDtmb3IoO2ktLTspZVtpXS5jbG9zZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7bmwoKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx2bD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgdGtle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyl7c3VwZXIoZSxpLG8sYSxsLHMsdHUsS09lLGN3LGMpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHRyKSxqKFhuKSxqKGlNLDgpLGooWk9lLDgpLGooa3RlKSxqKG4sMTIpLGooUnYpLGooUGksOCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLG5rZT0wLFQyPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy5fZWxlbWVudFJlZj1pLHRoaXMuX2RpYWxvZz1yLHRoaXMudHlwZT0iYnV0dG9uIn1uZ09uSW5pdCgpe3RoaXMuZGlhbG9nUmVmfHwodGhpcy5kaWFsb2dSZWY9TnRlKHRoaXMuX2VsZW1lbnRSZWYsdGhpcy5fZGlhbG9nLm9wZW5EaWFsb2dzKSl9bmdPbkNoYW5nZXMoZSl7bGV0IGk9ZS5fbWF0RGlhbG9nQ2xvc2V8fGUuX21hdERpYWxvZ0Nsb3NlUmVzdWx0O2kmJih0aGlzLmRpYWxvZ1Jlc3VsdD1pLmN1cnJlbnRWYWx1ZSl9X29uQnV0dG9uQ2xpY2soZSl7T3RlKHRoaXMuZGlhbG9nUmVmLDA9PT1lLnNjcmVlblgmJjA9PT1lLnNjcmVlblk/ImtleWJvYXJkIjoibW91c2UiLHRoaXMuZGlhbG9nUmVzdWx0KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0dSw4KSxNKFJlKSxNKHZsKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiXSxbIiIsIm1hdERpYWxvZ0Nsb3NlIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uQnV0dG9uQ2xpY2sobyl9KSwyJmUmJnplKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoInR5cGUiLGkudHlwZSl9LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLHR5cGU6InR5cGUiLGRpYWxvZ1Jlc3VsdDpbIm1hdC1kaWFsb2ctY2xvc2UiLCJkaWFsb2dSZXN1bHQiXSxfbWF0RGlhbG9nQ2xvc2U6WyJtYXREaWFsb2dDbG9zZSIsIl9tYXREaWFsb2dDbG9zZSJdfSxleHBvcnRBczpbIm1hdERpYWxvZ0Nsb3NlIl0sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLEZ0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9kaWFsb2dSZWY9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fZGlhbG9nPXIsdGhpcy5pZD0ibWF0LWRpYWxvZy10aXRsZS0iK25rZSsrfW5nT25Jbml0KCl7dGhpcy5fZGlhbG9nUmVmfHwodGhpcy5fZGlhbG9nUmVmPU50ZSh0aGlzLl9lbGVtZW50UmVmLHRoaXMuX2RpYWxvZy5vcGVuRGlhbG9ncykpLHRoaXMuX2RpYWxvZ1JlZiYmUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMuX2RpYWxvZ1JlZi5fY29udGFpbmVySW5zdGFuY2U7ZSYmIWUuX2FyaWFMYWJlbGxlZEJ5JiYoZS5fYXJpYUxhYmVsbGVkQnk9dGhpcy5pZCl9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0dSw4KSxNKFJlKSxNKHZsKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctdGl0bGUiLCIiXSxbIiIsIm1hdERpYWxvZ1RpdGxlIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy10aXRsZSJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZfcygiaWQiLGkuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9LGV4cG9ydEFzOlsibWF0RGlhbG9nVGl0bGUiXX0pLG59KSgpLEQyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXQtZGlhbG9nLWNvbnRlbnQiLCIiXSxbIm1hdC1kaWFsb2ctY29udGVudCJdLFsiIiwibWF0RGlhbG9nQ29udGVudCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1kaWFsb2ctY29udGVudCJdfSksbn0pKCksQTI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWxpZ249InN0YXJ0In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1kaWFsb2ctYWN0aW9ucyIsIiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIl0sWyIiLCJtYXREaWFsb2dBY3Rpb25zIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LWRpYWxvZy1hY3Rpb25zIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tY2VudGVyIiwiY2VudGVyIj09PWkuYWxpZ24pKCJtYXQtZGlhbG9nLWFjdGlvbnMtYWxpZ24tZW5kIiwiZW5kIj09PWkuYWxpZ24pfSxpbnB1dHM6e2FsaWduOiJhbGlnbiJ9fSksbn0pKCk7ZnVuY3Rpb24gTnRlKG4sdCl7bGV0IGU9bi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtlJiYhZS5jbGFzc0xpc3QuY29udGFpbnMoIm1hdC1kaWFsb2ctY29udGFpbmVyIik7KWU9ZS5wYXJlbnRFbGVtZW50O3JldHVybiBlP3QuZmluZChpPT5pLmlkPT09ZS5pZCk6bnVsbH12YXIgT2g9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbdmwsJE9lXSxpbXBvcnRzOltSdGUsc3MsZXUsbG4sbG5dfSksbn0pKCksaWtlPVsiY29ubmVjdGlvbkNvbnRhaW5lciJdLHJrZT1bImlucHV0Q29udGFpbmVyIl0sb2tlPVsibGFiZWwiXTtmdW5jdGlvbiBza2Uobix0KXsxJm4mJihzbigwKSxfKDEsImRpdiIsMTQpLE8oMiwiZGl2IiwxNSkoMywiZGl2IiwxNikoNCwiZGl2IiwxNyksdigpLF8oNSwiZGl2IiwxOCksTyg2LCJkaXYiLDE1KSg3LCJkaXYiLDE2KSg4LCJkaXYiLDE3KSx2KCksYW4oKSl9ZnVuY3Rpb24gYWtlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxOSksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS51cGRhdGVPdXRsaW5lR2FwKCkpfSksVm4oMSwxKSx2KCl9MiZuJiZ5KCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwib3V0bGluZSIhPVMoKS5hcHBlYXJhbmNlKX1mdW5jdGlvbiBsa2Uobix0KXtpZigxJm4mJihzbigwKSxWbigxLDIpLF8oMiwic3BhbiIpLEEoMyksdigpLGFuKCkpLDImbil7bGV0IGU9UygyKTtDKDMpLHl0KGUuX2NvbnRyb2wucGxhY2Vob2xkZXIpfX1mdW5jdGlvbiBja2Uobix0KXsxJm4mJlZuKDAsMyxbIipuZ1N3aXRjaENhc2UiLCJ0cnVlIl0pfWZ1bmN0aW9uIHVrZShuLHQpezEmbiYmKF8oMCwic3BhbiIsMjMpLEEoMSwiICoiKSx2KCkpfWZ1bmN0aW9uIGRrZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImxhYmVsIiwyMCwyMSksUCgiY2RrT2JzZXJ2ZUNvbnRlbnQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS51cGRhdGVPdXRsaW5lR2FwKCkpfSksRSgyLGxrZSw0LDEsIm5nLWNvbnRhaW5lciIsMTIpLEUoMyxja2UsMSwwLCJuZy1jb250ZW50IiwxMiksRSg0LHVrZSwyLDAsInNwYW4iLDIyKSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7ZXQoIm1hdC1lbXB0eSIsZS5fY29udHJvbC5lbXB0eSYmIWUuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1lbXB0eSIsZS5fY29udHJvbC5lbXB0eSYmIWUuX3Nob3VsZEFsd2F5c0Zsb2F0KCkpKCJtYXQtYWNjZW50IiwiYWNjZW50Ij09ZS5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PWUuY29sb3IpLHkoImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJvdXRsaW5lIiE9ZS5hcHBlYXJhbmNlKSgiaWQiLGUuX2xhYmVsSWQpKCJuZ1N3aXRjaCIsZS5faGFzTGFiZWwoKSksemUoImZvciIsZS5fY29udHJvbC5pZCkoImFyaWEtb3ducyIsZS5fY29udHJvbC5pZCksQygyKSx5KCJuZ1N3aXRjaENhc2UiLCExKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsITApLEMoMSkseSgibmdJZiIsIWUuaGlkZVJlcXVpcmVkTWFya2VyJiZlLl9jb250cm9sLnJlcXVpcmVkJiYhZS5fY29udHJvbC5kaXNhYmxlZCl9fWZ1bmN0aW9uIHBrZShuLHQpezEmbiYmKF8oMCwiZGl2IiwyNCksVm4oMSw0KSx2KCkpfWZ1bmN0aW9uIGhrZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyNSksTygxLCJzcGFuIiwyNiksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLGV0KCJtYXQtYWNjZW50IiwiYWNjZW50Ij09ZS5jb2xvcikoIm1hdC13YXJuIiwid2FybiI9PWUuY29sb3IpfX1mdW5jdGlvbiBma2Uobix0KXsxJm4mJihfKDAsImRpdiIpLFZuKDEsNSksdigpKSwyJm4mJnkoIkB0cmFuc2l0aW9uTWVzc2FnZXMiLFMoKS5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGUpfWZ1bmN0aW9uIG1rZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwzMCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTt5KCJpZCIsZS5faGludExhYmVsSWQpLEMoMSkseXQoZS5oaW50TGFiZWwpfX1mdW5jdGlvbiBna2Uobix0KXtpZigxJm4mJihfKDAsImRpdiIsMjcpLEUoMSxta2UsMiwyLCJkaXYiLDI4KSxWbigyLDYpLE8oMywiZGl2IiwyOSksVm4oNCw3KSx2KCkpLDImbil7bGV0IGU9UygpO3koIkB0cmFuc2l0aW9uTWVzc2FnZXMiLGUuX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlKSxDKDEpLHkoIm5nSWYiLGUuaGludExhYmVsKX19dmFyIF9rZT1bIioiLFtbIiIsIm1hdFByZWZpeCIsIiJdXSxbWyJtYXQtcGxhY2Vob2xkZXIiXV0sW1sibWF0LWxhYmVsIl1dLFtbIiIsIm1hdFN1ZmZpeCIsIiJdXSxbWyJtYXQtZXJyb3IiXV0sW1sibWF0LWhpbnQiLDMsImFsaWduIiwiZW5kIl1dLFtbIm1hdC1oaW50IiwiYWxpZ24iLCJlbmQiXV1dLHZrZT1bIioiLCJbbWF0UHJlZml4XSIsIm1hdC1wbGFjZWhvbGRlciIsIm1hdC1sYWJlbCIsIlttYXRTdWZmaXhdIiwibWF0LWVycm9yIiwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pIiwibWF0LWhpbnRbYWxpZ249J2VuZCddIl0seWtlPTAsVnRlPW5ldyBwZSgiTWF0RXJyb3IiKSxIdGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaWQ9Im1hdC1lcnJvci0iK3lrZSsrLGV8fGkubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtbGl2ZSIsInBvbGl0ZSIpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKSh2bygiYXJpYS1saXZlIiksTShSZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtZXJyb3IiXV0saG9zdEF0dHJzOlsiYXJpYS1hdG9taWMiLCJ0cnVlIiwxLCJtYXQtZXJyb3IiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoImlkIixpLmlkKX0saW5wdXRzOntpZDoiaWQifSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlZ0ZSx1c2VFeGlzdGluZzpufV0pXX0pLG59KSgpLGJrZT17dHJhbnNpdGlvbk1lc3NhZ2VzOktyKCJ0cmFuc2l0aW9uTWVzc2FnZXMiLFtraSgiZW50ZXIiLGduKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDAlKSJ9KSksTGkoInZvaWQgPT4gZW50ZXIiLFtnbih7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtNXB4KSJ9KSxqaSgiMzAwbXMgY3ViaWMtYmV6aWVyKDAuNTUsIDAsIDAuNTUsIDAuMikiKV0pXSl9LGtoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpufSksbn0pKCkseGtlPW5ldyBwZSgiTWF0SGludCIpLE52PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtbGFiZWwiXV19KSxufSkoKSxDa2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wbGFjZWhvbGRlciJdXX0pLG59KSgpLE1rZT1uZXcgcGUoIk1hdFByZWZpeCIpLHdrZT1uZXcgcGUoIk1hdFN1ZmZpeCIpLEx0ZT0wLEVrZT1rbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSwicHJpbWFyeSIpLFRrZT1uZXcgcGUoIk1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUyIpLHNnPW5ldyBwZSgiTWF0Rm9ybUZpZWxkIikscGQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEVrZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX2Rpcj1yLHRoaXMuX2RlZmF1bHRzPW8sdGhpcy5fcGxhdGZvcm09cyx0aGlzLl9uZ1pvbmU9YSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IGtlLHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcj0hMSx0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMSx0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZT0iIix0aGlzLl9oaW50TGFiZWw9IiIsdGhpcy5faGludExhYmVsSWQ9Im1hdC1oaW50LSIrTHRlKyssdGhpcy5fbGFiZWxJZD0ibWF0LWZvcm0tZmllbGQtbGFiZWwtIitMdGUrKyx0aGlzLmZsb2F0TGFiZWw9dGhpcy5fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpLHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkPSJOb29wQW5pbWF0aW9ucyIhPT1sLHRoaXMuYXBwZWFyYW5jZT1vPy5hcHBlYXJhbmNlfHwibGVnYWN5IixvJiYodGhpcy5faGlkZVJlcXVpcmVkTWFya2VyPUJvb2xlYW4oby5oaWRlUmVxdWlyZWRNYXJrZXIpLG8uY29sb3ImJih0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPW8uY29sb3IpKX1nZXQgYXBwZWFyYW5jZSgpe3JldHVybiB0aGlzLl9hcHBlYXJhbmNlfXNldCBhcHBlYXJhbmNlKGUpe2xldCBpPXRoaXMuX2FwcGVhcmFuY2U7dGhpcy5fYXBwZWFyYW5jZT1lfHx0aGlzLl9kZWZhdWx0cz8uYXBwZWFyYW5jZXx8ImxlZ2FjeSIsIm91dGxpbmUiPT09dGhpcy5fYXBwZWFyYW5jZSYmaSE9PWUmJih0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCl9Z2V0IGhpZGVSZXF1aXJlZE1hcmtlcigpe3JldHVybiB0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXJ9c2V0IGhpZGVSZXF1aXJlZE1hcmtlcihlKXt0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXI9UnQoZSl9X3Nob3VsZEFsd2F5c0Zsb2F0KCl7cmV0dXJuImFsd2F5cyI9PT10aGlzLmZsb2F0TGFiZWwmJiF0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZX1fY2FuTGFiZWxGbG9hdCgpe3JldHVybiJuZXZlciIhPT10aGlzLmZsb2F0TGFiZWx9Z2V0IGhpbnRMYWJlbCgpe3JldHVybiB0aGlzLl9oaW50TGFiZWx9c2V0IGhpbnRMYWJlbChlKXt0aGlzLl9oaW50TGFiZWw9ZSx0aGlzLl9wcm9jZXNzSGludHMoKX1nZXQgZmxvYXRMYWJlbCgpe3JldHVybiJsZWdhY3kiIT09dGhpcy5hcHBlYXJhbmNlJiYibmV2ZXIiPT09dGhpcy5fZmxvYXRMYWJlbD8iYXV0byI6dGhpcy5fZmxvYXRMYWJlbH1zZXQgZmxvYXRMYWJlbChlKXtlIT09dGhpcy5fZmxvYXRMYWJlbCYmKHRoaXMuX2Zsb2F0TGFiZWw9ZXx8dGhpcy5fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1nZXQgX2NvbnRyb2woKXtyZXR1cm4gdGhpcy5fZXhwbGljaXRGb3JtRmllbGRDb250cm9sfHx0aGlzLl9jb250cm9sTm9uU3RhdGljfHx0aGlzLl9jb250cm9sU3RhdGljfXNldCBfY29udHJvbChlKXt0aGlzLl9leHBsaWNpdEZvcm1GaWVsZENvbnRyb2w9ZX1nZXRMYWJlbElkKCl7cmV0dXJuIHRoaXMuX2hhc0Zsb2F0aW5nTGFiZWwoKT90aGlzLl9sYWJlbElkOm51bGx9Z2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpe3JldHVybiB0aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmfHx0aGlzLl9lbGVtZW50UmVmfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3ZhbGlkYXRlQ29udHJvbENoaWxkKCk7bGV0IGU9dGhpcy5fY29udHJvbDtlLmNvbnRyb2xUeXBlJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChgbWF0LWZvcm0tZmllbGQtdHlwZS0ke2UuY29udHJvbFR5cGV9YCksZS5zdGF0ZUNoYW5nZXMucGlwZSh6bihudWxsKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGUubmdDb250cm9sJiZlLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMmJmUubmdDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZE9uU3RhYmxlJiZ0aGlzLnVwZGF0ZU91dGxpbmVHYXAoKX0pfSksSnQodGhpcy5fcHJlZml4Q2hpbGRyZW4uY2hhbmdlcyx0aGlzLl9zdWZmaXhDaGlsZHJlbi5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLHRoaXMuX2hpbnRDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoem4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Byb2Nlc3NIaW50cygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZXJyb3JDaGlsZHJlbi5jaGFuZ2VzLnBpcGUoem4obnVsbCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksdGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZT90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PnRoaXMudXBkYXRlT3V0bGluZUdhcCgpKX0pOnRoaXMudXBkYXRlT3V0bGluZUdhcCgpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5fdmFsaWRhdGVDb250cm9sQ2hpbGQoKSx0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseSYmdGhpcy51cGRhdGVPdXRsaW5lR2FwKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGU9ImVudGVyIix0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zaG91bGRGb3J3YXJkKGUpe2xldCBpPXRoaXMuX2NvbnRyb2w/dGhpcy5fY29udHJvbC5uZ0NvbnRyb2w6bnVsbDtyZXR1cm4gaSYmaVtlXX1faGFzUGxhY2Vob2xkZXIoKXtyZXR1cm4hISh0aGlzLl9jb250cm9sJiZ0aGlzLl9jb250cm9sLnBsYWNlaG9sZGVyfHx0aGlzLl9wbGFjZWhvbGRlckNoaWxkKX1faGFzTGFiZWwoKXtyZXR1cm4hKCF0aGlzLl9sYWJlbENoaWxkTm9uU3RhdGljJiYhdGhpcy5fbGFiZWxDaGlsZFN0YXRpYyl9X3Nob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4gdGhpcy5fY2FuTGFiZWxGbG9hdCgpJiYodGhpcy5fY29udHJvbCYmdGhpcy5fY29udHJvbC5zaG91bGRMYWJlbEZsb2F0fHx0aGlzLl9zaG91bGRBbHdheXNGbG9hdCgpKX1faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpe3JldHVybiJsZWdhY3kiPT09dGhpcy5hcHBlYXJhbmNlJiYhdGhpcy5faGFzTGFiZWwoKXx8dGhpcy5faGFzTGFiZWwoKSYmIXRoaXMuX3Nob3VsZExhYmVsRmxvYXQoKX1faGFzRmxvYXRpbmdMYWJlbCgpe3JldHVybiB0aGlzLl9oYXNMYWJlbCgpfHwibGVnYWN5Ij09PXRoaXMuYXBwZWFyYW5jZSYmdGhpcy5faGFzUGxhY2Vob2xkZXIoKX1fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKXtyZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiYmdGhpcy5fZXJyb3JDaGlsZHJlbi5sZW5ndGg+MCYmdGhpcy5fY29udHJvbC5lcnJvclN0YXRlPyJlcnJvciI6ImhpbnQifV9hbmltYXRlQW5kTG9ja0xhYmVsKCl7dGhpcy5faGFzRmxvYXRpbmdMYWJlbCgpJiZ0aGlzLl9jYW5MYWJlbEZsb2F0KCkmJih0aGlzLl9hbmltYXRpb25zRW5hYmxlZCYmdGhpcy5fbGFiZWwmJih0aGlzLl9zaG93QWx3YXlzQW5pbWF0ZT0hMCxfaSh0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2l0aW9uZW5kIikucGlwZShRdCgxKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc2hvd0Fsd2F5c0FuaW1hdGU9ITF9KSksdGhpcy5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fdmFsaWRhdGVQbGFjZWhvbGRlcnMoKXt9X3Byb2Nlc3NIaW50cygpe3RoaXMuX3ZhbGlkYXRlSGludHMoKSx0aGlzLl9zeW5jRGVzY3JpYmVkQnlJZHMoKX1fdmFsaWRhdGVIaW50cygpe31fZ2V0RGVmYXVsdEZsb2F0TGFiZWxTdGF0ZSgpe3JldHVybiB0aGlzLl9kZWZhdWx0cyYmdGhpcy5fZGVmYXVsdHMuZmxvYXRMYWJlbHx8ImF1dG8ifV9zeW5jRGVzY3JpYmVkQnlJZHMoKXtpZih0aGlzLl9jb250cm9sKXtsZXQgZT1bXTtpZih0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkmJiJzdHJpbmciPT10eXBlb2YgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5JiZlLnB1c2goLi4udGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5LnNwbGl0KCIgIikpLCJoaW50Ij09PXRoaXMuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpe2xldCBpPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4ic3RhcnQiPT09by5hbGlnbik6bnVsbCxyPXRoaXMuX2hpbnRDaGlsZHJlbj90aGlzLl9oaW50Q2hpbGRyZW4uZmluZChvPT4iZW5kIj09PW8uYWxpZ24pOm51bGw7aT9lLnB1c2goaS5pZCk6dGhpcy5faGludExhYmVsJiZlLnB1c2godGhpcy5faGludExhYmVsSWQpLHImJmUucHVzaChyLmlkKX1lbHNlIHRoaXMuX2Vycm9yQ2hpbGRyZW4mJmUucHVzaCguLi50aGlzLl9lcnJvckNoaWxkcmVuLm1hcChpPT5pLmlkKSk7dGhpcy5fY29udHJvbC5zZXREZXNjcmliZWRCeUlkcyhlKX19X3ZhbGlkYXRlQ29udHJvbENoaWxkKCl7fXVwZGF0ZU91dGxpbmVHYXAoKXtsZXQgZT10aGlzLl9sYWJlbD90aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50Om51bGwsaT10aGlzLl9jb25uZWN0aW9uQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQscj0iLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiLG89Ii5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcCI7aWYoIm91dGxpbmUiIT09dGhpcy5hcHBlYXJhbmNlfHwhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybjtpZighZXx8IWUuY2hpbGRyZW4ubGVuZ3RofHwhZS50ZXh0Q29udGVudC50cmltKCkpe2xldCB1PWkucXVlcnlTZWxlY3RvckFsbChgJHtyfSwgJHtvfWApO2ZvcihsZXQgZD0wO2Q8dS5sZW5ndGg7ZCsrKXVbZF0uc3R5bGUud2lkdGg9IjAiO3JldHVybn1pZighdGhpcy5faXNBdHRhY2hlZFRvRE9NKCkpcmV0dXJuIHZvaWQodGhpcy5fb3V0bGluZUdhcENhbGN1bGF0aW9uTmVlZGVkSW1tZWRpYXRlbHk9ITApO2xldCBzPTAsYT0wLGw9aS5xdWVyeVNlbGVjdG9yQWxsKHIpLGM9aS5xdWVyeVNlbGVjdG9yQWxsKG8pO2lmKHRoaXMuX2xhYmVsJiZ0aGlzLl9sYWJlbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCl7bGV0IHU9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09dS53aWR0aCYmMD09PXUuaGVpZ2h0KXJldHVybiB0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT0hMCx2b2lkKHRoaXMuX291dGxpbmVHYXBDYWxjdWxhdGlvbk5lZWRlZEltbWVkaWF0ZWx5PSExKTtsZXQgZD10aGlzLl9nZXRTdGFydEVuZCh1KSxwPWUuY2hpbGRyZW4saD10aGlzLl9nZXRTdGFydEVuZChwWzBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxmPTA7Zm9yKGxldCBtPTA7bTxwLmxlbmd0aDttKyspZis9cFttXS5vZmZzZXRXaWR0aDtzPU1hdGguYWJzKGgtZCktNSxhPWY+MD8uNzUqZisxMDowfWZvcihsZXQgdT0wO3U8bC5sZW5ndGg7dSsrKWxbdV0uc3R5bGUud2lkdGg9YCR7c31weGA7Zm9yKGxldCB1PTA7dTxjLmxlbmd0aDt1KyspY1t1XS5zdHlsZS53aWR0aD1gJHthfXB4YDt0aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRPblN0YWJsZT10aGlzLl9vdXRsaW5lR2FwQ2FsY3VsYXRpb25OZWVkZWRJbW1lZGlhdGVseT0hMX1fZ2V0U3RhcnRFbmQoZSl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/ZS5yaWdodDplLmxlZnR9X2lzQXR0YWNoZWRUb0RPTSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZihlLmdldFJvb3ROb2RlKXtsZXQgaT1lLmdldFJvb3ROb2RlKCk7cmV0dXJuIGkmJmkhPT1lfXJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnMoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oJGksOCksTShUa2UsOCksTShvaSksTShfdCksTShQaSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWZvcm0tZmllbGQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKEVpKHIsa2gsNSksRWkocixraCw3KSxFaShyLE52LDUpLEVpKHIsTnYsNyksRWkocixDa2UsNSksRWkocixWdGUsNSksRWkocix4a2UsNSksRWkocixNa2UsNSksRWkocix3a2UsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2NvbnRyb2xOb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2NvbnRyb2xTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGROb25TdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2xhYmVsQ2hpbGRTdGF0aWM9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX3BsYWNlaG9sZGVyQ2hpbGQ9by5maXJzdCksTmUobz1MZSgpKSYmKGkuX2Vycm9yQ2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX2hpbnRDaGlsZHJlbj1vKSxOZShvPUxlKCkpJiYoaS5fcHJlZml4Q2hpbGRyZW49byksTmUobz1MZSgpKSYmKGkuX3N1ZmZpeENoaWxkcmVuPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoaWtlLDcpLG90KHJrZSw1KSxvdChva2UsNSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX2Nvbm5lY3Rpb25Db250YWluZXJSZWY9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX2lucHV0Q29udGFpbmVyUmVmPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbD1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LWZvcm0tZmllbGQiXSxob3N0VmFyczo0MCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT1pLmFwcGVhcmFuY2UpKCJtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwiLCJmaWxsIj09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIiwib3V0bGluZSI9PWkuYXBwZWFyYW5jZSkoIm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IiwibGVnYWN5Ij09aS5hcHBlYXJhbmNlKSgibWF0LWZvcm0tZmllbGQtaW52YWxpZCIsaS5fY29udHJvbC5lcnJvclN0YXRlKSgibWF0LWZvcm0tZmllbGQtY2FuLWZsb2F0IixpLl9jYW5MYWJlbEZsb2F0KCkpKCJtYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQiLGkuX3Nob3VsZExhYmVsRmxvYXQoKSkoIm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCIsaS5faGFzRmxvYXRpbmdMYWJlbCgpKSgibWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciIsaS5faGlkZUNvbnRyb2xQbGFjZWhvbGRlcigpKSgibWF0LWZvcm0tZmllbGQtZGlzYWJsZWQiLGkuX2NvbnRyb2wuZGlzYWJsZWQpKCJtYXQtZm9ybS1maWVsZC1hdXRvZmlsbGVkIixpLl9jb250cm9sLmF1dG9maWxsZWQpKCJtYXQtZm9jdXNlZCIsaS5fY29udHJvbC5mb2N1c2VkKSgibmctdW50b3VjaGVkIixpLl9zaG91bGRGb3J3YXJkKCJ1bnRvdWNoZWQiKSkoIm5nLXRvdWNoZWQiLGkuX3Nob3VsZEZvcndhcmQoInRvdWNoZWQiKSkoIm5nLXByaXN0aW5lIixpLl9zaG91bGRGb3J3YXJkKCJwcmlzdGluZSIpKSgibmctZGlydHkiLGkuX3Nob3VsZEZvcndhcmQoImRpcnR5IikpKCJuZy12YWxpZCIsaS5fc2hvdWxkRm9yd2FyZCgidmFsaWQiKSkoIm5nLWludmFsaWQiLGkuX3Nob3VsZEZvcndhcmQoImludmFsaWQiKSkoIm5nLXBlbmRpbmciLGkuX3Nob3VsZEZvcndhcmQoInBlbmRpbmciKSkoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwhaS5fYW5pbWF0aW9uc0VuYWJsZWQpfSxpbnB1dHM6e2NvbG9yOiJjb2xvciIsYXBwZWFyYW5jZToiYXBwZWFyYW5jZSIsaGlkZVJlcXVpcmVkTWFya2VyOiJoaWRlUmVxdWlyZWRNYXJrZXIiLGhpbnRMYWJlbDoiaGludExhYmVsIixmbG9hdExhYmVsOiJmbG9hdExhYmVsIn0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOnNnLHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczp2a2UsZGVjbHM6MTUsdmFyczo4LGNvbnN0czpbWzEsIm1hdC1mb3JtLWZpZWxkLXdyYXBwZXIiXSxbMSwibWF0LWZvcm0tZmllbGQtZmxleCIsMywiY2xpY2siXSxbImNvbm5lY3Rpb25Db250YWluZXIiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1wcmVmaXgiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJjZGtPYnNlcnZlQ29udGVudCIsNCwibmdJZiJdLFsxLCJtYXQtZm9ybS1maWVsZC1pbmZpeCJdLFsiaW5wdXRDb250YWluZXIiLCIiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1sYWJlbCIsMywiY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZCIsImlkIiwibWF0LWVtcHR5IiwibWF0LWZvcm0tZmllbGQtZW1wdHkiLCJtYXQtYWNjZW50IiwibWF0LXdhcm4iLCJuZ1N3aXRjaCIsImNka09ic2VydmVDb250ZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXIiLDMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJtYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXIiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtZm9ybS1maWVsZC1vdXRsaW5lIl0sWzEsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXAiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQiXSxbMSwibWF0LWZvcm0tZmllbGQtb3V0bGluZSIsIm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2siXSxbMSwibWF0LWZvcm0tZmllbGQtcHJlZml4IiwzLCJjZGtPYnNlcnZlQ29udGVudERpc2FibGVkIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbMSwibWF0LWZvcm0tZmllbGQtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50RGlzYWJsZWQiLCJpZCIsIm5nU3dpdGNoIiwiY2RrT2JzZXJ2ZUNvbnRlbnQiXSxbImxhYmVsIiwiIl0sWyJjbGFzcyIsIm1hdC1wbGFjZWhvbGRlci1yZXF1aXJlZCBtYXQtZm9ybS1maWVsZC1yZXF1aXJlZC1tYXJrZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LXBsYWNlaG9sZGVyLXJlcXVpcmVkIiwibWF0LWZvcm0tZmllbGQtcmVxdWlyZWQtbWFya2VyIl0sWzEsIm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCJdLFsxLCJtYXQtZm9ybS1maWVsZC11bmRlcmxpbmUiXSxbMSwibWF0LWZvcm0tZmllbGQtcmlwcGxlIl0sWzEsIm1hdC1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlciJdLFsiY2xhc3MiLCJtYXQtaGludCIsMywiaWQiLDQsIm5nSWYiXSxbMSwibWF0LWZvcm0tZmllbGQtaGludC1zcGFjZXIiXSxbMSwibWF0LWhpbnQiLDMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoX2tlKSxfKDAsImRpdiIsMCkoMSwiZGl2IiwxLDIpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fY29udHJvbC5vbkNvbnRhaW5lckNsaWNrJiZpLl9jb250cm9sLm9uQ29udGFpbmVyQ2xpY2sobyl9KSxFKDMsc2tlLDksMCwibmctY29udGFpbmVyIiwzKSxFKDQsYWtlLDIsMSwiZGl2Iiw0KSxfKDUsImRpdiIsNSw2KSxWbig3KSxfKDgsInNwYW4iLDcpLEUoOSxka2UsNSwxNiwibGFiZWwiLDgpLHYoKSgpLEUoMTAscGtlLDIsMCwiZGl2Iiw5KSx2KCksRSgxMSxoa2UsMiw0LCJkaXYiLDEwKSxfKDEyLCJkaXYiLDExKSxFKDEzLGZrZSwyLDEsImRpdiIsMTIpLEUoMTQsZ2tlLDUsMiwiZGl2IiwxMyksdigpKCkpLDImZSYmKEMoMykseSgibmdJZiIsIm91dGxpbmUiPT1pLmFwcGVhcmFuY2UpLEMoMSkseSgibmdJZiIsaS5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoKSxDKDUpLHkoIm5nSWYiLGkuX2hhc0Zsb2F0aW5nTGFiZWwoKSksQygxKSx5KCJuZ0lmIixpLl9zdWZmaXhDaGlsZHJlbi5sZW5ndGgpLEMoMSkseSgibmdJZiIsIm91dGxpbmUiIT1pLmFwcGVhcmFuY2UpLEMoMSkseSgibmdTd2l0Y2giLGkuX2dldERpc3BsYXllZE1lc3NhZ2VzKCkpLEMoMSkseSgibmdTd2l0Y2hDYXNlIiwiZXJyb3IiKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsImhpbnQiKSl9LGRlcGVuZGVuY2llczpbQmUsQ3IsVXIsd2hdLHN0eWxlczpbIi5tYXQtZm9ybS1maWVsZHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9W2Rpcj1ydGxdIC5tYXQtZm9ybS1maWVsZHt0ZXh0LWFsaWduOnJpZ2h0fS5tYXQtZm9ybS1maWVsZC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtZm9ybS1maWVsZC1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lm1hdC1mb3JtLWZpZWxkLXByZWZpeCwubWF0LWZvcm0tZmllbGQtc3VmZml4e3doaXRlLXNwYWNlOm5vd3JhcDtmbGV4Om5vbmU7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWluZml4e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7ZmxleDphdXRvO21pbi13aWR0aDowO3dpZHRoOjE4MHB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWluZml4e2JvcmRlci1pbWFnZTpsaW5lYXItZ3JhZGllbnQodHJhbnNwYXJlbnQsIHRyYW5zcGFyZW50KX0ubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym94LXNpemluZzpjb250ZW50LWJveDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb2ludGVyLWV2ZW50czpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LWZvcm0tZmllbGQtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2ZvbnQ6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO3dpZHRoOjEwMCU7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLHdpZHRoIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpO2Rpc3BsYXk6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybS1vcmlnaW46MTAwJSAwO2xlZnQ6YXV0bztyaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtjb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtZW1wdHkubWF0LWZvcm0tZmllbGQtbGFiZWwsLm1hdC1mb3JtLWZpZWxkLWNhbi1mbG9hdC5tYXQtZm9ybS1maWVsZC1zaG91bGQtZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWxhYmVse2Rpc3BsYXk6YmxvY2t9Lm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1mb3JtLWZpZWxkLWF1dG9maWxsLWNvbnRyb2w6LXdlYmtpdC1hdXRvZmlsbCsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpibG9jazt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtaW5wdXQtc2VydmVyW3BsYWNlaG9sZGVyXTpub3QoOnBsYWNlaG9sZGVyLXNob3duKSsubWF0LWZvcm0tZmllbGQtbGFiZWwtd3JhcHBlciAubWF0LWZvcm0tZmllbGQtbGFiZWx7ZGlzcGxheTpub25lfS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXI6Zm9jdXMrLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1mb3JtLWZpZWxkLWxhYmVsLC5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQgLm1hdC1pbnB1dC1zZXJ2ZXJbcGxhY2Vob2xkZXJdOm5vdCg6cGxhY2Vob2xkZXItc2hvd24pKy5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1sYWJlbHtkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1sYWJlbDpub3QoLm1hdC1mb3JtLWZpZWxkLWVtcHR5KXt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNmb3JtOnNjYWxlM2QoMSwgMS4wMDAxLCAxKX0ubWF0LWZvcm0tZmllbGQtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3RyYW5zZm9ybS1vcmlnaW46NTAlO3RyYW5zZm9ybTpzY2FsZVgoMC41KTtvcGFjaXR5OjA7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDMwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpfS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtcmlwcGxlLC5tYXQtZm9ybS1maWVsZC5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7b3BhY2l0eToxO3RyYW5zZm9ybTpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIDMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLG9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciAzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVufS5tYXQtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciAubWF0LWljb24sLm1hdC1mb3JtLWZpZWxkLWxhYmVsLXdyYXBwZXIgLm1hdC1pY29ue3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS5tYXQtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5tYXQtZm9ybS1maWVsZC1oaW50LXNwYWNlcntmbGV4OjEgMCAxZW19Lm1hdC1lcnJvcntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZC1jb250cm9sLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1mb3JtLWZpZWxkLWhpbnQtZW5ke29yZGVyOjF9Lm1hdC1mb3JtLWZpZWxkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1sYWJlbCwubWF0LWZvcm0tZmllbGQuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9IiwnLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtZmxleHtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO3BhZGRpbmc6Ljc1ZW0gLjc1ZW0gMCAuNzVlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLWZsZXh7b3V0bGluZTpzb2xpZCAxcHh9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmUtY29sb3I6R3JheVRleHR9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsLm1hdC1mb2N1c2VkIC5tYXQtZm9ybS1maWVsZC1mbGV4e291dGxpbmU6ZGFzaGVkIDNweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmU6OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjFweDt3aWR0aDoxMDAlfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbCAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDowfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGw6bm90KC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCkgLm1hdC1mb3JtLWZpZWxkLWZsZXg6aG92ZXJ+Lm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZSAubWF0LWZvcm0tZmllbGQtcmlwcGxle29wYWNpdHk6MTt0cmFuc2Zvcm06bm9uZTt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5lIC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWZpbGwgLm1hdC1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVye3BhZGRpbmc6MCAxZW19JywnLm1hdC1pbnB1dC1lbGVtZW50e2ZvbnQ6aW5oZXJpdDtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Y29sb3I6Y3VycmVudENvbG9yO2JvcmRlcjpub25lO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207dGV4dC1hbGlnbjppbmhlcml0O2JveC1zaXppbmc6Y29udGVudC1ib3h9Lm1hdC1pbnB1dC1lbGVtZW50Oi1tb3otdWktaW52YWxpZHtib3gtc2hhZG93Om5vbmV9Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24sLm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY29udGFjdHMtYXV0by1maWxsLWJ1dHRvbiwubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtY2Fwcy1sb2NrLWluZGljYXRvciwubWF0LWlucHV0LWVsZW1lbnQ6bm90KFt0eXBlPXBhc3N3b3JkXSk6Oi13ZWJraXQtY3JlZGVudGlhbHMtYXV0by1maWxsLWJ1dHRvbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRlXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV0sLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPW1vbnRoXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXSwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT10aW1lXXtsaW5lLWhlaWdodDoxfS5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGVdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT1kYXRldGltZV06OmFmdGVyLC5tYXQtaW5wdXQtZWxlbWVudFt0eXBlPWRhdGV0aW1lLWxvY2FsXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9bW9udGhdOjphZnRlciwubWF0LWlucHV0LWVsZW1lbnRbdHlwZT13ZWVrXTo6YWZ0ZXIsLm1hdC1pbnB1dC1lbGVtZW50W3R5cGU9dGltZV06OmFmdGVye2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHh9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9yLC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1jbGVhci1idXR0b257Zm9udC1zaXplOi43NWVtfS5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dHJhbnNpdGlvbjpjb2xvciA0MDBtcyAxMzMuMzMzMzMzMzMzM21zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt0cmFuc2l0aW9uOmNvbG9yIDQwMG1zIDEzMy4zMzMzMzMzMzMzbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1pbnB1dC1lbGVtZW50Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6OnBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCkgIWltcG9ydGFudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246bm9uZX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjpyZ2JhKDAsMCwwLDApICFpbXBvcnRhbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmV9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlciAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7b3BhY2l0eTowfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtaW5wdXQtZWxlbWVudDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6cmdiYSgwLDAsMCwwKSAhaW1wb3J0YW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnJnYmEoMCwwLDAsMCk7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWhpZGUtcGxhY2Vob2xkZXIgLm1hdC1pbnB1dC1lbGVtZW50Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntvcGFjaXR5OjB9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtaW5wdXQtZWxlbWVudDo6cGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWlucHV0LWVsZW1lbnQ6LW1zLWlucHV0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246bm9uZX10ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudHtyZXNpemU6dmVydGljYWw7b3ZlcmZsb3c6YXV0b310ZXh0YXJlYS5tYXQtaW5wdXQtZWxlbWVudC5jZGstdGV4dGFyZWEtYXV0b3NpemV7cmVzaXplOm5vbmV9dGV4dGFyZWEubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZzoycHggMDttYXJnaW46LTJweCAwfXNlbGVjdC5tYXQtaW5wdXQtZWxlbWVudHstbW96LWFwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7ZGlzcGxheTppbmxpbmUtZmxleDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy10b3A6MWVtO3RvcDotMWVtO21hcmdpbi1ib3R0b206LTFlbX1zZWxlY3QubWF0LWlucHV0LWVsZW1lbnQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9c2VsZWN0Lm1hdC1pbnB1dC1lbGVtZW50Om5vdCg6ZGlzYWJsZWQpe2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7Y29udGVudDoiIjt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OjVweCBzb2xpZCByZ2JhKDAsMCwwLDApO2JvcmRlci1yaWdodDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItdG9wOjVweCBzb2xpZDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotMi41cHg7cG9pbnRlci1ldmVudHM6bm9uZX1bZGlyPXJ0bF0gLm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcntyaWdodDphdXRvO2xlZnQ6MH0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDoxNXB4fVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdCAubWF0LWlucHV0LWVsZW1lbnR7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDoxNXB4fS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1uYXRpdmUtc2VsZWN0IC5tYXQtZm9ybS1maWVsZC1sYWJlbC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxMHB4KX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtbmF0aXZlLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLWluZml4OjphZnRlcnttYXJnaW4tdG9wOi01cHh9Lm1hdC1mb3JtLWZpZWxkLXR5cGUtbWF0LW5hdGl2ZS1zZWxlY3QubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtZm9ybS1maWVsZC1pbmZpeDo6YWZ0ZXJ7bWFyZ2luLXRvcDotMTBweH0nLCIubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3RyYW5zZm9ybTpwZXJzcGVjdGl2ZSgxMDBweCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLWxlZ2FjeSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbnt3aWR0aDoxZW19Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLWJ1dHRvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9ue2ZvbnQ6aW5oZXJpdDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXByZWZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbiwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXN1ZmZpeCAubWF0LWljb24tYnV0dG9uIC5tYXQtaWNvbntmb250LXNpemU6aW5oZXJpdH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtoZWlnaHQ6MXB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5IC5tYXQtZm9ybS1maWVsZC1yaXBwbGV7dG9wOjA7aGVpZ2h0OjJweDtvdmVyZmxvdzpoaWRkZW59LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLXVuZGVybGluZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5Lm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7Ym9yZGVyLXRvcC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXRvcC13aWR0aDoycHg7Ym9yZGVyLXRvcC1jb2xvcjpHcmF5VGV4dH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kubWF0LWZvcm0tZmllbGQtaW52YWxpZDpub3QoLm1hdC1mb2N1c2VkKSAubWF0LWZvcm0tZmllbGQtcmlwcGxle2hlaWdodDoxcHh9IiwiLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtd3JhcHBlcnttYXJnaW46LjI1ZW0gMH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmc6MCAuNzVlbSAwIC43NWVtO21hcmdpbi10b3A6LTAuMjVlbTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1wcmVmaXgsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3VmZml4e3RvcDouMjVlbX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjI1ZW07bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9pbnRlci1ldmVudHM6bm9uZX0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0LC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZW5ke2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO21pbi13aWR0aDo1cHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydHtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4O2JvcmRlci1yaWdodC1zdHlsZTpub25lfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXN0YXJ0e2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItbGVmdC1zdHlsZTpub25lO2JvcmRlci1yYWRpdXM6MCA1cHggNXB4IDB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmR7Ym9yZGVyLXJhZGl1czowIDVweCA1cHggMDtib3JkZXItbGVmdC1zdHlsZTpub25lO2ZsZXgtZ3JvdzoxfVtkaXI9cnRsXSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZHtib3JkZXItbGVmdC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtc3R5bGU6bm9uZTtib3JkZXItcmFkaXVzOjVweCAwIDAgNXB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtZ2Fwe2JvcmRlci1yYWRpdXM6LjAwMDAwMXB4O2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2JvcmRlci1sZWZ0LXN0eWxlOm5vbmU7Ym9yZGVyLXJpZ2h0LXN0eWxlOm5vbmV9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1jYW4tZmxvYXQubWF0LWZvcm0tZmllbGQtc2hvdWxkLWZsb2F0IC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMCl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjB9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljayAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1zdGFydCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWVuZCwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLXRoaWNrIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLWdhcHtib3JkZXItd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvY3VzZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9ybS1maWVsZC1pbnZhbGlkIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgMTAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGljaywubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLm1hdC1mb3JtLWZpZWxkLWludmFsaWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtdGhpY2t7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5tYXQtZm9jdXNlZCAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tib3JkZXI6M3B4IGRhc2hlZH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5le29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgNjAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3ZlciAubWF0LWZvcm0tZmllbGQtb3V0bGluZS10aGlja3tvcGFjaXR5OjF9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXJ7cGFkZGluZzowIDFlbX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmV7Y29sb3I6R3JheVRleHR9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZTpub3QoLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkKSAubWF0LWZvcm0tZmllbGQtZmxleDpob3Zlcn4ubWF0LWZvcm0tZmllbGQtb3V0bGluZSwubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1vdXRsaW5lLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtZm9ybS1maWVsZC1vdXRsaW5lLC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmUuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1mb3JtLWZpZWxkLW91dGxpbmUtc3RhcnQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1lbmQsLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWZvcm0tZmllbGQtb3V0bGluZS1nYXB7dHJhbnNpdGlvbjpub25lfSIsIi5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC1mbGV4e3BhZGRpbmctdG9wOi43NWVtfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmV7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAxcHh9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtib3R0b206MDtoZWlnaHQ6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtoZWlnaHQ6MDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JhY2tncm91bmQtcG9zaXRpb246MDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1zdGFuZGFyZC5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZCAubWF0LWZvcm0tZmllbGQtdW5kZXJsaW5le2JvcmRlci10b3Atc3R5bGU6ZG90dGVkO2JvcmRlci10b3Atd2lkdGg6MnB4fS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXtvcGFjaXR5OjE7dHJhbnNmb3JtOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDYwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlOm5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4OmhvdmVyfi5tYXQtZm9ybS1maWVsZC11bmRlcmxpbmUgLm1hdC1mb3JtLWZpZWxkLXJpcHBsZXt0cmFuc2l0aW9uOm5vbmV9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYmtlLnRyYW5zaXRpb25NZXNzYWdlc119LGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYWc9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGxuLG9kLGxuXX0pLG59KSgpLEt0ZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcmVuZGVyZXI9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5vbkNoYW5nZT1yPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoZSxpKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZSxpKX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEV1KSxNKFJlKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm59KSxufSkoKSxsZz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgS3Rle31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sZmVhdHVyZXM6W3R0XX0pLG59KSgpLE5vPW5ldyBwZSgiTmdWYWx1ZUFjY2Vzc29yIiksRGtlPXtwcm92aWRlOk5vLHVzZUV4aXN0aW5nOkpuKCgpPT5Ba2UpLG11bHRpOiEwfSxBa2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGxne3dyaXRlVmFsdWUoZSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW0RrZV0pLHR0XX0pLG59KSgpLElrZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+QnYpLG11bHRpOiEwfSxSa2U9bmV3IHBlKCJDb21wb3NpdGlvbkV2ZW50TW9kZSIpLEJ2PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLdGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY29tcG9zaXRpb25Nb2RlPXIsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9kZT0hZnVuY3Rpb24oKXtsZXQgbj1ZbCgpP1lsKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3Qobi50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfV9oYW5kbGVJbnB1dChlKXsoIXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShlKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoZSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShFdSksTShSZSksTShSa2UsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVJbnB1dChvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9jb21wb3NpdGlvbkVuZChvLnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6WyR0KFtJa2VdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBGaChuKXtyZXR1cm4gbnVsbD09bnx8KCJzdHJpbmciPT10eXBlb2Ygbnx8QXJyYXkuaXNBcnJheShuKSkmJjA9PT1uLmxlbmd0aH1mdW5jdGlvbiBadGUobil7cmV0dXJuIG51bGwhPW4mJiJudW1iZXIiPT10eXBlb2Ygbi5sZW5ndGh9dmFyIExvPW5ldyBwZSgiTmdWYWxpZGF0b3JzIiksTmg9bmV3IHBlKCJOZ0FzeW5jVmFsaWRhdG9ycyIpLGtrZT0vXig/PS57MSwyNTR9JCkoPz0uezEsNjR9QClbYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKD86XC5bYS16QS1aMC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvLEZvPWNsYXNze3N0YXRpYyBtaW4odCl7cmV0dXJuIEp0ZSh0KX1zdGF0aWMgbWF4KHQpe3JldHVybiAkdGUodCl9c3RhdGljIHJlcXVpcmVkKHQpe3JldHVybiBlbmUodCl9c3RhdGljIHJlcXVpcmVkVHJ1ZSh0KXtyZXR1cm4gdG5lKHQpfXN0YXRpYyBlbWFpbCh0KXtyZXR1cm4gbm5lKHQpfXN0YXRpYyBtaW5MZW5ndGgodCl7cmV0dXJuIGluZSh0KX1zdGF0aWMgbWF4TGVuZ3RoKHQpe3JldHVybiBybmUodCl9c3RhdGljIHBhdHRlcm4odCl7cmV0dXJuIG9uZSh0KX1zdGF0aWMgbnVsbFZhbGlkYXRvcih0KXtyZXR1cm4gbnVsbH1zdGF0aWMgY29tcG9zZSh0KXtyZXR1cm4gZG5lKHQpfXN0YXRpYyBjb21wb3NlQXN5bmModCl7cmV0dXJuIHBuZSh0KX19O2Z1bmN0aW9uIEp0ZShuKXtyZXR1cm4gdD0+e2lmKEZoKHQudmFsdWUpfHxGaChuKSlyZXR1cm4gbnVsbDtsZXQgZT1wYXJzZUZsb2F0KHQudmFsdWUpO3JldHVybiFpc05hTihlKSYmZTxuP3ttaW46e21pbjpuLGFjdHVhbDp0LnZhbHVlfX06bnVsbH19ZnVuY3Rpb24gJHRlKG4pe3JldHVybiB0PT57aWYoRmgodC52YWx1ZSl8fEZoKG4pKXJldHVybiBudWxsO2xldCBlPXBhcnNlRmxvYXQodC52YWx1ZSk7cmV0dXJuIWlzTmFOKGUpJiZlPm4/e21heDp7bWF4Om4sYWN0dWFsOnQudmFsdWV9fTpudWxsfX1mdW5jdGlvbiBlbmUobil7cmV0dXJuIEZoKG4udmFsdWUpP3tyZXF1aXJlZDohMH06bnVsbH1mdW5jdGlvbiB0bmUobil7cmV0dXJuITA9PT1uLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBubmUobil7cmV0dXJuIEZoKG4udmFsdWUpfHxra2UudGVzdChuLnZhbHVlKT9udWxsOntlbWFpbDohMH19ZnVuY3Rpb24gaW5lKG4pe3JldHVybiB0PT5GaCh0LnZhbHVlKXx8IVp0ZSh0LnZhbHVlKT9udWxsOnQudmFsdWUubGVuZ3RoPG4/e21pbmxlbmd0aDp7cmVxdWlyZWRMZW5ndGg6bixhY3R1YWxMZW5ndGg6dC52YWx1ZS5sZW5ndGh9fTpudWxsfWZ1bmN0aW9uIHJuZShuKXtyZXR1cm4gdD0+WnRlKHQudmFsdWUpJiZ0LnZhbHVlLmxlbmd0aD5uP3ttYXhsZW5ndGg6e3JlcXVpcmVkTGVuZ3RoOm4sYWN0dWFsTGVuZ3RoOnQudmFsdWUubGVuZ3RofX06bnVsbH1mdW5jdGlvbiBvbmUobil7aWYoIW4pcmV0dXJuIFAyO2xldCB0LGU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuPyhlPSIiLCJeIiE9PW4uY2hhckF0KDApJiYoZSs9Il4iKSxlKz1uLCIkIiE9PW4uY2hhckF0KG4ubGVuZ3RoLTEpJiYoZSs9IiQiKSx0PW5ldyBSZWdFeHAoZSkpOihlPW4udG9TdHJpbmcoKSx0PW4pLGk9PntpZihGaChpLnZhbHVlKSlyZXR1cm4gbnVsbDtsZXQgcj1pLnZhbHVlO3JldHVybiB0LnRlc3Qocik/bnVsbDp7cGF0dGVybjp7cmVxdWlyZWRQYXR0ZXJuOmUsYWN0dWFsVmFsdWU6cn19fX1mdW5jdGlvbiBQMihuKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBzbmUobil7cmV0dXJuIG51bGwhPW59ZnVuY3Rpb24gYW5lKG4pe3JldHVybiBuXyhuKT9FbyhuKTpufWZ1bmN0aW9uIGxuZShuKXtsZXQgdD17fTtyZXR1cm4gbi5mb3JFYWNoKGU9Pnt0PW51bGwhPWU/ey4uLnQsLi4uZX06dH0pLDA9PT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/bnVsbDp0fWZ1bmN0aW9uIGNuZShuLHQpe3JldHVybiB0Lm1hcChlPT5lKG4pKX1mdW5jdGlvbiB1bmUobil7cmV0dXJuIG4ubWFwKHQ9PmZ1bmN0aW9uKG4pe3JldHVybiFuLnZhbGlkYXRlfSh0KT90OmU9PnQudmFsaWRhdGUoZSkpfWZ1bmN0aW9uIGRuZShuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzbmUpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBsbmUoY25lKGUsdCkpfX1mdW5jdGlvbiBVSChuKXtyZXR1cm4gbnVsbCE9bj9kbmUodW5lKG4pKTpudWxsfWZ1bmN0aW9uIHBuZShuKXtpZighbilyZXR1cm4gbnVsbDtsZXQgdD1uLmZpbHRlcihzbmUpO3JldHVybiAwPT10Lmxlbmd0aD9udWxsOmZ1bmN0aW9uKGUpe3JldHVybiBscihjbmUoZSx0KS5tYXAoYW5lKSkucGlwZShMKGxuZSkpfX1mdW5jdGlvbiB6SChuKXtyZXR1cm4gbnVsbCE9bj9wbmUodW5lKG4pKTpudWxsfWZ1bmN0aW9uIFV0ZShuLHQpe3JldHVybiBudWxsPT09bj9bdF06QXJyYXkuaXNBcnJheShuKT9bLi4ubix0XTpbbix0XX1mdW5jdGlvbiBobmUobil7cmV0dXJuIG4uX3Jhd1ZhbGlkYXRvcnN9ZnVuY3Rpb24gZm5lKG4pe3JldHVybiBuLl9yYXdBc3luY1ZhbGlkYXRvcnN9ZnVuY3Rpb24gQkgobil7cmV0dXJuIG4/QXJyYXkuaXNBcnJheShuKT9uOltuXTpbXX1mdW5jdGlvbiBSMihuLHQpe3JldHVybiBBcnJheS5pc0FycmF5KG4pP24uaW5jbHVkZXModCk6bj09PXR9ZnVuY3Rpb24genRlKG4sdCl7bGV0IGU9QkgodCk7cmV0dXJuIEJIKG4pLmZvckVhY2gocj0+e1IyKGUscil8fGUucHVzaChyKX0pLGV9ZnVuY3Rpb24ganRlKG4sdCl7cmV0dXJuIEJIKHQpLmZpbHRlcihlPT4hUjIobixlKSl9dmFyIE8yPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXR8fFtdLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49VUgodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPXpIKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KHQpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKHQpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaCh0PT50KCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldCh0KXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldCh0KX1oYXNFcnJvcih0LGUpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IodCxlKX1nZXRFcnJvcih0LGUpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKHQsZSk6bnVsbH19LEZzPWNsYXNzIGV4dGVuZHMgTzJ7Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX0sTnM9Y2xhc3MgZXh0ZW5kcyBPMntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fcGFyZW50PW51bGwsdGhpcy5uYW1lPW51bGwsdGhpcy52YWx1ZUFjY2Vzc29yPW51bGx9fSxWSD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9jZD10fWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdldCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5zdWJtaXR0ZWR9fSxWMj0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVkh7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oTnMsMikpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoIm5nLXVudG91Y2hlZCIsaS5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGkuaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGkuaXNQcmlzdGluZSkoIm5nLWRpcnR5IixpLmlzRGlydHkpKCJuZy12YWxpZCIsaS5pc1ZhbGlkKSgibmctaW52YWxpZCIsaS5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixpLmlzUGVuZGluZyl9LGZlYXR1cmVzOlt0dF19KSxufSkoKSxkdz0iVkFMSUQiLEkyPSJJTlZBTElEIixMdj0iUEVORElORyIscHc9IkRJU0FCTEVEIjtmdW5jdGlvbiBnbmUobil7cmV0dXJuKEgyKG4pP24udmFsaWRhdG9yczpuKXx8bnVsbH1mdW5jdGlvbiBHdGUobil7cmV0dXJuIEFycmF5LmlzQXJyYXkobik/VUgobik6bnx8bnVsbH1mdW5jdGlvbiBfbmUobix0KXtyZXR1cm4oSDIodCk/dC5hc3luY1ZhbGlkYXRvcnM6bil8fG51bGx9ZnVuY3Rpb24gV3RlKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP3pIKG4pOm58fG51bGx9ZnVuY3Rpb24gSDIobil7cmV0dXJuIG51bGwhPW4mJiFBcnJheS5pc0FycmF5KG4pJiYib2JqZWN0Ij09dHlwZW9mIG59dmFyIGsyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fcmF3VmFsaWRhdG9ycz10LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1lLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49R3RlKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XdGUodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZhbGlkYXRvcih0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49dH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcih0KXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPXR9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09ZHd9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1JMn1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLnN0YXR1cz09THZ9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09cHd9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT1wd31nZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBkYXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFsaWRhdG9ycyh0KXt0aGlzLl9yYXdWYWxpZGF0b3JzPXQsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1HdGUodCl9c2V0QXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10LHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1XdGUodCl9YWRkVmFsaWRhdG9ycyh0KXt0aGlzLnNldFZhbGlkYXRvcnMoenRlKHQsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5jVmFsaWRhdG9ycyh0KXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyh6dGUodCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKHQpe3RoaXMuc2V0VmFsaWRhdG9ycyhqdGUodCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKHQpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKGp0ZSh0LHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcih0KXtyZXR1cm4gUjIodGhpcy5fcmF3VmFsaWRhdG9ycyx0KX1oYXNBc3luY1ZhbGlkYXRvcih0KXtyZXR1cm4gUjIodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLHQpfWNsZWFyVmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9ITAsdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1RvdWNoZWQodCl9bWFya0FsbEFzVG91Y2hlZCgpe3RoaXMubWFya0FzVG91Y2hlZCh7b25seVNlbGY6ITB9KSx0aGlzLl9mb3JFYWNoQ2hpbGQodD0+dC5tYXJrQWxsQXNUb3VjaGVkKCkpfW1hcmtBc1VudG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGU9PntlLm1hcmtBc1VudG91Y2hlZCh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCh0KX1tYXJrQXNEaXJ0eSh0PXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eSh0KX1tYXJrQXNQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoZT0+e2UubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKHQpfW1hcmtBc1BlbmRpbmcodD17fSl7dGhpcy5zdGF0dXM9THYsITEhPT10LmVtaXRFdmVudCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmIXQub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKHQpfWRpc2FibGUodD17fSl7bGV0IGU9dGhpcy5fcGFyZW50TWFya2VkRGlydHkodC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9cHcsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoaT0+e2kuZGlzYWJsZSh7Li4udCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PXQuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4udCxza2lwUHJpc3RpbmVDaGVjazplfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGk9PmkoITApKX1lbmFibGUodD17fSl7bGV0IGU9dGhpcy5fcGFyZW50TWFya2VkRGlydHkodC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9ZHcsdGhpcy5fZm9yRWFjaENoaWxkKGk9PntpLmVuYWJsZSh7Li4udCxvbmx5U2VsZjohMH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6dC5lbWl0RXZlbnR9KSx0aGlzLl91cGRhdGVBbmNlc3RvcnMoey4uLnQsc2tpcFByaXN0aW5lQ2hlY2s6ZX0pLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UuZm9yRWFjaChpPT5pKCExKSl9X3VwZGF0ZUFuY2VzdG9ycyh0KXt0aGlzLl9wYXJlbnQmJiF0Lm9ubHlTZWxmJiYodGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCksdC5za2lwUHJpc3RpbmVDaGVja3x8dGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSgpLHRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZCgpKX1zZXRQYXJlbnQodCl7dGhpcy5fcGFyZW50PXR9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZX11cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHQ9e30pe3RoaXMuX3NldEluaXRpYWxTdGF0dXMoKSx0aGlzLl91cGRhdGVWYWx1ZSgpLHRoaXMuZW5hYmxlZCYmKHRoaXMuX2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCksdGhpcy5lcnJvcnM9dGhpcy5fcnVuVmFsaWRhdG9yKCksdGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksKHRoaXMuc3RhdHVzPT09ZHd8fHRoaXMuc3RhdHVzPT09THYpJiZ0aGlzLl9ydW5Bc3luY1ZhbGlkYXRvcih0LmVtaXRFdmVudCkpLCExIT09dC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodCl9X3VwZGF0ZVRyZWVWYWxpZGl0eSh0PXtlbWl0RXZlbnQ6ITB9KXt0aGlzLl9mb3JFYWNoQ2hpbGQoZT0+ZS5fdXBkYXRlVHJlZVZhbGlkaXR5KHQpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDp0LmVtaXRFdmVudH0pfV9zZXRJbml0aWFsU3RhdHVzKCl7dGhpcy5zdGF0dXM9dGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP3B3OmR3fV9ydW5WYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy52YWxpZGF0b3I/dGhpcy52YWxpZGF0b3IodGhpcyk6bnVsbH1fcnVuQXN5bmNWYWxpZGF0b3IodCl7aWYodGhpcy5hc3luY1ZhbGlkYXRvcil7dGhpcy5zdGF0dXM9THYsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSEwO2xldCBlPWFuZSh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249ZS5zdWJzY3JpYmUoaT0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhpLHtlbWl0RXZlbnQ6dH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKHQsZT17fSl7dGhpcy5lcnJvcnM9dCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWUuZW1pdEV2ZW50KX1nZXQodCl7bGV0IGU9dDtyZXR1cm4gbnVsbD09ZXx8KEFycmF5LmlzQXJyYXkoZSl8fChlPWUuc3BsaXQoIi4iKSksMD09PWUubGVuZ3RoKT9udWxsOmUucmVkdWNlKChpLHIpPT5pJiZpLl9maW5kKHIpLHRoaXMpfWdldEVycm9yKHQsZSl7bGV0IGk9ZT90aGlzLmdldChlKTp0aGlzO3JldHVybiBpJiZpLmVycm9ycz9pLmVycm9yc1t0XTpudWxsfWhhc0Vycm9yKHQsZSl7cmV0dXJuISF0aGlzLmdldEVycm9yKHQsZSl9Z2V0IHJvb3QoKXtsZXQgdD10aGlzO2Zvcig7dC5fcGFyZW50Oyl0PXQuX3BhcmVudDtyZXR1cm4gdH1fdXBkYXRlQ29udHJvbHNFcnJvcnModCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksdCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRhdGVDb250cm9sc0Vycm9ycyh0KX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IEcsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBHfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP3B3OnRoaXMuZXJyb3JzP0kyOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKEx2KT9Mdjp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoSTIpP0kyOmR3fV9hbnlDb250cm9sc0hhdmVTdGF0dXModCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGU9PmUuc3RhdHVzPT09dCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHModD0+dC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyh0PT50LnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZSh0PXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZSh0KX1fdXBkYXRlVG91Y2hlZCh0PXt9KXt0aGlzLnRvdWNoZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhdC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKHQpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0KXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9dH1fc2V0VXBkYXRlU3RyYXRlZ3kodCl7SDIodCkmJm51bGwhPXQudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj10LnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkodCl7cmV0dXJuIXQmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmluZCh0KXtyZXR1cm4gbnVsbH19LEYyPWNsYXNzIGV4dGVuZHMgazJ7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKGduZShlKSxfbmUoaSxlKSksdGhpcy5jb250cm9scz10LHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGUpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KX1yZWdpc3RlckNvbnRyb2wodCxlKXtyZXR1cm4gdGhpcy5jb250cm9sc1t0XT90aGlzLmNvbnRyb2xzW3RdOih0aGlzLmNvbnRyb2xzW3RdPWUsZS5zZXRQYXJlbnQodGhpcyksZS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxlKX1hZGRDb250cm9sKHQsZSxpPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbCh0LGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmkuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbCh0LGU9e30pe3RoaXMuY29udHJvbHNbdF0mJnRoaXMuY29udHJvbHNbdF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbdF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKHQsZSxpPXt9KXt0aGlzLmNvbnRyb2xzW3RdJiZ0aGlzLmNvbnRyb2xzW3RdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW3RdLGUmJnRoaXMucmVnaXN0ZXJDb250cm9sKHQsZSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6aS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyh0KXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eSh0KSYmdGhpcy5jb250cm9sc1t0XS5lbmFibGVkfXNldFZhbHVlKHQsZT17fSl7KGZ1bmN0aW9uKG4sdCxlKXtuLl9mb3JFYWNoQ2hpbGQoKGkscik9PntpZih2b2lkIDA9PT1lW3JdKXRocm93IG5ldyBBdCgxMDAyLCIiKX0pfSkodGhpcywwLHQpLE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+eyhmdW5jdGlvbihuLHQsZSl7bGV0IGk9bi5jb250cm9scztpZighKHQ/T2JqZWN0LmtleXMoaSk6aSkubGVuZ3RoKXRocm93IG5ldyBBdCgxZTMsIiIpO2lmKCFpW2VdKXRocm93IG5ldyBBdCgxMDAxLCIiKX0pKHRoaXMsITAsaSksdGhpcy5jb250cm9sc1tpXS5zZXRWYWx1ZSh0W2ldLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ZS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1wYXRjaFZhbHVlKHQsZT17fSl7bnVsbCE9dCYmKE9iamVjdC5rZXlzKHQpLmZvckVhY2goaT0+e2xldCByPXRoaXMuY29udHJvbHNbaV07ciYmci5wYXRjaFZhbHVlKHRbaV0se29ubHlTZWxmOiEwLGVtaXRFdmVudDplLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGUpKX1yZXNldCh0PXt9LGU9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoaSxyKT0+e2kucmVzZXQodFtyXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmUuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShlKSx0aGlzLl91cGRhdGVUb3VjaGVkKGUpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShlKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwodCxlLGkpPT4odFtpXT1lLmdldFJhd1ZhbHVlKCksdCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IHQ9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGUsaSk9PiEhaS5fc3luY1BlbmRpbmdDb250cm9scygpfHxlKTtyZXR1cm4gdCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLHR9X2ZvckVhY2hDaGlsZCh0KXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGU9PntsZXQgaT10aGlzLmNvbnRyb2xzW2VdO2kmJnQoaSxlKX0pfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKHQ9Pnt0LnNldFBhcmVudCh0aGlzKSx0Ll9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfV9hbnlDb250cm9scyh0KXtmb3IobGV0W2UsaV1vZiBPYmplY3QuZW50cmllcyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRhaW5zKGUpJiZ0KGkpKXJldHVybiEwO3JldHVybiExfV9yZWR1Y2VWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwoZSxpLHIpPT4oKGkuZW5hYmxlZHx8dGhpcy5kaXNhYmxlZCkmJihlW3JdPWkudmFsdWUpLGUpKX1fcmVkdWNlQ2hpbGRyZW4odCxlKXtsZXQgaT10O3JldHVybiB0aGlzLl9mb3JFYWNoQ2hpbGQoKHIsbyk9PntpPWUoaSxyLG8pfSksaX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe2ZvcihsZXQgdCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW3RdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKHQpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KHQpP3RoaXMuY29udHJvbHNbdF06bnVsbH19O2Z1bmN0aW9uIFUyKG4sdCl7cmV0dXJuWy4uLnQucGF0aCxuXX1mdW5jdGlvbiBmdyhuLHQpe2pIKG4sdCksdC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUobi52YWx1ZSksbi5kaXNhYmxlZCYmdC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGU/LighMCksZnVuY3Rpb24obix0KXt0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShlPT57bi5fcGVuZGluZ1ZhbHVlPWUsbi5fcGVuZGluZ0NoYW5nZT0hMCxuLl9wZW5kaW5nRGlydHk9ITAsImNoYW5nZSI9PT1uLnVwZGF0ZU9uJiZ2bmUobix0KX0pfShuLHQpLGZ1bmN0aW9uKG4sdCl7bGV0IGU9KGkscik9Pnt0LnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShpKSxyJiZ0LnZpZXdUb01vZGVsVXBkYXRlKGkpfTtuLnJlZ2lzdGVyT25DaGFuZ2UoZSksdC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntuLl91bnJlZ2lzdGVyT25DaGFuZ2UoZSl9KX0obix0KSxmdW5jdGlvbihuLHQpe3QudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e24uX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PW4udXBkYXRlT24mJm4uX3BlbmRpbmdDaGFuZ2UmJnZuZShuLHQpLCJzdWJtaXQiIT09bi51cGRhdGVPbiYmbi5tYXJrQXNUb3VjaGVkKCl9KX0obix0KSxmdW5jdGlvbihuLHQpe2lmKHQudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtsZXQgZT1pPT57dC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoaSl9O24ucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGUpLHQuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57bi5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoZSl9KX19KG4sdCl9ZnVuY3Rpb24gTjIobix0LGU9ITApe2xldCBpPSgpPT57fTt0LnZhbHVlQWNjZXNzb3ImJih0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPbkNoYW5nZShpKSx0LnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoaSkpLEIyKG4sdCksbiYmKHQuX2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpLG4uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSkpfWZ1bmN0aW9uIEwyKG4sdCl7bi5mb3JFYWNoKGU9PntlLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UmJmUucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSh0KX0pfWZ1bmN0aW9uIGpIKG4sdCl7bGV0IGU9aG5lKG4pO251bGwhPT10LnZhbGlkYXRvcj9uLnNldFZhbGlkYXRvcnMoVXRlKGUsdC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmbi5zZXRWYWxpZGF0b3JzKFtlXSk7bGV0IGk9Zm5lKG4pO251bGwhPT10LmFzeW5jVmFsaWRhdG9yP24uc2V0QXN5bmNWYWxpZGF0b3JzKFV0ZShpLHQuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgaSYmbi5zZXRBc3luY1ZhbGlkYXRvcnMoW2ldKTtsZXQgcj0oKT0+bi51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7TDIodC5fcmF3VmFsaWRhdG9ycyxyKSxMMih0Ll9yYXdBc3luY1ZhbGlkYXRvcnMscil9ZnVuY3Rpb24gQjIobix0KXtsZXQgZT0hMTtpZihudWxsIT09bil7aWYobnVsbCE9PXQudmFsaWRhdG9yKXtsZXQgcj1obmUobik7aWYoQXJyYXkuaXNBcnJheShyKSYmci5sZW5ndGg+MCl7bGV0IG89ci5maWx0ZXIocz0+cyE9PXQudmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldFZhbGlkYXRvcnMobykpfX1pZihudWxsIT09dC5hc3luY1ZhbGlkYXRvcil7bGV0IHI9Zm5lKG4pO2lmKEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoPjApe2xldCBvPXIuZmlsdGVyKHM9PnMhPT10LmFzeW5jVmFsaWRhdG9yKTtvLmxlbmd0aCE9PXIubGVuZ3RoJiYoZT0hMCxuLnNldEFzeW5jVmFsaWRhdG9ycyhvKSl9fX1sZXQgaT0oKT0+e307cmV0dXJuIEwyKHQuX3Jhd1ZhbGlkYXRvcnMsaSksTDIodC5fcmF3QXN5bmNWYWxpZGF0b3JzLGkpLGV9ZnVuY3Rpb24gdm5lKG4sdCl7bi5fcGVuZGluZ0RpcnR5JiZuLm1hcmtBc0RpcnR5KCksbi5zZXRWYWx1ZShuLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLHQudmlld1RvTW9kZWxVcGRhdGUobi5fcGVuZGluZ1ZhbHVlKSxuLl9wZW5kaW5nQ2hhbmdlPSExfWZ1bmN0aW9uIHluZShuLHQpe2pIKG4sdCl9ZnVuY3Rpb24gR0gobix0KXtpZighbi5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtsZXQgZT1uLm1vZGVsO3JldHVybiEhZS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXModCxlLmN1cnJlbnRWYWx1ZSl9ZnVuY3Rpb24gYm5lKG4sdCl7bi5fc3luY1BlbmRpbmdDb250cm9scygpLHQuZm9yRWFjaChlPT57bGV0IGk9ZS5jb250cm9sOyJzdWJtaXQiPT09aS51cGRhdGVPbiYmaS5fcGVuZGluZ0NoYW5nZSYmKGUudmlld1RvTW9kZWxVcGRhdGUoaS5fcGVuZGluZ1ZhbHVlKSxpLl9wZW5kaW5nQ2hhbmdlPSExKX0pfWZ1bmN0aW9uIFdIKG4sdCl7aWYoIXQpcmV0dXJuIG51bGw7bGV0IGUsaSxyO3JldHVybiBBcnJheS5pc0FycmF5KHQpLHQuZm9yRWFjaChvPT57by5jb25zdHJ1Y3Rvcj09PUJ2P2U9bzpmdW5jdGlvbihuKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG4uY29uc3RydWN0b3IpPT09bGd9KG8pP2k9bzpyPW99KSxyfHxpfHxlfHxudWxsfXZhciBRa2U9e3Byb3ZpZGU6RnMsdXNlRXhpc3Rpbmc6Sm4oKCk9PkxoKX0saHc9UHJvbWlzZS5yZXNvbHZlKCksTGg9KCgpPT57Y2xhc3MgbiBleHRlbmRzIEZze2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLmZvcm09bmV3IEYyKHt9LFVIKGUpLHpIKGkpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKGUpe2h3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7ZS5jb250cm9sPWkucmVnaXN0ZXJDb250cm9sKGUubmFtZSxlLmNvbnRyb2wpLGZ3KGUuY29udHJvbCxlKSxlLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5hZGQoZSl9KX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtody50aGVuKCgpPT57bGV0IGk9dGhpcy5fZmluZENvbnRhaW5lcihlLnBhdGgpO2kmJmkucmVtb3ZlQ29udHJvbChlLm5hbWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGUpfSl9YWRkRm9ybUdyb3VwKGUpe2h3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCkscj1uZXcgRjIoe30pO3luZShyLGUpLGkucmVnaXN0ZXJDb250cm9sKGUubmFtZSxyKSxyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGUpe2h3LnRoZW4oKCk9PntsZXQgaT10aGlzLl9maW5kQ29udGFpbmVyKGUucGF0aCk7aSYmaS5yZW1vdmVDb250cm9sKGUubmFtZSl9KX1nZXRGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoZS5wYXRoKX11cGRhdGVNb2RlbChlLGkpe2h3LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGUucGF0aCkuc2V0VmFsdWUoaSl9KX1zZXRWYWx1ZShlKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZSl9b25TdWJtaXQoZSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGJuZSh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihlKXtyZXR1cm4gZS5wb3AoKSxlLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGUpOnRoaXMuZm9ybX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShMbywxMCksTShOaCwxMCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJzdWJtaXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU3VibWl0KG8pfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6WyJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbUWtlXSksdHRdfSksbn0pKCk7ZnVuY3Rpb24gcXRlKG4sdCl7bGV0IGU9bi5pbmRleE9mKHQpO2U+LTEmJm4uc3BsaWNlKGUsMSl9ZnVuY3Rpb24gWXRlKG4pe3JldHVybiJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW4mJjI9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGgmJiJ2YWx1ZSJpbiBuJiYiZGlzYWJsZWQiaW4gbn12YXIgQmg9Y2xhc3MgZXh0ZW5kcyBrMntjb25zdHJ1Y3Rvcih0PW51bGwsZSxpKXtzdXBlcihnbmUoZSksX25lKGksZSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0aGlzLl9hcHBseUZvcm1TdGF0ZSh0KSx0aGlzLl9zZXRVcGRhdGVTdHJhdGVneShlKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxIMihlKSYmKGUubm9uTnVsbGFibGV8fGUuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRoaXMuZGVmYXVsdFZhbHVlPVl0ZSh0KT90LnZhbHVlOnQpfXNldFZhbHVlKHQsZT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09ZS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goaT0+aSh0aGlzLnZhbHVlLCExIT09ZS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoZSl9cGF0Y2hWYWx1ZSh0LGU9e30pe3RoaXMuc2V0VmFsdWUodCxlKX1yZXNldCh0PXRoaXMuZGVmYXVsdFZhbHVlLGU9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKHQpLHRoaXMubWFya0FzUHJpc3RpbmUoZSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoZSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGUpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyh0KXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UodCl7dGhpcy5fb25DaGFuZ2UucHVzaCh0KX1fdW5yZWdpc3Rlck9uQ2hhbmdlKHQpe3F0ZSh0aGlzLl9vbkNoYW5nZSx0KX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UodCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKHQpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZSh0KXtxdGUodGhpcy5fb25EaXNhYmxlZENoYW5nZSx0KX1fZm9yRWFjaENoaWxkKHQpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1hcmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9ybVN0YXRlKHQpe1l0ZSh0KT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9dC52YWx1ZSx0LmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT10fX0seG5lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGc3tuZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtR3JvdXAodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtR3JvdXAodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1Hcm91cCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiBVMihudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9X2NoZWNrUGFyZW50VHlwZSgpe319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGZlYXR1cmVzOlt0dF19KSxufSkoKSxaa2U9e3Byb3ZpZGU6RnMsdXNlRXhpc3Rpbmc6Sm4oKCk9PkprZSl9LEprZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgeG5le2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcigpLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpfV9jaGVja1BhcmVudFR5cGUoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oRnMsNSksTShMbywxMCksTShOaCwxMCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsR3JvdXAiLCIiXV0saW5wdXRzOntuYW1lOlsibmdNb2RlbEdyb3VwIiwibmFtZSJdfSxleHBvcnRBczpbIm5nTW9kZWxHcm91cCJdLGZlYXR1cmVzOlskdChbWmtlXSksdHRdfSksbn0pKCksJGtlPXtwcm92aWRlOk5zLHVzZUV4aXN0aW5nOkpuKCgpPT5lRmUpfSxYdGU9UHJvbWlzZS5yZXNvbHZlKCksZUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBOc3tjb25zdHJ1Y3RvcihlLGkscixvLHMpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9cyx0aGlzLmNvbnRyb2w9bmV3IEJoLHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fcGFyZW50PWUsdGhpcy5fc2V0VmFsaWRhdG9ycyhpKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMociksdGhpcy52YWx1ZUFjY2Vzc29yPVdIKDAsbyl9bmdPbkNoYW5nZXMoZSl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gZSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2xldCBpPWUubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmkscGF0aDp0aGlzLl9nZXRQYXRoKGkpfSl9dGhpcy5fc2V0VXBDb250cm9sKCl9ImlzRGlzYWJsZWQiaW4gZSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoZSksR0goZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3RhbmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe2Z3KHRoaXMuY29udHJvbCx0aGlzKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShlKXtYdGUudGhlbigoKT0+e3RoaXMuY29udHJvbC5zZXRWYWx1ZShlLHtlbWl0Vmlld1RvTW9kZWxDaGFuZ2U6ITF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj8ubWFya0ZvckNoZWNrKCl9KX1fdXBkYXRlRGlzYWJsZWQoZSl7bGV0IGk9ZS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxyPTAhPT1pJiZOVChpKTtYdGUudGhlbigoKT0+e3ImJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohciYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoZSl7cmV0dXJuIHRoaXMuX3BhcmVudD9VMihlLHRoaXMuX3BhcmVudCk6W2VdfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEZzLDkpLE0oTG8sMTApLE0oTmgsMTApLE0oTm8sMTApLE0obm4sOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJuZ01vZGVsIiwiIiwzLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsImZvcm1Db250cm9sIiwiIl1dLGlucHV0czp7bmFtZToibmFtZSIsaXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbIm5nTW9kZWxPcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOnt1cGRhdGU6Im5nTW9kZWxDaGFuZ2UifSxleHBvcnRBczpbIm5nTW9kZWwiXSxmZWF0dXJlczpbJHQoWyRrZV0pLHR0LEZ0XX0pLG59KSgpLHRGZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+cUgpLG11bHRpOiEwfSxxSD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbGd7d3JpdGVWYWx1ZShlKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsZT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57ZSgiIj09aT9udWxsOnBhcnNlRmxvYXQoaSkpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2hhbmdlKG8udGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOlskdChbdEZlXSksdHRdfSksbn0pKCksbkZlPXtwcm92aWRlOk5vLHVzZUV4aXN0aW5nOkpuKCgpPT5yRmUpLG11bHRpOiEwfSxDbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGlGZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fYWNjZXNzb3JzPVtdfWFkZChlLGkpe3RoaXMuX2FjY2Vzc29ycy5wdXNoKFtlLGldKX1yZW1vdmUoZSl7Zm9yKGxldCBpPXRoaXMuX2FjY2Vzc29ycy5sZW5ndGgtMTtpPj0wOy0taSlpZih0aGlzLl9hY2Nlc3NvcnNbaV1bMV09PT1lKXJldHVybiB2b2lkIHRoaXMuX2FjY2Vzc29ycy5zcGxpY2UoaSwxKX1zZWxlY3QoZSl7dGhpcy5fYWNjZXNzb3JzLmZvckVhY2goaT0+e3RoaXMuX2lzU2FtZUdyb3VwKGksZSkmJmlbMV0hPT1lJiZpWzFdLmZpcmVVbmNoZWNrKGUudmFsdWUpfSl9X2lzU2FtZUdyb3VwKGUsaSl7cmV0dXJuISFlWzBdLmNvbnRyb2wmJmVbMF0uX3BhcmVudD09PWkuX2NvbnRyb2wuX3BhcmVudCYmZVsxXS5uYW1lPT09aS5uYW1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWMscHJvdmlkZWRJbjpDbmV9KSxufSkoKSxyRmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGxne2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUsaSksdGhpcy5fcmVnaXN0cnk9cix0aGlzLl9pbmplY3Rvcj1vLHRoaXMub25DaGFuZ2U9KCk9Pnt9fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoTnMpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoZSl7dGhpcy5fc3RhdGU9ZT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fZm49ZSx0aGlzLm9uQ2hhbmdlPSgpPT57ZSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fWZpcmVVbmNoZWNrKGUpe3RoaXMud3JpdGVWYWx1ZShlKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEV1KSxNKFJlKSxNKGlGZSksTShYbikpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2hhbmdlKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e25hbWU6Im5hbWUiLGZvcm1Db250cm9sTmFtZToiZm9ybUNvbnRyb2xOYW1lIix2YWx1ZToidmFsdWUifSxmZWF0dXJlczpbJHQoW25GZV0pLHR0XX0pLG59KSgpLG9GZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+c0ZlKSxtdWx0aTohMH0sc0ZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsZ3t3cml0ZVZhbHVlKGUpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixwYXJzZUZsb2F0KGUpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9aT0+e2UoIiI9PWk/bnVsbDpwYXJzZUZsb2F0KGkpKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFuZ2UiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhbmdlIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbJHQoW29GZV0pLHR0XX0pLG59KSgpLFlIPW5ldyBwZSgiTmdNb2RlbFdpdGhGb3JtQ29udHJvbFdhcm5pbmciKSxhRmU9e3Byb3ZpZGU6TnMsdXNlRXhpc3Rpbmc6Sm4oKCk9Pm13KX0sbXc9KCgpPT57Y2xhc3MgbiBleHRlbmRzIE5ze2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKCksdGhpcy5fbmdNb2RlbFdhcm5pbmdDb25maWc9byx0aGlzLnVwZGF0ZT1uZXcgRyx0aGlzLl9uZ01vZGVsV2FybmluZ1NlbnQ9ITEsdGhpcy5fc2V0VmFsaWRhdG9ycyhlKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaSksdGhpcy52YWx1ZUFjY2Vzc29yPVdIKDAscil9c2V0IGlzRGlzYWJsZWQoZSl7fW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuX2lzQ29udHJvbENoYW5nZWQoZSkpe2xldCBpPWUuZm9ybS5wcmV2aW91c1ZhbHVlO2kmJk4yKGksdGhpcywhMSksZncodGhpcy5mb3JtLHRoaXMpLHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1HSChlLHRoaXMudmlld01vZGVsKSYmKHRoaXMuZm9ybS5zZXRWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmTjIodGhpcy5mb3JtLHRoaXMsITEpfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfXZpZXdUb01vZGVsVXBkYXRlKGUpe3RoaXMudmlld01vZGVsPWUsdGhpcy51cGRhdGUuZW1pdChlKX1faXNDb250cm9sQ2hhbmdlZChlKXtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpfX1yZXR1cm4gbi5fbmdNb2RlbFdhcm5pbmdTZW50T25jZT0hMSxuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oTG8sMTApLE0oTmgsMTApLE0oTm8sMTApLE0oWUgsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e2Zvcm06WyJmb3JtQ29udHJvbCIsImZvcm0iXSxpc0Rpc2FibGVkOlsiZGlzYWJsZWQiLCJpc0Rpc2FibGVkIl0sbW9kZWw6WyJuZ01vZGVsIiwibW9kZWwiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ0Zvcm0iXSxmZWF0dXJlczpbJHQoW2FGZV0pLHR0LEZ0XX0pLG59KSgpLGxGZT17cHJvdmlkZTpGcyx1c2VFeGlzdGluZzpKbigoKT0+VmgpfSxWaD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoZSxpKXtzdXBlcigpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+dGhpcy5fdXBkYXRlRG9tVmFsdWUoKSx0aGlzLmRpcmVjdGl2ZXM9W10sdGhpcy5mb3JtPW51bGwsdGhpcy5uZ1N1Ym1pdD1uZXcgRyx0aGlzLl9zZXRWYWxpZGF0b3JzKGUpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhpKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLl9jaGVja0Zvcm1QcmVzZW50KCksZS5oYXNPd25Qcm9wZXJ0eSgiZm9ybSIpJiYodGhpcy5fdXBkYXRlVmFsaWRhdG9ycygpLHRoaXMuX3VwZGF0ZURvbVZhbHVlKCksdGhpcy5fdXBkYXRlUmVnaXN0cmF0aW9ucygpLHRoaXMuX29sZEZvcm09dGhpcy5mb3JtKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybSYmKEIyKHRoaXMuZm9ybSx0aGlzKSx0aGlzLmZvcm0uX29uQ29sbGVjdGlvbkNoYW5nZT09PXRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSYmdGhpcy5mb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWFkZENvbnRyb2woZSl7bGV0IGk9dGhpcy5mb3JtLmdldChlLnBhdGgpO3JldHVybiBmdyhpLGUpLGkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5kaXJlY3RpdmVzLnB1c2goZSksaX1nZXRDb250cm9sKGUpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGUucGF0aCl9cmVtb3ZlQ29udHJvbChlKXtOMihlLmNvbnRyb2x8fG51bGwsZSwhMSksZnVuY3Rpb24obix0KXtsZXQgZT1uLmluZGV4T2YodCk7ZT4tMSYmbi5zcGxpY2UoZSwxKX0odGhpcy5kaXJlY3RpdmVzLGUpfWFkZEZvcm1Hcm91cChlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUdyb3VwKGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1Hcm91cChlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfWFkZEZvcm1BcnJheShlKXt0aGlzLl9zZXRVcEZvcm1Db250YWluZXIoZSl9cmVtb3ZlRm9ybUFycmF5KGUpe3RoaXMuX2NsZWFuVXBGb3JtQ29udGFpbmVyKGUpfWdldEZvcm1BcnJheShlKXtyZXR1cm4gdGhpcy5mb3JtLmdldChlLnBhdGgpfXVwZGF0ZU1vZGVsKGUsaSl7dGhpcy5mb3JtLmdldChlLnBhdGgpLnNldFZhbHVlKGkpfW9uU3VibWl0KGUpe3JldHVybiB0aGlzLnN1Ym1pdHRlZD0hMCxibmUodGhpcy5mb3JtLHRoaXMuZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGUpLCJkaWFsb2ciPT09ZT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGUpe3RoaXMuZm9ybS5yZXNldChlKSx0aGlzLnN1Ym1pdHRlZD0hMX1fdXBkYXRlRG9tVmFsdWUoKXt0aGlzLmRpcmVjdGl2ZXMuZm9yRWFjaChlPT57bGV0IGk9ZS5jb250cm9sLHI9dGhpcy5mb3JtLmdldChlLnBhdGgpO2khPT1yJiYoTjIoaXx8bnVsbCxlKSwobj0+biBpbnN0YW5jZW9mIEJoKShyKSYmKGZ3KHIsZSksZS5jb250cm9sPXIpKX0pLHRoaXMuZm9ybS5fdXBkYXRlVHJlZVZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fc2V0VXBGb3JtQ29udGFpbmVyKGUpe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTt5bmUoaSxlKSxpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jbGVhblVwRm9ybUNvbnRhaW5lcihlKXtpZih0aGlzLmZvcm0pe2xldCBpPXRoaXMuZm9ybS5nZXQoZS5wYXRoKTtpJiZmdW5jdGlvbihuLHQpe3JldHVybiBCMihuLHQpfShpLGUpJiZpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfX1fdXBkYXRlUmVnaXN0cmF0aW9ucygpe3RoaXMuZm9ybS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSx0aGlzLl9vbGRGb3JtJiZ0aGlzLl9vbGRGb3JtLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pfV91cGRhdGVWYWxpZGF0b3JzKCl7akgodGhpcy5mb3JtLHRoaXMpLHRoaXMuX29sZEZvcm0mJkIyKHRoaXMuX29sZEZvcm0sdGhpcyl9X2NoZWNrRm9ybVByZXNlbnQoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oTG8sMTApLE0oTmgsMTApKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgic3VibWl0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN1Ym1pdChvKX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2V0KCl9KX0saW5wdXRzOntmb3JtOlsiZm9ybUdyb3VwIiwiZm9ybSJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOlskdChbbEZlXSksdHQsRnRdfSksbn0pKCksY0ZlPXtwcm92aWRlOkZzLHVzZUV4aXN0aW5nOkpuKCgpPT5NbmUpfSxNbmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhuZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKX1fY2hlY2tQYXJlbnRUeXBlKCl7U25lKHRoaXMuX3BhcmVudCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oRnMsMTMpLE0oTG8sMTApLE0oTmgsMTApKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtR3JvdXBOYW1lIiwibmFtZSJdfSxmZWF0dXJlczpbJHQoW2NGZV0pLHR0XX0pLG59KSgpLHVGZT17cHJvdmlkZTpGcyx1c2VFeGlzdGluZzpKbigoKT0+d25lKX0sd25lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBGc3tjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoKSx0aGlzLl9wYXJlbnQ9ZSx0aGlzLl9zZXRWYWxpZGF0b3JzKGkpLHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhyKX1uZ09uSW5pdCgpe3RoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuZm9ybURpcmVjdGl2ZS5hZGRGb3JtQXJyYXkodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVGb3JtQXJyYXkodGhpcyl9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtRGlyZWN0aXZlLmdldEZvcm1BcnJheSh0aGlzKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBVMihudWxsPT10aGlzLm5hbWU/dGhpcy5uYW1lOnRoaXMubmFtZS50b1N0cmluZygpLHRoaXMuX3BhcmVudCl9X2NoZWNrUGFyZW50VHlwZSgpe1NuZSh0aGlzLl9wYXJlbnQpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEZzLDEzKSxNKExvLDEwKSxNKE5oLDEwKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1BcnJheU5hbWUiLCIiXV0saW5wdXRzOntuYW1lOlsiZm9ybUFycmF5TmFtZSIsIm5hbWUiXX0sZmVhdHVyZXM6WyR0KFt1RmVdKSx0dF19KSxufSkoKTtmdW5jdGlvbiBTbmUobil7cmV0dXJuIShuIGluc3RhbmNlb2YgTW5lfHxuIGluc3RhbmNlb2YgVmh8fG4gaW5zdGFuY2VvZiB3bmUpfXZhciBkRmU9e3Byb3ZpZGU6TnMsdXNlRXhpc3Rpbmc6Sm4oKCk9PnBGZSl9LHBGZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTnN7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX25nTW9kZWxXYXJuaW5nQ29uZmlnPXMsdGhpcy5fYWRkZWQ9ITEsdGhpcy51cGRhdGU9bmV3IEcsdGhpcy5fbmdNb2RlbFdhcm5pbmdTZW50PSExLHRoaXMuX3BhcmVudD1lLHRoaXMuX3NldFZhbGlkYXRvcnMoaSksdGhpcy5fc2V0QXN5bmNWYWxpZGF0b3JzKHIpLHRoaXMudmFsdWVBY2Nlc3Nvcj1XSCgwLG8pfXNldCBpc0Rpc2FibGVkKGUpe31uZ09uQ2hhbmdlcyhlKXt0aGlzLl9hZGRlZHx8dGhpcy5fc2V0VXBDb250cm9sKCksR0goZSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsLHRoaXMuZm9ybURpcmVjdGl2ZS51cGRhdGVNb2RlbCh0aGlzLHRoaXMubW9kZWwpKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9dmlld1RvTW9kZWxVcGRhdGUoZSl7dGhpcy52aWV3TW9kZWw9ZSx0aGlzLnVwZGF0ZS5lbWl0KGUpfWdldCBwYXRoKCl7cmV0dXJuIFUyKG51bGw9PXRoaXMubmFtZT90aGlzLm5hbWU6dGhpcy5uYW1lLnRvU3RyaW5nKCksdGhpcy5fcGFyZW50KX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH1fY2hlY2tQYXJlbnRUeXBlKCl7fV9zZXRVcENvbnRyb2woKXt0aGlzLl9jaGVja1BhcmVudFR5cGUoKSx0aGlzLmNvbnRyb2w9dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fYWRkZWQ9ITB9fXJldHVybiBuLl9uZ01vZGVsV2FybmluZ1NlbnRPbmNlPSExLG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShGcywxMyksTShMbywxMCksTShOaCwxMCksTShObywxMCksTShZSCw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImZvcm1Db250cm9sTmFtZSIsIiJdXSxpbnB1dHM6e25hbWU6WyJmb3JtQ29udHJvbE5hbWUiLCJuYW1lIl0saXNEaXNhYmxlZDpbImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOlsibmdNb2RlbCIsIm1vZGVsIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGZlYXR1cmVzOlskdChbZEZlXSksdHQsRnRdfSksbn0pKCksaEZlPXtwcm92aWRlOk5vLHVzZUV4aXN0aW5nOkpuKCgpPT5UbmUpLG11bHRpOiEwfTtmdW5jdGlvbiBFbmUobix0KXtyZXR1cm4gbnVsbD09bj9gJHt0fWA6KHQmJiJvYmplY3QiPT10eXBlb2YgdCYmKHQ9Ik9iamVjdCIpLGAke259OiAke3R9YC5zbGljZSgwLDUwKSl9dmFyIFRuZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgbGd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoZSl7dGhpcy5fY29tcGFyZVdpdGg9ZX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZTtsZXQgcj1FbmUodGhpcy5fZ2V0T3B0aW9uSWQoZSksZSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLHIpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShpKSxlKHRoaXMudmFsdWUpfX1fcmVnaXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGUpe2ZvcihsZXQgaSBvZiBBcnJheS5mcm9tKHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoaSksZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSk6ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNoYW5nZShvLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOlskdChbaEZlXSksdHRdfSksbn0pKCksRG5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9yZW5kZXJlcj1pLHRoaXMuX3NlbGVjdD1yLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1ZShlKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCxlKSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoRW5lKHRoaXMuaWQsZSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoZSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oRXUpLE0oVG5lLDkpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KSxufSkoKSxtRmU9e3Byb3ZpZGU6Tm8sdXNlRXhpc3Rpbmc6Sm4oKCk9PkFuZSksbXVsdGk6ITB9O2Z1bmN0aW9uIFF0ZShuLHQpe3JldHVybiBudWxsPT1uP2Ake3R9YDooInN0cmluZyI9PXR5cGVvZiB0JiYodD1gJyR7dH0nYCksdCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodD0iT2JqZWN0IiksYCR7bn06ICR7dH1gLnNsaWNlKDAsNTApKX12YXIgQW5lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChlKXt0aGlzLl9jb21wYXJlV2l0aD1lfXdyaXRlVmFsdWUoZSl7bGV0IGk7aWYodGhpcy52YWx1ZT1lLEFycmF5LmlzQXJyYXkoZSkpe2xldCByPWUubWFwKG89PnRoaXMuX2dldE9wdGlvbklkKG8pKTtpPShvLHMpPT57by5fc2V0U2VsZWN0ZWQoci5pbmRleE9mKHMudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGk9KHIsbyk9PntyLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGkpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1pPT57bGV0IHI9W10sbz1pLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1vKXtsZXQgcz1vO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgYz10aGlzLl9nZXRPcHRpb25WYWx1ZShzW2FdLnZhbHVlKTtyLnB1c2goYyl9fWVsc2V7bGV0IHM9aS5vcHRpb25zO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKXtsZXQgbD1zW2FdO2lmKGwuc2VsZWN0ZWQpe2xldCBjPXRoaXMuX2dldE9wdGlvblZhbHVlKGwudmFsdWUpO3IucHVzaChjKX19fXRoaXMudmFsdWU9cixlKHIpfX1fcmVnaXN0ZXJPcHRpb24oZSl7bGV0IGk9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGksZSksaX1fZ2V0T3B0aW9uSWQoZSl7Zm9yKGxldCBpIG9mIEFycmF5LmZyb20odGhpcy5fb3B0aW9uTWFwLmtleXMoKSkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChpKS5fdmFsdWUsZSkpcmV0dXJuIGk7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGUpe2xldCBpPWZ1bmN0aW9uKG4pe3JldHVybiBuLnNwbGl0KCI6IilbMF19KGUpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGkpP3RoaXMuX29wdGlvbk1hcC5nZXQoaSkuX3ZhbHVlOmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25DaGFuZ2Uoby50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbJHQoW21GZV0pLHR0XX0pLG59KSgpLEluZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcmVuZGVyZXI9aSx0aGlzLl9zZWxlY3Q9cix0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVlKGUpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWUsdGhpcy5fc2V0RWxlbWVudFZhbHVlKFF0ZSh0aGlzLmlkLGUpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoZSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1lLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShRdGUodGhpcy5pZCxlKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGUpfV9zZXRFbGVtZW50VmFsdWUoZSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZSl9X3NldFNlbGVjdGVkKGUpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGUpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEV1KSxNKEFuZSw5KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksbn0pKCk7ZnVuY3Rpb24gUG5lKG4pe3JldHVybiJudW1iZXIiPT10eXBlb2Ygbj9uOnBhcnNlSW50KG4sMTApfWZ1bmN0aW9uIFJuZShuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIG4/bjpwYXJzZUZsb2F0KG4pfXZhciBjZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPVAyfW5nT25DaGFuZ2VzKGUpe2lmKHRoaXMuaW5wdXROYW1lIGluIGUpe2xldCBpPXRoaXMubm9ybWFsaXplSW5wdXQoZVt0aGlzLmlucHV0TmFtZV0uY3VycmVudFZhbHVlKTt0aGlzLl9lbmFibGVkPXRoaXMuZW5hYmxlZChpKSx0aGlzLl92YWxpZGF0b3I9dGhpcy5fZW5hYmxlZD90aGlzLmNyZWF0ZVZhbGlkYXRvcihpKTpQMix0aGlzLl9vbkNoYW5nZSYmdGhpcy5fb25DaGFuZ2UoKX19dmFsaWRhdGUoZSl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRvcihlKX1yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9ZW5hYmxlZChlKXtyZXR1cm4gbnVsbCE9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLF9GZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+dkZlKSxtdWx0aTohMH0sdkZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5SbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+JHRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWF4IiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1heCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXgiLGkuX2VuYWJsZWQ/aS5tYXg6bnVsbCl9LGlucHV0czp7bWF4OiJtYXgifSxmZWF0dXJlczpbJHQoW19GZV0pLHR0XX0pLG59KSgpLHlGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+YkZlKSxtdWx0aTohMH0sYkZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbiIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5SbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+SnRlKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsIm1pbiIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtaW4iLGkuX2VuYWJsZWQ/aS5taW46bnVsbCl9LGlucHV0czp7bWluOiJtaW4ifSxmZWF0dXJlczpbJHQoW3lGZV0pLHR0XX0pLG59KSgpLHhGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+T25lKSxtdWx0aTohMH0sQ0ZlPXtwcm92aWRlOkxvLHVzZUV4aXN0aW5nOkpuKCgpPT5ndyksbXVsdGk6ITB9LE9uZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgY2d7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD1OVCx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5lbmV9ZW5hYmxlZChlKXtyZXR1cm4gZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgicmVxdWlyZWQiLGkuX2VuYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIn0sZmVhdHVyZXM6WyR0KFt4RmVdKSx0dF19KSxufSkoKSxndz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgT25le2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT50bmV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInJlcXVpcmVkIixpLl9lbmFibGVkPyIiOm51bGwpfSxmZWF0dXJlczpbJHQoW0NGZV0pLHR0XX0pLG59KSgpLE1GZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+d0ZlKSxtdWx0aTohMH0sd0ZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9ImVtYWlsIix0aGlzLm5vcm1hbGl6ZUlucHV0PU5ULHRoaXMuY3JlYXRlVmFsaWRhdG9yPWU9Pm5uZX1lbmFibGVkKGUpe3JldHVybiBlfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImVtYWlsIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJlbWFpbCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJlbWFpbCIsIiIsIm5nTW9kZWwiLCIiXV0saW5wdXRzOntlbWFpbDoiZW1haWwifSxmZWF0dXJlczpbJHQoW01GZV0pLHR0XX0pLG59KSgpLFNGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+RUZlKSxtdWx0aTohMH0sRUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1pbmxlbmd0aCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5QbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+aW5lKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1pbmxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWlubGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1pbmxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtaW5sZW5ndGgiLGkuX2VuYWJsZWQ/aS5taW5sZW5ndGg6bnVsbCl9LGlucHV0czp7bWlubGVuZ3RoOiJtaW5sZW5ndGgifSxmZWF0dXJlczpbJHQoW1NGZV0pLHR0XX0pLG59KSgpLFRGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+REZlKSxtdWx0aTohMH0sREZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9Im1heGxlbmd0aCIsdGhpcy5ub3JtYWxpemVJbnB1dD1lPT5QbmUoZSksdGhpcy5jcmVhdGVWYWxpZGF0b3I9ZT0+cm5lKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1heGxlbmd0aCIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwibWF4bGVuZ3RoIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbIiIsIm1heGxlbmd0aCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJnplKCJtYXhsZW5ndGgiLGkuX2VuYWJsZWQ/aS5tYXhsZW5ndGg6bnVsbCl9LGlucHV0czp7bWF4bGVuZ3RoOiJtYXhsZW5ndGgifSxmZWF0dXJlczpbJHQoW1RGZV0pLHR0XX0pLG59KSgpLEFGZT17cHJvdmlkZTpMbyx1c2VFeGlzdGluZzpKbigoKT0+SUZlKSxtdWx0aTohMH0sSUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBjZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InBhdHRlcm4iLHRoaXMubm9ybWFsaXplSW5wdXQ9ZT0+ZSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1lPT5vbmUoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiIiwicGF0dGVybiIsIiIsImZvcm1Db250cm9sIiwiIl0sWyIiLCJwYXR0ZXJuIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmemUoInBhdHRlcm4iLGkuX2VuYWJsZWQ/aS5wYXR0ZXJuOm51bGwpfSxpbnB1dHM6e3BhdHRlcm46InBhdHRlcm4ifSxmZWF0dXJlczpbJHQoW0FGZV0pLHR0XX0pLG59KSgpLGtuZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbQ25lXX0pLG59KSgpLGpyPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltrbmVdfSksbn0pKCksejI9KCgpPT57Y2xhc3MgbntzdGF0aWMgd2l0aENvbmZpZyhlKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOllILHVzZVZhbHVlOmUud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbH1dfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W2tuZV19KSxufSkoKSxQRmU9KG5ldyBJYygiMTQuMi4xMSIpLFsidHJpZ2dlciJdKSxSRmU9WyJwYW5lbCJdO2Z1bmN0aW9uIE9GZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsOCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSkseXQoZS5wbGFjZWhvbGRlcil9fWZ1bmN0aW9uIGtGZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMTIpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoMik7QygxKSx5dChlLnRyaWdnZXJWYWx1ZSl9fWZ1bmN0aW9uIEZGZShuLHQpezEmbiYmVm4oMCwwLFsiKm5nU3dpdGNoQ2FzZSIsInRydWUiXSl9ZnVuY3Rpb24gTkZlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiw5KSxFKDEsa0ZlLDIsMSwic3BhbiIsMTApLEUoMixGRmUsMSwwLCJuZy1jb250ZW50IiwxMSksdigpKSwyJm4mJih5KCJuZ1N3aXRjaCIsISFTKCkuY3VzdG9tVHJpZ2dlciksQygyKSx5KCJuZ1N3aXRjaENhc2UiLCEwKSl9ZnVuY3Rpb24gTEZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxMykoMSwiZGl2IiwxNCwxNSksUCgiQHRyYW5zZm9ybVBhbmVsLmRvbmUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbS5uZXh0KHIudG9TdGF0ZSkpfSkoImtleWRvd24iLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX2hhbmRsZUtleWRvd24ocikpfSksVm4oMywxKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJAdHJhbnNmb3JtUGFuZWxXcmFwIix2b2lkIDApLEMoMSksUXgoIm1hdC1zZWxlY3QtcGFuZWwgIixlLl9nZXRQYW5lbFRoZW1lKCksIiIpLFB0KCJ0cmFuc2Zvcm0tb3JpZ2luIixlLl90cmFuc2Zvcm1PcmlnaW4pKCJmb250LXNpemUiLGUuX3RyaWdnZXJGb250U2l6ZSwicHgiKSx5KCJuZ0NsYXNzIixlLnBhbmVsQ2xhc3MpKCJAdHJhbnNmb3JtUGFuZWwiLGUubXVsdGlwbGU/InNob3dpbmctbXVsdGlwbGUiOiJzaG93aW5nIiksemUoImlkIixlLmlkKyItcGFuZWwiKSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLGUubXVsdGlwbGUpKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsZS5fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieSgpKX19dmFyIEJGZT1bW1sibWF0LXNlbGVjdC10cmlnZ2VyIl1dLCIqIl0sVkZlPVsibWF0LXNlbGVjdC10cmlnZ2VyIiwiKiJdLEZuZT17dHJhbnNmb3JtUGFuZWxXcmFwOktyKCJ0cmFuc2Zvcm1QYW5lbFdyYXAiLFtMaSgiKiA9PiB2b2lkIixJbSgiQHRyYW5zZm9ybVBhbmVsIixbQW0oKV0se29wdGlvbmFsOiEwfSkpXSksdHJhbnNmb3JtUGFuZWw6S3IoInRyYW5zZm9ybVBhbmVsIixba2koInZvaWQiLGduKHt0cmFuc2Zvcm06InNjYWxlWSgwLjgpIixtaW5XaWR0aDoiMTAwJSIsb3BhY2l0eTowfSkpLGtpKCJzaG93aW5nIixnbih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyAzMnB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLGtpKCJzaG93aW5nLW11bHRpcGxlIixnbih7b3BhY2l0eToxLG1pbldpZHRoOiJjYWxjKDEwMCUgKyA2NHB4KSIsdHJhbnNmb3JtOiJzY2FsZVkoMSkifSkpLExpKCJ2b2lkID0+ICoiLGppKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIpKSxMaSgiKiA9PiB2b2lkIixqaSgiMTAwbXMgMjVtcyBsaW5lYXIiLGduKHtvcGFjaXR5OjB9KSkpXSl9LE5uZT0wLEJuZT1uZXcgcGUoIm1hdC1zZWxlY3Qtc2Nyb2xsLXN0cmF0ZWd5IiksakZlPW5ldyBwZSgiTUFUX1NFTEVDVF9DT05GSUciKSxHRmU9e3Byb3ZpZGU6Qm5lLGRlcHM6W3RyXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sV0ZlPXFvKG9jKHNvKER2KGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkscil7dGhpcy5fZWxlbWVudFJlZj1uLHRoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj10LHRoaXMuX3BhcmVudEZvcm09ZSx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9aSx0aGlzLm5nQ29udHJvbD1yLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBrZX19KSkpKSxxRmU9bmV3IHBlKCJNYXRTZWxlY3RUcmlnZ2VyIiksWUZlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBXRmV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtKXtzdXBlcihzLG8sbCxjLGQpLHRoaXMuX3ZpZXdwb3J0UnVsZXI9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX25nWm9uZT1yLHRoaXMuX2Rpcj1hLHRoaXMuX3BhcmVudEZvcm1GaWVsZD11LHRoaXMuX2xpdmVBbm5vdW5jZXI9Zix0aGlzLl9kZWZhdWx0T3B0aW9ucz1tLHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9jb21wYXJlV2l0aD0oeCxnKT0+eD09PWcsdGhpcy5fdWlkPSJtYXQtc2VsZWN0LSIrTm5lKyssdGhpcy5fdHJpZ2dlckFyaWFMYWJlbGxlZEJ5PW51bGwsdGhpcy5fZGVzdHJveT1uZXcga2UsdGhpcy5fb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX29uVG91Y2hlZD0oKT0+e30sdGhpcy5fdmFsdWVJZD0ibWF0LXNlbGVjdC12YWx1ZS0iK05uZSsrLHRoaXMuX3BhbmVsRG9uZUFuaW1hdGluZ1N0cmVhbT1uZXcga2UsdGhpcy5fb3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnM/Lm92ZXJsYXlQYW5lbENsYXNzfHwiIix0aGlzLl9mb2N1c2VkPSExLHRoaXMuY29udHJvbFR5cGU9Im1hdC1zZWxlY3QiLHRoaXMuX211bHRpcGxlPSExLHRoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmc9dGhpcy5fZGVmYXVsdE9wdGlvbnM/LmRpc2FibGVPcHRpb25DZW50ZXJpbmc/PyExLHRoaXMuYXJpYUxhYmVsPSIiLHRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcz1RYSgoKT0+e2xldCB4PXRoaXMub3B0aW9ucztyZXR1cm4geD94LmNoYW5nZXMucGlwZSh6bih4KSx1aSgoKT0+SnQoLi4ueC5tYXAoZz0+Zy5vblNlbGVjdGlvbkNoYW5nZSkpKSk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSksdWkoKCk9PnRoaXMub3B0aW9uU2VsZWN0aW9uQ2hhbmdlcykpfSksdGhpcy5vcGVuZWRDaGFuZ2U9bmV3IEcsdGhpcy5fb3BlbmVkU3RyZWFtPXRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoWWUoeD0+eCksTCgoKT0+e30pKSx0aGlzLl9jbG9zZWRTdHJlYW09dGhpcy5vcGVuZWRDaGFuZ2UucGlwZShZZSh4PT4heCksTCgoKT0+e30pKSx0aGlzLnNlbGVjdGlvbkNoYW5nZT1uZXcgRyx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3Nvcj10aGlzKSxudWxsIT1tPy50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiYodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbD1tLnR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeT1oLHRoaXMuX3Njcm9sbFN0cmF0ZWd5PXRoaXMuX3Njcm9sbFN0cmF0ZWd5RmFjdG9yeSgpLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocCl8fDAsdGhpcy5pZD10aGlzLmlkfWdldCBmb2N1c2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWR8fHRoaXMuX3BhbmVsT3Blbn1nZXQgcGxhY2Vob2xkZXIoKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJ9c2V0IHBsYWNlaG9sZGVyKGUpe3RoaXMuX3BsYWNlaG9sZGVyPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCByZXF1aXJlZCgpe3JldHVybiB0aGlzLl9yZXF1aXJlZD8/dGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihGby5yZXF1aXJlZCk/PyExfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZShlKXt0aGlzLl9tdWx0aXBsZT1SdChlKX1nZXQgZGlzYWJsZU9wdGlvbkNlbnRlcmluZygpe3JldHVybiB0aGlzLl9kaXNhYmxlT3B0aW9uQ2VudGVyaW5nfXNldCBkaXNhYmxlT3B0aW9uQ2VudGVyaW5nKGUpe3RoaXMuX2Rpc2FibGVPcHRpb25DZW50ZXJpbmc9UnQoZSl9Z2V0IGNvbXBhcmVXaXRoKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmVXaXRofXNldCBjb21wYXJlV2l0aChlKXt0aGlzLl9jb21wYXJlV2l0aD1lLHRoaXMuX3NlbGVjdGlvbk1vZGVsJiZ0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXNldCB2YWx1ZShlKXt0aGlzLl9hc3NpZ25WYWx1ZShlKSYmdGhpcy5fb25DaGFuZ2UoZSl9Z2V0IHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwoKXtyZXR1cm4gdGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbH1zZXQgdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbChlKXt0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsPUJpKGUpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoZSl7dGhpcy5faWQ9ZXx8dGhpcy5fdWlkLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBBaCh0aGlzLm11bHRpcGxlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksdGhpcy5fcGFuZWxEb25lQW5pbWF0aW5nU3RyZWFtLnBpcGUoeWkoKSxzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT50aGlzLl9wYW5lbERvbmVBbmltYXRpbmcodGhpcy5wYW5lbE9wZW4pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9pbml0S2V5TWFuYWdlcigpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZShzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGU9PntlLmFkZGVkLmZvckVhY2goaT0+aS5zZWxlY3QoKSksZS5yZW1vdmVkLmZvckVhY2goaT0+aS5kZXNlbGVjdCgpKX0pLHRoaXMub3B0aW9ucy5jaGFuZ2VzLnBpcGUoem4obnVsbCksc3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3Jlc2V0T3B0aW9ucygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX0pfW5nRG9DaGVjaygpe2xldCBlPXRoaXMuX2dldFRyaWdnZXJBcmlhTGFiZWxsZWRieSgpLGk9dGhpcy5uZ0NvbnRyb2w7aWYoZSE9PXRoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeSl7bGV0IHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O3RoaXMuX3RyaWdnZXJBcmlhTGFiZWxsZWRCeT1lLGU/ci5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsZSk6ci5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIpfWkmJih0aGlzLl9wcmV2aW91c0NvbnRyb2whPT1pLmNvbnRyb2wmJih2b2lkIDAhPT10aGlzLl9wcmV2aW91c0NvbnRyb2wmJm51bGwhPT1pLmRpc2FibGVkJiZpLmRpc2FibGVkIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9aS5kaXNhYmxlZCksdGhpcy5fcHJldmlvdXNDb250cm9sPWkuY29udHJvbCksdGhpcy51cGRhdGVFcnJvclN0YXRlKCkpfW5nT25DaGFuZ2VzKGUpeyhlLmRpc2FibGVkfHxlLnVzZXJBcmlhRGVzY3JpYmVkQnkpJiZ0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCksZS50eXBlYWhlYWREZWJvdW5jZUludGVydmFsJiZ0aGlzLl9rZXlNYW5hZ2VyJiZ0aGlzLl9rZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQodGhpcy5fdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95Lm5leHQoKSx0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCksdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX10b2dnbGUoKXt0aGlzLnBhbmVsT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9b3Blbigpe3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3BhbmVsT3Blbj0hMCx0aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24obnVsbCksdGhpcy5faGlnaGxpZ2h0Q29ycmVjdE9wdGlvbigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1jbG9zZSgpe3RoaXMuX3BhbmVsT3BlbiYmKHRoaXMuX3BhbmVsT3Blbj0hMSx0aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5faXNSdGwoKT8icnRsIjoibHRyIiksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fb25Ub3VjaGVkKCkpfXdyaXRlVmFsdWUoZSl7dGhpcy5fYXNzaWduVmFsdWUoZSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgcGFuZWxPcGVuKCl7cmV0dXJuIHRoaXMuX3BhbmVsT3Blbn1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5tdWx0aXBsZT90aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWR8fFtdOnRoaXMuX3NlbGVjdGlvbk1vZGVsPy5zZWxlY3RlZFswXX1nZXQgdHJpZ2dlclZhbHVlKCl7aWYodGhpcy5lbXB0eSlyZXR1cm4iIjtpZih0aGlzLl9tdWx0aXBsZSl7bGV0IGU9dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQubWFwKGk9Pmkudmlld1ZhbHVlKTtyZXR1cm4gdGhpcy5faXNSdGwoKSYmZS5yZXZlcnNlKCksZS5qb2luKCIsICIpfXJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXS52aWV3VmFsdWV9X2lzUnRsKCl7cmV0dXJuISF0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlfV9oYW5kbGVLZXlkb3duKGUpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLnBhbmVsT3Blbj90aGlzLl9oYW5kbGVPcGVuS2V5ZG93bihlKTp0aGlzLl9oYW5kbGVDbG9zZWRLZXlkb3duKGUpKX1faGFuZGxlQ2xvc2VkS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGUscj00MD09PWl8fDM4PT09aXx8Mzc9PT1pfHwzOT09PWksbz0xMz09PWl8fDMyPT09aSxzPXRoaXMuX2tleU1hbmFnZXI7aWYoIXMuaXNUeXBpbmcoKSYmbyYmIWtyKGUpfHwodGhpcy5tdWx0aXBsZXx8ZS5hbHRLZXkpJiZyKWUucHJldmVudERlZmF1bHQoKSx0aGlzLm9wZW4oKTtlbHNlIGlmKCF0aGlzLm11bHRpcGxlKXtsZXQgYT10aGlzLnNlbGVjdGVkO3Mub25LZXlkb3duKGUpO2xldCBsPXRoaXMuc2VsZWN0ZWQ7bCYmYSE9PWwmJnRoaXMuX2xpdmVBbm5vdW5jZXIuYW5ub3VuY2UobC52aWV3VmFsdWUsMWU0KX19X2hhbmRsZU9wZW5LZXlkb3duKGUpe2xldCBpPXRoaXMuX2tleU1hbmFnZXIscj1lLmtleUNvZGUsbz00MD09PXJ8fDM4PT09cixzPWkuaXNUeXBpbmcoKTtpZihvJiZlLmFsdEtleSllLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSgpO2Vsc2UgaWYoc3x8MTMhPT1yJiYzMiE9PXJ8fCFpLmFjdGl2ZUl0ZW18fGtyKGUpKWlmKCFzJiZ0aGlzLl9tdWx0aXBsZSYmNjU9PT1yJiZlLmN0cmxLZXkpe2UucHJldmVudERlZmF1bHQoKTtsZXQgYT10aGlzLm9wdGlvbnMuc29tZShsPT4hbC5kaXNhYmxlZCYmIWwuc2VsZWN0ZWQpO3RoaXMub3B0aW9ucy5mb3JFYWNoKGw9PntsLmRpc2FibGVkfHwoYT9sLnNlbGVjdCgpOmwuZGVzZWxlY3QoKSl9KX1lbHNle2xldCBhPWkuYWN0aXZlSXRlbUluZGV4O2kub25LZXlkb3duKGUpLHRoaXMuX211bHRpcGxlJiZvJiZlLnNoaWZ0S2V5JiZpLmFjdGl2ZUl0ZW0mJmkuYWN0aXZlSXRlbUluZGV4IT09YSYmaS5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpfWVsc2UgZS5wcmV2ZW50RGVmYXVsdCgpLGkuYWN0aXZlSXRlbS5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKX1fb25Gb2N1cygpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLl9mb2N1c2VkPSEwLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uQmx1cigpe3RoaXMuX2ZvY3VzZWQ9ITEsIXRoaXMuZGlzYWJsZWQmJiF0aGlzLnBhbmVsT3BlbiYmKHRoaXMuX29uVG91Y2hlZCgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X29uQXR0YWNoZWQoKXt0aGlzLl9vdmVybGF5RGlyLnBvc2l0aW9uQ2hhbmdlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLl9wb3NpdGlvbmluZ1NldHRsZWQoKX0pfV9nZXRQYW5lbFRoZW1lKCl7cmV0dXJuIHRoaXMuX3BhcmVudEZvcm1GaWVsZD9gbWF0LSR7dGhpcy5fcGFyZW50Rm9ybUZpZWxkLmNvbG9yfWA6IiJ9Z2V0IGVtcHR5KCl7cmV0dXJuIXRoaXMuX3NlbGVjdGlvbk1vZGVsfHx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCl9X2luaXRpYWxpemVTZWxlY3Rpb24oKXtQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5uZ0NvbnRyb2wmJih0aGlzLl92YWx1ZT10aGlzLm5nQ29udHJvbC52YWx1ZSksdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0aGlzLl92YWx1ZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSl7aWYodGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQuZm9yRWFjaChpPT5pLnNldEluYWN0aXZlU3R5bGVzKCkpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksdGhpcy5tdWx0aXBsZSYmZSlBcnJheS5pc0FycmF5KGUpLGUuZm9yRWFjaChpPT50aGlzLl9zZWxlY3RPcHRpb25CeVZhbHVlKGkpKSx0aGlzLl9zb3J0VmFsdWVzKCk7ZWxzZXtsZXQgaT10aGlzLl9zZWxlY3RPcHRpb25CeVZhbHVlKGUpO2k/dGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGkpOnRoaXMucGFuZWxPcGVufHx0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oLTEpfXRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9zZWxlY3RPcHRpb25CeVZhbHVlKGUpe2xldCBpPXRoaXMub3B0aW9ucy5maW5kKHI9PntpZih0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKHIpKXJldHVybiExO3RyeXtyZXR1cm4gbnVsbCE9ci52YWx1ZSYmdGhpcy5fY29tcGFyZVdpdGgoci52YWx1ZSxlKX1jYXRjaHtyZXR1cm4hMX19KTtyZXR1cm4gaSYmdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGkpLGl9X2Fzc2lnblZhbHVlKGUpe3JldHVybiEhKGUhPT10aGlzLl92YWx1ZXx8dGhpcy5fbXVsdGlwbGUmJkFycmF5LmlzQXJyYXkoZSkpJiYodGhpcy5vcHRpb25zJiZ0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpLHRoaXMuX3ZhbHVlPWUsITApfV9pbml0S2V5TWFuYWdlcigpe3RoaXMuX2tleU1hbmFnZXI9bmV3IHd2KHRoaXMub3B0aW9ucykud2l0aFR5cGVBaGVhZCh0aGlzLl90eXBlYWhlYWREZWJvdW5jZUludGVydmFsKS53aXRoVmVydGljYWxPcmllbnRhdGlvbigpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5faXNSdGwoKT8icnRsIjoibHRyIikud2l0aEhvbWVBbmRFbmQoKS53aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyhbInNoaWZ0S2V5Il0pLHRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnBpcGUoc3QodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFuZWxPcGVuJiYoIXRoaXMubXVsdGlwbGUmJnRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtLl9zZWxlY3RWaWFJbnRlcmFjdGlvbigpLHRoaXMuZm9jdXMoKSx0aGlzLmNsb3NlKCkpfSksdGhpcy5fa2V5TWFuYWdlci5jaGFuZ2UucGlwZShzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fcGFuZWxPcGVuJiZ0aGlzLnBhbmVsP3RoaXMuX3Njcm9sbE9wdGlvbkludG9WaWV3KHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKTohdGhpcy5fcGFuZWxPcGVuJiYhdGhpcy5tdWx0aXBsZSYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtJiZ0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uX3NlbGVjdFZpYUludGVyYWN0aW9uKCl9KX1fcmVzZXRPcHRpb25zKCl7bGV0IGU9SnQodGhpcy5vcHRpb25zLmNoYW5nZXMsdGhpcy5fZGVzdHJveSk7dGhpcy5vcHRpb25TZWxlY3Rpb25DaGFuZ2VzLnBpcGUoc3QoZSkpLnN1YnNjcmliZShpPT57dGhpcy5fb25TZWxlY3QoaS5zb3VyY2UsaS5pc1VzZXJJbnB1dCksaS5pc1VzZXJJbnB1dCYmIXRoaXMubXVsdGlwbGUmJnRoaXMuX3BhbmVsT3BlbiYmKHRoaXMuY2xvc2UoKSx0aGlzLmZvY3VzKCkpfSksSnQoLi4udGhpcy5vcHRpb25zLm1hcChpPT5pLl9zdGF0ZUNoYW5nZXMpKS5waXBlKHN0KGUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX1fb25TZWxlY3QoZSxpKXtsZXQgcj10aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGUpO251bGwhPWUudmFsdWV8fHRoaXMuX211bHRpcGxlPyhyIT09ZS5zZWxlY3RlZCYmKGUuc2VsZWN0ZWQ/dGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGUpOnRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGUpKSxpJiZ0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZSksdGhpcy5tdWx0aXBsZSYmKHRoaXMuX3NvcnRWYWx1ZXMoKSxpJiZ0aGlzLmZvY3VzKCkpKTooZS5kZXNlbGVjdCgpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksbnVsbCE9dGhpcy52YWx1ZSYmdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcyhlLnZhbHVlKSksciE9PXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoZSkmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9X3NvcnRWYWx1ZXMoKXtpZih0aGlzLm11bHRpcGxlKXtsZXQgZT10aGlzLm9wdGlvbnMudG9BcnJheSgpO3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNvcnQoKGkscik9PnRoaXMuc29ydENvbXBhcmF0b3I/dGhpcy5zb3J0Q29tcGFyYXRvcihpLHIsZSk6ZS5pbmRleE9mKGkpLWUuaW5kZXhPZihyKSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfX1fcHJvcGFnYXRlQ2hhbmdlcyhlKXtsZXQgaT1udWxsO2k9dGhpcy5tdWx0aXBsZT90aGlzLnNlbGVjdGVkLm1hcChyPT5yLnZhbHVlKTp0aGlzLnNlbGVjdGVkP3RoaXMuc2VsZWN0ZWQudmFsdWU6ZSx0aGlzLl92YWx1ZT1pLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChpKSx0aGlzLl9vbkNoYW5nZShpKSx0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuX2dldENoYW5nZUV2ZW50KGkpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1faGlnaGxpZ2h0Q29ycmVjdE9wdGlvbigpe3RoaXMuX2tleU1hbmFnZXImJih0aGlzLmVtcHR5P3RoaXMuX2tleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk6dGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSl9X2Nhbk9wZW4oKXtyZXR1cm4hdGhpcy5fcGFuZWxPcGVuJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5vcHRpb25zPy5sZW5ndGg+MH1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoKXtpZih0aGlzLmFyaWFMYWJlbClyZXR1cm4gbnVsbDtsZXQgZT10aGlzLl9wYXJlbnRGb3JtRmllbGQ/LmdldExhYmVsSWQoKTtyZXR1cm4gdGhpcy5hcmlhTGFiZWxsZWRieT8oZT9lKyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTplfV9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpe3JldHVybiB0aGlzLnBhbmVsT3BlbiYmdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtP3RoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbS5pZDpudWxsfV9nZXRUcmlnZ2VyQXJpYUxhYmVsbGVkYnkoKXtpZih0aGlzLmFyaWFMYWJlbClyZXR1cm4gbnVsbDtsZXQgZT10aGlzLl9wYXJlbnRGb3JtRmllbGQ/LmdldExhYmVsSWQoKSxpPShlP2UrIiAiOiIiKSt0aGlzLl92YWx1ZUlkO3JldHVybiB0aGlzLmFyaWFMYWJlbGxlZGJ5JiYoaSs9IiAiK3RoaXMuYXJpYUxhYmVsbGVkYnkpLGl9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLm9wZW5lZENoYW5nZS5lbWl0KGUpfXNldERlc2NyaWJlZEJ5SWRzKGUpe2UubGVuZ3RoP3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGUuam9pbigiICIpKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5Iil9b25Db250YWluZXJDbGljaygpe3RoaXMuZm9jdXMoKSx0aGlzLm9wZW4oKX1nZXQgc2hvdWxkTGFiZWxGbG9hdCgpe3JldHVybiB0aGlzLl9wYW5lbE9wZW58fCF0aGlzLmVtcHR5fHx0aGlzLl9mb2N1c2VkJiYhIXRoaXMuX3BsYWNlaG9sZGVyfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZhKSxNKG5uKSxNKF90KSxNKGNkKSxNKFJlKSxNKCRpLDgpLE0oTGgsOCksTShWaCw4KSxNKHNnLDgpLE0oTnMsMTApLHZvKCJ0YWJpbmRleCIpLE0oQm5lKSxNKHR3KSxNKGpGZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoUEZlLDUpLG90KFJGZSw1KSxvdChSaCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50cmlnZ2VyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnBhbmVsPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9vdmVybGF5RGlyPXIuZmlyc3QpfX0saW5wdXRzOnt1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxwYW5lbENsYXNzOiJwYW5lbENsYXNzIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbXVsdGlwbGU6Im11bHRpcGxlIixkaXNhYmxlT3B0aW9uQ2VudGVyaW5nOiJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIixjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgiLHZhbHVlOiJ2YWx1ZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWw6InR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLHNvcnRDb21wYXJhdG9yOiJzb3J0Q29tcGFyYXRvciIsaWQ6ImlkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UiLF9vcGVuZWRTdHJlYW06Im9wZW5lZCIsX2Nsb3NlZFN0cmVhbToiY2xvc2VkIixzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3R0LEZ0XX0pLG59KSgpLEhoPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBZRmV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Njcm9sbFRvcD0wLHRoaXMuX3RyaWdnZXJGb250U2l6ZT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0idG9wIix0aGlzLl9vZmZzZXRZPTAsdGhpcy5fcG9zaXRpb25zPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6InN0YXJ0IixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlYOiJzdGFydCIsb3ZlcmxheVk6ImJvdHRvbSJ9XX1fY2FsY3VsYXRlT3ZlcmxheVNjcm9sbChlLGkscil7bGV0IG89dGhpcy5fZ2V0SXRlbUhlaWdodCgpO3JldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLG8qZS1pK28vMikscil9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpLHRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkucGlwZShzdCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJih0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1vcGVuKCl7c3VwZXIuX2Nhbk9wZW4oKSYmKHN1cGVyLm9wZW4oKSx0aGlzLl90cmlnZ2VyUmVjdD10aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLl90cmlnZ2VyRm9udFNpemU9cGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCkuZm9udFNpemV8fCIwIiksdGhpcy5fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3RyaWdnZXJGb250U2l6ZSYmdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQmJih0aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGUuZm9udFNpemU9YCR7dGhpcy5fdHJpZ2dlckZvbnRTaXplfXB4YCl9KSl9X3Njcm9sbE9wdGlvbkludG9WaWV3KGUpe2xldCBpPW93KGUsdGhpcy5vcHRpb25zLHRoaXMub3B0aW9uR3JvdXBzKSxyPXRoaXMuX2dldEl0ZW1IZWlnaHQoKTt0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wPTA9PT1lJiYxPT09aT8wOl8yKChlK2kpKnIscix0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLDI1Nil9X3Bvc2l0aW9uaW5nU2V0dGxlZCgpe3RoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCksdGhpcy5wYW5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcD10aGlzLl9zY3JvbGxUb3B9X3BhbmVsRG9uZUFuaW1hdGluZyhlKXt0aGlzLnBhbmVsT3Blbj90aGlzLl9zY3JvbGxUb3A9MDoodGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPTAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpLHN1cGVyLl9wYW5lbERvbmVBbmltYXRpbmcoZSl9X2dldENoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsZSl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRYKCl7bGV0IHMsZT10aGlzLl9vdmVybGF5RGlyLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLHI9dGhpcy5faXNSdGwoKSxvPXRoaXMubXVsdGlwbGU/NTY6MzI7aWYodGhpcy5tdWx0aXBsZSlzPTQwO2Vsc2UgaWYodGhpcy5kaXNhYmxlT3B0aW9uQ2VudGVyaW5nKXM9MTY7ZWxzZXtsZXQgYz10aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXXx8dGhpcy5vcHRpb25zLmZpcnN0O3M9YyYmYy5ncm91cD8zMjoxNn1yfHwocyo9LTEpO2xldCBhPTAtKGUubGVmdCtzLShyP286MCkpLGw9ZS5yaWdodCtzLWkud2lkdGgrKHI/MDpvKTthPjA/cys9YSs4Omw+MCYmKHMtPWwrOCksdGhpcy5fb3ZlcmxheURpci5vZmZzZXRYPU1hdGgucm91bmQocyksdGhpcy5fb3ZlcmxheURpci5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9X2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGUsaSxyKXtsZXQgbCxvPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxzPShvLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMixhPU1hdGguZmxvb3IoMjU2L28pO3JldHVybiB0aGlzLmRpc2FibGVPcHRpb25DZW50ZXJpbmc/MDoobD0wPT09dGhpcy5fc2Nyb2xsVG9wP2Uqbzp0aGlzLl9zY3JvbGxUb3A9PT1yPyhlLSh0aGlzLl9nZXRJdGVtQ291bnQoKS1hKSkqbysoby0odGhpcy5fZ2V0SXRlbUNvdW50KCkqby0yNTYpJW8pOmktby8yLE1hdGgucm91bmQoLTEqbC1zKSl9X2NoZWNrT3ZlcmxheVdpdGhpblZpZXdwb3J0KGUpe2xldCBpPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxyPXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksbz10aGlzLl90cmlnZ2VyUmVjdC50b3AtOCxzPXIuaGVpZ2h0LXRoaXMuX3RyaWdnZXJSZWN0LmJvdHRvbS04LGE9TWF0aC5hYnModGhpcy5fb2Zmc2V0WSksYz1NYXRoLm1pbih0aGlzLl9nZXRJdGVtQ291bnQoKSppLDI1NiktYS10aGlzLl90cmlnZ2VyUmVjdC5oZWlnaHQ7Yz5zP3RoaXMuX2FkanVzdFBhbmVsVXAoYyxzKTphPm8/dGhpcy5fYWRqdXN0UGFuZWxEb3duKGEsbyxlKTp0aGlzLl90cmFuc2Zvcm1PcmlnaW49dGhpcy5fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpfV9hZGp1c3RQYW5lbFVwKGUsaSl7bGV0IHI9TWF0aC5yb3VuZChlLWkpO3RoaXMuX3Njcm9sbFRvcC09cix0aGlzLl9vZmZzZXRZLT1yLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj10aGlzLl9nZXRPcmlnaW5CYXNlZE9uT3B0aW9uKCksdGhpcy5fc2Nyb2xsVG9wPD0wJiYodGhpcy5fc2Nyb2xsVG9wPTAsdGhpcy5fb2Zmc2V0WT0wLHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIGJvdHRvbSAwcHgiKX1fYWRqdXN0UGFuZWxEb3duKGUsaSxyKXtsZXQgbz1NYXRoLnJvdW5kKGUtaSk7aWYodGhpcy5fc2Nyb2xsVG9wKz1vLHRoaXMuX29mZnNldFkrPW8sdGhpcy5fdHJhbnNmb3JtT3JpZ2luPXRoaXMuX2dldE9yaWdpbkJhc2VkT25PcHRpb24oKSx0aGlzLl9zY3JvbGxUb3A+PXIpcmV0dXJuIHRoaXMuX3Njcm9sbFRvcD1yLHRoaXMuX29mZnNldFk9MCx2b2lkKHRoaXMuX3RyYW5zZm9ybU9yaWdpbj0iNTAlIHRvcCAwcHgiKX1fY2FsY3VsYXRlT3ZlcmxheVBvc2l0aW9uKCl7bGV0IGEsZT10aGlzLl9nZXRJdGVtSGVpZ2h0KCksaT10aGlzLl9nZXRJdGVtQ291bnQoKSxyPU1hdGgubWluKGkqZSwyNTYpLHM9aSplLXI7YT10aGlzLmVtcHR5PzA6TWF0aC5tYXgodGhpcy5vcHRpb25zLnRvQXJyYXkoKS5pbmRleE9mKHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKSwwKSxhKz1vdyhhLHRoaXMub3B0aW9ucyx0aGlzLm9wdGlvbkdyb3Vwcyk7bGV0IGw9ci8yO3RoaXMuX3Njcm9sbFRvcD10aGlzLl9jYWxjdWxhdGVPdmVybGF5U2Nyb2xsKGEsbCxzKSx0aGlzLl9vZmZzZXRZPXRoaXMuX2NhbGN1bGF0ZU92ZXJsYXlPZmZzZXRZKGEsbCxzKSx0aGlzLl9jaGVja092ZXJsYXlXaXRoaW5WaWV3cG9ydChzKX1fZ2V0T3JpZ2luQmFzZWRPbk9wdGlvbigpe2xldCBlPXRoaXMuX2dldEl0ZW1IZWlnaHQoKSxpPShlLXRoaXMuX3RyaWdnZXJSZWN0LmhlaWdodCkvMjtyZXR1cm5gNTAlICR7TWF0aC5hYnModGhpcy5fb2Zmc2V0WSktaStlLzJ9cHggMHB4YH1fZ2V0SXRlbUhlaWdodCgpe3JldHVybiAzKnRoaXMuX3RyaWdnZXJGb250U2l6ZX1fZ2V0SXRlbUNvdW50KCl7cmV0dXJuIHRoaXMub3B0aW9ucy5sZW5ndGgrdGhpcy5vcHRpb25Hcm91cHMubGVuZ3RofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNlbGVjdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoRWkocixxRmUsNSksRWkocixPcyw1KSxFaShyLHJ3LDUpKSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLmN1c3RvbVRyaWdnZXI9by5maXJzdCksTmUobz1MZSgpKSYmKGkub3B0aW9ucz1vKSxOZShvPUxlKCkpJiYoaS5vcHRpb25Hcm91cHM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29tYm9ib3giLCJhcmlhLWF1dG9jb21wbGV0ZSIsIm5vbmUiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwibWF0LXNlbGVjdCJdLGhvc3RWYXJzOjE5LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJsdXIoKX0pLDImZSYmKHplKCJpZCIsaS5pZCkoInRhYmluZGV4IixpLnRhYkluZGV4KSgiYXJpYS1jb250cm9scyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5wYW5lbE9wZW4pKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtcmVxdWlyZWQiLGkucmVxdWlyZWQudG9TdHJpbmcoKSkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixpLl9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpKSxldCgibWF0LXNlbGVjdC1kaXNhYmxlZCIsaS5kaXNhYmxlZCkoIm1hdC1zZWxlY3QtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgibWF0LXNlbGVjdC1yZXF1aXJlZCIsaS5yZXF1aXJlZCkoIm1hdC1zZWxlY3QtZW1wdHkiLGkuZW1wdHkpKCJtYXQtc2VsZWN0LW11bHRpcGxlIixpLm11bHRpcGxlKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNlbGVjdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6a2gsdXNlRXhpc3Rpbmc6bn0se3Byb3ZpZGU6aXcsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOlZGZSxkZWNsczo5LHZhcnM6MTIsY29uc3RzOltbImNkay1vdmVybGF5LW9yaWdpbiIsIiIsMSwibWF0LXNlbGVjdC10cmlnZ2VyIiwzLCJjbGljayJdLFsib3JpZ2luIiwiY2RrT3ZlcmxheU9yaWdpbiIsInRyaWdnZXIiLCIiXSxbMSwibWF0LXNlbGVjdC12YWx1ZSIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1wbGFjZWhvbGRlciBtYXQtc2VsZWN0LW1pbi1saW5lIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwibWF0LXNlbGVjdC12YWx1ZS10ZXh0IiwzLCJuZ1N3aXRjaCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsIm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlciJdLFsxLCJtYXQtc2VsZWN0LWFycm93Il0sWyJjZGstY29ubmVjdGVkLW92ZXJsYXkiLCIiLCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUhhc0JhY2tkcm9wIiwiIiwiY2RrQ29ubmVjdGVkT3ZlcmxheUJhY2tkcm9wQ2xhc3MiLCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIsMywiY2RrQ29ubmVjdGVkT3ZlcmxheVBhbmVsQ2xhc3MiLCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLCJiYWNrZHJvcENsaWNrIiwiYXR0YWNoIiwiZGV0YWNoIl0sWzEsIm1hdC1zZWxlY3QtcGxhY2Vob2xkZXIiLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtdmFsdWUtdGV4dCIsMywibmdTd2l0Y2giXSxbImNsYXNzIiwibWF0LXNlbGVjdC1taW4tbGluZSIsNCwibmdTd2l0Y2hEZWZhdWx0Il0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtYXQtc2VsZWN0LW1pbi1saW5lIl0sWzEsIm1hdC1zZWxlY3QtcGFuZWwtd3JhcCJdLFsicm9sZSIsImxpc3Rib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ0NsYXNzIiwia2V5ZG93biJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih4aShCRmUpLF8oMCwiZGl2IiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZSgpfSksXygzLCJkaXYiLDIpLEUoNCxPRmUsMiwxLCJzcGFuIiwzKSxFKDUsTkZlLDMsMiwic3BhbiIsNCksdigpLF8oNiwiZGl2Iiw1KSxPKDcsImRpdiIsNiksdigpKCksRSg4LExGZSw0LDE0LCJuZy10ZW1wbGF0ZSIsNyksUCgiYmFja2Ryb3BDbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkoImF0dGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25BdHRhY2hlZCgpfSkoImRldGFjaCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jbG9zZSgpfSkpLDImZSl7bGV0IHI9JGUoMSk7emUoImFyaWEtb3ducyIsaS5wYW5lbE9wZW4/aS5pZCsiLXBhbmVsIjpudWxsKSxDKDMpLHkoIm5nU3dpdGNoIixpLmVtcHR5KSx6ZSgiaWQiLGkuX3ZhbHVlSWQpLEMoMSkseSgibmdTd2l0Y2hDYXNlIiwhMCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLCExKSxDKDMpLHkoImNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzIixpLl9vdmVybGF5UGFuZWxDbGFzcykoImNka0Nvbm5lY3RlZE92ZXJsYXlTY3JvbGxTdHJhdGVneSIsaS5fc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIixyKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkucGFuZWxPcGVuKSgiY2RrQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9ucyIsaS5fcG9zaXRpb25zKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoIixudWxsPT1pLl90cmlnZ2VyUmVjdD9udWxsOmkuX3RyaWdnZXJSZWN0LndpZHRoKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9mZnNldFkiLGkuX29mZnNldFkpfX0sZGVwZW5kZW5jaWVzOltGbixDcixVcixjaCxSaCxpZ10sc3R5bGVzOlsnLm1hdC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9Lm1hdC1zZWxlY3QtdHJpZ2dlcntkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTAwJX0ubWF0LXNlbGVjdC1kaXNhYmxlZCAubWF0LXNlbGVjdC10cmlnZ2Vyey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjpkZWZhdWx0fS5tYXQtc2VsZWN0LXZhbHVle3dpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5tYXQtc2VsZWN0LXZhbHVlLXRleHR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7aGVpZ2h0OjE2cHg7ZmxleC1zaHJpbms6MDtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1maWxsIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb3V0bGluZSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpfS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkLm1hdC1mb3JtLWZpZWxkLWhhcy1sYWJlbCAubWF0LXNlbGVjdDpub3QoLm1hdC1zZWxlY3QtZW1wdHkpIC5tYXQtc2VsZWN0LWFycm93LXdyYXBwZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1zZWxlY3QubWF0LXNlbGVjdC1lbXB0eSAubWF0LXNlbGVjdC1hcnJvdy13cmFwcGVye3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZS5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtc2VsZWN0Lm1hdC1zZWxlY3QtZW1wdHkgLm1hdC1zZWxlY3QtYXJyb3ctd3JhcHBlcnt0cmFuc2l0aW9uOm5vbmV9Lm1hdC1zZWxlY3QtYXJyb3d7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItbGVmdDo1cHggc29saWQgcmdiYSgwLDAsMCwwKTtib3JkZXItcmlnaHQ6NXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXRvcDo1cHggc29saWQ7bWFyZ2luOjAgNHB4fS5tYXQtZm9ybS1maWVsZC5tYXQtZm9jdXNlZCAubWF0LXNlbGVjdC1hcnJvd3t0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX0ubWF0LXNlbGVjdC1wYW5lbC13cmFwe2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXNlbGVjdC1wYW5lbHttaW4td2lkdGg6MTEycHg7bWF4LXdpZHRoOjI4MHB4O292ZXJmbG93OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowO21heC1oZWlnaHQ6MjU2cHg7bWluLXdpZHRoOjEwMCU7Ym9yZGVyLXJhZGl1czo0cHg7b3V0bGluZTowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zZWxlY3QtcGFuZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zZWxlY3QtcGFuZWwgLm1hdC1vcHRncm91cC1sYWJlbCwubWF0LXNlbGVjdC1wYW5lbCAubWF0LW9wdGlvbntmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDozZW07aGVpZ2h0OjNlbX0ubWF0LWZvcm0tZmllbGQtdHlwZS1tYXQtc2VsZWN0Om5vdCgubWF0LWZvcm0tZmllbGQtZGlzYWJsZWQpIC5tYXQtZm9ybS1maWVsZC1mbGV4e2N1cnNvcjpwb2ludGVyfS5tYXQtZm9ybS1maWVsZC10eXBlLW1hdC1zZWxlY3QgLm1hdC1mb3JtLWZpZWxkLWxhYmVse3dpZHRoOmNhbGMoMTAwJSAtIDE4cHgpfS5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye3RyYW5zaXRpb246Y29sb3IgNDAwbXMgMTMzLjMzMzMzMzMzMzNtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0uX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zZWxlY3QtcGxhY2Vob2xkZXJ7dHJhbnNpdGlvbjpub25lfS5tYXQtZm9ybS1maWVsZC1oaWRlLXBsYWNlaG9sZGVyIC5tYXQtc2VsZWN0LXBsYWNlaG9sZGVye2NvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOm5vbmU7ZGlzcGxheTpibG9ja30ubWF0LXNlbGVjdC1taW4tbGluZTplbXB0eTo6YmVmb3Jle2NvbnRlbnQ6IiAiO3doaXRlLXNwYWNlOnByZTt3aWR0aDoxcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmlzaWJpbGl0eTpoaWRkZW59J10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbRm5lLnRyYW5zZm9ybVBhbmVsV3JhcCxGbmUudHJhbnNmb3JtUGFuZWxdfSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGxjPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W0dGZV0saW1wb3J0czpbTWUsc3MsQXYsbG4sdWQsYWcsQXYsbG5dfSksbn0pKCk7ZnVuY3Rpb24gWEZlKG4sdCl7MSZuJiYoc24oMCksXygxLCJkaXYiLDEpLEEoMiwiIFRoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIERlZmF1bHQgLSAoRW5hYmxlZC9EaXNhYmxlZCkgYW5kIChFbmFibGVkL0Rpc2FibGVkKSAiKSx2KCksXygzLCJkaXYiLDEpLEEoNCwiIE9ubHkgZmxhZ3Mgd2l0aCBub24gZGVmYXVsdCB2YWx1ZXMgYXJlIHNlbnQgdG8gdGhlIGJhY2tlbmQuICIpLHYoKSxhbigpKX1mdW5jdGlvbiBRRmUobix0KXsxJm4mJihfKDAsInN1cCIsMTEpLEEoMSwiMSIpLHYoKSl9ZnVuY3Rpb24gS0ZlKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBaRmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJtYXQtc2VsZWN0IiwxMiksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKCkuZmxhZ0NoYW5nZWQuZW1pdCh7ZmxhZzpvLmZsYWcsc3RhdHVzOnIudmFsdWV9KSl9KSxfKDEsIm1hdC1vcHRpb24iLDEzKSxBKDIpLHYoKSxfKDMsIm1hdC1vcHRpb24iLDE0KSxBKDQsIkVuYWJsZWQiKSx2KCksXyg1LCJtYXQtb3B0aW9uIiwxNSksQSg2LCJEaXNhYmxlZCIpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpLiRpbXBsaWNpdCxpPVMoKTt5KCJ2YWx1ZSIsZS5zdGF0dXMpLEMoMiksamUoIiBEZWZhdWx0ICIsaS5mb3JtYXRGbGFnVmFsdWUoZS5kZWZhdWx0VmFsdWUpLCIgIil9fWZ1bmN0aW9uIEpGZShuLHQpe2lmKDEmbiYmKF8oMCwidGQiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0LGk9UygpO0MoMSksamUoIlVuc3VwcG9ydGVkIEJ5IFVJICIsaS5mb3JtYXRGbGFnVmFsdWUoZS52YWx1ZSksIiIpfX1mdW5jdGlvbiAkRmUobix0KXtpZigxJm4mJihzbigwKSxfKDEsInRyIikoMiwidGQiKSgzLCJkaXYiKSxBKDQpLEUoNSxRRmUsMiwwLCJzdXAiLDcpLHYoKSgpLEUoNixLRmUsMSwwLCJuZy1jb250YWluZXIiLDgpLEUoNyxaRmUsNywyLCJuZy10ZW1wbGF0ZSIsbnVsbCw5LHF0KSxFKDksSkZlLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTAscXQpLHYoKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9JGUoOCkscj0kZSgxMCksbz1TKCk7Qyg0KSxqZSgiICIsZS5mbGFnLCIgIiksQygxKSx5KCJuZ0lmIixlLnNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuKSxDKDEpLHkoIm5nSWYiLG8uaXNFZGl0YWJsZShlKSkoIm5nSWZUaGVuIixpKSgibmdJZkVsc2UiLHIpfX1mdW5jdGlvbiBlTmUobix0KXsxJm4mJihfKDAsImRpdiIsMTEpLEEoMSwiIDEuIFNlbnQgdG8gc2VydmVyIHdoZW4gb3ZlcnJpZGRlbiAiKSx2KCkpfXZhciBxMixWbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzRmxhZ3NTZW50VG9TZXJ2ZXI9ITEsdGhpcy5mbGFnQ2hhbmdlZD1uZXcgRyx0aGlzLmFsbEZsYWdzUmVzZXQ9bmV3IEd9c2VyaWFsaXplRmxhZ1ZhbHVlKGUpe3JldHVybiEwPT09ZT8iRW5hYmxlZCI6ITE9PT1lPyJEaXNhYmxlZCI6bnVsbD09ZT8ibnVsbCI6QXJyYXkuaXNBcnJheShlKT9KU09OLnN0cmluZ2lmeShlKTplLnRvU3RyaW5nKCl9aXNFZGl0YWJsZShlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlLmRlZmF1bHRWYWx1ZX1mb3JtYXRGbGFnVmFsdWUoZSl7bGV0IGk9dGhpcy5zZXJpYWxpemVGbGFnVmFsdWUoZSk7cmV0dXJuIDA9PT1pLmxlbmd0aD8iIjpgLSAke2l9YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLXBhZ2UtY29tcG9uZW50Il1dLGlucHV0czp7ZmVhdHVyZUZsYWdTdGF0dXNlczoiZmVhdHVyZUZsYWdTdGF0dXNlcyIsaGFzRmxhZ3NTZW50VG9TZXJ2ZXI6Imhhc0ZsYWdzU2VudFRvU2VydmVyIn0sb3V0cHV0czp7ZmxhZ0NoYW5nZWQ6ImZsYWdDaGFuZ2VkIixhbGxGbGFnc1Jlc2V0OiJhbGxGbGFnc1Jlc2V0In0sZGVjbHM6MTEsdmFyczozLGNvbnN0czpbWzEsInNjcm9sbGluZy1wYWdlIl0sWzEsIm1lc3NhZ2UiXSxbMSwid2FybmluZyJdLFs0LCJuZ0lmIl0sWzEsImZlYXR1cmUtZmxhZy10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm1hdC1idXR0b24iLCIiLDMsImNsaWNrIl0sWyJjbGFzcyIsIm5vdGUtMSIsNCwibmdJZiJdLFs0LCJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdLFsic2VsZWN0QmxvY2siLCIiXSxbInVuc3VwcG9ydGVkQmxvY2siLCIiXSxbMSwibm90ZS0xIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWyJ2YWx1ZSIsImRlZmF1bHQiXSxbInZhbHVlIiwiZW5hYmxlZCJdLFsidmFsdWUiLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgyIiwyKSxBKDMsIldBUk5JTkc6IEVYUEVSSU1FTlRBTCBGRUFUVVJFUyBBSEVBRCEiKSx2KCksQSg0LCIgQnkgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIHlvdSBjb3VsZCBwdXQgdGhlIGFwcGxpY2F0aW9uIGluIGFuIHVudXNhYmxlIHN0YXRlIG9yIGV4cG9zZSB5b3Vyc2VsZiB0byB1bnRlc3RlZCBmZWF0dXJlcyBvciBwb3RlbnRpYWwgYnVncy4gIiksdigpLEUoNSxYRmUsNSwwLCJuZy1jb250YWluZXIiLDMpLF8oNiwidGFibGUiLDQpLEUoNywkRmUsMTEsNSwibmctY29udGFpbmVyIiw1KSx2KCksXyg4LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmFsbEZsYWdzUmVzZXQuZW1pdCgpfSksQSg5LCJSZXNldCBBbGwiKSx2KCksRSgxMCxlTmUsMiwwLCJkaXYiLDcpLHYoKSksMiZlJiYoQyg1KSx5KCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSxDKDIpLHkoIm5nRm9yT2YiLGkuZmVhdHVyZUZsYWdTdGF0dXNlcyksQygzKSx5KCJuZ0lmIixpLmhhc0ZsYWdzU2VudFRvU2VydmVyKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsX24sSGgsT3NdLHN0eWxlczpbIi5tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjE2cHh9Lm1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNDQzMzZ9Lm5vdGUtMVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmOTgwMH0uc2Nyb2xsaW5nLXBhZ2VbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6OTB2aH0uZmVhdHVyZS1mbGFnLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfSJdfSksbn0pKCksVzI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5oYXNGbGFnc1NlbnRUb1NlcnZlciQ9dGhpcy5zdG9yZS5zZWxlY3QoSG0pLnBpcGUoTChpPT5PYmplY3QudmFsdWVzKGkpLnNvbWUocj0+ci5zZW5kVG9TZXJ2ZXJXaGVuT3ZlcnJpZGRlbikpKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoekEpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoeSQpLHRoaXMuc3RvcmUuc2VsZWN0KEhtKSksTCgoW2kscixvXSk9Pk9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW3MsYV0pPT57bGV0IGw9ZnVuY3Rpb24obix0KXtyZXR1cm4gdm9pZCAwPT09dFtuXT8iZGVmYXVsdCI6dFtuXT8iZW5hYmxlZCI6ImRpc2FibGVkIn0ocyxpKTtyZXR1cm57ZmxhZzpzLGRlZmF1bHRWYWx1ZTphLHN0YXR1czpsLHNlbmRUb1NlcnZlcldoZW5PdmVycmlkZGVuOm9bc10uc2VuZFRvU2VydmVyV2hlbk92ZXJyaWRkZW59fSkpKX1vbkZsYWdDaGFuZ2VkKHtmbGFnOmUsc3RhdHVzOml9KXtzd2l0Y2goaSl7Y2FzZSJkZWZhdWx0Ijp0aGlzLnN0b3JlLmRpc3BhdGNoKHloKHtmbGFnczpbZV19KSk7YnJlYWs7Y2FzZSJlbmFibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHFtKHtmbGFnczp7W2VdOiEwfX0pKTticmVhaztjYXNlImRpc2FibGVkIjp0aGlzLnN0b3JlLmRpc3BhdGNoKHFtKHtmbGFnczp7W2VdOiExfX0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmxhZyBjaGFuZ2VkIHRvIGludmFsaWQgc3RhdHVzIil9fW9uQWxsRmxhZ3NSZXNldCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobHYoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJmZWF0dXJlLWZsYWctcGFnZSJdXSxkZWNsczozLHZhcnM6Nixjb25zdHM6W1szLCJmZWF0dXJlRmxhZ1N0YXR1c2VzIiwiaGFzRmxhZ3NTZW50VG9TZXJ2ZXIiLCJmbGFnQ2hhbmdlZCIsImFsbEZsYWdzUmVzZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImZlYXR1cmUtZmxhZy1wYWdlLWNvbXBvbmVudCIsMCksUCgiZmxhZ0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmxhZ0NoYW5nZWQobyl9KSgiYWxsRmxhZ3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkFsbEZsYWdzUmVzZXQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoImZlYXR1cmVGbGFnU3RhdHVzZXMiLFUoMSwyLGkuZmVhdHVyZUZsYWdzJCkpKCJoYXNGbGFnc1NlbnRUb1NlcnZlciIsVSgyLDQsaS5oYXNGbGFnc1NlbnRUb1NlcnZlciQpKX0sZGVwZW5kZW5jaWVzOltWbmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEhuZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMuZGlhbG9nPWksdGhpcy5zaG93RmVhdHVyZUZsYWdzJD10aGlzLnN0b3JlLnNlbGVjdChFJCl9bmdPbkluaXQoKXt0aGlzLnNob3dGZWF0dXJlRmxhZ3MkLnN1YnNjcmliZShlPT57aWYoZSlyZXR1cm4gdGhpcy5mZWF0dXJlRmxhZ3NEaWFsb2c9dGhpcy5kaWFsb2cub3BlbihXMiksdm9pZCB0aGlzLmZlYXR1cmVGbGFnc0RpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goeWgoe2ZsYWdzOlsiZW5hYmxlU2hvd0ZsYWdzIl19KSksc2V0VGltZW91dCgoKT0+e3dpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKX0sMSl9KX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSxNKHZsKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZmVhdHVyZS1mbGFnLW1vZGFsLXRyaWdnZXIiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLG9OZT1bInJvdXRlQ29udGFpbmVyIl0sVW5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZX1uZ09uQ2hhbmdlcyhlKXtsZXQgaT1lLmFjdGl2ZU5nQ29tcG9uZW50O2lmKGkmJih0aGlzLnJvdXRlQ29udGFpbmVyLmNsZWFyKCksaS5jdXJyZW50VmFsdWUpKXtsZXQgcj10aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShpLmN1cnJlbnRWYWx1ZSk7dGhpcy5yb3V0ZUNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQocil9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKGdzKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChvTmUsNyxPaSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5yb3V0ZUNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7YWN0aXZlTmdDb21wb25lbnQ6ImFjdGl2ZU5nQ29tcG9uZW50In0sZmVhdHVyZXM6W0Z0XSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sicm91dGVDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk5pKDAsbnVsbCwwKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksem5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWdpc3RyeT1pLHRoaXMuYWN0aXZlTmdDb21wb25lbnQkPUx0KFt0aGlzLnN0b3JlLnNlbGVjdChSYSksdGhpcy5zdG9yZS5zZWxlY3QoWkopXSkucGlwZShMKChbcixvXSk9PnImJihudWxsPT09b3x8UHMocixvKSk/dGhpcy5yZWdpc3RyeS5nZXROZ0NvbXBvbmVudEJ5Um91dGVLaW5kKHIucm91dGVLaW5kKTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0ocWMpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsImFjdGl2ZU5nQ29tcG9uZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJyb3V0ZXItb3V0bGV0LWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpKSwyJmUmJnkoImFjdGl2ZU5nQ29tcG9uZW50IixVKDEsMSxpLmFjdGl2ZU5nQ29tcG9uZW50JCkpfSxkZXBlbmRlbmNpZXM6W1VuZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksam5lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7ZS5zZWxlY3QoUXUpLnN1YnNjcmliZShpPT57ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrLW1vZGUiLGkpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXJrLW1vZGUtc3VwcG9ydGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFV2PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5BQ1RJVkVfUExVR0lOPTBdPSJBQ1RJVkVfUExVR0lOIn0oVXZ8fChVdj17fSkpLFV2KSkoKSxHbmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZXBMaW5rZXI9ZSx0aGlzLm9uVmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBrZSx0aGlzLm9uSGFzaENoYW5nZT1faSh3aW5kb3csInBvcHN0YXRlIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSl9bmdPbkluaXQoKXt0aGlzLm9uSGFzaENoYW5nZS5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLmRlZXBMaW5rZXIuZ2V0UGx1Z2luSWQoKTtlIT09dGhpcy5hY3RpdmVQbHVnaW5JZCYmdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3Byb3A6VXYuQUNUSVZFX1BMVUdJTix2YWx1ZTplfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5hY3RpdmVQbHVnaW5JZCl7bGV0IGk9ZS5hY3RpdmVQbHVnaW5JZDt0aGlzLmRlZXBMaW5rZXIuc2V0UGx1Z2luSWQobnVsbD09PWkuY3VycmVudFZhbHVlPyIiOmkuY3VycmVudFZhbHVlLHtkZWZhdWx0VmFsdWU6IiIsdXNlTG9jYXRpb25SZXBsYWNlOm51bGw9PT1pLnByZXZpb3VzVmFsdWV8fGkuZmlyc3RDaGFuZ2V9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oZmgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJoYXNoLXN0b3JhZ2UtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUGx1Z2luSWQ6ImFjdGl2ZVBsdWdpbklkIn0sb3V0cHV0czp7b25WYWx1ZUNoYW5nZToib25WYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXt9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFduZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVBsdWdpbklkJD10aGlzLnN0b3JlLnBpcGUodnQoUnMpKX1vblZhbHVlQ2hhbmdlZChlKXtlLnByb3A9PT1Vdi5BQ1RJVkVfUExVR0lOJiZ0aGlzLnN0b3JlLmRpc3BhdGNoKFhBKHtwbHVnaW46ZS52YWx1ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImhhc2gtc3RvcmFnZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJhY3RpdmVQbHVnaW5JZCIsIm9uVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImhhc2gtc3RvcmFnZS1jb21wb25lbnQiLDApLFAoIm9uVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2VkKG8pfSksQigxLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJhY3RpdmVQbHVnaW5JZCIsVSgxLDEsaS5hY3RpdmVQbHVnaW5JZCQpKX0sZGVwZW5kZW5jaWVzOltHbmUsR2VdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZE5lPVsiKiJdO2Z1bmN0aW9uIHZ3KG4pe3JldHVybiBmdW5jdGlvbigpe2lmKHZvaWQgMD09PXEyJiYocTI9bnVsbCx0eXBlb2Ygd2luZG93PCJ1Iikpe2xldCBuPXdpbmRvdzt2b2lkIDAhPT1uLnRydXN0ZWRUeXBlcyYmKHEyPW4udHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciNjb21wb25lbnRzIix7Y3JlYXRlSFRNTDp0PT50fSkpfXJldHVybiBxMn0oKT8uY3JlYXRlSFRNTChuKXx8bn1mdW5jdGlvbiBxbmUobil7cmV0dXJuIEVycm9yKGBVbmFibGUgdG8gZmluZCBpY29uIHdpdGggdGhlIG5hbWUgIiR7bn0iYCl9ZnVuY3Rpb24gWW5lKG4pe3JldHVybiBFcnJvcihgVGhlIFVSTCBwcm92aWRlZCB0byBNYXRJY29uUmVnaXN0cnkgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMIHZpYSBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyLiBBdHRlbXB0ZWQgVVJMIHdhcyAiJHtufSIuYCl9ZnVuY3Rpb24gWG5lKG4pe3JldHVybiBFcnJvcihgVGhlIGxpdGVyYWwgcHJvdmlkZWQgdG8gTWF0SWNvblJlZ2lzdHJ5IHdhcyBub3QgdHJ1c3RlZCBhcyBzYWZlIEhUTUwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplci4gQXR0ZW1wdGVkIGxpdGVyYWwgd2FzICIke259Ii5gKX12YXIgY3A9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe3RoaXMudXJsPXQsdGhpcy5zdmdUZXh0PWUsdGhpcy5vcHRpb25zPWl9fSx6dj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2h0dHBDbGllbnQ9ZSx0aGlzLl9zYW5pdGl6ZXI9aSx0aGlzLl9lcnJvckhhbmRsZXI9byx0aGlzLl9zdmdJY29uQ29uZmlncz1uZXcgTWFwLHRoaXMuX2ljb25TZXRDb25maWdzPW5ldyBNYXAsdGhpcy5fY2FjaGVkSWNvbnNCeVVybD1uZXcgTWFwLHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzPW5ldyBNYXAsdGhpcy5fZm9udENzc0NsYXNzZXNCeUFsaWFzPW5ldyBNYXAsdGhpcy5fcmVzb2x2ZXJzPVtdLHRoaXMuX2RlZmF1bHRGb250U2V0Q2xhc3M9WyJtYXRlcmlhbC1pY29ucyIsIm1hdC1saWdhdHVyZS1mb250Il0sdGhpcy5fZG9jdW1lbnQ9cn1hZGRTdmdJY29uKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uSW5OYW1lc3BhY2UoIiIsZSxpLHIpfWFkZFN2Z0ljb25MaXRlcmFsKGUsaSxyKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKCIiLGUsaSxyKX1hZGRTdmdJY29uSW5OYW1lc3BhY2UoZSxpLHIsbyl7cmV0dXJuIHRoaXMuX2FkZFN2Z0ljb25Db25maWcoZSxpLG5ldyBjcChyLG51bGwsbykpfWFkZFN2Z0ljb25SZXNvbHZlcihlKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZXJzLnB1c2goZSksdGhpc31hZGRTdmdJY29uTGl0ZXJhbEluTmFtZXNwYWNlKGUsaSxyLG8pe2xldCBzPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShtby5IVE1MLHIpO2lmKCFzKXRocm93IFhuZShyKTtsZXQgYT12dyhzKTtyZXR1cm4gdGhpcy5fYWRkU3ZnSWNvbkNvbmZpZyhlLGksbmV3IGNwKCIiLGEsbykpfWFkZFN2Z0ljb25TZXQoZSxpKXtyZXR1cm4gdGhpcy5hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0TGl0ZXJhbChlLGkpe3JldHVybiB0aGlzLmFkZFN2Z0ljb25TZXRMaXRlcmFsSW5OYW1lc3BhY2UoIiIsZSxpKX1hZGRTdmdJY29uU2V0SW5OYW1lc3BhY2UoZSxpLHIpe3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IGNwKGksbnVsbCxyKSl9YWRkU3ZnSWNvblNldExpdGVyYWxJbk5hbWVzcGFjZShlLGkscil7bGV0IG89dGhpcy5fc2FuaXRpemVyLnNhbml0aXplKG1vLkhUTUwsaSk7aWYoIW8pdGhyb3cgWG5lKGkpO2xldCBzPXZ3KG8pO3JldHVybiB0aGlzLl9hZGRTdmdJY29uU2V0Q29uZmlnKGUsbmV3IGNwKCIiLHMscikpfXJlZ2lzdGVyRm9udENsYXNzQWxpYXMoZSxpPWUpe3JldHVybiB0aGlzLl9mb250Q3NzQ2xhc3Nlc0J5QWxpYXMuc2V0KGUsaSksdGhpc31jbGFzc05hbWVGb3JGb250QWxpYXMoZSl7cmV0dXJuIHRoaXMuX2ZvbnRDc3NDbGFzc2VzQnlBbGlhcy5nZXQoZSl8fGV9c2V0RGVmYXVsdEZvbnRTZXRDbGFzcyguLi5lKXtyZXR1cm4gdGhpcy5fZGVmYXVsdEZvbnRTZXRDbGFzcz1lLHRoaXN9Z2V0RGVmYXVsdEZvbnRTZXRDbGFzcygpe3JldHVybiB0aGlzLl9kZWZhdWx0Rm9udFNldENsYXNzfWdldFN2Z0ljb25Gcm9tVXJsKGUpe2xldCBpPXRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShtby5SRVNPVVJDRV9VUkwsZSk7aWYoIWkpdGhyb3cgWW5lKGUpO2xldCByPXRoaXMuX2NhY2hlZEljb25zQnlVcmwuZ2V0KGkpO3JldHVybiByP1h0KFkyKHIpKTp0aGlzLl9sb2FkU3ZnSWNvbkZyb21Db25maWcobmV3IGNwKGUsbnVsbCkpLnBpcGUoa3Qobz0+dGhpcy5fY2FjaGVkSWNvbnNCeVVybC5zZXQoaSxvKSksTChvPT5ZMihvKSkpfWdldE5hbWVkU3ZnSWNvbihlLGk9IiIpe2xldCByPVFuZShpLGUpLG89dGhpcy5fc3ZnSWNvbkNvbmZpZ3MuZ2V0KHIpO2lmKG8pcmV0dXJuIHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7aWYobz10aGlzLl9nZXRJY29uQ29uZmlnRnJvbVJlc29sdmVycyhpLGUpLG8pcmV0dXJuIHRoaXMuX3N2Z0ljb25Db25maWdzLnNldChyLG8pLHRoaXMuX2dldFN2Z0Zyb21Db25maWcobyk7bGV0IHM9dGhpcy5faWNvblNldENvbmZpZ3MuZ2V0KGkpO3JldHVybiBzP3RoaXMuX2dldFN2Z0Zyb21JY29uU2V0Q29uZmlncyhlLHMpOndjKHFuZShyKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZXNvbHZlcnM9W10sdGhpcy5fc3ZnSWNvbkNvbmZpZ3MuY2xlYXIoKSx0aGlzLl9pY29uU2V0Q29uZmlncy5jbGVhcigpLHRoaXMuX2NhY2hlZEljb25zQnlVcmwuY2xlYXIoKX1fZ2V0U3ZnRnJvbUNvbmZpZyhlKXtyZXR1cm4gZS5zdmdUZXh0P1h0KFkyKHRoaXMuX3N2Z0VsZW1lbnRGcm9tQ29uZmlnKGUpKSk6dGhpcy5fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpLnBpcGUoTChpPT5ZMihpKSkpfV9nZXRTdmdGcm9tSWNvblNldENvbmZpZ3MoZSxpKXtsZXQgcj10aGlzLl9leHRyYWN0SWNvbldpdGhOYW1lRnJvbUFueVNldChlLGkpO3JldHVybiByP1h0KHIpOmxyKGkuZmlsdGVyKHM9PiFzLnN2Z1RleHQpLm1hcChzPT50aGlzLl9sb2FkU3ZnSWNvblNldEZyb21Db25maWcocykucGlwZShmbyhhPT57bGV0IGM9YExvYWRpbmcgaWNvbiBzZXQgVVJMOiAke3RoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShtby5SRVNPVVJDRV9VUkwscy51cmwpfSBmYWlsZWQ6ICR7YS5tZXNzYWdlfWA7cmV0dXJuIHRoaXMuX2Vycm9ySGFuZGxlci5oYW5kbGVFcnJvcihuZXcgRXJyb3IoYykpLFh0KG51bGwpfSkpKSkucGlwZShMKCgpPT57bGV0IHM9dGhpcy5fZXh0cmFjdEljb25XaXRoTmFtZUZyb21BbnlTZXQoZSxpKTtpZighcyl0aHJvdyBxbmUoZSk7cmV0dXJuIHN9KSl9X2V4dHJhY3RJY29uV2l0aE5hbWVGcm9tQW55U2V0KGUsaSl7Zm9yKGxldCByPWkubGVuZ3RoLTE7cj49MDtyLS0pe2xldCBvPWlbcl07aWYoby5zdmdUZXh0JiZvLnN2Z1RleHQudG9TdHJpbmcoKS5pbmRleE9mKGUpPi0xKXtsZXQgcz10aGlzLl9zdmdFbGVtZW50RnJvbUNvbmZpZyhvKSxhPXRoaXMuX2V4dHJhY3RTdmdJY29uRnJvbVNldChzLGUsby5vcHRpb25zKTtpZihhKXJldHVybiBhfX1yZXR1cm4gbnVsbH1fbG9hZFN2Z0ljb25Gcm9tQ29uZmlnKGUpe3JldHVybiB0aGlzLl9mZXRjaEljb24oZSkucGlwZShrdChpPT5lLnN2Z1RleHQ9aSksTCgoKT0+dGhpcy5fc3ZnRWxlbWVudEZyb21Db25maWcoZSkpKX1fbG9hZFN2Z0ljb25TZXRGcm9tQ29uZmlnKGUpe3JldHVybiBlLnN2Z1RleHQ/WHQobnVsbCk6dGhpcy5fZmV0Y2hJY29uKGUpLnBpcGUoa3QoaT0+ZS5zdmdUZXh0PWkpKX1fZXh0cmFjdFN2Z0ljb25Gcm9tU2V0KGUsaSxyKXtsZXQgbz1lLnF1ZXJ5U2VsZWN0b3IoYFtpZD0iJHtpfSJdYCk7aWYoIW8pcmV0dXJuIG51bGw7bGV0IHM9by5jbG9uZU5vZGUoITApO2lmKHMucmVtb3ZlQXR0cmlidXRlKCJpZCIpLCJzdmciPT09cy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKHMscik7aWYoInN5bWJvbCI9PT1zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMuX3NldFN2Z0F0dHJpYnV0ZXModGhpcy5fdG9TdmdFbGVtZW50KHMpLHIpO2xldCBhPXRoaXMuX3N2Z0VsZW1lbnRGcm9tU3RyaW5nKHZ3KCI8c3ZnPjwvc3ZnPiIpKTtyZXR1cm4gYS5hcHBlbmRDaGlsZChzKSx0aGlzLl9zZXRTdmdBdHRyaWJ1dGVzKGEscil9X3N2Z0VsZW1lbnRGcm9tU3RyaW5nKGUpe2xldCBpPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2kuaW5uZXJIVE1MPWU7bGV0IHI9aS5xdWVyeVNlbGVjdG9yKCJzdmciKTtpZighcil0aHJvdyBFcnJvcigiPHN2Zz4gdGFnIG5vdCBmb3VuZCIpO3JldHVybiByfV90b1N2Z0VsZW1lbnQoZSl7bGV0IGk9dGhpcy5fc3ZnRWxlbWVudEZyb21TdHJpbmcodncoIjxzdmc+PC9zdmc+IikpLHI9ZS5hdHRyaWJ1dGVzO2ZvcihsZXQgbz0wO288ci5sZW5ndGg7bysrKXtsZXR7bmFtZTpzLHZhbHVlOmF9PXJbb107ImlkIiE9PXMmJmkuc2V0QXR0cmlidXRlKHMsYSl9Zm9yKGxldCBvPTA7bzxlLmNoaWxkTm9kZXMubGVuZ3RoO28rKyllLmNoaWxkTm9kZXNbb10ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREUmJmkuYXBwZW5kQ2hpbGQoZS5jaGlsZE5vZGVzW29dLmNsb25lTm9kZSghMCkpO3JldHVybiBpfV9zZXRTdmdBdHRyaWJ1dGVzKGUsaSl7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJmaXQiLCIiKSxlLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwiMTAwJSIpLGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjEwMCUiKSxlLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaWRZTWlkIG1lZXQiKSxlLnNldEF0dHJpYnV0ZSgiZm9jdXNhYmxlIiwiZmFsc2UiKSxpJiZpLnZpZXdCb3gmJmUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixpLnZpZXdCb3gpLGV9X2ZldGNoSWNvbihlKXtsZXR7dXJsOmksb3B0aW9uczpyfT1lLG89cj8ud2l0aENyZWRlbnRpYWxzPz8hMTtpZighdGhpcy5faHR0cENsaWVudCl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSHR0cENsaWVudCBwcm92aWRlciBmb3IgdXNlIHdpdGggQW5ndWxhciBNYXRlcmlhbCBpY29ucy4gUGxlYXNlIGluY2x1ZGUgdGhlIEh0dHBDbGllbnRNb2R1bGUgZnJvbSBAYW5ndWxhci9jb21tb24vaHR0cCBpbiB5b3VyIGFwcCBpbXBvcnRzLiIpO2lmKG51bGw9PWkpdGhyb3cgRXJyb3IoYENhbm5vdCBmZXRjaCBpY29uIGZyb20gVVJMICIke2l9Ii5gKTtsZXQgcz10aGlzLl9zYW5pdGl6ZXIuc2FuaXRpemUobW8uUkVTT1VSQ0VfVVJMLGkpO2lmKCFzKXRocm93IFluZShpKTtsZXQgYT10aGlzLl9pblByb2dyZXNzVXJsRmV0Y2hlcy5nZXQocyk7aWYoYSlyZXR1cm4gYTtsZXQgbD10aGlzLl9odHRwQ2xpZW50LmdldChzLHtyZXNwb25zZVR5cGU6InRleHQiLHdpdGhDcmVkZW50aWFsczpvfSkucGlwZShMKGM9PnZ3KGMpKSxmdW5jdGlvbihuKXtyZXR1cm4gZW4oKHQsZSk9Pnt0cnl7dC5zdWJzY3JpYmUoZSl9ZmluYWxseXtlLmFkZChuKX19KX0oKCk9PnRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLmRlbGV0ZShzKSksVHMoKSk7cmV0dXJuIHRoaXMuX2luUHJvZ3Jlc3NVcmxGZXRjaGVzLnNldChzLGwpLGx9X2FkZFN2Z0ljb25Db25maWcoZSxpLHIpe3JldHVybiB0aGlzLl9zdmdJY29uQ29uZmlncy5zZXQoUW5lKGUsaSksciksdGhpc31fYWRkU3ZnSWNvblNldENvbmZpZyhlLGkpe2xldCByPXRoaXMuX2ljb25TZXRDb25maWdzLmdldChlKTtyZXR1cm4gcj9yLnB1c2goaSk6dGhpcy5faWNvblNldENvbmZpZ3Muc2V0KGUsW2ldKSx0aGlzfV9zdmdFbGVtZW50RnJvbUNvbmZpZyhlKXtpZighZS5zdmdFbGVtZW50KXtsZXQgaT10aGlzLl9zdmdFbGVtZW50RnJvbVN0cmluZyhlLnN2Z1RleHQpO3RoaXMuX3NldFN2Z0F0dHJpYnV0ZXMoaSxlLm9wdGlvbnMpLGUuc3ZnRWxlbWVudD1pfXJldHVybiBlLnN2Z0VsZW1lbnR9X2dldEljb25Db25maWdGcm9tUmVzb2x2ZXJzKGUsaSl7Zm9yKGxldCByPTA7cjx0aGlzLl9yZXNvbHZlcnMubGVuZ3RoO3IrKyl7bGV0IG89dGhpcy5fcmVzb2x2ZXJzW3JdKGksZSk7aWYobylyZXR1cm4gbU5lKG8pP25ldyBjcChvLnVybCxudWxsLG8ub3B0aW9ucyk6bmV3IGNwKG8sbnVsbCl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFZtLDgpLGooVG0pLGooSHQsOCksaihRcykpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpO2Z1bmN0aW9uIFkyKG4pe3JldHVybiBuLmNsb25lTm9kZSghMCl9ZnVuY3Rpb24gUW5lKG4sdCl7cmV0dXJuIG4rIjoiK3R9ZnVuY3Rpb24gbU5lKG4pe3JldHVybiEoIW4udXJsfHwhbi5vcHRpb25zKX1uZXcgbnMsbmV3IHRsLG5ldyBucyxuZXcgbnM7dmFyIGdOZT1rbyhjbGFzc3tjb25zdHJ1Y3RvcihuKXt0aGlzLl9lbGVtZW50UmVmPW59fSksX05lPW5ldyBwZSgiTUFUX0lDT05fREVGQVVMVF9PUFRJT05TIiksdk5lPW5ldyBwZSgibWF0LWljb24tbG9jYXRpb24iLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uKCl7bGV0IG49am8oSHQpLHQ9bj9uLmxvY2F0aW9uOm51bGw7cmV0dXJue2dldFBhdGhuYW1lOigpPT50P3QucGF0aG5hbWUrdC5zZWFyY2g6IiJ9fX0pLEtuZT1bImNsaXAtcGF0aCIsImNvbG9yLXByb2ZpbGUiLCJzcmMiLCJjdXJzb3IiLCJmaWxsIiwiZmlsdGVyIiwibWFya2VyIiwibWFya2VyLXN0YXJ0IiwibWFya2VyLW1pZCIsIm1hcmtlci1lbmQiLCJtYXNrIiwic3Ryb2tlIl0sYk5lPUtuZS5tYXAobj0+YFske259XWApLmpvaW4oIiwgIikseE5lPS9edXJsXChbJyJdPyMoLio/KVsnIl0/XCkkLyxHdD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZ05le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcihlKSx0aGlzLl9pY29uUmVnaXN0cnk9aSx0aGlzLl9sb2NhdGlvbj1vLHRoaXMuX2Vycm9ySGFuZGxlcj1zLHRoaXMuX2lubGluZT0hMSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1bXSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPVNuLkVNUFRZLGEmJihhLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1hLmNvbG9yKSxhLmZvbnRTZXQmJih0aGlzLmZvbnRTZXQ9YS5mb250U2V0KSkscnx8ZS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIil9Z2V0IGlubGluZSgpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGlubGluZShlKXt0aGlzLl9pbmxpbmU9UnQoZSl9Z2V0IHN2Z0ljb24oKXtyZXR1cm4gdGhpcy5fc3ZnSWNvbn1zZXQgc3ZnSWNvbihlKXtlIT09dGhpcy5fc3ZnSWNvbiYmKGU/dGhpcy5fdXBkYXRlU3ZnSWNvbihlKTp0aGlzLl9zdmdJY29uJiZ0aGlzLl9jbGVhclN2Z0VsZW1lbnQoKSx0aGlzLl9zdmdJY29uPWUpfWdldCBmb250U2V0KCl7cmV0dXJuIHRoaXMuX2ZvbnRTZXR9c2V0IGZvbnRTZXQoZSl7bGV0IGk9dGhpcy5fY2xlYW51cEZvbnRWYWx1ZShlKTtpIT09dGhpcy5fZm9udFNldCYmKHRoaXMuX2ZvbnRTZXQ9aSx0aGlzLl91cGRhdGVGb250SWNvbkNsYXNzZXMoKSl9Z2V0IGZvbnRJY29uKCl7cmV0dXJuIHRoaXMuX2ZvbnRJY29ufXNldCBmb250SWNvbihlKXtsZXQgaT10aGlzLl9jbGVhbnVwRm9udFZhbHVlKGUpO2khPT10aGlzLl9mb250SWNvbiYmKHRoaXMuX2ZvbnRJY29uPWksdGhpcy5fdXBkYXRlRm9udEljb25DbGFzc2VzKCkpfV9zcGxpdEljb25OYW1lKGUpe2lmKCFlKXJldHVyblsiIiwiIl07bGV0IGk9ZS5zcGxpdCgiOiIpO3N3aXRjaChpLmxlbmd0aCl7Y2FzZSAxOnJldHVyblsiIixpWzBdXTtjYXNlIDI6cmV0dXJuIGk7ZGVmYXVsdDp0aHJvdyBFcnJvcihgSW52YWxpZCBpY29uIG5hbWU6ICIke2V9ImApfX1uZ09uSW5pdCgpe3RoaXMuX3VwZGF0ZUZvbnRJY29uQ2xhc3NlcygpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpZihlJiZlLnNpemUpe2xldCBpPXRoaXMuX2xvY2F0aW9uLmdldFBhdGhuYW1lKCk7aSE9PXRoaXMuX3ByZXZpb3VzUGF0aCYmKHRoaXMuX3ByZXZpb3VzUGF0aD1pLHRoaXMuX3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGkpKX19bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50SWNvbkZldGNoLnVuc3Vic2NyaWJlKCksdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzJiZ0aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXMuY2xlYXIoKX1fdXNpbmdGb250SWNvbigpe3JldHVybiF0aGlzLnN2Z0ljb259X3NldFN2Z0VsZW1lbnQoZSl7dGhpcy5fY2xlYXJTdmdFbGVtZW50KCk7bGV0IGk9dGhpcy5fbG9jYXRpb24uZ2V0UGF0aG5hbWUoKTt0aGlzLl9wcmV2aW91c1BhdGg9aSx0aGlzLl9jYWNoZUNoaWxkcmVuV2l0aEV4dGVybmFsUmVmZXJlbmNlcyhlKSx0aGlzLl9wcmVwZW5kUGF0aFRvUmVmZXJlbmNlcyhpKSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9X2NsZWFyU3ZnRWxlbWVudCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxpPWUuY2hpbGROb2Rlcy5sZW5ndGg7Zm9yKHRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcyYmdGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzLmNsZWFyKCk7aS0tOyl7bGV0IHI9ZS5jaGlsZE5vZGVzW2ldOygxIT09ci5ub2RlVHlwZXx8InN2ZyI9PT1yLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZyLnJlbW92ZSgpfX1fdXBkYXRlRm9udEljb25DbGFzc2VzKCl7aWYoIXRoaXMuX3VzaW5nRm9udEljb24oKSlyZXR1cm47bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9KHRoaXMuZm9udFNldD90aGlzLl9pY29uUmVnaXN0cnkuY2xhc3NOYW1lRm9yRm9udEFsaWFzKHRoaXMuZm9udFNldCkuc3BsaXQoLyArLyk6dGhpcy5faWNvblJlZ2lzdHJ5LmdldERlZmF1bHRGb250U2V0Q2xhc3MoKSkuZmlsdGVyKHI9PnIubGVuZ3RoPjApO3RoaXMuX3ByZXZpb3VzRm9udFNldENsYXNzLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QucmVtb3ZlKHIpKSxpLmZvckVhY2gocj0+ZS5jbGFzc0xpc3QuYWRkKHIpKSx0aGlzLl9wcmV2aW91c0ZvbnRTZXRDbGFzcz1pLHRoaXMuZm9udEljb24hPT10aGlzLl9wcmV2aW91c0ZvbnRJY29uQ2xhc3MmJiFpLmluY2x1ZGVzKCJtYXQtbGlnYXR1cmUtZm9udCIpJiYodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzJiZlLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzKSx0aGlzLmZvbnRJY29uJiZlLmNsYXNzTGlzdC5hZGQodGhpcy5mb250SWNvbiksdGhpcy5fcHJldmlvdXNGb250SWNvbkNsYXNzPXRoaXMuZm9udEljb24pfV9jbGVhbnVwRm9udFZhbHVlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lLnRyaW0oKS5zcGxpdCgiICIpWzBdOmV9X3ByZXBlbmRQYXRoVG9SZWZlcmVuY2VzKGUpe2xldCBpPXRoaXMuX2VsZW1lbnRzV2l0aEV4dGVybmFsUmVmZXJlbmNlcztpJiZpLmZvckVhY2goKHIsbyk9PntyLmZvckVhY2gocz0+e28uc2V0QXR0cmlidXRlKHMubmFtZSxgdXJsKCcke2V9IyR7cy52YWx1ZX0nKWApfSl9KX1fY2FjaGVDaGlsZHJlbldpdGhFeHRlcm5hbFJlZmVyZW5jZXMoZSl7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yQWxsKGJOZSkscj10aGlzLl9lbGVtZW50c1dpdGhFeHRlcm5hbFJlZmVyZW5jZXM9dGhpcy5fZWxlbWVudHNXaXRoRXh0ZXJuYWxSZWZlcmVuY2VzfHxuZXcgTWFwO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKUtuZS5mb3JFYWNoKHM9PntsZXQgYT1pW29dLGw9YS5nZXRBdHRyaWJ1dGUocyksYz1sP2wubWF0Y2goeE5lKTpudWxsO2lmKGMpe2xldCB1PXIuZ2V0KGEpO3V8fCh1PVtdLHIuc2V0KGEsdSkpLHUucHVzaCh7bmFtZTpzLHZhbHVlOmNbMV19KX19KX1fdXBkYXRlU3ZnSWNvbihlKXtpZih0aGlzLl9zdmdOYW1lc3BhY2U9bnVsbCx0aGlzLl9zdmdOYW1lPW51bGwsdGhpcy5fY3VycmVudEljb25GZXRjaC51bnN1YnNjcmliZSgpLGUpe2xldFtpLHJdPXRoaXMuX3NwbGl0SWNvbk5hbWUoZSk7aSYmKHRoaXMuX3N2Z05hbWVzcGFjZT1pKSxyJiYodGhpcy5fc3ZnTmFtZT1yKSx0aGlzLl9jdXJyZW50SWNvbkZldGNoPXRoaXMuX2ljb25SZWdpc3RyeS5nZXROYW1lZFN2Z0ljb24ocixpKS5waXBlKFF0KDEpKS5zdWJzY3JpYmUobz0+dGhpcy5fc2V0U3ZnRWxlbWVudChvKSxvPT57dGhpcy5fZXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBpY29uICR7aX06JHtyfSEgJHtvLm1lc3NhZ2V9YCkpfSl9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKHp2KSx2bygiYXJpYS1oaWRkZW4iKSxNKHZOZSksTShRcyksTShfTmUsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1pY29uIl1dLGhvc3RBdHRyczpbInJvbGUiLCJpbWciLDEsIm1hdC1pY29uIiwibm90cmFuc2xhdGUiXSxob3N0VmFyczo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJkYXRhLW1hdC1pY29uLXR5cGUiLGkuX3VzaW5nRm9udEljb24oKT8iZm9udCI6InN2ZyIpKCJkYXRhLW1hdC1pY29uLW5hbWUiLGkuX3N2Z05hbWV8fGkuZm9udEljb24pKCJkYXRhLW1hdC1pY29uLW5hbWVzcGFjZSIsaS5fc3ZnTmFtZXNwYWNlfHxpLmZvbnRTZXQpKCJmb250SWNvbiIsaS5fdXNpbmdGb250SWNvbigpP2kuZm9udEljb246bnVsbCksZXQoIm1hdC1pY29uLWlubGluZSIsaS5pbmxpbmUpKCJtYXQtaWNvbi1uby1jb2xvciIsInByaW1hcnkiIT09aS5jb2xvciYmImFjY2VudCIhPT1pLmNvbG9yJiYid2FybiIhPT1pLmNvbG9yKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixpbmxpbmU6ImlubGluZSIsc3ZnSWNvbjoic3ZnSWNvbiIsZm9udFNldDoiZm9udFNldCIsZm9udEljb246ImZvbnRJY29uIn0sZXhwb3J0QXM6WyJtYXRJY29uIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6ZE5lLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxWbigwKSl9LHN0eWxlczpbIi5tYXQtaWNvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmlsbDpjdXJyZW50Q29sb3I7aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1pY29uLm1hdC1pY29uLWlubGluZXtmb250LXNpemU6aW5oZXJpdDtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O3dpZHRoOmluaGVyaXR9Lm1hdC1pY29uLm1hdC1saWdhdHVyZS1mb250W2ZvbnRJY29uXTo6YmVmb3Jle2NvbnRlbnQ6YXR0cihmb250SWNvbil9W2Rpcj1ydGxdIC5tYXQtaWNvbi1ydGwtbWlycm9ye3RyYW5zZm9ybTpzY2FsZSgtMSwgMSl9Lm1hdC1mb3JtLWZpZWxkOm5vdCgubWF0LWZvcm0tZmllbGQtYXBwZWFyYW5jZS1sZWdhY3kpIC5tYXQtZm9ybS1maWVsZC1wcmVmaXggLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbntkaXNwbGF5OmJsb2NrfS5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtcHJlZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29uLC5tYXQtZm9ybS1maWVsZDpub3QoLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtbGVnYWN5KSAubWF0LWZvcm0tZmllbGQtc3VmZml4IC5tYXQtaWNvbi1idXR0b24gLm1hdC1pY29ue21hcmdpbjphdXRvfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHBuPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltsbixsbl19KSxufSkoKSxDTmU9WyIqIixbWyJtYXQtdG9vbGJhci1yb3ciXV1dLE1OZT1bIioiLCJtYXQtdG9vbGJhci1yb3ciXSx3TmU9a28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLFNOZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRvb2xiYXItcm93Il1dLGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXItcm93Il0sZXhwb3J0QXM6WyJtYXRUb29sYmFyUm93Il19KSxufSkoKSxabmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHdOZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSksdGhpcy5fcGxhdGZvcm09aSx0aGlzLl9kb2N1bWVudD1yfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuX2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKSx0aGlzLl90b29sYmFyUm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hlY2tUb29sYmFyTWl4ZWRNb2RlcygpKSl9X2NoZWNrVG9vbGJhck1peGVkTW9kZXMoKXt9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0ob2kpLE0oSHQpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtdG9vbGJhciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZFaShyLFNOZSw1KSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLl90b29sYmFyUm93cz1vKX19LGhvc3RBdHRyczpbMSwibWF0LXRvb2xiYXIiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoIm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3MiLGkuX3Rvb2xiYXJSb3dzLmxlbmd0aD4wKSgibWF0LXRvb2xiYXItc2luZ2xlLXJvdyIsMD09PWkuX3Rvb2xiYXJSb3dzLmxlbmd0aCl9LGlucHV0czp7Y29sb3I6ImNvbG9yIn0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6TU5lLGRlY2xzOjIsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoQ05lKSxWbigwKSxWbigxLDEpKX0sc3R5bGVzOlsiLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2xiYXJ7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sYmFyLXJvdywubWF0LXRvb2xiYXItc2luZ2xlLXJvd3tkaXNwbGF5OmZsZXg7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1hdC10b29sYmFyLW11bHRpcGxlLXJvd3N7ZGlzcGxheTpmbGV4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxKbmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W2xuLGxuXX0pLG59KSgpO2Z1bmN0aW9uIFFIKG4pe3JldHVybiBuLnN0YXRlIT09T2UuTk9UX0xPQURFRCYmbi5zdGF0ZSE9PU9lLkxPQURJTkd9dmFyIFROZT12cihSZWUsU2UoWEksbj0+UUgobik/ey4uLm4sc2V0dGluZ3M6ey4uLm4uc2V0dGluZ3MscmVsb2FkRW5hYmxlZDohbi5zZXR0aW5ncy5yZWxvYWRFbmFibGVkfX06biksU2UoUUksKG4se3BlcmlvZEluTXM6dH0pPT57aWYoIVFIKG4pKXJldHVybiBuO2xldCBlPXQ+PTNlND90Om4uc2V0dGluZ3MucmVsb2FkUGVyaW9kSW5NcztyZXR1cm57Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncyxyZWxvYWRQZXJpb2RJbk1zOmV9fX0pLFNlKEtJLChuLHtzaXplOnR9KT0+e2lmKCFRSChuKSlyZXR1cm4gbjtsZXQgZT10PjA/dDpuLnNldHRpbmdzLnBhZ2VTaXplO3JldHVybnsuLi5uLHNldHRpbmdzOnsuLi5uLnNldHRpbmdzLHBhZ2VTaXplOmV9fX0pLFNlKFljLChuLHtwYXJ0aWFsU2V0dGluZ3M6dH0pPT57bGV0IGU9e307cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0LnBhZ2VTaXplKSYmdC5wYWdlU2l6ZT4wJiYoZS5wYWdlU2l6ZT1OdW1iZXIodC5wYWdlU2l6ZSkpLCJib29sZWFuIj09dHlwZW9mIHQuYXV0b1JlbG9hZCYmKGUucmVsb2FkRW5hYmxlZD10LmF1dG9SZWxvYWQpLE51bWJlci5pc0Zpbml0ZSh0LmF1dG9SZWxvYWRQZXJpb2RJbk1zKSYmdC5hdXRvUmVsb2FkUGVyaW9kSW5Ncz4zZTQmJihlLnJlbG9hZFBlcmlvZEluTXM9TnVtYmVyKHQuYXV0b1JlbG9hZFBlcmlvZEluTXMpKSx7Li4ubixzZXR0aW5nczp7Li4ubi5zZXR0aW5ncywuLi5lfX19KSk7ZnVuY3Rpb24gJG5lKG4sdCl7cmV0dXJuIFROZShuLHQpfXZhciBETmU9WyJpbnB1dCJdLEFOZT1bImxhYmVsIl0sSU5lPWZ1bmN0aW9uKG4pe3JldHVybntlbnRlckR1cmF0aW9uOm59fSxQTmU9WyIqIl0sUk5lPW5ldyBwZSgibWF0LWNoZWNrYm94LWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57Y29sb3I6ImFjY2VudCIsY2xpY2tBY3Rpb246ImNoZWNrLWluZGV0ZXJtaW5hdGUifX19KTt2YXIgT05lPTAsZWllPXtjb2xvcjoiYWNjZW50IixjbGlja0FjdGlvbjoiY2hlY2staW5kZXRlcm1pbmF0ZSJ9LGtOZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+eWwpLG11bHRpOiEwfSxGTmU9b2Moa28ocW8oc28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pKSkpLE5OZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgRk5le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKGkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fbmdab25lPW8sdGhpcy5fYW5pbWF0aW9uTW9kZT1hLHRoaXMuX29wdGlvbnM9bCx0aGlzLmFyaWFMYWJlbD0iIix0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5sYWJlbFBvc2l0aW9uPSJhZnRlciIsdGhpcy5uYW1lPW51bGwsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlPW5ldyBHLHRoaXMuX29uVG91Y2hlZD0oKT0+e30sdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzPSIiLHRoaXMuX2N1cnJlbnRDaGVja1N0YXRlPTAsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fY2hlY2tlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9pbmRldGVybWluYXRlPSExLHRoaXMuX29wdGlvbnM9dGhpcy5fb3B0aW9uc3x8ZWllLHRoaXMuY29sb3I9dGhpcy5kZWZhdWx0Q29sb3I9dGhpcy5fb3B0aW9ucy5jb2xvcnx8ZWllLmNvbG9yLHRoaXMudGFiSW5kZXg9cGFyc2VJbnQocyl8fDAsdGhpcy5pZD10aGlzLl91bmlxdWVJZD1gJHtlfSR7KytPTmV9YH1nZXQgaW5wdXRJZCgpe3JldHVybmAke3RoaXMuaWR8fHRoaXMuX3VuaXF1ZUlkfS1pbnB1dGB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zeW5jSW5kZXRlcm1pbmF0ZSh0aGlzLl9pbmRldGVybWluYXRlKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe2xldCBpPVJ0KGUpO2khPXRoaXMuY2hlY2tlZCYmKHRoaXMuX2NoZWNrZWQ9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXtsZXQgaT1SdChlKTtpIT09dGhpcy5kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfWdldCBpbmRldGVybWluYXRlKCl7cmV0dXJuIHRoaXMuX2luZGV0ZXJtaW5hdGV9c2V0IGluZGV0ZXJtaW5hdGUoZSl7bGV0IGk9ZSE9dGhpcy5faW5kZXRlcm1pbmF0ZTt0aGlzLl9pbmRldGVybWluYXRlPVJ0KGUpLGkmJih0aGlzLl90cmFuc2l0aW9uQ2hlY2tTdGF0ZSh0aGlzLl9pbmRldGVybWluYXRlPzM6dGhpcy5jaGVja2VkPzE6MiksdGhpcy5pbmRldGVybWluYXRlQ2hhbmdlLmVtaXQodGhpcy5faW5kZXRlcm1pbmF0ZSkpLHRoaXMuX3N5bmNJbmRldGVybWluYXRlKHRoaXMuX2luZGV0ZXJtaW5hdGUpfV9pc1JpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5kaXNhYmxlZH1fb25MYWJlbFRleHRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmNoZWNrZWQ9ISFlfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfV9nZXRBcmlhQ2hlY2tlZCgpe3JldHVybiB0aGlzLmNoZWNrZWQ/InRydWUiOnRoaXMuaW5kZXRlcm1pbmF0ZT8ibWl4ZWQiOiJmYWxzZSJ9X3RyYW5zaXRpb25DaGVja1N0YXRlKGUpe2xldCBpPXRoaXMuX2N1cnJlbnRDaGVja1N0YXRlLHI9dGhpcy5fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpO2lmKGkhPT1lJiZyJiYodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzJiZyLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzKSx0aGlzLl9jdXJyZW50QW5pbWF0aW9uQ2xhc3M9dGhpcy5fZ2V0QW5pbWF0aW9uQ2xhc3NGb3JDaGVja1N0YXRlVHJhbnNpdGlvbihpLGUpLHRoaXMuX2N1cnJlbnRDaGVja1N0YXRlPWUsdGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzLmxlbmd0aD4wKSl7ci5jbGFzc0xpc3QuYWRkKHRoaXMuX2N1cnJlbnRBbmltYXRpb25DbGFzcyk7bGV0IG89dGhpcy5fY3VycmVudEFuaW1hdGlvbkNsYXNzO3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9PntyLmNsYXNzTGlzdC5yZW1vdmUobyl9LDFlMyl9KX19X2VtaXRDaGFuZ2VFdmVudCgpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4odGhpcy5jaGVja2VkKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KHRoaXMuY2hlY2tlZCkpLHRoaXMuX2lucHV0RWxlbWVudCYmKHRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ9dGhpcy5jaGVja2VkKX10b2dnbGUoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMuY2hlY2tlZCl9X2hhbmRsZUlucHV0Q2xpY2soKXtsZXQgZT10aGlzLl9vcHRpb25zPy5jbGlja0FjdGlvbjt0aGlzLmRpc2FibGVkfHwibm9vcCI9PT1lPyF0aGlzLmRpc2FibGVkJiYibm9vcCI9PT1lJiYodGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hlY2tlZD10aGlzLmNoZWNrZWQsdGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT10aGlzLmluZGV0ZXJtaW5hdGUpOih0aGlzLmluZGV0ZXJtaW5hdGUmJiJjaGVjayIhPT1lJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5faW5kZXRlcm1pbmF0ZT0hMSx0aGlzLmluZGV0ZXJtaW5hdGVDaGFuZ2UuZW1pdCh0aGlzLl9pbmRldGVybWluYXRlKX0pLHRoaXMuX2NoZWNrZWQ9IXRoaXMuX2NoZWNrZWQsdGhpcy5fdHJhbnNpdGlvbkNoZWNrU3RhdGUodGhpcy5fY2hlY2tlZD8xOjIpLHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpKX1fb25JbnRlcmFjdGlvbkV2ZW50KGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9X29uQmx1cigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9nZXRBbmltYXRpb25DbGFzc0ZvckNoZWNrU3RhdGVUcmFuc2l0aW9uKGUsaSl7aWYoIk5vb3BBbmltYXRpb25zIj09PXRoaXMuX2FuaW1hdGlvbk1vZGUpcmV0dXJuIiI7c3dpdGNoKGUpe2Nhc2UgMDppZigxPT09aSlyZXR1cm4gdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0NoZWNrZWQ7aWYoMz09aSlyZXR1cm4gdGhpcy5fY2hlY2tlZD90aGlzLl9hbmltYXRpb25DbGFzc2VzLmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU6dGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcy51bmNoZWNrZWRUb0luZGV0ZXJtaW5hdGU7YnJlYWs7Y2FzZSAyOnJldHVybiAxPT09aT90aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLnVuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDE6cmV0dXJuIDI9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvVW5jaGVja2VkOnRoaXMuX2FuaW1hdGlvbkNsYXNzZXMuY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZTtjYXNlIDM6cmV0dXJuIDE9PT1pP3RoaXMuX2FuaW1hdGlvbkNsYXNzZXMuaW5kZXRlcm1pbmF0ZVRvQ2hlY2tlZDp0aGlzLl9hbmltYXRpb25DbGFzc2VzLmluZGV0ZXJtaW5hdGVUb1VuY2hlY2tlZH1yZXR1cm4iIn1fc3luY0luZGV0ZXJtaW5hdGUoZSl7bGV0IGk9dGhpcy5faW5wdXRFbGVtZW50O2kmJihpLm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZT1lKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe25sKCl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoRE5lLDUpLG90KEFOZSw1KSxvdChZbyw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW5wdXRFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl9sYWJlbEVsZW1lbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkucmlwcGxlPXIuZmlyc3QpfX0saW5wdXRzOnthcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXSxpZDoiaWQiLHJlcXVpcmVkOiJyZXF1aXJlZCIsbGFiZWxQb3NpdGlvbjoibGFiZWxQb3NpdGlvbiIsbmFtZToibmFtZSIsdmFsdWU6InZhbHVlIixjaGVja2VkOiJjaGVja2VkIixkaXNhYmxlZDoiZGlzYWJsZWQiLGluZGV0ZXJtaW5hdGU6ImluZGV0ZXJtaW5hdGUifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5kZXRlcm1pbmF0ZUNoYW5nZToiaW5kZXRlcm1pbmF0ZUNoYW5nZSJ9LGZlYXR1cmVzOlt0dF19KSxufSkoKSx5bD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgTk5le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3N1cGVyKCJtYXQtY2hlY2tib3gtIixlLGksbyxzLGEsbCksdGhpcy5fZm9jdXNNb25pdG9yPXIsdGhpcy5fYW5pbWF0aW9uQ2xhc3Nlcz17dW5jaGVja2VkVG9DaGVja2VkOiJtYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtY2hlY2tlZCIsdW5jaGVja2VkVG9JbmRldGVybWluYXRlOiJtYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSIsY2hlY2tlZFRvVW5jaGVja2VkOiJtYXQtY2hlY2tib3gtYW5pbS1jaGVja2VkLXVuY2hlY2tlZCIsY2hlY2tlZFRvSW5kZXRlcm1pbmF0ZToibWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIixpbmRldGVybWluYXRlVG9DaGVja2VkOiJtYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQiLGluZGV0ZXJtaW5hdGVUb1VuY2hlY2tlZDoibWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQifX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuc291cmNlPXRoaXMsaS5jaGVja2VkPWUsaX1fZ2V0QW5pbWF0aW9uVGFyZ2V0RWxlbWVudCgpe3JldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdJbml0KCl7c3VwZXIubmdBZnRlclZpZXdJbml0KCksdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntlfHx0aGlzLl9vbkJsdXIoKX0pfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpfV9vbklucHV0Q2xpY2soZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxzdXBlci5faGFuZGxlSW5wdXRDbGljaygpfWZvY3VzKGUsaSl7ZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5faW5wdXRFbGVtZW50LGUsaSk6dGhpcy5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoaSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oRnIpLE0oX3QpLHZvKCJ0YWJpbmRleCIpLE0oUGksOCksTShSTmUsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCJdXSxob3N0QXR0cnM6WzEsIm1hdC1jaGVja2JveCJdLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKF9zKCJpZCIsaS5pZCksemUoInRhYmluZGV4IixudWxsKSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCksZXQoIm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIixpLmluZGV0ZXJtaW5hdGUpKCJtYXQtY2hlY2tib3gtY2hlY2tlZCIsaS5jaGVja2VkKSgibWF0LWNoZWNrYm94LWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LWNoZWNrYm94LWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PWkubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZSkpfSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4In0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdLGZlYXR1cmVzOlskdChba05lXSksdHRdLG5nQ29udGVudFNlbGVjdG9yczpQTmUsZGVjbHM6MTcsdmFyczoyMSxjb25zdHM6W1sxLCJtYXQtY2hlY2tib3gtbGF5b3V0Il0sWyJsYWJlbCIsIiJdLFsxLCJtYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLDEsIm1hdC1jaGVja2JveC1pbnB1dCIsImNkay12aXN1YWxseS1oaWRkZW4iLDMsImlkIiwicmVxdWlyZWQiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJ0YWJJbmRleCIsImNoYW5nZSIsImNsaWNrIl0sWyJpbnB1dCIsIiJdLFsibWF0UmlwcGxlIiwiIiwxLCJtYXQtY2hlY2tib3gtcmlwcGxlIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlUmFkaXVzIiwibWF0UmlwcGxlQ2VudGVyZWQiLCJtYXRSaXBwbGVBbmltYXRpb24iXSxbMSwibWF0LXJpcHBsZS1lbGVtZW50IiwibWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlIl0sWzEsIm1hdC1jaGVja2JveC1mcmFtZSJdLFsxLCJtYXQtY2hlY2tib3gtYmFja2dyb3VuZCJdLFsidmVyc2lvbiIsIjEuMSIsImZvY3VzYWJsZSIsImZhbHNlIiwidmlld0JveCIsIjAgMCAyNCAyNCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWF0LWNoZWNrYm94LWNoZWNrbWFyayJdLFsiZmlsbCIsIm5vbmUiLCJzdHJva2UiLCJ3aGl0ZSIsImQiLCJNNC4xLDEyLjcgOSwxNy42IDIwLjMsNi4zIiwxLCJtYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGgiXSxbMSwibWF0LWNoZWNrYm94LW1peGVkbWFyayJdLFsxLCJtYXQtY2hlY2tib3gtbGFiZWwiLDMsImNka09ic2VydmVDb250ZW50Il0sWyJjaGVja2JveExhYmVsIiwiIl0sWzIsImRpc3BsYXkiLCJub25lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoeGkoKSxfKDAsImxhYmVsIiwwLDEpKDIsInNwYW4iLDIpKDMsImlucHV0IiwzLDQpLFAoImNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uSW50ZXJhY3Rpb25FdmVudChvKX0pKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uSW5wdXRDbGljayhvKX0pLHYoKSxfKDUsInNwYW4iLDUpLE8oNiwic3BhbiIsNiksdigpLE8oNywic3BhbiIsNyksXyg4LCJzcGFuIiw4KSxJbigpLF8oOSwic3ZnIiw5KSxPKDEwLCJwYXRoIiwxMCksdigpLEpzKCksTygxMSwic3BhbiIsMTEpLHYoKSgpLF8oMTIsInNwYW4iLDEyLDEzKSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25MYWJlbFRleHRDaGFuZ2UoKX0pLF8oMTQsInNwYW4iLDE0KSxBKDE1LCJceGEwIiksdigpLFZuKDE2KSx2KCkoKSksMiZlKXtsZXQgcj0kZSgxKSxvPSRlKDEzKTt6ZSgiZm9yIixpLmlucHV0SWQpLEMoMiksZXQoIm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXItbm8tc2lkZS1tYXJnaW4iLCFvLnRleHRDb250ZW50fHwhby50ZXh0Q29udGVudC50cmltKCkpLEMoMSkseSgiaWQiLGkuaW5wdXRJZCkoInJlcXVpcmVkIixpLnJlcXVpcmVkKSgiY2hlY2tlZCIsaS5jaGVja2VkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJ0YWJJbmRleCIsaS50YWJJbmRleCksemUoInZhbHVlIixpLnZhbHVlKSgibmFtZSIsaS5uYW1lKSgiYXJpYS1sYWJlbCIsaS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXJpYUxhYmVsbGVkYnkpKCJhcmlhLWNoZWNrZWQiLGkuX2dldEFyaWFDaGVja2VkKCkpKCJhcmlhLWRlc2NyaWJlZGJ5IixpLmFyaWFEZXNjcmliZWRieSksQygyKSx5KCJtYXRSaXBwbGVUcmlnZ2VyIixyKSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2lzUmlwcGxlRGlzYWJsZWQoKSkoIm1hdFJpcHBsZVJhZGl1cyIsMjApKCJtYXRSaXBwbGVDZW50ZXJlZCIsITApKCJtYXRSaXBwbGVBbmltYXRpb24iLE9uKDE5LElOZSwiTm9vcEFuaW1hdGlvbnMiPT09aS5fYW5pbWF0aW9uTW9kZT8wOjE1MCkpfX0sZGVwZW5kZW5jaWVzOltZbyx3aF0sc3R5bGVzOlsnQGtleWZyYW1lcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kezAle29wYWNpdHk6MH01MCV7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kezAlLDUwJXtvcGFjaXR5OjF9MTAwJXtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1jaGVja2VkLWNoZWNrbWFyay1wYXRoezAlLDUwJXtzdHJva2UtZGFzaG9mZnNldDoyMi45MTAyNTl9NTAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjB9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LXVuY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3swJSw2OC4yJXt0cmFuc2Zvcm06c2NhbGVYKDApfTY4LjIle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAsIDEpfTEwMCV7dHJhbnNmb3JtOnNjYWxlWCgxKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC11bmNoZWNrZWQtY2hlY2ttYXJrLXBhdGh7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjQsIDAsIDEsIDEpO3N0cm9rZS1kYXNob2Zmc2V0OjB9dG97c3Ryb2tlLWRhc2hvZmZzZXQ6LTIyLjkxMDI1OX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLWNoZWNrbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjE7dHJhbnNmb3JtOnJvdGF0ZSgwZGVnKX10b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9fUBrZXlmcmFtZXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt7ZnJvbXthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllcigwLjE0LCAwLCAwLCAxKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtY2hlY2tlZC1pbmRldGVybWluYXRlLW1peGVkbWFya3tmcm9te2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMC4xKTtvcGFjaXR5OjA7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfXRve29wYWNpdHk6MTt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1jaGVja2JveC1pbmRldGVybWluYXRlLWNoZWNrZWQtbWl4ZWRtYXJre2Zyb217YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4xNCwgMCwgMCwgMSk7b3BhY2l0eToxO3RyYW5zZm9ybTpyb3RhdGUoMGRlZyl9dG97b3BhY2l0eTowO3RyYW5zZm9ybTpyb3RhdGUoMzE1ZGVnKX19QGtleWZyYW1lcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrezAle2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246bGluZWFyO29wYWNpdHk6MTt0cmFuc2Zvcm06c2NhbGVYKDEpfTMyLjglLDEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCl9fS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZCwubWF0LWNoZWNrYm94LWZyYW1le3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtY2hlY2tib3h7ZGlzcGxheTppbmxpbmUtYmxvY2s7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtwb3NpdGlvbjpyZWxhdGl2ZX0ubWF0LWNoZWNrYm94Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC1jaGVja2JveCAubWF0LXJpcHBsZS1lbGVtZW50Om5vdCgubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxlKXtvcGFjaXR5Oi4xNn0ubWF0LWNoZWNrYm94IC5tYXQtY2hlY2tib3gtcmlwcGxle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYyg1MCUgLSAyMHB4KTt0b3A6Y2FsYyg1MCUgLSAyMHB4KTtoZWlnaHQ6NDBweDt3aWR0aDo0MHB4O3otaW5kZXg6MTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtY2hlY2tib3gtbGF5b3V0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2N1cnNvcjppbmhlcml0O2FsaWduLWl0ZW1zOmJhc2VsaW5lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OmlubGluZS1mbGV4O3doaXRlLXNwYWNlOm5vd3JhcH0ubWF0LWNoZWNrYm94LWxhYmVsey13ZWJraXQtdXNlci1zZWxlY3Q6YXV0bzt1c2VyLXNlbGVjdDphdXRvfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxNnB4O2xpbmUtaGVpZ2h0OjA7bWFyZ2luOmF1dG87bWFyZ2luLXJpZ2h0OjhweDtvcmRlcjowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6MTZweDtmbGV4LXNocmluazowfVtkaXI9cnRsXSAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99Lm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXItbm8tc2lkZS1tYXJnaW57bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ubWF0LWNoZWNrYm94LWZyYW1le2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItc3R5bGU6c29saWR9Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtY2hlY2tib3gtZnJhbWV7dHJhbnNpdGlvbjpub25lfS5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSksb3BhY2l0eSA5MG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDAuMSk7LXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6ZXhhY3Q7Y29sb3ItYWRqdXN0OmV4YWN0fS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7dHJhbnNpdGlvbjpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YmFja2dyb3VuZDpub25lfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVyOmhvdmVyIC5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMDR9Lm1hdC1jaGVja2JveC5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle29wYWNpdHk6LjEyfS5tYXQtY2hlY2tib3gtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1jaGVja2JveC5tYXQtY2hlY2tib3gtZGlzYWJsZWQgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXI6aG92ZXIgLm1hdC1jaGVja2JveC1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcjpob3ZlciAubWF0LWNoZWNrYm94LXBlcnNpc3RlbnQtcmlwcGxle2Rpc3BsYXk6bm9uZX19Lm1hdC1jaGVja2JveC1jaGVja21hcmt7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJX0ubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjIyLjkxMDI1OTtzdHJva2UtZGFzaGFycmF5OjIyLjkxMDI1OTtzdHJva2Utd2lkdGg6Mi4xMzMzMzMzMzMzcHh9LmNkay1oaWdoLWNvbnRyYXN0LWJsYWNrLW9uLXdoaXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJrLXBhdGh7c3Ryb2tlOiMwMDAgIWltcG9ydGFudH0ubWF0LWNoZWNrYm94LW1peGVkbWFya3t3aWR0aDpjYWxjKDEwMCUgLSA2cHgpO2hlaWdodDoycHg7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZVgoMCkgcm90YXRlKDBkZWcpO2JvcmRlci1yYWRpdXM6MnB4fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1taXhlZG1hcmt7aGVpZ2h0OjA7Ym9yZGVyLXRvcDpzb2xpZCAycHg7bWFyZ2luLXRvcDoycHh9Lm1hdC1jaGVja2JveC1sYWJlbC1iZWZvcmUgLm1hdC1jaGVja2JveC1pbm5lci1jb250YWluZXJ7b3JkZXI6MTttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OmF1dG99W2Rpcj1ydGxdIC5tYXQtY2hlY2tib3gtbGFiZWwtYmVmb3JlIC5tYXQtY2hlY2tib3gtaW5uZXItY29udGFpbmVye21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OjhweH0ubWF0LWNoZWNrYm94LWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7b3BhY2l0eToxfS5tYXQtY2hlY2tib3gtY2hlY2tlZCAubWF0LWNoZWNrYm94LWNoZWNrbWFyay1wYXRoe3N0cm9rZS1kYXNob2Zmc2V0OjB9Lm1hdC1jaGVja2JveC1jaGVja2VkIC5tYXQtY2hlY2tib3gtbWl4ZWRtYXJre3RyYW5zZm9ybTpzY2FsZVgoMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1jaGVja2JveC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre29wYWNpdHk6MDt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHtzdHJva2UtZGFzaG9mZnNldDowfS5tYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlWCgxKSByb3RhdGUoMGRlZyl9Lm1hdC1jaGVja2JveC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LWNoZWNrYm94LWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1jaGVja2JveC1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtY2hlY2tlZCAubWF0LWNoZWNrYm94LWJhY2tncm91bmR7YW5pbWF0aW9uOjE4MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWZhZGUtaW4tYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tdW5jaGVja2VkLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtdW5jaGVja2VkLWNoZWNrZWQtY2hlY2ttYXJrLXBhdGh9Lm1hdC1jaGVja2JveC1hbmltLXVuY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1pbi1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC11bmNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1taXhlZG1hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtdW5jaGVja2VkIC5tYXQtY2hlY2tib3gtYmFja2dyb3VuZHthbmltYXRpb246MTgwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtZmFkZS1vdXQtYmFja2dyb3VuZH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmstcGF0aHthbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLXVuY2hlY2tlZC1jaGVja21hcmstcGF0aH0ubWF0LWNoZWNrYm94LWFuaW0tY2hlY2tlZC1pbmRldGVybWluYXRlIC5tYXQtY2hlY2tib3gtY2hlY2ttYXJre2FuaW1hdGlvbjo5MG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWNoZWNrZWQtaW5kZXRlcm1pbmF0ZS1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWNoZWNrZWQtaW5kZXRlcm1pbmF0ZSAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246OTBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1jaGVja2VkLWluZGV0ZXJtaW5hdGUtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLWNoZWNrZWQgLm1hdC1jaGVja2JveC1jaGVja21hcmt7YW5pbWF0aW9uOjUwMG1zIGxpbmVhciAwbXMgbWF0LWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtY2hlY2tlZC1jaGVja21hcmt9Lm1hdC1jaGVja2JveC1hbmltLWluZGV0ZXJtaW5hdGUtY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246NTAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1jaGVja2VkLW1peGVkbWFya30ubWF0LWNoZWNrYm94LWFuaW0taW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQgLm1hdC1jaGVja2JveC1iYWNrZ3JvdW5ke2FuaW1hdGlvbjoxODBtcyBsaW5lYXIgMG1zIG1hdC1jaGVja2JveC1mYWRlLW91dC1iYWNrZ3JvdW5kfS5tYXQtY2hlY2tib3gtYW5pbS1pbmRldGVybWluYXRlLXVuY2hlY2tlZCAubWF0LWNoZWNrYm94LW1peGVkbWFya3thbmltYXRpb246MzAwbXMgbGluZWFyIDBtcyBtYXQtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS11bmNoZWNrZWQtbWl4ZWRtYXJrfS5tYXQtY2hlY2tib3gtaW5wdXR7Ym90dG9tOjA7bGVmdDo1MCV9Lm1hdC1jaGVja2JveC1pbnB1dDpmb2N1c34ubWF0LWZvY3VzLWluZGljYXRvcjo6YmVmb3Jle2NvbnRlbnQ6IiJ9J10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTE5lPXtwcm92aWRlOkxvLHVzZUV4aXN0aW5nOkpuKCgpPT5CTmUpLG11bHRpOiEwfSxCTmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGd3e31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1jaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJtYXQtY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0sZmVhdHVyZXM6WyR0KFtMTmVdKSx0dF19KSxufSkoKSx0aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLExzPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltfbCxsbixvZCx0aWUsbG4sdGllXX0pLG59KSgpLGlpZT1sYSh7cGFzc2l2ZTohMH0pLHJpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGxhdGZvcm09ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9tb25pdG9yZWRFbGVtZW50cz1uZXcgTWFwfW1vbml0b3IoZSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4gZW87bGV0IGk9TGEoZSkscj10aGlzLl9tb25pdG9yZWRFbGVtZW50cy5nZXQoaSk7aWYocilyZXR1cm4gci5zdWJqZWN0O2xldCBvPW5ldyBrZSxzPSJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIixhPWw9PnsiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtc3RhcnQiIT09bC5hbmltYXRpb25OYW1lfHxpLmNsYXNzTGlzdC5jb250YWlucyhzKT8iY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtZW5kIj09PWwuYW5pbWF0aW9uTmFtZSYmaS5jbGFzc0xpc3QuY29udGFpbnMocykmJihpLmNsYXNzTGlzdC5yZW1vdmUocyksdGhpcy5fbmdab25lLnJ1bigoKT0+by5uZXh0KHt0YXJnZXQ6bC50YXJnZXQsaXNBdXRvZmlsbGVkOiExfSkpKTooaS5jbGFzc0xpc3QuYWRkKHMpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pm8ubmV4dCh7dGFyZ2V0OmwudGFyZ2V0LGlzQXV0b2ZpbGxlZDohMH0pKSl9O3JldHVybiB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixhLGlpZSksaS5jbGFzc0xpc3QuYWRkKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbC1tb25pdG9yZWQiKX0pLHRoaXMuX21vbml0b3JlZEVsZW1lbnRzLnNldChpLHtzdWJqZWN0Om8sdW5saXN0ZW46KCk9PntpLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixhLGlpZSl9fSksb31zdG9wTW9uaXRvcmluZyhlKXtsZXQgaT1MYShlKSxyPXRoaXMuX21vbml0b3JlZEVsZW1lbnRzLmdldChpKTtyJiYoci51bmxpc3RlbigpLHIuc3ViamVjdC5jb21wbGV0ZSgpLGkuY2xhc3NMaXN0LnJlbW92ZSgiY2RrLXRleHQtZmllbGQtYXV0b2ZpbGwtbW9uaXRvcmVkIiksaS5jbGFzc0xpc3QucmVtb3ZlKCJjZGstdGV4dC1maWVsZC1hdXRvZmlsbGVkIiksdGhpcy5fbW9uaXRvcmVkRWxlbWVudHMuZGVsZXRlKGkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vbml0b3JlZEVsZW1lbnRzLmZvckVhY2goKGUsaSk9PnRoaXMuc3RvcE1vbml0b3JpbmcoaSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKG9pKSxqKF90KSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksbn0pKCksWkg9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLEhOZT1uZXcgcGUoIk1BVF9JTlBVVF9WQUxVRV9BQ0NFU1NPUiIpLFVOZT1bImJ1dHRvbiIsImNoZWNrYm94IiwiZmlsZSIsImhpZGRlbiIsImltYWdlIiwicmFkaW8iLCJyYW5nZSIsInJlc2V0Iiwic3VibWl0Il0sek5lPTAsak5lPUR2KGNsYXNze2NvbnN0cnVjdG9yKG4sdCxlLGkpe3RoaXMuX2RlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcj1uLHRoaXMuX3BhcmVudEZvcm09dCx0aGlzLl9wYXJlbnRGb3JtR3JvdXA9ZSx0aGlzLm5nQ29udHJvbD1pLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBrZX19KSxVaD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgak5le2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwsYyx1LGQpe3N1cGVyKGEsbyxzLHIpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9wbGF0Zm9ybT1pLHRoaXMuX2F1dG9maWxsTW9uaXRvcj1jLHRoaXMuX2Zvcm1GaWVsZD1kLHRoaXMuX3VpZD0ibWF0LWlucHV0LSIrek5lKyssdGhpcy5mb2N1c2VkPSExLHRoaXMuc3RhdGVDaGFuZ2VzPW5ldyBrZSx0aGlzLmNvbnRyb2xUeXBlPSJtYXQtaW5wdXQiLHRoaXMuYXV0b2ZpbGxlZD0hMSx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl90eXBlPSJ0ZXh0Iix0aGlzLl9yZWFkb25seT0hMSx0aGlzLl9uZXZlckVtcHR5SW5wdXRUeXBlcz1bImRhdGUiLCJkYXRldGltZSIsImRhdGV0aW1lLWxvY2FsIiwibW9udGgiLCJ0aW1lIiwid2VlayJdLmZpbHRlcihmPT5wSCgpLmhhcyhmKSksdGhpcy5faU9TS2V5dXBMaXN0ZW5lcj1mPT57bGV0IG09Zi50YXJnZXQ7IW0udmFsdWUmJjA9PT1tLnNlbGVjdGlvblN0YXJ0JiYwPT09bS5zZWxlY3Rpb25FbmQmJihtLnNldFNlbGVjdGlvblJhbmdlKDEsMSksbS5zZXRTZWxlY3Rpb25SYW5nZSgwLDApKX07bGV0IHA9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGg9cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3RoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvcj1sfHxwLHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9dGhpcy52YWx1ZSx0aGlzLmlkPXRoaXMuaWQsaS5JT1MmJnUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntlLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX2lPU0tleXVwTGlzdGVuZXIpfSksdGhpcy5faXNTZXJ2ZXI9IXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcix0aGlzLl9pc05hdGl2ZVNlbGVjdD0ic2VsZWN0Ij09PWgsdGhpcy5faXNUZXh0YXJlYT0idGV4dGFyZWEiPT09aCx0aGlzLl9pc0luRm9ybUZpZWxkPSEhZCx0aGlzLl9pc05hdGl2ZVNlbGVjdCYmKHRoaXMuY29udHJvbFR5cGU9cC5tdWx0aXBsZT8ibWF0LW5hdGl2ZS1zZWxlY3QtbXVsdGlwbGUiOiJtYXQtbmF0aXZlLXNlbGVjdCIpfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLm5nQ29udHJvbCYmbnVsbCE9PXRoaXMubmdDb250cm9sLmRpc2FibGVkP3RoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLmZvY3VzZWQmJih0aGlzLmZvY3VzZWQ9ITEsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGUpe3RoaXMuX2lkPWV8fHRoaXMuX3VpZH1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoRm8ucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9UnQoZSl9Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy5fdHlwZX1zZXQgdHlwZShlKXt0aGlzLl90eXBlPWV8fCJ0ZXh0Iix0aGlzLl92YWxpZGF0ZVR5cGUoKSwhdGhpcy5faXNUZXh0YXJlYSYmcEgoKS5oYXModGhpcy5fdHlwZSkmJih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZT10aGlzLl90eXBlKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5faW5wdXRWYWx1ZUFjY2Vzc29yLnZhbHVlfXNldCB2YWx1ZShlKXtlIT09dGhpcy52YWx1ZSYmKHRoaXMuX2lucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZT1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9Z2V0IHJlYWRvbmx5KCl7cmV0dXJuIHRoaXMuX3JlYWRvbmx5fXNldCByZWFkb25seShlKXt0aGlzLl9yZWFkb25seT1SdChlKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJnRoaXMuX2F1dG9maWxsTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuc3Vic2NyaWJlKGU9Pnt0aGlzLmF1dG9maWxsZWQ9ZS5pc0F1dG9maWxsZWQsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfSl9bmdPbkNoYW5nZXMoKXt0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmdGhpcy5fYXV0b2ZpbGxNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCksdGhpcy5fcGxhdGZvcm0uSU9TJiZ0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuX2lPU0tleXVwTGlzdGVuZXIpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiZ0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKSx0aGlzLl9kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKSx0aGlzLl9kaXJ0eUNoZWNrUGxhY2Vob2xkZXIoKX1mb2N1cyhlKXt0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoZSl9X2ZvY3VzQ2hhbmdlZChlKXtlIT09dGhpcy5mb2N1c2VkJiYodGhpcy5mb2N1c2VkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKX1fb25JbnB1dCgpe31fZGlydHlDaGVja1BsYWNlaG9sZGVyKCl7bGV0IGU9dGhpcy5fZm9ybUZpZWxkLGk9ZSYmImxlZ2FjeSI9PT1lLmFwcGVhcmFuY2UmJiFlLl9oYXNMYWJlbD8uKCk/bnVsbDp0aGlzLnBsYWNlaG9sZGVyO2lmKGkhPT10aGlzLl9wcmV2aW91c1BsYWNlaG9sZGVyKXtsZXQgcj10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7dGhpcy5fcHJldmlvdXNQbGFjZWhvbGRlcj1pLGk/ci5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIixpKTpyLnJlbW92ZUF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiKX19X2RpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZTt0aGlzLl9wcmV2aW91c05hdGl2ZVZhbHVlIT09ZSYmKHRoaXMuX3ByZXZpb3VzTmF0aXZlVmFsdWU9ZSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV92YWxpZGF0ZVR5cGUoKXtVTmUuaW5kZXhPZih0aGlzLl90eXBlKX1faXNOZXZlckVtcHR5KCl7cmV0dXJuIHRoaXMuX25ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSk+LTF9X2lzQmFkSW5wdXQoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsaWRpdHk7cmV0dXJuIGUmJmUuYmFkSW5wdXR9Z2V0IGVtcHR5KCl7cmV0dXJuISh0aGlzLl9pc05ldmVyRW1wdHkoKXx8dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlfHx0aGlzLl9pc0JhZElucHV0KCl8fHRoaXMuYXV0b2ZpbGxlZCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtpZih0aGlzLl9pc05hdGl2ZVNlbGVjdCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGk9ZS5vcHRpb25zWzBdO3JldHVybiB0aGlzLmZvY3VzZWR8fGUubXVsdGlwbGV8fCF0aGlzLmVtcHR5fHwhIShlLnNlbGVjdGVkSW5kZXg+LTEmJmkmJmkubGFiZWwpfXJldHVybiB0aGlzLmZvY3VzZWR8fCF0aGlzLmVtcHR5fXNldERlc2NyaWJlZEJ5SWRzKGUpe2UubGVuZ3RoP3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFyaWEtZGVzY3JpYmVkYnkiLGUuam9pbigiICIpKTp0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5Iil9b25Db250YWluZXJDbGljaygpe3RoaXMuZm9jdXNlZHx8dGhpcy5mb2N1cygpfV9pc0lubGluZVNlbGVjdCgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyZXR1cm4gdGhpcy5faXNOYXRpdmVTZWxlY3QmJihlLm11bHRpcGxlfHxlLnNpemU+MSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0ob2kpLE0oTnMsMTApLE0oTGgsOCksTShWaCw4KSxNKGNkKSxNKEhOZSwxMCksTShyaWUpLE0oX3QpLE0oc2csOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJpbnB1dCIsIm1hdElucHV0IiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdElucHV0IiwiIl0sWyJzZWxlY3QiLCJtYXROYXRpdmVDb250cm9sIiwiIl0sWyJpbnB1dCIsIm1hdE5hdGl2ZUNvbnRyb2wiLCIiXSxbInRleHRhcmVhIiwibWF0TmF0aXZlQ29udHJvbCIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1pbnB1dC1lbGVtZW50IiwibWF0LWZvcm0tZmllbGQtYXV0b2ZpbGwtY29udHJvbCJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZCghMCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fZm9jdXNDaGFuZ2VkKCExKX0pKCJpbnB1dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25JbnB1dCgpfSksMiZlJiYoX3MoImRpc2FibGVkIixpLmRpc2FibGVkKSgicmVxdWlyZWQiLGkucmVxdWlyZWQpLHplKCJpZCIsaS5pZCkoImRhdGEtcGxhY2Vob2xkZXIiLGkucGxhY2Vob2xkZXIpKCJuYW1lIixpLm5hbWV8fG51bGwpKCJyZWFkb25seSIsaS5yZWFkb25seSYmIWkuX2lzTmF0aXZlU2VsZWN0fHxudWxsKSgiYXJpYS1pbnZhbGlkIixpLmVtcHR5JiZpLnJlcXVpcmVkP251bGw6aS5lcnJvclN0YXRlKSgiYXJpYS1yZXF1aXJlZCIsaS5yZXF1aXJlZCksZXQoIm1hdC1pbnB1dC1zZXJ2ZXIiLGkuX2lzU2VydmVyKSgibWF0LW5hdGl2ZS1zZWxlY3QtaW5saW5lIixpLl9pc0lubGluZVNlbGVjdCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDoiaWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsbmFtZToibmFtZSIscmVxdWlyZWQ6InJlcXVpcmVkIix0eXBlOiJ0eXBlIixlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLHVzZXJBcmlhRGVzY3JpYmVkQnk6WyJhcmlhLWRlc2NyaWJlZGJ5IiwidXNlckFyaWFEZXNjcmliZWRCeSJdLHZhbHVlOiJ2YWx1ZSIscmVhZG9ubHk6InJlYWRvbmx5In0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6a2gsdXNlRXhpc3Rpbmc6bn1dKSx0dCxGdF19KSxufSkoKSxIYT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7cHJvdmlkZXJzOltjZF0saW1wb3J0czpbWkgsYWcsbG4sWkgsYWddfSksbn0pKCk7ZnVuY3Rpb24gR05lKG4sdCl7aWYoMSZuJiYoXygwLCJtYXQtZXJyb3IiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiIFJlbG9hZCBwZXJpb2QgaGFzIHRvIGJlIG1pbmltdW0gb2YgIixlLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsIiBzZWNvbmRzLiAiKX19ZnVuY3Rpb24gV05lKG4sdCl7MSZuJiYoXygwLCJtYXQtZXJyb3IiKSxBKDEsIiBQYWdlIHNpemUgaGFzIHRvIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIiksdigpKX12YXIgb2llPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnJlbG9hZFRvZ2dsZWQ9bmV3IEcsdGhpcy5yZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZD1uZXcgRyx0aGlzLnBhZ2VTaXplQ2hhbmdlZD1uZXcgRyx0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1M9MzAsdGhpcy5yZWxvYWRQZXJpb2RDb250cm9sPW5ldyBCaCh0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MsW0ZvLnJlcXVpcmVkLEZvLm1pbih0aGlzLk1JTl9SRUxPQURfUEVSSU9EX0lOX1MpXSksdGhpcy5wYWdpbmF0aW9uQ29udHJvbD1uZXcgQmgoMSxbRm8ucmVxdWlyZWQsRm8ubWluKDEpLG49PntsZXQgdD1OdW1iZXIobi52YWx1ZSk7cmV0dXJuIE1hdGgucm91bmQodCk9PT1uLnZhbHVlP251bGw6e2ludGVnZXI6e3ZhbHVlOm4udmFsdWV9fX1dKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlfW5nT25Jbml0KCl7dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksSHIoNTAwKSxZZSgoKT0+dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLnZhbGlkJiZ0aGlzLnJlbG9hZFBlcmlvZEluTXNDaGFuZ2VkLmVtaXQoMWUzKnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC52YWx1ZSl9KSx0aGlzLnBhZ2luYXRpb25Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksSHIoNTAwKSxZZSgoKT0+dGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWxpZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMucGFnZVNpemVDaGFuZ2VkLmVtaXQodGhpcy5wYWdpbmF0aW9uQ29udHJvbC52YWx1ZSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bmdPbkNoYW5nZXMoZSl7aWYoZS5yZWxvYWRQZXJpb2RJbk1zKXtsZXQgaT1lLnJlbG9hZFBlcmlvZEluTXM7aS5wcmV2aW91c1ZhbHVlIT09aS5jdXJyZW50VmFsdWUmJnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5zZXRWYWx1ZShpLmN1cnJlbnRWYWx1ZS8xZTMpfWlmKGUucmVsb2FkRW5hYmxlZCYmKGUucmVsb2FkRW5hYmxlZC5jdXJyZW50VmFsdWU/dGhpcy5yZWxvYWRQZXJpb2RDb250cm9sLmVuYWJsZSgpOnRoaXMucmVsb2FkUGVyaW9kQ29udHJvbC5kaXNhYmxlKCkpLGUucGFnZVNpemUpe2xldCBpPWUucGFnZVNpemU7aS5wcmV2aW91c1ZhbHVlIT09aS5jdXJyZW50VmFsdWUmJnRoaXMucGFnaW5hdGlvbkNvbnRyb2wuc2V0VmFsdWUoaS5jdXJyZW50VmFsdWUpfX1vblJlbG9hZFRvZ2dsZSgpe3RoaXMucmVsb2FkVG9nZ2xlZC5lbWl0KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiXV0saW5wdXRzOntyZWxvYWRFbmFibGVkOiJyZWxvYWRFbmFibGVkIixyZWxvYWRQZXJpb2RJbk1zOiJyZWxvYWRQZXJpb2RJbk1zIixwYWdlU2l6ZToicGFnZVNpemUifSxvdXRwdXRzOntyZWxvYWRUb2dnbGVkOiJyZWxvYWRUb2dnbGVkIixyZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZDoicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLHBhZ2VTaXplQ2hhbmdlZDoicGFnZVNpemVDaGFuZ2VkIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxNCx2YXJzOjUsY29uc3RzOltbMSwicmVsb2FkLXRvZ2dsZSJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlJlbG9hZCBQZXJpb2QgKHNlY29uZHMpIiwxLCJyZWxvYWQtcGVyaW9kIiwzLCJmb3JtQ29udHJvbCJdLFs0LCJuZ0lmIl0sWyJtYXRJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJwbGFjZWhvbGRlciIsIlBhZ2luYXRpb24gTGltaXQiLDEsInBhZ2Utc2l6ZSIsMywiZm9ybUNvbnRyb2wiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImgzIiksQSgxLCJTZXR0aW5ncyIpLHYoKSxfKDIsImRpdiIpKDMsImRpdiIsMCkoNCwibWF0LWNoZWNrYm94IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGUoKX0pLEEoNSwiUmVsb2FkIGRhdGEiKSx2KCkoKSxfKDYsImRpdiIpKDcsIm1hdC1mb3JtLWZpZWxkIiksTyg4LCJpbnB1dCIsMiksdigpLEUoOSxHTmUsMiwxLCJtYXQtZXJyb3IiLDMpLHYoKSgpLF8oMTAsImRpdiIpKDExLCJtYXQtZm9ybS1maWVsZCIpLE8oMTIsImlucHV0Iiw0KSx2KCksRSgxMyxXTmUsMiwwLCJtYXQtZXJyb3IiLDMpLHYoKSksMiZlJiYoQyg0KSx5KCJjaGVja2VkIixpLnJlbG9hZEVuYWJsZWQpLEMoNCkseSgiZm9ybUNvbnRyb2wiLGkucmVsb2FkUGVyaW9kQ29udHJvbCksQygxKSx5KCJuZ0lmIixpLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoIm1pbiIpfHxpLnJlbG9hZFBlcmlvZENvbnRyb2wuaGFzRXJyb3IoInJlcXVpcmVkIikpLEMoMykseSgiZm9ybUNvbnRyb2wiLGkucGFnaW5hdGlvbkNvbnRyb2wpLEMoMSkseSgibmdJZiIsaS5wYWdpbmF0aW9uQ29udHJvbC5pbnZhbGlkKSl9LGRlcGVuZGVuY2llczpbQmUsQnYscUgsVjIsbXcseWwsSHRlLHBkLFVoXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxNXB4O1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbjogMTBweCAwO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5cbltfbmdob3N0LSVDT01QJV0gICAgPiBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGQge1xuICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG5oM1tfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDIwcHg7XG59XG5cbi5yZWxvYWQtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59Il19KSxufSkoKSxzaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5yZWxvYWRFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChZTSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChYTSksdGhpcy5wYWdlU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoS20pfW9uUmVsb2FkVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWEkoKSl9b25SZWxvYWRQZXJpb2RJbk1zQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFFJKHtwZXJpb2RJbk1zOmV9KSl9b25QYWdlU2l6ZUNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChLSSh7c2l6ZTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtZGlhbG9nIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJlbG9hZEVuYWJsZWQiLCJyZWxvYWRQZXJpb2RJbk1zIiwicGFnZVNpemUiLCJyZWxvYWRUb2dnbGVkIiwicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLCJwYWdlU2l6ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNldHRpbmdzLWRpYWxvZy1jb21wb25lbnQiLDApLFAoInJlbG9hZFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZWxvYWRUb2dnbGVkKCl9KSgicmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVsb2FkUGVyaW9kSW5Nc0NoYW5nZWQobyl9KSgicGFnZVNpemVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBhZ2VTaXplQ2hhbmdlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJyZWxvYWRFbmFibGVkIixVKDEsMyxpLnJlbG9hZEVuYWJsZWQkKSkoInJlbG9hZFBlcmlvZEluTXMiLFUoMiw1LGkucmVsb2FkUGVyaW9kSW5NcyQpKSgicGFnZVNpemUiLFUoMyw3LGkucGFnZVNpemUkKSl9LGRlcGVuZGVuY2llczpbb2llLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxhaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpYWxvZz1lfWlzQnV0dG9uRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1PZS5MT0FESU5HfW9wZW5EaWFsb2coKXt0aGlzLmRpYWxvZy5vcGVuKHNpZSx7d2lkdGg6IjQwMHB4In0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHZsKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uLWNvbXBvbmVudCJdXSxpbnB1dHM6e3NldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSJ9LGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9wZW5EaWFsb2coKX0pLE8oMSwibWF0LWljb24iLDEpLHYoKSksMiZlJiZ5KCJkaXNhYmxlZCIsaS5pc0J1dHRvbkRpc2FibGVkKCkpfSxkZXBlbmRlbmNpZXM6W19uLEd0XSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxsaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZXR0aW5nc0xvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QobEgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic2V0dGluZ3MtYnV0dG9uIl1dLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWzMsInNldHRpbmdzTG9hZFN0YXRlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJzZXR0aW5ncy1idXR0b24tY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIikpLDImZSYmeSgic2V0dGluZ3NMb2FkU3RhdGUiLFUoMSwxLGkuc2V0dGluZ3NMb2FkU3RhdGUkKSl9LGRlcGVuZGVuY2llczpbYWllLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxLTmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLl9kb2N1bWVudD1lfWNvcHkoZSl7bGV0IGk9dGhpcy5iZWdpbkNvcHkoZSkscj1pLmNvcHkoKTtyZXR1cm4gaS5kZXN0cm95KCkscn1iZWdpbkNvcHkoZSl7cmV0dXJuIG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuX2RvY3VtZW50PWU7bGV0IGk9dGhpcy5fdGV4dGFyZWE9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSxyPWkuc3R5bGU7ci5wb3NpdGlvbj0iZml4ZWQiLHIudG9wPXIub3BhY2l0eT0iMCIsci5sZWZ0PSItOTk5ZW0iLGkuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpLnZhbHVlPXQsaS5yZWFkT25seT0hMCx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGkpfWNvcHkoKXtsZXQgdD10aGlzLl90ZXh0YXJlYSxlPSExO3RyeXtpZih0KXtsZXQgaT10aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O3Quc2VsZWN0KCksdC5zZXRTZWxlY3Rpb25SYW5nZSgwLHQudmFsdWUubGVuZ3RoKSxlPXRoaXMuX2RvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksaSYmaS5mb2N1cygpfX1jYXRjaHt9cmV0dXJuIGV9ZGVzdHJveSgpe2xldCB0PXRoaXMuX3RleHRhcmVhO3QmJih0LnJlbW92ZSgpLHRoaXMuX3RleHRhcmVhPXZvaWQgMCl9fShlLHRoaXMuX2RvY3VtZW50KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihIdCkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLFpOZT1uZXcgcGUoIkNES19DT1BZX1RPX0NMSVBCT0FSRF9DT05GSUciKSxjaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fY2xpcGJvYXJkPWUsdGhpcy5fbmdab25lPWksdGhpcy50ZXh0PSIiLHRoaXMuYXR0ZW1wdHM9MSx0aGlzLmNvcGllZD1uZXcgRyx0aGlzLl9wZW5kaW5nPW5ldyBTZXQsciYmbnVsbCE9ci5hdHRlbXB0cyYmKHRoaXMuYXR0ZW1wdHM9ci5hdHRlbXB0cyl9Y29weShlPXRoaXMuYXR0ZW1wdHMpe2lmKGU+MSl7bGV0IGk9ZSxyPXRoaXMuX2NsaXBib2FyZC5iZWdpbkNvcHkodGhpcy50ZXh0KTt0aGlzLl9wZW5kaW5nLmFkZChyKTtsZXQgbz0oKT0+e2xldCBzPXIuY29weSgpO3N8fCEtLWl8fHRoaXMuX2Rlc3Ryb3llZD8odGhpcy5fY3VycmVudFRpbWVvdXQ9bnVsbCx0aGlzLl9wZW5kaW5nLmRlbGV0ZShyKSxyLmRlc3Ryb3koKSx0aGlzLmNvcGllZC5lbWl0KHMpKTp0aGlzLl9jdXJyZW50VGltZW91dD10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnNldFRpbWVvdXQobywxKSl9O28oKX1lbHNlIHRoaXMuY29waWVkLmVtaXQodGhpcy5fY2xpcGJvYXJkLmNvcHkodGhpcy50ZXh0KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9jdXJyZW50VGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX2N1cnJlbnRUaW1lb3V0KSx0aGlzLl9wZW5kaW5nLmZvckVhY2goZT0+ZS5kZXN0cm95KCkpLHRoaXMuX3BlbmRpbmcuY2xlYXIoKSx0aGlzLl9kZXN0cm95ZWQ9ITB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oS05lKSxNKF90KSxNKFpOZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsImNka0NvcHlUb0NsaXBib2FyZCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmNvcHkoKX0pfSxpbnB1dHM6e3RleHQ6WyJjZGtDb3B5VG9DbGlwYm9hcmQiLCJ0ZXh0Il0sYXR0ZW1wdHM6WyJjZGtDb3B5VG9DbGlwYm9hcmRBdHRlbXB0cyIsImF0dGVtcHRzIl19LG91dHB1dHM6e2NvcGllZDoiY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkIn19KSxufSkoKSx1aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGRpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nUmVmPWUsdGhpcy50ZW5zb3Jib2FyZERvdERldlVybD0iaHR0cHM6Ly90ZW5zb3Jib2FyZC5kZXYvP3V0bV9zb3VyY2U9dGVuc29yYm9hcmQifW9uQ2xvc2UoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpfWdldENvbW1hbmRUZXh0KCl7cmV0dXJuIHRoaXMubG9nZGlyPyJ0ZW5zb3Jib2FyZCBkZXYgdXBsb2FkIC0tbG9nZGlyIFxcXG4gICAgJyIrdGhpcy5sb2dkaXIucmVwbGFjZSgvJy9nLCInXFwnJyIpKyInIjoidGVuc29yYm9hcmQgZGV2IHVwbG9hZCAtLWxvZ2RpciB7bG9nZGlyfSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0odHUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudCJdXSxpbnB1dHM6e2xvZ2RpcjoibG9nZGlyIn0sZGVjbHM6MjEsdmFyczo0LGNvbnN0czpbWyJ0YXJnZXQiLCJfYmxhbmsiLCJyZWwiLCJub3JlZmVycmVyIG5vb3BlbmVyIiwxLCJhbmNob3ItdGV4dCIsMywiaHJlZiJdLFsxLCJjb21tYW5kIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0aXRsZSIsIkNsaWNrIHRvIGNvcHkgdGhlIGNvbW1hbmQiLDEsImNvbW1hbmQtY29weSIsMywiY2RrQ29weVRvQ2xpcGJvYXJkIl0sWyJzdmdJY29uIiwiY29udGVudF9jb3B5XzI0cHgiXSxbMSwiYm90dG9tLWJ1dHRvbnMiXSxbIm1hdC1mbGF0LWJ1dHRvbiIsIiIsMSwiY2xvc2UtYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWZsYXQtYnV0dG9uIiwiIiwidGFyZ2V0IiwiX2JsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciIsMSwibGVhcm4tbW9yZS1idXR0b24iLDMsImhyZWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImgzIiksQSgxLCJVcGxvYWQgdG8gVGVuc29yQm9hcmQuZGV2IiksdigpLF8oMiwicCIpKDMsImEiLDApLEEoNCwiIFRlbnNvckJvYXJkLmRldiIpLHYoKSxBKDUsIiBlbmFibGVzIHlvdSB0byBlYXNpbHkgaG9zdCwgdHJhY2ssIGFuZCBzaGFyZSB5b3VyIE1MIGV4cGVyaW1lbnRzIHdpdGggZXZlcnlvbmUuIFlvdSBjYW4gc2hhcmUgYSBsaW5rIHRvIHRoZSB1cGxvYWRlZCBUZW5zb3JCb2FyZCBpbiBwYXBlcnMsIGJsb2cgcG9zdHMsIGFuZCBzb2NpYWwgbWVkaWEuIFRoaXMgY2FuIHNob3djYXNlIHRoZSByZXN1bHRzIG1vcmUgZWZmZWN0aXZlbHkgYW5kIGhlbHBzIHJlcHJvZHVjaWJpbGl0eS5cbiIpLHYoKSxfKDYsInAiKSxBKDcsIlRvIHVwbG9hZCBhIGxvZ2RpciB0byBUZW5zb3JCb2FyZC5kZXYsIHJ1biB0aGUgY29tbWFuZDoiKSx2KCksXyg4LCJkaXYiLDEpKDksInByZSIpKDEwLCJjb2RlIiksQSgxMSksdigpKCksXygxMiwiYnV0dG9uIiwyKSxPKDEzLCJtYXQtaWNvbiIsMyksdigpKCksXygxNCwicCIpLEEoMTUsIiBPbmx5IGNlcnRhaW4gcGx1Z2lucyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4gVXBsb2FkZWQgVGVuc29yQm9hcmRzIGFyZSBwdWJsaWMgYW5kIHZpc2libGUgdG8gZXZlcnlvbmU7IGRvIG5vdCB1cGxvYWQgc2Vuc2l0aXZlIGRhdGEuXG4iKSx2KCksXygxNiwiZGl2Iiw0KSgxNywiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsb3NlKCl9KSxBKDE4LCIgQ2xvc2UgIiksdigpLF8oMTksImEiLDYpLEEoMjAsIiBMZWFybiBtb3JlICIpLHYoKSgpKSwyJmUmJihDKDMpLFppKCJocmVmIixpLnRlbnNvcmJvYXJkRG90RGV2VXJsLHpsKSxDKDgpLHl0KGkuZ2V0Q29tbWFuZFRleHQoKSksQygxKSx5KCJjZGtDb3B5VG9DbGlwYm9hcmQiLGkuZ2V0Q29tbWFuZFRleHQoKSksQyg3KSxaaSgiaHJlZiIsaS50ZW5zb3Jib2FyZERvdERldlVybCx6bCkpfSxkZXBlbmRlbmNpZXM6W2NpZSxfbixJdixHdF0sc3R5bGVzOlsiZGl2W19uZ2NvbnRlbnQtJUNPTVAlXSwgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjE2cHggMH1bX25naG9zdC0lQ09NUCVdID4gW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9W19uZ2hvc3QtJUNPTVAlXSA+IFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9aDNbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjV9cFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzIxMjEyMTtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxLjV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmFuY2hvci10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWRlY29yYXRpb246bm9uZX0uY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6I2Y1ZjZmNztib3JkZXItcmFkaXVzOjRweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47cGFkZGluZzoycHggMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29tbWFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb21tYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjF9cHJlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmF1dG99Y29kZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MS41fS5ib3R0b20tYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bWFyZ2luLXJpZ2h0OjhweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY2xvc2UtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNsb3NlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9W19uZ2hvc3QtJUNPTVAlXSAgIC5sZWFybi1tb3JlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzE5NzZkMjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxlYXJuLW1vcmUtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNDJhNWY1fSJdfSksbn0pKCksZUxlPUoob3Ysbj0+bi5kYXRhX2xvY2F0aW9uKSxwaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5sb2dkaXIkPXRoaXMuc3RvcmUucGlwZSh2dChlTGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiZGV2LXVwbG9hZC1kaWFsb2ciXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywibG9nZGlyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJ0YmRldi11cGxvYWQtZGlhbG9nLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpKSwyJmUmJnkoImxvZ2RpciIsVSgxLDEsaS5sb2dkaXIkKSl9LGRlcGVuZGVuY2llczpbZGllLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiB0TGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub3BlbkRpYWxvZygpKX0pLF8oMSwic3BhbiIsMiksTygyLCJtYXQtaWNvbiIsMyksQSgzLCIgVXBsb2FkICIpLHYoKSgpfX12YXIgbkxlPVsibG9jYWxob3N0IiwiMTI3LjAuMC4xIl0saGllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLndpbmRvdz1lLHRoaXMuZGlhbG9nPWksdGhpcy5zaG93bj1uTGUuaW5jbHVkZXMoZS5sb2NhdGlvbi5ob3N0bmFtZSl9b3BlbkRpYWxvZygpe3RoaXMuZGlhbG9nLm9wZW4ocGllLHt3aWR0aDoiNTYwcHgifSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oIndpbmRvdyIpLE0odmwpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0YmRldi11cGxvYWQtYnV0dG9uIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgic2hvd24iLGkuc2hvd24pfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwzLCJjbGljayJdLFsxLCJidXR0b24tY29udGVudHMiXSxbInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLHRMZSw0LDAsImJ1dHRvbiIsMCksMiZlJiZ5KCJuZ0lmIixpLnNob3duKX0sZGVwZW5kZW5jaWVzOltCZSxfbixHdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgIGJ1dHRvbi5tYXQtc3Ryb2tlZC1idXR0b25bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMDtib3JkZXI6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uLm1hdC1zdHJva2VkLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWY2YzAwfS5idXR0b24tY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NnB4fSJdfSksbn0pKCksckxlPVsibWF0LW1lbnUtaXRlbSIsIiJdO2Z1bmN0aW9uIG9MZShuLHQpezEmbiYmKEluKCksXygwLCJzdmciLDIpLE8oMSwicG9seWdvbiIsMyksdigpKX12YXIgbWllPVsiKiJdO2Z1bmN0aW9uIHNMZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMCksUCgia2V5ZG93biIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5faGFuZGxlS2V5ZG93bihyKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5jbG9zZWQuZW1pdCgiY2xpY2siKSl9KSgiQHRyYW5zZm9ybU1lbnUuc3RhcnQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX29uQW5pbWF0aW9uU3RhcnQocikpfSkoIkB0cmFuc2Zvcm1NZW51LmRvbmUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuX29uQW5pbWF0aW9uRG9uZShyKSl9KSxfKDEsImRpdiIsMSksVm4oMiksdigpKCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiaWQiLGUucGFuZWxJZCkoIm5nQ2xhc3MiLGUuX2NsYXNzTGlzdCkoIkB0cmFuc2Zvcm1NZW51IixlLl9wYW5lbEFuaW1hdGlvblN0YXRlKSx6ZSgiYXJpYS1sYWJlbCIsZS5hcmlhTGFiZWx8fG51bGwpKCJhcmlhLWxhYmVsbGVkYnkiLGUuYXJpYUxhYmVsbGVkYnl8fG51bGwpKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmFyaWFEZXNjcmliZWRieXx8bnVsbCl9fXZhciBLMj17dHJhbnNmb3JtTWVudTpLcigidHJhbnNmb3JtTWVudSIsW2tpKCJ2b2lkIixnbih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMC44KSJ9KSksTGkoInZvaWQgPT4gZW50ZXIiLGppKCIxMjBtcyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKSIsZ24oe29wYWNpdHk6MSx0cmFuc2Zvcm06InNjYWxlKDEpIn0pKSksTGkoIiogPT4gdm9pZCIsamkoIjEwMG1zIDI1bXMgbGluZWFyIixnbih7b3BhY2l0eTowfSkpKV0pLGZhZGVJbkl0ZW1zOktyKCJmYWRlSW5JdGVtcyIsW2tpKCJzaG93aW5nIixnbih7b3BhY2l0eToxfSkpLExpKCJ2b2lkID0+ICoiLFtnbih7b3BhY2l0eTowfSksamkoIjQwMG1zIDEwMG1zIGN1YmljLWJlemllcigwLjU1LCAwLCAwLjU1LCAwLjIpIildKV0pfSxhTGU9bmV3IHBlKCJNYXRNZW51Q29udGVudCIpLCRIPW5ldyBwZSgiTUFUX01FTlVfUEFORUwiKSxsTGU9cW8oc28oY2xhc3N7fSkpLG51PSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBsTGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzKXtzdXBlcigpLHRoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9kb2N1bWVudD1pLHRoaXMuX2ZvY3VzTW9uaXRvcj1yLHRoaXMuX3BhcmVudE1lbnU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMucm9sZT0ibWVudWl0ZW0iLHRoaXMuX2hvdmVyZWQ9bmV3IGtlLHRoaXMuX2ZvY3VzZWQ9bmV3IGtlLHRoaXMuX2hpZ2hsaWdodGVkPSExLHRoaXMuX3RyaWdnZXJzU3VibWVudT0hMSxvPy5hZGRJdGVtPy4odGhpcyl9Zm9jdXMoZSxpKXt0aGlzLl9mb2N1c01vbml0b3ImJmU/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2dldEhvc3RFbGVtZW50KCksZSxpKTp0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKGkpLHRoaXMuX2ZvY3VzZWQubmV4dCh0aGlzKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3ImJnRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITEpfW5nT25EZXN0cm95KCl7dGhpcy5fZm9jdXNNb25pdG9yJiZ0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fcGFyZW50TWVudSYmdGhpcy5fcGFyZW50TWVudS5yZW1vdmVJdGVtJiZ0aGlzLl9wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyksdGhpcy5faG92ZXJlZC5jb21wbGV0ZSgpLHRoaXMuX2ZvY3VzZWQuY29tcGxldGUoKX1fZ2V0VGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZD8iLTEiOiIwIn1fZ2V0SG9zdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fV9jaGVja0Rpc2FibGVkKGUpe3RoaXMuZGlzYWJsZWQmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9X2hhbmRsZU1vdXNlRW50ZXIoKXt0aGlzLl9ob3ZlcmVkLm5leHQodGhpcyl9Z2V0TGFiZWwoKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvbmVOb2RlKCEwKSxpPWUucXVlcnlTZWxlY3RvckFsbCgibWF0LWljb24sIC5tYXRlcmlhbC1pY29ucyIpO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlbcl0ucmVtb3ZlKCk7cmV0dXJuIGUudGV4dENvbnRlbnQ/LnRyaW0oKXx8IiJ9X3NldEhpZ2hsaWdodGVkKGUpe3RoaXMuX2hpZ2hsaWdodGVkPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9oYXNGb2N1cygpe3JldHVybiB0aGlzLl9kb2N1bWVudCYmdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuX2dldEhvc3RFbGVtZW50KCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSHQpLE0oRnIpLE0oJEgsOCksTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LWl0ZW0iLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2NoZWNrRGlzYWJsZWQobyl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlTW91c2VFbnRlcigpfSksMiZlJiYoemUoInJvbGUiLGkucm9sZSkoInRhYmluZGV4IixpLl9nZXRUYWJJbmRleCgpKSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZC50b1N0cmluZygpKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpLGV0KCJtYXQtbWVudS1pdGVtIiwhMCkoIm1hdC1tZW51LWl0ZW0taGlnaGxpZ2h0ZWQiLGkuX2hpZ2hsaWdodGVkKSgibWF0LW1lbnUtaXRlbS1zdWJtZW51LXRyaWdnZXIiLGkuX3RyaWdnZXJzU3VibWVudSkpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIscm9sZToicm9sZSJ9LGV4cG9ydEFzOlsibWF0TWVudUl0ZW0iXSxmZWF0dXJlczpbdHRdLGF0dHJzOnJMZSxuZ0NvbnRlbnRTZWxlY3RvcnM6bWllLGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJtYXRSaXBwbGUiLCIiLDEsIm1hdC1tZW51LXJpcHBsZSIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJtYXRSaXBwbGVUcmlnZ2VyIl0sWyJjbGFzcyIsIm1hdC1tZW51LXN1Ym1lbnUtaWNvbiIsInZpZXdCb3giLCIwIDAgNSAxMCIsImZvY3VzYWJsZSIsImZhbHNlIiw0LCJuZ0lmIl0sWyJ2aWV3Qm94IiwiMCAwIDUgMTAiLCJmb2N1c2FibGUiLCJmYWxzZSIsMSwibWF0LW1lbnUtc3VibWVudS1pY29uIl0sWyJwb2ludHMiLCIwLDAgNSw1IDAsMTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLFZuKDApLE8oMSwiZGl2IiwwKSxFKDIsb0xlLDIsMCwic3ZnIiwxKSksMiZlJiYoQygxKSx5KCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlUmlwcGxlfHxpLmRpc2FibGVkKSgibWF0UmlwcGxlVHJpZ2dlciIsaS5fZ2V0SG9zdEVsZW1lbnQoKSksQygxKSx5KCJuZ0lmIixpLl90cmlnZ2Vyc1N1Ym1lbnUpKX0sZGVwZW5kZW5jaWVzOltCZSxZb10sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksZ2llPW5ldyBwZSgibWF0LW1lbnUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntvdmVybGFwVHJpZ2dlcjohMSx4UG9zaXRpb246ImFmdGVyIix5UG9zaXRpb246ImJlbG93IixiYWNrZHJvcENsYXNzOiJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCJ9fX0pLHVMZT0wLHl3PSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyl7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX25nWm9uZT1pLHRoaXMuX2RlZmF1bHRPcHRpb25zPXIsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9byx0aGlzLl94UG9zaXRpb249dGhpcy5fZGVmYXVsdE9wdGlvbnMueFBvc2l0aW9uLHRoaXMuX3lQb3NpdGlvbj10aGlzLl9kZWZhdWx0T3B0aW9ucy55UG9zaXRpb24sdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zPW5ldyBIbCx0aGlzLl90YWJTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fY2xhc3NMaXN0PXt9LHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9InZvaWQiLHRoaXMuX2FuaW1hdGlvbkRvbmU9bmV3IGtlLHRoaXMub3ZlcmxheVBhbmVsQ2xhc3M9dGhpcy5fZGVmYXVsdE9wdGlvbnMub3ZlcmxheVBhbmVsQ2xhc3N8fCIiLHRoaXMuYmFja2Ryb3BDbGFzcz10aGlzLl9kZWZhdWx0T3B0aW9ucy5iYWNrZHJvcENsYXNzLHRoaXMuX292ZXJsYXBUcmlnZ2VyPXRoaXMuX2RlZmF1bHRPcHRpb25zLm92ZXJsYXBUcmlnZ2VyLHRoaXMuX2hhc0JhY2tkcm9wPXRoaXMuX2RlZmF1bHRPcHRpb25zLmhhc0JhY2tkcm9wLHRoaXMuY2xvc2VkPW5ldyBHLHRoaXMuY2xvc2U9dGhpcy5jbG9zZWQsdGhpcy5wYW5lbElkPSJtYXQtbWVudS1wYW5lbC0iK3VMZSsrfWdldCB4UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5feFBvc2l0aW9ufXNldCB4UG9zaXRpb24oZSl7dGhpcy5feFBvc2l0aW9uPWUsdGhpcy5zZXRQb3NpdGlvbkNsYXNzZXMoKX1nZXQgeVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3lQb3NpdGlvbn1zZXQgeVBvc2l0aW9uKGUpe3RoaXMuX3lQb3NpdGlvbj1lLHRoaXMuc2V0UG9zaXRpb25DbGFzc2VzKCl9Z2V0IG92ZXJsYXBUcmlnZ2VyKCl7cmV0dXJuIHRoaXMuX292ZXJsYXBUcmlnZ2VyfXNldCBvdmVybGFwVHJpZ2dlcihlKXt0aGlzLl9vdmVybGFwVHJpZ2dlcj1SdChlKX1nZXQgaGFzQmFja2Ryb3AoKXtyZXR1cm4gdGhpcy5faGFzQmFja2Ryb3B9c2V0IGhhc0JhY2tkcm9wKGUpe3RoaXMuX2hhc0JhY2tkcm9wPVJ0KGUpfXNldCBwYW5lbENsYXNzKGUpe2xldCBpPXRoaXMuX3ByZXZpb3VzUGFuZWxDbGFzcztpJiZpLmxlbmd0aCYmaS5zcGxpdCgiICIpLmZvckVhY2gocj0+e3RoaXMuX2NsYXNzTGlzdFtyXT0hMX0pLHRoaXMuX3ByZXZpb3VzUGFuZWxDbGFzcz1lLGUmJmUubGVuZ3RoJiYoZS5zcGxpdCgiICIpLmZvckVhY2gocj0+e3RoaXMuX2NsYXNzTGlzdFtyXT0hMH0pLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc05hbWU9IiIpfWdldCBjbGFzc0xpc3QoKXtyZXR1cm4gdGhpcy5wYW5lbENsYXNzfXNldCBjbGFzc0xpc3QoZSl7dGhpcy5wYW5lbENsYXNzPWV9bmdPbkluaXQoKXt0aGlzLnNldFBvc2l0aW9uQ2xhc3NlcygpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCksdGhpcy5fa2V5TWFuYWdlcj1uZXcgU2godGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKS53aXRoV3JhcCgpLndpdGhUeXBlQWhlYWQoKS53aXRoSG9tZUFuZEVuZCgpLHRoaXMuX3RhYlN1YnNjcmlwdGlvbj10aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCk9PnRoaXMuY2xvc2VkLmVtaXQoInRhYiIpKSx0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKHpuKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksdWkoZT0+SnQoLi4uZS5tYXAoaT0+aS5fZm9jdXNlZCkpKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShlKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLl9rZXlNYW5hZ2VyO2lmKCJlbnRlciI9PT10aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlJiZpLmFjdGl2ZUl0ZW0/Ll9oYXNGb2N1cygpKXtsZXQgcj1lLnRvQXJyYXkoKSxvPU1hdGgubWF4KDAsTWF0aC5taW4oci5sZW5ndGgtMSxpLmFjdGl2ZUl0ZW1JbmRleHx8MCkpO3Jbb10mJiFyW29dLmRpc2FibGVkP2kuc2V0QWN0aXZlSXRlbShvKTppLnNldE5leHRJdGVtQWN0aXZlKCl9fSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZGVzdHJveSgpLHRoaXMuX3RhYlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuY2xvc2VkLmNvbXBsZXRlKCl9X2hvdmVyZWQoKXtyZXR1cm4gdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMucGlwZSh6bih0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMpLHVpKGk9Pkp0KC4uLmkubWFwKHI9PnIuX2hvdmVyZWQpKSkpfWFkZEl0ZW0oZSl7fXJlbW92ZUl0ZW0oZSl7fV9oYW5kbGVLZXlkb3duKGUpe2xldCBpPWUua2V5Q29kZSxyPXRoaXMuX2tleU1hbmFnZXI7c3dpdGNoKGkpe2Nhc2UgMjc6a3IoZSl8fChlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpKTticmVhaztjYXNlIDM3OnRoaXMucGFyZW50TWVudSYmImx0ciI9PT10aGlzLmRpcmVjdGlvbiYmdGhpcy5jbG9zZWQuZW1pdCgia2V5ZG93biIpO2JyZWFrO2Nhc2UgMzk6dGhpcy5wYXJlbnRNZW51JiYicnRsIj09PXRoaXMuZGlyZWN0aW9uJiZ0aGlzLmNsb3NlZC5lbWl0KCJrZXlkb3duIik7YnJlYWs7ZGVmYXVsdDpyZXR1cm4oMzg9PT1pfHw0MD09PWkpJiZyLnNldEZvY3VzT3JpZ2luKCJrZXlib2FyZCIpLHZvaWQgci5vbktleWRvd24oZSl9ZS5zdG9wUHJvcGFnYXRpb24oKX1mb2N1c0ZpcnN0SXRlbShlPSJwcm9ncmFtIil7dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZSgoKT0+e2xldCBpPW51bGw7aWYodGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmxlbmd0aCYmKGk9dGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmZpcnN0Ll9nZXRIb3N0RWxlbWVudCgpLmNsb3Nlc3QoJ1tyb2xlPSJtZW51Il0nKSksIWl8fCFpLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKXtsZXQgcj10aGlzLl9rZXlNYW5hZ2VyO3Iuc2V0Rm9jdXNPcmlnaW4oZSkuc2V0Rmlyc3RJdGVtQWN0aXZlKCksIXIuYWN0aXZlSXRlbSYmaSYmaS5mb2N1cygpfX0pfXJlc2V0QWN0aXZlSXRlbSgpe3RoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSl9c2V0RWxldmF0aW9uKGUpe2xldCBpPU1hdGgubWluKHRoaXMuX2Jhc2VFbGV2YXRpb24rZSwyNCkscj1gJHt0aGlzLl9lbGV2YXRpb25QcmVmaXh9JHtpfWAsbz1PYmplY3Qua2V5cyh0aGlzLl9jbGFzc0xpc3QpLmZpbmQocz0+cy5zdGFydHNXaXRoKHRoaXMuX2VsZXZhdGlvblByZWZpeCkpOyghb3x8bz09PXRoaXMuX3ByZXZpb3VzRWxldmF0aW9uKSYmKHRoaXMuX3ByZXZpb3VzRWxldmF0aW9uJiYodGhpcy5fY2xhc3NMaXN0W3RoaXMuX3ByZXZpb3VzRWxldmF0aW9uXT0hMSksdGhpcy5fY2xhc3NMaXN0W3JdPSEwLHRoaXMuX3ByZXZpb3VzRWxldmF0aW9uPXIpfXNldFBvc2l0aW9uQ2xhc3NlcyhlPXRoaXMueFBvc2l0aW9uLGk9dGhpcy55UG9zaXRpb24pe2xldCByPXRoaXMuX2NsYXNzTGlzdDtyWyJtYXQtbWVudS1iZWZvcmUiXT0iYmVmb3JlIj09PWUsclsibWF0LW1lbnUtYWZ0ZXIiXT0iYWZ0ZXIiPT09ZSxyWyJtYXQtbWVudS1hYm92ZSJdPSJhYm92ZSI9PT1pLHJbIm1hdC1tZW51LWJlbG93Il09ImJlbG93Ij09PWksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfV9zdGFydEFuaW1hdGlvbigpe3RoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGU9ImVudGVyIn1fcmVzZXRBbmltYXRpb24oKXt0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlPSJ2b2lkIn1fb25BbmltYXRpb25Eb25lKGUpe3RoaXMuX2FuaW1hdGlvbkRvbmUubmV4dChlKSx0aGlzLl9pc0FuaW1hdGluZz0hMX1fb25BbmltYXRpb25TdGFydChlKXt0aGlzLl9pc0FuaW1hdGluZz0hMCwiZW50ZXIiPT09ZS50b1N0YXRlJiYwPT09dGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXgmJihlLmVsZW1lbnQuc2Nyb2xsVG9wPTApfV91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpe3RoaXMuX2FsbEl0ZW1zLmNoYW5nZXMucGlwZSh6bih0aGlzLl9hbGxJdGVtcykpLnN1YnNjcmliZShlPT57dGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLnJlc2V0KGUuZmlsdGVyKGk9PmkuX3BhcmVudE1lbnU9PT10aGlzKSksdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oX3QpLE0oZ2llKSxNKG5uKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmKEVpKHIsYUxlLDUpLEVpKHIsbnUsNSksRWkocixudSw0KSksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5sYXp5Q29udGVudD1vLmZpcnN0KSxOZShvPUxlKCkpJiYoaS5fYWxsSXRlbXM9byksTmUobz1MZSgpKSYmKGkuaXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KFZpLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkudGVtcGxhdGVSZWY9ci5maXJzdCl9fSxpbnB1dHM6e2JhY2tkcm9wQ2xhc3M6ImJhY2tkcm9wQ2xhc3MiLGFyaWFMYWJlbDpbImFyaWEtbGFiZWwiLCJhcmlhTGFiZWwiXSxhcmlhTGFiZWxsZWRieTpbImFyaWEtbGFiZWxsZWRieSIsImFyaWFMYWJlbGxlZGJ5Il0sYXJpYURlc2NyaWJlZGJ5OlsiYXJpYS1kZXNjcmliZWRieSIsImFyaWFEZXNjcmliZWRieSJdLHhQb3NpdGlvbjoieFBvc2l0aW9uIix5UG9zaXRpb246InlQb3NpdGlvbiIsb3ZlcmxhcFRyaWdnZXI6Im92ZXJsYXBUcmlnZ2VyIixoYXNCYWNrZHJvcDoiaGFzQmFja2Ryb3AiLHBhbmVsQ2xhc3M6WyJjbGFzcyIsInBhbmVsQ2xhc3MiXSxjbGFzc0xpc3Q6ImNsYXNzTGlzdCJ9LG91dHB1dHM6e2Nsb3NlZDoiY2xvc2VkIixjbG9zZToiY2xvc2UifX0pLG59KSgpLGhkPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB5d3tjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGkscixvKSx0aGlzLl9lbGV2YXRpb25QcmVmaXg9Im1hdC1lbGV2YXRpb24teiIsdGhpcy5fYmFzZUVsZXZhdGlvbj00fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKF90KSxNKGdpZSksTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1tZW51Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZ6ZSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImFyaWEtZGVzY3JpYmVkYnkiLG51bGwpfSxleHBvcnRBczpbIm1hdE1lbnUiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOiRILHVzZUV4aXN0aW5nOm59XSksdHRdLG5nQ29udGVudFNlbGVjdG9yczptaWUsZGVjbHM6MSx2YXJzOjAsY29uc3RzOltbInRhYmluZGV4IiwiLTEiLCJyb2xlIiwibWVudSIsMSwibWF0LW1lbnUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyIsImtleWRvd24iLCJjbGljayJdLFsxLCJtYXQtbWVudS1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxFKDAsc0xlLDMsNiwibmctdGVtcGxhdGUiKSl9LGRlcGVuZGVuY2llczpbRm5dLHN0eWxlczpbJ21hdC1tZW51e2Rpc3BsYXk6bm9uZX0ubWF0LW1lbnUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO21heC1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQ4cHgpO2JvcmRlci1yYWRpdXM6NHB4O291dGxpbmU6MDttaW4taGVpZ2h0OjY0cHg7cG9zaXRpb246cmVsYXRpdmV9Lm1hdC1tZW51LXBhbmVsLm5nLWFuaW1hdGluZ3twb2ludGVyLWV2ZW50czpub25lfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1tZW51LXBhbmVse291dGxpbmU6c29saWQgMXB4fS5tYXQtbWVudS1jb250ZW50Om5vdCg6ZW1wdHkpe3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHh9Lm1hdC1tZW51LWl0ZW17LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTpub25lO2JvcmRlcjpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjQ4cHg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDE2cHg7dGV4dC1hbGlnbjpsZWZ0O3RleHQtZGVjb3JhdGlvbjpub25lO21heC13aWR0aDoxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtbWVudS1pdGVtOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfS5tYXQtbWVudS1pdGVtW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1bZGlyPXJ0bF0gLm1hdC1tZW51LWl0ZW17dGV4dC1hbGlnbjpyaWdodH0ubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLXJpZ2h0OjE2cHg7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtbWVudS1pdGVtIC5tYXQtaWNvbiBzdmd7dmVydGljYWwtYWxpZ246dG9wfVtkaXI9cnRsXSAubWF0LW1lbnUtaXRlbSAubWF0LWljb257bWFyZ2luLWxlZnQ6MTZweDttYXJnaW4tcmlnaHQ6MH0ubWF0LW1lbnUtaXRlbVtkaXNhYmxlZF06OmFmdGVye2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjt0b3A6MDtsZWZ0OjA7Ym90dG9tOjA7cmlnaHQ6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtbWVudS1pdGVte21hcmdpbi10b3A6MXB4fS5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjMycHh9W2Rpcj1ydGxdIC5tYXQtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcntwYWRkaW5nLXJpZ2h0OjE2cHg7cGFkZGluZy1sZWZ0OjMycHh9Lm1hdC1tZW51LXN1Ym1lbnUtaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjE2cHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6NXB4O2hlaWdodDoxMHB4O2ZpbGw6Y3VycmVudENvbG9yfVtkaXI9cnRsXSAubWF0LW1lbnUtc3VibWVudS1pY29ue3JpZ2h0OmF1dG87bGVmdDoxNnB4O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpIHNjYWxlWCgtMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LW1lbnUtc3VibWVudS1pY29ue2ZpbGw6Q2FudmFzVGV4dH1idXR0b24ubWF0LW1lbnUtaXRlbXt3aWR0aDoxMDAlfS5tYXQtbWVudS1pdGVtIC5tYXQtbWVudS1yaXBwbGV7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltLMi50cmFuc2Zvcm1NZW51LEsyLmZhZGVJbkl0ZW1zXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxfaWU9bmV3IHBlKCJtYXQtbWVudS1zY3JvbGwtc3RyYXRlZ3kiKSxwTGU9e3Byb3ZpZGU6X2llLGRlcHM6W3RyXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpfX0sZmllPWxhKHtwYXNzaXZlOiEwfSksaExlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9lbGVtZW50PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX21lbnVJdGVtSW5zdGFuY2U9YSx0aGlzLl9kaXI9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9uZ1pvbmU9dSx0aGlzLl9vdmVybGF5UmVmPW51bGwsdGhpcy5fbWVudU9wZW49ITEsdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5faG92ZXJTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQ9ZD0+e2V3KGQpfHwodGhpcy5fb3BlbmVkQnk9InRvdWNoIil9LHRoaXMuX29wZW5lZEJ5PXZvaWQgMCx0aGlzLnJlc3RvcmVGb2N1cz0hMCx0aGlzLm1lbnVPcGVuZWQ9bmV3IEcsdGhpcy5vbk1lbnVPcGVuPXRoaXMubWVudU9wZW5lZCx0aGlzLm1lbnVDbG9zZWQ9bmV3IEcsdGhpcy5vbk1lbnVDbG9zZT10aGlzLm1lbnVDbG9zZWQsdGhpcy5fc2Nyb2xsU3RyYXRlZ3k9byx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU9cyBpbnN0YW5jZW9mIHl3P3M6dm9pZCAwLGkubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9oYW5kbGVUb3VjaFN0YXJ0LGZpZSksYSYmKGEuX3RyaWdnZXJzU3VibWVudT10aGlzLnRyaWdnZXJzU3VibWVudSgpKX1nZXQgX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcigpe3JldHVybiB0aGlzLm1lbnV9c2V0IF9kZXByZWNhdGVkTWF0TWVudVRyaWdnZXJGb3IoZSl7dGhpcy5tZW51PWV9Z2V0IG1lbnUoKXtyZXR1cm4gdGhpcy5fbWVudX1zZXQgbWVudShlKXtlIT09dGhpcy5fbWVudSYmKHRoaXMuX21lbnU9ZSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxlJiYodGhpcy5fbWVudUNsb3NlU3Vic2NyaXB0aW9uPWUuY2xvc2Uuc3Vic2NyaWJlKGk9Pnt0aGlzLl9kZXN0cm95TWVudShpKSwoImNsaWNrIj09PWl8fCJ0YWIiPT09aSkmJnRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSYmdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZC5lbWl0KGkpfSkpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9oYW5kbGVIb3ZlcigpfW5nT25EZXN0cm95KCl7dGhpcy5fb3ZlcmxheVJlZiYmKHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpLHRoaXMuX292ZXJsYXlSZWY9bnVsbCksdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX2hhbmRsZVRvdWNoU3RhcnQsZmllKSx0aGlzLl9tZW51Q2xvc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jbG9zaW5nQWN0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9Z2V0IG1lbnVPcGVuKCl7cmV0dXJuIHRoaXMuX21lbnVPcGVufWdldCBkaXIoKXtyZXR1cm4gdGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn10cmlnZ2Vyc1N1Ym1lbnUoKXtyZXR1cm4hKCF0aGlzLl9tZW51SXRlbUluc3RhbmNlfHwhdGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51KX10b2dnbGVNZW51KCl7cmV0dXJuIHRoaXMuX21lbnVPcGVuP3RoaXMuY2xvc2VNZW51KCk6dGhpcy5vcGVuTWVudSgpfW9wZW5NZW51KCl7bGV0IGU9dGhpcy5tZW51O2lmKHRoaXMuX21lbnVPcGVufHwhZSlyZXR1cm47bGV0IGk9dGhpcy5fY3JlYXRlT3ZlcmxheShlKSxyPWkuZ2V0Q29uZmlnKCksbz1yLnBvc2l0aW9uU3RyYXRlZ3k7dGhpcy5fc2V0UG9zaXRpb24oZSxvKSxyLmhhc0JhY2tkcm9wPW51bGw9PWUuaGFzQmFja2Ryb3A/IXRoaXMudHJpZ2dlcnNTdWJtZW51KCk6ZS5oYXNCYWNrZHJvcCxpLmF0dGFjaCh0aGlzLl9nZXRQb3J0YWwoZSkpLGUubGF6eUNvbnRlbnQmJmUubGF6eUNvbnRlbnQuYXR0YWNoKHRoaXMubWVudURhdGEpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uPXRoaXMuX21lbnVDbG9zaW5nQWN0aW9ucygpLnN1YnNjcmliZSgoKT0+dGhpcy5jbG9zZU1lbnUoKSksdGhpcy5faW5pdE1lbnUoZSksZSBpbnN0YW5jZW9mIHl3JiYoZS5fc3RhcnRBbmltYXRpb24oKSxlLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcy5waXBlKHN0KGUuY2xvc2UpKS5zdWJzY3JpYmUoKCk9PntvLndpdGhMb2NrZWRQb3NpdGlvbighMSkucmVhcHBseUxhc3RQb3NpdGlvbigpLG8ud2l0aExvY2tlZFBvc2l0aW9uKCEwKX0pKX1jbG9zZU1lbnUoKXt0aGlzLm1lbnU/LmNsb3NlLmVtaXQoKX1mb2N1cyhlLGkpe3RoaXMuX2ZvY3VzTW9uaXRvciYmZT90aGlzLl9mb2N1c01vbml0b3IuZm9jdXNWaWEodGhpcy5fZWxlbWVudCxlLGkpOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCl9X2Rlc3Ryb3lNZW51KGUpe2lmKCF0aGlzLl9vdmVybGF5UmVmfHwhdGhpcy5tZW51T3BlbilyZXR1cm47bGV0IGk9dGhpcy5tZW51O3RoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKSx0aGlzLnJlc3RvcmVGb2N1cyYmKCJrZXlkb3duIj09PWV8fCF0aGlzLl9vcGVuZWRCeXx8IXRoaXMudHJpZ2dlcnNTdWJtZW51KCkpJiZ0aGlzLmZvY3VzKHRoaXMuX29wZW5lZEJ5KSx0aGlzLl9vcGVuZWRCeT12b2lkIDAsaSBpbnN0YW5jZW9mIHl3PyhpLl9yZXNldEFuaW1hdGlvbigpLGkubGF6eUNvbnRlbnQ/aS5fYW5pbWF0aW9uRG9uZS5waXBlKFllKHI9PiJ2b2lkIj09PXIudG9TdGF0ZSksUXQoMSksc3QoaS5sYXp5Q29udGVudC5fYXR0YWNoZWQpKS5zdWJzY3JpYmUoe25leHQ6KCk9PmkubGF6eUNvbnRlbnQuZGV0YWNoKCksY29tcGxldGU6KCk9PnRoaXMuX3NldElzTWVudU9wZW4oITEpfSk6dGhpcy5fc2V0SXNNZW51T3BlbighMSkpOih0aGlzLl9zZXRJc01lbnVPcGVuKCExKSxpPy5sYXp5Q29udGVudD8uZGV0YWNoKCkpfV9pbml0TWVudShlKXtlLnBhcmVudE1lbnU9dGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU6dm9pZCAwLGUuZGlyZWN0aW9uPXRoaXMuZGlyLHRoaXMuX3NldE1lbnVFbGV2YXRpb24oZSksZS5mb2N1c0ZpcnN0SXRlbSh0aGlzLl9vcGVuZWRCeXx8InByb2dyYW0iKSx0aGlzLl9zZXRJc01lbnVPcGVuKCEwKX1fc2V0TWVudUVsZXZhdGlvbihlKXtpZihlLnNldEVsZXZhdGlvbil7bGV0IGk9MCxyPWUucGFyZW50TWVudTtmb3IoO3I7KWkrKyxyPXIucGFyZW50TWVudTtlLnNldEVsZXZhdGlvbihpKX19X3NldElzTWVudU9wZW4oZSl7dGhpcy5fbWVudU9wZW49ZSx0aGlzLl9tZW51T3Blbj90aGlzLm1lbnVPcGVuZWQuZW1pdCgpOnRoaXMubWVudUNsb3NlZC5lbWl0KCksdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmdGhpcy5fbWVudUl0ZW1JbnN0YW5jZS5fc2V0SGlnaGxpZ2h0ZWQoZSl9X2NyZWF0ZU92ZXJsYXkoZSl7aWYoIXRoaXMuX292ZXJsYXlSZWYpe2xldCBpPXRoaXMuX2dldE92ZXJsYXlDb25maWcoZSk7dGhpcy5fc3Vic2NyaWJlVG9Qb3NpdGlvbnMoZSxpLnBvc2l0aW9uU3RyYXRlZ3kpLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoaSksdGhpcy5fb3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkuc3Vic2NyaWJlKCl9cmV0dXJuIHRoaXMuX292ZXJsYXlSZWZ9X2dldE92ZXJsYXlDb25maWcoZSl7cmV0dXJuIG5ldyBzYyh7cG9zaXRpb25TdHJhdGVneTp0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KS53aXRoTG9ja2VkUG9zaXRpb24oKS53aXRoR3Jvd0FmdGVyT3BlbigpLndpdGhUcmFuc2Zvcm1PcmlnaW5PbigiLm1hdC1tZW51LXBhbmVsLCAubWF0LW1kYy1tZW51LXBhbmVsIiksYmFja2Ryb3BDbGFzczplLmJhY2tkcm9wQ2xhc3N8fCJjZGstb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCIscGFuZWxDbGFzczplLm92ZXJsYXlQYW5lbENsYXNzLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksZGlyZWN0aW9uOnRoaXMuX2Rpcn0pfV9zdWJzY3JpYmVUb1Bvc2l0aW9ucyhlLGkpe2Uuc2V0UG9zaXRpb25DbGFzc2VzJiZpLnBvc2l0aW9uQ2hhbmdlcy5zdWJzY3JpYmUocj0+e2xldCBvPSJzdGFydCI9PT1yLmNvbm5lY3Rpb25QYWlyLm92ZXJsYXlYPyJhZnRlciI6ImJlZm9yZSIscz0idG9wIj09PXIuY29ubmVjdGlvblBhaXIub3ZlcmxheVk/ImJlbG93IjoiYWJvdmUiO3RoaXMuX25nWm9uZT90aGlzLl9uZ1pvbmUucnVuKCgpPT5lLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpKTplLnNldFBvc2l0aW9uQ2xhc3NlcyhvLHMpfSl9X3NldFBvc2l0aW9uKGUsaSl7bGV0W3Isb109ImJlZm9yZSI9PT1lLnhQb3NpdGlvbj9bImVuZCIsInN0YXJ0Il06WyJzdGFydCIsImVuZCJdLFtzLGFdPSJhYm92ZSI9PT1lLnlQb3NpdGlvbj9bImJvdHRvbSIsInRvcCJdOlsidG9wIiwiYm90dG9tIl0sW2wsY109W3MsYV0sW3UsZF09W3Isb10scD0wO2lmKHRoaXMudHJpZ2dlcnNTdWJtZW51KCkpe2lmKGQ9cj0iYmVmb3JlIj09PWUueFBvc2l0aW9uPyJzdGFydCI6ImVuZCIsbz11PSJlbmQiPT09cj8ic3RhcnQiOiJlbmQiLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudSl7aWYobnVsbD09dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nKXtsZXQgaD10aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuaXRlbXMuZmlyc3Q7dGhpcy5fcGFyZW50SW5uZXJQYWRkaW5nPWg/aC5fZ2V0SG9zdEVsZW1lbnQoKS5vZmZzZXRUb3A6MH1wPSJib3R0b20iPT09cz90aGlzLl9wYXJlbnRJbm5lclBhZGRpbmc6LXRoaXMuX3BhcmVudElubmVyUGFkZGluZ319ZWxzZSBlLm92ZXJsYXBUcmlnZ2VyfHwobD0idG9wIj09PXM/ImJvdHRvbSI6InRvcCIsYz0idG9wIj09PWE/ImJvdHRvbSI6InRvcCIpO2kud2l0aFBvc2l0aW9ucyhbe29yaWdpblg6cixvcmlnaW5ZOmwsb3ZlcmxheVg6dSxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6byxvcmlnaW5ZOmwsb3ZlcmxheVg6ZCxvdmVybGF5WTpzLG9mZnNldFk6cH0se29yaWdpblg6cixvcmlnaW5ZOmMsb3ZlcmxheVg6dSxvdmVybGF5WTphLG9mZnNldFk6LXB9LHtvcmlnaW5YOm8sb3JpZ2luWTpjLG92ZXJsYXlYOmQsb3ZlcmxheVk6YSxvZmZzZXRZOi1wfV0pfV9tZW51Q2xvc2luZ0FjdGlvbnMoKXtsZXQgZT10aGlzLl9vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSxpPXRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKTtyZXR1cm4gSnQoZSx0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnU/dGhpcy5fcGFyZW50TWF0ZXJpYWxNZW51LmNsb3NlZDpYdCgpLHRoaXMuX3BhcmVudE1hdGVyaWFsTWVudT90aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKS5waXBlKFllKHM9PnMhPT10aGlzLl9tZW51SXRlbUluc3RhbmNlKSxZZSgoKT0+dGhpcy5fbWVudU9wZW4pKTpYdCgpLGkpfV9oYW5kbGVNb3VzZWRvd24oZSl7JE0oZSl8fCh0aGlzLl9vcGVuZWRCeT0wPT09ZS5idXR0b24/Im1vdXNlIjp2b2lkIDAsdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKSYmZS5wcmV2ZW50RGVmYXVsdCgpKX1faGFuZGxlS2V5ZG93bihlKXtsZXQgaT1lLmtleUNvZGU7KDEzPT09aXx8MzI9PT1pKSYmKHRoaXMuX29wZW5lZEJ5PSJrZXlib2FyZCIpLHRoaXMudHJpZ2dlcnNTdWJtZW51KCkmJigzOT09PWkmJiJsdHIiPT09dGhpcy5kaXJ8fDM3PT09aSYmInJ0bCI9PT10aGlzLmRpcikmJih0aGlzLl9vcGVuZWRCeT0ia2V5Ym9hcmQiLHRoaXMub3Blbk1lbnUoKSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMudHJpZ2dlcnNTdWJtZW51KCk/KGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vcGVuTWVudSgpKTp0aGlzLnRvZ2dsZU1lbnUoKX1faGFuZGxlSG92ZXIoKXshdGhpcy50cmlnZ2Vyc1N1Ym1lbnUoKXx8IXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudXx8KHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9uPXRoaXMuX3BhcmVudE1hdGVyaWFsTWVudS5faG92ZXJlZCgpLnBpcGUoWWUoZT0+ZT09PXRoaXMuX21lbnVJdGVtSW5zdGFuY2UmJiFlLmRpc2FibGVkKSxPbCgwLGYwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fb3BlbmVkQnk9Im1vdXNlIix0aGlzLm1lbnUgaW5zdGFuY2VvZiB5dyYmdGhpcy5tZW51Ll9pc0FuaW1hdGluZz90aGlzLm1lbnUuX2FuaW1hdGlvbkRvbmUucGlwZShRdCgxKSxPbCgwLGYwKSxzdCh0aGlzLl9wYXJlbnRNYXRlcmlhbE1lbnUuX2hvdmVyZWQoKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5vcGVuTWVudSgpKTp0aGlzLm9wZW5NZW51KCl9KSl9X2dldFBvcnRhbChlKXtyZXR1cm4oIXRoaXMuX3BvcnRhbHx8dGhpcy5fcG9ydGFsLnRlbXBsYXRlUmVmIT09ZS50ZW1wbGF0ZVJlZikmJih0aGlzLl9wb3J0YWw9bmV3IGtzKGUudGVtcGxhdGVSZWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZikpLHRoaXMuX3BvcnRhbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0ciksTShSZSksTShPaSksTShfaWUpLE0oJEgsOCksTShudSwxMCksTSgkaSw4KSxNKEZyKSxNKF90KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2sobyl9KSgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlTW91c2Vkb3duKG8pfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVLZXlkb3duKG8pfSksMiZlJiZ6ZSgiYXJpYS1oYXNwb3B1cCIsaS5tZW51PyJtZW51IjpudWxsKSgiYXJpYS1leHBhbmRlZCIsaS5tZW51T3Blbnx8bnVsbCkoImFyaWEtY29udHJvbHMiLGkubWVudU9wZW4/aS5tZW51LnBhbmVsSWQ6bnVsbCl9LGlucHV0czp7X2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvcjpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwiX2RlcHJlY2F0ZWRNYXRNZW51VHJpZ2dlckZvciJdLG1lbnU6WyJtYXRNZW51VHJpZ2dlckZvciIsIm1lbnUiXSxtZW51RGF0YTpbIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1lbnVEYXRhIl0scmVzdG9yZUZvY3VzOlsibWF0TWVudVRyaWdnZXJSZXN0b3JlRm9jdXMiLCJyZXN0b3JlRm9jdXMiXX0sb3V0cHV0czp7bWVudU9wZW5lZDoibWVudU9wZW5lZCIsb25NZW51T3Blbjoib25NZW51T3BlbiIsbWVudUNsb3NlZDoibWVudUNsb3NlZCIsb25NZW51Q2xvc2U6Im9uTWVudUNsb3NlIn19KSxufSkoKSxmZD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaExle31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1tZW51LXRyaWdnZXItZm9yIiwiIl0sWyIiLCJtYXRNZW51VHJpZ2dlckZvciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1tZW51LXRyaWdnZXIiXSxleHBvcnRBczpbIm1hdE1lbnVUcmlnZ2VyIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHpoPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3BMZV0saW1wb3J0czpbTWUsbG4sX2wsc3MsdWQsbG5dfSksbn0pKCk7ZnVuY3Rpb24gZkxlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiw4KX1mdW5jdGlvbiBtTGUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIGdMZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTApfXZhciBVYT0oKCk9PihmdW5jdGlvbihuKXtuW24uREVGQVVMVD0wXT0iREVGQVVMVCIsbltuLkRBUktfTU9ERV9PTj0xXT0iREFSS19NT0RFX09OIixuW24uREFSS19NT0RFX09GRj0yXT0iREFSS19NT0RFX09GRiJ9KFVhfHwoVWE9e30pKSxVYSkpKCksdmllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLkRhcmtNb2RlT3ZlcnJpZGU9VWEsdGhpcy5vbk92ZXJyaWRlQ2hhbmdlZD1uZXcgR31nZXRCdXR0b25UaXRsZSgpe2xldCBlO3N3aXRjaCh0aGlzLmRhcmtNb2RlT3ZlcnJpZGUpe2Nhc2UgVWEuREVGQVVMVDplPSJCcm93c2VyIGRlZmF1bHQiO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09OOmU9IkRhcmsgbW9kZSI7YnJlYWs7Y2FzZSBVYS5EQVJLX01PREVfT0ZGOmU9IkxpZ2h0IG1vZGUifXJldHVybmBDdXJyZW50IG1vZGU6IFske2V9XS4gU3dpdGNoIGJldHdlZW4gYnJvd3NlciBkZWZhdWx0LCBsaWdodCwgb3IgZGFyayB0aGVtZS5gfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWRhcmstbW9kZS10b2dnbGUtY29tcG9uZW50Il1dLGlucHV0czp7ZGFya01vZGVPdmVycmlkZToiZGFya01vZGVPdmVycmlkZSJ9LG91dHB1dHM6e29uT3ZlcnJpZGVDaGFuZ2VkOiJvbk92ZXJyaWRlQ2hhbmdlZCJ9LGRlY2xzOjE1LHZhcnM6Nixjb25zdHM6W1sibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsIk1lbnUgZm9yIGNoYW5naW5nIGxpZ2h0IG9yIGRhcmsgdGhlbWUiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibmdTd2l0Y2giLCJ0aXRsZSJdLFsic3ZnSWNvbiIsImJyaWdodG5lc3NfNl8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic3ZnSWNvbiIsImRhcmtfbW9kZV8yNHB4Iiw0LCJuZ1N3aXRjaENhc2UiXSxbIm1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwidGl0bGUiLCJTZXQgdGhlIHRoZW1lIHRvIG1hdGNoIHRoZSBkZWZhdWx0IG1vZGUgaW4gdGhlIGJyb3dzZXIuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgbGlnaHQgVGVuc29yQm9hcmQgdGhlbWUuIiwzLCJjbGljayJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInRpdGxlIiwiRm9yY2UgZGFyayBUZW5zb3JCb2FyZCB0aGVtZS4iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiYnJpZ2h0bmVzc182XzI0cHgiXSxbInN2Z0ljb24iLCJsaWdodF9tb2RlXzI0cHgiXSxbInN2Z0ljb24iLCJkYXJrX21vZGVfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiYnV0dG9uIiwwKSxFKDEsZkxlLDEsMCwibWF0LWljb24iLDEpLEUoMixtTGUsMSwwLCJtYXQtaWNvbiIsMiksRSgzLGdMZSwxLDAsIm1hdC1pY29uIiwzKSx2KCksXyg0LCJtYXQtbWVudSIsbnVsbCw0KSg2LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQoaS5EYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQpfSksXyg3LCJsYWJlbCIpLEEoOCwiQnJvd3NlciBkZWZhdWx0IiksdigpKCksXyg5LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uT3ZlcnJpZGVDaGFuZ2VkLmVtaXQoaS5EYXJrTW9kZU92ZXJyaWRlLkRBUktfTU9ERV9PRkYpfSksXygxMCwibGFiZWwiKSxBKDExLCJMaWdodCIpLHYoKSgpLF8oMTIsImJ1dHRvbiIsNyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PdmVycmlkZUNoYW5nZWQuZW1pdChpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09OKX0pLF8oMTMsImxhYmVsIiksQSgxNCwiRGFyayIpLHYoKSgpKCkpLDImZSYmKHkoIm1hdE1lbnVUcmlnZ2VyRm9yIiwkZSg1KSkoIm5nU3dpdGNoIixpLmRhcmtNb2RlT3ZlcnJpZGUpKCJ0aXRsZSIsaS5nZXRCdXR0b25UaXRsZSgpKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5EYXJrTW9kZU92ZXJyaWRlLkRFRkFVTFQpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLkRhcmtNb2RlT3ZlcnJpZGUuREFSS19NT0RFX09GRiksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGkuRGFya01vZGVPdmVycmlkZS5EQVJLX01PREVfT04pKX0sZGVwZW5kZW5jaWVzOltfbixHdCxoZCxudSxmZCxDcixVcl0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCkseWllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZGFya01vZGVPdmVycmlkZSQ9dGhpcy5zdG9yZS5zZWxlY3QoR0EpLnBpcGUoTChpPT5udWxsPT09aT9VYS5ERUZBVUxUOmk/VWEuREFSS19NT0RFX09OOlVhLkRBUktfTU9ERV9PRkYpKX1jaGFuZ2VEYXJrTW9kZShlKXtsZXQgaT1udWxsO3N3aXRjaChlKXtjYXNlIFVhLkRFRkFVTFQ6aT1udWxsO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09GRjppPSExO2JyZWFrO2Nhc2UgVWEuREFSS19NT0RFX09OOmk9ITB9dGhpcy5zdG9yZS5kaXNwYXRjaChNSSh7ZW5hYmxlRGFya01vZGU6aX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJkYXJrTW9kZU92ZXJyaWRlIiwib25PdmVycmlkZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZS1jb21wb25lbnQiLDApLFAoIm9uT3ZlcnJpZGVDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5jaGFuZ2VEYXJrTW9kZShvKX0pLEIoMSwiYXN5bmMiKSx2KCkpLDImZSYmeSgiZGFya01vZGVPdmVycmlkZSIsVSgxLDEsaS5kYXJrTW9kZU92ZXJyaWRlJCkpfSxkZXBlbmRlbmNpZXM6W3ZpZSxHZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCk7ZnVuY3Rpb24geUxlKG4sdCl7MSZuJiZWbigwKX12YXIgTWllPVsiKiJdO2Z1bmN0aW9uIGJMZShuLHQpe312YXIgeExlPWZ1bmN0aW9uKG4pe3JldHVybnthbmltYXRpb25EdXJhdGlvbjpufX0sQ0xlPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3ZhbHVlOm4scGFyYW1zOnR9fSxNTGU9WyJ0YWJMaXN0Q29udGFpbmVyIl0sd0xlPVsidGFiTGlzdCJdLFNMZT1bInRhYkxpc3RJbm5lciJdLEVMZT1bIm5leHRQYWdpbmF0b3IiXSxUTGU9WyJwcmV2aW91c1BhZ2luYXRvciJdLERMZT1bInRhYkJvZHlXcmFwcGVyIl0sQUxlPVsidGFiSGVhZGVyIl07ZnVuY3Rpb24gSUxlKG4sdCl7fWZ1bmN0aW9uIFBMZShuLHQpezEmbiYmRSgwLElMZSwwLDAsIm5nLXRlbXBsYXRlIiwxMCksMiZuJiZ5KCJjZGtQb3J0YWxPdXRsZXQiLFMoKS4kaW1wbGljaXQudGVtcGxhdGVMYWJlbCl9ZnVuY3Rpb24gUkxlKG4sdCl7MSZuJiZBKDApLDImbiYmeXQoUygpLiRpbXBsaWNpdC50ZXh0TGFiZWwpfWZ1bmN0aW9uIE9MZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IHI9b2UoZSksbz1yLiRpbXBsaWNpdCxzPXIuaW5kZXgsYT1TKCksbD0kZSgxKTtyZXR1cm4gc2UoYS5faGFuZGxlQ2xpY2sobyxsLHMpKX0pKCJjZGtGb2N1c0NoYW5nZSIsZnVuY3Rpb24ocil7bGV0IHM9b2UoZSkuaW5kZXg7cmV0dXJuIHNlKFMoKS5fdGFiRm9jdXNDaGFuZ2VkKHIscykpfSksXygxLCJkaXYiLDcpLEUoMixQTGUsMSwxLCJuZy10ZW1wbGF0ZSIsOCksRSgzLFJMZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDkscXQpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9JGUoNCksbz1TKCk7ZXQoIm1hdC10YWItbGFiZWwtYWN0aXZlIixvLnNlbGVjdGVkSW5kZXg9PT1pKSx5KCJpZCIsby5fZ2V0VGFiTGFiZWxJZChpKSkoIm5nQ2xhc3MiLGUubGFiZWxDbGFzcykoImRpc2FibGVkIixlLmRpc2FibGVkKSgibWF0UmlwcGxlRGlzYWJsZWQiLGUuZGlzYWJsZWR8fG8uZGlzYWJsZVJpcHBsZSksemUoInRhYkluZGV4IixvLl9nZXRUYWJJbmRleChlLGkpKSgiYXJpYS1wb3NpbnNldCIsaSsxKSgiYXJpYS1zZXRzaXplIixvLl90YWJzLmxlbmd0aCkoImFyaWEtY29udHJvbHMiLG8uX2dldFRhYkNvbnRlbnRJZChpKSkoImFyaWEtc2VsZWN0ZWQiLG8uc2VsZWN0ZWRJbmRleD09PWkpKCJhcmlhLWxhYmVsIixlLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsIWUuYXJpYUxhYmVsJiZlLmFyaWFMYWJlbGxlZGJ5P2UuYXJpYUxhYmVsbGVkYnk6bnVsbCksQygyKSx5KCJuZ0lmIixlLnRlbXBsYXRlTGFiZWwpKCJuZ0lmRWxzZSIscil9fWZ1bmN0aW9uIGtMZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsIm1hdC10YWItYm9keSIsMTEpLFAoIl9vbkNlbnRlcmVkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkuX3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCkpfSkoIl9vbkNlbnRlcmluZyIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5fc2V0VGFiQm9keVdyYXBwZXJIZWlnaHQocikpfSksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9UygpO2V0KCJtYXQtdGFiLWJvZHktYWN0aXZlIixyLnNlbGVjdGVkSW5kZXg9PT1pKSx5KCJpZCIsci5fZ2V0VGFiQ29udGVudElkKGkpKSgibmdDbGFzcyIsZS5ib2R5Q2xhc3MpKCJjb250ZW50IixlLmNvbnRlbnQpKCJwb3NpdGlvbiIsZS5wb3NpdGlvbikoIm9yaWdpbiIsZS5vcmlnaW4pKCJhbmltYXRpb25EdXJhdGlvbiIsci5hbmltYXRpb25EdXJhdGlvbikoInByZXNlcnZlQ29udGVudCIsci5wcmVzZXJ2ZUNvbnRlbnQpLHplKCJ0YWJpbmRleCIsbnVsbCE9ci5jb250ZW50VGFiSW5kZXgmJnIuc2VsZWN0ZWRJbmRleD09PWk/ci5jb250ZW50VGFiSW5kZXg6bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsci5fZ2V0VGFiTGFiZWxJZChpKSl9fXZhciBGTGU9bmV3IHBlKCJNYXRJbmtCYXJQb3NpdGlvbmVyIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiB0PT4oe2xlZnQ6dD8odC5vZmZzZXRMZWZ0fHwwKSsicHgiOiIwIix3aWR0aDp0Pyh0Lm9mZnNldFdpZHRofHwwKSsicHgiOiIwIn0pfX0pLGJpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8pe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9pbmtCYXJQb3NpdGlvbmVyPXIsdGhpcy5fYW5pbWF0aW9uTW9kZT1vfWFsaWduVG9FbGVtZW50KGUpe3RoaXMuc2hvdygpLHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShRdCgxKSkuc3Vic2NyaWJlKCgpPT57bGV0IGk9dGhpcy5faW5rQmFyUG9zaXRpb25lcihlKSxyPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtyLnN0eWxlLmxlZnQ9aS5sZWZ0LHIuc3R5bGUud2lkdGg9aS53aWR0aH0pfSl9c2hvdygpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIn1oaWRlKCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oX3QpLE0oRkxlKSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWluay1iYXIiXV0saG9zdEF0dHJzOlsxLCJtYXQtaW5rLWJhciJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKX19KSxufSkoKSxMTGU9bmV3IHBlKCJNYXRUYWJDb250ZW50Iiksd2llPW5ldyBwZSgiTWF0VGFiTGFiZWwiKSxTaWU9bmV3IHBlKCJNQVRfVEFCIiksRWllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmdGV7Y29uc3RydWN0b3IoZSxpLHIpe3N1cGVyKGUsaSksdGhpcy5fY2xvc2VzdFRhYj1yfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZpKSxNKE9pKSxNKFNpZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC10YWItbGFiZWwiLCIiXSxbIiIsIm1hdFRhYkxhYmVsIiwiIl1dLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6d2llLHVzZUV4aXN0aW5nOm59XSksdHRdfSksbn0pKCksQkxlPXNvKGNsYXNze30pLFRpZT1uZXcgcGUoIk1BVF9UQUJfR1JPVVAiKSx4dz0oKCk9PntjbGFzcyBuIGV4dGVuZHMgQkxle2NvbnN0cnVjdG9yKGUsaSl7c3VwZXIoKSx0aGlzLl92aWV3Q29udGFpbmVyUmVmPWUsdGhpcy5fY2xvc2VzdFRhYkdyb3VwPWksdGhpcy50ZXh0TGFiZWw9IiIsdGhpcy5fY29udGVudFBvcnRhbD1udWxsLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcga2UsdGhpcy5wb3NpdGlvbj1udWxsLHRoaXMub3JpZ2luPW51bGwsdGhpcy5pc0FjdGl2ZT0hMX1nZXQgdGVtcGxhdGVMYWJlbCgpe3JldHVybiB0aGlzLl90ZW1wbGF0ZUxhYmVsfXNldCB0ZW1wbGF0ZUxhYmVsKGUpe3RoaXMuX3NldFRlbXBsYXRlTGFiZWxJbnB1dChlKX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLl9jb250ZW50UG9ydGFsfW5nT25DaGFuZ2VzKGUpeyhlLmhhc093blByb3BlcnR5KCJ0ZXh0TGFiZWwiKXx8ZS5oYXNPd25Qcm9wZXJ0eSgiZGlzYWJsZWQiKSkmJnRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1uZ09uSW5pdCgpe3RoaXMuX2NvbnRlbnRQb3J0YWw9bmV3IGtzKHRoaXMuX2V4cGxpY2l0Q29udGVudHx8dGhpcy5faW1wbGljaXRDb250ZW50LHRoaXMuX3ZpZXdDb250YWluZXJSZWYpfV9zZXRUZW1wbGF0ZUxhYmVsSW5wdXQoZSl7ZSYmZS5fY2xvc2VzdFRhYj09PXRoaXMmJih0aGlzLl90ZW1wbGF0ZUxhYmVsPWUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSxNKFRpZSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoRWkocix3aWUsNSksRWkocixMTGUsNyxWaSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkudGVtcGxhdGVMYWJlbD1vLmZpcnN0KSxOZShvPUxlKCkpJiYoaS5fZXhwbGljaXRDb250ZW50PW8uZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChWaSw3KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9pbXBsaWNpdENvbnRlbnQ9ci5maXJzdCl9fSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsdGV4dExhYmVsOlsibGFiZWwiLCJ0ZXh0TGFiZWwiXSxhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGxhYmVsQ2xhc3M6ImxhYmVsQ2xhc3MiLGJvZHlDbGFzczoiYm9keUNsYXNzIn0sZXhwb3J0QXM6WyJtYXRUYWIiXSxmZWF0dXJlczpbJHQoW3twcm92aWRlOlNpZSx1c2VFeGlzdGluZzpufV0pLHR0LEZ0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6TWllLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoKSxFKDAseUxlLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLFZMZT17dHJhbnNsYXRlVGFiOktyKCJ0cmFuc2xhdGVUYWIiLFtraSgiY2VudGVyLCB2b2lkLCBsZWZ0LW9yaWdpbi1jZW50ZXIsIHJpZ2h0LW9yaWdpbi1jZW50ZXIiLGduKHt0cmFuc2Zvcm06Im5vbmUifSkpLGtpKCJsZWZ0Iixnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGUzZCgtMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSkpLGtpKCJyaWdodCIsZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkiLG1pbkhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSkpLExpKCIqID0+IGxlZnQsICogPT4gcmlnaHQsIGxlZnQgPT4gY2VudGVyLCByaWdodCA9PiBjZW50ZXIiLGppKCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIikpLExpKCJ2b2lkID0+IGxlZnQtb3JpZ2luLWNlbnRlciIsW2duKHt0cmFuc2Zvcm06InRyYW5zbGF0ZTNkKC0xMDAlLCAwLCAwKSIsdmlzaWJpbGl0eToiaGlkZGVuIn0pLGppKCJ7e2FuaW1hdGlvbkR1cmF0aW9ufX0gY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpIildKSxMaSgidm9pZCA9PiByaWdodC1vcmlnaW4tY2VudGVyIixbZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlM2QoMTAwJSwgMCwgMCkiLHZpc2liaWxpdHk6ImhpZGRlbiJ9KSxqaSgie3thbmltYXRpb25EdXJhdGlvbn19IGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKSIpXSldKX0sSExlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLGkscixvKXtzdXBlcihlLGksbyksdGhpcy5faG9zdD1yLHRoaXMuX2NlbnRlcmluZ1N1Yj1Tbi5FTVBUWSx0aGlzLl9sZWF2aW5nU3ViPVNuLkVNUFRZfW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLl9jZW50ZXJpbmdTdWI9dGhpcy5faG9zdC5fYmVmb3JlQ2VudGVyaW5nLnBpcGUoem4odGhpcy5faG9zdC5faXNDZW50ZXJQb3NpdGlvbih0aGlzLl9ob3N0Ll9wb3NpdGlvbikpKS5zdWJzY3JpYmUoZT0+e2UmJiF0aGlzLmhhc0F0dGFjaGVkKCkmJnRoaXMuYXR0YWNoKHRoaXMuX2hvc3QuX2NvbnRlbnQpfSksdGhpcy5fbGVhdmluZ1N1Yj10aGlzLl9ob3N0Ll9hZnRlckxlYXZpbmdDZW50ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5faG9zdC5wcmVzZXJ2ZUNvbnRlbnR8fHRoaXMuZGV0YWNoKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5fY2VudGVyaW5nU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fbGVhdmluZ1N1Yi51bnN1YnNjcmliZSgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKGdzKSxNKE9pKSxNKEpuKCgpPT5EaWUpKSxNKEh0KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkJvZHlIb3N0IiwiIl1dLGZlYXR1cmVzOlt0dF19KSxufSkoKSxVTGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2Rpcj1pLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl90cmFuc2xhdGVUYWJDb21wbGV0ZT1uZXcga2UsdGhpcy5fb25DZW50ZXJpbmc9bmV3IEcsdGhpcy5fYmVmb3JlQ2VudGVyaW5nPW5ldyBHLHRoaXMuX2FmdGVyTGVhdmluZ0NlbnRlcj1uZXcgRyx0aGlzLl9vbkNlbnRlcmVkPW5ldyBHKCEwKSx0aGlzLmFuaW1hdGlvbkR1cmF0aW9uPSI1MDBtcyIsdGhpcy5wcmVzZXJ2ZUNvbnRlbnQ9ITEsaSYmKHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbj1pLmNoYW5nZS5zdWJzY3JpYmUobz0+e3RoaXMuX2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKG8pLHIubWFya0ZvckNoZWNrKCl9KSksdGhpcy5fdHJhbnNsYXRlVGFiQ29tcGxldGUucGlwZSh5aSgobyxzKT0+by5mcm9tU3RhdGU9PT1zLmZyb21TdGF0ZSYmby50b1N0YXRlPT09cy50b1N0YXRlKSkuc3Vic2NyaWJlKG89Pnt0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8udG9TdGF0ZSkmJnRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9vbkNlbnRlcmVkLmVtaXQoKSx0aGlzLl9pc0NlbnRlclBvc2l0aW9uKG8uZnJvbVN0YXRlKSYmIXRoaXMuX2lzQ2VudGVyUG9zaXRpb24odGhpcy5fcG9zaXRpb24pJiZ0aGlzLl9hZnRlckxlYXZpbmdDZW50ZXIuZW1pdCgpfSl9c2V0IHBvc2l0aW9uKGUpe3RoaXMuX3Bvc2l0aW9uSW5kZXg9ZSx0aGlzLl9jb21wdXRlUG9zaXRpb25BbmltYXRpb25TdGF0ZSgpfW5nT25Jbml0KCl7ImNlbnRlciI9PXRoaXMuX3Bvc2l0aW9uJiZudWxsIT10aGlzLm9yaWdpbiYmKHRoaXMuX3Bvc2l0aW9uPXRoaXMuX2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4odGhpcy5vcmlnaW4pKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RyYW5zbGF0ZVRhYkNvbXBsZXRlLmNvbXBsZXRlKCl9X29uVHJhbnNsYXRlVGFiU3RhcnRlZChlKXtsZXQgaT10aGlzLl9pc0NlbnRlclBvc2l0aW9uKGUudG9TdGF0ZSk7dGhpcy5fYmVmb3JlQ2VudGVyaW5nLmVtaXQoaSksaSYmdGhpcy5fb25DZW50ZXJpbmcuZW1pdCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0KX1fZ2V0TGF5b3V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PT10aGlzLl9kaXIudmFsdWU/InJ0bCI6Imx0ciJ9X2lzQ2VudGVyUG9zaXRpb24oZSl7cmV0dXJuImNlbnRlciI9PWV8fCJsZWZ0LW9yaWdpbi1jZW50ZXIiPT1lfHwicmlnaHQtb3JpZ2luLWNlbnRlciI9PWV9X2NvbXB1dGVQb3NpdGlvbkFuaW1hdGlvblN0YXRlKGU9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpe3RoaXMuX3Bvc2l0aW9uPXRoaXMuX3Bvc2l0aW9uSW5kZXg8MD8ibHRyIj09ZT8ibGVmdCI6InJpZ2h0Ijp0aGlzLl9wb3NpdGlvbkluZGV4PjA/Imx0ciI9PWU/InJpZ2h0IjoibGVmdCI6ImNlbnRlciJ9X2NvbXB1dGVQb3NpdGlvbkZyb21PcmlnaW4oZSl7bGV0IGk9dGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCk7cmV0dXJuImx0ciI9PWkmJmU8PTB8fCJydGwiPT1pJiZlPjA/ImxlZnQtb3JpZ2luLWNlbnRlciI6InJpZ2h0LW9yaWdpbi1jZW50ZXIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKCRpLDgpLE0obm4pKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e19jb250ZW50OlsiY29udGVudCIsIl9jb250ZW50Il0sb3JpZ2luOiJvcmlnaW4iLGFuaW1hdGlvbkR1cmF0aW9uOiJhbmltYXRpb25EdXJhdGlvbiIscHJlc2VydmVDb250ZW50OiJwcmVzZXJ2ZUNvbnRlbnQiLHBvc2l0aW9uOiJwb3NpdGlvbiJ9LG91dHB1dHM6e19vbkNlbnRlcmluZzoiX29uQ2VudGVyaW5nIixfYmVmb3JlQ2VudGVyaW5nOiJfYmVmb3JlQ2VudGVyaW5nIixfYWZ0ZXJMZWF2aW5nQ2VudGVyOiJfYWZ0ZXJMZWF2aW5nQ2VudGVyIixfb25DZW50ZXJlZDoiX29uQ2VudGVyZWQifX0pLG59KSgpLERpZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgVUxle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLGkscil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oJGksOCksTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItYm9keSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGRhLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3BvcnRhbEhvc3Q9ci5maXJzdCl9fSxob3N0QXR0cnM6WzEsIm1hdC10YWItYm9keSJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbImNka1Njcm9sbGFibGUiLCIiLDEsIm1hdC10YWItYm9keS1jb250ZW50Il0sWyJjb250ZW50IiwiIl0sWyJtYXRUYWJCb2R5SG9zdCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwLDEpLFAoIkB0cmFuc2xhdGVUYWIuc3RhcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vblRyYW5zbGF0ZVRhYlN0YXJ0ZWQobyl9KSgiQHRyYW5zbGF0ZVRhYi5kb25lIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fdHJhbnNsYXRlVGFiQ29tcGxldGUubmV4dChvKX0pLEUoMixiTGUsMCwwLCJuZy10ZW1wbGF0ZSIsMiksdigpKSwyJmUmJnkoIkB0cmFuc2xhdGVUYWIiLFFyKDMsQ0xlLGkuX3Bvc2l0aW9uLE9uKDEseExlLGkuYW5pbWF0aW9uRHVyYXRpb24pKSl9LGRlcGVuZGVuY2llczpbSExlXSxzdHlsZXM6WycubWF0LXRhYi1ib2R5LWNvbnRlbnR7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30ubWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCAubWF0LXRhYi1ib2R5LWNvbnRlbnR7b3ZlcmZsb3c6aGlkZGVufS5tYXQtdGFiLWJvZHktY29udGVudFtzdHlsZSo9InZpc2liaWxpdHk6IGhpZGRlbiJde2Rpc3BsYXk6bm9uZX0nXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltWTGUudHJhbnNsYXRlVGFiXX19KSxufSkoKSxBaWU9bmV3IHBlKCJNQVRfVEFCU19DT05GSUciKSx6TGU9c28oY2xhc3N7fSksSWllPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB6TGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLmVsZW1lbnRSZWY9ZX1mb2N1cygpe3RoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9Z2V0T2Zmc2V0TGVmdCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0fWdldE9mZnNldFdpZHRoKCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdFRhYkxhYmVsV3JhcHBlciIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmKHplKCJhcmlhLWRpc2FibGVkIiwhIWkuZGlzYWJsZWQpLGV0KCJtYXQtdGFiLWRpc2FibGVkIixpLmRpc2FibGVkKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLHhpZT1sYSh7cGFzc2l2ZTohMH0pLFdMZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhLGwpe3RoaXMuX2VsZW1lbnRSZWY9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1pLHRoaXMuX3ZpZXdwb3J0UnVsZXI9cix0aGlzLl9kaXI9byx0aGlzLl9uZ1pvbmU9cyx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2FuaW1hdGlvbk1vZGU9bCx0aGlzLl9zY3JvbGxEaXN0YW5jZT0wLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2Rlc3Ryb3llZD1uZXcga2UsdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz0hMSx0aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9ITAsdGhpcy5fZGlzYWJsZVNjcm9sbEJlZm9yZT0hMCx0aGlzLl9zdG9wU2Nyb2xsaW5nPW5ldyBrZSx0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9zZWxlY3RlZEluZGV4PTAsdGhpcy5zZWxlY3RGb2N1c2VkSW5kZXg9bmV3IEcsdGhpcy5pbmRleEZvY3VzZWQ9bmV3IEcscy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e19pKGUubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3RvcEludGVydmFsKCl9KX0pfWdldCBkaXNhYmxlUGFnaW5hdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbn1zZXQgZGlzYWJsZVBhZ2luYXRpb24oZSl7dGhpcy5fZGlzYWJsZVBhZ2luYXRpb249UnQoZSl9Z2V0IHNlbGVjdGVkSW5kZXgoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWRJbmRleH1zZXQgc2VsZWN0ZWRJbmRleChlKXtlPUJpKGUpLHRoaXMuX3NlbGVjdGVkSW5kZXghPWUmJih0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZD0hMCx0aGlzLl9zZWxlY3RlZEluZGV4PWUsdGhpcy5fa2V5TWFuYWdlciYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGUpKX1uZ0FmdGVyVmlld0luaXQoKXtfaSh0aGlzLl9wcmV2aW91c1BhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0Iix4aWUpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIpfSksX2kodGhpcy5fbmV4dFBhZ2luYXRvci5uYXRpdmVFbGVtZW50LCJ0b3VjaHN0YXJ0Iix4aWUpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImFmdGVyIil9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtsZXQgZT10aGlzLl9kaXI/dGhpcy5fZGlyLmNoYW5nZTpYdCgibHRyIiksaT10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxNTApLHI9KCk9Pnt0aGlzLnVwZGF0ZVBhZ2luYXRpb24oKSx0aGlzLl9hbGlnbklua0JhclRvU2VsZWN0ZWRUYWIoKX07dGhpcy5fa2V5TWFuYWdlcj1uZXcgU2godGhpcy5faXRlbXMpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpLndpdGhIb21lQW5kRW5kKCkud2l0aFdyYXAoKSx0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0odGhpcy5fc2VsZWN0ZWRJbmRleCksdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLnN1YnNjcmliZShyKSxKdChlLGksdGhpcy5faXRlbXMuY2hhbmdlcyx0aGlzLl9pdGVtc1Jlc2l6ZWQoKSkucGlwZShzdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e3RoaXMuX3Njcm9sbERpc3RhbmNlPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSx0aGlzLl9zY3JvbGxEaXN0YW5jZSkpLHIoKX0pfSksdGhpcy5fa2V5TWFuYWdlci53aXRoSG9yaXpvbnRhbE9yaWVudGF0aW9uKHRoaXMuX2dldExheW91dERpcmVjdGlvbigpKX0pLHRoaXMuX2tleU1hbmFnZXIuY2hhbmdlLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKG89Pnt0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KG8pLHRoaXMuX3NldFRhYkZvY3VzKG8pfSl9X2l0ZW1zUmVzaXplZCgpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBSZXNpemVPYnNlcnZlcj9lbzp0aGlzLl9pdGVtcy5jaGFuZ2VzLnBpcGUoem4odGhpcy5faXRlbXMpLHVpKGU9Pm5ldyB1bihpPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgcj1uZXcgUmVzaXplT2JzZXJ2ZXIobz0+aS5uZXh0KG8pKTtyZXR1cm4gZS5mb3JFYWNoKG89PnIub2JzZXJ2ZShvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpLCgpPT57ci5kaXNjb25uZWN0KCl9fSkpKSxaYSgxKSxZZShlPT5lLnNvbWUoaT0+aS5jb250ZW50UmVjdC53aWR0aD4wJiZpLmNvbnRlbnRSZWN0LmhlaWdodD4wKSkpfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuX3RhYkxhYmVsQ291bnQhPXRoaXMuX2l0ZW1zLmxlbmd0aCYmKHRoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX3RhYkxhYmVsQ291bnQ9dGhpcy5faXRlbXMubGVuZ3RoLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zZWxlY3RlZEluZGV4Q2hhbmdlZCYmKHRoaXMuX3Njcm9sbFRvTGFiZWwodGhpcy5fc2VsZWN0ZWRJbmRleCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX3NlbGVjdGVkSW5kZXhDaGFuZ2VkPSExLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKSx0aGlzLl9zY3JvbGxEaXN0YW5jZUNoYW5nZWQmJih0aGlzLl91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZD0hMSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3N0b3BTY3JvbGxpbmcuY29tcGxldGUoKX1faGFuZGxlS2V5ZG93bihlKXtpZigha3IoZSkpc3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDMyOnRoaXMuZm9jdXNJbmRleCE9PXRoaXMuc2VsZWN0ZWRJbmRleCYmKHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KSx0aGlzLl9pdGVtU2VsZWN0ZWQoZSkpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fa2V5TWFuYWdlci5vbktleWRvd24oZSl9fV9vbkNvbnRlbnRDaGFuZ2VzKCl7bGV0IGU9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50O2UhPT10aGlzLl9jdXJyZW50VGV4dENvbnRlbnQmJih0aGlzLl9jdXJyZW50VGV4dENvbnRlbnQ9ZXx8IiIsdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMudXBkYXRlUGFnaW5hdGlvbigpLHRoaXMuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl9jaGVja1BhZ2luYXRpb25FbmFibGVkKCksdGhpcy5fY2hlY2tTY3JvbGxpbmdDb250cm9scygpLHRoaXMuX3VwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCl9Z2V0IGZvY3VzSW5kZXgoKXtyZXR1cm4gdGhpcy5fa2V5TWFuYWdlcj90aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDowfXNldCBmb2N1c0luZGV4KGUpeyF0aGlzLl9pc1ZhbGlkSW5kZXgoZSl8fHRoaXMuZm9jdXNJbmRleD09PWV8fCF0aGlzLl9rZXlNYW5hZ2VyfHx0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZSl9X2lzVmFsaWRJbmRleChlKXtpZighdGhpcy5faXRlbXMpcmV0dXJuITA7bGV0IGk9dGhpcy5faXRlbXM/dGhpcy5faXRlbXMudG9BcnJheSgpW2VdOm51bGw7cmV0dXJuISFpJiYhaS5kaXNhYmxlZH1fc2V0VGFiRm9jdXMoZSl7aWYodGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fc2Nyb2xsVG9MYWJlbChlKSx0aGlzLl9pdGVtcyYmdGhpcy5faXRlbXMubGVuZ3RoKXt0aGlzLl9pdGVtcy50b0FycmF5KClbZV0uZm9jdXMoKTtsZXQgaT10aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7aS5zY3JvbGxMZWZ0PSJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8wOmkuc2Nyb2xsV2lkdGgtaS5vZmZzZXRXaWR0aH19X2dldExheW91dERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9kaXImJiJydGwiPT09dGhpcy5fZGlyLnZhbHVlPyJydGwiOiJsdHIifV91cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pcmV0dXJuO2xldCBlPXRoaXMuc2Nyb2xsRGlzdGFuY2UsaT0ibHRyIj09PXRoaXMuX2dldExheW91dERpcmVjdGlvbigpPy1lOmU7dGhpcy5fdGFiTGlzdC5uYXRpdmVFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoaSl9cHgpYCwodGhpcy5fcGxhdGZvcm0uVFJJREVOVHx8dGhpcy5fcGxhdGZvcm0uRURHRSkmJih0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdD0wKX1nZXQgc2Nyb2xsRGlzdGFuY2UoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsRGlzdGFuY2V9c2V0IHNjcm9sbERpc3RhbmNlKGUpe3RoaXMuX3Njcm9sbFRvKGUpfV9zY3JvbGxIZWFkZXIoZSl7cmV0dXJuIHRoaXMuX3Njcm9sbFRvKHRoaXMuX3Njcm9sbERpc3RhbmNlKygiYmVmb3JlIj09ZT8tMToxKSp0aGlzLl90YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgvMyl9X2hhbmRsZVBhZ2luYXRvckNsaWNrKGUpe3RoaXMuX3N0b3BJbnRlcnZhbCgpLHRoaXMuX3Njcm9sbEhlYWRlcihlKX1fc2Nyb2xsVG9MYWJlbChlKXtpZih0aGlzLmRpc2FibGVQYWdpbmF0aW9uKXJldHVybjtsZXQgaT10aGlzLl9pdGVtcz90aGlzLl9pdGVtcy50b0FycmF5KClbZV06bnVsbDtpZighaSlyZXR1cm47bGV0IGEsbCxyPXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCx7b2Zmc2V0TGVmdDpvLG9mZnNldFdpZHRoOnN9PWkuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyJsdHIiPT10aGlzLl9nZXRMYXlvdXREaXJlY3Rpb24oKT8oYT1vLGw9YStzKToobD10aGlzLl90YWJMaXN0SW5uZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aC1vLGE9bC1zKTtsZXQgYz10aGlzLnNjcm9sbERpc3RhbmNlLHU9dGhpcy5zY3JvbGxEaXN0YW5jZStyO2E8Yz90aGlzLnNjcm9sbERpc3RhbmNlLT1jLWErNjA6bD51JiYodGhpcy5zY3JvbGxEaXN0YW5jZSs9bC11KzYwKX1fY2hlY2tQYWdpbmF0aW9uRW5hYmxlZCgpe2lmKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz0hMTtlbHNle2xldCBlPXRoaXMuX3RhYkxpc3RJbm5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoPnRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtlfHwodGhpcy5zY3JvbGxEaXN0YW5jZT0wKSxlIT09dGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scyYmdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5fc2hvd1BhZ2luYXRpb25Db250cm9scz1lfX1fY2hlY2tTY3JvbGxpbmdDb250cm9scygpe3RoaXMuZGlzYWJsZVBhZ2luYXRpb24/dGhpcy5fZGlzYWJsZVNjcm9sbEFmdGVyPXRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9ITA6KHRoaXMuX2Rpc2FibGVTY3JvbGxCZWZvcmU9MD09dGhpcy5zY3JvbGxEaXN0YW5jZSx0aGlzLl9kaXNhYmxlU2Nyb2xsQWZ0ZXI9dGhpcy5zY3JvbGxEaXN0YW5jZT09dGhpcy5fZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2dldE1heFNjcm9sbERpc3RhbmNlKCl7cmV0dXJuIHRoaXMuX3RhYkxpc3RJbm5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoLXRoaXMuX3RhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MH1fYWxpZ25JbmtCYXJUb1NlbGVjdGVkVGFiKCl7bGV0IGU9dGhpcy5faXRlbXMmJnRoaXMuX2l0ZW1zLmxlbmd0aD90aGlzLl9pdGVtcy50b0FycmF5KClbdGhpcy5zZWxlY3RlZEluZGV4XTpudWxsLGk9ZT9lLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO2k/dGhpcy5faW5rQmFyLmFsaWduVG9FbGVtZW50KGkpOnRoaXMuX2lua0Jhci5oaWRlKCl9X3N0b3BJbnRlcnZhbCgpe3RoaXMuX3N0b3BTY3JvbGxpbmcubmV4dCgpfV9oYW5kbGVQYWdpbmF0b3JQcmVzcyhlLGkpe2kmJm51bGwhPWkuYnV0dG9uJiYwIT09aS5idXR0b258fCh0aGlzLl9zdG9wSW50ZXJ2YWwoKSxLYSg2NTAsMTAwKS5waXBlKHN0KEp0KHRoaXMuX3N0b3BTY3JvbGxpbmcsdGhpcy5fZGVzdHJveWVkKSkpLnN1YnNjcmliZSgoKT0+e2xldHttYXhTY3JvbGxEaXN0YW5jZTpyLGRpc3RhbmNlOm99PXRoaXMuX3Njcm9sbEhlYWRlcihlKTsoMD09PW98fG8+PXIpJiZ0aGlzLl9zdG9wSW50ZXJ2YWwoKX0pKX1fc2Nyb2xsVG8oZSl7aWYodGhpcy5kaXNhYmxlUGFnaW5hdGlvbilyZXR1cm57bWF4U2Nyb2xsRGlzdGFuY2U6MCxkaXN0YW5jZTowfTtsZXQgaT10aGlzLl9nZXRNYXhTY3JvbGxEaXN0YW5jZSgpO3JldHVybiB0aGlzLl9zY3JvbGxEaXN0YW5jZT1NYXRoLm1heCgwLE1hdGgubWluKGksZSkpLHRoaXMuX3Njcm9sbERpc3RhbmNlQ2hhbmdlZD0hMCx0aGlzLl9jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCkse21heFNjcm9sbERpc3RhbmNlOmksZGlzdGFuY2U6dGhpcy5fc2Nyb2xsRGlzdGFuY2V9fX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKG5uKSxNKFZhKSxNKCRpLDgpLE0oX3QpLE0ob2kpLE0oUGksOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGlucHV0czp7ZGlzYWJsZVBhZ2luYXRpb246ImRpc2FibGVQYWdpbmF0aW9uIn19KSxufSkoKSxxTGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFdMZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlLGkscixvLHMsYSxsKSx0aGlzLl9kaXNhYmxlUmlwcGxlPSExfWdldCBkaXNhYmxlUmlwcGxlKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVSaXBwbGV9c2V0IGRpc2FibGVSaXBwbGUoZSl7dGhpcy5fZGlzYWJsZVJpcHBsZT1SdChlKX1faXRlbVNlbGVjdGVkKGUpe2UucHJldmVudERlZmF1bHQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShubiksTShWYSksTSgkaSw4KSxNKF90KSxNKG9pKSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxmZWF0dXJlczpbdHRdfSksbn0pKCksWUxlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBxTGV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoZSxpLHIsbyxzLGEsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oVmEpLE0oJGksOCksTShfdCksTShvaSksTShQaSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRhYi1oZWFkZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmRWkocixJaWUsNCksMiZlKXtsZXQgbztOZShvPUxlKCkpJiYoaS5faXRlbXM9byl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihvdChiaWUsNyksb3QoTUxlLDcpLG90KHdMZSw3KSxvdChTTGUsNyksb3QoRUxlLDUpLG90KFRMZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW5rQmFyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJMaXN0Q29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJMaXN0PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLl90YWJMaXN0SW5uZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX25leHRQYWdpbmF0b3I9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX3ByZXZpb3VzUGFnaW5hdG9yPXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtdGFiLWhlYWRlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jb250cm9scy1lbmFibGVkIixpLl9zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSgibWF0LXRhYi1oZWFkZXItcnRsIiwicnRsIj09aS5fZ2V0TGF5b3V0RGlyZWN0aW9uKCkpfSxpbnB1dHM6e3NlbGVjdGVkSW5kZXg6InNlbGVjdGVkSW5kZXgifSxvdXRwdXRzOntzZWxlY3RGb2N1c2VkSW5kZXg6InNlbGVjdEZvY3VzZWRJbmRleCIsaW5kZXhGb2N1c2VkOiJpbmRleEZvY3VzZWQifSxmZWF0dXJlczpbdHRdLG5nQ29udGVudFNlbGVjdG9yczpNaWUsZGVjbHM6MTQsdmFyczoxMCxjb25zdHM6W1siYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsIm1hdC1yaXBwbGUiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uIiwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUiLCJtYXQtZWxldmF0aW9uLXo0IiwzLCJtYXRSaXBwbGVEaXNhYmxlZCIsImRpc2FibGVkIiwiY2xpY2siLCJtb3VzZWRvd24iLCJ0b3VjaGVuZCJdLFsicHJldmlvdXNQYWdpbmF0b3IiLCIiXSxbMSwibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uIl0sWzEsIm1hdC10YWItbGFiZWwtY29udGFpbmVyIiwzLCJrZXlkb3duIl0sWyJ0YWJMaXN0Q29udGFpbmVyIiwiIl0sWyJyb2xlIiwidGFibGlzdCIsMSwibWF0LXRhYi1saXN0IiwzLCJjZGtPYnNlcnZlQ29udGVudCJdLFsidGFiTGlzdCIsIiJdLFsxLCJtYXQtdGFiLWxhYmVscyJdLFsidGFiTGlzdElubmVyIiwiIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwibWF0LXJpcHBsZSIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24iLCJtYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIiwibWF0LWVsZXZhdGlvbi16NCIsMywibWF0UmlwcGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsIm1vdXNlZG93biIsImNsaWNrIiwidG91Y2hlbmQiXSxbIm5leHRQYWdpbmF0b3IiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLF8oMCwiYnV0dG9uIiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVQYWdpbmF0b3JDbGljaygiYmVmb3JlIil9KSgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlUGFnaW5hdG9yUHJlc3MoImJlZm9yZSIsbyl9KSgidG91Y2hlbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX3N0b3BJbnRlcnZhbCgpfSksTygyLCJkaXYiLDIpLHYoKSxfKDMsImRpdiIsMyw0KSxQKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pLF8oNSwiZGl2Iiw1LDYpLFAoImNka09ic2VydmVDb250ZW50IixmdW5jdGlvbigpe3JldHVybiBpLl9vbkNvbnRlbnRDaGFuZ2VzKCl9KSxfKDcsImRpdiIsNyw4KSxWbig5KSx2KCksTygxMCwibWF0LWluay1iYXIiKSx2KCkoKSxfKDExLCJidXR0b24iLDksMTApLFAoIm1vdXNlZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvclByZXNzKCJhZnRlciIsbyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZVBhZ2luYXRvckNsaWNrKCJhZnRlciIpfSkoInRvdWNoZW5kIixmdW5jdGlvbigpe3JldHVybiBpLl9zdG9wSW50ZXJ2YWwoKX0pLE8oMTMsImRpdiIsMiksdigpKSwyJmUmJihldCgibWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZCIsaS5fZGlzYWJsZVNjcm9sbEJlZm9yZSkseSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxCZWZvcmV8fGkuZGlzYWJsZVJpcHBsZSkoImRpc2FibGVkIixpLl9kaXNhYmxlU2Nyb2xsQmVmb3JlfHxudWxsKSxDKDUpLGV0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpLEMoNiksZXQoIm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxBZnRlcikseSgibWF0UmlwcGxlRGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxBZnRlcnx8aS5kaXNhYmxlUmlwcGxlKSgiZGlzYWJsZWQiLGkuX2Rpc2FibGVTY3JvbGxBZnRlcnx8bnVsbCkpfSxkZXBlbmRlbmNpZXM6W1lvLHdoLGJpZV0sc3R5bGVzOlsiLm1hdC10YWItaGVhZGVye2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ZmxleC1zaHJpbms6MH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOjMycHg7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoyOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RvdWNoLWFjdGlvbjpub25lO2JveC1zaXppbmc6Y29udGVudC1ib3g7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY29udHJvbHMtZW5hYmxlZCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntkaXNwbGF5OmZsZXh9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYmVmb3JlLC5tYXQtdGFiLWhlYWRlci1ydGwgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tYWZ0ZXJ7cGFkZGluZy1sZWZ0OjRweH0ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1iZWZvcmUgLm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbiwubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSgtMTM1ZGVnKX0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSwubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1hZnRlcntwYWRkaW5nLXJpZ2h0OjRweH0ubWF0LXRhYi1oZWFkZXItcnRsIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWJlZm9yZSAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9uLC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWFmdGVyIC5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWNoZXZyb257dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1hdC10YWItaGVhZGVyLXBhZ2luYXRpb24tY2hldnJvbntib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweCAycHggMCAwO2hlaWdodDo4cHg7d2lkdGg6OHB4fS5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9uLWRpc2FibGVke2JveC1zaGFkb3c6bm9uZTtjdXJzb3I6ZGVmYXVsdH0ubWF0LXRhYi1saXN0e2ZsZXgtZ3JvdzoxO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbnNmb3JtIDUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7aGVpZ2h0OjJweDt0cmFuc2l0aW9uOjUwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LWluay1iYXIuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIgLm1hdC1pbmstYmFye2JvdHRvbTphdXRvO3RvcDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1pbmstYmFye291dGxpbmU6c29saWQgMnB4O2hlaWdodDowfS5tYXQtdGFiLWxhYmVsc3tkaXNwbGF5OmZsZXh9W21hdC1hbGlnbi10YWJzPWNlbnRlcl0+Lm1hdC10YWItaGVhZGVyIC5tYXQtdGFiLWxhYmVsc3tqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVttYXQtYWxpZ24tdGFicz1lbmRdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHN7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MX0ubWF0LXRhYi1saXN0Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxle3RyYW5zaXRpb246bm9uZSAhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lICFpbXBvcnRhbnR9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9Lm1hdC10YWItbGFiZWw6OmJlZm9yZXttYXJnaW46NXB4fUBtZWRpYShtYXgtd2lkdGg6IDU5OXB4KXsubWF0LXRhYi1sYWJlbHttaW4td2lkdGg6NzJweH19Il0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksWExlPTAsUUxlPWtvKHFvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSwicHJpbWFyeSIpLEtMZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgUUxle2NvbnN0cnVjdG9yKGUsaSxyLG8pe3N1cGVyKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fYW5pbWF0aW9uTW9kZT1vLHRoaXMuX3RhYnM9bmV3IEhsLHRoaXMuX2luZGV4VG9TZWxlY3Q9MCx0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PW51bGwsdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQ9MCx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPVNuLkVNUFRZLHRoaXMuX2R5bmFtaWNIZWlnaHQ9ITEsdGhpcy5fc2VsZWN0ZWRJbmRleD1udWxsLHRoaXMuaGVhZGVyUG9zaXRpb249ImFib3ZlIix0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbj0hMSx0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9ITEsdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IEcsdGhpcy5hbmltYXRpb25Eb25lPW5ldyBHLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2U9bmV3IEcoITApLHRoaXMuX2dyb3VwSWQ9WExlKyssdGhpcy5hbmltYXRpb25EdXJhdGlvbj1yJiZyLmFuaW1hdGlvbkR1cmF0aW9uP3IuYW5pbWF0aW9uRHVyYXRpb246IjUwMG1zIix0aGlzLmRpc2FibGVQYWdpbmF0aW9uPSEoIXJ8fG51bGw9PXIuZGlzYWJsZVBhZ2luYXRpb24pJiZyLmRpc2FibGVQYWdpbmF0aW9uLHRoaXMuZHluYW1pY0hlaWdodD0hKCFyfHxudWxsPT1yLmR5bmFtaWNIZWlnaHQpJiZyLmR5bmFtaWNIZWlnaHQsdGhpcy5jb250ZW50VGFiSW5kZXg9cj8uY29udGVudFRhYkluZGV4Pz9udWxsLHRoaXMucHJlc2VydmVDb250ZW50PSEhcj8ucHJlc2VydmVDb250ZW50fWdldCBkeW5hbWljSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX2R5bmFtaWNIZWlnaHR9c2V0IGR5bmFtaWNIZWlnaHQoZSl7dGhpcy5fZHluYW1pY0hlaWdodD1SdChlKX1nZXQgc2VsZWN0ZWRJbmRleCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4fXNldCBzZWxlY3RlZEluZGV4KGUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9QmkoZSxudWxsKX1nZXQgYW5pbWF0aW9uRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5fYW5pbWF0aW9uRHVyYXRpb259c2V0IGFuaW1hdGlvbkR1cmF0aW9uKGUpe3RoaXMuX2FuaW1hdGlvbkR1cmF0aW9uPS9eXGQrJC8udGVzdChlKyIiKT9lKyJtcyI6ZX1nZXQgY29udGVudFRhYkluZGV4KCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRUYWJJbmRleH1zZXQgY29udGVudFRhYkluZGV4KGUpe3RoaXMuX2NvbnRlbnRUYWJJbmRleD1CaShlLG51bGwpfWdldCBkaXNhYmxlUGFnaW5hdGlvbigpe3JldHVybiB0aGlzLl9kaXNhYmxlUGFnaW5hdGlvbn1zZXQgZGlzYWJsZVBhZ2luYXRpb24oZSl7dGhpcy5fZGlzYWJsZVBhZ2luYXRpb249UnQoZSl9Z2V0IHByZXNlcnZlQ29udGVudCgpe3JldHVybiB0aGlzLl9wcmVzZXJ2ZUNvbnRlbnR9c2V0IHByZXNlcnZlQ29udGVudChlKXt0aGlzLl9wcmVzZXJ2ZUNvbnRlbnQ9UnQoZSl9Z2V0IGJhY2tncm91bmRDb2xvcigpe3JldHVybiB0aGlzLl9iYWNrZ3JvdW5kQ29sb3J9c2V0IGJhY2tncm91bmRDb2xvcihlKXtsZXQgaT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7aS5jbGFzc0xpc3QucmVtb3ZlKGBtYXQtYmFja2dyb3VuZC0ke3RoaXMuYmFja2dyb3VuZENvbG9yfWApLGUmJmkuY2xhc3NMaXN0LmFkZChgbWF0LWJhY2tncm91bmQtJHtlfWApLHRoaXMuX2JhY2tncm91bmRDb2xvcj1lfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2xldCBlPXRoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fY2xhbXBUYWJJbmRleCh0aGlzLl9pbmRleFRvU2VsZWN0KTtpZih0aGlzLl9zZWxlY3RlZEluZGV4IT1lKXtsZXQgaT1udWxsPT10aGlzLl9zZWxlY3RlZEluZGV4O2lmKCFpKXt0aGlzLnNlbGVjdGVkVGFiQ2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQoZSkpO2xldCByPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7ci5zdHlsZS5taW5IZWlnaHQ9ci5jbGllbnRIZWlnaHQrInB4In1Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fdGFicy5mb3JFYWNoKChyLG8pPT5yLmlzQWN0aXZlPW89PT1lKSxpfHwodGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQoZSksdGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQ9IiIpfSl9dGhpcy5fdGFicy5mb3JFYWNoKChpLHIpPT57aS5wb3NpdGlvbj1yLWUsbnVsbCE9dGhpcy5fc2VsZWN0ZWRJbmRleCYmMD09aS5wb3NpdGlvbiYmIWkub3JpZ2luJiYoaS5vcmlnaW49ZS10aGlzLl9zZWxlY3RlZEluZGV4KX0pLHRoaXMuX3NlbGVjdGVkSW5kZXghPT1lJiYodGhpcy5fc2VsZWN0ZWRJbmRleD1lLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5fc3Vic2NyaWJlVG9BbGxUYWJDaGFuZ2VzKCksdGhpcy5fc3Vic2NyaWJlVG9UYWJMYWJlbHMoKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uPXRoaXMuX3RhYnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PntsZXQgZT10aGlzLl9jbGFtcFRhYkluZGV4KHRoaXMuX2luZGV4VG9TZWxlY3QpO2lmKGU9PT10aGlzLl9zZWxlY3RlZEluZGV4KXtsZXQgcixpPXRoaXMuX3RhYnMudG9BcnJheSgpO2ZvcihsZXQgbz0wO288aS5sZW5ndGg7bysrKWlmKGlbb10uaXNBY3RpdmUpe3RoaXMuX2luZGV4VG9TZWxlY3Q9dGhpcy5fc2VsZWN0ZWRJbmRleD1vLHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg9bnVsbCxyPWlbb107YnJlYWt9IXImJmlbZV0mJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PntpW2VdLmlzQWN0aXZlPSEwLHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudChlKSl9KX10aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfV9zdWJzY3JpYmVUb0FsbFRhYkNoYW5nZXMoKXt0aGlzLl9hbGxUYWJzLmNoYW5nZXMucGlwZSh6bih0aGlzLl9hbGxUYWJzKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLl90YWJzLnJlc2V0KGUuZmlsdGVyKGk9PmkuX2Nsb3Nlc3RUYWJHcm91cD09PXRoaXN8fCFpLl9jbG9zZXN0VGFiR3JvdXApKSx0aGlzLl90YWJzLm5vdGlmeU9uQ2hhbmdlcygpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl90YWJzLmRlc3Ryb3koKSx0aGlzLl90YWJzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fdGFiTGFiZWxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1yZWFsaWduSW5rQmFyKCl7dGhpcy5fdGFiSGVhZGVyJiZ0aGlzLl90YWJIZWFkZXIuX2FsaWduSW5rQmFyVG9TZWxlY3RlZFRhYigpfXVwZGF0ZVBhZ2luYXRpb24oKXt0aGlzLl90YWJIZWFkZXImJnRoaXMuX3RhYkhlYWRlci51cGRhdGVQYWdpbmF0aW9uKCl9Zm9jdXNUYWIoZSl7bGV0IGk9dGhpcy5fdGFiSGVhZGVyO2kmJihpLmZvY3VzSW5kZXg9ZSl9X2ZvY3VzQ2hhbmdlZChlKXt0aGlzLl9sYXN0Rm9jdXNlZFRhYkluZGV4PWUsdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KGUpKX1fY3JlYXRlQ2hhbmdlRXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuaW5kZXg9ZSx0aGlzLl90YWJzJiZ0aGlzLl90YWJzLmxlbmd0aCYmKGkudGFiPXRoaXMuX3RhYnMudG9BcnJheSgpW2VdKSxpfV9zdWJzY3JpYmVUb1RhYkxhYmVscygpe3RoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uJiZ0aGlzLl90YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3RhYkxhYmVsU3Vic2NyaXB0aW9uPUp0KC4uLnRoaXMuX3RhYnMubWFwKGU9PmUuX3N0YXRlQ2hhbmdlcykpLnN1YnNjcmliZSgoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9jbGFtcFRhYkluZGV4KGUpe3JldHVybiBNYXRoLm1pbih0aGlzLl90YWJzLmxlbmd0aC0xLE1hdGgubWF4KGV8fDAsMCkpfV9nZXRUYWJMYWJlbElkKGUpe3JldHVybmBtYXQtdGFiLWxhYmVsLSR7dGhpcy5fZ3JvdXBJZH0tJHtlfWB9X2dldFRhYkNvbnRlbnRJZChlKXtyZXR1cm5gbWF0LXRhYi1jb250ZW50LSR7dGhpcy5fZ3JvdXBJZH0tJHtlfWB9X3NldFRhYkJvZHlXcmFwcGVySGVpZ2h0KGUpe2lmKCF0aGlzLl9keW5hbWljSGVpZ2h0fHwhdGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQpcmV0dXJuO2xldCBpPXRoaXMuX3RhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQ7aS5zdHlsZS5oZWlnaHQ9dGhpcy5fdGFiQm9keVdyYXBwZXJIZWlnaHQrInB4Iix0aGlzLl90YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCYmKGkuc3R5bGUuaGVpZ2h0PWUrInB4Iil9X3JlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KCl7bGV0IGU9dGhpcy5fdGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudDt0aGlzLl90YWJCb2R5V3JhcHBlckhlaWdodD1lLmNsaWVudEhlaWdodCxlLnN0eWxlLmhlaWdodD0iIix0aGlzLmFuaW1hdGlvbkRvbmUuZW1pdCgpfV9oYW5kbGVDbGljayhlLGkscil7ZS5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWRJbmRleD1pLmZvY3VzSW5kZXg9cil9X2dldFRhYkluZGV4KGUsaSl7cmV0dXJuIGUuZGlzYWJsZWQ/bnVsbDppPT09KHRoaXMuX2xhc3RGb2N1c2VkVGFiSW5kZXg/P3RoaXMuc2VsZWN0ZWRJbmRleCk/MDotMX1fdGFiRm9jdXNDaGFuZ2VkKGUsaSl7ZSYmIm1vdXNlIiE9PWUmJiJ0b3VjaCIhPT1lJiYodGhpcy5fdGFiSGVhZGVyLmZvY3VzSW5kZXg9aSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oQWllLDgpLE0oUGksOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGlucHV0czp7ZHluYW1pY0hlaWdodDoiZHluYW1pY0hlaWdodCIsc2VsZWN0ZWRJbmRleDoic2VsZWN0ZWRJbmRleCIsaGVhZGVyUG9zaXRpb246ImhlYWRlclBvc2l0aW9uIixhbmltYXRpb25EdXJhdGlvbjoiYW5pbWF0aW9uRHVyYXRpb24iLGNvbnRlbnRUYWJJbmRleDoiY29udGVudFRhYkluZGV4IixkaXNhYmxlUGFnaW5hdGlvbjoiZGlzYWJsZVBhZ2luYXRpb24iLHByZXNlcnZlQ29udGVudDoicHJlc2VydmVDb250ZW50IixiYWNrZ3JvdW5kQ29sb3I6ImJhY2tncm91bmRDb2xvciJ9LG91dHB1dHM6e3NlbGVjdGVkSW5kZXhDaGFuZ2U6InNlbGVjdGVkSW5kZXhDaGFuZ2UiLGZvY3VzQ2hhbmdlOiJmb2N1c0NoYW5nZSIsYW5pbWF0aW9uRG9uZToiYW5pbWF0aW9uRG9uZSIsc2VsZWN0ZWRUYWJDaGFuZ2U6InNlbGVjdGVkVGFiQ2hhbmdlIn0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLFoyPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBLTGV7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoZSxpLHIsbyl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0obm4pLE0oQWllLDgpLE0oUGksOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC10YWItZ3JvdXAiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZSxpLHIpe2lmKDEmZSYmRWkocix4dyw1KSwyJmUpe2xldCBvO05lKG89TGUoKSkmJihpLl9hbGxUYWJzPW8pfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoRExlLDUpLG90KEFMZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fdGFiQm9keVdyYXBwZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuX3RhYkhlYWRlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbMSwibWF0LXRhYi1ncm91cCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgibWF0LXRhYi1ncm91cC1keW5hbWljLWhlaWdodCIsaS5keW5hbWljSGVpZ2h0KSgibWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXIiLCJiZWxvdyI9PT1pLmhlYWRlclBvc2l0aW9uKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpUaWUsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbMywic2VsZWN0ZWRJbmRleCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImluZGV4Rm9jdXNlZCIsInNlbGVjdEZvY3VzZWRJbmRleCJdLFsidGFiSGVhZGVyIiwiIl0sWyJjbGFzcyIsIm1hdC10YWItbGFiZWwgbWF0LWZvY3VzLWluZGljYXRvciIsInJvbGUiLCJ0YWIiLCJtYXRUYWJMYWJlbFdyYXBwZXIiLCIiLCJtYXQtcmlwcGxlIiwiIiwiY2RrTW9uaXRvckVsZW1lbnRGb2N1cyIsIiIsMywiaWQiLCJtYXQtdGFiLWxhYmVsLWFjdGl2ZSIsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1hdC10YWItYm9keS13cmFwcGVyIl0sWyJ0YWJCb2R5V3JhcHBlciIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwzLCJpZCIsIm1hdC10YWItYm9keS1hY3RpdmUiLCJuZ0NsYXNzIiwiY29udGVudCIsInBvc2l0aW9uIiwib3JpZ2luIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJwcmVzZXJ2ZUNvbnRlbnQiLCJfb25DZW50ZXJlZCIsIl9vbkNlbnRlcmluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwidGFiIiwibWF0VGFiTGFiZWxXcmFwcGVyIiwiIiwibWF0LXJpcHBsZSIsIiIsImNka01vbml0b3JFbGVtZW50Rm9jdXMiLCIiLDEsIm1hdC10YWItbGFiZWwiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIiwzLCJpZCIsIm5nQ2xhc3MiLCJkaXNhYmxlZCIsIm1hdFJpcHBsZURpc2FibGVkIiwiY2xpY2siLCJjZGtGb2N1c0NoYW5nZSJdLFsxLCJtYXQtdGFiLWxhYmVsLWNvbnRlbnQiXSxbMywibmdJZiIsIm5nSWZFbHNlIl0sWyJ0YWJUZXh0TGFiZWwiLCIiXSxbMywiY2RrUG9ydGFsT3V0bGV0Il0sWyJyb2xlIiwidGFicGFuZWwiLDMsImlkIiwibmdDbGFzcyIsImNvbnRlbnQiLCJwb3NpdGlvbiIsIm9yaWdpbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwicHJlc2VydmVDb250ZW50IiwiX29uQ2VudGVyZWQiLCJfb25DZW50ZXJpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC10YWItaGVhZGVyIiwwLDEpLFAoImluZGV4Rm9jdXNlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2ZvY3VzQ2hhbmdlZChvKX0pKCJzZWxlY3RGb2N1c2VkSW5kZXgiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkSW5kZXg9b30pLEUoMixPTGUsNSwxNSwiZGl2IiwyKSx2KCksXygzLCJkaXYiLDMsNCksRSg1LGtMZSwxLDExLCJtYXQtdGFiLWJvZHkiLDUpLHYoKSksMiZlJiYoeSgic2VsZWN0ZWRJbmRleCIsaS5zZWxlY3RlZEluZGV4fHwwKSgiZGlzYWJsZVJpcHBsZSIsaS5kaXNhYmxlUmlwcGxlKSgiZGlzYWJsZVBhZ2luYXRpb24iLGkuZGlzYWJsZVBhZ2luYXRpb24pLEMoMikseSgibmdGb3JPZiIsaS5fdGFicyksQygxKSxldCgiX21hdC1hbmltYXRpb24tbm9vcGFibGUiLCJOb29wQW5pbWF0aW9ucyI9PT1pLl9hbmltYXRpb25Nb2RlKSxDKDIpLHkoIm5nRm9yT2YiLGkuX3RhYnMpKX0sZGVwZW5kZW5jaWVzOltGbixkbixCZSxkYSxZbyxudGUsSWllLERpZSxZTGVdLHN0eWxlczpbIi5tYXQtdGFiLWdyb3Vwe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWF4LXdpZHRoOjEwMCV9Lm1hdC10YWItZ3JvdXAubWF0LXRhYi1ncm91cC1pbnZlcnRlZC1oZWFkZXJ7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lm1hdC10YWItbGFiZWx7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6LjY7bWluLXdpZHRoOjE2MHB4O3RleHQtYWxpZ246Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtdGFiLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX0ubWF0LXRhYi1sYWJlbDpmb2N1czpub3QoLm1hdC10YWItZGlzYWJsZWQpe29wYWNpdHk6MX0ubWF0LXRhYi1sYWJlbC5tYXQtdGFiLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0fS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC10YWItbGFiZWwubWF0LXRhYi1kaXNhYmxlZHtvcGFjaXR5Oi41fS5tYXQtdGFiLWxhYmVsIC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRhYi1sYWJlbHtvcGFjaXR5OjF9QG1lZGlhKG1heC13aWR0aDogNTk5cHgpey5tYXQtdGFiLWxhYmVse3BhZGRpbmc6MCAxMnB4fX1AbWVkaWEobWF4LXdpZHRoOiA5NTlweCl7Lm1hdC10YWItbGFiZWx7cGFkZGluZzowIDEycHh9fS5tYXQtdGFiLWdyb3VwW21hdC1zdHJldGNoLXRhYnNdPi5tYXQtdGFiLWhlYWRlciAubWF0LXRhYi1sYWJlbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjF9Lm1hdC10YWItYm9keS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7dHJhbnNpdGlvbjpoZWlnaHQgNTAwbXMgY3ViaWMtYmV6aWVyKDAuMzUsIDAsIDAuMjUsIDEpfS5tYXQtdGFiLWJvZHktd3JhcHBlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXt0cmFuc2l0aW9uOm5vbmUgIWltcG9ydGFudDthbmltYXRpb246bm9uZSAhaW1wb3J0YW50fS5tYXQtdGFiLWJvZHl7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47b3V0bGluZTowO2ZsZXgtYmFzaXM6MTAwJX0ubWF0LXRhYi1ib2R5Lm1hdC10YWItYm9keS1hY3RpdmV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3otaW5kZXg6MTtmbGV4LWdyb3c6MX0ubWF0LXRhYi1ncm91cC5tYXQtdGFiLWdyb3VwLWR5bmFtaWMtaGVpZ2h0IC5tYXQtdGFiLWJvZHkubWF0LXRhYi1ib2R5LWFjdGl2ZXtvdmVyZmxvdy15OmhpZGRlbn0iXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxKMj0ob2MocW8oc28oY2xhc3N7fSkpKSwoKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbG4sZXUsX2wsb2QsRXYsbG5dfSksbn0pKCkpO2Z1bmN0aW9uIFpMZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsInNwYW4iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKCkub25BY3RpdmVQbHVnaW5TZWxlY3Rpb24ocixvLmlkKSl9KSxBKDEpLHYoKX1pZigyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7emUoImRhdGEtcGx1Z2luLWlkIixlLmlkKSxDKDEpLGplKCIgIixlLnRhYl9uYW1lLCIgIil9fWZ1bmN0aW9uIEpMZShuLHQpezEmbiYmKF8oMCwibWF0LXRhYiIsMyksRSgxLFpMZSwyLDIsIm5nLXRlbXBsYXRlIiw0KSx2KCkpLDImbiYmeSgiZGlzYWJsZWQiLCF0LiRpbXBsaWNpdC5lbmFibGVkKX1mdW5jdGlvbiAkTGUobix0KXtpZigxJm4mJihfKDAsIm1hdC1vcHRpb24iLDkpLEEoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3koInZhbHVlIixlLmlkKSx6ZSgiZGF0YS1wbHVnaW4taWQiLGUuaWQpLEMoMSksamUoIiAiLGUudGFiX25hbWUsIiAiKX19ZnVuY3Rpb24gZTNlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LWZvcm0tZmllbGQiLDYpKDEsIm1hdC1sYWJlbCIpLEEoMiwiSW5hY3RpdmUiKSx2KCksXygzLCJtYXQtc2VsZWN0Iiw3KSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQocikpfSksRSg0LCRMZSwyLDMsIm1hdC1vcHRpb24iLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO0MoMykseSgidmFsdWUiLGUuc2VsZWN0ZWRQbHVnaW4pLEMoMSkseSgibmdGb3JPZiIsZS5kaXNhYmxlZFBsdWdpbnMpfX12YXIgUmllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZD1uZXcgR31nZXRBY3RpdmVQbHVnaW5JbmRleCgpe3JldHVybiB0aGlzLmFjdGl2ZVBsdWdpbnMuZmluZEluZGV4KCh7aWQ6ZX0pPT5lPT09dGhpcy5zZWxlY3RlZFBsdWdpbil9b25BY3RpdmVQbHVnaW5TZWxlY3Rpb24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaSl9b25EaXNhYmxlZFBsdWdpblNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5vblBsdWdpblNlbGVjdGlvbkNoYW5nZWQuZW1pdChlLnZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2FjdGl2ZVBsdWdpbnM6ImFjdGl2ZVBsdWdpbnMiLGRpc2FibGVkUGx1Z2luczoiZGlzYWJsZWRQbHVnaW5zIixzZWxlY3RlZFBsdWdpbjoic2VsZWN0ZWRQbHVnaW4ifSxvdXRwdXRzOntvblBsdWdpblNlbGVjdGlvbkNoYW5nZWQ6Im9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJ9LGRlY2xzOjMsdmFyczozLGNvbnN0czpbWyJhbmltYXRpb25EdXJhdGlvbiIsIjEwMG1zIiwxLCJhY3RpdmUtcGx1Z2luLWxpc3QiLDMsInNlbGVjdGVkSW5kZXgiXSxbMywiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIiw0LCJuZ0lmIl0sWzMsImRpc2FibGVkIl0sWyJtYXQtdGFiLWxhYmVsIiwiIl0sWzEsInBsdWdpbi1uYW1lIiwzLCJjbGljayJdLFsiZmxvYXRMYWJlbCIsIm5ldmVyIl0sWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC10YWItZ3JvdXAiLDApLEUoMSxKTGUsMiwxLCJtYXQtdGFiIiwxKSx2KCksRSgyLGUzZSw1LDIsIm1hdC1mb3JtLWZpZWxkIiwyKSksMiZlJiYoeSgic2VsZWN0ZWRJbmRleCIsaS5nZXRBY3RpdmVQbHVnaW5JbmRleCgpKSxDKDEpLHkoIm5nRm9yT2YiLGkuYWN0aXZlUGx1Z2lucyksQygxKSx5KCJuZ0lmIixpLmRpc2FibGVkUGx1Z2lucy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W1oyLEVpZSx4dyxwZCxOdixIaCxPcyxkbixCZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Zm9udC1zaXplOjE0cHg7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVufW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjAgMDttYXJnaW4tdG9wOjVweDt3aWR0aDoxMzBweH1tYXQtbGFiZWxbX25nY29udGVudC0lQ09NUCVdLCBtYXQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSwgbWF0LW9wdGlvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0uYWN0aXZlLXBsdWdpbi1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1zZWxmOnN0cmV0Y2g7ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59LnBsdWdpbi1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCAxMnB4O3dpZHRoOjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdC5tYXQtcHJpbWFyeSAubWF0LXRhYi1saXN0IC5tYXQtaW5rLWJhcntiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxpbmt7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi43fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWwubWF0LXRhYi1sYWJlbC1hY3RpdmUsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGluay5tYXQtdGFiLWxhYmVsLWFjdGl2ZXtvcGFjaXR5OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1jaGV2cm9ue2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3J9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbi1kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWRpc2FibGVke2Rpc3BsYXk6bm9uZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItbGlzdCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCAubWF0LXRhYi1oZWFkZXIsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWxzLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVse2hlaWdodDoxMDAlfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjQ4cHg7cGFkZGluZzowO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IC5tYXQtdGFiLWxhYmVsLWNvbnRlbnR7aGVpZ2h0OjEwMCV9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlciAubWF0LXRhYi1saXN0e3BhZGRpbmc6MCAzNnB4fVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+OmZpcnN0LWNoaWxkLCBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWxhYmVsLWNvbnRhaW5lciwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj46bGFzdC1jaGlsZHtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH1bX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPjpmaXJzdC1jaGlsZCwgW19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1sYWJlbC1jb250YWluZXJ7bGVmdDowfVtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Omxhc3QtY2hpbGQsIFtfbmdob3N0LSVDT01QJV0gICAgIC5hY3RpdmUtcGx1Z2luLWxpc3QgbWF0LXRhYi1oZWFkZXI+Lm1hdC10YWItbGFiZWwtY29udGFpbmVye3JpZ2h0OjB9W19uZ2hvc3QtJUNPTVAlXSAgICAgLmFjdGl2ZS1wbHVnaW4tbGlzdCBtYXQtdGFiLWhlYWRlcj4ubWF0LXRhYi1oZWFkZXItcGFnaW5hdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAuYWN0aXZlLXBsdWdpbi1saXN0IG1hdC10YWItaGVhZGVyPi5tYXQtdGFiLWhlYWRlci1wYWdpbmF0aW9ue2JhY2tncm91bmQtY29sb3I6I2VmNmMwMH0iXX0pLG59KSgpLE9pZT1KKHJ2LG49Pk9iamVjdC5rZXlzKG4pLm1hcCh0PT5PYmplY3QuYXNzaWduKHt9LHtpZDp0fSxuW3RdKSkpLG4zZT1KKE9pZSxuPT5uLmZpbHRlcih0PT4hdC5lbmFibGVkKSksa2llPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlUGx1Z2luJD10aGlzLnN0b3JlLnBpcGUodnQoUnMpKSx0aGlzLnBsdWdpbnMkPXRoaXMuc3RvcmUucGlwZSh2dChPaWUpKSx0aGlzLmRpc2FibGVkUGx1Z2lucyQ9dGhpcy5zdG9yZS5waXBlKHZ0KG4zZSkpfW9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWnUoe3BsdWdpbjplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2luLXNlbGVjdG9yIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsImFjdGl2ZVBsdWdpbnMiLCJkaXNhYmxlZFBsdWdpbnMiLCJzZWxlY3RlZFBsdWdpbiIsIm9uUGx1Z2luU2VsZWN0aW9uQ2hhbmdlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwicGx1Z2luLXNlbGVjdG9yLWNvbXBvbmVudCIsMCksUCgib25QbHVnaW5TZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblNlbGVjdGlvbkNoYW5nZShvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJhY3RpdmVQbHVnaW5zIixVKDEsMyxpLnBsdWdpbnMkKSkoImRpc2FibGVkUGx1Z2lucyIsVSgyLDUsaS5kaXNhYmxlZFBsdWdpbnMkKSkoInNlbGVjdGVkUGx1Z2luIixVKDMsNyxpLmFjdGl2ZVBsdWdpbiQpKX0sZGVwZW5kZW5jaWVzOltSaWUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHIzZT1KKHJ2LFJzLChuLHQpPT4hKCF0fHwhblt0XSkmJm5bdF0uZGlzYWJsZV9yZWxvYWQpLEZpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnJlbG9hZERpc2FibGVkJD10aGlzLnN0b3JlLnNlbGVjdChyM2UpLHRoaXMuaXNSZWxvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KEwkKS5waXBlKGZyKHRoaXMucmVsb2FkRGlzYWJsZWQkKSxMKChbaSxyXSk9PiFyJiZpPT09T2UuTE9BRElORykpLHRoaXMubGFzdExvYWRlZFRpbWVJbk1zJD10aGlzLnN0b3JlLnNlbGVjdChpdil9dHJpZ2dlclJlbG9hZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goRmEoKSl9Z2V0UmVsb2FkVGl0bGUoZSl7cmV0dXJuIGU/YExhc3QgVXBkYXRlZDogJHtlfWA6IkxvYWRpbmcuLi4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1yZWxvYWQiXV0sZGVjbHM6Nix2YXJzOjEzLGNvbnN0czpbWyJtYXQtaWNvbi1idXR0b24iLCIiLDEsInJlbG9hZC1idXR0b24iLDMsInRpdGxlIiwiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsInJlZnJlc2hfMjRweCIsMSwicmVmcmVzaC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRyaWdnZXJSZWxvYWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImRhdGUiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLE8oNSwibWF0LWljb24iLDEpLHYoKSksMiZlJiYoZXQoImxvYWRpbmciLFUoMSw0LGkuaXNSZWxvYWRpbmckKSkseSgidGl0bGUiLGkuZ2V0UmVsb2FkVGl0bGUoSmYoMiw2LFUoMyw5LGkubGFzdExvYWRlZFRpbWVJbk1zJCksIm1lZGl1bSIpKSkoImRpc2FibGVkIixVKDQsMTEsaS5yZWxvYWREaXNhYmxlZCQpKSl9LGRlcGVuZGVuY2llczpbX24sR3QsR2UsVV9dLHN0eWxlczpbIi5yZWxvYWQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnJlZnJlc2gtaWNvbltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnJlbG9hZC1idXR0b24ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBhbmltYXRpb246IHJvdGF0ZSAycyBsaW5lYXIgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgcm90YXRlIHtcbiAgICAgICAgMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICAgICAgICB9XG4gICAgICAgIDUwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgICAgICB9XG4gICAgICB9Il19KSxufSkoKSxOaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYXBwLWhlYWRlciJdXSxkZWNsczoxMCx2YXJzOjAsY29uc3RzOltbMSwiYnJhbmQiXSxbMSwicGx1Z2lucyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCIsInJlbCIsIm5vb3BlbmVyIG5vcmVmZXJyZXIiLCJ0YXJnZXQiLCJfYmxhbmsiLCJhcmlhLWxhYmVsIiwiSGVscCIsMSwicmVhZG1lIl0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC10b29sYmFyIikoMSwic3BhbiIsMCksQSgyLCJUZW5zb3JCb2FyZCIpLHYoKSxPKDMsInBsdWdpbi1zZWxlY3RvciIsMSkoNCwidGJkZXYtdXBsb2FkLWJ1dHRvbiIpKDUsImFwcC1oZWFkZXItZGFyay1tb2RlLXRvZ2dsZSIpKDYsImFwcC1oZWFkZXItcmVsb2FkIikoNywic2V0dGluZ3MtYnV0dG9uIiksXyg4LCJhIiwyKSxPKDksIm1hdC1pY29uIiwzKSx2KCkoKSl9LGRlcGVuZGVuY2llczpbSXYsR3QsWm5lLGxpZSxoaWUseWllLGtpZSxGaWVdLHN0eWxlczpbIm1hdC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjY0cHg7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9dGJkZXYtdXBsb2FkLWJ1dHRvbi5zaG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgOHB4IDAgMTZweH0uYnJhbmRbX25nY29udGVudC0lQ09NUCVdLCAucmVhZG1lW19uZ2NvbnRlbnQtJUNPTVAlXSwgYXBwLWhlYWRlci1yZWxvYWRbX25nY29udGVudC0lQ09NUCVdLCBzZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2ZsZXg6MCAwIGF1dG99LmJyYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtsZXR0ZXItc3BhY2luZzotMC4wMjVlbTttYXJnaW4tbGVmdDoxMHB4O3RleHQtcmVuZGVyaW5nOm9wdGltaXplTGVnaWJpbGl0eX0ucGx1Z2luc1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZvbnQtc2l6ZToxNHB4O2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbn0iXX0pLG59KSgpLGwzZV9zZXREb2N1bWVudFRpdGxlPWZ1bmN0aW9uKG4pe2RvY3VtZW50LnRpdGxlPW59LExpZT0oKCk9PntjbGFzcyBue25nT25DaGFuZ2VzKGUpe2UudGl0bGUmJmwzZV9zZXREb2N1bWVudFRpdGxlKGUudGl0bGUuY3VycmVudFZhbHVlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGFnZS10aXRsZS1jb21wb25lbnQiXV0saW5wdXRzOnt0aXRsZToidGl0bGUifSxmZWF0dXJlczpbRnRdLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxCaWU9IlRlbnNvckJvYXJkIixWaWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmN1c3RvbUJyYW5kTmFtZT1pLHRoaXMuZ2V0RXhwZXJpbWVudElkJD10aGlzLnN0b3JlLnNlbGVjdChXbykucGlwZShMKHI9PnI/LlswXSkpLHRoaXMuZXhwZXJpbWVudE5hbWUkPXRoaXMuZ2V0RXhwZXJpbWVudElkJC5waXBlKFllKEJvb2xlYW4pLHhuKHI9PnRoaXMuc3RvcmUuc2VsZWN0KHZJLHtleHBlcmltZW50SWQ6cn0pKSxMKHI9PnI/ci5uYW1lOm51bGwpKSx0aGlzLnRpdGxlJD10aGlzLnN0b3JlLnNlbGVjdChvdikucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdChxdSksdGhpcy5leHBlcmltZW50TmFtZSQpLEwoKFtyLG8sc10pPT57bGV0IGE9dGhpcy5jdXN0b21CcmFuZE5hbWV8fEJpZTtyZXR1cm4gci53aW5kb3dfdGl0bGU/ci53aW5kb3dfdGl0bGU6bz09PWhpLkVYUEVSSU1FTlQmJnM/YCR7c30gLSAke2F9YDphfSksem4odGhpcy5jdXN0b21CcmFuZE5hbWV8fEJpZSkseWkoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0oQSQsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInBhZ2UtdGl0bGUiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInBhZ2UtdGl0bGUtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIikpLDImZSYmeSgidGl0bGUiLFUoMSwxLGkudGl0bGUkKSl9LGRlcGVuZGVuY2llczpbTGllLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEhpZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMuZ2V0UGFnZVNpemUkPXRoaXMuc3RvcmUucGlwZSh2dChLbSkpLHRoaXMucGFnaW5hdGVkVmlld1N0b3JlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRmLXBhZ2luYXRlZC12aWV3LXN0b3JlIikudGZfcGFnaW5hdGVkX3ZpZXd9bmdPbkluaXQoKXt0aGlzLmdldFBhZ2VTaXplJC5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkseWkoKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLnBhZ2luYXRlZFZpZXdTdG9yZS5zZXRMaW1pdChlKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNldHRpbmdzLXBvbHltZXItaW50ZXJvcCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe30sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVWllPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy52Y1JlZj1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKE9pKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItd2ViYXBwIl1dLGRlY2xzOjksdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJhcHAtaGVhZGVyIiksXygxLCJtYWluIiksTygyLCJyb3V0ZXItb3V0bGV0IiksdigpLE8oMywiYWxlcnQtc25hY2tiYXIiKSg0LCJoYXNoLXN0b3JhZ2UiKSg1LCJwYWdlLXRpdGxlIikoNiwic2V0dGluZ3MtcG9seW1lci1pbnRlcm9wIikoNywiZGFyay1tb2RlLXN1cHBvcnRlciIpKDgsImZlYXR1cmUtZmxhZy1tb2RhbC10cmlnZ2VyIikpfSxkZXBlbmRlbmNpZXM6W0huZSx6bmUsSXRlLGpuZSxXbmUsTmllLFZpZSxIaWVdLHN0eWxlczpbImh0bWxbX25nY29udGVudC0lQ09NUCVdLCBib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtoZWlnaHQ6MTAwJTttYXJnaW46MDtwYWRkaW5nOjB9W19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNWY1ZjU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX1hcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjAgMXB4IDNweCAzcHggcmdiYSgwLDAsMCwuMjUpO2ZsZXg6MCAwO3otaW5kZXg6MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBhcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDFweCAzcHggM3B4IHJnYmEoMjU1LDI1NSwyNTUsLjEpfW1haW5bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG99Il19KSxufSkoKSx6aWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFFfLFhfLHFjXX0pLG59KSgpLGppZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksR2llPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3twcm92aWRlOmZoLHVzZUNsYXNzOnIkfV19KSxufSkoKSxXaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLEdpZV19KSxufSkoKSxxaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLFlpZT17aWQ6VEEsbmFtZToiIixzdGFydF90aW1lOjB9LGgzZT12cih7ZXhwZXJpbWVudE1hcDp7W1lpZS5pZF06WWllfX0pO2Z1bmN0aW9uIFhpZShuLHQpe3JldHVybiBGbSh7ZGF0YTpoM2V9KShuLHQpfXZhciBRaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoX0ksWGllKV19KSxufSkoKSxLaWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFBuLGxjXX0pLG59KSgpLFppZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsS2llXX0pLG59KSgpLEppZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsejIsUG4sTHMsT2gscG4sSGFdfSksbn0pKCk7ZnVuY3Rpb24gZjNlKCl7cmV0dXJuIEooWU0sbj0+KHthdXRvUmVsb2FkOm59KSl9ZnVuY3Rpb24gbTNlKCl7cmV0dXJuIEooWE0sbj0+KHthdXRvUmVsb2FkUGVyaW9kSW5NczpufSkpfWZ1bmN0aW9uIGczZSgpe3JldHVybiBKKEttLG49Pih7cGFnZVNpemU6bn0pKX12YXIgJDI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3dyLmZvckZlYXR1cmUoWkksJG5lKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKGYzZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhtM2UpLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoZzNlKSxKaWVdfSksbn0pKCksJGllPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W3twcm92aWRlOiJ3aW5kb3ciLHVzZVZhbHVlOndpbmRvd31dLGltcG9ydHM6W3VpZSxNZSxQbixPaCxwbl19KSxufSkoKSxlcmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W1BuLHBuLEoyLEpuZSxsYyx6aCxNZSxlYywkMiwkaWVdfSksbn0pKCksdHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXtsZXQgcj1lLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCgiLi9pY29uX2J1bmRsZS5zdmciKTtpLmFkZFN2Z0ljb25TZXQocil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooVG0pLGooenYpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbcG5dfSksbn0pKCksdFU9bmV3IHBlKCJbcGx1Z2luc10gUGx1Z2luIHJlZ2lzdHJ5IGNvbmZpZyIpLG5yZT1uZXcgTWFwLEJzPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7aWYoIWUpcmV0dXJuO2xldCBpPW5ldyBTZXQoZS5tYXAocj0+ci5wbHVnaW5OYW1lKSk7Y29uc29sZS5hc3NlcnQoaS5zaXplPT09ZS5sZW5ndGgsIkNhbm5vdCByZWdpc3RlciB0aGUgc2FtZSBwbHVnaW4gbXVsdGlwbGUgdGltZXMuIik7Zm9yKGxldCByIG9mIGUpe2xldHtwbHVnaW5OYW1lOm8sY29tcG9uZW50Q2xhc3M6c309cjtucmUuc2V0KG8scyl9fXN0YXRpYyBmb3JQbHVnaW4oZSxpKXtyZXR1cm57bmdNb2R1bGU6bixwcm92aWRlcnM6W3twcm92aWRlOnRVLG11bHRpOiEwLHVzZVZhbHVlOntwbHVnaW5OYW1lOmUsY29tcG9uZW50Q2xhc3M6aX19XX19Z2V0Q29tcG9uZW50KGUpe3JldHVybiBucmUuZ2V0KGUpfHxudWxsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKHRVLDgpKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksZVA9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmh0dHA9ZSx0aGlzLmh0dHBQYXRoUHJlZml4PSJkYXRhL3BsdWdpbi9kZWJ1Z2dlci12MiJ9ZmV0Y2hSdW5zKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3J1bnMiKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMoZSxpLHIpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9leGVjdXRpb24vZGlnZXN0cyIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hFeGVjdXRpb25EYXRhKGUsaSxyKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvZXhlY3V0aW9uL2RhdGEiLHtwYXJhbXM6e3J1bjplLGJlZ2luOlN0cmluZyhpKSxlbmQ6U3RyaW5nKHIpfX0pfWZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKGUsaSxyLG8pe2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IEVycm9yKCJ0cmFjZV9pZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIGZldGNoR3JhcGhFeGVjdXRpb25EaWdlc3RzKCkgeWV0Iik7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBoX2V4ZWN1dGlvbi9kaWdlc3RzIix7cGFyYW1zOntydW46ZSxiZWdpbjpTdHJpbmcoaSksZW5kOlN0cmluZyhyKX19KX1mZXRjaEdyYXBoRXhlY3V0aW9uRGF0YShlLGkscixvKXtpZih2b2lkIDAhPT1vKXRocm93IG5ldyBFcnJvcigidHJhY2VfaWQgaXMgbm90IGltcGxlbWVudGVkIGZvciBmZXRjaEdyYXBoRXhlY3V0aW9uRGF0YSgpIHlldCIpO3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9ncmFwaF9leGVjdXRpb24vZGF0YSIse3BhcmFtczp7cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9fSl9ZmV0Y2hHcmFwaE9wSW5mbyhlLGkscil7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2dyYXBocy9vcF9pbmZvIix7cGFyYW1zOntydW46ZSxncmFwaF9pZDppLG9wX25hbWU6cn19KX1mZXRjaFNvdXJjZUZpbGVMaXN0KGUpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zb3VyY2VfZmlsZXMvbGlzdCIse3BhcmFtczp7cnVuOmV9fSl9ZmV0Y2hTb3VyY2VGaWxlKGUsaSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL3NvdXJjZV9maWxlcy9maWxlIix7cGFyYW1zOntydW46ZSxpbmRleDpTdHJpbmcoaSl9fSl9ZmV0Y2hTdGFja0ZyYW1lcyhlLGkpe3JldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuaHR0cFBhdGhQcmVmaXgrIi9zdGFja19mcmFtZXMvc3RhY2tfZnJhbWVzIix7cGFyYW1zOntydW46ZSxzdGFja19mcmFtZV9pZHM6aS5qb2luKCIsIil9fSkucGlwZShMKHI9Pih7c3RhY2tfZnJhbWVzOnIuc3RhY2tfZnJhbWVzLm1hcChvPT5mdW5jdGlvbihuKXtyZXR1cm57aG9zdF9uYW1lOm5bMF0sZmlsZV9wYXRoOm5bMV0sbGluZW5vOm5bMl0sZnVuY3Rpb25fbmFtZTpuWzNdfX0obykpfSkpKX1mZXRjaEFsZXJ0cyhlLGkscixvKXtsZXQgcz17cnVuOmUsYmVnaW46U3RyaW5nKGkpLGVuZDpTdHJpbmcocil9O3JldHVybiB2b2lkIDAhPT1vJiYocy5hbGVydF90eXBlPW8pLHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCsiL2FsZXJ0cyIse3BhcmFtczpzfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooa2EpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxpcmU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbZVBdLGltcG9ydHM6W0t1XX0pLG59KSgpLHRQPWJlKCJbRGVidWdnZXJdIERlYnVnZ2VyIExvYWRlZCIpLG5QPWJlKCJbRGVidWdnZXJdIERlYnVnZ2VyIFVubG9hZGVkIiksTXc9YmUoIltEZWJ1Z2dlcl0gQSBOZXcgRGVidWdnZXIgRGF0YSBQb2xsaW5nIEV2ZW50IEJlZ2lucyIpLGlQPWJlKCJbRGVidWdnZXJdIERlYnVnZ2VyIFJ1bnMgUmVxdWVzdGVkIiksclA9YmUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxycmU9YmUoIltEZWJ1Z2dlcl0gRGVidWdnZXIgUnVucyBSZXF1ZXN0IEZhaWxlZCIpLHd3PWJlKCJbRGVidWdnZXJdIE51bWJlciBhbmQgQnJlYWtkb3duIG9mIEFsZXJ0cyBSZXF1ZXN0ZWQiKSxvUD1iZSgiW0RlYnVnZ2VyXSBOdW1iZXIgYW5kIEJyZWFrZG93biBvZiBBbGVydHMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1A9YmUoIltEZWJ1Z2dlcl0gQWxlcnRzIERhdGEgb2YgYW4gQWxlcnRUeXBlIElzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEd2PWJlKCJbRGVidWdnZXJdIEFsZXJ0IFR5cGUgRm9jdXMgVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGFQPWJlKCJbRGVidWdnZXJdIE51bWJlciBvZiBUb3AtTGV2ZWwgRXhlY3V0aW9ucyBSZXF1ZXN0ZWQiKSxsUD1iZSgiW0RlYnVnZ2VyXSBOdW1iZXIgb2YgVG9wLUxldmVsIEV4ZWN1dGlvbnMgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksY1A9YmUoIltEZWJ1Z2dlcl0gRXhlY3V0aW9uRGlnZXN0cyBSZXF1ZXN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx1UD1iZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb25EaWdlc3RzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFd2PWJlKCJbRGVidWdnZXJdIFNjcm9sbCBMZWZ0d2FyZCBvbiB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIikscXY9YmUoIltEZWJ1Z2dlcl0gU2Nyb2xsIFJpZ2h0d2FyZCBvbiB0aGUgRXhlY3V0aW9uIFRpbWVsaW5lIiksWXY9YmUoIltEZWJ1Z2dlcl0gU2Nyb2xsIHRoZSBFeGVjdXRpb24gVGltZWxpbmUgdG8gR2l2ZW4gSW5kZXgiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxYdj1iZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb24gRGF0YSBPYmplY3RzIEJlaW5nIEZvY3VzZWQgT24iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxkUD1iZSgiW0RlYnVnZ2VyXSBFeGVjdXRpb24gRGF0YSBPYmplY3RzIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHBQPWJlKCJbRGVidWdnZXJdIE51bWJlciBvZiBJbnRyYS1HcmFwaCBFeGVjdXRpb25zIFJlcXVlc3RlZCIpLGhQPWJlKCJbRGVidWdnZXJdIE51bWJlciBvZiBJbnRyYS1HcmFwaCBFeGVjdXRpb25zIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGZQPWJlKCJbRGVidWdnZXJdIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBEYXRhIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG1QPWJlKCJbRGVidWdnZXJdIEludHJhLUdyYXBoIEV4ZWN1dGlvbiBEYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFF2PWJlKCJbRGVidWdnZXJdIFNjcm9sbCBJbnRyYS1HcmFwaCBFeGVjdXRpb24gTGlzdCB0byBHaXZlbiBJbmRleCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEt2PWJlKCJbRGVidWdnZXJdIEdyYXBoIEV4ZWN1dGlvbiBpcyBGb2N1c2VkIE9uIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWnY9YmUoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSXMgRm9jdXNlZCBPbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGdQPWJlKCJbRGVidWdnZXJdIEdyYXBoIE9wIEluZm8gUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksX1A9YmUoIltEZWJ1Z2dlcl0gR3JhcGggT3AgSW5mbyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx2UD1iZSgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaXN0IFJlcXVlc3RlZC4iKSx5UD1iZSgiW0RlYnVnZ2VyXSBTb3VyY2UgRmlsZSBMaXN0IExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEp2PWJlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExpbmUgSXMgRm9jdXNlZCBvbiIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLGJQPWJlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIFJlcXVlc3RlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHhQPWJlKCJbRGVidWdnZXJdIFNvdXJjZSBGaWxlIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFN3PWJlKCJbRGVidWdnZXJdIEEgU2V0IG9mIFN0YWNrIEZyYW1lcyBIYXZlIEJlZW4gTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksRXc9ImRlYnVnZ2VyIixhcz0oKCk9PihmdW5jdGlvbihuKXtuW24uVU5TUEVDSUZJRUQ9MF09IlVOU1BFQ0lGSUVEIixuW24uTk9fVEVOU09SPTFdPSJOT19URU5TT1IiLG5bbi5DVVJUX0hFQUxUSD0yXT0iQ1VSVF9IRUFMVEgiLG5bbi5DT05DSVNFX0hFQUxUSD0zXT0iQ09OQ0lTRV9IRUFMVEgiLG5bbi5GVUxMX0hFQUxUSD00XT0iRlVMTF9IRUFMVEgiLG5bbi5TSEFQRT01XT0iU0hBUEUiLG5bbi5GVUxMX05VTUVSSUNTPTZdPSJGVUxMX05VTUVSSUNTIixuW24uRlVMTF9URU5TT1I9N109IkZVTExfVEVOU09SIixuW24uUkVEVUNFX0lORl9OQU5fVEhSRUVfU0xPVFM9OF09IlJFRFVDRV9JTkZfTkFOX1RIUkVFX1NMT1RTIn0oYXN8fChhcz17fSkpLGFzKSkoKSxtZD0oKCk9PihmdW5jdGlvbihuKXtuLkZVTkNUSU9OX1JFQ09NUElMRV9BTEVSVD0iRnVuY3Rpb25SZWNvbXBpbGVzQWxlcnQiLG4uSU5GX05BTl9BTEVSVD0iSW5mTmFuQWxlcnQiLG4uVEVOU09SX1NIQVBFX0FMRVJUPSJUZW5zb3JTaGFwZUFsZXJ0In0obWR8fChtZD17fSkpLG1kKSkoKSx4cz0oKCk9PihmdW5jdGlvbihuKXtuW24uRVhFQ1VUSU9OPTBdPSJFWEVDVVRJT04iLG5bbi5HUkFQSF9PUF9DUkVBVElPTj0xXT0iR1JBUEhfT1BfQ1JFQVRJT04ifSh4c3x8KHhzPXt9KSkseHMpKSgpO2Z1bmN0aW9uICR2KG4pe2lmKG51bGw9PT1uLmNvZGVMb2NhdGlvbkZvY3VzVHlwZSlyZXR1cm4gbnVsbDtsZXQgdD1bXTtpZihuLmNvZGVMb2NhdGlvbkZvY3VzVHlwZT09PXhzLkVYRUNVVElPTil7bGV0e2ZvY3VzSW5kZXg6aSxleGVjdXRpb25EYXRhOnJ9PW4uZXhlY3V0aW9ucztpZihudWxsPT09aXx8dm9pZCAwPT09cltpXSlyZXR1cm4gbnVsbDt0PXJbaV0uc3RhY2tfZnJhbWVfaWRzfWVsc2V7aWYobnVsbD09PW4uZ3JhcGhzLmZvY3VzZWRPcClyZXR1cm4gbnVsbDtsZXR7Z3JhcGhJZDppLG9wTmFtZTpyfT1uLmdyYXBocy5mb2N1c2VkT3A7aWYodm9pZCAwPT09bi5ncmFwaHMub3BzW2ldfHwhbi5ncmFwaHMub3BzW2ldLmhhcyhyKSlyZXR1cm4gbnVsbDt0PW4uZ3JhcGhzLm9wc1tpXS5nZXQocikuc3RhY2tfZnJhbWVfaWRzfWxldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtpZihudWxsPT1uLnN0YWNrRnJhbWVzW2ldKXJldHVybiBudWxsO2UucHVzaChuLnN0YWNrRnJhbWVzW2ldKX1yZXR1cm4gZX1mdW5jdGlvbiBUdyhuLHQpe3JldHVybiBuLmZpbmRJbmRleChlPT5lLmhvc3RfbmFtZT09PXQuaG9zdF9uYW1lJiZlLmZpbGVfcGF0aD09PXQuZmlsZV9wYXRoKX1mdW5jdGlvbiBuVShuLHQsZSl7aWYodD49ZSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJlZ2luIHRvIGJlIGxlc3MgdGhhbiBlbmQsIGJ1dCBnb3QgYmVnaW49JHt0fSwgZW5kPSR7ZX1gKTtyZXR1cm4gbi5maW5kSW5kZXgoaT0+aS5iZWdpbj09PXQmJmkuZW5kPT09ZSl9ZnVuY3Rpb24gQ1Aobil7bGV0IHQ9bi5zb3VyY2VDb2RlLmZvY3VzTGluZVNwZWM7aWYoIW4uc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUpcmV0dXJuIHQ7bGV0IGU9JHYobik7aWYobnVsbD09PWUpcmV0dXJuIHQ7bGV0IGk9ZnVuY3Rpb24obix0KXtpZihudWxsPT09dClyZXR1cm4gbnVsbDtmb3IobGV0IGU9bi5sZW5ndGgtMTtlPj0wOy0tZSl7bGV0IGk9bltlXSx7aG9zdF9uYW1lOnIsZmlsZV9wYXRoOm99PWk7aWYocj09PXQuaG9zdF9uYW1lJiZvPT09dC5maWxlX3BhdGgpcmV0dXJuIGl9cmV0dXJuIG51bGx9KGUsdCk7cmV0dXJuIG51bGw9PT1pP3Q6aX12YXIgRDNlPXZyKHtydW5zOnt9LHJ1bnNMb2FkZWQ6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGFjdGl2ZVJ1bklkOm51bGwsbGFzdERhdGFQb2xsT25zZXRUaW1lTXM6LTEsbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6MSxhbGVydHM6e2FsZXJ0c0xvYWRlZDp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sbnVtQWxlcnRzOjAsYWxlcnRzQnJlYWtkb3duOnt9LGFsZXJ0czp7fSxleGVjdXRpb25JbmRpY2VzOnt9LGdyYXBoRXhlY3V0aW9uSW5kaWNlczp7fSxmb2N1c1R5cGU6bnVsbH0sZXhlY3V0aW9uczp7bnVtRXhlY3V0aW9uc0xvYWRlZDp7c3RhdGU6T2UuTk9UX0xPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6bnVsbH0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7bG9hZGluZ1JhbmdlczpbXSxudW1FeGVjdXRpb25zOjAscGFnZUxvYWRlZFNpemVzOnt9fSxkaXNwbGF5Q291bnQ6NTAscGFnZVNpemU6MTAwLHNjcm9sbEJlZ2luSW5kZXg6MCxmb2N1c0luZGV4Om51bGwsZXhlY3V0aW9uRGlnZXN0czp7fSxleGVjdXRpb25EYXRhOnt9fSxncmFwaEV4ZWN1dGlvbnM6e251bUV4ZWN1dGlvbnNMb2FkZWQ6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6e2xvYWRpbmdSYW5nZXM6W10sbnVtRXhlY3V0aW9uczowLHBhZ2VMb2FkZWRTaXplczp7fX0sZGlzcGxheUNvdW50OjEwMCxwYWdlU2l6ZToyMDAsc2Nyb2xsQmVnaW5JbmRleDowLGZvY3VzSW5kZXg6bnVsbCxncmFwaEV4ZWN1dGlvbkRpZ2VzdHM6e30sZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOltdLGdyYXBoRXhlY3V0aW9uRGF0YVBhZ2VMb2FkZWRTaXplczp7fSxncmFwaEV4ZWN1dGlvbkRhdGE6e319LGdyYXBoczp7b3BzOnt9LGxvYWRpbmdPcHM6e30sZm9jdXNlZE9wOm51bGx9LHN0YWNrRnJhbWVzOnt9LGNvZGVMb2NhdGlvbkZvY3VzVHlwZTpudWxsLHN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlOiExLHNvdXJjZUNvZGU6e3NvdXJjZUZpbGVMaXN0TG9hZGVkOntzdGF0ZTpPZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxzb3VyY2VGaWxlTGlzdDpbXSxmaWxlQ29udGVudHM6W10sZm9jdXNMaW5lU3BlYzpudWxsfX0sU2UoaVAsbj0+KHsuLi5uLHJ1bnNMb2FkZWQ6ey4uLm4ucnVuc0xvYWRlZCxzdGF0ZTpPZS5MT0FESU5HfX0pKSxTZShycmUsbj0+KHsuLi5uLHJ1bnNMb2FkZWQ6ey4uLm4ucnVuc0xvYWRlZCxzdGF0ZTpPZS5GQUlMRUR9fSkpLFNlKHJQLChuLHtydW5zOnR9KT0+e2xldCBlPU9iamVjdC5rZXlzKHQpLGk9ZS5sZW5ndGg+MCYmbnVsbD09PW4uYWN0aXZlUnVuSWQ7cmV0dXJuey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6aT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMscnVuczp0LHJ1bnNMb2FkZWQ6e3N0YXRlOk9lLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sYWN0aXZlUnVuSWQ6ZS5sZW5ndGg+MD9lWzBdOm51bGx9fSksU2UoTXcsbj0+KHsuLi5uLGxhc3REYXRhUG9sbE9uc2V0VGltZU1zOkRhdGUubm93KCl9KSksU2Uod3csbj0+bnVsbD09PW4uYWN0aXZlUnVuSWQ/bjp7Li4ubixhbGVydHM6ey4uLm4uYWxlcnRzLGFsZXJ0c0xvYWRlZDp7Li4ubi5hbGVydHMuYWxlcnRzTG9hZGVkLHN0YXRlOk9lLkxPQURJTkd9fX0pLFNlKG9QLChuLHtudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZX0pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IHI9dD5uLmFsZXJ0cy5udW1BbGVydHM7cmV0dXJuey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6cj9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsYWxlcnRzOnsuLi5uLmFsZXJ0cyxhbGVydHNMb2FkZWQ6ey4uLm4uYWxlcnRzLmFsZXJ0c0xvYWRlZCxzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LG51bUFsZXJ0czp0LGFsZXJ0c0JyZWFrZG93bjplfX19KSxTZShzUCwobix7bnVtQWxlcnRzOnQsYWxlcnRzQnJlYWtkb3duOmUsYWxlcnRUeXBlOmksYmVnaW46cixhbGVydHM6b30pPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGE9e30sbD1uLmFsZXJ0cy5leGVjdXRpb25JbmRpY2VzW2ldP24uYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV0uc2xpY2UoKTpbXSxjPW4uYWxlcnRzLmdyYXBoRXhlY3V0aW9uSW5kaWNlc1tpXT9uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXNbaV0uc2xpY2UoKTpbXTtmb3IobGV0IHA9MDtwPG8ubGVuZ3RoOysrcCl7bGV0IGg9citwLGY9b1twXTtpZihhW2hdPWYsZi5hbGVydF90eXBlPT09bWQuSU5GX05BTl9BTEVSVCl7bGV0IG09ZjtsW2hdPW0uZXhlY3V0aW9uX2luZGV4LG51bGwhPT1tLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCYmKGNbaF09bS5ncmFwaF9leGVjdXRpb25fdHJhY2VfaW5kZXgpfX12b2lkIDAhPT1uLmFsZXJ0cy5hbGVydHNbaV0mJk9iamVjdC5hc3NpZ24oYSxuLmFsZXJ0cy5hbGVydHNbaV0pO2xldCB1PW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGQ9bi5ncmFwaEV4ZWN1dGlvbnMuZm9jdXNJbmRleDtpZihpPT09bWQuSU5GX05BTl9BTEVSVCYmMD09PXIpe2xldCBwPW9bMF07dT1NYXRoLm1heCgwLHAuZXhlY3V0aW9uX2luZGV4LU1hdGguZmxvb3Iobi5leGVjdXRpb25zLmRpc3BsYXlDb3VudC8yKSksbnVsbCE9PXAuZ3JhcGhfZXhlY3V0aW9uX3RyYWNlX2luZGV4JiYoZD1wLmdyYXBoX2V4ZWN1dGlvbl90cmFjZV9pbmRleCl9cmV0dXJuey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dX0sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxmb2N1c0luZGV4OmR9LGFsZXJ0czp7Li4ubi5hbGVydHMsYWxlcnRzTG9hZGVkOnsuLi5uLmFsZXJ0cy5hbGVydHNMb2FkZWQsc3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxudW1BbGVydHM6dCxhbGVydHNCcmVha2Rvd246ZSxhbGVydHM6ey4uLm4uYWxlcnRzLmFsZXJ0cyxbaV06YX0sZXhlY3V0aW9uSW5kaWNlczp7Li4ubi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlcyxbaV06bH0sZ3JhcGhFeGVjdXRpb25JbmRpY2VzOnsuLi5uLmFsZXJ0cy5ncmFwaEV4ZWN1dGlvbkluZGljZXMsW2ldOmN9fX19KSxTZShHdiwobix7YWxlcnRUeXBlOnR9KT0+e2xldCBlPXsuLi5uLGFsZXJ0czp7Li4ubi5hbGVydHMsZm9jdXNUeXBlOm4uYWxlcnRzLmZvY3VzVHlwZT09PXQ/bnVsbDp0fX0saT1lLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbCE9PWkpe2xldCByPWUuYWxlcnRzLmV4ZWN1dGlvbkluZGljZXNbaV18fFtdO3ZvaWQgMCE9PXJbMF0mJihlLmV4ZWN1dGlvbnM9ey4uLmUuZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4Ok1hdGgubWF4KDAsTnVtYmVyKHJbMF0pLU1hdGguZmxvb3IoZS5leGVjdXRpb25zLmRpc3BsYXlDb3VudC8yKSl9KX1yZXR1cm4gZX0pLFNlKGFQLG49Pm51bGw9PT1uLmFjdGl2ZVJ1bklkP246ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLG51bUV4ZWN1dGlvbnNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOk9lLkxPQURJTkd9fX0pLFNlKGxQLChuLHtudW1FeGVjdXRpb25zOnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBpPXQ+bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyxyPXsuLi5uLGxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zOmk/RGF0ZS5ub3coKTpuLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9LGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dH19fTtyZXR1cm4gdD4wJiZudWxsPT09bi5leGVjdXRpb25zLmZvY3VzSW5kZXgmJihyLmV4ZWN1dGlvbnMuZm9jdXNJbmRleD0wKSxyfSksU2UoY1AsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT1bLi4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubG9hZGluZ1Jhbmdlc107cmV0dXJuLTE9PT1uVShpLHQuYmVnaW4sdC5lbmQpJiZpLnB1c2goe2JlZ2luOnQuYmVnaW4sZW5kOnQuZW5kfSksey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLGxvYWRpbmdSYW5nZXM6aX19fX0pLFNlKHVQLChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9Wy4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLmxvYWRpbmdSYW5nZXNdLHI9blUoaSx0LmJlZ2luLHQuZW5kKTstMSE9PXImJmkuc3BsaWNlKHIsMSk7bGV0IG89ey4uLm4sZXhlY3V0aW9uczp7Li4ubi5leGVjdXRpb25zLGV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLG51bUV4ZWN1dGlvbnM6dC5udW1fZGlnZXN0cyxsb2FkaW5nUmFuZ2VzOml9LGV4ZWN1dGlvbkRpZ2VzdHM6ey4uLm4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzfX19O2ZvcihsZXQgcz10LmJlZ2luO3M8dC5lbmQ7KytzKW8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzW3NdPXQuZXhlY3V0aW9uX2RpZ2VzdHNbcy10LmJlZ2luXTtyZXR1cm4gdC5lbmQ+dC5iZWdpbiYmKG8uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLnBhZ2VMb2FkZWRTaXplcz17Li4uby5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQucGFnZUxvYWRlZFNpemVzLFt0LmJlZ2luL24uZXhlY3V0aW9ucy5wYWdlU2l6ZV06dC5lbmQtdC5iZWdpbn0pLG99KSxTZShXdixuPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXg7cmV0dXJuIGU+MCYmZS0tLHsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxzY3JvbGxCZWdpbkluZGV4OmV9fX0pLFNlKHF2LG49PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgZT1uLmV4ZWN1dGlvbnMuc2Nyb2xsQmVnaW5JbmRleDtyZXR1cm4gZStuLmV4ZWN1dGlvbnMuZGlzcGxheUNvdW50KzE8PW4uZXhlY3V0aW9ucy5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMmJmUrKyx7Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDplfX19KSxTZShZdiwobix0KT0+e2lmKHQuaW5kZXg8MHx8IU51bWJlci5pc0ludGVnZXIodC5pbmRleCkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBuZWdhdGl2ZSBvciBub24taW50ZWdlciBleGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pYCk7bGV0e2Rpc3BsYXlDb3VudDplfT1uLmV4ZWN1dGlvbnMse251bUV4ZWN1dGlvbnM6aX09bi5leGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQ7aWYodC5pbmRleD5NYXRoLm1heCgwLGktZSkpdGhyb3cgbmV3IEVycm9yKGBBdHRlbXB0IHRvIHNjcm9sbCB0byBleGVjdXRpb24gaW5kZXggKCR7dC5pbmRleH0pLCB3aGljaCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBpbmRleCAobnVtRXhlY3V0aW9ucz0ke2l9OyBkaXNwbGF5Q291bnQ9JHtlfSlgKTtyZXR1cm57Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsc2Nyb2xsQmVnaW5JbmRleDp0LmluZGV4fX19KSxTZShYdiwobix0KT0+e2xldCBlPXsuLi5uLGV4ZWN1dGlvbnM6ey4uLm4uZXhlY3V0aW9ucyxmb2N1c0luZGV4Om4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4K3QuZGlzcGxheUluZGV4fSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6eHMuRVhFQ1VUSU9OLHNvdXJjZUNvZGU6ey4uLm4uc291cmNlQ29kZX19O3JldHVybiBlLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYz1DUChlKSxlfSksU2UoZFAsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXQgaT17Li4ubixleGVjdXRpb25zOnsuLi5uLmV4ZWN1dGlvbnMsZXhlY3V0aW9uRGF0YTp7Li4ubi5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGF9fX07Zm9yKGxldCByPXQuYmVnaW47cjx0LmVuZDsrK3IpaS5leGVjdXRpb25zLmV4ZWN1dGlvbkRhdGFbcl09dC5leGVjdXRpb25zW3ItdC5iZWdpbl07cmV0dXJuIGl9KSxTZShwUCxuPT5udWxsPT09bi5hY3RpdmVSdW5JZD9uOnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsbnVtRXhlY3V0aW9uc0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMubnVtRXhlY3V0aW9uc0xvYWRlZCxzdGF0ZTpPZS5MT0FESU5HfX19KSxTZShoUCwobix7bnVtR3JhcGhFeGVjdXRpb25zOnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPXQ+bi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZC5udW1FeGVjdXRpb25zLGk9ey4uLm4sbGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXM6ZT9EYXRlLm5vdygpOm4ubGFzdE5vbkVtcHR5UG9sbERhdGFUaW1lTXMsZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxudW1FeGVjdXRpb25zTG9hZGVkOnsuLi5uLmdyYXBoRXhlY3V0aW9ucy5udW1FeGVjdXRpb25zTG9hZGVkLHN0YXRlOk9lLkxPQURFRCxsYXN0TG9hZGVkVGltZUluTXM6RGF0ZS5ub3coKX0sZXhlY3V0aW9uRGlnZXN0c0xvYWRlZDp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMuZXhlY3V0aW9uRGlnZXN0c0xvYWRlZCxudW1FeGVjdXRpb25zOnR9fX07cmV0dXJuIHQ+MCYmbnVsbD09PW4uZ3JhcGhFeGVjdXRpb25zLmZvY3VzSW5kZXgmJihpLmdyYXBoRXhlY3V0aW9ucy5mb2N1c0luZGV4PTApLGl9KSxTZShmUCwobix7cGFnZUluZGV4OnR9KT0+e2lmKG51bGw9PT1uLmFjdGl2ZVJ1bklkKXJldHVybiBuO2xldCBlPW4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YUxvYWRpbmdQYWdlcy5zbGljZSgpO3JldHVybi0xPT09ZS5pbmRleE9mKHQpJiZlLnB1c2godCksey4uLm4sZ3JhcGhFeGVjdXRpb25zOnsuLi5uLmdyYXBoRXhlY3V0aW9ucyxncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXM6ZX19fSksU2UobVAsKG4sdCk9PntpZihudWxsPT09bi5hY3RpdmVSdW5JZClyZXR1cm4gbjtsZXR7cGFnZVNpemU6ZX09bi5ncmFwaEV4ZWN1dGlvbnMsaT1uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMuc2xpY2UoKSxyPXsuLi5uLmdyYXBoRXhlY3V0aW9ucy5ncmFwaEV4ZWN1dGlvbkRhdGFQYWdlTG9hZGVkU2l6ZXN9LG89ey4uLm4uZ3JhcGhFeGVjdXRpb25zLmdyYXBoRXhlY3V0aW9uRGF0YX07Zm9yKGxldCBzPXQuYmVnaW47czx0LmVuZDsrK3Mpe2xldCBhPU1hdGguZmxvb3Iocy9lKTstMSE9PWkuaW5kZXhPZihhKSYmaS5zcGxpY2UoaS5pbmRleE9mKGEpLDEpLHZvaWQgMD09PXJbYV0mJihyW2FdPTApLHZvaWQgMD09PW9bc10mJnJbYV0rKyxvW3NdPXQuZ3JhcGhfZXhlY3V0aW9uc1tzLXQuYmVnaW5dfXJldHVybnsuLi5uLGdyYXBoRXhlY3V0aW9uczp7Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZ3JhcGhFeGVjdXRpb25EYXRhTG9hZGluZ1BhZ2VzOmksZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzOnIsZ3JhcGhFeGVjdXRpb25EYXRhOm99fX0pLFNlKFF2LChuLHQpPT57aWYodC5pbmRleDwwfHwhTnVtYmVyLmlzSW50ZWdlcih0LmluZGV4KSl0aHJvdyBuZXcgRXJyb3IoYEF0dGVtcHQgdG8gc2Nyb2xsIHRvIG5lZ2F0aXZlIG9yIG5vbi1pbnRlZ2VyIGdyYXBoLWV4ZWN1dGlvbiBpbmRleCAoJHt0LmluZGV4fSlgKTtyZXR1cm57Li4ubixncmFwaEV4ZWN1dGlvbnM6ey4uLm4uZ3JhcGhFeGVjdXRpb25zLHNjcm9sbEJlZ2luSW5kZXg6dC5pbmRleH19fSksU2UoS3YsKG4sdCk9PmFyZShuLHQuZ3JhcGhfaWQsdC5vcF9uYW1lLHQuaW5kZXgpKSxTZShadiwobix0KT0+YXJlKG4sdC5ncmFwaF9pZCx0Lm9wX25hbWUpKSxTZShnUCwobix0KT0+e2xldHtncmFwaF9pZDplLG9wX25hbWU6aX09dCxyPXsuLi5uLGdyYXBoczp7Li4ubi5ncmFwaHMsbG9hZGluZ09wczp7Li4ubi5ncmFwaHMubG9hZGluZ09wc319fTtyZXR1cm4gdm9pZCAwPT09ci5ncmFwaHMubG9hZGluZ09wc1tlXSYmKHIuZ3JhcGhzLmxvYWRpbmdPcHNbZV09bmV3IE1hcCksci5ncmFwaHMubG9hZGluZ09wc1tlXS5oYXMoaSl8fHIuZ3JhcGhzLmxvYWRpbmdPcHNbZV0uc2V0KGksT2UuTE9BRElORykscn0pLFNlKF9QLChuLHQpPT57bGV0e2dyYXBoT3BJbmZvUmVzcG9uc2U6ZX09dCx7Z3JhcGhfaWRzOml9PWUscj1pW2kubGVuZ3RoLTFdLG89ey4uLm4sZ3JhcGhzOnsuLi5uLmdyYXBocyxvcHM6ey4uLm4uZ3JhcGhzLm9wcyxbcl06bmV3IE1hcChuLmdyYXBocy5vcHNbcl0pfSxsb2FkaW5nT3BzOnsuLi5uLmdyYXBocy5sb2FkaW5nT3BzLFtyXTpuZXcgTWFwKG4uZ3JhcGhzLmxvYWRpbmdPcHNbcl0pfX19O2ZvcihsZXQgcyBvZiBlLmlucHV0cykhcy5kYXRhfHxvLmdyYXBocy5vcHNbcl0uc2V0KHMub3BfbmFtZSxzLmRhdGEpO2ZvcihsZXQgcz0wO3M8ZS5jb25zdW1lcnMubGVuZ3RoOysrcylmb3IobGV0IGEgb2YgZS5jb25zdW1lcnNbc10pIWEuZGF0YXx8by5ncmFwaHMub3BzW3JdLnNldChhLm9wX25hbWUsYS5kYXRhKTtyZXR1cm4gby5ncmFwaHMub3BzW3JdLnNldChlLm9wX25hbWUsey4uLmUsaW5wdXRzOmUuaW5wdXRzLm1hcChzPT4oe29wX25hbWU6cy5vcF9uYW1lLG91dHB1dF9zbG90OnMub3V0cHV0X3Nsb3R9KSksY29uc3VtZXJzOmUuY29uc3VtZXJzLm1hcChzPT5zLm1hcChhPT4oe29wX25hbWU6YS5vcF9uYW1lLGlucHV0X3Nsb3Q6YS5pbnB1dF9zbG90fSkpKX0pLG8uZ3JhcGhzLmxvYWRpbmdPcHNbcl0uc2V0KGUub3BfbmFtZSxPZS5MT0FERUQpLG99KSxTZSh2UCxuPT4oey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLHNvdXJjZUZpbGVMaXN0TG9hZGVkOnsuLi5uLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQsc3RhdGU6T2UuTE9BRElOR319fSkpLFNlKHlQLChuLHQpPT57bGV0IGU9ey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLHNvdXJjZUZpbGVMaXN0TG9hZGVkOnsuLi5uLnNvdXJjZUNvZGUuc291cmNlRmlsZUxpc3RMb2FkZWQsc3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSxzb3VyY2VGaWxlTGlzdDp0LnNvdXJjZUZpbGVzLGZpbGVDb250ZW50czpuLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9fSxpPXQuc291cmNlRmlsZXMubGVuZ3RoLHtmaWxlQ29udGVudHM6cn09ZS5zb3VyY2VDb2RlO2ZvcihsZXQgbz0wO288aTsrK28pcltvXT1uLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzW29dPz97bG9hZFN0YXRlOk9lLk5PVF9MT0FERUQsbGluZXM6bnVsbH07cmV0dXJuIGV9KSxTZShKdiwobix0KT0+e2xldCBlPSR2KG4pLGk9ey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLGZvY3VzTGluZVNwZWM6dC5zdGFja0ZyYW1lfX07cmV0dXJuIG51bGwhPT1lJiYoaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZT1mdW5jdGlvbihuLHQpe2xldCBlPS0xLGk9LTE7aWYobi5mb3JFYWNoKCh7ZmlsZV9wYXRoOnIsbGluZW5vOm99LHMpPT57cj09PXQuZmlsZV9wYXRoJiYoaT1zLG89PT10LmxpbmVubyYmKGU9cykpfSksLTE9PT1lKXRocm93IG5ldyBFcnJvcihgU3RhY2sgZnJhbWUgJHtKU09OLnN0cmluZ2lmeSh0KX0gaXMgbm90IGZvdW5kLmApO3JldHVybiBlPT09aX0oZSx0LnN0YWNrRnJhbWUpKSxpfSksU2UoYlAsKG4sdCk9PntsZXQgZT17Li4ubixzb3VyY2VDb2RlOnsuLi5uLnNvdXJjZUNvZGUsZmlsZUNvbnRlbnRzOm4uc291cmNlQ29kZS5maWxlQ29udGVudHMuc2xpY2UoKX19LGk9VHcoZS5zb3VyY2VDb2RlLnNvdXJjZUZpbGVMaXN0LHQpO2lmKCEoaT49MCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZmluZCB0aGUgZm9sbG93aW5nIGZpbGUgaW4gZmlsZSBsaXN0OiBob3N0X25hbWU9IiR7dC5ob3N0X25hbWV9IiwgZmlsZV9wYXRoPSIke3QuZmlsZV9wYXRofSJgKTtyZXR1cm4gZS5zb3VyY2VDb2RlLmZpbGVDb250ZW50cy5zcGxpY2UoaSwxLHsuLi5lLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzW2ldLGxvYWRTdGF0ZTpPZS5MT0FESU5HfSksZX0pLFNlKHhQLChuLHQpPT57bGV0IGU9ey4uLm4sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlLGZpbGVDb250ZW50czpuLnNvdXJjZUNvZGUuZmlsZUNvbnRlbnRzLnNsaWNlKCl9fSxpPVR3KGUuc291cmNlQ29kZS5zb3VyY2VGaWxlTGlzdCx0KTtpZighKGk+PTApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgdGhlIGZvbGxvd2luZyBmaWxlIGluIGZpbGUgbGlzdDogaG9zdF9uYW1lPSIke3QuaG9zdF9uYW1lfSIsIGZpbGVfcGF0aD0iJHt0LmZpbGVfcGF0aH0iYCk7cmV0dXJuIGUuc291cmNlQ29kZS5maWxlQ29udGVudHMuc3BsaWNlKGksMSx7bG9hZFN0YXRlOk9lLkxPQURFRCxsaW5lczp0LmxpbmVzfSksZX0pLFNlKFN3LChuLHQpPT57aWYobnVsbD09PW4uYWN0aXZlUnVuSWQpcmV0dXJuIG47bGV0IGk9ey4uLm4sc3RhY2tGcmFtZXM6ey4uLm4uc3RhY2tGcmFtZXMsLi4udC5zdGFja0ZyYW1lc30sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIGkuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUNQKGkpLGl9KSk7ZnVuY3Rpb24gYXJlKG4sdCxlLGkpe2xldCByPXsuLi5uLGdyYXBoczp7Li4ubi5ncmFwaHMsZm9jdXNlZE9wOntncmFwaElkOnQsb3BOYW1lOmV9fSxjb2RlTG9jYXRpb25Gb2N1c1R5cGU6eHMuR1JBUEhfT1BfQ1JFQVRJT04sc291cmNlQ29kZTp7Li4ubi5zb3VyY2VDb2RlfX07cmV0dXJuIHIuc291cmNlQ29kZS5mb2N1c0xpbmVTcGVjPUNQKHIpLHZvaWQgMCE9PWkmJihyLmdyYXBoRXhlY3V0aW9ucz17Li4ubi5ncmFwaEV4ZWN1dGlvbnMsZm9jdXNJbmRleDppfSkscn1mdW5jdGlvbiBscmUobix0KXtyZXR1cm4gRDNlKG4sdCl9dmFyIGxzPU1yKEV3KSx1Zz1KKGxzLG49Pm4ucnVucyksaVU9SihscyxuPT5uLnJ1bnNMb2FkZWQpLFZzPUoobHMsbj0+bi5hY3RpdmVSdW5JZCksY3JlPUoobHMsbj0+bi5sYXN0RGF0YVBvbGxPbnNldFRpbWVNcy1uLmxhc3ROb25FbXB0eVBvbGxEYXRhVGltZU1zKSxleT1KKGxzLG49Pm4uYWxlcnRzKSxyVT1KKGV5LG49Pm4uYWxlcnRzTG9hZGVkKSx1cmU9SihleSxuPT5uLm51bUFsZXJ0cyksTVA9SihleSxuPT5uLmZvY3VzVHlwZSksZHJlPUooZXksbj0+bnVsbD09PW4uZm9jdXNUeXBlPzA6bi5hbGVydHNCcmVha2Rvd25bbi5mb2N1c1R5cGVdfHwwKSxwcmU9SihleSxuPT5udWxsPT09bi5mb2N1c1R5cGV8fHZvaWQgMD09PW4uYWxlcnRzW24uZm9jdXNUeXBlXT9udWxsOm4uYWxlcnRzW24uZm9jdXNUeXBlXSksaHJlPUooZXksbj0+bi5hbGVydHNCcmVha2Rvd24pLGRnPUoobHMsbj0+bi5leGVjdXRpb25zKSx3UD1KKGRnLG49Pm4ubnVtRXhlY3V0aW9uc0xvYWRlZCksRHc9SihkZyxuPT5uLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQpLGpoPUooZGcsbj0+bi5leGVjdXRpb25EaWdlc3RzTG9hZGVkLm51bUV4ZWN1dGlvbnMpLEF3PUooZGcsbj0+bi5zY3JvbGxCZWdpbkluZGV4KSx0eT1KKGRnLG49Pm4ucGFnZVNpemUpLG55PUooZGcsbj0+bi5kaXNwbGF5Q291bnQpLGZyZT1KKGRnLG49PntsZXQgdD1bXTtmb3IobGV0IGU9bi5zY3JvbGxCZWdpbkluZGV4O2U8bi5zY3JvbGxCZWdpbkluZGV4K24uZGlzcGxheUNvdW50OysrZSl0LnB1c2goZSBpbiBuLmV4ZWN1dGlvbkRpZ2VzdHM/bi5leGVjdXRpb25EaWdlc3RzW2VdOm51bGwpO3JldHVybiB0fSksR2g9SihscyxuPT5uLmdyYXBoRXhlY3V0aW9ucyksbXJlPUooR2gsbj0+bi5udW1FeGVjdXRpb25zTG9hZGVkKSxJdz1KKGxzLG49Pm4uZ3JhcGhFeGVjdXRpb25zLmV4ZWN1dGlvbkRpZ2VzdHNMb2FkZWQubnVtRXhlY3V0aW9ucyksZ3JlPUooR2gsbj0+bi5zY3JvbGxCZWdpbkluZGV4KSxfcmU9SihHaCxuPT5uLmRpc3BsYXlDb3VudCksdnJlPUooR2gsbj0+bi5wYWdlU2l6ZSkseXJlPUooR2gsbj0+bi5ncmFwaEV4ZWN1dGlvbkRhdGFMb2FkaW5nUGFnZXMpLGJyZT1KKEdoLG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhUGFnZUxvYWRlZFNpemVzKSxvVT1KKEdoLG49Pm4uZ3JhcGhFeGVjdXRpb25EYXRhKSxzVT1KKEdoLG49Pm4uZm9jdXNJbmRleCksYVU9SihscyxuPT5uLmdyYXBocyksbFU9SihhVSxuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO3JldHVybiBudWxsPT09dHx8dm9pZCAwPT09ZVt0LmdyYXBoSWRdP251bGw6ZVt0LmdyYXBoSWRdLmdldCh0Lm9wTmFtZSl8fG51bGx9KSxjVT1KKGFVLG49PntsZXR7Zm9jdXNlZE9wOnQsb3BzOmV9PW47aWYobnVsbD09PXR8fHZvaWQgMD09PWVbdC5ncmFwaElkXXx8IWVbdC5ncmFwaElkXS5oYXModC5vcE5hbWUpKXJldHVybiBudWxsO3tsZXQgaT1lW3QuZ3JhcGhJZF0se2lucHV0czpyfT1pLmdldCh0Lm9wTmFtZSk7cmV0dXJuIHIubWFwKG89PntsZXQgcz17Li4ub307cmV0dXJuIGkuaGFzKG8ub3BfbmFtZSkmJihzLmRhdGE9aS5nZXQoby5vcF9uYW1lKSksc30pfX0pLHhyZT1KKHNVLG9VLGNVLChuLHQsZSk9PntpZihudWxsPT09bnx8bnVsbD09PWUpcmV0dXJuIG51bGw7bGV0IGk9ZS5tYXAoYT0+ITEpLHI9W107aWYoMD09PWUubGVuZ3RoKXJldHVybiByO2xldCBvPXRbbl0uZ3JhcGhfaWQscz1NYXRoLm1heCgwLG4tMjAwKTtmb3IobGV0IGE9bi0xO2E+PXM7LS1hKWlmKHZvaWQgMCE9PXRbYV0pZm9yKGxldCBsPTA7bDxlLmxlbmd0aCYmKGlbbF18fHRbYV0uZ3JhcGhfaWQhPT1vfHx0W2FdLm9wX25hbWUhPT1lW2xdLm9wX25hbWV8fHRbYV0ub3V0cHV0X3Nsb3QhPT1lW2xdLm91dHB1dF9zbG90fHwoci5wdXNoKGEpLGlbbF09ITAsci5sZW5ndGghPT1lLmxlbmd0aCkpOysrbCk7cmV0dXJuIHJ9KSxDcmU9SihhVSxuPT57bGV0e2ZvY3VzZWRPcDp0LG9wczplfT1uO2lmKG51bGw9PT10fHx2b2lkIDA9PT1lW3QuZ3JhcGhJZF18fCFlW3QuZ3JhcGhJZF0uaGFzKHQub3BOYW1lKSlyZXR1cm4gbnVsbDt7bGV0IGk9ZVt0LmdyYXBoSWRdLHtjb25zdW1lcnM6cn09aS5nZXQodC5vcE5hbWUpO3JldHVybiByLm1hcChvPT5vLm1hcChzPT57bGV0IGE9ey4uLnN9O3JldHVybiBpLmhhcyhzLm9wX25hbWUpJiYoYS5kYXRhPWkuZ2V0KHMub3BfbmFtZSkpLGF9KSl9fSksTXJlPUoobHMsbj0+e2xldCB0PW4uZXhlY3V0aW9ucy5zY3JvbGxCZWdpbkluZGV4LGU9bi5leGVjdXRpb25zLnNjcm9sbEJlZ2luSW5kZXgrbi5leGVjdXRpb25zLmRpc3BsYXlDb3VudCxpPW5ldyBBcnJheShlLXQpLmZpbGwobnVsbCkscj1uLmFsZXJ0cy5mb2N1c1R5cGU7aWYobnVsbD09PXIpcmV0dXJuIGk7bGV0IG89bi5hbGVydHMuZXhlY3V0aW9uSW5kaWNlc1tyXTtpZih2b2lkIDA9PT1vKXJldHVybiBpO2ZvcihsZXQgcz10O3M8ZTsrK3Mpby5pbmNsdWRlcyhzKSYmKGlbcy10XT1uLmFsZXJ0cy5mb2N1c1R5cGUpO3JldHVybiBpfSksU1A9SihscyxuPT5uLmV4ZWN1dGlvbnMpLHVVPUooU1Asbj0+bi5mb2N1c0luZGV4KSx3cmU9SihTUCxuPT57aWYobnVsbD09PW4uZm9jdXNJbmRleClyZXR1cm4gbnVsbDtsZXR7Zm9jdXNJbmRleDp0LHNjcm9sbEJlZ2luSW5kZXg6ZSxkaXNwbGF5Q291bnQ6aX09bjtyZXR1cm4gdDxlfHx0Pj1lK2k/bnVsbDp0LWV9KSxkVT1KKFNQLG49Pm4uZXhlY3V0aW9uRGF0YSksU3JlPUoobHMsbj0+bi5ncmFwaHMubG9hZGluZ09wcykscFU9SihscyxuPT5uLnN0YWNrRnJhbWVzKSxwZz1KKFNQLG49PntsZXR7Zm9jdXNJbmRleDp0LGV4ZWN1dGlvbkRhdGE6ZX09bjtyZXR1cm4gbnVsbD09PXR8fHZvaWQgMD09PWVbdF0/bnVsbDplW3RdfSksUHc9Sihscyx1VSxwZyxsVSwobix0LGUsaSk9PntsZXR7Y29kZUxvY2F0aW9uRm9jdXNUeXBlOnJ9PW47cmV0dXJuIG51bGw9PT1yP251bGw6cj09PXhzLkVYRUNVVElPTj9udWxsPT09dHx8bnVsbD09PWU/bnVsbDp7Y29kZUxvY2F0aW9uVHlwZTp4cy5FWEVDVVRJT04sb3BUeXBlOmUub3BfdHlwZSxleGVjdXRpb25JbmRleDp0fTpudWxsPT09aT9udWxsOntjb2RlTG9jYXRpb25UeXBlOnhzLkdSQVBIX09QX0NSRUFUSU9OLG9wVHlwZTppLm9wX3R5cGUsb3BOYW1lOmkub3BfbmFtZX19KSxFcmU9SihscywkdiksRVA9SihscyxuPT5uLnNvdXJjZUNvZGUpLFRyZT1KKEVQLG49Pm4uc291cmNlRmlsZUxpc3RMb2FkZWQpLGhVPShKKEVQLG49Pm4uc291cmNlRmlsZUxpc3QpLEooRVAsbj0+e2xldHtzb3VyY2VGaWxlTGlzdDp0LGZvY3VzTGluZVNwZWM6ZX09bjtyZXR1cm4gbnVsbD09PWU/LTE6VHcodCxlKX0pKSxUUD1KKEVQLGhVLChuLHQpPT4tMT09PXQ/bnVsbDpuLmZpbGVDb250ZW50c1t0XXx8bnVsbCksRFA9SihscyxuPT5uLnNvdXJjZUNvZGUuZm9jdXNMaW5lU3BlYyksRHJlPUoobHMsbj0+bi5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSksQXJlPWZ1bmN0aW9uKG4pe3JldHVybltuXX07ZnVuY3Rpb24gSTNlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS5vblRvZ2dsZUZvY3VzVHlwZS5lbWl0KG8udHlwZSkpfSksXygxLCJkaXYiLDgpLEEoMiksdigpLF8oMywiZGl2Iiw5KSxBKDQpLHYoKSxPKDUsImRpdiIpLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO3koIm5nQ2xhc3MiLE9uKDQsQXJlLGUudHlwZT09PWkuZm9jdXNUeXBlPyJmb2N1cyI6IiIpKSxDKDIpLHl0KGUuZGlzcGxheU5hbWUpLEMoMiksWHAoIiAiLGUuZGlzcGxheVN5bWJvbCwiOiAiLGUuY291bnQsIiAiKX19dmFyIElyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5udW1BbGVydHM9MCx0aGlzLmFsZXJ0c0JyZWFrZG93bj1bXSx0aGlzLmZvY3VzVHlwZT1udWxsLHRoaXMub25Ub2dnbGVGb2N1c1R5cGU9bmV3IEd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImFsZXJ0cy1jb21wb25lbnQiXV0saW5wdXRzOntudW1BbGVydHM6Im51bUFsZXJ0cyIsYWxlcnRzQnJlYWtkb3duOiJhbGVydHNCcmVha2Rvd24iLGZvY3VzVHlwZToiZm9jdXNUeXBlIn0sb3V0cHV0czp7b25Ub2dnbGVGb2N1c1R5cGU6Im9uVG9nZ2xlRm9jdXNUeXBlIn0sZGVjbHM6MTAsdmFyczo1LGNvbnN0czpbWzEsImFsZXJ0cy1jb250YWluZXIiXSxbMSwiZGVidWdnaW5nLXRpdGxlIl0sWzEsIm51bS1hbGVydHMtY29udGFpbmVyIl0sWzEsIm51bS1hbGVydHMtbGFiZWwiXSxbMSwibnVtLWFsZXJ0cy12YWx1ZSIsMywibmdDbGFzcyJdLFsxLCJhbGVydHMtYnJlYWtkb3duLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJhbGVydHMtYnJlYWtkb3duLXR5cGUiLDMsIm5nQ2xhc3MiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImFsZXJ0cy1icmVha2Rvd24tdHlwZSIsMywibmdDbGFzcyIsImNsaWNrIl0sWzEsImFsZXJ0LXR5cGUtbmFtZSJdLFsxLCJhbGVydC10eXBlLWNvdW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSksQSgyLCJEZWJ1Z2dpbmciKSx2KCksXygzLCJkaXYiLDIpKDQsImRpdiIsMyksQSg1LCJBbGVydHMiKSx2KCksXyg2LCJkaXYiLDQpLEEoNyksdigpKCksXyg4LCJkaXYiLDUpLEUoOSxJM2UsNiw2LCJkaXYiLDYpLHYoKSgpKSwyJmUmJihDKDYpLHkoIm5nQ2xhc3MiLE9uKDMsQXJlLGkubnVtQWxlcnRzPjA/Im5vbi16ZXJvIjoiIikpLEMoMSksamUoIiAiLGkubnVtQWxlcnRzLCIgIiksQygyKSx5KCJuZ0Zvck9mIixpLmFsZXJ0c0JyZWFrZG93bikpfSxkZXBlbmRlbmNpZXM6W0ZuLGRuXSxzdHlsZXM6WyIuYWxlcnRzLWJyZWFrZG93bi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxM3B4O1xuICBwYWRkaW5nOiAxMHB4IDEwcHggMTBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uYWxlcnRzLWJyZWFrZG93bi10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDAgMTBweCAxMHB4IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgcGFkZGluZzogNnB4IDAgNnB4IDUwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydHMtYnJlYWtkb3duLXR5cGUuZm9jdXNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWVlMDtcbn1cblxuLmFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xufVxuXG4uYWxlcnQtdHlwZS1jb3VudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBjb2xvcjogI2ZmZjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDIwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5hbGVydC10eXBlLW5hbWVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAzcHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5kZWJ1Z2dpbmctdGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxOHB4O1xufVxuXG4ubnVtLWFsZXJ0cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHBhZGRpbmc6IDEwcHggMTBweCAxMHB4IDMwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm51bS1hbGVydHMtbGFiZWxbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IDEzcHg7XG59XG5cbi5udW0tYWxlcnRzLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgZm9udC1zaXplOiAxM3B4O1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMjBweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMjRweDtcbn1cblxuLm51bS1hbGVydHMtdmFsdWUubm9uLXplcm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYjc4MDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59Il19KSxufSkoKSxSM2U9e1ttZC5GVU5DVElPTl9SRUNPTVBJTEVfQUxFUlRdOntkaXNwbGF5TmFtZToiRnVuY3Rpb24gcmVjb21waWxlcyIsZGlzcGxheVN5bWJvbDoiQyJ9LFttZC5JTkZfTkFOX0FMRVJUXTp7ZGlzcGxheU5hbWU6Ik5hTi9cdTIyMWUiLGRpc3BsYXlTeW1ib2w6Ilx1MjIxZSJ9LFttZC5URU5TT1JfU0hBUEVfQUxFUlRdOntkaXNwbGF5TmFtZToiVGVuc29yIHNoYXBlIixkaXNwbGF5U3ltYm9sOiJcdTI1YTAifX0sUHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtQWxlcnRzJD10aGlzLnN0b3JlLnBpcGUodnQodXJlKSksdGhpcy5hbGVydHNCcmVha2Rvd24kPXRoaXMuc3RvcmUucGlwZSh2dChKKGhyZSxpPT57bGV0IHI9T2JqZWN0LmtleXMoaSk7cmV0dXJuIHIuc29ydCgpLHIubWFwKG89Pih7dHlwZTpvLC4uLlIzZVtvXSxjb3VudDppW29dfSkpfSkpKSx0aGlzLmZvY3VzVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHZ0KE1QKSl9b25Ub2dnbGVGb2N1c1R5cGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChHdih7YWxlcnRUeXBlOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibnVtQWxlcnRzIiwiYWxlcnRzQnJlYWtkb3duIiwiZm9jdXNUeXBlIiwib25Ub2dnbGVGb2N1c1R5cGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImFsZXJ0cy1jb21wb25lbnQiLDApLFAoIm9uVG9nZ2xlRm9jdXNUeXBlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRvZ2dsZUZvY3VzVHlwZShvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJudW1BbGVydHMiLFUoMSwzLGkubnVtQWxlcnRzJCkpKCJhbGVydHNCcmVha2Rvd24iLFUoMiw1LGkuYWxlcnRzQnJlYWtkb3duJCkpKCJmb2N1c1R5cGUiLFUoMyw3LGkuZm9jdXNUeXBlJCkpfSxkZXBlbmRlbmNpZXM6W0lyZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUnc9ezE5OiJmbG9hdDE2IiwxOiJmbG9hdDMyIiwyOiJmbG9hdDY0IiwzOiJpbnQzMiIsNDoidWludDgiLDE3OiJ1aW50MTYiLDIyOiJ1aW50MzIiLDIzOiJ1aW50NjQiLDU6ImludDE2Iiw2OiJpbnQ4Iiw3OiJzdHJpbmciLDg6ImNvbXBsZXg2NCIsMTg6ImNvbXBsZXgxMjgiLDk6ImludDY0IiwxMDoiYm9vbCIsMTE6InFpbnQ4IiwxMjoicXVpbnQ4IiwxNToicWludDE2IiwxNjoicXVpbnQxNiIsMTM6InFpbnQzMiIsMTQ6ImJmbG9hdDE2IiwyMDoicmVzb3VyY2UiLDIxOiJ2YXJpYW50IiwxMTk6ImZsb2F0MTZfcmVmIiwxMDE6ImZsb2F0MzJfcmVmIiwxMDI6ImZsb2F0NjRfcmVmIiwxMDM6ImludDMyX3JlZiIsMTIyOiJ1aW50MzJfcmVmIiwxMDQ6InVpbnQ4X3JlZiIsMTE3OiJ1aW50MTZfcmVmIiwxMDU6ImludDE2X3JlZiIsMTA2OiJpbnQ4X3JlZiIsMTA3OiJzdHJpbmdfcmVmIiwxMDg6ImNvbXBsZXg2NF9yZWYiLDExODoiY29tcGxleDEyOF9yZWYiLDEwOToiaW50NjRfcmVmIiwxMjM6InVpbnQ2NF9yZWYiLDExMDoiYm9vbF9yZWYiLDExMToicWludDhfcmVmIiwxMTI6InF1aW50OF9yZWYiLDExNToicWludDE2X3JlZiIsMTE2OiJxdWludDE2X3JlZiIsMTEzOiJxaW50MzJfcmVmIiwxMTQ6ImJmbG9hdDE2X3JlZiIsMTIwOiJyZXNvdXJjZV9yZWYiLDEyMToidmFyaWFudF9yZWYifTtmdW5jdGlvbiBBUChuKXtsZXR7dGVuc29yRGVidWdNb2RlOnQsYXJyYXk6ZX09bjtzd2l0Y2godCl7Y2FzZSBhcy5OT19URU5TT1I6aWYobnVsbCE9PWUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkbHkgcmVjZWl2ZWQgbm9uLW51bGwgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHVuZGVyIE5PX1RFTlNPUiBtb2RlIik7cmV0dXJue307Y2FzZSBhcy5DVVJUX0hFQUxUSDppZihudWxsPT09ZXx8MiE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgQ1VSVF9IRUFMVEggbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDIsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtyZXR1cm57aGFzSW5mT3JOYU46Qm9vbGVhbihlWzFdKX07Y2FzZSBhcy5DT05DSVNFX0hFQUxUSDp7aWYobnVsbD09PWV8fDUhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFVuZGVyIENPTkNJU0VfSEVBTFRIIG1vZGUsIGV4cGVjdGVkIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB0byBoYXZlIGxlbmd0aCA1LCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9e3NpemU6ZVsxXX07cmV0dXJuIGVbMl0+MCYmKGkubnVtTmVnYXRpdmVJbmZzPWVbMl0pLGVbM10+MCYmKGkubnVtUG9zaXRpdmVJbmZzPWVbM10pLGVbNF0+MCYmKGkubnVtTmFOcz1lWzRdKSxpfWNhc2UgYXMuU0hBUEU6e2lmKG51bGw9PT1lfHwxMCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVW5kZXIgU0hBUEUgbW9kZSwgZXhwZWN0ZWQgZGVidWctdGVuc29yLXZhbHVlIGFycmF5IHRvIGhhdmUgbGVuZ3RoIDEwLCBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7bGV0IGk9ZVsyXSxyPWUuc2xpY2UoNCxNYXRoLm1pbig0K2ksZS5sZW5ndGgpKTtyZXR1cm4gci5sZW5ndGg8aSYmKHI9bmV3IEFycmF5KGktci5sZW5ndGgpLmNvbmNhdChyKSkse2R0eXBlOlJ3W2VbMV1dLHJhbms6aSxzaXplOmVbM10sc2hhcGU6cn19Y2FzZSBhcy5GVUxMX0hFQUxUSDp7aWYobnVsbD09PWV8fDExIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKGBVbmRlciBGVUxMX0hFQUxUSCBtb2RlLCBleHBlY3RlZCBkZWJ1Zy10ZW5zb3ItdmFsdWUgYXJyYXkgdG8gaGF2ZSBsZW5ndGggMTEsIGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtsZXQgcj17ZHR5cGU6UndbZVsyXV0scmFuazplWzNdLHNpemU6ZVs0XX07cmV0dXJuIGVbNV0+MCYmKHIubnVtTmVnYXRpdmVJbmZzPWVbNV0pLGVbNl0+MCYmKHIubnVtUG9zaXRpdmVJbmZzPWVbNl0pLGVbN10+MCYmKHIubnVtTmFOcz1lWzddKSxlWzhdPjAmJihyLm51bU5lZ2F0aXZlRmluaXRlcz1lWzhdKSxlWzldPjAmJihyLm51bVplcm9zPWVbOV0pLGVbMTBdPjAmJihyLm51bVBvc2l0aXZlRmluaXRlcz1lWzEwXSkscn1jYXNlIGFzLkZVTExfVEVOU09SOmlmKG51bGwhPT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZGx5IHJlY2VpdmVkIG5vbi1udWxsIGRlYnVnLXRlbnNvci12YWx1ZSBhcnJheSB1bmRlciBGVUxMX1RFTlNPUiBtb2RlIik7cmV0dXJue307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB0ZW5zb3JEZWJ1Z01vZGU6ICR7dH1gKX19dmFyIGZVPSJbX25naG9zdC0lQ09NUCVdIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlNWU4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxNHB4O1xuICAgIG1hcmdpbjogMCAycHg7XG4gICAgcGFkZGluZzogMXB4IDNweDtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gIH0iO2Z1bmN0aW9uIGszZShuLHQpezEmbiYmTygwLCJkaXYiLDQpfWZ1bmN0aW9uIEYzZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIiw4KSxBKDIsIk5hTiIpLHYoKSxfKDMsInNwYW4iLDkpLEEoNCksdigpKCkpLDImbil7bGV0IGU9UygyKTtDKDQpLGplKCJceGQ3IixlLm51bU5hTnMsIiIpfX1mdW5jdGlvbiBOM2Uobix0KXtpZigxJm4mJihfKDAsImRpdiIsNykoMSwic3BhbiIsOCksQSgyLCItXHUyMjFlIiksdigpLF8oMywic3BhbiIsOSksQSg0KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoNCksamUoIlx4ZDciLGUubnVtTmVnYXRpdmVJbmZzLCIiKX19ZnVuY3Rpb24gTDNlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDcpKDEsInNwYW4iLDgpLEEoMiwiK1x1MjIxZSIpLHYoKSxfKDMsInNwYW4iLDkpLEEoNCksdigpKCkpLDImbil7bGV0IGU9UygyKTtDKDQpLGplKCJceGQ3IixlLm51bVBvc2l0aXZlSW5mcywiIil9fWZ1bmN0aW9uIEIzZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksQSgyLCItIiksdigpLF8oMywic3BhbiIsOSksQSg0KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoNCksamUoIlx4ZDciLGUubnVtTmVnYXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gVjNlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDcpKDEsInNwYW4iLDEwKSxBKDIsIjAiKSx2KCksXygzLCJzcGFuIiw5KSxBKDQpLHYoKSgpKSwyJm4pe2xldCBlPVMoMik7Qyg0KSxqZSgiXHhkNyIsZS5udW1aZXJvcywiIil9fWZ1bmN0aW9uIEgzZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIiwxMCksQSgyLCIrIiksdigpLF8oMywic3BhbiIsOSksQSg0KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoNCksamUoIlx4ZDciLGUubnVtUG9zaXRpdmVGaW5pdGVzLCIiKX19ZnVuY3Rpb24gVTNlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDUpLEUoMSxGM2UsNSwxLCJkaXYiLDYpLEUoMixOM2UsNSwxLCJkaXYiLDYpLEUoMyxMM2UsNSwxLCJkaXYiLDYpLEUoNCxCM2UsNSwxLCJkaXYiLDYpLEUoNSxWM2UsNSwxLCJkaXYiLDYpLEUoNixIM2UsNSwxLCJkaXYiLDYpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJuZ0lmIix2b2lkIDAhPT1lLm51bU5hTnMmJmUubnVtTmFOcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVJbmZzJiZlLm51bU5lZ2F0aXZlSW5mcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtUG9zaXRpdmVJbmZzJiZlLm51bVBvc2l0aXZlSW5mcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtTmVnYXRpdmVGaW5pdGVzJiZlLm51bU5lZ2F0aXZlRmluaXRlcz4wKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWUubnVtWmVyb3MmJmUubnVtWmVyb3M+MCksQygxKSx5KCJuZ0lmIix2b2lkIDAhPT1lLm51bVBvc2l0aXZlRmluaXRlcyYmZS5udW1Qb3NpdGl2ZUZpbml0ZXM+MCl9fXZhciB6M2U9ZnVuY3Rpb24obil7cmV0dXJuWyJjb250YWluZXIiLG5dfTtmdW5jdGlvbiBqM2Uobix0KXsxJm4mJk8oMCwiZGVidWctdGVuc29yLWR0eXBlIiw1KSwyJm4mJnkoImR0eXBlIixTKCkuZGVidWdUZW5zb3JWYWx1ZS5kdHlwZSl9ZnVuY3Rpb24gRzNlKG4sdCl7MSZuJiZPKDAsImRlYnVnLXRlbnNvci1yYW5rIiw2KSwyJm4mJnkoInJhbmsiLFMoKS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspfWZ1bmN0aW9uIFczZShuLHQpezEmbiYmTygwLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDcpLDImbiYmeSgic2hhcGUiLFMoKS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKX1mdW5jdGlvbiBxM2Uobix0KXsxJm4mJk8oMCwiZGVidWctdGVuc29yLWhhcy1pbmYtb3ItbmFuIiw4KSwyJm4mJnkoImhhc0luZk9yTmFOIixTKCkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTil9ZnVuY3Rpb24gWTNlKG4sdCl7aWYoMSZuJiZPKDAsImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biIsOSksMiZuKXtsZXQgZT1TKCk7WmkoInNpemUiLGUuZGVidWdUZW5zb3JWYWx1ZS5zaXplKSx5KCJudW1OZWdhdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1OZWdhdGl2ZUluZnMpKCJudW1Qb3NpdGl2ZUluZnMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUluZnMpKCJudW1OYU5zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtTmFOcykoIm51bU5lZ2F0aXZlRmluaXRlcyIsZS5kZWJ1Z1RlbnNvclZhbHVlLm51bU5lZ2F0aXZlRmluaXRlcykoIm51bVplcm9zIixlLmRlYnVnVGVuc29yVmFsdWUubnVtWmVyb3MpKCJudW1Qb3NpdGl2ZUZpbml0ZXMiLGUuZGVidWdUZW5zb3JWYWx1ZS5udW1Qb3NpdGl2ZUZpbml0ZXMpfX12YXIgWDNlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1kdHlwZSJdXSxpbnB1dHM6e2R0eXBlOiJkdHlwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKDApLDImZSYmamUoIiAiLGkuZHR5cGUsIiAiKX0sc3R5bGVzOltmVV19KSxufSkoKSxRM2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXJhbmsiXV0saW5wdXRzOntyYW5rOiJyYW5rIn0sZGVjbHM6MSx2YXJzOjEsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoMCksMiZlJiZqZSgiICIsaS5yYW5rLCJEICIpfSxzdHlsZXM6W2ZVXX0pLG59KSgpLEszZT0oKCk9PntjbGFzcyBue2dldCBzaGFwZVN0cmluZygpe3JldHVybiJbIit0aGlzLnNoYXBlLm1hcChlPT52b2lkIDA9PT1lPyI/IjpTdHJpbmcoZSkpLmpvaW4oIiwiKSsiXSJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1zaGFwZSJdXSxpbnB1dHM6e3NoYXBlOiJzaGFwZSJ9LGRlY2xzOjEsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZBKDApLDImZSYmamUoIiBzaGFwZToiLGkuc2hhcGVTdHJpbmcsIiAiKX0sc3R5bGVzOltmVV19KSxufSkoKSxaM2U9KCgpPT57Y2xhc3MgbntnZXQgYnJlYWtkb3duRXhpc3RzKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMubnVtTmFOc3x8dm9pZCAwIT09dGhpcy5udW1OZWdhdGl2ZUluZnN8fHZvaWQgMCE9PXRoaXMubnVtUG9zaXRpdmVJbmZzfHx2b2lkIDAhPT10aGlzLm51bU5lZ2F0aXZlRmluaXRlc3x8dm9pZCAwIT09dGhpcy5udW1aZXJvc3x8dm9pZCAwIT09dGhpcy5udW1Qb3NpdGl2ZUZpbml0ZXN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRlYnVnLXRlbnNvci1udW1lcmljLWJyZWFrZG93biJdXSxpbnB1dHM6e3NpemU6InNpemUiLG51bU5hTnM6Im51bU5hTnMiLG51bU5lZ2F0aXZlSW5mczoibnVtTmVnYXRpdmVJbmZzIixudW1Qb3NpdGl2ZUluZnM6Im51bVBvc2l0aXZlSW5mcyIsbnVtTmVnYXRpdmVGaW5pdGVzOiJudW1OZWdhdGl2ZUZpbml0ZXMiLG51bVplcm9zOiJudW1aZXJvcyIsbnVtUG9zaXRpdmVGaW5pdGVzOiJudW1Qb3NpdGl2ZUZpbml0ZXMifSxkZWNsczo3LHZhcnM6Myxjb25zdHM6W1sxLCJzaXplIl0sWzEsInNpemUtdmFsdWUiXSxbImNsYXNzIiwiYnJlYWsiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnJlYWtkb3duIiw0LCJuZ0lmIl0sWzEsImJyZWFrIl0sWzEsImJyZWFrZG93biJdLFsiY2xhc3MiLCJjYXRlZ29yeSIsNCwibmdJZiJdLFsxLCJjYXRlZ29yeSJdLFsxLCJjYXRlZ29yeS10YWciLCJpbmZpbml0ZSJdLFsxLCJjYXRlZ29yeS1jb3VudCJdLFsxLCJjYXRlZ29yeS10YWciLCJmaW5pdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwic3BhbiIpLEEoMiwic2l6ZToiKSx2KCksXygzLCJzcGFuIiwxKSxBKDQpLHYoKSgpLEUoNSxrM2UsMSwwLCJkaXYiLDIpLEUoNixVM2UsNyw2LCJkaXYiLDMpKSwyJmUmJihDKDQpLHl0KGkuc2l6ZSksQygxKSx5KCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cyksQygxKSx5KCJuZ0lmIixpLmJyZWFrZG93bkV4aXN0cykpfSxkZXBlbmRlbmNpZXM6W0JlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBmb250LWZhbWlseTogJ1JvYm90byBNb25vJywgbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDEwcHg7XG4gICAgICAgIG1hcmdpbjogMCAycHg7XG4gICAgICAgIHBhZGRpbmc6IDFweDtcbiAgICAgIH1cbiAgICAgIC5icmVha1tfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBmbGV4LWJhc2lzOiAxMDAlO1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5zaXplW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDExcHg7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxMXB4O1xuICAgICAgICBtYXJnaW46IDAgM3B4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmJyZWFrZG93bltfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEyKTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgaGVpZ2h0OiAxMXB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTFweDtcbiAgICAgICAgcGFkZGluZzogMnB4O1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgICAgfVxuICAgICAgLmNhdGVnb3J5W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDJweDtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDRweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMnB4O1xuICAgICAgICBoZWlndGg6IDEwMCU7XG4gICAgICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICAgIH1cbiAgICAgIC5jYXRlZ29yeS10YWdbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgICAgICBwYWRkaW5nOiAwIDJweDtcbiAgICAgIH1cbiAgICAgIC5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2FhYTtcbiAgICAgICAgY29sb3I6ICNmZWZlZmU7XG4gICAgICB9XG4gICAgICAuaW5maW5pdGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9Il19KSxufSkoKSxKM2U9KCgpPT57Y2xhc3MgbntnZXQgaW5mb1N0cmluZygpe3JldHVybiB0aGlzLmhhc0luZk9yTmFOPyJIYXMgXHUyMjFlL05hTiI6Ik5vIFx1MjIxZS9OYU4ifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iXV0saW5wdXRzOntoYXNJbmZPck5hTjoiaGFzSW5mT3JOYU4ifSxkZWNsczoyLHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApLEEoMSksdigpKSwyJmUmJih5KCJuZ0NsYXNzIixPbigyLHozZSxpLmhhc0luZk9yTmFOPyJoYXMtaW5mLW9yLW5hbiI6IiIpKSxDKDEpLGplKCIgIixpLmluZm9TdHJpbmcsIiAiKSl9LGRlcGVuZGVuY2llczpbRm5dLHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTVlODtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2MwYzBjMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgICBjb2xvcjogIzY2NjY2NjtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICAgICAgaGVpZ2h0OiAxNHB4O1xuICAgICAgICBsaW5lLWhlaWdodDogMTRweDtcbiAgICAgICAgbWFyZ2luOiAwIDJweDtcbiAgICAgICAgcGFkZGluZzogMXB4IDNweDtcbiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLmhhcy1pbmYtb3ItbmFuW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNTI1OTI7XG4gICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgfSJdfSksbn0pKCksSVA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWctdGVuc29yLXZhbHVlIl1dLGlucHV0czp7ZGVidWdUZW5zb3JWYWx1ZToiZGVidWdUZW5zb3JWYWx1ZSJ9LGRlY2xzOjUsdmFyczo1LGNvbnN0czpbWzMsImR0eXBlIiw0LCJuZ0lmIl0sWzMsInJhbmsiLDQsIm5nSWYiXSxbMywic2hhcGUiLDQsIm5nSWYiXSxbMywiaGFzSW5mT3JOYU4iLDQsIm5nSWYiXSxbMywic2l6ZSIsIm51bU5lZ2F0aXZlSW5mcyIsIm51bVBvc2l0aXZlSW5mcyIsIm51bU5hTnMiLCJudW1OZWdhdGl2ZUZpbml0ZXMiLCJudW1aZXJvcyIsIm51bVBvc2l0aXZlRmluaXRlcyIsNCwibmdJZiJdLFszLCJkdHlwZSJdLFszLCJyYW5rIl0sWzMsInNoYXBlIl0sWzMsImhhc0luZk9yTmFOIl0sWzMsInNpemUiLCJudW1OZWdhdGl2ZUluZnMiLCJudW1Qb3NpdGl2ZUluZnMiLCJudW1OYU5zIiwibnVtTmVnYXRpdmVGaW5pdGVzIiwibnVtWmVyb3MiLCJudW1Qb3NpdGl2ZUZpbml0ZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsajNlLDEsMSwiZGVidWctdGVuc29yLWR0eXBlIiwwKSxFKDEsRzNlLDEsMSwiZGVidWctdGVuc29yLXJhbmsiLDEpLEUoMixXM2UsMSwxLCJkZWJ1Zy10ZW5zb3Itc2hhcGUiLDIpLEUoMyxxM2UsMSwxLCJkZWJ1Zy10ZW5zb3ItaGFzLWluZi1vci1uYW4iLDMpLEUoNCxZM2UsMSw3LCJkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd24iLDQpKSwyJmUmJih5KCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuZHR5cGUpLEMoMSkseSgibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnJhbmspLEMoMSkseSgibmdJZiIsdm9pZCAwIT09aS5kZWJ1Z1RlbnNvclZhbHVlLnNoYXBlKSxDKDEpLHkoIm5nSWYiLHZvaWQgMCE9PWkuZGVidWdUZW5zb3JWYWx1ZS5oYXNJbmZPck5hTiksQygxKSx5KCJuZ0lmIix2b2lkIDAhPT1pLmRlYnVnVGVuc29yVmFsdWUuc2l6ZSkpfSxkZXBlbmRlbmNpZXM6W0JlLFgzZSxKM2UsWjNlLFEzZSxLM2VdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0ge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgICB9XG4gICAgICBkZWJ1Zy10ZW5zb3ItbnVtZXJpYy1icmVha2Rvd25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgfSJdfSksbn0pKCk7ZnVuY3Rpb24gJDNlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDEyKSxBKDEsIlx1MjViNiIpLHYoKSl9dmFyIGVCZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gdEJlKG4sdCl7aWYoMSZuJiZPKDAsImRlYnVnLXRlbnNvci12YWx1ZSIsMTcpLDImbil7bGV0IGU9UygyKS4kaW1wbGljaXQsaT1TKDIpO3koImRlYnVnVGVuc29yVmFsdWUiLGkucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKFFyKDEsZUJlLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLnRlbnNvcl9kZWJ1Z19tb2RlLGkuZ3JhcGhFeGVjdXRpb25EYXRhW2VdLmRlYnVnX3RlbnNvcl92YWx1ZSkpKX19ZnVuY3Rpb24gbkJlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IikoMSwiZGl2IiwxMykoMiwiYnV0dG9uIiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2UoZSk7bGV0IHI9UygpLiRpbXBsaWNpdCxvPVMoMik7cmV0dXJuIHNlKG8ub25UZW5zb3JOYW1lQ2xpY2suZW1pdCh7aW5kZXg6cixncmFwaF9pZDpvLmdyYXBoRXhlY3V0aW9uRGF0YVtyXS5ncmFwaF9pZCxvcF9uYW1lOm8uZ3JhcGhFeGVjdXRpb25EYXRhW3JdLm9wX25hbWV9KSl9KSxBKDMpLHYoKSxfKDQsImRpdiIsMTUpLEEoNSksdigpKCksRSg2LHRCZSwxLDQsImRlYnVnLXRlbnNvci12YWx1ZSIsMTYpLHYoKX1pZigyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQsaT1TKDIpO0MoMiksWmkoInRpdGxlIixpLmdldFRlbnNvck5hbWUoZSkpLEMoMSksamUoIiAiLGkuZ2V0VGVuc29yTmFtZShlKSwiICIpLEMoMikseXQoaS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3BfdHlwZSksQygxKSx5KCJuZ0lmIixudWxsIT09aS5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0uZGVidWdfdGVuc29yX3ZhbHVlKX19ZnVuY3Rpb24gaUJlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDE4KSxBKDEsIiBMb2FkaW5nLi4uICIpLHYoKSl9dmFyIHJCZT1mdW5jdGlvbihuKXtyZXR1cm57ImlucHV0LW9mLWZvY3VzIjpufX07ZnVuY3Rpb24gb0JlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDUpKDEsImRpdiIsNikoMiwiZGl2Iiw3KSxFKDMsJDNlLDIsMCwiZGl2Iiw4KSxBKDQpLHYoKSxFKDUsbkJlLDcsNCwiZGl2Iiw5KSxFKDYsaUJlLDIsMCwibmctdGVtcGxhdGUiLDEwLDExLHF0KSx2KCkoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPSRlKDcpLHI9UygyKTtDKDEpLHkoIm5nQ2xhc3MiLE9uKDUsckJlLHIuaXNJbnB1dE9mRm9jdXMoZSkpKSxDKDIpLHkoIm5nSWYiLGU9PT1yLmZvY3VzSW5kZXgpLEMoMSksamUoIiAiLGUsIiAiKSxDKDEpLHkoIm5nSWYiLHIuZ3JhcGhFeGVjdXRpb25EYXRhW2VdKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiBzQmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDMpLFAoInNjcm9sbGVkSW5kZXhDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25TY3JvbGxlZEluZGV4Q2hhbmdlLmVtaXQocikpfSksRSgxLG9CZSw4LDcsImRpdiIsNCksdigpfWlmKDImbil7bGV0IGU9UygpO0MoMSkseSgiY2RrVmlydHVhbEZvck9mIixlLmdyYXBoRXhlY3V0aW9uSW5kaWNlcyl9fXZhciBPcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25TY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25UZW5zb3JOYW1lQ2xpY2s9bmV3IEcsdGhpcy5wYXJzZURlYnVnVGVuc29yVmFsdWU9QVAsdGhpcy5URVNUX09OTFk9e2dldFZpZXdQb3J0OigpPT50aGlzLnZpZXdQb3J0fX1uZ09uQ2hhbmdlcyhlKXtpZih0aGlzLnZpZXdQb3J0JiZlLmZvY3VzSW5kZXgmJm51bGwhPT1lLmZvY3VzSW5kZXguY3VycmVudFZhbHVlKXtsZXQgaT10aGlzLnZpZXdQb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxyPWUuZm9jdXNJbmRleC5jdXJyZW50VmFsdWUsbz1NYXRoLnJvdW5kKChpLmVuZC1pLnN0YXJ0KS8zKSxzPU1hdGgubWF4KHItbywwKTt0aGlzLnZpZXdQb3J0LnNjcm9sbFRvSW5kZXgocyxyPj1pLnN0YXJ0JiZyPGkuZW5kPyJzbW9vdGgiOnZvaWQgMCl9fWdldFRlbnNvck5hbWUoZSl7cmV0dXJuYCR7dGhpcy5ncmFwaEV4ZWN1dGlvbkRhdGFbZV0ub3BfbmFtZX06JHt0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YVtlXS5vdXRwdXRfc2xvdH1gfWlzSW5wdXRPZkZvY3VzKGUpe3JldHVybiBudWxsIT09dGhpcy5mb2N1c0lucHV0SW5kaWNlcyYmdGhpcy5mb2N1c0lucHV0SW5kaWNlcy5pbmNsdWRlcyhlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtZXhlY3V0aW9ucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChlZyw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnZpZXdQb3J0PXIuZmlyc3QpfX0saW5wdXRzOntudW1HcmFwaEV4ZWN1dGlvbnM6Im51bUdyYXBoRXhlY3V0aW9ucyIsZ3JhcGhFeGVjdXRpb25EYXRhOiJncmFwaEV4ZWN1dGlvbkRhdGEiLGdyYXBoRXhlY3V0aW9uSW5kaWNlczoiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIixmb2N1c0luZGV4OiJmb2N1c0luZGV4Iixmb2N1c0lucHV0SW5kaWNlczoiZm9jdXNJbnB1dEluZGljZXMifSxvdXRwdXRzOntvblNjcm9sbGVkSW5kZXhDaGFuZ2U6Im9uU2Nyb2xsZWRJbmRleENoYW5nZSIsb25UZW5zb3JOYW1lQ2xpY2s6Im9uVGVuc29yTmFtZUNsaWNrIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJncmFwaC1leGVjdXRpb25zLWNvbnRhaW5lciJdLFsxLCJncmFwaC1leGVjdXRpb25zLXRpdGxlIl0sWyJpdGVtU2l6ZSIsIjM4IiwiY2xhc3MiLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIiw0LCJuZ0lmIl0sWyJpdGVtU2l6ZSIsIjM4IiwxLCJncmFwaC1leGVjdXRpb25zLXZpZXdwb3J0IiwzLCJzY3JvbGxlZEluZGV4Q2hhbmdlIl0sWyJjbGFzcyIsInRlbnNvci1jb250YWluZXIiLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMSwidGVuc29yLWNvbnRhaW5lciJdLFsxLCJ0ZW5zb3ItaXRlbSIsMywibmdDbGFzcyJdLFsxLCJncmFwaC1leGVjdXRpb24taW5kZXgiXSxbImNsYXNzIiwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsiY2xhc3MiLCJ0ZW5zb3ItaXRlbSJdLFsiZGF0YUxvYWRpbmciLCIiXSxbMSwiZ3JhcGgtZXhlY3V0aW9uLWZvY3VzIl0sWzEsInRlbnNvci1uYW1lLWFuZC1vcC10eXBlIl0sWzEsInRlbnNvci1uYW1lIiwzLCJ0aXRsZSIsImNsaWNrIl0sWzEsIm9wLXR5cGUiXSxbMywiZGVidWdUZW5zb3JWYWx1ZSIsNCwibmdJZiJdLFszLCJkZWJ1Z1RlbnNvclZhbHVlIl0sWzEsImxvYWRpbmctc3Bpbm5lciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpLEEoMiksdigpLEUoMyxzQmUsMiwxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiLDIpLHYoKSksMiZlJiYoQygyKSxqZSgiIEdyYXBoIEV4ZWN1dGlvbnMgKCIsaS5udW1HcmFwaEV4ZWN1dGlvbnMsIikgIiksQygxKSx5KCJuZ0lmIixudWxsIT09aS5udW1HcmFwaEV4ZWN1dGlvbnMmJmkubnVtR3JhcGhFeGVjdXRpb25zPjApKX0sZGVwZW5kZW5jaWVzOltGbixCZSxJUCxiMix4MixlZ10sc3R5bGVzOlsnLmdyYXBoLWV4ZWN1dGlvbnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjhweDtwYWRkaW5nLWxlZnQ6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9ucy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5ncmFwaC1leGVjdXRpb24tZm9jdXNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1yaWdodDo0cHg7dGV4dC1hbGlnbjpyaWdodDt3aWR0aDo0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncmFwaC1leGVjdXRpb24taW5kZXhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JhcGgtZXhlY3V0aW9uLWluZGV4W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JhcGgtZXhlY3V0aW9ucy10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowIDVweCAzcHggLTNweCAjY2NjO3BhZGRpbmctYm90dG9tOjVweH0uZ3JhcGgtZXhlY3V0aW9ucy12aWV3cG9ydFtfbmdjb250ZW50LSVDT01QJV17ZmxleC1ncm93OjE7Zm9udC1zaXplOjEycHg7d2lkdGg6MTAwJTtvdmVyZmxvdy14OmhpZGRlbn0uaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjA5OX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuaW5wdXQtb2YtZm9jdXNbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ubG9hZGluZy1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30ub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZWNlZmYxO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTRweDtsaW5lLWhlaWdodDoxNHB4O3BhZGRpbmc6MXB4IDNweDt3aWR0aDptYXgtY29udGVudDtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2t9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0udGVuc29yLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGVuc29yLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7aGVpZ2h0OjM4cHg7bGluZS1oZWlnaHQ6MzhweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246bWlkZGxlO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC50ZW5zb3ItaXRlbVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXI6bm9uZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcjtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGluZS1oZWlnaHQ6MTZweDttYXJnaW46MnB4IDAgMXB4O21heC13aWR0aDpjYWxjKDEwMCUgLSAycHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAgMnB4O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udGVuc29yLW5hbWVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MXB4IHNvbGlkICNjNmNhZDF9LnRlbnNvci1uYW1lLWFuZC1vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXJlY3Rpb246cnRsO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLXJpZ2h0OjhweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjI0MHB4fWRlYnVnLXRlbnNvci12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOjJweCAwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksa3JlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubnVtR3JhcGhFeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUodnQoSXcpKSx0aGlzLmdyYXBoRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHZ0KG9VKSksdGhpcy5ncmFwaEV4ZWN1dGlvbkluZGljZXMkPXRoaXMuc3RvcmUucGlwZSh2dChKKEl3LGk9PjA9PT1pP251bGw6QXJyYXkuZnJvbSh7bGVuZ3RoOml9KS5tYXAoKHIsbyk9Pm8pKSkpLHRoaXMuZm9jdXNJbmRleCQ9dGhpcy5zdG9yZS5waXBlKHZ0KHNVKSksdGhpcy5mb2N1c0lucHV0SW5kaWNlcyQ9dGhpcy5zdG9yZS5waXBlKHZ0KHhyZSkpfW9uU2Nyb2xsZWRJbmRleENoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFF2KHtpbmRleDplfSkpfW9uVGVuc29yTmFtZUNsaWNrKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goS3YoZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyJdXSxkZWNsczo2LHZhcnM6MTUsY29uc3RzOltbMywibnVtR3JhcGhFeGVjdXRpb25zIiwiZ3JhcGhFeGVjdXRpb25EYXRhIiwiZ3JhcGhFeGVjdXRpb25JbmRpY2VzIiwiZm9jdXNJbmRleCIsImZvY3VzSW5wdXRJbmRpY2VzIiwib25TY3JvbGxlZEluZGV4Q2hhbmdlIiwib25UZW5zb3JOYW1lQ2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImdyYXBoLWV4ZWN1dGlvbnMtY29tcG9uZW50IiwwKSxQKCJvblNjcm9sbGVkSW5kZXhDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2Nyb2xsZWRJbmRleENoYW5nZShvKX0pKCJvblRlbnNvck5hbWVDbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UZW5zb3JOYW1lQ2xpY2sobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJudW1HcmFwaEV4ZWN1dGlvbnMiLFUoMSw1LGkubnVtR3JhcGhFeGVjdXRpb25zJCkpKCJncmFwaEV4ZWN1dGlvbkRhdGEiLFUoMiw3LGkuZ3JhcGhFeGVjdXRpb25EYXRhJCkpKCJncmFwaEV4ZWN1dGlvbkluZGljZXMiLFUoMyw5LGkuZ3JhcGhFeGVjdXRpb25JbmRpY2VzJCkpKCJmb2N1c0luZGV4IixVKDQsMTEsaS5mb2N1c0luZGV4JCkpKCJmb2N1c0lucHV0SW5kaWNlcyIsVSg1LDEzLGkuZm9jdXNJbnB1dEluZGljZXMkKSl9LGRlcGVuZGVuY2llczpbT3JlLEdlXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKTtmdW5jdGlvbiBjQmUobix0KXsxJm4mJihfKDAsInNwYW4iKSxBKDEsIiBPdXRwdXQgIiksdigpKX1mdW5jdGlvbiB1QmUobix0KXsxJm4mJihfKDAsInNwYW4iKSxBKDEsIiBJbnB1dCAiKSx2KCkpfWZ1bmN0aW9uIGRCZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw2KSgxLCJzcGFuIiw3KSxFKDIsY0JlLDIsMCwic3BhbiIsOCksRSgzLHVCZSwyLDAsInNwYW4iLDgpLHYoKSxBKDQpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJuZ1N3aXRjaCIsZS5raW5kKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsImlucHV0IiksQygxKSx5KCJuZ1N3aXRjaENhc2UiLCJjb25zdW1lciIpLEMoMSksamUoIiBzbG90OiAiLGUuc2xvdCwiICIpfX1mdW5jdGlvbiBwQmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsOSksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiAiLGUub3BEYXRhLm9wX3R5cGUsIiAiKX19ZnVuY3Rpb24gaEJlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiwxMCksQSgxLCIgKE9wIGluZm8gdW5hdmFpbGFibGUuKSAiKSx2KCkpfXZhciBmQmU9ZnVuY3Rpb24obil7cmV0dXJuW25dfSxGcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25PcE5hbWVDbGljaz1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtb3AiXV0saW5wdXRzOntraW5kOiJraW5kIixvcE5hbWU6Im9wTmFtZSIsc2xvdDoic2xvdCIsb3BEYXRhOiJvcERhdGEifSxvdXRwdXRzOntvbk9wTmFtZUNsaWNrOiJvbk9wTmFtZUNsaWNrIn0sZGVjbHM6OSx2YXJzOjcsY29uc3RzOltbMSwib3AtY29udGFpbmVyIl0sWzEsImlucHV0LXRlbnNvci1uYW1lIl0sWzEsIm9wLW5hbWUiLDMsIm5nQ2xhc3MiLCJjbGljayJdLFsiY2xhc3MiLCJzbG90Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wLXR5cGUiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3BJbmZvTWlzc2luZyIsIiJdLFsxLCJzbG90Il0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJvcC10eXBlIl0sWzEsIm9wLWluZm8tbWlzc2luZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiYnV0dG9uIiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25PcE5hbWVDbGljay5lbWl0KHtvcF9uYW1lOmkub3BOYW1lfSl9KSxfKDMsInNwYW4iKSxBKDQpLHYoKSgpLEUoNSxkQmUsNSw0LCJkaXYiLDMpLHYoKSxFKDYscEJlLDIsMSwiZGl2Iiw0KSxFKDcsaEJlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsNSxxdCksdigpKSwyJmUpe2xldCByPSRlKDgpO0MoMikseSgibmdDbGFzcyIsT24oNSxmQmUsInNlbGYiPT09aS5raW5kPyJzZWxmLW9wLW5hbWUiOiIiKSksQygyKSx5dChpLm9wTmFtZSksQygxKSx5KCJuZ0lmIiwic2VsZiIhPT1pLmtpbmQpLEMoMSkseSgibmdJZiIsdm9pZCAwIT09aS5vcERhdGEpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0ZuLEJlLENyLFVyXSxzdHlsZXM6Wycub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm9wLW5hbWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoycHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjFweCAzcHggI2VlZTtjdXJzb3I6cG9pbnRlcjttYXJnaW46MCA1cHggMCAwO3BhZGRpbmc6MnB4IDZweDt0ZXh0LWFsaWduOnJpZ2h0O3dpZHRoOjIwMHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MnB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MXB4IDNweCAjNzU3NTc1fS5vcC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze291dGxpbmU6MH0ub3AtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXI6MnB4IHNvbGlkICNmZmQzYjJ9Lm9wLWluZm8tbWlzc2luZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZTtwYWRkaW5nOjA7dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3doaXRlLXNwYWNlOnByZS13cmFwfS5vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOjB9Lm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VjZWZmMTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1mYW1pbHk6IlJvYm90byBNb25vIixtb25vc3BhY2U7Zm9udC1zaXplOjEwcHg7aGVpZ2h0OjE0cHg7bGluZS1oZWlnaHQ6MTRweDtwYWRkaW5nOjFweCAzcHg7d2lkdGg6bWF4LWNvbnRlbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDozcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzQ1NWE2NH0uc2VsZi1vcC1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO3RleHQtZGVjb3JhdGlvbjpub25lfS5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zbG90W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsb3RbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSddfSksbn0pKCk7ZnVuY3Rpb24gZ0JlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksQSgyKSx2KCksXygzLCJncmFwaC1vcCIsMTUpLFAoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoMyk7cmV0dXJuIHNlKG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpyLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSkpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPXQuaW5kZXg7QygyKSxqZSgiSW5wdXQgc2xvdCAiLGksIjoiKSxDKDEpLHkoImtpbmQiLCJpbnB1dCIpKCJvcE5hbWUiLGUub3BfbmFtZSkoInNsb3QiLGUub3V0cHV0X3Nsb3QpKCJvcERhdGEiLGUuZGF0YSl9fWZ1bmN0aW9uIF9CZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxMSkoMSwiZGl2IiksRSgyLGdCZSw0LDUsImRpdiIsMTIpLHYoKSgpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0Zvck9mIixlLmlucHV0T3BzKX19ZnVuY3Rpb24gdkJlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDE2KSxBKDEsIiAoVGhpcyBvcCBoYXMgbm8gaW5wdXQgdGVuc29yLikgIiksdigpKX1mdW5jdGlvbiB5QmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDIzKSgxLCJncmFwaC1vcCIsMTUpLFAoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoNCk7cmV0dXJuIHNlKG8ub25HcmFwaE9wTmF2aWdhdGUuZW1pdCh7b3BfbmFtZTpyLm9wX25hbWUsZ3JhcGhfaWQ6by5ncmFwaElkfSkpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtDKDEpLHkoImtpbmQiLCJjb25zdW1lciIpKCJvcE5hbWUiLGUub3BfbmFtZSkoInNsb3QiLGUuaW5wdXRfc2xvdCkoIm9wRGF0YSIsZS5kYXRhKX19ZnVuY3Rpb24gYkJlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE5KSgxLCJkaXYiLDIwKSxBKDIpLF8oMywic3BhbiIpLEFUKDQsMjEpLHYoKSxBKDUsIikgIiksdigpLEUoNix5QmUsMiw0LCJkaXYiLDIyKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4O0MoMiksWHAoIiBPdXRwdXQgc2xvdCAiLGksIjogKCIsZS5sZW5ndGgsIiAiKSxDKDIpLEt4KGUubGVuZ3RoKSxJVCg0KSxDKDIpLHkoIm5nRm9yT2YiLGUpfX1mdW5jdGlvbiB4QmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTcpKDEsImRpdiIpLEUoMixiQmUsNyw0LCJkaXYiLDE4KSx2KCkoKSksMiZuKXtsZXQgZT1TKDIpO0MoMikseSgibmdGb3JPZiIsZS5jb25zdW1lck9wcyl9fWZ1bmN0aW9uIENCZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyNCksQSgxKSxfKDIsInNwYW4iKSxBVCgzLDI1KSx2KCksQSg0LCIgYW5kIG5vIGNvbnN1bWVyLikgIiksdigpKSwyJm4pe2xldCBlPVMoMik7QygxKSxqZSgiIChUaGlzIG9wIGhhcyAiLGUub3BJbmZvLmNvbnN1bWVycy5sZW5ndGgsIiBvdXRwdXQgIiksQygyKSxLeChlLm9wSW5mby5jb25zdW1lcnMubGVuZ3RoKSxJVCgzKX19ZnVuY3Rpb24gTUJlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiksRSgxLF9CZSwzLDEsImRpdiIsNCksRSgyLHZCZSwyLDAsIm5nLXRlbXBsYXRlIixudWxsLDUscXQpLF8oNCwiZGl2Iiw2KSg1LCJkaXYiLDcpLEEoNiwiT3A6IiksdigpLF8oNywiZ3JhcGgtb3AiLDgpLFAoIm9uT3BOYW1lQ2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKTtyZXR1cm4gc2Uoby5vbkdyYXBoT3BOYXZpZ2F0ZS5lbWl0KHtvcF9uYW1lOnIub3BfbmFtZSxncmFwaF9pZDpvLmdyYXBoSWR9KSl9KSx2KCkoKSxFKDgseEJlLDMsMSwiZGl2Iiw5KSxFKDksQ0JlLDUsMiwibmctdGVtcGxhdGUiLG51bGwsMTAscXQpLHYoKX1pZigyJm4pe2xldCBlPSRlKDMpLGk9JGUoMTApLHI9UygpO0MoMSkseSgibmdJZiIsci5pbnB1dE9wcy5sZW5ndGg+MCkoIm5nSWZFbHNlIixlKSxDKDYpLHkoImtpbmQiLCJzZWxmIikoIm9wTmFtZSIsci5vcEluZm8ub3BfbmFtZSkoIm9wRGF0YSIsci5vcEluZm8pLEMoMSkseSgibmdJZiIsci50b3RhbE51bUNvbnN1bWVycz4wKSgibmdJZkVsc2UiLGkpfX1mdW5jdGlvbiB3QmUobix0KXsxJm4mJihfKDAsInNwYW4iLDI2KSxBKDEsIiAoT3AgaW5mbyB1bmF2YWlsYWJsZS4pICIpLHYoKSl9ZnVuY3Rpb24gU0JlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDI3KSxBKDEsIiBObyBncmFwaCBvcCBzZWxlY3RlZC4gQ2xpY2sgYSB0ZW5zb3IgbmFtZSBpbiB0aGUgR3JhcGggRXhlY3V0aW9ucyB0YWJsZSB0byB2aWV3IHRoZSBuZWlnaGJvcmhvb2Qgb2YgdGhlIHRlbnNvcidzIG9wIGluIGl0cyBncmFwaC4gIiksdigpKX12YXIgTnJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uR3JhcGhPcE5hdmlnYXRlPW5ldyBHfWdldCBncmFwaElkKCl7cmV0dXJuIHRoaXMub3BJbmZvLmdyYXBoX2lkc1t0aGlzLm9wSW5mby5ncmFwaF9pZHMubGVuZ3RoLTFdfWdldCB0b3RhbE51bUNvbnN1bWVycygpe3JldHVybiB0aGlzLmNvbnN1bWVyT3BzLnJlZHVjZSgoZSxpKT0+ZStpLmxlbmd0aCwwKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZ3JhcGgtY29tcG9uZW50Il1dLGlucHV0czp7b3BJbmZvOiJvcEluZm8iLGlucHV0T3BzOiJpbnB1dE9wcyIsY29uc3VtZXJPcHM6ImNvbnN1bWVyT3BzIn0sb3V0cHV0czp7b25HcmFwaE9wTmF2aWdhdGU6Im9uR3JhcGhPcE5hdmlnYXRlIn0sZGVjbHM6OSx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxpLHI7cmV0dXJuIHQ9JGxvY2FsaXplYDrikJ9mZTU1ZjliMTkzZWEyMGFhZTViNTYzNWU2OGQ5Mzg2NTAzODQ3NzQ24pCfNDk1NTEzMzc0MDg0MTI5OTg1MTp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7Y29uc3VtZXJ9ID0xIHtjb25zdW1lcn0gb3RoZXIge2NvbnN1bWVyc319YCx0PVBUKHQse1ZBUl9QTFVSQUw6Ilx1ZmZmZDBcdWZmZmQifSksZT0kbG9jYWxpemVgOuKQn2JhYTQ2MGUyZjJiODU3ZTI2MjkyYjI0NmZjMThhZTBlYTliNWU1MzfikJ81NTU2MzQwMzQzODUwMTY1NTE2OiAke3R9OklDVTpgLGk9JGxvY2FsaXplYDrikJ82YWE3NWY2MjdlMGRjMTYxNTBlZjQ0ODQ2NGUwYzg1N2FhYTBkYzE44pCfNTE1NjcxMjkzNTE1MDU4Njg3ODp7VkFSX1BMVVJBTCwgcGx1cmFsLCA9MCB7dGVuc29yfSA9MSB7dGVuc29yfSBvdGhlciB7dGVuc29yc319YCxpPVBUKGkse1ZBUl9QTFVSQUw6Ilx1ZmZmZDBcdWZmZmQifSkscj0kbG9jYWxpemVgOuKQnzg5MzQ3NmMyYzQyMWNlZTQ3NjYzYzk3MzJmYTQxYTc1MGQzYTczZGbikJ8yNDYwNjcwNTM3MzUxNjI2MzQ6ICR7aX06SUNVOmAsW1sxLCJncmFwaC1zdHJ1Y3R1cmUtY29udGFpbmVyIl0sWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsib3BJbmZvTWlzc2luZyIsIiJdLFsibm9PcEZvY3VzZWQiLCIiXSxbImNsYXNzIiwiaW5wdXRzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0lucHV0cyIsIiJdLFsxLCJzZWxmLW9wLWNvbnRhaW5lciJdLFsxLCJzZWxmLW9wLWhlYWRlciJdLFszLCJraW5kIiwib3BOYW1lIiwib3BEYXRhIiwib25PcE5hbWVDbGljayJdLFsiY2xhc3MiLCJjb25zdW1lcnMtY29udGFpbmVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vQ29uc3VtZXJzIiwiIl0sWzEsImlucHV0cy1jb250YWluZXIiXSxbImNsYXNzIiwiaW5wdXQtb3Atc2VjdGlvbiIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImlucHV0LW9wLXNlY3Rpb24iXSxbMSwiaW5wdXQtc2xvdC1oZWFkZXIiXSxbMywia2luZCIsIm9wTmFtZSIsInNsb3QiLCJvcERhdGEiLCJvbk9wTmFtZUNsaWNrIl0sWzEsImlucHV0cy1jb250YWluZXIiLCJuby1pbnB1dHMtaW5kaWNhdG9yIl0sWzEsImNvbnN1bWVycy1jb250YWluZXIiXSxbImNsYXNzIiwic2xvdC1jb25zdW1lcnMtY29udGFpbmVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic2xvdC1jb25zdW1lcnMtY29udGFpbmVyIl0sWzEsInNsb3QtY29uc3VtZXJzLWhlYWRlciJdLGUsWyJjbGFzcyIsImNvbnN1bWVyLXNlY3Rpb24iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb25zdW1lci1zZWN0aW9uIl0sWzEsIm9wLWNvbnN1bWVycy1jb250YWluZXIiXSxyLFsxLCJvcC1pbmZvLW1pc3NpbmciXSxbMSwibm8tb3AtZm9jdXNlZCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIpKDEsImRpdiIpLEEoMiwiR3JhcGggU3RydWN0dXJlIiksdigpLF8oMywiZGl2IiwwKSxFKDQsTUJlLDExLDcsImRpdiIsMSksdigpLEUoNSx3QmUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLHF0KSxFKDcsU0JlLDIsMCwibmctdGVtcGxhdGUiLG51bGwsMyxxdCksdigpKSwyJmUpe2xldCByPSRlKDgpO0MoNCkseSgibmdJZiIsbnVsbCE9aS5vcEluZm8pKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W2RuLEJlLEZyZV0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmNvbnN1bWVycy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctYm90dG9tOjVweDtvdmVyZmxvdy14OmF1dG87d2hpdGUtc3BhY2U6bm93cmFwfS5jb25zdW1lci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjo1cHggMH0uZ3JhcGgtc3RydWN0dXJlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7b3ZlcmZsb3cteTphdXRvO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5wdXRzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO21hcmdpbi10b3A6NXB4O292ZXJmbG93LXg6YXV0bztwYWRkaW5nLWJvdHRvbTowO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5wdXQtb3Atc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4xMik7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjVweDtwYWRkaW5nLWJvdHRvbTo1cHh9LmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYwOTk7bWFyZ2luLWJvdHRvbTo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmlucHV0LXNsb3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlNjUxMDB9LmlucHV0LXRlbnNvci1uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO3doaXRlLXNwYWNlOm5vd3JhcH0ubm8tb3AtZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheTtmb250LWZhbWlseToiUm9ib3RvIixBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDt3aGl0ZS1zcGFjZTpub3JtYWx9LnNlbGYtb3AtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDpib2xkO21hcmdpbi1ib3R0b206NXB4fS5zZWxmLW9wLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTIpO3BhZGRpbmctYm90dG9tOjVweH0uc2xvdC1jb25zdW1lcnMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEyKTtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6NXB4O3BhZGRpbmctdG9wOjVweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnNsb3QtY29uc3VtZXJzLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksTHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMub3BJbmZvJD10aGlzLnN0b3JlLnBpcGUodnQobFUpKSx0aGlzLmlucHV0T3BzJD10aGlzLnN0b3JlLnBpcGUodnQoY1UpKSx0aGlzLmNvbnN1bWVyT3BzJD10aGlzLnN0b3JlLnBpcGUodnQoQ3JlKSl9b25HcmFwaE9wTmF2aWdhdGUoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChadihlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1ncmFwaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJvcEluZm8iLCJpbnB1dE9wcyIsImNvbnN1bWVyT3BzIiwib25HcmFwaE9wTmF2aWdhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImdyYXBoLWNvbXBvbmVudCIsMCksUCgib25HcmFwaE9wTmF2aWdhdGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uR3JhcGhPcE5hdmlnYXRlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoIm9wSW5mbyIsVSgxLDMsaS5vcEluZm8kKSkoImlucHV0T3BzIixVKDIsNSxpLmlucHV0T3BzJCkpKCJjb25zdW1lck9wcyIsVSgzLDcsaS5jb25zdW1lck9wcyQpKX0sZGVwZW5kZW5jaWVzOltOcmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLEJyZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbmFjdGl2ZS1jb21wb25lbnQiXV0sZGVjbHM6NTQsdmFyczowLGNvbnN0czpbWzEsImNvbnRhaW5lciJdLFsxLCJ0aXRsZSJdLFsxLCJjb2RlIl0sWzEsImFyZyJdLFsxLCJleGhpYml0cy1jb250YWluZXIiXSxbMSwiZXhoaWJpdCJdLFsxLCJzY3JlZW5zaG90Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUFveUhwVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaeHBkaHk1Y29YL1l4VmVBdVpoT1JnQzUzZ0hYcjYvaTJKcmVtcXJuKzFXaTZTS3hVd2tFSEdIUUlETy91cy9yL3NQL2h1dFpaZEw2M1hVNnZrdmp6emk1SXZ1UC8rTjl6SDQvRDYrLzFMOStpcjgvTHI3OW8zSTU2UjNmcjdSNXVkem1MeGV2di9BWC9jSTYrZlhYZi82VHV4ZkYvcjZCaGYrakVCMzF0Zm54MEh5ZXZ5OEh2TFhoWVo5dnFpanR4K0h1cjR1dEwvZStJYnk5VGQvRzlibmsvN3RmbnFoTVV1bmNLTVVvNldRL1B1WVB5TkluNytUdisxOWpMd3Y4TnBNS1FYMytmUjFNU2JrcDhmNzY3UDNQMDdRVDVQODExZnUxOW4vOXRVdmt4L24xK3ZwbDdtc1gzUGs2KysvRWNvdnI2ZHZ0NGsvaGNPM0VjV2Z2M0Y3elAveU9GOS83ejM5WHZzODNjeVZHYTFmRWZVbSs2OFowaHNYVTU3ZWoxWCtOUDRXdm03dnorQlA5OU52bHZ6NDdSZC9kaGdoc2lyWGhSeE9tT0VHZTU5MzJBd3hSNHVOenpIdW1ONXJQYlU0NGs1YXA2dy80Y2FXUmpxcHMyNDdtbVBOY29yZnhoTGVmY2U3M3c2ZE81L0FXMlBnWWxycXYvM2ovcWR2L2p0LzNMMWJVeFI4L3paWGpDc3FyaG1HVms0ZmVSZExFTzdYdXBVM3dYLzkrVnArLzBQOEVLcXNZSG5UM0huQTZkZm5FcXVFNzdHVjNqb24zbGY0L0ZuajROcjV1Z0JUeEwwTGd3bUpGZkExcEJKcThDM0dGZ0x6MkZtZ3ljaGp5bkd4QXFHVWVCaGt6Q25WNkZyc1VmZm1aMXA0NzQwbDFxaVh3U1lXb3FSS2JuVldhTEpZT1JmaXArVk9ETTJTU2k2bDFOSktkMldVV1ZQTnRkUmFXeFhJelpaYWJxWFYxbHB2bzgyZWV1NmwxOTU2NzZQUEVVY0NBOHVvbzQwK3hwZ3p1c21OSnRlYXZIL3l5b29ycmJ6S3FxdXR2c2FhbS9EWmVaZGRkOXQ5anoxUFBPa0FFNmVlZHZvWloxcHdCbEpZdG1MVm1uVWJOaSt4ZHRQTnQ5eDYyKzEzM1BsdDFiNVc5Vi8rL0J1ckZyNVdMYjZWMHZ2YXQxWGpWZGZhWDVjSWdwT2lOV1BGWWc2c2VOTUtFTkJSYStaN3lEbHE1YlJtZmtTU29rUUdXYlEyN2dTdEdFdVlMY1J5dzdlMSs3NXkvMmpkWE9uL2FOM2luMWJPYWVuK1AxYk9zWFQvdW02L1diVWpudHR2eFQ1WnFEbjFpZXk3Wlp5NDNJNXgxVExudEpsYVMyWHVGWE1MYVplUVd6MjFybnFCazl2UEx0M0h4cmU2WjVZUG5NTWtITDl5UGFIb1FyMm1mT1B4RTNoZnBkMDEwMkZwazU2eU00NjlUcjY1MzFVWUxaY0cvODQ4TzdSajNMU3N1RmRZNXRvMG5pdWxmWG5rbHZJK25xUXNCd0JkZlc4bWRkOFdvbStzWk9vOTU1Nys0b1lrS0w5bG5qWmpKeUQ1T0hWem02V3VXYzVjWlplVEp5bnZ6Zk80MlljNlJvOFJyU0dTUG5sTVMyM25jUW0xZkkvQ3hhVWVUaTN3ZGRzZ3d0cDM3YnB1eU1YYVliSnJ2MVlBN3VYVGFjYlQ1ZERhM0t6RENtMHlmNVV4TTMzYjVRazloRjFuNGFaM1NSU0VzMjhmeldJNlZtZUl5V3hzNDFxK3JoN1dPQzBhVnpEaXVLL0dQQkVRd1NtSkNPbit4RVJhWTk3TTBFYmJ2aHppdG5heW9MR0VQTUpzdTFwaWtRZmdOY3RsNlhzSTF0Zk5saDF6M0c4b2RwS0Z3Y01odXk2UDRsRVRRT0h1TTQyeTdCN05TQ0lPVDdwOVh5WS9IT1gyUWlLMWZSWnoxSFlFT1hpWWZrck4rYVJsdS9oVmZSK1JtR1J0eVRJN25abW9pY2c3L3VaeUQ4RzlEems2RW9Ob3NhR1BhZ3g1WlJLTmNZWjhXem43aUF2UDliUFpLR1lrSnZjTlBORDFuWWMrUENSd1BZMVF5SER0YXRYYzZyWEN4SmRKYlpPUk1oZVZkTEIrYTB1Um14SVJoY2xrMk9lMGJvY3c3aXlFSitaelZNRHlnZitkeE4yWWVzcnJyL1hUeU5pOVdwbjU5TTAwM1dPTkJTWVZFdmRWNkJhdUhQWktERE5XR3hWWUtiZTRXRWNTY0d3K0U2RWt4c25KMEJNOXRCS1l0NkFiVnoxT0dndWdJZmZ2SEVUNkpGb0w0d1Fjem1DeUs4eldTS01haHdmSHlHR0drcVlHRU5ZQlRuT0RqTXRjWnhGWTJiWVZjQU9RSTJJaHQ3dU5wU1JGOWtSQ2RDWVlQT1RyR3lBL1ZyY3VZbUhjWGErRm5SbHlPWW5adFZEUzNqd09vZHB0U2ZBa3dVOHlOeTZaMVhqQUthQll1Wit3aGJVa0ZBaGFBL1JKRnZvK1FRVmJBekN1YlNjRm95ZGtKcE4vYmlIbUhJSE90d3VodG5kT2UwbUV3UWZMRzhoUjB3Z2xLeFJKMjJKeEUxQ0RmTjRUZXJkYndFREd5UFZXZERzdEFHTzJDOExiNkMvbVJnUExtSmg0Z0tyV3p5U21nZjRGRmxmd2o1Y0pVRkRrS2t3T2tYUG5jWTFaSmdLUEVWYWdHNm5Rb0pTSWRrc3hkOFZRTzFteStTNGttUzJGeEJZRVZOWXVseVFrWTVGUS9pRU1iNmNRanVPc2t4SmlsRmdETW96dzhLWUJHVkU2UmhpeDFoSTl0MjlrWHlkS1lqeXpMbFloSTJ1WXlwR0NnZU0xQVhmZUd5QTA4OU9rcUp0TWVtZjBpMXdITUY2K2YyNGtKTWhGaEVYUWlqZ0NIYkVPNUJ2OHVDLzVJbUlsQmdPTUNtb0NnMlA3VGFpQjNBRUFCVnRSbUpNRkppU3pxR0hBS2E3dUFVT1BCcHAwQm1TUTRnVU5JUk5mWVAxRlZOemMvRDRBZDBHZW9vMHJVdTBDWVJBQlR5cVd1Mms0VUJUdHRYaFdJd1JOckFzeERqSjNyZDFYN2NJS2hXdVRLU0FTZVNCbUgwaVl5dFdOc0FhaGhybWpsU1dWV0NMejJ6SkVPc1k5RlE2cnd2YmViVjhpa0V1a3NsbHlMTkNOc3phQTZLWUozeTJMQWN5MnVSZzB5WmhXbXVpVXhoVUVBTFZaSWxRUGNNVFZHelJQc3ZMb214Q2NGeEFhcldSQ3d0YTFDRW02VFBnUXV4aS9qYTZ2K0FBZUdzUWlxdzE4SXRwWVIwSmVPQ3dXQVVsTFl1cjJLc01JMG80bklOWE41VFNZK2h4WjlYUDVGcGRjQ2xlZ3NFUEhZR0poNFVqMlVsWWcvTnJsR25Nc0ptTWpWTGhaWUVYVGxtSURGVm1XeEpTam96QU94QmNxMllQbFVVNDNONUhVL1lhRnYvL3M5RVVHdGtzbWFyb0FkTzhMQlpFRVp5SWxka0pROVRCclJSOGNVcmJJWG9NUE1rM01TZ096Wm9GRjdCSVhGekZZR3FOWnJCeDZ5TE5lZ0VzaW4vcUd1SUt1amh6UEhUbXlSSENFQnJsbUVqUjhlOVRsa09kbmxhdFpQYXVud3dmam5kdzhJMW9XZEFiN295TWs0OUJlcVhIUEdNbGxFbU9VUnNBTU5FdzM1cWhBbndCeU9jZzhrRE9UbTJ2NFl3VWhnS0hJQktVRnBDRFBDL3F4dFA1NlVHUnNZTDhGQ1E4Z0xUbUlucDh4S1pBdWRNQ0k4c09YZkFPb0FMazhEZytWemphV3AwcEhuQWVSNkNsbTVhVFppNVhURjltL3oxN0VKMW1NY29sNUF4MU1KZUFPd2NxOTRCMlJQUWdKUWhqVUh1Z1ZwQnlNZEFXNEFHV1VPSFB0amdJOC8vS3lYbTNLQXd4dzJRTlFRaHFRTjhGU1gvbm9FYkdXNVdBOTBhN01yWGNMVzJWb1NpSXlDZWt2ckgrVHhLb0V6ZzFpMTBaVzJEcEc4Z3pZZDNkNEkyOG1nWFVoY3FSZGowTmlpWGVRQm1RK1M1b0JxMVNRQ1BQRnZNSUV6RzVGb3JTUitJaEc1QndpT3l0bUU3Q0FySjg3T1RpSU5ZUmx4Szl6MzVtWTk3b1dJZ2ZvWmthZ01TN000SUFKY0M0ZG5wbUJjb3VMNllkSHR0ZWt1Q0JzcXVlQUpPUTJxeW54REhzc3pBRFlUSERCQndobkhwVXZDSWNObVBZSjgyRUlnaEl6U053dmg2Mi9xRnN3aGFlVGtDSTBZQ3hTSFd5WCtyOURUbUtCVGowYjhFQTRzKzRzQ3graGM1K1JhWHZESW9oaFk3cTE1SHhqNEpwS1lXYUd5VUVVeURxc1JreDE2NTNGdU1JV3hYVkZ6RUdaQ0kyVEpYaGRRaHpBVzRDcHVBSHlaUlJvTkFZTC9SZ1AyNUVSZ1hrbzhHZmVpbStVUTBmQUxjS1NqT0NCUWJMdDluN2dhdkNUc2ZEY25qUzE5QVpWaUhuTUZvTWY4eFJCR3FnNUdCRGZnK2w2dzAxSndtNzB1MXRnV0ZXZ1hDUnpKdjJSTlEyR0o5WW5pTG13NTBSckpraU15UVZwMG9KS2tUUXFzczBuSm9ZbTNCVUYvRUM5Nk1ZRVNVTkc4MHp4elJEQWpHdG9PTHVxZFYrRTJFbGQ2b0g1S0tyVGxmRDEyWVZmWHZqMU04OEJrWnNuQ2xqeXhtSXlVRkszeXRvTkxROHFzVStFMXNCNElGZzJ1aDgrUkJJaEQ4a2VSRGh2d1MwdUZBVDJVK2FwaXE4Tm8xZ0RWZ1hycGVVRE0yRkljMENleDlDMHArUEJMNklSVGE0TStkMnJLeWRFeW54Z2pSMENia0VhTUFkVnl3dUpyTHhkczQ3c3hYemlVZ2xtRm40bHdCazdBZEhqYUpzUGJTMnV3R0FOeG9CZTBhR1FGN0JHSEhrVW9pY3hUd2ZSVkVFQkFJb2l2NHBGaWZEdEt3NG40UzBHRTl3SmRWZ1JiRHRuczhCNGlhVEtRSE1YSllJVzZ2SXNUSzdoaXVEQ25RRkpKZ3k5aDdjR1MwRzV4RnZKdnFhRWgzSW1TYmRJbWFxVWFNMXgzNHJjUVBmaUk5Q0h2VWFGanczbXNoS0FneGhINXNIT0FEazBFRlBBcVI1VmhkZlgwdkp4WmdlTUVpNmJxU01mRVM5ZHc3RWI1Q01sUjdrZDdEUElWN0lCRzd0RUNaZndHZzBGSEFjVGZnakE3YkErdDZKTUk0eHRrK25FVGx5L0lJMkRsMDFaTXIwVTRuVURuU2o5UFVIOUtqa1A5VndFSmk1aGdHK090NkFZS3ZpQmJDRE1NdFFtZHN6a3V5b3RkK0V2c1g1UU1JbVA2aVg0V1pLTzlRZWxPMkFaOFR1NU9HdzVVQXloK1FaUmpndVhiaUJOZEVsK0d3NktDNDFFa205aU9aQTgxYTlSMFp5NExpaEFoVzFXRm9Ja3NSdkUreWkxd1Zrek4yUmpCdCt3dGdTU0tndTZHM0d5QWVPN2hDbEhWb2hib1lhaWJKQk5Sd0EyNW83Y1JsZVN1MWMyaGNWbFpnRmcxcDB4bU9TMm5ad05hZ0dJV0JYUUVpV0ZZNjdnc0RMWlRUQzhOVlZCeUg5dUxXRjN5SHdNZlZSZDEwZklsREJEQmFhUzVsQlEvZTdtempRMndMWkMxNzhaMnovK3J2c2Z2bzNnSFppM3lkUlVLTHMyU1JDTWpPRkV2Q3BEeU1rNFR3RHplblRvNEh0NXRCVjVOdWdhVE45OFo0bTI4WWZwQ1dKc2Y4OGtmU2pJNmdUK0lrVENTSUF5dXJic0J0ZzVlRE5sL0dWdHdXcTFEWlYxZ2crZGpoQ3p3enlwTm9OMFFiNStnTFhVdnZRVjJnWDJSVmt0ZVV5RVZwbXFRbnZCSjgrR2ljZCs0VHdidW5RVDJ3RDVCV3R5UkE4TlZCdlBReURqSTlBYXI4YUFSV0FzanR4dkNFVjRFRy9qc1JGSFFrUUNFK2VoMFYvQktrbERYQlhRTU9GWFVWcGdGbVNuWWtadnFtNzhia1NBZEVTbkk2VEp4YmhOUG5ManBnMnNCSmNiTW1nOU0wOWlOenkyN2NCRkhYWlU4Z1I5eDNTcmFzRWlCbGJ3eFNYNEpXMFhrQ25rZUltSXhiTEZIK1RFNUNtWktXVkZHc2NqajNFdTRBZ0RJWUxSMkNVT3BBL0tESzJMWXVZOWV5cXVxeTM0NEY1TEI4T2xTN3lQY1dMSTdpMUVkZ0cxZmxWck9LbUdqTzhwUVdtdjJuaUlOeGd4NDdUUVF3dnpYUHd3SDZKUWlvczQzQis0K0Q3Z0JQQkk2WE5Scm9DSUdmS29xUkljaEVnNGlRQmgvWUpsblBUS0VCbFNDSFlES2h4a2tvVEdqM2hPd1d5UlN3Z3ozbTg1U0JrZkNGQWVoVnMycG9tWHFrejlRRUExK0FJS0Jmek5YY2djalRraE1xOEtDbjRra2hoQVJwWHJEUEM4eUJ5OHhBRk1aQmJPWkpjcWY0ZHd3NWloQ3RFaEpDM3hDUVpQUm92YjUyYUFPdmZuN2ZCSzBWY0JqVkZ3UEoybkl3NXNWN1FYREVKQUVFRW92Z2h5NG1tTk1iSlM0YXJZU3JxcS9uc21TNFg1Z3g4TGVuNkFIN3RNQldiZ3NmZFc5UlBraHNrTmtMdzVZdGNCSmN5MmFxd05UMEd1SGRZRHBUVnhtc3dmQUZRQitva3hJUUx3NDdWMjhKTTF4REdlY0ZGM0dlck95Y1dBQk9NdWlHZ0VFS3BxeUptUWF3Tks2VU9LR21JakVyYVBlRTlHdmJoQ1hUbDNNcEoxTkluZmlvaEEyeTFrUEs0UitZSU00NTFRVHVYZkNIT1ZFWkprUEpQVVdkSUxNR1JCckh5cjdBVjZIVTY0clRwWkttd3ZWSE1TYkhleGVndWJuVU92U09uRXh6RVFZeXQ2OFpMSENTQUxpVytDQkFWTWpzWVpuczZXamJ2SUFVTVdjR015cXdrSGtRZ2VFaXFxdmZDb3dQaVJlY0pUZGVVYmdnTGlPb1FJeVMzVFZGM1FzN0FpdmpPZnM5L1NvbTI0QzBzYUlZZUxvbXpuVlVISEVEa3o1cXg2K2V4NUF4ZXFRL2haZ1pGd3ROa2grY2c2VEdOdFRTVmY4TnkvRWgyb2craERQYitxSnZZblFNdkdjckVFUTdWNEx5ZTl0aHU0YnB4RHdBMmdWVkJCWHBWbk12L2pKMVhyQjgyRFp5RklYaS9CZUJMdUJUV0hZcS9JZWlRVW93TDh4ZGpucUp5QWRBdEYrUUZRc2taalNDVkRyVWkzaEhLekRJRmdzanpDbzhyd2t6M2pxdFRIdUYzRGlXT0U4YXhZSHV5b1NJSlVWSFg1N3JWQVE2MzlVQjFzVE92b1NEakdCazcrNjR2TnRVODBnSTJIR3VoQXhOclZac0VKMG1QTUlCR0tDR3h5cGZkZ0xTN1B0VU9kcWdocHg4WmpvVlIzTjJUaHJLNUNZK09CQ0xvMXZ5LzFSU0V5RGNrVytEZmpCKzlJamZqQWxTOUJ1bDRFbmJ4aTVTR1lReGVHOTdXK3FDeVc5dmFFa3IrOStFOC8vZTFIQmJ2dTY2ZGJUS28rQkZSeHJkdHZaQkI4cHZJTU1ZazZSR2FHcSsyZEZqc3FUb1Zuckkrc1hSZlYxNGlGR0JGenF0MGU2ZE5LbHRqV3JvQkM4RXJOR1FCenVEczBiM0QwMWc1RU9wWHBxcXJONExRclYzZmlDb0tpbzN1Z1JrZ1UwVG9BYzlJclJCRlpzaXpQZ3pNVzh4VFZLckEya0k1OEhzYTZFNWtXcjBzSnNBaHJxQm9DdjBraEpIU1dhb20vRzFsNFN2UG9WY1VKV1h1RkpnRVlHZkJVeE1aZmtoK2ZtOFl6MG9oNExBaGNva0pKUFdtVEVQQ3oxMjZxYW8zWmd5YUVRQnl3ekNJRW5mYTJ0MHBSOEF5YVBMM1NrWFF5Y3JxWG15S1lseU93d3Bmb1k3NUdPYUpBbURFWXZnRmRMeVN1dzk1RldFRlZ0Z3lLeGF6QkxQVDhsbWJFNlNIclMwaGVWWFNnSFltZXNRWXJJYWpKNXZGWVZzYkwvWTZFWVpwNHh1YUtlUkVtYUNaQm55bDg4R2FrWXpEdWM4Nkk4UENBWEJHVmJuaG1LaWc5cXh5em5CbUFQQkhqcUZrVG1zQjVWc2lKMXlReVpjWmhPU2dURUlBV3lIUVZmeG93d2t3RFdFQTBzdTRtd0lYVVRIUENtb0N0cXJSa2tyZ0tMREk1R1dBVHhzdFBocU9YVlpCQzdUaXNRWUIrTjZrRVpSdExLaFJFUnFPL0ZvTWxnUUU4bnBYd3cvc3hOaWdROXE0cXl1d2xtRVltWm5tUkhzbDlNa2RDUytVVnhMMzJFdTYrTUNMM2JDUUhJUWoxUWFYNGhBNXVwSkx4VUVIaUY0YXV6SzAyNmd4RnpqS0RnN1djakRNbjQ3UlpodHNrK3ZGM0NQMkw1Z0NwNFoybG5RazBIaUZmTVREY3E0b3FYY1owcXV3bnZRSTlWTmdYbGtsaHk2RmNaRE9HK3c2YnB5RC9zTHBIbXcvWXlDQ3IyN1kyK0haUCt5TFlJME1IdUNkaWhBdGdFd25aQ1Y1V3hBaEJLS09YQ3BGYVlvRmlYM0tRaXVRL09ZS2VaUVdRUE9wQVdOeDg1WXZiM3VvNVdOSVRnMEY2bVpJd2lxbzFoUWdKU3htTnQwSldGdEV2Y2hUV2tyUHlpMXdEMUhlOGVtTkVSblZ0MjE3cHE0a01aaDRZRXJvZmhCeWw5NlpLVmRjbU1oSUk1UTBxSTV6OHdXQTRlVjYwQzdPWjRNb3J6VVRLemp1Snk1MmFzT1lFN1J3aVJyVEZGQUxFS0psZVZVeU9qY1dmUkNaTVN3NlNNUVBnREYrN2NtSFBYM2NjL3Z6Wi9jMDNYbUhTRTV3L1NOMnZjdVV2cjZwSGpDZHlxa3lrbExDV2MyenNYY0tHSTduZ1FwQURhM0VhR05xVGdsSklBcC9Bc1FOTlVtUFR0cit4Rmp3Kzh2Z1FGUjFRZ05HeTdHWUNRbFJneTB3U3JwKzhnZUlJRER5c29UcDIyRThjVzBmanNjNE5FRzU0ZlRmbFdyVm5KamRWdER0ZEQ3SkxHYWlFdmQ2eWpKc0I3Smloc0hidkdkT2pLaG1rc3lDVEtOVStISFN2NG1Rd3dHbStUWCt5dFdFak5obUpvb0Z4MWdzMWZGR1Q3dUhua05mSnczS2RJR1ZjbUQwdWhNYmNJaWhNaUJuV2E4bUtTcVdOeXVPQm1WZktIQjJETnNaVHR6V0lrUnJYMVA0S3VLeFNMZmVPcmszeUdXbU8zMVB4a2ZqUk5oekQ1ejRCTHdwbUl6dTFWY2ZQQUgycURRTkhRTmxSdXd4UWMzS0pIcWdGY2VHbHF0MlUzaGx3V0RGQmZIaEcxSWdLOXlTanRPd2JBZ21PaDJNMlVMc2tMRlFKaUYvRk9ibDJtVlRVSVl6Ynh1RXlUTE5YcHFQRlZKQVBTdTVXNE9CbHFwS1JGZHJTYWRwSkNVYzRnaWk3M1NuQU1NQ0d4c0dPNTFLODRhb1hEOGZ6NTNhczdQSElTRnhZVkZCU0ZXaEZuaHRHeFpCbU1nVzhkK2lKZ1UwR0I0SGF1ckZmQUFQTXBuSWZRczJQaVhzYVVBYlVyRktBcWNoVWJ4bDNlaFUzVkF3MWRMc2pFTXRaU0VVaUorTVN4emI4T2pQVUNJUEpkR093eXArS2xYeDJmM3JEKzV6YlUwRS9FVno4K1ZYM2VUbXJDd0UxTE13SFNHUzNlVms4OHNjODQvTWJFZHIwZEw1b2llQWVpSm5iU1pwVG1TQkFpSHlwUS9VbVZvMmxlYzBPc29tZ2N1U3hRUzRpdmlnVUhTcS9Cay9VUnVJWkE4Q2l3UUdtYlpFSWhWbzVvbHl1dDBsc0VCQlhTSlRXeVcwcnQ4UWNUZlN6YmFmUzFsRlR5V2lWY0ZSUkNXN1dQdWtjUWxHWWtyUVA1RXdJNlBrQkFJajE0R21HaGp4QVNFT3VDekVLd2o1ZmpRcktoUWtpNmswYmhUdy9kQTZwUUp2RWc5NVRDVDZVTk0rTFdVcnlIS2ovaGhRblRSekFqT0pDWkdRWWE2bUtmREdKQUJONmZXdFBFZk84a3UyQ0xrRTlNT2NnUTVCcFNWUGtXREVMclk2dHpRT3k1THlaNTVIOXY0L1duOC91LzRyV24ralFoVjZBSU41ZWlCRDd2NG1tRGZlZUViQnYyQlkrYS9EYUdwb3p2NjRlZEs1MzBoandONFltTE1nV2FZcHJrTy9ydUpWVSt1enBaSytleWJtOGR1bXk5aENLWkRvNm5pa2g1VHI2d3FuSkROZ1p1QlQxVFhqVjdHQVhkV0FZd3Z1bzFZREFBeW40dVlsbkRiMUwzbFFWWVZHQy9hSWJOeFlDMkxQWCtZQXhSS1BhUmUwbGhMbEt2OU1EUmg2VTJFVzlVb0FBeHV5cWsyR3MwaHUyWjlaU0ZwTlIwVWNzT0pNV3NXVEF3bGpNUUZON0JSSitxV21reTZXaUFmak9QZ1Q0eEFWbStCb0l4b2JoNDlDVENQdnV3QmNHcHgzcUhMc3VMcS9aMVFnSm10WE5jc0ZhRFh2S2FuQVhWUlhVMHptMVNkQlU1c1hUSTBtU3d6S2poMC90WGIwNm5WREV0dkxvVU1aUkZZaEhyMWVsdmZESzR2QnZVTCtOak93Wmw4bEVBNnBMeG1ISTc5dTJld1Z4K2JKanIzcXZIV3ZFSWFsTDhpQjlHMUJ2dGNicFZRZGZvQUorQWZyN0NrRDN2dzdsbnlOWVl2UTNJZnhMeGUySEVQNFI0SWdUTUxJaFhtdFJpMTZPK0dQOGVDeUw5Y1pLVjVRdkQ0OVZxN2FySERpQzBCUEJYcVVjbkVCQ0E3SUEwRm1NV0FodGwzT2hzMnRsUFZ2SGZLcFhFZ0VhdWpvc0pyb1kwdUUyUFZlVlptQk5FQWpFUzB1WFpBV1hDaHNwNVJyVU10eng5QW9kbUNoT1JPWUdhSTh3Vjl4VlFHQitKRGVwL0ppdmpGaHFUTUNEZlJ6SDNSSVdNejJDSEtnWVRRVzhoVGhPRlFXMHNHVG9Eeit4eWwwTmZhQmNVaytiL2k0UURuN1Vaa2RoTlJIU1l6Z1ZHRGZ6K3ZiYTBVZmhVNlhFREJiKzc5cHpqM0hYcmRSVnFWY0RrTFNlNGg2aUdyRXd3SURBWk1QUFVIcDdaU3A4UllqU1hnSmw4bE43bnR5bG81SDBzNEM4dXFud2ZKZ1dGYXR0cVAyTlZHcGdkbjZkWXZBeXdrcjlrdHEzU3lKbmlBT1JvSjJEQTkxalFmRVRKS1J5UXJZOVk3MTRYbEQ0WXAzZFpMVm11bjZwbFEybHN4VHoxWU1HNnJVaXNDN1NYcDE3dnF1dmkxRUFhVW5tVUFvR3hjNlRzL0xaZVF6SzNsUGNienEzRUNmbUZPL2VGay96UXdyOEtjTGRQMDJCUDJXQSs2NjVKekZBa0JiMWRCZ3FHWGFDdHZkRDlMWXdITkFpR01lSG91YlZYNkRkL1F1MkEzU1laZ1QweHVnRm1lMEE2azBZTDJybkhpU0RIOHBTR0dzbi9WV2RtV1duTWlnc2dEZ3ZTZDJDVzVvV1RReG9FdnBGRUJkR1pPSDUzMlFFTW9EZlZIb2xKcXdrTlZXbjFZZER6a0VwRXYvMXFwemVFWUpqYWRkaEVwblZ0NkZPeTJxM1JJWGNBUm1uOW82STJ5RXNaOXl2NThnVmJRL2tHbGxwaG5ZelNaS2x1NWNoR2dyM0s0WG5BUno1Qm1HNk10azJjTll3aVhaUXlBaThPQ0RndUFwRVB0Uk9jTkRPZlRMUlJPQmMrTHJJRFhpQ0pIMGFkSExnempDWmFyQy9nOHIxWEJnc1pneGpQbTVuOWZpTk96TGVEOEhEaTY5ZlM1VkV5R0U4ejRwMXFRbkIzOVh3ZVJQTElRSFA4aFhiMEoxNk5Sd2pWL0Z0bWtwcGlIMVNLbDMxY1FIdnh5Y216QWg0RldiZzRueW55ZzdFK1ZCaGJEUVB3aStHYjhBSXBrZm9yaklENlExV29heUREaFBjWHRSQWhzSTI2V3Z0cDVkWkEwNFZGY2VqcVg5cGtDcHEwNTdOWmRidTlsZnh2cjNKREtzWGlKd3BhZ0dNMmlWSTJrSks1b1dRaDRmMDhBNW9CYVdwQ1dQQzZBQ25xd2hUVm8vcGhtTUJ3U1VkcGRNMVVUdmNYZlg2Qm9ZdmhDU2VBb1NlYzN6MjNIdFZuWFIxdENwcjRuRDBtRFVjRUVhNzR0WEIxalQ3dDQzNGYvelovYzAzL25FSFFQY1JWUkVXVEt1ZThDSExrclNCMVpCQlZhVWlnSzBBS09SNCtvV2hnRHJkOExGSjdFeGZxQU5abzIvcWNBbkN5cXVpRnIyYWtoSEtSSEx5YWlsUjQycEdqZUZhTUhkb0tCd2RZbDRkSE9GRDdUZ3RKKzljQitIaXRWbU85OFIydC9xcVZNZ1BOV3pPOWJ4OFhnZ1J3Y0x4T0RiQUNwOS9rQ0E0Y2lJNTRpQ3pmLzRZZUpycUF0N0k0bDdVMXhZeUQ2ditYM2dMZ3RLbXFUUUxrU28ySlpFSjhTNjZ6a3daNWxpbm4xajhya000TllsUWg3WWxWaW5pKzVxMzZwMktmdlNhUWZiaHFLcll5SjVkeTJjWElkZmt1RW1CVVB2Q2VNdktYVzNZc0JMWWZ1WTlJSGFPT3V5Z0FqWExRWmx4bjAvSEYzQ0djaWQvOFR6WnUyenc1Rm95SityZ1hjMTRaMVE1d1I2cDZGaktWSXNoZHA4MVNETENaS0dGdlhielF5MXorRXVmbkh5a1IvaDkrcjlSV2xtTjhpZ09pMVBaUnFaM2JhdFVCYzRlTEtpNkwwRTFra0FkTzlBWkNCdTNrOUtOeld0N3E2azNsOHhnbXRXbEhkUXVodU80QVdTOEltSXNqcW0rRGtIa3JGdWdUQmVhMHplYnp2ZlhMWEswY3VvTnEvOVdZbnovN1A1dmlmRTlMOXkzeEFqNFJPUS9EaW1EbUFpVEVWNERJbDYzditSSW1ESDVaZE9STWVTWnJuZWUxOU0vbklEQU5yNERhUUw5cTF1TURBdEw0cWwrZGhqZVA4UnJCbkkyWENDejFpUUxwdHBNa0NERWZuTmVMZXNJeXNKdE85eDJjWXhSTzlITWNvM3F0Y2NxNDM0YWNZUGdZbUlEWkJRR0xNRmRXU2h0ditDRUFUWjdIZW5ZR3BCZDUxOUFhUlI4S3dqRFlRdUZBZmJtZ2xHRzc1TzBxMDQ4cU85eXFYWUdHdXN3eVhSWHgwUkl1NkJHV2ZqYkFxRjhjTVFXa0FUcTQ5ZXVkb1pCc1RQY1BodnVOSlBVR1YrN3RXSHBwemIrSGU3RTk1bmdPU1FEbzJ3cjk3NTBLSVhvUWRkbEZVUmlid2ZrM1dCcHFxcVdvVWt3TUJOWXpVR2xpTkljendCckFNdWdNemxOdEFMUzZwRDFLdVlhMU5KS1VISjViTlpONEQ1S051eXRYc1FiTXBPZzB4K1ltbWllYWI3dnVDVDJwVEl6NEdNSm1HM0U0dFgyUE10NVh1OHpDU2lOaHNyME9nVDBObnZGRVVnQTVzaFVwQjNxMG93YTU2dmlxdlZsRjUzQ1BGc05TaVRNK25ESFVDRXJWSlJuSndxekN1cisxVjJjSGV0b2cvMTZDWm9rbXRxcjBpei9xSXp6L2JQN1RYM25kOVdkSDE5N3BSM01KZGF1N3BYUmFZQUp5NytCWGlrVk1tZnNqQWkxUWZ3VXNtWm9uOWxPUUhHb0tGaTBwM0xRWUhWNFNlM1MxQmFyblhmc3RBdnF3a2YvcWxxcFhpL2tJZFpheHVZTXNTYlhCeDVtMGVHS2lVQUNKa2tVUUZ6MVEzQk9MWk9xL2pnU3BXbi9ITnFXSkF2aUFMUlVsWmtZYW1RRi9kV29SRmpoUEdUUjFMYWhSbGtOSFRXRlpqanpIQWNUbFk1R3JWanBScENDbStSNG03ZTkwdzdWSnh6Rzk5RWtaUTlzRlkvQ3BOU21QV2xaQkxkaGtLcnhvUDM5OEFkaXFub1dLN3laWVBIYW53c0pWT0hIZEJmMUl2WWdad3VuUWEyRC9LMUhVSnZVMjV2R2F5bC9iYnhEWGJoN2FZY1F5RmlZa0tGMk9nRldyWEpqVENOY3E2M1JxdGFuVHZRV1p3dzhvcURtNitEUjlnU3U0U0o4SG1UaG9kWU5RV1lvUGRqR0NaWUxDSUpBb2FreVRTWkttM3FuYlUwVWRtWkE2dEFONmo1ZytSRVFHUk5ISE1VK0lDcG1UNzN0aUdxenRxTzJOOW9wVVhLUFVJYWVkWDR0cVdXOWRaOWY0eDNxS2VyZkNaeVE3MEZnQ0MzUm1GeEN4NFZXLzV5cDFsRndTVWhzSS9iV1NTWWpudFhwaSt5ZGIrV205bTZVekZXVlZSd0xNaG5RanhrL2dISlhHeXlwT3UvQ0hFSklrdS9kYVk4TFRZR3Mxb2JLN0MzcXpKdHdqMXpndmUwbEs1NG5nUVU2bVljVzZ0bFhuU3dkUElmT2tMRnNIdTQvRnpPb0dySk93T21JVTFFTDY2aEs0NlBqQmR0UVFIVVAxTTNTeHVMcm4rU0Jub0VJa2xUQWlzc3FIazAxUFlNVzB1T01DUU9wcG5VZ25vakJZQ05tb1QzZXBmWHNDN0JjRzVWbXpCNzRDQUNHRnB3S3BkeWZod3JhMmxISkM4R0U2bFZqdjQ1WVJwRDFuUmxwMGtvdzNJcnFRZHdxTVBTa1l6WHZvSTVMQkRyV2cyQUdqRFRRRmRXc2lZd2p1M2xzeFdzaUtGRitoYlFoanordG5CZVYzbEVRMjdUcGhSVmRxYXRCd1ZUb2dqMks5aUIxK28vazA2bXlyaGFjUHh3NmVKL2RyeS9NOUx1ZDIvRTNyN09lcUp1R2wzT2Vod0dzVklaWXRoSWNxYk5ocFl5a1V3RkVYSzVxR0F5cWRNRTNwaU5qcUZCN3UvTnFNRGJaQnZ4YThOTkQxN3ZML2NrNk1qajFPRWlCYmpWb1Mrc09uWTlVcElXRzZEMUZpS0IrVkFsRXdwcC9kS2Q4SldZai9PRUpMa2xUbmVuRDBsaW9SM1pKdlcxQkZxK1Qvd0ZLVTZwbGpCanlCQnRFN3N2dnVsV0lhL1JwbThBTllVRld2Z1hkRXBrWjhFQzhJZ2ttNHBVTVc4R3Zyak9NWWFzckNBRFEwU0FBRDMyRWJoektwbDVRUUtBbmowMEVHR014OVZ1eTZPcjF3SGxsSFd1OXdONlZLdTlsSUtYcWErVU53SlJqUGRTVHJ6Nm5yYTBTMVVFS1FPVjVaNS9vUkJEUWdwN2d5Tm9pT1dXbHBvUzJwV2hiSllzT1FqdThicWhkbG5PaFg4dFdSN2pzdkZ3N3M2eno2SVMyQ0Z3MUFlZ3ZxV2FUWDZkUndCS2kwT2ZyaVloWnZmbEpoakF4djFxMk9zTE1WODNtcjlPQ3BBUW1jdG9kSlVUZWJSMW5KS202am5Rd3o2Qld5dWJVZHJpbkFxZG1nSHJ4K0pNbEJac2dWL1dBNExxM2ZQeGxGQ1NjZW9KN2YzUUVaL0tkcWpPWEl6cENVNms2bmdwcmFqU0trbjJXZGZvTDJwaXZzcTVOZzJaYkFnejNQSnBrcStxRkVhUWw2ZFVQU1U0djlVbGovT1BWNFF4Ri9sVGZvamI4MEh1R3hvTVRab1NwSjIrcFlIbDhqV0ZMVFdiYzhiVUVPZkpiSjE2QUVTT0psMXBJY0FaM0UwWGExenFmUWo1Q093ZVVLZ1lwTTljWHM0eGVyVkREVmVFZWduTEk2bGRxMGpHZjVGK1BPZ0NLd1BDQVRYenQxOGhLS09rZFNuMEhVT01lQ1JmZVdOS3dKWkZMeGZmUHRIR0lVZTcwQzBPSEhnS0ZyT09IT29YeHJpbTJBTE5ST0dyM1VSZE1mbTM3T2dCVU00YlBmVzdac0RzNmpEdDFJclBLUG8xSU1uRDV3NHJzcWUwcklwMjViNm8ydk9PLytNMnJmakVHaXZTQSs2K09oYkdzQ3l0d0dmUmdEVUdKRmdPR0xSbDhBSGV5M01qdHc4K2xGMXM2andscDQ0YUlhbFhRM0swNkpzUFVraUo4NUp1SFJBT1BqeDZvaXpNQkh5RzJPb1M5UEF5V3NHdlZwODRuSWFnUU5iNDZqM01rK0hCcnlFMUNmYXB3eTlCRXQ0eFlQUVY0a0lKT1B5cFFGQjBQMVc3VGh2a0JabFI4RWxjV0xvUjlrbGJEcWYwQmxuOUNZMzdpZzd0Q1hiQ1l5SmF0VmxsaEU2RkJKNGVaRXgzekcyQUd5eiswVjJJZW9GMEJrVTB1QnpLQW4yTHdPcGFtazNoNFN2RG82S3duWVkyaFZJT0tnRTBLdEttQVhWdFc2VGNEc1dTY2prc09uaHBKb1VLampvUyt2Z2ZVU0hKRUFoNTZYdlZuRDBDMzZWaWdOSXlLRnNBcXJub2RuUmJzNnRYSTFscUdKMGFYekh0T1NzZVhSeWx1dmhNREtlb2FnVlU2NzhqTXVrWG5VTFlSRXNnaXVKajV5Zm1kazlGT1RJMDR5cXN5czdxeHRSUHNKSlNoQXJWU1YwbUZoZVBXcjYyNTZ0N1BxaG52WkUrYkEvdzFxYnRLblNpaUpwQWN5T2tnSXVIdFZEY0pSeWM1TXNHVG1ZWnlGRTl4RERXdUVRb290S1E2ZGJpdlpmTXBiVlRHOFRyWXIrbzFkSnltVytDbEt2UEFIZ1kwSmprcTRMRXVkVTJUcm9yNU9Lc2lWaHlLZXJEUGZuWldSNHlCUk9LQ3Q4SFMxRlErOVFzSU1objhkajlWcWlQUloxQ0h0YW9YcUFVSlQ5UHZxQ0RSZ0hOV2k0VFNyMkpJNnFFRWFoa2RXVlJQMmEveUErOWNEV1FPN2ZITHZwTzRCRS9TTWJzZG1lV1Z0QnNjTUpVSFlhMFRJLzZDMlZPSFgvRHN3T1c0YjRjQk80bzhOa25RcTlOR05wTmEzbC9mS05tZ00yTUExd0Y4VlZLeExBUnRGYWJGZUNQQkNrK1BMMG1LM3U1ZitYNnQxNE5DV0h5MEI2UnFxUHJ4ZFY5MTNNMm54blh2dDhIeTYrM1Y0TVlBanJReW5LL0RqSkx3RVJ0UTYrZjRxOXJpd05KZnk0ZHBaS1VaTVlYMXRUN0dVY3k4WlZXaGEwb0pCcEFrTGNHaXVnNjVERzhJK3QwTkRFdktmK24zVkRTMTM2b1NFZ1JOYllYUCtUNGNIY2dUMWRHaVhzSlFsQmZJM1hjbTBkVE9OUHgrSGNVNlRuM2Vob3JZcHg2TmlTVGYydWtETUp2T1Ztb2ZVSUN2WDdZQlpWYnBWY0VPVWU2MUo0NEN1TXl4bTE3dE9QaHM5QmI2QkFwODlJT0thV3JDMFdaUGwzZ0YxOEE0Uk5kYThCS282MGRQSFMrTjZBRWxzdE8yVndPeldhRFh1UXR2WDIvSTBVU0dLTlBpaWpvQkgxR0VvS0VlR1E4RThSSHhhcVdhUkJqTGtWd1JQTC9xQmE1Tk94dzRmLzArRFpWMmVsRWxBUmFFRW9QTVU5cFBoT0ZkdVYvZlg3VUEyVDBCVzNqOUppaFNMRTFDRjl1dU9xK2wzeFFROUJ0KzV0YXZwakFVMzJnNkUzdWZMNzBIVWJrTVMwVjB4Szcrby9kVHI1Nm9JOWY4R3hSbFRoRStUUzVTcGU4aFFZcHE0T25SdlYzU1FEMC9yRVpRWHd4eGFnN3VuSW9RSkNwZnFLWDY4N3Nmam42ekNXOWE4QXNvZFpkeUdyUWg5WEVkVytjS2NsVGJzazRHQWE2T1dmU01ZdWhYNmFoelg0cDFmQjBnSU1hQUNJdVNuVG1yWkJySGZNejcyVmZsV2RSdnRJd25kWDNqaWZEcWFtTnFLTUFJVE90d0lpS1ZtTitXL1k2Q2ZHZ3ZhZzk2cFBTTTRINlNGeXlEd05VMDUvQ0NBZERXV1pDc0xkd3VjYUhmemhXQ1RxcW9rNlFoTVZqOGhiaEMrcGFqWHlLaEJoQjFXT2diMkxnVm5Gd3E0azZUcXM0dHBuYXRYWlorcFljNjUvVmRzYTVPQzZKbG1PaGNsVWdyYWFjQ2tHbytlVDJqQXhLMzJzOVgwTG1OZEZqTmdSTm5wcHJ5UThkdzFTeWNWQ01zUERKSmtMWEZxWk54T2pMejE2L01jZ2lFOWZlVklSd2o1dFQ5TjlDdXRoamc2dDE0QUFBQmcybERRMUJKUTBNZ2NISnZabWxzWlFBQWVKeDlrVDFJdzBBY3hWOVRwYUlWQlR1SU9HU29UaFpFUlJ5MUNrV29FR3FGVmgxTUx2MkNKZzFKaW91ajRGcHc4R094NnVEaXJLdURxeUFJZm9BNE9Ub3B1a2lKLzBzS0xXSThPTzdIdTN1UHUzZUFVQzh6emVvWUJ6VGRObE9KdUpqSnJvcWhWNFFnb0I4OUNNak1NdVlrS1FuZjhYV1BBRi92WWp6TC85eWZvMWZOV1F3SWlNU3p6REJ0NGczaTZVM2I0THhQSEdGRldTVStKeDR6NllMRWoxeFhQSDdqWEhCWjRKa1JNNTJhSjQ0UWk0VTJWdHFZRlUyTmVJbzRxbW82NVFzWmoxWE9XNXkxY3BVMTc4bGZHTTdwSzh0Y3B6bU1CQmF4QkFraUZGUlJRaGsyWXJUcXBGaEkwWDdjeHovaytpVnlLZVFxZ1pGakFSVm9rRjAvK0IvODd0YktUMDU0U2VFNDBQbmlPQjhqUUdnWGFOUWM1L3ZZY1JvblFQQVp1TkpiL2tvZG1Qa2t2ZGJTb2tkQTN6WndjZDNTbEQzZ2NnY1lmREprVTNhbElFMGhud2ZleitpYnNzREFMZEM5NXZYVzNNZnBBNUNtcnBJM3dNRWhNRnFnN0hXZmQzZTE5L2J2bVdaL1A4YTdjbUx3MFh4dkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg1QWNDRUI4ZkJWeEh0QUFBSUFCSlJFRlVlTnJzblhsOFZPVzkvOS9QbVMwN2tJV3doTVVFQVJFRXBBVzBJbW9ScFlxMWlGV3cva1RGdXJTaVhjQzYwTnFDWGJEMXV0d3FXbXF4cmREMklyZFhzYlRJOVlwTEN5aWlVdGtERVJJZ2V6S1RXYytjOC96K21ITW1KNU1KaXlJazhMeGZyL01LWkNZemt6Tm5Qdm51WC9IOXIxM0FtcTFWUkgxOUdUYnhadVpkK0FHM3oxdEYwUjJyV0R0dkdGRExpaG5qbUxkaEhJcytXTTcwUEtEOEdhNjQ5RkhLTDEzTTltY24wNHFmRmJQR011L04wU3pZc0p3Yml1enZSeWxmc1lDSEZyL0M1ajBCZklWbk1mN21lN2ltYmdGMy9DN0t6R1ViV1RpZUxrazRIT2JBZ1FQVTFOUlFWMWRIWTJNalRVMU5CQUlCV2xwYUNBYURoTU5od3VFdzBXaVVhRFJLTEJZakZvdWg2enE2cmhPUHg1T0hZUmpKcjRaaFlKcW04OS9DTkUyY2g1VFMvaXFrbE5nSElGSy9Ba2dwaGZYU2sxOVR2aWQyN2RwVlhGQlEwTnZuOHhXN1hLNWlUZE9LTkUwckVFTGtBejJBUENGRUhwQU5aQUdaZ05jNlhJQm1QWjRKR0VETU9zSkFDQWhLS2YyQVgwclpKS1Zza0ZMV0c0WlJwK3Q2ZFNRU3FUbDQ4T0RCa1NOSDFsaVBJeDFIdS84TElWSnZzNzhISUlVUTdiNDZEcWxwR2tJSU5FMUxQYVRMNWNMbGNxRnBHdmEvM1c1MzhxdDllRHdlM0c0M2htSFF2WHQzZkQ0ZlBwK1B6TXhNTWpNenljN09KaWNuaDl6Y1hMcDM3MDZQSGowb0xDeWtaOCtlOU9uVGg4ek16R080NnZ5c216dUptemRQWmRYYStReERrWXA5MGJlZXNoV3pHRHZ2VFVZdjJNRHlWbVg2SElpeWJzNVlibDVWeEIycjFqS3ZpNzA3c1ZpTUF3Y09jT2pRSWVycTZtaG9hS0NwcVFtLzM1OFV0RkFvUkNRU0lSS0pIRkhRbkdMbVBFelRGTGJBcFloWkd5R3p4Y2twVXFtQzVmeC9UVTNONEp5Y25FRnV0N3RNMDdSU0ljUkFJY1FBWUFDUTBVbE9jd1RZSjZYOHhEVE5Dc013OXNaaXNUMk5qWTNsQXdZTTJKMGljUEl3Z3RkT0FHM2hFMEswRVRwTjAyU3F5Rm5DbGhRNTUrRVVONWZMaFdFWTVPWGw0ZlY2OFhxOStIdytNakl5eU1qSUlDc3JLeWx3ZVhsNWRPL2VuZno4ZkFvTEMrblZxeGQ5K3ZUQjYvVWVWdEMycm5pUmw5NWN4WXBWbFF4YjhDckxieWhSS3BZR2R5M1FhbGh0WmZIdjFoUGpMQzRjWDNUY0JHenJNM05aVmpLUCtWTkw4Tm5mTFYvQjRuVUI2RHVWUzd1WXFPM2Z2NTlEaHc1UlcxdExmWDA5alkyTitQMStBb0ZBVXREQzRmQmhCVTNYOWFSMWxpcHE2Y1RNdHNwc1liUC9LS1VSc2piLzM3VnJWODgrZmZxTThIZzhJMXd1MTlsQ2lMT0JzeUQ1Vm5SbU1vREJRb2pCdHBCNHZWNXljbkl3VFRNS2JETk5jMnM4SHQ4YURvYy8zcmx6NThmanhvMnJzeXhGS1JNblN0ci9kNHFjbEZJS0llejdKQVhPTUl5azlXWmJjOVloT2hJNXA3Q1pwb21tYVhnOEhqd2VEMTZ2bDNBNGpNL25JeFFLRVF3R2FXbHBJUkFJNFBmN2FXcHFvckd4a1lhR0JtcHJhK25WcXhmOSt2WHIrTE8wNmdsK3Q3NkljVGMveVpOSzFEcTIySVpjY0QyVEp3NmppRm8ycjF2REIxVlFldk5TVnM0ZlQ5NXhlWXBLVnN5YXhydzMvZlFkTlpHSm8wdkF2NVgxcjJ4Z1Q2d3ZWeTVleVpPVGk3ckV5YXF1cm03bmRqWTNOeWZkVHFlZ1JTS1Jkb0oyQkN0TjJHNW5pcUNKRHF5eWRoYlp0ZGRlNjFxeVpNa1hNekl5dnVCeXVjWUlJYzRGQnA5bTEvUXUwelRmMTNWOXM5L3ZmLy9yWC8vNisrdldyVE1kNHBZVU9TR0VtYzZpUzJmTmFab20wMWh4dUZ5dU5pSW5wU1FyS3l2cG5qb0Z6dXYxSnEyM3pNeE1zckt5a3U1cHQyN2Qycm1ueGNYRlNxRStyYkI5LzZhdnNHNzlOdXJJcGJCc05GTnZuc2M5MDRjZEoxR3pxV1g5aTArd2VOazZOcGRYRWFDUTB2R1R1Zm1lZTdoaGRPY1h0ZWJtWnFxcXFwSldXanEzTTEwY1RkZDFZckZZMGtKTEUwY1R6amhhR3N0TXBJbVgyVmFaK043M3Z1ZDYrT0dITC9ENWZPZHBtbmErRU9JOElFZGQxbTFva1ZLdWo4Zmo2d09Cd01hNzdycHIvVi8rOHBkNEdxRXpuYTZyUStTY2NUbVphc21seE4ra2xKS01qSXgyc1RldjE1c1V1STdpYjA3M3RLaW9pRjY5ZXRHM2IxKzZkZXVtM3NYUEdtTlR0S0xyT3Z2MzcyOWpwVFUxTlNXdHRLT0pvNlZMRHRpQ2xtS2RKZDFNaDBXR1U4aWtsRnBEUThPd25KeWNpMXd1MTRWQ2lJbUF1dXFQOGUrVWFacHY2YnIrZG5WMTlkc0RCdzdjYm9sYk82dk9hZEhaMXB2ejMzYUN3U2x5VWtwOFBwOU1sMXhJdGQ3U3hkOXM2NjE3OSs1dHJMZCsvZnJoOFhqVXU2ZUU3Yk54Nk5BaEtpc3IyeVVIbkc2bkxXcTJsV1piYUVjcmFJWmhKTjFNMHpRN0ZMTlFLSFN4MSt1ZHBHbmFKR0NFZW5lT0svK094K092Ky8zK053b0xDOThta2NVMVU4V3VJNUd6a3cyMnV3cmc5WHFURmx4SEFtZGJjTGIxWm91YjB6MU5UUzZVbEpUUXExY3Y5WTRwWVR0MmdzRWcrL2J0NDhDQkExUlhWNmRORGh5cGZDUEY3UlFwaVFHbmRTWlNMTFNrbUlYRDRTbGVyM2VLRUdJSzBGZTlNeWVFS3NNdy9oRUlCTmJtNStldnBiVmNKYTNJT1dOeXRxc0s0SGE3cGJNOHhCYTVJMWx2cWU1cGJtNHVlWGw1OU9qUmc0S0NBb3FMaStuVHB3LzkrL2NuT3p0YnZWdEsySTZPL2Z2M0o2MDBaeXd0WFhJZ05aYVd4a283a3FDSjFKaFpNQmk4eE9melhTV0V1RktKV2FjUXVkVk5UVTJyaTRxS2JFdXVqY2lsV25IMnZ4M3VhVHVCYzd2ZEhRcWMwM3BMVFM2a3h0NUtTa29Pa3oxVktHRURBb0VBbjN6eUNWVlZWVzJzdE9ibTVqWTFhVWRaWkN0czE5TjJOdzlqbldtTmpZM0RjM0p5dnFacDJ0V2dhaTA3S2R0aXNkZ3JCdzRjK0Z0cGFlbFdoOEFaRHBGenh1YmFXSEYyOXRRV09VdllaRHIzTk5WNmM5YSsyWmxUMjNycjI3Y3ZBd1lNSURjM1Y3MURTdGphVzJsMmdpQmR4ck9qRWc1YjFOSUptck5Md0Nsb3RwaXRXclVxWTlLa1NkZTYzZTdwUW9qTDFHWFlkVEJOYzAwb0ZIcjVxYWVlZXVYQkJ4OE1BL0dPUkM2ZHdEbHI0TklKbkMxdUhaV0dwR1pPN2NTQ3N0NlVzQUVRQ29YWXUzZHZ1d1NCYmFXMXRMUWtZMmxINkJ3NG5LQUpwOXZaMU5RMElqczcrenBOMDY0RDFKWFl4ZjhtNnJyKzB2NzkrLzg2YU5DZ2JRNVgxVWgxVlIwQ0o0OGtjQjFsVHUzWVcwNU9UdEo2UzAwc25ISEdHV1JsWmFsMzVuUVZ0b01IRHlaZHo1cWFtallKZ2lQVnBUbEVMYTJnV1FXMWJkek5VQ2cweGV2MXpoQkNYS3N1dVZQU2lsdloxTlQwVW1GaDRldFN5cmdRd2lsd2h0T0NzNFhPR1lkTEZiaU9ZbS9wNnQ1czE3Um56NTVKMTdSMzc5Nm4vWHZpUHAxK1djTXdLQzh2WjkrK2ZSdzhlRERaRXRYYzNJemY3eWNZRENaRkxScU5wdTBlc0FYTkVVZExLMmczM25pamE4bVNKVGU2M2U0YmdRdlV4Ly9VUmRPMGFmbjUrZE5pc2RnN08zZnUvUE10dDl6eTBzYU5HK09XbTJwSUtkdGxWZzNEa0tacFNrM1Q3RmlzZEpZRXhlTng2U3dYc2owRVp5akUvcU5yL3hFT2hVTEpkcTJ5c2pKY0xwY1N0bE9kcHFZbTl1eloweWJyNld5Sk9sS3hiUnEzVXppNkJKS0N0bW5UcHR3UkkwYk1jcmxjTjZGcXprNHY5MGVJTDJWblozL3BYLy82MXpjamtjanlaY3VXL2VXMjIyN3pXOVpidkNPQmsxSktSNkcyVStCa2FndWVzOWY0U0FKWFdscEs5KzdkbFN0NnFsSlpXVWxGUlFXVmxaVnBhOVBTRmRzZXhrcExHMFBidG0xYmo3S3lzbHRjTHRjdHdDRDFNVC85TUF5RHlzcEtCZ3dZWUgrclBCS0ovT0dWVjE3NTgzWFhYZGRvVzNEMlljWGd6SFF4T0dmZG05TTlUUzBMc1l0NjA5VzhsWlNVTUhEZ1FFcEtTcFN3blVwSUtkbTVjeWVmZlBKSnN1RDJjRm5QMUE2Q0R0eE9POHVwU1NuRmh4OSttSGZXV1dmTmRybGNzNEV5OWZGV3d1WVFOcHM5NFhENDkzLzYwNStXMzNycnJjMUhFRGpUMFhTZjJya2cwM1VzZEpRMXRRdDZCd3dZd09EQmc3RzZKWlN3ZFdVQ2dRQzdkKzlPeHROcWFtcVNXVTlud1cwSHJxZEliWVZLc2RLMCtmUG51K2JQbi85Tmw4djFUVlQ5MlFsOFl3OUI5UTVvcUlCd1UrSUF5T3llT1BJSFF2RVF5TzNWbVlUTi9rTzdMUlFLdmZEMXIzOTkyZXJWcTJPV3dOa2laem9Femt5MTNwd0M1L0Y0WkVmOXBzNXBJZm41K2ZUczJaUGV2WHZUdjM5L0JnMGFkTnJVdkoyU3dsWmRYVTE1ZVRuNzkrL240TUdEN1VvNVV1TnB6b0JzT3JmVFRnellXYzVJSkhLOXgrTzVFeGlubE9ZRTBWQUJ1OWNsdmg0TitRTmgwTVRFMTA0aWJBNkIyK2ozKzVkMjc5NzlGU0dFbmlKdzdWeFVSd2VEVExYZVVtdmVVZ3Q2N1pLUTNyMTcwNjlmUDhyS3lrNkxjVWluWFBLZ29xS2lUWkxBbnB2V1VUek5hYVhaZ1ZtbjIrbElER2loVU9nU3I5ZDdsOVh5cERoUmJQa3JWSDE0N0VLNHNRTDZqb0lSWCsxYzFvUVFZN3QxNnpiV01Jd3JhMnBxbHZidTNmdWZUb0ZMVFRMWUNRWnJXSUpNbWQ5bi8vK29rZ3lSU0lSd09NekFnUU9Wc0hXVmVOcU9IVHZZczJkUHNqWEtIalBVVVR5dEE5ZXpuZHZaME5Bd09DOHY3MXRDaUR1VXlweEE0aEhZOEVMQy9meTBWSDJRY0ZmUHZRN2NHWjNxMTlNMDdTdTlldlg2U2l3V1cvTHh4eC8vZnZUbzBlVU9nYlBMUkF6QU5FM1R0UGRiMk5sVHUyWFBLVzZwSW1jbndGTEZMUktKTUdUSWtGTTI3blpLQ0ZzNEhHYkhqaDFVVkZTMDZmZTA2OU02aXFlbFdtbVdxQ1hkemxtelpybWVlKzY1dTEwdTF4eEF6V0UrMFd4WUNvSHE0K1BHdnY5bkdIdFRwL3cxUFI3UDdGR2pSazBKQm9QUFRwZ3c0ZmViTjIrT0FicGx2V20yaXlxbE5PMXg1bFlDU3pxSEs2UUtYTHBTRVdmWXhSYTNZMXNrbzRUdGhORFkyTWpPblR1cHFLaElEb1IwVHVWSVY1OW0vUlZ6aXByVFN0T2tsQ0lVQ2szMitYejNBbDlXQ25PUzNNL2pJV3BPY2R2eVA1M09MWFhRTnlzcjZ5ZnZ2dnZ1eFRVMU5VdDY5Kzc5bGhBaTVuQlBCYTA5cVRMRmduTUtuRXkzRkNpZGUycFhBUXdlUEpnZVBYcWNZc0xtWDhHTVVmUFlrSHNOdi92d1VTWjJvUmRmWFYzZHBwekRibUpQVjNUcktPVVF0bm1leGtyVEtpc3JleFVYRjkrcmFkcDNsTHFjSkJvcWpqMm1kclJ1YWQrUkp6U2g4Q25jMDR0NzllcDFjVFFhL2ZYcnI3Lyt1eWxUcGh5eTNGUE5LWENKWFRUQzdNaDZjN2lxSEkyYk9uanc0Rk1xcWRCbExiYjkrL2V6YTljdVB2bmtrMlE1aDdPVElGMlNJTlZLTXd6RGFhVnBrVWhrdXNmaitRNHdScW5MU1dUWEc2My8xZy94MEkvL3diSUdHRGZqNnl5ZmtBa1lWSDY0aVlkZTNjdjZ5Z2hrWmpONjVBam1UUi9DYUtzSFBMcC9Od3RXYk9HVnZYNENaRkE2dUQ5M1RCL0w5TjNyWU96QVRuOEt2Rjd2dHk2NzdMTHo2K3Zybnkwb0tGZ3RoSEJaN3FudWlMMEpaL3d0amNCMUdIdEx0ZUJzZ2V2eVUwTDg1YXg3WlJudVNhUG1zUWNnOEJJM2w2NWo1a3NiV1ZpMmxSY1hQTVRpTlZ1cGl2cm9PMndpTjg5ZnlDMmo4enJGYXk4dkwyZjM3dDFKVWJQTE9WS2IyRHNTTldmR1UwcXBWVmRYOXlzb0tQaXVFT0l1cFNvbm1jQWhhUHdrK2QrdHIyOWtSVVBLdGZ2eHY1anhiRGxWZUNnZFdJeXZvWllONjljem94N1dmbWNJSmMxN21mUDRPN3dXaHNMaVlvYlJ6SWF0TzVuM2VJeThIN3FZZk5haGsxTG5kcXdJSVVibjUrY3Zqc1ZpdjNubm5YZWV2L2ppaXl1RkVKckRQWTFqdGZMWmswVHN6S2xUM0p4Yno1ekxnK3pZc25PNFF5d1dvNnlzSzlhWmw3Tml6aHdXcmRtRzM1ZUxlK2JNQy9uZHNqZXA4cFp5NlEzWGNHbVJuM1VQeldMK0tqOTlMNXpPSFNYbHZMSnNGUXRuK2NsYnU1VHBKM21wMVBidDI1T0Z0ODZlejhOa1BvV3oxOU5SbDZaSktVVWtFcG5tOFhpK0IzeEJxVXBuaUM5c2IvMTMvUTRXdk5wSUxPVXVXN2ZXRXMzTDVzSXJMbWZwaEJ3STdXYldEOTdoemIzN1dCOGF3dVNLZld6MVpOQjMyRmhXM25vR1JiVHcvS0tYV0ZoUnhhcTlNTG0rb2tzSW00M0g0N2x0NHNTSlkycHJheGNYRlJXdHNXSnZtaVZxdHZWR3duQ1RxZGFiU0luRGtlcWlPamVuMlFJM2RPalFMbmJoUktIb0d1WXZuOHJrdkJXNGI1bDNKYTh0ZTVNcTMyaG16citUaVpUelRIa2RVTXJVZWZPWk55ektwV2N0WnRXZVhQTDhPTFlybjFpa2xIejg4Y2ZzM3IyN3pjSmllMnVVUFprakpVbVFLbXJKZU5yMjdkdTdsNVdWZlYvVHRIbEtUVG9SOVJYV1AyS3MrZXNIYktBSDR3YTJzS0ZDVDk1bC9MVmZZMk82QVZBZUwza2V5QnM1a2JkR3BudHdGM2tlU3p3SGp1OVNwMFVJY1c1aFllRnprVWpraVQvKzhZKy9uVDE3ZHFObHZlbTBqc2d5YkVGenh0N3NRYWRPY1V0ZCs1Z1F1U2hORmUveTV5ZjJVampyUDNsczV0bGRxQnhrR05QbkQ3T050M1F4dGpJbVhqbUtKN1o5d09Jcng3Sm0xSGpHWDNvTk0rK1p6TENUNUlucXVzN0hIMytjN0NaSUxieE5MZWV3MHRtcFdjOWtnaUFZREY3bzgvbm1DaUVtS3lYcFpGZ3RVdEc5bTFpd0tVTGZDeVp5YzN4ZEcyR3pxZjF3RXd2ZWE2WjJieFViNGhsY2VPMG9KanMzMUIzYXpVT3ZWbEZaZjRqMUZScDl4NHpsanNGQVBOcGxUNC9QNTd2bjVwdHZQbnZTcEVuUERodzQ4RjByOWhhelhGTWhoREFTaGxwcjNNM3BtcVpNRWtrSVd6eEMzZDR0dkw1L1B3ZjhKdTZNWGt5ZHZJTVBQNHh6OXRsbmQ4bTFmMm1UQjhQdVhNN2EwU3RZdHV3MTFxMWZ4N0pIWDJQWjc2NWs4ZG9ubVh5Q3hTMFNpYVFWTmJ2d050MCtBb2VsbHVwNmFyRlk3SGFYeTNVZjBFZXBTQ2NrMGd3MDgvenkzVlJsOXVPSnEzdVJ0eUw5WGYxNzk3RnFrei94bjd4dURDdE9xY2Z5MTdKbVV3VjFBTzVzaHAzUkxiRUkvTE1VL0hZQ05FMmJOR0RBZ0dGK3YvOC84L0x5L2d4b2xudWF0Tnh3SkJac2o4ZXkzb1Rsc21LYVVScXJ5cWx0Q3FPajRjM3J5YUJ6aHpQMjNITTRTNnRnNTg2RXEzcjIyV2VUa1pIUnRjNFJnTS95VWFOUndMK2VaK2JNWmRGcmVjeDhjaW12Ymx6TFE2T0F1bldzMm54aVgxd3dHT1Nqano0NmJKMWFTbHhOeEdJeFlmZDhXbWEyWnBxbVZsVlYxU2NlanovbWNybWVVS0xXdWFuOTEwWVdWOEs0cThjeTlUQ1Ryc3V1L2hwN252NEdHKzQ5aTdOQzFTeCs5bCtzQ1RudU1QZzhOajU5RTlzV1hNdzFCVUZlVy9FNmkvWWFwOHBwNnBPYm0vdlRhRFI2LzZwVnEwcWtsQm5XUjlrTGVLU1VMaW1sWmwvL1ZneE4yTjVNSkJJUjRXQXoxUTBob3FZZ28rZ01SbzRZekJrRkdlak5OUnc0Y0lDS2lncDI3dHpKUng5OVJEQVk3R0lXbTYrSXZGd2dzSVlGMDJaUnZuQWhlYlZyV0xWcUhWc3JQMkJ5U1MzcnlnRnZHYU5PWUxJa0VBaTBzZFNjTFZLMm9EbkhkOXV1cDFXZjFpYnJHUXdHSi9oOHZ2dUVFSmNxMmVqa1pCaXMrTDhEQklBTnkxK2lkSG5yVFJ1Vy80VUorNy9DcTVkNXFkVmQ1QlhrVU9SeFVUUjRHTmVVYkdOaFJTMGJxbUZpZmd1VllRTmZYamRLc3NCWDBKK1p3N0o1cVRySTVwMHRjTTdnVStaMGViM2UyVk9tVENuZHUzZnZNMmVjY2NaN1Z0ek5UaXdJSVlSaG1xWnBMM2h1RzNkemlXN2RNbVZMTUVLNGVqY2JhejhodDdBdlpXY09ZcWpEWGJXUHM4OCt1OHRNQjNIam04Zzk4NjlrNjRJMTdDa3ZweXBhd3AxUExzWC8wQUordCs1M0xJNTVLVHpyVXU2WXQ1QmJUbEJUVVhOemMxTFU3R2IyK3ZyNmR1N25ZVEtmeVhoYU5CcjlodHZ0dmg4MS9MRnJrTm1Uc2pQN2NLRWo1RkZiZVlodGZwUGM0bUxHbnlGWXMveGw1bTJGY1RPK3h2SUpPUkJxNElNR0FDK0ZtVkM1L25VdS9aOUdjc2RjekZ1MzlpZVBNT1hWWVVBakw4L2I2WHBHajROcmVzbUFBUU1HTkRRMFBKV2ZuLytLNVpxS0ZOY1VaOXpORmptUEoxTjBMK3dtUGVnRUEzNmFhei9oZzlvcWF1T1hjcUhWMmVEc1VUMzc3TFBwMXExYjE0aXhsVTEva3JYVG5kOGV6NTNQdnNxZEorRUZOVFUxZldwUmN5UUp0RnR1dWNXMWVQSGlIMmlhOWlDbjJXNkhMazNCY0NaZmV5bk9yTTc2My8rWm1lc2pETHRrSW8rZWwwbXRweStGVy9lellmbkxUSG92SDE5MUxkdjhrSHZtRUtiMmdoTFBFTWF0V2MrR1RldVlWRjFFbWQ3TWhtb1Q4dm94YzFnbUZBODk1VTZiRUtLc1I0OGV2d3lGUW4zR2p4Ky81S09QUHRJYzFwdHVpVmt5N2hhUHg5dGtUS1hYSzNNS2VsUFlHMkxCSU81b000Mk55YktSTnNmWlo1L2Q2VWVPZDZvUGZHTmo0eEZGTFozN21ab2tPSFRvVUwrQ2dvTDdoUkN6bFZKME1ZcUhKdWF1SFlhaUwweGtPWnRZc0dZdjYzZFZRMlllNHk0WXdmeXJCeVVtRlJRTTRkbDdYU3hhc1lVMWU2dlpRQVpuRFR1TE82YVBZV28zb0dEZ3FYcjIzSm1abWZQZWUrKzk0dGRmZi8wM2wxOStlYVZ0dVZuV1c5eStZN3FrUXVLTGo4emNBakpsQzgzTjZZWE5GcmZPM0YvYWFRWk5Pa1hOem43YW91YU1xYVd4MU96V0tNMDBUUkVJQkw2UW1abjVnSnFaMW9YWnNMUk45OEZ4cGNjQUdEZnJjM25vb3gwMGVTSXdER1AxenAwN0Z3OGJObXdMRUxXeXBqcVFYQStvYVpvVVFwaldkRjVwN1ZTUXpwSGo5a1RlN3QyN1UxQlFRSzlldlpJREt6dXp1SFVLaTgzcGZxYUsydUhjVDZ2Zk0rbCtoc1BoeTd4ZTc0T295YlpkbXpNdmdvMHZmSDZQZlJyZ2NybW1EQjA2dEtDeXN2THBrcEtTdDZ4RWdtMjVJWVRBbVZTd2cyNnRsbHN5RnNmaGpKL2h3NGQzU3JmMHBBdWJNMUhnRkxYR3hzYTBFenBTM00ra3FFV2owUmx1dC90QjRFeWxERjJjL0lHSktSekhlOEpISjUvczhUbkUzY2IyNmRNbnY2NnU3cW5Dd3NLL1NTbWRTUVVkUjFMQklXRFNjbDNicVZrNmdSTkNNSHo0OEU2WFVEaXB3dVlzNlhERzFHeFJPNXo3NlJTMVdDeDJoOHZsZW9pVDF2Q2xPTzZNdUJyOGg0N2ZUTFllQXhLUGVab2hoQmhVVUZEd1VGTlRVMDczN3QzL3kyRzV0UWxGMmVJV2o4ZlRpbHRIb21ZZkkwYU02RlNsSUNkTjJJTEJZSWVKZ2pSMWFzSzU0OU1wYXJxdXo5VTA3U0VnUTZuQktjYTRXY2RuaW02UEFURG0rdFA1VEJaMTY5WnRma3RMUzNaT1RzN3ZuVzZwVTdUU2ladWRYRWdWdEZSaDB6U05FU05Ha0oyZDNTbCtZZTFrUEttelRlb29zcC9DdVVIS2pxazkvZlRUSGwzWGY2aHAya0lsYXFjbzdnejQwaDBKRi9LenVKL2pacDF5dFd1ZmdvenM3T3dIUXFIUTdWZGVlV1cybzFQQkE3aXRUZ1dYYVpyQ01Bemg2RklnR28wSysvTVlEQWJ4Ky8wME5UVlJYMS9Qb1VPSHFLeXNwTHk4bkk4Ly9waElKTklwZmxuWHd3OC9mRUtmVU5kMS92M3ZmN2NaUGVTMDFGSmlhc0xleUc0bkNxU1U0dDEzMzgzNXlsZSs4aU5OMDM2Z1B2Mm5BY1ZERTdHeFVKUFZTM3FVVnRvNVY1L1FLUjVTU3Z4K2Y2ZXU4Zko0UE9kTm16WU5sOHUxZGQyNmRmRU9wbmZJTklrRGtlcVNPcHJzMnh4RlJVVzRYSzdUUjlpa2xHelpzcVdOcUtYYkpKVTZkc2dwYWp0MjdPZ3hkT2pRSDJxYTlsMzFpVCtOeU93T0phTVNJdWZMU1RoS25neUlXVDJNdWNXUVhaZ1FzaUdUb1BTQ3hNK2NRTHFDc0FHNDNlNng1NTkvdmlndUx0Nyt0Ny85VFhkbVJqc1NONmNBT3V2WlVnWE8vbHBjWEh4U1J4NmQwQmhiUjcyZlR2ZXpvNUlPS2FVb0x5OHY2TisvLzROQ2lMdlZKLzAwSmJkWDRsQU5jcDhKbjg5MysyMjMzYVo1dmQ0bHQ5OStleTIweHM0Y1ZwbGhHSWJ0YWJWSktEamphODQ0bTh2bHd0NWFQM3o0OEZOZjJPekp0eDJOSGpwTThXM1NVbE9pcGxBY1YzRzc3YWFiYmlJYWpUNDNaODZjQnFkbGxrN2NjR1JMT3hLMlZIRTdXWk40VDRncldsNWVudHdtZGZEZ3dRN0hlYWNyNmJCamFwYjdPVWRkam9yT1NsZHhSVlBjMGpFalI0NlVRb2gvdi9ubW00WmxqYlZ6UzFQRXJsMjh6WGtPbk82cHkrVWlQei8vMUxQWTl1L2ZmOVF4dFhSMWFrOC8vYlJuNU1pUkQycWFkby82NkNnVXg1K01qSXpiSDNqZ2dmaW1UWnVlWGIxNk5la3NOOU0wRFdndEJiSEtSZVRoM0ZHWHk0WFZwblhDdDE5OXJzSldYVjJkWEpHWHVuamxjREUxWjUzYTdObXpIOVEwN2Z2cThsTW9Qajh5TXpPL3RXTEZpbGgyZHZadmJVRnppSnZFV3RKcythYkptSnNRUWpyZFVPZGh1Nk8ydUozSXZhV2ZtN0RaRzlxZDdtZEg0N3hUWTJvcHhiY1Bxc3RPb2ZqOHljcksrazRnRUlqazV1YitrYlpaVXBsYXhHdC9YeVNRSGNYWmJLdk5GcmNUMVRUL3VRaGJPQnh1STJyMjRwWG01dWJEdXAvV0tPOWttNVRWVWFCUUtFNFFPVGs1MzJsc2JBejE2TkZqcFdXMVNWSmliSmE0T1MwMklZU1F0cWc1QmM2MjJHeGhPK2VjYzhqTXpPeDZ3aWFsWk1lT0hlMTJGS1JhYXRZMktlY1NZK3lGSzlGb2RJYlYrNms2Q2hTS0UwdEc5KzdkNTFSWFZ3ZUxpNHYvTGhQOVYyMCszL1pYZTJDbFphMjFzZHljRnB2VEpmWDVmSXdjT2ZKenIzRTc3c0xtRkxYVTdLZTk5N09qeWJlbWFZcHdPSHlaTmFWRE5iUXJGQ2VIb3FLaW9ydjI3dDNyUCtPTU0vNlpZcm5aOFRhNzlBT0hvQWxOMDJSSGNUWmIyREl5TWo3M01wRGpLbXdWRlJYczJiT0hxcXFxcEtXVzZuNDZ1Z3BJS2V2UUFvSEFGNng1YW1yMGtFSnhFaEZDRE9yZnYvL3RtemR2YmhvOWV2VEhsdVdXbk5zbWhHaGp0WkdTSVUyTnM3bmRidHh1TjE2dkY2L1hTMFpHQmdNSER1ejh3bFpkWFowVXRlcnE2cVNvMmYyZkR2ZXpUYXVVYzV4M1ptYm1BNmdoa1FwRnAwRFR0QytPR0RGaTlzcVZLeCtkTm0xYWxVUGNwR04yRzZacG1uYW1OSjNWWnNmYW5CbFNlMEx2NTVVcFBTN0NGZ2dFa3BNNnFxdXIyelMxTzJOcTZjbzZwSlRpbGx0dWNWazdDdFE0YjRXaUUrRnl1UzYvNG9vcmFvY09IZnJZOXUzYnpSUnhzek9uMHQ0cWI0dWJNNWxnVzJ6MlY2L1htM1JKczdLeVBwYzVicDlaMktTVTdWcWxuSlphdXFiMjFBem80c1dMZjZBV3J5Z1VuUk92MTN2anUrKytXNU9ibS90N1M5RE1GSEdUcVpsU1RkUGFXRzdwU2o5OFBoK1ptWm1NR2pYcXVDY1RQck93N2R5NWszMzc5aVhMT281bVRWNUtCdlFicWxaTm9lamM1T1RrM0ZOZFhYMm91TGo0NzRDWnhpMXRFM096eWo2UzRuYTRXRnRXVmhaRGhnenBQTUpXV1ZuWnJsYXRnMVlwMG1WQWc4SGdCR3Vac2RyN3FWQjBidHhGUlVWM2JOMjY5ZEN3WWNQZXQ2d3oyMHBybHltTngrT3lvNExkZExHMjdPeHNTa3FPMzBiMlR5MG9UVTFOYVd2Vk9oQTFrYktsWFR0dzRFQWZuODkzSDJvQWpVTFJKUkJDbEEwZVBQaVdGMTk4OGNBTk45eHd3T0dTSmkyNGxQcTJwRXVhVHRpYzRwYVZsVVZPVHM1eEd5RGcvalQ3R3czVFpNKy90MUs1ZXcvVis2dG9PRlJEYzMwOWdhWm1RdjRBa1dDSVNDaEVOQkpCajhTRXJzZUk2M0ZoR3FhUU1pRnNQVDNoZWFKcDM2WHFjbEdjbkUrcEJpNFBhSjdFd0VwdnRqb25SNEhMNWJwNDJyUnBGY0JUdE1iYlROSWtFMUxGelpsSWNMcWt6a1RDeUpFamo4djAzVTlsc1pYdi9ZVEtxb05VMTlUUjBOQklzOTlQUzB1UVVDaE1PQkloRW8wU2pjWFFZN3JRNDNIaWNTTXhObGhLSVNWYXJIcjM3VUtJdTlSbG9qaHBTQlBpVVNBS3NSWUlOVUpHTG1UazJkNlVvZ015TWpKdXJxK3ZyeWdvS1BncllIU1VUQkJDU0R2ZWxtcTVPZDFScDdEbDVPUXdlUERnRXk5c0I2dHIyRmRaeGFIcVd1b2JHbWxxOWhNSXRCQU1oUWlGSTBRaVVhTFJHSHBNSnlGcWNSSXhOU21rbENKWXRlMUNsOHQxbjdvOEZKMUw2QXdJTjRFZWhweWVDWXRPMFNINStmbDNiTjI2dGNLS3Q1a3BoNVJTeW9TMkNlTHhlREk3R28xRzZVamNNak16aytVZnZYdjNQbkhDRmdxRitXUi9KUWNQMVZCYlgwOWpVek1vTWpJQkFBQWdBRWxFUVZUK1FBc3RTVkdMRUkzRmlPa3g5SGhjNlBFNGh0RTZnbWo3aHYvdDd2UDU1Z0o5MUtXaDZKVEVvK0EvbUJBM2wrZHpmN3AxNjlaMW1sLzlvb3N1T3BhNzl3WnVBdmFTaUxHMUVUWkFXaVZkcG1FWXhPTnhHWXZGUkRRYWxmYTJxNWFXbHVTMnErcnFhcXFxcXFpb3FHRG56cDJVbFpXUmtmSHBXOFdQU2RqMjd0dFAxY0ZxYXV0c1VRdlFFblJZYXJFWXNaaU9yc2VGcnNjeERCTkRXaTRvaUxJekJueGZ3R1QxNlZGMGFzdzRoT29UdXhWT0FHVm5mcmEreWZKZDJ3SHc5ZjNpcDM2TWFOVzdBRlNkK2VTeC9OZ2xZVE8yYlZENTkzOUxZcXU4Z1oxSUFDa1FVa2dwTUUxSlhFTFVnR0JjYUNJbU5XSm9Jb0pMaEhDSklHNlhIN2VyQ1krbkRvLzNFQWNYWlhIR0dXZHc1bTBmZmFyZjU2anQ3ZjFWQjZpc09raE5iUjMxalUwMCt3TUVXb0tFd21FaTRVUmNMUmFMRWROMWREMU8zREF3REZOSU14RlhpeHpjT1UzVHRIbnFVNlBvTXBiYjBhNzZPNDNKMUx6ZmVuZmdqeWVRbU1UakE3eVd3ZVNTU0pjRVRTS0ZpUlFHa2pnbU9nWXg0a1JsbklqVUNjc29RVE5Ld0F6VGFBU3BpL3VwcmEybHBxYm1VNyt1b3hLMlFFc0wreXNQY0tpbWx2cjZScHFiL1FSYVdoTEpBcWVvV2RaYXNsN055b0JXNzNpdm44ZmovcDY2REJSZGluQnpJc21nT0x4UDZ1ays2OW1pV2IwN0VEZE5nbVk2eEUyWHBraUtHem9ScVJPU1VWck1DSDRqVEdNOG1IUlBXNHhQdDRENXFGelJUL1pWY2FDNmhycjZCaHFiRTNHMVlEQk15SkVCalNXU0JiYW9ZWm9TS2FXUVNLMGd2OGQzZ1Mrb1MrQVU4dGFhWXdTZTIwSGtYOVVZVmFFdThacGRmYlBKT0s4bnVkOGNndGJOZXhRL0lSTjdTMzI1SiswMWYvTFhKM21HYS9uNTFiMVA5dG5EOS9PYktMaWlqc1l4THhPT3RkNGlFS012elJ2eGRXcjV0ZTJTU2pDRU01a0Ewa1JLQXhNQmFOSVFMaUdrUzJxNGhZWmJ1dkNZVWJ6Q2pjOXdvelUzazVtWlNhVWVZYWpyMkVQeVI3VFk5bGNkcE9yZ0lXcnI2bW13a2dXSkRLaXpzVjF2NjRKYUdkQ0VDN3BydWlydE9QWHdQL0V4d1JWN3U0eW9BUmhWUVlJcjl1Si80dU9qL3lFOXJON3NvOENuZVc1K2IrQlBKamdzTmkvZ0Fkd1NxUUdhQkdGQ1dwYzBLblhDVXJkYzBnaCt2NSttcGlZTzZVMGMwQnVQcjhVV0RJYW9QSENRNnRvNkdocWFrdlZxd1pBdGFqR2lscWpGNDNFUk42d3NxT1dDVm42OHZwZkg0LzZPZXR0UFBTTC9xdW15cnoyNnFmN283eHlQZHNuZnNmb2ZqL0RTM21JSzNINWFHZ080aDAxa2NHQUxlNXI4TkllTEdmK05temkzNlBobWZYdDV1dDBFZkp6T2FwTklDVUthU0ZNQUJsTEdwU2swWVVnM2NhSm91SEVSbGk2OHBoc1JETkxjM0V5dEhpVkh5NkM3SzRzc3pYZDhMTFpFdlZwTnNsN05GclZFRVc0c1VZU2JHQmhwdWFBbXBqUnRGMVFVRnhYZEM0eFJNbkJxSVFNNlprTzB5NzUrb3phTUdkQ1A4cGZ0dWpHMmVPR1grT3JzNzNMcnR5OG5ZK05hNnMrOWd4dnVlSkNaWS8yOHZhN2l1RCtmUUl3Q3BsdFdtdy93U2l2V1ptbU5JR0cxWVZ0dGNXbUlHQVl4YVJDVk9oRVpJeVNqaEVJaFdscGFhSXdIcVkzN3FZbzFIQjlYOUZCMUxRY09WVk5iMTVBbzdXaHBvU1VZSWh3SkU3V0tjR05KYTgyd3V3dnNMS2dJSGRneFdkT0VzdFpPUVVTdXAydi9Bb1pFNitxL3d4SHhrSjJibTFnYWtwbFBkazR4L2ZzbGZ1ZWMzRXppa2MvTnhmN21ILy80eDNQVHVLUjJsbFNrWmtuakdPakVpVWtyVTJycVJDSVJRcUVRVFVhSStuaUFRM296TmJyL3N3bWJIbzliTG1nOURWWnB4eWZ2ck9LdmY5L0EzdVlva1ZnMFVZU3I2OFNqQWRIVTdDZXN0M1lYekpweGpjdm45ZDZiN3JFMy8vUjZTcys3bHhjUHBOeFE5ekl6enB2R1ErK2xjUjMrN3llTXZXa1o1VXBUVGlPeXlQajFMZlRaK1RXeUN4MFg3SVR6eUY5OUM3MTMzazN2ZDY2bnh6Zjd0N21JajNTNzR2T25UNTgrTXdlSTdoa09xODFqaGIwMGFjWGFaRUxZRXVMV0prc2FKMEpDMk1MaGNLSUVKQjZpTGg3Z29ONUlYQnFmWHRpU3BSME5qVFQ1L2JRRWcwUjBBMHcvRmVYVmhHSzZuUVVsYmlSTWRkbGFpS3M5OS9qUDd3YSszT0d6eGo1azBhOWVwL2FvWG1JTGExWjlRTW5VU3loVDE4enBZeFZPbWtDM1MxTWEwMHZIa1AvMENGd2IvMG45VlgrazdwZDF1Tysrbk81Znl6cTYyeFVuQkUzVEpxNCs0d2RUSFZhYnAxWGNwSXVrdUxXNnBEcEc0cEJ4WWxJbkdvMFNpVVFJR2hIOFJvakdlSXZsa2paK09tRnI5Z2M0Y0tnNlVkclIxSnpvQXcyR2lNUk5wQURaY3BDcXhvamRCeXJpaGt5NDExSUtwQlFONVI4TWRybGNjdzc3ckRuWjhNWi9zdWlmTFVkK2hYVnY4OUo3ZzVoNVVTOTF4Wnd1NVBZbjc0RUJHSzlWWWpwQ2VlNUpaK0twM1Vuekk5dUpiVzlFLys4M2Fkbmd3amVwNzFIZHJqaHhkSE5sM2ZUSDR0djdPY1dOdHJWdHdsbmI1clRhWXNTSnhXSkVvMUZDTWthTEdhSFpDRkVmYjZFNjNrVEFDQis3c0ZVZFNIUVhORFEyT1ZxbXdzVGlKcmk3a1o4aENkZlhFZFRqMXVESTVLUVNJWkZhWHA3NDF1WmxQeW1aTm5reXBXTW1NL2FhZVN6Nlo5dkFuM2ZnVmR3ekdWNzY2WE5zUGtJTXV2YU52N1A1QzVjenVmQnc0cmVQelZ2MjRWZlhVeWNUcUI1NEovVEY3U3dERzNzUlJlL2RRTjdZamtiVHVQRGNQWUhNdWswMC8zZmJVcEw0MHYvaTBPVnZFWXVsL0lqUGRWUzNkMFVHWEQzblU5V3dGVjgyajFzdnN3YzNuc21WYysvbUhHdFBzZnVjTy9udU44NDV4a2MwaVA3Z2VRNk1hRnZEZGhqNm5wOHorR3BTRXdsQ3VLeERReE5KcTgxSUpCS0lXNGtFWGRlSnhXS0VaWXlRR1NWZ1JHaUtCNms3b3kvaDMxeEV6OWR2U2g1Ri8zRm11M2tzYmNvOXFtdnJPRlJUUzUwOXRjTnFtUXBIb3NUaUVreEJabEUzWEFlYThEZTdSSmEzdFE4VWlRZ2YySDVKM2FyNWQ4eDZOc1lOUDF2Q3M0Tmg2L0tmTStmK3h6aHIxVUttSmkvd2ZDWi83OXRzdU9iblBQVGNWYng2ZDBlekpnL3h5aXY3R0Q5ckxIbjJ0dzY4ellLZkxtTnpyRC9YM1AxdEpnZWVZODdTRnNwNnQ3RDVxVkU4K3RSTWh2bVVwcHh3dklWay9lSmlza3ZqeEZmK2srWU5SWFQ3eVptd0o0cnJnYkZFdnZNeUxkc05xTnBINU5VbytwNE9ZaVZEeDlKOUdvUnUvUUM5YUZKS0NNTkFPZ1RRTldFY09lT2lSTzdiZDNTM255WWMyRmZCQzgvK3h4SHZOK21Lci9IRjh5ODZxc2YwWFRTUWd1ZW1BaEJhdVkybUg2dzk4czlvbnB2ZTZQZkFPeGZ0LytrbUlHNGRpWDVTcEFuQ05FR0F4QUJwSUlXT0lWM0VFWmF3UldTY2tCbkRKeUprR2w2YW0zYlF3QmVvOTRTVEc2NWlkYU9RN09wWTJBNGNUR1JCbTVxYUNiUWtDbkhEWWFzSTE1QklhYURMREhKOVFqUkd3a1EwajlCTUtVaThPTTNyOWQ2VmQ5NjNXYms4bjdJK09RQk1uSEU1dzVZdDQ0TUttRHJDOFdTRmx6RC83cGVaOUt2SGVQNmFwN2tsWFNINDN0ZDU2ZUFvNXAyZmsvelcrcVhMNFBiSFdkbDdLNHNldUlzWnVkTjU5cm1yS0FQVy8vUmVYdG81azJFamxNNmM4TGpLdFBQSnFuMlQydnRpWlB6aU1vcXU5K1AvMW44VDNnUGlhMWRSY0VVUFdyYlhRZFVlQWovYTA4R2o5Q0Q3SnlNUXIvNmR3SWNHVE9yQW9udmdlZ3BuNUNOOGNlSXIvMEh6MzBMSGNQdXBUNS8rQTduL2tTZU82Mk5HMzZqZ3dPQ25qdm5uU24wOXJ3SCtEZWlBTHFXTUM3dk9UYUtSNkVyQUJPS1lVcE5DeElVaFJUeWVzTnBrbkFodVFtYkNKVzJvckdISGRTOFF6eWhtZUdhL0k3dWkrNnRhWGRCbWY4SUZUZlNCSmtZUjZZWUVhUkNQeDhIbnd5VWtoaDdIcXZMUjd2L2JydXVGRUZmNkNuT28vY2RqVEx2eVNvYWVONW5TeS82RERiRVk2VHpPa3VuZjVwNkJ1M25pcDMrbk1zM3RXMWY5SGY5RlZ6SGVZWUg1dkZDNVl4OWJkKzZtUE9vbEw3Q1B5Z0JBQy81QTRuYkZpVWY2NDRpaUhuaEhGZVByQzJiTWg2Y3c4V1pvZVM1azRNalpMTmYxRThqdCt3bitYKzV6V0Y3dFhTTDl1YjlSZSsxZmFQamhMdVNrU2ZTNHFjY3gzSzQ0a2JpRWR0bW1nVCs1d09HU2VscHIyNUlkQ1poT2w1VEU5RjFkMTVOZENSRVpTM1FsR0dHYWpDQjFldUN3SFFsdWdKaXVjNmk2cHRVRkRiWk93N1hyMWVKbVF0aU1lRnpFRFlISEpZUVJONFZoQ20xb1hxRkxjN252QkNoZjloQ3pYdXJGd2wvOW5xbEQ4dkVGL3M2TXljOTE4UFNEdU9XQnEzaHAxbk1zZW1ONnFxeXg3Qjh4SnY5c0ZFN1BjdlRkUCtESzU1Ynh1NHBCM1B5ckpZeXVmNW01Mzc2THhiUVFIVGlMSjRlb2krbWtDTnZmM3NCZmREN1pNK0xFbm5xVjVtMDl5UHVQYVJUbHVZQnFBbmNkSVp2bExTYjdtd1BRaXFESFAwdXR2Mkp1Qk5EdC8rNGthK2wvVWZ1ck9pdW0ya2k4RHVMYjZ6RFA2a3ZCdEtHNFgvZ1g4V1RNOVFpM0swNG9QVDNkcmgyaDlmN1hGdk9nYmxsdVRwZFVncEFTYVZyaUp1UFNGQ0llbHk2WEN4MHpVUUlpZGNKbWpCWWpRck1XcHNGb29VWnZwc2lkaDBlNDBndmJBYXNYdExHcHlXcHdUOHhZaTlvTjdycE8zQUNrYVk4andoUXVOQkVYcHBUQ2s5L3ZtOEE0YUdIelAzZVROK2FiVEIrU24zaUdRQXVIeXcvNFJzeGkvcFd2Yy9OVHk4aU5lWk1sSGRIM1htYU43eEtXcHJxVnZ2NU12ZnNIVEUyNnRGZng1QXRYRVkyQ1Q4WFdUaUlob2krc0pmcUMvZjhBL2h2M2dkY0ZzYU9vUFlyVjBUSjdPU0dueFQzcWZBcC9ra1h3MXJXRTkvanhQbkE5M1V1MzBURDd3NlJJeVNpSm5Cc3V2QTljZTVqYkZTY3RUSUg0NHJJQmQwOGVzZmVCVlVtWEZHeVgxR3E1UWlSTXAwVDVoNVlZVG9rdVRYUmNSTkVKeXhnKzAwT0xFYkVLZDFzNHBEZlJ6MXZRL2puRGtRaUhhbHBuckxVRWc0bkJrZEZXYTAzWGRlSlNJakdGRVU4dU9oWkNDSEZOV2UrOEZpRyttWGk0SE1vRzVsUDNyMlU4LzgvZGJIM3Y3engwLzFJK2lFRzBRM1hMWWVMZDMrWlNnZ1JhcjNMV3ZiU1JvaXN2WjloUm5qd2xhcDJVVkZIclcwcnV6OC9EVjlqZXhUVDMxQkhmN2pqcW9oQ05KcjVmRjBQZldJY1lONGE4YjViaUx1MkJaOUpZOHE3SUl2N1dua1QxK21GdlY1eE1lcml6cjcwNzU4dTVwRFRJSjF4UnFhVjJKQmlHSVF6RHdGa0NrbWlVanhFMEl3U3M4VWExdXArSTJiNDlUbXRYczVaY25kY3Fhcm9leDdDR2o1aW1hUzFtUVVpRWVHenUyTmxlV3ZWbjlPMC81S0VSaDNqaWU3Y3g3WUVWK0MrYnhjemhPVVRyRDFPelZuZ0o4KzhlMmZxSE5mQTJMLzJ6RjlkYzFsOWRFYWNhZmZ1VE9ha1VYOTlqTDhHUWEvK1AraC91UVh4dEVrVi8vd2FGUHk1RnZycVd4bDlXSDlYdGlwT0hRQXk5cytlbGw5SzJhTGROSDZsZHRHc21oQTNEU0pSLzZOTHVKVTJJVzhoMlNZMFE5VVlMMVhwVCsrZjc1ejllWWxkNVJic0ZMZjRXeXlWdDNUd2xvdEhFTG9PNFlRaHBTbTNyaHYvTkgxeDJ4anR3bkpzQ0Ryek44Ly9NWWVyMFVSU3BhNkpUY21EY3kxMzY5ZmZaY05VeG1Cc0RqdXB1aG1GUVdWbkpnQUVEanZxaHUvRE9ndzU1NDQwMzB2OWhrbkxQSC83d2h6dWVmLzc1T2lBSWhJQ3dFQ0ptdWFpR0VNSzB0bGxKYTlHTHRMZFkyY3RlY25KeTZOYXRHL241K1JRWEYxTlNVc0tnUVlQYTdFaHcxOVczcjFtelZ1Y2xyRFZyMDFROGJtQlkxcHFVQ1hVdEd6amdsdU11YWdCOUx1Q1c2VW84RktjK0V5ZE83RFN2cFhVdDZPZEc2YWhSb3lZOS8venpLKzFZbXhCQ3h5ci9FRUtZUW9qa21qN24zbEY3VzN4T1RnNTVlWG5rNStkVFZGUkU3OTY5NmQrL1A0TUdEYUtzckZXS05Ic3BTekRvcUZtemR4ZllvbWI1dTZacEN0TnFuZHIwZjZ0eVhTN3RGblZwS2hTS282VmJ0MjdYekowN056ZnBqa3Jwc2R6UnBFdWFXTmRwQ211N2xiQkxQeExyQnhLdFZ2YW1LNy9mVDJOakl6VTFOWVJDcmZXS21qMW5MUlFPdDQ3NXR1SnF1cDRVdG5iVzJvaGhRMllCZzlSYmRYcmk2cFYxZXJ4MnphWGU3T09JRUtMc3Z2dnV1NWoyU1FTWGxGSkxUTjZXd2pSTkxHRkwxclRaNG1ZM3lOc3oyK3dWZm9jT0hXcDkyeElkQmdrWE5HS04rVTY0b0RweG82MjFKaTFyN2NhdlgrMXl1VnczcWJmcDlNVTNwcURydnZZdkZCNkRDcXBha2VOTmZuNytWMHRMUzcxcHJEYk50dG9zY1d0bnRkbmlabzgxQ2dhREJBSUJHaHNicWEydEpSSkpMSC9Sbk5hYU13dHFENDgwREFQVE1LM2xMQWxyYmNtVGkyNEVWT1BTYVV6ZVBXZVRkWFYvWEgyenU0NmwxamVMN09sbmtEZG4yTkgva0NkVHZkbkgzMm83KysyMzM1NXdORmJiNFN3M3A5WFczTnpjeG1wekovWVhSTlBHMWhLMUpDYUdaYTFaRnB2bWRydHZWRy9QNlkzV3pVdjMrMGVkNHA5QURidzU2czMrSENndUxyNENlTk1TdHBpVTBpMkVjSk5JSkdneWdiREtQcVJoR0NJZWo4dlVXRnNrRW1sanRkWFYxVkZTVW9MYkt1V3dkNEltbFRGdTFaRVlwb0VwSlZKS0pJalF3UjFUZ0F2VVc2TTQ1Y25zQmtKOC9zOWpHbkJvSzdUVW5EWmJzVFE0YitlcmkwY052dUtPalpiRjVrRktIWUZMU2d3U2hoU21OREdrZ1NGMTRtYVV1QkVtSGcraXh3UEVZazFFb2cyRUl6VzBoQS9RSFB5RStwYmRIUEwvT3lGc3lXTGN1RzJ0R1JpMkcycEtwSmxZemdKU2VEMmVHZXFLVjV6eXVIM2d5L3Y4bnlmVUNKV2JRUStkZHFkNFlOL2lTY0FIU2FzTlBFSVNSMGdYQ0ZNaWhaUmdTaWtOdzhRd1RPS0dpVzRZNkxwQlRJOFQxWFhDa1NqQmNKUkFNRXhUb0lXNnhtYTBhQ1RoZ3VweHZXMFcxSEpEcmFRQlVpS2E5bTRaSVlTNFZsMzFpbFBibkhCQlRzOFQ4MXd0TmFlbHFBRjQzTzZyL3ZlM0Mvc2xMYlpFbkMxbE53S1lVZ29qRVdzVGNTTVIrOWVOT0hvOFRpeW1FNDFaNGhZSzB4d0kwZEFVUUhPV2R5UUxjVzBYMURRVGJtakNXdE95czdPdVUxZTk0cFMzMVBKNkorSnJKNExtQTZmMTZSNDdZc2lGcEd5elFsb1pVb2ttcFJTbWxKaW14TEFUQ2JhNHhRMWk4VGpSbUU0a0dpTVlpUklJaG1nTUJOR1NUZTVPVVV0YWEzYkNBTEhxVDcvTDBEUk5DWnZpMUVTNHdKc051YjBTL3o1Um5PYWI1bk95TXE2WU9XVkNobTIxU1Z2Y0VyUGFCSW1aUmlKaHRVa013eFFKbDlTYS9xSEhpZWx4SXBiVjFoS080QThFMGV3c3FHNjVvSGJTSUdtdFdTVWVreTY2NEZxZ24vb0VLRTROSWRNUzFwazNCN0lMb1hzSmJmYjhuU2k2OEVMbTQwVEpvM052SFpmR0hYVkowS1MwaFkyazFSWTNUT0p4RTkyMjJ2UldxeTBVamhJSWhYSHJ1SW5qeHNCRlhBb01LWVFoQllZbGFKWnFhdTdDMHVrbkpFT2tVQ2hPSzNvV2RMOEVlTnRodGJtRnhJV1FXdUl2a0pSU0lnd3BNVXdwRGRNUWNjT1F0dVdteDFPc3RsQUVyZFVOalNkSGhTUmFwNlI5aU1iR3h1RkNpTXZVVzZCUWREMmliLzZHb1hlOHpOWk8rdnJjTHRjbGE1Y3NTRTBpdUN5ckxUbk9TSnJTS3RnMUxjdXROZFptSnhJU1Zsc0VkN0p1elJJMk05a1RtaEExUU9UazVIeE5YUjRLeFFtazhqV3V1UE1WdHJWKy9NbnRPWkRKMDZjeGYwb0poeTFFYWR6RmkvL3JaL3owTVNkd3lmZ3VIcnJ4S1phbGprYnpuTXZpbGJPWWZJU2YvdUx3d2VPQVQxS3NOaDJCaGlSUitpR1FwbWtsRXF6U0R6dDgxamJXRm1zVnR0YWtnVFhGd3pSdE4xUm9tbmExdXRJVWloT01aeEFMZmp1SEczb0E2RlJ1V3MyY1I1OWlidmFQZVBiQ3d6VHlOMjdqZDh1cXlMdDhER1VudEhIQ3phVVBQc2F6NDQvOUozT3pNeWNCLzAzYk9Kc2JaTnlxa2hhbUZXc3pURk1haVQ1U21ZaTNHZWhHYTZ3dEhJMmhwYnFnOW9IVmlCb01CaThCaHFtclRLRTRxU3BIeVpncDNEeEVaL09XR2lyLzUxZHQzY3ZxTjVnMjdSZjg4citlWWV3RGI3QkgzOFhjMlE4emQ1TjF1MTdOUzQvL2lnblQ1akQwK29YTVdWdWQzRVVTcmR6RVEvYy96TWhwMzJYb2piL2c5aFc3cUxWdVcvLzRnNHo5MForWmUvOHZtSFRqZll5ODR4bWUzMzZNZFhleFNwNlo4MTJ1V0ZxWmVNN0dUZHgrL1lQYy9xYTE0cno2SXhZKzhNalFRZjM2RGJVRXJkVWRsYmhNS1RYRGxDSnVtQ0pxbUJpbXhOUWpIS3p6VXgrenl6L0M3UDd3Mzd5NVA4VHVEVytoMmFLV0xyNEdDSi9QZDVXNnFCU0trNDFPN2ZaM1dMYkR3N0FoK1pSY09JN1JOUit4eWxyUld2ditSMnd0T1pldlhYc25HMzk2RWFXZU0zbDB5Y004T3NiNjhab3Fhb2QvZzFkWC9vcTFzNHRaditSbDFyUUFzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2cms4OWNWeG5tMG52dlkrMGZGckowVEQyTFhuZy9LWHhIaGJlRVcrNjlDUDcrWjE2czlMUHVOeXZaUFB3cUZsNllCN0VLRnZ6b1JUWVB1WTdYLy9yNGVjNDRtN1F5bzRDbUNTRmNBakJOSW9iRU1FRkNNdWFXR0swR3BtSFM4K3h6RTY2b3cvM0VibmEzRGswSWNhVzZxQlNLazZGbHU1bi8vK1l3UHhsajY4dkU2Yk9aUHlrUE9JZHJocXhrOFp1VnpDdk5aOTM2S3NvdXZLN2ptRnJmYzdsalVqRjVRTjZZY3loNytnMXFneERkOFRZcmdpTjRkdWFaaVRIOEpXT1lQLzBkSnF4K24vSXBsd0pRT09KTFRDNU9XSTJqUjVUQSttb3FJYzNZL2ppdlBUS0hVc2QzTHJ6bjV5eWRsSVd2ZEFxUFhyNk5HUXVmSkM5WXdyd254MUVFUkxlOHdZcmdDSjZjZVNiOXZGd0NMRTIxMm9SSWRDSWdoS21CUUVyTWhQVWxUTU9VaVRpYmhpSEJ0RnhTZDZxMVpydWhnQWlIdzFPQXZ1b0tVeWhPZG93dGxUd21mdmxNRnJ5OGpmTHArYnkySTU4cmJ5cytXcTgyNFlMcUVHME1FQzAraXhMSDJMbWludm40R3FzN3RNcDhueXJHNW1IWVZ5OWk5TXN2VXY3bDY1aHUvVTdSUmorQnBncHV2LzU5Z0Q0REJ2UWY4Y2tuKzk1ckcyZERCd1FTSVlRUW1rQ2ExaFJ6MHpTdGpnUXdwVXdLbTVZcWFwYWxCaUM4WHU4VWRYVXBGSjJUb3ZGakdWM3pQc3Yrdm9YTkplT1lXbkxzaitIcmtZbXZ1cHJLV092M2Ftc2FpUFlvUHM2TGxFS3NYN2FhelNVRDhMMjFtaGV0eFdHK25EeHllMzZKNVNzZlkvdkt4OWkrOGorK21HcXhTZG5haVdCS2lTR2xNR1dxSzJvbUZwU2FpZElQelJJMGU2aWJzTXM4TERkVUNadEMwVm5KT1l0cmhqZnc0cktQS0prd2dxU3VlVFB4RWFLeTZjaEJmdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg0OXJxVWkwUzJ2TVBldGZPWTlPSWRIdit4bjBlTnZVd240aG85bE1odFp0S0lDUDVDaE4xNlVZcTBsVi9SSnBHWmFvbWFDRUVpaUVWM29ScHh3d0U5ZEhLU1pxR3R6cHlZTmJEYzBGQXBkck54UWhhSXprOFhFU1lQd2JmQno1WGpIcVBhU2M3ajUzSGQ0Nk00ZnMrM0JoVHg2dUlmd0RtVGVqNy9PZ2w4dlpkSTBQOUhzZkNaK2RUWlBUdmswbzkvYng5amdMQmE5TUlrUGZyMkJvaG4zY1VPeEIyWk1ZL0k5THpCMzlWa3NuektNaFQrZXhvSmZMMlhDTWo5UmIxNmZ5MlorZThnL2x2M25oeVQ3Um5GSm1SZ1pqaEJDQXlHbGtGNlhJS3BIT1ZnZncrVnk0OU1rcGxYK0lYcjI3RWswR2hXeFdJeDRQQzVNMDlTa2xDNWQxMyttYWRwMzFNV2pVQndkbjJhdktCK3YrbXlXMEtZL01tbDVDY3QvZVJFbHA4aDVESVlpUzNMR1h2c2kwQUlFZ0tDQU1JS29RT2hDWUdoQ21HNlhKcjBlRno2dlIyYjZ2R1Q2ZkdSbCtzak96RUJMellhU3FGL1RORTJicEM1VmhhTHpFbTJzNFBrVjJ5ajU4cm1uaktnQlpHWDZ6a3ZuaW1MTmFjTnVzNUpTSkRvUlRHdUZnWkhzUk5CU2luS1JVb3FHaG9aaHFHVXRDa1huWmMvTFhISHJNN3pVNHlvV1RzazdwWDQxSWNUWnE1LzVVZThPeEUxSWlVQ0NLYTFNcUxPSDFEcmNxUTN2SkhwREwxSlhqa0xSaVNtOWlyVXJUOTNhK1RGbm56a00yRzhMbXdTWGtHZ0kyMktUUW9LVWR1K29kZGhiclpKWlVWcEhGQW1YeTNXaHVuSVVDc1hKb250ZXppakxTa3RPK2tnY3NsV3JwTjAvS3BPVkhZWjFhS2tXMi9lKzl6MlhFR0tpT3JVS2hlSms0WEc3emh0NVpyK1VodmhrbksxMWxCR1dLeXJidXFOYWlodkt3dzgvZkFIUVRaMWFoVUp4RXVuMi9DUGZMWFZhYlRMUkZKL1lGaS9CbXE2THRFUXRPZExJYWJGWkNKL1BkNTQ2cHdxRjRtUlRXdEpyU0h0WEZLM1ZIVTBZWmFaMUdMSTFFYW81eXp4SXpGNDdYNTFTaFVKeHNzbkp6anpIWWJHMUtmdXc5VXBhV1ZKcDdUODJaR0tza1daYmExSktjZTIxMTdxRUVNcGlVeWdVSngyM3kvV0ZBYjN5WFNrV204c1NORTFLQkZoeHRqYnVhR3VNVFFCaXlaSWxYd1J5MUNsVktCU2R3V2hiOXVoOS9aMmlKcTE5b3poVzh5WGliTTZhTm9mRkJwQ1JrZkVGZFM0VkNrVm40Y3dCZmRza0VHZ2JaeU0xemlhbGlTbk5WdVVqVWI4MlJwMUtoVUxSV2VpV216V0Vkc21EdG5FMkhIRTIwMHkwV2JrZFk0cUVFT0pjZFNvVkNrVm53ZU4yRDZkOWpDM1pMNHF6bmkzcGpyWmFiT3phdGFzbk1GaWRTb1ZDMFZrUVFnejY1ZmRtNVhRa2JpUlVMVm5QWnJ1bGRveE45T25UUnpXOUt4U0tUc2VsNTUvYnh4SXlhK0FrR2hKaFQ5V1ZXSlVkVmhlQ2xJN3Nnc2ZqVWNLbVVDZzZIWDJMQy9vN3JMUjJ0V3hZSTR4YXV4QVN3b2FVVXJoY3JyUFZLVlFvRkoyTm5Lek1NeHlpMWtiWXJEaGJ3aU9WQ01zVkZacmRJeXFFVU1LbVVDZzZIUjZQZTFDS3FMa2NGaHV0NHBaSUlOaXVLTllkemxLblVLRlFkRFkwSVlZNHJMVDJKUjlwRWdnYUlHcHFhZ1p6dUhXQkNvVkNjU1NxTnpGM3pvTU1uWG9mYzlicngvT1JmU3NmdjcvUUtXalNtc2RHc3VURFRpQTRMTGFjbkp4QjZsMVJLRTVYL0x4NC95OVlWQWxVdjhHMDc3OUI1VEUvaHM2YUYvN0N1cDVYc2ZhbFgvRGtlRS9ibTdlL3hJUWJsN0ltOXVsZTRkRFNma1drTGRLMU94QVNncWJyQnVHNFpiRzUzZTR5OWVZcUZLY3BMYnQ0czNFZ0Y1WkE3Wlp0UkljUCtoVExZY0xVTnVxVWpCalVacXQ4a3RLTGVITGVGTVo3UDkxTExPeVJWNXpHSFJWdER5a00weFM2QVc0cHBkQTByVlM5dXdyRjZjWlc1dDc2SXV1Q1llcGlIamJmK0JIUllJQ290NUlKTmRleGR0NDViZU5Uc1VwZWZQclBMRjVmUlMyWkREdDNDZ3Z2dW9CaE9aVTg4LzFuZUdKSG5OaU9SWXhkUFpabkYxL0RhT2ZQN2xqTDdZL29QUHFuYnpEK3pkOHdjaG5jVUJwbTNZNXFhbU9aVEx6cE5oNmRWSXl2OFcxbTNQb09lUmRtVXJtOWdkb21LUHZ5TkJiY09LUlBXMHN0R1Y4VEpsSm9nRzdheG1NMDRZb0tJUWFxTjFtaE9OMFl4cU8vZllTVk0vb3lhdVozMmZpSE9keFJNb2o1enp6Q1c2bWlSb2cxanovREU0MWplSGJKWTJ4ZmNpZlhCRmN6Ni9GTjFGTENuYis4ai9uRDNZeTZhUjRiVTBVdEhUVU5NR1VXYTMvN0NHL2RPNUQxUzE1bVRVdXJhOHp3RzFpNStHRTJQak9Ob3ZVdjhwTTNRNzB0eTZ5OXVBRlNDT0YyaWNRZDNON0VEVUtJQWVwTlZpaE9SM1MyN2doUWRrWXh0RlR5UWF3dnczcWtjMWUzc0d4OUp0TnZ1b2hoT1VCT0NUZmNObzY4OTk5aFhlT25lTnFlWjNITmlNVGF3THpTTXltTE5WQWJ0RzhzNXNJeEJRbGg3WEVPZDB6SVplTTdPMG82RURWN3NRc2tCeFZKM05ZTlN0Z1VpdE9NeXRYUE1HTlpKZjZtTUd4NWtIV0VxUXQ2Mkh4ckJUYy8rRDN1ZEFhb212elVVa0JwVDZjNDlhV0VqOWpUQ1BUNERDL0V5ak5FZFNCTkRLNm9PQS8rSGVtWFlyRUpDWnBJbWFacnk1dTJhOWV1WWlCRHZjMEt4ZWxGeVpRN2VldVphWXp2K3lXVy91RVJYcDE1Sm1kZGRUY2JmNXNpYWdEZDh5aWluajAxYmQzSld2SW83Zkg1dnM3S3lnYkl6czM0MmJ4YmNqcTAyRkxRQ2dvS2VxdTNXS0U0VGFtcG9Ka3ZCcUFBQUNBQVNVUkJWTHk0aERLZ2ZFODlKYVhGNmUrWE00S1o0OE9zZU9GdHRyWUFMWlc4dVBRTmFzLzlFaE9QdTdCVnNlcC9LL0FEMGNxM2VlTE5NT01ubk1rWEI1K1I1eEN5MW5xMkZLUnA0dmI1Zk1YcTNWVW9Uay84bFExUU1vWTgvSlJYZWlpYjR1bmdubGxNdnZkT2FwLytNN05tcjhRZnk2UnMvQlNldldzTVJjZjlWZVdTVjdtYWFkZnZvaktXeCtncE4vRG9wRHlhZC9mSTY4QmFhMTFHSlJDR2FVZ1JqVWJ2OUhxOVQ2dTNXS0g0YkJpR1FXVmxKUU1HSEVQSSt1TlY2c1E1YVh5YkdiZSt6NVcvbmNNTktaWmdaWFhkZ241ZnZ2a2RJR0FmQWtJSUlnSVJFd0pERThKMGFacDBhNXBXcE02bVFxSG83R1JsK1BJY2JtZ2JTODA1NVFNa21xWnBCZXFVS1JTS3pvN1g0MjRYWXlOZGpBMXdDeUh5MVNsVEtCU2RnaDRYc0h6bEJXbHZjcnZiQ0Z2N1F5SnNtZFA0YkJVb0NvVkNjVUp3YVZvNlY1UTJWcHRWcUtzQmVlcVVLUlNLem82bWlSelN4ZFprRzNFVEV0Q0VFRXJZRkFwRnAwZUk5c0tXYXJuWlhWVWFrSzFPbVVLaDZQVENsdEFxcC91WnB1dEFKb1V0UzUweWhVTFJCU3kyekJSUmMyaWViQ053R3BDcFRwbENvZWdDWkJ6R0RXMWp0V21rN2FkWEtCU0tUb2UzdlhlYVR0WlF3cVpRS0k2R0VKdFhQTU9FNjcvTDBPKy9Sdm5KRTdaMkNZTjJBaWRiNTRjckZJcFRsUzEvWnRMQ2o0aWlzMjdSUXVadStoUWJwQ3JmNGFGbGZpWS92SkR0djd5VTQ3Y2twWjUxLy9NR2E2cVA2czZ1dzFoczFrWjRNR2x0UzFBb0ZLY29XemRWVURSbUlENnFlRzFQTVJjTzhSejdnelEyVUp2ZGx3dUhIdTljWXdPdnJWak5hMGUzRmt2cjBFcXpUTFhFSm5nUVVrcXAzbnFGNHJQVDJhWjdsUC9Qazh4WVVZVy9TY2ZYUFJPZm5samFVcGpkazV0LzNINllaTzJtbDVuN20zZFlYNlBqNjNrbTAyZDluZm5qQzRpdVg4cUV4eitpTGdpNTJabU1uMzBmejA1cVcvNGFyZHpFZ2wrL3dpczcvRVN6aTVuNDFXa3NuSDRtUmNDNlJmY3hOM3MyRzc5MVp1TE82My9EME4va3MvekhlU3k0ZnkxYm04S1FuVXZaNWJmeDZsY3IweTV6ZWZTMmN5Z0J4UENwMDRBZ2lla2VmcUFGQ0FxSVN0Q0JPQ0ExRXBhYlFxRTR4U2o3Nmh3Mi92WW1wdlk4aDBkLyt3aHYzWHNPZlMrY3pjWS9wSm1RVy9rYXN4NzlpSkpaOC9odzVTOVllMXMrNng1ZndxSTk0QnMvaTQwUGpxT3crN2s4K2FkSDJva2FzUW9XTGZ3TFc0ZmN3TnFWai9IaHp5YmhXNzJFT2F2ckQvOENTeTVsNVI5bU03MTdKbFBuUHNLcnN3WmFON1JmNXZMUVdqK0gxU3FSbUJPZUdNcW1vUUdHdWdRVWlsT1VtaXJLZXc1aW1CZkt0MWRUTnJ4djJydHRYdjBPbGNPbk1HOThBVDQ4RkkyWnlyemhEYXhZWFhIRXA0aHVlWnNWd1JITW01bXcwSHdsWTVnL3ZTK2JWNy8vS1pNTTdaZTVySDlyRy83Mld0VytWOVRDRGNSSXJsTlFLQlNuQmx0NTZJNi9zS2JKVDEwc2syazNyazdzRE0xK2hBbnZUK1BWZVdQYU5JblhOb2JKS3k1d2ZDK0xrcEpjL0pYMVJCbVlzb292UmRnYUEwU0x6MnF6S0xtb1p6Nit4bXBxajhOdmtsam1Fc2FmMEtxalF1TVk3cXhRS0xvS3cxaTQrR0dXZmptZkMrOTZrSTEvbU1YVW5pTVNMbW1LcUFFVTljakVYMTJQUC9rZG5jcWFBSGs5Q2c0cmFnQytIcG40cXF1cGRDaEpiVTBEMFI3RmliSGhuN0dnekZybVFsNTdyWklwWDlzSVcxaGRCQXJGcVVpSThtb29LOG1DeG1yS3ZjV1VkU0F5bzZkOGlaSi9yMlhSSmo5UkVvbUVKOTdQWi9xVWdVZDhGdCtJaTVqdWZaOUZ5eXFvQmFMVm0xaXdvb3JSVTg2bERDZ3B5Y2UvNVNQV04rcEVHeXQ0Zm5XRlE2RTgrTHc2dFRYMVJKUGZTNy9NSlE4aVIvVnJ5NFFyR2xJWGdFSnhLdExBQjVVRm5GVUM3SzJpdHVlZ2p1dlBTaTVsNmR3d2MzL3pDQ01mc2JLaTk4NW1YdWxSUEkxM0lQTisvSFVXL0hvcGs2YjVpV2JuTS9HcnMzbHlTbUk0ZDlubDEzSFBscVhjL3YvV0VlMCtnS2tqOHNsTi9uQmZycGt5a0ZtL2VZUkplKzdrclpuUTBUSVhLV1U0alhYbStMOUFDSWtwVFNta2xCOEFJOVZGb0ZCOE50UXlsK1BBWVphNW1GSnVjWTI0Nm9lMGxuczRGN3BFQlVJWGdyZ21oS2xKS2YzcWJDb1VpczZPbExLbFkydk5ucDJiUUFPVXNDa1VpazZQYWNvV2g0REpkSUptZWFTNHBaUk5RZ2gxMWhRS3hjbm5NTXRjRE1NSUhNWmljK29hbXBTeVFaMU5oVUxSMllrYmhqL0ZZcFBweFUyZ1NTbnIxU2xUS0JTZG5XaE05M2ZnZmtySHVnTUFOTU13NnRRcFV5Z1VuWjFRSkJxZ2ZXeE50bmRFUWROMXZWcWRNb1ZDMGRscDhnYzdja1dUWW1kbkM5eVJTS1FtSnlkSG5UV0ZvaFB4eVlFYWRSSlMrR0Q3bmtESG9pYXRGYU9KUVd6dWd3Y1BIaXdzTEZSblRhSG9SQXpvMDFPZGhCU3E2eHZ0Y2cvVEZqV1I4RDZsN1lJS0lkQTBnVFp5NU1nYWpyWUhTNkZRS0U0T2tibS9XaG82akN2Ni85dDc4L2lvNm52Ly8vVTUyK3hMbHNrZUVoS1dFRVJBSytEdmlsaC82TldxYlM5WVdyUzlTbHUrYVB1cjFHOEwxUXE5dHFCdG9jdEZieXRXcjFoYnNGcWdWV3BSUkJUVUZsY1VOU3lhUkNBUVFzakN6R1NabVhQTzUvZkhuSFB5bVpNelNiQnN3dWYxZUJ3VEFtYVpNL1BNNjcxOTN0VGFDWSsrbzNiMzg4ZU5pNHZyVEJXbDlJQU5aRHJqM0RKRURMQlJTdWsrL3RCeGNYR2RxZEowL2FBTmFobHV6ZHlZYkFTa2FiRHB1djR4ZitpNHVMak9WQ1dUYXJPRFkzTnMrU0FrdmZPQWFwcld5Qjg2TGk2dU0xWHg3cDVtaHhBMGErdUhsS1poc2tGUitONWtMaTZ1TTBFcGJGajZBOHgvVFUzL3NXQWFmbjdIWjFveGhCd2JJU1JkR1FWQU96bzY2dm1EeWNWMVppblI5QllXM1hrM3hsOTNHMnErOWtzczJOekVuREk3TkVEVWJYNGVhM2VmckxOa1c3QnA3U3ZZM25HaVA2K002eGI5Q3J2Vy9STHZMQmdIQlVCRC9iNDJCbVkyMTJhT1V4SHJ2d0lBV2xGUjhSRnduSThaRnhmWHlWUHlReXhaK2lSMlZNM0Erc2QvaHMwTHowZlR3dzlnd2ZiamdWUVBkcnl3RVd2Mm5LelQvMXV3YnMxTDJOWnhjajY3UzVFUlRBZVNpVHUrdjd6RDd0UUlvSU5rOUxTbEN3Z2tIWXFhMW00WGdBbjhHY1hGZGZvVjNmNFNObUFTSHAxN2Z2bzQ3M0ZYWU9uMWIrT2FwOTVENjVUSmlEaWNOTHRwNmYvRmtzTGI4UExjU3V4NDlPZVk5Mnc3b2wwcWtudVdZZnpqQU9RUldIemZYRnlmQTBRM1A0QkpheVZjVjlpT0hRM3RhRlZLY2YzY0c3RjRTdm80NzhTMmh6QitUU0hXci93OGFnRUFIMkxSMXg1RzlMcy94MzBYdHVDUk8rL0Rpa1lWaVZRUHR2N3dCMWdOd0RYOGFqeiswOHV5SHorZW9XNXNYN3NhUzU3YWhmb3VJRmcyQm5QbWZobTNqZ3M2L0Z1Nnh3WTFIWUJPQVFvS0NxUzN2aE5pTEJhbGVqckhoblJsdEU0UUJBNDJMcTR6UUUwTkxVRFZaQU1xYVZXUHJrVHdxUTlSajhucDdVOERhT0xOUDhEck4wZXgrczY3c1c3S1Fxei9RbDcvZjlTcFlzS2kvNHZsWlRKYXR6K0tHZis5R2xVcmJzT05oWU45ZDRYNCtrL3Z3ZGV4RS9ObVBJM3FleGNOYlRjQ0cyYS90UjYzUFFVcy9PblBjWDFaQ25VYmY0K2I3MW1QNm9kdnhwVzJDVTlkMSt2UlA3ZW1BOUNKMlpSTFFUVktJWUdBQ0NJRVFnZ0ZRRlZWcmVOUEp5NnVNME9KTGhVdVJjcGNmZWVUNEVxcEp5NW5WREFDVThyU0s0VWpVNjdHRFFVZjQyL3ZuYUlEdFJVWnJsUVBXanVpaU1LTDJxdS9pYzBQek1JMGg3RjFYVXZ1US8vOEdoT0NFaW9RQUpSQ0ExTThBRUI3ZW5vKzRFOG5McTR6UXk2ZmhFVFNCckV1RlFsWkduVFA1eWRUQUdVNVFMVHoxR3pqZEkyYmdjZS9Pd2E3MWp5QTZWKzVDOVAvYXowMnRLaU9QMXV5TjM3UUJqUU45cFlQUWloSlQ4SlRRdnBHcXVqZXZYczUyTGk0emhCVjF4UUNlejVFWFVaNDJvUm8yVWdqaHlVRFNDRnh3dGFkeDlEVUFnVERualI0RkJtdVZPcWtWUlFUTFMxSWpMNE05LzEwRVY3LzAxMjRiMm9QVnQ2OUdtc2RDaEhSOWdNdEJzQTBCbXJHWlZSRUtRVUZJQkNTdmt6aVRaNDgrU2lBRC9sVGlvdnJESEJzRjF5QjYrWFhzZVNoT3RUSHU5RzYreVVzV051T0s3OHdMcDFmeXlsRmJjRkIvTzNsSmtTUlF1dnU1N0hxZmRYMldUd295NUZSLy9ZdTFDZUJSRHlLS0F2Q0l6dXhhWGMzZ0JUcU56K05WVWNxY2EyWnZCOWVpZXFPWGZqYmU5MEF1bEczK1NWczZyUi9sMEdVNWJSais5dE5pQUtJZG5RUEdZU3QyNS9BTlhjK2dVMHRLUUJlUkFvRGNDWDdnN1EzZ1krT0hkN1pnNnl0SHVsTHB3Q0lBSm1raXdoVzhRQ0FydXY2MjRJZ2pPUlBLeTZ1MHl5bEVnc1h6Y0tTM3p5SmEyYTNBK0ZTWEhuRHJWZyt4V3Y4Z3pMTS8vWmxtUGZmdjhLRTM4c29QZThDWEhsZUFFMFpuMFRHdEp0bTRNcDduc1kxTTU4RXdoV1lmOWYzY0d1TjhkYytMM1k5L2l0TWVxOGQwWnhLWEwvd3hyN0NRZUcvWWVsTkgrSzJleFpoVmRLRENaZGVnQ21sOW0reUVyZk1uWXg1di9rVkp2d2VDSlQrRys2N2J5YW1EYUhYdit3TE4rUEJqdlZZOXYwZjRMWXV3RlZRaWV1L2U2TlI0ZTFyMEtXVWZ1QVVocEowVlZTbjZlUFhBRUtvTEtiZEdpRUVSQlJGV2RkMUNZRGMwOU56cTh2bCtobC9WbkZ4SGI4K1RRdVRvNXNmd0tTblIrQ1orNjRZWW52RzZkSGhveDIvTEw3c1AxOUZla2x5SEpsTGtuc0JraElJVkVLSUxna0NWU1NCS29xY3pyR1psZEZvTlBvMmYzcHljWEdkS2RyZGNHQ2Z6YTJ4T1RaS2pKRXFvekdYa25TT2pRcHNuRHByMXF5M0RTcHljWEZ4blc3RnYvYUQ1UzNJcklSbWdNMjhDQ0dVa0w0VGRDVkNpSEZLT1BTdFc3ZnFsTkx0aEpEcC9ESGw0anA3Rlp4K0szYWY0YTl5VmRQZWFtcnQ3QWMxWTVTS0FzUndiZWFNYUJwcWJCOGJqTGU2cXFyYitXM240dUk2M1lyR3U5OTNDRVBaY0pTbVkxQllibzJZN1I3R0g2aVpaNHZGWXEvemg1U0xpK3QwYSsvSEJ4c0dnaHJKT0RtWFFDQkdINXNnSUNQSEJrRC8xcmUrdFIzQU1mNndjbkZ4blVZZCs4YWlYemRsZ1pwRGpnMlVDQVNDUUtnZ0dJNk5FWDN5eVNkVlhkZGY1bzhyRnhlWGt5ZzkrVjhqcGFxdjFUVWVZc05RTlJOdWZXZXdNZUVuQ0JFZ0VDRmRQQ0NFbUgxdUZJQ2VTcVZlY2JsYzEvSmJ5TVhGQmFTN1lRK25QRGlTVUtDQklKN1FUdXJYYTJ0cjI1a3RES1hwQWdLbDV0UUJDRktVQUZRRXFBaXFpMm13QVZZdm0wNHBwUzB0TGE4TUd6YU0zMDB1TGk3b0ZOZ1JDd0t1QVB4NVFmaDhmaFNlNUsvNTRVZC9yM2VBbWdaQU0xbEZDS0ZFRUNBSUFtUlpocUs0NEhLNTRIYTcwOGNXbVlVRDA3RlZWbGJ1QnZBK3Y2VmNYRnlIVTI3QUZVQmhVUWw4UHY4cENIVnAzZHh2ZnIzTkZvYXFCdFJzUnhhWlBXeUNrVjlMZzA0UUJBRk1uczJDbTZxcVcvZ3Q1ZUxpT3BKUTRBOEVUOW5YNitycWVnM091YlcraW1qYWtCa3RIZ0lFZ2NDQ21paFk3UjVtS0FyamY5U2owZWhML0paeWNaM2JvaFRRcUpEZHFiVnR4OHJ2ZlFXZnUveGlUTC9xUC9ERHZ6Y0RBSnFmL0NZdXZlUmk0L29tL3R3ODlLOVpYLzlSSFRMemE3YkNBWFRMaUJtVEJvSWdnQmhRRXdVUmt1bllHTGhSU3FtZW41Ly9pcDdldmx6S2J5OFgxN2twUW9CNFVzdVNVNHZoNWZzVzQxbDhDeXVlK2crTVZHS0lJUUFBS0o3MU1MWjlJWUZFKzkreDRNWm5qdWRMSHJyMmMxZnR0NFdneG1VUFF5azBWWWNrcDZFbXNvN05zRzlPUzBjMVRkT2U0N2VXaTR2TFdjMzQ0TU1rYXEvK0hFWUdBTGdDQ0xCSDRMcGNjQjNudXVLZW5wNXQyZHdhSWRDUXNYS1BVbDNYcUo1MmJGUVFSSWlDQ0ZIdjdPL1l6TGxSQUhvc0Z0c2NEb2Uvem04Z0Z4Y1hFMzlpNDUzL2lmdDNKSkdNSjRGZlhJdlAvUUtBTWdWMy9ua0pwcnFHOWpsZSsrTXlQUGprZHV5UEt5aWFlQTNtZmYrN3lPOXNmTmNHTmF0d1lMUjU2QVJJQTgzNFRNbDRITzN4T0FSUEJGVmxQb2pFblFhYmVlbTZuZ0czM056Y3pUd2M1ZUxpeWxRZXJ2N3BNN2dhZTdIeWhyblkvL1cvNGQ3cHg3ZUpZZCtUUDhDUC8xNkJPeC9jaEttNWNieTI4bmI4K0h1L1BmVGUxcDgwR3NaS3RZTU5sT29naElJUUtnb2lSS0locVJKNHdpRUVqVFlQVVJRZ2VuSWdwQzJja0RFdnlwUlVkVTNUTnZJYnljWEZkZUswRnh2LytpRnF2L3BkVEMxMkFhNDhUTDdsRzVoNDlPbVg0SmhiNno5S1JVaDZPeFVoQURIQ1VFRVVJWW9pUkVtQ0lJcWk1ZGpNa0JSOSsvdTB6czVPRGpZdUxxNFRxSGEwdC90UlZCem8rNUNyQWdGdjI0NXNZYWdGdDR3MkR3QWdTRU10WFEwVlJSR1NLS2JCWnNLTmdaclZ6eGFKUkY1QmVrczhGeGNYMXdsUUxuSno0empjRnJNK1FudWI5L3ptalFQMmFtaktoQnJKUERIWE9DazMvZit5VUJORkNaSVc2NnVLbW0rWlk0eXNBZFJrTXJtQjN3d3VMcTVQckl3MWdhTnc5UmRIb3U2UjMrTGw1Z1NBTnJ6eTJ3ZGVRdjlKZzR6Q2dYV3dwTUVvUVJSQW9OTkVra0lVQ1hRS1NKSUlpY1lnc1k2TnliVVJwanFxSFRwMDZPK1ZsWlVMK2QzaDR1SWFpcHFmL0NhK2ZGL2ZxdUozYnJ3WTl3T1k5TU5OK01YbkFxaVk5WFA4VjlzUzNEL3ZTdnc0cmtBTGpYalh3YTNaRzNNcFRPTWxDQkJrQlg2dEcvR09JMmpzSkpEOVpSaVhtd001TUJKa3hJZ1I2TzN0Ulc5dkwwa2tFa2lsVWtSVlZhTHJ1a0FwbFpEZXpPcFNWZldQZ2lCY3lXOFpGNWV6UGsxYnFvWXFTb0czWTJFVVZweThyWnlxcXI0NHZLSnNKWUJlOUcyak1xOXVRa2dDUUlvUW9oSkNkRkVVcVNUSlZGRVV1Tnd1Nm5hNzRYRjc0UFY2NGZQN0VRd0VJRWlTWkRxMmpPcW9QUnp0N3U1K21qOTF1YmpPTFJFQ1NFUkhWOWZKMi9IVTNIem9WWWNRTkFWQUpZUmticVV5MkNRSUFrUlJvRlp1VFJJaFNSSmtTWUtzS0gzRkEzc1J3VllkMWUrLy8vNE5BQTd3VzgzRmRXNnBRRW1nSzNaeUR0V21sRGI5MTQ4VzcyTEFscktGb1RyTUk0ck1uUWJXMkZRZnR5UlJTb05ObHFFb1NwOWpZL05zZ2lDQW9hTU9RTHZycnJ0NlVxblVPbjZidWJqT0xSVXBDZEJFSEVlYW0wNjRjNHZINDg4OXYrbTVsSk5iQTRnOXY1YUdtekVYYW9lYUpNdVFGUVV1bHd1U0pLVS9hUHdqS29vaTBUU05Db0lBVGRNbzQ5clVBd2NPL0xXcXF1cTcvRlp6Y1oxYjRlZ0ZnU2lPSkxweHVDMk8yRkVSWGNrVGM0THVLNis4OG5ZV3Q2WUMxQng4VDNPSUd0SjFhSnBHTlUyRnFxYVFTb2xJSmtWSXZTSjZaUWs5THFVUGJFeXVqUTFITTJaSFI0d1lzVXRWMWZXQ0lNemd0NXVMNjl5Q1c2RmJSYUU3QmtxQnpGVXBuMHlKWk9wdmx5MWFkTlRtMUZJQVVnUlFRY3d3RkZRZ29DSUJaQkZRSk1DdEVIZ1V3T3NDdkc0ZzRBVkNmaUEzQ0JUa0FJSXN5N0M1TnRnSDQ0MVJLdzNwU1FRZWpuSnhuZU9RT3hIYTNYamdWUWUzbHRIbWtiRml6emgzVFJUVG9hZ2tpcEFrRWJJa1FwWWtLSW9NdDB1QjErUHVBNXNvaXVaYmFvYWx6SkhoVm5VMFB6OS9DNlgwVlg1N3ViaTRQcWswVGQ4K1llYjh4Z0hjbXRaMy9scmFYSW1FVUZFZ0VBV1JTcUlJVVV6RFRaWWtLTElFdHlMRDQzYkI3M1ZEVUJRRnNpekQ3dHhzRGJ0V0VRR0EydFhWOVFTL05WeGNYSjlVQnc2M3ZqQ0FXMU1OdDZhVDlKWjNLaEJBRUlqaDFBUklrbUE0TlJHS0xNRmx1VFVYQWw1UEg5Z2NpZ2ptaUZYRzdDZ0FiZnIwNmVzb3BYelpDeGNYMTNGTHA3UnU2bGUvLzM0V3QyYk1oL1lWRGRKZ005eWFLRkRUcWFYYk8yeHV6ZU5HTU9DRDRISzVrQVZ1R2E2TkRVZGZmLzExdGJlMzkzRitpN2k0dUk1WFI5bzZuMjFxN1dTaGxqU3VOTlNJZVpKSHVuOU5NUFlhbUMwZWJHNU5rZnJjbXMvdFFzRG5SWTRkYkRhNHNhN05QaGl2cmxtejVra0E5ZncyY1hGeERWV1Uwb1lmM2YrSEhZT0VvZFpKdVFSQTJxMEpFTVYwYmsyU1JNaWlaQlVNWElaYjgzazlDQVc4eUEwSElIZzhIampCelZZaFpVTlNEWUEyZCs3Y2FHOXY3eC80cmVMaTRocXFXanVpR3g1YTkzekN5YTBSSUdVVURUVEFQRWd5N2RoRVVUQ0tCUUprVVlRc0c3azEyWUNheDRXQXo0Tnd3SS84bkZBYWJHNjN1MTg0bXFYOUk2UDFZOE9HRFU4QWFPQzNpNHVMYXdodXJYSFp3MCsrWllNYTY5ajZXanpTUlFNSWhFQzBpZ1pwdDJiT2hDcXlETGRMaHNlbHdPLzFJQlR3SVM4Y1FGRmVEZ1NmendlMzIyMjVOaFp3OXRZUFc2NU4vZktYdjl6UjA5UHpHTDlsWEZ4Y2c3cTE5bU5QLy9LeHAzdHRJYWpwMWxTUXZoVjdwbHNUQlVMVGJpMGRocWFCbGxrSjlYbmNDUGc4eUFtbTNab2tpUkQ4ZmorOFhtK0dhenVlMW84Ly9lbFBqMU5LK1FtN1hGeGNBN20xUFhmLzVvOXZPa0ROZEcwT0xSNUcwVUFValJZUGV6T3VESy9iQmIvUGNHdWhBSXJ5Y3dBQVFpQVFnTS9uZ3owa1plRG0xUHBoVlVpLzhZMXZIT3Z1N3Y0OXYzVmNYRnpaMU56YS92UURUejQzV0c0dG95RlhNTnlhSkFxMEg5UVVHUjZYSzhPdFJYSkRjQnVMVElWd09Beld0UTFRSmMzcTJtYk5tcldHVXZvNnYzMWNYRngyNmJyKzV2UnYvSENIQTlRR2NHdUFLQkJJZ2psZDBEZGg0SkpsdUpWME02N2Y1MEU0NEVOZU9JaWkvRnpyYXdvNU9Ua0lCb09XYTNQS3RiR3VqZGthYjIxcjNyaHhZeklhalQ3S2J5RVhGNWRkRFUySG45blZlRWpGNEpWUUhTQlVTQjhrU1VWQmdDU0pobHRMUTAyUm1mWU9qeHRCbnhjNXdRQUtjc1B3ZXZwMm13cjUrZmtJaDhNSUJBTHdlcjBXM0V6SE5sVFhGZzZITitpNi9uZCtHN200dUV5bFZQWDVrWitidDh2QnFRM3Uxc1JNdHlZYkJRT1AyeGlkOG5rUUR2cVFueE5FVVNRbjQrc0tCUVVGeU0zTlJUQVloTi92dDNKdERoTUpBN2sybFJDU09uTGtDSGR0WEZ4Y2xuYnNxdCtFekdaY0MyeUdXMU9INnRaY1ZudUhNVHJsOXlJM0ZFQkJYaGcranpzVGJDVWxKY2pQejBkT1RnN01Rc0pRY20xbU1ZRjFiY1hGeGY5SXBWSVA4OXZKeGNYVjFkTzdadkxzN3grd1FTMlJ6YTBKUmlYVXlhMHBzZ1NYeTJ6dmNDSGc5MXJ0SFNXUnZINWZXL0I0UENncUtrSmVYaDVDb1ZEV1FvSlRoZFRlMTBZSVNYM3d3UWVQQVRqSWJ5c1gxN2tyQ2h6ODYrWi9ib056d1lCMWF4bDlhMVlsMU83V0ZLTmc0SGFuMnp2OFh1U0ZnaWpLejRISHJmUUhHd0NVbEpRZ0VvbUFMU1I0dlY2NFhDNWtHNUxQbG11Yk9IRmlmWGQzOTRQODFuSnhuYnM2Y3JUanlhL2UrYXNPbTFQTDZ0WklobHNUTTg1WmN5a3lYSW9DcjF1Qnoyc1VERUlCUkhKREtDbkljL3o2QWdBb2lvS2lvaUprS3lUWXFxVFVuRXF3citnelhkdlVxVk1mMDNYOVJYNTd1YmdHa2VJNzYzNGtWZE5lL3N5WGJudGpDRzVOTTl5YWJrNFpTRWJmV3I4cXFIRXlic0NiYnUvSUR3ZFJGTW1GSWt2WndRWUE1ZVhsTUFzSlpranFWRWhnaCtTWkdWS2RkVzA3ZHV4SUhqbHloT2ZhdUxnR1U2amtyUHVSZHU1cGZLYXB0ZE0rWFpBQWtDRE1CaXJEcmVuRU9rU1NXRTVOdG8xTmVUenBrM0hOMHpzSzhzSW9MOHJQK2owSTdCL01rTlIwYlFQMHRsbXVqWmxJWUoxYnFyaTQrT1ZrTXZrYi9zemw0aHBBa1pGbmxXdUx4cnNmdlhEVzdSOGJibzJGV3QvQWUvL3oxcWhJQ0UwUHVJczBmU3F1bk9IVzBoTUdYb1NEZmtSeXNvZWdqbUFyTEN6TUdwSTZqRnRSU1pJeUNnbXNheU9FSkxkczJiS0tVcnFEUDN1NXVMS0lDRUQxcFVCT0JTQjdQdFUvaXE3VGR4LzQwelAyZ29HVld5TkEwZ3hCbWZQV3FHQ0ZvR21vWlp5SzZ4U0M1dWVpTUM4ODRQZlNMMEF0TFMxRmUzczdvdEVvNHZFNGVucDZrRWdra0V3bWtVd21rVXFsb0tvcVZGV0ZwbW5RTkEyNnJvTlowNmRSU2dVQTZ0VlhYMzI0cmEzdHdkemMzSlg4R2N6RmxjMWVpRURKdUUvOWovSGhuajNyNy9qdngrSU9VRXM3TmtMU0JRTkNOQ045UlFWUmhDakxrRnd1U0M0WFpJOEhpdGNMbDk4UGR6QUliemdNZjE0ZWdvV0Z5QjAyREFValJxQjAzRGdnRkJxNll3T0FVQ2dFcDk2MkxJMjdHU0VwSEpwMjgvTHlOcVpTcVlmNHM1ZUw2K3hWUEI1ZlhWTlRzNGNKUVRPZ1JnaGgxK3JwQU5LTnVLSkl6Vll5V1phaEdKdmMzVzQzUEI0UGZENGZBb0VBY25KeWtKK2ZqNUtTRW9RR2dab2oySUIwSWNIc2JXT0g1TFBOa3RxYWRuVkNpTlZwVEFoSnZmcnFxNDlRU3QvbXQ1K0w2K3lUcnV2dlBQcm9veStpZjE2TmhWcktNRHNhSVVRM0pwaXN0WjhtMUV5d2VUd2VlTDFlK1AxK2hNTmg1T1hsb2Fpb0NPWGw1VU16d1U0ZmxHVVpaV1ZsS0N3czdGY2xkVGh4ZDZCQ2dnb2c5ZG5QZnJhcHJhMk5oNk5jWEdlaDl1elpzLzQ3My9sT05Hc0kydGUzWm14MkoxbmRtdW5VUEI0UC9INC9RcUVRY25OelVWaFlpTEt5TXNpeVBLVHZTY3IyRjBWRlJlam82RUEwR2tWWFYxZldYQnViWjlOMW5lcTZibTYxMGlpbHhIQnRRaVFTMmRUYjI3dkM1WExONTA4RkxxNnpROGVPSFh1NHRyWjI3d0J1emRvK1piZzFhb0xOYlBobm5acnAxdngrUDRMQklISnljaENKUkZCU1VvS2lvcUloZjEvU1FIODViTmd3ZEhaMkloYUxvYnU3T3dOdVpnSEJ1S2l1NjhSV1NLQUFkRXFwVlNYOTR4Ly8rTDl6NXN3Wkt3akNkUDZVNE9JQzl1M2I5Nm45M2xWVmZlbWVlKzU1MlFhMVhwdGJ5OGlyQWFDRUVPdHpHQ1lJQUpER1J2cXR3UkhyWThmN1dBMElOcC9QaDdLeU1zdTFkWGQzVzJCTHBWSjIxMFkxVFNPNnJsUGpHOU1OeDJibTI0UnZmdk9iSGRPblQzK3dvcUtpRmtBSmYxcHpuZXVxcUtqNHRIN3J6YSsrK3VxR1ZhdFc5VGlFb0wyd0ZReU12SnB1T0RWcU9EUnE1dExNSWtFNEhFWnViaTRLQ2dwUVZsYUdxcW9xMU5iV0RqbTNOaVN3QWVsQ3dyRmp4eXpYMXR2Ym13RTN0dlhEQ0VkQjA0TFIxMFlvcFdvYXprU29yS3g4SXhxTi9rOGdFTGlYUDYyNXVENmRPbmp3NEI4dnVlU1NKZ05xTE5Ec0lhaHFUaVlSUXF5OG1yMVk0SGE3TGNBRmcwSGs1dVlpRW9tZ3RMVDB1S0VHWkNrZU9QMVdZVnRBMkVGNVd3c0lkUmlTWjhldFVvU1FaREFZZkNLWlRQS1JLeTZ1TTFSMVM2YWlxdXBtckkzMi83dDRQTDY2ckt6c2JXUzJkbGdocUMydlprSE5WZ1dsMmFER3RuWjhVa2M3SkxBRkFvR01GcEJRS09RNGxXQ0RtMWtselJpU054K0k1NTkvL21GZDE3ZndweEFYVjFyUnVyVllNdThhVEIxZmc2cXFHb3lmTkIyekZ6eUNyYTFuenZlb3F1cldsU3RYYm9GekJkU0FHMDFTU2xWS3FhYnJ1cTVwbXE1cE90Vmh1VFdxS0FwRXRRdnQ3VEVrNVhRNEdnZ0VFQXFGTWxvN0FvSEFKL28rcGFIK3cvTHljc2RwQklkY1c3YVFGRWJPVFNXRUpLKzk5dHBEalkyTkQxUlVWRlFRUXFyNTA1cnJYRmJyMWdXWVBXOGRHb0lUY08zMTgzRkRLUkRidFEwYk5pekZuSzJ2WWNVekQrSzZ5T245SGltbERkdTNiMzk2d1lJRk1ZY1F0QmZwSWZja3BXYkJnR2lFcEVlbktOVnBLdEdEaE1lSGdHR0N4R2d6bW84b0NOZWNsd0UxTTcvMlNVTFE0d1liQUF3ZlB0eXhRdW93WmtWMVhTZG1aUU1BMVhXZGJRRWhoQkJoK1BEaGI3YTN0OStmazVQemkrUDlYcmk0emg2cnRoWExGcXhEUTJRbVZxMWZqbWtXd0c3RkxUY3N3WXlacTdCazJWWmN1WHdhWEtmUnJEVTJOcTZaT25WcWs4MnRaWWFnbEtZTEJrVFFSTUhxVjRNa2FPanVTYUUzbnFCQ1hoQXVsd3VpTElBUUVXNXZabXRIYVdrcGhnOGYvaTk5czhMeC9HT3YxNHVLaWdvVUZ4ZG5IRXlaNWRSZEtzdHl2NURVTnBXUXlNM04zZERUMC9Nci91em1PbmU1dGdZYmppcTRkUDVDMFNBeHNnQUFJQUJKUkVGVUJtcHBCU2ZlZ3NVTGJzQ1ZrUVJhYmZtdlphc1hZTWJVR2xTTlg0Q3RhZCtIclEvY2hobFR4Nk9tcWdvMWs2N0J6VXMyb1NuQmZNS3R0MkY4MVhRc1dyc2FpMlpQeC9pYUt0U01uNG9aQzlhaXppR2ZscWpmZ0VXenAyUHNpSXFIcXF1cjMyZWNXaTk3RVVJU1lBK1FUSi9jb1p1TnVMTExCNzhrVUlIcUlIbzc5bjd3QWQ0N2xBUWhjYnkvNlM5NDVLL3ZJeFdKb1BqSVU1Z3phdzV1Ly8yZmNOczFrMUJUTlJWTDZnQnNtb2VhcWtsWXNEM3orOXU2WUR5cWF1WmhFL3ZCcHEzSDc1S0tpNHNIZEcxbU9NcUdwR1lMaUJHYXN2azJBWUF3WmNxVWg5OTg4ODFDV1padjRrOXpybk5OZGEvdFFCSzF1R0tLVTZ3WndiUmJsMkphdjQ5dnc4cGxWYmppK3ZsWVZGV0xha1N4ZGRFTXpGbVR3T1FiNW1QcEJCZGFYMXVIbGF0dXdlem9LbXpPY0hzTldMTm9GYTZkUHgvM3pROGl1bTBWbHExY2lObFJGelkvZUIzNnZvdnRXSFp6SFNvKysva245cmY4ZysxWDZ4ZUNzbEFEb0ZNS1NvekZUK204bWdKL1VTbUt2Vjc0UEJKeXhwWUJ4eHJ3d1dFM3hsNHhIUmVQSG9OeFJVVVk1ZzFCa1JKNGZ2a0tqTG4yUnN5ZldZV0pFUUJOUTNlL0MyYlArV1RoWDNWMU5lTHhlTmIyRHdac0dTRXBwWlRxdW01dkFTRTdkKzRVdG16Wjh0RDA2ZE1MUkZHOG1qL1Z1YzRkSmREYUdnV1VDQ0lzMTZLdGFHV2RGbHdJUm9JTW5Fb3g4NzcxV0Q0dGFQejdUVml4SFpod3k0TjRkT0hFOUwrNy9qcEVXaWRoNGFhL1lmdnlhUXdjRlV4ZS9EanV1OUg0Z2xPbW9Dd3hIVE5YcmNDcXV1dXdzTGJ2YTQ2Lzg0bk5uem15NGZrTjhSNm5YalY3RlZRbEF0R2hVNTFTbmFaU0tWQUlVRVFac2l4VGE3amRsdzQ5SmJrWnU0NTRVVGx1SWk0NXZ3TER5OHBRZlN5OVJxL3Fsc2V4Zm1IdGNZZmVkU3VYWU4zQnFrOEdObEVVVVZWVjFROXM3RFNDYmN5S21JVUVJK2ZHRmhNSUlVUzQ2cXFybXVycTZsYlcxTlRrRVVJbThTYzgxN2tDdGtRaURSRVg4eXJldnVRYTNMRHVhTjhIQWpPeDZ0M2xESnlxTVhsaWtJbFpyOFR5elZmYVBuY1ExV1VSWUhzcm9nbWdqeEl1Uk1vaUdkQ2NPUE02VksxYWllMDdXb0ZhOCs4bXZGV3U3SDE2L3Z6NVVWdE9yY2U0ZW0zOWF1bEdYSWxRVUoxcXVrN1ZaQytPdFNkbzNPVkhVWGtJZVVaclJ5QVFnQlNWSVlvdUJQTUxyV1pjOFYwQ0lJRGF5YldmSUo5WWo2MWJHNEF4Q3o1NXdqNGNEcU95c3RLQ1c3WUtLZXZjVExnWlV3a2doSmpGQklFUVFtcHJhOTlyYW1yNmJVbEpTUzRoWkFSLzBuT2QvVEtCWmdET2VEWFgzbklmVmwyYkFCREZ0bVh6c1dvb29WaTBEbXRYck1DYVRkdFJkekNHcEdYUXF0TklHb2dVWlZVb0ExRGYwQVFnQWtwUjM5UFQ5dWQ3WjE3VllvTmFYd1dVeWFzWnVYTXJyeWJMTGlyTE1tUkJwMnFpRi9HZU9Kb2JQZ0wxVGNia2tyUmprenNVU0pJTDRjSVNWRlpXSWh3Ty80dVBaU3NhV2dGbFl2Vy9Wb2tzS3l1ekJ1Ulp1R1hMdFJsUU00ZS96TEJVTXg0Y0FrQW9LeXQ3K2VqUm8vZm41ZVV0QWhEaFQzeXVzeDFza1VnUVNEYWhxUlZBbWVHMXFxZGdXalVBUk5HNlNobENqcWtPRDh5ZWdlV3RFekZuNFhJc3JDNUQwQVhVcmJ3WkN6Y04xVHRhT25xZ3ZYdjE0Y092TkNKenNMM1hJYStXTXZOcTVqSjFkcnJBN1hiRGsxK0VTaVdGcHIzN2NLVGhNRENoQ2prNU9WRGFYWkFrRC9MTEtsQldWblpDSDlWL3VjVmkxS2hSR2E2TkRVbnRKMzlRU3RsOG0yNE93eHJoS1NHRUVFb3B5Yy9QLzN0blo2Yy9GQW90QnVEbVQzNnVzMW0xbDA1RVlNMVcvRzFURTc3KzlVLzRBdCt4Qm10MkFaZXVlQkNMcitzTFVSUEJJUVowOWUrZ0NVQ2txcXozNE1HRHE2NWU4WFlkK3RvNnpQQ1RkV3Y5UWxCQ3FLNG1rMGlKTG5oOU1oUkZzZkpxM2tBZXl2TVBvTE10aVZRZ2pQejhmTGlPdXFFb1BoUlZqUnJTTHdBZ2tVSGYvb3FnS2dJa201cU9yOTNEU1lRUWpCZ3h3cHBNeU0vUHR5WVQ3R05YWmd1SWJmR3lPWEpsdG9Ba0FTVEM0ZkNmdTdxNmVCc0kxMW12NExSYmNIMXBFdStzV0lCSDZoTDl3cXZXMXVRUTdGWUNVUUNKS1BQL0orcncvSTVXdXhzREVFTjlYVDBidzJMVHFrMDRpREdZTWdvUEdlTlNMTlI2R2JobG5MRm12bjdOZmpXQmdGSTloU1RwS3haNHZWNzRQQ25FNGdTQ1B3OWxoZmtvS2lwQ1JXRUlpcUlnbVNTRC8zeVJDQ0tJb2I2K0tlUG5lNjB1eHZ5amFreWJWZ1hzV25OaW1tSURnUUNxcTZ2N0ZSSTBUY3MySUQ5WU1ZRlFTb25mNzMrc3U3dmI0L0Y0YnVkUGY2NnpOeHFkaUlVUExrTGQ3S1ZZT21NNm5yL3VTbHc2cGhRNDJvRFhObTNBdG9ZQUp0d3lFeE1IdEgzWDRzcjhkVmkzWkRibU5WeUphclJpeDZZTjJIRXdDU0NLUkJRQVUydll0WHcyWmpSY2oyc241T1BvYTJ1dyttOUhFYjcwOWdkL01LbmdIdzZoWnc4eWp5T3lPVFd6RVZlaWJoOFE2MHJTK05FV0pMdUR5QW1uMEJOcnc3NzJOclFuWGFpZVBoVVhHSWRHam5TTlF1aUpMVml6WkFsd3hhVzQ3c1pwS0J2bzV5dGRoVlhMYnNhOGd6TXh3WFVRNzJ6YWdPY2JBRENMNEd0dldZeVpHK2FjdUc3L3dzSkN4MXlicXFwc1AxdEdXTW9XRTR4UG85bkQwbG16WmozODV6Ly9XWEc3M2QvbXJ3Q3VzNVp0dFYvSDQ1dHI4Y2l5RlZpemRTMVdySXNocWVTanFuWWFibGs1SC9PdnJCNjRTaGljaHFXUEw0TnIwUXBzV0wwU1cxMVZtSEw5ZlhoOHd2Tll0TElKQjVuOEhSREFGWXNXbzJ6YkNxeGMwb0NvcXhRanI3MzdrZnBYZjdrVi9hY0tyQkNVRUNRb05WZm9XVkRyYThLVlpTaUtqNWFHS0hxaWNjUjdZMmc5SE1OUlFVRzRzQXBUcDE2T2EvOXRKRXBMUzFGVlZZWHl5Ky9FNGplYnNXekRLcXhvemNlMEc2Y05EUDlIbHlHNllBVTJyVnFPcllFcVRMeHVNWlpOWElHRkd6SWZoK1dQcndSaEQzSTdFZHE5ZXpkMjc5Nk54c1pHSERwMENFZU9IRUY3ZTN2RzBVY0dBQWtEUUdMMHV3a0FSRXFwQkVBRzRLS1V1bi8wb3grRmYvakRIOTdpY3JubThaY0ExNWtxVGRQUTFOUjBacCt4dHZVMmpKK3pGZE5Xdll2N0RJN0VZckhmZi92YjM5Nzhoei84b1lkeFpUMEF1bzIzUFlRUXEyQkFqRzFUN1BscXpOSGUxaGxyNXZ5bmViNWFTVWtKaGc4ZmpwcWFHdFRVMUp6VUgvT0V6MmVPSGozYUNrbnQ3UjlaWEp0NTRpNlFXU20xd3RLZi9PUW5uWkZJNU9HNWMrY0tMcGRyTG44SmNYR2RHTVZpc1Q4c1hyeDRpd0cxSkFPMUhnWnEvVTdEZGFxQXNzVUNuOC9uZUx4M1pXVWxSbzhlZmRKL3JoTU9Oa0lJUm84ZWJZSE4zdnFoYVpwMTVDK1RiOHRXS2JVKzUzZSs4NTAyUlZFZXZ1bW1tOERoeHNWMVlxQzJkT25TelN0V3JPaENacUdBYmNETmxsZlRCVUZnTjB4UmN4R0wvY0JJMDYyWlVHT1BCdi9VZ0EwQVBCNFBSbzBhMWE5cDE5YlAxcStZWUxnMDA3V3hjQ09FRURKdjNyeldSQ0x4dTdsejUrcHV0NXVIcFZ4Y24xREo3dGp2Rnk5ZXZHVUFxTEZPcmQvcVBPUEFTR3AzYXViS3ZGQW9aQjBZV1Z4Y2pJcUtDb3dhTlFvZXo2blpkaS9lZmZmZEorVVRtd2RRbW5Beks2UXMzR3pYWUJpbkFMQng0OFlVSWVUOWl5KytXSlZsbVk5ZWNaMHhvcFFpR28yZWdBNzZrNmpLcTNIRHpUYzg4dlN5LzIvTDczNzN1KzVzVGcwT2t3VnNvY0NFbXN2bG91d0p1UGFWZVdhaFlNeVlNY2pQeno5bFArWkpQUU90c0xDdzN6U0NRNFVVVEo3TnFwUUNnRzFnSG9RUVVFcXhkT2xTdlBYV1d3K3VYYnMyNmZWNmVTc0lGOWNRMWRIUjhlQVZWMXl4OWEyMzNrcG1jMnF3SFVQRVZqOHpLNkI5VHMzYzJzN20xSXFLaWxCUlVZR1JJMGVpc0xEd2xQNmNKLzF3eC9MeThnelh4azRqMkYxYitwY2VKUUNvcXFvbTNEUTJMRFhodG5IalJ2aDh2ditOeFdLOWZyLy9kdkFKQlM2dWdkVGIydHI2VUVGQndUL1EvL1RiZ2FDbUVVSTBvZThJb3F6aFp6QVlSRGljbmlvb0tpckNzR0hEck9iOVU2MVRjbXB0ZFhWMTF1UERtVk4yVFR0djVkcFVWVFgvemhGdUFCQUlCUDdZMGRIUkhRNkhid09mTGVYaWN0TFJnd2NQcmpJbUN0alp6eDViK09rSU5XYkJjUWJVbkZibm1WQXJMeS9IaUJFalVGMTllazc5UDJYSGNkZlUxR1RiaStEbzNFeTRBZW4rb0FIZ1JuTnljdGEzdExSMFJTS1JiL0ZUUWJpNHdCcUYrdnI2K3RValI0NnNHOFNwSmJKQmpjMnBaUXMvbmFCMnNudlZ6Z2l3QWNEWXNXUDd3UzBMMkN5NG1RbTNiSEF6LzF4WVdQaHNZMk5qZE5pd1lmTUVRYmlJUDZXNXpuVnBtdmJXdSsrKysrY0xMN3l3RWYxblB3ZHI2YkNnTmxoT3pZUmFZV0VoeXN2TFVWMWRqYkZqeDU3V24vMlVnbzBRZ3JGangyWjFiUTYvYlZnSDV3ZzM0L05TU2lrZFBuejRQM2JzMk5FNWJ0eTRiNHFpZUJWL2FuT2Q4VHIydTVQeWFWTXBiZk9XYmJ1ZXZtcm0vUzFNK0dtZi9ld2h4cnE4VEtoUmpSQktSWUZRVWFCVWxuVElvZzZYcE1JdHEvQXFLZmpkU1FROUNZUzlQY2p6ZDZFd0ZFZDVYaFRWaFowWVc5NEdFbjM5M0FFYkFNaXliTUZ0RU1mRzV0dXl3WTBhSDZkbWFEcHg0c1FQMXE5ZnYveWFhNjVwVlJUbGEveVZ3M1d1cWJzNytjVERqMjE3ZnY0ZGY0NE9BTFZlQWlSQVlLdCtRaU1FYWFpSmhNcXlBRVVXNFhKSjFPMlc0ZlVvOFBsY0NQamRDSWU4eU12MW82Z3doUExTWEZRUEw4RFltbExJa25qYUg0UFRzdkxPN1haajdOaXhqbmsyMXEyeElTa2hCS2xVS24wVVNQci8wL3JZbHVuY1pzeVljYkNtcHVaWGI3enh4aEcvM3o4ZmZMVWYxN2todGEwOS90RDRmL3V2bHc4MngrMDdDdGp6MUV5bzJad2FkSUdBQ2dLaGtnRTFXUmFRNkV6UXpxQUxZM0xTVUFzR0dLZ1ZoRkJXbW92cTRSR01IVk1DdDFzK0l4NkkwL2FDOS9sOEZ0enNZTE9IcFlRUWF1VFQ3SzBnOWdrRmFzSnQ5KzdkZWlBUWVLeWxwZVZ3SkJLNWhTOWw1anBUdGYyZSszSHowZjhYNy82NjloUHZEYVdVTmpUdU83cW1lc0tpOTVHNVRhcmZlV29NMU5TQm9LWW9JblVwSXFpUVJGS1I0ZmU1RVRDaGx1ZEhVVUd3RDJvMXBmQjVYYWgvOXAvWW5qOE9OMzdHNy9CZHhySDF2bWV3NU9uOWFJcEppSXdiaDhVL21ZNHJTODRpc0FIcGM5ekdqaDNyNk5qWXZCeDcvd2FCRzJXZEd3QmFXRmo0YkYxZDNlRlJvMFo5WFJURnovS1hFZGRaWjlOVWJldjJOeHFlbm5yMUw1eVdHZHVQODA2QTlCM3AzUWMxUWdVQlZKSUVLa3ZFZ0pvTXQxdUFKaEtJTGhjQ0FUZHlXS2RXMWdlMVFNQU5RRVhkYzY5Z1pVbVZJOWhhbjMwR3R6MHRZZWxqdCtPNmtsNXMvZEVhekx2akRXeCs3Q0tVblUxZ0E0QlFLR1RCYlJDbzlZT2JrVzlqejNPemdHYkFUUWVnMTliV3ZyMTY5ZXBETTJiTStOanRkcy9oTHdXdU0xV0paOWRoL0lQQWphTVQyTHF6RGExSkY2YmROaFBMUDU4SEYxcXc3RC9XWVB2b0tyajJ0S0FwbG9CWU5XYjFlU1BWTGIrNTV5OHhaTFp6Mk1OUGErNlRVcVFFUWpRUTZDYlVSQUZVVGVrMG1kUUJRcWdnRTVTVnl2QjZSR2dTME8xMkdWRHpRRHUwSDM5NkxvWk8zWXZ5Qzhmamh6OGVqdXVDKzdIa1A1N0Mya01hWWxpRFNYc3V3ZU1QWDRTK01FbkZqdWNPSWZqdnMzQmRpUVRBajJsenhxSDZLeDlpZSt3aVhKK293N3l2YkVYa1o3ZGk2V2ZPQXJBQjZZMVhBNVdIVGNBUlFzeUxFa0tJbVhNemMyMjZybE8ydjQxMWJqZmVlT01oQVBlM3RiVjluSnViZXd1QVl2NHk0am9qZGVnWWNOY3NiUDZaSDlGWG44SDBPMTdDcHMvT3hIVUJBRWlnVlJtRDlYLzVRblB5NC8xL0xKdHd6OXRiKzVhcUpCbUlzVWQ1SndoQmtsS2tRS0FLSUJvSU5JR0FFb0hvb2tCQVV4clZpSUNjUEJmMVN4VHRyUW0wZElzb0szQkJsUVVvM25UNDZUbjZNVmJ2Q3VLMkg4L0F2TXR6OGZGanorTG1iMjlHNUM5WFlmRmZic1dFMjMrTlpTVTM0T1VGOWhHcVhyVEdWRVJLR0NlWDcwY0V2V2c5Q21ENE1OeHkxNzhqT080c2NXeW1jbkp5TXVER1FLd2YyT3pPRFFCaDVrcjdPVGNBdXVIZWFGNWUzbC9yNnVvK0hqVnExRTJpS0Y3T1gwVmNaNXhLcWpEVENPV0NvNGVoT3ZrR1dtTUFBZ0Fnb21aeXhVdDd0Mys0NFpLcmZ0R0VnYmV6OTlwQ1R4VkloNTZFUUJjRVFnV0JRSklJSlJwQlVnY2xnZ2lYMzRVUnVVRW9YaStDQVFrcFJVRFU3ME54Z1F2MXIzV2gra3VmeDd6TGh5RW43RVhPYlpmaHVxZlhZYzAvcG1QS1lJbWVmcXNiUkFBcVlra0E4R1BpWi8xblR5aHFoOXQ1NTUzWEQyb0RRSTZTdFBybDNDd2IxOWNPWW9hbVdtMXQ3ZHMvKzluUEdyL3puZS9zOG5xOS9NaHhyak5YUmpVaFlXeGo2VWxwRDcveTJOcVhIMzV1VzQ4dG45Wi83eWVRcEVDS1dGQ0REdlJCVFJRSmxTUUNXUktnZUNYcTdra2gydDZOenJZZUJDSzVPTC9Zalp5d2dxUmJSR2NvaVBJeU54cFVMMm92SElHY3NOZE1KcUdxUk1YelIzc3g2TGkyWXYrQUJrQkNRRG54RDlzWjF3WVJEb2VIQkRkN1dHcStieHlOcEp0QVk0b0tPaUhFZEc3NkhYZmNvZDl4eHgzL2UrREFnYjJscGFVM0UwSW04bGNSMTVrcXF0TjNkdTA1c3Y3dVZ4cjNBbzJxUXo0dHc2VVJnaVNvQlRTTkVHaWcwRUZBQlpGUVNTQlVrdEx0SElvaVVna0V2a0kveXYwS2ZMS081bytPNHQybWZFd1k0VWZTSTZFdE53Y2pxdk1RclhnZnIwWjE1anVMbytHb2hFaitZR2RRdUJISmw5QjZLQTRnbFA3UTBUaGE0VVBrSkp4bUpKeUpOekVVQ21IY3VIRVlPWElraGcwYmh1TGlZa1FpRWVUazVHUmI3VWNWUlFHejJvOHlxLzAwNDR6MkZJQWtJU1JCQ0RIUGMrOHVMeS9mdW03ZHVoLzI5dmF1NGk4ZnJqTlJxcTZ0ZnZHSkxmOVRPL2wvZGlOeno2ZjFQR1l1YTBVZU5aMmFjWlphK2hjODI4NGhHSTIzSWxMSGVyQy9UWVhzZFNPVTQwZStYNExpODZHNEtJaDhuNEpBUVQ3R2phbkJGMmNQUjkycUY3RGhrQXFnRnpzZTJZb05HSU1iL2g4SmdBU1hTMEtpN1JoYUUvMDkxSlRMaGlINjNIYXNiVlNCeERGc1d2VU82c2VOd3BSQUdwQTdYbXhBZmVJc2RXeW1Bb0VBeG8wYkIwRVFIQzlDaVAydDVkeFNxWlJaTVdXTENwUUpUVTMzcGdIUXZ2U2xMelVCK0UxVFU5UE9rcEtTbXdnaEUvakxpZXQwUzlmcHV4L1d0NjlmKytHYmU3RHNUWlVKUFpPT0xvMkJHYVY5K3dsSXVqOU5GeWhGU3RkcFQxS0V6eXRDVVNUcWRrbHd1MlhrajFDZ0hJemhuVGZqb0tLTWdvcGhtSDFWR1NyS3ZVZ0VYRGhZV29KQXdJM0E1NytBQjQ4K2d5WC8rV3NzaUVtSWpCNkR4YitaamlsR3lEemwrbkVvdStNcFRQM1BTL0RNRXhlRGJSNE5Ydlh2ZVBEUWMxZzA5OWRZWlBTeDNmZVRpZWxXajZQN3NmSkhXMUgybTF1eCtQeC8vYkU3NFZ1cVRyUjZlM3Z4d1FjZm9MNitIZ2NPSE1EaHc0ZHg5T2hSZEhaMklocU5vcXVyeTlwOGxVZ2t6RjBMaE5sK0JWM1hDYVZVTUM4amF5a0JrQ21saXBISmNBRndyVnExS2pKcjFxenJ2Vjd2LytFdkxhN2owU2ZhVXBWbFZqUWE2M24wZ2Y5OWNkc2RkejhWUjErQmdCMlBZc1BRZE9nSk52UWtPa0gvSW9Fc0NaQmxrYnFVdEx2eXVHVjR2YTZNaVlMOHZBQ0tDa0lvTDh1eHhxVE9sSW1DVDcxanN5Snp0eHZubjM4K1JGSHNkN0h1emViZ3NoVVZLSk43TTRzS090SlZVdzJBT21mT0hHM09uRGtQN2QyNzk2MnFxcW9iUkZHY3hsK3lYS2NzN0ZUMWwzZStmK0NaQ3krNzkyTURVbmFYeHViVWtnUklaa3dSb0s4L3pYQnFWQlNZSW9FaVVrV1I0SGJKY0J0UTgvdGNDQVk4eUFsNWtaL0h6SDVXRldEc21ETmo5dk9zQXh1UUhwd2ZQMzQ4SkVucUJ6YjdXd1oyVkJBRUlnZ0NWRldsekw2RjlONi92dERVcUJRUnpReE5BYWlqUm8xNmZjU0lFVHRmZi8zMTYzSnljbTRDVU1wZmRsd25TNVRpNEpIV1kwOStadHBQM21oS3ozbXlVRXM0WEVrSGw5WVhlcHFUQkdKZmtTRHQxR1M0M1JMY2JnVStiM3IyTXhUd0lCejJJV0pDclN3WEk0WVhZdXlZVXB5Q2hWTG5MdGlBZEh2SGVlZWRCMG1Tamdkdy9TcW1oQkJxaEtaZ25adVpkME42RzcwR1FQM29vNC9VM056YzlSczNibnpqc3NzdSs2TGI3YjZKdndTNVRxaEMvd2RkWFYxci92clh2Mjc3NmxmbmRRemkwZ3lnRVJOb0tlTVhzWFYrR3JPYkFKSWtPZTc4TkUrK3RlLzlaSS96UHAySFJKNVRZRE5WVTFNRFdaYk5DaWlNTldDT0lhb0pOK010WWVBR1BTM3JTQ1N6Z2RmSnZWMTk5ZFdOQUg1YlYxZjM2c2lSSTJkS2t2VHYvQlhKOWE4cWxVbzl2MlBIamsyVEowOCt3QUF0RzlTU0ROUlU5QTJ3bXhHSHRXekZPTWJiZkoxUVJWRmdQeURTaEZwdWJtN0dpcnpUZVp6M09RMDJJTDFEd1d6dk1DOFdjRTZocVhIRHJkQ1VxWnBhcm8wSlRUWEd2VmxQb3RyYTJyY0F2Ti9VMVBSQ2NYSHhsL2hKdlZ5ZlJMcXV2OW5RMFBETXlKRWpkNW0vUEcxQVN6cTR0SlNEUzlPWml4cS8yTE5DemV2MXd1djFJaEFJV0hzL0N3b0tMS2lOSERueXRDeGU0V0JqVkY1ZW5nRTM4MmFhb2FyZHhSbWdzK0NXU3FVb0ljUTg4TkplV05BWndHVzROd0Nwc3JLeUZ5Kzg4TUovUHZ2c3MxZm01ZVY5aVJCU3cxK3VYSVBuMGVpZTV1Ym1wNmRQbjc1ajE2NWRLcE1mWTNOcDdOdWtEV29xODB2WEFwcTVFazhVUmZhWFBYVzVYQmxRTTVldW1Icy9JNUVJU2twS3JHWEdwM3BGM3NuVVNWdVlmQ3BrMm1tbmZKejVkb0J4TEh0YTFKd3JoUUU0R0hDekduMU4yQUhRbTV1YnRlWExsemVrVXFrWExyamdnbWEzMjExQ0NNbmhMOTl6R2x5T0M1TXBwWTJ0cmEyUExWeTQ4RSt6WjgvZWYvVG9VYnNyNjNka045TExWWHJ0K1RSbWNiSFRSbllvaWtJVlJlbVhTMk9CeGk1ZHFhNnVQdVhMakxsakc0Snljbkp3L3ZubncvenR4RXdnWk9UaDJDdVJTRGlHcG94N000ZnJCVnQ0cWdGUWpmQTBCU0IxNzczM0p1Kzk5OTYvTEYyNjlJVnZmL3ZiMDBPaDBFeCtxQ1dYQWJTRzF0YldEY3VXTFh2cmw3LzhaUytURzNQS3BiRmhhQXJwNDRWVVFtQkdDeHBBK2tZRkFVcEFhUHFwU2tCQlFDbW9UZ0ZLQ1hRS2FEcUZwZ09xUnBIU2dKUUdKRldLaEFva1VrQnZpcUFuUmJEN293TUFEcHhWai8ybjJyR1prbVVaaFlXRmpxZUFESEhlMUc3Z3pCTjcyUk5DN05WVHk3MEIwTFpzMlpMNCtjOS92cmU3dS92NUN5NjRvTW5qOGVRU1FncjR5L3ZjYzJ6QllMQ3VwYVhsRDkvNzN2Y2VuejE3ZHVNLy8vblBYZ2VIMW0rbnB5Mm5waEppZ2RESXA2V2ZpNFFJRUFXUmlwSUlTVEp5YWJJTVJVbi9jbmU1M1hDN1BmQjZmZkQ1L0FnRUF3aUZ3c2pKeVVWK3BBREZ4U1VvSHpZTVZkVWpJRW55V1hrdnp2akpnK1BWeHg5L2pJYUdCalExTlZsVENoMGRIWWhHbzRqRll1anU3a1ozZHpkNmUzdVJTQ1NRVENiTlRmV0VYZXFzNnpveEwrTnhNcWNXMk1rRmlWSXFBNUNSUHJ2QXVxcXFxcFJYWG5sbGFtRmg0VFdDSUZ6TVgvWm52NUxKNVBZMzNuampoYTk4NVN2dk56VTFtU05OckVPekZ3Z3lISm94MDh5TVFoSHpseWhsSzU1bW9Zd3RFR1FyRXBqdEhHYjRXVlpXaHFxcUtsUldWcDdWOStLc1czSlNXVmtKajhkakRzZWJlWWVoRkJpb1VVMGxxcXBhNGFuWjkyYTZOU004MVFjSVQ1TUFsSWFHQnFXa3BPUUZBTnYyN3QwN29iS3ljcm9zeTUvbkwvK3pUNGxFNG0rN2QrOStkY0tFQ1kwTXpOaXdNK2tBTlJaMnFnRTFxOXBwZ0kyYXhRSGp1VW1aNTY0Rk5ET254aFlKL0g1L1JrNnR1TGpZeXFtZFRVV0Njd1pzQUZCWVdBaXYxMnNCenUxMmczMFMyT0hXMjl0ckFTNlpUR2JMdlZGS0tXSFBlRFBQZDJPZW1DbkR3Vm1BQTZDTUdqWHFkUUR2dlBEQ0MwOU1talRwVXIvZmZ3MXd3bzk1NXpxMVlXZFRMQlo3N3NVWFgzejdpMS84NHRFc1FIT0NtdW5PckdGMUk0K20yNnVkQnRSZ1Zqek41NnVUU3pPaFppOFVtTzBjWnVOdElCQTRKKzdQV1JlSzJuTWVlL2Z1eGI1OSszRG8wQ0cwdExTZ3ZiM2RHcUNQeCtQV0FMMFptaHBEOUVnbWsxQlYxWFJ2R2VHcHNYaEdvSlFTdzhHWjRhbDVzU0VxRzZyS0FKUWJicmpCdlh6NThza0ZCUVdYUzVMRVQvSDlGRWxWMVJjUEhEanc2dTIzMzc3cnFhZWVTZzBSYUNrNzBBQzJLSkFCTTkyY2QyYkRUdGFseWJJTXRwWERQa2tRRG9lUm01dUx3c0xDakhZTzhtbWRqK0pnYzFaVFV4TSsvdmhqTkRVMW9hV2xCVzF0YlFQbTNjemNXeXFWZ25sS0NBTTRZcXdNSk93MUFPQ2tMSUNUQWNpYk4yOHV2K2lpaXlZSEFvSHB2Qi91alAwRnVhZXpzL09sYmR1MnZmdkZMMzZ4alFHU0U5QlNXWUNtMm9GbUhueHFocHQybDhZQ3pleFBNMTNhUVBtMHZMdzhGQllXb3F5c0RKV1ZsU2dyTy9lQ2czTUNiQURRMmRtWlVWUm9iVzFGUjBjSGpoMDdobGdzWmgxLzFOdmI2MVJZZ0FFMllybzNGbkJNZ1lFRkhGdGtFQTBIWjRkY3h2WGVlKy9WVkZkWFgrenhlQzRIVU1LUmNscGhkcWk3dS91bHVycTZIWk1tVGRxUHZpcjRZRUN6NTg1WVYyY1BPYWw1SUFPVDQyVmRHanZyNlJoNnNrMjM3TXluV1NTdzk5UnhzSjJGMGpRTjlmWDEyTDkvUDVxYm05SGEyb3EydGpZY08zYk1PdHV0cTZ2TE90dXR0N2MzQTI0TzdzME1UODB6M3dZQzNGQWdaMzVNMnIxNzk3aUtpb3FMM0c3M1pSeHlwdzVtUFQwOTJ6NzY2S04zeDQ4ZjMyZ0xGNTJBcGc0Ulp2MkFCbXNQQnlnUkNCUlo3aGQyc2k3TkxCQzRYQzVyM3RQbjh5RVlEQ0lVQ2lFdkx3K1JTTVRLcDFWWFYwTVV4WFAyWHA1VFlEUFYzTnlNZmZ2MjRlREJnemh5NUVoR2FCcVB4eTI0c1lkWHNuQmpBY2NVRndZQ0hESEFKamlFcVpJTmFyTHRZOUxPblR0SFYxVlZUZkI2dlJjVFFzWnlCSjA0NmJwZTE5WFY5ZHFlUFh2cUxycm9JdGFaNlF5WUJnS2F5Z0JOcFpTcVJxWGM2bkUwTjZXeFFETXJuYnF1VTBFUTRYYTcrZ0hOSG5wNlBKNStRK3htNkZsUVVJRFMwbEpVVkZTZ3VKaHZsandud1FZQTNkM2RhR3hzek9oM2EyOXZ4N0ZqeHhDUHh4R1B4eTI0T1lXbVdjSlRDM0FPT1RqQ09MaU1YQndET0NmUVpmemR4bzBiaXkrODhNTGFjRGc4UVpibGkyRnR4dUFhb282bFVxblgydHJhZHY3em4vK3NuekZqUnBzQklIMEFkK1lFTmZhRWpYN0ZBTWFoV2Jrek5vZG1GZ1kwVFljb2l2RDV2T3p3ZXIvUTA0U2EzKy92MThwaGhwN0RodytIMSt2bGQvaGNCcHVwQXdjTzRNQ0JBemgwNkJCYVcxc0hySnF5b2FrdDl6WVk0TUFXR1d5UU01MmNHYWFLZHBnNUFRNkFPSDc4ZVBtUlJ4NnBxcXFxR3UzMys4K1hKT2t6QVB6OGFaMmh1S3FxYjBXajBmZjM3dDNiOEkxdmZLT3BycTZ1MytTSUxYVE1CalFXWnV6L285dUFaamswNDRJZGFHYllxYW9hRlNVSkFiOHZBMmhzYjFxMnFxYzV4RjVlWG43V25NckJ3WFlDRll2RnJOQ1VyWnFhN3MxcHIwSVc5NVlCT0YzWDdWVlVaQWxUN1pBelExVXJMK2NBTnNuMmQySkZSWVc0WnMyYVlTTkhqcXdLaFVLalpWaytqeEF5NGh6TGszMlVUQ1kvNk9qbytHajM3dDM3dnZhMXI3VTBOVFhwTmxmbTVNNnl1VFRyNzh4bWJOdm55SUNaemFHQnJYS2F4Mm14aFlGa1NvVWtTUWlIZ2hrdXpRdzk3UTIzYk5YVEREM1BsZDQwRHJaL3diMnhWVlBUdmNWaXNhdzlidzY1Tnd0d3Buc3pJV2NQVXhuQU9ZV3E5bkJWdEFITzZYM1JmdjNpRjcvd1gzSEZGU1dscGFYRC9INy9jRm1XUndpQ01CcldLdDVQclJLNnJ1OUpKcFAxc1ZoczMvNzkrdzgrOTl4ekxYZmRkVmVQQ1poQllKWU5haG52TTg0c0k4eGtRMDNZNW9tWncwMklwUWlYQUFBR0dVbEVRVlF0bURFdWpUS050a2drVTVBa0dYbTU0YXk5YVlGQUlNT2xtYUVuZDJrY2JFTldWMWNYOXUvZmJ6WDAybnZlc2hVV3NnRk8wN1RCQUdkM2NTYmdpQVBrQkFmSURmYSs2T0FHaGZYcjErZlgxTlJFOHZQekMvMStmNGtzeThXaUtKWVJRc294NkVydlU2WmVTdWtCVGRNT0pwUEo1bmc4M256a3lKSFd1cnE2dGk5Lytjc2RZQTRtR0FSbTJSeWE0L3YyNUQ4TE0vUXRBS0pzTWNCMFp3QWdTVkkvb0xGOWFXeHhvS2MzbVQ3RW9TQy9YNEhBcVRldHBLUUV3NFlOZzgvbjR5OVdEcmJqMStIRGgvc1ZGdXp1emQ3VWEwNHNPTGczcS9lTkJaeW1hU2JZd1BUQ3djSEYyU0ZuQVlxQjNHQ1hZSHRmc0wxdjVmOSsvZXRmKzhlTkd4Y3NLaW9LaGtLaG9OZnJEU3FLRXBRa0tTaUtZbEFRQkQ4aHhFOEk4UkZDUEFZSXpRTUF6TThKQmd6VzJqaEthUStsdEl0U0d0ZDFQYTVwV2t4VjFXZ2lrWWgyZDNmSE9qczdvODNOemJHZE8zZkdGeXhZME0zQWk5cEFSZ2VBbVc1eldOcGdsLzI4dld3d1kwRm11ak5tU3hvRkFFVlJMSmpaV2pneWlnT3lMS083SndsRlVWQlNYR0ExMjlwZEdsc2dLQ29xNGk5T0RyWi9UYWxVeWlvc0hEbHl4TnBuT3RTbTNxRUN6dWJpV0FjM0VPUWNZY2RNUHdnRFFFMTBBSnY5WXIvT1FCY2MzdHJmejBpRE9ielB2aDNvc29QTWZtVnphZjNlTjQ5K2Q0TFlZREF6MzdmdDFJQW9pcUNVd3VWeVpRV2F2ZUlaNytxRnkrVkN4YkRTakdiYmNEaU0vUHg4RkJRVVdBVUNXWmI1aTVLRDdjVHAyTEZqT0hqd1lML2MyMUQ2M295WlUzdDRtaEdtR3U3Tmdwd3h6V0NGcXN4OXN1ZmtpQU9Fc3NGT3lBSXpjUWhnWXdFbk9FQnRJTUFOQkRjNzBPQUFzWUVjbXA3RnJka1QrNE5DakNrQVVGdVlhY0xNS2dRd0ZjNk1IUnVpS0ZKS0tkeHVkd2JRSkVteUhKcTlPQkNOZGNQdDhXRFVpT0g5S3A1RlJVVW9MUzFGS01RN2VqallUcUphV2xveTNCczdralZRYTBnMjk4YTJoNWpWVTV1TEF6TjBiN28zZTA0T0RvNXVVT0RacXJGT1FCc0lic2ZqM0k0SGJNY1Rkam9DanFsT1pnVVlBeThXbm1Celp1YWYyVENUWFE3RUFJMnl1VFJLS2J4ZWIxYVhabS9oNkl4MndldjE0Znp6YXF4ejAweVhkaTRjTDhUQmRnYnB3SUVEbG50ektpN1lxNmRPclNHcFZNcHliamJBUWRkMTRnQTQxc25CRnFyYTNaejl6M1lvWlhWaUR1RXVHUVJzMlZ5YlBTU2xBOEJ0SU1EcFRuOW1vRFNRczdQL1B4bGZpLzJ6TGRTRTNablpnRVp0bFU3cmJEOWQxK0h6K1Fac3RHVm5QTnM2WWdnRWdwZ3lhYUxsMG5pMWs0UHR0Q21aVE9MUW9VUDlpZ3RzZURwWS9tMEE5ellnNU14aUErUGs3RzRPV1J5ZEhVUk8xNkRPakEySFQwYU96YlpVaHc0UmVQWUx0aVBkWVFlWjNaV1p6b3pKbjJXRm1SMXFKdGcwVFVNd0dCeHdhSjF0dEcwNWVnemhjQTZ1dVB3U2xKU1VRRkVVL3VMaVlEdjk2dW5wNlJlZXN0WFRvYlNIMk9GbW0yQndta2UxUTQ1dEhZRkRYZzQyS01IQjJXRUFKemJVZkpvVHpMSTV0cUVXRXV5QXd3QUFneDFjOWp3Wmt5K0RMVzltMzBPYkFUTzJmWU5kMUczUHBXbWFobkE0bkhXKzA2eDJtbUhud2NQdHlJOFU0TEpMK0lyYUV5bUpQd1QvbWp3ZUQ2cXJxMUZVVklURGh3OW5ETld6K1RjVGNIWUhOMUQxMUFGd2xNbkRFUnZncUExMDVrVk5vRkZLemNNRzJWOW9nNExLQ1lZRHdHeW9weG5Tb1VMT1lTMGliQ0VsKzI4ejNtZWNtU1BJSElCRzdVdTNCd01hZTJtYWhweWNuSDViMTltamhjeWg5YUtpSWtDcTV5OGlEcll6Vno2ZkQ5WFYxU2d1THU2WGYyUGJRK3lBczgrZVpta1BjUXBScVFrMVRkT3MvSnNUNkV6QU1hN09oRjAvMTg1QWJEQm9aUVBZSndWYlZzQXhKNy8yMGJnUGRyQTVzZ3lJMmNMTWZpQXpONmpiUTgvQndrNTdEczI4VkZWRmZuNitkYXlRSFdobUhvMFBxM093ZmFyazlYcFJWVldGa3BJU0svL1cxdGFXMGYvbVZFRTlIZ2RuQzA4ejNCeWJnM053Y0hiWW1YQmozMlpBai8yN1U1SENZQjJYN1dQOTRHVjc2d2d4QjZCbDVOQllxTm5EenNFY21qMkg1bmE3a1VxbFVGSlNrdEdQbHBlWFp6WFp1dDF1L2lMaFlQdjB5dTEyVzhjeXN3VUd0b0xLQXU1NGNuQU83czJwVGNRT3VuNEZCOVBaMlFISC9Ka3lSUW5XMWZXam1oUDhodUxVbk03aFp6L0dnc3ZteHV6dUxBTm1iSXRHbHZ5Wlk3ZzVWSWRtejZHWlV3T3BWQXFWbFpYSXljbkptQnFRSlA1U081WDYvd0hGMUZuWjhqMWl4d0FBQUFCSlJVNUVya0pnZ2c9PSJdLFsxLCJkZXNjcmlwdGlvbiJdLFsic3JjIiwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFUWUFBQUUyQ0FZQUFBRHJ2TDZwQUFCTUMzcFVXSFJTWVhjZ2NISnZabWxzWlNCMGVYQmxJR1Y0YVdZQUFIamFyZjFadGlXNWxXVUwva3Nyb2draXFBUm9EaW9aNC9VZ201OXo0aWlOUnRJOUl2eGxtbElMM251dUZNQXUxdG9WcnYzLytYKys2My85ci8vMXZLbWtLK1czbGxiS3pYK3BwUlk2LzZqMzc3OTIvbnp1ZFA0OC84WHk1MS9QdjM3OSt1c2JnYitqbi94OTQrMi92NS9PMS9NL2YrQWY5M2pHdjM3OXFuKytFK3FmQy8zNUJoZitQWUYzOXQvcjd3L0oxOFB2NjAvNmM2RzJmLzhvcmI1L2Y5VHg1MEx6endmUG8vejVuZjU2ck45Zi92L3JYNzd3c2tvcmM2TVl3bzVQdk0rZjZmY0U4ZmU3OC9zOWZ3WSs5L0MxSG1Nc0YzODk4ZjF6TVJia1gxN3ZIMy9mOTk4WDZGOFcrUi8vdXY1OTlmLzYxNzh0ZnVoL3ZoNy9iUzNMbnpXNnkzLzlqU2YvMjlmalg3Y0oveUlPZnoxUitOZHYzQ0hGLzNpZFA3Ky9iOVh2MjcrMzYwaGhTK1dQUkozRmZ2NXhHVDQ0V1BKNGZxenc2K1YzNXQvditkWDRWZTkrVDdaODNmTWUvSnBQZXdLNzhsMVBldGJUbisvWjUrLzVUQjR4aFIxZS9nNWhobmkrVnVNYldwalJmVXIrZXI3d3hoWlhyT3piRFB0aTYxSU1mejNMYys3Ynp2M21VN256ZXZob2VMaVlXLzNmL3JyK2Q5LzhuL3k2dm0rNlJNOWQvMW9ybmlzbzF6eUdPK2VmZklvTmViNC8rNWJQQXYvajE1L3R2LzhtUDRncU81alBNbGRlc04vamQ0bVJuMy9LVmp6N0hQbGM1dStmQ2ozWHUvNWNnQ1hpM3BtSGVTSTdjSmNuNXFjODl4dkMrenlzWTJXRE9rOGVZZ3FESFhoeURvdUhSRjVpQ2RjYmF2RGUvTXo3bk0rR0hFcnd5OWdtTmlMSGdtNVZkcWl6V1NsbDVPZE5GUm5xT2VhVWN5NzV6ZlhLTGZjU1N5cTVsUElXalZ4LzQ1dmUvSmIzZmV2YjNsNWpUVFhYVXQ5YWE2dTloUmF4Z2JtVjlyYmFXdXM5WEowYmRhN1YrWHpuS3lPTU9OTElvNHgzMU5GR240alBURFBQTXQ5Wlo1dDloUlVYWm1LVjlhNjYydXI3dVRhV1lxZWRkOW52cnJ2dC9pRnJYL3pTbDcveXZWLzkydGYvMnJVL3Uvb2Z2LzRIdS9iODJiVndkc3JQdlgvdEdsKzkzdmNmbDNnMEo5azlZOGRDZXRqeDF4MUFvSU43ZHRjbnBlRE91V2QzQ3loRkRqeGtkbSt1OWJoamJHSGFUOGpmODlmZS9YUG4vcS8yN2NyMS8ycmZ3djlwNXk2Mzd2OGZPM2V4ZGYrNWIvL0ZyaTM5M0R3Nzl0TkMxL1NPYUIrZjZhRmUvTDV2L3ZqcmJ4NnA3cDdMNkhuMWtXZGVxYU1pOTc3ZkY0ZnljTm1aWW45M3YxTllPNlV2aHBUZUs5YlFhOFpPNWErTnNkNTdiTmM4c0Radit1cFQ4RnJQZHFuaXpwVTFybjIrYlkvNjFMN2pPOHZIaDNkdVY0bTR5QkV3WllWbHIyRnpFNHhmLzdob1N5ekJ5Ty9xZmMzMDNqUHcxbndYYnh2WTBkeGEvWW8rT283N1lzTy9Pbm1aK0w1ZnFXekQyaG1mSHNZSXZleU1Sd1FJUEx4bG5hT3R0Tk5ZTGZPY3VZWE1wbjdJRXdKVXI0RVJYcFhuQ3FuMVBWL2V1ZWIxZm04cjlldTFqUFkrWDBFb0lxKzVXMThkTzlNeisvSHVaM0NoTjIwOHdYczk3QjR1b3ZZdjU0OHYxUHlsOGQxblQvSGdkY2U2MlUvMnJxZUVvSTVVU3docnR2ZkZ3MVJXWkIzZHVjbzdubDE0elZsSGlqek5ZQWsvMUFJZHdINDlwYWtNbjFMNTdmemwrWlhKbzhWbnQ3ejJxdStlSDF0Y1VKRjVmMzN0d2Q1K01kWTc5ekJTdXRtZDk1bDF6YVVYV3QvZGVjYjhEbDV2ZlVoUFdPTmIrL2xtcnl1OSs3dDRpcXg0N1BjcDczZHZmTUhMejh4UjJteFl5UGQ5NHNhdnpwQnY5Z3VkRDNmSmRhUHJHNmYyN0luRVBTdGNJMDFla2o4aXQrbys5aGZualpjYjNyT2xYZGt5ZGk2dSs5c2pvVm85OFlnN3NJTVlsekpDclNHeC9ST1JhQ24wdlZXbnVUN1dsbHVQK2IwbzNVNEZ1WWozN3JQaWRYZGdDOUM1d2M2OUxoMVh3L1lnRi9uQ1BvVGt4U3BxRm5meC9kdHV3Yi9YTjgvL2YzcGhzNTZuWlRTNzNURTJmWGdZYjNpLzJIZGVJNjFyTEY0bTNQVkxyR0ZpRHpzT0tiY1JlL3RRY09CdVcyTmdtQ2Jid2Y4d1ZteFRiL0Vib1dDcGtLblUzdHd2Zk5OQ013YzdIVkpCcWdlR0I3QUFzcHZJRnpadWJZVGpyZXZMQTJVWmUvS1lOeS9sRFNKcjIrWm10NitOVGoxekZVeGJRMWI3eWx2ZGY3Rkk5K0JSRUtHMVFJeHo4ckUzSEQwc1dJK2V4aHorYnF2MDlhQzAyaWJjNTQ1ZUxjekdNOTJycHJLUnI0YXRpYngxZjduTGcwenNqcWxhcTdRV01GQXBsZHJ2dkxnT3lMOWl4UFljRHlZWlJOWEJWeEdiSWk1ZTZkdFAvbGhXVmd2SlNia2lNYTN4a2JYcUxPbDdFTlFYRlUxeFFpRSszalJyVEJIVittSXdzQVgrTDhUQjVzNCtaOFFmb0x4M1RoZ2w5QmdsMzl3OUxwVDNld0Y2b1E5c2RydmRZdlFUK01YYjgrK1krMTJ3emJIM3Q5NWpZaGZpM2RvM0s0dkNVOTI1WVUxNGhUbEIvckVzbHZ2Q3pNWE5qc3hjbnBSN1RSanE4S1EzSUlNZExxQ0h1d3VMZ3lmSWc0MGFoZWNjdXdGV3h1eGxsWVNIQUVUVW1QSjRja1RVSjJwWHNPOFQzTHJiZk4rdU1MSDNyT1BEc2lEc3ZQbHVHQTNXMFYzRXA3RWsvVVl2THBhNXBNRExEMjFMNHNWUUlDNTJmLzU0WGl4ZndnRU5SR1cvMk4rTVNxTDBmSzQyYm82d2g4MEY5dFc0WTR0NXJyY08xQnpuc0hCeXVES0VEdS9WMGZmWTU1MUtLTS9IdjJ2NVVGOU1PVDh4UDl4RjNEdmp4YUZaRzV1WEU1L0FBS1krc0U2OGJ1VXZURDVlQXVGOGU2cWozQk9GQm1VRE5qRnhlWHdGYlVZaU16N2p3V1d2aFJ0cFhoOW5tOTdhZW1aVjBRaFdGdkhINm1LR2ZlZkJNeU5ocjVMeGZJTW5hL1Y0M3ZXMVdhOUhDeUt3NXhuUkZzeDVMd0ZCd0k2Ni9BOCtHeWVSdElqTlZlVGJCYkRQVzdEUzdGaFQwbDRacEZ1TVVRTktZSGtqdHBSWHkxaFJWaWEvNkQrQ1dWckdrQ00rK0dGMHJRcW52N2xiU1lEUmtqdk9aVnpTZ3c5RzhJWVJac1VBeVZYQzl1SWRtVUpsa0o1VVBrREtoaXYwZ1lnakgwWFA5V0hNY1loTGEzMDlxT1VScFhYano5YUgycmR2K1lIN1F4S2hFQVVRa0dDbUxDYnl4WThoQTdtaU5COHJ6UjgzOXZZdDExc25GMGNKVndlODdiZXlJd3JkTXhZdTgxYmVzTjVUd0lBdmpCcTJyMmM4MkF4NHh3OVIrZmIrOENLOEsrZ0E0SUlSd29oajhZQmxqMjZkN1d2N2d4ME5FTTlDS0VGQktDNkM4RzBXUDdKNkg3NEJ4OUFSaHV2R0NvUjNERnowRER6ajNXTlJGVmtzU0FLUDJwQ0QyWW9jV0JQelljQUJPRHdTOThhVllranc3UkhqdjNqWmpkRkp3Q1ZZSVRkYWVPMWo5TWVHWlAzOUp4ckt6YnAvNzVHZmtBdTdnWVpYRFBlRjdlVWlEU2d4cEVUbFJWdEJGRzk5WE5WYnhlZEdQQ3U3RVNhZVQwY0xhdnhhamdwT3hnMWkwRjhBT3lZVUJYdWZVUEFLZUErMGxnc0F5OUJaeEhoL2d4WExHS0Rlbm5leStxazhENWduZ1RoNUlsWlFnM2E5RS9QTE9wWlBVK2xLN2FjQ0gwWmw2M3NyZWJUMEZxQVcwb2lmSGpqeStRRFlwakdDcXJpaTNUd1hRR3ZQOXVFQUZld0Y2c0dsY0dIVUZDZVBpUk01Z3Qyd1QwL0hGVWo5VURwc1ZQdHV0dkVEZk1PTm5uSTFuQVlxZzNIWkJiREY1b0Fmc1ZxWmpYM0FPTTEzNTJZVmc4NC84WDJRWGN3bC9qR093aWJqYVJIQWRDSHRTRmxjUVVNT21uL1RnaUVDVnNRNG9VQXFjb0JLbEl4anVKVnRkQWlaUDhnRE5BRXVMMkhnbGE1Ym1JTm9LWk1ReDNHV0hoZFhnYVlvOVlPdkJnSytHR04rUEpTV2xueVMxd3NaZ2NYL0ljWjNuZW1hRlRPMVZlOG13Y2REeC91TjBGWFdUY1NSMFV6RUhTL09Wb05YY3BoekF3cnhpWUhMM0N3N05xaVZLN0lIV0xnRy9BTTdJNzFvT1N2MXZLN3lnNTZIaGcvRCtBWXdOZ1FQdVBzaGVlS3Rtcms1cXBVZ1RQdnE2QlF3SVJlY1dBSXpJQWdvUHE4Rk9ZWWFKWWdIZDBIeUoyQ1ZIWi9JRlpqMXczTnZ2QUhmT1Z4K1hWaW14OGpKQ3lYNXg5ZVB2eTUxUFRLRzlmc0FGdVR2SDVuSHB2M3RKNi8vOXovNnJ6OTVuUi9kbytTN1lneDdhdGllQ0pxY1kySk9ZU21JNklQUmhaYUM5TERmQ0duTEVJQ1hIU3Fpa2QvYlh2TklLOWJoeGUyLzgrQUFkTFQrWXlWKzM0QkYrQzJWOTBBWlRORE56YUthenkzblRoY0NPUEZ5b0wrQUhtRnRYaUFyNm9PNkh1VEhQa0prOGdzZDJGMkhrekh1N0tDNEhVQlgvZlBETTErTDdVRzczeFVFZGcvTUFNVU9NczhjdlRXa1plRG1jVzk0dXcrdkpFNkxnTVEzZGpqMERSQWZSam91Y0hEQkdXT0JzWnNOZ2NHQWh4ZTRDS1ptS2JnbmRtMEFjZ0diUEdwTWNXZ1RFcWgxcEx1QmFoTnkzT04xYnk0RnFjR1BiUlpub0Myc0JPYVBqd1RKSUs0K1JGd1lWb2xIR2JBanJMRFJUNGhqYjN1UHZkYW8zMlhvQ3VBcW9GTFAwU3pVRFo0Y1dCQVlOWnRiRW1hdnMvME5HWjA0cHBtZk1NU243RFBVRzJOMGYvbXFjR3VBSmRDZ3ZrcEppaG4zQlB2NEtwNDVENXgrcnR4emRoRllTVktNaENHYSttN3Mwb0kyTDY1OVRUUVNTbGpmSVRwaWpYQ1djVHpwRzlEL1BsZzFlUDZIek1DU3gxZnhkanNISEJaaTFXU1JEMjYrclBGZzJManpCK3dBamVCRElBanZtNTk4S0FSK0FsU0dDUFhDWXQwaS9UZE05TDY5QVY1UVJTSnc2d1JrWHhlcUhmUlVCYnVCdEgxZis0UEhBTzl4WTVqYUVWaGdJZFlzd25nL1hOUDg4RHZvaUJ5eEF0VFp6eXRqL1Jxd0g2eitwTUJ0NWVMbmgxR0tHL3pBNCtYSTNtTjdlQzNlbjMxbmxaOE1Gb3BBOFk0RkRlMEZzYkVmUUUyZUExb0IyVUtxTm9SaXB3UjVZVWVDekF1VThvQ2NNSjZZeEFnOXd0bWh1Q3pYRGVTU29sekZYY2ZEQVhSMW5CbW1KYm8zcGlnd0xlZ2ZzQUdVenU0ME9JQXNtcC9sSGJZdWFjSjlNV1BodVg3OHJPTHRvSmE3djJ3VG9wQjVkNVQxWmxWdVREdTIxVEFHREI2ekNaaUxPTUNobjAyOFhrcW83cnc2SUJ0RWhrNFViUytPQ0hqVFdVejhDWTVCem9Ub1llamhNeDFFQ0JPRlRraTIyTTRIYUFYa2ZEUnNDVDNvN3g0c1BSc3k4S3FHSDlDV0RQRERjMkVuQk1NM2tPY2IyQUJzVHhBbmVqMGVMMkRNV2IzeVhtVWplOXNjQXpDczMreFN5ZTlCaDIvR3Y3RkVPTlpWV1JMamJzOExUT2tiRzdMd2RMT0FqaHJFbW5XL1FOWllpaUJaS3ZuQmlSbzFBYWJBMk8rV0gzWHpoTUxFdkRqWXdyTzNGY01xQUZ4NENlanZaUTN2Y3EzcUhtU2xjSFRNUm9YaUpMNElCSTJTWXZBTnNHM2hqWWFTQXR5SWlnV2k5T29IMVFud3o0MktIQ1lQbU1KVThTQnJ2U0I2bEIvaDRMNmJWY0tKWWM0Q0NpMFpHNVdOQmNITlc3Vzkzd0VoaEc3c0M0SUw5a0hVd2RmNS9NdWRnK096WXBDcWdJMUdZUGtTV05lUTR0d3ZPQmVibnNFdWhpUlFYQVM4WDRDWWdGL0FDNWFOUE9DS3RWdFRtTUR5dWV5b1RsOEdDbUtvYnc0cWNwZTJzbTRMRVF5VkZ3UDZzVGdZRFVRTXRVUmN1VGV5RVJxTUhNd0dhaENsVkd3OEhrcXZpejFselpDTXpUYm1nVEhSaE9QYnI1TTZBYUF2c1JXd0JtejVIU2dkY0NEZjIzSHVyQ0c2L0FFT2NKT2Y0ZllYSEtrQ0FYNDJjdUsvVFVKcEVNYnhaNE5iSWZwWWZvQldRTDVxeU8rRUxYVzhEbDRJSzQyZGwra0JHUGs4SkFLV2lWSzl6NVZnK1RqYXR1N2RxNnJBTnFJRHJHTElJampNYnJtQkt3TmV0OW5ISlAyR29mN2pTZjd4SU5lZkowRVArckdLQm4wRTFYeUszVUZJdjd4T2ZKZTFoZzBYU0RQWUM4VmlkZUpkTko2M0R2M0tNRmRNcnM1QUV0MVFiWDZnMUlKQVk3WmhjNGpBZzZiZmZjbFp2dkxuMW5qeDlQM3o5dGZmN3g4L3dLMW9BeUxLQXAwRjdTdmowZ0c2Qmxta1FjM29tTkUvQmJQSDUydVl0Tnd2VEZxU2loYklmeE5BZzhGYmRERmxzQzhNRFBuK2pPZ202YUN4SUpnanRwVXROY1I5Rm4yMGNDVThVT0N4ZkRmTU5xQVYvd2FpRHMrSVFPSUFqMVJtY2FiNU9TTHpZc1doVk1PYzROL0NHcGR4amRZYm5nSGZjb1JnSEpBbHNQMER0LzV0Zi83cjdibisyaDh0L3dDQjRDenlnLytGMytCWkY2UUhHd2JzeUxWZ09sSTRVY1VicExEbjBVOGo2U2pMdGJDUWErYktDMHpEQmdIbFlkTWIyc2MyYnJ4VWxGc2NvTDZtaUF0K05uQjc2QUFQeHhhRFRGaFlMT1MrSHlEOTB6b3ZLTTNMRTNzNDBFeU1iTkRIdzBsNTZnZUs2MTdpWTkvenFvL3g4cjM3VDFtdXU1UTc3cXJGRXhndnZQdEVHeUcxa3E0VEU0T1h5UnJZdXhPZFRudUFPejVzekY1VjVvOENsSHBOSENIS1hUTHdwd0NURUlRM3duTkJxQkFVS0hkZlQzQnRCMTZONi9POVZRV3VmQ0x5VE93cnVyazBJNGp5UFdEQUtCUm1tTFhwRVNLTW0wd1JVSUhsdUNWYXNtRGVIeXVFMVFVbFNZQ2VWZUhLRzNmMGpBdUVOd3dhR04xSFpoZHFKTlY4eDJkOEdCUU1iT25Rd2hoaVVka05XQS9qOEs5QmxLWHhiNnVFZFNITk1HbURuRHdqa2cxZGdLYU9iMlljN2FOWjZCV3lnS3hsS01xZTBxR3lzWlBHcGtQU25pSlZJMTFHemxwbmxYNTdXeHRPUUFnSHFtaFFkN09yckNFL3paZWtweGhoUStuaXVzREZjWlRnSy9qS1ZSc1cyRFQzL2FwTG9yeHZGMFhZVEFSTXNxT0NPSXFWMnNid3N6TkEwNjVTM0ZCbHZEclBpbndZUUtoNGlucmpiaXJVcU9ua2hpUUtSSSszaVJNVUE3UDdNc3VDZ1kzekI3d2dlUkdva21ZQThFTW82aFZFUWhEdWxjRlArMkExNE92M2JpUWFVaXdJM3puaTh5Rm5IMXF3OGJudkI1VGhKaCtXSEpOVDhKaFR4SmJCSCtyc1BPcTRqUzBYVmcyOE9TZTBjK0FqakFGRFFuR3ZZR040eHNkRmNlR1l6RlpyaWREUUMxNzhMcGRkMGEwNERmZ1JxMmlBazRWUE9HV2VGdyt3WWg5cjUyV0F3NDFQT3JPR0VKaW94dDVmNEp4dDNDRTBicmhrTDNsVTBFMHlBWUFUTytJWFBud3NXbmlYYjZQYUtUem9mdFhuelRkV2dOS2FWOTI0YjFEWWwydENzY0RNQ084TjhYMWdOaXR4dTdxQk94RHUvRDdnSDVNbmNEVXcyTTF0QUF0RDNXbnhNalEwWmNjUTZvQ3R3RHdsdFJpU2dHRCtJM1Jmc1UxUGh0aSswRWgwYmpYRVJ3ZVFWb3NnalNkZkFTMXlZVGRlZUVpbTk2dDEyNWlDRERLK083Z1Vmd3J2aTBhMFFMSWJDM2hYY3pHRkpmcCswUDdrUlpCZ28vT1BJZTBuSmFBekFzVStCaDB5MGczTzNkS0NSemRsNG43TTlRQkpjVk8vbkJKTG5LOGhHRExrZ1JGcGlCdmFiakR4UkkrQkpWSllFRll2RXBrUVVTSGVENUhGdGNNenRMcFFYNlNxWHhpVWtSQUVWZ0YvTnZQaHIxdG5BTGlJUXJXRkhHSjNzUmNMODhicnc5SVN1QWlmZVpzNGVCYVVhRis2U3p3SDJ3U0hob2EycDBZQVBDSnlnMC95RVhiSUw2enc0NEZmU0NBZlFHSzViMGJ1UWY1Z1JSelpCWHBjYnlxRGI0MEoveDc4UmpXNWhLSG5BcW9FUnhqL3VMR3p3TWNuTCtINC9WdmlweHFnV3l3NCtLaWF0OWVjaVhNTnYyaDBxa2JKYndCeG50dWcyOTExeVlhbDBINVkybTV4UFhsR0pRSGx1TVNNWUtLTjBVUldPaEJxcGkrRWJuWE4xcDFydCthU0dneUpBUGlVWmNOaGNTK01jWWpCakVvR1JGU3daUDhQNFJQbi8yM2RNQWg4TUdPckkvQWhvb1daLzk3WGVQYWRKMCtLOFc4bXBkQ3hKZG15eENlYkpHV2ZEVEZoRmZjRzYwTVBCQ2IvZmpzRThzY0Q0NlU0eG4vZS9jRlRZQ25yTUkya1NKdHJTeWNxQWorQmRNU1RoR0xYYTgreFIvTityWWZ4WHArRkxiVmpQMUhSMjlnMVJPTUYvSmYrejl1ZHUwMkRBRnQ0T3V1QkVEd1EzblBodXdCUEY4SmZFM2dmNElRNXg4c1VBd0o0RDN3cWZ0TjBYNnlZaDErdUQ3TVprczh3Ti9LQlFnQlZ4dERXWFB6YlQ2WXZZaWkzQWZ6dlpBbDkxN01nZnkwSCtKZ0hpVGR3UE9DQ3NXMjQxbFp4MVhEaysyS0h4ejNodXJqenJhaUJOYld2a28xK3RoNDhoZGxyLzRlYlhQKzRTejRTQVVqbTNZRUdhTFVMRDhaRDRUQ1l1THNPVDhubjhWL0EvTXQyQUE3bXlmTGhmQzdnYlJ6WTU0eHZlajRVR292c21zNlRqZjNYQi9qYnR2L0xlOFlhUVA0c0RSd0RJd0Zpd29Wa1RmR0o2V0F5Rzl1Q0RVSFpRWmRHa2JxazVlKzdoL1hDK3ZTeEwwZzZXb2xVeXRBTk9PS1hJMllWTVpic2pDZEM1TkZGN0RHODUzMkJ2K0E1SktkWDVDL3F2a3p4S1pENGJ6WUFJaVNNemxXYU5xdUd6amlDRkJGWUJyb3FYOUVHaFpueFJEanc5eTlRV2lhUThTckN1ZkVIbXFPVkU0cUxQOFVsUTVBYjJnUVZLQytXYlV2L2JwT0Z6MUdDWm1Ka1A5aFJkSGMrMTVCY0dNcUJ3dHp4WHVqbU1NOEsxb1RObWh6QmhKWjNjOUc4endhQVJUNHp0WkFoUDMxalBMQW9sejV2bU9tWStJTjlJaERjajJYR3g2ZjY0VzR4bFNiSndDYU5ad1E1cmNMeXN1S3NuUVZsR2FUUjkyWEFjbjBtYmtydlhBVm5oSWlNZW1kWkZUdUM2WjlvMEsvS1pmTHEyMWdZUGphelFkVTh2a1lTdXI0VHhpUHdYaWJSWCtPZDRQUnBUZGtUUGpOVThvcmVzWlhiSUJ2ODMyalpTUVVhNkNycmFld1BxTFlCOGg4MGZ4ZzlqLzBCRUxHemNuMWNTR2RqSnFaa2pDUFNWVUloaURBU3pjcnZZT1k0aHE4SHZFZzc5WWx3dTBNbFByamxoTHNWVEdRR3BVV3I2ZmdaWkMwcktWUEpSNlp3YTl6K1M1Z1NydjJZemxBNFRUVkhscDFWZ1N4Ymh2Q0xhWUg3dTVVajNEc05nQjU3MkxEeUw4eFJQd2hnQnRVQ0xaNTlSZUFsWkNHRHhPUjRvdDIzSVhsSlpJaHZMU3ZEcTFxWTZRU24yRXlBQyt5RE5UUytYdlBKNUQybTZSdDBMQlhUR2NhbzhTMWNURXR1dllOMFZTeXMrY1BIckVPVllJTmdqdlFrQkozNzQyMnhrZGZ6bUhTb2t4M0FXSXhqVzhQUCs4S2p1T01iNElNTGhJQ0lBSEJSYU1UcnRXZ21mZ0F6QUFudkhQY0ZSdkJicUpOcXcrc2hqTE4zSkI4b0JsK3RlTFp2UWVHV2dZNzhHTEpTLy8rNjQ3bWZ5VXo5MHhEaW95VG9kY1R4NExBZy9qSGhic1ZoaVYyREdDQkgrSFNUZ1BuRlU2TUJqOThQeGt1K2ZqWDhOTjVuQW5YYSs1ajZCQ1dDOFhBMlFxQlFqQUx4TGxDV3VGR2tsdkJYSjlsZEFRK2d5WkdLTU9yaVVZQndBNHVERHQ1WVU4Z0NOR3FEQVNyWU8rWDRZTGFRLzJjTjlxMGNIZ2JLUVluQjRQNjVFSmlKUGZwYmprSGNEMEJLdDRub1g4YnZ4eFVqeXB6TDRZcVlHZmpSQi9RQjVKZ2tTKzhEd1MvWDF3Y1lLaTFlQ1NrQ0lnTFNwN2J6T1lrSHhkbTZvQnVqbXcweWd6a3hqM2xqSncycjhQd1krcm9uaGkza29aNXVNVzB5Vjd0TXUzZkxPVUNDU0dRVXRMZWw3UlJuTHdQMzNTRGhTVXpHWDhyKzB2RkhqT1VIdU0zbHBEUitiUDdCdWU0SEJNYjN2NmFSK3IyTTBveHd2TG9CTVRSZUEvcU8wbGFVSE4rYklTbld2U0NrQmk3eGlUeC9SeXl5dFV5Z0YvQkJyZ0NodWs0Qk5VQ0xyNERoNGE1Sk5OSk1la1JVSlBWWFR6ZU56Z0ZhVTQ5dndpSWlnWVloZVN1VXZjUmtyQTV2UFlCSTBiRGNZeFlSUW54Rjg1UHNUckJLUmNxS2pWWU54aGkraDdSQnJ4S0xzVldjU01YWlltQ3hMamk3Y3E5ZkRLQ1VDd3NDclRnTEZrbytQNFFSZ09nQi9qQy9yQStBQTV1QmFPd0Y4QWNDQXFFbUdqYXdKcGdTN2h0R1hTQi9mS0pKQU5sTlJSUld4NkVaTitEZGJqbENONGpCYnFIWFZvcHh6d1MrRW02TXY3MzRCVStIR0ZtT3R3WXc0c0ZPZk1IYUZUZ2pNbTRsandnSm0rM1dtOUVBcXlRZ0dPNFl1Q2hlaEszZDIwcmZ1QUFGdFI1QjRQZFNIN0g0SCtnUEFHN3FxOFBsQSt4cmpNNGlsY3o2V0R0aTZWRzBYTUQ4MmdjdWhHdyt4Z0EvOXVYQnFQUEtyR1JzUTBXQ2txTmd3TEp5RnEyZTlRUFFtenFmM0lScllSTHExYUFQa0lNYmpXOHc5bkxTb3g5V0VYT0g4K0wzeHA0TWpIOTlUZm52Q21mbGZnS2MyMFRXOGI0alh0RVExWG1YOFA2V01Cc1Z3SFpCM1c1ajdvQXRrQ01vQkVTVWdobEJTQkdjVzUveUd2WitrSjU4SVphM0YwTGVZRHdzVUxvYmo5alI3bmJDRWptZnRCYTBJcUI3Vml4aWt0a0xzYWpKVXZQRk9OZXoySlhMNUhkRGk0ZWxBWWNWUVNCQUVhd0t5RzV1RUlxQVFiTEFYbUFMY0I1SXNNVlNaUm85bVplUlFaWnMrZDdvMVJyc2NEUXl0QXllNlRtMm1RYzRvNlYvb28vN00wc3hBYXQ4MFlvanIvZGRNSVdlcmVFU01vZGFjSW8zMXMyeWh3U0EyUEdZaVJ0bkF4UGNsdjRCQ252ZERVOENXTTBJR0VSdHRnc0xiRVJHZUpoN05RK0ZQcUxuR0xaNlNtMEF5dFdFTkkrWFlzWjZBL0JBaFZDajlWaFNjR1B1TUFpQUNKOEg2R0RXTFpyYlJ3YnFRaGJCVCtVK0pka1pzajF3MmhiSVk3QU53QUQ4ZFVZYkZ5M2d5ZU9hV0llTkIvOHNtUUpVMTJyQVFiMk0zQ0lYZ3pIZklSR3N0ZWw2MWpkWG8vaW13WkRxVkpHNE5pK3pmNXQ3ZjRESzl2Wmk2R3MrSUR1WEdBNkFJTnpCTU9YOWpmR3IzTDkzSEpZVkNzbk52N0pxTDA4VTc3UlByU0VnaDBldHByY00yUXdsUE9DZE1LVUdpM0FjaWJWOW1xVU14Z2kzVmVnQXNYNXFReStzTXBUS3pFMHlDbWxwT2xEQVNnWXhpTGNIWW1SRXorb0I2M2JBUVIwRWpzMTdFM0kxdW5VWEQ3dFdVVDBNTURmTTJ6SXpYdTNSam4yOFBqQ2hXU2RvY0EydjBMUmRZTDNCVHNPVmxjTlZlWGJBTjdxMnQ2VVZKb1lBWTcva1BNU2VhL28rMExkREE1QmtOQmMvaEhETEJMSjU3MkpRTm9ZVHVWMnNrZmdJZVFZbnZCVlFQakpFSkJqRGZEQWd3TE0raDZXVEZlakc2a0lGKzR1QUZ4WVpFemI3QXlEdWI3bjJDeFJGYmdBMlpyUmEzTk0wbXBVdmdCM2pJZCswd0hFYWNEdjUwUlBiVDM1NUxHUXhId1Qyb0d0VEo0MU83b3h0NFhkU3JqVjhlS1lFZThDVzNNZ2lXeFdNVnRZcFNlYUtBbDNRNjdRY05nZnJJUTNNNVhJL2tCWldoRXZpK3BOT2FvZk92ckFYdDRXbDc3REt3Mnp1bER1ZWNIczNqSmhlRU9GbE5lU2ZyRVBWMWticlJmamlMMWVMMFRTQ3pKZWc1Y215YWF0VzFBUjVpNldlKzBNSmNEd2cvd2NFQlMvTzJZdjF0bkdNT00vM1JhK240UktUWkR3UVdBQUQyd3pqcjJneGdMVmpTaVZNakFXODB2cnZIdmJmbjFWVGJURHpWeU1SYmhaQzd3d1Faei9EWlpoTGFUeDFtS2c5R0tDbmtLQiswRFEwS1dDWnBneWw1MU8rMEdSQlZqSk5YQWRtQmtJRkE0L3BDbXdDZ0FoUTllaXF6QkFhMWVhbnZ2L3FxZjQ4L2wvSmpUOHZNUEpsMGZ3NjN3SXBIQnVGbUJSYzZZa0NoY090Y3pzeDNtQ1VFb3FibW9GMUhPRDNFekxqd2ZsNjFYZDBQSXJIa1RFQXlkeDhTc2dLbEh0MTAxMnNncnk5N01NTjExcXYrQldvQi9NR0I3TW9zS09xMllQOFQ0dnFCQ2pWTkhJQy9tSnU4c2xnSitTdlllc0FRQmF2SlBQcWtOTU1HSmxZK0c0Y0IzZGtPMEQ2NlViNGZrcFFmbFZzdWs2QW5SVTFyN3NhVHpYYjhhemI2a0U0TEYrWURTZFo4Z1VCWU45Z1Jld1l6bUhqQW5selhIRUN5R1BaNTB3Z25oTVJXc2FlSDJzNWdSMUFWWmJtdzcreGF2bGIxMGtQUUZ4dXFIVGJKdE9NaFVBc3NIK1B4WkxoRzJKOG5xNzhJeG4xMTZNZDBqUk9VOG1GaEV0dVQyejlzMEpsR1Fsby9yaVAwSG8wdjZJMUh2aE1zem01emlBVlV2ajVzMDQ4NHVxWEZ1akd3VGF3dXVXazFZTGxWWGhOaUF0MkJjNkVId1pTbHB3TkNja09BaTRpVy9CejNoSE9CQWErREE3TWYrVEpYT1h4eTZEOWM1WC84MlYrVU9iRm9ZbHNva2I1UVk0TzI4REVBNkJTTU16eXp2SExWb20vaENtd2hwRlp4VkJ1dThRQzY4MWFuQ1JDQXdGalB0RTF5eDRFSVZDYisxZXZMdWRGc3dMTUJpY2ZzUnd3Q0FBbFFCUDZBdmNNbWxhV2gxZEQ5TEZhc29NcktYUTRuQWRFaUlnaWlqQ0EvUDVhZlY1REVjMUE4bmRhWnJDUzJ0d2hmWWJ5QjFDcFRQd0dGMTVHT0lOTzA0UUZhTjVtay8vcHFvME9wLzFMT05QM1d6WVliSTUySnlUUS9ZaWpiTE5rSnBmU3RKUUJTMk1kdnVXeWVSb2RLbTFqOFZ6c21HNWdXTU5Dc2tEdVBXYVMyeHNQQTMwWGlHckcvWElSL0FPWW9nUE4rdUVXMW9WRDdFTGdCYTluOU9lblljdFdqR0tjZy9VVnJVMDQ5ck9hL252SE8xY3ZPMFVQK0RhY0w1UVhzSG4vOUhPZnBIZy9KRk5qbXVJdjRHMkoySEcxL1RVektUVjNEZkNNWnBQWTViYnVDZWUwMUh4dUNDTzZGcXJkVmNiT2NVQzJKSmczZTFtd1pZa01vQjFFamd1d2pCbWtpZ0JhWUdZMDV6SHJmVVJUdjNFcE9YSFczMTU4M0JVZVBPMkNZVDErWDdQa2hGZEFoSThYeFVqaVFuaDNOZ0x6aUVPMi9tRmVGcjd4cWhYa3I3NDl1TTBPb1FRdnNWN0xORW5aQTlxQ0ZiRWFjejFtSGl4bWZNeStWZVB0N09vRE9ZNDYwUEVmcXdNcXYzK3loR0Z3RWJYOCtRQ1crQXZhd2FqdjM0TFpPSEJOMnpVUnUzdExhUkF2WkJiTWhLbXd6Y3NhSThqRGpqZ1JDMTk3ZldmOFFJL3NLeXhDWHZ2bFltejcrbGp4YWkyTHpTUlpQcHZ4MGJmdExpL09BZS8xOXZzRVZYMnVCM0tOMjJ0WW0xMnRBVUhGMFRzd01KNjJ3dzNSUlY1OFdjOWtqdVpUcG1JcGtDNEJTWVRnUG5pYWlkbUwyQ2pRSzFiaUJHYW14ZDVBTHhOMTJpejhlUW1nSk1OS3BsVHZhbTBBVUxzQVk0Vll0aHhabXdKSSs3Uis0S3p2VDVMbHQ3c1hMdFEwbVo0bnZQQlBsaG1iejJaSStBTXJLVjZEWnJIaEZ2MUkwb0hLbVBRblZ3dGo3dGZpL3oydXpEZmJOb0FjNWcrVHZVYXhPa2haSkFBVENMWWx4WHh5V2ZpVytreklyRVZRQWZyYmpCNWFvSDh0Z0FVZ0lTQmQxZVI5WVhkbkxUd0ZHUFMyNThzVldKWUpnaktMSllvNFh3MFZWaFhBL2hwVmczZGNyOTBYY2dKMHFoaVJoOEUrV2lwVExqT0NTTmVvZHhzTmlkZ2JXOGxxdjhaaW80MFZwV05TeG9Qc1h0azZCSHpkKzJCeWdsSEIrU3ZBUWJhQkc0LzEzVWpUOUFYWmQ1TUlzQm1yZE5rSGJIaGtiOENiejlYTVZHMW94eW0zaHNzK1ZtakRDa0I3b0hNd0dyVGlmbm5CdDUzL2krdzh3SWZDNDViN3k4K28ySlFKWXB0MlBVQnFqb3ZFZmlFcTdDbklOdkNEdkFiOGkzMS9DZ3dNZW12NTB3T2hneXNBdm5KRzBBT1lMZDZYajJ6amo3bE1rTmpIbTFkYlFsbExrVjB4RG40YmRoa25tbytrdG1iZUZJbDVQb3NXUkM2UER2SlRFYzQyY21md0Q0N05xc010UjlTc3haUFh0MFVMRk5qRWZiTmFVTUlMNTlNajh1d0tvN3V5clhRRHkxL3lDQ2dTNWl6ZktRMWZCMGJBUTJiYzkyTXMwdG9STTFSdno2ZTFDZE01Z0ZMUnlxcjdtaWhOQXF3SGlTRDJOT09hMGk4M2FtcmY2a28wNTlsTnltUmVmcFpmZFZjQ2MzMExXd2tsK3VVZ3NVVS9hMU9zOVVrblBXbjlaWVQ5M3ljNkZOLy92TmpmN25udWVFd3R5QlpJYWNFdmxvVmRlTEhSb1QvNCtSZjhCYUtHdFJnTkJNdklDYnNCOTlmb2lJbVJiMDZVTlYvdC8vS08vN3doK0FZVHZpeERyU2E4N2M1RmFhM3dTUkhQZ0RCMnVHY0hmZXlvODdyeEF5Y2E5Vm9oZ2FuVXVvU1RQWkFnblNJQ0VZTmVDUVpaUUhsOU5hNlAvN1Q3ZzBjMjNSbGhzUkRmb1Z0S0VkeHhlajh3VWJOWUpJV2hSeWNCZUJsa2JSRXR2aDlZeDdYYy9JQjFRMjNSVjlRT21kUDZOdDhEMHArUi8yVTdGcCtIcEUxNDVFSmI4WkpjRzhaeHdTV1RLZGhmSzlRR1hxSHBGdjFtU0dEaFNzc01NcFNZeDBCaGgybmJVWERMQlhNd1poNEdjUVVSenpCbmNXQkxzWENubVRwLzBVVThjTGF3RDNpQzhEM1JjdGJiTFBSdG4yTlBhTGloU2pRUnFsV1E3RlFiNzl2U25aR3pkMWx6Y292M09oOWZGVUthdHZWNUNSTm5NTXhrcXNFRzY5Z0NYc1VPVHZ2UHJyc2dIYmErbnh3UC95NHo3TzNEQVdYUVFuMHBXNGJjL09xUnBVNTRsOVBSQ3I4d0F3ZW51TnNWMEF0cnVOS2pKNzRQVG40Vm9iRU1BVUV0OGY0YlJKT2ZKNzBXTDVyQXd5aEFLdXZkclptNWJYaTVMTU14N1dyNDlIUGJySHVaM1M1bGlMaXRvV1lkei8vazgzN0JVaGFrSURaQVZsdDgrRUVxTDcwa3pnR2lqVk5ESG4rVVpaMllDczlYc2wwMXRzVzgyVTZ3Yjk4TDY0NzgzZ2FRUm9tb1ZOaXhBOWduYmdtaWd4ZXZ2QnlHTmR2THRhejdlNUM5TzdZS2xGNkdUU2ZTMUsxdVpHdGhNdWltVlhPM3paR1h3QUF0T0cwNDNTNDRXSWkxNEFhQXkraEpUbWlqZGJVTlZGekhmbzdHU3hhOEdnYUNTL0V5a0pwcVlVZTBUdGdRTldzSGVPa2Qzd3FCdzQzVjlySkpBM0UwaEhvSGJQbTh4UXNadHJwdk9TenZrMmE2VUtNeHVqS0FZMEVpWUpCV0JrUGp6SzJjZXBLVkxLQkI4SzFyUU1wQ01kVS9iQi9iL3VCbnc5WUZ2M2hhdEpuRnNva0F4YzNCZVJmM3I5YnVSbmZ0ZHNhaVBuYmRCUXRSY284OEtMeDJRcE10dE9FUnJsb3dYSmFMNWZJcjRsdFc0Q2Y0S3lzUUJGYlR3dlZ4K200TlAwQWZaaEozUkIvSmZvbnRGNjVwRUN5Q1BBTTd5UTZkdklVSklkdU9yZGhXdUc4YlhvNCtkb2pIaVowbGJESTA2WlVUQUNjYWlDM2JDWVVrQTljQUN2TUdsL0pjR0tiSFFrVCtGeUhaRTJDTGJ6c1hodUdoU0o5MXBza2NCdVFlTVBxOXk0NkJ2WmVGRVR4dzA2SGp2TEIrRTdlUXdwa2ZnM0pHYXhYU3hEODZvY01ucVZDYys3SExPZDBYVEhQcVI1TEpLdllIRHhQMTB5Q0dZWUh6S29hZzVBKzFZUVVlcDhkZ1RCMytZZXZHTjdYSTczZGZ0amxBNmNxSk0wRlU2N0JLcDM1cjFldzYxYzhNdnNoNC9ZQ0JxTWxzQUNEbEVXQUF3dTQwODFWOW0ydzduOTcwcy9lMS9Cclg1bTZHbFJxTGdLMnA1b3dlK00zYVVsTkpGTFNhMVlEZUcrd0crVnZHWTc3SDNtQTBrS2Q1Z0ZWZml2WU1Uc3VFT3lLMW95M2hGUU9hZGZqVzJlM2JKQjZvZHdQSnJtSlZTbU9EYjZYUnZjQm5yYkNiblpYdzNXN1ZrQkdLN053STY3UUZvdEUxSzlBZElPTEhOaFY4L3pUaWpFMThiUEpIeUhsKzhET1NadmtiM3FUWitYQnF0WUJHcHcvOE5aN1AweGtIMlhrL0wxaDNYdzZqRU5OKzA1N0pOblFreFlnNkdCblFBWTQzYTJmYStiMTF4VUYyRFhZQVVOcDUzcExWOTNkZjF0V2VkdDFoVzREeFk3NE5Pc01OSUl3ZmJubldoQldQQmdRUWVBUG9GZFpSbXBqelRTa09uU2xVMU5nc1A1QUE2MWd0SzhiSE5FbHJWcGVsL3pCaFJuZHIwaDU4QU5wbldYbC85L1pLWEhqWWVLb1ZyeFd0SVFpMXNCZWdZNmc3b29BT2dUZGZkTk91Tml6OWFjUTlsQjFVYlR2TEJ6RUFoMkM1WHl2VjU3N2ErQldaRG1zUGRidG14Z1BtdHFBWjdaOEJqMTlWOG10MUNBb2dvOXNGMnJibWE2UTVQMTRJMGJqejA0Q2N2Ryt5cHZnQnRYOEZEV1Q1Z0w0MW9HR1ByL3VZcWJxdFM3N05lZWRXT2c3SWZQbjEvcXJ4aDROYzhEbFBISVlEcG9Ib3ozUURLc0pxdXRSZ2pNZUluVld0cHBRTmt0aGlubm41K1Z3NEJUdVJXQXVjckNKcXRCTjErVTVoRW00Y0IyQVBMTjZtM0tnQ3FMNHFVN2NGNFNpSVVVQnpubGUyNnY3cmpyVndwdE92SWp0dXlmZzdzWGpnZURBR3VHM2g2N0NqdU9SaU5RTzBZdXNaMDM3N2hqZGNXQ0tNMU1RczdSYTRLL2NGYUNHYmdxS1RHTFRVWWJGSTlRYkZma2lWN1BDSm9DTkVyL0ZKZk1LS0Y1YWRsMElKMlV0Y29ETkxPbStLYWk1ejZhY0ZIWHNOOWJlYnhYak10T01DOGNMNTdkSHQ5V1Ezd29VVHNjcGpXZXNJVzJQdlFPb0wwN1ZNY3RwbWpwRzBmQVQrRDdSZldlVXdpWUFYZWh4SzBGS0hKdGNMa05tcWVTcXc5djFBbEY0N3lScXV4a2hOTjR4Z2Vid3NPZWlYK05mRFVxNVRwZXRiUGpaajNlV3lsZWt0UDZsRmdzSEh4aExpOXhPMkJVbi9KckxQQXd3aityb0txQjV1R1JkbW5oUjBoSDNvOTRWZi9MYWp2bmdBMXRlNU5tOUplaUpNdC9sSWEvVlEvZmJXZFR1TUJ2Q1Y5T1dnTUVRdWI5dGcrOGJUc3N2UnhnUXc5T24vS0Z6RGZIMDJ3anpzdHVrbnM1cXNYeEJrOFg3N0FQb053WjRpZzQxRHY5QWZxNHJpWmx0ZkVISkkzRGo1aW1aaldEU2d4Wk5QQjhrN2VVd2I2TjVrODNFQzlKN1lKdGJpVGxjMXhMYmpFY1RYQ29ieUxITjJtelY1T3VUT01sSjlYNXoyR0pRVDI0aEFBV01rQ2JMQ0RvQVp0aW9DSm0wMjRRRnZsMk5xRElhRlU0c01qZ2Nvd21aVjkzVXlOTHhVc0RTam4vQTlnTkVlUno1eC9SOCtNalY0amhWd0JFMjI5UWw2SElUUHVRZ1RtdlNnN1RFdWx1T0VrdW9uQUQ1WUhQL1FyVjV6aEF2Q2JEdytBVHhaN2k3RXdqd0NjREFlZWw1bk5mUU9sNzJXTlZ2TEhuVzIzampqNTVRU1NERG1OcGlLcktlNjZnUjBiTGxCK09FcUJnaDVKSk42RTlNQTZkYXdMV014V0ZjZ0JzWTgzRmErTjF3K1pBYmJOTHVXNmJOQ0xDNThWYlpRcWpxSkI1Y0hBZ0syaHcxZ3R5WWt1Z3Y1c1pxa1Q4RU1PajA2U0F5aTRKZ05pOWJnUXhubEFrbkFOQkNMRzFBdjl1aklHUkR4dXdMaS9xSHp4K1kxYVIwUGorMHpQbFVuMnc2a1FPb1RwdlBESkp0WTBYMXR5eGZnbmNYQ09FenRnSXNBSzlIM2ZxclJDN29oY1IvVituNThiTWFCUUwrZUlGbllwMjhyYXdzNkFHb0xxNDhWQW9kZldscjlFdExIUzFoNitKMUY1Z2J2djRpRGRERGJBUzl6U0hZeXNrN29BQkFIckFBVnhjOXo5UkhOSzRNVnl3dHdHTUVVQjI0ZkszU2Z5VWgvWFZONmJ6RDJ4NVhHTDBMQUNseG4ySkpWYTVoYXMwcnJWM1J6NmwzLzdjdkcwSEw5Ynk1NS9mT2EvNzlkOHZxdkh2UC96U1d2Ly8yYnM3eW9JaVEwWUc1dmErS0UwaWY2a0g0TGVUY2NuM0ZJSno4c2crejMrSS9ML0N5SGN4Qit0c01zcGUyK01QZWdudmZmNElCVHUzejkrOWNOSHYwWEwydWRKT1lGTmQ2SW81MVV1ZjFvMTdMTTlBdVhRMXVnWkpnaWZDZFcwTUxuUGord0lod3BoMm84aEhXd1pPOVRGRzFtMUNUb2gwUVR1RFdyTnN2VjNtMFBLZmJ3WE4rK0tCenhySzRab0daVnNEVWVEN3V3d3B3T3ZVR1o0SkhMa25qMFJraHM2T2I2Yk9iN3JIVUdXNVNCWmRoV2d6Vjc5RHNlYXhzVS9PSXgzVlp5Ykl0aGI5dUJIUDBSc0RtZkk1UXNxMzd0K2Zxd3pSbHNpRU5FeFpKOWF2MTVMSVFBRGZNMVRNb0NobXJQN0NmQUFuNkdtZGpFNmJTRDFDOHNhSWZEdEZRQ2pPMFdqanREN3hqT043ekxyakhML1lKeE5TY2c3UURnZHZyTTUydzE1MDdBQ1pwZ0ZPV0hDc091b2cycmVPelA4SDg1MVpyUkJ1cGttZlZuZGFMZjFDZERPNUZLeUkzSjB1L2t0aTRXQzRNSjd0cXdTQ2lDcHNkd2RMRjB5ZGk1ZnZmT1Bwd3pZWkJBOFFrSXlDNGwyeUFDSGlHWXA1MW45bHEzbFg3Y0VrTXB4YlFxeGdkN1RxT0ZKWHF1ejBrZm1kR0VBZHoxY01ySG1Ed3NITjZQaXVUdTlwOUNXTVR4dzJWRDdTUEdaanl1WlJVR0Z5aXAyYXcxOEFNQnAxS0JSMUJFeGZDYlZpQTQ2ME1PdFV3YWhWT2ZHNXpmeGc0bm96YVc0UzRuN1NRTEd1eFVqK0FzYlBOdFJRcStyRDN3NHl2Y2dvcVN3UWE4VGNUeDV6OFZvM3NzaWRadFlNT3hwSC85emZPNkc5WEpmQUJyS09kNisyazZaWXNGS2pmN0J2QzBWdWl6TXNRYVZZQThrRWFpMUUrdi95ZmEzV0JPbU9TTFR6eTdDRS84ZURVVGRJb2pxTW5tODQ0b2djNWliYUJCNXlYc2FmOEZQZ1hRQjVKdXhyVGdDcEs3NUx5T2poOWErOHJZb3duS2YvS3AxRWdXUHljdUVSMWpneHFuV0V5ekJPZENEV3ZZY1U3ZzlUd2gzUlUrTEZWMlROYUZsQ2MyNjh1SHFZSWRkRitESFoyK0g4QUdqSlljdW1tRkRSNThkaE9pZmhWRDRyZ1pOSW1kWEpkUkloTVFvSmlOWEgydnBEbmV6cjU2NFg0cVYwOGpBNmFkV2NXK3JGU2NGS2dERFk1WG04NDhLdG1vMzlkT0k5ZDJMZyt5REw4UW0yMk1VMWI5VDIydGc1ekEzTnpsRG1YUDArQTJzSm1RS0d1ODlycDBxOUFqT09aR0pleTdHTUFnZUpEQk1yRzNSb0RYV2M2RjNmT2t1azl4Mk5yUG1UbGtyUkZZNW5MU2hma3RMckRoZjFnaVVLdzlybzRjYWxoRzdNOHdDZ1FZU2grNkQyMWgvZXhiQ2ZZSll0Yy9jeUFYYUJMLzBFOVMxcENWTHNGYXRXTE96NVJEd1ZhY1VZZjlPZldkSWc2elFRc0FyN2tyZ0lRU3gzVmluTEZZQ2RydlZjbzlmRzNjdUhNRTZzTVhpZ0d0WkFWQWZENlFyejBzNjdTUGFLakdyOVF6WFRhclpYWUJPOEp0UnNDMmQyZmcyYTE4UTFidGVVZ2RDV2RKNFZDQWJYOFkyeGttcnFaTjJQWTBUMlMveUJtN0J1RjdEeDU2TjRza1E4NmlWTVN1MktqRm4vZG9MTEp4TmlObnA2TXBuNVNNYzBDUWJKaHFzTGJ2a043cWFLVDFhODBGOVpuWVBKTTVXalZkbWlIaG5aOXZNZVBud2xNYmlNYlpjbjJQeXdRZTc0a3ZOblE1MnNuK081M1FjVnRZQXNjRWFwNHNjajJ6dzZ4emN6aUYweGpPYXcvUktkQVA5SjZqeXBOWTUyVTMxUWpsUWNTeFRyRWt5M3B1NzIrRjZQUHNXakQ4VHJsN0xTWnJ0eE4ySHJqdGRhZmpEOHcvcnoyanRWSGR5SEoyaGw5dXpuY0tSVUxmVDVrOWhuangyZnV4YlBpWmhnNmM2d1ZkLy9uWGVpcWJIY1ZoNGVkbi93WDZvYklIKytiTFk1UHhkNHZwSFhoMWhpZ2FIclZjMDBMQ25pOVhKbUVMTS90dWJMTGJPM1Izakk4aW5aNitrbk95N3V4a3BGaDRHMkFKQmlvNGQrcEdxODZPTDltUlBkWTJDWmNQVUFwc3hySWo3TkRLWUVrR1BoZGJiVkhyTklyOXZwRnJwdllhY3NDbFlBWlJaQnplWllrUUpwZGZ4dGp3NmdnWHBEU2JjSXhBR2tHV3lRTWNFMGJXR1VkTGlldDJMeUsvcVpyRFIvaXZIdDlqZDRXRGVWdkNzaHl5ZGhlbkZqcVdZdHNEOENDMkdhWTc3YWVQMGJHTUZpZmFBWXh3d0huMjlTVEZ5akkyUXpTdlJhWld0Rm5aQ1dNNENWVWJIeHpYTi9NTkkzMnpOWHhzMVQ0ekcvakJidW5tbGM0d1A3dVRMYUZ3N2hsTDU1N2ozblNNZkF0RFllVXNpejgveTU5NTlPZU1UMFRScTJsQVRFbTRGbzZuSTF5aE8yL3FQVW1KOVN3c216MkdUa2VDN1V3c05zNGpXcnlhTFVhU3o4Q0Y3REdjSnJYTGQ3R3BBZEVjZkJpY0JTYkFlN0NyOTJtQmdKRGd6c3prRE16WXNsckRNa3pZQ2lKdWxHd1lZYWpXS0Y3UjhaTnZTaE5ZWkRML054Y3lzcW42S0EwbHBGdWRuZlo4bmdHZ2IzUk9TdnVnYXhqak1IckFGa0pGNFd1MzAvdk1pZ0tnSDZqcVowc00ybXdyOEdPc3pDNzFZVkwyc2ZZcjVJN1cyNVhpNEZvTWZKLzlzby9Ib1c3UStmS2NXQUsySG5nRkZIbzZjbXJMUzNSaURBYnZVRFU4OEl2QnNzRFRFR2VWUXUvMlh2OSsxNmM1akxLT3YvYzhmWWJtWS95WGovNzZzdjc2OEh1dDk5ZFcvMTkrMm9vMm0yWWNzMkUyMFhtOHVNOTlPOVJnUkl4TGV4elhZbkVGRmc4bnNqNGhweVhiKzFFTllBc1pmeUJCZk1kVXV2bGpPa3V0bWpVQnlpS214Y0ZmcjlXYVZlTDMzZFZxSmRDUVBQcUhqZUtmUk1GcGRCSENHN2RhemFoc01xQUVORWgvbWltNjRjaHBFZ29keHVVMWg4bzR0Z3RiYXhjTUxtVmJ4QnJBUnN2ZWRXY1VtVmQwMUlkd3pFbHNnRmZuV1h3dmJKZzFTaFp4T25vRFZjZHZPNW5GMnVRSFk1ZjRGNVE0ZEllMTJnem5GSVc3Q2cyUkhUNnpiS2kzY3ZlN09tNmt4dGpkVkV3Rk5sYWh0b1J4Vmt5aXFmZmRINU5od0JVd3kwUUhUdkI0MkMyQnA4cjJaMktQQnR1R0dSeU90SUx5eDlNeVBIL1ZNL3V6RUZLSkY5Q2VOdlAzaHkvdE1NZ3NPOHNhdXBQYS9vemsrWDNpei9lZnZ5N1gvMzQ1bkVMOTE3djU3Yi91ZGYxdTl1OFgrM096WVp2Nys0QTV3Vm80R0lDNWZ0WUpldXUwQUpuUVFjRGJudGVmQldubHY3amQvKzNMT1hYcE1tZ0pLbUdsTFRIRkJtbGZJVWFmVW9WWGhoWENYOTd6OWRhSHhjdERhaGxQL05GUkRUZ3QwL1NuZytZM1hYU1YrMDlsSms5d2lza1EwMU95akhNM0R2NENjRWM2VVQ0SDU1bjNodUZhSHhGUTJwRk8yV2h6dUZKQ21VQjNUbHZxanJMVTRSekFQN3M1cVpNTWdQMCsvVFBiWnJldmRSdzM4RHBldTZYdHVCSHMyRDZyMCtkWmZOdEsvenpzNzFGdDFYUFNiOVJsT2k4UWQvUmFaZmZZZkYydVV1dVlaM3pVdkUrelROb0NNajAyUy9Ic3JrNTd5QU5vQlB5NW5hV0tBWWRBUk4xVy9jZmNFNUQvZno0SnBOc2hLZEVaK2RCdWEzdUxJZG9jMFhWbllCUTBKRm4zWkozS1owOTV1OEJMdnF3ZUlyNGlIaTlvbThuRWJ5WlRKM3pNTmlWOFcwTmc3RVpYZEVhTXpaejN3Tm9Laks1b2JNRkptTmIrUCtBU3A1YzBwMDNNRklVV2svZm9qNjIxMVhHNElRR1FNVEh4VkduZzI0ZTlmV1ZjajhQRUJ0cGxGQmlvYU9VOGZqOWhrbk1GYTRyTnkraHloZDEyY1p6U0ZCa2tFQjdvdEk2WXVnMjBsNjFWM1NZQ1BuMU0xWTBuZXV4bTQ0a2l2aWZ3b25EMTNjTnJ0UGdkQ2JyanF0NE9jVmI2TUV0ZnZZenpucTZ6eHlwSFVLajFuZWNnQ2V4S2tIL2IwZFFCR2RaSlllMTRUSStYZURCM0Q4NFhSODRTTFZURWRBQU95RWpseDRJRGNhM3NjOXpGc24rVEpjTTNkU0hDVmdhMHo4dVNRRzdzU0lSL3pDZkhIVG1rQ2NDNUNqemV3WWZnRjRVa0d2QTNiZUhJamZBNndoaDhVUjF1QnIyMFFMSTFnS1V6WCsxcnR1M00rbDdBbzUxcnhyMlg0UkNibzFhUmtiWHhxNlJ3dHgzZmhDMVpqcmJzTnQwNm1yVFpKaDB1eHgrRWhIOEZJSUlDYjhlNkdNazRKWW94T3hrSE1IVWI0clJyYWN2R3JCaDZQV2pEZ24wVERFajhoWVlYNmJNSldyTVlDM0wxOEdKcERJY0JZYmQvTTZET2ZJL2JRVnBPWWdOUVNIWVY3d2VaMzIxZGRhK1RSbmVrS3B3ak8vZDFPRVlrdm80RGRoaitHY0UwbnJ1eXVHYzJGb0RTc3JFNzlacWxXT1djd3ZEdW5PWTRNeXV6Zy9HQmF3cmk0OXptTTRoa2xGL2hub2JVbUlVc0h3UGd6Q3pUU2hpQ0JkRy8wRWhRSE5UVnVUWkNuTGFQVmV2NnVYUTdadjZNZVYrMnpmSVNvaGRyWVZ0M0lJS2xhckJLUU9qRjdqZHNlL0pKSC9reDkrbmpjZHpjdG9LRjFUZVNid0dVbHNpQUZBcjhtQ09icG9ZN3RBY29FQzZQNG5BNmh1VU1wMVJTWkF1MS9aVk12R2N5N2VucmQ5YVZPZW5sK1EvUVFoN3RwSHM2M2hZNVlkZnMzT2UvWmJNaVVtU2dXQzREL012Um1qaUhYNkQzMzRrcjZWSk1YclpTTEZnSzFpc2lzN2tEajQwN09rd2hPQml1UUh2Q3llTTVvVUxzYW5IYVlndWRGdkJ0M1FKN0trVnZUdGlTK0ZsMnM2NWRtMDAxd1JqUDVIbWR2TXVsM3BNYmcwQTUzVzdBT0RxSVk5b0xFZ3pXTEh2Y3NqSzZNekFBOGJvOHJXR2lYc1ZoUGdrRWJsMHdHSUdmZXUzOUErdEg1MjFpRHI1cDgyTXBnaEVicE8xU2JiYVBhZ0l1UHBIbk5LWGNuUC8rQXZkWlVaT1EyUTU5RkhhaDNFdTM3YnlRVkxjUTBLNEpHTnhmWTZzUXlQYzR4WDhiWFNVN05nQjVCOGRRMkJ6Q2wxOVgzY3dvUHRFQ0IxOCtRVTIzU1piM1FsOHcrc1d1SjI5bkhhd1RtQ3Mrb1RrWTM5Nlphbitla1JoZHExMzlheGd5ZlMzeVAyVk1kN292MFZabDI1MjZaZ3NORXE4WXY2ZmRhVGszeHZPRndxL0JIcVlFN0YvUm1oU25POTlHZmZjSm4xeG85d2VOK0R5eUJXenMzTXR6cHNpWG5taVJxWjBrMlJkeXRONi9KSU50NFBubjlLcnJIK09yVEtEQ0dUTmNaN0c1RGljMC9HWHp0T2MxRkN2MStNNjJKZ1pQd1FaOFR0UnhJalFPTWJXckJBczZZTVBmVi9LMFlRN1NaOVExc3owUTRyVTEzcGJPSWsvd1hTRVFLMnByRXR1S3ltcEUwYXpMbWNlbWltNk1xSFBRVVN4Vzg4WHJZYXUxTmRHT3U1NHpNb0IyczhBc1ZySGJHR3hnLy9oSTR3TTJYL3pFYmdXS2R1YnpXbklML3d3NHJYTEdMNy9Bc0FhWUZacGhvOGF0TU5ZRFpYRzJSbEVRUGxCTHV4eTFaVzh5WkhwYlhWeFEvU0JjeXBhL3MvK3NpaTBzRStWenFJbmlzazlTeldCeGMyZzRPajQzMEs4dHkrbnRHSnlXN3o3T3VMVHpGbEtDSlBkamRyR1k4ajBFRmtwNFc4Z1c3UzB2ZGpWYTd2YU9LNVpzbDUvbGx1WmJMVnBIc09wdnN1RnRkR0hnWXZDZEd2Y1puWmRUbkl5UTYzSTlUd0pOWUFpbi9aTzZPeGxkMFVOVU1SMGE0dWtWUnRxR0V3YWhxb2diemdRRDVLRHc0V3d4NEpLalZEd201REswLzFpdENUTTFodWY4VjR3R3JBVHFZRDdFNmdOKzJxa2dIbjZ3OW01TlAyREdIblZQSXpqTE9WOUdjd1ZheGM0c1h1ak1WaXlDWVhTV2wxL09tNjFPbHd6bU1UM0lZMkp0YnE0TWppcFlhUnM3Vzd5U0pjd1dlM2dTVDdkZHhxNlp6d0pCNTc4NzJEZWx6MktVN3FCb1c1Ujl3QVlROFpBSmpicnp2TDdMN3A3SE1qOXIvZTFZemM1dEJrTHdBamR3eEc1ZTRLVGRjZmZuREJSNzI3TnMxK2trZ0tsbEZ0U29INUxvZEhlWVBVNDBPZXI2WG83ZDRvR3FJNVFNNnpsVnhsWk9BRldRaGo5dnFnNmpBc0tNQVo1QkNLOGNxMVdqeDhyWkxmSXRwL0tpQU9PTWREemFuZnA2MGpUZ21BcVFvempVeXFiRktEY280NFRqcjdnZE5aUkFqc2FoOENHYU5SdjM3UFczMHZhY0t1QUV5Uks1UGU4ZUhndlBEWE8vNGJSNG5ua1dGMGlNYStOYnk0QjB6MTJ0ck5tMm56c2tKWmorQjNJNXU5NmhQOWlNZGlZdUE4R3JVME9BQVRycVdmQnI0Y25HK2ZjNlJYK2FmRmJsekFGd2hEbDY1VVNvOGZvc3phbGMxZW5IajUyY0Uvdm5SdkNDa0pyUFNhTGRDYjIydy9NR3dlZ2g3QmRXL3N5RkZZcVpKV3ZsMXJ3NnRON0RFU0FhcUtiOXBJK1R0dU80VGtsalBpTnRlWFVIRVJTN2tzNEc4TXI5eklYVVRPOVR5K0dFdDJLMytQSzRCWUJJZXZGdjBJUExlcGQ1NnRpc3BrQUZzeGwyRzNpVDRjVjB5cDFCeUtjMXJoZWJHQjlyMkVHK2lBWXdydDVuY1AzRmF0ZzZjc1RaZXEwajBGYk1taWRxdi9USmc1Zi9qWjArRVlwZEJ5YkMzcHUvNmNBRk5NaE9ybkFvTzk4WTlVRnA1Nit0KyszaHN4MzgzeTU1M01XLy9CVDdmdjFUcUo3M0RoV2M4WnRmWXJGci8vZEw1cDlYL3R2UDhQUU94NTdyT20yVCswYWRzUnRTYXRERnVqMW1BU2NkMituelg4dEoxckZnWHUvOHBqUE80SFpHbmJPajJqaHZlUDF6WFg3dktFUDlQZS8vN1BtdWYzM0FmenhmQkF5MVZSeW0rOEFUKzJ0YWJqdkl5bXJoUTF5emhXVDNoSGdIZSs4dkovYWw5MCtiMTlFV0RHaG9XSC9rZStVemdqd0Fkb0tSR25iOUhJanpyQytmU2pxTGFDTlE5SmtYWnFaRkIvc3VvOVZuTXZqNDRFZXh2dG5vZkxVa3NaME9pZ2VOeEZuRFJEeTJCMzY2ZktMNkZ1Ti9PTWh6Um9VejFWeWFOTmc3UU8vZVRwNWo5ZTFYckxhaW53cHBpRVVEbmo4TldqcjBmYzE0Q2N2M1hhdlZYNXYwOTF0SUNhN3pVREl3ZHd0T1FBZ1RrUWQvWVdxRFhadllrOWNSQm1VN1IvZ0k2YzBhbVd0NURFenY0VFN6d0NxaXN0WWJCdE4vTm9FTmNVWFZ2d1duckdFZnYzNDdGTlFSY0o0MDhhNXdkWTg2K3V4ZjhBWE9tRnZMVm5mdytKM3Q2ejZPdkhNMmNYVjJKWllFWUx1YUNuZU9IOWluRmlWZmxxUGFUSHhPZkxOMUlOakNid0lFUGJmMGZ2eDY1K0IybUNzc2tvWFJ4ZXBRNCsxR3c5S1JLL3Y3djl1aEl5ZmJ5czlaQldqZm9xTVpyQzJ3V1QyZlV5YUgxWFZPLy84emF1V2NKWlp4cGUwdDhiSVl4a2s1M1FtNU5pVG96VjRqTTdnQThlOVg4Ni95b1FBcU1xK0Rld0wwSlBzRXVBTmMrbkd3OThVS2VKbHQ3UUUzUDRPeHN6ZCtrNGVzeE40aG1DRjNZenJkb3NqOGNadnhXRnp1WEliang1RDBxenZHY3o4bmlLSHZyVGJtWkxQaWJNd1pNbXF6VGdkYW9uUUJSdW5vM2Y0NlhkSnVtbkRuQ2NWdFRxdCt6VkRKSGVNYWhqeUJkZmFtT0VqUUdDOEtnVm0rMjdiY2FscUNPVTVlRURmYThSUEd3aGNvK0tyMXpJYVlRcVRtQ0lPMnh1TkpLZklLbTVReEl1MWRIdGpscVZGRzBJeS9BL0tjTXhWQ2RneUVzUkdXWVkxaUF5dEs0OFFBNTQyYkM3WUxZTnRKNkltWXpkUFdLamltQzEwZGlyZXNLM0RlM2tuSXdXblptTmRZemF0QnhzRkJHQjE5WlFlM2pYek9Gc1dGaFhQZ21BSFdSekRrbE9wcS80NVRCVjdJU2djZTR6bFhPeHJ5Wi9TdXAydkFkeE9BRU40SWJ1RkMvT2NjRFFkY1BMMm1hdU5wSHBaUVlRWHFQblgrc05nejZXZTlEalRCdkw0T0VKbFEvV1dCOTdaSFBEbnUxUW1tQTlLUDZRQUNkdFlEYWNKcHJRZXBnRUpnOUFLSUpUc1haTThITjdsZ0pVOWU2RFk0eTVZK2JMVEhVRFJQV3pLR0hIakd4M0pwUWZaMndCaWtKanRFYm4zT3piYkg3QTdiNEpQUkZkVFc3cmxselpxSnc1RnN0RHZiOThEWlBCT3c1V2p5MzlOVjJEVTczTGVueGxodzRpR3NPem56RnZBeUVCM256TmdEYzN1Y1hDLy9NZ3Zid3FZeS92VFRycitaczV6Ly9xMS8vYzRabW1uYTBJSFl3K0Y0UzlTUXpubHNGakpWcURrZ3k1NDlKMzRqMS9FYzFWTnRRUnVucmdZaFRzbngwSmJjSUFqYjNyTFZGcDdmOGV6RGFjVDFnajBEOG5KMElNWXBiYkpMNVQwWmlQa2pkdUNrLys3ckczUUtDYXM5Tm9jcHNKbzVRSjZxYzJaYXNNRTZ6M040MFd0SU5XRzduajRkNjNwbVROczBkUXBJbXhYL0FHOGUrWWtYRnN5dzhUWTFmbHNOOWo5OHBtS2ZmQndEbXJXT3EwcTFTcThmRUplZUZ4S0FaUTZ2aFl5ZkI5dkJBWmI3MW9LVkFsOHpjT3RKVFhaNVBFNFp4b1JYNnlLQTBtMUQwVzB5ZDZiU2lTTFhYMlRZczI0TVVuaTRubU1oNDVsWWdwTjBydkNKdStWd3JZVjdtVmJvTzlvUjhaaXY0WVBxcUJjd045dDRuai8vNmEvL0RRYTNtZXNjOTJVbTZNaEx2STY0SEdGaDFmNHBTUEhmdmk1OTNicXFmQkQvYTBHRFZZdFdtc0FFZXJ5SzNTZ0E4d3E3M3NYSTJGcWVCd0J5SEE3L2RDWXpiTTA1ZG5Za3hOcUNuaU9ZK1JlZFA1S2hDSVc0TmRyc1dMSVlmOGsxazNOajJWL0RpY01tdkEvVzBJMktuS21yd1ZybjRyRmNGbEk0SWVXazFhLy9OcS91bVhiMllldTRVWWN6a0FvRzRsUVV5UFAwRUtVQldoU000OFB5SmZDK25VeGdCYmZSUUtlZ3JlbjhTNk9aZzgxM3FMZVZMdnM5YzZzdDA5SmFhRS9EbTlGOVF3WVhNS01EVENRUWNMSnVJSEtoaFBtdVRsVi9uQ051QjJIOW5ML0V6MGhMMGpuQXprSG9BLzU5ZzRiZ0ltd2hPM1huQXVwbzVuMC9SMTZCTlp3VU5rMEdkU25lNjd3TFJKQTEzQVpyc0VpR3J6M2lZSUFzYzRjYzgzT21ML3M5U21HM3BtY3VuQnBtMkxWSUJhdmxxWmlJUEk2U0hmSGNTS2crVHN5bXJWR0h1WWpud29BQmNZemRMTlNnVFV3OHJnL28rUzRMOFo3SHR1bmkzTnhzTyszbm9CZ2I3eXdaYm5mQlRCZWpwL0IrVEthbkFWVHJoTE4xRS9HYzNnT2d2SGZGY0g5R0hFQmlXRldMV0lZRDQ3ZERNTG4xNjdsTnNFN2VCRjJ6dkIrSGV0Y0tCbkcwZVA4OHhJN25OR2NUbjJkWVovZm55Q3VQd29IUy9zN0lhcmdvdytYaEhKeUVxN0gvKzNNTXR1ZXdObWUwNEM3UllLUm9mUlVid1NXZFUrUVl6SEp5TGE5aHlBekJCZTE0RWtPdWwzUEhXN1dYd25sdHJPOEh0a2FlbllrbGxQdHpHaU9nRVE3eDA3eFBMTzNRaG5lZHpqbFk1MFQ3YjRQbU94NmxnZi85YjM3VW9IWTk4WVRxSkpYaWFXZkJUbmRXMU1DNFUrNnNuSmJtZTlBZGd2NzhBTldOdEpuZ0c4bE1DVnpkbXdIdEhBRXp6bEdScTZEWW9ER25ERGY3MHhNd3FZS1FuRFg3SENMdHlOSzdmZFhUT3owNTljeDNRZnJyY0R5RGRyTEFMSUQ3RGxENUtydW14SnlJaVpUSHMxODhaUS9rN2FHNHcrSCt3U0ZMOFQ3Qmxwb2R2Z2VLVjU1UGR2QnJUcXF6VzB4bzRQUzY0Y1JGRDBldFFLSzZQQ1BTOFN4ZHN1eXI4azlBaFZVL3ozMGFBVHlmMDdwNGJFbnY3VHFKRjlDbGcyYVZpZWloNVpDOVIrb3ZCN0RCQW9kUTdIQW8vVlFhMjBKbDFROG0wSEdKU04xYkFLTnJuek1ub0dCQi9adU8vQm92YkJzRGFrMmRaNTNZbG92aVBBR2kxUDNCZGViVm9qT2V3NGJKYTVmcC9qcks0MFFLWE16ekxEM2RFZ2tKMnUzYVQvWXpkclBsWUdnd0ZKL0pmNTEzV3IrVCsyK1hkWUgzT2RySEJLNVJUTXUxcW9uaVlEdExZVjJBTnBESUkySi9CQXhrekZZYmN3ZGwyaUNZRWNoVHNXODk4ZkFvd0hsS1psNm5IamhRRTJWemlwNTl5UkNkZld1dHYyakY3ajZObk5PQmRaQ3Zqb1hzdjRraHk5RVA2VitWd29nL01CYnoyNm9IbW9KYVdjRURuVzE1bFgwWDV6eDdDb01UYjA2eDJZdXVCeVVWTTJ3MHhWTnVZckFGclZycDQ2a3RrQWZyR2YvMmlrZUhqZ1pkOXpsQ3B0V0Q2SXNUS29LWml2dmJ4VGtZY1hoZ0FZVFVIdXZYOGRlNWVBNFpodFVVK3R4V2lHREIzOHVXQkNkdzJXdDc2di96TDBiQzR0WlFmMlhwMzUvM3p2aVArRHBrT0dJYllybmxaZjEwSHEvTGcyWFFWQ2ZRVEg0WXhGcXNUNDIvbmhZYzFmcmZYZnJrcllLRDA2OGwrTFp0QVJpTU9GcmRoam1ZeDQ5NTJOQTU2UTYvRmZSWDVvdXR6RVB6RFZ4Q0FZUHRPaWJBTDMyQ2dTZURqWTZiRHg0UGdHTENjczdad0k3QWZEenBHTFY1MDFoMnVLZmJ3ZmJ2OGEzZ1c2aFdIRmM5N1dhbWRPWHlSVnhjelMzb2Y3Y1ZFY09od0NhMUM0N0trNUE5Wm1NYmdCcWVWWHNMdWt5d09ISVhMQ243aTZiY1BxY3RHdE1zUVVwMFRpbHFKNmQ1bzMybUl4OG5WNWFENWhIK2FJTnptUFA2cFNvRmFzSDB0Tk9mMDJEOWxxTjNuZEViNHpyVG1jMnN0VE9ZelVEZjQ0bW96aDdwSnkzem9tdmpOdDFqcVdKeGlxT2xNL3lZODFNcUsvVUFwUjJtV1crUHV3UkhGRHRjQUJrdGdmZGU1eUszUC9OcWVVaVk4TW5Rek5TZEMyU2UrSDR3QUx1ZVNQR011OGJrTWI3WkRCZU91bnFlRk16UU10MTRDbUcrQ3dkV0grY0N2bVUxc0E5NDJuNWJ6MzUxdk1BNlkxdzgwZXh4TGsvK2RWTThmODdWd3NCdFQ2NEJkRjFXVE51UTcvR0FyTE9UL2ZjNUhPWjh0QjYzUEpvbm9Kd0lUc0M3cjRvcmk1NTYrcDFScXg3TW1PRDlWckZBUUowWGpiZXlpTC84VFMwOS8vdUZCTWZtYVFwT2RUUUVacU9EU2Z1VEVUeERVQzlNakdiWmVRZkl5RzBGblFPbUhIYTBUenF0NU44NVB0WmRGYWVzMjBING4vcC82VUtkby9DZHZQM2ZLODNmWnZBV1JITGFCVDNsN1UzNHhWb2RURkE4M3ZKek9Qbjc0ZyszWi9ud285cEtlSWhkM2s2VUN3NTl5MGlRMjQzOFZLTXIwMk5Wc0g4blR2U2UwN1doQ2oxWURjb25ybmhxVFpEa1UzblRuWjU0c3lMb3dMelBJUU9qMlc2SkVFOG5LTnA4YjNHeUliYnlPRGtaaGdEb1NKY05MdGFQV1RtMmh2UGhrc2ZrZ2FFZmg4TUhKNWEvbmdyNjJnemRuTzJwTDNMNnFSV1lucldCdkVIWDM5Zmp3OFR4ai9OOCtSbW5PK0NJZGFaVzdLN29zTTl1L1E0Tyt3WjJPM3I4T2NWeWVBQjJhRHBNNERvaEZBQzUrR1U2MmdGZzViQWdnOVBSVThLRHh4RTUvTXpEVDZ5dGhPeDc4dDN5YURsSWhBS1M4UDAvMG9LY04xTmlnR1pEMTJFNnJjYUoycStORGluODh0SDJiaWZVOFBXY0tTdXRjZVhKUXVkUTdzdGNkUXdaMW0rZWR6aXVZdDNDUWp2UkRldWJLNUl4enhPVHczMldPVEFsb3g4azBldUlLRE9vMXJNU2tXWGRUSUZJMktsUkRKbitDaXcxVE02ZTN0RkRmSzN4N1JhRWJ1TUwyR0hrZFR2MHNUblo2ODlrMDduUElYTWUwcERGYUd4ckd5ZlZoS2tmMjlsbUVtalBTMHltZjh6ai84NDdBdXI5WnJLOEMxT0JlUzJlK1B4cmdiUW1wSjRobmtYRzZRR04xVm5pRmlaaDRxMW1mbXgxeEtmYmpIUTZXS1pudnp6YndWTzRqVGVlZkIydjNlOXdzdWFPbnJSb3pCU1Z3NXo1VEE3QWh2cjFnOWJ2RHlYRHRYbTJXSmFZcHRrU0Fvem1PdEhmRTZsTjRRR2x6cEZHTnBRQTh5d0xIUjYxM2gyaTNKNXFzNEg5V002cmxXQTg1dDNSeXhoMlFHTU1uajJtRHgzUVVCMmNXeXllbHVadExIZ3pjZUV1TzVEV0pDT3N0bDFud2l3MjIvTy95K2U1Z3ZhTlRKZGx0R001a2NQbjlJMDZDT0oyQm9PRFloVE5aRnZyT1FzbExZOXlhaWY1eDI0YVhiSHhxV25lVHZyT1pKd3pSdFhZN1duQVZreGdFdUgxL3RqZGpWTGpBNnRERkpNQmJxOS9oMk1oRHBIU1hFSGVsdG45bU01Uld4N0F4TDdaRzh1NzJyaWhxelljdWJIMmw5VWVyem56Y3pTOURHZW5NN2FwV2ZOd0NsZFc1elhmOTNSOFk1RndtZG5HRzZPQW52c1R6N0hmRitUTmdqVkxTNXI4SXVPNTd6dzhkQ0pqNlJaYllDVkZFaDA2K1EwM2pYM1RJWGd2K1pCZHA5YXd2eDdlaWcyd0VNYUtKcnc2VDJYMGRGcDMrbVhyWVQ4dUNNSEN1WmZsb1IzWXg5SU5aVDN1Z01uVHkwMVlaOTc5NE1udTVaRVlDSUJ6Um9Ta0ZtK0pvTGZGM0dkbTFobG83UkN3dXM4QjMxYTdsUFpkQVMvWjdNMEtUdHdkOXpuc09WblR0RHpCUWpWOXpDdWJFblM0UFBhZWIyZUh3bGI3MTdPbkZmZStMOXVqSFQrRjNtVlAzK3JPQnZEY1AvdFh3bk1PVlBMUUdBOXhxaWJnMkYvSlp2ZkllZyt0d2F6cGY2NXpMQ3JJNWZyL0FwWVRxQThhSmVyWUFBQUJnMmxEUTFCSlEwTWdjSEp2Wm1sc1pRQUFlSng5a1QxSXcwQWN4VjlUcGFJVkJUdUlPR1NvVGhaRVJSeTFDa1dvRUdxRlZoMU1MdjJDSmcxSmlvdWo0RnB3OEdPeDZ1RGlyS3VEcXlBSWZvQTRPVG9wdWtpSi8wc0tMV0k4T083SHUzdVB1M2VBVUM4enplb1lCelRkTmxPSnVKakpyb3FoVjRRZ29CODlDTWpNTXVZa0tRbmY4WFdQQUYvdllqekwvOXlmbzFmTldRd0lpTVN6ekRCdDRnM2k2VTNiNEx4UEhHRkZXU1UrSng0ejZZTEVqMXhYUEg3alhIQlo0SmtSTTUyYUo0NFFpNFUyVnRxWUZVMk5lSW80cW1vNjVRc1pqMVhPVzV5MWNwVTE3OGxmR003cEs4dGNwem1NQkJheEJBa2lGRlJSUWhrMllyVHFwRmhJMFg3Y3h6L2sraVZ5S2VRcWdaRmpBUlZva0YwLytCLzg3dGJLVDA1NFNlRTQwUG5pT0I4alFHZ1hhTlFjNS92WWNSb25RUEFadU5KYi9rb2RtUGtrdmRiU29rZEEzelp3Y2QzU2xEM2djZ2NZZkRKa1UzYWxJRTBobndmZXoraWJzc0RBTGRDOTV2WFczTWZwQTVDbXJwSTN3TUVoTUZxZzdIV2ZkM2UxOS9idm1XWi9QOGE3Y21MdzBYeHZBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINUFjQ0VDUVNSMS9VTVFBQUlBQkpSRUZVZU5yc1hXZDRGRlhidnMvTTFuVFNFd0pKcUVLb1NxK0NTRkVzS0tKK29vQ2dpSXJTdXdndnZTZ2RRU2tXUkgxRlJJb0ZDL0tDZ0NDQ1FpQzBrSkMydThsdXl2YWRjcjRmT3pOc0dvWVNpdXh6WFhOdHNqdTdNM1Btbkh1ZWVqK0VVb3E3VmY3ODgwK01HREVDZi8vOU44TER3OUd6WjAvRXhzYmlxNisrd3Rtelp3RUFHemR1eE96WnM1R2JtNHRISDMwVUxNc2lKQ1FFYTlhc0FRRHMzYnNYSTBlT3hPblRwNUdZbUloR2pScmh0OTkrdzlpeFkyR3oyYkI1ODJZVUZoYmkwVWNmaGR2dGhzUGh3TkdqUjJFeW1RQUFvYUdoU0U1T2hpaUs0SGtlZ2lBb3I0SWdRQlJGMzcrSktJcnczU2lsOGl1aGxFTGVBSkN5cndCQUtTWFM1U3V2WmQ0ajU4NmRpNG1JaUlqVGFyVXhMTXZHTUF3VHhUQk1CQ0VrSEVBTkFDR0VrQkFBZ1FBQ0FPZ0JhS1NOQmNCSXZ5Y0NFQUI0cE0wSndBSEFUaWt0QVZCQ0tTMmlsRm9vcFdaQkVBbzRqak82WEM1VFhsNWVYdlBtelUzUzcxQ2ZyZHovaEpDeW44bnZBUUFsaEpSNzlka293ekFnaElCaG1MSWJaVmtXTE11Q1lSaklmNnRVS3VWVjN0UnFOZFJxTlRRYURUUWFEYlJhTGJSYUxmUjZQZlI2UFFJREF4RVVGSVRnNEdDRWhZV2hSbzBhaUl5TVJIUjBOT0xqNDNINDhHSFVyWDhQL0hKamhOek53SFk5NHZGNGtKdWJDNFBCZ0lLQ0FsZ3NGaFFWRmFHa3BBUTJtdzEydXgwT2h3TXVsd3N1bHd0dXR4c2Vqd2NlandjY3g0SGpPUEE4WDJxVEFjeDNFMFdSeUFCWEJzeEtBWm44ZnhrQUt3Vll2djl2MjdhdGdWNnZyOGV5YkYyR1llb0FTQ0tFSkFKSUJLQzdUWWJaQmVBU3BUU1RVcG9oaXVKRmp1UFNyVmJyaFFFREJweVh3YzBIMkNvRHZISUFTQWloMG5oUkVISjVZQWdwQlh5K0lPY0xlbVhCemhmMGZNRk9wOWREcDlVaU5EUVVNVEV4Q3NDRmhJUWdMQ3dNNGVIaGlJeU1SRVpHQnRxMjd3UzFXdTFmWEg1Z3UzWVpPWElrVnE1Y2VWdWRVM1IwdEZmTnFRRE1aSzFNQmpiNTNzbWFtaTk0K2Y2L2IvL0I2SmpZMktacXRib3B3ekFwaEpBVUFJMEFhTy93VytnR2NGb1V4Vk9DSUp4eXVaeXA2UmZTVXgvcDI2ZEEwaFI5UVUwc0E0Q2dsQ3IvWDBHam80Umh3QkFHREVQQU1ES1lNWlJoMkFwQmpWV3hVS25VVUt0VVVLblYwS2pWRWhnU3FEVWExRXBJUUVCQUFBSURBeEVjSEl5UWtCRFVxRkVET1RrNWFOcXNKUVJCUUV4TWpCK1ovTUIyODhSb05DSTNOeGNta3drRkJRVW9MQ3hFY1hFeHJGWXJiRFliSEE0SG5FNm5vcVdWMWREK1FVc2pzdGxaQnRCOE5iTlMybGhaVUh1NDd5UHM0bmVXdE5icGRLMFlocm1QRUhJdmdBWjMyVzA2SjRyaW43azVXY2MwR3ZXZlk4ZU0rWFB2M3IyaUQ5aUpsUUNlWk1ZU1NnZ29RRUJJWlNESGdHRVpzQXdEaG1GcEtZQlRzVkN4bDdVMmxXeWlxdFVRUlJIQndVR0lpSWlBWHE5SFFFQ0FZcDRhalViVWIzQVBha2dhWEd4TUxDS2pvdnlMemc5czFTZkZ4Y1hJeWNtQndXQkFmbjUraFdhbjArbUUwK21FMisxV3pFNk80K0R4ZU1EemZDbFE4L0dqRVY4L1dnV2FHYW5BWDZab1ptUEhqbVVmZSt6eFR1R1JVZTJEZ29JN0VFTGFBd2p5M3pIQWJyZkJXbEtNVnZmZGE2T1VIdUo1L3BEVmFqMzg2cXV2SHZyaWl5OTRRa2hab0JNck1tM0xhSEcwbEYrT1VjQU5MTXVBWWIwZ3AySlpzTDdnSmdFY3d6QmdpRmN6TCt0L001dk5xRlU3Q2FHaG9WNFROU0lDMGRIUmlJdUxRM0J3aVArRytvSHR4Z25IY2NqS3lpcWxwUlVWRlNsYVdsWDhhR1cxTkZrNzh3ME95SnFaYkdiNmFHUyt2akpDS1dVc0ZrdmpvS0NnKzFtVzdRS1Fya2VPSEFtTlQ2anR2MWtWU0c3T0piUnAzYnJjYytyUTc0ZjNSVVhIN2k4b3lOL2Z2bTNyTkFuVUt0THF4RXBBN3JJbXh6Q1VJVDRhSE11Q2xiVzRjdHFiQ3FJZ0lqSXlRZ2t3NkhRNjZIUTZGQlVWSVM2dUpnS0RBaEVjSElMUTBGQkZlNHVKaVVWd1VCQ3lzekpodDlzcXZkN0F3Q0FrSmRkRlNHam9MUnZ6a3VKaVpGeThjTXZQVTNXM1RYWktLUXdHQTB3bUUzaEJnTTFxclhBL2k4VUNrOGxVU2p1ejIrMktkdVlMWlA4QVloVkdOV1dIdjJUL2dQajR4OHFDbWNQaDZLYlJhSG93RE5NRFFGUGY4M1E2SFg0RXEwU2NqZ3JISnRUdGN2YlZhclY5YTlaTXdLWHN2Sk04ei85aXM5bCtiWnJTYUQ4aEVIeUJqbEphVHFPVC9ITUFJWlNJSWtSQ3dJZ01CTUpRaGhIQXNneGhHQllzejFLZTVhRlNTUm9jcDRJZzhMRFp0TkJvTklwMjczSzVVRkpTQXExT0Q2ZkxxL2s3SE42NVpyTmFVVkpTZ2lKTEFRSURBeEVXRm5aRkxUWGo0Z1UwYTNIdkxSdnppK25uNFhEWS8xR2JydTd6Vk4xdG9IYnMyREdBTUFnTUNrWmdZQkJpWWt2djQzQTRrSk9URGJlSEI4ZUw0QVFSZ2tnaFVpaXZGS1QwUmxGbW82QVVFQ21GS0ZJaUtwRkw3MWJXeEtTVUVpcVptY1Ficm1PY1RtY2ZqVWJUaHhEU0IwRE5hNzNtSDNmL2dJMGIxc05rTWlJK1BoNGZiL29NNTg2ZHhkQWhnNVI5SmsyWmhvY2Vldmh1eGI4bUtwV3FTVmhZMkJ0Wk9YazVnaUQ4WUxmYmYwcHAxT0FueVZ3VktnVTVTaWtGb2Q0QUt3VWhJa1NSUUJCOEFJNWx3Zk1zV0JWUFZid0tvaWpBNFhDQTR6aW8xV3JGWFdHMzI2RXBMbGFBVG5adE9CeDIyT3cyRkppTUNBME5oYzFtUTJSa0pIUTZYYVdnY1N2bG4wRHRacDNuWFFWc0JvTUJJQXlpWStJcU5sMXljNUdYbXd0VHZnbG1zeGxGaFlXS0g4M2hzTU1wbTUxdU56eHVOenljQjV4SDB0WjRIeDhhTDBBUWVNbmNGQ0dLc3NsSkNhVWlLQVVCS0xsc2Nuci8vKzIzQTkwVEUycy9HaDhmMy9kNndNejNlaGJNbjR1WnMrYWdkZXMyS0NrcEFRRFVxMWNmUC83OEt3RGdwYUdEcTIyOE42eGZoOGNlNzRlSWlJaHk1N1ZzeVRzNGNlSnZhRFFhOUhpd0YwYTgraHBZbGdVQVpHZG5ZOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHBHT1dmUEV5Uk12YXJYYUY2ZE1uWll6ZE5qTDM5bnQ5dSthTldtMFh3STRvWXpaV2xhTGs0SVBJa1NSZ1NnU3lnZ0NCSVlGS3pCRVlIbUlva2lkVG1jNVlITTRIRkNyTlY1WGhqUy8zRzQzbkU0WEhBNG5DaTBGRXRBNVlMZmJFUkVSZ2NqSVNMOWE3Z2Myd0dUS1IyQlFjTG4zYlRZYnNyT3p2RGxwK2Ztd0ZGcFFYQ1Q3MFM1SE85MHVGOXdlTnp4dWp4ZlVPQTQ4eDRGVEFJMEhMd2NFRkZBVEpUQ1RFMmk5SUNhYm1hZE9uMjBTRUJqWWoyR1l4KzEyVytQOC9IekV4OGZma09zOWszWWFrWkdSNk5peEV3QW9DNEVRQXExV3EveGRYZkxoeHZYbzNLVkxPV0NiOGZZME5HblNGUCtaUFJmRlJVVVlNL3BOMUV5b2lYNzlub1FvaXBnMFlSeTZkWDhBcytiTWc4bG94TGl4b3hBVkZZMytUdzJvbHZPczVKZzFvNktpaC9WL2FzQ3dyQnpENmM0ZDIrMzR6K3k1Mzc0dzhQOU9BUkFrN1UwZ3hLdVlYOWJrS0tXVVVFSUVTaWtob2loU1FrUUlBa05aMXV1T2NMbGNVS2xVVkE0cXFkVnF1Rnd1cU5SMnlhWGg5ZE82UFI3SlhIV2h1S2hRMGVaY0xoY2NEZ2NjRGdlaW9xS2cxK3V2NmJxLzJ2SWwzbHU5RWovOXNoY0E4TXJMdzJDeFdFcTVZeVpObm9JZUQvWUVBSncrZlFxN2R1NUE4K1l0OEdEUFh0VytYaGZNbjR0dmQrMVU1dWpySTk5RS82Y0dJRDA5SFV2ZVhZeVM0aUlFaDRSaTRxVEpxRlhMNjJjK2VPQTNyRm16K3U0Q05sN2dFUmdZVkVaN3lFRnVUaTZNUmlQTVptOEtoMWRMczE3MnA4blJUby9rVS9QSS9qUXZxQWs4RDU3M0RRZ0l2bWthcEhSQUFNeEhIMytpNjl5bDYxTXN5L1luaFBUeWRhcmFTb3F1K3pxUEh6K0dHZE9uS1pyQTQ0OTZ6Y3grVC9USG9NRkRxdlFiaHc0ZXdNb1Z5MkV3NUNFeE1RbGp4bzVIU3BNbXl1ZDdmOTJERFJ2V0lkOWtRa3hzTElZUEg0RjI3VHNBQUVhKy9pcXlMbVVDQUVhLytRWlVLaFlKQ2JXd2N2VWFpS0tJcmwyNzRlRytmYUhWYWhFZEU0TldyVnZqN0prenltS3FFUjZPNXdZT2hFYWpRVUt0V3VqWXFUUFMwazVYMjd5b3dqRWJFVUlheGNiR1RyaVVuYmZiNlhSc256SDlyUjJmZmJiWkNZQ1hORGNaN0JTUWszMXhoRkJRNmpWVEthWFU3WGFENTNraUJSVW96L053dTkxZ1dSVjROUStPdit5ejVhUmdsTFdrUkFsTWVUeWVVZ0FYR1JsWm9mWW1paUlZaGluM053RGs1ZVhoMjEwN1MrMi81djExeXQ5dWx3dERCcitBanAwNkF3QldyMXFKOVBRTGNOanRxRmV2L3RYWitrMmFLSW5zVnpySHN2OWJ6R2E4dCtZRE5FNUpLZldkV2Y5NUc2TkdqVUh6RmkyeGErY09MRisyRklzV3Z3dVh5NG1GQytaaDVlcTFZTzRtWVBNTkZEaWRUcHc1Y3dabno1N0Z4WXZweU03T1FsNWVIdkx6VFFyQUZSY1h3eXFab2phN0hRNjdBMDZIMHlkWHpRMjMyMDNjYmcveEJoRTg0SG1PU0RscFJCUkZSaFJGaGxMS1VrcloxTk5ubTJkY3lwN2RyZnNESjFRcTFRZStvT2FyUFY2dnRHalJFdHUyNzhLYm84YWdaczBFYk51K0M5dTI3Nm95cUYwNGZ4NXZUWnVDRWErOWpsM2Y3Y1pUQTU3R21ORnZ3R1EwQWdBeU16TXdlOVpNVEp3NEJUdS8vUUdQUFBJWXBrNmRESWZrckYreGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF1OUpXZ013K0M1Z2M4akxLeUcxOWw4TVIwSGZ2c05iZHUyVTdUS0ZTdFhRNmZUS3hQOStMRmphTmFzZWJYTmk2czVKaUdrWjBCQTRNb0ZpOTdaWDc5Qmd5bHIzMS9YakZLcWhUZmhXUU5BRFZBVnBWUWwzM2Q1SGtoemduQWNSenlTTnVaeXVZakw1U0l5V0RtZFRqZ2RUampzRHRqc2R0aHNObGlsd0pYTlprTnhjVEVLQ3d0aE5wdGhNcG1RbDVlSHJLd3NYTHAwQ1c2M1d6blBJMGNPWStya2llQTREaGFMQlM4TkhWSktHMXUwY0Q1R3Z2Rm1wV1B5M1hmZm9sUG5Mb28yT095bGw3SDRuU1dvVTdmdVZZOXZTRWdJTkJwTmhaK3RYL2MrTm4rNkNRQnc0c1RmZVBPTjE4czljTXI2eVI5OTdIRTBiOUVTQUhEUFBZMWdsZ0F6THk4UFlXRTFVTE5temJzdkt1bzFTWTNJenNxV25pTDVLQ3kwNE1LRkM5ajl3L2ZvMXUwQnVGeE9PRjJ1eTZhbnBLVmxabVlnckVZTkVFSWc4RHpoZWErRzV2RzRJUWdDWVZVcThCeEhaSkhOemQ2OSsvUlorOEg2Wi9mOWIrOVRIMjdjQUk3alVMZGVQVXlhUEVWWlRMZVQ3Tnk1SFYzdjc2YVlzTDM3UElUdnZ0dUYzYnQvd01EblgwQkVSQ1EyYlB3WXRXcDcxZjlISG4wTVM1ZThnNnlzUzJqWXNHcjFqcWtuVDJMMHFKRnd1Vnk0djF0M2RPbDZmNFg3clhsdkZmUUJBWGpvNGI0MzdmcXJja3hDU0sySThJaFJRY0hCb3pLemNyZVdsQlIvMVRTbDBTOEE0YVhJcWlCcGJZS3ZCZ2VBOGp4UEdZYVI4eGVwbE5kSUdJWUJMNmdvTC9nbWNYdjl0MDZIbzFRK3BLelJlUlJ6MVd1bVJrbEp2YTFhdGNhdmUzN0J6Qm5Ua1pPVGpTZWZmQXJoRWtocy8yWWI2dGF0aDBhTlV5bzF6YmQrOVNVV0xuNVhlYTh5WUxwZWVmYi9CbUwwcURkZ05oZGczLy8raDFsejVpcWZtUzFtVEo4MkJXYUxHVzNhdE1Yb01lT2cxV3JScjkrVHlqNWZmUDRaZXZidURRQ0lqWTJEeFdKR2VucjYzYVd4aWFLSTlQUUxPSFBtaktTbFhVSmVYaDVNSmhQT3BLV0I1M2xjeXJxa1ZCTEllV3BPaHhOT2x4T1VVbmpjSHVKeHUwdHBhRkxhQnFHaXlCQkNHRW9wMCsrSkoxVVhMbDRhUEc3OGhCKzdkTDEvcTlsc2ZtckY4bVY0ZCtreWZQTHBaMUNyMU5qNjFWZTNiWkFsTHE2MG42OTI3U1FZREhrQWdLQ2dJQnc5K2dlR3Z6d1V6ejM3TkFhL01GQVozNnBLU3BNbTJQM1RIbnp4NVZiazVlVmh3L3AxNWZiNStLTVA4ZnZ2aHpCMzdueW9WRGZuR1Z6VlkxSktZU20wSUNnd0NBekRQQkVXVnVQVFM5bDVXOUxPbm4rMmVmTVdla3FwRHBlSkFYdzFPSVpTeWdpQ3dQQThUM2llSnh6SEVaN241Y0FCY2J2Y3hPVnllVk0vSEU0bFYxSU9IdkE4cjFRc2hJYUdRcS9YdzJReUlUYzNGMWxaV1VoUHZ3QktLWVlQSDRFL2ovNEJyVWFyZ0xUUmFNQ083ZDlnMkxDWEtyMjIzL2J2UTFKeUhjVEd4bDNYV1BidTNSdjkrL2RIZkh3OE9uVG9nUDc5KzZOeDQ4YWw5Z2tLQ3NJcnI3eUtMLy83QmJwMTcxN3F3VGgrL0VTODgrNVNiUHIwYzVqTlpueTlkVXVwNzI3NThyOG9NQmZncWFlZUJnRG85WHBNbmpJTjgrZk52bnMwdHFLaUlwdy9meDZzU2d0VHZoRVdzemMveldyMW1wcFpXWmNRR3hlSDNOd2N4TVRFS0U5Q1ExNGVPSTRESVFTVVVzSnhIZ0FFSE1jUlFlQ0IwaldhWlBOblh3UXZXamgvOEpLbHl3Y1JRcG9lUEhnQTgrWXZCQlZGdkRGcXRHS0NOYnpuSHVUbDVkNldZeFVURXdORFhsNnA5M0p5c3RHeXBUZnZhTi8vOXVMVFRaOWd5ZExsU0toVkN3RFFwVlA3aXJTYWNtRG5kcm53M1hmZm9rK2ZoNkRWNlJBWEY0Y2VQUjdFL3YzN3lrM2FIM2YvZ0dVclZ0MjBoTk9yT2VhUkk0ZWhVYXZSb0dGRDMrdnRHQmdZMkhIN3ptOWZkcnZkbjMzOTlWZi9uVEJ1YkFraFJKQjhjYklXcC9qaUJFR2dsRklxaWlJNGpvTWdpSlJsUlFpaVFBUkJvSUpLZ0NCNFFjODNKOUp1dDBPajBVQ24weW5sV2JMLzdmeTU4eWpJTDhDYU5hc3c4UGxCT0hzbURRdm16OFdreVZPeGM4Y09XRzFXdkRMOEpZQjR5UnlHREhvZWE5WitBSzJVUXZMRjU1L2g1VmRHWFBkNGZ2Lzk5d0NBRGgwNklDTWpBN201NWVmN2hRc1hNSC9lSFB4bjFoeHMzTEFPdFJPVDhQRERmU0VJQWxxMHZGY3hoWHYyN0lYRHYvK3VmTy9YUGIvZ3h4OS93THRMbHBlS2xyZHIzd0h0Mm5lNE96UzI3T3hzbkR4NUVsbFpXY2pLdW9TODNEeVlUSmVEQlVhREFZSWdJaWd3Q0VXRmhZb2ZyU0EvSDRJZ0lDUWtsR2kxT2tJcGhTQUloQmQ0SWdnOFlTUUJ3RHo1WlAvd2k1blpZenQxN25Jb0pqWjJjZHJwVTAyenNpNEJBSktTa2hFVkhZM09uYnNvaTN2SGptL1FvOGVEdHk2UUlwazZBRUFseWlRWmhCN3Urd2oyN3QyRHc0ZC9COC96K09XWG41RjY4Z1I2OXZLNkJNMW1Nd2dCR0paRmNYR1I0aU9oWXVrcWxyajRlQnc2ZUJBY3h5RmZvbW5TYUxYNDVPT1A4UG5ubThGeEhJcUtDckZ2My8vUXJGbXp5NmJ3anUzWTl2VldMRjIrVWpHZnF0MzhydUl4M1c0M2ZqOTBFUFBuemNId1YxNUZZR0JnUllEZVJLZlR6WG4yMmVlK1AzOGhZOFRxOTlaR1NScWNsbEtxb1pTcWZUVTR5US9MZU1rUGVNTHhIUEVHRGR6RTdYWVRsOHNOSDU5Y0tlM05icmZES2lYeHlyNjNyS3hMT0hUb0FPclVxWXR1M1IvQXRPa3pvTkZvWWJGWU1IVFlTL2o4aXkzWStORW5XTE4ySFRRYURUWis5SWtDYXFkUG5ZTGI0NmxXbjZhdkhQM2pDQ1pObm9yN3UzWEh1MHRYNEZUcVNWQktVVnhjakJjRy9wK1NvblQ4K0RFa0pTY3JmMy8wNFViTVg3Q293dkVIL3VYcEhwUlNuRDE3RnBtWm1RckZFS3RTbzZTNEJGYWJGUTY3SFE2bkU5azUyUWdJMEV2T1Y0TGk0bUlRaHNEbGNoTzFXZ1VQNTRFb0NnQkFmT2lCR0FEa2h4OS9DYmwwS1hQWWdmMzdoakVNVXhjQU9uYnNqSU1IRHlJd01CQ2RPM2N0Wnc3UG1UTUxEenpRbzFJZlIzVkwyUVRkQmZQbllzSDh1WGl3WnkrOE5YMEc2dGR2Z0xkbnpzSjdxMWZDa0plSDJvbUpXTGo0WGNSSTJjeDlIbm9ZSjArZXdOQWhMNEJsVlhqczhYNm9YNzhCTElXV1VzY1pNMlljRmk5YTZIMFMxNjZOZFJzK2drYWp3WUtGaTdGeXhUSjg4ZmxuVUt2VjZIcC9Od3dhL0NJQVFCQUVMRnJvTlFPZmZicC9hVE54MCtick5vOHFrcW9lYytScnI0SVFJREV4Q1dQSFRWQjhrRmVRdWxxZGJrYmZSeDU5b2NlRFBULytadHZYbjQwYk83cFkxdDRrLzV1aXhYbFRRNGhJS0FYMVZxaFFRUlFoaWdMaGVSNHN5MUs1Y3FVaWlpdjVZV1V3NUtGR2pYQTBhTkFRWjgrZWdjUGh3Sml4NDZxVTJ2UDVaNS9pcVJ1Y1ZuUGd3SUZLUHh2dzlEUEszeEVSRVJnL1lSSUFJRHc4SEM4T0c0YlhYeDBPU29Ia09uWFE3d212YjIzK3ZEbHd1OTBZNVJOb21QclcyMmpRb0NFS0N5MTRlZGpRZjIrdHFOVnF4Zm56NTNIcDBtVS8ybDkvL1FXR1ZjRnVzOEh1azV1V2xuYjZzdlpDS2RScU5kSHBkTEJhclRMdkZwR0lJQW5ETUlSU3lpUWxKYkY3OXU1L21XWFpsMy82NmNmRysvKzNGelArTXhzQWtKNmVqbmx6WnlNb01CQ0RYeHlLNXMxYktPZTFiT203NERnTzQ4WlByRGdpZVM0TlhidDJyZkoxN3QyNzEwOVFXSWxVTnBhM2NNeE9wNTQ0L3RIeTVjczNmL2ZkZHg0SjRCUVRGZDdhVlBtVnlzWDJETU5RUVJBVS9qZVZTa1ZabG9WYXJZWktwVkxJTFdYVE5DbTVqc1QzSnBGWnhzU2daczBFSkNjbmxVdDN1dEZ5OExmL1ZYbmY5aDI3Vk50NS9DczFOcVBSaUFzWExpQXJ5NXZDNFVzRXliQXFyelBXNllUTDdZTGRiZ2ZQODRpT2lRSFBjWEM2WE1SaHQ0TmhXUkJDaUNBSWNpNmFFdVU4ZmViOE15OE0vTDhSUnFPeGJYeDhQUExLK0E3cTFLa0R1ODJHZ29KOE5HMTYyY1RhL09rbW1NMW16Smc1NjRaZHExNGY0RWV3cXh5Yld6aG1qV3JVQ0orL2MrZk9KMHBLU2o0TUN3dmJRUWpoZkFGTzB1S0lWNHNEcFZTZ29sU3JKL25qSUlvaVVhbFUxSmNWUnRiYUFJS2lvaUx3SEs4ays3cmRicmhkTHJoY1RpUWxKbFVySFZKQVFHQ1Z5cW9DQWdLcmRhRC9kY0NXa1pHQjlQUjBaR2RuSzBtQmN0S3QxV29GdzdCS0tvZkg0NEhGYklGS3BZTGI1U1k4ejROS0JlcmV0QTJHaUNKUEJFRWdBSmcyYmRwMmYyZkowbGNEQXdQN1Rwb3lGVk1uVDBTTjhIQ29WQ3dDeWl5V2pwMDZvNlM0U0VrMk5Cb05XUFBlS2lRazFNS1FRZDRvSXNPdzJQalJKOWQxdlN6THdtNjNWZnVUK0U0VHU4MWFhUWtXYzR2R3pHNnpnbFdwUUFocEV4b2Eya1lRaEw0bWsrbkR1TGk0QTRRUWpsTEtFMEprZ0JOQklJSkNoQ2dxQkptaTZNMGFrYW10UkZGVXpGTUEwT24wc0phVWVGTkNlRGtsaEx0Y3llQnl3K2x5b1pZVTlMblJrbHluM2o4V3dnY0VCQ0s1VHIxcUhldC9qU2xLS2NXWk0yZVFucDZPbkp3Y0dJMUdoV1pJcnZmTXlja0JZUmd2SzBlcHNpaWVlTms0ZUYvNklGbExZMDZrcGpVSURnNStqUkR5eXEweW55b0g4a3lZTFJiRXhNYjcwY3hYYXpma0lqSXlBb20xeTFNNlpXUm13bXkrK1dObU5PUWlJaUlDU1ltbHo0bmp1SFdwcWFrZnQyelo4Z0lBRGdBdlJWSVZINXpNSCtmTENlZERjRW5MbXFVeUpaSWNNWlZUUThMRHd4RVZGWVc0dURqVXJsMjdXa3ZxYnFYOEt6UTJ1WW9nSXlOREFUV3oyWXppNG1LZkluWUgzRzQzUkVwOXk2SUl6L1BnQlI2aVFpdEVDUVVsb0pUMGYyb0F1M0RST3lOWmxuMERRTUxOdUphZzRPQ3Iyajh4c1RieTgwMHdHbklSRkJ4eTEydHVkcHNWTnBzVkFzOVhDR29Ba0pTWUNKUHA1bzJaZkU2aUlKUUROUUJRcTlYRFdyUm8wY2R1dDYvdDNMbnp4OGVPSGZQSUFBZHZrTXEzQUYvaGhwTkJqbUVZSXZuZnFFeFI3dHRjUmdZNFg5WmV1ZWRDdzRZTnI3blc5SGFXTzE1akt5d3N4Tm16WjVVOEdWOE90Ykpra0lXRmhmQldDL0RnS3RmU0dBRGszSVdNbmhxTlpoU0FCMjdtb25TN25Xald0T2xWYTZzWE16SmhzWmdoOENKY3JydVRvMDJ2RHdERHNvaU1pRVJpWXExLzFFWXlNeThodjZBQUFpOVUyNWpwOVFGZ1Zhb0tOYldLUkJURlBTYVRhVjFjWE53K1FvaHZnSUdYTkRkQkFqUlJEaTZ3TEV0OXdJeXExZXBTSkphK1BSYmtCakp5ZDZ5a3BDUTBhTkFBTldyVThBUGJiV051R0kybDBqbGsydTZLR0c3ZGJqZnNkanRjTGhjUktZVWdFVUVxV2hxbEJLRE1rYVBIWXFPaW9rY1JRa2JmN09zeEdmTVFGeHVEdUxnNCtPWHVGby9IcytxWFgzN1oyS2RQSDRNVVlKQTFPTUVuY2lxREc1VzFOVmxUVTZ2VlZHNEJXQmJjZkUzUytQaDRKQ1ltb2tHREJ2K3FKakozckNtYWxaV0ZjK2ZPSVRNelUwbm44RzJ1SXRPNitETGRDb0pBUEI2dUl2WU5CZ0J6NGVLbC9pcVZhalNBKzI3bXRUanNOdGlzSlFDb0g5VDhBZ0RRYURTdjllclZxNFBaYkY0YkVSSHhIU0dFbGNDTjg4bC9JMTRsVHhSOUd2NVFINnA1V2xtdVcyVjFwOVVWVlBBRFd4WGt3b1VMT0gvK3ZBSnFjanBIMmVZcVplaTdDY2R4QUtoODArVXVUOHkyYmR0cWhZU0VqTW04ZVA3Vm0zMHR3Y0hCVUtsVWlJK1BRMnhzckg5RisrV3lPVVZJeS9EdzhEVWVqK2VEMzM3N2JVTzNidDJ5Q1NHTWJKcFNTbmxjWmw0V3ZWNEo2aHNwSmI1UjA3THBJVEo5dlMrMXZjZmpRZDFyWVBEd0E5dDFTbHBhbXBKNEszZU5LaXpGZE9zb0MyckVweGVCNGt1RFZEbmdkcnVmVUt2Vll3RzA4aThsdjl5T29sYXJYK3JhdGV0OStmbjVhNktpb25aTHZqZEdBalZaZTVOVFFjcHFiK1hTUXNwV0x2aDJUcE1CN3A1Nzd1eWtiNUtSa1hGSG5LaGNIaVVIQ1h6OWFXVzFOSjlPVWNSYldPenREQ1duY0ZCS3ljOC8veHlXbUpnNGptR1lDZjZsNDVjN3lQZTJiT3ZXcmVzblRacFVDTURqaytBcnlQNDN1V3BCU2dueDliMVIzd29GdWZWZlVGQlFPYitiSEZTNFU5TkJWSW1KaWJmOVNYSWNoOVRVVk1WM1ZsR0hxQXE2UXZsMlUvY0ZOY1p1dDNmUmFyWGpDU0U5L1V2RkwzZVl2RGwrL1BpVVo1NTVabTFTVXRJUkFDd0FPWHBLVUpySkY2SW9naEFpbDJRUm1mK3RySWJtVzJUdmNEaGd0VnBSVkZTRWxKUVVxTlZxdnlsNm84WGxjaUUxTlZVcGtaS3JDWHhiNGlrOUNTVENQVmxUazAxUENkZ1lTaW5qOFhpR3N5dzdFWUEvbzlVdmQ2UXdETk1qTVRHeGNVbEp5Y3FRa0pBdkFEQ1NlU29ubFpjS0xNZ1dEL1VLa2FzWGZQclk0a3JGOVNrcEtaVjJ4YnB0VGRIYk9kM0RicmVYQXJXeTFRUmxHeGJML2pUSi9KVHJQQmxSRkVsdWJtNThkSFQwQkVMSXEvNmw0WmZiMWQxaU1CaGdOSm9nQ0FKc051cy9mb2ZuK1hWSGpoeFpOM255NUZ4SmM1TXJGNVRpZXArOE4waXBJWElTcjVMekpuZW1MMXVsRUIwZGpabzFheUk1T2ZtMkFMZmc0QkN3TElQbzZPZ3JaaERjdGhxYjFXcXRGTlJraGx1NTk2SnZrRUFHTlovSUoyTzMyenRydGRxSmhKQUgvY3ZITDdjcnFCMDdkZ3dVUkttR3FHSlcyYkQ2RFJ2WDZkcnRnZmM2dEd2ekJ3QUczc2lwVElEcXBVWHkva09sdnJkZWpZMVNMME9TMUFkWDN1UWV1b0pJd1FzVUhDL0M3UkdRbUp5QW9LQmJYOWxpdDl1UW0yZEFibDRlN3J2MzNqc0gySXFMaXhWUWs0dlp6V1p6aFpwYUpaRlB4Wi9tZHJzSHFsU3F5UURxK1plUFgyNVhNUmdNb0NEWFZML0tNRXozV3JWcUo1NU1UVnZSSk9XZUhhQ1VvWUJ2M3cxQm9nc1J2YkVBQ3NrQ0JienJoQ29tcVJ4UmxjeFVVYVFRcVJSTnBTSWFObWlJNEpDUVd6cFdnWUZCQ0F3TWdzbVlCNFBCVUdHYTFHM0ZvUHZERHorZ2ZmdjJpSW1KUWRldVhURmh3Z1RzMmJOSFllaW9LQUxxVnZvUGVIMXEwc2FJb3FpYVAzLytsUFQwOUxYZmYvLzliUU5xUE05ajFLaFJpSTZPUm1ob0tJWVBINjUwZC9MTDNTc21VejZDZ3E4TE1PcUdob1V0UG5mKzR2Q0c5elFLQUtDVHVtZkpQUmRZU3NGU0tuZkxFZ2pQYy9Cd25KZXAxK1dXZWl4NHUyTlpyVllVRnhYQllqSERaRFFoSnljSEdSY3ZJdTFNR2txS2kyK0xNUXNNQ29aUjZweFdWdGdaTTJiY0ZpZTVkKzllOU96WkV5a3BLWGpnZ1FlUWxKU0VvcUlpSEQ1OFdJN3NLSUJXMXZ5VXRUUXZ0YkxBcEtTazFQcjg4OC9uZHUzYWRjeUFBUU9Za0pBUWRPblM1YmE0em9rVEoyTGJ0bTM0OU5OUDhleXp6MkxwMHFVNGRlb1VIbnZzTWYvcXZvc2xOemNYTmNJanJ2cDdwMCtsWXQ1VTdNZUhBQUFnQUVsRVFWU2MyZWpWdXc4QU1DcTF1dU96Ly9kY1NLdldiUzU4dmZVckIrQlYzU296ZnlsQWNMbVJ0MlNPMHN1YnBLa1ZGT1RqME1HREtDd3NSRVJFQklLQ2dxSFQ2ZkQxMTE5aC90eloyTFp0S3dvdGhXZ3BtWWI1K2ZsNGE5b1ViTjY4Q1QvLzlCT2FORzJLME5Bd0FNQmZmeDNIdENtVHNIWHJGaHcvOWlkYXQybDdUVjJ3TkJvTnJOWml4RmZnYTd0dFRORzFhOWVpYWRPbWVPYVpaNUNWbFFWQ0NGcTJiSW1DZ2dLY09YTUdLU2twbFNYZWxnb1NQUGpnZzYwYU5XbzBwVnUzYm4zbG0zZTdpTjF1eDZwVnE3QnAweWFGbXVqOTk5OUh6NTQ5c1dEQmdncWIzdnJsN2hDcnRRVFIxMkNHTnJ5bkVkNmUrWjlTNzZuVjZrRmR1blNKL3VYWC82M3BmbitYRTVSU1JrSTN4VFNWc1UwVUJKR1hmRzJBOTlVTGVCS3dnZUpDK2dWd0hBZVdZUkVSRVlHTWpBeFFBSUdCZ2RpNlpRdldmckFlR28wR1k4ZThpU05IRHFOMTZ6Wll2V29GdW5kL0FIMGZlUlIvL0hFRUMrYk54YXIzMW9MbmVjeWJNd3Z6Rnk1R1VsSXkxbjNnN1N2NjBzdkRyMm5jZkhzRjMzYW1hRkZSRWV4Mk8zSnljbkRod29WU1ByWEV4RVFrSmlZcUtSMTJ1eDM1K2Zta3NMQVFOcHVOdUZ3dUlnZ0NJNG9pazVTVTFQdkhIMzljc256NThyNkVFSFRwMGdWSGp4N0ZXMis5aFhidHZBMTUyN1ZyaDltelo2Tjc5KzRJQ0FoQXZYcjE4UDMzMzJQWnNtVklTRWhBYUdnb2hnMGJwaEQzVVVveGI5NDgxSzlmSHhxTkJoRVJFUmcwYUJEc2RqczhIZythTm0yS0J4KzhISlBZdEdrVHRGb3RqaDgvRGdEbzM3OC9Xclh5RmpVY08zWU1UcWV6Rk45YTU4N2VUdHNIRHg3MHIyNi9sQk96Mll5eFkwWmgwUFAvaDhHREJ1TDNROTU1a3AyZGpRSDluOENUL1I3RnFEZEdsdnJPNUluak1XVFE4MzFtLzJmRzFKU1VsQzRBZEtEVXQ1RU1LNG9pSzY4YnBZa014NkdrcEpnWURIbGVRa3FudDNGelpHUWtHalpvQ0kxV2c1S1NFdVRtNWlBekl3TzdmL2dCS1UyYUlDREFTN0phSTZ3Ry9wTG0vVjkvSFVlWEx0NTVIaG9haXJTMDAvQjRQRERrNVVHbjF5TXB5ZHVZSlR3OEhIOGRQM2JEeCsyV2EyeHlvS0JkdTNiNDl0dHZNWGZ1WE1URnhTRWtKQVI2dlI0eTE3dWMwbUUybXdrQXFGUXFRaW1WdTY0elZxdjFXWTFHTTdWdjM3NzFHelpzaUVXTEZvRmhHTFJ2M3g2UFBQSUlwa3lab2h4ei92ejUyTEZqQnpwMTZvUlhYbmtGL2ZyMXcrT1BQNDdUcDAvajFLbFQ2TmF0R3g1NjZDRTg4Y1FUV0xWcUZSWXVYSWpObXplamNlUEdPSDc4T0FZT0hJam16WnRqekpneCtQREREOUd1WFR0ODhza242TjY5TzBhT0hJbVpNMmVpUllzV0NyQVZGaFlDQUhKeWNoUnc5SG02SWlJaUF0bloyZjVWN0pkeThzWG5tOUdzV1RNTUd2d2kwdFBUc1hyVkNyUnQxeDRKQ1FuNDc1YXRPSGZ1TE9iT0xrMDFQMi9CSW1sdEZiVVovdExROEE4LyttVEY0RUhQZnlzcE1rU3lUamtLQ040SE9CR2xmRjRRUXFoS3BTSnV0OXVyeEFHZ29DQ0VnZHZsZ3MxbVE3NHBId0JCWm1ZR0FnSUNjUEZpT2xZc1d3cEJGQkFzK1FtTGk0dWgxZW13WS9zMytPbW4zZEJvTkxEWmJDZ3BLWUZXcTRYSDQ4SEtGY3VRbTV1TG9xS2lHejV1dDFSajgwM3BFRVVSQXdjT1JOMjZkV0V5bVhEcTFDa2NQWG9VcWFtcEtDa3BnZHZ0UmtsSkNaSEFRSW40TUF6REJBY0h2L0xsbDE4dTBtZzA5ZVdHRnpxZERocU5Cb1FRaFZsVWxuNzkrcUZidDI1UXE5VjQ0b2tuNEhLNU1IZnVYQVFIQjZOdDI3Wm8wcVFKVWxOVEFRQkpTVWxZdjM0OSt2VHBnOFRFUkR6MjJHUG8ycldyOHZsOTk5MkhTWk1tWWZ6NDhSZ3laQWlhTkdtQ0NSTXVWMms5ODh3ekdESEMyNlBSNFhCVW1BdWsxV3FsRGxsKzhVdHBhZDJtTFg3KzZVZDg5T0ZHdUYwdUxINW5TWlcrSjRvaVpzNTRHdy8zZmJUZUF6MGVuSFlxN2R3QUFEcHAwMUJLMWFCVUJZQUZLS09rUndHRVpWWGdPQS94dUQwK3JmN3NjSHM4Y0RnY3NCUmFrSjl2UWxGUkVVNzgvUmZHanh1RDU1NS9BZDI2bGFZdW5EZG5Gakl5TG1MeE8wdWgxV3BMS1ROalJyK0p4bzFUTVBLTk42dGwzRzRac1BrbTM4b3BIUzZYQzNYcTFFR3JWcTNRdUhGalJFUkVRQkFFR0kxRzRuYTdKWFlPN3hOSHpsSGpPRzU4U2tyS2d0VFUxQ3AzcVBBdEk1TUhQQ0Vob1pSVFVnYWF2bjM3b25idDJwZzVjeWFlZSs0NXRHalJBdDk5OTUzVU9NTXIwNmRQUjBSRUJQYnMyWU9QUC81WTZYTlFWdlI2UFR3ZVQ3bjMzVzUzcGYwUi9YS1hBMXZyTmxpNWFnMXFKaVRnNDQ4MjR1MjNwbGJwZSt2WHZRK2RUb2VCejc4QUFGSEJ3Y0Z2ZmYzTjlzRUE5Qks0YVFraGFrS0lpbExLQW1COEFuQ0U0M2g0T0E5UklxWk9KemlQRitoS2lvdGhzVmpnY2J0UlhGS0N4eDkvQWdRRUpkWVNoSWFGS2Vabmg0NmRNUEtOVVZDcjFmQjRQQXB6YjBseE1VYVBHWWZlZlI2Q3krVkNtUFNkT3g3WWZNdWtzck96a1pPVGd5MWJ0dURpeFl0S25ockhjZERyOVFnSkNTR0FsLzdiRjlSV3IxNnQ1amh1T3NNd3MwVlIxSlh0T0g1RisxdFYzZ0t2ck5oM3laSWw2TkNoQXpJek05R2hRd2VzWGJzV3ZYdjNMcldQMFdoRVRrNE9LS1g0OWRkZkt6MXVRa0lDWEM1WEtkV2I0emlZeldiVXJGblR2NHI5VWs3bXpaMk53MGNPbzBlUEJ6RjV5alFjT25RUS96VFg5Ky9maDcyLy9vb3BVOS95bmRlNkprMmFUcm4zM251SE4ydldQQkJTT2dpbFZBMHBIUVFBUzBXUjhEeEhCSUVuUEZjNkhZVG5lYmpkYnNXa1ZHczBjRGdjS0NqSXg4V0w2ZGo5dy9kbzFMZ3hBS0JGaTViS2VmNTU5Q2lTa3BLaDBXZ1FHeGVIMExBd2FDVUxhdisrZldqZW9zV2Q3Mk9UQzlwOWF6K0xpb3FRbjU4UGg4T0I1T1JrMytSYkltczRjdnM3QUdUbnpwMUJQWHYybk1vd3pMaWlvaUtjT25VS1E0Y09yZkI0MTh0T3NHVEpFa3llUEJrelo4NVUzc3ZJeUNnVndYenBwWmZRb2tVTDlPdlhENk5IajBiUG5qMHJCS3FXTFZ0Q3I5ZGozNzU5ZU9TUlI2Ukp1QjhNd3lqQkRiLzR4VmNHRG53Qml4Y3Z3T2ViUDRVb2loZ3pkandZaGtGMmRqYkdqSG9ESE9kQmNYRXhCdlIvQXZmZWR4OG1UWjZLbGN1WHd1Vnk0YlVSTHl1L3MzTDFXZ1FIQjJQQm9uZEd2N05vb2FhZ0lIOWRibTZ1L0lTVm82Vzh0TllFYjJNc3dldGlrL2JoZVlGNk9LODVDZ0lFQndVakxpNGVuMjd5ZHBLLzk5NzdFQndjREo3bjhlcHJJekYvM2h4OCtkOHZvTmZyTVhIeUZFV3BtREwxTGN5YU5RT2NoME90V3JVd1lkS1VPeHZZS0tYbHlxVGs2R2R5Y2pMT256K1AxTlJVQkFRRVFCQUV1TjNlcHdRaFJDYlRJeWtwS1RWbXo1NDlOU0lpNGsyMVdvMHBVNllnSkNRRUF3WlUzTDA2S0NnSUJ3OGV4S0ZEaDY0SlBNTER3M0hnd0FIazV1WkNFQVFzWExnUXAwNmRRbE9wTDhINjlldXhaODhlL1AzMzM2aFhyeDQyYmRxRWwxNTZDZDkrK3kwQTRQUFBQMGRoWVNGR2pCaUJ3TUJBREIwNkZLKy8vanFDZzRPaDBXZ3dmUGh3REJreUJPSGg0ZjVWN0pkeVVxdDJiU3hidnFwQzdmKy9XN1pXK0ozUC8vdFZwYjkzenoyTjhNSDZqYSs1M1c3VjVrODNyWnYrMWxTenRMWjhsQUVHbElxQ0tES2x3QzBvS0FnYXJVYTJua0JBVUNNc0RFbEpTWWlJaUVCTVRDd3lNekxBc2l3YU4wNnAxQi9ZdEdrenJIMS9mYldPMjAwMVJhOVUwQjRVRklUWTJGaUlvaWlibzBRR05aWmxDYVdVWExod0llTDc3NzkvS3k0dTdzMEhIbmdBWGJwMGdWYXJ4Zjc5K3l1MTAxOTc3VFVjT0hBQWd3Y1B2cVp6M3JCaEEwcEtTbEMzYmwyMGE5Y09OcHNOa3laTndwOS8vb21zckN5TUdUTUdVNmRPUllNR0RjQXdERDc0NEFQOCtPT1AyTEJoQXdCZ3k1WXRXTC8rOGsxY3ZIZ3hIbnJvSVR6KytPUG8yN2N2N3IvL2ZpeGJ0c3kvZ3YxeVUwV3IxUTUvYnVEQWwrY3RXQlFGUUN0VkthaTl5bzVTcFVCRTBadDU0RzNBN0Ewb3VOM2VLZ1dIdytFMVN5V2ZtOGxrUW01dUxqSXlNbkQyekpsYmVuMDNqZDBqTFMwTmFXbHBTb3M4dVp1VVhDYmx5M3hiSnZtV1VFckptVE5uYXRTcFUrY3RRc2hJLzdRc0xhSW9JaVB6RWl3V0N3UkJnTXQ1ZDVabzZmUjZzQ3lMOEJvUlNFcXFYV2tRUjdZZXZHTm1CczlYMzVqcDlIcW9WQ3BFaEVjZ0thbHk3c085ZS9laWJ2MmJ6MXJyY2JzLzJMVHBrL2Zmbmo3TkFzQkZDSEZEYVJ4REJFSWdFTUlvRFdQVWFoWFVHZzNWYXFTK3BRRUJDQW9NUkxEVXppOGlJaEt4c2JHb1hiczI2dGFyajNyMXFyZWFzYkkrdkRmRkZKVjdGSlRsVTVNN1NSMC9mdHkzUW9ENDJ2M1NGbFN2WHIycEFQN1ZvR1l3R0s2NlU1RGI3Y0ZmZi8wRlZxVkNjRWlvdjYrbzNZYkNva0lVSE0xSGkrWXRvTkdvS3dTMVAvNDRDb1psRVJSYy9XTm10OXRndGxpUVg1Q1AxcTJ1ekVDZmMvUHpHVi9xMXEyN2VISElpMnMvM0xoQldZZGUwOVJiWWdXSWdpaFNVRzh4UEJVRWtRaThRSlZ1OHo0a2xVNkhBM2E3RFZackNZb0tpMkF1S0NpVmNYQWpwZVlWZnJmYWdTMHJLNnRVajRLeTNka2REZ2RxMTY2dGFHb2VqNmRVN2VmcTFhdlZ3NFlObThvd3pKdndTem5KTStTQlZhbjhuZUFsa1prZmpJWmM1T2JsSXFrQ2h1aUxHWmxnV1BhbWpabnZPV1ZtWGtMaUZmcUwxa3hJdUJYRE5uenF0T2w4UmtiRzJsLzMvRktaaGl0Y0JqdVJVaW9TU3N2M1VlQWxabDZQaDRQTDQ4MkJJNFFnL2laSC9hc1YySXhHbzlJaXIyempsUW82U1pHS3VOUWtVQnZuWDdJVmk3bkFqS0NRVVA5QWxKR2c0QkFVRkpnckJEYUx4WUxnV3pCbVFjRWhLREFYWEJIWWJwa1pyOU85OXY0SDZ6ME42aVd2bDdWYU9hQkF2ZEVGS3BiS015RVVJQVFnY2xkNkVFTEFlTWtzd1RBc1dKYUZpbFZCNVRWZkVSVVZkZWNEbTl5aFhXNlJsNStmWHltZGQxbWZtbS95TGNNd1UvM0x0REkvRVNBSXdsMXZmbGFtSlJVWFdTcjg3RmFOV1dCZ0VJb0xMZGYwM1pMaVltUmN2QUM3M1hiRjMwOUtyb3VRMEdzRGJiMWVQenJ0N0FYWFBRM3FicEx3VEpscVBtTW5YbTdmeDFHTzh4QUorRUFZQXNJd0VyQXhZRmtHS3BYQzFndU5Sb1BRME5BN0Y5aWNUbWNwVUN2THAxWUpTYVRjZklWSXZRbGVZUmhtMnBVWDl0VlRLZDl1VWxXcTQ0cUVFTURwOUhPNVZUb1BLK0c1dTVYQmxXdTlYeGZUejhQaHNGOXhIN3ZkaG95TEY5Q3N4YjNYQWI2Qm8wK2VPdU5vMHJqaFZoOVFvMlUwT0JFQUZVV1I4RHhQblU0SFlWbVdNb1NBRUFZTVF5Q1hObm8zRlZScU5UUnFEUm8xYm54VEtNWnZPTEJSU25IbXpCbWxUWjRjL1N5cnFaV0pmc3FOSlJpSjlmWlpsbVdud1Z2NlVlbHhycEZLK2JhVHFsQWRYNnY4dVBzSGJOeXdIaWFURWZIeDhmaDQwMmM0ZCs0c2hnNFpwT3d6YWNvMFBQVFF3MzRrdkkzbG4wRE5keTVkcjFVYUdocjZ4ckcvVHRwYk5tL3l2YSsyVmdiY0FFQ2tsSHA5YXB5SGVIc3JYQVkyaG1YQk1oS3d5VnFiVm9QR2pWT3F2YTNmRFFjMlgxQXIyOHpZYnJkWFNPZnQ2MWR6T3AyOVZDclZWQUJYTk1pdmgwcjVkalNiL29ucStGb2tOemNYQytiUHhjeFpjOUM2ZFJ1VWxKUUFBT3JWcTQ4ZmYvNFZBUERTME1IVmRsMGIxcS9EWTQvM0s4Vm1JcC9Yc2lYdjRNU0p2NkhSYU5EandWNFk4ZXByWUZrV2dKZVNaOFd5SlRoeDhnUzBXaTE2OXV5Rmw0ZVBVRDZ2RHZtblkzYnAxQjVxdFJxRU1FaEtTc0tRb2NQUXNXT25meXVPUmtWRVJMeTZjdVhLa3RkZmYvMUFHYzJORWtLbzlEK1JtMkR4SE9mbEltY0lKUXdCUXlRL202UzVLY0NtMWtDcjBhSmUvZnJWZWdFM05FRTNJeU1ENmVucGxlYXB5ZFJEVW9zOCtMTGZVa29acTlYYVNxUFJUQVh3ajFkOUE2aVVieitBdXdMVjhUVTlaTkpPSXpJeUVoMDdkb0pHbzFIS3dBZ2hTbWVpNm54eWZyaHhQU3dXYzduM1o3dzlEVFVURXZEMU56dngvZ2NiY09qZ0FXemZ2ZzJBTnlkdjBvUnhhTkR3SG16N1ppZFdyRmlOdmIvdXdkZGJ2NnEyODZ6cU1WZXVYb01kdTc3RGtLSERzSGpoZkd6OWFzc3RtU2VFRU54Nzc3M28yYk1uZXZUb2dmajRxM3U0QzRLQTMzN2JqOGtUeHlNN0s2dXlZOVNMaW9vYXZtREJnc2FTNVNUVGpLdVZ1bEpLNVc3MGhPZDU4SnczOWNOVEt2WERqc0tpUXZ6MDQyNnNYZk1lNXMrZmcvMzc5eUZMT203V3BVc1krZnFyZVBhWnB6Qm0xQnNvS2lwVXp1R2pEemZpdVdlZnhqTlA5OGV1blR0dWpjWm1OQm9WVURNYWpRcW95YmxxdmwzYWZUcTBLNkJtTUJocTZmWDZLUURhVnZYbS9OdWM1b0dCUWJCWnI1OVAvdmp4WTVneGZSbzhFczNNNDQ5NnpjeCtUL1RIb01GRHF2UWJodzRld01vVnkyRXc1Q0V4TVFsanhvNUhTcE1teXVkN2Y5MkREUnZXSWQ5a1FreHNMSVlQSDRGMjdUc0FBRWErL2lxeUxtVUNBRWEvK1FaVUtoWUpDYld3Y3ZVYWlLS0lybDI3NGVHK2ZhSFZhaEVkRTROV3JWc3JtZW9XaXdVMXdzUHgzTUNCMEdnMFNLaFZDeDA3ZFVaYTJ1bHFHL2VyT2FaZXIwZkhqcDJnbmpJTmIwK2ZobDY5Kzl4MFpwYms1R1N3TEl2ZHUzZERxOVdpZS9mdXlNL1BoOFIrVXdxdzVTUmwzNy9mZk9OMTFLeFpFNmRQbjRJZ0NsY0MwTmFKaVluRHhvNGR1K2lkZDk3SmtiVTJINStiSEdBUUJVRUVJYnkzN3BFd2xEQU1DRVBBc0F4eWMzTkJDTUVEUFhvQWxHTEQrbldvVjc4KzlEb2RsaTU1QjQ4OTNnODllanlJTHo3L0RPK3RYb1hKVTZiaHhJbS92WE5zNDBkd3U5MFlQbndZV3Q1N1g1VkIvSVpvYkZhclZXSHE4SzMvbER1M1h5bXRnMUpLWG56eFJUWWlJbUl5SWFSdjFZOVpja01uaTlsc3h1UkpFL0RjczA5ajN0elp0d3pjS3FNNnZocHAwYUlsdG0zZmhUZEhqVUhObWduWXRuMFh0bTNmVldWUXUzRCtQTjZhTmdValhuc2R1NzdiamFjR1BJMHhvOStBU2RJbU16TXpNSHZXVEV5Y09BVTd2LzBCanp6eUdLWk9uYXcwcFZteGNqVzJiZDhGQUZpeWJEbTJiZCtGbGF2WGVDY2N3K0M1Z2M4akxLeUcxeWwrTVIwSGZ2c05iZHQ2NjNnakl5T3hZdVZxNkhSNlpVRWVQM1lNelpvMXI3WXh2NVpqdG03VEZoNk91eVdsUTVHUmtjak56VlY4WGFJb29rYU5HcVgyT1hMa01LWk9uZ2lPNDJDeFdQRFMwQ0d3V0x3UjJYZVhMTVBrS2RPcXBCZ3dETlA3dnZ2dUd4d1RFNk9YdERhZjBpdXdBQmh2UnppUnVGd3U0bks1d0hFZVlqR2JrWmViQzVmVGhlTGlJZ1FHQnFLa3BBUXF0UnFDSUNEMTVBbGtaR1lnTGUyMGN1OGZlcmd2RHY5K0NBQncvdHhadEdqWkVscWREaUdob1dqZnZnUCtPSEw0NXBtaWxOSnlWUVcrbXBwdkJOUzNRN3R2QkhUTm1qV1RDQ0hEYnNSTi8yckxsM2p1MmFmeDdETlBZZjY4T1hDN1hGWDYzdnRyMzhNOTl6VENwNTk5Z2JIakxoTkZtb3hHN055eC9hNXlWTy9jdVIxZDcrK0dqaDA3UWF2Vm9uZWZoM0JQbzBiWXZmc0hBRUJFUkNRMmJQd1lqVk5Td0RBTUhubjBNWEFlRDdLeUxsWDVHS2tuVDZKbmoyNFk5UHh6dUtkUkkzVHBlbitGKzYxNWJ4WDBBUUY0Nk9HK04rMzZxM0pNUWdqQ2E0VERkdjNPK3FzV2pVWURRUkFRRVJHQlRwMDZRUlRGVWtTT0FOQ3FWV3VFUjBSZzVvenBHRHZtVGZSNzRrbUZhT0ZxRzZlb1ZLcm5GeTFhTkJCZUxqZGZrMVFsWVFnalVrb1lob0hINHlFMm13MHVsNHNFQmdiQzdYWkRwVkxCWU1pRDFXcEZkblkyQ2dzdHlNM05SVzVPRGlJam95QW5CUjg2ZUFCV3EzYzg2OVN0aDZOL0hGRW9rbEpUVDhKbXM5MDhZRHQ3OWl3dVhicWtwSFZVcGZkbm1Ram93QnVWcTNiaXhOL1lzdVcvV1B2QmVueTYrUXN3RElQMTY5ZFY2YnZuejUxRGg0NGR5OTM0L1B4ODdOanh6VjBGYkFhREFYRnhwVlgrMnJXVFlERGtBZkN5UEJ3OStnZUd2endVenozN05BYS9NRkRSZEtvcUtVMmFZUGRQZS9ERmwxdVJsNWVIRFJYY3A0OC8raEMvLzM0SWMrZk9yNUJEcnpxa3FzZWtsTUpTYUVIUUxYS0hKQ2NubzFHalJ2anR0OStVb0ZCWjRCMCtmQVQrUFBvSHRCcnRkVDBZOUhvOUJnNGMrS2JCWU9oWmdiL05xN2w1L1cwTUlRU0NJRUN0MWtBUUJPTHh1QkVVRkF4ZUVIRDQ5ME00ZlNvVkRNUEE0WERBWkRLaFY2L2UrT2FicnpGazhQTklUVDJKd0VCdi80VG16VnVnWjY4K0dQbjZDRXlmTmdVQitnRG9BL1EzeDhlV25aMWRMbGZOdDFUS0I5UlFVUVRVYnJkM2xwb1ozNUJaYTdOYUVSUVVqSUNBQURBTWd4ZUh2b1NMRjlPbHhacUhSUXNYSU45a1JHaFlEWXdiUHdHSmlVbjQrZWVmOE44dlBrTm1aaWJtenBrRmpVYUQ1NTU3SGwyNjNvK2xTOTdCc1QrUHdtQXdZUGpMWHI2M3RlK3Z4NGIxNi9Ebm4wZGhOQmlRMHFRSkxxWmZRR1JVTk41NWR5a29wVmk5YWlYKytPTXdPQStIOWgwNjRyWFhSNEpTaW5GalJ1SCtidDN4eUtPUDRjU0p2ekZuOW4rd2J2Mkh0MFYzYlYrSmlZbUJJUyt2MUhzNU9kbG8yZEtiaXJMdmYzdng2YVpQc0dUcGNpVFVxZ1hBR3pXc2FIR1ZCVHUzeTRYdnZ2c1dmZm84QksxT2g3aTRPUFRvOFNEMjc5OVhhcjh0WC80WFArNytBY3RXckxybWhOT3JsYXM1NXBFamg2RlJxOUdnWWNPYmZuK2tza1A4K2VlZkFBQ1daY3RSeTl0c05vd2ZQd1lEbngrRXMyZlNzR0QrWEV5YVBQV2Fna1ZPcHhOYnRteFJBWGpscjcvK01qUnYzdnhQeWRjbVN2NDJKV0pLS1NVTXc4TGpjVk9uMDl1VW5qQU1vcUtpRUJBUUFKMU9oNy8vK2d1aUlNSmlNVU1iRjQvblh4aU1CZzBhNG1KNk9pNWxaaXJIZlc3ZzgzaHU0UE1BZ0plR3ZZaTZkYXRlVUgvTkdsdFJVVkdGdVdxVmdCb3AwNldkeWMzTmpkZHF0Uk54QXp1MHQyN1RGalZyMXNUTHcxN0UxMXUzUUtmVG9YWHJOZ0NBT2JObm9XZlBYdmg0MDJkNC9vVkJtQzVSTEQvd1FBK3NmWDg5YXRhTXg3UzNabUR0KytzVnMyalU2TEdZTUhFS2twS1RzZmI5OWFVNHBOcTJiWWNaTTJjaE16TURIMzJ5R1pjeU0yR3hXR0EwR2hBWUdJQU5Hei9HeDVzMkkvWGtDUncvZmd5RUVFeVpOaDJmYnZvWWFXbW5NWGZPTEV4NzYrMWJCbXJTL2ZCcUg2S29hTklBOEhEZlI3QjM3eDRjUHZ3N2VKN0hMNy84ak5TVEo5Q3pWeS9GSDBrSXdMQXNpb3VMc1BuVFRkTHZsR2FLaVl1UHg2R0RCOEZ4SFBKTkpxODJyTlhpazQ4L3d1ZWZid2JIY1NncUtzUytmZjlEczJiTkxwdkNPN1pqMjlkYnNYVDV5cHZHVTFmVlk3cmRidngrNkNEbXo1dUQ0YSs4ZWtzbzNmUHo4eFdBMG1nMENBc0xLOWNRNWNLRjgramF0UnYrNzdtQm1EWjlCalFhcmVKanV3NnBXNzkrL1JkSGpSb1ZXNUcvalZMS01BekR5RlJqSG84SEhNOFJ6c1BCNDNiRFlYZmd6Smt6aUlxS2d0MWhSMUZSRVFvS0NtQTBHUERISDBld2ZOa1NQUGxVYVY1Rmp1T3c2Wk9QUVlpWHg2MWFOVFpCRUpDZW5xNEVDM3dqb0JXa2RaQXlhUjJFVXNwRVIwZFBJSVE4ZUNOdnVFcWx3b3laczNENlZDcSsvZlpiREg1aElHYk5ub3M2ZGV2aTdKazA5RnpoSmV4cjA2WXQzblc1WURJYUVSMXpiV205V3EwV09yMWVNVnNEQXZUZ09RNnhzWEdJakl6Q3hBbGp3VElzREVhdjM5SHJtNHJBNkRIajhQcXJyK0Q1RndhalNaT210d1RVeWlib0xwZy9Gd3ZtejhXRFBYdmhyZWt6VUw5K0E3dzljeGJlVzcwU2hydzgxRTVNeE1MRjd5SW14cHRmMStlaGgzSHk1QWtNSGZJQ1dGYUZ4eDd2aC9yMUc4QlNwbHhvekpoeFdMeG9JVFp1V0lmYXRXdGozWWFQb05Gb3NHRGhZcXhjc1F4ZmZQNFoxR28xdXQ3ZkRZTUd2NmpNclVVTHZXYmdzMC8zTDIwbWJ0cU0yTmk0R3o0ZVZUM215TmRlQlNGQVltSVN4bzZiY0VQejJJS0RnNnU4YjBaR0JzTEN3dENqUnc4QXdQSGp4OHYxMG1qZXZBV2FOMitockl1eDQ4YmZJUC9yem02dFc3Zk9BTERDUjJzVEFWQkNpRGRHU2tVcTE0dnlQRThad3BBU2F3bmxPUTZob1dHSWpvbUYzVzZIV3FXR1dxM0dybDA3d0RJc25ucjZhYlNYSXV1QWwrSjgrZEozMGJ4NVM4eGZzTGhDYmJPeWNic21ZUE9OZ0ZiR3FWWUcxR1FHQUxsY2FqZ2g1TlViUFVGUG56NEZuVTZIUm8xVDBLaHhDcjc5dGpFKytHQXQ1czFib0poR2lwbkVNS0M0OFZ4MGYvMTFITHQyN3NEU1pTdWcxZWt3WTNycHFqQ0h3d0cxV2cyWHkxbnRBTmFyZHgrNVEzZ3BxVisvQWY2My84cDlURHQyN0ZUcHd0VnF0WmoyMXR1bDNxdW80VzJidHUwcVpIbXRWNzgrbGk1ZldlRnZzeXlMdmZzTzNGU2dyOG94LzJtOGJzUTUyTzIyS2tVcTVhcWI2NVZQUC92aW1yNm5WcXVIYk5pd0llUEZGMS9jQmkvRnJrZ0JLcldTcC9DbWdZaWlLRktCRjhBVERvRUJBVVNyMVZHZFhnZTMyd1dudzF1Tm9GS3IwSzFiZDhUR3hxRldyZHJJeUxpSU9uWHFBZ0E2ZGVxTVRwMDZWM29lZHB1MVVqL29WWnVpZVhsNUNnV1JiMXBIQlJGUStJQ2FvcTNaN2ZZdUxNdE9ySTdKa1hYcEVoYk9ud2U3M1Z0K1lpNG9RR2hvS0xRNkhlbzNhSWdmcGFqZUgzOGNnVnFsUW5UMFAydHJvYUdoS01ndnFMQzdWRVZpTnB1aDErdWgxbWlRbjUvdnpZV1Npb2tOaGp5OHQzb2wzdjlnQXc3Ly9qdU9YRVg0dW5MSGJnRDhjblZqY3l2SHJMSmpSMGRIdzNHRld1ZUFnS3FadkZYZDczcC9LeWdvNkpWMzMzMjNoUkpNa0pyQ3lDYXBuQUlpaWdMaGVRRWN6NFBqUFBCNFpBWmVGeHdPQit3MkcwcUtTN3dNdlBsR0tibS9ha25xZHBzVjBkSFIxdzlzRG9lakZGdkhQd1FMeWlYaHBxV2xoV20xMnZFQXFxVU9xbWV2M3VqY3BTdGVIdllpbm4zbUthU2VQSUhYUjNwcDNLWk9tNDV2ZCszRTRFRURzWEg5T3N6NHo1d3FPVklUYXRWQzIzYnQ4UFNBSi9IQ3dHZGhOQnF1dUgrblRwMmgwK3Z4MUpQOU1IM2FGTlN0Vng5MnV4MDh6MlBtMjlQeDBzdXZvRmJ0MnBqNjF0dFl2SEQrZGZzOTVDZTlYOHBQK3NwS3NKaGJOR1oybXhWc0pScEdYRndjS0JXUmI4eXI4TnlTNjlUN1I5QUtDQWhFY3AwYngxajdEOGVNaTQrUEgvVENDNE5xeU9CR3k0TWJReWtsb2lnUWdlZkJjYnprYi9QQTdYTEI1WFRDN25EQWFyT2l1TGdJRnJNRkpxTVIyVm5aU2wrRnlzYlJaTWdGQ0NvdFA3d3FhdkRVMUZTa3BhVWhNek5UcVFYMU5VVjlLZ3lJckxWSnZqVkdvaUdheFRETWhCc3g2TGVLU3JtNnBUS3E0OHI5TFprd1d5eCtvc2t5WWpUa0lqSXlBb20xeTNPZlpXUm13bXkrK1dObU5PUWlJaUlDU1ZmZ1l6T1pUREFZRE9CNUhsYnI3YzlXNDNLNVZ2WHUzWHM5QUllMHVRQjRDQ0VjQUo0UUloSkNSSWxhWEtZdm9scXRsMW84SUNBQWdZR0JDQTRPUm8wYU5SQVJFWUc0dURqVXJsMGJ5Y25KNVRYRjRHQ29WU3JFeHNaV3FxMWRsWTh0S3lzTDJkblpNSmxNTUp2TkZRWUxQQjVQdWRRT09Wamdjcm1ldUZHZ2RyWE8xanRKcnZhNkVoTnJJei9mQktNaFYyRTV1ZHMxTlp2TkNvSG5Ld1ExQUVoS1RJVEpkUFBHVEQ0blVSQ3VDR3F5U1hxbEJYc2J5bXRaV1ZsbmE5V3F0VmYydHhGQ2xJQUNBSGhaUHdoa2NGT3BWTkJvTk5CcXRkRHI5UXF3aFlhR0lqdzhIRkZSVVlpTGkwT2RPblZRUzBvbnVscXBFckJaclZhbHNxQXNxUG5XZ1BxbWR2aWFvRWFqc1paYXJSNTdxNXl0ZDlLaXZOcEVWRUlJV3JWcWhZc1ptYkJZekNpeVdPQnkzWjBjYlhwOUFCaVdSV1JFSkJJVHI3d2cyclJ1amN6TVM4Z3ZLS2pXTWRQckE4Q3FWUCtvcWQzSlVyTm16Y0ZmZnZubDJhZWVlaW9ibDZPa01yQlJPWkxnSmFma0tjTXdoR1ZaeXJJc1hDNVhLU0pLR2V3Q0FnSVFISnRnME53QUFDQUFTVVJCVkJ5TXNMQ3dhMUppcXJTS1pOUFROd20zZ3NvQ1gxQ1Rxd3NJcFpTSmlJZ1lBNkRWalJ6TTZPaG9HQXpHZngyd3hjZGZmVG9ESVFSMWtwTlFKem5KYjROZXBiYWIrQzhGbTVzcGhKQ1dmZnYySFFCZ0ZRQkI2by9nalpaS3BKVHdFbE5TQ2R6QWNad0NiaXFWcWtKd0N3d01SRWhJQ0pyNGtDOVVWZjR4ZUpDVmxZV2NuQnpGbjFZWnFGM0JCTzFmSGFrZGlyUFZaSURqRG5lZU8rdzJyek1VOUlaeHNmbkZMemRUZERyZGtPenM3TTZReXEwb3BScEl5YnUrZ1FSQkVJZ0ViQXB1eUIydUhCTE5VVW1KTjBxYW41K1BuSndjaGVMb2htbHNkcnU5d253MVg4SklHZGg0bmk5bmdtWm5aOGVxMWVyUjFUV1k5OTU3TDR4R0k0d21FNndseFhja05ianNERTFJcUhtbitWYjg0cGRTRWg4ZlAyamp4bzJwUTRZTUVTUi9tK0JybHBZMVNhWHFCT3BMUkdtMzJ4V3RUUTRzaElTRUlEdzgvS3FxUEs0SWJHWHoxY3BFUG4zejFTb3lRVWxNVE13b0FQZFY1MkRHeE1SY2RTOU92L2pGTDlWaWtyWVlNR0JBL3lGRGhud0FnUGN4U1FYSkpCWGhaZDFWVEZLR1lZaEtwYUl5QzRodllLR29xS2lVcjYxUm8wWlZCN1pNbjZKVFg4blB6OGVaTTJkS01YZVU5YStWRFJ6NGNxeWxwYVgxek1yS0d1Mi8zWDd4eTEwbEwrL1pzK2RvdDI3ZERzdmdCaWxTS2hmTFMwMWc1S3A1aFZQdWN2ZXJ5NlpxV1RPMXFpMzhWSWxoUDVSN2srTUY1Ri9NQW5FYVFOeG1FRTh4Q0djREk5aEJCQmNndUFEQjQ5MUVqbEJSQUNnbDhqYjQvOXF3OWFQM2pQTGZZNy80NWU2VGhHYmkvOVZMcnZIMytZdUZQQUNCQUFKQVpiT1VnUmZOQUNxQ2lqeUY2Q1lRWEJTQ0F4Q3NJSUlPakdBQjRmSkJQTGtnN2t3UTV6bkFsb3I0NUZwUXEvNjU5MFdGd1lPc2JBc01wbUtZTFRZVUZUdGhzN25nY0xyaGRISnd1emw0UER3OEhBK09GOER6SWdTQlFoUXBSRW9KQlpqM2x3MGVDZUFCL3kzMmkxK3VUU2k5YzgrZFpabXVoL2RNZndSeUlNRWJSSkFEQ1N5VmlDbEZrVUlRS0hoZUJNY0w4SEE4UEI0ZWJqY0hwNU9EdyttR3plWkNVYkVUWm9zTkJsTXhMbVZWclZLbm5JK3R1TVNKM0x3aUZCUllVVmprZ05YcWhOM2hCVFdYbTRQYnc4UGpFY0J4QW5oZUpMeEFJUWlVaUpRU1VCREx4WGNic0N6emhuOXErc1V2VnljaUJReVdTSmdLd3lDSUxHeDNkanJpb0FVTEZoeVpPSEhpUmE5SjZnMG1lRTFTaUpJRlNrUkt3QXVFY2dKRFBEeEwzWndLVG84YU5wY2FKVTR0Q20wNkZGajFNQllGSXRzY0JFTnhDUEpLNGxBbmdVTmNlQUVxcTRvc0IydzV1WVV3NVpmQVVtaEhpZFVKbTkwTmg5TURsOHNqZ1JvUGp1UEIrMnByRktBVWhBSk1TSWorTlFBSi9tbnFGNzljSGFnZE8xY2ZZTU1RRkhKbjk4bVZwR1pDN2VUSEowNmN1Qm9BRDIrRVZINFZRUWdGdkczOENDRWdVck5sSXRFZHNTbzFWQ28xVkdvTjFCb3RORm9kdExvQWlDUVF4VFkxOG9vU2tHY093NzMxejFjSWJxVk1VV04rQ1F6R1loUlliQ2dxZHNCcWM4SGg4TURwNHVCeXk2QW15Q1lvNGIwbUtLRWlKWlNDT1BKV2RDZUV2UEp2bW5EanBtM0IvWDNmdVdHL3gvTUNSazMrQXRIMXhpRzA5cHNZUG1vVEhBNlBmMlhmNVdJb2pBVFlNTVRFeHY5cmtzNjFXdTJnUGIvdWE0N0xWT0lhU3VGREplN05uaEJGa1FpQ0FGN2dDYzk1QXdlYzUvL1pPKy93S0tvMml2OW10bVZUSUUxNkNVaEhhVkpFMEFBZlVrUkJCQ3NsSUFncUxZTFNsZDZEOU41RXBTZ0lpaUJLRVpBZWxDSUlVZ1VFRXRKN3NtVm12ajltZDVKTkl5Qk4yZk04KzBCMlpuYnUzcDE1NTIzM0hDc1dxd1dMUThaUDFUNUlKRDR1anVTVUZIUTZBK2dLY3pQZUw5ZHp1eGkyR3hFSlJNY21rNUNnR3JYVU5BdnBHZGJNdkpyRHNObnRzbUMzTzBKUUdVRUJBUkNOUnNQNzdrczBmd3diczVGTlAvek91czk2c1dsMUgzYnUrWk4rZzllNkorWVJSMVI4b2YrY1RpNUF1ZkxsTzJReGJBWlFER1NxVzRuTzFqQkpsZ1hKTG1HMzJ3V2IzWlpaRmJWbVZrVlRVbEpJVEV3a0xqYVd5SnVSZVB2NDN0cXcvWDA5VGcxQjQxSkpURW9qSmRWQ2VwcVZqQXdiRm91aldKRHByU0ZKTXJLc09Bc2NZa2JVdkRjRWdSZmRsMmplU0UyMU1HL3Bic0xHZHlDNGNTV0NHMWRpOGF6T3JGeHprSmhZTi9YUW93cEZBVW5TMzVHbmR1YjBId3dNdmZjcDdUTm5UaE0yYllyR2FlakV4bzNmRU5MbExVSzZkbklSNUltT2ptYmdCd040dTN2WGxpMWF0bXBNRmlweFJWSFVJb0tpaUE3bUh4UkhxNGNrMmJWMkR5ZkZVWWFqNVNNMU5aWGs1Q1NOVWp3eE1RbTdyTSsxMENJQ1dHMTJOUVNOVFNFaEtZM2tGQXRwYVJiU25VYk5XVEN3UzlqdGttQ1haQ1FaeDdJcHhJOC9hcTB6NkhYdlBlZ0w1T25ta3drZDloWEJiY0lJcWpHY0p4cU80ZnV0SjdUdGRadE1aUGpZalZTdFA0cmlsVC9pN1BsSUxCWWJZeVp2cG56TkVYZ1U3VU85cGhQWnNkdFZLTmRtaytnZCtpWGVKZnRUdlBKSGZEcHZlK1lQR0pQTUs1MFg0bGYyQTd4TDl1ZUZWK2R3NFZLVXRyMWoxMFhVYlRJUmdHTy8vMDE2dW8zZ1JwVzA3YzgyVkVYdkQ0WmZkTi9oanlnRUFWTFNoRHM2dG5LVnFvd2FNL2Flam0vK3ZMa3NXN3FFU3hjdmFpU3VBRmV2WG1IRCt2VXNXTFNVWmN0WGN1TEVNWTA4ZGY2OE9UUnI5ajlXZnI2S2Q5OTcvMVVQRDdPSE14ekZVU0VWQkVFSE9JMmJ5dHNtU1VpT1ZVdzJtdzJyTFl1eWZIbzZxU21wSkNhcUlXbDBWQlFKaVZLdU9UWTl3STBiQ1VUSEpCT2ZrRXBTa2xvRlRYTzBkbGlzZHF5YXB5YmhxSUk2dkRVMURQMTQ4RXU5S0tDQys3M0dnbVcvc0hWOVA1bzlWNFhOUC83T0sxMFdjbmpuVUdyWFVCYzd6NWkvazVVTHVtRXk2cWxVb1NnOSszM0JqenYvWU9HbmIxR3BRbEdXZnI2UEYxNmR3L0c5STZsV1JlWHJPbkQ0SXVYS0JuQjB6d2lPbnJoS2ozNmZVOGpIVE0rdWpRa2Q5alVXcTQzd240Y0MwRy93VjRTODl4bjdmMUlabWpxMnEwTjhnbHJldWg2UmdOR29KOEEvODhsc01PZ0k4UGZpMm8wRTl4M3VSZzdFeHNZeWNjSTRZcUtqRUVTUjk5N3JRNE9uRzNMdDJqVUdodmJIWnJQaTYrdkhpcFZmWktZN2huekVqUnZYQVZWMHlkUExpelZyMXdFcXJmK2NXVE5JVEVyRTM4K2Z3VU9IYVZvV0FPdSsvb29ORzlacit3UDBmS2NYUnFPUnNHbFRYTWIyKzRrVFBGVzNMcDZlbnRqdGR2eDgvVGh4L0RqMTZ0WG54SW5qZlBDQlN1amo2K3RicjBTSjRpMHVYYnEwR2JBNVhsb2hRVkVVMlJHU09sWWtTT2gwZHV4Mkd6YWJIcXZOMGFpYm5rNmFTUTFKRXhJU2lJbU53V1RJdmFkTm41NXUxWHJXRXBPeVZFRTFvK2JJcXpseWE0NFExT210Q1NmMmZWeElweE43UFN3WHdsc2Q2OUhzT1pXQThzVldOV2plcENvTGwvL0NvcG1xOW1XYkZrL3lXbnVWYUNRdVBwWFBWaDlnMVpJZXZOUmFWZjJlTnE0amgzNzlpeW16Zm1MbEFsVTV2VmpSUWl5YjB4V1R5VUNsQ2tYNTdmZ1Y1aXplUmMrdWpibDhOWmJTSmYwb1dkd1BUMDhqeStkMjVkcU5lRzA4YjNTb3AvMC9MZDJLaDRjK2x5U3JIb3ZWN3I2TDNjaUJyOWF1cGthTkdvUjBlNXRMbHk0eGY5NGNHanpka0ZLbFN2SDErZzJjUDMrT2llUEh1Und6YWNvMEFCSVRFK2o5VGc4K0dQZ2hvTXIyVFJ3L2x2RVRKMU84ZUhGKytuRXJDK2JQWS9TWXpPTnIxcXFWZzNrNEw0SGx4TVJFUER3OGlJNk9adEtFY1VpeWhJOGpUNWlZbUlqSnc0UHZOMzNIamgzYjhQVDBmTFZIejNmMkxGdTZ4T28wYkk1VkNaSWozNmJJaWlJSWFraXEyQ1c3WUxQckZMMHpKRFdvSVdsNmVqcXBxU2xxU0JvZmowRXZrcDR1WXphN2psRzhFYW1Hb1BHSm1UMXJHZW1aQlFPYnpkbXpsdFZiQTluaHJWV3RYTHduVU8xaHVSRHExSFNsb2FsZXBUaW56dHpRL3E3NGVPWkM4ek5uSTVCbGhZYjF5cnNjMC9qcEN2eHhKbE5YczI3dElFd21nL1ozL2FmSzhlZTVTR1JaWnNpQWxuei80KzhFUGo2UU5xL040YnNmVGxDOVN1N01yR1lQQTFhcmxPTjlpOFdPbDZmUmZSZTdrUVAxNmpkZzU0N3RyUHhzQlphTURNS216eWpRY2JJc00yYjBLTnE4MkpiNjlkVmc2cSsvTG5IdDJ0OE1IenFZN2lGZFdMMzZTNkp1dXVvTFZLcFVtVmM2ZEN6dytFNmYvb09SSTRieVR1OTNhZHJVdFNkLzBvUnhYTDc4RjJIVFoySXltYXAwNjk3amVWd0tDWTRLcVpvU0UxQzlObVJaUXJKTFNIYTdReXRCclpKYUxSWXlMQm1rcDZWcmhZVEV4RVJ1UkNibTlOalVuclVVa2h6ZVdyclRXN000UWxCbno1b2tDNUpkOWRhY3piaG53c2Y0NlhSaXo0ZnBRcEN6YVZ0bVdPem9kSm5GMzZ3R0pMdVZ6L29aV1lWK2pkbmNYYjFlUks4WEVVV1J0aS9VNVBxWktYeS85WGQrM1BrSHc4ZCt5L3hsdXptOFl4aWUyWXhWcVJKK1pHVFlTRWhNdzdld3A1YS9pNDFMcFdSeFgvZGQ3RVpPdzFhdlBuUG5MU1Q4U0RpZnIxeUIwV2hrekxnSnR6eHUyZExGZUhoNDBMbEwxeXk1WWh2RmloVnpDVnYvQ1FvWExreEdSZ1poMDJkU3FGQWhUcHc0VG1GZlgyM2JNNDBhMDZKbEs4MWJMRjY4K0t1OWVyMjdjL0hpaGRZczRhaWRMTHh0TGw2YlhSSjBkcnZpVWlXMVdFalBTQ2MxTlkzazVHVDBPb0dvYUpsaVJRdmg1V25LOU5oaVlwTkpTRXhYZTliU3JWckJ3S1pWUWVWTWIwMVd2VFZuYnUzeGNvKzlEVHorTUYwSTRVY3Z1L3g5Nk1nbGF0ZkluVTIxWXZraTZQVWlCNDljY25uL1FQaEZxbFRLekR1Y3ZlRDZWRHQrOG0rcVZWWUpJWWVNMnNENWkxRjBlZU5wVmkzcHdmNmZQdUxVNlJzY1A1bVRRNnAyamRLWXpRYjJIaml2dmJmdjBBVkVVZURwYkY2akcyNEFUSm80bnZBajRUUnYvanpEaG8vazBLR0RMZy9kM0xCdjMxNzI3TjdOOEJFZnV3Z1dWYWhRZ2FTa0pIN1pzMXZMdDMyLzZUdVhZOCtmUDhmR2pkOFVhR3hQMXFpQjFXckZaREloU1JJSEQreW5aaTFWeTdSV3JkcmFPSS8rOWh0QlFlVXdtVXpsKy9UdDE1eHNSWVRzWHB2czlOclVRa0ptbGRTbUNpOWJNakpJVDFkemJTa3BLY1RFSmhONTA5VnIwOGNucUNzTVVoM2Vtc1ZpVTlkc09VTlFtOE5iazF5OXRkLzJEUGZSNmNTM0g3cWN4SVpmZWFiKzR6emZ0Q29yVmgzZzVPbnJyRnJTSTlkOWZYdzg2TmVyR1lOR3JzZmJ5MFNsQ2tWWi91VitEb1pmWXVyV0Q3WDkvamh6ZzRYTDkvRHUyOEVjL3ZVdjVpemF4ZEk1WFJ4R0w1SStINjVoWHRpYkJQaDdzV0xWQWJ5OVRacGhYUHZORWVJVDBuaXZSekJlWGlaNmRHbE0zOEZyOGZIeHdHalEwenYwUzdwM2VnWi9QeS8zWGV4R0RuVHUzSld3c0Ntc1hiMEtXWllaT09nalJGRjBLUjRrSmlieVdzZFhxUFBVVXd3ZE5vSzVzMmVTa1pGQm4vY3lVOTl6NXkvQ3g4ZUhTVk9tTWZQVDZTeGF1QUJQVDA4R1poTlNQbmIwS0JzMnJLZDkrdzYzSEZ2WnNrRzBiOStCZDN2MVJFSGgyV2VEcVZldlBnRHY5K25INUVrVFdQZjFWNWpOWm9ZTUd3NkFuNzkvaC9hdmROaStjY00zTnNEcU1HNTJWR1VybFcxWGJkcDE1TnBVcnkxcmxkUml0V3E5YlRvUjRoTWtvcUtUS1Y3VVY0dVNoRm1UWCtWR1JEeFJNY25FeDZlU21Ld3VlazlOczJwTHFUSXNrbUMxU3RqdGlpREppcWdvaU5ibytmMTBPakhzWWJvSW5tNCttU2VxbHVEQ1g5RWNPbktKR3RWTE1YMThSNTU5Um0ycHFOdGtJaSszcWNuSWo5cG94MWl0ZGthTy80NHZ2anBFUW1JNnRaNHN6ZmlSYmZsZnNNcjk5T0hJOVp3NUY0R2ZyeWMvLzNJV25VNWthR2dyK3J6VEJGRGJQUVlNL1lydHU4NlFuSkpCblpwbG1EYTJBNDJlVm1YUU9uWmR4T1dyc2Z5NmU3Z2puMllqZE5qWHJQbm1DS0lnMExGZEhXWlBlUU1QRDRQN0xuNkVzZWQ0NWYrazZscHVpSStQbjFqamlhcmZBeWxBS3BBbUNJSUZWZDNLN2xDMWtuVTZuV0l3R2pFWlRZcUhod2tQc3hsUHN5ZGUzbDc0K0JUQ3Q3QXZvZ2dOYTBtVUQzcU1hbFZLVUQ1SXBUVVN4bzk4eVhVWmxjTjdTMDJ6a3A1aEpTUERKbGlzRWphYklraVNMTWd5WXVmWDYray9XOURqTVBEa3cyYllXald2enVpaEx6MnlONGlpZ0NDNHYvdkRNbWNGL2V4SHliQXBpdkpIbzRZTjN2Lzc3NnNwRHVPV0pnaENPbUJCbGV5VFJGR1VSVkZVREFhRG9oSlBlaWdlSGg2WVBjMTRlbnJoN2UxTjRVS0ZFUVNGZWsvS2xDbmxUNlVLeGFqNVJHazhQQXpvVXh5NXRZd01HMVpMMXRVRldSYTVaK3RiV3pxblc1ZUh6YWhsaCtEYisxLzNnMGVlbTBiUklyZS9yRVpTOUZ5T3FreDhraDVKRnNsSWZ6UlZxanpNWm5TaWduOGhPMEZGemlJS2ViZlF5QXBjaWFsTWJJSUpTZGJkc3psVHh5UVRXTmhDMmNmTzN0TElYYjkyN1ZINHFhb3ZXTGo0MlJmYnROcnB5TFhaRkVXeGdXQVhCTFdRSU11eUFDZzJteTNUSU9KWTZTU3JLeFU4VENhMXVUbEZJakVwazlvb3FFd2crdFEwaTRPNUkxdHVUWktSSkZtUUpNV3h5a0I5b1NEcTlib3VELzFUSVdIUkkzRXpwOXY5K1AxQ0tmUUdEM3dLdTNWRlUxTlRpRTlPSWlhaEtqVWZ2NHBKbjVpclVmdjEzQlBvOU9iN01tZXBxU25FSmljUkZmOEU5U3FkeXRlNGxTejFhQkRqRkM5Um9nM3dpOE93V1FHOUlLREgwZGVHcW13bHFNdlFCUVVFUVJRRVJSVFZiZ1JScDhOaXRTS2drSm9ta1p5Y1FYeENHakV4eVpRcTRZZVlubTVUdlRXclN5TXVkcnVFSk1scUpkUkJucVNBa0haemJtdWc4Y000V1lkMkRIM2t3dERJdUNMb0RSNy9LVmFJZndJdkwyK0tGaXVCVHU5QlJGenVpbCtYbzZ1aDA1dnYyNXhsanNuTWxaakt1QUdpS0RiY3MvZEFMVEpKS0EyS291aFFLNlNxTlZNVUZFVldLNlN5TTRyTXVwWlVsU1JJVDdlUmtwcEJZbElhc2ZHcFJFWWxJYVpyUEd0cXo1ck5MbUdYSEViTkdZSm1NbmdJUm9QdVRmZlA4dkFnTnRIMG4yU0YrS2Z3OWlsRVRLSXAxMjF4aWZvSE1tZmVQb1dJU1RDNWZ4d0hTcGN1bmIzMXc4bjhvWE95Zmpob2paQWx0ZjNEN2xna2I3ZlpzRHBhUU5JenJLU21XVWxPeVNBaElZMlkyR1QwRmtzbWVhVFdzNmJtMWdTMWIwMXhXRTZFaENzem54UUU0ZFhiQ2drZjRXVDJ2WjRmU2RZaHlUcTNwNWFIbDVRWUg0c3NneWk2enZlRG1qTjFUSEYzOUpzbkpTWnkrYStMcE9ham9ldmw1VTFRdWNjcFZMandYUm52dlQ2bndXQm91L2FyOVYrOThYckhDMlJTaCtzRlFiQTd3bEZabGV4VEJFbVNGVW1TQk1rdUtVNnZ6VzZ6QVFvV2kweDZ1cFhVVkF1SnllbkV4YVdpVjNOcldaZE55UTV2VFZhTEJnbzQrZGE4dkV5dkYyVEEvekdLNDN2N0ZQY0VuVTZpaUc5Q3ZsVEh1VUVuU285c29hQWdTRTlQZHpGcW9CcVVCemxuNmVscGQvUWcrK3ZTQmRMU1V2UGRKelUxaGN0L1hhUkdyVHAzWmF6MzQ1eTE2OVIrRHJpYUpkZG1kWGh0a3FLb3VUWkZrUlZWeFVweXBUYXkyeEZRc0ZnbE1pdzIxV3RMemlBK01RMTlGdjBDTmE5bXp5d2F5QTVYRUFWaDgxZDlQRVJSZUwwZ1J1MC9SbkY4ejVHYW1rSkVnbCsrVk1kM2l1M2JmbUxGOG1WRVJkMmtSSWtTZlA3bEdzNmZQMGVQN2lIYVBrT0hqK1NGRjlxNGY0aUhHTGN5TUZtdnBYL1RPVDA5dmRxMGU3bjkrdSsrM1dqSnpMVmhFd1JFVUJ5NU5rRlFGQmxKa2hWSmxnUzd1a2dldTkyR0FGaXRNaGtXRytucFZsSlNNMGhLU2tlZm5VRFNuaVczbG5YNVZQT20xVjRGU3Q5cW9Ga3BqdDBvZUlqaTVlWE56VWlabS9GK0ZQT1B2eXVmZStQR0RhWk1uc2lZY1JPb1Y2OCtTVWxKQUZTb1VKSHRPM2NEOEU2UGJ2ZnNleTFmdHBSMkw3Y25JQ0FneDdobXpaak95Wk8vWXpRYWFmNThTOTU3djQvR0tuSHQyalhtekpyQnlWTW5NWmxNdEdqUmtsNjkzOHZCT25FM2NhdHpQdGU0SVFhREFVRVFDUW9Lb251UG5qUnExTmg5OGY1emxCcjU4YWdHMzMyN2NSZmFFaXRGRDBLbVBvSktJYTVremJXcGkrUWxRTUZxazdGWTdHUlliS1NscTdrMjBSbUNTcEtjMmVJaFo3WjQ0R3p4ME9rS3RPVC92MHB4ZkYvQzBueW9qdThFWi84OFEyQmdJSTBhTmNab05CSVlHT2dJeHdSTUpoTW1rOGxsTGVIZHhtY3JsaEVYRjV2ai9kR2pSbEt5VkNrMmZyZVp4VXVXYytqZ0FUWnQrbGIxK0dXWm9ZTS9wRkxsS256NzNXYm16Sm5QbnQyNzJMamhtM3Myem9LZWMrNzhoWHkvWlN2ZGUvUWtiT3BrTm55ei9vRmNKNElnVUtkT0hWcTBhRUh6NXMwcFVlTDJuQWhKa3RpL2Z4L0RobnpFdGIvL3ZpOHBnYkZqUnZIV0c2L1J2VnNYenB3K3JXMzcrK3BWeG84YjA0d3MxVkVjNjBlZERMdVNKQW1TSkFtS0lndVNhdHdFcDdDeUpLa1JwOVZxZC9IYU5NUG0wdDRoT1NtLzFSYVArS3N6bmhBRVd0N3FDL3dUaW1NM1ZNOHRMNnJqMjhIeDQ4ZDR1VzBicGsyZFRHUmtKQyszYmNQTGJkdXc4ck1WQmY2TVF3Y1AwUG10TjJqZUxKZ2UzVVA0NDlRcGwrMTdkdThpcEdzblhtajFQTjI3ZGVIUXdRUGF0bjU5MytmbHRtcG8rOEdBL3J6Y3RnMTkzMzlYTXlMQndVM3BHdElOazhsRWthSkZxVnV2SHVmT25nVWdMaTRPUDM5L09uWHVqTkZvcEZUcDBqUnEvQ3gvL25ubW5zMzc3WnpUYkRiVHFGRmpoZzBmeVpMRkMxMFlaZThYeXBVcmgwNm5ZOXUyYmV6ZHU1ZWFOV3RpTUJoeU5kaTUvWDlBLzc3OHNtYzNaODZjUnBLbDJ6cDM0OGFOMGV2MWVUNGdjdnQ3M2RkZjRlbnB5ZXExWHpONDhGREdqeHVENHJqSVo4Nll6c3Z0WDJtMlp1MjYwbVRUSHdWMGdpQUlvaWc2MTQ0aWF6VUFTWHM1cWRXc0Zqc1pHVGJTMHF5SXpvS0JYU3NZT0xVTXRLS0I0TzNsMGI1Z1Q1STdwemgyUTBWS3F2Q1BjMnkxYXRYbTIwMWJHQkE2a0pJbFMvSHRwaTE4dTJrTElkMjZGK2o0aXhjdThQSEk0YnpYcHk5YnRtN2oxZGRlWitBSC9UWHVyaXRYTGpOKzNCaUdEQm5PNWg5KzRxV1gyakZpeEREUzB0U2svSnk1OC9sMjB4WUFac3lhemJlYnRqQjMva0lBUkZHa1UrY3UrUHFxbnVsZmYxM2l3UDc5Tkdqd05BQ0JnWUhNbVRzZkR3K3pkbk1jUDNhTUdqVnEzck01djVOejFxdmZBS3ZOcGhuays0bkF3RUJ1M0xqaGNDWlVpaTAvUDFkUC84aVJjRVlNRzRMTlppTXVMbzUzZW5RbkxrNFZHLzUweGl5R0RSOTVSdzVJUUVCQW5sNytod05ET1g3c3FHYk1Gc3lmNTdpZXptdS9iOVZxMVRFYWpWeTdwbnFLNTgrZm8wR0RwNmxWdTFhRFhMdzJFUkFWQlVFUUJMWHRROGxhUkhDMGdOaXplbTEyMGpPc2lIWkoxc1JabkdHb3JHU3llS0FvZ2lnS0wvK1RIMkxRd0ZCZTY5aWVrQzV2MGJYem0yelovTDJXMTNpdDR5dTBiL2NpM1VQdTdXS0c3aUZkdUhqeDluUUZ0djMwSTY5MWZJVVhXcmRnOXF5OENmNTI3TmpPNkU5Ry9tZU02K2JObXdodTBwUkdqUnBqTXBsbzFmb0ZxbFN0eWphSGtFZEFRQ0RMVjN4T3RlclZFVVdSbDlxMncyYTE4dmZmVnd0OGpqOU9uYUpGODZhRWRPbEVsYXBWZVM2NFNhNzdMVnd3RDdPbkp5KzB1WDg2UVFVNXB5QUkrUHY1azVKNi8wVjRqRVlqa2lRUkVCQkE0OGFOa1dVWms4bTFQNjV1M1hyNEJ3UXdadlFuREJvNGdQYXZkTURmMzE4Ny9sNmdUOS8rVEp3d25ybHpaclAxaHkxMDZhb1dxQjZ2VUlGZjl1eEJsbVV1WGJyRXpadVJwQ1NyOC9iNDR4WFlzM3NYWGw3ZXpiTVpOWDJtY2N2c2FWTmtSempxMUVlUVZNZE1WWktYc0ZodHBHZllFTE1ZTmExZ0lDdUFvMmlRR2pHM0dYZUJJZmVqSWNOWStjVnE1c3hid09jclYzRHAwaVdOM25ocTJLY1A1UTNlb21VcnZsNi9nVzdkM3VaUlFtUmtKTVdMdStadHlwUUpJakpTWlJYMjl2Ym10OTkrcFhldkhuUjY4M1c2ZGUyY2F5aVNINm8vOFFUYmR1emlxM1ViaUlpSWNGRTRjdUx6bFo5eCtQQWhKazZjbkdmNGM3ZFIwSE1xaWtKY2ZCemVEeWp0VXE1Y09hcFdyY3IrL2Z1MW9sQjJ3OXU3OTNzYy9lMVhURWJUUDNvd21NMW1PbmJzU01lT0hURVlETFJyMTQ2T0hUdnkyR09QdWV6M2VJVUs2ajN6MVJwNjlYNlhRb1hVWFB1cnI3MkJUcStqZTdjdWZQSDVaM2g3ZTJQMlZMM2pRUjhPNXVlZmQvSjI5NjVWdW9hRVZIRVlzNng1TnAyaUtDcFhtM00xZ2l3ak9VTlRXZFk2T2xTdlRjSmlzYUdYc3F3eWNEVGtPc05RQU1GazByZTltejlJNGNLK1BQRmtEUzVlT0UvNThubVRLeVltSmpCNTRnU2lvcUt3MjIxMDZ0eFZZK004YytZME0yZE1KejB0alNKRml6RjAyQWd0TWI1NzE4K3NYdjBsbG93TXFqL3hKQjhNL0ZETFArejZlU2RqUjM5TWVub0dmZnYxMTd5RWI5YXZVNVBYaWtMVFp2K2pXL2NldC93ZVI0NkU4K24wYVlpQ1NNbFNKZkUwZTJyYjhodEQ4MmJCOUIvd0FVdVhMRUpSNFBzdFd4ODZ3MWEwYUZFaUl5SmMzcnQrL1JxMWE2dTlTbnQvMmNPcUw3OWd4c3pabENxdEZzcWZhOXd3MTVzcnU3R3paR1N3ZGVzUHRHNzlBaVlQRDRvWEwwN3o1cyt6Yjk5ZWwvM1dyL3VhN2R0K1l0YWNlWGV0NGZSV3VKMXpIamtTanRGZ29GTGwrNzlFeW1xMVlyZmJPWHBVRGZ0ME9oMFdpOFUxcFpHU3drY2ZEYVJ6bHhET25mMlRLWk1uTW5UWWlEc3FGcVducDdOK3ZWb29hZGV1SFQvODhBTlpGNmRualhCMjcvcVo4Uk1tTVQxc0doTW1UYVpTcGNxWXpXYUdEaHNCUUZKU0VtKzgxb0VTSlVvQ1VLcDBhVDZkTWN0eDMreHErUG5LbFg5a05XeUNJRGpDVVVYSUducXJLVE1KUlJHUUpBVzdYZlhhYkRZN0ZvdGREVVZWYjAwV0hFVURUYWhGVVJSUkVJUzdHZ05FUjBWeDZ1VHZWS2xTTmQvOXpwMDd4LythUDgreUZTdVpNM2NCczJiT3dPcFlHemJxNHhHRWhnN2s4eS9YOE13empWaXlhSUdXcjFtL2ZoMXo1c3huNVJlckFmaGh5MmJ0TTMxOGZGajV4V3BHanhuSC9QbHpBWlZZYi9QbVRTeGN0SlFseXo3anQ5OStZOWZQTy9NZG04VmlZY0s0TVl3YVBaWXZWNitsVE9teTJyWmJqY0Z1dHhNVkZjVzZiNzVsL1RjYkg1anhjblp2QXlpeWpOMXUxNHhRbXhkZllzK2VYWVNISDhadXQvUHp6enY1NDlSSldyUlU2MGV4c2JFSUFvZzZIWW1KQ2F4ZTlhWGpjMXlySHNWTGxPRFF3WVBZYkRhaW8xUkpRcVBKeEJlZnIyVHQydFhZYkRZU0V1TFp1L2NYYXRTb2tSa0tmNytKYnpkdVlPYnN1VnI0ZE0vRDd3S2UwMkt4Y1BqUVFTWlBta0R2ZDkvSHkrditFNFJHUjBkckJzcG9OT0xyNjB0Q2dxdksyY1dMRndnT2JzcGJuVG96OHBQUkdJMG1MY2QycjNEeTVFaytuVEdMNTRLYk1PTGpUL2p0MXlNdTI1T1NrcGcyZFRJdnZ0UTJSemo4OTk5WFdiWjBjYk1zSWFoV1JIQjRiS0lnQ0M3THJGUWFOZGxSSTNETnRlblZTcWlzZVd1eXltRXBBRUo2NUx6V1FNbTc4YVduaDAzRjdHSEdhRExTcDI5L1NwY3BrKy8rTld2V1l2bXlKV3piOWlNNm5SNkxKWVBrNUdRUzR1UHg5dmFoYXJYcUFMelV0aDFObXpVRDRQRGhRMXo3K3lydjluNUhlN0o1ZS90azVoMGM3SjVWcTFYVEV1SGg0WWQ0L3ZtV21NMnFhL3ppaXk4UkhuNllwczMrbCtmWXJsNjl3bU9QRmRHTWM1VnExZGozeTU0Q2pRR2dhMGkzZTVibktBaXlOK2hPbVR5UktaTW44bnlMbG56OHlXZ3FWcXpFcURIaldEQi9McEVSRVpRcFc1YXBZWjlxTW0ydFgyakRxVk1uNmRHOUt6cWRubll2dDZkaXhVckV4YnZlT0FNSGZrall0S21zV0w2VU1tWEtzSFQ1U294R0kxT21oakYzeml5K1dyc0dnOEZBY0pPbWhEakNmVW1TbURaVkRRUGZmTjIxdytqekwxZFRyRmp4dXo0ZkJUMW52ejd2SXdncWMreWdEd2ZmdFQ0MlJRRnZ6NEtYd2k5ZnZveXZyeS9ObXpjSDRQang0MWl0MWh6M3c2MkF1UUFBSUFCSlJFRlVUODJhS2syM1hxOW5VRGFtM0R2RmQ5OTlsM2N1UGNzNWF0V3FUYTFhdGJXL0Z5OWF3TzVkdS9oZjgrZHpGTEg2OTN1ZmxPUVVRcnEvWFdMMDJQRlBObm11MGEvWjhtdzJRYlhrem5CVVVZc0lNb0tnZW15U28xYmd6TFhwSmFmeWxIUDVsSnBiQXhDTVJsM3J1M1h4RFBwd3NFWWJYQkNzWGJNS3U4M09sS25URVFSQmF4OXdoamhPR0F3Ry9QelVKNnpOYWlPNFNWTk5iaXkveEcvV0VDbXJkeTRJZ2xhS3ppKy9rbGV6YUVIR0lHWmY1M09QMExKVmExcTJ5dmtUVnF4WWlWLzJIY3ozMkVhTkd1ZDU0NXBNSmtaK1BNcmx2WGQ2NWVTL3E5L2dhYjVldnlISCt4VXFWbVRtN0xtNWZyWk9wMlBQM2dQMzFkQVg1SnkzbXE5L0FrRUF2YzVPYW1wS2dTcVZpcUp3N05peGYzemVWV3UrdW05ejNLdjNlL1RxbmJ1bSt1dzU4N09tS3VvQng3T0ZvN3BzNGFpZ3lMSWlTWFpFUVVTU0JNZmlna3l2VFpTZFlhaWpHcXFTdVdsaGFHc2VFS0tqWS9EMjhVWVFCSTRmUDBaU1VoS0tvbEM2VEJtU2s1TTVmLzRjQUQvOXVGVVRjcTFYdno0Lzc5eko5ZXVxV096T25UczRlZkwzZk05VHQyNTl0bS9iUm5wNk9qYWJqUisyYkthK296U2RGOHFXRFNJNk9sb3J1VWZjeUpUM3U1TXgvSk1udlRsTGJzK043RWx2enh3OWdROTZ6bkliRTBBUjN3UlNrL01XemZiMExGaklXOUQ5N3VabjNjMXptanc4bW1UejFwdzliYUxqNVNEbFVBUkpraEFFdXlBN284NHNYcHRlQzBNVkJTVkxHSm9XTWJmcDNRcEQ4MEorZ2hTdnZmWTZZOGVNNG9jdFc2aGNwUW9WS2xZa01TR0J3TUJBeG93Yno2ZGgwN0JZTEFRK0ZzaVFvV3Bpc2txVnF2VHJQNENoZ3ovRVpyZFJMcWdjZzRjT3kzY01UOVd0Uzh0V3JYbTNsMW93ZVBhNUpqUnQya3hMaGk1ZHNwaVUxQlJrU1dMZjNyMTA2UnJDUzIzYk1YVDRDRVlNRzRLZnZ6OTZ2VTRySHR6SkdQN0prMTRVNVFJLzZSOGxwS1lrSTRweWpwNUFkYzZrQnpKbnFTbko2RVFwMXo3Rll2NXgzSWoxSnlwU3djdkhMOGZZeXBXdmNNdEY2WjZlWHBRclgrR3VqZmRCbkJNb3NYM0hyc3JQTjI5NmdpdzBSazZqcGhvMkJGbVdIZTRiU0xLZ2RYWTRLNlJDa1VBekZxdGRzRnBsN0pJaXlLcFlpODRXczJDU0tBb2YzTzZvSGlYdTludUJpK2YvSkxoV3dacytMMGRWSmphNWtIdHRiamJjakx4QlFLRWtnaDdMT1plWG95c1RtM1QvNXl5L01UbTl5YWo0UWtUR0IyQ1RqS1Erb3NRdDZlbnBTMXUzYnIwS1ZROGhHVlh3SmQwaCtHSVRCQ1JSRkdTRFhsQ01SaEdUVWErWVBReVl6UVk4elNhOHZFem9uV0dva29YSlExRVVVUlNGNXZjNkNlcEdUbmg3S3JmRjExVW04RHhSOGRXNUdYa0RieDgzTlhocVNqSXBLY25ZYlJtVUNUaVhleW9oOEN4UmNVL2V0emx6amtteXAxTTI4R3krSG5oUi95U0sraWM5NHFJOFNrUGdxeXpocU03QjlxRldSeEVjQytOQmxoVkZWcHQyRlVsUzFBcXBYVUtmclNrWEJZUzR5ek9xY1FkaUxiZWJCSFVqNXcyZzE5bHY2NElXUlptNmxjNXdPYm95Y1lsV0V1TGl5TWg0TkIvMVpyTW5vaWdUVU5oRzJjZk9JUXBLbnRkcHZVb251UkpUbVpnRXl6MmRNN1BaRTUwb0VlQnJvV3pnMlFML3RvOHlPYXNnQ05XM3J1OWJ2SFhIdVg5cHhrMUJoK0RJc1lFZ0tLck5rbVhVYmc1SFpkVDUwcXZVMzluV2hucDdOTG5UUVJYeFRTQWlJY0Z0Mk80QUtTbUpsUFM3ZmNvaVViQlR2c2dmbEMvaWx0KzdIY01SOU5oWmdoNTdPT1QzM0hERlU3V0NxZ0YvT3cyYkFqb2hhd0ZCemJVcGlxTk5UWEtzUm5EMHR5RTZ2RFVCYlcwb2drNFVuN3ZUQVJYemowT1JFb2k2ZVkyMEI3Q083dCtJdE5RVW9pS3VncFJJVWI5L3hzWDJhRC9wSDc0NWN4dTFPNE92cjJjdDFLS0Juc3dDZ2lyMG90R3BLWUtzSURpOE5rR1dsU3dlbTVPZXlPR3hEZXJYVENjSUJQK1RIL0twU3BlNEdlL0R6ZmdBa2hPTnBLUzZmNmk4NE8wRkJwMlZVb0Z4RlBGTmNrK0lHMjRBQnIydVljM3F4UXduL29qVVp3bEhSUVJFQlVVQVFWQVV4eElyeGJHNHdFRzdKc2t5Z3BkWko5anNpaUNwMVZBeCtmcnNwcDVtNDQvdXFYWEREVGNlSkk2ZXVOTG5xZUNKcDhoU0hSVUUwZ0dySUFnMlFVRFdhZFZSSFI0bXZlTGhZY0JzTnFLM1Mxa1d2aXVLY0RNcXNlSDk2b3gzd3cwMzNNalRhelBvS2dOL1pnMUZGUVZSRUZBN09CQ1FaUVc3QklKTlJoRHNhc2dvZ09EaDRTSGE3WFpCVVJSUlVSU2QzVzdmSkFqQzgrNXBkY01OTng0azdIYjdib1BCTURHTHg1WWlDRUlxWUJFRXdTb0lnaVFJZ3F6WDZ4V2owYWc0Nk80VnM5bU02RndYcVNpSzhPcXJyK29FUVdqb25sSTMzSERqUVVPdjE5Y3RXN1pzMXNLQlZrQndPR0t1VkVaWlhvTFJhQlFsU1JJVlJkRWxKaVkyOVBiMjN1V2VVamZjdVA5UUZJWEl5RWh1M294Q2tpUlNVcElmK1RrNWRlcFU3NzU5KzU1MWVteU9WN29nQ0ZiQTd2VGFkRHFkb3Rmck1SZ01pc2xrUXArVnljTER3Nk91Ky9KeXc0MEhZOVNPSFR1R2dxQ3RobkRyOFlLdi8yUGxnUXRrYWZ0d2tFOXFqVFNDSUNBSUFxS29RNi9YbzljYk1oZVdBb0pPcDN2cTMvamxRME5EYWRXcVZZSDJUVWxKUVJBRWR1L2VmY2ZucTFXckZwTW5UNzdUdkFHaG9hRVVLVktFd29VTDA3dDNiMDBFeFkxSEY1R1JrU2dJRkMxV3d0M2NuZ1UrUGo2VnM0V2hvcE40TXF2dFVobUpaTFdmVFpIVkhKdHpuYWdnQ0hYY1UzbHZNV3pZTURadDJzUzZkZXZZdEdrVE8zZnVwRisvZnU2SmVjUVJGUlh0MXVQTkJRYUQ0UWx5NXRpeUdUVUZsVzVOUVZGa0ZGbldkdUQ4K2ZORmdFcnVxYngzU0UxTlpkNjhlWVNGaFJFY0hFeHdjRENMRnk5bTVjcVZ4TVRFdUNmb0VZWWtTWGZrcVowNS9RY0RRL3ZmOC9HZE9YT2FzR2xUMk81UUtuTmk0OFp2Q09ueUZpRmRPN2tJOGtSSFJ6UHdnd0dFZE8xRTN6N3ZjZlhxRlczYmlSUEg2ZmwyTjdxRmRHYjBKeVB6MVdZVkJLSEN5STlIZWVkajNBQUVIQXNObk0yNnpxcW9VS0pFaVNmL0t4ZkpkOTk5Ui8zNjlUR2J6WGg1ZWRHOGVYUE9uWE5sZXZqbGwxK29WcTBhSGg0ZU5HdldqTC8rK2t2Ykpzc3lZOGVPcFhUcDBuaDdlOU9vVVNQMjc5K2Y2N21pbzZONTVaVlg4UFB6dzl2Ym14ZGVlSUVMRnk1bzJ3TURBL253UTVWTjk5aXhZNlNucHhNY25MbXc0OWxubndYZzRNR0Q3cnY3RVVaeThwMnRPcWxjcFNxanhveTlwMk9iUDI4dXk1WXU0ZExGaXk1RzZPclZLMnhZdjU0Rmk1YXliUGxLVHB3NHhwRWo0WTVqNXRDczJmOVkrZmtxdW5WL215bVRKbXFwbUVrVHhqSHlrMUY4dHZKTFNwVXVvMmxtNUlWbm53c3U0VEJrTG9TVGpyQlVXNEdnS2xpcFhwdm0waGtNaHYrRVlmdjk5OTk1NVpWWDZOeTVNMmZPbkdISGpoM2N2SGxUTXk1T3pKbzFpMG1USm5IOCtIRzh2YjFwMXF5WnByd3pjZUpFbGl4WndwSWxTemg1OGlRZE9uU2dlZlBtbk0xRkhEYzBOQlNMeFVKNGVEakhqaDFEbG1WQ1FqTDFCQVlOR3FSeDAxKy9maDJqMFVoQVFFQldWNXVBZ0FDdVhidm12cnZkeUlIWTJGZ0dEUXdscE10YmRBdnB6T0ZENmdQUXFjbmJvWDFiUXZ1N3BqS0dEZmxJOWFLNnZFVzdsMTdnelRkZTFiWmR2SGlSMFA1OTZkNnRDNE0rR01ETm01RXV4Njc3K2l1WC9RRjZ2dE9Mc09rektQLzQ0NjczMm9rVFBGVzNMcDZlS3NtcW42OGZKNDRmMTd5eTU1NVRIK0NGQ3hmbXp6L1BZTFZhaVl5SXdNTnNKaWlvSEFEKy92NmNPSjQvelhueFlzWEtaREZxamp4YjFuQlV5UXhKMVR3YmVsQjcySFE2WGZYL3dvV2dLQXFmZnZvcC9mdXI3bmxRVUJBaElTRXNXTERBWmI5UFB2bUVkdTNhQWJCaXhRcEtsU3JGNXMyYmVlbWxsNWc4ZVRMTGx5L1hDaElEQnc1azE2NWR6Snc1TThmblhMNThtZEtsUzFPeVpFazhQVDFadm55NWk1RWFOaXlUUFRjdExRMFBENDhjWXphWlREbmswOXh3QStDcnRhdXBVYU1HSWQzZTV0S2xTOHlmTjRjR1R6ZlVOSG5QbnovSHhQSGpYSTZaTkdVYW9FcFk5bjZuaDZhL1liVmFtVGgrTE9NblRxWjQ4ZUw4OU9OV0ZzeWZ4K2d4bWNmWHJGVXJoNTVIWHNKRGlZbUplSGg0RUIwZHphUUo0NUJrQ1I5SG5qQXhNUkdUaHdmZmIvcU9IVHUyWVRRYVNVbEpJU2twQ1pQSmhOVnFaZTZjV2R5NGNTT0h3bFoyZUhsN2w4dGkxQndHVGhFZEZBT09YamFjdFFKRlVSUkI3Mnh5RXdUaFAySFlhdGFzU1VCQUFOT25UK2ZNbVRPY1BYdVdYMy85bGFKRlhZdm5qUnRuQ3BVRUJBUlF2bng1L3ZqakQ1NTg4a2xTVTFQcDFxMGJiNytkS1pSc3RWcGRqbkZpeUpBaHZQbm1td1FHQnRLMGFWTmVmUEZGdW5idG11dll6R1p6RGpVaFVDWGRIb1NNbXhzUFArclZiOENjV1RNQWdmcjFHeEEyZlVhQmpwTmxtVEdqUjlIbXhiYlVyOThBVUtVaHIxMzdtK0ZEQjZ2N0tESmUyZlFLS2xXcVRLVktCZGRLUFgzNkQ0Nk5HRXJvQjRNNCsrZWZYTXlTaHBrMFlSd0JnWUdFVFovSnF4MWVkakdJQXo4WXdJc3Z2a1NIanE4eVl0alFmTTloTUJncVpNdXQ1Y3l4b2FDQVZrRFFaMjZnNm4vaFFqaDQ4Q0RObWpXalNaTW1ORzNhbE5kZWU0M3c4SENXTGwyYTcxTklyOWRqTkJvMXJjMDFhOVpRdmJxcnJjL04yMnJidGkzWHIxL24rKysvNThjZmYyVDQ4T0hNbnorZnc0Y1BheTY2RTZWS2xTSWpJNE9FaEFSOGZYMEJzTmxzeE1iR1VySmtTZmRkN0VaT3cxYXZQblBuTFNUOFNEaWZyMXlCMFdoa3pMZ0p0enh1MmRMRmVIaDQwTGxMNWtQV1pyTlJyRmd4VnF6ODRxNk1yWERod21Sa1pCQTJmU2FGQ2hYaXhJbmpGSFpjMTRVTEYrYVpSbzAxa1hOVmh0S2JRb1VLa1pTWXlJU0pVM2o4OGNjNWUvWlA3VjdJQzRJZ1ZNNlNXOHVhWjh0ZVFGQ2NCUVFSRUtLaW9pb0Jwdi9DaGJCZ3dRTHExNi9QMXExYkdUeDRNQzFhdE9ER2pSczVKUFd5NXN1U2s1TzVlUEVpMWF0WHAzejU4cGhNSmk1Y3VFQ0ZDaFcwMTZKRmk5aXlaVXV1SHR2NTgrZnAwcVVMcTFhdFl2LysvWnc2ZFlyampseERWdFN1WFJ1ejJjemV2Wm1xNS92MjdVTVVSWjUrK21uM1hleEdEa3lhT0o3d0krRTBiLzQ4dzRhUDVOQ2hneTdTa2JsaDM3Njk3Tm05bStFalBuYVJxcXhRb1FKSlNVbjhzbWUzbG0vN2ZwT3JUdWo1OCtmWXVQR2JBbzN0eVJvMXNGcXRtRXdtSkVuaTRJSDkxS3lsYXBuV3FsVmJHK2ZSMzM0aktLZ2NScU9SWXNXTFU5alhGNVBEc2RpM2Q2OTJURDR3TFY2NlBEQVhnNmIxc0FGWlBEWkhqczNiMjd2Q2YrVkM4UGYzWitmT25adzhlWktTSlV1eWJ0MDZsaTFiaHArZm44dCs0OGVQcDNIanh2ajYraElhR2tyRmloVnAzYm8xb2lneWNPQkF4bzRkUzdGaXhXallzQ0hyMTY5bnhvd1piTisrUGNmNXpwNDlTNTgrZlpnM2J4NEJBUUdzV0xFQ2IyOXZxbFJSQlcwbVRacEU3ZHExYWRXcUZWNWVYdlRvMFlPK2Zmdmk0K09EMFdpa2QrL2VkTy9lL2I0cG5ydng3MExuemwwSkM1dkMydFdya0dXWmdZTStRaFRGZkJYZTVzNmVTVVpHQm4zZTY2Vjl6dHo1aS9EeDhXSFNsR25NL0hRNml4WXV3TlBUazRIWmhKU1BIVDNLaGczcmFkKyt3eTNIVnJac0VPM2JkK0RkWGoxUlVIajIyV0JOTy9qOVB2MllQR2tDNjc3K0NyUFp6SkJodzdYSWFQaUlqeGszYmpRMnE0M1NwVXN6ZU9qd1c1NnJRb1dLandIWGMvZllIRG9oR3Jla2dpQ0tvb2ZGWWhtZzErc24vMXQvL05EUVVQNzg4MDkrL1BGSFltTmo2ZG16Snp0MzdzUmdNUERVVTAveHhodHYwTE5uVDY1ZXZZcXZyeTgrUGo1TW5UcVZsU3RYOHZmZmY5T29VU01XTGx4SUdZYzZ2YzFtWTh5WU1YejIyV2ZFeE1SUXVYSmxQdm5rRXpwMDZPQjRHdFhpalRmZVlPalFvVVJIUnpOZ3dBQzJiOTlPY25JeWRlclVZZHEwYVRScTFBaFEyejI2ZGV0R1dGaVlsazhMRFExbHpabzFpS0pJeDQ0ZG1UMTdkcTVocmh1UER2YnMyZU5XZDhzSGNiR3hZVFZyVk4rT3VtYlUrVW9UQkNFRFZTbGVFa1ZSWFROcU1DaUNJQWhtdTkwK1V4VEZYdTdwYzhNTnQyRjdHSkdSbnI2NllvVnlYMlF6YktsWkRKdGRFRVJacHhNVnZjR2c2QjNKdWFCLzZ4ZWVOMjhlZmZ2Mi9VLzhlSkdSa1RtcXR3V0JMTXRjdm5LVnVMZzRKRWtpSS8zUlhIdnFZVGFqMCtudzl3c2dLS2dNK1JHbUtvcmltTE5ZN1BaN04yY2Vaak42dlo0QS93Q0Nnc3JlY3YvcjduN0dYQ0ZKVW5FY1RibFpYNHFpcGhIVjdnNFpXUWJKTGlFSWd1QXB5L0pSb0xKNyt2NTlzRmlzbkRoeEFwMWU3OVlWQlZKVFUwaEpUa0tTN05TcVdRdWowWkNyVWZ2MTE5OFFkYnI3b3l2cUdKTXNTOVNyVzlmdHNkMEJGRVU1WDZaVThRL0lKSjEwRWs4NnFjTHRqbkJVMGV2MWlyTzZVTlk5ZGY5T1JFUkdvTlByM2F3UURuaDVlVk8wV0FsME9qMDNJbTdrdXM5Zmw2OGc2blQzYmM2Y1l4SkZIVmV1WEhWZnRIY0FRUkJLWi9QWXN2L2ZwVmxYUEgvK2ZGSEFuYm4rbHlJMkp0Yk5DcEVMdkgwS0VSTVRtK3UydUxpNEJ6Sm4zajZGaUlsMWt4M2NhVlQveWVneDN1VFo4dUhVYlFGUTBBY0VCQlIzejltLzFUMi9jMWFJUjhGelMweUl5M1hiZzVvekx5OXZFdVBqN3VqWXBNUkVMdjkxa2RSOHRIcTl2THdKS3ZjNGhRb1hmbUR6ZmkvSFdiVkt0VUpBVEM3ZW12T093Tm42b1RlWlRFWHYvZzNucGpndUtIeDhDcUhUaVJRcFVvVGl4Vy92R1NNSWtKN3VKcW5NQytsNUVIZyt5T0xLbmY1ZWYxMjZRRnBhL2dLOXFha3BYUDdySWpWcVBUaGF4WHM1enNlS0ZDbVUzVnR6RkE4RTEzQlVVZlE2bmU2dUdqWTN4Zkh0SXpVMWhSc1JrZHlJaU9DcE9uZjNvdHkrN1NkV0xGOUdWTlJOU3BRb3dlZGZydUg4K1hQMDZKN0pRREowK0VoZWVLR04rNGQ0aUhFclk1SDFXdnF2anJOUW9VS0ZzaGd3WjNPdTRGZ01ueldTRWZTaUtENTJONzlZVm9wak53b2Vvbmg1ZVJOMU00TEl5RWlLRlN0MlZ6NzN4bzBiVEprOGtUSGpKbEN2WG4yU2tsVE9yd29WS3JKOTUyNEEzdW5SN1o1OXIrWExsdEx1NWZZdU5FM09jYzJhTVoyVEozL0hhRFRTL1BtV3ZQZCtINDFWNHRxMWE4eVpOWU9UcDA1aU1wbG8wYUlsdlhxL2w0TjE0bTdpVnVkOHJuRkREQVlEZ2lBU0ZCUkU5eDQ5YWRTb3Nmdml2WTh3bXowS3VScTFIQy9IMGtrRlVSVEZnTHQ1Y2pmRjhUOHdjTjQrM0x4NTg2NTkzdGsvenhBWUdFaWpSbzB4R28wRUJnWTZRbGdCaHdhankxckN1NDNQVml3akxpNW5Bbi8wcUpHVUxGV0tqZDl0WnZHUzVSdzZlSUJObTc0RjFKNjhvWU0vcEZMbEtuejczV2JtekpuUG50MjcyTGpobTNzMnpvS2VjKzc4aFh5L1pTdmRlL1FrYk9wa05ueXovb0ZjSjRJZ1VLZE9IVnEwYUVIejVzMHBVZUwybklpREIvWVQwclVUcjcvNkNqTStEZFBXZE5wc05zS21UU0dreTF0MEQrbkN2bjJaYTVyelk4UzlkNUZNS3B1Kys1YWhnMVhhSllQQm1OMWpFM0VVRHJKR2pGYXJGVkVRaEx1NlNOR2R6UDVubnB0ZGt2N3g1eHcvZm95WDI3WmgydFRKUkVaRzhuTGJOcnpjdGcwclAxdFI0TTg0ZFBBQW5kOTZnK2JOZ3VuUlBZUS9UcDF5MmI1bjl5NUN1bmJpaFZiUDA3MWJGdzRkUEtCdDY5ZjNmVjV1cTRhMkh3em96OHR0MjlEMy9YYzFJeEljM0pTdUlkMHdtVXdVS1ZxVXV2WHFjYzVCU2hBWEY0ZWZ2eitkT25mR2FEUlNxblJwR2pWK2xqLy9QSFBQNXYxMnptazJtMm5VcURIRGhvOWt5ZUtGK2RKYTN5dVVLMWNPblU3SHRtM2IyTHQzTHpWcjFzUmdNT1Jxc0xQL1B5TWpuYWxUSmpGeDBsUldyMTFIVEV3TTIzNzZFWUN0UDJ3aEl5T0RsVitzWnZxTVdjeWUrYW5tNWVmRmlGc1FQUEhFRTlwRE5iOHhadjA3SmlhR2QzcDA1OEtGODlydm9OZnJDK1hocVdrdldaYlI2L1dJZ04vZG5QUTdwVGgyUTBWSzhqOHZ0TlNxVlp0dk4yMWhRT2hBU3BZc3hiZWJ0dkR0cGkyRWRPdGVvT012WHJqQXh5T0g4MTZmdm16WnVvMVhYM3VkZ1IvMEo4cmhUVjY1Y3BueDQ4WXdaTWh3TnYvd0V5KzkxSTRSSTRacGFsdHo1czduMjAwcUU4cU1XYlA1ZHRNVzVzNWZDSUFvaW5UcTNBVmZYL1d5Kyt1dlN4ell2NThHRFZSMms4REFRT2JNblkrSGgxbTcwSThmTzBhTkdqWHYyWnpmeVRucjFXK0ExV2JURFBMOVJHQmdJRGR1M05BOEZGbVdjNUE4SERrU3pvaGhRN0RaYk1URnhmRk9qKzdFeGNVUkVSR0JyNjhmSlV1V1JLZlQwYXBWYXc0ZlBnU29yTGZQUHZ1YzQzY1NNQmlNbkR0M1Z0dVdHeU51QVhOamVaSlZMbHU2V0tNR1Azbnlkd2IwVjFjUitmcjY4c1dxTllSMHkrUkUxT2wwdVlXaXVJYWhxa2NyQXZjOGJodzBNSlRYT3JZbnBNdGJkTzM4SmxzMmY2L2xOVjdyK0FydDI3MUk5NUF1OTNRTTNVTzZjUEhpeGRzNlp0dFBQL0pheDFkNG9YVUxacy9LbStCdng0N3RqUDVrNUgvR3VHN2V2SW5nSmsxcDFLZ3hKcE9KVnExZm9FclZxbXh6Q0hrRUJBU3lmTVhuVkt0ZUhWRVVlYWx0TzJ4V0szLy9YZkRtMHo5T25hSkY4NmFFZE9sRWxhcFZlUzY0U2E3N0xWd3dEN09uSnkrMGVmRytmZitDbkZNUUJQejkvRWw1QU1sNm85R0lKRWtFQkFUUXVIRmpaRm5HWkhKbEhhdGJ0eDcrQVFHTUdmMEpnd1lPb1AwckhmRDM5NmRZc2VMRXhjVnk2ZElsN0hZNzRlSGhwS1NvMzhISmlIdnExRW1HRFA0UW84bElZbUtpdHMzSmlEdDN6aXlORWZlZjRzMjNPck5yMTgvTW1UMlRjV05HMDdkZmY2ZDNsaU9uS2dpQ2R6NjVOUmNqcHhjRTRiNGt4RDRhTW94NjllcVRtSmhBcjU1dlU3V2F5bjJXRjczeHc0QVdMVnZSb21VcnZ2NXFMWkdSRVkrTTF4Z1pHVW1GQ2hWZDNpdFRKa2liQTI5dmIzWnMzOGI0OFdOSVNVN0pNNnpJRDlXZmVJSnRPM1lSRVJIQkp4K1BZUG15cGZSOHg1V0g0Zk9WbjNINDhDSG16Sm1QWHErL0w5KzlvT2RVRklXNCtEaThIMURheFJtTzd0Ky9uMXE1OEprSmdrRHYzdS94eHVzZEtWT21yR2FreldZenc0YVBaUEtrOFk3ZnRTeWVack4yM1BmZmJ5STlQWjFKazZjeGUrYW5McCtaRnlOdVhtalZxaFhlM3VyOE9QT0FwMCtmNXZUcDA5byszdDdldlB2dSszd1EybzgzMytwRTVjcDVMeXNUUmRFN256QlVNMm8ybXcwOWNGODVxUXNYOXVXSkoydHc4Y0o1eXBjdm4rZCtpWWtKVEo0NGdhaW9LT3gyRzUwNmQ5WFlPTStjT2MzTUdkTkpUMHVqU05GaURCMDJRb3ZoZCsvNm1kV3J2OFNTa1VIMUo1N2tnNEVmYXZtSFhUL3ZaT3pvajBsUHo2QnZ2LzZhbC9ETituVnE4bHBSYU5yc2YzVHIzdU9XMytQSWtYQStuVDROVVJBcFdhb2tudVpNdHR6OHh0QzhXVEQ5QjN6QTBpV0xVQlQ0ZnN2V2g4NndGUzFhbE1nSVYwTisvZm8xYXRkV1cxSDIvcktIVlY5K3dZeVpzeWxWdWpTZ1ZnMXp1N215R3p0TFJnWmJ0LzVBNjlZdllQTHdvSGp4NGpSdi9yeExvaHBnL2JxdjJiN3RKMmJObVhmZkdrNXY1NXhIam9Sak5CaW9WUG4rTDdHMldxM1k3WGFPSGozcURORnlhR2FrcEtUdzBVY0Q2ZHdsaEhObi8yVEs1SWtNSFRZQ1FSQjR1dUV6UE4zd0dVZnViSzVHUzErNGNHSE1aak5qeDAxQUZFVXNGZ3VGSGZPUUZ5TnVmdmp4UnpWMzk4d3p6M0Q1OG1VdGZIWkplMXk4eU9SSkV4ZzdiZ0lybGkrbFROa2cydVR0S1h0bE0ySlpqSnFRTldSRkJEenY1NDhTSFJYRnFaTy9VNlZLL2t6azU4NmQ0My9ObjJmWmlwWE1tYnVBV1RObllMVmFzVnF0alBwNEJLR2hBL244eXpVODgwd2psaXhhb09WcjFxOWZ4NXc1ODFuNXhXb0FmdGl5V2Z0TUh4OGZWbjZ4bXRGanhqRi8vbHhBSmRiYnZIa1RDeGN0WmNteXovanR0OS9ZOWZQT2ZNZG1zVmlZTUc0TW8wYVA1Y3ZWYXlsVE9uT3A3YTNHWUxmYmlZcUtZdDAzMzdMK200MFB6SGpaN1hhTkJsMlJaZXgydTJhRTJyejRFbnYyN0NJOC9EQjJ1NTJmZjk3Skg2ZE8wcUpsUzBCVlRoSUVFSFU2RWhNVHRCeUpJcnV5RkJjdlVZSkRCdzlpczltSWpvcFN3eWlUaVM4K1g4bmF0YXV4Mld3a0pNU3pkKzh2MUtoUkl6TVUvbjRUMzI3Y3dNelpjKzhiQVdkQnoybXhXRGg4NkNDVEowMmc5N3Z2UHhDdGl1am9hSzJhYlRRYThmWDF6U0dJY3ZIaUJZS0RtL0pXcDg2TS9HUTBScU9KdURqWFZRK0hEeDFreDQ1dFdnOWpyVnExc2R2dGlLSklRa0k4Rnk5ZXBGTEZTdHEyM0JoeC95bCsrL1VJUTRlTm9FblRabnc2Y3c2bi96aVZnKzA2eTRQU25NMm9aWDJHdXBUMzlZRDVmdndZMDhPbVl2WXdZelFaNmRPM1A2VWRwSTU1b1diTldpeGZ0b1J0MjM1RXA5TmpzV1NRbkp4TVFudzgzdDQrVksybTZoRzgxTFlkVFpzMVUzK293NGU0OXZkVjN1MzlUcGFuaWs5bTNzSEI3bG0xV2pVdEVSNGVmb2pubjIrSjJlR092L2ppUzRTSEg2WnBzLy9sT2JhclY2L3cyR05GTk9OY3BWbzE5djJ5cDBCakFPZ2EwdTJ1WEJSM2l1d051bE1tVDJUSzVJazgzNklsSDM4eW1vb1ZLekZxekRnV3pKOUxaRVFFWmNxV1pXcllweFF0cXZiWHRYNmhEYWRPbmFSSDk2N29kSHJhdmR5ZWloVXJFWmR0dWREQWdSOFNObTJxK2lRdVU0YWx5MWRpTkJxWk1qV011WE5tOGRYYU5SZ01Cb0tiTk5XU3hKSWtNVzNxWlBSNlBXKyszdEUxVFB4eU5jV0szZjBWZ0FVOVo3OCs3eU1JS25Qc29BOEgzOVUrTmg4Zm53THZlL255Wlh4OWZUVlp4K1BIaitkSTVOZXNXWXVhTld0cCthcEJXWmh5NCtQajZOV3pCNlZMbDJiaXBDazhWcVNJOXJ1ZU8zZE95M2YzR3hDcWVhNTVNZUlXQkFjT0hNaHoyMnV2djZIOVB5QWdnSThHNXl2czRwRlBHT3F3Y0NLU0pLRUg3c3NkTnVqRHdScHRjRUd3ZHMwcTdEWTdVNlpPUnhBRXJYM0FhWjZkTUJnTStQbXBUMWliMVVad2s2YWEzRmgraWQrc0lWTFdWaTVCRVBKOFltVE5yK1RWTEZxUU1lVEhFM1kzMGJKVmExcTJhcDNqL1lvVksvSEx2dndGbWhzMWFwem5qV3N5bVJqNThTaVg5OTdwMVR2SGZ2VWJQTTNYNnpma2VMOUN4WXJNbkQwMzE4L1c2WFRzMlh2Z3ZocjZncHp6VnZOMU44YVFtcHBTb0ZZcDUrcWVPNFdmbnovcmNva1dzaHZBckFnTURDeXdRdGJkUkVCQWdGWmh6OFZXQ2RudGdTQ0FUcWUyZXp3NDF5RmZkenNHYng5dkJFSGcrUEZqSkNVbG9TZ0twY3VVSVRrNW1mUG5WV1gzbjM3Y1N0aTBLUURVcTErZm4zZnU1UHIxNndEczNMbURreWQvei9jOGRldldaL3UyYmFTbnAyT3oyZmhoeTJicU44aGZXS1ZzMlNDaW82TzFuRUZFbHR6Qm5ZemhuOEJzOXNTTjI1dWJCemxuZVoyN1NKRWlwT1d6cHRyVHMyQWhiMEgzdTFlNHgrTTA1dUtwQ1VvMnI4MFppdW9lMUNUa0owangybXV2TTNiTUtIN1lzb1hLVmFwUW9XSkZFaE1TQ0F3TVpNeTQ4WHdhTmcyTHhVTGdZNEVNR1RwQ0RRbXJWS1ZmL3dFTUhmd2hOcnVOY2tIbEdEeDBXTDVqZUtwdVhWcTJhczI3dmRTQ3diUFBOYUZwVXpXMDNmYlRqeXhkc3BpVTFCUmtTV0xmM3IxMDZSckNTMjNiTVhUNENFWU1HNEtmdno5NnZVNHJIdHpKR083WGsvNVJRbXBLY3A1ZXRmaUE1aXcxSlJsZEhwWFc0c1dMRXhFUlFmVE5DRHk5ZlhLTXJWejVDcmRjWU83cDZVVzU4ZzlXbCtrZWoxT1htOGVXVzk1TlVHNFZkOTBtamg0OVNwRmlibzNNTzBWVTVIWHEzTVpDK011WHJ4QWJGK2RlbTVzTk55TnZFQmdZUU5sY2NybVhyMXdoTnZiK3o5bk55QnNFQkFRUVZEYnYvSEpVVkJTUmtaSFk3WGFTazkyc09OblJwRW1UOWtBYUtvTnVFcG1pTGhZMDdRTkJ2dXZOUVc0UDRwODkwVyszWDZ0czJUSkVSMGNqbnRxUEFBQWdBRWxFUVZSeE0vS0dteHJjTVljcEtjbElkbnV1UmcwZ3FHeFpvcUx1MzV3NXh5UkxVcjVHelJtU0ZuRWs4OTNJRmRuRFRzR1pZeE1FUVYxMUlJcUNvQ2lLaExwRTRhNGdJaUtDeU1pYlBGYlV6Vjk1Kzk3YURVcVVLSDdiN0I2S292RFg1U3ZFeGNVaTJXVXlNaDVOamphejJSTlJweU13SUpDeVpVdmZjb0gvbFN0WGlZNkpRYkpMOTJ6T3pHWlBkSHI5TFQwMU53b0VXUkNFamtCcUZvOHRSUkNFVk1BaUNJSk5FQVM3S0lxS29DaUtGVERjN1hCVUVIVjRlWG5qNmZiY2JvazBoOWdIS0xjVmhycmh4aU1HbXlBSXIyY3hiTWxBc2lBSWFVQkdWc09tQis2NllhdFRwdzQzYjk3a1psUVV5VW1KYmdiZGZPRHQ0NE5CcjZkVXFaTHVFTVFOTi9LSHRhQTdPZzNiWGE4UkZ5MWE5STQwTXQxd3d3MDNDbWpZbEd6L2FoQ0JkUGQ4dWVHR0cvOENaQlRZWTd0eTVZcGJEY1FOTjl4NDZLRW9Tbm91M3BtaU9CUmRuSjFyaXFJbytySmx5NmE2cDh3Tk45eDQyQ0hMY21xVzBGTXpjTm5iUFFSQlFGUVV4VTE1NjRZYmJ2d2JQTGJzekpaS3R2OXJmK3RSZTBIY2NNT05CMy9qdXZWNDg0SGRiay9KWXNDVUxLR29ralVVbFdVWnZhSW9DZmRTcWNnTk45d29tRkZ6Ni9IbUQ0dkZrcHlieCtacXZ6SkQwYmhIYllKS2xTcEZ0V3JWY2hXajhQYjI1clBQUHJ1WFR4MUNRME1wVXFRSWhRc1hwbmZ2M3BvSWlodVBMckxxOGJxWEkrWjU3eVJsODlnVWNtbjFBTld3eFQ2S2szVG16QmttVFpwMDM4ODdiTmd3Tm0zYXhMcDE2OWkwYVJNN2QrNmtYNzkrN3F2MkVZZGJqL2ZXc0ZxdFNWazh0Vnp5YTRMS3JTaUFLRWxTektNNFNlWEtsV1BpeEltY09YUG12cDB6TlRXVmVmUG1FUllXUm5Cd01NSEJ3U3hldkppVksxY1NFeFBqdm5JZllkeXBIdStaMDM4d01MVC9mWEFFVGhNMmJRcmJIVXBsVG16YytBMGhYZDRpcEdzbmxpOWJxcjJmbjhEeWlSUEg2ZmwyTjdxRmRHYjBKeU1Mck0yYW5wNldqR3RUYnJicXFOTmZBOUZtczkxOEZDK2szcjE3VTcxNmRkNTU1NTE4R1hQWHIxL1BrMDgraWRsc3BucjE2aXhkdXRSbCs4OC8vMHlkT25Vd204M1VxMWVQc0xBd0YzSFl3TUJBUHZ4UVpkTTlkdXdZNmVucEJBY0hhOXVmZmZaWkFBNGVQT2krdXg5aDNLa2ViK1VxVlJrMVp1dzlIZHY4ZVhOWnRuUUpseTVlZERGQ1Y2OWVZY1A2OVN4WXRKUmx5MWR5NHNReGpod0pkeHlUdThDeTNXNW4wb1J4alB4a0ZKK3QvSkpTcGN0b21obTNRbEppVWw2aGFJNFZDUHFNakl5b1c2bk4vQmVoMCtsWXNtUUpEUm8wWU5HaVJiejc3cnM1OXRtN2R5K2RPblZpOXV6WnRHclZpcU5IajlLN2QyOTBPaDNkdTNmbjRzV0x0R25UaHI1OSs3Sm16UnArK2VVWCt2ZnY3eUx3TVdqUUlHclhyZzNBOWV2WE1ScU5CQVFFYU5zTkJnTUJBUUZjdTNiTmZYZTdrUU94c2JGTW5EQ09tT2dvQkZIa3ZmZjYwT0RwaGk0a3JiNitmcXhZK1VWbXVtUElSOXk0b1RJNEp5UWs0T25seFpxMTZ3QlZGV3JPckJra0ppWGk3K2ZQNEtIRE5DMExnSFZmZjhXR0RldTEvUUY2dnRNTG85R29NVlU3OGZ1SkV6eFZ0eTZlbnA3WTdYYjhmUDA0Y2Z3NDllclY1OFNKNDN6d3dTREFWV0E1NnVaTlBNeG1nb0xLQWVEdjc4L1BPM2NVYUM1dVJ0MU1Mb0JSVXdEMEVSRVJFWG5Kei8vWDhkUlRUeEVhR3NxUUlVTm8yN2F0cG4zb3hJUUpFK2pSb3dlOWU2dDgvbVhMbHVYU3BVdE1uVHFWN3QyN3MzRGhRcXBVcWNLMGFkUFVwMmZseXB3OGVaTFZxMWU3NU5TY1NFdEx3OFBESThjNFRDWlREdmswTjl3QStHcnRhbXJVcUVGSXQ3ZTVkT2tTOCtmTm9jSFREU2xWcWxTZW1yeVRwcWpYWTJKaUFyM2Y2YUhwYjFpdFZpYU9IOHY0aVpNcFhydzRQLzI0bFFYejV6RjZUT2J4Tld2VnlzRThuSmZ3a0ZOZ09UbzZta2tUeGlISkVqNk9QR0ZXZ2VVZE83WnBBc3RKU1VtWVRDYXNWaXR6NTh6aXhvMGJPUlMyOGc2N1R6dmJQZVM4UERWbk1DcldyRmt6aXR0WWcvVmZ3OWl4WXdrSUNLQnYzNzQ1dHAwNmRZcGx5NWJoN2UydHZVYU9ITW1GQ3hlUUpJbmp4NDlUdjc2clFFMmpSbzN5UEpmWmJNNjFFbXV4V0I2SWpKc2JEei9xMVcvQXpoM2JXZm5aQ2l3WkdRVVdWSkZsbVRHalI5SG14YmJVcjk4QVVLVWhyMTM3bStGREI5TTlwQXVyVjMrcHFiVTVVYWxTWlY3cDBMSEE0enQ5K2c5R2poaktPNzNmcFdsVFYyVzNTUlBHY2ZueVg0Uk5uK21pVkorWW1NakFEd1pRclZwMSt2VWZVTkJUWlV3WVB6WXRuMUJVTTNTQ29EYm9BbHdGS2oyS0Y0Nm5weWNMRnk2a1pjdVdiTnpvcXR4anQ5c1pOR2dRYjcvOWRvN2pSRkZFcjlmbkVBVE9MMTlYcWxRcE1qSXlTRWhJd05mWEYxQlZxMk5qWXlsWjBrMm43a1l1aHExZWZlYk9XMGo0a1hBK1g3a0NvOUhJbUhFVGJubmNzcVdMOGZEd29IT1hydHA3TnB1TllzV0t1WVN0L3dTRkN4Y21JeU9Ec09rektWU29FQ2RPSEtldzQ3ck9TMkM1VUtGQ0pDVW1NbUhpRkI1Ly9ISE9udjFUdXhmeWc2SW9mMmN6WUhJV3p5M24vYWtlbzF4NWxDK2VGaTFhMExselovcjI3YXVKQ0FOVXExYU5reWRQVXFGQ0JlMTE0TUFCWnMyYWhTQUlQUG5ra3h3NWNzVGxzN0wvblJXMWE5ZkdiRGF6ZDIrbTZ2bStmZnNRUlpHbm4zN2FmUmU3a1FPVEpvNG4vRWc0elpzL3o3RGhJemwwNkdDT2gybDI3TnUzbHoyN2R6Tjh4TWN1emFzVktsUWdLU21KWC9iczF2SnQzMi82enVYWTgrZlBzWEhqTndVYTI1TTFhbUMxV2pHWlRFaVN4TUVEKzZsWlM5VXl6VXRndVZqeDRoVDI5Y1hrQ0cvMzdkMnJIWk1mSkVtNm5zMm81ZUd0cWYwZWVrQ1JaZmx5WG9vK2p3cG16SmhCMWFwVlhYSmRRNFlNb1ZXclZvd2VQWnBPblRweCt2UnArdmZ2ejhDQkF3SG8yN2N2czJmUFp1alFvYno5OXRzY09uU0lCUXNXdUlTVmt5Wk5vbmJ0MnJScTFRb3ZMeTk2OU9oQjM3NTk4Zkh4d1dnMDBydDNiN3AzNzM3ZkZNL2QrSGVoYytldWhJVk5ZZTNxVmNpeXpNQkJIeUdLWXI0S2IzTm56eVFqSTRNKzcvWFNQbWZ1L0VYNCtQZ3dhY28wWm40Nm5VVUxGK0RwNmNuQWJEcWl4NDRlWmNPRzliUnYzK0dXWXl0Yk5vajI3VHZ3YnErZUtDZzgrMnl3cGgyY2w4Q3lYcTluK0lpUEdUZHVORGFyamRLbFN6TjQ2SzNGbDIwMlcwUXVIcHVpcXUrNWVtMkNnQ0lJZ3VDZGtaSFJ6MmcwVG54VUxwWlNwVW9SR2hxcXRXRTQ4Y1VYWDlDMWExZFdyRmhCdDI3ZEFGaTFhaFVUSjA3a3dvVUxGQ3RXako0OWV6Snk1RWp0U2ZqVFR6OHhjT0JBTGx5NFFPM2F0V25Rb0FIcjE2L1hkRVVEQXdQcDFxMGJZV0ZoV2o0dE5EU1VOV3ZXSUlvaUhUdDJaUGJzMmJrV0ZkeDRkTEJueng0ZXIxakZQUkY1SUNZbTV0UGFOWi80QlZkYThCUW5MVGdxYmJna2lxS3MwK2xWdzVhVWxOVEcyOXQ3clh2NmJnOG5UNTRrTFMyTkJnMGFhTytOSGoyYUgzNzRnZkR3OFBzMkRsbVd1WHpsS25GeGNVaVNSRWI2bzdsRXk4TnNScWZUNGU4WFFGQlFHVVJSekM5bjQ1aXpXT3oyZXpkbkhtWXplcjJlQVA4QWdvTEt1ZzNiSGVMc24zOE9hLzYvSnFmSktlU1NEamlrOTBSSkZFVlpyOWNwZWtDSmo0Ky8rQ2owc2ttU2ROdnlkdm5kR0JjdVhLQkxseTZzV3JXS1dyVnFjZkxrU2ViTm04Znc0Y1BKalBjTGpzakl5TnVtVTdkWXJKdzRjUUtkWG85UG9jSnUrYjNVRk9JVDRvbjVMWnBhTld0aE5CcHkvZTErL2ZVM1JKME9iNTk3UDJlcHFTbkV4c1VSSFJOTnZicDE4OTMzdXJ1Zk1WY2NPbmdnbHN5Q2dWWTRjREI3T0VKUkJRVUZXWllSQkVId0JJei9aKys3NDV1by8vK2ZkNWRjZHZlbXBZVzJERkdnU0FFL0ZCRi9iQnpnRjBVRlJDeFlrQ0VnSWhRVUZHUXJRZ3NpVTVDbElHSlpBckpreWlwWWhteVEwcWJwYnRPUmNYZS9QMjQwU2ROU29HWG05WGhFYWRaZDNuZjN2TmQ4UGxtVzFRTlF1SmJ3N216cTFLbFl2SGd4MHRMU0VCd2NqTGk0T0l3ZVBicFNiNkU2N1dHSi96N3F4b3NUZXlFc3RMeVhkTzM2RGVUbTVqNFV3V1FmYjIrRU9wSGhjM2xzbGQrL1Eyb0Y5QUV2WTJCMENFVkxBSmdGb1dTR0pFbE9KcE54Sk1xU2NSZGM2M2YzRmg4ZmordlhyOE5rTXVIcTFhc1lNMmJNQXdNMUFNak95bllOVHpzeHJjNE5XVm5PK1IxeWNuSWV5cHBwZFc3SXluYk5CTjlEcXVVaTdGczhiRnM5N0lzSElvT3U2SjJ6TEh2ZXRZU1BsM0hjdlE5UFArbW0wV2pCc2t5RktZbUhzV1lhalJhTWxYRWRuTHMwaThWeUZlWDcxeHo3MkhoMkR3SGNaQVJCY0J6SGNWYXI5WHhGb3hNdWV6U05JSUNTRWhlWFcwVldVZ0hQM2NNc3J0enI4U3JJejhlTjYxZFJWR1NzRkRqRDZvVER6ZDM5b2YyK210aFBvN0h3cGhOQUsrZXhFVVNaN29GTWZLR2twT1NjQzlncTg0NTQybWFEd1FBcnc4QllXRDIwelZxdERqSzVESDYrdmdnTURLejIvZDYxY3dlV0wxc0tneUVEUVVGQldMbHFMUzVmdm9UWS92Mms5NHlObjRDdVhidTVEdklqYk5ldlhVRnhjZVgwUGtWRlJ0eTRmaFdObXpaN292Yno5dTIwMnc2QXhnQmdoYUpCdVljSWJBREFYYnAwNlZ4MGRMVHJES29BMUpLVGt3R0NoRWFyNDJtYkE2cnYrNHVLakVqWFp5QTlQUjNObWxYZlNabVdsb1laMDZmaXk4bGZJenE2QlFvS2VHcWNpSWhJN05xOUR3QXdNUGI5R2x1M1pVdVg0UFh1UGV6WVRNVDltanZuRzZTay9BT2FwdEcrUXljTS9taUlOSHlkbXBxS2hMbHprSEkyQlFxRkFoMDdkc0tIY1lOUmswM2tkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXpzRTdnWVh0dWZRd3JTYjJjLysrdlJrQ2FERWlxTmw3YmJ5WEJsdVZLaEhsV3Jac21RWGdzZ3ZHeXB0ZXJ3Y0lFbjcrZ1RXU205Rm90UER6RHdSQUlEMDl2ZHErOStLL0YrRGo0NFBXcldOQTA3VEVFMGNRQkJRS0JSUUtCV3BTNytMSDVVdVJrMU0rZ1Q5cDRnVFVDZzdHYjc5dndhTEZ5M0QweUdFa0pXMEN3UGZralIwekd2WHFOOENtMzdjZ0lXRUI5dS9iaTk4Mi9scGorMW5WYlNZdVdJak5XN2VqZit3QXpKNDVIUnQvM2VDNk9HcmVxYmd5YzhhMGtzckNVSUlRUWxIWWg2SVEzc0N5TEh1S0pNbEkxM0xhbThHUUNZMVdWK1BiMGVqY1lEQVk3anNrUFgwNkdaTyttQUN6Mll6aTRtSjBmNDBQTTN1ODBSUDkzdTlmcGU4NGV1UXdFaFBtUWE5UFIyaG9HRVo5OGlrYVBmdXM3VjBVeTVZdFFhYkJBUCtBQU1URkRVYXJGLzRIQUJnMjlDUGNFaGhUUjM0OEhESVpoZURnRUNRdVdBaVdaZEcyYlR0MGUrVVZLQlFLK1BuN28zbDBOQzVkdkFpQXIxaDZlbm1oZDU4K29Ha2F3U0VoYUIzVEJ2LytXM05GKzd2WnBrcWxRdXZXTVpESFQ4REVMeWFnVStjdWp4MHpDOE13T0hyMENMWWsvWTRoUTRjak9DUUVBRDhrUC9lN2I1SHl6eG1RSklYWWdSOGlKb1luUXMzTXpNUzBxVk9RblowRm5jNE5ZejRiaTlxMVF5dmREa0VRaUlxS2dvK1BEMWlXeGZuejU1R1dsbGJsL1Z6eDQzTDhzWDNiT1dkaEtBQ1c0emkyTEw5R2NDQUl2a0c5b0VBcUhnQUFaN0ZZa2hVS1JTOFhsTm1ibGJFK2tDcWFScU9Gc1NEdnZyK25hZE1vYkVyYWloMS9iTWZLRlQ5aTlkcWY3K3J6VjY5Y3dlY1Q0akhwcXlsbzNqd2FlL2ZzeHFpUncvSFRxclh3OC9mSHpaczNNR1h5bDVnN2J6NGFOR3lJVGI5dHhQang0N0I1eTNhbzFXb2tKQzZRd3JjNWMrY2hNcktNT0lZa1NmVHUwN2NzSjNQOUdnNGZPb1NQaHZDMFVUNCtQdExuUlcvcWRISXlYdS9lbzhiVy9WNjJHZDJpSmN3V0N5NWR2SWlvWnMwZXlmT1daVm1wOWNqMjN4OFBINHBhdFdyaHdvWHpZR3dxeDl1M2JVVnBhU2xXL0xRR09UazVHUFJoTEJvM2JnSTNOemVKRWZlVlYxL0RpUlBITVdQYVZNei8vb2RLdDErblRoMVFGSVdkTzNkQ29WRGc1WmRmUm1abUppd1dpOU45dFAwN0plVWY3TiszRjdObWYzdmxoVmJSam1Hb2JZNE5Jb0FSQWpocnRWcSszVU5Nd2hVVUZKeHl3Vmg1cTY1Q1FaVzJaVFErOU4rN1pVc1MycjdVRHExYngwQ2hVS0J6bDY1bzBMQWhkZ3A4OTk3ZVBsaTJmQ1dlYWRRSUpFbmkxZGRlaDhWc3hxMWIvMVY1RytmT25rWEg5dTNRcjI5dk5HallFQysyZmNucCt4WitQeDhxdFJwZHU3M3l3SDUvVmJaSkVBUzhQTDFnTERJK2t1ZnM4ZVBITUg3Y1o3QllMTWpKeWNIQTJQN0l5ZUVGNmI2ZE14Zmo0aWVVdTFtZk9YTWFiZHE4S055QUNNamxOQzVkdWlpOTl1S0xQS1c5TFNQdW5XNFlvb2ZHY2Z4RWdLZW5wOTE3bGk1WkpGR0RwNlQ4ZzQrSDh6ZTRLNWN2b1dsVUZHN3hycit0dDhZNENVZkJjWndFY0hJNWJkZWd5NzMxMWx1bndIZjJ1cXdTTzNQbU5EcDFlQmw1ZWJtU2g5T3Y3N3RQVkU0eE1OQytLNzkyN1REbzlYeitUNnZWNHVUSkU0ajdNQmE5MyttRjk5L3JJOTF0cTJxTm5uMFdPLy9jaTUvWGIwUjZlcnFkRUlob0sxZjhpTC8vUG9xcFU2ZFgyeWpjbmF5cTIrUTREam01T2RBK29qMkV6WnRIdzh2YkcxOU8rZ0tmalBvWVBkNzRQNGxCNWs2TXVHZlBwdUN6TWFOQksyams1K2RMcjRtTXVJa0pjeVZHM01xTXBta3dEQU52YjIvRXhNU0FaVms3d2trQWVPZmRQdGk3ZHc4UzVuMkh5VjlPd3RCaHZEQk4zZkFJbkR4eDNEaDB5RWNaRGlHb0hiQUpZRlpPMUlVVWtzY2NBSGIvL3Ywc3gzRkhYZEIxWnlzcEtjR2ExYXVmeU4vbTcrOFB2VU1SNC9idFZJa2IvOEJmKzdGNjFVLzQvUE5KV0wzMjV3cERYWUlneW9HZHFiUVVtMzdiQ0ZNcFQ5b2NHQmlJOXUwNzRNeVowM2J2MjdEK0YremF1UU56dmt0NFlIMVpkN1BONDhlUGdaYkxVYTkrL1lkeWZEcDI3Q2c5SEZtY3hiV1BpeHVNVXlkUFFFRXJxdXp4YnQ2Y2hPWExsbUxhOUZrSWRjaWhWY1NJZTZkd3RHSERoamgwNkpCVWxiYzFyVmFMUVlNK3d2cGZma2E3bDE5Ry9mcjhXRm1USmszUnZrT25rd1pEUm1XZ3hwYk5pWXJCS0svelFNS2VONXkxV3EwdVlLdmlBZHU3WjdmazN0dmF2cjE3OE9IQUQ5Q3Y3N3VZT1dPYWxGTklTMHZEb0E4SG9QYzd2VEJyNW5RcHFmOVE4b1pXcTBTcXliRXNyRmFyQkVMZFhua1YrL2Z2eGJGamY4TnF0V0xQbnQwNGR6WUZIVHQxQXNBTGpCQUVRRklVOHZQenBGQ0NZKzNKVEFPRGduRDB5QkZZTEJaa0dnejhYVnlod0U4clYyRGR1ald3V0N6SXk4dkZnUU4vb1hIanhtV2g4T1lrYlBwdEk3NmJsL2pBZU9xcXVrMlR5WVMvang3QjlHbGZJMjdRUncrbGNKQ1JrWUdkTzNkS0QyZE1Na2FqRVo5K09ncDkrdlpEUUVBQVpreWZXaW03c3hoaWVuaDRZTmJzYitIbDVRV1R5UVIzQWVCRlJ0eGh3MGRBTHBkTGpMaVZtZGxzaHNsa3dzR0RCMkV5bVVCUlZEbHRqNnRYcjJMNnRLL3gxZVN2Y2ZUSVlXemR1a1Y2N2RWWFh6dnJKQXhsYkhOc29tTkdFSVNVcTNOemQ0ZE1LSTl5b2x0WFdGaDR6RVY2ZUdkVHF6WG8yS2tMVnE5YWlTNWR5Z0RxK3ZWcjJMQmhQUklTRmtDaFZHTG1qR25ZdG5VTFh1L2VBM1BuZklQMkhUcWk1NXR2NGRqZlIzSG80SUdIc3UrT0Rib3pway9Gak9sVDBhRmpKM3oreFNSRVJ0YkR4QzhuNC9zRmlkQ25wNk4yYUNobXp2NVc4dGk2ZE8yR3MyZFRFTnYvUFZDVURLOTM3NEhJeUhySXliVUgrVkdqUm1QMnJKbFl2bXdKYXRldWpTWExWb0NtYWN5WU9SdUpDWFB4ODdxMWtNdmxhUHRTTy9SN242ZGZaeGdHczJieVllQTd2ZXk1OTFldVdvT0FnT3B2WXE3cU5vY04rUWdFd1JNc2ZqSjZ6QVB0WTd0YnUzcjFDdHEyYllkM2UvZUIxV3JGM08vbUlDY25wMXhQb2EwMWJScUZjK2ZPZ2lSSjVPWGw0dXJWcTZnbkZINHFZc1N0ekRJek0rM0NYdzhQajNMQ0xTZFBITWZZY2VQeGZQUG1lSzV4RXl4YnVoaGR1M1lEUVJDNGR2M2F0WXBBRFE1VEJ5UkpRU2FqWURZREZFbVZUUjZJSHR0SEgzMTBkTjI2ZGZrQTNGM3dWYm05OFg4OTBhOXZiNGsxRkFEKy92c29VbS85aDBGeEE2VzdsbFpvRlVsSitRY1RCVVdnOElpYTc2cnAxTGtMT25YdVV1NzV5TWg2K090ZzVUcW1yVnZIVkhqaEtoUUtUUGg4b3QxekF6K01LL2UrRmkxYjRaY05HOHM5SHhFWmllL21KVHI5Ym9xaXNQL0E0UWQ2SEt1eXpUdXQxLzJhVGxlOTdVUk5talJGa3lZODViWk1Kc01uRGt5NXpxeEwxMjY0ZE9rUyt2ZmpxOWJEUGg0aGhlUVZNZUpXWmpkdTNJQ0hod2ZhdDI4UEFEaDkrblM1Z3NOYnZkNlcvdTN0N1kxUHg0eVZVbjV4QTJOVG5ZSWFRYkRnT0pZVGpDUkpqaVFKamlCSWFMVmFMamMzaC9mWWJIT2l2L3p5aTNYTm1qVUhTSko4eFFWZEZSdEJFRkNwVkhpalowK3NXbFVtam1FeFc5RDJwWGFTNUpsandya21HMkpkOXZnYVJWRW9LakkrME9GOHg5eG9aUURvNCtOVFpZVXMyL005T1RuNW52Yk5Zckg4cmRmcmJjTlFxd2h1QkE5dW5EUmxRSklnQ0JJa1NZQldLT0R1N3NFWER4eG1ybGlMeFhMUWRhcmRHZGdBb0VmM04zQTc5WmIwZkhTTEZ0aXplN2RFRGI1Nzk1OUlTZmxIY3VlM2I5dktoNE5DR2YxK1RhVlN1dzdHWGE3TncxeXppcmJ0NStlSFltTmhwYW1QcXFaSUhuYUtwanJlbDV1YiswOGxZYWhES0NxTVVwRWtTSUlFU1pKU1ZSUkNJbzRGd0dWa1pMaUFyWXFtVUNyUnAyOVp2cXBCZzRZWU52eGpqQjB6R20vMzZvay9kKzVBY0hBd0FHRDRpRkhZdWVNUDlINm5GN1p0MndxeUdtWWZ4VHU5eSt5dHlGaFk0V3dwK1pEV3JNaFlDS3FDRnBMQXdFQndISXZNakhTbisxYW5ic1Fkd1VDdDFxQk8zWWlIdXU3VnRaK25UcDY0NmdUVXhFZVptQXRCOElVc2tpZ0ROWklFb1ZLcENLdlZTckFzUzNJY1IzRWNKd2VnWUZsMkg0Qm5YWmNJY1BMVUtmZ0gzTC91NTRVTDUxR3JWakRjM055d1o4OXViTisyRmJObWYydjNuZ3o5YlR4L0Y1M3NOMjdjUkhhT2kwSFgwVEwwYWZEeDhVWm83ZkpzdFErTGRaaG45ZlZHbUJNR1hkRU1CZ1AwZWoyc1Zpc0tIMkJqK0tOa0hNZWRiOWV1M1NUd0lpMjI0aTFGQUlvSmdoQTBEZ2lHSUFpV0pFbU9vaWpRTk0zUk5BMkZRZ0VaSDU5S2VSOHBITFZhclh0a01wa0wyQURJcWluL1VWcFNpakdqUi9ISzcxb3RQaHM3cnR3ZFhTNlgzOVYzaG9iV1JtYW1BUm42TkdoMWJpN05BMk1oak1aQ01GYXJVMUFEZ0xEUVVCZ01EMjdOeEgxaUdhWlNVQk5EVWo4L3Y2ZjZHQllXRnY0Tko3azFBSXdZVllxdEhoUkZRUzZYZzZacEtKVktLSlZLcUZRcUVGcXRsckJZTEFURE1BVExzaFRIY1JRQU9pc3I2MlV2TDYrTkxsZ0QwdFBUa2E3UEVCZzRhczRNR2VrSURQQy82eUY0anVOdy9jWk41T1JrZzdHeUtDMTlPc2tuVlNvMVNJcUNqN2NQUWtORDdsaW91WG56UDJSbVpZR3hNalcyWmlxVkdwUk1ka2RQeldWbGR1TEVpVStqbzZPdkFpaEdtY2FCa1NDSUlzR0xNd3Y2Qmd4RlVaeGNMdWNVQ2dXVVNpV25WQ3FoVnF0QnVMbTVFV2F6V1FRMjIzQlV5YkpzTW9CYXJxVUdUcDFLQmtFUTBHaDFVRmZ6SGI2NHlBaGpZUUVBcmxyNTJGem1zc2N3REUwalNYS2tUUmhxQzJ3bEFFb0pnckRSRUtVNG1xWWxZRk9wVkZDcjFYd29TcElreHpDTWJTaktBV0FZaHRsQlVkUUhydVVHbWpXTFFucDZPZ3lHVEJRVzVGWGJzTHBPcDROTUprTlFVQ0FDQWdKY0MrMnlwOXBLU2tyK2duMDExQzRVZGNBb29ZZU54ekNTSkVGUkZDaUtLc3V4aVcwZndsQXBDNEF0TEN6ODA4UER3d1ZzZ2dVR0J0WUlmYmZMWE9ZeTNxNWN1WExHQWRTc0FLd0VRZGkxZWhBT2ZXd2lvSW4vSnNYeXFEaG5aZFBUeG5wNWVmMEo0TFpydVYzbU1wYzlpREMwU1pNbTF3WHdzam84R0Z0UUF3QmI3TElGTjRxaUlHTlpsdU00cm94dDBzWmpBOEJldTNadE8wVlJBMXpMN2pLWHVheUd3OUI5anA2YUE2aUp6TG1jR0YwS1BHOGN3ekJnR0FaV3F4VVdpd1V5aFVJaGtyUkowLzhDMkxFQUdIZDM5KzNlM3Q0dVlIT1p5MXhXbzNiOCtQSGtTc0pRaWRGRDlOQmtNaG5rY2ptRXdnSEV3b0ZXcXdWcEc1dmFjTE5KNGFpdnIrOUJ1RlRpWGVZeWw5VnNHSHF4UllzVy96bUFtZ1VWTUhvNDV0YWtFRlFtNHg4MkZRV0NKRW1PWlZsQ2lHRkZzUVRHYkRadnBtbTZvV3Y1WGVheUdyMjRvZGZya1pGaEFNTXdNQnFmbnNtRHdzTENmYkJ2eXBVZUhNZUpqYmtpd1NSWWx1VXNGZ3RzZEEvQWNad1Vqc3BzUFRiQmErT0lNb1VYRmdDVGxwYTJMU3dzYkl6cjFIT1p5Mm9PMUpLVGs4R0JrS1loL0oraTM3OXp4eDlubkhoclZ2RFRCbmJFa2lSSmNwUk1CbHBPUTZHZ29WQXFvVktxb0ZLcm9GRnJvTlBweWtKUlczQnpERWZyMXExN25tWFpuVS9hWWlZbUprS3BWRDdRYlZxdFZvd1lNUUorZm41d2QzZEhYRndjaW91TFhWZjJVMjU2dlI0Y0NQZ0hCRDExWTNGV3EzVnY3QWZ2WjlzQW04WEJheXNmaG9vRDc3WmhLQ1dEVEM2SFhDNEhLWlBKUkZEamJEdzJ6b2J0Z3dYQUZCY1hKN2xPdi91M2NlUEdJU2twQ2V2WHIwZFNVaEoyNzk2TlljT0d1UmJtS1RlRElSTmFuZHRUK2R2VDA5TU9PUWxCTGFpNGYwMW94aVU1aWhTQVRjYm4xK1F5R2VRMFhSYUtPaFlSQ0lLd2EvMUlTRWpZUEc3Y3VNOEFoTGhPdzN1em9xSWl6SjgvSDZ0V3JVTGJ0cnlVMmFKRmk5Q3hZMGZNbURGRFVtcDMyZE5uRE1QY2s2ZDI0Znc1TEY3MEE3NzlibDZON3QrRkMrZXhkY3RtTkduU0ZCMDZkcEtlLysyM1g3RnA0NjhBUWFCdDIzYjRJSlp2b0toTVlQbk1tZE5JbVBzZHJJd1ZZYUZocWRldVg3L2c0SzFKWWFpSVA0NE51U1JGZ2lRZHZEV2hTa3JUZEpuSFpodUtpdUdvamRmR2pCOC92c1Jpc2Z6NnRKMXdhOWV1UlpNbVRhQlNxVkMzYmwzTW0yZC9BdTNac3dmTm1qV0RTcVZDZEhRMFpzK2ViUWRRUFh2MlJQUG16UUVBeWNuSktDa3BrVUFOQU5xMDRaVzJqeHc1NHJxNm4ySXJMQ3k0cDgvVmI5QVFFNy84cWtiM2JjSDhSQ3hkc2hqWHJsNUZVVkdSOVB4Ly85M0V4ZzBiOFAwUFM3QjAyUXFjT1pPTTQ4ZVBDWi9oQlpaWHJGeU45L3QvZ0JuVHBrcXBtR2xmVDhhRUx5Yml4eFdyNE9QcnQyUHZudDBXWjk0YVFOaFhSRVZ3STBsUXR1TlRBcWpKNUhMSVJkb2lzVHdxdkltaktJcGdHSVlqU1JJTXcwaDVOZ0RXVzdkdWJhcGJ0KzZJcCtWaysrbW5ueEFiRzR0dnZ2a0duVHQzeGw5Ly9ZWGh3NGREclZaandJQUJ1SHIxS3JwMTY0YWhRNGRpN2RxMTB1dTJ5a1U5ZS9aRWJpNnZQM3I3OW0zUU5HMG5xQ0dYeStIdDdZM1UxRlRYMWUyeWNwYWRuWTJwWDA5R1ZxWUJCRWxpOE9BaGFObnFCYVNtcG1MVWlPR3dXTXp3OFBERThoVmw5UFRqUHZzVWFXbjh3RkJlWGg3VUdnM1dybHNQZ0ZlRlNwZzdCL2tGK2ZEeTlNS1lzZU1ra1I0QVdQL0x6OWk0Y1lQMGZnQVlNUEJEMERTTjJiTm0yTzNiUDJmTzRQbm16YUZXcTJHMVd1SHA0WWt6cDA4ak9yb0Z6cHc1alpFalB3RmdMN0JzeU1pQVVxVkNXRmdkMGJNN1ZZRzNaaVVJTWI5R2NBREJFUUJIa0NSSGtTUklrdUtrU0ZNTVF3VnZUYUZRbGdHYlRhN05OaHkxbXgyTmlJaTRZTFZhTjVJaytjYlRjRko5ODgwMytPQ0RENlFjV0dSa0pHN2N1SUhKa3lkandJQUJXTGh3SVJvMGFJQlpzMmJ4ZDgvNjlaR1Nrb0kxYTlaSTMvSDIyMlZpRmNYRnhVNkxGUXFGb3B3c21jdGNCZ0EvcjF1RHhvMGJvOS83SCtEYXRXdFlNRDhCTFZ1OWdPRGdZUHl5WVNNdVg3NkVxVk1tMjMxbTJneitmTXpQejBQY3dGaEpmOE5zTm1QcWxLOHdaZXAwQkFZR1lzY2YyL0g5Z3ZtWTlQak83clFBQUNBQVNVUkJWR1haNTVzMGJWcU9lZmhPQXN1Wm1abVk5dlZrTUN3RG5aQW50QlZZL3ZQUG5aTEFja0ZCQVJRS0JjeG1NK1orOSsyV1pVc1haemw0YXJiZ0pvU2g0UGlIV0RTd1NaL0p5cncxV21qV1ZhbVVJT1Z5T1J5OE5qZ094Z3U5SWd3QUppOHY3NmtKUjgrZlA0OFhYbmpCN3JtWW1Cajg5OTkvTUJxTk9IMzZkRG14MnRhdFcxZjRmU3FWcXB4S0Q4QnJWVDRNZlVxWFBmb1czYUlsZHYrNUN5dCtYQTVUYVdtVkJWVllsc1dYa3lhaTJ5dXZvVVdMbGdCNGFjalUxRnVJSHpzRy9mdjF4Wm8xcTJESXlMRDdYTDE2OWZIRy8vVzhpMnZrSENhTUg0dUJjWVBRcnQzL3N3ZllDZ1NXOC9Qek1Xcmt4L0J3OXpqa3hGdXpMUnBJYkI2MnVUV0tzZ2xEWlJSa01ybU50NmFBU3FXR1RBUTJzV3RYREVjcGl1SUVIVUhiMlZIR3g4ZG5EOE13aHdpQ2FQMmtuMVFxbGNycENTUCtYeWFUbFZNNnIweVVOamc0R0tXbHBjakx5NE9IaHdjQXdHS3hJRHM3RzdWcXVXanZYT1lFMktKYklISCtRaHc3Zmd3clZ5d0hUZFA0Y3ZMWGQvemMwaVdMb0ZRcTBhZnZlOUp6Rm9zRkFRRUJkbUhyL1ppN3V6dEtTMHN4KzV2djRPYm1oak5uVHNOZE9LOUZnZVdPblRwTDNxSldxNFdibXhzSzh2TXhlY3Ewb3krLzFPWjZKZDZhMkx2R2xuVnBDR0VvajFHU1F5YVh5VURMNWFBVkNpaVZLcWcxYXBBMFRVTXU5SDVVRUpMYUZSRUFXSXVLaW41K0drNnFoZzBibGt2cUh6NThHSUdCZ1hCemM4Tnp6ejJINDhlUDI3M3UrTGV0UlVWRlFhVlM0Y0NCTXFIa2d3Y1BnaVJKdEdyVnluVVZ1NnljVFpzNkJjZU9IMFA3OWgwd0xuNENqaDQ5VXU1bTZtZ0hEeDdBL24zN0VELytjenNXNFlpSUNCUVVGT0N2L2Z1a2ZOdm1wTi90UG52NThpWDg5bHZWZ3JMbkdqZUcyV3lHUXFFQXd6QTRjdmdRbWpUbHRVd3JFbGdPQ0F5RXU0Y0g4bkp6ZDFma3JRR0VIWnNIUU5oNGJHVjVOY3JPVzFOQXFWQkNyVlpCcTlGQ0pnSmJSVVVFbTdZUGFSS2hmZnYydng0NWN1UkRnaUFlZTAwRWxtWHh4eDkvbEh1K2JkdTJpSStQUjgrZVBmSHNzOCtpYytmT09IandJT2JNbVlPSkUzbXg0S0ZEaDJMZXZIa1lPM1lzUHZqZ0F4dzllaFRmZi8rOVhWaTVidDA2NU9ibVl2RGd3ZEJvTklpTmpjWFFvVU9oMCtsQTB6VGk0dUxRdjM5L1NUSGJaUzZ6dFQ1OTNzUHMyVE93YnMxcXNDeUxVWjk4Q3BJazdZb0grZm41ZUt2bkcyajIvUE1ZTzI0OEV1ZDloOUxTVWd3Wi9LSDBQWWtMZm9CT3A4TzBHYlB3M2JmZjRJZUYzME90Vm1PVWc0NW84cWxUMkxoeEEzcjArTDg3N2x0b2FCaDY5UGcvRFBwd0FEaHdhTk9tclNRZVhwSEFza3dtdzdqNENlZGZlNlhyMlFxOE5RdEJpS0FtRkEwSThONGFSWUlpS1U0bVZVTGxVdDhhcmFDaFZDbWhGaVlQaUo0OWV5SS9QeCtGaFlVb0tpcENjWEV4U2twS1lES1pDSlBKQkJzOUJKTGpPQmtBT1FCbFVWSFJBSlZLOWZYamZOSWtKaVpXMkJ4Ny9mcDFoSVdGWWRteVpaZ3hZd1p1M0xpQnNMQXdEQjgrSEVPR0RKSGV0MlBIRG93YU5RcFhybHhCVkZRVVdyWnNpUTBiTmtpNm9qMTc5c1NOR3pkdzRzUUpLWjgyWXNRSXJGMjdGaVJKb21mUG5wZzNiOTREbjRCdzJhTmwrL2Z2UjNoa2c2Zml0eG9NaG0rZmoycDhCRHo5dDZocllBUlBCVjVDRUVRcEQzQ0VsVmVob2ppWlRDWXFVSEcyVEI0YXJSWTZuUTZlbnA3dzhmRkZVRkFRd3NMQ1FQVHUzUnQ1ZVhrb0tDaEFVVkVSaW9xS1VGSlNndExTVXBoTUpzSnNOc05xdFpJc3l4STJlZ2owNHNXTHZXSmpZLzhBRVA2MG5vd3BLU2tvTGk1R3k1WXRwZWNtVFpxRWJkdTI0ZGl4WXcvVTY3eHg4ei9rNU9TQVlSaVVsanlkSTFwS2xRb1VSY0hMMHh0aFliVWw4bFJueG5HY3NHYlpzRnByYnMyVUtoVmtNaG04dmJ3UkZoYjYxQU1ieDNIWFBoc3pldUxhTmF1TEFKU2dUTmZBQ0Y1YXJ3U0FXUUEyUnBEV1k0VndrMU1vRmZ4Y3FFb0Z0VVlEblZZTE4zZDNlSGw1dzkvZkQ4SEJJUWlQaUlCTXBWS2hwS1FFTkUzRGJEWkRMcGZEWXJFNFZraHRRMUlHQUROdzRNQ0MzcjE3LzZSVUtpYzlqZ3M4Yk5nd0pDWW0zczhCd3BVclY5QzNiMStzWHIwYVRaczJSVXBLQ3ViUG40LzRlTjd0dnBOS2txUHA5WHI0KzkvZDZMUEpaTWFaTTJkQXlXVFF1Ym03NVBlS2pNak55MFhXeVV3MGJkSVVOQzEzZXV4T25EZ0prcUtnMWRYOG1oVVZHWkdkazRQTXJFeEVDODNhRmRudEo3eWZNVGMzZC9QYU5hdE5OaUdvV1FReUFCWU9ZQWdIYlFQeFB4ekhnV001c0N3TGxtVjVKZytCemNOcXRjQmlzY0JpTnNOc012UEFwbFFxVVZKU1lwZHJrOGxrc0ZxdG9DZ0tETU9BNHppSk5wempPQVlBczNuejVwL2ZmUFBOOXdEVWZkd1dPQ0VoQVFrSkNmZjFIVDE2OUVCOGZEeEdqQmlCdExRMEJBY0g0OU5QUDhYSEgzOHNYVUExYmVuNmRGQXltVXN3V1RDTlJndU5Sb3NNZlJyUzB0TVFGbHJlUzdwKzR5WklpbnBnYTJhN1R6ZHYvb2ZRU21UNGFnVUhQOG5lMnZXbFM1ZWNkQUExbTl4YVdZdEhHYUVrQmJsTTFBM2xxNTZpdDZiVmF1SHU3ZzVQVHkvNCtma2hPRGdZZGNQRDBhalJzeUExR2cyVVNpVVVDZ1ZvbW9adE1VRW9Jb0NpS002bW4wMXMvYkQyNnRVcnQ2U2taT1hUZkNIRng4ZmordlhyTUpsTXVIcjFLc2FNR1ZOcENGVGRscDJWL2RRT1QxZG1XcDBic3JLeW5iNldrNVB6VU5aTXEzTkRWbmJXVTN0TXNyT3preFl2V2xnSys0S0JDRzRTazRkdGl3Y2ZpcEtnWkJSSFVRN051TUtVZ1ZxdGtrRE8yOHNiTXBrTXBGYXJoVnF0aGxLcHhMMjBmcXhidDI0dHgzRXVodDJIY2dlODkrSHBwOEZ6WTFuRzZXc1BhODAwR2kwWUsvT1VucXZjeFc5bXp6cmhCTlRFZkZvNXdSWmU2WjEwbUFmbFI2ZmtBcWlwVkVwb05CcTR1Ym5CdzlNVHZuNitBQUNaVHFlVEtxSkN3Y0F1MXlhVHlUaXIxVW93RE9PMFlUYzJOamIvcmJmZVdxSFJhS1kvNFFjR2VyMGVCb01CVm9hQnNiQjYyRTIxV2gxa2NobjhmSDN2V3RxUElJQ1NFaGVYVzBWV1VnSFAzY01zcnR6cjhTS1NNMEhNVHdhdTVOM2JoaU04d0EySkFoZmxXeTIvb3lBL0h6ZXVYMFZSa2JGU0lBK3JFdzQzZDNka1pHUWtyZnBwUllXNU5UaHB5Q1ZKa3VQNzFtU2NURWJ4b0NhVGc2YkxkQTU0alFNZDc2MTUrMENoNExzTFpCNGVIaWdvS0lEUmFKU3FvV2F6V1FJM3E5VUttVXdHaG1IRXBKM1UweWJrMnF4dnZmWFdtaTFidHJ4QkVFU0xKeFhVa3BPVEFZS0VScXZqMlUyclVkdTRxTWlJZEgwRzB0UFRxMTBKZnRmT0hWaStiQ2tNaGd3RUJRVmg1YXExdUh6NUVtTDc5NVBlTXpaK0FycDI3ZVpDd2tmWkVwT0JxM24zL3ZrcmVTRG1KNE5iMHJGYWR1ZjZ0U3NvTGk2NjQzbDk0L3BWUE51NDZZbDNlcjJaN0FUVW5IcHJrSmh5YllmYzVaREw1SkRUZkRPdVFxR0FVcVdDUnNOUE0zaDY4WGsyMFdTZW5wN0l5OHREWVdHaGJROGJhSnJtcXd3T1hwc042NGVrMXJ4OSszWnpRVUhCais3dTdrOGtzT24xZW9BZzRlZGZNMkxKWW5MWm9FOURlbnA2dFlreXA2V2xZY2IwcWZoeTh0ZUlqbTZCZ2dLZUdpY2lJaEs3ZHU4REFBeU1mYi9HMW0zWjBpVjR2WHNQT3pZVGNiL216dmtHS1NuL2dLWnB0Ty9RQ1lNL0dpSU5YNmVtcGlKaDdoeWtuRTJCUXFGQXg0NmQ4R0hjNEhMRDJkVnBkOXJtaXpFdlFDNlhneUJJaElXRm9YL3NBTFJ1SGZQQXprSGlma0ROQnR5cXkrNEVhcmJnOXQvTm0xdXZYTGxzdllPM3hwVFByVkdRVVJRbmpVN0o1VHdkT0UyWGVXczZMZHc5UE9EdDdXTTNBa242K1BqQXc4TURPcDBPYXJVYUtwVUtDb1ZDeXJVNXk3YzV5N1Y1ZUhoc1psbDIyNU1JYkFaREpqUmFYYzNuWUhSdU1CZ00xZlo5Ri8rOUFCOGZIN1J1SFFPYXBpV2VPSUlnb0ZEd2Q3MjdiVW01Ry90eCtWTGs1SlJQNEUrYU9BRzFnb1B4Mis5YnNHanhNaHc5Y2hoSlNac0E4RDE1WThlTVJyMzZEYkRwOXkxSVNGaUEvZnYyNHJlTk5jZTlVTlZ0Smk1WWlNMWJ0Nk4vN0FETW5qa2RHMy9kNFBJazcyQldxM1ZYbTVnWExqangxQ3IwMWtnN2I2ME0xT1RDUEtoQ3FZUkt4Y3ZzdWJ1NXc4dlRDLzQyM2hvQWtINStmdkR5OG9LYm14dTBXaTNFOWcreFNtb0RiSndOaGJqZGlCWDRhWHlMd1dENDhZazhPSXoxZ1NTYk5Sb3RyRmJyZlgvUDZkUEo2UDVhTjh5YU9SMTZ2UjdkWCt1RzdxOTF3NG9mbDFmNU80NGVPWXcrNzc2TjlpKzNSV3ovZmpoMzlxemQ2L3YzN1VXLzkzcWphK2NPNlA5K1h4dzljbGg2YmRqUWo5RDlOVDYwSGZueGNIUi9yUnVHZmpSSUFwRzJiZHZodlg3dlE2RlF3TS9mSDgyam8zSHA0a1VBZk1YUzA4c0x2ZnYwQVUzVENBNEpRZXVZTnZqMzM1cXJUOTNOTmxVcUZWcTNqc0c0K0FsWXZHaWhIZkhpazJCRlJVVkkrbjBUeG80WlhUMGg2L1hyTzJFL0Uyb0hiQnpIV1RtT1l6aU9ZMW1XNVFoQTh0WktTb3E1VElNQnFiZHVvYUNnb0l5OVE2bUNScU9HUXFIQWd2bUpPSGp3TDZqVWFudGdDd29LZ28rUER6dzlQYUhUNmVEWS9sRkpsYlNjMXhZWUdIallZckVzZWRLQXJib0tCVlhhbHRGNDM5L1J0R2tVTmlWdHhjY2pScUZXcldCc1N0cUtUVWxiMGUvOS9sWDYvTlVyVi9ENWhIZ01IaklVVzdmdnhKdHY5Y0tva2NNbGlwdWJOMjlneXVRdjhkbG44ZGl5YlFkZWZmVjFqQjgvVGhLbFNVaGNnRTFKV3dFQWMrYk93NmFrclVoY3NKQS80VWdTdmZ2MGhZZUhwM0RpWDhQaFE0ZlFzaVZQQXVEajQ0T0V4QVZRS2xVU0VKNU9Ua2JqeGsxcWJNM3ZaWnZSTFZyQ2JMRklnUHc0bWVNUXZmaDNWbFlXQnNiMng1VXJsNnZsUmxKYVdycG0vUGp4dHh4QXplVG9yZkZqVXp5ZU1Bd0RrcVRBc2d3c0Zncy9TUkFlanN5c1RMQWNCNlZDQ1pYUTNuSHMyRkVvbFVxNHVibVgyemFwVXFrUUVCQUFiMjl2dUx1N3c3Yjlvekt2elZsZkcwRVFsblBuenEwRWNOdmxoRCsrdG1WTEV0cSsxQTZ0VzhkQW9WQ2djNWV1YU5Dd0lYYnUzQUVBOFBiMndiTGxLL0ZNbzBZZ1NSS3Z2dlk2TEdZemJ0MzZyOHJiT0hmMkxEcTJiNGQrZlh1alFjT0dlTEh0UzA3ZnQvRDcrVkNwMWVqYTdaVUg5dnVyc2syQ0lPRGw2UVZqa2ZIUk9YQUVvUDBnQ202ai93ZENLWVBxdGZwd0c5Y0doSnZDN20yalI0M0E2ZVJUQUhqRzNPOFh6QWNBZUhoNDRLZlZhOUh2L1ErcVkyOXVIenQyN0s4S1BEWGIzalVXNEhOckZFVnhITWR4RkVXQlpWbE9vVkFJdyswcWVIdDV3V2dzaEVvb0dPVGw1Y0ZzTXVIRkYxK0VYRjUrdW9RRWdLQ2dJUGo2K3NMVDB4TnVibTdRYURSUXE5VlNIc1laQTBoRnViYW9xS2lyeGNYRlB6enBGMy9YemgxUVdQaGtDdHJxOVhvRUJ0cDM1ZGV1SFFhOVBoMEFvTlZxY2ZMa0NjUjlHSXZlNy9UQysrLzFjZW9KVkdhTm5uMFdPLy9jaTUvWGIwUjZlanFXTFMzdjZLOWM4U1ArL3Zzb3BrNmREcGxNOWtCK2UxVzN5WEVjY25Kem9IMkVlZ2lWSFNOQXFPUmdjMHJndmZRMXFOOW9pTkkvcjhMOVUzdnF4Q0ZEaDJQcTExT1FtREFQMjdkdFJkLzMrQXE1ZUcxWGgrWGw1ZjJTbUppWTYrQ3BtWnpuMWppdVRNb1lrTWtvS0pSS21NMW1VQ1NQTmNYRnhTQUlRbkM2RkRoODZCQUdESWlEenMxNW83VU00S2wvQXdJQ2tKT1RVMkhyaDhWaUVXYXlySnpBOXNHeExBdUNJRmlPNHdqYlhGdWJObTFXSGo5K3ZCMUprdTFjL3MvalovNysvdENucDl2ZmZtK25JaXFLYjBVNThOZCtyRjcxRStaOE53L0JJYnhvMllzeEx6ajFhaHpCemxSYWl1M2J0NkZMbDY1UUtKVUlEQXhFKy9ZZGNQRGdBYnYzYlZqL0MzYnQzSUc1Q2ZQaDV1NytRSDczM1d6eitQRmpvT1Z5MUt0Zi80RWZIMFhyRUxqSHZ5ajliZmszRTdtZjdJUzhuamRLdGwyRzlYb3VkTU5iSW5ma0RwaVBwMEg3Z1gwTFVYaEVCRHAyNm95Vks1Wmo1cXh2NE9aMjcxTVljcmtjN2RyWlgrWTdkdXc0TUhyMDZPTlY4TllZQVQ5WXE5WEtDWkVnS0ptTVV5cVVJQWtDTjI1Y2w0WUhlRFlQRFU2ZlRzWkw3VjVHdlFZTjhPL0ZDeFVER3dDRWhJUWdLeXZMYWV1SENHd2l1REVNSXoyRUdWSVdBQ0gydFNVbko1c05Cc09TZ0lDQXB4TFlmdDJ3bnEveWNSemF2ZnovOEg3L1dBQjhtOE5Yazc1QVlXRWhta1pGNGREQkExSXU2a0diYlpHQ1kxbFlyVlpwd3FUYks2OWl5T0E0ZE9qVUNjMmFQWSsvL3RxUGMyZFQ4Tm5ZY1FCNGdSR0NBRWlLUW41K0hyWnUyU0o4ai8xc2JHQlFFSTRlT1lLNmRjT1JsNXNMWHo4LzBBb0ZmbHE1QXZuNWVYaTNkMThVRlJseDRNQmZhTktrTEorMVpYTVNOdjIyRVhNVDVqOHducnFxYnROa011RjA4aW5NbURFTmNZTStlaWlVN3FaRHQyRG90cnI4TWIyZUM3cUpQK1RQK2NGNk13K3FWK3ZCY2prYmNEZ3VPM2Y4Z1gxNzkyREsxOVB3emV4WitIcmFkTlNyZDI4QWJiRllzSE9udlpiNnRXdlh0aFlVRkRoT0Y0Z2VXem1HWElxaVFGSVV3SEZTMzZ4Y0xrZEFZQ0EwR2cxMFdoMysrZWNNL1AwRFFOTUtYTDF5QllVRmhiajQ3d1hrNUdTREpFbkk1WEwwZXZ1ZDhzQW1ocVM1dWJuSXo4K0gwV2hFY1hFeFRDYVRIYmpaZW0wTXczQWN4MEY0U05NSUFDeUJnWUVIVENiVGZKcW1oenhOb0paODZoUzJiRW5Dd2grV2dLSW9mREpxQkVKRHc5RHU1ZitIdVhPK1Fmc09IZEh6emJkdzdPK2pPT1RncFR3b2MyelFuVEY5S21aTW40b09IVHZoOHk4bUlUS3lIaVorT1JuZkwwaUVQajBkdFVORE1YUDJ0NUthVVpldTNYRDJiQXBpKzc4SGlwTGg5ZTQ5RUJsWkR6bTVPWGJiR1RWcU5HYlBtb25seTVhZ2R1M2FXTEpzQldpYXhveVpzNUdZTUJjL3Ixc0x1VnlPdGkrMWsvSTZETU5nMWt3K0RIeW5sejMzL3NwVmF4QVFVUDI5aEZYZDVyQWhINEVnZUlMRlQwYVBlYUI5YkZXeGt1Mlg0ZmJKLzBENXFKSFZleU0wYno0RDk4OWlrRC9qb04zN1VsSlM4TzJjdWZEejk0ZWJ1enRPbmpoK3o4QldiaDlLU240Y04yN2NEUUc4ekk0RkExUXdaUUNBczFnczBHaTFuTnhHdzBBdXA1R1duZ2FaVElZNmRlckN6ODhQMDJmT1JvUDZEZURqNjR1RjM4K0hWcXV6QTdWeXdPYnY3NC9zN0d6azVlVkp3Q2FPV1lrZW00M1g1aGlTMmswakVBUmgzck5uei9KT25UcjlqeUNJcUtjRjJJNGRPNG9PSFRwSnpZS3Z2UElxamgzN0crMWUvbjlJU2ZrSEV3VkZvUENJeUJyZmwwNmR1NkJUNXk3bG5vK01ySWUvRGxhdVk5cTZkVXlGRjY1Q29jQ0V6eWZhUFRmd3c3aHk3MnZSc2hWKzJiQ3gzUE1Sa1pINGJwNXp5aWlLb3JEL3dPRUhlc3lxc3MwN3JkZjltazVYRFgyU0RJZUNtWWVrUDQzTFR3UExUNWQ3MnljMnJMbE5tMGFoYWRQcXVUdzVqanZ6eHg5L09CWU1iSE5yWmltM1JoQ3NRUG5OV2ExV0RnQ1VTaVduMCtta1dkQ2lvbUpjdW5nUi92NEI2TkN4RTgva0lVd1krUGhXUGhwV0xqdGFxMWF0Y3JrMjBXTno4TnFrY0pSbFdWdlZlSWJqT0JLQXRVdVhMdnJzN093ZnZMeThGajVOWHB0dHo2dkFZeWNsbkd1eUlkWmxqNjlSRklXaUl1TWpRV2pnN2UxOVR5bVN0TFMwald2WHJqVTZBVFdUSGFqeG5Hc3NRWUFqU1pLbjlwYnpQV3JpMkpTQ3B1SHQ1WVg2OWVzTHRFUys4UER3Z0krUGo5MWt6cURCemdQQ2N2dzY3dTd1Y05iYlZrSGpMaWZTRzFYVXRPdnQ3YjNkWXJFc2ZscE8wT2JOVzJEWHpwMG9LU21CeFdMQnRxMWIwRUxvMFdyYU5BcmJ0L0Vuek9WTDFkUC9wRktwWGFod2wydnpNTmVzb20zNytmbWgyRmh4bFowTDk3aC9qNm9hdmtNMHRkbyt0MWhhV3JwNjVNaVJGMjFDVUpPRHQyWlhNQ0FJZ2lPRVpuOFpyempGeWVVeVlSYVVsbVpCK1NGM2dTWFgyeHYrL2dHU2R1bGRlV3dBWDBnUXZUWmJxbkJIcjgyMmlDQjZiU3hmQm1PRVNpbEpFQVIxNk5DaFpXM2J0bjJlSUlobVQ5S0ZNK0NEZmlBRTdqVmZYejhrSkM3QTg4MmJvMVBuTGhqMElWOHdhUFBpUzJqWDdtVUF3UEFSby9EbHhNL3g2NGIxQ0krSTRCT21UOUNkL2xHeUltTmhoYTBMNUVOYXN5SmpJYWdLV2tnQ0F3T1JucDZPekl4MHFBV2lCVHNiR2dVdU1mbWVaMGE1Y0E5Z2FQVmxoT3JValpBRzRUbU9PNzFuejU2OVR2SnF0dTBkamtVRGZuUktISnVTeXlDWEM1NGJMWTVObFEyNWUzbDZ3Yy9YcjhveWxVNVhXUzZYSXpnNDJLNklZRXRwSklhaWp1MGZUZ29KVmdDV2R1M2FwV1ptWmk3MDhmRlo5RGhlSkZvbitZOXRmK3lxOFAyOTNuNm5YRElUQVBMeWNqRno5cmR3YzNQRG5qMjdVVkpTVXFWdDNTbHN5TTdKY1FHYmd4bU5oZkR4OVhINm1vK1BON0t6SC95YUdZMkY1UWdCYksxWnMyWXdHQXpRNi9Vb0tzeTM3NVBVQWhoYkcwRHQrOWlEYk9CeWR2VmRGMW9OdEZvTmJ0Njh1ZkhISDM4c3FDZ0VoWU95TzUrVkVaVHZPQTRjeTNJY3k0SmxHVENNbFg5WUxiQmF6TENZUzJFeGw4SlVXZ3hUYVJGdVhyOXk3OEFHQUFFQkFjak56Ylh6MnB6bDJtdzlOb2RDZ3VpMVdRaUNJSDE5ZlhlV2xwYk9WU2dVSHo5dUY0bXNtdTd3cFNXbEdETjZGSy84cnRWSzdSTzJkM1JuWGRTVldXaG9iV1JtR3BDaFQ0Tlc1K2JTUERBV3dtZ3NCR08xSXJTMmN4QUlDdzJGd2ZEZzFremNKNVpoRUJaYU9URDUrZm5aMGU4ODZwYWZuNy9rcFpkZXVsU1J0MFlRaEFoc0RFRVFqTWpjSWFwTzBUUU5sVW9sZUdkbGROOWVYbDd3OVMxVG5XclFvQUVhTm14WTlXdTJzaGRyMTY1ZFlWK2JvOWZHc2l6aFVFZ29WeVZkdFdyVjB2NzkremNpU2JMOTQzU3grUG41SVYyZmNkOFhRRlN6WmxpNHFPSlIycUlpSXdJRDdrN01oU0FJTkcvZUhOZHYzRVJPVGpieWNuSlFXdnAwa2srcVZHcVFGQVVmYngrRWhvWlUrdDRXMGRHNGVmTS9aR1psMWVpYXFWUnFVREladkwyOTd3aHFqNXRacmRaOUV5ZE9QT0FBYXFVaXNBbWdacDlYRTdRTVJDVjN1VnpPeWVWbHhKRzJBT2ZoNFFGdmIyOEVCQVNnZHUyN1d6dmlUb0lqdDI3ZHd2bno1M0h0MmpXa3BxYkNZREFnSnlkSEFqeEhMVklCOUFpV1pRbVdaU21PNHlqd1dxUTB4M0hLR3pkdXRBb05EWjBMNExGU0h6bDFLaGtFUVVDajFVRmR6WGY0NGlJampJVUZBTGhxSjVwMG1jdHF5TklQSFRvME95WW01cFlBWkNYZ05VS0xZSzhQYWl1bHg5aDZhd3FGZ3BQMFFUVzgwTEdIaHdlOHZHekVXZXJXeFRQUFBJT1FrSkM3aTdMdTlJYVFrQkJKVU5reDErYlkraUhLWW5HODJVNGtXSG5uZ2lERHdzS09GeFFVSk9wMHVxbVAwMUZzMWl3SzZlbnBNQmd5VVZpUVZ5MHNIQURmdnlTVHlSQVVGSWlBZ0FEWDVlS3l4OEp1Mzc2OUtpWW1KbFVJTThYUXM5UkpDR29WdkRWcDBGMGlqUlJDVVZ1YWIxRy9RQXhGYTlXcWRkZWdWaVZnNC9NNG9VNXpiVTU2MnNSQ2dtTnZtemh1WlNFSWduSnpjL3ZaWkRMVnBXbDZ3T04wTUFNREE2dU4zZFpsTG50Y3pXZzByZzRPRGo0Ris5WU94eERVWWhPQ3NzNUMwSXBBalZkMTkwRlFVQkJDUTBQdmFSK3JwQk9uMCtrUUVoSmlSMjlreTdnckRxa0svVzEydlcyQzF5YjF0b2tMc1d2WHJpVXN5KzV4blNZdWM5bGpsVmZidjNEaHdqMXdYZ0dWUERZNHpJTUs1SkdjTGFqUkFzVzNHSTdxZEtJb0M1OVhDd2tKdWVlSkRObk5temVyam9JOFZaSFQ3bm54T2ZGMTRTRW04RmloQTU4UXdlMlZWMTVKTzNEZ3dQY2hJU0doQU1KZHA0ekxYUFpvRzhkeDEwNmNPSkgwNmFlZkZqb0pRY3VCbWlDQWJDZW5aNHNmRmVFSUwrUkNnbVZaM0EwKzJRSGIzYmg2dnI2K1RpY1JiQVNXWVVNZlRwaE1KaEFFQVVHNlQyb0JJZmhmUkxacDArWkVUazVPZ3FlbjUreXFoc1V1YzVuTEhvNnpkdTNhdFRWdnZ2bG1xb08zNWl3RXRkcTJkb2pocDhEdktCVU10RnF0WGVncFZqOGpJeVBSdUhGanFOWDNQaUZ5VjJDaVZxc1JHaHBhYm9hMGd2bFJqbVZaUWl3a2NCekhDZ1VGMjZrRTBzdkxhM054Y1hHUVNxVWE0enAzWE9heVI5T3lzN01YaDRlSG43WHgxRXB0SHdSQm1HeEJ6VEVFRlNRR3l1WFZiTUhOVjlEV0RRME52UzlRdTJ0Z0EvZ0Vla1Y4YmM3R3JNVEdYUUhjT0dFcVFjeTNrUURJVnExYUxUbHg0b1MvWEM3djV6cUZYUFlVaDNyUTYvWEl5RENBWVJnWWpZOEdRM05wYWVuUDc3NzdybTIvV3JrUWxPTTRDZFE0am1NRlJseU9aVm1PWVJnN3ZqOHhzaE1mWXBWVW9WQkFyVlpETHBmajBxVkxEeGJZQUNBOFBOenBxSldUYVFSTzZHY1RSNjNFV1ZMYkZoRGluMy8rSWZmczJiTzRmZnYyZmhSRmRYR2Q0aTU3R2tFdE9Ua1pIQWhwR3NML0VkZ3ZpOFh5NTA4clYrekt5Y214T0FFMTJ3a0RmbXlLSUZnQ1lQbDBGSy9lTGpCM2NFb2xMOFNpMFdqNW5qVjNEM2g1ZThIZlB3QzFnb01SWGpkYzB0RzRYN3VuYjZBb0NuWHIxa1Z3Y0REOC9mM2g1ZVZsVnlsVktwVzIrVGRPWkFLeFZiWVMzRlVyK0JZUWMrZk9uVk12WGJxMGtPTzRZNC96Q2JwcDB5WW9sY3FLRXhWV0swYU1HQUUvUHorNHU3c2pMaTVPVW5keTJkTnJlcjBlSEFqNEJ3UTlNbU54TE11ZVBIVHdZTkxFTHlZVU9PVFVTb1JIcVIyb1NYUkVKRmUrQ2xwK3VrRG5wb09IaDZkRVJWUTdOTFJhUU8yZWdRM2dGVzNDd3NJUUZCUUVSMjFTSnlwWG9wcXpYUXVJQTdpWm5ubm1tWlMwdExRRkhNZGRlVkpQNEhIanhpRXBLUW5yMTY5SFVsSVNkdS9laldIRGhybXU3S2ZjRElaTWFIVnVqOHorY0J4MzlkeTVjK3Y3OW5rbnd3SFViQ3VnSmp0UUUzcldTRkthQjRWY0p1Zmt0Q2gwcklCS1pUOWw0T1BqQS8rQUFJU0UxTDR2N1lWcUF6WUFDQTRPUm1ob0tBSURBeVgrdGtyQURiYjliUUovbTBRbExqeE13Y0hCQjNKeWNoSUFaRDVwSjI5UlVSSG16NStQMmJObm8yM2J0bWpidGkwV0xWcUVGU3RXSUNzcnkzVjFQOFhHTU13OWVXb1h6cC9EcUJIRHEzdDNzbTdldkxtNmErY08xMkUvMkc0SGJBUkJXRGlPczRpQ3h4ekhDUnhyRkVlUUpJcUtqTWpOelVHbXdRQUN2TmkwUnEyRzJXVENnYi8rd3BZdG0vSG5ycDN3OXZhdTlzYjMrL2I3NnRXcmg5cTFhMHZnNXVIaFlTZmhad051WWtncTlzT3h6a0pTQUNZZkg1OXQrZm41M3drTFdLUFdxbFVyVEpreUJTKy8vRExVYWpVaUlpTHd4eDkvWU83Y3VRZ09Eb2E3dXpzR0RCZ2dxUzJOR0RFQ25UdDN0dnVPN3QyN1k5Q2dRVTYvdjJmUG5tamV2RGtBSURrNUdTVWxKV2pidHEzMGVwczJiUUFBUjQ0Y2NWM2RUN0VWRmhiYzArZnFOMmlJaVY5K1ZaMjdVcXJYcHk5djA3clZlWlMxZFpUYWhKNjh0MmJYMmtFeUpFbXhITWV4NERqSVpCVE1KaE5VS2pVWEVsSWIvZ0VCU0U5UGgxcXRnVnFqUVVyS1AzamwxVmN4ZXZRWVJFUkU0dkNoUTlXK252ZmRPMFlRQkNJaUlwd3FXam1yam9vdElBQUlBRTZMQ1J6SGtSNGVIdXVOUnFOR285SEUxL1JKTlgzNmRHemV2Qmt4TVRFWU5HZ1FldlRvZ2U3ZHUrUENoUXM0Zi80ODJyVnJoNjVkdStLTk45NjQ2Ky91MmJNbmNuTnpBUUMzYjk4R1RkTjJuRnh5dVJ6ZTN0NUlUVTExWGQwdUsyZloyZG1ZK3ZWa1pHVWFRSkFrQmc4ZWdwYXRYa0JxYWlwR2pSZ09pOFVNRHc5UExGL3hVMW02NDdOUGtaYkdhNWJuNWVWQnJkRmc3YnIxQUlDclY2OGlZZTRjNUJma3c4dlRDMlBHanBORWVnQmcrYktsaTcvNGZQd3BCMUFydFFFM3ZsZ0FXSVJybGlVSXNBUkpjQVJIZ09NNFRpYVRnV1ZaenQzREhRcUZBZ1JCUUorZURyVktEWXFpb0ZhclViOUJRd1RWcW9XaUlpTU9IVHo0TXJuRXdBQUFJQUJKUkVGVTZBRWJ3STljaFllSGx5T2pGTXU4VGdia2JmdmJJSVNrNG1TQ0NHNkVWcXRkV1Z4Y3JGS3BWQ05yOHVUcDBhT0hwSTM0eGh0dllObXlaWmc2ZFNwME9oMWF0bXlKWjU5OUZ1Zk9uYnNuWUh2NzdiZWxmeGNYRnpzdExDZ1VDcGhNSnRkVjdMSnk5dk82TldqY3VESDZ2ZjhCcmwyN2hnWHpFOUN5MVFzSURnN0dMeHMyNHZMbFM1ZzZaYkxkWjZiTm1BVUF5TS9QUTl6QVdJd2NOUm9BWURhYk1YWEtWNWd5ZFRvQ0F3T3g0NC90K0g3QmZFd1NCSWJ5OC9OKytPTHo4WWVkaEo0bGQ4aXJjU3pEaUZSbGtNdHBVWndGUlVWRk1BcHN4a29WSDcxcHRGcjQrdnBpKzdhdHlNL1BSMTVlM3FNSmJBQ3ZjR1ZMSVc3YnRHdmpzZG4ydFVuZ3hwYXA2aklDMEVuZzl0WmJieTFadjM0OXJWUXFhMHpHejNiNlFxRlFTUGxEMFdpYXJoYmdVYWxVTUp2TjVaNDNtVXdQUlovU1pZKytSYmRvaVlTNWN3QVFhTkdpSldaL002ZEtuMk5aRmw5T21vaHVyN3lHRmkxYUFnQ3VYNytHMU5SYmlCL0w5OEt6SEF1Tm9GMVFXRmk0N0oxZWIrMUgrYWtDK3hEVVJrSlBGRHRtR0lhVHkrVWM3NXlBbzJtZUxEWFRZSUJHbzBWMGRBdjgvZmRSdUx0N1FLVlVnbVZaclBoeE9YcjFlaHNObjNrRzQ4ZU5mWFNCRFFEQ3dzTHN0QkVjcHhGc2lDaGg0NjF4QXZpSmt3a1FtdjFBRUFTeFpjc1dZdHEwYVV2aTQrTmxDb1VpcmlaT0hwa1RIdnFLMUtTY1BXK3hXS3EwbmVEZ1lKU1dsaUl2THc4ZUhoN1NaN096czZ2TTVlNnlwd3pZb2xzZ2NmNUNIRHQrREN0WExBZE4wL2h5OHRkMy9OelNKWXVnVkNyUnArOTdkdWRwUUVDQVhkZ0tBRWFqY2NXRStIRjdVMUwrY2V4VGN3UTFPelpjb2RtZW94VUtqcGJMWWJaWVFKRWthSVVDRkVYQjE5Y1hkZXJVaGJ1N0J3aUNRR0JRSUhSYUhSaXJGUk0rbjRqdzhIQmN2UGl2ZEMwOHNzQUdBUFhyMXkrblJlb1lqanA0YlNLOUVXeHlib3lRZ3lNSWdpQysrdXFyUEY5ZjN5VURCdzRrRlFyRndJZDVvdEUwWGM1MXZuVHBVcFU0bzZLaW9xQlNxWERnd0FHOCt1cXJBSUNEQncrQ0pFbTBhdFhLZFJXN3JKeE5tem9GMFMxYW9uMzdEbWdSM1FKdjl1d0JsbVVyN2ZjNmVQQUE5dS9iaDRXTGx0amRpQ01pSWxCUVVJQy85dS9EaTIxZnd0V3JWM0hxNUltZnpwNDl1MmZqeGcwbE5wNWFpY1BEUkJDRVdjaXAyYkhoTWl6THlTZ1paREk1U2twS09IY3ZieWlWU3VoMGJsQW8rUCtYbWtyNUp0eGF3UWdMRFVOQVlDQVVOTTN2NjRFRGFOSzA2YU1QYkFSQm9INzkraEt3T1hwc0RNUFllbXkyNEFaaEZBTkN2czN1TzRjTkc1Wk4wL1NTZnYzNjRXR0NXOHVXTFRGNzltd3NXN1lNelpzM3g2SkZpNUNlbmw3aCs5ZXRXNGZjM0Z3TUhqd1lHbzBHc2JHeEdEcDBLSFE2SFdpYVJseGNIUHIzN3c4dkx5L1hWZXl5Y3RhbnozdVlQWHNHMXExWkRaWmxNZXFUVDBHU3BGM3hJRDgvSDIvMWZBUE5ubjhlWThlTlIrSzg3MUJhV29vaGd6K1V2aWR4d1EvUTZYU1lObU1XdnZ2MkcveXc4SHZRTlAyVGg2Zm5ueHZXLzFJRSswS0JiUU91eVhFT1ZPcFhveWdRRElPU2ttS1VscFp3YXJVYW5sNWVVS2xVcUZlL1BtN2V1SUdqUnc5RHA5T2gxOXZ2SWlRNEJQWHExMGY4K004eGVmSWtXTXdXaElTRVlNelkrRWNmMk1SY1VyMTY5ZXdxcExhNU5pR3ZWcTZZQVB0S3FTMjRFUVJCRUhGeGNaa21rMm5Sd0lFRFdhVlNHZmN3VHJUWFgzOGRJMGVPeE9qUm84R3lMUHIxNjRjQkF3YWd0TlI1WjhxR0RSdHc0OFlOREI0OEdBQXdlL1pzV0sxV2RPL2VIU1JKb21mUG5wZzdkNjdyQ25hWlV3dXBYUnR6NTgxM210YjRaY05HNXpmVFgzNnQ4UHNhTkdpSWhZdVd3R2cwcnBnMWM4YWVaVXNYVndScWtxY21naHBKa2d4UVJob3BveWhPcmxTQ3BoVWMzM3dyaUxLb05YQnpkMGRrWkNUOC9Qd1FGRlFMWVhYcW9HNTRPSlJLSlo1N3JqRitXTFMwUnRmdGpwb0g5Mk1aR1JrNGQrNGNybHk1Z3RUVVZPajFlbVJuWjVmVFN4QkNWMElBUUVKZzRTVTRqaU50TkJQa0hNY3BBQ2duVEpqZ0hoOGZINnRTcVlhNFRuMCtVWHpqNW4vSXlja0J3ekFvTFhrNlI3U1VLaFVvaW9LWHB6ZkN3bXBYR3E1eEhDZXNXVGFzMXBwYk02VktCWmxNQm04dmI0U0ZWVXdSdG4vL2ZvUkhObmdnNjFSWVdMaHNRdnk0dlRiaHB6TlFzMlhzc0lpTUhXSnpQVVhKT0lIZW13YzFwYjI0c2Fkbm1jcFVhRmdZNnRkdkFGOWYzd2QyTHRRb0I1cS92Mys1NFhnbkZWTFk1Tm1rU3Fsd3dkcjJ1SW1GQlV5Wk1nVW5UNTc4WWNPR0RXYTFXbjNQclNBZE9uVEFuMy8rK2NoY21IcTlIdjcrZHpmNmJES1pjZWJNR1ZBeUdYUnU3aTc1dlNJamN2TnlrWFV5RTAyYk5JVllvWE1FdFJNblRvS2tLR2gxTmI5bVJVVkdaT2ZrSURNckU5RkNzM1pGZHJ1Ryt4a0xDZ3ArR0RwazhQNUxseTZhS3dNMWxGVkFKVDFRZ1RoV1VKb2lJSXhPU2F3ZEpDVlFmMU1VNURJWnhQbFF0VklGczhsVTQ3L3RnUUVid0l2QmlPQldXWFZVckpBS3ZXeWMxV29Wd1kyeERVdEZjTnUrZlRzMEdzM1N3c0xDVXExV094S0E4bTczYmRldVhZLzloWnl1VHdjbGs4RS9JQWd1QXpRYUxUUWFMVEwwYVVoTFQwT1lFeUxWNnpkdWdxU29CN1ptdHZ0MDgrWi9DSzFFaHErV1RadFJOVnRwZG5iMjRsWXRteDlHZWZiYmlqdzFLd2lDSVFDR0VEdzFHVVZ4TXBuZ3FZbEQ3V28xdEJvTmRIYWtrWUdvWFRzVWtaR1JDQTBMZStEbndRTmhyUTBQRDY5SVlGa0NPSnU3cVpScnMxcXQ0bXRPd1EwQWREcmRxdHpjM0dJUEQ0L2hBSHlmdGdzNU95c2JXamQzRjZJNW1GYm5ocXlzYktmQWxwT1RBOTFEV0RPdHpnMVoyVm1WQWxzTldaWmVuNzQ4K3Ztb1U3Q2YvWFQwMHV4QkRRS29FU1JIRWlSSGtRSmJCMjFER0NuTWYyb0Z2UUkrQlBWRHJWcDhYdTFoZ05vREF6WSthZG5BS2JBNWVtMmk1eWFDRzhBUENGY0NicHlucCtmR2pJeU1JbDlmMzQ4SWdvaDRXaTVlanJ2MzRlbW53WFBMejh0eCt0ckRXak9OUm92ODNKeDcraXlSbkFsaWZqSnc1ZTY2OURsd1YyK2FzbGEzL20veStUdDRhcVp5b0VZSW9FWVNBZ3V1REhJNXpTbG9rYWxEQURXSkJkY0xiam9kTE9aUzVPVm1Jek5EZzh5TU5LZnJFRlluSEc3dTdvOC9zQUZBbzBhTnlvRmJCY0FtZ1p1WWNLc0kzTVMvL2YzOS83aCsvWHBCN2RxMTQwaVNqSzUrRU9IWlRRMEdBNndNQTJOaDliQ2JhclU2eU9ReStBbTB5SGQxc2hOQVNZbUx5NjBpSzZtQTUrNWhGbGZ1K1hnbEpnTlg3dzdVV0hBbno1WGNXdDg1ZGZaMWxKLzl0Ry9wc011cGxRYzFtUUJxdElMMzFCeUxCYUxJc2RWaWdvZUhSNlhLN1VWRlJ0eTRmaFdObXpaN01vQ05JQWcwYXRTb1FxL05HWmpZZUhCT3dVMzRYbzdqT0s1T25UcUhrNU9UODU1Nzdya0JGRVYxcms1UVMwNU9CZ2dTR3EyT1p6ZXRSbTNqb2lJajB2VVpTRTlQcjNZbCtGMDdkMkQ1c3FVd0dESVFGQlNFbGF2VzR2TGxTNGp0WDhiQ1BqWitBcnAyN2VaQ3drZllpTHNFTlF2SC9IbXc4R0pTbjR5RkdUYmhwK1BzWjRrQWF1WnlPVFU3VUpPREZnU09sUXBCTGsvaldBSDFRMkJRRUl3RmVaV0NtdTA1LzBTRW9xTEo1WElKM083Z3Nkbm0yeW9DTjNId2xoTkQwNmlvcUhNYk4yNmMxYTFidDB5YXB2dFd4ejdyOVhxQUlPSG5Yek5peVdKeTJhQlBRM3A2ZXJWeFU2V2xwV0hHOUtuNGN2TFhpSTV1Z1lJQ25ob25JaUlTdTNidkF3QU1qSDIveG83MXNxVkw4SHIzSG5ac0p1Sit6WjN6RFZKUy9nRk4wMmpmb1JNR2Z6UUVGRVVCQUZKVFU1RXdkdzVTenFaQW9WQ2dZOGRPK0RCdXNQUjZUZGlkdHZsaXpBdVF5K1VnQ0JKaFlXSG9IenNBclZ2SFBKcWVLbXYrZVUzMm9WMWY1UDFXVUFtb2xmUFVCQUxZQ2tDTjcxVlRxa1FSRmwwWnFQbnhiUjFob1dISXo4dXUwZU5VVlNNZnhrYVZTaVVhTldxRThQQndCQWNIUzBMTXRseHVZck9mUXFHUXhGVmxNaGxuSThUTTJISzVDVG1DVWdBbGI3enh4dTBtVFpwOGF6UWF2eEZldnk4ekdES2gwZXBxZkYwME9qY1lESVpxKzc2TC8xNkFqNDhQV3JlT0FVM1Q4UEh4a1R4blFRcXR3cG5ZNnJBZmx5OUZUazUydWVjblRaeUFXc0hCK08zM0xWaTBlQm1PSGptTXBLUk5mUGpFc2hnN1pqVHExVytBVGI5dlFVTENBdXpmdHhlL2JmeTF4dmF6cXR0TVhMQVFtN2R1Ui8vWUFaZzljem8yL3JyaG9WeTAzajkyaDl2by8wbC9leVYwaGJKVEJBQlljNjFGMzdlK052SDNML0oreTNmSXBSVUxqN0xxcHkyb2dXQmdVLzJrS0ZrNVVBTUhaR1ptb3JpNFdNcXArZnI2SWlnd0NLR2hZYWhYdno1b1lWUktQTSthTld1R2poMDdvbjM3OWdnS3Vyc3E5SW9mbDZQM083M3dkcStlMkxwbGM1azNhckZnOXF3WjZOZjNYZlR2MXhjSER4NTQrQjVibVplaVFhTkdqWndOeFpjTFMwV3hWZGhVUzRVVDBuRkNnUlBEMG4vLy9aZlY2WFFyTXpJeTlMNit2b01JZ3JoblVXWXJZMzBneVdhTlJndGp3ZjFUdUp3K25ZeEpYMHlBMld4R2NYRXh1ci9HaDVrOTN1aUpmdS8zcjlKM0hEMXlHSWtKODZEWHB5TTBOQXlqUHZrVWpaNTlWbnA5Lzc2OVdMWnNDVElOQnZnSEJDQXViakJhdmNCZmJNT0dmb1JiLy9GQ3R5TS9IZzZaakVKd2NBZ1NGeXdFeTdKbzI3WWR1cjN5Q2hRS0JmejgvZEU4T2hxWExsNEV3RmNzUGIyODBMdFBIOUEwamVDUUVMU09hWU4vLzcxUVkrdCtOOXRVcVZSbzNUb0c4dmdKbVBqRkJIVHEzT1doTUxObytqU0djVmt5Mkp3U0laemhydjFuemxyendzMnZ6c0plVGNvWm41b1FmaEpXZ0JOQmplVWRCdEttVUNEbmFLRlFrSitmRDBaUW1xSnBHbDVlWlo1YWFCZ1BhbzZTZVhYcTFBRkZVZGk1Y3ljVUNnVmVmdmxsWkdabTJwRkdPTTY5aW4rbnBQekRuMlBMVjhCa01pRXViZ0NpbWoyUG9LQWdiTisyRmFXbHBWangweHJrNU9SZzBJZXhhTnk0aVVRdG5wNmUvbkE4TnRGME9wMVR6ODNUMHhNNm5jNFp4YmlkTUl5b24rRGd1WmtGejYwVVFMRy92LzhmLy83Nzd5U0dZZmJlNjM1V1Y2R2dTdHN5M24vdW9XblRLR3hLMm9xUFI0eENyVnJCMkpTMEZadVN0bFlaMUs1ZXVZTFBKOFJqOEpDaDJMcDlKOTU4cXhkR2pSd09RMFlHQU9EbXpSdVlNdmxMZlBaWlBMWnMyNEZYWDMwZDQ4ZVBrMFJwRWhJWFlGUFNWZ0RBbkxuenNDbHBLeElYTE9SREJKSkU3ejU5NGVIaENZQ24wamw4NkJCYXR1UkpBSHg4ZkpDUXVBQktwVW82MFU4bko2Tng0eVkxdHViM3NzM29GaTFodGxna1FIN1FaamxyZ1BiRDUva2JMMnZkLy9mdGMvTmZ1UGxWQ3V3WmI0c2RIcVVFL3pBRGhBVUV5a0NOeit4d1ZxdUZrOGw1Q3YrOHZIekk1REtvVkNyVUNhdURxR2JQdzh2YkcxcXRGcjYrZnJ5bkZoYUcrdlhxUTZ2Vk9sM1h0TFEweVZsaFdSYWVucDUyNzFtNlpCSFdyRjRGQUVoSitRY2ZEeDhLQUxoeStSS2FSa1ZCb1ZUQ3pkMGRMN3p3UDV3NHp1czhuVGx6R20zYXZDaWNUd1RrY2hxWExwVWRoMWt6cHo5Y1lBTUFkM2QzQ2R4Q1FrTHN3TzBPRk9PMllTa3JoS2JpblVvRXR4SUF4Yzg4ODh5cG4zLytlVXBwYWVseVZ4cjZ6clpsU3hMYXZ0UU9yVnZIUUtGUW9IT1hybWpRc0NGMjd0ekJoMExlUGxpMmZLVWtsZmJxYTYvRFlqYmoxcTMvcXJ5TmMyZlBvbVA3ZHVqWHR6Y2FOR3lJRjl1KzVQUjlDNytmRDVWYWphN2RYbmxndjc4cTJ5UUlBbDZlWGpEV2NCSzh3aHZneWpOUWRZNUFpU2UxT3VIWDVTdTcvVGJtbGdPb09RSmJDUUdVQW9TWmY4QktDS3BTSk1DUklEaWFwam1TSkZGU1hNd1ZGQlRBM2NNZE9xMk9uLzEwYzRPN3V6dFVLaFhjM056NG5Kb0Fhcm9LUkZob21nYkRNUEQyOWtaTVRBeFlscFg0RGtWNzU5MCsyTHQzRHhMbWZZZkpYMDdDMEdHOGZrUGQ4QWljUEhFY1JxTVJCUVVGT0hmdXJIVFR6OC9QaDFLcHhObXpLZmhzekdqUUNocjUrZmtBZ0tUZk55RThQT0xoaGFLMjV1SGhnVWFOR2xWNkVvbi9GeDRjUVJDRXhXTGhiT3NNTE10eXR2MXRZbGdLZ092ZHUzY2FnSVRzN093YlhsNWVnd0RjYzRiK3dvWHppQnNZaTJYTFZ5SWlNaEpMbHl6RzVxUk5rcGRTa1gwMzV4c2NQblFJT1RrNW1EanBTN1I1c2UwakNXeDZ2UjRSRVpGMno5V3VIUWE5bm1jeDBXcTErSFBYVGt5WjhpV01oVWE3TUtLcTF1alpaN0h6ejcxSVQwL0hGNStQeDdLbFN6Qmc0SWQyNzFtNTRrZjgvZmRSSkNRc2NNcVpWeE5XMVcxeUhJZWMzQnhvSDFJUElWZGtTYjg4Zi9lcWhzZUduTUl4aWZ4UkJEWlRCYUduQmVCRXBYYUdBTUVKd0FZS0JDZVh5NkZVcXJpOHZGeFFsQXdCL2dGQzlWTUhOemMzZUhsNVFhL1h3TlBMU3dnL0c5eXhGMDBNUnc4ZE9vU21UdWlKdEZvdEJnMzZDQ05IRE1NNzcvWkcvZnI4dkd5VEprM1JzVk1YREJzNkdPNXU3bENyMUZDcFZkTG5ObTlPUWtsSkNhWk5uNFY1MzMwTEFNakkwR056MHU5SW5QLzlvd0ZzQU9EcDZXa0hiallnVmc3WXhHT0xzaVpld21hdVZBUTZhYTROQUN1UzRubDdlMjg2Zi83OGpYcjE2dldqS09ybGU5MWZ1VnlPdi83YWo0aklTQncrVkRYTzloRWpQOEdJa1o5Z25NQmcrcWlhdjc4LzlBNVVUTGR2cHlJcWltOUZPZkRYZnF4ZTlSUG1mRGNQd1FJUDNZc3hMemk5SVRtQ25hbTBGTnUzYjBPWExsMmhVQ29SR0JpSTl1MDdsRXNBYjFqL0MzYnQzSUc1Q2ZOcnRKSHpYcmQ1L1BneDBISTU2dFd2LzhDUGo1V3g3dnRiZjM1enR4L2pVMUdKT3J0OWdZQ1FldFFBZ2lVSmdpVkFjQ1RIZ2dMSnlVQkNKcE56K2ZsNWNITjNCMk8xd21ESXdMUFBOUzZiS1BEemhWdnFMZmo2K3FGKy9mL2YzcG5IUjFYZSsvL3puR1gyeWI0TXlZU0VrSVJjdHVDbHdyVmlYUzR1VkZzcHVLK1hxcTAvL2ZXNklsYTlyYlYxQlpjcXlxMTZSYXUxZXVVVmJkVWY5ZDY2d3IwZ29sR0pDWVFrSkNRa0lTR1FaU2FabWJNOHZ6L09lVTZlT1psSlFBRkp6UE42SGVaa01wTVp6cHg1bjg5M0wwZnFLTWVJTlp2OTdMUFBBQmp6aU8yZHFCc2FHdkRBL2ZmaW50L2VpN1hQUFl2SmhVVTQyMVRLbDE1Mk9TNjl6RWhzdU9icW4yTHExQkxMeW5PNzNiam50L2RDRUFSRW8xR2twcWJpclRmZlJIK29IOWYrL0pwdjN4UzF3MjNtekprb0tTbEJRVUZCM0ZpLzFOUlV5K2ZtZHJ1WmFVclozRktiV2NyOGJvck5OQjFncHVtcVZhdnVIaGdZZVBMcnZ0ZC9tRDRESDMrOENYVjFPeERnMGpNKzNyd0pLNWJmWXYzODZDT3J2clhvMlloZkRyTzdNUUJRWGJmYVNnSEEyZWY4Q0I5KytENjJiUGtZcXFyaXZmZmV4VmZWMjNER21XY0NNQWFNRUFJSW9vamUzaDdMUjBMMStLRFBwTHc4Yk42MENZcWlvTXVNOWpxY1RyejR4eGZ3eWlzdlExRVU5UFFjd0lZTkgySDI3TmxEcHZDYmY4VWJyMWZpc2NkWEg3VStkUWY3bXRGb0ZCOXYzb1FIN3I4WFA3LzJ1cU1lT09qVEJwKzkvZkhmclQzN2IzZU1abm9PQUlpWTA2UmlBQlJDeklIR0ZMb2dpVlFrQXBVZ1VCa0NIRVNraEFCK2Z3cnk4NE9ZVnY0UGNMbmNjTHZjeU1qSVJFNU9Edkx6OHBHZWxvNjh2THhSb1FZWUVWUW1SQndPQjlMUzBvWTFhZjEwNnllNC9aZDM0cFJUVDhNamp6MkJtcStxNDRLSGlxTGdwUmYvQ0VLQVdiTm1XejVrMVF4azlQUWNRRU5EQThwS3kzRFYxZGZnbFZmWFllMExMeDQ3aW8wM1MyZk9uRGxNc1kyd1VXSXNFRUtzTnVPbWtxTmNncS9PZXJRRDBHKy8vWGI5OXR0di80K1dscGE2L1B6OGZ5R0VISGNvNzlNaHkvQjZQSGp4ank5Z3dVa240YXZxYldQR2gyWlAwSDN3Z2Z2dzRBUDM0ZlF6enNTLy9lcHVsSmFXNGRlLytTM1dQTFVhSGUzdG1GeFlpSWRXUFdKTk0xcjB3N05SWGIwTlZ5MjdBcUlvNGR6RlAwRnBhUm4yMjhxRmJyNzVWcXhhK1pCeEpaNDhHYzgrOXdJY0RnY2VmR2dWVmoveGU3ejZ5cDhoeXpKT1B1VlVYUGt2UHdWZzVDbXVmT2dCU0pLRWl5ODhMOTVNZk9sbEJBS0hQNWZ3WUYvekY5ZGZCMEtBd3NJaTNITHJiVWMxajAwSC9id2hzcmZ5bEpiNzZ0QTRsT0prVTJyV0xjRlFIelVBUmlVQmlBNVFLZ0JVcElSS2dnQlJBMlFpVWlja09OUFNoMm8vZlQ0VUZCUU01YW1aZ1lJZE83WVBpMzRtVzAxTlRVaExTOFBDaFFzQkFKOS8vdm13bVI4WFhEZzA3Q2d6TXhQTGJ4dWFmN0J4NHdZOC90Z2pxS2c0RGc4OHVNcUM1S0lmbm8yNnVqb3N1OUpRYzcrNDRjWmhDbHM2RnI5NHFhbXBtRFZybHRVT2hSQmkzZkw3M0gwVzNBQlFycXBCNTN4d2lVeFRyYUNnNE1QWFhudXQ3cHh6enJuQTVYSXRPOWozcUtncVR2dm5oZmo5WTQvZ2hodHZ4aC9XUEhYTUhjY3p6MXFFTTg5YU5PeiswdEl5ZkxSeDVEbW1KNTY0SU9rWDErbDA0cTUvKzNYY2ZkZjhiSGpmejNuei95bGhNOFNTMGxJODl2anFoSDliRkVWOHVPRi9qK3B4T3BqWEhPMTRmZFBsOXlmUGt4d0loLy8wMnI0UDM3L3JRR1VmWjNyR0VnSE45S2NwQURXZ1JnMmdFUXFkZ0ZJQ1FrVVFLaW9hSkFBeWtReW9RWWJiNHpHU2IvMURQclhzN0J3anBjUE1VL3ZlOXc2K1d0R3EyUG1hYThHQ2s3Qmd3VW5EN3Bja0NiZmN1bnpFNXg2VFlHTWZOQTgzKzVZQWNCYmNGRVdoWm9VQ0gxU2dYS1VDVTI4YUFPMzg4ODl2QmZCa2EydnJsM2w1ZVZjU1FrWnR3cTVyR3I1LzRnSTBOVFhGUlhvRVVZUitCSnQzVHF6eHVVUlJSRGdjaXN1WDFIWDlpMTI3ZGxXZThvTVRkNEJMWnhvQmFqRXlwTkpZZHc2ZEFHYVFnRUFFb1JJRXlCQXNxTGtndytYMHdPUHp3ZWZ6V1Q2MW5CeWpUS3FvTUhHZVdxTGw4WGd4TUJBK3FNY2R5U1VkeXgrMjErdkY3Tm16SVlxaXRZMENPbW9xT0JZeHRRY1ZtRzJxMjAxVEFGb3dHUHhnN2RxMVgxMXd3UVhuZVR5ZW40MzIvakl5TXZCL2YvR3Y2T2Z5M1BMemc5amQzSVJZTEFhcTY2aXRyVUZoWWRFUk8wWnV0MmVDQ29kNGJMN05ZNWJzdFhOeWN0RFJzZGNDV3lqVS8vd2ZYM2orby92dnV6ZGtVMmw4NUpQZmVLaVpaaWQwRTJqVWlId0tWQUtCVEVUcWdBZ0haTGlJRExmREEwOUpEbnhtU2dlREd0LzkxcDZta1d4TktTN0Jyc2I2RWVIbThYZ3hwYmprdXdzMndDaS9zc1BORHJrRUppcFRiL1lxQmNyNTNwaHBxcHVtcVFaQVhiWnNtYlpzMmJKbjZ1cnFQaTB1THI1RUZNVkR5c25JeTh2RHFhZjlNeTYvOUNLa3BLUmFaVXhBZkxySFY5WGI4TVRqdjhmOUR6eUVxU1ZmLzBOT2RLV2ZXRURZSE5LYmFBbmYwakVMaC9vaEpra2htVFJwRXRyYjI5SFIxcnBoZDB2cjIwdVhMRzVLb3RKNG54b0xqTVdHVkpveFJjcTRjQnMxbjRJZ1Vra1NJVWxtaHc2SERBZHJFbW5PS0dEOTFDenpNei9meUZPYlZuNUlxVFlwcWFtb09HN3V0Lzc1SDlHWkI0ZHpVVXF0K1FrdExTM282T2hBVjFjWGVucDYwTnZiaTNBNGpIQTRqRWdrd28vL0k5emdacUxyT3B1bFFBQ3dlUXFpQ1hpWlV1b0E0QURnQk9Bc0tTbHhiZG15NVVlTnUzWmRtUnM0T29NLzkzYnN3ZHhENlBEUjFOU003djM3Snpyb0RqdU9iY2pLeWtSaGdrNFRUYzNONk80KytzZHNiMGNiTWpNelVaU2cwU1NsZEU5blorZC96cGt6NTVPT2pnN0ZCclZvSW9VR0s5cEpWQmlOSVRUVEVxRnNNeXQwSUVrU0pNbWFVd0FuQnphUHh3Ty8zNCswdERSa1pHUWdOemNYK2ZuNW1ESmx5aEd0SmY1T0t6YUx3SVJnNXN5WjdBTWFwdHpzdCtZMkxHSktDS0VtM01Bck4yYWF3cGhHcndGUTYrdnIxWXlNak1vbm4zenlrd1UvT0dWeFJrYm1sVWY2aWk3TDhpRTlwN0J3TXJxNk9yRzNvdzArZjhyRXpJTlFQMEtoZm1pcW1oQnFBRkJVV0lqT3pxTjN6Tmg3MGpVdElkVEM0ZkRMYjd6eHhrZVhYWGJaZ1ZGVVdwUlRhTlpFZGxPbGFTYk1kQTVtUnNkYjJkYksyODMxVWpQYmVXZG5aeU1RQ0dEeTVNa29LU2xCZVhuNW1ENFB4b3hpNDFkRFF3UHE2K3ZSM055TTl2WjI3TnUzRC92MzcwZGZYeDlDb1JEQzRUQUdCd2N0NVdiT1hDRGNHRUJldlFtbWVoTk0wRXNBSkU2OVdRcnUvUTgyVkV3cExsNHFpdUtaUitMLzFibTNIWk1DdVlmY3RvaFNpbDFOemRpL3Z4dWFxaU1TK1c0Mm4zUzdQUkJFRVZtWldTZ3NMQmhWYlRRMzcwYlh2bjNRVk8ySUhUTzMyd05Sa2hJcU5VVlIvcnVxcXVxLzVzK2YzOElCTFJuVUVwbWQ2cERaYVFITm1FMWdBczBvWkk5WGFGNnYxNEphUmtZR3NyS3lNR25TSkJRV0ZxS2twQVJUcDA0ZDgrZkNtQVFiQUxTMHRHRG56cDBXM0RvN08zSGd3QUgwOXZhaXY3OGZBd01EL0dpL1lYRFROSTJZdzV2Wm1EOEdOMmFlc3BGL01nODNBTTVQUHExYWtKT1RlLzdoNnRRN0VBNGgxTjhIZ0I3MlJwTVQ2OWhidXE1dmJXeHNmTHUwdExUV1ZGeDJsUlpMb05LVUJDcE41elpxV2pCSm9lWXgwem44MW55Q2RDUHlhVUt0dExRVUJXWWx5VmhmMGxoOTR3VUZCVENyRG1BV3hWdTNpY3hWMDBTbGdpQVFRUkNnS0FvbGhMQ0dsL2JBZ2hVcEpZUXcwOVE2QVkrZmU5ejdKU1VsbXg1KytPRXpVbEpTemllRWZHM2Q3dmY3SVVrUzh2SW1JUkFJVEh6cngvR2lsTzVvYjIvLzY4S0ZDNnRxYTJzWnpPeSt0SmpOaDhaRHpSWWNzSVlYVTFFVXFTaUsxdmRCbG1YS2V1NHhxSG05WGd0cVJwREFiRHRVV0lpeXNySkRIdjA0QWJZanRISnpjOEdhVVBLQVN3UTF6dmZHWmlFU1JWRkFDR0VKdlpRT0RUWFZiV2toR2dEVm5HK3FtUDQzNWR4enozM3JqanZ1K1BEV1cyODlQUzB0N1h4Q1NQSEUxM2RpSlFEYXJxNnVyci9lZmZmZFc5ZXNXUlBsVE1sWUF0T1QzU3AyczVPZGk4eVh4aWF5MjFXYUxNc1cwT3hRWXdFQ2xzNVJWRlNFc3JLeVllMkV4cndwMnRUVU5PYi9FNUZJQkkyTmpWYTBkTisrZlZhME5CUUtZV0JnQUlPRGc0aEdvNVpaYWhib0VsWXp5Y3hTTG1wS2JLYXBTQ21WbUluSytkOGNBSnkzM0hKTHloVlhYTEV3SlNWbDZUZHBham14eGhYUUd2ZnYzLy9tbWpWclBuMzIyV2NqSEtDVUpFQ0xjYkN6Unp1WlVyT2luY3o4NUt3VXE5czBVMnQ4b0NBMU5SVnBhV25tM004QUNnb0tVRnhjREpmTE5lNk8vWmoxc1NVNGliQmp4dzQwTmpaaXo1NDkyTHQzcndVNEZsUmdnT1A5YnN6M3hnR09tRjE5Q2ZPL0lUNDFSSVFSWEVnRU9NZnk1Y3Y5SzFhc09EVWpJK05jUXNpTWlhLzNkOUtIVnRQWjJmbTNYLzNxVjFYUFBQTk1kQVNnMlRmRk5EdFZEbVlhYjNiYVZacXAxT0tBbGlqeXlZREdVam1LaTRzeGJkcTBNWnZPOFowQkcxdE5UVTFvYkd4RWEydXJwZDRPSERpQXZyNitwRUdGQklHRnVNZ3BVMjhNY2hqS2ZVc0t1T0xpWXNmR2pSdFB5czNOUFZzUWhCTW12dTdqZjJtYXRybWxwZVhkazA0NnFicTF0WlhCaVFlYWNoQkFZOCt6QWdNQUtCL3haQ3FORHhBa0N4S2t4RTFuRHlBWURLSzR1QmhGMzlJZzR3a2YyOWRjUlVWRmZGdWpPQi9jS0FFR2RpVms2bzFxbW1ibHZjSE1kVFBWVzF4d3dlWi9pd0Z3TkRZMk92THk4dDRGOEZGZFhkMmNvcUtpaGJJcy8zamk2ei8rVmpRYWZXdjc5dTMvTTJmT25GMGN6SGlWRmtzQU5TVUowUGpnUUZ5U0xhL1NlTFBUNFhBTTg2Y3gwNU5QNXlnb0tNRFVxVlBIVlpEZ093TTJ3QWdxOEgzYlhDNFgrSlBBRHJkSUpHSUJMaGFMV1pGVEJqY3V1RUQ0a1grc1F3aU1mQ0lWZ0dJcU9BdHdBQnhsWldWYkFIeis3cnZ2dmpwdjNyd2YrSHkrc3dFRUo1QXdwbDBmcmYzOS9lKzgvLzc3bnkxZXZIaGZFcUFsZ3BveWtrSXpMNWg4bEI0c3BzV3RrSlR5QUFBVFRrbEVRVlRtQnVpNlRuVmRoNlpwVmw4eVJWR3NCSFdtNkJ3T0I4TGhNTnh1Ti9yNys5SGIyNHZ0MjdkaisvYnRoK1VZK1AwcEVFWEJTaG1aTUVXUG90K3RycTRPemMzTmFHdHJ3OTY5ZTdGLy8vNFIvVzVtS1ZiQzRBS1gxQXZUTkdXbFdYRkJCcHVKeXB1cU1nREhKWmRjNGxxNWN1WDhuSnljMHlSSk9tMENFMk5ucWFyNmZrdEx5Ly9jZE5OTnRYLzV5MStVZ3dTYWtnQm85cUFBZzVsT2lBQ2p4bE9nZ2loQ0VrV0lyQ1JLa2lFN1pEaGtCNHlwN0taU2M3dmg4WHJoOS9tUmttcU14c3ZLeWtKdUlJQmcwQWdTSEFsL1dwakx3Wng3RE9WZ2ppdXdYWFRSUlhqMTFWZHgvZlhYWS9YcW9YNWZyYTJ0YUdwcXdnMDMzSURQUHZzTTU1NTdMZ29LQ3BMNjNiaUVYcGgrdDVHQ0MyUVV3RWxKQUNjRGtCY3RXbFN3ZHUzYStUazVPUXUvU1Q3Y3hEcWlGOGdkUFQwOUgzejAwVWRmTEY2OHVKdURVaUtnS1VtQXBpWURtdGtqa0RKZkdoRUVpS1l2VFJRTm9FbXlXUm9sT3lBN0hIQ2FVSE83WEhESDVhZ1o2UnhaMmRtbStUbjVxS2lwenIzdHlKc1VPR1p5TWNlZEtTckxNdDU0NHcwODhjUVQxaFVxR0F4Q0VBUlVWMWNETURwMUJnS0JZVDQ0ZXk1Y0xCYURLSXBRRklWbGRaTkU1cW5OQjhjNmhRaW1pU3B4SnFwa252QVcyTmF2WDE4ZkNBU2FBYnkrYmR1MjhxbFRwNTdnZHJ0UEF6QlIxZjd0d3F4dFlHRGdnNXFhbXFwNTgrYnRaajdWZ3dBYXY2bW1RdE1TbVp3TWFJSWdVRXFwbVY5cEpOcUtrZ2hKWkxXZUVtVFpZU2cxRmlSd0dwRlB0eG41OVB1TnlHZEdaZ1p5c25PUmw1ZUh5WVdGMXF6Tkk3MjhQai8yN3QwN0FiWWp0UllzV0lBTkd6Wmd5NVl0bUQ5L3ZuWC94bzBiTVdmT0hHemR1dFVxOWpVbnpjY0JMaHdPVzBHR1NDUmlBYzVVYjlRZVhOQjFuUTh3SkFveWFBQkU4NG90VVVvWjJPeEtUcDQxYTlibkFMNEM4UHoyN2R0bkZSWVdIdTl5dVU2WmdOelJnOW5nNE9CSDlmWDFYMVJVVk96aTFWVVNvS2tIQ2JPRVFPTURBN3F1VTFtV01VeWx4Wm1lVHJqNGRBNnZGN0ZvRkZzLytRUVhYM0lKTWpPemtHT21jeFFWVFlrYlJQeE5WMjF0RGQ1KzYwMVVWTXpCNldjTUw1WDJlbjBJOWZjZU01L2x1QU5iUmtZR1RqMzFWRlJXVnNhQmJkMjZkYmpnZ2d2dzZhZWZJaGdNb3JTMEZCNlBCelUxTmFpc3JFUlBUdy9jYmpmS3k4dVJuNStQd2NGQlNKS0VuVHQzWXQrK2ZkYWdFMG1TYUdabUprUlJKS0ZRQ0pGSWhJcWlDTmF4RndBUlJkRUNuSzdyZ21sMmlHYmtWRFJQZkdhbVNnbEFKNVdYbDI4RjhEbUF0VjkrK2VXMDR1TGlPUjZQNTRTSjNMakR1M1JkcndtSHd4L3YyTEdqNXZqamorZVZtYzZCYVNTZ3FSelE3T1ltaTV6VFpFQmo2UnVxcXNMaGNFQmtIVGtrMDRKZ0tzM2hoTk0xM1BUMHA2Umd6bkhISVJpY2JLUnpGQVNSazNONG81NVBQYmthalkwTkdBaUhoNDFsNU5mUkhDeituUU1iQUN4ZHVoUVBQL3d3SG56d1FRREE0T0FnMXE5Zmo1VXJWMkxGaWhWSVQwL0g3Tm16VVZkWGgrZWZmeDZYWEhJSkNnb0tVRnRiaXpmZmZCT3lMQ01ZREdMMzd0M282dXBDYVdrcFpGbEdUMDhQOXV6Wmc0R0JBYVNtcHRKWUxJWklKRUowWFlmWDY2V2FwaUVTaVVEWGRTcEpFdUdpcU1TOFdnczJNNVd2YU9BM0huVFM3Tm16dnpDVjNLdnIxNitmTkhmdTNPbHBhV2x6WkZrK0FVRHFCSjRPYWZVcWl2SnhkM2YzbDVzMmJXcFlzbVJKTjRZaWtjblVXU0tvOFIwMlZOdHpkVTZoVWI0L0drdXdGU3dmbWhIQkZBU0JPcDB1UGo4TnNzTUJnUkRzM3IwYm1xcENsQ1RNbmpVYitjRWdLQVgrMzl0dlFSQUVwS2RuNEpISEhyZXNrRit1V0k2MnRqMEFnSjZlSG5pOFh2ejVsZGNBR0oxeG52ajlvK2p0NjBWR2VnWnV1LzJYMXBBZUFIanRQMTlGWmVVNjYvRUFjUFUxUDRQRDRjQ3FsUStPbVE5NVhJSnQ4ZUxGdU82NjYxQmRYWTJaTTJkaS9mcjFtRDU5T2dvTEM2M0hlRHdldlB6eXk3ajQ0b3R4N2JYWG9xMnREY0ZnRUtGUUNKczJiVUpGUlFWeWMzUGg5L3VSbFpXRlNDUUNuOCtIZmZ2MlFkTTB1TjF1UkNJUkFLRHA2ZWtRQk1FeVVWVlZoU2lLYk5ZQ2k2SVMwelFWelBzWTRFVHppeUtacWs2MFFZNEhuYlJvMGFKZEFGb0EvTDJpb2tKKzdybm5pb3VMaTZmNWZMN1praVI5RDhCRUsxMmJrRkJWOWRPK3ZyN3F1cnE2eHF1dXVxcTFwcVpHdHlrenpXWTZKZ01hRHpQK09ick4zTFFVbXJraEdkQll6elJDQ0Z3dTF6Q1Z0cWR0RDNLeWN6Qjl4Z3lvcW9ydHRiV1kvMDhuSUQwOUhkLy8vb21JeGFKNDlaVS9ZeG8zMy9UK0IxY2FCTy90d2MrdnVRbzMzWHdyQUdQTzUzMi91d2UvdSs4QlRKbzBDZS84YlQzV1BQVWs3djdOYjYzblZzeVpNNnp6c01QaEdITWYrcmpOWTF1d1lBRmVmLzExekp3NUUrdldyY041NTUwMzdISFYxZFhvNnVwQ1pXVWx1TWxXMEhVZDJkblpjTGxjYUd4c3hNNmRPNjAwRVVWUmtKS1NBcS9YaTRFQm80ZVgzKytIcG1sVVZWVU1EZzRTVlZVaHk3S1ZhMlJHVVZrK0VqWEhhUTFUY0thWmFsVTJjSkJMQkR2cGl5KytrT2JPblZzTllEdUF0d29MQzhXWFgzNTVjbWxwYVhGcWF1bzBXWlpuRWtKS3Zrc1VvNVRXeDJLeHJ3NGNPRkMvZmZ2MjVzc3Z2M3h2YTJ1cmJsTmxpZFJaTXBWbS9ZNGxZOXYrQnU4M2l6TTNlYUJ4Q2VCeFFHTUtqUkFDdDhjOWxNWmhtcDdCWUFGMjF1MUFXMXNiU2twS2NNbGxseUVqM1loNkJnSUJSS05SdU4zdVJDWTJmblAzcjNIMk9UL0d2SG1HUzJiWHJrYTB0cmJnRG5OZ3QwNTFlRzFEVmNyS3BxR3NiTnFZUHcrazhYcUNMMTI2Rkd2WHJzVnR0OTJHdDk5K0cvZmVlKyt3eDZpcWlsdHV1UVUvL2FreDA3Szl2ZDFxT1M2S0l0NTQ0dzI4ODg0N0tDNHV4dVRKa3pGanhneFVWVlZCa2lUNGZENXJpSXZYNjdWU1EyUlpwdEZvRkU2bms1alJVMnFMb0RLd1dWUHNLYVc2ZVIrRG5BQWpSWUF2d0JkdGdCdTIzOXpjTEo1NDRvazdBTlFEZUJlQXVHclZLdC9wcDUrZWw1K2ZQOW5uODAyUlpibEVFSVJwTUhyTGplVVYxWFY5Unl3V2EranY3Mi9ldlh2M25uZmVlV2Z2blhmZU9RZ3VKMndFbUNXRFd0dytwOHppekV5Yk9xTTJvRkcra3d6ZlljWU9OTFlCZ05mampROFFlRHpJeTh2SGpPblRjYUNuQnp2cmRxQzlyUTAzM25RTEp1WGxJUzh2RHp0MzFpVThPUC94N05Od3VWeTQ3UElyclBzVVJVRWdFTURhRjE0Yzl4ZTRjUXUySlV1VzRNWWJiOFRUVHorTnNySXlUSmt5WmRoanBrK2ZqbTNidHFIRUhLWlNVbEtDWjU1NUJoczNic1JWVjEyRlRaczJZZUhDaFZpd1lJR1Y4N1o1ODJhNDNXNzQvWDVycXJYWDY3VWlwdzZIZzVrVmxHOW9xV2thQkVHZ3FxcUNVZ3BSRkNtbGxKaEJCOEtwT0ZaNFR6aklDU2JraEFTUUczSC8xbHR2SFFUUURhQ0dNMzJGeXNyS3JQTHk4dXlzckt4Y244K1hKOHZ5SkZFVWc0U1FBZ0RIU3J1SENLVzBSZE8wUGJGWXJEMFVDclYzZG5aMjFkVFVkRjk0NFlVSE1KU2RyNDhDczJRS0xlRStCelBkRGpNTURRQ2l5ZFJaSXFEWml0YXRqVVhqQWNEbjk4ZVZSdmw4UG16ZCtnbW1UU3ZIcWFlZUJyZmJqWHQvZHcrbWxaZkQ1MHZ1Y2RpNGNRTSsvT0FEL1B2VHo4WWw1WmFVbEtDdnJ3OGZmZmdCZm5EeUtXaG9hRUROVjlYNDBZL1B0UjZ6YzJjZHFxdTM0U2MvV1RvQnRtTnhCWU5CekpzM0QzZmRkUmZ1dlBQT2hJOVpzV0lGempyckxOeDk5OTI0OU5KTFVWTlRnK1hMbCtQbW0yL0dqQmt6a0pXVmhZNk9Edmo5ZmlpS2d2ZmVldytSU0FTeUxDTTlQUjM3OXh1VHozMCtuMVd4d0U1U3Q5c05WVld4Zi85K3FpZ0tmRDRmSkVraWc0T0QwRFNOTWo4R1N4Y1JCSUVWMjRNQmJnVElXWUN5ZFIwWmFlT1RoNFVsUzVZTUFOakQvVjMyR3VUUlJ4LzF6Wm8xS3lVUUNLU2twcWFtZUR5ZUZJZkRrU0pKVW9vb2lpbUNJUGdJSVQ1Q2lKY1E0alpCeUJvQXNOY0NCd1pyYkJ5bGRKQlNHcWFVaG5SZEQybWExcStxYWw4MEd1MGJHQmpvNytucDZXdHZiKy8vOHNzdlE4dVhMeC9nNEVWdElLTWp3RXkzS1N4dHRJMTEwVWdBc2ppWThTQURTNmcxcDZUeDVpYURtYTJ0VUJ6UVdOODBwOU1KU2lsU1UxTnRyYnRUY2RaWlA4Uzc3LzQzR2h2cTRYUTZjZWRkdjRMUDUwTnJheXR1dnZGZm9TZ3g5UGIyNG9Memx1QWY1ODdGN2IrOEU2c2Zmd3lSU0FUWC81K2hDWktybi9vRC9INC83bjl3SlI1NzVHSDg0ZC9Yd09QeDRHYmI0T0dxeno1RFplVzZNUSsyY1ZkNW9Lb3ExcTFiQndCWXVYSWxicnZ0TmpRME5LQzQyT2dCS1VrU1hucnBKVngwMFVVQWdELzk2VSs0Nzc3N1VGOWZqMEFnZ0t1dnZocDMzWFVYQ0NIWXNtVUxycjc2YXRUVzFzTGo4YUM4M0ppdldGVlZoV1hMbHFHMnRoWi8vL3Zmc1hqeFlxdHFZZGV1WFdodWJrWkZSUVVVUmNIT25UdWhxaXFDd1NDYmxvWHU3bTZtMUNBSUFqdXhDZWVMc3lESDloTkFMZzUybkpvVEVvRXN3VDUvbTJqalgyZWtEUWx1N2Z0eGJyQUUrL3p0U0pzZFpQWXRtVW9idHM4Rzl5U0MyR2d3WS91MnhxVUhCVFJlcGZITklIdDZlakJwVWo2OFBpLzhmbk8rcDFuQW5wc2JRSDUrL2lHTndmczJWc1BPN1RqNTVKTW53RFpXVm05dkwvYnMyV1A1Myt6MXBteDRqTDJaSlZkekNtNE1vRlc4ek14VVBzakF5clc0c2kzK2N5STIwTVZCamxJUWdBNkQzU0grbkFoc1BPQ0VCRkFiQ1hBandjME9OQ1NBMkVnS1RVK2kxdXlPL1ZFaFpuczkzbS9HWUdiZGNxYW5mWEEzdFhkdFpqQnp1ZHhJU2ZFUGF3TEpGRnAzZHpjS0poZFp6U0F6TWpPdDRuSy9QMlZNZkUrT0piQ05HMVAwaEJOT3dPYk5tOGRjRUkrL3lLU21wakx6bEhKZEhBalgzWUVRUXVKVUhJeHhnY1R3MDBFQUNFa0VKVW9oMktCSFJnSGFTSEE3Rk9WMktHQTdGTE16R2VDb0RXZ2pBVXkzQXd3Z2xCQlFnSUFRQzJRR3pBUUJBakVoSmdvUStSSW90aG1sVUVOcVRaWWhDQVFDSVZBMURkbXBxY01hUWZyOWZoQkNFQXdHb1drYWZENC9VbE5TNGZWNDBkZmJoNzdldm1QK1JNNFBIbHZOYXNZTjJEWnQyblRVWG9zZjJOemQzUjNYeURJY0RvL1VxZGRTYm9xaVdNck5WRzk4RFNyaEZCemxsQnk3cFRaVGxjRkU1OVVkcjdJSUFVa0VQUTZTbzRGTUdBVm95YUJHRWtCOE5MVkdreWkzWktCamNOSkhlZzV6OXJPWnNwenpQNUVxczhHTVFCRFk3RnFCQ3NMd21ScVNKQmxnazJUSUp0UWNacUt0MCtHQXJ1dVFKQm1abVpsVzVRQnJCQ21LSW9xTHB5TGJuRVV3c1NiQWR0UlhRVUVCY25OejBkYldablhwVFdTZXNvNGhJd0dPM3hqWVJvTWNCemhvbWtZSmt4aERRSXVEalUzaHhVR1BTejBaQmpEVHRCMEpaRWZTeDJiN21TbXBwTUNqaVo3UGRjN0FzSDJEOWdiUUNBRUJBUkVJRlFoQm5Eb3pGQm9WQlFHQ0tFSzBRMDJTSUVuTXAyWkFUWFk0NEpCbE9FeXowNmdxRUNHS0FnS0JnTld1bXpXQ2xHVVowMmZNT09TQjJSTnJBbXlIZFRrY0RoUVZGVm1BNit6c3ROcVE5L1Qwb0wrL2YwVC9XekxBY2Y0M3E0TUlEemt1aWRpQ25HbWVJbjY0UGEvY0NFeEFZUWgySU93N25neFlOcFUzcWorTnNuMDZpbUlqMXMzQlFHNFU0UEUvRytZai8zZHNUbjhBb0xwT0lRZ0NESjRSYXZZL0E3R1VtY0FGQmtUVDdEUnZlWVVtTW9YR0FjMVVhUEhCQVRjOEhzT1hwaW9LSmsrZWJMWHJadE9pb3RIb2lGQWpWVjBnVDFZQjlUMkgvMlF1U1FPOS9qalE0N0lud0RZZUY2VVVIUjBkNk96c2hLcHBoMVRVRzRsRTBOL2ZiNW1qYkV2V3lKSnRsQUk2cFpBa0NVNm5jeVRBUWRNMHZwckJncHdnaUtCVXA3cE9UY0Rwb0JTZ29LejlLZ0JDVFBDWjMzZVlJQndPS2k2Z1JFYTVqZHUzZUhWdy9RenBJU3E1K0RlZjRIZGN6aFpsK2MraUtGclBZZWFscG1rUVJXa1l6QWlmZzJiNHp5eW9qZVpIazAyejArRnd3dUYweEFITjR4bWF2RDRRN2tkcGFTbHljbklRQ0FUZzlYb1A3Z1JiWFFVMDlCeVpFNysrQitUSkt0Qm56NWdBMjNpRVdsVlZGVUFFZUgxK2VMMCs1SDZOMWxLRGc0UG83T3hFZC9jKzlKaVQ2ZnY2K3hBT2hSQU9EMkJ3Y0FDUndRZ2kwUWhpcG5vYkdCeEVKRElJVlZHTXEzcGk4elJ1WTRwTlZWVklrZ1JkcDBTbk9xaXV3d0NjTVJxVlJXVk5BQkRaNFlCdW1ycU1SeXk2TjhRbkFrN05JWWw1eVlNU0IyR0NqZ0kyQWtLU0FpNE9XUEdQNDM0bWhKZWFvSlJhZFpqcy8wZ0lNU3BFSEE3bU82TU1haGJNREQvYWNMTnpSS0N4dGtJdXVOd3V1TjBlZUwwZWVIMCtwSmpwRzJucDZRajM5Nktpb2dJZWorZVF6aXR5cEtER3dXM0NGQjJIcTZPakF5QUNjbksvV2JkUnQ5dU53c0pDQkFLNTZPcnNRdmQrTTdqUTIydVpwd01EWVF3TUdEQ0xScU53ZXp5SXhXTG83K3VGSkVsd3U5MGptcWhNdFdtYUJrVlJJRW55VUpCaENHNUVWWTIvNFhRNnpjZVkvamhSaEs0YjFsczBHaldVaWloaXlKWkZITmdTcEFReGZtQW9ka0VUWGl5U3RhTm1iYURpMVpUMVBHci92Wm5ReklQTkFsZ0NwejhJSWRBMERRNkh3d0lhTXk4QndPbHd4cWRxaUlMMUdWRks0VExyTkYxdUYwUlJ3aGVmVjFsLzErUHhvS1MwRkhtWm1YSHBHM2FGNXZmN2taS2FpdlQwZEdSbVpDSTdKeHV0dTVzT0dXb1Rhd0pzWDN0MWRuYkI2L01mdHIvbmRMb1FMQ2hBWU5Ja00vZXQyMUp3L2YzOUNJVkRHREFWM09CZ0JORm9CQTVaeHVEZ0FIdyszNGcrT0g2THhXS1FaVWRjQWI4Sk9LcUdGQkJDNFBmN1RSVkhDYVU2ZE1wTVZtb01yeUVDWkVuaS9YU2N2MjdJRmNZQnovcUhETzBOZ3g4Yk5HS0RHMVZWMVlJVnBZQ21xU0NFUWhDTWFneEZVVUFFQVpKb3ZDZFZWYURybEJyRjRrTXF6WEw2MnphQkdDYW1wcW5VNVhJTnl6ZGo0T0toRmdxRkVBcUZVRnc4RlM2M0czczdPdERXdGdlelpzMEdVMzNmTzM0ZTB0TFMwTmZYaCtwdFg4THBjR0xHekZsd213ck40L1hBNS9XWkxib05oWmFSa1luczdPekRtbHliK2Z4aUtOV2Q2RnYxdndDQWpDZCtpSUczNmhCNXB6N3BjL3pYSFEvbktVWFlkNEhSanNoNytXeElVOUxSZTgrSEIvMjZveldiUEpiVy93Y2FMdGJ3dU9MVHF3QUFBQUJKUlU1RXJrSmdnZz09Il0sWyJzcmMiLCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVRZQUFBRTJDQVlBQUFEcnZMNnBBQUJLb25wVVdIUlNZWGNnY0hKdlptbHNaU0IwZVhCbElHVjRhV1lBQUhqYXJaMXRsdVc0cldYL2F4UnZDQksvT1J6eFEydjFESHI0dlRjanMxeFZ0bC83clc2WHF5SXo0c2E5RWdrY25BTUMwTFgvOS8vNnJ2LzZyLzk2U212aFNybTIwa3U1K1YvcXFZZVhQN1Q3NTMvOS9QZTUwL252K1Y4c3YvNzAvUFg3MXg4L0NIeU52dkxuQi9YOStmcThmRC8vNHhkK2Y4WXovdnI5cS8zNlNXaS8zdWpYRDNqam55dndrLzN6K3ZORjh2M3c4LzBuL1hxanZuLytVSHFyZjc3VThldU41cThYbmt2NTlXLzY0N0ordnZqMzZ5L2ZxS3pTeW54UURHSEhKOTduditubkN1TFB2eS8vMXZQZndPdWVHUG56RTl0MXZ2eStKUmJrTDdmMysrdDkvM21CL3JMSXYvOTAvWDMxLy9qVDN4WS92TCsrSC8rMmx1WFhHdDNsWC8vZ3lYLzdmdnpqWThKZnpPR1BLd3AvL2NFWTZaOXY1OWUvMzdmYTkrMmZ1M3RUWVVYTEw0czZpLzM4Zmh0ZU9GanllSDZ0OEUvbDM4eWY2L21uODArNzMzdXk1ZXVlOStDZitmUW5zQ3ZmOWFSblBlL3pQZnQ4bmMva0VsUFlvZkkxaEJuaStWNkxOZlF3by91VS9PZjVRbzA5cnRqWXl4bjJ4ZmFsR1A2NGx1ZDhiaitmTjUvR0o2K0hsNGFITjN2NGxYLzd6L1hmL2ZCLzhzLzFmZE1sZXU3MngxcHhYVUc3NWpMY09mL0xxOWlENS91MWIva3M4TzkvZm0zLy9TZjd3VlRad1h5V3VYR0Q3ejErM21MazV4KzJGYzgrUjE2WCtmcXp5YzlWMTY4M1lJbjQ3TXpGUEpFZHVNc1Q4MU9ldTRaUW40ZDFiR3pReTVXSG1NSmdCNTZjdytJaVE0cXhoS3VHRnZ4c2ZxYys1N1VoaHhMOE50akVSdVJZOEszR0RyMXNWa29aKzZtcFlVTnZqam5sbkV1dXVWMjU1N2ZFa2tvdXBkUWl5TDAxMWxSekxiWFdWbnQ5VzJ5cDVWWmFiYTMxOXZiUUl4aVllK20xdDk3Nys0YnI1WU5lM3V2bDlTL2ZHV0hFa1VZZVpkVFJSaC92eEh4bW1ubVdXV2ViZmI0cnJMaUFpVlZXWFczMTllN24yaURGVGp2dnN1dHV1Ky8zdzlhKytLVXZmK1dyWC92NjkvNnhhNzkyOVovKytSL3Mydk5yMThMWktWOVgvOWcxdm52Vit2c3RIdUVrdTJmc1dFZ1BPMTdkQVF3NnVHZDNlMUlLN3B4N2R2ZUFVK1RBUldiMzVscVBPOFlXcHYyRS9EMS83TjAvZHU0LzJyY3J0LzlvMzhML2JlY3V0KzcveDg1ZGJOMC83OXUvMkxWbG5KdG54MzY4MERXOUk5N0hhOTdBRlgxamZmeTF4QysvOGF2ajI3TnVZZElmLytjL3ZWN3ZaNy8xNFY3THUrcFRjMGlsdld4dUhKM0xHSFBpVjJsRUwyVy9pWmVNSGRMWFdueTVnOW5XTSs4OXJqQm5ITHUySis4NmRzeGZlNEc2Yit5MVY1NEplOXFUejFxMTMydnQ4WEFmTSs5M2pUVkNHbnp1RS9vTXFWNVA0NjBtNjRYMTNYdlhtUVkyc0wrWTcvNThOZTM2OExPWTU3M21IcDN0SFBVZVQ4cGpzMk9BLzhzdVlsVFhUS0xWcythcUw4UWt4MDE0ZmRmTE9uUXVNZVRCbmxiV0o0elNBZlkzei9xTlZOL3dMU3hyZmlYT1hFZTZJRFYxM2l4R2JRbUQ3a1NaM3N2M3NNRmYzU3pHSFB4eHhhL05MOXhjbnY0em9DRjE4cTZ4em9CenpxOWRiZVdTMG1LZFpyNUh1VnNQN1BzY1FIN2ZxNFUxUzF4aHJQdEwrVnNZMEZ6NFFZOTVyeHBxM3lXd0VTbVhxN1NIUGZscTV1YU1OK3U3Mll6TzY5ellmN1A1ejh5cmNUSEFRU3o5dTBjcTF6RGd4YnVVdFFhd3dxMkZ1UEVqREJPempXc1V0amx5S1hQRS9QSUpCY2QvQjUrODQ2aGN5b01oOEd2WEdNZXEvanVMK3hjL202V01XUGFZOGNPcDkyemZGZFlxSGZlT2liRE9QV01iS1V4WHBzYzJWL2JXMWo2MytYd3ZZUC9IVzJNdEliQWhSUHIyZkJlaC9RRjlGbUNDS2ZXNXVjZit4bEF4NG1lWHdYS1g4UlUrdlJSODh5UENZeWZ0VGZlYldudDVUOHg5cm5XMTh1VUppSDNIbk1xTERYNy83Z3ErZnZQaXI2VnZ4L3B4UVRHTnNIdGJvT1Axc29QOHRYd1JBTUs3dVVwUUROOEhGVWJuZm5NQVNjU3MyT1YrNzdOZWJDQWFCUmYvNW85WDc2OWVVaDR1dnRmdmlkL1ovZjAxWGVGbGkyckJXcDVaZ3VheTg0UW1ManhrOC82c0lleUdUMzIwbFRCaHRZU1R4SWNrUFF4My9QYWo1dzVzYW9SbnZQVmpLN2orWTVjZE1LNndCUmN1MWRiZkwvTGhrWGU0TmxHNmw4YU9EdWdTSzFSVCtiQmpYamxITDl0N1h2eWhGWmFraDZmbkcyc0xLUWZ1YjcvUzc3ckc4MTZwakZXZWQvSXBnR3R2QkFLd0dPTi84bHZ6UitCdk5VN3dsTC9PQXo0enB4YjN5Q3pNZmpUSGNXTlUxOE05Vlp6MFRiTTI3aDVIZTlkUkVKbTlsSTdKTGxMQTEwSmdKZitkeVY3L3VUMC9YdkhLR3c0WEpqZk5CUmNpVCtjZXBEVTN4amVCVlR4YU9scER3VEtKcnZVdEd5TnM3eTdsRzREQWdwRGxjdmZSaW12RVJZOUtHSjFWVEhvSFY5UXpWREVCcHBPUXBya1dQclR6eWcxdXdubjQvL2V5aXJFTllKS1Y0cDc1MHpEMkFUdnN5VnBQdjhyVGRMV09OUUpRZk9KdThkQ3V6WHM5aEM4Q1lreEV4TWRQR1J1OGlnUlZJbWtwc2QwRTgvUmlHdnRhL1U0NWdvK2RuY2VuUzhaUUhseXJQeDE4WUo5bTVCY3FjY1pQV3FXK1h3dDdFakluL3NSdmJhSUFjWTM3d0ZyWjVrQkVYdW5leE0vK2VOc3ZpQU95RGRCMTE0Sm9Xa0REQTBaaE1jL2dkMGRxL1Q3c0crKzVRT0ZrVkRXQ0RZSmMyMVhreGVpK0F0QmtRaFBvY0UrQy9pRCtzN0oxUGp2aTl4M0dVeDlEenE0NVhXUGk3dkVSRU1EWXhrSnkrYnpsbkFUK0dybWlNY3F6dU0zYjBBUVJnT2g4SFN3Qi9pTitHU0FyZk85SzhTVThjaHY4elNVaHFtQzY1ZGtwRzhiQUpWWi84NHRuOFRHTGxnRnJJeFcvanprbHNBRXlFYStSRm9zT1FJNmF4U2hvRlB6cS9uYUFPc0MyOW9kWUxRTkNSZFFqWG96QUhjQWlxbWphMGlJY2Y1TjF1elpPQ0laRlNFZXF3RDZVWTBsQ3B0WURqRVNRc1M4aVRTRzRWakNzTkw2dXZaOEpmTVNWaGJFdnZWZEphOThnd2Q3M093aTNrV0NlWHV3OEF5OGY3L0h0WXBDNVUyRWxaOXZJY2JBSy8wT0xzVnZZUHB6dEprQytoT1FidXBkMHB6dXZ0VUltM0w3YkN3VUVTc3o1V2JsQkhPdUhTM1BSbU1LUUpSTFNZREVmc0JIWU5SeStsd3gyOWxzdEJiemlRUnZDeHdkamZkQVVHQ0F4elVXRnhMVmFDT0ZqQTlEZ3hRZmRaSE1KSlJlNnpIQ0N6UlBlSVVoNE41ZlA0c1AxUUhaNDNzME5zVTRwRGFJbWRuQUxCaktuL3Y1Y0ZqZVc0eFV5UkdpK0hYTFlDLzZDeEFLVmNDUDhqaHNocU9abnZ3VG1zRGIybkVEVmlUTVFaZS9haVg3WUtKYXY4SXZReGc1bTk0RjVZRXozQjlvQUc0bUw3OEF3OUtqZzNVUjBkaDRFWjNYZW5OaFozcGRieFdUNzNudGRTMzVCTkFvWWQ0c0R6M2c3THZwSkEvQWFLQlp2Z0JNWDFuMjlXTW1jSGRiUmN5Q1lKU1ZXNVhkNnZmU2VSUGdJOEJ0QzlhdWR3Q2dtdUE2bEkvN2NCL1dRQmtBTVpCSytXTjVRRndxaDVBRlkxYzZQQm0vVWVQbHMzblhpVnJFTXBDQjBubzFEWDFlTUl4dm5lb05KZ2dFTHJjNmFha3ViVlhsWWw0VmxCUUlrYk1yTlRjMGRSY2VrR2dob3FJYzJjK3Q1NG9rVE13QXVRQWJlZTJFMWkxRDZRTVlDMGdDcVNlUllGOHl1bVNLQWpxVXFIaUJJY0E1NUdWRXdzWlJRcERrL3NHK3hJWVNyQ1UwQlIzWnVXZ3BzWWNMNTJEWEF2R3ZLUFVhaUF3SUtsd1dwV0hQelBmd1dWQk5ranRBd1RDT1diNzVnbm90K1FoV3Z3S25ydm5yQ205WUwyelR5UFRVQXpJUUw0REprZEFXWERncWhQa0NZWjIzZUhSd0JhTnhxMkdycU9BZzdlb1BaZ0FoNER1SnFodmRUalROcXNCY0pYVERDUkhSOTJNRHBad2dPTjJFN3c4cEJhd0l6RGxvRDRIb0I1SENMVURKNDlRYldDeFRpQW9uK3lBRHM1ZTJ3aS9LQ25FUVhqSGIzNXg0dkN4ekJVb0lJVzhyV29VV2dyMFFiL0hPTnBCV2ovMWl4VHVCaFkrK3B6NTUwR3lzRVJ0eHc1cDRqSVRkT0loaVVBRUo4QS9JUXJTZVZoWVlKUWpzNzdIMitjQ1F1R1g4a0hCQzhPemlGSEcwaEpjSXNZVk1nTHRndlVxVVNQOVVNRjBRcGp1OHVIeDZzV2duell6SG5VOEhrcitjS3h6ZFNBVHlURFlJa1RyYnVnVEFDUEJXVGZyR3JoRzllTDlIS1A2Sk0rUk5HVUpQKzZ5OTFiaVhCczdpcWdKNEMxQUhMaFFSQ1ZnU2tUSlE5WWtlNExOUVB2SWtkSm9DT2lsSTVDZEdBazlVWGhJNEVLWng4KzhHR090OFhxcGJDeTlvRFU1Q0t5cEsxV2NlRmZVd1l3cmNDb2hYOTNSTXNFSDdvVHNBRTBibThBUWd3Q01QcFViUkIwSTNGTDZRRW5JYTBzTXQzdmRBazMwTmNoS0d5cEhEYUpqWGV0MUliVStxVGk5azlaSmdmOVBnMWpIa0ZFektHRzZLRjc3SWgxd25oUjZqMXBpRGpqU1VPb05JTkZCcHJCeUdPLytCWmVzejc1YzUxRlJUbEJvbGJJT0psL0JwSngxWmVFY3YrakkxM2w0K0N3b0VZOUxLMlJFVmV5SjB2VE4wUFlWTUpGeDJUYXdneGdqT1lpeEh0UElDa0M3Y1lIKzhQNG4xTFRmNjlOMDZ2amdUbVVtaGdDNHVIdzRFbzJDVE9BZ0VENmlCVm53dUdSWS84dGdzMGpIc2hCRkFGRGZjTm1FcjJjeEM0aStCdUtxeXo2Z01uN3FBUXdaTm9qbmMxMVN2bUdIQzh1SEVSWGdrTWJzeEc1TWlHWVFKUWZrdDZBTmUzNFZITm5XY05EaUQxazFaRTQzNXZPekZwNGpBRDRjZkhzaE1Kd2hKZzVUQUZGdWY4MWdBOE1DZURVZHNHSWx5NUp4T2FJeExwMkRzd0Nza01uc0I4THZnQWZKeDlOd29Nd1ByZUlOM052UkM3TWVNWE80YkVUcFlmUHY2Q2cxd0ZpOFYxMXdUcmVnc2IyVWE0WkhNZ0Jhb2VpV3N1RmFOSlhMTThwQk5wOXRFb21NZUlDZUQ3eXJHemw2VmxLVEUvU0RaTFA1RVFnQXZrK05YamwyWkc0QWRsb0JPNFNDVlN3ZmlJSVpWL3YvNUVNelJJaVVlWEptcE9CZDRJWTh6clRSZzhrUVcrelc5WFdHRTBSVEpDeDRlSkVnQWdkd0h5ZkZONVh6RVMxUDQ5c0Z6bzMzb0VRWllsWHkwWjdER0w3M083SWpJY1RjbDZ2UUNJdjA0VWJrWm9maVdQRDFJK0V5U0JlQVBIYmZ6cFhRaUpIUzUwWU02OXcydkwvZ3k2QlBQS1Z2eGFEaGNqRVloUWliMmJnSUFDc3poUFRUZFJxYkcxeUFRV3RKbGhmL2c3M3hYSFM1QUJiS1FzMW82akNPeUFVaW96ZWJBd0VUVmZSZzM2U1lnM0tHM0pOK3ZORzdYd0JOamQ0SEtJK01BUGNha2k1SEJ0RERlais5Z3pqR0tZTU1USmlBQWcyNTM0WEZrTi9DR0doY1ZkRTB2ZUNrNms1YmNpSy8xelFkeUVseVRxSGE3MjVVR1lRREh6dVpHL29ucEI1WXJTZlJDVGZVTkdZZFkzbkhQSVpBSnlELzZjWHp3S0JvblBjU1BBRlpyUGU0WlZ3ampHcU1Yd1NpUjhOUERPeFNDenF2RDVyNWFWZ0lpWVJKTVVSRDVlOGI0cVB2aTdGNU1DNzBjb2J4Z3BrcEFyWWkraEtZcUxwZDhrNGlOMyttSHBrS3FnWnNtNWhIUGtsWGx2K0lxWnRJNDc4VDJFMjI5YnYvN3BRaEFlS1BCekpnRlNZWTZzQ094dEMzaDNBS0lEMmlqZVJsbFcrOEdMSGlSUnV2aGw2VHVjSytKVmhJWU1PVUlPUURVS1pQOExMTWhtbFhCc3lEQWh5andtbDcvK3Rqdlg5M3R6Y05FY0Rqdm1EYmloblJPT2ovYVJma2MyQ3laMUNHRGJrREZ3RnhTcUs1dlVLMTlaRi9ybUlSd1Q3THhUajJaTUZXZjJGaWIvblpNNUtCd29RSGpkM0JaczlnOXovY2RGc1ViYks2OFpLL2x1MUU4d3pPK2g2MEs4d0d6OERWblJlSzhscjBWYXhOZE1MNlJ1OTNHYjZVV1dobmpCZkZPcnBzclVaVmtVaFhHRW9mMzlxMDhtWmtpMVRYK2lMWUFhK1hKOXVLSjltOXRtSFdDRkhicXlaaURXb0xpQWZDekhDQWRZWXFjbXZCRlFEMytEdDJic0dWNEhxUWFuMEtrUTlnNFRPNG1udHlKQ1MvdzNWOElLNkxHeHdqaFlyRkFOZjhwK0lCVXllUkd1Q3RFVE1ZVkE4SlIybTBNQzg5K0IvWDUxdythZ0tPd09rZmRPNXVLV3ltaWdCQXZxTEdnSzRNNTFuOHY0L3V5b2Y3NlFqejBHOXBDeGpTaEM3TVlQd1IrMkZPV05yL0QrY1BUU0c4Q0dWbWdOSlh0L0JWWUcrMFBCaHlHaEJOdzdJVFBCQUdXcVJQL3hxbzBnYVpnWTRQN2VBRGlrQVRWeTdlZUZ0dTZ0OW9KT1FjNEZGUmc2dlByRjFNR2VYVC9FK2dQcXBnOVdodFNGZ0FPK0NJZVozSXNLeEY3UVFlTDFjendqbTNzc0NNaUNlcXZUbzVTNGh6a24yUTF2bkRvNkhWb2tocXNMd1RUQzJBTUQyUmVobnNXQU0zU28yd2Z0aHlaQUdENTM1WG41VmFRbHdtdW13bTBRTk1DRkNEM0NOY3Z1N0RNZURVeU9aajc3aHg3aDVOZ0hVdElzMkRzVmlJYktiQ29hVnAwQ01haDVqQVAzZlRGTGVCVUVsaWdIUCtTU0wvVXVsa3pRM3JmSEhKQU9VQ3g2cXR5MGN5a0FlcnNYa3lVVEdCei9HZ2F2aEdRK1p3UGxIRmluUS8vUU8vREJWL2tIY0dXY0FkblU0RzRnYXpEQjRRN3lsakJicmpkci8zZy9QMkwxa1c5bXNCQVNZNkZZUk0xMzRaS1lEZnNpQVFFdkNTZDhDanNQaTNpZjIwVElSR3M4eE96cmcvM2locUJQV0RDTFlXb01BTnZiN0JiTFNweUcxU0NRUUY1QUdDZHBHeWYvekxtaVRKLzJGYyt1SUZxL1R2bUZyTWRmT0JueHlXVkxXN0R2aVZFaWtlRHhBMVdGbTBYc2hIVUI1ekJyTk1HRTFtNlBNd2hSWUUwenc1blFIZXphRFZqZUlCTnZqQTc1N3A4VTc0UmpMUE9rM1BkNGJ1K2ZVQlJaK3ZUR2N2a2x2OG85SW5CUDZBK3BKSnZoa1ZoQkl4ZFRoQkRlZ3hCUU5xSmtJQWlHai8vNG5UdGo4TisrVkxyZkNiWHc1NFZCQlJPaUd3R0E1Yk5sdkMxdlRPQUpDaXpUY1laMG9nSUI3bU5sWlE0dnRnOGVnWVZRUVM0K2VLYk5kaURjQ2FzREJ6Uk41QkY5TitXSlZ1bUhQUlYrQk1pOFQvbU1mcWw1MUMwYmVmZEVXdyt3cm5rd0F5MEU0d2xoRHh3VGkwRFRXSDR3M0V2b1l6L1pIUlYyQjd3emVJMndOK25yWWtUUHI1UTlpcFhGL3pLTWluai9JZ01CWFd4cHRpWnY3M2pqby9HQ2FXeWZLUUsyYzBFVEw2d05JYm9udXhYREFKbU8zR2tSaHRGdWRyaWFha1ZKODVZMzhTU1pSTWRBdUZ6SVUzeHVYbStlWjE0bWFqMEJ3eWFBL2N3T3NzcW1HRUJTTG4xZ0diZUhtaE5HVVFNQkNVYkt5N2lVMFJWak5jQ1NBbmdFYXJrc21kWEFJVmozQ25TakRKSS94Y3lCVEdRek82SThCNTJSMWR5NGFHZ3VLM2RBR2tCby9XTFZva2Vxc3M5c0R1NHhWeUFQVUdXK3o4UitzZlIxa3NFcG4zT3VBRkEwejRWMGpxbVNlK0tCRWFpLzBvVjFZRmZMQitlRFBZTVd3NlFGd1FkMmpJd2JnTnMzNEZxTEhZTUlSWVR2czhka2orSFIxNEtOTmMyZFQ5Q2JIOHdvOUM5NDZOV00vK0lzc2NuckpLQkRMd0xYTkY1b25tZUJoSVpCbk9ySnpPaVJ6Z002UmhEazM5aUpjMGhvRXgxM3JIQzhXYWJXdlcrY0JUaDdNaVRaL0RyeElSSEtzRGRDZG9OWThSVkhLQUR6OXF6UVE4ZTVJQU5RL08rY2xqNEJHWUI4Ukk0OEFSVG5nckVuM0J5RmpSRGJyUGlGcStVWUFXaENUWmxkb3d3djhjak0yRjQzbDJDKytiNkp0ODFjWHM5bmZZZ29BMFlJUGdMc1FOcDNlZnp0U1RCRzBIQ2I2YUhXTEo1d3VraTdScys4QWJTSFQ0V0RaVVRwalNjWGVZZnBYVDRjV0N4Z05wdTFjNFFWRXNDNWE2eWRwUnY2Z2pvd1BtcThrbkVKTkFEZzRubkJCMU9RcWQwSW5JRFlBc20vcTU4ak1OZzBQZ2pId084OHFuampTK3dKVUI4d0NnN1hJSlZRSFVEUU9MbDJuaDBIbmF6Zm5IeGE3ZFpFK0tYaVpNRWNqd29jM3Y2a0trWDZDQkFMRmgxTXNXV3VBbFQ5OW92cDRBYmZJcFJnMjFnWDZIdmwwbk5KcllzQkgveCttVWd6NW54b0hvZ1ZMR3NTM3lzd2hneGhkU3FMRkU1MGNrc3NCWUJBMStmaU0vT1RRQ1RJRFBqSmRYc1lpRDI5dGIxY1VvUWJ3dVhQZ2NPUXk2QUZjeXRtZzdjbnVSOVdoNnlMdkJHOENSYWJNcEg5UFd3SE81ZFFCNVQ5RjVJNkttTWRreGcvQ1p1WUhhdkpIc043MExZWW82eG1zbXZmbmMwOFlLRnBIQVQ0SUxFc0ZSL1ZOdkVQcy85a2g2d0tPck9oUHpQVzRXRkRmV0R4ZURuc2s4Vk83Z1g2RXdhU1lXYStjVWxSOFh0elNXQXFYQTRYR2NyZXdkM2s3bkVRNzdtUTBPOTNrdCtzL2NWR0pwT2trZjgwMWhhVlFjU0lyaUVPeko1aXhDdzh6R01jZGM3bUJ2VlN2TkVMajlpTkMvTXAyTkVEUzlrZllRTFcwSUVtTkllcUhsNFVqS1Ric3liUXROMTRXSXRZSzM4RHFUSWJXR2NrSm1Rek9KYzZlbnE0YlYxVHpQTGlEalJYN053RVRVb0pPMExhY2htSWZGbkZrcUZHa3dPdHN4ejNTb1VQdmdqZGNBc1V5a2xEd1RBd055N1ZFMCtXTUo2REcrSnNndzF6ZjZzUXVzZk45ZCtmbXNManpHektmbHpLUWNCL1F5OWdKN0QzaWVhMmtxWUFjdUZRQWh6M3k2WW9QMDljZjMwbDNEZUxUMjdZeWd0M3ZvSk9uWTM5aEk1VWdwOEZ5dVFQNnM3N3dpTHhCNEgrZVZqb2dvL2liM3cxaUp1UEJMT0pWMWgyOEl2NVd5STdzYWl1VHJBK0JSaXl2bWF4Z1d5V1dJYlFSZ2doemw1cDVWZ1FtbVhVQXNzaGlWZlBwcG90WnlqejNtYjVaR0t5Z1FRL0FoTUFYMFNlL3M1dFRFSUhFV2NyTldHUE9XMDBIMEhyQzlmSHZXWWlEQmJ2TVhEN3pWbHVTNDkrY1JZczhKQVd2LzZtTFloNS9JemwvMzRZME9WNUVKZHJqVXpHVnEyQXlJcVFMbkZxUDVVUjZCemUzK05wZkFVNCsvV0RYOTltTy9qQlpkVnFPblVHZUVvM2tmZXd5Y1NqWUtrU3pySlkwWURkQU9sdzVLVlQreFBqblp3NlFRdVEzT2tDUWFMUms5am1BY05NMlhJbHdqWVV0djJjU1NTREF6SDhzVzRsK2RvSm5udnVGc3Q0VDZWSnd0ZWdUU1ZzWHEyY1l5OE5SZHdmRjIvUVFnZG1lQWd1bU0zOFJlakpoS1ZIVndsNys5UXBpQWJ6a0lzWUlPaEVNL3RhRXVvR1NNRTlWT3NlcDdMTmc0MElyQVhoWG00RmtySHFucXh0REJ6OUJCNmg5RUhDNEFuSVVqMTlvU1ZqR3dvQ3ZHaWV0ZDBWcnVqQjdDczMwRS9lZkZzVGdUNUNUOFl4UFlMdVVHYmM0Z1Z5SStvdi9OYjZaaXdKWjRNWVdjdzR4V2FWSWp3aG4rTndaQ2ZpbDBqYlFYWW85N3BZZmdnazVBblVKdUtCRG9WWUFIc1lhZ3Jlc0hsK0RpeVc1c2NCZUZod1NhalRHM09GRTh3UDB2YXVhOTFjRWlJZGNLNHB2cWFNTVlMQ0JzQ1gyUDNqSkFETDEwWG1BTWdSQ0RjUmdzdUhmU1dKMmdJdUxndDdJS2UzQ0pDZTEzd2p2amJVQ3A0YXFoTFp5anBaSmpZZVFOTWV1MGtFendxNGR6WjFMZXdJNFpWYmdvUllWUWJQM2RDVzVmMmdRUmNYa3p5SUF3ZHhWL1FNMU1sVVRBZ25TbmJQa3ZCc0REeGN4SWx1THVnRy9rQ05lSkxqcnlJL0lCcFp2VmNqbU0zZ2dreVRJNFZ6TnZteWJjQ0ZyS1N5SU5mUmQ2ZzFCRkVxVDBxWXg0Q2RtM2oxdkJ5dVpDR0psSGF0RHdHUmNGSHJiS1pWWE5HalFleUp2MThlRk03aWdmWExDeXVZZzU1ODJGd1FGdmtMdVRXQmcwSXBhWEovY0l0OHZ4NjBiajB6RzlPN1NkZnJ1U1hqYUU5TTcrM3FjR1Q5bm50Q0xLelZZZzhDYnhQdVVhZmxZMDByR3BpQUZSZ0VCVGdnYWk3QWo1VENWaVgyNTJZOURTWEU3SVp5NUJmaEo1NHhFbTJJMU5FMWg3RUhhd0x3akFJcCtGN3ZCdjVhTGphUHhTZEFoNmN2ck1ManVWODZ6MlJwUmV0OGVnOE1EUGE4Q0hDc0FSalNJQTR4bnRTaFpTUHpNdGV3UGxRQ1dEZ3RsVWlzTWs2VndaTlFMQytCdVJQQThwczhJd0NOUjNyaTF1ZzlvMEp5ZTJ5ZCsyWFZtalU3MENQSVFtRmhrWGd4d20xYUxPN0lQT1ZSckR1OEZESzRnckMwNWI3OGc2UzIvcUwxNzFJWm5tejZ0S3BrZWtxSENzRWlzUGJhTWlDRDd4S1Q4V29ZMEloR0dTTCtZelVSVElSVmc0dncyOWZEajZBczBORUd1MStvOUtQOVB6eVl5M3lRYzMxN3dLV2ROZVFUc29kSUlpTVIxM0YvbENvV3ZLOHlkcnZOYVlFR1hQQ0cwelpQWDk2QXAyWXIxbUJtV0JwMHlsTW1naVp1aXNRR0t3WjMrcDFqUG13Y3FJV0FGQ0JuNERTU0sxSFpQSVduYVEraDRVUHlXVTdTTVAvazBXZ2xkT0h1T3hkVUIzdC9kMGpBdkU0MkIvZlM0TURaTHhENEpscHllN0tOOFdZZ2s0aUFtdjN3S0lncjhkd0NDZllpVzUxMUV6b2VOTnBGOEo0UFNKSFEwRjVreEtQakI4NWpEQW5SQXVONTljSkRZMTVQZ1hCOWhNczg1WUhFR2VCQzJMaHFoZm1EK096N1Nxd3ZoSlQxakUrYzM3MDhXdWU5RWFkVnM0SmhHZEMrVTFoMWt0eTlLT3gxOUN0Q01WWEVwWnRpeWRZMkE0Z20xdnNBN1ZvYXQvazI0ZXpUeGh2RzNpeFh3aThKWk1OeU8yNG5YRVFmMUw1SEwrWWZlVnQ4SW5ETkNPZlFCdXVaVlNqZDAraVp3azhkMnd4QXlNTzJ6NGdmSFpIYk1FaENDdHpIWWdGWVRGdk4wbU5DMVNMMlZpVU91TElIak5yaWt3MWZTd1ppWXQwSDBDb3d1WUhBclJHd1lCRUJzbnZ5bGVhTXVaekhjbDlXZWxxSVN4eXR3MHpIbnJuLzhKWmthWUZISU9NN29zakRUSEQ1WkVSWTBmTVZEdjJOTUhJQTJZaU1oMjE4WUQ1czYyUm5XTW56dGNKMzRLMlE1R0RSSGVybzV3MmFxdnB3RVdJRkhDVDgvT0RQMzRaWEV3d2VaRGkwTENORkUydzdBZWczV0VhQUJQSUkrK2lYQjlDS3lZTktYTnlUU2NpSnVSVEVaeGp3Tll2WmlaWkViaUJabzBrL25DbXozNTk1U0ZQWFZ1QVRZcUVERU1nVzhROHp3NUQvdUFpWTRaWDVWaWdUZG1vUlQ4QWlwYjJnS3k0NFp1YUtDSE1BNml1ZkgwYjdZdkVPWWU5RnoyR2NnTUhPbGlud1RsQ0E1ZDRRYzlOWDNsMDkrUVZEQ1FEeGFyQ29oazVBN3ZLR2ozbUtsdy9IZU9EbG5rOStmZ3B5NXowVjNIQzlZZ1VNdUJXaExWa2pCQmdHZUlRTlY5QURVV1BKaVE1SCtNeFEwVVdjL3p3bmhQZGdIY1hjUlJFQ2lURnJZWGdFcVJ1SFJ2UGl4bGNObmpLaEJJZ3pzbUlRR0p3d2M1Z3N2SHpoaU1QMWdMdjRaWjM4QlRjMzkvWkk1eVJIYWx3VzZHWk1IT1d3TW5hREdPSnRsZnlZSmg2STU0bHJubTlrczFjMUhjazdYMTVpRWFISjNMNFRGMzZ4bXl4a3kzQjdBSld3VjRDUURNK3pCbzhRb0ZLS0NDSVA4cjlkejJrNm9paFpNb3RWZ0ZHdlJSbnpRcDY0NzVtd2xqYU1vaWduUGR2NHV2S2RMUUhLU3VjalVyZjIwdnFTR3kzQWxRSGpBNXBrenVaTk9HMzBIVitQZWpldVQzVHl5Sjd3MDBNRm8yQWNqVTFtLy9rS0FwdjNCZFM5S1N0VkxKZjBpQ0JmK1NsV1Z1TFZaaEN4NTNtRHFBVS9nWWRiUVc3ZWZwdE9XTlhhTTZ2MlRmNHMrU3JVQ21xUWlJRHpncFdXYlhFWnNTeUtEcDJWRzN3R1lUNlpqSzlmNWRWZGhXTnR3Y1pNMFNLb2JuaHZEQjRBd3BGRHZONUgvNEdlSSt6RlNVOTBYV2dnVFNwSGVBa2g1QnQwNWgxZG9tcWxGdHdVaUVQM1lhSHFqVlF2MHlMRm5wVXZlb1pyd2hodisxREI4T3dNc0M1N2l4RHEzMnVsZGl0NGJKRm9LVEZteThTSU9VMnllT3BjTFJ4SjFveXFXWkRWcWtaVzYzM01vaXJkY09CczBjQmp3a09yVDUvdERueUc5U29RalhoSmFWKzJXZThDbUZzM3RYQmJWMmR4aHBXUGVMRjVTbk1ZMVZESGRxTk1zYUY5SjZRSkVoZVhiTmpSU2JobU9OdFU3cko1c0RyaTQvUWtaWGxZaGZoQTVRSDl3M3dWb3ZTekZTRjhDdmxxUW9kWGpNczZsVFpPcTQ4eDFDby9VTTZLR3FUd3ViL05sWE9EeTJhZ1JCaHY1aTNSL2phTlFGYk9yNWQySFVqcjFzVDA5L0VNL3hSWG5hUWpNUkQrMVFqZ1hIQUxudS9Cc09SdHVCRHJWNnltenljZmNwZEwveURHNFpWSmJjL1ZFQ3A5TzI0MlpRRmc1SWRkc1I2TU9JZUVZWWt3NkJpeXJvUXZoSk1ydWp5d3hnQzJ4NlpGYVpVczlrVitjdUdiV0JIYjl5YlB1b3E4VzhlNzdaUkJFY0pFVk9vQ0FKZDAzZDlKOUFLRUhsd1BQMVZGQ0tTK1pnSmhhVUhMdDNqNHNXMXYyd0JSb0pIWVA0dUJ1WG0rL3F6TEUxbDNpazBCdkRwbzEwek5RRFJ2NnljYVBOYVR3R0xoSGdTWVNNYS9DRE5vMlhyVmNZWDNnbmRkRFo1UElNU0lYdXZoZXo1SDB1aG5xSENzeXp3dkp2d04zclBld1NLZjIxUkVWa2Zla0g2Qy8zb0F1d3N6MmdWQ1lTOEVpd3JxWUFMWkpQTzR0MWsyY0JNMWlId0hZUzFYOXpUMTIxQlkxbVkvSGtTdEZ5ZStibXpodGxwMnZlVldiNGIyZVVMd0pRdFE5b3NVakI5ZUNHVUtjQUNiSDlnUWM0YW5JTW5jYUpTbFhBdDIrTHpRR21FeVd2RUhrUFlPVnlFU1k0OUpOZnhwQnpBVzVUQjZoTHZDVVY4RW5Ha3NwR1NEUkp5NEQ3OUZCSlU1VWVJc3R2bWJFdUFlamIydnB1cE5NbHFUWEMxM3h6cWdVNFFGbHZRSjFkT1N1Uy9MSkluRm1FVWxESUFVY0h2VFczVnd6N24zV2xnc2tOZ2lENklmRWV5OVR4VXpxcXRZM3lZdmhBWmNpTitmYmt3cmVURW44UUV3ZUhzd28zTWJnTGNGbWhtaVRnUkFzWUJuQTE1azlBRmZYR253WlZsV2JVa1o4ZnRVOHlLNENXa0txU2V0VTNlQUlJSFFzakFUMVEySjhLZ2pEZlJNaDUyNzUyd3lDQWpQUHRYMGxpVGVOeG9kYWRWM3R0aWhEbzNOSXVtMGpESzVTbmVGSlZ1ODJ0OHlUZGQvbm1yNnQ1a21JREtuQytQSXA0cCszaDdZV2M1YTJvMC9QMmh1di9IYWoveC8vM3I5SnkvRVFMK210QTY3Ym9zM1FkeDQ5aGVzY3VObWV5L3VENldQQ2xEMGdSSTVxcTRKWmNHTXdla0hHcXZVbzFaUHFScEVRK2gzajFIdnRxZnM1ME5Dd0p5elo5K1F6V2w1L3BRMDIrRlFvUmtWL1BNd2JzM1h1a0VMT09wOWloeU4xN0NRNUZudWE4ZldaU21lYUZ0dEFTbFRrWVlyUlE4MUtzSWh2eFdxQVNFQWcxQmRIZ2lpa3BEV3VHRERYd2xoZnJ1bmkvaGI5eWxRdEdUV2c3bnlVMWFSMEt3Wk5nMHJUczAybXZzaFVCREZUTzVhOEUrNEdxajV0TzI3YVZmZjJnb3N0N0hwUzRLMVFaNkE1eHhiaDhwQ1BzeC9WR0xQVDBaNWVraHlqcmI1VUpRbVNpYy9Wd2Fsckx0NnJGSURBUDVoUE5qVUwvT0JtbWxBZnRXQU5KLzhWd0h4cE92ZkNBaDhiMkhmNEF1SVpHRkVCbER1Y3p4dWt5QStyRUo4Z2tTbVRValJ4WTVpNXg1OTI3a1FaQ1d0ZXlqWElFVUd6bXJZR3paL2VmQitFMnFJdy8zZTdHdTBIK1d6eWFMZTE0Wnp4ZUdoMnB1aDV6Z3M0ZDNERDVzN29oMWdGamExSWlHQzBzTDR0Z2JJVXNJVUlWaUp1d2R3N2N5MHpoRG1tS3hsSnd4b1JlalZJeElNVHkva2lJVjh2bUw4QWs2Z1Z3YUZkSCtJWmhEcjUvU1hYY3ZhRHNETGlvSTc5b0ZIR1p0Wkh5dHhOaHdFaklKQzh0YmJWdU8xTEgzOGlvTUtDT0xwTmFWKzNlZDArZzc0UXJUTzlBVW91V1VUR1BhQ1RJdE5pOGVHcTRHSDJLYmNGUEhvWWVoTGtMREpHMVZhTDh1OHh2c2huVHo1Tm1jYTMzZGFTNVROaXNyZ3A4MUxyTU93MkMxNlY0UUxuRGQ1L3RlbkRSbHBYajhWNTZsbXk3clk3aDFnQ2NOT0VINFgvNFFVUGZPd0phOE05dmphSE9SWlNOVk83WlBPL0hoZC9JZHR2S3NubnVGV0FWYjd2NExudERKY1hCbXc5dWhWQ1JjOHJiZlhnTUF5OGVVTXNGdXFrUE1GdFZYekFyQ3NkN0UwSXdSNzFCSVh4TW9qUVNlL3h0dmk0ekRMNTYwUWlJNXJOdTBoeGc5OXdFYU5xMmNDdWNLNW40NkIvbXBBbzJXUEttN2RLVTU3NWxGQkg0VC9GVmMyRnUwcGVid0pvcWVXRlpwRDdFZXRRQnJTWTQzeDZmK0ltQ0NLRnA1dlRZMG81WGtYdkxvcHFnRHp6MnBLWWpNcVMxVUgyTXVQaExwdm5Qd290OUh3b3Bvd0R1TGFPWjE0QlNDMkZLS0JheXhnRFM0TUg4TStKV0ZRb0tkQjV1QkhaWjV5U21KOFptTThYbUxGWUx4c09wb2p0UEhlZk1jUURrTGNMZzlBY1h1bUltU28yYzVYU3oybmFZRmxVU01CQmFPVFFXZXIwRUdLMFdYbnFYK2IrOTVvd3pzRTlia2xKRE1haDh4YzR5YlhTZ1JsN2czZWJEa2FabFRhNXc1UHUwN1pPS1Q2ZDV2d1hhYU5NRDNDT1lyZlBqVStQZFNmdkZIeFhNUVNHc25wdGxMSFhNMnJYbjR0bkVSNm9HbWU2bkV4R3RPYVlEU054VmJ2dW9uWFlOd2dTQUl5MTJONVZMUmFQeE4xWUd4UUxTd3J2S2I0UFFjMXRJMTRUcWZrNzJBR0xtOURIMjZDcVZpWTVwbkNsYy9Gd3NwdjAwZUJOVWZjTi9qelkrRHhYSkxiUW1UWTl4VFBlZGZja0duclR0R1pZRHgwejJrQ2w2bWRuUTZQTU50ZFQ0S25tT0Y1ZjUxTS9TWEQ4NTNXUWZINUI1MFBOanNMNVBwVGZ1Y0h0WC95T3ovWm5aUGJzVFRuait6Tzd4d09RZWVQMUk3aUQ2ZVZldUlVaXhWNWJabi9VTGpJN1owbHFGOExsbUVaaWROdForWXRzd2tTU01XN1p3TEVQSkhoUXVoN0JJQTJ0d1NBblFzbXczTUZ5bTBraVd6VEdzQkdQTjNGTWwzN2tpcnhMUk1JOGJUYVBXMGNGNVFMWHFYWVJ6Qit0cC9jTXRENTN0WTZ2VGF2SXBKWlB4UW9Rb1lyZ0NsN09wV0c0aUtBcmEwQzhkZDBaVTk5aUYwNHQ1b1Vyd2hXTHRoc0FEWVFFb3FkTFEyWmMwL3pSVnRUV3F6YThPQXBZTG9RZGhRdUpOYWdnZ3lHbzRTSWlKNmpIV21CVVBQVXN5VEJSQ1FoWkVHMVY4UkQ4ZnJjVDgrL2ZUTDFnc21pWXZDM2srTWlpbVdQZGowSUZWQ3Q5YTBiMzM4TGdzUHVyV0hSSENyVkUrL2JPSEFUaXI4WGNkeE5UcktpcUlhQVp4ZTQ5bGRxQnBHNWVKajFNbjlJckd1djlTUGRjb0EycmZDeVJXVW9YYjZSRzZMR1BsTFA4MGFCNlZ0RGxpd3YrT2J0TVJxK3ZPUkNhT0ZUSXptOVpYNktyTWRhb0tFMjFCR2hRcjdRclVSaU9EaExFazl1R0NRWWQ3WVJGQ1RCWWZrUUMvUTlzN01TaUFWOThWYTRHTGFFVVd6YnFFdTkyR0hvVTdjWUhDSCtKcWpFQXFxRVpweVl6NUFzKzJud2VqUGFiM0RLUWlKWVJ6MHhQdVZVYnJGclg3YWREU25XTFVmRk5ZajJwZHNsQUpzd2hyTVJIbXMwZWN5Sy9MRDVTUzM5MnBEbmxYUkZ0MzloazhtU0htU01LUU03Wksxb2JUYnAzZ2RKOC8zSFY2ejZCcDBoTC9qZUhaNW9EY0c4TDNZY2k5ejM5NHkxSVQ1clE3Rnd0aU9DV1V5VEpKV0wrQ3lOZUg0VDRtQ2JTRHQwZUthdjhXYW9JL2ozcDBES0pzak1aU1E0aGIyK21DcEFzQ3d6Nm05VloyNURWSnZXWFpzVnJlRXpiTVVQTG5EWjE3MzZHQ1lJaHF6TlhtWVlMM3paeXRMa29ZS3RGWHFTTGMzRUNBREhtbHhya2pDM3VMbEpGcnVzWlU5TExCa1Z1b3NGQjdqU3lXNkNqZlp6ZG9oVndlL3RCT3I3SHRhd294SWVLN1pDTG1ZUGlPNFhxMk11MUtSSzlqaUdUY1BDaDBtZmFvYlpUblhMMTZFTnhmUTkvQW9EWVhmaE5YZzBHL1ZZOGRpdTAvcVMyVHY3cDlFcVdCQzNaWGRWdUFmRXhXS3RHTjdxK1pMdWE5ZWJkUytJYk1pa1djcWtwb1dON09VcGFEU2hTNHo3cWZnYjBOT0QyS1BHTzNRcDQyTjNwb1k5MmRGcENqUUNzTW1aUzhEK3dQdC91aVRadTA2MFlDOVllVnVINFBPKzJ0QkRsQVBXUTdlbm9FTzNoaVg3RzU1cmRGSDFFMWI3WlFVYzNnV3U0b2dmOE5YdHRRbjJDT0duWUljamE5Z1JaUHV3OVJWN3dGQWtsaWVLejljR2VSaWgzYXZJYUhTMDRhaENNaGJhTjMwZVM4Y0JWVHA1TEh2T2lCZ0lMV0xHd0JwcXEvQ2NpWTl3a1o4V2Y5bVhoN01EYjhxTGhCb0haanhWdEQwWkFuamJCbzBDWnhzQXhtRTVDbFNIQmJ1ZisvVG9SR000bHAxaHVCcU44MEZLdHVFQURkUis4bytMcUlxb1FGbmNsa3gzeFY1MlJzckNQdGlqVTZac1VlNVQ5bVVoWlRSeGl5blhFK3kzOHJ6MjArS0VXME5qMlZqQ1l2WThzdjM1TDhOaFdaK0NhNlhMR2trTERnUEIxSnplYlNWMGhSdHZEekdzRWJUdlBpZVBGay9ONHVuUnQrM0pVc3N4d3k0MiswQkdvY292c1k4b0JMQ2RzL0liem1FbnlOTDJ1RWVXMDhraGhWVTNFZnR1QUFUL3RrZXZ5dUVRd2QweXh1SEJJdllSN3R3cUJNQ1QrZmdrRzNyczVnLzhQeEZZSFAwd2pWZVlTekxwOVVYQUF1amo5M0R5QzVyT2o5d0FTRlA3d0M5aVJNSTR0K1ZYSFhPMzhPSjk3alFWaXZLd2MrQ0RMVGxPQVdNMHk5SFdoU0xISmducG5wdDlOdDIyRXU3WEkyZy8yS0pwMnhVZ0pYYXFDcVNQUjdwMk9DZG9LVktqZ2FYaHVleUd4NWt4bnVlcmc3ajN2ZCtwb3cwVFViQjRqeVNCSk9TalpaK2JBTHZNUFVIb2dLSjVpdlB4NzRid2UvTnlIbGg3ZmlaNWdLckE2WUF3blRhZGFwVTJ2NFZmUHhqdVJKVEEzKzBwT3QyMzdOeHA0QnJqOGlJZEpXRWRRbjZJWWc0bXdSNzV0SURXQTY3aStvemNJTnhJN0NKWElBbTBzdkJVb1RtOEFLTzZUbFVRSC9DNlN0MzBwYk5pR2l5RGhaWC9lbFpoSlRHTHg0SUU1eDZ3VTU1VzVSdjVaK21hSnlLWGZUQUJMT3RXY01HUzBaM29Qa1NneFJpd1RsUTNEREU2MWFNTjk2aDZoQVBnajJkcFFEWTFRZGpDRlp1Tlk4bDQ1a2duR2FDREpyVGNSd1ZhVDY0UjQ4Y2tyU3o3ODEvazNHQXpwdkxXQ3dJOVpSdFFaRHpnQmtBZ3I3WVhZNk5Xd1V2bU16cEcxcCtUMVEvTkE3SEhSb0RhUkpMR25nV0gzL0ZEYTN1SkhzUktMVEJDbjVOZHNzOFAzcXpibmd5TDRJSVZBWVh3THNPeHB3bWVPZzBjL2J2K2pJNVFTR1RKemJKTUEycXlOQUR1OUowZ2w4NVFnNXV0dWdXMmZXYUFDRld2UndIOVVoUjhBV0Z6R3IvNkdnUmRDOW1pWjMyWWRTSzhZVURJVTNQRkpwV3dRYnVCVG5FeGZ0UTJUbUJmOXNPcU9CcmtDTU0vcmFPSlJyUEdPSnBGMWcrMDNlSmVHRlN4emhJejhLd2V2NnhIa1RsS0pVbGtVZlZuSjRkNTNna3p0MTdIQXp4RXNIMlF4VjVjYXdxM0tOSWVSOGw0b0FKRkErZ2ZNTHUrWjRvSTRHTEhiTFJwMXJpWVBWRzZrNDVzaWYrZmNiSHg0Mlh6cjRITlFtVHM4YnNpVUptc2wrSDZvWWpkZFBTUmNwWWQzd0xuUG9UY1psSkxtOTMvWllWcnFuek95MVhhWWJiamhiREcrc1luZ09wSm5uK3JpdGYzVEJNcnNJM0hEbm1FWUJxblpVaUNONUVoajdLbndLQjdobXBlcktBelpqN0xXdUFjeDVCZW0wbXNqMEFXbFFwVzIyR1Rta0l5VFp0bFRwRTBETnVLWG10UFUzTmtJV3lneVZOMW8zcWEwN0lDZ0t0c1o1NE9RSUVrS0Zicm1LdDBsazB3ako0cFFoRm90VDIrWGl6RytPeGJyUXRVWURYc3JWbXdobURiTzl1MWdhVnFqU25mWEJHR1V4M1kwckZSOEc4NUVNVlZUUkN0YVNyeWpPcXhoT05NQWJxamZjb2Y5TDNaUmJPa3lZMUxnL1RCcVc3TGZ4OWwxeW5ZdTYwT09ydG05U3Fhbkh1MWRyVlZtMktSWG9udklUdG1iNmNmRkpiU05yR0lxM2pYVDY2d251RWhwcER1ZFlId2Q3WUI5a1c5dHBvSk85dTVRc1BYZUw2dUJJSTlJSW9lak55aEFNc1VFT3diRnNIVzN2ZEpaZUVpUDZNVnVHdFVpQVhNZHpJbkFtZHA0NGRheDcvWFAveXI4b2ZyZjF6L0FINWFPR1FaTzNiTnhSSWRINXVYblJBVFBVaTlaVFhiaW1yekRjc1RkL1RkQWhKcXNsRVhNL0ZrRG5jaGRqdkt4c2s1WVo1RTAvMWM1L1RhT3N6dVNKTFFHc1E3R3kvNTNHM2xhbkR3VGJXSEFsY2ZpdTlSRnBiWmk1MHQzU2lCV0E1WHNFbGFpWlEvSEx5YUVpY1FJL0JPU01iVmI0OVJrdFZRTnNlY21UNUlaTStKYW0rWUp5TFdaTmlGZ1dCaXUzNGQ0N0pjblRBU1RkM09CVlhEVnp4Q2hwSlZodzBzUHFObkM4blBJRkQ5K0g1c25yTjdGU1QyWW9aVk90Z3pyM0pZeHkwbGRCcEI5OERaUVRoSHZZUDFFVjNMZFJNWitLa2R5ZG1FU0xtS3N6WGdudWd4akRvSGxGK0hlRUdRdWhNdWNMc1Z6L1REMTBXcVQ3SlBNSHVBd0d1czVqd2RpUytXalVxcjR5SGFGUFNEMVJCMjRYeTFJZ2tzY0pxMlh6dThJSnlZK2swLzFjbC8wcDZSY2VRNjJBVkx6d0YreTd5SmNud2lXOUJ0V1B5UURPcStBQ0V5dFczOTFqUUxqWm1Bdml4aWtsOU5XN1pzSDBDdVY4ZC9uZUZVTDFqK1RSdTkyTndQN28wOW1SMDdkYmIzWjR0MlJCU2pNNHZWWmMrWlJRRGxSZnpOY2RtUkJiV3hsZk8wUXJXZndYTklXZDRndnV4Y0VqRyszRVU5SkoxQzJ1enB0SEpLUWhTVkNNM2hkNkROdUtYWFp1ZkFBVnN1QUJUZTN4NU9JZ25zZGxxeGx4emdZRjFCMWJXSnhPYVZJYlUyQUYxbDhPbGNtMlVhSlhKOWRiUC83SDdDMEx1cEM5TU5UN2NzaE5XcDlzODlGZzRvS3IvS2ZnQ29oUGlyRVhtYkxkNG11clZpR3llZGFUbzlSYkpQZmZ3YTdtSDdEUEFNUzdGRVhyRTB6c2dSMU5NNE0xbGd5cmVqUkNwNFI2Z3dHV0hWeHZUOHVoTFdxaTJINkJ0SDNqaUpZbHJuaVpzY29wZ3l3WUtZTTYvMzdyemFnUWhPYXVHdXNQZXE4czltdys2MVNpVW8xUVFkdDN2ZW5HTWh5R0tVNFpFbWhBZmsrM0s0Ymt2ZExJalowYWJLOTV5THoyN3dOWXNMKy9QWURrRkRPUE8wOGxTZ2NrZlZSWWQ1UnV2ZFVLU1hjNGxRbEl1QWczaUFONXhDY1NzK1grZ0FTaGpMNmw0SktBcGZmNVRYd1lLakttM3kzRjloTmVQRk84Tzc3R3gweW9WRE5NdkhoVUFBOFBYRng4RW5wMk9BeW50UzhDd2lhMmRGcnlQdkhOWEczMUFUNE5GVzRrRHpsN3lPRURYVWsrYWtBdTV6NmhFOU1Oc3F5WTI2c3lpMXY5MGpWL3piN2hkRTJrM3NQKzJ1TmRtejIyNHo1T0tNS1FHUDZpMFFLa1E0TzBLU3M4S1NVeXpEWitIRU16ZEUxYXBTL2VWYWV6bXZBQ09Id3J5WkMyNFFFSEFBMTEyVzZlSmRrSEE3V2VQNEdYbGtTWHl3NnJiYUFFdVlRenNML2s0SkdTdHN4elFndm14UHNGdDYyV0J1M1M1MFZjaXFHeXJ3Z1diTjJYNndnZDR0Y1dCWDRCYjdKbVFEc0RkeDhTeHNzMTRkVS9DdU1GdVluSzNlanZjc3paWXZRTE56ZzQ3VU8zVWgraHdxRTdlRFo3OW5kcW1kL2JBdnErbXhISlFYL28vTG9wbzduMkZuZkpsSXMxak9YTFBJV3c1Mk5tK2gwcGxlbDFQZ0xJaCtvWUp3QXhUeCtJZ2NMd3AxT2F2RmdHRnl4aFBtWXBSNGkzWEphYU5seDVrMFo0Rlh5cGMrbWV4YWFTZFh4MzVVczNaYXA2TXlXOVdobG1uS2RVWUlXdEQ3aE0rSVlTUDQ4dEFjNVFIUHRuOG1CaWVEZkI2Nm5vNk1XdzZKcUYzT25IM3N4YzI0REI1cDNReU1aellIWGtBOVV3SVI3Wi90RjlxMm01NG1hbitDbG5xMk9tdm1sTTUwQndRa1N3Tk5SVzVIWGpvRXhnaEpSTEpSSFJvL2xhUTRMU1F4ZXJwUjdKREVlKzZHZkhxSks4RWFXT2szTjNSN0taOTlScWZrdnBqZnhEYlE1Tnk4UXordUZ1L3RkSmRLR0Z6TzdKQ2tUWWZ1ZVlScDI4YzBMWHlmWXR5SzJPR05xL09Nbks0UVBUNjR0ekhnc2dFU0lac3dZdFRnYTYvNXM3bVp5bkkwUy9VZEhRc1lzQkhUdVRTZEtCUk12endxRFhDVWlPSTBwR3RHdTBZdE9CMjNnOExFSFlkUnNNVU9RYW04dS9sS0xPekdnWkZLRUtCb0Nna0ttS0VoZXFIb2NGazhiTCtVZmdOTG05dEdNa2RMd1I2eGs5NnpoY05lUjdmdTB4NDVaeGpsSkRzQnUwUitzMmpYLzFOTHpvWml6MWZ6Y2hKejlBRGp6T09ESFNFRDBpTXZ6V001R2NCMlFQZ3UyNGNtNmhrYkNlZEllZGxsazA4K3RTY2tyWE8wVmhOQmJYOTcwVTdKWnY5eldvOGF2SlhOQmFBQ1g5N1hZaVNyZG8xVnRzVkFkWHJOWitvQUxrSkljbTdIZXJJdDdjWFpRZXhOaSt1endSQVBGbVd5bEE1Y2w5ZVpzTEFTZXdEZmdKazdiVGZFdFZuMU90NW8rbEl5dHZkalVmM0tZSUIxNVJDRmJuY0xoS2ZwMlVvRWk1blNpelZsdDZKeC93RmdLOUJuaTlqNE83SEtvKy9IVXZWNmNxM0JvY3IyY3hTMFBJamk0QmF1Nkp3cW9BR2l1ZE83bThxemhwMGRkdzRlRE14QlkzZzhrWStZMXEzT01qdG4vcWZIYzJGZVJETjk3L0RJTVRNaDBQbDR0ZmJyY2ZJSThxemVWZ0RjUVBISjg1ZzVLSTREYWY5aE1jdjErdzk4Tkc3MlJhVU9YQkRUN3k5YWg4dmJyUGVZYUhQSEI1VXpWVE9ZMzNRalVDL3d4TTlCQWFkZS91NE9oU1ZzT2hIcjZVNjdPK2RXMkFvQjFTUEhJeVN5d3dDeXJqZi9paTBKNW0vYkNRUmludkdvZTZ4cGV0S3FlWlRXWjh1djlBWEZEbE5BSEhZMWlEM3M5cHVBQ2ZsTTVRWHg2dVhzOGVkTU1ZQ1BEWUpSc2UrMW5sRTNkczF1YUY2QWtpVG5OY0JpYmlkeHZhNy9HYk5pbHNmeDErMUNONFRUQVdEblViUTljL3ZCWGd4Ym83ME5KMSt6U084dzdXTHhiSGV3WGlldW51b2FYQmYvMWZ1M3ZZZ09vYjJuazRzYzZmWFp4SXc5Z09kRmVFTXhES0NzT1JqcU0xTGIvUDBSOXdoNmpyN3plTFdqOHNxcEt0NzJvaUNXbkxsY0ZZTmdWbWdlVEZoYXRNNkFyaGJ3cCtic1EydUtBSURQQ3Z6KzFNdm84anFIcFhvVjFxSVVELzF3TmNjZGpYYkt5MkVPQ1lXeFBmTW1KaUFycHNXTm52VGZaN3ozR3k2bzJEK2hVUnBLMEw5cXloY3pRNzZKMEt6aEdXN1dYWW9KTzMzeDVzdUZjd1RWNC9nak8ybUtReVQzR1ZudC9Ebkl2UFV6VXVaaHZhUGRPWksvZ2JkT3EvOFFSUTV5UVdVVGw5MmtaZThFYTJuQ0RTOThBWExIMkVYVnBTMTA0VFF2VFJPYk1DTUgrVTVGcDNsNHEyYXV0d0hKQVd0SURyUkdGaGFiUkFoNnpsb3RIbHR1aHdFNHdvYVZjemoyN3pxVnc4WEJEbFByQldCRGRBMUZhUFNReWZxUUdSeU1MUTVYdU4xWURqRXVqb1NkaWRkdDFwUGRXNlp4UDVEVzUzYVk1cjZjRTF5Y2grYzBSTXpaMDVwd0wyQVNvcy9scERNdmRZR2Y2UnlSOGdjNCtUSU56bWRtUzdrSjdjOWp5YkNlYUhjcksycWdzcmtQaWNqMmVOdjhCSm9CQndubTlqd3VjSlpvNmRHUkhpd2dsTVVzdUk4RldaYW5lSTU2MHJ1WmJ6ZzFCRHEwQ3JSdFdwandPcGpOL0M0WEhkd1NJT1d4TkdRNjQ4R3BWK3VLRURJZnJZRzJRcEJPT3gybUpUdk5VWUxXdTZPM3krZVBjTUNpdUwyZCtDQWtMK2lDclVNRURKaC8rZGdrRHhDY3pTQmIzUGxSdkZzREFYME85WlNpT3NuNjdiY25xdG54VkIydVBaSmptMEdiWlkzeGhkcy9zMlFrcTdNV0ljVDNHZU5iWWNoNWIvbVBPMlcxbG1lUFZnN2REaE1KMDJFYmM4cDZJUmJsdVR3MmkwN0E0ejRyZk5SQmprR1ZINTB6YjlZZ3JRN3ZNVlVNdDBKRUo4aEY2aUNiOVNLSVRXaGJTZW1hTHAxSGRwQUt6emlxaCtqQkk4eHp5YnhOVWc0N1RNMlRkV3hFUGh5TXZnN1pjZFpuWEpDOWl3WE1HWDcwZHNmdG9UNlJNdWhhaDdvNUUrQUk0dGN5V0JhRG41bUpQS1YxRG5xNVh5c0VpcjBGblN1S1o3NEhSTFBZclUwZzlzaFhkK08zKzR5Q3c3SWtKd2NmNDJFcTB0TDBQVEUvYk9IQjJlWit5M1ZzYnVPMGh6SHg0YTNacnV4Z09FemJUbTNyNW0rVmRiS3MzK0lsNXpUQ1ZJN3NhTTdObm5uWndmSjVFalJPOWlLQVF3VFpEV0t4V2w5M3d1RmcvNGFkNWNGYXhETzQ3TU9PaWhWd3pzZzhSKy96cWkzcmp6Yk5nZFhSbW1SRWFZMm42UHVGU2pnblNmWVF6b21PZmVRWUJLTE1ydmt6d2M3Tzhad3Z4KzZmNGZZUEJFbmNlQ1ZLejZsV1RhWXJtMjJwY1RSTEVkQTkycXYxTWM1VXVDSGEyLzcyQlJzQkxCMTJBSzZJSHBQTHhyUGY1QnhjQjBiWmVCZnRGTEdVekVjQjVGZGV0VTMyRUJmTDNSeGZpYnE2QVBJVXJiNjAyVDZmS2RLUXZBQXZZNDN0NXEwMnljVjVZT3FnWFB1c0REV3I5VnFOOEpYOTYva2kySVRWVUQ3VVlWb1hvUFRuc2ozL2J0eUNqY1lqK1JxY3l6cU54eTRiZWVYam1NbmJVMldnNHhxS3Ivc2RVWDJLUUswMnJzZXlwN3gzRUorUkNDOWZRS3ZsNUIrUmZHM0huZHNSbEFhM1F3QUltVjFMSnZlZTR1aGxRa1JHNzd3SktaZnNDSzN6T1FmVVp5cW13ekJ0VjBxRU5MWVd1RnltZHFxalZzRHN3ajNzRXV3dE5sbm90Q0t6L1U2ZkhVc21ET2RlR29menMzZWQ1czZuZGFyN0RHUU1XMGxlaUxRK2djTlIyRnhvSFIwQWUrQ0lRTDZIU2NWNER4K1lFMlpla2FrWUZySUtzaWNMYkFaZ0c3VHRSTDdPSTRHc0JIcFEwUTZpOWpFUm5VaDRTbWxOOWNWZnFmeDdRdWVRRGk5NFZRbkVEb29NVHRYYWxTRERHdG5QQ29JUTBWbHNBN1dILzI4OVk1d3M0ZmxyNkhZaWMydFNBS0R3VEh6R0E5QXMxeW51dENvcCtjd0lUL0JSYmF1ZTJSWk9Jbko4cVZ4UG1udE9XSnhKamlKYkJWVnhqdUNRWnFpQ3k3WnJaMCtZUFlsT1JBeUVZUFNpRkx0MS9nVmN4emwzc1RYa09aTzRuTTFvbC9RWkxzUnJQTSsvd25RdUhJRENJanB1Ymx1SnZ6NUJ6Sjc2aEI2M05OS1pYTzhyNnh2ZFk0SmtkNUJKcStLMGJydDh0bU0vU25Xb3NNT0RNREUwNEhKaTNGMkR4NFhQOHJFdjV1OGR3dU5RTHRNUDNUNituS3hiQ2NOK2hpdkRiL09aaWV1QUdRZE9aUDJJRzk1bzFmYzhwTXFTcHRQYnJmSlRnQVlmS0dOdmt2T1J0MDhibVJmMjBXMXRzTFR5UytFcDQzYWM0bk82L1oxSXZ1MHdSN1hFNnV4aS9ObVNhZjYrN1FKODdHaVM1VGl1R0pia2RVckhpcE8yVGpzaFB0dXp0VTFXUEVWa3htc2prR2NzSHRhNHpLOWpwR0F4WERraFpWOVdoTFBRWTBoQ1FmWlluQzl2bnNsR0QwZW5UbzhOTFNzMmVMQ2d0aUVMRmtRUE1CcS9RazNFZEtFU0I5eDNPR0cvT3F6YmMrVTdPL1FNRW1wOW96TTVZWFZPN1FrZTNUa3NJVTRmSXdNOVpJTlptekhxWlJkZXQzNFpXVVUwSFFTYXgwSUFFQjFPakhrUjhmRkMzT1huK1ZVek5iT3dUbk0yZ2VUSTdHWGRuTlBQVnRXajkrMUo4bm1FVHNzZTFUVHNPWW1pcVp6Snp0MUNVamJFa2xsSWdoSnJubWRiRlFkTFhlTThtQ0crQ0NzNzNWczhQVTU5bnRIMEhpd0ZqKzNudVQwck42MkVocWNpcU9lcHNiRlhRV1JDaXd5dTNjZFZDSVBnekhTS2w5VVZoQS83alh5YUZWeDNueUZ4enVjYkV1RkRhZ2VDRWZScHhyS0xHTWNHMWVjOHhvVkZDNVpNcnMvMlVnTEhaOE5kUHNPYXNzWS9IT0FTcEp5OXJRY2RoYy9zY3hoNVdSVDlBbGtlakJJQzJGckhyZkxTUmNDUDh1VVd3bWtuVEU2T1YyRFk0Rk9ySmc2ZHJhZEg4Q3ZYcXhjL25nd0F6TTJuWFpTTnBHdnloR2FDZ3FCS1dKNHdsQk1VWHJNYVBsZkRNOTA1TGJua1hVdTVIQnkxYnQ0aG9JbWNRL1FZbWp4ckg1QWRic1daeUNVNUJzNEhqSG1VTzgvTWhtenJ1TWhrdytBTGh3VG1wSnJyZzFUcEgxODFUTE55TVNBZklZVHJObitFSllSMENvbzl3Zkt3YTV4blJ0Z3dOQ3FSRm5yaTBIbUhQVXJoY3YyaVUxb2NnMi9lSHZObiszQmNaektrZFVveFhnTGtaaGNNbE9xNE0wejc0azFaTTBjcVA3YUdtdlpYZ0htNHBFTngwMzA1VGVGaytlNHpzdlI5YlNnYlUvVk9qRWRzRnd3eTN6YTJuMmVaZk9ZWjRKdXc1bUJ2RzA3eFJNZjdRMnhZUkNkZVdwd1JnOGZqenVEMEVTTFRtOE1qcndvdGRFaGxRK1pEZjE1UFU2RWh6WW5oMzJtRWRjS01GZDNiaWdVbnA4WDcxTkYvdGpsTE0xZ09wQ2pVYUp1SFJIUi9aMDQzR0dDM3lMZjluOG5RblJFTUhpNmZLdjc5eVVCQXRNVUYzMWE0cWJxTGJJUzFVN3R2SE1YaVYrZE9PdExENmhOWUtpRS96dURKT0QrTk1qWjdQczlQMTgvSUgyd0VzTCtjWWdTWHh0aWpFOEVzTlR3dHpxOEEvZDIyeHovMkNIVDJ4T1lXSkNPT0MyRUdYKzQvcXNhSi9RN2JRUUJab1ljR3VsV3UxZW92ck5FNXJ0c3BSNThZYk1VTDdLQTZvL2g5NjVscnVUQk0xTllHTjg4QW5EdGdBOEZobVFqTjZTRG9CZVpEQkxPUEJiRGpIRUx3VmQ1Y2ZZbU90cFVDVFFJMzJtZEkwaGZTWlcxdlA0L1ZJYXBEeGw2azludkxBQk9vS2ZLdU03TkNQTENqdnlLMVJPcWViYzk0N0FoU3Q5L1h1TzJVS0krak1ud0NEalF1Mis0RVBLbFdOTnRuMnZJeXZFa3ZkcVRFcFE0Tmp0MDd6LzBnNE5qQ01CMitEblREbUJEMFRzZjNJVkJ6Z052UTYvWXpobE5hcnJwU2xVR2Z1K2ZGelFIRjg4VWc0OGV0b1dBOGdCL3dNenZNYXpuVi9BN3d0cXJxN3M2VWVuMTJoRjFRdk5kdElWcFlCTWtKMDZzRlRNUlJMN080bGhVMnM4Q0IySFlHYUVxd1QvWGZhWUh5Y01peCtYMzRrTUpNSkIwT25MYzQwclpyS2ZnSHJYRldnNmpOKy91NEhNVDY0Yy9iS0dlV0RRSmpnWXhqNzUwNmhpZ2tERm5GQTRLbWVWdDVERmU4UUJZWTlMZDZJTTVqOEhiVHpQRU4wNjBkOHdVb1BYRWtmaTBQUFFpa1FQN3kyUWpzMm16Qi9GVktsbnZZSHg1OE9BOXMzUHlTVFVmdVI4RjFMQTgzQ1ZpNE13ZEwzMjl3WXBXeDNqNituL0tvYXVNcHJOYnVzbjZlOFRNT2hYWFdQUXI5Y1FkOUxCRHMwVWtuWnBudDA0QTlxS3pZNG9uYThhelRxZGQ1WHM0dzdhYXpRSXdrRkNEcEFCQWd3cm1jcitjMHNwWFp6SXRtdUJzUm9Eb1VHZzJmNURhbllkRTVFZEZJTG1xZGd2Qm1kdER4ZE1OWDFXb052UTl1RVFpYmRhREpQRFhyTFVMYi9EREhlU2JhZXcxand1TmtmdmppeWF0YnRHZEJ1UFhEeU5IN1Y1bmM1OEQrNFBTMUJ3TDVGb2poNlpFNVU3UXh5TjVmSDVQblU4aFlUWjhRVWN5ckJ5S29UZFlCSCs0UHdZbkk1cU1lc3pPeWJTYTFOc3BzTVNDVG5NZCtmVUt5VTM1OElwVVBFd2lPa3JXYi9OVGhZMUNGTlZiazJGUHNPQjNFckpWcWIvSTVLcGFQeUt6TE5aMUFjMG9kbzQ5dXlFRlF4cThRQ2ZlWnhEekVUWjlUMXFXekRuVGNIcUM5ZkZyMGpNMG42T3dGclFsT0RTdjJmU1ZyVnNycGhNVkpVTmRueUNDWTBJRk1JOTZRMkp3ODNqN1BsNHlPV0s4UmVmTEJJWi93dFh4U0hqYVVtK29aNzdRckpXUHhYRTV4VUN3SzFBZXNiS09TVGZHT2ZQbTZSUG5NZ2NWNnpOVVN3eTJzSGlYYU8wdjRTSU1YT2VRU05EeEowdFA0ZmFiYXFmRmgvc3RhSkFJQ3YvWTRienQ5VnhZcEpGVU8wWFl1VHpxNS9ua291L0hBMU94SkxIdjJ2SjIwQjdOcDVyUEdNdkJ4WHl4Rmd2b3REdzZYQitqRmJzKzUrbGlPM0xmUUdlZElwK3Jlc3JHNTd1amMzWTNkT3NZZlkrL2V2b08xNzh2QkVuZXlCQU1pNUVBUjliUWRMdU8wY3ltOXp6UlZyTXNEVHNOZ1JtNTZHL2JRbUNZN1FZUEZ2c0VXM3B3TEpGWjlUa2FXSWpoenhFZnZRV0tjQXUvNGNYalZOZ2ZwV1NGclhXZEJxdnVBaDRvZFh3ZzZmb1hQNVBxd0creG9Cbno2dElSYnRNOGlPYVNwT2ZmVXNibU9rbmpPdUl6cHVmQWN5cmZ3NXNzUnJ5eUpGUFBYczlNd3lHa1R1TTg2ZVRFK1lOYjV6NDRyOGZ6RWRvVFB5QXY0UFU1WG1WMTI0T2dDcTNkdU1MbkliQ3RvKzhnRkFGbWsxRHF6bzN6b25PeUxCZVJtcGFNZVJjRkp6VDZaUHZ1ZWk0MW5TNTdYR3UzZ3VZL1RXUUJUS0hlRlY2OXRUWmtIK3lvbWkyek9jOXVlSGNiblF4LzBGeCtPMWEvM1RDaTExTWhPWUdJSHJMSDdiQ2Vyc3RsREo4ZFZKK2g2ek9mRFBSd2xrcDA1V253S1RQSXVUZDFjSTdwWHp6UHlUNWxlTmx3NjNnSkc5cUFDbEhDUExmdFFpczhDaGpQUHp3NDU2MUVjVnBsZlIvWmUySWxQbllPYXhBd244M2daY0lnb0MvVDZ5VnFEYlBZOG5LZGR6V292K3NOS0I0UFI4L2o0Rnk1cytyQTdhM0Y4b3BaMW15bWNaRngwM051cHQvWXhkUDB0VUg2ODlSMW5XcFdITnV3S011V1IwUU1ITTY3cnUwLzVLZnZ6aFZWT1Z0L1NONURVSjhRNVVNYUhQVmhxTk15VW1PcUx4QitXbVkvM3NZY0llN2EyWFk2WGRpaWliVzQ0Njg5TVpHd2F4dnU1SnlPY3h6anNiZi9UWTE3Zk1qdWJDeUNiem1tNG13ZWI0enFSTy9sWVllaHc4ckdQeTlRdzZINnlzZHNIMStLMjU3QTIyaFpqaDJVeGt4TjloQThNRVplRStEcHJiTmtza2FNUDgrMCtvYzdSVEVmd0xpdkdpSVJlQ25iaDhZSHN2cHN5Y0p3NkVJc2Y1VlBTYzVsV1VMZjZZTHZuSEdEWWVLMGNSSjdBVHg3aUJjeUwzZlJKSXc0L3hQTTlLWDBqN2xyc3V6bG5sbGREeXZpSWhlYzJMWTI1ZlBGTUJ3L0xUcjVnZllSVGh3ZzJ4QWUyMnRrRTZPemhVK0hXY3Y2NG8rUzBvMjFmb01tamU1eEhlNWJ3Rkorck1RRmx4MWg5QkhNZit1UmpIR0JSK2Rlb3FmdjB6NWlZUFg0TUhqa1N4L05xV0dVajJHMkhERHJnS3hOcFlYSGRacFhpUTVrTHVPQ2NzbWJ3UlFJYVh5eXo4RFBmZW9tODZWYy9JNHJxdGF3Zk5lcTBVajJBM2JJNHgwYzMyYm5zUTE3c1FEMVB1YktwR05zdzd6ejJSYlNZUmhXSG5wcXQ0cmN0bXlaOEVvQW14QmI1WnJxYmtCM25NeDViYVh3aXhPY2pIaDNEaVRwc0Z1Z0NsczJ1TXF0d3k3YlNCRG4zc0RoOEVnQlB3UGhUVHlQQjVQbmRuVjdGRXZ2L2VaOHhoN045N0NLTVNDR2ZBRnNKUmg2Ym5UR3JZenE1UFh1c1daMkNHSWZQZDRJRi9yM2hrZFc0dGtkNFBuN3JrWUdicUhMZUVPOEM2ekJZRTJuRVRaT2dUanFSUVRzSUNYZUsyZWVjZHNjNnhMYXVVMVdyQlppdE9nUGJhMjFPRi9TUXp2RzNWa3hndVh0R0I1V2RweUNkVnY3dVdDWVRVeUxzZUM0SFdGcnRZTXRLZEFvUWlzUUo2K056TkN2WThaeVJLdzQ4eFFDaGE4Z2NPS05aVkN1S2drOHBmWHpDUUZYS3J2QTVFOThPMmV6akI2cjl2aWpmNVROL0crSzFPUHk2TzhvU1VuSTdHcjlEZTdGOEkrRHNubVdqOVQyZnh5aUxISW9GZ0krNjhKNTc0U3hPM2E3TDU4UDRiSjBBL3IzcXBTUkIvRXp4ZVJxUmZRSVR4aGlBVnBqRm1EN2NiSnUyOVJqZmt2MHpYdTA3QngrTzV4QytmVzVXUHVtb2Vjb1lFVjhBY3J2MlBMTk1rR2Z3UlZaS1VNU0pzeVVpSGpIRzE5bUhxVHUrM3g2VEhzNnpTYUJld0lmRCtvb1BkQTcySEgrVnV4eldKOW1wQnV0M2pIeTJyUXpGM0Nyb2FtSWZtTHVkTU1DTlFkUnNyL0E1ajVzM3cyQlp2ZXZNQVNrL2xjU09MRHpQSjRXT0wrTkdzUmx5cUR6ZlhqMjFEejQyT1B0b2ljZmtjYlNtZkoyejI0dWxIbzdFNWlxUWloYWtUeCtUR3BEZU16MUMyVWY0ekIzMTVmTlVMUFc1MitOanFaOTcrMXluWUJIVTR5TlRuVFJ6cGplaWMzMEdlZmw1eHRncEgvTEpBc1FZNDd3ZGFXQ1ZBNEpXY1RUcE1OM3R3VFQvc211N1Y4KysrQzdyQURrRTl4N0hDVmh3OG5wZzdJT3BIWFhvOHhwOXFPT3AvdkZoeUw0WWszN1UwOUZCa3piSDNhZ0RCeHV3V3QyNE9rYTFOV0FsajBJUkZENnphWllHZVhyaU9jQzNXSi9scmN1V3UrODg3YXlmcnY3aGdhWGo4cHkrVnlKbWQ1cUhJYzJXcmpqTXdHTWdLQmZVMk5vOHkrVXIwdmkrY1Z1ajgrVjRnMjBCazArc3c0WTlodVhDaVVHT1RYZnFHcFRaSnlGNStqNWZuN3NtZjl2MjR6cXgvd1Q0dXVwVlBISWdOSGdXNUlGdVA3TTl2b1JMZmRWSEQ4R0lBZmZzQWNSOUd2ZVREMEFiQmRtSEEzeVBlZUVYTGRLR200cjdvWjdQWEVmOEJDSnZuUnF2OXhtTlZ0MUdIdzU5aHAxakg4UnRLMVVzaTJGbGZZYnRERDZwd256N3poSEVjNXp6cnFkUURCYW1oU3pwNTVuelphc1p2b0U1TGduazRaVEpzMXZsZkVuVGNYenoxSmRFSDV4bWtpRHlCcTlEOHJGamJJY0ZsL0xPeGZXYmc3UW15aEhXRHdTQno3NC9icWY3bkdPczZ2VTB3UWZOQVJuT3JMdHQ1YWhxNi9jOHhXUGVPVG5jczBXVGZGWXIzUjRwcHpPZ1R6ekJSeTZybkFDRTg4eTBKdzJXTXFtbmkrTjliYWF4ZThDR2ZvbUN3d0xzL2ZnOGV6WVZQQnhrcml0YWdXQ1RnZ2N6UFR2RTM0ZHVKcCtpbUIyd2RTcjFYMnZaQUVGajZEZUF6V0theElkd1B6QTN1M2tpb3VNNkQxSktYNXFlZk10S3VkSmxocHRvMkgxTXdadWR0d1hFcXVlYzh3dWFzV09BckdPKzY3UWppK1crUGg5Lys0cVRGaVcwRGlCNlNOS0cwL2h0ejBXNHdwaTJSbDgzdTVFUzhnUGR5Zlo0UG9pUkdidmlaYm1sTllhV2ZGb2xpTEJZcGpTZmQzWUY0T3VFRkx1WDF2REp1MnZZOHUyRDZ0LzJaV1FJZHU1VW0zd1ZDOVc2YytSdDhiUFpHbWRqeVozWXhCcmJNWHRiN3ZuNkNIRWN3L1A1NnBBVmJLbFpPa0M0NUlyUzlWa01kZHVVWjhORXNOM2t0a04zd2JibDdHQnBRd0MybmcwK25vbzQ4amlhcjhkajdMVUFadjhQUFBmdkVhNk8wVTRBQUFHRGFVTkRVRWxEUXlCd2NtOW1hV3hsQUFCNG5IMlJQVWpEUUJ6RlgxT2xvaFVGTzRnNFpLaE9Ga1JGSExVS1JhZ1Fhb1ZXSFV3dS9ZSW1EVW1LaTZQZ1duRHdZN0hxNE9Lc3E0T3JJQWgrZ0RnNU9pbTZTSW4vU3dvdFlqdzQ3c2U3ZTQrN2Q0QlFMelBONmhnSE5OMDJVNG00bU1tdWlxRlhoQ0NnSHowSXlNd3k1aVFwQ2QveGRZOEFYKzlpUE12LzNKK2pWODFaREFpSXhMUE1NRzNpRGVMcFRkdmd2RThjWVVWWkpUNG5IalBwZ3NTUFhGYzhmdU5jY0ZuZ21SRXpuWm9uamhDTGhUWlcycGdWVFkxNGlqaXFhanJsQ3htUFZjNWJuTFZ5bFRYdnlWOFl6dWtyeTF5bk9Zd0VGckVFQ1NJVVZGRkNHVFppdE9xa1dFalJmdHpIUCtUNkpYSXA1Q3FCa1dNQkZXaVFYVC80SC96dTFzcFBUbmhKNFRqUStlSTRIeU5BYUJkbzFCem4rOWh4R2lkQThCbTQwbHYrU2gyWStTUzkxdEtpUjBEZk5uQngzZEtVUGVCeUJ4aDhNbVJUZHFVZ1RTR2ZCOTdQNkp1eXdNQXQwTDNtOWRiY3gra0RrS2F1a2pmQXdTRXdXcURzZFo5M2Q3WDM5dStaWm44L3hydHlZdkRSZkc4QUFBQUdZa3RIUkFEL0FQOEEvNkM5cDVNQUFBQUpjRWhaY3dBQUN4TUFBQXNUQVFDYW5CZ0FBQUFIZEVsTlJRZmtCd0lSRWcrc2gwT3FBQUFnQUVsRVFWUjQydXhkZDNnVTFkNSt6MnpMcHZlRWtJUmlDQzBRYWdoZE9xR0lOQkZFVWNFR0lvSUZwUGhodVY3QWNtM1gzcEFyS2dvaUlDQWl2WWwwRWtwQ1NPOWxlNXZabWZQOXNUdkQ3R1pEVVVUVS9UM1BQSnZkemN5ZU9YUG1uZmZYQ2FVVWZ2bnRZclBaVUY1ZWp1cnFhdFRXMWtLbjAwR3YxOE5rTXNGc05zTmlzY0JtczhGbXM4SGhjTURoY0lCbFdiQXNDNDdqd0hFY25FNm50UEU4TDczeVBBOUJFT1IvRTBFUUlOOG9wZUlyb1pSQzNBQVE3MWNBb0pRUzk5Q2xWNi9QU0Y1ZVhseFVWRlFUalVZVHAxQW80aGlHaVdFWUpvb1FFZ2tnQWtBb0lTUVVRQkNBUUFCYUFHcjNwZ0RBdUk4bkFPQUJzTzdOQnNBS3dFSXBOUUl3VWtyMWxOSjZTbWtkei9PMUhNZFYyZTMyNm9xS2lvcjA5UFJxOTNHb2JHdnduaERpL1ozNEdRQlFRa2lEVjlsR0dZWUJJUVFNdzBBUUJLalZhakFNQTRaaHFFS2hnRUtoQU1Nd0VQOVdLcFhTcTdpcFZDcW9WQ3FvMVdxbzFXcG9OQnBvTkJwb3RWcG90Vm9FQlFVaE9EZ1lJU0VoQ0E4UFIwUkVCS0tqb3hFYkc0dUVoQVJvdFZyL3pYUWRoZmlCN2JjSnk3SW9MeTlIWldVbGFtdHJVVjlmRDcxZUQ2UFJLQUdhMVdxRjNXNkgzVzYvSXFESndVeStDWUpBUklEekFqTVBJQlBCU1E1UzNvQWxmMTlkWFowYUhCeWNvbFFxYjJFWXBpVWhwRGtocEJtQVpnQUNicEpwdGdNb3BwUVdDWUpReVBOOEFjdXlGM1U2WFg2elpzMHVlQUVjdlF6Z05RQkFFZmdJSVI1QVJ5bWxTcVZTQkRZSjBPUWdKOS9rNE5ZWXdBVUVCQ0FnSUFDQmdZRVN3SVdHaGlJOFBCeVJrWkdJam81R2ZIdzhFaElTb0Zhci9UZVhIOWorSENrcEtVRmxaU1ZxYW1wUVYxY0huVTRIbzlFSWs4a2tBWnJOWnJzc29IRWNKN0V6YjFEekJXWWlLeE9CVGJ4MlBvRE00MzFlWGw1c1FrSkNCNVZLMVVHaFVMUW5oTFFIMEJhQTVxOThEWGllZDVTV2xwNU5Ta282NDNRNno5aHN0cHpjM055Y0hqMTYxTHFab2h6VUJEZFQ4MkIyM2tBbkFwc0lhQ0tidXhMSWlhQ21VQ2lnVXFrdUMzQmFyVllDdUpDUUVJU0doaUlpSWdKUlVWR0lpWWxCZkh3OGtwS1MvRGVaSDlodW5GUlZWVFZRT3cwR2c2UjJ5Z0hOYnJjM0FMUXJzRFFpcXAxZWdFWWFZV1VOR05uRWlSTVZIMzMwVWZlQWdJQnVDb1dpS3lHa0M0RFV2K08xNEhrZXBhV2xhTmFzbWZkWGVZSWdIT000N3JqUmFEeDJ4eDEzSE51OWU3Y2dBenNKOUFnaGdqZWpjd05iQXpiSE1BejFBWEJRS0JUMFN1eE5EbkFpZXhNQlRsUlB3OExDR3FpbmNYRngvcHZPRDJ4L25CZ01CcFNWbFVrc3paZmE2Y3VPeG5FY1dKYVZHSm9QT3hxUjI5RjhNRFBpdzE0bXNqTHl4Qk5QS0pZdVhkcEhvOUgwWkJpbUZ5R2tKNERnZjhJMXVReXdlWXVaVW5ySTZYUWVNcGxNaDJmT25IbG96Wm8xVGg5QUo0akE1Z1kwNnNNdVI3MlpuSmY5alhyYjMwUUdwMWFySllCcnpQNG1WMDlGOXRhMGFWT0VoWVg1YjBJL3NGMC80VGdPSlNVbEhpeE5yOWRMTE8xcTdHaStuQU1pb0hteE0wbk5sREV5eUlHTVVzclUxOWUzQ3c0T3ZsV2hVUFFqaFBRSDhJOWM5ZGNBYkEyZVU0SWc3T1U0Ymw5VlZkVys1czJibjNPRFd3TldKMmQwSW51VC95MDZHT1FnSndKY1k4NkZLOW5mUlBZV0hoN3V3ZDZTa3BLZ1VxbjhONlVmMkg2ZlZGWldvclMwdElGelFLNTJpcUFtc2pTUm9WMHRvUEU4TDZtWmdpQTBDbVpXcTNXQVdxMGV6RERNWUFBZC9GZm5kd0didDJRN25jNGRScU54VjNSMDlENjR2TGlDTjlnMUJuSU13MGpxcWtLaG9GY0xjQ0tERTltYkNHNXk5ZFRidVpDWW1JajQrSGoveGZjRDI3V0x4V0pCY1hFeHlzdkxVVlZWNWRNNWNLWHdEUysxazNnNUJ1VHNqSGd4TkFuTWJEWmJsbHF0emlLRVpBRm82cjh5TjBUS2VKNy8wV1F5YlkrTWpOeU9TK0VxUGtGT3BxNTZxS29paS9QeW9OSXJzVGR2OWRUYnVSQVhGNGVFaEFRa0p5Y2pLQ2pJZjdYOHdIWjFVbEpTSXJFMHVTM05sM1BBMjVibWc2VmRDZENJdDgzTVlyRU0xR2cwdHhGQ1J2bkI3S1lBdVMxNnZYNUxURXlNeU9ROFFNNmJ4Y2xBcmxHQVV5cVZqUUtjbkwxNU94ZThiVytKaVlsKzc2a2YyQzR2SnBNSlJVVkZLQ3NyODJCcEJvUEJJeWJ0S29Oc2lhaDZpdXJtWmRnWm85UHAwb0tEZzhjeURITTdnSGIrSlhsVHlsbVdaVGVXbDVkdmJ0bXk1Umtad1BFeWtLT3kxd1lzVHE2bXVvR05YazF3cnp6MlRmU2NpdXl0YWRPbWFOYXNHVUpDUXZ4WHlBOXNEVm1hNkNEdzVmRnNMSVJEQkRWZmdDYlBFcEFEbWdobW16WnRDaGc4ZVBCRXBWSTVnUkF5ekw4TS96b2lDTUkycTlXNjRhMjMzdHE0YU5FaUd3Q25IT1JrTEU0UTJadTNtdW9WSHVJQmNDSzROUllhNHUwNUZSMExmdmJtQnpZQWdOVnFSVUZCUVFNSGdjalN6R2F6WkV1N1F1YkE1UUNOeU5WT3ZWN2ZJU2dvYUJMRE1KTUErRmZpWC95WnlISGMycEtTa3ZVcEtTbG5aYW9xNzYycXlnQ09YZ25nTGhmWXE5VnFFUndjTExFM2I4ZENpeFl0RUJnWTZMOHkvMVJncTZpb2tGVFA2dXBxRHdmQmxlTFNaS0RtRTlEY0FiVWU2cWJWYXMxU3E5V1RDU0VUL1V2dWI4bmkxdW4xK3JYUjBkRTczQXhPRG5DOEx6VlZGaWJTQU9BYXM3MzVpbnNUVmRQWTJGaEpOVzNTcE1rLy9wb28vMGtueS9NODh2UHpVVnhjaklxS0Npa2x5bUF3d0dnMHdtS3hTS0RtY0RoOFpnK0lnQ2F6by9rRXRMdnZ2bHZ4MFVjZjNhMVVLdThHME1kLysvOTloV0dZY1pHUmtlTjRudDl2c1ZpK0hqeDQ4TnJEaHc4N1JaQ2psRGJ3clBJOFR3VkJvR0xpUGMvelZCNFM1SFE2cVR4Y1NOUVE1S1lROGFFclBvU3RWaXZNWmpOTUpoTnV1ZVVXS0JTS2Z5NWpLeXdzL0VlY3FORm85QWxvb3NkVHJuWmV6bzdtUytXVXNUT3lhZE9ta05hdFc5K3JVQ2ltd1I5ejlvOFVTbW0ydytINGN2MzY5V3NXTEZoZ0pJVHdNaWJYUUUyVnNUaHZCbmRaKzV0Y1BSVURlOFdjMHlaTm1pQTVPUm1ob2FIL1RHRGpPTzV2ZjVKbFpXVW9MQ3lVdko1aUJvRzM2dGxZR0llWDJrbGthVThTcUdWblowZTBiTm55Zm9WQ2NUK0FGUC90N1JjQStYYTdmZFdtVFp1K25qSmxpczVMVGVYZDRDYXBxTzVnWHlyUFFmVldUMzJGaFhpblpFVkhSMHRlMCtiTm02TnAwMzllNU5EZjJzWkdLVVZ1Ymk2S2lvcWtnTnZMZVQyOU13Z2FVVHRGTHlkREtTVW5UNTRNYmR1MjdReUZRakVEd0MzK2U5a3ZQdVNpeldiNy9LdXZ2dnB5K3ZUcGhzc0JIQ0ZFa0NYZGUyY3VVRjhaQzQxNVRjV0EzbWJObWlFMU5SWHViQWsvc1AyVnhXUXk0Y0tGQzVMNldWMWRMWGs5NVFHM2plUjVFdTlVS0M5UEo3Tmt5UkxGa2lWTEhsUW9GQS9DSDMvbWw2dDcwSjYxV3Ewcjc3ampqdFZidG14aDNRQW5xYWd5Z0JQa0hsVHYxQ3lWU2tVYnl6ZVZxNldSa1pHSWpZMlYxTktVbEpSL1RNemIzeExZcXFxcWtKK2ZqNUtTRWxSVVZEUUk1ZkJPWHBmYjFMeFltb2RqUVBSeTJ1MzJPMVVxMVNNQWV2aHZWNy84Qm9BN2JEUWFQd3NQRDk5SUNPRzhBTTZid1ZGWkJnUDFabS9lTVcvZUFiMWlTRWlUSmsyUWxKU0VXMjY1NVI5UkR1bHY1eFV0TEN6RXhZc1hQZUxUNUxtZTNzbnJjcFltT2dya2FxZk1qc1pZcmRhQmFyVjZwanZseVM5KytXMXNncENNc0xDd0RKN25SMVZYVjMvV3BFbVRBM0tBOC9haThqeFAzUUpCRUtoWC9UN3hQWHg1VVVXeml1aEZ0ZHZ0c05sc2FONjh1Ui9ZL2lyMnRQUG56K1BpeFl1Tk9na3VVOW0yQVV1VHE1MzE5Zldwb2FHaHN3Z2hEL3R2Uzc5Y0wyRVlaa1I4ZlB3SWxtVS95c25KK2J4ejU4NzVNb0FUdzBSNEFJSWdDSUxZMzhLOVVURmxUdzV1M2lBbk9zQzh3YzF1dDZOMTY5Wi9XN3ZiM3dMWWJEWWJ6cDgvNytINWxNZW5OV1pQODJacGJsQ1QxTTU3NzcxWDhjRUhIOHhXS0JTUEFVajAzNHArK1NORXBWTE42TlNwVTViRllubS9iOSsrbng4L2Zwd0Z3TG5aR3lPcXFKUlNxUmltMjRGRjVjVVZ2QUhPdTFxekhPQllscFhBN2UvWVNPWXZEMnc2blE2NXVia29MQ3lVQ2tMS3EzTDRLZ2JwZm9ySlFVM08waGhLS2JGYXJVTTFHczNqQUFiNWJ6Mi8zQUJwR2hnWStQeXZ2LzQ2b0xxNitxTW1UWnJzSllTd012V1U0RkpPS3ZWaWNIS0FvNzZhQXZsU1Q4VW9nTlRVVkVSRVJQaUI3V2FScXFvcWozQU9NWW5kVjRWYldTZ0hFZW01RDViR2xKYVd4c2ZGeFQzT01NeGMvNzNtbHo5QlBSMFFIeDgvd09Gdy9IZkhqaDJmWm1WbFZiclZVMFlPY0s0SzVrUm9qTDNKVkZWY2pacWFtcHI2dDNJcS9HV0JyYVNrQkhsNWVTZ3FLcExDT2VUTlZYdzVDYnhaR3MvemNwYkcyTzMyQ1NxVmFtN3B1ZU5keXgzQnlFaHZkVk9kYzMxOVBXcHJhNUdhbXVwSGdMK0E2UFY2Yk5xMENRNkhBNE1HRGJvbWc3MWFyWjQxYk5pd1huVjFkZTlIUlVWdElZUW8zT29wSjdPOUVibjlUUTV3TE1zU2xtVWJ0YjE1TXppTzQxQlRVd096MlF3QWlJaUlRT3ZXclg4MzhTZ29LQUFBeE1mSFg5WDVWMVJVd09Gdy9HN25CdFBvTjZ3ZW55eDdFb1A3WnlJanN6OGVXZmdxeWt6T20yTEI1T2ZuNDh5Wk14NXhhcGZZbWc3RkY4N2cySkZma1oyZGc4TGlNbGhzZGpnY0RpSUNuRHMxaWdpQ3dBaUNvS2lzckV4Mk9wMnZxVlNxL3dIb3V2by84M0RQd25kdWluTTlmUGd3M256elRRREFrU05IOE5wcnIvMnBZL2c5d25FY0JnMGFCSVBCOEtlTjRYckwyYk5uWWJmYkczenVkRG94WWNJRUZCVVZJVEF3RUZhcjlacVBUUWpwSEJrWitSN0xzb3QzN05qUmpGSWFRQ25Wd05XWVdrVXBWVkJLRllJZ0tBUkJZSGllSjA2bms3QXNDNVBKQktQUlNFUXZxRHlQMUdBd1NGV2lLeW9xVUZ4Y2pBc1hMdURRb1VQNCtPT1A4ZmJiYi8vbWRmYlNTeS9oekprekFJQ0NnZ0tzVzdjT0sxYXN3S3BWcTY1cVBXelpzc1huLzE3cmVtZ1UyTFo5OEN4ZS9IUTNSazUvQnYrMzREN2svZmdlSG5uMjR6OTlJWjA3ZHc1bno1NUZmbjYrUjdWYmthMVZGZWNodjZRYXlzQlFoQVFIZ0hOWVNIMjlub2lNemMzVWlDQUlJa3NiRngwZC9SVWhaT2JOK05ULzhzc3ZrWkdSOGJjWWcwcWx3dnZ2di8rYnVpN2REUFBnUytiTW1ZT1NrcElHbitmbDVZRVFna1dMRm1IeTVNbG8xNjdkNzVtM0IvcjM3Ly9mRXlkT1pBSFF3dFVUVmdRM3BSdmdHQkhjM0wwMENNL3pjRGdjeEc2M0V4SGNMQllMVENZVFRwNDhpWUtDQXRUVTFFajlQVmlXeFpneFl6Qnc0TURmTkU2VHlZVGR1M2VqVFpzMkFJRE16RXlzV0xFQ3Q5MTIydzFmRDQwQ1cxRlJFVWhFYzB5Wk5BWWpiNzhYTHk5L0VjTzZKTUVKUUY5NEZIUHZuNENNakV6Y052a2g3RDVYQlFBNHV2NU5ETSs2RjNrMkFIRGl4WWRHNHVGbFg3cDUrVWxNeWhxT2Q3L1lpRGxUYjBkbVJpWSsyMTNvWW1DSHZzYzk0NFlpSTZNWHBqNzZIUEpySFNKdHhOWlBsbVAwZ0w3STdEc1lEeTU0QmFmUG5VTkJRWUhVRHMrN0owRkZlVFhBcUJBYUZBQ1ZXa3ZVU2dXbzRIU0JtdE5KT0k1bG5FNG4wMlBBaVBCdjlwMTVRYVZTZlFtZzI0RnYzOFR3L3IwdzhMWjdjTGpRSktldUhtTlk4dVlhT0c3UVRXTTBHbkgyN0ZuMDZIRXBEdGhxdFdMZXZIbm8zNzgvSG52c01UZ2NydEdZeldZODlkUlRHRHAwS0NaTm1vUlRwMDRCQUw3NDRnczgrdWlqR0RCZ0FCWXZYb3lzckN6TW1UTkhiTHFNdFd2WFl1VElrY2pLeXZMNXBQUTFobDkrK1FYang0L0g0TUdEc1dUSkV0aHNOZ0JBYlcwdFpzK2VqYXlzTEl3ZlB4Ni8vUEtMdE05ZGQ5MkZrU05IWXM2Y09aSzZJOHFubjM2SzRjT0hZOGlRSVhqdHRkZmdIVFR1UFlidnYvOGU3NzMzbnZUOTZkT25zV0RCQW9rcExWdTJERU9IRHNYWXNXT2xNWmpOWmt5ZlBoMnZ2LzQ2aGd3Wmdva1RKNktvcUFnQThNSUxMMkQvL3YzUzhWYXZYbzNWcTFkZjl0cnMyYk1IRXlkT1JHbHBLZWJPbll1SkV5ZGk1ODZkQUlDbm4zNGFUenp4QkNvcUtqQng0a1JNbkRnUkxNdGU5bmpyMTYvSDY2Ky9qaGt6WnFCZnYzNVl1blNwTkEvTGx5L0hxRkdqdWl4Y3VQQ0RYYnQyemYzd3d3K2pLYVVCQURTVVVoV2xWQ2tJZ3BMbmVVYmMzTUJHREFZRGFtdHJVVnRiUzJ3MkczUTZIVTZmUGcyajBZanM3R3hzMjdZTlI0OGVSV1ZsSmNyS3lsQlFVSURpNG1MVTFkVkp2NStYbDRkNzdya0hnaUJJNDUwOWV6YU9IajNxY1E0Yk4yN0VxRkdqd0RETUZkZjI1ZGJEdVhQbk1HSENCQXdZTUFDZmZ2cnBGZGZraFFzWE1IUG1URHp3d0FQbzM3OC9GaTVjQ01oMGM0K3Q4c1FHOUdqZkVwMTZqY0RTVjk3QjZSTFhpVkxlZ0Zrak9xSDdzR240YnRONnpKcHdLMXIzbUlBU084V3VqK2VqUllzK09HbW1vSlRESTROU01HejJXNjc5cXZlaFM0c1dhTm02RTJiTW00OUY4NS9FM253eitMb1RHTkMrSlVZLytDdzJyRitOMFQzYll0VGpybjFPckZ1R2xpM2FZdjdySy9ISzBqbElpb2xDMXJRbk1ILytmRXlmUGgzanhvM0Q0TUdEa1ptWmlZNGRPeUkxTlJVYUJRRlJhaEFaR1VsQ1FrS0lWcXNsYXJXYVVTcVZDdUt5S2FwWHJmbDI4T0lIUi8vWXNtMGZlcXlhbzQ3U1BiUnJTZ3M2OXFHbGRQM2FsWFJZdDFUYWVzVGpsRkpLVDZ4YlJsdTJhRXVmZWV0L2RPMm5LMmlubEpaMDJib1Q5RWJJcWxXcjZOdHZ2eTI5Ly9ISEgybi8vdjFwV1ZrWmRUZ2M5TTQ3NzZScjE2NmxsRks2WU1FQytxOS8vWXNLZ2tBUEh6NU1lL1RvUWExV0szMzk5ZGZwZi83ekgzcmt5QkU2ZE9oUXluRWM3ZFdyRjYydHJhVUhEeDZrSTBlT3BIcTludXIxZWpwa3lCQjY4dVRKeTQ1QnA5UFI3dDI3MDdObnoxS2U1K25DaFF2cEcyKzhRU21sOVAzMzM2ZWZmLzQ1cFpUU1E0Y08wWDc5K2tuN21Vd21halFhYVhwNk9qVVlETkxuNTgrZnAvMzY5YU1XaTRWYUxCWTZaY29VK3NzdnYxeDJERFUxTmJSMzc5NlU0emhLS2FWTGxpeWhhOWFzb1pSUyt2cnJyOU9ubjM2YU9wMU9ldmJzV1pxWm1VbnRkanMxR0F3MEpTV0ZIamh3Z0ZKSzZZb1ZLK2o4K2ZPbGVaMDVjNlowL0dIRGh0SEN3c0tydWtaRGhneWh1Ym01RFQ0L2NlSUVIVE5tekZWZjY0OC8vcGplZHR0dFZLZlRVYlBaVEFjT0hFaC8vZlZYU2ltbE5wdU5HbzFHT21QR0RQcmpqejlTbnVkL0tpd3NuQUNnR1lBbUFLSUlJV0VBZ2dBRU1BeWpKb1FvQ1NFS3RWck5CQVFFRUFBa0xDeU14TWZISXprNUdRRUJBV2pldkRreU16TXhlUEJnakJzM0R0T25UOGY4K2ZQeDBFTVBZZURBZ1RoKy9EaFlsZ1dsRkdQR2pNSE9uVHRCS2NXNWMrZlF0MjlmT0oxT0Q4d1lOMjRjeXNyS0dtREpwNTkraXVlZmY5N2pNN2VxalBUMGRCZ01CdW56anovK0dHUEhqb1haYkVaVlZSVXlNek9SblozdHNlK3FWYXZ3OXR0dlMrOVBuejZOcmwyN29xeXNERmFyRlJNblRteWNzY1dsajhiV3JkL2p2cXdPMlAvTmV4Z3plQWcrK2ZrY2hPSUQySEhXZ0lrUFBvM2JSNDdCb3NmdUJsdDlGTHRQMWw4VkN4bjE2SEo4K09veXZManNaZlJwR1lTQ2c3dFJhR1V3ZmQ0aWpCNHpHVys4K3dGbWp1dnRlZ0o4dndFMExBRjh4Um5rRkJrUW9IRGk5UEdqVXB5YWQwaUh6V1lEVHlrZzhCNnFwOHZyS1RBVVVNeCtZOVBEVXllT1g3bGsvc3loR25zWnR1M09SZjZ2aDFEUEIrREJwNS9CbUhIM1lHQ1hoRXRQb2U4M0FCRkpTRkFZVVdVTFJHSUVnMTI3OXQwUXhyWjI3VnFNR3pmTzQ3TTJiZG9nSVNFQmFyVWEzYnAxUTBWRkJRRGdwNTkrd293Wk0wQUlRZmZ1M1pHY25Jd1RKMDRBZ0ZSMU5TUWtCRXFsRWtGQlFXQlpGcHMzYjBhVEprMndkdTFhckYyN0ZqRXhNVGgwNk5CbHgzRDQ4R0YwNk5BQmJkcTBBY013V0xCZ0FjYVBIdzhBbURGakJoSVNFdkQyMjI5ajU4NmRxS21wa2ZZVGY5ODdJRFF1TGc0cWxRcnZ2UE1PVHA4K2paVXJWelpRTWJ6SEVCMGRqUzVkdW1EMzd0MWdXUmE3ZCsvR3FGR3VaSkFmZnZnQklTRWhXTGx5SlE0Y09BQ0dZWEQrL0hscEREMTc5Z1FBWkdSa29LcktwV2tNSERnUU9UazUwT2wwT0hueUpPTGk0cTVIVzc5cmx1N2R1eU04UEJ4QlFVRm8zNzQ5S2lzckFRQUJBUUVJQ1FtUjZxc3hERE80V2JObWIzenp6VGRUM0twcGdLaWFBaEJWVXdVQVJzeWVJWVFRdHlPTjJPMTI4RHdQdTkwdXFhWjZ2UjUxZFhWU1lMdlJhRVJ1Ymk1T25Ub0Z1OTJPR1RObTRQUFBQd2NBZlBYVlY3am5ubnM4NnIzbDV1WWlKQ1FFQ1FrSlYzV3VqYTBIQU9qY3VUT0Nnb0lRR3h1TFljT0dlVEQveHU2TGhJUUVKQ1FrUUt2VjRxNjc3bW9NMkZoc1cvTVo5aGN5ZUd6eE1temJzeGUzZDFEaGxkZmVkM2xRQUdnMHJ1YXRLdmNyeC9MdWZRWElHR3NEQ2ZlS2wyRTVCd0FGTkJxWGc3WkZlaDlrOWUzc29wd21DemliSGhmT24wZGhZUkhDazFJUkc2SzhYUGNvUWtFSXBZSlVPODNwNUJpZTU1bml2TzBKdlZxMmVDMUFxMzBEUUlKU280WUNBTWV6NEp3OEFBV1Vtb1pPWXJ2TkRpWERvNmF5RXBXVjFlaVNOUVZadmRyZUVGdGllSGo0WmF1aE1nd2pxUXNjeDBHajBVamZhYlhhSzZvL05wc05vYUdoMGpaMjdGajA2ZFBuc21QZ09BNXF0VnA2SHhJU0lwWEZlZTIxMTdCKy9YcjA2TkVESTBhTXVLcnpEQXNMdzhhTkc1R2Ftb3B2dnZrR3c0WU5RMWxaMlJYblllclVxZmoyMjIreGZmdDJEQm8wU0FveXRkbHNpSXlNbE01cDd0eTVQdWRRUG5kS3BSTGp4NC9IOTk5L2ozWHIxdUd1dSs3NjAyMTNoQkJjSVk4N1FhMVd2elJ6NXN4bk5tM2FsQ2lxcGpLQUU0R05jZHVUSVFnQ2NRZm5Fa0VRaU1QaDhIQXE2UFY2NmQ2eVdDd29MQ3lVd0sxdjM3N0l6OC9IdVhQbnNHM2JOa3lhTk1sak1HdldyTUdFQ1JPdSt6eW8xV3JJUzZ0ZHpYMmgwV2dhQXpZbGp2KzRFazh0ZUJaN1QrYWp0TFFRZXJQcnhsRTA2NFpPMFNyOHNPNS9LQ3d0eGFvdk53Q0JMZEd0WXd6aVkrSUExT0dYZzluSVA3a0xGNnI1S3c2OFpaY01SQ2hZYlBwbUhjcEs4L0RZdUV6MHZ1ZEZtRXdtTkVtK0JaYmFLZ2loOGJpbFpUTW9CUllCYWtXRE9EVjN4VnZDc2l3VWhBQlVJQ3pMRVo3bkdVR2d6TkNIWCszWHBIbm1oNW50dzJidTJyZ0c1NHBMOGUycU5iQ1FFR1IwYVkxYk9uUkVJQ3hZdjJvZENzOGZ4Y204T21sOGZYcjNCS2ZYSVNFakN3OC9PQTF0NHNPUWtkSGxEMS9ZYTlhc3dSMTMzSEZOVC9zdFc3WklidmJzN0d4MDdOanhpdnRVVlZWaHpKZ3htREJoQWxxM2J1MnhZSHlOb1hQbnpqaDY5Q2owZXIzMFB4OTg4SUhrdFIwM2JoeTZkKzh1cVFsWGtsMjdkdUhsbDEvR2JiZmRobGRlZVFWdDI3YkZ3WU1IcnpnUDNidDNSMmxwS1ZhdVhJa3BVNlpJbjJka1pJQmxXVXlZTUFFVEpreEFRa0xDVlFXZlRwbzBDZXZYcjhmaHc0ZXZ5WGl1MVdwUlYxZjNwNEJmZW5vNmpoNDlPcU5YcjE0dkZSUVU5UERsV0FDZ0VBU0JFZG1iNkRXbGxNS1hVMEhNMXJIWmJGSUovYnk4UEp3OWV4YVRKazNDbzQ4K2lxRkRoM3BVQ2VFNERydDI3Y0xRb1VPdnkza1ZGaGFDVWdxSHc0SGR1M2VqUTRjT1Yxd1BPcDFPc2pmLzlOTlBqY1d4TVhqc3BmK2lldjVDekJnM0JCd0ZvbHQyd2Nzdno0RlMzUVRMWHY4WFpzNTdIZ1A3cllJNnJDbWVlZVZ0cElVQ0dId25ScVY5ZytVUDM0WlBXL2REaTZaaDBGM2hKRFRKL2ZISzBnZngxTDhYb2UrN0hLS2FkOFZ6QzZmZzlPblRpTzQ0QkptdEwrRG5iejRENitTaDBJYWdaWW9HQVhCNng2aEo4V2xRS0FnUkJDSUlQQUhBREo3NHlOVFgvKy9oWndqUnBpeDQrWFVVUFRJUEkyN3RCMFZBQk81YitocUd0dElDR0lvbER3N0JzeDgralI5WHg2Sjl3cVdxbzhNZmZoNlBsejZCTng2Zmd1VThFTjJxSzE3cVB4bEErQisyWUZtV3haNDlleVNEK05YSTBxVkxNWFBtVEd6YXRBa1ZGUlZZdW5UcEZXL284ZVBINC9UcDA4akt5a0pNVEF3VUNvWGs1bTlzREFrSkNaZzdkeTRtVEppQW1KZ1lBSkRjN2pObXpNRENoUXNSR3h1TDJOaFlDSUlBZzhHQXNMQXdqQnMzRHZYMTlUQ1pUQmcxYWhTQ2dvS3daY3NXWkdabVl2WHExUmd6Wm96cndhbFFTRGZJNWVhQkVJS0pFeWRpeTVZdFNFbTVWTmR6NGNLRmVQVFJSekYyN0ZoUVN0R3VYYnVyOHFhS1BRTmF0V29GcGZMcXd6dW5UcDJLT1hQbW9Ibno1aGc5ZWpTbVRwMTYzZGZEODg4L2p4MDdkcUMydGhiSGpoM0RTeSs5aFBmZmZ4K3RXN2ZHMUtsVE1XclVxSUZ4Y1hITkJnMGE5TmJQUC8rODBaMkdKYS9zekFNQXBWUnd4MjVDb1ZCUWtSQ28xV29hSHg4UHM5bU1VNmRPU1d6eHM4OCtRL3YyN1RGeTVFZ0lnb0EyYmRxZ3VMZ1k5OTU3cjhmNGZ2NzVaL1R0MjllRHlRUEFoZzBiOE5wcnI4RmtNc0hwZE9Mbm4zL0dJNDg4Z2ttVEpqVzZIa1NRR2p0MkxQUjZQWHIwNkNHWkR5NjNIaHdPQis2OTkxNHA5T2FLWll0WWh3bFdCNFB3VUsvTzA0SVQ5WG85Z2tPam9mWllCd0wwOVhvRVIwWmVVL1N2d0RxZ045c0FCamliaytNUnpsRmRYWVhhZWgwY05sdURiQUk1cU1teUNKaHBkMDlWTFAvUGZ4ZEVod2N0Z2tjZ3NtdDgydUJ3YU5TZWhOVm0wUVBLWUdoOXFLU3N3d0tqalVkMCtCOWZhdm5zMmJNNGN1UUk3cjc3N212ZXQ2NnVEcUdob1ZDcFZGZTlqODFtQThkeEhtV2tyelFHbG1WaE5wc1JHUm5aWUlIWmJEYUVoMThiOEp0TUpoQkNFQndjZkYzbXdXQXdRSzFXLys0OHlDbFRwalNJdTl1NGNhT0g1MC9za1hHbGN5NHVMc1lqanp6aThWbjc5dTJ4WXNXSzN6eSttcG9hYUxWYU1BeURmLzNyWDg3RXhNVFgzbnZ2dlk5T25UcGxkNmRrY2U3TjZhN3pKaEJDQkhraFM0MUdBN1ZhVGNYYWJtTHBJN0ZvWlZSVUZPTGo0MkUwR3BHVGs0TlZxMVo1bk91bm4zNktQbjM2b0ZXcjZ4ZlFMaWJyeTBOQkdsc1AyZG5aV0xod0liNzc3anZvOVhwRVJrYmVYUFhZZERvZGNyeEFUWFFTaU0xVzVOMmpaS0FtcjV2R1ZGWldKa1ZGUlQxRENKa0J2L2psYnlxQ0lPRHV1KzlHMDZaTndmTThUcDA2aGErLy9ob2hJU0VyZCt6WThlSHc0Y05MQ1NFT0wzRGp2Y0JOS2owdWdwdThHNVlJYnFXbHBTZ29LTUNzV2JQUXAwOGZ0Ry9mL3FiSkx4V0JiY09HRFpjWS9jMENiSEpRS3lrcDhRQTFlY01WSDB4TlRJMWlCRUVnSnBPcG0xYXJYZWl2bWVhWGZ3cTRaV2RudzI2M0l6MDlYWElnOFR5L0pUYzM5NzEyN2RxZEJ1Q1FzVGVudTdrTTcrNnhJSWlOWStUZ0pwWWNGNzJYWWcyM2xKUVVxV0RselFKdVZxc1ZoWVdGSGtIUU53V3c2ZlY2Wkdkbit3UTFrYW41VWo5bFdRU0VVc3JZYkxaaGFyVjZFZnlWYmYzaUYxQktENWVYbDcrVG1KaTQxd3ZjT0RlNFNjek5YWDY4QWJnMXBwYUs0SmFXbG5iTlpvY2JJWDk2RXJ6QllQREoxSFE2bmM4S0hWN3Fwd1JxRG9kanNsS3BYQVNnbFg5Sis4VXZya3E5Q1FrSmtiVzF0VzlGUjBkdnBwUXl4QlU0UmlpbEhOeE9CY0dkVXVBbU9SUXV4d1AxQVpTK2ZnTnBhV20vS1MzcWJ3dHNKcFBKcDAxTkJMWExxWjl5VUdOWjltR0ZRckVZUUl4L09mdkZMeDdBa3hJVkZiVllyOWNIaDRlSGYrTXVkMFM4TlRZUjNKeE9wMDl3YXd6VXhLMURodzQzVmFNWTVzLzZZWXZGMHFpandFY1RZOUlZcUhFYzk1UkNvVmp1QjdYRzdRLzMzWGZmVFRXbXdzSkMvTlVhZGIvODhzdm8zYnMzaGc0ZEtxVWFUWjQ4R1pNblQ4YjA2ZE92KysvdDM3OGYxN0huYjB4WVdOZ1NzOWw4THdDdExKaFhucWtnWlNrNG5VN2lybHBKUjdRQUFDQUFTVVJCVk5NbUpkRGJiRGFQUU42NnVqb3BlVDQvUHg4NU9UbXdXQ3c0ZS9hc2xOSGhMZlBtelpNeVpScVR6WnMzU3hrT2Z6bGdzOXZ0MStMOUpQSU9VcUpON1oxMzNsRnhIUGNzd3pBdndwVlM0aGNmd3ZNOGpodzVjbE9ONmNVWFg0VEZZcEhlRzQxR3pKNDkrNmFkdzVNblQyTExsaTM0NmFlZnNHM2JOblRxMUFrcWxRcXZ2UElLbm52dXVlcyt2elUxTlZpK2ZQazFoZXo0a29zWEwrSzU1NTRUM3dZRUJRVXRyS3lzZkVpajBRUTFBbTRLUVJDSXZQeVJ1OUt1Qkc0V2l3VkdvN0ZSY0h2aWlTYzhVcTNrY3VyVUthbGdRbU5TV1ZrcEZTZjRTNm1pSE1kZDF2dnBaVk1UY3o0aEw4Znk2NisvQnFlbnB5OWlHT2JKdnlNWUhUaHdBTTJiTjhmKy9mc1JGeGVIdm4zN1NqbDFack1aMjdkdkJ3RDA2ZE1IMGRIUjBuN2w1ZVhZdDI4ZklpTWpNWERnUUo5VkZrNmRPZ1dOUmlNVkVheXRyY1hPblRzUkdCaUlmdjM2ZWFnVFI0OGVSVjVlSHZyMTY0ZmMzRnpjZXV1dGtscXliOTgrbEplWG8zZnYza2hNdk5RT29xeXNEUHYyN1VOb2FDZ0dEaHpva2VZRnVMSWlhbXBxMEw1OWV3QkFUazRPenA0OWk5MjdkMlBidG0wQWdMNTkrMHJ4WjhYRnhUaHc0QUNTazVQUnExY3ZDUWd2WExpQW1KZ1k3TisvSDZtcHFlalNwY3NWeDBBcHhkNjllMUZSVVlHZVBYc2lPVGxaMmljbkp3ZFJVVkVvTFMxRmJtNHUrdlhyaDhURVJPemN1Uk9IRGgxQ1JFUUU5dTNiQjdWYUxjMUQwNlpOWVRLWkdtV2xodzRkUWxKU0VucjE2Z1ZDQ0k0ZE80YlUxRlJvdFZxY1BuMGFuVHAxd29VTEZ4QVlHT2lSWTdsdTNUcU1IVHYyaXV2aCtQSGppSTZPUmxKU0VnQkllYk9EQmczQ3NXUEhjUFRvVWV6YXRVc0tjQjA2ZENpMFd1M2MxcTFicTRjTkcvYlJ5eSsvckhlcmxLTGR6ZWxXUzNsM3FYeFJMWVhENFNDQ0lGQ2owUWkxV28zRXhFUVBWWlFRZ3BLU0VnUUVCSGpZMjhUcjU2dHMwOUdqUjVHYm00dHUzYnA1eE1BSmdvQWRPM2FndnI0ZVE0WU1rWTczeXkrL29FMmJOZ2dMQ3dQTHNqaHc0SUIwTGV4Mk83WnQyd2FsVW9sMjdkcmRXTVpHS2ZVQU5Ya3l1M2ZURlZsdkFnOVFPMy8rZkVSNmV2clN2eXVvQWE0eU9rOCsrU1QwZWoyV0xWc21aUVBvZERyY2R0dHRLQzB0UldGaElVYVBIbzNhMmxvQXdMRmp4ekJwMGlUbzlYcHMzcndaRHp6d1FJUGpidG15QmZQbno1ZkE4T0xGaTVnNGNhS1UvRDFtekJncExXWDE2dFY0K3VtbllUUWFzV2pSSWp6OTlOTWVLc1hYWDM4Tm85R0lLVk9tSURzN0d3QncvUGh4M0gzMzNUQWFqZGk1Y3ljbVQ1N2N3RGF6YnQwNmp3VG11cm82bEphV1FoQUVGQlVWb2Fpb1NMVHpZT2ZPblhqZ2dRZGdzVmp3N3J2dlNvR3NwYVdsbURWckZ0NTQ0dzNvZERyTW1qVUx1M2J0dXVJWTVzMmJoeSsrK0FJbWt3bFRwMDcxS0ZXMGF0VXFUSjgrSGUrKyt5NXljbkpRWCs4cTZsQlNVb0thbWhyWWJEWVVGUldodExUMGl0ZHY1ODZkdU8rKysyQ3hXUERSUng5SmtmSWJOMjdFa1NOSGNQYnNXVHp4eEJNQWdQZmZmOTlEUGFPVTR2dnZ2OGZ0dDk5K3hmVncvdng1UFAvODg5TC9iZDI2Rlo5Ly9qa1loa0YxZFRVcUt5dkJzcXcwcjZLd0xEdkw0WEE4UEhIaXhHZ0FZdkZLRlFDbElBZ0tBQXBLS1dGWlZsSkxUU1lUcXFxcVlMRllVRjFkalp5Y0hBL21WbFZWaGExYnQ2SmR1M2JJeWNrQnBSUm56cHpCK1BIalVWMWRqYzgvLzl4ajdsNTk5Vlc4L3ZycnNGcXRlT1NSUjdCanh3N3B1dzBiTnVEbzBhTTRmZm8weG93Wkk3SDc1Y3VYU3lZTW85R0lKNTk4VWdMQ3FWT25ZdnYyN2NqUHozZGxmelJXdHVpUDJFNmZQbzF2di8wV3I3enlDdWJObTRlcFU2ZGk1TWlSNk5PbkR6cDE2b1RVMUZRa0pTVWhOallXNGVIaEpDZ29pR2cwR2thcFZDb1VDb1d5c0xBd1RoQ0VOK25mWElZUEgwNnpzN01wcFpTV2xwYlNEaDA2VUtmVFNXdHJhK214WThjb3BaU3lMRXRuekpoQnQyelpRaW1sOVA3Nzc2ZWJObTJpN3RMUWRNR0NCVlNuMDFHajBValQwdExvMXExYjZaQWhRMmhWVlpYME82V2xwZlRNbVRQUzhiS3lzdWpwMDZjcHBaVDI3OTlmR2tONWVUbnQzcjA3cFpUUzQ4ZVAweEVqUmxCWE5XcEt2L25tRy9yVVUwOVJTaW45OU5OUDZlelpzNm5UNlpTK3M5bHMwdThKZ2tDenNyS29UcWZ6T04rYW1ocmF0V3ZYQnZNd2VQQmdhUXdXaTRWMjd0eVpPaHdPbXBPVFF3Y05HaVNONFlNUFBxRFBQZmZjWmNkdzVzd1pldXV0dDFLeFIrZXVYYnZvK1BIanBkK2FQMzgrZmY3NTUzMWVqMDJiTnRGWnMyYjUvTTVvTk5LT0hUdDZmRFpxMUNoNitQQmhTaW1sSE1mUm5qMTcwdno4ZlByZGQ5L1JkOTU1aDM3NDRZZDA0TUNCdExLeWtvNGRPOVpqam80Y09kTGd0eHBiRDNhN25XWmtaTkRpNG1KS0thVjMzbmtuM2JGangyVkxKeGtNQnBxV2xrWTVqcU4ydS8yRDJiTm5ad0JvQVNBQlFCU0FVRUpJSU1Nd0dnQktobUVVR28yR0lZU1F3TUJBRWhzYmk0U0VCREFNZzA2ZE9xRlBuejRZT1hJa0prK2VqQ1pObW1ERmloWDQ5dHR2cFJwNUgzLzhzWFQvOSt2WEQvbjUrYWlzckVSR1JnYnNkanNvcFRoNDhDQ21USmtpbFMxYXRHaVJ0TS8wNmRPeGZ2MTZVRW94ZHV4WW5EaHhBcFJTMU5UVW9HdlhycUNVNHBkZmZzR0lFU01nc3N5MzNucnJ4cW1pNTg2ZHc0VUxGeVQxVTk3elU3U3BOUko4S3pHMTVPVGtSWVNRMmZnSGlKaXYyTFJwVXpBTUE2UFJpSkNRRUt4ZXZSb3JWcXhBYUdnb2NuSnlwQ2Q3WVdHaHBGNFNRdkR2Zi84YmdNdnpiTGZiTVgvK2ZQVHMyVlBLN3dSY3BXT2VmLzU1V0N3V0JBY0hvNktpQWp6UFM2eElQSjdjMXBPYm00dnk4bktNSERsU3N1RzFiZXVxZGpKNThtUVVGUlZoMkxCaFNFMU54YlJwMHhBUWNNbjhlZVRJRWFTa3BGeFYzQlBQODhqUHo4ZFRUejNsTVY0eCtWNnIxVXJxZVhCd3NGVEpwTEV4RkJRVW9HM2J0cEo2bnBhV0p0WGpGK1Y2cFFSZHZIaFJVcjJVU2lYYXRHbUR3c0pDcEtlblkrZk9uWEE0SEpnNmRTb09IandJcFZMcE1VZU5KWG43V2c4UkVSR1lPblVxVnExYWhjbVRKNk9tcGdiOSsvZS9xclhsM2g0WU4yNGM5dTdkKzhHSkV5ZnF2YlVyZDg0b0wrYVg4anhQV1pZVisvL0Jack5KYW1oNWVUbGlZMk5SWFYwTmxVb0ZoVUtCMDZkUFMrV2s1T3NvUHo4ZkZvdEZVcmNGUWZCWUUzTHpSV3BxcWtlMUYxOVNWbGJtMFNOVnBWTGRHR0RMejgvM0NXbytLblEwQ09rUWJXb3RXclQ0eDRDYVhJeEdJMWlXUlhCd01MWnMyUUtqMFlndnYzUlZKWDcwMFVlbC80dU9qa1pGUllXVUVMNW56eDUwNzk3ZDVTRmlHR3pldkJuejVzM0RlKys5SitVcnJsNjlHb21KaVZpeVpBa0FlS2cvVVZGUnFLeXM5TENmaVorM2JkdldaNFhadkx3OFBQend3M2oyMldkeDdOZ3hQUGpnZzlpMmJSdWlvcUl1ZTlNU1FqeXFzd0tBUXFGQWVIZzRQdnp3UTZrc2tpaWkrdTFMR2h0RFRFeU14dzFTVmxibUFmTFhVOFRmRXB2dWlML1Z2SGx6VkZaV0lqQXdFSU1HRGNMaXhZczlHcVpZTEJZY1AzNWNlaWhkYVQwQXJpVDhFU05HZ0dWWlRKczJ6Y091Nm10ZXZVV3RWai9RcGswYllkU29VZSsvK09LTGFBemNSQURpT0U0S0JSRWRBWVFRWEx4NEVkMjZkVU50YlMwVUNvWGtRRGgrL0RoNjkrNHRIVTljUTlIUjBkaTBhWk5QTzdCOHpPWGw1Y2pNekJUSEtqM0E1Q2FPcUtpb0J1cjhIdzVzSlNVbFV0TVZiNmJtYlZQekZkTHh6anZ2cU55T2dqbi9KRUI3NzczM01HWEtGS3hhdFFvalJveUFTcVZDYkd5c1ZBK3J1TGdZdTNidGtrcnNUSnMyVGZLazVlYm00cXV2dnNLR0RSdmdkRHFoVnF1UmtKQ0F0OTU2QzdmZmZqdmF0V3VIL3YzN0l5WW1CbHUzYnNXT0hUdHc0c1FKbkRselJyS3hUWm8wQ1FzWExzU0REejdva1lQWHQyOWZ2UExLSzNqMTFWZlJ2MzkvN05peEEwbEpTWmc4ZVRLT0hEbUNiZHUyWWM2Y09haXBxWUZhclphZXZtTGxpT1hMbHpjNDEvRHdjQ2dVQ256MTFWZG8wcVFKMnJWcmg1aVlHRHp3d0FPWU0yY081czJiaDdxNk9telpzZ1gvL2U5L0x6dHZqWTJoYTlldUlJVGc3YmZmUmtaR0JwWXRXOWFnU3NXMWVwczNiTmdBdTkwT2p1UHczWGZmSVRRMEZJTUdEY0w5OTkrUEpVdVc0TWtubjhUZXZYc1JGaGFHdExRMEVFSVFHQmlJdG0zYklqazVHVVZGUlI3OUFEWnYzb3podzRmN3ZObDlyUWZBMVUxcThPREIyTEJoQS9idDh5eUFtcFNVaE9MaVl2end3dzhJQ0FpUUFNSmJGQXJGUXdzWExuVHUzTG56L2YzNzl6ZXdpN3JmODRJZ1NIRnVsRkxpY0Rnb0lRVHlwdU42dlY0Q3R0VFVWTHo3N3J1SWpJeUV6V1pEY1hFeEFLQjE2OVpvM3J3NUZpMWFoUEhqeCtQWXNXT3dXQ3lZTzNldU5BOWR1M2FGeVdUQy92MzdzWGp4WWdCQTE2NWQ4Zm5ubjhQaGNPQ0hIMzZReHBlWm1Zbi8rNy8vdzN2dnZZZFdyVnBoelpvMVVDeGR1dlFQdXptcnFxcHd6dDJqUU43TTJHQXdlQlNJOUU2VGtzZXByVisvZmduRE1BditTYUQyeFJkZllOU29VVGg0OENCYXRHaUJ1WFBuUXFWU0lURXhFWW1KaWRpM2J4L2k0K014WWNJRVJFVkZJVEV4RWExYXRVSlNVcEtyRnBWU2lSZGVlRUh5TENvVUNuVHYzaDFCUVVIbzBhTUh6cHc1Zy9UMGRMUnIxdzRxbFFxSERoMUNXbG9haGc0ZGlvU0VCTVRFeENBakl3TldxeFZIamh4QnQyN2RjT2pRSVV5ZlBoMEtoUUszM1hZYmNuTnpjZlRvVWJScDB3WVRKa3dBd3pCSVQwOUhVRkFRZHU3Y0NZdkZnc1dMRjB1OUt0ZXRXNGNtVFpwSUhqcTVNQXlEWHIxNllkKytmYWlvcUVCYVdocENRME9saXJLaStqWnIxaXlKcVFRR0JuclU2WXFMaTBPTEZpMGFIUU1oQkNOSGprUjJkamFPSHorT2lSTW5ObWd5MHJKbFM4VEd4dnE4SmxGUlVRMDhkOXUzYjRmRllrRzNidDFnTUJqZ2REcVJucDZPOVBSMGhJV0ZZZnYyN1lpS2lzS3p6ejRybGZTSmlJaEF0MjdkRUIwZGplam9hR1JtWmtxZTZPZWVldzZQUC81NGd5ait4dGFEbkR3MGI5NGNBd1lNOE5oUHE5V2lZOGVPMkxObkQzUTZIVHAxNm9TQWdBQW9GQXAwNjlaTityK3dzREIwN05neDQ4NDc3N1MvOU5KTHAyV01UMFE0S3FxY2NpYW5WQ3FKNk5RS0NRbnhxS1JDS1VWa1pDU2FOV3VHRXlkT0lDa3BDVmxaV1VoTFM0TldxMFZXVmhhcXE2dHg4T0JCeE1iRzR0NTc3NVhVN2Q2OWV5TXZMdzlsWldWNDl0bG5KZTkxdDI3ZFVGcGFpcHljSEV5YU5BbXhzYkhvMnJXclZPcnE4T0hEcUtxcVFueDgvQitYSzZyVDZaQ2RuZTNCMXJ5ekNyekRPdVJ4YW1Md3JUdE96UzkrOGNzTkVMUFovTytRa0pEL0FiQzVLNE00QUxDUVZRWVJjMHVWU2lWMU0ySXE1cFdLU2ZNUkVSRlNYbWx5Y2pKU1VsS1FscFoydzVMbS94QlYxR2F6U1IzYUt5b3FVRnRiSzdYSHU1ejZ5Zk04NUdsU0RNTXM5aTgxdi9qbHhrbHdjUEJjblU1bmpZaUlXT2RtWmhUdVdEYXY5Q3ZxSW5YRWxhTkZDR1VZQmd6RGdCQUM4VytsVWdtVlNnVjNjajA2ZHV6NHUydmsvU25BUmluRitmUG5VVmhZNktGK3lxdDBpQjVRZVpGSXQ2dVdFUlBhM2JtZi9vd0N2L2pseGtwQWVIajRZMVZWVlphNHVMaXQxSlZjNm0xdmc3dUhndUIwT2tYUHFBaHlJSVJJZGpaeEV3Rk9vOUVnUFQzZFp4T1hteHJZNUtBbU5qSVdIUVVXaStXeWxXOEZRU0EybTIyWXUwcUhQL2ZUTDM3NWN5UW1KaVptWmtGQmdiRkZpeFlIdkpnYkJVQUZRUkM5bzVBQkdoR0xWNHFiSE5SRVlBc0lDSkNhS3Y4bGdLMndzQkFYTDE1RVdWbVpUMGVCM1c1dmtGVWdDK3RnVENaVE4zYzlOWC9wSWIvNDVVOFVRa2hLY25MeVE4ZVBIOWQzN3R3NXg4M2NSSldVaW4wUlJOWUdtWU5CVkVXOUdadFNxWVJhcllaYXJaYjZtdjVSY3QyOG9sVlZWWkpkcmJ5ODNLZGRyVEVQcUZqT096UTA5Q1ZDeUVEL3N2S0xYMjRLY0dzYUV4TVQycWxUcDlOZmYvMjF6UTFla3FjVVBtcTJ1VlZTOFcvNTU1Qi9Mb2EreUh0Y1hGZkdkajFhaDVuTlpwdzVjMFppYTJJT3FIZWJQSWZENGVFQkZkWFB1KzY2U3dIZ21mcjZlbjg1YjcvNDVlYVM0Wm1abVRVcEtTbXZYYmh3UVpBeE4xZjZnZnNQOXl2Y1dRbkVuVUlIK2VaME9xWE5YVFVFN2RxMSswUEFUZmw3YXo1UlNwR1hsNGZpNG1KVVZGUTBzS3MxVnRMYjdTd2dBSmhseTVZdGNEcWRONlR4aXRoVDBidnF4SlhFWXJFZ01GQUxRaGovVXZmTFA0MjUzYjExNjlicWxKU1V6OTA0SnNqQmpSQVJ4d1RLOHp6aE9JNjZhUnNWdmFSeUZkWGJZOXErZmZ2cjdreFFCZ1VGL3E0RDVPWGxvYmEyQm5xOURtYXpDVmFyQlhhN3BITEtLblE0aVJpZExQZUExdGJXVEhVN0MyNkk4THdUVGllUGF6MXZuVTZIeU1pSWErbzVhVEFZRVJJUzdET1MzQzkrK1N0SlVGRGduUHo4QzVXMzNKS3lGWUEzYzVQK1R4QUVnZWQ1T0oxT0tCUU00VGlPS3BWS2lhSFo3VFpZclJhWXpTYm85VHJVMXRhZ29xTDh1cmJ1QXdEbHRkeW8zbEpXVm9heXNuSlVWOWVndmw0SGc4RUlzN2xCandJM3VFbWdSdHhVbGRUVzF2UU5DQWg0Qmpld0xwenJhU0hndDV5M2FBQzlXakdaVEFnTEM4WHZtV08vK09VbUVXVjhmUHpEeDQ4ZnEremN1Y3N4WDh6Ti9Vb0VRUURQODVUam5HQVl6aXZrUXdtVlNnMjFXZ09OSmdCYWJTQ0Nnb0lSR2hyYUlDZjRkdzIyc1dxWFY1TFM4akljUDNzQk9uZEdnY0Z3S2FuZGJMYkFiTFdCdlFSc0lsc2p2Q0FRS2xDbXFLZ3dJU2dvYUQ2QWxCdExxeGtwenVaYVZXNTVjdThmdGM4ZklmcGplNkJvbG9HUXFCc1RGa2c1TzZ3MTlWQkdSRU9qVlFOd29tTHJKdGhzZ0twcEd5Umx0UGxiM09tL1pWNXRoVG13T0tNUm5STFh5SC9ZVWJYak1DSnY3UWVWbStnN2lrNmo3RmcrQUlMWVFhTVJITXBjeDdGRUlEb2w0V3AzdWFWMTY5YjNyMXk1c256YXRHbmxBTVJBWGZHVmlwNVNudWZoRHRxVlFrQXVlVWN0N3RBUHRic1RsaGJCd1VFSUN3dTdwcVl3anRKY0dJeGF4TFpMYW5CT3ltdFdrNmdWaXo3WWdQMUY1U0IxWlNpdnFVZlh1RkFvTFNaWUxHYVVsSldoc040TXd0a2dDRUNJRXNUcGRNTEpjY1RCT1FuZ3NxdTlrMnQrK3JuNCtDSGtUMWlRbE9LYTFVTXhQKzVhOXZzdCsvd1JVdkxaY2dSTi9neGh2UVAvOE4rcTIvWVpEci95SmJUTldzQlJWb0JtODk5Rm0vNUpVQVVFd25KdU44NGRxRUt6ekhaL0MyRDdMZk5xT0xBR2hmcE14S2FPYkl6bkkvKzl6eERZOTFabzNFU2ZVV3FnMWdiZzR0c3ZRSjErRzBMREc2Nm55dTgvUnNEdGFRaUw4UnhMd2Z0TG9lejFHSkk2UkRiWXgzemlSNVFZT2lNMk5mRmFOSjRCNDhhTks1dzJiZHBiTXRZbXlGZ2I0SXB6ZzFzbHBRekRFSVdDb1E2SEFrcWxheE16RWRUcVMyMytnb09EMGJGang2c21BcGJqbTNIMlZCTGkwNW8xT0tkckJ6YW8wVCt0RFhvMkRVRmhvUnE3OXBaaTd6a2R1a2NvWU5iWDRXS2RGWW5oZ2VEdFFFVjFIVEVybFZBSVRuQ3VDR1ZDQU1aU20vL1F5RGYyek16SlRFWEhHNXhiSURkaS9qWTFsdm5EOXdFRVVEQnc2cXZBMFNBRVJuaDZqU2dFRURDd1Y1VkQwSVFqTVB6U1lyWlhsWUpYaGlJb0t2VFNEcXdkb0FUT3Vtb0ltakFFaEhxbXREaU5kYkFaSFFpTWk0ZEM5ZHRCbUMvZGovMkxWNkxIMm8xbzBpd1VFR3l3MW5OZ0dBM2lCNDlBTUZPTy9BS0xqL2tRNEtpcEJzY3BFSlFRQTgrSEhROWJlUVVFVlRBQ1k4STl2cU1PSzh4VnRkREV4RUd0MWR4azgrcjduQWpQZ1RvRlVLc0JOZ3NRSEJmaE9UNW5EUHArK3htSWJJNjB6ZHFoZWJOMnFQeG9DWUNHYTVjNm5Xai8zQ29RWmNQUHphY09RTmxxT29nUURpaVYwamlvNEVUODdmTVFML3ZzMGpBNFdNc3J3RVRHSVNCUTAyQ3Q4RWJIZlZVVlZZVnhUZUxXQStCOXFhU0NJQWlFRU9wME9zRXdCQTRiSllRdzFLWEJLS0ZVdXRPc1ZHb0VhTlJRT096UUtMVUlEUTExMjlzRTJDckxRUU1pUGE0REFIQzZLbkFrQkVUZ1FKMjhOQi95YzFKZXF6ZWlvcUllYWs2UGtxcEsxTlhWZ3poWjJNd21XTlFxMU9vTUlBb0NjQzY3bW9KUWNDd0xFRXFvcTZZNnNWaE0vWlRPdXZrY28wU3drb0NRR3cxc2x3RHV0ekMyYTludnQrd0RBT2VmbVlpTHVTb3dTaVdFeW9zSXZuMGgrczRkN2ZyU2VBcnIreitEcEdFeHFEeWxBOHc2ZFBqa0p6UkxNdUxRZlZOUlo0MkV5bElHa2pZUnQ3NDZHeW9Hb0U0T2hXL05SN0ZLQVh2QkdjVFBYb0h1ZDdrS0VoYis1MUdjM0ZTQ2lPWVJNRjZvUThaM0d4RXJQZHdkT1Bua1RLZ0d6VUs3ckM1WFhocy9ySWVxK3dRa05IZXJFNHBBQk1ueVJ3Z1ZRSG5CYXo2cXNYUHdlTEF4TGFHQ0FTWmRLUHF1K2hDUk1ScFFVekgyVExrSDl0Q1dVQXM2MkJNR0l1dFZWMGsrL2U3UHNXZlJKd2h0bXdKNzJVVWtQL2tKMmcxc2ZwUE1hK1BuQklHSDhlZVYySDdnS3pDV01xRDFuUmo0eGl3b0FWU3UreTlPZmJrRCttTjFHSHhtTHlLOXNacmpBSGl1Si9ic3o5ajkvRWV3blA0VnJkL2VpN2EzTm5HcFpNYzJZZC9MWDhDU1V3SlM4RGpLUDlFaStyWkgwR1Z5UHdCbE9IRDNrOUFWbmtmSTdZdlIvK2xMcGRydHVYdXdlOVlpTUUxYWdTM01ROXhETDZIYlhYMTlyWldIOXh6SUx1elhLKzJZU3hXbEFrQUVVUzExdTBrSno3SncydTFVU1Fqc09oMzQ2SGczYTFPQzZNdFE5UXVMV3BVZFFlcGdYRlQraUlCM1hrQ2d2UXg1enp3SE5yUVpVSDhSUVVQbm92Y1Q0MEFnNE9KcnMzRnlZeUhDWWpYZ1dBZEltMlQzZkhpZTB6VUJtOVZxbGNJNmFtdnJvSyt2eHZIQ1NzUUZoN3JhYzluc0lMd0FvOUVHbzhOSkZGUUFGU2loREFoRHdJeGJzaUw4a1RVN242cXYweWRNR3o4WUtlby9ReEg5YmNEMmUvYTdaaERsblhCRzlzS29qNTRDTWVYaGg4enhxSmd5QWdueFNoZXZxRGtGUmVabWpGN2VFUUFMSjZ0RTFlbzNVYVhxaDlIZkw0YkNhY0N1SVpuSTJ6TU83UWNrQXJ3VHlyUXNESDV1Q3B6bGU3Rit3QkswR3JjTEVZSFZPUGZoWG1Uc09vV0VPQUJPRmp3amY5Z0lNSnc2QWsxNzNWV2RnK1hDQlFRbjkyejhmNmtBd2VrTmJCSG9zMzQ3MUNFdTZwNzN3aFNjK1dvWCtqNDJIT1lEUDZBK2JEREdmZUVxaE1tenJMUnY0ZWNmb05uVG42SFRHTmZUbldlRks0N3h4czFyNCtjRWdZY1Z5Umo3N1p0UUN3YnNITlFEK1lmdVFKdWVzV2d5Zmc2YWpCK0xIOXBNZEFPWTEvaWRIRUE5Z1UzVGJqQ0dmalVZUis3cUJ0QkxheTJ3NjJnTS9XbzBqdC9mRzZvNzMwTGEwR1Raa1JMUjU4dXZVUEwrWTdoUVQyWEhzK0xJWTNPUXNPQnJkQnpjR29McFBEYjNtNEg2TVhzUkZkSmdyVFJocVdMYXNtWC9MbGl3NEJtQlVnaUVRSURNWTBvcEJRVUV5aWlnMEFaUUZaekVYRnREdGFHQlVDanNJQ3dMYzEwMTRvZVBSR3lMSm9pTGprWnRSUVYyL3VkVkpJMThHY05uRFFHY091d1lPQUNsNDBhaXFmb1FqbjV5QVVNUGIwVjRrSURqOXc5R2xmU2c5RHluYTNMWEZSUVVvS3pNblFOYVg0dURKODdBb1FwQ3NzSUpzOWtPam1VaGNBS2MxRW5BUzRudEVBUVFRYURFa2R6cHlibjkydzJ0THptUFY3Y2Z3YWpVRVloVHdTOCtKTFpQTDFlbm5aQldpR2tEMUo4cVIwSzhlM0ZxVW5ITDZJNlNhVUNwQm5RblR5S3U3NU5RQUlBeURFMTZ0MGYxNmRQQUFKZjlKSzZucTRxcE1xRTdvcUl1b2o3ZmpvZ09rWWp2R1lrakQweEQ4cEIraUI4NERQSHQ1ZmFXUVBULzZkUWZmS1lNcWplK2c5enZkc05tdG9PdExrS0l1NXkwTnEwcm1GTVBZTmNjQitKNmRFWHl5SkVJVXJ2bnAyY3ZIUGpYTERqUGprQlVqMzVJSHREbEpwcFhaYVBuQkFCUm1abFFNd0NZTU1SM2I0WDY3R3lnNTAyUWNHUEtSWFcyRFlxOTMrRFlRWmRxVHAybDBCV1lFZFhSNTFvWk9IdjI3TE1MRmp6enNWc2w1YjNzYmRTTjBKVG5lVEFxQmdMbGljM09VcVZDQWNKeWNBWkdRQ0FzakVZak5Cb05BbXNLVUgrc0NIejBlaHlyL3dVVUFPdDBvRDZuQkJHcU0yRFNNaEFleEFCZ0VOKzNKNnJPTkxhcXJ0WlFXbEtDMHRKU1ZGZFhvYTZ1RmtkT25FS0pRNEhXb1VyWTdhNXFIVlFRSUhBY0dNSkF6UUM4UUFsQUNhV1VtZmI4ZjhaTkhkcm42WjdONHpHeWJ4KzA1d3F4cmREaVI3Qkc2Y1ZsdnRNRzRmZEZrQkQzbFZlaTgwZmIwSHZ4ZEtpNU11d2ZQeFI1eDJwKzgxR0RXamFIc2FENG12YXg3RitKZ3grZlJKZDMvb2VSVzdhZzYvMUQzZG9Nb0V6c2dkSDdma0xLa0U0dzdWcUZIMjUvREt4N3Y2WVB2SXdSWDY1QWVId0F6aSs1QjRmZTMzSFR6T3ZsenNublhvemlKbGwwQXFDS1JQeklMQ1JtWlNFcGF5UjZmTG9XVFc4SmJIU3RCQVlHemlvcEtlNExWeVVlRGFWVURWZjRsb0pTcXFBQVF5bDE5eXJsd1FQZ09CWXM2NENENDhCQmdOVnFoY2xraHNGZ1FGMmREanFPQWR1cUxVaVhMa2pLeWtLWE4vK0hsRjdYRmdweVZjQm1NcGs4ZW9BZVAzVUtaNHdVSGFJMFlPMDIyTzBPc0t3RENnQ1V0Uk9ISzJhTlVFRWdCR0NxcWtxVFFnUFZUeFRWR2x6VFp6ZWd4RUlRSE9DUDcycE1xdmNlY0JrclRIbW9PUWRFZHJ5OFN6NGl2UU9xOXU0RkR3Qk9BeXIyNXlCU1ZtRzI2dUJlbC9HMy9GZlU2Vm9ocWtVQUFCYXNSVUJVUmorMG0vY3NVdnJGd3BndjcrTE5JdWYvNXVEODlxdGpiUW1qeDRIZHR4cGxCUWIzZldLRnBkcHd5ZTBVR1FtMnJBUk91WG1qckF3QnJkSVJIaE1FQ0JhVS9iVDNrcUhhWkFMQzRwQTRhZ0s2djdZVXlwSnpzTHAzWmswbUJOM1NDU24zUG94T0Q5NEcvYm04bTJaZUwzZE9BRkMzYng5WXdYVzh5bC96RU5raDdlcmNkcEhoc0Z5aHNZbTNLRFVhc0hYMVYvZlBJVzBRMjlvR3F5a2NzZDI2SXJaYlY0UzNhQVpWRUhQWnRkSzBhZE43di9sbVRSTVIzQUJJNEFhQW9RTFB1T3h0VHNJVFFIQnloR1U1T0RnbldONEptODBWdE9zQ053NjBhU0RLQ3F0Z2l3aUh0blVxb2xxM2hEb2tFRUdkT29CbUg0YmVJZ0J3b25MdndjYlArMnJPMTVYWTdpNFlXVk9LQTNtVnNMRjI3Q20zUVdEdGdBQWtCQ25ocENBcXh0VzlCdFJWaDQ0Qm1LaW91SG1QanV6ZDdZRnZOK0xva1Jqb2EydVIwTEVuUmlScC9BaldpQ2hxRCtMSGNYZUFyNzZJMEFkZWNOdUJHcGY0T3g5SDNBOTM0b2NSSjZDeWxZR2tQWVJXL1MrcGxkekpMZGc2Y1N2c0JXZlFmTWxiY0RtYXFyRnIyRmp3Q2FsUW94NUc4eTBZT0ZRZWlzR2hjdE0zVU1jT1IrdkJIYTk4RXlYM1I3OS9UOEgrMi9zam9FVUxPRXFMa2ZMU2FuUVk2bkltYUxxTVJLdVdYMkY5dDk3UWRCbUIwUjhzUXRTZ1NWQy9kUmUyVER3S3hsYVBnT2hMRGdEendmL2g1OFZmSXFKTkM5Z0t6aUI2NWdLRXVhZmg3SUk3VUhSUmk1QVlOWFM1MWVqNndlTTN6YndLbHprbkFOQXF5dkhUN2VQQVdNckFkSG9NdDJSRUFkRGg0RDMzUUZmdmdORlFnUVBqUmtPcGJZRSthOStFMk1LNjlkejUyUG5ZT09RdkRVYjdsNzlFcTU0SnlGdnhLUEwyRk1HYVd3MVNjaThLWDlNaWJmbi9rTnpldFZmeVBROWoxeE9Qb095VEVNVGQrVFF5cGc5RzdkWjNjUGp0TFdBckw4TEIvWXJOKzFlaXlYMEwwWGw4VDNSNzgzWHNmbkFxU3Q1TGdaS3JoZG1TZ0NFL2ZZemd5NndWUWtqblVhTkczUUhndnpLVmxIZlRWSUZTU2dXbmt3b0FWU3JWY0RxZDREaU9FSjZubkVCaHQ5dmR3YnV1eWg5UlBRZWdhdnRLYkR6K0UzSWlBeEJsRFVQZkRkOGpKcjR2dWo3UUVqOFBHNDdRV0MxNHFuRTFEQVFhbkJPaEdtblFnUUFBSUFCSlJFRlVWTGlpQ2lvbXVKZVdpdVdJNnFEWEczeDFtWEludUhPRTV3VkNLVlhZN2JhSktwWHFmeTdyTDRkeWd3VWFiUkNpdEgrT2NhMjZ1aG9zeXlFeDhkcW9iWFoyRGxKVFcwbTE2LytvZlFEZzdGT2pZZW02RkIySEpZSVRnaEVVRlhUVis3ckNFa0lRRk5VdzBORlJVd2toSUJUYWtFQVA5Y05XV1FrblZBaU9qOEgxY09kUTFncHplVFZVTWZFSUNMcUtlQjZCaGFtNEV1cllCR2dDbFY1ZldXR3BySVVxSWhZQklaN0hZZzAxY0JnY0NFeEloRUo1azgzclpjNEpBSGhMSFd4bXhpdmM0MllSQWRieVVsQk5CSUtpUXE1NnJaU1ZsYzFOVEV6YUJjQUNWMmx4TzZXVUpZUnc3ckxpdkhkSmNhMVdpOERBUUFRRkJTRWtKQVRoNFdHSWpJeENiR3dzNGtJRDBheFpLM1R1bllua3BFdEJ1R3hkRlp4TU1BSWpnbjRiWTdOWUxDZ3RMVVZWbGJ5Mm1na1dpOVdkRDNvcGJjcnBsSEpCaVNDNGduQkxTMHZpVlNyVjNFdVBTeFVTSXNQaGw2c1RkVVFjMU5lNFQwQmM0OEdXbXBoNG45WUliWHpDZFIwM1VRY2k1RnBxYlRGcWhEUlBidVNyUUlRaysvNU9IUllEZGRoTk9xK1hPU2NBVUFSRklUam9abDE1REFJVGtxOTVyU1FrSkV6NzlOTlBjdTY3NzM0ZUFBOVFpYlhoVW9GS01aZVVLaFFLd3JJc2RXVWtLS0JTS1dHeHFLVE9Zb0dCV2hoWU84cEtTeEVWR1ltZ0lOZUVxYU91ZlAwdWEyTzcxSVRGMVRKUEJEVlhhVzhISEE0V0hPZVJNaVY2UWdtbGxNVEZ4VDBPb0tzZm9xNU5FbWY4SDFKdVRmRlBoSDllLzFKQ0NPbDB4eDEzVEhEYjJUU1VRdTVJWUVSY2tHVWxnT000d25Fc0hBNFdkcnNETnBzTkZvdlZuU1N2UjExZExTb3JLNlhXZlZkdFcyenNpOHJLU3EveTNpYVl6UmJZYkZZUHBzYXluRlJqU1JCNEtjSGRhclVNWlJobXJ2OXlYN3VFdE83bW53VC92UDRsSlRBdzhNSGMzUE5IVTFOYkh3YmdkREczUzdZMlNJbnlVcm9WV0phRFFzRktTZkkybXdwbXM5cWRKSzlEVUZBUVFrTkRFUkVSZ2ZqNCtLdmtuRDZFNHpndkZkUlZXODFtczhKbXM3dTlvS3hVMmx1dWdsSkt5YjMzVGxOb05KckgvWmZaTDM3NTUwbkxsaTJucEtTa3lEMmtLamVKWXVBTy94QUVNUVRFQ2FmVFNUaU9BOHVLck0wT204MEtzOWtNZzhHSSt2cDZWRlZWbzdTMEZGZGJQOUluc0xsQ082cmNLcWhCcXJObXM4bVpHdXZSQWRwZEpaTlFTcGtQUHZoZ05vQkIva3Q4N1ZKZFhZM1MwakwvUlBqbEx5c0toYUwvNGNPL2pCYUJqVktxRXNHTlVxcWdsREx1NnRseWxWVENGWWZEQlc2WDZyWVozQ3BwRlVwS1NuNGJzQmtNQm5mUGdocm9kSHFZVEs2MmVXTExQSG1OTmFlVEkvSXVVd0JJZlgxZHFrS2hlTXgvZWYzaWwzK3VSRVJFVE51eVpYT1NGN2hKc1cwQWlDQUlNdGJHU2F6TlZaRFM3cmEzV1dBeUdhSFQ2VkZiVzRQeThuSVlESVpyQnpaNWh5bFhlVzhMckZaUFVET2F6S2cxbUtBM1dXRmpPYm5EZ0JFNDY2eFhOdXhNWExCdUwvYVdtUzRkMkduSE43c1A0Y212dHVIZjIwK2d5a0g5Vi85Nmk5T0MydFBuWGNHa3YxTXFWcitBZys5dnUrNUQ1Q3QveFk3Wnl6M0dhRGkySGNlV3pNZSsyWE54NXJ1OUVIN1hMd2pRbjlpUDh4KytneE52cm9URDY3dXFyU3R4Y1Baak9QTEtoN0JhWmIva3JNTysrMmZDNUUrR3VWN1M5TlpiYjczZERXd2VRYnNpYS9OMEpIZ3lOeEhjckZZYnpHWUxqRWFYU2xwZFhZMnlxd2hTOWdDMnFxb3FWRlpXdWhMYzNYRnFMaFhVSnJPcjJXR3cyTUVRVnlFUHdja1JweXRtalZnTkZRTm5mN1Q1WVM0cUVTTmIvajk3NXgwZlJaMy8vK2ZNbHV4bTAzczJnU1FraEJZZ0dDRFNJUUtDb0tBQ0l2WUduT1c4czVldkRVODV6M0xxejNZcWxrTlJFYkZncEJjRlJLUUhDTTJRaFBSZU45dG5mbi9zSnRrVVVoQ1UwM2s5ekFPem01bjV6T2Z6bWZlODYrdHQ0S0gzdnVGQXZXc0xmNVQrSFV0emJNd2RNWWpnMmp4dVh2SHpyOXpBQ3RyQWRKUXQxejdhVkhiMHEyUmtYUm1XeXRxelBzVGpMejFMOE1VejhTd2l5dmxpSlg3REp4RTNZeFRaajk5TTVvYmNYM0dGS2pKZmVJWHF6RDFrdnZweGk3bW8zdncyUC96amE2TG5Yb2UyYUNPYjdudTF1Y0pLSFV6TUVDMEgzdCtnN0tPekJKMU9kME5tNXVIQkhscmI2YUtrTGJTMmx2NjJ4cW9FbDBsYVhsNUJjWEV4SlNVbFhSZHNoWVd1Wml6VjFWVXRURkNyMVlMTjFpallKUHk5dFlKV0ZCQUZCTkZWeGk4QVl1SEo3TnVQK01WeS82amVqRW0rZ0xrSkFpdjJGd0JXTmh3dTRkWkpJeGthRThIOFMwZGdQM2FVZzJabDhjOFdpcjVld3Y2WGx1S29POG5oeFl2WnYvaDVxaXFrUmlsRjFwdlBzLzJPTzluNzhoSWFURjE3cGNoMWhSeGEvQWpiNzMyRWdveDhUNmxIOWpzdnNmMk9POW45MHBLV21rK0hndmNJeDlhYWlKdmNwOFhIZzU5NWc0UkxKeEkxY1JhUktTR1lDb3QveFV3RU0vS2o1YVRlZncydEt6Q3pQMXhLN01LSDZURnFHSU1XUFlMOXUvOVM1bUhWUk0yK25PTC92b2RGZWVPZU5mVHUzZnRLV2dZUk5CN21hS1BXMWxSTDZobElzTm1zV0swdFRkTHE2aXJLeXNvb0xDenFtbURMeTNNVnVMZU9ncnBNVUZkYWgwZVQ0K2FBZ1N1Q0sxb3M1cm5IeTZ1bkowU0U0R3lvNTFTZGxjU0lFSTZYVmdGT0hKS01TdVcrbktoQ0pkZHpzdEt1clB4WmdrLy9ZWVNOR1lLb0NTSTRMWTJ3dExIbzlhNzVQdkgwQW83dXFTSCt0bHZSNUc5a3c5MHZka2xiTGxyeEdlb2gwNGlkRU1kUDE4eWp2TUlCT01pNGV3Ni9aRHBKV0RBZkgvTWVOdjcxMzEwNlg5M1BQMkJQSEk3ZmFiSXJpNWN0SWp1M0YvMHVIM1lPWnNoQzlkRTgvUHNuVW4veUdEYXZSQUlpeXFuSmFuYVhpQkVwQklsN0tjNnlLUnZxTEVHdFZsK2NuNTgzbXFiY3RtWmZXMk5ESnplZGVJdEFna3U0MmQzNWJXMmpwS1dsSmVUbDVYY3MyR3cyRzhYRnJsclE2dXBxdHduYTRCRUZQVTE2aDlNcHlMSXMzdkhRWXlxTlJ2TVhzODJHdDFiRnAydldjczJLbjlGcjFOVGFIWUEzSStLRFdQRmpCbVgxRGF6ZHVvOWNXY0JzZFNncmY1YmcyM3NReG1GSmlMb0FJbEpUTWFhbW92TUdLQ043NVM2U0huMmNpT1JrQmk1NkZPZTY1VlRVZDM1Ty82bFgwM2ZLS0tLbTMwYjhNQ2M1R3pLUVMzZHliS09Ub1l2dUlpZ3hrZmk3NzBYY3NZS3FoczdQVjN2eUpJYm9tSGEvYTlpL2dtMnY3U050K1JMOGZNOEZsYm9KbXhsVW1tSzJUQnhMWm5vdWFqMDQ2anpOQmg5OFluVFVaUlVyRytvc0lqSXljblpLU29yT3JiVzFDU1EwbXFYdHBYKzR0TGJHS0dtRDJ5U3Rwcnk4bk9MaUlteTI5bDlDYXBjSld0aWlINmlyL3JPeFpLcFpXMnRNeEhVNm5hNDJkcElrQ0lJZ3ZQTDBZL09CVkwxV1M0UEp5ZFhUTCtFU3A1cTlPemZqcDNIVmhONDJZd3JXdFR1NWZXa1dBL3YwWlh6UUNid1Zkbzl6RDBjMURkWCtlSWU1MVNUdlVQUysxVmdxZ1U3NjFCbzhraUgxeGtqS0s4dHhsTlppdFJTeTY5WWJtOVI5cjZRa3NBS2RVUC9MT09BME5Pa1ZPN1lSY1BGc0FrUFBGVmU4QWEwZW5QWUlKdjYwRDAxSUVEOHNCcld2dnUyZlNrNWwzNXhGaUtJNGJNMmExWk5EUThPK0JlenVId2R1V25GY3lidUN1eTlwazV6eDFOcTBXbGNnUWFkekJSS3FxaHBOMGtKaTJ5bmZVNXZONWlZNklsY3RxR2VUNDViNWFnNkhRM0FMTmNIdWNBbTFqQVA3L1ZRcTFYeUFQcUdCL0hLMEhORnJNS0hBOGVKeUVudTRPaEpwdlFPNDUvS0wzUzZhUWlaczgrWCtVSVZsOHV6dUlBRkJjcmFrSEZNSDRCMVFRME9wRGVLMFlDckRYQmVBTHFnTE9vNkhyOHRjV0lSK3NCRjFtQUV2UXp5alB2NFVRemZmUzM2UmNaZzN0SitIRkRUeFdwSnNvZTBia1NYNTRCMkl6dmZYRkZmcUNPamZnNXJNNCtndUdBYW1ES3BMd3hnUTc5dkNYRzBvTUJFU0Y5bnVHSnhhZnd5QnZzbytPeFBQWjNEdzdFY2VlZmo3WjU5ZGJBUHNzaXc3M0F3Z1RyZlcxcUoxbjlzeWxKdWpwRFozbExUUkpLMmhvc0lWU0FnUEQwZXZiL21DRXB2b2lLb2EyK2MxZURROHRqYldndUp3TlByV0hOaHNEZ0FCV1JiMjFEaHVYYmIvVkgrQTJMNTk2VmVidy9QYlQ3QmwvMTQrelpLWmxld3FIaTQ2bGN0SGUwNnc2ZUF4L3I1MEU0TXVIRXFjSXRmT3NsSVNnNi82QkpudmZVSGV1ZzAwbUFCQ2liMWlHSWVlK1FmRkdmczUrTVJpVkpQbkVPelQrZWxxMW43TTBUWGJLZmoySGJMMmFPZzVzVDlDV0NwOXh0cjQ4ZjduS2Q2ZlFkSG1OZXgrNFowdXBaajRqUmlKa0xrSFV6c2VpTXBOS3ptK2VuZTd4KzI1ZGd6YlgxN1Y1V2tvK3ZZampueStBYWU5bkt3UFBpUjcreUVBZWwxM1BUbHZQRVB1OXpzNThQaXphS1pjUzZoSEViMWNjWUJ5MHlBaStyVFZHZy9jTVlYdm4xMnU3TEV6aENBSWZlKzc3NzVKdEsxRzhFejlhSkcwNjNBMCt2V2JUVktMeFZWTFdsZFg1ODV0SzI4M2tLQ2FPL2Nxajl5MUttcHJhOXBwZW16RlpuT0ZZcDBPUnhON3h5UHZmUmFrOXZaNTNTcHFnNFpIQjRIS2k3UitVUnc0bGtWR3BaTTdMeDNITUhlZlE2Zk53cGJNYlBhWDFESXdhVEFQaklubjkrQU5OWmxNT0owU2ZuNSszVHF1dExTTTRPRGdidlVJUFpOanpuUjhydDNqalhIU2haaU9IcVFodndqRHdBdlJld3NFajVtTXF1d3dlYXUzSU1hT1pQaWpmMEhiaFg0VHdlTW1ZenV3bHBMTVdnWSsvVS9DWS93QWtmQXBNMUNWSGlRdmZRTzFoYlVFanh4TFVGeGs1NVJIK2tqc0dVdXA4UjVEV0srV0xDK1N0UUYxV0N4QmNhMXFBYVZpRHYvemJZeDNQRVpZYk5lWVlhcCsya1JEclphdzRRTVJHa3lJZmowSjdtMUVGM2NCSVZGMlRxV3ZSWWdlemZCSEZxRFZOSSs2NkpQWGFPZzFuY1F4N2ZjOTlSc3dqT0Q0U0VWS25hbk9yTk1aTlJyTitrMmJObHR4MTQ4MlVva0xndERZV2Q2ems1d2dpZ0tpcUhML2lPNE9WeXAzbHlzMVdxMFduYzZMb0tDZ0Z2Umd3amZmZk8zUnk2QlJ1Tlc2bVR3YWszUE5XQ3lOWEdzT3dlbDBpcklzaXphYjlWNlZTdlhzLzlMa251OThiR2M2dnY4VjJMSTJzUEhwSDVuOHdlTmRlckhaTXI1ZzFTTS9NK1BiNXppbkhsbEhCVnV1K0F1RFB2eVVvRUJSa1VMbkNOWFYxZjhLREF4YWlZdXp6U1FJUWdNdUQ2MU5FQVNISUFpU1NxV1NHam5iZERvdldhZlQ0KzJ0eDJBdzRPUGppNStmSDBGQmdZU0doaEVWWlNRdUxvNysvZnNUSHgvZmJJcDZCZ3pjWkpHTkdocDJ1OE90RWpvRmQzcEhVK25VbmoyN2ZWVXExYzNLVWlub0RyVHhFNW5hUmFFR29FMmF3ZVZmTGVhY2g1blV3WXovWnJraTFNNHgvUDM5cjd6Ly92dDhHODFSZDRSVVJhdFNLM2R1R3c2SEsxSnF0enV3MmV3ZVVWSlhibHRqSUtHMHRKU0dodWJRdk9ncWNxOXZaWHEyekZscmoydHQ0TUNCTndJS3VaV0Njd3RSamFoV2hNMGZ5TmNXLytDREQwNXdDN1oyZlcydE9kdmE1clpaV3dRU1hFWHlya0JDMDdacFdlVGVtSy9XTmhMcVp1NFFBT0c2NjY1VnFWU3FHNVJsVXFCQVFYY1JGQlEwbzFldlh0cDJ0RGF4VVd2enFFaG95cDF0RGlSNGtsSTJGc203MGo4c0ZvdExzTG0wTlZlUmV6dEN6Wk9TcUVsYmUvZmRkNjhEQmlwTGRQYmhJdFZUVWdvVS9LRzF0Z0hidG0wZDB4V3RyWDNOclZHNE5SYkp0MHovQUJCYnBuZllXdmpXbkU2bk8yK3RtUmtYRU5WcTlYWEs4cHhMd2VhblRJU0NQelRDdzhPbnVRVmFvOWFtcGhVWlpXTTFRcU1NYXVscnM1MDIvY1BoY0tCdXJBZHQxTllhODlXYUt3eWFmR3U0S2IrbkFxT3JhMnVwc1l0RUJmclFyZ3ZFS1lPcWRRS0FrNktxT2d6ZXZ2aDVxWlRWUFEySzEzeEtWYkVWTWFRWGZhYVA2ZEl4dHZ3amxCU0s5QmplcDh2WHNSY2ZJV3ZOejhoQStNUXJDSW8rVjVxaWhPUm9XMDBxcU5WbnBTdFdpeXRWNVpLenQ0eGVGM1dEQnJ3dW4yTmZiRVFDQWxNdkpxSmYxK2luSzdhdlJ0VjdIQUZoM2wyK1ZNWFdkRXF6eWhGMDRjVFBuY0xaU3VXVUdpb28zTElOcTBuRWVPbWw2SFcvM1g0MW5kaE5yVFdVeUtTWUxoOGppdUtJNDhlUEpic3B4QnVMNCsxdXJjM3BOa2ViTkRhbjA0bkRac0ZVWDQ5VHE0WFFTTHk4dkZyVmtUWnFiU1dJcm5yUTVnb0REMjJ0VGNBQUVMUnEyOVYzL2ZzRHByMzFMWC8vNkV0R3Y3U0NIYVdOOVhaV252dm9DMFkrOVI4U0ZpM0hzMFRWWWFwZy9pc2ZzZUN6elZ6NjRsSStQRkttU0xEVFFPVmxRRk56aEQydmZON2xZeHIyZmN1K0Q5WjJ6eVFRdFdnTUJvby9lWkhDektwemRqK24zbm1ZbFNsRFdabVN6Q2ZHYUQ0Zk1wU1ZLVVBaK01SSHYrcTgrUjh0NXNpR0l5MWZuUVc3K1BtRi8zYnZSS0lhamNGQTVkb1B5Zjd4ZUpjUHkzN2pNWW9PVlhmdlVsNTZ0R0k1KzU5Nm5iTlhhdTlnOTAyWDhNdW1RNWhMeTVIT0lUdkp3WWR1b3JpdzVRVXFOeTBqODh0ZDNUNVhiR3pzUkU5enRGV0VWR2dkU0hBNm5UaGxHV3QxT2ZXVmRVMFZDV2F6cFVscmM5V1JsaUUyVWhKNUNqVjNoWUZuMEFCWmxvWHE2cXFCZ2tvN2U4R3NtV3gvWUI0cjc3Nk9CL3A3c1dqRHdjWkhrc2tqTDJUVmdvdG8vZTVmOWYyUDFQVWN6RGNMTDJmbE5VTjUrYXZ0VkNqME1PMGlkTUtsOUpxY2VucnRyS0tFMmxPRk9OdVpQMmRESFhYNXBiU2g4WlJzbUU3bFlERlptajVTaDhVVFAzc1dnVkcrcDMxZ0d2SlBVVjlTeGEraEJlMTUyM1BNT3JDZldRZFc0ZWNkeUtpMSs1bDFZRDhUbjdxMmVYaVNTN016NWVkZ3FiTjBycUU0SEppT0hhRG1WRG1TdzBHYjlyaVNqYnFjZk95Mkxtd3lRd1M5WnM4aU5QRTByZVVjTmt6NXB6QlZ0TS9jYWkwdHhGelQwTTVhMUZDYms5OWluUUtIcHhFLzR5Sk9GK2lWTENacWMzS3dObGk2T0xzU2tpT2ZzbjBpU1lzZXBQOWZic0Rnb1VBNlRSWFVuY3B2ZDYvSUFBNExkVGs1WFpvbnllR2dldWNXVERVMjE1eTN1L2VLMnpLOXVLOWhiV2haY3FMUmFDN2J1SEZERHcrTnJja2NiZksxdVZzT3VJUWFndWp0RFJvVkRtZGpMYWtIdFZGZERhVTUyUlJrNTZIMlRPOW9McHR5NG5SS1NGS3p4Z2FJQm9QaEtoQko4dWpnM2pQSUgwdEpJLzJRbWlHOW9xQW1wODBVN3NncVpNSkZZd0VJanVsRlA4ZFdkcFk1dVNSY01VbTdZOUx0dkdvTVplWkl2SDBscXJNYlNIMy9FNkw2dUpydTJnNnZaczJzeldpb3dxd2Z4dVJQbmtldkJmT3hMV3llL3lBcVl5TFc3T05FM1A0dmhsOC9yc01yeVhXNWJKazlENHR2TDdSeUpaYW9TVXg3cGJrL2orM1lKcll1V2s3eUcyOFI3UDhyNytySWwzeXk0SE1TZXRWUlZpUmhyM0l3ZXYxYUxKL2V3L0hTa1Z6MDJDekF3cGFSL1lqOU9Kc1l6UTdXL2UxRkxDY09ZamM4UmZWM0FSaEd6bUhNUFhQYzVtZ1dXNjZiaTYydW51cFNQeWF2WDBIQUdWclo5aFByV0hYTjAvajI3b1ZVZmhJcGJqb1h2ZkVnV3JkZ3luNzFYbkxWS2l6Wm1VVGUvUktwMTQ4SEpFNjk4d2k3bC95RWYzd1F0ZmwyUm42NGpQRFlqZ2RSdmZsOU5qLzRMdjc5RTdBVVpCSHo0RklHVEl6cjhKaTg5LzdCNFc5MlVsdFR4RS96NXFKV0J6RHMvWGNKOW9XQzl4N2hwemUyRVJBWFNIV3VqWkdmZlVwa25HdXhDcGZjejRHZEVtTDJMcHdhYjZ6K3ljejg1SituZFEyVXIvc1B1OTllUTEyMm1ZcDdydWFFUVVYUCtVL1JmL0lBQU16N3ZtYjl0Y3VSS241QjZuTU5VOSsrRnhWUXZXTTVQOXo5UFBvK2ZURWQrNFhFZjd6YmRBekE4T0dwWTRGVGJxM05CcklOQkJXeTdKUmxXWlJBbHB4T1dSQkUxR3FYNWlaTE1vTGtiSkgrMFZCeWdyMHJ2aVF5MmtpSjFJQzZ0Vyt0MFZIbjB0YWFUZEJ2di8xV0o0cmlWUzFYM2NSN083T1lNK215VHJhSGxiSTZCeVA4UkY3NGJBM0pvMGNSN2dObHRXWUk5MUhrVmRjTkdZYTh1d2F0citzQktmcmdFZmEvczVLb0YyNXh6WEsxbHFscnY4U2dzN0g3cWxGa2ZyMmZsTm1KN1A3cjM0aCs3RE1HVGV5RFZIZU03OGJlU3NYbFd3bnU0RG1yMzU1T1ZmQVVydmo0TWRmYnVCVTlqTE91bElyOWg3Q2RKWHRLUHJHSHdCYzJrenJjQ0E0TFRxRHdkQ1owOUFpbXJGakI4U2ZtVWhYM2QxSnZiS25kU3FVbUJxNzltbUIva2QxWERTZjMreXdDcHNlZm1Wc2dhZ1NYL3JnVmpSckF3cllwUThuZFBaL2V3MTB2RSszZ1M1bjQxRHdjaFZ2NWFzSmpKTTdhZ2lGN05Udi9jNHlMTjIvQ3oxZWsvSXRuK09uNTk1bitlc2V0UUxLWHZrdmNveCtRUEtNM0lPSHNnaGJWNCtiSDZYSHpLVllsWE0zSUZTc0lhc3hrcnN2ZzUzK3VaL1MycllTSDZjaC8vVzUyUGZjK2w3M1YvSEtxMm5tVVN6YXRJeUJZaDlOaTZkRGZHVEo1QVZNbUwyRHJoRGlpWHYyY1hyMWJwa3liSFVZdS8rWTUxSlljMGdmTnBLemlYaUo4QzlsNSt6OUlXcnFSWGttaDJQTzM4UFhNcDRpYnVCdzNWU0ErUG9acDgrYk5XN0ZzMlRLcnl4eEZJeURiWlJBRndmV2Y0Q0t6eGVsMHlrNm5VNUFsV1JhY1RuY3RxYnNCakNHQTZObXppSXdNcDJmUENOU05VVkNYR2VyMFNQRm82VitiT0hIaWJLQzV6N3hrNS9VdlZ1TklTR1ZCLytDdWVuVXc2RFJvUkVHUlVXZUltdTByeWZ3NEhWTkZIWTdxRXFTK3plOGFROHBvRERvQUxTR2poM0g4d0NHWUFxV0h6S2kyZnM3ZUhTQWpJVHZ5cWNxdUozalE2VjhxK3FRVXhJemIySEszbGZEVUZIcE9tNGJCb3pKTVAzUXVjdzdQUFhzM0ZuTWh2WWE3VFVHMTdsZlZFYXZpa3dqMmR6MTRodWhJNnFxcnovaGNnbWpoeFBPTHlkOTVBTHRWd3B4VFMwQmxEZUFTYk9FalJybUdiQnhHY1BCSktyTXNtSGR2QTIvSWV2bFpWd3YweWhQVUhQVEM2WFllblE1aEkwYnk0ek4zNERoeUNjR3BZK2s1NFlJekhyZmxXQWJtcUdHRWhibWlDQkZqeDFDN05MM0ZHQUltemlUQVhjdXQwdjI2YUVOZ3loQlhkWWd1QWtOSURaWmFjSmJ2b3J6R2k2QXYvMFBWbDRCa1Jxek1wS1lLOU0waUkvcjU1LytWdW16WnNzMk41cWpzTWtjZElEdGxHY25sYjVOa1NYSzIwdGc4b3FSYU04VS9iYUdpcHA0Q2pSZnFSaFBVNld5ZDR0R2NrQXVJYXJWcWxzZjdtazlYcldhckdNZjdVL3ZUZVY2NEY2Rythc3BxbmZ4bHhrVkFBLytwaDFBL3ZTS3BPclk4VzdvcVRxNWp5NlBMR2ZmRmZ3bUxEYWJxNnhmWjhyV3RJd1hQZFJKTkVCSFRwdUxqWHFnZVU2ZmpHKy9kNGJYVTBhbGN1bTA5UlZ1M1V2ak5VdExmV2N2TXpXK2hQVWUzS3VvTnA5bEhVdE8vY2hkNVNRVlBCMVkzaWhiYWU5MW12L29RK2FVcGpGMjJDSjIzbXQzWERVT1c1Tk9md1gwOXI1akJSRTJkNnY1OEtqMXZEbWd4bFBhdUZYWGI4MXlTdHAraXJUOXg3TEhyS2J6dVZVWXRTRHRuMjB2cmMvYWVQMEU4VGRHYmZ6UlJVNmMybGNUMW1EYTdqVnNnTEN3c0Rkald5dGZtbWJBcnUxSS9YSlJHc293Z09KMnlTMmE1M0doVm1ZZEJOakpnU2hyUlBZeUl6Y200enZiU081QmxXYWlxcWt3U0JPSGlSbjlaK3ZyMWZGWVh3anRYcGpTcGxKMXRtWkdKUmpZZnl3YWdMUGNreDlTUnBJWXEvclhUemxod0NPcnlYRXdlY3N0ZVZJUWMyWmZnMkdEQVFkNjZsbzFIVEh1MlVXOEJzRkcrYlJlaEF3ZUJiMS9DK3BocHFBc2diR2dLWVVOVENJaUxRV05vWGpodFNBaDFCUzBicURqcTZzQS9uT2pwc3hqMjBwT284NDdpNmZ1MVpXMWwrMTBQVTFsMzd1YkFLeUNBQmpmOXM3UDRBSlZGTGNtUjFIb0Rsc3J5cy9lZ2h3UmhPdFdTYnJxaG9JQ0FJY1BRZWF0eFZoeWlhR2RMUHJtU0hWdGQ4MVc0aTRxcTNnVEg2UWdaUGhwcjFpSDAvWVkwemJtZk1haFptQm1DMERxS01WVzFsTlMydWpvTThja2szTGlRNVBtWFVYMzB4Qm5maTY3UElIUUZ1eWd0ZFFVaGluL1lpbC95NEYvTnFLUDIxV01yNzFvRVhSVTNqQkJ5c1JwaW0rY2hMZ3BOcTdlaldxMU8yN0JoZlk5MkJKdXEwV0pzbEVlU0pDRUw0TERaV25TMnNwZ2FFUHo5Y1RpdDFKZG5vMjRVYW0yckRKcUNCb0tQajgvbHpjWjBDWXMzWlZHcjh5THRXVmVvWFJ2YWkrMExKd0R3NU5zZmtGNXNvODdtWU1haUpTUU5Ic2FITXdZeGZjd292bnRuRlplOWVaS2FxbHIrZXZrMGdwVVN3Tk1MdHJBUkRKNFp3dW9MUjZBMnBuRHh0NitoSHpZVkkyK3pldVpjdEdJZHVxQ1Fsb0lnU09LSFdaZWpwZ3FMNzBRbXp4Z0V3TkJYWCtiNytkZVM5MVlDYW5zNTlTWWprOVl2YVNMUTdYWExQV3k2K1Q2K2ZGOUgzTjlmSlBuS29kVHYrSWlOLy9jSmdYM2pNR2RuRW5MN1EvaDd2SlNkNVNmSi91d3JZaDViVE5BNVNuOExtWGdGcW4vT0lYM21UNmo5SXRHRnROUnpqSmRmejlGYkgrS2IxYS9nTi81NnhqOTY3YSs2WHZUY0JaeVlONStWSTk4azRwcUhHSG5ITkdLdXVaWDFDeFpRdDNFZ2xoclFKN1JrWGJFZldNMmEyV3V3WkdjUys5ai9JOEFiR0RDVjFKdTJzMzdDT1B6N3hXSStsWTNmcFE4eTlwNUwzVTl5VHdiZmR4RmIwMGFnOG90aFRQb0tnbjNneUVOenlEMnB4emRVUzlYeFVsTGUvdHVaMzR6dklGSWZ1cGp0MHlmakh4OU1kYmFOa1o4cyt0VnJrbkRUUXJiZlBaTmYvQTNFM1AwU0E2Y25kZkNtTUpMNjJrTnN2V2tLSitMN0lsZVZZZ2xLWmZwSGk5b0kyR0hEaHFVQ3VaN0NUWlpsdStDS2tFcXlJTGpOVVFtVmx3N0pWRTlWdGdsYllEamFXQzkwNFVacU0zOGlxL3drSllJT1lmRGd3ZTcrQm1Zc0ZvdGd0VnF4MisyQ3crRVEzQ0ZYbGRQcDJBUDBQeHUyVlVsVlBYcURBVC90NzZPdG5lKzBSWjNEZ1NrL0gxVmdCRHBEVzcrSXM2R09obG9MUGhHaHJjd2RpWWJDZkdTdlFBekJYWk5Fa3EwQlUzRTVtc0F3ZEw2NjMyVzlaSnVKK3RJNnZLTWorTDMwZTJkREhRMmxOWGozakViVnpzdllXbGFNcFBORDc5dlN2SmNzSmt5bEZYaUZSYURWZFcwUDJHcktzTlpZOFRaR296b0xsQ1pPVXcwTkZTYThvNDN0anYyM2NhbllNT1VYSS9xSG9QZHZQNWxabHVXam9xaTZBNmdINm5CUkdwa0JpNEJnRjBUQktRaUNwRmFyWlkxR0kzdDVlYUhUNldTOVhvKzN0N2VMMHNoYmo0OVdUMWpQSGk2TnJka0ViZGJZY0NmSW1VejFhV2RIcUxrY0h1R0JTcm5RcnpRR01FVEhubDc5OS9iRjE5dTMzYm4zTnZiczNtcHB2Zkh0MmZOM3ZWdEJhOEEzMnZDN2prSGw3WXR2QjZrYVhxSHRWeXFJT2dPK1BiczNkcTEvS0ZyL3N6aDJneisrQnYvZmQ4dUtXZ3lkN0NOQkVQb2VQSmpSZCtEQVFmdmJtS1BJVG1Ra1FSQUVTWEpwYlkyQkJNODZVb2NrSTJuVjJHd1d4TWJHTE0yNWE4MytOVUR3OHZLNlRCRW1DaFFvT05lSWo0OGYwY29VYmMzNFFYT1psWVNuN1BJc2tMZGFiWWdldmpYQjdWc1RQQngyb2lBSTA1VXBWNkJBd2JtR1hxOVBvN242b04wV2ZhNGZxWkg1UTJpaHNUVjF0ckkxYW15U1IrREFwYWtCZ3RuY01CV0lVcVpjZ1FJRnZ3R01SNDhlR1VqTDhxcEd4by9HMUROQmtqeUw0NXMxdDJiMmp5YkIxb1p6emVYZTBHcW5LblA5MjZLMHRKVDgvQUpsSWhUOEtSRVRFelBNVTJOem02T3FWdVpvQzY0Mk40VjRDNjFOZEFjTW1sUzd4Z1BkWnFnaTJCUW9VUENiUWFmVGpXK2xyYlZuanJhUVdhMERDWGE3SGRIVERHM1UxQUNob2NFMG9YMHoxTW5Pak1Nc1dybUJlNWR2NHYxOXVSNzBLekpaZVhsOHVtMHZyMjQ4U0szSFVRNXJBOXNQSGVldGpUdFpubG1pck9CdmlFUDNYY0dKSGNYbndVZ2tmcjU2UEFXbi9qaHpheXZOcGJxdzRneVBybVBiWlpkUzJxWERiVlJsSE1KK0ZoaHhhamN0WWNNVFM4L3FQTWdORlpRZXlXM3orYy9YakNVdnAzdm1hRWJHZ1Q0ZVdsc0xqYTN4cHlWWG05UW1RaXEyTWtQeE1FTW50cjgzNi9ocWJ5RjlZbVBFelJLVUFBQWdBRWxFUVZTNHRIOFVtN2RzNFBFZkdrZHU1cjMxZXpoU1hNSmJQMlMyRUd5bGVUbThzemViL2IrYzVJdGppbUQ3TFdFdEs4QnV0cDBISXhHSm5yY1F2OEEva090ZzFTdnNXYkwrakFXOXBTQVBSMWU2VFZQT2pxdHZwTnA4Rmw0dnBrb2F5czR1LzU2VSt3TWIvdnBpbTg4dGVUblk3ZDA3VjY5ZXZaSTlOYmJUbUtONG1xUE5XcHRMc0ttYm82R05UQjR1TTFRVXhmWUZteGpBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JuU3pHYzBKOFBFdnF6ZXNOYVBxaFRoTTI1UVBYT2RJNHZYNDhkRFFFanA5SC95dkZOU2JxMjRxUHNlK3gxekZaZkV2OTJOeUZHWDhCQzNySVBLZHA3Rkx0ZFRmQ2tXZlNabm9vQVZQK2NUbVdsbm9ZOUc2aXBGSW03NlhhTVNlNGlkVWNkMmUrL1ErSCtrM2pGRDZIL3dwdnc5dTQ0KzlOMDZBZE9yTm9Pb2hidjBhMEViODUrTXBkOGdxbmFpaUYrQ0gwWDN0QTVBK3hweGxDemR3MUZCZjcwdlhRRUFKV2JWMUlsSlJKL1VSSmw2ejZpUVcya2NuTTZGbWN3Q2ZQdklEVFczLzJ3bDNMOG5YZW95Q3JCa0RTTy9yZGNpVmJkcUkyVWNlSzk5eWc3VW9CWHowUVNicjZWQVA5cU1sOStuNG85R2RUVmxiRi9jVFpDWkRLRGIzUjVieHdWV1J4OTkwT3FUOVVTTVBZeStsMlY1azR3dHBIMzBWdWMybm1TZ0xUSmRFVUJxL3grQmFkKzNJL1pWTU9KRnhaVG9CV0puTE9ROEhoLzEvbVd2VXZlanFPb2pRa2t6cC9mVk5qZXNRSll6YkdYbjZVOHU0cklXVGZUYTB5L0pzMHcvL1AzeVB2aEVLcUlSQklYZG42KzNBOWVvdkxnQWVUaVhQWXRYb3lnQ3FUMzN4WTJrU2FZVCt4azk1SlBzWHRGTStDZXUvRnpsN0JZOGpNNDlzN0gxRlU3Q0oxNk5ZbFRoaUlBM3Q3ZUk0RFBXcHVpamVZb3NpUTVKVW5BNlVRbHFtVkpJd2xPdTAwMjFkUmdreVFzWHQ2SWpWTFBuWlNMTENOVVZsYjBwNHZOV282VWxwTm9ERkdreXU4TXVXUW5HK1kvVCtqTWErbHozUlVJNXBvV1JJQW5sMzlGNkNXekNkQmxzL1hCMTVwTW9acENPMUd6cjZQM3ZHa1V2WEk3QjljY0E2Qm1Wem83L3ZZNG1wUnB4RTdvd1k2cnI2V2lSZ0ljWk53OWgxOHluU1FzbUkrUGVROGIvL3J2VGg5UVRYZ3NZV21qS2ZuOFZWcVNiVFN3ODZicmNmYTVtSDd6YjhRL1FNTGE2UnYrOUdQdzZ6dUl3bGZ2NDhUdVFteFpXL25oNGY4UU1DalJwZk9zLzR3ZEQ3eEk0T1M1R0JNZGJMbjJUc3dPbHhXeTg1b1psSm1NSk41Mkl4ejlqQitlVzk1a29mdzA3eklLQ24xSnVHMCs0YjI4cU0ydEJMVXZ3ZVBTOEU4TVF4dmRsN0MwTk1LSEpycHZLWjh0TStmUUVKQkNuOXV1b3Y3Ylo5bjl3WFlBU2o1OWxsMmZIaUx1cGhzUjlxMmtyTER6eW41ZDNFREMwbEpSYTcwSUhKTkdXTnA0ZklKY25JaUZTeDVqMTZjWnhONTBNd0dhazZ5ZmQxK1htSG5yMW4xS1ErU0Z4TThjeWFFN3J5TDNtSXRFTSt1NXY3Qi9WVGF4Tjgwbk5LeVV6ZGM5MU9uNS9JZU9JV1JZRXZoR0VKNldSdGk0QzkwMFR5NnROR2RGT3NaWjE2QXQzY0pQenk5ek9iUks5N051NWkySWd5YlJaOTVsRkw1OEI0YzNaUUd1WmkrclYzOFgyWjZmRFZrV1pBUkJFQVFRYUhLak9lMVduS2pSQkllaURkQ2hibDN3anFzMmRIeFhIcVpUMllkNTg3Q1RkKzdzcDBpVzM5dDcxVkNKdzZGSGI0d21KRDZDa09TVzM4ZGRkeWZSSS9valIxMU54dVVmWUFPMGhETGdyemRSc1g4LzVtb2Ivb1BpS045MUVLYTQraVlFWEh3TmZhYU1Ba1lSdCtJOWNqY2RJMmhVSmNjMk9wbTQ2eTU4TkJCMDk3MWtwVjVMVmNPOUJIZEEvYThON1lreDFNZ3ZiVFE3SzVacUs0RmhZUVFNU0NKNFlITG5RcngwWndkak1ETHl0YWRaYzh0dDVCaHE2ZnZpUndTSE5wY3pSYzViU095WVlUQm1NTGtmRGlCL2J4VXg2dlhrbHZkbjVyMVhvd0w4NzcyRHIyZThqdVhST1lnWnE4a3BUdURLcjI1M01ac2tOOWRHaHFlbVlqOFVRWmsySG1OcU15ZGMxZnJsMUJpbk1mNkdpNUdCUVhmZHlLcEZYekg4eGxIa3JsaEo3NzkramZHQ09Jejk3K2ZFaDFkMmVyL2VQZnZnM2RNWGpVWkhTR29xb1labW9aRzk0aXY2UHZROXhnc2lJUGtKY3BaZVFNR0psNGpyM1hFSmwrYUNTMG0rS2cwQjZEZnpNM0xUZnlBbWZqQkhsdXdpZWRPUGhJYW9rZnZmVCs3U0VSUmxPWWlKUDMxOVYwRFNNSHhWK1FpR3ZCYnowSWplQy8rT2NXZ2dnZlpackhyT1ZWOWU4UG43YU1iZlN2OXBvNUdBZ1F1dVlNZnlkSkxTWEp4MUtTa3AvWUU4VDNOVUVJU21aRjBFUVVBVVpVSEVwWmhwdk5ENWFuQTZyTmdGTDVkZ2ErenUzdmlqVXFuR2RqYlpGVVU1TFBqOEFJdHVtRW1pUWFsbS83MmhpcHZFeUhzeU9IRG5ISDRvdEdLODV1K01lR0J1VTMybFY2Q3I1RjNRYVJFY0RpVEFXWkhKK2hrMzRUMXlLZ0VSL2pRVTF5UDVORk5TZTBlRU52Mi9QalNNNnNvU0hLWGxXQzJGN0xyMXhpWWFIcStrSkxBQzNtY3k4a0NHdmZvTSsxOTltQy8rbmtmQWlNc1k4Y3FUK0hhd3B4eWxSUjJPUWRkblBER0ppemhlTUpqeG8xbzJHTkdITmRKL2EvRTIrdE5RWGsyRHN4aXBNb050Tjl6WVBLb0I4VWlBdGJBWVRVeDh0K2lhNm92emNSemR3NVlibXZzbkJQY2U3anBmYVIxQllXRnVWU3dDUThDdktRZzFZeWsxbzJ1MG1NUkFER0ZncTZ3RE91WkkxSVZGTmJrcGRNWXdHcklxb2FZSXM5bk1vWHR2NVdqVG0rQUNWTmpjOHVYTS9LcnFRSmRUVmFWUklWdXRycEVYRldENjhRaWJiOWpjclBrTmFTNXlDZ2dJU0FZMmVHaHJyaDhCQVZrV0pLZFRrSjJTSUlvcUpFbVNIZVphb2FiVUtodDhmQkYwdHJZYTI3MzMzcXNTQktGRDN1aTZpZ0p1K1dnYmQ4NmR3YmdJYjBXcW5CZFEwL09XQitsNXk0UFlTak5ZTjI0MlJkZk9KZHJZZ2U5bTR3b2NRMjVnN0w5dUIrRDRFN3Z3REZnMkZEYzMzREdYbGVKMVlUanFNQTFlaG5oR2Zmd3BCdlhaR1huZ21GbE1HRE1MMlZMRmpubVRPZjdkSEZKbW41NDFRaDBXMmVFWXlyOTVrZHpxSWNUMytvV2ZYOS9BcUR1YTNjWG00a0lnQmJEUlVGaERaRWdBM3VvSVZKR3BUUGpzdFRhRjlqWmpCUGJjbmRna211akFQU0VJQW5LcjdpaytFZEY0cFlReThiMkgyd3FVY0gvTXBhVkFIRmlLTVZVN3Vpd2dCRkZxMWR0Qmp5NU1qNld3SEhwSGdGU0ZxUlNNWGFCYnNaUVdJTHMxR1V0aEtkNFJRZUFmanQ3Z3o1QzNsaEVlZUFiS1NqZTZ5T2dqamZoZk5KT0pUN2ZQeUtMUmFFWU1IanhJYytCQVJxdEVYVUYwNld1Q2dDemh0TnVSTkdyc1pnc2FuMkIwWWY3b3ZIV29XNW1oUFBua0U2T0IwMWZOMnV1NGMwazZ1dWcrVkJaa3M3UUFWUG9BNWlXN2lseTNIempFeVlweXJFNHpYMjdQSUNFOGtxa0pvVWdOMVN3N2NJckRwNm9wdFVrczNRR3BBL3FSNktkUlpOSlpnQzFyTzBjMkZSQ1pPZ0JIL2s2czJoaDhBam94Y2FKNjBMQW5uWUtmUjBQeExvNTl1dy85OUV1YWd4RnJQK2JvbWtINE9nNlJ2Yy9BK0ZmNklQaEw5QmxyNDhmN24yZmdEUmNqVnhWU3NDZVBJZmZkMWlIN1J0WCs3WmhxckpoTlRpcDNia0Y5eW91UTFCSG9kS1VjL05jS2dzYU5SRXNsOWFWMmdtUENPeHkzRUpaNjJqRTRzN2F6N1I5ckdmWE5ONFQ0bHJGK3loeE9wUGFuOTFDWGhDLzY1QzF5VWlNUXNsZFRZcitRWVJjRW9oV24wdFAzUmJZL3M0UStsNmJpS0R4R1NiYkVCWCtaalhiUVZHSWovczMyLzN1RC9uUEhZc3ZkZ3h3NWlaN3U4L25IOTZYcWc2ODRPVFFJYldnTTBjUDdFVGhwRGo0dlhNN1BiL1ltYmt3aTVxeERWSnZDR0RSdklqRnpybVRicTRzSkNibWRxcS9lb0w2cmNvMFFBbUljbkhoektkYmtTQUpTUnVNYnJDTnUxa3grZXZGSkFud1hVci9wQTJvaXBoSFZ1M1A5MHI0M25YMmZYWXd4b29ZajN4eGx5S2ZqUWUxTHY1c0dzdnV1aDBuKzZ6V283ZVVVYmRwUHdtUDMwQm1CdnlvNkhuM0JNeHo2ZkJYK2dVR0VqeC9WRkh4cEQxR3piK1RBSlg4aG8zOEl4Z0ZHNm83dXhPcVRUTjlMaGpVcGNPKzk5MzZ2bEpTVVF6UTNVMVlKSUNJSUlyTHNSRVpBRkdSWmxwRkZBYnU1Rmx1REJybTZGSlZhclJiY2lia0NJRDcxMUpOWGk2SjRlaCtiWktmS3BpTGNvTUZpZDJDeE83Q0tXb1pIQndGd0xQY1VlVlkxUTJORHdlRkFyZmNsS2N3WDJWclBEOWxsK1BnSDBpL0lHNHZkUVZSNEJCSDYzNWFNeG1ReTRYUkszVzVLWEZwYVJuQndNQ3FWNnB3ZWM2YmpRM0JTdFdzN1JaczJVMXNxTUhEUjA0UWFtN2VqYjc4VURJSHU2SlltZ0xCaC9kSDFIRXhnVUEwNVg2N0JqSkdrMjJaajZKRkFZRnc0TmJ2U2NjUmNoTDVzRDZYSFRReDgrcCtFOS9BRlJNS256RUJWZXBDODlBM1VGdFlTUEhJc1FYR1JIWExtbDYxYlNkWHhmSHlUVWhGckN6RVhsT0J6UVNvNkx6Qm5IYUJvMHliS0R1Y1FmY3VqSkk1TjZGUjdPZDBZeXJkdkpuVDJYekQyalVEUUJoQTVvaThWaHdzSkdSaFB4ZnBQMEkyZGkrUGdKcXJLZkVoNTdnbjhBM1FnZUJGMTJVeHNSN2VUdis0SFRGVjJ3c2FPd3o4cUJBUXZvaStiZ1QxN0ovbHJmOERxQ01BNFlRUTZiOWRUcTQwZFRFaVVRUFhoNDFqTVdzSUg5d2FOSHoxblRLTHU1ODBVYk55SzFhb2xZdXg0Zk1OOE1Rd1lnYStZVCs0M205R05tVTFNU2krQ2hnN0ZxMU5aSkJJK01RMWIxaUhxOC9MUnhTVmpDTkxoZThFNGZPUUNUcTFhajgwUXovQm5IOGJnM2JrcWJSaWVobGZCeitUL25FWEMvYzhTayt3UzFFR2pMOEZIS0NJdi9UdXFzb3J4dTJBMFlmMWlPaWNpOWdvbmFtdy9haklPWVM2c3huOTRDbzNNWkFISkk5QzdEVHZCTjV5d1FRbUloa2hpTHhsQnhaWTFGRzc3Q1ljWVRPVFkwWGdITkZ1QWVyMCs2N25ubmp1QnE5K29IWEFJNEFDY2dDUUlvaXlxUkZrUUJOUmVPbFNTRTZuQmd0b1FpS0RUNlVSUDdqV0h3LzZOSUFpVC9xaWF6Zm5PeDNhbTR6dmJ5SDM5ZHJKTmt4ai93T1YvbUxVL2N2K2xtRktlWk9qY0ZFWEYveCtBdytIWW90Rm9uNldabzYxZUVBUVRZQlVFd1NZSXpSeHRXcTJMbzgzTHk4WFJKcm9UY3BGbFdaZzllNVpLRUlRUnlwUXE4QXFMd3ljaTZBOTFUN3FZUkx4REZKL3cvNHpYV0swZUdoTVQweHc0YU5sTVdXeDBuN21TZFJ0L1hLbHJhczgwajNmZmZYY1lvUFREVTBERTdQdUorSVBkVTl5ZEx5b0wrNzhGbjJYTFB1NDVhdFRvWXpUM1FCRGRhUitOcFZXQ0xNdXlMRGZuNDBxUzFLeXhBZWgwdXFIS1hDcFFvT0I4UWUvZXZYdTVoWnBuMmtlallLT2x4dWJxMVNKSlVzdkNVcFZLcFRnZnppTEN3a0s3RlRnQU1CZ00rUG41S3BPblFBSGc3Ky9mcDVVWktucjhDSzAwTnlUSlJXbWs5cUFwRWdSQnVFQ1p5ck1wMk1LNmZZekJZRkFtVG9FQ056UWFUUkp0Zld5TnhmQk5UQitlUmZHZUdoc25UaHdQQXhLN2VzSHEybHB5SytweG5DNG56OW0ycWF6VmJDYTNyQnF6UTFaV1RJRUNCWjFDRUlTRUYxNTQzcWVsWUpOYm02TkNjejZ1Ui9BQUVJeEdZNWVLM3BIcXVldVZGZXkxYXduM2NsSm8xL1B2NjZjeElrd1BXSG51bzIvNU9xdWNVaW1BTFU5ZFJiVDdzUGRYcnVTTnpEcDZCSGlSVjJWaHdSV1hjT3VBTUdYbEZDaFEwQ0VtVFpwa0JDcG9JcHhFRkFRRUQ4ME5hUGExeWJLRXV0RkcxV2kwWFJOc29vWUZzMmFTMU1PVjFyN3l1MVVzMm5DUTFmT0dBeW9tajd5UVd5ZWFtZmptbmhhSGpVZ2R4VFV6dzlHS2tIOTBENU5YYk9QeUFWZDBVdEdtUUlHQ1B6dWlvcUo2QXBsdVFkYWljeFZ0b3FNdTRTYTZKWjJnVW9rRHVuWVpyeWFoQnRBenlCOUxFOCtNbWlHOW9nald0ODE4N2hzVjNsUnJGeGJraCtpd1k1V1VSVk9nUUVISDhQSHhpZk1RYXExYjhqWGxzcms3V0NGSmt0Q1U1Q1lJd29CdVg5RnU0cjJkV2N4SjdkdU5nMlErMlhxUVljT1RNQ3FrSUFvVUtPZ0VHbzBtb1pWUWErRmphNTJvSzh0eVV3bVlBSFNQVkUyeTgvb1hxM0VrcExLZ2Y5Y055aDAvYitYamNqOWVtRFJBV1RFRkNoUjBDbEVVKzNob2FXNmhKbnVhbzlBaWdPQVNiRUpwYVVraTROWDFTem41ZE5WcXRvcHh2REsxUDExVnZBNW03T0t4bjJwNTU3bzBnaFZTRHdVS0ZIUU5YaXRYZmhIaUlkeEVXYVlGaDZSbkFFR1dYZWtlK1BqNEpIVDlHakxwNjlmeldWMEk3MXlaZ3I2TFV1M0U4UVA4ZlZNQmI5dzBoUmh2eFFaVm9FQkIxOUczYjk5UVRwK2s2eUhVWE9hb0doRFVhblY4bDY5Z0xtSHhwaXhxZFY2a1BldWkrZFdHOW1MN3dna0FQUG4yQjZRWDI2aXpPWml4YUFsSmc0Zng0WXhCL0dmMURnb3JSYTU1K1VQM2lmUzhkOTg4QnVxVlJWT2dRRUhIQ0FrSkRXOXJqcmJVMmp6TVVWa1FCRUh2Y05oZkZrVngvcDloZ241TDJpSUZDaFNjSFpqTjVtWGUzb2FsdU9pTDZvQTZONFdSQmJBTGd1QVFSVkZTcTlXeVJxT1JSUUJCRUdLVnFWT2dRTUg1Q28xR0Urbld5c1RUbUtLZWFSK3VMd1JCaUZHbVRvRUNCZWNyVkNwVjlHbUVtdUFoM0FBWmtKdStWQVNiQWdVS3psc0lndENqbGNZbXlIS0xsQTkzOVFISU1vZ25UaHdQQjNUSzFDbFFvT0E4aHU3Zi8zN0pwM09OeldXT2lzSEJ3WkhLbkNsUW9PQjh4OENCQS8wOEJGbWJkSTlHb1NiTE1xS1hsMWY0bVZ6a1RHaUx6T1lHY3N1cU1kbi9QTFJGc3VSQWtwU2lXQVVLZmkwaUlpTDhUcU90dGY1QnJWS3B1aWZZenBDMjZLT3ZWdkxtVVJQaHZsb0tLMDNjT0dNcUN3Zjl3WlhGd2swc1Q3NGVWWThJWkpzRnI3Z1Voci80RWhHOU95OUJNKzMrbWdQYkhZeTgrMHBsUnl0UUFQajcrN2ZXMkU1bmlncWlLSXFoM1RxN203Wm8rd1B6V0huM2RUelEzNHRGR3c2NnYzVFJGcTFhY0JHdHlhMnZuRHFkN1E5ZHg4bzdyaUw5MnFHOCtzMVBWUHdaVnNNcmtVbDdkalA3NEg3NkRuR3cvZi8rWDR1dkhUVmwxT1lYSTdYUThpVHN4ZG1VSHZ3RnlkRTlqVThHY0Zpb3k4bkJicFBjNTNOOVo2c3FvNzYwcHMweDlwb3lhay9sNDdBcG1xV0M4eGZlM3Q1K3B4RnFUZFRnamFWVmFsRVV1MG1KNWtWU2orYXkwcDVCL2xoS1d0SVdVWlBUNWlpOVIwZFlDVkNyeEE0YjdQN3hvQ1pzZUFxV3pVZHhBaW9zSEh2NkxnNXZ5TU0vVkVOdGJSQVRQbHRDUUdBZE8rZmZSc1dKSEJyS0pOYk4zUVVCU1V4NDkwbThLQ1M5NytVTTM3T1RVQU5VZnJtWWJlc05YUGJHWDEwSzRwTDdPYkJUUXN6ZWhWUGpqZFUvbVptZi9KTzlONlZTSVF4Qk5sWFRjRFNEaUwrL3hZaWJ4d0tRL2NKQzluMlRTMkJzRUxXL2xIUGhxcldFTiswSUMvdi92Z0QxUlhlUk5GM3A4NlBnOTRWV3ErM1V4K2JXMkZBTGduRG16U01iYVlzbVhkYWxQLzlwenk1ZTNaWE55UW9yLzVoM0tVRi9odFdRNmlqZXRJbHFTdzBuWC91Q3VHdWVRZ1ZVYjNpUGpCMGFMdHU0Qmk4MTVMdzhuMzF2cldMQ3c1ZHo0YnNycVBudVZUWi9aV1hLMi9kMzYzSlZPNDl5eWFaMUJBVHJjRm9zVGF1dTZUZVZDUS9Pd0xKN0dWL2V1NHpoTjQ5RlJTbEhsL3pJaFZzeU1JWUREaHZPRm1XOEVqV0g5dUUxc0ZwNXFoVDgvcXFCV3UxSHg3NDFvVm1OZ01BemUyQzdUMXMwc0c4L25qTEdzRzN2SGw3ZHVKK0xiaDNQSDc1MWlWUkw4YXB2RVlxUFVhTWZ5dVFiSmdKUXRuMDdHa1F5Ri84RENiRG5WbEJsUFFUOHVzN3JBUk5uRWhEc3l0NVI2WnF6ZU1LR0RBWkFGeDJOV0YyTkhWQVJSTVNJSUhiZmRnTTlKNDBsSXUxaUlnWkVleXIvakZ1Zm9UeFJDczRMcUZTcWRreFJHUkNFMWc0WkVmRHIvaVhPakxiSVlQQ2hkMlFZTjAwZGpWLytNWDZzK0JORVI5VlJKUC83SmNaK3NvcGVrY2ZZOVZwNjArUWJrbEtKbWpxVkhsT24wbXZoSTR4OS9KYXVTTXJtNVdzbkpLMzFhWjlWUUZDN1YwbHNhUjRQZVhjZG8vN3ZGclQyQXJaZk9aa1RlOHVVSjBqQmVRbFJGSDFvNDF0cldWTGwvZ3hSRUlSdUNyWXpvUzJTS0tveE5mMVdXVnBNbmtOTG9PN1A1R1VUNlhmL0E1UXNlWjdLR29uUVVTT3B6VHlCZjNJS1lVTlRDQnM2R0VOUXMvNnE5alZnTDYra3Blanl4Y3VubG9iQ0JwZld0Mi9Qcnh5VERadEpJbmo0V1ByZjh6Z0pZOE9velNwcDhmM2hKKzdtMkFaRmExUHcrME1RQko5T1ROQW1YalkxZE5NYVBDUGFvcjY4c3ZRenRwdDFoT3BGY2l0TXpKbCtFVVAvWkMwME5iRnA5QjMvTEFmL2s4NjRCMjRsYWNmZHBJK2JURUN2Y09wemZ5SHFqcGRJdVdxRVM3dE5tVW9rTi9MTnVJbG9JbEs0NkxQbjBPRkw3K3Nuc1hQV3hSeExDRWRyRU1IbjE0eW9sQzBYWDQ3VG1JaVdTbXJyNDBtYjNOL2plenZGMzM2T05td0tmU1lPVXA0c0JiKzNZRFBRc3VpOVRhb0h6UkpPS2dDTXY4WEFUQTBtS2l3T2duMTlNV2grSDdMSjg0MjJ5R21xb2FHcURuMllFYlcyYTNOaUxTdEUwZ1dnOS9VK0N5T1FNQmNYNDBDRFQwVG9ueXhTcmVCL0RFV0NJQzRFVExpb2kycUJla0VReklCVkVBUzdJQWhPbFVvbHFZSGZqT3JSNEczQTRLMnNqaWRVQm45OERmN2RPc1lyOUd5K2gwVDBFVVpsSVJUOEwwRFhnUm5xQVZmd1FHRk9WS0JBd2Y4Q1dzdXFkZzBNV1VZUmJBb1VLUGlmRW14dEFnYnRDYmhHL25BRkNoUW9PTitoNmtCamF5SGdHc3NTRkp3REhEcDBHSnZOcGt5RUFnVm5CMkpIV2xwN2Y2aEFnUUlGL3dzUU92a2RRQkNCYmxJNk9ObVpjWmhGS3pkdzcvSk52TDh2bDJhZFJDWXJMNDlQdCszbDFZMEhxVzN2Y0llSjl6Zit4SmI4R21XSk9vS3RtTXgvUFVmZS90emY1ZksvdkhRdjZaZE1Zdm5vRzJnNGg5Y3haNlNUUHYxU1ZnNGZ3dEh2ODMvWEthL1BPb1NwUnRHd3oyTjBXVmFKZ0xON3A2N2pxNzJGOUltTjRkTCtVV3plc29ISGY4aHAzS2E4dDM0UFI0cExlT3VIekhZRjIrb3QyM2pqeHd5MkZOUXF5OVRSUTdiamF3NTlzSlQ5Ly9ueWQ3bCt3ajB2TXUyVDV4R3JLam1YaFcvNlFkT1k5dTBxZWlWNTQ3RCt2clJKSjU1WlFQYk9ZbVh6bmI5d25rWmJhNk8xcVFFYm9PbTZsUnZBNGhzbk5mMGEyRkRHWC9ibnd0aFl3SnRuYnA0Sk5UbDhjM0JubTBOcmk3TlpXdWpEN0RqdmM2b0YvQkdRdDNvTnZlNTlpUHlYUDZiVzlqZjh1aEM3cnQ2Wnp2SGw2N0dqSVdEa05QcGZPYjVweFUxSHRuTnMyVGVZYXlYOEw3eVlmbGRQUklXRnZHVWZVclQzS0hhN211QkpzK2d6UGJYVEpOMks3YXZJWGYwakRWVW1mQWVOb2U5TnMybGtwYXJidTQ3U21pQzhTbjRpZCt0UmZNWmN3ZUM1YVdmOGdpNzViaW5aYTNlQlh4VHh0eXdrTk5iRjJTQTNsSExzN1hjb1AxR0VsekdHWGpjc0pEamF4UUpvT3J5Vkl4K3V4R29WOFJrMGx2NjN6T2h3ZzF1emRuRmsrUVpLanBZanJuZ1R4eDQvL0VaZVNxOXhTVTNuTzdiMEs4eFdMVkZ6YnlRMnRROEFoVis4ZzJ3Y1JPbDNLekZiZlVuODI5MkVHRjFqc09ic0ozUEpKNWlxclJqaWg5QjM0UTNvZFIzZkU1ZzQ4ZnBTZ3FkY1NNNlNwVmdjdnZUNTIvMEVHdzNLQStHMlk3cWpzZjBxM2Z0SWFUbUp4cEF1N0ZFYnozMzdNd3VuRHNOTFNXL3ZaSzZxeUYrWFRlVFVPVVFtbHBEZkJTMUNMdG5KaHZuUEV6cnpXdnBjZHdXQ3VhWkowN0ljV2NPYWVRK2dHM294Zlc2YWcxRFc2RDZvbzZiUVR0VHM2K2c5YnhwRnI5ek93VFhIT3IxV1hWWXVnV25UNmJmZ2VxVE16L2pobVkrYXY5dTNucjMzL1kxVDJWN0V6SnFKMmxGM3hocGY5WWJYK09IWmRLTG0za3hrbkpNdFY5NUVyZnVOZVB6WjI4a3ZES1R2N1F1SkhOSURTNlc3RnRtV3ovZno3c0k3YlE1OWI1bUxIaE9PVHE2akRvb2lMQzBON3hBRFBvTXVKQ3d0RGYrNDhPYTV1LzVSZk5KbWtuREZPSTdlZXozWkI2c0FLUHJtWFhZKzl5R2hsOHdtUUpmTjFnZGZjNSt4Z1owM1hZK3p6OFgwbTM4ai9nRVNWbnZuOXdRbXNsNTdrUi8vN3pYOFIxNU05S2dFTE9WMXl2Tndlc0VtdC9xM2hjWm01Z3lwaTA1bEgrYk53MDdldWJOZnAzLzc4ODRkVlBkSVpteW9sbjNLQW5VSWE4WkdLbnhTQ1RkcWtkTEdjR1R0T3ZxUHViNWpXZGhRaWNPaFIyK01KaVErZ3BEazV1OXlscjVONkhXUDBuK0dTM01LU1I3bS9pYVVBWCs5aVlyOSt6RlgyL0FmRkVmNXJvTXdwVStIMTRxOS9uWnFqK3lucHFBYy82VCtIRnV4RzdpMitXMlprTWFJaDI5REFLSi94VHprTGw5QjNPMHYwV1BFQlRCaUVJVXJCNUgzVXo0RDBxS3hWbGFpaVFyQkw3NHZJUU9TUExaK05WYVRDbDFZQklHRDRnZ2VOS3pUNjZnQ2pSaFRqWlNFNk5Fa0RzR1kyck41N3Q3L0QyRTNQRVN2c2NPUWdiNnpoNUdkdm9tNGdTN0s5cmpyN2lSNlJIL2txS3ZKdVB3RGJJQVdLNVpxSzRGaFlRUU1TQ0o0WUhLWDdzbjFpSnJwYys5enhBOE5WaDZFdHJCMFIyTTdJNnV3b2lpSEJaOGZZTkVOVTBrMGRCSmN0Vlh3ajQzWkRBM1hzUDd3U1U3VzJNa3JMT1pRaFVsWnFuWlF1RzR0R3IyRm82Ky9RVVZlUFdWcjEyTHQ3T0dNbThUSWU4Wno0TTQ1TEIrY3lyWi9mZHJra0RBWEZPQWJGOWZXWVZHUnlkcTBOREpYcktmcTBHRWFpdXVSSEozdEhSTzdyNytZSDUvOUw1WDdEMU9YWFlSa3M3VjRaZm9tSnA2Vm1sTkxaU1hlSVdGTjcyQjlXQ0NXMG5JQStqendBbDU1WC9QdGlLRjhmY20xRko1d0U4MzdKREh5cGRzNCtlUUN2aGlRektZSFhzYnFPUE14bUVvS0tmdnlUYmJjY0NQZjMzQWp2L3hZams5d3Mybm9GZWhpSVJCMFdnU0h3KzNkRG1UWXE4OVEvczdEZkRFd21YVzNQazZkU2VyMG5sd0xHWUp2dkNMVTJyVktaTm5jam5iV25rRWdxM0VWbEhZTGRSVUYzUExSTnU2Y080TnhFVjBvL3BSVmpCMFlTMjd1S1hLQjdIbzc5dEpTVGxURWtoU3MrQTlhdjVUeTEyOGxmTUs5cUF4YVZIMUhFcEQrVHdvT211ZzFzS081VXRQemxnZnBlY3VEMkVveldEZHVOa1hYemlYYUNQb2VVWlJrWndNdE5ldktqU3R3RExtQnNmKzYzV1hlUGJHTFV5MmtwUnJSNFdpeGMrVDhIWnc0SE1HVmUxNUdDOVJ1ZUkzRE96SmRkSCtOYjhzelNDSVMxQ3FrUm52TkRWMVFFQTNscFVCUHdJRzV0QXEvTUpmYnd5djJBaTU4NjJQQVFkYmlCZXgvYXdYR0Z4Y0FFSDdaUXNJdlc0aXpKcDh0MHlhUXMvY0crZ3p2b2xIU3FyK0VJZHhJNU9oN0dISGJtRzdkVCtDWVdVd1lNd3ZaVXNXT2VaTTUvdDBjVW1ZbmRYaFBkREovdG9waWJBNHZmTUlELzZ5Q3plUWh6RHIwY0tobFdhNFZoRzY4WCsxMTNMa2tIVjEwSHlvTHNsbGFBQ3A5QVBPU1hlcjc5Z09IT0ZsUmp0VnA1c3Z0R1NTRVJ6STFJWlQ3Wm94dk9zVXJIK2RUbFRDSXl4TkRGVG5XV292Sy81SEMzSjVNdmUrMnBvQ0JmUEFyOGpkK1Q2K0JsNXhlS2M3YXpwRk5CVVNtRHNDUnZ4T3JOZ2FmQUxmcGVNMThEczk3aXN4NEhXRnh2cFIrbjBIY1hiZmdIZFdEaGozcEZQdzhHb3AzY2V6YmZlaW5lMXpEcHhlaHNVVmt2UEFoRVgwaU1VNmRqQzR3Q20velFiTFc3U0RZWU9Md3F4OERRMzcxZlllbWptRFhmMS9CSUUzQ2Y5Q0ZoTVNGMG5QT0xEWTgrUy9DNHg1Q3lscE5mbEVpRjEvb010bXlQM2dWb2Vjd2ZFTTFWSnpJd3lmNUtyY3BjWWdEeS9ZUVBpWUZvU2FMQnBNdnZsMTB2dnYxVHVEWThuZnhGY2ZpSFRlSTBONFJ4TjZ3Z01NM1BNYlJ5Q2NKNmVsSDlkNGZFSHZQb05lb3VBN09WTXJCZjYwZ2FOeEl0RlJTWDJvbk9NYmxzK3ZvbmpyREwwOWVUMmJwU0daOTl1U2ZWYkRWZDZDdHRSQjJxaWVlZU9KS1FSQVN1KzdZdGxObFV4RnUwR0N4TzdEWUhWaEZMY09qWFIwTWp1V2VJcytxWm1oc0tEZ2NxUFcrSklYNXRqbE5kSGc0c1g2L2ZiY09zaXdBQUNBQVNVUkJWQU42azhtRTB5bmg1OWM5ZnMzUzBqS0NnNE5ScVZUbjlCaHJRU0hxdnNQb2tSemY5SmwzbEJHSFhVTm8vOWdPVkI0blZidTJVN1JwTTdXbEFnTVhQVTJvMFdVbXFVTVRpQmszZ0pLMTZSVC9mQWg5NzFUQ0I4YmkxWE13Z1VFMTVIeTVCak5Ha202YmphRkhBb0Z4alIwWk5SZ3Z2Z2p6c1F3c0pTWUNocWFnOVE3Rm1CcEx3Y292cWNxdHA5OWR0K01kSGtWNGNyUDU2UlVaNzNHT3JzRTNlUXcrWWlXMVdibW9JeFB4and4QTMyc1lvVVlicDc1S3gxUWZ4SkIvTGlJbzFFVkc0NmpNcFdqVFprcCszSWNoZFM3SnQxNkNTZ1JFZ2RxTUhSUnQyVVRsTDFVa1B2ZzAwZjNDdXFabERSdVAybHhNM1M4NTRCZEZZR3dZNnJBRVlzYjBwbmhOT3NVL0hVRHdqY1U0YmpnNmd5dk82dHN2QlVPZ2V4OXJBZ2diNW1LVU5tY2RvR2pUSnNvTzV4Qjl5Nk1ramswQTZQQ2VYTkFTTkd3b1duWDdZelQwSGt6b2dOZy81MHZmNlR6NjlOUC8rQmxYRU1IYStLOGdDSGJBS1FpQ0pBaUNMQWlDTERpZGpvOUVVYnptenpJNXZ5VWYyN25pY0ZPZzRFL3BwTEZZVnVyMTN2K2xMUjliQXkzNDJFUkpsR1c1VXBreUJRb1VuTzl3T0J5MUhpYW5mSHBmbTRBb3kzS0ZNbVVLRkNnNDMyRzFXaHZMbFZvTHREWUNUblE2bmVYS2xDbFFvT0I4UjBORFF4MHRrM0pQR3gwVjdYWjdpVEpsNXdaaFlhSGRDaHdvVUtEZzlLaXVyajZkS2RvazdCb3pQRVNMeFZLcVRObTVFbXhoaW1CVG9PQXNvYWlvcUs2MVFCT0VObVZWc2lDQVdGUlVYSFJHMHJPMmx0eUtlaHluSTJSd3R0SVFKUm1IVTJyNmthUS96NExJN254MHVSM1dsZE1WdXpWOUxpa2JXb0VDZ0l5TWcvWHVSME5xRm01Q080K1BnSHJ3NE1HbGt1UzA0T29BMHpta2V1NTZaUVY3N1ZyQ3Zad1Uydlg4Ky9wcGpBalRBMWFlKytoYnZzNHFwMVFLWU10VFZ6WFZDbjYxYmpXUDdDakF6NTJnTS9yQ1VieHdVZUlmZnpWcTl2REZwSDh6NCtjblNCOXdENU1PcjJwcTVKcS81QjVPMWt5Z24vRUFCNDRrTVBHcHVVMkhiWnVRUk95SGh5aThKNW5RcDNmVHE1OWEyZGtLL3N5dzNILy8vUTBkbUtJdC9HMk5UOHNwb0d0U1J0U3dZTlpNa25xNDB0cFhmcmVLUlJzT3NucmVjRURGNUpFWGN1dEVNeFBmYk51bGZPcUVDYnc0UGtGWklnVUtGSFRQNnBIbHZGWUNUUExRM0ZycWE0S0E2RHBHN2daTnExZVRVQVBvR2VTUHBhbkdUODJRWGxFRTY5dlhMcXFycTloeUpJZnNHc3VmYUVrRVZGNWVnSWhLcjI5UkhDNnF2QkMxSW9KS2hkZ3ExVnpVNjBFRTBVdnY0amxXb09CUERLZlRXZEJLcUxYeXRRbXlJQWcwQmcvVWdDeEpVczRaT2JudEp0N2JtY1djU1pkMStxY2FMeDMya25KVzdTOWg2L0oxVEo4eWhjYzk2R0grc1BDL2dNdTNMZ0hnMHQzTFczeGx2SEV4cmxiRjAyaE54VGpxdTEwQTlQaDRoN0tyRmZ6cFliUFppdHJSMk5wTitSQUVRVllEc3RQcHpPNjJZSlBzdlA3RmFod0pxU3pvM3puTnlyUUphVXh6LzM5WjdtRW12TGVkNnkvb1NheEdXVFFGQ2hSMGpQcjYrcUoyVE5EVCt0bEV0elE4MlUzRmtFOVhyV2FyR01jclUvdDN1OVZWYUhRa1VZNTZUaW44NEFvVUtPZ0NTa3RMeStpQ2o2M1JIQlVCdWFxcUtxdnJsNUJKWDcrZXorcENlT2ZLRlBSaTE0NnByRGMzL1paMTdDUUYrbUQ2K0NnTHBrQ0JnczZSbVpsWjRTSE1wRTVNVVFSQkVMd0JyU1E1aXdHdlRxOWdMbWIwb2krbzFYbmhKYm9jZGRyUVhteGZPQUdBSjkvK2dQUmlHMVZtQi81Nkw1SUdEK1BER1FPNDc1WDMyT1B3d1Y4amtWY3JjZS9zcWN6ckUvS2JUOUJ2eWU2aFFJR0Nzd0tySUlqWDRtcGpVSStMMmFOT0VJUjY5MmMyUVJBY29pZzZWU3BSMW1nMHNpQUlndDR0MkxZQXllZHViQkpsMWZXWW5RTGhBYjU0L1U0SitZcGdVNkRnZnd1U0pHV29WT3BGdU5vWWVBbzJrNGRnYzdvRW0wcldhRFJ5WTQ2QkxFbFNwaWlLNTFDd2lZUUcrQ21ycEVDQmdtN0Jack5sMGRhMzF0ckhKbnVZb1lpQ0lNaUE3SEE0TXBVcFZLQkF3Zm1HdXJxNjNIWUVXcE9QclhVT1cxUHdBSkROWnZOaFpRb1ZLRkJ3dnVIVXFWTUZyUVNhazlPa2ZEUUt1Y2FZcG56OCtBbEZzQ2xRb09DOHc5cTE2MHJjZ3N2cElkVGFwSHMwbWFHaTRLbzhBT1RVMU5SeVNYS2VBSHIvcHFOKzU5SzJuMTF3TmFUTVUxWlVnWUkvT1dSWi91WFJSeDgxdHpaRDNYUkZucHFhaDNBVG00cmdaVUNTSkdtdktJcTkvOGdUNVZXVGk2b3dFNnE3MTVUVzc5UXBSTWNKVUNzc0d3b1UvRmF3MmV5SDJ6VkRaU1FFV1FKQlJwWkJsbVJCbGhHY0lEamtwdUFCZ0d5MzIvZDFmaWtuT3pNT3MyamxCdTVkdm9uMzkrVmlhNWF2Wk9YbDhlbTJ2Ynk2OFNDMXJXM2wvQnllK1hJajk2M1l6RWVaaFgrNlJTcmZ0NW14VDM3UjRyT1QyNzVsK3I5V3QvdjNQNjVad2VqWmQ1RTg2MUgyMW5oODRhaGwwWlAvWU5BVmQzUEo0cTkvMjV0d0ZIUHRUUTh5OUlxRlhQdkdEMTArN0lVbkgrRy9lNnU2ZGFsbC8zbU4wZGYrbmVnWnozQTIyVkMvVzduNi83TjM3bkZSMWZuL2Y1NHpGNFpoR0VZWVlFUkVSRkpEUkVNeUpEVXpjODNNekZ4enk4eTFzakl6MTNWYmExMXovZlUxdDIyN21HdG1kak16MTh6TVRNMVlORFBYeXN6SUM1a1JJUklpSWd6RE1NemxmSDUveklVWndHdnFWczc3OFRnUFpjN2w4em5uOHptdjg3NitQcHpSN0hNM3NLdW9sQk10S0wvbWpaZkpHVFdabm1QL1NjVjVlL0F1OXUwcnh0YU1uMi81aTA4ejUvMXZ6K2hLQmF0ZnArKzQ2YVJkK3dkMjI4NWhGeFViVTZiUDQ0RDkzSkVJSHJmYURyWmloZ2I3MlBDVFRVcEl5RkpUOEFCL1pOUnF0ZTQ2ZGVmcldMT3JuQzZwSGJnaG94MmJ0K1F6YTJ1SmIyY0RMMy80QmZzcmpyQm82NzRRWUR0V2RvRGZ2YnFOdUxiSkRMMDBHZG5sdnVpQXplMm9wL1JvYmNodnNSMHl1T3ZxTHEwY1hjZnNmNzdIelBsUHNudlYvNUVkMDdTbi9MT1BlTGs4Z1oycm4yWDl3emRlMkp0UVcxajJ5dCtaTnlxTEdydnI5RUg5YUNWV3UrZU1tcnIxbnNsc1d6Z0pkYTJWYy9HcTVHOTRqNElEeHppdzV4dXE3Y2VaLy9KYXFrNW5HdHBMR1g3L2k3UzZPSWk5bUJrdkZySnM2YlBzWHZaSExPZnR3ZGN5Y2RKY2lwb1I0MWlycTZtdWQ1M1JsUWFPdkoxdFMvOUNrcXZ1eEVTeFp5R0ZtOWF5cjAwV25mWG5qbzZtcVBqUUQ4MjB0V0FmbTVEODRPWURPRitxaDFBSDI2bWpSOSt5YS9QbUFodHc0bUluMmNUajQ2OE4vTm5HZnBUN2R2OEEvVk1CUGY4M1lRVFVsckQyNjA5RFRsdXhiUmZYRFJySXZibEpGeFdZT1k0ZjVzbVgxMUpjcjJWb3VpN2tDN3pzdGJjb3NpcFlMczBPT1dmbnR2K3c1c3R2S2F4MnMzcmxXMnhUUlRMeHpwdEppYlN6K01WMzJMWDNheHhWR3VZOHQ0ellqcGxNRzlielozR3ZibHNWaTFmbXMvdjdDaFNka2RFMzNjRGdqUGdtY0N2OWhvZm12SWxObjhDVTM0K2dhNXkzME1WKy9EQUwzdGpJbm5JYm1ibDltVHE4RjZkS2cxWWFqck5vMlh2cytQNFlzWW1KakJzOWd1eTIrcE8vMEFPdVl0bkt0Yno4U1NGYmxEVThOUDRtektmd0xHejVZQjM1WHhkanJUL01FODh0UTQvTXJXUEhrTkZHSnYvOXRXelo4eTFsamdhV3ZQUW1lbDBjMCs2K0R0TUpyOWJJMHRjM1VlT3E1cUE5Z2FHZG5LejgvQmpUNzcrZGpEZ051ei8vaEJVRmV5aXZiU0R0MGg1TUhYTTFKZzNzL3U5bVZ1MDhTSW05bmtXTGxtSFJTQXk5NFVieVVnMCtCYjZLSnhjc1pzOVJHRC8ydHd5NHBNMVBHRVE3eTk5WXc2WnZqbURwZUFsVGJ4dUt4UWRVWlVXN2VXTEZSeWh0a2htZUZZOGp0aFBEZTdRTFdIS0wvbDNBclZPZkRySHVWaXgvQjJOcWU5Wi84Q202eEk1TS8vMzFXSHgxbURVbCsxbTIzMG1POWtlV0ZCU1IwT2t5Wms2NENqMHUxcTlleDZvdmZyQzlzV0hya1daYW1nZFFoTmNjOVZPREMwbENLSXFDcmNHRHJkR0Y3SE82Q1VENTZLT1BGQ0hFampONUR2c3JxK2ljZEtyU0tCZDdTMnVKRWNlNWMvRmIzUHJ5Qmo3NG9lWmk4QkF3ZmRwc0R1cTdNR2xZTnN2ZXlRL2FweUk3cHlkZHRVZFpsQithUXBqY0laMGh1ZDB3U1JIazVXWXpKSzg3UmcyQWh0NjlMeU92Y3lJR2N5SkRyc3ltLzZWdFQ5b0Q2NkVEekZuNEpyT2JiWnVLenYzaVpNN3FDcXExQ1l5L1pUaGorN1ZuNm9OL1lYdFZrNWEyNUowdERCbzJoTnlvSHhueWh4ZXhBelFjWmRTRVI2bU02Y3lVVzYraFpOUHJUUC8zMTZkc2E4bjhwMWgvSkpwcGQ5ekkwTzRKVkIxdk9PVTV4UWYycytPSE9wTGo0MG5RT2RqMHlkNFdwbDF6U2V0OEtVTjZYNEpPWTZUL2xka011YkluQ1Rydmk1bmU5VktHNUtTajB4a1llR1UyZ3kvdmNnb2E2a2FXdnZJbWNxZmVsSCs4bk1WN3RlUkdWZkRFdTE4QmNMQ2tncHdyODVnMmRnZ2NLR0RNczVzQVNFcnB4SkFyTTRqVmFPamRPNXNoVjE1R1Nwc202Ris5N2orazllckxzSTZDMFg5NWlaL0NMZkhxTS85Z2ZtRTlFMjhkUnV5UFh6RDRyeXU4NmxGdE1VTW56U2NsOXlwRzl6SXliZlo4Vm44WlpORGJmbURUZ1NqNmRvc09BYlpWYjc3QmpOYy9aL1NvNjRpdDNNbkl1VTJ1azVvZmlwajk1SFBNLzI4Tkk2Ky9pbFNkQ3dkUXNId0pVOTc5anR0K2U5MFhUcGRiYWNVRTladWhpaUtFa1BEcWJZMXVCWTFHVFl4ZUc0aUtCc0RON1hidjBHZzBnMDduSVpSK3Y1Zm45M3A0Y2ZLbHAvb01ZSE81V2IvdkNNK1BHWWF0L0JzbXZMYVJqZytONGRkTURxNVU3R1hGOTNIc2VXa2dGaGxtM3Q2ZlVSLzRIN2RNUnJjTTVNTzc0ZnZROHl6dE8yQnByOE9naVNDblZ3YVpBYTFDUTg4ZUdhakxkMk1vajZSdmRzYXBMVWVObGdSelN4M0NvRG4zTlczNmxFeW1ENi9oczIrK3d5Wk1aQ1E0K0d4Zk5Ybjl2VnJibU50K3krRHNTNkRuSGJ6ODFuMXNPVHlKMUQwRjdFdnN3NnJSVnlBRGMrNGNTc2JUVzVsL1MvZVR0bFY5M0lxK2JReHBxUjNvMlNYdHRQb25HeXpNZStRK1hwNzdERU5tM0FkRjN5T2Z3bXBLNmRpSmxEZzNXbTAwdWRrWklhWm1hcWRMU0kycFJ4Y1JUVjUyeGtrMHRlRHZXUnlEK2wySzgwTXpTcS9MR09DcFo5VVgzby9NcU4vZVJQRzNCeW42c1piTXJxbk1YMWNFRENhaFhRb0o3ZlFZTlZxeXN6UElhYWFZRGh4MkhTUDdaTURsMGN4ZU9JOFNKMlNjVmVWZkRVdlg3MmZtcTQrUWw2SWhyOU00bHZTZnkyNzdyY2dmZjRJemF4RFRoM2l0Z3dsWGYwaGg4RWZ0eHpMS1l4SklhVVVEdnZmTzIrbmZQWWIrS1dOWStKdEZGRDk2RTJtKzQreUdOQmJQSE9NMUVmTUFGSmEvL3pGVEpqL0haUjIxZTFveFF6MkFSNUs4NENZRUlDSDhhN3FvMVNvaUl5SlErM0kvaFBjZ0llcnE2ajZMalkwOTVTTTQ5bU1KOTd6MUZYUHVHRUhucUZQWjFHcjBhaGpXK3pKU2paRmd6S0pQMUhZK0s3Zi9xb0hOV1ZPTHJVMGNadC9qc2NUR0F4ZDJVVEE1UW9mRjNOSTBNZXBQSGQxZHR1QkpacTdkRDhnODhkeDhSbmVKUFBtSGJsYytnMmEreTVCQnVTUkVxYW15ZTNDNG0vdy95V2JmdkpLTldHSmNWTlkwSWxkV1lqMzREU01mUEJRNHJuZkhTMUhncEhSWTk5NS9QNDhzV0VIMnNOZlJKWFprL3YrYnlzQ09KeS9aUyt2VUFZQWhOMTlQRW1EczJ2SENUd3BaalZvR1dhVkMxa2hvWlJYMlJnRTBNSFBLSTJ3UnFRenFab0hqVlRoY3B4ZUJOeHQ5OTYxV29WYTVVY1JaK3hLb3JEVmdNZnRJRWlOTkpFVFpLRDhPNnRvYUxPWW1XditFMkpqUWp6aWd5RklyRjlXUWxPQTdOaWFXQk1sS3BSM1NmRjFPN3BqY3pPL1ZTRVZWSTBNc0pnNlVmRnZjR3FnRis5ZUVkME9TWmJRbzFEYzRzTmtkaFBqWUFHWFNwUHQzckZqeFppMFFjNkw3cnp0Mm1EdVhiV1B5bUJ1NXlxSS9qU2Vtb1dPaUFaZmJIWGdNTG8rRVJ2NTFMMDJualRWaFBINk1LZ1VzTWxSVUhiM3dQcjdxbzZ6LzZQTVd6dmNocGxReTIwYWY5Tnl4azZjemR2SUo3azJqeHVFS0RRYXNlbWNESXlkT1pkNklUb0NMNGkzdmhPd3ZxNm9DektCWXFhalZrUlFiUVhKQ0FnbFpiZGo0MU5nVGFEZ3FaTGVuUlVUUzFMNHpDLzgrQy9Dd2JQNC9tUG5hRnJiUEhuNWF6NlJydHpQTWFKSWxaTVZ6eGdFTW03V1dLcnNnMVhJYXV0eVBlMW40VFJ5bEh6eUlBU2paK2paUGZGRVNkSUFFMHBtdjd1YTAyeWcvM2toeXV6aWFrYytqVlNrNGdvZFFiU0FoeGtaRmxRdFNOR0N2b2JMZVFGSWIwSm5qS2QzV0ZQTXRxemdLUWQ4UlhXSThDY2NyS1ZjZ1RRNTFRNVVmcVlFVUU5UldVeW1NbUlNZ1EyNEJoaEZZekJHVVY5VFVQdnI0TTJVbkFMV1FraXJaVjNFUXFkUFNScXNSR2hWZWpTMUl4TXFWSzkzTGw3L3hzU3pMdzFwM2w5VXgrYVgzMFNWM29mcnc5N3grR0ZTUkptN3Q2YVg1L3VTclBSUWZxNkxSMDhBN254U1NudGlXNjlManViSFhwVXdvK0M4OWpUblVIejdJNTRxRnY3YUwrRlVEbTV5UXdhM3B4NWp4d21ZbVgySGlzVGMraG9TK1hzQ3BQY3EyZlljcFBmQWo5cU5xOHYrN0cxTkNNam1kemkyVms2bFRkeGIvcmZzNXY3ZXM3dDBvZXVrZEZtZnBTVTF1eitBZUhVaHBsOENLclZ2WTJWVmkzOGNmc1A0SEpVUWpYL25HMnd4T0dVM2xwKzlUMnFFZmZkdks2RTBEU1Z2MENOTmVhOGV0VjZSUVdWTE1IbnNiSGhxWjR6MHBxaDBEMmg5anp2TWJHTnpKek1DQmx4T3JobFgvWGdYdHV0TFpyR2JuOTVXa1oxNXovZ1pTbjBoWGRSa0xWbnhFWHRzb2NpN1A0WFMrNXh2ZlhNeVlkUjVzNzgwNDlSSndNZkVrT2I1ajJVZDd5TkU3ZU9LbER3bk5sVGVSMGQ3RG9xVWJxZXhtSmlNcmk3UTJwN1kzQ3plOXplVnpkL0h0Wjg4U3VveFNEUDE3UlBIVW9yY3A3MlVoTDY4UHlRWVQ0NFpleW1QUExpWDJ6djVzVy9VbXV2NVgwMU1QY3I5K0pEODlrK212cFpBVFdjV3JueDRoTjNod2pla003bGpMOXFJRzBqSkNOZnRGTHk4ak0vSTNiRisxa3VSckI1QitVa1ZVNXRiciszSFA4eTk5ZXZENzhtQXoxQjBDYnNLL01xV3ZSbFFvMURzRWtpU2p1RDJvMUdxMUpJUkFDQ0g1dEgvNTRZY2ZUbENyMWEzNzJSUVh4NTBxRXFNME9GeHVIQzQzamJLVzNzbGVNK09iSDBvNTFLZ21KelVlM0c3VWtkRmtKa1JqVGt5aW03NlJEVi8vd0k5S0pBK1A2RWNuZ3hwMnZkbXlqYmJkSWFuN2VabWpqZFhsS0hWSDBldjFaM1JlYlcwdDBkSFJ5UEtaaExKVkRPaVh3NEdkTy9qUC9xUGNjY3N3T3FVa2tkdTVMYmFLVWxaK3ZJZGFLWm9lU1ZHVVZsUmgxNXJJN2hnTWJGcDZaWGNtcWhVTlB5b3VnWnlPOGY4ejBOYVpVeGpjMWNnWFJUOVFyNG1oZDNvaUdkMnpFT1VIZVB1alFxSXU3Y3U5MTNTa1UzcG5VdHA0UDJEWFgzVTUvOG5mekE5U0lnditmQ3VKa1NyUVJISHpiM0w0OXNzdldmZkpWMVE2dFF6c2N4a2Q0dlFCTjhZMUEzTDQ4YnRpU3FvYTZOR2pDOUZxc05kVXNPbVRYZVIvZm9DVTdFSE12aldYaVBPMTZJMms0emY5dTFGOHNKamk4bU9rWFpwQmZHVFFvR2dNOU9tUlNtdnZhM3hTQ2xkMVR3a3lxMVgwNkpGT0pKRGNzUlBKTVZwMEpqT1hYWkxHNE95MnJGdS9sYy9MR25oZ3drMjBpemZUcjF2N3dBdC9WYjllVkpWOHo3ZUhqNUtZa2s1N2s5WVhYT2hJZWtKVVlNN2taSGNoMkRzVWJiWXdvTmNsTkhjazlMM3lDdW9yU3ZqdXgrT2tkZTFHZ2w2aVorL2U2S3UvWitYbUw5RWtaN0xnd1p1STFraWdNWExUb0N3T2ZGMUVqYjQ5L1JJYU9HcnF5ZzNkTFlIN1NoQlZMTmhWejIxOU9nYUNCeXZmZkk4YnhvNWllLzRXR2kwWkxIamdCcUkwVGM5T1p6TFRPejAwU2Faajk1N0VXZys5ODg3MnZZY0FKOUFJT0h6L09nR1hIK0JVc3F5b0pBbTFTa1pSQkU2M0I2Y2lJZWwwT3RudGRrdENDRmtJb1JKQ2FFdEt2dStla3BLeTdZSzhJUmU0cEtyMjI4OXhsKzhqTHU3TUtnOUtTMHRKU2twQ0hhNDhDTXRGS2tYZmZFZHFwMDZvbmNlNTlmZC9aT2pNcHhuZlBjaGo1YXBoMUwxUE1lZloyV1FZWk1ESnFCdkdNWGJSQ2thY0dmMGg3K1J2djIva0grYjlTQ2dIbTAyQ2VpUWFKU1NuSk9HUkpFbFJ5N0xRcW1VUm9kVVFFYUVSL3VDQmtDUUo0WTB2Q0VCSlRlMVlwQ2llUFVCbWVEakRFcGF3QUd6OWNBM2pacGVoU0pFTUhUV0pjZDJidWVFMUpsYTlOQ2ZFTDVqZXRST3haN2hna3lMRXZwRi9tSGVzbVJucXBtVzZoNUI4T1d6K0lLaEtrbEhKRW1wWmxnbnlzd1hBemUxMkY2alY2bDhkc0xralluREhwa0ZDNHBtWnNMVVNJajRWTk9GbHRjSnljY3JFT1M4dzhRelBtZmZhVzJmY1RyMnQvdE1UK05ZOFNKSVgxQ1FFa29Ra3k5NElzMXFMU3FORjFrWWdSK2dDNlI1SWt1UlQycnlJYUxWYXQ4VEd4azc1dFEyT1IyZkNKVWRCd3BucHhvMlZMa1Q4SlJDbUJnOUxXTTZyZkZPNmN4K2hhUjV1d0NOSlVwREdKaUZKc3BCa0ZaSktnNnpSSW10MXlGb2RxZ2g5azhiV0xKOU5NWnZqdHltSzV6RFE3cnplUmZidld2N1d0bnQ0ZE1NU2xvdFFoQkRsbDEvZXU3U1pDZXJmZkpSRlVnaHJyaXpMZ1UybFVxRlN5VjVnazJWWmVEeWVZRk5VQUI2UHgvT0JTcVdhY0Y3dkpNeTdGcGF3aE1VbkRRME5XMXZUMW9LMkVCNDJXWmFGSDhPOHdPWUZON2sxamMyUGpIVjF0dndUZGFER2F1V0hZN1lUc3dONFF0T2ZGVVhCN1FuZGZ2V2lWTE5pOFNJV0xWckUrdTFGdjdyYnF5a3ZZdldLNVN4ZmR5RUM2RTRLVnErbTBuRVJ2TjJPS3RibmYzYkMzZnUyYjZTd05MVFdldmVXTlJSVnRGNGxXbG04azVYTGw3Tm15KzVtODlQSlp3VnJXYjVzR1h0S203aDRQaXRZVDVYemYzUHJCdzkrOTFVelVITUQ3bEF6bEJZYVd4T2dxVkNwMUY1ZzgyOFE0RFlTZ0JJYkc1c1BIQTU5R0RZZWVQcFZybCswamo4c2U0ZStUNjNpdjVYK0F1UkcvcjdzYmZMKzlnTHBjMVpTRmpqSnhVUC9lbzIrODN6YjR5OXo2Y3dsZkZRamZ1VXpWTVpnTUZDNjR5MFdydDd4aSt1OXUyUUxvNmM4MWZwTzZ4NEc1VjNQOXFKU0tpcHJPUCtmS1R0UFRIdVF3b3VBTzJIZE0zOWkvYjRURTZXdFgvd3dxN2VYaGZ5MjhkVy9zKzJBdFNWR2xtd2lkK0NkN0NrdG83STY5T0d0bmZkNzduM2liY3JLSzdEYW0ybzdiSHZXTUgzK3h2K0pHZHFqUjQvdmZlRFYzQXh0S3FYeUZZWUdZNWNYMEpvMnRVK0ZrNXJTUGlRaFNTaENDQVZRUEI3UEJwVktkVmZUdTZyaG5sRWp5R3p2TFJOWnZmNDk1dVIvellaYmV3TXFCdWZsY3RlZ0JnWTkvMFZRbHpVOCtjRHZBMytWRjMzSnlNM0g2V09TZnVXNFptTFlyV1BSVlg5Q1lja0p0SjdLTW1yY09sS2JNNlFvVHNwS3k1QU5acExNb1RXUURsczE1WlZXekVuSkdIWG5LYTlPVVhEVWxMRnArMWU0M1c2UVpkVCs1R1JGd1ZxMGsxTExRT2JObk82ZFdLZDFUVUFHZTAwVmxUWklUVzY2WjZlOWhySUtLMG1wS2VpQ0wrWjJVRkpXaVNYbERKZHVWSnlVbFphamo3VVFhOVNGZEtLeXJCUzMza3hTck9IMEFONWhwY29HbGxndFplVTFKQ1ZibXU3WE4wNDZjeEptUTJnNzFSWGxXSjFxVWxJc0ljOUhBUlM3bGJJcUc4a3BTYUdKdmM1UzVpM1p5Y0xkcjdSNGVCV2xwZWpNTFdtL0ZMZWI2VXMrUWEyV1cxaEp4VHQyWU9oN0M3T21UME9XMVNIbmJOKytnM0ZUTmpONWNHaCs1c0R4azVpYS9RQ2xVNGFRY2dGalpYYTdmY3NKZkd1ZUlQK2FBZ0VmVzhBTTlXdHNhclVLdFZxTjJtZVBFbXlTK3NLakN1Q3BxYW5aRUJjWDF3UnNSSkRadnFrVUtpVTJCc2NSZjZHem1zdlMya0Z0eVVsdjRLMmRleG1XZlRVWGRYeFJzVEYzL0EyOFd1Z21SVjlEbGJFdkc5YzhqMFVIOXJJZERCNTBHN3IwbnNqV01tTDczOCtLeDhZQnNPWFZ2M0RYM1BWa1phWlFldUFBTTVaL3pxZ3N3em52M2hPVGg3Tis1dy9ZRGxReGFNaDFxT1ZFRnE1ZFJtY2RQRFp4Q0p0Mkg2Ym1ZQTFEaGx5SG5Ib1ZHNWZNUENXNGplL2RCbjMvQ1d6TjM0SmVkakJneWdzOE1TR1B0Zk1mWk9xQ3JXUjBObE5VMnNpcmE5YlROODJJclhRN2d3YjlEbDE2Rmc2SGk1b2dqcUV4bVpHTVd0WEFxSzVRczJNSlhhZCtTc1dPRndFNHNHMHBvOGMvU216bkxKeFZKUXlhOWlLengvVEdYcjZMMFNOdW84cVlCbFVIU0IzeEtNdG5qejFwdjhmbnRxWEVuRXZwcnMvb210c0hhL0ZYOUp6NEFnc21EYVJ5M3laR2pya2ZiWElHTlFmM01YRDY4enc1Y1JCUXdjaXNmbFFtZENhV0dnNVVtMWk1L20yeUxEbzJQbk0zajZ3OVFpeU4yS3VLY0diY3lmWVZzd0x2UWtuQktpbzYvNGFRSVhWV01XbkVOV3lyU2NDRUE3ZXRtc0ZEZklwejRUcEdUbnVXb2wzYm1MNzhXNllPU2ZhZFZNV1VrYjlqNThFREZGZktEQm15R1V2dUxTeDc3QzVLdHk1andwelhLTnBWanFIOE50WTlwV1BjckpjWTE5OWJGb214SjRNN2w3T3FvSVJwUTFJdjJDdXhiOS8rTDA5aWhnWnBiS0ZCZ3lZVDFHdUdxdFZxU0U1dWg5bHNscUtqbzZXSWlBaFpyVmFyWkZuV1NKSVVLVW1TVVpLa0JDR1VmVUlvb3NYbXJCUDNQZk9TV0xqM2FPanZOY1dpNTZ3M3hhRld6bkhWSFJKNXM1ZUsvUTJ0WE84Q2JFZU9WSWhEaHc2ZDhYbGZmLzIxYUd4MG5GV2JIejUzajdqK2p5K0gvUGJEQjArS3hGNjNpRnFQSW9Sd2lEOWZmNmw0OElXdFFnaEYvT2U1ZThYVjl5ME1IQnZjN3UyWHhZaFhQcmY2L25hS3hrYjNTZHYrOGFQRm9tMWlva2hzdGozNnhtZW43SGZEMTh0RlRLODdXdDEzL1BPWFJlS1Y5NXpSYzdpalY1UzQ1cjVuaE10Ly9RYTdxUDFxbFVqc2VKWDR2dFo3SDErOE1VUDB1bjJ1RUVJUno5N2RSL3p1OFRYZTlyNWFJV0trUlBIaGo5NXpiK2tXSWQ3YTcrdkxmeGVMeEN2dTlMYmpLaE5YdDQ4WHIzeFM1bXZYTFk0ZHJ4RkNLT0xSbTd1TCs1N045eDFYSlc3czFrNjgrNjM5NUgyK0lsRzh0ZDhwWHZ2ejllTDJmNndSeHo1WklycjlkbzRRd2laK2Yzazc4ZmYzOXdnaEZPR3AzU042dGI5VWZGSHJIYy9hMnFicnZ2Ym42OFR0dnZ2WThQU2RvbDIvZTBXOVVJUm9PQ2g2dFdrblBqN2ExTjViZjd0RjNQancwcEErZlBIR0k2TGp0ZE5FbzFDRWFDZ1ZWN1hUaUVmZkxBdzU1cy9YZHhCUGJ5aHRPVy9mbkNWNjNQRkVxL2YyeCtzN2lPYytMRzkxMytzUDN5aHUrZHZLQy9aZUtvcW5DQmdOREFjR0FibEFOeUJWa3FRRUh4WkZ5cktzVWF2VnFvaUlDRGs2T2xveW04MVNjbkk3MHRQVHljcktvaytmUGx4NzdiV29aVm5sanloSXNpd0xSVkVrWHhEQmI0NTZuRTduZTFxdE5wUjBUWEh4cjdjMzRFNi9nbnN5VHI4OGFkdk8vY1JmMnBXdU9pNXEyYlhyUzNyMnZRYWpES0Jsd09BOEh0dTVHeWIySmJOM2Z3N00vVFBqNVJMNjV2Vmw1TWloK0lta0JnenN5NXk3YnVUQXlPdm9PMmdvUS9OT3pzbG02WDhYNVJWMy9XeDhqbVBHamcyWVhqcWRqaDNiQ2xEMHNHanVYN3pUcXFxSVBidDBLTUN1blhzWU9NRkxHbURLR2tCUDg2a05YdmVCYlh3bTkyWnRYbEtnelZpVEVhaGt5OVlEeEpvL1lNYU1ENzA2amR0QjRlNFNocWQzUGNrVjlSZ01hakFhTUJsaU1SanRPT3cyc081ankyNDdjc0hyek5qcU5SV2Q3bEwySExTUm5hMWp4Nm9uV2JqaVF5cXREbW9xaWtrZGRYUGdpajF6ZTZNSDBDV1JtbEJEVlEzZ3M4cXJxNnN3SllleWdSVHUvcEs4QVhkNnRUcGRNZ1B6MHMrN1Q5TVlhNktxN01JNU5HdHFhcmJRc3RJZ3hCU1ZKRWtKckJzYUVnME44cTJwMVdnMEdxOHAyc3djRlZKVHRxNENlTXJMeTllbnBxWStGQlR5Wk1WN0cvaFk3c2dyMTJWdzJyWEhTaU1yc1NPZ3BBQUFJQUJKUkVGVWR4WXpjc1JGbHVKeGhzWFpDYjNIc0c5M0xnWDVCYXhlK2plZVhMR2RmV3ZuSWdNVG5ueVgvcnUyVWJCbEN6Tkc5V1Azd285NFpNU0pDMFFxZDZ4ZzhMMS9iL0g3dU5tdk1XMUUxb1VQcGhoYmtnOVkwbm94WW9SLzdZWWJHVFU1OXBTUHpPdlY4enJ0RkVWcGV0RlBlcUtlQVVOdm9uZUM5NjhSSTI0a0pUM2w5QVpQOWpGRWVPRVRVRkMwWmdhUHZKRVUyWCs5bTBucnJLZDh5MEltTFBpQy9JM3YwVFhCd1BvbjcyUitSUk1VcWVVVCswV05KaE5XcTdXVlBzZ1hkS1JzVmlzbWsrR0N0YmQxNjhkZk5RTTExMG5NVUJHYXR4YmtXL01CbSt4UGFHc0N0d0JWZUNBNm1wYldhWitpS0p0OHNRdmUvL0JEL2wxbjVzV2JleEY1QnMvNzZBL2Y4SW1uTGNQVERCY1ZybGxpMjFKY1hCTHlsYzNPdm96ZDIvNkRWUUZ3c21YamRuSnllZ1ltbFNFaGxSRzNUbUR4TXc5VHNXOC9EcDhEMldxMWs1N2RuNG5UWnZIUStMN3MyWGZncEcyYnM0ZXpmdDE3ckd1MjNUVzQ2eW43cmRYcFVLcXJmSDA4ZlZuMnhCVG1MczAvcldPeit3Nms2c0JYSkdYMkpqYzNsOXpjWE5KOFFZWHMzSjRVYlBHbWt0UVVibUZYVlZOSFlzMUdTa3U4a2NFZDIzWUVucTA2dlMrOWxjOVlHWWdhS3RUVVdJRUVCdlJQNW1DRk05Qk9ka2JuVm9IMjlGU2FUQVptMkNtMXhnYXVsNW1laHRFZ1UxRmFTa0xYWG5STk1JQmlZKzI2Z3RPK2JFNTJML2J0Q2FXS3o4NitqTzFidG5sWGczT1VrYi85NFBuM2QrM1pRMDUyemdWNVA5eHU5K1lSSTBZY0N3STJGeTBUYzROeTE2U1FaTnhnMzVwR28wYXIxYUpXcTlWK1VQTkZSMlVoU1FyTnpWRzd2V0d0d1JBMW1JWWpQRjd3SFZaZEJBUG43dmUrQVBGcGZITHYxUURNWHZ3cTcxYzRxWE82dVhIT1MyVDJ1SnpYYnZScUJtOS92cDkrdlhwaGtpOHFYQ056K0FUeVhyNkp0SzV2a1RYMFB0WStOWm1VUVJPWnN2eDljbkt1SWtWbnBjclluNDNqdkdiWFp5dG1NL0daajhuc21rSng0VzRtUGZLUzEzVEJ6VVBEZTdCTFNTZko2S1N3eE0zeTlZTlBybTlvOVNRbG45M0xLNmNQWkdydlo4bkp1Z3lqSVpWbEJlL1E5VFF1dFdQVFcreE83OHdqNDA3Tk1HL01Hc0hpU1I4eHNHZDN1bWFtVTFWeWtLNmovc2FyTTBkeDF5Ti9aK1hnM3pGZzY0czQzWUxrSUZOMDNNUzdHVHErSDV1eU9tTXhSeURqVy90Qm5jU2k1ZjlnekxpcldOWTFFNldxakVGVG4yZm1tTjQ4TlA4VnhvNjhuWnpseVZpMERnNldDWlp0M1VyT1dWSGc2Wm4zNmt1TUhuTURhNS9xaXM1WlNhbXRIZms3VjVFMWREem1KNjRuYi9DbjZPeFZXQkxTVHZ1cTZZTkdZcGgyR3djZGorRmYreWRyMUJTR0xiMkduTHhyaVpWZEtPWW1tcCtYWjkvQnkvbkZGTytyUUZkeUU2c2Uwek5qNFhzTXl6S2UvWVMxSDJEakxpUExsNlZma1BmajBLR3lUMW94UVYwbk1FT0ZKTWxCMGRBbVRjMnZyV20xV3FSdTNiclIwTkJBUTBNRGpZME9xYkhSaWN2bGtoUkZrUlZGa1lVUWFrRDdmLy8zbVBIaGh4L2VCclQvSllOTVpXVWxUcWVMNU9RenF4VGJzMmN2blR0Zmd2WWMxNHJXVkpWamRXdEpzWVMrWFU2N2xmTEtha3dKU1pqMDJoYm5WTnRsVXBJdHFIOGxId20zdzBaNVJSV3hsaVFNT20zd0Rzcktxa2hJU1ViYjdGNXRWZVhZTUdJeHQySUJLRTdLUzh2Um1TM0VHa0lkdXRVVnBUalFZN0dZejRHQnAxQlJWZ3E2V0N6QmFUbUtrOUtTY295V1pFejZNMHZKV1Q3ckpuYW5QY3dUNDN1SHRGTlpYb2JPbEhSYXRPNC9SYll2bWNhVHBUbXNublArWFVaQ2lMS2JiaHI1NTNmZmZkZE9FMFdSRGJCSmttVEh5OFBtbENUSkxjdXlJc3V5b3RGb1JFU0Vsb2dJbllpTWpDUXlNcEtvcUNnTUJnTkdvNUhZMkRaSVBYcjB3RzYzMDlEUWdNUGhrQm9iRzNHNVhGSXpqallOb0d0c2REeWkwV2ltaG9FdExHRTVmNkpZaTFtNnFZVHhvd2IrVDlvdldQVXE2VVBHa1dJNC8xOU5xOVg2VWt5TTZRT2dnVkR1dFhwSmtob0FoeVJKTGttU3ZOeHJhclh3QWxzRU9wMFgyUFI2UFZGUlVVUkhSeE1URTBOY1hKelhGUFdib3lxVlNxaFVLc25qOFFoWmx2QjRSSENKbGZ2UW9VTnIwdExTcG9hblhsaCtQVkxEOG9YTHFHN0ZqMmpKN011b0FSZCt6VmJabU1iNFVXbi9zeWN5Y05UNEM5Ylc1czFiZGpYenJaM1F2eWJMa3ZDYm56NnNDakpCMVdpMUdpSWlJb2lNMVBtQlRVV1FyODBYSFpYeHhrWUQwVkVsUGYyUy9XNjNhN1VzeXlQREwwUllmaDFpNHRaSms4T1A0WDhnalkyTjYwYU1HRkZGcUYvTkJiZ2tTUXF3ZVJDb0RRMWw4UWpHTHI5dlRhZUxJREpTajZ6UmFBSUhCS2QrQkJmRyt3SUpIcnlWQ0crSGh5UXNZUW5MVDVXaW9xSlBXdEhXZ29NR250WW9pcHFuZUdnMEdqUWFMVnB0QkRxZERyMCtBR3lhUUxqVXIrS3BWTEpvenZZQmVNem0rQUloeENmaFlRbExXTUp5dHVMeGVIYjA3SG5aOXlmUjFscXdlYWhVVFdhb0Y2dlVxTldhRnRxYXdSQ0ZXcXZWb05GNGJWU1h5NHVBYnJjYmIwV0NncUlvQVhBVFFuZ0FkMzE5L2IvZGluSmxyVXVtWFJ0RDY1RTVqd0JWc3lKM2o0dnk0ellpb2d6RVJZWXB0bi9Pc3J0Z05Uc09WSUl1aVhIamg2TVBQNUt3bkVNNWRLanNQeWZSMXZ5TXVVcG9zYnNxeEFUMTQ1YmZ0NmJUZVFNSjBkSFJxTFZhTFJxTkZyWGEyVW9Rd2QxaW9SZkFrOUlsOCsxTEg1dzdNVEhDazFudWl1VHBjZGZUSnlFU0wyM1JPdDc5cm9wS3hjU1d2OTJDdnlUM3lLRnZHYjlzRzNHV2VJNVhIcVZ6cnp6K09hZ0xjbmlNVzVYeUhUQm5DeXlhOGI5cFg2dlRZNUFybWZyUUc0d0lBMXRZenFFb2lyS3ZYNysrZTFyWDFwcVcxc08vWUlza0NWbVdXZ2thK0UxUXY3WVdpY0VRaGRFWWd4d1JFWUZYYS9PYXBFM2dKdnUwTmptUXJPc0h0dVBsaDl6NUQ5ejA1dW9IYitlaGpBam01SC90NjdLWHR1aTllNjZoK1JyamIyejlsTzU1VjdQczk4TjRkOUsxZkxwNU8xODFYQ1FENmZ2WFdnVmxGYUg3N0RWUVhFcklTdWVLQXJaeTJMb0wzRzdPYVBWdkJlOVVLU2tHdXpPMEE3YnFsdTJmU0RMeWhqQjI5RkJPRlBGM082d1VGNWRnZDdic1hFMWxHU1dsNWJUWXBUZ3BLeW1tdk1vYWZyc3ZZcW1zck54WVZuWTRHTlNjQk5ZTERTbWhVa0sxdGVDZ2dkOEViZExXb3FLODJscWJOaWJraUFnZFdtMkV6d0hYbE1HclVxbUZ2eUloS0lqZ2F3ejM4dVhMVndMZnBjVEc0R2dNcFMyS2kyeVpRR2pRYWxINWw3T1hBTFVXZytyaUdNaitGcGoyRU9RTmd1R0RZSUd2T0czeERPalpINlpNZ0t6ZVVGVHQvZjJoTVRCdU5wUnNnU0ZEWVBBWThPMGkxd3k3ZlJ5RWUxWkF6N0ZON2VRdmdBRmpZSEF1akJrTDJTTzh2ODhZQ1VOR3dzZ3hNQ2diSmkvOGlXYnEybWZvM0xrWFU2YmNROWZPUFZpNW85UzN4OG1URTYraDc5QTdtRHI1OS9UTUhvNS9qNzFzQjMwekxtWDg1RDh4ZnVTMWpKbTVOUHlHWDRRaWhDaWVOZXZSTDA5aGhyWW9lUGVWVFluZzlBNHZzRVVRRWFIekpla2FpSW1KSVRZMkZuVmtwSTZHQnE4NjUzUnFmTDQyZGZNSWFiQko2Z0U4ZDk4OTBYcmI2Qkd2di96cGQ3TkhYenY4bERkMHgzWFg4TURybXhoZnZKZnFZelhjT2ZwYUxybFljbDNkRXRXeGdqMCtabWFIQTRyWHcyTmJvWEFYbU5Td2RpNDg5QlNzZlF5ZVhBa0gxOENJRlpDLzRzeWEycmtOZHU2R0RMTzNuY0NISlJOV3pZR2FIWkE2RVo2WkJHZVZ2NjVVTW0zUy8rT3h0ZDl3YTdhWmZhdG1NMkRhWTR6WXZoaHR6VzRXckxLeXBlcHpVbVZRbk02QXRycGp6VkswQS85RS9zSjd2UkRvZEliZjhvdFFqaDQ5K3Q2TEw3N1kySnEySmttUzN3ejEwRVQvTFVJam9jR2dwaVVpUWt0a3BDNmdyWmxNSnN6bWVPVElTRDA2blk0bVg1dUdaa203d2VrZklha2ZrMmIrMzcvZDZWY1VudzV0MFpiUHZxQlNaK0dlcTdLNTUvSjJ2Skcva3dBLzVhOWRaTUd0UVpxVlRnZmJ0b0FlbURjVFpzeUFqYnRoVCtGUGI2cm5VQytvK2R2eFM1NnZPc2VVQXJwcWIzcjMyVG4vQ2ltMFp6QWcyOXRJeHNCQnFBcy9wMVFCak9uMFQ2OWt6TERibWZ2TUluYVgxUVRBTTdOM2Z3NnNlWnp4azJld1pQazZiSW82L0paZmZOcmE5MDg4OGNRWHpVQXRXR05ya2VMUkhOUmErdFowdmtpb0lWQjFZTEVrSWtkRjZkSHBJdkg2MnJUNG82U2hxUjhxRVFScUN0NElxZnVWK2M4Yy8vdUFqa3RQSFFCb1pPV24zM0xidFZmU0o5WEM5ZjM2MHMxVndxYVMrb3NFMk1Cb2FPa0xTK2tKSTBaNHQzSFRZTlVUWithelU5d3Q5eGxQVVBzY1lNbzVuOUVhT1phbDIvY3lmL290eUJXN0dOejdjcmFXZVRVekx4WFRSNHpJNjh6V3BYOGpiL1JNbFBDN2ZyRnBhMnYvK2MrbkhNMU1VTCsyMXVvU2U4RVlGRnhoNE5YV1d2cld6R1l6YXJVYTJXQXdvTmRIaG1odFRVbTc2dGE0Mm56Z0pua2tTWEt2V2JuaVRTSEUvcFBma2dwRGhJb2ZxbXE5TDZTamxrUDFFZ2JkeGZ2VjdqOEFEaFJDMXh6SXpmVnVLVUYxOEhvaldDdERnd29BQ1VZbzlUSHliUHZzUEhmU1lNYnNMcWVrT3FnWFNabGs2ZmV4WlZjVkFQc0s4bkZuWGU3bEpIUGFzTHIxOUI0NGpCbnpGaklpM1VGUmlWYzNQREVWVTFndUVtM3RtOW16Wis5c0JkU2NRZjYxVmxJOFpFSkxwMEsxTmIwK3NwbTI1bVUrVVVkSEc2bXJxNk8rM283RDBVQmpZeU5PcHhhTnhvWEw1VUt0Vmd1MzJ5MTVQQjZoZU1OelFnZ1VFSW9RZUNaTXVMUDJoVHJMYXp1bVhEY1BUa3hiTlBuNks3bDcxWHQ4c1RPZW1xb3Frckw2TURSbzdZU0xUZEtHd3N5dGtKTUZtZW5lS09iUWgyRHVPQjkrNUhyNWtiT3l3SkFFR3pkQ0xEQmhJdHcxQ0JaMkJiTUJPSi9VZHVwVVpzOGF5cTA5dTZBM3BiRmkrNGRrR2l3OHRlQ3ZqQnJaaCtXWmFlelpWODZDNWU5NzJWMXJDdW1mZXp2bWpDemttaEpxRXNZd0w5ZkwvWHRpS3Fhd1hBenk0NDgvcm4zKytVV244cTJGSk9RRzBSS0pscUFXRVdEMWlJNDIwcVpORytMajQ5SDUvQy9TYTYrOVNtbHBLUlVWUnpoMnJJcWFtbHJxNnF6WWJQV255L3FodmU2NklmcDE2OWF0a2lTcDkwbnZ6dU9pdkxhZWlNaW8vMW1DN3MrTjNjTmhnNHBxc0ZoQWQ1cVhycTRFUlFkbTQvOXVvcm9kTnNvcXFraElUa0VmbktHdE9LbW9LTWV0TnBHY0VFcHhmVElxcHJEOGVrVlJsSjJabWQyZjJyOS92d012aTBlOWI3TUJkaCtMaC9OMFdEd01CaStRbVV3eHhNV1pzVmdTU1VsSjRaSkxMcUZIang3bzlkN1BwYnBObXpiVTFOUlFWMmZEYnErbm9jRkJZMk1FV3EwVGw4c2JJVldyVmNMdDlyTit5SGc4bmtDeUx1RFpzR0dqMDJxMXZob1RFM055WUZOcFNJbzFoVWM2U0hRR1NEMURyU3MyNFgvZmI3WE9RR3BySFplMVdKSlNXejFIcXplU21tb01EL3BGSnNYRnhlL3YzNy9memFram9RcE5xN3Y3dExYbXZyVUlINE9IVjFzekdyM2FXa0pDUWdEVUFHU3oyWXpKWkNJNjJvQmVIMFZrcEk2SWlBaWZyNjExZjF0UTFDS3crSUxKMU9ZOVJWSFdoNGN4TEdFSmkxOWNMdGVIbDF6U2VYOHpRRHVsYjYwMXY1cEdvdzNRRXVuMVVVUkhHM3pwSGVhQWJ5MEFiQWtKaWNUR3htSTB4bUF3Uk9GTi80aWdxU0pCN1VzQlVZa2dDdkdRRWl1OGl5NjRLaXNyWHcwUFpWakNFaGEvZlBubGw1c0lUY1lOQUp0UFczT2ZYRnZUTktzSGJTcDBOeHE5eWJnSkNZbEVSVVdGQWx0U1Vsdk1aak50MnBpSWpvNG1OUDBqSWtocjB6U1BrcmJRMnRxMlRkcnVjcm1XaEljekxHRUpTMzE5L2ZJcnJzZzkxQXpVR2sra3JmbVgxR3RlTnVXbkpEcFJla2RTVXR1V0hwSEl5RWdzRmd0eGNYSEV4TVRnVGYvd0p1MUdSR2g5S1NBQmN6UzR6RW8wcXlGMVM1TGsycnQzNzFMZzhLOXRrREl6dTRWcHdjTVNsdE1VSWNUaE5XdldiRzFOVTJ1bXJZWGtyYlVXQ2ZWWEdQaTUxcHFuZDBSR1JyWUVOb0NrcENUaTQrTnAwNllOUnFPUnFLZ285UHBJSWlMODRLWTViVi9iWlpkbGYyZTMyMThJRDIxWXduTHhTbVZsNWNxeFkyOC8za3hUTzZHMmRpTGZtdGNFMVJJUjRjMVpDdzRZeE1mSGs1U1UxR3I3M25YSXRWb3NGcTlKNmcwa1JLUFg2d09CQkswMklsaHpFNG9RT04wZTRmWW9RaEZOckI5K2RPN2FJM3Zwcy9tRm0wTTRITndPM3Zwb0I5TlhiT0x4L04wY2FSVGgwUTlMV0g2RjRuYTdQODdKeWZuOE5MUzFrS1gxL05VRnZsUVBYeVZVUkZEQUlMZ2UxSXpGMHZhRVZsUWdBYWw5KzJUOGdZU1lHQ01HZ3dGL0hXbXcxcWJSeURqZG9OWm9VS2xVSUFUQzF6ay91QjA2ZU1DNVlNTi9sd1FEMjdMMzEvTjZpWk14ZmJLSXN4NWl3cXJQd2lVMVlRbkxyMUFLQ3d2Zkx5czczTHk2b0JGb0RBWTFINkFwd1RXaFRWSFFKbTB0dEI3VUdBZ1l0RytmZk1JK2hGUU9KaVcxSlQ0K0hwT3BEZEhSWHBNME10SnJralpwYlRyTWJhS0ZJVEtDQ0sxR3FGU3k4R0pid0ZiMlNCS3VnMC9kOTdITDZmeVg5OHFONU84OXdsM1g1cEhUd2NMRUcvcmcrcWFJcnh2Q2t5QXNZZmsxaWRWcWZiVlhyNXdTSDNnRmcxcHd3WHR6dmpXZnRxWnFSVnZUaFZRWW1FeCtFN1R0U2ZzUkFteUppWWxZTEJiTTVqaE1waGlmU2VvRk41MnV5UnoxUlVtRldxMUdCTkdMTkdsdGtodHdiaXNvZUVVSThTVjRjQ3NDbGNyWG5LeENKV3dVVjd2Q015RXNZZm1WaUtJb1h6My8vS0xtQVlPQWIwMlNKQ2V0KzlaOEpxaEdOR2xyVFdWVDNweTFhRXltR014bWI4QWdNVEh4OUlFTm9GMjdkaVFrSlBoeTI0d1lERkdCSW5rL0E0Zy9rQUFLaXBCUWE5UUJJa3BKQ2pCZ3VzZGRON1RpK1BIakw0Q2VQcDFpV2JXOWtLTTJPeDk4L0NVL0NJbUdSbmQ0Tm9RbExMOFMrZmJiYjFmUG1ESEQxZ3FvK1RVMlA2Z0ZwM2kwV0hHcWlibkRYK1FlNVZ2aFBaYUVoQVRhdFR0MU9XUUxZSXVKaVNFcEtRbXpPZDZYMjlaa2tnYURteXhCbmNNamRIbzlHcFdxMWFSZEpNa1ZGMmZlNEhLNVhyejd4aUYwNXdpVFh0L0FwMG9pQTJKVjZIVmhUcTZ3aE9YWElEYWI3WTJ1WFMvOUpzZ0ViV3ltcmJXYWpOc1VNTkNJNXFBV1d1VHVKWkJNU2tvaUppYm1sUDFwRlZuYXQyOVBkWFUxVnF1Vit2cDZYeUY4STA2bkU2ZlRpYU9obmlPMlJvd21FMnFQazhaR0JVVlJFRUlJUlZFVUVCNGhrQ1NRa1NUVko1OTg4dkpWVjEzVmE5cE52OGtHY05lVmMvVzJhUDRVSDE2cEtpeGgrUldZb0x0ZmZmVzF6YTM0MVlKQnpZVTMxOVVqU1pMU1BCbTN5YThXV2pabE1FU0hGTHkzYjkvK3RQclVLckJwTkJxU2s1T3ByYTNGWnF2RGJyZmpjRGk4bEVhT0JyNCtWb2NxTWdwSnVHaHdLOEl0SkVtdFVna2hGRHdlOE5JYVNZb0FOd0xYMVZjUExOdno1YTVGWDNxaUZpZHBGZDc1K0hPeWNudlRNWXhyWVFuTEwxNisrZWFiMVE4ODhJRDFKQ1pvaTJSYzM2cFRMZEk3dkg2MWxsSFF4TVFFa3BPVDBXaE9EelJPeUtkcXNWaWFKZTVHKzJwSkk0bVBpOE9randDVkNrbWxRcEs5cUN2TEtpRkpDQ1JKU0pLdllsL0NKVW1TTS9PeTdFMmxKU1hQcmk4NlRNL2VmWGw2Y09md2pBaExXSDdoVWx0YnV5UWpvOXVCazJocmZtRHorOVo4QVlNQXFJVXc0bnFqb1A1YTBPaVFSTnptaGU1bnJMSDVKU1VsSllqU3lPNmpOR29rUFZueGNiYlpxSyszMDlEUUlCb2JHeVdQeDROYXJjYmo4UWlmQkJaWmxpVEptVmhUK3RLTTMvKytteXpMZzhKVElpeGgrV1dMMiszZTh1aWpzejl1Qm1vT21uTFdUaFFGRFRaQmhaZTFJNWc4VXU4elFVMCtFOVJDU2tyS0dmWHRwQXo0VVZGUkpDY25rNWlZNEV2Y2pjRmdDQzZVYndvbStHdTdWTDVBZ24rcFBvSXFFdTY2Nis3amh3NGRlZ0VvRDArTHNJVGxGeTAvZnZycHArODkrK3l6RGEyWW9JNW1KbWlnd2lBMFlLQVd3WnFhdjhEZFlJZ09MS1BuTjBHYnMzZjhKSTBOdklHRTJ0cmFnTllXOExVNXZkVGhicmNidDl1TngrTkJVWnFDQ0VJSWZPQW1DU0hjZ0NSSmtweWEydkZ6cTdWMlFYUjA5Tnp3M0FoTFdINlpjdmp3NFdWOSsvWXI4NEZYTUtBMU4wSGRRUlVHb21sUmx0QmdnYi9BUFNySzRFdnRhRU44dkRlMTQzUURCbWNFYkFBZE9uVHdSVWh0TkRRMDBOam93T2wwNG5JNWc0RE5qY2ZqRVI2UFJ3b0dPSi9XSnZsTVVwY2tTU3FqTWViZmpZMk9OSzFXZTFkNGlvUWxMTDhzc2Rsc2J5UW50OTlGYUdwSGN4UFVSV2paVkFzVHRJbGpMYmpBUFpTT3FFT0hEbWZWeDlOYWpDMDZPcHIyN2RzSDBSc0ZNKzc2cXhMOHhKU2FVNW1rVHFEeHd3L3pseWlLVWhDZUptRUp5eTlIM0c3M1I0c1dMU3FnOVFob1FHTTdtUW5xQnpXdE5xSlpkWUdCbUJoVGdJNm9mZnYyUkVkSG4xVS9UenREdG4zNzlsaXQza1ZlUXJVMnYwbnF3ZVB4NFBFb0p6SkpFVUpJUHRYVU9XellzUEx2dnk5K3ZrT0gxQTZTUktmd2xBbExXSDdlSW9RbzNyRmp4OW8vL2VtaHVsWk1VQWN0QXdhZUU1dWdYazFOcDR2MHNYYjRPZGE4QmU3SnljbG5aWUtla2NibWw0NGRPOUt1blRjRkpGS3ZCMDBrK3Fpb0lHTEtDTFFhRFpJc0MxbmxYMGsraEcwM0VFaVFKTW5ac1dQYXpwcWE0OC9SY3ZuTWkwYXNwWHRZdjIzUHVibk85bjBYcE0vYjFxK2d6UHB6ZjY2d2Z0dUZhczFPd2ZvdE9IOGhjNlc1ZkxacE5RZXJUL2tLdW91Ly91L3lmdjM2bHpYVDFsb3pRZjJKdUw3cUFxOEpxdEg0dGJWUXY1cS9aS3BObTFqaTQrTnAxeTZKamgwNy9xUjdPaU5nMCt2MWRHaHY1cTFQQ25uOTZ6SStLU2xuMDNlVk5LaTlOcklrUEpSVTEzSE03c1JxZHdpN1MwRldxWVVzUzBLU1VCVGhYWXRVQ09FV0FwY2tTWTJ4c1hIdk5UUTBQUFZMQWFJbkpvOWtXOW01STF5cUxNem5tWlZiZnZKMXlqOWJ4U01MMTE2UWUxcncwTy9aOFRPUGExY1d3ak1yVzNsT08rRGVlZWUycmQwcjUvRmt3VUcwdjVDNTBseGVubk0vMjRwdEp6M20yTEhxRjlONzlOMFRwS2s1Z2pkSmtocURRYTNKQkpXRVNxVVdYbERUaWhQVmdYcnoxY3kwYlp0RWh3NGRRbGFjT3UvQUJ0QzJYWHNtL200TTgzOC9nZ2R1R0VTLzlrYjIxemlKaW9yQ0VCM0RwUjNha1o2VVFMdUVOa2hDd1lXTUxLdUVJb1FBU2NpeXYxQmUrQmtBR25OemM1ZTRYSzdYZmdIK0JRcTNmVWhaalRkb0VpcmVDYXc0YkJRWGwrSU1tcy8ybWlxS2kwdXd1ME1udWFJb3BBNlp6TWI1azF1OWxzTldSVWxaMVpuMTBXNmxwTFNpQmRlZHcxWkRTWEV4Tm9mN0RPN0p1MzVvY1VrcGRtZkxGN1Ntc295SzZwWXZoSzJxdk5WK0swNDdKY1hGVkZudDUzV2NGQVZTaDhERytTMS90NVhEMWwzZ2Rudi9EdG52Z0pJU3NMZWllaWw0N1lxUzR1Yjc3VHo1eEJ0TW1qVDJselZYRkNkbEpTWFlXaG5YNXVOa3Q5di8zYU5IaitCOHRSWW1LQzFUTzN4ckdLaEVNTWRhODJDQm56aXlLVit0UFczYnR2M0pjK0FzcXRBanVLNXZUNzc2U3NadWJ5REZrc0NudGRVWURCRzRYRzRrV2NhR2dzZmpRYTFSQzZGU1Myb1pISTFPWkZrU0VpS1FBaUs4S1NCU1llSFhja0ZCd1l1REJnMUtVS2xVMS8wY1FhMXczVE5NZStaZENnL2EyWDNYZFN3eHFCazI5WjlNSFpZRndLdlRiMlIxVFVjcVA5c01laDNxekp2WnRtUUdUOXc3aUdXN1BhUWw2Tml6cjV6WnI3N04yTDdwZ0lOWjQ0YVRYL2dOdHF6NzJMTnNScUN0UlZOL3c0b0RjYWpkeDZrNldFaks2TWRaTzIvOEtmdFlYYmlHQVlNK1FFYzFGZm84Q3RZL1Q0SVdWczRaeTZ6VjM5TTUxY3pCd2lMR1AvRUdENDNLT2VVOXJWdndJRk9lMmtSR1ZtZktEeFF6ZCswWERFbjM2aVhMWm85bnNmVUkrM2J1WXVyTC8ySDZzRXh3VnpOci9NMnNMRkpJMGR1cE52Um0zZXAvWWRGQnhlNDFEQjcxSjFJeXM3QlZIaVI3L05NOE5YSGdlUm1yV2VNZ3Z4QnNXYkJuV2RQdkQ0MkJiVVZRVWdGRGhnQ3hzSElseEFJN1ZzTDRHWkNlQ1FlS1lPNXlHSlhqUFM5L0FjelpCcnFEWU5WQ2pRbUtmQXROT29yV1UyRFBZVW1hN2hjelY1U2FnNHdjL0JzcURGMlI3UTA0S3Azayt2WTFINmVldC84alA4MzF6WWVIRHg5dUxWZXROUk5VQ2E0RjlhOEpxdEZvUmRNcVU1R0JPdENZR0JPeHNYRWtKaWFTbk55ZVRwM09rYnRkQ09Xc3R1UEhxL2w0OHdmMHYyVTgxOTMvWis2Nzd6NUdqLzR0MTE1N0xWZGNjUVdkTDBsRE5zUVJiMmxMYkd3YlNWS3BKSlZXSzB1eXJKSmtXUU5TQkpJVUpVbVNTWktrUktERHZuMTdoeXVLNTFOdndjTDUyWTRjcVJDSERoMDY2L052NnhFbDN0cnZiUEg3SzMrOFhzVDNHaVYrckhjTElSVFIwR2dYUWlpaXRyWW1jTXozRzU0UUhhNmRHbkxlL3JkbWlXNjN6UTM1N2ZrSHJ4R1gzelpYZUlRaVhJY0xSTHU0SzhRUG5wUDNhLzliczRTbVhUOXhxRUVSUWpqRUgzL1RVZnpwOWM5YTlLRnUveW9SMytWbVVYK0tlNnI5YXBXSWEzZUYySC9NNGYydHNVWWNyL1BlMnkzZFZPS1BMMjRYUWloaTc3OW5pazQzekJCQ0tHTHpjNU5FajVzZkVZMUNFVUs0eGROM1h5bis4T0kyMy9PNVR0enhqN1dCNnpjMk9rNytyQnYzaVQ1dEUwVmlZdWgyOWYzelQydWM5citsaUc2M3RmejkyM2NVMGUyVzBOODhSeFhSS1ZFUm54ejIvdjNqeDRwbzMwOFJMdC8rRDU5VFJHUTdSZXc5NnYyN29hSHAzQzllbXlHNi8rNnhYOVJjZWZmeHNhTGZmZDduMkhoa2grZ1VxUkt2ZkY3ZFlwemNidGZPOTk1Yit3RHdXMkE0TUJqb0MyUURYWUVPa2lRbCt0N2hLRm1XSTFRcWxVYXRWcXNpSWlKa2c4RWd4Y2JHU20zYnRpVXRyU09abWQyNDRvb3J1UGJhYXhrOStyZmNkOTk5L08xdmYrT1ZWMTdtNDQrM2N2eDQ5Vm5qVWZQdHJIbURUTVlvdHV3dEpySmJINGJGZXlndksvTkZTTjAwTnRSenlPckNraGlIeHQySVEzaUVKTW1TSkt1RTEveVdGQ0Y1a0x4cXF3VElraVJKR1JuZHZpNHJPN1F3S1NrcFZwS2s5RjlhSUdEd3lGdXg2TDNXdlU3ci9ZSlhGRzVpOGpPdmNLQ3NHc1ZSUmFXY2Qxclg2cDJYaXd6SVNjbVluZFZZbllEdTVPZWs1VjVOc2c1QVMvK0JlU3pjdVJ2RzVtQXIzY21NZWY5aTk4RUtGTGVObW1valZ1QmtYb3hkT3dwSUhYUXpYV045bmlPdEVaTzJTZEh2bmVkVlo1SlNVckJWZlE3QTFxMmIwZHB6bURYallRQktTK3hVNkFxQlBMTDc5bVBHNUQ5eGI4Vm41UFh0ejZoaGd6anBtbC9hcm13di8vR0NqRnZKZGloWHc1cjVzTlpycFdIZDR5MlA4UmZ5OUJ3S0dXYnYvM1ZCNDFCWmZSU2pNZmtYTlZkMjdmeWMvaU9uZXg5elFnNTlNNHlCZlUzajlPbDNTVzJUM25wMCt2MUhtZ1VLZ2lPZ0ovQ3J5YUpwQlhkL3NLQXBBbW93R0h4cmdyWWhJY0ZiQjVxYW1vckpaRHBuWTNxV3dPWmh4WHNiMkJPZnd4UFhHUGorbXlLY1Bsb2poNzJPVDQ3VzBTNDVtV2pGUVgyOTF6OGdxMVJJc3BvSUxjTGpjZU5VRUVpU2dpOXgxdzl3eWNudFA2NnFPdnBjWEZ6Y1RDRCtsd1JzT3FPaG1iT3BrRkdqL3NwajZ6OWdXSFlLOWwxTHNVejQ4UFFHUmc0YUd2bk1IZENLMzRPcVZERmgrRzBNVy9RaDh3ZG5vcTdjZ2lYenJ6ODVEQzBIOTgvbnJGS0FyTnhyR1RIWTkwMGFjU1BHaEZRQXNrYk1ZRi9PY1BJM0ZiQjAzbjBzM2ZKSDhwKzU5OFFOT0E4eUl1KzNsRFRyYU5kaEQ3RGlzUW5uZk95TXlUQnlSTlBmSThkQVF2QitZK3ZubVkzUjJPeldYOVpja2VYVzNIVEI0MVMxN1BWL3YvSGc5UHUvSjdTdzNkR0tYeTFBOVIyMDJMSHdyd25hTWdKcThBVUx2UHhxYmR0NmszQ1RrNVBQNlhpZUJiQUozdi93US81ZFoyYnA3M3Boa0FXZWhnWWNEZ2NPV3czcmRod2pPUzJkUkJ4WXJiVjR6Rk5pQUFBZ0FFbEVRVlNCVXF1b3lBaFI1eFNTVHExRzhiZ0JTWkVsQ1FGNEN4UzgvalloaEdRMng2K3ZxVGx1aUltSitldXA5WlFMS3dham5xckthdWlhY09xRHE4c29WYWZRdDJjS01yQit6YnU0MForM3ZoWHYyRXlaWXpiSk9pZmJDcmFUTS9ZUDRLNmt0TnBJLzd4TTFNQ085ZXVwVkU1OVQ5bTVBeW1aOHcrS3FxZDR0VGEzbFJxSEFaUGh4UEdtQWYydjVxRnR4V1RQR3V2VnhoUTdWVFhleHF4V0s3SEpHWXlla0VGdWtwdThKNHRPZmpQYVZCYXZmWS9tdm0ydDRhZDkxZlZHc0ZaNnZkeit5WithQjRaU2tGT2h0NDlBb3FycTlDWmUxNTQ1bEQrekFTZTAwRUIvcm5PbGQwNHY1bTNiQ3JkbTRhemN5YllpS3dOOCs2eFdxNk5CaW5ubHdVZiszejZhMGpvY1FFTUlxTFZNN2ZCcmE4SDhhcUsxeWdML0tsTnQyMXBJU2VsQTU4N25udW5ueklHdDRRaVBGM3lIVlJmQndMbjdBVkJGVzNpcWR3cUZoVjl5U05HaVBuS01iK3gxdUJ2c3RORkhZdGJwaURYRlVIL2ttS2h2OUVqQ0k0UktyWlprL01TVUlmV2traEJDTnBuYXZHV3oxVVZGUlVVOThuTUN0Z21UL3NENENWZXgyR1JnekNNdjh0REluaWMrT0dVQVUvSWVwVy91TmFRWkZNd3A4WUVIWHJGakJhT20vd3Q3VlFrbFZUSjkrNzVQNXJBSFdUUmoxRm4zeldMMk1IYlExYWlwcHRJNGxJTFIyYUJWbUQ2aE04TnorOUF6V1krYzFCNkxmT3A3TW1hTjROVVpIekUwcHdjWldaMnBMQzNsc1pXZk1qajl4QWJrZ0lsekdQclpiOG5zZVNVWktTWU9IaWhtOG9MM3VYZVFnYlZQak9leDlVZkpTSTFsWDJFUmp5eDgrNVJUTXlIcHpML2lGVHRnMUhTd1YwRkpGZlR0QzVuRFlKSFAzNTZVQzRPQXJDd3dKTUhHalJCcmh1WHpZVnllTjNoZ0xRZHREdVF2T28wUFhjK2g1TGtmWld1WmswSEoybC9FWEJseTd5eGVIblE5dVFNL1FPMTBZYlEwcWFQTEh2M2RpL2MvczJGWE0xQnpCSUdidHhhMGxXQ0JmNkZqWHdSVXRCWUJqWWt4QmRZdGFOOCtoZlQwVGtpU2RNN2ZVMG1JYzVObmMrVElFZmJ1M2N0MzMzM0hvVU5sSERsU3diRmp4emgrdklhNnVqcnE2NzFGOVBYMURUaGRUc250TGFDWFBCNlBKSVNRZlpzYTBBQmFJWVFPaUxUYjYrK0pqSXo4dzdtNjRjcktTcHhPRjhuSjdTNFlHRmFWbGVEV203SEVHczU3VzI2N2xmSWFCOGxKQ1NHNVBEV1ZaZGd3a0p4d1pocVAyMkdqdkxJYXN5VVp2ZmIwc29Qc05aVlVXZDFZa3BMUUJuMDZIYllxeXF0c1dKSlNUdnRhRjFJVU41U1ZnZEVNcGpNWXFtMUxwaksvTkkrVmMwYi9ndWFLbS9MU2NreEI0M3I4K1BFWFltUGp0alF6UFJzQXUrOWZyOVltU1U3Sm0yUWZBRFpmWllFL1QwMDBBWnFCNkdodi9XZGNYQnlKaVJiYXQwK21VNmRPZE92VzdaU0xzcHl0cUdiUGZ2VGNtR2dHQTVJazBkam9MWTUzdWZ5RjhRcUs0dkdYV1BsRHNUNVFGVTIvQmR1NlhzME5nSysrK21yUHlKRWpVYXZWdmM5RlArdnI2L0Y0Rkl3bmNwcWNCOUViVFJnaXRSZWtMVmtUUVV4MEZNMi9nYm9vSThhb003ZnFaYldXbUpnWU5LclQvNnBxZEZIRXhFU2phb1pkYXEyZU5pYlRHVjNyUW9va1E0d0pkR2M0VkNsWnZXazhYRWJYSGwxUi9XTG1pa3gwMExqVzF0YStQR2pRdFp0Ly9QRkhWeXZBNWszQzlmblZKRWx5TlRNL0E2RG1Oei85Q3h6N0F3VnQyclR4clZuUU5tQitubXUvMmprSUhyUXVxYW1wT0J3T25FNHZyWkhiN1FwUUduazhpZy9rdkdEV0JHcENlSk1sRmNWWFY0b1F3dVYzdXExYjk3NzArT1B6bGp6eXlNUHFpSWlJZTdob3BZYmxDNWRSM1lxQ2JjbnN5NmdCUFFuTC8walVzWXdkTitJWE8xZnE2dXBlZStDQkJ6Wi84Y1VYemZQVW1rRE5Hd0gxYTJvZWZNd2QvZ2hvOHdSY2J3VFVuNnNXdXNKVVdscEhVbE5UeisrUW5Pc0xkdW5TeGNmWjVneWtmL2dMNVAyYW0yOFRRZ2lmMWtaQWxWTVU0V2NDa2Z3K3R6bHo1dFRFeDV1WDNIMzMzWEpFUk1UZEYrZmJZK0xXU1pQRElCS1djenBYNnVycVh2L3JYMmNWdlA3NnNvWWdUYTBoZVBPREdrR1ZCYklzdFJZQkRmalZ2SVNSaHFBYTBJUkFXa2VYTGwzTy83Zm1uS3Z6a2tTWExsMW9iR3owOGJXNS9GeHRBYzJ0S1pGT0JJR2JRQWloK0loQVFreFVTWko0NElFcHg3UmE3Wkk3N3JpRGl4ZmN3aEtXY3lkMWRYV3ZQL2JZWS9uUFB2dHNQYUdCZ29BL3pRZHFJZmxxWGhOVWJoRUI5Uy9FMHB3dzBwdXIxcGJVMUE1MDZkTGx2QVFMemp1d0FVUkdSdEs1YytjZ1dpT3YxdGJrYS9PYXBENnoxQTl1d3FlbCtTT2x3ZUFtU1JMU1BmZmNlN1N4c1hIeDNYZmZyZWgwdW52Q1V6TXNZVGxyVUh2dHIzK2RWWEFTVUd1UXBOQlZwb0tYemd1T2dEWnBhazBKdURFeHhvQmZ6WityMXJselp5SWpJeS9JL1oyejRFRnI0S2JUNlFMZzV2SDR3UzNBMWViWDJ2eWJEOGJGaVhSQkFiQmh3MGFYSkVsNyt2VEpkV3MwbWpNT0tQd3ZnZ2RoQ2N2UFNXcHJhMStlUEhseXdlTEZMOXBQcEtuUlNtVkJFNmpKd3IvQWNXZ0VOS3JGZWdWK245cWxsMTZLMld5K1lQZDRGakYzRDU4VzdtWE82bnordUxLQVY3NzhJY0JEMVZoZncvS1BQbVhHdnpmeGwzZTNVNnhFY2NrbGw5Q2hRd29KNWpnYUZJbkQ5WTNVQ0sxdmRYbDk4T3J5UXFQUm9GS3BoVCtEMlI5MW9ZbkRyUkZ3UFBiWVk3VTMzenpxQmJ2ZC92U0ZuaFFIOSt5azJuR3VydVprMzY3ZDJFNDc0NmFja1RtLzRjQlpFSDlaSzRvcE9nUDJoMjJ2UHNLOVQ2NzUyYitrSTNPZ3FKWG5zVzhYWi9CY1QwZmN6THRyTkZ0SzdEL3B1WjVLS2t1TEtLazhTN0k3OXdHR1pOOU0yVWtPT1g3OCtBdlhYRE1vUDhpbjFrSlRveVVOVVhCaHU0K0dLTlNuRmhtcDl5WGdlcXNLNHVQTldDeHQ2ZEFoaFVzdXVlUzhwWFdjTzJCVDZsaXpxNXd1cVIyNElhTWRtN2ZrTTJ0ckNRQS9GSmZ3ZGIzTTFkMDdreDByZU9DRlZSdzJ0Q1U5UFoxb25ZYjlEUkwxSHNFUlJZUFJhTVJnYUVaUzZRTTN0ZG9QYmw1eXltWUVsWTJBWThPR0RmVlJVWWFYYkRiYjQ3NkJ1U0F5ZSt6VkZKU2NLMTdNU2lZT3ZZa2krK2tEWVdsSk1jNnplR0UvVy9VNDB4ZXNPKzNqYlRWSHFhaXkvZXlCYmZ4VVNHaGxGazhjeWhrODE5TVlxUjFMV1ZHUlJ2OVUvVTk2cnFlU3RmUC93THpWaFdmOW9Td3BMajFSdVp6ajZOR2p6OFhHeG0wSmluNmVEcWg1SkVueStJTUZMYzNQVUxKSWYxV0JuNElvUFQzOUp6SGhYamdmbTJ6aThmSFhCdjVzWXovS2ZidC9nUDZwZE83ZWs4ZTcrL2Vrc212dmZyWitYODFEMloxd3VRWVNrOUNPOXpldXA2RGNnY2trK2N6U1FOb0hQcjlhd05mbWR1TXJKY1VUN0hQenBZUUFFQjF0WEhiOGVMWGRaREpONFR6V2xwYnVYTWZpTlo5U1dPSEUvc3lqN0RiTDVJNjRtMkU1M2pMcGZWdFhzMlQ1KzFqbE5veTVkeXFEc3J3NU9vcTlna1hQekdkSDBXRmlrenN5N3Q1cFpLY1kyWjIvakZWYnZxREVWc09pT1gvRm9wVVpPdTRQNUhVK2RRTHQ3dnlsekYrMW1ZU01xNWcrYlR3bU5iaXRaU3hlOURLN2k3NUgwY2N4ZXNJVUJtZW5nTE9jcCtZK3o4NGR1emhncldUbXpPL1FKZmRpNXIwakFpOUQvc3JGck5yNEJSamFNbXJDSkFiMTlQWGRXYzJTdVkrdzdlQXhoazM0STZQNitrcGYzRlpXTEp6UHBwM2ZrdEQ1Y3FaT214UW82TjYzYlRXTGxyNlBEUzBaQTI1aTJxMkRPUitwdVB1Mnd2Sk4zaG5jTytUWndLb3RVR0tEUlhQQW9vV2g0eURQMS9YdDYyRFpHbkFiWU9JMHlQRlh1VHZnbVFVd1pEQXNYZ0IyQTB5ZkJlbSs0WGgxOFFzTUgvdEMwNzJjNHJuYXF3NndZUDRpOXBUVWtqbm90MHdkTnlSUWNyVmozV0plWGYxZm5Gb2plY052NDY2aHZWR3E5akhuLzdkMzd1RlJsSGY3Lzh6c0ladk5ack1zSVFraGlURmdpQ0hFaUJnUkl5SWlJbEpFUktTSWlKUWlXcXJXb3JWS0tTOHZQenpVSXFVVXJWSThJWjRRRVJFcElxVVVFUkFSTVVhTU1jUVFZZ2doaEdXejJlek96dlA3WS9Zd3V6bUFlS0srUHRjMTE1NW5abWVldWVmK251N3Z3aGZZdGJXQ3VySy9NNnZtbjZRVlhzYU1jWU5Qd05KY0xGLzRDQnRMdjJMSTJJdWprYXloZ29VTEYxTldmYXdoUGpuOXFTY2VmV0EzMGJXZkxUSG1aN3VncG10d0hBVnFrVUJCQW9tSjBhQ21WUlgwK3Zaa2lMNXpZSXNabjlZM2tKdCtWdHNQL01lcE9LSXlLVFVKZ0x5OFBCUkZvVnRLTitKYldraE9SdWRyQ3kxaDhBcURHMEFnMENtNGlTNWRuS3NPSGFwcjd0YXQyMjNmbFNxSVBTT1A0Y050YkgveEVZcEtMbU5JdHBtMERNMVBWNzVoRVNQdWZJMEZpLzZYWkY4bE04WmN4ZEp0NzFPY1ltYnBmVGV5em5jRjgyYU9vNzV5RHcwTmJzaXlrOTZySDhNdEZ0WXNlWkhpSVZlUWI0T3M1Sk5Jb0ZXcVdQWnlPUS9lL2t0V3pMK0R5WE1zcko0M0hsOTlKWTJXYkNiZk5ncGYvVzV1RzMwWlMzZCt5c0FVTzRPR1hvSHMyazFsYlIrR0Q3OEMyUmFwWFh4eDlnM00yMlpud1p4YnNYcHFLTjFYSGdhMkxTOC94OGdsRHpFaGV4c1R4dDVNY2ZXN1pKa1ZIcHh5Qlp2TlZ6RDd6anNvWGZrb0l5WTNzdXZsMlZDM2xSSGovNGNGei82ZGJMdVBiWHMwd2N2T2dHM2Jxc2Zac1BkUXpNMnpLN2ZkTjRPVVRtWm5TallNSHdwVFI4UFlleUV0K04zMFhqRGNBbXVXUVBFUWdzYzFhRjR2ZzZsUHdNSkhnRm9ZUHd3MjdZRXNTeERZNXNHNjdUQjFNdEFJalM3QUFkREErdldWM0RldlVIZmxkSEpjUGRXTUhYd0YrVk1mNHZaUmFTeWIreHRtZWl3c21qNll4dDByR0QzekZaWXZld2lIMnNEdWFzMk1sYTBwREIxK0JkN3lEY2haRnpCOGVCSFc1Qk0zQ1Y0NTd4Y3MzSnZCb3Z0K3licEY5MUtobzJ0enB2Nk0rbk5uZlhIOTliYm5SNDY4SmxUN0dadW5GbHBhT3dLMVVGVkJaK2FuQm1wZFNVdExKVE16azE2OWVwS1hsL2VETWZsdkJHelYrei9oc1U4Q1BEbmo3Rmg3bFdmV2JDVHU3QUZjMlNNdS9HNmZQbjFJVDA4bm9ibVoxRlE2Q2lJRXZ5MEVoS09sSFlJYmFJQ1ltcHEyZnYvKy9hNnNyTXhiWkZrKy85cytVSTYwWHBTazlTTE5aaVMvL3lCSzhpS0hidW5DdnpCeDFxdU1LTWtEK2pOMTZGT3NXTHVMNGlrRGFXeG93SnFWUWs1dUFVV0ZSYm9MTTUrVWJEdDJzNFYrSlNYMFA5a0tHdG5LekxsektNNDJVamozdDZTTWVnN1h2UEhZZXcxaTVxUThkdTdaalZ0TklUL2R6YzdkdFF3Y2tVWC9raEthOXFTVGJNNmxwS1JFQjVMVkxGeThsUVY3dm1SWWxoa29SdmNwQlNOdlpOcW9JVUF4QTJmOW1iMjFrR1haeXNKMUNwc3I3eVhiRFAzdSt3TlA5UG9acFo3WjVMc2JhRktzcEdSazBTODNuWDc5VC94M0xBNG5hV2x0YmlNWVQwRHprck9nSkF0c3hyYUFsNUlOZGpQMEt5SHF1QzU2Qk81NkFnWUg5MnYwMDdCNks5dytOUGdGRDl5N0NJYWt4MnlzcVpKS1Z3YloraUpiMmRiaGNTMWIreXhsR2Rld2N2b29aR0R1dmJlU2Y4K0xMSm8rR0c5REk2ckZSbHBHTmdWWi9RZ2ZJbXN5SlNVbDdGdnRwS2xYVWZSNTZ0aGh3UElWRzVtNTZpQURDNndVejcySEphdi9FUEduSFdyOG9MWFYvY3JJa1RmdXAyM3RwNjVFaWxhSmprSE5ZREFJazhtSTJXelNnVnBzVVh1b1hDb3pYQzcxUTQ1VEJyWWpYMVZ4eXlzZk1mZW0wZVFtNkdlaFlNT21qYng2UEpubE54WkczYTBsU1NJN081dkU0eTR5TTlDWm9tcVVPUnBhajhiZ29EUG1CaElhZVJQaXpEUFAzUGJoaDd1Yit2YnRPOVZnTUF6L3ZnNWlkWFV0Wll0L3g2NW5RLy9Xd3RDaDJ2UHBjLy9PZmJQK2wzNjU5MlBKS0dMUnNxY1lrdmNOb2tOeUN1bEJlbUpKeThEYVZFOGowTFQxYVlaT2ZwVGhZNjRteFc2bXdhM2c5WjBneXVDdXBVWk5JeWVyL1JLZVpJY3pQRTNNWmdWRkFXOWREWTNlR3U0Y2QwM2tlMFhub0hyQjJHc2t6ODdhemF4SlYxQmU0Mlg0MVB0NWZNN2tUblhYYkk0VTB0Sml2aUhidjVNOHBPcGFXRG9MVnVtSWNULzloaHlRbTk2dVl4bEYvanJiK1JKWDZYYkdqUDQwL0Y1eDNrV29RUHJReVR3NHBvS3BJeStrMmlVeitkNUhtVC85VktkcUUzWDFGaktTTmIrZk1TME5aM0EvL1g3L3hvc24zcjdteGhtM0h0S1puM3BRQ3hlMVM3UlI2b2dCTlJNbVUzc05XRUt5M20xQjdmdklWZnZXZ2UzNGtZUDhZdmxXWm95L21rdlNvcDJwNzc3M0gvN3l1Y3pUTjErTXZaM0NPWVBSZ0NPckp6M1BGS2hxSUlhdGhZQXM1RzhMbTZRZGdWc0lEVVhJTkQzMzNINmZyRnIxNnArdXV1cXF3MmF6K2NadlBkb2l5Nmd4WXZsWldSa1VUZjhiOTQ1cWF3VTdjb3Bac3VJTlFHSDVySjh6YThGeXRqMXhaeVIySTZ0dHRQYzdEOTdVVTFPclVKUmp4RnRYZzhlWlFUTHd4TExIR0RQcktSNmMzQS93VWJubXo3RTczbWEvc2FXVElkZFJXZTJqVjliSjFTZWEwekp3Mm5KNWV1MWJZZk5QUDUxR3paakxxQmx6Y2RYdFpuRGg1V3llT3BsaG5aUUVWdTdad3RwdEIySldrMHJ4aUNIWXY0bHpUbTdiMHlBckhjWXNodkVGWHpPVTVzZ214MUpIVFFQMFN1R0V4elVyL1F4U0JxU3lmdVc4ZHJaaFk4cnNoVXladlpENjBsVVVEZnc5VTZZT3A1ZFJQNzlPTmpqbElEM0ZTMDJEQjlLc0tIVjFOS3JRNHZHODlOalNmN3g5eHgxL2NIVUNhbDZkV2FxUGZyWUJ0VWhoZTd4T3FjT3U2MVdRR2l4c3o2RlBuejZZVEtZZlBLajA5WUhOZjV3Wi8zZ1RTMFp2R2cvdTU3bURZSWgzTUtFb2kvM2xlN2oxcmMrNTRkTCtyUDlBaSt5Y2RjYVpERWhQUlBVMHNlS2phajZwYnVLSVQyVnZOeWYydERQSVVLTjliRHBRQ3owWElhdlQ3OWR5MmJSRVh3SVJiQXN6UWlHRUVHUEdYSHN3THk5dndmdnY3NnkzMld4MzhDMG1JdWZuOTJMNW9nVllSaGJRcTNBZytWbE9wdDc1SzRiZjlVdHl6UDlEcmxObTU2YjE1SXk2aDZINWRsWSsvaUJrRHlRM3pjeXVmVlgwNm4rVDNuQWlQMGZoOFFWUFVOOC9nL3dCUThnNWtaOU45Ykpneml4U2JoL0ZpdmwvWnRqRTMyRURzckt6ZVhIdDgrd3FraWxiOXdUcnloWDBLbGU1dVgzWXZlUWxYaHlRakNNdGgrRURDOENZeFowelNyaHJ5cTBzbVBNcnJONGE5alhhbURxdTQxNEVjbG9KZHc3MU1YbjZIR1pOSHdXTk5hemRYc1hjMmJmaks5L01vdlhWRENrcHdsTzlsUVp6RHRuT3p2L084Q216R1g0S3VwRzd0MEtqRjF3KzJMNEpHcXd3Y0hCRUZUZy9CeDVmQVBYOUlYOEE1Q1REN1ROaDZqU3d6ZGVDQ2x2V3crRGJvZDhKQ1hRYXc0YW1zRzE3T1lOSFJXdUh0WGRjODBkT0ltZnVwZHkxSUk4SlEvS3BMOTlEcVR1TmU2YU1vR3JyYWxhVit4amNMNWZhM2J1UXM3SkoxczNPdkY1bjgrQ0tmN0FxdzAxeVJoNkQrblhtTXJZeGNlSnc1cysrbjZ6N2ZzNmFSWThveHhYbHlVdHplLy9uVU5zZUJYcEE4MHFTMUNxRWFDZjVWaDhvTUlhWW1vaVBENW1mTmgxVDAwQXQxS3VnVDU4K1dDeW5oM3ppMTAvUVZmMGM5UmxJVFREaDlTdDQvUXF0c3BuaURDZkhtMXV3Mm15WVJDRDhXVklYSnpsSkZrU3JteTM3RDJOTDZzTFpUaXQrSVpHWG00dlRLRkFVQlZXTmxGdXBxZ2lib2pxeVJvaTlDZEhoM2dsSmtnUWdHaG9hMUFjZWVLRHN0dHR1cmJKYXJUMGxTWExDTjAvUUxSNXlGVXJkUGo2dHFDSytSeDl5MDVQbzJuTUFWeFk1V2ZQcXEyeCt2d3hyWmwrR1hud2VpWEV5bm9aS05xei9KeHMzN3lTclpESnpmajJhT0RsQ0VTNFpjU1VONVh2NGZIODFxYjM2azluMUJCTkRUbVhVc0RONC9wbVZPTS85T1EvZE01NDRHZkl2dUJSUnRZTlgzL2dYQ2YzR01YMTBFVDM3RkpPVnJHVjZKK1djeDRBc2lkMGZmVXFkeDh6RjUybU8zWUpMUjVOcnFlTzFWMS9uNDJvWEZ3KzlndXhVN2RnNE0zcFRrSk1hM3RjK3hSZVRIQzlUTW1vY2xyb1BXYlZxSFo4ZU9FYS9TNFp5VHE4ZUdDU0ZEN2Y5aXczci8wblpWeEovV1BBbzUvVkkvRTRtN3RzdncwY1YwUGRDY0IrRTZobzRkMUFFMkM0WkFRM2w4UGwrU08wRm1WMGg2MXdZMEIxV3ZRbzdQb0swUGpENGZMQVlJcmY1QVFNaHJwM3RaWGZ4TStmcFhVd2JlMG5VKyswZVYxTVMxNDY3aXMvZlhjL2F0elpSM3hySGtLSERPQ1BWam95WDdadmY1cTMxNy9CbFN6Y2Uvc3NEbkprVU9lZVo1NVp3VnR3eFBpd3J4MjEwY241K2RxZkg0ZXlMaG1FLzlBRXZyWHUzTW1mdzFZK3RYL25ZKzgzSGozZWswS0ZQNS9BRkFTMHErVFkyK2hscXZoSWZyNW1maVluMm9BU1JKaFNwQlFwNlVWQlFnTTFtNDNRWjM1b2UyNm1PWThlT1VWcGFTa1hGRnh3NGNJQzZ1anFPSEdtSTBYRnJDUmJXdCtMeitTUi9VTXROVlZWSlZkV1FucHNCTUtEcHVabUVFSEZvYzlSU1Z2WkpVVzV1N2hTRHdYRHBENkhIOXRQNE1Rd1BkNDYra2xFTDMySkl0dlcwMmpORlVmNjlmZnYyTlIwME0rNmdUNEh3QzBGQWx1V0FQdm0yL1R5MVdGMjFVRXFIRnYwc0tDZ2dLU25wdERvbXhoOTZCNUtTa3VqVHA0L085TlNibGxGRVRVL2ZKTkI2SjJpbWFkakpJVUordDZCWnFnSnFmbjZmM2M4Ly8zenRtREhYVkFFM244NlhUL211VGV5dGFtem5FenZEeGc3anAwS3dIMnBZV2JqNjM5LzdWbjBORmF6WnZLZmR6M0tMaDVMak5ENy8rT09QYjdyNzdudU9FNTNPRVd0KzZ0dmsrU1ZKRGtnU3FyNU1xcjJLZ2xDZVdxejVxUmVMUE4xQTdiUUFOZ0NIdzBHZlB2azZVSk4wajFJWTRDUkpDaTFDa2lSSjg3a3BRVUJUVVZVaDlQbHRJWjhiSUc2NDRZWmE0SytmZmJhdnltcE5tQTUwUHgwdm40eThJdXdaN1VRelpTTzJuOURsLzl3dzJqTVlWR0tqSGJ2cUs3Zkh0VHd4TVRzazQ2MVA1OUNib08zMS9nd0FBYTJ5UjFiYkwyalhmR29oOHpNVS9kU1lXZ2pVOHIvVnpsSS9PbUFENk5LbFN6RDNKUUptR29pRm1Kc1VmaDNMM0FCSlZTVVZWQ2tFYW5ybUJxaEI5aVo2OTg1YnZXblRwcXJ1M2ROdU1oZ01RMDYzRTJLMU9iSCtoR0EvamREOXpHd2hKU2JSVDFHVXpUdDI3SGlqcE9UaUdqcnZ6cTZ2SkdpdjhVcW9xWEdiaW9KSThtMUhnWUo4dW5UcGN0b2V0KzlNM2VOVVJueDhQSGE3UGF6ZkZnb2toTEk2T2dnYWRKWXdFN1p0UXdBSGlHZWVlZWF3MVdyZDBhOWZQOCtwS0lUOE5INGFQOVE0ZHV6WTB2dnV1Ly8xVzI2NTVZak85RHhSeldkVU1idE9laWdtbmNPaTY5SWVLejJrOTZuMU9hMUJEVTZENEVFSEo0OVBQaW5qaXkrK29LYm1BSFYxaHpoeTVBaE5UVTI0WEM2YW01dnhlRHp0QkJUOEtFb2dGRkNJRFNvWTBZSUtab0pCQlNEdXdJSHFpM3YwNkRGWmtxUnpmN3BzZmhxbjYxQlZkYzlubjMyMktqKy9UM21RcGNYNjAvUW1hSlRwaVNiakhXSnFJdExRMkVUSFBqVzkrUm5OMUU1SG45cTN4dGlhWEM0T3VmM1lMR1prUFdjS0tOUTJIc01qRE5qTTBSbTZyUzB0SEd4cUppNHVEcFBjTWRHeVdDdzRISTV3VDlMbzZnVEN2cmlZNUdhcEkvSVdTZ0hSbTZhaDE0OCsrdWpCZ29LQ25UazVPWDZqMGZpOWc1dXJ1cFIzUHE3bnJLeVVrLytSdDU1VmEzYlE4K3d6djNIemtOTnBWTzNkeXZwM3RsRFhZaUduUjlmdmZ3ZE84Ymh1WGZzaWNsb0I5cmp2WnJmY2J2ZnpUejY1OU9XUkkwY2VwUDE2VDMwcWgxZnF1T2VucnU3VEhHWnFRdkZodGptdzJ4SklUSXcwWHdsSkQ0VlVPZ29LQ2s2WUpyVjN5em9DWFh1U2FKWkFiZVRGSjU5aDYvdTdxUGZaT0N2eis5TmorL28rTnRYTnIvK3lrdDErTTZseEFXcjk4VHc2NlNvdVRJbW41dk9QdWU3RkhUZ2Rkanl1NDNUdjFaZS9YMWRNb2d4UHJWckZrckxqWkRyaU9IRFV5eTFqUmpDMVQ4Y1hjMkppSW4zNzlrV1daV1RaRUh5TUxKS2tmNHdFRkNSSnd1LzNpMkNGZ2hCQ29LcHFWQ0FocVBHbUNrMDZKSERkZGVOcWdML1YxQnpZbTU2ZWZwTWtTZDlxWjVUMVMyZFJrVDZlR1NQYXByelg3OTNJd2cxR1JwUVVuUHdLUFZYTWYzQXBnOGNNd2ZsZkJGeDcxaXhrVldNQmN5Y1BiZk5aM2JZbkdEVGxPYVpQL2hseWl1YzcyNGZhN1M4emQ3UEM0L2RPK0phT3E4cUtCWDlrVk1GNE1yN2xrTFdxcWg5OS92bm5xL0x5enY1TXg5SmlPN04zeE5JVVNaSUNRcWlxRUFqWmFGSU5CZ09SRXFsSW5scmRvYTh3ZGMwaU1URXhxcUE5VWlhbFZSUWtKQ1IwZmwrbzNzemtXUyt3WmN1SWtJY1FtODNHM2cxUHNiYkN3b2lCZWFjeHNNa21iaGs3bW9KTUxScXlhdDBiek4zNE1XOU5LTWJxVE9mVjM5NUV1dFdFNm5NemFjRnp2RlNleDlROE94ZGVjQkUzakU3RkxFUE52ZzhZdG5JcjEvUVpRMmYzNVlTRUJBb0xDOUZPaUl6QjBCN0lTVUZna3dtS1U2SkZUUDNCb0VLNElUTmhwTk1ZbXlwSlVpaW9vQUtCakl6TXpVODl0ZXlUY2VQR2piVmFyZFBhdlhzMjFWUHZVc25LU29zNmVDcmdkVFhRNEpiSlNvOWNGcXFpVUYzMkFhVytJU2lLZ2l3YmtlWHd4Q1Y3K0F6V2p6UzJ1VmpjamZYNHpFN3Nzb2M2dDB4R2lqMzhtV0x2eDg3dHk5dFVBQ2xLZENtT2JEUkd2cVA2cUttdXdaS2NUckxORXJzNWtGWHFxcXN3T3RKSnRuLzcyZU9xcWxCWDlRbTdhK3p0SEFlRm5kdmVvOS9ZVzdobjVuaGs0OGxOUzhYcm9ycTJrYlNNbUQ2bEtxaUttK3JhSnRLek04SzFxcXFxNHE2dFlNdHViM0FmdERsMHd1UHFkZEhnaGpTbm1acmFKdEl6MHNMZlVSU1ZSUnMvYlZPMHJ5cEtWQ1JULzM4Qm11cXFjY3YyTm4xZVEyb29CL2VYUC8yM2Y2elk4c0QvbStzbUVpRFFsMGZwemREMlRFOVZraVJWVlRYclJLZ2l1cG14Mll3c3k4UlpySmhraUUrdzRYQTR0TVZ1dzJLT0l5MDlnOXpjczRJVkJXWnREdFUya3A2UlJrTk5OYmEwTEt5NlUvWHN3Z2NZTXZsL0l0RjcyY0hJQ1JPeE5MN0wzcW9PN3RGTjlkUzVGTEt5MHFPdUo4WHJwcWEySGtkS09vN1krUm84U28yMTFmZ3N6cWdlcktyUFEzVnR3NmxFUmVNb3lJeHc3aXhuRXQ1RGZnQ2NYU013SlpzVHlMQWJhZkZwRjF0ZWo0aUNab3JUanF6NGFUMlJwazNRTEkyQW15RUc1Q0tzTGNMZ3BCREFTWklraWRERkhnUTRnUzVpMmc1N1UyNitlVXJnNXB1blBGbGUvdGtIT1RrNUV3d0d3eVdoZy9uMGZUOW56dXBLOHROa0t0enByRjczRXZuSlpsWS9jaU96Vmg3QWJqUWdlNm94RjkzQ3VtVXpNVmR2WWZpVS82Vm0zMjZhYkhkVHNjcEo5dUFiV1RwckV1Qmw5cVJSYk56N0dlN0NXeWxkSG14Vjd0NURidGJQS0NqSlkvdmVSZ2IwUzJQZjdyM01XLzB4WTRvY3JIeDRCbyt2MmNHMktpZlZOVzhUSnZjMVd4ZysvdjZnNHFhUDBwMjdXYlQ5S0pQNjJhZ3YyOENZOGIvQ25KRlBVMFVaUTJZK3hpUFROTmFrbEw2SVkveHpUTWs5eHRZYWdhZFJZY1d1SGZUN05xUDQzbkltamZvVlpkV2xWTG0zTVh6M0MxaHlMMmZ0a252QVZjcjRzYitodkx5VUduVVh3N2MvUTlIb08zaGt4c2dUc3I4eE0vNUdmbUVPZTB0cmVlVEZOeGszSUl1bTdVdkptZkFZUlNsV0xGYUZmZTUwTm14OGhWNzJKdTRaZnoxYjkxVlFWYWN5ZlBoNzREeUhsMTkrQkNkMGVGd25EK2hPVmZJQXFuZnZKRy9BaGJncVA2Sm8ydDlaZk5zUXlqY3M1YmFIbjJmdjl1MHMyZFBDMkhEMWs0dTd4djJNWGZVYXRGWHYyODNRV2ErdzdNNFJxSzVLcG8yOWp0MGVKdzVmUFJUOG5MWEw3ZzFXVE5SeGNXci8vNXd4ck9qTkY1YXZxK3FBcGVuTlVGOFEwSHg2bGhhNmFVdGF1RTNFbVF5aVZWRUo5ZjAwRytHcjJvT29CaFB5VjRlUVZMQW1KdEcxcTVORG4veUgxeXM5WkdlazhQd3p5N25sMFpjNTd6d0x5Kys5aHZtYm1yRzdQOFdZY1I0MjVTdnFrNjlrOTh0emdwZEhQUysrWE1ic2UwODJGdWZsaWFjeHZEZ0FBQ0FBU1VSQlZIdHY0cEYxVmVTbW1LbDBKYk5xL1N2a09ZMXNmZm8rSmovOE5nVzU2VlNYbFRMd3RyK3crTTdnZkdqYVJYYmVyWXdkbmNxR1hVZFFYSTNNVy9NUithV1BNUHpoTFJRNUJFMU50ZWc2UnAzQzRqdk9yUXYvd1pKUERyZjVySFovS1JmT2Y0VUQzdGpmQlhoNjVVb212L254MTlxV3FnYjQrT085dlBiYWF5eGE5QmZ1dSsvMy9QS1h2K1M2NjhZeWJOZ3dMcnBvSUVWRlJlVGw5U1k3TzV2dTNidVRuSndzSlNVbFNRa0pWaWt1TGs0Mm1Vd0dnOEZnbEdYWkpNdHluQ1JKVmttU0VpVko2aUpKVWdxUUFlUUFad05GdlhyMUd0RFllT1QvQ2FIV05IKzZTblR0ZnFIWTM2d0lJVlR4dDE5ZEtuNTIvN05DQ0ZXODlxY2JSTGNMSm92akFWVUlmNE80K3V5dTRxa2REVUlJVlFpaGlpZC9lNFc0NWJFdDRkZjY1ZE5YWm9zK044eVB2SGQ4dHppcng2WGlzRkRFemVjbGlYKzgzeWhlZStBRzhhdkhOa1crYzNpTDZOSGpNbkc0bmZVSm9ZcDNIdnUxT1BmcWU3VDlFVzV4OC9rOXhFTnZsZ29oVkJFNFZpck95enhiZkhCTSs2Ny80eFhDWU9naW5ucTNXdnU5M3lOYS9PMnZWd2hWdlAvOGJKR2FtaHF6ZEJkUC9ydTJ3OStFbHJmLytndHgxZStXdGZ2WkczKzZTVno3eHhVblhJY1FxaENCT25GcGp5N2krUS9xaFJDcStPU1YyYUxiaFZORnExREYwZmVlRUliNHM4U093MTRoaENyKy9NdUx4RTBQclEzLzl2UFg1b3MrMTg5dWY3M3RITmViTGtnVnIzenFFOC84N2lweDQ1OVdpeVB2TGhWOXJwdXIrNTFQWE44blFienllZnY3K3RXSEswWHYzaVhpNCtEK1BIWDNWZUxLM3k0VEFhRUtJVHppanN2T0VuOTVwMXFvYXFDbXJ1NmpCVEw4SEJnTGpBYXVBaTRIQmdFWEFFWEJ1WmtEWkVpU2xCS2N1NG1TSkZsbFdZNlRaZGxrTUJpTUpwUEpZSlFsR2NrZ0pka1RKQWtrWjJwM3NyT3pTWFBFWWJLbmN0RkZBN2w4OFBtWUpDaTVlaEwzM2ZkN0hucm9JVjU3N1RVKy9uZ3ZycktWZE90OUxjMUM1Ym5mWGMydkg5dk1sMjg4VE9aVmR5SUM1Wng3NWlVY0NsNmZnZjNyNk5MOU1nNjNjKzIrL2RkYnVPcTN5NkxlKytMTmg4bTg4QWFPK3JYWHIvKy82L25aL1NzUVF1WDRzU1lDb2ZVZTNVN1BydWZ5UmZCNzR1aE96akNaK01NTHU0THI4dExTcXZEcEszT0pQL01LRHJXcUNPSDZCbmxzcXArL3Zmb1dTcThMdUNVLzJxQnNidnlLVzEvK2dQdHZ1SWFNR0lmcWV6di93L01OZGw2WTh2WDBtaVJKb3FDZ0FLUFJpTkZvd0dBd2hobWNMT3NmbzN4eFliK2JKQ2toOWlaVVZRMHJodWpZVzZpL1FpREUzaW9xS2hTbnMrdXF0OTVhOTM3WFE5dEhPd2RjZWxOMlVDbDI2SkRMbVAvRWJtQWlBTVdEQm1HVEFkbko0SUU1N05wZHl1VGlRYWQwYUdXYkhSc3lkb2NkdTgyT3pXYkQ3VGs1bWU3cXJjOHlmVWs1NjdhOG9lMlBxNHpOZXp6SW01N2ozaTBhOC9RcDFaUld1T25YVDZQdzVweEJqQjhZbE9Bd1d1ak1FTzAvWVE1MUUrYjhzTTY2MnIzczllUXpPRmk5bmo5a0tNYkp2NlphaFdUQW5qK1Evc21hQVRwazBNVXNXN3NMR0hHS0c3TmlzeG5CYnNOaGMyS3plL0NlNUxud05aUXlidno5ekgveFh4UUU5MmZUeGkzNGNyTzU3OTdQQUNoM3F4eDVmL3VLRlYrMWJwazQ4Y2FqSjJCcG9ScFBueVJKb1RTT2dDN3FLZlQ1YVQ3Rkw0eHg4WmpqNGpFYlBLTFZEOWF1OGJnUCtlbmFvenQyZXhKMmV5S1o5dDBrZFUyaFI0OE1Fa1FqTHk1ZFRIV0RCMVZ4MDlSb0o5U0J3VzZ6WTNYWWNkbzhJTnV3NGlia0RmVTJOZUN4T3poWm9yOTE4Nyt4SXZQZ3JOOXJITGV5bmxMdkhtQThhbE1GOTk3MUozYVdWZUZWZmRTN0cyaHdRMDVvNVpaOEpvM3RGM3hoeGhMME5XVDN2NEFVTTREdFZJRXR3SXR2dk1WLzVETjU2c3I4S0d1eTFkM0FyYzl1NU5xcnIrS3FyT2hNMDQvM3ZzOGZ0cnY0eDlRUmREMUZaWk84dkR4Q3prK2owWWpCRUFLNmlKbXErZUhDdmpnUmZKU0NFVkdkYnpZSzRGUWR3SVhBTFFBb1YxNDVZait3SlBPeVg3NnJLTXExUnFQeGlwTnhLbi96SVVkczlaTlluYWQyTitPbi9KbkZxLzlGTDRjeHZCK3FPWmxoWTY0bUs3aXEwYU92SlNjM1V1OG9XMjJjckZkdDcrb0ZUSnJ6WEp2MzczMzhuNHdma01LUGI4amhoOGpaT0FsWklhV0oyOGZmUU1uc3B4aFRsQmExdmdGRHIyWmtnUTFGVWQ0KzY2eGVHNlpPSFhkZ2VRVFFPZ0kxdlk5TjBabWVZWDl4cUUrSUxCdUUwU0R3ZWtIMXVrVkRhek1JZ2IvRlMwS0NqVGl6ak1scW8wdVhMamlkRHF4R2lhNnBQZWg1WmxmbS9mSVBYTDlzTTlPSEZXQ3MzMHhhd1I5aS9tMzdjOUppdDJQMnVIQkIyOENMM043Vm9aSlZkREdqUjRkdS9sY3oxWkVCS053MzZXb3NrNTVud3hPRE1GTk5jZkpGMGRQZmFzUFNEbkxKc3ZFYkJBOFF2UG4yMjd4MFBKbG5mMzRlOGJxZFZqeE4zUEhVZWdZT0djYU52YVAvM3VmbEgvR2JUUWRaOG91Um5HSDlaaXI0UFh2MnhHdzJCd0hPaU1rVURYRHRNTGNnd0VsU1JIbzhVcUVRWW0yNndFSkF4OTdDaytqQU8wOStZREk5V1ZwVGMrQ2R0OS9aZUYyLy9sUENTcjA3dDJ6QnJVN0dwamF5ZVZzbG82WkdaS1J0Vmh1TkRmWGY3ZlhucTJmNnVCc1krZUFMRE12WEhYdDdBVVB5UFZTN25Jd2Jya251dUJzYU1OcE83UnprRFp2SzJ2N2oyc3hjWjhxSlEvbFdheUlORFYrM281T1BoVE9uWXgweWcya2pnbmZwOUFJS3JXVnMzdDNBaEg3SmxHM2FpRko0UGxreWVBQlgyVloyTmZnb1RqYXphY3QvNk4vdjk1RjlzTnR3MWRlZzhGMlczYWdzdmVkR2FncC96WklKQTZJK0dUSjBJSzkrWHJOcjB1Q1NOM3VmbGZ0cDZPWVpBMmp0Z0pya2x5UU4rSVFRQVFFQk9aeHdpeG9JcUFMSmdObG9Fa2FqRWVGckJ0a2t6c2hNMXdRaVpTOGZmL1lWUmxzaTZhbGQrZHp0b1Z1M2JqaXRYZzQyQlJpZWNTYjV1UWtjY1hkbDBNQUNqTUQyZGV1b1A4bjdzNXpkajBMZlBzb2FvU1FHMmRLYzNhbmNXQlVsRXo5bzhDWE1tZjhaZWYzdlFic0hLNXBzUGg2cXF6MU1MU25HTEVQVnBqWHNQWVdtWFYvLzNMWWM0b0ZOWCtDeXhERmt2cVlRYXU2V3c3dlRMMlhIaHgreXNlNDRIN3krbG4rOEhtUUhsdy9qL2dHWi9QMnQ5Nmh0bExsaDRUUEJGY1d6Yk9ZRStwNWkvOVRNekV3ZHVKblFrZzJOWVZNMW1zV0ZnVTRJSWFSZ1BhbVFwRUFvVnk0Y1dOQ3h0eERBUmJFM3dKK1JrZmt2MlJqLzNyOC9lWDZZRU9JNklDK0ZTb1lOdWd5anB3Wnp5ZStaTUNCeWRvZU52NFZGNDM1RjBlb0h5QnQyQ3kvT24wcmQ5aGNaTy9OdmVCcXFxR3FRS1NsNWs0S1JkL0Q0akU3MHQ3ejdHRGZzbDlSNlhkVFhWek95NUdMTUdSZXo4Y1g1MUc5NmtlVzc2aWljZXpNdno5Vk83YndWLzJaa3ZwVUhuLzRINDhiL2pEVUw4ckQ0NnFsMjkyRGpycFZrbk1KeE4xdnRaRmhQTGEraC84aEpPQjYvZ1lLaUYzQVdYY09XcDJlZEZMQnRYUGtjanJSUkVXQ1QwMWl3K0ErTUhYTWhLd3B5S0MyclpmR0tOekdqQVpzOXpjNjlJeS9GYWxVcGQyZXc3cEdJUW0zNmdORU01Um9LQzgvRGxuNEI2OWN2d2RuSmNlMXN6SjkyQmV2SzNPeXI5TEIzM0VVc3REcFlzT3BOaXUxN2VYRFJlc2lyb1YvUjM3VHJZT1pmK2VNTkYzMDI5QmV6MXZ5cTc2QVBlejhjVUhSUlRMMGloeStXb1VuZ0Y1b2FoeEtjaDJvRTFDUWh5d2hGRVVKSU1tYXpkajBjYjNZSmMwSnl1QXVjMWVyRVlUeUFxeldPNHVLTGFGajNUMTUrelVXODBZU3phendaUGZQSTdObUxtVk55R1RYZ1Fvb3lyTWpwbWFTZDdQMVB6bURjNkN6V2I5aER5ZmpvYkttQ1VWTVl1T3dhY3ZKZW9YREVyYXhaTUlPY0ViY3phOHZOOUM4OG40SmU2VlJWN21QRVBVOHlmOUlnYnJ0ekFsT0hYOEN5Z2pTODF1NzBPb1djcHRPeTh1RHJqS05IajFKZVhrNVYxWmZVMXRaU1gxOVBZK01SbXBxT0JXV1BRbFVLTFhpOXJYZzhIbncrSDBLb2t0YWhYaUVRQ0VqQi9ndWhhZ1VwV0xFZ0I4SGZDQmlEVlFzbXRNb0ZNeEIzMzMyL1R6emJVbkg1NnNBMTF5Mi9hMmhPZzFjbUkrVjB6QzVUcWF1cEJvdVR0T1FmaDBhSTRuVlRVOWRBU2tZVzFtQytSZFAycGVUTi9JRGFUWCtpcHM1RmVrd2F3UTh4aEJEN0R4OCt2R2JPbkRtN0hudnM4VmFkS2VscngvUU1QZnFERVU5RnQ2aDZYMXF3aW9CZzBtM1FlakdIR2hsanNVUzZzMnVxdDRrNEhFazRuVjFKU2VsS3ZObkMyZWVjUjJHZjNsRWxVazMxTmJpeHRVbEZPZEZ3bGEyaFpNWUdkbTVhZk5LdURhKzdpYnBHRjJscEdWaDBLVHZ1eG5vYVBESlpHY21uMU9YTStOOCt1YnQwNlVKaFlTRnhjWEhFeFpuRGR5dzlnOU16TnlIVVVJY3JJY3QrU1pabEZFVVJnVUFVZXdzVjE4c3g1bWtBVUlMbXFSL3d6NS8vZ0E5NHJmY2c4WTczenVGRGUzUkx1aGJvZWZvZEtabTBqT3dmbGZmTGFMR1JuZDIrWW9Cc3RwR1ZaZnVoQWEzeThPSERieno4OE1NZi9QblBDN3c2Z1BKM0FHaXhnUUZGSHh3SUFwc0lsVVVGNWJ2UlFFM0xUd3RXRTBTQm1zMm1xZDRtSllYNkUyZ2Qyck96cytuZHV6Zng4ZEZta3lNbGcxUEo5ckhuajJMaGpFWnFYU281SjZucmJyRTV5TGExM1pyTm1ZTHRHL0NELzNyR3BwdEVmUGJaWjFSVzd1Zmd3Um9PSFRwRVEwT2t2dFR0ZHVQeGVIQzVqdEhTNGtVSWdjL253K2Z6NGZmN0pVVnBsNzFKUWdnNUNIQ2htbE5Ea0wyWmd1ek5yRi91dm50bTR1OSs5N3RMblU3bjFaSWs5ZUduOGYyeXVLWWF0dXh6TVdSQS9nL0hqVlcxckw2K2Z2M3MyWC84OE1rbm4yenRCTkJpRjM4UTFOb0RORDJvaFZsYUVOUkVNRWNOdmVSUUJOVDAxUVNwOU9pUlFVN09tZlR1M2ZzSGI3cnlYWTBmRGJDRlJsVlZGWldWbGRUVTFGQlhWMGREZzZiRzYzSWQ0L2h4TjBlUEhzWGo4U0NFQ0JiUXQrTHorZkg3L1NGbDNpQnpDMGlxS3FSZzVEUmtvb1pDUWdhZGVkb3V3T1hrNUppM2J2M1B4YW1wcVZmSnNuemhUNUR6NHgrQlFHRDdnUU0xNzF4OGNVbHBUYzFCSlNZdzBCbW82UUV0N0VjTFZROEFRaC94Yk12U1RKak5jZWdWYjYxV2ZkMW5wSkZ4UmtZR09UazVaR2RuLzZqUGhmSEg5b2V5czdPSmo0L0hZb2tuTGk0T3N6a3VIR1F3R2swRUFnRmtXVVlJb1ROVFd6RVlES0U3WVlpOWlVQWdnQ1JKb2J5M2tFa3F4d1lYWXN4VEgyQ3VyS3cwcDZmM2VBZllVbDcrV1ZGMmR2WlFrOGswNnFmTC84YzNXbHRiMSs3YnQrL2RvcUp6OSt2QVRNL1NmTzJBbXI4RFFBdm9VampDWm1jc1N6TWFqVUdXcG9HYXhXTFJ5WGduWUxNbGtwU1VoTk9wbHgzS29tZlBIRkpUVTMvMDU4VDRZL3hUcWFtcFdLM1dJTUJac0ZnaUFCY0lLQmdNQmxSVkRVZFF2VjVqQ056dytYeENsdVgyZkc4aWFKckdSazhEQkp0aW9JWGlUWHFBQTh5NXViMTNBbnZlZVdmalM4WEZGd3l5MlJLdWdsTUtTdjQwVGgvWFI4M3g0OGYvK2E5L2JkNDlldlRvaGc0QXJUMVE4M2ZHMERveU8wTXNyWDNUVSs5UDA0SUVTVWtPbkU0bktTbmQ2TjY5TzFsWlo5Q3JWMDhTRXhQL1Q1eWZVelpGbTF3dWp2bGxlblN4UlJjQUJ4UnFqeDdIRUo5QWFrSjByOHFXRmcvMWJoL0pqaVFTVE5MM01ma29MeS9ueXkrMWlPbWhRL1VjT0ZETjBhTk5xR29BdDF1TG1MYTBSSnJGdExhMjR2Zjc4UG0waGpFNjN4dWg1akZxUUtBS0lRZmJtWVpNMUk1OGNIcFQxUVNZSjB5WVlQblRueDYrSUNVbFpZalJhT3hReFhmUDV0Vlk4b2FSbDNieXpVTnF5NkJDZ1VHRlA2NkpXckZyTTJwR01ibmhZNkdpS0ZGbDVoaURFL0ZFSmNpcXF1cUszNk0rb2I2bUdwL1owU1lpMk5SUVE2TWIwdExUL25Yb1lNMjd2L25OYno1OS9mWFgvU2NKYVA1MkFDM1FBVU5UUS9YT3dRQUIwU3d0MHJ5NHJUOHRvcVBtZEdwQmd2VDBkTTQ0NHd4eWMzTy9VMzlhOWQ2dHVKMkY1R2VjSGhIMzcwMjJhUG5xVlR5MnI1blVSRE8xamMxTXZ2cEtwaGQrdDIwSEpFbWlkKy9lSkNRa0JQTjU0dkg3L1JnTVJsUTFFSlhrRzVrOEJscGJqUmdNUHZ4K3Y5QytMMHVLRWtCUkZLSDRBdmhWRlVrU0t0cE5OYXdXRXN4M013UW5hNGpCR1lPQTVnc0IyNG9WSzFwWHJGanhMMkRyeG8xdlAzWCsrZWRma0ppWU9GU1NwQ2hkbC9WUFAwVHlsQUZmQzlqMmJZTVZqVDh1WUZOZDVVeVordjlZc2YzdDhIc3I1OTNBeEFmWGsreXdoYWZ5STJzK1lueS9Sb3B0NXpKdjMxR0d0OGVKUFdVVXBCVmdIL2N3MjVmT2pBQlh4VmJHamJ1SldtTUdkcVVldWZCbXRqNTlEM2pydVdQQzFaK3Qvc1MzT2NuUS9OSEhuNVlmMFlGU2U0RG03d0RRbEJNQW1tZy9PR0RBYURUcHBZYUlpek1URjJkcHg1K21LZDUyN1pwTWFtb3FHUms5MlAzNll0elhMYUwzZHh3a3NDazFqSm0rbG0xckg4UjhHc3laVTJCc3JaUWVhSW1TTFhxeUtaVzNKaFRUZU9RSTNuaDdsR3pSNE5FM01EWFBUa3Vyai9nNDdTOGYyYitYaTUvL2d2L011b2J2UzA2d3FhbUp5c3I5bEphV1VsdGJTeUFRNE9qUlJvNGQwNElLc2ZsdVFXWGVVTlFVUlZIdysvMVM4L0VBZmpWQW5Ea1NQZFVGR0NRaGtLRk5rTUVRWkhER0dCWVh0WHo4OGQ2OG5qMTdYaGdmSHo5RVZaUjBWY2RDVGdvQVZHMlJqVEdNSlVoaDNJM1E1SU9NdEs4SkxGNm9xb1dNYkFpbEdubWFvSzRSMHJLSWtxNEoxYjVVVjBGeUJsaDFzMXp4UW5VZFpHVzN2YU9xd2M5UzBxTi9BN0J4MFRTV05BNWgxWnp4T21EN09RdHJMbUhyNDlOajFsUkYvMDZBclhMdGc0eGRzZ3QzMldFMlYveWJkQ09BbTBuOWUyS2Y5aEtMcHcwR29MUzByUGJNTTgvWS9OSkQwejc4eGYrK1VCM3lxWjRFb09rWEpjalFBdTJabkFTRlQ0TTF6VEZtcHdHRHdSUnNXbXlpSTlNeklTR0JSSnNWQ1lrdUtlbjB6TTRJQmdreXljN0s0cEZwQTNGTWZwTzdSbVJIeTFnQjdvWmFHcnhtc2pPUzI4eVZ4cnBxRkdzeUtmYm9tNnFucVo2NkppOXA2Um5SVWxING1ENm9ENE1YdnMvNGZqOThnNWZ2VGJZb0JHcWhZMmMweUh5ZmdXYUh3OEU1NXhUUzJ1ckZaREtoS0g3aTR5M0V4Vm1DUVFiTkVkdmNiTUpvYk1Ga011TDFhaXpPNS9QaGIvVnpwTUVnVkZXUkJBcXRyWXFRNUFCbWs0cUVKSHgrRGR4Q1FRWlpEZ2NaQWtKZ0FDbFl4U05DekswTnlQWHRXN2dIK0FSNCtvSUxMdWg3NExNUHo3LzdoWXJCZHc3UFNEK1ovemh0T095cWdPd0pzSHBlNVAxN3g4QWVHVlEzVkpmQzBGbXcrTFlUcisvcG1iQ3FDZXAzQWxZd0ZzRFdwZkR3ZEZpK0IzSlNvTFFNNWp3TkUwdkF2UWN5eHNISVhHaHd3WjQ2MkxJTGN1MVF0eHNHajRhTVF1MmY3OXNNVzVzZ0c5aitNa3krRjNvVlFQayttTDhDeHZZUHd5RXJWcnpPNkVVUGZ5dnpZTTNxTnhnNjRWRzhTNjlsN2ZZR3BwVWs0OTIzbnRVVldleVpmRW10eCtQWlVsSHh4VWZubkhQT2ZqMjc2Z0RRMmdPMjBIdWhvRklnREdpeXJFcENxR3FvSXpnSUpFa1lUU1lNc2lTOExTM0k1Z1M2V09QQTN5d2FqcnJJek03R2F0RkF6V0tKSXk0dTFKSGRTa0tDalhqSnplc3Z2NEUxN1F6aTFHWlNpc2Z4NUp6QjJCcDJNMjc4UFpUdnFjRlllUk1iRmxrWk1QNXU1azBkQmtvanN5ZGZ5OHY3VkxLc0hocHR4YXhkOVRmU0xEQnpSQ2JiUEgweG1nM1VWKzVsOU96bmVIQ3lWcy81NHR3Ym1QVnlKWVc5a3FuWVY4OFRXM2N3SUl5SlprYU51b2dsTDY5bGZMK0pVY2ZjVmJhZUNmYzh5N3psS3loeW5MYkFwaHYrWnBidCtJSnhsN2NOOW4xVjlTbGJqamw1V1ZjenV2MkQ5MW4wL240cWo3UXliOExQdm5mMVY0UEJRTStlUFltTHMrRHp0V0sxSmdTN1hNY0NuSm1XRmkySzJ0cmFxb0diMGNjWjJVYU8xdm1GSytDblM2SVdQUTBFQXFMRkZ3Qkp4V3hTaGFxcWtxSWdDUkNTRkk2aUJnQ0RKS0dBWkFoT2ZHUFFURFcyQTNUR0hUdDI3QUwyL09iS3JLY3UyL3RSNzV5Y25DS3IxWHBoWjdseFN6ZkEyb1d3dEoxeVRGc0JySndMVGRzaGV4b3N2TzNrVHY3MlBiQjNPNlJad1J2c0NqajlZYmduNkVxcFdnK0Q1OExFRGNFN2VoM2NzeE1LSFhEUGNGaTVFZTRiQXcvZkMyTWZoSGtUb0dvRDlOb1l2TWsxd01UYjRkbmRNREFkNnJaQzhWMHdla3R3LzN3VjdDeTFjM3RCMnl1aWRNMWZHRnJ4cWphUjB5NWc5Zko1bldlOHEzV3NYbGZGN0huOThkUmV5dU5yMXpGMTRNU3k4Zy8zN2ZCMGNaVDFqRFBvbVptcVkxbWRBWnFpWTJlS0hzd2tDVFhZbEZob2lndVNrR1JKR01PUlRvbFdiNnRRaFlGNHM0bjRPQk9OVGNkRmdIaU9IV3NoTGFzblNiYjRzRDh0MGozS2lzMm1xZDBlK2JTVWhMNGplZml1Y2ZUb2tVNTZlanBaV1ZtUW04dkdqZU9aTmZac0hKT2ZaK2JJN1BCaDJQejRiTlo0TDJMdnJubVlVVms0N1JJZVhyNk5CVk1IYWlSZ3dEaldQVHdaVC9WR2V2Vy9tMm5qZDVCanFXUEo0czBzMjN1UVFXbUE0c01YWTB3VUZoYXg2OEdkaEJSdndyY21WeDI3ZG4yRTIvZmZFQlU5QmRtaXZubG44ei9wWjdCMTl3Y3NlbWNQbDAwZFRNSVBRRk5UVWxKd09ydVFtSmlJelpZUUZVSFZKdEZ4M0c0elpyT0hsaGFONFlWTTAyYXpEOGx2eEdMeGkyQmdRZks0RlF5bWdEQWF0UjROQVVVVklDUlpEa2RSSlEza2hCeThVT1RnaFdBSW1xbmhzcTEyZ001WVdIak9SMEVtOTlKYmI2M3JmdDU1NStVN0hJNGlrOGwwSVhCU25UVUdCdlgvSEZsZ2FRUTNuRlIyK2JBeEdxZ0JZWG1ZdXIwd1l5R1UxMmdtWkwxdWd0dHlOVkFEeU1xQ1VPL25YYnRoOXRQYTgreUJrQkdjZVZYYm9OWUlxeGZCR2tEMWdhc1Vhb0VzQUZjRGpVWUhqbmJjakRtRHJtUHhuS0RFdDlGMlF0OU80L2ExbEtaZGR1ejhyb0VkOVVYRmU5K1o5TmN2REE5TlBoTHlrWGJDenRvRE5iM0NSclR2REZTQnBHcVBRb1I3YnNpeU1NZ0k3WWFvQ0pDMDNwRUdJeGFMUlJpTlJ0S05jUEJ3QS9iVWJMcDN0ZXNDQkJxbzJXelJxUnpaQ2VmeitxS1ZQTHN5Z1dIRFJwQmJkR0toeHkxYi9vWFowNS9aOS80KzZEYndVR2ZaQzJqQU5tU1FabzVic3daU2JDOWxkNVZDVGw0eVF3WWxjOXU0YXhnMzhqSUdEeC9Gb01Lc3FQWGFuUTVjOVVmYWJNODVZREoxZFpOUGQxTVVUbFcyS0NIQnhsa0pOczY2c29RMzVxNWcyNUZMdUx6ckQ1UDViTFZhNmRPbkQzYTduY1RFUkJJU2JGaXRWcXpXZUpxYU5BYm5kc2RoTmpkak5wdndlazE0dmEwY054c3g0Q2MrUHV4N0U3TGtCMk5BTXBzMUJ1ZHIxUmljTEdzcElvR0FRSktGaEFnSDdLVGdYVjNXbUp6azEvbmlEREVncHdjNlkxQkM2UUN3OFp4ekNrM0xsajJWazVOelptK2J6VlpvTkJyN1EvdDlsY09LTGwrejhNNFNHK1J5dzlpeE1HOGRqT3dIbnQyUU5xV2Q3Y1JzU3phQ1Q0bjRJdlNlWFhzR2pCa2RlVDFtUElRRmtPd083SW9MbHhkaTZaalZrVTVlM2dsMTlOMktvbnpnY3JsS0Z6NytWT1dSRDdmWDJNM0wxUmhtRm9qeGczVUVhSG93MC85RzFmdlBnbzBpVlVsQ0lCQ3lMS01HQWtLV0RhaEtxeERJSk5vVE1adU1IR3RzRUFhVEJsNG1rd21QNXdpeUxPSHpLOWdTYmNUSHRNUUw5ZmwwT3AxMDY1WkNldnFGYkx2bUpqNzc5Rk5XUGZzZ2YzM3RBOHJXek84OEtnd1VEcmljMGNPQ2dndWpyOGFla24xQ3FKano4dnVNM3I2RkxaczJNSEhJK1R5NDdtTW1GRWVrcXR4Tkxtek8wNk9EMWZja1c2VHkxYkVXdWlkcC9LeXh2bzREaXBrdWxoKytuQ016TXhPSHd4RUVPRnNZNE9MamoyS3hhT0NtQlJaYU1KbGFPQlpud29DUGhBUmpxR0tCaERnakxzVXZMSFlEaWk4Z3VZV0N5UndRSmxrbEVBamc5NnRJa2lEWVR5YlU2Rmx2cHNyQkM4UWdTVkk0NktBRHVmYkF6dmpSUjN1TjU1MTNYaW13RDFoN3hobG5HRzRiOVh4V3ErR3NISjh2cWJmSlpDcVFKS25YdDNyQUdxSGFDQ1ZGMms2dlczMVM2bVFNR2dqcjE4Q0lHYkIzUGRRb0VmWm1xd1k1RzRxRFFZMkdCaDJHbVhNcHptMmt0TnhEWWVHSm84TkNpQXBWaUUrT0hxNnIyRnl4NzhzYmI1eDBxS2FtUm8xaFplMnhzNDVZV3Zpem9OS0xFck1PVlFpaFQ5VVFXZ3RjU2NneUJGU0V3V0JBOGZ1RndXUkNWVm94bU9LeHhzY0pneFJBVVNFK1RtdDdKN3hOZkhWTTBLKzRtT3E5SDFEanl1YjhOSWN1NFZZZjlkVHFQYnQyNlVKcWp4NmNmZTZGRE8vbklHM2tjM2cxbDZqR29DMFc2aHNhMEx5WjJoZzg2Rkx1MlZwSnY5a1ROWmFyZW1ob2l0eHFObTNaeE15UlUvQlViMk9ucTRBRjJVYkFoOHV0VWpSd0tFVURoOUpVK2svS3ltdEJCMnhsWmFVVTlXL0xHTjNsbTVneGZ4WDNMRnBNdnYxMEJiWlRraTFLNVMvUHZjUzdMUmE2eGN0OGVhU1pjU012bzMvQ2FRSHVKQ1ltVWxCUVFGSlNrZzdnRXJCYUcybHFpc2RpY1JFWDEweGNuSm5HT0RNbTRjVm1NOUhhcWtWTjB6Sjl1Q3RNMUIvMkkxUkZ5R1lGZTRJaUJaTjdoZGNiUURhcVFoYXFGRXIwMVFVYVFpQVhabkhCdkRnLzBibHhoaGlBYS9QOHl5Ky9OUHp1cnlXZkFSVnhDM2tITUR6eXlKOXNoNW91VDA5MDljaHFiYldkYVJLbVhpRDNSbE1vK2ZvakMyNGZDQ1VESU1jR3lWa25ONG51ZWhoR2o0SDhwWkRiSDdLQ2RxT2NEQ3NXd2FTQld2REFWUXZtL3JEeDhZaFRldXk0SzFpNWZpTVRDa2RGaCtlRitNenI5WDV4L1BqeEw2dXJxdy8rODU4YkR0MS8vLzB0Z0RxaFg3bzRBWmgxQkdxeHo4Tkw4UHhFSmRJRzJ3TUppS1JySUVsQ1FzSm9rSVJmMGRLS2ZLMWVUT1k0TENaVkhHbHljN2pCQzBMQ2FKQXd4OFZqTmNQZWZYWGs5UnRJYWxjN0dZTXY0dTJOTy9Iazl5YTdXM0pRbGNOSnQyN2R3cVZSbVptWmJIcmlMaTVlK0I4SzhyS28zTHVIMis3N0IzcjRIenZ0TjR5ZGRnTWJGOXNaUFBsL1dEQmpCSU9ueldYRXp1c29LTHFJL0N3SEZlV1Z6Rmo4SnRPSGFtUy9hZnZMREJyNkdrMlZwVXg2K0JseUxBQjFqQysrRkhkR1BuWWFxSFRuc21aa1lSUjVXYnZtMzR5ZE82L051ZmZXbC9QTU15OHg4Y0h2RDlpKzExclJaazh6Ujd3S1hSTVRTVERKUHdpSTFkZlg0L1A1eWNqbzBmNCtOamRUWFYwZFR1ZzljaVJVYStvS3l5QzF0R2krdDlaV2J4RGN0SHBUajl1SEloU0VxcVdIaElycVE5VUx3UnBVZ2pXb29VSjdRa0NuZTVTRGdDZnJscENNa2lHbUNmU0puaHRpZncvSXExYTltcHlYbDljdE9ibGJxczJXa0c0eW1ib2JESVlNU1pJeTJ4cDliVWRERFNoV1NQdWFFU0JGQVdvaGF5aVVsMGZzWmxXQm1ocXdKNE1qWWt4N2hSQUhXZy92T2podytCKy9XckgyNmErVXh2ckRaV1ZsUjY2L2Z2eFJJaHA2NGZTSkRzQ3NJNGJXNGZOUThibnU5L29ValhDcVJ1Z3gyQjB0cU5Zc2laQmN2VzZKbEVNWlpBUVMxZ1FibHJoUW5hYzVHUEVNQlFnU3d1M3d1blJ4aEZsYUtEaWdiNFhuODdpb3JXL1VPanBaVHo2THpOTlVUNE5MSVMwOUhYUHc3alJ6ZUNiWk05OW5ZcUdDWW5HU0hKWHVvZEpRVzRzYk0xbnBLZEdwSS92V01uRDZPclp2WG9MMU5DQXJQN29pK0c4S2JLRlJWMWNYTEtRL1JFUERZUm9iRzRNYWJ4R2xFSStuL1lvRnY5OGZ6bjNUVnk0RUFvb1VDS2hoZ0FzRTFDQ3dxYWhxR05UUU1icU9RQzRNVURHcUk1MHRjc3h6T2VaNWFCdlNvNDh1c1BYdDI5ZWVscFptVDBwS3NsdXRWcnZaYkxZYmpVYTd3V0N3eTdKc2t5VEpKa2xTZ2lSSjhVRWdEQWtBR0hUZXRSQXcrR3EzNHB2NUxONXplNHVXYmErSjV2UUp3cjN3bDZvN0VBZ2NWeFRGMWRyYTZ2SjRQTWVibXBwY1gzMzExZkc5ZXo5MjMzMzMzUjRkZUlrWUlCT2RiKy8wNGdBQUM4eEpSRUZVZ0prZXlEcGlhbEZMSjBBV0JXWjZJQU9FTEV0QzY1SW1ZVERJT2tDVE1SaU1zWlVEUkJKdDIxWVFhTW0ybWlKSFlxSTl6TktTazdzRnU3RnJPV3JmNVFnQjI0eWhYMjg3KzdhdHBjRlJURW4rNlNFUC94T3dkWmJONHZkejRNQ0JzSUNsSm9OMGxHUEhYTzJLV0VhcmhmaUNBS2UwQTNBUkZxZDF1bGRENVZyRU1Mak9RSzVkc05PVmQ4bWRnSnFoSFdDTFhmVGI2V3lobmNmWTU5Rk8ycmJQOVkrZExiRkFGcnQweE5MYVBBOUp2N2NIWWljQ3M5RHptSjRhVWV5c0xhQ0ZRQzFTdU42UkdHUlNraDJIb3d2SnlWMXh5RzcrODJFbERtY1hESWJvL3ZUOWg0MW5RTzYzMjExOTM4N05XSHNOSk10cC9xKyt6bjhDdHBNWXg0NGQ0K0RCZzlUVjFYSDRjSWk5UlhUZW1wczlPdk0wVXJVUXFUbU5CcmhBSUJCbHBxcXFHZ1Z5UXFpU3FvcXdxVXE0NGJPUWhFQVBkRkk3SUJRRFVNS2dWVU8weTlJNkF6ZXBBNENUMndHMXpnQ3VNM0NMQlRUYUFiSE9HSnJhQVZ1TGVxMmwya2lkZ2xqUVo2YnJOeHYybTRYQUxHaHFTa2hTTkpqcFFFMkVGR1AwZ0dZMFJoaGFxSHFnYlY2YVRWZm5HZkdsOWVqUmc2U2tKSDRhMzNsVTlQL2VTRXBLSWlrcGlhNWR1MUpiK3hYMTlZZUNPbTlIZ3lWWng0TUY5YzNoZ25xdlYxK1NwV2R2SVJNMUVLVWVvZ2xjQmdnRVZGUlZGVUdRRTZxcVNxRitNMXEvQnFKWVhQQUNqbVYwT2dDU1pFbUtCVHdoQndHeU0wRHJETnkrRG5QN09zRDJkY3pPZGdFdUNFaWRBaGpSemJMRG9LcjNtWVZlQndFdGlwbHBRQ2FIMmo2S0VGT0wxSFlhd3dyT0VaWVdxUjZ3UktWd2hGaGFFbDI2ZENFNU9abVVsRlRTMDd2L241QVgrZ25ZZnVCUld2b0p1Ymxua1pxYXlvRUROZFRWZmNYaHc0YzVjdVJJbEpCbHlEelZLNGJvYTA0MTM1c0djb0ZBR09BSUJBSjZpU1JKeCtCRWhNbUowS09JTVZYUlIxY2piRnhJN1lOU0ZOaEZmYWNkYzFjNkFiQjF4TnBpVFZMUkNiaDFCbkJxZTY5MW9OUVpzNHY5VGRTMjlLOWpURTFrV2RZRkEvU0FaaUNrdWhFTGFBWkRoS0hwaTliYlU3YlZ6TTZJRUdUWHJsMkRMSzA3bVprL0tWcjlCR3cvd01qTXpDQTFOWVhhMnRxd1NtOWI4N1E1R0Z3SUFad3Z4di9XaHIyRkFneEJrRk03QkRrZHdCSE41cVJZb0l0NjNzNW5iWlpnSGwwbnpFeEwwdm91Zld4QjFuV3lUSzZqQmIxcEdmT2E5bGhaaUpucC9HZnRnRm5JN0RSMnd0TDBmalJ6VUJNd1hpY0NHVzEyaHRSdDA5UFRNWnZOUDExZ1B3eXdCZGl4ZHgvL3JQaUtZNHBNd1ZrOXVlSGNNekFEcmMxTnZMcnJNL2JXSGNOZ3NUR3l1SkFMdThja3dpdk5QUFh2anptejk5a016dmp2OVIyWXpXYXlzN05KVFUxdFk1N3FvNmZSL2pjOWcrczRlcW9vQ29xL2xaWldDWXRaaWdJNVhiQ2hQWkFqMGlZVktmWlJWVlVrV1E0SjJNUXlPenBoWXJyWFVralc2MlRCckNQR0Z2V2VDTm5aSjJaeWRBSmdrZDhMSVZSVllERElVVXhNNXk5RG42SVJDMmFod0lDK0NiZWVvWFVXN1l6NDBTeHQvR2loYUdlczJSbmJVS1c5VWJZYnNvcWczWmF3N2lvbVRIbVl4U3VXNE5SZDFiWGxlNUJUOGtsemZEdUE2U2xkeGVDNXU5ajU4dnh2dko0aGMzZXgvUlRXY3pMLzZSVDAySTZ6ZW5jdFJZWFpwSnBWbHIyOWtjK09YOGFEZzdMNXNyS0tqNXRsTHUyYmkvdklRWDc5OTVVc3ZtTWlBN3BFTnZQVzVxMHNlZTlMcnJMMStLOEd0dENJajQrblo4OGMwdEpTcWF1cm83NitQbWllNnYxdklZQnJhU09MMUZIMHRMbmhDSWNiQStSa3BlalRRNFRPRDZjSE9ZUlFoUlp3VUFrR0hzSkFGN3pPSlNFRWtpd2pSY0NPazJGZE1jQjNJakE3MlhLU05xYXBpUHc0Q3FSQzdLb2p0cWNIeFBEejRQOHpHQXpoOTJNQ0FFUWVZOEZNMWpYZDFnT2FJZGlZdTZOb1o3U3NVRWlGUXdPMGlCK3RhOWV1cEtTa2tKYVdGcFdQZHFJeGJRUXNySUQrN1JUTnJWc3lCOHVBOFZHZ0JyRGt2cC9qbVB4V1ZCSDhON3FocHhWdys2UnZudEtoZWwxVVZSOCtwZCtlekgvNitzQW1PM2hnOHVYaGwxMDhoN2wxejVjd0tKdmN2a1U4MERmMFNUYTdQL21VTGZzYkdkQkZPeEN1dXYwOFYydmp1ak90ZUg1azFEY2hJWUdlUFh2U3ZYdjNjUFQwU08xblBQL0NlL1F0S2NIZWNoelhvVW8yZlZKTG43NjVKTFMyQkFNTXNRek95NEV2dnFEcFdETkNFUnc1Y2dSVk1wR1M0b1JBZ0lEaTVmRGhZMWl0Um5ITTVVSkZ4cDdrUUJaK3llVnlvd1MwV0lJcHppSk1SZ2toQkFHL0QxOGdJQUJKbGcxSWhNQk9SVkZVTFNDaHFxQ3hscE1GclRZQXBrWFlwVENsQzZia0k3Y3ZjaWpDM3dtQnJQYjlZRjRZWVlBSzdtMlExV21BSklRcWhOQitMMGt5UnFNaEJIQUVGRDhDQ1VuV29wUWhVQXY0VzFFeG9yUzJFaEJndGRteHhwbkNRTlpPMmdadGZXbnRNelN0NzBBUTBJeng3UG5FU3U0Wk5uWnNTNlJiVGhJM1QzU1EzazN6b3gydFNPTnZ6MWh4eVRCK09nd3RCRHl3Y0JHTXZ4UFNMT0NyaDBlZWhSbDNRZVVtV0xrWnF0encrRnhJTThPSVNUQXdONFFTalN4KzRsL2N0V1ZwK09BMmxXOWp3Yk52c2JtMEhzdnlQOU8wM1VIZTRHdVpPRlJyWmx5NWN5MWJtNUpKcWQzQ2k1cytJWGZJejdsdjhuQXFkMjNnNlpmZm9ycXVrZlRjODVseCszVFM3UnBNckh2NlliWlZITWVhZFg3VWlhell2b2J0alhhOGV6YXd0ZUlJSTZmOGxyRWx1U2R4MWZoWXZXUWVhM1orU2IrUk4zSGIyQkprb0w1OE8wdWZYVVY1OVNHY0diMlpkdnVkNUtWWlQvaWZWRTg5eXhZdlptdnBBYjV4K3YrbjlRM2twcmVUUytNL1RzVVJsVDZwUVZhbStuaG83VTZtWDNrK2NUL09qbCtBVmx5Zms1UERPZWVjUS82NWd6akgwY0NMRzh2SXlrcGp4L28xbURQeXlVeExwVnUzRkpLVHUrSjBPbkU0dW9UTHVleDJPNms5TWtoMUppS1pFMGhMU3lNMXBTc0pWbzBCeE1jWmNMdVBjK1JvTTNhSEU3dk5ndEVjUjV4UkZySXBUdGlUa29RdHdTeDhMYzFnREdhMFd6UTVKczAyTXdtVHlTU01ScU13R2lRUkJBaGhNQnFFMXNSQlVnMEdneXJMY250TElMaUVHdmRHTDVyMm5DSkprcVo0b2RWVmhsL0hMQUZKa2dLeUpBVmtXUTRteVdycmxtVXB2QjJCVUlXR3VtcHd1NnJCWUZBbHRJNU5KcE5SU0toQ0NhakNhRFFLazhra1RDYXpNRWlJZ0NwMGlyTnhpSUJDYTJ1cnNDUWtDcHRaRm03WGNSRVhyL20vSW83OTRIR09qOGRxdFhDOHNaNURodzVSVjFkSGJXMHRCdzhlNUtzamJ1eDJPMGxKU1RnY1hZSitzcTUwNjVaQ2Ftb3E2Y25kZVc5TEJtVU5aM0Q5OVRrMDdzeGxXMTArNTV4ekRrcEZEdGZlYWFWa0xFd2FDWGVOZ1ozMWdCV3lmRERwSGswc2ROWVVjS1dCWFliMFhqQjhPRGpOVUR4RWU1Nmx1K1I4NVp2WUtmZG5RSHFFcDFpU3N4ZzIvQXF5VTJ6MDZuY3h3NGRmUWI5ZUVWbS95cDF2Y3QrMFg3Q3F3c0w0aWRkalZWd0FWRldVMDJ2QWxkeCsxeDFrdWQ5ajJKUjVZY0dDdkg2REtja0s4TWl5TjJLQTdRMW1UTHNidFdBb0U0Wm1NbjNzelZTZmhFUlIwKzVWYkhEMVl2cVVhMWs5K3pvV2I2Z0VvS2F5QW1kK0NYZmVkUWNsS1ljWU51SVczQ2Y2VDZxTEdTTXVabDJObldtMzMvSE5nZ2ZWK3ovaHNVOENQRG5qN0ZpaXlUTnJOaEozOWdDdTdLR1ZKTzdjOFI1Tm1VVU02bWJtdy84RHprdUx4VUoyZGpaM0xYNkJUeSsvbU1jZi80REd6SkhNdnU0UzNDNTlpb2luVFltVzFacUlUYmlvOVBqSnlNaUk5c0VadFJtVGNWWnZFZzFDWjZaYU1NZjdhUFkwbzBqeHlIS0xVREVRRjJkR21NM0VXVlFhV3IyUzBSeEhuQ0Zvc2lxQ0ZxOWZ4TnNTa0lXZ3RhVVpSWURSYUNSaXdZcVFPUm9tV2tFaUZrVytoTkRpcHFvL0FMS01qQ29GQW1Bd0dKR2xqazFRaldSSitIMCtKSU1Sb3h4NUQwQUVBZ1FrQ1lzbExzcWtOSnROQkJTRmdDb3dHbVI4QVVGY25CbEprcEVzRnBRV0Y2NVdTVmdzY1dGenMvVzRoQ2t1aVdTbkExbEs0SGhsTFhKY1BQRkdmYldBUGpBZzAycExKSTVvYzlTYzJBV25zMHVVRDAzZlNNVk9FaWFqZzkvKzBVbS8xRzUwUDU3S3F6VkdMQlpZdWhBbXpvSVJKZHIvbnpvVVZxeUY0aWt3Wmhac0hnRmp4a0JUQ213TXlwcWxaR3VMM1F6OVN0cWFvclhsVlZoeU1xTmtYU3pPREVwS01saWZZc1dSWDB4SlNWdXp6WmgzQlkvUHV4MFpHQjU4YjhqNEdkUlc3R1Z2ZVEwWmhlZFM5K3hiTkFMSlFFNWhNU20rTXVSbGJVM0lncEUzTW0zVUVLQ1lnYlArek41YVRTbTUwNUUraVBuM2pzY0J6SnB4RGZlOHVJcmJoODJrMy9DSlpGZnZZMDlaSmVaZTUyQ3BmSUFLTnhSMThwOWN1MWV6dkRhUG1zMHpzUVAvSDNpeGdKbVFPNXd1QUFBQUFFbEZUa1N1UW1DQyJdLFsxLCJkZXRhaWxzLWNvbnRhaW5lciJdLFsxLCJkZXRhaWxzIl0sWyJocmVmIiwiaHR0cHM6Ly93d3cudGVuc29yZmxvdy5vcmcvYXBpX2RvY3MvcHl0aG9uL3RmL2RlYnVnZ2luZy9leHBlcmltZW50YWwvZW5hYmxlX2R1bXBfZGVidWdfaW5mbyIsInRhcmdldCIsImJsYW5rIiwicmVsIiwibm9yZWZlcnJlciBub29wZW5lciJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2FwaV9kb2NzL3B5dGhvbi90Zi9kZWJ1Z2dpbmciLCJ0YXJnZXQiLCJibGFuayIsInJlbCIsIm5vcmVmZXJyZXIgbm9vcGVuZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxBKDIsIkRlYnVnZ2VyIFYyIGlzIGluYWN0aXZlIGJlY2F1c2Ugbm8gZGF0YSBpcyBhdmFpbGFibGUuIiksdigpLF8oMywiZGl2IiksQSg0LCJUbyB1c2UgdGhlIGRlYnVnZ2VyLCIpLHYoKSxfKDUsImRpdiIpKDYsIm9sIikoNywibGkiKSxBKDgsIiBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBiZWdpbm5pbmcgb2YgeW91ciBwcm9ncmFtOiAiKSxfKDksImRpdiIsMikoMTAsInNwYW4iKSxBKDExLCJ0Zi5kZWJ1Z2dpbmcuZXhwZXJpbWVudGFsLmVuYWJsZV9kdW1wX2RlYnVnX2luZm8oIiksdigpLF8oMTIsInNwYW4iLDMpLEEoMTMsImxvZ2RpciIpLHYoKSxBKDE0LCIsICIpLF8oMTUsInNwYW4iLDMpLEEoMTYsJ3RlbnNvcl9kZWJ1Z19tb2RlPSJGVUxMX0hFQUxUSCInKSx2KCksQSgxNywiLCAiKSxfKDE4LCJzcGFuIiwzKSxBKDE5LCJjaXJjdWxhcl9idWZmZXJfc2l6ZT0tMSIpLHYoKSxfKDIwLCJzcGFuIiksQSgyMSwiKSIpLHYoKSgpKCksXygyMiwibGkiKSxBKDIzLCJSZS1ydW4gdGhlIHByb2dyYW0uIiksdigpKCkoKSxfKDI0LCJkaXYiLDQpKDI1LCJkaXYiLDUpKDI2LCJkaXYiLDYpLE8oMjcsImltZyIsNyksdigpLF8oMjgsImRpdiIsOCksQSgyOSwiQXV0by1hbGVydHMgZm9yIHByb2JsZW1zIGZvdW5kIiksdigpKCksXygzMCwiZGl2Iiw1KSgzMSwiZGl2Iiw2KSxPKDMyLCJpbWciLDkpLHYoKSxfKDMzLCJkaXYiLDgpLEEoMzQsIiBJbnRlZ3JhdGVkIGRlYnVnZ2luZyB0byB0cmFjZSBwcm9ibGVtcyB0byB0aGVpciBjYXVzZXMgIiksdigpKCksXygzNSwiZGl2Iiw1KSgzNiwiZGl2Iiw2KSxPKDM3LCJpbWciLDEwKSx2KCksXygzOCwiZGl2Iiw4KSxBKDM5LCJMaW5rIGxvZyB0byBjb2RlIiksdigpKCkoKSxfKDQwLCJkaXYiLDExKSg0MSwiZGl2IiwxMiksQSg0MiwiIFRoZSBsb2cgZGlyZWN0b3J5IG11c3QgY29udGFpbiBUZW5zb3JGbG93IERlYnVnZ2VyIChWMikgZGF0YS4gdGYuZGVidWdnaW5nLmV4cGVyaW1lbnRhbC5lbmFibGVfZHVtcF9kZWJ1Z19pbmZvKCkgd2lsbCBjb2xsZWN0IHRlbnNvciBkYXRhLCBncmFwaCBzdHJ1Y3R1cmVzLCB0aGUgYXNzb2NpYXRlZCBzdGFjayB0cmFjZXMsIGFuZCBzb3VyY2UgY29kZSB0byB0aGUgc3BlY2lmaWNlZCBkaXJlY3RvcnkgbG9nZGlyIGFzIHRoZSBpbnN0cnVtZW50ZWQgVGVuc29yRmxvdyBwcm9ncmFtIGV4ZWN1dGVzLiAiKSx2KCksXyg0MywiZGl2IiwxMikoNDQsImRpdiIpLEEoNDUsIiBTZWUgIiksXyg0NiwiYSIsMTMpLEEoNDcsIiBkb2N1bWVudGF0aW9uICIpLHYoKSxBKDQ4LCIgb2YgdGhlIFB5dGhvbiBBUEkgb2YgRGVidWdnZXIgVjIuICIpLHYoKSxfKDQ5LCJkaXYiKSxBKDUwLCIgU2VlICIpLF8oNTEsImEiLDE0KSxBKDUyLCIgaGVyZSAiKSx2KCksQSg1MywiIGZvciBvdGhlciBUZW5zb3JGbG93IGRlYnVnZ2luZyBBUElzLiAiKSx2KCkoKSgpKCkpfSxzdHlsZXM6WyIuYXJnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGNvbG9yOiBsaWdodGJsdWU7XG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgbWFyZ2luOiAycHg7XG59XG5cbi5jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtZmFtaWx5OiAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gIG1hcmdpbjogMTBweDtcbn1cblxuLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0ge1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiBSb2JvdG87XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgcGFkZGluZzogNTBweDtcbn1cblxuLmRldGFpbHMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW46IDEwcHggNjBweDtcbiAgd2lkdGg6IDUwJTtcbn1cblxuLmV4aGliaXQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uZXhoaWJpdFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luOiAxMHB4IDYwcHg7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLmRlc2NyaXB0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHdpZHRoOiAzMTBweDtcbn1cblxuLmV4aGliaXRbX25nY29udGVudC0lQ09NUCVdICAgLnNjcmVlbnNob3RbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGhlaWdodDogMjAwcHg7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4udGl0bGVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZm9udC1zaXplOiAxMzUlO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn0iXX0pLG59KSgpLFZyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRmLWRlYnVnZ2VyLXYyLWluYWN0aXZlIl1dLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZPKDAsImluYWN0aXZlLWNvbXBvbmVudCIpfSxkZXBlbmRlbmNpZXM6W0JyZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksVXJlX2dldFdpbmRvdz1mdW5jdGlvbigpe3JldHVybiB3aW5kb3d9O2Z1bmN0aW9uIEhyZShuKXtsZXQgdD1VcmVfZ2V0V2luZG93KCkucmVxdWlyZTtyZXR1cm4gbmV3IFByb21pc2UoZT0+e3QobixlKX0pfXZhciBnVV9sb2FkTW9uYWNvPWFzeW5jIGZ1bmN0aW9uKCl7bGV0IG49VXJlX2dldFdpbmRvdygpO2lmKHZvaWQgMD09PW4ubW9uYWNvKXtpZighbi5yZXF1aXJlKXRocm93IG5ldyBFcnJvcigibG9hZE1vbmFjbygpIGZhaWxlZCBiZWNhdXNlIGZ1bmN0aW9uIHJlcXVpcmUoKSBpcyB1bmF2YWlsYWJsZSIpO24ucmVxdWlyZS5jb25maWcoe3BhdGhzOnt2czoiL3RmLWltcG9ydHMvdnMifX0pLGF3YWl0IEhyZShbInZzL2VkaXRvci9lZGl0b3IubWFpbiJdKSxhd2FpdCBIcmUoWyJ2cy9weXRob24vcHl0aG9uLmNvbnRyaWJ1dGlvbiJdKX19O2Z1bmN0aW9uIFBQKG4pe3JldHVybiBuPyJ2cy1kYXJrIjoidnMifXZhciBoZz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXM9MTAwLHRoaXMub25SZXNpemU9bmV3IEcsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcga2UsdGhpcy5vblJlc2l6ZSQ9bmV3IGtlO2xldCBpPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+e3RoaXMub25SZXNpemUkLm5leHQoKX0pO2kub2JzZXJ2ZShlLm5hdGl2ZUVsZW1lbnQpLHRoaXMubmdVbnN1YnNjcmliZSQuc3Vic2NyaWJlKCgpPT57aS51bm9ic2VydmUoZS5uYXRpdmVFbGVtZW50KX0pfW5nT25Jbml0KCl7dGhpcy5vblJlc2l6ZSQucGlwZShaYSgxKSxIcih0aGlzLnJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zKSxzdCh0aGlzLm5nVW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5vblJlc2l6ZS5lbWl0KCl9KX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZSQubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZSQuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJkZXRlY3RSZXNpemUiLCIiXV0saW5wdXRzOntyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NczoicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMifSxvdXRwdXRzOntvblJlc2l6ZToib25SZXNpemUifX0pLG59KSgpLE9CZT1bImNvZGVWaWV3ZXJDb250YWluZXIiXSxXcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubGluZXM9bnVsbCx0aGlzLmZvY3VzZWRMaW5lbm89bnVsbCx0aGlzLm1vbmFjbz1udWxsLHRoaXMuZWRpdG9yPW51bGwsdGhpcy5kZWNvcmF0aW9ucz1bXSx0aGlzLlJFU0laRV9ERUJPVU5DRV9JTlRFUlZBTF9NUz01MH1vblJlc2l6ZSgpe3RoaXMuZWRpdG9yJiZ0aGlzLmVkaXRvci5sYXlvdXQoKX1uZ09uQ2hhbmdlcyhlKXtpZihudWxsPT09dGhpcy5tb25hY28pcmV0dXJuO2xldCBpPWUubW9uYWNvJiZudWxsPT09dGhpcy5lZGl0b3I7bnVsbD09PXRoaXMuZWRpdG9yJiYodGhpcy5lZGl0b3I9dGhpcy5tb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLmNvZGVWaWV3ZXJDb250YWluZXIubmF0aXZlRWxlbWVudCx7dmFsdWU6KHRoaXMubGluZXM/P1tdKS5qb2luKCJcbiIpLGxhbmd1YWdlOiJweXRob24iLHJlYWRPbmx5OiEwLGZvbnRTaXplOjEwLG1pbmltYXA6e2VuYWJsZWQ6ITB9LHRoZW1lOlBQKHRoaXMudXNlRGFya01vZGUpfSkpLGUubGluZXMmJnRoaXMubGluZXMmJnRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMubGluZXMuam9pbigiXG4iKSk7bGV0IHI9aXx8ZS5mb2N1c2VkTGluZW5vP3RoaXMuZm9jdXNlZExpbmVubzpudWxsO2lmKHImJnRoaXMubGluZXMpe3RoaXMuZWRpdG9yLnJldmVhbExpbmVJbkNlbnRlcihyLHRoaXMubW9uYWNvLmVkaXRvci5TY3JvbGxUeXBlLlNtb290aCk7bGV0IG89dGhpcy5saW5lc1tyLTFdLmxlbmd0aDt0aGlzLmRlY29yYXRpb25zPXRoaXMuZWRpdG9yLmRlbHRhRGVjb3JhdGlvbnModGhpcy5kZWNvcmF0aW9ucyxbe3JhbmdlOm5ldyB0aGlzLm1vbmFjby5SYW5nZShyLDEsciwxKSxvcHRpb25zOntpc1dob2xlTGluZTohMCxsaW5lc0RlY29yYXRpb25zQ2xhc3NOYW1lOiJoaWdobGlnaHQtZ3V0dGVyIn19LHtyYW5nZTpuZXcgdGhpcy5tb25hY28uUmFuZ2UociwxLHIsbysxKSxvcHRpb25zOntpbmxpbmVDbGFzc05hbWU6ImhpZ2hsaWdodC1saW5lIn19XSl9ZS51c2VEYXJrTW9kZSYmdGhpcy5tb25hY28uZWRpdG9yLnNldFRoZW1lKFBQKHRoaXMudXNlRGFya01vZGUpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWNvZGUtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoT0JlLDcsUmUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuY29kZVZpZXdlckNvbnRhaW5lcj1yLmZpcnN0KX19LGlucHV0czp7bGluZXM6ImxpbmVzIixmb2N1c2VkTGluZW5vOiJmb2N1c2VkTGluZW5vIixtb25hY286Im1vbmFjbyIsdXNlRGFya01vZGU6InVzZURhcmtNb2RlIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siZGV0ZWN0UmVzaXplIiwiIiwxLCJjb2RlLXZpZXdlci1jb250YWluZXIiLDMsInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIiwib25SZXNpemUiXSxbImNvZGVWaWV3ZXJDb250YWluZXIiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZSgpfSksdigpKSwyJmUmJnkoInJlc2l6ZUV2ZW50RGVib3VuY2VQZXJpb2RJbk1zIixpLlJFU0laRV9ERUJPVU5DRV9JTlRFUlZBTF9NUyl9LGRlcGVuZGVuY2llczpbaGddLHN0eWxlczpbIi5jb2RlLXZpZXdlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuXG5bX25naG9zdC0lQ09NUCVdICAgICAuaGlnaGxpZ2h0LWd1dHRlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxMTEsIDAsIDAuNyk7XG4gIHdpZHRoOiA1cHggIWltcG9ydGFudDtcbn1cblxuW19uZ2hvc3QtJUNPTVAlXSAgICAgLmhpZ2hsaWdodC1saW5lIHtcbiAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDExMSwgMCwgMC4zKTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHFyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5saW5lcz1udWxsLHRoaXMuZm9jdXNlZExpbmVubz1udWxsLHRoaXMudXNlRGFya01vZGU9ITEsdGhpcy5tb25hY28kPW51bGx9bmdPbkluaXQoKXt0aGlzLm1vbmFjbyQ9RW8oZ1VfbG9hZE1vbmFjbygpKS5waXBlKEwoKCk9PndpbmRvdy5tb25hY28pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sic291cmNlLWNvZGUiXV0saW5wdXRzOntsaW5lczoibGluZXMiLGZvY3VzZWRMaW5lbm86ImZvY3VzZWRMaW5lbm8iLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjIsdmFyczo2LGNvbnN0czpbWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsIm1vbmFjbyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJzb3VyY2UtY29kZS1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSksMiZlJiZ5KCJsaW5lcyIsaS5saW5lcykoImZvY3VzZWRMaW5lbm8iLGkuZm9jdXNlZExpbmVubykoIm1vbmFjbyIsVSgxLDQsaS5tb25hY28kKSkoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKX0sZGVwZW5kZW5jaWVzOltXcmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpO2Z1bmN0aW9uIE5CZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw2KSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiICIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMuZmlsZV9wYXRoLCIgIil9fWZ1bmN0aW9uIExCZShuLHQpezEmbiYmKF8oMCwiZGl2Iiw3KSxBKDEsIiBObyBmaWxlIHNlbGVjdGVkLiBDbGljayBhIGxpbmUgbnVtYmVyIGluIHRoZSBTdGFjayBUcmFjZSBzZWN0aW9uIHRvIHNob3cgdGhlIHNvdXJjZSBjb2RlLiAiKSx2KCkpfWZ1bmN0aW9uIEJCZShuLHQpe2lmKDEmbiYmTygwLCJzb3VyY2UtY29kZSIsOCksMiZuKXtsZXQgZT1TKCk7eSgibGluZXMiLGUuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKSgiZm9jdXNlZExpbmVubyIsZS5mb2N1c2VkU291cmNlTGluZVNwZWMubGluZW5vKSgidXNlRGFya01vZGUiLGUudXNlRGFya01vZGUpfX12YXIgWXJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmZvY3VzZWRTb3VyY2VGaWxlQ29udGVudD1udWxsLHRoaXMuZm9jdXNlZFNvdXJjZUxpbmVTcGVjPW51bGx9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNvdXJjZS1maWxlcy1jb21wb25lbnQiXV0saW5wdXRzOntmb2N1c2VkU291cmNlRmlsZUNvbnRlbnQ6ImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsZm9jdXNlZFNvdXJjZUxpbmVTcGVjOiJmb2N1c2VkU291cmNlTGluZVNwZWMiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSJ9LGRlY2xzOjgsdmFyczozLGNvbnN0czpbWzEsInNvdXJjZS1maWxlcy1jb250YWluZXIiXSxbMSwiaGVhZGVyLXNlY3Rpb24iXSxbMSwidGl0bGUtdGFnIl0sWyJjbGFzcyIsImZpbGUtbGFiZWwiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9GaWxlU2VsZWN0ZWQiLCIiXSxbMywibGluZXMiLCJmb2N1c2VkTGluZW5vIiwidXNlRGFya01vZGUiLDQsIm5nSWYiXSxbMSwiZmlsZS1sYWJlbCJdLFsxLCJuby1maWxlLXNlbGVjdGVkIl0sWzMsImxpbmVzIiwiZm9jdXNlZExpbmVubyIsInVzZURhcmtNb2RlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiZGl2IiwyKSxBKDMsIlNvdXJjZSBDb2RlIiksdigpLEUoNCxOQmUsMiwxLCJkaXYiLDMpLEUoNSxMQmUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LHF0KSx2KCksRSg3LEJCZSwxLDMsInNvdXJjZS1jb2RlIiw1KSx2KCkpLDImZSl7bGV0IHI9JGUoNik7Qyg0KSx5KCJuZ0lmIixudWxsIT09aS5mb2N1c2VkU291cmNlTGluZVNwZWMpKCJuZ0lmRWxzZSIsciksQygzKSx5KCJuZ0lmIixudWxsIT09aS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQmJm51bGwhPT1pLmZvY3VzZWRTb3VyY2VMaW5lU3BlYyYmbnVsbCE9PWkuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50LmxpbmVzKX19LGRlcGVuZGVuY2llczpbQmUscXJlXSxzdHlsZXM6WycuaGVhZGVyLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmhlYWRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5maWxlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO292ZXJmbG93LXdyYXA6YW55d2hlcmU7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MCAyMHB4fS5uby1maWxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjojNjY2O3BhZGRpbmc6MCAyMHB4O3doaXRlLXNwYWNlOm5vcm1hbH0uc291cmNlLWZpbGVzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtmb250LXNpemU6MTBweDtoZWlnaHQ6MTAwJX0udGl0bGUtdGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDoxMDAlO3BhZGRpbmctbGVmdDo2cHg7dmVydGljYWwtYWxpZ246dG9wfXNvdXJjZS1jb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MTt3aWR0aDoxMDAlfSddfSksbn0pKCksWHJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50JD10aGlzLnN0b3JlLnNlbGVjdChUUCksdGhpcy5mb2N1c2VkU291cmNlTGluZVNwZWMkPXRoaXMuc3RvcmUuc2VsZWN0KERQKSx0aGlzLnVzZURhcmtNb2RlJD10aGlzLnN0b3JlLnNlbGVjdChRdSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywiZm9jdXNlZFNvdXJjZUZpbGVDb250ZW50IiwiZm9jdXNlZFNvdXJjZUxpbmVTcGVjIiwidXNlRGFya01vZGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInNvdXJjZS1maWxlcy1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpKSwyJmUmJnkoImZvY3VzZWRTb3VyY2VGaWxlQ29udGVudCIsVSgxLDMsaS5mb2N1c2VkU291cmNlRmlsZUNvbnRlbnQkKSkoImZvY3VzZWRTb3VyY2VMaW5lU3BlYyIsVSgyLDUsaS5mb2N1c2VkU291cmNlTGluZVNwZWMkKSkoInVzZURhcmtNb2RlIixVKDMsNyxpLnVzZURhcmtNb2RlJCkpfSxkZXBlbmRlbmNpZXM6W1lyZSxHZV0sZW5jYXBzdWxhdGlvbjoyfSksbn0pKCksVUJlPVsic3RhY2tGcmFtZUFycmF5Il07ZnVuY3Rpb24gekJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxMyksQSgxKSx2KCkpLDImbil7bGV0IGU9UygzKTtDKDEpLGplKCIgIyIsZS5leGVjdXRpb25JbmRleCwiOiAiKX19ZnVuY3Rpb24gakJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygzKTtDKDEpLGplKCIgIixlLm9wVHlwZSwiICIpfX1mdW5jdGlvbiBHQmUobix0KXtpZigxJm4mJihfKDAsImRpdiIpLEEoMSwiIEVhZ2VyIGV4ZWN1dGlvbiAiKSxFKDIsekJlLDIsMSwic3BhbiIsMTEpLEUoMyxqQmUsMiwxLCJzcGFuIiwxMiksdigpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0lmIixudWxsIT09ZS5vcFR5cGUpLEMoMSkseSgibmdJZiIsbnVsbCE9PWUub3BUeXBlKX19ZnVuY3Rpb24gV0JlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygzKTtDKDEpLGplKCcgIicsZS5vcE5hbWUsJyIgJyl9fWZ1bmN0aW9uIHFCZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMTQpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoMyk7QygxKSxqZSgiICIsZS5vcFR5cGUsIiAiKX19ZnVuY3Rpb24gWUJlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiKSxBKDEsIiBDcmVhdGlvbiBvZiBncmFwaCBvcCAiKSxFKDIsV0JlLDIsMSwic3BhbiIsMTUpLEUoMyxxQmUsMiwxLCJzcGFuIiwxMiksdigpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0lmIixudWxsIT09ZS5vcE5hbWUpLEMoMSkseSgibmdJZiIsbnVsbCE9PWUub3BUeXBlKX19ZnVuY3Rpb24gWEJlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNyksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTtDKDEpLGplKCIgKEhvc3QgbmFtZTogIixlLnN0YWNrRnJhbWVzRm9yRGlzcGxheVswXS5ob3N0X25hbWUsIikgIil9fWZ1bmN0aW9uIFFCZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw3KSgxLCJzcGFuIikoMiwic3BhbiIsOCksRSgzLEdCZSw0LDIsImRpdiIsOSksRSg0LFlCZSw0LDIsImRpdiIsOSksdigpKCksXyg1LCJkaXYiKSxFKDYsWEJlLDIsMSwic3BhbiIsMTApLHYoKSgpKSwyJm4pe2xldCBlPVMoKTtDKDIpLHkoIm5nU3dpdGNoIixlLmNvZGVMb2NhdGlvblR5cGUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLkNvZGVMb2NhdGlvblR5cGUuRVhFQ1VUSU9OKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsZS5Db2RlTG9jYXRpb25UeXBlLkdSQVBIX09QX0NSRUFUSU9OKSxDKDIpLHkoIm5nSWYiLG51bGwhPT1lLnN0YWNrRnJhbWVzRm9yRGlzcGxheSYmZS5zdGFja0ZyYW1lc0ZvckRpc3BsYXkubGVuZ3RoPjApfX1mdW5jdGlvbiBLQmUobix0KXsxJm4mJihfKDAsImRpdiIsMTgpLEEoMSwiIENsaWNrIGFuIGVhZ2VyIGV4ZWN1dGlvbiBvciBncmFwaCBvcCB0byBzaG93IGl0cyBvcmlnaW5hbCBzdGFjayB0cmFjZS4gIiksdigpKX1mdW5jdGlvbiBaQmUobix0KXsxJm4mJihfKDAsImRpdiIsMjgpLEEoMSwiIFx1MjkxMyAiKSx2KCkpfXZhciBKQmU9ZnVuY3Rpb24obix0KXtyZXR1cm5bbix0XX07ZnVuY3Rpb24gJEJlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwyMikoMSwiZGl2IiwyMyksQSgyKSx2KCksXygzLCJkaXYiLDI0KSxFKDQsWkJlLDIsMCwiZGl2IiwyNSksXyg1LCJkaXYiLDI2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikub25Tb3VyY2VMaW5lQ2xpY2tlZC5lbWl0KG8pKX0pLEEoNiksdigpLF8oNywiZGl2IiwyNyksQSg4KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO3koIm5nQ2xhc3MiLFFyKDYsSkJlLGUuYmVsb25nc1RvRm9jdXNlZEZpbGU/ImZvY3VzZWQtZmlsZSI6IiIsZS5mb2N1c2VkPyJmb2N1c2VkLXN0YWNrLWZyYW1lIjoiIikpLEMoMSksWmkoInRpdGxlIixlLmZpbGVfcGF0aCksQygxKSxqZSgiICIsZS5jb25jaXNlX2ZpbGVfcGF0aCwiICIpLEMoMikseSgibmdJZiIsaS5zdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZSYmZS5mb2N1c2VkKSxDKDIpLGplKCIgTGluZSAiLGUubGluZW5vLCIgIiksQygyKSxqZSgiICIsZS5mdW5jdGlvbl9uYW1lLCIgIil9fWZ1bmN0aW9uIGVWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxOSwyMCksRSgyLCRCZSw5LDksImRpdiIsMjEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygyKSx5KCJuZ0Zvck9mIixlLnN0YWNrRnJhbWVzRm9yRGlzcGxheSl9fWZ1bmN0aW9uIHRWZShuLHQpe312YXIgUXJlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnN0YWNrRnJhbWVzRm9yRGlzcGxheT1udWxsLHRoaXMub25Tb3VyY2VMaW5lQ2xpY2tlZD1uZXcgRyx0aGlzLkNvZGVMb2NhdGlvblR5cGU9eHN9bmdBZnRlclZpZXdDaGVja2VkKCl7aWYodm9pZCAwPT09dGhpcy5zdGFja0ZyYW1lQXJyYXkpcmV0dXJuO2xldCBlPXRoaXMuc3RhY2tGcmFtZUFycmF5Lm5hdGl2ZUVsZW1lbnQsaT1lLnF1ZXJ5U2VsZWN0b3IoIi5mb2N1c2VkLXN0YWNrLWZyYW1lIik7aWYobnVsbCE9PWkpcmV0dXJuIHZvaWQgdGhpcy5zY3JvbGxUb0VsZW1lbnQoZSxpKTtsZXQgcj1lLnF1ZXJ5U2VsZWN0b3IoIi5zdGFjay1mcmFtZS1jb250YWluZXI6bGFzdC1jaGlsZCIpO251bGwhPT1yJiZ0aGlzLnNjcm9sbFRvRWxlbWVudChlLHIpfXNjcm9sbFRvRWxlbWVudChlLGkpe2Uuc2Nyb2xsVG9wPWkub2Zmc2V0VG9wfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzdGFjay10cmFjZS1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChVQmUsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGFja0ZyYW1lQXJyYXk9ci5maXJzdCl9fSxpbnB1dHM6e2NvZGVMb2NhdGlvblR5cGU6ImNvZGVMb2NhdGlvblR5cGUiLG9wVHlwZToib3BUeXBlIixvcE5hbWU6Im9wTmFtZSIsZXhlY3V0aW9uSW5kZXg6ImV4ZWN1dGlvbkluZGV4IixzdGlja1RvQm90dG9tbW9zdEZyYW1lSW5Gb2N1c2VkRmlsZToic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLHN0YWNrRnJhbWVzRm9yRGlzcGxheToic3RhY2tGcmFtZXNGb3JEaXNwbGF5In0sb3V0cHV0czp7b25Tb3VyY2VMaW5lQ2xpY2tlZDoib25Tb3VyY2VMaW5lQ2xpY2tlZCJ9LGRlY2xzOjEwLHZhcnM6NCxjb25zdHM6W1sxLCJzdGFjay10cmFjZS1jb250YWluZXIiXSxbMSwic3RhY2stdHJhY2UtaGVhZGVyIl0sWzEsInN0YWNrLXRyYWNlLXRpdGxlIl0sWyJjbGFzcyIsInN0YWNrLXRyYWNlLWF1eC1pbmZvIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vU3RhY2tUcmFjZSIsIiJdLFsiY2xhc3MiLCJzdGFjay1mcmFtZS1hcnJheSIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsb2FkaW5nU2VjdGlvbiIsIiJdLFsxLCJzdGFjay10cmFjZS1hdXgtaW5mbyJdLFsxLCJjb2RlLWxvY2F0aW9uLW9yaWdpbiIsMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsInN0YWNrLXRyYWNlLWhvc3QtbmFtZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJlYWdlci1leGVjdXRpb24taW5kZXgiLDQsIm5nSWYiXSxbImNsYXNzIiwib3AtdHlwZSIsNCwibmdJZiJdLFsxLCJlYWdlci1leGVjdXRpb24taW5kZXgiXSxbMSwib3AtdHlwZSJdLFsiY2xhc3MiLCJvcC1uYW1lIiw0LCJuZ0lmIl0sWzEsIm9wLW5hbWUiXSxbMSwic3RhY2stdHJhY2UtaG9zdC1uYW1lIl0sWzEsInN0YWNrLXRyYWNlLWF1eC1pbmZvIiwibm8tc3RhY2stdHJhY2UiXSxbMSwic3RhY2stZnJhbWUtYXJyYXkiXSxbInN0YWNrRnJhbWVBcnJheSIsIiJdLFsiY2xhc3MiLCJzdGFjay1mcmFtZS1jb250YWluZXIiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJzdGFjay1mcmFtZS1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwic3RhY2stZnJhbWUtZmlsZS1wYXRoIiwzLCJ0aXRsZSJdLFsxLCJzdGFjay1mcmFtZS1saW5lbm8tZnVuY3Rpb24iXSxbImNsYXNzIiwic3RpY2stdG8tYm90dG9tbW9zdC1pbmRpY2F0b3IiLCJ0aXRsZSIsIlN0aWNraW5nIHRvIHRoZSBib3R0b21tb3N0IGZyYW1lIGluIHRoZSBjdXJyZW50IHNvdXJjZSBmaWxlIHdoZW4gbmF2aWdhdGluZyBleGVjdXRpb25zIGFuZCBncmFwaCBvcHMuIFRvIHJlbW92ZSB0aGlzIHN0aWNraW5nLCBjbGljayBhbnkgbm9uLWJvdHRvbW1vc3Qgc3RhY2sgZnJhbWUuIiw0LCJuZ0lmIl0sWzEsInN0YWNrLWZyYW1lLWxpbmVubyIsMywiY2xpY2siXSxbMSwic3RhY2stZnJhbWUtZnVuY3Rpb24iXSxbInRpdGxlIiwiU3RpY2tpbmcgdG8gdGhlIGJvdHRvbW1vc3QgZnJhbWUgaW4gdGhlIGN1cnJlbnQgc291cmNlIGZpbGUgd2hlbiBuYXZpZ2F0aW5nIGV4ZWN1dGlvbnMgYW5kIGdyYXBoIG9wcy4gVG8gcmVtb3ZlIHRoaXMgc3RpY2tpbmcsIGNsaWNrIGFueSBub24tYm90dG9tbW9zdCBzdGFjayBmcmFtZS4iLDEsInN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwic3BhbiIsMiksQSgzLCIgU3RhY2sgVHJhY2UgIiksdigpLEUoNCxRQmUsNyw0LCJkaXYiLDMpLEUoNSxLQmUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LHF0KSx2KCksRSg3LGVWZSwzLDEsImRpdiIsNSksRSg4LHRWZSwwLDAsIm5nLXRlbXBsYXRlIixudWxsLDYscXQpLHYoKSksMiZlKXtsZXQgcj0kZSg2KSxvPSRlKDkpO0MoNCkseSgibmdJZiIsbnVsbCE9PWkuY29kZUxvY2F0aW9uVHlwZSkoIm5nSWZFbHNlIixyKSxDKDMpLHkoIm5nSWYiLG51bGwhPT1pLnN0YWNrRnJhbWVzRm9yRGlzcGxheSkoIm5nSWZFbHNlIixvKX19LGRlcGVuZGVuY2llczpbRm4sZG4sQmUsQ3IsVXJdLHN0eWxlczpbJy5mb2N1c2VkLWZpbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGR9LmZvY3VzZWQtc3RhY2stZnJhbWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMTExLDAsLjMpfS5uby1zdGFjay10cmFjZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0ub3AtbmFtZVtfbmdjb250ZW50LSVDT01QJV17d29yZC13cmFwOmFueXdoZXJlfS5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlY2VmZjE7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2ZvbnQtZmFtaWx5OiJSb2JvdG8gTW9ubyIsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxNHB4O2xpbmUtaGVpZ2h0OjE0cHg7cGFkZGluZzoxcHggM3B4O3dpZHRoOm1heC1jb250ZW50fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm9wLXR5cGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub3AtdHlwZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vcC10eXBlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiM0NTVhNjR9LnN0YWNrLWZyYW1lLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87d2lkdGg6Y2FsYygxMDAlIC0gOHB4KX0uc3RhY2stZnJhbWUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjYTBhMGEwfS5zdGFjay1mcmFtZS1maWxlLXBhdGhbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoxODBweDt3aWR0aDoxODBweH0uc3RhY2stZnJhbWUtbGluZW5vLWZ1bmN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOnJpZ2h0O3doaXRlLXNwYWNlOm5vd3JhcH0uc3RhY2stZnJhbWUtZnVuY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO21heC13aWR0aDoyMDBweDtwYWRkaW5nLWxlZnQ6MTBweDt0ZXh0LWFsaWduOmxlZnQ7d2hpdGUtc3BhY2U6bm9ybWFsO3dpZHRoOjIwMHB4O3dvcmQtd3JhcDphbnl3aGVyZX0uc3RhY2stZnJhbWUtbGluZW5vW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazttYXgtd2lkdGg6ODBweDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt3aWR0aDo4MHB4fS5zdGFjay10cmFjZS1hdXgtaW5mb1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxNXB4O3BhZGRpbmctbGVmdDoyNHB4fS5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbjtmb250LXNpemU6MTBweDtmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZTtoZWlnaHQ6MTAwJTttYXJnaW4tbGVmdDo4cHg7bWF4LWhlaWdodDozNjBweDtvdmVyZmxvdy14OmhpZGRlbjtvdmVyZmxvdy15OmhpZGRlbjtwYWRkaW5nLWxlZnQ6OHB4O3dpZHRoOjEwMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnN0YWNrLXRyYWNlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGFjay10cmFjZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zdGFjay10cmFjZS1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6MCA1cHggM3B4IC0zcHggI2NjYztwYWRkaW5nLWJvdHRvbTozcHh9LnN0YWNrLXRyYWNlLWhvc3QtbmFtZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6Z3JheX0uc3RhY2stdHJhY2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OmJvbGR9LnN0aWNrLXRvLWJvdHRvbW1vc3QtaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmctcmlnaHQ6M3B4fSddfSksbn0pKCksS3JlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuY29kZUxvY2F0aW9uVHlwZSQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooUHcsaT0+bnVsbD09PWk/bnVsbDppLmNvZGVMb2NhdGlvblR5cGUpKSksdGhpcy5vcFR5cGUkPXRoaXMuc3RvcmUucGlwZSh2dChKKFB3LGk9Pm51bGw9PT1pP251bGw6aS5vcFR5cGUpKSksdGhpcy5vcE5hbWUkPXRoaXMuc3RvcmUucGlwZSh2dChKKFB3LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT14cy5HUkFQSF9PUF9DUkVBVElPTj9udWxsOmkub3BOYW1lKSkpLHRoaXMuZXhlY3V0aW9uSW5kZXgkPXRoaXMuc3RvcmUucGlwZSh2dChKKFB3LGk9Pm51bGw9PT1pfHxpLmNvZGVMb2NhdGlvblR5cGUhPT14cy5FWEVDVVRJT04/bnVsbDppLmV4ZWN1dGlvbkluZGV4KSkpLHRoaXMuc3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUkPXRoaXMuc3RvcmUucGlwZSh2dChEcmUpKSx0aGlzLnN0YWNrRnJhbWVzRm9yRGlzcGxheSQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooRXJlLERQLChpLHIpPT57aWYobnVsbD09PWkpcmV0dXJuIG51bGw7bGV0IG89W107Zm9yKGxldCBzIG9mIGkpe2xldHtob3N0X25hbWU6YSxmaWxlX3BhdGg6bCxsaW5lbm86YyxmdW5jdGlvbl9uYW1lOnV9PXMsZD1sLnNwbGl0KCIvIiksaD1udWxsIT09ciYmYT09PXIuaG9zdF9uYW1lJiZsPT09ci5maWxlX3BhdGg7by5wdXNoKHtob3N0X25hbWU6YSxmaWxlX3BhdGg6bCxjb25jaXNlX2ZpbGVfcGF0aDpkW2QubGVuZ3RoLTFdLGxpbmVubzpjLGZ1bmN0aW9uX25hbWU6dSxiZWxvbmdzVG9Gb2N1c2VkRmlsZTpoLGZvY3VzZWQ6aCYmYz09PXIubGluZW5vfSl9cmV0dXJuIG99KSkpfW9uU291cmNlTGluZUNsaWNrZWQoZSl7bGV0e2hvc3RfbmFtZTppLGZpbGVfcGF0aDpyLGxpbmVubzpvLGZ1bmN0aW9uX25hbWU6c309ZTt0aGlzLnN0b3JlLmRpc3BhdGNoKEp2KHtzdGFja0ZyYW1lOntob3N0X25hbWU6aSxmaWxlX3BhdGg6cixsaW5lbm86byxmdW5jdGlvbl9uYW1lOnN9fSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItc3RhY2stdHJhY2UiXV0sZGVjbHM6Nyx2YXJzOjE4LGNvbnN0czpbWzMsImNvZGVMb2NhdGlvblR5cGUiLCJvcFR5cGUiLCJvcE5hbWUiLCJleGVjdXRpb25JbmRleCIsInN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlIiwic3RhY2tGcmFtZXNGb3JEaXNwbGF5Iiwib25Tb3VyY2VMaW5lQ2xpY2tlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwic3RhY2stdHJhY2UtY29tcG9uZW50IiwwKSxQKCJvblNvdXJjZUxpbmVDbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNvdXJjZUxpbmVDbGlja2VkKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLEIoNSwiYXN5bmMiKSxCKDYsImFzeW5jIiksdigpKSwyJmUmJnkoImNvZGVMb2NhdGlvblR5cGUiLFUoMSw2LGkuY29kZUxvY2F0aW9uVHlwZSQpKSgib3BUeXBlIixVKDIsOCxpLm9wVHlwZSQpKSgib3BOYW1lIixVKDMsMTAsaS5vcE5hbWUkKSkoImV4ZWN1dGlvbkluZGV4IixVKDQsMTIsaS5leGVjdXRpb25JbmRleCQpKSgic3RpY2tUb0JvdHRvbW1vc3RGcmFtZUluRm9jdXNlZEZpbGUiLFUoNSwxNCxpLnN0aWNrVG9Cb3R0b21tb3N0RnJhbWVJbkZvY3VzZWRGaWxlJCkpKCJzdGFja0ZyYW1lc0ZvckRpc3BsYXkiLFUoNiwxNixpLnN0YWNrRnJhbWVzRm9yRGlzcGxheSQpKX0sZGVwZW5kZW5jaWVzOltRcmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLHJWZT1mdW5jdGlvbihuLHQpe3JldHVybnt0ZW5zb3JEZWJ1Z01vZGU6bixhcnJheTp0fX07ZnVuY3Rpb24gb1ZlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxBKDIpLHYoKSxfKDMsImRpdiIsMTQpLE8oNCwiZGVidWctdGVuc29yLXZhbHVlIiwxNSksdigpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9UygzKTtDKDIpLGplKCJPdXRwdXQgc2xvdCAiLGksIjoiKSxDKDIpLHkoImRlYnVnVGVuc29yVmFsdWUiLHIucGFyc2VEZWJ1Z1RlbnNvclZhbHVlKFFyKDIsclZlLHIudGVuc29yRGVidWdNb2RlLGUpKSl9fWZ1bmN0aW9uIHNWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxMCksRSgxLG9WZSw1LDUsImRpdiIsMTEpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0MoMSkseSgibmdGb3JPZiIsZS5kZWJ1Z1RlbnNvclZhbHVlcyl9fWZ1bmN0aW9uIGFWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IikoMSwiZGl2IikoMiwiZGl2IiwzKSgzLCJzcGFuIiw0KSxBKDQsIiBPcDogIiksdigpLF8oNSwic3BhbiIsNSksQSg2KSx2KCkoKSxfKDcsImRpdiIsMykoOCwic3BhbiIsNCksQSg5LCIgIyBvZiBpbnB1dCB0ZW5zb3JzOiAiKSx2KCksXygxMCwic3BhbiIsNiksQSgxMSksdigpKCksXygxMiwiZGl2IiwzKSgxMywic3BhbiIsNCksQSgxNCwiICMgb2Ygb3V0cHV0IHRlbnNvcnM6ICIpLHYoKSxfKDE1LCJzcGFuIiw3KSxBKDE2KSx2KCksXygxNywic3BhbiIsOCksQSgxOCksdigpKCksRSgxOSxzVmUsMiwxLCJkaXYiLDkpLHYoKSgpKSwyJm4pe2xldCBlPVMoKTtDKDYpLGplKCIgIixlLmZvY3VzZWRFeGVjdXRpb25EYXRhLm9wX3R5cGUsIiAiKSxDKDUpLGplKCIgIixudWxsPT1lLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHM/MDplLmZvY3VzZWRFeGVjdXRpb25EYXRhLmlucHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksQyg1KSxqZSgiICIsbnVsbD09ZS5mb2N1c2VkRXhlY3V0aW9uRGF0YS5vdXRwdXRfdGVuc29yX2lkcz8wOmUuZm9jdXNlZEV4ZWN1dGlvbkRhdGEub3V0cHV0X3RlbnNvcl9pZHMubGVuZ3RoLCIgIiksQygyKSxqZSgiIChkZWJ1ZyBtb2RlOiAiLGUuVGVuc29yRGVidWdNb2RlW2UudGVuc29yRGVidWdNb2RlXSwiKSAiKSxDKDEpLHkoIm5nSWYiLGUuaGFzRGVidWdUZW5zb3JWYWx1ZXMpfX1mdW5jdGlvbiBsVmUobix0KXt9dmFyIFpyZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy50ZW5zb3JEZWJ1Z01vZGU9YXMuVU5TUEVDSUZJRUQsdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcz0hMSx0aGlzLmRlYnVnVGVuc29yVmFsdWVzPW51bGwsdGhpcy5kZWJ1Z1RlbnNvckR0eXBlcz1udWxsLHRoaXMuVGVuc29yRGVidWdNb2RlPWFzLHRoaXMucGFyc2VEZWJ1Z1RlbnNvclZhbHVlPUFQfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJleGVjdXRpb24tZGF0YS1jb21wb25lbnQiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCIsZm9jdXNlZEV4ZWN1dGlvbkRhdGE6ImZvY3VzZWRFeGVjdXRpb25EYXRhIix0ZW5zb3JEZWJ1Z01vZGU6InRlbnNvckRlYnVnTW9kZSIsaGFzRGVidWdUZW5zb3JWYWx1ZXM6Imhhc0RlYnVnVGVuc29yVmFsdWVzIixkZWJ1Z1RlbnNvclZhbHVlczoiZGVidWdUZW5zb3JWYWx1ZXMiLGRlYnVnVGVuc29yRHR5cGVzOiJkZWJ1Z1RlbnNvckR0eXBlcyJ9LGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsImZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJsb2FkaW5nX3NlY3Rpb24iLCIiXSxbMSwiZXhlY3V0aW9uLWRhdGEtZmllbGQiXSxbMSwiZXhlY3V0aW9uLWRhdGEta2V5Il0sWzEsImV4ZWN1dGlvbi1kYXRhLXZhbHVlIiwib3AtdHlwZSJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSIsImlucHV0LXRlbnNvcnMiXSxbMSwiZXhlY3V0aW9uLWRhdGEtdmFsdWUiLCJvdXRwdXQtdGVuc29ycyJdLFsxLCJleGVjdXRpb24tZGF0YS12YWx1ZSJdLFsiY2xhc3MiLCJvdXRwdXQtc2xvdHMiLDQsIm5nSWYiXSxbMSwib3V0cHV0LXNsb3RzIl0sWyJjbGFzcyIsIm91dHB1dC1zbG90LWNvbnRhaW5lciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm91dHB1dC1zbG90LWNvbnRhaW5lciJdLFsxLCJvdXRwdXQtc2xvdC1udW1iZXIiXSxbMSwib3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlIl0sWzMsImRlYnVnVGVuc29yVmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIsMCkoMSwiZGl2IikoMiwic3BhbiIpLEEoMyksdigpKCksRSg0LGFWZSwyMCw1LCJkaXYiLDEpLEUoNSxsVmUsMCwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLHF0KSx2KCkpLDImZSl7bGV0IHI9JGUoNik7QygzKSxqZSgiIFB5dGhvbiBFeGVjdXRpb24gIyIsaS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgsIiAiKSxDKDEpLHkoIm5nSWYiLG51bGwhPT1pLmZvY3VzZWRFeGVjdXRpb25EYXRhKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltkbixCZSxJUF0sc3R5bGVzOlsnLmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmRlYnVnLXRlbnNvci12YWx1ZXMtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7dGV4dC1hbGlnbjpsZWZ0fS5kZWJ1Zy10ZW5zb3ItdmFsdWVzLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LmV4ZWN1dGlvbi1kYXRhLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmV4ZWN1dGlvbi1kYXRhLWtleVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjEyMHB4O3RleHQtYWxpZ246cmlnaHQ7d2lkdGg6MTIwcHh9LmV4ZWN1dGlvbi1kYXRhLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmNjODA7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjEycHg7aGVpZ2h0OjEyMHB4O3BhZGRpbmc6NXB4O3dpZHRoOjM2MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5mb2N1cy1leGVjdXRpb24tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZvY3VzLWV4ZWN1dGlvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2U2NTEwMH0ub3V0cHV0LXNsb3RzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NjBweDtvdmVyZmxvdy14OmF1dG87b3ZlcmZsb3cteTphdXRvfS5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICNlYmViZWI7bWFyZ2luLXRvcDo1cHg7cGFkZGluZzoycHggMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dHB1dC1zbG90LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5vdXRwdXQtc2xvdC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Lm91dHB1dC1zbG90LW51bWJlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jaztmb250LWZhbWlseToiUm9ib3RvIE1vbm8iLG1vbm9zcGFjZX0ub3V0cHV0LXNsb3QtZGVidWctdGVuc29yLXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjozcHggMCAzcHggMzBweH0ub3V0cHV0LXRlbnNvcnNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6NXB4fSddfSksbn0pKCksSnJlPSJVbmtub3duIGR0eXBlIiwkcmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGF0YSQ9dGhpcy5zdG9yZS5waXBlKHZ0KHBnKSksdGhpcy50ZW5zb3JEZWJ1Z01vZGUkPXRoaXMuc3RvcmUucGlwZSh2dChKKHBnLGk9Pm51bGw9PT1pP2FzLlVOU1BFQ0lGSUVEOmkudGVuc29yX2RlYnVnX21vZGUpKSksdGhpcy5oYXNEZWJ1Z1RlbnNvclZhbHVlcyQ9dGhpcy5zdG9yZS5waXBlKHZ0KEoocGcsaT0+e2lmKG51bGw9PT1pfHxudWxsPT09aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKXJldHVybiExO2ZvcihsZXQgciBvZiBpLmRlYnVnX3RlbnNvcl92YWx1ZXMpaWYobnVsbCE9PXImJnIubGVuZ3RoPjApcmV0dXJuITA7cmV0dXJuITF9KSkpLHRoaXMuZGVidWdUZW5zb3JWYWx1ZXMkPXRoaXMuc3RvcmUucGlwZSh2dChKKHBnLGk9Pm51bGw9PT1pP251bGw6aS5kZWJ1Z190ZW5zb3JfdmFsdWVzKSkpLHRoaXMuZGVidWdUZW5zb3JEdHlwZXMkPXRoaXMuc3RvcmUucGlwZSh2dChKKHBnLGk9PntpZihudWxsPT09aXx8bnVsbD09PWkuZGVidWdfdGVuc29yX3ZhbHVlc3x8aS50ZW5zb3JfZGVidWdfbW9kZSE9PWFzLkZVTExfSEVBTFRIJiZpLnRlbnNvcl9kZWJ1Z19tb2RlIT09YXMuU0hBUEUpcmV0dXJuIG51bGw7bGV0IHI9W107Zm9yKGxldCBvIG9mIGkuZGVidWdfdGVuc29yX3ZhbHVlcylpZihudWxsPT09bylyLnB1c2goSnJlKTtlbHNle2xldCBzPVN0cmluZyhpLnRlbnNvcl9kZWJ1Z19tb2RlPT09YXMuRlVMTF9IRUFMVEg/b1syXTpvWzFdKTtyLnB1c2goUndbc118fEpyZSl9cmV0dXJuIHJ9KSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItZXhlY3V0aW9uLWRhdGEiXV0saW5wdXRzOntmb2N1c2VkRXhlY3V0aW9uSW5kZXg6ImZvY3VzZWRFeGVjdXRpb25JbmRleCJ9LGRlY2xzOjYsdmFyczoxNixjb25zdHM6W1szLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsInRlbnNvckRlYnVnTW9kZSIsImhhc0RlYnVnVGVuc29yVmFsdWVzIiwiZGVidWdUZW5zb3JWYWx1ZXMiLCJkZWJ1Z1RlbnNvckR0eXBlcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwiZXhlY3V0aW9uLWRhdGEtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpKSwyJmUmJnkoImZvY3VzZWRFeGVjdXRpb25JbmRleCIsaS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKCJmb2N1c2VkRXhlY3V0aW9uRGF0YSIsVSgxLDYsaS5mb2N1c2VkRXhlY3V0aW9uRGF0YSQpKSgidGVuc29yRGVidWdNb2RlIixVKDIsOCxpLnRlbnNvckRlYnVnTW9kZSQpKSgiaGFzRGVidWdUZW5zb3JWYWx1ZXMiLFUoMywxMCxpLmhhc0RlYnVnVGVuc29yVmFsdWVzJCkpKCJkZWJ1Z1RlbnNvclZhbHVlcyIsVSg0LDEyLGkuZGVidWdUZW5zb3JWYWx1ZXMkKSkoImRlYnVnVGVuc29yRHR5cGVzIixVKDUsMTQsaS5kZWJ1Z1RlbnNvckR0eXBlcyQpKX0sZGVwZW5kZW5jaWVzOltacmUsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGhWZT1bInNsaWRlcldyYXBwZXIiXSxjYz1sYSh7cGFzc2l2ZTohMX0pLHZWZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+dXApLG11bHRpOiEwfSx5VmU9b2Moa28oc28oY2xhc3N7Y29uc3RydWN0b3Iobil7dGhpcy5fZWxlbWVudFJlZj1ufX0pLCJhY2NlbnQiKSksdXA9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHlWZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKGUpLHRoaXMuX2ZvY3VzTW9uaXRvcj1pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPXIsdGhpcy5fZGlyPW8sdGhpcy5fbmdab25lPWEsdGhpcy5fYW5pbWF0aW9uTW9kZT1jLHRoaXMuX2ludmVydD0hMSx0aGlzLl9tYXg9MTAwLHRoaXMuX21pbj0wLHRoaXMuX3N0ZXA9MSx0aGlzLl90aHVtYkxhYmVsPSExLHRoaXMuX3RpY2tJbnRlcnZhbD0wLHRoaXMuX3ZhbHVlPW51bGwsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy5pbnB1dD1uZXcgRyx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBHLHRoaXMub25Ub3VjaGVkPSgpPT57fSx0aGlzLl9wZXJjZW50PTAsdGhpcy5faXNTbGlkaW5nPW51bGwsdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5fdGlja0ludGVydmFsUGVyY2VudD0wLHRoaXMuX3NsaWRlckRpbWVuc2lvbnM9bnVsbCx0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuPSgpPT57fSx0aGlzLl9kaXJDaGFuZ2VTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5fcG9pbnRlckRvd249dT0+e3RoaXMuZGlzYWJsZWR8fHRoaXMuX2lzU2xpZGluZ3x8IU93KHUpJiYwIT09dS5idXR0b258fHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl90b3VjaElkPU93KHUpP2Z1bmN0aW9uKG4sdCl7Zm9yKGxldCBlPTA7ZTxuLnRvdWNoZXMubGVuZ3RoO2UrKyl7bGV0IGk9bi50b3VjaGVzW2VdLnRhcmdldDtpZih0PT09aXx8dC5jb250YWlucyhpKSlyZXR1cm4gbi50b3VjaGVzW2VdLmlkZW50aWZpZXJ9fSh1LHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk6dm9pZCAwO2xldCBkPXRvZSh1LHRoaXMuX3RvdWNoSWQpO2lmKGQpe2xldCBwPXRoaXMudmFsdWU7dGhpcy5faXNTbGlkaW5nPSJwb2ludGVyIix0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXUsdGhpcy5fZm9jdXNIb3N0RWxlbWVudCgpLHRoaXMuX29uTW91c2VlbnRlcigpLHRoaXMuX2JpbmRHbG9iYWxFdmVudHModSksdGhpcy5fZm9jdXNIb3N0RWxlbWVudCgpLHRoaXMuX3VwZGF0ZVZhbHVlRnJvbVBvc2l0aW9uKGQpLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0PXAsdS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCkscCE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19KX0sdGhpcy5fcG9pbnRlck1vdmU9dT0+e2lmKCJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyl7bGV0IGQ9dG9lKHUsdGhpcy5fdG91Y2hJZCk7aWYoZCl7dS5jYW5jZWxhYmxlJiZ1LnByZXZlbnREZWZhdWx0KCk7bGV0IHA9dGhpcy52YWx1ZTt0aGlzLl9sYXN0UG9pbnRlckV2ZW50PXUsdGhpcy5fdXBkYXRlVmFsdWVGcm9tUG9zaXRpb24oZCkscCE9dGhpcy52YWx1ZSYmdGhpcy5fZW1pdElucHV0RXZlbnQoKX19fSx0aGlzLl9wb2ludGVyVXA9dT0+eyJwb2ludGVyIj09PXRoaXMuX2lzU2xpZGluZyYmKCFPdyh1KXx8Im51bWJlciIhPXR5cGVvZiB0aGlzLl90b3VjaElkfHx2VSh1LmNoYW5nZWRUb3VjaGVzLHRoaXMuX3RvdWNoSWQpKSYmKHUuY2FuY2VsYWJsZSYmdS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3JlbW92ZUdsb2JhbEV2ZW50cygpLHRoaXMuX2lzU2xpZGluZz1udWxsLHRoaXMuX3RvdWNoSWQ9dm9pZCAwLHRoaXMuX3ZhbHVlT25TbGlkZVN0YXJ0IT10aGlzLnZhbHVlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KCksdGhpcy5fdmFsdWVPblNsaWRlU3RhcnQ9dGhpcy5fbGFzdFBvaW50ZXJFdmVudD1udWxsKX0sdGhpcy5fd2luZG93Qmx1cj0oKT0+e3RoaXMuX2xhc3RQb2ludGVyRXZlbnQmJnRoaXMuX3BvaW50ZXJVcCh0aGlzLl9sYXN0UG9pbnRlckV2ZW50KX0sdGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnRhYkluZGV4PXBhcnNlSW50KHMpfHwwLGEucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntsZXQgdT1lLm5hdGl2ZUVsZW1lbnQ7dS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGNjKSx1LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGNjKX0pfWdldCBpbnZlcnQoKXtyZXR1cm4gdGhpcy5faW52ZXJ0fXNldCBpbnZlcnQoZSl7dGhpcy5faW52ZXJ0PVJ0KGUpfWdldCBtYXgoKXtyZXR1cm4gdGhpcy5fbWF4fXNldCBtYXgoZSl7dGhpcy5fbWF4PUJpKGUsdGhpcy5fbWF4KSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBtaW4oKXtyZXR1cm4gdGhpcy5fbWlufXNldCBtaW4oZSl7dGhpcy5fbWluPUJpKGUsdGhpcy5fbWluKSx0aGlzLl9wZXJjZW50PXRoaXMuX2NhbGN1bGF0ZVBlcmNlbnRhZ2UodGhpcy5fdmFsdWUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBzdGVwKCl7cmV0dXJuIHRoaXMuX3N0ZXB9c2V0IHN0ZXAoZSl7dGhpcy5fc3RlcD1CaShlLHRoaXMuX3N0ZXApLHRoaXMuX3N0ZXAlMSE9MCYmKHRoaXMuX3JvdW5kVG9EZWNpbWFsPXRoaXMuX3N0ZXAudG9TdHJpbmcoKS5zcGxpdCgiLiIpLnBvcCgpLmxlbmd0aCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHRodW1iTGFiZWwoKXtyZXR1cm4gdGhpcy5fdGh1bWJMYWJlbH1zZXQgdGh1bWJMYWJlbChlKXt0aGlzLl90aHVtYkxhYmVsPVJ0KGUpfWdldCB0aWNrSW50ZXJ2YWwoKXtyZXR1cm4gdGhpcy5fdGlja0ludGVydmFsfXNldCB0aWNrSW50ZXJ2YWwoZSl7dGhpcy5fdGlja0ludGVydmFsPSJhdXRvIj09PWU/ImF1dG8iOiJudW1iZXIiPT10eXBlb2YgZXx8InN0cmluZyI9PXR5cGVvZiBlP0JpKGUsdGhpcy5fdGlja0ludGVydmFsKTowfWdldCB2YWx1ZSgpe3JldHVybiBudWxsPT09dGhpcy5fdmFsdWUmJih0aGlzLnZhbHVlPXRoaXMuX21pbiksdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe2lmKGUhPT10aGlzLl92YWx1ZSl7bGV0IGk9QmkoZSwwKTt0aGlzLl9yb3VuZFRvRGVjaW1hbCYmaSE9PXRoaXMubWluJiZpIT09dGhpcy5tYXgmJihpPXBhcnNlRmxvYXQoaS50b0ZpeGVkKHRoaXMuX3JvdW5kVG9EZWNpbWFsKSkpLHRoaXMuX3ZhbHVlPWksdGhpcy5fcGVyY2VudD10aGlzLl9jYWxjdWxhdGVQZXJjZW50YWdlKHRoaXMuX3ZhbHVlKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX19Z2V0IHZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsfXNldCB2ZXJ0aWNhbChlKXt0aGlzLl92ZXJ0aWNhbD1SdChlKX1nZXQgZGlzcGxheVZhbHVlKCl7cmV0dXJuIHRoaXMuZGlzcGxheVdpdGg/dGhpcy5kaXNwbGF5V2l0aCh0aGlzLnZhbHVlKTp0aGlzLl9yb3VuZFRvRGVjaW1hbCYmdGhpcy52YWx1ZSYmdGhpcy52YWx1ZSUxIT0wP3RoaXMudmFsdWUudG9GaXhlZCh0aGlzLl9yb3VuZFRvRGVjaW1hbCk6dGhpcy52YWx1ZXx8MH1mb2N1cyhlKXt0aGlzLl9mb2N1c0hvc3RFbGVtZW50KGUpfWJsdXIoKXt0aGlzLl9ibHVySG9zdEVsZW1lbnQoKX1nZXQgcGVyY2VudCgpe3JldHVybiB0aGlzLl9jbGFtcCh0aGlzLl9wZXJjZW50KX1fc2hvdWxkSW52ZXJ0QXhpcygpe3JldHVybiB0aGlzLnZlcnRpY2FsPyF0aGlzLmludmVydDp0aGlzLmludmVydH1faXNNaW5WYWx1ZSgpe3JldHVybiAwPT09dGhpcy5wZXJjZW50fV9nZXRUaHVtYkdhcCgpe3JldHVybiB0aGlzLmRpc2FibGVkPzc6dGhpcy5faXNNaW5WYWx1ZSgpJiYhdGhpcy50aHVtYkxhYmVsP3RoaXMuX2lzQWN0aXZlPzEwOjc6MH1fZ2V0VHJhY2tCYWNrZ3JvdW5kU3R5bGVzKCl7bGV0IGk9dGhpcy52ZXJ0aWNhbD9gMSwgJHsxLXRoaXMucGVyY2VudH0sIDFgOjEtdGhpcy5wZXJjZW50KyIsIDEsIDEiO3JldHVybnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgke3RoaXMuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCk/Ii0iOiIifSR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weCkgc2NhbGUzZCgke2l9KWB9fV9nZXRUcmFja0ZpbGxTdHlsZXMoKXtsZXQgZT10aGlzLnBlcmNlbnQscj10aGlzLnZlcnRpY2FsP2AxLCAke2V9LCAxYDpgJHtlfSwgMSwgMWA7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy5fc2hvdWxkSW52ZXJ0TW91c2VDb29yZHMoKT8iIjoiLSJ9JHt0aGlzLl9nZXRUaHVtYkdhcCgpfXB4KSBzY2FsZTNkKCR7cn0pYCxkaXNwbGF5OjA9PT1lPyJub25lIjoiIn19X2dldFRpY2tzQ29udGFpbmVyU3R5bGVzKCl7cmV0dXJue3RyYW5zZm9ybTpgdHJhbnNsYXRlJHt0aGlzLnZlcnRpY2FsPyJZIjoiWCJ9KCR7dGhpcy52ZXJ0aWNhbHx8InJ0bCIhPXRoaXMuX2dldERpcmVjdGlvbigpPyItIjoiIn0ke3RoaXMuX3RpY2tJbnRlcnZhbFBlcmNlbnQvMioxMDB9JSlgfX1fZ2V0VGlja3NTdHlsZXMoKXtsZXQgZT0xMDAqdGhpcy5fdGlja0ludGVydmFsUGVyY2VudCxhPXtiYWNrZ3JvdW5kU2l6ZTp0aGlzLnZlcnRpY2FsP2AycHggJHtlfSVgOmAke2V9JSAycHhgLHRyYW5zZm9ybTpgdHJhbnNsYXRlWigwKSB0cmFuc2xhdGUke3RoaXMudmVydGljYWw/IlkiOiJYIn0oJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6Ii0ifSR7ZS8yfSUpJHt0aGlzLnZlcnRpY2FsfHwicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCk/IiI6IiByb3RhdGUoMTgwZGVnKSJ9YH07aWYodGhpcy5faXNNaW5WYWx1ZSgpJiZ0aGlzLl9nZXRUaHVtYkdhcCgpKXtsZXQgYyxsPXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtjPXRoaXMudmVydGljYWw/bD8iQm90dG9tIjoiVG9wIjpsPyJSaWdodCI6IkxlZnQiLGFbYHBhZGRpbmcke2N9YF09YCR7dGhpcy5fZ2V0VGh1bWJHYXAoKX1weGB9cmV0dXJuIGF9X2dldFRodW1iQ29udGFpbmVyU3R5bGVzKCl7bGV0IGU9dGhpcy5fc2hvdWxkSW52ZXJ0QXhpcygpO3JldHVybnt0cmFuc2Zvcm06YHRyYW5zbGF0ZSR7dGhpcy52ZXJ0aWNhbD8iWSI6IlgifSgtJHsxMDAqKCgicnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCl8fHRoaXMudmVydGljYWw/ZTohZSk/dGhpcy5wZXJjZW50OjEtdGhpcy5wZXJjZW50KX0lKWB9fV9zaG91bGRJbnZlcnRNb3VzZUNvb3Jkcygpe2xldCBlPXRoaXMuX3Nob3VsZEludmVydEF4aXMoKTtyZXR1cm4icnRsIiE9dGhpcy5fZ2V0RGlyZWN0aW9uKCl8fHRoaXMudmVydGljYWw/ZTohZX1fZ2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX2RpciYmInJ0bCI9PXRoaXMuX2Rpci52YWx1ZT8icnRsIjoibHRyIn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKS5zdWJzY3JpYmUoZT0+e3RoaXMuX2lzQWN0aXZlPSEhZSYmImtleWJvYXJkIiE9PWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfSksdGhpcy5fZGlyJiYodGhpcy5fZGlyQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuX2Rpci5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSl9bmdPbkRlc3Ryb3koKXtsZXQgZT10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLGNjKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLGNjKSx0aGlzLl9sYXN0UG9pbnRlckV2ZW50PW51bGwsdGhpcy5fcmVtb3ZlR2xvYmFsRXZlbnRzKCksdGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLHRoaXMuX2RpckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfV9vbk1vdXNlZW50ZXIoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5fc2xpZGVyRGltZW5zaW9ucz10aGlzLl9nZXRTbGlkZXJEaW1lbnNpb25zKCksdGhpcy5fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpKX1fb25Gb2N1cygpe3RoaXMuX3NsaWRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0U2xpZGVyRGltZW5zaW9ucygpLHRoaXMuX3VwZGF0ZVRpY2tJbnRlcnZhbFBlcmNlbnQoKX1fb25CbHVyKCl7dGhpcy5vblRvdWNoZWQoKX1fb25LZXlkb3duKGUpe2lmKHRoaXMuZGlzYWJsZWR8fGtyKGUpfHx0aGlzLl9pc1NsaWRpbmcmJiJrZXlib2FyZCIhPT10aGlzLl9pc1NsaWRpbmcpcmV0dXJuO2xldCBpPXRoaXMudmFsdWU7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSAzMzp0aGlzLl9pbmNyZW1lbnQoMTApO2JyZWFrO2Nhc2UgMzQ6dGhpcy5faW5jcmVtZW50KC0xMCk7YnJlYWs7Y2FzZSAzNTp0aGlzLnZhbHVlPXRoaXMubWF4O2JyZWFrO2Nhc2UgMzY6dGhpcy52YWx1ZT10aGlzLm1pbjticmVhaztjYXNlIDM3OnRoaXMuX2luY3JlbWVudCgicnRsIj09dGhpcy5fZ2V0RGlyZWN0aW9uKCk/MTotMSk7YnJlYWs7Y2FzZSAzODp0aGlzLl9pbmNyZW1lbnQoMSk7YnJlYWs7Y2FzZSAzOTp0aGlzLl9pbmNyZW1lbnQoInJ0bCI9PXRoaXMuX2dldERpcmVjdGlvbigpPy0xOjEpO2JyZWFrO2Nhc2UgNDA6dGhpcy5faW5jcmVtZW50KC0xKTticmVhaztkZWZhdWx0OnJldHVybn1pIT10aGlzLnZhbHVlJiYodGhpcy5fZW1pdElucHV0RXZlbnQoKSx0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKSksdGhpcy5faXNTbGlkaW5nPSJrZXlib2FyZCIsZS5wcmV2ZW50RGVmYXVsdCgpfV9vbktleXVwKCl7ImtleWJvYXJkIj09PXRoaXMuX2lzU2xpZGluZyYmKHRoaXMuX2lzU2xpZGluZz1udWxsKX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X2JpbmRHbG9iYWxFdmVudHMoZSl7bGV0IGk9dGhpcy5fZG9jdW1lbnQscj1PdyhlKSxzPXI/InRvdWNoZW5kIjoibW91c2V1cCI7aS5hZGRFdmVudExpc3RlbmVyKHI/InRvdWNobW92ZSI6Im1vdXNlbW92ZSIsdGhpcy5fcG9pbnRlck1vdmUsY2MpLGkuYWRkRXZlbnRMaXN0ZW5lcihzLHRoaXMuX3BvaW50ZXJVcCxjYyksciYmaS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGNhbmNlbCIsdGhpcy5fcG9pbnRlclVwLGNjKTtsZXQgYT10aGlzLl9nZXRXaW5kb3coKTt0eXBlb2YgYTwidSImJmEmJmEuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5fd2luZG93Qmx1cil9X3JlbW92ZUdsb2JhbEV2ZW50cygpe2xldCBlPXRoaXMuX2RvY3VtZW50O2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxjYyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLl9wb2ludGVyVXAsY2MpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wb2ludGVyTW92ZSxjYyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5fcG9pbnRlclVwLGNjKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIix0aGlzLl9wb2ludGVyVXAsY2MpO2xldCBpPXRoaXMuX2dldFdpbmRvdygpO3R5cGVvZiBpPCJ1IiYmaSYmaS5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIix0aGlzLl93aW5kb3dCbHVyKX1faW5jcmVtZW50KGUpe2xldCBpPXRoaXMuX2NsYW1wKHRoaXMudmFsdWV8fDAsdGhpcy5taW4sdGhpcy5tYXgpO3RoaXMudmFsdWU9dGhpcy5fY2xhbXAoaSt0aGlzLnN0ZXAqZSx0aGlzLm1pbix0aGlzLm1heCl9X3VwZGF0ZVZhbHVlRnJvbVBvc2l0aW9uKGUpe2lmKCF0aGlzLl9zbGlkZXJEaW1lbnNpb25zKXJldHVybjtsZXQgcz10aGlzLl9jbGFtcCgoKHRoaXMudmVydGljYWw/ZS55OmUueCktKHRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy50b3A6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5sZWZ0KSkvKHRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5oZWlnaHQ6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy53aWR0aCkpO2lmKHRoaXMuX3Nob3VsZEludmVydE1vdXNlQ29vcmRzKCkmJihzPTEtcyksMD09PXMpdGhpcy52YWx1ZT10aGlzLm1pbjtlbHNlIGlmKDE9PT1zKXRoaXMudmFsdWU9dGhpcy5tYXg7ZWxzZXtsZXQgYT10aGlzLl9jYWxjdWxhdGVWYWx1ZShzKSxsPU1hdGgucm91bmQoKGEtdGhpcy5taW4pL3RoaXMuc3RlcCkqdGhpcy5zdGVwK3RoaXMubWluO3RoaXMudmFsdWU9dGhpcy5fY2xhbXAobCx0aGlzLm1pbix0aGlzLm1heCl9fV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9jb250cm9sVmFsdWVBY2Nlc3NvckNoYW5nZUZuKHRoaXMudmFsdWUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLmNoYW5nZS5lbWl0KHRoaXMuX2NyZWF0ZUNoYW5nZUV2ZW50KCkpfV9lbWl0SW5wdXRFdmVudCgpe3RoaXMuaW5wdXQuZW1pdCh0aGlzLl9jcmVhdGVDaGFuZ2VFdmVudCgpKX1fdXBkYXRlVGlja0ludGVydmFsUGVyY2VudCgpe2lmKCF0aGlzLnRpY2tJbnRlcnZhbHx8IXRoaXMuX3NsaWRlckRpbWVuc2lvbnMpcmV0dXJuO2xldCBlO2lmKCJhdXRvIj09dGhpcy50aWNrSW50ZXJ2YWwpe2xldCBpPXRoaXMudmVydGljYWw/dGhpcy5fc2xpZGVyRGltZW5zaW9ucy5oZWlnaHQ6dGhpcy5fc2xpZGVyRGltZW5zaW9ucy53aWR0aDtlPU1hdGguY2VpbCgzMC8oaSp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKSkpKnRoaXMuc3RlcC9pfWVsc2UgZT10aGlzLnRpY2tJbnRlcnZhbCp0aGlzLnN0ZXAvKHRoaXMubWF4LXRoaXMubWluKTt0aGlzLl90aWNrSW50ZXJ2YWxQZXJjZW50PWVvZShlKT9lOjB9X2NyZWF0ZUNoYW5nZUV2ZW50KGU9dGhpcy52YWx1ZSl7bGV0IGk9bmV3IGNsYXNze307cmV0dXJuIGkuc291cmNlPXRoaXMsaS52YWx1ZT1lLGl9X2NhbGN1bGF0ZVBlcmNlbnRhZ2UoZSl7bGV0IGk9KChlfHwwKS10aGlzLm1pbikvKHRoaXMubWF4LXRoaXMubWluKTtyZXR1cm4gZW9lKGkpP2k6MH1fY2FsY3VsYXRlVmFsdWUoZSl7cmV0dXJuIHRoaXMubWluK2UqKHRoaXMubWF4LXRoaXMubWluKX1fY2xhbXAoZSxpPTAscj0xKXtyZXR1cm4gTWF0aC5tYXgoaSxNYXRoLm1pbihlLHIpKX1fZ2V0U2xpZGVyRGltZW5zaW9ucygpe3JldHVybiB0aGlzLl9zbGlkZXJXcmFwcGVyP3RoaXMuX3NsaWRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpudWxsfV9mb2N1c0hvc3RFbGVtZW50KGUpe3RoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhlKX1fYmx1ckhvc3RFbGVtZW50KCl7dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmJsdXIoKX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5kaXNhYmxlZD1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKEZyKSxNKG5uKSxNKCRpLDgpLHZvKCJ0YWJpbmRleCIpLE0oX3QpLE0oSHQpLE0oUGksOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zbGlkZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChoVmUsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5fc2xpZGVyV3JhcHBlcj1yLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJzbGlkZXIiLDEsIm1hdC1zbGlkZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0saG9zdFZhcnM6MjksaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25Gb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uQmx1cigpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9vbktleWRvd24obyl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uS2V5dXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9vbk1vdXNlZW50ZXIoKX0pKCJzZWxlY3RzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIG8ucHJldmVudERlZmF1bHQoKX0pLDImZSYmKF9zKCJ0YWJJbmRleCIsaS50YWJJbmRleCksemUoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJhcmlhLXZhbHVlbWF4IixpLm1heCkoImFyaWEtdmFsdWVtaW4iLGkubWluKSgiYXJpYS12YWx1ZW5vdyIsaS52YWx1ZSkoImFyaWEtdmFsdWV0ZXh0IixudWxsPT1pLnZhbHVlVGV4dD9pLmRpc3BsYXlWYWx1ZTppLnZhbHVlVGV4dCkoImFyaWEtb3JpZW50YXRpb24iLGkudmVydGljYWw/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCIpLGV0KCJtYXQtc2xpZGVyLWRpc2FibGVkIixpLmRpc2FibGVkKSgibWF0LXNsaWRlci1oYXMtdGlja3MiLGkudGlja0ludGVydmFsKSgibWF0LXNsaWRlci1ob3Jpem9udGFsIiwhaS52ZXJ0aWNhbCkoIm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCIsaS5fc2hvdWxkSW52ZXJ0QXhpcygpKSgibWF0LXNsaWRlci1pbnZlcnQtbW91c2UtY29vcmRzIixpLl9zaG91bGRJbnZlcnRNb3VzZUNvb3JkcygpKSgibWF0LXNsaWRlci1zbGlkaW5nIixpLl9pc1NsaWRpbmcpKCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsLXNob3dpbmciLGkudGh1bWJMYWJlbCkoIm1hdC1zbGlkZXItdmVydGljYWwiLGkudmVydGljYWwpKCJtYXQtc2xpZGVyLW1pbi12YWx1ZSIsaS5faXNNaW5WYWx1ZSgpKSgibWF0LXNsaWRlci1oaWRlLWxhc3QtdGljayIsaS5kaXNhYmxlZHx8aS5faXNNaW5WYWx1ZSgpJiZpLl9nZXRUaHVtYkdhcCgpJiZpLl9zaG91bGRJbnZlcnRBeGlzKCkpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsIk5vb3BBbmltYXRpb25zIj09PWkuX2FuaW1hdGlvbk1vZGUpKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQiLGNvbG9yOiJjb2xvciIsdGFiSW5kZXg6InRhYkluZGV4IixpbnZlcnQ6ImludmVydCIsbWF4OiJtYXgiLG1pbjoibWluIixzdGVwOiJzdGVwIix0aHVtYkxhYmVsOiJ0aHVtYkxhYmVsIix0aWNrSW50ZXJ2YWw6InRpY2tJbnRlcnZhbCIsdmFsdWU6InZhbHVlIixkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLHZhbHVlVGV4dDoidmFsdWVUZXh0Iix2ZXJ0aWNhbDoidmVydGljYWwifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsaW5wdXQ6ImlucHV0Iix2YWx1ZUNoYW5nZToidmFsdWVDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNsaWRlciJdLGZlYXR1cmVzOlskdChbdlZlXSksdHRdLGRlY2xzOjEzLHZhcnM6Nixjb25zdHM6W1sxLCJtYXQtc2xpZGVyLXdyYXBwZXIiXSxbInNsaWRlcldyYXBwZXIiLCIiXSxbMSwibWF0LXNsaWRlci10cmFjay13cmFwcGVyIl0sWzEsIm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZCIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRyYWNrLWZpbGwiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcy1jb250YWluZXIiLDMsIm5nU3R5bGUiXSxbMSwibWF0LXNsaWRlci10aWNrcyIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lciIsMywibmdTdHlsZSJdLFsxLCJtYXQtc2xpZGVyLWZvY3VzLXJpbmciXSxbMSwibWF0LXNsaWRlci10aHVtYiJdLFsxLCJtYXQtc2xpZGVyLXRodW1iLWxhYmVsIl0sWzEsIm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwLDEpKDIsImRpdiIsMiksTygzLCJkaXYiLDMpKDQsImRpdiIsNCksdigpLF8oNSwiZGl2Iiw1KSxPKDYsImRpdiIsNiksdigpLF8oNywiZGl2Iiw3KSxPKDgsImRpdiIsOCkoOSwiZGl2Iiw5KSxfKDEwLCJkaXYiLDEwKSgxMSwic3BhbiIsMTEpLEEoMTIpLHYoKSgpKCkoKSksMiZlJiYoQygzKSx5KCJuZ1N0eWxlIixpLl9nZXRUcmFja0JhY2tncm91bmRTdHlsZXMoKSksQygxKSx5KCJuZ1N0eWxlIixpLl9nZXRUcmFja0ZpbGxTdHlsZXMoKSksQygxKSx5KCJuZ1N0eWxlIixpLl9nZXRUaWNrc0NvbnRhaW5lclN0eWxlcygpKSxDKDEpLHkoIm5nU3R5bGUiLGkuX2dldFRpY2tzU3R5bGVzKCkpLEMoMSkseSgibmdTdHlsZSIsaS5fZ2V0VGh1bWJDb250YWluZXJTdHlsZXMoKSksQyg1KSx5dChpLmRpc3BsYXlWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3p1XSxzdHlsZXM6WycubWF0LXNsaWRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo4cHg7b3V0bGluZTpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpOmFjdGl2ZSwubWF0LXNsaWRlci5tYXQtc2xpZGVyLXNsaWRpbmc6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKXtjdXJzb3I6Z3JhYmJpbmd9Lm1hdC1zbGlkZXItd3JhcHBlcnstd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDpleGFjdDtjb2xvci1hZGp1c3Q6ZXhhY3Q7cG9zaXRpb246YWJzb2x1dGV9Lm1hdC1zbGlkZXItdHJhY2std3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVufS5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7cG9zaXRpb246YWJzb2x1dGU7dHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybS1vcmlnaW46MTAwJSAxMDAlO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDtvdmVyZmxvdzpoaWRkZW59Lm1hdC1zbGlkZXItdGlja3N7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6Y29udGVudC1ib3g7YmFja2dyb3VuZC1jbGlwOmNvbnRlbnQtYm94O2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci10aHVtYi1jb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXItcmFkaXVzOjUwJTt0cmFuc2Zvcm06c2NhbGUoMCk7b3BhY2l0eTowO3RyYW5zaXRpb246dHJhbnNmb3JtIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpLGJhY2tncm91bmQtY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksb3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci5jZGsta2V5Ym9hcmQtZm9jdXNlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5nLC5tYXQtc2xpZGVyLmNkay1wcm9ncmFtLWZvY3VzZWQgLm1hdC1zbGlkZXItZm9jdXMtcmluZ3t0cmFuc2Zvcm06c2NhbGUoMSk7b3BhY2l0eToxfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCk6bm90KC5tYXQtc2xpZGVyLXNsaWRpbmcpIC5tYXQtc2xpZGVyLXRodW1ie2N1cnNvcjpncmFifS5tYXQtc2xpZGVyLXRodW1ie3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xMHB4O2JvdHRvbTotMTBweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXI6M3B4IHNvbGlkIHJnYmEoMCwwLDAsMCk7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNmb3JtOnNjYWxlKDAuNyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYmFja2dyb3VuZC1jb2xvciA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxib3JkZXItY29sb3IgNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSl9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWx7ZGlzcGxheTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjI4cHg7aGVpZ2h0OjI4cHg7Ym9yZGVyLXJhZGl1czo1MCU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gNDAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSksYm9yZGVyLXJhZGl1cyA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKSxiYWNrZ3JvdW5kLWNvbG9yIDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt6LWluZGV4OjE7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKX0ubWF0LXNsaWRlci1zbGlkaW5nIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGwsLm1hdC1zbGlkZXItc2xpZGluZyAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5kLC5tYXQtc2xpZGVyLXNsaWRpbmcgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVye3RyYW5zaXRpb24tZHVyYXRpb246MG1zfS5tYXQtc2xpZGVyLWhhcy10aWNrcyAubWF0LXNsaWRlci13cmFwcGVyOjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci13aWR0aDowO2JvcmRlci1zdHlsZTpzb2xpZDtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IDQwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpfS5tYXQtc2xpZGVyLWhhcy10aWNrcy5jZGstZm9jdXNlZDpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVyLC5tYXQtc2xpZGVyLWhhcy10aWNrczpob3Zlcjpub3QoLm1hdC1zbGlkZXItaGlkZS1sYXN0LXRpY2spIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye29wYWNpdHk6MX0ubWF0LXNsaWRlci1oYXMtdGlja3MuY2RrLWZvY3VzZWQ6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrcywubWF0LXNsaWRlci1oYXMtdGlja3M6aG92ZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKSAubWF0LXNsaWRlci10aWNrc3tvcGFjaXR5OjF9Lm1hdC1zbGlkZXItdGh1bWItbGFiZWwtc2hvd2luZyAubWF0LXNsaWRlci1mb2N1cy1yaW5ne2Rpc3BsYXk6bm9uZX0ubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2Rpc3BsYXk6ZmxleH0ubWF0LXNsaWRlci1heGlzLWludmVydGVkIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9Lm1hdC1zbGlkZXItYXhpcy1pbnZlcnRlZCAubWF0LXNsaWRlci10cmFjay1iYWNrZ3JvdW5ke3RyYW5zZm9ybS1vcmlnaW46MCAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQubWF0LXNsaWRlci10aHVtYi1sYWJlbC1zaG93aW5nIC5tYXQtc2xpZGVyLXRodW1ie3RyYW5zZm9ybTpzY2FsZSgwKX0ubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse2JvcmRlci1yYWRpdXM6NTAlIDUwJSAwfS5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHtvcGFjaXR5OjF9Lm1hdC1zbGlkZXI6bm90KC5tYXQtc2xpZGVyLWRpc2FibGVkKS5jZGstbW91c2UtZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYiwubWF0LXNsaWRlcjpub3QoLm1hdC1zbGlkZXItZGlzYWJsZWQpLmNkay10b3VjaC1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLC5tYXQtc2xpZGVyOm5vdCgubWF0LXNsaWRlci1kaXNhYmxlZCkuY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYntib3JkZXItd2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZSgxKX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RyYW5zZm9ybTpzY2FsZSgwKTtvcGFjaXR5OjB9Lm1hdC1zbGlkZXItZGlzYWJsZWQgLm1hdC1zbGlkZXItdGh1bWJ7Ym9yZGVyLXdpZHRoOjRweDt0cmFuc2Zvcm06c2NhbGUoMC41KX0ubWF0LXNsaWRlci1kaXNhYmxlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHtkaXNwbGF5Om5vbmV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6NDhweDttaW4td2lkdGg6MTI4cHh9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci13cmFwcGVye2hlaWdodDoycHg7dG9wOjIzcHg7bGVmdDo4cHg7cmlnaHQ6OHB4fS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7aGVpZ2h0OjJweDtib3JkZXItbGVmdC13aWR0aDoycHg7cmlnaHQ6MDt0b3A6MH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stZmlsbHtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7dHJhbnNmb3JtOnNjYWxlWCgwKX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjJweDt3aWR0aDoxMDAlO3RyYW5zZm9ybTpzY2FsZVgoMSl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjJweDt3aWR0aDoxMDAlfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci10aWNrcy1jb250YWluZXJ7aGVpZ2h0OjA7b3V0bGluZTpzb2xpZCAycHg7dG9wOjFweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRpY2tze2hlaWdodDoycHg7d2lkdGg6MTAwJX0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcnt3aWR0aDoxMDAlO2hlaWdodDowO3RvcDo1MCV9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbCAubWF0LXNsaWRlci1mb2N1cy1yaW5ne3RvcDotMTVweDtyaWdodDotMTVweH0ubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVse3JpZ2h0Oi0xNHB4O3RvcDotNDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgyNnB4KSBzY2FsZSgwLjAxKSByb3RhdGUoNDVkZWcpfS5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItaG9yaXpvbnRhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLWhvcml6b250YWwuY2RrLWZvY3VzZWQgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlci1ob3Jpem9udGFsLmNkay1mb2N1c2VkIC5tYXQtc2xpZGVyLXRodW1iLWxhYmVsLXRleHR7dHJhbnNmb3JtOm5vbmV9Lm1hdC1zbGlkZXItdmVydGljYWx7d2lkdGg6NDhweDttaW4taGVpZ2h0OjEyOHB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXdyYXBwZXJ7d2lkdGg6MnB4O3RvcDo4cHg7Ym90dG9tOjhweDtsZWZ0OjIzcHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7d2lkdGg6MnB4O2JvcmRlci10b3Atd2lkdGg6MnB4O2JvdHRvbTowO2xlZnQ6MH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay13cmFwcGVye2hlaWdodDoxMDAlO3dpZHRoOjJweH0ubWF0LXNsaWRlci12ZXJ0aWNhbCAubWF0LXNsaWRlci10cmFjay1maWxse2hlaWdodDoxMDAlO3dpZHRoOjJweDt0cmFuc2Zvcm06c2NhbGVZKDApfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmR7aGVpZ2h0OjEwMCU7d2lkdGg6MnB4O3RyYW5zZm9ybTpzY2FsZVkoMSl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3MtY29udGFpbmVye3dpZHRoOjJweDtoZWlnaHQ6MTAwJX0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRpY2tzLWNvbnRhaW5lcnt3aWR0aDowO291dGxpbmU6c29saWQgMnB4O2xlZnQ6MXB4fS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmd7Ym90dG9tOi0xNXB4O2xlZnQ6LTE1cHh9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGlja3N7d2lkdGg6MnB4O2hlaWdodDoxMDAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDowO2xlZnQ6NTAlfS5tYXQtc2xpZGVyLXZlcnRpY2FsIC5tYXQtc2xpZGVyLXRodW1iey13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW59Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWx7Ym90dG9tOi0xNHB4O2xlZnQ6LTQwcHg7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMjZweCkgc2NhbGUoMC4wMSkgcm90YXRlKC00NWRlZyl9Lm1hdC1zbGlkZXItdmVydGljYWwgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dHt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0ubWF0LXNsaWRlci12ZXJ0aWNhbC5jZGstZm9jdXNlZCAubWF0LXNsaWRlci10aHVtYi1sYWJlbHt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLXdyYXBwZXI6OmFmdGVye2xlZnQ6MDtyaWdodDphdXRvfVtkaXI9cnRsXSAubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLWZpbGx7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDEwMCV9W2Rpcj1ydGxdIC5tYXQtc2xpZGVyLWhvcml6b250YWwgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stZmlsbHt0cmFuc2Zvcm0tb3JpZ2luOjAgMH1bZGlyPXJ0bF0gLm1hdC1zbGlkZXItaG9yaXpvbnRhbC5tYXQtc2xpZGVyLWF4aXMtaW52ZXJ0ZWQgLm1hdC1zbGlkZXItdHJhY2stYmFja2dyb3VuZHt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0ubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci10cmFjay1maWxsLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLXRyYWNrLWJhY2tncm91bmQsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGlja3MsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItY29udGFpbmVyLC5tYXQtc2xpZGVyLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGVyLWZvY3VzLXJpbmcsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWIsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwsLm1hdC1zbGlkZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgLm1hdC1zbGlkZXItdGh1bWItbGFiZWwtdGV4dCwubWF0LXNsaWRlci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlci1oYXMtdGlja3MgLm1hdC1zbGlkZXItd3JhcHBlcjo6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lfSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGVvZShuKXtyZXR1cm4haXNOYU4obikmJmlzRmluaXRlKG4pfWZ1bmN0aW9uIE93KG4pe3JldHVybiJ0Ij09PW4udHlwZVswXX1mdW5jdGlvbiB0b2Uobix0KXtsZXQgZTtyZXR1cm4gZT1PdyhuKT8ibnVtYmVyIj09dHlwZW9mIHQ/dlUobi50b3VjaGVzLHQpfHx2VShuLmNoYW5nZWRUb3VjaGVzLHQpOm4udG91Y2hlc1swXXx8bi5jaGFuZ2VkVG91Y2hlc1swXTpuLGU/e3g6ZS5jbGllbnRYLHk6ZS5jbGllbnRZfTp2b2lkIDB9ZnVuY3Rpb24gdlUobix0KXtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuW2VdLmlkZW50aWZpZXI9PT10KXJldHVybiBuW2VdfXZhciBXaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbG4sbG5dfSksbn0pKCk7ZnVuY3Rpb24geFZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LXNsaWRlciIsMTEpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vblNsaWRlckNoYW5nZS5lbWl0KHIudmFsdWUpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoMik7eSgibWluIiwwKSgibWF4IixlLnNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0KSgidmFsdWUiLGUuc2Nyb2xsQmVnaW5JbmRleCl9fWZ1bmN0aW9uIENWZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNikoMSwiYnV0dG9uIiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uTmF2aWdhdGVMZWZ0LmVtaXQoKSl9KSxBKDIsIiA8ICIpLHYoKSxfKDMsImRpdiIsOCksQSg0KSx2KCksXyg1LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25OYXZpZ2F0ZVJpZ2h0LmVtaXQoKSl9KSxBKDYsIiA+ICIpLHYoKSxFKDcseFZlLDEsMywibWF0LXNsaWRlciIsMTApLHYoKX1pZigyJm4pe2xldCBlPVMoKTtDKDQpLFRUKCIgIixlLnNjcm9sbEJlZ2luSW5kZXgsIiB+ICIsZS5zY3JvbGxCZWdpbkluZGV4K2UuZGlzcGxheUNvdW50LTEsIiBvZiAiLGUubnVtRXhlY3V0aW9ucywiICIpLEMoMykseSgibmdJZiIsZS5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdD4wKX19dmFyIE1WZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuW24sdCxlXX07ZnVuY3Rpb24gd1ZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxNCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89b2UoZSkuaW5kZXg7cmV0dXJuIHNlKFMoMikub25FeGVjdXRpb25EaWdlc3RDbGlja2VkLmVtaXQobykpfSksXygxLCJkaXYiLDE1KSxBKDIpLHYoKSgpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9UygyKTtDKDEpLFppKCJ0aXRsZSIsZS5vcF90eXBlKSx5KCJuZ0NsYXNzIixaeCgzLE1WZSxlLmlzX2dyYXBoPyJmdW5jLWdyYXBoLWV4ZWN1dGlvbiI6IiIsaT09PXIuZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleD8iZm9jdXNlZCI6IiIsci5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXNbaV18fCIiKSksQygxKSxqZSgiICIsZS5zaG9ydF9vcF90eXBlLCIgIil9fWZ1bmN0aW9uIFNWZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxMiksRSgxLHdWZSwzLDcsImRpdiIsMTMpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJuZ0Zvck9mIixlLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzKX19ZnVuY3Rpb24gRVZlKG4sdCl7aWYoMSZuJiYoc24oMCksTygxLCJ0Zi1kZWJ1Z2dlci12Mi1leGVjdXRpb24tZGF0YSIsMTYpLGFuKCkpLDImbil7bGV0IGU9UygpO0MoMSkseSgiZm9jdXNlZEV4ZWN1dGlvbkluZGV4IixlLmZvY3VzZWRFeGVjdXRpb25JbmRleCl9fXZhciBub2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlUnVuSWQ9bnVsbCx0aGlzLmxvYWRpbmdOdW1FeGVjdXRpb25zPSExLHRoaXMubnVtRXhlY3V0aW9ucz0wLHRoaXMuc2Nyb2xsQmVnaW5JbmRleD0wLHRoaXMuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQ9MCx0aGlzLnBhZ2VTaXplPTAsdGhpcy5kaXNwbGF5Q291bnQ9MCx0aGlzLmRpc3BsYXlFeGVjdXRpb25EaWdlc3RzPVtdLHRoaXMuZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzPVtdLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4PW51bGwsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4PW51bGwsdGhpcy5mb2N1c2VkRXhlY3V0aW9uRGF0YT1udWxsLHRoaXMub25OYXZpZ2F0ZUxlZnQ9bmV3IEcsdGhpcy5vbk5hdmlnYXRlUmlnaHQ9bmV3IEcsdGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQ9bmV3IEcsdGhpcy5vblNsaWRlckNoYW5nZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGltZWxpbmUtY29tcG9uZW50Il1dLGlucHV0czp7YWN0aXZlUnVuSWQ6ImFjdGl2ZVJ1bklkIixsb2FkaW5nTnVtRXhlY3V0aW9uczoibG9hZGluZ051bUV4ZWN1dGlvbnMiLG51bUV4ZWN1dGlvbnM6Im51bUV4ZWN1dGlvbnMiLHNjcm9sbEJlZ2luSW5kZXg6InNjcm9sbEJlZ2luSW5kZXgiLHNjcm9sbEJlZ2luSW5kZXhVcHBlckxpbWl0OiJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIscGFnZVNpemU6InBhZ2VTaXplIixkaXNwbGF5Q291bnQ6ImRpc3BsYXlDb3VudCIsZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHM6ImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXM6ImRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyIsZm9jdXNlZEV4ZWN1dGlvbkluZGV4OiJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXg6ImZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgiLGZvY3VzZWRFeGVjdXRpb25EYXRhOiJmb2N1c2VkRXhlY3V0aW9uRGF0YSJ9LG91dHB1dHM6e29uTmF2aWdhdGVMZWZ0OiJvbk5hdmlnYXRlTGVmdCIsb25OYXZpZ2F0ZVJpZ2h0OiJvbk5hdmlnYXRlUmlnaHQiLG9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZDoib25FeGVjdXRpb25EaWdlc3RDbGlja2VkIixvblNsaWRlckNoYW5nZToib25TbGlkZXJDaGFuZ2UifSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1sxLCJ0aW1lbGluZS10aXRsZSJdLFsxLCJleGVjdXRpb24tY291bnQiXSxbMSwidG9wLWxldmVsLWV4ZWN1dGlvbnMiXSxbImNsYXNzIiwibmF2aWdhdGlvbi1zZWN0aW9uIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImV4ZWN1dGlvbi10aW1lbGluZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5hdmlnYXRpb24tc2VjdGlvbiJdLFsibWF0LWJ1dHRvbiIsIiIsMSwibmF2aWdhdGlvbi1idXR0b24tbGVmdCIsMywiY2xpY2siXSxbMSwibmF2aWdhdGlvbi1wb3NpdGlvbi1pbmZvIl0sWyJtYXQtYnV0dG9uIiwiIiwxLCJuYXZpZ2F0aW9uLWJ1dHRvbi1yaWdodCIsMywiY2xpY2siXSxbImNsYXNzIiwidGltZWxpbmUtc2xpZGVyIiwic3RlcCIsIjEiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiLDQsIm5nSWYiXSxbInN0ZXAiLCIxIiwxLCJ0aW1lbGluZS1zbGlkZXIiLDMsIm1pbiIsIm1heCIsInZhbHVlIiwiaW5wdXQiXSxbMSwiZXhlY3V0aW9uLXRpbWVsaW5lIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiZXhlY3V0aW9uLWRpZ2VzdCIsMywibmdDbGFzcyIsInRpdGxlIl0sWzMsImZvY3VzZWRFeGVjdXRpb25JbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IikoMSwiZGl2IiwwKSxBKDIsIiBQeXRob24gRXhlY3V0aW9uIFRpbWVsaW5lICIpLF8oMywic3BhbiIsMSksQSg0KSx2KCkoKSxfKDUsImRpdiIsMiksRSg2LENWZSw4LDQsImRpdiIsMyksRSg3LFNWZSwyLDEsImRpdiIsNCksRSg4LEVWZSwyLDEsIm5nLWNvbnRhaW5lciIsNSksdigpKCkpLDImZSYmKEMoNCksamUoIiAoIixpLm51bUV4ZWN1dGlvbnMsIikgIiksQygyKSx5KCJuZ0lmIixpLm51bUV4ZWN1dGlvbnMpLEMoMSkseSgibmdJZiIsaS5udW1FeGVjdXRpb25zKSxDKDEpLHkoIm5nSWYiLG51bGwhPT1pLmFjdGl2ZVJ1bklkJiZudWxsIT09aS5mb2N1c2VkRXhlY3V0aW9uSW5kZXgpKX0sZGVwZW5kZW5jaWVzOltGbixkbixCZSwkcmUsX24sdXBdLHN0eWxlczpbIi5leGVjdXRpb24tZGlnZXN0W19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlM2U1ZTg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNjMGMwYzA7XG4gIGNvbG9yOiAjNDI1MDY2O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtc2l6ZTogMTBweDtcbiAgaGVpZ2h0OiAxNXB4O1xuICBwYWRkaW5nOiAxcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDEycHg7XG59XG5cbi5leGVjdXRpb24tZGlnZXN0LmZ1bmMtZ3JhcGgtZXhlY3V0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjN2RiZjU7XG4gIGNvbG9yOiAjNGU1NjY0O1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV0ge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkNGIzO1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDAwO1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmV4ZWN1dGlvbi1kaWdlc3QuSW5mTmFuQWxlcnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2U1MjU5MjtcbiAgY29sb3I6ICNmZmY7XG59XG5cblxuLmV4ZWN1dGlvbi1kaWdlc3RbX25nY29udGVudC0lQ09NUCVdOmhvdmVyIHtcbiAgYm9yZGVyOiAxcHggc29saWQgIzAwMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5leGVjdXRpb24tdGltZWxpbmVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogZmxleDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luLXRvcDogNXB4O1xuICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi50aW1lbGluZS1zbGlkZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGxlZnQ6IDM0MHB4OyBcbiAgcGFkZGluZzogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogNDBweDtcbn1cblxuICAudGltZWxpbmUtc2xpZGVyIC5tYXQtc2xpZGVyLXRodW1iIHtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICByaWdodDogLTQwcHg7XG4gIHdpZHRoOiA4MHB4O1xufVxuXG5cbi5uYXZpZ2F0aW9uLXBvc2l0aW9uLWluZm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcbiAgbWF4LXdpZHRoOiAyMDBweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG59XG5cbi5uYXZpZ2F0aW9uLXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiA0OHB4O1xuICBsaW5lLWhlaWdodDogNDhweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICB3aWR0aDogMTAwJTtcbn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLERWZT1bIl9fZm9yd2FyZF8iLCJfX2JhY2t3YXJkXyIsIl9faW5mZXJlbmNlXyJdLGlvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVJ1bklkJD10aGlzLnN0b3JlLnBpcGUodnQoVnMpKSx0aGlzLmxvYWRpbmdOdW1FeGVjdXRpb25zJD10aGlzLnN0b3JlLnBpcGUodnQoSih3UCxpPT5pLnN0YXRlPT1PZS5MT0FESU5HKSkpLHRoaXMuc2Nyb2xsQmVnaW5JbmRleCQ9dGhpcy5zdG9yZS5waXBlKHZ0KEF3KSksdGhpcy5zY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooamgsbnksKGkscik9Pk1hdGgubWF4KDAsaS1yKSkpKSx0aGlzLnBhZ2VTaXplJD10aGlzLnN0b3JlLnBpcGUodnQodHkpKSx0aGlzLmRpc3BsYXlDb3VudCQ9dGhpcy5zdG9yZS5waXBlKHZ0KG55KSksdGhpcy5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQ9dGhpcy5zdG9yZS5waXBlKHZ0KEooZnJlLGk9PmkubWFwKHI9PmZ1bmN0aW9uKG4sdD0xKXtpZighbilyZXR1cm57b3BfdHlwZToiKE4vQSkiLHNob3J0X29wX3R5cGU6Ii4uIixpc19ncmFwaDohMX07bGV0IGU9RFZlLmZpbHRlcihpPT5uLm9wX3R5cGUuc3RhcnRzV2l0aChpKSk7aWYoZS5sZW5ndGgpe2xldCBpPW4ub3BfdHlwZS5zbGljZShlWzBdLmxlbmd0aCk7cmV0dXJue29wX3R5cGU6bi5vcF90eXBlLHNob3J0X29wX3R5cGU6aS5zbGljZSgwLHQpLGlzX2dyYXBoOiEwfX1yZXR1cm57b3BfdHlwZTpuLm9wX3R5cGUsc2hvcnRfb3BfdHlwZTpuLm9wX3R5cGUuc2xpY2UoMCx0KSxpc19ncmFwaDohMX19KHIpKSkpKSx0aGlzLmRpc3BsYXlGb2N1c2VkQWxlcnRUeXBlcyQ9dGhpcy5zdG9yZS5waXBlKHZ0KE1yZSkpLHRoaXMuZm9jdXNlZEV4ZWN1dGlvbkluZGV4JD10aGlzLnN0b3JlLnBpcGUodnQodVUpKSx0aGlzLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkPXRoaXMuc3RvcmUucGlwZSh2dCh3cmUpKSx0aGlzLm51bUV4ZWN1dGlvbnMkPXRoaXMuc3RvcmUucGlwZSh2dChqaCkpfW9uTmF2aWdhdGVMZWZ0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChXdigpKX1vbk5hdmlnYXRlUmlnaHQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHF2KCkpfW9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFh2KHtkaXNwbGF5SW5kZXg6ZX0pKX1vblNsaWRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFl2KHtpbmRleDplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGYtZGVidWdnZXItdjItdGltZWxpbmUiXV0sZGVjbHM6MTIsdmFyczozMyxjb25zdHM6W1szLCJhY3RpdmVSdW5JZCIsImxvYWRpbmdOdW1FeGVjdXRpb25zIiwibnVtRXhlY3V0aW9ucyIsInNjcm9sbEJlZ2luSW5kZXgiLCJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIsInBhZ2VTaXplIiwiZGlzcGxheUNvdW50IiwiZGlzcGxheUV4ZWN1dGlvbkRpZ2VzdHMiLCJkaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMiLCJmb2N1c2VkRXhlY3V0aW9uSW5kZXgiLCJmb2N1c2VkRXhlY3V0aW9uRGlzcGxheUluZGV4Iiwib25OYXZpZ2F0ZUxlZnQiLCJvbk5hdmlnYXRlUmlnaHQiLCJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLCJvblNsaWRlckNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwidGltZWxpbmUtY29tcG9uZW50IiwwKSxQKCJvbk5hdmlnYXRlTGVmdCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk5hdmlnYXRlTGVmdCgpfSkoIm9uTmF2aWdhdGVSaWdodCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbk5hdmlnYXRlUmlnaHQoKX0pKCJvbkV4ZWN1dGlvbkRpZ2VzdENsaWNrZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRXhlY3V0aW9uRGlnZXN0Q2xpY2tlZChvKX0pKCJvblNsaWRlckNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TbGlkZXJDaGFuZ2Uobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLEIoNiwiYXN5bmMiKSxCKDcsImFzeW5jIiksQig4LCJhc3luYyIpLEIoOSwiYXN5bmMiKSxCKDEwLCJhc3luYyIpLEIoMTEsImFzeW5jIiksdigpKSwyJmUmJnkoImFjdGl2ZVJ1bklkIixVKDEsMTEsaS5hY3RpdmVSdW5JZCQpKSgibG9hZGluZ051bUV4ZWN1dGlvbnMiLFUoMiwxMyxpLmxvYWRpbmdOdW1FeGVjdXRpb25zJCkpKCJudW1FeGVjdXRpb25zIixVKDMsMTUsaS5udW1FeGVjdXRpb25zJCkpKCJzY3JvbGxCZWdpbkluZGV4IixVKDQsMTcsaS5zY3JvbGxCZWdpbkluZGV4JCkpKCJzY3JvbGxCZWdpbkluZGV4VXBwZXJMaW1pdCIsVSg1LDE5LGkuc2Nyb2xsQmVnaW5JbmRleFVwcGVyTGltaXQkKSkoInBhZ2VTaXplIixVKDYsMjEsaS5wYWdlU2l6ZSQpKSgiZGlzcGxheUNvdW50IixVKDcsMjMsaS5kaXNwbGF5Q291bnQkKSkoImRpc3BsYXlFeGVjdXRpb25EaWdlc3RzIixVKDgsMjUsaS5kaXNwbGF5RXhlY3V0aW9uRGlnZXN0cyQpKSgiZGlzcGxheUZvY3VzZWRBbGVydFR5cGVzIixVKDksMjcsaS5kaXNwbGF5Rm9jdXNlZEFsZXJ0VHlwZXMkKSkoImZvY3VzZWRFeGVjdXRpb25JbmRleCIsVSgxMCwyOSxpLmZvY3VzZWRFeGVjdXRpb25JbmRleCQpKSgiZm9jdXNlZEV4ZWN1dGlvbkRpc3BsYXlJbmRleCIsVSgxMSwzMSxpLmZvY3VzZWRFeGVjdXRpb25EaXNwbGF5SW5kZXgkKSl9LGRlcGVuZGVuY2llczpbbm9lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBQVmUobix0KXsxJm4mJk8oMCwidGYtZGVidWdnZXItdjItaW5hY3RpdmUiKX1mdW5jdGlvbiBSVmUobix0KXsxJm4mJihfKDAsImRpdiIsMyksTygxLCJ0Zi1kZWJ1Z2dlci12Mi1hbGVydHMiKSxfKDIsImRpdiIsNCksTygzLCJ0Zi1kZWJ1Z2dlci12Mi10aW1lbGluZSIpKDQsInRmLWRlYnVnZ2VyLXYyLWdyYXBoIiksdigpLE8oNSwidGYtZGVidWdnZXItdjItZ3JhcGgtZXhlY3V0aW9ucyIpLHYoKSxfKDYsImRpdiIsNSksTyg3LCJ0Zi1kZWJ1Z2dlci12Mi1zb3VyY2UtZmlsZXMiKSg4LCJ0Zi1kZWJ1Z2dlci12Mi1zdGFjay10cmFjZSIpLHYoKSl9dmFyIHJvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5ydW5zPXt9LHRoaXMucnVuSWRzPVtdLHRoaXMuYWN0aXZlUnVuSWQ9bnVsbH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZGVidWdnZXItY29tcG9uZW50Il1dLGlucHV0czp7cnVuczoicnVucyIscnVuSWRzOiJydW5JZHMiLGFjdGl2ZVJ1bklkOiJhY3RpdmVSdW5JZCJ9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImRlYnVnZ2VyLWNvbnRhaW5lciJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbImRhdGFBdmFpbGFibGUiLCIiXSxbMSwidG9wLXNlY3Rpb24iXSxbMSwidG9wLWNlbnRlci1zZWN0aW9uIl0sWzEsImJvdHRvbS1zZWN0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApLEUoMSxQVmUsMSwwLCJ0Zi1kZWJ1Z2dlci12Mi1pbmFjdGl2ZSIsMSksRSgyLFJWZSw5LDAsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpLHYoKSksMiZlKXtsZXQgcj0kZSgzKTtDKDEpLHkoIm5nSWYiLDA9PT1pLnJ1bklkcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W1ByZSxCZSxrcmUsTHJlLFZyZSxYcmUsS3JlLGlvZV0sc3R5bGVzOlsiLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7aGVpZ2h0OjM0JTtwYWRkaW5nLXRvcDo2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmJvdHRvbS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fS5kZWJ1Z2dlci1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnRvcC1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO2hlaWdodDo2NiU7cGFkZGluZzo2cHggMH10Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweDttaW4td2lkdGg6MTYwcHg7d2lkdGg6Y2FsYygxNSUgLSAxMXB4KX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICB0Zi1kZWJ1Z2dlci12Mi1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodDoxcHggc29saWQgIzU1NX10Zi1kZWJ1Z2dlci12Mi1ncmFwaC1leGVjdXRpb25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4LWdyb3c6MTttaW4td2lkdGg6NTQwcHg7d2lkdGg6NTQwcHh9dGYtZGVidWdnZXItdjItc291cmNlLWZpbGVzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDo3MCV9dGYtZGVidWdnZXItdjItc3RhY2stdHJhY2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO2hlaWdodDoxMDAlO21pbi13aWR0aDo1NDBweDt3aWR0aDo1NDBweH0udG9wLWNlbnRlci1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztvdmVyZmxvdzphdXRvO3dpZHRoOjU1JX10Zi1kZWJ1Z2dlci12Mi10aW1lbGluZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja310Zi1kZWJ1Z2dlci12Mi1ncmFwaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6NXB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHRmLWRlYnVnZ2VyLXYyLWdyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgdGYtZGVidWdnZXItdjItZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxvb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUodnQodWcpKSx0aGlzLnJ1bnNJZHMkPXRoaXMuc3RvcmUucGlwZSh2dChKKHVnLGk9Pk9iamVjdC5rZXlzKGkpKSkpLHRoaXMuYWN0aXZlUnVuSWQkPXRoaXMuc3RvcmUucGlwZSh2dChWcykpfW5nT25Jbml0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh0UCgpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goblAoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Zi1kZWJ1Z2dlci12MiJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5zIiwicnVuSWRzIiwiYWN0aXZlUnVuSWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsImRlYnVnZ2VyLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIikpLDImZSYmeSgicnVucyIsVSgxLDMsaS5ydW5zJCkpKCJydW5JZHMiLFUoMiw1LGkucnVuc0lkcyQpKSgiYWN0aXZlUnVuSWQiLFUoMyw3LGkuYWN0aXZlUnVuSWQkKSl9LGRlcGVuZGVuY2llczpbcm9lLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXX0pLG59KSgpLGtQPSJkZWJ1Z2dlci12MiI7ZnVuY3Rpb24geVUobix0LGUsaSxyKXtpZihlPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcGFnZVNpemU6ICR7ZX1gKTtpZih0PmkpdGhyb3cgbmV3IEVycm9yKGBlbmQgaW5kZXggKCR7dH0pIGV4Y2VlZHMgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICgke2l9KWApO2lmKHQtbj5lKXRocm93IG5ldyBFcnJvcigiYmVnaW4tZW5kIHNwYW4gZXhjZWVkcyBwYWdlIHNpemUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIik7bGV0IG89W10scz1NYXRoLmZsb29yKG4vZSk7KCEocyBpbiByKXx8cltzXTxlJiZzKmUrcltzXTxpKSYmby5wdXNoKHMpO2xldCBhPU1hdGguZmxvb3IoKHQtMSkvZSk7cmV0dXJuIGEhPT1zJiYoIShhIGluIHIpfHxhKmUrclthXTx0JiZ0PGkpJiZvLnB1c2goYSksb312YXIgbG9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuYWN0aW9ucyQ9ZSx0aGlzLnN0b3JlPWksdGhpcy5kYXRhU291cmNlPXIsdGhpcy5sb2FkRGF0YSQ9Y3IoKCk9PntsZXQgbz10aGlzLmxvYWREZWJ1Z2dlclJ1bnMoSnQodGhpcy5vbkRlYnVnZ2VyRGF0YVBvbGwoKSx0aGlzLm9uQ29yZVJlbG9hZCgpKSkucGlwZShUcygpKSxzPXRoaXMubG9hZFNvdXJjZUZpbGVMaXN0KG8pLGE9dGhpcy5jcmVhdGVOdW1FeGVjdXRpb25Mb2FkZXIobyksbD10aGlzLmNyZWF0ZU51bUFsZXJ0c0FuZEJyZWFrZG93bkxvYWRlcihvKSxjPXRoaXMub25BbGVydFR5cGVGb2N1c2VkKCksdT10aGlzLmZldGNoRXhlY3V0aW9uRGlnZXN0c0ZvckFsZXJ0VHlwZUZvY3VzKGMpLGQ9dGhpcy5jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IoYSkucGlwZShUcygpKSxwPXRoaXMuY3JlYXRlRXhlY3V0aW9uRGlnZXN0TG9hZGVyKEp0KHRoaXMub25FeGVjdXRpb25TY3JvbGwoKSx0aGlzLmNyZWF0ZUluaXRpYWxFeGVjdXRpb25EaWdlc3QoZCksdSkpLGg9dGhpcy5jcmVhdGVFeGVjdXRpb25EYXRhQW5kU3RhY2tGcmFtZXNMb2FkZXIoSnQodGhpcy5vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKSxkLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoVnMpLHRoaXMuc3RvcmUuc2VsZWN0KGRVKSksTCgoWyxiLERdKT0+KHthY3RpdmVSdW5JZDpiLGxvYWRlZEV4ZWN1dGlvbkRhdGE6RCxmb2N1c0luZGV4OjB9KSkpKSk7cmV0dXJuIEp0KGwscCxoLHRoaXMuY3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIobykscyx0aGlzLm9uU291cmNlRmlsZUZvY3VzZWQoKSx0aGlzLmxvYWRHcmFwaEV4ZWN1dGlvblBhZ2VzKHRoaXMub25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpKSx0aGlzLmxvYWRHcmFwaE9wU3RhY2tGcmFtZXModGhpcy5sb2FkR3JhcGhPcEluZm8oKSkpLnBpcGUoTCgoKT0+KHt9KSkpfSx7ZGlzcGF0Y2g6ITF9KX1vbkRlYnVnZ2VyRGF0YVBvbGwoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKHRQKSx1aShlPT5mdW5jdGlvbihuLHQsZSl7cmV0dXJuIG4ucGlwZShmdW5jdGlvbihuKXtyZXR1cm4gZW4oKHQsZSk9PntsZXQgaSxvLHI9ITEscz0hMSxhPSExLGw9KCk9PmEmJnMmJihlLmNvbXBsZXRlKCksITApLHU9KCk9PnthPSExLGk9dC5zdWJzY3JpYmUoanQoZSx2b2lkIDAsKCk9PnthPSEwLCFsKCkmJihvfHwobz1uZXcga2UsbihvKS5zdWJzY3JpYmUoanQoZSwoKT0+e2k/dSgpOnI9ITB9LCgpPT57cz0hMCxsKCl9KSkpLG8pLm5leHQoKX0pKSxyJiYoaS51bnN1YnNjcmliZSgpLGk9bnVsbCxyPSExLHUoKSl9O3UoKX0pfShpPT5pLnBpcGUoV3QodCksdjAoKFsscl0pPT5LYShyKSkpKSxzdChlKSxMKCgpPT57fSkpfShYdChlKSx0aGlzLnN0b3JlLnNlbGVjdChjcmUpLnBpcGUoTChpPT5mdW5jdGlvbihuKXtyZXR1cm4gbj42ZTQ/NmU0Om4+NGUzP246MmUzfShpKSkpLHRoaXMuYWN0aW9ucyQucGlwZShpaShuUCkpKSksa3QoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goTXcoKSkpLEwoKCk9Pnt9KSl9b25Db3JlUmVsb2FkKCl7cmV0dXJuIEp0KHRoaXMuYWN0aW9ucyQucGlwZShpaShGYSxhYSkpLHRoaXMuYWN0aW9ucyQucGlwZShpaShadSkpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoaVUpKSxZZSgoWyxlXSk9PmUuc3RhdGU9PT1PZS5OT1RfTE9BREVEfHxlLnN0YXRlPT09T2UuRkFJTEVEJiZudWxsPT09ZS5sYXN0TG9hZGVkVGltZUluTXMpKSkucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChScykpLFllKChbLGVdKT0+ZT09PWtQKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChNdygpKSksTCgoKT0+e30pKX1sb2FkRGVidWdnZXJSdW5zKGUpe3JldHVybiBlLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoaVUpKSxZZSgoWyx7c3RhdGU6aX1dKT0+aSE9PU9lLkxPQURJTkcpLGt0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKGlQKCkpKSx4bigoKT0+dGhpcy5kYXRhU291cmNlLmZldGNoUnVucygpLnBpcGUoa3QoaT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goclAoe3J1bnM6aX0pKX0pLEwoKCk9Pnt9KSkpKX1jcmVhdGVOdW1FeGVjdXRpb25Mb2FkZXIoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdCh1ZyksdGhpcy5zdG9yZS5zZWxlY3Qod1ApKSxZZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1PZS5MT0FESU5HKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaChhUCgpKSkseG4oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEV4ZWN1dGlvbkRpZ2VzdHMociwwLDApLnBpcGUoa3QoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobFAoe251bUV4ZWN1dGlvbnM6YS5udW1fZGlnZXN0c30pKX0pLEwoKCk9Pnt9KSl9KSl9Y3JlYXRlTnVtR3JhcGhFeGVjdXRpb25Mb2FkZXIoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdCh1ZyksdGhpcy5zdG9yZS5zZWxlY3QobXJlKSksWWUoKFssaSxyXSk9Pk9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiZyLnN0YXRlIT09T2UuTE9BRElORyksa3QoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2gocFAoKSkpLHhuKChbLGldKT0+e2xldCByPU9iamVjdC5rZXlzKGkpWzBdO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaEV4ZWN1dGlvbkRpZ2VzdHMociwwLDApLnBpcGUoa3QoYT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goaFAoe251bUdyYXBoRXhlY3V0aW9uczphLm51bV9kaWdlc3RzfSkpfSksTCgoKT0+e30pKX0pKX1jcmVhdGVOdW1BbGVydHNBbmRCcmVha2Rvd25Mb2FkZXIoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdCh1ZyksdGhpcy5zdG9yZS5zZWxlY3QoclUpKSxZZSgoWyxpLHJdKT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoPjAmJnIuc3RhdGUhPT1PZS5MT0FESU5HKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaCh3dygpKSkseG4oKFssaV0pPT57bGV0IHI9T2JqZWN0LmtleXMoaSlbMF07cmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5mZXRjaEFsZXJ0cyhyLDAsMCkucGlwZShrdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChvUCh7bnVtQWxlcnRzOmEubnVtX2FsZXJ0cyxhbGVydHNCcmVha2Rvd246YS5hbGVydHNfYnJlYWtkb3dufSkpfSksTCgoKT0+e30pKX0pKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGV0ZWN0b3IoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChqaCksdGhpcy5zdG9yZS5zZWxlY3QoRHcpKSxZZSgoWyxpLHJdKT0+aT4wJiYwPT09T2JqZWN0LmtleXMoci5wYWdlTG9hZGVkU2l6ZXMpLmxlbmd0aCksTCgoKT0+e30pKX1jcmVhdGVJbml0aWFsRXhlY3V0aW9uRGlnZXN0KGUpe3JldHVybiBlLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoamgpLHRoaXMuc3RvcmUuc2VsZWN0KFZzKSx0aGlzLnN0b3JlLnNlbGVjdCh0eSkpLFllKChbLCxpXSk9Pm51bGwhPT1pKSxMKChbLGkscixvXSk9Pih7YmVnaW46MCxlbmQ6TWF0aC5taW4oaSxvKSxydW5JZDpyfSkpKX1vbkV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoaWkoV3YscXYsWXYpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFZzKSx0aGlzLnN0b3JlLnNlbGVjdChBdyksdGhpcy5zdG9yZS5zZWxlY3QoamgpLHRoaXMuc3RvcmUuc2VsZWN0KG55KSx0aGlzLnN0b3JlLnNlbGVjdCh0eSkpLFllKChbZV0pPT5udWxsIT09ZSksTCgoWyxlLGkscixvLHNdKT0+KHtydW5JZDplLGJlZ2luOmksZW5kOk1hdGgubWluKHIsaStvKSxwYWdlU2l6ZTpzfSkpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KER3KSksTCgoW2UsaV0pPT4oe3Byb3BzOmUsbG9hZGVkOmksbWlzc2luZ1BhZ2VzOnlVKGUuYmVnaW4sZS5lbmQsZS5wYWdlU2l6ZSxpLm51bUV4ZWN1dGlvbnMsaS5wYWdlTG9hZGVkU2l6ZXMpfSkpLFllKCh7bWlzc2luZ1BhZ2VzOmV9KT0+ZS5sZW5ndGg+MCksTCgoe3Byb3BzOmUsbG9hZGVkOmksbWlzc2luZ1BhZ2VzOnJ9KT0+e2xldHtydW5JZDpvLHBhZ2VTaXplOnN9PWU7cmV0dXJue2JlZ2luOnJbMF0qcyxlbmQ6TWF0aC5taW4oaS5udW1FeGVjdXRpb25zLChyW3IubGVuZ3RoLTFdKzEpKnMpLHJ1bklkOm99fSkpfWNyZWF0ZUV4ZWN1dGlvbkRpZ2VzdExvYWRlcihlKXtyZXR1cm4gZS5waXBlKFd0KHRoaXMuc3RvcmUuc2VsZWN0KER3KSksWWUoKFt7YmVnaW46aSxlbmQ6cn0sb10pPT5yPmkmJiFmdW5jdGlvbihuLHQsZSl7aWYodD49ZSl0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGJlZ2luIHRvIGJlIGxlc3MgdGhhbiBlbmQsIGJ1dCBnb3QgYmVnaW49JHt0fSwgZW5kPSR7ZX1gKTtyZXR1cm4tMSE9PW4uZmluZEluZGV4KGk9PmkuYmVnaW4+PXQmJmkuZW5kPD1lKX0oby5sb2FkaW5nUmFuZ2VzLGkscikpLGt0KChbe2JlZ2luOmksZW5kOnJ9XSk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKGNQKHtiZWdpbjppLGVuZDpyfSkpfSkseG4oKFt7cnVuSWQ6aSxiZWdpbjpyLGVuZDpvfV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hFeGVjdXRpb25EaWdlc3RzKGkscixvKS5waXBlKGt0KHM9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKHVQKHMpKX0pLEwoKCk9Pnt9KSkpKX1vbkV4ZWN1dGlvbkRpZ2VzdEZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKFh2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoZFUpLHRoaXMuc3RvcmUuc2VsZWN0KEF3KSksTCgoW2UsaSxyLG9dKT0+KHthY3RpdmVSdW5JZDppLGxvYWRlZEV4ZWN1dGlvbkRhdGE6cixmb2N1c0luZGV4Om8rZS5kaXNwbGF5SW5kZXh9KSkpfWNyZWF0ZUV4ZWN1dGlvbkRhdGFBbmRTdGFja0ZyYW1lc0xvYWRlcihlKXtyZXR1cm4gZS5waXBlKFllKCh7YWN0aXZlUnVuSWQ6aSxsb2FkZWRFeGVjdXRpb25EYXRhOnIsZm9jdXNJbmRleDpvfSk9Pm51bGwhPT1pJiZudWxsIT09byYmdm9pZCAwPT09cltvXSkseG4oKHthY3RpdmVSdW5JZDppLGZvY3VzSW5kZXg6cn0pPT57bGV0IG89cixzPW8rMTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoRXhlY3V0aW9uRGF0YShpLG8scykucGlwZShrdChhPT57dGhpcy5zdG9yZS5kaXNwYXRjaChkUChhKSl9KSxMKGE9Pih7ZXhlY3V0aW9uRGF0YTphLGJlZ2luOm8sZW5kOnN9KSkpfSksTCgoe2V4ZWN1dGlvbkRhdGE6aX0pPT5pLmV4ZWN1dGlvbnNbMF0pLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFZzKSx0aGlzLnN0b3JlLnNlbGVjdChwVSkpLFllKChbaSxyLG9dKT0+e2lmKG51bGw9PT1yKXJldHVybiExO2ZvcihsZXQgcyBvZiBpLnN0YWNrX2ZyYW1lX2lkcylpZih2b2lkIDA9PT1vW3NdKXJldHVybiEwO3JldHVybiExfSkseG4oKFtpLHJdKT0+e2xldCBvPWkuc3RhY2tfZnJhbWVfaWRzO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyhyLG8pLnBpcGUoa3Qocz0+e2xldCBhPXt9O2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7KytsKWFbb1tsXV09cy5zdGFja19mcmFtZXNbbF07dGhpcy5zdG9yZS5kaXNwYXRjaChTdyh7c3RhY2tGcmFtZXM6YX0pKX0pLEwoKCk9Pnt9KSl9KSl9b25HcmFwaEV4ZWN1dGlvblNjcm9sbCgpe3JldHVybiB0aGlzLmFjdGlvbnMkLnBpcGUoaWkoUXYpLEhyKDEwMCksV3QodGhpcy5zdG9yZS5zZWxlY3QoVnMpLHRoaXMuc3RvcmUuc2VsZWN0KEl3KSx0aGlzLnN0b3JlLnNlbGVjdChncmUpKSxZZSgoWyxlLGldKT0+bnVsbCE9PWUmJmk+MCksTCgoWyxlLGkscl0pPT4oe3J1bklkOmUsbnVtR3JhcGhFeGVjdXRpb25zOmksc2Nyb2xsQmVnaW5JbmRleDpyfSkpLFd0KHRoaXMuc3RvcmUuc2VsZWN0KHZyZSksdGhpcy5zdG9yZS5zZWxlY3QoX3JlKSx0aGlzLnN0b3JlLnNlbGVjdCh5cmUpLHRoaXMuc3RvcmUuc2VsZWN0KGJyZSkpLEwoKFt7cnVuSWQ6ZSxudW1HcmFwaEV4ZWN1dGlvbnM6aSxzY3JvbGxCZWdpbkluZGV4OnJ9LG8scyxhLGxdKT0+e2xldCBjPXlVKHIsTWF0aC5taW4ocitzLGkpLG8saSxsKTtyZXR1cm4gYz1jLmZpbHRlcih1PT4tMT09PWEuaW5kZXhPZih1KSkse3J1bklkOmUsbWlzc2luZ1BhZ2VzOmMscGFnZVNpemU6byxudW1HcmFwaEV4ZWN1dGlvbnM6aX19KSl9bG9hZEdyYXBoRXhlY3V0aW9uUGFnZXMoZSl7cmV0dXJuIGUucGlwZShZZSgoe21pc3NpbmdQYWdlczppfSk9PmkubGVuZ3RoPjApLGt0KCh7bWlzc2luZ1BhZ2VzOml9KT0+e2kuZm9yRWFjaChyPT57dGhpcy5zdG9yZS5kaXNwYXRjaChmUCh7cGFnZUluZGV4OnJ9KSl9KX0pLHhuKCh7cnVuSWQ6aSxtaXNzaW5nUGFnZXM6cixwYWdlU2l6ZTpvLG51bUdyYXBoRXhlY3V0aW9uczpzfSk9PntsZXQgYT1yWzBdKm8sbD1NYXRoLm1pbigocltyLmxlbmd0aC0xXSsxKSpvLHMpO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaEV4ZWN1dGlvbkRhdGEoaSxhLGwpLnBpcGUoa3QoYz0+e3RoaXMuc3RvcmUuZGlzcGF0Y2gobVAoYykpfSksTCgoKT0+e30pKX0pKX1sb2FkR3JhcGhPcEluZm8oKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKFp2LEt2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoU3JlKSksWWUoKFtlLGkscl0pPT57bGV0e2dyYXBoX2lkOm8sb3BfbmFtZTpzfT1lO3JldHVybiEobnVsbD09PWl8fHZvaWQgMCE9PXJbb10mJnJbb10uaGFzKHMpJiYocltvXS5nZXQocyk9PT1PZS5MT0FESU5HfHxyW29dLmdldChzKT09PU9lLkxPQURFRCkpfSksa3QoKFt7Z3JhcGhfaWQ6ZSxvcF9uYW1lOml9XSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goZ1Aoe2dyYXBoX2lkOmUsb3BfbmFtZTppfSkpKSx4bigoW2UsaV0pPT57bGV0e2dyYXBoX2lkOnIsb3BfbmFtZTpvfT1lO3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hHcmFwaE9wSW5mbyhpLHIsbykucGlwZShrdChzPT50aGlzLnN0b3JlLmRpc3BhdGNoKF9QKHtncmFwaE9wSW5mb1Jlc3BvbnNlOnN9KSkpLEwocz0+KHtydW5JZDppLHN0YWNrRnJhbWVJZHM6cy5zdGFja19mcmFtZV9pZHN9KSkpfSkpfWxvYWRHcmFwaE9wU3RhY2tGcmFtZXMoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChwVSkpLEwoKFt7cnVuSWQ6aSxzdGFja0ZyYW1lSWRzOnJ9LG9dKT0+KHtydW5JZDppLG1pc3NpbmdTdGFja0ZyYW1lSWRzOnIuZmlsdGVyKGE9PnZvaWQgMD09PW9bYV0pfSkpLFllKCh7cnVuSWQ6aSxtaXNzaW5nU3RhY2tGcmFtZUlkczpyfSk9Pm51bGwhPT1pJiZyLmxlbmd0aD4wKSx4bigoe3J1bklkOmksbWlzc2luZ1N0YWNrRnJhbWVJZHM6cn0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTdGFja0ZyYW1lcyhpLHIpLnBpcGUoa3Qobz0+e2xldCBzPXt9O2ZvcihsZXQgYT0wO2E8ci5sZW5ndGg7KythKXNbclthXV09by5zdGFja19mcmFtZXNbYV07dGhpcy5zdG9yZS5kaXNwYXRjaChTdyh7c3RhY2tGcmFtZXM6c30pKX0pLEwoKCk9Pnt9KSkpKX1vbkFsZXJ0VHlwZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKEd2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoTVApLHRoaXMuc3RvcmUuc2VsZWN0KGRyZSksdGhpcy5zdG9yZS5zZWxlY3QocHJlKSx0aGlzLnN0b3JlLnNlbGVjdChyVSkpLFllKChbLGUsaSxyLG8sc10pPT5udWxsIT09ZSYmbnVsbCE9PWkmJnI+MCYmKG51bGw9PT1vfHxPYmplY3Qua2V5cyhvKS5sZW5ndGg8cikmJnMuc3RhdGUhPT1PZS5MT0FESU5HKSxrdCgoKT0+dGhpcy5zdG9yZS5kaXNwYXRjaCh3dygpKSkseG4oKFssZSxpXSk9PnRoaXMuZGF0YVNvdXJjZS5mZXRjaEFsZXJ0cyhlLDAsLTEsaSkpLGt0KCh7bnVtX2FsZXJ0czplLGFsZXJ0c19icmVha2Rvd246aSxhbGVydF90eXBlOnIsYmVnaW46byxlbmQ6cyxhbGVydHM6YX0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChzUCh7bnVtQWxlcnRzOmUsYWxlcnRzQnJlYWtkb3duOmksYWxlcnRUeXBlOnIsYmVnaW46byxlbmQ6cyxhbGVydHM6YX0pKX0pKX1mZXRjaEV4ZWN1dGlvbkRpZ2VzdHNGb3JBbGVydFR5cGVGb2N1cyhlKXtyZXR1cm4gZS5waXBlKFd0KHRoaXMuc3RvcmUuc2VsZWN0KHR5KSx0aGlzLnN0b3JlLnNlbGVjdChueSksdGhpcy5zdG9yZS5zZWxlY3QoamgpLHRoaXMuc3RvcmUuc2VsZWN0KER3KSx0aGlzLnN0b3JlLnNlbGVjdChWcykpLEwoKFtpLHIsbyxzLGEsbF0pPT57bGV0IHU9aS5hbGVydHNbMF0uZXhlY3V0aW9uX2luZGV4LGQ9eVUoTWF0aC5tYXgoMCx1LU1hdGguZmxvb3Ioby8yKSksTWF0aC5taW4odStNYXRoLmZsb29yKG8vMikscykscixzLGEucGFnZUxvYWRlZFNpemVzKTtyZXR1cm4gMD09PWQubGVuZ3RoP3tydW5JZDpsLGJlZ2luOjAsZW5kOjB9OntydW5JZDpsLGJlZ2luOmRbMF0qcixlbmQ6TWF0aC5taW4oYS5udW1FeGVjdXRpb25zLChkW2QubGVuZ3RoLTFdKzEpKnIpfX0pKX1sb2FkU291cmNlRmlsZUxpc3QoZSl7cmV0dXJuIGUucGlwZShXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoVHJlKSksWWUoKFssaSxyXSk9Pm51bGwhPT1pJiZyLnN0YXRlIT09T2UuTE9BRElORyksa3QoKCk9PnRoaXMuc3RvcmUuZGlzcGF0Y2godlAoKSkpLHhuKChbLGldKT0+dGhpcy5kYXRhU291cmNlLmZldGNoU291cmNlRmlsZUxpc3QoaSkucGlwZShrdChyPT57bGV0IG89W107ci5mb3JFYWNoKChbcyxhXSk9PntvLnB1c2goe2hvc3RfbmFtZTpzLGZpbGVfcGF0aDphfSl9KSx0aGlzLnN0b3JlLmRpc3BhdGNoKHlQKHtzb3VyY2VGaWxlczpvfSkpfSksTCgoKT0+e30pKSkpfW9uU291cmNlRmlsZUZvY3VzZWQoKXtyZXR1cm4gdGhpcy5hY3Rpb25zJC5waXBlKGlpKEp2KSxXdCh0aGlzLnN0b3JlLnNlbGVjdChWcyksdGhpcy5zdG9yZS5zZWxlY3QoaFUpLHRoaXMuc3RvcmUuc2VsZWN0KFRQKSksTCgoW2UsaSxyLG9dKT0+KHtydW5JZDppLHN0YWNrRnJhbWU6ZS5zdGFja0ZyYW1lLGZpbGVJbmRleDpyLGZpbGVDb250ZW50Om99KSksWWUoKHtydW5JZDplLGZpbGVDb250ZW50Oml9KT0+bnVsbCE9PWUmJm51bGwhPT1pJiZpLmxvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUQpLGt0KCh7c3RhY2tGcmFtZTplfSk9PnRoaXMuc3RvcmUuZGlzcGF0Y2goYlAoe2hvc3RfbmFtZTplLmhvc3RfbmFtZSxmaWxlX3BhdGg6ZS5maWxlX3BhdGh9KSkpLHhuKCh7ZmlsZUluZGV4OmUscnVuSWQ6aX0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hTb3VyY2VGaWxlKGksZSkucGlwZShrdChyPT57dGhpcy5zdG9yZS5kaXNwYXRjaCh4UChyKSl9KSxMKCgpPT57fSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooZVApKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxjb2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLHVvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWVdfSksbn0pKCksRlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLGRvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsRlAsWmNdfSksbn0pKCkscG9lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHt9KSxufSkoKSxxaD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksTlA9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLHFoXX0pLG59KSgpLGhvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsTlBdfSksbn0pKCksZm9lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxOUF19KSxufSkoKSxtb2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLEZQXX0pLG59KSgpLGdvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbW9lLFBuLFdoXX0pLG59KSgpLF9vZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbY29lLE1lLGVjLGRvZSx1b2UscG9lLGhvZSxmb2UsaXJlLGdvZSx3ci5mb3JGZWF0dXJlKEV3LGxyZSkscm8uZm9yRmVhdHVyZShbbG9lXSksQnMuZm9yUGx1Z2luKGtQLG9vZSldfSksbn0pKCksTFA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgQ2xvc2VkIiksQlA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmdzIFBhbmUgVG9nZ2xlZCIpLFZQPWJlKCJbTWV0cmljc10gU2xpZGUgb3V0IHNldHRpbmdzIG1lbnUgdG9nZ2xlZCIpLEhQPWJlKCJbTWV0cmljc10gTWV0cmljcyBUYWcgTWV0YWRhdGEgUmVxdWVzdGVkIiksVVA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFRhZyBNZXRhZGF0YSBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx6UD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIE1ldGFkYXRhIEZhaWxlZCIpLGpQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5ncyBDaGFuZ2UgVG9vbHRpcCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEdQPShiZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZ3MgVG9nZ2xlIFNob3cgRGF0YSBEb3dubG9hZCIpLGJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFRvZ2dsZSBJZ25vcmUgT3V0bGllciIpKSxXUD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgWCBBeGlzIFR5cGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxxUD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgQ2FyZCBXaWR0aCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFlQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFJlc2V0IENhcmQgV2lkdGgiKSxYUD1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBDaGFuZ2UgU2NhbGFyIFNtb290aGluZyIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFFQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIFBhcnRpdGlvbiBOb24gTW9ub3RvbmljIFggVG9nZ2xlZCIpLEtQPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBJbWFnZSBCcmlnaHRuZXNzIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWlA9YmUoIltNZXRyaWNzXSBNZXRyaWNzIFNldHRpbmcgQ2hhbmdlIEltYWdlIENvbnRyYXN0Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSlA9YmUoIltNZXRyaWNzXSBJbWFnZSBCcmlnaHRuZXNzIFNldHRpbmcgUmVzZXQiKSwkUD1iZSgiW01ldHJpY3NdIEltYWdlIENvbnRyYXN0IFNldHRpbmcgUmVzZXQiKSxlUj1iZSgiW01ldHJpY3NdIE1ldHJpY3MgU2V0dGluZyBUb2dnbGUgSW1hZ2UgU2hvdyBBY3R1YWwgU2l6ZSIpLHRSPWJlKCJbTWV0cmljc10gTWV0cmljcyBTZXR0aW5nIENoYW5nZSBIaXN0b2dyYW0gTW9kZSIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG5SPWJlKCJbTWV0cmljc10gTXVsdGlwbGUgVGltZSBTZXJpZXMgUmVxdWVzdGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaVI9YmUoIltNZXRyaWNzXSBGZXRjaCBUaW1lIFNlcmllcyBSZXF1ZXN0IEZhaWxlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLHJSPWJlKCJbTWV0cmljc10gRmV0Y2ggVGltZSBTZXJpZXMgUmVzcG9uc2UgTG9hZGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksaXk9YmUoIltNZXRyaWNzXSBDYXJkIFZpc2liaWxpdHkgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLG9SPWJlKCJbTWV0cmljc10gQ2FyZCBTdGVwIFNsaWRlciBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksc1I9YmUoIltNZXRyaWNzXSBUYWcgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxhUj1iZSgiW01ldHJpY3NdIE1ldHJpY3MgVGFnIEdyb3VwIEV4cGFuc2lvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSkscnk9YmUoIltNZXRyaWNzXSBDYXJkIFBpbiBTdGF0ZSBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksbFI9YmUoIltNZXRyaWNzXSBUb2dnbGUgVmlzaWJsZSBQbHVnaW4iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxjUj1iZSgiW01ldHJpY3NdIFRvZ2dsZSBTaG93IEFsbCBQbHVnaW5zIiksWWg9YmUoIltNZXRyaWNzXSBUaW1lIFNlbGVjdGlvbiBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksdm9lPWJlKCJbTWV0cmljc10gTGlua2VkIFRpbWUgU2VsZWN0aW9uIENsZWFyZWQiKSx1Uj1iZSgiW01ldHJpY3NdIExpbmtlZCBUaW1lIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5b2U9YmUoIltNZXRyaWNzXSBTb3J0aW5nIERhdGEgVGFibGUgQnkgSGVhZGVyIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksZFI9YmUoIltNZXRyaWNzXSBEYXRhIHRhYmxlIGNvbHVtbiBkcmFnZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksYm9lPWJlKCJbTWV0cmljc10gRGF0YSB0YWJsZSBjb2x1bW5zIGVkaXRlZCBpbiBlZGl0IG1lbnUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxwUj1iZSgiW01ldHJpY3NdIERhdGEgdGFibGUgY29sdW1uIHRvZ2dsZWQgaW4gZWRpdCBtZW51Iix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksWGg9YmUoIltNZXRyaWNzXSBUaW1lIFNlbGVjdG9yIEVuYWJsZSBUb2dnbGUiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxoUj1iZSgiW01ldHJpY3NdIFJhbmdlIFNlbGVjdGlvbiBUb2dnbGVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSk7ZnVuY3Rpb24ga3cobix0KXtsZXQgZT17fTtmb3IobGV0IGkgb2YgT2JqZWN0LmtleXMobikpZVtpXT10KG5baV0saSk7cmV0dXJuIGV9dmFyIGNzPSgoKT0+KGZ1bmN0aW9uKG4pe24uTk9ORT0ibm8gYWZmb3JkYW5jZSIsbi5FWFRFTkRFRF9MSU5FPSJleHRlbmRlZExpbmUiLG4uRk9CPSJmb2IiLG4uRk9CX1JFTU9WRUQ9ImZvYlJlbW92ZWQiLG4uRk9CX1RFWFQ9ImZvYlRleHQiLG4uU0VUVElOR1NfVEVYVD0ic2V0dGluZ3NUZXh0IixuLlNFVFRJTkdTX1NMSURFUj0ic2V0dGluZ3NTbGlkZXIiLG4uQ0hBTkdFX1RPX1NJTkdMRT0iY2hhbmdlVG9TaW5nbGUiLG4uSElTVE9HUkFNX0NMSUNLX1RPX1JBTkdFPSJoaXN0b2dyYW1DbGlja1RvUmFuZ2UiLG4uRk9CX0FEREVEPSJmb2JBZGRlZCJ9KGNzfHwoY3M9e30pKSxjcykpKCksYmw9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJubyB0b2dnbGUgYWZmb3JkYW5jZSIsbi5GT0JfREVTRUxFQ1Q9ImZvYkRlc2VsZWN0IixuLkNIRUNLX0JPWD0iY2hlY2tCb3gifShibHx8KGJsPXt9KSksYmwpKSgpLHBhPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5IT1JJWk9OVEFMPTBdPSJIT1JJWk9OVEFMIixuW24uVkVSVElDQUw9MV09IlZFUlRJQ0FMIn0ocGF8fChwYT17fSkpLHBhKSkoKTtmdW5jdGlvbiBmUihuKXtsZXQgdD1uZXcgTWFwLGU9bi5zbGljZSgpLnNvcnQoKGkscik9PkZ3KGkudGFnLHIudGFnKSk7Zm9yKGxldCBpIG9mIGUpe2xldCByPUJWZShpLnRhZyk7dC5oYXMocil8fHQuc2V0KHIse2dyb3VwTmFtZTpyLGl0ZW1zOltdfSksdC5nZXQocikuaXRlbXMucHVzaChpKX1yZXR1cm5bLi4udC52YWx1ZXMoKV19ZnVuY3Rpb24gQlZlKG4pe3JldHVybiBuLnNwbGl0KCIvIiwxKVswXX1mdW5jdGlvbiBGdyhuLHQpe2xldCBlPTAsaT0wO2Zvcig7Oyl7aWYoZT09PW4ubGVuZ3RoKXJldHVybiBpPT09dC5sZW5ndGg/MDotMTtpZihpPT09dC5sZW5ndGgpcmV0dXJuIDE7aWYoZmcobltlXSkmJmZnKHRbaV0pKXtsZXQgcj1lLG89aTtlPXhvZShuLGUrMSksaT14b2UodCxpKzEpO2xldCBzPU51bWJlcihuLnNsaWNlKHIsZSkpLGE9TnVtYmVyKHQuc2xpY2UobyxpKSk7aWYoczxhKXJldHVybi0xO2lmKHM+YSlyZXR1cm4gMX1lbHNle2lmKGJVKG5bZV0pKXtpZighYlUodFtpXSkpcmV0dXJuLTF9ZWxzZXtpZihiVSh0W2ldKSlyZXR1cm4gMTtpZihuW2VdPHRbaV0pcmV0dXJuLTE7aWYobltlXT50W2ldKXJldHVybiAxfWUrKyxpKyt9fX1mdW5jdGlvbiB4b2Uobix0KXtsZXQgZTt2YXIgbzsobz1lfHwoZT17fSkpW28uTkFUVVJBTD0wXT0iTkFUVVJBTCIsb1tvLlJFQUw9MV09IlJFQUwiLG9bby5FWFBPTkVOVF9TSUdOPTJdPSJFWFBPTkVOVF9TSUdOIixvW28uRVhQT05FTlQ9M109IkVYUE9ORU5UIjtsZXQgaT1lLk5BVFVSQUwscj10O2Zvcig7cjxuLmxlbmd0aDtyKyspaWYoaT09PWUuTkFUVVJBTCl7aWYoIi4iPT09bltyXSlpPWUuUkVBTDtlbHNlIGlmKCJlIj09PW5bcl18fCJFIj09PW5bcl0paT1lLkVYUE9ORU5UX1NJR047ZWxzZSBpZighZmcobltyXSkpYnJlYWt9ZWxzZSBpZihpPT09ZS5SRUFMKXtpZigiZSI9PT1uW3JdfHwiRSI9PT1uW3JdKWk9ZS5FWFBPTkVOVF9TSUdOO2Vsc2UgaWYoIWZnKG5bcl0pKWJyZWFrfWVsc2UgaWYoaT09PWUuRVhQT05FTlRfU0lHTil7aWYoIWZnKG5bcl0pJiYiKyIhPT1uW3JdJiYiLSIhPT1uW3JdKWJyZWFrO2k9ZS5FWFBPTkVOVH1lbHNlIGlmKGk9PT1lLkVYUE9ORU5UJiYhZmcobltyXSkpYnJlYWs7cmV0dXJuIHJ9ZnVuY3Rpb24gZmcobil7cmV0dXJuIjAiPD1uJiZuPD0iOSJ9ZnVuY3Rpb24gYlUobil7cmV0dXJuIi8iPT09bnx8Zmcobil9dmFyIHN5PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5PUklHSU5BTD0wXT0iT1JJR0lOQUwiLG5bbi5ERVJJVkVEPTFdPSJERVJJVkVEIn0oc3l8fChzeT17fSkpLHN5KSkoKSxLdD0oKCk9PihmdW5jdGlvbihuKXtuLkNPTE9SPSJDT0xPUiIsbi5SRUxBVElWRV9USU1FPSJSRUxBVElWRV9USU1FIixuLlJVTj0iUlVOIixuLlNURVA9IlNURVAiLG4uVElNRT0iVElNRSIsbi5WQUxVRT0iVkFMVUUiLG4uU01PT1RIRUQ9IlNNT09USEVEIixuLlZBTFVFX0NIQU5HRT0iVkFMVUVfQ0hBTkdFIixuLlNUQVJUX1NURVA9IlNUQVJUX1NURVAiLG4uRU5EX1NURVA9IkVORF9TVEVQIixuLlNUQVJUX1ZBTFVFPSJTVEFSVF9WQUxVRSIsbi5FTkRfVkFMVUU9IkVORF9WQUxVRSIsbi5NSU5fVkFMVUU9Ik1JTl9WQUxVRSIsbi5NQVhfVkFMVUU9Ik1BWF9WQUxVRSIsbi5QRVJDRU5UQUdFX0NIQU5HRT0iUEVSQ0VOVEFHRV9DSEFOR0UifShLdHx8KEt0PXt9KSksS3QpKSgpLGdkPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TSU5HTEU9MF09IlNJTkdMRSIsbltuLlJBTkdFPTFdPSJSQU5HRSJ9KGdkfHwoZ2Q9e30pKSxnZCkpKCkseGw9KCgpPT4oZnVuY3Rpb24obil7bltuLkFTQ0VORElORz0wXT0iQVNDRU5ESU5HIixuW24uREVTQ0VORElORz0xXT0iREVTQ0VORElORyJ9KHhsfHwoeGw9e30pKSx4bCkpKCk7ZnVuY3Rpb24geFUobix0LGUpe2xldHtwbHVnaW46aSx0YWc6cixydW5JZDpvLHNhbXBsZTpzfT10W25dLGE9cnAoZSxpLHIscyk7aWYoYSl7aWYobnVsbCE9PW8mJmEucnVuVG9TZXJpZXMuaGFzT3duUHJvcGVydHkobykpe2xldCBjPWEucnVuVG9TZXJpZXNbb10ubGVuZ3RoO3JldHVybiBjPjA/Yy0xOm51bGx9bGV0IGw9T2JqZWN0LnZhbHVlcyhhLnJ1blRvU2VyaWVzKS5tYXAoYz0+Yy5sZW5ndGgpO2lmKGwubGVuZ3RoKXJldHVybiBNYXRoLm1heCguLi5sKS0xfXJldHVybiBudWxsfWZ1bmN0aW9uIEhWZShuLHQsZSxpKXtsZXQgcj17Li4udH07Zm9yKGxldCBvIGluIG4pe2lmKCFuLmhhc093blByb3BlcnR5KG8pKWNvbnRpbnVlO2xldCBzPXhVKG8sbixlKTtpZihudWxsPT09cyl7dC5oYXNPd25Qcm9wZXJ0eShvKSYmKHJbb109bnVsbCk7Y29udGludWV9bGV0IGE9dC5oYXNPd25Qcm9wZXJ0eShvKT90W29dLmluZGV4Om51bGwsbD14VShvLG4saSksYz1udWxsIT09YSYmYT09PWw7KG51bGwhPT1hJiZhPnN8fG51bGw9PT1hfHxjKSYmKHJbb109e2luZGV4OnMsaXNDbG9zZXN0OiExfSl9cmV0dXJuIHJ9ZnVuY3Rpb24gQ29lKG4pe2xldCB0PWt3KG4ucnVuVG9Mb2FkU3RhdGUsZT0+ZT09PU9lLkxPQURJTkc/T2UuTE9BRElORzpPZS5OT1RfTE9BREVEKTtyZXR1cm57Li4ubixydW5Ub0xvYWRTdGF0ZTp0fX1mdW5jdGlvbiBNb2Uobix0LGUsaSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KFtuLHQsZXx8IiIsaV0pfXZhcntpbml0aWFsU3RhdGU6U29lLHJlZHVjZXJzOlVWZX09em0oe3RhZ01ldGFkYXRhTG9hZFN0YXRlOntzdGF0ZTpPZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSx0YWdNZXRhZGF0YTp7c2NhbGFyczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1RvUnVuczp7fX0saGlzdG9ncmFtczp7dGFnRGVzY3JpcHRpb25zOnt9LHRhZ1RvUnVuczp7fX0saW1hZ2VzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnUnVuU2FtcGxlZEluZm86e319fSxjYXJkTGlzdDpbXSxjYXJkVG9QaW5uZWRDb3B5Om5ldyBNYXAsY2FyZFRvUGlubmVkQ29weUNhY2hlOm5ldyBNYXAscGlubmVkQ2FyZFRvT3JpZ2luYWw6bmV3IE1hcCx1bnJlc29sdmVkSW1wb3J0ZWRQaW5uZWRDYXJkczpbXSxjYXJkTWV0YWRhdGFNYXA6e30sY2FyZFN0ZXBJbmRleDp7fSx0YWdGaWx0ZXI6IiIsdGFnR3JvdXBFeHBhbmRlZDpuZXcgTWFwLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbCxsaW5rZWRUaW1lRW5hYmxlZDohMSxzdGVwU2VsZWN0b3JFbmFibGVkOiExLHJhbmdlU2VsZWN0aW9uRW5hYmxlZDohMSxzaW5nbGVTZWxlY3Rpb25IZWFkZXJzOlt7dHlwZTpLdC5SVU4sZW5hYmxlZDohMH0se3R5cGU6S3QuU01PT1RIRUQsZW5hYmxlZDohMH0se3R5cGU6S3QuVkFMVUUsZW5hYmxlZDohMH0se3R5cGU6S3QuU1RFUCxlbmFibGVkOiEwfSx7dHlwZTpLdC5SRUxBVElWRV9USU1FLGVuYWJsZWQ6ITB9XSxyYW5nZVNlbGVjdGlvbkhlYWRlcnM6W3t0eXBlOkt0LlJVTixlbmFibGVkOiEwfSx7dHlwZTpLdC5NSU5fVkFMVUUsZW5hYmxlZDohMH0se3R5cGU6S3QuTUFYX1ZBTFVFLGVuYWJsZWQ6ITB9LHt0eXBlOkt0LlNUQVJUX1ZBTFVFLGVuYWJsZWQ6ITB9LHt0eXBlOkt0LkVORF9WQUxVRSxlbmFibGVkOiEwfSx7dHlwZTpLdC5WQUxVRV9DSEFOR0UsZW5hYmxlZDohMH0se3R5cGU6S3QuUEVSQ0VOVEFHRV9DSEFOR0UsZW5hYmxlZDohMH0se3R5cGU6S3QuU1RBUlRfU1RFUCxlbmFibGVkOiEwfSx7dHlwZTpLdC5FTkRfU1RFUCxlbmFibGVkOiEwfV0sZmlsdGVyZWRQbHVnaW5UeXBlczpuZXcgU2V0LHN0ZXBNaW5NYXg6e21pbjoxLzAsbWF4Oi0xLzB9fSx7aXNTZXR0aW5nc1BhbmVPcGVuOiEwLGlzU2xpZGVvdXRNZW51T3BlbjohMSx0aW1lU2VyaWVzRGF0YTp7c2NhbGFyczp7fSxoaXN0b2dyYW1zOnt9LGltYWdlczp7fX0sc2V0dGluZ3M6SUksc2V0dGluZ092ZXJyaWRlczp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSwobix0LGUpPT5Qcyh0LGUpP246ey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6e3N0YXRlOk9lLk5PVF9MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOm51bGx9LHRhZ01ldGFkYXRhOntzY2FsYXJzOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxoaXN0b2dyYW1zOnt0YWdEZXNjcmlwdGlvbnM6e30sdGFnVG9SdW5zOnt9fSxpbWFnZXM6e3RhZ0Rlc2NyaXB0aW9uczp7fSx0YWdSdW5TYW1wbGVkSW5mbzp7fX19LGNhcmRMaXN0OltdLGNhcmRNZXRhZGF0YU1hcDp7fSx2aXNpYmxlQ2FyZE1hcDpuZXcgTWFwfSksQ1U9U29lLHpWZT12cihTb2UsU2UoS18sKG4se3JvdXRlS2luZDp0LHBhcnRpYWxTdGF0ZTplfSk9PntpZih0IT09aGkuRVhQRVJJTUVOVCYmdCE9PWhpLkNPTVBBUkVfRVhQRVJJTUVOVClyZXR1cm4gbjtsZXQgaT1uZXcgU2V0O2ZvcihsZXQgdSBvZiBuLnBpbm5lZENhcmRUb09yaWdpbmFsLmtleXMoKSl7bGV0e3BsdWdpbjpkLHRhZzpwLHJ1bklkOmgsc2FtcGxlOmZ9PW4uY2FyZE1ldGFkYXRhTWFwW3VdO2kuYWRkKE1vZShkLHAsaCxmKSl9bGV0IHI9ZSxvPVtdO2ZvcihsZXQgdSBvZlsuLi5uLnVucmVzb2x2ZWRJbXBvcnRlZFBpbm5lZENhcmRzLC4uLnIubWV0cmljcy5waW5uZWRDYXJkc10pe2xldCBkPU1vZSh1LnBsdWdpbix1LnRhZyx1LnJ1bklkLHUuc2FtcGxlKTtpLmhhcyhkKXx8KGkuYWRkKGQpLG8ucHVzaCh1KSl9bGV0IHM9SzQobyxuLmNhcmRMaXN0LG4uY2FyZE1ldGFkYXRhTWFwLG4uY2FyZFRvUGlubmVkQ29weSxuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxuLnBpbm5lZENhcmRUb09yaWdpbmFsLG4uY2FyZFN0ZXBJbmRleCksYT1yLm1ldHJpY3Muc21vb3RoaW5nLGw9bi5zZXR0aW5nT3ZlcnJpZGVzO2lmKE51bWJlci5pc0Zpbml0ZShhKSYmbnVsbCE9PWEpe2xldCB1PU1hdGgubWF4KDAsTWF0aC5taW4oLjk5OSxOdW1iZXIoYS50b1ByZWNpc2lvbigzKSkpKTtsPXsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyU21vb3RoaW5nOnV9fWxldCBjPXsuLi5uLC4uLnMsc2V0dGluZ092ZXJyaWRlczpsfTtyZXR1cm4gbnVsbCE9PXIubWV0cmljcy50YWdGaWx0ZXImJihjLnRhZ0ZpbHRlcj1yLm1ldHJpY3MudGFnRmlsdGVyKSxjfSksU2UoWWMsKG4se3BhcnRpYWxTZXR0aW5nczp0fSk9PntsZXQgZT17fTt0LnRvb2x0aXBTb3J0JiZPYmplY3QudmFsdWVzKE9vKS5pbmNsdWRlcyh0LnRvb2x0aXBTb3J0KSYmKGUudG9vbHRpcFNvcnQ9dC50b29sdGlwU29ydCksIm51bWJlciI9PXR5cGVvZiB0LnRpbWVTZXJpZXNDYXJkTWluV2lkdGgmJihlLmNhcmRNaW5XaWR0aD10LnRpbWVTZXJpZXNDYXJkTWluV2lkdGgpLCJib29sZWFuIj09dHlwZW9mIHQuaWdub3JlT3V0bGllcnMmJihlLmlnbm9yZU91dGxpZXJzPXQuaWdub3JlT3V0bGllcnMpLCJudW1iZXIiPT10eXBlb2YgdC5zY2FsYXJTbW9vdGhpbmcmJihlLnNjYWxhclNtb290aGluZz10LnNjYWxhclNtb290aGluZyk7bGV0IGk9dC50aW1lU2VyaWVzU2V0dGluZ3NQYW5lT3BlbmVkPz9uLmlzU2V0dGluZ3NQYW5lT3BlbixyPXQuc3RlcFNlbGVjdG9yRW5hYmxlZD8/bi5zdGVwU2VsZWN0b3JFbmFibGVkLG89dC5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ/P24ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLHM9dC5saW5rZWRUaW1lRW5hYmxlZD8/bi5saW5rZWRUaW1lRW5hYmxlZDtyZXR1cm57Li4ubixpc1NldHRpbmdzUGFuZU9wZW46aSxzdGVwU2VsZWN0b3JFbmFibGVkOnIscmFuZ2VTZWxlY3Rpb25FbmFibGVkOm8sbGlua2VkVGltZUVuYWJsZWQ6cyxzZXR0aW5nczp7Li4ubi5zZXR0aW5ncywuLi5lfX19KSxTZShhYSxGYSxuPT57bGV0IHQ9bi50YWdNZXRhZGF0YUxvYWRTdGF0ZS5zdGF0ZT09PU9lLkxPQURJTkc/T2UuTE9BRElORzpPZS5OT1RfTE9BREVELGU9a3cobi50aW1lU2VyaWVzRGF0YSwoaSxyKT0+a3coaSxvPT5mbChyKT9rdyhvLHM9PkNvZShzKSk6Q29lKG8pKSk7cmV0dXJuey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6dH0sdGltZVNlcmllc0RhdGE6ZX19KSxTZShIUCxuPT4oey4uLm4sdGFnTWV0YWRhdGFMb2FkU3RhdGU6ey4uLm4udGFnTWV0YWRhdGFMb2FkU3RhdGUsc3RhdGU6T2UuTE9BRElOR319KSksU2UoelAsbj0+KHsuLi5uLHRhZ01ldGFkYXRhTG9hZFN0YXRlOnsuLi5uLnRhZ01ldGFkYXRhTG9hZFN0YXRlLHN0YXRlOk9lLkZBSUxFRH19KSksU2UoVVAsKG4se3RhZ01ldGFkYXRhOnR9KT0+e2xldCBlPXtzY2FsYXJzOndvZSh0LHJpLlNDQUxBUlMpLGhpc3RvZ3JhbXM6d29lKHQscmkuSElTVE9HUkFNUyksaW1hZ2VzOnRbcmkuSU1BR0VTXX0saT17fSxyPWZ1bmN0aW9uKG4pe2xldCB0PVtdO2ZvcihsZXQgZSBvZiBPYmplY3Qua2V5cyhuKSl7bGV0IHIsaT1lO2lmKGZsKGkpKXtpZighbWwoaSkpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS1ydW4sIHNhbXBsZWQgcGx1Z2luIHN1cHBvcnQgbm90IHlldCBpbXBsZW1lbnRlZCIpO3tsZXQgbz1uW2ldLnRhZ1J1blNhbXBsZWRJbmZvO2ZvcihsZXQgcyBvZiBPYmplY3Qua2V5cyhvKSlmb3IobGV0IGEgb2YgT2JqZWN0LmtleXMob1tzXSkpe2xldHttYXhTYW1wbGVzUGVyU3RlcDpsfT1vW3NdW2FdO2ZvcihsZXQgYz0wO2M8bDtjKyspdC5wdXNoKHtwbHVnaW46aSx0YWc6cyxydW5JZDphLHNhbXBsZTpjLG51bVNhbXBsZTpsfSl9fX1lbHNlIGlmKG1sKGkpKXtyPW5baV0udGFnVG9SdW5zO2ZvcihsZXQgbyBvZiBPYmplY3Qua2V5cyhyKSlmb3IobGV0IHMgb2YgcltvXSl0LnB1c2goe3BsdWdpbjppLHRhZzpvLHJ1bklkOnN9KX1lbHNle3I9bltpXS50YWdUb1J1bnM7Zm9yKGxldCBvIG9mIE9iamVjdC5rZXlzKHIpKXQucHVzaCh7cGx1Z2luOmksdGFnOm8scnVuSWQ6bnVsbH0pfX1yZXR1cm4gdH0oZSksbz1bXTtmb3IobGV0IGggb2Ygcil7bGV0IGY9cGVlKGgpO2lbZl09aCxvLnB1c2goZil9bGV0IHM9bi50YWdHcm91cEV4cGFuZGVkO2lmKDA9PT1uLnRhZ0dyb3VwRXhwYW5kZWQuc2l6ZSl7bGV0IGY9ZlIoby5tYXAobT0+KHsuLi5pW21dLGNhcmRJZDptfSkpLmZpbHRlcihCb29sZWFuKSk7cz1uZXcgTWFwKG4udGFnR3JvdXBFeHBhbmRlZCk7Zm9yKGxldCBtIG9mIGYuc2xpY2UoMCwyKSlzLnNldChtLmdyb3VwTmFtZSwhMCl9bGV0e25leHRDYXJkVG9QaW5uZWRDb3B5OmEsbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOmwscGlubmVkQ2FyZE1ldGFkYXRhTWFwOmN9PWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1uZXcgTWFwLHI9bmV3IE1hcCxvPXt9O3JldHVybiBuLmZvckVhY2goKHMsYSk9PnstMSE9PWUuaW5kZXhPZihhKSYmKGkuc2V0KGEscyksci5zZXQocyxhKSxvW3NdPXRbYV0pfSkse25leHRDYXJkVG9QaW5uZWRDb3B5OmksbmV4dFBpbm5lZENhcmRUb09yaWdpbmFsOnIscGlubmVkQ2FyZE1ldGFkYXRhTWFwOm99fShuLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxpLG8pLHU9ey4uLmksLi4uY30sZD1mdW5jdGlvbihuLHQpe2xldCBlPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhuKS5mb3JFYWNoKChbaSxyXSk9Pnt0W2ldJiYoZVtpXT1yKX0pLGV9KG4uY2FyZFN0ZXBJbmRleCx1KSxwPUs0KG4udW5yZXNvbHZlZEltcG9ydGVkUGlubmVkQ2FyZHMsbyx1LGEsbi5jYXJkVG9QaW5uZWRDb3B5Q2FjaGUsbCxkKTtyZXR1cm57Li4ubiwuLi5wLHRhZ0dyb3VwRXhwYW5kZWQ6cyx0YWdNZXRhZGF0YUxvYWRTdGF0ZTp7c3RhdGU6T2UuTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpEYXRlLm5vdygpfSx0YWdNZXRhZGF0YTplLGNhcmRMaXN0Om99fSksU2Uoc1IsKG4se3RhZ0ZpbHRlcjp0fSk9Pih7Li4ubix0YWdGaWx0ZXI6dH0pKSxTZShqUCwobix7c29ydDp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsdG9vbHRpcFNvcnQ6dH19KSksU2UoR1Asbj0+e2xldCB0PSEobi5zZXR0aW5nT3ZlcnJpZGVzLmlnbm9yZU91dGxpZXJzPz9uLnNldHRpbmdzLmlnbm9yZU91dGxpZXJzKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaWdub3JlT3V0bGllcnM6dH19fSksU2UoV1AsKG4se3hBeGlzVHlwZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMseEF4aXNUeXBlOnR9fSkpLFNlKFhQLChuLHtzbW9vdGhpbmc6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLHNjYWxhclNtb290aGluZzp0fX0pKSxTZShRUCxuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWD8/bi5zZXR0aW5ncy5zY2FsYXJQYXJ0aXRpb25Ob25Nb25vdG9uaWNYKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsc2NhbGFyUGFydGl0aW9uTm9uTW9ub3RvbmljWDp0fX19KSxTZShLUCwobix7YnJpZ2h0bmVzc0luTWlsbGk6dH0pPT4oey4uLm4sc2V0dGluZ092ZXJyaWRlczp7Li4ubi5zZXR0aW5nT3ZlcnJpZGVzLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6dH19KSksU2UoWlAsKG4se2NvbnRyYXN0SW5NaWxsaTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VDb250cmFzdEluTWlsbGk6dH19KSksU2UoSlAsbj0+e2xldHtpbWFnZUJyaWdodG5lc3NJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSxTZSgkUCxuPT57bGV0e2ltYWdlQ29udHJhc3RJbk1pbGxpOnQsLi4uZX09bi5zZXR0aW5nT3ZlcnJpZGVzO3JldHVybnsuLi5uLHNldHRpbmdPdmVycmlkZXM6ZX19KSxTZShlUixuPT57bGV0IHQ9IShuLnNldHRpbmdPdmVycmlkZXMuaW1hZ2VTaG93QWN0dWFsU2l6ZT8/bi5zZXR0aW5ncy5pbWFnZVNob3dBY3R1YWxTaXplKTtyZXR1cm57Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaW1hZ2VTaG93QWN0dWFsU2l6ZTp0fX19KSxTZSh0Uiwobix7aGlzdG9ncmFtTW9kZTp0fSk9Pih7Li4ubixzZXR0aW5nT3ZlcnJpZGVzOnsuLi5uLnNldHRpbmdPdmVycmlkZXMsaGlzdG9ncmFtTW9kZTp0fX0pKSxTZShxUCwobix7Y2FyZE1pbldpZHRoOnR9KT0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6dH19KSksU2UoWVAsbj0+KHsuLi5uLHNldHRpbmdPdmVycmlkZXM6ey4uLm4uc2V0dGluZ092ZXJyaWRlcyxjYXJkTWluV2lkdGg6bnVsbH19KSksU2UoblIsKG4se3JlcXVlc3RzOnR9KT0+e2lmKCF0Lmxlbmd0aClyZXR1cm4gbjtsZXQgZT17Li4ubi50aW1lU2VyaWVzRGF0YX07Zm9yKGxldCBpIG9mIHQpe2xldHtwbHVnaW46cix0YWc6byxzYW1wbGU6c309aTtlW3JdPUVJKGUscixvLHMpO2xldCBhPXJwKGUscixvLHMpLGw9ejQoaSk/W2kucnVuSWRdOnV2KG4udGFnTWV0YWRhdGEscixvLHMpO2EucnVuVG9Mb2FkU3RhdGU9VEkoT2UuTE9BRElORyxsLGEucnVuVG9Mb2FkU3RhdGUpfXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOmV9fSksU2UoaVIsKG4se3JlcXVlc3Q6dH0pPT57bGV0IGU9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46aSx0YWc6cixzYW1wbGU6b309dDtlW2ldPUVJKGUsaSxyLG8pO2xldCBzPXJwKGUsaSxyLG8pLGE9ejQodCk/W3QucnVuSWRdOnV2KG4udGFnTWV0YWRhdGEsaSxyLG8pO3JldHVybiBzLnJ1blRvTG9hZFN0YXRlPVRJKE9lLkZBSUxFRCxhLHMucnVuVG9Mb2FkU3RhdGUpLHsuLi5uLHRpbWVTZXJpZXNEYXRhOmV9fSksU2UoclIsKG4se3Jlc3BvbnNlOnR9KT0+e2xldCBlPXsuLi5uLnN0ZXBNaW5NYXh9LGk9ey4uLm4udGltZVNlcmllc0RhdGF9LHtwbHVnaW46cix0YWc6byxydW5JZDpzLHNhbXBsZTphfT10O2lbcl09RUkoaSxyLG8sYSk7bGV0IGw9cnAoaSxyLG8sYSk7aWYoYkkodCkpe2xldCB1PXM/W3NdOnV2KG4udGFnTWV0YWRhdGEscixvLGEpO2wucnVuVG9Mb2FkU3RhdGU9VEkoT2UuRkFJTEVELHUsbC5ydW5Ub0xvYWRTdGF0ZSl9ZWxzZXtsZXQgdT10LnJ1blRvU2VyaWVzO2wucnVuVG9TZXJpZXM9ey4uLmwucnVuVG9TZXJpZXN9LGwucnVuVG9Mb2FkU3RhdGU9ey4uLmwucnVuVG9Mb2FkU3RhdGV9O2ZvcihsZXQgZCBpbiB1KWlmKHUuaGFzT3duUHJvcGVydHkoZCkpe2wucnVuVG9TZXJpZXNbZF09dVtkXSxsLnJ1blRvTG9hZFN0YXRlW2RdPU9lLkxPQURFRDtmb3IobGV0IHAgb2YgdVtkXSllLm1pbj1NYXRoLm1pbihlLm1pbixwLnN0ZXApLGUubWF4PU1hdGgubWF4KGUubWF4LHAuc3RlcCl9fXJldHVybnsuLi5uLHRpbWVTZXJpZXNEYXRhOmksY2FyZFN0ZXBJbmRleDpIVmUobi5jYXJkTWV0YWRhdGFNYXAsbi5jYXJkU3RlcEluZGV4LGksbi50aW1lU2VyaWVzRGF0YSksc3RlcE1pbk1heDplfX0pLFNlKG9SLChuLHtjYXJkSWQ6dCxzdGVwSW5kZXg6ZX0pPT57bGV0IGk9eFUodCxuLmNhcmRNZXRhZGF0YU1hcCxuLnRpbWVTZXJpZXNEYXRhKSxyPWU7cmV0dXJuIG51bGw9PT1pP3I9bnVsbDplPmkmJihyPWkpLHsuLi5uLGNhcmRTdGVwSW5kZXg6ey4uLm4uY2FyZFN0ZXBJbmRleCxbdF06e2luZGV4OnIsaXNDbG9zZXN0OiExfX19fSksU2UoYVIsKG4se3RhZ0dyb3VwOnR9KT0+e2xldCBlPW5ldyBNYXAobi50YWdHcm91cEV4cGFuZGVkKTtyZXR1cm4gZS5zZXQodCwhZS5nZXQodCkpLHsuLi5uLHRhZ0dyb3VwRXhwYW5kZWQ6ZX19KSxTZShpeSwobix7ZW50ZXJlZENhcmRzOnQsZXhpdGVkQ2FyZHM6ZX0pPT57aWYoIXQubGVuZ3RoJiYhZS5sZW5ndGgpcmV0dXJuIG47bGV0IGk9bmV3IE1hcChuLnZpc2libGVDYXJkTWFwKTtyZXR1cm4gdC5mb3JFYWNoKCh7ZWxlbWVudElkOnIsY2FyZElkOm99KT0+e2xldCBzPWkuZ2V0KHIpPz9udWxsO2lmKG51bGwhPT1zJiZzIT09byl0aHJvdyBuZXcgRXJyb3IoIkEgRE9NIGVsZW1lbnQgY2Fubm90IGJlIHJldXNlZCBmb3IgbW9yZSB0aGFuIDEgdW5pcXVlIGNhcmQgbWV0YWRhdGEiKTtpLnNldChyLG8pfSksZS5mb3JFYWNoKCh7ZWxlbWVudElkOnJ9KT0+e2kuZGVsZXRlKHIpfSksey4uLm4sdmlzaWJsZUNhcmRNYXA6aX19KSxTZShyeSwobix7Y2FyZElkOnR9KT0+e2xldCBlPW4ucGlubmVkQ2FyZFRvT3JpZ2luYWwuaGFzKHQpLGk9IWUmJiFuLmNhcmRUb1Bpbm5lZENvcHkuaGFzKHQpO2lmKGkmJiFESShuKSlyZXR1cm4gbjtsZXQgcj1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weSksbz1uZXcgTWFwKG4uY2FyZFRvUGlubmVkQ29weUNhY2hlKSxzPW5ldyBNYXAobi5waW5uZWRDYXJkVG9PcmlnaW5hbCksYT17Li4ubi5jYXJkTWV0YWRhdGFNYXB9LGw9ey4uLm4uY2FyZFN0ZXBJbmRleH07aWYoZSl7bGV0IGM9bi5waW5uZWRDYXJkVG9PcmlnaW5hbC5nZXQodCk7ci5kZWxldGUoYyksby5kZWxldGUoYykscy5kZWxldGUodCksZGVsZXRlIGFbdF0sZGVsZXRlIGxbdF19ZWxzZSBpZihpKXtsZXQgYz1aNCh0LHIsbyxzLGwsYSk7cj1jLmNhcmRUb1Bpbm5lZENvcHksbz1jLmNhcmRUb1Bpbm5lZENvcHlDYWNoZSxzPWMucGlubmVkQ2FyZFRvT3JpZ2luYWwsYT1jLmNhcmRNZXRhZGF0YU1hcCxsPWMuY2FyZFN0ZXBJbmRleH1lbHNle2xldCBjPW4uY2FyZFRvUGlubmVkQ29weS5nZXQodCk7ci5kZWxldGUodCksby5kZWxldGUodCkscy5kZWxldGUoYyksZGVsZXRlIGFbY10sZGVsZXRlIGxbY119cmV0dXJuey4uLm4sY2FyZE1ldGFkYXRhTWFwOmEsY2FyZFN0ZXBJbmRleDpsLGNhcmRUb1Bpbm5lZENvcHk6cixjYXJkVG9QaW5uZWRDb3B5Q2FjaGU6byxwaW5uZWRDYXJkVG9PcmlnaW5hbDpzfX0pLFNlKHVSLG49PntsZXQgdD0hbi5saW5rZWRUaW1lRW5hYmxlZCxlPXsuLi5uLmNhcmRTdGVwSW5kZXh9LGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uLHI9bi5zdGVwU2VsZWN0b3JFbmFibGVkO2lmKHQpe2xldHttaW46b309bi5zdGVwTWluTWF4LHM9bz09PTEvMD8wOm87aT1uLmxpbmtlZFRpbWVTZWxlY3Rpb24/P3tzdGFydDp7c3RlcDpzfSxlbmQ6bnVsbH0sZT1KNChuLmNhcmRTdGVwSW5kZXgsbi5jYXJkTWV0YWRhdGFNYXAsbi50aW1lU2VyaWVzRGF0YSxpKSxyPXR9cmV0dXJuey4uLm4sY2FyZFN0ZXBJbmRleDplLGxpbmtlZFRpbWVFbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6cn19KSxTZShoUixuPT57bGV0IHQ9IW4ucmFuZ2VTZWxlY3Rpb25FbmFibGVkLGU9bi5zdGVwU2VsZWN0b3JFbmFibGVkLGk9bi5saW5rZWRUaW1lU2VsZWN0aW9uO3JldHVybiB0PyhlPXQsaXx8KGk9e3N0YXJ0OntzdGVwOm4uc3RlcE1pbk1heC5taW59LGVuZDp7c3RlcDpuLnN0ZXBNaW5NYXgubWF4fX0pLGkuZW5kfHwoaT17Li4uaSxlbmQ6e3N0ZXA6bi5zdGVwTWluTWF4Lm1heH19KSk6aSYmKGk9ey4uLmksZW5kOm51bGx9KSx7Li4ubixzdGVwU2VsZWN0b3JFbmFibGVkOmUscmFuZ2VTZWxlY3Rpb25FbmFibGVkOnQsbGlua2VkVGltZVNlbGVjdGlvbjppfX0pLFNlKFloLChuLHQpPT57bGV0e3RpbWVTZWxlY3Rpb246ZX09dCxpPWUuc3RhcnQuc3RlcCxyPWUuZW5kPy5zdGVwLHM9bi5yYW5nZVNlbGVjdGlvbkVuYWJsZWQ7bi5saW5rZWRUaW1lRW5hYmxlZCYmKHM9dm9pZCAwIT09cik7bGV0IGE9e3N0YXJ0OntzdGVwOml9LGVuZDp2b2lkIDA9PT1yP251bGw6e3N0ZXA6aT5yP2k6cn19LGw9SjQobi5jYXJkU3RlcEluZGV4LG4uY2FyZE1ldGFkYXRhTWFwLG4udGltZVNlcmllc0RhdGEsYSk7cmV0dXJuey4uLm4sbGlua2VkVGltZVNlbGVjdGlvbjphLGNhcmRTdGVwSW5kZXg6bCxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6c319KSxTZShYaCwobix7YWZmb3JkYW5jZTp0fSk9PntpZighbi5saW5rZWRUaW1lRW5hYmxlZCYmdCE9PWJsLkNIRUNLX0JPWClyZXR1cm57Li4ubn07bGV0IGU9IW4uc3RlcFNlbGVjdG9yRW5hYmxlZCxpPWUmJm4ubGlua2VkVGltZUVuYWJsZWQscj1lJiZuLnJhbmdlU2VsZWN0aW9uRW5hYmxlZDtyZXR1cm57Li4ubixsaW5rZWRUaW1lRW5hYmxlZDppLHN0ZXBTZWxlY3RvckVuYWJsZWQ6ZSxyYW5nZVNlbGVjdGlvbkVuYWJsZWQ6cn19KSxTZSh2b2Usbj0+KHsuLi5uLGxpbmtlZFRpbWVTZWxlY3Rpb246bnVsbH0pKSxTZShkUiwobix7bmV3T3JkZXI6dH0pPT5uLnJhbmdlU2VsZWN0aW9uRW5hYmxlZD97Li4ubixyYW5nZVNlbGVjdGlvbkhlYWRlcnM6dH06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczp0fSksU2UoYm9lLChuLHtkYXRhVGFibGVNb2RlOnQsaGVhZGVyczplfSk9PntsZXQgaT1bXSxyPVtdO3JldHVybiBlLmZvckVhY2gobz0+e28uZW5hYmxlZD9pLnB1c2gobyk6ci5wdXNoKG8pfSksdD09PWdkLlJBTkdFP3suLi5uLHJhbmdlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX06ey4uLm4sc2luZ2xlU2VsZWN0aW9uSGVhZGVyczppLmNvbmNhdChyKX19KSxTZShwUiwobix7ZGF0YVRhYmxlTW9kZTp0LGhlYWRlclR5cGU6ZX0pPT57bGV0IGk9dD09PWdkLlJBTkdFP24ucmFuZ2VTZWxlY3Rpb25IZWFkZXJzOm4uc2luZ2xlU2VsZWN0aW9uSGVhZGVycyxyPWkuZmluZEluZGV4KGE9PmEudHlwZT09PWUpLG89ZnVuY3Rpb24obil7bGV0IHQ9MDtyZXR1cm4gbi5mb3JFYWNoKGU9PntlLmVuYWJsZWQmJnQrK30pLHR9KGkpO2lbcl0uZW5hYmxlZCYmby0tO2xldCBzPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1bLi4uZV07cmV0dXJuIGkuc3BsaWNlKG4sMSksaS5zcGxpY2UodCwwLGVbbl0pLGl9KHIsbyxpKTtyZXR1cm4gc1tvXT17dHlwZTpzW29dLnR5cGUsZW5hYmxlZDohc1tvXS5lbmFibGVkfSx0PT09Z2QuUkFOR0U/ey4uLm4scmFuZ2VTZWxlY3Rpb25IZWFkZXJzOnN9OnsuLi5uLHNpbmdsZVNlbGVjdGlvbkhlYWRlcnM6c319KSxTZShsUiwobix7cGx1Z2luOnR9KT0+e2xldCBlPW5ldyBTZXQobi5maWx0ZXJlZFBsdWdpblR5cGVzKTtyZXR1cm4gZS5oYXModCk/ZS5kZWxldGUodCk6ZS5hZGQodCksT2JqZWN0LnZhbHVlcyhyaSkuZXZlcnkoaT0+ZS5oYXMoaSkpJiYoZT1uZXcgU2V0KSx7Li4ubixmaWx0ZXJlZFBsdWdpblR5cGVzOmV9fSksU2UoY1Isbj0+KHsuLi5uLGZpbHRlcmVkUGx1Z2luVHlwZXM6bmV3IFNldH0pKSxTZShCUCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiFuLmlzU2V0dGluZ3NQYW5lT3Blbn0pKSxTZShMUCxuPT4oey4uLm4saXNTZXR0aW5nc1BhbmVPcGVuOiExfSkpLFNlKFZQLG49Pih7Li4ubixpc1NsaWRlb3V0TWVudU9wZW46IW4uaXNTbGlkZW91dE1lbnVPcGVufSkpKTtmdW5jdGlvbiBFb2Uobix0KXtyZXR1cm4gam0oelZlLFVWZSkobix0KX1mdW5jdGlvbiB3b2Uobix0KXtyZXR1cm57dGFnRGVzY3JpcHRpb25zOm5bdF0udGFnRGVzY3JpcHRpb25zLHRhZ1RvUnVuczpqVmUoblt0XS5ydW5UYWdJbmZvKX19ZnVuY3Rpb24galZlKG4pe2xldCB0PXt9O2ZvcihsZXQgZSBpbiBuKWZvcihsZXQgaSBvZiBuW2VdKXRbaV09Wy4uLnRbaV18fFtdLGVdO3JldHVybiB0fXZhciBxVmU9SihiaCx0Yywobix0LGUpPT50P3suLi50LGxvYWRTdGF0ZTpuLGlkOmV9Om51bGwpLFRvZT1iZSgiW01ldHJpY3MgRWZmZWN0c10gSW5pdCIpLERvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMuZGFzaGJvYXJkU2hvd25XaXRob3V0RGF0YSQ9dGhpcy5hY3Rpb25zJC5waXBlKGlpKFRvZSxadSxVbSxKbCksV3QodGhpcy5zdG9yZS5zZWxlY3QoUnMpLHRoaXMuc3RvcmUuc2VsZWN0KFVNKSksWWUoKFssbyxzXSk9Pm89PT1CTSYmcy5zdGF0ZT09PU9lLk5PVF9MT0FERUQpKSx0aGlzLnJlbG9hZFJlcXVlc3RlZFdoaWxlU2hvd24kPXRoaXMuYWN0aW9ucyQucGlwZShpaShhYSxGYSksV3QodGhpcy5zdG9yZS5zZWxlY3QoUnMpKSxZZSgoWyxvXSk9Pm89PT1CTSkpLHRoaXMubG9hZFRhZ01ldGFkYXRhJD1KdCh0aGlzLmRhc2hib2FyZFNob3duV2l0aG91dERhdGEkLHRoaXMucmVsb2FkUmVxdWVzdGVkV2hpbGVTaG93biQpLnBpcGUoV3QodGhpcy5zdG9yZS5zZWxlY3QoVU0pLHRoaXMuc3RvcmUuc2VsZWN0KFdvKSksWWUoKFssbyxzXSk9Pm8uc3RhdGUhPT1PZS5MT0FESU5HJiZudWxsIT09cyksa3QoKCk9Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEhQKCkpfSksdWkoKFssLG9dKT0+dGhpcy5kYXRhU291cmNlLmZldGNoVGFnTWV0YWRhdGEobykucGlwZShrdChzPT57dGhpcy5zdG9yZS5kaXNwYXRjaChVUCh7dGFnTWV0YWRhdGE6c30pKX0pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaCh6UCgpKSxYdChudWxsKSkpKSkpLHRoaXMudmlzaWJsZUNhcmRzV2l0aG91dERhdGFDaGFuZ2VkJD10aGlzLmFjdGlvbnMkLnBpcGUoaWkoaXkpLFd0KHRoaXMuZ2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCkpLEwoKFssb10pPT5vLmZpbHRlcihzPT5zLmxvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUQpKSksdGhpcy52aXNpYmxlQ2FyZHNSZWxvYWRlZCQ9dGhpcy5yZWxvYWRSZXF1ZXN0ZWRXaGlsZVNob3duJC5waXBlKFd0KHRoaXMuZ2V0VmlzaWJsZUNhcmRGZXRjaEluZm9zKCkpLEwoKFssb10pPT5vLmZpbHRlcihzPT5zLmxvYWRTdGF0ZSE9PU9lLkxPQURJTkcpKSksdGhpcy5sb2FkVGltZVNlcmllcyQ9SnQodGhpcy52aXNpYmxlQ2FyZHNXaXRob3V0RGF0YUNoYW5nZWQkLHRoaXMudmlzaWJsZUNhcmRzUmVsb2FkZWQkKS5waXBlKFllKG89Pm8ubGVuZ3RoPjApLFd0KHRoaXMuc3RvcmUuc2VsZWN0KFdvKS5waXBlKFllKG89Pm51bGwhPT1vKSkpLHhuKChbbyxzXSk9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzRm9yQ2FyZHMobyxzKSkpLHRoaXMuZGF0YUVmZmVjdHMkPWNyKCgpPT5KdCh0aGlzLmxvYWRUYWdNZXRhZGF0YSQsdGhpcy5sb2FkVGltZVNlcmllcyQpLHtkaXNwYXRjaDohMX0pfW5ncnhPbkluaXRFZmZlY3RzKCl7cmV0dXJuIFRvZSgpfWdldFZpc2libGVDYXJkRmV0Y2hJbmZvcygpe3JldHVybiB0aGlzLnN0b3JlLnNlbGVjdChtZWUpLnBpcGUodWkoaT0+aS5zaXplP2xyKFsuLi5pXS5tYXAobz0+dGhpcy5zdG9yZS5zZWxlY3QocVZlLG8pLnBpcGUoUXQoMSkpKSk6WHQoW10pKSxMKGk9PmkuZmlsdGVyKEJvb2xlYW4pKSl9ZmV0Y2hUaW1lU2VyaWVzKGUpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UuZmV0Y2hUaW1lU2VyaWVzKFtlXSkucGlwZShrdChpPT57bGV0IHI9aS5maWx0ZXIoYkkpO3IubGVuZ3RoJiZjb25zb2xlLmVycm9yKCJUaW1lIHNlcmllcyByZXNwb25zZSBjb250YWluZWQgZXJyb3JzOiIsciksdGhpcy5zdG9yZS5kaXNwYXRjaChyUih7cmVzcG9uc2U6aVswXX0pKX0pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChpUih7cmVxdWVzdDplfSkpLFh0KG51bGwpKSkpfWZldGNoVGltZVNlcmllc0ZvckNhcmRzKGUsaSl7cmV0dXJuIFh0KGUubWFwKG89PntsZXR7cGx1Z2luOnMsdGFnOmEscnVuSWQ6bCxzYW1wbGU6Y309byx1PW1sKHMpP3twbHVnaW46cyx0YWc6YSxydW5JZDpsfTp7cGx1Z2luOnMsdGFnOmEsZXhwZXJpbWVudElkczppfTtyZXR1cm4gdm9pZCAwIT09YyYmKHUuc2FtcGxlPWMpLHV9KSkucGlwZShrdChvPT57dGhpcy5zdG9yZS5kaXNwYXRjaChuUih7cmVxdWVzdHM6b30pKX0pLHhuKG89Pkp0KC4uLm8ubWFwKGE9PnRoaXMuZmV0Y2hUaW1lU2VyaWVzKGEpKSkpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoaihQbyksaihDZSksaigkdSkpfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLE1VPW5ldyBwZSgiTWV0cmljcyBTdG9yZSBDb25maWciKSx3VT1uZXcgcGUoIk1ldHJpY3MgSW5pdGlhbCBTZXR0aW5ncyBDb25maWciKTtmdW5jdGlvbiBBb2Uobil7cmV0dXJuIG4/e2luaXRpYWxTdGF0ZTp7Li4uQ1Usc2V0dGluZ3M6bn19Ontpbml0aWFsU3RhdGU6Q1V9fXZhciBDbD0oKCk9PihmdW5jdGlvbihuKXtuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCIsbltuLk1JRERMRT00XT0iTUlERExFIixuW24uRk9VUlRIPThdPSJGT1VSVEgiLG5bbi5GSUZUSD0zMl09IkZJRlRIIn0oQ2x8fChDbD17fSkpLENsKSkoKSxJb2U9MDtmdW5jdGlvbiBZVmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkuZXhwYW5kU2lkZWJhcigpKX0pLE8oMSwibWF0LWljb24iLDQpLHYoKX19ZnVuY3Rpb24gWFZlKG4sdCl7aWYoMSZuJiYoXygwLCJuYXYiLDUpLEIoMSwiYXN5bmMiKSxWbigyLDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7UHQoIndpZHRoIixVKDEsNCxlLndpZHRoJCksIiUiKSgibWluLXdpZHRoIixlLk1JTklNVU1fU0lERUJBUl9XSURUSF9JTl9QWCwicHgiKX19ZnVuY3Rpb24gUVZlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw2KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5yZXNpemVHcmFiYmVkKCkpfSksdigpfX12YXIgS1ZlPVtbWyIiLCJtYWluIiwiIl1dLFtbIiIsInNpZGViYXIiLCIiXV1dLFpWZT1bIlttYWluXSIsIltzaWRlYmFyXSJdLFJvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5zdG9yZT1lLHRoaXMud2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGlJKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMucmVzaXppbmc9ITEsdGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg9NzUsX2koaS5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksWWUoKCk9PnRoaXMucmVzaXppbmcpKS5zdWJzY3JpYmUocj0+e2lmKChyLmJ1dHRvbnMmQ2wuTEVGVCkhPT1DbC5MRUZUKXJldHVybiB2b2lkKHRoaXMucmVzaXppbmc9ITEpO3IucHJldmVudERlZmF1bHQoKTtsZXR7d2lkdGg6b309aS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc3RvcmUuZGlzcGF0Y2gobnYoe3dpZHRoSW5QZXJjZW50OnIuY2xpZW50WDw9dGhpcy5NSU5JTVVNX1NJREVCQVJfV0lEVEhfSU5fUFg/MDpyLmNsaWVudFgvbyoxMDB9KSl9KSxfaShpLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlc2l6aW5nPSExfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfXJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfWV4cGFuZFNpZGViYXIoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKG52KHt3aWR0aEluUGVyY2VudDoyMH0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTShSZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWRhc2hib2FyZC1sYXlvdXQiXV0sbmdDb250ZW50U2VsZWN0b3JzOlpWZSxkZWNsczo3LHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJleHBhbmQiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNpZGViYXIiLDMsIndpZHRoIiwibWluV2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwicmVzaXplciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWzEsImV4cGFuZCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJleHBhbmRfbW9yZV8yNHB4Il0sWzEsInNpZGViYXIiXSxbMSwicmVzaXplciIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoeGkoS1ZlKSxFKDAsWVZlLDIsMCwiYnV0dG9uIiwwKSxCKDEsImFzeW5jIiksRSgyLFhWZSwzLDYsIm5hdiIsMSksQigzLCJhc3luYyIpLEUoNCxRVmUsMSwwLCJkaXYiLDIpLEIoNSwiYXN5bmMiKSxWbig2KSksMiZlJiYoeSgibmdJZiIsMD09PVUoMSwzLGkud2lkdGgkKSksQygyKSx5KCJuZ0lmIixVKDMsNSxpLndpZHRoJCk+MCksQygyKSx5KCJuZ0lmIixVKDUsNyxpLndpZHRoJCk+MCkpfSxkZXBlbmRlbmNpZXM6W0JlLEd0LEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjgwdnd9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCAuZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZmxleDowIDA7anVzdGlmeS1zZWxmOnN0cmV0Y2h9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4cGFuZFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojNTU1fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIwcHh9LnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjAgMnB4O2N1cnNvcjpldy1yZXNpemU7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNofS5yZXNpemVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Ym9yZGVyLWNvbG9yOiNjY2M7b3V0bGluZTozcHggc29saWQgI2NjYzt6LWluZGV4OjF9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnJlc2l6ZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucmVzaXplcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7b3V0bGluZS1jb2xvcjojNzc3O2JvcmRlci1jb2xvcjojNzc3fS5leHBhbmRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDowIDFweCAwIDA7Y29sb3I6aW5oZXJpdDtjb250YWluOmNvbnRlbnQ7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktc2VsZjpzdHJldGNoO3BhZGRpbmc6MH0uZXhwYW5kW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXJ9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxTVT1uZXcgV2Vha01hcCxOdz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucm9vdD10LHRoaXMuYnVmZmVyPWUsdGhpcy5kZXN0cm95ZWRUYXJnZXRzPW5ldyBXZWFrU2V0fWluaXRpYWxpemUodCl7aWYodGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcilyZXR1cm47dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjaz10O2xldCBlPXt0aHJlc2hvbGQ6MCxyb290OnRoaXMucm9vdD8/bnVsbH07dGhpcy5idWZmZXImJihlLnJvb3RNYXJnaW49dGhpcy5idWZmZXIpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRoaXMub25DYXJkSW50ZXJzZWN0aW9uLmJpbmQodGhpcyksZSl9YWRkKHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHQpfXdpbGxEZXN0cm95KHQpe3RoaXMuZW5zdXJlSW5pdGlhbGl6ZWQoKSYmdGhpcy5kZXN0cm95ZWRUYXJnZXRzLmFkZCh0KX1lbnN1cmVJbml0aWFsaXplZCgpe2lmKCF0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyKXRocm93IG5ldyBFcnJvcigiQ2FyZE9ic2VydmVyIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSIpO3JldHVybiEwfW9uQ2FyZEludGVyc2VjdGlvbih0KXt0LnNvcnQoKHIsbyk9PnIudGltZS1vLnRpbWUpO2xldCBlPW5ldyBTZXQsaT1uZXcgU2V0O2ZvcihsZXR7aXNJbnRlcnNlY3Rpbmc6cix0YXJnZXQ6b31vZiB0KXI/KGUuYWRkKG8pLGkuZGVsZXRlKG8pKTooZS5kZWxldGUobyksaS5hZGQobykpLHRoaXMuZGVzdHJveWVkVGFyZ2V0cy5oYXMobykmJiFyJiYodGhpcy5kZXN0cm95ZWRUYXJnZXRzLmRlbGV0ZShvKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLnVub2JzZXJ2ZShvKSk7dGhpcy5pbnRlcnNlY3Rpb25DYWxsYmFjayhlLGkpfW9uQ2FyZEludGVyc2VjdGlvbkZvclRlc3QodCl7dGhpcy5vbkNhcmRJbnRlcnNlY3Rpb24odCl9fSxPb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuaG9zdD1lLHRoaXMuc3RvcmU9aX1vbkNhcmRJbnRlcnNlY3Rpb24oZSxpKXtsZXQgcj1bLi4uZV0ubWFwKHM9PntsZXQgYT1TVS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSksbz1bLi4uaV0ubWFwKHM9PntsZXQgYT1TVS5nZXQocyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJBIENhcmRPYnNlcnZlciBlbGVtZW50IG11c3QgaGF2ZSBhbiBhc3NvY2lhdGVkIGVsZW1lbnQgaWQgYW5kIGNhcmQgaWQuIik7cmV0dXJue2VsZW1lbnRJZDphLmVsZW1lbnRJZCxjYXJkSWQ6YS5jYXJkSWR9fSk7dGhpcy5zdG9yZS5kaXNwYXRjaChpeSh7ZW50ZXJlZENhcmRzOnIsZXhpdGVkQ2FyZHM6b30pKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O1NVLnNldChlLHtlbGVtZW50SWQ6KElvZSsrLFN5bWJvbChJb2UpKSxjYXJkSWQ6dGhpcy5jYXJkSWR9KSx0aGlzLmNhcmRPYnNlcnZlcnx8KHRoaXMuY2FyZE9ic2VydmVyPW5ldyBOdyksdGhpcy5jYXJkT2JzZXJ2ZXIuaW5pdGlhbGl6ZSh0aGlzLm9uQ2FyZEludGVyc2VjdGlvbi5iaW5kKHRoaXMpKSx0aGlzLmNhcmRPYnNlcnZlci5hZGQoZSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNhcmRPYnNlcnZlciYmdGhpcy5jYXJkT2JzZXJ2ZXIud2lsbERlc3Ryb3kodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQpfWhvc3RGb3JUZXN0KCl7cmV0dXJuIHRoaXMuaG9zdH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShDZSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJjYXJkTGF6eUxvYWRlciIsIiJdXSxpbnB1dHM6e2NhcmRJZDpbImNhcmRMYXp5TG9hZGVyIiwiY2FyZElkIl0sY2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIifX0pLG59KSgpLGU1ZT1bImJ1dHRvbiJdLHQ1ZT1bIioiXSxrb2U9bmV3IHBlKCJNQVRfQlVUVE9OX1RPR0dMRV9ERUZBVUxUX09QVElPTlMiKSxGb2U9bmV3IHBlKCJNYXRCdXR0b25Ub2dnbGVHcm91cCIpLG41ZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+RVUpLG11bHRpOiEwfSxOb2U9MCxtUj1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMuc291cmNlPXQsdGhpcy52YWx1ZT1lfX0sRVU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yPWUsdGhpcy5fdmVydGljYWw9ITEsdGhpcy5fbXVsdGlwbGU9ITEsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fY29udHJvbFZhbHVlQWNjZXNzb3JDaGFuZ2VGbj0oKT0+e30sdGhpcy5fb25Ub3VjaGVkPSgpPT57fSx0aGlzLl9uYW1lPSJtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cC0iK05vZSsrLHRoaXMudmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy5hcHBlYXJhbmNlPWkmJmkuYXBwZWFyYW5jZT9pLmFwcGVhcmFuY2U6InN0YW5kYXJkIn1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfXNldCBuYW1lKGUpe3RoaXMuX25hbWU9ZSx0aGlzLl9tYXJrQnV0dG9uc0ZvckNoZWNrKCl9Z2V0IHZlcnRpY2FsKCl7cmV0dXJuIHRoaXMuX3ZlcnRpY2FsfXNldCB2ZXJ0aWNhbChlKXt0aGlzLl92ZXJ0aWNhbD1SdChlKX1nZXQgdmFsdWUoKXtsZXQgZT10aGlzLl9zZWxlY3Rpb25Nb2RlbD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDpbXTtyZXR1cm4gdGhpcy5tdWx0aXBsZT9lLm1hcChpPT5pLnZhbHVlKTplWzBdP2VbMF0udmFsdWU6dm9pZCAwfXNldCB2YWx1ZShlKXt0aGlzLl9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKX1nZXQgc2VsZWN0ZWQoKXtsZXQgZT10aGlzLl9zZWxlY3Rpb25Nb2RlbD90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZDpbXTtyZXR1cm4gdGhpcy5tdWx0aXBsZT9lOmVbMF18fG51bGx9Z2V0IG11bHRpcGxlKCl7cmV0dXJuIHRoaXMuX211bHRpcGxlfXNldCBtdWx0aXBsZShlKXt0aGlzLl9tdWx0aXBsZT1SdChlKSx0aGlzLl9tYXJrQnV0dG9uc0ZvckNoZWNrKCl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLl9tYXJrQnV0dG9uc0ZvckNoZWNrKCl9bmdPbkluaXQoKXt0aGlzLl9zZWxlY3Rpb25Nb2RlbD1uZXcgQWgodGhpcy5tdWx0aXBsZSx2b2lkIDAsITEpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdCguLi50aGlzLl9idXR0b25Ub2dnbGVzLmZpbHRlcihlPT5lLmNoZWNrZWQpKX13cml0ZVZhbHVlKGUpe3RoaXMudmFsdWU9ZSx0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm49ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZX1fZW1pdENoYW5nZUV2ZW50KGUpe2xldCBpPW5ldyBtUihlLHRoaXMudmFsdWUpO3RoaXMuX2NvbnRyb2xWYWx1ZUFjY2Vzc29yQ2hhbmdlRm4oaS52YWx1ZSksdGhpcy5jaGFuZ2UuZW1pdChpKX1fc3luY0J1dHRvblRvZ2dsZShlLGkscj0hMSxvPSExKXshdGhpcy5tdWx0aXBsZSYmdGhpcy5zZWxlY3RlZCYmIWUuY2hlY2tlZCYmKHRoaXMuc2VsZWN0ZWQuY2hlY2tlZD0hMSksdGhpcy5fc2VsZWN0aW9uTW9kZWw/aT90aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZSk6bz0hMCxvP1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnRoaXMuX3VwZGF0ZU1vZGVsVmFsdWUoZSxyKSk6dGhpcy5fdXBkYXRlTW9kZWxWYWx1ZShlLHIpfV9pc1NlbGVjdGVkKGUpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCYmdGhpcy5fc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChlKX1faXNQcmVjaGVja2VkKGUpe3JldHVybiEodHlwZW9mIHRoaXMuX3Jhd1ZhbHVlPiJ1IikmJih0aGlzLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHRoaXMuX3Jhd1ZhbHVlKT90aGlzLl9yYXdWYWx1ZS5zb21lKGk9Pm51bGwhPWUudmFsdWUmJmk9PT1lLnZhbHVlKTplLnZhbHVlPT09dGhpcy5fcmF3VmFsdWUpfV9zZXRTZWxlY3Rpb25CeVZhbHVlKGUpe3RoaXMuX3Jhd1ZhbHVlPWUsdGhpcy5fYnV0dG9uVG9nZ2xlcyYmKHRoaXMubXVsdGlwbGUmJmU/KEFycmF5LmlzQXJyYXkoZSksdGhpcy5fY2xlYXJTZWxlY3Rpb24oKSxlLmZvckVhY2goaT0+dGhpcy5fc2VsZWN0VmFsdWUoaSkpKToodGhpcy5fY2xlYXJTZWxlY3Rpb24oKSx0aGlzLl9zZWxlY3RWYWx1ZShlKSkpfV9jbGVhclNlbGVjdGlvbigpe3RoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksdGhpcy5fYnV0dG9uVG9nZ2xlcy5mb3JFYWNoKGU9PmUuY2hlY2tlZD0hMSl9X3NlbGVjdFZhbHVlKGUpe2xldCBpPXRoaXMuX2J1dHRvblRvZ2dsZXMuZmluZChyPT5udWxsIT1yLnZhbHVlJiZyLnZhbHVlPT09ZSk7aSYmKGkuY2hlY2tlZD0hMCx0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaSkpfV91cGRhdGVNb2RlbFZhbHVlKGUsaSl7aSYmdGhpcy5fZW1pdENoYW5nZUV2ZW50KGUpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKX1fbWFya0J1dHRvbnNGb3JDaGVjaygpe3RoaXMuX2J1dHRvblRvZ2dsZXM/LmZvckVhY2goZT0+ZS5fbWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKGtvZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJkVpKHIscjVlLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuX2J1dHRvblRvZ2dsZXM9byl9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JvdXAiLDEsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIl0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJih6ZSgiYXJpYS1kaXNhYmxlZCIsaS5kaXNhYmxlZCksZXQoIm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2FsIixpLnZlcnRpY2FsKSgibWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZCIsInN0YW5kYXJkIj09PWkuYXBwZWFyYW5jZSkpfSxpbnB1dHM6e2FwcGVhcmFuY2U6ImFwcGVhcmFuY2UiLG5hbWU6Im5hbWUiLHZlcnRpY2FsOiJ2ZXJ0aWNhbCIsdmFsdWU6InZhbHVlIixtdWx0aXBsZToibXVsdGlwbGUiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LG91dHB1dHM6e3ZhbHVlQ2hhbmdlOiJ2YWx1ZUNoYW5nZSIsY2hhbmdlOiJjaGFuZ2UifSxleHBvcnRBczpbIm1hdEJ1dHRvblRvZ2dsZUdyb3VwIl0sZmVhdHVyZXM6WyR0KFtuNWUse3Byb3ZpZGU6Rm9lLHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksaTVlPXFvKGNsYXNze30pLHI1ZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgaTVle2NvbnN0cnVjdG9yKGUsaSxyLG8scyxhKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fZWxlbWVudFJlZj1yLHRoaXMuX2ZvY3VzTW9uaXRvcj1vLHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5hcmlhTGFiZWxsZWRieT1udWxsLHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuY2hhbmdlPW5ldyBHO2xldCBsPU51bWJlcihzKTt0aGlzLnRhYkluZGV4PWx8fDA9PT1sP2w6bnVsbCx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwPWUsdGhpcy5hcHBlYXJhbmNlPWEmJmEuYXBwZWFyYW5jZT9hLmFwcGVhcmFuY2U6InN0YW5kYXJkIn1nZXQgYnV0dG9uSWQoKXtyZXR1cm5gJHt0aGlzLmlkfS1idXR0b25gfWdldCBhcHBlYXJhbmNlKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5hcHBlYXJhbmNlOnRoaXMuX2FwcGVhcmFuY2V9c2V0IGFwcGVhcmFuY2UoZSl7dGhpcy5fYXBwZWFyYW5jZT1lfWdldCBjaGVja2VkKCl7cmV0dXJuIHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA/dGhpcy5idXR0b25Ub2dnbGVHcm91cC5faXNTZWxlY3RlZCh0aGlzKTp0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe2xldCBpPVJ0KGUpO2khPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1pLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJnRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAuX3N5bmNCdXR0b25Ub2dnbGUodGhpcyx0aGlzLl9jaGVja2VkKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwJiZ0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKX1uZ09uSW5pdCgpe2xldCBlPXRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA7dGhpcy5pZD10aGlzLmlkfHwibWF0LWJ1dHRvbi10b2dnbGUtIitOb2UrKyxlJiYoZS5faXNQcmVjaGVja2VkKHRoaXMpP3RoaXMuY2hlY2tlZD0hMDplLl9pc1NlbGVjdGVkKHRoaXMpIT09dGhpcy5fY2hlY2tlZCYmZS5fc3luY0J1dHRvblRvZ2dsZSh0aGlzLHRoaXMuX2NoZWNrZWQpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmLCEwKX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuYnV0dG9uVG9nZ2xlR3JvdXA7dGhpcy5fZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuX2VsZW1lbnRSZWYpLGUmJmUuX2lzU2VsZWN0ZWQodGhpcykmJmUuX3N5bmNCdXR0b25Ub2dnbGUodGhpcywhMSwhMSwhMCl9Zm9jdXMoZSl7dGhpcy5fYnV0dG9uRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9vbkJ1dHRvbkNsaWNrKCl7bGV0IGU9ISF0aGlzLl9pc1NpbmdsZVNlbGVjdG9yKCl8fCF0aGlzLl9jaGVja2VkO2UhPT10aGlzLl9jaGVja2VkJiYodGhpcy5fY2hlY2tlZD1lLHRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAmJih0aGlzLmJ1dHRvblRvZ2dsZUdyb3VwLl9zeW5jQnV0dG9uVG9nZ2xlKHRoaXMsdGhpcy5fY2hlY2tlZCwhMCksdGhpcy5idXR0b25Ub2dnbGVHcm91cC5fb25Ub3VjaGVkKCkpKSx0aGlzLmNoYW5nZS5lbWl0KG5ldyBtUih0aGlzLHRoaXMudmFsdWUpKX1fbWFya0ZvckNoZWNrKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2dldEJ1dHRvbk5hbWUoKXtyZXR1cm4gdGhpcy5faXNTaW5nbGVTZWxlY3RvcigpP3RoaXMuYnV0dG9uVG9nZ2xlR3JvdXAubmFtZTp0aGlzLm5hbWV8fG51bGx9X2lzU2luZ2xlU2VsZWN0b3IoKXtyZXR1cm4gdGhpcy5idXR0b25Ub2dnbGVHcm91cCYmIXRoaXMuYnV0dG9uVG9nZ2xlR3JvdXAubXVsdGlwbGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oRm9lLDgpLE0obm4pLE0oUmUpLE0oRnIpLHZvKCJ0YWJpbmRleCIpLE0oa29lLDgpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYnV0dG9uLXRvZ2dsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGU1ZSw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLl9idXR0b25FbGVtZW50PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibWF0LWJ1dHRvbi10b2dnbGUiXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLmZvY3VzKCl9KSwyJmUmJih6ZSgiYXJpYS1sYWJlbCIsbnVsbCkoImFyaWEtbGFiZWxsZWRieSIsbnVsbCkoImlkIixpLmlkKSgibmFtZSIsbnVsbCksZXQoIm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUiLCFpLmJ1dHRvblRvZ2dsZUdyb3VwKSgibWF0LWJ1dHRvbi10b2dnbGUtY2hlY2tlZCIsaS5jaGVja2VkKSgibWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIiwic3RhbmRhcmQiPT09aS5hcHBlYXJhbmNlKSl9LGlucHV0czp7ZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsYXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxpZDoiaWQiLG5hbWU6Im5hbWUiLHZhbHVlOiJ2YWx1ZSIsdGFiSW5kZXg6InRhYkluZGV4IixhcHBlYXJhbmNlOiJhcHBlYXJhbmNlIixjaGVja2VkOiJjaGVja2VkIixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSJ9LGV4cG9ydEFzOlsibWF0QnV0dG9uVG9nZ2xlIl0sZmVhdHVyZXM6W3R0XSxuZ0NvbnRlbnRTZWxlY3RvcnM6dDVlLGRlY2xzOjYsdmFyczo5LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtYnV0dG9uLXRvZ2dsZS1idXR0b24iLCJtYXQtZm9jdXMtaW5kaWNhdG9yIiwzLCJpZCIsImRpc2FibGVkIiwiY2xpY2siXSxbImJ1dHRvbiIsIiJdLFsxLCJtYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50Il0sWzEsIm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXkiXSxbIm1hdFJpcHBsZSIsIiIsMSwibWF0LWJ1dHRvbi10b2dnbGUtcmlwcGxlIiwzLCJtYXRSaXBwbGVUcmlnZ2VyIiwibWF0UmlwcGxlRGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih4aSgpLF8oMCwiYnV0dG9uIiwwLDEpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLl9vbkJ1dHRvbkNsaWNrKCl9KSxfKDIsInNwYW4iLDIpLFZuKDMpLHYoKSgpLE8oNCwic3BhbiIsMykoNSwic3BhbiIsNCkpLDImZSl7bGV0IHI9JGUoMSk7eSgiaWQiLGkuYnV0dG9uSWQpKCJkaXNhYmxlZCIsaS5kaXNhYmxlZHx8bnVsbCksemUoInRhYmluZGV4IixpLmRpc2FibGVkPy0xOmkudGFiSW5kZXgpKCJhcmlhLXByZXNzZWQiLGkuY2hlY2tlZCkoIm5hbWUiLGkuX2dldEJ1dHRvbk5hbWUoKSkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSxDKDUpLHkoIm1hdFJpcHBsZVRyaWdnZXIiLHIpKCJtYXRSaXBwbGVEaXNhYmxlZCIsaS5kaXNhYmxlUmlwcGxlfHxpLmRpc2FibGVkKX19LGRlcGVuZGVuY2llczpbWW9dLHN0eWxlczpbIi5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLC5tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXB7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC1idXR0b24tdG9nZ2xlLXN0YW5kYWxvbmUubWF0LWJ1dHRvbi10b2dnbGUtYXBwZWFyYW5jZS1zdGFuZGFyZCwubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtib3JkZXItcmFkaXVzOjRweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1zdGFuZGFsb25lLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAtYXBwZWFyYW5jZS1zdGFuZGFyZHtvdXRsaW5lOjB9Lm1hdC1idXR0b24tdG9nZ2xlLXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ubWF0LWJ1dHRvbi10b2dnbGUtdmVydGljYWwgLm1hdC1idXR0b24tdG9nZ2xlLWxhYmVsLWNvbnRlbnR7ZGlzcGxheTpibG9ja30ubWF0LWJ1dHRvbi10b2dnbGV7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYnV0dG9uLXRvZ2dsZSAubWF0LWljb24gc3Zne3ZlcnRpY2FsLWFsaWduOnRvcH0ubWF0LWJ1dHRvbi10b2dnbGUuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eToxfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpOmhvdmVyIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjA0fS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkLmNkay1rZXlib2FyZC1mb2N1c2VkOm5vdCgubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQpIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e29wYWNpdHk6LjEyfUBtZWRpYShob3Zlcjogbm9uZSl7Lm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQ6bm90KC5tYXQtYnV0dG9uLXRvZ2dsZS1kaXNhYmxlZCk6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7ZGlzcGxheTpub25lfX0ubWF0LWJ1dHRvbi10b2dnbGUtbGFiZWwtY29udGVudHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tYXQtYnV0dG9uLXRvZ2dsZS1hcHBlYXJhbmNlLXN0YW5kYXJkIC5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50e3BhZGRpbmc6MCAxMnB4fS5tYXQtYnV0dG9uLXRvZ2dsZS1sYWJlbC1jb250ZW50Pip7dmVydGljYWwtYWxpZ246bWlkZGxlfS5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtwb2ludGVyLWV2ZW50czpub25lO29wYWNpdHk6MH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkIC5tYXQtYnV0dG9uLXRvZ2dsZS1mb2N1cy1vdmVybGF5e2JvcmRlci1ib3R0b206c29saWQgMzZweDtvcGFjaXR5Oi41O2hlaWdodDowfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1idXR0b24tdG9nZ2xlLWNoZWNrZWQ6aG92ZXIgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7b3BhY2l0eTouNn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYnV0dG9uLXRvZ2dsZS1jaGVja2VkLm1hdC1idXR0b24tdG9nZ2xlLWFwcGVhcmFuY2Utc3RhbmRhcmQgLm1hdC1idXR0b24tdG9nZ2xlLWZvY3VzLW92ZXJsYXl7Ym9yZGVyLWJvdHRvbTpzb2xpZCA1MDBweH0ubWF0LWJ1dHRvbi10b2dnbGUgLm1hdC1idXR0b24tdG9nZ2xlLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lfS5tYXQtYnV0dG9uLXRvZ2dsZS1idXR0b257Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lO2NvbG9yOmluaGVyaXQ7cGFkZGluZzowO21hcmdpbjowO2ZvbnQ6aW5oZXJpdDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJTtjdXJzb3I6cG9pbnRlcn0ubWF0LWJ1dHRvbi10b2dnbGUtZGlzYWJsZWQgLm1hdC1idXR0b24tdG9nZ2xlLWJ1dHRvbntjdXJzb3I6ZGVmYXVsdH0ubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGdSPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltsbixfbCxsbl19KSxufSkoKTtmdW5jdGlvbiBzNWUobix0KXtpZigxJm4mJihJbigpLE8oMCwiY2lyY2xlIiw0KSksMiZuKXtsZXQgZT1TKCksaT0kZSgxKTtQdCgiYW5pbWF0aW9uLW5hbWUiLCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1zdHJva2Utcm90YXRlLSIrZS5fc3Bpbm5lckFuaW1hdGlvbkxhYmVsKSgic3Ryb2tlLWRhc2hvZmZzZXQiLGUuX2dldFN0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLWRhc2hhcnJheSIsZS5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2Utd2lkdGgiLGUuX2dldENpcmNsZVN0cm9rZVdpZHRoKCksIiUiKSgidHJhbnNmb3JtLW9yaWdpbiIsZS5fZ2V0Q2lyY2xlVHJhbnNmb3JtT3JpZ2luKGkpKSx6ZSgiciIsZS5fZ2V0Q2lyY2xlUmFkaXVzKCkpfX1mdW5jdGlvbiBhNWUobix0KXtpZigxJm4mJihJbigpLE8oMCwiY2lyY2xlIiw0KSksMiZuKXtsZXQgZT1TKCksaT0kZSgxKTtQdCgic3Ryb2tlLWRhc2hvZmZzZXQiLGUuX2dldFN0cm9rZURhc2hPZmZzZXQoKSwicHgiKSgic3Ryb2tlLWRhc2hhcnJheSIsZS5fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpLCJweCIpKCJzdHJva2Utd2lkdGgiLGUuX2dldENpcmNsZVN0cm9rZVdpZHRoKCksIiUiKSgidHJhbnNmb3JtLW9yaWdpbiIsZS5fZ2V0Q2lyY2xlVHJhbnNmb3JtT3JpZ2luKGkpKSx6ZSgiciIsZS5fZ2V0Q2lyY2xlUmFkaXVzKCkpfX12YXIgYzVlPWtvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19LCJwcmltYXJ5IiksdTVlPW5ldyBwZSgibWF0LXByb2dyZXNzLXNwaW5uZXItZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybntkaWFtZXRlcjoxMDB9fX0pLEJvPWNsYXNzIGV4dGVuZHMgYzVle2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCl7c3VwZXIodCksdGhpcy5fZG9jdW1lbnQ9aSx0aGlzLl9kaWFtZXRlcj0xMDAsdGhpcy5fdmFsdWU9MCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249U24uRU1QVFksdGhpcy5tb2RlPSJkZXRlcm1pbmF0ZSI7bGV0IGM9Qm8uX2RpYW1ldGVyczt0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWw9dGhpcy5fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCksYy5oYXMoaS5oZWFkKXx8Yy5zZXQoaS5oZWFkLG5ldyBTZXQoWzEwMF0pKSx0aGlzLl9ub29wQW5pbWF0aW9ucz0iTm9vcEFuaW1hdGlvbnMiPT09ciYmISFvJiYhby5fZm9yY2VBbmltYXRpb25zLCJtYXQtc3Bpbm5lciI9PT10Lm5hdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHRoaXMubW9kZT0iaW5kZXRlcm1pbmF0ZSIpLG8mJihvLmNvbG9yJiYodGhpcy5jb2xvcj10aGlzLmRlZmF1bHRDb2xvcj1vLmNvbG9yKSxvLmRpYW1ldGVyJiYodGhpcy5kaWFtZXRlcj1vLmRpYW1ldGVyKSxvLnN0cm9rZVdpZHRoJiYodGhpcy5zdHJva2VXaWR0aD1vLnN0cm9rZVdpZHRoKSksZS5pc0Jyb3dzZXImJmUuU0FGQVJJJiZhJiZzJiZsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPWEuY2hhbmdlKDE1MCkuc3Vic2NyaWJlKCgpPT57ImluZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlJiZsLnJ1bigoKT0+cy5tYXJrRm9yQ2hlY2soKSl9KSl9Z2V0IGRpYW1ldGVyKCl7cmV0dXJuIHRoaXMuX2RpYW1ldGVyfXNldCBkaWFtZXRlcih0KXt0aGlzLl9kaWFtZXRlcj1CaSh0KSx0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWw9dGhpcy5fZ2V0U3Bpbm5lckFuaW1hdGlvbkxhYmVsKCksdGhpcy5fc3R5bGVSb290JiZ0aGlzLl9hdHRhY2hTdHlsZU5vZGUoKX1nZXQgc3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlV2lkdGh8fHRoaXMuZGlhbWV0ZXIvMTB9c2V0IHN0cm9rZVdpZHRoKHQpe3RoaXMuX3N0cm9rZVdpZHRoPUJpKHQpfWdldCB2YWx1ZSgpe3JldHVybiJkZXRlcm1pbmF0ZSI9PT10aGlzLm1vZGU/dGhpcy5fdmFsdWU6MH1zZXQgdmFsdWUodCl7dGhpcy5fdmFsdWU9TWF0aC5tYXgoMCxNYXRoLm1pbigxMDAsQmkodCkpKX1uZ09uSW5pdCgpe2xldCB0PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDt0aGlzLl9zdHlsZVJvb3Q9YTIodCl8fHRoaXMuX2RvY3VtZW50LmhlYWQsdGhpcy5fYXR0YWNoU3R5bGVOb2RlKCksdC5jbGFzc0xpc3QuYWRkKCJtYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1pbmRldGVybWluYXRlLWFuaW1hdGlvbiIpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X2dldENpcmNsZVJhZGl1cygpe3JldHVybih0aGlzLmRpYW1ldGVyLTEwKS8yfV9nZXRWaWV3Qm94KCl7bGV0IHQ9Mip0aGlzLl9nZXRDaXJjbGVSYWRpdXMoKSt0aGlzLnN0cm9rZVdpZHRoO3JldHVybmAwIDAgJHt0fSAke3R9YH1fZ2V0U3Ryb2tlQ2lyY3VtZmVyZW5jZSgpe3JldHVybiAyKk1hdGguUEkqdGhpcy5fZ2V0Q2lyY2xlUmFkaXVzKCl9X2dldFN0cm9rZURhc2hPZmZzZXQoKXtyZXR1cm4iZGV0ZXJtaW5hdGUiPT09dGhpcy5tb2RlP3RoaXMuX2dldFN0cm9rZUNpcmN1bWZlcmVuY2UoKSooMTAwLXRoaXMuX3ZhbHVlKS8xMDA6bnVsbH1fZ2V0Q2lyY2xlU3Ryb2tlV2lkdGgoKXtyZXR1cm4gdGhpcy5zdHJva2VXaWR0aC90aGlzLmRpYW1ldGVyKjEwMH1fZ2V0Q2lyY2xlVHJhbnNmb3JtT3JpZ2luKHQpe2xldCBlPTUwKih0LmN1cnJlbnRTY2FsZT8/MSk7cmV0dXJuYCR7ZX0lICR7ZX0lYH1fYXR0YWNoU3R5bGVOb2RlKCl7bGV0IHQ9dGhpcy5fc3R5bGVSb290LGU9dGhpcy5fZGlhbWV0ZXIsaT1Cby5fZGlhbWV0ZXJzLHI9aS5nZXQodCk7aWYoIXJ8fCFyLmhhcyhlKSl7bGV0IG89dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtvLnNldEF0dHJpYnV0ZSgibWF0LXNwaW5uZXItYW5pbWF0aW9uIix0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWwpLG8udGV4dENvbnRlbnQ9dGhpcy5fZ2V0QW5pbWF0aW9uVGV4dCgpLHQuYXBwZW5kQ2hpbGQobykscnx8KHI9bmV3IFNldCxpLnNldCh0LHIpKSxyLmFkZChlKX19X2dldEFuaW1hdGlvblRleHQoKXtsZXQgdD10aGlzLl9nZXRTdHJva2VDaXJjdW1mZXJlbmNlKCk7cmV0dXJuIlxuIEBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItc3Ryb2tlLXJvdGF0ZS1ESUFNRVRFUiB7XG4gICAgMCUgICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDApOyB9XG4gICAgMTIuNSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlKDApOyB9XG4gICAgMTIuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpOyB9XG4gICAgMjUlICAgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKTsgfVxuXG4gICAgMjUuMDAwMSUgICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBTVEFSVF9WQUxVRTsgIHRyYW5zZm9ybTogcm90YXRlKDI3MGRlZyk7IH1cbiAgICAzNy41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoMjcwZGVnKTsgfVxuICAgIDM3LjUwMDElICB7IHN0cm9rZS1kYXNob2Zmc2V0OiBFTkRfVkFMVUU7ICAgIHRyYW5zZm9ybTogcm90YXRlWCgxODBkZWcpIHJvdGF0ZSgxNjEuNWRlZyk7IH1cbiAgICA1MCUgICAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDE2MS41ZGVnKTsgfVxuXG4gICAgNTAuMDAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IFNUQVJUX1ZBTFVFOyAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTsgfVxuICAgIDYyLjUlICAgeyBzdHJva2UtZGFzaG9mZnNldDogRU5EX1ZBTFVFOyAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG4gICAgNjIuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDI1MS41ZGVnKTsgfVxuICAgIDc1JSAgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpOyB9XG5cbiAgICA3NS4wMDAxJSAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7IH1cbiAgICA4Ny41JSAgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOyB9XG4gICAgODcuNTAwMSUgIHsgc3Ryb2tlLWRhc2hvZmZzZXQ6IEVORF9WQUxVRTsgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKTsgfVxuICAgIDEwMCUgICAgeyBzdHJva2UtZGFzaG9mZnNldDogU1RBUlRfVkFMVUU7ICB0cmFuc2Zvcm06IHJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMzQxLjVkZWcpOyB9XG4gIH1cbiIucmVwbGFjZSgvU1RBUlRfVkFMVUUvZywiIisuOTUqdCkucmVwbGFjZSgvRU5EX1ZBTFVFL2csIiIrLjIqdCkucmVwbGFjZSgvRElBTUVURVIvZyxgJHt0aGlzLl9zcGlubmVyQW5pbWF0aW9uTGFiZWx9YCl9X2dldFNwaW5uZXJBbmltYXRpb25MYWJlbCgpe3JldHVybiB0aGlzLmRpYW1ldGVyLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIl8iKX19O0JvLl9kaWFtZXRlcnM9bmV3IFdlYWtNYXAsQm8uXHUwMjc1ZmFjPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcodHx8Qm8pKE0oUmUpLE0ob2kpLE0oSHQsOCksTShQaSw4KSxNKHU1ZSksTShubiksTShWYSksTShfdCkpfSxCby5cdTAyNzVjbXA9Uih7dHlwZTpCbyxzZWxlY3RvcnM6W1sibWF0LXByb2dyZXNzLXNwaW5uZXIiXSxbIm1hdC1zcGlubmVyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJwcm9ncmVzc2JhciIsInRhYmluZGV4IiwiLTEiLDEsIm1hdC1wcm9ncmVzcy1zcGlubmVyIiwibWF0LXNwaW5uZXIiXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24odCxlKXsyJnQmJih6ZSgiYXJpYS12YWx1ZW1pbiIsImRldGVybWluYXRlIj09PWUubW9kZT8wOm51bGwpKCJhcmlhLXZhbHVlbWF4IiwiZGV0ZXJtaW5hdGUiPT09ZS5tb2RlPzEwMDpudWxsKSgiYXJpYS12YWx1ZW5vdyIsImRldGVybWluYXRlIj09PWUubW9kZT9lLnZhbHVlOm51bGwpKCJtb2RlIixlLm1vZGUpLFB0KCJ3aWR0aCIsZS5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixlLmRpYW1ldGVyLCJweCIpLGV0KCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsZS5fbm9vcEFuaW1hdGlvbnMpKX0saW5wdXRzOntjb2xvcjoiY29sb3IiLGRpYW1ldGVyOiJkaWFtZXRlciIsc3Ryb2tlV2lkdGg6InN0cm9rZVdpZHRoIixtb2RlOiJtb2RlIix2YWx1ZToidmFsdWUifSxleHBvcnRBczpbIm1hdFByb2dyZXNzU3Bpbm5lciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6NCx2YXJzOjgsY29uc3RzOltbInByZXNlcnZlQXNwZWN0UmF0aW8iLCJ4TWlkWU1pZCBtZWV0IiwiZm9jdXNhYmxlIiwiZmFsc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiLDMsIm5nU3dpdGNoIl0sWyJzdmciLCIiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiLDMsImFuaW1hdGlvbi1uYW1lIiwic3Ryb2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ryb2tlLXdpZHRoIiwidHJhbnNmb3JtLW9yaWdpbiIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjeCIsIjUwJSIsImN5IiwiNTAlIiwzLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2Utd2lkdGgiLCJ0cmFuc2Zvcm0tb3JpZ2luIiw0LCJuZ1N3aXRjaENhc2UiXSxbImN4IiwiNTAlIiwiY3kiLCI1MCUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24odCxlKXsxJnQmJihJbigpLF8oMCwic3ZnIiwwLDEpLEUoMixzNWUsMSwxMSwiY2lyY2xlIiwyKSxFKDMsYTVlLDEsOSwiY2lyY2xlIiwzKSx2KCkpLDImdCYmKFB0KCJ3aWR0aCIsZS5kaWFtZXRlciwicHgiKSgiaGVpZ2h0IixlLmRpYW1ldGVyLCJweCIpLHkoIm5nU3dpdGNoIiwiaW5kZXRlcm1pbmF0ZSI9PT1lLm1vZGUpLHplKCJ2aWV3Qm94IixlLl9nZXRWaWV3Qm94KCkpLEMoMikseSgibmdTd2l0Y2hDYXNlIiwhMCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLCExKSl9LGRlcGVuZGVuY2llczpbQ3IsVXJdLHN0eWxlczpbIi5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcntkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0ubWF0LXByb2dyZXNzLXNwaW5uZXIgc3Zne3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0b3A6MDtsZWZ0OjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7b3ZlcmZsb3c6dmlzaWJsZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIgY2lyY2xle2ZpbGw6cmdiYSgwLDAsMCwwKTt0cmFuc2l0aW9uOnN0cm9rZS1kYXNob2Zmc2V0IDIyNW1zIGxpbmVhcn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjaXJjbGV7c3Ryb2tlOkNhbnZhc1RleHR9Lm1hdC1wcm9ncmVzcy1zcGlubmVyW21vZGU9aW5kZXRlcm1pbmF0ZV0gc3Zne2FuaW1hdGlvbjptYXQtcHJvZ3Jlc3Mtc3Bpbm5lci1saW5lYXItcm90YXRlIDIwMDBtcyBsaW5lYXIgaW5maW5pdGV9Lm1hdC1wcm9ncmVzcy1zcGlubmVyW21vZGU9aW5kZXRlcm1pbmF0ZV0gY2lyY2xle3RyYW5zaXRpb24tcHJvcGVydHk6c3Ryb2tlO2FuaW1hdGlvbi1kdXJhdGlvbjo0MDAwbXM7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMC4zNSwgMCwgMC4yNSwgMSk7YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZX0ubWF0LXByb2dyZXNzLXNwaW5uZXIuX21hdC1hbmltYXRpb24tbm9vcGFibGUgc3ZnLC5tYXQtcHJvZ3Jlc3Mtc3Bpbm5lci5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSBjaXJjbGV7YW5pbWF0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfUBrZXlmcmFtZXMgbWF0LXByb2dyZXNzLXNwaW5uZXItbGluZWFyLXJvdGF0ZXswJXt0cmFuc2Zvcm06cm90YXRlKDBkZWcpfTEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIG1hdC1wcm9ncmVzcy1zcGlubmVyLXN0cm9rZS1yb3RhdGUtMTAwezAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDApfTEyLjUle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlKDApfTEyLjUwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjU2LjU0ODY2NzdweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSg3Mi41ZGVnKX0yNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6MjY4LjYwNjE3MTU3NXB4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDcyLjVkZWcpfTI1LjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9MzcuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX0zNy41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpfTUwJXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMTYxLjVkZWcpfTUwLjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9NjIuNSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX02Mi41MDAxJXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpfTc1JXtzdHJva2UtZGFzaG9mZnNldDoyNjguNjA2MTcxNTc1cHg7dHJhbnNmb3JtOnJvdGF0ZVgoMTgwZGVnKSByb3RhdGUoMjUxLjVkZWcpfTc1LjAwMDEle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX04Ny41JXtzdHJva2UtZGFzaG9mZnNldDo1Ni41NDg2Njc3cHg7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9ODcuNTAwMSV7c3Ryb2tlLWRhc2hvZmZzZXQ6NTYuNTQ4NjY3N3B4O3RyYW5zZm9ybTpyb3RhdGVYKDE4MGRlZykgcm90YXRlKDM0MS41ZGVnKX0xMDAle3N0cm9rZS1kYXNob2Zmc2V0OjI2OC42MDYxNzE1NzVweDt0cmFuc2Zvcm06cm90YXRlWCgxODBkZWcpIHJvdGF0ZSgzNDEuNWRlZyl9fSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pO3ZhciBfZD0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbbG4sTWUsbG5dfSksbn0pKCk7ZnVuY3Rpb24gaDVlKG4sdCl7aWYoMSZuJiYoXygwLCJiIiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpLiRpbXBsaWNpdDtDKDEpLGplKCIiLGUuZGlzcGxheUFsaWFzLCI6Iil9fWZ1bmN0aW9uIGY1ZShuLHQpe2lmKDEmbiYmKF8oMCwibWF0LW9wdGlvbiIsMikoMSwic3BhbiIsMyksRSgyLGg1ZSwyLDEsImIiLDQpLEEoMyksdigpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7eSgidmFsdWUiLGUudmFsdWUpKCJkaXNhYmxlZCIsZS5kaXNhYmxlZCksQygxKSxFVCgidGl0bGUiLCIiLGUuZGlzcGxheUFsaWFzLCI6ICIsZS5kaXNwbGF5VGV4dCwiIiksQygxKSx5KCJuZ0lmIixlLmRpc3BsYXlBbGlhcyksQygxKSxqZSgiICIsZS5kaXNwbGF5VGV4dCwiICIpfX12YXIgTG9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnZhbHVlPSIiLHRoaXMub3B0aW9ucz1bXSx0aGlzLnNlbGVjdGlvbkNoYW5nZT1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZHJvcGRvd24iXV0saW5wdXRzOnt2YWx1ZToidmFsdWUiLG9wdGlvbnM6Im9wdGlvbnMifSxvdXRwdXRzOntzZWxlY3Rpb25DaGFuZ2U6InNlbGVjdGlvbkNoYW5nZSJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWzMsInZhbHVlIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiwiZGlzYWJsZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIl0sWzEsIm9wdGlvbi1jb250ZW50IiwzLCJ0aXRsZSJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtYXQtc2VsZWN0IiwwKSxQKCJzZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG8udmFsdWUpfSksRSgxLGY1ZSw0LDYsIm1hdC1vcHRpb24iLDEpLHYoKSksMiZlJiYoeSgidmFsdWUiLGkudmFsdWUpLEMoMSkseSgibmdGb3JPZiIsaS5vcHRpb25zKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsSGgsT3NdLHN0eWxlczpbIm1hdC1zZWxlY3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzhlOThhMztib3JkZXItcmFkaXVzOjNweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo2cHh9bWF0LXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvfSAgLm1hdC1zZWxlY3QtcGFuZWx7bWF4LXdpZHRoOjcwdnd9ICBtYXQtb3B0aW9uLm1hdC1vcHRpb257aGVpZ2h0OmF1dG99ICAubWF0LW9wdGlvbi10ZXh0e3doaXRlLXNwYWNlOm5vcm1hbDt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ub3B0aW9uLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0iXX0pLG59KSgpO2Z1bmN0aW9uIGc1ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMzIpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygyKS5yYW5nZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpKX0pLEEoMiwiRW5hYmxlIFJhbmdlIFNlbGVjdGlvbiAiKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMik7QygxKSx5KCJjaGVja2VkIixlLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkKSgiZGlzYWJsZWQiLCFlLmlzQXhpc1R5cGVTdGVwKCkpfX1mdW5jdGlvbiBfNWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDMzKSgxLCJtYXQtY2hlY2tib3giLDI3KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoMikubGlua2VkVGltZVRvZ2dsZWQuZW1pdCgpKX0pLEEoMiksdigpKCl9aWYoMiZuKXtsZXQgZT1TKDIpO0MoMSkseSgiY2hlY2tlZCIsZS5pc0xpbmtlZFRpbWVFbmFibGVkKSgiZGlzYWJsZWQiLCFlLmlzQXhpc1R5cGVTdGVwKCkpLEMoMSksamUoIkxpbmsgYnkgc3RlcCAiLGUuZ2V0TGlua2VkVGltZVNlbGVjdGlvblN0YXJ0U3RlcCgpLCIgIil9fWZ1bmN0aW9uIHY1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMzcpfWZ1bmN0aW9uIHk1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMzgpfWZ1bmN0aW9uIGI1ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMzQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLm9uU2xpZGVPdXRUb2dnbGVkLmVtaXQoKSl9KSxFKDEsdjVlLDEsMCwibWF0LWljb24iLDM1KSxFKDIseTVlLDEsMCwibWF0LWljb24iLDM2KSxBKDMsIiBPcGVuIENvbHVtbiBFZGl0IENvbnRyb2wgIiksdigpfWlmKDImbil7bGV0IGU9UygyKTtDKDEpLHkoIm5nSWYiLCFlLmlzU2xpZGVPdXRNZW51T3BlbiksQygxKSx5KCJuZ0lmIixlLmlzU2xpZGVPdXRNZW51T3Blbil9fWZ1bmN0aW9uIHg1ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMjYpKDEsIm1hdC1jaGVja2JveCIsMjcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLnN0ZXBTZWxlY3RvclRvZ2dsZWQuZW1pdCgpKX0pLEEoMiwiRW5hYmxlIHN0ZXAgc2VsZWN0aW9uIGFuZCBkYXRhIHRhYmxlICIpLHYoKSxfKDMsInNwYW4iLDI4KSxBKDQsIihTY2FsYXJzIG9ubHkpIiksdigpLEUoNSxnNWUsMywyLCJkaXYiLDI5KSxFKDYsXzVlLDMsMywiZGl2IiwzMCksRSg3LGI1ZSw0LDIsImRpdiIsMzEpLHYoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJ0aXRsZSIsZS5pc0F4aXNUeXBlU3RlcCgpPyIiOiJPbmx5IGF2YWlsYWJsZSB3aGVuIEhvcml6b250YWwgQXhpcyBpcyBzZXQgdG8gc3RlcCIpLEMoMSkseSgiY2hlY2tlZCIsZS5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQpKCJkaXNhYmxlZCIsIWUuaXNBeGlzVHlwZVN0ZXAoKSksQyg0KSx5KCJuZ0lmIixlLmlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkKSxDKDEpLHkoIm5nSWYiLGUuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQpLEMoMSkseSgibmdJZiIsZS5pc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkKX19ZnVuY3Rpb24gQzVlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic2VjdGlvbiIsMzkpKDEsImgzIiwxKSxBKDIsIkltYWdlcyIpLHYoKSxfKDMsImRpdiIsNDApKDQsImRpdiIsNDEpLEEoNSwiQnJpZ2h0bmVzcyIpLHYoKSxfKDYsImRpdiIsOCkoNywibWF0LXNsaWRlciIsNDIpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkLmVtaXQoci52YWx1ZSkpfSksdigpLF8oOCwiYnV0dG9uIiw0MyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5pbWFnZUJyaWdodG5lc3NSZXNldC5lbWl0KCkpfSksTyg5LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCksXygxMCwiZGl2Iiw0NCkoMTEsImRpdiIsNDUpLEEoMTIsIkNvbnRyYXN0IiksdigpLF8oMTMsImRpdiIsOCkoMTQsIm1hdC1zbGlkZXIiLDQ2KSxQKCJpbnB1dCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQuZW1pdChyLnZhbHVlKSl9KSx2KCksXygxNSwiYnV0dG9uIiw0NyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5pbWFnZUNvbnRyYXN0UmVzZXQuZW1pdCgpKX0pLE8oMTYsIm1hdC1pY29uIiwxMSksdigpKCkoKSxfKDE3LCJkaXYiLDQ4KSgxOCwibWF0LWNoZWNrYm94IiwyMCksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLmltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkLmVtaXQoci5jaGVja2VkKSl9KSxBKDE5LCJTaG93IGFjdHVhbCBpbWFnZSBzaXplIiksdigpKCkoKX1pZigyJm4pe2xldCBlPVMoKTtDKDcpLHkoIm1heCIsMmUzKSgibWluIiwwKSgic3RlcCIsMTApKCJ2YWx1ZSIsZS5pbWFnZUJyaWdodG5lc3NJbk1pbGxpKSgidGh1bWJMYWJlbCIsITApKCJkaXNwbGF5V2l0aCIsZS5mb3JtYXRNaWxsaVRvWmVyb3RoKSxDKDcpLHkoIm1heCIsNWUzKSgibWluIiwwKSgic3RlcCIsMTApKCJ2YWx1ZSIsZS5pbWFnZUNvbnRyYXN0SW5NaWxsaSkoInRodW1iTGFiZWwiLCEwKSgiZGlzcGxheVdpdGgiLGUuZm9ybWF0TWlsbGlUb1plcm90aCksQyg0KSx5KCJjaGVja2VkIixlLmltYWdlU2hvd0FjdHVhbFNpemUpfX12YXIgVm9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5sb2NhbGU9ZSx0aGlzLmxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5zdGVwU2VsZWN0b3JUb2dnbGVkPW5ldyBHLHRoaXMucmFuZ2VTZWxlY3Rpb25Ub2dnbGVkPW5ldyBHLHRoaXMub25TbGlkZU91dFRvZ2dsZWQ9bmV3IEcsdGhpcy5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOk9vLkFMUEhBQkVUSUNBTCxkaXNwbGF5VGV4dDoiQWxwaGFiZXRpY2FsIn0se3ZhbHVlOk9vLkFTQ0VORElORyxkaXNwbGF5VGV4dDoiQXNjZW5kaW5nIn0se3ZhbHVlOk9vLkRFU0NFTkRJTkcsZGlzcGxheVRleHQ6IkRlc2NlbmRpbmcifSx7dmFsdWU6T28uTkVBUkVTVCxkaXNwbGF5VGV4dDoiTmVhcmVzdCBQaXhlbCJ9LHt2YWx1ZTpPby5ORUFSRVNUX1ksZGlzcGxheVRleHQ6Ik5lYXJlc3QgWSJ9XSx0aGlzLnRvb2x0aXBTb3J0Q2hhbmdlZD1uZXcgRyx0aGlzLmlnbm9yZU91dGxpZXJzQ2hhbmdlZD1uZXcgRyx0aGlzLlhBeGlzVHlwZT1KaSx0aGlzLlhBeGlzVHlwZURyb3Bkb3duT3B0aW9ucz1be3ZhbHVlOkppLlNURVAsZGlzcGxheVRleHQ6IlN0ZXAifSx7dmFsdWU6SmkuUkVMQVRJVkUsZGlzcGxheVRleHQ6IlJlbGF0aXZlIn0se3ZhbHVlOkppLldBTExfVElNRSxkaXNwbGF5VGV4dDoiV2FsbCJ9XSx0aGlzLnhBeGlzVHlwZUNoYW5nZWQ9bmV3IEcsdGhpcy5NQVhfQ0FSRF9XSURUSF9TTElERVJfVkFMVUU9NzM1LHRoaXMuTUlOX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFPTMzNSx0aGlzLmNhcmRXaWR0aFNsaWRlckNoYW5nZWQkPW5ldyBHLHRoaXMuY2FyZFdpZHRoQ2hhbmdlZD10aGlzLmNhcmRXaWR0aFNsaWRlckNoYW5nZWQkLnBpcGUoYnUoMjUwKSksdGhpcy5jYXJkV2lkdGhSZXNldD1uZXcgRyx0aGlzLkhpc3RvZ3JhbU1vZGVEcm9wZG93bk9wdGlvbnM9W3t2YWx1ZTp6ci5PRkZTRVQsZGlzcGxheVRleHQ6Ik9mZnNldCJ9LHt2YWx1ZTp6ci5PVkVSTEFZLGRpc3BsYXlUZXh0OiJPdmVybGF5In1dLHRoaXMuaGlzdG9ncmFtTW9kZUNoYW5nZWQ9bmV3IEcsdGhpcy5NQVhfU01PT1RISU5HX1ZBTFVFPS45OTksdGhpcy5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRT0uOTksdGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQ9bmV3IEcsdGhpcy5zY2FsYXJTbW9vdGhpbmdDaGFuZ2VkPXRoaXMuc2NhbGFyU21vb3RoaW5nQ29udHJvbENoYW5nZWQkLnBpcGUoYnUoMjUwKSksdGhpcy5zY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZD1uZXcgRyx0aGlzLmltYWdlQnJpZ2h0bmVzc1NsaWRlckNoYW5nZWQkPW5ldyBHLHRoaXMuaW1hZ2VCcmlnaHRuZXNzSW5NaWxsaUNoYW5nZWQ9dGhpcy5pbWFnZUJyaWdodG5lc3NTbGlkZXJDaGFuZ2VkJC5waXBlKGJ1KDI1MCkpLHRoaXMuaW1hZ2VCcmlnaHRuZXNzUmVzZXQ9bmV3IEcsdGhpcy5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQ9bmV3IEcsdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQ9dGhpcy5pbWFnZUNvbnRyYXN0U2xpZGVyQ2hhbmdlZCQucGlwZShidSgyNTApKSx0aGlzLmltYWdlQ29udHJhc3RSZXNldD1uZXcgRyx0aGlzLmltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkPW5ldyBHfW9uU2NhbGFyU21vb3RoaW5nSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQ7aWYoIWkudmFsdWUpcmV0dXJuO2xldCByPU1hdGgubWluKE1hdGgubWF4KDAscGFyc2VGbG9hdChpLnZhbHVlKSksLjk5OSk7ciE9PXBhcnNlRmxvYXQoaS52YWx1ZSkmJihpLnZhbHVlPVN0cmluZyhyKSksdGhpcy5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChyKX1mb3JtYXRNaWxsaVRvWmVyb3RoKGUpe3JldHVybiB1NShlLzFlMyx0aGlzLmxvY2FsZXx8ImVuLVVTIiwiMS4wLTIiKX1nZXRMaW5rZWRUaW1lU2VsZWN0aW9uU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMuaXNMaW5rZWRUaW1lRW5hYmxlZHx8bnVsbD09PXRoaXMubGlua2VkVGltZVNlbGVjdGlvbnx8bnVsbCE9PXRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmQ/IiI6dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXB9aXNBeGlzVHlwZVN0ZXAoKXtyZXR1cm4gdGhpcy54QXhpc1R5cGU9PT1KaS5TVEVQfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFdkKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MtY29tcG9uZW50Il1dLGlucHV0czp7aXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQ6ImlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkIixpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZDoiaXNSYW5nZVNlbGVjdGlvbkFsbG93ZWQiLGlzTGlua2VkVGltZUVuYWJsZWQ6ImlzTGlua2VkVGltZUVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQ6ImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLGlzU2NhbGFyU3RlcFNlbGVjdG9yRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIixpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZDoiaXNTY2FsYXJTdGVwU2VsZWN0b3JSYW5nZUVuYWJsZWQiLGlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGxpbmtlZFRpbWVTZWxlY3Rpb246ImxpbmtlZFRpbWVTZWxlY3Rpb24iLHN0ZXBNaW5NYXg6InN0ZXBNaW5NYXgiLGlzU2xpZGVPdXRNZW51T3BlbjoiaXNTbGlkZU91dE1lbnVPcGVuIixpc0ltYWdlU3VwcG9ydEVuYWJsZWQ6ImlzSW1hZ2VTdXBwb3J0RW5hYmxlZCIsdG9vbHRpcFNvcnQ6InRvb2x0aXBTb3J0IixpZ25vcmVPdXRsaWVyczoiaWdub3JlT3V0bGllcnMiLHhBeGlzVHlwZToieEF4aXNUeXBlIixjYXJkTWluV2lkdGg6ImNhcmRNaW5XaWR0aCIsaGlzdG9ncmFtTW9kZToiaGlzdG9ncmFtTW9kZSIsc2NhbGFyU21vb3RoaW5nOiJzY2FsYXJTbW9vdGhpbmciLHNjYWxhclBhcnRpdGlvblg6InNjYWxhclBhcnRpdGlvblgiLGltYWdlQnJpZ2h0bmVzc0luTWlsbGk6ImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLGltYWdlQ29udHJhc3RJbk1pbGxpOiJpbWFnZUNvbnRyYXN0SW5NaWxsaSIsaW1hZ2VTaG93QWN0dWFsU2l6ZToiaW1hZ2VTaG93QWN0dWFsU2l6ZSJ9LG91dHB1dHM6e2xpbmtlZFRpbWVUb2dnbGVkOiJsaW5rZWRUaW1lVG9nZ2xlZCIsbGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ6ImxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixzdGVwU2VsZWN0b3JUb2dnbGVkOiJzdGVwU2VsZWN0b3JUb2dnbGVkIixyYW5nZVNlbGVjdGlvblRvZ2dsZWQ6InJhbmdlU2VsZWN0aW9uVG9nZ2xlZCIsb25TbGlkZU91dFRvZ2dsZWQ6Im9uU2xpZGVPdXRUb2dnbGVkIix0b29sdGlwU29ydENoYW5nZWQ6InRvb2x0aXBTb3J0Q2hhbmdlZCIsaWdub3JlT3V0bGllcnNDaGFuZ2VkOiJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLHhBeGlzVHlwZUNoYW5nZWQ6InhBeGlzVHlwZUNoYW5nZWQiLGNhcmRXaWR0aENoYW5nZWQ6ImNhcmRXaWR0aENoYW5nZWQiLGNhcmRXaWR0aFJlc2V0OiJjYXJkV2lkdGhSZXNldCIsaGlzdG9ncmFtTW9kZUNoYW5nZWQ6Imhpc3RvZ3JhbU1vZGVDaGFuZ2VkIixzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkOiJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIixzY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZDoic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLGltYWdlQnJpZ2h0bmVzc0luTWlsbGlDaGFuZ2VkOiJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsaW1hZ2VCcmlnaHRuZXNzUmVzZXQ6ImltYWdlQnJpZ2h0bmVzc1Jlc2V0IixpbWFnZUNvbnRyYXN0SW5NaWxsaUNoYW5nZWQ6ImltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZCIsaW1hZ2VDb250cmFzdFJlc2V0OiJpbWFnZUNvbnRyYXN0UmVzZXQiLGltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkOiJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCJ9LGRlY2xzOjQzLHZhcnM6MjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxpO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcmVzZXQgdGhlIGNhcmQgd2lkdGggc2V0dGluZ+KQn2NjZGM5NmIwMDNmYmJhOTBkYjdhNjk1OWI1YjI2ZTNjYzU4ZjdkODDikJ81MjIzMTExMDQ3OTY4MTAyNDY2OlJlc2V0IGNhcmQgd2lkdGhgLGU9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byByZXNldCB0aGUgaW1hZ2UgYnJpZ2h0bmVzcyBzZXR0aW5n4pCfYzQ4MmIzYTQ3ZWEwOTc1ZmE4YmUwMWFmYjNmYmVjOWI3NjYyOGJkN+KQnzExODkxNjE4NTcyNDAzNzgzOTU6UmVzZXQgYnJpZ2h0bmVzc2AsaT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHJlc2V0IHRoZSBpbWFnZSBjb250cmFzdCBzZXR0aW5n4pCfZWQ3MTJhOGI5MjcwNDFiZTE1MjUyYjI5ZWI1MjFlYmIxMzc0YmFkOOKQnzUzNzA3MDMzNDI5MjM2MTE5NTU6UmVzZXQgY29udHJhc3RgLFtbMSwiZ2VuZXJhbCJdLFsxLCJzZWN0aW9uLXRpdGxlIl0sWzEsImNvbnRyb2wtcm93IiwieC1heGlzLXR5cGUiXSxbImlkIiwieC1heGlzLXR5cGUtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFszLCJ2YWx1ZSIsIm9wdGlvbnMiLCJzZWxlY3Rpb25DaGFuZ2UiXSxbImNsYXNzIiwiY29udHJvbC1yb3cgc2NhbGFycy1zdGVwLXNlbGVjdG9yIiwzLCJ0aXRsZSIsNCwibmdJZiJdLFsxLCJjb250cm9sLXJvdyIsImNhcmQtd2lkdGgiXSxbImlkIiwiY2FyZC13aWR0aC1sYWJlbCIsMSwiY29udHJvbC1uYW1lIl0sWzEsInNsaWRlci1yb3ciXSxbImFyaWEtbGFiZWxsZWRieSIsImNhcmQtd2lkdGgtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwidGl0bGUiLCJSZXNldCBjYXJkIHdpZHRoIiwxLCJyZXNldC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwic2V0dGluZ3NfYmFja3VwX3Jlc3RvcmVfMjRweCJdLFsxLCJzY2FsYXJzIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1zbW9vdGhpbmciXSxbImlkIiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJpbnB1dCJdLFsiYXJpYS1sYWJlbGxlZGJ5Iiwic2NhbGFycy1zbW9vdGhpbmctbGFiZWwiLCJ0eXBlIiwibnVtYmVyIiwibWluIiwiMCIsInN0ZXAiLCIwLjAwMSIsMSwic2xpZGVyLWlucHV0IiwzLCJtYXgiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRyb2wtcm93IiwidG9vbHRpcC1zb3J0Il0sWzEsImNvbnRyb2wtbmFtZSJdLFsxLCJjb250cm9sLXJvdyIsInNjYWxhcnMtaWdub3JlLW91dGxpZXJzIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbMSwiY29udHJvbC1yb3ciLCJzY2FsYXJzLXBhcnRpdGlvbi14Il0sWyJzdmdJY29uIiwiaGVscF9vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIk5vbi1tb25vdG9uaWMgc3RlcHMgY2FuIG9jY3VyIHdoZW4gcmV1c2luZyBhIGxvZ2RpciB3aXRoIG11bHRpcGxlIHN1bW1hcnkgd3JpdGVycyBhbmQgb3ZlcmxhcHBpbmcgc3RlcHMuIExpbmUgY2hhcnRzLCB3aXRob3V0IHRoaXMgb3B0aW9uIGVuYWJsZWQsIGNhbiBhcHBlYXIgemlnIHphZ2dlZC4gVGhpcyBpcyBjb21tb24gd2hlbiByZXN0YXJ0aW5nIGZyb20gYSBjaGVja3BvaW50LlxuXG5XaGVuIGVuYWJsZWQsIGEgbm9uLW1vbm90b25pYyB0aW1lIHNlcmllcyBjb21wb3NlZCBvZiBOIG1vbm90b25pYyBwaWVjZXMgd2lsbCBiZSBzaG93biBhcyBOIG1vbm90b25pYyBsaW5lcy4iLDEsImluZm8iXSxbMSwiSGlzdG9ncmFtcyJdLFsxLCJjb250cm9sLXJvdyIsImhpc3RvZ3JhbS1tb2RlIl0sWyJjbGFzcyIsImltYWdlIiw0LCJuZ0lmIl0sWzEsImNvbnRyb2wtcm93Iiwic2NhbGFycy1zdGVwLXNlbGVjdG9yIiwzLCJ0aXRsZSJdLFszLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJjaGFuZ2UiXSxbMSwiaW5kZW50Il0sWyJjbGFzcyIsImluZGVudCByYW5nZS1zZWxlY3Rpb24iLDQsIm5nSWYiXSxbImNsYXNzIiwiY29udHJvbC1yb3cgbGlua2VkLXRpbWUgaW5kZW50Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbHVtbi1lZGl0LW1lbnUtdG9nZ2xlIiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbmRlbnQiLCJyYW5nZS1zZWxlY3Rpb24iXSxbMSwiY29udHJvbC1yb3ciLCJsaW5rZWQtdGltZSIsImluZGVudCJdLFsxLCJjb2x1bW4tZWRpdC1tZW51LXRvZ2dsZSIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX2xlZnRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImNoZXZyb25fcmlnaHRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImNoZXZyb25fbGVmdF8yNHB4Il0sWyJzdmdJY29uIiwiY2hldnJvbl9yaWdodF8yNHB4Il0sWzEsImltYWdlIl0sWzEsImNvbnRyb2wtcm93IiwiaW1hZ2UtYnJpZ2h0bmVzcyJdLFsiaWQiLCJpbWFnZS1icmlnaHRuZXNzLWxhYmVsIiwxLCJjb250cm9sLW5hbWUiXSxbImFyaWEtbGFiZWxsZWRieSIsImltYWdlLWJyaWdodG5lc3MtbGFiZWwiLCJjb2xvciIsInByaW1hcnkiLDMsIm1heCIsIm1pbiIsInN0ZXAiLCJ2YWx1ZSIsInRodW1iTGFiZWwiLCJkaXNwbGF5V2l0aCIsImlucHV0Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIlJlc2V0IGJyaWdodG5lc3MiLDEsInJlc2V0LWJ1dHRvbiIsMywiY2xpY2siXSxbMSwiY29udHJvbC1yb3ciLCJpbWFnZS1jb250cmFzdCJdLFsiaWQiLCJpbWFnZS1jb25zdHJhc3QtbGFiZWwiLDEsImNvbnRyb2wtbmFtZSJdLFsiYXJpYS1sYWJlbGxlZGJ5IiwiaW1hZ2UtY29uc3RyYXN0LWxhYmVsIiwiY29sb3IiLCJwcmltYXJ5IiwzLCJtYXgiLCJtaW4iLCJzdGVwIiwidmFsdWUiLCJ0aHVtYkxhYmVsIiwiZGlzcGxheVdpdGgiLCJpbnB1dCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZXNldCBjb250cmFzdCIsMSwicmVzZXQtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJjb250cm9sLXJvdyIsImltYWdlLXNob3ctYWN0dWFsLXNpemUiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJzZWN0aW9uIiwwKSgxLCJoMyIsMSksQSgyLCJHZW5lcmFsIiksdigpLF8oMywiZGl2IiwyKSg0LCJkaXYiLDMpLEEoNSwiSG9yaXpvbnRhbCBBeGlzIiksdigpLF8oNiwidGItZHJvcGRvd24iLDQpLFAoInNlbGVjdGlvbkNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkueEF4aXNUeXBlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCksRSg3LHg1ZSw4LDYsImRpdiIsNSksXyg4LCJkaXYiLDYpKDksImRpdiIsNyksQSgxMCwiQ2FyZCBXaWR0aCIpLHYoKSxfKDExLCJkaXYiLDgpKDEyLCJtYXQtc2xpZGVyIiw5KSxQKCJpbnB1dCIsZnVuY3Rpb24obyl7cmV0dXJuIGkuY2FyZFdpZHRoU2xpZGVyQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxfKDEzLCJidXR0b24iLDEwKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5jYXJkV2lkdGhSZXNldC5lbWl0KCl9KSxPKDE0LCJtYXQtaWNvbiIsMTEpLHYoKSgpKCkoKSxfKDE1LCJzZWN0aW9uIiwxMikoMTYsImgzIiwxKSxBKDE3LCJTY2FsYXJzIiksdigpLF8oMTgsImRpdiIsMTMpKDE5LCJkaXYiLDE0KSxBKDIwLCJTbW9vdGhpbmciKSx2KCksXygyMSwiZGl2Iiw4KSgyMiwibWF0LXNsaWRlciIsMTUpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zY2FsYXJTbW9vdGhpbmdDb250cm9sQ2hhbmdlZCQuZW1pdChvLnZhbHVlKX0pLHYoKSxfKDIzLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclNtb290aGluZ0lucHV0KG8pfSksdigpKCkoKSxfKDI0LCJkaXYiLDE3KSgyNSwiZGl2IiwxOCksQSgyNiwiVG9vbHRpcCBzb3J0aW5nIG1ldGhvZCIpLHYoKSxfKDI3LCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS50b29sdGlwU29ydENoYW5nZWQuZW1pdChvKX0pLHYoKSgpLF8oMjgsImRpdiIsMTkpKDI5LCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlnbm9yZU91dGxpZXJzQ2hhbmdlZC5lbWl0KG8uY2hlY2tlZCl9KSxBKDMwLCJJZ25vcmUgb3V0bGllcnMgaW4gY2hhcnQgc2NhbGluZyIpLHYoKSgpLF8oMzEsImRpdiIsMjEpKDMyLCJtYXQtY2hlY2tib3giLDIwKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQuZW1pdCgpfSksQSgzMywiUGFydGl0aW9uIG5vbi1tb25vdG9uaWMgWCBheGlzIiksdigpLE8oMzQsIm1hdC1pY29uIiwyMiksdigpKCksXygzNSwic2VjdGlvbiIsMjMpKDM2LCJoMyIsMSksQSgzNywiSGlzdG9ncmFtcyIpLHYoKSxfKDM4LCJkaXYiLDI0KSgzOSwiZGl2IiwxOCksQSg0MCwiTW9kZSIpLHYoKSxfKDQxLCJ0Yi1kcm9wZG93biIsNCksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaXN0b2dyYW1Nb2RlQ2hhbmdlZC5lbWl0KG8pfSksdigpKCkoKSxFKDQyLEM1ZSwyMCwxMywic2VjdGlvbiIsMjUpKSwyJmUmJihDKDYpLHkoInZhbHVlIixpLnhBeGlzVHlwZSkoIm9wdGlvbnMiLGkuWEF4aXNUeXBlRHJvcGRvd25PcHRpb25zKSxDKDEpLHkoIm5nSWYiLGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCksQyg1KSx5KCJtYXgiLGkuTUFYX0NBUkRfV0lEVEhfU0xJREVSX1ZBTFVFKSgibWluIixpLk1JTl9DQVJEX1dJRFRIX1NMSURFUl9WQUxVRSkoInN0ZXAiLDUwKSgidmFsdWUiLGkuY2FyZE1pbldpZHRoKSgidGh1bWJMYWJlbCIsITEpLEMoMTApLHkoIm1heCIsaS5NQVhfU01PT1RISU5HX1NMSURFUl9WQUxVRSkoIm1pbiIsMCkoInN0ZXAiLC4wMSkoInZhbHVlIixpLnNjYWxhclNtb290aGluZykoInRodW1iTGFiZWwiLCEwKSxDKDEpLHkoIm1heCIsaS5NQVhfU01PT1RISU5HX1ZBTFVFKSgidmFsdWUiLGkuc2NhbGFyU21vb3RoaW5nKSxDKDQpLHkoInZhbHVlIixpLnRvb2x0aXBTb3J0KSgib3B0aW9ucyIsaS5Ub29sdGlwU29ydERyb3Bkb3duT3B0aW9ucyksQygyKSx5KCJjaGVja2VkIixpLmlnbm9yZU91dGxpZXJzKSxDKDMpLHkoImNoZWNrZWQiLGkuc2NhbGFyUGFydGl0aW9uWCksQyg5KSx5KCJ2YWx1ZSIsaS5oaXN0b2dyYW1Nb2RlKSgib3B0aW9ucyIsaS5IaXN0b2dyYW1Nb2RlRHJvcGRvd25PcHRpb25zKSxDKDEpLHkoIm5nSWYiLGkuaXNJbWFnZVN1cHBvcnRFbmFibGVkKSl9LGRlcGVuZGVuY2llczpbQmUsTG9lLF9uLHlsLEd0LHVwXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOjEycHh9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7cGFkZGluZzoxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtmb250LXdlaWdodDo1MDA7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6bm9ybWFsO21hcmdpbjowIDAgMTJweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zZWN0aW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNlY3Rpb24tdGl0bGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9c2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY29udHJvbC1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLWJvdHRvbToxMnB4fS5jb250cm9sLW5hbWVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206OHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoyOHB4fS5zbGlkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNldC1idXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjZweH0uc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyOjFweCBzb2xpZCAjOGU5OGEzO2JvcmRlci1yYWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O2hlaWdodDoxMDAlO21hcmdpbi1sZWZ0OjEycHg7cGFkZGluZzowIDRweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuc2xpZGVyLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnNsaWRlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM0MjUwNjZ9LnNjYWxhcnMtc21vb3RoaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zbGlkZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6bm9uZTt3aWR0aDo1ZW19LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LnNjYWxhcnMtcGFydGl0aW9uLXhbX25nY29udGVudC0lQ09NUCVdICAgLmluZm9bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O21hcmdpbi1sZWZ0OjVweDt3aWR0aDoxNXB4fW1hdC1zbGlkZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTttYXJnaW4tbGVmdDotOHB4O21hcmdpbi1yaWdodDotOHB4fS5jb2x1bW4tZWRpdC1tZW51LXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtjdXJzb3I6cG9pbnRlcn0uY29sdW1uLWVkaXQtbWVudS10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNXB4O3dpZHRoOjE1cHh9dGItZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9LmxpbmtlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjVweCAwfS5jb250cm9sLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuaW5kZW50W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoyNXB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVDVlPU9iamVjdC5mcmVlemUoe1NMSURFUjpjcy5TRVRUSU5HU19TTElERVIsVEVYVDpjcy5TRVRUSU5HU19URVhULFRFWFRfREVMRVRFRDpjcy5DSEFOR0VfVE9fU0lOR0xFfSksSG9lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KE0kKSx0aGlzLmlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkJD10aGlzLnN0b3JlLnNlbGVjdChUJCksdGhpcy5pc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChTJCksdGhpcy5pc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGZ2KSx0aGlzLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChtdiksdGhpcy5pc0xpbmtlZFRpbWVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChZbSksdGhpcy5pc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChxQSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChpSCksdGhpcy5zdGVwTWluTWF4JD10aGlzLnN0b3JlLnNlbGVjdChuSCksdGhpcy5pc1NsaWRlT3V0TWVudU9wZW4kPXRoaXMuc3RvcmUuc2VsZWN0KFVJKSx0aGlzLmlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoZ2gpLnBpcGUoWWUoQm9vbGVhbiksUXQoMSksV3QodGhpcy5zdG9yZS5zZWxlY3QoV0EpKSxMKChbLGldKT0+aSkpLHRoaXMudG9vbHRpcFNvcnQkPXRoaXMuc3RvcmUuc2VsZWN0KHB2KSx0aGlzLmlnbm9yZU91dGxpZXJzJD10aGlzLnN0b3JlLnNlbGVjdChodiksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KHRkKSx0aGlzLmNhcmRNaW5XaWR0aCQ9dGhpcy5zdG9yZS5zZWxlY3QoZHYpLHRoaXMuaGlzdG9ncmFtTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUkkpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChvcCksdGhpcy5zY2FsYXJQYXJ0aXRpb25YJD10aGlzLnN0b3JlLnNlbGVjdChPSSksdGhpcy5pbWFnZUJyaWdodG5lc3NJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChrSSksdGhpcy5pbWFnZUNvbnRyYXN0SW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3QoRkkpLHRoaXMuaW1hZ2VTaG93QWN0dWFsU2l6ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoTkkpfW9uVG9vbHRpcFNvcnRDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goalAoe3NvcnQ6ZX0pKX1vbklnbm9yZU91dGxpZXJzQ2hhbmdlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR1AoKSl9b25YQXhpc1R5cGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV1Aoe3hBeGlzVHlwZTplfSkpfW9uQ2FyZFdpZHRoQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFQKHtjYXJkTWluV2lkdGg6ZX0pKX1vbkNhcmRXaWR0aFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaChZUCgpKX1vbkhpc3RvZ3JhbU1vZGVDaGFuZ2VkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2godFIoe2hpc3RvZ3JhbU1vZGU6ZX0pKX1vblNjYWxhclNtb290aGluZ0NoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChYUCh7c21vb3RoaW5nOmV9KSl9b25TY2FsYXJQYXJ0aXRpb25YVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUVAoKSl9b25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEtQKHticmlnaHRuZXNzSW5NaWxsaTplfSkpfW9uSW1hZ2VCcmlnaHRuZXNzUmVzZXQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEpQKCkpfW9uSW1hZ2VDb250cmFzdFJlc2V0KCl7dGhpcy5zdG9yZS5kaXNwYXRjaCgkUCgpKX1vbkltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFpQKHtjb250cmFzdEluTWlsbGk6ZX0pKX1vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChlUigpKX1vbkxpbmtlZFRpbWVUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaCh1Uih7YWZmb3JkYW5jZTpibC5DSEVDS19CT1h9KSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChYaCh7YWZmb3JkYW5jZTpibC5DSEVDS19CT1h9KSl9b25SYW5nZVNlbGVjdGlvblRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGhSKHthZmZvcmRhbmNlOmJsLkNIRUNLX0JPWH0pKX1vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKHt0aW1lU2VsZWN0aW9uOmUsc291cmNlOml9KXt0aGlzLnN0b3JlLmRpc3BhdGNoKFloKHt0aW1lU2VsZWN0aW9uOmUsYWZmb3JkYW5jZTpUNWVbaV19KSl9b25TbGlkZU91dFRvZ2dsZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFZQKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiXV0sZGVjbHM6MjIsdmFyczo2Myxjb25zdHM6W1szLCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLCJ0b29sdGlwU29ydCIsImlnbm9yZU91dGxpZXJzIiwieEF4aXNUeXBlIiwiY2FyZE1pbldpZHRoIiwiaGlzdG9ncmFtTW9kZSIsInNjYWxhclNtb290aGluZyIsInNjYWxhclBhcnRpdGlvblgiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpIiwiaW1hZ2VDb250cmFzdEluTWlsbGkiLCJpbWFnZVNob3dBY3R1YWxTaXplIiwiaXNMaW5rZWRUaW1lRmVhdHVyZUVuYWJsZWQiLCJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsImlzU2NhbGFyU3RlcFNlbGVjdG9yRmVhdHVyZUVuYWJsZWQiLCJpc1NjYWxhclN0ZXBTZWxlY3RvckVuYWJsZWQiLCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsImlzTGlua2VkVGltZUVuYWJsZWQiLCJpc1NjYWxhckNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwibGlua2VkVGltZVNlbGVjdGlvbiIsInN0ZXBNaW5NYXgiLCJpc1NsaWRlT3V0TWVudU9wZW4iLCJ0b29sdGlwU29ydENoYW5nZWQiLCJpZ25vcmVPdXRsaWVyc0NoYW5nZWQiLCJ4QXhpc1R5cGVDaGFuZ2VkIiwiY2FyZFdpZHRoQ2hhbmdlZCIsImNhcmRXaWR0aFJlc2V0IiwiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLCJzY2FsYXJTbW9vdGhpbmdDaGFuZ2VkIiwic2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQiLCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsImltYWdlQnJpZ2h0bmVzc1Jlc2V0IiwiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIiwiaW1hZ2VDb250cmFzdFJlc2V0IiwiaW1hZ2VTaG93QWN0dWFsU2l6ZUNoYW5nZWQiLCJsaW5rZWRUaW1lVG9nZ2xlZCIsImxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwic3RlcFNlbGVjdG9yVG9nZ2xlZCIsInJhbmdlU2VsZWN0aW9uVG9nZ2xlZCIsIm9uU2xpZGVPdXRUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtZXRyaWNzLWRhc2hib2FyZC1zZXR0aW5ncy1jb21wb25lbnQiLDApLFAoInRvb2x0aXBTb3J0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Ub29sdGlwU29ydENoYW5nZWQobyl9KSgiaWdub3JlT3V0bGllcnNDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uSWdub3JlT3V0bGllcnNDaGFuZ2VkKCl9KSgieEF4aXNUeXBlQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25YQXhpc1R5cGVDaGFuZ2VkKG8pfSkoImNhcmRXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQ2FyZFdpZHRoQ2hhbmdlZChvKX0pKCJjYXJkV2lkdGhSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNhcmRXaWR0aFJlc2V0KCl9KSgiaGlzdG9ncmFtTW9kZUNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSGlzdG9ncmFtTW9kZUNoYW5nZWQobyl9KSgic2NhbGFyU21vb3RoaW5nQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TY2FsYXJTbW9vdGhpbmdDaGFuZ2VkKG8pfSkoInNjYWxhclBhcnRpdGlvblhUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uU2NhbGFyUGFydGl0aW9uWFRvZ2dsZWQoKX0pKCJpbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25JbWFnZUJyaWdodG5lc3NJbk1pbGxpQ2hhbmdlZChvKX0pKCJpbWFnZUJyaWdodG5lc3NSZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlQnJpZ2h0bmVzc1Jlc2V0KCl9KSgiaW1hZ2VDb250cmFzdEluTWlsbGlDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkltYWdlQ29udHJhc3RJbk1pbGxpQ2hhbmdlZChvKX0pKCJpbWFnZUNvbnRyYXN0UmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25JbWFnZUNvbnRyYXN0UmVzZXQoKX0pKCJpbWFnZVNob3dBY3R1YWxTaXplQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkltYWdlU2hvd0FjdHVhbFNpemVDaGFuZ2VkKCl9KSgibGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25MaW5rZWRUaW1lVG9nZ2xlZCgpfSkoImxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoInN0ZXBTZWxlY3RvclRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKCl9KSgicmFuZ2VTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmFuZ2VTZWxlY3Rpb25Ub2dnbGVkKCl9KSgib25TbGlkZU91dFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TbGlkZU91dFRvZ2dsZWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksQigxMSwiYXN5bmMiKSxCKDEyLCJhc3luYyIpLEIoMTMsImFzeW5jIiksQigxNCwiYXN5bmMiKSxCKDE1LCJhc3luYyIpLEIoMTYsImFzeW5jIiksQigxNywiYXN5bmMiKSxCKDE4LCJhc3luYyIpLEIoMTksImFzeW5jIiksQigyMCwiYXN5bmMiKSxCKDIxLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJpc0ltYWdlU3VwcG9ydEVuYWJsZWQiLFUoMSwyMSxpLmlzSW1hZ2VTdXBwb3J0RW5hYmxlZCQpKSgidG9vbHRpcFNvcnQiLFUoMiwyMyxpLnRvb2x0aXBTb3J0JCkpKCJpZ25vcmVPdXRsaWVycyIsVSgzLDI1LGkuaWdub3JlT3V0bGllcnMkKSkoInhBeGlzVHlwZSIsVSg0LDI3LGkueEF4aXNUeXBlJCkpKCJjYXJkTWluV2lkdGgiLFUoNSwyOSxpLmNhcmRNaW5XaWR0aCQpKSgiaGlzdG9ncmFtTW9kZSIsVSg2LDMxLGkuaGlzdG9ncmFtTW9kZSQpKSgic2NhbGFyU21vb3RoaW5nIixVKDcsMzMsaS5zY2FsYXJTbW9vdGhpbmckKSkoInNjYWxhclBhcnRpdGlvblgiLFUoOCwzNSxpLnNjYWxhclBhcnRpdGlvblgkKSkoImltYWdlQnJpZ2h0bmVzc0luTWlsbGkiLFUoOSwzNyxpLmltYWdlQnJpZ2h0bmVzc0luTWlsbGkkKSkoImltYWdlQ29udHJhc3RJbk1pbGxpIixVKDEwLDM5LGkuaW1hZ2VDb250cmFzdEluTWlsbGkkKSkoImltYWdlU2hvd0FjdHVhbFNpemUiLFUoMTEsNDEsaS5pbWFnZVNob3dBY3R1YWxTaXplJCkpKCJpc0xpbmtlZFRpbWVGZWF0dXJlRW5hYmxlZCIsVSgxMiw0MyxpLmlzTGlua2VkVGltZUZlYXR1cmVFbmFibGVkJCkpKCJpc1JhbmdlU2VsZWN0aW9uQWxsb3dlZCIsVSgxMyw0NSxpLmlzUmFuZ2VTZWxlY3Rpb25BbGxvd2VkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvckZlYXR1cmVFbmFibGVkIixVKDE0LDQ3LGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JGZWF0dXJlRW5hYmxlZCQpKSgiaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkIixVKDE1LDQ5LGkuaXNTY2FsYXJTdGVwU2VsZWN0b3JFbmFibGVkJCkpKCJpc1NjYWxhclN0ZXBTZWxlY3RvclJhbmdlRW5hYmxlZCIsVSgxNiw1MSxpLmlzU2NhbGFyU3RlcFNlbGVjdG9yUmFuZ2VFbmFibGVkJCkpKCJpc0xpbmtlZFRpbWVFbmFibGVkIixVKDE3LDUzLGkuaXNMaW5rZWRUaW1lRW5hYmxlZCQpKSgiaXNTY2FsYXJDb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsVSgxOCw1NSxpLmlzU2NhbGFyQ29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFUoMTksNTcsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwTWluTWF4IixVKDIwLDU5LGkuc3RlcE1pbk1heCQpKSgiaXNTbGlkZU91dE1lbnVPcGVuIixVKDIxLDYxLGkuaXNTbGlkZU91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W1ZvZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVW9lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZGFzaGJvYXJkLXJpZ2h0LXBhbmUiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJk8oMCwibWV0cmljcy1kYXNoYm9hcmQtc2V0dGluZ3MiKX0sZGVwZW5kZW5jaWVzOltIb2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEk1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMyl9ZnVuY3Rpb24gUDVlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwzKX1mdW5jdGlvbiBSNWUobix0KXsxJm4mJk8oMCwiZGl2Iiw0KX12YXIgdlI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuQ29sdW1uSGVhZGVyVHlwZT1LdH1nZXRIZWFkZXJUZXh0Q29sdW1uKGUpe3N3aXRjaChlKXtjYXNlIEt0LlJVTjpyZXR1cm4iUnVuIjtjYXNlIEt0LlZBTFVFOnJldHVybiJWYWx1ZSI7Y2FzZSBLdC5TVEVQOnJldHVybiJTdGVwIjtjYXNlIEt0LlRJTUU6cmV0dXJuIlRpbWUiO2Nhc2UgS3QuUkVMQVRJVkVfVElNRTpyZXR1cm4iUmVsYXRpdmUiO2Nhc2UgS3QuU01PT1RIRUQ6cmV0dXJuIlNtb290aGVkIjtjYXNlIEt0LlZBTFVFX0NIQU5HRTpyZXR1cm4iVmFsdWUiO2Nhc2UgS3QuU1RBUlRfU1RFUDpyZXR1cm4iU3RhcnQgU3RlcCI7Y2FzZSBLdC5FTkRfU1RFUDpyZXR1cm4iRW5kIFN0ZXAiO2Nhc2UgS3QuU1RBUlRfVkFMVUU6cmV0dXJuIlN0YXJ0IFZhbHVlIjtjYXNlIEt0LkVORF9WQUxVRTpyZXR1cm4iRW5kIFZhbHVlIjtjYXNlIEt0Lk1JTl9WQUxVRTpyZXR1cm4iTWluIjtjYXNlIEt0Lk1BWF9WQUxVRTpyZXR1cm4iTWF4IjtjYXNlIEt0LlBFUkNFTlRBR0VfQ0hBTkdFOnJldHVybiIlIjtkZWZhdWx0OnJldHVybiIifX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZS1oZWFkZXIiXV0saW5wdXRzOntoZWFkZXI6ImhlYWRlciJ9LGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWzEsImhlYWRlci1jb250YWluZXIiLDMsIm5nU3dpdGNoIl0sWyJzdmdJY29uIiwiY2hhbmdlX2hpc3RvcnlfMjRweCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsic3ZnSWNvbiIsImNoYW5nZV9oaXN0b3J5XzI0cHgiXSxbMSwiZXh0cmEtcmlnaHQtcGFkZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSxFKDEsSTVlLDEsMCwibWF0LWljb24iLDEpLEUoMixQNWUsMSwwLCJtYXQtaWNvbiIsMSksRSgzLFI1ZSwxLDAsImRpdiIsMiksXyg0LCJzcGFuIiksQSg1KSx2KCkoKSksMiZlJiYoeSgibmdTd2l0Y2giLGkuaGVhZGVyLnR5cGUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlclR5cGUuVkFMVUVfQ0hBTkdFKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJUeXBlLlBFUkNFTlRBR0VfQ0hBTkdFKSxDKDMpLHl0KGkuZ2V0SGVhZGVyVGV4dENvbHVtbihpLmhlYWRlci50eXBlKSkpfSxkZXBlbmRlbmNpZXM6W0NyLFVyLGNoLEd0XSxzdHlsZXM6WyIuaGVhZGVyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0uZXh0cmEtcmlnaHQtcGFkZGluZ1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMnB4O3dpZHRoOjEycHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBPNWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDYpKDEsIm1hdC1jaGVja2JveCIsNyksUCgiY2hhbmdlIixmdW5jdGlvbigpe2xldCBvPW9lKGUpLiRpbXBsaWNpdCxzPVMoKS5kYXRhVGFibGVNb2RlO3JldHVybiBzZShTKCkudG9nZ2xlSGVhZGVyKG8scykpfSksTygyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsOCksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtDKDEpLHkoImNoZWNrZWQiLGUuZW5hYmxlZCksQygxKSx5KCJoZWFkZXIiLGUpfX1mdW5jdGlvbiBrNWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsNCksRSgxLE81ZSwzLDIsImRpdiIsNSksdigpKSwyJm4pe2xldCBlPXQuaGVhZGVycztDKDEpLHkoIm5nRm9yT2YiLGUpfX12YXIgam9lPWZ1bmN0aW9uKG4sdCl7cmV0dXJue2hlYWRlcnM6bixkYXRhVGFibGVNb2RlOnR9fSxHb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YVRhYmxlTW9kZT1nZCx0aGlzLnNlbGVjdGVkVGFiPWdkLlNJTkdMRSx0aGlzLm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkPW5ldyBHfXRvZ2dsZUhlYWRlcihlLGkpe3RoaXMub25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQuZW1pdCh7ZGF0YVRhYmxlTW9kZTppLGhlYWRlclR5cGU6ZS50eXBlfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3Mtc2NhbGFyLWNvbHVtbi1lZGl0b3ItY29tcG9uZW50Il1dLGlucHV0czp7cmFuZ2VIZWFkZXJzOiJyYW5nZUhlYWRlcnMiLHNpbmdsZUhlYWRlcnM6InNpbmdsZUhlYWRlcnMifSxvdXRwdXRzOntvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZDoib25TY2FsYXJUYWJsZUNvbHVtblRvZ2dsZWQifSxkZWNsczo4LHZhcnM6MTIsY29uc3RzOltbMSwidGFiLWdyb3VwIl0sWzMsImxhYmVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiaGVhZGVyTGlzdCIsIiJdLFsxLCJoZWFkZXItbGlzdCJdLFsiY2xhc3MiLCJoZWFkZXItbGlzdC1pdGVtIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiaGVhZGVyLWxpc3QtaXRlbSJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWzMsImhlYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IikoMSwibWF0LXRhYi1ncm91cCIsMCkoMiwibWF0LXRhYiIsMSksTygzLCJuZ0NvbnRleHQiLDIpLHYoKSxfKDQsIm1hdC10YWIiLDEpLE8oNSwibmdDb250ZXh0IiwyKSx2KCkoKSgpLEUoNixrNWUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwzLHF0KSksMiZlKXtsZXQgcj0kZSg3KTtDKDIpLHkoImxhYmVsIiwiU2luZ2xlIiksQygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixyKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFFyKDYsam9lLGkuc2luZ2xlSGVhZGVycyxpLkRhdGFUYWJsZU1vZGUuU0lOR0xFKSksQygxKSx5KCJsYWJlbCIsIlJhbmdlIiksQygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixyKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFFyKDksam9lLGkucmFuZ2VIZWFkZXJzLGkuRGF0YVRhYmxlTW9kZS5SQU5HRSkpfX0sZGVwZW5kZW5jaWVzOltkbixvcyx2Uix5bCxaMix4d10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC10YWItbGFiZWx7bWluLXdpZHRoOjB9LnRhYi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfS5oZWFkZXItbGlzdFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo1JTttYXJnaW4tbGVmdDo1JX0uaGVhZGVyLWxpc3QtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXb2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zaW5nbGVIZWFkZXJzJD10aGlzLnN0b3JlLnNlbGVjdChCSSksdGhpcy5yYW5nZUhlYWRlcnMkPXRoaXMuc3RvcmUuc2VsZWN0KFZJKX1vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCh7ZGF0YVRhYmxlTW9kZTplLGhlYWRlclR5cGU6aX0pe3RoaXMuc3RvcmUuZGlzcGF0Y2gocFIoe2RhdGFUYWJsZU1vZGU6ZSxoZWFkZXJUeXBlOml9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXNjYWxhci1jb2x1bW4tZWRpdG9yIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInNpbmdsZUhlYWRlcnMiLCJyYW5nZUhlYWRlcnMiLCJvblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvci1jb21wb25lbnQiLDApLFAoIm9uU2NhbGFyVGFibGVDb2x1bW5Ub2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblNjYWxhclRhYmxlQ29sdW1uVG9nZ2xlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoInNpbmdsZUhlYWRlcnMiLFUoMSwyLGkuc2luZ2xlSGVhZGVycyQpKSgicmFuZ2VIZWFkZXJzIixVKDIsNCxpLnJhbmdlSGVhZGVycyQpKX0sZGVwZW5kZW5jaWVzOltHb2UsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEw1ZT1KKFBJLG9vLChuLHQpPT5uLmZpbHRlcihlPT4hbWwoZS5wbHVnaW4pfHxCb29sZWFuKHQmJnQuZ2V0KGUucnVuSWQpKSkpLG1nPUooTDVlLG49Pm4uc29ydCgodCxlKT0+RncodC50YWcsZS50YWcpKSksYXk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5jZGtTY3JvbGxhYmxlPWksdGhpcy5vblZpc2liaWxpdHlDaGFuZ2U9bmV3IEcsdGhpcy5uZ1Vuc3Vic2NyaWJlJD1uZXcga2UsdGhpcy5vbkV2ZW50JD1uZXcga2V9bmdPbkluaXQoKXtsZXQgZT17cm9vdDp0aGlzLmNka1Njcm9sbGFibGU/dGhpcy5jZGtTY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50Om51bGx9O3RoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW4mJihlLnJvb3RNYXJnaW49dGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbik7bGV0IGk9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHI9Pnt0aGlzLm9uRXZlbnQkLm5leHQocil9LGUpO2kub2JzZXJ2ZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KSx0aGlzLm5nVW5zdWJzY3JpYmUkLnN1YnNjcmliZSgoKT0+e2kudW5vYnNlcnZlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpfSksdGhpcy5vbkV2ZW50JC5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSQpKS5zdWJzY3JpYmUocj0+e2xldCBvPXIuc2xpY2UoLTEpWzBdO3RoaXMub25WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoe3Zpc2libGU6by5pc0ludGVyc2VjdGluZ30pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUkLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUkLmNvbXBsZXRlKCl9d2FpdEZvckV2ZW50Rm9yVGVzdE9ubHkoKXtyZXR1cm4gbmV3IFByb21pc2UoZT0+dGhpcy5vbkV2ZW50JC5waXBlKFF0KDEpKS5zdWJzY3JpYmUoKCk9PntlKCl9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0oSWgsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIl1dLGlucHV0czp7aW50ZXJzZWN0aW9uT2JzZXJ2ZXJNYXJnaW46ImludGVyc2VjdGlvbk9ic2VydmVyTWFyZ2luIn0sb3V0cHV0czp7b25WaXNpYmlsaXR5Q2hhbmdlOiJvblZpc2liaWxpdHlDaGFuZ2UifX0pLG59KSgpLHFvZT0iL3NjYWxhcl9zdW1tYXJ5IjtmdW5jdGlvbiBseShuLHQpe2xldCBlPW47cmV0dXJuIHQmJm4uc3RhcnRzV2l0aCh0KyIvIikmJihlPW4uc2xpY2UodC5sZW5ndGgrMSkpLGUuZW5kc1dpdGgocW9lKSYmKGU9ZS5zbGljZSgwLC1xb2UubGVuZ3RoKSksZXx8bn1mdW5jdGlvbiBZb2Uobix0LGUpe3JldHVybiBuPHQ/dDpuPmU/ZTpufWZ1bmN0aW9uIFFoKG4sdCxlKXtsZXQgaT1Zb2Uobi5zdGFydC5zdGVwLHQsZSkscj1uLmVuZD9Zb2Uobi5lbmQuc3RlcCx0LGUpOm51bGw7cmV0dXJue3N0YXJ0U3RlcDppLGVuZFN0ZXA6cixjbGlwcGVkOmkhPT1uLnN0YXJ0LnN0ZXB8fHIhPT0obi5lbmQ/LnN0ZXA/P251bGwpfX12YXIgVjVlPVsibWVhc3VyZXIiXSxINWU9WyJpbnB1dCJdLEpvZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuY2hhbmdlRGV0ZWN0b3I9ZSx0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMuc3R5bGU9ImRlZmF1bHQiLHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAoIi4qIiksdGhpcy5pc1ZhbGlkPSEwLHRoaXMub25WYWx1ZUNoYW5nZT1uZXcgRyx0aGlzLmJsdXI9bmV3IEcsdGhpcy5mb2N1cz1uZXcgRyx0aGlzLmtleWRvd249bmV3IEcsdGhpcy5rZXl1cD1uZXcgRyx0aGlzLmludGVybmFsVmFsdWU9IiIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXI9dGhpcy51cGRhdGVJbnB1dFdpZHRoLmJpbmQodGhpcyl9bmdPbkluaXQoKXtkb2N1bWVudC5mb250cyYmZG9jdW1lbnQuZm9udHMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGluZ2RvbmUiLHRoaXMuZm9udENoYW5nZUxpc3RlbmVyKX1uZ09uRGVzdHJveSgpe2RvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkaW5nZG9uZSIsdGhpcy5mb250Q2hhbmdlTGlzdGVuZXIpfW5nT25DaGFuZ2VzKGUpe2UucGF0dGVybiYmKHRoaXMucGF0dGVyblJlZ2V4PW5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuPz8iIikpLGUudmFsdWUmJih0aGlzLmludGVybmFsVmFsdWU9dGhpcy52YWx1ZSksdGhpcy5pc1ZhbGlkPXRoaXMucGF0dGVyblJlZ2V4LnRlc3QodGhpcy5pbnRlcm5hbFZhbHVlKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKX1vbklucHV0KGUpe2xldCBpPXRoaXMuaW50ZXJuYWxWYWx1ZTt0aGlzLmludGVybmFsVmFsdWU9dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUsdGhpcy5pbnRlcm5hbFZhbHVlIT09aSYmKHRoaXMuaXNWYWxpZD10aGlzLnBhdHRlcm5SZWdleC50ZXN0KHRoaXMuaW50ZXJuYWxWYWx1ZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSksdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoe3ZhbHVlOnRoaXMuaW50ZXJuYWxWYWx1ZX0pfXVwZGF0ZUlucHV0V2lkdGgoKXtsZXR7d2lkdGg6ZX09dGhpcy5tZWFzdXJlckVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5pbnB1dEVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg9YCR7ZX1weGB9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0obm4pKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjb250ZW50LXdyYXBwaW5nLWlucHV0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KFY1ZSw3LFJlKSxvdChINWUsNyxSZSkpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkubWVhc3VyZXJFbFJlZj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5pbnB1dEVsUmVmPXIuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJkRhKGkuc3R5bGUpfSxpbnB1dHM6e3ZhbHVlOiJ2YWx1ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixzdHlsZToic3R5bGUiLHBhdHRlcm46InBhdHRlcm4ifSxvdXRwdXRzOntvblZhbHVlQ2hhbmdlOiJvblZhbHVlQ2hhbmdlIixibHVyOiJibHVyIixmb2N1czoiZm9jdXMiLGtleWRvd246ImtleWRvd24iLGtleXVwOiJrZXl1cCJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6Nix2YXJzOjcsY29uc3RzOltbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibWVhc3VyZXIiXSxbIm1lYXN1cmVyIiwiIl0sWyJhdXRvY29tcGxldGUiLCJvZmYiLCJzcGVsbGNoZWNrIiwiZmFsc2UiLCJ0eXBlIiwidGV4dCIsMywidmFsdWUiLCJwbGFjZWhvbGRlciIsImJsdXIiLCJmb2N1cyIsImlucHV0Iiwia2V5ZG93biIsImtleXVwIl0sWyJpbnB1dCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwic3BhbiIpKDEsInNwYW4iLDAsMSksQSgzKSx2KCksXyg0LCJpbnB1dCIsMiwzKSxQKCJibHVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5ibHVyLmVtaXQobyl9KSgiZm9jdXMiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZvY3VzLmVtaXQobyl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkua2V5ZG93bi5lbWl0KG8pfSkoImtleXVwIixmdW5jdGlvbihvKXtyZXR1cm4gaS5rZXl1cC5lbWl0KG8pfSksdigpKCkpLDImZSYmKGV0KCJjb250YWluZXIiLCEwKSgiaXMtdmFsaWQiLGkuaXNWYWxpZCksQygzKSx5dChpLmludGVybmFsVmFsdWV8fGkucGxhY2Vob2xkZXIpLEMoMSkseSgidmFsdWUiLGkudmFsdWUpKCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2lkdGg6bWF4LWNvbnRlbnR9W19uZ2hvc3QtJUNPTVAlXTpmb2N1cy13aXRoaW4gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2Y1N2MwMH0uZGVmYXVsdFtfbmdob3N0LSVDT01QJV06aG92ZXIgICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2ViZWJlYn0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKXtib3JkZXItY29sb3I6I2VmOWE5YX0uZXJyb3JbX25naG9zdC0lQ09NUCVdICAgLmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIsIC5lcnJvcltfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1cy13aXRoaW4sIFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmlzLXZhbGlkKTpob3ZlciwgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdOm5vdCguaXMtdmFsaWQpOmZvY3VzLXdpdGhpbntib3JkZXItY29sb3I6I2VmOWE5YX0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6I2JkYmRiZH0uaGlnaC1jb250cmFzdFtfbmdob3N0LSVDT01QJV0gICAuY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItY29sb3I6Izc1NzU3NX0uY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MnB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7cGFkZGluZzoxcHggMnB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5tZWFzdXJlcltfbmdjb250ZW50LSVDT01QJV17cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbn0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdLCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjQ7cGFkZGluZzowO3doaXRlLXNwYWNlOnByZX0ubWVhc3VyZXJbX25nY29udGVudC0lQ09NUCVdOmVtcHR5LCBpbnB1dFtfbmdjb250ZW50LSVDT01QJV06ZW1wdHl7d2lkdGg6MmNofWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlcjowO2NvbG9yOmluaGVyaXQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1mYW1pbHk6aW5oZXJpdDtvdXRsaW5lOjB9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze3BhZGRpbmctcmlnaHQ6MWNofSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gejVlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiY29udGVudC13cmFwcGluZy1pbnB1dCIsMyksUCgib25WYWx1ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5hbGlhc0NoYW5nZWQuZW1pdChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7amwoZS5pc0FsaWFzTmFtZUxlZ2FsPyJoaWdoLWNvbnRyYXN0IjoiZXJyb3IiKSx5KCJ2YWx1ZSIsZS5hbGlhcy5hbGlhc1RleHQpfX1mdW5jdGlvbiBqNWUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDQpLEEoMSksdigpKSwyJm4pe2xldCBlPVMoKTtldCgiaWxsZWdhbCIsIWUuaXNBbGlhc05hbWVMZWdhbCkseSgidGl0bGUiLGUudGl0bGUpLEMoMSkseXQoZS5hbGlhcy5hbGlhc1RleHQpfX12YXIgY3k9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNBbGlhc05hbWVMZWdhbD0hMCx0aGlzLmFsaWFzQ2hhbmdlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZXhwZXJpbWVudC1hbGlhcyJdXSxpbnB1dHM6e2FsaWFzOiJhbGlhcyIsYWxpYXNFZGl0YWJsZToiYWxpYXNFZGl0YWJsZSIsdGl0bGU6InRpdGxlIixpc0FsaWFzTmFtZUxlZ2FsOiJpc0FsaWFzTmFtZUxlZ2FsIn0sb3V0cHV0czp7YWxpYXNDaGFuZ2VkOiJhbGlhc0NoYW5nZWQifSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sxLCJhbGlhcy1udW1iZXIiXSxbInBsYWNlaG9sZGVyIiwiQWxpYXMgZm9yIGV4cGVyaW1lbnQiLDMsInN0eWxlIiwidmFsdWUiLCJvblZhbHVlQ2hhbmdlIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbIm5vRWRpdEFsaWFzTmFtZSIsIiJdLFsicGxhY2Vob2xkZXIiLCJBbGlhcyBmb3IgZXhwZXJpbWVudCIsMywidmFsdWUiLCJvblZhbHVlQ2hhbmdlIl0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJzcGFuIiwwKSxBKDEpLHYoKSxFKDIsejVlLDEsMywiY29udGVudC13cmFwcGluZy1pbnB1dCIsMSksRSgzLGo1ZSwyLDQsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpKSwyJmUpe2xldCByPSRlKDQpO0MoMSkseXQoaS5hbGlhcy5hbGlhc051bWJlciksQygxKSx5KCJuZ0lmIixpLmFsaWFzRWRpdGFibGUpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0JlLEpvZV0sc3R5bGVzOlsiLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojMjEyMTIxO2JvcmRlci1yYWRpdXM6MnB4O21hcmdpbi1yaWdodDoycHg7cGFkZGluZzowIDJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYWxpYXMtbnVtYmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmFsaWFzLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5hbGlhcy1udW1iZXJbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lfSJdfSksbn0pKCk7ZnVuY3Rpb24gRzVlKG4sdCl7MSZuJiZPKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDIpLDImbiYmeSgiYWxpYXMiLFMoKS5leHBlcmltZW50QWxpYXMpfWZ1bmN0aW9uIFc1ZShuLHQpezEmbiYmKF8oMCwic3BhbiIpLEEoMSwiLyIpLHYoKSl9dmFyICRvZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lLWNvbXBvbmVudCJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGV4cGVyaW1lbnRBbGlhczoiZXhwZXJpbWVudEFsaWFzIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbMywiYWxpYXMiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJhbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEUoMCxHNWUsMSwxLCJ0Yi1leHBlcmltZW50LWFsaWFzIiwwKSxFKDEsVzVlLDIsMCwic3BhbiIsMSksXygyLCJzcGFuIiksQSgzKSx2KCkpLDImZSYmKHkoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSxDKDEpLHkoIm5nSWYiLG51bGwhPWkuZXhwZXJpbWVudEFsaWFzKSxDKDIpLHl0KGkubmFtZSkpfSxkZXBlbmRlbmNpZXM6W0JlLGN5XSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbG9yOiM2MTYxNjF9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseVI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWV9bmdPbkluaXQoKXt0aGlzLm5hbWUkPUx0KFt0aGlzLnN0b3JlLnNlbGVjdChXSSx7cnVuSWQ6dGhpcy5ydW5JZH0pXSkucGlwZShMKChbZV0pPT5mdW5jdGlvbihuLHQsZSl7aWYoIXQpcmV0dXJuIG47bGV0IGk9dD8ubmFtZT8/Ii4uLiI7cmV0dXJuIGl9KHRoaXMucnVuSWQsZSkpKSx0aGlzLmV4cGVyaW1lbnRBbGlhcyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KEdJLHtydW5JZDp0aGlzLnJ1bklkfSksdGhpcy5zdG9yZS5zZWxlY3QoWXUpXSkucGlwZShMKChbZSxpXSk9PmU/aVtlXTpudWxsKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLXJ1bi1uYW1lIl1dLGlucHV0czp7cnVuSWQ6InJ1bklkIn0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywibmFtZSIsImV4cGVyaW1lbnRBbGlhcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwiY2FyZC1ydW4tbmFtZS1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpKSwyJmUmJih5KCJuYW1lIixVKDEsMyxpLm5hbWUkKSkoImV4cGVyaW1lbnRBbGlhcyIsVSgzLDcsaS5leHBlcmltZW50QWxpYXMkKSksemUoInRpdGxlIixVKDIsNSxpLm5hbWUkKSkpfSxkZXBlbmRlbmNpZXM6WyRvZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gWTVlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5dChlLmZpcnN0VGV4dFBhcnQoKSl9fXZhciB1eT0oKCk9PntjbGFzcyBue3BhcnNlVmFsdWUoKXtsZXQgZT10aGlzLnZhbHVlLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lP3tmaXJzdDoiIixzZWNvbmQ6dGhpcy52YWx1ZX06e2ZpcnN0OnRoaXMudmFsdWUuc2xpY2UoMCxlKSxzZWNvbmQ6dGhpcy52YWx1ZS5zbGljZShlKX19Zmlyc3RUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5maXJzdH1zZWNvbmRUZXh0UGFydCgpe3JldHVybiB0aGlzLnBhcnNlVmFsdWUoKS5zZWNvbmR9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLXRydW5jYXRlZC1wYXRoIl1dLGlucHV0czp7dmFsdWU6InZhbHVlIn0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNsYXNzIiwiZmlyc3QtdGV4dC1wYXJ0Iiw0LCJuZ0lmIl0sWzEsInNlY29uZC10ZXh0LXBhcnQiXSxbMSwiZmlyc3QtdGV4dC1wYXJ0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFk1ZSwyLDEsInNwYW4iLDApLF8oMSwic3BhbiIsMSksQSgyKSx2KCkpLDImZSYmKHkoIm5nSWYiLGkuZmlyc3RUZXh0UGFydCgpLmxlbmd0aD4wKSxDKDIpLHl0KGkuc2Vjb25kVGV4dFBhcnQoKSkpfSxkZXBlbmRlbmNpZXM6W0JlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWZsZXg7d2hpdGUtc3BhY2U6bm93cmFwfS5maXJzdC10ZXh0LXBhcnRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxIDRjaDttYXgtd2lkdGg6bWF4LWNvbnRlbnR9LmZpcnN0LXRleHQtcGFydFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWNvbmQtdGV4dC1wYXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30iXX0pLG59KSgpO2Z1bmN0aW9uIFg1ZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMil9ZnVuY3Rpb24gUTVlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwzKX12YXIgZHk9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNDbGlwcGVkPSExLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aXMtbGlua2VkLXRpbWUtc2VsZWN0aW9uLXdhcm5pbmciXV0saW5wdXRzOntpc0NsaXBwZWQ6ImlzQ2xpcHBlZCIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siZGF0YS12YWx1ZSIsImNsaXBwZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkxpbmtlZCBzdGVwIGlzIG5vdCBmb3VuZCBpbiB0aGlzIHZpc3VhbGl6YXRpb24uIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iLDQsIm5nSWYiXSxbImRhdGEtdmFsdWUiLCJjbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwic3ZnSWNvbiIsImluZm9fb3V0bGluZV8yNHB4IiwidGl0bGUiLCJEYXRhIGlzIG5vdCBmb3VuZCBvbiBzZWxlY3RlZCBzdGVwLiBXZSBoaWdobGlnaHRlZCB0aGUgY2xvc2VzdCBzdGVwIGZvciB5b3UuIiw0LCJuZ0lmIl0sWyJkYXRhLXZhbHVlIiwiY2xpcHBlZCIsInN2Z0ljb24iLCJpbmZvX291dGxpbmVfMjRweCIsInRpdGxlIiwiTGlua2VkIHN0ZXAgaXMgbm90IGZvdW5kIGluIHRoaXMgdmlzdWFsaXphdGlvbi4gV2UgaGlnaGxpZ2h0ZWQgdGhlIGNsb3Nlc3Qgc3RlcCBmb3IgeW91LiJdLFsiZGF0YS12YWx1ZSIsImNsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJzdmdJY29uIiwiaW5mb19vdXRsaW5lXzI0cHgiLCJ0aXRsZSIsIkRhdGEgaXMgbm90IGZvdW5kIG9uIHNlbGVjdGVkIHN0ZXAuIFdlIGhpZ2hsaWdodGVkIHRoZSBjbG9zZXN0IHN0ZXAgZm9yIHlvdS4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihFKDAsWDVlLDEsMCwibWF0LWljb24iLDApLEUoMSxRNWUsMSwwLCJtYXQtaWNvbiIsMSkpLDImZSYmKHkoIm5nSWYiLGkuaXNDbGlwcGVkKSxDKDEpLHkoIm5nSWYiLGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkKSl9LGRlcGVuZGVuY2llczpbQmUsR3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZjtoZWlnaHQ6MWVtO2xpbmUtaGVpZ2h0OjA7ZGlzcGxheTppbmxpbmUtZmxleH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2QzMmYyZn1bX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBLNWUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDE5KSxBKDEpLEIoMiwibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLGplKCJTdGVwICIsVSgyLDEsZS5zdGVwc1tlLnN0ZXBJbmRleF0pLCIiKX19ZnVuY3Rpb24gWjVlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyMCksQSgxKSxCKDIsIm51bWJlciIpLEIoMywibnVtYmVyIiksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLFhwKCJTYW1wbGUgIixVKDIsMixlLnNhbXBsZSsxKSwiLyIsVSgzLDQsZS5udW1TYW1wbGUpLCIiKX19ZnVuY3Rpb24gSjVlKG4sdCl7MSZuJiZPKDAsIm1hdC1zcGlubmVyIiwyMSl9ZnVuY3Rpb24gJDVlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiksTygxLCJzcGFuIiwzMCkoMiwic3BhbiIsMzEpLHYoKSksMiZuKXtsZXQgZT1TKDMpO0MoMiksUHQoImxlZnQiLGUuc2xpZGVyU3RhcnRQb3NpdGlvbikoIndpZHRoIixlLnNsaWRlclRyYWNrV2lkdGgpfX1mdW5jdGlvbiBlNGUobix0KXtpZigxJm4mJk8oMCwiZGl2IiwzMiksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMyk7UHQoImxlZnQiLGkuZ2V0TGlua2VkVGltZVRpY2tMZWZ0U3R5bGUoZSkpKCJtYXJnaW4tbGVmdCIsaS5nZXRMaW5rZWRUaW1lVGlja01hcmdpbkxlZnRTdHlsZShlKSl9fWZ1bmN0aW9uIHQ0ZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyNyksRSgxLCQ1ZSwzLDQsInNwYW4iLDI4KSxFKDIsZTRlLDEsNCwiZGl2IiwyOSksdigpKSwyJm4pe2xldCBlPVMoMik7QygxKSx5KCJuZ0lmIixudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApLEMoMSkseSgibmdGb3JPZiIsZS5zZWxlY3RlZFN0ZXBzKX19dmFyIG40ZT1mdW5jdGlvbihuKXtyZXR1cm5bbl19LGk0ZT1mdW5jdGlvbihuKXtyZXR1cm57ZmlsdGVyOm59fTtmdW5jdGlvbiByNGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7c24oMCksXygxLCJkaXYiLDIyKSgyLCJtYXQtc2xpZGVyIiwyMyksUCgiaW5wdXQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25TbGlkZXJJbnB1dChyKSl9KSx2KCksRSgzLHQ0ZSwzLDIsImRpdiIsMjQpLHYoKSxfKDQsImRpdiIsMjUpLE8oNSwiaW1nIiwyNiksdigpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygyKSx5KCJuZ0NsYXNzIixPbigxMSxuNGUsZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZudWxsIT09ZS5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA/ImhpZGUtc2xpZGVyIjoiIikpKCJkaXNhYmxlZCIsZS5zdGVwcy5sZW5ndGg8PTEpKCJtaW4iLDApKCJtYXgiLGUuc3RlcHMubGVuZ3RoLTEpKCJzdGVwIiwxKSgidGlja0ludGVydmFsIiwxKSgidmFsdWUiLGUuc3RlcEluZGV4KSxDKDEpLHkoIm5nSWYiLGUubGlua2VkVGltZVNlbGVjdGlvbiksQygyKSxYeCgiYWx0IiwiSW1hZ2UgYXQgc3RlcCAiLGUuc3RlcHNbZS5zdGVwSW5kZXhdLCIiKSxaaSgic3JjIixlLmltYWdlVXJsLHpsKSx5KCJuZ1N0eWxlIixPbigxMyxpNGUsZS5jc3NGaWx0ZXIoKSkpfX1mdW5jdGlvbiBvNGUobix0KXsxJm4mJihfKDAsImRpdiIsMzQpLEEoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24gczRlKG4sdCl7aWYoMSZuJiZFKDAsbzRlLDIsMCwiZGl2IiwzMyksMiZuKXtsZXQgZT1TKCk7eSgibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIGE0ZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSx0c2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1PZSx0aGlzLnNsaWRlclN0YXJ0UG9zaXRpb249IiIsdGhpcy5zbGlkZXJUcmFja1dpZHRoPSIiLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbj1udWxsLHRoaXMuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkPSExLHRoaXMub25BY3R1YWxTaXplVG9nZ2xlPW5ldyBHLHRoaXMuc3RlcEluZGV4Q2hhbmdlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHfWNzc0ZpbHRlcigpe3JldHVybmBjb250cmFzdCgke3RoaXMuY29udHJhc3RJbk1pbGxpLzEwfSUpIGJyaWdodG5lc3MoJHt0aGlzLmJyaWdodG5lc3NJbk1pbGxpLzFlM30pYH1vblNsaWRlcklucHV0KGUpe3RoaXMuc3RlcEluZGV4Q2hhbmdlLmVtaXQoZS52YWx1ZSl9Y2hhbmdlRGlzdGluY3QoZSl7cmV0dXJuIGUuY3VycmVudFZhbHVlIT09ZS5wcmV2aW91c1ZhbHVlfW5nT25DaGFuZ2VzKGUpeyhlLnNlbGVjdGVkU3RlcHMmJnRoaXMuY2hhbmdlRGlzdGluY3QoZS5zZWxlY3RlZFN0ZXBzKXx8ZS5saW5rZWRUaW1lU2VsZWN0aW9uJiZ0aGlzLmNoYW5nZURpc3RpbmN0KGUubGlua2VkVGltZVNlbGVjdGlvbikpJiZ0aGlzLnJlbmRlclJhbmdlU2xpZGVyKCl9cmVuZGVyUmFuZ2VTbGlkZXIoKXtpZighdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9ufHwhdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXApcmV0dXJuO2xldCBlPXRoaXMuc3RlcHMubGVuZ3RoLTEsaT10aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwPHRoaXMuc3RlcHNbMF0/dGhpcy5zdGVwc1swXTp0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnRTdGVwLHI9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uLmVuZFN0ZXA+dGhpcy5zdGVwc1tlXT90aGlzLnN0ZXBzW2VdOnRoaXMubGlua2VkVGltZVNlbGVjdGlvbi5lbmRTdGVwLHtzdGFydFBvc2l0aW9uOm8sd2lkdGg6c309dGhpcy5nZXRUcmFja1N0YXJ0UG9zaXRpb25BbmRXaWR0aChpLHIsZSk7dGhpcy5zbGlkZXJTdGFydFBvc2l0aW9uPTEwMCpvKyIlIix0aGlzLnNsaWRlclRyYWNrV2lkdGg9MTAwKnMrIiUifWdldFRyYWNrU3RhcnRQb3NpdGlvbkFuZFdpZHRoKGUsaSxyKXtsZXQgbz0xL3Iscz0wLGE9MCxsPTA7Zm9yKDtsPHRoaXMuc3RlcHMubGVuZ3RoLTE7bCsrKXtsZXQgYz10aGlzLnN0ZXBzW2xdLHU9dGhpcy5zdGVwc1tsKzFdO2lmKGM8PWUmJmU8PXUpe3MrPShlLWMpLyh1LWMpO2JyZWFrfX1mb3Iocz0ocytsKSpvO2w8dGhpcy5zdGVwcy5sZW5ndGgtMTtsKyspe2xldCBjPXRoaXMuc3RlcHNbbF0sdT10aGlzLnN0ZXBzW2wrMV07aWYoZT49YyYmaTw9dSl7YT0oaS1lKS8odS1jKTticmVha31pZihlPj1jJiZpPj11KWErPSh1LWUpLyh1LWMpO2Vsc2V7aWYoIShpPj11KSl7YSs9KGktYykvKHUtYyk7YnJlYWt9YSs9MX19cmV0dXJuIGEqPW8sKHM+MXx8czwwKSYmKHM9MCkse3N0YXJ0UG9zaXRpb246cyx3aWR0aDphfX1nZXRMaW5rZWRUaW1lVGlja0xlZnRTdHlsZShlKXtpZigtMT09dGhpcy5zdGVwcy5pbmRleE9mKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdGVwSW5kZXg6IHN0ZXBJbmRleCB2YWx1ZSBpcyBub3QgaW5jbHVkZWQgaW4gc3RlcHMiKTtyZXR1cm4gdGhpcy5zdGVwcy5pbmRleE9mKGUpLyh0aGlzLnN0ZXBzLmxlbmd0aC0xKSoxMDArIiUifWdldExpbmtlZFRpbWVUaWNrTWFyZ2luTGVmdFN0eWxlKGUpe2lmKC0xPT10aGlzLnN0ZXBzLmluZGV4T2YoZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0ZXBJbmRleDogc3RlcEluZGV4IHZhbHVlIGlzIG5vdCBpbmNsdWRlZCBpbiBzdGVwcyIpO3JldHVybmAtJHt0aGlzLnN0ZXBzLmluZGV4T2YoZSkvKHRoaXMuc3RlcHMubGVuZ3RoLTEpKjE0fXB4YH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siaW1hZ2UtY2FyZC1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJhY3R1YWwtc2l6ZSIsaS5zaG93QWN0dWFsU2l6ZSl9LGlucHV0czp7bG9hZFN0YXRlOiJsb2FkU3RhdGUiLHRpdGxlOiJ0aXRsZSIsdGFnOiJ0YWciLHJ1bklkOiJydW5JZCIsc2FtcGxlOiJzYW1wbGUiLG51bVNhbXBsZToibnVtU2FtcGxlIixpbWFnZVVybDoiaW1hZ2VVcmwiLHN0ZXBJbmRleDoic3RlcEluZGV4IixzdGVwczoic3RlcHMiLGJyaWdodG5lc3NJbk1pbGxpOiJicmlnaHRuZXNzSW5NaWxsaSIsY29udHJhc3RJbk1pbGxpOiJjb250cmFzdEluTWlsbGkiLHNob3dBY3R1YWxTaXplOiJzaG93QWN0dWFsU2l6ZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSIsYWxsb3dUb2dnbGVBY3R1YWxTaXplOiJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsc2VsZWN0ZWRTdGVwczoic2VsZWN0ZWRTdGVwcyIsbGlua2VkVGltZVNlbGVjdGlvbjoibGlua2VkVGltZVNlbGVjdGlvbiIsaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkOiJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQifSxvdXRwdXRzOntvbkFjdHVhbFNpemVUb2dnbGU6Im9uQWN0dWFsU2l6ZVRvZ2dsZSIsc3RlcEluZGV4Q2hhbmdlOiJzdGVwSW5kZXhDaGFuZ2UiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoyMSx2YXJzOjE2LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0byBwaW4gYSBjYXJkLuKQn2U2NjVkYzcxMmJkNWYxOGQ0ZGZhM2EyOWUxMjVkNTY1Y2M1MWUyZjbikJ83Mjg0NjA2NDI2MjM0Mzc1MzQ0OlBpbiBjYXJkYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gb24gYW4gaW1hZ2UgY2FyZCB0aGF0IHRvZ2dsZXMgYWN0dWFsIGltYWdlIHNpemUu4pCfM2NhMDVlZjNhNmUzYTM3MDY1ZjVlMGY2OWM1ZDVhMjE3OGQ5MDc5MeKQnzc2MzUxMDE5MzY2NjQ3ODkxNDA6VG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplYCxbWzEsImhlYWRpbmciXSxbMSwibGluZSJdLFsxLCJ0YWciXSxbMSwidGFnLXBhdGgiLDMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGFjdHVhbCBpbWFnZSBzaXplIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzdmdJY29uIiwiaW1hZ2Vfc2VhcmNoXzI0cHgiXSxbMSwicnVuIl0sWzEsImRvdCIsMywibmdTdHlsZSJdLFsxLCJydW4tdGV4dCIsMywicnVuSWQiXSxbMSwibWV0YWRhdGEiXSxbImNsYXNzIiwic3RlcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYW1wbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZyIsImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub0ltYWdlRGF0YSIsIiJdLFsxLCJzdGVwIl0sWzEsInNhbXBsZSJdLFsiZGlhbWV0ZXIiLCIxOCIsMSwibG9hZGluZyJdLFsxLCJzbGlkZXItcm93Il0sWyJjb2xvciIsInByaW1hcnkiLDEsInN0ZXAtc2xpZGVyIiwzLCJuZ0NsYXNzIiwiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidGlja0ludGVydmFsIiwidmFsdWUiLCJpbnB1dCJdLFsiY2xhc3MiLCJsaW5rZWQtdGltZS13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImltZy1jb250YWluZXIiXSxbMywiYWx0Iiwic3JjIiwibmdTdHlsZSJdLFsxLCJsaW5rZWQtdGltZS13cmFwcGVyIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwibGlua2VkLXRpbWUtdGljayIsMywibGVmdCIsIm1hcmdpbi1sZWZ0Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwic2xpZGVyLXRyYWNrIl0sWzEsInNsaWRlci10cmFjay1maWxsIl0sWzEsImxpbmtlZC10aW1lLXRpY2siXSxbImNsYXNzIiwiZW1wdHktbWVzc2FnZSIsNCwibmdJZiJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLE8oMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksdigpLF8oNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxPKDcsIm1hdC1pY29uIiw3KSx2KCksXyg4LCJidXR0b24iLDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxPKDksIm1hdC1pY29uIiw5KSx2KCkoKSgpLF8oMTAsImRpdiIsMSkoMTEsInNwYW4iLDEwKSxPKDEyLCJzcGFuIiwxMSkoMTMsImNhcmQtcnVuLW5hbWUiLDEyKSx2KCksXygxNCwiZGl2IiwxMyksRSgxNSxLNWUsMywzLCJzcGFuIiwxNCksRSgxNixaNWUsNCw2LCJzcGFuIiwxNSksRSgxNyxKNWUsMSwwLCJtYXQtc3Bpbm5lciIsMTYpLHYoKSgpKCksRSgxOCxyNGUsNiwxNSwibmctY29udGFpbmVyIiwxNyksRSgxOSxzNGUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxOCxxdCkpLDImZSl7bGV0IHI9JGUoMjApO0MoMyksWmkoInRpdGxlIixpLnRhZyksWmkoInZhbHVlIixpLnRpdGxlKSxDKDEpLHkoImlzQ2xpcHBlZCIsaS5saW5rZWRUaW1lU2VsZWN0aW9uJiZpLmxpbmtlZFRpbWVTZWxlY3Rpb24uY2xpcHBlZCkoImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCIsaS5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQpLEMoMiksemUoInRpdGxlIixpLmlzUGlubmVkPyJVbnBpbiBjYXJkIjoiUGluIGNhcmQiKSxDKDEpLHkoInN2Z0ljb24iLGkuaXNQaW5uZWQ/ImtlZXBfMjRweCI6ImtlZXBfb3V0bGluZV8yNHB4IiksQygxKSx5KCJkaXNhYmxlZCIsIWkuYWxsb3dUb2dnbGVBY3R1YWxTaXplKSxDKDQpLHkoIm5nU3R5bGUiLE9uKDE0LGE0ZSxpLnJ1bkNvbG9yU2NhbGUoaS5ydW5JZCkpKSxDKDEpLHkoInJ1bklkIixpLnJ1bklkKSxDKDIpLHkoIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpLEMoMSkseSgibmdJZiIsaS5udW1TYW1wbGU+MSksQygxKSx5KCJuZ0lmIixpLmxvYWRTdGF0ZT09PWkuRGF0YUxvYWRTdGF0ZS5MT0FESU5HKSxDKDEpLHkoIm5nSWYiLG51bGwhPT1pLnN0ZXBJbmRleCYmaS5zdGVwSW5kZXg8aS5zdGVwcy5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0ZuLGRuLEJlLHp1LF9uLEd0LEJvLHVwLHlSLHV5LGR5LFFsXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hY3R1YWwtc2l6ZVtfbmdob3N0LSVDT01QJV17aGVpZ2h0OmF1dG99LmhlYWRpbmdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjRweDtwb3NpdGlvbjpyZWxhdGl2ZX0ubGluZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIG1heC1jb250ZW50fS50YWdbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOjVweH0ubWV0YWRhdGFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NXB4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXgtd2lkdGg6MTc1cHg7dGV4dC1hbGlnbjplbmR9LnRhZy1wYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVde2FsaWduLXNlbGY6YmFzZWxpbmU7ZGlzcGxheTpmbGV4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnJ1bltfbmdjb250ZW50LSVDT01QJV0gICAuZG90W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTNweDtoZWlnaHQ6MTNweDtib3JkZXItcmFkaXVzOjUwJTttYXJnaW4tcmlnaHQ6NHB4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLnJ1bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczttYXgtd2lkdGg6MTIwcHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV0sIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVdLCAuc3RlcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnJ1bltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNhbXBsZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zYW1wbGVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnN0ZXBbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7anVzdGlmeS1zZWxmOmZsZXgtZW5kO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXJpZ2h0Oi0xMnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmltZy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO292ZXJmbG93LXk6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZX0uaW1nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBpbWdbX25nY29udGVudC0lQ09NUCVde2ltYWdlLXJlbmRlcmluZzotbW96LWNyaXNwLWVkZ2VzO2ltYWdlLXJlbmRlcmluZzpwaXhlbGF0ZWR9LmFjdHVhbC1zaXplW19uZ2hvc3QtJUNPTVAlXSAgIC5pbWctY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6bm9uZX1bX25naG9zdC0lQ09NUCVdOm5vdCguYWN0dWFsLXNpemUpICAgaW1nW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXgtaGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjEwMCU7d2lkdGg6YXV0bztoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvbnRhaW59LnNsaWRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI0cHg7cG9zaXRpb246cmVsYXRpdmV9LnN0ZXAtc2xpZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9W19uZ2hvc3QtJUNPTVAlXSAgICAgLm1hdC1zbGlkZXItbWluLXZhbHVlIC5tYXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH1bX25naG9zdC0lQ09NUCVdICAgICAuaGlkZS1zbGlkZXIubWF0LXNsaWRlci1ob3Jpem9udGFsIC5tYXQtc2xpZGVyLXRyYWNrLXdyYXBwZXJ7aGVpZ2h0OjB9LmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MWVtO2ZvbnQtc2l6ZToxM3B4fS5saW5rZWQtdGltZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3dpZHRoOjEwMCV9LmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6MTRweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxNHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5saW5rZWQtdGltZS10aWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmxpbmtlZC10aW1lLXRpY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX0uc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3RvcDo2cHg7cG9zaXRpb246YWJzb2x1dGV9LnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4yNik7bGVmdDo3cHg7d2lkdGg6Y2FsYygxMDAlIC0gMTRweCl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyl9LnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmNTdjMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFjay1maWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNlZjZjMDB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxuc2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuc3RvcmU9ZSx0aGlzLmRhdGFTb3VyY2U9aSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5waW5TdGF0ZUNoYW5nZWQ9bmV3IEcsdGhpcy5icmlnaHRuZXNzSW5NaWxsaSQ9dGhpcy5zdG9yZS5zZWxlY3Qoa0kpLHRoaXMuY29udHJhc3RJbk1pbGxpJD10aGlzLnN0b3JlLnNlbGVjdChGSSksdGhpcy5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQ9dGhpcy5zdG9yZS5zZWxlY3QoTkkpLHRoaXMuc2hvd0FjdHVhbFNpemU9ITEsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkPSExLHRoaXMuYWN0dWFsU2l6ZVVpVG9nZ2xlU3ViamVjdD1uZXcgaHIodGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlfW9uU3RlcEluZGV4Q2hhbmdlZChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKG9SKHtjYXJkSWQ6dGhpcy5jYXJkSWQsc3RlcEluZGV4OmV9KSl9aXNJbWFnZUNhcmRNZXRhZGF0YShlKXtsZXR7cGx1Z2luOml9PWU7cmV0dXJuIGk9PT1yaS5JTUFHRVN9b25BY3R1YWxTaXplVG9nZ2xlKCl7dGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkPSF0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZWQsdGhpcy5hY3R1YWxTaXplVWlUb2dnbGVTdWJqZWN0Lm5leHQodGhpcy5hY3R1YWxTaXplVWlUb2dnbGVkKX1uZ09uSW5pdCgpe0x0KFt0aGlzLmFjdHVhbFNpemVHbG9iYWxTZXR0aW5nJCx0aGlzLmFjdHVhbFNpemVVaVRvZ2dsZVN1YmplY3RdKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksa3QoKFtsLGNdKT0+e3RoaXMuc2hvd0FjdHVhbFNpemU9bHx8Yyx0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0aGlzLnNob3dBY3R1YWxTaXplKX0pKS5zdWJzY3JpYmUoKCk9Pnt9KTtsZXQgaT10aGlzLnN0b3JlLnNlbGVjdCh0Yyx0aGlzLmNhcmRJZCkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLFllKGw9PiEhbCYmdGhpcy5pc0ltYWdlQ2FyZE1ldGFkYXRhKGwpKSxMKGw9PmwpLE1hKDEpKSxvPUx0KFtpLHRoaXMuc3RvcmUuc2VsZWN0KHhoLHRoaXMuY2FyZElkKV0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxMKChbbCxjXSk9PntsZXQgdT1sLnJ1bklkO3JldHVybiBjJiZjLmhhc093blByb3BlcnR5KHUpP2NbdV06W119KSx5aSgobCxjKT0+bC5sZW5ndGg9PT1jLmxlbmd0aCYmMD09PWwubGVuZ3RofHxsPT09YyksTWEoMSkpO3RoaXMuc3RlcEluZGV4JD10aGlzLnN0b3JlLnNlbGVjdCh0SCx0aGlzLmNhcmRJZCkucGlwZShMKGw9Pmw/bC5pbmRleDpudWxsKSksdGhpcy5pc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQkPXRoaXMuc3RvcmUuc2VsZWN0KHRILHRoaXMuY2FyZElkKS5waXBlKEwobD0+ISFsJiZsLmlzQ2xvc2VzdCkpLHRoaXMubG9hZFN0YXRlJD10aGlzLnN0b3JlLnNlbGVjdChiaCx0aGlzLmNhcmRJZCksdGhpcy50YWckPWkucGlwZShMKGw9PmwudGFnKSksdGhpcy50aXRsZSQ9dGhpcy50YWckLnBpcGUoTChsPT5seShsLHRoaXMuZ3JvdXBOYW1lKSkpLHRoaXMucnVuSWQkPWkucGlwZShMKGw9PmwucnVuSWQpKSx0aGlzLnNhbXBsZSQ9aS5waXBlKEwobD0+bC5zYW1wbGUpKSx0aGlzLm51bVNhbXBsZSQ9aS5waXBlKEwobD0+bC5udW1TYW1wbGUpKSx0aGlzLnN0ZXBzJD10aGlzLnN0b3JlLnNlbGVjdChnZWUsdGhpcy5jYXJkSWQpLHRoaXMuaXNQaW5uZWQkPXRoaXMuc3RvcmUuc2VsZWN0KENoLHRoaXMuY2FyZElkKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kPXRoaXMuc3RvcmUuc2VsZWN0KFhtKS5waXBlKGZyKHRoaXMuc3RlcHMkKSxMKChbbCxjXSk9Pmw/UWgobCxNYXRoLm1pbiguLi5jKSxNYXRoLm1heCguLi5jKSk6bnVsbCkpLHRoaXMuc2VsZWN0ZWRTdGVwcyQ9dGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJC5waXBlKGZyKHRoaXMuc3RlcHMkKSxMKChbbCxjXSk9Pmw/bnVsbD09PWwuZW5kU3RlcD8tMSE9PWMuaW5kZXhPZihsLnN0YXJ0U3RlcCk/W2wuc3RhcnRTdGVwXTpbXTpjLmZpbHRlcih1PT51Pj1sLnN0YXJ0U3RlcCYmdTw9bC5lbmRTdGVwKTpbXSkpO2xldCBhPUx0KFtvLHRoaXMuc3RlcEluZGV4JF0pLnBpcGUoTCgoW2wsY10pPT5udWxsIT09YyYmbFtjXT9sW2NdOm51bGwpKTt0aGlzLmltYWdlVXJsJD1hLnBpcGUoTChsPT5sP3RoaXMuZGF0YVNvdXJjZS5pbWFnZVVybChsLmltYWdlSWQpOm51bGwpKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpLE0oJHUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJpbWFnZS1jYXJkIl1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxNyx2YXJzOjUwLGNvbnN0czpbWzMsImxvYWRTdGF0ZSIsInRpdGxlIiwidGFnIiwicnVuSWQiLCJzYW1wbGUiLCJudW1TYW1wbGUiLCJpbWFnZVVybCIsInN0ZXBJbmRleCIsInN0ZXBzIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIiwiYnJpZ2h0bmVzc0luTWlsbGkiLCJjb250cmFzdEluTWlsbGkiLCJydW5Db2xvclNjYWxlIiwic2hvd0FjdHVhbFNpemUiLCJhbGxvd1RvZ2dsZUFjdHVhbFNpemUiLCJpc1Bpbm5lZCIsImxpbmtlZFRpbWVTZWxlY3Rpb24iLCJzZWxlY3RlZFN0ZXBzIiwic3RlcEluZGV4Q2hhbmdlIiwib25BY3R1YWxTaXplVG9nZ2xlIiwib25QaW5DbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJpbWFnZS1jYXJkLWNvbXBvbmVudCIsMCksUCgic3RlcEluZGV4Q2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblN0ZXBJbmRleENoYW5nZWQobyl9KSgib25BY3R1YWxTaXplVG9nZ2xlIixmdW5jdGlvbigpe3JldHVybiBpLm9uQWN0dWFsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLEIoNiwiYXN5bmMiKSxCKDcsImFzeW5jIiksQig4LCJhc3luYyIpLEIoOSwiYXN5bmMiKSxCKDEwLCJhc3luYyIpLEIoMTEsImFzeW5jIiksQigxMiwiYXN5bmMiKSxCKDEzLCJhc3luYyIpLEIoMTQsImFzeW5jIiksQigxNSwiYXN5bmMiKSxCKDE2LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJsb2FkU3RhdGUiLFUoMSwxOCxpLmxvYWRTdGF0ZSQpKSgidGl0bGUiLFUoMiwyMCxpLnRpdGxlJCkpKCJ0YWciLFUoMywyMixpLnRhZyQpKSgicnVuSWQiLFUoNCwyNCxpLnJ1bklkJCkpKCJzYW1wbGUiLFUoNSwyNixpLnNhbXBsZSQpKSgibnVtU2FtcGxlIixVKDYsMjgsaS5udW1TYW1wbGUkKSkoImltYWdlVXJsIixVKDcsMzAsaS5pbWFnZVVybCQpKSgic3RlcEluZGV4IixVKDgsMzIsaS5zdGVwSW5kZXgkKSkoInN0ZXBzIixVKDksMzQsaS5zdGVwcyQpKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixVKDEwLDM2LGkuaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkJCkpKCJicmlnaHRuZXNzSW5NaWxsaSIsVSgxMSwzOCxpLmJyaWdodG5lc3NJbk1pbGxpJCkpKCJjb250cmFzdEluTWlsbGkiLFUoMTIsNDAsaS5jb250cmFzdEluTWlsbGkkKSkoInJ1bkNvbG9yU2NhbGUiLGkucnVuQ29sb3JTY2FsZSkoInNob3dBY3R1YWxTaXplIixpLnNob3dBY3R1YWxTaXplKSgiYWxsb3dUb2dnbGVBY3R1YWxTaXplIiwhMT09PVUoMTMsNDIsaS5hY3R1YWxTaXplR2xvYmFsU2V0dGluZyQpKSgiaXNQaW5uZWQiLFUoMTQsNDQsaS5pc1Bpbm5lZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVSgxNSw0NixpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSkoInNlbGVjdGVkU3RlcHMiLFUoMTYsNDgsaS5zZWxlY3RlZFN0ZXBzJCkpfSxkZXBlbmRlbmNpZXM6W3RzZSxHZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGRyPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5TVkc9MF09IlNWRyIsbltuLldFQkdMPTFdPSJXRUJHTCJ9KGRyfHwoZHI9e30pKSxkcikpKCksTnI9KCgpPT4oZnVuY3Rpb24obil7bltuLkxJTkVBUj0wXT0iTElORUFSIixuW24uTE9HMTA9MV09IkxPRzEwIixuW24uVElNRT0yXT0iVElNRSJ9KE5yfHwoTnI9e30pKSxOcikpKCksR3I9KCgpPT4oZnVuY3Rpb24obil7bi5OT05FPSJOT05FIixuLkRSQUdfWk9PTUlORz0iRFJBR19aT09NSU5HIixuLlNDUk9MTF9aT09NSU5HPSJTQ1JPTExfWk9PTUlORyIsbi5QQU5OSU5HPSJQQU5OSU5HIn0oR3J8fChHcj17fSkpLEdyKSkoKTtmdW5jdGlvbiBkNGUobix0KXsxJm4mJihfKDAsInNwYW4iKSxBKDEsInNjYWxhciIpLHYoKSl9ZnVuY3Rpb24gcDRlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiksQSgxLCJoaXN0b2dyYW0iKSx2KCkpfWZ1bmN0aW9uIGg0ZShuLHQpezEmbiYmKF8oMCwic3BhbiIpLEEoMSwidW5rbm93biIpLHYoKSl9ZnVuY3Rpb24gZjRlKG4sdCl7aWYoMSZuJiYoc24oMCwxMyksRSgxLGQ0ZSwyLDAsInNwYW4iLDE0KSxFKDIscDRlLDIsMCwic3BhbiIsMTQpLEUoMyxoNGUsMiwwLCJzcGFuIiwxNSksYW4oKSksMiZuKXtsZXQgZT1TKDIpO3koIm5nU3dpdGNoIixlLmNhcmRNZXRhZGF0YS5wbHVnaW4pLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUyksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19ZnVuY3Rpb24gbTRlKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBnNGUobix0KXtpZigxJm4mJihfKDAsIm9wdGlvbiIsMTYpLEEoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3koInZhbHVlIixlLmlkKSxDKDEpLHl0KGUubmFtZSl9fWZ1bmN0aW9uIF80ZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtzbigwKSxfKDEsImgyIiksRSgyLGY0ZSw0LDMsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpLF8oNCwic3BhbiIpLEEoNSwiRG93bmxvYWRceGEwIiksdigpLEUoNixtNGUsMSwwLCJuZy1jb250YWluZXIiLDMpLF8oNywic3BhbiIpLEEoOCwiXHhhMGRhdGEgZm9yXHhhMCIpLHYoKSxfKDksImNvZGUiLDQpLEEoMTApLHYoKSgpLF8oMTEsIm1hdC1kaWFsb2ctY29udGVudCIpKDEyLCJtYXQtZm9ybS1maWVsZCIsNSkoMTMsIm1hdC1sYWJlbCIpLEEoMTQsIlNlbGVjdCBhIHJ1biB0byBkb3dubG9hZCBhIGRhdGEgZm9yIGEgc2VyaWVzIiksdigpLF8oMTUsInNlbGVjdCIsNiksUCgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLnJ1blNlbGVjdGVkLmVtaXQoci50YXJnZXQudmFsdWUpKX0pLF8oMTYsIm9wdGlvbiIsNyksQSgxNywiLSIpLHYoKSxFKDE4LGc0ZSwyLDIsIm9wdGlvbiIsOCksdigpKCksXygxOSwiZGl2Iiw5KSgyMCwic3BhbiIpLEEoMjEsIkRvd25sb2FkIGFzXHUyMDI2IiksdigpLEEoMjIsIlx4YTAiKSxfKDIzLCJhIiwxMCksQSgyNCwiSlNPTiIpLHYoKSxfKDI1LCJhIiwxMCksQSgyNiwiQ1NWIiksdigpKCkoKSxfKDI3LCJtYXQtZGlhbG9nLWFjdGlvbnMiLDExKSgyOCwiYnV0dG9uIiwxMiksQSgyOSwiQ2xvc2UiKSx2KCkoKSxhbigpfWlmKDImbil7bGV0IGU9JGUoMyksaT1TKCk7Qyg2KSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlKSxDKDMpLHkoInRpdGxlIixpLmNhcmRNZXRhZGF0YS50YWcpLEMoMSkseXQoaS5jYXJkTWV0YWRhdGEudGFnKSxDKDUpLHkoInZhbHVlIixpLnNlbGVjdGVkUnVuSWR8fCIiKSxDKDEpLHkoInZhbHVlIiwiIiksQygyKSx5KCJuZ0Zvck9mIixpLnJ1bnMpLEMoNSkseSgiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsSnNvbikoImRvd25sb2FkIixpLmdldERvd25sb2FkTmFtZSgianNvbiIpKSx6ZSgiaHJlZiIsaS5kb3dubG9hZFVybEpzb24semwpLEMoMikseSgiZGlzYWJsZWQiLCFpLmRvd25sb2FkVXJsQ3N2KSgiZG93bmxvYWQiLGkuZ2V0RG93bmxvYWROYW1lKCJjc3YiKSksemUoImhyZWYiLGkuZG93bmxvYWRVcmxDc3YsemwpfX1mdW5jdGlvbiB2NGUobix0KXsxJm4mJkEoMCwiTG9hZGluZy4uLiIpfXZhciByc2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMucnVuU2VsZWN0ZWQ9bmV3IEcsdGhpcy5QbHVnaW5UeXBlPXJpfWdldERvd25sb2FkTmFtZShlKXtsZXQgaT10aGlzLnJ1bnMuZmluZChyPT5yLmlkPT09dGhpcy5zZWxlY3RlZFJ1bklkKTtyZXR1cm4gaT9gJHtpLm5hbWV9LiR7ZX1gOiIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJkYXRhX2Rvd25sb2FkX2RpYWxvZ19jb21wb25lbnQiXV0saW5wdXRzOntjYXJkTWV0YWRhdGE6ImNhcmRNZXRhZGF0YSIscnVuczoicnVucyIsc2VsZWN0ZWRSdW5JZDoic2VsZWN0ZWRSdW5JZCIsZG93bmxvYWRVcmxDc3Y6ImRvd25sb2FkVXJsQ3N2Iixkb3dubG9hZFVybEpzb246ImRvd25sb2FkVXJsSnNvbiJ9LG91dHB1dHM6e3J1blNlbGVjdGVkOiJydW5TZWxlY3RlZCJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9DYXJkTWV0YWRhdGEiLCIiXSxbImRhdGFOYW1lIiwiIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwidGFnLW5hbWUiLDMsInRpdGxlIl0sWyJhcHBlYXJhbmNlIiwiZmlsbCIsMSwicnVuLXNlbGVjdG9yIl0sWyJtYXROYXRpdmVDb250cm9sIiwiIiwibmFtZSIsInJ1biIsImNka0ZvY3VzSW5pdGlhbCIsIiIsInJlcXVpcmVkIiwiIiwzLCJ2YWx1ZSIsImNoYW5nZSJdLFsic2VsZWN0ZWQiLCIiLDMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZG93bmxvYWQtY29udHJvbHMiXSxbIm1hdC1zdHJva2VkLWJ1dHRvbiIsIiIsMywiZGlzYWJsZWQiLCJkb3dubG9hZCJdLFsiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJOZ1N3aXRjaERlZmF1bHQiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihFKDAsXzRlLDMwLDEyLCJuZy1jb250YWluZXIiLDApLEUoMSx2NGUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLHF0KSksMiZlKXtsZXQgcj0kZSgyKTt5KCJuZ0lmIixpLmNhcmRNZXRhZGF0YSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbZG4sQmUsb3MsQ3IsVXIsRG5lLEluZSxfbixJdixUMixEMixBMixwZCxOdixVaF0sc3R5bGVzOlsiaDJbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxLjI1ZW07b3ZlcmZsb3ctd3JhcDpicmVhay13b3JkfS5ydW4tc2VsZWN0b3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO3dpZHRoOjEwMCV9LmRvd25sb2FkLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjllbX0uZG93bmxvYWQtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjNweCAxMHB4IDNweCAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksb3NlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIpe3RoaXMuc2VsZWN0ZWRSdW5JZCQ9bmV3IGhyKG51bGwpLHRoaXMuY2FyZE1ldGFkYXRhJD1lLnNlbGVjdCh0YyxyLmNhcmRJZCkucGlwZShZZShvPT5Cb29sZWFuKG8pKSksdGhpcy5kb3dubG9hZFVybENzdiQ9THQoW2Uuc2VsZWN0KHRjLHIuY2FyZElkKSx0aGlzLnNlbGVjdGVkUnVuSWQkXSkucGlwZShMKChbbyxzXSk9Pm8mJnM/aS5kb3dubG9hZFVybChvLnBsdWdpbixvLnRhZyxzLCJjc3YiKTpudWxsKSx6bihudWxsKSksdGhpcy5kb3dubG9hZFVybEpzb24kPUx0KFtlLnNlbGVjdCh0YyxyLmNhcmRJZCksdGhpcy5zZWxlY3RlZFJ1bklkJF0pLnBpcGUoTCgoW28sc10pPT5vJiZzP2kuZG93bmxvYWRVcmwoby5wbHVnaW4sby50YWcscywianNvbiIpOm51bGwpLHpuKG51bGwpKSx0aGlzLnJ1bnMkPUx0KFtlLnNlbGVjdChxSSksZS5zZWxlY3QoeGgsci5jYXJkSWQpXSkucGlwZShMKChbbyxzXSk9PnM/T2JqZWN0LmtleXMocykubWFwKGE9Pm8uZ2V0KGEpKS5maWx0ZXIoQm9vbGVhbik6W10pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTSgkdSksTShjdykpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImRhdGFfZG93bmxvYWRfZGlhbG9nIl1dLGRlY2xzOjYsdmFyczoxNSxjb25zdHM6W1szLCJjYXJkTWV0YWRhdGEiLCJydW5zIiwic2VsZWN0ZWRSdW5JZCIsImRvd25sb2FkVXJsQ3N2IiwiZG93bmxvYWRVcmxKc29uIiwicnVuU2VsZWN0ZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRhdGFfZG93bmxvYWRfZGlhbG9nX2NvbXBvbmVudCIsMCksUCgicnVuU2VsZWN0ZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnNlbGVjdGVkUnVuSWQkLm5leHQobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJjYXJkTWV0YWRhdGEiLFUoMSw1LGkuY2FyZE1ldGFkYXRhJCkpKCJydW5zIixVKDIsNyxpLnJ1bnMkKSkoInNlbGVjdGVkUnVuSWQiLFUoMyw5LGkuc2VsZWN0ZWRSdW5JZCQpKSgiZG93bmxvYWRVcmxDc3YiLFUoNCwxMSxpLmRvd25sb2FkVXJsQ3N2JCkpKCJkb3dubG9hZFVybEpzb24iLFUoNSwxMyxpLmRvd25sb2FkVXJsSnNvbiQpKX0sZGVwZW5kZW5jaWVzOltyc2UsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIHVjKG4sdCl7cmV0dXJuIG48dD8tMTpuPnQ/MTpuPj10PzA6TmFOfWZ1bmN0aW9uIEJ3KG4pe3JldHVybiAxPT09bi5sZW5ndGgmJihuPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiB1YyhuKHQpLGUpfX0obikpLHtsZWZ0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk8MD9pPW8rMTpyPW99cmV0dXJuIGl9LHJpZ2h0OmZ1bmN0aW9uKHQsZSxpLHIpe2ZvcihudWxsPT1pJiYoaT0wKSxudWxsPT1yJiYocj10Lmxlbmd0aCk7aTxyOyl7dmFyIG89aStyPj4+MTtuKHRbb10sZSk+MD9yPW86aT1vKzF9cmV0dXJuIGl9fX12YXIgaXU9QncodWMpLnJpZ2h0O2Z1bmN0aW9uIHhSKG4sdCl7dmFyIHIsbyxzLGU9bi5sZW5ndGgsaT0tMTtpZihudWxsPT10KXtmb3IoOysraTxlOylpZihudWxsIT0ocj1uW2ldKSYmcj49cilmb3Iobz1zPXI7KytpPGU7KW51bGwhPShyPW5baV0pJiYobz5yJiYobz1yKSxzPHImJihzPXIpKX1lbHNlIGZvcig7KytpPGU7KWlmKG51bGwhPShyPXQobltpXSxpLG4pKSYmcj49cilmb3Iobz1zPXI7KytpPGU7KW51bGwhPShyPXQobltpXSxpLG4pKSYmKG8+ciYmKG89ciksczxyJiYocz1yKSk7cmV0dXJuW28sc119dmFyIGNzZT1BcnJheS5wcm90b3R5cGUuc2xpY2U7ZnVuY3Rpb24gVncobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fWZ1bmN0aW9uIHVzZShuKXtyZXR1cm4gbn1mdW5jdGlvbiBLaChuLHQsZSl7bj0rbix0PSt0LGU9KHI9YXJndW1lbnRzLmxlbmd0aCk8Mj8odD1uLG49MCwxKTpyPDM/MTorZTtmb3IodmFyIGk9LTEscj0wfE1hdGgubWF4KDAsTWF0aC5jZWlsKCh0LW4pL2UpKSxvPW5ldyBBcnJheShyKTsrK2k8cjspb1tpXT1uK2kqZTtyZXR1cm4gb312YXIgUlU9TWF0aC5zcXJ0KDUwKSxPVT1NYXRoLnNxcnQoMTApLGtVPU1hdGguc3FydCgyKTtmdW5jdGlvbiBIdyhuLHQsZSl7dmFyIGksbyxzLGEscj0tMTtpZihlPStlLChuPStuKT09KHQ9K3QpJiZlPjApcmV0dXJuW25dO2lmKChpPXQ8bikmJihvPW4sbj10LHQ9byksMD09PShhPXB5KG4sdCxlKSl8fCFpc0Zpbml0ZShhKSlyZXR1cm5bXTtpZihhPjApZm9yKG49TWF0aC5jZWlsKG4vYSksdD1NYXRoLmZsb29yKHQvYSkscz1uZXcgQXJyYXkobz1NYXRoLmNlaWwodC1uKzEpKTsrK3I8bzspc1tyXT0obityKSphO2Vsc2UgZm9yKG49TWF0aC5mbG9vcihuKmEpLHQ9TWF0aC5jZWlsKHQqYSkscz1uZXcgQXJyYXkobz1NYXRoLmNlaWwobi10KzEpKTsrK3I8bzspc1tyXT0obi1yKS9hO3JldHVybiBpJiZzLnJldmVyc2UoKSxzfWZ1bmN0aW9uIHB5KG4sdCxlKXt2YXIgaT0odC1uKS9NYXRoLm1heCgwLGUpLHI9TWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApLG89aS9NYXRoLnBvdygxMCxyKTtyZXR1cm4gcj49MD8obz49UlU/MTA6bz49T1U/NTpvPj1rVT8yOjEpKk1hdGgucG93KDEwLHIpOi1NYXRoLnBvdygxMCwtcikvKG8+PVJVPzEwOm8+PU9VPzU6bz49a1U/MjoxKX1mdW5jdGlvbiB2ZChuLHQsZSl7dmFyIGk9TWF0aC5hYnModC1uKS9NYXRoLm1heCgwLGUpLHI9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKSxvPWkvcjtyZXR1cm4gbz49UlU/cio9MTA6bz49T1U/cio9NTpvPj1rVSYmKHIqPTIpLHQ8bj8tcjpyfWZ1bmN0aW9uIENSKG4pe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2cobi5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIE1SKCl7dmFyIG49dXNlLHQ9eFIsZT1DUjtmdW5jdGlvbiBpKHIpe3ZhciBvLGEscz1yLmxlbmd0aCxsPW5ldyBBcnJheShzKTtmb3Iobz0wO288czsrK28pbFtvXT1uKHJbb10sbyxyKTt2YXIgYz10KGwpLHU9Y1swXSxkPWNbMV0scD1lKGwsdSxkKTtBcnJheS5pc0FycmF5KHApfHwocD12ZCh1LGQscCkscD1LaChNYXRoLmNlaWwodS9wKSpwLGQscCkpO2Zvcih2YXIgaD1wLmxlbmd0aDtwWzBdPD11OylwLnNoaWZ0KCksLS1oO2Zvcig7cFtoLTFdPmQ7KXAucG9wKCksLS1oO3ZhciBtLGY9bmV3IEFycmF5KGgrMSk7Zm9yKG89MDtvPD1oOysrbykobT1mW29dPVtdKS54MD1vPjA/cFtvLTFdOnUsbS54MT1vPGg/cFtvXTpkO2ZvcihvPTA7bzxzOysrbyl1PD0oYT1sW29dKSYmYTw9ZCYmZltpdShwLGEsMCxoKV0ucHVzaChyW29dKTtyZXR1cm4gZn1yZXR1cm4gaS52YWx1ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOlZ3KHIpLGkpOm59LGkuZG9tYWluPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiByP3I6VncoW3JbMF0sclsxXV0pLGkpOnR9LGkudGhyZXNob2xkcz1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOkFycmF5LmlzQXJyYXkocik/VncoY3NlLmNhbGwocikpOlZ3KHIpLGkpOmV9LGl9dmFyIHdSPUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBkc2Uobil7cmV0dXJuIG59ZnVuY3Rpb24gRDRlKG4pe3JldHVybiJ0cmFuc2xhdGUoIisobisuNSkrIiwwKSJ9ZnVuY3Rpb24gQTRlKG4pe3JldHVybiJ0cmFuc2xhdGUoMCwiKyhuKy41KSsiKSJ9ZnVuY3Rpb24gSTRlKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4rbih0KX19ZnVuY3Rpb24gUDRlKG4pe3ZhciB0PU1hdGgubWF4KDAsbi5iYW5kd2lkdGgoKS0xKS8yO3JldHVybiBuLnJvdW5kKCkmJih0PU1hdGgucm91bmQodCkpLGZ1bmN0aW9uKGUpe3JldHVybituKGUpK3R9fWZ1bmN0aW9uIFI0ZSgpe3JldHVybiF0aGlzLl9fYXhpc31mdW5jdGlvbiBCVShuLHQpe3ZhciBlPVtdLGk9bnVsbCxyPW51bGwsbz02LHM9NixhPTMsbD0xPT09bnx8ND09PW4/LTE6MSxjPTQ9PT1ufHwyPT09bj8ieCI6InkiLHU9MT09PW58fDM9PT1uP0Q0ZTpBNGU7ZnVuY3Rpb24gZChwKXt2YXIgaD1pPz8odC50aWNrcz90LnRpY2tzLmFwcGx5KHQsZSk6dC5kb21haW4oKSksZj1yPz8odC50aWNrRm9ybWF0P3QudGlja0Zvcm1hdC5hcHBseSh0LGUpOmRzZSksbT1NYXRoLm1heChvLDApK2EseD10LnJhbmdlKCksZz0reFswXSsuNSxiPSt4W3gubGVuZ3RoLTFdKy41LEQ9KHQuYmFuZHdpZHRoP1A0ZTpJNGUpKHQuY29weSgpKSxUPXAuc2VsZWN0aW9uP3Auc2VsZWN0aW9uKCk6cCxrPVQuc2VsZWN0QWxsKCIuZG9tYWluIikuZGF0YShbbnVsbF0pLFo9VC5zZWxlY3RBbGwoIi50aWNrIikuZGF0YShoLHQpLm9yZGVyKCksej1aLmV4aXQoKSxmZT1aLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJ0aWNrIiksdWU9Wi5zZWxlY3QoImxpbmUiKSxoZT1aLnNlbGVjdCgidGV4dCIpO2s9ay5tZXJnZShrLmVudGVyKCkuaW5zZXJ0KCJwYXRoIiwiLnRpY2siKS5hdHRyKCJjbGFzcyIsImRvbWFpbiIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpKSxaPVoubWVyZ2UoZmUpLHVlPXVlLm1lcmdlKGZlLmFwcGVuZCgibGluZSIpLmF0dHIoInN0cm9rZSIsImN1cnJlbnRDb2xvciIpLmF0dHIoYysiMiIsbCpvKSksaGU9aGUubWVyZ2UoZmUuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZmlsbCIsImN1cnJlbnRDb2xvciIpLmF0dHIoYyxsKm0pLmF0dHIoImR5IiwxPT09bj8iMGVtIjozPT09bj8iMC43MWVtIjoiMC4zMmVtIikpLHAhPT1UJiYoaz1rLnRyYW5zaXRpb24ocCksWj1aLnRyYW5zaXRpb24ocCksdWU9dWUudHJhbnNpdGlvbihwKSxoZT1oZS50cmFuc2l0aW9uKHApLHo9ei50cmFuc2l0aW9uKHApLmF0dHIoIm9wYWNpdHkiLDFlLTYpLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24odyl7cmV0dXJuIGlzRmluaXRlKHc9RCh3KSk/dSh3KTp0aGlzLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIil9KSxmZS5hdHRyKCJvcGFjaXR5IiwxZS02KS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHcpe3ZhciBGPXRoaXMucGFyZW50Tm9kZS5fX2F4aXM7cmV0dXJuIHUoRiYmaXNGaW5pdGUoRj1GKHcpKT9GOkQodykpfSkpLHoucmVtb3ZlKCksay5hdHRyKCJkIiw0PT09bnx8Mj09bj9zPyJNIitsKnMrIiwiK2crIkgwLjVWIitiKyJIIitsKnM6Ik0wLjUsIitnKyJWIitiOnM/Ik0iK2crIiwiK2wqcysiVjAuNUgiK2IrIlYiK2wqczoiTSIrZysiLDAuNUgiK2IpLFouYXR0cigib3BhY2l0eSIsMSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbih3KXtyZXR1cm4gdShEKHcpKX0pLHVlLmF0dHIoYysiMiIsbCpvKSxoZS5hdHRyKGMsbCptKS50ZXh0KGYpLFQuZmlsdGVyKFI0ZSkuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJmb250LXNpemUiLDEwKS5hdHRyKCJmb250LWZhbWlseSIsInNhbnMtc2VyaWYiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsMj09PW4/InN0YXJ0Ijo0PT09bj8iZW5kIjoibWlkZGxlIiksVC5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5fX2F4aXM9RH0pfXJldHVybiBkLnNjYWxlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXAsZCk6dH0sZC50aWNrcz1mdW5jdGlvbigpe3JldHVybiBlPXdSLmNhbGwoYXJndW1lbnRzKSxkfSxkLnRpY2tBcmd1bWVudHM9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bnVsbD09cD9bXTp3Ui5jYWxsKHApLGQpOmUuc2xpY2UoKX0sZC50aWNrVmFsdWVzPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXA/bnVsbDp3Ui5jYWxsKHApLGQpOmkmJmkuc2xpY2UoKX0sZC50aWNrRm9ybWF0PWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXAsZCk6cn0sZC50aWNrU2l6ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1zPStwLGQpOm99LGQudGlja1NpemVJbm5lcj1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rcCxkKTpvfSxkLnRpY2tTaXplT3V0ZXI9ZnVuY3Rpb24ocCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3AsZCk6c30sZC50aWNrUGFkZGluZz1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0rcCxkKTphfSxkfWZ1bmN0aW9uIHp3KG4pe3JldHVybiBCVSgyLG4pfWZ1bmN0aW9uIGp3KG4pe3JldHVybiBCVSgzLG4pfXZhciBPNGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gZnNlKCl7Zm9yKHZhciBpLG49MCx0PWFyZ3VtZW50cy5sZW5ndGgsZT17fTtuPHQ7KytuKXtpZighKGk9YXJndW1lbnRzW25dKyIiKXx8aSBpbiBlfHwvW1xzLl0vLnRlc3QoaSkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIraSk7ZVtpXT1bXX1yZXR1cm4gbmV3IEVSKGUpfWZ1bmN0aW9uIEVSKG4pe3RoaXMuXz1ufWZ1bmN0aW9uIGs0ZShuLHQpe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oZSl7dmFyIGk9IiIscj1lLmluZGV4T2YoIi4iKTtpZihyPj0wJiYoaT1lLnNsaWNlKHIrMSksZT1lLnNsaWNlKDAscikpLGUmJiF0Lmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2UpO3JldHVybnt0eXBlOmUsbmFtZTppfX0pfWZ1bmN0aW9uIEY0ZShuLHQpe2Zvcih2YXIgcixlPTAsaT1uLmxlbmd0aDtlPGk7KytlKWlmKChyPW5bZV0pLm5hbWU9PT10KXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIGhzZShuLHQsZSl7Zm9yKHZhciBpPTAscj1uLmxlbmd0aDtpPHI7KytpKWlmKG5baV0ubmFtZT09PXQpe25baV09TzRlLG49bi5zbGljZSgwLGkpLmNvbmNhdChuLnNsaWNlKGkrMSkpO2JyZWFrfXJldHVybiBudWxsIT1lJiZuLnB1c2goe25hbWU6dCx2YWx1ZTplfSksbn1FUi5wcm90b3R5cGU9ZnNlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6RVIsb246ZnVuY3Rpb24obix0KXt2YXIgcixlPXRoaXMuXyxpPWs0ZShuKyIiLGUpLG89LTEscz1pLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPXQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIit0KTtmb3IoOysrbzxzOylpZihyPShuPWlbb10pLnR5cGUpZVtyXT1oc2UoZVtyXSxuLm5hbWUsdCk7ZWxzZSBpZihudWxsPT10KWZvcihyIGluIGUpZVtyXT1oc2UoZVtyXSxuLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK288czspaWYoKHI9KG49aVtvXSkudHlwZSkmJihyPUY0ZShlW3JdLG4ubmFtZSkpKXJldHVybiByfSxjb3B5OmZ1bmN0aW9uKCl7dmFyIG49e30sdD10aGlzLl87Zm9yKHZhciBlIGluIHQpbltlXT10W2VdLnNsaWNlKCk7cmV0dXJuIG5ldyBFUihuKX0sY2FsbDpmdW5jdGlvbihuLHQpe2lmKChyPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIHIsbyxlPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSllW2ldPWFyZ3VtZW50c1tpKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkobikpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrbik7Zm9yKGk9MCxyPShvPXRoaXMuX1tuXSkubGVuZ3RoO2k8cjsrK2kpb1tpXS52YWx1ZS5hcHBseSh0LGUpfSxhcHBseTpmdW5jdGlvbihuLHQsZSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShuKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIituKTtmb3IodmFyIGk9dGhpcy5fW25dLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3IpaVtyXS52YWx1ZS5hcHBseSh0LGUpfX07dmFyIEd3PWZzZSxUUj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsSFU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOlRSLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gZHAobil7dmFyIHQ9bis9IiIsZT10LmluZGV4T2YoIjoiKTtyZXR1cm4gZT49MCYmInhtbG5zIiE9PSh0PW4uc2xpY2UoMCxlKSkmJihuPW4uc2xpY2UoZSsxKSksSFUuaGFzT3duUHJvcGVydHkodCk/e3NwYWNlOkhVW3RdLGxvY2FsOm59Om59ZnVuY3Rpb24gTjRlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudCxlPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBlPT09VFImJnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PVRSP3QuY3JlYXRlRWxlbWVudChuKTp0LmNyZWF0ZUVsZW1lbnROUyhlLG4pfX1mdW5jdGlvbiBMNGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobi5zcGFjZSxuLmxvY2FsKX19ZnVuY3Rpb24gRFIobil7dmFyIHQ9ZHAobik7cmV0dXJuKHQubG9jYWw/TDRlOk40ZSkodCl9ZnVuY3Rpb24gQjRlKCl7fWZ1bmN0aW9uIGdnKG4pe3JldHVybiBudWxsPT1uP0I0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Iobil9fWZ1bmN0aW9uIFY0ZSgpe3JldHVybltdfWZ1bmN0aW9uIFd3KG4pe3JldHVybiBudWxsPT1uP1Y0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwobil9fWZ1bmN0aW9uIHF3KG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMobil9fWZ1bmN0aW9uIEFSKG4pe3JldHVybiBuZXcgQXJyYXkobi5sZW5ndGgpfWZ1bmN0aW9uIFl3KG4sdCl7dGhpcy5vd25lckRvY3VtZW50PW4ub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1uLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PW4sdGhpcy5fX2RhdGFfXz10fWZ1bmN0aW9uIEg0ZShuLHQsZSxpLHIsbyl7Zm9yKHZhciBhLHM9MCxsPXQubGVuZ3RoLGM9by5sZW5ndGg7czxjOysrcykoYT10W3NdKT8oYS5fX2RhdGFfXz1vW3NdLGlbc109YSk6ZVtzXT1uZXcgWXcobixvW3NdKTtmb3IoO3M8bDsrK3MpKGE9dFtzXSkmJihyW3NdPWEpfWZ1bmN0aW9uIFU0ZShuLHQsZSxpLHIsbyxzKXt2YXIgYSxsLGgsYz17fSx1PXQubGVuZ3RoLGQ9by5sZW5ndGgscD1uZXcgQXJyYXkodSk7Zm9yKGE9MDthPHU7KythKShsPXRbYV0pJiYocFthXT1oPSIkIitzLmNhbGwobCxsLl9fZGF0YV9fLGEsdCksaCBpbiBjP3JbYV09bDpjW2hdPWwpO2ZvcihhPTA7YTxkOysrYSkobD1jW2g9IiQiK3MuY2FsbChuLG9bYV0sYSxvKV0pPyhpW2FdPWwsbC5fX2RhdGFfXz1vW2FdLGNbaF09bnVsbCk6ZVthXT1uZXcgWXcobixvW2FdKTtmb3IoYT0wO2E8dTsrK2EpKGw9dFthXSkmJmNbcFthXV09PT1sJiYoclthXT1sKX1mdW5jdGlvbiB6NGUobix0KXtyZXR1cm4gbjx0Py0xOm4+dD8xOm4+PXQ/MDpOYU59ZnVuY3Rpb24gajRlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBHNGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBXNGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShuLHQpfX1mdW5jdGlvbiBxNGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCx0KX19ZnVuY3Rpb24gWTRlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZShuKTp0aGlzLnNldEF0dHJpYnV0ZShuLGUpfX1mdW5jdGlvbiBYNGUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxlKX19ZnVuY3Rpb24gSVIobil7cmV0dXJuIG4ub3duZXJEb2N1bWVudCYmbi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHxuLmRvY3VtZW50JiZufHxuLmRlZmF1bHRWaWV3fWZ1bmN0aW9uIFE0ZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfX1mdW5jdGlvbiBLNGUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfX1mdW5jdGlvbiBaNGUobix0LGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBpPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWk/dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuKTp0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4saSxlKX19ZnVuY3Rpb24gWmgobix0KXtyZXR1cm4gbi5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxJUihuKS5nZXRDb21wdXRlZFN0eWxlKG4sbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSh0KX1mdW5jdGlvbiBKNGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbbl19fWZ1bmN0aW9uICQ0ZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbbl09dH19ZnVuY3Rpb24gZUhlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT9kZWxldGUgdGhpc1tuXTp0aGlzW25dPWV9fWZ1bmN0aW9uIE5zZShuKXtyZXR1cm4gbi50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gVVUobil7cmV0dXJuIG4uY2xhc3NMaXN0fHxuZXcgTHNlKG4pfWZ1bmN0aW9uIExzZShuKXt0aGlzLl9ub2RlPW4sdGhpcy5fbmFtZXM9TnNlKG4uZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gQnNlKG4sdCl7Zm9yKHZhciBlPVVVKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5hZGQodFtpXSl9ZnVuY3Rpb24gVnNlKG4sdCl7Zm9yKHZhciBlPVVVKG4pLGk9LTEscj10Lmxlbmd0aDsrK2k8cjspZS5yZW1vdmUodFtpXSl9ZnVuY3Rpb24gdEhlKG4pe3JldHVybiBmdW5jdGlvbigpe0JzZSh0aGlzLG4pfX1mdW5jdGlvbiBuSGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7VnNlKHRoaXMsbil9fWZ1bmN0aW9uIGlIZShuLHQpe3JldHVybiBmdW5jdGlvbigpeyh0LmFwcGx5KHRoaXMsYXJndW1lbnRzKT9Cc2U6VnNlKSh0aGlzLG4pfX1mdW5jdGlvbiBySGUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG9IZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59fWZ1bmN0aW9uIHNIZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX1mdW5jdGlvbiBhSGUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBsSGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9bn19ZnVuY3Rpb24gY0hlKG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPXQ/PyIifX1mdW5jdGlvbiB1SGUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZEhlKCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gcEhlKCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gaEhlKCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO24mJm4ucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gZkhlKCl7dmFyIG49dGhpcy5jbG9uZU5vZGUoITEpLHQ9dGhpcy5wYXJlbnROb2RlO3JldHVybiB0P3QuaW5zZXJ0QmVmb3JlKG4sdGhpcy5uZXh0U2libGluZyk6bn1mdW5jdGlvbiBtSGUoKXt2YXIgbj10aGlzLmNsb25lTm9kZSghMCksdD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIHQ/dC5pbnNlcnRCZWZvcmUobix0aGlzLm5leHRTaWJsaW5nKTpufVl3LnByb3RvdHlwZT17Y29uc3RydWN0b3I6WXcsYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0aGlzLl9uZXh0KX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUobix0KX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Iobil9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKG4pfX0sTHNlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKG4pe3RoaXMuX25hbWVzLmluZGV4T2Yobik8MCYmKHRoaXMuX25hbWVzLnB1c2gobiksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWVzLmluZGV4T2Yobik7dD49MCYmKHRoaXMuX25hbWVzLnNwbGljZSh0LDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG4pPj0wfX07dmFyIFpzZT17fSxzaT1udWxsO2Z1bmN0aW9uIGdIZShuLHQsZSl7cmV0dXJuIG49SnNlKG4sdCxlKSxmdW5jdGlvbihpKXt2YXIgcj1pLnJlbGF0ZWRUYXJnZXQ7KCFyfHxyIT09dGhpcyYmISg4JnIuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykpKSYmbi5jYWxsKHRoaXMsaSl9fWZ1bmN0aW9uIEpzZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPXNpO3NpPWk7dHJ5e24uY2FsbCh0aGlzLHRoaXMuX19kYXRhX18sdCxlKX1maW5hbGx5e3NpPXJ9fX1mdW5jdGlvbiBfSGUobil7cmV0dXJuIG4udHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT0iIixpPXQuaW5kZXhPZigiLiIpO3JldHVybiBpPj0wJiYoZT10LnNsaWNlKGkrMSksdD10LnNsaWNlKDAsaSkpLHt0eXBlOnQsbmFtZTplfX0pfWZ1bmN0aW9uIHZIZShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9fb247aWYodCl7Zm9yKHZhciBvLGU9MCxpPS0xLHI9dC5sZW5ndGg7ZTxyOysrZSlvPXRbZV0sbi50eXBlJiZvLnR5cGUhPT1uLnR5cGV8fG8ubmFtZSE9PW4ubmFtZT90WysraV09bzp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLG8ubGlzdGVuZXIsby5jYXB0dXJlKTsrK2k/dC5sZW5ndGg9aTpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24geUhlKG4sdCxlKXt2YXIgaT1ac2UuaGFzT3duUHJvcGVydHkobi50eXBlKT9nSGU6SnNlO3JldHVybiBmdW5jdGlvbihyLG8scyl7dmFyIGwsYT10aGlzLl9fb24sYz1pKHQsbyxzKTtpZihhKWZvcih2YXIgdT0wLGQ9YS5sZW5ndGg7dTxkOysrdSlpZigobD1hW3VdKS50eXBlPT09bi50eXBlJiZsLm5hbWU9PT1uLm5hbWUpcmV0dXJuIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcixsLmNhcHR1cmUpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihsLnR5cGUsbC5saXN0ZW5lcj1jLGwuY2FwdHVyZT1lKSx2b2lkKGwudmFsdWU9dCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKG4udHlwZSxjLGUpLGw9e3R5cGU6bi50eXBlLG5hbWU6bi5uYW1lLHZhbHVlOnQsbGlzdGVuZXI6YyxjYXB0dXJlOmV9LGE/YS5wdXNoKGwpOnRoaXMuX19vbj1bbF19fWZ1bmN0aW9uIGVhZShuLHQsZSl7dmFyIGk9SVIobikscj1pLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiByP3I9bmV3IHIodCxlKToocj1pLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGU/KHIuaW5pdEV2ZW50KHQsZS5idWJibGVzLGUuY2FuY2VsYWJsZSksci5kZXRhaWw9ZS5kZXRhaWwpOnIuaW5pdEV2ZW50KHQsITEsITEpKSxuLmRpc3BhdGNoRXZlbnQocil9ZnVuY3Rpb24gYkhlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVhZSh0aGlzLG4sdCl9fWZ1bmN0aW9uIHhIZShuLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlYWUodGhpcyxuLHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19dHlwZW9mIGRvY3VtZW50PCJ1IiYmKCJvbm1vdXNlZW50ZXIiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHwoWnNlPXttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pKTt2YXIgalU9W251bGxdO2Z1bmN0aW9uIGFvKG4sdCl7dGhpcy5fZ3JvdXBzPW4sdGhpcy5fcGFyZW50cz10fWZ1bmN0aW9uIG5hZSgpe3JldHVybiBuZXcgYW8oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSxqVSl9YW8ucHJvdG90eXBlPW5hZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFvLHNlbGVjdDpmdW5jdGlvbihuKXsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Z2cobikpO2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPTA7cjxlOysrcilmb3IodmFyIGwsYyxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09bmV3IEFycmF5KHMpLHU9MDt1PHM7Kyt1KShsPW9bdV0pJiYoYz1uLmNhbGwobCxsLl9fZGF0YV9fLHUsbykpJiYoIl9fZGF0YV9fImluIGwmJihjLl9fZGF0YV9fPWwuX19kYXRhX18pLGFbdV09Yyk7cmV0dXJuIG5ldyBhbyhpLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVd3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1bXSxyPVtdLG89MDtvPGU7KytvKWZvcih2YXIgbCxzPXRbb10sYT1zLmxlbmd0aCxjPTA7YzxhOysrYykobD1zW2NdKSYmKGkucHVzaChuLmNhbGwobCxsLl9fZGF0YV9fLGMscykpLHIucHVzaChsKSk7cmV0dXJuIG5ldyBhbyhpLHIpfSxmaWx0ZXI6ZnVuY3Rpb24obil7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPXF3KG4pKTtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9dC5sZW5ndGgsaT1uZXcgQXJyYXkoZSkscj0wO3I8ZTsrK3IpZm9yKHZhciBsLG89dFtyXSxzPW8ubGVuZ3RoLGE9aVtyXT1bXSxjPTA7YzxzOysrYykobD1vW2NdKSYmbi5jYWxsKGwsbC5fX2RhdGFfXyxjLG8pJiZhLnB1c2gobCk7cmV0dXJuIG5ldyBhbyhpLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uKG4sdCl7aWYoIW4pcmV0dXJuIGg9bmV3IEFycmF5KHRoaXMuc2l6ZSgpKSxjPS0xLHRoaXMuZWFjaChmdW5jdGlvbihaKXtoWysrY109Wn0pLGg7dmFyIGU9dD9VNGU6SDRlLGk9dGhpcy5fcGFyZW50cyxyPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShuKSk7Zm9yKHZhciBvPXIubGVuZ3RoLHM9bmV3IEFycmF5KG8pLGE9bmV3IEFycmF5KG8pLGw9bmV3IEFycmF5KG8pLGM9MDtjPG87KytjKXt2YXIgdT1pW2NdLGQ9cltjXSxwPWQubGVuZ3RoLGg9bi5jYWxsKHUsdSYmdS5fX2RhdGFfXyxjLGkpLGY9aC5sZW5ndGgsbT1hW2NdPW5ldyBBcnJheShmKSx4PXNbY109bmV3IEFycmF5KGYpO2UodSxkLG0seCxsW2NdPW5ldyBBcnJheShwKSxoLHQpO2Zvcih2YXIgVCxrLGI9MCxEPTA7YjxmOysrYilpZihUPW1bYl0pe2ZvcihiPj1EJiYoRD1iKzEpOyEoaz14W0RdKSYmKytEPGY7KTtULl9uZXh0PWt8fG51bGx9fXJldHVybihzPW5ldyBhbyhzLGkpKS5fZW50ZXI9YSxzLl9leGl0PWwsc30sZW50ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFvKHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKEFSKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbigpe3JldHVybiBuZXcgYW8odGhpcy5fZXhpdHx8dGhpcy5fZ3JvdXBzLm1hcChBUiksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24obix0LGUpe3ZhciBpPXRoaXMuZW50ZXIoKSxyPXRoaXMsbz10aGlzLmV4aXQoKTtyZXR1cm4gaT0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uKGkpOmkuYXBwZW5kKG4rIiIpLG51bGwhPXQmJihyPXQocikpLG51bGw9PWU/by5yZW1vdmUoKTplKG8pLGkmJnI/aS5tZXJnZShyKS5vcmRlcigpOnJ9LG1lcmdlOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT1uLl9ncm91cHMsaT10Lmxlbmd0aCxvPU1hdGgubWluKGksZS5sZW5ndGgpLHM9bmV3IEFycmF5KGkpLGE9MDthPG87KythKWZvcih2YXIgcCxsPXRbYV0sYz1lW2FdLHU9bC5sZW5ndGgsZD1zW2FdPW5ldyBBcnJheSh1KSxoPTA7aDx1OysraCkocD1sW2hdfHxjW2hdKSYmKGRbaF09cCk7Zm9yKDthPGk7KythKXNbYV09dFthXTtyZXR1cm4gbmV3IGFvKHMsdGhpcy5fcGFyZW50cyl9LG9yZGVyOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMuX2dyb3Vwcyx0PS0xLGU9bi5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcyxpPW5bdF0scj1pLmxlbmd0aC0xLG89aVtyXTstLXI+PTA7KShzPWlbcl0pJiYobyYmNF5zLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG8pJiZvLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsbyksbz1zKTtyZXR1cm4gdGhpc30sc29ydDpmdW5jdGlvbihuKXtmdW5jdGlvbiB0KGQscCl7cmV0dXJuIGQmJnA/bihkLl9fZGF0YV9fLHAuX19kYXRhX18pOiFkLSFwfW58fChuPXo0ZSk7Zm9yKHZhciBlPXRoaXMuX2dyb3VwcyxpPWUubGVuZ3RoLHI9bmV3IEFycmF5KGkpLG89MDtvPGk7KytvKXtmb3IodmFyIGMscz1lW29dLGE9cy5sZW5ndGgsbD1yW29dPW5ldyBBcnJheShhKSx1PTA7dTxhOysrdSkoYz1zW3VdKSYmKGxbdV09Yyk7bC5zb3J0KHQpfXJldHVybiBuZXcgYW8ocix0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzWzBdO3JldHVybiBhcmd1bWVudHNbMF09dGhpcyxuLmFwcGx5KG51bGwsYXJndW1lbnRzKSx0aGlzfSxub2RlczpmdW5jdGlvbigpe3ZhciBuPW5ldyBBcnJheSh0aGlzLnNpemUoKSksdD0tMTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7blsrK3RdPXRoaXN9KSxufSxub2RlOmZ1bmN0aW9uKCl7Zm9yKHZhciBuPXRoaXMuX2dyb3Vwcyx0PTAsZT1uLmxlbmd0aDt0PGU7Kyt0KWZvcih2YXIgaT1uW3RdLHI9MCxvPWkubGVuZ3RoO3I8bzsrK3Ipe3ZhciBzPWlbcl07aWYocylyZXR1cm4gc31yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbigpe3ZhciBuPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrbn0pLG59LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uKG4pe2Zvcih2YXIgdD10aGlzLl9ncm91cHMsZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSlmb3IodmFyIGEscj10W2VdLG89MCxzPXIubGVuZ3RoO288czsrK28pKGE9cltvXSkmJm4uY2FsbChhLGEuX19kYXRhX18sbyxyKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbihuLHQpe3ZhciBlPWRwKG4pO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIGUubG9jYWw/aS5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOmkuZ2V0QXR0cmlidXRlKGUpfXJldHVybiB0aGlzLmVhY2goKG51bGw9PXQ/ZS5sb2NhbD9HNGU6ajRlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P2UubG9jYWw/WDRlOlk0ZTplLmxvY2FsP3E0ZTpXNGUpKGUsdCkpfSxzdHlsZTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PXQ/UTRlOiJmdW5jdGlvbiI9PXR5cGVvZiB0P1o0ZTpLNGUpKG4sdCxlPz8iIikpOlpoKHRoaXMubm9kZSgpLG4pfSxwcm9wZXJ0eTpmdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT10P0o0ZToiZnVuY3Rpb24iPT10eXBlb2YgdD9lSGU6JDRlKShuLHQpKTp0aGlzLm5vZGUoKVtuXX0sY2xhc3NlZDpmdW5jdGlvbihuLHQpe3ZhciBlPU5zZShuKyIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2YXIgaT1VVSh0aGlzLm5vZGUoKSkscj0tMSxvPWUubGVuZ3RoOysrcjxvOylpZighaS5jb250YWlucyhlW3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD9pSGU6dD90SGU6bkhlKShlLHQpKX0sdGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09bj9ySGU6KCJmdW5jdGlvbiI9PXR5cGVvZiBuP3NIZTpvSGUpKG4pKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09bj9hSGU6KCJmdW5jdGlvbiI9PXR5cGVvZiBuP2NIZTpsSGUpKG4pKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCh1SGUpfSxsb3dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZEhlKX0sYXBwZW5kOmZ1bmN0aW9uKG4pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RFIobik7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQodC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246RFIobiksaT1udWxsPT10P3BIZToiZnVuY3Rpb24iPT10eXBlb2YgdD90OmdnKHQpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxpLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChoSGUpfSxjbG9uZTpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5zZWxlY3Qobj9tSGU6ZkhlKX0sZGF0dW06ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLG4pOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbihuLHQsZSl7dmFyIHIscyxpPV9IZShuKyIiKSxvPWkubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKGE9dD95SGU6dkhlLG51bGw9PWUmJihlPSExKSxyPTA7cjxvOysrcil0aGlzLmVhY2goYShpW3JdLHQsZSkpO3JldHVybiB0aGlzfXZhciBhPXRoaXMubm9kZSgpLl9fb247aWYoYSlmb3IodmFyIHUsbD0wLGM9YS5sZW5ndGg7bDxjOysrbClmb3Iocj0wLHU9YVtsXTtyPG87KytyKWlmKChzPWlbcl0pLnR5cGU9PT11LnR5cGUmJnMubmFtZT09PXUubmFtZSlyZXR1cm4gdS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgdD94SGU6YkhlKShuLHQpKX19O3ZhciBwcD1uYWU7ZnVuY3Rpb24gYm8obil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBuP25ldyBhbyhbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobildXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IGFvKFtbbl1dLGpVKX1mdW5jdGlvbiBQUigpe2Zvcih2YXIgdCxuPXNpO3Q9bi5zb3VyY2VFdmVudDspbj10O3JldHVybiBufWZ1bmN0aW9uIFJSKG4sdCl7dmFyIGU9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIGk9ZS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBpLng9dC5jbGllbnRYLGkueT10LmNsaWVudFksWyhpPWkubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciByPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3QuY2xpZW50WC1yLmxlZnQtbi5jbGllbnRMZWZ0LHQuY2xpZW50WS1yLnRvcC1uLmNsaWVudFRvcF19ZnVuY3Rpb24gR1Uobil7dmFyIHQ9UFIoKTtyZXR1cm4gdC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSksUlIobix0KX1mdW5jdGlvbiBPUigpe3NpLnByZXZlbnREZWZhdWx0KCksc2kuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gcVUobil7dmFyIHQ9bi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZT1ibyhuKS5vbigiZHJhZ3N0YXJ0LmRyYWciLE9SLCEwKTsib25zZWxlY3RzdGFydCJpbiB0P2Uub24oInNlbGVjdHN0YXJ0LmRyYWciLE9SLCEwKToodC5fX25vc2VsZWN0PXQuc3R5bGUuTW96VXNlclNlbGVjdCx0LnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX1mdW5jdGlvbiBZVShuLHQpe3ZhciBlPW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGk9Ym8obikub24oImRyYWdzdGFydC5kcmFnIixudWxsKTt0JiYoaS5vbigiY2xpY2suZHJhZyIsT1IsITApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGU/aS5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGUuc3R5bGUuTW96VXNlclNlbGVjdD1lLl9fbm9zZWxlY3QsZGVsZXRlIGUuX19ub3NlbGVjdCl9ZnVuY3Rpb24gX2cobix0LGUpe24ucHJvdG90eXBlPXQucHJvdG90eXBlPWUsZS5jb25zdHJ1Y3Rvcj1ufWZ1bmN0aW9uIGh5KG4sdCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSk7Zm9yKHZhciBpIGluIHQpZVtpXT10W2ldO3JldHVybiBlfWZ1bmN0aW9uIEpoKCl7fXZhciBGUj0xLy43LGZ5PSJcXHMqKFsrLV0/XFxkKylcXHMqIixRdz0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixiZD0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsQ0hlPS9eIyhbMC05YS1mXXszLDh9KSQvLE1IZT1uZXcgUmVnRXhwKCJecmdiXFwoIitbZnksZnksZnldKyJcXCkkIiksd0hlPW5ldyBSZWdFeHAoIl5yZ2JcXCgiK1tiZCxiZCxiZF0rIlxcKSQiKSxTSGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tmeSxmeSxmeSxRd10rIlxcKSQiKSxFSGU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tiZCxiZCxiZCxRd10rIlxcKSQiKSxUSGU9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW1F3LGJkLGJkXSsiXFwpJCIpLERIZT1uZXcgUmVnRXhwKCJeaHNsYVxcKCIrW1F3LGJkLGJkLFF3XSsiXFwpJCIpLGlhZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiByYWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBvYWUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiBydShuKXt2YXIgdCxlO3JldHVybiBuPShuKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwodD1DSGUuZXhlYyhuKSk/KGU9dFsxXS5sZW5ndGgsdD1wYXJzZUludCh0WzFdLDE2KSw2PT09ZT9zYWUodCk6Mz09PWU/bmV3IEhzKHQ+PjgmMTV8dD4+NCYyNDAsdD4+NCYxNXwyNDAmdCwoMTUmdCk8PDR8MTUmdCwxKTo4PT09ZT9rUih0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LCgyNTUmdCkvMjU1KTo0PT09ZT9rUih0Pj4xMiYxNXx0Pj44JjI0MCx0Pj44JjE1fHQ+PjQmMjQwLHQ+PjQmMTV8MjQwJnQsKCgxNSZ0KTw8NHwxNSZ0KS8yNTUpOm51bGwpOih0PU1IZS5leGVjKG4pKT9uZXcgSHModFsxXSx0WzJdLHRbM10sMSk6KHQ9d0hlLmV4ZWMobikpP25ldyBIcygyNTUqdFsxXS8xMDAsMjU1KnRbMl0vMTAwLDI1NSp0WzNdLzEwMCwxKToodD1TSGUuZXhlYyhuKSk/a1IodFsxXSx0WzJdLHRbM10sdFs0XSk6KHQ9RUhlLmV4ZWMobikpP2tSKDI1NSp0WzFdLzEwMCwyNTUqdFsyXS8xMDAsMjU1KnRbM10vMTAwLHRbNF0pOih0PVRIZS5leGVjKG4pKT9jYWUodFsxXSx0WzJdLzEwMCx0WzNdLzEwMCwxKToodD1ESGUuZXhlYyhuKSk/Y2FlKHRbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XSk6aWFlLmhhc093blByb3BlcnR5KG4pP3NhZShpYWVbbl0pOiJ0cmFuc3BhcmVudCI9PT1uP25ldyBIcyhOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIHNhZShuKXtyZXR1cm4gbmV3IEhzKG4+PjE2JjI1NSxuPj44JjI1NSwyNTUmbiwxKX1mdW5jdGlvbiBrUihuLHQsZSxpKXtyZXR1cm4gaTw9MCYmKG49dD1lPU5hTiksbmV3IEhzKG4sdCxlLGkpfWZ1bmN0aW9uIEtVKG4pe3JldHVybiBuIGluc3RhbmNlb2YgSmh8fChuPXJ1KG4pKSxuP25ldyBIcygobj1uLnJnYigpKS5yLG4uZyxuLmIsbi5vcGFjaXR5KTpuZXcgSHN9ZnVuY3Rpb24gbXkobix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP0tVKG4pOm5ldyBIcyhuLHQsZSxpPz8xKX1mdW5jdGlvbiBIcyhuLHQsZSxpKXt0aGlzLnI9K24sdGhpcy5nPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gYWFlKCl7cmV0dXJuIiMiK1hVKHRoaXMucikrWFUodGhpcy5nKStYVSh0aGlzLmIpfWZ1bmN0aW9uIGxhZSgpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/InJnYigiOiJyZ2JhKCIpK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5yKXx8MCkpKyIsICIrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLmcpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuYil8fDApKSsoMT09PW4/IikiOiIsICIrbisiKSIpfWZ1bmN0aW9uIFhVKG4pe3JldHVybigobj1NYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKG4pfHwwKSkpPDE2PyIwIjoiIikrbi50b1N0cmluZygxNil9ZnVuY3Rpb24gY2FlKG4sdCxlLGkpe3JldHVybiBpPD0wP249dD1lPU5hTjplPD0wfHxlPj0xP249dD1OYU46dDw9MCYmKG49TmFOKSxuZXcgeWQobix0LGUsaSl9ZnVuY3Rpb24gdWFlKG4pe2lmKG4gaW5zdGFuY2VvZiB5ZClyZXR1cm4gbmV3IHlkKG4uaCxuLnMsbi5sLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIEpofHwobj1ydShuKSksIW4pcmV0dXJuIG5ldyB5ZDtpZihuIGluc3RhbmNlb2YgeWQpcmV0dXJuIG47dmFyIHQ9KG49bi5yZ2IoKSkuci8yNTUsZT1uLmcvMjU1LGk9bi5iLzI1NSxyPU1hdGgubWluKHQsZSxpKSxvPU1hdGgubWF4KHQsZSxpKSxzPU5hTixhPW8tcixsPShvK3IpLzI7cmV0dXJuIGE/KHM9dD09PW8/KGUtaSkvYSs2KihlPGkpOmU9PT1vPyhpLXQpL2ErMjoodC1lKS9hKzQsYS89bDwuNT9vK3I6Mi1vLXIscyo9NjApOmE9bD4wJiZsPDE/MDpzLG5ldyB5ZChzLGEsbCxuLm9wYWNpdHkpfWZ1bmN0aW9uIHZnKG4sdCxlLGkpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD91YWUobik6bmV3IHlkKG4sdCxlLGk/PzEpfWZ1bmN0aW9uIHlkKG4sdCxlLGkpe3RoaXMuaD0rbix0aGlzLnM9K3QsdGhpcy5sPStlLHRoaXMub3BhY2l0eT0raX1mdW5jdGlvbiBRVShuLHQsZSl7cmV0dXJuIDI1NSoobjw2MD90KyhlLXQpKm4vNjA6bjwxODA/ZTpuPDI0MD90KyhlLXQpKigyNDAtbikvNjA6dCl9X2coSmgscnUse2NvcHk6ZnVuY3Rpb24obil7cmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IHRoaXMuY29uc3RydWN0b3IsdGhpcyxuKX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpfSxoZXg6cmFlLGZvcm1hdEhleDpyYWUsZm9ybWF0SHNsOmZ1bmN0aW9uKCl7cmV0dXJuIHVhZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOm9hZSx0b1N0cmluZzpvYWV9KSxfZyhIcyxteSxoeShKaCx7YnJpZ2h0ZXI6ZnVuY3Rpb24obil7cmV0dXJuIG49bnVsbD09bj9GUjpNYXRoLnBvdyhGUixuKSxuZXcgSHModGhpcy5yKm4sdGhpcy5nKm4sdGhpcy5iKm4sdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/Ljc6TWF0aC5wb3coLjcsbiksbmV3IEhzKHRoaXMucipuLHRoaXMuZypuLHRoaXMuYipuLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiB0aGlzfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhpcy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6YWFlLGZvcm1hdEhleDphYWUsZm9ybWF0UmdiOmxhZSx0b1N0cmluZzpsYWV9KSksX2coeWQsdmcsaHkoSmgse2JyaWdodGVyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/RlI6TWF0aC5wb3coRlIsbiksbmV3IHlkKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKG4pe3JldHVybiBuPW51bGw9PW4/Ljc6TWF0aC5wb3coLjcsbiksbmV3IHlkKHRoaXMuaCx0aGlzLnMsdGhpcy5sKm4sdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSx0PWlzTmFOKG4pfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGU9dGhpcy5sLGk9ZSsoZTwuNT9lOjEtZSkqdCxyPTIqZS1pO3JldHVybiBuZXcgSHMoUVUobj49MjQwP24tMjQwOm4rMTIwLHIsaSksUVUobixyLGkpLFFVKG48MTIwP24rMjQwOm4tMTIwLHIsaSksdGhpcy5vcGFjaXR5KX0sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbDpmdW5jdGlvbigpe3ZhciBuPXRoaXMub3BhY2l0eTtyZXR1cm4oMT09PShuPWlzTmFOKG4pPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4pKSk/ImhzbCgiOiJoc2xhKCIpKyh0aGlzLmh8fDApKyIsICIrMTAwKih0aGlzLnN8fDApKyIlLCAiKzEwMCoodGhpcy5sfHwwKSsiJSIrKDE9PT1uPyIpIjoiLCAiK24rIikiKX19KSk7dmFyIGRhZT1NYXRoLlBJLzE4MCxwYWU9MTgwL01hdGguUEksZ2FlPTQvMjksZ3k9Ni8yOSxfYWU9MypneSpneTtmdW5jdGlvbiB2YWUobil7aWYobiBpbnN0YW5jZW9mIHhkKXJldHVybiBuZXcgeGQobi5sLG4uYSxuLmIsbi5vcGFjaXR5KTtpZihuIGluc3RhbmNlb2YgaHApcmV0dXJuIHlhZShuKTtuIGluc3RhbmNlb2YgSHN8fChuPUtVKG4pKTt2YXIgbyxzLHQ9ZXoobi5yKSxlPWV6KG4uZyksaT1leihuLmIpLHI9WlUoKC4yMjI1MDQ1KnQrLjcxNjg3ODYqZSsuMDYwNjE2OSppKS8xKTtyZXR1cm4gdD09PWUmJmU9PT1pP289cz1yOihvPVpVKCguNDM2MDc0Nyp0Ky4zODUwNjQ5KmUrLjE0MzA4MDQqaSkvLjk2NDIyKSxzPVpVKCguMDEzOTMyMip0Ky4wOTcxMDQ1KmUrLjcxNDE3MzMqaSkvLjgyNTIxKSksbmV3IHhkKDExNipyLTE2LDUwMCooby1yKSwyMDAqKHItcyksbi5vcGFjaXR5KX1mdW5jdGlvbiB4ZChuLHQsZSxpKXt0aGlzLmw9K24sdGhpcy5hPSt0LHRoaXMuYj0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24gWlUobil7cmV0dXJuIG4+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyhuLDEvMyk6bi9fYWUrZ2FlfWZ1bmN0aW9uIEpVKG4pe3JldHVybiBuPmd5P24qbipuOl9hZSoobi1nYWUpfWZ1bmN0aW9uICRVKG4pe3JldHVybiAyNTUqKG48PS4wMDMxMzA4PzEyLjkyKm46MS4wNTUqTWF0aC5wb3cobiwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gZXoobil7cmV0dXJuKG4vPTI1NSk8PS4wNDA0NT9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gUEhlKG4pe2lmKG4gaW5zdGFuY2VvZiBocClyZXR1cm4gbmV3IGhwKG4uaCxuLmMsbi5sLG4ub3BhY2l0eSk7aWYobiBpbnN0YW5jZW9mIHhkfHwobj12YWUobikpLDA9PT1uLmEmJjA9PT1uLmIpcmV0dXJuIG5ldyBocChOYU4sMDxuLmwmJm4ubDwxMDA/MDpOYU4sbi5sLG4ub3BhY2l0eSk7dmFyIHQ9TWF0aC5hdGFuMihuLmIsbi5hKSpwYWU7cmV0dXJuIG5ldyBocCh0PDA/dCszNjA6dCxNYXRoLnNxcnQobi5hKm4uYStuLmIqbi5iKSxuLmwsbi5vcGFjaXR5KX1mdW5jdGlvbiB5ZyhuLHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/UEhlKG4pOm5ldyBocChuLHQsZSxpPz8xKX1mdW5jdGlvbiBocChuLHQsZSxpKXt0aGlzLmg9K24sdGhpcy5jPSt0LHRoaXMubD0rZSx0aGlzLm9wYWNpdHk9K2l9ZnVuY3Rpb24geWFlKG4pe2lmKGlzTmFOKG4uaCkpcmV0dXJuIG5ldyB4ZChuLmwsMCwwLG4ub3BhY2l0eSk7dmFyIHQ9bi5oKmRhZTtyZXR1cm4gbmV3IHhkKG4ubCxNYXRoLmNvcyh0KSpuLmMsTWF0aC5zaW4odCkqbi5jLG4ub3BhY2l0eSl9ZnVuY3Rpb24gbnoobix0LGUsaSxyKXt2YXIgbz1uKm4scz1vKm47cmV0dXJuKCgxLTMqbiszKm8tcykqdCsoNC02Km8rMypzKSplKygxKzMqbiszKm8tMypzKSppK3MqcikvNn1mdW5jdGlvbiBfeShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gQ2FlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuK2UqdH19ZnVuY3Rpb24gTFIobix0KXt2YXIgZT10LW47cmV0dXJuIGU/Q2FlKG4sZT4xODB8fGU8LTE4MD9lLTM2MCpNYXRoLnJvdW5kKGUvMzYwKTplKTpfeShpc05hTihuKT90Om4pfWZ1bmN0aW9uIHphKG4sdCl7dmFyIGU9dC1uO3JldHVybiBlP0NhZShuLGUpOl95KGlzTmFOKG4pP3Q6bil9X2coeGQsZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3ZhZShuKTpuZXcgeGQobix0LGUsaT8/MSl9LGh5KEpoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IHhkKHRoaXMubCsxOCoobj8/MSksdGhpcy5hLHRoaXMuYix0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyB4ZCh0aGlzLmwtMTgqKG4/PzEpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7dmFyIG49KHRoaXMubCsxNikvMTE2LHQ9aXNOYU4odGhpcy5hKT9uOm4rdGhpcy5hLzUwMCxlPWlzTmFOKHRoaXMuYik/bjpuLXRoaXMuYi8yMDA7cmV0dXJuIG5ldyBIcygkVSgzLjEzMzg1NjEqKHQ9Ljk2NDIyKkpVKHQpKS0xLjYxNjg2NjcqKG49MSpKVShuKSktLjQ5MDYxNDYqKGU9LjgyNTIxKkpVKGUpKSksJFUoLS45Nzg3Njg0KnQrMS45MTYxNDE1Km4rLjAzMzQ1NCplKSwkVSguMDcxOTQ1Myp0LS4yMjg5OTE0Km4rMS40MDUyNDI3KmUpLHRoaXMub3BhY2l0eSl9fSkpLF9nKGhwLHlnLGh5KEpoLHticmlnaHRlcjpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGhwKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihuPz8xKSx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBocCh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobj8/MSksdGhpcy5vcGFjaXR5KX0scmdiOmZ1bmN0aW9uKCl7cmV0dXJuIHlhZSh0aGlzKS5yZ2IoKX19KSk7dmFyIGJnPWZ1bmN0aW9uIG4odCl7dmFyIGU9ZnVuY3Rpb24obil7cmV0dXJuIDE9PShuPStuKT96YTpmdW5jdGlvbih0LGUpe3JldHVybiBlLXQ/ZnVuY3Rpb24obix0LGUpe3JldHVybiBuPU1hdGgucG93KG4sZSksdD1NYXRoLnBvdyh0LGUpLW4sZT0xL2UsZnVuY3Rpb24oaSl7cmV0dXJuIE1hdGgucG93KG4raSp0LGUpfX0odCxlLG4pOl95KGlzTmFOKHQpP2U6dCl9fSh0KTtmdW5jdGlvbiBpKHIsbyl7dmFyIHM9ZSgocj1teShyKSkuciwobz1teShvKSkuciksYT1lKHIuZyxvLmcpLGw9ZShyLmIsby5iKSxjPXphKHIub3BhY2l0eSxvLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gci5yPXModSksci5nPWEodSksci5iPWwodSksci5vcGFjaXR5PWModSkscisiIn19cmV0dXJuIGkuZ2FtbWE9bixpfSgxKTtmdW5jdGlvbiB3YWUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBzLGEsZT10Lmxlbmd0aCxpPW5ldyBBcnJheShlKSxyPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3MpYT1teSh0W3NdKSxpW3NdPWEucnx8MCxyW3NdPWEuZ3x8MCxvW3NdPWEuYnx8MDtyZXR1cm4gaT1uKGkpLHI9bihyKSxvPW4obyksYS5vcGFjaXR5PTEsZnVuY3Rpb24obCl7cmV0dXJuIGEucj1pKGwpLGEuZz1yKGwpLGEuYj1vKGwpLGErIiJ9fX12YXIgaXo9d2FlKGZ1bmN0aW9uKG4pe3ZhciB0PW4ubGVuZ3RoLTE7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWU8PTA/ZT0wOmU+PTE/KGU9MSx0LTEpOk1hdGguZmxvb3IoZSp0KSxyPW5baV0sbz1uW2krMV07cmV0dXJuIG56KChlLWkvdCkqdCxpPjA/bltpLTFdOjIqci1vLHIsbyxpPHQtMT9uW2krMl06MipvLXIpfX0pO2Z1bmN0aW9uIFNhZShuLHQpe3R8fCh0PVtdKTt2YXIgcixlPW4/TWF0aC5taW4odC5sZW5ndGgsbi5sZW5ndGgpOjAsaT10LnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKG8pe2ZvcihyPTA7cjxlOysrcilpW3JdPW5bcl0qKDEtbykrdFtyXSpvO3JldHVybiBpfX1mdW5jdGlvbiBUYWUobix0KXt2YXIgcyxlPXQ/dC5sZW5ndGg6MCxpPW4/TWF0aC5taW4oZSxuLmxlbmd0aCk6MCxyPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8aTsrK3MpcltzXT1mcChuW3NdLHRbc10pO2Zvcig7czxlOysrcylvW3NdPXRbc107cmV0dXJuIGZ1bmN0aW9uKGEpe2ZvcihzPTA7czxpOysrcylvW3NdPXJbc10oYSk7cmV0dXJuIG99fWZ1bmN0aW9uIERhZShuLHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oaSl7cmV0dXJuIGUuc2V0VGltZShuKigxLWkpK3QqaSksZX19ZnVuY3Rpb24gQ3Mobix0KXtyZXR1cm4gbj0rbix0PSt0LGZ1bmN0aW9uKGUpe3JldHVybiBuKigxLWUpK3QqZX19ZnVuY3Rpb24gQWFlKG4sdCl7dmFyIHIsZT17fSxpPXt9O2ZvcihyIGluKG51bGw9PT1ufHwib2JqZWN0IiE9dHlwZW9mIG4pJiYobj17fSksKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQpJiYodD17fSksdClyIGluIG4/ZVtyXT1mcChuW3JdLHRbcl0pOmlbcl09dFtyXTtyZXR1cm4gZnVuY3Rpb24obyl7Zm9yKHIgaW4gZSlpW3JdPWVbcl0obyk7cmV0dXJuIGl9fXdhZShmdW5jdGlvbihuKXt2YXIgdD1uLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5mbG9vcigoKGUlPTEpPDA/KytlOmUpKnQpO3JldHVybiBueigoZS1pL3QpKnQsblsoaSt0LTEpJXRdLG5baSV0XSxuWyhpKzEpJXRdLG5bKGkrMikldF0pfX0pO3ZhciBvej0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2cscno9bmV3IFJlZ0V4cChvei5zb3VyY2UsImciKTtmdW5jdGlvbiBLdyhuLHQpe3ZhciBpLHIsbyxlPW96Lmxhc3RJbmRleD1yei5sYXN0SW5kZXg9MCxzPS0xLGE9W10sbD1bXTtmb3Iobis9IiIsdCs9IiI7KGk9b3ouZXhlYyhuKSkmJihyPXJ6LmV4ZWModCkpOykobz1yLmluZGV4KT5lJiYobz10LnNsaWNlKGUsbyksYVtzXT9hW3NdKz1vOmFbKytzXT1vKSwoaT1pWzBdKT09PShyPXJbMF0pP2Fbc10/YVtzXSs9cjphWysrc109cjooYVsrK3NdPW51bGwsbC5wdXNoKHtpOnMseDpDcyhpLHIpfSkpLGU9cnoubGFzdEluZGV4O3JldHVybiBlPHQubGVuZ3RoJiYobz10LnNsaWNlKGUpLGFbc10/YVtzXSs9bzphWysrc109byksYS5sZW5ndGg8Mj9sWzBdP2Z1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbih0KSsiIn19KGxbMF0ueCk6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fSh0KToodD1sLmxlbmd0aCxmdW5jdGlvbihjKXtmb3IodmFyIGQsdT0wO3U8dDsrK3UpYVsoZD1sW3VdKS5pXT1kLngoYyk7cmV0dXJuIGEuam9pbigiIil9KX1mdW5jdGlvbiBmcChuLHQpe3ZhciBpLGU9dHlwZW9mIHQ7cmV0dXJuIG51bGw9PXR8fCJib29sZWFuIj09PWU/X3kodCk6KCJudW1iZXIiPT09ZT9Dczoic3RyaW5nIj09PWU/KGk9cnUodCkpPyh0PWksYmcpOkt3OnQgaW5zdGFuY2VvZiBydT9iZzp0IGluc3RhbmNlb2YgRGF0ZT9EYWU6ZnVuY3Rpb24obil7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhuKSYmIShuIGluc3RhbmNlb2YgRGF0YVZpZXcpfSh0KT9TYWU6QXJyYXkuaXNBcnJheSh0KT9UYWU6ImZ1bmN0aW9uIiE9dHlwZW9mIHQudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIHQudG9TdHJpbmd8fGlzTmFOKHQpP0FhZTpDcykobix0KX1mdW5jdGlvbiBzeihuLHQpe3JldHVybiBuPStuLHQ9K3QsZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobiooMS1lKSt0KmUpfX12YXIgWncsbHosUGFlLFZSLElhZT0xODAvTWF0aC5QSSxCUj17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBheihuLHQsZSxpLHIsbyl7dmFyIHMsYSxsO3JldHVybihzPU1hdGguc3FydChuKm4rdCp0KSkmJihuLz1zLHQvPXMpLChsPW4qZSt0KmkpJiYoZS09bipsLGktPXQqbCksKGE9TWF0aC5zcXJ0KGUqZStpKmkpKSYmKGUvPWEsaS89YSxsLz1hKSxuKmk8dCplJiYobj0tbix0PS10LGw9LWwscz0tcykse3RyYW5zbGF0ZVg6cix0cmFuc2xhdGVZOm8scm90YXRlOk1hdGguYXRhbjIodCxuKSpJYWUsc2tld1g6TWF0aC5hdGFuKGwpKklhZSxzY2FsZVg6cyxzY2FsZVk6YX19ZnVuY3Rpb24ga2FlKG4sdCxlLGkpe2Z1bmN0aW9uIHIoYyl7cmV0dXJuIGMubGVuZ3RoP2MucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihjLHUpe3ZhciBkPVtdLHA9W107cmV0dXJuIGM9bihjKSx1PW4odSksZnVuY3Rpb24oYyx1LGQscCxoLGYpe2lmKGMhPT1kfHx1IT09cCl7dmFyIG09aC5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLHQsbnVsbCxlKTtmLnB1c2goe2k6bS00LHg6Q3MoYyxkKX0se2k6bS0yLHg6Q3ModSxwKX0pfWVsc2UoZHx8cCkmJmgucHVzaCgidHJhbnNsYXRlKCIrZCt0K3ArZSl9KGMudHJhbnNsYXRlWCxjLnRyYW5zbGF0ZVksdS50cmFuc2xhdGVYLHUudHJhbnNsYXRlWSxkLHApLGZ1bmN0aW9uKGMsdSxkLHApe2MhPT11PyhjLXU+MTgwP3UrPTM2MDp1LWM+MTgwJiYoYys9MzYwKSxwLnB1c2goe2k6ZC5wdXNoKHIoZCkrInJvdGF0ZSgiLG51bGwsaSktMix4OkNzKGMsdSl9KSk6dSYmZC5wdXNoKHIoZCkrInJvdGF0ZSgiK3UraSl9KGMucm90YXRlLHUucm90YXRlLGQscCksZnVuY3Rpb24oYyx1LGQscCl7YyE9PXU/cC5wdXNoKHtpOmQucHVzaChyKGQpKyJza2V3WCgiLG51bGwsaSktMix4OkNzKGMsdSl9KTp1JiZkLnB1c2gocihkKSsic2tld1goIit1K2kpfShjLnNrZXdYLHUuc2tld1gsZCxwKSxmdW5jdGlvbihjLHUsZCxwLGgsZil7aWYoYyE9PWR8fHUhPT1wKXt2YXIgbT1oLnB1c2gocihoKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7Zi5wdXNoKHtpOm0tNCx4OkNzKGMsZCl9LHtpOm0tMix4OkNzKHUscCl9KX1lbHNlKDEhPT1kfHwxIT09cCkmJmgucHVzaChyKGgpKyJzY2FsZSgiK2QrIiwiK3ArIikiKX0oYy5zY2FsZVgsYy5zY2FsZVksdS5zY2FsZVgsdS5zY2FsZVksZCxwKSxjPXU9bnVsbCxmdW5jdGlvbihoKXtmb3IodmFyIHgsZj0tMSxtPXAubGVuZ3RoOysrZjxtOylkWyh4PXBbZl0pLmldPXgueChoKTtyZXR1cm4gZC5qb2luKCIiKX19fXZhciBjej1rYWUoZnVuY3Rpb24obil7cmV0dXJuIm5vbmUiPT09bj9CUjooWnd8fChadz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSxsej1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsUGFlPWRvY3VtZW50LmRlZmF1bHRWaWV3KSxady5zdHlsZS50cmFuc2Zvcm09bixuPVBhZS5nZXRDb21wdXRlZFN0eWxlKGx6LmFwcGVuZENoaWxkKFp3KSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxsei5yZW1vdmVDaGlsZChadyksYXooKyhuPW4uc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK25bMV0sK25bMl0sK25bM10sK25bNF0sK25bNV0pKX0sInB4LCAiLCJweCkiLCJkZWcpIiksdXo9a2FlKGZ1bmN0aW9uKG4pe3JldHVybiBudWxsPT1uP0JSOihWUnx8KFZSPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLFZSLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixuKSwobj1WUi50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9heigobj1uLm1hdHJpeCkuYSxuLmIsbi5jLG4uZCxuLmUsbi5mKTpCUil9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gRmFlKG4pe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciBpPW4oKHQ9dmcodCkpLmgsKGU9dmcoZSkpLmgpLHI9emEodC5zLGUucyksbz16YSh0LmwsZS5sKSxzPXphKHQub3BhY2l0eSxlLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gdC5oPWkoYSksdC5zPXIoYSksdC5sPW8oYSksdC5vcGFjaXR5PXMoYSksdCsiIn19fXZhciBkej1GYWUoTFIpO2Z1bmN0aW9uIE5hZShuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgaT1uKCh0PXlnKHQpKS5oLChlPXlnKGUpKS5oKSxyPXphKHQuYyxlLmMpLG89emEodC5sLGUubCkscz16YSh0Lm9wYWNpdHksZS5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIHQuaD1pKGEpLHQuYz1yKGEpLHQubD1vKGEpLHQub3BhY2l0eT1zKGEpLHQrIiJ9fX1GYWUoemEpO3ZhciBIUixlUyxwej1OYWUoTFIpLHZ5PShOYWUoemEpLDApLCR3PTAsSnc9MCxVUj0wLHhnPTAselI9MCx0Uz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxWYWU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24obil7c2V0VGltZW91dChuLDE3KX07ZnVuY3Rpb24geXkoKXtyZXR1cm4geGd8fChWYWUoQkhlKSx4Zz10Uy5ub3coKSt6Uil9ZnVuY3Rpb24gQkhlKCl7eGc9MH1mdW5jdGlvbiBuUygpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24galIobix0LGUpe3ZhciBpPW5ldyBuUztyZXR1cm4gaS5yZXN0YXJ0KG4sdCxlKSxpfWZ1bmN0aW9uIExhZSgpe3hnPShVUj10Uy5ub3coKSkrelIsdnk9JHc9MDt0cnl7IWZ1bmN0aW9uKCl7eXkoKSwrK3Z5O2Zvcih2YXIgdCxuPUhSO247KSh0PXhnLW4uX3RpbWUpPj0wJiZuLl9jYWxsLmNhbGwobnVsbCx0KSxuPW4uX25leHQ7LS12eX0oKX1maW5hbGx5e3Z5PTAsZnVuY3Rpb24oKXtmb3IodmFyIG4sZSx0PUhSLGk9MS8wO3Q7KXQuX2NhbGw/KGk+dC5fdGltZSYmKGk9dC5fdGltZSksbj10LHQ9dC5fbmV4dCk6KGU9dC5fbmV4dCx0Ll9uZXh0PW51bGwsdD1uP24uX25leHQ9ZTpIUj1lKTtlUz1uLGh6KGkpfSgpLHhnPTB9fWZ1bmN0aW9uIFZIZSgpe3ZhciBuPXRTLm5vdygpLHQ9bi1VUjt0PjFlMyYmKHpSLT10LFVSPW4pfWZ1bmN0aW9uIGh6KG4pe3Z5fHwoJHcmJigkdz1jbGVhclRpbWVvdXQoJHcpKSxuLXhnPjI0PyhuPDEvMCYmKCR3PXNldFRpbWVvdXQoTGFlLG4tdFMubm93KCktelIpKSxKdyYmKEp3PWNsZWFySW50ZXJ2YWwoSncpKSk6KEp3fHwoVVI9dFMubm93KCksSnc9c2V0SW50ZXJ2YWwoVkhlLDFlMykpLHZ5PTEsVmFlKExhZSkpKX1mdW5jdGlvbiBHUihuLHQsZSl7dmFyIGk9bmV3IG5TO3JldHVybiBpLnJlc3RhcnQoZnVuY3Rpb24ocil7aS5zdG9wKCksbihyK3QpfSx0PW51bGw9PXQ/MDordCxlKSxpfW5TLnByb3RvdHlwZT1qUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm5TLHJlc3RhcnQ6ZnVuY3Rpb24obix0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7ZT0obnVsbD09ZT95eSgpOitlKSsobnVsbD09dD8wOit0KSwhdGhpcy5fbmV4dCYmZVMhPT10aGlzJiYoZVM/ZVMuX25leHQ9dGhpczpIUj10aGlzLGVTPXRoaXMpLHRoaXMuX2NhbGw9bix0aGlzLl90aW1lPWUsaHooKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAsaHooKSl9fTt2YXIgVUhlPUd3KCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLHpIZT1bXTtmdW5jdGlvbiAkaChuLHQsZSxpLHIsbyl7dmFyIHM9bi5fX3RyYW5zaXRpb247aWYocyl7aWYoZSBpbiBzKXJldHVybn1lbHNlIG4uX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbihuLHQsZSl7dmFyIHIsaT1uLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiBzKGMpe3ZhciB1LGQscCxoO2lmKDEhPT1lLnN0YXRlKXJldHVybiBsKCk7Zm9yKHUgaW4gaSlpZigoaD1pW3VdKS5uYW1lPT09ZS5uYW1lKXtpZigzPT09aC5zdGF0ZSlyZXR1cm4gR1Iocyk7ND09PWguc3RhdGU/KGguc3RhdGU9NixoLnRpbWVyLnN0b3AoKSxoLm9uLmNhbGwoImludGVycnVwdCIsbixuLl9fZGF0YV9fLGguaW5kZXgsaC5ncm91cCksZGVsZXRlIGlbdV0pOit1PHQmJihoLnN0YXRlPTYsaC50aW1lci5zdG9wKCksaC5vbi5jYWxsKCJjYW5jZWwiLG4sbi5fX2RhdGFfXyxoLmluZGV4LGguZ3JvdXApLGRlbGV0ZSBpW3VdKX1pZihHUihmdW5jdGlvbigpezM9PT1lLnN0YXRlJiYoZS5zdGF0ZT00LGUudGltZXIucmVzdGFydChhLGUuZGVsYXksZS50aW1lKSxhKGMpKX0pLGUuc3RhdGU9MixlLm9uLmNhbGwoInN0YXJ0IixuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSwyPT09ZS5zdGF0ZSl7Zm9yKGUuc3RhdGU9MyxyPW5ldyBBcnJheShwPWUudHdlZW4ubGVuZ3RoKSx1PTAsZD0tMTt1PHA7Kyt1KShoPWUudHdlZW5bdV0udmFsdWUuY2FsbChuLG4uX19kYXRhX18sZS5pbmRleCxlLmdyb3VwKSkmJihyWysrZF09aCk7ci5sZW5ndGg9ZCsxfX1mdW5jdGlvbiBhKGMpe2Zvcih2YXIgdT1jPGUuZHVyYXRpb24/ZS5lYXNlLmNhbGwobnVsbCxjL2UuZHVyYXRpb24pOihlLnRpbWVyLnJlc3RhcnQobCksZS5zdGF0ZT01LDEpLGQ9LTEscD1yLmxlbmd0aDsrK2Q8cDspcltkXS5jYWxsKG4sdSk7NT09PWUuc3RhdGUmJihlLm9uLmNhbGwoImVuZCIsbixuLl9fZGF0YV9fLGUuaW5kZXgsZS5ncm91cCksbCgpKX1mdW5jdGlvbiBsKCl7Zm9yKHZhciBjIGluIGUuc3RhdGU9NixlLnRpbWVyLnN0b3AoKSxkZWxldGUgaVt0XSxpKXJldHVybjtkZWxldGUgbi5fX3RyYW5zaXRpb259aVt0XT1lLGUudGltZXI9alIoZnVuY3Rpb24oYyl7ZS5zdGF0ZT0xLGUudGltZXIucmVzdGFydChzLGUuZGVsYXksZS50aW1lKSxlLmRlbGF5PD1jJiZzKGMtZS5kZWxheSl9LDAsZS50aW1lKX0obixlLHtuYW1lOnQsaW5kZXg6aSxncm91cDpyLG9uOlVIZSx0d2Vlbjp6SGUsdGltZTpvLnRpbWUsZGVsYXk6by5kZWxheSxkdXJhdGlvbjpvLmR1cmF0aW9uLGVhc2U6by5lYXNlLHRpbWVyOm51bGwsc3RhdGU6MH0pfWZ1bmN0aW9uIHJTKG4sdCl7dmFyIGU9WG8obix0KTtpZihlLnN0YXRlPjApdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBoYShuLHQpe3ZhciBlPVhvKG4sdCk7aWYoZS5zdGF0ZT4zKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBlfWZ1bmN0aW9uIFhvKG4sdCl7dmFyIGU9bi5fX3RyYW5zaXRpb247aWYoIWV8fCEoZT1lW3RdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGV9ZnVuY3Rpb24gQ2cobix0KXt2YXIgaSxyLHMsZT1uLl9fdHJhbnNpdGlvbixvPSEwO2lmKGUpe2ZvcihzIGluIHQ9bnVsbD09dD9udWxsOnQrIiIsZSkoaT1lW3NdKS5uYW1lPT09dD8ocj1pLnN0YXRlPjImJmkuc3RhdGU8NSxpLnN0YXRlPTYsaS50aW1lci5zdG9wKCksaS5vbi5jYWxsKHI/ImludGVycnVwdCI6ImNhbmNlbCIsbixuLl9fZGF0YV9fLGkuaW5kZXgsaS5ncm91cCksZGVsZXRlIGVbc10pOm89ITE7byYmZGVsZXRlIG4uX190cmFuc2l0aW9ufX1mdW5jdGlvbiBHSGUobix0KXt2YXIgZSxpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPWhhKHRoaXMsbiksbz1yLnR3ZWVuO2lmKG8hPT1lKWZvcih2YXIgcz0wLGE9KGk9ZT1vKS5sZW5ndGg7czxhOysrcylpZihpW3NdLm5hbWU9PT10KXsoaT1pLnNsaWNlKCkpLnNwbGljZShzLDEpO2JyZWFrfXIudHdlZW49aX19ZnVuY3Rpb24gV0hlKG4sdCxlKXt2YXIgaSxyO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1oYSh0aGlzLG4pLHM9by50d2VlbjtpZihzIT09aSl7cj0oaT1zKS5zbGljZSgpO2Zvcih2YXIgYT17bmFtZTp0LHZhbHVlOmV9LGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpaWYocltsXS5uYW1lPT09dCl7cltsXT1hO2JyZWFrfWw9PT1jJiZyLnB1c2goYSl9by50d2Vlbj1yfX1mdW5jdGlvbiBieShuLHQsZSl7dmFyIGk9bi5faWQ7cmV0dXJuIG4uZWFjaChmdW5jdGlvbigpe3ZhciByPWhhKHRoaXMsaSk7KHIudmFsdWV8fChyLnZhbHVlPXt9KSlbdF09ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxmdW5jdGlvbihyKXtyZXR1cm4gWG8ocixpKS52YWx1ZVt0XX19ZnVuY3Rpb24gWFIobix0KXt2YXIgZTtyZXR1cm4oIm51bWJlciI9PXR5cGVvZiB0P0NzOnQgaW5zdGFuY2VvZiBydT9iZzooZT1ydSh0KSk/KHQ9ZSxiZyk6S3cpKG4sdCl9ZnVuY3Rpb24gcUhlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKG4pfX1mdW5jdGlvbiBZSGUobil7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpfX1mdW5jdGlvbiBYSGUobix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMuZ2V0QXR0cmlidXRlKG4pO3JldHVybiBzPT09cj9udWxsOnM9PT1pP286bz10KGk9cyxlKX19ZnVuY3Rpb24gUUhlKG4sdCxlKXt2YXIgaSxvLHI9ZSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk7cmV0dXJuIHM9PT1yP251bGw6cz09PWk/bzpvPXQoaT1zLGUpfX1mdW5jdGlvbiBLSGUobix0LGUpe3ZhciBpLHIsbztyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcyxsLGE9ZSh0aGlzKTtyZXR1cm4gbnVsbD09YT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKG4pOihzPXRoaXMuZ2V0QXR0cmlidXRlKG4pKT09PShsPWErIiIpP251bGw6cz09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1zLGEpKX19ZnVuY3Rpb24gWkhlKG4sdCxlKXt2YXIgaSxyLG87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHMsbCxhPWUodGhpcyk7cmV0dXJuIG51bGw9PWE/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6KHM9dGhpcy5nZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwpKT09PShsPWErIiIpP251bGw6cz09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1zLGEpKX19ZnVuY3Rpb24gSkhlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3RoaXMuc2V0QXR0cmlidXRlKG4sdC5jYWxsKHRoaXMsZSkpfX1mdW5jdGlvbiAkSGUobix0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsdC5jYWxsKHRoaXMsZSkpfX1mdW5jdGlvbiBlVWUobix0KXt2YXIgZSxpO2Z1bmN0aW9uIHIoKXt2YXIgbz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbyE9PWkmJihlPShpPW8pJiYkSGUobixvKSksZX1yZXR1cm4gci5fdmFsdWU9dCxyfWZ1bmN0aW9uIHRVZShuLHQpe3ZhciBlLGk7ZnVuY3Rpb24gcigpe3ZhciBvPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBvIT09aSYmKGU9KGk9bykmJkpIZShuLG8pKSxlfXJldHVybiByLl92YWx1ZT10LHJ9ZnVuY3Rpb24gblVlKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKCl7clModGhpcyxuKS5kZWxheT0rdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGlVZShuLHQpe3JldHVybiB0PSt0LGZ1bmN0aW9uKCl7clModGhpcyxuKS5kZWxheT10fX1mdW5jdGlvbiByVWUobix0KXtyZXR1cm4gZnVuY3Rpb24oKXtoYSh0aGlzLG4pLmR1cmF0aW9uPSt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gb1VlKG4sdCl7cmV0dXJuIHQ9K3QsZnVuY3Rpb24oKXtoYSh0aGlzLG4pLmR1cmF0aW9uPXR9fWZ1bmN0aW9uIHNVZShuLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtoYSh0aGlzLG4pLmVhc2U9dH19ZnVuY3Rpb24gbFVlKG4sdCxlKXt2YXIgaSxyLG89ZnVuY3Rpb24obil7cmV0dXJuKG4rIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbih0KXt2YXIgZT10LmluZGV4T2YoIi4iKTtyZXR1cm4gZT49MCYmKHQ9dC5zbGljZSgwLGUpKSwhdHx8InN0YXJ0Ij09PXR9KX0odCk/clM6aGE7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9byh0aGlzLG4pLGE9cy5vbjthIT09aSYmKHI9KGk9YSkuY29weSgpKS5vbih0LGUpLHMub249cn19dmFyIHVVZT1wcC5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gaWxlKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9fWZ1bmN0aW9uIG1VZShuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LmNhbGwodGhpcyxpKSxlKX19ZnVuY3Rpb24gZ1VlKG4sdCxlKXt2YXIgaSxyO2Z1bmN0aW9uIG8oKXt2YXIgcz10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gcyE9PXImJihpPShyPXMpJiZtVWUobixzLGUpKSxpfXJldHVybiBvLl92YWx1ZT10LG99ZnVuY3Rpb24geVVlKG4pe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnRleHRDb250ZW50PW4uY2FsbCh0aGlzLHQpfX1mdW5jdGlvbiBiVWUobil7dmFyIHQsZTtmdW5jdGlvbiBpKCl7dmFyIHI9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHIhPT1lJiYodD0oZT1yKSYmeVVlKHIpKSx0fXJldHVybiBpLl92YWx1ZT1uLGl9dmFyIHhVZT0wO2Z1bmN0aW9uIFVzKG4sdCxlLGkpe3RoaXMuX2dyb3Vwcz1uLHRoaXMuX3BhcmVudHM9dCx0aGlzLl9uYW1lPWUsdGhpcy5faWQ9aX1mdW5jdGlvbiBRUigpe3JldHVybisreFVlfXZhciB4eT1wcC5wcm90b3R5cGU7VXMucHJvdG90eXBlPWZ1bmN0aW9uKG4pe3JldHVybiBwcCgpLnRyYW5zaXRpb24obil9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6VXMsc2VsZWN0OmZ1bmN0aW9uKG4pe3ZhciB0PXRoaXMuX25hbWUsZT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49Z2cobikpO2Zvcih2YXIgaT10aGlzLl9ncm91cHMscj1pLmxlbmd0aCxvPW5ldyBBcnJheShyKSxzPTA7czxyOysrcylmb3IodmFyIHUsZCxhPWlbc10sbD1hLmxlbmd0aCxjPW9bc109bmV3IEFycmF5KGwpLHA9MDtwPGw7KytwKSh1PWFbcF0pJiYoZD1uLmNhbGwodSx1Ll9fZGF0YV9fLHAsYSkpJiYoIl9fZGF0YV9fImluIHUmJihkLl9fZGF0YV9fPXUuX19kYXRhX18pLGNbcF09ZCwkaChjW3BdLHQsZSxwLGMsWG8odSxlKSkpO3JldHVybiBuZXcgVXMobyx0aGlzLl9wYXJlbnRzLHQsZSl9LHNlbGVjdEFsbDpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9uYW1lLGU9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPVd3KG4pKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz1bXSxzPVtdLGE9MDthPHI7KythKWZvcih2YXIgdSxsPWlbYV0sYz1sLmxlbmd0aCxkPTA7ZDxjOysrZClpZih1PWxbZF0pe2Zvcih2YXIgaCxwPW4uY2FsbCh1LHUuX19kYXRhX18sZCxsKSxmPVhvKHUsZSksbT0wLHg9cC5sZW5ndGg7bTx4OysrbSkoaD1wW21dKSYmJGgoaCx0LGUsbSxwLGYpO28ucHVzaChwKSxzLnB1c2godSl9cmV0dXJuIG5ldyBVcyhvLHMsdCxlKX0sZmlsdGVyOmZ1bmN0aW9uKG4peyJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1xdyhuKSk7Zm9yKHZhciB0PXRoaXMuX2dyb3VwcyxlPXQubGVuZ3RoLGk9bmV3IEFycmF5KGUpLHI9MDtyPGU7KytyKWZvcih2YXIgbCxvPXRbcl0scz1vLmxlbmd0aCxhPWlbcl09W10sYz0wO2M8czsrK2MpKGw9b1tjXSkmJm4uY2FsbChsLGwuX19kYXRhX18sYyxvKSYmYS5wdXNoKGwpO3JldHVybiBuZXcgVXMoaSx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxtZXJnZTpmdW5jdGlvbihuKXtpZihuLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIHQ9dGhpcy5fZ3JvdXBzLGU9bi5fZ3JvdXBzLGk9dC5sZW5ndGgsbz1NYXRoLm1pbihpLGUubGVuZ3RoKSxzPW5ldyBBcnJheShpKSxhPTA7YTxvOysrYSlmb3IodmFyIHAsbD10W2FdLGM9ZVthXSx1PWwubGVuZ3RoLGQ9c1thXT1uZXcgQXJyYXkodSksaD0wO2g8dTsrK2gpKHA9bFtoXXx8Y1toXSkmJihkW2hdPXApO2Zvcig7YTxpOysrYSlzW2FdPXRbYV07cmV0dXJuIG5ldyBVcyhzLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiBuZXcgdVVlKHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbigpe2Zvcih2YXIgbj10aGlzLl9uYW1lLHQ9dGhpcy5faWQsZT1RUigpLGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBsLHM9aVtvXSxhPXMubGVuZ3RoLGM9MDtjPGE7KytjKWlmKGw9c1tjXSl7dmFyIHU9WG8obCx0KTskaChsLG4sZSxjLHMse3RpbWU6dS50aW1lK3UuZGVsYXkrdS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOnUuZHVyYXRpb24sZWFzZTp1LmVhc2V9KX1yZXR1cm4gbmV3IFVzKGksdGhpcy5fcGFyZW50cyxuLGUpfSxjYWxsOnh5LmNhbGwsbm9kZXM6eHkubm9kZXMsbm9kZTp4eS5ub2RlLHNpemU6eHkuc2l6ZSxlbXB0eTp4eS5lbXB0eSxlYWNoOnh5LmVhY2gsb246ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP1hvKHRoaXMubm9kZSgpLGUpLm9uLm9uKG4pOnRoaXMuZWFjaChsVWUoZSxuLHQpKX0sYXR0cjpmdW5jdGlvbihuLHQpe3ZhciBlPWRwKG4pLGk9InRyYW5zZm9ybSI9PT1lP3V6OlhSO3JldHVybiB0aGlzLmF0dHJUd2VlbihuLCJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlLmxvY2FsP1pIZTpLSGUpKGUsaSxieSh0aGlzLCJhdHRyLiIrbix0KSk6bnVsbD09dD8oZS5sb2NhbD9ZSGU6cUhlKShlKTooZS5sb2NhbD9RSGU6WEhlKShlLGksdCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24obix0KXt2YXIgZT0iYXR0ci4iK247aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihlPXRoaXMudHdlZW4oZSkpJiZlLl92YWx1ZTtpZihudWxsPT10KXJldHVybiB0aGlzLnR3ZWVuKGUsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3ZhciBpPWRwKG4pO3JldHVybiB0aGlzLnR3ZWVuKGUsKGkubG9jYWw/ZVVlOnRVZSkoaSx0KSl9LHN0eWxlOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT0idHJhbnNmb3JtIj09KG4rPSIiKT9jejpYUjtyZXR1cm4gbnVsbD09dD90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbz1aaCh0aGlzLG4pLHM9KHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobiksWmgodGhpcyxuKSk7cmV0dXJuIG89PT1zP251bGw6bz09PWUmJnM9PT1pP3I6cj10KGU9byxpPXMpfX0obixpKSkub24oImVuZC5zdHlsZS4iK24saWxlKG4pKToiZnVuY3Rpb24iPT10eXBlb2YgdD90aGlzLnN0eWxlVHdlZW4obixmdW5jdGlvbihuLHQsZSl7dmFyIGkscixvO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVpoKHRoaXMsbiksYT1lKHRoaXMpLGw9YSsiIjtyZXR1cm4gbnVsbD09YSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobiksbD1hPVpoKHRoaXMsbikpLHM9PT1sP251bGw6cz09PWkmJmw9PT1yP286KHI9bCxvPXQoaT1zLGEpKX19KG4saSxieSh0aGlzLCJzdHlsZS4iK24sdCkpKS5lYWNoKGZ1bmN0aW9uKG4sdCl7dmFyIGUsaSxyLGEsbz0ic3R5bGUuIit0LHM9ImVuZC4iK287cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9aGEodGhpcyxuKSxjPWwub24sdT1udWxsPT1sLnZhbHVlW29dP2F8fChhPWlsZSh0KSk6dm9pZCAwOyhjIT09ZXx8ciE9PXUpJiYoaT0oZT1jKS5jb3B5KCkpLm9uKHMscj11KSxsLm9uPWl9fSh0aGlzLl9pZCxuKSk6dGhpcy5zdHlsZVR3ZWVuKG4sZnVuY3Rpb24obix0LGUpe3ZhciBpLG8scj1lKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBzPVpoKHRoaXMsbik7cmV0dXJuIHM9PT1yP251bGw6cz09PWk/bzpvPXQoaT1zLGUpfX0obixpLHQpLGUpLm9uKCJlbmQuc3R5bGUuIituLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uKG4sdCxlKXt2YXIgaT0ic3R5bGUuIisobis9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oaT10aGlzLnR3ZWVuKGkpKSYmaS5fdmFsdWU7aWYobnVsbD09dClyZXR1cm4gdGhpcy50d2VlbihpLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihpLGdVZShuLHQsZT8/IiIpKX0sdGV4dDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKTt0aGlzLnRleHRDb250ZW50PXQ/PyIifX0oYnkodGhpcywidGV4dCIsbikpOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19KG51bGw9PW4/IiI6bisiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24obil7dmFyIHQ9InRleHQiO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSlyZXR1cm4odD10aGlzLnR3ZWVuKHQpKSYmdC5fdmFsdWU7aWYobnVsbD09bilyZXR1cm4gdGhpcy50d2Vlbih0LG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2Vlbih0LGJVZShuKSl9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBlIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCtlIT09bilyZXR1cm47dCYmdC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5faWQ7aWYobis9IiIsYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIHMsaT1Ybyh0aGlzLm5vZGUoKSxlKS50d2VlbixyPTAsbz1pLmxlbmd0aDtyPG87KytyKWlmKChzPWlbcl0pLm5hbWU9PT1uKXJldHVybiBzLnZhbHVlO3JldHVybiBudWxsfXJldHVybiB0aGlzLmVhY2goKG51bGw9PXQ/R0hlOldIZSkoZSxuLHQpKX0sZGVsYXk6ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9uVWU6aVVlKSh0LG4pKTpYbyh0aGlzLm5vZGUoKSx0KS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9yVWU6b1VlKSh0LG4pKTpYbyh0aGlzLm5vZGUoKSx0KS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbihuKXt2YXIgdD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goc1VlKHQsbikpOlhvKHRoaXMubm9kZSgpLHQpLmVhc2V9LGVuZDpmdW5jdGlvbigpe3ZhciBuLHQsZT10aGlzLGk9ZS5faWQscj1lLnNpemUoKTtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obyxzKXt2YXIgYT17dmFsdWU6c30sbD17dmFsdWU6ZnVuY3Rpb24oKXswPT0tLXImJm8oKX19O2UuZWFjaChmdW5jdGlvbigpe3ZhciBjPWhhKHRoaXMsaSksdT1jLm9uO3UhPT1uJiYoKHQ9KG49dSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKGEpLHQuXy5pbnRlcnJ1cHQucHVzaChhKSx0Ll8uZW5kLnB1c2gobCkpLGMub249dH0pfSl9fTt2YXIgZ3o9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uKG4pe3JldHVybigobio9Mik8PTE/bipuKm46KG4tPTIpKm4qbisyKS8yfX07ZnVuY3Rpb24gQ1VlKG4sdCl7Zm9yKHZhciBlOyEoZT1uLl9fdHJhbnNpdGlvbil8fCEoZT1lW3RdKTspaWYoIShuPW4ucGFyZW50Tm9kZSkpcmV0dXJuIGd6LnRpbWU9eXkoKSxnejtyZXR1cm4gZX1mdW5jdGlvbiBaUihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gZGxlKG4sdCxlKXt0aGlzLnRhcmdldD1uLHRoaXMudHlwZT10LHRoaXMuc2VsZWN0aW9uPWV9ZnVuY3Rpb24gX3ooKXtzaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBKUigpe3NpLnByZXZlbnREZWZhdWx0KCksc2kuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9cHAucHJvdG90eXBlLmludGVycnVwdD1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Q2codGhpcyxuKX0pfSxwcC5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbihuKXt2YXIgdCxlO24gaW5zdGFuY2VvZiBVcz8odD1uLl9pZCxuPW4uX25hbWUpOih0PVFSKCksKGU9Z3opLnRpbWU9eXkoKSxuPW51bGw9PW4/bnVsbDpuKyIiKTtmb3IodmFyIGk9dGhpcy5fZ3JvdXBzLHI9aS5sZW5ndGgsbz0wO288cjsrK28pZm9yKHZhciBsLHM9aVtvXSxhPXMubGVuZ3RoLGM9MDtjPGE7KytjKShsPXNbY10pJiYkaChsLG4sdCxjLHMsZXx8Q1VlKGwsdCkpO3JldHVybiBuZXcgVXMoaSx0aGlzLl9wYXJlbnRzLG4sdCl9O3ZhciBwbGU9e25hbWU6ImRyYWcifSx2ej17bmFtZToic3BhY2UifSxDeT17bmFtZToiaGFuZGxlIn0sTXk9e25hbWU6ImNlbnRlciJ9O2Z1bmN0aW9uIGhsZShuKXtyZXR1cm5bK25bMF0sK25bMV1dfWZ1bmN0aW9uIHh6KG4pe3JldHVybltobGUoblswXSksaGxlKG5bMV0pXX1mdW5jdGlvbiBNVWUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuLHQsZSl7YXJndW1lbnRzLmxlbmd0aDwzJiYoZT10LHQ9UFIoKS5jaGFuZ2VkVG91Y2hlcyk7Zm9yKHZhciBvLGk9MCxyPXQ/dC5sZW5ndGg6MDtpPHI7KytpKWlmKChvPXRbaV0pLmlkZW50aWZpZXI9PT1lKXJldHVybiBSUihuLG8pO3JldHVybiBudWxsfSh0LHNpLnRvdWNoZXMsbil9fXZhciB5ej17bmFtZToieCIsaGFuZGxlczpbInciLCJlIl0ubWFwKG9TKSxpbnB1dDpmdW5jdGlvbihuLHQpe3JldHVybiBudWxsPT1uP251bGw6W1srblswXSx0WzBdWzFdXSxbK25bMV0sdFsxXVsxXV1dfSxvdXRwdXQ6ZnVuY3Rpb24obil7cmV0dXJuIG4mJltuWzBdWzBdLG5bMV1bMF1dfX0sJFI9e25hbWU6InkiLGhhbmRsZXM6WyJuIiwicyJdLm1hcChvUyksaW5wdXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOltbdFswXVswXSwrblswXV0sW3RbMV1bMF0sK25bMV1dXX0sb3V0cHV0OmZ1bmN0aW9uKG4pe3JldHVybiBuJiZbblswXVsxXSxuWzFdWzFdXX19LG1wPShbIm4iLCJ3IiwiZSIsInMiLCJudyIsIm5lIiwic3ciLCJzZSJdLm1hcChvUykse292ZXJsYXk6ImNyb3NzaGFpciIsc2VsZWN0aW9uOiJtb3ZlIixuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9KSxmbGU9e2U6InciLHc6ImUiLG53OiJuZSIsbmU6Im53IixzZToic3ciLHN3OiJzZSJ9LG1sZT17bjoicyIsczoibiIsbnc6InN3IixuZToic2UiLHNlOiJuZSIsc3c6Im53In0sd1VlPXtvdmVybGF5OjEsc2VsZWN0aW9uOjEsbjpudWxsLGU6MSxzOm51bGwsdzotMSxudzotMSxuZToxLHNlOjEsc3c6LTF9LFNVZT17b3ZlcmxheToxLHNlbGVjdGlvbjoxLG46LTEsZTpudWxsLHM6MSx3Om51bGwsbnc6LTEsbmU6LTEsc2U6MSxzdzoxfTtmdW5jdGlvbiBvUyhuKXtyZXR1cm57dHlwZTpufX1mdW5jdGlvbiBFVWUoKXtyZXR1cm4hc2kuY3RybEtleSYmIXNpLmJ1dHRvbn1mdW5jdGlvbiBUVWUoKXt2YXIgbj10aGlzLm93bmVyU1ZHRWxlbWVudHx8dGhpcztyZXR1cm4gbi5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyhuPW4udmlld0JveC5iYXNlVmFsKS54LG4ueV0sW24ueCtuLndpZHRoLG4ueStuLmhlaWdodF1dOltbMCwwXSxbbi53aWR0aC5iYXNlVmFsLnZhbHVlLG4uaGVpZ2h0LmJhc2VWYWwudmFsdWVdXX1mdW5jdGlvbiBEVWUoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gYnoobil7Zm9yKDshbi5fX2JydXNoOylpZighKG49bi5wYXJlbnROb2RlKSlyZXR1cm47cmV0dXJuIG4uX19icnVzaH1mdW5jdGlvbiBBVWUobil7cmV0dXJuIG5bMF1bMF09PT1uWzFdWzBdfHxuWzBdWzFdPT09blsxXVsxXX1NYXRoO3ZhciBNej1NYXRoLlBJLHd6PTIqTXosTWc9MWUtNixrVWU9d3otTWc7ZnVuY3Rpb24gU3ooKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIn1mdW5jdGlvbiBfbGUoKXtyZXR1cm4gbmV3IFN6fVN6LnByb3RvdHlwZT1fbGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTeixtb3ZlVG86ZnVuY3Rpb24obix0KXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K24pKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl8rPSJaIil9LGxpbmVUbzpmdW5jdGlvbihuLHQpe3RoaXMuXys9IkwiKyh0aGlzLl94MT0rbikrIiwiKyh0aGlzLl95MT0rdCl9LHF1YWRyYXRpY0N1cnZlVG86ZnVuY3Rpb24obix0LGUsaSl7dGhpcy5fKz0iUSIrICtuKyIsIisgK3QrIiwiKyh0aGlzLl94MT0rZSkrIiwiKyh0aGlzLl95MT0raSl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24obix0LGUsaSxyLG8pe3RoaXMuXys9IkMiKyArbisiLCIrICt0KyIsIisgK2UrIiwiKyAraSsiLCIrKHRoaXMuX3gxPStyKSsiLCIrKHRoaXMuX3kxPStvKX0sYXJjVG86ZnVuY3Rpb24obix0LGUsaSxyKXt2YXIgbz10aGlzLl94MSxzPXRoaXMuX3kxLGE9KGU9K2UpLShuPStuKSxsPShpPStpKS0odD0rdCksYz1vLW4sdT1zLXQsZD1jKmMrdSp1O2lmKChyPStyKTwwKXRocm93IG5ldyBFcnJvcigibmVnYXRpdmUgcmFkaXVzOiAiK3IpO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl8rPSJNIisodGhpcy5feDE9bikrIiwiKyh0aGlzLl95MT10KTtlbHNlIGlmKGQ+TWcpaWYoTWF0aC5hYnModSphLWwqYyk+TWcmJnIpe3ZhciBwPWUtbyxoPWktcyxmPWEqYStsKmwsbT1wKnAraCpoLHg9TWF0aC5zcXJ0KGYpLGc9TWF0aC5zcXJ0KGQpLGI9cipNYXRoLnRhbigoTXotTWF0aC5hY29zKChmK2QtbSkvKDIqeCpnKSkpLzIpLEQ9Yi9nLFQ9Yi94O01hdGguYWJzKEQtMSk+TWcmJih0aGlzLl8rPSJMIisobitEKmMpKyIsIisodCtEKnUpKSx0aGlzLl8rPSJBIityKyIsIityKyIsMCwwLCIrICsodSpwPmMqaCkrIiwiKyh0aGlzLl94MT1uK1QqYSkrIiwiKyh0aGlzLl95MT10K1QqbCl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9bikrIiwiKyh0aGlzLl95MT10KX0sYXJjOmZ1bmN0aW9uKG4sdCxlLGkscixvKXtuPStuLHQ9K3Qsbz0hIW87dmFyIHM9KGU9K2UpKk1hdGguY29zKGkpLGE9ZSpNYXRoLnNpbihpKSxsPW4rcyxjPXQrYSx1PTFebyxkPW8/aS1yOnItaTtpZihlPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrZSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2wrIiwiK2M6KE1hdGguYWJzKHRoaXMuX3gxLWwpPk1nfHxNYXRoLmFicyh0aGlzLl95MS1jKT5NZykmJih0aGlzLl8rPSJMIitsKyIsIitjKSxlJiYoZDwwJiYoZD1kJXd6K3d6KSxkPmtVZT90aGlzLl8rPSJBIitlKyIsIitlKyIsMCwxLCIrdSsiLCIrKG4tcykrIiwiKyh0LWEpKyJBIitlKyIsIitlKyIsMCwxLCIrdSsiLCIrKHRoaXMuX3gxPWwpKyIsIisodGhpcy5feTE9Yyk6ZD5NZyYmKHRoaXMuXys9IkEiK2UrIiwiK2UrIiwwLCIrICsoZD49TXopKyIsIit1KyIsIisodGhpcy5feDE9bitlKk1hdGguY29zKHIpKSsiLCIrKHRoaXMuX3kxPXQrZSpNYXRoLnNpbihyKSkpKX0scmVjdDpmdW5jdGlvbihuLHQsZSxpKXt0aGlzLl8rPSJNIisodGhpcy5feDA9dGhpcy5feDE9K24pKyIsIisodGhpcy5feTA9dGhpcy5feTE9K3QpKyJoIisgK2UrInYiKyAraSsiaCIrLWUrIloifSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl99fTt2YXIgc1M9X2xlLE1sPSIkIjtmdW5jdGlvbiBlTygpe31mdW5jdGlvbiB2bGUobix0KXt2YXIgZT1uZXcgZU87aWYobiBpbnN0YW5jZW9mIGVPKW4uZWFjaChmdW5jdGlvbihhLGwpe2Uuc2V0KGwsYSl9KTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobikpe3ZhciBvLGk9LTEscj1uLmxlbmd0aDtpZihudWxsPT10KWZvcig7KytpPHI7KWUuc2V0KGksbltpXSk7ZWxzZSBmb3IoOysraTxyOyllLnNldCh0KG89bltpXSxpLG4pLG8pfWVsc2UgaWYobilmb3IodmFyIHMgaW4gbillLnNldChzLG5bc10pO3JldHVybiBlfWVPLnByb3RvdHlwZT12bGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplTyxoYXM6ZnVuY3Rpb24obil7cmV0dXJuIE1sK24gaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKG4pe3JldHVybiB0aGlzW01sK25dfSxzZXQ6ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpc1tNbCtuXT10LHRoaXN9LHJlbW92ZTpmdW5jdGlvbihuKXt2YXIgdD1NbCtuO3JldHVybiB0IGluIHRoaXMmJmRlbGV0ZSB0aGlzW3RdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgbiBpbiB0aGlzKW5bMF09PT1NbCYmZGVsZXRlIHRoaXNbbl19LGtleXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TWwmJm4ucHVzaCh0LnNsaWNlKDEpKTtyZXR1cm4gbn0sdmFsdWVzOmZ1bmN0aW9uKCl7dmFyIG49W107Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PU1sJiZuLnB1c2godGhpc1t0XSk7cmV0dXJuIG59LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgbj1bXTtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TWwmJm4ucHVzaCh7a2V5OnQuc2xpY2UoMSksdmFsdWU6dGhpc1t0XX0pO3JldHVybiBufSxzaXplOmZ1bmN0aW9uKCl7dmFyIG49MDtmb3IodmFyIHQgaW4gdGhpcyl0WzBdPT09TWwmJisrbjtyZXR1cm4gbn0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIG4gaW4gdGhpcylpZihuWzBdPT09TWwpcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIHRoaXMpdFswXT09PU1sJiZuKHRoaXNbdF0sdC5zbGljZSgxKSx0aGlzKX19O3ZhciBncD12bGU7ZnVuY3Rpb24gdE8oKXt9dmFyIHdnPWdwLnByb3RvdHlwZTtmdW5jdGlvbiBTZyhuLHQpe2lmKChlPShuPXQ/bi50b0V4cG9uZW50aWFsKHQtMSk6bi50b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgZSxpPW4uc2xpY2UoMCxlKTtyZXR1cm5baS5sZW5ndGg+MT9pWzBdK2kuc2xpY2UoMik6aSwrbi5zbGljZShlKzEpXX1mdW5jdGlvbiBDZChuKXtyZXR1cm4obj1TZyhNYXRoLmFicyhuKSkpP25bMV06TmFOfXRPLnByb3RvdHlwZT1mdW5jdGlvbihuLHQpe3ZhciBlPW5ldyB0TztpZihuIGluc3RhbmNlb2YgdE8pbi5lYWNoKGZ1bmN0aW9uKG8pe2UuYWRkKG8pfSk7ZWxzZSBpZihuKXt2YXIgaT0tMSxyPW4ubGVuZ3RoO2lmKG51bGw9PXQpZm9yKDsrK2k8cjspZS5hZGQobltpXSk7ZWxzZSBmb3IoOysraTxyOyllLmFkZCh0KG5baV0saSxuKSl9cmV0dXJuIGV9LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dE8saGFzOndnLmhhcyxhZGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbTWwrKG4rPSIiKV09bix0aGlzfSxyZW1vdmU6d2cucmVtb3ZlLGNsZWFyOndnLmNsZWFyLHZhbHVlczp3Zy5rZXlzLHNpemU6d2cuc2l6ZSxlbXB0eTp3Zy5lbXB0eSxlYWNoOndnLmVhY2h9LE1hdGgsTWF0aC5zcXJ0KDUpO3ZhciBFeixWVWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gZWYobil7aWYoISh0PVZVZS5leGVjKG4pKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK24pO3ZhciB0O3JldHVybiBuZXcgbk8oe2ZpbGw6dFsxXSxhbGlnbjp0WzJdLHNpZ246dFszXSxzeW1ib2w6dFs0XSx6ZXJvOnRbNV0sd2lkdGg6dFs2XSxjb21tYTp0WzddLHByZWNpc2lvbjp0WzhdJiZ0WzhdLnNsaWNlKDEpLHRyaW06dFs5XSx0eXBlOnRbMTBdfSl9ZnVuY3Rpb24gbk8obil7dGhpcy5maWxsPXZvaWQgMD09PW4uZmlsbD8iICI6bi5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09bi5hbGlnbj8iPiI6bi5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09bi5zaWduPyItIjpuLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09bi5zeW1ib2w/IiI6bi5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhbi56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09bi53aWR0aD92b2lkIDA6K24ud2lkdGgsdGhpcy5jb21tYT0hIW4uY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09bi5wcmVjaXNpb24/dm9pZCAwOituLnByZWNpc2lvbix0aGlzLnRyaW09ISFuLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PW4udHlwZT8iIjpuLnR5cGUrIiJ9ZnVuY3Rpb24gVHoobix0KXt2YXIgZT1TZyhuLHQpO2lmKCFlKXJldHVybiBuKyIiO3ZhciBpPWVbMF0scj1lWzFdO3JldHVybiByPDA/IjAuIituZXcgQXJyYXkoLXIpLmpvaW4oIjAiKStpOmkubGVuZ3RoPnIrMT9pLnNsaWNlKDAscisxKSsiLiIraS5zbGljZShyKzEpOmkrbmV3IEFycmF5KHItaS5sZW5ndGgrMikuam9pbigiMCIpfWVmLnByb3RvdHlwZT1uTy5wcm90b3R5cGUsbk8ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07dmFyIER6PXsiJSI6ZnVuY3Rpb24obix0KXtyZXR1cm4oMTAwKm4pLnRvRml4ZWQodCl9LGI6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMil9LGM6ZnVuY3Rpb24obil7cmV0dXJuIG4rIiJ9LGQ6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGguYWJzKG49TWF0aC5yb3VuZChuKSk+PTFlMjE/bi50b0xvY2FsZVN0cmluZygiZW4iKS5yZXBsYWNlKC8sL2csIiIpOm4udG9TdHJpbmcoMTApfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4udG9FeHBvbmVudGlhbCh0KX0sZjpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRml4ZWQodCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gTWF0aC5yb3VuZChuKS50b1N0cmluZyg4KX0scDpmdW5jdGlvbihuLHQpe3JldHVybiBUeigxMDAqbix0KX0scjpUeixzOmZ1bmN0aW9uKG4sdCl7dmFyIGU9U2cobix0KTtpZighZSlyZXR1cm4gbisiIjt2YXIgaT1lWzBdLHI9ZVsxXSxvPXItKEV6PTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIvMykpKSkrMSxzPWkubGVuZ3RoO3JldHVybiBvPT09cz9pOm8+cz9pK25ldyBBcnJheShvLXMrMSkuam9pbigiMCIpOm8+MD9pLnNsaWNlKDAsbykrIi4iK2kuc2xpY2Uobyk6IjAuIituZXcgQXJyYXkoMS1vKS5qb2luKCIwIikrU2cobixNYXRoLm1heCgwLHQrby0xKSlbMF19LFg6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LHg6ZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucm91bmQobikudG9TdHJpbmcoMTYpfX07ZnVuY3Rpb24gQXoobil7cmV0dXJuIG59dmFyIGlPLHhvLHJPLEVsZT1BcnJheS5wcm90b3R5cGUubWFwLFRsZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTtmdW5jdGlvbiBkYygpe3JldHVybiBNYXRoLnJhbmRvbSgpfWlPPWZ1bmN0aW9uKG4pe3ZhciB0PXZvaWQgMD09PW4uZ3JvdXBpbmd8fHZvaWQgMD09PW4udGhvdXNhbmRzP0F6OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7Zm9yKHZhciByPWUubGVuZ3RoLG89W10scz0wLGE9blswXSxsPTA7cj4wJiZhPjAmJihsK2ErMT5pJiYoYT1NYXRoLm1heCgxLGktbCkpLG8ucHVzaChlLnN1YnN0cmluZyhyLT1hLHIrYSkpLCEoKGwrPWErMSk+aSkpOylhPW5bcz0ocysxKSVuLmxlbmd0aF07cmV0dXJuIG8ucmV2ZXJzZSgpLmpvaW4odCl9fShFbGUuY2FsbChuLmdyb3VwaW5nLE51bWJlciksbi50aG91c2FuZHMrIiIpLGU9dm9pZCAwPT09bi5jdXJyZW5jeT8iIjpuLmN1cnJlbmN5WzBdKyIiLGk9dm9pZCAwPT09bi5jdXJyZW5jeT8iIjpuLmN1cnJlbmN5WzFdKyIiLHI9dm9pZCAwPT09bi5kZWNpbWFsPyIuIjpuLmRlY2ltYWwrIiIsbz12b2lkIDA9PT1uLm51bWVyYWxzP0F6OmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuWytlXX0pfX0oRWxlLmNhbGwobi5udW1lcmFscyxTdHJpbmcpKSxzPXZvaWQgMD09PW4ucGVyY2VudD8iJSI6bi5wZXJjZW50KyIiLGE9dm9pZCAwPT09bi5taW51cz8iLSI6bi5taW51cysiIixsPXZvaWQgMD09PW4ubmFuPyJOYU4iOm4ubmFuKyIiO2Z1bmN0aW9uIGMoZCl7dmFyIHA9KGQ9ZWYoZCkpLmZpbGwsaD1kLmFsaWduLGY9ZC5zaWduLG09ZC5zeW1ib2wseD1kLnplcm8sZz1kLndpZHRoLGI9ZC5jb21tYSxEPWQucHJlY2lzaW9uLFQ9ZC50cmltLGs9ZC50eXBlOyJuIj09PWs/KGI9ITAsaz0iZyIpOkR6W2tdfHwodm9pZCAwPT09RCYmKEQ9MTIpLFQ9ITAsaz0iZyIpLCh4fHwiMCI9PT1wJiYiPSI9PT1oKSYmKHg9ITAscD0iMCIsaD0iPSIpO3ZhciBaPSIkIj09PW0/ZToiIyI9PT1tJiYvW2JveFhdLy50ZXN0KGspPyIwIitrLnRvTG93ZXJDYXNlKCk6IiIsej0iJCI9PT1tP2k6L1slcF0vLnRlc3Qoayk/czoiIixmZT1EeltrXSx1ZT0vW2RlZmdwcnMlXS8udGVzdChrKTtmdW5jdGlvbiBoZSh3KXt2YXIgSyxkZSxZLEY9WixxPXo7aWYoImMiPT09aylxPWZlKHcpK3Esdz0iIjtlbHNle3ZhciBhZT0odz0rdyk8MHx8MS93PDA7aWYodz1pc05hTih3KT9sOmZlKE1hdGguYWJzKHcpLEQpLFQmJih3PWZ1bmN0aW9uKG4pe2U6Zm9yKHZhciByLHQ9bi5sZW5ndGgsZT0xLGk9LTE7ZTx0OysrZSlzd2l0Y2gobltlXSl7Y2FzZSIuIjppPXI9ZTticmVhaztjYXNlIjAiOjA9PT1pJiYoaT1lKSxyPWU7YnJlYWs7ZGVmYXVsdDppZighK25bZV0pYnJlYWsgZTtpPjAmJihpPTApfXJldHVybiBpPjA/bi5zbGljZSgwLGkpK24uc2xpY2UocisxKTpufSh3KSksYWUmJjA9PSt3JiYiKyIhPT1mJiYoYWU9ITEpLEY9KGFlPyIoIj09PWY/ZjphOiItIj09PWZ8fCIoIj09PWY/IiI6ZikrRixxPSgicyI9PT1rP1RsZVs4K0V6LzNdOiIiKStxKyhhZSYmIigiPT09Zj8iKSI6IiIpLHVlKWZvcihLPS0xLGRlPXcubGVuZ3RoOysrSzxkZTspaWYoNDg+KFk9dy5jaGFyQ29kZUF0KEspKXx8WT41Nyl7cT0oNDY9PT1ZP3Irdy5zbGljZShLKzEpOncuc2xpY2UoSykpK3Esdz13LnNsaWNlKDAsSyk7YnJlYWt9fWImJiF4JiYodz10KHcsMS8wKSk7dmFyIGxlPUYubGVuZ3RoK3cubGVuZ3RoK3EubGVuZ3RoLEllPWxlPGc/bmV3IEFycmF5KGctbGUrMSkuam9pbihwKToiIjtzd2l0Y2goYiYmeCYmKHc9dChJZSt3LEllLmxlbmd0aD9nLXEubGVuZ3RoOjEvMCksSWU9IiIpLGgpe2Nhc2UiPCI6dz1GK3crcStJZTticmVhaztjYXNlIj0iOnc9RitJZSt3K3E7YnJlYWs7Y2FzZSJeIjp3PUllLnNsaWNlKDAsbGU9SWUubGVuZ3RoPj4xKStGK3crcStJZS5zbGljZShsZSk7YnJlYWs7ZGVmYXVsdDp3PUllK0YrdytxfXJldHVybiBvKHcpfXJldHVybiBEPXZvaWQgMD09PUQ/NjovW2dwcnNdLy50ZXN0KGspP01hdGgubWF4KDEsTWF0aC5taW4oMjEsRCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsRCkpLGhlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGQrIiJ9LGhlfXJldHVybntmb3JtYXQ6Yyxmb3JtYXRQcmVmaXg6ZnVuY3Rpb24oZCxwKXt2YXIgaD1jKCgoZD1lZihkKSkudHlwZT0iZiIsZCkpLGY9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoQ2QocCkvMykpKSxtPU1hdGgucG93KDEwLC1mKSx4PVRsZVs4K2YvM107cmV0dXJuIGZ1bmN0aW9uKGcpe3JldHVybiBoKG0qZykreH19fX0oe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLG1pbnVzOiItIn0pLHhvPWlPLmZvcm1hdCxyTz1pTy5mb3JtYXRQcmVmaXgsZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7cmV0dXJuIGk9bnVsbD09aT8wOitpLHI9bnVsbD09cj8xOityLDE9PT1hcmd1bWVudHMubGVuZ3RoPyhyPWksaT0wKTpyLT1pLGZ1bmN0aW9uKCl7cmV0dXJuIHQoKSpyK2l9fXJldHVybiBlLnNvdXJjZT1uLGV9KGRjKTt2YXIga3o9ZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkscil7dmFyIG8scztyZXR1cm4gaT1udWxsPT1pPzA6K2kscj1udWxsPT1yPzE6K3IsZnVuY3Rpb24oKXt2YXIgYTtpZihudWxsIT1vKWE9byxvPW51bGw7ZWxzZSBkb3tvPTIqdCgpLTEsYT0yKnQoKS0xLHM9bypvK2EqYX13aGlsZSghc3x8cz4xKTtyZXR1cm4gaStyKmEqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHMpL3MpfX1yZXR1cm4gZS5zb3VyY2U9bixlfShkYyksRno9KGZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZSgpe3ZhciBpPWt6LnNvdXJjZSh0KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGkoKSl9fXJldHVybiBlLnNvdXJjZT1uLGV9KGRjKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAsbz0wO288aTsrK28pcis9dCgpO3JldHVybiByfX1yZXR1cm4gZS5zb3VyY2U9bixlfShkYykpO2Z1bmN0aW9uIHpzKG4sdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpicmVhaztjYXNlIDE6dGhpcy5yYW5nZShuKTticmVhaztkZWZhdWx0OnRoaXMucmFuZ2UodCkuZG9tYWluKG4pfXJldHVybiB0aGlzfShmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7dmFyIHI9Rnouc291cmNlKHQpKGkpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiByKCkvaX19cmV0dXJuIGUuc291cmNlPW4sZX0pKGRjKSxmdW5jdGlvbiBuKHQpe2Z1bmN0aW9uIGUoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuLU1hdGgubG9nKDEtdCgpKS9pfX1yZXR1cm4gZS5zb3VyY2U9bixlfShkYyk7dmFyIEFsZT1BcnJheS5wcm90b3R5cGUsbFM9QWxlLm1hcCx0Zj1BbGUuc2xpY2UsTno9e25hbWU6ImltcGxpY2l0In07ZnVuY3Rpb24gY1MoKXt2YXIgbj1ncCgpLHQ9W10sZT1bXSxpPU56O2Z1bmN0aW9uIHIobyl7dmFyIHM9bysiIixhPW4uZ2V0KHMpO2lmKCFhKXtpZihpIT09TnopcmV0dXJuIGk7bi5zZXQocyxhPXQucHVzaChvKSl9cmV0dXJuIGVbKGEtMSklZS5sZW5ndGhdfXJldHVybiByLmRvbWFpbj1mdW5jdGlvbihvKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC5zbGljZSgpO3Q9W10sbj1ncCgpO2Zvcih2YXIgbCxjLHM9LTEsYT1vLmxlbmd0aDsrK3M8YTspbi5oYXMoYz0obD1vW3NdKSsiIil8fG4uc2V0KGMsdC5wdXNoKGwpKTtyZXR1cm4gcn0sci5yYW5nZT1mdW5jdGlvbihvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Zi5jYWxsKG8pLHIpOmUuc2xpY2UoKX0sci51bmtub3duPWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW8scik6aX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGNTKHQsZSkudW5rbm93bihpKX0senMuYXBwbHkocixhcmd1bWVudHMpLHJ9ZnVuY3Rpb24gd3koKXt2YXIgcixvLG49Y1MoKS51bmtub3duKHZvaWQgMCksdD1uLmRvbWFpbixlPW4ucmFuZ2UsaT1bMCwxXSxzPSExLGE9MCxsPTAsYz0uNTtmdW5jdGlvbiB1KCl7dmFyIGQ9dCgpLmxlbmd0aCxwPWlbMV08aVswXSxoPWlbcC0wXSxmPWlbMS1wXTtyPShmLWgpL01hdGgubWF4KDEsZC1hKzIqbCkscyYmKHI9TWF0aC5mbG9vcihyKSksaCs9KGYtaC1yKihkLWEpKSpjLG89ciooMS1hKSxzJiYoaD1NYXRoLnJvdW5kKGgpLG89TWF0aC5yb3VuZChvKSk7dmFyIG09S2goZCkubWFwKGZ1bmN0aW9uKHgpe3JldHVybiBoK3IqeH0pO3JldHVybiBlKHA/bS5yZXZlcnNlKCk6bSl9cmV0dXJuIGRlbGV0ZSBuLnVua25vd24sbi5kb21haW49ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQoZCksdSgpKTp0KCl9LG4ucmFuZ2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9WytkWzBdLCtkWzFdXSx1KCkpOmkuc2xpY2UoKX0sbi5yYW5nZVJvdW5kPWZ1bmN0aW9uKGQpe3JldHVybiBpPVsrZFswXSwrZFsxXV0scz0hMCx1KCl9LG4uYmFuZHdpZHRoPWZ1bmN0aW9uKCl7cmV0dXJuIG99LG4uc3RlcD1mdW5jdGlvbigpe3JldHVybiByfSxuLnJvdW5kPWZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSEhZCx1KCkpOnN9LG4ucGFkZGluZz1mdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1NYXRoLm1pbigxLGw9K2QpLHUoKSk6YX0sbi5wYWRkaW5nSW5uZXI9ZnVuY3Rpb24oZCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9TWF0aC5taW4oMSxkKSx1KCkpOmF9LG4ucGFkZGluZ091dGVyPWZ1bmN0aW9uKGQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPStkLHUoKSk6bH0sbi5hbGlnbj1mdW5jdGlvbihkKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz1NYXRoLm1heCgwLE1hdGgubWluKDEsZCkpLHUoKSk6Y30sbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHd5KHQoKSxpKS5yb3VuZChzKS5wYWRkaW5nSW5uZXIoYSkucGFkZGluZ091dGVyKGwpLmFsaWduKGMpfSx6cy5hcHBseSh1KCksYXJndW1lbnRzKX1mdW5jdGlvbiBJbGUobil7dmFyIHQ9bi5jb3B5O3JldHVybiBuLnBhZGRpbmc9bi5wYWRkaW5nT3V0ZXIsZGVsZXRlIG4ucGFkZGluZ0lubmVyLGRlbGV0ZSBuLnBhZGRpbmdPdXRlcixuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gSWxlKHQoKSl9LG59ZnVuY3Rpb24gU3koKXtyZXR1cm4gSWxlKHd5LmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYWRkaW5nSW5uZXIoMSkpfWZ1bmN0aW9uIEx6KG4pe3JldHVybitufXZhciBSbGU9WzAsMV07ZnVuY3Rpb24gamEobil7cmV0dXJuIG59ZnVuY3Rpb24gQnoobix0KXtyZXR1cm4odC09bj0rbik/ZnVuY3Rpb24oZSl7cmV0dXJuKGUtbikvdH06ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG59fShpc05hTih0KT9OYU46LjUpfWZ1bmN0aW9uIE9sZShuKXt2YXIgaSx0PW5bMF0sZT1uW24ubGVuZ3RoLTFdO3JldHVybiB0PmUmJihpPXQsdD1lLGU9aSksZnVuY3Rpb24ocil7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxyKSl9fWZ1bmN0aW9uIEdVZShuLHQsZSl7dmFyIGk9blswXSxyPW5bMV0sbz10WzBdLHM9dFsxXTtyZXR1cm4gcjxpPyhpPUJ6KHIsaSksbz1lKHMsbykpOihpPUJ6KGksciksbz1lKG8scykpLGZ1bmN0aW9uKGEpe3JldHVybiBvKGkoYSkpfX1mdW5jdGlvbiBXVWUobix0LGUpe3ZhciBpPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKS0xLHI9bmV3IEFycmF5KGkpLG89bmV3IEFycmF5KGkpLHM9LTE7Zm9yKG5baV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrczxpOylyW3NdPUJ6KG5bc10sbltzKzFdKSxvW3NdPWUodFtzXSx0W3MrMV0pO3JldHVybiBmdW5jdGlvbihhKXt2YXIgbD1pdShuLGEsMSxpKS0xO3JldHVybiBvW2xdKHJbbF0oYSkpfX1mdW5jdGlvbiBuZihuLHQpe3JldHVybiB0LmRvbWFpbihuLmRvbWFpbigpKS5yYW5nZShuLnJhbmdlKCkpLmludGVycG9sYXRlKG4uaW50ZXJwb2xhdGUoKSkuY2xhbXAobi5jbGFtcCgpKS51bmtub3duKG4udW5rbm93bigpKX1mdW5jdGlvbiB1Uygpe3ZhciBpLHIsbyxhLGwsYyxuPVJsZSx0PVJsZSxlPWZwLHM9amE7ZnVuY3Rpb24gdSgpe3JldHVybiBhPU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP1dVZTpHVWUsbD1jPW51bGwsZH1mdW5jdGlvbiBkKHApe3JldHVybiBpc05hTihwPStwKT9vOihsfHwobD1hKG4ubWFwKGkpLHQsZSkpKShpKHMocCkpKX1yZXR1cm4gZC5pbnZlcnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHMocigoY3x8KGM9YSh0LG4ubWFwKGkpLENzKSkpKHApKSl9LGQuZG9tYWluPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWxTLmNhbGwocCxMeikscz09PWphfHwocz1PbGUobikpLHUoKSk6bi5zbGljZSgpfSxkLnJhbmdlPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PXRmLmNhbGwocCksdSgpKTp0LnNsaWNlKCl9LGQucmFuZ2VSb3VuZD1mdW5jdGlvbihwKXtyZXR1cm4gdD10Zi5jYWxsKHApLGU9c3osdSgpfSxkLmNsYW1wPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXA/T2xlKG4pOmphLGQpOnMhPT1qYX0sZC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihwKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1wLHUoKSk6ZX0sZC51bmtub3duPWZ1bmN0aW9uKHApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXAsZCk6b30sZnVuY3Rpb24ocCxoKXtyZXR1cm4gaT1wLHI9aCx1KCl9fWZ1bmN0aW9uIGRTKG4sdCl7cmV0dXJuIHVTKCkobix0KX1mdW5jdGlvbiBFZyhuKXt2YXIgdD1uLmRvbWFpbjtyZXR1cm4gbi50aWNrcz1mdW5jdGlvbihlKXt2YXIgaT10KCk7cmV0dXJuIEh3KGlbMF0saVtpLmxlbmd0aC0xXSxlPz8xMCl9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlLGkpe3ZhciByPXQoKTtyZXR1cm4gZnVuY3Rpb24obix0LGUsaSl7dmFyIG8scj12ZChuLHQsZSk7c3dpdGNoKChpPWVmKGk/PyIsZiIpKS50eXBlKXtjYXNlInMiOnZhciBzPU1hdGgubWF4KE1hdGguYWJzKG4pLE1hdGguYWJzKHQpKTtyZXR1cm4gbnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIE1hdGgubWF4KDAsMypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoQ2QodCkvMykpKS1DZChNYXRoLmFicyhuKSkpfShyLHMpKSYmKGkucHJlY2lzaW9uPW8pLHJPKGkscyk7Y2FzZSIiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlInAiOmNhc2UiciI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49TWF0aC5hYnMobiksdD1NYXRoLmFicyh0KS1uLE1hdGgubWF4KDAsQ2QodCktQ2QobikpKzF9KHIsTWF0aC5tYXgoTWF0aC5hYnMobiksTWF0aC5hYnModCkpKSkmJihpLnByZWNpc2lvbj1vLSgiZSI9PT1pLnR5cGUpKTticmVhaztjYXNlImYiOmNhc2UiJSI6bnVsbD09aS5wcmVjaXNpb24mJiFpc05hTihvPWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLm1heCgwLC1DZChNYXRoLmFicyhuKSkpfShyKSkmJihpLnByZWNpc2lvbj1vLTIqKCIlIj09PWkudHlwZSkpfXJldHVybiB4byhpKX0oclswXSxyW3IubGVuZ3RoLTFdLGU/PzEwLGkpfSxuLm5pY2U9ZnVuY3Rpb24oZSl7bnVsbD09ZSYmKGU9MTApO3ZhciBsLGk9dCgpLHI9MCxvPWkubGVuZ3RoLTEscz1pW3JdLGE9aVtvXTtyZXR1cm4gYTxzJiYobD1zLHM9YSxhPWwsbD1yLHI9byxvPWwpLChsPXB5KHMsYSxlKSk+MD9sPXB5KHM9TWF0aC5mbG9vcihzL2wpKmwsYT1NYXRoLmNlaWwoYS9sKSpsLGUpOmw8MCYmKGw9cHkocz1NYXRoLmNlaWwocypsKS9sLGE9TWF0aC5mbG9vcihhKmwpL2wsZSkpLGw+MD8oaVtyXT1NYXRoLmZsb29yKHMvbCkqbCxpW29dPU1hdGguY2VpbChhL2wpKmwsdChpKSk6bDwwJiYoaVtyXT1NYXRoLmNlaWwocypsKS9sLGlbb109TWF0aC5mbG9vcihhKmwpL2wsdChpKSksbn0sbn1mdW5jdGlvbiBRbygpe3ZhciBuPWRTKGphLGphKTtyZXR1cm4gbi5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIG5mKG4sUW8oKSl9LHpzLmFwcGx5KG4sYXJndW1lbnRzKSxFZyhuKX1mdW5jdGlvbiBvTyhuLHQpe3ZhciBzLGU9MCxpPShuPW4uc2xpY2UoKSkubGVuZ3RoLTEscj1uW2VdLG89bltpXTtyZXR1cm4gbzxyJiYocz1lLGU9aSxpPXMscz1yLHI9byxvPXMpLG5bZV09dC5mbG9vcihyKSxuW2ldPXQuY2VpbChvKSxufWZ1bmN0aW9uIGtsZShuKXtyZXR1cm4gTWF0aC5sb2cobil9ZnVuY3Rpb24gRmxlKG4pe3JldHVybiBNYXRoLmV4cChuKX1mdW5jdGlvbiBxVWUobil7cmV0dXJuLU1hdGgubG9nKC1uKX1mdW5jdGlvbiBZVWUobil7cmV0dXJuLU1hdGguZXhwKC1uKX1mdW5jdGlvbiBYVWUobil7cmV0dXJuIGlzRmluaXRlKG4pPysoIjFlIituKTpuPDA/MDpufWZ1bmN0aW9uIE5sZShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLW4oLXQpfX1mdW5jdGlvbiBIeihuKXt2YXIgcixvLHQ9bihrbGUsRmxlKSxlPXQuZG9tYWluLGk9MTA7ZnVuY3Rpb24gcygpe3JldHVybiByPWZ1bmN0aW9uKG4pe3JldHVybiBuPT09TWF0aC5FP01hdGgubG9nOjEwPT09biYmTWF0aC5sb2cxMHx8Mj09PW4mJk1hdGgubG9nMnx8KG49TWF0aC5sb2cobiksZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL259KX0oaSksbz1mdW5jdGlvbihuKXtyZXR1cm4gMTA9PT1uP1hVZTpuPT09TWF0aC5FP01hdGguZXhwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyhuLHQpfX0oaSksZSgpWzBdPDA/KHI9TmxlKHIpLG89TmxlKG8pLG4ocVVlLFlVZSkpOm4oa2xlLEZsZSksdH1yZXR1cm4gdC5iYXNlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSthLHMoKSk6aX0sdC5kb21haW49ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUoYSkscygpKTplKCl9LHQudGlja3M9ZnVuY3Rpb24oYSl7dmFyIGQsbD1lKCksYz1sWzBdLHU9bFtsLmxlbmd0aC0xXTsoZD11PGMpJiYocD1jLGM9dSx1PXApO3ZhciBmLG0seCxwPXIoYyksaD1yKHUpLGc9bnVsbD09YT8xMDorYSxiPVtdO2lmKCEoaSUxKSYmaC1wPGcpe2lmKHA9TWF0aC5yb3VuZChwKS0xLGg9TWF0aC5yb3VuZChoKSsxLGM+MCl7Zm9yKDtwPGg7KytwKWZvcihtPTEsZj1vKHApO208aTsrK20paWYoISgoeD1mKm0pPGMpKXtpZih4PnUpYnJlYWs7Yi5wdXNoKHgpfX1lbHNlIGZvcig7cDxoOysrcClmb3IobT1pLTEsZj1vKHApO20+PTE7LS1tKWlmKCEoKHg9ZiptKTxjKSl7aWYoeD51KWJyZWFrO2IucHVzaCh4KX19ZWxzZSBiPUh3KHAsaCxNYXRoLm1pbihoLXAsZykpLm1hcChvKTtyZXR1cm4gZD9iLnJldmVyc2UoKTpifSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24oYSxsKXtpZihudWxsPT1sJiYobD0xMD09PWk/Ii4wZSI6IiwiKSwiZnVuY3Rpb24iIT10eXBlb2YgbCYmKGw9eG8obCkpLGE9PT0xLzApcmV0dXJuIGw7bnVsbD09YSYmKGE9MTApO3ZhciBjPU1hdGgubWF4KDEsaSphL3QudGlja3MoKS5sZW5ndGgpO3JldHVybiBmdW5jdGlvbih1KXt2YXIgZD11L28oTWF0aC5yb3VuZChyKHUpKSk7cmV0dXJuIGQqaTxpLS41JiYoZCo9aSksZDw9Yz9sKHUpOiIifX0sdC5uaWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGUob08oZSgpLHtmbG9vcjpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmZsb29yKHIoYSkpKX0sY2VpbDpmdW5jdGlvbihhKXtyZXR1cm4gbyhNYXRoLmNlaWwocihhKSkpfX0pKX0sdH1mdW5jdGlvbiBwUygpe3ZhciBuPUh6KHVTKCkpLmRvbWFpbihbMSwxMF0pO3JldHVybiBuLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmYobixwUygpKS5iYXNlKG4uYmFzZSgpKX0senMuYXBwbHkobixhcmd1bWVudHMpLG59dmFyIFV6PW5ldyBEYXRlLHp6PW5ldyBEYXRlO2Z1bmN0aW9uIHlyKG4sdCxlLGkpe2Z1bmN0aW9uIHIobyl7cmV0dXJuIG4obz0wPT09YXJndW1lbnRzLmxlbmd0aD9uZXcgRGF0ZTpuZXcgRGF0ZSgrbykpLG99cmV0dXJuIHIuZmxvb3I9ZnVuY3Rpb24obyl7cmV0dXJuIG4obz1uZXcgRGF0ZSgrbykpLG99LHIuY2VpbD1mdW5jdGlvbihvKXtyZXR1cm4gbihvPW5ldyBEYXRlKG8tMSkpLHQobywxKSxuKG8pLG99LHIucm91bmQ9ZnVuY3Rpb24obyl7dmFyIHM9cihvKSxhPXIuY2VpbChvKTtyZXR1cm4gby1zPGEtbz9zOmF9LHIub2Zmc2V0PWZ1bmN0aW9uKG8scyl7cmV0dXJuIHQobz1uZXcgRGF0ZSgrbyksbnVsbD09cz8xOk1hdGguZmxvb3IocykpLG99LHIucmFuZ2U9ZnVuY3Rpb24obyxzLGEpe3ZhciBjLGw9W107aWYobz1yLmNlaWwobyksYT1udWxsPT1hPzE6TWF0aC5mbG9vcihhKSwhKG88cyYmYT4wKSlyZXR1cm4gbDtkb3tsLnB1c2goYz1uZXcgRGF0ZSgrbykpLHQobyxhKSxuKG8pfXdoaWxlKGM8byYmbzxzKTtyZXR1cm4gbH0sci5maWx0ZXI9ZnVuY3Rpb24obyl7cmV0dXJuIHlyKGZ1bmN0aW9uKHMpe2lmKHM+PXMpZm9yKDtuKHMpLCFvKHMpOylzLnNldFRpbWUocy0xKX0sZnVuY3Rpb24ocyxhKXtpZihzPj1zKWlmKGE8MClmb3IoOysrYTw9MDspZm9yKDt0KHMsLTEpLCFvKHMpOyk7ZWxzZSBmb3IoOy0tYT49MDspZm9yKDt0KHMsMSksIW8ocyk7KTt9KX0sZSYmKHIuY291bnQ9ZnVuY3Rpb24obyxzKXtyZXR1cm4gVXouc2V0VGltZSgrbyksenouc2V0VGltZSgrcyksbihVeiksbih6eiksTWF0aC5mbG9vcihlKFV6LHp6KSl9LHIuZXZlcnk9ZnVuY3Rpb24obyl7cmV0dXJuIG89TWF0aC5mbG9vcihvKSxpc0Zpbml0ZShvKSYmbz4wP28+MT9yLmZpbHRlcihpP2Z1bmN0aW9uKHMpe3JldHVybiBpKHMpJW89PTB9OmZ1bmN0aW9uKHMpe3JldHVybiByLmNvdW50KDAscyklbz09MH0pOnI6bnVsbH0pLHJ9dmFyIHNPPXlyKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4gdC1ufSk7c08uZXZlcnk9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5mbG9vcihuKSxpc0Zpbml0ZShuKSYmbj4wP24+MT95cihmdW5jdGlvbih0KXt0LnNldFRpbWUoTWF0aC5mbG9vcih0L24pKm4pfSxmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKm4pfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL259KTpzTzpudWxsfTt2YXIgYU89c08sX3A9NmU0LGNPPTYwNDhlNSxCbGU9eXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzFlMyp0KX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS8xZTN9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ1NlY29uZHMoKX0pLHVPPUJsZSxIbGU9eXIoZnVuY3Rpb24obil7bi5zZXRUaW1lKG4tbi5nZXRNaWxsaXNlY29uZHMoKS0xZTMqbi5nZXRTZWNvbmRzKCkpfSxmdW5jdGlvbihuLHQpe24uc2V0VGltZSgrbit0Kl9wKX0sZnVuY3Rpb24obix0KXtyZXR1cm4odC1uKS9fcH0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksR3o9SGxlLFVsZT15cihmdW5jdGlvbihuKXtuLnNldFRpbWUobi1uLmdldE1pbGxpc2Vjb25kcygpLTFlMypuLmdldFNlY29uZHMoKS1uLmdldE1pbnV0ZXMoKSpfcCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKCtuKzM2ZTUqdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvMzZlNX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLFd6PVVsZSx6bGU9eXIoZnVuY3Rpb24obil7bi5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldERhdGUobi5nZXREYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbi0odC5nZXRUaW1lem9uZU9mZnNldCgpLW4uZ2V0VGltZXpvbmVPZmZzZXQoKSkqX3ApLzg2NGU1fSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXREYXRlKCktMX0pLEV5PXpsZTtmdW5jdGlvbiBEZyhuKXtyZXR1cm4geXIoZnVuY3Rpb24odCl7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpLSh0LmdldERheSgpKzctbiklNyksdC5zZXRIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0sZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10LShlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSpfcCkvY099KX12YXIgQWc9RGcoMCksVHk9RGcoMSkscmY9KERnKDIpLERnKDMpLERnKDQpKSxYbGU9KERnKDUpLERnKDYpLHlyKGZ1bmN0aW9uKG4pe24uc2V0RGF0ZSgxKSxuLnNldEhvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0TW9udGgobi5nZXRNb250aCgpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldE1vbnRoKCktbi5nZXRNb250aCgpKzEyKih0LmdldEZ1bGxZZWFyKCktbi5nZXRGdWxsWWVhcigpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pKSxxej1YbGUsWXo9eXIoZnVuY3Rpb24obil7bi5zZXRNb250aCgwLDEpLG4uc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQuZ2V0RnVsbFllYXIoKS1uLmdldEZ1bGxZZWFyKCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KTtZei5ldmVyeT1mdW5jdGlvbihuKXtyZXR1cm4gaXNGaW5pdGUobj1NYXRoLmZsb29yKG4pKSYmbj4wP3lyKGZ1bmN0aW9uKHQpe3Quc2V0RnVsbFllYXIoTWF0aC5mbG9vcih0LmdldEZ1bGxZZWFyKCkvbikqbiksdC5zZXRNb250aCgwLDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9LGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSpuKX0pOm51bGx9O3ZhciB2cD1ZeixRbGU9eXIoZnVuY3Rpb24obil7bi5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24obix0KXtuLnNldFVUQ0RhdGUobi5nZXRVVENEYXRlKCkrdCl9LGZ1bmN0aW9uKG4sdCl7cmV0dXJuKHQtbikvODY0ZTV9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldFVUQ0RhdGUoKS0xfSksZE89UWxlO2Z1bmN0aW9uIElnKG4pe3JldHVybiB5cihmdW5jdGlvbih0KXt0LnNldFVUQ0RhdGUodC5nZXRVVENEYXRlKCktKHQuZ2V0VVRDRGF5KCkrNy1uKSU3KSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKSs3KmUpfSxmdW5jdGlvbih0LGUpe3JldHVybihlLXQpL2NPfSl9dmFyIGhTPUlnKDApLER5PUlnKDEpLG9mPShJZygyKSxJZygzKSxJZyg0KSksWHo9KElnKDUpLElnKDYpLHlyKGZ1bmN0aW9uKG4pe24uc2V0VVRDTW9udGgoMCwxKSxuLnNldFVUQ0hvdXJzKDAsMCwwLDApfSxmdW5jdGlvbihuLHQpe24uc2V0VVRDRnVsbFllYXIobi5nZXRVVENGdWxsWWVhcigpK3QpfSxmdW5jdGlvbihuLHQpe3JldHVybiB0LmdldFVUQ0Z1bGxZZWFyKCktbi5nZXRVVENGdWxsWWVhcigpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENGdWxsWWVhcigpfSkpO1h6LmV2ZXJ5PWZ1bmN0aW9uKG4pe3JldHVybiBpc0Zpbml0ZShuPU1hdGguZmxvb3IobikpJiZuPjA/eXIoZnVuY3Rpb24odCl7dC5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKHQuZ2V0VVRDRnVsbFllYXIoKS9uKSpuKSx0LnNldFVUQ01vbnRoKDAsMSksdC5zZXRVVENIb3VycygwLDAsMCwwKX0sZnVuY3Rpb24odCxlKXt0LnNldFVUQ0Z1bGxZZWFyKHQuZ2V0VVRDRnVsbFllYXIoKStlKm4pfSk6bnVsbH07dmFyIFBnPVh6O2Z1bmN0aW9uIFF6KG4pe2lmKDA8PW4ueSYmbi55PDEwMCl7dmFyIHQ9bmV3IERhdGUoLTEsbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpO3JldHVybiB0LnNldEZ1bGxZZWFyKG4ueSksdH1yZXR1cm4gbmV3IERhdGUobi55LG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKX1mdW5jdGlvbiBLeihuKXtpZigwPD1uLnkmJm4ueTwxMDApe3ZhciB0PW5ldyBEYXRlKERhdGUuVVRDKC0xLG4ubSxuLmQsbi5ILG4uTSxuLlMsbi5MKSk7cmV0dXJuIHQuc2V0VVRDRnVsbFllYXIobi55KSx0fXJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhuLnksbi5tLG4uZCxuLkgsbi5NLG4uUyxuLkwpKX1mdW5jdGlvbiBmUyhuLHQsZSl7cmV0dXJue3k6bixtOnQsZDplLEg6MCxNOjAsUzowLEw6MH19dmFyIEF5LEl5LHRjZT17Ii0iOiIiLF86IiAiLDA6IjAifSx1cz0vXlxzKlxkKy8sZ3plPS9eJS8sX3plPS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBHaShuLHQsZSl7dmFyIGk9bjwwPyItIjoiIixyPShpPy1uOm4pKyIiLG89ci5sZW5ndGg7cmV0dXJuIGkrKG88ZT9uZXcgQXJyYXkoZS1vKzEpLmpvaW4odCkrcjpyKX1mdW5jdGlvbiB2emUobil7cmV0dXJuIG4ucmVwbGFjZShfemUsIlxcJCYiKX1mdW5jdGlvbiBtUyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrbi5tYXAodnplKS5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gZ1Mobil7Zm9yKHZhciB0PXt9LGU9LTEsaT1uLmxlbmd0aDsrK2U8aTspdFtuW2VdLnRvTG93ZXJDYXNlKCldPWU7cmV0dXJuIHR9ZnVuY3Rpb24geXplKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi53PStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGJ6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsxKSk7cmV0dXJuIGk/KG4udT0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB4emUobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLlU9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQ3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5WPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE16ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uVz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuY2Uobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrNCkpO3JldHVybiBpPyhuLnk9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gaWNlKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi55PStpWzBdKygraVswXT42OD8xOTAwOjJlMyksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gd3plKG4sdCxlKXt2YXIgaT0vXihaKXwoWystXVxkXGQpKD86Oj8oXGRcZCkpPy8uZXhlYyh0LnNsaWNlKGUsZSs2KSk7cmV0dXJuIGk/KG4uWj1pWzFdPzA6LShpWzJdKyhpWzNdfHwiMDAiKSksZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gU3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzEpKTtyZXR1cm4gaT8obi5xPTMqaVswXS0zLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEV6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4ubT1pWzBdLTEsZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gcmNlKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5kPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFR6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSszKSk7cmV0dXJuIGk/KG4ubT0wLG4uZD0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBvY2Uobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrMikpO3JldHVybiBpPyhuLkg9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRHplKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzIpKTtyZXR1cm4gaT8obi5NPStpWzBdLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEF6ZShuLHQsZSl7dmFyIGk9dXMuZXhlYyh0LnNsaWNlKGUsZSsyKSk7cmV0dXJuIGk/KG4uUz0raVswXSxlK2lbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJemUobix0LGUpe3ZhciBpPXVzLmV4ZWModC5zbGljZShlLGUrMykpO3JldHVybiBpPyhuLkw9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUHplKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSxlKzYpKTtyZXR1cm4gaT8obi5MPU1hdGguZmxvb3IoaVswXS8xZTMpLGUraVswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFJ6ZShuLHQsZSl7dmFyIGk9Z3plLmV4ZWModC5zbGljZShlLGUrMSkpO3JldHVybiBpP2UraVswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gT3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLlE9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24ga3plKG4sdCxlKXt2YXIgaT11cy5leGVjKHQuc2xpY2UoZSkpO3JldHVybiBpPyhuLnM9K2lbMF0sZStpWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gc2NlKG4sdCl7cmV0dXJuIEdpKG4uZ2V0RGF0ZSgpLHQsMil9ZnVuY3Rpb24gRnplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0SG91cnMoKSx0LDIpfWZ1bmN0aW9uIE56ZShuLHQpe3JldHVybiBHaShuLmdldEhvdXJzKCklMTJ8fDEyLHQsMil9ZnVuY3Rpb24gTHplKG4sdCl7cmV0dXJuIEdpKDErRXkuY291bnQodnAobiksbiksdCwzKX1mdW5jdGlvbiBkY2Uobix0KXtyZXR1cm4gR2kobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfWZ1bmN0aW9uIEJ6ZShuLHQpe3JldHVybiBkY2Uobix0KSsiMDAwIn1mdW5jdGlvbiBWemUobix0KXtyZXR1cm4gR2kobi5nZXRNb250aCgpKzEsdCwyKX1mdW5jdGlvbiBIemUobix0KXtyZXR1cm4gR2kobi5nZXRNaW51dGVzKCksdCwyKX1mdW5jdGlvbiBVemUobix0KXtyZXR1cm4gR2kobi5nZXRTZWNvbmRzKCksdCwyKX1mdW5jdGlvbiB6emUobil7dmFyIHQ9bi5nZXREYXkoKTtyZXR1cm4gMD09PXQ/Nzp0fWZ1bmN0aW9uIGp6ZShuLHQpe3JldHVybiBHaShBZy5jb3VudCh2cChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gcGNlKG4pe3ZhciB0PW4uZ2V0RGF5KCk7cmV0dXJuIHQ+PTR8fDA9PT10P3JmKG4pOnJmLmNlaWwobil9ZnVuY3Rpb24gR3plKG4sdCl7cmV0dXJuIG49cGNlKG4pLEdpKHJmLmNvdW50KHZwKG4pLG4pKyg0PT09dnAobikuZ2V0RGF5KCkpLHQsMil9ZnVuY3Rpb24gV3plKG4pe3JldHVybiBuLmdldERheSgpfWZ1bmN0aW9uIHF6ZShuLHQpe3JldHVybiBHaShUeS5jb3VudCh2cChuKS0xLG4pLHQsMil9ZnVuY3Rpb24gWXplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0RnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBYemUobix0KXtyZXR1cm4gR2koKG49cGNlKG4pKS5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfWZ1bmN0aW9uIFF6ZShuLHQpe3JldHVybiBHaShuLmdldEZ1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gS3plKG4sdCl7dmFyIGU9bi5nZXREYXkoKTtyZXR1cm4gR2koKG49ZT49NHx8MD09PWU/cmYobik6cmYuY2VpbChuKSkuZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX1mdW5jdGlvbiBaemUobil7dmFyIHQ9bi5nZXRUaW1lem9uZU9mZnNldCgpO3JldHVybih0PjA/Ii0iOih0Kj0tMSwiKyIpKStHaSh0LzYwfDAsIjAiLDIpK0dpKHQlNjAsIjAiLDIpfWZ1bmN0aW9uIGFjZShuLHQpe3JldHVybiBHaShuLmdldFVUQ0RhdGUoKSx0LDIpfWZ1bmN0aW9uIEp6ZShuLHQpe3JldHVybiBHaShuLmdldFVUQ0hvdXJzKCksdCwyKX1mdW5jdGlvbiAkemUobix0KXtyZXR1cm4gR2kobi5nZXRVVENIb3VycygpJTEyfHwxMix0LDIpfWZ1bmN0aW9uIGVqZShuLHQpe3JldHVybiBHaSgxK2RPLmNvdW50KFBnKG4pLG4pLHQsMyl9ZnVuY3Rpb24gaGNlKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDTWlsbGlzZWNvbmRzKCksdCwzKX1mdW5jdGlvbiB0amUobix0KXtyZXR1cm4gaGNlKG4sdCkrIjAwMCJ9ZnVuY3Rpb24gbmplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDTW9udGgoKSsxLHQsMil9ZnVuY3Rpb24gaWplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDTWludXRlcygpLHQsMil9ZnVuY3Rpb24gcmplKG4sdCl7cmV0dXJuIEdpKG4uZ2V0VVRDU2Vjb25kcygpLHQsMil9ZnVuY3Rpb24gb2plKG4pe3ZhciB0PW4uZ2V0VVRDRGF5KCk7cmV0dXJuIDA9PT10Pzc6dH1mdW5jdGlvbiBzamUobix0KXtyZXR1cm4gR2koaFMuY291bnQoUGcobiktMSxuKSx0LDIpfWZ1bmN0aW9uIGZjZShuKXt2YXIgdD1uLmdldFVUQ0RheSgpO3JldHVybiB0Pj00fHwwPT09dD9vZihuKTpvZi5jZWlsKG4pfWZ1bmN0aW9uIGFqZShuLHQpe3JldHVybiBuPWZjZShuKSxHaShvZi5jb3VudChQZyhuKSxuKSsoND09PVBnKG4pLmdldFVUQ0RheSgpKSx0LDIpfWZ1bmN0aW9uIGxqZShuKXtyZXR1cm4gbi5nZXRVVENEYXkoKX1mdW5jdGlvbiBjamUobix0KXtyZXR1cm4gR2koRHkuY291bnQoUGcobiktMSxuKSx0LDIpfWZ1bmN0aW9uIHVqZShuLHQpe3JldHVybiBHaShuLmdldFVUQ0Z1bGxZZWFyKCklMTAwLHQsMil9ZnVuY3Rpb24gZGplKG4sdCl7cmV0dXJuIEdpKChuPWZjZShuKSkuZ2V0VVRDRnVsbFllYXIoKSUxMDAsdCwyKX1mdW5jdGlvbiBwamUobix0KXtyZXR1cm4gR2kobi5nZXRVVENGdWxsWWVhcigpJTFlNCx0LDQpfWZ1bmN0aW9uIGhqZShuLHQpe3ZhciBlPW4uZ2V0VVRDRGF5KCk7cmV0dXJuIEdpKChuPWU+PTR8fDA9PT1lP29mKG4pOm9mLmNlaWwobikpLmdldFVUQ0Z1bGxZZWFyKCklMWU0LHQsNCl9ZnVuY3Rpb24gZmplKCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBsY2UoKXtyZXR1cm4iJSJ9ZnVuY3Rpb24gY2NlKG4pe3JldHVybitufWZ1bmN0aW9uIHVjZShuKXtyZXR1cm4gTWF0aC5mbG9vcigrbi8xZTMpfUF5PWZ1bmN0aW9uKG4pe3ZhciB0PW4uZGF0ZVRpbWUsZT1uLmRhdGUsaT1uLnRpbWUscj1uLnBlcmlvZHMsbz1uLmRheXMscz1uLnNob3J0RGF5cyxhPW4ubW9udGhzLGw9bi5zaG9ydE1vbnRocyxjPW1TKHIpLHU9Z1MociksZD1tUyhvKSxwPWdTKG8pLGg9bVMocyksZj1nUyhzKSxtPW1TKGEpLHg9Z1MoYSksZz1tUyhsKSxiPWdTKGwpLEQ9e2E6ZnVuY3Rpb24oVGUpe3JldHVybiBzW1RlLmdldERheSgpXX0sQTpmdW5jdGlvbihUZSl7cmV0dXJuIG9bVGUuZ2V0RGF5KCldfSxiOmZ1bmN0aW9uKFRlKXtyZXR1cm4gbFtUZS5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihUZSl7cmV0dXJuIGFbVGUuZ2V0TW9udGgoKV19LGM6bnVsbCxkOnNjZSxlOnNjZSxmOkJ6ZSxnOlh6ZSxHOkt6ZSxIOkZ6ZSxJOk56ZSxqOkx6ZSxMOmRjZSxtOlZ6ZSxNOkh6ZSxwOmZ1bmN0aW9uKFRlKXtyZXR1cm4gclsrKFRlLmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24oVGUpe3JldHVybiAxK35+KFRlLmdldE1vbnRoKCkvMyl9LFE6Y2NlLHM6dWNlLFM6VXplLHU6enplLFU6anplLFY6R3plLHc6V3plLFc6cXplLHg6bnVsbCxYOm51bGwseTpZemUsWTpRemUsWjpaemUsIiUiOmxjZX0sVD17YTpmdW5jdGlvbihUZSl7cmV0dXJuIHNbVGUuZ2V0VVRDRGF5KCldfSxBOmZ1bmN0aW9uKFRlKXtyZXR1cm4gb1tUZS5nZXRVVENEYXkoKV19LGI6ZnVuY3Rpb24oVGUpe3JldHVybiBsW1RlLmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKFRlKXtyZXR1cm4gYVtUZS5nZXRVVENNb250aCgpXX0sYzpudWxsLGQ6YWNlLGU6YWNlLGY6dGplLGc6ZGplLEc6aGplLEg6SnplLEk6JHplLGo6ZWplLEw6aGNlLG06bmplLE06aWplLHA6ZnVuY3Rpb24oVGUpe3JldHVybiByWysoVGUuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbihUZSl7cmV0dXJuIDErfn4oVGUuZ2V0VVRDTW9udGgoKS8zKX0sUTpjY2Usczp1Y2UsUzpyamUsdTpvamUsVTpzamUsVjphamUsdzpsamUsVzpjamUseDpudWxsLFg6bnVsbCx5OnVqZSxZOnBqZSxaOmZqZSwiJSI6bGNlfSxrPXthOmZ1bmN0aW9uKFRlLHh0LG10KXt2YXIgY2U9aC5leGVjKHh0LnNsaWNlKG10KSk7cmV0dXJuIGNlPyhUZS53PWZbY2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrY2VbMF0ubGVuZ3RoKTotMX0sQTpmdW5jdGlvbihUZSx4dCxtdCl7dmFyIGNlPWQuZXhlYyh4dC5zbGljZShtdCkpO3JldHVybiBjZT8oVGUudz1wW2NlWzBdLnRvTG93ZXJDYXNlKCldLG10K2NlWzBdLmxlbmd0aCk6LTF9LGI6ZnVuY3Rpb24oVGUseHQsbXQpe3ZhciBjZT1nLmV4ZWMoeHQuc2xpY2UobXQpKTtyZXR1cm4gY2U/KFRlLm09YltjZVswXS50b0xvd2VyQ2FzZSgpXSxtdCtjZVswXS5sZW5ndGgpOi0xfSxCOmZ1bmN0aW9uKFRlLHh0LG10KXt2YXIgY2U9bS5leGVjKHh0LnNsaWNlKG10KSk7cmV0dXJuIGNlPyhUZS5tPXhbY2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrY2VbMF0ubGVuZ3RoKTotMX0sYzpmdW5jdGlvbihUZSx4dCxtdCl7cmV0dXJuIGZlKFRlLHQseHQsbXQpfSxkOnJjZSxlOnJjZSxmOlB6ZSxnOmljZSxHOm5jZSxIOm9jZSxJOm9jZSxqOlR6ZSxMOkl6ZSxtOkV6ZSxNOkR6ZSxwOmZ1bmN0aW9uKFRlLHh0LG10KXt2YXIgY2U9Yy5leGVjKHh0LnNsaWNlKG10KSk7cmV0dXJuIGNlPyhUZS5wPXVbY2VbMF0udG9Mb3dlckNhc2UoKV0sbXQrY2VbMF0ubGVuZ3RoKTotMX0scTpTemUsUTpPemUsczpremUsUzpBemUsdTpiemUsVTp4emUsVjpDemUsdzp5emUsVzpNemUseDpmdW5jdGlvbihUZSx4dCxtdCl7cmV0dXJuIGZlKFRlLGUseHQsbXQpfSxYOmZ1bmN0aW9uKFRlLHh0LG10KXtyZXR1cm4gZmUoVGUsaSx4dCxtdCl9LHk6aWNlLFk6bmNlLFo6d3plLCIlIjpSemV9O2Z1bmN0aW9uIFooVGUseHQpe3JldHVybiBmdW5jdGlvbihtdCl7dmFyIGJ0LGhuLG9uLGNlPVtdLGR0PS0xLFdlPTAsTXQ9VGUubGVuZ3RoO2ZvcihtdCBpbnN0YW5jZW9mIERhdGV8fChtdD1uZXcgRGF0ZSgrbXQpKTsrK2R0PE10OykzNz09PVRlLmNoYXJDb2RlQXQoZHQpJiYoY2UucHVzaChUZS5zbGljZShXZSxkdCkpLG51bGwhPShobj10Y2VbYnQ9VGUuY2hhckF0KCsrZHQpXSk/YnQ9VGUuY2hhckF0KCsrZHQpOmhuPSJlIj09PWJ0PyIgIjoiMCIsKG9uPXh0W2J0XSkmJihidD1vbihtdCxobikpLGNlLnB1c2goYnQpLFdlPWR0KzEpO3JldHVybiBjZS5wdXNoKFRlLnNsaWNlKFdlLGR0KSksY2Uuam9pbigiIil9fWZ1bmN0aW9uIHooVGUseHQpe3JldHVybiBmdW5jdGlvbihtdCl7dmFyIFdlLE10LGNlPWZTKDE5MDAsdm9pZCAwLDEpO2lmKGZlKGNlLFRlLG10Kz0iIiwwKSE9bXQubGVuZ3RoKXJldHVybiBudWxsO2lmKCJRImluIGNlKXJldHVybiBuZXcgRGF0ZShjZS5RKTtpZigicyJpbiBjZSlyZXR1cm4gbmV3IERhdGUoMWUzKmNlLnMrKCJMImluIGNlP2NlLkw6MCkpO2lmKHh0JiYhKCJaImluIGNlKSYmKGNlLlo9MCksInAiaW4gY2UmJihjZS5IPWNlLkglMTIrMTIqY2UucCksdm9pZCAwPT09Y2UubSYmKGNlLm09InEiaW4gY2U/Y2UucTowKSwiViJpbiBjZSl7aWYoY2UuVjwxfHxjZS5WPjUzKXJldHVybiBudWxsOyJ3ImluIGNlfHwoY2Uudz0xKSwiWiJpbiBjZT8oTXQ9KFdlPUt6KGZTKGNlLnksMCwxKSkpLmdldFVUQ0RheSgpLFdlPU10PjR8fDA9PT1NdD9EeS5jZWlsKFdlKTpEeShXZSksV2U9ZE8ub2Zmc2V0KFdlLDcqKGNlLlYtMSkpLGNlLnk9V2UuZ2V0VVRDRnVsbFllYXIoKSxjZS5tPVdlLmdldFVUQ01vbnRoKCksY2UuZD1XZS5nZXRVVENEYXRlKCkrKGNlLncrNiklNyk6KE10PShXZT1ReihmUyhjZS55LDAsMSkpKS5nZXREYXkoKSxXZT1NdD40fHwwPT09TXQ/VHkuY2VpbChXZSk6VHkoV2UpLFdlPUV5Lm9mZnNldChXZSw3KihjZS5WLTEpKSxjZS55PVdlLmdldEZ1bGxZZWFyKCksY2UubT1XZS5nZXRNb250aCgpLGNlLmQ9V2UuZ2V0RGF0ZSgpKyhjZS53KzYpJTcpfWVsc2UoIlciaW4gY2V8fCJVImluIGNlKSYmKCJ3ImluIGNlfHwoY2Uudz0idSJpbiBjZT9jZS51JTc6IlciaW4gY2U/MTowKSxNdD0iWiJpbiBjZT9LeihmUyhjZS55LDAsMSkpLmdldFVUQ0RheSgpOlF6KGZTKGNlLnksMCwxKSkuZ2V0RGF5KCksY2UubT0wLGNlLmQ9IlciaW4gY2U/KGNlLncrNiklNys3KmNlLlctKE10KzUpJTc6Y2Uudys3KmNlLlUtKE10KzYpJTcpO3JldHVybiJaImluIGNlPyhjZS5IKz1jZS5aLzEwMHwwLGNlLk0rPWNlLlolMTAwLEt6KGNlKSk6UXooY2UpfX1mdW5jdGlvbiBmZShUZSx4dCxtdCxjZSl7Zm9yKHZhciBidCxobixkdD0wLFdlPXh0Lmxlbmd0aCxNdD1tdC5sZW5ndGg7ZHQ8V2U7KXtpZihjZT49TXQpcmV0dXJuLTE7aWYoMzc9PT0oYnQ9eHQuY2hhckNvZGVBdChkdCsrKSkpe2lmKGJ0PXh0LmNoYXJBdChkdCsrKSwhKGhuPWtbYnQgaW4gdGNlP3h0LmNoYXJBdChkdCsrKTpidF0pfHwoY2U9aG4oVGUsbXQsY2UpKTwwKXJldHVybi0xfWVsc2UgaWYoYnQhPW10LmNoYXJDb2RlQXQoY2UrKykpcmV0dXJuLTF9cmV0dXJuIGNlfXJldHVybiBELng9WihlLEQpLEQuWD1aKGksRCksRC5jPVoodCxEKSxULng9WihlLFQpLFQuWD1aKGksVCksVC5jPVoodCxUKSx7Zm9ybWF0OmZ1bmN0aW9uKFRlKXt2YXIgeHQ9WihUZSs9IiIsRCk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH0scGFyc2U6ZnVuY3Rpb24oVGUpe3ZhciB4dD16KFRlKz0iIiwhMSk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH0sdXRjRm9ybWF0OmZ1bmN0aW9uKFRlKXt2YXIgeHQ9WihUZSs9IiIsVCk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH0sdXRjUGFyc2U6ZnVuY3Rpb24oVGUpe3ZhciB4dD16KFRlKz0iIiwhMCk7cmV0dXJuIHh0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIFRlfSx4dH19fSh7ZGF0ZVRpbWU6IiV4LCAlWCIsZGF0ZToiJS1tLyUtZC8lWSIsdGltZToiJS1JOiVNOiVTICVwIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pLEl5PUF5LmZvcm1hdDt2YXIgdlM9NmU0LHlTPTYwKnZTLGJTPTI0KnlTLCR6PTM2NSpiUztmdW5jdGlvbiBnamUobil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIF9qZShuKXtyZXR1cm4gbiBpbnN0YW5jZW9mIERhdGU/K246K25ldyBEYXRlKCtuKX1mdW5jdGlvbiBlaihuLHQsZSxpLHIsbyxzLGEsbCl7dmFyIGM9ZFMoamEsamEpLHU9Yy5pbnZlcnQsZD1jLmRvbWFpbixwPWwoIi4lTCIpLGg9bCgiOiVTIiksZj1sKCIlSTolTSIpLG09bCgiJUkgJXAiKSx4PWwoIiVhICVkIiksZz1sKCIlYiAlZCIpLGI9bCgiJUIiKSxEPWwoIiVZIiksVD1bW3MsMSwxZTNdLFtzLDUsNWUzXSxbcywxNSwxNWUzXSxbcywzMCwzZTRdLFtvLDEsdlNdLFtvLDUsNSp2U10sW28sMTUsMTUqdlNdLFtvLDMwLDMwKnZTXSxbciwxLHlTXSxbciwzLDMqeVNdLFtyLDYsNip5U10sW3IsMTIsMTIqeVNdLFtpLDEsYlNdLFtpLDIsMipiU10sW2UsMSw2MDQ4ZTVdLFt0LDEsMjU5MmU2XSxbdCwzLDc3NzZlNl0sW24sMSwkel1dO2Z1bmN0aW9uIGsoeil7cmV0dXJuKHMoeik8ej9wOm8oeik8ej9oOnIoeik8ej9mOmkoeik8ej9tOnQoeik8ej9lKHopPHo/eDpnOm4oeik8ej9iOkQpKHopfWZ1bmN0aW9uIFooeixmZSx1ZSxoZSl7aWYobnVsbD09eiYmKHo9MTApLCJudW1iZXIiPT10eXBlb2Ygeil7dmFyIHc9TWF0aC5hYnModWUtZmUpL3osRj1CdyhmdW5jdGlvbihxKXtyZXR1cm4gcVsyXX0pLnJpZ2h0KFQsdyk7Rj09PVQubGVuZ3RoPyhoZT12ZChmZS8keix1ZS8keix6KSx6PW4pOkY/KGhlPShGPVRbdy9UW0YtMV1bMl08VFtGXVsyXS93P0YtMTpGXSlbMV0sej1GWzBdKTooaGU9TWF0aC5tYXgodmQoZmUsdWUseiksMSksej1hKX1yZXR1cm4gbnVsbD09aGU/ejp6LmV2ZXJ5KGhlKX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBEYXRlKHUoeikpfSxjLmRvbWFpbj1mdW5jdGlvbih6KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9kKGxTLmNhbGwoeixfamUpKTpkKCkubWFwKGdqZSl9LGMudGlja3M9ZnVuY3Rpb24oeixmZSl7dmFyIHEsdWU9ZCgpLGhlPXVlWzBdLHc9dWVbdWUubGVuZ3RoLTFdLEY9dzxoZTtyZXR1cm4gRiYmKHE9aGUsaGU9dyx3PXEpLHE9KHE9Wih6LGhlLHcsZmUpKT9xLnJhbmdlKGhlLHcrMSk6W10sRj9xLnJldmVyc2UoKTpxfSxjLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oeixmZSl7cmV0dXJuIG51bGw9PWZlP2s6bChmZSl9LGMubmljZT1mdW5jdGlvbih6LGZlKXt2YXIgdWU9ZCgpO3JldHVybih6PVooeix1ZVswXSx1ZVt1ZS5sZW5ndGgtMV0sZmUpKT9kKG9PKHVlLHopKTpjfSxjLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbmYoYyxlaihuLHQsZSxpLHIsbyxzLGEsbCkpfSxjfWZ1bmN0aW9uIFJnKCl7cmV0dXJuIHpzLmFwcGx5KGVqKHZwLHF6LEFnLEV5LFd6LEd6LHVPLGFPLEl5KS5kb21haW4oW25ldyBEYXRlKDJlMywwLDEpLG5ldyBEYXRlKDJlMywwLDIpXSksYXJndW1lbnRzKX1mdW5jdGlvbiBQeShuKXtmb3IodmFyIHQ9bi5sZW5ndGgvNnwwLGU9bmV3IEFycmF5KHQpLGk9MDtpPHQ7KWVbaV09IiMiK24uc2xpY2UoNippLDYqKytpKTtyZXR1cm4gZX1mdW5jdGlvbiBSeShuKXtyZXR1cm4gaXoobltuLmxlbmd0aC0xXSl9dmFyIHRqPVJ5KG5ldyBBcnJheSgzKS5jb25jYXQoImRlZWJmNzllY2FlMTMxODJiZCIsImVmZjNmZmJkZDdlNzZiYWVkNjIxNzFiNSIsImVmZjNmZmJkZDdlNzZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjMxODJiZDA4NTE5YyIsImVmZjNmZmM2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NDU5NCIsImY3ZmJmZmRlZWJmN2M2ZGJlZjllY2FlMTZiYWVkNjQyOTJjNjIxNzFiNTA4NTE5YzA4MzA2YiIpLm1hcChQeSkpLG5qPVJ5KG5ldyBBcnJheSgzKS5jb25jYXQoImYwZjBmMGJkYmRiZDYzNjM2MyIsImY3ZjdmN2NjY2NjYzk2OTY5NjUyNTI1MiIsImY3ZjdmN2NjY2NjYzk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjYzNjM2MzI1MjUyNSIsImY3ZjdmN2Q5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNSIsImZmZmZmZmYwZjBmMGQ5ZDlkOWJkYmRiZDk2OTY5NjczNzM3MzUyNTI1MjI1MjUyNTAwMDAwMCIpLm1hcChQeSkpLGlqPVJ5KG5ldyBBcnJheSgzKS5jb25jYXQoImZlZTBkMmZjOTI3MmRlMmQyNiIsImZlZTVkOWZjYWU5MWZiNmE0YWNiMTgxZCIsImZlZTVkOWZjYWU5MWZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWRlMmQyNmE1MGYxNSIsImZlZTVkOWZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZDk5MDAwZCIsImZmZjVmMGZlZTBkMmZjYmJhMWZjOTI3MmZiNmE0YWVmM2IyY2NiMTgxZGE1MGYxNTY3MDAwZCIpLm1hcChQeSkpO2Z1bmN0aW9uIGZhKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBufX1mdW5jdGlvbiB3Y2Uobil7dGhpcy5fY29udGV4dD1ufWZ1bmN0aW9uIHBPKG4pe3JldHVybiBuZXcgd2NlKG4pfWZ1bmN0aW9uIGhPKG4pe3JldHVybiBuWzBdfWZ1bmN0aW9uIGZPKG4pe3JldHVybiBuWzFdfWZ1bmN0aW9uIHhTKCl7dmFyIG49aE8sdD1mTyxlPWZhKCEwKSxpPW51bGwscj1wTyxvPW51bGw7ZnVuY3Rpb24gcyhhKXt2YXIgbCx1LHAsYz1hLmxlbmd0aCxkPSExO2ZvcihudWxsPT1pJiYobz1yKHA9c1MoKSkpLGw9MDtsPD1jOysrbCkhKGw8YyYmZSh1PWFbbF0sbCxhKSk9PT1kJiYoKGQ9IWQpP28ubGluZVN0YXJ0KCk6by5saW5lRW5kKCkpLGQmJm8ucG9pbnQoK24odSxsLGEpLCt0KHUsbCxhKSk7aWYocClyZXR1cm4gbz1udWxsLHArIiJ8fG51bGx9cmV0dXJuIHMueD1mdW5jdGlvbihhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgYT9hOmZhKCthKSxzKTpufSxzLnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGE/YTpmYSgrYSkscyk6dH0scy5kZWZpbmVkPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiBhP2E6ZmEoISFhKSxzKTplfSxzLmN1cnZlPWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWEsbnVsbCE9aSYmKG89cihpKSkscyk6cn0scy5jb250ZXh0PWZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1hP2k9bz1udWxsOm89cihpPWEpLHMpOml9LHN9ZnVuY3Rpb24gU2NlKG4sdCxlKXtuLl9jb250ZXh0LmJlemllckN1cnZlVG8obi5feDErbi5fayoobi5feDItbi5feDApLG4uX3kxK24uX2sqKG4uX3kyLW4uX3kwKSxuLl94MituLl9rKihuLl94MS10KSxuLl95MituLl9rKihuLl95MS1lKSxuLl94MixuLl95Mil9ZnVuY3Rpb24gbU8obix0KXt0aGlzLl9jb250ZXh0PW4sdGhpcy5faz0oMS10KS82fWZ1bmN0aW9uIEVjZShuLHQpe3RoaXMuX2NvbnRleHQ9bix0aGlzLl9hbHBoYT10fU1hdGgsd2NlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKG4sdCl7c3dpdGNoKG49K24sdD0rdCx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpOnRoaXMuX2NvbnRleHQubW92ZVRvKG4sdCk7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7ZGVmYXVsdDp0aGlzLl9jb250ZXh0LmxpbmVUbyhuLHQpfX19LG1PLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzpTY2UodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbihuLHQpe3N3aXRjaChuPStuLHQ9K3QsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obix0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPW4sdGhpcy5feTE9dDticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0OlNjZSh0aGlzLG4sdCl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9bix0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX0sZnVuY3Rpb24gbih0KXtmdW5jdGlvbiBlKGkpe3JldHVybiBuZXcgbU8oaSx0KX1yZXR1cm4gZS50ZW5zaW9uPWZ1bmN0aW9uKGkpe3JldHVybiBuKCtpKX0sZX0oMCksRWNlLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPU5hTix0aGlzLl9sMDFfYT10aGlzLl9sMTJfYT10aGlzLl9sMjNfYT10aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYT10aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpO2JyZWFrO2Nhc2UgMzp0aGlzLnBvaW50KHRoaXMuX3gyLHRoaXMuX3kyKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKG4sdCl7aWYobj0rbix0PSt0LHRoaXMuX3BvaW50KXt2YXIgZT10aGlzLl94Mi1uLGk9dGhpcy5feTItdDt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KGUqZStpKmksdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8obix0KTp0aGlzLl9jb250ZXh0Lm1vdmVUbyhuLHQpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zO2RlZmF1bHQ6IWZ1bmN0aW9uKG4sdCxlKXt2YXIgaT1uLl94MSxyPW4uX3kxLG89bi5feDIscz1uLl95MjtpZihuLl9sMDFfYT4xZS0xMil7dmFyIGE9MipuLl9sMDFfMmErMypuLl9sMDFfYSpuLl9sMTJfYStuLl9sMTJfMmEsbD0zKm4uX2wwMV9hKihuLl9sMDFfYStuLl9sMTJfYSk7aT0oaSphLW4uX3gwKm4uX2wxMl8yYStuLl94MipuLl9sMDFfMmEpL2wscj0ociphLW4uX3kwKm4uX2wxMl8yYStuLl95MipuLl9sMDFfMmEpL2x9aWYobi5fbDIzX2E+MWUtMTIpe3ZhciBjPTIqbi5fbDIzXzJhKzMqbi5fbDIzX2Eqbi5fbDEyX2Erbi5fbDEyXzJhLHU9MypuLl9sMjNfYSoobi5fbDIzX2Erbi5fbDEyX2EpO289KG8qYytuLl94MSpuLl9sMjNfMmEtdCpuLl9sMTJfMmEpL3Uscz0ocypjK24uX3kxKm4uX2wyM18yYS1lKm4uX2wxMl8yYSkvdX1uLl9jb250ZXh0LmJlemllckN1cnZlVG8oaSxyLG8scyxuLl94MixuLl95Mil9KHRoaXMsbix0KX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9bix0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj10fX07dmFyIHNqPWZ1bmN0aW9uIG4odCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gdD9uZXcgRWNlKGksdCk6bmV3IG1PKGksMCl9cmV0dXJuIGUuYWxwaGE9ZnVuY3Rpb24oaSl7cmV0dXJuIG4oK2kpfSxlfSguNSk7ZnVuY3Rpb24gYWooKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBPeShuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIENTKG4sdCl7dmFyIGU9dCxpPXQuUixyPWUuVTtyP3IuTD09PWU/ci5MPWk6ci5SPWk6bi5fPWksaS5VPXIsZS5VPWksZS5SPWkuTCxlLlImJihlLlIuVT1lKSxpLkw9ZX1mdW5jdGlvbiBNUyhuLHQpe3ZhciBlPXQsaT10Lkwscj1lLlU7cj9yLkw9PT1lP3IuTD1pOnIuUj1pOm4uXz1pLGkuVT1yLGUuVT1pLGUuTD1pLlIsZS5MJiYoZS5MLlU9ZSksaS5SPWV9ZnVuY3Rpb24gVGNlKG4pe2Zvcig7bi5MOyluPW4uTDtyZXR1cm4gbn1hai5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFqLGluc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLGkscjtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49VGNlKHRoaXMuXyksdC5QPW51bGwsdC5OPW4sbi5QPW4uTD10LGU9bik6KHQuUD10Lk49bnVsbCx0aGlzLl89dCxlPW51bGwpO2Zvcih0Lkw9dC5SPW51bGwsdC5VPWUsdC5DPSEwLG49dDtlJiZlLkM7KWU9PT0oaT1lLlUpLkw/KHI9aS5SKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5SJiYoQ1ModGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsTVModGhpcyxpKSk6KHI9aS5MKSYmci5DPyhlLkM9ci5DPSExLGkuQz0hMCxuPWkpOihuPT09ZS5MJiYoTVModGhpcyxlKSxlPShuPWUpLlUpLGUuQz0hMSxpLkM9ITAsQ1ModGhpcyxpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciBlLG8scyx0PW4uVSxpPW4uTCxyPW4uUjtpZihvPWk/cj9UY2Uocik6aTpyLHQ/dC5MPT09bj90Lkw9bzp0LlI9bzp0aGlzLl89byxpJiZyPyhzPW8uQyxvLkM9bi5DLG8uTD1pLGkuVT1vLG8hPT1yPyh0PW8uVSxvLlU9bi5VLHQuTD1uPW8uUixvLlI9cixyLlU9byk6KG8uVT10LHQ9byxuPW8uUikpOihzPW4uQyxuPW8pLG4mJihuLlU9dCksIXMpe2lmKG4mJm4uQylyZXR1cm4gdm9pZChuLkM9ITEpO2Rve2lmKG49PT10aGlzLl8pYnJlYWs7aWYobj09PXQuTCl7aWYoKGU9dC5SKS5DJiYoZS5DPSExLHQuQz0hMCxDUyh0aGlzLHQpLGU9dC5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXsoIWUuUnx8IWUuUi5DKSYmKGUuTC5DPSExLGUuQz0hMCxNUyh0aGlzLGUpLGU9dC5SKSxlLkM9dC5DLHQuQz1lLlIuQz0hMSxDUyh0aGlzLHQpLG49dGhpcy5fO2JyZWFrfX1lbHNlIGlmKChlPXQuTCkuQyYmKGUuQz0hMSx0LkM9ITAsTVModGhpcyx0KSxlPXQuTCksZS5MJiZlLkwuQ3x8ZS5SJiZlLlIuQyl7KCFlLkx8fCFlLkwuQykmJihlLlIuQz0hMSxlLkM9ITAsQ1ModGhpcyxlKSxlPXQuTCksZS5DPXQuQyx0LkM9ZS5MLkM9ITEsTVModGhpcyx0KSxuPXRoaXMuXzticmVha31lLkM9ITAsbj10LHQ9dC5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19O3ZhciBsaj1hajtmdW5jdGlvbiBreShuLHQsZSxpKXt2YXIgcj1bbnVsbCxudWxsXSxvPWRzLnB1c2gociktMTtyZXR1cm4gci5sZWZ0PW4sci5yaWdodD10LGUmJndTKHIsbix0LGUpLGkmJndTKHIsdCxuLGkpLG1hW24uaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLG1hW3QuaW5kZXhdLmhhbGZlZGdlcy5wdXNoKG8pLHJ9ZnVuY3Rpb24gRnkobix0LGUpe3ZhciBpPVt0LGVdO3JldHVybiBpLmxlZnQ9bixpfWZ1bmN0aW9uIHdTKG4sdCxlLGkpe25bMF18fG5bMV0/bi5sZWZ0PT09ZT9uWzFdPWk6blswXT1pOihuWzBdPWksbi5sZWZ0PXQsbi5yaWdodD1lKX1mdW5jdGlvbiB4amUobix0LGUsaSxyKXt2YXIgbSxvPW5bMF0scz1uWzFdLGE9b1swXSxsPW9bMV0sZD0wLHA9MSxoPXNbMF0tYSxmPXNbMV0tbDtpZihtPXQtYSxofHwhKG0+MCkpe2lmKG0vPWgsaDwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihoPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPWktYSxofHwhKG08MCkpe2lmKG0vPWgsaDwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihoPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1pZihtPWUtbCxmfHwhKG0+MCkpe2lmKG0vPWYsZjwwKXtpZihtPGQpcmV0dXJuO208cCYmKHA9bSl9ZWxzZSBpZihmPjApe2lmKG0+cClyZXR1cm47bT5kJiYoZD1tKX1pZihtPXItbCxmfHwhKG08MCkpe2lmKG0vPWYsZjwwKXtpZihtPnApcmV0dXJuO20+ZCYmKGQ9bSl9ZWxzZSBpZihmPjApe2lmKG08ZClyZXR1cm47bTxwJiYocD1tKX1yZXR1cm4hKGQ+MCkmJiEocDwxKXx8KGQ+MCYmKG5bMF09W2ErZCpoLGwrZCpmXSkscDwxJiYoblsxXT1bYStwKmgsbCtwKmZdKSksITB9fX19fWZ1bmN0aW9uIENqZShuLHQsZSxpLHIpe3ZhciBvPW5bMV07aWYobylyZXR1cm4hMDt2YXIgbSx4LHM9blswXSxhPW4ubGVmdCxsPW4ucmlnaHQsYz1hWzBdLHU9YVsxXSxkPWxbMF0scD1sWzFdLGg9KGMrZCkvMjtpZihwPT09dSl7aWYoaDx0fHxoPj1pKXJldHVybjtpZihjPmQpe2lmKHMpe2lmKHNbMV0+PXIpcmV0dXJufWVsc2Ugcz1baCxlXTtvPVtoLHJdfWVsc2V7aWYocyl7aWYoc1sxXTxlKXJldHVybn1lbHNlIHM9W2gscl07bz1baCxlXX19ZWxzZSBpZih4PSh1K3ApLzItKG09KGMtZCkvKHAtdSkpKmgsbTwtMXx8bT4xKWlmKGM+ZCl7aWYocyl7aWYoc1sxXT49cilyZXR1cm59ZWxzZSBzPVsoZS14KS9tLGVdO289WyhyLXgpL20scl19ZWxzZXtpZihzKXtpZihzWzFdPGUpcmV0dXJufWVsc2Ugcz1bKHIteCkvbSxyXTtvPVsoZS14KS9tLGVdfWVsc2UgaWYodTxwKXtpZihzKXtpZihzWzBdPj1pKXJldHVybn1lbHNlIHM9W3QsbSp0K3hdO289W2ksbSppK3hdfWVsc2V7aWYocyl7aWYoc1swXTx0KXJldHVybn1lbHNlIHM9W2ksbSppK3hdO289W3QsbSp0K3hdfXJldHVybiBuWzBdPXMsblsxXT1vLCEwfWZ1bmN0aW9uIE1qZShuLHQpe3ZhciBlPW4uc2l0ZSxpPXQubGVmdCxyPXQucmlnaHQ7cmV0dXJuIGU9PT1yJiYocj1pLGk9ZSkscj9NYXRoLmF0YW4yKHJbMV0taVsxXSxyWzBdLWlbMF0pOihlPT09aT8oaT10WzFdLHI9dFswXSk6KGk9dFswXSxyPXRbMV0pLE1hdGguYXRhbjIoaVswXS1yWzBdLHJbMV0taVsxXSkpfWZ1bmN0aW9uIGNqKG4sdCl7cmV0dXJuIHRbKyh0LmxlZnQhPT1uLnNpdGUpXX1mdW5jdGlvbiB3amUobix0KXtyZXR1cm4gdFsrKHQubGVmdD09PW4uc2l0ZSldfXZhciBnTyxSY2U9W107ZnVuY3Rpb24gU2plKCl7T3kodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIE9nKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgaT10LnNpdGUscj1uLnNpdGUsbz1lLnNpdGU7aWYoaSE9PW8pe3ZhciBzPXJbMF0sYT1yWzFdLGw9aVswXS1zLGM9aVsxXS1hLHU9b1swXS1zLGQ9b1sxXS1hLHA9MioobCpkLWMqdSk7aWYoIShwPj0tT2NlKSl7dmFyIGg9bCpsK2MqYyxmPXUqdStkKmQsbT0oZCpoLWMqZikvcCx4PShsKmYtdSpoKS9wLGc9UmNlLnBvcCgpfHxuZXcgU2plO2cuYXJjPW4sZy5zaXRlPXIsZy54PW0rcyxnLnk9KGcuY3k9eCthKStNYXRoLnNxcnQobSptK3gqeCksbi5jaXJjbGU9Zztmb3IodmFyIGI9bnVsbCxEPU55Ll87RDspaWYoZy55PEQueXx8Zy55PT09RC55JiZnLng8PUQueCl7aWYoIUQuTCl7Yj1ELlA7YnJlYWt9RD1ELkx9ZWxzZXtpZighRC5SKXtiPUQ7YnJlYWt9RD1ELlJ9TnkuaW5zZXJ0KGIsZyksYnx8KGdPPWcpfX19fWZ1bmN0aW9uIGtnKG4pe3ZhciB0PW4uY2lyY2xlO3QmJih0LlB8fChnTz10Lk4pLE55LnJlbW92ZSh0KSxSY2UucHVzaCh0KSxPeSh0KSxuLmNpcmNsZT1udWxsKX12YXIgRmNlPVtdO2Z1bmN0aW9uIEVqZSgpe095KHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBrY2Uobil7dmFyIHQ9RmNlLnBvcCgpfHxuZXcgRWplO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIHVqKG4pe2tnKG4pLEZnLnJlbW92ZShuKSxGY2UucHVzaChuKSxPeShuKX1mdW5jdGlvbiBOY2Uobil7dmFyIHQ9bi5jaXJjbGUsZT10LngsaT10LmN5LHI9W2UsaV0sbz1uLlAscz1uLk4sYT1bbl07dWoobik7Zm9yKHZhciBsPW87bC5jaXJjbGUmJk1hdGguYWJzKGUtbC5jaXJjbGUueCk8cHImJk1hdGguYWJzKGktbC5jaXJjbGUuY3kpPHByOylvPWwuUCxhLnVuc2hpZnQobCksdWoobCksbD1vO2EudW5zaGlmdChsKSxrZyhsKTtmb3IodmFyIGM9cztjLmNpcmNsZSYmTWF0aC5hYnMoZS1jLmNpcmNsZS54KTxwciYmTWF0aC5hYnMoaS1jLmNpcmNsZS5jeSk8cHI7KXM9Yy5OLGEucHVzaChjKSx1aihjKSxjPXM7YS5wdXNoKGMpLGtnKGMpO3ZhciBkLHU9YS5sZW5ndGg7Zm9yKGQ9MTtkPHU7KytkKXdTKChjPWFbZF0pLmVkZ2UsKGw9YVtkLTFdKS5zaXRlLGMuc2l0ZSxyKTsoYz1hW3UtMV0pLmVkZ2U9a3koKGw9YVswXSkuc2l0ZSxjLnNpdGUsbnVsbCxyKSxPZyhsKSxPZyhjKX1mdW5jdGlvbiBMY2Uobil7Zm9yKHZhciBpLHIsbyxzLHQ9blswXSxlPW5bMV0sYT1GZy5fO2E7KWlmKChvPUJjZShhLGUpLXQpPnByKWE9YS5MO2Vsc2V7aWYoISgocz10LVRqZShhLGUpKT5wcikpe28+LXByPyhpPWEuUCxyPWEpOnM+LXByPyhpPWEscj1hLk4pOmk9cj1hO2JyZWFrfWlmKCFhLlIpe2k9YTticmVha31hPWEuUn0hZnVuY3Rpb24obil7bWFbbi5pbmRleF09e3NpdGU6bixoYWxmZWRnZXM6W119fShuKTt2YXIgbD1rY2Uobik7aWYoRmcuaW5zZXJ0KGksbCksaXx8cil7aWYoaT09PXIpcmV0dXJuIGtnKGkpLHI9a2NlKGkuc2l0ZSksRmcuaW5zZXJ0KGwsciksbC5lZGdlPXIuZWRnZT1reShpLnNpdGUsbC5zaXRlKSxPZyhpKSx2b2lkIE9nKHIpO2lmKCFyKXJldHVybiB2b2lkKGwuZWRnZT1reShpLnNpdGUsbC5zaXRlKSk7a2coaSksa2cocik7dmFyIGM9aS5zaXRlLHU9Y1swXSxkPWNbMV0scD1uWzBdLXUsaD1uWzFdLWQsZj1yLnNpdGUsbT1mWzBdLXUseD1mWzFdLWQsZz0yKihwKngtaCptKSxiPXAqcCtoKmgsRD1tKm0reCp4LFQ9Wyh4KmItaCpEKS9nK3UsKHAqRC1tKmIpL2crZF07d1Moci5lZGdlLGMsZixUKSxsLmVkZ2U9a3koYyxuLG51bGwsVCksci5lZGdlPWt5KG4sZixudWxsLFQpLE9nKGkpLE9nKHIpfX1mdW5jdGlvbiBCY2Uobix0KXt2YXIgZT1uLnNpdGUsaT1lWzBdLHI9ZVsxXSxvPXItdDtpZighbylyZXR1cm4gaTt2YXIgcz1uLlA7aWYoIXMpcmV0dXJuLTEvMDt2YXIgYT0oZT1zLnNpdGUpWzBdLGw9ZVsxXSxjPWwtdDtpZighYylyZXR1cm4gYTt2YXIgdT1hLWksZD0xL28tMS9jLHA9dS9jO3JldHVybiBkPygtcCtNYXRoLnNxcnQocCpwLTIqZCoodSp1LygtMipjKS1sK2MvMityLW8vMikpKS9kK2k6KGkrYSkvMn1mdW5jdGlvbiBUamUobix0KXt2YXIgZT1uLk47aWYoZSlyZXR1cm4gQmNlKGUsdCk7dmFyIGk9bi5zaXRlO3JldHVybiBpWzFdPT09dD9pWzBdOjEvMH12YXIgRmcsbWEsTnksZHMscHI9MWUtNixPY2U9MWUtMTI7ZnVuY3Rpb24gRGplKG4sdCxlKXtyZXR1cm4oblswXS1lWzBdKSoodFsxXS1uWzFdKS0oblswXS10WzBdKSooZVsxXS1uWzFdKX1mdW5jdGlvbiBBamUobix0KXtyZXR1cm4gdFsxXS1uWzFdfHx0WzBdLW5bMF19ZnVuY3Rpb24gX08obix0KXt2YXIgaSxyLG8sZT1uLnNvcnQoQWplKS5wb3AoKTtmb3IoZHM9W10sbWE9bmV3IEFycmF5KG4ubGVuZ3RoKSxGZz1uZXcgbGosTnk9bmV3IGxqOzspaWYobz1nTyxlJiYoIW98fGVbMV08by55fHxlWzFdPT09by55JiZlWzBdPG8ueCkpKGVbMF0hPT1pfHxlWzFdIT09cikmJihMY2UoZSksaT1lWzBdLHI9ZVsxXSksZT1uLnBvcCgpO2Vsc2V7aWYoIW8pYnJlYWs7TmNlKG8uYXJjKX1pZihmdW5jdGlvbigpe2Zvcih2YXIgZSxpLHIsbyxuPTAsdD1tYS5sZW5ndGg7bjx0OysrbilpZigoZT1tYVtuXSkmJihvPShpPWUuaGFsZmVkZ2VzKS5sZW5ndGgpKXt2YXIgcz1uZXcgQXJyYXkobyksYT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPG87KytyKXNbcl09cixhW3JdPU1qZShlLGRzW2lbcl1dKTtmb3Iocy5zb3J0KGZ1bmN0aW9uKGwsYyl7cmV0dXJuIGFbY10tYVtsXX0pLHI9MDtyPG87KytyKWFbcl09aVtzW3JdXTtmb3Iocj0wO3I8bzsrK3IpaVtyXT1hW3JdfX0oKSx0KXt2YXIgcz0rdFswXVswXSxhPSt0WzBdWzFdLGw9K3RbMV1bMF0sYz0rdFsxXVsxXTsoZnVuY3Rpb24obix0LGUsaSl7Zm9yKHZhciBvLHI9ZHMubGVuZ3RoO3ItLTspQ2plKG89ZHNbcl0sbix0LGUsaSkmJnhqZShvLG4sdCxlLGkpJiYoTWF0aC5hYnMob1swXVswXS1vWzFdWzBdKT5wcnx8TWF0aC5hYnMob1swXVsxXS1vWzFdWzFdKT5wcil8fGRlbGV0ZSBkc1tyXX0pKHMsYSxsLGMpLGZ1bmN0aW9uKG4sdCxlLGkpe3ZhciBvLHMsYSxsLGMsdSxkLHAsaCxmLG0seCxyPW1hLmxlbmd0aCxnPSEwO2ZvcihvPTA7bzxyOysrbylpZihzPW1hW29dKXtmb3IoYT1zLnNpdGUsbD0oYz1zLmhhbGZlZGdlcykubGVuZ3RoO2wtLTspZHNbY1tsXV18fGMuc3BsaWNlKGwsMSk7Zm9yKGw9MCx1PWMubGVuZ3RoO2w8dTspbT0oZj13amUocyxkc1tjW2xdXSkpWzBdLHg9ZlsxXSxwPShkPWNqKHMsZHNbY1srK2wldV1dKSlbMF0saD1kWzFdLChNYXRoLmFicyhtLXApPnByfHxNYXRoLmFicyh4LWgpPnByKSYmKGMuc3BsaWNlKGwsMCxkcy5wdXNoKEZ5KGEsZixNYXRoLmFicyhtLW4pPHByJiZpLXg+cHI/W24sTWF0aC5hYnMocC1uKTxwcj9oOmldOk1hdGguYWJzKHgtaSk8cHImJmUtbT5wcj9bTWF0aC5hYnMoaC1pKTxwcj9wOmUsaV06TWF0aC5hYnMobS1lKTxwciYmeC10PnByP1tlLE1hdGguYWJzKHAtZSk8cHI/aDp0XTpNYXRoLmFicyh4LXQpPHByJiZtLW4+cHI/W01hdGguYWJzKGgtdCk8cHI/cDpuLHRdOm51bGwpKS0xKSwrK3UpO3UmJihnPSExKX1pZihnKXt2YXIgYixELFQsaz0xLzA7Zm9yKG89MCxnPW51bGw7bzxyOysrbykocz1tYVtvXSkmJihUPShiPShhPXMuc2l0ZSlbMF0tbikqYisoRD1hWzFdLXQpKkQpPGsmJihrPVQsZz1zKTtpZihnKXt2YXIgWj1bbix0XSx6PVtuLGldLGZlPVtlLGldLHVlPVtlLHRdO2cuaGFsZmVkZ2VzLnB1c2goZHMucHVzaChGeShhPWcuc2l0ZSxaLHopKS0xLGRzLnB1c2goRnkoYSx6LGZlKSktMSxkcy5wdXNoKEZ5KGEsZmUsdWUpKS0xLGRzLnB1c2goRnkoYSx1ZSxaKSktMSl9fWZvcihvPTA7bzxyOysrbykocz1tYVtvXSkmJihzLmhhbGZlZGdlcy5sZW5ndGh8fGRlbGV0ZSBtYVtvXSl9KHMsYSxsLGMpfXRoaXMuZWRnZXM9ZHMsdGhpcy5jZWxscz1tYSxGZz1OeT1kcz1tYT1udWxsfWZ1bmN0aW9uIE5nKG4sdCxlKXt0aGlzLms9bix0aGlzLng9dCx0aGlzLnk9ZX1fTy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9PLHBvbHlnb25zOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9dC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBjaih0LG5baV0pfSk7cmV0dXJuIGUuZGF0YT10LnNpdGUuZGF0YSxlfSl9LHRyaWFuZ2xlczpmdW5jdGlvbigpe3ZhciBuPVtdLHQ9dGhpcy5lZGdlcztyZXR1cm4gdGhpcy5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGUsaSl7aWYoYT0obz1lLmhhbGZlZGdlcykubGVuZ3RoKWZvcih2YXIgbyxhLGwscj1lLnNpdGUscz0tMSxjPXRbb1thLTFdXSx1PWMubGVmdD09PXI/Yy5yaWdodDpjLmxlZnQ7KytzPGE7KWw9dSx1PShjPXRbb1tzXV0pLmxlZnQ9PT1yP2MucmlnaHQ6Yy5sZWZ0LGwmJnUmJmk8bC5pbmRleCYmaTx1LmluZGV4JiZEamUocixsLHUpPDAmJm4ucHVzaChbci5kYXRhLGwuZGF0YSx1LmRhdGFdKX0pLG59LGxpbmtzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLnJpZ2h0fSkubWFwKGZ1bmN0aW9uKG4pe3JldHVybntzb3VyY2U6bi5sZWZ0LmRhdGEsdGFyZ2V0Om4ucmlnaHQuZGF0YX19KX0sZmluZDpmdW5jdGlvbihuLHQsZSl7Zm9yKHZhciByLGEsaT10aGlzLG89aS5fZm91bmR8fDAscz1pLmNlbGxzLmxlbmd0aDshKGE9aS5jZWxsc1tvXSk7KWlmKCsrbz49cylyZXR1cm4gbnVsbDt2YXIgbD1uLWEuc2l0ZVswXSxjPXQtYS5zaXRlWzFdLHU9bCpsK2MqYztkb3thPWkuY2VsbHNbcj1vXSxvPW51bGwsYS5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgcD1pLmVkZ2VzW2RdLGg9cC5sZWZ0O2lmKGghPT1hLnNpdGUmJmh8fChoPXAucmlnaHQpKXt2YXIgZj1uLWhbMF0sbT10LWhbMV0seD1mKmYrbSptO3g8dSYmKHU9eCxvPWguaW5kZXgpfX0pfXdoaWxlKG51bGwhPT1vKTtyZXR1cm4gaS5fZm91bmQ9cixudWxsPT1lfHx1PD1lKmU/YS5zaXRlOm51bGx9fSxOZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk5nLHNjYWxlOmZ1bmN0aW9uKG4pe3JldHVybiAxPT09bj90aGlzOm5ldyBOZyh0aGlzLmsqbix0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIDA9PT1uJjA9PT10P3RoaXM6bmV3IE5nKHRoaXMuayx0aGlzLngrdGhpcy5rKm4sdGhpcy55K3RoaXMuayp0KX0sYXBwbHk6ZnVuY3Rpb24obil7cmV0dXJuW25bMF0qdGhpcy5rK3RoaXMueCxuWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24obil7cmV0dXJuIG4qdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKG4pe3JldHVybiBuKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihuKXtyZXR1cm5bKG5bMF0tdGhpcy54KS90aGlzLmssKG5bMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKG4pe3JldHVybihuLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihuKXtyZXR1cm4gbi5jb3B5KCkuZG9tYWluKG4ucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChuLmludmVydCxuKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKG4pe3JldHVybiBuLmNvcHkoKS5kb21haW4obi5yYW5nZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKG4uaW52ZXJ0LG4pKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX0sbmV3IE5nKDEsMCwwKTt2YXIgemNlPXhvKCIuMn5lIiksSWplPXhvKCIuNH5yIiksVmNlPXhvKCIsfiIpO2Z1bmN0aW9uIEhjZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP3pjZShuKTpJamUobil9dmFyIHlwPXtmb3JtYXRUaWNrOkhjZSxmb3JtYXRTaG9ydDpIY2UsZm9ybWF0UmVhZGFibGUobil7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlNHx8dDwuMDAxP3pjZShuKTpWY2Uobil9LGZvcm1hdExvbmc6VmNlfSxQamU9bmV3IEludGwuTnVtYmVyRm9ybWF0KHZvaWQgMCx7bWF4aW11bUZyYWN0aW9uRGlnaXRzOjN9KTtmdW5jdGlvbiB2TyhuKXtyZXR1cm4gUGplLmZvcm1hdChuKX12YXIgTWQ9e2Zvcm1hdFRpY2s6dk8sZm9ybWF0U2hvcnQ6dk8sZm9ybWF0UmVhZGFibGU6dk8sZm9ybWF0TG9uZzp2T30sUmplPXhvKCIwLjN+cyIpLE9qZT14bygiLC4zfmYiKTtmdW5jdGlvbiB5TyhuKXtsZXQgdD1NYXRoLmFicyhuKTtyZXR1cm4gdD49MWU0fHx0PC4wMDE/UmplKG4pOk9qZShuKX12YXIgamNlPXtmb3JtYXRUaWNrOnlPLGZvcm1hdFNob3J0OnlPLGZvcm1hdFJlYWRhYmxlOnlPLGZvcm1hdExvbmc6eU99LGdqPTM2ZTUsTHk9eG8oIi40fiIpO2Z1bmN0aW9uIGJPKG4pe2lmKDA9PT1uKXJldHVybiIwIjtsZXQgdD1NYXRoLnNpZ24obik+MD8iIjoiLSIsZT1NYXRoLmFicyhuKTtyZXR1cm4gdCs9ZTwxZTM/YCR7THkoZSl9IG1zYDplPDZlND9gJHtMeShlLzFlMyl9IHNlY2A6ZTxnaj9gJHtMeShlLzZlNCl9IG1pbmA6ZTw4NjRlNT9gJHtMeShlL2dqKX0gaHJgOmU8MzE1MzZlNj9gJHtMeShlLzg2NGU1KX0gZGF5YDpgJHtMeShlLzMxNTM2ZTYpfSB5cmAsdH12YXIgaGosU1M9e2Zvcm1hdFRpY2s6Yk8sZm9ybWF0U2hvcnQ6Yk8sZm9ybWF0UmVhZGFibGU6Yk8sZm9ybWF0TG9uZzpiT30sa2plPVJnKCkudGlja0Zvcm1hdCgpLEdjZT17Zm9ybWF0VGljazpuPT5ramUobmV3IERhdGUobikpLGZvcm1hdFNob3J0Om49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKGhqLHt5ZWFyOiJudW1lcmljIixtb250aDoic2hvcnQiLGRheToibnVtZXJpYyIsaG91cjoibnVtZXJpYyIsbWludXRlOiJudW1lcmljIixzZWNvbmQ6Im51bWVyaWMifSksZm9ybWF0UmVhZGFibGU6bj0+bmV3IERhdGUobikudG9Mb2NhbGVTdHJpbmcoaGose3llYXI6Im51bWVyaWMiLG1vbnRoOiJzaG9ydCIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCJ9KSxmb3JtYXRMb25nOm49Pm5ldyBEYXRlKG4pLnRvTG9jYWxlU3RyaW5nKGhqLHt5ZWFyOiJudW1lcmljIixtb250aDoibG9uZyIsZGF5OiJudW1lcmljIixob3VyOiJudW1lcmljIixtaW51dGU6Im51bWVyaWMiLHNlY29uZDoibnVtZXJpYyIsdGltZVpvbmVOYW1lOiJzaG9ydCIsZnJhY3Rpb25hbFNlY29uZERpZ2l0czozfSl9O2Z1bmN0aW9uIG91KG4pe3N3aXRjaChuKXtjYXNlIE5yLkxJTkVBUjpyZXR1cm4gbmV3IEVTO2Nhc2UgTnIuTE9HMTA6cmV0dXJuIG5ldyBiajtjYXNlIE5yLlRJTUU6cmV0dXJuIG5ldyBUUztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKGBTY2FsZVR5cGUgJHtufSBub3Qgc3VwcG9ydGVkLmApfX12YXIgRVM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9eXB9dHJhbnNmb3JtKHQsZSxpKXtsZXRbcixvXT10LHM9by1yLFthLGxdPWU7cmV0dXJuIDA9PT1zP2E6KGwtYSkvcyooaS1yKSthfWZvcndhcmQodCxlLGkpe3JldHVybiB0aGlzLnRyYW5zZm9ybSh0LGUsaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtKGUsdCxpKX1uaWNlRG9tYWluKHQpe2xldFtlLGldPXQ7aWYoaTxlKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBpbnB1dDogbWluIGlzIGxhcmdlciB0aGFuIG1heCIpO2lmKGk9PT1lKXJldHVybiAwPT09ZT9bLTEsMV06ZTwwP1syKmUsMF06WzAsMiplXTtsZXQgcj1RbygpLG89LjA1KihpLWUrTnVtYmVyLkVQU0lMT04pLFtzLGFdPXIuZG9tYWluKFtlLW8saStvXSkubmljZSgpLmRvbWFpbigpO3JldHVybltzLGFdfXRpY2tzKHQsZSl7cmV0dXJuIFFvKCkuZG9tYWluKHQpLnRpY2tzKGUpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0sYmo9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRGb3JtYXR0ZXI9eXB9dHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmxvZzEwKHQ+MD90Ok51bWJlci5NSU5fVkFMVUUpfXVudHJhbnNmb3JtKHQpe3JldHVybiBNYXRoLmV4cCh0L01hdGguTE9HMTBFKX1mb3J3YXJkKHQsZSxpKXtpZihpPD0wKXJldHVybiBlWzBdO2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbCxkPWEtcztyZXR1cm4gaT10aGlzLnRyYW5zZm9ybShpKSxkLyh1K051bWJlci5FUFNJTE9OKSooaS1sKStzfXJldmVyc2UodCxlLGkpe2xldFtyLG9dPXQsW3MsYV09ZSxsPXRoaXMudHJhbnNmb3JtKHIpLHU9dGhpcy50cmFuc2Zvcm0obyktbDtyZXR1cm4gdGhpcy51bnRyYW5zZm9ybSh1LyhhLXMrTnVtYmVyLkVQU0lMT04pKihpLXMpK2wpfW5pY2VEb21haW4odCl7bGV0W2UsaV09dDtpZihlPmkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGlucHV0OiBtaW4gaXMgbGFyZ2VyIHRoYW4gbWF4Iik7bGV0IHI9TWF0aC5tYXgoZSxOdW1iZXIuTUlOX1ZBTFVFKSxvPU1hdGgubWF4KGksTnVtYmVyLk1JTl9WQUxVRSk7cmV0dXJuIGk8PTA/W051bWJlci5NSU5fVkFMVUUsMV06W01hdGgubWF4KE51bWJlci5NSU5fVkFMVUUsLjUqciksMipvXX10aWNrcyh0LGUpe2xldCBpPXRbMF08PTA/TnVtYmVyLk1JTl9WQUxVRTp0WzBdLHI9dFsxXTw9MD9OdW1iZXIuTUlOX1ZBTFVFOnRbMV0sbz1wUygpLmRvbWFpbihbaSxyXSkudGlja3MoZSk7cmV0dXJuIG8ubGVuZ3RoP286dH1pc1NhZmVOdW1iZXIodCl7cmV0dXJuIE51bWJlci5pc0Zpbml0ZSh0KSYmdD4wfX0sVFM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNjYWxlPVJnKCksdGhpcy5kZWZhdWx0Rm9ybWF0dGVyPUdjZX1mb3J3YXJkKHQsZSxpKXtyZXR1cm4gdGhpcy5zY2FsZS5kb21haW4odCkucmFuZ2UoZSkoaSl9cmV2ZXJzZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2NhbGUuZG9tYWluKHQpLnJhbmdlKGUpLmludmVydChpKS5nZXRUaW1lKCl9bmljZURvbWFpbih0KXtsZXRbZSxpXT10aGlzLnNjYWxlLmRvbWFpbih0KS5uaWNlKCkuZG9tYWluKCk7cmV0dXJuW2UuZ2V0VGltZSgpLGkuZ2V0VGltZSgpXX10aWNrcyh0LGUpe3JldHVybiB0aGlzLnNjYWxlLmRvbWFpbih0KS50aWNrcyhlKS5tYXAoaT0+aS5nZXRUaW1lKCkpfWlzU2FmZU51bWJlcih0KXtyZXR1cm4gTnVtYmVyLmlzRmluaXRlKHQpfX0seGo9ITE7aWYoc2VsZi5oYXNPd25Qcm9wZXJ0eSgiV2ViR0wyUmVuZGVyaW5nQ29udGV4dCIpJiZzZWxmLmhhc093blByb3BlcnR5KCJkb2N1bWVudCIpKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtuLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3IiLCgpPT57eGo9ITF9KTtsZXQgdD1uLmdldENvbnRleHQoIndlYmdsMiIpO3hqPUJvb2xlYW4odCl9dmFyIHN1X2NvbnZlcnRSZWN0VG9FeHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJue3g6W24ueCxuLngrbi53aWR0aF0seTpbbi55LG4ueStuLmhlaWdodF19fSxzdV9pc1dlYkdsMlN1cHBvcnRlZD1mdW5jdGlvbigpe3JldHVybiB4an0sc3VfaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gc2VsZi5oYXNPd25Qcm9wZXJ0eSgiT2Zmc2NyZWVuQ2FudmFzIil9LHN1X2FyZVBvbHlsaW5lc0VxdWFsPWZ1bmN0aW9uKG4sdCl7aWYobi5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPG4ubGVuZ3RoO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH0sQnk9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnhTY2FsZT1vdShOci5MSU5FQVIpLHRoaXMueVNjYWxlPW91KE5yLkxJTkVBUiksdGhpcy5kb21Db250YWluZXJSZWN0PXt4OjAsd2lkdGg6MSx5OjAsaGVpZ2h0OjF9LHRoaXMubGFzdFVwZGF0ZWQ9MCx0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfX1nZXRVcGRhdGVJZGVudGlmaWVyKCl7cmV0dXJuIHRoaXMubGFzdFVwZGF0ZWR9dXBkYXRlSWRlbnRpZmllcigpe3RoaXMubGFzdFVwZGF0ZWQrK31pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMH1zZXRYU2NhbGUodCl7dGhpcy54U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXRZU2NhbGUodCl7dGhpcy55U2NhbGU9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1nZXRDdXJyZW50Vmlld0JveFJlY3QoKXtyZXR1cm4gdGhpcy5jdXJyZW50Vmlld0JveFJlY3R9c2V0Vmlld0JveFJlY3QodCl7dGhpcy5jdXJyZW50Vmlld0JveFJlY3Q9dCx0aGlzLnVwZGF0ZUlkZW50aWZpZXIoKX1zZXREb21Db250YWluZXJSZWN0KHQpe3RoaXMuZG9tQ29udGFpbmVyUmVjdD10LHRoaXMudXBkYXRlSWRlbnRpZmllcigpfXRyYW5zZm9ybURhdGFUb1VpQ29vcmQodCxlKXtsZXQgaT10LHI9c3VfY29udmVydFJlY3RUb0V4dGVudCh0aGlzLmN1cnJlbnRWaWV3Qm94UmVjdCk7cmV0dXJuW3RoaXMueFNjYWxlLmZvcndhcmQoci54LFtpLngsaS54K2kud2lkdGhdLGVbMF0pLHRoaXMueVNjYWxlLmZvcndhcmQoci55LHRoaXMuaXNZQXhpc1BvaW50ZWREb3duKCk/W2kueStpLmhlaWdodCxpLnldOltpLnksaS55K2kuaGVpZ2h0XSxlWzFdKV19fTtmdW5jdGlvbiB4TyhuLHQsZSxpKXtsZXR7Y29sb3I6cix2aXNpYmxlOm8sb3BhY2l0eTpzfT1pLGE9bjtyZXR1cm4gYXx8bz8oYT1hPz90KCksYT1lKGEpLGEuc3R5bGUuZGlzcGxheT1vPyIiOiJub25lIixhLnN0eWxlLnN0cm9rZT1yLGEuc3R5bGUub3BhY2l0eT1TdHJpbmcocz8/MSksYSk6bnVsbH12YXIgRWw9MTAwMSxabz0xMDAzLEdzPTEwMDYsX2Y9MTAwOSxXUz0xMDEyLFVnPTEwMTUsbGI9MTAxNixjYj0xMDIwLGdhPTEwMjMsamc9MTAyNixoYj0xMDI3LG9iPTI0MDAsc2I9MjQwMSxiZj0zZTMsV3I9MzAwMSxxUz0zNTA0NCxvaz0zNTA0OCxFcD1jbGFzc3thZGRFdmVudExpc3RlbmVyKHQsZSl7dm9pZCAwPT09dGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXt9KTtsZXQgaT10aGlzLl9saXN0ZW5lcnM7dm9pZCAwPT09aVt0XSYmKGlbdF09W10pLC0xPT09aVt0XS5pbmRleE9mKGUpJiZpW3RdLnB1c2goZSl9aGFzRXZlbnRMaXN0ZW5lcih0LGUpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm4hMTtsZXQgaT10aGlzLl9saXN0ZW5lcnM7cmV0dXJuIHZvaWQgMCE9PWlbdF0mJi0xIT09aVt0XS5pbmRleE9mKGUpfXJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKXtpZih2b2lkIDA9PT10aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPXRoaXMuX2xpc3RlbmVyc1t0XTtpZih2b2lkIDAhPT1yKXtsZXQgbz1yLmluZGV4T2YoZSk7LTEhPT1vJiZyLnNwbGljZShvLDEpfX1kaXNwYXRjaEV2ZW50KHQpe2lmKHZvaWQgMD09PXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9dGhpcy5fbGlzdGVuZXJzW3QudHlwZV07aWYodm9pZCAwIT09aSl7dC50YXJnZXQ9dGhpcztsZXQgcj1pLnNsaWNlKDApO2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKylyW29dLmNhbGwodGhpcyx0KTt0LnRhcmdldD1udWxsfX19LE1zPVtdO2ZvcihsZXQgbj0wO248MjU2O24rKylNc1tuXT0objwxNj8iMCI6IiIpK24udG9TdHJpbmcoMTYpO3ZhciBEaj1NYXRoLlBJLzE4MCxoOD0xODAvTWF0aC5QSTtmdW5jdGlvbiBkdSgpe2xldCBuPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwLHQ9NDI5NDk2NzI5NSpNYXRoLnJhbmRvbSgpfDAsZT00Mjk0OTY3Mjk1Kk1hdGgucmFuZG9tKCl8MCxpPTQyOTQ5NjcyOTUqTWF0aC5yYW5kb20oKXwwO3JldHVybihNc1syNTUmbl0rTXNbbj4+OCYyNTVdK01zW24+PjE2JjI1NV0rTXNbbj4+MjQmMjU1XSsiLSIrTXNbMjU1JnRdK01zW3Q+PjgmMjU1XSsiLSIrTXNbdD4+MTYmMTV8NjRdK01zW3Q+PjI0JjI1NV0rIi0iK01zWzYzJmV8MTI4XStNc1tlPj44JjI1NV0rIi0iK01zW2U+PjE2JjI1NV0rTXNbZT4+MjQmMjU1XStNc1syNTUmaV0rTXNbaT4+OCYyNTVdK01zW2k+PjE2JjI1NV0rTXNbaT4+MjQmMjU1XSkudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBHYShuLHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsTWF0aC5taW4oZSxuKSl9ZnVuY3Rpb24gQWoobix0LGUpe3JldHVybigxLWUpKm4rZSp0fWZ1bmN0aW9uIHh1ZShuKXtyZXR1cm4gMD09KG4mbi0xKSYmMCE9PW59ZnVuY3Rpb24gSDhlKG4pe3JldHVybiBNYXRoLnBvdygyLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjIpKX12YXIgYXQ9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCl7dGhpcy54PXQsdGhpcy55PWV9Z2V0IHdpZHRoKCl7cmV0dXJuIHRoaXMueH1zZXQgd2lkdGgodCl7dGhpcy54PXR9Z2V0IGhlaWdodCgpe3JldHVybiB0aGlzLnl9c2V0IGhlaWdodCh0KXt0aGlzLnk9dH1zZXQodCxlKXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PWUsdGhpc31zZXRTY2FsYXIodCl7cmV0dXJuIHRoaXMueD10LHRoaXMueT10LHRoaXN9c2V0WCh0KXtyZXR1cm4gdGhpcy54PXQsdGhpc31zZXRZKHQpe3JldHVybiB0aGlzLnk9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9cmV0dXJuIHRoaXN9Z2V0Q29tcG9uZW50KHQpe3N3aXRjaCh0KXtjYXNlIDA6cmV0dXJuIHRoaXMueDtjYXNlIDE6cmV0dXJuIHRoaXMueTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLngsdGhpcy55KX1jb3B5KHQpe3JldHVybiB0aGlzLng9dC54LHRoaXMueT10LnksdGhpc31hZGQodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IyOiAuYWRkKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuYWRkVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5hZGRWZWN0b3JzKHQsZSkpOih0aGlzLngrPXQueCx0aGlzLnkrPXQueSx0aGlzKX1hZGRTY2FsYXIodCl7cmV0dXJuIHRoaXMueCs9dCx0aGlzLnkrPXQsdGhpc31hZGRWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngrZS54LHRoaXMueT10LnkrZS55LHRoaXN9YWRkU2NhbGVkVmVjdG9yKHQsZSl7cmV0dXJuIHRoaXMueCs9dC54KmUsdGhpcy55Kz10LnkqZSx0aGlzfXN1Yih0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IC5zdWIoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5zdWJWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLnN1YlZlY3RvcnModCxlKSk6KHRoaXMueC09dC54LHRoaXMueS09dC55LHRoaXMpfXN1YlNjYWxhcih0KXtyZXR1cm4gdGhpcy54LT10LHRoaXMueS09dCx0aGlzfXN1YlZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueC1lLngsdGhpcy55PXQueS1lLnksdGhpc31tdWx0aXBseSh0KXtyZXR1cm4gdGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpc31tdWx0aXBseVNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kj10LHRoaXMueSo9dCx0aGlzfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1hcHBseU1hdHJpeDModCl7bGV0IGU9dGhpcy54LGk9dGhpcy55LHI9dC5lbGVtZW50cztyZXR1cm4gdGhpcy54PXJbMF0qZStyWzNdKmkrcls2XSx0aGlzLnk9clsxXSplK3JbNF0qaStyWzddLHRoaXN9bWluKHQpe3JldHVybiB0aGlzLng9TWF0aC5taW4odGhpcy54LHQueCksdGhpcy55PU1hdGgubWluKHRoaXMueSx0LnkpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXN9Y2xhbXAodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQueCxNYXRoLm1pbihlLngsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQueSxNYXRoLm1pbihlLnksdGhpcy55KSksdGhpc31jbGFtcFNjYWxhcih0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy55KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzfWNlaWwoKXtyZXR1cm4gdGhpcy54PU1hdGguY2VpbCh0aGlzLngpLHRoaXMueT1NYXRoLmNlaWwodGhpcy55KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzfXJvdW5kVG9aZXJvKCl7cmV0dXJuIHRoaXMueD10aGlzLng8MD9NYXRoLmNlaWwodGhpcy54KTpNYXRoLmZsb29yKHRoaXMueCksdGhpcy55PXRoaXMueTwwP01hdGguY2VpbCh0aGlzLnkpOk1hdGguZmxvb3IodGhpcy55KSx0aGlzfW5lZ2F0ZSgpe3JldHVybiB0aGlzLng9LXRoaXMueCx0aGlzLnk9LXRoaXMueSx0aGlzfWRvdCh0KXtyZXR1cm4gdGhpcy54KnQueCt0aGlzLnkqdC55fWNyb3NzKHQpe3JldHVybiB0aGlzLngqdC55LXRoaXMueSp0Lnh9bGVuZ3RoU3EoKXtyZXR1cm4gdGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmRpdmlkZVNjYWxhcih0aGlzLmxlbmd0aCgpfHwxKX1hbmdsZSgpe3JldHVybiBNYXRoLmF0YW4yKC10aGlzLnksLXRoaXMueCkrTWF0aC5QSX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnk7cmV0dXJuIGUqZStpKml9bWFuaGF0dGFuRGlzdGFuY2VUbyh0KXtyZXR1cm4gTWF0aC5hYnModGhpcy54LXQueCkrTWF0aC5hYnModGhpcy55LXQueSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXN9bGVycFZlY3RvcnModCxlLGkpe3JldHVybiB0aGlzLng9dC54KyhlLngtdC54KSppLHRoaXMueT10LnkrKGUueS10LnkpKmksdGhpc31lcXVhbHModCl7cmV0dXJuIHQueD09PXRoaXMueCYmdC55PT09dGhpcy55fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0fWZyb21CdWZmZXJBdHRyaWJ1dGUodCxlLGkpe3JldHVybiB2b2lkIDAhPT1pJiZjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjI6IG9mZnNldCBoYXMgYmVlbiByZW1vdmVkIGZyb20gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLng9dC5nZXRYKGUpLHRoaXMueT10LmdldFkoZSksdGhpc31yb3RhdGVBcm91bmQodCxlKXtsZXQgaT1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLG89dGhpcy54LXQueCxzPXRoaXMueS10Lnk7cmV0dXJuIHRoaXMueD1vKmktcypyK3QueCx0aGlzLnk9bypyK3MqaSt0LnksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55fX07YXQucHJvdG90eXBlLmlzVmVjdG9yMj0hMDt2YXIgSm89Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDEsMCwwLDAsMV0sYXJndW1lbnRzLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiB0aGUgY29uc3RydWN0b3Igbm8gbG9uZ2VyIHJlYWRzIGFyZ3VtZW50cy4gdXNlIC5zZXQoKSBpbnN0ZWFkLiIpfXNldCh0LGUsaSxyLG8scyxhLGwsYyl7bGV0IHU9dGhpcy5lbGVtZW50cztyZXR1cm4gdVswXT10LHVbMV09cix1WzJdPWEsdVszXT1lLHVbNF09byx1WzVdPWwsdVs2XT1pLHVbN109cyx1WzhdPWMsdGhpc31pZGVudGl0eSgpe3JldHVybiB0aGlzLnNldCgxLDAsMCwwLDEsMCwwLDAsMSksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzBdPWlbMF0sZVsxXT1pWzFdLGVbMl09aVsyXSxlWzNdPWlbM10sZVs0XT1pWzRdLGVbNV09aVs1XSxlWzZdPWlbNl0sZVs3XT1pWzddLGVbOF09aVs4XSx0aGlzfWV4dHJhY3RCYXNpcyh0LGUsaSl7cmV0dXJuIHQuc2V0RnJvbU1hdHJpeDNDb2x1bW4odGhpcywwKSxlLnNldEZyb21NYXRyaXgzQ29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4M0NvbHVtbih0aGlzLDIpLHRoaXN9c2V0RnJvbU1hdHJpeDQodCl7bGV0IGU9dC5lbGVtZW50cztyZXR1cm4gdGhpcy5zZXQoZVswXSxlWzRdLGVbOF0sZVsxXSxlWzVdLGVbOV0sZVsyXSxlWzZdLGVbMTBdKSx0aGlzfW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModGhpcyx0KX1wcmVtdWx0aXBseSh0KXtyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsdGhpcyl9bXVsdGlwbHlNYXRyaWNlcyh0LGUpe2xldCBpPXQuZWxlbWVudHMscj1lLmVsZW1lbnRzLG89dGhpcy5lbGVtZW50cyxzPWlbMF0sYT1pWzNdLGw9aVs2XSxjPWlbMV0sdT1pWzRdLGQ9aVs3XSxwPWlbMl0saD1pWzVdLGY9aVs4XSxtPXJbMF0seD1yWzNdLGc9cls2XSxiPXJbMV0sRD1yWzRdLFQ9cls3XSxrPXJbMl0sWj1yWzVdLHo9cls4XTtyZXR1cm4gb1swXT1zKm0rYSpiK2wqayxvWzNdPXMqeCthKkQrbCpaLG9bNl09cypnK2EqVCtsKnosb1sxXT1jKm0rdSpiK2QqayxvWzRdPWMqeCt1KkQrZCpaLG9bN109YypnK3UqVCtkKnosb1syXT1wKm0raCpiK2YqayxvWzVdPXAqeCtoKkQrZipaLG9bOF09cCpnK2gqVCtmKnosdGhpc31tdWx0aXBseVNjYWxhcih0KXtsZXQgZT10aGlzLmVsZW1lbnRzO3JldHVybiBlWzBdKj10LGVbM10qPXQsZVs2XSo9dCxlWzFdKj10LGVbNF0qPXQsZVs3XSo9dCxlWzJdKj10LGVbNV0qPXQsZVs4XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XTtyZXR1cm4gZSpzKnUtZSphKmMtaSpvKnUraSphKmwrcipvKmMtcipzKmx9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXUqcy1hKmMscD1hKmwtdSpvLGg9YypvLXMqbCxmPWUqZCtpKnArcipoO2lmKDA9PT1mKXJldHVybiB0aGlzLnNldCgwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IG09MS9mO3JldHVybiB0WzBdPWQqbSx0WzFdPShyKmMtdSppKSptLHRbMl09KGEqaS1yKnMpKm0sdFszXT1wKm0sdFs0XT0odSplLXIqbCkqbSx0WzVdPShyKm8tYSplKSptLHRbNl09aCptLHRbN109KGkqbC1jKmUpKm0sdFs4XT0ocyplLWkqbykqbSx0aGlzfXRyYW5zcG9zZSgpe2xldCB0LGU9dGhpcy5lbGVtZW50cztyZXR1cm4gdD1lWzFdLGVbMV09ZVszXSxlWzNdPXQsdD1lWzJdLGVbMl09ZVs2XSxlWzZdPXQsdD1lWzVdLGVbNV09ZVs3XSxlWzddPXQsdGhpc31nZXROb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuc2V0RnJvbU1hdHJpeDQodCkuaW52ZXJ0KCkudHJhbnNwb3NlKCl9dHJhbnNwb3NlSW50b0FycmF5KHQpe2xldCBlPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbM10sdFsyXT1lWzZdLHRbM109ZVsxXSx0WzRdPWVbNF0sdFs1XT1lWzddLHRbNl09ZVsyXSx0WzddPWVbNV0sdFs4XT1lWzhdLHRoaXN9c2V0VXZUcmFuc2Zvcm0odCxlLGkscixvLHMsYSl7bGV0IGw9TWF0aC5jb3MobyksYz1NYXRoLnNpbihvKTtyZXR1cm4gdGhpcy5zZXQoaSpsLGkqYywtaSoobCpzK2MqYSkrcyt0LC1yKmMscipsLC1yKigtYypzK2wqYSkrYStlLDAsMCwxKSx0aGlzfXNjYWxlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSo9dCxpWzNdKj10LGlbNl0qPXQsaVsxXSo9ZSxpWzRdKj1lLGlbN10qPWUsdGhpc31yb3RhdGUodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxyPXRoaXMuZWxlbWVudHMsbz1yWzBdLHM9clszXSxhPXJbNl0sbD1yWzFdLGM9cls0XSx1PXJbN107cmV0dXJuIHJbMF09ZSpvK2kqbCxyWzNdPWUqcytpKmMscls2XT1lKmEraSp1LHJbMV09LWkqbytlKmwscls0XT0taSpzK2UqYyxyWzddPS1pKmErZSp1LHRoaXN9dHJhbnNsYXRlKHQsZSl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gaVswXSs9dCppWzJdLGlbM10rPXQqaVs1XSxpWzZdKz10KmlbOF0saVsxXSs9ZSppWzJdLGlbNF0rPWUqaVs1XSxpWzddKz1lKmlbOF0sdGhpc31lcXVhbHModCl7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQuZWxlbWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8OTtpKyspdGhpcy5lbGVtZW50c1tpXT10W2krZV07cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5lbGVtZW50cztyZXR1cm4gdFtlXT1pWzBdLHRbZSsxXT1pWzFdLHRbZSsyXT1pWzJdLHRbZSszXT1pWzNdLHRbZSs0XT1pWzRdLHRbZSs1XT1pWzVdLHRbZSs2XT1pWzZdLHRbZSs3XT1pWzddLHRbZSs4XT1pWzhdLHR9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmZyb21BcnJheSh0aGlzLmVsZW1lbnRzKX19O2Z1bmN0aW9uIE9kZShuKXtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wOy0tdClpZihuW3RdPjY1NTM1KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFlTKG4pe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLG4pfUpvLnByb3RvdHlwZS5pc01hdHJpeDM9ITA7dmFyIEN1ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFsbW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraToxMjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDczNDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEzMjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVncmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1ibHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMwNDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3JhbmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZmOjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSxhdT17aDowLHM6MCxsOjB9LENPPXtoOjAsczowLGw6MH07ZnVuY3Rpb24gSWoobix0LGUpe3JldHVybiBlPDAmJihlKz0xKSxlPjEmJihlLT0xKSxlPDEvNj9uKzYqKHQtbikqZTplPC41P3Q6ZTwyLzM/bis2Kih0LW4pKigyLzMtZSk6bn1mdW5jdGlvbiB1YihuKXtyZXR1cm4gbjwuMDQwNDU/LjA3NzM5OTM4MDgqbjpNYXRoLnBvdyguOTQ3ODY3Mjk4NipuKy4wNTIxMzI3MDE0LDIuNCl9ZnVuY3Rpb24gUGoobil7cmV0dXJuIG48LjAwMzEzMDg/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLC40MTY2NiktLjA1NX12YXIgdm49KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7cmV0dXJuIHZvaWQgMD09PWkmJnZvaWQgMD09PXI/dGhpcy5zZXQoZSk6dGhpcy5zZXRSR0IoZSxpLHIpfXNldChlKXtyZXR1cm4gZSYmZS5pc0NvbG9yP3RoaXMuY29weShlKToibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5zZXRIZXgoZSk6InN0cmluZyI9PXR5cGVvZiBlJiZ0aGlzLnNldFN0eWxlKGUpLHRoaXN9c2V0U2NhbGFyKGUpe3JldHVybiB0aGlzLnI9ZSx0aGlzLmc9ZSx0aGlzLmI9ZSx0aGlzfXNldEhleChlKXtyZXR1cm4gZT1NYXRoLmZsb29yKGUpLHRoaXMucj0oZT4+MTYmMjU1KS8yNTUsdGhpcy5nPShlPj44JjI1NSkvMjU1LHRoaXMuYj0oMjU1JmUpLzI1NSx0aGlzfXNldFJHQihlLGkscil7cmV0dXJuIHRoaXMucj1lLHRoaXMuZz1pLHRoaXMuYj1yLHRoaXN9c2V0SFNMKGUsaSxyKXtpZihlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuKG4lMSsxKSUxfShlKSxpPUdhKGksMCwxKSxyPUdhKHIsMCwxKSwwPT09aSl0aGlzLnI9dGhpcy5nPXRoaXMuYj1yO2Vsc2V7bGV0IG89cjw9LjU/ciooMStpKTpyK2ktcippLHM9MipyLW87dGhpcy5yPUlqKHMsbyxlKzEvMyksdGhpcy5nPUlqKHMsbyxlKSx0aGlzLmI9SWoocyxvLGUtMS8zKX1yZXR1cm4gdGhpc31zZXRTdHlsZShlKXtmdW5jdGlvbiBpKG8pe3ZvaWQgMCE9PW8mJnBhcnNlRmxvYXQobyk8MSYmY29uc29sZS53YXJuKCJUSFJFRS5Db2xvcjogQWxwaGEgY29tcG9uZW50IG9mICIrZSsiIHdpbGwgYmUgaWdub3JlZC4iKX1sZXQgcjtpZihyPS9eKCg/OnJnYnxoc2wpYT8pXCgoW15cKV0qKVwpLy5leGVjKGUpKXtsZXQgbyxhPXJbMl07c3dpdGNoKHJbMV0pe2Nhc2UicmdiIjpjYXNlInJnYmEiOmlmKG89L15ccyooXGQrKVxzKixccyooXGQrKVxzKixccyooXGQrKVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDI1NSxwYXJzZUludChvWzFdLDEwKSkvMjU1LHRoaXMuZz1NYXRoLm1pbigyNTUscGFyc2VJbnQob1syXSwxMCkpLzI1NSx0aGlzLmI9TWF0aC5taW4oMjU1LHBhcnNlSW50KG9bM10sMTApKS8yNTUsaShvWzRdKSx0aGlzO2lmKG89L15ccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyosXHMqKFxkKylcJVxzKig/OixccyooXGQqXC4/XGQrKVxzKik/JC8uZXhlYyhhKSlyZXR1cm4gdGhpcy5yPU1hdGgubWluKDEwMCxwYXJzZUludChvWzFdLDEwKSkvMTAwLHRoaXMuZz1NYXRoLm1pbigxMDAscGFyc2VJbnQob1syXSwxMCkpLzEwMCx0aGlzLmI9TWF0aC5taW4oMTAwLHBhcnNlSW50KG9bM10sMTApKS8xMDAsaShvWzRdKSx0aGlzO2JyZWFrO2Nhc2UiaHNsIjpjYXNlImhzbGEiOmlmKG89L15ccyooXGQqXC4/XGQrKVxzKixccyooXGQrKVwlXHMqLFxzKihcZCspXCVccyooPzosXHMqKFxkKlwuP1xkKylccyopPyQvLmV4ZWMoYSkpe2xldCBsPXBhcnNlRmxvYXQob1sxXSkvMzYwLGM9cGFyc2VJbnQob1syXSwxMCkvMTAwLHU9cGFyc2VJbnQob1szXSwxMCkvMTAwO3JldHVybiBpKG9bNF0pLHRoaXMuc2V0SFNMKGwsYyx1KX19fWVsc2UgaWYocj0vXlwjKFtBLUZhLWZcZF0rKSQvLmV4ZWMoZSkpe2xldCBvPXJbMV0scz1vLmxlbmd0aDtpZigzPT09cylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KG8uY2hhckF0KDApK28uY2hhckF0KDApLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KG8uY2hhckF0KDEpK28uY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KG8uY2hhckF0KDIpK28uY2hhckF0KDIpLDE2KS8yNTUsdGhpcztpZig2PT09cylyZXR1cm4gdGhpcy5yPXBhcnNlSW50KG8uY2hhckF0KDApK28uY2hhckF0KDEpLDE2KS8yNTUsdGhpcy5nPXBhcnNlSW50KG8uY2hhckF0KDIpK28uY2hhckF0KDMpLDE2KS8yNTUsdGhpcy5iPXBhcnNlSW50KG8uY2hhckF0KDQpK28uY2hhckF0KDUpLDE2KS8yNTUsdGhpc31yZXR1cm4gZSYmZS5sZW5ndGg+MD90aGlzLnNldENvbG9yTmFtZShlKTp0aGlzfXNldENvbG9yTmFtZShlKXtsZXQgaT1DdWVbZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gdm9pZCAwIT09aT90aGlzLnNldEhleChpKTpjb25zb2xlLndhcm4oIlRIUkVFLkNvbG9yOiBVbmtub3duIGNvbG9yICIrZSksdGhpc31jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLnIsdGhpcy5nLHRoaXMuYil9Y29weShlKXtyZXR1cm4gdGhpcy5yPWUucix0aGlzLmc9ZS5nLHRoaXMuYj1lLmIsdGhpc31jb3B5U1JHQlRvTGluZWFyKGUpe3JldHVybiB0aGlzLnI9dWIoZS5yKSx0aGlzLmc9dWIoZS5nKSx0aGlzLmI9dWIoZS5iKSx0aGlzfWNvcHlMaW5lYXJUb1NSR0IoZSl7cmV0dXJuIHRoaXMucj1QaihlLnIpLHRoaXMuZz1QaihlLmcpLHRoaXMuYj1QaihlLmIpLHRoaXN9Y29udmVydFNSR0JUb0xpbmVhcigpe3JldHVybiB0aGlzLmNvcHlTUkdCVG9MaW5lYXIodGhpcyksdGhpc31jb252ZXJ0TGluZWFyVG9TUkdCKCl7cmV0dXJuIHRoaXMuY29weUxpbmVhclRvU1JHQih0aGlzKSx0aGlzfWdldEhleCgpe3JldHVybiAyNTUqdGhpcy5yPDwxNl4yNTUqdGhpcy5nPDw4XjI1NSp0aGlzLmI8PDB9Z2V0SGV4U3RyaW5nKCl7cmV0dXJuKCIwMDAwMDAiK3RoaXMuZ2V0SGV4KCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNil9Z2V0SFNMKGUpe2xldCBsLGMsaT10aGlzLnIscj10aGlzLmcsbz10aGlzLmIscz1NYXRoLm1heChpLHIsbyksYT1NYXRoLm1pbihpLHIsbyksdT0oYStzKS8yO2lmKGE9PT1zKWw9MCxjPTA7ZWxzZXtsZXQgZD1zLWE7c3dpdGNoKGM9dTw9LjU/ZC8ocythKTpkLygyLXMtYSkscyl7Y2FzZSBpOmw9KHItbykvZCsocjxvPzY6MCk7YnJlYWs7Y2FzZSByOmw9KG8taSkvZCsyO2JyZWFrO2Nhc2UgbzpsPShpLXIpL2QrNH1sLz02fXJldHVybiBlLmg9bCxlLnM9YyxlLmw9dSxlfWdldFN0eWxlKCl7cmV0dXJuInJnYigiKygyNTUqdGhpcy5yfDApKyIsIisoMjU1KnRoaXMuZ3wwKSsiLCIrKDI1NSp0aGlzLmJ8MCkrIikifW9mZnNldEhTTChlLGkscil7cmV0dXJuIHRoaXMuZ2V0SFNMKGF1KSxhdS5oKz1lLGF1LnMrPWksYXUubCs9cix0aGlzLnNldEhTTChhdS5oLGF1LnMsYXUubCksdGhpc31hZGQoZSl7cmV0dXJuIHRoaXMucis9ZS5yLHRoaXMuZys9ZS5nLHRoaXMuYis9ZS5iLHRoaXN9YWRkQ29sb3JzKGUsaSl7cmV0dXJuIHRoaXMucj1lLnIraS5yLHRoaXMuZz1lLmcraS5nLHRoaXMuYj1lLmIraS5iLHRoaXN9YWRkU2NhbGFyKGUpe3JldHVybiB0aGlzLnIrPWUsdGhpcy5nKz1lLHRoaXMuYis9ZSx0aGlzfXN1YihlKXtyZXR1cm4gdGhpcy5yPU1hdGgubWF4KDAsdGhpcy5yLWUuciksdGhpcy5nPU1hdGgubWF4KDAsdGhpcy5nLWUuZyksdGhpcy5iPU1hdGgubWF4KDAsdGhpcy5iLWUuYiksdGhpc31tdWx0aXBseShlKXtyZXR1cm4gdGhpcy5yKj1lLnIsdGhpcy5nKj1lLmcsdGhpcy5iKj1lLmIsdGhpc31tdWx0aXBseVNjYWxhcihlKXtyZXR1cm4gdGhpcy5yKj1lLHRoaXMuZyo9ZSx0aGlzLmIqPWUsdGhpc31sZXJwKGUsaSl7cmV0dXJuIHRoaXMucis9KGUuci10aGlzLnIpKmksdGhpcy5nKz0oZS5nLXRoaXMuZykqaSx0aGlzLmIrPShlLmItdGhpcy5iKSppLHRoaXN9bGVycENvbG9ycyhlLGkscil7cmV0dXJuIHRoaXMucj1lLnIrKGkuci1lLnIpKnIsdGhpcy5nPWUuZysoaS5nLWUuZykqcix0aGlzLmI9ZS5iKyhpLmItZS5iKSpyLHRoaXN9bGVycEhTTChlLGkpe3RoaXMuZ2V0SFNMKGF1KSxlLmdldEhTTChDTyk7bGV0IHI9QWooYXUuaCxDTy5oLGkpLG89QWooYXUucyxDTy5zLGkpLHM9QWooYXUubCxDTy5sLGkpO3JldHVybiB0aGlzLnNldEhTTChyLG8scyksdGhpc31lcXVhbHMoZSl7cmV0dXJuIGUucj09PXRoaXMuciYmZS5nPT09dGhpcy5nJiZlLmI9PT10aGlzLmJ9ZnJvbUFycmF5KGUsaT0wKXtyZXR1cm4gdGhpcy5yPWVbaV0sdGhpcy5nPWVbaSsxXSx0aGlzLmI9ZVtpKzJdLHRoaXN9dG9BcnJheShlPVtdLGk9MCl7cmV0dXJuIGVbaV09dGhpcy5yLGVbaSsxXT10aGlzLmcsZVtpKzJdPXRoaXMuYixlfWZyb21CdWZmZXJBdHRyaWJ1dGUoZSxpKXtyZXR1cm4gdGhpcy5yPWUuZ2V0WChpKSx0aGlzLmc9ZS5nZXRZKGkpLHRoaXMuYj1lLmdldFooaSksITA9PT1lLm5vcm1hbGl6ZWQmJih0aGlzLnIvPTI1NSx0aGlzLmcvPTI1NSx0aGlzLmIvPTI1NSksdGhpc310b0pTT04oKXtyZXR1cm4gdGhpcy5nZXRIZXgoKX19cmV0dXJuIG4uTkFNRVM9Q3VlLG59KSgpO3ZuLnByb3RvdHlwZS5pc0NvbG9yPSEwLHZuLnByb3RvdHlwZS5yPTEsdm4ucHJvdG90eXBlLmc9MSx2bi5wcm90b3R5cGUuYj0xO3ZhciBWeSxUcD1jbGFzc3tzdGF0aWMgZ2V0RGF0YVVSTCh0KXtpZigvXmRhdGE6L2kudGVzdCh0LnNyYyl8fHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudD4idSIpcmV0dXJuIHQuc3JjO2xldCBlO2lmKHQgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCllPXQ7ZWxzZXt2b2lkIDA9PT1WeSYmKFZ5PVlTKCJjYW52YXMiKSksVnkud2lkdGg9dC53aWR0aCxWeS5oZWlnaHQ9dC5oZWlnaHQ7bGV0IGk9VnkuZ2V0Q29udGV4dCgiMmQiKTt0IGluc3RhbmNlb2YgSW1hZ2VEYXRhP2kucHV0SW1hZ2VEYXRhKHQsMCwwKTppLmRyYXdJbWFnZSh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KSxlPVZ5fXJldHVybiBlLndpZHRoPjIwNDh8fGUuaGVpZ2h0PjIwNDg/KGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5nZXREYXRhVVJMOiBJbWFnZSBjb252ZXJ0ZWQgdG8ganBnIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIix0KSxlLnRvRGF0YVVSTCgiaW1hZ2UvanBlZyIsLjYpKTplLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9c3RhdGljIHNSR0JUb0xpbmVhcih0KXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJnQgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IGU9WVMoImNhbnZhcyIpO2Uud2lkdGg9dC53aWR0aCxlLmhlaWdodD10LmhlaWdodDtsZXQgaT1lLmdldENvbnRleHQoIjJkIik7aS5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCk7bGV0IHI9aS5nZXRJbWFnZURhdGEoMCwwLHQud2lkdGgsdC5oZWlnaHQpLG89ci5kYXRhO2ZvcihsZXQgcz0wO3M8by5sZW5ndGg7cysrKW9bc109MjU1KnViKG9bc10vMjU1KTtyZXR1cm4gaS5wdXRJbWFnZURhdGEociwwLDApLGV9aWYodC5kYXRhKXtsZXQgZT10LmRhdGEuc2xpY2UoMCk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspZVtpXT1lIGluc3RhbmNlb2YgVWludDhBcnJheXx8ZSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P01hdGguZmxvb3IoMjU1KnViKGVbaV0vMjU1KSk6dWIoZVtpXSk7cmV0dXJue2RhdGE6ZSx3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH19cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5zUkdCVG9MaW5lYXIoKTogVW5zdXBwb3J0ZWQgaW1hZ2UgdHlwZS4gTm8gY29sb3Igc3BhY2UgY29udmVyc2lvbiBhcHBsaWVkLiIpLHR9fSxVOGU9MCxIbz1jbGFzcyBleHRlbmRzIEVwe2NvbnN0cnVjdG9yKHQ9SG8uREVGQVVMVF9JTUFHRSxlPUhvLkRFRkFVTFRfTUFQUElORyxpPUVsLHI9RWwsbz1HcyxzPTEwMDgsYT1nYSxsPV9mLGM9MSx1PWJmKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlU4ZSsrfSksdGhpcy51dWlkPWR1KCksdGhpcy5uYW1lPSIiLHRoaXMuaW1hZ2U9dCx0aGlzLm1pcG1hcHM9W10sdGhpcy5tYXBwaW5nPWUsdGhpcy53cmFwUz1pLHRoaXMud3JhcFQ9cix0aGlzLm1hZ0ZpbHRlcj1vLHRoaXMubWluRmlsdGVyPXMsdGhpcy5hbmlzb3Ryb3B5PWMsdGhpcy5mb3JtYXQ9YSx0aGlzLmludGVybmFsRm9ybWF0PW51bGwsdGhpcy50eXBlPWwsdGhpcy5vZmZzZXQ9bmV3IGF0KDAsMCksdGhpcy5yZXBlYXQ9bmV3IGF0KDEsMSksdGhpcy5jZW50ZXI9bmV3IGF0KDAsMCksdGhpcy5yb3RhdGlvbj0wLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMCx0aGlzLm1hdHJpeD1uZXcgSm8sdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITAsdGhpcy5wcmVtdWx0aXBseUFscGhhPSExLHRoaXMuZmxpcFk9ITAsdGhpcy51bnBhY2tBbGlnbm1lbnQ9NCx0aGlzLmVuY29kaW5nPXUsdGhpcy51c2VyRGF0YT17fSx0aGlzLnZlcnNpb249MCx0aGlzLm9uVXBkYXRlPW51bGwsdGhpcy5pc1JlbmRlclRhcmdldFRleHR1cmU9ITEsdGhpcy5uZWVkc1BNUkVNVXBkYXRlPSExfXVwZGF0ZU1hdHJpeCgpe3RoaXMubWF0cml4LnNldFV2VHJhbnNmb3JtKHRoaXMub2Zmc2V0LngsdGhpcy5vZmZzZXQueSx0aGlzLnJlcGVhdC54LHRoaXMucmVwZWF0LnksdGhpcy5yb3RhdGlvbix0aGlzLmNlbnRlci54LHRoaXMuY2VudGVyLnkpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5pbWFnZT10LmltYWdlLHRoaXMubWlwbWFwcz10Lm1pcG1hcHMuc2xpY2UoMCksdGhpcy5tYXBwaW5nPXQubWFwcGluZyx0aGlzLndyYXBTPXQud3JhcFMsdGhpcy53cmFwVD10LndyYXBULHRoaXMubWFnRmlsdGVyPXQubWFnRmlsdGVyLHRoaXMubWluRmlsdGVyPXQubWluRmlsdGVyLHRoaXMuYW5pc290cm9weT10LmFuaXNvdHJvcHksdGhpcy5mb3JtYXQ9dC5mb3JtYXQsdGhpcy5pbnRlcm5hbEZvcm1hdD10LmludGVybmFsRm9ybWF0LHRoaXMudHlwZT10LnR5cGUsdGhpcy5vZmZzZXQuY29weSh0Lm9mZnNldCksdGhpcy5yZXBlYXQuY29weSh0LnJlcGVhdCksdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5yb3RhdGlvbj10LnJvdGF0aW9uLHRoaXMubWF0cml4QXV0b1VwZGF0ZT10Lm1hdHJpeEF1dG9VcGRhdGUsdGhpcy5tYXRyaXguY29weSh0Lm1hdHJpeCksdGhpcy5nZW5lcmF0ZU1pcG1hcHM9dC5nZW5lcmF0ZU1pcG1hcHMsdGhpcy5wcmVtdWx0aXBseUFscGhhPXQucHJlbXVsdGlwbHlBbHBoYSx0aGlzLmZsaXBZPXQuZmxpcFksdGhpcy51bnBhY2tBbGlnbm1lbnQ9dC51bnBhY2tBbGlnbm1lbnQsdGhpcy5lbmNvZGluZz10LmVuY29kaW5nLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc310b0pTT04odCl7bGV0IGU9dm9pZCAwPT09dHx8InN0cmluZyI9PXR5cGVvZiB0O2lmKCFlJiZ2b2lkIDAhPT10LnRleHR1cmVzW3RoaXMudXVpZF0pcmV0dXJuIHQudGV4dHVyZXNbdGhpcy51dWlkXTtsZXQgaT17bWV0YWRhdGE6e3ZlcnNpb246NC41LHR5cGU6IlRleHR1cmUiLGdlbmVyYXRvcjoiVGV4dHVyZS50b0pTT04ifSx1dWlkOnRoaXMudXVpZCxuYW1lOnRoaXMubmFtZSxtYXBwaW5nOnRoaXMubWFwcGluZyxyZXBlYXQ6W3RoaXMucmVwZWF0LngsdGhpcy5yZXBlYXQueV0sb2Zmc2V0Olt0aGlzLm9mZnNldC54LHRoaXMub2Zmc2V0LnldLGNlbnRlcjpbdGhpcy5jZW50ZXIueCx0aGlzLmNlbnRlci55XSxyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHdyYXA6W3RoaXMud3JhcFMsdGhpcy53cmFwVF0sZm9ybWF0OnRoaXMuZm9ybWF0LHR5cGU6dGhpcy50eXBlLGVuY29kaW5nOnRoaXMuZW5jb2RpbmcsbWluRmlsdGVyOnRoaXMubWluRmlsdGVyLG1hZ0ZpbHRlcjp0aGlzLm1hZ0ZpbHRlcixhbmlzb3Ryb3B5OnRoaXMuYW5pc290cm9weSxmbGlwWTp0aGlzLmZsaXBZLHByZW11bHRpcGx5QWxwaGE6dGhpcy5wcmVtdWx0aXBseUFscGhhLHVucGFja0FsaWdubWVudDp0aGlzLnVucGFja0FsaWdubWVudH07aWYodm9pZCAwIT09dGhpcy5pbWFnZSl7bGV0IHI9dGhpcy5pbWFnZTtpZih2b2lkIDA9PT1yLnV1aWQmJihyLnV1aWQ9ZHUoKSksIWUmJnZvaWQgMD09PXQuaW1hZ2VzW3IudXVpZF0pe2xldCBvO2lmKEFycmF5LmlzQXJyYXkocikpe289W107Zm9yKGxldCBzPTAsYT1yLmxlbmd0aDtzPGE7cysrKW8ucHVzaChSaihyW3NdLmlzRGF0YVRleHR1cmU/cltzXS5pbWFnZTpyW3NdKSl9ZWxzZSBvPVJqKHIpO3QuaW1hZ2VzW3IudXVpZF09e3V1aWQ6ci51dWlkLHVybDpvfX1pLmltYWdlPXIudXVpZH1yZXR1cm4ie30iIT09SlNPTi5zdHJpbmdpZnkodGhpcy51c2VyRGF0YSkmJihpLnVzZXJEYXRhPXRoaXMudXNlckRhdGEpLGV8fCh0LnRleHR1cmVzW3RoaXMudXVpZF09aSksaX1kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXRyYW5zZm9ybVV2KHQpe2lmKDMwMCE9PXRoaXMubWFwcGluZylyZXR1cm4gdDtpZih0LmFwcGx5TWF0cml4Myh0aGlzLm1hdHJpeCksdC54PDB8fHQueD4xKXN3aXRjaCh0aGlzLndyYXBTKXtjYXNlIDFlMzp0Lng9dC54LU1hdGguZmxvb3IodC54KTticmVhaztjYXNlIEVsOnQueD10Lng8MD8wOjE7YnJlYWs7Y2FzZSAxMDAyOnQueD0xPT09TWF0aC5hYnMoTWF0aC5mbG9vcih0LngpJTIpP01hdGguY2VpbCh0LngpLXQueDp0LngtTWF0aC5mbG9vcih0LngpfWlmKHQueTwwfHx0Lnk+MSlzd2l0Y2godGhpcy53cmFwVCl7Y2FzZSAxZTM6dC55PXQueS1NYXRoLmZsb29yKHQueSk7YnJlYWs7Y2FzZSBFbDp0Lnk9dC55PDA/MDoxO2JyZWFrO2Nhc2UgMTAwMjp0Lnk9MT09PU1hdGguYWJzKE1hdGguZmxvb3IodC55KSUyKT9NYXRoLmNlaWwodC55KS10Lnk6dC55LU1hdGguZmxvb3IodC55KX1yZXR1cm4gdGhpcy5mbGlwWSYmKHQueT0xLXQueSksdH1zZXQgbmVlZHNVcGRhdGUodCl7ITA9PT10JiZ0aGlzLnZlcnNpb24rK319O2Z1bmN0aW9uIFJqKG4pe3JldHVybiB0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJm4gaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50fHx0eXBlb2YgSFRNTENhbnZhc0VsZW1lbnQ8InUiJiZuIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fHR5cGVvZiBJbWFnZUJpdG1hcDwidSImJm4gaW5zdGFuY2VvZiBJbWFnZUJpdG1hcD9UcC5nZXREYXRhVVJMKG4pOm4uZGF0YT97ZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuLmRhdGEpLHdpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0LHR5cGU6bi5kYXRhLmNvbnN0cnVjdG9yLm5hbWV9Oihjb25zb2xlLndhcm4oIlRIUkVFLlRleHR1cmU6IFVuYWJsZSB0byBzZXJpYWxpemUgVGV4dHVyZS4iKSx7fSl9SG8uREVGQVVMVF9JTUFHRT12b2lkIDAsSG8uREVGQVVMVF9NQVBQSU5HPTMwMCxIby5wcm90b3R5cGUuaXNUZXh0dXJlPSEwO3ZhciBhcj1jbGFzc3tjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MCxyPTEpe3RoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXMudz1yfWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnp9c2V0IHdpZHRoKHQpe3RoaXMuej10fWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy53fXNldCBoZWlnaHQodCl7dGhpcy53PXR9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aSx0aGlzLnc9cix0aGlzfXNldFNjYWxhcih0KXtyZXR1cm4gdGhpcy54PXQsdGhpcy55PXQsdGhpcy56PXQsdGhpcy53PXQsdGhpc31zZXRYKHQpe3JldHVybiB0aGlzLng9dCx0aGlzfXNldFkodCl7cmV0dXJuIHRoaXMueT10LHRoaXN9c2V0Wih0KXtyZXR1cm4gdGhpcy56PXQsdGhpc31zZXRXKHQpe3JldHVybiB0aGlzLnc9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztjYXNlIDM6dGhpcy53PWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX1yZXR1cm4gdGhpc31nZXRDb21wb25lbnQodCl7c3dpdGNoKHQpe2Nhc2UgMDpyZXR1cm4gdGhpcy54O2Nhc2UgMTpyZXR1cm4gdGhpcy55O2Nhc2UgMjpyZXR1cm4gdGhpcy56O2Nhc2UgMzpyZXR1cm4gdGhpcy53O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbmRleCBpcyBvdXQgb2YgcmFuZ2U6ICIrdCl9fWNsb25lKCl7cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56LHRoaXMudyl9Y29weSh0KXtyZXR1cm4gdGhpcy54PXQueCx0aGlzLnk9dC55LHRoaXMuej10LnosdGhpcy53PXZvaWQgMCE9PXQudz90Lnc6MSx0aGlzfWFkZCh0LGUpe3JldHVybiB2b2lkIDAhPT1lPyhjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5hZGQoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5hZGRWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLmFkZFZlY3RvcnModCxlKSk6KHRoaXMueCs9dC54LHRoaXMueSs9dC55LHRoaXMueis9dC56LHRoaXMudys9dC53LHRoaXMpfWFkZFNjYWxhcih0KXtyZXR1cm4gdGhpcy54Kz10LHRoaXMueSs9dCx0aGlzLnorPXQsdGhpcy53Kz10LHRoaXN9YWRkVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54K2UueCx0aGlzLnk9dC55K2UueSx0aGlzLno9dC56K2Uueix0aGlzLnc9dC53K2Uudyx0aGlzfWFkZFNjYWxlZFZlY3Rvcih0LGUpe3JldHVybiB0aGlzLngrPXQueCplLHRoaXMueSs9dC55KmUsdGhpcy56Kz10LnoqZSx0aGlzLncrPXQudyplLHRoaXN9c3ViKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogLnN1YigpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLnN1YlZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuc3ViVmVjdG9ycyh0LGUpKToodGhpcy54LT10LngsdGhpcy55LT10LnksdGhpcy56LT10LnosdGhpcy53LT10LncsdGhpcyl9c3ViU2NhbGFyKHQpe3JldHVybiB0aGlzLngtPXQsdGhpcy55LT10LHRoaXMuei09dCx0aGlzLnctPXQsdGhpc31zdWJWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngtZS54LHRoaXMueT10LnktZS55LHRoaXMuej10LnotZS56LHRoaXMudz10LnctZS53LHRoaXN9bXVsdGlwbHkodCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXMueio9dC56LHRoaXMudyo9dC53LHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXMudyo9dCx0aGlzfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10aGlzLncscz10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9c1swXSplK3NbNF0qaStzWzhdKnIrc1sxMl0qbyx0aGlzLnk9c1sxXSplK3NbNV0qaStzWzldKnIrc1sxM10qbyx0aGlzLno9c1syXSplK3NbNl0qaStzWzEwXSpyK3NbMTRdKm8sdGhpcy53PXNbM10qZStzWzddKmkrc1sxMV0qcitzWzE1XSpvLHRoaXN9ZGl2aWRlU2NhbGFyKHQpe3JldHVybiB0aGlzLm11bHRpcGx5U2NhbGFyKDEvdCl9c2V0QXhpc0FuZ2xlRnJvbVF1YXRlcm5pb24odCl7dGhpcy53PTIqTWF0aC5hY29zKHQudyk7bGV0IGU9TWF0aC5zcXJ0KDEtdC53KnQudyk7cmV0dXJuIGU8MWUtND8odGhpcy54PTEsdGhpcy55PTAsdGhpcy56PTApOih0aGlzLng9dC54L2UsdGhpcy55PXQueS9lLHRoaXMuej10LnovZSksdGhpc31zZXRBeGlzQW5nbGVGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGUsaSxyLG8sbD10LmVsZW1lbnRzLGM9bFswXSx1PWxbNF0sZD1sWzhdLHA9bFsxXSxoPWxbNV0sZj1sWzldLG09bFsyXSx4PWxbNl0sZz1sWzEwXTtpZihNYXRoLmFicyh1LXApPC4wMSYmTWF0aC5hYnMoZC1tKTwuMDEmJk1hdGguYWJzKGYteCk8LjAxKXtpZihNYXRoLmFicyh1K3ApPC4xJiZNYXRoLmFicyhkK20pPC4xJiZNYXRoLmFicyhmK3gpPC4xJiZNYXRoLmFicyhjK2grZy0zKTwuMSlyZXR1cm4gdGhpcy5zZXQoMSwwLDAsMCksdGhpcztlPU1hdGguUEk7bGV0IEQ9KGMrMSkvMixUPShoKzEpLzIsaz0oZysxKS8yLFo9KHUrcCkvNCx6PShkK20pLzQsZmU9KGYreCkvNDtyZXR1cm4gRD5UJiZEPms/RDwuMDE/KGk9MCxyPS43MDcxMDY3ODEsbz0uNzA3MTA2NzgxKTooaT1NYXRoLnNxcnQoRCkscj1aL2ksbz16L2kpOlQ+az9UPC4wMT8oaT0uNzA3MTA2NzgxLHI9MCxvPS43MDcxMDY3ODEpOihyPU1hdGguc3FydChUKSxpPVovcixvPWZlL3IpOms8LjAxPyhpPS43MDcxMDY3ODEscj0uNzA3MTA2NzgxLG89MCk6KG89TWF0aC5zcXJ0KGspLGk9ei9vLHI9ZmUvbyksdGhpcy5zZXQoaSxyLG8sZSksdGhpc31sZXQgYj1NYXRoLnNxcnQoKHgtZikqKHgtZikrKGQtbSkqKGQtbSkrKHAtdSkqKHAtdSkpO3JldHVybiBNYXRoLmFicyhiKTwuMDAxJiYoYj0xKSx0aGlzLng9KHgtZikvYix0aGlzLnk9KGQtbSkvYix0aGlzLno9KHAtdSkvYix0aGlzLnc9TWF0aC5hY29zKChjK2grZy0xKS8yKSx0aGlzfW1pbih0KXtyZXR1cm4gdGhpcy54PU1hdGgubWluKHRoaXMueCx0LngpLHRoaXMueT1NYXRoLm1pbih0aGlzLnksdC55KSx0aGlzLno9TWF0aC5taW4odGhpcy56LHQueiksdGhpcy53PU1hdGgubWluKHRoaXMudyx0LncpLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzLnc9TWF0aC5tYXgodGhpcy53LHQudyksdGhpc31jbGFtcCh0LGUpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodC54LE1hdGgubWluKGUueCx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodC55LE1hdGgubWluKGUueSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodC56LE1hdGgubWluKGUueix0aGlzLnopKSx0aGlzLnc9TWF0aC5tYXgodC53LE1hdGgubWluKGUudyx0aGlzLncpKSx0aGlzfWNsYW1wU2NhbGFyKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy54KSksdGhpcy55PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLnkpKSx0aGlzLno9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueikpLHRoaXMudz1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy53KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXMudz1NYXRoLmZsb29yKHRoaXMudyksdGhpc31jZWlsKCl7cmV0dXJuIHRoaXMueD1NYXRoLmNlaWwodGhpcy54KSx0aGlzLnk9TWF0aC5jZWlsKHRoaXMueSksdGhpcy56PU1hdGguY2VpbCh0aGlzLnopLHRoaXMudz1NYXRoLmNlaWwodGhpcy53KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXMudz1NYXRoLnJvdW5kKHRoaXMudyksdGhpc31yb3VuZFRvWmVybygpe3JldHVybiB0aGlzLng9dGhpcy54PDA/TWF0aC5jZWlsKHRoaXMueCk6TWF0aC5mbG9vcih0aGlzLngpLHRoaXMueT10aGlzLnk8MD9NYXRoLmNlaWwodGhpcy55KTpNYXRoLmZsb29yKHRoaXMueSksdGhpcy56PXRoaXMuejwwP01hdGguY2VpbCh0aGlzLnopOk1hdGguZmxvb3IodGhpcy56KSx0aGlzLnc9dGhpcy53PDA/TWF0aC5jZWlsKHRoaXMudyk6TWF0aC5mbG9vcih0aGlzLncpLHRoaXN9bmVnYXRlKCl7cmV0dXJuIHRoaXMueD0tdGhpcy54LHRoaXMueT0tdGhpcy55LHRoaXMuej0tdGhpcy56LHRoaXMudz0tdGhpcy53LHRoaXN9ZG90KHQpe3JldHVybiB0aGlzLngqdC54K3RoaXMueSp0LnkrdGhpcy56KnQueit0aGlzLncqdC53fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56K3RoaXMudyp0aGlzLnd9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLngqdGhpcy54K3RoaXMueSp0aGlzLnkrdGhpcy56KnRoaXMueit0aGlzLncqdGhpcy53KX1tYW5oYXR0YW5MZW5ndGgoKXtyZXR1cm4gTWF0aC5hYnModGhpcy54KStNYXRoLmFicyh0aGlzLnkpK01hdGguYWJzKHRoaXMueikrTWF0aC5hYnModGhpcy53KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpcy53Kz0odC53LXRoaXMudykqZSx0aGlzfWxlcnBWZWN0b3JzKHQsZSxpKXtyZXR1cm4gdGhpcy54PXQueCsoZS54LXQueCkqaSx0aGlzLnk9dC55KyhlLnktdC55KSppLHRoaXMuej10LnorKGUuei10LnopKmksdGhpcy53PXQudysoZS53LXQudykqaSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMueiYmdC53PT09dGhpcy53fWZyb21BcnJheSh0LGU9MCl7cmV0dXJuIHRoaXMueD10W2VdLHRoaXMueT10W2UrMV0sdGhpcy56PXRbZSsyXSx0aGlzLnc9dFtlKzNdLHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7cmV0dXJuIHRbZV09dGhpcy54LHRbZSsxXT10aGlzLnksdFtlKzJdPXRoaXMueix0W2UrM109dGhpcy53LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yNDogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXMudz10LmdldFcoZSksdGhpc31yYW5kb20oKXtyZXR1cm4gdGhpcy54PU1hdGgucmFuZG9tKCksdGhpcy55PU1hdGgucmFuZG9tKCksdGhpcy56PU1hdGgucmFuZG9tKCksdGhpcy53PU1hdGgucmFuZG9tKCksdGhpc30qW1N5bWJvbC5pdGVyYXRvcl0oKXt5aWVsZCB0aGlzLngseWllbGQgdGhpcy55LHlpZWxkIHRoaXMueix5aWVsZCB0aGlzLnd9fTthci5wcm90b3R5cGUuaXNWZWN0b3I0PSEwO3ZhciBXYT1jbGFzcyBleHRlbmRzIEVwe2NvbnN0cnVjdG9yKHQsZSxpPXt9KXtzdXBlcigpLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9MSx0aGlzLnNjaXNzb3I9bmV3IGFyKDAsMCx0LGUpLHRoaXMuc2Npc3NvclRlc3Q9ITEsdGhpcy52aWV3cG9ydD1uZXcgYXIoMCwwLHQsZSksdGhpcy50ZXh0dXJlPW5ldyBIbyh2b2lkIDAsaS5tYXBwaW5nLGkud3JhcFMsaS53cmFwVCxpLm1hZ0ZpbHRlcixpLm1pbkZpbHRlcixpLmZvcm1hdCxpLnR5cGUsaS5hbmlzb3Ryb3B5LGkuZW5jb2RpbmcpLHRoaXMudGV4dHVyZS5pc1JlbmRlclRhcmdldFRleHR1cmU9ITAsdGhpcy50ZXh0dXJlLmltYWdlPXt3aWR0aDp0LGhlaWdodDplLGRlcHRoOjF9LHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09aS5nZW5lcmF0ZU1pcG1hcHMmJmkuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5pbnRlcm5hbEZvcm1hdD12b2lkIDAhPT1pLmludGVybmFsRm9ybWF0P2kuaW50ZXJuYWxGb3JtYXQ6bnVsbCx0aGlzLnRleHR1cmUubWluRmlsdGVyPXZvaWQgMCE9PWkubWluRmlsdGVyP2kubWluRmlsdGVyOkdzLHRoaXMuZGVwdGhCdWZmZXI9dm9pZCAwPT09aS5kZXB0aEJ1ZmZlcnx8aS5kZXB0aEJ1ZmZlcix0aGlzLnN0ZW5jaWxCdWZmZXI9dm9pZCAwIT09aS5zdGVuY2lsQnVmZmVyJiZpLnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dm9pZCAwIT09aS5kZXB0aFRleHR1cmU/aS5kZXB0aFRleHR1cmU6bnVsbH1zZXRUZXh0dXJlKHQpe3QuaW1hZ2U9e3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0LGRlcHRoOnRoaXMuZGVwdGh9LHRoaXMudGV4dHVyZT10fXNldFNpemUodCxlLGk9MSl7KHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKSYmKHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMuZGVwdGg9aSx0aGlzLnRleHR1cmUuaW1hZ2Uud2lkdGg9dCx0aGlzLnRleHR1cmUuaW1hZ2UuaGVpZ2h0PWUsdGhpcy50ZXh0dXJlLmltYWdlLmRlcHRoPWksdGhpcy5kaXNwb3NlKCkpLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0LGUpLHRoaXMuc2Npc3Nvci5zZXQoMCwwLHQsZSl9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy53aWR0aD10LndpZHRoLHRoaXMuaGVpZ2h0PXQuaGVpZ2h0LHRoaXMuZGVwdGg9dC5kZXB0aCx0aGlzLnZpZXdwb3J0LmNvcHkodC52aWV3cG9ydCksdGhpcy50ZXh0dXJlPXQudGV4dHVyZS5jbG9uZSgpLHRoaXMudGV4dHVyZS5pbWFnZT1PYmplY3QuYXNzaWduKHt9LHQudGV4dHVyZS5pbWFnZSksdGhpcy5kZXB0aEJ1ZmZlcj10LmRlcHRoQnVmZmVyLHRoaXMuc3RlbmNpbEJ1ZmZlcj10LnN0ZW5jaWxCdWZmZXIsdGhpcy5kZXB0aFRleHR1cmU9dC5kZXB0aFRleHR1cmUsdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07V2EucHJvdG90eXBlLmlzV2ViR0xSZW5kZXJUYXJnZXQ9ITAsY2xhc3MgZXh0ZW5kcyBXYXtjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIodCxlKTtsZXQgcj10aGlzLnRleHR1cmU7dGhpcy50ZXh0dXJlPVtdO2ZvcihsZXQgbz0wO288aTtvKyspdGhpcy50ZXh0dXJlW29dPXIuY2xvbmUoKX1zZXRTaXplKHQsZSxpPTEpe2lmKHRoaXMud2lkdGghPT10fHx0aGlzLmhlaWdodCE9PWV8fHRoaXMuZGVwdGghPT1pKXt0aGlzLndpZHRoPXQsdGhpcy5oZWlnaHQ9ZSx0aGlzLmRlcHRoPWk7Zm9yKGxldCByPTAsbz10aGlzLnRleHR1cmUubGVuZ3RoO3I8bztyKyspdGhpcy50ZXh0dXJlW3JdLmltYWdlLndpZHRoPXQsdGhpcy50ZXh0dXJlW3JdLmltYWdlLmhlaWdodD1lLHRoaXMudGV4dHVyZVtyXS5pbWFnZS5kZXB0aD1pO3RoaXMuZGlzcG9zZSgpfXJldHVybiB0aGlzLnZpZXdwb3J0LnNldCgwLDAsdCxlKSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0LGUpLHRoaXN9Y29weSh0KXt0aGlzLmRpc3Bvc2UoKSx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5oZWlnaHQ9dC5oZWlnaHQsdGhpcy5kZXB0aD10LmRlcHRoLHRoaXMudmlld3BvcnQuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLnNjaXNzb3Iuc2V0KDAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSx0aGlzLmRlcHRoQnVmZmVyPXQuZGVwdGhCdWZmZXIsdGhpcy5zdGVuY2lsQnVmZmVyPXQuc3RlbmNpbEJ1ZmZlcix0aGlzLmRlcHRoVGV4dHVyZT10LmRlcHRoVGV4dHVyZSx0aGlzLnRleHR1cmUubGVuZ3RoPTA7Zm9yKGxldCBlPTAsaT10LnRleHR1cmUubGVuZ3RoO2U8aTtlKyspdGhpcy50ZXh0dXJlW2VdPXQudGV4dHVyZVtlXS5jbG9uZSgpO3JldHVybiB0aGlzfX0ucHJvdG90eXBlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM9ITA7dmFyIFhTPWNsYXNzIGV4dGVuZHMgV2F7Y29uc3RydWN0b3IodCxlLGk9e30pe3N1cGVyKHQsZSxpKSx0aGlzLnNhbXBsZXM9NCx0aGlzLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5PXZvaWQgMD09PWkuaWdub3JlRGVwdGh8fGkuaWdub3JlRGVwdGgsdGhpcy51c2VSZW5kZXJUb1RleHR1cmU9dm9pZCAwIT09aS51c2VSZW5kZXJUb1RleHR1cmUmJmkudXNlUmVuZGVyVG9UZXh0dXJlLHRoaXMudXNlUmVuZGVyYnVmZmVyPSExPT09dGhpcy51c2VSZW5kZXJUb1RleHR1cmV9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weS5jYWxsKHRoaXMsdCksdGhpcy5zYW1wbGVzPXQuc2FtcGxlcyx0aGlzLnVzZVJlbmRlclRvVGV4dHVyZT10LnVzZVJlbmRlclRvVGV4dHVyZSx0aGlzLnVzZVJlbmRlcmJ1ZmZlcj10LnVzZVJlbmRlcmJ1ZmZlcix0aGlzfX07WFMucHJvdG90eXBlLmlzV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldD0hMDt2YXIgcXM9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj0xKXt0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXJ9c3RhdGljIHNsZXJwKHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlF1YXRlcm5pb246IFN0YXRpYyAuc2xlcnAoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgcW0uc2xlcnBRdWF0ZXJuaW9ucyggcWEsIHFiLCB0ICkgaW5zdGVhZC4iKSxpLnNsZXJwUXVhdGVybmlvbnModCxlLHIpfXN0YXRpYyBzbGVycEZsYXQodCxlLGkscixvLHMsYSl7bGV0IGw9aVtyKzBdLGM9aVtyKzFdLHU9aVtyKzJdLGQ9aVtyKzNdLHA9b1tzKzBdLGg9b1tzKzFdLGY9b1tzKzJdLG09b1tzKzNdO2lmKDA9PT1hKXJldHVybiB0W2UrMF09bCx0W2UrMV09Yyx0W2UrMl09dSx2b2lkKHRbZSszXT1kKTtpZigxPT09YSlyZXR1cm4gdFtlKzBdPXAsdFtlKzFdPWgsdFtlKzJdPWYsdm9pZCh0W2UrM109bSk7aWYoZCE9PW18fGwhPT1wfHxjIT09aHx8dSE9PWYpe2xldCB4PTEtYSxnPWwqcCtjKmgrdSpmK2QqbSxiPWc+PTA/MTotMSxEPTEtZypnO2lmKEQ+TnVtYmVyLkVQU0lMT04pe2xldCBrPU1hdGguc3FydChEKSxaPU1hdGguYXRhbjIoayxnKmIpO3g9TWF0aC5zaW4oeCpaKS9rLGE9TWF0aC5zaW4oYSpaKS9rfWxldCBUPWEqYjtpZihsPWwqeCtwKlQsYz1jKngraCpULHU9dSp4K2YqVCxkPWQqeCttKlQseD09PTEtYSl7bGV0IGs9MS9NYXRoLnNxcnQobCpsK2MqYyt1KnUrZCpkKTtsKj1rLGMqPWssdSo9ayxkKj1rfX10W2VdPWwsdFtlKzFdPWMsdFtlKzJdPXUsdFtlKzNdPWR9c3RhdGljIG11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQsZSxpLHIsbyxzKXtsZXQgYT1pW3JdLGw9aVtyKzFdLGM9aVtyKzJdLHU9aVtyKzNdLGQ9b1tzXSxwPW9bcysxXSxoPW9bcysyXSxmPW9bcyszXTtyZXR1cm4gdFtlXT1hKmYrdSpkK2wqaC1jKnAsdFtlKzFdPWwqZit1KnArYypkLWEqaCx0W2UrMl09YypmK3UqaCthKnAtbCpkLHRbZSszXT11KmYtYSpkLWwqcC1jKmgsdH1nZXQgeCgpe3JldHVybiB0aGlzLl94fXNldCB4KHQpe3RoaXMuX3g9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IHkoKXtyZXR1cm4gdGhpcy5feX1zZXQgeSh0KXt0aGlzLl95PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB6KCl7cmV0dXJuIHRoaXMuX3p9c2V0IHoodCl7dGhpcy5fej10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgdygpe3JldHVybiB0aGlzLl93fXNldCB3KHQpe3RoaXMuX3c9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9c2V0KHQsZSxpLHIpe3JldHVybiB0aGlzLl94PXQsdGhpcy5feT1lLHRoaXMuX3o9aSx0aGlzLl93PXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fdyl9Y29weSh0KXtyZXR1cm4gdGhpcy5feD10LngsdGhpcy5feT10LnksdGhpcy5fej10LnosdGhpcy5fdz10LncsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2V0RnJvbUV1bGVyKHQsZSl7aWYoIXR8fCF0LmlzRXVsZXIpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgbm93IGV4cGVjdHMgYW4gRXVsZXIgcm90YXRpb24gcmF0aGVyIHRoYW4gYSBWZWN0b3IzIGFuZCBvcmRlci4iKTtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll9vcmRlcixhPU1hdGguY29zLGw9TWF0aC5zaW4sYz1hKGkvMiksdT1hKHIvMiksZD1hKG8vMikscD1sKGkvMiksaD1sKHIvMiksZj1sKG8vMik7c3dpdGNoKHMpe2Nhc2UiWFlaIjp0aGlzLl94PXAqdSpkK2MqaCpmLHRoaXMuX3k9YypoKmQtcCp1KmYsdGhpcy5fej1jKnUqZitwKmgqZCx0aGlzLl93PWMqdSpkLXAqaCpmO2JyZWFrO2Nhc2UiWVhaIjp0aGlzLl94PXAqdSpkK2MqaCpmLHRoaXMuX3k9YypoKmQtcCp1KmYsdGhpcy5fej1jKnUqZi1wKmgqZCx0aGlzLl93PWMqdSpkK3AqaCpmO2JyZWFrO2Nhc2UiWlhZIjp0aGlzLl94PXAqdSpkLWMqaCpmLHRoaXMuX3k9YypoKmQrcCp1KmYsdGhpcy5fej1jKnUqZitwKmgqZCx0aGlzLl93PWMqdSpkLXAqaCpmO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl94PXAqdSpkLWMqaCpmLHRoaXMuX3k9YypoKmQrcCp1KmYsdGhpcy5fej1jKnUqZi1wKmgqZCx0aGlzLl93PWMqdSpkK3AqaCpmO2JyZWFrO2Nhc2UiWVpYIjp0aGlzLl94PXAqdSpkK2MqaCpmLHRoaXMuX3k9YypoKmQrcCp1KmYsdGhpcy5fej1jKnUqZi1wKmgqZCx0aGlzLl93PWMqdSpkLXAqaCpmO2JyZWFrO2Nhc2UiWFpZIjp0aGlzLl94PXAqdSpkLWMqaCpmLHRoaXMuX3k9YypoKmQtcCp1KmYsdGhpcy5fej1jKnUqZitwKmgqZCx0aGlzLl93PWMqdSpkK3AqaCpmO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAuc2V0RnJvbUV1bGVyKCkgZW5jb3VudGVyZWQgYW4gdW5rbm93biBvcmRlcjogIitzKX1yZXR1cm4hMSE9PWUmJnRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21BeGlzQW5nbGUodCxlKXtsZXQgaT1lLzIscj1NYXRoLnNpbihpKTtyZXR1cm4gdGhpcy5feD10Lngqcix0aGlzLl95PXQueSpyLHRoaXMuX3o9dC56KnIsdGhpcy5fdz1NYXRoLmNvcyhpKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUm90YXRpb25NYXRyaXgodCl7bGV0IGU9dC5lbGVtZW50cyxpPWVbMF0scj1lWzRdLG89ZVs4XSxzPWVbMV0sYT1lWzVdLGw9ZVs5XSxjPWVbMl0sdT1lWzZdLGQ9ZVsxMF0scD1pK2ErZDtpZihwPjApe2xldCBoPS41L01hdGguc3FydChwKzEpO3RoaXMuX3c9LjI1L2gsdGhpcy5feD0odS1sKSpoLHRoaXMuX3k9KG8tYykqaCx0aGlzLl96PShzLXIpKmh9ZWxzZSBpZihpPmEmJmk+ZCl7bGV0IGg9MipNYXRoLnNxcnQoMStpLWEtZCk7dGhpcy5fdz0odS1sKS9oLHRoaXMuX3g9LjI1KmgsdGhpcy5feT0ocitzKS9oLHRoaXMuX3o9KG8rYykvaH1lbHNlIGlmKGE+ZCl7bGV0IGg9MipNYXRoLnNxcnQoMSthLWktZCk7dGhpcy5fdz0oby1jKS9oLHRoaXMuX3g9KHIrcykvaCx0aGlzLl95PS4yNSpoLHRoaXMuX3o9KGwrdSkvaH1lbHNle2xldCBoPTIqTWF0aC5zcXJ0KDErZC1pLWEpO3RoaXMuX3c9KHMtcikvaCx0aGlzLl94PShvK2MpL2gsdGhpcy5feT0obCt1KS9oLHRoaXMuX3o9LjI1Kmh9cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Vbml0VmVjdG9ycyh0LGUpe2xldCBpPXQuZG90KGUpKzE7cmV0dXJuIGk8TnVtYmVyLkVQU0lMT04/KGk9MCxNYXRoLmFicyh0LngpPk1hdGguYWJzKHQueik/KHRoaXMuX3g9LXQueSx0aGlzLl95PXQueCx0aGlzLl96PTAsdGhpcy5fdz1pKToodGhpcy5feD0wLHRoaXMuX3k9LXQueix0aGlzLl96PXQueSx0aGlzLl93PWkpKToodGhpcy5feD10LnkqZS56LXQueiplLnksdGhpcy5feT10LnoqZS54LXQueCplLnosdGhpcy5fej10LngqZS55LXQueSplLngsdGhpcy5fdz1pKSx0aGlzLm5vcm1hbGl6ZSgpfWFuZ2xlVG8odCl7cmV0dXJuIDIqTWF0aC5hY29zKE1hdGguYWJzKEdhKHRoaXMuZG90KHQpLC0xLDEpKSl9cm90YXRlVG93YXJkcyh0LGUpe2xldCBpPXRoaXMuYW5nbGVUbyh0KTtpZigwPT09aSlyZXR1cm4gdGhpcztsZXQgcj1NYXRoLm1pbigxLGUvaSk7cmV0dXJuIHRoaXMuc2xlcnAodCxyKSx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDAsMCwwLDEpfWludmVydCgpe3JldHVybiB0aGlzLmNvbmp1Z2F0ZSgpfWNvbmp1Z2F0ZSgpe3JldHVybiB0aGlzLl94Kj0tMSx0aGlzLl95Kj0tMSx0aGlzLl96Kj0tMSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31kb3QodCl7cmV0dXJuIHRoaXMuX3gqdC5feCt0aGlzLl95KnQuX3krdGhpcy5feip0Ll96K3RoaXMuX3cqdC5fd31sZW5ndGhTcSgpe3JldHVybiB0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3d9bGVuZ3RoKCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLl94KnRoaXMuX3grdGhpcy5feSp0aGlzLl95K3RoaXMuX3oqdGhpcy5feit0aGlzLl93KnRoaXMuX3cpfW5vcm1hbGl6ZSgpe2xldCB0PXRoaXMubGVuZ3RoKCk7cmV0dXJuIDA9PT10Pyh0aGlzLl94PTAsdGhpcy5feT0wLHRoaXMuX3o9MCx0aGlzLl93PTEpOih0PTEvdCx0aGlzLl94PXRoaXMuX3gqdCx0aGlzLl95PXRoaXMuX3kqdCx0aGlzLl96PXRoaXMuX3oqdCx0aGlzLl93PXRoaXMuX3cqdCksdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9bXVsdGlwbHkodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5RdWF0ZXJuaW9uOiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseVF1YXRlcm5pb25zKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5UXVhdGVybmlvbnModCxlKSk6dGhpcy5tdWx0aXBseVF1YXRlcm5pb25zKHRoaXMsdCl9cHJlbXVsdGlwbHkodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlRdWF0ZXJuaW9ucyh0LHRoaXMpfW11bHRpcGx5UXVhdGVybmlvbnModCxlKXtsZXQgaT10Ll94LHI9dC5feSxvPXQuX3oscz10Ll93LGE9ZS5feCxsPWUuX3ksYz1lLl96LHU9ZS5fdztyZXR1cm4gdGhpcy5feD1pKnUrcyphK3IqYy1vKmwsdGhpcy5feT1yKnUrcypsK28qYS1pKmMsdGhpcy5fej1vKnUrcypjK2kqbC1yKmEsdGhpcy5fdz1zKnUtaSphLXIqbC1vKmMsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnAodCxlKXtpZigwPT09ZSlyZXR1cm4gdGhpcztpZigxPT09ZSlyZXR1cm4gdGhpcy5jb3B5KHQpO2xldCBpPXRoaXMuX3gscj10aGlzLl95LG89dGhpcy5feixzPXRoaXMuX3csYT1zKnQuX3craSp0Ll94K3IqdC5feStvKnQuX3o7aWYoYTwwPyh0aGlzLl93PS10Ll93LHRoaXMuX3g9LXQuX3gsdGhpcy5feT0tdC5feSx0aGlzLl96PS10Ll96LGE9LWEpOnRoaXMuY29weSh0KSxhPj0xKXJldHVybiB0aGlzLl93PXMsdGhpcy5feD1pLHRoaXMuX3k9cix0aGlzLl96PW8sdGhpcztsZXQgbD0xLWEqYTtpZihsPD1OdW1iZXIuRVBTSUxPTil7bGV0IGg9MS1lO3JldHVybiB0aGlzLl93PWgqcytlKnRoaXMuX3csdGhpcy5feD1oKmkrZSp0aGlzLl94LHRoaXMuX3k9aCpyK2UqdGhpcy5feSx0aGlzLl96PWgqbytlKnRoaXMuX3osdGhpcy5ub3JtYWxpemUoKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31sZXQgYz1NYXRoLnNxcnQobCksdT1NYXRoLmF0YW4yKGMsYSksZD1NYXRoLnNpbigoMS1lKSp1KS9jLHA9TWF0aC5zaW4oZSp1KS9jO3JldHVybiB0aGlzLl93PXMqZCt0aGlzLl93KnAsdGhpcy5feD1pKmQrdGhpcy5feCpwLHRoaXMuX3k9cipkK3RoaXMuX3kqcCx0aGlzLl96PW8qZCt0aGlzLl96KnAsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9c2xlcnBRdWF0ZXJuaW9ucyh0LGUsaSl7cmV0dXJuIHRoaXMuY29weSh0KS5zbGVycChlLGkpfXJhbmRvbSgpe2xldCB0PU1hdGgucmFuZG9tKCksZT1NYXRoLnNxcnQoMS10KSxpPU1hdGguc3FydCh0KSxyPTIqTWF0aC5QSSpNYXRoLnJhbmRvbSgpLG89MipNYXRoLlBJKk1hdGgucmFuZG9tKCk7cmV0dXJuIHRoaXMuc2V0KGUqTWF0aC5jb3MociksaSpNYXRoLnNpbihvKSxpKk1hdGguY29zKG8pLGUqTWF0aC5zaW4ocikpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fdz09PXRoaXMuX3d9ZnJvbUFycmF5KHQsZT0wKXtyZXR1cm4gdGhpcy5feD10W2VdLHRoaXMuX3k9dFtlKzFdLHRoaXMuX3o9dFtlKzJdLHRoaXMuX3c9dFtlKzNdLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXRvQXJyYXkodD1bXSxlPTApe3JldHVybiB0W2VdPXRoaXMuX3gsdFtlKzFdPXRoaXMuX3ksdFtlKzJdPXRoaXMuX3osdFtlKzNdPXRoaXMuX3csdH1mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSl7cmV0dXJuIHRoaXMuX3g9dC5nZXRYKGUpLHRoaXMuX3k9dC5nZXRZKGUpLHRoaXMuX3o9dC5nZXRaKGUpLHRoaXMuX3c9dC5nZXRXKGUpLHRoaXN9X29uQ2hhbmdlKHQpe3JldHVybiB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrPXQsdGhpc31fb25DaGFuZ2VDYWxsYmFjaygpe319O3FzLnByb3RvdHlwZS5pc1F1YXRlcm5pb249ITA7dmFyIGllPWNsYXNze2NvbnN0cnVjdG9yKHQ9MCxlPTAsaT0wKXt0aGlzLng9dCx0aGlzLnk9ZSx0aGlzLno9aX1zZXQodCxlLGkpe3JldHVybiB2b2lkIDA9PT1pJiYoaT10aGlzLnopLHRoaXMueD10LHRoaXMueT1lLHRoaXMuej1pLHRoaXN9c2V0U2NhbGFyKHQpe3JldHVybiB0aGlzLng9dCx0aGlzLnk9dCx0aGlzLno9dCx0aGlzfXNldFgodCl7cmV0dXJuIHRoaXMueD10LHRoaXN9c2V0WSh0KXtyZXR1cm4gdGhpcy55PXQsdGhpc31zZXRaKHQpe3JldHVybiB0aGlzLno9dCx0aGlzfXNldENvbXBvbmVudCh0LGUpe3N3aXRjaCh0KXtjYXNlIDA6dGhpcy54PWU7YnJlYWs7Y2FzZSAxOnRoaXMueT1lO2JyZWFrO2Nhc2UgMjp0aGlzLno9ZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW5kZXggaXMgb3V0IG9mIHJhbmdlOiAiK3QpfXJldHVybiB0aGlzfWdldENvbXBvbmVudCh0KXtzd2l0Y2godCl7Y2FzZSAwOnJldHVybiB0aGlzLng7Y2FzZSAxOnJldHVybiB0aGlzLnk7Y2FzZSAyOnJldHVybiB0aGlzLno7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImluZGV4IGlzIG91dCBvZiByYW5nZTogIit0KX19Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy54LHRoaXMueSx0aGlzLnopfWNvcHkodCl7cmV0dXJuIHRoaXMueD10LngsdGhpcy55PXQueSx0aGlzLno9dC56LHRoaXN9YWRkKHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmFkZCgpIG5vdyBvbmx5IGFjY2VwdHMgb25lIGFyZ3VtZW50LiBVc2UgLmFkZFZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuYWRkVmVjdG9ycyh0LGUpKToodGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpcy56Kz10LnosdGhpcyl9YWRkU2NhbGFyKHQpe3JldHVybiB0aGlzLngrPXQsdGhpcy55Kz10LHRoaXMueis9dCx0aGlzfWFkZFZlY3RvcnModCxlKXtyZXR1cm4gdGhpcy54PXQueCtlLngsdGhpcy55PXQueStlLnksdGhpcy56PXQueitlLnosdGhpc31hZGRTY2FsZWRWZWN0b3IodCxlKXtyZXR1cm4gdGhpcy54Kz10LngqZSx0aGlzLnkrPXQueSplLHRoaXMueis9dC56KmUsdGhpc31zdWIodCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuc3ViKCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAuc3ViVmVjdG9ycyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5zdWJWZWN0b3JzKHQsZSkpOih0aGlzLngtPXQueCx0aGlzLnktPXQueSx0aGlzLnotPXQueix0aGlzKX1zdWJTY2FsYXIodCl7cmV0dXJuIHRoaXMueC09dCx0aGlzLnktPXQsdGhpcy56LT10LHRoaXN9c3ViVmVjdG9ycyh0LGUpe3JldHVybiB0aGlzLng9dC54LWUueCx0aGlzLnk9dC55LWUueSx0aGlzLno9dC56LWUueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlWZWN0b3JzKCBhLCBiICkgaW5zdGVhZC4iKSx0aGlzLm11bHRpcGx5VmVjdG9ycyh0LGUpKToodGhpcy54Kj10LngsdGhpcy55Kj10LnksdGhpcy56Kj10LnosdGhpcyl9bXVsdGlwbHlTY2FsYXIodCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpcy56Kj10LHRoaXN9bXVsdGlwbHlWZWN0b3JzKHQsZSl7cmV0dXJuIHRoaXMueD10LngqZS54LHRoaXMueT10LnkqZS55LHRoaXMuej10LnoqZS56LHRoaXN9YXBwbHlFdWxlcih0KXtyZXR1cm4gdCYmdC5pc0V1bGVyfHxjb25zb2xlLmVycm9yKCJUSFJFRS5WZWN0b3IzOiAuYXBwbHlFdWxlcigpIG5vdyBleHBlY3RzIGFuIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIiksdGhpcy5hcHBseVF1YXRlcm5pb24oTXVlLnNldEZyb21FdWxlcih0KSl9YXBwbHlBeGlzQW5nbGUodCxlKXtyZXR1cm4gdGhpcy5hcHBseVF1YXRlcm5pb24oTXVlLnNldEZyb21BeGlzQW5nbGUodCxlKSl9YXBwbHlNYXRyaXgzKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1szXSppK29bNl0qcix0aGlzLnk9b1sxXSplK29bNF0qaStvWzddKnIsdGhpcy56PW9bMl0qZStvWzVdKmkrb1s4XSpyLHRoaXN9YXBwbHlOb3JtYWxNYXRyaXgodCl7cmV0dXJuIHRoaXMuYXBwbHlNYXRyaXgzKHQpLm5vcm1hbGl6ZSgpfWFwcGx5TWF0cml4NCh0KXtsZXQgZT10aGlzLngsaT10aGlzLnkscj10aGlzLnosbz10LmVsZW1lbnRzLHM9MS8ob1szXSplK29bN10qaStvWzExXSpyK29bMTVdKTtyZXR1cm4gdGhpcy54PShvWzBdKmUrb1s0XSppK29bOF0qcitvWzEyXSkqcyx0aGlzLnk9KG9bMV0qZStvWzVdKmkrb1s5XSpyK29bMTNdKSpzLHRoaXMuej0ob1syXSplK29bNl0qaStvWzEwXSpyK29bMTRdKSpzLHRoaXN9YXBwbHlRdWF0ZXJuaW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQueCxzPXQueSxhPXQueixsPXQudyxjPWwqZStzKnItYSppLHU9bCppK2EqZS1vKnIsZD1sKnIrbyppLXMqZSxwPS1vKmUtcyppLWEqcjtyZXR1cm4gdGhpcy54PWMqbCtwKi1vK3UqLWEtZCotcyx0aGlzLnk9dSpsK3AqLXMrZCotby1jKi1hLHRoaXMuej1kKmwrcCotYStjKi1zLXUqLW8sdGhpc31wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0Lm1hdHJpeFdvcmxkSW52ZXJzZSkuYXBwbHlNYXRyaXg0KHQucHJvamVjdGlvbk1hdHJpeCl9dW5wcm9qZWN0KHQpe3JldHVybiB0aGlzLmFwcGx5TWF0cml4NCh0LnByb2plY3Rpb25NYXRyaXhJbnZlcnNlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCl9dHJhbnNmb3JtRGlyZWN0aW9uKHQpe2xldCBlPXRoaXMueCxpPXRoaXMueSxyPXRoaXMueixvPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMueD1vWzBdKmUrb1s0XSppK29bOF0qcix0aGlzLnk9b1sxXSplK29bNV0qaStvWzldKnIsdGhpcy56PW9bMl0qZStvWzZdKmkrb1sxMF0qcix0aGlzLm5vcm1hbGl6ZSgpfWRpdmlkZSh0KXtyZXR1cm4gdGhpcy54Lz10LngsdGhpcy55Lz10LnksdGhpcy56Lz10LnosdGhpc31kaXZpZGVTY2FsYXIodCl7cmV0dXJuIHRoaXMubXVsdGlwbHlTY2FsYXIoMS90KX1taW4odCl7cmV0dXJuIHRoaXMueD1NYXRoLm1pbih0aGlzLngsdC54KSx0aGlzLnk9TWF0aC5taW4odGhpcy55LHQueSksdGhpcy56PU1hdGgubWluKHRoaXMueix0LnopLHRoaXN9bWF4KHQpe3JldHVybiB0aGlzLng9TWF0aC5tYXgodGhpcy54LHQueCksdGhpcy55PU1hdGgubWF4KHRoaXMueSx0LnkpLHRoaXMuej1NYXRoLm1heCh0aGlzLnosdC56KSx0aGlzfWNsYW1wKHQsZSl7cmV0dXJuIHRoaXMueD1NYXRoLm1heCh0LngsTWF0aC5taW4oZS54LHRoaXMueCkpLHRoaXMueT1NYXRoLm1heCh0LnksTWF0aC5taW4oZS55LHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LnosTWF0aC5taW4oZS56LHRoaXMueikpLHRoaXN9Y2xhbXBTY2FsYXIodCxlKXtyZXR1cm4gdGhpcy54PU1hdGgubWF4KHQsTWF0aC5taW4oZSx0aGlzLngpKSx0aGlzLnk9TWF0aC5tYXgodCxNYXRoLm1pbihlLHRoaXMueSkpLHRoaXMuej1NYXRoLm1heCh0LE1hdGgubWluKGUsdGhpcy56KSksdGhpc31jbGFtcExlbmd0aCh0LGUpe2xldCBpPXRoaXMubGVuZ3RoKCk7cmV0dXJuIHRoaXMuZGl2aWRlU2NhbGFyKGl8fDEpLm11bHRpcGx5U2NhbGFyKE1hdGgubWF4KHQsTWF0aC5taW4oZSxpKSkpfWZsb29yKCl7cmV0dXJuIHRoaXMueD1NYXRoLmZsb29yKHRoaXMueCksdGhpcy55PU1hdGguZmxvb3IodGhpcy55KSx0aGlzLno9TWF0aC5mbG9vcih0aGlzLnopLHRoaXN9Y2VpbCgpe3JldHVybiB0aGlzLng9TWF0aC5jZWlsKHRoaXMueCksdGhpcy55PU1hdGguY2VpbCh0aGlzLnkpLHRoaXMuej1NYXRoLmNlaWwodGhpcy56KSx0aGlzfXJvdW5kKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJvdW5kKHRoaXMueCksdGhpcy55PU1hdGgucm91bmQodGhpcy55KSx0aGlzLno9TWF0aC5yb3VuZCh0aGlzLnopLHRoaXN9cm91bmRUb1plcm8oKXtyZXR1cm4gdGhpcy54PXRoaXMueDwwP01hdGguY2VpbCh0aGlzLngpOk1hdGguZmxvb3IodGhpcy54KSx0aGlzLnk9dGhpcy55PDA/TWF0aC5jZWlsKHRoaXMueSk6TWF0aC5mbG9vcih0aGlzLnkpLHRoaXMuej10aGlzLno8MD9NYXRoLmNlaWwodGhpcy56KTpNYXRoLmZsb29yKHRoaXMueiksdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy54PS10aGlzLngsdGhpcy55PS10aGlzLnksdGhpcy56PS10aGlzLnosdGhpc31kb3QodCl7cmV0dXJuIHRoaXMueCp0LngrdGhpcy55KnQueSt0aGlzLnoqdC56fWxlbmd0aFNxKCl7cmV0dXJuIHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSt0aGlzLnoqdGhpcy56fWxlbmd0aCgpe3JldHVybiBNYXRoLnNxcnQodGhpcy54KnRoaXMueCt0aGlzLnkqdGhpcy55K3RoaXMueip0aGlzLnopfW1hbmhhdHRhbkxlbmd0aCgpe3JldHVybiBNYXRoLmFicyh0aGlzLngpK01hdGguYWJzKHRoaXMueSkrTWF0aC5hYnModGhpcy56KX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5kaXZpZGVTY2FsYXIodGhpcy5sZW5ndGgoKXx8MSl9c2V0TGVuZ3RoKHQpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHQpfWxlcnAodCxlKXtyZXR1cm4gdGhpcy54Kz0odC54LXRoaXMueCkqZSx0aGlzLnkrPSh0LnktdGhpcy55KSplLHRoaXMueis9KHQuei10aGlzLnopKmUsdGhpc31sZXJwVmVjdG9ycyh0LGUsaSl7cmV0dXJuIHRoaXMueD10LngrKGUueC10LngpKmksdGhpcy55PXQueSsoZS55LXQueSkqaSx0aGlzLno9dC56KyhlLnotdC56KSppLHRoaXN9Y3Jvc3ModCxlKXtyZXR1cm4gdm9pZCAwIT09ZT8oY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuY3Jvc3MoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5jcm9zc1ZlY3RvcnMoIGEsIGIgKSBpbnN0ZWFkLiIpLHRoaXMuY3Jvc3NWZWN0b3JzKHQsZSkpOnRoaXMuY3Jvc3NWZWN0b3JzKHRoaXMsdCl9Y3Jvc3NWZWN0b3JzKHQsZSl7bGV0IGk9dC54LHI9dC55LG89dC56LHM9ZS54LGE9ZS55LGw9ZS56O3JldHVybiB0aGlzLng9cipsLW8qYSx0aGlzLnk9bypzLWkqbCx0aGlzLno9aSphLXIqcyx0aGlzfXByb2plY3RPblZlY3Rvcih0KXtsZXQgZT10Lmxlbmd0aFNxKCk7aWYoMD09PWUpcmV0dXJuIHRoaXMuc2V0KDAsMCwwKTtsZXQgaT10LmRvdCh0aGlzKS9lO3JldHVybiB0aGlzLmNvcHkodCkubXVsdGlwbHlTY2FsYXIoaSl9cHJvamVjdE9uUGxhbmUodCl7cmV0dXJuIE9qLmNvcHkodGhpcykucHJvamVjdE9uVmVjdG9yKHQpLHRoaXMuc3ViKE9qKX1yZWZsZWN0KHQpe3JldHVybiB0aGlzLnN1YihPai5jb3B5KHQpLm11bHRpcGx5U2NhbGFyKDIqdGhpcy5kb3QodCkpKX1hbmdsZVRvKHQpe2xldCBlPU1hdGguc3FydCh0aGlzLmxlbmd0aFNxKCkqdC5sZW5ndGhTcSgpKTtpZigwPT09ZSlyZXR1cm4gTWF0aC5QSS8yO2xldCBpPXRoaXMuZG90KHQpL2U7cmV0dXJuIE1hdGguYWNvcyhHYShpLC0xLDEpKX1kaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLnNxcnQodGhpcy5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VUb1NxdWFyZWQodCl7bGV0IGU9dGhpcy54LXQueCxpPXRoaXMueS10Lnkscj10aGlzLnotdC56O3JldHVybiBlKmUraSppK3Iqcn1tYW5oYXR0YW5EaXN0YW5jZVRvKHQpe3JldHVybiBNYXRoLmFicyh0aGlzLngtdC54KStNYXRoLmFicyh0aGlzLnktdC55KStNYXRoLmFicyh0aGlzLnotdC56KX1zZXRGcm9tU3BoZXJpY2FsKHQpe3JldHVybiB0aGlzLnNldEZyb21TcGhlcmljYWxDb29yZHModC5yYWRpdXMsdC5waGksdC50aGV0YSl9c2V0RnJvbVNwaGVyaWNhbENvb3Jkcyh0LGUsaSl7bGV0IHI9TWF0aC5zaW4oZSkqdDtyZXR1cm4gdGhpcy54PXIqTWF0aC5zaW4oaSksdGhpcy55PU1hdGguY29zKGUpKnQsdGhpcy56PXIqTWF0aC5jb3MoaSksdGhpc31zZXRGcm9tQ3lsaW5kcmljYWwodCl7cmV0dXJuIHRoaXMuc2V0RnJvbUN5bGluZHJpY2FsQ29vcmRzKHQucmFkaXVzLHQudGhldGEsdC55KX1zZXRGcm9tQ3lsaW5kcmljYWxDb29yZHModCxlLGkpe3JldHVybiB0aGlzLng9dCpNYXRoLnNpbihlKSx0aGlzLnk9aSx0aGlzLno9dCpNYXRoLmNvcyhlKSx0aGlzfXNldEZyb21NYXRyaXhQb3NpdGlvbih0KXtsZXQgZT10LmVsZW1lbnRzO3JldHVybiB0aGlzLng9ZVsxMl0sdGhpcy55PWVbMTNdLHRoaXMuej1lWzE0XSx0aGlzfXNldEZyb21NYXRyaXhTY2FsZSh0KXtsZXQgZT10aGlzLnNldEZyb21NYXRyaXhDb2x1bW4odCwwKS5sZW5ndGgoKSxpPXRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LDEpLmxlbmd0aCgpLHI9dGhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMikubGVuZ3RoKCk7cmV0dXJuIHRoaXMueD1lLHRoaXMueT1pLHRoaXMuej1yLHRoaXN9c2V0RnJvbU1hdHJpeENvbHVtbih0LGUpe3JldHVybiB0aGlzLmZyb21BcnJheSh0LmVsZW1lbnRzLDQqZSl9c2V0RnJvbU1hdHJpeDNDb2x1bW4odCxlKXtyZXR1cm4gdGhpcy5mcm9tQXJyYXkodC5lbGVtZW50cywzKmUpfWVxdWFscyh0KXtyZXR1cm4gdC54PT09dGhpcy54JiZ0Lnk9PT10aGlzLnkmJnQuej09PXRoaXMuen1mcm9tQXJyYXkodCxlPTApe3JldHVybiB0aGlzLng9dFtlXSx0aGlzLnk9dFtlKzFdLHRoaXMuej10W2UrMl0sdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLngsdFtlKzFdPXRoaXMueSx0W2UrMl09dGhpcy56LHR9ZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUsaSl7cmV0dXJuIHZvaWQgMCE9PWkmJmNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogb2Zmc2V0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMueD10LmdldFgoZSksdGhpcy55PXQuZ2V0WShlKSx0aGlzLno9dC5nZXRaKGUpLHRoaXN9cmFuZG9tKCl7cmV0dXJuIHRoaXMueD1NYXRoLnJhbmRvbSgpLHRoaXMueT1NYXRoLnJhbmRvbSgpLHRoaXMuej1NYXRoLnJhbmRvbSgpLHRoaXN9cmFuZG9tRGlyZWN0aW9uKCl7bGV0IHQ9MiooTWF0aC5yYW5kb20oKS0uNSksZT1NYXRoLnJhbmRvbSgpKk1hdGguUEkqMixpPU1hdGguc3FydCgxLXQqKjIpO3JldHVybiB0aGlzLng9aSpNYXRoLmNvcyhlKSx0aGlzLnk9aSpNYXRoLnNpbihlKSx0aGlzLno9dCx0aGlzfSpbU3ltYm9sLml0ZXJhdG9yXSgpe3lpZWxkIHRoaXMueCx5aWVsZCB0aGlzLnkseWllbGQgdGhpcy56fX07aWUucHJvdG90eXBlLmlzVmVjdG9yMz0hMDt2YXIgT2o9bmV3IGllLE11ZT1uZXcgcXMsVGw9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaWUoMS8wLDEvMCwxLzApLGU9bmV3IGllKC0xLzAsLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tQXJyYXkodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5sZW5ndGg7bDxjO2wrPTMpe2xldCB1PXRbbF0sZD10W2wrMV0scD10W2wrMl07dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCl7bGV0IGU9MS8wLGk9MS8wLHI9MS8wLG89LTEvMCxzPS0xLzAsYT0tMS8wO2ZvcihsZXQgbD0wLGM9dC5jb3VudDtsPGM7bCsrKXtsZXQgdT10LmdldFgobCksZD10LmdldFkobCkscD10LmdldFoobCk7dTxlJiYoZT11KSxkPGkmJihpPWQpLHA8ciYmKHI9cCksdT5vJiYobz11KSxkPnMmJihzPWQpLHA+YSYmKGE9cCl9cmV0dXJuIHRoaXMubWluLnNldChlLGksciksdGhpcy5tYXguc2V0KG8scyxhKSx0aGlzfXNldEZyb21Qb2ludHModCl7dGhpcy5tYWtlRW1wdHkoKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdGhpcy5leHBhbmRCeVBvaW50KHRbZV0pO3JldHVybiB0aGlzfXNldEZyb21DZW50ZXJBbmRTaXplKHQsZSl7bGV0IGk9TGcuY29weShlKS5tdWx0aXBseVNjYWxhciguNSk7cmV0dXJuIHRoaXMubWluLmNvcHkodCkuc3ViKGkpLHRoaXMubWF4LmNvcHkodCkuYWRkKGkpLHRoaXN9c2V0RnJvbU9iamVjdCh0LGU9ITEpe3JldHVybiB0aGlzLm1ha2VFbXB0eSgpLHRoaXMuZXhwYW5kQnlPYmplY3QodCxlKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9dGhpcy5taW4uej0xLzAsdGhpcy5tYXgueD10aGlzLm1heC55PXRoaXMubWF4Lno9LTEvMCx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5tYXgueDx0aGlzLm1pbi54fHx0aGlzLm1heC55PHRoaXMubWluLnl8fHRoaXMubWF4Lno8dGhpcy5taW4uen1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCwwKTp0LmFkZFZlY3RvcnModGhpcy5taW4sdGhpcy5tYXgpLm11bHRpcGx5U2NhbGFyKC41KX1nZXRTaXplKHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90LnNldCgwLDAsMCk6dC5zdWJWZWN0b3JzKHRoaXMubWF4LHRoaXMubWluKX1leHBhbmRCeVBvaW50KHQpe3JldHVybiB0aGlzLm1pbi5taW4odCksdGhpcy5tYXgubWF4KHQpLHRoaXN9ZXhwYW5kQnlWZWN0b3IodCl7cmV0dXJuIHRoaXMubWluLnN1Yih0KSx0aGlzLm1heC5hZGQodCksdGhpc31leHBhbmRCeVNjYWxhcih0KXtyZXR1cm4gdGhpcy5taW4uYWRkU2NhbGFyKC10KSx0aGlzLm1heC5hZGRTY2FsYXIodCksdGhpc31leHBhbmRCeU9iamVjdCh0LGU9ITEpe3QudXBkYXRlV29ybGRNYXRyaXgoITEsITEpO2xldCBpPXQuZ2VvbWV0cnk7aWYodm9pZCAwIT09aSlpZihlJiZudWxsIT1pLmF0dHJpYnV0ZXMmJnZvaWQgMCE9PWkuYXR0cmlidXRlcy5wb3NpdGlvbil7bGV0IG89aS5hdHRyaWJ1dGVzLnBvc2l0aW9uO2ZvcihsZXQgcz0wLGE9by5jb3VudDtzPGE7cysrKUxnLmZyb21CdWZmZXJBdHRyaWJ1dGUobyxzKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5leHBhbmRCeVBvaW50KExnKX1lbHNlIG51bGw9PT1pLmJvdW5kaW5nQm94JiZpLmNvbXB1dGVCb3VuZGluZ0JveCgpLGtqLmNvcHkoaS5ib3VuZGluZ0JveCksa2ouYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMudW5pb24oa2opO2xldCByPXQuY2hpbGRyZW47Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXRoaXMuZXhwYW5kQnlPYmplY3QocltvXSxlKTtyZXR1cm4gdGhpc31jb250YWluc1BvaW50KHQpe3JldHVybiEodC54PHRoaXMubWluLnh8fHQueD50aGlzLm1heC54fHx0Lnk8dGhpcy5taW4ueXx8dC55PnRoaXMubWF4Lnl8fHQuejx0aGlzLm1pbi56fHx0Lno+dGhpcy5tYXgueil9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4LnkmJnRoaXMubWluLno8PXQubWluLnomJnQubWF4Lno8PXRoaXMubWF4Lnp9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSwodC56LXRoaXMubWluLnopLyh0aGlzLm1heC56LXRoaXMubWluLnopKX1pbnRlcnNlY3RzQm94KHQpe3JldHVybiEodC5tYXgueDx0aGlzLm1pbi54fHx0Lm1pbi54PnRoaXMubWF4Lnh8fHQubWF4Lnk8dGhpcy5taW4ueXx8dC5taW4ueT50aGlzLm1heC55fHx0Lm1heC56PHRoaXMubWluLnp8fHQubWluLno+dGhpcy5tYXgueil9aW50ZXJzZWN0c1NwaGVyZSh0KXtyZXR1cm4gdGhpcy5jbGFtcFBvaW50KHQuY2VudGVyLExnKSxMZy5kaXN0YW5jZVRvU3F1YXJlZCh0LmNlbnRlcik8PXQucmFkaXVzKnQucmFkaXVzfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZSxpO3JldHVybiB0Lm5vcm1hbC54PjA/KGU9dC5ub3JtYWwueCp0aGlzLm1pbi54LGk9dC5ub3JtYWwueCp0aGlzLm1heC54KTooZT10Lm5vcm1hbC54KnRoaXMubWF4LngsaT10Lm5vcm1hbC54KnRoaXMubWluLngpLHQubm9ybWFsLnk+MD8oZSs9dC5ub3JtYWwueSp0aGlzLm1pbi55LGkrPXQubm9ybWFsLnkqdGhpcy5tYXgueSk6KGUrPXQubm9ybWFsLnkqdGhpcy5tYXgueSxpKz10Lm5vcm1hbC55KnRoaXMubWluLnkpLHQubm9ybWFsLno+MD8oZSs9dC5ub3JtYWwueip0aGlzLm1pbi56LGkrPXQubm9ybWFsLnoqdGhpcy5tYXgueik6KGUrPXQubm9ybWFsLnoqdGhpcy5tYXgueixpKz10Lm5vcm1hbC56KnRoaXMubWluLnopLGU8PS10LmNvbnN0YW50JiZpPj0tdC5jb25zdGFudH1pbnRlcnNlY3RzVHJpYW5nbGUodCl7aWYodGhpcy5pc0VtcHR5KCkpcmV0dXJuITE7dGhpcy5nZXRDZW50ZXIoQVMpLE1PLnN1YlZlY3RvcnModGhpcy5tYXgsQVMpLEh5LnN1YlZlY3RvcnModC5hLEFTKSxVeS5zdWJWZWN0b3JzKHQuYixBUyksenkuc3ViVmVjdG9ycyh0LmMsQVMpLGFmLnN1YlZlY3RvcnMoVXksSHkpLGxmLnN1YlZlY3RvcnMoenksVXkpLEJnLnN1YlZlY3RvcnMoSHksenkpO2xldCBlPVswLC1hZi56LGFmLnksMCwtbGYueixsZi55LDAsLUJnLnosQmcueSxhZi56LDAsLWFmLngsbGYueiwwLC1sZi54LEJnLnosMCwtQmcueCwtYWYueSxhZi54LDAsLWxmLnksbGYueCwwLC1CZy55LEJnLngsMF07cmV0dXJuISghRmooZSxIeSxVeSx6eSxNTyl8fChlPVsxLDAsMCwwLDEsMCwwLDAsMV0sIUZqKGUsSHksVXksenksTU8pKSkmJih3Ty5jcm9zc1ZlY3RvcnMoYWYsbGYpLGU9W3dPLngsd08ueSx3Ty56XSxGaihlLEh5LFV5LHp5LE1PKSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gTGcuY29weSh0KS5jbGFtcCh0aGlzLm1pbix0aGlzLm1heCkuc3ViKHQpLmxlbmd0aCgpfWdldEJvdW5kaW5nU3BoZXJlKHQpe3JldHVybiB0aGlzLmdldENlbnRlcih0LmNlbnRlciksdC5yYWRpdXM9LjUqdGhpcy5nZXRTaXplKExnKS5sZW5ndGgoKSx0fWludGVyc2VjdCh0KXtyZXR1cm4gdGhpcy5taW4ubWF4KHQubWluKSx0aGlzLm1heC5taW4odC5tYXgpLHRoaXMuaXNFbXB0eSgpJiZ0aGlzLm1ha2VFbXB0eSgpLHRoaXN9dW5pb24odCl7cmV0dXJuIHRoaXMubWluLm1pbih0Lm1pbiksdGhpcy5tYXgubWF4KHQubWF4KSx0aGlzfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCl8fChicFswXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFsxXS5zZXQodGhpcy5taW4ueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxicFsyXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFszXS5zZXQodGhpcy5taW4ueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxicFs0XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFs1XS5zZXQodGhpcy5tYXgueCx0aGlzLm1pbi55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSxicFs2XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWluLnopLmFwcGx5TWF0cml4NCh0KSxicFs3XS5zZXQodGhpcy5tYXgueCx0aGlzLm1heC55LHRoaXMubWF4LnopLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldEZyb21Qb2ludHMoYnApKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5taW4uYWRkKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5taW4uZXF1YWxzKHRoaXMubWluKSYmdC5tYXguZXF1YWxzKHRoaXMubWF4KX19O1RsLnByb3RvdHlwZS5pc0JveDM9ITA7dmFyIGJwPVtuZXcgaWUsbmV3IGllLG5ldyBpZSxuZXcgaWUsbmV3IGllLG5ldyBpZSxuZXcgaWUsbmV3IGllXSxMZz1uZXcgaWUsa2o9bmV3IFRsLEh5PW5ldyBpZSxVeT1uZXcgaWUsenk9bmV3IGllLGFmPW5ldyBpZSxsZj1uZXcgaWUsQmc9bmV3IGllLEFTPW5ldyBpZSxNTz1uZXcgaWUsd089bmV3IGllLFZnPW5ldyBpZTtmdW5jdGlvbiBGaihuLHQsZSxpLHIpe2ZvcihsZXQgbz0wLHM9bi5sZW5ndGgtMztvPD1zO28rPTMpe1ZnLmZyb21BcnJheShuLG8pO2xldCBhPXIueCpNYXRoLmFicyhWZy54KStyLnkqTWF0aC5hYnMoVmcueSkrci56Kk1hdGguYWJzKFZnLnopLGw9dC5kb3QoVmcpLGM9ZS5kb3QoVmcpLHU9aS5kb3QoVmcpO2lmKE1hdGgubWF4KC1NYXRoLm1heChsLGMsdSksTWF0aC5taW4obCxjLHUpKT5hKXJldHVybiExfXJldHVybiEwfXZhciB6OGU9bmV3IFRsLHd1ZT1uZXcgaWUsU089bmV3IGllLE5qPW5ldyBpZSx4Zj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBpZSxlPS0xKXt0aGlzLmNlbnRlcj10LHRoaXMucmFkaXVzPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMuY2VudGVyLmNvcHkodCksdGhpcy5yYWRpdXM9ZSx0aGlzfXNldEZyb21Qb2ludHModCxlKXtsZXQgaT10aGlzLmNlbnRlcjt2b2lkIDAhPT1lP2kuY29weShlKTp6OGUuc2V0RnJvbVBvaW50cyh0KS5nZXRDZW50ZXIoaSk7bGV0IHI9MDtmb3IobGV0IG89MCxzPXQubGVuZ3RoO288cztvKyspcj1NYXRoLm1heChyLGkuZGlzdGFuY2VUb1NxdWFyZWQodFtvXSkpO3JldHVybiB0aGlzLnJhZGl1cz1NYXRoLnNxcnQociksdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmNlbnRlci5jb3B5KHQuY2VudGVyKSx0aGlzLnJhZGl1cz10LnJhZGl1cyx0aGlzfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5yYWRpdXM8MH1tYWtlRW1wdHkoKXtyZXR1cm4gdGhpcy5jZW50ZXIuc2V0KDAsMCwwKSx0aGlzLnJhZGl1cz0tMSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD10aGlzLnJhZGl1cyp0aGlzLnJhZGl1c31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHQuZGlzdGFuY2VUbyh0aGlzLmNlbnRlciktdGhpcy5yYWRpdXN9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnJhZGl1cyt0LnJhZGl1cztyZXR1cm4gdC5jZW50ZXIuZGlzdGFuY2VUb1NxdWFyZWQodGhpcy5jZW50ZXIpPD1lKmV9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gdC5pbnRlcnNlY3RzU3BoZXJlKHRoaXMpfWludGVyc2VjdHNQbGFuZSh0KXtyZXR1cm4gTWF0aC5hYnModC5kaXN0YW5jZVRvUG9pbnQodGhpcy5jZW50ZXIpKTw9dGhpcy5yYWRpdXN9Y2xhbXBQb2ludCh0LGUpe2xldCBpPXRoaXMuY2VudGVyLmRpc3RhbmNlVG9TcXVhcmVkKHQpO3JldHVybiBlLmNvcHkodCksaT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyYmKGUuc3ViKHRoaXMuY2VudGVyKS5ub3JtYWxpemUoKSxlLm11bHRpcGx5U2NhbGFyKHRoaXMucmFkaXVzKS5hZGQodGhpcy5jZW50ZXIpKSxlfWdldEJvdW5kaW5nQm94KHQpe3JldHVybiB0aGlzLmlzRW1wdHkoKT8odC5tYWtlRW1wdHkoKSx0KToodC5zZXQodGhpcy5jZW50ZXIsdGhpcy5jZW50ZXIpLHQuZXhwYW5kQnlTY2FsYXIodGhpcy5yYWRpdXMpLHQpfWFwcGx5TWF0cml4NCh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMucmFkaXVzPXRoaXMucmFkaXVzKnQuZ2V0TWF4U2NhbGVPbkF4aXMoKSx0aGlzfXRyYW5zbGF0ZSh0KXtyZXR1cm4gdGhpcy5jZW50ZXIuYWRkKHQpLHRoaXN9ZXhwYW5kQnlQb2ludCh0KXtOai5zdWJWZWN0b3JzKHQsdGhpcy5jZW50ZXIpO2xldCBlPU5qLmxlbmd0aFNxKCk7aWYoZT50aGlzLnJhZGl1cyp0aGlzLnJhZGl1cyl7bGV0IGk9TWF0aC5zcXJ0KGUpLHI9LjUqKGktdGhpcy5yYWRpdXMpO3RoaXMuY2VudGVyLmFkZChOai5tdWx0aXBseVNjYWxhcihyL2kpKSx0aGlzLnJhZGl1cys9cn1yZXR1cm4gdGhpc311bmlvbih0KXtyZXR1cm4hMD09PXRoaXMuY2VudGVyLmVxdWFscyh0LmNlbnRlcik/U08uc2V0KDAsMCwxKS5tdWx0aXBseVNjYWxhcih0LnJhZGl1cyk6U08uc3ViVmVjdG9ycyh0LmNlbnRlcix0aGlzLmNlbnRlcikubm9ybWFsaXplKCkubXVsdGlwbHlTY2FsYXIodC5yYWRpdXMpLHRoaXMuZXhwYW5kQnlQb2ludCh3dWUuY29weSh0LmNlbnRlcikuYWRkKFNPKSksdGhpcy5leHBhbmRCeVBvaW50KHd1ZS5jb3B5KHQuY2VudGVyKS5zdWIoU08pKSx0aGlzfWVxdWFscyh0KXtyZXR1cm4gdC5jZW50ZXIuZXF1YWxzKHRoaXMuY2VudGVyKSYmdC5yYWRpdXM9PT10aGlzLnJhZGl1c31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX19LHhwPW5ldyBpZSxMaj1uZXcgaWUsRU89bmV3IGllLGNmPW5ldyBpZSxCaj1uZXcgaWUsVE89bmV3IGllLFZqPW5ldyBpZSxDZj1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBpZSxlPW5ldyBpZSgwLDAsLTEpKXt0aGlzLm9yaWdpbj10LHRoaXMuZGlyZWN0aW9uPWV9c2V0KHQsZSl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodCksdGhpcy5kaXJlY3Rpb24uY29weShlKSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMub3JpZ2luLmNvcHkodC5vcmlnaW4pLHRoaXMuZGlyZWN0aW9uLmNvcHkodC5kaXJlY3Rpb24pLHRoaXN9YXQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMuZGlyZWN0aW9uKS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy5vcmlnaW4pfWxvb2tBdCh0KXtyZXR1cm4gdGhpcy5kaXJlY3Rpb24uY29weSh0KS5zdWIodGhpcy5vcmlnaW4pLm5vcm1hbGl6ZSgpLHRoaXN9cmVjYXN0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5jb3B5KHRoaXMuYXQodCx4cCkpLHRoaXN9Y2xvc2VzdFBvaW50VG9Qb2ludCh0LGUpe2Uuc3ViVmVjdG9ycyh0LHRoaXMub3JpZ2luKTtsZXQgaT1lLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGk8MD9lLmNvcHkodGhpcy5vcmlnaW4pOmUuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoaSkuYWRkKHRoaXMub3JpZ2luKX1kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RhbmNlU3FUb1BvaW50KHQpKX1kaXN0YW5jZVNxVG9Qb2ludCh0KXtsZXQgZT14cC5zdWJWZWN0b3JzKHQsdGhpcy5vcmlnaW4pLmRvdCh0aGlzLmRpcmVjdGlvbik7cmV0dXJuIGU8MD90aGlzLm9yaWdpbi5kaXN0YW5jZVRvU3F1YXJlZCh0KTooeHAuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZSkuYWRkKHRoaXMub3JpZ2luKSx4cC5kaXN0YW5jZVRvU3F1YXJlZCh0KSl9ZGlzdGFuY2VTcVRvU2VnbWVudCh0LGUsaSxyKXtMai5jb3B5KHQpLmFkZChlKS5tdWx0aXBseVNjYWxhciguNSksRU8uY29weShlKS5zdWIodCkubm9ybWFsaXplKCksY2YuY29weSh0aGlzLm9yaWdpbikuc3ViKExqKTtsZXQgZCxwLGgsZixvPS41KnQuZGlzdGFuY2VUbyhlKSxzPS10aGlzLmRpcmVjdGlvbi5kb3QoRU8pLGE9Y2YuZG90KHRoaXMuZGlyZWN0aW9uKSxsPS1jZi5kb3QoRU8pLGM9Y2YubGVuZ3RoU3EoKSx1PU1hdGguYWJzKDEtcypzKTtpZih1PjApaWYoZD1zKmwtYSxwPXMqYS1sLGY9byp1LGQ+PTApaWYocD49LWYpaWYocDw9Zil7bGV0IG09MS91O2QqPW0scCo9bSxoPWQqKGQrcypwKzIqYSkrcCoocypkK3ArMipsKStjfWVsc2UgcD1vLGQ9TWF0aC5tYXgoMCwtKHMqcCthKSksaD0tZCpkK3AqKHArMipsKStjO2Vsc2UgcD0tbyxkPU1hdGgubWF4KDAsLShzKnArYSkpLGg9LWQqZCtwKihwKzIqbCkrYztlbHNlIHA8PS1mPyhkPU1hdGgubWF4KDAsLSgtcypvK2EpKSxwPWQ+MD8tbzpNYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksaD0tZCpkK3AqKHArMipsKStjKTpwPD1mPyhkPTAscD1NYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksaD1wKihwKzIqbCkrYyk6KGQ9TWF0aC5tYXgoMCwtKHMqbythKSkscD1kPjA/bzpNYXRoLm1pbihNYXRoLm1heCgtbywtbCksbyksaD0tZCpkK3AqKHArMipsKStjKTtlbHNlIHA9cz4wPy1vOm8sZD1NYXRoLm1heCgwLC0ocypwK2EpKSxoPS1kKmQrcCoocCsyKmwpK2M7cmV0dXJuIGkmJmkuY29weSh0aGlzLmRpcmVjdGlvbikubXVsdGlwbHlTY2FsYXIoZCkuYWRkKHRoaXMub3JpZ2luKSxyJiZyLmNvcHkoRU8pLm11bHRpcGx5U2NhbGFyKHApLmFkZChMaiksaH1pbnRlcnNlY3RTcGhlcmUodCxlKXt4cC5zdWJWZWN0b3JzKHQuY2VudGVyLHRoaXMub3JpZ2luKTtsZXQgaT14cC5kb3QodGhpcy5kaXJlY3Rpb24pLHI9eHAuZG90KHhwKS1pKmksbz10LnJhZGl1cyp0LnJhZGl1cztpZihyPm8pcmV0dXJuIG51bGw7bGV0IHM9TWF0aC5zcXJ0KG8tciksYT1pLXMsbD1pK3M7cmV0dXJuIGE8MCYmbDwwP251bGw6dGhpcy5hdChhPDA/bDphLGUpfWludGVyc2VjdHNTcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VTcVRvUG9pbnQodC5jZW50ZXIpPD10LnJhZGl1cyp0LnJhZGl1c31kaXN0YW5jZVRvUGxhbmUodCl7bGV0IGU9dC5ub3JtYWwuZG90KHRoaXMuZGlyZWN0aW9uKTtpZigwPT09ZSlyZXR1cm4gMD09PXQuZGlzdGFuY2VUb1BvaW50KHRoaXMub3JpZ2luKT8wOm51bGw7bGV0IGk9LSh0aGlzLm9yaWdpbi5kb3QodC5ub3JtYWwpK3QuY29uc3RhbnQpL2U7cmV0dXJuIGk+PTA/aTpudWxsfWludGVyc2VjdFBsYW5lKHQsZSl7bGV0IGk9dGhpcy5kaXN0YW5jZVRvUGxhbmUodCk7cmV0dXJuIG51bGw9PT1pP251bGw6dGhpcy5hdChpLGUpfWludGVyc2VjdHNQbGFuZSh0KXtsZXQgZT10LmRpc3RhbmNlVG9Qb2ludCh0aGlzLm9yaWdpbik7cmV0dXJuIDA9PT1lfHx0Lm5vcm1hbC5kb3QodGhpcy5kaXJlY3Rpb24pKmU8MH1pbnRlcnNlY3RCb3godCxlKXtsZXQgaSxyLG8scyxhLGwsYz0xL3RoaXMuZGlyZWN0aW9uLngsdT0xL3RoaXMuZGlyZWN0aW9uLnksZD0xL3RoaXMuZGlyZWN0aW9uLnoscD10aGlzLm9yaWdpbjtyZXR1cm4gYz49MD8oaT0odC5taW4ueC1wLngpKmMscj0odC5tYXgueC1wLngpKmMpOihpPSh0Lm1heC54LXAueCkqYyxyPSh0Lm1pbi54LXAueCkqYyksdT49MD8obz0odC5taW4ueS1wLnkpKnUscz0odC5tYXgueS1wLnkpKnUpOihvPSh0Lm1heC55LXAueSkqdSxzPSh0Lm1pbi55LXAueSkqdSksaT5zfHxvPnJ8fCgobz5pfHxpIT1pKSYmKGk9byksKHM8cnx8ciE9cikmJihyPXMpLGQ+PTA/KGE9KHQubWluLnotcC56KSpkLGw9KHQubWF4LnotcC56KSpkKTooYT0odC5tYXguei1wLnopKmQsbD0odC5taW4uei1wLnopKmQpLGk+bHx8YT5yKXx8KChhPml8fGkhPWkpJiYoaT1hKSwobDxyfHxyIT1yKSYmKHI9bCkscjwwKT9udWxsOnRoaXMuYXQoaT49MD9pOnIsZSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4gbnVsbCE9PXRoaXMuaW50ZXJzZWN0Qm94KHQseHApfWludGVyc2VjdFRyaWFuZ2xlKHQsZSxpLHIsbyl7Qmouc3ViVmVjdG9ycyhlLHQpLFRPLnN1YlZlY3RvcnMoaSx0KSxWai5jcm9zc1ZlY3RvcnMoQmosVE8pO2xldCBhLHM9dGhpcy5kaXJlY3Rpb24uZG90KFZqKTtpZihzPjApe2lmKHIpcmV0dXJuIG51bGw7YT0xfWVsc2V7aWYoIShzPDApKXJldHVybiBudWxsO2E9LTEscz0tc31jZi5zdWJWZWN0b3JzKHRoaXMub3JpZ2luLHQpO2xldCBsPWEqdGhpcy5kaXJlY3Rpb24uZG90KFRPLmNyb3NzVmVjdG9ycyhjZixUTykpO2lmKGw8MClyZXR1cm4gbnVsbDtsZXQgYz1hKnRoaXMuZGlyZWN0aW9uLmRvdChCai5jcm9zcyhjZikpO2lmKGM8MHx8bCtjPnMpcmV0dXJuIG51bGw7bGV0IHU9LWEqY2YuZG90KFZqKTtyZXR1cm4gdTwwP251bGw6dGhpcy5hdCh1L3Msbyl9YXBwbHlNYXRyaXg0KHQpe3JldHVybiB0aGlzLm9yaWdpbi5hcHBseU1hdHJpeDQodCksdGhpcy5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXN9ZXF1YWxzKHQpe3JldHVybiB0Lm9yaWdpbi5lcXVhbHModGhpcy5vcmlnaW4pJiZ0LmRpcmVjdGlvbi5lcXVhbHModGhpcy5kaXJlY3Rpb24pfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX0sUm49Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmVsZW1lbnRzPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSxhcmd1bWVudHMubGVuZ3RoPjAmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IHRoZSBjb25zdHJ1Y3RvciBubyBsb25nZXIgcmVhZHMgYXJndW1lbnRzLiB1c2UgLnNldCgpIGluc3RlYWQuIil9c2V0KHQsZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgpe2xldCBnPXRoaXMuZWxlbWVudHM7cmV0dXJuIGdbMF09dCxnWzRdPWUsZ1s4XT1pLGdbMTJdPXIsZ1sxXT1vLGdbNV09cyxnWzldPWEsZ1sxM109bCxnWzJdPWMsZ1s2XT11LGdbMTBdPWQsZ1sxNF09cCxnWzNdPWgsZ1s3XT1mLGdbMTFdPW0sZ1sxNV09eCx0aGlzfWlkZW50aXR5KCl7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDEpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IFJuKS5mcm9tQXJyYXkodGhpcy5lbGVtZW50cyl9Y29weSh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztyZXR1cm4gZVswXT1pWzBdLGVbMV09aVsxXSxlWzJdPWlbMl0sZVszXT1pWzNdLGVbNF09aVs0XSxlWzVdPWlbNV0sZVs2XT1pWzZdLGVbN109aVs3XSxlWzhdPWlbOF0sZVs5XT1pWzldLGVbMTBdPWlbMTBdLGVbMTFdPWlbMTFdLGVbMTJdPWlbMTJdLGVbMTNdPWlbMTNdLGVbMTRdPWlbMTRdLGVbMTVdPWlbMTVdLHRoaXN9Y29weVBvc2l0aW9uKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10LmVsZW1lbnRzO3JldHVybiBlWzEyXT1pWzEyXSxlWzEzXT1pWzEzXSxlWzE0XT1pWzE0XSx0aGlzfXNldEZyb21NYXRyaXgzKHQpe2xldCBlPXQuZWxlbWVudHM7cmV0dXJuIHRoaXMuc2V0KGVbMF0sZVszXSxlWzZdLDAsZVsxXSxlWzRdLGVbN10sMCxlWzJdLGVbNV0sZVs4XSwwLDAsMCwwLDEpLHRoaXN9ZXh0cmFjdEJhc2lzKHQsZSxpKXtyZXR1cm4gdC5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMCksZS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMSksaS5zZXRGcm9tTWF0cml4Q29sdW1uKHRoaXMsMiksdGhpc31tYWtlQmFzaXModCxlLGkpe3JldHVybiB0aGlzLnNldCh0LngsZS54LGkueCwwLHQueSxlLnksaS55LDAsdC56LGUueixpLnosMCwwLDAsMCwxKSx0aGlzfWV4dHJhY3RSb3RhdGlvbih0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cyxyPTEvankuc2V0RnJvbU1hdHJpeENvbHVtbih0LDApLmxlbmd0aCgpLG89MS9qeS5zZXRGcm9tTWF0cml4Q29sdW1uKHQsMSkubGVuZ3RoKCkscz0xL2p5LnNldEZyb21NYXRyaXhDb2x1bW4odCwyKS5sZW5ndGgoKTtyZXR1cm4gZVswXT1pWzBdKnIsZVsxXT1pWzFdKnIsZVsyXT1pWzJdKnIsZVszXT0wLGVbNF09aVs0XSpvLGVbNV09aVs1XSpvLGVbNl09aVs2XSpvLGVbN109MCxlWzhdPWlbOF0qcyxlWzldPWlbOV0qcyxlWzEwXT1pWzEwXSpzLGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSx0aGlzfW1ha2VSb3RhdGlvbkZyb21FdWxlcih0KXt0JiZ0LmlzRXVsZXJ8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuIik7bGV0IGU9dGhpcy5lbGVtZW50cyxpPXQueCxyPXQueSxvPXQueixzPU1hdGguY29zKGkpLGE9TWF0aC5zaW4oaSksbD1NYXRoLmNvcyhyKSxjPU1hdGguc2luKHIpLHU9TWF0aC5jb3MobyksZD1NYXRoLnNpbihvKTtpZigiWFlaIj09PXQub3JkZXIpe2xldCBwPXMqdSxoPXMqZCxmPWEqdSxtPWEqZDtlWzBdPWwqdSxlWzRdPS1sKmQsZVs4XT1jLGVbMV09aCtmKmMsZVs1XT1wLW0qYyxlWzldPS1hKmwsZVsyXT1tLXAqYyxlWzZdPWYraCpjLGVbMTBdPXMqbH1lbHNlIGlmKCJZWFoiPT09dC5vcmRlcil7bGV0IHA9bCp1LGg9bCpkLGY9Yyp1LG09YypkO2VbMF09cCttKmEsZVs0XT1mKmEtaCxlWzhdPXMqYyxlWzFdPXMqZCxlWzVdPXMqdSxlWzldPS1hLGVbMl09aCphLWYsZVs2XT1tK3AqYSxlWzEwXT1zKmx9ZWxzZSBpZigiWlhZIj09PXQub3JkZXIpe2xldCBwPWwqdSxoPWwqZCxmPWMqdSxtPWMqZDtlWzBdPXAtbSphLGVbNF09LXMqZCxlWzhdPWYraCphLGVbMV09aCtmKmEsZVs1XT1zKnUsZVs5XT1tLXAqYSxlWzJdPS1zKmMsZVs2XT1hLGVbMTBdPXMqbH1lbHNlIGlmKCJaWVgiPT09dC5vcmRlcil7bGV0IHA9cyp1LGg9cypkLGY9YSp1LG09YSpkO2VbMF09bCp1LGVbNF09ZipjLWgsZVs4XT1wKmMrbSxlWzFdPWwqZCxlWzVdPW0qYytwLGVbOV09aCpjLWYsZVsyXT0tYyxlWzZdPWEqbCxlWzEwXT1zKmx9ZWxzZSBpZigiWVpYIj09PXQub3JkZXIpe2xldCBwPXMqbCxoPXMqYyxmPWEqbCxtPWEqYztlWzBdPWwqdSxlWzRdPW0tcCpkLGVbOF09ZipkK2gsZVsxXT1kLGVbNV09cyp1LGVbOV09LWEqdSxlWzJdPS1jKnUsZVs2XT1oKmQrZixlWzEwXT1wLW0qZH1lbHNlIGlmKCJYWlkiPT09dC5vcmRlcil7bGV0IHA9cypsLGg9cypjLGY9YSpsLG09YSpjO2VbMF09bCp1LGVbNF09LWQsZVs4XT1jKnUsZVsxXT1wKmQrbSxlWzVdPXMqdSxlWzldPWgqZC1mLGVbMl09ZipkLWgsZVs2XT1hKnUsZVsxMF09bSpkK3B9cmV0dXJuIGVbM109MCxlWzddPTAsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLHRoaXN9bWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMuY29tcG9zZShqOGUsdCxHOGUpfWxvb2tBdCh0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gd2wuc3ViVmVjdG9ycyh0LGUpLDA9PT13bC5sZW5ndGhTcSgpJiYod2wuej0xKSx3bC5ub3JtYWxpemUoKSx1Zi5jcm9zc1ZlY3RvcnMoaSx3bCksMD09PXVmLmxlbmd0aFNxKCkmJigxPT09TWF0aC5hYnMoaS56KT93bC54Kz0xZS00OndsLnorPTFlLTQsd2wubm9ybWFsaXplKCksdWYuY3Jvc3NWZWN0b3JzKGksd2wpKSx1Zi5ub3JtYWxpemUoKSxETy5jcm9zc1ZlY3RvcnMod2wsdWYpLHJbMF09dWYueCxyWzRdPURPLngscls4XT13bC54LHJbMV09dWYueSxyWzVdPURPLnkscls5XT13bC55LHJbMl09dWYueixyWzZdPURPLnosclsxMF09d2wueix0aGlzfW11bHRpcGx5KHQsZSl7cmV0dXJuIHZvaWQgMCE9PWU/KGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5KCkgbm93IG9ubHkgYWNjZXB0cyBvbmUgYXJndW1lbnQuIFVzZSAubXVsdGlwbHlNYXRyaWNlcyggYSwgYiApIGluc3RlYWQuIiksdGhpcy5tdWx0aXBseU1hdHJpY2VzKHQsZSkpOnRoaXMubXVsdGlwbHlNYXRyaWNlcyh0aGlzLHQpfXByZW11bHRpcGx5KHQpe3JldHVybiB0aGlzLm11bHRpcGx5TWF0cmljZXModCx0aGlzKX1tdWx0aXBseU1hdHJpY2VzKHQsZSl7bGV0IGk9dC5lbGVtZW50cyxyPWUuZWxlbWVudHMsbz10aGlzLmVsZW1lbnRzLHM9aVswXSxhPWlbNF0sbD1pWzhdLGM9aVsxMl0sdT1pWzFdLGQ9aVs1XSxwPWlbOV0saD1pWzEzXSxmPWlbMl0sbT1pWzZdLHg9aVsxMF0sZz1pWzE0XSxiPWlbM10sRD1pWzddLFQ9aVsxMV0saz1pWzE1XSxaPXJbMF0sej1yWzRdLGZlPXJbOF0sdWU9clsxMl0saGU9clsxXSx3PXJbNV0sRj1yWzldLHE9clsxM10sSz1yWzJdLGRlPXJbNl0sWT1yWzEwXSxhZT1yWzE0XSxsZT1yWzNdLEllPXJbN10sdmU9clsxMV0sRGU9clsxNV07cmV0dXJuIG9bMF09cypaK2EqaGUrbCpLK2MqbGUsb1s0XT1zKnorYSp3K2wqZGUrYypJZSxvWzhdPXMqZmUrYSpGK2wqWStjKnZlLG9bMTJdPXMqdWUrYSpxK2wqYWUrYypEZSxvWzFdPXUqWitkKmhlK3AqSytoKmxlLG9bNV09dSp6K2QqdytwKmRlK2gqSWUsb1s5XT11KmZlK2QqRitwKlkraCp2ZSxvWzEzXT11KnVlK2QqcStwKmFlK2gqRGUsb1syXT1mKlorbSpoZSt4KksrZypsZSxvWzZdPWYqeittKncreCpkZStnKkllLG9bMTBdPWYqZmUrbSpGK3gqWStnKnZlLG9bMTRdPWYqdWUrbSpxK3gqYWUrZypEZSxvWzNdPWIqWitEKmhlK1QqSytrKmxlLG9bN109Yip6K0QqdytUKmRlK2sqSWUsb1sxMV09YipmZStEKkYrVCpZK2sqdmUsb1sxNV09Yip1ZStEKnErVCphZStrKkRlLHRoaXN9bXVsdGlwbHlTY2FsYXIodCl7bGV0IGU9dGhpcy5lbGVtZW50cztyZXR1cm4gZVswXSo9dCxlWzRdKj10LGVbOF0qPXQsZVsxMl0qPXQsZVsxXSo9dCxlWzVdKj10LGVbOV0qPXQsZVsxM10qPXQsZVsyXSo9dCxlWzZdKj10LGVbMTBdKj10LGVbMTRdKj10LGVbM10qPXQsZVs3XSo9dCxlWzExXSo9dCxlWzE1XSo9dCx0aGlzfWRldGVybWluYW50KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzRdLHI9dFs4XSxvPXRbMTJdLHM9dFsxXSxhPXRbNV0sbD10WzldLGM9dFsxM10sdT10WzJdLGQ9dFs2XSxwPXRbMTBdLGg9dFsxNF07cmV0dXJuIHRbM10qKCtvKmwqZC1yKmMqZC1vKmEqcCtpKmMqcCtyKmEqaC1pKmwqaCkrdFs3XSooK2UqbCpoLWUqYypwK28qcypwLXIqcypoK3IqYyp1LW8qbCp1KSt0WzExXSooK2UqYypkLWUqYSpoLW8qcypkK2kqcypoK28qYSp1LWkqYyp1KSt0WzE1XSooLXIqYSp1LWUqbCpkK2UqYSpwK3IqcypkLWkqcypwK2kqbCp1KX10cmFuc3Bvc2UoKXtsZXQgZSx0PXRoaXMuZWxlbWVudHM7cmV0dXJuIGU9dFsxXSx0WzFdPXRbNF0sdFs0XT1lLGU9dFsyXSx0WzJdPXRbOF0sdFs4XT1lLGU9dFs2XSx0WzZdPXRbOV0sdFs5XT1lLGU9dFszXSx0WzNdPXRbMTJdLHRbMTJdPWUsZT10WzddLHRbN109dFsxM10sdFsxM109ZSxlPXRbMTFdLHRbMTFdPXRbMTRdLHRbMTRdPWUsdGhpc31zZXRQb3NpdGlvbih0LGUsaSl7bGV0IHI9dGhpcy5lbGVtZW50cztyZXR1cm4gdC5pc1ZlY3RvcjM/KHJbMTJdPXQueCxyWzEzXT10LnksclsxNF09dC56KTooclsxMl09dCxyWzEzXT1lLHJbMTRdPWkpLHRoaXN9aW52ZXJ0KCl7bGV0IHQ9dGhpcy5lbGVtZW50cyxlPXRbMF0saT10WzFdLHI9dFsyXSxvPXRbM10scz10WzRdLGE9dFs1XSxsPXRbNl0sYz10WzddLHU9dFs4XSxkPXRbOV0scD10WzEwXSxoPXRbMTFdLGY9dFsxMl0sbT10WzEzXSx4PXRbMTRdLGc9dFsxNV0sYj1kKngqYy1tKnAqYyttKmwqaC1hKngqaC1kKmwqZythKnAqZyxEPWYqcCpjLXUqeCpjLWYqbCpoK3MqeCpoK3UqbCpnLXMqcCpnLFQ9dSptKmMtZipkKmMrZiphKmgtcyptKmgtdSphKmcrcypkKmcsaz1mKmQqbC11Km0qbC1mKmEqcCtzKm0qcCt1KmEqeC1zKmQqeCxaPWUqYitpKkQrcipUK28qaztpZigwPT09WilyZXR1cm4gdGhpcy5zZXQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7bGV0IHo9MS9aO3JldHVybiB0WzBdPWIqeix0WzFdPShtKnAqby1kKngqby1tKnIqaCtpKngqaCtkKnIqZy1pKnAqZykqeix0WzJdPShhKngqby1tKmwqbyttKnIqYy1pKngqYy1hKnIqZytpKmwqZykqeix0WzNdPShkKmwqby1hKnAqby1kKnIqYytpKnAqYythKnIqaC1pKmwqaCkqeix0WzRdPUQqeix0WzVdPSh1Kngqby1mKnAqbytmKnIqaC1lKngqaC11KnIqZytlKnAqZykqeix0WzZdPShmKmwqby1zKngqby1mKnIqYytlKngqYytzKnIqZy1lKmwqZykqeix0WzddPShzKnAqby11Kmwqbyt1KnIqYy1lKnAqYy1zKnIqaCtlKmwqaCkqeix0WzhdPVQqeix0WzldPShmKmQqby11Km0qby1mKmkqaCtlKm0qaCt1KmkqZy1lKmQqZykqeix0WzEwXT0ocyptKm8tZiphKm8rZippKmMtZSptKmMtcyppKmcrZSphKmcpKnosdFsxMV09KHUqYSpvLXMqZCpvLXUqaSpjK2UqZCpjK3MqaSpoLWUqYSpoKSp6LHRbMTJdPWsqeix0WzEzXT0odSptKnItZipkKnIrZippKnAtZSptKnAtdSppKngrZSpkKngpKnosdFsxNF09KGYqYSpyLXMqbSpyLWYqaSpsK2UqbSpsK3MqaSp4LWUqYSp4KSp6LHRbMTVdPShzKmQqci11KmEqcit1KmkqbC1lKmQqbC1zKmkqcCtlKmEqcCkqeix0aGlzfXNjYWxlKHQpe2xldCBlPXRoaXMuZWxlbWVudHMsaT10Lngscj10Lnksbz10Lno7cmV0dXJuIGVbMF0qPWksZVs0XSo9cixlWzhdKj1vLGVbMV0qPWksZVs1XSo9cixlWzldKj1vLGVbMl0qPWksZVs2XSo9cixlWzEwXSo9byxlWzNdKj1pLGVbN10qPXIsZVsxMV0qPW8sdGhpc31nZXRNYXhTY2FsZU9uQXhpcygpe2xldCB0PXRoaXMuZWxlbWVudHM7cmV0dXJuIE1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSx0WzRdKnRbNF0rdFs1XSp0WzVdK3RbNl0qdFs2XSx0WzhdKnRbOF0rdFs5XSp0WzldK3RbMTBdKnRbMTBdKSl9bWFrZVRyYW5zbGF0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5zZXQoMSwwLDAsdCwwLDEsMCxlLDAsMCwxLGksMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25YKHQpe2xldCBlPU1hdGguY29zKHQpLGk9TWF0aC5zaW4odCk7cmV0dXJuIHRoaXMuc2V0KDEsMCwwLDAsMCxlLC1pLDAsMCxpLGUsMCwwLDAsMCwxKSx0aGlzfW1ha2VSb3RhdGlvblkodCl7bGV0IGU9TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gdGhpcy5zZXQoZSwwLGksMCwwLDEsMCwwLC1pLDAsZSwwLDAsMCwwLDEpLHRoaXN9bWFrZVJvdGF0aW9uWih0KXtsZXQgZT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpO3JldHVybiB0aGlzLnNldChlLC1pLDAsMCxpLGUsMCwwLDAsMCwxLDAsMCwwLDAsMSksdGhpc31tYWtlUm90YXRpb25BeGlzKHQsZSl7bGV0IGk9TWF0aC5jb3MoZSkscj1NYXRoLnNpbihlKSxvPTEtaSxzPXQueCxhPXQueSxsPXQueixjPW8qcyx1PW8qYTtyZXR1cm4gdGhpcy5zZXQoYypzK2ksYyphLXIqbCxjKmwrciphLDAsYyphK3IqbCx1KmEraSx1KmwtcipzLDAsYypsLXIqYSx1KmwrcipzLG8qbCpsK2ksMCwwLDAsMCwxKSx0aGlzfW1ha2VTY2FsZSh0LGUsaSl7cmV0dXJuIHRoaXMuc2V0KHQsMCwwLDAsMCxlLDAsMCwwLDAsaSwwLDAsMCwwLDEpLHRoaXN9bWFrZVNoZWFyKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5zZXQoMSxpLG8sMCx0LDEscywwLGUsciwxLDAsMCwwLDAsMSksdGhpc31jb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ZS5feCxzPWUuX3ksYT1lLl96LGw9ZS5fdyxjPW8rbyx1PXMrcyxkPWErYSxwPW8qYyxoPW8qdSxmPW8qZCxtPXMqdSx4PXMqZCxnPWEqZCxiPWwqYyxEPWwqdSxUPWwqZCxrPWkueCxaPWkueSx6PWkuejtyZXR1cm4gclswXT0oMS0obStnKSkqayxyWzFdPShoK1QpKmssclsyXT0oZi1EKSprLHJbM109MCxyWzRdPShoLVQpKloscls1XT0oMS0ocCtnKSkqWixyWzZdPSh4K2IpKloscls3XT0wLHJbOF09KGYrRCkqeixyWzldPSh4LWIpKnosclsxMF09KDEtKHArbSkpKnosclsxMV09MCxyWzEyXT10LngsclsxM109dC55LHJbMTRdPXQueixyWzE1XT0xLHRoaXN9ZGVjb21wb3NlKHQsZSxpKXtsZXQgcj10aGlzLmVsZW1lbnRzLG89ankuc2V0KHJbMF0sclsxXSxyWzJdKS5sZW5ndGgoKSxzPWp5LnNldChyWzRdLHJbNV0scls2XSkubGVuZ3RoKCksYT1qeS5zZXQocls4XSxyWzldLHJbMTBdKS5sZW5ndGgoKTt0aGlzLmRldGVybWluYW50KCk8MCYmKG89LW8pLHQueD1yWzEyXSx0Lnk9clsxM10sdC56PXJbMTRdLGx1LmNvcHkodGhpcyk7bGV0IGM9MS9vLHU9MS9zLGQ9MS9hO3JldHVybiBsdS5lbGVtZW50c1swXSo9YyxsdS5lbGVtZW50c1sxXSo9YyxsdS5lbGVtZW50c1syXSo9YyxsdS5lbGVtZW50c1s0XSo9dSxsdS5lbGVtZW50c1s1XSo9dSxsdS5lbGVtZW50c1s2XSo9dSxsdS5lbGVtZW50c1s4XSo9ZCxsdS5lbGVtZW50c1s5XSo9ZCxsdS5lbGVtZW50c1sxMF0qPWQsZS5zZXRGcm9tUm90YXRpb25NYXRyaXgobHUpLGkueD1vLGkueT1zLGkuej1hLHRoaXN9bWFrZVBlcnNwZWN0aXZlKHQsZSxpLHIsbyxzKXt2b2lkIDA9PT1zJiZjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tYWtlUGVyc3BlY3RpdmUoKSBoYXMgYmVlbiByZWRlZmluZWQgYW5kIGhhcyBhIG5ldyBzaWduYXR1cmUuIFBsZWFzZSBjaGVjayB0aGUgZG9jcy4iKTtsZXQgYT10aGlzLmVsZW1lbnRzLGM9MipvLyhpLXIpLHU9KGUrdCkvKGUtdCksZD0oaStyKS8oaS1yKSxwPS0ocytvKS8ocy1vKSxoPS0yKnMqby8ocy1vKTtyZXR1cm4gYVswXT0yKm8vKGUtdCksYVs0XT0wLGFbOF09dSxhWzEyXT0wLGFbMV09MCxhWzVdPWMsYVs5XT1kLGFbMTNdPTAsYVsyXT0wLGFbNl09MCxhWzEwXT1wLGFbMTRdPWgsYVszXT0wLGFbN109MCxhWzExXT0tMSxhWzE1XT0wLHRoaXN9bWFrZU9ydGhvZ3JhcGhpYyh0LGUsaSxyLG8scyl7bGV0IGE9dGhpcy5lbGVtZW50cyxsPTEvKGUtdCksYz0xLyhpLXIpLHU9MS8ocy1vKSxkPShlK3QpKmwscD0oaStyKSpjLGg9KHMrbykqdTtyZXR1cm4gYVswXT0yKmwsYVs0XT0wLGFbOF09MCxhWzEyXT0tZCxhWzFdPTAsYVs1XT0yKmMsYVs5XT0wLGFbMTNdPS1wLGFbMl09MCxhWzZdPTAsYVsxMF09LTIqdSxhWzE0XT0taCxhWzNdPTAsYVs3XT0wLGFbMTFdPTAsYVsxNV09MSx0aGlzfWVxdWFscyh0KXtsZXQgZT10aGlzLmVsZW1lbnRzLGk9dC5lbGVtZW50cztmb3IobGV0IHI9MDtyPDE2O3IrKylpZihlW3JdIT09aVtyXSlyZXR1cm4hMTtyZXR1cm4hMH1mcm9tQXJyYXkodCxlPTApe2ZvcihsZXQgaT0wO2k8MTY7aSsrKXRoaXMuZWxlbWVudHNbaV09dFtpK2VdO3JldHVybiB0aGlzfXRvQXJyYXkodD1bXSxlPTApe2xldCBpPXRoaXMuZWxlbWVudHM7cmV0dXJuIHRbZV09aVswXSx0W2UrMV09aVsxXSx0W2UrMl09aVsyXSx0W2UrM109aVszXSx0W2UrNF09aVs0XSx0W2UrNV09aVs1XSx0W2UrNl09aVs2XSx0W2UrN109aVs3XSx0W2UrOF09aVs4XSx0W2UrOV09aVs5XSx0W2UrMTBdPWlbMTBdLHRbZSsxMV09aVsxMV0sdFtlKzEyXT1pWzEyXSx0W2UrMTNdPWlbMTNdLHRbZSsxNF09aVsxNF0sdFtlKzE1XT1pWzE1XSx0fX07Um4ucHJvdG90eXBlLmlzTWF0cml4ND0hMDt2YXIgank9bmV3IGllLGx1PW5ldyBSbixqOGU9bmV3IGllKDAsMCwwKSxHOGU9bmV3IGllKDEsMSwxKSx1Zj1uZXcgaWUsRE89bmV3IGllLHdsPW5ldyBpZSxTdWU9bmV3IFJuLEV1ZT1uZXcgcXMsTWY9Y2xhc3N7Y29uc3RydWN0b3IodD0wLGU9MCxpPTAscj1NZi5EZWZhdWx0T3JkZXIpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX29yZGVyPXJ9Z2V0IHgoKXtyZXR1cm4gdGhpcy5feH1zZXQgeCh0KXt0aGlzLl94PXQsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpfWdldCB5KCl7cmV0dXJuIHRoaXMuX3l9c2V0IHkodCl7dGhpcy5feT10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1nZXQgeigpe3JldHVybiB0aGlzLl96fXNldCB6KHQpe3RoaXMuX3o9dCx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCl9Z2V0IG9yZGVyKCl7cmV0dXJuIHRoaXMuX29yZGVyfXNldCBvcmRlcih0KXt0aGlzLl9vcmRlcj10LHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKX1zZXQodCxlLGkscj10aGlzLl9vcmRlcil7cmV0dXJuIHRoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5fej1pLHRoaXMuX29yZGVyPXIsdGhpcy5fb25DaGFuZ2VDYWxsYmFjaygpLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5feCx0aGlzLl95LHRoaXMuX3osdGhpcy5fb3JkZXIpfWNvcHkodCl7cmV0dXJuIHRoaXMuX3g9dC5feCx0aGlzLl95PXQuX3ksdGhpcy5fej10Ll96LHRoaXMuX29yZGVyPXQuX29yZGVyLHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soKSx0aGlzfXNldEZyb21Sb3RhdGlvbk1hdHJpeCh0LGU9dGhpcy5fb3JkZXIsaT0hMCl7bGV0IHI9dC5lbGVtZW50cyxvPXJbMF0scz1yWzRdLGE9cls4XSxsPXJbMV0sYz1yWzVdLHU9cls5XSxkPXJbMl0scD1yWzZdLGg9clsxMF07c3dpdGNoKGUpe2Nhc2UiWFlaIjp0aGlzLl95PU1hdGguYXNpbihHYShhLC0xLDEpKSxNYXRoLmFicyhhKTwuOTk5OTk5OT8odGhpcy5feD1NYXRoLmF0YW4yKC11LGgpLHRoaXMuX3o9TWF0aC5hdGFuMigtcyxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMihwLGMpLHRoaXMuX3o9MCk7YnJlYWs7Y2FzZSJZWFoiOnRoaXMuX3g9TWF0aC5hc2luKC1HYSh1LC0xLDEpKSxNYXRoLmFicyh1KTwuOTk5OTk5OT8odGhpcy5feT1NYXRoLmF0YW4yKGEsaCksdGhpcy5fej1NYXRoLmF0YW4yKGwsYykpOih0aGlzLl95PU1hdGguYXRhbjIoLWQsbyksdGhpcy5fej0wKTticmVhaztjYXNlIlpYWSI6dGhpcy5feD1NYXRoLmFzaW4oR2EocCwtMSwxKSksTWF0aC5hYnMocCk8Ljk5OTk5OTk/KHRoaXMuX3k9TWF0aC5hdGFuMigtZCxoKSx0aGlzLl96PU1hdGguYXRhbjIoLXMsYykpOih0aGlzLl95PTAsdGhpcy5fej1NYXRoLmF0YW4yKGwsbykpO2JyZWFrO2Nhc2UiWllYIjp0aGlzLl95PU1hdGguYXNpbigtR2EoZCwtMSwxKSksTWF0aC5hYnMoZCk8Ljk5OTk5OTk/KHRoaXMuX3g9TWF0aC5hdGFuMihwLGgpLHRoaXMuX3o9TWF0aC5hdGFuMihsLG8pKToodGhpcy5feD0wLHRoaXMuX3o9TWF0aC5hdGFuMigtcyxjKSk7YnJlYWs7Y2FzZSJZWlgiOnRoaXMuX3o9TWF0aC5hc2luKEdhKGwsLTEsMSkpLE1hdGguYWJzKGwpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIoLXUsYyksdGhpcy5feT1NYXRoLmF0YW4yKC1kLG8pKToodGhpcy5feD0wLHRoaXMuX3k9TWF0aC5hdGFuMihhLGgpKTticmVhaztjYXNlIlhaWSI6dGhpcy5fej1NYXRoLmFzaW4oLUdhKHMsLTEsMSkpLE1hdGguYWJzKHMpPC45OTk5OTk5Pyh0aGlzLl94PU1hdGguYXRhbjIocCxjKSx0aGlzLl95PU1hdGguYXRhbjIoYSxvKSk6KHRoaXMuX3g9TWF0aC5hdGFuMigtdSxoKSx0aGlzLl95PTApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS53YXJuKCJUSFJFRS5FdWxlcjogLnNldEZyb21Sb3RhdGlvbk1hdHJpeCgpIGVuY291bnRlcmVkIGFuIHVua25vd24gb3JkZXI6ICIrZSl9cmV0dXJuIHRoaXMuX29yZGVyPWUsITA9PT1pJiZ0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc31zZXRGcm9tUXVhdGVybmlvbih0LGUsaSl7cmV0dXJuIFN1ZS5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbih0KSx0aGlzLnNldEZyb21Sb3RhdGlvbk1hdHJpeChTdWUsZSxpKX1zZXRGcm9tVmVjdG9yMyh0LGU9dGhpcy5fb3JkZXIpe3JldHVybiB0aGlzLnNldCh0LngsdC55LHQueixlKX1yZW9yZGVyKHQpe3JldHVybiBFdWUuc2V0RnJvbUV1bGVyKHRoaXMpLHRoaXMuc2V0RnJvbVF1YXRlcm5pb24oRXVlLHQpfWVxdWFscyh0KXtyZXR1cm4gdC5feD09PXRoaXMuX3gmJnQuX3k9PT10aGlzLl95JiZ0Ll96PT09dGhpcy5feiYmdC5fb3JkZXI9PT10aGlzLl9vcmRlcn1mcm9tQXJyYXkodCl7cmV0dXJuIHRoaXMuX3g9dFswXSx0aGlzLl95PXRbMV0sdGhpcy5fej10WzJdLHZvaWQgMCE9PXRbM10mJih0aGlzLl9vcmRlcj10WzNdKSx0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKCksdGhpc310b0FycmF5KHQ9W10sZT0wKXtyZXR1cm4gdFtlXT10aGlzLl94LHRbZSsxXT10aGlzLl95LHRbZSsyXT10aGlzLl96LHRbZSszXT10aGlzLl9vcmRlcix0fXRvVmVjdG9yMyh0KXtyZXR1cm4gdD90LnNldCh0aGlzLl94LHRoaXMuX3ksdGhpcy5feik6bmV3IGllKHRoaXMuX3gsdGhpcy5feSx0aGlzLl96KX1fb25DaGFuZ2UodCl7cmV0dXJuIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2s9dCx0aGlzfV9vbkNoYW5nZUNhbGxiYWNrKCl7fX07TWYucHJvdG90eXBlLmlzRXVsZXI9ITAsTWYuRGVmYXVsdE9yZGVyPSJYWVoiLE1mLlJvdGF0aW9uT3JkZXJzPVsiWFlaIiwiWVpYIiwiWlhZIiwiWFpZIiwiWVhaIiwiWllYIl07dmFyIHNrPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5tYXNrPTF9c2V0KHQpe3RoaXMubWFzaz0oMTw8dHwwKT4+PjB9ZW5hYmxlKHQpe3RoaXMubWFza3w9MTw8dHwwfWVuYWJsZUFsbCgpe3RoaXMubWFzaz0tMX10b2dnbGUodCl7dGhpcy5tYXNrXj0xPDx0fDB9ZGlzYWJsZSh0KXt0aGlzLm1hc2smPX4oMTw8dHwwKX1kaXNhYmxlQWxsKCl7dGhpcy5tYXNrPTB9dGVzdCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayZ0Lm1hc2spfWlzRW5hYmxlZCh0KXtyZXR1cm4gMCE9KHRoaXMubWFzayYoMTw8dHwwKSl9fSxXOGU9MCxUdWU9bmV3IGllLEd5PW5ldyBxcyxDcD1uZXcgUm4sQU89bmV3IGllLElTPW5ldyBpZSxxOGU9bmV3IGllLFk4ZT1uZXcgcXMsRHVlPW5ldyBpZSgxLDAsMCksQXVlPW5ldyBpZSgwLDEsMCksSXVlPW5ldyBpZSgwLDAsMSksWDhlPXt0eXBlOiJhZGRlZCJ9LFB1ZT17dHlwZToicmVtb3ZlZCJ9LFhpPWNsYXNzIGV4dGVuZHMgRXB7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlc4ZSsrfSksdGhpcy51dWlkPWR1KCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iT2JqZWN0M0QiLHRoaXMucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbj1bXSx0aGlzLnVwPVhpLkRlZmF1bHRVcC5jbG9uZSgpO2xldCB0PW5ldyBpZSxlPW5ldyBNZixpPW5ldyBxcyxyPW5ldyBpZSgxLDEsMSk7ZS5fb25DaGFuZ2UoZnVuY3Rpb24oKXtpLnNldEZyb21FdWxlcihlLCExKX0pLGkuX29uQ2hhbmdlKGZ1bmN0aW9uKCl7ZS5zZXRGcm9tUXVhdGVybmlvbihpLHZvaWQgMCwhMSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHtwb3NpdGlvbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6dH0scm90YXRpb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmV9LHF1YXRlcm5pb246e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOml9LHNjYWxlOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSxtb2RlbFZpZXdNYXRyaXg6e3ZhbHVlOm5ldyBSbn0sbm9ybWFsTWF0cml4Ont2YWx1ZTpuZXcgSm99fSksdGhpcy5tYXRyaXg9bmV3IFJuLHRoaXMubWF0cml4V29ybGQ9bmV3IFJuLHRoaXMubWF0cml4QXV0b1VwZGF0ZT1YaS5EZWZhdWx0TWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdGhpcy5sYXllcnM9bmV3IHNrLHRoaXMudmlzaWJsZT0hMCx0aGlzLmNhc3RTaGFkb3c9ITEsdGhpcy5yZWNlaXZlU2hhZG93PSExLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMCx0aGlzLnJlbmRlck9yZGVyPTAsdGhpcy5hbmltYXRpb25zPVtdLHRoaXMudXNlckRhdGE9e319b25CZWZvcmVSZW5kZXIoKXt9b25BZnRlclJlbmRlcigpe31hcHBseU1hdHJpeDQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMubWF0cml4LnByZW11bHRpcGx5KHQpLHRoaXMubWF0cml4LmRlY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKX1hcHBseVF1YXRlcm5pb24odCl7cmV0dXJuIHRoaXMucXVhdGVybmlvbi5wcmVtdWx0aXBseSh0KSx0aGlzfXNldFJvdGF0aW9uRnJvbUF4aXNBbmdsZSh0LGUpe3RoaXMucXVhdGVybmlvbi5zZXRGcm9tQXhpc0FuZ2xlKHQsZSl9c2V0Um90YXRpb25Gcm9tRXVsZXIodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21FdWxlcih0LCEwKX1zZXRSb3RhdGlvbkZyb21NYXRyaXgodCl7dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeCh0KX1zZXRSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKHQpe3RoaXMucXVhdGVybmlvbi5jb3B5KHQpfXJvdGF0ZU9uQXhpcyh0LGUpe3JldHVybiBHeS5zZXRGcm9tQXhpc0FuZ2xlKHQsZSksdGhpcy5xdWF0ZXJuaW9uLm11bHRpcGx5KEd5KSx0aGlzfXJvdGF0ZU9uV29ybGRBeGlzKHQsZSl7cmV0dXJuIEd5LnNldEZyb21BeGlzQW5nbGUodCxlKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoR3kpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoRHVlLHQpfXJvdGF0ZVkodCl7cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKEF1ZSx0KX1yb3RhdGVaKHQpe3JldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhJdWUsdCl9dHJhbnNsYXRlT25BeGlzKHQsZSl7cmV0dXJuIFR1ZS5jb3B5KHQpLmFwcGx5UXVhdGVybmlvbih0aGlzLnF1YXRlcm5pb24pLHRoaXMucG9zaXRpb24uYWRkKFR1ZS5tdWx0aXBseVNjYWxhcihlKSksdGhpc310cmFuc2xhdGVYKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9uQXhpcyhEdWUsdCl9dHJhbnNsYXRlWSh0KXtyZXR1cm4gdGhpcy50cmFuc2xhdGVPbkF4aXMoQXVlLHQpfXRyYW5zbGF0ZVoodCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT25BeGlzKEl1ZSx0KX1sb2NhbFRvV29ybGQodCl7cmV0dXJuIHQuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpfXdvcmxkVG9Mb2NhbCh0KXtyZXR1cm4gdC5hcHBseU1hdHJpeDQoQ3AuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSl9bG9va0F0KHQsZSxpKXt0LmlzVmVjdG9yMz9BTy5jb3B5KHQpOkFPLnNldCh0LGUsaSk7bGV0IHI9dGhpcy5wYXJlbnQ7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksSVMuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHRoaXMubWF0cml4V29ybGQpLHRoaXMuaXNDYW1lcmF8fHRoaXMuaXNMaWdodD9DcC5sb29rQXQoSVMsQU8sdGhpcy51cCk6Q3AubG9va0F0KEFPLElTLHRoaXMudXApLHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoQ3ApLHImJihDcC5leHRyYWN0Um90YXRpb24oci5tYXRyaXhXb3JsZCksR3kuc2V0RnJvbVJvdGF0aW9uTWF0cml4KENwKSx0aGlzLnF1YXRlcm5pb24ucHJlbXVsdGlwbHkoR3kuaW52ZXJ0KCkpKX1hZGQodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXRoaXMuYWRkKGFyZ3VtZW50c1tlXSk7cmV0dXJuIHRoaXN9cmV0dXJuIHQ9PT10aGlzPyhjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBjYW4ndCBiZSBhZGRlZCBhcyBhIGNoaWxkIG9mIGl0c2VsZi4iLHQpLHRoaXMpOih0JiZ0LmlzT2JqZWN0M0Q/KG51bGwhPT10LnBhcmVudCYmdC5wYXJlbnQucmVtb3ZlKHQpLHQucGFyZW50PXRoaXMsdGhpcy5jaGlsZHJlbi5wdXNoKHQpLHQuZGlzcGF0Y2hFdmVudChYOGUpKTpjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRC5hZGQ6IG9iamVjdCBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuT2JqZWN0M0QuIix0KSx0aGlzKX1yZW1vdmUodCl7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXRoaXMucmVtb3ZlKGFyZ3VtZW50c1tpXSk7cmV0dXJuIHRoaXN9bGV0IGU9dGhpcy5jaGlsZHJlbi5pbmRleE9mKHQpO3JldHVybi0xIT09ZSYmKHQucGFyZW50PW51bGwsdGhpcy5jaGlsZHJlbi5zcGxpY2UoZSwxKSx0LmRpc3BhdGNoRXZlbnQoUHVlKSksdGhpc31yZW1vdmVGcm9tUGFyZW50KCl7bGV0IHQ9dGhpcy5wYXJlbnQ7cmV0dXJuIG51bGwhPT10JiZ0LnJlbW92ZSh0aGlzKSx0aGlzfWNsZWFyKCl7Zm9yKGxldCB0PTA7dDx0aGlzLmNoaWxkcmVuLmxlbmd0aDt0Kyspe2xldCBlPXRoaXMuY2hpbGRyZW5bdF07ZS5wYXJlbnQ9bnVsbCxlLmRpc3BhdGNoRXZlbnQoUHVlKX1yZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg9MCx0aGlzfWF0dGFjaCh0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQ3AuY29weSh0aGlzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKSxudWxsIT09dC5wYXJlbnQmJih0LnBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksQ3AubXVsdGlwbHkodC5wYXJlbnQubWF0cml4V29ybGQpKSx0LmFwcGx5TWF0cml4NChDcCksdGhpcy5hZGQodCksdC51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCksdGhpc31nZXRPYmplY3RCeUlkKHQpe3JldHVybiB0aGlzLmdldE9iamVjdEJ5UHJvcGVydHkoImlkIix0KX1nZXRPYmplY3RCeU5hbWUodCl7cmV0dXJuIHRoaXMuZ2V0T2JqZWN0QnlQcm9wZXJ0eSgibmFtZSIsdCl9Z2V0T2JqZWN0QnlQcm9wZXJ0eSh0LGUpe2lmKHRoaXNbdF09PT1lKXJldHVybiB0aGlzO2ZvcihsZXQgaT0wLHI9dGhpcy5jaGlsZHJlbi5sZW5ndGg7aTxyO2krKyl7bGV0IHM9dGhpcy5jaGlsZHJlbltpXS5nZXRPYmplY3RCeVByb3BlcnR5KHQsZSk7aWYodm9pZCAwIT09cylyZXR1cm4gc319Z2V0V29ybGRQb3NpdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSksdC5zZXRGcm9tTWF0cml4UG9zaXRpb24odGhpcy5tYXRyaXhXb3JsZCl9Z2V0V29ybGRRdWF0ZXJuaW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShJUyx0LHE4ZSksdH1nZXRXb3JsZFNjYWxlKHQpe3JldHVybiB0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKSx0aGlzLm1hdHJpeFdvcmxkLmRlY29tcG9zZShJUyxZOGUsdCksdH1nZXRXb3JsZERpcmVjdGlvbih0KXt0aGlzLnVwZGF0ZVdvcmxkTWF0cml4KCEwLCExKTtsZXQgZT10aGlzLm1hdHJpeFdvcmxkLmVsZW1lbnRzO3JldHVybiB0LnNldChlWzhdLGVbOV0sZVsxMF0pLm5vcm1hbGl6ZSgpfXJheWNhc3QoKXt9dHJhdmVyc2UodCl7dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlKHQpfXRyYXZlcnNlVmlzaWJsZSh0KXtpZighMT09PXRoaXMudmlzaWJsZSlyZXR1cm47dCh0aGlzKTtsZXQgZT10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aTxyO2krKyllW2ldLnRyYXZlcnNlVmlzaWJsZSh0KX10cmF2ZXJzZUFuY2VzdG9ycyh0KXtsZXQgZT10aGlzLnBhcmVudDtudWxsIT09ZSYmKHQoZSksZS50cmF2ZXJzZUFuY2VzdG9ycyh0KSl9dXBkYXRlTWF0cml4KCl7dGhpcy5tYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLHRoaXMucXVhdGVybmlvbix0aGlzLnNjYWxlKSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9dXBkYXRlTWF0cml4V29ybGQodCl7dGhpcy5tYXRyaXhBdXRvVXBkYXRlJiZ0aGlzLnVwZGF0ZU1hdHJpeCgpLCh0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGV8fHQpJiYobnVsbD09PXRoaXMucGFyZW50P3RoaXMubWF0cml4V29ybGQuY29weSh0aGlzLm1hdHJpeCk6dGhpcy5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKHRoaXMucGFyZW50Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITEsdD0hMCk7bGV0IGU9dGhpcy5jaGlsZHJlbjtmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspZVtpXS51cGRhdGVNYXRyaXhXb3JsZCh0KX11cGRhdGVXb3JsZE1hdHJpeCh0LGUpe2xldCBpPXRoaXMucGFyZW50O2lmKCEwPT09dCYmbnVsbCE9PWkmJmkudXBkYXRlV29ybGRNYXRyaXgoITAsITEpLHRoaXMubWF0cml4QXV0b1VwZGF0ZSYmdGhpcy51cGRhdGVNYXRyaXgoKSxudWxsPT09dGhpcy5wYXJlbnQ/dGhpcy5tYXRyaXhXb3JsZC5jb3B5KHRoaXMubWF0cml4KTp0aGlzLm1hdHJpeFdvcmxkLm11bHRpcGx5TWF0cmljZXModGhpcy5wYXJlbnQubWF0cml4V29ybGQsdGhpcy5tYXRyaXgpLCEwPT09ZSl7bGV0IHI9dGhpcy5jaGlsZHJlbjtmb3IobGV0IG89MCxzPXIubGVuZ3RoO288cztvKyspcltvXS51cGRhdGVXb3JsZE1hdHJpeCghMSwhMCl9fXRvSlNPTih0KXtsZXQgZT12b2lkIDA9PT10fHwic3RyaW5nIj09dHlwZW9mIHQsaT17fTtlJiYodD17Z2VvbWV0cmllczp7fSxtYXRlcmlhbHM6e30sdGV4dHVyZXM6e30saW1hZ2VzOnt9LHNoYXBlczp7fSxza2VsZXRvbnM6e30sYW5pbWF0aW9uczp7fX0saS5tZXRhZGF0YT17dmVyc2lvbjo0LjUsdHlwZToiT2JqZWN0IixnZW5lcmF0b3I6Ik9iamVjdDNELnRvSlNPTiJ9KTtsZXQgcj17fTtmdW5jdGlvbiBvKGEsbCl7cmV0dXJuIHZvaWQgMD09PWFbbC51dWlkXSYmKGFbbC51dWlkXT1sLnRvSlNPTih0KSksbC51dWlkfWlmKHIudXVpZD10aGlzLnV1aWQsci50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHIubmFtZT10aGlzLm5hbWUpLCEwPT09dGhpcy5jYXN0U2hhZG93JiYoci5jYXN0U2hhZG93PSEwKSwhMD09PXRoaXMucmVjZWl2ZVNoYWRvdyYmKHIucmVjZWl2ZVNoYWRvdz0hMCksITE9PT10aGlzLnZpc2libGUmJihyLnZpc2libGU9ITEpLCExPT09dGhpcy5mcnVzdHVtQ3VsbGVkJiYoci5mcnVzdHVtQ3VsbGVkPSExKSwwIT09dGhpcy5yZW5kZXJPcmRlciYmKHIucmVuZGVyT3JkZXI9dGhpcy5yZW5kZXJPcmRlciksInt9IiE9PUpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRhdGEpJiYoci51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSxyLmxheWVycz10aGlzLmxheWVycy5tYXNrLHIubWF0cml4PXRoaXMubWF0cml4LnRvQXJyYXkoKSwhMT09PXRoaXMubWF0cml4QXV0b1VwZGF0ZSYmKHIubWF0cml4QXV0b1VwZGF0ZT0hMSksdGhpcy5pc0luc3RhbmNlZE1lc2gmJihyLnR5cGU9Ikluc3RhbmNlZE1lc2giLHIuY291bnQ9dGhpcy5jb3VudCxyLmluc3RhbmNlTWF0cml4PXRoaXMuaW5zdGFuY2VNYXRyaXgudG9KU09OKCksbnVsbCE9PXRoaXMuaW5zdGFuY2VDb2xvciYmKHIuaW5zdGFuY2VDb2xvcj10aGlzLmluc3RhbmNlQ29sb3IudG9KU09OKCkpKSx0aGlzLmlzU2NlbmUpdGhpcy5iYWNrZ3JvdW5kJiYodGhpcy5iYWNrZ3JvdW5kLmlzQ29sb3I/ci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04oKTp0aGlzLmJhY2tncm91bmQuaXNUZXh0dXJlJiYoci5iYWNrZ3JvdW5kPXRoaXMuYmFja2dyb3VuZC50b0pTT04odCkudXVpZCkpLHRoaXMuZW52aXJvbm1lbnQmJnRoaXMuZW52aXJvbm1lbnQuaXNUZXh0dXJlJiYoci5lbnZpcm9ubWVudD10aGlzLmVudmlyb25tZW50LnRvSlNPTih0KS51dWlkKTtlbHNlIGlmKHRoaXMuaXNNZXNofHx0aGlzLmlzTGluZXx8dGhpcy5pc1BvaW50cyl7ci5nZW9tZXRyeT1vKHQuZ2VvbWV0cmllcyx0aGlzLmdlb21ldHJ5KTtsZXQgYT10aGlzLmdlb21ldHJ5LnBhcmFtZXRlcnM7aWYodm9pZCAwIT09YSYmdm9pZCAwIT09YS5zaGFwZXMpe2xldCBsPWEuc2hhcGVzO2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBjPTAsdT1sLmxlbmd0aDtjPHU7YysrKW8odC5zaGFwZXMsbFtjXSk7ZWxzZSBvKHQuc2hhcGVzLGwpfX1pZih0aGlzLmlzU2tpbm5lZE1lc2gmJihyLmJpbmRNb2RlPXRoaXMuYmluZE1vZGUsci5iaW5kTWF0cml4PXRoaXMuYmluZE1hdHJpeC50b0FycmF5KCksdm9pZCAwIT09dGhpcy5za2VsZXRvbiYmKG8odC5za2VsZXRvbnMsdGhpcy5za2VsZXRvbiksci5za2VsZXRvbj10aGlzLnNrZWxldG9uLnV1aWQpKSx2b2lkIDAhPT10aGlzLm1hdGVyaWFsKWlmKEFycmF5LmlzQXJyYXkodGhpcy5tYXRlcmlhbCkpe2xldCBhPVtdO2ZvcihsZXQgbD0wLGM9dGhpcy5tYXRlcmlhbC5sZW5ndGg7bDxjO2wrKylhLnB1c2gobyh0Lm1hdGVyaWFscyx0aGlzLm1hdGVyaWFsW2xdKSk7ci5tYXRlcmlhbD1hfWVsc2Ugci5tYXRlcmlhbD1vKHQubWF0ZXJpYWxzLHRoaXMubWF0ZXJpYWwpO2lmKHRoaXMuY2hpbGRyZW4ubGVuZ3RoPjApe3IuY2hpbGRyZW49W107Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcmVuLmxlbmd0aDthKyspci5jaGlsZHJlbi5wdXNoKHRoaXMuY2hpbGRyZW5bYV0udG9KU09OKHQpLm9iamVjdCl9aWYodGhpcy5hbmltYXRpb25zLmxlbmd0aD4wKXtyLmFuaW1hdGlvbnM9W107Zm9yKGxldCBhPTA7YTx0aGlzLmFuaW1hdGlvbnMubGVuZ3RoO2ErKylyLmFuaW1hdGlvbnMucHVzaChvKHQuYW5pbWF0aW9ucyx0aGlzLmFuaW1hdGlvbnNbYV0pKX1pZihlKXtsZXQgYT1zKHQuZ2VvbWV0cmllcyksbD1zKHQubWF0ZXJpYWxzKSxjPXModC50ZXh0dXJlcyksdT1zKHQuaW1hZ2VzKSxkPXModC5zaGFwZXMpLHA9cyh0LnNrZWxldG9ucyksaD1zKHQuYW5pbWF0aW9ucyk7YS5sZW5ndGg+MCYmKGkuZ2VvbWV0cmllcz1hKSxsLmxlbmd0aD4wJiYoaS5tYXRlcmlhbHM9bCksYy5sZW5ndGg+MCYmKGkudGV4dHVyZXM9YyksdS5sZW5ndGg+MCYmKGkuaW1hZ2VzPXUpLGQubGVuZ3RoPjAmJihpLnNoYXBlcz1kKSxwLmxlbmd0aD4wJiYoaS5za2VsZXRvbnM9cCksaC5sZW5ndGg+MCYmKGkuYW5pbWF0aW9ucz1oKX1yZXR1cm4gaS5vYmplY3Q9cixpO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W107Zm9yKGxldCBjIGluIGEpe2xldCB1PWFbY107ZGVsZXRlIHUubWV0YWRhdGEsbC5wdXNoKHUpfXJldHVybiBsfX1jbG9uZSh0KXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyx0KX1jb3B5KHQsZT0hMCl7aWYodGhpcy5uYW1lPXQubmFtZSx0aGlzLnVwLmNvcHkodC51cCksdGhpcy5wb3NpdGlvbi5jb3B5KHQucG9zaXRpb24pLHRoaXMucm90YXRpb24ub3JkZXI9dC5yb3RhdGlvbi5vcmRlcix0aGlzLnF1YXRlcm5pb24uY29weSh0LnF1YXRlcm5pb24pLHRoaXMuc2NhbGUuY29weSh0LnNjYWxlKSx0aGlzLm1hdHJpeC5jb3B5KHQubWF0cml4KSx0aGlzLm1hdHJpeFdvcmxkLmNvcHkodC5tYXRyaXhXb3JsZCksdGhpcy5tYXRyaXhBdXRvVXBkYXRlPXQubWF0cml4QXV0b1VwZGF0ZSx0aGlzLm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9dC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlLHRoaXMubGF5ZXJzLm1hc2s9dC5sYXllcnMubWFzayx0aGlzLnZpc2libGU9dC52aXNpYmxlLHRoaXMuY2FzdFNoYWRvdz10LmNhc3RTaGFkb3csdGhpcy5yZWNlaXZlU2hhZG93PXQucmVjZWl2ZVNoYWRvdyx0aGlzLmZydXN0dW1DdWxsZWQ9dC5mcnVzdHVtQ3VsbGVkLHRoaXMucmVuZGVyT3JkZXI9dC5yZW5kZXJPcmRlcix0aGlzLnVzZXJEYXRhPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodC51c2VyRGF0YSkpLCEwPT09ZSlmb3IobGV0IGk9MDtpPHQuY2hpbGRyZW4ubGVuZ3RoO2krKyl0aGlzLmFkZCh0LmNoaWxkcmVuW2ldLmNsb25lKCkpO3JldHVybiB0aGlzfX07WGkuRGVmYXVsdFVwPW5ldyBpZSgwLDEsMCksWGkuRGVmYXVsdE1hdHJpeEF1dG9VcGRhdGU9ITAsWGkucHJvdG90eXBlLmlzT2JqZWN0M0Q9ITA7dmFyIGN1PW5ldyBpZSxNcD1uZXcgaWUsSGo9bmV3IGllLHdwPW5ldyBpZSxXeT1uZXcgaWUscXk9bmV3IGllLFJ1ZT1uZXcgaWUsVWo9bmV3IGllLHpqPW5ldyBpZSxqaj1uZXcgaWUsbG89Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgaWUsZT1uZXcgaWUsaT1uZXcgaWUpe3RoaXMuYT10LHRoaXMuYj1lLHRoaXMuYz1pfXN0YXRpYyBnZXROb3JtYWwodCxlLGkscil7ci5zdWJWZWN0b3JzKGksZSksY3Uuc3ViVmVjdG9ycyh0LGUpLHIuY3Jvc3MoY3UpO2xldCBvPXIubGVuZ3RoU3EoKTtyZXR1cm4gbz4wP3IubXVsdGlwbHlTY2FsYXIoMS9NYXRoLnNxcnQobykpOnIuc2V0KDAsMCwwKX1zdGF0aWMgZ2V0QmFyeWNvb3JkKHQsZSxpLHIsbyl7Y3Uuc3ViVmVjdG9ycyhyLGUpLE1wLnN1YlZlY3RvcnMoaSxlKSxIai5zdWJWZWN0b3JzKHQsZSk7bGV0IHM9Y3UuZG90KGN1KSxhPWN1LmRvdChNcCksbD1jdS5kb3QoSGopLGM9TXAuZG90KE1wKSx1PU1wLmRvdChIaiksZD1zKmMtYSphO2lmKDA9PT1kKXJldHVybiBvLnNldCgtMiwtMSwtMSk7bGV0IHA9MS9kLGg9KGMqbC1hKnUpKnAsZj0ocyp1LWEqbCkqcDtyZXR1cm4gby5zZXQoMS1oLWYsZixoKX1zdGF0aWMgY29udGFpbnNQb2ludCh0LGUsaSxyKXtyZXR1cm4gdGhpcy5nZXRCYXJ5Y29vcmQodCxlLGkscix3cCksd3AueD49MCYmd3AueT49MCYmd3AueCt3cC55PD0xfXN0YXRpYyBnZXRVVih0LGUsaSxyLG8scyxhLGwpe3JldHVybiB0aGlzLmdldEJhcnljb29yZCh0LGUsaSxyLHdwKSxsLnNldCgwLDApLGwuYWRkU2NhbGVkVmVjdG9yKG8sd3AueCksbC5hZGRTY2FsZWRWZWN0b3Iocyx3cC55KSxsLmFkZFNjYWxlZFZlY3RvcihhLHdwLnopLGx9c3RhdGljIGlzRnJvbnRGYWNpbmcodCxlLGkscil7cmV0dXJuIGN1LnN1YlZlY3RvcnMoaSxlKSxNcC5zdWJWZWN0b3JzKHQsZSksY3UuY3Jvc3MoTXApLmRvdChyKTwwfXNldCh0LGUsaSl7cmV0dXJuIHRoaXMuYS5jb3B5KHQpLHRoaXMuYi5jb3B5KGUpLHRoaXMuYy5jb3B5KGkpLHRoaXN9c2V0RnJvbVBvaW50c0FuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5jb3B5KHRbZV0pLHRoaXMuYi5jb3B5KHRbaV0pLHRoaXMuYy5jb3B5KHRbcl0pLHRoaXN9c2V0RnJvbUF0dHJpYnV0ZUFuZEluZGljZXModCxlLGkscil7cmV0dXJuIHRoaXMuYS5mcm9tQnVmZmVyQXR0cmlidXRlKHQsZSksdGhpcy5iLmZyb21CdWZmZXJBdHRyaWJ1dGUodCxpKSx0aGlzLmMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LHIpLHRoaXN9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9Y29weSh0KXtyZXR1cm4gdGhpcy5hLmNvcHkodC5hKSx0aGlzLmIuY29weSh0LmIpLHRoaXMuYy5jb3B5KHQuYyksdGhpc31nZXRBcmVhKCl7cmV0dXJuIGN1LnN1YlZlY3RvcnModGhpcy5jLHRoaXMuYiksTXAuc3ViVmVjdG9ycyh0aGlzLmEsdGhpcy5iKSwuNSpjdS5jcm9zcyhNcCkubGVuZ3RoKCl9Z2V0TWlkcG9pbnQodCl7cmV0dXJuIHQuYWRkVmVjdG9ycyh0aGlzLmEsdGhpcy5iKS5hZGQodGhpcy5jKS5tdWx0aXBseVNjYWxhcigxLzMpfWdldE5vcm1hbCh0KXtyZXR1cm4gbG8uZ2V0Tm9ybWFsKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWdldFBsYW5lKHQpe3JldHVybiB0LnNldEZyb21Db3BsYW5hclBvaW50cyh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9Z2V0QmFyeWNvb3JkKHQsZSl7cmV0dXJuIGxvLmdldEJhcnljb29yZCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jLGUpfWdldFVWKHQsZSxpLHIsbyl7cmV0dXJuIGxvLmdldFVWKHQsdGhpcy5hLHRoaXMuYix0aGlzLmMsZSxpLHIsbyl9Y29udGFpbnNQb2ludCh0KXtyZXR1cm4gbG8uY29udGFpbnNQb2ludCh0LHRoaXMuYSx0aGlzLmIsdGhpcy5jKX1pc0Zyb250RmFjaW5nKHQpe3JldHVybiBsby5pc0Zyb250RmFjaW5nKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHQpfWludGVyc2VjdHNCb3godCl7cmV0dXJuIHQuaW50ZXJzZWN0c1RyaWFuZ2xlKHRoaXMpfWNsb3Nlc3RQb2ludFRvUG9pbnQodCxlKXtsZXQgcyxhLGk9dGhpcy5hLHI9dGhpcy5iLG89dGhpcy5jO1d5LnN1YlZlY3RvcnMocixpKSxxeS5zdWJWZWN0b3JzKG8saSksVWouc3ViVmVjdG9ycyh0LGkpO2xldCBsPVd5LmRvdChVaiksYz1xeS5kb3QoVWopO2lmKGw8PTAmJmM8PTApcmV0dXJuIGUuY29weShpKTt6ai5zdWJWZWN0b3JzKHQscik7bGV0IHU9V3kuZG90KHpqKSxkPXF5LmRvdCh6aik7aWYodT49MCYmZDw9dSlyZXR1cm4gZS5jb3B5KHIpO2xldCBwPWwqZC11KmM7aWYocDw9MCYmbD49MCYmdTw9MClyZXR1cm4gcz1sLyhsLXUpLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoV3kscyk7amouc3ViVmVjdG9ycyh0LG8pO2xldCBoPVd5LmRvdChqaiksZj1xeS5kb3QoamopO2lmKGY+PTAmJmg8PWYpcmV0dXJuIGUuY29weShvKTtsZXQgbT1oKmMtbCpmO2lmKG08PTAmJmM+PTAmJmY8PTApcmV0dXJuIGE9Yy8oYy1mKSxlLmNvcHkoaSkuYWRkU2NhbGVkVmVjdG9yKHF5LGEpO2xldCB4PXUqZi1oKmQ7aWYoeDw9MCYmZC11Pj0wJiZoLWY+PTApcmV0dXJuIFJ1ZS5zdWJWZWN0b3JzKG8sciksYT0oZC11KS8oZC11KyhoLWYpKSxlLmNvcHkocikuYWRkU2NhbGVkVmVjdG9yKFJ1ZSxhKTtsZXQgZz0xLyh4K20rcCk7cmV0dXJuIHM9bSpnLGE9cCpnLGUuY29weShpKS5hZGRTY2FsZWRWZWN0b3IoV3kscykuYWRkU2NhbGVkVmVjdG9yKHF5LGEpfWVxdWFscyh0KXtyZXR1cm4gdC5hLmVxdWFscyh0aGlzLmEpJiZ0LmIuZXF1YWxzKHRoaXMuYikmJnQuYy5lcXVhbHModGhpcy5jKX19LFE4ZT0wLGhzPWNsYXNzIGV4dGVuZHMgRXB7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJpZCIse3ZhbHVlOlE4ZSsrfSksdGhpcy51dWlkPWR1KCksdGhpcy5uYW1lPSIiLHRoaXMudHlwZT0iTWF0ZXJpYWwiLHRoaXMuZm9nPSEwLHRoaXMuYmxlbmRpbmc9MSx0aGlzLnNpZGU9MCx0aGlzLnZlcnRleENvbG9ycz0hMSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYW5zcGFyZW50PSExLHRoaXMuYmxlbmRTcmM9MjA0LHRoaXMuYmxlbmREc3Q9MjA1LHRoaXMuYmxlbmRFcXVhdGlvbj0xMDAsdGhpcy5ibGVuZFNyY0FscGhhPW51bGwsdGhpcy5ibGVuZERzdEFscGhhPW51bGwsdGhpcy5ibGVuZEVxdWF0aW9uQWxwaGE9bnVsbCx0aGlzLmRlcHRoRnVuYz0zLHRoaXMuZGVwdGhUZXN0PSEwLHRoaXMuZGVwdGhXcml0ZT0hMCx0aGlzLnN0ZW5jaWxXcml0ZU1hc2s9MjU1LHRoaXMuc3RlbmNpbEZ1bmM9NTE5LHRoaXMuc3RlbmNpbFJlZj0wLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPTI1NSx0aGlzLnN0ZW5jaWxGYWlsPTc2ODAsdGhpcy5zdGVuY2lsWkZhaWw9NzY4MCx0aGlzLnN0ZW5jaWxaUGFzcz03NjgwLHRoaXMuc3RlbmNpbFdyaXRlPSExLHRoaXMuY2xpcHBpbmdQbGFuZXM9bnVsbCx0aGlzLmNsaXBJbnRlcnNlY3Rpb249ITEsdGhpcy5jbGlwU2hhZG93cz0hMSx0aGlzLnNoYWRvd1NpZGU9bnVsbCx0aGlzLmNvbG9yV3JpdGU9ITAsdGhpcy5hbHBoYVdyaXRlPSEwLHRoaXMucHJlY2lzaW9uPW51bGwsdGhpcy5wb2x5Z29uT2Zmc2V0PSExLHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj0wLHRoaXMucG9seWdvbk9mZnNldFVuaXRzPTAsdGhpcy5kaXRoZXJpbmc9ITEsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9ITEsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9ITEsdGhpcy52aXNpYmxlPSEwLHRoaXMudG9uZU1hcHBlZD0hMCx0aGlzLnVzZXJEYXRhPXt9LHRoaXMudmVyc2lvbj0wLHRoaXMuX2FscGhhVGVzdD0wfWdldCBhbHBoYVRlc3QoKXtyZXR1cm4gdGhpcy5fYWxwaGFUZXN0fXNldCBhbHBoYVRlc3QodCl7dGhpcy5fYWxwaGFUZXN0PjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fYWxwaGFUZXN0PXR9b25CdWlsZCgpe31vbkJlZm9yZVJlbmRlcigpe31vbkJlZm9yZUNvbXBpbGUoKXt9Y3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl7cmV0dXJuIHRoaXMub25CZWZvcmVDb21waWxlLnRvU3RyaW5nKCl9c2V0VmFsdWVzKHQpe2lmKHZvaWQgMCE9PXQpZm9yKGxldCBlIGluIHQpe2xldCBpPXRbZV07aWYodm9pZCAwPT09aSl7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRlcmlhbDogJyIrZSsiJyBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWlmKCJzaGFkaW5nIj09PWUpe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PWk7Y29udGludWV9bGV0IHI9dGhpc1tlXTt2b2lkIDAhPT1yP3ImJnIuaXNDb2xvcj9yLnNldChpKTpyJiZyLmlzVmVjdG9yMyYmaSYmaS5pc1ZlY3RvcjM/ci5jb3B5KGkpOnRoaXNbZV09aTpjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6ICciK2UrIicgaXMgbm90IGEgcHJvcGVydHkgb2YgdGhpcyBtYXRlcmlhbC4iKX19dG9KU09OKHQpe2xldCBlPXZvaWQgMD09PXR8fCJzdHJpbmciPT10eXBlb2YgdDtlJiYodD17dGV4dHVyZXM6e30saW1hZ2VzOnt9fSk7bGV0IGk9e21ldGFkYXRhOnt2ZXJzaW9uOjQuNSx0eXBlOiJNYXRlcmlhbCIsZ2VuZXJhdG9yOiJNYXRlcmlhbC50b0pTT04ifX07ZnVuY3Rpb24gcihvKXtsZXQgcz1bXTtmb3IobGV0IGEgaW4gbyl7bGV0IGw9b1thXTtkZWxldGUgbC5tZXRhZGF0YSxzLnB1c2gobCl9cmV0dXJuIHN9aWYoaS51dWlkPXRoaXMudXVpZCxpLnR5cGU9dGhpcy50eXBlLCIiIT09dGhpcy5uYW1lJiYoaS5uYW1lPXRoaXMubmFtZSksdGhpcy5jb2xvciYmdGhpcy5jb2xvci5pc0NvbG9yJiYoaS5jb2xvcj10aGlzLmNvbG9yLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnJvdWdobmVzcyYmKGkucm91Z2huZXNzPXRoaXMucm91Z2huZXNzKSx2b2lkIDAhPT10aGlzLm1ldGFsbmVzcyYmKGkubWV0YWxuZXNzPXRoaXMubWV0YWxuZXNzKSx2b2lkIDAhPT10aGlzLnNoZWVuJiYoaS5zaGVlbj10aGlzLnNoZWVuKSx0aGlzLnNoZWVuQ29sb3ImJnRoaXMuc2hlZW5Db2xvci5pc0NvbG9yJiYoaS5zaGVlbkNvbG9yPXRoaXMuc2hlZW5Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGVlblJvdWdobmVzcyYmKGkuc2hlZW5Sb3VnaG5lc3M9dGhpcy5zaGVlblJvdWdobmVzcyksdGhpcy5lbWlzc2l2ZSYmdGhpcy5lbWlzc2l2ZS5pc0NvbG9yJiYoaS5lbWlzc2l2ZT10aGlzLmVtaXNzaXZlLmdldEhleCgpKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5JiYxIT09dGhpcy5lbWlzc2l2ZUludGVuc2l0eSYmKGkuZW1pc3NpdmVJbnRlbnNpdHk9dGhpcy5lbWlzc2l2ZUludGVuc2l0eSksdGhpcy5zcGVjdWxhciYmdGhpcy5zcGVjdWxhci5pc0NvbG9yJiYoaS5zcGVjdWxhcj10aGlzLnNwZWN1bGFyLmdldEhleCgpKSx2b2lkIDAhPT10aGlzLnNwZWN1bGFySW50ZW5zaXR5JiYoaS5zcGVjdWxhckludGVuc2l0eT10aGlzLnNwZWN1bGFySW50ZW5zaXR5KSx0aGlzLnNwZWN1bGFyQ29sb3ImJnRoaXMuc3BlY3VsYXJDb2xvci5pc0NvbG9yJiYoaS5zcGVjdWxhckNvbG9yPXRoaXMuc3BlY3VsYXJDb2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaGluaW5lc3MmJihpLnNoaW5pbmVzcz10aGlzLnNoaW5pbmVzcyksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXQmJihpLmNsZWFyY29hdD10aGlzLmNsZWFyY29hdCksdm9pZCAwIT09dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3MmJihpLmNsZWFyY29hdFJvdWdobmVzcz10aGlzLmNsZWFyY29hdFJvdWdobmVzcyksdGhpcy5jbGVhcmNvYXRNYXAmJnRoaXMuY2xlYXJjb2F0TWFwLmlzVGV4dHVyZSYmKGkuY2xlYXJjb2F0TWFwPXRoaXMuY2xlYXJjb2F0TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcCYmdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAuaXNUZXh0dXJlJiYoaS5jbGVhcmNvYXRSb3VnaG5lc3NNYXA9dGhpcy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuY2xlYXJjb2F0Tm9ybWFsTWFwJiZ0aGlzLmNsZWFyY29hdE5vcm1hbE1hcC5pc1RleHR1cmUmJihpLmNsZWFyY29hdE5vcm1hbE1hcD10aGlzLmNsZWFyY29hdE5vcm1hbE1hcC50b0pTT04odCkudXVpZCxpLmNsZWFyY29hdE5vcm1hbFNjYWxlPXRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLm1hcCYmdGhpcy5tYXAuaXNUZXh0dXJlJiYoaS5tYXA9dGhpcy5tYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubWF0Y2FwJiZ0aGlzLm1hdGNhcC5pc1RleHR1cmUmJihpLm1hdGNhcD10aGlzLm1hdGNhcC50b0pTT04odCkudXVpZCksdGhpcy5hbHBoYU1hcCYmdGhpcy5hbHBoYU1hcC5pc1RleHR1cmUmJihpLmFscGhhTWFwPXRoaXMuYWxwaGFNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMubGlnaHRNYXAmJnRoaXMubGlnaHRNYXAuaXNUZXh0dXJlJiYoaS5saWdodE1hcD10aGlzLmxpZ2h0TWFwLnRvSlNPTih0KS51dWlkLGkubGlnaHRNYXBJbnRlbnNpdHk9dGhpcy5saWdodE1hcEludGVuc2l0eSksdGhpcy5hb01hcCYmdGhpcy5hb01hcC5pc1RleHR1cmUmJihpLmFvTWFwPXRoaXMuYW9NYXAudG9KU09OKHQpLnV1aWQsaS5hb01hcEludGVuc2l0eT10aGlzLmFvTWFwSW50ZW5zaXR5KSx0aGlzLmJ1bXBNYXAmJnRoaXMuYnVtcE1hcC5pc1RleHR1cmUmJihpLmJ1bXBNYXA9dGhpcy5idW1wTWFwLnRvSlNPTih0KS51dWlkLGkuYnVtcFNjYWxlPXRoaXMuYnVtcFNjYWxlKSx0aGlzLm5vcm1hbE1hcCYmdGhpcy5ub3JtYWxNYXAuaXNUZXh0dXJlJiYoaS5ub3JtYWxNYXA9dGhpcy5ub3JtYWxNYXAudG9KU09OKHQpLnV1aWQsaS5ub3JtYWxNYXBUeXBlPXRoaXMubm9ybWFsTWFwVHlwZSxpLm5vcm1hbFNjYWxlPXRoaXMubm9ybWFsU2NhbGUudG9BcnJheSgpKSx0aGlzLmRpc3BsYWNlbWVudE1hcCYmdGhpcy5kaXNwbGFjZW1lbnRNYXAuaXNUZXh0dXJlJiYoaS5kaXNwbGFjZW1lbnRNYXA9dGhpcy5kaXNwbGFjZW1lbnRNYXAudG9KU09OKHQpLnV1aWQsaS5kaXNwbGFjZW1lbnRTY2FsZT10aGlzLmRpc3BsYWNlbWVudFNjYWxlLGkuZGlzcGxhY2VtZW50Qmlhcz10aGlzLmRpc3BsYWNlbWVudEJpYXMpLHRoaXMucm91Z2huZXNzTWFwJiZ0aGlzLnJvdWdobmVzc01hcC5pc1RleHR1cmUmJihpLnJvdWdobmVzc01hcD10aGlzLnJvdWdobmVzc01hcC50b0pTT04odCkudXVpZCksdGhpcy5tZXRhbG5lc3NNYXAmJnRoaXMubWV0YWxuZXNzTWFwLmlzVGV4dHVyZSYmKGkubWV0YWxuZXNzTWFwPXRoaXMubWV0YWxuZXNzTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVtaXNzaXZlTWFwJiZ0aGlzLmVtaXNzaXZlTWFwLmlzVGV4dHVyZSYmKGkuZW1pc3NpdmVNYXA9dGhpcy5lbWlzc2l2ZU1hcC50b0pTT04odCkudXVpZCksdGhpcy5zcGVjdWxhck1hcCYmdGhpcy5zcGVjdWxhck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyTWFwPXRoaXMuc3BlY3VsYXJNYXAudG9KU09OKHQpLnV1aWQpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJnRoaXMuc3BlY3VsYXJJbnRlbnNpdHlNYXAuaXNUZXh0dXJlJiYoaS5zcGVjdWxhckludGVuc2l0eU1hcD10aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLnNwZWN1bGFyQ29sb3JNYXAmJnRoaXMuc3BlY3VsYXJDb2xvck1hcC5pc1RleHR1cmUmJihpLnNwZWN1bGFyQ29sb3JNYXA9dGhpcy5zcGVjdWxhckNvbG9yTWFwLnRvSlNPTih0KS51dWlkKSx0aGlzLmVudk1hcCYmdGhpcy5lbnZNYXAuaXNUZXh0dXJlJiYoaS5lbnZNYXA9dGhpcy5lbnZNYXAudG9KU09OKHQpLnV1aWQsdm9pZCAwIT09dGhpcy5jb21iaW5lJiYoaS5jb21iaW5lPXRoaXMuY29tYmluZSkpLHZvaWQgMCE9PXRoaXMuZW52TWFwSW50ZW5zaXR5JiYoaS5lbnZNYXBJbnRlbnNpdHk9dGhpcy5lbnZNYXBJbnRlbnNpdHkpLHZvaWQgMCE9PXRoaXMucmVmbGVjdGl2aXR5JiYoaS5yZWZsZWN0aXZpdHk9dGhpcy5yZWZsZWN0aXZpdHkpLHZvaWQgMCE9PXRoaXMucmVmcmFjdGlvblJhdGlvJiYoaS5yZWZyYWN0aW9uUmF0aW89dGhpcy5yZWZyYWN0aW9uUmF0aW8pLHRoaXMuZ3JhZGllbnRNYXAmJnRoaXMuZ3JhZGllbnRNYXAuaXNUZXh0dXJlJiYoaS5ncmFkaWVudE1hcD10aGlzLmdyYWRpZW50TWFwLnRvSlNPTih0KS51dWlkKSx2b2lkIDAhPT10aGlzLnRyYW5zbWlzc2lvbiYmKGkudHJhbnNtaXNzaW9uPXRoaXMudHJhbnNtaXNzaW9uKSx0aGlzLnRyYW5zbWlzc2lvbk1hcCYmdGhpcy50cmFuc21pc3Npb25NYXAuaXNUZXh0dXJlJiYoaS50cmFuc21pc3Npb25NYXA9dGhpcy50cmFuc21pc3Npb25NYXAudG9KU09OKHQpLnV1aWQpLHZvaWQgMCE9PXRoaXMudGhpY2tuZXNzJiYoaS50aGlja25lc3M9dGhpcy50aGlja25lc3MpLHRoaXMudGhpY2tuZXNzTWFwJiZ0aGlzLnRoaWNrbmVzc01hcC5pc1RleHR1cmUmJihpLnRoaWNrbmVzc01hcD10aGlzLnRoaWNrbmVzc01hcC50b0pTT04odCkudXVpZCksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkRpc3RhbmNlJiYoaS5hdHRlbnVhdGlvbkRpc3RhbmNlPXRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZSksdm9pZCAwIT09dGhpcy5hdHRlbnVhdGlvbkNvbG9yJiYoaS5hdHRlbnVhdGlvbkNvbG9yPXRoaXMuYXR0ZW51YXRpb25Db2xvci5nZXRIZXgoKSksdm9pZCAwIT09dGhpcy5zaXplJiYoaS5zaXplPXRoaXMuc2l6ZSksbnVsbCE9PXRoaXMuc2hhZG93U2lkZSYmKGkuc2hhZG93U2lkZT10aGlzLnNoYWRvd1NpZGUpLHZvaWQgMCE9PXRoaXMuc2l6ZUF0dGVudWF0aW9uJiYoaS5zaXplQXR0ZW51YXRpb249dGhpcy5zaXplQXR0ZW51YXRpb24pLDEhPT10aGlzLmJsZW5kaW5nJiYoaS5ibGVuZGluZz10aGlzLmJsZW5kaW5nKSwwIT09dGhpcy5zaWRlJiYoaS5zaWRlPXRoaXMuc2lkZSksdGhpcy52ZXJ0ZXhDb2xvcnMmJihpLnZlcnRleENvbG9ycz0hMCksdGhpcy5vcGFjaXR5PDEmJihpLm9wYWNpdHk9dGhpcy5vcGFjaXR5KSwhMD09PXRoaXMudHJhbnNwYXJlbnQmJihpLnRyYW5zcGFyZW50PXRoaXMudHJhbnNwYXJlbnQpLGkuZGVwdGhGdW5jPXRoaXMuZGVwdGhGdW5jLGkuZGVwdGhUZXN0PXRoaXMuZGVwdGhUZXN0LGkuZGVwdGhXcml0ZT10aGlzLmRlcHRoV3JpdGUsaS5jb2xvcldyaXRlPXRoaXMuY29sb3JXcml0ZSxpLmFscGhhV3JpdGU9dGhpcy5hbHBoYVdyaXRlLGkuc3RlbmNpbFdyaXRlPXRoaXMuc3RlbmNpbFdyaXRlLGkuc3RlbmNpbFdyaXRlTWFzaz10aGlzLnN0ZW5jaWxXcml0ZU1hc2ssaS5zdGVuY2lsRnVuYz10aGlzLnN0ZW5jaWxGdW5jLGkuc3RlbmNpbFJlZj10aGlzLnN0ZW5jaWxSZWYsaS5zdGVuY2lsRnVuY01hc2s9dGhpcy5zdGVuY2lsRnVuY01hc2ssaS5zdGVuY2lsRmFpbD10aGlzLnN0ZW5jaWxGYWlsLGkuc3RlbmNpbFpGYWlsPXRoaXMuc3RlbmNpbFpGYWlsLGkuc3RlbmNpbFpQYXNzPXRoaXMuc3RlbmNpbFpQYXNzLHRoaXMucm90YXRpb24mJjAhPT10aGlzLnJvdGF0aW9uJiYoaS5yb3RhdGlvbj10aGlzLnJvdGF0aW9uKSwhMD09PXRoaXMucG9seWdvbk9mZnNldCYmKGkucG9seWdvbk9mZnNldD0hMCksMCE9PXRoaXMucG9seWdvbk9mZnNldEZhY3RvciYmKGkucG9seWdvbk9mZnNldEZhY3Rvcj10aGlzLnBvbHlnb25PZmZzZXRGYWN0b3IpLDAhPT10aGlzLnBvbHlnb25PZmZzZXRVbml0cyYmKGkucG9seWdvbk9mZnNldFVuaXRzPXRoaXMucG9seWdvbk9mZnNldFVuaXRzKSx0aGlzLmxpbmV3aWR0aCYmMSE9PXRoaXMubGluZXdpZHRoJiYoaS5saW5ld2lkdGg9dGhpcy5saW5ld2lkdGgpLHZvaWQgMCE9PXRoaXMuZGFzaFNpemUmJihpLmRhc2hTaXplPXRoaXMuZGFzaFNpemUpLHZvaWQgMCE9PXRoaXMuZ2FwU2l6ZSYmKGkuZ2FwU2l6ZT10aGlzLmdhcFNpemUpLHZvaWQgMCE9PXRoaXMuc2NhbGUmJihpLnNjYWxlPXRoaXMuc2NhbGUpLCEwPT09dGhpcy5kaXRoZXJpbmcmJihpLmRpdGhlcmluZz0hMCksdGhpcy5hbHBoYVRlc3Q+MCYmKGkuYWxwaGFUZXN0PXRoaXMuYWxwaGFUZXN0KSwhMD09PXRoaXMuYWxwaGFUb0NvdmVyYWdlJiYoaS5hbHBoYVRvQ292ZXJhZ2U9dGhpcy5hbHBoYVRvQ292ZXJhZ2UpLCEwPT09dGhpcy5wcmVtdWx0aXBsaWVkQWxwaGEmJihpLnByZW11bHRpcGxpZWRBbHBoYT10aGlzLnByZW11bHRpcGxpZWRBbHBoYSksITA9PT10aGlzLndpcmVmcmFtZSYmKGkud2lyZWZyYW1lPXRoaXMud2lyZWZyYW1lKSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD4xJiYoaS53aXJlZnJhbWVMaW5ld2lkdGg9dGhpcy53aXJlZnJhbWVMaW5ld2lkdGgpLCJyb3VuZCIhPT10aGlzLndpcmVmcmFtZUxpbmVjYXAmJihpLndpcmVmcmFtZUxpbmVjYXA9dGhpcy53aXJlZnJhbWVMaW5lY2FwKSwicm91bmQiIT09dGhpcy53aXJlZnJhbWVMaW5lam9pbiYmKGkud2lyZWZyYW1lTGluZWpvaW49dGhpcy53aXJlZnJhbWVMaW5lam9pbiksITA9PT10aGlzLmZsYXRTaGFkaW5nJiYoaS5mbGF0U2hhZGluZz10aGlzLmZsYXRTaGFkaW5nKSwhMT09PXRoaXMudmlzaWJsZSYmKGkudmlzaWJsZT0hMSksITE9PT10aGlzLnRvbmVNYXBwZWQmJihpLnRvbmVNYXBwZWQ9ITEpLCJ7fSIhPT1KU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEYXRhKSYmKGkudXNlckRhdGE9dGhpcy51c2VyRGF0YSksZSl7bGV0IG89cih0LnRleHR1cmVzKSxzPXIodC5pbWFnZXMpO28ubGVuZ3RoPjAmJihpLnRleHR1cmVzPW8pLHMubGVuZ3RoPjAmJihpLmltYWdlcz1zKX1yZXR1cm4gaX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3RoaXMubmFtZT10Lm5hbWUsdGhpcy5mb2c9dC5mb2csdGhpcy5ibGVuZGluZz10LmJsZW5kaW5nLHRoaXMuc2lkZT10LnNpZGUsdGhpcy52ZXJ0ZXhDb2xvcnM9dC52ZXJ0ZXhDb2xvcnMsdGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLnRyYW5zcGFyZW50PXQudHJhbnNwYXJlbnQsdGhpcy5ibGVuZFNyYz10LmJsZW5kU3JjLHRoaXMuYmxlbmREc3Q9dC5ibGVuZERzdCx0aGlzLmJsZW5kRXF1YXRpb249dC5ibGVuZEVxdWF0aW9uLHRoaXMuYmxlbmRTcmNBbHBoYT10LmJsZW5kU3JjQWxwaGEsdGhpcy5ibGVuZERzdEFscGhhPXQuYmxlbmREc3RBbHBoYSx0aGlzLmJsZW5kRXF1YXRpb25BbHBoYT10LmJsZW5kRXF1YXRpb25BbHBoYSx0aGlzLmRlcHRoRnVuYz10LmRlcHRoRnVuYyx0aGlzLmRlcHRoVGVzdD10LmRlcHRoVGVzdCx0aGlzLmRlcHRoV3JpdGU9dC5kZXB0aFdyaXRlLHRoaXMuc3RlbmNpbFdyaXRlTWFzaz10LnN0ZW5jaWxXcml0ZU1hc2ssdGhpcy5zdGVuY2lsRnVuYz10LnN0ZW5jaWxGdW5jLHRoaXMuc3RlbmNpbFJlZj10LnN0ZW5jaWxSZWYsdGhpcy5zdGVuY2lsRnVuY01hc2s9dC5zdGVuY2lsRnVuY01hc2ssdGhpcy5zdGVuY2lsRmFpbD10LnN0ZW5jaWxGYWlsLHRoaXMuc3RlbmNpbFpGYWlsPXQuc3RlbmNpbFpGYWlsLHRoaXMuc3RlbmNpbFpQYXNzPXQuc3RlbmNpbFpQYXNzLHRoaXMuc3RlbmNpbFdyaXRlPXQuc3RlbmNpbFdyaXRlO2xldCBlPXQuY2xpcHBpbmdQbGFuZXMsaT1udWxsO2lmKG51bGwhPT1lKXtsZXQgcj1lLmxlbmd0aDtpPW5ldyBBcnJheShyKTtmb3IobGV0IG89MDtvIT09cjsrK28paVtvXT1lW29dLmNsb25lKCl9cmV0dXJuIHRoaXMuY2xpcHBpbmdQbGFuZXM9aSx0aGlzLmNsaXBJbnRlcnNlY3Rpb249dC5jbGlwSW50ZXJzZWN0aW9uLHRoaXMuY2xpcFNoYWRvd3M9dC5jbGlwU2hhZG93cyx0aGlzLnNoYWRvd1NpZGU9dC5zaGFkb3dTaWRlLHRoaXMuY29sb3JXcml0ZT10LmNvbG9yV3JpdGUsdGhpcy5hbHBoYVdyaXRlPXQuYWxwaGFXcml0ZSx0aGlzLnByZWNpc2lvbj10LnByZWNpc2lvbix0aGlzLnBvbHlnb25PZmZzZXQ9dC5wb2x5Z29uT2Zmc2V0LHRoaXMucG9seWdvbk9mZnNldEZhY3Rvcj10LnBvbHlnb25PZmZzZXRGYWN0b3IsdGhpcy5wb2x5Z29uT2Zmc2V0VW5pdHM9dC5wb2x5Z29uT2Zmc2V0VW5pdHMsdGhpcy5kaXRoZXJpbmc9dC5kaXRoZXJpbmcsdGhpcy5hbHBoYVRlc3Q9dC5hbHBoYVRlc3QsdGhpcy5hbHBoYVRvQ292ZXJhZ2U9dC5hbHBoYVRvQ292ZXJhZ2UsdGhpcy5wcmVtdWx0aXBsaWVkQWxwaGE9dC5wcmVtdWx0aXBsaWVkQWxwaGEsdGhpcy52aXNpYmxlPXQudmlzaWJsZSx0aGlzLnRvbmVNYXBwZWQ9dC50b25lTWFwcGVkLHRoaXMudXNlckRhdGE9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0LnVzZXJEYXRhKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfX07aHMucHJvdG90eXBlLmlzTWF0ZXJpYWw9ITA7dmFyIEdnPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9Ik1lc2hCYXNpY01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319O0dnLnByb3RvdHlwZS5pc01lc2hCYXNpY01hdGVyaWFsPSEwO3ZhciBFcj1uZXcgaWUsSU89bmV3IGF0LFlyPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtpZihBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogYXJyYXkgc2hvdWxkIGJlIGEgVHlwZWQgQXJyYXkuIik7dGhpcy5uYW1lPSIiLHRoaXMuYXJyYXk9dCx0aGlzLml0ZW1TaXplPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLm5vcm1hbGl6ZWQ9ITA9PT1pLHRoaXMudXNhZ2U9cVMsdGhpcy51cGRhdGVSYW5nZT17b2Zmc2V0OjAsY291bnQ6LTF9LHRoaXMudmVyc2lvbj0wfW9uVXBsb2FkQ2FsbGJhY2soKXt9c2V0IG5lZWRzVXBkYXRlKHQpeyEwPT09dCYmdGhpcy52ZXJzaW9uKyt9c2V0VXNhZ2UodCl7cmV0dXJuIHRoaXMudXNhZ2U9dCx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubmFtZT10Lm5hbWUsdGhpcy5hcnJheT1uZXcgdC5hcnJheS5jb25zdHJ1Y3Rvcih0LmFycmF5KSx0aGlzLml0ZW1TaXplPXQuaXRlbVNpemUsdGhpcy5jb3VudD10LmNvdW50LHRoaXMubm9ybWFsaXplZD10Lm5vcm1hbGl6ZWQsdGhpcy51c2FnZT10LnVzYWdlLHRoaXN9Y29weUF0KHQsZSxpKXt0Kj10aGlzLml0ZW1TaXplLGkqPWUuaXRlbVNpemU7Zm9yKGxldCByPTAsbz10aGlzLml0ZW1TaXplO3I8bztyKyspdGhpcy5hcnJheVt0K3JdPWUuYXJyYXlbaStyXTtyZXR1cm4gdGhpc31jb3B5QXJyYXkodCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQpLHRoaXN9Y29weUNvbG9yc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weUNvbG9yc0FycmF5KCk6IGNvbG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgdm4pLGVbaSsrXT1zLnIsZVtpKytdPXMuZyxlW2krK109cy5ifXJldHVybiB0aGlzfWNvcHlWZWN0b3Iyc0FycmF5KHQpe2xldCBlPXRoaXMuYXJyYXksaT0wO2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7cjxvO3IrKyl7bGV0IHM9dFtyXTt2b2lkIDA9PT1zJiYoY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGUuY29weVZlY3RvcjJzQXJyYXkoKTogdmVjdG9yIGlzIHVuZGVmaW5lZCIscikscz1uZXcgYXQpLGVbaSsrXT1zLngsZVtpKytdPXMueX1yZXR1cm4gdGhpc31jb3B5VmVjdG9yM3NBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3Izc0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3IGllKSxlW2krK109cy54LGVbaSsrXT1zLnksZVtpKytdPXMuen1yZXR1cm4gdGhpc31jb3B5VmVjdG9yNHNBcnJheSh0KXtsZXQgZT10aGlzLmFycmF5LGk9MDtmb3IobGV0IHI9MCxvPXQubGVuZ3RoO3I8bztyKyspe2xldCBzPXRbcl07dm9pZCAwPT09cyYmKGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlLmNvcHlWZWN0b3I0c0FycmF5KCk6IHZlY3RvciBpcyB1bmRlZmluZWQiLHIpLHM9bmV3IGFyKSxlW2krK109cy54LGVbaSsrXT1zLnksZVtpKytdPXMueixlW2krK109cy53fXJldHVybiB0aGlzfWFwcGx5TWF0cml4Myh0KXtpZigyPT09dGhpcy5pdGVtU2l6ZSlmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylJTy5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsZSksSU8uYXBwbHlNYXRyaXgzKHQpLHRoaXMuc2V0WFkoZSxJTy54LElPLnkpO2Vsc2UgaWYoMz09PXRoaXMuaXRlbVNpemUpZm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspRXIuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLGUpLEVyLmFwcGx5TWF0cml4Myh0KSx0aGlzLnNldFhZWihlLEVyLngsRXIueSxFci56KTtyZXR1cm4gdGhpc31hcHBseU1hdHJpeDQodCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspRXIueD10aGlzLmdldFgoZSksRXIueT10aGlzLmdldFkoZSksRXIuej10aGlzLmdldFooZSksRXIuYXBwbHlNYXRyaXg0KHQpLHRoaXMuc2V0WFlaKGUsRXIueCxFci55LEVyLnopO3JldHVybiB0aGlzfWFwcGx5Tm9ybWFsTWF0cml4KHQpe2ZvcihsZXQgZT0wLGk9dGhpcy5jb3VudDtlPGk7ZSsrKUVyLng9dGhpcy5nZXRYKGUpLEVyLnk9dGhpcy5nZXRZKGUpLEVyLno9dGhpcy5nZXRaKGUpLEVyLmFwcGx5Tm9ybWFsTWF0cml4KHQpLHRoaXMuc2V0WFlaKGUsRXIueCxFci55LEVyLnopO3JldHVybiB0aGlzfXRyYW5zZm9ybURpcmVjdGlvbih0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylFci54PXRoaXMuZ2V0WChlKSxFci55PXRoaXMuZ2V0WShlKSxFci56PXRoaXMuZ2V0WihlKSxFci50cmFuc2Zvcm1EaXJlY3Rpb24odCksdGhpcy5zZXRYWVooZSxFci54LEVyLnksRXIueik7cmV0dXJuIHRoaXN9c2V0KHQsZT0wKXtyZXR1cm4gdGhpcy5hcnJheS5zZXQodCxlKSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXX1zZXRYKHQsZSl7cmV0dXJuIHRoaXMuYXJyYXlbdCp0aGlzLml0ZW1TaXplXT1lLHRoaXN9Z2V0WSh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMV19c2V0WSh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsxXT1lLHRoaXN9Z2V0Wih0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrMl19c2V0Wih0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSsyXT1lLHRoaXN9Z2V0Vyh0KXtyZXR1cm4gdGhpcy5hcnJheVt0KnRoaXMuaXRlbVNpemUrM119c2V0Vyh0LGUpe3JldHVybiB0aGlzLmFycmF5W3QqdGhpcy5pdGVtU2l6ZSszXT1lLHRoaXN9c2V0WFkodCxlLGkpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1pLHRoaXN9c2V0WFlaKHQsZSxpLHIpe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1pLHRoaXMuYXJyYXlbdCsyXT1yLHRoaXN9c2V0WFlaVyh0LGUsaSxyLG8pe3JldHVybiB0aGlzLmFycmF5WzArKHQqPXRoaXMuaXRlbVNpemUpXT1lLHRoaXMuYXJyYXlbdCsxXT1pLHRoaXMuYXJyYXlbdCsyXT1yLHRoaXMuYXJyYXlbdCszXT1vLHRoaXN9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5hcnJheSx0aGlzLml0ZW1TaXplKS5jb3B5KHRoaXMpfXRvSlNPTigpe2xldCB0PXtpdGVtU2l6ZTp0aGlzLml0ZW1TaXplLHR5cGU6dGhpcy5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuYXJyYXkpLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfTtyZXR1cm4iIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLHRoaXMudXNhZ2UhPT1xUyYmKHQudXNhZ2U9dGhpcy51c2FnZSksKDAhPT10aGlzLnVwZGF0ZVJhbmdlLm9mZnNldHx8LTEhPT10aGlzLnVwZGF0ZVJhbmdlLmNvdW50KSYmKHQudXBkYXRlUmFuZ2U9dGhpcy51cGRhdGVSYW5nZSksdH19O1lyLnByb3RvdHlwZS5pc0J1ZmZlckF0dHJpYnV0ZT0hMDt2YXIgYWs9Y2xhc3MgZXh0ZW5kcyBZcntjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIobmV3IFVpbnQxNkFycmF5KHQpLGUsaSl9fSxsaz1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDMyQXJyYXkodCksZSxpKX19OyhjbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgVWludDE2QXJyYXkodCksZSxpKX19KS5wcm90b3R5cGUuaXNGbG9hdDE2QnVmZmVyQXR0cmlidXRlPSEwO3ZhciBKcj1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpKXtzdXBlcihuZXcgRmxvYXQzMkFycmF5KHQpLGUsaSl9fSxLOGU9MCxwYz1uZXcgUm4sR2o9bmV3IFhpLFl5PW5ldyBpZSxTbD1uZXcgVGwsUFM9bmV3IFRsLHBzPW5ldyBpZSxucj1jbGFzcyBleHRlbmRzIEVwe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiaWQiLHt2YWx1ZTpLOGUrK30pLHRoaXMudXVpZD1kdSgpLHRoaXMubmFtZT0iIix0aGlzLnR5cGU9IkJ1ZmZlckdlb21ldHJ5Iix0aGlzLmluZGV4PW51bGwsdGhpcy5hdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhBdHRyaWJ1dGVzPXt9LHRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmU9ITEsdGhpcy5ncm91cHM9W10sdGhpcy5ib3VuZGluZ0JveD1udWxsLHRoaXMuYm91bmRpbmdTcGhlcmU9bnVsbCx0aGlzLmRyYXdSYW5nZT17c3RhcnQ6MCxjb3VudDoxLzB9LHRoaXMudXNlckRhdGE9e319Z2V0SW5kZXgoKXtyZXR1cm4gdGhpcy5pbmRleH1zZXRJbmRleCh0KXtyZXR1cm4gdGhpcy5pbmRleD1BcnJheS5pc0FycmF5KHQpP25ldyhPZGUodCk/bGs6YWspKHQsMSk6dCx0aGlzfWdldEF0dHJpYnV0ZSh0KXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW3RdfXNldEF0dHJpYnV0ZSh0LGUpe3JldHVybiB0aGlzLmF0dHJpYnV0ZXNbdF09ZSx0aGlzfWRlbGV0ZUF0dHJpYnV0ZSh0KXtyZXR1cm4gZGVsZXRlIHRoaXMuYXR0cmlidXRlc1t0XSx0aGlzfWhhc0F0dHJpYnV0ZSh0KXtyZXR1cm4gdm9pZCAwIT09dGhpcy5hdHRyaWJ1dGVzW3RdfWFkZEdyb3VwKHQsZSxpPTApe3RoaXMuZ3JvdXBzLnB1c2goe3N0YXJ0OnQsY291bnQ6ZSxtYXRlcmlhbEluZGV4Oml9KX1jbGVhckdyb3Vwcygpe3RoaXMuZ3JvdXBzPVtdfXNldERyYXdSYW5nZSh0LGUpe3RoaXMuZHJhd1JhbmdlLnN0YXJ0PXQsdGhpcy5kcmF3UmFuZ2UuY291bnQ9ZX1hcHBseU1hdHJpeDQodCl7bGV0IGU9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uO3ZvaWQgMCE9PWUmJihlLmFwcGx5TWF0cml4NCh0KSxlLm5lZWRzVXBkYXRlPSEwKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXMubm9ybWFsO2lmKHZvaWQgMCE9PWkpe2xldCBvPShuZXcgSm8pLmdldE5vcm1hbE1hdHJpeCh0KTtpLmFwcGx5Tm9ybWFsTWF0cml4KG8pLGkubmVlZHNVcGRhdGU9ITB9bGV0IHI9dGhpcy5hdHRyaWJ1dGVzLnRhbmdlbnQ7cmV0dXJuIHZvaWQgMCE9PXImJihyLnRyYW5zZm9ybURpcmVjdGlvbih0KSxyLm5lZWRzVXBkYXRlPSEwKSxudWxsIT09dGhpcy5ib3VuZGluZ0JveCYmdGhpcy5jb21wdXRlQm91bmRpbmdCb3goKSxudWxsIT09dGhpcy5ib3VuZGluZ1NwaGVyZSYmdGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUoKSx0aGlzfWFwcGx5UXVhdGVybmlvbih0KXtyZXR1cm4gcGMubWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24odCksdGhpcy5hcHBseU1hdHJpeDQocGMpLHRoaXN9cm90YXRlWCh0KXtyZXR1cm4gcGMubWFrZVJvdGF0aW9uWCh0KSx0aGlzLmFwcGx5TWF0cml4NChwYyksdGhpc31yb3RhdGVZKHQpe3JldHVybiBwYy5tYWtlUm90YXRpb25ZKHQpLHRoaXMuYXBwbHlNYXRyaXg0KHBjKSx0aGlzfXJvdGF0ZVoodCl7cmV0dXJuIHBjLm1ha2VSb3RhdGlvbloodCksdGhpcy5hcHBseU1hdHJpeDQocGMpLHRoaXN9dHJhbnNsYXRlKHQsZSxpKXtyZXR1cm4gcGMubWFrZVRyYW5zbGF0aW9uKHQsZSxpKSx0aGlzLmFwcGx5TWF0cml4NChwYyksdGhpc31zY2FsZSh0LGUsaSl7cmV0dXJuIHBjLm1ha2VTY2FsZSh0LGUsaSksdGhpcy5hcHBseU1hdHJpeDQocGMpLHRoaXN9bG9va0F0KHQpe3JldHVybiBHai5sb29rQXQodCksR2oudXBkYXRlTWF0cml4KCksdGhpcy5hcHBseU1hdHJpeDQoR2oubWF0cml4KSx0aGlzfWNlbnRlcigpe3JldHVybiB0aGlzLmNvbXB1dGVCb3VuZGluZ0JveCgpLHRoaXMuYm91bmRpbmdCb3guZ2V0Q2VudGVyKFl5KS5uZWdhdGUoKSx0aGlzLnRyYW5zbGF0ZShZeS54LFl5LnksWXkueiksdGhpc31zZXRGcm9tUG9pbnRzKHQpe2xldCBlPVtdO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl7bGV0IG89dFtpXTtlLnB1c2goby54LG8ueSxvLnp8fDApfXJldHVybiB0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihlLDMpKSx0aGlzfWNvbXB1dGVCb3VuZGluZ0JveCgpe251bGw9PT10aGlzLmJvdW5kaW5nQm94JiYodGhpcy5ib3VuZGluZ0JveD1uZXcgVGwpO2xldCB0PXRoaXMuYXR0cmlidXRlcy5wb3NpdGlvbixlPXRoaXMubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uO2lmKHQmJnQuaXNHTEJ1ZmZlckF0dHJpYnV0ZSlyZXR1cm4gY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk6IEdMQnVmZmVyQXR0cmlidXRlIHJlcXVpcmVzIGEgbWFudWFsIGJvdW5kaW5nIGJveC4gQWx0ZXJuYXRpdmVseSBzZXQgIm1lc2guZnJ1c3R1bUN1bGxlZCIgdG8gImZhbHNlIi4nLHRoaXMpLHZvaWQgdGhpcy5ib3VuZGluZ0JveC5zZXQobmV3IGllKC0xLzAsLTEvMCwtMS8wKSxuZXcgaWUoMS8wLDEvMCwxLzApKTtpZih2b2lkIDAhPT10KXtpZih0aGlzLmJvdW5kaW5nQm94LnNldEZyb21CdWZmZXJBdHRyaWJ1dGUodCksZSlmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2k8cjtpKyspU2wuc2V0RnJvbUJ1ZmZlckF0dHJpYnV0ZShlW2ldKSx0aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPyhwcy5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWluLFNsLm1pbiksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHBzKSxwcy5hZGRWZWN0b3JzKHRoaXMuYm91bmRpbmdCb3gubWF4LFNsLm1heCksdGhpcy5ib3VuZGluZ0JveC5leHBhbmRCeVBvaW50KHBzKSk6KHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChTbC5taW4pLHRoaXMuYm91bmRpbmdCb3guZXhwYW5kQnlQb2ludChTbC5tYXgpKX1lbHNlIHRoaXMuYm91bmRpbmdCb3gubWFrZUVtcHR5KCk7KGlzTmFOKHRoaXMuYm91bmRpbmdCb3gubWluLngpfHxpc05hTih0aGlzLmJvdW5kaW5nQm94Lm1pbi55KXx8aXNOYU4odGhpcy5ib3VuZGluZ0JveC5taW4ueikpJiZjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTogQ29tcHV0ZWQgbWluL21heCBoYXZlIE5hTiB2YWx1ZXMuIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9Y29tcHV0ZUJvdW5kaW5nU3BoZXJlKCl7bnVsbD09PXRoaXMuYm91bmRpbmdTcGhlcmUmJih0aGlzLmJvdW5kaW5nU3BoZXJlPW5ldyB4Zik7bGV0IHQ9dGhpcy5hdHRyaWJ1dGVzLnBvc2l0aW9uLGU9dGhpcy5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb247aWYodCYmdC5pc0dMQnVmZmVyQXR0cmlidXRlKXJldHVybiBjb25zb2xlLmVycm9yKCdUSFJFRS5CdWZmZXJHZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTogR0xCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgYSBtYW51YWwgYm91bmRpbmcgc3BoZXJlLiBBbHRlcm5hdGl2ZWx5IHNldCAibWVzaC5mcnVzdHVtQ3VsbGVkIiB0byAiZmFsc2UiLicsdGhpcyksdm9pZCB0aGlzLmJvdW5kaW5nU3BoZXJlLnNldChuZXcgaWUsMS8wKTtpZih0KXtsZXQgaT10aGlzLmJvdW5kaW5nU3BoZXJlLmNlbnRlcjtpZihTbC5zZXRGcm9tQnVmZmVyQXR0cmlidXRlKHQpLGUpZm9yKGxldCBvPTAscz1lLmxlbmd0aDtvPHM7bysrKVBTLnNldEZyb21CdWZmZXJBdHRyaWJ1dGUoZVtvXSksdGhpcy5tb3JwaFRhcmdldHNSZWxhdGl2ZT8ocHMuYWRkVmVjdG9ycyhTbC5taW4sUFMubWluKSxTbC5leHBhbmRCeVBvaW50KHBzKSxwcy5hZGRWZWN0b3JzKFNsLm1heCxQUy5tYXgpLFNsLmV4cGFuZEJ5UG9pbnQocHMpKTooU2wuZXhwYW5kQnlQb2ludChQUy5taW4pLFNsLmV4cGFuZEJ5UG9pbnQoUFMubWF4KSk7U2wuZ2V0Q2VudGVyKGkpO2xldCByPTA7Zm9yKGxldCBvPTAscz10LmNvdW50O288cztvKyspcHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LG8pLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHBzKSk7aWYoZSlmb3IobGV0IG89MCxzPWUubGVuZ3RoO288cztvKyspe2xldCBhPWVbb10sbD10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2ZvcihsZXQgYz0wLHU9YS5jb3VudDtjPHU7YysrKXBzLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxjKSxsJiYoWXkuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGMpLHBzLmFkZChZeSkpLHI9TWF0aC5tYXgocixpLmRpc3RhbmNlVG9TcXVhcmVkKHBzKSl9dGhpcy5ib3VuZGluZ1NwaGVyZS5yYWRpdXM9TWF0aC5zcXJ0KHIpLGlzTmFOKHRoaXMuYm91bmRpbmdTcGhlcmUucmFkaXVzKSYmY29uc29sZS5lcnJvcignVEhSRUUuQnVmZmVyR2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk6IENvbXB1dGVkIHJhZGl1cyBpcyBOYU4uIFRoZSAicG9zaXRpb24iIGF0dHJpYnV0ZSBpcyBsaWtlbHkgdG8gaGF2ZSBOYU4gdmFsdWVzLicsdGhpcyl9fWNvbXB1dGVUYW5nZW50cygpe2xldCB0PXRoaXMuaW5kZXgsZT10aGlzLmF0dHJpYnV0ZXM7aWYobnVsbD09PXR8fHZvaWQgMD09PWUucG9zaXRpb258fHZvaWQgMD09PWUubm9ybWFsfHx2b2lkIDA9PT1lLnV2KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZVRhbmdlbnRzKCkgZmFpbGVkLiBNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKGluZGV4LCBwb3NpdGlvbiwgbm9ybWFsIG9yIHV2KSIpO2xldCBpPXQuYXJyYXkscj1lLnBvc2l0aW9uLmFycmF5LG89ZS5ub3JtYWwuYXJyYXkscz1lLnV2LmFycmF5LGE9ci5sZW5ndGgvMzt2b2lkIDA9PT1lLnRhbmdlbnQmJnRoaXMuc2V0QXR0cmlidXRlKCJ0YW5nZW50IixuZXcgWXIobmV3IEZsb2F0MzJBcnJheSg0KmEpLDQpKTtsZXQgbD1lLnRhbmdlbnQuYXJyYXksYz1bXSx1PVtdO2ZvcihsZXQgaGU9MDtoZTxhO2hlKyspY1toZV09bmV3IGllLHVbaGVdPW5ldyBpZTtsZXQgZD1uZXcgaWUscD1uZXcgaWUsaD1uZXcgaWUsZj1uZXcgYXQsbT1uZXcgYXQseD1uZXcgYXQsZz1uZXcgaWUsYj1uZXcgaWU7ZnVuY3Rpb24gRChoZSx3LEYpe2QuZnJvbUFycmF5KHIsMypoZSkscC5mcm9tQXJyYXkociwzKncpLGguZnJvbUFycmF5KHIsMypGKSxmLmZyb21BcnJheShzLDIqaGUpLG0uZnJvbUFycmF5KHMsMip3KSx4LmZyb21BcnJheShzLDIqRikscC5zdWIoZCksaC5zdWIoZCksbS5zdWIoZikseC5zdWIoZik7bGV0IHE9MS8obS54KngueS14LngqbS55KTshaXNGaW5pdGUocSl8fChnLmNvcHkocCkubXVsdGlwbHlTY2FsYXIoeC55KS5hZGRTY2FsZWRWZWN0b3IoaCwtbS55KS5tdWx0aXBseVNjYWxhcihxKSxiLmNvcHkoaCkubXVsdGlwbHlTY2FsYXIobS54KS5hZGRTY2FsZWRWZWN0b3IocCwteC54KS5tdWx0aXBseVNjYWxhcihxKSxjW2hlXS5hZGQoZyksY1t3XS5hZGQoZyksY1tGXS5hZGQoZyksdVtoZV0uYWRkKGIpLHVbd10uYWRkKGIpLHVbRl0uYWRkKGIpKX1sZXQgVD10aGlzLmdyb3VwczswPT09VC5sZW5ndGgmJihUPVt7c3RhcnQ6MCxjb3VudDppLmxlbmd0aH1dKTtmb3IobGV0IGhlPTAsdz1ULmxlbmd0aDtoZTx3OysraGUpe2xldCBGPVRbaGVdLHE9Ri5zdGFydDtmb3IobGV0IGRlPXEsWT1xK0YuY291bnQ7ZGU8WTtkZSs9MylEKGlbZGUrMF0saVtkZSsxXSxpW2RlKzJdKX1sZXQgaz1uZXcgaWUsWj1uZXcgaWUsej1uZXcgaWUsZmU9bmV3IGllO2Z1bmN0aW9uIHVlKGhlKXt6LmZyb21BcnJheShvLDMqaGUpLGZlLmNvcHkoeik7bGV0IHc9Y1toZV07ay5jb3B5KHcpLGsuc3ViKHoubXVsdGlwbHlTY2FsYXIoei5kb3QodykpKS5ub3JtYWxpemUoKSxaLmNyb3NzVmVjdG9ycyhmZSx3KTtsZXQgcT1aLmRvdCh1W2hlXSk8MD8tMToxO2xbNCpoZV09ay54LGxbNCpoZSsxXT1rLnksbFs0KmhlKzJdPWsueixsWzQqaGUrM109cX1mb3IobGV0IGhlPTAsdz1ULmxlbmd0aDtoZTx3OysraGUpe2xldCBGPVRbaGVdLHE9Ri5zdGFydDtmb3IobGV0IGRlPXEsWT1xK0YuY291bnQ7ZGU8WTtkZSs9Myl1ZShpW2RlKzBdKSx1ZShpW2RlKzFdKSx1ZShpW2RlKzJdKX19Y29tcHV0ZVZlcnRleE5vcm1hbHMoKXtsZXQgdD10aGlzLmluZGV4LGU9dGhpcy5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIik7aWYodm9pZCAwIT09ZSl7bGV0IGk9dGhpcy5nZXRBdHRyaWJ1dGUoIm5vcm1hbCIpO2lmKHZvaWQgMD09PWkpaT1uZXcgWXIobmV3IEZsb2F0MzJBcnJheSgzKmUuY291bnQpLDMpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLGkpO2Vsc2UgZm9yKGxldCBwPTAsaD1pLmNvdW50O3A8aDtwKyspaS5zZXRYWVoocCwwLDAsMCk7bGV0IHI9bmV3IGllLG89bmV3IGllLHM9bmV3IGllLGE9bmV3IGllLGw9bmV3IGllLGM9bmV3IGllLHU9bmV3IGllLGQ9bmV3IGllO2lmKHQpZm9yKGxldCBwPTAsaD10LmNvdW50O3A8aDtwKz0zKXtsZXQgZj10LmdldFgocCswKSxtPXQuZ2V0WChwKzEpLHg9dC5nZXRYKHArMik7ci5mcm9tQnVmZmVyQXR0cmlidXRlKGUsZiksby5mcm9tQnVmZmVyQXR0cmlidXRlKGUsbSkscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUseCksdS5zdWJWZWN0b3JzKHMsbyksZC5zdWJWZWN0b3JzKHIsbyksdS5jcm9zcyhkKSxhLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxmKSxsLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSxtKSxjLmZyb21CdWZmZXJBdHRyaWJ1dGUoaSx4KSxhLmFkZCh1KSxsLmFkZCh1KSxjLmFkZCh1KSxpLnNldFhZWihmLGEueCxhLnksYS56KSxpLnNldFhZWihtLGwueCxsLnksbC56KSxpLnNldFhZWih4LGMueCxjLnksYy56KX1lbHNlIGZvcihsZXQgcD0wLGg9ZS5jb3VudDtwPGg7cCs9MylyLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxwKzApLG8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHArMSkscy5mcm9tQnVmZmVyQXR0cmlidXRlKGUscCsyKSx1LnN1YlZlY3RvcnMocyxvKSxkLnN1YlZlY3RvcnMocixvKSx1LmNyb3NzKGQpLGkuc2V0WFlaKHArMCx1LngsdS55LHUueiksaS5zZXRYWVoocCsxLHUueCx1LnksdS56KSxpLnNldFhZWihwKzIsdS54LHUueSx1LnopO3RoaXMubm9ybWFsaXplTm9ybWFscygpLGkubmVlZHNVcGRhdGU9ITB9fW1lcmdlKHQsZSl7aWYoIXR8fCF0LmlzQnVmZmVyR2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnkubWVyZ2UoKTogZ2VvbWV0cnkgbm90IGFuIGluc3RhbmNlIG9mIFRIUkVFLkJ1ZmZlckdlb21ldHJ5LiIsdCk7dm9pZCAwPT09ZSYmKGU9MCxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5Lm1lcmdlKCk6IE92ZXJ3cml0aW5nIG9yaWdpbmFsIGdlb21ldHJ5LCBzdGFydGluZyBhdCBvZmZzZXQ9MC4gVXNlIEJ1ZmZlckdlb21ldHJ5VXRpbHMubWVyZ2VCdWZmZXJHZW9tZXRyaWVzKCkgZm9yIGxvc3NsZXNzIG1lcmdlLiIpKTtsZXQgaT10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCByIGluIGkpe2lmKHZvaWQgMD09PXQuYXR0cmlidXRlc1tyXSljb250aW51ZTtsZXQgcz1pW3JdLmFycmF5LGE9dC5hdHRyaWJ1dGVzW3JdLGw9YS5hcnJheSxjPWEuaXRlbVNpemUqZSx1PU1hdGgubWluKGwubGVuZ3RoLHMubGVuZ3RoLWMpO2ZvcihsZXQgZD0wLHA9YztkPHU7ZCsrLHArKylzW3BdPWxbZF19cmV0dXJuIHRoaXN9bm9ybWFsaXplTm9ybWFscygpe2xldCB0PXRoaXMuYXR0cmlidXRlcy5ub3JtYWw7Zm9yKGxldCBlPTAsaT10LmNvdW50O2U8aTtlKyspcHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0LGUpLHBzLm5vcm1hbGl6ZSgpLHQuc2V0WFlaKGUscHMueCxwcy55LHBzLnopfXRvTm9uSW5kZXhlZCgpe2Z1bmN0aW9uIHQoYSxsKXtsZXQgYz1hLmFycmF5LHU9YS5pdGVtU2l6ZSxkPWEubm9ybWFsaXplZCxwPW5ldyBjLmNvbnN0cnVjdG9yKGwubGVuZ3RoKnUpLGg9MCxmPTA7Zm9yKGxldCBtPTAseD1sLmxlbmd0aDttPHg7bSsrKXtoPWEuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZT9sW21dKmEuZGF0YS5zdHJpZGUrYS5vZmZzZXQ6bFttXSp1O2ZvcihsZXQgZz0wO2c8dTtnKyspcFtmKytdPWNbaCsrXX1yZXR1cm4gbmV3IFlyKHAsdSxkKX1pZihudWxsPT09dGhpcy5pbmRleClyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeS50b05vbkluZGV4ZWQoKTogQnVmZmVyR2VvbWV0cnkgaXMgYWxyZWFkeSBub24taW5kZXhlZC4iKSx0aGlzO2xldCBlPW5ldyBucixpPXRoaXMuaW5kZXguYXJyYXkscj10aGlzLmF0dHJpYnV0ZXM7Zm9yKGxldCBhIGluIHIpe2xldCBjPXQoclthXSxpKTtlLnNldEF0dHJpYnV0ZShhLGMpfWxldCBvPXRoaXMubW9ycGhBdHRyaWJ1dGVzO2ZvcihsZXQgYSBpbiBvKXtsZXQgbD1bXSxjPW9bYV07Zm9yKGxldCB1PTAsZD1jLmxlbmd0aDt1PGQ7dSsrKXtsZXQgaD10KGNbdV0saSk7bC5wdXNoKGgpfWUubW9ycGhBdHRyaWJ1dGVzW2FdPWx9ZS5tb3JwaFRhcmdldHNSZWxhdGl2ZT10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlO2xldCBzPXRoaXMuZ3JvdXBzO2ZvcihsZXQgYT0wLGw9cy5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9c1thXTtlLmFkZEdyb3VwKGMuc3RhcnQsYy5jb3VudCxjLm1hdGVyaWFsSW5kZXgpfXJldHVybiBlfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQnVmZmVyR2VvbWV0cnkiLGdlbmVyYXRvcjoiQnVmZmVyR2VvbWV0cnkudG9KU09OIn19O2lmKHQudXVpZD10aGlzLnV1aWQsdC50eXBlPXRoaXMudHlwZSwiIiE9PXRoaXMubmFtZSYmKHQubmFtZT10aGlzLm5hbWUpLE9iamVjdC5rZXlzKHRoaXMudXNlckRhdGEpLmxlbmd0aD4wJiYodC51c2VyRGF0YT10aGlzLnVzZXJEYXRhKSx2b2lkIDAhPT10aGlzLnBhcmFtZXRlcnMpe2xldCBsPXRoaXMucGFyYW1ldGVycztmb3IobGV0IGMgaW4gbCl2b2lkIDAhPT1sW2NdJiYodFtjXT1sW2NdKTtyZXR1cm4gdH10LmRhdGE9e2F0dHJpYnV0ZXM6e319O2xldCBlPXRoaXMuaW5kZXg7bnVsbCE9PWUmJih0LmRhdGEuaW5kZXg9e3R5cGU6ZS5hcnJheS5jb25zdHJ1Y3Rvci5uYW1lLGFycmF5OkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUuYXJyYXkpfSk7bGV0IGk9dGhpcy5hdHRyaWJ1dGVzO2ZvcihsZXQgbCBpbiBpKXQuZGF0YS5hdHRyaWJ1dGVzW2xdPWlbbF0udG9KU09OKHQuZGF0YSk7bGV0IHI9e30sbz0hMTtmb3IobGV0IGwgaW4gdGhpcy5tb3JwaEF0dHJpYnV0ZXMpe2xldCBjPXRoaXMubW9ycGhBdHRyaWJ1dGVzW2xdLHU9W107Zm9yKGxldCBkPTAscD1jLmxlbmd0aDtkPHA7ZCsrKXUucHVzaChjW2RdLnRvSlNPTih0LmRhdGEpKTt1Lmxlbmd0aD4wJiYocltsXT11LG89ITApfW8mJih0LmRhdGEubW9ycGhBdHRyaWJ1dGVzPXIsdC5kYXRhLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXRoaXMubW9ycGhUYXJnZXRzUmVsYXRpdmUpO2xldCBzPXRoaXMuZ3JvdXBzO3MubGVuZ3RoPjAmJih0LmRhdGEuZ3JvdXBzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocykpKTtsZXQgYT10aGlzLmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09YSYmKHQuZGF0YS5ib3VuZGluZ1NwaGVyZT17Y2VudGVyOmEuY2VudGVyLnRvQXJyYXkoKSxyYWRpdXM6YS5yYWRpdXN9KSx0fWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfWNvcHkodCl7dGhpcy5pbmRleD1udWxsLHRoaXMuYXR0cmlidXRlcz17fSx0aGlzLm1vcnBoQXR0cmlidXRlcz17fSx0aGlzLmdyb3Vwcz1bXSx0aGlzLmJvdW5kaW5nQm94PW51bGwsdGhpcy5ib3VuZGluZ1NwaGVyZT1udWxsO2xldCBlPXt9O3RoaXMubmFtZT10Lm5hbWU7bGV0IGk9dC5pbmRleDtudWxsIT09aSYmdGhpcy5zZXRJbmRleChpLmNsb25lKGUpKTtsZXQgcj10LmF0dHJpYnV0ZXM7Zm9yKGxldCBjIGluIHIpdGhpcy5zZXRBdHRyaWJ1dGUoYyxyW2NdLmNsb25lKGUpKTtsZXQgbz10Lm1vcnBoQXR0cmlidXRlcztmb3IobGV0IGMgaW4gbyl7bGV0IHU9W10sZD1vW2NdO2ZvcihsZXQgcD0wLGg9ZC5sZW5ndGg7cDxoO3ArKyl1LnB1c2goZFtwXS5jbG9uZShlKSk7dGhpcy5tb3JwaEF0dHJpYnV0ZXNbY109dX10aGlzLm1vcnBoVGFyZ2V0c1JlbGF0aXZlPXQubW9ycGhUYXJnZXRzUmVsYXRpdmU7bGV0IHM9dC5ncm91cHM7Zm9yKGxldCBjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXtsZXQgZD1zW2NdO3RoaXMuYWRkR3JvdXAoZC5zdGFydCxkLmNvdW50LGQubWF0ZXJpYWxJbmRleCl9bGV0IGE9dC5ib3VuZGluZ0JveDtudWxsIT09YSYmKHRoaXMuYm91bmRpbmdCb3g9YS5jbG9uZSgpKTtsZXQgbD10LmJvdW5kaW5nU3BoZXJlO3JldHVybiBudWxsIT09bCYmKHRoaXMuYm91bmRpbmdTcGhlcmU9bC5jbG9uZSgpKSx0aGlzLmRyYXdSYW5nZS5zdGFydD10LmRyYXdSYW5nZS5zdGFydCx0aGlzLmRyYXdSYW5nZS5jb3VudD10LmRyYXdSYW5nZS5jb3VudCx0aGlzLnVzZXJEYXRhPXQudXNlckRhdGEsdm9pZCAwIT09dC5wYXJhbWV0ZXJzJiYodGhpcy5wYXJhbWV0ZXJzPU9iamVjdC5hc3NpZ24oe30sdC5wYXJhbWV0ZXJzKSksdGhpc31kaXNwb3NlKCl7dGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJkaXNwb3NlIn0pfX07bnIucHJvdG90eXBlLmlzQnVmZmVyR2VvbWV0cnk9ITA7dmFyIE91ZT1uZXcgUm4sWHk9bmV3IENmLFdqPW5ldyB4ZixkZj1uZXcgaWUscGY9bmV3IGllLGhmPW5ldyBpZSxxaj1uZXcgaWUsWWo9bmV3IGllLFhqPW5ldyBpZSxQTz1uZXcgaWUsUk89bmV3IGllLE9PPW5ldyBpZSxrTz1uZXcgYXQsRk89bmV3IGF0LE5PPW5ldyBhdCxRaj1uZXcgaWUsTE89bmV3IGllLFZvPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IodD1uZXcgbnIsZT1uZXcgR2cpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10Lm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyYmKHRoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPXQubW9ycGhUYXJnZXRJbmZsdWVuY2VzLnNsaWNlKCkpLHZvaWQgMCE9PXQubW9ycGhUYXJnZXREaWN0aW9uYXJ5JiYodGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9T2JqZWN0LmFzc2lnbih7fSx0Lm1vcnBoVGFyZ2V0RGljdGlvbmFyeSkpLHRoaXMubWF0ZXJpYWw9dC5tYXRlcmlhbCx0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpc311cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC51cGRhdGVNb3JwaFRhcmdldHMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfX1yYXljYXN0KHQsZSl7bGV0IHMsaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRlcmlhbCxvPXRoaXMubWF0cml4V29ybGQ7aWYodm9pZCAwIT09ciYmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFdqLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksV2ouYXBwbHlNYXRyaXg0KG8pLCExIT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShXaikpJiYoT3VlLmNvcHkobykuaW52ZXJ0KCksWHkuY29weSh0LnJheSkuYXBwbHlNYXRyaXg0KE91ZSksbnVsbD09PWkuYm91bmRpbmdCb3h8fCExIT09WHkuaW50ZXJzZWN0c0JveChpLmJvdW5kaW5nQm94KSkpaWYoaS5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgYT1pLmluZGV4LGw9aS5hdHRyaWJ1dGVzLnBvc2l0aW9uLGM9aS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sdT1pLm1vcnBoVGFyZ2V0c1JlbGF0aXZlLGQ9aS5hdHRyaWJ1dGVzLnV2LHA9aS5hdHRyaWJ1dGVzLnV2MixoPWkuZ3JvdXBzLGY9aS5kcmF3UmFuZ2U7aWYobnVsbCE9PWEpaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG09MCx4PWgubGVuZ3RoO208eDttKyspe2xldCBnPWhbbV0sYj1yW2cubWF0ZXJpYWxJbmRleF07Zm9yKGxldCBrPU1hdGgubWF4KGcuc3RhcnQsZi5zdGFydCksWj1NYXRoLm1pbihhLmNvdW50LE1hdGgubWluKGcuc3RhcnQrZy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtrPFo7ays9Myl7bGV0IHo9YS5nZXRYKGspLGZlPWEuZ2V0WChrKzEpLHVlPWEuZ2V0WChrKzIpO3M9Qk8odGhpcyxiLHQsWHksbCxjLHUsZCxwLHosZmUsdWUpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGsvMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9fWVsc2UgZm9yKGxldCBnPU1hdGgubWF4KDAsZi5zdGFydCksYj1NYXRoLm1pbihhLmNvdW50LGYuc3RhcnQrZi5jb3VudCk7ZzxiO2crPTMpe2xldCBEPWEuZ2V0WChnKSxUPWEuZ2V0WChnKzEpLGs9YS5nZXRYKGcrMik7cz1CTyh0aGlzLHIsdCxYeSxsLGMsdSxkLHAsRCxULGspLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGcvMyksZS5wdXNoKHMpKX1lbHNlIGlmKHZvaWQgMCE9PWwpaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG09MCx4PWgubGVuZ3RoO208eDttKyspe2xldCBnPWhbbV0sYj1yW2cubWF0ZXJpYWxJbmRleF07Zm9yKGxldCBrPU1hdGgubWF4KGcuc3RhcnQsZi5zdGFydCksWj1NYXRoLm1pbihsLmNvdW50LE1hdGgubWluKGcuc3RhcnQrZy5jb3VudCxmLnN0YXJ0K2YuY291bnQpKTtrPFo7ays9MylzPUJPKHRoaXMsYix0LFh5LGwsYyx1LGQscCxrLGsrMSxrKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGsvMykscy5mYWNlLm1hdGVyaWFsSW5kZXg9Zy5tYXRlcmlhbEluZGV4LGUucHVzaChzKSl9ZWxzZSBmb3IobGV0IGc9TWF0aC5tYXgoMCxmLnN0YXJ0KSxiPU1hdGgubWluKGwuY291bnQsZi5zdGFydCtmLmNvdW50KTtnPGI7Zys9MylzPUJPKHRoaXMscix0LFh5LGwsYyx1LGQscCxnLGcrMSxnKzIpLHMmJihzLmZhY2VJbmRleD1NYXRoLmZsb29yKGcvMyksZS5wdXNoKHMpKX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTWVzaC5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19O2Z1bmN0aW9uIEJPKG4sdCxlLGkscixvLHMsYSxsLGMsdSxkKXtkZi5mcm9tQnVmZmVyQXR0cmlidXRlKHIsYykscGYuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLHUpLGhmLmZyb21CdWZmZXJBdHRyaWJ1dGUocixkKTtsZXQgcD1uLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcztpZihvJiZwKXtQTy5zZXQoMCwwLDApLFJPLnNldCgwLDAsMCksT08uc2V0KDAsMCwwKTtmb3IobGV0IGY9MCxtPW8ubGVuZ3RoO2Y8bTtmKyspe2xldCB4PXBbZl0sZz1vW2ZdOzAhPT14JiYocWouZnJvbUJ1ZmZlckF0dHJpYnV0ZShnLGMpLFlqLmZyb21CdWZmZXJBdHRyaWJ1dGUoZyx1KSxYai5mcm9tQnVmZmVyQXR0cmlidXRlKGcsZCkscz8oUE8uYWRkU2NhbGVkVmVjdG9yKHFqLHgpLFJPLmFkZFNjYWxlZFZlY3RvcihZaix4KSxPTy5hZGRTY2FsZWRWZWN0b3IoWGoseCkpOihQTy5hZGRTY2FsZWRWZWN0b3IocWouc3ViKGRmKSx4KSxSTy5hZGRTY2FsZWRWZWN0b3IoWWouc3ViKHBmKSx4KSxPTy5hZGRTY2FsZWRWZWN0b3IoWGouc3ViKGhmKSx4KSkpfWRmLmFkZChQTykscGYuYWRkKFJPKSxoZi5hZGQoT08pfW4uaXNTa2lubmVkTWVzaCYmKG4uYm9uZVRyYW5zZm9ybShjLGRmKSxuLmJvbmVUcmFuc2Zvcm0odSxwZiksbi5ib25lVHJhbnNmb3JtKGQsaGYpKTtsZXQgaD1mdW5jdGlvbihuLHQsZSxpLHIsbyxzLGEpe2xldCBsO2lmKGw9MT09PXQuc2lkZT9pLmludGVyc2VjdFRyaWFuZ2xlKHMsbyxyLCEwLGEpOmkuaW50ZXJzZWN0VHJpYW5nbGUocixvLHMsMiE9PXQuc2lkZSxhKSxudWxsPT09bClyZXR1cm4gbnVsbDtMTy5jb3B5KGEpLExPLmFwcGx5TWF0cml4NChuLm1hdHJpeFdvcmxkKTtsZXQgYz1lLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhMTyk7cmV0dXJuIGM8ZS5uZWFyfHxjPmUuZmFyP251bGw6e2Rpc3RhbmNlOmMscG9pbnQ6TE8uY2xvbmUoKSxvYmplY3Q6bn19KG4sdCxlLGksZGYscGYsaGYsUWopO2lmKGgpe2EmJihrTy5mcm9tQnVmZmVyQXR0cmlidXRlKGEsYyksRk8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShhLHUpLE5PLmZyb21CdWZmZXJBdHRyaWJ1dGUoYSxkKSxoLnV2PWxvLmdldFVWKFFqLGRmLHBmLGhmLGtPLEZPLE5PLG5ldyBhdCkpLGwmJihrTy5mcm9tQnVmZmVyQXR0cmlidXRlKGwsYyksRk8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShsLHUpLE5PLmZyb21CdWZmZXJBdHRyaWJ1dGUobCxkKSxoLnV2Mj1sby5nZXRVVihRaixkZixwZixoZixrTyxGTyxOTyxuZXcgYXQpKTtsZXQgZj17YTpjLGI6dSxjOmQsbm9ybWFsOm5ldyBpZSxtYXRlcmlhbEluZGV4OjB9O2xvLmdldE5vcm1hbChkZixwZixoZixmLm5vcm1hbCksaC5mYWNlPWZ9cmV0dXJuIGh9Vm8ucHJvdG90eXBlLmlzTWVzaD0hMDt2YXIgV2c9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PTEsZT0xLGk9MSxyPTEsbz0xLHM9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IkJveEdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3dpZHRoOnQsaGVpZ2h0OmUsZGVwdGg6aSx3aWR0aFNlZ21lbnRzOnIsaGVpZ2h0U2VnbWVudHM6byxkZXB0aFNlZ21lbnRzOnN9O2xldCBhPXRoaXM7cj1NYXRoLmZsb29yKHIpLG89TWF0aC5mbG9vcihvKSxzPU1hdGguZmxvb3Iocyk7bGV0IGw9W10sYz1bXSx1PVtdLGQ9W10scD0wLGg9MDtmdW5jdGlvbiBmKG0seCxnLGIsRCxULGssWix6LGZlLHVlKXtsZXQgaGU9VC96LHc9ay9mZSxGPVQvMixxPWsvMixLPVovMixkZT16KzEsWT1mZSsxLGFlPTAsbGU9MCxJZT1uZXcgaWU7Zm9yKGxldCB2ZT0wO3ZlPFk7dmUrKyl7bGV0IERlPXZlKnctcTtmb3IobGV0IG50PTA7bnQ8ZGU7bnQrKylJZVttXT0obnQqaGUtRikqYixJZVt4XT1EZSpELEllW2ddPUssYy5wdXNoKEllLngsSWUueSxJZS56KSxJZVttXT0wLEllW3hdPTAsSWVbZ109Wj4wPzE6LTEsdS5wdXNoKEllLngsSWUueSxJZS56KSxkLnB1c2gobnQveiksZC5wdXNoKDEtdmUvZmUpLGFlKz0xfWZvcihsZXQgdmU9MDt2ZTxmZTt2ZSsrKWZvcihsZXQgRGU9MDtEZTx6O0RlKyspe2xldCBndD1wK0RlK2RlKih2ZSsxKSxVZT1wKyhEZSsxKStkZSoodmUrMSksQWU9cCsoRGUrMSkrZGUqdmU7bC5wdXNoKHArRGUrZGUqdmUsZ3QsQWUpLGwucHVzaChndCxVZSxBZSksbGUrPTZ9YS5hZGRHcm91cChoLGxlLHVlKSxoKz1sZSxwKz1hZX1mKCJ6IiwieSIsIngiLC0xLC0xLGksZSx0LHMsbywwKSxmKCJ6IiwieSIsIngiLDEsLTEsaSxlLC10LHMsbywxKSxmKCJ4IiwieiIsInkiLDEsMSx0LGksZSxyLHMsMiksZigieCIsInoiLCJ5IiwxLC0xLHQsaSwtZSxyLHMsMyksZigieCIsInkiLCJ6IiwxLC0xLHQsZSxpLHIsbyw0KSxmKCJ4IiwieSIsInoiLC0xLC0xLHQsZSwtaSxyLG8sNSksdGhpcy5zZXRJbmRleChsKSx0aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihjLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgibm9ybWFsIixuZXcgSnIodSwzKSksdGhpcy5zZXRBdHRyaWJ1dGUoInV2IixuZXcgSnIoZCwyKSl9c3RhdGljIGZyb21KU09OKHQpe3JldHVybiBuZXcgV2codC53aWR0aCx0LmhlaWdodCx0LmRlcHRoLHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzLHQuZGVwdGhTZWdtZW50cyl9fTtmdW5jdGlvbiBmYihuKXtsZXQgdD17fTtmb3IobGV0IGUgaW4gbil7dFtlXT17fTtmb3IobGV0IGkgaW4gbltlXSl7bGV0IHI9bltlXVtpXTt0W2VdW2ldPXImJihyLmlzQ29sb3J8fHIuaXNNYXRyaXgzfHxyLmlzTWF0cml4NHx8ci5pc1ZlY3RvcjJ8fHIuaXNWZWN0b3IzfHxyLmlzVmVjdG9yNHx8ci5pc1RleHR1cmV8fHIuaXNRdWF0ZXJuaW9uKT9yLmNsb25lKCk6QXJyYXkuaXNBcnJheShyKT9yLnNsaWNlKCk6cn19cmV0dXJuIHR9ZnVuY3Rpb24ganMobil7bGV0IHQ9e307Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspe2xldCBpPWZiKG5bZV0pO2ZvcihsZXQgciBpbiBpKXRbcl09aVtyXX1yZXR1cm4gdH12YXIgSjhlPXtjbG9uZTpmYixtZXJnZTpqc30sRHA9Y2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iU2hhZGVyTWF0ZXJpYWwiLHRoaXMuZGVmaW5lcz17fSx0aGlzLnVuaWZvcm1zPXt9LHRoaXMudmVydGV4U2hhZGVyPSJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIHBvc2l0aW9uLCAxLjAgKTtcbn0iLHRoaXMuZnJhZ21lbnRTaGFkZXI9InZvaWQgbWFpbigpIHtcblx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMS4wLCAwLjAsIDAuMCwgMS4wICk7XG59Iix0aGlzLmxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5saWdodHM9ITEsdGhpcy5jbGlwcGluZz0hMSx0aGlzLmV4dGVuc2lvbnM9e2Rlcml2YXRpdmVzOiExLGZyYWdEZXB0aDohMSxkcmF3QnVmZmVyczohMSxzaGFkZXJUZXh0dXJlTE9EOiExfSx0aGlzLmRlZmF1bHRBdHRyaWJ1dGVWYWx1ZXM9e2NvbG9yOlsxLDEsMV0sdXY6WzAsMF0sdXYyOlswLDBdfSx0aGlzLmluZGV4MEF0dHJpYnV0ZU5hbWU9dm9pZCAwLHRoaXMudW5pZm9ybXNOZWVkVXBkYXRlPSExLHRoaXMuZ2xzbFZlcnNpb249bnVsbCx2b2lkIDAhPT10JiYodm9pZCAwIT09dC5hdHRyaWJ1dGVzJiZjb25zb2xlLmVycm9yKCJUSFJFRS5TaGFkZXJNYXRlcmlhbDogYXR0cmlidXRlcyBzaG91bGQgbm93IGJlIGRlZmluZWQgaW4gVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKSx0aGlzLnNldFZhbHVlcyh0KSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZyYWdtZW50U2hhZGVyPXQuZnJhZ21lbnRTaGFkZXIsdGhpcy52ZXJ0ZXhTaGFkZXI9dC52ZXJ0ZXhTaGFkZXIsdGhpcy51bmlmb3Jtcz1mYih0LnVuaWZvcm1zKSx0aGlzLmRlZmluZXM9T2JqZWN0LmFzc2lnbih7fSx0LmRlZmluZXMpLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMubGlnaHRzPXQubGlnaHRzLHRoaXMuY2xpcHBpbmc9dC5jbGlwcGluZyx0aGlzLmV4dGVuc2lvbnM9T2JqZWN0LmFzc2lnbih7fSx0LmV4dGVuc2lvbnMpLHRoaXMuZ2xzbFZlcnNpb249dC5nbHNsVmVyc2lvbix0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7ZS5nbHNsVmVyc2lvbj10aGlzLmdsc2xWZXJzaW9uLGUudW5pZm9ybXM9e307Zm9yKGxldCByIGluIHRoaXMudW5pZm9ybXMpe2xldCBzPXRoaXMudW5pZm9ybXNbcl0udmFsdWU7ZS51bmlmb3Jtc1tyXT1zJiZzLmlzVGV4dHVyZT97dHlwZToidCIsdmFsdWU6cy50b0pTT04odCkudXVpZH06cyYmcy5pc0NvbG9yP3t0eXBlOiJjIix2YWx1ZTpzLmdldEhleCgpfTpzJiZzLmlzVmVjdG9yMj97dHlwZToidjIiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzVmVjdG9yMz97dHlwZToidjMiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzVmVjdG9yND97dHlwZToidjQiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzTWF0cml4Mz97dHlwZToibTMiLHZhbHVlOnMudG9BcnJheSgpfTpzJiZzLmlzTWF0cml4ND97dHlwZToibTQiLHZhbHVlOnMudG9BcnJheSgpfTp7dmFsdWU6c319T2JqZWN0LmtleXModGhpcy5kZWZpbmVzKS5sZW5ndGg+MCYmKGUuZGVmaW5lcz10aGlzLmRlZmluZXMpLGUudmVydGV4U2hhZGVyPXRoaXMudmVydGV4U2hhZGVyLGUuZnJhZ21lbnRTaGFkZXI9dGhpcy5mcmFnbWVudFNoYWRlcjtsZXQgaT17fTtmb3IobGV0IHIgaW4gdGhpcy5leHRlbnNpb25zKSEwPT09dGhpcy5leHRlbnNpb25zW3JdJiYoaVtyXT0hMCk7cmV0dXJuIE9iamVjdC5rZXlzKGkpLmxlbmd0aD4wJiYoZS5leHRlbnNpb25zPWkpLGV9fTtEcC5wcm90b3R5cGUuaXNTaGFkZXJNYXRlcmlhbD0hMDt2YXIgUVM9Y2xhc3MgZXh0ZW5kcyBYaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDYW1lcmEiLHRoaXMubWF0cml4V29ybGRJbnZlcnNlPW5ldyBSbix0aGlzLnByb2plY3Rpb25NYXRyaXg9bmV3IFJuLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2U9bmV3IFJufWNvcHkodCxlKXtyZXR1cm4gc3VwZXIuY29weSh0LGUpLHRoaXMubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodC5tYXRyaXhXb3JsZEludmVyc2UpLHRoaXMucHJvamVjdGlvbk1hdHJpeC5jb3B5KHQucHJvamVjdGlvbk1hdHJpeCksdGhpcy5wcm9qZWN0aW9uTWF0cml4SW52ZXJzZS5jb3B5KHQucHJvamVjdGlvbk1hdHJpeEludmVyc2UpLHRoaXN9Z2V0V29ybGREaXJlY3Rpb24odCl7dGhpcy51cGRhdGVXb3JsZE1hdHJpeCghMCwhMSk7bGV0IGU9dGhpcy5tYXRyaXhXb3JsZC5lbGVtZW50cztyZXR1cm4gdC5zZXQoLWVbOF0sLWVbOV0sLWVbMTBdKS5ub3JtYWxpemUoKX11cGRhdGVNYXRyaXhXb3JsZCh0KXtzdXBlci51cGRhdGVNYXRyaXhXb3JsZCh0KSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfXVwZGF0ZVdvcmxkTWF0cml4KHQsZSl7c3VwZXIudXBkYXRlV29ybGRNYXRyaXgodCxlKSx0aGlzLm1hdHJpeFdvcmxkSW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpfWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07UVMucHJvdG90eXBlLmlzQ2FtZXJhPSEwO3ZhciBXcz1jbGFzcyBleHRlbmRzIFFTe2NvbnN0cnVjdG9yKHQ9NTAsZT0xLGk9LjEscj0yZTMpe3N1cGVyKCksdGhpcy50eXBlPSJQZXJzcGVjdGl2ZUNhbWVyYSIsdGhpcy5mb3Y9dCx0aGlzLnpvb209MSx0aGlzLm5lYXI9aSx0aGlzLmZhcj1yLHRoaXMuZm9jdXM9MTAsdGhpcy5hc3BlY3Q9ZSx0aGlzLnZpZXc9bnVsbCx0aGlzLmZpbG1HYXVnZT0zNSx0aGlzLmZpbG1PZmZzZXQ9MCx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jb3B5KHQsZSl7cmV0dXJuIHN1cGVyLmNvcHkodCxlKSx0aGlzLmZvdj10LmZvdix0aGlzLnpvb209dC56b29tLHRoaXMubmVhcj10Lm5lYXIsdGhpcy5mYXI9dC5mYXIsdGhpcy5mb2N1cz10LmZvY3VzLHRoaXMuYXNwZWN0PXQuYXNwZWN0LHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXMuZmlsbUdhdWdlPXQuZmlsbUdhdWdlLHRoaXMuZmlsbU9mZnNldD10LmZpbG1PZmZzZXQsdGhpc31zZXRGb2NhbExlbmd0aCh0KXtsZXQgZT0uNSp0aGlzLmdldEZpbG1IZWlnaHQoKS90O3RoaXMuZm92PTIqaDgqTWF0aC5hdGFuKGUpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWdldEZvY2FsTGVuZ3RoKCl7bGV0IHQ9TWF0aC50YW4oLjUqRGoqdGhpcy5mb3YpO3JldHVybi41KnRoaXMuZ2V0RmlsbUhlaWdodCgpL3R9Z2V0RWZmZWN0aXZlRk9WKCl7cmV0dXJuIDIqaDgqTWF0aC5hdGFuKE1hdGgudGFuKC41KkRqKnRoaXMuZm92KS90aGlzLnpvb20pfWdldEZpbG1XaWR0aCgpe3JldHVybiB0aGlzLmZpbG1HYXVnZSpNYXRoLm1pbih0aGlzLmFzcGVjdCwxKX1nZXRGaWxtSGVpZ2h0KCl7cmV0dXJuIHRoaXMuZmlsbUdhdWdlL01hdGgubWF4KHRoaXMuYXNwZWN0LDEpfXNldFZpZXdPZmZzZXQodCxlLGkscixvLHMpe3RoaXMuYXNwZWN0PXQvZSxudWxsPT09dGhpcy52aWV3JiYodGhpcy52aWV3PXtlbmFibGVkOiEwLGZ1bGxXaWR0aDoxLGZ1bGxIZWlnaHQ6MSxvZmZzZXRYOjAsb2Zmc2V0WTowLHdpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLnZpZXcuZW5hYmxlZD0hMCx0aGlzLnZpZXcuZnVsbFdpZHRoPXQsdGhpcy52aWV3LmZ1bGxIZWlnaHQ9ZSx0aGlzLnZpZXcub2Zmc2V0WD1pLHRoaXMudmlldy5vZmZzZXRZPXIsdGhpcy52aWV3LndpZHRoPW8sdGhpcy52aWV3LmhlaWdodD1zLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfWNsZWFyVmlld09mZnNldCgpe251bGwhPT10aGlzLnZpZXcmJih0aGlzLnZpZXcuZW5hYmxlZD0hMSksdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9dXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpe2xldCB0PXRoaXMubmVhcixlPXQqTWF0aC50YW4oLjUqRGoqdGhpcy5mb3YpL3RoaXMuem9vbSxpPTIqZSxyPXRoaXMuYXNwZWN0Kmksbz0tLjUqcixzPXRoaXMudmlldztpZihudWxsIT09dGhpcy52aWV3JiZ0aGlzLnZpZXcuZW5hYmxlZCl7bGV0IGw9cy5mdWxsV2lkdGgsYz1zLmZ1bGxIZWlnaHQ7bys9cy5vZmZzZXRYKnIvbCxlLT1zLm9mZnNldFkqaS9jLHIqPXMud2lkdGgvbCxpKj1zLmhlaWdodC9jfWxldCBhPXRoaXMuZmlsbU9mZnNldDswIT09YSYmKG8rPXQqYS90aGlzLmdldEZpbG1XaWR0aCgpKSx0aGlzLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKG8sbytyLGUsZS1pLHQsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LmZvdj10aGlzLmZvdixlLm9iamVjdC56b29tPXRoaXMuem9vbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsZS5vYmplY3QuZm9jdXM9dGhpcy5mb2N1cyxlLm9iamVjdC5hc3BlY3Q9dGhpcy5hc3BlY3QsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlLm9iamVjdC5maWxtR2F1Z2U9dGhpcy5maWxtR2F1Z2UsZS5vYmplY3QuZmlsbU9mZnNldD10aGlzLmZpbG1PZmZzZXQsZX19O1dzLnByb3RvdHlwZS5pc1BlcnNwZWN0aXZlQ2FtZXJhPSEwO3ZhciBLUz1jbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQsZSxpKXtpZihzdXBlcigpLHRoaXMudHlwZT0iQ3ViZUNhbWVyYSIsITAhPT1pLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLkN1YmVDYW1lcmE6IFRoZSBjb25zdHJ1Y3RvciBub3cgZXhwZWN0cyBhbiBpbnN0YW5jZSBvZiBXZWJHTEN1YmVSZW5kZXJUYXJnZXQgYXMgdGhpcmQgcGFyYW1ldGVyLiIpO3RoaXMucmVuZGVyVGFyZ2V0PWk7bGV0IHI9bmV3IFdzKDkwLDEsdCxlKTtyLmxheWVycz10aGlzLmxheWVycyxyLnVwLnNldCgwLC0xLDApLHIubG9va0F0KG5ldyBpZSgxLDAsMCkpLHRoaXMuYWRkKHIpO2xldCBvPW5ldyBXcyg5MCwxLHQsZSk7by5sYXllcnM9dGhpcy5sYXllcnMsby51cC5zZXQoMCwtMSwwKSxvLmxvb2tBdChuZXcgaWUoLTEsMCwwKSksdGhpcy5hZGQobyk7bGV0IHM9bmV3IFdzKDkwLDEsdCxlKTtzLmxheWVycz10aGlzLmxheWVycyxzLnVwLnNldCgwLDAsMSkscy5sb29rQXQobmV3IGllKDAsMSwwKSksdGhpcy5hZGQocyk7bGV0IGE9bmV3IFdzKDkwLDEsdCxlKTthLmxheWVycz10aGlzLmxheWVycyxhLnVwLnNldCgwLDAsLTEpLGEubG9va0F0KG5ldyBpZSgwLC0xLDApKSx0aGlzLmFkZChhKTtsZXQgbD1uZXcgV3MoOTAsMSx0LGUpO2wubGF5ZXJzPXRoaXMubGF5ZXJzLGwudXAuc2V0KDAsLTEsMCksbC5sb29rQXQobmV3IGllKDAsMCwxKSksdGhpcy5hZGQobCk7bGV0IGM9bmV3IFdzKDkwLDEsdCxlKTtjLmxheWVycz10aGlzLmxheWVycyxjLnVwLnNldCgwLC0xLDApLGMubG9va0F0KG5ldyBpZSgwLDAsLTEpKSx0aGlzLmFkZChjKX11cGRhdGUodCxlKXtudWxsPT09dGhpcy5wYXJlbnQmJnRoaXMudXBkYXRlTWF0cml4V29ybGQoKTtsZXQgaT10aGlzLnJlbmRlclRhcmdldCxbcixvLHMsYSxsLGNdPXRoaXMuY2hpbGRyZW4sdT10LnhyLmVuYWJsZWQsZD10LmdldFJlbmRlclRhcmdldCgpO3QueHIuZW5hYmxlZD0hMTtsZXQgcD1pLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzO2kudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9ITEsdC5zZXRSZW5kZXJUYXJnZXQoaSwwKSx0LnJlbmRlcihlLHIpLHQuc2V0UmVuZGVyVGFyZ2V0KGksMSksdC5yZW5kZXIoZSxvKSx0LnNldFJlbmRlclRhcmdldChpLDIpLHQucmVuZGVyKGUscyksdC5zZXRSZW5kZXJUYXJnZXQoaSwzKSx0LnJlbmRlcihlLGEpLHQuc2V0UmVuZGVyVGFyZ2V0KGksNCksdC5yZW5kZXIoZSxsKSxpLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPXAsdC5zZXRSZW5kZXJUYXJnZXQoaSw1KSx0LnJlbmRlcihlLGMpLHQuc2V0UmVuZGVyVGFyZ2V0KGQpLHQueHIuZW5hYmxlZD11LGkudGV4dHVyZS5uZWVkc1BNUkVNVXBkYXRlPSEwfX0sbWI9Y2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1KXtzdXBlcih0PXZvaWQgMCE9PXQ/dDpbXSxlPXZvaWQgMCE9PWU/ZTozMDEsaSxyLG8scyxhLGwsYyx1KSx0aGlzLmZsaXBZPSExfWdldCBpbWFnZXMoKXtyZXR1cm4gdGhpcy5pbWFnZX1zZXQgaW1hZ2VzKHQpe3RoaXMuaW1hZ2U9dH19O21iLnByb3RvdHlwZS5pc0N1YmVUZXh0dXJlPSEwO3ZhciBjaz1jbGFzcyBleHRlbmRzIFdhe2NvbnN0cnVjdG9yKHQsZSxpKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEN1YmVSZW5kZXJUYXJnZXQ6IGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBpcyBub3cgV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KCBzaXplLCBvcHRpb25zICkiKSxlPWkpLHN1cGVyKHQsdCxlKSx0aGlzLnRleHR1cmU9bmV3IG1iKHZvaWQgMCwoZT1lfHx7fSkubWFwcGluZyxlLndyYXBTLGUud3JhcFQsZS5tYWdGaWx0ZXIsZS5taW5GaWx0ZXIsZS5mb3JtYXQsZS50eXBlLGUuYW5pc290cm9weSxlLmVuY29kaW5nKSx0aGlzLnRleHR1cmUuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPSEwLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9dm9pZCAwIT09ZS5nZW5lcmF0ZU1pcG1hcHMmJmUuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9dm9pZCAwIT09ZS5taW5GaWx0ZXI/ZS5taW5GaWx0ZXI6R3N9ZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUodCxlKXt0aGlzLnRleHR1cmUudHlwZT1lLnR5cGUsdGhpcy50ZXh0dXJlLmZvcm1hdD1nYSx0aGlzLnRleHR1cmUuZW5jb2Rpbmc9ZS5lbmNvZGluZyx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzPWUuZ2VuZXJhdGVNaXBtYXBzLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5taW5GaWx0ZXIsdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcj1lLm1hZ0ZpbHRlcjtsZXQgaV91bmlmb3Jtcz17dEVxdWlyZWN0Ont2YWx1ZTpudWxsfX0saV92ZXJ0ZXhTaGFkZXI9IlxuXG5cdFx0XHRcdHZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG5cblx0XHRcdFx0dmVjMyB0cmFuc2Zvcm1EaXJlY3Rpb24oIGluIHZlYzMgZGlyLCBpbiBtYXQ0IG1hdHJpeCApIHtcblxuXHRcdFx0XHRcdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0XHR2V29ybGREaXJlY3Rpb24gPSB0cmFuc2Zvcm1EaXJlY3Rpb24oIHBvc2l0aW9uLCBtb2RlbE1hdHJpeCApO1xuXG5cdFx0XHRcdFx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0XHRcdFx0XHQjaW5jbHVkZSA8cHJvamVjdF92ZXJ0ZXg+XG5cblx0XHRcdFx0fVxuXHRcdFx0IixpX2ZyYWdtZW50U2hhZGVyPSJcblxuXHRcdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0RXF1aXJlY3Q7XG5cblx0XHRcdFx0dmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcblxuXHRcdFx0XHQjaW5jbHVkZSA8Y29tbW9uPlxuXG5cdFx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRcdHZlYzMgZGlyZWN0aW9uID0gbm9ybWFsaXplKCB2V29ybGREaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblxuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCggdEVxdWlyZWN0LCBzYW1wbGVVViApO1xuXG5cdFx0XHRcdH1cblx0XHRcdCIscj1uZXcgV2coNSw1LDUpLG89bmV3IERwKHtuYW1lOiJDdWJlbWFwRnJvbUVxdWlyZWN0Iix1bmlmb3JtczpmYihpX3VuaWZvcm1zKSx2ZXJ0ZXhTaGFkZXI6aV92ZXJ0ZXhTaGFkZXIsZnJhZ21lbnRTaGFkZXI6aV9mcmFnbWVudFNoYWRlcixzaWRlOjEsYmxlbmRpbmc6MH0pO28udW5pZm9ybXMudEVxdWlyZWN0LnZhbHVlPWU7bGV0IHM9bmV3IFZvKHIsbyksYT1lLm1pbkZpbHRlcjtyZXR1cm4gMTAwOD09PWUubWluRmlsdGVyJiYoZS5taW5GaWx0ZXI9R3MpLG5ldyBLUygxLDEwLHRoaXMpLnVwZGF0ZSh0LHMpLGUubWluRmlsdGVyPWEscy5nZW9tZXRyeS5kaXNwb3NlKCkscy5tYXRlcmlhbC5kaXNwb3NlKCksdGhpc31jbGVhcih0LGUsaSxyKXtsZXQgbz10LmdldFJlbmRlclRhcmdldCgpO2ZvcihsZXQgcz0wO3M8NjtzKyspdC5zZXRSZW5kZXJUYXJnZXQodGhpcyxzKSx0LmNsZWFyKGUsaSxyKTt0LnNldFJlbmRlclRhcmdldChvKX19O2NrLnByb3RvdHlwZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD0hMDt2YXIgS2o9bmV3IGllLHRHZT1uZXcgaWUsbkdlPW5ldyBKbyx1dT1jbGFzc3tjb25zdHJ1Y3Rvcih0PW5ldyBpZSgxLDAsMCksZT0wKXt0aGlzLm5vcm1hbD10LHRoaXMuY29uc3RhbnQ9ZX1zZXQodCxlKXtyZXR1cm4gdGhpcy5ub3JtYWwuY29weSh0KSx0aGlzLmNvbnN0YW50PWUsdGhpc31zZXRDb21wb25lbnRzKHQsZSxpLHIpe3JldHVybiB0aGlzLm5vcm1hbC5zZXQodCxlLGkpLHRoaXMuY29uc3RhbnQ9cix0aGlzfXNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHQsZSl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodCksdGhpcy5jb25zdGFudD0tZS5kb3QodGhpcy5ub3JtYWwpLHRoaXN9c2V0RnJvbUNvcGxhbmFyUG9pbnRzKHQsZSxpKXtsZXQgcj1Lai5zdWJWZWN0b3JzKGksZSkuY3Jvc3ModEdlLnN1YlZlY3RvcnModCxlKSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQocix0KSx0aGlzfWNvcHkodCl7cmV0dXJuIHRoaXMubm9ybWFsLmNvcHkodC5ub3JtYWwpLHRoaXMuY29uc3RhbnQ9dC5jb25zdGFudCx0aGlzfW5vcm1hbGl6ZSgpe2xldCB0PTEvdGhpcy5ub3JtYWwubGVuZ3RoKCk7cmV0dXJuIHRoaXMubm9ybWFsLm11bHRpcGx5U2NhbGFyKHQpLHRoaXMuY29uc3RhbnQqPXQsdGhpc31uZWdhdGUoKXtyZXR1cm4gdGhpcy5jb25zdGFudCo9LTEsdGhpcy5ub3JtYWwubmVnYXRlKCksdGhpc31kaXN0YW5jZVRvUG9pbnQodCl7cmV0dXJuIHRoaXMubm9ybWFsLmRvdCh0KSt0aGlzLmNvbnN0YW50fWRpc3RhbmNlVG9TcGhlcmUodCl7cmV0dXJuIHRoaXMuZGlzdGFuY2VUb1BvaW50KHQuY2VudGVyKS10LnJhZGl1c31wcm9qZWN0UG9pbnQodCxlKXtyZXR1cm4gZS5jb3B5KHRoaXMubm9ybWFsKS5tdWx0aXBseVNjYWxhcigtdGhpcy5kaXN0YW5jZVRvUG9pbnQodCkpLmFkZCh0KX1pbnRlcnNlY3RMaW5lKHQsZSl7bGV0IGk9dC5kZWx0YShLaikscj10aGlzLm5vcm1hbC5kb3QoaSk7aWYoMD09PXIpcmV0dXJuIDA9PT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LnN0YXJ0KT9lLmNvcHkodC5zdGFydCk6bnVsbDtsZXQgbz0tKHQuc3RhcnQuZG90KHRoaXMubm9ybWFsKSt0aGlzLmNvbnN0YW50KS9yO3JldHVybiBvPDB8fG8+MT9udWxsOmUuY29weShpKS5tdWx0aXBseVNjYWxhcihvKS5hZGQodC5zdGFydCl9aW50ZXJzZWN0c0xpbmUodCl7bGV0IGU9dGhpcy5kaXN0YW5jZVRvUG9pbnQodC5zdGFydCksaT10aGlzLmRpc3RhbmNlVG9Qb2ludCh0LmVuZCk7cmV0dXJuIGU8MCYmaT4wfHxpPDAmJmU+MH1pbnRlcnNlY3RzQm94KHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1pbnRlcnNlY3RzU3BoZXJlKHQpe3JldHVybiB0LmludGVyc2VjdHNQbGFuZSh0aGlzKX1jb3BsYW5hclBvaW50KHQpe3JldHVybiB0LmNvcHkodGhpcy5ub3JtYWwpLm11bHRpcGx5U2NhbGFyKC10aGlzLmNvbnN0YW50KX1hcHBseU1hdHJpeDQodCxlKXtsZXQgaT1lfHxuR2UuZ2V0Tm9ybWFsTWF0cml4KHQpLHI9dGhpcy5jb3BsYW5hclBvaW50KEtqKS5hcHBseU1hdHJpeDQodCksbz10aGlzLm5vcm1hbC5hcHBseU1hdHJpeDMoaSkubm9ybWFsaXplKCk7cmV0dXJuIHRoaXMuY29uc3RhbnQ9LXIuZG90KG8pLHRoaXN9dHJhbnNsYXRlKHQpe3JldHVybiB0aGlzLmNvbnN0YW50LT10LmRvdCh0aGlzLm5vcm1hbCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubm9ybWFsLmVxdWFscyh0aGlzLm5vcm1hbCkmJnQuY29uc3RhbnQ9PT10aGlzLmNvbnN0YW50fWNsb25lKCl7cmV0dXJuKG5ldyB0aGlzLmNvbnN0cnVjdG9yKS5jb3B5KHRoaXMpfX07dXUucHJvdG90eXBlLmlzUGxhbmU9ITA7dmFyIFp5PW5ldyB4ZixWTz1uZXcgaWUsZ2I9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgdXUsZT1uZXcgdXUsaT1uZXcgdXUscj1uZXcgdXUsbz1uZXcgdXUscz1uZXcgdXUpe3RoaXMucGxhbmVzPVt0LGUsaSxyLG8sc119c2V0KHQsZSxpLHIsbyxzKXtsZXQgYT10aGlzLnBsYW5lcztyZXR1cm4gYVswXS5jb3B5KHQpLGFbMV0uY29weShlKSxhWzJdLmNvcHkoaSksYVszXS5jb3B5KHIpLGFbNF0uY29weShvKSxhWzVdLmNvcHkocyksdGhpc31jb3B5KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspZVtpXS5jb3B5KHQucGxhbmVzW2ldKTtyZXR1cm4gdGhpc31zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuZWxlbWVudHMscj1pWzBdLG89aVsxXSxzPWlbMl0sYT1pWzNdLGw9aVs0XSxjPWlbNV0sdT1pWzZdLGQ9aVs3XSxwPWlbOF0saD1pWzldLGY9aVsxMF0sbT1pWzExXSx4PWlbMTJdLGc9aVsxM10sYj1pWzE0XSxEPWlbMTVdO3JldHVybiBlWzBdLnNldENvbXBvbmVudHMoYS1yLGQtbCxtLXAsRC14KS5ub3JtYWxpemUoKSxlWzFdLnNldENvbXBvbmVudHMoYStyLGQrbCxtK3AsRCt4KS5ub3JtYWxpemUoKSxlWzJdLnNldENvbXBvbmVudHMoYStvLGQrYyxtK2gsRCtnKS5ub3JtYWxpemUoKSxlWzNdLnNldENvbXBvbmVudHMoYS1vLGQtYyxtLWgsRC1nKS5ub3JtYWxpemUoKSxlWzRdLnNldENvbXBvbmVudHMoYS1zLGQtdSxtLWYsRC1iKS5ub3JtYWxpemUoKSxlWzVdLnNldENvbXBvbmVudHMoYStzLGQrdSxtK2YsRCtiKS5ub3JtYWxpemUoKSx0aGlzfWludGVyc2VjdHNPYmplY3QodCl7bGV0IGU9dC5nZW9tZXRyeTtyZXR1cm4gbnVsbD09PWUuYm91bmRpbmdTcGhlcmUmJmUuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCksWnkuY29weShlLmJvdW5kaW5nU3BoZXJlKS5hcHBseU1hdHJpeDQodC5tYXRyaXhXb3JsZCksdGhpcy5pbnRlcnNlY3RzU3BoZXJlKFp5KX1pbnRlcnNlY3RzU3ByaXRlKHQpe3JldHVybiBaeS5jZW50ZXIuc2V0KDAsMCwwKSxaeS5yYWRpdXM9LjcwNzEwNjc4MTE4NjU0NzYsWnkuYXBwbHlNYXRyaXg0KHQubWF0cml4V29ybGQpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShaeSl9aW50ZXJzZWN0c1NwaGVyZSh0KXtsZXQgZT10aGlzLnBsYW5lcyxpPXQuY2VudGVyLHI9LXQucmFkaXVzO2ZvcihsZXQgbz0wO288NjtvKyspaWYoZVtvXS5kaXN0YW5jZVRvUG9pbnQoaSk8cilyZXR1cm4hMTtyZXR1cm4hMH1pbnRlcnNlY3RzQm94KHQpe2xldCBlPXRoaXMucGxhbmVzO2ZvcihsZXQgaT0wO2k8NjtpKyspe2xldCByPWVbaV07aWYoVk8ueD1yLm5vcm1hbC54PjA/dC5tYXgueDp0Lm1pbi54LFZPLnk9ci5ub3JtYWwueT4wP3QubWF4Lnk6dC5taW4ueSxWTy56PXIubm9ybWFsLno+MD90Lm1heC56OnQubWluLnosci5kaXN0YW5jZVRvUG9pbnQoVk8pPDApcmV0dXJuITF9cmV0dXJuITB9Y29udGFpbnNQb2ludCh0KXtsZXQgZT10aGlzLnBsYW5lcztmb3IobGV0IGk9MDtpPDY7aSsrKWlmKGVbaV0uZGlzdGFuY2VUb1BvaW50KHQpPDApcmV0dXJuITE7cmV0dXJuITB9Y2xvbmUoKXtyZXR1cm4obmV3IHRoaXMuY29uc3RydWN0b3IpLmNvcHkodGhpcyl9fTtmdW5jdGlvbiBrZGUoKXtsZXQgbj1udWxsLHQ9ITEsZT1udWxsLGk9bnVsbDtmdW5jdGlvbiByKG8scyl7ZShvLHMpLGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocil9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKCl7ITAhPT10JiZudWxsIT09ZSYmKGk9bi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUociksdD0hMCl9LHN0b3A6ZnVuY3Rpb24oKXtuLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGkpLHQ9ITF9LHNldEFuaW1hdGlvbkxvb3A6ZnVuY3Rpb24obyl7ZT1vfSxzZXRDb250ZXh0OmZ1bmN0aW9uKG8pe249b319fWZ1bmN0aW9uIGlHZShuLHQpe2xldCBlPXQuaXNXZWJHTDIsaT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKGMpe3JldHVybiBjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSksaS5nZXQoYyl9LHJlbW92ZTpmdW5jdGlvbihjKXtjLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUmJihjPWMuZGF0YSk7bGV0IHU9aS5nZXQoYyk7dSYmKG4uZGVsZXRlQnVmZmVyKHUuYnVmZmVyKSxpLmRlbGV0ZShjKSl9LHVwZGF0ZTpmdW5jdGlvbihjLHUpe2lmKGMuaXNHTEJ1ZmZlckF0dHJpYnV0ZSl7bGV0IHA9aS5nZXQoYyk7cmV0dXJuIHZvaWQoKCFwfHxwLnZlcnNpb248Yy52ZXJzaW9uKSYmaS5zZXQoYyx7YnVmZmVyOmMuYnVmZmVyLHR5cGU6Yy50eXBlLGJ5dGVzUGVyRWxlbWVudDpjLmVsZW1lbnRTaXplLHZlcnNpb246Yy52ZXJzaW9ufSkpfWMuaXNJbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZSYmKGM9Yy5kYXRhKTtsZXQgZD1pLmdldChjKTt2b2lkIDA9PT1kP2kuc2V0KGMsZnVuY3Rpb24oYyx1KXtsZXQgZD1jLmFycmF5LHA9Yy51c2FnZSxoPW4uY3JlYXRlQnVmZmVyKCk7bi5iaW5kQnVmZmVyKHUsaCksbi5idWZmZXJEYXRhKHUsZCxwKSxjLm9uVXBsb2FkQ2FsbGJhY2soKTtsZXQgZj01MTI2O3JldHVybiBkIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5P2Y9NTEyNjpkIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5P2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xBdHRyaWJ1dGVzOiBVbnN1cHBvcnRlZCBkYXRhIGJ1ZmZlciBmb3JtYXQ6IEZsb2F0NjRBcnJheS4iKTpkIGluc3RhbmNlb2YgVWludDE2QXJyYXk/Yy5pc0Zsb2F0MTZCdWZmZXJBdHRyaWJ1dGU/ZT9mPTUxMzE6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTEF0dHJpYnV0ZXM6IFVzYWdlIG9mIEZsb2F0MTZCdWZmZXJBdHRyaWJ1dGUgcmVxdWlyZXMgV2ViR0wyLiIpOmY9NTEyMzpkIGluc3RhbmNlb2YgSW50MTZBcnJheT9mPTUxMjI6ZCBpbnN0YW5jZW9mIFVpbnQzMkFycmF5P2Y9NTEyNTpkIGluc3RhbmNlb2YgSW50MzJBcnJheT9mPTUxMjQ6ZCBpbnN0YW5jZW9mIEludDhBcnJheT9mPTUxMjA6KGQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxkIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpJiYoZj01MTIxKSx7YnVmZmVyOmgsdHlwZTpmLGJ5dGVzUGVyRWxlbWVudDpkLkJZVEVTX1BFUl9FTEVNRU5ULHZlcnNpb246Yy52ZXJzaW9ufX0oYyx1KSk6ZC52ZXJzaW9uPGMudmVyc2lvbiYmKGZ1bmN0aW9uKGMsdSxkKXtsZXQgcD11LmFycmF5LGg9dS51cGRhdGVSYW5nZTtuLmJpbmRCdWZmZXIoZCxjKSwtMT09PWguY291bnQ/bi5idWZmZXJTdWJEYXRhKGQsMCxwKTooZT9uLmJ1ZmZlclN1YkRhdGEoZCxoLm9mZnNldCpwLkJZVEVTX1BFUl9FTEVNRU5ULHAsaC5vZmZzZXQsaC5jb3VudCk6bi5idWZmZXJTdWJEYXRhKGQsaC5vZmZzZXQqcC5CWVRFU19QRVJfRUxFTUVOVCxwLnN1YmFycmF5KGgub2Zmc2V0LGgub2Zmc2V0K2guY291bnQpKSxoLmNvdW50PS0xKX0oZC5idWZmZXIsYyx1KSxkLnZlcnNpb249Yy52ZXJzaW9uKX19fXZhciBaUz1jbGFzcyBleHRlbmRzIG5ye2NvbnN0cnVjdG9yKHQ9MSxlPTEsaT0xLHI9MSl7c3VwZXIoKSx0aGlzLnR5cGU9IlBsYW5lR2VvbWV0cnkiLHRoaXMucGFyYW1ldGVycz17d2lkdGg6dCxoZWlnaHQ6ZSx3aWR0aFNlZ21lbnRzOmksaGVpZ2h0U2VnbWVudHM6cn07bGV0IG89dC8yLHM9ZS8yLGE9TWF0aC5mbG9vcihpKSxsPU1hdGguZmxvb3IociksYz1hKzEsdT1sKzEsZD10L2EscD1lL2wsaD1bXSxmPVtdLG09W10seD1bXTtmb3IobGV0IGc9MDtnPHU7ZysrKXtsZXQgYj1nKnAtcztmb3IobGV0IEQ9MDtEPGM7RCsrKWYucHVzaChEKmQtbywtYiwwKSxtLnB1c2goMCwwLDEpLHgucHVzaChEL2EpLHgucHVzaCgxLWcvbCl9Zm9yKGxldCBnPTA7ZzxsO2crKylmb3IobGV0IGI9MDtiPGE7YisrKXtsZXQgVD1iK2MqKGcrMSksaz1iKzErYyooZysxKSxaPWIrMStjKmc7aC5wdXNoKGIrYypnLFQsWiksaC5wdXNoKFQsayxaKX10aGlzLnNldEluZGV4KGgpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEpyKGYsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBKcihtLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcih4LDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyBaUyh0LndpZHRoLHQuaGVpZ2h0LHQud2lkdGhTZWdtZW50cyx0LmhlaWdodFNlZ21lbnRzKX19LERpPXthbHBoYW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQU1BUFxuXHRkaWZmdXNlQ29sb3IuYSAqPSB0ZXh0dXJlMkQoIGFscGhhTWFwLCB2VXYgKS5nO1xuI2VuZGlmIixhbHBoYW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FMUEhBTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGFscGhhTWFwO1xuI2VuZGlmIixhbHBoYXRlc3RfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQUxQSEFURVNUXG5cdGlmICggZGlmZnVzZUNvbG9yLmEgPCBhbHBoYVRlc3QgKSBkaXNjYXJkO1xuI2VuZGlmIixhbHBoYXRlc3RfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BTFBIQVRFU1Rcblx0dW5pZm9ybSBmbG9hdCBhbHBoYVRlc3Q7XG4jZW5kaWYiLGFvbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0FPTUFQXG5cdGZsb2F0IGFtYmllbnRPY2NsdXNpb24gPSAoIHRleHR1cmUyRCggYW9NYXAsIHZVdjIgKS5yIC0gMS4wICkgKiBhb01hcEludGVuc2l0eSArIDEuMDtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICo9IGFtYmllbnRPY2NsdXNpb247XG5cdCNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggU1RBTkRBUkQgKVxuXHRcdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICo9IGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlYsIGFtYmllbnRPY2NsdXNpb24sIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsYW9tYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9BT01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBhb01hcDtcblx0dW5pZm9ybSBmbG9hdCBhb01hcEludGVuc2l0eTtcbiNlbmRpZiIsYmVnaW5fdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkID0gdmVjMyggcG9zaXRpb24gKTsiLGJlZ2lubm9ybWFsX3ZlcnRleDoidmVjMyBvYmplY3ROb3JtYWwgPSB2ZWMzKCBub3JtYWwgKTtcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIG9iamVjdFRhbmdlbnQgPSB2ZWMzKCB0YW5nZW50Lnh5eiApO1xuI2VuZGlmIixic2RmczoidmVjMyBCUkRGX0xhbWJlcnQoIGNvbnN0IGluIHZlYzMgZGlmZnVzZUNvbG9yICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcbn1cbnZlYzMgRl9TY2hsaWNrKCBjb25zdCBpbiB2ZWMzIGYwLCBjb25zdCBpbiBmbG9hdCBmOTAsIGNvbnN0IGluIGZsb2F0IGRvdFZIICkge1xuXHRmbG9hdCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XG5cdHJldHVybiBmMCAqICggMS4wIC0gZnJlc25lbCApICsgKCBmOTAgKiBmcmVzbmVsICk7XG59XG5mbG9hdCBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGNvbnN0IGluIGZsb2F0IGFscGhhLCBjb25zdCBpbiBmbG9hdCBkb3ROTCwgY29uc3QgaW4gZmxvYXQgZG90TlYgKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZ3YgPSBkb3ROTCAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TlYgKSApO1xuXHRmbG9hdCBnbCA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XG5cdHJldHVybiAwLjUgLyBtYXgoIGd2ICsgZ2wsIEVQU0lMT04gKTtcbn1cbmZsb2F0IERfR0dYKCBjb25zdCBpbiBmbG9hdCBhbHBoYSwgY29uc3QgaW4gZmxvYXQgZG90TkggKSB7XG5cdGZsb2F0IGEyID0gcG93MiggYWxwaGEgKTtcblx0ZmxvYXQgZGVub20gPSBwb3cyKCBkb3ROSCApICogKCBhMiAtIDEuMCApICsgMS4wO1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcbn1cbnZlYzMgQlJERl9HR1goIGNvbnN0IGluIHZlYzMgbGlnaHREaXIsIGNvbnN0IGluIHZlYzMgdmlld0RpciwgY29uc3QgaW4gdmVjMyBub3JtYWwsIGNvbnN0IGluIHZlYzMgZjAsIGNvbnN0IGluIGZsb2F0IGY5MCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgZG90VkggPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcblx0dmVjMyBGID0gRl9TY2hsaWNrKCBmMCwgZjkwLCBkb3RWSCApO1xuXHRmbG9hdCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XG5cdGZsb2F0IEQgPSBEX0dHWCggYWxwaGEsIGRvdE5IICk7XG5cdHJldHVybiBGICogKCBWICogRCApO1xufVxudmVjMiBMVENfVXYoIGNvbnN0IGluIHZlYzMgTiwgY29uc3QgaW4gdmVjMyBWLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGNvbnN0IGZsb2F0IExVVF9TSVpFID0gNjQuMDtcblx0Y29uc3QgZmxvYXQgTFVUX1NDQUxFID0gKCBMVVRfU0laRSAtIDEuMCApIC8gTFVUX1NJWkU7XG5cdGNvbnN0IGZsb2F0IExVVF9CSUFTID0gMC41IC8gTFVUX1NJWkU7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggTiwgViApICk7XG5cdHZlYzIgdXYgPSB2ZWMyKCByb3VnaG5lc3MsIHNxcnQoIDEuMCAtIGRvdE5WICkgKTtcblx0dXYgPSB1diAqIExVVF9TQ0FMRSArIExVVF9CSUFTO1xuXHRyZXR1cm4gdXY7XG59XG5mbG9hdCBMVENfQ2xpcHBlZFNwaGVyZUZvcm1GYWN0b3IoIGNvbnN0IGluIHZlYzMgZiApIHtcblx0ZmxvYXQgbCA9IGxlbmd0aCggZiApO1xuXHRyZXR1cm4gbWF4KCAoIGwgKiBsICsgZi56ICkgLyAoIGwgKyAxLjAgKSwgMC4wICk7XG59XG52ZWMzIExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29uc3QgaW4gdmVjMyB2MSwgY29uc3QgaW4gdmVjMyB2MiApIHtcblx0ZmxvYXQgeCA9IGRvdCggdjEsIHYyICk7XG5cdGZsb2F0IHkgPSBhYnMoIHggKTtcblx0ZmxvYXQgYSA9IDAuODU0Mzk4NSArICggMC40OTY1MTU1ICsgMC4wMTQ1MjA2ICogeSApICogeTtcblx0ZmxvYXQgYiA9IDMuNDE3NTk0MCArICggNC4xNjE2NzI0ICsgeSApICogeTtcblx0ZmxvYXQgdiA9IGEgLyBiO1xuXHRmbG9hdCB0aGV0YV9zaW50aGV0YSA9ICggeCA+IDAuMCApID8gdiA6IDAuNSAqIGludmVyc2VzcXJ0KCBtYXgoIDEuMCAtIHggKiB4LCAxZS03ICkgKSAtIHY7XG5cdHJldHVybiBjcm9zcyggdjEsIHYyICkgKiB0aGV0YV9zaW50aGV0YTtcbn1cbnZlYzMgTFRDX0V2YWx1YXRlKCBjb25zdCBpbiB2ZWMzIE4sIGNvbnN0IGluIHZlYzMgViwgY29uc3QgaW4gdmVjMyBQLCBjb25zdCBpbiBtYXQzIG1JbnYsIGNvbnN0IGluIHZlYzMgcmVjdENvb3Jkc1sgNCBdICkge1xuXHR2ZWMzIHYxID0gcmVjdENvb3Jkc1sgMSBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIHYyID0gcmVjdENvb3Jkc1sgMyBdIC0gcmVjdENvb3Jkc1sgMCBdO1xuXHR2ZWMzIGxpZ2h0Tm9ybWFsID0gY3Jvc3MoIHYxLCB2MiApO1xuXHRpZiggZG90KCBsaWdodE5vcm1hbCwgUCAtIHJlY3RDb29yZHNbIDAgXSApIDwgMC4wICkgcmV0dXJuIHZlYzMoIDAuMCApO1xuXHR2ZWMzIFQxLCBUMjtcblx0VDEgPSBub3JtYWxpemUoIFYgLSBOICogZG90KCBWLCBOICkgKTtcblx0VDIgPSAtIGNyb3NzKCBOLCBUMSApO1xuXHRtYXQzIG1hdCA9IG1JbnYgKiB0cmFuc3Bvc2VNYXQzKCBtYXQzKCBUMSwgVDIsIE4gKSApO1xuXHR2ZWMzIGNvb3Jkc1sgNCBdO1xuXHRjb29yZHNbIDAgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMCBdIC0gUCApO1xuXHRjb29yZHNbIDEgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMSBdIC0gUCApO1xuXHRjb29yZHNbIDIgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMiBdIC0gUCApO1xuXHRjb29yZHNbIDMgXSA9IG1hdCAqICggcmVjdENvb3Jkc1sgMyBdIC0gUCApO1xuXHRjb29yZHNbIDAgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAwIF0gKTtcblx0Y29vcmRzWyAxIF0gPSBub3JtYWxpemUoIGNvb3Jkc1sgMSBdICk7XG5cdGNvb3Jkc1sgMiBdID0gbm9ybWFsaXplKCBjb29yZHNbIDIgXSApO1xuXHRjb29yZHNbIDMgXSA9IG5vcm1hbGl6ZSggY29vcmRzWyAzIF0gKTtcblx0dmVjMyB2ZWN0b3JGb3JtRmFjdG9yID0gdmVjMyggMC4wICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDAgXSwgY29vcmRzWyAxIF0gKTtcblx0dmVjdG9yRm9ybUZhY3RvciArPSBMVENfRWRnZVZlY3RvckZvcm1GYWN0b3IoIGNvb3Jkc1sgMSBdLCBjb29yZHNbIDIgXSApO1xuXHR2ZWN0b3JGb3JtRmFjdG9yICs9IExUQ19FZGdlVmVjdG9yRm9ybUZhY3RvciggY29vcmRzWyAyIF0sIGNvb3Jkc1sgMyBdICk7XG5cdHZlY3RvckZvcm1GYWN0b3IgKz0gTFRDX0VkZ2VWZWN0b3JGb3JtRmFjdG9yKCBjb29yZHNbIDMgXSwgY29vcmRzWyAwIF0gKTtcblx0ZmxvYXQgcmVzdWx0ID0gTFRDX0NsaXBwZWRTcGhlcmVGb3JtRmFjdG9yKCB2ZWN0b3JGb3JtRmFjdG9yICk7XG5cdHJldHVybiB2ZWMzKCByZXN1bHQgKTtcbn1cbmZsb2F0IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKSB7XG5cdHJldHVybiAwLjI1O1xufVxuZmxvYXQgRF9CbGlublBob25nKCBjb25zdCBpbiBmbG9hdCBzaGluaW5lc3MsIGNvbnN0IGluIGZsb2F0IGRvdE5IICkge1xuXHRyZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coIGRvdE5ILCBzaGluaW5lc3MgKTtcbn1cbnZlYzMgQlJERl9CbGlublBob25nKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoaW5pbmVzcyApIHtcblx0dmVjMyBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcblx0ZmxvYXQgZG90TkggPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xuXHRmbG9hdCBkb3RWSCA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xuXHR2ZWMzIEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcblx0ZmxvYXQgRyA9IEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKTtcblx0ZmxvYXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xuXHRyZXR1cm4gRiAqICggRyAqIEQgKTtcbn1cbiNpZiBkZWZpbmVkKCBVU0VfU0hFRU4gKVxuZmxvYXQgRF9DaGFybGllKCBmbG9hdCByb3VnaG5lc3MsIGZsb2F0IGRvdE5IICkge1xuXHRmbG9hdCBhbHBoYSA9IHBvdzIoIHJvdWdobmVzcyApO1xuXHRmbG9hdCBpbnZBbHBoYSA9IDEuMCAvIGFscGhhO1xuXHRmbG9hdCBjb3MyaCA9IGRvdE5IICogZG90Tkg7XG5cdGZsb2F0IHNpbjJoID0gbWF4KCAxLjAgLSBjb3MyaCwgMC4wMDc4MTI1ICk7XG5cdHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xufVxuZmxvYXQgVl9OZXViZWx0KCBmbG9hdCBkb3ROViwgZmxvYXQgZG90TkwgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xufVxudmVjMyBCUkRGX1NoZWVuKCBjb25zdCBpbiB2ZWMzIGxpZ2h0RGlyLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgbm9ybWFsLCB2ZWMzIHNoZWVuQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNoZWVuUm91Z2huZXNzICkge1xuXHR2ZWMzIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xuXHRmbG9hdCBkb3ROTCA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xuXHRmbG9hdCBkb3ROViA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XG5cdGZsb2F0IGRvdE5IID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcblx0ZmxvYXQgRCA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XG5cdGZsb2F0IFYgPSBWX05ldWJlbHQoIGRvdE5WLCBkb3ROTCApO1xuXHRyZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcbn1cbiNlbmRpZiIsYnVtcG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0JVTVBNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYnVtcE1hcDtcblx0dW5pZm9ybSBmbG9hdCBidW1wU2NhbGU7XG5cdHZlYzIgZEhkeHlfZndkKCkge1xuXHRcdHZlYzIgZFNUZHggPSBkRmR4KCB2VXYgKTtcblx0XHR2ZWMyIGRTVGR5ID0gZEZkeSggdlV2ICk7XG5cdFx0ZmxvYXQgSGxsID0gYnVtcFNjYWxlICogdGV4dHVyZTJEKCBidW1wTWFwLCB2VXYgKS54O1xuXHRcdGZsb2F0IGRCeCA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHggKS54IC0gSGxsO1xuXHRcdGZsb2F0IGRCeSA9IGJ1bXBTY2FsZSAqIHRleHR1cmUyRCggYnVtcE1hcCwgdlV2ICsgZFNUZHkgKS54IC0gSGxsO1xuXHRcdHJldHVybiB2ZWMyKCBkQngsIGRCeSApO1xuXHR9XG5cdHZlYzMgcGVydHVyYk5vcm1hbEFyYiggdmVjMyBzdXJmX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzIgZEhkeHksIGZsb2F0IGZhY2VEaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyB2U2lnbWFYID0gdmVjMyggZEZkeCggc3VyZl9wb3MueCApLCBkRmR4KCBzdXJmX3Bvcy55ICksIGRGZHgoIHN1cmZfcG9zLnogKSApO1xuXHRcdHZlYzMgdlNpZ21hWSA9IHZlYzMoIGRGZHkoIHN1cmZfcG9zLnggKSwgZEZkeSggc3VyZl9wb3MueSApLCBkRmR5KCBzdXJmX3Bvcy56ICkgKTtcblx0XHR2ZWMzIHZOID0gc3VyZl9ub3JtO1xuXHRcdHZlYzMgUjEgPSBjcm9zcyggdlNpZ21hWSwgdk4gKTtcblx0XHR2ZWMzIFIyID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XG5cdFx0ZmxvYXQgZkRldCA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XG5cdFx0dmVjMyB2R3JhZCA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggYWJzKCBmRGV0ICkgKiBzdXJmX25vcm0gLSB2R3JhZCApO1xuXHR9XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZlYzQgcGxhbmU7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpICsrICkge1xuXHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRpZiAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgZGlzY2FyZDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjaWYgVU5JT05fQ0xJUFBJTkdfUExBTkVTIDwgTlVNX0NMSVBQSU5HX1BMQU5FU1xuXHRcdGJvb2wgY2xpcHBlZCA9IHRydWU7XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gVU5JT05fQ0xJUFBJTkdfUExBTkVTOyBpIDwgTlVNX0NMSVBQSU5HX1BMQU5FUzsgaSArKyApIHtcblx0XHRcdHBsYW5lID0gY2xpcHBpbmdQbGFuZXNbIGkgXTtcblx0XHRcdGNsaXBwZWQgPSAoIGRvdCggdkNsaXBQb3NpdGlvbiwgcGxhbmUueHl6ICkgPiBwbGFuZS53ICkgJiYgY2xpcHBlZDtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0XHRpZiAoIGNsaXBwZWQgKSBkaXNjYXJkO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ6IiNpZiBOVU1fQ0xJUFBJTkdfUExBTkVTID4gMFxuXHR2YXJ5aW5nIHZlYzMgdkNsaXBQb3NpdGlvbjtcblx0dW5pZm9ybSB2ZWM0IGNsaXBwaW5nUGxhbmVzWyBOVU1fQ0xJUFBJTkdfUExBTkVTIF07XG4jZW5kaWYiLGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleDoiI2lmIE5VTV9DTElQUElOR19QTEFORVMgPiAwXG5cdHZhcnlpbmcgdmVjMyB2Q2xpcFBvc2l0aW9uO1xuI2VuZGlmIixjbGlwcGluZ19wbGFuZXNfdmVydGV4OiIjaWYgTlVNX0NMSVBQSU5HX1BMQU5FUyA+IDBcblx0dkNsaXBQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG4jZW5kaWYiLGNvbG9yX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0ZGlmZnVzZUNvbG9yICo9IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdGRpZmZ1c2VDb2xvci5yZ2IgKj0gdkNvbG9yO1xuI2VuZGlmIixjb2xvcl9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApXG5cdHZhcnlpbmcgdmVjMyB2Q29sb3I7XG4jZW5kaWYiLGNvbG9yX3BhcnNfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dmFyeWluZyB2ZWM0IHZDb2xvcjtcbiNlbGlmIGRlZmluZWQoIFVTRV9DT0xPUiApIHx8IGRlZmluZWQoIFVTRV9JTlNUQU5DSU5HX0NPTE9SIClcblx0dmFyeWluZyB2ZWMzIHZDb2xvcjtcbiNlbmRpZiIsY29sb3JfdmVydGV4OiIjaWYgZGVmaW5lZCggVVNFX0NPTE9SX0FMUEhBIClcblx0dkNvbG9yID0gdmVjNCggMS4wICk7XG4jZWxpZiBkZWZpbmVkKCBVU0VfQ09MT1IgKSB8fCBkZWZpbmVkKCBVU0VfSU5TVEFOQ0lOR19DT0xPUiApXG5cdHZDb2xvciA9IHZlYzMoIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NPTE9SXG5cdHZDb2xvciAqPSBjb2xvcjtcbiNlbmRpZlxuI2lmZGVmIFVTRV9JTlNUQU5DSU5HX0NPTE9SXG5cdHZDb2xvci54eXogKj0gaW5zdGFuY2VDb2xvci54eXo7XG4jZW5kaWYiLGNvbW1vbjoiI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5M1xuI2RlZmluZSBQSTIgNi4yODMxODUzMDcxNzk1ODZcbiNkZWZpbmUgUElfSEFMRiAxLjU3MDc5NjMyNjc5NDg5NjZcbiNkZWZpbmUgUkVDSVBST0NBTF9QSSAwLjMxODMwOTg4NjE4Mzc5MDdcbiNkZWZpbmUgUkVDSVBST0NBTF9QSTIgMC4xNTkxNTQ5NDMwOTE4OTUzNVxuI2RlZmluZSBFUFNJTE9OIDFlLTZcbiNpZm5kZWYgc2F0dXJhdGVcbiNkZWZpbmUgc2F0dXJhdGUoIGEgKSBjbGFtcCggYSwgMC4wLCAxLjAgKVxuI2VuZGlmXG4jZGVmaW5lIHdoaXRlQ29tcGxlbWVudCggYSApICggMS4wIC0gc2F0dXJhdGUoIGEgKSApXG5mbG9hdCBwb3cyKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4OyB9XG5mbG9hdCBwb3czKCBjb25zdCBpbiBmbG9hdCB4ICkgeyByZXR1cm4geCp4Kng7IH1cbmZsb2F0IHBvdzQoIGNvbnN0IGluIGZsb2F0IHggKSB7IGZsb2F0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cbmZsb2F0IG1heDMoIGNvbnN0IGluIHZlYzMgdiApIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxuZmxvYXQgYXZlcmFnZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHsgcmV0dXJuIGRvdCggY29sb3IsIHZlYzMoIDAuMzMzMyApICk7IH1cbmhpZ2hwIGZsb2F0IHJhbmQoIGNvbnN0IGluIHZlYzIgdXYgKSB7XG5cdGNvbnN0IGhpZ2hwIGZsb2F0IGEgPSAxMi45ODk4LCBiID0gNzguMjMzLCBjID0gNDM3NTguNTQ1Mztcblx0aGlnaHAgZmxvYXQgZHQgPSBkb3QoIHV2Lnh5LCB2ZWMyKCBhLGIgKSApLCBzbiA9IG1vZCggZHQsIFBJICk7XG5cdHJldHVybiBmcmFjdCggc2luKCBzbiApICogYyApO1xufVxuI2lmZGVmIEhJR0hfUFJFQ0lTSU9OXG5cdGZsb2F0IHByZWNpc2lvblNhZmVMZW5ndGgoIHZlYzMgdiApIHsgcmV0dXJuIGxlbmd0aCggdiApOyB9XG4jZWxzZVxuXHRmbG9hdCBwcmVjaXNpb25TYWZlTGVuZ3RoKCB2ZWMzIHYgKSB7XG5cdFx0ZmxvYXQgbWF4Q29tcG9uZW50ID0gbWF4MyggYWJzKCB2ICkgKTtcblx0XHRyZXR1cm4gbGVuZ3RoKCB2IC8gbWF4Q29tcG9uZW50ICkgKiBtYXhDb21wb25lbnQ7XG5cdH1cbiNlbmRpZlxuc3RydWN0IEluY2lkZW50TGlnaHQge1xuXHR2ZWMzIGNvbG9yO1xuXHR2ZWMzIGRpcmVjdGlvbjtcblx0Ym9vbCB2aXNpYmxlO1xufTtcbnN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XG5cdHZlYzMgZGlyZWN0RGlmZnVzZTtcblx0dmVjMyBkaXJlY3RTcGVjdWxhcjtcblx0dmVjMyBpbmRpcmVjdERpZmZ1c2U7XG5cdHZlYzMgaW5kaXJlY3RTcGVjdWxhcjtcbn07XG5zdHJ1Y3QgR2VvbWV0cmljQ29udGV4dCB7XG5cdHZlYzMgcG9zaXRpb247XG5cdHZlYzMgbm9ybWFsO1xuXHR2ZWMzIHZpZXdEaXI7XG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR2ZWMzIGNsZWFyY29hdE5vcm1hbDtcbiNlbmRpZlxufTtcbnZlYzMgdHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNCggZGlyLCAwLjAgKSApLnh5eiApO1xufVxudmVjMyBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBpbiB2ZWMzIGRpciwgaW4gbWF0NCBtYXRyaXggKSB7XG5cdHJldHVybiBub3JtYWxpemUoICggdmVjNCggZGlyLCAwLjAgKSAqIG1hdHJpeCApLnh5eiApO1xufVxubWF0MyB0cmFuc3Bvc2VNYXQzKCBjb25zdCBpbiBtYXQzIG0gKSB7XG5cdG1hdDMgdG1wO1xuXHR0bXBbIDAgXSA9IHZlYzMoIG1bIDAgXS54LCBtWyAxIF0ueCwgbVsgMiBdLnggKTtcblx0dG1wWyAxIF0gPSB2ZWMzKCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XG5cdHRtcFsgMiBdID0gdmVjMyggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xuXHRyZXR1cm4gdG1wO1xufVxuZmxvYXQgbGluZWFyVG9SZWxhdGl2ZUx1bWluYW5jZSggY29uc3QgaW4gdmVjMyBjb2xvciApIHtcblx0dmVjMyB3ZWlnaHRzID0gdmVjMyggMC4yMTI2LCAwLjcxNTIsIDAuMDcyMiApO1xuXHRyZXR1cm4gZG90KCB3ZWlnaHRzLCBjb2xvci5yZ2IgKTtcbn1cbmJvb2wgaXNQZXJzcGVjdGl2ZU1hdHJpeCggbWF0NCBtICkge1xuXHRyZXR1cm4gbVsgMiBdWyAzIF0gPT0gLSAxLjA7XG59XG52ZWMyIGVxdWlyZWN0VXYoIGluIHZlYzMgZGlyICkge1xuXHRmbG9hdCB1ID0gYXRhbiggZGlyLnosIGRpci54ICkgKiBSRUNJUFJPQ0FMX1BJMiArIDAuNTtcblx0ZmxvYXQgdiA9IGFzaW4oIGNsYW1wKCBkaXIueSwgLSAxLjAsIDEuMCApICkgKiBSRUNJUFJPQ0FMX1BJICsgMC41O1xuXHRyZXR1cm4gdmVjMiggdSwgdiApO1xufSIsY3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50OiIjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuXHQjZGVmaW5lIGN1YmVVVl9tYXhNaXBMZXZlbCA4LjBcblx0I2RlZmluZSBjdWJlVVZfbWluTWlwTGV2ZWwgNC4wXG5cdCNkZWZpbmUgY3ViZVVWX21heFRpbGVTaXplIDI1Ni4wXG5cdCNkZWZpbmUgY3ViZVVWX21pblRpbGVTaXplIDE2LjBcblx0ZmxvYXQgZ2V0RmFjZSggdmVjMyBkaXJlY3Rpb24gKSB7XG5cdFx0dmVjMyBhYnNEaXJlY3Rpb24gPSBhYnMoIGRpcmVjdGlvbiApO1xuXHRcdGZsb2F0IGZhY2UgPSAtIDEuMDtcblx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XG5cdFx0XHRpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnggPiAwLjAgPyAwLjAgOiAzLjA7XG5cdFx0XHRlbHNlXG5cdFx0XHRcdGZhY2UgPSBkaXJlY3Rpb24ueSA+IDAuMCA/IDEuMCA6IDQuMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55IClcblx0XHRcdFx0ZmFjZSA9IGRpcmVjdGlvbi56ID4gMC4wID8gMi4wIDogNS4wO1xuXHRcdFx0ZWxzZVxuXHRcdFx0XHRmYWNlID0gZGlyZWN0aW9uLnkgPiAwLjAgPyAxLjAgOiA0LjA7XG5cdFx0fVxuXHRcdHJldHVybiBmYWNlO1xuXHR9XG5cdHZlYzIgZ2V0VVYoIHZlYzMgZGlyZWN0aW9uLCBmbG9hdCBmYWNlICkge1xuXHRcdHZlYzIgdXY7XG5cdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XG5cdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cdFx0XHR1diA9IHZlYzIoIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDMuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcblx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDQuMCApIHtcblx0XHRcdHV2ID0gdmVjMiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXYgPSB2ZWMyKCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcblx0XHR9XG5cdFx0cmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcblx0fVxuXHR2ZWMzIGJpbGluZWFyQ3ViZVVWKCBzYW1wbGVyMkQgZW52TWFwLCB2ZWMzIGRpcmVjdGlvbiwgZmxvYXQgbWlwSW50ICkge1xuXHRcdGZsb2F0IGZhY2UgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBmaWx0ZXJJbnQgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XG5cdFx0bWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xuXHRcdGZsb2F0IGZhY2VTaXplID0gZXhwMiggbWlwSW50ICk7XG5cdFx0ZmxvYXQgdGV4ZWxTaXplID0gMS4wIC8gKCAzLjAgKiBjdWJlVVZfbWF4VGlsZVNpemUgKTtcblx0XHR2ZWMyIHV2ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDEuMCApICsgMC41O1xuXHRcdGlmICggZmFjZSA+IDIuMCApIHtcblx0XHRcdHV2LnkgKz0gZmFjZVNpemU7XG5cdFx0XHRmYWNlIC09IDMuMDtcblx0XHR9XG5cdFx0dXYueCArPSBmYWNlICogZmFjZVNpemU7XG5cdFx0aWYgKCBtaXBJbnQgPCBjdWJlVVZfbWF4TWlwTGV2ZWwgKSB7XG5cdFx0XHR1di55ICs9IDIuMCAqIGN1YmVVVl9tYXhUaWxlU2l6ZTtcblx0XHR9XG5cdFx0dXYueSArPSBmaWx0ZXJJbnQgKiAyLjAgKiBjdWJlVVZfbWluVGlsZVNpemU7XG5cdFx0dXYueCArPSAzLjAgKiBtYXgoIDAuMCwgY3ViZVVWX21heFRpbGVTaXplIC0gMi4wICogZmFjZVNpemUgKTtcblx0XHR1diAqPSB0ZXhlbFNpemU7XG5cdFx0cmV0dXJuIHRleHR1cmUyRCggZW52TWFwLCB1diApLnJnYjtcblx0fVxuXHQjZGVmaW5lIHIwIDEuMFxuXHQjZGVmaW5lIHYwIDAuMzM5XG5cdCNkZWZpbmUgbTAgLSAyLjBcblx0I2RlZmluZSByMSAwLjhcblx0I2RlZmluZSB2MSAwLjI3NlxuXHQjZGVmaW5lIG0xIC0gMS4wXG5cdCNkZWZpbmUgcjQgMC40XG5cdCNkZWZpbmUgdjQgMC4wNDZcblx0I2RlZmluZSBtNCAyLjBcblx0I2RlZmluZSByNSAwLjMwNVxuXHQjZGVmaW5lIHY1IDAuMDE2XG5cdCNkZWZpbmUgbTUgMy4wXG5cdCNkZWZpbmUgcjYgMC4yMVxuXHQjZGVmaW5lIHY2IDAuMDAzOFxuXHQjZGVmaW5lIG02IDQuMFxuXHRmbG9hdCByb3VnaG5lc3NUb01pcCggZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdGZsb2F0IG1pcCA9IDAuMDtcblx0XHRpZiAoIHJvdWdobmVzcyA+PSByMSApIHtcblx0XHRcdG1pcCA9ICggcjAgLSByb3VnaG5lc3MgKSAqICggbTEgLSBtMCApIC8gKCByMCAtIHIxICkgKyBtMDtcblx0XHR9IGVsc2UgaWYgKCByb3VnaG5lc3MgPj0gcjQgKSB7XG5cdFx0XHRtaXAgPSAoIHIxIC0gcm91Z2huZXNzICkgKiAoIG00IC0gbTEgKSAvICggcjEgLSByNCApICsgbTE7XG5cdFx0fSBlbHNlIGlmICggcm91Z2huZXNzID49IHI1ICkge1xuXHRcdFx0bWlwID0gKCByNCAtIHJvdWdobmVzcyApICogKCBtNSAtIG00ICkgLyAoIHI0IC0gcjUgKSArIG00O1xuXHRcdH0gZWxzZSBpZiAoIHJvdWdobmVzcyA+PSByNiApIHtcblx0XHRcdG1pcCA9ICggcjUgLSByb3VnaG5lc3MgKSAqICggbTYgLSBtNSApIC8gKCByNSAtIHI2ICkgKyBtNTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWlwID0gLSAyLjAgKiBsb2cyKCAxLjE2ICogcm91Z2huZXNzICk7XHRcdH1cblx0XHRyZXR1cm4gbWlwO1xuXHR9XG5cdHZlYzQgdGV4dHVyZUN1YmVVViggc2FtcGxlcjJEIGVudk1hcCwgdmVjMyBzYW1wbGVEaXIsIGZsb2F0IHJvdWdobmVzcyApIHtcblx0XHRmbG9hdCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBtMCwgY3ViZVVWX21heE1pcExldmVsICk7XG5cdFx0ZmxvYXQgbWlwRiA9IGZyYWN0KCBtaXAgKTtcblx0XHRmbG9hdCBtaXBJbnQgPSBmbG9vciggbWlwICk7XG5cdFx0dmVjMyBjb2xvcjAgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCApO1xuXHRcdGlmICggbWlwRiA9PSAwLjAgKSB7XG5cdFx0XHRyZXR1cm4gdmVjNCggY29sb3IwLCAxLjAgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmVjMyBjb2xvcjEgPSBiaWxpbmVhckN1YmVVViggZW52TWFwLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xuXHRcdFx0cmV0dXJuIHZlYzQoIG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XG5cdFx0fVxuXHR9XG4jZW5kaWYiLGRlZmF1bHRub3JtYWxfdmVydGV4OiJ2ZWMzIHRyYW5zZm9ybWVkTm9ybWFsID0gb2JqZWN0Tm9ybWFsO1xuI2lmZGVmIFVTRV9JTlNUQU5DSU5HXG5cdG1hdDMgbSA9IG1hdDMoIGluc3RhbmNlTWF0cml4ICk7XG5cdHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzMoIGRvdCggbVsgMCBdLCBtWyAwIF0gKSwgZG90KCBtWyAxIF0sIG1bIDEgXSApLCBkb3QoIG1bIDIgXSwgbVsgMiBdICkgKTtcblx0dHJhbnNmb3JtZWROb3JtYWwgPSBtICogdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbnRyYW5zZm9ybWVkTm9ybWFsID0gbm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWw7XG4jaWZkZWYgRkxJUF9TSURFRFxuXHR0cmFuc2Zvcm1lZE5vcm1hbCA9IC0gdHJhbnNmb3JtZWROb3JtYWw7XG4jZW5kaWZcbiNpZmRlZiBVU0VfVEFOR0VOVFxuXHR2ZWMzIHRyYW5zZm9ybWVkVGFuZ2VudCA9ICggbW9kZWxWaWV3TWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBGTElQX1NJREVEXG5cdFx0dHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRElTUExBQ0VNRU5UTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRTY2FsZTtcblx0dW5pZm9ybSBmbG9hdCBkaXNwbGFjZW1lbnRCaWFzO1xuI2VuZGlmIixkaXNwbGFjZW1lbnRtYXBfdmVydGV4OiIjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHR0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKCB0ZXh0dXJlMkQoIGRpc3BsYWNlbWVudE1hcCwgdlV2ICkueCAqIGRpc3BsYWNlbWVudFNjYWxlICsgZGlzcGxhY2VtZW50QmlhcyApO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9mcmFnbWVudDoiI2lmZGVmIFVTRV9FTUlTU0lWRU1BUFxuXHR2ZWM0IGVtaXNzaXZlQ29sb3IgPSB0ZXh0dXJlMkQoIGVtaXNzaXZlTWFwLCB2VXYgKTtcblx0dG90YWxFbWlzc2l2ZVJhZGlhbmNlICo9IGVtaXNzaXZlQ29sb3IucmdiO1xuI2VuZGlmIixlbWlzc2l2ZW1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VNSVNTSVZFTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGVtaXNzaXZlTWFwO1xuI2VuZGlmIixlbmNvZGluZ3NfZnJhZ21lbnQ6ImdsX0ZyYWdDb2xvciA9IGxpbmVhclRvT3V0cHV0VGV4ZWwoIGdsX0ZyYWdDb2xvciApOyIsZW5jb2RpbmdzX3BhcnNfZnJhZ21lbnQ6InZlYzQgTGluZWFyVG9MaW5lYXIoIGluIHZlYzQgdmFsdWUgKSB7XG5cdHJldHVybiB2YWx1ZTtcbn1cbnZlYzQgTGluZWFyVG9zUkdCKCBpbiB2ZWM0IHZhbHVlICkge1xuXHRyZXR1cm4gdmVjNCggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMyggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzMoIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzMoIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XG59IixlbnZtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2ZWMzIGNhbWVyYVRvRnJhZztcblx0XHRpZiAoIGlzT3J0aG9ncmFwaGljICkge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9GcmFnID0gbm9ybWFsaXplKCB2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uICk7XG5cdFx0fVxuXHRcdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0XHQjaWZkZWYgRU5WTUFQX01PREVfUkVGTEVDVElPTlxuXHRcdFx0dmVjMyByZWZsZWN0VmVjID0gcmVmbGVjdCggY2FtZXJhVG9GcmFnLCB3b3JsZE5vcm1hbCApO1xuXHRcdCNlbHNlXG5cdFx0XHR2ZWMzIHJlZmxlY3RWZWMgPSByZWZyYWN0KCBjYW1lcmFUb0ZyYWcsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2Vsc2Vcblx0XHR2ZWMzIHJlZmxlY3RWZWMgPSB2UmVmbGVjdDtcblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZNQVBfVFlQRV9DVUJFXG5cdFx0dmVjNCBlbnZDb2xvciA9IHRleHR1cmVDdWJlKCBlbnZNYXAsIHZlYzMoIGZsaXBFbnZNYXAgKiByZWZsZWN0VmVjLngsIHJlZmxlY3RWZWMueXogKSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHR2ZWM0IGVudkNvbG9yID0gdGV4dHVyZUN1YmVVViggZW52TWFwLCByZWZsZWN0VmVjLCAwLjAgKTtcblx0I2Vsc2Vcblx0XHR2ZWM0IGVudkNvbG9yID0gdmVjNCggMC4wICk7XG5cdCNlbmRpZlxuXHQjaWZkZWYgRU5WTUFQX0JMRU5ESU5HX01VTFRJUExZXG5cdFx0b3V0Z29pbmdMaWdodCA9IG1peCggb3V0Z29pbmdMaWdodCwgb3V0Z29pbmdMaWdodCAqIGVudkNvbG9yLnh5eiwgc3BlY3VsYXJTdHJlbmd0aCAqIHJlZmxlY3Rpdml0eSApO1xuXHQjZWxpZiBkZWZpbmVkKCBFTlZNQVBfQkxFTkRJTkdfTUlYIClcblx0XHRvdXRnb2luZ0xpZ2h0ID0gbWl4KCBvdXRnb2luZ0xpZ2h0LCBlbnZDb2xvci54eXosIHNwZWN1bGFyU3RyZW5ndGggKiByZWZsZWN0aXZpdHkgKTtcblx0I2VsaWYgZGVmaW5lZCggRU5WTUFQX0JMRU5ESU5HX0FERCApXG5cdFx0b3V0Z29pbmdMaWdodCArPSBlbnZDb2xvci54eXogKiBzcGVjdWxhclN0cmVuZ3RoICogcmVmbGVjdGl2aXR5O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHR1bmlmb3JtIGZsb2F0IGVudk1hcEludGVuc2l0eTtcblx0dW5pZm9ybSBmbG9hdCBmbGlwRW52TWFwO1xuXHQjaWZkZWYgRU5WTUFQX1RZUEVfQ1VCRVxuXHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXHQjZWxzZVxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0I2VuZGlmXG5cdFxuI2VuZGlmIixlbnZtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9FTlZNQVBcblx0dW5pZm9ybSBmbG9hdCByZWZsZWN0aXZpdHk7XG5cdCNpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFVTRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdFx0dW5pZm9ybSBmbG9hdCByZWZyYWN0aW9uUmF0aW87XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0VOVk1BUFxuXHQjaWYgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBVU0VfTk9STUFMTUFQICkgfHxkZWZpbmVkKCBQSE9ORyApXG5cdFx0I2RlZmluZSBFTlZfV09STERQT1Ncblx0I2VuZGlmXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHRcblx0XHR2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMzIHZSZWZsZWN0O1xuXHRcdHVuaWZvcm0gZmxvYXQgcmVmcmFjdGlvblJhdGlvO1xuXHQjZW5kaWZcbiNlbmRpZiIsZW52bWFwX3BoeXNpY2FsX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQIClcblx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRlJBQ1RJT05cblx0XHR1bmlmb3JtIGZsb2F0IHJlZnJhY3Rpb25SYXRpbztcblx0I2VuZGlmXG5cdHZlYzMgZ2V0SUJMSXJyYWRpYW5jZSggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdFx0I2lmIGRlZmluZWQoIEVOVk1BUF9UWVBFX0NVQkVfVVYgKVxuXHRcdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdFx0dmVjNCBlbnZNYXBDb2xvciA9IHRleHR1cmVDdWJlVVYoIGVudk1hcCwgd29ybGROb3JtYWwsIDEuMCApO1xuXHRcdFx0cmV0dXJuIFBJICogZW52TWFwQ29sb3IucmdiICogZW52TWFwSW50ZW5zaXR5O1xuXHRcdCNlbHNlXG5cdFx0XHRyZXR1cm4gdmVjMyggMC4wICk7XG5cdFx0I2VuZGlmXG5cdH1cblx0dmVjMyBnZXRJQkxSYWRpYW5jZSggY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzICkge1xuXHRcdCNpZiBkZWZpbmVkKCBFTlZNQVBfVFlQRV9DVUJFX1VWIClcblx0XHRcdHZlYzMgcmVmbGVjdFZlYztcblx0XHRcdCNpZmRlZiBFTlZNQVBfTU9ERV9SRUZMRUNUSU9OXG5cdFx0XHRcdHJlZmxlY3RWZWMgPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xuXHRcdFx0XHRyZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xuXHRcdFx0I2Vsc2Vcblx0XHRcdFx0cmVmbGVjdFZlYyA9IHJlZnJhY3QoIC0gdmlld0Rpciwgbm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHRcdCNlbmRpZlxuXHRcdFx0cmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcblx0XHRcdHZlYzQgZW52TWFwQ29sb3IgPSB0ZXh0dXJlQ3ViZVVWKCBlbnZNYXAsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xuXHRcdFx0cmV0dXJuIGVudk1hcENvbG9yLnJnYiAqIGVudk1hcEludGVuc2l0eTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHZlYzMoIDAuMCApO1xuXHRcdCNlbmRpZlxuXHR9XG4jZW5kaWYiLGVudm1hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfRU5WTUFQXG5cdCNpZmRlZiBFTlZfV09STERQT1Ncblx0XHR2V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24ueHl6O1xuXHQjZWxzZVxuXHRcdHZlYzMgY2FtZXJhVG9WZXJ0ZXg7XG5cdFx0aWYgKCBpc09ydGhvZ3JhcGhpYyApIHtcblx0XHRcdGNhbWVyYVRvVmVydGV4ID0gbm9ybWFsaXplKCB2ZWMzKCAtIHZpZXdNYXRyaXhbIDAgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDEgXVsgMiBdLCAtIHZpZXdNYXRyaXhbIDIgXVsgMiBdICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FtZXJhVG9WZXJ0ZXggPSBub3JtYWxpemUoIHdvcmxkUG9zaXRpb24ueHl6IC0gY2FtZXJhUG9zaXRpb24gKTtcblx0XHR9XG5cdFx0dmVjMyB3b3JsZE5vcm1hbCA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHRyYW5zZm9ybWVkTm9ybWFsLCB2aWV3TWF0cml4ICk7XG5cdFx0I2lmZGVmIEVOVk1BUF9NT0RFX1JFRkxFQ1RJT05cblx0XHRcdHZSZWZsZWN0ID0gcmVmbGVjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsICk7XG5cdFx0I2Vsc2Vcblx0XHRcdHZSZWZsZWN0ID0gcmVmcmFjdCggY2FtZXJhVG9WZXJ0ZXgsIHdvcmxkTm9ybWFsLCByZWZyYWN0aW9uUmF0aW8gKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWYiLGZvZ192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZGb2dEZXB0aCA9IC0gbXZQb3NpdGlvbi56O1xuI2VuZGlmIixmb2dfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfRk9HXG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuI2VuZGlmIixmb2dfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfRk9HXG5cdCNpZmRlZiBGT0dfRVhQMlxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IDEuMCAtIGV4cCggLSBmb2dEZW5zaXR5ICogZm9nRGVuc2l0eSAqIHZGb2dEZXB0aCAqIHZGb2dEZXB0aCApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IGZvZ0ZhY3RvciA9IHNtb290aHN0ZXAoIGZvZ05lYXIsIGZvZ0ZhciwgdkZvZ0RlcHRoICk7XG5cdCNlbmRpZlxuXHRnbF9GcmFnQ29sb3IucmdiID0gbWl4KCBnbF9GcmFnQ29sb3IucmdiLCBmb2dDb2xvciwgZm9nRmFjdG9yICk7XG4jZW5kaWYiLGZvZ19wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX0ZPR1xuXHR1bmlmb3JtIHZlYzMgZm9nQ29sb3I7XG5cdHZhcnlpbmcgZmxvYXQgdkZvZ0RlcHRoO1xuXHQjaWZkZWYgRk9HX0VYUDJcblx0XHR1bmlmb3JtIGZsb2F0IGZvZ0RlbnNpdHk7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBmb2dOZWFyO1xuXHRcdHVuaWZvcm0gZmxvYXQgZm9nRmFyO1xuXHQjZW5kaWZcbiNlbmRpZiIsZ3JhZGllbnRtYXBfcGFyc19mcmFnbWVudDoiI2lmZGVmIFVTRV9HUkFESUVOVE1BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBncmFkaWVudE1hcDtcbiNlbmRpZlxudmVjMyBnZXRHcmFkaWVudElycmFkaWFuY2UoIHZlYzMgbm9ybWFsLCB2ZWMzIGxpZ2h0RGlyZWN0aW9uICkge1xuXHRmbG9hdCBkb3ROTCA9IGRvdCggbm9ybWFsLCBsaWdodERpcmVjdGlvbiApO1xuXHR2ZWMyIGNvb3JkID0gdmVjMiggZG90TkwgKiAwLjUgKyAwLjUsIDAuMCApO1xuXHQjaWZkZWYgVVNFX0dSQURJRU5UTUFQXG5cdFx0cmV0dXJuIHZlYzMoIHRleHR1cmUyRCggZ3JhZGllbnRNYXAsIGNvb3JkICkuciApO1xuXHQjZWxzZVxuXHRcdHJldHVybiAoIGNvb3JkLnggPCAwLjcgKSA/IHZlYzMoIDAuNyApIDogdmVjMyggMS4wICk7XG5cdCNlbmRpZlxufSIsbGlnaHRtYXBfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dmVjNCBsaWdodE1hcFRleGVsID0gdGV4dHVyZTJEKCBsaWdodE1hcCwgdlV2MiApO1xuXHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdCNpZm5kZWYgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUU1xuXHRcdGxpZ2h0TWFwSXJyYWRpYW5jZSAqPSBQSTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG4jZW5kaWYiLGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTElHSFRNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgbGlnaHRNYXA7XG5cdHVuaWZvcm0gZmxvYXQgbGlnaHRNYXBJbnRlbnNpdHk7XG4jZW5kaWYiLGxpZ2h0c19sYW1iZXJ0X3ZlcnRleDoidmVjMyBkaWZmdXNlID0gdmVjMyggMS4wICk7XG5HZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5O1xuZ2VvbWV0cnkucG9zaXRpb24gPSBtdlBvc2l0aW9uLnh5ejtcbmdlb21ldHJ5Lm5vcm1hbCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWROb3JtYWwgKTtcbmdlb21ldHJ5LnZpZXdEaXIgPSAoIGlzT3J0aG9ncmFwaGljICkgPyB2ZWMzKCAwLCAwLCAxICkgOiBub3JtYWxpemUoIC1tdlBvc2l0aW9uLnh5eiApO1xuR2VvbWV0cmljQ29udGV4dCBiYWNrR2VvbWV0cnk7XG5iYWNrR2VvbWV0cnkucG9zaXRpb24gPSBnZW9tZXRyeS5wb3NpdGlvbjtcbmJhY2tHZW9tZXRyeS5ub3JtYWwgPSAtZ2VvbWV0cnkubm9ybWFsO1xuYmFja0dlb21ldHJ5LnZpZXdEaXIgPSBnZW9tZXRyeS52aWV3RGlyO1xudkxpZ2h0RnJvbnQgPSB2ZWMzKCAwLjAgKTtcbnZJbmRpcmVjdEZyb250ID0gdmVjMyggMC4wICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZMaWdodEJhY2sgPSB2ZWMzKCAwLjAgKTtcblx0dkluZGlyZWN0QmFjayA9IHZlYzMoIDAuMCApO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuZmxvYXQgZG90Tkw7XG52ZWMzIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcbnZJbmRpcmVjdEZyb250ICs9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoIGFtYmllbnRMaWdodENvbG9yICk7XG52SW5kaXJlY3RGcm9udCArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsICk7XG4jaWZkZWYgRE9VQkxFX1NJREVEXG5cdHZJbmRpcmVjdEJhY2sgKz0gZ2V0QW1iaWVudExpZ2h0SXJyYWRpYW5jZSggYW1iaWVudExpZ2h0Q29sb3IgKTtcblx0dkluZGlyZWN0QmFjayArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuI2VuZGlmXG4jaWYgTlVNX1BPSU5UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fUE9JTlRfTElHSFRTOyBpICsrICkge1xuXHRcdGdldFBvaW50TGlnaHRJbmZvKCBwb2ludExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9TUE9UX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fU1BPVF9MSUdIVFM7IGkgKysgKSB7XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9ESVJfTElHSFRTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdLCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHRkb3ROTCA9IGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2UgPSBkaXJlY3RMaWdodC5jb2xvcjtcblx0XHR2TGlnaHRGcm9udCArPSBzYXR1cmF0ZSggZG90TkwgKSAqIGRpcmVjdExpZ2h0Q29sb3JfRGlmZnVzZTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2TGlnaHRCYWNrICs9IHNhdHVyYXRlKCAtIGRvdE5MICkgKiBkaXJlY3RMaWdodENvbG9yX0RpZmZ1c2U7XG5cdFx0I2VuZGlmXG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIE5VTV9IRU1JX0xJR0hUUyA+IDBcblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRmb3IgKCBpbnQgaSA9IDA7IGkgPCBOVU1fSEVNSV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0dkluZGlyZWN0RnJvbnQgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR2SW5kaXJlY3RCYWNrICs9IGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGhlbWlzcGhlcmVMaWdodHNbIGkgXSwgYmFja0dlb21ldHJ5Lm5vcm1hbCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWYiLGxpZ2h0c19wYXJzX2JlZ2luOiJ1bmlmb3JtIGJvb2wgcmVjZWl2ZVNoYWRvdztcbnVuaWZvcm0gdmVjMyBhbWJpZW50TGlnaHRDb2xvcjtcbnVuaWZvcm0gdmVjMyBsaWdodFByb2JlWyA5IF07XG52ZWMzIHNoR2V0SXJyYWRpYW5jZUF0KCBpbiB2ZWMzIG5vcm1hbCwgaW4gdmVjMyBzaENvZWZmaWNpZW50c1sgOSBdICkge1xuXHRmbG9hdCB4ID0gbm9ybWFsLngsIHkgPSBub3JtYWwueSwgeiA9IG5vcm1hbC56O1xuXHR2ZWMzIHJlc3VsdCA9IHNoQ29lZmZpY2llbnRzWyAwIF0gKiAwLjg4NjIyNztcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyAxIF0gKiAyLjAgKiAwLjUxMTY2NCAqIHk7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDMgXSAqIDIuMCAqIDAuNTExNjY0ICogeDtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA0IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB5O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XG5cdHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNiBdICogKCAwLjc0MzEyNSAqIHogKiB6IC0gMC4yNDc3MDggKTtcblx0cmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA3IF0gKiAyLjAgKiAwLjQyOTA0MyAqIHggKiB6O1xuXHRyZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XG5cdHJldHVybiByZXN1bHQ7XG59XG52ZWMzIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGxpZ2h0UHJvYmVbIDkgXSwgY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHZlYzMgd29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcblx0dmVjMyBpcnJhZGlhbmNlID0gc2hHZXRJcnJhZGlhbmNlQXQoIHdvcmxkTm9ybWFsLCBsaWdodFByb2JlICk7XG5cdHJldHVybiBpcnJhZGlhbmNlO1xufVxudmVjMyBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBjb25zdCBpbiB2ZWMzIGFtYmllbnRMaWdodENvbG9yICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBhbWJpZW50TGlnaHRDb2xvcjtcblx0cmV0dXJuIGlycmFkaWFuY2U7XG59XG5mbG9hdCBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBsaWdodERpc3RhbmNlLCBjb25zdCBpbiBmbG9hdCBjdXRvZmZEaXN0YW5jZSwgY29uc3QgaW4gZmxvYXQgZGVjYXlFeHBvbmVudCApIHtcblx0I2lmIGRlZmluZWQgKCBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTIClcblx0XHRmbG9hdCBkaXN0YW5jZUZhbGxvZmYgPSAxLjAgLyBtYXgoIHBvdyggbGlnaHREaXN0YW5jZSwgZGVjYXlFeHBvbmVudCApLCAwLjAxICk7XG5cdFx0aWYgKCBjdXRvZmZEaXN0YW5jZSA+IDAuMCApIHtcblx0XHRcdGRpc3RhbmNlRmFsbG9mZiAqPSBwb3cyKCBzYXR1cmF0ZSggMS4wIC0gcG93NCggbGlnaHREaXN0YW5jZSAvIGN1dG9mZkRpc3RhbmNlICkgKSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZGlzdGFuY2VGYWxsb2ZmO1xuXHQjZWxzZVxuXHRcdGlmICggY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCApIHtcblx0XHRcdHJldHVybiBwb3coIHNhdHVyYXRlKCAtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCApLCBkZWNheUV4cG9uZW50ICk7XG5cdFx0fVxuXHRcdHJldHVybiAxLjA7XG5cdCNlbmRpZlxufVxuZmxvYXQgZ2V0U3BvdEF0dGVudWF0aW9uKCBjb25zdCBpbiBmbG9hdCBjb25lQ29zaW5lLCBjb25zdCBpbiBmbG9hdCBwZW51bWJyYUNvc2luZSwgY29uc3QgaW4gZmxvYXQgYW5nbGVDb3NpbmUgKSB7XG5cdHJldHVybiBzbW9vdGhzdGVwKCBjb25lQ29zaW5lLCBwZW51bWJyYUNvc2luZSwgYW5nbGVDb3NpbmUgKTtcbn1cbiNpZiBOVU1fRElSX0xJR0hUUyA+IDBcblx0c3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xuXHRcdHZlYzMgZGlyZWN0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdH07XG5cdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0c1sgTlVNX0RJUl9MSUdIVFMgXTtcblx0dm9pZCBnZXREaXJlY3Rpb25hbExpZ2h0SW5mbyggY29uc3QgaW4gRGlyZWN0aW9uYWxMaWdodCBkaXJlY3Rpb25hbExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHRsaWdodC5jb2xvciA9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3I7XG5cdFx0bGlnaHQuZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XG5cdFx0bGlnaHQudmlzaWJsZSA9IHRydWU7XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9QT0lOVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBQb2ludExpZ2h0IHtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgY29sb3I7XG5cdFx0ZmxvYXQgZGlzdGFuY2U7XG5cdFx0ZmxvYXQgZGVjYXk7XG5cdH07XG5cdHVuaWZvcm0gUG9pbnRMaWdodCBwb2ludExpZ2h0c1sgTlVNX1BPSU5UX0xJR0hUUyBdO1xuXHR2b2lkIGdldFBvaW50TGlnaHRJbmZvKCBjb25zdCBpbiBQb2ludExpZ2h0IHBvaW50TGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIG91dCBJbmNpZGVudExpZ2h0IGxpZ2h0ICkge1xuXHRcdHZlYzMgbFZlY3RvciA9IHBvaW50TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBsaWdodERpc3RhbmNlID0gbGVuZ3RoKCBsVmVjdG9yICk7XG5cdFx0bGlnaHQuY29sb3IgPSBwb2ludExpZ2h0LmNvbG9yO1xuXHRcdGxpZ2h0LmNvbG9yICo9IGdldERpc3RhbmNlQXR0ZW51YXRpb24oIGxpZ2h0RGlzdGFuY2UsIHBvaW50TGlnaHQuZGlzdGFuY2UsIHBvaW50TGlnaHQuZGVjYXkgKTtcblx0XHRsaWdodC52aXNpYmxlID0gKCBsaWdodC5jb2xvciAhPSB2ZWMzKCAwLjAgKSApO1xuXHR9XG4jZW5kaWZcbiNpZiBOVU1fU1BPVF9MSUdIVFMgPiAwXG5cdHN0cnVjdCBTcG90TGlnaHQge1xuXHRcdHZlYzMgcG9zaXRpb247XG5cdFx0dmVjMyBkaXJlY3Rpb247XG5cdFx0dmVjMyBjb2xvcjtcblx0XHRmbG9hdCBkaXN0YW5jZTtcblx0XHRmbG9hdCBkZWNheTtcblx0XHRmbG9hdCBjb25lQ29zO1xuXHRcdGZsb2F0IHBlbnVtYnJhQ29zO1xuXHR9O1xuXHR1bmlmb3JtIFNwb3RMaWdodCBzcG90TGlnaHRzWyBOVU1fU1BPVF9MSUdIVFMgXTtcblx0dm9pZCBnZXRTcG90TGlnaHRJbmZvKCBjb25zdCBpbiBTcG90TGlnaHQgc3BvdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBvdXQgSW5jaWRlbnRMaWdodCBsaWdodCApIHtcblx0XHR2ZWMzIGxWZWN0b3IgPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcblx0XHRsaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcblx0XHRmbG9hdCBhbmdsZUNvcyA9IGRvdCggbGlnaHQuZGlyZWN0aW9uLCBzcG90TGlnaHQuZGlyZWN0aW9uICk7XG5cdFx0ZmxvYXQgc3BvdEF0dGVudWF0aW9uID0gZ2V0U3BvdEF0dGVudWF0aW9uKCBzcG90TGlnaHQuY29uZUNvcywgc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBhbmdsZUNvcyApO1xuXHRcdGlmICggc3BvdEF0dGVudWF0aW9uID4gMC4wICkge1xuXHRcdFx0ZmxvYXQgbGlnaHREaXN0YW5jZSA9IGxlbmd0aCggbFZlY3RvciApO1xuXHRcdFx0bGlnaHQuY29sb3IgPSBzcG90TGlnaHQuY29sb3IgKiBzcG90QXR0ZW51YXRpb247XG5cdFx0XHRsaWdodC5jb2xvciAqPSBnZXREaXN0YW5jZUF0dGVudWF0aW9uKCBsaWdodERpc3RhbmNlLCBzcG90TGlnaHQuZGlzdGFuY2UsIHNwb3RMaWdodC5kZWNheSApO1xuXHRcdFx0bGlnaHQudmlzaWJsZSA9ICggbGlnaHQuY29sb3IgIT0gdmVjMyggMC4wICkgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGlnaHQuY29sb3IgPSB2ZWMzKCAwLjAgKTtcblx0XHRcdGxpZ2h0LnZpc2libGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cbiNlbmRpZlxuI2lmIE5VTV9SRUNUX0FSRUFfTElHSFRTID4gMFxuXHRzdHJ1Y3QgUmVjdEFyZWFMaWdodCB7XG5cdFx0dmVjMyBjb2xvcjtcblx0XHR2ZWMzIHBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoO1xuXHRcdHZlYzMgaGFsZkhlaWdodDtcblx0fTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgbHRjXzE7XHR1bmlmb3JtIHNhbXBsZXIyRCBsdGNfMjtcblx0dW5pZm9ybSBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHRzWyBOVU1fUkVDVF9BUkVBX0xJR0hUUyBdO1xuI2VuZGlmXG4jaWYgTlVNX0hFTUlfTElHSFRTID4gMFxuXHRzdHJ1Y3QgSGVtaXNwaGVyZUxpZ2h0IHtcblx0XHR2ZWMzIGRpcmVjdGlvbjtcblx0XHR2ZWMzIHNreUNvbG9yO1xuXHRcdHZlYzMgZ3JvdW5kQ29sb3I7XG5cdH07XG5cdHVuaWZvcm0gSGVtaXNwaGVyZUxpZ2h0IGhlbWlzcGhlcmVMaWdodHNbIE5VTV9IRU1JX0xJR0hUUyBdO1xuXHR2ZWMzIGdldEhlbWlzcGhlcmVMaWdodElycmFkaWFuY2UoIGNvbnN0IGluIEhlbWlzcGhlcmVMaWdodCBoZW1pTGlnaHQsIGNvbnN0IGluIHZlYzMgbm9ybWFsICkge1xuXHRcdGZsb2F0IGRvdE5MID0gZG90KCBub3JtYWwsIGhlbWlMaWdodC5kaXJlY3Rpb24gKTtcblx0XHRmbG9hdCBoZW1pRGlmZnVzZVdlaWdodCA9IDAuNSAqIGRvdE5MICsgMC41O1xuXHRcdHZlYzMgaXJyYWRpYW5jZSA9IG1peCggaGVtaUxpZ2h0Lmdyb3VuZENvbG9yLCBoZW1pTGlnaHQuc2t5Q29sb3IsIGhlbWlEaWZmdXNlV2VpZ2h0ICk7XG5cdFx0cmV0dXJuIGlycmFkaWFuY2U7XG5cdH1cbiNlbmRpZiIsbGlnaHRzX3Rvb25fZnJhZ21lbnQ6IlRvb25NYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2I7IixsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50OiJ2YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbnN0cnVjdCBUb29uTWF0ZXJpYWwge1xuXHR2ZWMzIGRpZmZ1c2VDb2xvcjtcbn07XG52b2lkIFJFX0RpcmVjdF9Ub29uKCBjb25zdCBpbiBJbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0LCBjb25zdCBpbiBHZW9tZXRyaWNDb250ZXh0IGdlb21ldHJ5LCBjb25zdCBpbiBUb29uTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRHcmFkaWVudElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZGlyZWN0TGlnaHQuZGlyZWN0aW9uICkgKiBkaXJlY3RMaWdodC5jb2xvcjtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1Rvb24oIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gVG9vbk1hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9Ub29uXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfVG9vblxuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waG9uZ19mcmFnbWVudDoiQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsO1xubWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYjtcbm1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBzcGVjdWxhcjtcbm1hdGVyaWFsLnNwZWN1bGFyU2hpbmluZXNzID0gc2hpbmluZXNzO1xubWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aCA9IHNwZWN1bGFyU3RyZW5ndGg7IixsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudDoidmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG5zdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcblx0dmVjMyBkaWZmdXNlQ29sb3I7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJTaGluaW5lc3M7XG5cdGZsb2F0IHNwZWN1bGFyU3RyZW5ndGg7XG59O1xudm9pZCBSRV9EaXJlY3RfQmxpbm5QaG9uZyggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0ZmxvYXQgZG90TkwgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdHZlYzMgaXJyYWRpYW5jZSA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gQmxpbm5QaG9uZ01hdGVyaWFsIG1hdGVyaWFsLCBpbm91dCBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCApIHtcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9CbGlublBob25nXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZ1xuI2RlZmluZSBNYXRlcmlhbF9MaWdodFByb2JlTE9EKCBtYXRlcmlhbCApXHQoMCkiLGxpZ2h0c19waHlzaWNhbF9mcmFnbWVudDoiUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbDtcbm1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xudmVjMyBkeHkgPSBtYXgoIGFicyggZEZkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRGZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xuZmxvYXQgZ2VvbWV0cnlSb3VnaG5lc3MgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XG5tYXRlcmlhbC5yb3VnaG5lc3MgPSBtYXgoIHJvdWdobmVzc0ZhY3RvciwgMC4wNTI1ICk7bWF0ZXJpYWwucm91Z2huZXNzICs9IGdlb21ldHJ5Um91Z2huZXNzO1xubWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xuI2lmZGVmIElPUlxuXHQjaWZkZWYgU1BFQ1VMQVJcblx0XHRmbG9hdCBzcGVjdWxhckludGVuc2l0eUZhY3RvciA9IHNwZWN1bGFySW50ZW5zaXR5O1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHNwZWN1bGFyQ29sb3I7XG5cdFx0I2lmZGVmIFVTRV9TUEVDVUxBUklOVEVOU0lUWU1BUFxuXHRcdFx0c3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckludGVuc2l0eU1hcCwgdlV2ICkuYTtcblx0XHQjZW5kaWZcblx0XHQjaWZkZWYgVVNFX1NQRUNVTEFSQ09MT1JNQVBcblx0XHRcdHNwZWN1bGFyQ29sb3JGYWN0b3IgKj0gdGV4dHVyZTJEKCBzcGVjdWxhckNvbG9yTWFwLCB2VXYgKS5yZ2I7XG5cdFx0I2VuZGlmXG5cdFx0bWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xuXHQjZWxzZVxuXHRcdGZsb2F0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yID0gMS4wO1xuXHRcdHZlYzMgc3BlY3VsYXJDb2xvckZhY3RvciA9IHZlYzMoIDEuMCApO1xuXHRcdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggbWluKCBwb3cyKCAoIGlvciAtIDEuMCApIC8gKCBpb3IgKyAxLjAgKSApICogc3BlY3VsYXJDb2xvckZhY3RvciwgdmVjMyggMS4wICkgKSAqIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcbiNlbHNlXG5cdG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzMoIDAuMDQgKSwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XG5cdG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBjbGVhcmNvYXQ7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IGNsZWFyY29hdFJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0RjAgPSB2ZWMzKCAwLjA0ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXQgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRNYXAsIHZVdiApLng7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NNQVBcblx0XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBjbGVhcmNvYXRSb3VnaG5lc3NNYXAsIHZVdiApLnk7XG5cdCNlbmRpZlxuXHRtYXRlcmlhbC5jbGVhcmNvYXQgPSBzYXR1cmF0ZSggbWF0ZXJpYWwuY2xlYXJjb2F0ICk7XHRtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XG5cdG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcblx0bWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1NIRUVOXG5cdG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBzaGVlbkNvbG9yO1xuXHQjaWZkZWYgVVNFX1NIRUVOQ09MT1JNQVBcblx0XHRtYXRlcmlhbC5zaGVlbkNvbG9yICo9IHRleHR1cmUyRCggc2hlZW5Db2xvck1hcCwgdlV2ICkucmdiO1xuXHQjZW5kaWZcblx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0bWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj0gdGV4dHVyZTJEKCBzaGVlblJvdWdobmVzc01hcCwgdlV2ICkuYTtcblx0I2VuZGlmXG4jZW5kaWYiLGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50OiJzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XG5cdHZlYzMgZGlmZnVzZUNvbG9yO1xuXHRmbG9hdCByb3VnaG5lc3M7XG5cdHZlYzMgc3BlY3VsYXJDb2xvcjtcblx0ZmxvYXQgc3BlY3VsYXJGOTA7XG5cdCNpZmRlZiBVU0VfQ0xFQVJDT0FUXG5cdFx0ZmxvYXQgY2xlYXJjb2F0O1xuXHRcdGZsb2F0IGNsZWFyY29hdFJvdWdobmVzcztcblx0XHR2ZWMzIGNsZWFyY29hdEYwO1xuXHRcdGZsb2F0IGNsZWFyY29hdEY5MDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHR2ZWMzIHNoZWVuQ29sb3I7XG5cdFx0ZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNlbmRpZlxufTtcbnZlYzMgY2xlYXJjb2F0U3BlY3VsYXIgPSB2ZWMzKCAwLjAgKTtcbnZlYzMgc2hlZW5TcGVjdWxhciA9IHZlYzMoIDAuMCApO1xuZmxvYXQgSUJMU2hlZW5CUkRGKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MpIHtcblx0ZmxvYXQgZG90TlYgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xuXHRmbG9hdCByMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcblx0ZmxvYXQgYSA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcblx0ZmxvYXQgYiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xuXHRmbG9hdCBERyA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcblx0cmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcbn1cbnZlYzIgREZHQXBwcm94KCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdGZsb2F0IGRvdE5WID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcblx0Y29uc3QgdmVjNCBjMCA9IHZlYzQoIC0gMSwgLSAwLjAyNzUsIC0gMC41NzIsIDAuMDIyICk7XG5cdGNvbnN0IHZlYzQgYzEgPSB2ZWM0KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xuXHR2ZWM0IHIgPSByb3VnaG5lc3MgKiBjMCArIGMxO1xuXHRmbG9hdCBhMDA0ID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcblx0dmVjMiBmYWIgPSB2ZWMyKCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xuXHRyZXR1cm4gZmFiO1xufVxudmVjMyBFbnZpcm9ubWVudEJSREYoIGNvbnN0IGluIHZlYzMgbm9ybWFsLCBjb25zdCBpbiB2ZWMzIHZpZXdEaXIsIGNvbnN0IGluIHZlYzMgc3BlY3VsYXJDb2xvciwgY29uc3QgaW4gZmxvYXQgc3BlY3VsYXJGOTAsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcyApIHtcblx0dmVjMiBmYWIgPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XG5cdHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBzcGVjdWxhckY5MCAqIGZhYi55O1xufVxudm9pZCBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBjb25zdCBpbiB2ZWMzIG5vcm1hbCwgY29uc3QgaW4gdmVjMyB2aWV3RGlyLCBjb25zdCBpbiB2ZWMzIHNwZWN1bGFyQ29sb3IsIGNvbnN0IGluIGZsb2F0IHNwZWN1bGFyRjkwLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MsIGlub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXIgKSB7XG5cdHZlYzIgZmFiID0gREZHQXBwcm94KCBub3JtYWwsIHZpZXdEaXIsIHJvdWdobmVzcyApO1xuXHR2ZWMzIEZzc0VzcyA9IHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XG5cdGZsb2F0IEVzcyA9IGZhYi54ICsgZmFiLnk7XG5cdGZsb2F0IEVtcyA9IDEuMCAtIEVzcztcblx0dmVjMyBGYXZnID0gc3BlY3VsYXJDb2xvciArICggMS4wIC0gc3BlY3VsYXJDb2xvciApICogMC4wNDc2MTk7XHR2ZWMzIEZtcyA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcblx0c2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XG5cdG11bHRpU2NhdHRlciArPSBGbXMgKiBFbXM7XG59XG4jaWYgTlVNX1JFQ1RfQVJFQV9MSUdIVFMgPiAwXG5cdHZvaWQgUkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsKCBjb25zdCBpbiBSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRcdHZlYzMgbm9ybWFsID0gZ2VvbWV0cnkubm9ybWFsO1xuXHRcdHZlYzMgdmlld0RpciA9IGdlb21ldHJ5LnZpZXdEaXI7XG5cdFx0dmVjMyBwb3NpdGlvbiA9IGdlb21ldHJ5LnBvc2l0aW9uO1xuXHRcdHZlYzMgbGlnaHRQb3MgPSByZWN0QXJlYUxpZ2h0LnBvc2l0aW9uO1xuXHRcdHZlYzMgaGFsZldpZHRoID0gcmVjdEFyZWFMaWdodC5oYWxmV2lkdGg7XG5cdFx0dmVjMyBoYWxmSGVpZ2h0ID0gcmVjdEFyZWFMaWdodC5oYWxmSGVpZ2h0O1xuXHRcdHZlYzMgbGlnaHRDb2xvciA9IHJlY3RBcmVhTGlnaHQuY29sb3I7XG5cdFx0ZmxvYXQgcm91Z2huZXNzID0gbWF0ZXJpYWwucm91Z2huZXNzO1xuXHRcdHZlYzMgcmVjdENvb3Jkc1sgNCBdO1xuXHRcdHJlY3RDb29yZHNbIDAgXSA9IGxpZ2h0UG9zICsgaGFsZldpZHRoIC0gaGFsZkhlaWdodDtcdFx0cmVjdENvb3Jkc1sgMSBdID0gbGlnaHRQb3MgLSBoYWxmV2lkdGggLSBoYWxmSGVpZ2h0O1xuXHRcdHJlY3RDb29yZHNbIDIgXSA9IGxpZ2h0UG9zIC0gaGFsZldpZHRoICsgaGFsZkhlaWdodDtcblx0XHRyZWN0Q29vcmRzWyAzIF0gPSBsaWdodFBvcyArIGhhbGZXaWR0aCArIGhhbGZIZWlnaHQ7XG5cdFx0dmVjMiB1diA9IExUQ19Vdiggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcblx0XHR2ZWM0IHQxID0gdGV4dHVyZTJEKCBsdGNfMSwgdXYgKTtcblx0XHR2ZWM0IHQyID0gdGV4dHVyZTJEKCBsdGNfMiwgdXYgKTtcblx0XHRtYXQzIG1JbnYgPSBtYXQzKFxuXHRcdFx0dmVjMyggdDEueCwgMCwgdDEueSApLFxuXHRcdFx0dmVjMyggICAgMCwgMSwgICAgMCApLFxuXHRcdFx0dmVjMyggdDEueiwgMCwgdDEudyApXG5cdFx0KTtcblx0XHR2ZWMzIGZyZXNuZWwgPSAoIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKiB0Mi54ICsgKCB2ZWMzKCAxLjAgKSAtIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKSAqIHQyLnkgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArPSBsaWdodENvbG9yICogZnJlc25lbCAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbUludiwgcmVjdENvb3JkcyApO1xuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRDb2xvciAqIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqIExUQ19FdmFsdWF0ZSggbm9ybWFsLCB2aWV3RGlyLCBwb3NpdGlvbiwgbWF0MyggMS4wICksIHJlY3RDb29yZHMgKTtcblx0fVxuI2VuZGlmXG52b2lkIFJFX0RpcmVjdF9QaHlzaWNhbCggY29uc3QgaW4gSW5jaWRlbnRMaWdodCBkaXJlY3RMaWdodCwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgKSB7XG5cdGZsb2F0IGRvdE5MID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBkb3ROTCAqIGRpcmVjdExpZ2h0LmNvbG9yO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGZsb2F0IGRvdE5MY2MgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XG5cdFx0dmVjMyBjY0lycmFkaWFuY2UgPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XG5cdFx0Y2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcblx0cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcbn1cbnZvaWQgUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBjb25zdCBpbiB2ZWMzIGlycmFkaWFuY2UsIGNvbnN0IGluIEdlb21ldHJpY0NvbnRleHQgZ2VvbWV0cnksIGNvbnN0IGluIFBoeXNpY2FsTWF0ZXJpYWwgbWF0ZXJpYWwsIGlub3V0IFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ICkge1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XG59XG52b2lkIFJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIGNvbnN0IGluIHZlYzMgcmFkaWFuY2UsIGNvbnN0IGluIHZlYzMgaXJyYWRpYW5jZSwgY29uc3QgaW4gdmVjMyBjbGVhcmNvYXRSYWRpYW5jZSwgY29uc3QgaW4gR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeSwgY29uc3QgaW4gUGh5c2ljYWxNYXRlcmlhbCBtYXRlcmlhbCwgaW5vdXQgUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQpIHtcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRjbGVhcmNvYXRTcGVjdWxhciArPSBjbGVhcmNvYXRSYWRpYW5jZSAqIEVudmlyb25tZW50QlJERiggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU0hFRU5cblx0XHRzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XG5cdCNlbmRpZlxuXHR2ZWMzIHNpbmdsZVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBtdWx0aVNjYXR0ZXJpbmcgPSB2ZWMzKCAwLjAgKTtcblx0dmVjMyBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2UgPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcblx0Y29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzLCBzaW5nbGVTY2F0dGVyaW5nLCBtdWx0aVNjYXR0ZXJpbmcgKTtcblx0dmVjMyBkaWZmdXNlID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSAoIHNpbmdsZVNjYXR0ZXJpbmcgKyBtdWx0aVNjYXR0ZXJpbmcgKSApO1xuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlICogc2luZ2xlU2NhdHRlcmluZztcblx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSBtdWx0aVNjYXR0ZXJpbmcgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBkaWZmdXNlICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xufVxuI2RlZmluZSBSRV9EaXJlY3RcdFx0XHRcdFJFX0RpcmVjdF9QaHlzaWNhbFxuI2RlZmluZSBSRV9EaXJlY3RfUmVjdEFyZWFcdFx0UkVfRGlyZWN0X1JlY3RBcmVhX1BoeXNpY2FsXG4jZGVmaW5lIFJFX0luZGlyZWN0RGlmZnVzZVx0XHRSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWxcbiNkZWZpbmUgUkVfSW5kaXJlY3RTcGVjdWxhclx0XHRSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsXG5mbG9hdCBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGNvbnN0IGluIGZsb2F0IGRvdE5WLCBjb25zdCBpbiBmbG9hdCBhbWJpZW50T2NjbHVzaW9uLCBjb25zdCBpbiBmbG9hdCByb3VnaG5lc3MgKSB7XG5cdHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XG59IixsaWdodHNfZnJhZ21lbnRfYmVnaW46IlxuR2VvbWV0cmljQ29udGV4dCBnZW9tZXRyeTtcbmdlb21ldHJ5LnBvc2l0aW9uID0gLSB2Vmlld1Bvc2l0aW9uO1xuZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xuZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggdlZpZXdQb3NpdGlvbiApO1xuI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0Z2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsID0gY2xlYXJjb2F0Tm9ybWFsO1xuI2VuZGlmXG5JbmNpZGVudExpZ2h0IGRpcmVjdExpZ2h0O1xuI2lmICggTlVNX1BPSU5UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRQb2ludExpZ2h0IHBvaW50TGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFBvaW50TGlnaHRTaGFkb3cgcG9pbnRMaWdodFNoYWRvdztcblx0I2VuZGlmXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUUzsgaSArKyApIHtcblx0XHRwb2ludExpZ2h0ID0gcG9pbnRMaWdodHNbIGkgXTtcblx0XHRnZXRQb2ludExpZ2h0SW5mbyggcG9pbnRMaWdodCwgZ2VvbWV0cnksIGRpcmVjdExpZ2h0ICk7XG5cdFx0I2lmIGRlZmluZWQoIFVTRV9TSEFET1dNQVAgKSAmJiAoIFVOUk9MTEVEX0xPT1BfSU5ERVggPCBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyApXG5cdFx0cG9pbnRMaWdodFNoYWRvdyA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdFx0I2VuZGlmXG5cdFx0UkVfRGlyZWN0KCBkaXJlY3RMaWdodCwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuXHR9XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3BfZW5kXG4jZW5kaWZcbiNpZiAoIE5VTV9TUE9UX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHRTcG90TGlnaHQgc3BvdExpZ2h0O1xuXHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRzWyBpIF07XG5cdFx0Z2V0U3BvdExpZ2h0SW5mbyggc3BvdExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgKVxuXHRcdHNwb3RMaWdodFNoYWRvdyA9IHNwb3RMaWdodFNoYWRvd3NbIGkgXTtcblx0XHRkaXJlY3RMaWdodC5jb2xvciAqPSBhbGwoIGJ2ZWMyKCBkaXJlY3RMaWdodC52aXNpYmxlLCByZWNlaXZlU2hhZG93ICkgKSA/IGdldFNoYWRvdyggc3BvdFNoYWRvd01hcFsgaSBdLCBzcG90TGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0JpYXMsIHNwb3RMaWdodFNoYWRvdy5zaGFkb3dSYWRpdXMsIHZTcG90U2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fRElSX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3QgKVxuXHREaXJlY3Rpb25hbExpZ2h0IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNpZiBkZWZpbmVkKCBVU0VfU0hBRE9XTUFQICkgJiYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3c7XG5cdCNlbmRpZlxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9ESVJfTElHSFRTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0c1sgaSBdO1xuXHRcdGdldERpcmVjdGlvbmFsTGlnaHRJbmZvKCBkaXJlY3Rpb25hbExpZ2h0LCBnZW9tZXRyeSwgZGlyZWN0TGlnaHQgKTtcblx0XHQjaWYgZGVmaW5lZCggVVNFX1NIQURPV01BUCApICYmICggVU5ST0xMRURfTE9PUF9JTkRFWCA8IE5VTV9ESVJfTElHSFRfU0hBRE9XUyApXG5cdFx0ZGlyZWN0aW9uYWxMaWdodFNoYWRvdyA9IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0ZGlyZWN0TGlnaHQuY29sb3IgKj0gYWxsKCBidmVjMiggZGlyZWN0TGlnaHQudmlzaWJsZSwgcmVjZWl2ZVNoYWRvdyApICkgPyBnZXRTaGFkb3coIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBpIF0sIGRpcmVjdGlvbmFsTGlnaHRTaGFkb3cuc2hhZG93TWFwU2l6ZSwgZGlyZWN0aW9uYWxMaWdodFNoYWRvdy5zaGFkb3dCaWFzLCBkaXJlY3Rpb25hbExpZ2h0U2hhZG93LnNoYWRvd1JhZGl1cywgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIGkgXSApIDogMS4wO1xuXHRcdCNlbmRpZlxuXHRcdFJFX0RpcmVjdCggZGlyZWN0TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCwgcmVmbGVjdGVkTGlnaHQgKTtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuI2VuZGlmXG4jaWYgKCBOVU1fUkVDVF9BUkVBX0xJR0hUUyA+IDAgKSAmJiBkZWZpbmVkKCBSRV9EaXJlY3RfUmVjdEFyZWEgKVxuXHRSZWN0QXJlYUxpZ2h0IHJlY3RBcmVhTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1JFQ1RfQVJFQV9MSUdIVFM7IGkgKysgKSB7XG5cdFx0cmVjdEFyZWFMaWdodCA9IHJlY3RBcmVhTGlnaHRzWyBpIF07XG5cdFx0UkVfRGlyZWN0X1JlY3RBcmVhKCByZWN0QXJlYUxpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwsIHJlZmxlY3RlZExpZ2h0ICk7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcbiNlbmRpZlxuI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdHZlYzMgaWJsSXJyYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGlycmFkaWFuY2UgPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKCBhbWJpZW50TGlnaHRDb2xvciApO1xuXHRpcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2lmICggTlVNX0hFTUlfTElHSFRTID4gMCApXG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9zdGFydFxuXHRcdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9IRU1JX0xJR0hUUzsgaSArKyApIHtcblx0XHRcdGlycmFkaWFuY2UgKz0gZ2V0SGVtaXNwaGVyZUxpZ2h0SXJyYWRpYW5jZSggaGVtaXNwaGVyZUxpZ2h0c1sgaSBdLCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0XHR9XG5cdFx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBSRV9JbmRpcmVjdFNwZWN1bGFyIClcblx0dmVjMyByYWRpYW5jZSA9IHZlYzMoIDAuMCApO1xuXHR2ZWMzIGNsZWFyY29hdFJhZGlhbmNlID0gdmVjMyggMC4wICk7XG4jZW5kaWYiLGxpZ2h0c19mcmFnbWVudF9tYXBzOiIjaWYgZGVmaW5lZCggUkVfSW5kaXJlY3REaWZmdXNlIClcblx0I2lmZGVmIFVTRV9MSUdIVE1BUFxuXHRcdHZlYzQgbGlnaHRNYXBUZXhlbCA9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHR2ZWMzIGxpZ2h0TWFwSXJyYWRpYW5jZSA9IGxpZ2h0TWFwVGV4ZWwucmdiICogbGlnaHRNYXBJbnRlbnNpdHk7XG5cdFx0I2lmbmRlZiBQSFlTSUNBTExZX0NPUlJFQ1RfTElHSFRTXG5cdFx0XHRsaWdodE1hcElycmFkaWFuY2UgKj0gUEk7XG5cdFx0I2VuZGlmXG5cdFx0aXJyYWRpYW5jZSArPSBsaWdodE1hcElycmFkaWFuY2U7XG5cdCNlbmRpZlxuXHQjaWYgZGVmaW5lZCggVVNFX0VOVk1BUCApICYmIGRlZmluZWQoIFNUQU5EQVJEICkgJiYgZGVmaW5lZCggRU5WTUFQX1RZUEVfQ1VCRV9VViApXG5cdFx0aWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwgKTtcblx0I2VuZGlmXG4jZW5kaWZcbiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgJiYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdHJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xuXHQjaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHRcdGNsZWFyY29hdFJhZGlhbmNlICs9IGdldElCTFJhZGlhbmNlKCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbGlnaHRzX2ZyYWdtZW50X2VuZDoiI2lmIGRlZmluZWQoIFJFX0luZGlyZWN0RGlmZnVzZSApXG5cdFJFX0luZGlyZWN0RGlmZnVzZSggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmXG4jaWYgZGVmaW5lZCggUkVfSW5kaXJlY3RTcGVjdWxhciApXG5cdFJFX0luZGlyZWN0U3BlY3VsYXIoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsLCByZWZsZWN0ZWRMaWdodCApO1xuI2VuZGlmIixsb2dkZXB0aGJ1Zl9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRiApICYmIGRlZmluZWQoIFVTRV9MT0dERVBUSEJVRl9FWFQgKVxuXHRnbF9GcmFnRGVwdGhFWFQgPSB2SXNQZXJzcGVjdGl2ZSA9PSAwLjAgPyBnbF9GcmFnQ29vcmQueiA6IGxvZzIoIHZGcmFnRGVwdGggKSAqIGxvZ0RlcHRoQnVmRkMgKiAwLjU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUYgKSAmJiBkZWZpbmVkKCBVU0VfTE9HREVQVEhCVUZfRVhUIClcblx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHR2YXJ5aW5nIGZsb2F0IHZGcmFnRGVwdGg7XG5cdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG4jZW5kaWYiLGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dmFyeWluZyBmbG9hdCB2RnJhZ0RlcHRoO1xuXHRcdHZhcnlpbmcgZmxvYXQgdklzUGVyc3BlY3RpdmU7XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBmbG9hdCBsb2dEZXB0aEJ1ZkZDO1xuXHQjZW5kaWZcbiNlbmRpZiIsbG9nZGVwdGhidWZfdmVydGV4OiIjaWZkZWYgVVNFX0xPR0RFUFRIQlVGXG5cdCNpZmRlZiBVU0VfTE9HREVQVEhCVUZfRVhUXG5cdFx0dkZyYWdEZXB0aCA9IDEuMCArIGdsX1Bvc2l0aW9uLnc7XG5cdFx0dklzUGVyc3BlY3RpdmUgPSBmbG9hdCggaXNQZXJzcGVjdGl2ZU1hdHJpeCggcHJvamVjdGlvbk1hdHJpeCApICk7XG5cdCNlbHNlXG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICkgKSB7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ID0gbG9nMiggbWF4KCBFUFNJTE9OLCBnbF9Qb3NpdGlvbi53ICsgMS4wICkgKSAqIGxvZ0RlcHRoQnVmRkMgLSAxLjA7XG5cdFx0XHRnbF9Qb3NpdGlvbi56ICo9IGdsX1Bvc2l0aW9uLnc7XG5cdFx0fVxuXHQjZW5kaWZcbiNlbmRpZiIsbWFwX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR2ZWM0IHNhbXBsZWREaWZmdXNlQ29sb3IgPSB0ZXh0dXJlMkQoIG1hcCwgdlV2ICk7XG5cdCNpZmRlZiBERUNPREVfVklERU9fVEVYVFVSRVxuXHRcdHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0KCBtaXgoIHBvdyggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjk0Nzg2NzI5ODYgKyB2ZWMzKCAwLjA1MjEzMjcwMTQgKSwgdmVjMyggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzMoIGxlc3NUaGFuRXF1YWwoIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiLCB2ZWMzKCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xuXHQjZW5kaWZcblx0ZGlmZnVzZUNvbG9yICo9IHNhbXBsZWREaWZmdXNlQ29sb3I7XG4jZW5kaWYiLG1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWYiLG1hcF9wYXJ0aWNsZV9mcmFnbWVudDoiI2lmIGRlZmluZWQoIFVTRV9NQVAgKSB8fCBkZWZpbmVkKCBVU0VfQUxQSEFNQVAgKVxuXHR2ZWMyIHV2ID0gKCB1dlRyYW5zZm9ybSAqIHZlYzMoIGdsX1BvaW50Q29vcmQueCwgMS4wIC0gZ2xfUG9pbnRDb29yZC55LCAxICkgKS54eTtcbiNlbmRpZlxuI2lmZGVmIFVTRV9NQVBcblx0ZGlmZnVzZUNvbG9yICo9IHRleHR1cmUyRCggbWFwLCB1diApO1xuI2VuZGlmXG4jaWZkZWYgVVNFX0FMUEhBTUFQXG5cdGRpZmZ1c2VDb2xvci5hICo9IHRleHR1cmUyRCggYWxwaGFNYXAsIHV2ICkuZztcbiNlbmRpZiIsbWFwX3BhcnRpY2xlX3BhcnNfZnJhZ21lbnQ6IiNpZiBkZWZpbmVkKCBVU0VfTUFQICkgfHwgZGVmaW5lZCggVVNFX0FMUEhBTUFQIClcblx0dW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xuI2VuZGlmXG4jaWZkZWYgVVNFX01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtYXA7XG4jZW5kaWZcbiNpZmRlZiBVU0VfQUxQSEFNQVBcblx0dW5pZm9ybSBzYW1wbGVyMkQgYWxwaGFNYXA7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9mcmFnbWVudDoiZmxvYXQgbWV0YWxuZXNzRmFjdG9yID0gbWV0YWxuZXNzO1xuI2lmZGVmIFVTRV9NRVRBTE5FU1NNQVBcblx0dmVjNCB0ZXhlbE1ldGFsbmVzcyA9IHRleHR1cmUyRCggbWV0YWxuZXNzTWFwLCB2VXYgKTtcblx0bWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XG4jZW5kaWYiLG1ldGFsbmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX01FVEFMTkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCBtZXRhbG5lc3NNYXA7XG4jZW5kaWYiLG1vcnBobm9ybWFsX3ZlcnRleDoiI2lmZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0b2JqZWN0Tm9ybWFsICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0aWYgKCBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xuXHRcdG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHRvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAyIF07XG5cdFx0b2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xuXHQjZW5kaWZcbiNlbmRpZiIsbW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xuXHQjaWZkZWYgTU9SUEhUQVJHRVRTX1RFWFRVUkVcblx0XHR1bmlmb3JtIGZsb2F0IG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgTU9SUEhUQVJHRVRTX0NPVU5UIF07XG5cdFx0dW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xuXHRcdHVuaWZvcm0gdmVjMiBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTtcblx0XHR2ZWMzIGdldE1vcnBoKCBjb25zdCBpbiBpbnQgdmVydGV4SW5kZXgsIGNvbnN0IGluIGludCBtb3JwaFRhcmdldEluZGV4LCBjb25zdCBpbiBpbnQgb2Zmc2V0LCBjb25zdCBpbiBpbnQgc3RyaWRlICkge1xuXHRcdFx0ZmxvYXQgdGV4ZWxJbmRleCA9IGZsb2F0KCB2ZXJ0ZXhJbmRleCAqIHN0cmlkZSArIG9mZnNldCApO1xuXHRcdFx0ZmxvYXQgeSA9IGZsb29yKCB0ZXhlbEluZGV4IC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCApO1xuXHRcdFx0ZmxvYXQgeCA9IHRleGVsSW5kZXggLSB5ICogbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcblx0XHRcdHZlYzMgbW9ycGhVViA9IHZlYzMoICggeCArIDAuNSApIC8gbW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueCwgeSAvIG1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLnksIG1vcnBoVGFyZ2V0SW5kZXggKTtcblx0XHRcdHJldHVybiB0ZXh0dXJlKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWICkueHl6O1xuXHRcdH1cblx0I2Vsc2Vcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA4IF07XG5cdFx0I2Vsc2Vcblx0XHRcdHVuaWZvcm0gZmxvYXQgbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XG5cdFx0I2VuZGlmXG5cdCNlbmRpZlxuI2VuZGlmIixtb3JwaHRhcmdldF92ZXJ0ZXg6IiNpZmRlZiBVU0VfTU9SUEhUQVJHRVRTXG5cdHRyYW5zZm9ybWVkICo9IG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcblx0I2lmZGVmIE1PUlBIVEFSR0VUU19URVhUVVJFXG5cdFx0Zm9yICggaW50IGkgPSAwOyBpIDwgTU9SUEhUQVJHRVRTX0NPVU5UOyBpICsrICkge1xuXHRcdFx0I2lmbmRlZiBVU0VfTU9SUEhOT1JNQUxTXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAxICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbHNlXG5cdFx0XHRcdGlmICggbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gIT0gMC4wICkgdHJhbnNmb3JtZWQgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAwLCAyICkgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcblx0XHRcdCNlbmRpZlxuXHRcdH1cblx0I2Vsc2Vcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDAgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDEgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDIgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcblx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDMgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcblx0XHQjaWZuZGVmIFVTRV9NT1JQSE5PUk1BTFNcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NCAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNCBdO1xuXHRcdFx0dHJhbnNmb3JtZWQgKz0gbW9ycGhUYXJnZXQ1ICogbW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XG5cdFx0XHR0cmFuc2Zvcm1lZCArPSBtb3JwaFRhcmdldDYgKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcblx0XHRcdHRyYW5zZm9ybWVkICs9IG1vcnBoVGFyZ2V0NyAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNyBdO1xuXHRcdCNlbmRpZlxuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX2ZyYWdtZW50X2JlZ2luOiJmbG9hdCBmYWNlRGlyZWN0aW9uID0gZ2xfRnJvbnRGYWNpbmcgPyAxLjAgOiAtIDEuMDtcbiNpZmRlZiBGTEFUX1NIQURFRFxuXHR2ZWMzIGZkeCA9IHZlYzMoIGRGZHgoIHZWaWV3UG9zaXRpb24ueCApLCBkRmR4KCB2Vmlld1Bvc2l0aW9uLnkgKSwgZEZkeCggdlZpZXdQb3NpdGlvbi56ICkgKTtcblx0dmVjMyBmZHkgPSB2ZWMzKCBkRmR5KCB2Vmlld1Bvc2l0aW9uLnggKSwgZEZkeSggdlZpZXdQb3NpdGlvbi55ICksIGRGZHkoIHZWaWV3UG9zaXRpb24ueiApICk7XG5cdHZlYzMgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyggZmR4LCBmZHkgKSApO1xuI2Vsc2Vcblx0dmVjMyBub3JtYWwgPSBub3JtYWxpemUoIHZOb3JtYWwgKTtcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2ZWMzIHRhbmdlbnQgPSBub3JtYWxpemUoIHZUYW5nZW50ICk7XG5cdFx0dmVjMyBiaXRhbmdlbnQgPSBub3JtYWxpemUoIHZCaXRhbmdlbnQgKTtcblx0XHQjaWZkZWYgRE9VQkxFX1NJREVEXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XG5cdFx0XHRiaXRhbmdlbnQgPSBiaXRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xuXHRcdCNlbmRpZlxuXHRcdCNpZiBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQICkgfHwgZGVmaW5lZCggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKVxuXHRcdFx0bWF0MyB2VEJOID0gbWF0MyggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcblx0XHQjZW5kaWZcblx0I2VuZGlmXG4jZW5kaWZcbnZlYzMgZ2VvbWV0cnlOb3JtYWwgPSBub3JtYWw7Iixub3JtYWxfZnJhZ21lbnRfbWFwczoiI2lmZGVmIE9CSkVDVFNQQUNFX05PUk1BTE1BUFxuXHRub3JtYWwgPSB0ZXh0dXJlMkQoIG5vcm1hbE1hcCwgdlV2ICkueHl6ICogMi4wIC0gMS4wO1xuXHQjaWZkZWYgRkxJUF9TSURFRFxuXHRcdG5vcm1hbCA9IC0gbm9ybWFsO1xuXHQjZW5kaWZcblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XG5cdCNlbmRpZlxuXHRub3JtYWwgPSBub3JtYWxpemUoIG5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xuI2VsaWYgZGVmaW5lZCggVEFOR0VOVFNQQUNFX05PUk1BTE1BUCApXG5cdHZlYzMgbWFwTiA9IHRleHR1cmUyRCggbm9ybWFsTWFwLCB2VXYgKS54eXogKiAyLjAgLSAxLjA7XG5cdG1hcE4ueHkgKj0gbm9ybWFsU2NhbGU7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIG1hcE4gKTtcblx0I2Vsc2Vcblx0XHRub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSB2Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcblx0I2VuZGlmXG4jZWxpZiBkZWZpbmVkKCBVU0VfQlVNUE1BUCApXG5cdG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gdlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xuI2VuZGlmIixub3JtYWxfcGFyc19mcmFnbWVudDoiI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0dmFyeWluZyB2ZWMzIHZUYW5nZW50O1xuXHRcdHZhcnlpbmcgdmVjMyB2Qml0YW5nZW50O1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsX3BhcnNfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuXHQjaWZkZWYgVVNFX1RBTkdFTlRcblx0XHR2YXJ5aW5nIHZlYzMgdlRhbmdlbnQ7XG5cdFx0dmFyeWluZyB2ZWMzIHZCaXRhbmdlbnQ7XG5cdCNlbmRpZlxuI2VuZGlmIixub3JtYWxfdmVydGV4OiIjaWZuZGVmIEZMQVRfU0hBREVEXG5cdHZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcblx0XHR2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIHRhbmdlbnQudyApO1xuXHQjZW5kaWZcbiNlbmRpZiIsbm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIG5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIG5vcm1hbFNjYWxlO1xuI2VuZGlmXG4jaWZkZWYgT0JKRUNUU1BBQ0VfTk9STUFMTUFQXG5cdHVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7XG4jZW5kaWZcbiNpZiAhIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVAgKSApXG5cdHZlYzMgcGVydHVyYk5vcm1hbDJBcmIoIHZlYzMgZXllX3BvcywgdmVjMyBzdXJmX25vcm0sIHZlYzMgbWFwTiwgZmxvYXQgZmFjZURpcmVjdGlvbiApIHtcblx0XHR2ZWMzIHEwID0gdmVjMyggZEZkeCggZXllX3Bvcy54ICksIGRGZHgoIGV5ZV9wb3MueSApLCBkRmR4KCBleWVfcG9zLnogKSApO1xuXHRcdHZlYzMgcTEgPSB2ZWMzKCBkRmR5KCBleWVfcG9zLnggKSwgZEZkeSggZXllX3Bvcy55ICksIGRGZHkoIGV5ZV9wb3MueiApICk7XG5cdFx0dmVjMiBzdDAgPSBkRmR4KCB2VXYuc3QgKTtcblx0XHR2ZWMyIHN0MSA9IGRGZHkoIHZVdi5zdCApO1xuXHRcdHZlYzMgTiA9IHN1cmZfbm9ybTtcblx0XHR2ZWMzIHExcGVycCA9IGNyb3NzKCBxMSwgTiApO1xuXHRcdHZlYzMgcTBwZXJwID0gY3Jvc3MoIE4sIHEwICk7XG5cdFx0dmVjMyBUID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcblx0XHR2ZWMzIEIgPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xuXHRcdGZsb2F0IGRldCA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XG5cdFx0ZmxvYXQgc2NhbGUgPSAoIGRldCA9PSAwLjAgKSA/IDAuMCA6IGZhY2VEaXJlY3Rpb24gKiBpbnZlcnNlc3FydCggZGV0ICk7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZSggVCAqICggbWFwTi54ICogc2NhbGUgKSArIEIgKiAoIG1hcE4ueSAqIHNjYWxlICkgKyBOICogbWFwTi56ICk7XG5cdH1cbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbjoiI2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0dmVjMyBjbGVhcmNvYXROb3JtYWwgPSBnZW9tZXRyeU5vcm1hbDtcbiNlbmRpZiIsY2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9tYXBzOiIjaWZkZWYgVVNFX0NMRUFSQ09BVF9OT1JNQUxNQVBcblx0dmVjMyBjbGVhcmNvYXRNYXBOID0gdGV4dHVyZTJEKCBjbGVhcmNvYXROb3JtYWxNYXAsIHZVdiApLnh5eiAqIDIuMCAtIDEuMDtcblx0Y2xlYXJjb2F0TWFwTi54eSAqPSBjbGVhcmNvYXROb3JtYWxTY2FsZTtcblx0I2lmZGVmIFVTRV9UQU5HRU5UXG5cdFx0Y2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xuXHQjZWxzZVxuXHRcdGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIHZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xuXHQjZW5kaWZcbiNlbmRpZiIsY2xlYXJjb2F0X3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfQ0xFQVJDT0FUTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE1hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdFJvdWdobmVzc01hcDtcbiNlbmRpZlxuI2lmZGVmIFVTRV9DTEVBUkNPQVRfTk9STUFMTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIGNsZWFyY29hdE5vcm1hbE1hcDtcblx0dW5pZm9ybSB2ZWMyIGNsZWFyY29hdE5vcm1hbFNjYWxlO1xuI2VuZGlmIixvdXRwdXRfZnJhZ21lbnQ6IiNpZmRlZiBPUEFRVUVcbmRpZmZ1c2VDb2xvci5hID0gMS4wO1xuI2VuZGlmXG4jaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuZGlmZnVzZUNvbG9yLmEgKj0gdHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XG4jZW5kaWZcbmdsX0ZyYWdDb2xvciA9IHZlYzQoIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7IixwYWNraW5nOiJ2ZWMzIHBhY2tOb3JtYWxUb1JHQiggY29uc3QgaW4gdmVjMyBub3JtYWwgKSB7XG5cdHJldHVybiBub3JtYWxpemUoIG5vcm1hbCApICogMC41ICsgMC41O1xufVxudmVjMyB1bnBhY2tSR0JUb05vcm1hbCggY29uc3QgaW4gdmVjMyByZ2IgKSB7XG5cdHJldHVybiAyLjAgKiByZ2IueHl6IC0gMS4wO1xufVxuY29uc3QgZmxvYXQgUGFja1Vwc2NhbGUgPSAyNTYuIC8gMjU1Ljtjb25zdCBmbG9hdCBVbnBhY2tEb3duc2NhbGUgPSAyNTUuIC8gMjU2LjtcbmNvbnN0IHZlYzMgUGFja0ZhY3RvcnMgPSB2ZWMzKCAyNTYuICogMjU2LiAqIDI1Ni4sIDI1Ni4gKiAyNTYuLCAyNTYuICk7XG5jb25zdCB2ZWM0IFVucGFja0ZhY3RvcnMgPSBVbnBhY2tEb3duc2NhbGUgLyB2ZWM0KCBQYWNrRmFjdG9ycywgMS4gKTtcbmNvbnN0IGZsb2F0IFNoaWZ0UmlnaHQ4ID0gMS4gLyAyNTYuO1xudmVjNCBwYWNrRGVwdGhUb1JHQkEoIGNvbnN0IGluIGZsb2F0IHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIGZyYWN0KCB2ICogUGFja0ZhY3RvcnMgKSwgdiApO1xuXHRyLnl6dyAtPSByLnh5eiAqIFNoaWZ0UmlnaHQ4O1x0cmV0dXJuIHIgKiBQYWNrVXBzY2FsZTtcbn1cbmZsb2F0IHVucGFja1JHQkFUb0RlcHRoKCBjb25zdCBpbiB2ZWM0IHYgKSB7XG5cdHJldHVybiBkb3QoIHYsIFVucGFja0ZhY3RvcnMgKTtcbn1cbnZlYzQgcGFjazJIYWxmVG9SR0JBKCB2ZWMyIHYgKSB7XG5cdHZlYzQgciA9IHZlYzQoIHYueCwgZnJhY3QoIHYueCAqIDI1NS4wICksIHYueSwgZnJhY3QoIHYueSAqIDI1NS4wICkgKTtcblx0cmV0dXJuIHZlYzQoIHIueCAtIHIueSAvIDI1NS4wLCByLnksIHIueiAtIHIudyAvIDI1NS4wLCByLncgKTtcbn1cbnZlYzIgdW5wYWNrUkdCQVRvMkhhbGYoIHZlYzQgdiApIHtcblx0cmV0dXJuIHZlYzIoIHYueCArICggdi55IC8gMjU1LjAgKSwgdi56ICsgKCB2LncgLyAyNTUuMCApICk7XG59XG5mbG9hdCB2aWV3WlRvT3J0aG9ncmFwaGljRGVwdGgoIGNvbnN0IGluIGZsb2F0IHZpZXdaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiAoIHZpZXdaICsgbmVhciApIC8gKCBuZWFyIC0gZmFyICk7XG59XG5mbG9hdCBvcnRob2dyYXBoaWNEZXB0aFRvVmlld1ooIGNvbnN0IGluIGZsb2F0IGxpbmVhckNsaXBaLCBjb25zdCBpbiBmbG9hdCBuZWFyLCBjb25zdCBpbiBmbG9hdCBmYXIgKSB7XG5cdHJldHVybiBsaW5lYXJDbGlwWiAqICggbmVhciAtIGZhciApIC0gbmVhcjtcbn1cbmZsb2F0IHZpZXdaVG9QZXJzcGVjdGl2ZURlcHRoKCBjb25zdCBpbiBmbG9hdCB2aWV3WiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCAoIG5lYXIgKyB2aWV3WiApICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogdmlld1ogKTtcbn1cbmZsb2F0IHBlcnNwZWN0aXZlRGVwdGhUb1ZpZXdaKCBjb25zdCBpbiBmbG9hdCBpbnZDbGlwWiwgY29uc3QgaW4gZmxvYXQgbmVhciwgY29uc3QgaW4gZmxvYXQgZmFyICkge1xuXHRyZXR1cm4gKCBuZWFyICogZmFyICkgLyAoICggZmFyIC0gbmVhciApICogaW52Q2xpcFogLSBmYXIgKTtcbn0iLHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ6IiNpZmRlZiBQUkVNVUxUSVBMSUVEX0FMUEhBXG5cdGdsX0ZyYWdDb2xvci5yZ2IgKj0gZ2xfRnJhZ0NvbG9yLmE7XG4jZW5kaWYiLHByb2plY3RfdmVydGV4OiJ2ZWM0IG12UG9zaXRpb24gPSB2ZWM0KCB0cmFuc2Zvcm1lZCwgMS4wICk7XG4jaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0bXZQb3NpdGlvbiA9IGluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcbiNlbmRpZlxubXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIG12UG9zaXRpb247XG5nbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uOyIsZGl0aGVyaW5nX2ZyYWdtZW50OiIjaWZkZWYgRElUSEVSSU5HXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGdsX0ZyYWdDb2xvci5yZ2IgKTtcbiNlbmRpZiIsZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBESVRIRVJJTkdcblx0dmVjMyBkaXRoZXJpbmcoIHZlYzMgY29sb3IgKSB7XG5cdFx0ZmxvYXQgZ3JpZF9wb3NpdGlvbiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xuXHRcdHZlYzMgZGl0aGVyX3NoaWZ0X1JHQiA9IHZlYzMoIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XG5cdFx0ZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcblx0XHRyZXR1cm4gY29sb3IgKyBkaXRoZXJfc2hpZnRfUkdCO1xuXHR9XG4jZW5kaWYiLHJvdWdobmVzc21hcF9mcmFnbWVudDoiZmxvYXQgcm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcblx0dmVjNCB0ZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcblx0cm91Z2huZXNzRmFjdG9yICo9IHRleGVsUm91Z2huZXNzLmc7XG4jZW5kaWYiLHJvdWdobmVzc21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1JPVUdITkVTU01BUFxuXHR1bmlmb3JtIHNhbXBsZXIyRCByb3VnaG5lc3NNYXA7XG4jZW5kaWYiLHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIGRpcmVjdGlvbmFsU2hhZG93TWFwWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdkRpcmVjdGlvbmFsU2hhZG93Q29vcmRbIE5VTV9ESVJfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdH07XG5cdFx0dW5pZm9ybSBEaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHRTaGFkb3dzWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwb3RTaGFkb3dNYXBbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0XHR2YXJ5aW5nIHZlYzQgdlNwb3RTaGFkb3dDb29yZFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBTcG90TGlnaHRTaGFkb3cge1xuXHRcdFx0ZmxvYXQgc2hhZG93Qmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd05vcm1hbEJpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dSYWRpdXM7XG5cdFx0XHR2ZWMyIHNoYWRvd01hcFNpemU7XG5cdFx0fTtcblx0XHR1bmlmb3JtIFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHRTaGFkb3dzWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgcG9pbnRTaGFkb3dNYXBbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdGZsb2F0IHRleHR1cmUyRENvbXBhcmUoIHNhbXBsZXIyRCBkZXB0aHMsIHZlYzIgdXYsIGZsb2F0IGNvbXBhcmUgKSB7XG5cdFx0cmV0dXJuIHN0ZXAoIGNvbXBhcmUsIHVucGFja1JHQkFUb0RlcHRoKCB0ZXh0dXJlMkQoIGRlcHRocywgdXYgKSApICk7XG5cdH1cblx0dmVjMiB0ZXh0dXJlMkREaXN0cmlidXRpb24oIHNhbXBsZXIyRCBzaGFkb3csIHZlYzIgdXYgKSB7XG5cdFx0cmV0dXJuIHVucGFja1JHQkFUbzJIYWxmKCB0ZXh0dXJlMkQoIHNoYWRvdywgdXYgKSApO1xuXHR9XG5cdGZsb2F0IFZTTVNoYWRvdyAoc2FtcGxlcjJEIHNoYWRvdywgdmVjMiB1diwgZmxvYXQgY29tcGFyZSApe1xuXHRcdGZsb2F0IG9jY2x1c2lvbiA9IDEuMDtcblx0XHR2ZWMyIGRpc3RyaWJ1dGlvbiA9IHRleHR1cmUyRERpc3RyaWJ1dGlvbiggc2hhZG93LCB1diApO1xuXHRcdGZsb2F0IGhhcmRfc2hhZG93ID0gc3RlcCggY29tcGFyZSAsIGRpc3RyaWJ1dGlvbi54ICk7XG5cdFx0aWYgKGhhcmRfc2hhZG93ICE9IDEuMCApIHtcblx0XHRcdGZsb2F0IGRpc3RhbmNlID0gY29tcGFyZSAtIGRpc3RyaWJ1dGlvbi54IDtcblx0XHRcdGZsb2F0IHZhcmlhbmNlID0gbWF4KCAwLjAwMDAwLCBkaXN0cmlidXRpb24ueSAqIGRpc3RyaWJ1dGlvbi55ICk7XG5cdFx0XHRmbG9hdCBzb2Z0bmVzc19wcm9iYWJpbGl0eSA9IHZhcmlhbmNlIC8gKHZhcmlhbmNlICsgZGlzdGFuY2UgKiBkaXN0YW5jZSApO1x0XHRcdHNvZnRuZXNzX3Byb2JhYmlsaXR5ID0gY2xhbXAoICggc29mdG5lc3NfcHJvYmFiaWxpdHkgLSAwLjMgKSAvICggMC45NSAtIDAuMyApLCAwLjAsIDEuMCApO1x0XHRcdG9jY2x1c2lvbiA9IGNsYW1wKCBtYXgoIGhhcmRfc2hhZG93LCBzb2Z0bmVzc19wcm9iYWJpbGl0eSApLCAwLjAsIDEuMCApO1xuXHRcdH1cblx0XHRyZXR1cm4gb2NjbHVzaW9uO1xuXHR9XG5cdGZsb2F0IGdldFNoYWRvdyggc2FtcGxlcjJEIHNoYWRvd01hcCwgdmVjMiBzaGFkb3dNYXBTaXplLCBmbG9hdCBzaGFkb3dCaWFzLCBmbG9hdCBzaGFkb3dSYWRpdXMsIHZlYzQgc2hhZG93Q29vcmQgKSB7XG5cdFx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHRcdHNoYWRvd0Nvb3JkLnh5eiAvPSBzaGFkb3dDb29yZC53O1xuXHRcdHNoYWRvd0Nvb3JkLnogKz0gc2hhZG93Qmlhcztcblx0XHRidmVjNCBpbkZydXN0dW1WZWMgPSBidmVjNCAoIHNoYWRvd0Nvb3JkLnggPj0gMC4wLCBzaGFkb3dDb29yZC54IDw9IDEuMCwgc2hhZG93Q29vcmQueSA+PSAwLjAsIHNoYWRvd0Nvb3JkLnkgPD0gMS4wICk7XG5cdFx0Ym9vbCBpbkZydXN0dW0gPSBhbGwoIGluRnJ1c3R1bVZlYyApO1xuXHRcdGJ2ZWMyIGZydXN0dW1UZXN0VmVjID0gYnZlYzIoIGluRnJ1c3R1bSwgc2hhZG93Q29vcmQueiA8PSAxLjAgKTtcblx0XHRib29sIGZydXN0dW1UZXN0ID0gYWxsKCBmcnVzdHVtVGVzdFZlYyApO1xuXHRcdGlmICggZnJ1c3R1bVRlc3QgKSB7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4MCA9IC0gdGV4ZWxTaXplLnggKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeTAgPSAtIHRleGVsU2l6ZS55ICogc2hhZG93UmFkaXVzO1xuXHRcdFx0ZmxvYXQgZHgxID0gKyB0ZXhlbFNpemUueCAqIHNoYWRvd1JhZGl1cztcblx0XHRcdGZsb2F0IGR5MSA9ICsgdGV4ZWxTaXplLnkgKiBzaGFkb3dSYWRpdXM7XG5cdFx0XHRmbG9hdCBkeDIgPSBkeDAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTIgPSBkeTAgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeDMgPSBkeDEgLyAyLjA7XG5cdFx0XHRmbG9hdCBkeTMgPSBkeTEgLyAyLjA7XG5cdFx0XHRzaGFkb3cgPSAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIGR5MCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MSwgZHkwICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDIsIGR5MiApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggMC4wLCBkeTIgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgZHkyICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDAsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIGR4MywgMC4wICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIDAuMCApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgyLCBkeTMgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkzICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDMsIGR5MyApLCBzaGFkb3dDb29yZC56ICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHNoYWRvd0Nvb3JkLnh5ICsgdmVjMiggZHgwLCBkeTEgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSArIHZlYzIoIDAuMCwgZHkxICksIHNoYWRvd0Nvb3JkLnogKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHkgKyB2ZWMyKCBkeDEsIGR5MSApLCBzaGFkb3dDb29yZC56IClcblx0XHRcdCkgKiAoIDEuMCAvIDE3LjAgKTtcblx0XHQjZWxpZiBkZWZpbmVkKCBTSEFET1dNQVBfVFlQRV9QQ0ZfU09GVCApXG5cdFx0XHR2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoIDEuMCApIC8gc2hhZG93TWFwU2l6ZTtcblx0XHRcdGZsb2F0IGR4ID0gdGV4ZWxTaXplLng7XG5cdFx0XHRmbG9hdCBkeSA9IHRleGVsU2l6ZS55O1xuXHRcdFx0dmVjMiB1diA9IHNoYWRvd0Nvb3JkLnh5O1xuXHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2ICogc2hhZG93TWFwU2l6ZSArIDAuNSApO1xuXHRcdFx0dXYgLT0gZiAqIHRleGVsU2l6ZTtcblx0XHRcdHNoYWRvdyA9IChcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgZHkgKSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHRleGVsU2l6ZSwgc2hhZG93Q29vcmQueiApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggLWR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCAwLjAgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnggKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIC1keCwgZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDIuMCAqIGR4LCBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueCApICtcblx0XHRcdFx0bWl4KCB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMC4wLCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIDAuMCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdCBmLnkgKSArXG5cdFx0XHRcdG1peCggdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAtZHkgKSwgc2hhZG93Q29vcmQueiApLCBcblx0XHRcdFx0XHQgdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCB1diArIHZlYzIoIGR4LCAyLjAgKiBkeSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0IGYueSApICtcblx0XHRcdFx0bWl4KCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksIFxuXHRcdFx0XHRcdFx0ICB0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIHV2ICsgdmVjMiggMi4wICogZHgsIC1keSApLCBzaGFkb3dDb29yZC56ICksXG5cdFx0XHRcdFx0XHQgIGYueCApLFxuXHRcdFx0XHRcdCBtaXgoIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAtZHgsIDIuMCAqIGR5ICksIHNoYWRvd0Nvb3JkLnogKSwgXG5cdFx0XHRcdFx0XHQgIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgdXYgKyB2ZWMyKCAyLjAgKiBkeCwgMi4wICogZHkgKSwgc2hhZG93Q29vcmQueiApLFxuXHRcdFx0XHRcdFx0ICBmLnggKSxcblx0XHRcdFx0XHQgZi55IClcblx0XHRcdCkgKiAoIDEuMCAvIDkuMCApO1xuXHRcdCNlbGlmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1ZTTSApXG5cdFx0XHRzaGFkb3cgPSBWU01TaGFkb3coIHNoYWRvd01hcCwgc2hhZG93Q29vcmQueHksIHNoYWRvd0Nvb3JkLnogKTtcblx0XHQjZWxzZVxuXHRcdFx0c2hhZG93ID0gdGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBzaGFkb3dDb29yZC54eSwgc2hhZG93Q29vcmQueiApO1xuXHRcdCNlbmRpZlxuXHRcdH1cblx0XHRyZXR1cm4gc2hhZG93O1xuXHR9XG5cdHZlYzIgY3ViZVRvVVYoIHZlYzMgdiwgZmxvYXQgdGV4ZWxTaXplWSApIHtcblx0XHR2ZWMzIGFic1YgPSBhYnMoIHYgKTtcblx0XHRmbG9hdCBzY2FsZVRvQ3ViZSA9IDEuMCAvIG1heCggYWJzVi54LCBtYXgoIGFic1YueSwgYWJzVi56ICkgKTtcblx0XHRhYnNWICo9IHNjYWxlVG9DdWJlO1xuXHRcdHYgKj0gc2NhbGVUb0N1YmUgKiAoIDEuMCAtIDIuMCAqIHRleGVsU2l6ZVkgKTtcblx0XHR2ZWMyIHBsYW5hciA9IHYueHk7XG5cdFx0ZmxvYXQgYWxtb3N0QVRleGVsID0gMS41ICogdGV4ZWxTaXplWTtcblx0XHRmbG9hdCBhbG1vc3RPbmUgPSAxLjAgLSBhbG1vc3RBVGV4ZWw7XG5cdFx0aWYgKCBhYnNWLnogPj0gYWxtb3N0T25lICkge1xuXHRcdFx0aWYgKCB2LnogPiAwLjAgKVxuXHRcdFx0XHRwbGFuYXIueCA9IDQuMCAtIHYueDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnggPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblggPSBzaWduKCB2LnggKTtcblx0XHRcdHBsYW5hci54ID0gdi56ICogc2lnblggKyAyLjAgKiBzaWduWDtcblx0XHR9IGVsc2UgaWYgKCBhYnNWLnkgPj0gYWxtb3N0T25lICkge1xuXHRcdFx0ZmxvYXQgc2lnblkgPSBzaWduKCB2LnkgKTtcblx0XHRcdHBsYW5hci54ID0gdi54ICsgMi4wICogc2lnblkgKyAyLjA7XG5cdFx0XHRwbGFuYXIueSA9IHYueiAqIHNpZ25ZIC0gMi4wO1xuXHRcdH1cblx0XHRyZXR1cm4gdmVjMiggMC4xMjUsIDAuMjUgKSAqIHBsYW5hciArIHZlYzIoIDAuMzc1LCAwLjc1ICk7XG5cdH1cblx0ZmxvYXQgZ2V0UG9pbnRTaGFkb3coIHNhbXBsZXIyRCBzaGFkb3dNYXAsIHZlYzIgc2hhZG93TWFwU2l6ZSwgZmxvYXQgc2hhZG93QmlhcywgZmxvYXQgc2hhZG93UmFkaXVzLCB2ZWM0IHNoYWRvd0Nvb3JkLCBmbG9hdCBzaGFkb3dDYW1lcmFOZWFyLCBmbG9hdCBzaGFkb3dDYW1lcmFGYXIgKSB7XG5cdFx0dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKCAxLjAgKSAvICggc2hhZG93TWFwU2l6ZSAqIHZlYzIoIDQuMCwgMi4wICkgKTtcblx0XHR2ZWMzIGxpZ2h0VG9Qb3NpdGlvbiA9IHNoYWRvd0Nvb3JkLnh5ejtcblx0XHRmbG9hdCBkcCA9ICggbGVuZ3RoKCBsaWdodFRvUG9zaXRpb24gKSAtIHNoYWRvd0NhbWVyYU5lYXIgKSAvICggc2hhZG93Q2FtZXJhRmFyIC0gc2hhZG93Q2FtZXJhTmVhciApO1x0XHRkcCArPSBzaGFkb3dCaWFzO1xuXHRcdHZlYzMgYmQzRCA9IG5vcm1hbGl6ZSggbGlnaHRUb1Bvc2l0aW9uICk7XG5cdFx0I2lmIGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRiApIHx8IGRlZmluZWQoIFNIQURPV01BUF9UWVBFX1BDRl9TT0ZUICkgfHwgZGVmaW5lZCggU0hBRE9XTUFQX1RZUEVfVlNNIClcblx0XHRcdHZlYzIgb2Zmc2V0ID0gdmVjMiggLSAxLCAxICkgKiBzaGFkb3dSYWRpdXMgKiB0ZXhlbFNpemUueTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHl5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eXksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh5eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXl4LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueHh5LCB0ZXhlbFNpemUueSApLCBkcCApICtcblx0XHRcdFx0dGV4dHVyZTJEQ29tcGFyZSggc2hhZG93TWFwLCBjdWJlVG9VViggYmQzRCArIG9mZnNldC55eHksIHRleGVsU2l6ZS55ICksIGRwICkgK1xuXHRcdFx0XHR0ZXh0dXJlMkRDb21wYXJlKCBzaGFkb3dNYXAsIGN1YmVUb1VWKCBiZDNEICsgb2Zmc2V0Lnh4eCwgdGV4ZWxTaXplLnkgKSwgZHAgKSArXG5cdFx0XHRcdHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QgKyBvZmZzZXQueXh4LCB0ZXhlbFNpemUueSApLCBkcCApXG5cdFx0XHQpICogKCAxLjAgLyA5LjAgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRENvbXBhcmUoIHNoYWRvd01hcCwgY3ViZVRvVVYoIGJkM0QsIHRleGVsU2l6ZS55ICksIGRwICk7XG5cdFx0I2VuZGlmXG5cdH1cbiNlbmRpZiIsc2hhZG93bWFwX3BhcnNfdmVydGV4OiIjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHVuaWZvcm0gbWF0NCBkaXJlY3Rpb25hbFNoYWRvd01hdHJpeFsgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBOVU1fRElSX0xJR0hUX1NIQURPV1MgXTtcblx0XHRzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgTlVNX0RJUl9MSUdIVF9TSEFET1dTIF07XG5cdCNlbmRpZlxuXHQjaWYgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgc3BvdFNoYWRvd01hdHJpeFsgTlVNX1NQT1RfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHZhcnlpbmcgdmVjNCB2U3BvdFNoYWRvd0Nvb3JkWyBOVU1fU1BPVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0c3RydWN0IFNwb3RMaWdodFNoYWRvdyB7XG5cdFx0XHRmbG9hdCBzaGFkb3dCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93Tm9ybWFsQmlhcztcblx0XHRcdGZsb2F0IHNoYWRvd1JhZGl1cztcblx0XHRcdHZlYzIgc2hhZG93TWFwU2l6ZTtcblx0XHR9O1xuXHRcdHVuaWZvcm0gU3BvdExpZ2h0U2hhZG93IHNwb3RMaWdodFNoYWRvd3NbIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG5cdCNpZiBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyA+IDBcblx0XHR1bmlmb3JtIG1hdDQgcG9pbnRTaGFkb3dNYXRyaXhbIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTIF07XG5cdFx0dmFyeWluZyB2ZWM0IHZQb2ludFNoYWRvd0Nvb3JkWyBOVU1fUE9JTlRfTElHSFRfU0hBRE9XUyBdO1xuXHRcdHN0cnVjdCBQb2ludExpZ2h0U2hhZG93IHtcblx0XHRcdGZsb2F0IHNoYWRvd0JpYXM7XG5cdFx0XHRmbG9hdCBzaGFkb3dOb3JtYWxCaWFzO1xuXHRcdFx0ZmxvYXQgc2hhZG93UmFkaXVzO1xuXHRcdFx0dmVjMiBzaGFkb3dNYXBTaXplO1xuXHRcdFx0ZmxvYXQgc2hhZG93Q2FtZXJhTmVhcjtcblx0XHRcdGZsb2F0IHNoYWRvd0NhbWVyYUZhcjtcblx0XHR9O1xuXHRcdHVuaWZvcm0gUG9pbnRMaWdodFNoYWRvdyBwb2ludExpZ2h0U2hhZG93c1sgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1MgXTtcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hcF92ZXJ0ZXg6IiNpZmRlZiBVU0VfU0hBRE9XTUFQXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwIHx8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRcdHZlYzMgc2hhZG93V29ybGROb3JtYWwgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCB0cmFuc2Zvcm1lZE5vcm1hbCwgdmlld01hdHJpeCApO1xuXHRcdHZlYzQgc2hhZG93V29ybGRQb3NpdGlvbjtcblx0I2VuZGlmXG5cdCNpZiBOVU1fRElSX0xJR0hUX1NIQURPV1MgPiAwXG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2RGlyZWN0aW9uYWxTaGFkb3dDb29yZFsgaSBdID0gZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNpZiBOVU1fU1BPVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9TUE9UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0c2hhZG93V29ybGRQb3NpdGlvbiA9IHdvcmxkUG9zaXRpb24gKyB2ZWM0KCBzaGFkb3dXb3JsZE5vcm1hbCAqIHNwb3RMaWdodFNoYWRvd3NbIGkgXS5zaGFkb3dOb3JtYWxCaWFzLCAwICk7XG5cdFx0dlNwb3RTaGFkb3dDb29yZFsgaSBdID0gc3BvdFNoYWRvd01hdHJpeFsgaSBdICogc2hhZG93V29ybGRQb3NpdGlvbjtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHQjcHJhZ21hIHVucm9sbF9sb29wX3N0YXJ0XG5cdGZvciAoIGludCBpID0gMDsgaSA8IE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdHNoYWRvd1dvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uICsgdmVjNCggc2hhZG93V29ybGROb3JtYWwgKiBwb2ludExpZ2h0U2hhZG93c1sgaSBdLnNoYWRvd05vcm1hbEJpYXMsIDAgKTtcblx0XHR2UG9pbnRTaGFkb3dDb29yZFsgaSBdID0gcG9pbnRTaGFkb3dNYXRyaXhbIGkgXSAqIHNoYWRvd1dvcmxkUG9zaXRpb247XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG4jZW5kaWYiLHNoYWRvd21hc2tfcGFyc19mcmFnbWVudDoiZmxvYXQgZ2V0U2hhZG93TWFzaygpIHtcblx0ZmxvYXQgc2hhZG93ID0gMS4wO1xuXHQjaWZkZWYgVVNFX1NIQURPV01BUFxuXHQjaWYgTlVNX0RJUl9MSUdIVF9TSEFET1dTID4gMFxuXHREaXJlY3Rpb25hbExpZ2h0U2hhZG93IGRpcmVjdGlvbmFsTGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX0RJUl9MSUdIVF9TSEFET1dTOyBpICsrICkge1xuXHRcdGRpcmVjdGlvbmFsTGlnaHQgPSBkaXJlY3Rpb25hbExpZ2h0U2hhZG93c1sgaSBdO1xuXHRcdHNoYWRvdyAqPSByZWNlaXZlU2hhZG93ID8gZ2V0U2hhZG93KCBkaXJlY3Rpb25hbFNoYWRvd01hcFsgaSBdLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvd01hcFNpemUsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93QmlhcywgZGlyZWN0aW9uYWxMaWdodC5zaGFkb3dSYWRpdXMsIHZEaXJlY3Rpb25hbFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9TUE9UX0xJR0hUX1NIQURPV1MgPiAwXG5cdFNwb3RMaWdodFNoYWRvdyBzcG90TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1NQT1RfTElHSFRfU0hBRE9XUzsgaSArKyApIHtcblx0XHRzcG90TGlnaHQgPSBzcG90TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRTaGFkb3coIHNwb3RTaGFkb3dNYXBbIGkgXSwgc3BvdExpZ2h0LnNoYWRvd01hcFNpemUsIHNwb3RMaWdodC5zaGFkb3dCaWFzLCBzcG90TGlnaHQuc2hhZG93UmFkaXVzLCB2U3BvdFNoYWRvd0Nvb3JkWyBpIF0gKSA6IDEuMDtcblx0fVxuXHQjcHJhZ21hIHVucm9sbF9sb29wX2VuZFxuXHQjZW5kaWZcblx0I2lmIE5VTV9QT0lOVF9MSUdIVF9TSEFET1dTID4gMFxuXHRQb2ludExpZ2h0U2hhZG93IHBvaW50TGlnaHQ7XG5cdCNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRcblx0Zm9yICggaW50IGkgPSAwOyBpIDwgTlVNX1BPSU5UX0xJR0hUX1NIQURPV1M7IGkgKysgKSB7XG5cdFx0cG9pbnRMaWdodCA9IHBvaW50TGlnaHRTaGFkb3dzWyBpIF07XG5cdFx0c2hhZG93ICo9IHJlY2VpdmVTaGFkb3cgPyBnZXRQb2ludFNoYWRvdyggcG9pbnRTaGFkb3dNYXBbIGkgXSwgcG9pbnRMaWdodC5zaGFkb3dNYXBTaXplLCBwb2ludExpZ2h0LnNoYWRvd0JpYXMsIHBvaW50TGlnaHQuc2hhZG93UmFkaXVzLCB2UG9pbnRTaGFkb3dDb29yZFsgaSBdLCBwb2ludExpZ2h0LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHQuc2hhZG93Q2FtZXJhRmFyICkgOiAxLjA7XG5cdH1cblx0I3ByYWdtYSB1bnJvbGxfbG9vcF9lbmRcblx0I2VuZGlmXG5cdCNlbmRpZlxuXHRyZXR1cm4gc2hhZG93O1xufSIsc2tpbmJhc2VfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgYm9uZU1hdFggPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgueCApO1xuXHRtYXQ0IGJvbmVNYXRZID0gZ2V0Qm9uZU1hdHJpeCggc2tpbkluZGV4LnkgKTtcblx0bWF0NCBib25lTWF0WiA9IGdldEJvbmVNYXRyaXgoIHNraW5JbmRleC56ICk7XG5cdG1hdDQgYm9uZU1hdFcgPSBnZXRCb25lTWF0cml4KCBza2luSW5kZXgudyApO1xuI2VuZGlmIixza2lubmluZ19wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR1bmlmb3JtIG1hdDQgYmluZE1hdHJpeDtcblx0dW5pZm9ybSBtYXQ0IGJpbmRNYXRyaXhJbnZlcnNlO1xuXHQjaWZkZWYgQk9ORV9URVhUVVJFXG5cdFx0dW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XG5cdFx0dW5pZm9ybSBpbnQgYm9uZVRleHR1cmVTaXplO1xuXHRcdG1hdDQgZ2V0Qm9uZU1hdHJpeCggY29uc3QgaW4gZmxvYXQgaSApIHtcblx0XHRcdGZsb2F0IGogPSBpICogNC4wO1xuXHRcdFx0ZmxvYXQgeCA9IG1vZCggaiwgZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApICk7XG5cdFx0XHRmbG9hdCB5ID0gZmxvb3IoIGogLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICkgKTtcblx0XHRcdGZsb2F0IGR4ID0gMS4wIC8gZmxvYXQoIGJvbmVUZXh0dXJlU2l6ZSApO1xuXHRcdFx0ZmxvYXQgZHkgPSAxLjAgLyBmbG9hdCggYm9uZVRleHR1cmVTaXplICk7XG5cdFx0XHR5ID0gZHkgKiAoIHkgKyAwLjUgKTtcblx0XHRcdHZlYzQgdjEgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDAuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjIgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjMgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcblx0XHRcdHZlYzQgdjQgPSB0ZXh0dXJlMkQoIGJvbmVUZXh0dXJlLCB2ZWMyKCBkeCAqICggeCArIDMuNSApLCB5ICkgKTtcblx0XHRcdG1hdDQgYm9uZSA9IG1hdDQoIHYxLCB2MiwgdjMsIHY0ICk7XG5cdFx0XHRyZXR1cm4gYm9uZTtcblx0XHR9XG5cdCNlbHNlXG5cdFx0dW5pZm9ybSBtYXQ0IGJvbmVNYXRyaWNlc1sgTUFYX0JPTkVTIF07XG5cdFx0bWF0NCBnZXRCb25lTWF0cml4KCBjb25zdCBpbiBmbG9hdCBpICkge1xuXHRcdFx0bWF0NCBib25lID0gYm9uZU1hdHJpY2VzWyBpbnQoaSkgXTtcblx0XHRcdHJldHVybiBib25lO1xuXHRcdH1cblx0I2VuZGlmXG4jZW5kaWYiLHNraW5uaW5nX3ZlcnRleDoiI2lmZGVmIFVTRV9TS0lOTklOR1xuXHR2ZWM0IHNraW5WZXJ0ZXggPSBiaW5kTWF0cml4ICogdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHR2ZWM0IHNraW5uZWQgPSB2ZWM0KCAwLjAgKTtcblx0c2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lng7XG5cdHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogc2tpbldlaWdodC55O1xuXHRza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIHNraW5XZWlnaHQuejtcblx0c2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBza2luV2VpZ2h0Lnc7XG5cdHRyYW5zZm9ybWVkID0gKCBiaW5kTWF0cml4SW52ZXJzZSAqIHNraW5uZWQgKS54eXo7XG4jZW5kaWYiLHNraW5ub3JtYWxfdmVydGV4OiIjaWZkZWYgVVNFX1NLSU5OSU5HXG5cdG1hdDQgc2tpbk1hdHJpeCA9IG1hdDQoIDAuMCApO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xuXHRza2luTWF0cml4ICs9IHNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xuXHRza2luTWF0cml4ID0gYmluZE1hdHJpeEludmVyc2UgKiBza2luTWF0cml4ICogYmluZE1hdHJpeDtcblx0b2JqZWN0Tm9ybWFsID0gdmVjNCggc2tpbk1hdHJpeCAqIHZlYzQoIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XG5cdCNpZmRlZiBVU0VfVEFOR0VOVFxuXHRcdG9iamVjdFRhbmdlbnQgPSB2ZWM0KCBza2luTWF0cml4ICogdmVjNCggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XG5cdCNlbmRpZlxuI2VuZGlmIixzcGVjdWxhcm1hcF9mcmFnbWVudDoiZmxvYXQgc3BlY3VsYXJTdHJlbmd0aDtcbiNpZmRlZiBVU0VfU1BFQ1VMQVJNQVBcblx0dmVjNCB0ZXhlbFNwZWN1bGFyID0gdGV4dHVyZTJEKCBzcGVjdWxhck1hcCwgdlV2ICk7XG5cdHNwZWN1bGFyU3RyZW5ndGggPSB0ZXhlbFNwZWN1bGFyLnI7XG4jZWxzZVxuXHRzcGVjdWxhclN0cmVuZ3RoID0gMS4wO1xuI2VuZGlmIixzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1NQRUNVTEFSTUFQXG5cdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyTWFwO1xuI2VuZGlmIix0b25lbWFwcGluZ19mcmFnbWVudDoiI2lmIGRlZmluZWQoIFRPTkVfTUFQUElORyApXG5cdGdsX0ZyYWdDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZ2xfRnJhZ0NvbG9yLnJnYiApO1xuI2VuZGlmIix0b25lbWFwcGluZ19wYXJzX2ZyYWdtZW50OiIjaWZuZGVmIHNhdHVyYXRlXG4jZGVmaW5lIHNhdHVyYXRlKCBhICkgY2xhbXAoIGEsIDAuMCwgMS4wIClcbiNlbmRpZlxudW5pZm9ybSBmbG9hdCB0b25lTWFwcGluZ0V4cG9zdXJlO1xudmVjMyBMaW5lYXJUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0cmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcbn1cbnZlYzMgUmVpbmhhcmRUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcblx0cmV0dXJuIHNhdHVyYXRlKCBjb2xvciAvICggdmVjMyggMS4wICkgKyBjb2xvciApICk7XG59XG52ZWMzIE9wdGltaXplZENpbmVvblRvbmVNYXBwaW5nKCB2ZWMzIGNvbG9yICkge1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlO1xuXHRjb2xvciA9IG1heCggdmVjMyggMC4wICksIGNvbG9yIC0gMC4wMDQgKTtcblx0cmV0dXJuIHBvdyggKCBjb2xvciAqICggNi4yICogY29sb3IgKyAwLjUgKSApIC8gKCBjb2xvciAqICggNi4yICogY29sb3IgKyAxLjcgKSArIDAuMDYgKSwgdmVjMyggMi4yICkgKTtcbn1cbnZlYzMgUlJUQW5kT0RURml0KCB2ZWMzIHYgKSB7XG5cdHZlYzMgYSA9IHYgKiAoIHYgKyAwLjAyNDU3ODYgKSAtIDAuMDAwMDkwNTM3O1xuXHR2ZWMzIGIgPSB2ICogKCAwLjk4MzcyOSAqIHYgKyAwLjQzMjk1MTAgKSArIDAuMjM4MDgxO1xuXHRyZXR1cm4gYSAvIGI7XG59XG52ZWMzIEFDRVNGaWxtaWNUb25lTWFwcGluZyggdmVjMyBjb2xvciApIHtcblx0Y29uc3QgbWF0MyBBQ0VTSW5wdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoIDAuNTk3MTksIDAuMDc2MDAsIDAuMDI4NDAgKSxcdFx0dmVjMyggMC4zNTQ1OCwgMC45MDgzNCwgMC4xMzM4MyApLFxuXHRcdHZlYzMoIDAuMDQ4MjMsIDAuMDE1NjYsIDAuODM3NzcgKVxuXHQpO1xuXHRjb25zdCBtYXQzIEFDRVNPdXRwdXRNYXQgPSBtYXQzKFxuXHRcdHZlYzMoICAxLjYwNDc1LCAtMC4xMDIwOCwgLTAuMDAzMjcgKSxcdFx0dmVjMyggLTAuNTMxMDgsICAxLjEwODEzLCAtMC4wNzI3NiApLFxuXHRcdHZlYzMoIC0wLjA3MzY3LCAtMC4wMDYwNSwgIDEuMDc2MDIgKVxuXHQpO1xuXHRjb2xvciAqPSB0b25lTWFwcGluZ0V4cG9zdXJlIC8gMC42O1xuXHRjb2xvciA9IEFDRVNJbnB1dE1hdCAqIGNvbG9yO1xuXHRjb2xvciA9IFJSVEFuZE9EVEZpdCggY29sb3IgKTtcblx0Y29sb3IgPSBBQ0VTT3V0cHV0TWF0ICogY29sb3I7XG5cdHJldHVybiBzYXR1cmF0ZSggY29sb3IgKTtcbn1cbnZlYzMgQ3VzdG9tVG9uZU1hcHBpbmcoIHZlYzMgY29sb3IgKSB7IHJldHVybiBjb2xvcjsgfSIsdHJhbnNtaXNzaW9uX2ZyYWdtZW50OiIjaWZkZWYgVVNFX1RSQU5TTUlTU0lPTlxuXHRmbG9hdCB0cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcblx0ZmxvYXQgdHJhbnNtaXNzaW9uRmFjdG9yID0gdHJhbnNtaXNzaW9uO1xuXHRmbG9hdCB0aGlja25lc3NGYWN0b3IgPSB0aGlja25lc3M7XG5cdCNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OTUFQXG5cdFx0dHJhbnNtaXNzaW9uRmFjdG9yICo9IHRleHR1cmUyRCggdHJhbnNtaXNzaW9uTWFwLCB2VXYgKS5yO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9USElDS05FU1NNQVBcblx0XHR0aGlja25lc3NGYWN0b3IgKj0gdGV4dHVyZTJEKCB0aGlja25lc3NNYXAsIHZVdiApLmc7XG5cdCNlbmRpZlxuXHR2ZWMzIHBvcyA9IHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIHYgPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XG5cdHZlYzMgbiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgdmlld01hdHJpeCApO1xuXHR2ZWM0IHRyYW5zbWlzc2lvbiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXG5cdFx0biwgdiwgcm91Z2huZXNzRmFjdG9yLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLFxuXHRcdHBvcywgbW9kZWxNYXRyaXgsIHZpZXdNYXRyaXgsIHByb2plY3Rpb25NYXRyaXgsIGlvciwgdGhpY2tuZXNzRmFjdG9yLFxuXHRcdGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0dG90YWxEaWZmdXNlID0gbWl4KCB0b3RhbERpZmZ1c2UsIHRyYW5zbWlzc2lvbi5yZ2IsIHRyYW5zbWlzc2lvbkZhY3RvciApO1xuXHR0cmFuc21pc3Npb25BbHBoYSA9IG1peCggdHJhbnNtaXNzaW9uQWxwaGEsIHRyYW5zbWlzc2lvbi5hLCB0cmFuc21pc3Npb25GYWN0b3IgKTtcbiNlbmRpZiIsdHJhbnNtaXNzaW9uX3BhcnNfZnJhZ21lbnQ6IiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHVuaWZvcm0gZmxvYXQgdHJhbnNtaXNzaW9uO1xuXHR1bmlmb3JtIGZsb2F0IHRoaWNrbmVzcztcblx0dW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHR1bmlmb3JtIHZlYzMgYXR0ZW51YXRpb25Db2xvcjtcblx0I2lmZGVmIFVTRV9UUkFOU01JU1NJT05NQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCB0cmFuc21pc3Npb25NYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1RISUNLTkVTU01BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHRoaWNrbmVzc01hcDtcblx0I2VuZGlmXG5cdHVuaWZvcm0gdmVjMiB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTtcblx0dW5pZm9ybSBzYW1wbGVyMkQgdHJhbnNtaXNzaW9uU2FtcGxlck1hcDtcblx0dW5pZm9ybSBtYXQ0IG1vZGVsTWF0cml4O1xuXHR1bmlmb3JtIG1hdDQgcHJvamVjdGlvbk1hdHJpeDtcblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXHR2ZWMzIGdldFZvbHVtZVRyYW5zbWlzc2lvblJheSggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBtYXQ0IG1vZGVsTWF0cml4ICkge1xuXHRcdHZlYzMgcmVmcmFjdGlvblZlY3RvciA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xuXHRcdHZlYzMgbW9kZWxTY2FsZTtcblx0XHRtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAwIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAxIF0ueHl6ICkgKTtcblx0XHRtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzMoIG1vZGVsTWF0cml4WyAyIF0ueHl6ICkgKTtcblx0XHRyZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xuXHR9XG5cdGZsb2F0IGFwcGx5SW9yVG9Sb3VnaG5lc3MoIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gZmxvYXQgaW9yICkge1xuXHRcdHJldHVybiByb3VnaG5lc3MgKiBjbGFtcCggaW9yICogMi4wIC0gMi4wLCAwLjAsIDEuMCApO1xuXHR9XG5cdHZlYzQgZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCBjb25zdCBpbiB2ZWMyIGZyYWdDb29yZCwgY29uc3QgaW4gZmxvYXQgcm91Z2huZXNzLCBjb25zdCBpbiBmbG9hdCBpb3IgKSB7XG5cdFx0ZmxvYXQgZnJhbWVidWZmZXJMb2QgPSBsb2cyKCB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xuXHRcdCNpZmRlZiBURVhUVVJFX0xPRF9FWFRcblx0XHRcdHJldHVybiB0ZXh0dXJlMkRMb2RFWFQoIHRyYW5zbWlzc2lvblNhbXBsZXJNYXAsIGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QgKTtcblx0XHQjZWxzZVxuXHRcdFx0cmV0dXJuIHRleHR1cmUyRCggdHJhbnNtaXNzaW9uU2FtcGxlck1hcCwgZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCApO1xuXHRcdCNlbmRpZlxuXHR9XG5cdHZlYzMgYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggY29uc3QgaW4gdmVjMyByYWRpYW5jZSwgY29uc3QgaW4gZmxvYXQgdHJhbnNtaXNzaW9uRGlzdGFuY2UsIGNvbnN0IGluIHZlYzMgYXR0ZW51YXRpb25Db2xvciwgY29uc3QgaW4gZmxvYXQgYXR0ZW51YXRpb25EaXN0YW5jZSApIHtcblx0XHRpZiAoIGF0dGVudWF0aW9uRGlzdGFuY2UgPT0gMC4wICkge1xuXHRcdFx0cmV0dXJuIHJhZGlhbmNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ZWMzIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xuXHRcdFx0dmVjMyB0cmFuc21pdHRhbmNlID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1x0XHRcdHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XG5cdFx0fVxuXHR9XG5cdHZlYzQgZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggY29uc3QgaW4gdmVjMyBuLCBjb25zdCBpbiB2ZWMzIHYsIGNvbnN0IGluIGZsb2F0IHJvdWdobmVzcywgY29uc3QgaW4gdmVjMyBkaWZmdXNlQ29sb3IsXG5cdFx0Y29uc3QgaW4gdmVjMyBzcGVjdWxhckNvbG9yLCBjb25zdCBpbiBmbG9hdCBzcGVjdWxhckY5MCwgY29uc3QgaW4gdmVjMyBwb3NpdGlvbiwgY29uc3QgaW4gbWF0NCBtb2RlbE1hdHJpeCxcblx0XHRjb25zdCBpbiBtYXQ0IHZpZXdNYXRyaXgsIGNvbnN0IGluIG1hdDQgcHJvak1hdHJpeCwgY29uc3QgaW4gZmxvYXQgaW9yLCBjb25zdCBpbiBmbG9hdCB0aGlja25lc3MsXG5cdFx0Y29uc3QgaW4gdmVjMyBhdHRlbnVhdGlvbkNvbG9yLCBjb25zdCBpbiBmbG9hdCBhdHRlbnVhdGlvbkRpc3RhbmNlICkge1xuXHRcdHZlYzMgdHJhbnNtaXNzaW9uUmF5ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcblx0XHR2ZWMzIHJlZnJhY3RlZFJheUV4aXQgPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcblx0XHR2ZWM0IG5kY1BvcyA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XG5cdFx0dmVjMiByZWZyYWN0aW9uQ29vcmRzID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XG5cdFx0cmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XG5cdFx0dmVjNCB0cmFuc21pdHRlZExpZ2h0ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xuXHRcdHZlYzMgYXR0ZW51YXRlZENvbG9yID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcblx0XHR2ZWMzIEYgPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcblx0XHRyZXR1cm4gdmVjNCggKCAxLjAgLSBGICkgKiBhdHRlbnVhdGVkQ29sb3IgKiBkaWZmdXNlQ29sb3IsIHRyYW5zbWl0dGVkTGlnaHQuYSApO1xuXHR9XG4jZW5kaWYiLHV2X3BhcnNfZnJhZ21lbnQ6IiNpZiAoIGRlZmluZWQoIFVTRV9VViApICYmICEgZGVmaW5lZCggVVZTX1ZFUlRFWF9PTkxZICkgKVxuXHR2YXJ5aW5nIHZlYzIgdlV2O1xuI2VuZGlmIix1dl9wYXJzX3ZlcnRleDoiI2lmZGVmIFVTRV9VVlxuXHQjaWZkZWYgVVZTX1ZFUlRFWF9PTkxZXG5cdFx0dmVjMiB2VXY7XG5cdCNlbHNlXG5cdFx0dmFyeWluZyB2ZWMyIHZVdjtcblx0I2VuZGlmXG5cdHVuaWZvcm0gbWF0MyB1dlRyYW5zZm9ybTtcbiNlbmRpZiIsdXZfdmVydGV4OiIjaWZkZWYgVVNFX1VWXG5cdHZVdiA9ICggdXZUcmFuc2Zvcm0gKiB2ZWMzKCB1diwgMSApICkueHk7XG4jZW5kaWYiLHV2Ml9wYXJzX2ZyYWdtZW50OiIjaWYgZGVmaW5lZCggVVNFX0xJR0hUTUFQICkgfHwgZGVmaW5lZCggVVNFX0FPTUFQIClcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG4jZW5kaWYiLHV2Ml9wYXJzX3ZlcnRleDoiI2lmIGRlZmluZWQoIFVTRV9MSUdIVE1BUCApIHx8IGRlZmluZWQoIFVTRV9BT01BUCApXG5cdGF0dHJpYnV0ZSB2ZWMyIHV2Mjtcblx0dmFyeWluZyB2ZWMyIHZVdjI7XG5cdHVuaWZvcm0gbWF0MyB1djJUcmFuc2Zvcm07XG4jZW5kaWYiLHV2Ml92ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfTElHSFRNQVAgKSB8fCBkZWZpbmVkKCBVU0VfQU9NQVAgKVxuXHR2VXYyID0gKCB1djJUcmFuc2Zvcm0gKiB2ZWMzKCB1djIsIDEgKSApLnh5O1xuI2VuZGlmIix3b3JsZHBvc192ZXJ0ZXg6IiNpZiBkZWZpbmVkKCBVU0VfRU5WTUFQICkgfHwgZGVmaW5lZCggRElTVEFOQ0UgKSB8fCBkZWZpbmVkICggVVNFX1NIQURPV01BUCApIHx8IGRlZmluZWQgKCBVU0VfVFJBTlNNSVNTSU9OIClcblx0dmVjNCB3b3JsZFBvc2l0aW9uID0gdmVjNCggdHJhbnNmb3JtZWQsIDEuMCApO1xuXHQjaWZkZWYgVVNFX0lOU1RBTkNJTkdcblx0XHR3b3JsZFBvc2l0aW9uID0gaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuXHQjZW5kaWZcblx0d29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogd29ybGRQb3NpdGlvbjtcbiNlbmRpZiIsYmFja2dyb3VuZF92ZXJ0OiJ2YXJ5aW5nIHZlYzIgdlV2O1xudW5pZm9ybSBtYXQzIHV2VHJhbnNmb3JtO1xudm9pZCBtYWluKCkge1xuXHR2VXYgPSAoIHV2VHJhbnNmb3JtICogdmVjMyggdXYsIDEgKSApLnh5O1xuXHRnbF9Qb3NpdGlvbiA9IHZlYzQoIHBvc2l0aW9uLnh5LCAxLjAsIDEuMCApO1xufSIsYmFja2dyb3VuZF9mcmFnOiJ1bmlmb3JtIHNhbXBsZXIyRCB0MkQ7XG52YXJ5aW5nIHZlYzIgdlV2O1xudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQoIHQyRCwgdlV2ICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGN1YmVfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9zaXRpb24ueiA9IGdsX1Bvc2l0aW9uLnc7XG59IixjdWJlX2ZyYWc6IiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG52YXJ5aW5nIHZlYzMgdldvcmxkRGlyZWN0aW9uO1xuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbnZvaWQgbWFpbigpIHtcblx0dmVjMyB2UmVmbGVjdCA9IHZXb3JsZERpcmVjdGlvbjtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0Z2xfRnJhZ0NvbG9yID0gZW52Q29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGRlcHRoX3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dkhpZ2hQcmVjaXNpb25aVyA9IGdsX1Bvc2l0aW9uLnp3O1xufSIsZGVwdGhfZnJhZzoiI2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc19mcmFnbWVudD5cbnZhcnlpbmcgdmVjMiB2SGlnaFByZWNpc2lvblpXO1xudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIDEuMCApO1xuXHQjaWYgREVQVEhfUEFDS0lORyA9PSAzMjAwXG5cdFx0ZGlmZnVzZUNvbG9yLmEgPSBvcGFjaXR5O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdGZsb2F0IGZyYWdDb29yZFogPSAwLjUgKiB2SGlnaFByZWNpc2lvblpXWzBdIC8gdkhpZ2hQcmVjaXNpb25aV1sxXSArIDAuNTtcblx0I2lmIERFUFRIX1BBQ0tJTkcgPT0gMzIwMFxuXHRcdGdsX0ZyYWdDb2xvciA9IHZlYzQoIHZlYzMoIDEuMCAtIGZyYWdDb29yZFogKSwgb3BhY2l0eSApO1xuXHQjZWxpZiBERVBUSF9QQUNLSU5HID09IDMyMDFcblx0XHRnbF9GcmFnQ29sb3IgPSBwYWNrRGVwdGhUb1JHQkEoIGZyYWdDb29yZFogKTtcblx0I2VuZGlmXG59IixkaXN0YW5jZVJHQkFfdmVydDoiI2RlZmluZSBESVNUQU5DRVxudmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaWZkZWYgVVNFX0RJU1BMQUNFTUVOVE1BUFxuXHRcdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcbn0iLGRpc3RhbmNlUkdCQV9mcmFnOiIjZGVmaW5lIERJU1RBTkNFXG51bmlmb3JtIHZlYzMgcmVmZXJlbmNlUG9zaXRpb247XG51bmlmb3JtIGZsb2F0IG5lYXJEaXN0YW5jZTtcbnVuaWZvcm0gZmxvYXQgZmFyRGlzdGFuY2U7XG52YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluICgpIHtcblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19mcmFnbWVudD5cblx0dmVjNCBkaWZmdXNlQ29sb3IgPSB2ZWM0KCAxLjAgKTtcblx0I2luY2x1ZGUgPG1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHRmbG9hdCBkaXN0ID0gbGVuZ3RoKCB2V29ybGRQb3NpdGlvbiAtIHJlZmVyZW5jZVBvc2l0aW9uICk7XG5cdGRpc3QgPSAoIGRpc3QgLSBuZWFyRGlzdGFuY2UgKSAvICggZmFyRGlzdGFuY2UgLSBuZWFyRGlzdGFuY2UgKTtcblx0ZGlzdCA9IHNhdHVyYXRlKCBkaXN0ICk7XG5cdGdsX0ZyYWdDb2xvciA9IHBhY2tEZXB0aFRvUkdCQSggZGlzdCApO1xufSIsZXF1aXJlY3RfdmVydDoidmFyeWluZyB2ZWMzIHZXb3JsZERpcmVjdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG52b2lkIG1haW4oKSB7XG5cdHZXb3JsZERpcmVjdGlvbiA9IHRyYW5zZm9ybURpcmVjdGlvbiggcG9zaXRpb24sIG1vZGVsTWF0cml4ICk7XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cbn0iLGVxdWlyZWN0X2ZyYWc6InVuaWZvcm0gc2FtcGxlcjJEIHRFcXVpcmVjdDtcbnZhcnlpbmcgdmVjMyB2V29ybGREaXJlY3Rpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxudm9pZCBtYWluKCkge1xuXHR2ZWMzIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdldvcmxkRGlyZWN0aW9uICk7XG5cdHZlYzIgc2FtcGxlVVYgPSBlcXVpcmVjdFV2KCBkaXJlY3Rpb24gKTtcblx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKCB0RXF1aXJlY3QsIHNhbXBsZVVWICk7XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cbn0iLGxpbmVkYXNoZWRfdmVydDoidW5pZm9ybSBmbG9hdCBzY2FsZTtcbmF0dHJpYnV0ZSBmbG9hdCBsaW5lRGlzdGFuY2U7XG52YXJ5aW5nIGZsb2F0IHZMaW5lRGlzdGFuY2U7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdHZMaW5lRGlzdGFuY2UgPSBzY2FsZSAqIGxpbmVEaXN0YW5jZTtcblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPGZvZ192ZXJ0ZXg+XG59IixsaW5lZGFzaGVkX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBmbG9hdCBkYXNoU2l6ZTtcbnVuaWZvcm0gZmxvYXQgdG90YWxTaXplO1xudmFyeWluZyBmbG9hdCB2TGluZURpc3RhbmNlO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdGlmICggbW9kKCB2TGluZURpc3RhbmNlLCB0b3RhbFNpemUgKSA+IGRhc2hTaXplICkge1xuXHRcdGRpc2NhcmQ7XG5cdH1cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gdmVjMyggMC4wICk7XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0b3V0Z29pbmdMaWdodCA9IGRpZmZ1c2VDb2xvci5yZ2I7XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG59IixtZXNoYmFzaWNfdmVydDoiI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDx1djJfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaWYgZGVmaW5lZCAoIFVTRV9FTlZNQVAgKSB8fCBkZWZpbmVkICggVVNFX1NLSU5OSU5HIClcblx0XHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHRcdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0XHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdFx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaGJhc2ljX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmbmRlZiBGTEFUX1NIQURFRFxuXHR2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiNlbmRpZlxuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdFJlZmxlY3RlZExpZ2h0IHJlZmxlY3RlZExpZ2h0ID0gUmVmbGVjdGVkTGlnaHQoIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApICk7XG5cdCNpZmRlZiBVU0VfTElHSFRNQVBcblx0XHR2ZWM0IGxpZ2h0TWFwVGV4ZWw9IHRleHR1cmUyRCggbGlnaHRNYXAsIHZVdjIgKTtcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBsaWdodE1hcEludGVuc2l0eTtcblx0I2Vsc2Vcblx0XHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gdmVjMyggMS4wICk7XG5cdCNlbmRpZlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBkaWZmdXNlQ29sb3IucmdiO1xuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XG5cdCNpbmNsdWRlIDxlbnZtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxvdXRwdXRfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGVuY29kaW5nc19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGZvZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPHByZW11bHRpcGxpZWRfYWxwaGFfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxkaXRoZXJpbmdfZnJhZ21lbnQ+XG59IixtZXNobGFtYmVydF92ZXJ0OiIjZGVmaW5lIExBTUJFUlRcbnZhcnlpbmcgdmVjMyB2TGlnaHRGcm9udDtcbnZhcnlpbmcgdmVjMyB2SW5kaXJlY3RGcm9udDtcbiNpZmRlZiBET1VCTEVfU0lERURcblx0dmFyeWluZyB2ZWMzIHZMaWdodEJhY2s7XG5cdHZhcnlpbmcgdmVjMyB2SW5kaXJlY3RCYWNrO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxlbnZtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8YnNkZnM+XG4jaW5jbHVkZSA8bGlnaHRzX3BhcnNfYmVnaW4+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx1djJfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y29sb3JfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGhub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbmJhc2VfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxkZWZhdWx0bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPGVudm1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxsaWdodHNfbGFtYmVydF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2hsYW1iZXJ0X2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudmFyeWluZyB2ZWMzIHZMaWdodEZyb250O1xudmFyeWluZyB2ZWMzIHZJbmRpcmVjdEZyb250O1xuI2lmZGVmIERPVUJMRV9TSURFRFxuXHR2YXJ5aW5nIHZlYzMgdkxpZ2h0QmFjaztcblx0dmFyeWluZyB2ZWMzIHZJbmRpcmVjdEJhY2s7XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxlbnZtYXBfY29tbW9uX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y3ViZV91dl9yZWZsZWN0aW9uX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJzZGZzPlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hc2tfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzcGVjdWxhcm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzQgZGlmZnVzZUNvbG9yID0gdmVjNCggZGlmZnVzZSwgb3BhY2l0eSApO1xuXHRSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xuXHR2ZWMzIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSA9IGVtaXNzaXZlO1xuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxjb2xvcl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGF0ZXN0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8c3BlY3VsYXJtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2lmZGVmIERPVUJMRV9TSURFRFxuXHRcdHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSAoIGdsX0Zyb250RmFjaW5nICkgPyB2SW5kaXJlY3RGcm9udCA6IHZJbmRpcmVjdEJhY2s7XG5cdCNlbHNlXG5cdFx0cmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IHZJbmRpcmVjdEZyb250O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxpZ2h0bWFwX2ZyYWdtZW50PlxuXHRyZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICk7XG5cdCNpZmRlZiBET1VCTEVfU0lERURcblx0XHRyZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gKCBnbF9Gcm9udEZhY2luZyApID8gdkxpZ2h0RnJvbnQgOiB2TGlnaHRCYWNrO1xuXHQjZWxzZVxuXHRcdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSB2TGlnaHRGcm9udDtcblx0I2VuZGlmXG5cdHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKj0gQlJERl9MYW1iZXJ0KCBkaWZmdXNlQ29sb3IucmdiICkgKiBnZXRTaGFkb3dNYXNrKCk7XG5cdCNpbmNsdWRlIDxhb21hcF9mcmFnbWVudD5cblx0dmVjMyBvdXRnb2luZ0xpZ2h0ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcblx0I2luY2x1ZGUgPGVudm1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2htYXRjYXBfdmVydDoiI2RlZmluZSBNQVRDQVBcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDx1dl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbn0iLG1lc2htYXRjYXBfZnJhZzoiI2RlZmluZSBNQVRDQVBcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWF0Y2FwO1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGRpdGhlcmluZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHR2ZWMzIHZpZXdEaXIgPSBub3JtYWxpemUoIHZWaWV3UG9zaXRpb24gKTtcblx0dmVjMyB4ID0gbm9ybWFsaXplKCB2ZWMzKCB2aWV3RGlyLnosIDAuMCwgLSB2aWV3RGlyLnggKSApO1xuXHR2ZWMzIHkgPSBjcm9zcyggdmlld0RpciwgeCApO1xuXHR2ZWMyIHV2ID0gdmVjMiggZG90KCB4LCBub3JtYWwgKSwgZG90KCB5LCBub3JtYWwgKSApICogMC40OTUgKyAwLjU7XG5cdCNpZmRlZiBVU0VfTUFUQ0FQXG5cdFx0dmVjNCBtYXRjYXBDb2xvciA9IHRleHR1cmUyRCggbWF0Y2FwLCB1diApO1xuXHQjZWxzZVxuXHRcdHZlYzQgbWF0Y2FwQ29sb3IgPSB2ZWM0KCB2ZWMzKCBtaXgoIDAuMiwgMC44LCB1di55ICkgKSwgMS4wICk7XG5cdCNlbmRpZlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiICogbWF0Y2FwQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaG5vcm1hbF92ZXJ0OiIjZGVmaW5lIE5PUk1BTFxuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG4jaWYgZGVmaW5lZCggRkxBVF9TSEFERUQgKSB8fCBkZWZpbmVkKCBVU0VfQlVNUE1BUCApIHx8IGRlZmluZWQoIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAgKVxuXHR2Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ejtcbiNlbmRpZlxufSIsbWVzaG5vcm1hbF9mcmFnOiIjZGVmaW5lIE5PUk1BTFxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2lmIGRlZmluZWQoIEZMQVRfU0hBREVEICkgfHwgZGVmaW5lZCggVVNFX0JVTVBNQVAgKSB8fCBkZWZpbmVkKCBUQU5HRU5UU1BBQ0VfTk9STUFMTUFQIClcblx0dmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jZW5kaWZcbiNpbmNsdWRlIDxwYWNraW5nPlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YnVtcG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG5vcm1hbG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCBwYWNrTm9ybWFsVG9SR0IoIG5vcm1hbCApLCBvcGFjaXR5ICk7XG59IixtZXNocGhvbmdfdmVydDoiI2RlZmluZSBQSE9OR1xudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8ZW52bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bW9ycGh0YXJnZXRfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2tpbm5pbmdfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8c2hhZG93bWFwX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPHV2X3ZlcnRleD5cblx0I2luY2x1ZGUgPHV2Ml92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbm5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2luYmFzZV92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRlZmF1bHRub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8bm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2luX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBodGFyZ2V0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5uaW5nX3ZlcnRleD5cblx0I2luY2x1ZGUgPGRpc3BsYWNlbWVudG1hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdHZWaWV3UG9zaXRpb24gPSAtIG12UG9zaXRpb24ueHl6O1xuXHQjaW5jbHVkZSA8d29ybGRwb3NfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZW52bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsbWVzaHBob25nX2ZyYWc6IiNkZWZpbmUgUEhPTkdcbnVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSB2ZWMzIGVtaXNzaXZlO1xudW5pZm9ybSB2ZWMzIHNwZWN1bGFyO1xudW5pZm9ybSBmbG9hdCBzaGluaW5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGN1YmVfdXZfcmVmbGVjdGlvbl9mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfcGhvbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxidW1wbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bm9ybWFsbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8c3BlY3VsYXJtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHNwZWN1bGFybWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bm9ybWFsX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxlbWlzc2l2ZW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19waG9uZ19mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8ZW52bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIsbWVzaHBoeXNpY2FsX3ZlcnQ6IiNkZWZpbmUgU1RBTkRBUkRcbnZhcnlpbmcgdmVjMyB2Vmlld1Bvc2l0aW9uO1xuI2lmZGVmIFVTRV9UUkFOU01JU1NJT05cblx0dmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuI2VuZGlmXG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbiNpZmRlZiBVU0VfVFJBTlNNSVNTSU9OXG5cdHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG4jZW5kaWZcbn0iLG1lc2hwaHlzaWNhbF9mcmFnOiIjZGVmaW5lIFNUQU5EQVJEXG4jaWZkZWYgUEhZU0lDQUxcblx0I2RlZmluZSBJT1Jcblx0I2RlZmluZSBTUEVDVUxBUlxuI2VuZGlmXG51bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gdmVjMyBlbWlzc2l2ZTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzO1xudW5pZm9ybSBmbG9hdCBtZXRhbG5lc3M7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaWZkZWYgSU9SXG5cdHVuaWZvcm0gZmxvYXQgaW9yO1xuI2VuZGlmXG4jaWZkZWYgU1BFQ1VMQVJcblx0dW5pZm9ybSBmbG9hdCBzcGVjdWxhckludGVuc2l0eTtcblx0dW5pZm9ybSB2ZWMzIHNwZWN1bGFyQ29sb3I7XG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVBcblx0XHR1bmlmb3JtIHNhbXBsZXIyRCBzcGVjdWxhckludGVuc2l0eU1hcDtcblx0I2VuZGlmXG5cdCNpZmRlZiBVU0VfU1BFQ1VMQVJDT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNwZWN1bGFyQ29sb3JNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG4jaWZkZWYgVVNFX0NMRUFSQ09BVFxuXHR1bmlmb3JtIGZsb2F0IGNsZWFyY29hdDtcblx0dW5pZm9ybSBmbG9hdCBjbGVhcmNvYXRSb3VnaG5lc3M7XG4jZW5kaWZcbiNpZmRlZiBVU0VfU0hFRU5cblx0dW5pZm9ybSB2ZWMzIHNoZWVuQ29sb3I7XG5cdHVuaWZvcm0gZmxvYXQgc2hlZW5Sb3VnaG5lc3M7XG5cdCNpZmRlZiBVU0VfU0hFRU5DT0xPUk1BUFxuXHRcdHVuaWZvcm0gc2FtcGxlcjJEIHNoZWVuQ29sb3JNYXA7XG5cdCNlbmRpZlxuXHQjaWZkZWYgVVNFX1NIRUVOUk9VR0hORVNTTUFQXG5cdFx0dW5pZm9ybSBzYW1wbGVyMkQgc2hlZW5Sb3VnaG5lc3NNYXA7XG5cdCNlbmRpZlxuI2VuZGlmXG52YXJ5aW5nIHZlYzMgdlZpZXdQb3NpdGlvbjtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxkaXRoZXJpbmdfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8dXYyX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGFtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYXRlc3RfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhb21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0bWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW1pc3NpdmVtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG4jaW5jbHVkZSA8ZW52bWFwX2NvbW1vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVudm1hcF9waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19wYXJzX2JlZ2luPlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxpZ2h0c19waHlzaWNhbF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHRyYW5zbWlzc2lvbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxjbGVhcmNvYXRfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxyb3VnaG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtZXRhbG5lc3NtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHJvdWdobmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG1ldGFsbmVzc21hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8Y2xlYXJjb2F0X25vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGNsZWFyY29hdF9ub3JtYWxfZnJhZ21lbnRfbWFwcz5cblx0I2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX3BoeXNpY2FsX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2JlZ2luPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X21hcHM+XG5cdCNpbmNsdWRlIDxsaWdodHNfZnJhZ21lbnRfZW5kPlxuXHQjaW5jbHVkZSA8YW9tYXBfZnJhZ21lbnQ+XG5cdHZlYzMgdG90YWxEaWZmdXNlID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcblx0dmVjMyB0b3RhbFNwZWN1bGFyID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xuXHQjaW5jbHVkZSA8dHJhbnNtaXNzaW9uX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSB0b3RhbERpZmZ1c2UgKyB0b3RhbFNwZWN1bGFyICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaWZkZWYgVVNFX1NIRUVOXG5cdFx0ZmxvYXQgc2hlZW5FbmVyZ3lDb21wID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XG5cdFx0b3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiBzaGVlbkVuZXJneUNvbXAgKyBzaGVlblNwZWN1bGFyO1xuXHQjZW5kaWZcblx0I2lmZGVmIFVTRV9DTEVBUkNPQVRcblx0XHRmbG9hdCBkb3ROVmNjID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcblx0XHR2ZWMzIEZjYyA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xuXHRcdG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogKCAxLjAgLSBtYXRlcmlhbC5jbGVhcmNvYXQgKiBGY2MgKSArIGNsZWFyY29hdFNwZWN1bGFyICogbWF0ZXJpYWwuY2xlYXJjb2F0O1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPG91dHB1dF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPHRvbmVtYXBwaW5nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZW5jb2RpbmdzX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Zm9nX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8cHJlbXVsdGlwbGllZF9hbHBoYV9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGRpdGhlcmluZ19mcmFnbWVudD5cbn0iLG1lc2h0b29uX3ZlcnQ6IiNkZWZpbmUgVE9PTlxudmFyeWluZyB2ZWMzIHZWaWV3UG9zaXRpb247XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxkaXNwbGFjZW1lbnRtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG5vcm1hbF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxza2lubmluZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8bG9nZGVwdGhidWZfcGFyc192ZXJ0ZXg+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfdmVydGV4Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8dXZfdmVydGV4PlxuXHQjaW5jbHVkZSA8dXYyX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNvbG9yX3ZlcnRleD5cblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8YmVnaW5fdmVydGV4PlxuXHQjaW5jbHVkZSA8bW9ycGh0YXJnZXRfdmVydGV4PlxuXHQjaW5jbHVkZSA8c2tpbm5pbmdfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGlzcGxhY2VtZW50bWFwX3ZlcnRleD5cblx0I2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuXHQjaW5jbHVkZSA8bG9nZGVwdGhidWZfdmVydGV4PlxuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3ZlcnRleD5cblx0dlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXo7XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxzaGFkb3dtYXBfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLG1lc2h0b29uX2ZyYWc6IiNkZWZpbmUgVE9PTlxudW5pZm9ybSB2ZWMzIGRpZmZ1c2U7XG51bmlmb3JtIHZlYzMgZW1pc3NpdmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHBhY2tpbmc+XG4jaW5jbHVkZSA8ZGl0aGVyaW5nX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y29sb3JfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDx1dl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHV2Ml9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YWxwaGF0ZXN0X3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8YW9tYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodG1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGVtaXNzaXZlbWFwX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Z3JhZGllbnRtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxub3JtYWxfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsaWdodHNfdG9vbl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGJ1bXBtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxub3JtYWxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc19wYXJzX2ZyYWdtZW50Plxudm9pZCBtYWluKCkge1xuXHQjaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX2ZyYWdtZW50PlxuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0UmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcblx0dmVjMyB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgPSBlbWlzc2l2ZTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYW1hcF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGFscGhhdGVzdF9mcmFnbWVudD5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPG5vcm1hbF9mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8ZW1pc3NpdmVtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxsaWdodHNfdG9vbl9mcmFnbWVudD5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9iZWdpbj5cblx0I2luY2x1ZGUgPGxpZ2h0c19mcmFnbWVudF9tYXBzPlxuXHQjaW5jbHVkZSA8bGlnaHRzX2ZyYWdtZW50X2VuZD5cblx0I2luY2x1ZGUgPGFvbWFwX2ZyYWdtZW50PlxuXHR2ZWMzIG91dGdvaW5nTGlnaHQgPSByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICsgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICsgdG90YWxFbWlzc2l2ZVJhZGlhbmNlO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8ZGl0aGVyaW5nX2ZyYWdtZW50PlxufSIscG9pbnRzX3ZlcnQ6InVuaWZvcm0gZmxvYXQgc2l6ZTtcbnVuaWZvcm0gZmxvYXQgc2NhbGU7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPGNvbG9yX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxtb3JwaHRhcmdldF9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjb2xvcl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0Z2xfUG9pbnRTaXplID0gc2l6ZTtcblx0I2lmZGVmIFVTRV9TSVpFQVRURU5VQVRJT05cblx0XHRib29sIGlzUGVyc3BlY3RpdmUgPSBpc1BlcnNwZWN0aXZlTWF0cml4KCBwcm9qZWN0aW9uTWF0cml4ICk7XG5cdFx0aWYgKCBpc1BlcnNwZWN0aXZlICkgZ2xfUG9pbnRTaXplICo9ICggc2NhbGUgLyAtIG12UG9zaXRpb24ueiApO1xuXHQjZW5kaWZcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3ZlcnRleD5cblx0I2luY2x1ZGUgPGNsaXBwaW5nX3BsYW5lc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDx3b3JsZHBvc192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIscG9pbnRzX2ZyYWc6InVuaWZvcm0gdmVjMyBkaWZmdXNlO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuI2luY2x1ZGUgPGNvbW1vbj5cbiNpbmNsdWRlIDxjb2xvcl9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPG1hcF9wYXJ0aWNsZV9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX3BhcnRpY2xlX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8Y29sb3JfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxwcmVtdWx0aXBsaWVkX2FscGhhX2ZyYWdtZW50PlxufSIsc2hhZG93X3ZlcnQ6IiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8Zm9nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPG1vcnBodGFyZ2V0X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNraW5uaW5nX3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPHNoYWRvd21hcF9wYXJzX3ZlcnRleD5cbnZvaWQgbWFpbigpIHtcblx0I2luY2x1ZGUgPGJlZ2lubm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPG1vcnBobm9ybWFsX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5iYXNlX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNraW5ub3JtYWxfdmVydGV4PlxuXHQjaW5jbHVkZSA8ZGVmYXVsdG5vcm1hbF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxiZWdpbl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxtb3JwaHRhcmdldF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxza2lubmluZ192ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxwcm9qZWN0X3ZlcnRleD5cblx0I2luY2x1ZGUgPHdvcmxkcG9zX3ZlcnRleD5cblx0I2luY2x1ZGUgPHNoYWRvd21hcF92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxmb2dfdmVydGV4PlxufSIsc2hhZG93X2ZyYWc6InVuaWZvcm0gdmVjMyBjb2xvcjtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8cGFja2luZz5cbiNpbmNsdWRlIDxmb2dfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxic2Rmcz5cbiNpbmNsdWRlIDxsaWdodHNfcGFyc19iZWdpbj5cbiNpbmNsdWRlIDxzaGFkb3dtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxzaGFkb3dtYXNrX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdGdsX0ZyYWdDb2xvciA9IHZlYzQoIGNvbG9yLCBvcGFjaXR5ICogKCAxLjAgLSBnZXRTaGFkb3dNYXNrKCkgKSApO1xuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59IixzcHJpdGVfdmVydDoidW5pZm9ybSBmbG9hdCByb3RhdGlvbjtcbnVuaWZvcm0gdmVjMiBjZW50ZXI7XG4jaW5jbHVkZSA8Y29tbW9uPlxuI2luY2x1ZGUgPHV2X3BhcnNfdmVydGV4PlxuI2luY2x1ZGUgPGZvZ19wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl9wYXJzX3ZlcnRleD5cbiNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfcGFyc192ZXJ0ZXg+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDx1dl92ZXJ0ZXg+XG5cdHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQoIDAuMCwgMC4wLCAwLjAsIDEuMCApO1xuXHR2ZWMyIHNjYWxlO1xuXHRzY2FsZS54ID0gbGVuZ3RoKCB2ZWMzKCBtb2RlbE1hdHJpeFsgMCBdLngsIG1vZGVsTWF0cml4WyAwIF0ueSwgbW9kZWxNYXRyaXhbIDAgXS56ICkgKTtcblx0c2NhbGUueSA9IGxlbmd0aCggdmVjMyggbW9kZWxNYXRyaXhbIDEgXS54LCBtb2RlbE1hdHJpeFsgMSBdLnksIG1vZGVsTWF0cml4WyAxIF0ueiApICk7XG5cdCNpZm5kZWYgVVNFX1NJWkVBVFRFTlVBVElPTlxuXHRcdGJvb2wgaXNQZXJzcGVjdGl2ZSA9IGlzUGVyc3BlY3RpdmVNYXRyaXgoIHByb2plY3Rpb25NYXRyaXggKTtcblx0XHRpZiAoIGlzUGVyc3BlY3RpdmUgKSBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcblx0I2VuZGlmXG5cdHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gKCBwb3NpdGlvbi54eSAtICggY2VudGVyIC0gdmVjMiggMC41ICkgKSApICogc2NhbGU7XG5cdHZlYzIgcm90YXRlZFBvc2l0aW9uO1xuXHRyb3RhdGVkUG9zaXRpb24ueCA9IGNvcyggcm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG5cdHJvdGF0ZWRQb3NpdGlvbi55ID0gc2luKCByb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnggKyBjb3MoIHJvdGF0aW9uICkgKiBhbGlnbmVkUG9zaXRpb24ueTtcblx0bXZQb3NpdGlvbi54eSArPSByb3RhdGVkUG9zaXRpb247XG5cdGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG12UG9zaXRpb247XG5cdCNpbmNsdWRlIDxsb2dkZXB0aGJ1Zl92ZXJ0ZXg+XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfdmVydGV4PlxuXHQjaW5jbHVkZSA8Zm9nX3ZlcnRleD5cbn0iLHNwcml0ZV9mcmFnOiJ1bmlmb3JtIHZlYzMgZGlmZnVzZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiNpbmNsdWRlIDxjb21tb24+XG4jaW5jbHVkZSA8dXZfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxtYXBfcGFyc19mcmFnbWVudD5cbiNpbmNsdWRlIDxhbHBoYW1hcF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGFscGhhdGVzdF9wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGZvZ19wYXJzX2ZyYWdtZW50PlxuI2luY2x1ZGUgPGxvZ2RlcHRoYnVmX3BhcnNfZnJhZ21lbnQ+XG4jaW5jbHVkZSA8Y2xpcHBpbmdfcGxhbmVzX3BhcnNfZnJhZ21lbnQ+XG52b2lkIG1haW4oKSB7XG5cdCNpbmNsdWRlIDxjbGlwcGluZ19wbGFuZXNfZnJhZ21lbnQ+XG5cdHZlYzMgb3V0Z29pbmdMaWdodCA9IHZlYzMoIDAuMCApO1xuXHR2ZWM0IGRpZmZ1c2VDb2xvciA9IHZlYzQoIGRpZmZ1c2UsIG9wYWNpdHkgKTtcblx0I2luY2x1ZGUgPGxvZ2RlcHRoYnVmX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8bWFwX2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8YWxwaGFtYXBfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxhbHBoYXRlc3RfZnJhZ21lbnQ+XG5cdG91dGdvaW5nTGlnaHQgPSBkaWZmdXNlQ29sb3IucmdiO1xuXHQjaW5jbHVkZSA8b3V0cHV0X2ZyYWdtZW50PlxuXHQjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxlbmNvZGluZ3NfZnJhZ21lbnQ+XG5cdCNpbmNsdWRlIDxmb2dfZnJhZ21lbnQ+XG59In0sQnQ9e2NvbW1vbjp7ZGlmZnVzZTp7dmFsdWU6bmV3IHZuKDE2Nzc3MjE1KX0sb3BhY2l0eTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IEpvfSx1djJUcmFuc2Zvcm06e3ZhbHVlOm5ldyBKb30sYWxwaGFNYXA6e3ZhbHVlOm51bGx9LGFscGhhVGVzdDp7dmFsdWU6MH19LHNwZWN1bGFybWFwOntzcGVjdWxhck1hcDp7dmFsdWU6bnVsbH19LGVudm1hcDp7ZW52TWFwOnt2YWx1ZTpudWxsfSxmbGlwRW52TWFwOnt2YWx1ZTotMX0scmVmbGVjdGl2aXR5Ont2YWx1ZToxfSxpb3I6e3ZhbHVlOjEuNX0scmVmcmFjdGlvblJhdGlvOnt2YWx1ZTouOTh9fSxhb21hcDp7YW9NYXA6e3ZhbHVlOm51bGx9LGFvTWFwSW50ZW5zaXR5Ont2YWx1ZToxfX0sbGlnaHRtYXA6e2xpZ2h0TWFwOnt2YWx1ZTpudWxsfSxsaWdodE1hcEludGVuc2l0eTp7dmFsdWU6MX19LGVtaXNzaXZlbWFwOntlbWlzc2l2ZU1hcDp7dmFsdWU6bnVsbH19LGJ1bXBtYXA6e2J1bXBNYXA6e3ZhbHVlOm51bGx9LGJ1bXBTY2FsZTp7dmFsdWU6MX19LG5vcm1hbG1hcDp7bm9ybWFsTWFwOnt2YWx1ZTpudWxsfSxub3JtYWxTY2FsZTp7dmFsdWU6bmV3IGF0KDEsMSl9fSxkaXNwbGFjZW1lbnRtYXA6e2Rpc3BsYWNlbWVudE1hcDp7dmFsdWU6bnVsbH0sZGlzcGxhY2VtZW50U2NhbGU6e3ZhbHVlOjF9LGRpc3BsYWNlbWVudEJpYXM6e3ZhbHVlOjB9fSxyb3VnaG5lc3NtYXA6e3JvdWdobmVzc01hcDp7dmFsdWU6bnVsbH19LG1ldGFsbmVzc21hcDp7bWV0YWxuZXNzTWFwOnt2YWx1ZTpudWxsfX0sZ3JhZGllbnRtYXA6e2dyYWRpZW50TWFwOnt2YWx1ZTpudWxsfX0sZm9nOntmb2dEZW5zaXR5Ont2YWx1ZToyNWUtNX0sZm9nTmVhcjp7dmFsdWU6MX0sZm9nRmFyOnt2YWx1ZToyZTN9LGZvZ0NvbG9yOnt2YWx1ZTpuZXcgdm4oMTY3NzcyMTUpfX0sbGlnaHRzOnthbWJpZW50TGlnaHRDb2xvcjp7dmFsdWU6W119LGxpZ2h0UHJvYmU6e3ZhbHVlOltdfSxkaXJlY3Rpb25hbExpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7ZGlyZWN0aW9uOnt9LGNvbG9yOnt9fX0sZGlyZWN0aW9uYWxMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LGRpcmVjdGlvbmFsU2hhZG93TWFwOnt2YWx1ZTpbXX0sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxzcG90TGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntjb2xvcjp7fSxwb3NpdGlvbjp7fSxkaXJlY3Rpb246e30sZGlzdGFuY2U6e30sY29uZUNvczp7fSxwZW51bWJyYUNvczp7fSxkZWNheTp7fX19LHNwb3RMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fX19LHNwb3RTaGFkb3dNYXA6e3ZhbHVlOltdfSxzcG90U2hhZG93TWF0cml4Ont2YWx1ZTpbXX0scG9pbnRMaWdodHM6e3ZhbHVlOltdLHByb3BlcnRpZXM6e2NvbG9yOnt9LHBvc2l0aW9uOnt9LGRlY2F5Ont9LGRpc3RhbmNlOnt9fX0scG9pbnRMaWdodFNoYWRvd3M6e3ZhbHVlOltdLHByb3BlcnRpZXM6e3NoYWRvd0JpYXM6e30sc2hhZG93Tm9ybWFsQmlhczp7fSxzaGFkb3dSYWRpdXM6e30sc2hhZG93TWFwU2l6ZTp7fSxzaGFkb3dDYW1lcmFOZWFyOnt9LHNoYWRvd0NhbWVyYUZhcjp7fX19LHBvaW50U2hhZG93TWFwOnt2YWx1ZTpbXX0scG9pbnRTaGFkb3dNYXRyaXg6e3ZhbHVlOltdfSxoZW1pc3BoZXJlTGlnaHRzOnt2YWx1ZTpbXSxwcm9wZXJ0aWVzOntkaXJlY3Rpb246e30sc2t5Q29sb3I6e30sZ3JvdW5kQ29sb3I6e319fSxyZWN0QXJlYUxpZ2h0czp7dmFsdWU6W10scHJvcGVydGllczp7Y29sb3I6e30scG9zaXRpb246e30sd2lkdGg6e30saGVpZ2h0Ont9fX0sbHRjXzE6e3ZhbHVlOm51bGx9LGx0Y18yOnt2YWx1ZTpudWxsfX0scG9pbnRzOntkaWZmdXNlOnt2YWx1ZTpuZXcgdm4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxzaXplOnt2YWx1ZToxfSxzY2FsZTp7dmFsdWU6MX0sbWFwOnt2YWx1ZTpudWxsfSxhbHBoYU1hcDp7dmFsdWU6bnVsbH0sYWxwaGFUZXN0Ont2YWx1ZTowfSx1dlRyYW5zZm9ybTp7dmFsdWU6bmV3IEpvfX0sc3ByaXRlOntkaWZmdXNlOnt2YWx1ZTpuZXcgdm4oMTY3NzcyMTUpfSxvcGFjaXR5Ont2YWx1ZToxfSxjZW50ZXI6e3ZhbHVlOm5ldyBhdCguNSwuNSl9LHJvdGF0aW9uOnt2YWx1ZTowfSxtYXA6e3ZhbHVlOm51bGx9LGFscGhhTWFwOnt2YWx1ZTpudWxsfSxhbHBoYVRlc3Q6e3ZhbHVlOjB9LHV2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgSm99fX0sU2Q9e2Jhc2ljOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LnNwZWN1bGFybWFwLEJ0LmVudm1hcCxCdC5hb21hcCxCdC5saWdodG1hcCxCdC5mb2ddKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaGJhc2ljX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RGkubWVzaGJhc2ljX2ZyYWd9LGxhbWJlcnQ6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuc3BlY3VsYXJtYXAsQnQuZW52bWFwLEJ0LmFvbWFwLEJ0LmxpZ2h0bWFwLEJ0LmVtaXNzaXZlbWFwLEJ0LmZvZyxCdC5saWdodHMse2VtaXNzaXZlOnt2YWx1ZTpuZXcgdm4oMCl9fV0pLHZlcnRleFNoYWRlcjpEaS5tZXNobGFtYmVydF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hsYW1iZXJ0X2ZyYWd9LHBob25nOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LnNwZWN1bGFybWFwLEJ0LmVudm1hcCxCdC5hb21hcCxCdC5saWdodG1hcCxCdC5lbWlzc2l2ZW1hcCxCdC5idW1wbWFwLEJ0Lm5vcm1hbG1hcCxCdC5kaXNwbGFjZW1lbnRtYXAsQnQuZm9nLEJ0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyB2bigwKX0sc3BlY3VsYXI6e3ZhbHVlOm5ldyB2bigxMTE4NDgxKX0sc2hpbmluZXNzOnt2YWx1ZTozMH19XSksdmVydGV4U2hhZGVyOkRpLm1lc2hwaG9uZ192ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hwaG9uZ19mcmFnfSxzdGFuZGFyZDp7dW5pZm9ybXM6anMoW0J0LmNvbW1vbixCdC5lbnZtYXAsQnQuYW9tYXAsQnQubGlnaHRtYXAsQnQuZW1pc3NpdmVtYXAsQnQuYnVtcG1hcCxCdC5ub3JtYWxtYXAsQnQuZGlzcGxhY2VtZW50bWFwLEJ0LnJvdWdobmVzc21hcCxCdC5tZXRhbG5lc3NtYXAsQnQuZm9nLEJ0LmxpZ2h0cyx7ZW1pc3NpdmU6e3ZhbHVlOm5ldyB2bigwKX0scm91Z2huZXNzOnt2YWx1ZToxfSxtZXRhbG5lc3M6e3ZhbHVlOjB9LGVudk1hcEludGVuc2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF9mcmFnfSx0b29uOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LmFvbWFwLEJ0LmxpZ2h0bWFwLEJ0LmVtaXNzaXZlbWFwLEJ0LmJ1bXBtYXAsQnQubm9ybWFsbWFwLEJ0LmRpc3BsYWNlbWVudG1hcCxCdC5ncmFkaWVudG1hcCxCdC5mb2csQnQubGlnaHRzLHtlbWlzc2l2ZTp7dmFsdWU6bmV3IHZuKDApfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaHRvb25fdmVydCxmcmFnbWVudFNoYWRlcjpEaS5tZXNodG9vbl9mcmFnfSxtYXRjYXA6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuYnVtcG1hcCxCdC5ub3JtYWxtYXAsQnQuZGlzcGxhY2VtZW50bWFwLEJ0LmZvZyx7bWF0Y2FwOnt2YWx1ZTpudWxsfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaG1hdGNhcF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2htYXRjYXBfZnJhZ30scG9pbnRzOnt1bmlmb3JtczpqcyhbQnQucG9pbnRzLEJ0LmZvZ10pLHZlcnRleFNoYWRlcjpEaS5wb2ludHNfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5wb2ludHNfZnJhZ30sZGFzaGVkOnt1bmlmb3JtczpqcyhbQnQuY29tbW9uLEJ0LmZvZyx7c2NhbGU6e3ZhbHVlOjF9LGRhc2hTaXplOnt2YWx1ZToxfSx0b3RhbFNpemU6e3ZhbHVlOjJ9fV0pLHZlcnRleFNoYWRlcjpEaS5saW5lZGFzaGVkX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RGkubGluZWRhc2hlZF9mcmFnfSxkZXB0aDp7dW5pZm9ybXM6anMoW0J0LmNvbW1vbixCdC5kaXNwbGFjZW1lbnRtYXBdKSx2ZXJ0ZXhTaGFkZXI6RGkuZGVwdGhfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5kZXB0aF9mcmFnfSxub3JtYWw6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuYnVtcG1hcCxCdC5ub3JtYWxtYXAsQnQuZGlzcGxhY2VtZW50bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkubWVzaG5vcm1hbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hub3JtYWxfZnJhZ30sc3ByaXRlOnt1bmlmb3JtczpqcyhbQnQuc3ByaXRlLEJ0LmZvZ10pLHZlcnRleFNoYWRlcjpEaS5zcHJpdGVfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5zcHJpdGVfZnJhZ30sYmFja2dyb3VuZDp7dW5pZm9ybXM6e3V2VHJhbnNmb3JtOnt2YWx1ZTpuZXcgSm99LHQyRDp7dmFsdWU6bnVsbH19LHZlcnRleFNoYWRlcjpEaS5iYWNrZ3JvdW5kX3ZlcnQsZnJhZ21lbnRTaGFkZXI6RGkuYmFja2dyb3VuZF9mcmFnfSxjdWJlOnt1bmlmb3JtczpqcyhbQnQuZW52bWFwLHtvcGFjaXR5Ont2YWx1ZToxfX1dKSx2ZXJ0ZXhTaGFkZXI6RGkuY3ViZV92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLmN1YmVfZnJhZ30sZXF1aXJlY3Q6e3VuaWZvcm1zOnt0RXF1aXJlY3Q6e3ZhbHVlOm51bGx9fSx2ZXJ0ZXhTaGFkZXI6RGkuZXF1aXJlY3RfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5lcXVpcmVjdF9mcmFnfSxkaXN0YW5jZVJHQkE6e3VuaWZvcm1zOmpzKFtCdC5jb21tb24sQnQuZGlzcGxhY2VtZW50bWFwLHtyZWZlcmVuY2VQb3NpdGlvbjp7dmFsdWU6bmV3IGllfSxuZWFyRGlzdGFuY2U6e3ZhbHVlOjF9LGZhckRpc3RhbmNlOnt2YWx1ZToxZTN9fV0pLHZlcnRleFNoYWRlcjpEaS5kaXN0YW5jZVJHQkFfdmVydCxmcmFnbWVudFNoYWRlcjpEaS5kaXN0YW5jZVJHQkFfZnJhZ30sc2hhZG93Ont1bmlmb3JtczpqcyhbQnQubGlnaHRzLEJ0LmZvZyx7Y29sb3I6e3ZhbHVlOm5ldyB2bigwKX0sb3BhY2l0eTp7dmFsdWU6MX19XSksdmVydGV4U2hhZGVyOkRpLnNoYWRvd192ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLnNoYWRvd19mcmFnfX07ZnVuY3Rpb24gSVdlKG4sdCxlLGkscixvKXtsZXQgbCxjLHM9bmV3IHZuKDApLGE9ITA9PT1yPzA6MSx1PW51bGwsZD0wLHA9bnVsbDtmdW5jdGlvbiBmKG0seCl7ZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKG0ucixtLmcsbS5iLHgsbyl9cmV0dXJue2dldENsZWFyQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gc30sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbihtLHg9MSl7cy5zZXQobSksYT14LGYocyxhKX0sZ2V0Q2xlYXJBbHBoYTpmdW5jdGlvbigpe3JldHVybiBhfSxzZXRDbGVhckFscGhhOmZ1bmN0aW9uKG0pe2E9bSxmKHMsYSl9LHJlbmRlcjpmdW5jdGlvbihtLHgpe2xldCBnPSExLGI9ITA9PT14LmlzU2NlbmU/eC5iYWNrZ3JvdW5kOm51bGw7YiYmYi5pc1RleHR1cmUmJihiPXQuZ2V0KGIpKTtsZXQgRD1uLnhyLFQ9RC5nZXRTZXNzaW9uJiZELmdldFNlc3Npb24oKTtUJiYiYWRkaXRpdmUiPT09VC5lbnZpcm9ubWVudEJsZW5kTW9kZSYmKGI9bnVsbCksbnVsbD09PWI/ZihzLGEpOmImJmIuaXNDb2xvciYmKGYoYiwxKSxnPSEwKSwobi5hdXRvQ2xlYXJ8fGcpJiZuLmNsZWFyKG4uYXV0b0NsZWFyQ29sb3Isbi5hdXRvQ2xlYXJEZXB0aCxuLmF1dG9DbGVhclN0ZW5jaWwpLGImJihiLmlzQ3ViZVRleHR1cmV8fDMwNj09PWIubWFwcGluZyk/KHZvaWQgMD09PWMmJihjPW5ldyBWbyhuZXcgV2coMSwxLDEpLG5ldyBEcCh7bmFtZToiQmFja2dyb3VuZEN1YmVNYXRlcmlhbCIsdW5pZm9ybXM6ZmIoU2QuY3ViZS51bmlmb3JtcyksdmVydGV4U2hhZGVyOlNkLmN1YmUudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlNkLmN1YmUuZnJhZ21lbnRTaGFkZXIsc2lkZToxLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxjLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksYy5nZW9tZXRyeS5kZWxldGVBdHRyaWJ1dGUoInV2IiksYy5vbkJlZm9yZVJlbmRlcj1mdW5jdGlvbihrLFoseil7dGhpcy5tYXRyaXhXb3JsZC5jb3B5UG9zaXRpb24oei5tYXRyaXhXb3JsZCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLm1hdGVyaWFsLCJlbnZNYXAiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmlmb3Jtcy5lbnZNYXAudmFsdWV9fSksaS51cGRhdGUoYykpLGMubWF0ZXJpYWwudW5pZm9ybXMuZW52TWFwLnZhbHVlPWIsYy5tYXRlcmlhbC51bmlmb3Jtcy5mbGlwRW52TWFwLnZhbHVlPWIuaXNDdWJlVGV4dHVyZSYmITE9PT1iLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZT8tMToxLCh1IT09Ynx8ZCE9PWIudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYoYy5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PWIsZD1iLnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQoYyxjLmdlb21ldHJ5LGMubWF0ZXJpYWwsMCwwLG51bGwpKTpiJiZiLmlzVGV4dHVyZSYmKHZvaWQgMD09PWwmJihsPW5ldyBWbyhuZXcgWlMoMiwyKSxuZXcgRHAoe25hbWU6IkJhY2tncm91bmRNYXRlcmlhbCIsdW5pZm9ybXM6ZmIoU2QuYmFja2dyb3VuZC51bmlmb3JtcyksdmVydGV4U2hhZGVyOlNkLmJhY2tncm91bmQudmVydGV4U2hhZGVyLGZyYWdtZW50U2hhZGVyOlNkLmJhY2tncm91bmQuZnJhZ21lbnRTaGFkZXIsc2lkZTowLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLGZvZzohMX0pKSxsLmdlb21ldHJ5LmRlbGV0ZUF0dHJpYnV0ZSgibm9ybWFsIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwubWF0ZXJpYWwsIm1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuaWZvcm1zLnQyRC52YWx1ZX19KSxpLnVwZGF0ZShsKSksbC5tYXRlcmlhbC51bmlmb3Jtcy50MkQudmFsdWU9YiwhMD09PWIubWF0cml4QXV0b1VwZGF0ZSYmYi51cGRhdGVNYXRyaXgoKSxsLm1hdGVyaWFsLnVuaWZvcm1zLnV2VHJhbnNmb3JtLnZhbHVlLmNvcHkoYi5tYXRyaXgpLCh1IT09Ynx8ZCE9PWIudmVyc2lvbnx8cCE9PW4udG9uZU1hcHBpbmcpJiYobC5tYXRlcmlhbC5uZWVkc1VwZGF0ZT0hMCx1PWIsZD1iLnZlcnNpb24scD1uLnRvbmVNYXBwaW5nKSxtLnVuc2hpZnQobCxsLmdlb21ldHJ5LGwubWF0ZXJpYWwsMCwwLG51bGwpKX19fWZ1bmN0aW9uIFBXZShuLHQsZSxpKXtsZXQgcj1uLmdldFBhcmFtZXRlcigzNDkyMSksbz1pLmlzV2ViR0wyP251bGw6dC5nZXQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iikscz1pLmlzV2ViR0wyfHxudWxsIT09byxhPXt9LGw9bShudWxsKSxjPWw7ZnVuY3Rpb24gcChxKXtyZXR1cm4gaS5pc1dlYkdMMj9uLmJpbmRWZXJ0ZXhBcnJheShxKTpvLmJpbmRWZXJ0ZXhBcnJheU9FUyhxKX1mdW5jdGlvbiBoKHEpe3JldHVybiBpLmlzV2ViR0wyP24uZGVsZXRlVmVydGV4QXJyYXkocSk6by5kZWxldGVWZXJ0ZXhBcnJheU9FUyhxKX1mdW5jdGlvbiBtKHEpe2xldCBLPVtdLGRlPVtdLFk9W107Zm9yKGxldCBhZT0wO2FlPHI7YWUrKylLW2FlXT0wLGRlW2FlXT0wLFlbYWVdPTA7cmV0dXJue2dlb21ldHJ5Om51bGwscHJvZ3JhbTpudWxsLHdpcmVmcmFtZTohMSxuZXdBdHRyaWJ1dGVzOkssZW5hYmxlZEF0dHJpYnV0ZXM6ZGUsYXR0cmlidXRlRGl2aXNvcnM6WSxvYmplY3Q6cSxhdHRyaWJ1dGVzOnt9LGluZGV4Om51bGx9fWZ1bmN0aW9uIGIoKXtsZXQgcT1jLm5ld0F0dHJpYnV0ZXM7Zm9yKGxldCBLPTAsZGU9cS5sZW5ndGg7SzxkZTtLKyspcVtLXT0wfWZ1bmN0aW9uIEQocSl7VChxLDApfWZ1bmN0aW9uIFQocSxLKXtsZXQgWT1jLmVuYWJsZWRBdHRyaWJ1dGVzLGFlPWMuYXR0cmlidXRlRGl2aXNvcnM7Yy5uZXdBdHRyaWJ1dGVzW3FdPTEsMD09PVlbcV0mJihuLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHEpLFlbcV09MSksYWVbcV0hPT1LJiYoKGkuaXNXZWJHTDI/bjp0LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKVtpLmlzV2ViR0wyPyJ2ZXJ0ZXhBdHRyaWJEaXZpc29yIjoidmVydGV4QXR0cmliRGl2aXNvckFOR0xFIl0ocSxLKSxhZVtxXT1LKX1mdW5jdGlvbiBrKCl7bGV0IHE9Yy5uZXdBdHRyaWJ1dGVzLEs9Yy5lbmFibGVkQXR0cmlidXRlcztmb3IobGV0IGRlPTAsWT1LLmxlbmd0aDtkZTxZO2RlKyspS1tkZV0hPT1xW2RlXSYmKG4uZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGRlKSxLW2RlXT0wKX1mdW5jdGlvbiBaKHEsSyxkZSxZLGFlLGxlKXshMCE9PWkuaXNXZWJHTDJ8fDUxMjQhPT1kZSYmNTEyNSE9PWRlP24udmVydGV4QXR0cmliUG9pbnRlcihxLEssZGUsWSxhZSxsZSk6bi52ZXJ0ZXhBdHRyaWJJUG9pbnRlcihxLEssZGUsYWUsbGUpfWZ1bmN0aW9uIHcoKXtGKCksYyE9PWwmJihjPWwscChjLm9iamVjdCkpfWZ1bmN0aW9uIEYoKXtsLmdlb21ldHJ5PW51bGwsbC5wcm9ncmFtPW51bGwsbC53aXJlZnJhbWU9ITF9cmV0dXJue3NldHVwOmZ1bmN0aW9uKHEsSyxkZSxZLGFlKXtsZXQgbGU9ITE7aWYocyl7bGV0IEllPWZ1bmN0aW9uKHEsSyxkZSl7bGV0IFk9ITA9PT1kZS53aXJlZnJhbWUsYWU9YVtxLmlkXTt2b2lkIDA9PT1hZSYmKGFlPXt9LGFbcS5pZF09YWUpO2xldCBsZT1hZVtLLmlkXTt2b2lkIDA9PT1sZSYmKGxlPXt9LGFlW0suaWRdPWxlKTtsZXQgSWU9bGVbWV07cmV0dXJuIHZvaWQgMD09PUllJiYoSWU9bShpLmlzV2ViR0wyP24uY3JlYXRlVmVydGV4QXJyYXkoKTpvLmNyZWF0ZVZlcnRleEFycmF5T0VTKCkpLGxlW1ldPUllKSxJZX0oWSxkZSxLKTtjIT09SWUmJihjPUllLHAoYy5vYmplY3QpKSxsZT1mdW5jdGlvbihxLEspe2xldCBkZT1jLmF0dHJpYnV0ZXMsWT1xLmF0dHJpYnV0ZXMsYWU9MDtmb3IobGV0IGxlIGluIFkpe2xldCBJZT1kZVtsZV0sdmU9WVtsZV07aWYodm9pZCAwPT09SWV8fEllLmF0dHJpYnV0ZSE9PXZlfHxJZS5kYXRhIT09dmUuZGF0YSlyZXR1cm4hMDthZSsrfXJldHVybiBjLmF0dHJpYnV0ZXNOdW0hPT1hZXx8Yy5pbmRleCE9PUt9KFksYWUpLGxlJiZmdW5jdGlvbihxLEspe2xldCBkZT17fSxZPXEuYXR0cmlidXRlcyxhZT0wO2ZvcihsZXQgbGUgaW4gWSl7bGV0IEllPVlbbGVdLHZlPXt9O3ZlLmF0dHJpYnV0ZT1JZSxJZS5kYXRhJiYodmUuZGF0YT1JZS5kYXRhKSxkZVtsZV09dmUsYWUrK31jLmF0dHJpYnV0ZXM9ZGUsYy5hdHRyaWJ1dGVzTnVtPWFlLGMuaW5kZXg9S30oWSxhZSl9ZWxzZXtsZXQgSWU9ITA9PT1LLndpcmVmcmFtZTsoYy5nZW9tZXRyeSE9PVkuaWR8fGMucHJvZ3JhbSE9PWRlLmlkfHxjLndpcmVmcmFtZSE9PUllKSYmKGMuZ2VvbWV0cnk9WS5pZCxjLnByb2dyYW09ZGUuaWQsYy53aXJlZnJhbWU9SWUsbGU9ITApfSEwPT09cS5pc0luc3RhbmNlZE1lc2gmJihsZT0hMCksbnVsbCE9PWFlJiZlLnVwZGF0ZShhZSwzNDk2MyksbGUmJihmdW5jdGlvbihxLEssZGUsWSl7aWYoITE9PT1pLmlzV2ViR0wyJiYocS5pc0luc3RhbmNlZE1lc2h8fFkuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSkmJm51bGw9PT10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXJldHVybjtiKCk7bGV0IGFlPVkuYXR0cmlidXRlcyxsZT1kZS5nZXRBdHRyaWJ1dGVzKCksSWU9Sy5kZWZhdWx0QXR0cmlidXRlVmFsdWVzO2ZvcihsZXQgdmUgaW4gbGUpe2xldCBEZT1sZVt2ZV07aWYoRGUubG9jYXRpb24+PTApe2xldCBudD1hZVt2ZV07aWYodm9pZCAwPT09bnQmJigiaW5zdGFuY2VNYXRyaXgiPT09dmUmJnEuaW5zdGFuY2VNYXRyaXgmJihudD1xLmluc3RhbmNlTWF0cml4KSwiaW5zdGFuY2VDb2xvciI9PT12ZSYmcS5pbnN0YW5jZUNvbG9yJiYobnQ9cS5pbnN0YW5jZUNvbG9yKSksdm9pZCAwIT09bnQpe2xldCBndD1udC5ub3JtYWxpemVkLFVlPW50Lml0ZW1TaXplLEFlPWUuZ2V0KG50KTtpZih2b2lkIDA9PT1BZSljb250aW51ZTtsZXQgdG49QWUuYnVmZmVyLHB0PUFlLnR5cGUsd3Q9QWUuYnl0ZXNQZXJFbGVtZW50O2lmKG50LmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGUpe2xldCBUZT1udC5kYXRhLHh0PVRlLnN0cmlkZSxtdD1udC5vZmZzZXQ7aWYoVGUmJlRlLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXIpe2ZvcihsZXQgY2U9MDtjZTxEZS5sb2NhdGlvblNpemU7Y2UrKylUKERlLmxvY2F0aW9uK2NlLFRlLm1lc2hQZXJBdHRyaWJ1dGUpOyEwIT09cS5pc0luc3RhbmNlZE1lc2gmJnZvaWQgMD09PVkuX21heEluc3RhbmNlQ291bnQmJihZLl9tYXhJbnN0YW5jZUNvdW50PVRlLm1lc2hQZXJBdHRyaWJ1dGUqVGUuY291bnQpfWVsc2UgZm9yKGxldCBjZT0wO2NlPERlLmxvY2F0aW9uU2l6ZTtjZSsrKUQoRGUubG9jYXRpb24rY2UpO24uYmluZEJ1ZmZlcigzNDk2Mix0bik7Zm9yKGxldCBjZT0wO2NlPERlLmxvY2F0aW9uU2l6ZTtjZSsrKVooRGUubG9jYXRpb24rY2UsVWUvRGUubG9jYXRpb25TaXplLHB0LGd0LHh0Knd0LChtdCtVZS9EZS5sb2NhdGlvblNpemUqY2UpKnd0KX1lbHNle2lmKG50LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlKXtmb3IobGV0IFRlPTA7VGU8RGUubG9jYXRpb25TaXplO1RlKyspVChEZS5sb2NhdGlvbitUZSxudC5tZXNoUGVyQXR0cmlidXRlKTshMCE9PXEuaXNJbnN0YW5jZWRNZXNoJiZ2b2lkIDA9PT1ZLl9tYXhJbnN0YW5jZUNvdW50JiYoWS5fbWF4SW5zdGFuY2VDb3VudD1udC5tZXNoUGVyQXR0cmlidXRlKm50LmNvdW50KX1lbHNlIGZvcihsZXQgVGU9MDtUZTxEZS5sb2NhdGlvblNpemU7VGUrKylEKERlLmxvY2F0aW9uK1RlKTtuLmJpbmRCdWZmZXIoMzQ5NjIsdG4pO2ZvcihsZXQgVGU9MDtUZTxEZS5sb2NhdGlvblNpemU7VGUrKylaKERlLmxvY2F0aW9uK1RlLFVlL0RlLmxvY2F0aW9uU2l6ZSxwdCxndCxVZSp3dCxVZS9EZS5sb2NhdGlvblNpemUqVGUqd3QpfX1lbHNlIGlmKHZvaWQgMCE9PUllKXtsZXQgZ3Q9SWVbdmVdO2lmKHZvaWQgMCE9PWd0KXN3aXRjaChndC5sZW5ndGgpe2Nhc2UgMjpuLnZlcnRleEF0dHJpYjJmdihEZS5sb2NhdGlvbixndCk7YnJlYWs7Y2FzZSAzOm4udmVydGV4QXR0cmliM2Z2KERlLmxvY2F0aW9uLGd0KTticmVhaztjYXNlIDQ6bi52ZXJ0ZXhBdHRyaWI0ZnYoRGUubG9jYXRpb24sZ3QpO2JyZWFrO2RlZmF1bHQ6bi52ZXJ0ZXhBdHRyaWIxZnYoRGUubG9jYXRpb24sZ3QpfX19fWsoKX0ocSxLLGRlLFkpLG51bGwhPT1hZSYmbi5iaW5kQnVmZmVyKDM0OTYzLGUuZ2V0KGFlKS5idWZmZXIpKX0scmVzZXQ6dyxyZXNldERlZmF1bHRTdGF0ZTpGLGRpc3Bvc2U6ZnVuY3Rpb24oKXt3KCk7Zm9yKGxldCBxIGluIGEpe2xldCBLPWFbcV07Zm9yKGxldCBkZSBpbiBLKXtsZXQgWT1LW2RlXTtmb3IobGV0IGFlIGluIFkpaChZW2FlXS5vYmplY3QpLGRlbGV0ZSBZW2FlXTtkZWxldGUgS1tkZV19ZGVsZXRlIGFbcV19fSxyZWxlYXNlU3RhdGVzT2ZHZW9tZXRyeTpmdW5jdGlvbihxKXtpZih2b2lkIDA9PT1hW3EuaWRdKXJldHVybjtsZXQgSz1hW3EuaWRdO2ZvcihsZXQgZGUgaW4gSyl7bGV0IFk9S1tkZV07Zm9yKGxldCBhZSBpbiBZKWgoWVthZV0ub2JqZWN0KSxkZWxldGUgWVthZV07ZGVsZXRlIEtbZGVdfWRlbGV0ZSBhW3EuaWRdfSxyZWxlYXNlU3RhdGVzT2ZQcm9ncmFtOmZ1bmN0aW9uKHEpe2ZvcihsZXQgSyBpbiBhKXtsZXQgZGU9YVtLXTtpZih2b2lkIDA9PT1kZVtxLmlkXSljb250aW51ZTtsZXQgWT1kZVtxLmlkXTtmb3IobGV0IGFlIGluIFkpaChZW2FlXS5vYmplY3QpLGRlbGV0ZSBZW2FlXTtkZWxldGUgZGVbcS5pZF19fSxpbml0QXR0cmlidXRlczpiLGVuYWJsZUF0dHJpYnV0ZTpELGRpc2FibGVVbnVzZWRBdHRyaWJ1dGVzOmt9fWZ1bmN0aW9uIFJXZShuLHQsZSxpKXtsZXQgbyxyPWkuaXNXZWJHTDI7dGhpcy5zZXRNb2RlPWZ1bmN0aW9uKGMpe289Y30sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oYyx1KXtuLmRyYXdBcnJheXMobyxjLHUpLGUudXBkYXRlKHUsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24oYyx1LGQpe2lmKDA9PT1kKXJldHVybjtsZXQgcCxoO2lmKHIpcD1uLGg9ImRyYXdBcnJheXNJbnN0YW5jZWQiO2Vsc2UgaWYocD10LmdldCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpLGg9ImRyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsbnVsbD09PXApcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xCdWZmZXJSZW5kZXJlcjogdXNpbmcgVEhSRUUuSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkgYnV0IGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgZXh0ZW5zaW9uIEFOR0xFX2luc3RhbmNlZF9hcnJheXMuIik7cFtoXShvLGMsdSxkKSxlLnVwZGF0ZSh1LG8sZCl9fWZ1bmN0aW9uIE9XZShuLHQsZSl7bGV0IGk7ZnVuY3Rpb24gbyh6KXtpZigiaGlnaHAiPT09eil7aWYobi5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoMzU2MzMsMzYzMzgpLnByZWNpc2lvbj4wJiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMiwzNjMzOCkucHJlY2lzaW9uPjApcmV0dXJuImhpZ2hwIjt6PSJtZWRpdW1wIn1yZXR1cm4ibWVkaXVtcCI9PT16JiZuLmdldFNoYWRlclByZWNpc2lvbkZvcm1hdCgzNTYzMywzNjMzNykucHJlY2lzaW9uPjAmJm4uZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KDM1NjMyLDM2MzM3KS5wcmVjaXNpb24+MD8ibWVkaXVtcCI6Imxvd3AifWxldCBzPXR5cGVvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0PCJ1IiYmbiBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHR8fHR5cGVvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dDwidSImJm4gaW5zdGFuY2VvZiBXZWJHTDJDb21wdXRlUmVuZGVyaW5nQ29udGV4dCxhPXZvaWQgMCE9PWUucHJlY2lzaW9uP2UucHJlY2lzaW9uOiJoaWdocCIsbD1vKGEpO2whPT1hJiYoY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiIsYSwibm90IHN1cHBvcnRlZCwgdXNpbmciLGwsImluc3RlYWQuIiksYT1sKTtsZXQgYz1zfHx0LmhhcygiV0VCR0xfZHJhd19idWZmZXJzIiksdT0hMD09PWUubG9nYXJpdGhtaWNEZXB0aEJ1ZmZlcixkPW4uZ2V0UGFyYW1ldGVyKDM0OTMwKSxwPW4uZ2V0UGFyYW1ldGVyKDM1NjYwKSxoPW4uZ2V0UGFyYW1ldGVyKDMzNzkpLGY9bi5nZXRQYXJhbWV0ZXIoMzQwNzYpLG09bi5nZXRQYXJhbWV0ZXIoMzQ5MjEpLHg9bi5nZXRQYXJhbWV0ZXIoMzYzNDcpLGc9bi5nZXRQYXJhbWV0ZXIoMzYzNDgpLGI9bi5nZXRQYXJhbWV0ZXIoMzYzNDkpLEQ9cD4wLFQ9c3x8dC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iik7cmV0dXJue2lzV2ViR0wyOnMsZHJhd0J1ZmZlcnM6YyxnZXRNYXhBbmlzb3Ryb3B5OmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09aSlyZXR1cm4gaTtpZighMD09PXQuaGFzKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSl7bGV0IHo9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2k9bi5nZXRQYXJhbWV0ZXIoei5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpfWVsc2UgaT0wO3JldHVybiBpfSxnZXRNYXhQcmVjaXNpb246byxwcmVjaXNpb246YSxsb2dhcml0aG1pY0RlcHRoQnVmZmVyOnUsbWF4VGV4dHVyZXM6ZCxtYXhWZXJ0ZXhUZXh0dXJlczpwLG1heFRleHR1cmVTaXplOmgsbWF4Q3ViZW1hcFNpemU6ZixtYXhBdHRyaWJ1dGVzOm0sbWF4VmVydGV4VW5pZm9ybXM6eCxtYXhWYXJ5aW5nczpnLG1heEZyYWdtZW50VW5pZm9ybXM6Yix2ZXJ0ZXhUZXh0dXJlczpELGZsb2F0RnJhZ21lbnRUZXh0dXJlczpULGZsb2F0VmVydGV4VGV4dHVyZXM6RCYmVCxtYXhTYW1wbGVzOnM/bi5nZXRQYXJhbWV0ZXIoMzYxODMpOjB9fWZ1bmN0aW9uIGtXZShuKXtsZXQgdD10aGlzLGU9bnVsbCxpPTAscj0hMSxvPSExLHM9bmV3IHV1LGE9bmV3IEpvLGw9e3ZhbHVlOm51bGwsbmVlZHNVcGRhdGU6ITF9O2Z1bmN0aW9uIGMoKXtsLnZhbHVlIT09ZSYmKGwudmFsdWU9ZSxsLm5lZWRzVXBkYXRlPWk+MCksdC5udW1QbGFuZXM9aSx0Lm51bUludGVyc2VjdGlvbj0wfWZ1bmN0aW9uIHUoZCxwLGgsZil7bGV0IG09bnVsbCE9PWQ/ZC5sZW5ndGg6MCx4PW51bGw7aWYoMCE9PW0pe2lmKHg9bC52YWx1ZSwhMCE9PWZ8fG51bGw9PT14KXtsZXQgZz1oKzQqbSxiPXAubWF0cml4V29ybGRJbnZlcnNlO2EuZ2V0Tm9ybWFsTWF0cml4KGIpLChudWxsPT09eHx8eC5sZW5ndGg8ZykmJih4PW5ldyBGbG9hdDMyQXJyYXkoZykpO2ZvcihsZXQgRD0wLFQ9aDtEIT09bTsrK0QsVCs9NClzLmNvcHkoZFtEXSkuYXBwbHlNYXRyaXg0KGIsYSkscy5ub3JtYWwudG9BcnJheSh4LFQpLHhbVCszXT1zLmNvbnN0YW50fWwudmFsdWU9eCxsLm5lZWRzVXBkYXRlPSEwfXJldHVybiB0Lm51bVBsYW5lcz1tLHQubnVtSW50ZXJzZWN0aW9uPTAseH10aGlzLnVuaWZvcm09bCx0aGlzLm51bVBsYW5lcz0wLHRoaXMubnVtSW50ZXJzZWN0aW9uPTAsdGhpcy5pbml0PWZ1bmN0aW9uKGQscCxoKXtsZXQgZj0wIT09ZC5sZW5ndGh8fHB8fDAhPT1pfHxyO3JldHVybiByPXAsZT11KGQsaCwwKSxpPWQubGVuZ3RoLGZ9LHRoaXMuYmVnaW5TaGFkb3dzPWZ1bmN0aW9uKCl7bz0hMCx1KG51bGwpfSx0aGlzLmVuZFNoYWRvd3M9ZnVuY3Rpb24oKXtvPSExLGMoKX0sdGhpcy5zZXRTdGF0ZT1mdW5jdGlvbihkLHAsaCl7bGV0IGY9ZC5jbGlwcGluZ1BsYW5lcyxtPWQuY2xpcEludGVyc2VjdGlvbix4PWQuY2xpcFNoYWRvd3MsZz1uLmdldChkKTtpZighcnx8bnVsbD09PWZ8fDA9PT1mLmxlbmd0aHx8byYmIXgpbz91KG51bGwpOmMoKTtlbHNle2xldCBiPW8/MDppLEQ9NCpiLFQ9Zy5jbGlwcGluZ1N0YXRlfHxudWxsO2wudmFsdWU9VCxUPXUoZixwLEQsaCk7Zm9yKGxldCBrPTA7ayE9PUQ7KytrKVRba109ZVtrXTtnLmNsaXBwaW5nU3RhdGU9VCx0aGlzLm51bUludGVyc2VjdGlvbj1tP3RoaXMubnVtUGxhbmVzOjAsdGhpcy5udW1QbGFuZXMrPWJ9fX1mdW5jdGlvbiBGV2Uobil7bGV0IHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gZShzLGEpe3JldHVybiAzMDM9PT1hP3MubWFwcGluZz0zMDE6MzA0PT09YSYmKHMubWFwcGluZz0zMDIpLHN9ZnVuY3Rpb24gcihzKXtsZXQgYT1zLnRhcmdldDthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLHIpO2xldCBsPXQuZ2V0KGEpO3ZvaWQgMCE9PWwmJih0LmRlbGV0ZShhKSxsLmRpc3Bvc2UoKSl9cmV0dXJue2dldDpmdW5jdGlvbihzKXtpZihzJiZzLmlzVGV4dHVyZSYmITE9PT1zLmlzUmVuZGVyVGFyZ2V0VGV4dHVyZSl7bGV0IGE9cy5tYXBwaW5nO2lmKDMwMz09PWF8fDMwND09PWEpe2lmKHQuaGFzKHMpKXJldHVybiBlKHQuZ2V0KHMpLnRleHR1cmUscy5tYXBwaW5nKTt7bGV0IGw9cy5pbWFnZTtpZihsJiZsLmhlaWdodD4wKXtsZXQgYz1uZXcgY2sobC5oZWlnaHQvMik7cmV0dXJuIGMuZnJvbUVxdWlyZWN0YW5ndWxhclRleHR1cmUobixzKSx0LnNldChzLGMpLHMuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsciksZShjLnRleHR1cmUscy5tYXBwaW5nKX1yZXR1cm4gbnVsbH19fXJldHVybiBzfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcH19fVNkLnBoeXNpY2FsPXt1bmlmb3JtczpqcyhbU2Quc3RhbmRhcmQudW5pZm9ybXMse2NsZWFyY29hdDp7dmFsdWU6MH0sY2xlYXJjb2F0TWFwOnt2YWx1ZTpudWxsfSxjbGVhcmNvYXRSb3VnaG5lc3M6e3ZhbHVlOjB9LGNsZWFyY29hdFJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sY2xlYXJjb2F0Tm9ybWFsU2NhbGU6e3ZhbHVlOm5ldyBhdCgxLDEpfSxjbGVhcmNvYXROb3JtYWxNYXA6e3ZhbHVlOm51bGx9LHNoZWVuOnt2YWx1ZTowfSxzaGVlbkNvbG9yOnt2YWx1ZTpuZXcgdm4oMCl9LHNoZWVuQ29sb3JNYXA6e3ZhbHVlOm51bGx9LHNoZWVuUm91Z2huZXNzOnt2YWx1ZToxfSxzaGVlblJvdWdobmVzc01hcDp7dmFsdWU6bnVsbH0sdHJhbnNtaXNzaW9uOnt2YWx1ZTowfSx0cmFuc21pc3Npb25NYXA6e3ZhbHVlOm51bGx9LHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnt2YWx1ZTpuZXcgYXR9LHRyYW5zbWlzc2lvblNhbXBsZXJNYXA6e3ZhbHVlOm51bGx9LHRoaWNrbmVzczp7dmFsdWU6MH0sdGhpY2tuZXNzTWFwOnt2YWx1ZTpudWxsfSxhdHRlbnVhdGlvbkRpc3RhbmNlOnt2YWx1ZTowfSxhdHRlbnVhdGlvbkNvbG9yOnt2YWx1ZTpuZXcgdm4oMCl9LHNwZWN1bGFySW50ZW5zaXR5Ont2YWx1ZToxfSxzcGVjdWxhckludGVuc2l0eU1hcDp7dmFsdWU6bnVsbH0sc3BlY3VsYXJDb2xvcjp7dmFsdWU6bmV3IHZuKDEsMSwxKX0sc3BlY3VsYXJDb2xvck1hcDp7dmFsdWU6bnVsbH19XSksdmVydGV4U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF92ZXJ0LGZyYWdtZW50U2hhZGVyOkRpLm1lc2hwaHlzaWNhbF9mcmFnfTt2YXIgcWc9Y2xhc3MgZXh0ZW5kcyBRU3tjb25zdHJ1Y3Rvcih0PS0xLGU9MSxpPTEscj0tMSxvPS4xLHM9MmUzKXtzdXBlcigpLHRoaXMudHlwZT0iT3J0aG9ncmFwaGljQ2FtZXJhIix0aGlzLnpvb209MSx0aGlzLnZpZXc9bnVsbCx0aGlzLmxlZnQ9dCx0aGlzLnJpZ2h0PWUsdGhpcy50b3A9aSx0aGlzLmJvdHRvbT1yLHRoaXMubmVhcj1vLHRoaXMuZmFyPXMsdGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksdGhpcy5sZWZ0PXQubGVmdCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy50b3A9dC50b3AsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5uZWFyPXQubmVhcix0aGlzLmZhcj10LmZhcix0aGlzLnpvb209dC56b29tLHRoaXMudmlldz1udWxsPT09dC52aWV3P251bGw6T2JqZWN0LmFzc2lnbih7fSx0LnZpZXcpLHRoaXN9c2V0Vmlld09mZnNldCh0LGUsaSxyLG8scyl7bnVsbD09PXRoaXMudmlldyYmKHRoaXMudmlldz17ZW5hYmxlZDohMCxmdWxsV2lkdGg6MSxmdWxsSGVpZ2h0OjEsb2Zmc2V0WDowLG9mZnNldFk6MCx3aWR0aDoxLGhlaWdodDoxfSksdGhpcy52aWV3LmVuYWJsZWQ9ITAsdGhpcy52aWV3LmZ1bGxXaWR0aD10LHRoaXMudmlldy5mdWxsSGVpZ2h0PWUsdGhpcy52aWV3Lm9mZnNldFg9aSx0aGlzLnZpZXcub2Zmc2V0WT1yLHRoaXMudmlldy53aWR0aD1vLHRoaXMudmlldy5oZWlnaHQ9cyx0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1jbGVhclZpZXdPZmZzZXQoKXtudWxsIT09dGhpcy52aWV3JiYodGhpcy52aWV3LmVuYWJsZWQ9ITEpLHRoaXMudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfXVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKXtsZXQgdD0odGhpcy5yaWdodC10aGlzLmxlZnQpLygyKnRoaXMuem9vbSksZT0odGhpcy50b3AtdGhpcy5ib3R0b20pLygyKnRoaXMuem9vbSksaT0odGhpcy5yaWdodCt0aGlzLmxlZnQpLzIscj0odGhpcy50b3ArdGhpcy5ib3R0b20pLzIsbz1pLXQscz1pK3QsYT1yK2UsbD1yLWU7aWYobnVsbCE9PXRoaXMudmlldyYmdGhpcy52aWV3LmVuYWJsZWQpe2xldCBjPSh0aGlzLnJpZ2h0LXRoaXMubGVmdCkvdGhpcy52aWV3LmZ1bGxXaWR0aC90aGlzLnpvb20sdT0odGhpcy50b3AtdGhpcy5ib3R0b20pL3RoaXMudmlldy5mdWxsSGVpZ2h0L3RoaXMuem9vbTtvKz1jKnRoaXMudmlldy5vZmZzZXRYLHM9bytjKnRoaXMudmlldy53aWR0aCxhLT11KnRoaXMudmlldy5vZmZzZXRZLGw9YS11KnRoaXMudmlldy5oZWlnaHR9dGhpcy5wcm9qZWN0aW9uTWF0cml4Lm1ha2VPcnRob2dyYXBoaWMobyxzLGEsbCx0aGlzLm5lYXIsdGhpcy5mYXIpLHRoaXMucHJvamVjdGlvbk1hdHJpeEludmVyc2UuY29weSh0aGlzLnByb2plY3Rpb25NYXRyaXgpLmludmVydCgpfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0Lnpvb209dGhpcy56b29tLGUub2JqZWN0LmxlZnQ9dGhpcy5sZWZ0LGUub2JqZWN0LnJpZ2h0PXRoaXMucmlnaHQsZS5vYmplY3QudG9wPXRoaXMudG9wLGUub2JqZWN0LmJvdHRvbT10aGlzLmJvdHRvbSxlLm9iamVjdC5uZWFyPXRoaXMubmVhcixlLm9iamVjdC5mYXI9dGhpcy5mYXIsbnVsbCE9PXRoaXMudmlldyYmKGUub2JqZWN0LnZpZXc9T2JqZWN0LmFzc2lnbih7fSx0aGlzLnZpZXcpKSxlfX07cWcucHJvdG90eXBlLmlzT3J0aG9ncmFwaGljQ2FtZXJhPSEwO3ZhciBfYj1jbGFzcyBleHRlbmRzIERwe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudHlwZT0iUmF3U2hhZGVyTWF0ZXJpYWwifX07X2IucHJvdG90eXBlLmlzUmF3U2hhZGVyTWF0ZXJpYWw9ITA7dmFyIHdkPU1hdGgucG93KDIsOCksRmRlPVsuMTI1LC4yMTUsLjM1LC40NDYsLjUyNiwuNTgyXSxOZGU9NStGZGUubGVuZ3RoLFpqPW5ldyBxZyx7X2xvZFBsYW5lczpSUyxfc2l6ZUxvZHM6a3VlLF9zaWdtYXM6SE99PU5XZSgpLEZ1ZT1uZXcgdm4sSmo9bnVsbCxIZz0oMStNYXRoLnNxcnQoNSkpLzIsJHk9MS9IZyxOdWU9W25ldyBpZSgxLDEsMSksbmV3IGllKC0xLDEsMSksbmV3IGllKDEsMSwtMSksbmV3IGllKC0xLDEsLTEpLG5ldyBpZSgwLEhnLCR5KSxuZXcgaWUoMCxIZywtJHkpLG5ldyBpZSgkeSwwLEhnKSxuZXcgaWUoLSR5LDAsSGcpLG5ldyBpZShIZywkeSwwKSxuZXcgaWUoLUhnLCR5LDApXSx1az1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLl9yZW5kZXJlcj10LHRoaXMuX3BpbmdQb25nUmVuZGVyVGFyZ2V0PW51bGwsdGhpcy5fYmx1ck1hdGVyaWFsPWZ1bmN0aW9uKG4pe2xldCB0PW5ldyBGbG9hdDMyQXJyYXkoMjApLGU9bmV3IGllKDAsMSwwKTtyZXR1cm4gbmV3IF9iKHtuYW1lOiJTcGhlcmljYWxHYXVzc2lhbkJsdXIiLGRlZmluZXM6e246MjB9LHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LHNhbXBsZXM6e3ZhbHVlOjF9LHdlaWdodHM6e3ZhbHVlOnR9LGxhdGl0dWRpbmFsOnt2YWx1ZTohMX0sZFRoZXRhOnt2YWx1ZTowfSxtaXBJbnQ6e3ZhbHVlOjB9LHBvbGVBeGlzOnt2YWx1ZTplfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0XHR1bmlmb3JtIHNhbXBsZXIyRCBlbnZNYXA7XG5cdFx0XHR1bmlmb3JtIGludCBzYW1wbGVzO1xuXHRcdFx0dW5pZm9ybSBmbG9hdCB3ZWlnaHRzWyBuIF07XG5cdFx0XHR1bmlmb3JtIGJvb2wgbGF0aXR1ZGluYWw7XG5cdFx0XHR1bmlmb3JtIGZsb2F0IGRUaGV0YTtcblx0XHRcdHVuaWZvcm0gZmxvYXQgbWlwSW50O1xuXHRcdFx0dW5pZm9ybSB2ZWMzIHBvbGVBeGlzO1xuXG5cdFx0XHQjZGVmaW5lIEVOVk1BUF9UWVBFX0NVQkVfVVZcblx0XHRcdCNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG5cblx0XHRcdHZlYzMgZ2V0U2FtcGxlKCBmbG9hdCB0aGV0YSwgdmVjMyBheGlzICkge1xuXG5cdFx0XHRcdGZsb2F0IGNvc1RoZXRhID0gY29zKCB0aGV0YSApO1xuXHRcdFx0XHQvLyBSb2RyaWd1ZXMnIGF4aXMtYW5nbGUgcm90YXRpb25cblx0XHRcdFx0dmVjMyBzYW1wbGVEaXJlY3Rpb24gPSB2T3V0cHV0RGlyZWN0aW9uICogY29zVGhldGFcblx0XHRcdFx0XHQrIGNyb3NzKCBheGlzLCB2T3V0cHV0RGlyZWN0aW9uICkgKiBzaW4oIHRoZXRhIClcblx0XHRcdFx0XHQrIGF4aXMgKiBkb3QoIGF4aXMsIHZPdXRwdXREaXJlY3Rpb24gKSAqICggMS4wIC0gY29zVGhldGEgKTtcblxuXHRcdFx0XHRyZXR1cm4gYmlsaW5lYXJDdWJlVVYoIGVudk1hcCwgc2FtcGxlRGlyZWN0aW9uLCBtaXBJbnQgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0dmVjMyBheGlzID0gbGF0aXR1ZGluYWwgPyBwb2xlQXhpcyA6IGNyb3NzKCBwb2xlQXhpcywgdk91dHB1dERpcmVjdGlvbiApO1xuXG5cdFx0XHRcdGlmICggYWxsKCBlcXVhbCggYXhpcywgdmVjMyggMC4wICkgKSApICkge1xuXG5cdFx0XHRcdFx0YXhpcyA9IHZlYzMoIHZPdXRwdXREaXJlY3Rpb24ueiwgMC4wLCAtIHZPdXRwdXREaXJlY3Rpb24ueCApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRheGlzID0gbm9ybWFsaXplKCBheGlzICk7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdmVjNCggMC4wLCAwLjAsIDAuMCwgMS4wICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgMCBdICogZ2V0U2FtcGxlKCAwLjAsIGF4aXMgKTtcblxuXHRcdFx0XHRmb3IgKCBpbnQgaSA9IDE7IGkgPCBuOyBpKysgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGkgPj0gc2FtcGxlcyApIHtcblxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmbG9hdCB0aGV0YSA9IGRUaGV0YSAqIGZsb2F0KCBpICk7XG5cdFx0XHRcdFx0Z2xfRnJhZ0NvbG9yLnJnYiArPSB3ZWlnaHRzWyBpIF0gKiBnZXRTYW1wbGUoIC0xLjAgKiB0aGV0YSwgYXhpcyApO1xuXHRcdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgKz0gd2VpZ2h0c1sgaSBdICogZ2V0U2FtcGxlKCB0aGV0YSwgYXhpcyApO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fVxuXHRcdCIsYmxlbmRpbmc6MCxkZXB0aFRlc3Q6ITEsZGVwdGhXcml0ZTohMX0pfSgpLHRoaXMuX2VxdWlyZWN0U2hhZGVyPW51bGwsdGhpcy5fY3ViZW1hcFNoYWRlcj1udWxsLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9ibHVyTWF0ZXJpYWwpfWZyb21TY2VuZSh0LGU9MCxpPS4xLHI9MTAwKXtKaj10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgbz10aGlzLl9hbGxvY2F0ZVRhcmdldHMoKTtyZXR1cm4gdGhpcy5fc2NlbmVUb0N1YmVVVih0LGkscixvKSxlPjAmJnRoaXMuX2JsdXIobywwLDAsZSksdGhpcy5fYXBwbHlQTVJFTShvKSx0aGlzLl9jbGVhbnVwKG8pLG99ZnJvbUVxdWlyZWN0YW5ndWxhcih0LGU9bnVsbCl7cmV0dXJuIHRoaXMuX2Zyb21UZXh0dXJlKHQsZSl9ZnJvbUN1YmVtYXAodCxlPW51bGwpe3JldHVybiB0aGlzLl9mcm9tVGV4dHVyZSh0LGUpfWNvbXBpbGVDdWJlbWFwU2hhZGVyKCl7bnVsbD09PXRoaXMuX2N1YmVtYXBTaGFkZXImJih0aGlzLl9jdWJlbWFwU2hhZGVyPVZ1ZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9jdWJlbWFwU2hhZGVyKSl9Y29tcGlsZUVxdWlyZWN0YW5ndWxhclNoYWRlcigpe251bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPUJ1ZSgpLHRoaXMuX2NvbXBpbGVNYXRlcmlhbCh0aGlzLl9lcXVpcmVjdFNoYWRlcikpfWRpc3Bvc2UoKXt0aGlzLl9ibHVyTWF0ZXJpYWwuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldCYmdGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQuZGlzcG9zZSgpLG51bGwhPT10aGlzLl9jdWJlbWFwU2hhZGVyJiZ0aGlzLl9jdWJlbWFwU2hhZGVyLmRpc3Bvc2UoKSxudWxsIT09dGhpcy5fZXF1aXJlY3RTaGFkZXImJnRoaXMuX2VxdWlyZWN0U2hhZGVyLmRpc3Bvc2UoKTtmb3IobGV0IHQ9MDt0PFJTLmxlbmd0aDt0KyspUlNbdF0uZGlzcG9zZSgpfV9jbGVhbnVwKHQpe3RoaXMuX3JlbmRlcmVyLnNldFJlbmRlclRhcmdldChKaiksdC5zY2lzc29yVGVzdD0hMSxVTyh0LDAsMCx0LndpZHRoLHQuaGVpZ2h0KX1fZnJvbVRleHR1cmUodCxlKXtKaj10aGlzLl9yZW5kZXJlci5nZXRSZW5kZXJUYXJnZXQoKTtsZXQgaT1lfHx0aGlzLl9hbGxvY2F0ZVRhcmdldHModCk7cmV0dXJuIHRoaXMuX3RleHR1cmVUb0N1YmVVVih0LGkpLHRoaXMuX2FwcGx5UE1SRU0oaSksdGhpcy5fY2xlYW51cChpKSxpfV9hbGxvY2F0ZVRhcmdldHModCl7bGV0IGU9e21hZ0ZpbHRlcjpHcyxtaW5GaWx0ZXI6R3MsZ2VuZXJhdGVNaXBtYXBzOiExLHR5cGU6bGIsZm9ybWF0OmdhLGVuY29kaW5nOmJmLGRlcHRoQnVmZmVyOiExfSxpPUx1ZShlKTtyZXR1cm4gaS5kZXB0aEJ1ZmZlcj0hdCxudWxsPT09dGhpcy5fcGluZ1BvbmdSZW5kZXJUYXJnZXQmJih0aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldD1MdWUoZSkpLGl9X2NvbXBpbGVNYXRlcmlhbCh0KXtsZXQgZT1uZXcgVm8oUlNbMF0sdCk7dGhpcy5fcmVuZGVyZXIuY29tcGlsZShlLFpqKX1fc2NlbmVUb0N1YmVVVih0LGUsaSxyKXtsZXQgYT1uZXcgV3MoOTAsMSxlLGkpLGw9WzEsLTEsMSwxLDEsMV0sYz1bMSwxLDEsLTEsLTEsLTFdLHU9dGhpcy5fcmVuZGVyZXIsZD11LmF1dG9DbGVhcixwPXUudG9uZU1hcHBpbmc7dS5nZXRDbGVhckNvbG9yKEZ1ZSksdS50b25lTWFwcGluZz0wLHUuYXV0b0NsZWFyPSExO2xldCBoPW5ldyBHZyh7bmFtZToiUE1SRU0uQmFja2dyb3VuZCIsc2lkZToxLGRlcHRoV3JpdGU6ITEsZGVwdGhUZXN0OiExfSksZj1uZXcgVm8obmV3IFdnLGgpLG09ITEseD10LmJhY2tncm91bmQ7eD94LmlzQ29sb3ImJihoLmNvbG9yLmNvcHkoeCksdC5iYWNrZ3JvdW5kPW51bGwsbT0hMCk6KGguY29sb3IuY29weShGdWUpLG09ITApO2ZvcihsZXQgZz0wO2c8NjtnKyspe2xldCBiPWclMzswPT09Yj8oYS51cC5zZXQoMCxsW2ddLDApLGEubG9va0F0KGNbZ10sMCwwKSk6MT09PWI/KGEudXAuc2V0KDAsMCxsW2ddKSxhLmxvb2tBdCgwLGNbZ10sMCkpOihhLnVwLnNldCgwLGxbZ10sMCksYS5sb29rQXQoMCwwLGNbZ10pKSxVTyhyLGIqd2QsZz4yP3dkOjAsd2Qsd2QpLHUuc2V0UmVuZGVyVGFyZ2V0KHIpLG0mJnUucmVuZGVyKGYsYSksdS5yZW5kZXIodCxhKX1mLmdlb21ldHJ5LmRpc3Bvc2UoKSxmLm1hdGVyaWFsLmRpc3Bvc2UoKSx1LnRvbmVNYXBwaW5nPXAsdS5hdXRvQ2xlYXI9ZCx0LmJhY2tncm91bmQ9eH1fdGV4dHVyZVRvQ3ViZVVWKHQsZSl7bGV0IGk9dGhpcy5fcmVuZGVyZXIscj0zMDE9PT10Lm1hcHBpbmd8fDMwMj09PXQubWFwcGluZztyPyhudWxsPT09dGhpcy5fY3ViZW1hcFNoYWRlciYmKHRoaXMuX2N1YmVtYXBTaGFkZXI9VnVlKCkpLHRoaXMuX2N1YmVtYXBTaGFkZXIudW5pZm9ybXMuZmxpcEVudk1hcC52YWx1ZT0hMT09PXQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEpOm51bGw9PT10aGlzLl9lcXVpcmVjdFNoYWRlciYmKHRoaXMuX2VxdWlyZWN0U2hhZGVyPUJ1ZSgpKTtsZXQgbz1yP3RoaXMuX2N1YmVtYXBTaGFkZXI6dGhpcy5fZXF1aXJlY3RTaGFkZXIscz1uZXcgVm8oUlNbMF0sbyksYT1vLnVuaWZvcm1zO2EuZW52TWFwLnZhbHVlPXQscnx8YS50ZXhlbFNpemUudmFsdWUuc2V0KDEvdC5pbWFnZS53aWR0aCwxL3QuaW1hZ2UuaGVpZ2h0KSxVTyhlLDAsMCwzKndkLDIqd2QpLGkuc2V0UmVuZGVyVGFyZ2V0KGUpLGkucmVuZGVyKHMsWmopfV9hcHBseVBNUkVNKHQpe2xldCBlPXRoaXMuX3JlbmRlcmVyLGk9ZS5hdXRvQ2xlYXI7ZS5hdXRvQ2xlYXI9ITE7Zm9yKGxldCByPTE7cjxOZGU7cisrKXtsZXQgbz1NYXRoLnNxcnQoSE9bcl0qSE9bcl0tSE9bci0xXSpIT1tyLTFdKTt0aGlzLl9ibHVyKHQsci0xLHIsbyxOdWVbKHItMSklTnVlLmxlbmd0aF0pfWUuYXV0b0NsZWFyPWl9X2JsdXIodCxlLGkscixvKXtsZXQgcz10aGlzLl9waW5nUG9uZ1JlbmRlclRhcmdldDt0aGlzLl9oYWxmQmx1cih0LHMsZSxpLHIsImxhdGl0dWRpbmFsIixvKSx0aGlzLl9oYWxmQmx1cihzLHQsaSxpLHIsImxvbmdpdHVkaW5hbCIsbyl9X2hhbGZCbHVyKHQsZSxpLHIsbyxzLGEpe2xldCBsPXRoaXMuX3JlbmRlcmVyLGM9dGhpcy5fYmx1ck1hdGVyaWFsOyJsYXRpdHVkaW5hbCIhPT1zJiYibG9uZ2l0dWRpbmFsIiE9PXMmJmNvbnNvbGUuZXJyb3IoImJsdXIgZGlyZWN0aW9uIG11c3QgYmUgZWl0aGVyIGxhdGl0dWRpbmFsIG9yIGxvbmdpdHVkaW5hbCEiKTtsZXQgZD1uZXcgVm8oUlNbcl0sYykscD1jLnVuaWZvcm1zLGg9a3VlW2ldLTEsZj1pc0Zpbml0ZShvKT9NYXRoLlBJLygyKmgpOjIqTWF0aC5QSS8zOSxtPW8vZix4PWlzRmluaXRlKG8pPzErTWF0aC5mbG9vcigzKm0pOjIwO3g+MjAmJmNvbnNvbGUud2Fybihgc2lnbWFSYWRpYW5zLCAke299LCBpcyB0b28gbGFyZ2UgYW5kIHdpbGwgY2xpcCwgYXMgaXQgcmVxdWVzdGVkICR7eH0gc2FtcGxlcyB3aGVuIHRoZSBtYXhpbXVtIGlzIHNldCB0byAyMGApO2xldCBnPVtdLGI9MDtmb3IobGV0IFo9MDtaPDIwOysrWil7bGV0IHo9Wi9tLGZlPU1hdGguZXhwKC16KnovMik7Zy5wdXNoKGZlKSwwPT09Wj9iKz1mZTpaPHgmJihiKz0yKmZlKX1mb3IobGV0IFo9MDtaPGcubGVuZ3RoO1orKylnW1pdPWdbWl0vYjtwLmVudk1hcC52YWx1ZT10LnRleHR1cmUscC5zYW1wbGVzLnZhbHVlPXgscC53ZWlnaHRzLnZhbHVlPWcscC5sYXRpdHVkaW5hbC52YWx1ZT0ibGF0aXR1ZGluYWwiPT09cyxhJiYocC5wb2xlQXhpcy52YWx1ZT1hKSxwLmRUaGV0YS52YWx1ZT1mLHAubWlwSW50LnZhbHVlPTgtaTtsZXQgRD1rdWVbcl07VU8oZSwzKk1hdGgubWF4KDAsd2QtMipEKSwoMD09PXI/MDoyKndkKSsyKkQqKHI+ND9yLTgrNDowKSwzKkQsMipEKSxsLnNldFJlbmRlclRhcmdldChlKSxsLnJlbmRlcihkLFpqKX19O2Z1bmN0aW9uIE5XZSgpe2xldCBuPVtdLHQ9W10sZT1bXSxpPTg7Zm9yKGxldCByPTA7cjxOZGU7cisrKXtsZXQgbz1NYXRoLnBvdygyLGkpO3QucHVzaChvKTtsZXQgcz0xL287cj40P3M9RmRlW3ItOCs0LTFdOjA9PT1yJiYocz0wKSxlLnB1c2gocyk7bGV0IGE9MS8oby0xKSxsPS1hLzIsYz0xK2EvMix1PVtsLGwsYyxsLGMsYyxsLGwsYyxjLGwsY10sZD02LHA9NixoPTMsZj0yLG09MSx4PW5ldyBGbG9hdDMyQXJyYXkoaCpwKmQpLGc9bmV3IEZsb2F0MzJBcnJheShmKnAqZCksYj1uZXcgRmxvYXQzMkFycmF5KG0qcCpkKTtmb3IobGV0IFQ9MDtUPGQ7VCsrKXtsZXQgaz1UJTMqMi8zLTEsWj1UPjI/MDotMTt4LnNldChbayxaLDAsaysyLzMsWiwwLGsrMi8zLForMSwwLGssWiwwLGsrMi8zLForMSwwLGssWisxLDBdLGgqcCpUKSxnLnNldCh1LGYqcCpUKSxiLnNldChbVCxULFQsVCxULFRdLG0qcCpUKX1sZXQgRD1uZXcgbnI7RC5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgWXIoeCxoKSksRC5zZXRBdHRyaWJ1dGUoInV2IixuZXcgWXIoZyxmKSksRC5zZXRBdHRyaWJ1dGUoImZhY2VJbmRleCIsbmV3IFlyKGIsbSkpLG4ucHVzaChEKSxpPjQmJmktLX1yZXR1cm57X2xvZFBsYW5lczpuLF9zaXplTG9kczp0LF9zaWdtYXM6ZX19ZnVuY3Rpb24gTHVlKG4pe2xldCB0PW5ldyBXYSgzKndkLDMqd2Qsbik7cmV0dXJuIHQudGV4dHVyZS5tYXBwaW5nPTMwNix0LnRleHR1cmUubmFtZT0iUE1SRU0uY3ViZVV2Iix0LnNjaXNzb3JUZXN0PSEwLHR9ZnVuY3Rpb24gVU8obix0LGUsaSxyKXtuLnZpZXdwb3J0LnNldCh0LGUsaSxyKSxuLnNjaXNzb3Iuc2V0KHQsZSxpLHIpfWZ1bmN0aW9uIEJ1ZSgpe2xldCBuPW5ldyBhdCgxLDEpO3JldHVybiBuZXcgX2Ioe25hbWU6IkVxdWlyZWN0YW5ndWxhclRvQ3ViZVVWIix1bmlmb3Jtczp7ZW52TWFwOnt2YWx1ZTpudWxsfSx0ZXhlbFNpemU6e3ZhbHVlOm59fSx2ZXJ0ZXhTaGFkZXI6IlxuXG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0cHJlY2lzaW9uIG1lZGl1bXAgaW50O1xuXG5cdFx0YXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cdFx0YXR0cmlidXRlIHZlYzIgdXY7XG5cdFx0YXR0cmlidXRlIGZsb2F0IGZhY2VJbmRleDtcblxuXHRcdHZhcnlpbmcgdmVjMyB2T3V0cHV0RGlyZWN0aW9uO1xuXG5cdFx0Ly8gUkggY29vcmRpbmF0ZSBzeXN0ZW07IFBNUkVNIGZhY2UtaW5kZXhpbmcgY29udmVudGlvblxuXHRcdHZlYzMgZ2V0RGlyZWN0aW9uKCB2ZWMyIHV2LCBmbG9hdCBmYWNlICkge1xuXG5cdFx0XHR1diA9IDIuMCAqIHV2IC0gMS4wO1xuXG5cdFx0XHR2ZWMzIGRpcmVjdGlvbiA9IHZlYzMoIHV2LCAxLjAgKTtcblxuXHRcdFx0aWYgKCBmYWNlID09IDAuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24uenl4OyAvLyAoIDEsIHYsIHUgKSBwb3MgeFxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24gPSBkaXJlY3Rpb24ueHp5O1xuXHRcdFx0XHRkaXJlY3Rpb24ueHogKj0gLTEuMDsgLy8gKCAtdSwgMSwgLXYgKSBwb3MgeVxuXG5cdFx0XHR9IGVsc2UgaWYgKCBmYWNlID09IDIuMCApIHtcblxuXHRcdFx0XHRkaXJlY3Rpb24ueCAqPSAtMS4wOyAvLyAoIC11LCB2LCAxICkgcG9zIHpcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLTEsIHYsIC11ICkgbmVnIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh5ICo9IC0xLjA7IC8vICggLXUsIC0xLCB2ICkgbmVnIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSA1LjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnogKj0gLTEuMDsgLy8gKCB1LCB2LCAtMSApIG5lZyB6XG5cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRpcmVjdGlvbjtcblxuXHRcdH1cblxuXHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0dk91dHB1dERpcmVjdGlvbiA9IGdldERpcmVjdGlvbiggdXYsIGZhY2VJbmRleCApO1xuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cblx0XHR9XG5cdCIsZnJhZ21lbnRTaGFkZXI6IlxuXG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcblx0XHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGVudk1hcDtcblx0XHRcdHVuaWZvcm0gdmVjMiB0ZXhlbFNpemU7XG5cblx0XHRcdCNpbmNsdWRlIDxjb21tb24+XG5cblx0XHRcdHZvaWQgbWFpbigpIHtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSB2ZWM0KCAwLjAsIDAuMCwgMC4wLCAxLjAgKTtcblxuXHRcdFx0XHR2ZWMzIG91dHB1dERpcmVjdGlvbiA9IG5vcm1hbGl6ZSggdk91dHB1dERpcmVjdGlvbiApO1xuXHRcdFx0XHR2ZWMyIHV2ID0gZXF1aXJlY3RVdiggb3V0cHV0RGlyZWN0aW9uICk7XG5cblx0XHRcdFx0dmVjMiBmID0gZnJhY3QoIHV2IC8gdGV4ZWxTaXplIC0gMC41ICk7XG5cdFx0XHRcdHV2IC09IGYgKiB0ZXhlbFNpemU7XG5cdFx0XHRcdHZlYzMgdGwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXHRcdFx0XHR1di54ICs9IHRleGVsU2l6ZS54O1xuXHRcdFx0XHR2ZWMzIHRyID0gdGV4dHVyZTJEICggZW52TWFwLCB1diApLnJnYjtcblx0XHRcdFx0dXYueSArPSB0ZXhlbFNpemUueTtcblx0XHRcdFx0dmVjMyBiciA9IHRleHR1cmUyRCAoIGVudk1hcCwgdXYgKS5yZ2I7XG5cdFx0XHRcdHV2LnggLT0gdGV4ZWxTaXplLng7XG5cdFx0XHRcdHZlYzMgYmwgPSB0ZXh0dXJlMkQgKCBlbnZNYXAsIHV2ICkucmdiO1xuXG5cdFx0XHRcdHZlYzMgdG0gPSBtaXgoIHRsLCB0ciwgZi54ICk7XG5cdFx0XHRcdHZlYzMgYm0gPSBtaXgoIGJsLCBiciwgZi54ICk7XG5cdFx0XHRcdGdsX0ZyYWdDb2xvci5yZ2IgPSBtaXgoIHRtLCBibSwgZi55ICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBWdWUoKXtyZXR1cm4gbmV3IF9iKHtuYW1lOiJDdWJlbWFwVG9DdWJlVVYiLHVuaWZvcm1zOntlbnZNYXA6e3ZhbHVlOm51bGx9LGZsaXBFbnZNYXA6e3ZhbHVlOi0xfX0sdmVydGV4U2hhZGVyOiJcblxuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuXHRcdHByZWNpc2lvbiBtZWRpdW1wIGludDtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXHRcdGF0dHJpYnV0ZSB2ZWMyIHV2O1xuXHRcdGF0dHJpYnV0ZSBmbG9hdCBmYWNlSW5kZXg7XG5cblx0XHR2YXJ5aW5nIHZlYzMgdk91dHB1dERpcmVjdGlvbjtcblxuXHRcdC8vIFJIIGNvb3JkaW5hdGUgc3lzdGVtOyBQTVJFTSBmYWNlLWluZGV4aW5nIGNvbnZlbnRpb25cblx0XHR2ZWMzIGdldERpcmVjdGlvbiggdmVjMiB1diwgZmxvYXQgZmFjZSApIHtcblxuXHRcdFx0dXYgPSAyLjAgKiB1diAtIDEuMDtcblxuXHRcdFx0dmVjMyBkaXJlY3Rpb24gPSB2ZWMzKCB1diwgMS4wICk7XG5cblx0XHRcdGlmICggZmFjZSA9PSAwLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnp5eDsgLy8gKCAxLCB2LCB1ICkgcG9zIHhcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAxLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uID0gZGlyZWN0aW9uLnh6eTtcblx0XHRcdFx0ZGlyZWN0aW9uLnh6ICo9IC0xLjA7IC8vICggLXUsIDEsIC12ICkgcG9zIHlcblxuXHRcdFx0fSBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XG5cblx0XHRcdFx0ZGlyZWN0aW9uLnggKj0gLTEuMDsgLy8gKCAtdSwgdiwgMSApIHBvcyB6XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi56eXg7XG5cdFx0XHRcdGRpcmVjdGlvbi54eiAqPSAtMS4wOyAvLyAoIC0xLCB2LCAtdSApIG5lZyB4XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbiA9IGRpcmVjdGlvbi54enk7XG5cdFx0XHRcdGRpcmVjdGlvbi54eSAqPSAtMS4wOyAvLyAoIC11LCAtMSwgdiApIG5lZyB5XG5cblx0XHRcdH0gZWxzZSBpZiAoIGZhY2UgPT0gNS4wICkge1xuXG5cdFx0XHRcdGRpcmVjdGlvbi56ICo9IC0xLjA7IC8vICggdSwgdiwgLTEgKSBuZWcgelxuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkaXJlY3Rpb247XG5cblx0XHR9XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdHZPdXRwdXREaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oIHV2LCBmYWNlSW5kZXggKTtcblx0XHRcdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xuXG5cdFx0fVxuXHQiLGZyYWdtZW50U2hhZGVyOiJcblxuXHRcdFx0cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG5cdFx0XHRwcmVjaXNpb24gbWVkaXVtcCBpbnQ7XG5cblx0XHRcdHVuaWZvcm0gZmxvYXQgZmxpcEVudk1hcDtcblxuXHRcdFx0dmFyeWluZyB2ZWMzIHZPdXRwdXREaXJlY3Rpb247XG5cblx0XHRcdHVuaWZvcm0gc2FtcGxlckN1YmUgZW52TWFwO1xuXG5cdFx0XHR2b2lkIG1haW4oKSB7XG5cblx0XHRcdFx0Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZUN1YmUoIGVudk1hcCwgdmVjMyggZmxpcEVudk1hcCAqIHZPdXRwdXREaXJlY3Rpb24ueCwgdk91dHB1dERpcmVjdGlvbi55eiApICk7XG5cblx0XHRcdH1cblx0XHQiLGJsZW5kaW5nOjAsZGVwdGhUZXN0OiExLGRlcHRoV3JpdGU6ITF9KX1mdW5jdGlvbiBCV2Uobil7bGV0IHQ9bmV3IFdlYWtNYXAsZT1udWxsO2Z1bmN0aW9uIG8oYSl7bGV0IGw9YS50YXJnZXQ7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixvKTtsZXQgYz10LmdldChsKTt2b2lkIDAhPT1jJiYodC5kZWxldGUobCksYy5kaXNwb3NlKCkpfXJldHVybntnZXQ6ZnVuY3Rpb24oYSl7aWYoYSYmYS5pc1RleHR1cmUpe2xldCBsPWEubWFwcGluZyxjPTMwMz09PWx8fDMwND09PWwsdT0zMDE9PT1sfHwzMDI9PT1sO2lmKGN8fHUpe2lmKGEuaXNSZW5kZXJUYXJnZXRUZXh0dXJlJiYhMD09PWEubmVlZHNQTVJFTVVwZGF0ZSl7YS5uZWVkc1BNUkVNVXBkYXRlPSExO2xldCBkPXQuZ2V0KGEpO3JldHVybiBudWxsPT09ZSYmKGU9bmV3IHVrKG4pKSxkPWM/ZS5mcm9tRXF1aXJlY3Rhbmd1bGFyKGEsZCk6ZS5mcm9tQ3ViZW1hcChhLGQpLHQuc2V0KGEsZCksZC50ZXh0dXJlfWlmKHQuaGFzKGEpKXJldHVybiB0LmdldChhKS50ZXh0dXJlO3tsZXQgZD1hLmltYWdlO2lmKGMmJmQmJmQuaGVpZ2h0PjB8fHUmJmQmJmZ1bmN0aW9uKGEpe2xldCBsPTA7Zm9yKGxldCB1PTA7dTw2O3UrKyl2b2lkIDAhPT1hW3VdJiZsKys7cmV0dXJuIDY9PT1sfShkKSl7bnVsbD09PWUmJihlPW5ldyB1ayhuKSk7bGV0IHA9Yz9lLmZyb21FcXVpcmVjdGFuZ3VsYXIoYSk6ZS5mcm9tQ3ViZW1hcChhKTtyZXR1cm4gdC5zZXQoYSxwKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRpc3Bvc2UiLG8pLHAudGV4dHVyZX1yZXR1cm4gbnVsbH19fXJldHVybiBhfSxkaXNwb3NlOmZ1bmN0aW9uKCl7dD1uZXcgV2Vha01hcCxudWxsIT09ZSYmKGUuZGlzcG9zZSgpLGU9bnVsbCl9fX1mdW5jdGlvbiBWV2Uobil7bGV0IHQ9e307ZnVuY3Rpb24gZShpKXtpZih2b2lkIDAhPT10W2ldKXJldHVybiB0W2ldO2xldCByO3N3aXRjaChpKXtjYXNlIldFQkdMX2RlcHRoX3RleHR1cmUiOnI9bi5nZXRFeHRlbnNpb24oIldFQkdMX2RlcHRoX3RleHR1cmUiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9XRUJHTF9kZXB0aF90ZXh0dXJlIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfZGVwdGhfdGV4dHVyZSIpO2JyZWFrO2Nhc2UiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIjpyPW4uZ2V0RXh0ZW5zaW9uKCJFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIk1PWl9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKXx8bi5nZXRFeHRlbnNpb24oIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIjpyPW4uZ2V0RXh0ZW5zaW9uKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpfHxuLmdldEV4dGVuc2lvbigiTU9aX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTticmVhaztjYXNlIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyI6cj1uLmdldEV4dGVuc2lvbigiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIil8fG4uZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7YnJlYWs7ZGVmYXVsdDpyPW4uZ2V0RXh0ZW5zaW9uKGkpfXJldHVybiB0W2ldPXIscn1yZXR1cm57aGFzOmZ1bmN0aW9uKGkpe3JldHVybiBudWxsIT09ZShpKX0saW5pdDpmdW5jdGlvbihpKXtpLmlzV2ViR0wyP2UoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTooZSgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpLGUoIk9FU190ZXh0dXJlX2Zsb2F0IiksZSgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpLGUoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIiksZSgiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIiksZSgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpLGUoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IiksZSgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKSxlKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSxlKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKSxlKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKX0sZ2V0OmZ1bmN0aW9uKGkpe2xldCByPWUoaSk7cmV0dXJuIG51bGw9PT1yJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6ICIraSsiIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkLiIpLHJ9fX1mdW5jdGlvbiBIV2Uobix0LGUsaSl7bGV0IHI9e30sbz1uZXcgV2Vha01hcDtmdW5jdGlvbiBzKGQpe2xldCBwPWQudGFyZ2V0O251bGwhPT1wLmluZGV4JiZ0LnJlbW92ZShwLmluZGV4KTtmb3IobGV0IGYgaW4gcC5hdHRyaWJ1dGVzKXQucmVtb3ZlKHAuYXR0cmlidXRlc1tmXSk7cC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixzKSxkZWxldGUgcltwLmlkXTtsZXQgaD1vLmdldChwKTtoJiYodC5yZW1vdmUoaCksby5kZWxldGUocCkpLGkucmVsZWFzZVN0YXRlc09mR2VvbWV0cnkocCksITA9PT1wLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnkmJmRlbGV0ZSBwLl9tYXhJbnN0YW5jZUNvdW50LGUubWVtb3J5Lmdlb21ldHJpZXMtLX1mdW5jdGlvbiBjKGQpe2xldCBwPVtdLGg9ZC5pbmRleCxmPWQuYXR0cmlidXRlcy5wb3NpdGlvbixtPTA7aWYobnVsbCE9PWgpe2xldCBiPWguYXJyYXk7bT1oLnZlcnNpb247Zm9yKGxldCBEPTAsVD1iLmxlbmd0aDtEPFQ7RCs9Myl7bGV0IGs9YltEKzBdLFo9YltEKzFdLHo9YltEKzJdO3AucHVzaChrLFosWix6LHosayl9fWVsc2V7bT1mLnZlcnNpb247Zm9yKGxldCBEPTAsVD1mLmFycmF5Lmxlbmd0aC8zLTE7RDxUO0QrPTMpe2xldCBrPUQrMCxaPUQrMSx6PUQrMjtwLnB1c2goayxaLFoseix6LGspfX1sZXQgeD1uZXcoT2RlKHApP2xrOmFrKShwLDEpO3gudmVyc2lvbj1tO2xldCBnPW8uZ2V0KGQpO2cmJnQucmVtb3ZlKGcpLG8uc2V0KGQseCl9cmV0dXJue2dldDpmdW5jdGlvbihkLHApe3JldHVybiEwPT09cltwLmlkXXx8KHAuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIscykscltwLmlkXT0hMCxlLm1lbW9yeS5nZW9tZXRyaWVzKyspLHB9LHVwZGF0ZTpmdW5jdGlvbihkKXtsZXQgcD1kLmF0dHJpYnV0ZXM7Zm9yKGxldCBmIGluIHApdC51cGRhdGUocFtmXSwzNDk2Mik7bGV0IGg9ZC5tb3JwaEF0dHJpYnV0ZXM7Zm9yKGxldCBmIGluIGgpe2xldCBtPWhbZl07Zm9yKGxldCB4PTAsZz1tLmxlbmd0aDt4PGc7eCsrKXQudXBkYXRlKG1beF0sMzQ5NjIpfX0sZ2V0V2lyZWZyYW1lQXR0cmlidXRlOmZ1bmN0aW9uKGQpe2xldCBwPW8uZ2V0KGQpO2lmKHApe2xldCBoPWQuaW5kZXg7bnVsbCE9PWgmJnAudmVyc2lvbjxoLnZlcnNpb24mJmMoZCl9ZWxzZSBjKGQpO3JldHVybiBvLmdldChkKX19fWZ1bmN0aW9uIFVXZShuLHQsZSxpKXtsZXQgbyxhLGwscj1pLmlzV2ViR0wyO3RoaXMuc2V0TW9kZT1mdW5jdGlvbihwKXtvPXB9LHRoaXMuc2V0SW5kZXg9ZnVuY3Rpb24ocCl7YT1wLnR5cGUsbD1wLmJ5dGVzUGVyRWxlbWVudH0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24ocCxoKXtuLmRyYXdFbGVtZW50cyhvLGgsYSxwKmwpLGUudXBkYXRlKGgsbywxKX0sdGhpcy5yZW5kZXJJbnN0YW5jZXM9ZnVuY3Rpb24ocCxoLGYpe2lmKDA9PT1mKXJldHVybjtsZXQgbSx4O2lmKHIpbT1uLHg9ImRyYXdFbGVtZW50c0luc3RhbmNlZCI7ZWxzZSBpZihtPXQuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikseD0iZHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLG51bGw9PT1tKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMSW5kZXhlZEJ1ZmZlclJlbmRlcmVyOiB1c2luZyBUSFJFRS5JbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSBidXQgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBleHRlbnNpb24gQU5HTEVfaW5zdGFuY2VkX2FycmF5cy4iKTttW3hdKG8saCxhLHAqbCxmKSxlLnVwZGF0ZShoLG8sZil9fWZ1bmN0aW9uIHpXZShuKXtsZXQgZT17ZnJhbWU6MCxjYWxsczowLHRyaWFuZ2xlczowLHBvaW50czowLGxpbmVzOjB9O3JldHVybnttZW1vcnk6e2dlb21ldHJpZXM6MCx0ZXh0dXJlczowfSxyZW5kZXI6ZSxwcm9ncmFtczpudWxsLGF1dG9SZXNldDohMCxyZXNldDpmdW5jdGlvbigpe2UuZnJhbWUrKyxlLmNhbGxzPTAsZS50cmlhbmdsZXM9MCxlLnBvaW50cz0wLGUubGluZXM9MH0sdXBkYXRlOmZ1bmN0aW9uKG8scyxhKXtzd2l0Y2goZS5jYWxscysrLHMpe2Nhc2UgNDplLnRyaWFuZ2xlcys9YSooby8zKTticmVhaztjYXNlIDE6ZS5saW5lcys9YSooby8yKTticmVhaztjYXNlIDM6ZS5saW5lcys9YSooby0xKTticmVhaztjYXNlIDI6ZS5saW5lcys9YSpvO2JyZWFrO2Nhc2UgMDplLnBvaW50cys9YSpvO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xJbmZvOiBVbmtub3duIGRyYXcgbW9kZToiLHMpfX19fXZhciBKUz1jbGFzcyBleHRlbmRzIEhve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHI9MSl7c3VwZXIobnVsbCksdGhpcy5pbWFnZT17ZGF0YTp0LHdpZHRoOmUsaGVpZ2h0OmksZGVwdGg6cn0sdGhpcy5tYWdGaWx0ZXI9Wm8sdGhpcy5taW5GaWx0ZXI9Wm8sdGhpcy53cmFwUj1FbCx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMSx0aGlzLmZsaXBZPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTF9fTtmdW5jdGlvbiBqV2Uobix0KXtyZXR1cm4gblswXS10WzBdfWZ1bmN0aW9uIEdXZShuLHQpe3JldHVybiBNYXRoLmFicyh0WzFdKS1NYXRoLmFicyhuWzFdKX1mdW5jdGlvbiBIdWUobix0KXtsZXQgZT0xLGk9dC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlP3QuZGF0YS5hcnJheTp0LmFycmF5O2kgaW5zdGFuY2VvZiBJbnQ4QXJyYXk/ZT0xMjc6aSBpbnN0YW5jZW9mIEludDE2QXJyYXk/ZT0zMjc2NzppIGluc3RhbmNlb2YgSW50MzJBcnJheT9lPTIxNDc0ODM2NDc6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xNb3JwaHRhcmdldHM6IFVuc3VwcG9ydGVkIG1vcnBoIGF0dHJpYnV0ZSBkYXRhIHR5cGU6ICIsaSksbi5kaXZpZGVTY2FsYXIoZSl9ZnVuY3Rpb24gV1dlKG4sdCxlKXtsZXQgaT17fSxyPW5ldyBGbG9hdDMyQXJyYXkoOCksbz1uZXcgV2Vha01hcCxzPW5ldyBpZSxhPVtdO2ZvcihsZXQgYz0wO2M8ODtjKyspYVtjXT1bYywwXTtyZXR1cm57dXBkYXRlOmZ1bmN0aW9uKGMsdSxkLHApe2xldCBoPWMubW9ycGhUYXJnZXRJbmZsdWVuY2VzO2lmKCEwPT09dC5pc1dlYkdMMil7bGV0IGY9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24ubGVuZ3RoLG09by5nZXQodSk7aWYodm9pZCAwPT09bXx8bS5jb3VudCE9PWYpe2xldCBGPWZ1bmN0aW9uKCl7aGUuZGlzcG9zZSgpLG8uZGVsZXRlKHUpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsRil9O3ZvaWQgMCE9PW0mJm0udGV4dHVyZS5kaXNwb3NlKCk7bGV0IGI9dm9pZCAwIT09dS5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLEQ9dS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sVD11Lm1vcnBoQXR0cmlidXRlcy5ub3JtYWx8fFtdLFo9ITA9PT1iPzI6MSx6PXUuYXR0cmlidXRlcy5wb3NpdGlvbi5jb3VudCpaLGZlPTE7ej50Lm1heFRleHR1cmVTaXplJiYoZmU9TWF0aC5jZWlsKHovdC5tYXhUZXh0dXJlU2l6ZSksej10Lm1heFRleHR1cmVTaXplKTtsZXQgdWU9bmV3IEZsb2F0MzJBcnJheSh6KmZlKjQqZiksaGU9bmV3IEpTKHVlLHosZmUsZik7aGUuZm9ybWF0PWdhLGhlLnR5cGU9VWcsaGUubmVlZHNVcGRhdGU9ITA7bGV0IHc9NCpaO2ZvcihsZXQgcT0wO3E8ZjtxKyspe2xldCBLPURbcV0sZGU9VFtxXSxZPXoqZmUqNCpxO2ZvcihsZXQgYWU9MDthZTxLLmNvdW50O2FlKyspe3MuZnJvbUJ1ZmZlckF0dHJpYnV0ZShLLGFlKSwhMD09PUsubm9ybWFsaXplZCYmSHVlKHMsSyk7bGV0IGxlPWFlKnc7dWVbWStsZSswXT1zLngsdWVbWStsZSsxXT1zLnksdWVbWStsZSsyXT1zLnosdWVbWStsZSszXT0wLCEwPT09YiYmKHMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShkZSxhZSksITA9PT1kZS5ub3JtYWxpemVkJiZIdWUocyxkZSksdWVbWStsZSs0XT1zLngsdWVbWStsZSs1XT1zLnksdWVbWStsZSs2XT1zLnosdWVbWStsZSs3XT0wKX19bT17Y291bnQ6Zix0ZXh0dXJlOmhlLHNpemU6bmV3IGF0KHosZmUpfSxvLnNldCh1LG0pLHUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsRil9bGV0IHg9MDtmb3IobGV0IGI9MDtiPGgubGVuZ3RoO2IrKyl4Kz1oW2JdO2xldCBnPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLXg7cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsZykscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIsaCkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0c1RleHR1cmUiLG0udGV4dHVyZSxlKSxwLmdldFVuaWZvcm1zKCkuc2V0VmFsdWUobiwibW9ycGhUYXJnZXRzVGV4dHVyZVNpemUiLG0uc2l6ZSl9ZWxzZXtsZXQgZj12b2lkIDA9PT1oPzA6aC5sZW5ndGgsbT1pW3UuaWRdO2lmKHZvaWQgMD09PW18fG0ubGVuZ3RoIT09Zil7bT1bXTtmb3IobGV0IFQ9MDtUPGY7VCsrKW1bVF09W1QsMF07aVt1LmlkXT1tfWZvcihsZXQgVD0wO1Q8ZjtUKyspe2xldCBrPW1bVF07a1swXT1ULGtbMV09aFtUXX1tLnNvcnQoR1dlKTtmb3IobGV0IFQ9MDtUPDg7VCsrKVQ8ZiYmbVtUXVsxXT8oYVtUXVswXT1tW1RdWzBdLGFbVF1bMV09bVtUXVsxXSk6KGFbVF1bMF09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsYVtUXVsxXT0wKTthLnNvcnQoaldlKTtsZXQgeD11Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbixnPXUubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxiPTA7Zm9yKGxldCBUPTA7VDw4O1QrKyl7bGV0IGs9YVtUXSxaPWtbMF0sej1rWzFdO1ohPT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUiYmej8oeCYmdS5nZXRBdHRyaWJ1dGUoIm1vcnBoVGFyZ2V0IitUKSE9PXhbWl0mJnUuc2V0QXR0cmlidXRlKCJtb3JwaFRhcmdldCIrVCx4W1pdKSxnJiZ1LmdldEF0dHJpYnV0ZSgibW9ycGhOb3JtYWwiK1QpIT09Z1taXSYmdS5zZXRBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitULGdbWl0pLHJbVF09eixiKz16KTooeCYmITA9PT11Lmhhc0F0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1QpJiZ1LmRlbGV0ZUF0dHJpYnV0ZSgibW9ycGhUYXJnZXQiK1QpLGcmJiEwPT09dS5oYXNBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitUKSYmdS5kZWxldGVBdHRyaWJ1dGUoIm1vcnBoTm9ybWFsIitUKSxyW1RdPTApfWxldCBEPXUubW9ycGhUYXJnZXRzUmVsYXRpdmU/MToxLWI7cC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZSIsRCkscC5nZXRVbmlmb3JtcygpLnNldFZhbHVlKG4sIm1vcnBoVGFyZ2V0SW5mbHVlbmNlcyIscil9fX19ZnVuY3Rpb24gcVdlKG4sdCxlLGkpe2xldCByPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGEobCl7bGV0IGM9bC50YXJnZXQ7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnJlbW92ZShjLmluc3RhbmNlTWF0cml4KSxudWxsIT09Yy5pbnN0YW5jZUNvbG9yJiZlLnJlbW92ZShjLmluc3RhbmNlQ29sb3IpfXJldHVybnt1cGRhdGU6ZnVuY3Rpb24obCl7bGV0IGM9aS5yZW5kZXIuZnJhbWUsZD10LmdldChsLGwuZ2VvbWV0cnkpO3JldHVybiByLmdldChkKSE9PWMmJih0LnVwZGF0ZShkKSxyLnNldChkLGMpKSxsLmlzSW5zdGFuY2VkTWVzaCYmKCExPT09bC5oYXNFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSYmbC5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixhKSxlLnVwZGF0ZShsLmluc3RhbmNlTWF0cml4LDM0OTYyKSxudWxsIT09bC5pbnN0YW5jZUNvbG9yJiZlLnVwZGF0ZShsLmluc3RhbmNlQ29sb3IsMzQ5NjIpKSxkfSxkaXNwb3NlOmZ1bmN0aW9uKCl7cj1uZXcgV2Vha01hcH19fUpTLnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlMkRBcnJheT0hMDt2YXIgZGs9Y2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0PW51bGwsZT0xLGk9MSxyPTEpe3N1cGVyKG51bGwpLHRoaXMuaW1hZ2U9e2RhdGE6dCx3aWR0aDplLGhlaWdodDppLGRlcHRoOnJ9LHRoaXMubWFnRmlsdGVyPVpvLHRoaXMubWluRmlsdGVyPVpvLHRoaXMud3JhcFI9RWwsdGhpcy5nZW5lcmF0ZU1pcG1hcHM9ITEsdGhpcy5mbGlwWT0hMSx0aGlzLnVucGFja0FsaWdubWVudD0xfX07ZGsucHJvdG90eXBlLmlzRGF0YVRleHR1cmUzRD0hMDt2YXIgTGRlPW5ldyBIbyxCZGU9bmV3IEpTLFZkZT1uZXcgZGssSGRlPW5ldyBtYixVdWU9W10senVlPVtdLGp1ZT1uZXcgRmxvYXQzMkFycmF5KDE2KSxHdWU9bmV3IEZsb2F0MzJBcnJheSg5KSxXdWU9bmV3IEZsb2F0MzJBcnJheSg0KTtmdW5jdGlvbiBFYihuLHQsZSl7bGV0IGk9blswXTtpZihpPD0wfHxpPjApcmV0dXJuIG47bGV0IHI9dCplLG89VXVlW3JdO2lmKHZvaWQgMD09PW8mJihvPW5ldyBGbG9hdDMyQXJyYXkociksVXVlW3JdPW8pLDAhPT10KXtpLnRvQXJyYXkobywwKTtmb3IobGV0IHM9MSxhPTA7cyE9PXQ7KytzKWErPWUsbltzXS50b0FycmF5KG8sYSl9cmV0dXJuIG99ZnVuY3Rpb24gX2Eobix0KXtpZihuLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKylpZihuW2VdIT09dFtlXSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBZcyhuLHQpe2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyluW2VdPXRbZV19ZnVuY3Rpb24ga2sobix0KXtsZXQgZT16dWVbdF07dm9pZCAwPT09ZSYmKGU9bmV3IEludDMyQXJyYXkodCksenVlW3RdPWUpO2ZvcihsZXQgaT0wO2khPT10OysraSllW2ldPW4uYWxsb2NhdGVUZXh0dXJlVW5pdCgpO3JldHVybiBlfWZ1bmN0aW9uIFlXZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7ZVswXSE9PXQmJihuLnVuaWZvcm0xZih0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBYV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueSkmJihuLnVuaWZvcm0yZih0aGlzLmFkZHIsdC54LHQueSksZVswXT10LngsZVsxXT10LnkpO2Vsc2V7aWYoX2EoZSx0KSlyZXR1cm47bi51bmlmb3JtMmZ2KHRoaXMuYWRkcix0KSxZcyhlLHQpfX1mdW5jdGlvbiBRV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2lmKHZvaWQgMCE9PXQueCkoZVswXSE9PXQueHx8ZVsxXSE9PXQueXx8ZVsyXSE9PXQueikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC54LHQueSx0LnopLGVbMF09dC54LGVbMV09dC55LGVbMl09dC56KTtlbHNlIGlmKHZvaWQgMCE9PXQucikoZVswXSE9PXQucnx8ZVsxXSE9PXQuZ3x8ZVsyXSE9PXQuYikmJihuLnVuaWZvcm0zZih0aGlzLmFkZHIsdC5yLHQuZyx0LmIpLGVbMF09dC5yLGVbMV09dC5nLGVbMl09dC5iKTtlbHNle2lmKF9hKGUsdCkpcmV0dXJuO24udW5pZm9ybTNmdih0aGlzLmFkZHIsdCksWXMoZSx0KX19ZnVuY3Rpb24gS1dlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtpZih2b2lkIDAhPT10LngpKGVbMF0hPT10Lnh8fGVbMV0hPT10Lnl8fGVbMl0hPT10Lnp8fGVbM10hPT10LncpJiYobi51bmlmb3JtNGYodGhpcy5hZGRyLHQueCx0LnksdC56LHQudyksZVswXT10LngsZVsxXT10LnksZVsyXT10LnosZVszXT10LncpO2Vsc2V7aWYoX2EoZSx0KSlyZXR1cm47bi51bmlmb3JtNGZ2KHRoaXMuYWRkcix0KSxZcyhlLHQpfX1mdW5jdGlvbiBaV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfYShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgyZnYodGhpcy5hZGRyLCExLHQpLFlzKGUsdCl9ZWxzZXtpZihfYShlLGkpKXJldHVybjtXdWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsV3VlKSxZcyhlLGkpfX1mdW5jdGlvbiBKV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfYShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXgzZnYodGhpcy5hZGRyLCExLHQpLFlzKGUsdCl9ZWxzZXtpZihfYShlLGkpKXJldHVybjtHdWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDNmdih0aGlzLmFkZHIsITEsR3VlKSxZcyhlLGkpfX1mdW5jdGlvbiAkV2Uobix0KXtsZXQgZT10aGlzLmNhY2hlLGk9dC5lbGVtZW50cztpZih2b2lkIDA9PT1pKXtpZihfYShlLHQpKXJldHVybjtuLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5hZGRyLCExLHQpLFlzKGUsdCl9ZWxzZXtpZihfYShlLGkpKXJldHVybjtqdWUuc2V0KGkpLG4udW5pZm9ybU1hdHJpeDRmdih0aGlzLmFkZHIsITEsanVlKSxZcyhlLGkpfX1mdW5jdGlvbiBlN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO2VbMF0hPT10JiYobi51bmlmb3JtMWkodGhpcy5hZGRyLHQpLGVbMF09dCl9ZnVuY3Rpb24gdDdlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtfYShlLHQpfHwobi51bmlmb3JtMml2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBuN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm0zaXYodGhpcy5hZGRyLHQpLFlzKGUsdCkpfWZ1bmN0aW9uIGk3ZShuLHQpe2xldCBlPXRoaXMuY2FjaGU7X2EoZSx0KXx8KG4udW5pZm9ybTRpdih0aGlzLmFkZHIsdCksWXMoZSx0KSl9ZnVuY3Rpb24gcjdlKG4sdCl7bGV0IGU9dGhpcy5jYWNoZTtlWzBdIT09dCYmKG4udW5pZm9ybTF1aSh0aGlzLmFkZHIsdCksZVswXT10KX1mdW5jdGlvbiBvN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm0ydWl2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBzN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm0zdWl2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBhN2Uobix0KXtsZXQgZT10aGlzLmNhY2hlO19hKGUsdCl8fChuLnVuaWZvcm00dWl2KHRoaXMuYWRkcix0KSxZcyhlLHQpKX1mdW5jdGlvbiBsN2Uobix0LGUpe2xldCBpPXRoaXMuY2FjaGUscj1lLmFsbG9jYXRlVGV4dHVyZVVuaXQoKTtpWzBdIT09ciYmKG4udW5pZm9ybTFpKHRoaXMuYWRkcixyKSxpWzBdPXIpLGUuc2FmZVNldFRleHR1cmUyRCh0fHxMZGUscil9ZnVuY3Rpb24gYzdlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUzRCh0fHxWZGUscil9ZnVuY3Rpb24gdTdlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNhZmVTZXRUZXh0dXJlQ3ViZSh0fHxIZGUscil9ZnVuY3Rpb24gZDdlKG4sdCxlKXtsZXQgaT10aGlzLmNhY2hlLHI9ZS5hbGxvY2F0ZVRleHR1cmVVbml0KCk7aVswXSE9PXImJihuLnVuaWZvcm0xaSh0aGlzLmFkZHIsciksaVswXT1yKSxlLnNldFRleHR1cmUyREFycmF5KHR8fEJkZSxyKX1mdW5jdGlvbiBoN2Uobix0KXtuLnVuaWZvcm0xZnYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIGY3ZShuLHQpe2xldCBlPUViKHQsdGhpcy5zaXplLDIpO24udW5pZm9ybTJmdih0aGlzLmFkZHIsZSl9ZnVuY3Rpb24gbTdlKG4sdCl7bGV0IGU9RWIodCx0aGlzLnNpemUsMyk7bi51bmlmb3JtM2Z2KHRoaXMuYWRkcixlKX1mdW5jdGlvbiBnN2Uobix0KXtsZXQgZT1FYih0LHRoaXMuc2l6ZSw0KTtuLnVuaWZvcm00ZnYodGhpcy5hZGRyLGUpfWZ1bmN0aW9uIF83ZShuLHQpe2xldCBlPUViKHQsdGhpcy5zaXplLDQpO24udW5pZm9ybU1hdHJpeDJmdih0aGlzLmFkZHIsITEsZSl9ZnVuY3Rpb24gdjdlKG4sdCl7bGV0IGU9RWIodCx0aGlzLnNpemUsOSk7bi51bmlmb3JtTWF0cml4M2Z2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiB5N2Uobix0KXtsZXQgZT1FYih0LHRoaXMuc2l6ZSwxNik7bi51bmlmb3JtTWF0cml4NGZ2KHRoaXMuYWRkciwhMSxlKX1mdW5jdGlvbiBiN2Uobix0KXtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHg3ZShuLHQpe24udW5pZm9ybTJpdih0aGlzLmFkZHIsdCl9ZnVuY3Rpb24gQzdlKG4sdCl7bi51bmlmb3JtM2l2KHRoaXMuYWRkcix0KX1mdW5jdGlvbiBNN2Uobix0KXtuLnVuaWZvcm00aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIHc3ZShuLHQpe24udW5pZm9ybTF1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFM3ZShuLHQpe24udW5pZm9ybTJ1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEU3ZShuLHQpe24udW5pZm9ybTN1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIFQ3ZShuLHQpe24udW5pZm9ybTR1aXYodGhpcy5hZGRyLHQpfWZ1bmN0aW9uIEQ3ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1rayhlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmUyRCh0W29dfHxMZGUscltvXSl9ZnVuY3Rpb24gQTdlKG4sdCxlKXtsZXQgaT10Lmxlbmd0aCxyPWtrKGUsaSk7bi51bmlmb3JtMWl2KHRoaXMuYWRkcixyKTtmb3IobGV0IG89MDtvIT09aTsrK28pZS5zZXRUZXh0dXJlM0QodFtvXXx8VmRlLHJbb10pfWZ1bmN0aW9uIEk3ZShuLHQsZSl7bGV0IGk9dC5sZW5ndGgscj1rayhlLGkpO24udW5pZm9ybTFpdih0aGlzLmFkZHIscik7Zm9yKGxldCBvPTA7byE9PWk7KytvKWUuc2FmZVNldFRleHR1cmVDdWJlKHRbb118fEhkZSxyW29dKX1mdW5jdGlvbiBQN2Uobix0LGUpe2xldCBpPXQubGVuZ3RoLHI9a2soZSxpKTtuLnVuaWZvcm0xaXYodGhpcy5hZGRyLHIpO2ZvcihsZXQgbz0wO28hPT1pOysrbyllLnNldFRleHR1cmUyREFycmF5KHRbb118fEJkZSxyW29dKX1mdW5jdGlvbiBPN2Uobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2V0VmFsdWU9ZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgNTEyNjpyZXR1cm4gWVdlO2Nhc2UgMzU2NjQ6cmV0dXJuIFhXZTtjYXNlIDM1NjY1OnJldHVybiBRV2U7Y2FzZSAzNTY2NjpyZXR1cm4gS1dlO2Nhc2UgMzU2NzQ6cmV0dXJuIFpXZTtjYXNlIDM1Njc1OnJldHVybiBKV2U7Y2FzZSAzNTY3NjpyZXR1cm4gJFdlO2Nhc2UgNTEyNDpjYXNlIDM1NjcwOnJldHVybiBlN2U7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOnJldHVybiB0N2U7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOnJldHVybiBuN2U7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOnJldHVybiBpN2U7Y2FzZSA1MTI1OnJldHVybiByN2U7Y2FzZSAzNjI5NDpyZXR1cm4gbzdlO2Nhc2UgMzYyOTU6cmV0dXJuIHM3ZTtjYXNlIDM2Mjk2OnJldHVybiBhN2U7Y2FzZSAzNTY3ODpjYXNlIDM2MTk4OmNhc2UgMzYyOTg6Y2FzZSAzNjMwNjpjYXNlIDM1NjgyOnJldHVybiBsN2U7Y2FzZSAzNTY3OTpjYXNlIDM2Mjk5OmNhc2UgMzYzMDc6cmV0dXJuIGM3ZTtjYXNlIDM1NjgwOmNhc2UgMzYzMDA6Y2FzZSAzNjMwODpjYXNlIDM2MjkzOnJldHVybiB1N2U7Y2FzZSAzNjI4OTpjYXNlIDM2MzAzOmNhc2UgMzYzMTE6Y2FzZSAzNjI5MjpyZXR1cm4gZDdlfX0odC50eXBlKX1mdW5jdGlvbiBVZGUobix0LGUpe3RoaXMuaWQ9bix0aGlzLmFkZHI9ZSx0aGlzLmNhY2hlPVtdLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zZXRWYWx1ZT1mdW5jdGlvbihuKXtzd2l0Y2gobil7Y2FzZSA1MTI2OnJldHVybiBoN2U7Y2FzZSAzNTY2NDpyZXR1cm4gZjdlO2Nhc2UgMzU2NjU6cmV0dXJuIG03ZTtjYXNlIDM1NjY2OnJldHVybiBnN2U7Y2FzZSAzNTY3NDpyZXR1cm4gXzdlO2Nhc2UgMzU2NzU6cmV0dXJuIHY3ZTtjYXNlIDM1Njc2OnJldHVybiB5N2U7Y2FzZSA1MTI0OmNhc2UgMzU2NzA6cmV0dXJuIGI3ZTtjYXNlIDM1NjY3OmNhc2UgMzU2NzE6cmV0dXJuIHg3ZTtjYXNlIDM1NjY4OmNhc2UgMzU2NzI6cmV0dXJuIEM3ZTtjYXNlIDM1NjY5OmNhc2UgMzU2NzM6cmV0dXJuIE03ZTtjYXNlIDUxMjU6cmV0dXJuIHc3ZTtjYXNlIDM2Mjk0OnJldHVybiBTN2U7Y2FzZSAzNjI5NTpyZXR1cm4gRTdlO2Nhc2UgMzYyOTY6cmV0dXJuIFQ3ZTtjYXNlIDM1Njc4OmNhc2UgMzYxOTg6Y2FzZSAzNjI5ODpjYXNlIDM2MzA2OmNhc2UgMzU2ODI6cmV0dXJuIEQ3ZTtjYXNlIDM1Njc5OmNhc2UgMzYyOTk6Y2FzZSAzNjMwNzpyZXR1cm4gQTdlO2Nhc2UgMzU2ODA6Y2FzZSAzNjMwMDpjYXNlIDM2MzA4OmNhc2UgMzYyOTM6cmV0dXJuIEk3ZTtjYXNlIDM2Mjg5OmNhc2UgMzYzMDM6Y2FzZSAzNjMxMTpjYXNlIDM2MjkyOnJldHVybiBQN2V9fSh0LnR5cGUpfWZ1bmN0aW9uIHpkZShuKXt0aGlzLmlkPW4sdGhpcy5zZXE9W10sdGhpcy5tYXA9e319VWRlLnByb3RvdHlwZS51cGRhdGVDYWNoZT1mdW5jdGlvbihuKXtsZXQgdD10aGlzLmNhY2hlO24gaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJnQubGVuZ3RoIT09bi5sZW5ndGgmJih0aGlzLmNhY2hlPW5ldyBGbG9hdDMyQXJyYXkobi5sZW5ndGgpKSxZcyh0LG4pfSx6ZGUucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKG4sdCxlKXtsZXQgaT10aGlzLnNlcTtmb3IobGV0IHI9MCxvPWkubGVuZ3RoO3IhPT1vOysrcil7bGV0IHM9aVtyXTtzLnNldFZhbHVlKG4sdFtzLmlkXSxlKX19O3ZhciAkaj0vKFx3KykoXF0pPyhcW3xcLik/L2c7ZnVuY3Rpb24gcXVlKG4sdCl7bi5zZXEucHVzaCh0KSxuLm1hcFt0LmlkXT10fWZ1bmN0aW9uIGs3ZShuLHQsZSl7bGV0IGk9bi5uYW1lLHI9aS5sZW5ndGg7Zm9yKCRqLmxhc3RJbmRleD0wOzspe2xldCBvPSRqLmV4ZWMoaSkscz0kai5sYXN0SW5kZXgsYT1vWzFdLGM9b1szXTtpZigiXSI9PT1vWzJdJiYoYXw9MCksdm9pZCAwPT09Y3x8IlsiPT09YyYmcysyPT09cil7cXVlKGUsdm9pZCAwPT09Yz9uZXcgTzdlKGEsbix0KTpuZXcgVWRlKGEsbix0KSk7YnJlYWt9e2xldCBkPWUubWFwW2FdO3ZvaWQgMD09PWQmJihkPW5ldyB6ZGUoYSkscXVlKGUsZCkpLGU9ZH19fWZ1bmN0aW9uIHlmKG4sdCl7dGhpcy5zZXE9W10sdGhpcy5tYXA9e307bGV0IGU9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MTgpO2ZvcihsZXQgaT0wO2k8ZTsrK2kpe2xldCByPW4uZ2V0QWN0aXZlVW5pZm9ybSh0LGkpO2s3ZShyLG4uZ2V0VW5pZm9ybUxvY2F0aW9uKHQsci5uYW1lKSx0aGlzKX19ZnVuY3Rpb24gWXVlKG4sdCxlKXtsZXQgaT1uLmNyZWF0ZVNoYWRlcih0KTtyZXR1cm4gbi5zaGFkZXJTb3VyY2UoaSxlKSxuLmNvbXBpbGVTaGFkZXIoaSksaX15Zi5wcm90b3R5cGUuc2V0VmFsdWU9ZnVuY3Rpb24obix0LGUsaSl7bGV0IHI9dGhpcy5tYXBbdF07dm9pZCAwIT09ciYmci5zZXRWYWx1ZShuLGUsaSl9LHlmLnByb3RvdHlwZS5zZXRPcHRpb25hbD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9dFtlXTt2b2lkIDAhPT1pJiZ0aGlzLnNldFZhbHVlKG4sZSxpKX0seWYudXBsb2FkPWZ1bmN0aW9uKG4sdCxlLGkpe2ZvcihsZXQgcj0wLG89dC5sZW5ndGg7ciE9PW87KytyKXtsZXQgcz10W3JdLGE9ZVtzLmlkXTshMSE9PWEubmVlZHNVcGRhdGUmJnMuc2V0VmFsdWUobixhLnZhbHVlLGkpfX0seWYuc2VxV2l0aFZhbHVlPWZ1bmN0aW9uKG4sdCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj1uLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPW5baV07by5pZCBpbiB0JiZlLnB1c2gobyl9cmV0dXJuIGV9O3ZhciBGN2U9MDtmdW5jdGlvbiBYdWUobix0LGUpe2xldCBpPW4uZ2V0U2hhZGVyUGFyYW1ldGVyKHQsMzU3MTMpLHI9bi5nZXRTaGFkZXJJbmZvTG9nKHQpLnRyaW0oKTtyZXR1cm4gaSYmIiI9PT1yPyIiOmUudG9VcHBlckNhc2UoKSsiXG5cbiIrcisiXG5cbiIrZnVuY3Rpb24obil7bGV0IHQ9bi5zcGxpdCgiXG4iKTtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPWUrMSsiOiAiK3RbZV07cmV0dXJuIHQuam9pbigiXG4iKX0obi5nZXRTaGFkZXJTb3VyY2UodCkpfWZ1bmN0aW9uIEI3ZShuLHQpe2xldCBlPWZ1bmN0aW9uKG4pe3N3aXRjaChuKXtjYXNlIGJmOnJldHVyblsiTGluZWFyIiwiKCB2YWx1ZSApIl07Y2FzZSBXcjpyZXR1cm5bInNSR0IiLCIoIHZhbHVlICkiXTtkZWZhdWx0OnJldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbTogVW5zdXBwb3J0ZWQgZW5jb2Rpbmc6IixuKSxbIkxpbmVhciIsIiggdmFsdWUgKSJdfX0odCk7cmV0dXJuInZlYzQgIituKyIoIHZlYzQgdmFsdWUgKSB7IHJldHVybiBMaW5lYXJUbyIrZVswXStlWzFdKyI7IH0ifWZ1bmN0aW9uIFY3ZShuLHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDE6ZT0iTGluZWFyIjticmVhaztjYXNlIDI6ZT0iUmVpbmhhcmQiO2JyZWFrO2Nhc2UgMzplPSJPcHRpbWl6ZWRDaW5lb24iO2JyZWFrO2Nhc2UgNDplPSJBQ0VTRmlsbWljIjticmVhaztjYXNlIDU6ZT0iQ3VzdG9tIjticmVhaztkZWZhdWx0OmNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBVbnN1cHBvcnRlZCB0b25lTWFwcGluZzoiLHQpLGU9IkxpbmVhciJ9cmV0dXJuInZlYzMgIituKyIoIHZlYzMgY29sb3IgKSB7IHJldHVybiAiK2UrIlRvbmVNYXBwaW5nKCBjb2xvciApOyB9In1mdW5jdGlvbiBWUyhuKXtyZXR1cm4iIiE9PW59ZnVuY3Rpb24gUXVlKG4sdCl7cmV0dXJuIG4ucmVwbGFjZSgvTlVNX0RJUl9MSUdIVFMvZyx0Lm51bURpckxpZ2h0cykucmVwbGFjZSgvTlVNX1NQT1RfTElHSFRTL2csdC5udW1TcG90TGlnaHRzKS5yZXBsYWNlKC9OVU1fUkVDVF9BUkVBX0xJR0hUUy9nLHQubnVtUmVjdEFyZWFMaWdodHMpLnJlcGxhY2UoL05VTV9QT0lOVF9MSUdIVFMvZyx0Lm51bVBvaW50TGlnaHRzKS5yZXBsYWNlKC9OVU1fSEVNSV9MSUdIVFMvZyx0Lm51bUhlbWlMaWdodHMpLnJlcGxhY2UoL05VTV9ESVJfTElHSFRfU0hBRE9XUy9nLHQubnVtRGlyTGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fU1BPVF9MSUdIVF9TSEFET1dTL2csdC5udW1TcG90TGlnaHRTaGFkb3dzKS5yZXBsYWNlKC9OVU1fUE9JTlRfTElHSFRfU0hBRE9XUy9nLHQubnVtUG9pbnRMaWdodFNoYWRvd3MpfWZ1bmN0aW9uIEt1ZShuLHQpe3JldHVybiBuLnJlcGxhY2UoL05VTV9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzKS5yZXBsYWNlKC9VTklPTl9DTElQUElOR19QTEFORVMvZyx0Lm51bUNsaXBwaW5nUGxhbmVzLXQubnVtQ2xpcEludGVyc2VjdGlvbil9dmFyIGo3ZT0vXlsgXHRdKiNpbmNsdWRlICs8KFtcd1xkLi9dKyk+L2dtO2Z1bmN0aW9uIGc4KG4pe3JldHVybiBuLnJlcGxhY2UoajdlLEc3ZSl9ZnVuY3Rpb24gRzdlKG4sdCl7bGV0IGU9RGlbdF07aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoIkNhbiBub3QgcmVzb2x2ZSAjaW5jbHVkZSA8Iit0KyI+Iik7cmV0dXJuIGc4KGUpfXZhciBXN2U9LyNwcmFnbWEgdW5yb2xsX2xvb3BbXHNdKz9mb3IgXCggaW50IGkgXD0gKFxkKylcOyBpIDwgKFxkKylcOyBpIFwrXCsgXCkgXHsoW1xzXFNdKz8pKD89XH0pXH0vZyxxN2U9LyNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnRccytmb3JccypcKFxzKmludFxzK2lccyo9XHMqKFxkKylccyo7XHMqaVxzKjxccyooXGQrKVxzKjtccyppXHMqXCtcK1xzKlwpXHMqeyhbXHNcU10rPyl9XHMrI3ByYWdtYSB1bnJvbGxfbG9vcF9lbmQvZztmdW5jdGlvbiBadWUobil7cmV0dXJuIG4ucmVwbGFjZShxN2UsamRlKS5yZXBsYWNlKFc3ZSxZN2UpfWZ1bmN0aW9uIFk3ZShuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJXZWJHTFByb2dyYW06ICNwcmFnbWEgdW5yb2xsX2xvb3Agc2hhZGVyIHN5bnRheCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlICNwcmFnbWEgdW5yb2xsX2xvb3Bfc3RhcnQgc3ludGF4IGluc3RlYWQuIiksamRlKDAsdCxlLGkpfWZ1bmN0aW9uIGpkZShuLHQsZSxpKXtsZXQgcj0iIjtmb3IobGV0IG89cGFyc2VJbnQodCk7bzxwYXJzZUludChlKTtvKyspcis9aS5yZXBsYWNlKC9cW1xzKmlccypcXS9nLCJbICIrbysiIF0iKS5yZXBsYWNlKC9VTlJPTExFRF9MT09QX0lOREVYL2csbyk7cmV0dXJuIHJ9ZnVuY3Rpb24gSnVlKG4pe2xldCB0PSJwcmVjaXNpb24gIituLnByZWNpc2lvbisiIGZsb2F0O1xucHJlY2lzaW9uICIrbi5wcmVjaXNpb24rIiBpbnQ7IjtyZXR1cm4iaGlnaHAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBISUdIX1BSRUNJU0lPTiI6Im1lZGl1bXAiPT09bi5wcmVjaXNpb24/dCs9IlxuI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIjoibG93cCI9PT1uLnByZWNpc2lvbiYmKHQrPSJcbiNkZWZpbmUgTE9XX1BSRUNJU0lPTiIpLHR9ZnVuY3Rpb24gSjdlKG4sdCxlLGkpe2xldCBtLHgscj1uLmdldENvbnRleHQoKSxvPWUuZGVmaW5lcyxzPWUudmVydGV4U2hhZGVyLGE9ZS5mcmFnbWVudFNoYWRlcixsPWZ1bmN0aW9uKG4pe2xldCB0PSJTSEFET1dNQVBfVFlQRV9CQVNJQyI7cmV0dXJuIDE9PT1uLnNoYWRvd01hcFR5cGU/dD0iU0hBRE9XTUFQX1RZUEVfUENGIjoyPT09bi5zaGFkb3dNYXBUeXBlP3Q9IlNIQURPV01BUF9UWVBFX1BDRl9TT0ZUIjozPT09bi5zaGFkb3dNYXBUeXBlJiYodD0iU0hBRE9XTUFQX1RZUEVfVlNNIiksdH0oZSksYz1mdW5jdGlvbihuKXtsZXQgdD0iRU5WTUFQX1RZUEVfQ1VCRSI7aWYobi5lbnZNYXApc3dpdGNoKG4uZW52TWFwTW9kZSl7Y2FzZSAzMDE6Y2FzZSAzMDI6dD0iRU5WTUFQX1RZUEVfQ1VCRSI7YnJlYWs7Y2FzZSAzMDY6Y2FzZSAzMDc6dD0iRU5WTUFQX1RZUEVfQ1VCRV9VViJ9cmV0dXJuIHR9KGUpLHU9ZnVuY3Rpb24obil7bGV0IHQ9IkVOVk1BUF9NT0RFX1JFRkxFQ1RJT04iO2lmKG4uZW52TWFwKXN3aXRjaChuLmVudk1hcE1vZGUpe2Nhc2UgMzAyOmNhc2UgMzA3OnQ9IkVOVk1BUF9NT0RFX1JFRlJBQ1RJT04ifXJldHVybiB0fShlKSxkPWZ1bmN0aW9uKG4pe2xldCB0PSJFTlZNQVBfQkxFTkRJTkdfTk9ORSI7aWYobi5lbnZNYXApc3dpdGNoKG4uY29tYmluZSl7Y2FzZSAwOnQ9IkVOVk1BUF9CTEVORElOR19NVUxUSVBMWSI7YnJlYWs7Y2FzZSAxOnQ9IkVOVk1BUF9CTEVORElOR19NSVgiO2JyZWFrO2Nhc2UgMjp0PSJFTlZNQVBfQkxFTkRJTkdfQUREIn1yZXR1cm4gdH0oZSkscD1lLmlzV2ViR0wyPyIiOmZ1bmN0aW9uKG4pe3JldHVybltuLmV4dGVuc2lvbkRlcml2YXRpdmVzfHxuLmVudk1hcEN1YmVVVnx8bi5idW1wTWFwfHxuLnRhbmdlbnRTcGFjZU5vcm1hbE1hcHx8bi5jbGVhcmNvYXROb3JtYWxNYXB8fG4uZmxhdFNoYWRpbmd8fCJwaHlzaWNhbCI9PT1uLnNoYWRlcklEPyIjZXh0ZW5zaW9uIEdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA6IGVuYWJsZSI6IiIsKG4uZXh0ZW5zaW9uRnJhZ0RlcHRofHxuLmxvZ2FyaXRobWljRGVwdGhCdWZmZXIpJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZXh0ZW5zaW9uIEdMX0VYVF9mcmFnX2RlcHRoIDogZW5hYmxlIjoiIixuLmV4dGVuc2lvbkRyYXdCdWZmZXJzJiZuLnJlbmRlcmVyRXh0ZW5zaW9uRHJhd0J1ZmZlcnM/IiNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUiOiIiLChuLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fG4uZW52TWFwfHxuLnRyYW5zbWlzc2lvbikmJm4ucmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kPyIjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgOiBlbmFibGUiOiIiXS5maWx0ZXIoVlMpLmpvaW4oIlxuIil9KGUpLGg9ZnVuY3Rpb24obil7bGV0IHQ9W107Zm9yKGxldCBlIGluIG4pe2xldCBpPW5bZV07ITEhPT1pJiZ0LnB1c2goIiNkZWZpbmUgIitlKyIgIitpKX1yZXR1cm4gdC5qb2luKCJcbiIpfShvKSxmPXIuY3JlYXRlUHJvZ3JhbSgpLGc9ZS5nbHNsVmVyc2lvbj8iI3ZlcnNpb24gIitlLmdsc2xWZXJzaW9uKyJcbiI6IiI7ZS5pc1Jhd1NoYWRlck1hdGVyaWFsPyhtPVtoXS5maWx0ZXIoVlMpLmpvaW4oIlxuIiksbS5sZW5ndGg+MCYmKG0rPSJcbiIpLHg9W3AsaF0uZmlsdGVyKFZTKS5qb2luKCJcbiIpLHgubGVuZ3RoPjAmJih4Kz0iXG4iKSk6KG09W0p1ZShlKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK2Uuc2hhZGVyTmFtZSxoLGUuaW5zdGFuY2luZz8iI2RlZmluZSBVU0VfSU5TVEFOQ0lORyI6IiIsZS5pbnN0YW5jaW5nQ29sb3I/IiNkZWZpbmUgVVNFX0lOU1RBTkNJTkdfQ09MT1IiOiIiLGUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBWRVJURVhfVEVYVFVSRVMiOiIiLCIjZGVmaW5lIE1BWF9CT05FUyAiK2UubWF4Qm9uZXMsZS51c2VGb2cmJmUuZm9nPyIjZGVmaW5lIFVTRV9GT0ciOiIiLGUudXNlRm9nJiZlLmZvZ0V4cDI/IiNkZWZpbmUgRk9HX0VYUDIiOiIiLGUubWFwPyIjZGVmaW5lIFVTRV9NQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lIFVTRV9FTlZNQVAiOiIiLGUuZW52TWFwPyIjZGVmaW5lICIrdToiIixlLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZS5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGUuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixlLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGUubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLGUuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixlLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsZS5kaXNwbGFjZW1lbnRNYXAmJmUuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcz8iI2RlZmluZSBVU0VfRElTUExBQ0VNRU5UTUFQIjoiIixlLnNwZWN1bGFyTWFwPyIjZGVmaW5lIFVTRV9TUEVDVUxBUk1BUCI6IiIsZS5zcGVjdWxhckludGVuc2l0eU1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJJTlRFTlNJVFlNQVAiOiIiLGUuc3BlY3VsYXJDb2xvck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJDT0xPUk1BUCI6IiIsZS5yb3VnaG5lc3NNYXA/IiNkZWZpbmUgVVNFX1JPVUdITkVTU01BUCI6IiIsZS5tZXRhbG5lc3NNYXA/IiNkZWZpbmUgVVNFX01FVEFMTkVTU01BUCI6IiIsZS5hbHBoYU1hcD8iI2RlZmluZSBVU0VfQUxQSEFNQVAiOiIiLGUudHJhbnNtaXNzaW9uPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT04iOiIiLGUudHJhbnNtaXNzaW9uTWFwPyIjZGVmaW5lIFVTRV9UUkFOU01JU1NJT05NQVAiOiIiLGUudGhpY2tuZXNzTWFwPyIjZGVmaW5lIFVTRV9USElDS05FU1NNQVAiOiIiLGUuc2hlZW5Db2xvck1hcD8iI2RlZmluZSBVU0VfU0hFRU5DT0xPUk1BUCI6IiIsZS5zaGVlblJvdWdobmVzc01hcD8iI2RlZmluZSBVU0VfU0hFRU5ST1VHSE5FU1NNQVAiOiIiLGUudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLGUudmVydGV4Q29sb3JzPyIjZGVmaW5lIFVTRV9DT0xPUiI6IiIsZS52ZXJ0ZXhBbHBoYXM/IiNkZWZpbmUgVVNFX0NPTE9SX0FMUEhBIjoiIixlLnZlcnRleFV2cz8iI2RlZmluZSBVU0VfVVYiOiIiLGUudXZzVmVydGV4T25seT8iI2RlZmluZSBVVlNfVkVSVEVYX09OTFkiOiIiLGUuZmxhdFNoYWRpbmc/IiNkZWZpbmUgRkxBVF9TSEFERUQiOiIiLGUuc2tpbm5pbmc/IiNkZWZpbmUgVVNFX1NLSU5OSU5HIjoiIixlLnVzZVZlcnRleFRleHR1cmU/IiNkZWZpbmUgQk9ORV9URVhUVVJFIjoiIixlLm1vcnBoVGFyZ2V0cz8iI2RlZmluZSBVU0VfTU9SUEhUQVJHRVRTIjoiIixlLm1vcnBoTm9ybWFscyYmITE9PT1lLmZsYXRTaGFkaW5nPyIjZGVmaW5lIFVTRV9NT1JQSE5PUk1BTFMiOiIiLGUubW9ycGhUYXJnZXRzJiZlLmlzV2ViR0wyPyIjZGVmaW5lIE1PUlBIVEFSR0VUU19URVhUVVJFIjoiIixlLm1vcnBoVGFyZ2V0cyYmZS5pc1dlYkdMMj8iI2RlZmluZSBNT1JQSFRBUkdFVFNfQ09VTlQgIitlLm1vcnBoVGFyZ2V0c0NvdW50OiIiLGUuZG91YmxlU2lkZWQ/IiNkZWZpbmUgRE9VQkxFX1NJREVEIjoiIixlLmZsaXBTaWRlZD8iI2RlZmluZSBGTElQX1NJREVEIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgVVNFX1NIQURPV01BUCI6IiIsZS5zaGFkb3dNYXBFbmFibGVkPyIjZGVmaW5lICIrbDoiIixlLnNpemVBdHRlbnVhdGlvbj8iI2RlZmluZSBVU0VfU0laRUFUVEVOVUFUSU9OIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXI/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGIjoiIixlLmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJmUucmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg/IiNkZWZpbmUgVVNFX0xPR0RFUFRIQlVGX0VYVCI6IiIsInVuaWZvcm0gbWF0NCBtb2RlbE1hdHJpeDsiLCJ1bmlmb3JtIG1hdDQgbW9kZWxWaWV3TWF0cml4OyIsInVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4OyIsInVuaWZvcm0gbWF0NCB2aWV3TWF0cml4OyIsInVuaWZvcm0gbWF0MyBub3JtYWxNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLCIjaWZkZWYgVVNFX0lOU1RBTkNJTkciLCJcdGF0dHJpYnV0ZSBtYXQ0IGluc3RhbmNlTWF0cml4OyIsIiNlbmRpZiIsIiNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUiIsIlx0YXR0cmlidXRlIHZlYzMgaW5zdGFuY2VDb2xvcjsiLCIjZW5kaWYiLCJhdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjsiLCJhdHRyaWJ1dGUgdmVjMyBub3JtYWw7IiwiYXR0cmlidXRlIHZlYzIgdXY7IiwiI2lmZGVmIFVTRV9UQU5HRU5UIiwiXHRhdHRyaWJ1dGUgdmVjNCB0YW5nZW50OyIsIiNlbmRpZiIsIiNpZiBkZWZpbmVkKCBVU0VfQ09MT1JfQUxQSEEgKSIsIlx0YXR0cmlidXRlIHZlYzQgY29sb3I7IiwiI2VsaWYgZGVmaW5lZCggVVNFX0NPTE9SICkiLCJcdGF0dHJpYnV0ZSB2ZWMzIGNvbG9yOyIsIiNlbmRpZiIsIiNpZiAoIGRlZmluZWQoIFVTRV9NT1JQSFRBUkdFVFMgKSAmJiAhIGRlZmluZWQoIE1PUlBIVEFSR0VUU19URVhUVVJFICkgKSIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQwOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQxOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQyOyIsIlx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQzOyIsIlx0I2lmZGVmIFVTRV9NT1JQSE5PUk1BTFMiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwwOyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaE5vcm1hbDE7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoTm9ybWFsMjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhOb3JtYWwzOyIsIlx0I2Vsc2UiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ0OyIsIlx0XHRhdHRyaWJ1dGUgdmVjMyBtb3JwaFRhcmdldDU7IiwiXHRcdGF0dHJpYnV0ZSB2ZWMzIG1vcnBoVGFyZ2V0NjsiLCJcdFx0YXR0cmlidXRlIHZlYzMgbW9ycGhUYXJnZXQ3OyIsIlx0I2VuZGlmIiwiI2VuZGlmIiwiI2lmZGVmIFVTRV9TS0lOTklORyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbkluZGV4OyIsIlx0YXR0cmlidXRlIHZlYzQgc2tpbldlaWdodDsiLCIjZW5kaWYiLCJcbiJdLmZpbHRlcihWUykuam9pbigiXG4iKSx4PVtwLEp1ZShlKSwiI2RlZmluZSBTSEFERVJfTkFNRSAiK2Uuc2hhZGVyTmFtZSxoLGUudXNlRm9nJiZlLmZvZz8iI2RlZmluZSBVU0VfRk9HIjoiIixlLnVzZUZvZyYmZS5mb2dFeHAyPyIjZGVmaW5lIEZPR19FWFAyIjoiIixlLm1hcD8iI2RlZmluZSBVU0VfTUFQIjoiIixlLm1hdGNhcD8iI2RlZmluZSBVU0VfTUFUQ0FQIjoiIixlLmVudk1hcD8iI2RlZmluZSBVU0VfRU5WTUFQIjoiIixlLmVudk1hcD8iI2RlZmluZSAiK2M6IiIsZS5lbnZNYXA/IiNkZWZpbmUgIit1OiIiLGUuZW52TWFwPyIjZGVmaW5lICIrZDoiIixlLmxpZ2h0TWFwPyIjZGVmaW5lIFVTRV9MSUdIVE1BUCI6IiIsZS5hb01hcD8iI2RlZmluZSBVU0VfQU9NQVAiOiIiLGUuZW1pc3NpdmVNYXA/IiNkZWZpbmUgVVNFX0VNSVNTSVZFTUFQIjoiIixlLmJ1bXBNYXA/IiNkZWZpbmUgVVNFX0JVTVBNQVAiOiIiLGUubm9ybWFsTWFwPyIjZGVmaW5lIFVTRV9OT1JNQUxNQVAiOiIiLGUubm9ybWFsTWFwJiZlLm9iamVjdFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIE9CSkVDVFNQQUNFX05PUk1BTE1BUCI6IiIsZS5ub3JtYWxNYXAmJmUudGFuZ2VudFNwYWNlTm9ybWFsTWFwPyIjZGVmaW5lIFRBTkdFTlRTUEFDRV9OT1JNQUxNQVAiOiIiLGUuY2xlYXJjb2F0PyIjZGVmaW5lIFVTRV9DTEVBUkNPQVQiOiIiLGUuY2xlYXJjb2F0TWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRNQVAiOiIiLGUuY2xlYXJjb2F0Um91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9DTEVBUkNPQVRfUk9VR0hORVNTTUFQIjoiIixlLmNsZWFyY29hdE5vcm1hbE1hcD8iI2RlZmluZSBVU0VfQ0xFQVJDT0FUX05PUk1BTE1BUCI6IiIsZS5zcGVjdWxhck1hcD8iI2RlZmluZSBVU0VfU1BFQ1VMQVJNQVAiOiIiLGUuc3BlY3VsYXJJbnRlbnNpdHlNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSSU5URU5TSVRZTUFQIjoiIixlLnNwZWN1bGFyQ29sb3JNYXA/IiNkZWZpbmUgVVNFX1NQRUNVTEFSQ09MT1JNQVAiOiIiLGUucm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9ST1VHSE5FU1NNQVAiOiIiLGUubWV0YWxuZXNzTWFwPyIjZGVmaW5lIFVTRV9NRVRBTE5FU1NNQVAiOiIiLGUuYWxwaGFNYXA/IiNkZWZpbmUgVVNFX0FMUEhBTUFQIjoiIixlLmFscGhhVGVzdD8iI2RlZmluZSBVU0VfQUxQSEFURVNUIjoiIixlLnNoZWVuPyIjZGVmaW5lIFVTRV9TSEVFTiI6IiIsZS5zaGVlbkNvbG9yTWFwPyIjZGVmaW5lIFVTRV9TSEVFTkNPTE9STUFQIjoiIixlLnNoZWVuUm91Z2huZXNzTWFwPyIjZGVmaW5lIFVTRV9TSEVFTlJPVUdITkVTU01BUCI6IiIsZS50cmFuc21pc3Npb24/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTiI6IiIsZS50cmFuc21pc3Npb25NYXA/IiNkZWZpbmUgVVNFX1RSQU5TTUlTU0lPTk1BUCI6IiIsZS50aGlja25lc3NNYXA/IiNkZWZpbmUgVVNFX1RISUNLTkVTU01BUCI6IiIsZS5kZWNvZGVWaWRlb1RleHR1cmU/IiNkZWZpbmUgREVDT0RFX1ZJREVPX1RFWFRVUkUiOiIiLGUudmVydGV4VGFuZ2VudHM/IiNkZWZpbmUgVVNFX1RBTkdFTlQiOiIiLGUudmVydGV4Q29sb3JzfHxlLmluc3RhbmNpbmdDb2xvcj8iI2RlZmluZSBVU0VfQ09MT1IiOiIiLGUudmVydGV4QWxwaGFzPyIjZGVmaW5lIFVTRV9DT0xPUl9BTFBIQSI6IiIsZS52ZXJ0ZXhVdnM/IiNkZWZpbmUgVVNFX1VWIjoiIixlLnV2c1ZlcnRleE9ubHk/IiNkZWZpbmUgVVZTX1ZFUlRFWF9PTkxZIjoiIixlLmdyYWRpZW50TWFwPyIjZGVmaW5lIFVTRV9HUkFESUVOVE1BUCI6IiIsZS5mbGF0U2hhZGluZz8iI2RlZmluZSBGTEFUX1NIQURFRCI6IiIsZS5kb3VibGVTaWRlZD8iI2RlZmluZSBET1VCTEVfU0lERUQiOiIiLGUuZmxpcFNpZGVkPyIjZGVmaW5lIEZMSVBfU0lERUQiOiIiLGUuc2hhZG93TWFwRW5hYmxlZD8iI2RlZmluZSBVU0VfU0hBRE9XTUFQIjoiIixlLnNoYWRvd01hcEVuYWJsZWQ/IiNkZWZpbmUgIitsOiIiLGUucHJlbXVsdGlwbGllZEFscGhhPyIjZGVmaW5lIFBSRU1VTFRJUExJRURfQUxQSEEiOiIiLGUucGh5c2ljYWxseUNvcnJlY3RMaWdodHM/IiNkZWZpbmUgUEhZU0lDQUxMWV9DT1JSRUNUX0xJR0hUUyI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRiI6IiIsZS5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZlLnJlbmRlcmVyRXh0ZW5zaW9uRnJhZ0RlcHRoPyIjZGVmaW5lIFVTRV9MT0dERVBUSEJVRl9FWFQiOiIiLChlLmV4dGVuc2lvblNoYWRlclRleHR1cmVMT0R8fGUuZW52TWFwKSYmZS5yZW5kZXJlckV4dGVuc2lvblNoYWRlclRleHR1cmVMb2Q/IiNkZWZpbmUgVEVYVFVSRV9MT0RfRVhUIjoiIiwidW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXg7IiwidW5pZm9ybSB2ZWMzIGNhbWVyYVBvc2l0aW9uOyIsInVuaWZvcm0gYm9vbCBpc09ydGhvZ3JhcGhpYzsiLDAhPT1lLnRvbmVNYXBwaW5nPyIjZGVmaW5lIFRPTkVfTUFQUElORyI6IiIsMCE9PWUudG9uZU1hcHBpbmc/RGkudG9uZW1hcHBpbmdfcGFyc19mcmFnbWVudDoiIiwwIT09ZS50b25lTWFwcGluZz9WN2UoInRvbmVNYXBwaW5nIixlLnRvbmVNYXBwaW5nKToiIixlLmRpdGhlcmluZz8iI2RlZmluZSBESVRIRVJJTkciOiIiLGUuYWxwaGFXcml0ZT8iIjoiI2RlZmluZSBPUEFRVUUiLERpLmVuY29kaW5nc19wYXJzX2ZyYWdtZW50LEI3ZSgibGluZWFyVG9PdXRwdXRUZXhlbCIsZS5vdXRwdXRFbmNvZGluZyksZS5kZXB0aFBhY2tpbmc/IiNkZWZpbmUgREVQVEhfUEFDS0lORyAiK2UuZGVwdGhQYWNraW5nOiIiLCJcbiJdLmZpbHRlcihWUykuam9pbigiXG4iKSkscz1nOChzKSxzPVF1ZShzLGUpLHM9S3VlKHMsZSksYT1nOChhKSxhPVF1ZShhLGUpLGE9S3VlKGEsZSkscz1adWUocyksYT1adWUoYSksZS5pc1dlYkdMMiYmITAhPT1lLmlzUmF3U2hhZGVyTWF0ZXJpYWwmJihnPSIjdmVyc2lvbiAzMDAgZXNcbiIsbT1bInByZWNpc2lvbiBtZWRpdW1wIHNhbXBsZXIyREFycmF5OyIsIiNkZWZpbmUgYXR0cmlidXRlIGluIiwiI2RlZmluZSB2YXJ5aW5nIG91dCIsIiNkZWZpbmUgdGV4dHVyZTJEIHRleHR1cmUiXS5qb2luKCJcbiIpKyJcbiIrbSx4PVsiI2RlZmluZSB2YXJ5aW5nIGluIiwiMzAwIGVzIj09PWUuZ2xzbFZlcnNpb24/IiI6ImxheW91dChsb2NhdGlvbiA9IDApIG91dCBoaWdocCB2ZWM0IHBjX2ZyYWdDb2xvcjsiLCIzMDAgZXMiPT09ZS5nbHNsVmVyc2lvbj8iIjoiI2RlZmluZSBnbF9GcmFnQ29sb3IgcGNfZnJhZ0NvbG9yIiwiI2RlZmluZSBnbF9GcmFnRGVwdGhFWFQgZ2xfRnJhZ0RlcHRoIiwiI2RlZmluZSB0ZXh0dXJlMkQgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZUN1YmUgdGV4dHVyZSIsIiNkZWZpbmUgdGV4dHVyZTJEUHJvaiB0ZXh0dXJlUHJvaiIsIiNkZWZpbmUgdGV4dHVyZTJETG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pMb2RFWFQgdGV4dHVyZVByb2pMb2QiLCIjZGVmaW5lIHRleHR1cmVDdWJlTG9kRVhUIHRleHR1cmVMb2QiLCIjZGVmaW5lIHRleHR1cmUyREdyYWRFWFQgdGV4dHVyZUdyYWQiLCIjZGVmaW5lIHRleHR1cmUyRFByb2pHcmFkRVhUIHRleHR1cmVQcm9qR3JhZCIsIiNkZWZpbmUgdGV4dHVyZUN1YmVHcmFkRVhUIHRleHR1cmVHcmFkIl0uam9pbigiXG4iKSsiXG4iK3gpO2xldCBaLHosRD1nK3grYSxUPVl1ZShyLDM1NjMzLGcrbStzKSxrPVl1ZShyLDM1NjMyLEQpO2lmKHIuYXR0YWNoU2hhZGVyKGYsVCksci5hdHRhY2hTaGFkZXIoZixrKSx2b2lkIDAhPT1lLmluZGV4MEF0dHJpYnV0ZU5hbWU/ci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLGUuaW5kZXgwQXR0cmlidXRlTmFtZSk6ITA9PT1lLm1vcnBoVGFyZ2V0cyYmci5iaW5kQXR0cmliTG9jYXRpb24oZiwwLCJwb3NpdGlvbiIpLHIubGlua1Byb2dyYW0oZiksbi5kZWJ1Zy5jaGVja1NoYWRlckVycm9ycyl7bGV0IGZlPXIuZ2V0UHJvZ3JhbUluZm9Mb2coZikudHJpbSgpLHVlPXIuZ2V0U2hhZGVySW5mb0xvZyhUKS50cmltKCksaGU9ci5nZXRTaGFkZXJJbmZvTG9nKGspLnRyaW0oKSx3PSEwLEY9ITA7aWYoITE9PT1yLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNCkpe3c9ITE7bGV0IHE9WHVlKHIsVCwidmVydGV4IiksSz1YdWUocixrLCJmcmFnbWVudCIpO2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUHJvZ3JhbTogU2hhZGVyIEVycm9yICIrci5nZXRFcnJvcigpKyIgLSBWQUxJREFURV9TVEFUVVMgIityLmdldFByb2dyYW1QYXJhbWV0ZXIoZiwzNTcxNSkrIlxuXG5Qcm9ncmFtIEluZm8gTG9nOiAiK2ZlKyJcbiIrcSsiXG4iK0spfWVsc2UiIiE9PWZlP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xQcm9ncmFtOiBQcm9ncmFtIEluZm8gTG9nOiIsZmUpOigiIj09PXVlfHwiIj09PWhlKSYmKEY9ITEpO0YmJih0aGlzLmRpYWdub3N0aWNzPXtydW5uYWJsZTp3LHByb2dyYW1Mb2c6ZmUsdmVydGV4U2hhZGVyOntsb2c6dWUscHJlZml4Om19LGZyYWdtZW50U2hhZGVyOntsb2c6aGUscHJlZml4Onh9fSl9cmV0dXJuIHIuZGVsZXRlU2hhZGVyKFQpLHIuZGVsZXRlU2hhZGVyKGspLHRoaXMuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09WiYmKFo9bmV3IHlmKHIsZikpLFp9LHRoaXMuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT16JiYoej1mdW5jdGlvbihuLHQpe2xldCBlPXt9LGk9bi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsMzU3MjEpO2ZvcihsZXQgcj0wO3I8aTtyKyspe2xldCBvPW4uZ2V0QWN0aXZlQXR0cmliKHQscikscz1vLm5hbWUsYT0xOzM1Njc0PT09by50eXBlJiYoYT0yKSwzNTY3NT09PW8udHlwZSYmKGE9MyksMzU2NzY9PT1vLnR5cGUmJihhPTQpLGVbc109e3R5cGU6by50eXBlLGxvY2F0aW9uOm4uZ2V0QXR0cmliTG9jYXRpb24odCxzKSxsb2NhdGlvblNpemU6YX19cmV0dXJuIGV9KHIsZikpLHp9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2kucmVsZWFzZVN0YXRlc09mUHJvZ3JhbSh0aGlzKSxyLmRlbGV0ZVByb2dyYW0oZiksdGhpcy5wcm9ncmFtPXZvaWQgMH0sdGhpcy5uYW1lPWUuc2hhZGVyTmFtZSx0aGlzLmlkPUY3ZSsrLHRoaXMuY2FjaGVLZXk9dCx0aGlzLnVzZWRUaW1lcz0xLHRoaXMucHJvZ3JhbT1mLHRoaXMudmVydGV4U2hhZGVyPVQsdGhpcy5mcmFnbWVudFNoYWRlcj1rLHRoaXN9dmFyICQ3ZT0wO2Z1bmN0aW9uIGU5ZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1uZXcgc2ssbD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYWRlckNhY2hlPW5ldyBNYXAsdGhpcy5tYXRlcmlhbENhY2hlPW5ldyBNYXB9dXBkYXRlKHQpe2xldCBpPXQuZnJhZ21lbnRTaGFkZXIscj10aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlciksbz10aGlzLl9nZXRTaGFkZXJTdGFnZShpKSxzPXRoaXMuX2dldFNoYWRlckNhY2hlRm9yTWF0ZXJpYWwodCk7cmV0dXJuITE9PT1zLmhhcyhyKSYmKHMuYWRkKHIpLHIudXNlZFRpbWVzKyspLCExPT09cy5oYXMobykmJihzLmFkZChvKSxvLnVzZWRUaW1lcysrKSx0aGlzfXJlbW92ZSh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGUuZ2V0KHQpO2ZvcihsZXQgaSBvZiBlKWkudXNlZFRpbWVzLS0sMD09PWkudXNlZFRpbWVzJiZ0aGlzLnNoYWRlckNhY2hlLmRlbGV0ZShpKTtyZXR1cm4gdGhpcy5tYXRlcmlhbENhY2hlLmRlbGV0ZSh0KSx0aGlzfWdldFZlcnRleFNoYWRlcklEKHQpe3JldHVybiB0aGlzLl9nZXRTaGFkZXJTdGFnZSh0LnZlcnRleFNoYWRlcikuaWR9Z2V0RnJhZ21lbnRTaGFkZXJJRCh0KXtyZXR1cm4gdGhpcy5fZ2V0U2hhZGVyU3RhZ2UodC5mcmFnbWVudFNoYWRlcikuaWR9ZGlzcG9zZSgpe3RoaXMuc2hhZGVyQ2FjaGUuY2xlYXIoKSx0aGlzLm1hdGVyaWFsQ2FjaGUuY2xlYXIoKX1fZ2V0U2hhZGVyQ2FjaGVGb3JNYXRlcmlhbCh0KXtsZXQgZT10aGlzLm1hdGVyaWFsQ2FjaGU7cmV0dXJuITE9PT1lLmhhcyh0KSYmZS5zZXQodCxuZXcgU2V0KSxlLmdldCh0KX1fZ2V0U2hhZGVyU3RhZ2UodCl7bGV0IGU9dGhpcy5zaGFkZXJDYWNoZTtpZighMT09PWUuaGFzKHQpKXtsZXQgaT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmlkPSQ3ZSsrLHRoaXMudXNlZFRpbWVzPTB9fTtlLnNldCh0LGkpfXJldHVybiBlLmdldCh0KX19LGM9W10sdT1yLmlzV2ViR0wyLGQ9ci5sb2dhcml0aG1pY0RlcHRoQnVmZmVyLHA9ci5mbG9hdFZlcnRleFRleHR1cmVzLGg9ci5tYXhWZXJ0ZXhVbmlmb3JtcyxmPXIudmVydGV4VGV4dHVyZXMsbT1yLnByZWNpc2lvbix4PXtNZXNoRGVwdGhNYXRlcmlhbDoiZGVwdGgiLE1lc2hEaXN0YW5jZU1hdGVyaWFsOiJkaXN0YW5jZVJHQkEiLE1lc2hOb3JtYWxNYXRlcmlhbDoibm9ybWFsIixNZXNoQmFzaWNNYXRlcmlhbDoiYmFzaWMiLE1lc2hMYW1iZXJ0TWF0ZXJpYWw6ImxhbWJlcnQiLE1lc2hQaG9uZ01hdGVyaWFsOiJwaG9uZyIsTWVzaFRvb25NYXRlcmlhbDoidG9vbiIsTWVzaFN0YW5kYXJkTWF0ZXJpYWw6InBoeXNpY2FsIixNZXNoUGh5c2ljYWxNYXRlcmlhbDoicGh5c2ljYWwiLE1lc2hNYXRjYXBNYXRlcmlhbDoibWF0Y2FwIixMaW5lQmFzaWNNYXRlcmlhbDoiYmFzaWMiLExpbmVEYXNoZWRNYXRlcmlhbDoiZGFzaGVkIixQb2ludHNNYXRlcmlhbDoicG9pbnRzIixTaGFkb3dNYXRlcmlhbDoic2hhZG93IixTcHJpdGVNYXRlcmlhbDoic3ByaXRlIn07cmV0dXJue2dldFBhcmFtZXRlcnM6ZnVuY3Rpb24odyxGLHEsSyxkZSl7bGV0IERlLG50LGd0LFVlLFk9Sy5mb2csbGU9KHcuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9lOnQpLmdldCh3LmVudk1hcHx8KHcuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9LLmVudmlyb25tZW50Om51bGwpKSxJZT14W3cudHlwZV0sdmU9ZGUuaXNTa2lubmVkTWVzaD9mdW5jdGlvbih3KXtsZXQgcT13LnNrZWxldG9uLmJvbmVzO2lmKHApcmV0dXJuIDEwMjQ7e2xldCBkZT1NYXRoLmZsb29yKChoLTIwKS80KSxZPU1hdGgubWluKGRlLHEubGVuZ3RoKTtyZXR1cm4gWTxxLmxlbmd0aD8oY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBTa2VsZXRvbiBoYXMgIitxLmxlbmd0aCsiIGJvbmVzLiBUaGlzIEdQVSBzdXBwb3J0cyAiK1krIi4iKSwwKTpZfX0oZGUpOjA7aWYobnVsbCE9PXcucHJlY2lzaW9uJiYobT1yLmdldE1heFByZWNpc2lvbih3LnByZWNpc2lvbiksbSE9PXcucHJlY2lzaW9uJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUHJvZ3JhbS5nZXRQYXJhbWV0ZXJzOiIsdy5wcmVjaXNpb24sIm5vdCBzdXBwb3J0ZWQsIHVzaW5nIixtLCJpbnN0ZWFkLiIpKSxJZSl7bGV0IFRlPVNkW0llXTtEZT1UZS52ZXJ0ZXhTaGFkZXIsbnQ9VGUuZnJhZ21lbnRTaGFkZXJ9ZWxzZSBEZT13LnZlcnRleFNoYWRlcixudD13LmZyYWdtZW50U2hhZGVyLGwudXBkYXRlKHcpLGd0PWwuZ2V0VmVydGV4U2hhZGVySUQodyksVWU9bC5nZXRGcmFnbWVudFNoYWRlcklEKHcpO2xldCBBZT1uLmdldFJlbmRlclRhcmdldCgpLHB0PXcuY2xlYXJjb2F0PjA7cmV0dXJue2lzV2ViR0wyOnUsc2hhZGVySUQ6SWUsc2hhZGVyTmFtZTp3LnR5cGUsdmVydGV4U2hhZGVyOkRlLGZyYWdtZW50U2hhZGVyOm50LGRlZmluZXM6dy5kZWZpbmVzLGN1c3RvbVZlcnRleFNoYWRlcklEOmd0LGN1c3RvbUZyYWdtZW50U2hhZGVySUQ6VWUsaXNSYXdTaGFkZXJNYXRlcmlhbDohMD09PXcuaXNSYXdTaGFkZXJNYXRlcmlhbCxnbHNsVmVyc2lvbjp3Lmdsc2xWZXJzaW9uLHByZWNpc2lvbjptLGluc3RhbmNpbmc6ITA9PT1kZS5pc0luc3RhbmNlZE1lc2gsaW5zdGFuY2luZ0NvbG9yOiEwPT09ZGUuaXNJbnN0YW5jZWRNZXNoJiZudWxsIT09ZGUuaW5zdGFuY2VDb2xvcixzdXBwb3J0c1ZlcnRleFRleHR1cmVzOmYsb3V0cHV0RW5jb2Rpbmc6bnVsbD09PUFlP24ub3V0cHV0RW5jb2Rpbmc6ITA9PT1BZS5pc1hSUmVuZGVyVGFyZ2V0P0FlLnRleHR1cmUuZW5jb2Rpbmc6YmYsbWFwOiEhdy5tYXAsbWF0Y2FwOiEhdy5tYXRjYXAsZW52TWFwOiEhbGUsZW52TWFwTW9kZTpsZSYmbGUubWFwcGluZyxlbnZNYXBDdWJlVVY6ISFsZSYmKDMwNj09PWxlLm1hcHBpbmd8fDMwNz09PWxlLm1hcHBpbmcpLGxpZ2h0TWFwOiEhdy5saWdodE1hcCxhb01hcDohIXcuYW9NYXAsZW1pc3NpdmVNYXA6ISF3LmVtaXNzaXZlTWFwLGJ1bXBNYXA6ISF3LmJ1bXBNYXAsbm9ybWFsTWFwOiEhdy5ub3JtYWxNYXAsb2JqZWN0U3BhY2VOb3JtYWxNYXA6MT09PXcubm9ybWFsTWFwVHlwZSx0YW5nZW50U3BhY2VOb3JtYWxNYXA6MD09PXcubm9ybWFsTWFwVHlwZSxkZWNvZGVWaWRlb1RleHR1cmU6ISF3Lm1hcCYmITA9PT13Lm1hcC5pc1ZpZGVvVGV4dHVyZSYmdy5tYXAuZW5jb2Rpbmc9PT1XcixjbGVhcmNvYXQ6cHQsY2xlYXJjb2F0TWFwOnB0JiYhIXcuY2xlYXJjb2F0TWFwLGNsZWFyY29hdFJvdWdobmVzc01hcDpwdCYmISF3LmNsZWFyY29hdFJvdWdobmVzc01hcCxjbGVhcmNvYXROb3JtYWxNYXA6cHQmJiEhdy5jbGVhcmNvYXROb3JtYWxNYXAsZGlzcGxhY2VtZW50TWFwOiEhdy5kaXNwbGFjZW1lbnRNYXAscm91Z2huZXNzTWFwOiEhdy5yb3VnaG5lc3NNYXAsbWV0YWxuZXNzTWFwOiEhdy5tZXRhbG5lc3NNYXAsc3BlY3VsYXJNYXA6ISF3LnNwZWN1bGFyTWFwLHNwZWN1bGFySW50ZW5zaXR5TWFwOiEhdy5zcGVjdWxhckludGVuc2l0eU1hcCxzcGVjdWxhckNvbG9yTWFwOiEhdy5zcGVjdWxhckNvbG9yTWFwLGFscGhhTWFwOiEhdy5hbHBoYU1hcCxhbHBoYVRlc3Q6dy5hbHBoYVRlc3Q+MCxhbHBoYVdyaXRlOncuYWxwaGFXcml0ZXx8dy50cmFuc3BhcmVudCxncmFkaWVudE1hcDohIXcuZ3JhZGllbnRNYXAsc2hlZW46dy5zaGVlbj4wLHNoZWVuQ29sb3JNYXA6ISF3LnNoZWVuQ29sb3JNYXAsc2hlZW5Sb3VnaG5lc3NNYXA6ISF3LnNoZWVuUm91Z2huZXNzTWFwLHRyYW5zbWlzc2lvbjp3LnRyYW5zbWlzc2lvbj4wLHRyYW5zbWlzc2lvbk1hcDohIXcudHJhbnNtaXNzaW9uTWFwLHRoaWNrbmVzc01hcDohIXcudGhpY2tuZXNzTWFwLGNvbWJpbmU6dy5jb21iaW5lLHZlcnRleFRhbmdlbnRzOiEhdy5ub3JtYWxNYXAmJiEhZGUuZ2VvbWV0cnkmJiEhZGUuZ2VvbWV0cnkuYXR0cmlidXRlcy50YW5nZW50LHZlcnRleENvbG9yczp3LnZlcnRleENvbG9ycyx2ZXJ0ZXhBbHBoYXM6ITA9PT13LnZlcnRleENvbG9ycyYmISFkZS5nZW9tZXRyeSYmISFkZS5nZW9tZXRyeS5hdHRyaWJ1dGVzLmNvbG9yJiY0PT09ZGUuZ2VvbWV0cnkuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSx2ZXJ0ZXhVdnM6ISEody5tYXB8fHcuYnVtcE1hcHx8dy5ub3JtYWxNYXB8fHcuc3BlY3VsYXJNYXB8fHcuYWxwaGFNYXB8fHcuZW1pc3NpdmVNYXB8fHcucm91Z2huZXNzTWFwfHx3Lm1ldGFsbmVzc01hcHx8dy5jbGVhcmNvYXRNYXB8fHcuY2xlYXJjb2F0Um91Z2huZXNzTWFwfHx3LmNsZWFyY29hdE5vcm1hbE1hcHx8dy5kaXNwbGFjZW1lbnRNYXB8fHcudHJhbnNtaXNzaW9uTWFwfHx3LnRoaWNrbmVzc01hcHx8dy5zcGVjdWxhckludGVuc2l0eU1hcHx8dy5zcGVjdWxhckNvbG9yTWFwfHx3LnNoZWVuQ29sb3JNYXB8fHcuc2hlZW5Sb3VnaG5lc3NNYXApLHV2c1ZlcnRleE9ubHk6ISh3Lm1hcHx8dy5idW1wTWFwfHx3Lm5vcm1hbE1hcHx8dy5zcGVjdWxhck1hcHx8dy5hbHBoYU1hcHx8dy5lbWlzc2l2ZU1hcHx8dy5yb3VnaG5lc3NNYXB8fHcubWV0YWxuZXNzTWFwfHx3LmNsZWFyY29hdE5vcm1hbE1hcHx8dy50cmFuc21pc3Npb24+MHx8dy50cmFuc21pc3Npb25NYXB8fHcudGhpY2tuZXNzTWFwfHx3LnNwZWN1bGFySW50ZW5zaXR5TWFwfHx3LnNwZWN1bGFyQ29sb3JNYXB8fHcuc2hlZW4+MHx8dy5zaGVlbkNvbG9yTWFwfHx3LnNoZWVuUm91Z2huZXNzTWFwfHwhdy5kaXNwbGFjZW1lbnRNYXApLGZvZzohIVksdXNlRm9nOncuZm9nLGZvZ0V4cDI6WSYmWS5pc0ZvZ0V4cDIsZmxhdFNoYWRpbmc6ISF3LmZsYXRTaGFkaW5nLHNpemVBdHRlbnVhdGlvbjp3LnNpemVBdHRlbnVhdGlvbixsb2dhcml0aG1pY0RlcHRoQnVmZmVyOmQsc2tpbm5pbmc6ITA9PT1kZS5pc1NraW5uZWRNZXNoJiZ2ZT4wLG1heEJvbmVzOnZlLHVzZVZlcnRleFRleHR1cmU6cCxtb3JwaFRhcmdldHM6ISFkZS5nZW9tZXRyeSYmISFkZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMucG9zaXRpb24sbW9ycGhOb3JtYWxzOiEhZGUuZ2VvbWV0cnkmJiEhZGUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLm5vcm1hbCxtb3JwaFRhcmdldHNDb3VudDpkZS5nZW9tZXRyeSYmZGUuZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uP2RlLmdlb21ldHJ5Lm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbi5sZW5ndGg6MCxudW1EaXJMaWdodHM6Ri5kaXJlY3Rpb25hbC5sZW5ndGgsbnVtUG9pbnRMaWdodHM6Ri5wb2ludC5sZW5ndGgsbnVtU3BvdExpZ2h0czpGLnNwb3QubGVuZ3RoLG51bVJlY3RBcmVhTGlnaHRzOkYucmVjdEFyZWEubGVuZ3RoLG51bUhlbWlMaWdodHM6Ri5oZW1pLmxlbmd0aCxudW1EaXJMaWdodFNoYWRvd3M6Ri5kaXJlY3Rpb25hbFNoYWRvd01hcC5sZW5ndGgsbnVtUG9pbnRMaWdodFNoYWRvd3M6Ri5wb2ludFNoYWRvd01hcC5sZW5ndGgsbnVtU3BvdExpZ2h0U2hhZG93czpGLnNwb3RTaGFkb3dNYXAubGVuZ3RoLG51bUNsaXBwaW5nUGxhbmVzOnMubnVtUGxhbmVzLG51bUNsaXBJbnRlcnNlY3Rpb246cy5udW1JbnRlcnNlY3Rpb24sZGl0aGVyaW5nOncuZGl0aGVyaW5nLHNoYWRvd01hcEVuYWJsZWQ6bi5zaGFkb3dNYXAuZW5hYmxlZCYmcS5sZW5ndGg+MCxzaGFkb3dNYXBUeXBlOm4uc2hhZG93TWFwLnR5cGUsdG9uZU1hcHBpbmc6dy50b25lTWFwcGVkP24udG9uZU1hcHBpbmc6MCxwaHlzaWNhbGx5Q29ycmVjdExpZ2h0czpuLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzLHByZW11bHRpcGxpZWRBbHBoYTp3LnByZW11bHRpcGxpZWRBbHBoYSxkb3VibGVTaWRlZDoyPT09dy5zaWRlLGZsaXBTaWRlZDoxPT09dy5zaWRlLGRlcHRoUGFja2luZzp2b2lkIDAhPT13LmRlcHRoUGFja2luZyYmdy5kZXB0aFBhY2tpbmcsaW5kZXgwQXR0cmlidXRlTmFtZTp3LmluZGV4MEF0dHJpYnV0ZU5hbWUsZXh0ZW5zaW9uRGVyaXZhdGl2ZXM6dy5leHRlbnNpb25zJiZ3LmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXMsZXh0ZW5zaW9uRnJhZ0RlcHRoOncuZXh0ZW5zaW9ucyYmdy5leHRlbnNpb25zLmZyYWdEZXB0aCxleHRlbnNpb25EcmF3QnVmZmVyczp3LmV4dGVuc2lvbnMmJncuZXh0ZW5zaW9ucy5kcmF3QnVmZmVycyxleHRlbnNpb25TaGFkZXJUZXh0dXJlTE9EOncuZXh0ZW5zaW9ucyYmdy5leHRlbnNpb25zLnNoYWRlclRleHR1cmVMT0QscmVuZGVyZXJFeHRlbnNpb25GcmFnRGVwdGg6dXx8aS5oYXMoIkVYVF9mcmFnX2RlcHRoIikscmVuZGVyZXJFeHRlbnNpb25EcmF3QnVmZmVyczp1fHxpLmhhcygiV0VCR0xfZHJhd19idWZmZXJzIikscmVuZGVyZXJFeHRlbnNpb25TaGFkZXJUZXh0dXJlTG9kOnV8fGkuaGFzKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIiksY3VzdG9tUHJvZ3JhbUNhY2hlS2V5OncuY3VzdG9tUHJvZ3JhbUNhY2hlS2V5KCl9fSxnZXRQcm9ncmFtQ2FjaGVLZXk6ZnVuY3Rpb24odyl7bGV0IEY9W107aWYody5zaGFkZXJJRD9GLnB1c2gody5zaGFkZXJJRCk6KEYucHVzaCh3LmN1c3RvbVZlcnRleFNoYWRlcklEKSxGLnB1c2gody5jdXN0b21GcmFnbWVudFNoYWRlcklEKSksdm9pZCAwIT09dy5kZWZpbmVzKWZvcihsZXQgcSBpbiB3LmRlZmluZXMpRi5wdXNoKHEpLEYucHVzaCh3LmRlZmluZXNbcV0pO3JldHVybiExPT09dy5pc1Jhd1NoYWRlck1hdGVyaWFsJiYoZnVuY3Rpb24odyxGKXt3LnB1c2goRi5wcmVjaXNpb24pLHcucHVzaChGLm91dHB1dEVuY29kaW5nKSx3LnB1c2goRi5lbnZNYXBNb2RlKSx3LnB1c2goRi5jb21iaW5lKSx3LnB1c2goRi52ZXJ0ZXhVdnMpLHcucHVzaChGLmZvZ0V4cDIpLHcucHVzaChGLnNpemVBdHRlbnVhdGlvbiksdy5wdXNoKEYubWF4Qm9uZXMpLHcucHVzaChGLm1vcnBoVGFyZ2V0c0NvdW50KSx3LnB1c2goRi5udW1EaXJMaWdodHMpLHcucHVzaChGLm51bVBvaW50TGlnaHRzKSx3LnB1c2goRi5udW1TcG90TGlnaHRzKSx3LnB1c2goRi5udW1IZW1pTGlnaHRzKSx3LnB1c2goRi5udW1SZWN0QXJlYUxpZ2h0cyksdy5wdXNoKEYubnVtRGlyTGlnaHRTaGFkb3dzKSx3LnB1c2goRi5udW1Qb2ludExpZ2h0U2hhZG93cyksdy5wdXNoKEYubnVtU3BvdExpZ2h0U2hhZG93cyksdy5wdXNoKEYuc2hhZG93TWFwVHlwZSksdy5wdXNoKEYudG9uZU1hcHBpbmcpLHcucHVzaChGLm51bUNsaXBwaW5nUGxhbmVzKSx3LnB1c2goRi5udW1DbGlwSW50ZXJzZWN0aW9uKSx3LnB1c2goRi5hbHBoYVdyaXRlKX0oRix3KSxmdW5jdGlvbih3LEYpe2EuZGlzYWJsZUFsbCgpLEYuaXNXZWJHTDImJmEuZW5hYmxlKDApLEYuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcyYmYS5lbmFibGUoMSksRi5pbnN0YW5jaW5nJiZhLmVuYWJsZSgyKSxGLmluc3RhbmNpbmdDb2xvciYmYS5lbmFibGUoMyksRi5tYXAmJmEuZW5hYmxlKDQpLEYubWF0Y2FwJiZhLmVuYWJsZSg1KSxGLmVudk1hcCYmYS5lbmFibGUoNiksRi5lbnZNYXBDdWJlVVYmJmEuZW5hYmxlKDcpLEYubGlnaHRNYXAmJmEuZW5hYmxlKDgpLEYuYW9NYXAmJmEuZW5hYmxlKDkpLEYuZW1pc3NpdmVNYXAmJmEuZW5hYmxlKDEwKSxGLmJ1bXBNYXAmJmEuZW5hYmxlKDExKSxGLm5vcm1hbE1hcCYmYS5lbmFibGUoMTIpLEYub2JqZWN0U3BhY2VOb3JtYWxNYXAmJmEuZW5hYmxlKDEzKSxGLnRhbmdlbnRTcGFjZU5vcm1hbE1hcCYmYS5lbmFibGUoMTQpLEYuY2xlYXJjb2F0JiZhLmVuYWJsZSgxNSksRi5jbGVhcmNvYXRNYXAmJmEuZW5hYmxlKDE2KSxGLmNsZWFyY29hdFJvdWdobmVzc01hcCYmYS5lbmFibGUoMTcpLEYuY2xlYXJjb2F0Tm9ybWFsTWFwJiZhLmVuYWJsZSgxOCksRi5kaXNwbGFjZW1lbnRNYXAmJmEuZW5hYmxlKDE5KSxGLnNwZWN1bGFyTWFwJiZhLmVuYWJsZSgyMCksRi5yb3VnaG5lc3NNYXAmJmEuZW5hYmxlKDIxKSxGLm1ldGFsbmVzc01hcCYmYS5lbmFibGUoMjIpLEYuZ3JhZGllbnRNYXAmJmEuZW5hYmxlKDIzKSxGLmFscGhhTWFwJiZhLmVuYWJsZSgyNCksRi5hbHBoYVRlc3QmJmEuZW5hYmxlKDI1KSxGLnZlcnRleENvbG9ycyYmYS5lbmFibGUoMjYpLEYudmVydGV4QWxwaGFzJiZhLmVuYWJsZSgyNyksRi52ZXJ0ZXhVdnMmJmEuZW5hYmxlKDI4KSxGLnZlcnRleFRhbmdlbnRzJiZhLmVuYWJsZSgyOSksRi51dnNWZXJ0ZXhPbmx5JiZhLmVuYWJsZSgzMCksRi5mb2cmJmEuZW5hYmxlKDMxKSx3LnB1c2goYS5tYXNrKSxhLmRpc2FibGVBbGwoKSxGLnVzZUZvZyYmYS5lbmFibGUoMCksRi5mbGF0U2hhZGluZyYmYS5lbmFibGUoMSksRi5sb2dhcml0aG1pY0RlcHRoQnVmZmVyJiZhLmVuYWJsZSgyKSxGLnNraW5uaW5nJiZhLmVuYWJsZSgzKSxGLnVzZVZlcnRleFRleHR1cmUmJmEuZW5hYmxlKDQpLEYubW9ycGhUYXJnZXRzJiZhLmVuYWJsZSg1KSxGLm1vcnBoTm9ybWFscyYmYS5lbmFibGUoNiksRi5wcmVtdWx0aXBsaWVkQWxwaGEmJmEuZW5hYmxlKDcpLEYuc2hhZG93TWFwRW5hYmxlZCYmYS5lbmFibGUoOCksRi5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyYmYS5lbmFibGUoOSksRi5kb3VibGVTaWRlZCYmYS5lbmFibGUoMTApLEYuZmxpcFNpZGVkJiZhLmVuYWJsZSgxMSksRi5kZXB0aFBhY2tpbmcmJmEuZW5hYmxlKDEyKSxGLmRpdGhlcmluZyYmYS5lbmFibGUoMTMpLEYuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJmEuZW5hYmxlKDE0KSxGLnNwZWN1bGFyQ29sb3JNYXAmJmEuZW5hYmxlKDE1KSxGLnRyYW5zbWlzc2lvbiYmYS5lbmFibGUoMTYpLEYudHJhbnNtaXNzaW9uTWFwJiZhLmVuYWJsZSgxNyksRi50aGlja25lc3NNYXAmJmEuZW5hYmxlKDE4KSxGLnNoZWVuJiZhLmVuYWJsZSgxOSksRi5zaGVlbkNvbG9yTWFwJiZhLmVuYWJsZSgyMCksRi5zaGVlblJvdWdobmVzc01hcCYmYS5lbmFibGUoMjEpLEYuZGVjb2RlVmlkZW9UZXh0dXJlJiZhLmVuYWJsZSgyMiksdy5wdXNoKGEubWFzayl9KEYsdyksRi5wdXNoKG4ub3V0cHV0RW5jb2RpbmcpKSxGLnB1c2gody5jdXN0b21Qcm9ncmFtQ2FjaGVLZXkpLEYuam9pbigpfSxnZXRVbmlmb3JtczpmdW5jdGlvbih3KXtsZXQgcSxGPXhbdy50eXBlXTtyZXR1cm4gcT1GP0o4ZS5jbG9uZShTZFtGXS51bmlmb3Jtcyk6dy51bmlmb3JtcyxxfSxhY3F1aXJlUHJvZ3JhbTpmdW5jdGlvbih3LEYpe2xldCBxO2ZvcihsZXQgSz0wLGRlPWMubGVuZ3RoO0s8ZGU7SysrKXtsZXQgWT1jW0tdO2lmKFkuY2FjaGVLZXk9PT1GKXtxPVksKytxLnVzZWRUaW1lczticmVha319cmV0dXJuIHZvaWQgMD09PXEmJihxPW5ldyBKN2UobixGLHcsbyksYy5wdXNoKHEpKSxxfSxyZWxlYXNlUHJvZ3JhbTpmdW5jdGlvbih3KXtpZigwPT0tLXcudXNlZFRpbWVzKXtsZXQgRj1jLmluZGV4T2Yodyk7Y1tGXT1jW2MubGVuZ3RoLTFdLGMucG9wKCksdy5kZXN0cm95KCl9fSxyZWxlYXNlU2hhZGVyQ2FjaGU6ZnVuY3Rpb24odyl7bC5yZW1vdmUodyl9LHByb2dyYW1zOmMsZGlzcG9zZTpmdW5jdGlvbigpe2wuZGlzcG9zZSgpfX19ZnVuY3Rpb24gdDllKCl7bGV0IG49bmV3IFdlYWtNYXA7cmV0dXJue2dldDpmdW5jdGlvbihvKXtsZXQgcz1uLmdldChvKTtyZXR1cm4gdm9pZCAwPT09cyYmKHM9e30sbi5zZXQobyxzKSksc30scmVtb3ZlOmZ1bmN0aW9uKG8pe24uZGVsZXRlKG8pfSx1cGRhdGU6ZnVuY3Rpb24obyxzLGEpe24uZ2V0KG8pW3NdPWF9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtuPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gbjllKG4sdCl7cmV0dXJuIG4uZ3JvdXBPcmRlciE9PXQuZ3JvdXBPcmRlcj9uLmdyb3VwT3JkZXItdC5ncm91cE9yZGVyOm4ucmVuZGVyT3JkZXIhPT10LnJlbmRlck9yZGVyP24ucmVuZGVyT3JkZXItdC5yZW5kZXJPcmRlcjpuLm1hdGVyaWFsLmlkIT09dC5tYXRlcmlhbC5pZD9uLm1hdGVyaWFsLmlkLXQubWF0ZXJpYWwuaWQ6bi56IT09dC56P24uei10Lno6bi5pZC10LmlkfWZ1bmN0aW9uICR1ZShuLHQpe3JldHVybiBuLmdyb3VwT3JkZXIhPT10Lmdyb3VwT3JkZXI/bi5ncm91cE9yZGVyLXQuZ3JvdXBPcmRlcjpuLnJlbmRlck9yZGVyIT09dC5yZW5kZXJPcmRlcj9uLnJlbmRlck9yZGVyLXQucmVuZGVyT3JkZXI6bi56IT09dC56P3Quei1uLno6bi5pZC10LmlkfWZ1bmN0aW9uIGVkZSgpe2xldCBuPVtdLHQ9MCxlPVtdLGk9W10scj1bXTtmdW5jdGlvbiBzKGQscCxoLGYsbSx4KXtsZXQgZz1uW3RdO3JldHVybiB2b2lkIDA9PT1nPyhnPXtpZDpkLmlkLG9iamVjdDpkLGdlb21ldHJ5OnAsbWF0ZXJpYWw6aCxncm91cE9yZGVyOmYscmVuZGVyT3JkZXI6ZC5yZW5kZXJPcmRlcix6Om0sZ3JvdXA6eH0sblt0XT1nKTooZy5pZD1kLmlkLGcub2JqZWN0PWQsZy5nZW9tZXRyeT1wLGcubWF0ZXJpYWw9aCxnLmdyb3VwT3JkZXI9ZixnLnJlbmRlck9yZGVyPWQucmVuZGVyT3JkZXIsZy56PW0sZy5ncm91cD14KSx0KyssZ31yZXR1cm57b3BhcXVlOmUsdHJhbnNtaXNzaXZlOmksdHJhbnNwYXJlbnQ6cixpbml0OmZ1bmN0aW9uKCl7dD0wLGUubGVuZ3RoPTAsaS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxwdXNoOmZ1bmN0aW9uKGQscCxoLGYsbSx4KXtsZXQgZz1zKGQscCxoLGYsbSx4KTtoLnRyYW5zbWlzc2lvbj4wP2kucHVzaChnKTohMD09PWgudHJhbnNwYXJlbnQ/ci5wdXNoKGcpOmUucHVzaChnKX0sdW5zaGlmdDpmdW5jdGlvbihkLHAsaCxmLG0seCl7bGV0IGc9cyhkLHAsaCxmLG0seCk7aC50cmFuc21pc3Npb24+MD9pLnVuc2hpZnQoZyk6ITA9PT1oLnRyYW5zcGFyZW50P3IudW5zaGlmdChnKTplLnVuc2hpZnQoZyl9LGZpbmlzaDpmdW5jdGlvbigpe2ZvcihsZXQgZD10LHA9bi5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9bltkXTtpZihudWxsPT09aC5pZClicmVhaztoLmlkPW51bGwsaC5vYmplY3Q9bnVsbCxoLmdlb21ldHJ5PW51bGwsaC5tYXRlcmlhbD1udWxsLGguZ3JvdXA9bnVsbH19LHNvcnQ6ZnVuY3Rpb24oZCxwKXtlLmxlbmd0aD4xJiZlLnNvcnQoZHx8bjllKSxpLmxlbmd0aD4xJiZpLnNvcnQocHx8JHVlKSxyLmxlbmd0aD4xJiZyLnNvcnQocHx8JHVlKX19fWZ1bmN0aW9uIGk5ZSgpe2xldCBuPW5ldyBXZWFrTWFwO3JldHVybntnZXQ6ZnVuY3Rpb24oaSxyKXtsZXQgbztyZXR1cm4hMT09PW4uaGFzKGkpPyhvPW5ldyBlZGUsbi5zZXQoaSxbb10pKTpyPj1uLmdldChpKS5sZW5ndGg/KG89bmV3IGVkZSxuLmdldChpKS5wdXNoKG8pKTpvPW4uZ2V0KGkpW3JdLG99LGRpc3Bvc2U6ZnVuY3Rpb24oKXtuPW5ldyBXZWFrTWFwfX19ZnVuY3Rpb24gcjllKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyBpZSxjb2xvcjpuZXcgdm59O2JyZWFrO2Nhc2UiU3BvdExpZ2h0IjplPXtwb3NpdGlvbjpuZXcgaWUsZGlyZWN0aW9uOm5ldyBpZSxjb2xvcjpuZXcgdm4sZGlzdGFuY2U6MCxjb25lQ29zOjAscGVudW1icmFDb3M6MCxkZWNheTowfTticmVhaztjYXNlIlBvaW50TGlnaHQiOmU9e3Bvc2l0aW9uOm5ldyBpZSxjb2xvcjpuZXcgdm4sZGlzdGFuY2U6MCxkZWNheTowfTticmVhaztjYXNlIkhlbWlzcGhlcmVMaWdodCI6ZT17ZGlyZWN0aW9uOm5ldyBpZSxza3lDb2xvcjpuZXcgdm4sZ3JvdW5kQ29sb3I6bmV3IHZufTticmVhaztjYXNlIlJlY3RBcmVhTGlnaHQiOmU9e2NvbG9yOm5ldyB2bixwb3NpdGlvbjpuZXcgaWUsaGFsZldpZHRoOm5ldyBpZSxoYWxmSGVpZ2h0Om5ldyBpZX19cmV0dXJuIG5bdC5pZF09ZSxlfX19dmFyIHM5ZT0wO2Z1bmN0aW9uIGE5ZShuLHQpe3JldHVybih0LmNhc3RTaGFkb3c/MTowKS0obi5jYXN0U2hhZG93PzE6MCl9ZnVuY3Rpb24gbDllKG4sdCl7bGV0IGU9bmV3IHI5ZSxpPWZ1bmN0aW9uKCl7bGV0IG49e307cmV0dXJue2dldDpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT1uW3QuaWRdKXJldHVybiBuW3QuaWRdO2xldCBlO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRGlyZWN0aW9uYWxMaWdodCI6Y2FzZSJTcG90TGlnaHQiOmU9e3NoYWRvd0JpYXM6MCxzaGFkb3dOb3JtYWxCaWFzOjAsc2hhZG93UmFkaXVzOjEsc2hhZG93TWFwU2l6ZTpuZXcgYXR9O2JyZWFrO2Nhc2UiUG9pbnRMaWdodCI6ZT17c2hhZG93QmlhczowLHNoYWRvd05vcm1hbEJpYXM6MCxzaGFkb3dSYWRpdXM6MSxzaGFkb3dNYXBTaXplOm5ldyBhdCxzaGFkb3dDYW1lcmFOZWFyOjEsc2hhZG93Q2FtZXJhRmFyOjFlM319cmV0dXJuIG5bdC5pZF09ZSxlfX19KCkscj17dmVyc2lvbjowLGhhc2g6e2RpcmVjdGlvbmFsTGVuZ3RoOi0xLHBvaW50TGVuZ3RoOi0xLHNwb3RMZW5ndGg6LTEscmVjdEFyZWFMZW5ndGg6LTEsaGVtaUxlbmd0aDotMSxudW1EaXJlY3Rpb25hbFNoYWRvd3M6LTEsbnVtUG9pbnRTaGFkb3dzOi0xLG51bVNwb3RTaGFkb3dzOi0xfSxhbWJpZW50OlswLDAsMF0scHJvYmU6W10sZGlyZWN0aW9uYWw6W10sZGlyZWN0aW9uYWxTaGFkb3c6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXA6W10sZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXg6W10sc3BvdDpbXSxzcG90U2hhZG93OltdLHNwb3RTaGFkb3dNYXA6W10sc3BvdFNoYWRvd01hdHJpeDpbXSxyZWN0QXJlYTpbXSxyZWN0QXJlYUxUQzE6bnVsbCxyZWN0QXJlYUxUQzI6bnVsbCxwb2ludDpbXSxwb2ludFNoYWRvdzpbXSxwb2ludFNoYWRvd01hcDpbXSxwb2ludFNoYWRvd01hdHJpeDpbXSxoZW1pOltdfTtmb3IobGV0IHU9MDt1PDk7dSsrKXIucHJvYmUucHVzaChuZXcgaWUpO2xldCBvPW5ldyBpZSxzPW5ldyBSbixhPW5ldyBSbjtyZXR1cm57c2V0dXA6ZnVuY3Rpb24odSxkKXtsZXQgcD0wLGg9MCxmPTA7Zm9yKGxldCB1ZT0wO3VlPDk7dWUrKylyLnByb2JlW3VlXS5zZXQoMCwwLDApO2xldCBtPTAseD0wLGc9MCxiPTAsRD0wLFQ9MCxrPTAsWj0wO3Uuc29ydChhOWUpO2xldCB6PSEwIT09ZD9NYXRoLlBJOjE7Zm9yKGxldCB1ZT0wLGhlPXUubGVuZ3RoO3VlPGhlO3VlKyspe2xldCB3PXVbdWVdLEY9dy5jb2xvcixxPXcuaW50ZW5zaXR5LEs9dy5kaXN0YW5jZSxkZT13LnNoYWRvdyYmdy5zaGFkb3cubWFwP3cuc2hhZG93Lm1hcC50ZXh0dXJlOm51bGw7aWYody5pc0FtYmllbnRMaWdodClwKz1GLnIqcSp6LGgrPUYuZypxKnosZis9Ri5iKnEqejtlbHNlIGlmKHcuaXNMaWdodFByb2JlKWZvcihsZXQgWT0wO1k8OTtZKyspci5wcm9iZVtZXS5hZGRTY2FsZWRWZWN0b3Iody5zaC5jb2VmZmljaWVudHNbWV0scSk7ZWxzZSBpZih3LmlzRGlyZWN0aW9uYWxMaWdodCl7bGV0IFk9ZS5nZXQodyk7aWYoWS5jb2xvci5jb3B5KHcuY29sb3IpLm11bHRpcGx5U2NhbGFyKHcuaW50ZW5zaXR5KnopLHcuY2FzdFNoYWRvdyl7bGV0IGFlPXcuc2hhZG93LGxlPWkuZ2V0KHcpO2xlLnNoYWRvd0JpYXM9YWUuYmlhcyxsZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbGUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxsZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsci5kaXJlY3Rpb25hbFNoYWRvd1ttXT1sZSxyLmRpcmVjdGlvbmFsU2hhZG93TWFwW21dPWRlLHIuZGlyZWN0aW9uYWxTaGFkb3dNYXRyaXhbbV09dy5zaGFkb3cubWF0cml4LFQrK31yLmRpcmVjdGlvbmFsW21dPVksbSsrfWVsc2UgaWYody5pc1Nwb3RMaWdodCl7bGV0IFk9ZS5nZXQodyk7aWYoWS5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ody5tYXRyaXhXb3JsZCksWS5jb2xvci5jb3B5KEYpLm11bHRpcGx5U2NhbGFyKHEqeiksWS5kaXN0YW5jZT1LLFkuY29uZUNvcz1NYXRoLmNvcyh3LmFuZ2xlKSxZLnBlbnVtYnJhQ29zPU1hdGguY29zKHcuYW5nbGUqKDEtdy5wZW51bWJyYSkpLFkuZGVjYXk9dy5kZWNheSx3LmNhc3RTaGFkb3cpe2xldCBhZT13LnNoYWRvdyxsZT1pLmdldCh3KTtsZS5zaGFkb3dCaWFzPWFlLmJpYXMsbGUuc2hhZG93Tm9ybWFsQmlhcz1hZS5ub3JtYWxCaWFzLGxlLnNoYWRvd1JhZGl1cz1hZS5yYWRpdXMsbGUuc2hhZG93TWFwU2l6ZT1hZS5tYXBTaXplLHIuc3BvdFNoYWRvd1tnXT1sZSxyLnNwb3RTaGFkb3dNYXBbZ109ZGUsci5zcG90U2hhZG93TWF0cml4W2ddPXcuc2hhZG93Lm1hdHJpeCxaKyt9ci5zcG90W2ddPVksZysrfWVsc2UgaWYody5pc1JlY3RBcmVhTGlnaHQpe2xldCBZPWUuZ2V0KHcpO1kuY29sb3IuY29weShGKS5tdWx0aXBseVNjYWxhcihxKSxZLmhhbGZXaWR0aC5zZXQoLjUqdy53aWR0aCwwLDApLFkuaGFsZkhlaWdodC5zZXQoMCwuNSp3LmhlaWdodCwwKSxyLnJlY3RBcmVhW2JdPVksYisrfWVsc2UgaWYody5pc1BvaW50TGlnaHQpe2xldCBZPWUuZ2V0KHcpO2lmKFkuY29sb3IuY29weSh3LmNvbG9yKS5tdWx0aXBseVNjYWxhcih3LmludGVuc2l0eSp6KSxZLmRpc3RhbmNlPXcuZGlzdGFuY2UsWS5kZWNheT13LmRlY2F5LHcuY2FzdFNoYWRvdyl7bGV0IGFlPXcuc2hhZG93LGxlPWkuZ2V0KHcpO2xlLnNoYWRvd0JpYXM9YWUuYmlhcyxsZS5zaGFkb3dOb3JtYWxCaWFzPWFlLm5vcm1hbEJpYXMsbGUuc2hhZG93UmFkaXVzPWFlLnJhZGl1cyxsZS5zaGFkb3dNYXBTaXplPWFlLm1hcFNpemUsbGUuc2hhZG93Q2FtZXJhTmVhcj1hZS5jYW1lcmEubmVhcixsZS5zaGFkb3dDYW1lcmFGYXI9YWUuY2FtZXJhLmZhcixyLnBvaW50U2hhZG93W3hdPWxlLHIucG9pbnRTaGFkb3dNYXBbeF09ZGUsci5wb2ludFNoYWRvd01hdHJpeFt4XT13LnNoYWRvdy5tYXRyaXgsaysrfXIucG9pbnRbeF09WSx4Kyt9ZWxzZSBpZih3LmlzSGVtaXNwaGVyZUxpZ2h0KXtsZXQgWT1lLmdldCh3KTtZLnNreUNvbG9yLmNvcHkody5jb2xvcikubXVsdGlwbHlTY2FsYXIocSp6KSxZLmdyb3VuZENvbG9yLmNvcHkody5ncm91bmRDb2xvcikubXVsdGlwbHlTY2FsYXIocSp6KSxyLmhlbWlbRF09WSxEKyt9fWI+MCYmKHQuaXNXZWJHTDJ8fCEwPT09bi5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpPyhyLnJlY3RBcmVhTFRDMT1CdC5MVENfRkxPQVRfMSxyLnJlY3RBcmVhTFRDMj1CdC5MVENfRkxPQVRfMik6ITA9PT1uLmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKT8oci5yZWN0QXJlYUxUQzE9QnQuTFRDX0hBTEZfMSxyLnJlY3RBcmVhTFRDMj1CdC5MVENfSEFMRl8yKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBVbmFibGUgdG8gdXNlIFJlY3RBcmVhTGlnaHQuIE1pc3NpbmcgV2ViR0wgZXh0ZW5zaW9ucy4iKSksci5hbWJpZW50WzBdPXAsci5hbWJpZW50WzFdPWgsci5hbWJpZW50WzJdPWY7bGV0IGZlPXIuaGFzaDsoZmUuZGlyZWN0aW9uYWxMZW5ndGghPT1tfHxmZS5wb2ludExlbmd0aCE9PXh8fGZlLnNwb3RMZW5ndGghPT1nfHxmZS5yZWN0QXJlYUxlbmd0aCE9PWJ8fGZlLmhlbWlMZW5ndGghPT1EfHxmZS5udW1EaXJlY3Rpb25hbFNoYWRvd3MhPT1UfHxmZS5udW1Qb2ludFNoYWRvd3MhPT1rfHxmZS5udW1TcG90U2hhZG93cyE9PVopJiYoci5kaXJlY3Rpb25hbC5sZW5ndGg9bSxyLnNwb3QubGVuZ3RoPWcsci5yZWN0QXJlYS5sZW5ndGg9YixyLnBvaW50Lmxlbmd0aD14LHIuaGVtaS5sZW5ndGg9RCxyLmRpcmVjdGlvbmFsU2hhZG93Lmxlbmd0aD1ULHIuZGlyZWN0aW9uYWxTaGFkb3dNYXAubGVuZ3RoPVQsci5wb2ludFNoYWRvdy5sZW5ndGg9ayxyLnBvaW50U2hhZG93TWFwLmxlbmd0aD1rLHIuc3BvdFNoYWRvdy5sZW5ndGg9WixyLnNwb3RTaGFkb3dNYXAubGVuZ3RoPVosci5kaXJlY3Rpb25hbFNoYWRvd01hdHJpeC5sZW5ndGg9VCxyLnBvaW50U2hhZG93TWF0cml4Lmxlbmd0aD1rLHIuc3BvdFNoYWRvd01hdHJpeC5sZW5ndGg9WixmZS5kaXJlY3Rpb25hbExlbmd0aD1tLGZlLnBvaW50TGVuZ3RoPXgsZmUuc3BvdExlbmd0aD1nLGZlLnJlY3RBcmVhTGVuZ3RoPWIsZmUuaGVtaUxlbmd0aD1ELGZlLm51bURpcmVjdGlvbmFsU2hhZG93cz1ULGZlLm51bVBvaW50U2hhZG93cz1rLGZlLm51bVNwb3RTaGFkb3dzPVosci52ZXJzaW9uPXM5ZSsrKX0sc2V0dXBWaWV3OmZ1bmN0aW9uKHUsZCl7bGV0IHA9MCxoPTAsZj0wLG09MCx4PTAsZz1kLm1hdHJpeFdvcmxkSW52ZXJzZTtmb3IobGV0IGI9MCxEPXUubGVuZ3RoO2I8RDtiKyspe2xldCBUPXVbYl07aWYoVC5pc0RpcmVjdGlvbmFsTGlnaHQpe2xldCBrPXIuZGlyZWN0aW9uYWxbcF07ay5kaXJlY3Rpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFQubWF0cml4V29ybGQpLG8uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFQudGFyZ2V0Lm1hdHJpeFdvcmxkKSxrLmRpcmVjdGlvbi5zdWIobyksay5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKGcpLHArK31lbHNlIGlmKFQuaXNTcG90TGlnaHQpe2xldCBrPXIuc3BvdFtmXTtrLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihULm1hdHJpeFdvcmxkKSxrLnBvc2l0aW9uLmFwcGx5TWF0cml4NChnKSxrLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksby5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC50YXJnZXQubWF0cml4V29ybGQpLGsuZGlyZWN0aW9uLnN1YihvKSxrLmRpcmVjdGlvbi50cmFuc2Zvcm1EaXJlY3Rpb24oZyksZisrfWVsc2UgaWYoVC5pc1JlY3RBcmVhTGlnaHQpe2xldCBrPXIucmVjdEFyZWFbbV07ay5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksay5wb3NpdGlvbi5hcHBseU1hdHJpeDQoZyksYS5pZGVudGl0eSgpLHMuY29weShULm1hdHJpeFdvcmxkKSxzLnByZW11bHRpcGx5KGcpLGEuZXh0cmFjdFJvdGF0aW9uKHMpLGsuaGFsZldpZHRoLnNldCguNSpULndpZHRoLDAsMCksay5oYWxmSGVpZ2h0LnNldCgwLC41KlQuaGVpZ2h0LDApLGsuaGFsZldpZHRoLmFwcGx5TWF0cml4NChhKSxrLmhhbGZIZWlnaHQuYXBwbHlNYXRyaXg0KGEpLG0rK31lbHNlIGlmKFQuaXNQb2ludExpZ2h0KXtsZXQgaz1yLnBvaW50W2hdO2sucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKFQubWF0cml4V29ybGQpLGsucG9zaXRpb24uYXBwbHlNYXRyaXg0KGcpLGgrK31lbHNlIGlmKFQuaXNIZW1pc3BoZXJlTGlnaHQpe2xldCBrPXIuaGVtaVt4XTtrLmRpcmVjdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oVC5tYXRyaXhXb3JsZCksay5kaXJlY3Rpb24udHJhbnNmb3JtRGlyZWN0aW9uKGcpLGsuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpLHgrK319fSxzdGF0ZTpyfX1mdW5jdGlvbiB0ZGUobix0KXtsZXQgZT1uZXcgbDllKG4sdCksaT1bXSxyPVtdO3JldHVybntpbml0OmZ1bmN0aW9uKCl7aS5sZW5ndGg9MCxyLmxlbmd0aD0wfSxzdGF0ZTp7bGlnaHRzQXJyYXk6aSxzaGFkb3dzQXJyYXk6cixsaWdodHM6ZX0sc2V0dXBMaWdodHM6ZnVuY3Rpb24oZCl7ZS5zZXR1cChpLGQpfSxzZXR1cExpZ2h0c1ZpZXc6ZnVuY3Rpb24oZCl7ZS5zZXR1cFZpZXcoaSxkKX0scHVzaExpZ2h0OmZ1bmN0aW9uKGQpe2kucHVzaChkKX0scHVzaFNoYWRvdzpmdW5jdGlvbihkKXtyLnB1c2goZCl9fX1mdW5jdGlvbiBjOWUobix0KXtsZXQgZT1uZXcgV2Vha01hcDtyZXR1cm57Z2V0OmZ1bmN0aW9uKG8scz0wKXtsZXQgYTtyZXR1cm4hMT09PWUuaGFzKG8pPyhhPW5ldyB0ZGUobix0KSxlLnNldChvLFthXSkpOnM+PWUuZ2V0KG8pLmxlbmd0aD8oYT1uZXcgdGRlKG4sdCksZS5nZXQobykucHVzaChhKSk6YT1lLmdldChvKVtzXSxhfSxkaXNwb3NlOmZ1bmN0aW9uKCl7ZT1uZXcgV2Vha01hcH19fXZhciBwaz1jbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoRGVwdGhNYXRlcmlhbCIsdGhpcy5kZXB0aFBhY2tpbmc9MzIwMCx0aGlzLm1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMuZm9nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kZXB0aFBhY2tpbmc9dC5kZXB0aFBhY2tpbmcsdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXN9fTtway5wcm90b3R5cGUuaXNNZXNoRGVwdGhNYXRlcmlhbD0hMDt2YXIgaGs9Y2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaERpc3RhbmNlTWF0ZXJpYWwiLHRoaXMucmVmZXJlbmNlUG9zaXRpb249bmV3IGllLHRoaXMubmVhckRpc3RhbmNlPTEsdGhpcy5mYXJEaXN0YW5jZT0xZTMsdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5mb2c9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnJlZmVyZW5jZVBvc2l0aW9uLmNvcHkodC5yZWZlcmVuY2VQb3NpdGlvbiksdGhpcy5uZWFyRGlzdGFuY2U9dC5uZWFyRGlzdGFuY2UsdGhpcy5mYXJEaXN0YW5jZT10LmZhckRpc3RhbmNlLHRoaXMubWFwPXQubWFwLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzfX07ZnVuY3Rpb24gR2RlKG4sdCxlKXtsZXQgaT1uZXcgZ2Iscj1uZXcgYXQsbz1uZXcgYXQscz1uZXcgYXIsYT1uZXcgcGsoe2RlcHRoUGFja2luZzozMjAxfSksbD1uZXcgaGssYz17fSx1PWUubWF4VGV4dHVyZVNpemUsZD17MDoxLDE6MCwyOjJ9LHA9bmV3IERwKHtkZWZpbmVzOntWU01fU0FNUExFUzo4fSx1bmlmb3Jtczp7c2hhZG93X3Bhc3M6e3ZhbHVlOm51bGx9LHJlc29sdXRpb246e3ZhbHVlOm5ldyBhdH0scmFkaXVzOnt2YWx1ZTo0fX0sdmVydGV4U2hhZGVyOiJ2b2lkIG1haW4oKSB7XG5cdGdsX1Bvc2l0aW9uID0gdmVjNCggcG9zaXRpb24sIDEuMCApO1xufSIsZnJhZ21lbnRTaGFkZXI6InVuaWZvcm0gc2FtcGxlcjJEIHNoYWRvd19wYXNzO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG51bmlmb3JtIGZsb2F0IHJhZGl1cztcbiNpbmNsdWRlIDxwYWNraW5nPlxudm9pZCBtYWluKCkge1xuXHRjb25zdCBmbG9hdCBzYW1wbGVzID0gZmxvYXQoIFZTTV9TQU1QTEVTICk7XG5cdGZsb2F0IG1lYW4gPSAwLjA7XG5cdGZsb2F0IHNxdWFyZWRfbWVhbiA9IDAuMDtcblx0ZmxvYXQgdXZTdHJpZGUgPSBzYW1wbGVzIDw9IDEuMCA/IDAuMCA6IDIuMCAvICggc2FtcGxlcyAtIDEuMCApO1xuXHRmbG9hdCB1dlN0YXJ0ID0gc2FtcGxlcyA8PSAxLjAgPyAwLjAgOiAtIDEuMDtcblx0Zm9yICggZmxvYXQgaSA9IDAuMDsgaSA8IHNhbXBsZXM7IGkgKysgKSB7XG5cdFx0ZmxvYXQgdXZPZmZzZXQgPSB1dlN0YXJ0ICsgaSAqIHV2U3RyaWRlO1xuXHRcdCNpZmRlZiBIT1JJWk9OVEFMX1BBU1Ncblx0XHRcdHZlYzIgZGlzdHJpYnV0aW9uID0gdW5wYWNrUkdCQVRvMkhhbGYoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggdXZPZmZzZXQsIDAuMCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGlzdHJpYnV0aW9uLng7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGlzdHJpYnV0aW9uLnkgKiBkaXN0cmlidXRpb24ueSArIGRpc3RyaWJ1dGlvbi54ICogZGlzdHJpYnV0aW9uLng7XG5cdFx0I2Vsc2Vcblx0XHRcdGZsb2F0IGRlcHRoID0gdW5wYWNrUkdCQVRvRGVwdGgoIHRleHR1cmUyRCggc2hhZG93X3Bhc3MsICggZ2xfRnJhZ0Nvb3JkLnh5ICsgdmVjMiggMC4wLCB1dk9mZnNldCApICogcmFkaXVzICkgLyByZXNvbHV0aW9uICkgKTtcblx0XHRcdG1lYW4gKz0gZGVwdGg7XG5cdFx0XHRzcXVhcmVkX21lYW4gKz0gZGVwdGggKiBkZXB0aDtcblx0XHQjZW5kaWZcblx0fVxuXHRtZWFuID0gbWVhbiAvIHNhbXBsZXM7XG5cdHNxdWFyZWRfbWVhbiA9IHNxdWFyZWRfbWVhbiAvIHNhbXBsZXM7XG5cdGZsb2F0IHN0ZF9kZXYgPSBzcXJ0KCBzcXVhcmVkX21lYW4gLSBtZWFuICogbWVhbiApO1xuXHRnbF9GcmFnQ29sb3IgPSBwYWNrMkhhbGZUb1JHQkEoIHZlYzIoIG1lYW4sIHN0ZF9kZXYgKSApO1xufSJ9KSxoPXAuY2xvbmUoKTtoLmRlZmluZXMuSE9SSVpPTlRBTF9QQVNTPTE7bGV0IGY9bmV3IG5yO2Yuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IFlyKG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC41LDMsLTEsLjUsLTEsMywuNV0pLDMpKTtsZXQgbT1uZXcgVm8oZixwKSx4PXRoaXM7ZnVuY3Rpb24gZyhULGspe2xldCBaPXQudXBkYXRlKG0pO3AuZGVmaW5lcy5WU01fU0FNUExFUyE9PVQuYmx1clNhbXBsZXMmJihwLmRlZmluZXMuVlNNX1NBTVBMRVM9VC5ibHVyU2FtcGxlcyxoLmRlZmluZXMuVlNNX1NBTVBMRVM9VC5ibHVyU2FtcGxlcyxwLm5lZWRzVXBkYXRlPSEwLGgubmVlZHNVcGRhdGU9ITApLHAudW5pZm9ybXMuc2hhZG93X3Bhc3MudmFsdWU9VC5tYXAudGV4dHVyZSxwLnVuaWZvcm1zLnJlc29sdXRpb24udmFsdWU9VC5tYXBTaXplLHAudW5pZm9ybXMucmFkaXVzLnZhbHVlPVQucmFkaXVzLG4uc2V0UmVuZGVyVGFyZ2V0KFQubWFwUGFzcyksbi5jbGVhcigpLG4ucmVuZGVyQnVmZmVyRGlyZWN0KGssbnVsbCxaLHAsbSxudWxsKSxoLnVuaWZvcm1zLnNoYWRvd19wYXNzLnZhbHVlPVQubWFwUGFzcy50ZXh0dXJlLGgudW5pZm9ybXMucmVzb2x1dGlvbi52YWx1ZT1ULm1hcFNpemUsaC51bmlmb3Jtcy5yYWRpdXMudmFsdWU9VC5yYWRpdXMsbi5zZXRSZW5kZXJUYXJnZXQoVC5tYXApLG4uY2xlYXIoKSxuLnJlbmRlckJ1ZmZlckRpcmVjdChrLG51bGwsWixoLG0sbnVsbCl9ZnVuY3Rpb24gYihULGssWix6LGZlLHVlLGhlKXtsZXQgdz1udWxsLEY9ITA9PT16LmlzUG9pbnRMaWdodD9ULmN1c3RvbURpc3RhbmNlTWF0ZXJpYWw6VC5jdXN0b21EZXB0aE1hdGVyaWFsO2lmKHc9dm9pZCAwIT09Rj9GOiEwPT09ei5pc1BvaW50TGlnaHQ/bDphLG4ubG9jYWxDbGlwcGluZ0VuYWJsZWQmJiEwPT09Wi5jbGlwU2hhZG93cyYmMCE9PVouY2xpcHBpbmdQbGFuZXMubGVuZ3RofHxaLmRpc3BsYWNlbWVudE1hcCYmMCE9PVouZGlzcGxhY2VtZW50U2NhbGV8fFouYWxwaGFNYXAmJlouYWxwaGFUZXN0PjApe2xldCBxPXcudXVpZCxLPVoudXVpZCxkZT1jW3FdO3ZvaWQgMD09PWRlJiYoZGU9e30sY1txXT1kZSk7bGV0IFk9ZGVbS107dm9pZCAwPT09WSYmKFk9dy5jbG9uZSgpLGRlW0tdPVkpLHc9WX1yZXR1cm4gdy52aXNpYmxlPVoudmlzaWJsZSx3LndpcmVmcmFtZT1aLndpcmVmcmFtZSx3LnNpZGU9Mz09PWhlP251bGwhPT1aLnNoYWRvd1NpZGU/Wi5zaGFkb3dTaWRlOlouc2lkZTpudWxsIT09Wi5zaGFkb3dTaWRlP1ouc2hhZG93U2lkZTpkW1ouc2lkZV0sdy5hbHBoYU1hcD1aLmFscGhhTWFwLHcuYWxwaGFUZXN0PVouYWxwaGFUZXN0LHcuY2xpcFNoYWRvd3M9Wi5jbGlwU2hhZG93cyx3LmNsaXBwaW5nUGxhbmVzPVouY2xpcHBpbmdQbGFuZXMsdy5jbGlwSW50ZXJzZWN0aW9uPVouY2xpcEludGVyc2VjdGlvbix3LmRpc3BsYWNlbWVudE1hcD1aLmRpc3BsYWNlbWVudE1hcCx3LmRpc3BsYWNlbWVudFNjYWxlPVouZGlzcGxhY2VtZW50U2NhbGUsdy5kaXNwbGFjZW1lbnRCaWFzPVouZGlzcGxhY2VtZW50Qmlhcyx3LndpcmVmcmFtZUxpbmV3aWR0aD1aLndpcmVmcmFtZUxpbmV3aWR0aCx3LmxpbmV3aWR0aD1aLmxpbmV3aWR0aCwhMD09PXouaXNQb2ludExpZ2h0JiYhMD09PXcuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbCYmKHcucmVmZXJlbmNlUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHoubWF0cml4V29ybGQpLHcubmVhckRpc3RhbmNlPWZlLHcuZmFyRGlzdGFuY2U9dWUpLHd9ZnVuY3Rpb24gRChULGssWix6LGZlKXtpZighMT09PVQudmlzaWJsZSlyZXR1cm47aWYoVC5sYXllcnMudGVzdChrLmxheWVycykmJihULmlzTWVzaHx8VC5pc0xpbmV8fFQuaXNQb2ludHMpJiYoVC5jYXN0U2hhZG93fHxULnJlY2VpdmVTaGFkb3cmJjM9PT1mZSkmJighVC5mcnVzdHVtQ3VsbGVkfHxpLmludGVyc2VjdHNPYmplY3QoVCkpKXtULm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKFoubWF0cml4V29ybGRJbnZlcnNlLFQubWF0cml4V29ybGQpO2xldCB3PXQudXBkYXRlKFQpLEY9VC5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KEYpKXtsZXQgcT13Lmdyb3Vwcztmb3IobGV0IEs9MCxkZT1xLmxlbmd0aDtLPGRlO0srKyl7bGV0IFk9cVtLXSxhZT1GW1kubWF0ZXJpYWxJbmRleF07aWYoYWUmJmFlLnZpc2libGUpe2xldCBsZT1iKFQsMCxhZSx6LFoubmVhcixaLmZhcixmZSk7bi5yZW5kZXJCdWZmZXJEaXJlY3QoWixudWxsLHcsbGUsVCxZKX19fWVsc2UgaWYoRi52aXNpYmxlKXtsZXQgcT1iKFQsMCxGLHosWi5uZWFyLFouZmFyLGZlKTtuLnJlbmRlckJ1ZmZlckRpcmVjdChaLG51bGwsdyxxLFQsbnVsbCl9fWxldCBoZT1ULmNoaWxkcmVuO2ZvcihsZXQgdz0wLEY9aGUubGVuZ3RoO3c8Rjt3KyspRChoZVt3XSxrLFoseixmZSl9dGhpcy5lbmFibGVkPSExLHRoaXMuYXV0b1VwZGF0ZT0hMCx0aGlzLm5lZWRzVXBkYXRlPSExLHRoaXMudHlwZT0xLHRoaXMucmVuZGVyPWZ1bmN0aW9uKFQsayxaKXtpZighMT09PXguZW5hYmxlZHx8ITE9PT14LmF1dG9VcGRhdGUmJiExPT09eC5uZWVkc1VwZGF0ZXx8MD09PVQubGVuZ3RoKXJldHVybjtsZXQgej1uLmdldFJlbmRlclRhcmdldCgpLGZlPW4uZ2V0QWN0aXZlQ3ViZUZhY2UoKSx1ZT1uLmdldEFjdGl2ZU1pcG1hcExldmVsKCksaGU9bi5zdGF0ZTtoZS5zZXRCbGVuZGluZygwKSxoZS5idWZmZXJzLmNvbG9yLnNldENsZWFyKDEsMSwxLDEpLGhlLmJ1ZmZlcnMuZGVwdGguc2V0VGVzdCghMCksaGUuc2V0U2Npc3NvclRlc3QoITEpO2ZvcihsZXQgdz0wLEY9VC5sZW5ndGg7dzxGO3crKyl7bGV0IHE9VFt3XSxLPXEuc2hhZG93O2lmKHZvaWQgMD09PUspe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xTaGFkb3dNYXA6IixxLCJoYXMgbm8gc2hhZG93LiIpO2NvbnRpbnVlfWlmKCExPT09Sy5hdXRvVXBkYXRlJiYhMT09PUsubmVlZHNVcGRhdGUpY29udGludWU7ci5jb3B5KEsubWFwU2l6ZSk7bGV0IGRlPUsuZ2V0RnJhbWVFeHRlbnRzKCk7aWYoci5tdWx0aXBseShkZSksby5jb3B5KEsubWFwU2l6ZSksKHIueD51fHxyLnk+dSkmJihyLng+dSYmKG8ueD1NYXRoLmZsb29yKHUvZGUueCksci54PW8ueCpkZS54LEsubWFwU2l6ZS54PW8ueCksci55PnUmJihvLnk9TWF0aC5mbG9vcih1L2RlLnkpLHIueT1vLnkqZGUueSxLLm1hcFNpemUueT1vLnkpKSxudWxsPT09Sy5tYXAmJiFLLmlzUG9pbnRMaWdodFNoYWRvdyYmMz09PXRoaXMudHlwZSl7bGV0IGFlPXttaW5GaWx0ZXI6R3MsbWFnRmlsdGVyOkdzLGZvcm1hdDpnYX07Sy5tYXA9bmV3IFdhKHIueCxyLnksYWUpLEsubWFwLnRleHR1cmUubmFtZT1xLm5hbWUrIi5zaGFkb3dNYXAiLEsubWFwUGFzcz1uZXcgV2Eoci54LHIueSxhZSksSy5jYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpfW51bGw9PT1LLm1hcCYmKEsubWFwPW5ldyBXYShyLngsci55LHttaW5GaWx0ZXI6Wm8sbWFnRmlsdGVyOlpvLGZvcm1hdDpnYX0pLEsubWFwLnRleHR1cmUubmFtZT1xLm5hbWUrIi5zaGFkb3dNYXAiLEsuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksbi5zZXRSZW5kZXJUYXJnZXQoSy5tYXApLG4uY2xlYXIoKTtsZXQgWT1LLmdldFZpZXdwb3J0Q291bnQoKTtmb3IobGV0IGFlPTA7YWU8WTthZSsrKXtsZXQgbGU9Sy5nZXRWaWV3cG9ydChhZSk7cy5zZXQoby54KmxlLngsby55KmxlLnksby54KmxlLnosby55KmxlLncpLGhlLnZpZXdwb3J0KHMpLEsudXBkYXRlTWF0cmljZXMocSxhZSksaT1LLmdldEZydXN0dW0oKSxEKGssWixLLmNhbWVyYSxxLHRoaXMudHlwZSl9IUsuaXNQb2ludExpZ2h0U2hhZG93JiYzPT09dGhpcy50eXBlJiZnKEssWiksSy5uZWVkc1VwZGF0ZT0hMX14Lm5lZWRzVXBkYXRlPSExLG4uc2V0UmVuZGVyVGFyZ2V0KHosZmUsdWUpfX1mdW5jdGlvbiBwOWUobix0LGUpe2xldCBpPWUuaXNXZWJHTDIsYT1uZXcgZnVuY3Rpb24oKXtsZXQgZ2U9ITEsZm49bmV3IGFyLFp0PW51bGwsTm49bmV3IGFyKDAsMCwwLDApO3JldHVybntzZXRNYXNrOmZ1bmN0aW9uKFplKXtadCE9PVplJiYhZ2UmJihuLmNvbG9yTWFzayhaZSxaZSxaZSxaZSksWnQ9WmUpfSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWmUpe2dlPVplfSxzZXRDbGVhcjpmdW5jdGlvbihaZSxEbixNaSxUcixFcyl7ITA9PT1FcyYmKFplKj1UcixEbio9VHIsTWkqPVRyKSxmbi5zZXQoWmUsRG4sTWksVHIpLCExPT09Tm4uZXF1YWxzKGZuKSYmKG4uY2xlYXJDb2xvcihaZSxEbixNaSxUciksTm4uY29weShmbikpfSxyZXNldDpmdW5jdGlvbigpe2dlPSExLFp0PW51bGwsTm4uc2V0KC0xLDAsMCwwKX19fSxsPW5ldyBmdW5jdGlvbigpe2xldCBnZT0hMSxmbj1udWxsLFp0PW51bGwsTm49bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihaZSl7WmU/QWUoMjkyOSk6dG4oMjkyOSl9LHNldE1hc2s6ZnVuY3Rpb24oWmUpe2ZuIT09WmUmJiFnZSYmKG4uZGVwdGhNYXNrKFplKSxmbj1aZSl9LHNldEZ1bmM6ZnVuY3Rpb24oWmUpe2lmKFp0IT09WmUpe2lmKFplKXN3aXRjaChaZSl7Y2FzZSAwOm4uZGVwdGhGdW5jKDUxMik7YnJlYWs7Y2FzZSAxOm4uZGVwdGhGdW5jKDUxOSk7YnJlYWs7Y2FzZSAyOm4uZGVwdGhGdW5jKDUxMyk7YnJlYWs7Y2FzZSAzOmRlZmF1bHQ6bi5kZXB0aEZ1bmMoNTE1KTticmVhaztjYXNlIDQ6bi5kZXB0aEZ1bmMoNTE0KTticmVhaztjYXNlIDU6bi5kZXB0aEZ1bmMoNTE4KTticmVhaztjYXNlIDY6bi5kZXB0aEZ1bmMoNTE2KTticmVhaztjYXNlIDc6bi5kZXB0aEZ1bmMoNTE3KX1lbHNlIG4uZGVwdGhGdW5jKDUxNSk7WnQ9WmV9fSxzZXRMb2NrZWQ6ZnVuY3Rpb24oWmUpe2dlPVplfSxzZXRDbGVhcjpmdW5jdGlvbihaZSl7Tm4hPT1aZSYmKG4uY2xlYXJEZXB0aChaZSksTm49WmUpfSxyZXNldDpmdW5jdGlvbigpe2dlPSExLGZuPW51bGwsWnQ9bnVsbCxObj1udWxsfX19LGM9bmV3IGZ1bmN0aW9uKCl7bGV0IGdlPSExLGZuPW51bGwsWnQ9bnVsbCxObj1udWxsLFplPW51bGwsRG49bnVsbCxNaT1udWxsLFRyPW51bGwsRXM9bnVsbDtyZXR1cm57c2V0VGVzdDpmdW5jdGlvbihCcil7Z2V8fChCcj9BZSgyOTYwKTp0bigyOTYwKSl9LHNldE1hc2s6ZnVuY3Rpb24oQnIpe2ZuIT09QnImJiFnZSYmKG4uc3RlbmNpbE1hc2soQnIpLGZuPUJyKX0sc2V0RnVuYzpmdW5jdGlvbihCcixQbCxiYSl7KFp0IT09QnJ8fE5uIT09UGx8fFplIT09YmEpJiYobi5zdGVuY2lsRnVuYyhCcixQbCxiYSksWnQ9QnIsTm49UGwsWmU9YmEpfSxzZXRPcDpmdW5jdGlvbihCcixQbCxiYSl7KERuIT09QnJ8fE1pIT09UGx8fFRyIT09YmEpJiYobi5zdGVuY2lsT3AoQnIsUGwsYmEpLERuPUJyLE1pPVBsLFRyPWJhKX0sc2V0TG9ja2VkOmZ1bmN0aW9uKEJyKXtnZT1Ccn0sc2V0Q2xlYXI6ZnVuY3Rpb24oQnIpe0VzIT09QnImJihuLmNsZWFyU3RlbmNpbChCciksRXM9QnIpfSxyZXNldDpmdW5jdGlvbigpe2dlPSExLGZuPW51bGwsWnQ9bnVsbCxObj1udWxsLFplPW51bGwsRG49bnVsbCxNaT1udWxsLFRyPW51bGwsRXM9bnVsbH19fSx1PXt9LGQ9e30scD1uZXcgV2Vha01hcCxoPVtdLGY9bnVsbCxtPSExLHg9bnVsbCxnPW51bGwsYj1udWxsLEQ9bnVsbCxUPW51bGwsaz1udWxsLFo9bnVsbCx6PSExLGZlPW51bGwsdWU9bnVsbCxoZT1udWxsLHc9bnVsbCxGPW51bGwscT1uLmdldFBhcmFtZXRlcigzNTY2MSksSz0hMSxkZT0wLFk9bi5nZXRQYXJhbWV0ZXIoNzkzOCk7LTEhPT1ZLmluZGV4T2YoIldlYkdMIik/KGRlPXBhcnNlRmxvYXQoL15XZWJHTCAoXGQpLy5leGVjKFkpWzFdKSxLPWRlPj0xKTotMSE9PVkuaW5kZXhPZigiT3BlbkdMIEVTIikmJihkZT1wYXJzZUZsb2F0KC9eT3BlbkdMIEVTIChcZCkvLmV4ZWMoWSlbMV0pLEs9ZGU+PTIpO2xldCBhZT1udWxsLGxlPXt9LEllPW4uZ2V0UGFyYW1ldGVyKDMwODgpLHZlPW4uZ2V0UGFyYW1ldGVyKDI5NzgpLERlPShuZXcgYXIpLmZyb21BcnJheShJZSksbnQ9KG5ldyBhcikuZnJvbUFycmF5KHZlKTtmdW5jdGlvbiBndChnZSxmbixadCl7bGV0IE5uPW5ldyBVaW50OEFycmF5KDQpLFplPW4uY3JlYXRlVGV4dHVyZSgpO24uYmluZFRleHR1cmUoZ2UsWmUpLG4udGV4UGFyYW1ldGVyaShnZSwxMDI0MSw5NzI4KSxuLnRleFBhcmFtZXRlcmkoZ2UsMTAyNDAsOTcyOCk7Zm9yKGxldCBEbj0wO0RuPFp0O0RuKyspbi50ZXhJbWFnZTJEKGZuK0RuLDAsNjQwOCwxLDEsMCw2NDA4LDUxMjEsTm4pO3JldHVybiBaZX1sZXQgVWU9e307ZnVuY3Rpb24gQWUoZ2UpeyEwIT09dVtnZV0mJihuLmVuYWJsZShnZSksdVtnZV09ITApfWZ1bmN0aW9uIHRuKGdlKXshMSE9PXVbZ2VdJiYobi5kaXNhYmxlKGdlKSx1W2dlXT0hMSl9VWVbMzU1M109Z3QoMzU1MywzNTUzLDEpLFVlWzM0MDY3XT1ndCgzNDA2NywzNDA2OSw2KSxhLnNldENsZWFyKDAsMCwwLDEpLGwuc2V0Q2xlYXIoMSksYy5zZXRDbGVhcigwKSxBZSgyOTI5KSxsLnNldEZ1bmMoMyksV2UoITEpLE10KDEpLEFlKDI4ODQpLGNlKDApO2xldCB4dD17MTAwOjMyNzc0LDEwMTozMjc3OCwxMDI6MzI3Nzl9O2lmKGkpeHRbMTAzXT0zMjc3NSx4dFsxMDRdPTMyNzc2O2Vsc2V7bGV0IGdlPXQuZ2V0KCJFWFRfYmxlbmRfbWlubWF4Iik7bnVsbCE9PWdlJiYoeHRbMTAzXT1nZS5NSU5fRVhULHh0WzEwNF09Z2UuTUFYX0VYVCl9bGV0IG10PXsyMDA6MCwyMDE6MSwyMDI6NzY4LDIwNDo3NzAsMjEwOjc3NiwyMDg6Nzc0LDIwNjo3NzIsMjAzOjc2OSwyMDU6NzcxLDIwOTo3NzUsMjA3Ojc3M307ZnVuY3Rpb24gY2UoZ2UsZm4sWnQsTm4sWmUsRG4sTWksVHIpe2lmKDAhPT1nZSl7aWYoITE9PT1tJiYoQWUoMzA0MiksbT0hMCksNT09PWdlKVplPVplfHxmbixEbj1Ebnx8WnQsTWk9TWl8fE5uLChmbiE9PWd8fFplIT09VCkmJihuLmJsZW5kRXF1YXRpb25TZXBhcmF0ZSh4dFtmbl0seHRbWmVdKSxnPWZuLFQ9WmUpLChadCE9PWJ8fE5uIT09RHx8RG4hPT1rfHxNaSE9PVopJiYobi5ibGVuZEZ1bmNTZXBhcmF0ZShtdFtadF0sbXRbTm5dLG10W0RuXSxtdFtNaV0pLGI9WnQsRD1ObixrPURuLFo9TWkpLHg9Z2Usej1udWxsO2Vsc2UgaWYoZ2UhPT14fHxUciE9PXope2lmKCgxMDAhPT1nfHwxMDAhPT1UKSYmKG4uYmxlbmRFcXVhdGlvbigzMjc3NCksZz0xMDAsVD0xMDApLFRyKXN3aXRjaChnZSl7Y2FzZSAxOm4uYmxlbmRGdW5jU2VwYXJhdGUoMSw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYygxLDEpO2JyZWFrO2Nhc2UgMzpuLmJsZW5kRnVuY1NlcGFyYXRlKDAsNzY5LDAsMSk7YnJlYWs7Y2FzZSA0Om4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjgsMCw3NzApO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixnZSl9ZWxzZSBzd2l0Y2goZ2Upe2Nhc2UgMTpuLmJsZW5kRnVuY1NlcGFyYXRlKDc3MCw3NzEsMSw3NzEpO2JyZWFrO2Nhc2UgMjpuLmJsZW5kRnVuYyg3NzAsMSk7YnJlYWs7Y2FzZSAzOm4uYmxlbmRGdW5jU2VwYXJhdGUoMCw3NjksMCwxKTticmVhaztjYXNlIDQ6bi5ibGVuZEZ1bmMoMCw3NjgpO2JyZWFrO2RlZmF1bHQ6Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZTogSW52YWxpZCBibGVuZGluZzogIixnZSl9Yj1udWxsLEQ9bnVsbCxrPW51bGwsWj1udWxsLHg9Z2Usej1Ucn19ZWxzZSEwPT09bSYmKHRuKDMwNDIpLG09ITEpfWZ1bmN0aW9uIFdlKGdlKXtmZSE9PWdlJiYobi5mcm9udEZhY2UoZ2U/MjMwNDoyMzA1KSxmZT1nZSl9ZnVuY3Rpb24gTXQoZ2UpezAhPT1nZT8oQWUoMjg4NCksZ2UhPT11ZSYmbi5jdWxsRmFjZSgxPT09Z2U/MTAyOToyPT09Z2U/MTAyODoxMDMyKSk6dG4oMjg4NCksdWU9Z2V9ZnVuY3Rpb24gaG4oZ2UsZm4sWnQpe2dlPyhBZSgzMjgyMyksKHchPT1mbnx8RiE9PVp0KSYmKG4ucG9seWdvbk9mZnNldChmbixadCksdz1mbixGPVp0KSk6dG4oMzI4MjMpfWZ1bmN0aW9uIGZpKGdlKXt2b2lkIDA9PT1nZSYmKGdlPTMzOTg0K3EtMSksYWUhPT1nZSYmKG4uYWN0aXZlVGV4dHVyZShnZSksYWU9Z2UpfXJldHVybntidWZmZXJzOntjb2xvcjphLGRlcHRoOmwsc3RlbmNpbDpjfSxlbmFibGU6QWUsZGlzYWJsZTp0bixiaW5kRnJhbWVidWZmZXI6ZnVuY3Rpb24oZ2UsZm4pe3JldHVybiBkW2dlXSE9PWZuJiYobi5iaW5kRnJhbWVidWZmZXIoZ2UsZm4pLGRbZ2VdPWZuLGkmJigzNjAwOT09PWdlJiYoZFszNjE2MF09Zm4pLDM2MTYwPT09Z2UmJihkWzM2MDA5XT1mbikpLCEwKX0sZHJhd0J1ZmZlcnM6ZnVuY3Rpb24oZ2UsZm4pe2xldCBadD1oLE5uPSExO2lmKGdlKWlmKFp0PXAuZ2V0KGZuKSx2b2lkIDA9PT1adCYmKFp0PVtdLHAuc2V0KGZuLFp0KSksZ2UuaXNXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyl7bGV0IFplPWdlLnRleHR1cmU7aWYoWnQubGVuZ3RoIT09WmUubGVuZ3RofHwzNjA2NCE9PVp0WzBdKXtmb3IobGV0IERuPTAsTWk9WmUubGVuZ3RoO0RuPE1pO0RuKyspWnRbRG5dPTM2MDY0K0RuO1p0Lmxlbmd0aD1aZS5sZW5ndGgsTm49ITB9fWVsc2UgMzYwNjQhPT1adFswXSYmKFp0WzBdPTM2MDY0LE5uPSEwKTtlbHNlIDEwMjkhPT1adFswXSYmKFp0WzBdPTEwMjksTm49ITApO05uJiYoZS5pc1dlYkdMMj9uLmRyYXdCdWZmZXJzKFp0KTp0LmdldCgiV0VCR0xfZHJhd19idWZmZXJzIikuZHJhd0J1ZmZlcnNXRUJHTChadCkpfSx1c2VQcm9ncmFtOmZ1bmN0aW9uKGdlKXtyZXR1cm4gZiE9PWdlJiYobi51c2VQcm9ncmFtKGdlKSxmPWdlLCEwKX0sc2V0QmxlbmRpbmc6Y2Usc2V0TWF0ZXJpYWw6ZnVuY3Rpb24oZ2UsZm4pezI9PT1nZS5zaWRlP3RuKDI4ODQpOkFlKDI4ODQpO2xldCBadD0xPT09Z2Uuc2lkZTtmbiYmKFp0PSFadCksV2UoWnQpLDE9PT1nZS5ibGVuZGluZyYmITE9PT1nZS50cmFuc3BhcmVudD9jZSgwKTpjZShnZS5ibGVuZGluZyxnZS5ibGVuZEVxdWF0aW9uLGdlLmJsZW5kU3JjLGdlLmJsZW5kRHN0LGdlLmJsZW5kRXF1YXRpb25BbHBoYSxnZS5ibGVuZFNyY0FscGhhLGdlLmJsZW5kRHN0QWxwaGEsZ2UucHJlbXVsdGlwbGllZEFscGhhKSxsLnNldEZ1bmMoZ2UuZGVwdGhGdW5jKSxsLnNldFRlc3QoZ2UuZGVwdGhUZXN0KSxsLnNldE1hc2soZ2UuZGVwdGhXcml0ZSksYS5zZXRNYXNrKGdlLmNvbG9yV3JpdGUpO2xldCBObj1nZS5zdGVuY2lsV3JpdGU7Yy5zZXRUZXN0KE5uKSxObiYmKGMuc2V0TWFzayhnZS5zdGVuY2lsV3JpdGVNYXNrKSxjLnNldEZ1bmMoZ2Uuc3RlbmNpbEZ1bmMsZ2Uuc3RlbmNpbFJlZixnZS5zdGVuY2lsRnVuY01hc2spLGMuc2V0T3AoZ2Uuc3RlbmNpbEZhaWwsZ2Uuc3RlbmNpbFpGYWlsLGdlLnN0ZW5jaWxaUGFzcykpLGhuKGdlLnBvbHlnb25PZmZzZXQsZ2UucG9seWdvbk9mZnNldEZhY3RvcixnZS5wb2x5Z29uT2Zmc2V0VW5pdHMpLCEwPT09Z2UuYWxwaGFUb0NvdmVyYWdlP0FlKDMyOTI2KTp0bigzMjkyNil9LHNldEZsaXBTaWRlZDpXZSxzZXRDdWxsRmFjZTpNdCxzZXRMaW5lV2lkdGg6ZnVuY3Rpb24oZ2Upe2dlIT09aGUmJihLJiZuLmxpbmVXaWR0aChnZSksaGU9Z2UpfSxzZXRQb2x5Z29uT2Zmc2V0OmhuLHNldFNjaXNzb3JUZXN0OmZ1bmN0aW9uKGdlKXtnZT9BZSgzMDg5KTp0bigzMDg5KX0sYWN0aXZlVGV4dHVyZTpmaSxiaW5kVGV4dHVyZTpmdW5jdGlvbihnZSxmbil7bnVsbD09PWFlJiZmaSgpO2xldCBadD1sZVthZV07dm9pZCAwPT09WnQmJihadD17dHlwZTp2b2lkIDAsdGV4dHVyZTp2b2lkIDB9LGxlW2FlXT1adCksKFp0LnR5cGUhPT1nZXx8WnQudGV4dHVyZSE9PWZuKSYmKG4uYmluZFRleHR1cmUoZ2UsZm58fFVlW2dlXSksWnQudHlwZT1nZSxadC50ZXh0dXJlPWZuKX0sdW5iaW5kVGV4dHVyZTpmdW5jdGlvbigpe2xldCBnZT1sZVthZV07dm9pZCAwIT09Z2UmJnZvaWQgMCE9PWdlLnR5cGUmJihuLmJpbmRUZXh0dXJlKGdlLnR5cGUsbnVsbCksZ2UudHlwZT12b2lkIDAsZ2UudGV4dHVyZT12b2lkIDApfSxjb21wcmVzc2VkVGV4SW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLmNvbXByZXNzZWRUZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChnZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGdlKX19LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7bi50ZXhJbWFnZTJELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChnZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGdlKX19LHRleEltYWdlM0Q6ZnVuY3Rpb24oKXt0cnl7bi50ZXhJbWFnZTNELmFwcGx5KG4sYXJndW1lbnRzKX1jYXRjaChnZSl7Y29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xTdGF0ZToiLGdlKX19LHRleFN0b3JhZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleFN0b3JhZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goZ2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixnZSl9fSx0ZXhTdG9yYWdlM0Q6ZnVuY3Rpb24oKXt0cnl7bi50ZXhTdG9yYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGdlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsZ2UpfX0sdGV4U3ViSW1hZ2UyRDpmdW5jdGlvbigpe3RyeXtuLnRleFN1YkltYWdlMkQuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGdlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsZ2UpfX0sdGV4U3ViSW1hZ2UzRDpmdW5jdGlvbigpe3RyeXtuLnRleFN1YkltYWdlM0QuYXBwbHkobixhcmd1bWVudHMpfWNhdGNoKGdlKXtjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFN0YXRlOiIsZ2UpfX0sY29tcHJlc3NlZFRleFN1YkltYWdlMkQ6ZnVuY3Rpb24oKXt0cnl7bi5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRC5hcHBseShuLGFyZ3VtZW50cyl9Y2F0Y2goZ2Upe2NvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMU3RhdGU6IixnZSl9fSxzY2lzc29yOmZ1bmN0aW9uKGdlKXshMT09PURlLmVxdWFscyhnZSkmJihuLnNjaXNzb3IoZ2UueCxnZS55LGdlLnosZ2UudyksRGUuY29weShnZSkpfSx2aWV3cG9ydDpmdW5jdGlvbihnZSl7ITE9PT1udC5lcXVhbHMoZ2UpJiYobi52aWV3cG9ydChnZS54LGdlLnksZ2UueixnZS53KSxudC5jb3B5KGdlKSl9LHJlc2V0OmZ1bmN0aW9uKCl7bi5kaXNhYmxlKDMwNDIpLG4uZGlzYWJsZSgyODg0KSxuLmRpc2FibGUoMjkyOSksbi5kaXNhYmxlKDMyODIzKSxuLmRpc2FibGUoMzA4OSksbi5kaXNhYmxlKDI5NjApLG4uZGlzYWJsZSgzMjkyNiksbi5ibGVuZEVxdWF0aW9uKDMyNzc0KSxuLmJsZW5kRnVuYygxLDApLG4uYmxlbmRGdW5jU2VwYXJhdGUoMSwwLDEsMCksbi5jb2xvck1hc2soITAsITAsITAsITApLG4uY2xlYXJDb2xvcigwLDAsMCwwKSxuLmRlcHRoTWFzayghMCksbi5kZXB0aEZ1bmMoNTEzKSxuLmNsZWFyRGVwdGgoMSksbi5zdGVuY2lsTWFzayg0Mjk0OTY3Mjk1KSxuLnN0ZW5jaWxGdW5jKDUxOSwwLDQyOTQ5NjcyOTUpLG4uc3RlbmNpbE9wKDc2ODAsNzY4MCw3NjgwKSxuLmNsZWFyU3RlbmNpbCgwKSxuLmN1bGxGYWNlKDEwMjkpLG4uZnJvbnRGYWNlKDIzMDUpLG4ucG9seWdvbk9mZnNldCgwLDApLG4uYWN0aXZlVGV4dHVyZSgzMzk4NCksbi5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksITA9PT1pJiYobi5iaW5kRnJhbWVidWZmZXIoMzYwMDksbnVsbCksbi5iaW5kRnJhbWVidWZmZXIoMzYwMDgsbnVsbCkpLG4udXNlUHJvZ3JhbShudWxsKSxuLmxpbmVXaWR0aCgxKSxuLnNjaXNzb3IoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbi52aWV3cG9ydCgwLDAsbi5jYW52YXMud2lkdGgsbi5jYW52YXMuaGVpZ2h0KSx1PXt9LGFlPW51bGwsbGU9e30sZD17fSxwPW5ldyBXZWFrTWFwLGg9W10sZj1udWxsLG09ITEseD1udWxsLGc9bnVsbCxiPW51bGwsRD1udWxsLFQ9bnVsbCxrPW51bGwsWj1udWxsLHo9ITEsZmU9bnVsbCx1ZT1udWxsLGhlPW51bGwsdz1udWxsLEY9bnVsbCxEZS5zZXQoMCwwLG4uY2FudmFzLndpZHRoLG4uY2FudmFzLmhlaWdodCksbnQuc2V0KDAsMCxuLmNhbnZhcy53aWR0aCxuLmNhbnZhcy5oZWlnaHQpLGEucmVzZXQoKSxsLnJlc2V0KCksYy5yZXNldCgpfX19ZnVuY3Rpb24gaDllKG4sdCxlLGkscixvLHMpe2xldCBtLGE9ci5pc1dlYkdMMixsPXIubWF4VGV4dHVyZXMsYz1yLm1heEN1YmVtYXBTaXplLHU9ci5tYXhUZXh0dXJlU2l6ZSxkPXIubWF4U2FtcGxlcyxoPXQuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKT90LmdldCgiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIik6dm9pZCAwLGY9bmV3IFdlYWtNYXAseD0hMTt0cnl7eD10eXBlb2YgT2Zmc2NyZWVuQ2FudmFzPCJ1IiYmbnVsbCE9PW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpfWNhdGNoe31mdW5jdGlvbiBnKGVlLFcpe3JldHVybiB4P25ldyBPZmZzY3JlZW5DYW52YXMoZWUsVyk6WVMoImNhbnZhcyIpfWZ1bmN0aW9uIGIoZWUsVyxYZSxUdCl7bGV0IG1uPTE7aWYoKGVlLndpZHRoPlR0fHxlZS5oZWlnaHQ+VHQpJiYobW49VHQvTWF0aC5tYXgoZWUud2lkdGgsZWUuaGVpZ2h0KSksbW48MXx8ITA9PT1XKXtpZih0eXBlb2YgSFRNTEltYWdlRWxlbWVudDwidSImJmVlIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudHx8dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50PCJ1IiYmZWUgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudHx8dHlwZW9mIEltYWdlQml0bWFwPCJ1IiYmZWUgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCl7bGV0IHFlPVc/SDhlOk1hdGguZmxvb3Isd249cWUobW4qZWUud2lkdGgpLHluPXFlKG1uKmVlLmhlaWdodCk7dm9pZCAwPT09bSYmKG09Zyh3bix5bikpO2xldCB6dD1YZT9nKHduLHluKTptO3JldHVybiB6dC53aWR0aD13bix6dC5oZWlnaHQ9eW4senQuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoZWUsMCwwLHduLHluKSxjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaGFzIGJlZW4gcmVzaXplZCBmcm9tICgiK2VlLndpZHRoKyJ4IitlZS5oZWlnaHQrIikgdG8gKCIrd24rIngiK3luKyIpLiIpLHp0fXJldHVybiJkYXRhImluIGVlJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEltYWdlIGluIERhdGFUZXh0dXJlIGlzIHRvbyBiaWcgKCIrZWUud2lkdGgrIngiK2VlLmhlaWdodCsiKS4iKSxlZX1yZXR1cm4gZWV9ZnVuY3Rpb24gRChlZSl7cmV0dXJuIHh1ZShlZS53aWR0aCkmJnh1ZShlZS5oZWlnaHQpfWZ1bmN0aW9uIGsoZWUsVyl7cmV0dXJuIGVlLmdlbmVyYXRlTWlwbWFwcyYmVyYmZWUubWluRmlsdGVyIT09Wm8mJmVlLm1pbkZpbHRlciE9PUdzfWZ1bmN0aW9uIFooZWUpe24uZ2VuZXJhdGVNaXBtYXAoZWUpfWZ1bmN0aW9uIHooZWUsVyxYZSxUdCxtbj0hMSl7aWYoITE9PT1hKXJldHVybiBXO2lmKG51bGwhPT1lZSl7aWYodm9pZCAwIT09bltlZV0pcmV0dXJuIG5bZWVdO2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQXR0ZW1wdCB0byB1c2Ugbm9uLWV4aXN0aW5nIFdlYkdMIGludGVybmFsIGZvcm1hdCAnIitlZSsiJyIpfWxldCBxZT1XO3JldHVybiA2NDAzPT09VyYmKDUxMjY9PT1YZSYmKHFlPTMzMzI2KSw1MTMxPT09WGUmJihxZT0zMzMyNSksNTEyMT09PVhlJiYocWU9MzMzMjEpKSwzMzMxOT09PVcmJig1MTI2PT09WGUmJihxZT0zMzMyOCksNTEzMT09PVhlJiYocWU9MzMzMjcpLDUxMjE9PT1YZSYmKHFlPTMzMzIzKSksNjQwOD09PVcmJig1MTI2PT09WGUmJihxZT0zNDgzNiksNTEzMT09PVhlJiYocWU9MzQ4NDIpLDUxMjE9PT1YZSYmKHFlPVR0PT09V3ImJiExPT09bW4/MzU5MDc6MzI4NTYpLDMyODE5PT09WGUmJihxZT0zMjg1NCksMzI4MjA9PT1YZSYmKHFlPTMyODU1KSksKDMzMzI1PT09cWV8fDMzMzI2PT09cWV8fDMzMzI3PT09cWV8fDMzMzI4PT09cWV8fDM0ODQyPT09cWV8fDM0ODM2PT09cWUpJiZ0LmdldCgiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpLHFlfWZ1bmN0aW9uIGZlKGVlLFcsWGUpe3JldHVybiEwPT09ayhlZSxYZSl8fGVlLmlzRnJhbWVidWZmZXJUZXh0dXJlJiZlZS5taW5GaWx0ZXIhPT1abyYmZWUubWluRmlsdGVyIT09R3M/TWF0aC5sb2cyKE1hdGgubWF4KFcud2lkdGgsVy5oZWlnaHQpKSsxOnZvaWQgMCE9PWVlLm1pcG1hcHMmJmVlLm1pcG1hcHMubGVuZ3RoPjA/ZWUubWlwbWFwcy5sZW5ndGg6ZWUuaXNDb21wcmVzc2VkVGV4dHVyZSYmQXJyYXkuaXNBcnJheShlZS5pbWFnZSk/Vy5taXBtYXBzLmxlbmd0aDoxfWZ1bmN0aW9uIHVlKGVlKXtyZXR1cm4gZWU9PT1ab3x8MTAwND09PWVlfHwxMDA1PT09ZWU/OTcyODo5NzI5fWZ1bmN0aW9uIGhlKGVlKXtsZXQgVz1lZS50YXJnZXQ7Vy5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixoZSksZnVuY3Rpb24oZWUpe2xldCBXPWkuZ2V0KGVlKTt2b2lkIDAhPT1XLl9fd2ViZ2xJbml0JiYobi5kZWxldGVUZXh0dXJlKFcuX193ZWJnbFRleHR1cmUpLGkucmVtb3ZlKGVlKSl9KFcpLFcuaXNWaWRlb1RleHR1cmUmJmYuZGVsZXRlKFcpLHMubWVtb3J5LnRleHR1cmVzLS19ZnVuY3Rpb24gdyhlZSl7bGV0IFc9ZWUudGFyZ2V0O1cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdyksZnVuY3Rpb24oZWUpe2xldCBXPWVlLnRleHR1cmUsWGU9aS5nZXQoZWUpLFR0PWkuZ2V0KFcpO2lmKGVlKXtpZih2b2lkIDAhPT1UdC5fX3dlYmdsVGV4dHVyZSYmKG4uZGVsZXRlVGV4dHVyZShUdC5fX3dlYmdsVGV4dHVyZSkscy5tZW1vcnkudGV4dHVyZXMtLSksZWUuZGVwdGhUZXh0dXJlJiZlZS5kZXB0aFRleHR1cmUuZGlzcG9zZSgpLGVlLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0KWZvcihsZXQgbW49MDttbjw2O21uKyspbi5kZWxldGVGcmFtZWJ1ZmZlcihYZS5fX3dlYmdsRnJhbWVidWZmZXJbbW5dKSxYZS5fX3dlYmdsRGVwdGhidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFhlLl9fd2ViZ2xEZXB0aGJ1ZmZlclttbl0pO2Vsc2Ugbi5kZWxldGVGcmFtZWJ1ZmZlcihYZS5fX3dlYmdsRnJhbWVidWZmZXIpLFhlLl9fd2ViZ2xEZXB0aGJ1ZmZlciYmbi5kZWxldGVSZW5kZXJidWZmZXIoWGUuX193ZWJnbERlcHRoYnVmZmVyKSxYZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXImJm4uZGVsZXRlRnJhbWVidWZmZXIoWGUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxYZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXImJm4uZGVsZXRlUmVuZGVyYnVmZmVyKFhlLl9fd2ViZ2xDb2xvclJlbmRlcmJ1ZmZlciksWGUuX193ZWJnbERlcHRoUmVuZGVyYnVmZmVyJiZuLmRlbGV0ZVJlbmRlcmJ1ZmZlcihYZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIpO2lmKGVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMpZm9yKGxldCBtbj0wLHFlPVcubGVuZ3RoO21uPHFlO21uKyspe2xldCB3bj1pLmdldChXW21uXSk7d24uX193ZWJnbFRleHR1cmUmJihuLmRlbGV0ZVRleHR1cmUod24uX193ZWJnbFRleHR1cmUpLHMubWVtb3J5LnRleHR1cmVzLS0pLGkucmVtb3ZlKFdbbW5dKX1pLnJlbW92ZShXKSxpLnJlbW92ZShlZSl9fShXKX1sZXQgSz0wO2Z1bmN0aW9uIGFlKGVlLFcpe2xldCBYZT1pLmdldChlZSk7aWYoZWUuaXNWaWRlb1RleHR1cmUmJmZ1bmN0aW9uKGVlKXtsZXQgVz1zLnJlbmRlci5mcmFtZTtmLmdldChlZSkhPT1XJiYoZi5zZXQoZWUsVyksZWUudXBkYXRlKCkpfShlZSksZWUudmVyc2lvbj4wJiZYZS5fX3ZlcnNpb24hPT1lZS52ZXJzaW9uKXtsZXQgVHQ9ZWUuaW1hZ2U7aWYodm9pZCAwPT09VHQpY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyB1bmRlZmluZWQiKTtlbHNle2lmKCExIT09VHQuY29tcGxldGUpcmV0dXJuIHZvaWQgQWUoWGUsZWUsVyk7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIG1hcmtlZCBmb3IgdXBkYXRlIGJ1dCBpbWFnZSBpcyBpbmNvbXBsZXRlIil9fWUuYWN0aXZlVGV4dHVyZSgzMzk4NCtXKSxlLmJpbmRUZXh0dXJlKDM1NTMsWGUuX193ZWJnbFRleHR1cmUpfWZ1bmN0aW9uIHZlKGVlLFcpe2xldCBYZT1pLmdldChlZSk7ZWUudmVyc2lvbj4wJiZYZS5fX3ZlcnNpb24hPT1lZS52ZXJzaW9uP2Z1bmN0aW9uKGVlLFcsWGUpe2lmKDYhPT1XLmltYWdlLmxlbmd0aClyZXR1cm47VWUoZWUsVyksZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1hlKSxlLmJpbmRUZXh0dXJlKDM0MDY3LGVlLl9fd2ViZ2xUZXh0dXJlKSxuLnBpeGVsU3RvcmVpKDM3NDQwLFcuZmxpcFkpLG4ucGl4ZWxTdG9yZWkoMzc0NDEsVy5wcmVtdWx0aXBseUFscGhhKSxuLnBpeGVsU3RvcmVpKDMzMTcsVy51bnBhY2tBbGlnbm1lbnQpLG4ucGl4ZWxTdG9yZWkoMzc0NDMsMCk7bGV0IFR0PVcmJihXLmlzQ29tcHJlc3NlZFRleHR1cmV8fFcuaW1hZ2VbMF0uaXNDb21wcmVzc2VkVGV4dHVyZSksbW49Vy5pbWFnZVswXSYmVy5pbWFnZVswXS5pc0RhdGFUZXh0dXJlLHFlPVtdO2ZvcihsZXQgWmU9MDtaZTw2O1plKyspcWVbWmVdPVR0fHxtbj9tbj9XLmltYWdlW1plXS5pbWFnZTpXLmltYWdlW1plXTpiKFcuaW1hZ2VbWmVdLCExLCEwLGMpLHFlW1plXT1obihXLHFlW1plXSk7bGV0IE5uLHduPXFlWzBdLHluPUQod24pfHxhLHp0PW8uY29udmVydChXLmZvcm1hdCxXLmVuY29kaW5nKSxVdD1vLmNvbnZlcnQoVy50eXBlKSxXbj16KFcuaW50ZXJuYWxGb3JtYXQsenQsVXQsVy5lbmNvZGluZyksZ2U9YSYmITAhPT1XLmlzVmlkZW9UZXh0dXJlLGZuPXZvaWQgMD09PWVlLl9fdmVyc2lvbixadD1mZShXLHduLHluKTtpZihndCgzNDA2NyxXLHluKSxUdCl7Z2UmJmZuJiZlLnRleFN0b3JhZ2UyRCgzNDA2NyxadCxXbix3bi53aWR0aCx3bi5oZWlnaHQpO2ZvcihsZXQgWmU9MDtaZTw2O1plKyspe05uPXFlW1plXS5taXBtYXBzO2ZvcihsZXQgRG49MDtEbjxObi5sZW5ndGg7RG4rKyl7bGV0IE1pPU5uW0RuXTtXLmZvcm1hdCE9PWdhP251bGwhPT16dD9nZT9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM0MDY5K1plLERuLDAsMCxNaS53aWR0aCxNaS5oZWlnaHQsenQsTWkuZGF0YSk6ZS5jb21wcmVzc2VkVGV4SW1hZ2UyRCgzNDA2OStaZSxEbixXbixNaS53aWR0aCxNaS5oZWlnaHQsMCxNaS5kYXRhKTpjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IEF0dGVtcHQgdG8gbG9hZCB1bnN1cHBvcnRlZCBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0IGluIC5zZXRUZXh0dXJlQ3ViZSgpIik6Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLERuLDAsMCxNaS53aWR0aCxNaS5oZWlnaHQsenQsVXQsTWkuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLERuLFduLE1pLndpZHRoLE1pLmhlaWdodCwwLHp0LFV0LE1pLmRhdGEpfX19ZWxzZXtObj1XLm1pcG1hcHMsZ2UmJmZuJiYoTm4ubGVuZ3RoPjAmJlp0KyssZS50ZXhTdG9yYWdlMkQoMzQwNjcsWnQsV24scWVbMF0ud2lkdGgscWVbMF0uaGVpZ2h0KSk7Zm9yKGxldCBaZT0wO1plPDY7WmUrKylpZihtbil7Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLDAsMCwwLHFlW1plXS53aWR0aCxxZVtaZV0uaGVpZ2h0LHp0LFV0LHFlW1plXS5kYXRhKTplLnRleEltYWdlMkQoMzQwNjkrWmUsMCxXbixxZVtaZV0ud2lkdGgscWVbWmVdLmhlaWdodCwwLHp0LFV0LHFlW1plXS5kYXRhKTtmb3IobGV0IERuPTA7RG48Tm4ubGVuZ3RoO0RuKyspe2xldCBUcj1ObltEbl0uaW1hZ2VbWmVdLmltYWdlO2dlP2UudGV4U3ViSW1hZ2UyRCgzNDA2OStaZSxEbisxLDAsMCxUci53aWR0aCxUci5oZWlnaHQsenQsVXQsVHIuZGF0YSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLERuKzEsV24sVHIud2lkdGgsVHIuaGVpZ2h0LDAsenQsVXQsVHIuZGF0YSl9fWVsc2V7Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLDAsMCwwLHp0LFV0LHFlW1plXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLDAsV24senQsVXQscWVbWmVdKTtmb3IobGV0IERuPTA7RG48Tm4ubGVuZ3RoO0RuKyspe2xldCBNaT1ObltEbl07Z2U/ZS50ZXhTdWJJbWFnZTJEKDM0MDY5K1plLERuKzEsMCwwLHp0LFV0LE1pLmltYWdlW1plXSk6ZS50ZXhJbWFnZTJEKDM0MDY5K1plLERuKzEsV24senQsVXQsTWkuaW1hZ2VbWmVdKX19fWsoVyx5bikmJlooMzQwNjcpLGVlLl9fdmVyc2lvbj1XLnZlcnNpb24sVy5vblVwZGF0ZSYmVy5vblVwZGF0ZShXKX0oWGUsZWUsVyk6KGUuYWN0aXZlVGV4dHVyZSgzMzk4NCtXKSxlLmJpbmRUZXh0dXJlKDM0MDY3LFhlLl9fd2ViZ2xUZXh0dXJlKSl9bGV0IERlPXsxZTM6MTA0OTcsW0VsXTozMzA3MSwxMDAyOjMzNjQ4fSxudD17W1pvXTo5NzI4LDEwMDQ6OTk4NCwxMDA1Ojk5ODYsW0dzXTo5NzI5LDEwMDc6OTk4NSwxMDA4Ojk5ODd9O2Z1bmN0aW9uIGd0KGVlLFcsWGUpe2lmKFhlPyhuLnRleFBhcmFtZXRlcmkoZWUsMTAyNDIsRGVbVy53cmFwU10pLG4udGV4UGFyYW1ldGVyaShlZSwxMDI0MyxEZVtXLndyYXBUXSksKDMyODc5PT09ZWV8fDM1ODY2PT09ZWUpJiZuLnRleFBhcmFtZXRlcmkoZWUsMzI4ODIsRGVbVy53cmFwUl0pLG4udGV4UGFyYW1ldGVyaShlZSwxMDI0MCxudFtXLm1hZ0ZpbHRlcl0pLG4udGV4UGFyYW1ldGVyaShlZSwxMDI0MSxudFtXLm1pbkZpbHRlcl0pKToobi50ZXhQYXJhbWV0ZXJpKGVlLDEwMjQyLDMzMDcxKSxuLnRleFBhcmFtZXRlcmkoZWUsMTAyNDMsMzMwNzEpLCgzMjg3OT09PWVlfHwzNTg2Nj09PWVlKSYmbi50ZXhQYXJhbWV0ZXJpKGVlLDMyODgyLDMzMDcxKSwoVy53cmFwUyE9PUVsfHxXLndyYXBUIT09RWwpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFRleHR1cmUgaXMgbm90IHBvd2VyIG9mIHR3by4gVGV4dHVyZS53cmFwUyBhbmQgVGV4dHVyZS53cmFwVCBzaG91bGQgYmUgc2V0IHRvIFRIUkVFLkNsYW1wVG9FZGdlV3JhcHBpbmcuIiksbi50ZXhQYXJhbWV0ZXJpKGVlLDEwMjQwLHVlKFcubWFnRmlsdGVyKSksbi50ZXhQYXJhbWV0ZXJpKGVlLDEwMjQxLHVlKFcubWluRmlsdGVyKSksVy5taW5GaWx0ZXIhPT1abyYmVy5taW5GaWx0ZXIhPT1HcyYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBUZXh0dXJlIGlzIG5vdCBwb3dlciBvZiB0d28uIFRleHR1cmUubWluRmlsdGVyIHNob3VsZCBiZSBzZXQgdG8gVEhSRUUuTmVhcmVzdEZpbHRlciBvciBUSFJFRS5MaW5lYXJGaWx0ZXIuIikpLCEwPT09dC5oYXMoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKXtsZXQgVHQ9dC5nZXQoIkVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpO2lmKFcudHlwZT09PVVnJiYhMT09PXQuaGFzKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8ITE9PT1hJiZXLnR5cGU9PT1sYiYmITE9PT10LmhhcygiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSlyZXR1cm47KFcuYW5pc290cm9weT4xfHxpLmdldChXKS5fX2N1cnJlbnRBbmlzb3Ryb3B5KSYmKG4udGV4UGFyYW1ldGVyZihlZSxUdC5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxNYXRoLm1pbihXLmFuaXNvdHJvcHksci5nZXRNYXhBbmlzb3Ryb3B5KCkpKSxpLmdldChXKS5fX2N1cnJlbnRBbmlzb3Ryb3B5PVcuYW5pc290cm9weSl9fWZ1bmN0aW9uIFVlKGVlLFcpe3ZvaWQgMD09PWVlLl9fd2ViZ2xJbml0JiYoZWUuX193ZWJnbEluaXQ9ITAsVy5hZGRFdmVudExpc3RlbmVyKCJkaXNwb3NlIixoZSksZWUuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9ZnVuY3Rpb24gQWUoZWUsVyxYZSl7bGV0IFR0PTM1NTM7Vy5pc0RhdGFUZXh0dXJlMkRBcnJheSYmKFR0PTM1ODY2KSxXLmlzRGF0YVRleHR1cmUzRCYmKFR0PTMyODc5KSxVZShlZSxXKSxlLmFjdGl2ZVRleHR1cmUoMzM5ODQrWGUpLGUuYmluZFRleHR1cmUoVHQsZWUuX193ZWJnbFRleHR1cmUpLG4ucGl4ZWxTdG9yZWkoMzc0NDAsVy5mbGlwWSksbi5waXhlbFN0b3JlaSgzNzQ0MSxXLnByZW11bHRpcGx5QWxwaGEpLG4ucGl4ZWxTdG9yZWkoMzMxNyxXLnVucGFja0FsaWdubWVudCksbi5waXhlbFN0b3JlaSgzNzQ0MywwKTtsZXQgbW49ZnVuY3Rpb24oZWUpe3JldHVybiFhJiYoZWUud3JhcFMhPT1FbHx8ZWUud3JhcFQhPT1FbHx8ZWUubWluRmlsdGVyIT09Wm8mJmVlLm1pbkZpbHRlciE9PUdzKX0oVykmJiExPT09RChXLmltYWdlKSxxZT1iKFcuaW1hZ2UsbW4sITEsdSk7cWU9aG4oVyxxZSk7bGV0IHduPUQocWUpfHxhLHluPW8uY29udmVydChXLmZvcm1hdCxXLmVuY29kaW5nKSx6dD1vLmNvbnZlcnQoVy50eXBlKSxVdD16KFcuaW50ZXJuYWxGb3JtYXQseW4senQsVy5lbmNvZGluZyxXLmlzVmlkZW9UZXh0dXJlKTtndChUdCxXLHduKTtsZXQgV24sZ2U9Vy5taXBtYXBzLGZuPWEmJiEwIT09Vy5pc1ZpZGVvVGV4dHVyZSxadD12b2lkIDA9PT1lZS5fX3ZlcnNpb24sTm49ZmUoVyxxZSx3bik7aWYoVy5pc0RlcHRoVGV4dHVyZSlVdD02NDAyLGE/VXQ9Vy50eXBlPT09VWc/MzYwMTI6MTAxND09PVcudHlwZT8zMzE5MDpXLnR5cGU9PT1jYj8zNTA1NjozMzE4OTpXLnR5cGU9PT1VZyYmY29uc29sZS5lcnJvcigiV2ViR0xSZW5kZXJlcjogRmxvYXRpbmcgcG9pbnQgZGVwdGggdGV4dHVyZSByZXF1aXJlcyBXZWJHTDIuIiksVy5mb3JtYXQ9PT1qZyYmNjQwMj09PVV0JiZXLnR5cGUhPT1XUyYmMTAxNCE9PVcudHlwZSYmKGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogVXNlIFVuc2lnbmVkU2hvcnRUeXBlIG9yIFVuc2lnbmVkSW50VHlwZSBmb3IgRGVwdGhGb3JtYXQgRGVwdGhUZXh0dXJlLiIpLFcudHlwZT1XUyx6dD1vLmNvbnZlcnQoVy50eXBlKSksVy5mb3JtYXQ9PT1oYiYmNjQwMj09PVV0JiYoVXQ9MzQwNDEsVy50eXBlIT09Y2ImJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IFVzZSBVbnNpZ25lZEludDI0OFR5cGUgZm9yIERlcHRoU3RlbmNpbEZvcm1hdCBEZXB0aFRleHR1cmUuIiksVy50eXBlPWNiLHp0PW8uY29udmVydChXLnR5cGUpKSksZm4mJlp0P2UudGV4U3RvcmFnZTJEKDM1NTMsMSxVdCxxZS53aWR0aCxxZS5oZWlnaHQpOmUudGV4SW1hZ2UyRCgzNTUzLDAsVXQscWUud2lkdGgscWUuaGVpZ2h0LDAseW4senQsbnVsbCk7ZWxzZSBpZihXLmlzRGF0YVRleHR1cmUpaWYoZ2UubGVuZ3RoPjAmJnduKXtmbiYmWnQmJmUudGV4U3RvcmFnZTJEKDM1NTMsTm4sVXQsZ2VbMF0ud2lkdGgsZ2VbMF0uaGVpZ2h0KTtmb3IobGV0IFplPTAsRG49Z2UubGVuZ3RoO1plPERuO1plKyspV249Z2VbWmVdLGZuP2UudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLFduLndpZHRoLFduLmhlaWdodCx5bix6dCxXbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxaZSxVdCxXbi53aWR0aCxXbi5oZWlnaHQsMCx5bix6dCxXbi5kYXRhKTtXLmdlbmVyYXRlTWlwbWFwcz0hMX1lbHNlIGZuPyhadCYmZS50ZXhTdG9yYWdlMkQoMzU1MyxObixVdCxxZS53aWR0aCxxZS5oZWlnaHQpLGUudGV4U3ViSW1hZ2UyRCgzNTUzLDAsMCwwLHFlLndpZHRoLHFlLmhlaWdodCx5bix6dCxxZS5kYXRhKSk6ZS50ZXhJbWFnZTJEKDM1NTMsMCxVdCxxZS53aWR0aCxxZS5oZWlnaHQsMCx5bix6dCxxZS5kYXRhKTtlbHNlIGlmKFcuaXNDb21wcmVzc2VkVGV4dHVyZSl7Zm4mJlp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLE5uLFV0LGdlWzBdLndpZHRoLGdlWzBdLmhlaWdodCk7Zm9yKGxldCBaZT0wLERuPWdlLmxlbmd0aDtaZTxEbjtaZSsrKVduPWdlW1plXSxXLmZvcm1hdCE9PWdhP251bGwhPT15bj9mbj9lLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsWmUsMCwwLFduLndpZHRoLFduLmhlaWdodCx5bixXbi5kYXRhKTplLmNvbXByZXNzZWRUZXhJbWFnZTJEKDM1NTMsWmUsVXQsV24ud2lkdGgsV24uaGVpZ2h0LDAsV24uZGF0YSk6Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBBdHRlbXB0IHRvIGxvYWQgdW5zdXBwb3J0ZWQgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdCBpbiAudXBsb2FkVGV4dHVyZSgpIik6Zm4/ZS50ZXhTdWJJbWFnZTJEKDM1NTMsWmUsMCwwLFduLndpZHRoLFduLmhlaWdodCx5bix6dCxXbi5kYXRhKTplLnRleEltYWdlMkQoMzU1MyxaZSxVdCxXbi53aWR0aCxXbi5oZWlnaHQsMCx5bix6dCxXbi5kYXRhKX1lbHNlIGlmKFcuaXNEYXRhVGV4dHVyZTJEQXJyYXkpZm4/KFp0JiZlLnRleFN0b3JhZ2UzRCgzNTg2NixObixVdCxxZS53aWR0aCxxZS5oZWlnaHQscWUuZGVwdGgpLGUudGV4U3ViSW1hZ2UzRCgzNTg2NiwwLDAsMCwwLHFlLndpZHRoLHFlLmhlaWdodCxxZS5kZXB0aCx5bix6dCxxZS5kYXRhKSk6ZS50ZXhJbWFnZTNEKDM1ODY2LDAsVXQscWUud2lkdGgscWUuaGVpZ2h0LHFlLmRlcHRoLDAseW4senQscWUuZGF0YSk7ZWxzZSBpZihXLmlzRGF0YVRleHR1cmUzRClmbj8oWnQmJmUudGV4U3RvcmFnZTNEKDMyODc5LE5uLFV0LHFlLndpZHRoLHFlLmhlaWdodCxxZS5kZXB0aCksZS50ZXhTdWJJbWFnZTNEKDMyODc5LDAsMCwwLDAscWUud2lkdGgscWUuaGVpZ2h0LHFlLmRlcHRoLHluLHp0LHFlLmRhdGEpKTplLnRleEltYWdlM0QoMzI4NzksMCxVdCxxZS53aWR0aCxxZS5oZWlnaHQscWUuZGVwdGgsMCx5bix6dCxxZS5kYXRhKTtlbHNlIGlmKFcuaXNGcmFtZWJ1ZmZlclRleHR1cmUpZm4mJlp0P2UudGV4U3RvcmFnZTJEKDM1NTMsTm4sVXQscWUud2lkdGgscWUuaGVpZ2h0KTplLnRleEltYWdlMkQoMzU1MywwLFV0LHFlLndpZHRoLHFlLmhlaWdodCwwLHluLHp0LG51bGwpO2Vsc2UgaWYoZ2UubGVuZ3RoPjAmJnduKXtmbiYmWnQmJmUudGV4U3RvcmFnZTJEKDM1NTMsTm4sVXQsZ2VbMF0ud2lkdGgsZ2VbMF0uaGVpZ2h0KTtmb3IobGV0IFplPTAsRG49Z2UubGVuZ3RoO1plPERuO1plKyspV249Z2VbWmVdLGZuP2UudGV4U3ViSW1hZ2UyRCgzNTUzLFplLDAsMCx5bix6dCxXbik6ZS50ZXhJbWFnZTJEKDM1NTMsWmUsVXQseW4senQsV24pO1cuZ2VuZXJhdGVNaXBtYXBzPSExfWVsc2UgZm4/KFp0JiZlLnRleFN0b3JhZ2UyRCgzNTUzLE5uLFV0LHFlLndpZHRoLHFlLmhlaWdodCksZS50ZXhTdWJJbWFnZTJEKDM1NTMsMCwwLDAseW4senQscWUpKTplLnRleEltYWdlMkQoMzU1MywwLFV0LHluLHp0LHFlKTtrKFcsd24pJiZaKFR0KSxlZS5fX3ZlcnNpb249Vy52ZXJzaW9uLFcub25VcGRhdGUmJlcub25VcGRhdGUoVyl9ZnVuY3Rpb24gcHQoZWUsVyxYZSxUdCxtbil7bGV0IHFlPW8uY29udmVydChYZS5mb3JtYXQsWGUuZW5jb2RpbmcpLHduPW8uY29udmVydChYZS50eXBlKSx5bj16KFhlLmludGVybmFsRm9ybWF0LHFlLHduLFhlLmVuY29kaW5nKTtpLmdldChXKS5fX2hhc0V4dGVybmFsVGV4dHVyZXN8fCgzMjg3OT09PW1ufHwzNTg2Nj09PW1uP2UudGV4SW1hZ2UzRChtbiwwLHluLFcud2lkdGgsVy5oZWlnaHQsVy5kZXB0aCwwLHFlLHduLG51bGwpOmUudGV4SW1hZ2UyRChtbiwwLHluLFcud2lkdGgsVy5oZWlnaHQsMCxxZSx3bixudWxsKSksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZWUpLFcudXNlUmVuZGVyVG9UZXh0dXJlP2guZnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUVYVCgzNjE2MCxUdCxtbixpLmdldChYZSkuX193ZWJnbFRleHR1cmUsMCxNdChXKSk6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCxUdCxtbixpLmdldChYZSkuX193ZWJnbFRleHR1cmUsMCksZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gd3QoZWUsVyxYZSl7aWYobi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGVlKSxXLmRlcHRoQnVmZmVyJiYhVy5zdGVuY2lsQnVmZmVyKXtsZXQgVHQ9MzMxODk7aWYoWGV8fFcudXNlUmVuZGVyVG9UZXh0dXJlKXtsZXQgbW49Vy5kZXB0aFRleHR1cmU7bW4mJm1uLmlzRGVwdGhUZXh0dXJlJiYobW4udHlwZT09PVVnP1R0PTM2MDEyOjEwMTQ9PT1tbi50eXBlJiYoVHQ9MzMxOTApKTtsZXQgcWU9TXQoVyk7Vy51c2VSZW5kZXJUb1RleHR1cmU/aC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEscWUsVHQsVy53aWR0aCxXLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEscWUsVHQsVy53aWR0aCxXLmhlaWdodCl9ZWxzZSBuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsVHQsVy53aWR0aCxXLmhlaWdodCk7bi5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcigzNjE2MCwzNjA5NiwzNjE2MSxlZSl9ZWxzZSBpZihXLmRlcHRoQnVmZmVyJiZXLnN0ZW5jaWxCdWZmZXIpe2xldCBUdD1NdChXKTtYZSYmVy51c2VSZW5kZXJidWZmZXI/bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsVHQsMzUwNTYsVy53aWR0aCxXLmhlaWdodCk6Vy51c2VSZW5kZXJUb1RleHR1cmU/aC5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVFWFQoMzYxNjEsVHQsMzUwNTYsVy53aWR0aCxXLmhlaWdodCk6bi5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLDM0MDQxLFcud2lkdGgsVy5oZWlnaHQpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzMzMDYsMzYxNjEsZWUpfWVsc2V7bGV0IFR0PSEwPT09Vy5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzP1cudGV4dHVyZVswXTpXLnRleHR1cmUsbW49by5jb252ZXJ0KFR0LmZvcm1hdCxUdC5lbmNvZGluZykscWU9by5jb252ZXJ0KFR0LnR5cGUpLHduPXooVHQuaW50ZXJuYWxGb3JtYXQsbW4scWUsVHQuZW5jb2RpbmcpLHluPU10KFcpO1hlJiZXLnVzZVJlbmRlcmJ1ZmZlcj9uLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSgzNjE2MSx5bix3bixXLndpZHRoLFcuaGVpZ2h0KTpXLnVzZVJlbmRlclRvVGV4dHVyZT9oLnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCgzNjE2MSx5bix3bixXLndpZHRoLFcuaGVpZ2h0KTpuLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsd24sVy53aWR0aCxXLmhlaWdodCl9bi5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfWZ1bmN0aW9uIHh0KGVlKXtsZXQgVz1pLmdldChlZSksWGU9ITA9PT1lZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldDtpZihlZS5kZXB0aFRleHR1cmUmJiFXLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXIpe2lmKFhlKXRocm93IG5ldyBFcnJvcigidGFyZ2V0LmRlcHRoVGV4dHVyZSBub3Qgc3VwcG9ydGVkIGluIEN1YmUgcmVuZGVyIHRhcmdldHMiKTshZnVuY3Rpb24oZWUsVyl7aWYoVyYmVy5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCl0aHJvdyBuZXcgRXJyb3IoIkRlcHRoIFRleHR1cmUgd2l0aCBjdWJlIHJlbmRlciB0YXJnZXRzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxlZSksIVcuZGVwdGhUZXh0dXJlfHwhVy5kZXB0aFRleHR1cmUuaXNEZXB0aFRleHR1cmUpdGhyb3cgbmV3IEVycm9yKCJyZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuRGVwdGhUZXh0dXJlIik7KCFpLmdldChXLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmV8fFcuZGVwdGhUZXh0dXJlLmltYWdlLndpZHRoIT09Vy53aWR0aHx8Vy5kZXB0aFRleHR1cmUuaW1hZ2UuaGVpZ2h0IT09Vy5oZWlnaHQpJiYoVy5kZXB0aFRleHR1cmUuaW1hZ2Uud2lkdGg9Vy53aWR0aCxXLmRlcHRoVGV4dHVyZS5pbWFnZS5oZWlnaHQ9Vy5oZWlnaHQsVy5kZXB0aFRleHR1cmUubmVlZHNVcGRhdGU9ITApLGFlKFcuZGVwdGhUZXh0dXJlLDApO2xldCBUdD1pLmdldChXLmRlcHRoVGV4dHVyZSkuX193ZWJnbFRleHR1cmUsbW49TXQoVyk7aWYoVy5kZXB0aFRleHR1cmUuZm9ybWF0PT09amcpVy51c2VSZW5kZXJUb1RleHR1cmU/aC5mcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlRVhUKDM2MTYwLDM2MDk2LDM1NTMsVHQsMCxtbik6bi5mcmFtZWJ1ZmZlclRleHR1cmUyRCgzNjE2MCwzNjA5NiwzNTUzLFR0LDApO2Vsc2V7aWYoVy5kZXB0aFRleHR1cmUuZm9ybWF0IT09aGIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGRlcHRoVGV4dHVyZSBmb3JtYXQiKTtXLnVzZVJlbmRlclRvVGV4dHVyZT9oLmZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVFWFQoMzYxNjAsMzMzMDYsMzU1MyxUdCwwLG1uKTpuLmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDMzMzA2LDM1NTMsVHQsMCl9fShXLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlZSl9ZWxzZSBpZihYZSl7Vy5fX3dlYmdsRGVwdGhidWZmZXI9W107Zm9yKGxldCBUdD0wO1R0PDY7VHQrKyllLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXLl9fd2ViZ2xGcmFtZWJ1ZmZlcltUdF0pLFcuX193ZWJnbERlcHRoYnVmZmVyW1R0XT1uLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpLHd0KFcuX193ZWJnbERlcHRoYnVmZmVyW1R0XSxlZSwhMSl9ZWxzZSBlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxXLl9fd2ViZ2xGcmFtZWJ1ZmZlciksVy5fX3dlYmdsRGVwdGhidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSx3dChXLl9fd2ViZ2xEZXB0aGJ1ZmZlcixlZSwhMSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCl9ZnVuY3Rpb24gTXQoZWUpe3JldHVybiBhJiYoZWUudXNlUmVuZGVyYnVmZmVyfHxlZS51c2VSZW5kZXJUb1RleHR1cmUpP01hdGgubWluKGQsZWUuc2FtcGxlcyk6MH1mdW5jdGlvbiBobihlZSxXKXtsZXQgWGU9ZWUuZW5jb2RpbmcsVHQ9ZWUuZm9ybWF0LG1uPWVlLnR5cGU7cmV0dXJuITA9PT1lZS5pc0NvbXByZXNzZWRUZXh0dXJlfHwhMD09PWVlLmlzVmlkZW9UZXh0dXJlfHwxMDM1PT09ZWUuZm9ybWF0fHxYZSE9PWJmJiYoWGU9PT1Xcj8hMT09PWE/ITA9PT10LmhhcygiRVhUX3NSR0IiKSYmVHQ9PT1nYT8oZWUuZm9ybWF0PTEwMzUsZWUubWluRmlsdGVyPUdzLGVlLmdlbmVyYXRlTWlwbWFwcz0hMSk6Vz1UcC5zUkdCVG9MaW5lYXIoVyk6KFR0IT09Z2F8fG1uIT09X2YpJiZjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXM6IHNSR0IgZW5jb2RlZCB0ZXh0dXJlcyBoYXZlIHRvIHVzZSBSR0JBRm9ybWF0IGFuZCBVbnNpZ25lZEJ5dGVUeXBlLiIpOmNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMVGV4dHVyZXM6IFVuc3VwcG9ydGVkIHRleHR1cmUgZW5jb2Rpbmc6IixYZSkpLFd9bGV0IG9uPSExLGZpPSExO3RoaXMuYWxsb2NhdGVUZXh0dXJlVW5pdD1mdW5jdGlvbigpe2xldCBlZT1LO3JldHVybiBlZT49bCYmY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFRleHR1cmVzOiBUcnlpbmcgdG8gdXNlICIrZWUrIiB0ZXh0dXJlIHVuaXRzIHdoaWxlIHRoaXMgR1BVIHN1cHBvcnRzIG9ubHkgIitsKSxLKz0xLGVlfSx0aGlzLnJlc2V0VGV4dHVyZVVuaXRzPWZ1bmN0aW9uKCl7Sz0wfSx0aGlzLnNldFRleHR1cmUyRD1hZSx0aGlzLnNldFRleHR1cmUyREFycmF5PWZ1bmN0aW9uKGVlLFcpe2xldCBYZT1pLmdldChlZSk7ZWUudmVyc2lvbj4wJiZYZS5fX3ZlcnNpb24hPT1lZS52ZXJzaW9uP0FlKFhlLGVlLFcpOihlLmFjdGl2ZVRleHR1cmUoMzM5ODQrVyksZS5iaW5kVGV4dHVyZSgzNTg2NixYZS5fX3dlYmdsVGV4dHVyZSkpfSx0aGlzLnNldFRleHR1cmUzRD1mdW5jdGlvbihlZSxXKXtsZXQgWGU9aS5nZXQoZWUpO2VlLnZlcnNpb24+MCYmWGUuX192ZXJzaW9uIT09ZWUudmVyc2lvbj9BZShYZSxlZSxXKTooZS5hY3RpdmVUZXh0dXJlKDMzOTg0K1cpLGUuYmluZFRleHR1cmUoMzI4NzksWGUuX193ZWJnbFRleHR1cmUpKX0sdGhpcy5zZXRUZXh0dXJlQ3ViZT12ZSx0aGlzLnJlYmluZFRleHR1cmVzPWZ1bmN0aW9uKGVlLFcsWGUpe2xldCBUdD1pLmdldChlZSk7dm9pZCAwIT09VyYmcHQoVHQuX193ZWJnbEZyYW1lYnVmZmVyLGVlLGVlLnRleHR1cmUsMzYwNjQsMzU1Myksdm9pZCAwIT09WGUmJnh0KGVlKX0sdGhpcy5zZXR1cFJlbmRlclRhcmdldD1mdW5jdGlvbihlZSl7bGV0IFc9ZWUudGV4dHVyZSxYZT1pLmdldChlZSksVHQ9aS5nZXQoVyk7ZWUuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsdyksITAhPT1lZS5pc1dlYkdMTXVsdGlwbGVSZW5kZXJUYXJnZXRzJiYodm9pZCAwPT09VHQuX193ZWJnbFRleHR1cmUmJihUdC5fX3dlYmdsVGV4dHVyZT1uLmNyZWF0ZVRleHR1cmUoKSksVHQuX192ZXJzaW9uPVcudmVyc2lvbixzLm1lbW9yeS50ZXh0dXJlcysrKTtsZXQgbW49ITA9PT1lZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCxxZT0hMD09PWVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHMsd249Vy5pc0RhdGFUZXh0dXJlM0R8fFcuaXNEYXRhVGV4dHVyZTJEQXJyYXkseW49RChlZSl8fGE7aWYobW4pe1hlLl9fd2ViZ2xGcmFtZWJ1ZmZlcj1bXTtmb3IobGV0IHp0PTA7enQ8Njt6dCsrKVhlLl9fd2ViZ2xGcmFtZWJ1ZmZlclt6dF09bi5jcmVhdGVGcmFtZWJ1ZmZlcigpfWVsc2UgaWYoWGUuX193ZWJnbEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxxZSlpZihyLmRyYXdCdWZmZXJzKXtsZXQgenQ9ZWUudGV4dHVyZTtmb3IobGV0IFV0PTAsV249enQubGVuZ3RoO1V0PFduO1V0Kyspe2xldCBnZT1pLmdldCh6dFtVdF0pO3ZvaWQgMD09PWdlLl9fd2ViZ2xUZXh0dXJlJiYoZ2UuX193ZWJnbFRleHR1cmU9bi5jcmVhdGVUZXh0dXJlKCkscy5tZW1vcnkudGV4dHVyZXMrKyl9fWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpcGxlUmVuZGVyVGFyZ2V0cyBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyIG9yIFdFQkdMX2RyYXdfYnVmZmVycyBleHRlbnNpb24uIik7ZWxzZSBpZihlZS51c2VSZW5kZXJidWZmZXIpaWYoYSl7WGUuX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyPW4uY3JlYXRlRnJhbWVidWZmZXIoKSxYZS5fX3dlYmdsQ29sb3JSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsWGUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKTtsZXQgenQ9by5jb252ZXJ0KFcuZm9ybWF0LFcuZW5jb2RpbmcpLFV0PW8uY29udmVydChXLnR5cGUpLFduPXooVy5pbnRlcm5hbEZvcm1hdCx6dCxVdCxXLmVuY29kaW5nKSxnZT1NdChlZSk7bi5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoMzYxNjEsZ2UsV24sZWUud2lkdGgsZWUuaGVpZ2h0KSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxYZS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpLG4uZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoMzYxNjAsMzYwNjQsMzYxNjEsWGUuX193ZWJnbENvbG9yUmVuZGVyYnVmZmVyKSxuLmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksZWUuZGVwdGhCdWZmZXImJihYZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXI9bi5jcmVhdGVSZW5kZXJidWZmZXIoKSx3dChYZS5fX3dlYmdsRGVwdGhSZW5kZXJidWZmZXIsZWUsITApKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxudWxsKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogV2ViR0xNdWx0aXNhbXBsZVJlbmRlclRhcmdldCBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2lmKG1uKXtlLmJpbmRUZXh0dXJlKDM0MDY3LFR0Ll9fd2ViZ2xUZXh0dXJlKSxndCgzNDA2NyxXLHluKTtmb3IobGV0IHp0PTA7enQ8Njt6dCsrKXB0KFhlLl9fd2ViZ2xGcmFtZWJ1ZmZlclt6dF0sZWUsVywzNjA2NCwzNDA2OSt6dCk7ayhXLHluKSYmWigzNDA2NyksZS51bmJpbmRUZXh0dXJlKCl9ZWxzZSBpZihxZSl7bGV0IHp0PWVlLnRleHR1cmU7Zm9yKGxldCBVdD0wLFduPXp0Lmxlbmd0aDtVdDxXbjtVdCsrKXtsZXQgZ2U9enRbVXRdLGZuPWkuZ2V0KGdlKTtlLmJpbmRUZXh0dXJlKDM1NTMsZm4uX193ZWJnbFRleHR1cmUpLGd0KDM1NTMsZ2UseW4pLHB0KFhlLl9fd2ViZ2xGcmFtZWJ1ZmZlcixlZSxnZSwzNjA2NCtVdCwzNTUzKSxrKGdlLHluKSYmWigzNTUzKX1lLnVuYmluZFRleHR1cmUoKX1lbHNle2xldCB6dD0zNTUzO3duJiYoYT96dD1XLmlzRGF0YVRleHR1cmUzRD8zMjg3OTozNTg2Njpjb25zb2xlLndhcm4oIlRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheSBvbmx5IHN1cHBvcnRlZCB3aXRoIFdlYkdMMi4iKSksZS5iaW5kVGV4dHVyZSh6dCxUdC5fX3dlYmdsVGV4dHVyZSksZ3QoenQsVyx5bikscHQoWGUuX193ZWJnbEZyYW1lYnVmZmVyLGVlLFcsMzYwNjQsenQpLGsoVyx5bikmJlooenQpLGUudW5iaW5kVGV4dHVyZSgpfWVlLmRlcHRoQnVmZmVyJiZ4dChlZSl9LHRoaXMudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwPWZ1bmN0aW9uKGVlKXtsZXQgVz1EKGVlKXx8YSxYZT0hMD09PWVlLmlzV2ViR0xNdWx0aXBsZVJlbmRlclRhcmdldHM/ZWUudGV4dHVyZTpbZWUudGV4dHVyZV07Zm9yKGxldCBUdD0wLG1uPVhlLmxlbmd0aDtUdDxtbjtUdCsrKXtsZXQgcWU9WGVbVHRdO2lmKGsocWUsVykpe2xldCB3bj1lZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8zNDA2NzozNTUzLHluPWkuZ2V0KHFlKS5fX3dlYmdsVGV4dHVyZTtlLmJpbmRUZXh0dXJlKHduLHluKSxaKHduKSxlLnVuYmluZFRleHR1cmUoKX19fSx0aGlzLnVwZGF0ZU11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0PWZ1bmN0aW9uKGVlKXtpZihlZS51c2VSZW5kZXJidWZmZXIpaWYoYSl7bGV0IFc9ZWUud2lkdGgsWGU9ZWUuaGVpZ2h0LFR0PTE2Mzg0LG1uPVszNjA2NF0scWU9ZWUuc3RlbmNpbEJ1ZmZlcj8zMzMwNjozNjA5NjtlZS5kZXB0aEJ1ZmZlciYmbW4ucHVzaChxZSksZWUuaWdub3JlRGVwdGhGb3JNdWx0aXNhbXBsZUNvcHl8fChlZS5kZXB0aEJ1ZmZlciYmKFR0fD0yNTYpLGVlLnN0ZW5jaWxCdWZmZXImJihUdHw9MTAyNCkpO2xldCB3bj1pLmdldChlZSk7ZS5iaW5kRnJhbWVidWZmZXIoMzYwMDgsd24uX193ZWJnbE11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSx3bi5fX3dlYmdsRnJhbWVidWZmZXIpLGVlLmlnbm9yZURlcHRoRm9yTXVsdGlzYW1wbGVDb3B5JiYobi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDgsW3FlXSksbi5pbnZhbGlkYXRlRnJhbWVidWZmZXIoMzYwMDksW3FlXSkpLG4uYmxpdEZyYW1lYnVmZmVyKDAsMCxXLFhlLDAsMCxXLFhlLFR0LDk3MjgpLG4uaW52YWxpZGF0ZUZyYW1lYnVmZmVyKDM2MDA4LG1uKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOCxudWxsKSxlLmJpbmRGcmFtZWJ1ZmZlcigzNjAwOSx3bi5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBXZWJHTE11bHRpc2FtcGxlUmVuZGVyVGFyZ2V0IGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBXZWJHTDIuIil9LHRoaXMuc2V0dXBEZXB0aFJlbmRlcmJ1ZmZlcj14dCx0aGlzLnNldHVwRnJhbWVCdWZmZXJUZXh0dXJlPXB0LHRoaXMuc2FmZVNldFRleHR1cmUyRD1mdW5jdGlvbihlZSxXKXtlZSYmZWUuaXNXZWJHTFJlbmRlclRhcmdldCYmKCExPT09b24mJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmUyRDogZG9uJ3QgdXNlIHJlbmRlciB0YXJnZXRzIGFzIHRleHR1cmVzLiBVc2UgdGhlaXIgLnRleHR1cmUgcHJvcGVydHkgaW5zdGVhZC4iKSxvbj0hMCksZWU9ZWUudGV4dHVyZSksYWUoZWUsVyl9LHRoaXMuc2FmZVNldFRleHR1cmVDdWJlPWZ1bmN0aW9uKGVlLFcpe2VlJiZlZS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldCYmKCExPT09ZmkmJihjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMVGV4dHVyZXMuc2FmZVNldFRleHR1cmVDdWJlOiBkb24ndCB1c2UgY3ViZSByZW5kZXIgdGFyZ2V0cyBhcyB0ZXh0dXJlcy4gVXNlIHRoZWlyIC50ZXh0dXJlIHByb3BlcnR5IGluc3RlYWQuIiksZmk9ITApLGVlPWVlLnRleHR1cmUpLHZlKGVlLFcpfX1mdW5jdGlvbiBmOWUobix0LGUpe2xldCBpPWUuaXNXZWJHTDI7cmV0dXJue2NvbnZlcnQ6ZnVuY3Rpb24obyxzPW51bGwpe2xldCBhO2lmKG89PT1fZilyZXR1cm4gNTEyMTtpZigxMDE3PT09bylyZXR1cm4gMzI4MTk7aWYoMTAxOD09PW8pcmV0dXJuIDMyODIwO2lmKDEwMTA9PT1vKXJldHVybiA1MTIwO2lmKDEwMTE9PT1vKXJldHVybiA1MTIyO2lmKG89PT1XUylyZXR1cm4gNTEyMztpZigxMDEzPT09bylyZXR1cm4gNTEyNDtpZigxMDE0PT09bylyZXR1cm4gNTEyNTtpZihvPT09VWcpcmV0dXJuIDUxMjY7aWYobz09PWxiKXJldHVybiBpPzUxMzE6KGE9dC5nZXQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSxudWxsIT09YT9hLkhBTEZfRkxPQVRfT0VTOm51bGwpO2lmKDEwMjE9PT1vKXJldHVybiA2NDA2O2lmKG89PT1nYSlyZXR1cm4gNjQwODtpZigxMDI0PT09bylyZXR1cm4gNjQwOTtpZigxMDI1PT09bylyZXR1cm4gNjQxMDtpZihvPT09amcpcmV0dXJuIDY0MDI7aWYobz09PWhiKXJldHVybiAzNDA0MTtpZigxMDI4PT09bylyZXR1cm4gNjQwMztpZigxMDM1PT09bylyZXR1cm4gYT10LmdldCgiRVhUX3NSR0IiKSxudWxsIT09YT9hLlNSR0JfQUxQSEFfRVhUOm51bGw7aWYoMTAyOT09PW8pcmV0dXJuIDM2MjQ0O2lmKDEwMzA9PT1vKXJldHVybiAzMzMxOTtpZigxMDMxPT09bylyZXR1cm4gMzMzMjA7aWYoMTAzMz09PW8pcmV0dXJuIDM2MjQ5O2lmKDMzNzc2PT09b3x8MzM3Nzc9PT1vfHwzMzc3OD09PW98fDMzNzc5PT09bylpZihzPT09V3Ipe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjX3NyZ2IiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzMzc3Nj09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQ7aWYoMzM3Nzc9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfRVhUO2lmKDMzNzc4PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX0VYVDtpZigzMzc3OT09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9FWFR9ZWxzZXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDMzNzc2PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUO2lmKDMzNzc3PT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDtpZigzMzc3OD09PW8pcmV0dXJuIGEuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ7aWYoMzM3Nzk9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUfWlmKDM1ODQwPT09b3x8MzU4NDE9PT1vfHwzNTg0Mj09PW98fDM1ODQzPT09byl7aWYoYT10LmdldCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzU4NDA9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc7aWYoMzU4NDE9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc7aWYoMzU4NDI9PT1vKXJldHVybiBhLkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HO2lmKDM1ODQzPT09bylyZXR1cm4gYS5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNR31pZigzNjE5Nj09PW8pcmV0dXJuIGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMxIiksbnVsbCE9PWE/YS5DT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOm51bGw7aWYoMzc0OTI9PT1vfHwzNzQ5Nj09PW8pe2lmKGE9dC5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9ldGMiKSxudWxsPT09YSlyZXR1cm4gbnVsbDtpZigzNzQ5Mj09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfRVRDMjphLkNPTVBSRVNTRURfUkdCOF9FVEMyO2lmKDM3NDk2PT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUM6YS5DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDfWlmKDM3ODA4PT09b3x8Mzc4MDk9PT1vfHwzNzgxMD09PW98fDM3ODExPT09b3x8Mzc4MTI9PT1vfHwzNzgxMz09PW98fDM3ODE0PT09b3x8Mzc4MTU9PT1vfHwzNzgxNj09PW98fDM3ODE3PT09b3x8Mzc4MTg9PT1vfHwzNzgxOT09PW98fDM3ODIwPT09b3x8Mzc4MjE9PT1vKXtpZihhPXQuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXN0YyIpLG51bGw9PT1hKXJldHVybiBudWxsO2lmKDM3ODA4PT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUjtpZigzNzgwOT09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzV4NF9LSFI7aWYoMzc4MTA9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ181eDVfS0hSO2lmKDM3ODExPT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUjtpZigzNzgxMj09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzZ4Nl9LSFI7aWYoMzc4MTM9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NV9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ184eDVfS0hSO2lmKDM3ODE0PT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUjtpZigzNzgxNT09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFI7aWYoMzc4MTY9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDVfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFI7aWYoMzc4MTc9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDZfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9LSFI7aWYoMzc4MTg9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDhfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFI7aWYoMzc4MTk9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwX0tIUjphLkNPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwX0tIUjtpZigzNzgyMD09PW8pcmV0dXJuIHM9PT1Xcj9hLkNPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTBfS0hSOmEuQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSO2lmKDM3ODIxPT09bylyZXR1cm4gcz09PVdyP2EuQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFI6YS5DT01QUkVTU0VEX1JHQkFfQVNUQ18xMngxMl9LSFJ9aWYoMzY0OTI9PT1vKXtpZihhPXQuZ2V0KCJFWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9icHRjIiksbnVsbD09PWEpcmV0dXJuIG51bGw7aWYoMzY0OTI9PT1vKXJldHVybiBzPT09V3I/YS5DT01QUkVTU0VEX1NSR0JfQUxQSEFfQlBUQ19VTk9STV9FWFQ6YS5DT01QUkVTU0VEX1JHQkFfQlBUQ19VTk9STV9FWFR9cmV0dXJuIG89PT1jYj9pPzM0MDQyOihhPXQuZ2V0KCJXRUJHTF9kZXB0aF90ZXh0dXJlIiksbnVsbCE9PWE/YS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTDpudWxsKTp2b2lkIDB9fX1oay5wcm90b3R5cGUuaXNNZXNoRGlzdGFuY2VNYXRlcmlhbD0hMDt2YXIgZms9Y2xhc3MgZXh0ZW5kcyBXc3tjb25zdHJ1Y3Rvcih0PVtdKXtzdXBlcigpLHRoaXMuY2FtZXJhcz10fX07ZmsucHJvdG90eXBlLmlzQXJyYXlDYW1lcmE9ITA7dmFyIHpnPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iR3JvdXAifX07emcucHJvdG90eXBlLmlzR3JvdXA9ITA7dmFyIG05ZT17dHlwZToibW92ZSJ9LFVTPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5fdGFyZ2V0UmF5PW51bGwsdGhpcy5fZ3JpcD1udWxsLHRoaXMuX2hhbmQ9bnVsbH1nZXRIYW5kU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2hhbmQmJih0aGlzLl9oYW5kPW5ldyB6Zyx0aGlzLl9oYW5kLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5faGFuZC52aXNpYmxlPSExLHRoaXMuX2hhbmQuam9pbnRzPXt9LHRoaXMuX2hhbmQuaW5wdXRTdGF0ZT17cGluY2hpbmc6ITF9KSx0aGlzLl9oYW5kfWdldFRhcmdldFJheVNwYWNlKCl7cmV0dXJuIG51bGw9PT10aGlzLl90YXJnZXRSYXkmJih0aGlzLl90YXJnZXRSYXk9bmV3IHpnLHRoaXMuX3RhcmdldFJheS5tYXRyaXhBdXRvVXBkYXRlPSExLHRoaXMuX3RhcmdldFJheS52aXNpYmxlPSExLHRoaXMuX3RhcmdldFJheS5oYXNMaW5lYXJWZWxvY2l0eT0hMSx0aGlzLl90YXJnZXRSYXkubGluZWFyVmVsb2NpdHk9bmV3IGllLHRoaXMuX3RhcmdldFJheS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fdGFyZ2V0UmF5LmFuZ3VsYXJWZWxvY2l0eT1uZXcgaWUpLHRoaXMuX3RhcmdldFJheX1nZXRHcmlwU3BhY2UoKXtyZXR1cm4gbnVsbD09PXRoaXMuX2dyaXAmJih0aGlzLl9ncmlwPW5ldyB6Zyx0aGlzLl9ncmlwLm1hdHJpeEF1dG9VcGRhdGU9ITEsdGhpcy5fZ3JpcC52aXNpYmxlPSExLHRoaXMuX2dyaXAuaGFzTGluZWFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5saW5lYXJWZWxvY2l0eT1uZXcgaWUsdGhpcy5fZ3JpcC5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5fZ3JpcC5hbmd1bGFyVmVsb2NpdHk9bmV3IGllKSx0aGlzLl9ncmlwfWRpc3BhdGNoRXZlbnQodCl7cmV0dXJuIG51bGwhPT10aGlzLl90YXJnZXRSYXkmJnRoaXMuX3RhcmdldFJheS5kaXNwYXRjaEV2ZW50KHQpLG51bGwhPT10aGlzLl9ncmlwJiZ0aGlzLl9ncmlwLmRpc3BhdGNoRXZlbnQodCksbnVsbCE9PXRoaXMuX2hhbmQmJnRoaXMuX2hhbmQuZGlzcGF0Y2hFdmVudCh0KSx0aGlzfWRpc2Nvbm5lY3QodCl7cmV0dXJuIHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzY29ubmVjdGVkIixkYXRhOnR9KSxudWxsIT09dGhpcy5fdGFyZ2V0UmF5JiYodGhpcy5fdGFyZ2V0UmF5LnZpc2libGU9ITEpLG51bGwhPT10aGlzLl9ncmlwJiYodGhpcy5fZ3JpcC52aXNpYmxlPSExKSxudWxsIT09dGhpcy5faGFuZCYmKHRoaXMuX2hhbmQudmlzaWJsZT0hMSksdGhpc311cGRhdGUodCxlLGkpe2xldCByPW51bGwsbz1udWxsLHM9bnVsbCxhPXRoaXMuX3RhcmdldFJheSxsPXRoaXMuX2dyaXAsYz10aGlzLl9oYW5kO2lmKHQmJiJ2aXNpYmxlLWJsdXJyZWQiIT09ZS5zZXNzaW9uLnZpc2liaWxpdHlTdGF0ZSlpZihudWxsIT09YSYmKHI9ZS5nZXRQb3NlKHQudGFyZ2V0UmF5U3BhY2UsaSksbnVsbCE9PXImJihhLm1hdHJpeC5mcm9tQXJyYXkoci50cmFuc2Zvcm0ubWF0cml4KSxhLm1hdHJpeC5kZWNvbXBvc2UoYS5wb3NpdGlvbixhLnJvdGF0aW9uLGEuc2NhbGUpLHIubGluZWFyVmVsb2NpdHk/KGEuaGFzTGluZWFyVmVsb2NpdHk9ITAsYS5saW5lYXJWZWxvY2l0eS5jb3B5KHIubGluZWFyVmVsb2NpdHkpKTphLmhhc0xpbmVhclZlbG9jaXR5PSExLHIuYW5ndWxhclZlbG9jaXR5PyhhLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMCxhLmFuZ3VsYXJWZWxvY2l0eS5jb3B5KHIuYW5ndWxhclZlbG9jaXR5KSk6YS5oYXNBbmd1bGFyVmVsb2NpdHk9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KG05ZSkpKSxjJiZ0LmhhbmQpe3M9ITA7Zm9yKGxldCBtIG9mIHQuaGFuZC52YWx1ZXMoKSl7bGV0IHg9ZS5nZXRKb2ludFBvc2UobSxpKTtpZih2b2lkIDA9PT1jLmpvaW50c1ttLmpvaW50TmFtZV0pe2xldCBiPW5ldyB6ZztiLm1hdHJpeEF1dG9VcGRhdGU9ITEsYi52aXNpYmxlPSExLGMuam9pbnRzW20uam9pbnROYW1lXT1iLGMuYWRkKGIpfWxldCBnPWMuam9pbnRzW20uam9pbnROYW1lXTtudWxsIT09eCYmKGcubWF0cml4LmZyb21BcnJheSh4LnRyYW5zZm9ybS5tYXRyaXgpLGcubWF0cml4LmRlY29tcG9zZShnLnBvc2l0aW9uLGcucm90YXRpb24sZy5zY2FsZSksZy5qb2ludFJhZGl1cz14LnJhZGl1cyksZy52aXNpYmxlPW51bGwhPT14fWxldCBwPWMuam9pbnRzWyJpbmRleC1maW5nZXItdGlwIl0ucG9zaXRpb24uZGlzdGFuY2VUbyhjLmpvaW50c1sidGh1bWItdGlwIl0ucG9zaXRpb24pLGg9LjAyLGY9LjAwNTtjLmlucHV0U3RhdGUucGluY2hpbmcmJnA+aCtmPyhjLmlucHV0U3RhdGUucGluY2hpbmc9ITEsdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiJwaW5jaGVuZCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSk6IWMuaW5wdXRTdGF0ZS5waW5jaGluZyYmcDw9aC1mJiYoYy5pbnB1dFN0YXRlLnBpbmNoaW5nPSEwLHRoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToicGluY2hzdGFydCIsaGFuZGVkbmVzczp0LmhhbmRlZG5lc3MsdGFyZ2V0OnRoaXN9KSl9ZWxzZSBudWxsIT09bCYmdC5ncmlwU3BhY2UmJihvPWUuZ2V0UG9zZSh0LmdyaXBTcGFjZSxpKSxudWxsIT09byYmKGwubWF0cml4LmZyb21BcnJheShvLnRyYW5zZm9ybS5tYXRyaXgpLGwubWF0cml4LmRlY29tcG9zZShsLnBvc2l0aW9uLGwucm90YXRpb24sbC5zY2FsZSksby5saW5lYXJWZWxvY2l0eT8obC5oYXNMaW5lYXJWZWxvY2l0eT0hMCxsLmxpbmVhclZlbG9jaXR5LmNvcHkoby5saW5lYXJWZWxvY2l0eSkpOmwuaGFzTGluZWFyVmVsb2NpdHk9ITEsby5hbmd1bGFyVmVsb2NpdHk/KGwuaGFzQW5ndWxhclZlbG9jaXR5PSEwLGwuYW5ndWxhclZlbG9jaXR5LmNvcHkoby5hbmd1bGFyVmVsb2NpdHkpKTpsLmhhc0FuZ3VsYXJWZWxvY2l0eT0hMSkpO3JldHVybiBudWxsIT09YSYmKGEudmlzaWJsZT1udWxsIT09ciksbnVsbCE9PWwmJihsLnZpc2libGU9bnVsbCE9PW8pLG51bGwhPT1jJiYoYy52aXNpYmxlPW51bGwhPT1zKSx0aGlzfX0sJFM9Y2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1KXtpZigodT12b2lkIDAhPT11P3U6amcpIT09amcmJnUhPT1oYil0aHJvdyBuZXcgRXJyb3IoIkRlcHRoVGV4dHVyZSBmb3JtYXQgbXVzdCBiZSBlaXRoZXIgVEhSRUUuRGVwdGhGb3JtYXQgb3IgVEhSRUUuRGVwdGhTdGVuY2lsRm9ybWF0Iik7dm9pZCAwPT09aSYmdT09PWpnJiYoaT1XUyksdm9pZCAwPT09aSYmdT09PWhiJiYoaT1jYiksc3VwZXIobnVsbCxyLG8scyxhLGwsdSxpLGMpLHRoaXMuaW1hZ2U9e3dpZHRoOnQsaGVpZ2h0OmV9LHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PWE/YTpabyx0aGlzLm1pbkZpbHRlcj12b2lkIDAhPT1sP2w6Wm8sdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19OyRTLnByb3RvdHlwZS5pc0RlcHRoVGV4dHVyZT0hMDt2YXIgeTg9Y2xhc3MgZXh0ZW5kcyBFcHtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKCk7bGV0IGk9dGhpcyxyPW51bGwsbz0xLHM9bnVsbCxhPSJsb2NhbC1mbG9vciIsbD10LmV4dGVuc2lvbnMuaGFzKCJXRUJHTF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSxjPW51bGwsdT1udWxsLGQ9bnVsbCxwPW51bGwsaD0hMSxmPW51bGwsbT1lLmdldENvbnRleHRBdHRyaWJ1dGVzKCkseD1udWxsLGc9bnVsbCxiPVtdLEQ9bmV3IE1hcCxUPW5ldyBXcztULmxheWVycy5lbmFibGUoMSksVC52aWV3cG9ydD1uZXcgYXI7bGV0IGs9bmV3IFdzO2subGF5ZXJzLmVuYWJsZSgyKSxrLnZpZXdwb3J0PW5ldyBhcjtsZXQgWj1bVCxrXSx6PW5ldyBmazt6LmxheWVycy5lbmFibGUoMSksei5sYXllcnMuZW5hYmxlKDIpO2xldCBmZT1udWxsLHVlPW51bGw7ZnVuY3Rpb24gaGUodmUpe2xldCBEZT1ELmdldCh2ZS5pbnB1dFNvdXJjZSk7RGUmJkRlLmRpc3BhdGNoRXZlbnQoe3R5cGU6dmUudHlwZSxkYXRhOnZlLmlucHV0U291cmNlfSl9ZnVuY3Rpb24gdygpe0QuZm9yRWFjaChmdW5jdGlvbih2ZSxEZSl7dmUuZGlzY29ubmVjdChEZSl9KSxELmNsZWFyKCksZmU9bnVsbCx1ZT1udWxsLHQuc2V0UmVuZGVyVGFyZ2V0KHgpLHA9bnVsbCxkPW51bGwsdT1udWxsLHI9bnVsbCxnPW51bGwsSWUuc3RvcCgpLGkuaXNQcmVzZW50aW5nPSExLGkuZGlzcGF0Y2hFdmVudCh7dHlwZToic2Vzc2lvbmVuZCJ9KX1mdW5jdGlvbiBGKHZlKXtsZXQgRGU9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBudD0wO250PGIubGVuZ3RoO250KyspRC5zZXQoRGVbbnRdLGJbbnRdKTtmb3IobGV0IG50PTA7bnQ8dmUucmVtb3ZlZC5sZW5ndGg7bnQrKyl7bGV0IGd0PXZlLnJlbW92ZWRbbnRdLFVlPUQuZ2V0KGd0KTtVZSYmKFVlLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImRpc2Nvbm5lY3RlZCIsZGF0YTpndH0pLEQuZGVsZXRlKGd0KSl9Zm9yKGxldCBudD0wO250PHZlLmFkZGVkLmxlbmd0aDtudCsrKXtsZXQgZ3Q9dmUuYWRkZWRbbnRdLFVlPUQuZ2V0KGd0KTtVZSYmVWUuZGlzcGF0Y2hFdmVudCh7dHlwZToiY29ubmVjdGVkIixkYXRhOmd0fSl9fXRoaXMuY2FtZXJhQXV0b1VwZGF0ZT0hMCx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pc1ByZXNlbnRpbmc9ITEsdGhpcy5nZXRDb250cm9sbGVyPWZ1bmN0aW9uKHZlKXtsZXQgRGU9Ylt2ZV07cmV0dXJuIHZvaWQgMD09PURlJiYoRGU9bmV3IFVTLGJbdmVdPURlKSxEZS5nZXRUYXJnZXRSYXlTcGFjZSgpfSx0aGlzLmdldENvbnRyb2xsZXJHcmlwPWZ1bmN0aW9uKHZlKXtsZXQgRGU9Ylt2ZV07cmV0dXJuIHZvaWQgMD09PURlJiYoRGU9bmV3IFVTLGJbdmVdPURlKSxEZS5nZXRHcmlwU3BhY2UoKX0sdGhpcy5nZXRIYW5kPWZ1bmN0aW9uKHZlKXtsZXQgRGU9Ylt2ZV07cmV0dXJuIHZvaWQgMD09PURlJiYoRGU9bmV3IFVTLGJbdmVdPURlKSxEZS5nZXRIYW5kU3BhY2UoKX0sdGhpcy5zZXRGcmFtZWJ1ZmZlclNjYWxlRmFjdG9yPWZ1bmN0aW9uKHZlKXtvPXZlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIGZyYW1lYnVmZmVyIHNjYWxlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuc2V0UmVmZXJlbmNlU3BhY2VUeXBlPWZ1bmN0aW9uKHZlKXthPXZlLCEwPT09aS5pc1ByZXNlbnRpbmcmJmNvbnNvbGUud2FybigiVEhSRUUuV2ViWFJNYW5hZ2VyOiBDYW5ub3QgY2hhbmdlIHJlZmVyZW5jZSBzcGFjZSB0eXBlIHdoaWxlIHByZXNlbnRpbmcuIil9LHRoaXMuZ2V0UmVmZXJlbmNlU3BhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gc30sdGhpcy5nZXRCYXNlTGF5ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZDpwfSx0aGlzLmdldEJpbmRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdGhpcy5nZXRGcmFtZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmdldFNlc3Npb249ZnVuY3Rpb24oKXtyZXR1cm4gcn0sdGhpcy5zZXRTZXNzaW9uPWFzeW5jIGZ1bmN0aW9uKHZlKXtpZihyPXZlLG51bGwhPT1yKXtpZih4PXQuZ2V0UmVuZGVyVGFyZ2V0KCksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3QiLGhlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixoZSksci5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RlbmQiLGhlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemUiLGhlKSxyLmFkZEV2ZW50TGlzdGVuZXIoInNxdWVlemVzdGFydCIsaGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigic3F1ZWV6ZWVuZCIsaGUpLHIuYWRkRXZlbnRMaXN0ZW5lcigiZW5kIix3KSxyLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0c291cmNlc2NoYW5nZSIsRiksITAhPT1tLnhyQ29tcGF0aWJsZSYmYXdhaXQgZS5tYWtlWFJDb21wYXRpYmxlKCksdm9pZCAwPT09ci5yZW5kZXJTdGF0ZS5sYXllcnN8fCExPT09dC5jYXBhYmlsaXRpZXMuaXNXZWJHTDIpcD1uZXcgWFJXZWJHTExheWVyKHIsZSx7YW50aWFsaWFzOnZvaWQgMCE9PXIucmVuZGVyU3RhdGUubGF5ZXJzfHxtLmFudGlhbGlhcyxhbHBoYTptLmFscGhhLGRlcHRoOm0uZGVwdGgsc3RlbmNpbDptLnN0ZW5jaWwsZnJhbWVidWZmZXJTY2FsZUZhY3RvcjpvfSksci51cGRhdGVSZW5kZXJTdGF0ZSh7YmFzZUxheWVyOnB9KSxnPW5ldyBXYShwLmZyYW1lYnVmZmVyV2lkdGgscC5mcmFtZWJ1ZmZlckhlaWdodCx7Zm9ybWF0OmdhLHR5cGU6X2YsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pO2Vsc2V7aD1tLmFudGlhbGlhcztsZXQgRGU9bnVsbCxudD1udWxsLGd0PW51bGw7bS5kZXB0aCYmKGd0PW0uc3RlbmNpbD8zNTA1NjozMzE5MCxEZT1tLnN0ZW5jaWw/aGI6amcsbnQ9bS5zdGVuY2lsP2NiOldTKTtsZXQgVWU9e2NvbG9yRm9ybWF0OnQub3V0cHV0RW5jb2Rpbmc9PT1Xcj8zNTkwNzozMjg1NixkZXB0aEZvcm1hdDpndCxzY2FsZUZhY3RvcjpvfTt1PW5ldyBYUldlYkdMQmluZGluZyhyLGUpLGQ9dS5jcmVhdGVQcm9qZWN0aW9uTGF5ZXIoVWUpLHIudXBkYXRlUmVuZGVyU3RhdGUoe2xheWVyczpbZF19KSxnPWg/bmV3IFhTKGQudGV4dHVyZVdpZHRoLGQudGV4dHVyZUhlaWdodCx7Zm9ybWF0OmdhLHR5cGU6X2YsZGVwdGhUZXh0dXJlOm5ldyAkUyhkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQsbnQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsRGUpLHN0ZW5jaWxCdWZmZXI6bS5zdGVuY2lsLGlnbm9yZURlcHRoOmQuaWdub3JlRGVwdGhWYWx1ZXMsdXNlUmVuZGVyVG9UZXh0dXJlOmwsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pOm5ldyBXYShkLnRleHR1cmVXaWR0aCxkLnRleHR1cmVIZWlnaHQse2Zvcm1hdDpnYSx0eXBlOl9mLGRlcHRoVGV4dHVyZTpuZXcgJFMoZC50ZXh0dXJlV2lkdGgsZC50ZXh0dXJlSGVpZ2h0LG50LHZvaWQgMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLERlKSxzdGVuY2lsQnVmZmVyOm0uc3RlbmNpbCxpZ25vcmVEZXB0aDpkLmlnbm9yZURlcHRoVmFsdWVzLGVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1nLmlzWFJSZW5kZXJUYXJnZXQ9ITAsdGhpcy5zZXRGb3ZlYXRpb24oMSkscz1hd2FpdCByLnJlcXVlc3RSZWZlcmVuY2VTcGFjZShhKSxJZS5zZXRDb250ZXh0KHIpLEllLnN0YXJ0KCksaS5pc1ByZXNlbnRpbmc9ITAsaS5kaXNwYXRjaEV2ZW50KHt0eXBlOiJzZXNzaW9uc3RhcnQifSl9fTtsZXQgcT1uZXcgaWUsSz1uZXcgaWU7ZnVuY3Rpb24gWSh2ZSxEZSl7bnVsbD09PURlP3ZlLm1hdHJpeFdvcmxkLmNvcHkodmUubWF0cml4KTp2ZS5tYXRyaXhXb3JsZC5tdWx0aXBseU1hdHJpY2VzKERlLm1hdHJpeFdvcmxkLHZlLm1hdHJpeCksdmUubWF0cml4V29ybGRJbnZlcnNlLmNvcHkodmUubWF0cml4V29ybGQpLmludmVydCgpfXRoaXMudXBkYXRlQ2FtZXJhPWZ1bmN0aW9uKHZlKXtpZihudWxsPT09cilyZXR1cm47ei5uZWFyPWsubmVhcj1ULm5lYXI9dmUubmVhcix6LmZhcj1rLmZhcj1ULmZhcj12ZS5mYXIsKGZlIT09ei5uZWFyfHx1ZSE9PXouZmFyKSYmKHIudXBkYXRlUmVuZGVyU3RhdGUoe2RlcHRoTmVhcjp6Lm5lYXIsZGVwdGhGYXI6ei5mYXJ9KSxmZT16Lm5lYXIsdWU9ei5mYXIpO2xldCBEZT12ZS5wYXJlbnQsbnQ9ei5jYW1lcmFzO1koeixEZSk7Zm9yKGxldCBVZT0wO1VlPG50Lmxlbmd0aDtVZSsrKVkobnRbVWVdLERlKTt6Lm1hdHJpeFdvcmxkLmRlY29tcG9zZSh6LnBvc2l0aW9uLHoucXVhdGVybmlvbix6LnNjYWxlKSx2ZS5wb3NpdGlvbi5jb3B5KHoucG9zaXRpb24pLHZlLnF1YXRlcm5pb24uY29weSh6LnF1YXRlcm5pb24pLHZlLnNjYWxlLmNvcHkoei5zY2FsZSksdmUubWF0cml4LmNvcHkoei5tYXRyaXgpLHZlLm1hdHJpeFdvcmxkLmNvcHkoei5tYXRyaXhXb3JsZCk7bGV0IGd0PXZlLmNoaWxkcmVuO2ZvcihsZXQgVWU9MCxBZT1ndC5sZW5ndGg7VWU8QWU7VWUrKylndFtVZV0udXBkYXRlTWF0cml4V29ybGQoITApOzI9PT1udC5sZW5ndGg/ZnVuY3Rpb24odmUsRGUsbnQpe3Euc2V0RnJvbU1hdHJpeFBvc2l0aW9uKERlLm1hdHJpeFdvcmxkKSxLLnNldEZyb21NYXRyaXhQb3NpdGlvbihudC5tYXRyaXhXb3JsZCk7bGV0IGd0PXEuZGlzdGFuY2VUbyhLKSxVZT1EZS5wcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzLEFlPW50LnByb2plY3Rpb25NYXRyaXguZWxlbWVudHMsdG49VWVbMTRdLyhVZVsxMF0tMSkscHQ9VWVbMTRdLyhVZVsxMF0rMSksd3Q9KFVlWzldKzEpL1VlWzVdLFRlPShVZVs5XS0xKS9VZVs1XSx4dD0oVWVbOF0tMSkvVWVbMF0sbXQ9KEFlWzhdKzEpL0FlWzBdLGNlPXRuKnh0LGR0PXRuKm10LFdlPWd0LygteHQrbXQpLE10PVdlKi14dDtEZS5tYXRyaXhXb3JsZC5kZWNvbXBvc2UodmUucG9zaXRpb24sdmUucXVhdGVybmlvbix2ZS5zY2FsZSksdmUudHJhbnNsYXRlWChNdCksdmUudHJhbnNsYXRlWihXZSksdmUubWF0cml4V29ybGQuY29tcG9zZSh2ZS5wb3NpdGlvbix2ZS5xdWF0ZXJuaW9uLHZlLnNjYWxlKSx2ZS5tYXRyaXhXb3JsZEludmVyc2UuY29weSh2ZS5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7bGV0IGJ0PXRuK1dlLGhuPXB0K1dlO3ZlLnByb2plY3Rpb25NYXRyaXgubWFrZVBlcnNwZWN0aXZlKGNlLU10LGR0KyhndC1NdCksd3QqcHQvaG4qYnQsVGUqcHQvaG4qYnQsYnQsaG4pfSh6LFQsayk6ei5wcm9qZWN0aW9uTWF0cml4LmNvcHkoVC5wcm9qZWN0aW9uTWF0cml4KX0sdGhpcy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXtyZXR1cm4gen0sdGhpcy5nZXRGb3ZlYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PWQ/ZC5maXhlZEZvdmVhdGlvbjpudWxsIT09cD9wLmZpeGVkRm92ZWF0aW9uOnZvaWQgMH0sdGhpcy5zZXRGb3ZlYXRpb249ZnVuY3Rpb24odmUpe251bGwhPT1kJiYoZC5maXhlZEZvdmVhdGlvbj12ZSksbnVsbCE9PXAmJnZvaWQgMCE9PXAuZml4ZWRGb3ZlYXRpb24mJihwLmZpeGVkRm92ZWF0aW9uPXZlKX07bGV0IGFlPW51bGwsSWU9bmV3IGtkZTtJZS5zZXRBbmltYXRpb25Mb29wKGZ1bmN0aW9uKHZlLERlKXtpZihjPURlLmdldFZpZXdlclBvc2UocyksZj1EZSxudWxsIT09Yyl7bGV0IGd0PWMudmlld3M7bnVsbCE9PXAmJih0LnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyKGcscC5mcmFtZWJ1ZmZlciksdC5zZXRSZW5kZXJUYXJnZXQoZykpO2xldCBVZT0hMTtndC5sZW5ndGghPT16LmNhbWVyYXMubGVuZ3RoJiYoei5jYW1lcmFzLmxlbmd0aD0wLFVlPSEwKTtmb3IobGV0IEFlPTA7QWU8Z3QubGVuZ3RoO0FlKyspe2xldCB0bj1ndFtBZV0scHQ9bnVsbDtpZihudWxsIT09cClwdD1wLmdldFZpZXdwb3J0KHRuKTtlbHNle2xldCBUZT11LmdldFZpZXdTdWJJbWFnZShkLHRuKTtwdD1UZS52aWV3cG9ydCwwPT09QWUmJih0LnNldFJlbmRlclRhcmdldFRleHR1cmVzKGcsVGUuY29sb3JUZXh0dXJlLGQuaWdub3JlRGVwdGhWYWx1ZXM/dm9pZCAwOlRlLmRlcHRoU3RlbmNpbFRleHR1cmUpLHQuc2V0UmVuZGVyVGFyZ2V0KGcpKX1sZXQgd3Q9WltBZV07d3QubWF0cml4LmZyb21BcnJheSh0bi50cmFuc2Zvcm0ubWF0cml4KSx3dC5wcm9qZWN0aW9uTWF0cml4LmZyb21BcnJheSh0bi5wcm9qZWN0aW9uTWF0cml4KSx3dC52aWV3cG9ydC5zZXQocHQueCxwdC55LHB0LndpZHRoLHB0LmhlaWdodCksMD09PUFlJiZ6Lm1hdHJpeC5jb3B5KHd0Lm1hdHJpeCksITA9PT1VZSYmei5jYW1lcmFzLnB1c2god3QpfX1sZXQgbnQ9ci5pbnB1dFNvdXJjZXM7Zm9yKGxldCBndD0wO2d0PGIubGVuZ3RoO2d0KyspYltndF0udXBkYXRlKG50W2d0XSxEZSxzKTthZSYmYWUodmUsRGUpLGY9bnVsbH0pLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbih2ZSl7YWU9dmV9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe319fTtmdW5jdGlvbiBnOWUobil7ZnVuY3Rpb24gaShnLGIpe2cub3BhY2l0eS52YWx1ZT1iLm9wYWNpdHksYi5jb2xvciYmZy5kaWZmdXNlLnZhbHVlLmNvcHkoYi5jb2xvciksYi5lbWlzc2l2ZSYmZy5lbWlzc2l2ZS52YWx1ZS5jb3B5KGIuZW1pc3NpdmUpLm11bHRpcGx5U2NhbGFyKGIuZW1pc3NpdmVJbnRlbnNpdHkpLGIubWFwJiYoZy5tYXAudmFsdWU9Yi5tYXApLGIuYWxwaGFNYXAmJihnLmFscGhhTWFwLnZhbHVlPWIuYWxwaGFNYXApLGIuc3BlY3VsYXJNYXAmJihnLnNwZWN1bGFyTWFwLnZhbHVlPWIuc3BlY3VsYXJNYXApLGIuYWxwaGFUZXN0PjAmJihnLmFscGhhVGVzdC52YWx1ZT1iLmFscGhhVGVzdCk7bGV0IFQsayxEPW4uZ2V0KGIpLmVudk1hcDtEJiYoZy5lbnZNYXAudmFsdWU9RCxnLmZsaXBFbnZNYXAudmFsdWU9RC5pc0N1YmVUZXh0dXJlJiYhMT09PUQuaXNSZW5kZXJUYXJnZXRUZXh0dXJlPy0xOjEsZy5yZWZsZWN0aXZpdHkudmFsdWU9Yi5yZWZsZWN0aXZpdHksZy5pb3IudmFsdWU9Yi5pb3IsZy5yZWZyYWN0aW9uUmF0aW8udmFsdWU9Yi5yZWZyYWN0aW9uUmF0aW8pLGIubGlnaHRNYXAmJihnLmxpZ2h0TWFwLnZhbHVlPWIubGlnaHRNYXAsZy5saWdodE1hcEludGVuc2l0eS52YWx1ZT1iLmxpZ2h0TWFwSW50ZW5zaXR5KSxiLmFvTWFwJiYoZy5hb01hcC52YWx1ZT1iLmFvTWFwLGcuYW9NYXBJbnRlbnNpdHkudmFsdWU9Yi5hb01hcEludGVuc2l0eSksYi5tYXA/VD1iLm1hcDpiLnNwZWN1bGFyTWFwP1Q9Yi5zcGVjdWxhck1hcDpiLmRpc3BsYWNlbWVudE1hcD9UPWIuZGlzcGxhY2VtZW50TWFwOmIubm9ybWFsTWFwP1Q9Yi5ub3JtYWxNYXA6Yi5idW1wTWFwP1Q9Yi5idW1wTWFwOmIucm91Z2huZXNzTWFwP1Q9Yi5yb3VnaG5lc3NNYXA6Yi5tZXRhbG5lc3NNYXA/VD1iLm1ldGFsbmVzc01hcDpiLmFscGhhTWFwP1Q9Yi5hbHBoYU1hcDpiLmVtaXNzaXZlTWFwP1Q9Yi5lbWlzc2l2ZU1hcDpiLmNsZWFyY29hdE1hcD9UPWIuY2xlYXJjb2F0TWFwOmIuY2xlYXJjb2F0Tm9ybWFsTWFwP1Q9Yi5jbGVhcmNvYXROb3JtYWxNYXA6Yi5jbGVhcmNvYXRSb3VnaG5lc3NNYXA/VD1iLmNsZWFyY29hdFJvdWdobmVzc01hcDpiLnNwZWN1bGFySW50ZW5zaXR5TWFwP1Q9Yi5zcGVjdWxhckludGVuc2l0eU1hcDpiLnNwZWN1bGFyQ29sb3JNYXA/VD1iLnNwZWN1bGFyQ29sb3JNYXA6Yi50cmFuc21pc3Npb25NYXA/VD1iLnRyYW5zbWlzc2lvbk1hcDpiLnRoaWNrbmVzc01hcD9UPWIudGhpY2tuZXNzTWFwOmIuc2hlZW5Db2xvck1hcD9UPWIuc2hlZW5Db2xvck1hcDpiLnNoZWVuUm91Z2huZXNzTWFwJiYoVD1iLnNoZWVuUm91Z2huZXNzTWFwKSx2b2lkIDAhPT1UJiYoVC5pc1dlYkdMUmVuZGVyVGFyZ2V0JiYoVD1ULnRleHR1cmUpLCEwPT09VC5tYXRyaXhBdXRvVXBkYXRlJiZULnVwZGF0ZU1hdHJpeCgpLGcudXZUcmFuc2Zvcm0udmFsdWUuY29weShULm1hdHJpeCkpLGIuYW9NYXA/az1iLmFvTWFwOmIubGlnaHRNYXAmJihrPWIubGlnaHRNYXApLHZvaWQgMCE9PWsmJihrLmlzV2ViR0xSZW5kZXJUYXJnZXQmJihrPWsudGV4dHVyZSksITA9PT1rLm1hdHJpeEF1dG9VcGRhdGUmJmsudXBkYXRlTWF0cml4KCksZy51djJUcmFuc2Zvcm0udmFsdWUuY29weShrLm1hdHJpeCkpfWZ1bmN0aW9uIGQoZyxiKXtnLnJvdWdobmVzcy52YWx1ZT1iLnJvdWdobmVzcyxnLm1ldGFsbmVzcy52YWx1ZT1iLm1ldGFsbmVzcyxiLnJvdWdobmVzc01hcCYmKGcucm91Z2huZXNzTWFwLnZhbHVlPWIucm91Z2huZXNzTWFwKSxiLm1ldGFsbmVzc01hcCYmKGcubWV0YWxuZXNzTWFwLnZhbHVlPWIubWV0YWxuZXNzTWFwKSxiLmVtaXNzaXZlTWFwJiYoZy5lbWlzc2l2ZU1hcC52YWx1ZT1iLmVtaXNzaXZlTWFwKSxiLmJ1bXBNYXAmJihnLmJ1bXBNYXAudmFsdWU9Yi5idW1wTWFwLGcuYnVtcFNjYWxlLnZhbHVlPWIuYnVtcFNjYWxlLDE9PT1iLnNpZGUmJihnLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxiLm5vcm1hbE1hcCYmKGcubm9ybWFsTWFwLnZhbHVlPWIubm9ybWFsTWFwLGcubm9ybWFsU2NhbGUudmFsdWUuY29weShiLm5vcm1hbFNjYWxlKSwxPT09Yi5zaWRlJiZnLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKSxuLmdldChiKS5lbnZNYXAmJihnLmVudk1hcEludGVuc2l0eS52YWx1ZT1iLmVudk1hcEludGVuc2l0eSl9cmV0dXJue3JlZnJlc2hGb2dVbmlmb3JtczpmdW5jdGlvbihnLGIpe2cuZm9nQ29sb3IudmFsdWUuY29weShiLmNvbG9yKSxiLmlzRm9nPyhnLmZvZ05lYXIudmFsdWU9Yi5uZWFyLGcuZm9nRmFyLnZhbHVlPWIuZmFyKTpiLmlzRm9nRXhwMiYmKGcuZm9nRGVuc2l0eS52YWx1ZT1iLmRlbnNpdHkpfSxyZWZyZXNoTWF0ZXJpYWxVbmlmb3JtczpmdW5jdGlvbihnLGIsRCxULGspe2IuaXNNZXNoQmFzaWNNYXRlcmlhbD9pKGcsYik6Yi5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw/KGkoZyxiKSxmdW5jdGlvbihnLGIpe2IuZW1pc3NpdmVNYXAmJihnLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApfShnLGIpKTpiLmlzTWVzaFRvb25NYXRlcmlhbD8oaShnLGIpLGZ1bmN0aW9uKGcsYil7Yi5ncmFkaWVudE1hcCYmKGcuZ3JhZGllbnRNYXAudmFsdWU9Yi5ncmFkaWVudE1hcCksYi5lbWlzc2l2ZU1hcCYmKGcuZW1pc3NpdmVNYXAudmFsdWU9Yi5lbWlzc2l2ZU1hcCksYi5idW1wTWFwJiYoZy5idW1wTWFwLnZhbHVlPWIuYnVtcE1hcCxnLmJ1bXBTY2FsZS52YWx1ZT1iLmJ1bXBTY2FsZSwxPT09Yi5zaWRlJiYoZy5idW1wU2NhbGUudmFsdWUqPS0xKSksYi5ub3JtYWxNYXAmJihnLm5vcm1hbE1hcC52YWx1ZT1iLm5vcm1hbE1hcCxnLm5vcm1hbFNjYWxlLnZhbHVlLmNvcHkoYi5ub3JtYWxTY2FsZSksMT09PWIuc2lkZSYmZy5ub3JtYWxTY2FsZS52YWx1ZS5uZWdhdGUoKSksYi5kaXNwbGFjZW1lbnRNYXAmJihnLmRpc3BsYWNlbWVudE1hcC52YWx1ZT1iLmRpc3BsYWNlbWVudE1hcCxnLmRpc3BsYWNlbWVudFNjYWxlLnZhbHVlPWIuZGlzcGxhY2VtZW50U2NhbGUsZy5kaXNwbGFjZW1lbnRCaWFzLnZhbHVlPWIuZGlzcGxhY2VtZW50Qmlhcyl9KGcsYikpOmIuaXNNZXNoUGhvbmdNYXRlcmlhbD8oaShnLGIpLGZ1bmN0aW9uKGcsYil7Zy5zcGVjdWxhci52YWx1ZS5jb3B5KGIuc3BlY3VsYXIpLGcuc2hpbmluZXNzLnZhbHVlPU1hdGgubWF4KGIuc2hpbmluZXNzLDFlLTQpLGIuZW1pc3NpdmVNYXAmJihnLmVtaXNzaXZlTWFwLnZhbHVlPWIuZW1pc3NpdmVNYXApLGIuYnVtcE1hcCYmKGcuYnVtcE1hcC52YWx1ZT1iLmJ1bXBNYXAsZy5idW1wU2NhbGUudmFsdWU9Yi5idW1wU2NhbGUsMT09PWIuc2lkZSYmKGcuYnVtcFNjYWxlLnZhbHVlKj0tMSkpLGIubm9ybWFsTWFwJiYoZy5ub3JtYWxNYXAudmFsdWU9Yi5ub3JtYWxNYXAsZy5ub3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIubm9ybWFsU2NhbGUpLDE9PT1iLnNpZGUmJmcubm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpLGIuZGlzcGxhY2VtZW50TWFwJiYoZy5kaXNwbGFjZW1lbnRNYXAudmFsdWU9Yi5kaXNwbGFjZW1lbnRNYXAsZy5kaXNwbGFjZW1lbnRTY2FsZS52YWx1ZT1iLmRpc3BsYWNlbWVudFNjYWxlLGcuZGlzcGxhY2VtZW50Qmlhcy52YWx1ZT1iLmRpc3BsYWNlbWVudEJpYXMpfShnLGIpKTpiLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/KGkoZyxiKSxiLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw/ZnVuY3Rpb24oZyxiLEQpe2QoZyxiKSxnLmlvci52YWx1ZT1iLmlvcixiLnNoZWVuPjAmJihnLnNoZWVuQ29sb3IudmFsdWUuY29weShiLnNoZWVuQ29sb3IpLm11bHRpcGx5U2NhbGFyKGIuc2hlZW4pLGcuc2hlZW5Sb3VnaG5lc3MudmFsdWU9Yi5zaGVlblJvdWdobmVzcyxiLnNoZWVuQ29sb3JNYXAmJihnLnNoZWVuQ29sb3JNYXAudmFsdWU9Yi5zaGVlbkNvbG9yTWFwKSxiLnNoZWVuUm91Z2huZXNzTWFwJiYoZy5zaGVlblJvdWdobmVzc01hcC52YWx1ZT1iLnNoZWVuUm91Z2huZXNzTWFwKSksYi5jbGVhcmNvYXQ+MCYmKGcuY2xlYXJjb2F0LnZhbHVlPWIuY2xlYXJjb2F0LGcuY2xlYXJjb2F0Um91Z2huZXNzLnZhbHVlPWIuY2xlYXJjb2F0Um91Z2huZXNzLGIuY2xlYXJjb2F0TWFwJiYoZy5jbGVhcmNvYXRNYXAudmFsdWU9Yi5jbGVhcmNvYXRNYXApLGIuY2xlYXJjb2F0Um91Z2huZXNzTWFwJiYoZy5jbGVhcmNvYXRSb3VnaG5lc3NNYXAudmFsdWU9Yi5jbGVhcmNvYXRSb3VnaG5lc3NNYXApLGIuY2xlYXJjb2F0Tm9ybWFsTWFwJiYoZy5jbGVhcmNvYXROb3JtYWxTY2FsZS52YWx1ZS5jb3B5KGIuY2xlYXJjb2F0Tm9ybWFsU2NhbGUpLGcuY2xlYXJjb2F0Tm9ybWFsTWFwLnZhbHVlPWIuY2xlYXJjb2F0Tm9ybWFsTWFwLDE9PT1iLnNpZGUmJmcuY2xlYXJjb2F0Tm9ybWFsU2NhbGUudmFsdWUubmVnYXRlKCkpKSxiLnRyYW5zbWlzc2lvbj4wJiYoZy50cmFuc21pc3Npb24udmFsdWU9Yi50cmFuc21pc3Npb24sZy50cmFuc21pc3Npb25TYW1wbGVyTWFwLnZhbHVlPUQudGV4dHVyZSxnLnRyYW5zbWlzc2lvblNhbXBsZXJTaXplLnZhbHVlLnNldChELndpZHRoLEQuaGVpZ2h0KSxiLnRyYW5zbWlzc2lvbk1hcCYmKGcudHJhbnNtaXNzaW9uTWFwLnZhbHVlPWIudHJhbnNtaXNzaW9uTWFwKSxnLnRoaWNrbmVzcy52YWx1ZT1iLnRoaWNrbmVzcyxiLnRoaWNrbmVzc01hcCYmKGcudGhpY2tuZXNzTWFwLnZhbHVlPWIudGhpY2tuZXNzTWFwKSxnLmF0dGVudWF0aW9uRGlzdGFuY2UudmFsdWU9Yi5hdHRlbnVhdGlvbkRpc3RhbmNlLGcuYXR0ZW51YXRpb25Db2xvci52YWx1ZS5jb3B5KGIuYXR0ZW51YXRpb25Db2xvcikpLGcuc3BlY3VsYXJJbnRlbnNpdHkudmFsdWU9Yi5zcGVjdWxhckludGVuc2l0eSxnLnNwZWN1bGFyQ29sb3IudmFsdWUuY29weShiLnNwZWN1bGFyQ29sb3IpLGIuc3BlY3VsYXJJbnRlbnNpdHlNYXAmJihnLnNwZWN1bGFySW50ZW5zaXR5TWFwLnZhbHVlPWIuc3BlY3VsYXJJbnRlbnNpdHlNYXApLGIuc3BlY3VsYXJDb2xvck1hcCYmKGcuc3BlY3VsYXJDb2xvck1hcC52YWx1ZT1iLnNwZWN1bGFyQ29sb3JNYXApfShnLGIsayk6ZChnLGIpKTpiLmlzTWVzaE1hdGNhcE1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLm1hdGNhcCYmKGcubWF0Y2FwLnZhbHVlPWIubWF0Y2FwKSxiLmJ1bXBNYXAmJihnLmJ1bXBNYXAudmFsdWU9Yi5idW1wTWFwLGcuYnVtcFNjYWxlLnZhbHVlPWIuYnVtcFNjYWxlLDE9PT1iLnNpZGUmJihnLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxiLm5vcm1hbE1hcCYmKGcubm9ybWFsTWFwLnZhbHVlPWIubm9ybWFsTWFwLGcubm9ybWFsU2NhbGUudmFsdWUuY29weShiLm5vcm1hbFNjYWxlKSwxPT09Yi5zaWRlJiZnLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKX0oZyxiKSk6Yi5pc01lc2hEZXB0aE1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKX0oZyxiKSk6Yi5pc01lc2hEaXN0YW5jZU1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKSxnLnJlZmVyZW5jZVBvc2l0aW9uLnZhbHVlLmNvcHkoYi5yZWZlcmVuY2VQb3NpdGlvbiksZy5uZWFyRGlzdGFuY2UudmFsdWU9Yi5uZWFyRGlzdGFuY2UsZy5mYXJEaXN0YW5jZS52YWx1ZT1iLmZhckRpc3RhbmNlfShnLGIpKTpiLmlzTWVzaE5vcm1hbE1hdGVyaWFsPyhpKGcsYiksZnVuY3Rpb24oZyxiKXtiLmJ1bXBNYXAmJihnLmJ1bXBNYXAudmFsdWU9Yi5idW1wTWFwLGcuYnVtcFNjYWxlLnZhbHVlPWIuYnVtcFNjYWxlLDE9PT1iLnNpZGUmJihnLmJ1bXBTY2FsZS52YWx1ZSo9LTEpKSxiLm5vcm1hbE1hcCYmKGcubm9ybWFsTWFwLnZhbHVlPWIubm9ybWFsTWFwLGcubm9ybWFsU2NhbGUudmFsdWUuY29weShiLm5vcm1hbFNjYWxlKSwxPT09Yi5zaWRlJiZnLm5vcm1hbFNjYWxlLnZhbHVlLm5lZ2F0ZSgpKSxiLmRpc3BsYWNlbWVudE1hcCYmKGcuZGlzcGxhY2VtZW50TWFwLnZhbHVlPWIuZGlzcGxhY2VtZW50TWFwLGcuZGlzcGxhY2VtZW50U2NhbGUudmFsdWU9Yi5kaXNwbGFjZW1lbnRTY2FsZSxnLmRpc3BsYWNlbWVudEJpYXMudmFsdWU9Yi5kaXNwbGFjZW1lbnRCaWFzKX0oZyxiKSk6Yi5pc0xpbmVCYXNpY01hdGVyaWFsPyhmdW5jdGlvbihnLGIpe2cuZGlmZnVzZS52YWx1ZS5jb3B5KGIuY29sb3IpLGcub3BhY2l0eS52YWx1ZT1iLm9wYWNpdHl9KGcsYiksYi5pc0xpbmVEYXNoZWRNYXRlcmlhbCYmZnVuY3Rpb24oZyxiKXtnLmRhc2hTaXplLnZhbHVlPWIuZGFzaFNpemUsZy50b3RhbFNpemUudmFsdWU9Yi5kYXNoU2l6ZStiLmdhcFNpemUsZy5zY2FsZS52YWx1ZT1iLnNjYWxlfShnLGIpKTpiLmlzUG9pbnRzTWF0ZXJpYWw/ZnVuY3Rpb24oZyxiLEQsVCl7bGV0IGs7Zy5kaWZmdXNlLnZhbHVlLmNvcHkoYi5jb2xvciksZy5vcGFjaXR5LnZhbHVlPWIub3BhY2l0eSxnLnNpemUudmFsdWU9Yi5zaXplKkQsZy5zY2FsZS52YWx1ZT0uNSpULGIubWFwJiYoZy5tYXAudmFsdWU9Yi5tYXApLGIuYWxwaGFNYXAmJihnLmFscGhhTWFwLnZhbHVlPWIuYWxwaGFNYXApLGIuYWxwaGFUZXN0PjAmJihnLmFscGhhVGVzdC52YWx1ZT1iLmFscGhhVGVzdCksYi5tYXA/az1iLm1hcDpiLmFscGhhTWFwJiYoaz1iLmFscGhhTWFwKSx2b2lkIDAhPT1rJiYoITA9PT1rLm1hdHJpeEF1dG9VcGRhdGUmJmsudXBkYXRlTWF0cml4KCksZy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KGsubWF0cml4KSl9KGcsYixELFQpOmIuaXNTcHJpdGVNYXRlcmlhbD9mdW5jdGlvbihnLGIpe2xldCBEO2cuZGlmZnVzZS52YWx1ZS5jb3B5KGIuY29sb3IpLGcub3BhY2l0eS52YWx1ZT1iLm9wYWNpdHksZy5yb3RhdGlvbi52YWx1ZT1iLnJvdGF0aW9uLGIubWFwJiYoZy5tYXAudmFsdWU9Yi5tYXApLGIuYWxwaGFNYXAmJihnLmFscGhhTWFwLnZhbHVlPWIuYWxwaGFNYXApLGIuYWxwaGFUZXN0PjAmJihnLmFscGhhVGVzdC52YWx1ZT1iLmFscGhhVGVzdCksYi5tYXA/RD1iLm1hcDpiLmFscGhhTWFwJiYoRD1iLmFscGhhTWFwKSx2b2lkIDAhPT1EJiYoITA9PT1ELm1hdHJpeEF1dG9VcGRhdGUmJkQudXBkYXRlTWF0cml4KCksZy51dlRyYW5zZm9ybS52YWx1ZS5jb3B5KEQubWF0cml4KSl9KGcsYik6Yi5pc1NoYWRvd01hdGVyaWFsPyhnLmNvbG9yLnZhbHVlLmNvcHkoYi5jb2xvciksZy5vcGFjaXR5LnZhbHVlPWIub3BhY2l0eSk6Yi5pc1NoYWRlck1hdGVyaWFsJiYoYi51bmlmb3Jtc05lZWRVcGRhdGU9ITEpfX19ZnVuY3Rpb24gaXIobj17fSl7bGV0IHQ9dm9pZCAwIT09bi5jYW52YXM/bi5jYW52YXM6ZnVuY3Rpb24oKXtsZXQgbj1ZUygiY2FudmFzIik7cmV0dXJuIG4uc3R5bGUuZGlzcGxheT0iYmxvY2siLG59KCksZT12b2lkIDAhPT1uLmNvbnRleHQ/bi5jb250ZXh0Om51bGwsaT12b2lkIDAhPT1uLmFscGhhJiZuLmFscGhhLHI9dm9pZCAwPT09bi5kZXB0aHx8bi5kZXB0aCxvPXZvaWQgMD09PW4uc3RlbmNpbHx8bi5zdGVuY2lsLHM9dm9pZCAwIT09bi5hbnRpYWxpYXMmJm4uYW50aWFsaWFzLGE9dm9pZCAwPT09bi5wcmVtdWx0aXBsaWVkQWxwaGF8fG4ucHJlbXVsdGlwbGllZEFscGhhLGw9dm9pZCAwIT09bi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXImJm4ucHJlc2VydmVEcmF3aW5nQnVmZmVyLGM9dm9pZCAwIT09bi5wb3dlclByZWZlcmVuY2U/bi5wb3dlclByZWZlcmVuY2U6ImRlZmF1bHQiLHU9dm9pZCAwIT09bi5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0JiZuLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsZD1udWxsLHA9bnVsbCxoPVtdLGY9W107dGhpcy5kb21FbGVtZW50PXQsdGhpcy5kZWJ1Zz17Y2hlY2tTaGFkZXJFcnJvcnM6ITB9LHRoaXMuYXV0b0NsZWFyPSEwLHRoaXMuYXV0b0NsZWFyQ29sb3I9ITAsdGhpcy5hdXRvQ2xlYXJEZXB0aD0hMCx0aGlzLmF1dG9DbGVhclN0ZW5jaWw9ITAsdGhpcy5zb3J0T2JqZWN0cz0hMCx0aGlzLmNsaXBwaW5nUGxhbmVzPVtdLHRoaXMubG9jYWxDbGlwcGluZ0VuYWJsZWQ9ITEsdGhpcy5vdXRwdXRFbmNvZGluZz1iZix0aGlzLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzPSExLHRoaXMudG9uZU1hcHBpbmc9MCx0aGlzLnRvbmVNYXBwaW5nRXhwb3N1cmU9MTtsZXQgbT10aGlzLHg9ITEsZz0wLGI9MCxEPW51bGwsVD0tMSxrPW51bGwsWj1uZXcgYXIsej1uZXcgYXIsZmU9bnVsbCx1ZT10LndpZHRoLGhlPXQuaGVpZ2h0LHc9MSxGPW51bGwscT1udWxsLEs9bmV3IGFyKDAsMCx1ZSxoZSksZGU9bmV3IGFyKDAsMCx1ZSxoZSksWT0hMSxhZT1uZXcgZ2IsbGU9ITEsSWU9ITEsdmU9bnVsbCxEZT1uZXcgUm4sbnQ9bmV3IGllLGd0PXtiYWNrZ3JvdW5kOm51bGwsZm9nOm51bGwsZW52aXJvbm1lbnQ6bnVsbCxvdmVycmlkZU1hdGVyaWFsOm51bGwsaXNTY2VuZTohMH07ZnVuY3Rpb24gVWUoKXtyZXR1cm4gbnVsbD09PUQ/dzoxfWxldCBwdCx3dCxUZSx4dCxtdCxjZSxkdCxXZSxNdCxidCxobixvbixmaSxXaSxxaSxlZSxXLFhlLFR0LG1uLHFlLHduLHluLEFlPWU7ZnVuY3Rpb24gdG4oSSxYKXtmb3IobGV0ICQ9MDskPEkubGVuZ3RoOyQrKyl7bGV0IG1lPXQuZ2V0Q29udGV4dChJWyRdLFgpO2lmKG51bGwhPT1tZSlyZXR1cm4gbWV9cmV0dXJuIG51bGx9dHJ5e2xldCBJPXthbHBoYTohMCxkZXB0aDpyLHN0ZW5jaWw6byxhbnRpYWxpYXM6cyxwcmVtdWx0aXBsaWVkQWxwaGE6YSxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6bCxwb3dlclByZWZlcmVuY2U6YyxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OnV9O2lmKCJzZXRBdHRyaWJ1dGUiaW4gdCYmdC5zZXRBdHRyaWJ1dGUoImRhdGEtZW5naW5lIiwidGhyZWUuanMgcjEzNyIpLHQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsV24sITEpLHQuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLGdlLCExKSxudWxsPT09QWUpe2xldCBYPVsid2ViZ2wyIiwid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiXTtpZighMD09PW0uaXNXZWJHTDFSZW5kZXJlciYmWC5zaGlmdCgpLEFlPXRuKFgsSSksbnVsbD09PUFlKXRocm93IHRuKFgpP25ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgV2ViR0wgY29udGV4dCB3aXRoIHlvdXIgc2VsZWN0ZWQgYXR0cmlidXRlcy4iKTpuZXcgRXJyb3IoIkVycm9yIGNyZWF0aW5nIFdlYkdMIGNvbnRleHQuIil9dm9pZCAwPT09QWUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0JiYoQWUuZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJue3JhbmdlTWluOjEscmFuZ2VNYXg6MSxwcmVjaXNpb246MX19KX1jYXRjaChJKXt0aHJvdyBjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAiK0kubWVzc2FnZSksSX1mdW5jdGlvbiB6dCgpe3B0PW5ldyBWV2UoQWUpLHd0PW5ldyBPV2UoQWUscHQsbikscHQuaW5pdCh3dCksd249bmV3IGY5ZShBZSxwdCx3dCksVGU9bmV3IHA5ZShBZSxwdCx3dCkseHQ9bmV3IHpXZShBZSksbXQ9bmV3IHQ5ZSxjZT1uZXcgaDllKEFlLHB0LFRlLG10LHd0LHduLHh0KSxkdD1uZXcgRldlKG0pLFdlPW5ldyBCV2UobSksTXQ9bmV3IGlHZShBZSx3dCkseW49bmV3IFBXZShBZSxwdCxNdCx3dCksYnQ9bmV3IEhXZShBZSxNdCx4dCx5biksaG49bmV3IHFXZShBZSxidCxNdCx4dCksVHQ9bmV3IFdXZShBZSx3dCxjZSksZWU9bmV3IGtXZShtdCksb249bmV3IGU5ZShtLGR0LFdlLHB0LHd0LHluLGVlKSxmaT1uZXcgZzllKG10KSxXaT1uZXcgaTllLHFpPW5ldyBjOWUocHQsd3QpLFhlPW5ldyBJV2UobSxkdCxUZSxobixpLGEpLFc9bmV3IEdkZShtLGhuLHd0KSxtbj1uZXcgUldlKEFlLHB0LHh0LHd0KSxxZT1uZXcgVVdlKEFlLHB0LHh0LHd0KSx4dC5wcm9ncmFtcz1vbi5wcm9ncmFtcyxtLmNhcGFiaWxpdGllcz13dCxtLmV4dGVuc2lvbnM9cHQsbS5wcm9wZXJ0aWVzPW10LG0ucmVuZGVyTGlzdHM9V2ksbS5zaGFkb3dNYXA9VyxtLnN0YXRlPVRlLG0uaW5mbz14dH16dCgpO2xldCBVdD1uZXcgeTgobSxBZSk7ZnVuY3Rpb24gV24oSSl7SS5wcmV2ZW50RGVmYXVsdCgpLGNvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IExvc3QuIikseD0hMH1mdW5jdGlvbiBnZSgpe2NvbnNvbGUubG9nKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiBDb250ZXh0IFJlc3RvcmVkLiIpLHg9ITE7bGV0IEk9eHQuYXV0b1Jlc2V0LFg9Vy5lbmFibGVkLCQ9Vy5hdXRvVXBkYXRlLG5lPVcubmVlZHNVcGRhdGUsbWU9Vy50eXBlO3p0KCkseHQuYXV0b1Jlc2V0PUksVy5lbmFibGVkPVgsVy5hdXRvVXBkYXRlPSQsVy5uZWVkc1VwZGF0ZT1uZSxXLnR5cGU9bWV9ZnVuY3Rpb24gZm4oSSl7bGV0IFg9SS50YXJnZXQ7WC5yZW1vdmVFdmVudExpc3RlbmVyKCJkaXNwb3NlIixmbiksZnVuY3Rpb24oSSl7KGZ1bmN0aW9uKEkpe2xldCBYPW10LmdldChJKS5wcm9ncmFtczt2b2lkIDAhPT1YJiYoWC5mb3JFYWNoKGZ1bmN0aW9uKCQpe29uLnJlbGVhc2VQcm9ncmFtKCQpfSksSS5pc1NoYWRlck1hdGVyaWFsJiZvbi5yZWxlYXNlU2hhZGVyQ2FjaGUoSSkpfSkoSSksbXQucmVtb3ZlKEkpfShYKX10aGlzLnhyPVV0LHRoaXMuZ2V0Q29udGV4dD1mdW5jdGlvbigpe3JldHVybiBBZX0sdGhpcy5nZXRDb250ZXh0QXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBBZS5nZXRDb250ZXh0QXR0cmlidXRlcygpfSx0aGlzLmZvcmNlQ29udGV4dExvc3M9ZnVuY3Rpb24oKXtsZXQgST1wdC5nZXQoIldFQkdMX2xvc2VfY29udGV4dCIpO0kmJkkubG9zZUNvbnRleHQoKX0sdGhpcy5mb3JjZUNvbnRleHRSZXN0b3JlPWZ1bmN0aW9uKCl7bGV0IEk9cHQuZ2V0KCJXRUJHTF9sb3NlX2NvbnRleHQiKTtJJiZJLnJlc3RvcmVDb250ZXh0KCl9LHRoaXMuZ2V0UGl4ZWxSYXRpbz1mdW5jdGlvbigpe3JldHVybiB3fSx0aGlzLnNldFBpeGVsUmF0aW89ZnVuY3Rpb24oSSl7dm9pZCAwIT09SSYmKHc9SSx0aGlzLnNldFNpemUodWUsaGUsITEpKX0sdGhpcy5nZXRTaXplPWZ1bmN0aW9uKEkpe3JldHVybiBJLnNldCh1ZSxoZSl9LHRoaXMuc2V0U2l6ZT1mdW5jdGlvbihJLFgsJCl7VXQuaXNQcmVzZW50aW5nP2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogQ2FuJ3QgY2hhbmdlIHNpemUgd2hpbGUgVlIgZGV2aWNlIGlzIHByZXNlbnRpbmcuIik6KHVlPUksaGU9WCx0LndpZHRoPU1hdGguZmxvb3IoSSp3KSx0LmhlaWdodD1NYXRoLmZsb29yKFgqdyksITEhPT0kJiYodC5zdHlsZS53aWR0aD1JKyJweCIsdC5zdHlsZS5oZWlnaHQ9WCsicHgiKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxJLFgpKX0sdGhpcy5nZXREcmF3aW5nQnVmZmVyU2l6ZT1mdW5jdGlvbihJKXtyZXR1cm4gSS5zZXQodWUqdyxoZSp3KS5mbG9vcigpfSx0aGlzLnNldERyYXdpbmdCdWZmZXJTaXplPWZ1bmN0aW9uKEksWCwkKXt1ZT1JLGhlPVgsdz0kLHQud2lkdGg9TWF0aC5mbG9vcihJKiQpLHQuaGVpZ2h0PU1hdGguZmxvb3IoWCokKSx0aGlzLnNldFZpZXdwb3J0KDAsMCxJLFgpfSx0aGlzLmdldEN1cnJlbnRWaWV3cG9ydD1mdW5jdGlvbihJKXtyZXR1cm4gSS5jb3B5KFopfSx0aGlzLmdldFZpZXdwb3J0PWZ1bmN0aW9uKEkpe3JldHVybiBJLmNvcHkoSyl9LHRoaXMuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24oSSxYLCQsbmUpe0kuaXNWZWN0b3I0P0suc2V0KEkueCxJLnksSS56LEkudyk6Sy5zZXQoSSxYLCQsbmUpLFRlLnZpZXdwb3J0KFouY29weShLKS5tdWx0aXBseVNjYWxhcih3KS5mbG9vcigpKX0sdGhpcy5nZXRTY2lzc29yPWZ1bmN0aW9uKEkpe3JldHVybiBJLmNvcHkoZGUpfSx0aGlzLnNldFNjaXNzb3I9ZnVuY3Rpb24oSSxYLCQsbmUpe0kuaXNWZWN0b3I0P2RlLnNldChJLngsSS55LEkueixJLncpOmRlLnNldChJLFgsJCxuZSksVGUuc2Npc3Nvcih6LmNvcHkoZGUpLm11bHRpcGx5U2NhbGFyKHcpLmZsb29yKCkpfSx0aGlzLmdldFNjaXNzb3JUZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIFl9LHRoaXMuc2V0U2Npc3NvclRlc3Q9ZnVuY3Rpb24oSSl7VGUuc2V0U2Npc3NvclRlc3QoWT1JKX0sdGhpcy5zZXRPcGFxdWVTb3J0PWZ1bmN0aW9uKEkpe0Y9SX0sdGhpcy5zZXRUcmFuc3BhcmVudFNvcnQ9ZnVuY3Rpb24oSSl7cT1JfSx0aGlzLmdldENsZWFyQ29sb3I9ZnVuY3Rpb24oSSl7cmV0dXJuIEkuY29weShYZS5nZXRDbGVhckNvbG9yKCkpfSx0aGlzLnNldENsZWFyQ29sb3I9ZnVuY3Rpb24oKXtYZS5zZXRDbGVhckNvbG9yLmFwcGx5KFhlLGFyZ3VtZW50cyl9LHRoaXMuZ2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe3JldHVybiBYZS5nZXRDbGVhckFscGhhKCl9LHRoaXMuc2V0Q2xlYXJBbHBoYT1mdW5jdGlvbigpe1hlLnNldENsZWFyQWxwaGEuYXBwbHkoWGUsYXJndW1lbnRzKX0sdGhpcy5jbGVhcj1mdW5jdGlvbihJLFgsJCl7bGV0IG5lPTA7KHZvaWQgMD09PUl8fEkpJiYobmV8PTE2Mzg0KSwodm9pZCAwPT09WHx8WCkmJihuZXw9MjU2KSwodm9pZCAwPT09JHx8JCkmJihuZXw9MTAyNCksQWUuY2xlYXIobmUpfSx0aGlzLmNsZWFyQ29sb3I9ZnVuY3Rpb24oKXt0aGlzLmNsZWFyKCEwLCExLCExKX0sdGhpcy5jbGVhckRlcHRoPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMCwhMSl9LHRoaXMuY2xlYXJTdGVuY2lsPWZ1bmN0aW9uKCl7dGhpcy5jbGVhcighMSwhMSwhMCl9LHRoaXMuZGlzcG9zZT1mdW5jdGlvbigpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsV24sITEpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0cmVzdG9yZWQiLGdlLCExKSxXaS5kaXNwb3NlKCkscWkuZGlzcG9zZSgpLG10LmRpc3Bvc2UoKSxkdC5kaXNwb3NlKCksV2UuZGlzcG9zZSgpLGhuLmRpc3Bvc2UoKSx5bi5kaXNwb3NlKCksb24uZGlzcG9zZSgpLFV0LmRpc3Bvc2UoKSxVdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uc3RhcnQiLE1pKSxVdC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZXNzaW9uZW5kIixUciksdmUmJih2ZS5kaXNwb3NlKCksdmU9bnVsbCksRXMuc3RvcCgpfSx0aGlzLnJlbmRlckJ1ZmZlckRpcmVjdD1mdW5jdGlvbihJLFgsJCxuZSxtZSxLZSl7bnVsbD09PVgmJihYPWd0KTtsZXQgbHQ9bWUuaXNNZXNoJiZtZS5tYXRyaXhXb3JsZC5kZXRlcm1pbmFudCgpPDAsSmU9ZnVuY3Rpb24oSSxYLCQsbmUsbWUpeyEwIT09WC5pc1NjZW5lJiYoWD1ndCksY2UucmVzZXRUZXh0dXJlVW5pdHMoKTtsZXQgS2U9WC5mb2csSmU9bnVsbD09PUQ/bS5vdXRwdXRFbmNvZGluZzohMD09PUQuaXNYUlJlbmRlclRhcmdldD9ELnRleHR1cmUuZW5jb2Rpbmc6YmYsZnQ9KG5lLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw/V2U6ZHQpLmdldChuZS5lbnZNYXB8fChuZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1guZW52aXJvbm1lbnQ6bnVsbCkpLEN0PSEwPT09bmUudmVydGV4Q29sb3JzJiYhISQuYXR0cmlidXRlcy5jb2xvciYmND09PSQuYXR0cmlidXRlcy5jb2xvci5pdGVtU2l6ZSxJdD0hIW5lLm5vcm1hbE1hcCYmISEkLmF0dHJpYnV0ZXMudGFuZ2VudCxOdD0hISQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLGJuPSEhJC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsLHJyPSQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uPyQubW9ycGhBdHRyaWJ1dGVzLnBvc2l0aW9uLmxlbmd0aDowLEFpPW5lLnRvbmVNYXBwZWQ/bS50b25lTWFwcGluZzowLE1uPW10LmdldChuZSksSG49cC5zdGF0ZS5saWdodHM7ITAhPT1sZXx8ITAhPT1JZSYmST09PWt8fGVlLnNldFN0YXRlKG5lLEksST09PWsmJm5lLmlkPT09VCk7bGV0IE90PSExO25lLnZlcnNpb249PT1Nbi5fX3ZlcnNpb24/KE1uLm5lZWRzTGlnaHRzJiZNbi5saWdodHNTdGF0ZVZlcnNpb24hPT1Ibi5zdGF0ZS52ZXJzaW9ufHxNbi5vdXRwdXRFbmNvZGluZyE9PUplfHxtZS5pc0luc3RhbmNlZE1lc2gmJiExPT09TW4uaW5zdGFuY2luZ3x8IW1lLmlzSW5zdGFuY2VkTWVzaCYmITA9PT1Nbi5pbnN0YW5jaW5nfHxtZS5pc1NraW5uZWRNZXNoJiYhMT09PU1uLnNraW5uaW5nfHwhbWUuaXNTa2lubmVkTWVzaCYmITA9PT1Nbi5za2lubmluZ3x8TW4uZW52TWFwIT09ZnR8fG5lLmZvZyYmTW4uZm9nIT09S2V8fHZvaWQgMCE9PU1uLm51bUNsaXBwaW5nUGxhbmVzJiYoTW4ubnVtQ2xpcHBpbmdQbGFuZXMhPT1lZS5udW1QbGFuZXN8fE1uLm51bUludGVyc2VjdGlvbiE9PWVlLm51bUludGVyc2VjdGlvbil8fE1uLnZlcnRleEFscGhhcyE9PUN0fHxNbi52ZXJ0ZXhUYW5nZW50cyE9PUl0fHxNbi5tb3JwaFRhcmdldHMhPT1OdHx8TW4ubW9ycGhOb3JtYWxzIT09Ym58fE1uLnRvbmVNYXBwaW5nIT09QWl8fCEwPT09d3QuaXNXZWJHTDImJk1uLm1vcnBoVGFyZ2V0c0NvdW50IT09cnIpJiYoT3Q9ITApOihPdD0hMCxNbi5fX3ZlcnNpb249bmUudmVyc2lvbik7bGV0IHdpPU1uLmN1cnJlbnRQcm9ncmFtOyEwPT09T3QmJih3aT1leChuZSxYLG1lKSk7bGV0IGFpPSExLFluPSExLCRuPSExLFl0PXdpLmdldFVuaWZvcm1zKCksWWk9TW4udW5pZm9ybXM7aWYoVGUudXNlUHJvZ3JhbSh3aS5wcm9ncmFtKSYmKGFpPSEwLFluPSEwLCRuPSEwKSxuZS5pZCE9PVQmJihUPW5lLmlkLFluPSEwKSxhaXx8ayE9PUkpe2lmKFl0LnNldFZhbHVlKEFlLCJwcm9qZWN0aW9uTWF0cml4IixJLnByb2plY3Rpb25NYXRyaXgpLHd0LmxvZ2FyaXRobWljRGVwdGhCdWZmZXImJll0LnNldFZhbHVlKEFlLCJsb2dEZXB0aEJ1ZkZDIiwyLyhNYXRoLmxvZyhJLmZhcisxKS9NYXRoLkxOMikpLGshPT1JJiYoaz1JLFluPSEwLCRuPSEwKSxuZS5pc1NoYWRlck1hdGVyaWFsfHxuZS5pc01lc2hQaG9uZ01hdGVyaWFsfHxuZS5pc01lc2hUb29uTWF0ZXJpYWx8fG5lLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fG5lLmVudk1hcCl7bGV0IEFuPVl0Lm1hcC5jYW1lcmFQb3NpdGlvbjt2b2lkIDAhPT1BbiYmQW4uc2V0VmFsdWUoQWUsbnQuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKEkubWF0cml4V29ybGQpKX0obmUuaXNNZXNoUGhvbmdNYXRlcmlhbHx8bmUuaXNNZXNoVG9vbk1hdGVyaWFsfHxuZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fG5lLmlzTWVzaEJhc2ljTWF0ZXJpYWx8fG5lLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWx8fG5lLmlzU2hhZGVyTWF0ZXJpYWwpJiZZdC5zZXRWYWx1ZShBZSwiaXNPcnRob2dyYXBoaWMiLCEwPT09SS5pc09ydGhvZ3JhcGhpY0NhbWVyYSksKG5lLmlzTWVzaFBob25nTWF0ZXJpYWx8fG5lLmlzTWVzaFRvb25NYXRlcmlhbHx8bmUuaXNNZXNoTGFtYmVydE1hdGVyaWFsfHxuZS5pc01lc2hCYXNpY01hdGVyaWFsfHxuZS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsfHxuZS5pc1NoYWRlck1hdGVyaWFsfHxuZS5pc1NoYWRvd01hdGVyaWFsfHxtZS5pc1NraW5uZWRNZXNoKSYmWXQuc2V0VmFsdWUoQWUsInZpZXdNYXRyaXgiLEkubWF0cml4V29ybGRJbnZlcnNlKX1pZihtZS5pc1NraW5uZWRNZXNoKXtZdC5zZXRPcHRpb25hbChBZSxtZSwiYmluZE1hdHJpeCIpLFl0LnNldE9wdGlvbmFsKEFlLG1lLCJiaW5kTWF0cml4SW52ZXJzZSIpO2xldCBBbj1tZS5za2VsZXRvbjtBbiYmKHd0LmZsb2F0VmVydGV4VGV4dHVyZXM/KG51bGw9PT1Bbi5ib25lVGV4dHVyZSYmQW4uY29tcHV0ZUJvbmVUZXh0dXJlKCksWXQuc2V0VmFsdWUoQWUsImJvbmVUZXh0dXJlIixBbi5ib25lVGV4dHVyZSxjZSksWXQuc2V0VmFsdWUoQWUsImJvbmVUZXh0dXJlU2l6ZSIsQW4uYm9uZVRleHR1cmVTaXplKSk6WXQuc2V0T3B0aW9uYWwoQWUsQW4sImJvbmVNYXRyaWNlcyIpKX1yZXR1cm4hISQmJih2b2lkIDAhPT0kLm1vcnBoQXR0cmlidXRlcy5wb3NpdGlvbnx8dm9pZCAwIT09JC5tb3JwaEF0dHJpYnV0ZXMubm9ybWFsKSYmVHQudXBkYXRlKG1lLCQsbmUsd2kpLChZbnx8TW4ucmVjZWl2ZVNoYWRvdyE9PW1lLnJlY2VpdmVTaGFkb3cpJiYoTW4ucmVjZWl2ZVNoYWRvdz1tZS5yZWNlaXZlU2hhZG93LFl0LnNldFZhbHVlKEFlLCJyZWNlaXZlU2hhZG93IixtZS5yZWNlaXZlU2hhZG93KSksWW4mJihZdC5zZXRWYWx1ZShBZSwidG9uZU1hcHBpbmdFeHBvc3VyZSIsbS50b25lTWFwcGluZ0V4cG9zdXJlKSxNbi5uZWVkc0xpZ2h0cyYmZnVuY3Rpb24oSSxYKXtJLmFtYmllbnRMaWdodENvbG9yLm5lZWRzVXBkYXRlPVgsSS5saWdodFByb2JlLm5lZWRzVXBkYXRlPVgsSS5kaXJlY3Rpb25hbExpZ2h0cy5uZWVkc1VwZGF0ZT1YLEkuZGlyZWN0aW9uYWxMaWdodFNoYWRvd3MubmVlZHNVcGRhdGU9WCxJLnBvaW50TGlnaHRzLm5lZWRzVXBkYXRlPVgsSS5wb2ludExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1YLEkuc3BvdExpZ2h0cy5uZWVkc1VwZGF0ZT1YLEkuc3BvdExpZ2h0U2hhZG93cy5uZWVkc1VwZGF0ZT1YLEkucmVjdEFyZWFMaWdodHMubmVlZHNVcGRhdGU9WCxJLmhlbWlzcGhlcmVMaWdodHMubmVlZHNVcGRhdGU9WH0oWWksJG4pLEtlJiZuZS5mb2cmJmZpLnJlZnJlc2hGb2dVbmlmb3JtcyhZaSxLZSksZmkucmVmcmVzaE1hdGVyaWFsVW5pZm9ybXMoWWksbmUsdyxoZSx2ZSkseWYudXBsb2FkKEFlLE1uLnVuaWZvcm1zTGlzdCxZaSxjZSkpLG5lLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09bmUudW5pZm9ybXNOZWVkVXBkYXRlJiYoeWYudXBsb2FkKEFlLE1uLnVuaWZvcm1zTGlzdCxZaSxjZSksbmUudW5pZm9ybXNOZWVkVXBkYXRlPSExKSxuZS5pc1Nwcml0ZU1hdGVyaWFsJiZZdC5zZXRWYWx1ZShBZSwiY2VudGVyIixtZS5jZW50ZXIpLFl0LnNldFZhbHVlKEFlLCJtb2RlbFZpZXdNYXRyaXgiLG1lLm1vZGVsVmlld01hdHJpeCksWXQuc2V0VmFsdWUoQWUsIm5vcm1hbE1hdHJpeCIsbWUubm9ybWFsTWF0cml4KSxZdC5zZXRWYWx1ZShBZSwibW9kZWxNYXRyaXgiLG1lLm1hdHJpeFdvcmxkKSx3aX0oSSxYLCQsbmUsbWUpO1RlLnNldE1hdGVyaWFsKG5lLGx0KTtsZXQgZnQ9JC5pbmRleCxDdD0kLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbD09PWZ0KXtpZih2b2lkIDA9PT1DdHx8MD09PUN0LmNvdW50KXJldHVybn1lbHNlIGlmKDA9PT1mdC5jb3VudClyZXR1cm47bGV0IEl0PTE7ITA9PT1uZS53aXJlZnJhbWUmJihmdD1idC5nZXRXaXJlZnJhbWVBdHRyaWJ1dGUoJCksSXQ9MikseW4uc2V0dXAobWUsbmUsSmUsJCxmdCk7bGV0IE50LGJuPW1uO251bGwhPT1mdCYmKE50PU10LmdldChmdCksYm49cWUsYm4uc2V0SW5kZXgoTnQpKTtsZXQgcnI9bnVsbCE9PWZ0P2Z0LmNvdW50OkN0LmNvdW50LEFpPSQuZHJhd1JhbmdlLnN0YXJ0Kkl0LE1uPSQuZHJhd1JhbmdlLmNvdW50Kkl0LEhuPW51bGwhPT1LZT9LZS5zdGFydCpJdDowLE90PW51bGwhPT1LZT9LZS5jb3VudCpJdDoxLzAsd2k9TWF0aC5tYXgoQWksSG4pLGFpPU1hdGgubWluKHJyLEFpK01uLEhuK090KS0xLFluPU1hdGgubWF4KDAsYWktd2krMSk7aWYoMCE9PVluKXtpZihtZS5pc01lc2gpITA9PT1uZS53aXJlZnJhbWU/KFRlLnNldExpbmVXaWR0aChuZS53aXJlZnJhbWVMaW5ld2lkdGgqVWUoKSksYm4uc2V0TW9kZSgxKSk6Ym4uc2V0TW9kZSg0KTtlbHNlIGlmKG1lLmlzTGluZSl7bGV0ICRuPW5lLmxpbmV3aWR0aDt2b2lkIDA9PT0kbiYmKCRuPTEpLFRlLnNldExpbmVXaWR0aCgkbipVZSgpKSxibi5zZXRNb2RlKG1lLmlzTGluZVNlZ21lbnRzPzE6bWUuaXNMaW5lTG9vcD8yOjMpfWVsc2UgbWUuaXNQb2ludHM/Ym4uc2V0TW9kZSgwKTptZS5pc1Nwcml0ZSYmYm4uc2V0TW9kZSg0KTtpZihtZS5pc0luc3RhbmNlZE1lc2gpYm4ucmVuZGVySW5zdGFuY2VzKHdpLFluLG1lLmNvdW50KTtlbHNlIGlmKCQuaXNJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSl7bGV0ICRuPU1hdGgubWluKCQuaW5zdGFuY2VDb3VudCwkLl9tYXhJbnN0YW5jZUNvdW50KTtibi5yZW5kZXJJbnN0YW5jZXMod2ksWW4sJG4pfWVsc2UgYm4ucmVuZGVyKHdpLFluKX19LHRoaXMuY29tcGlsZT1mdW5jdGlvbihJLFgpe3A9cWkuZ2V0KEkpLHAuaW5pdCgpLGYucHVzaChwKSxJLnRyYXZlcnNlVmlzaWJsZShmdW5jdGlvbigkKXskLmlzTGlnaHQmJiQubGF5ZXJzLnRlc3QoWC5sYXllcnMpJiYocC5wdXNoTGlnaHQoJCksJC5jYXN0U2hhZG93JiZwLnB1c2hTaGFkb3coJCkpfSkscC5zZXR1cExpZ2h0cyhtLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxJLnRyYXZlcnNlKGZ1bmN0aW9uKCQpe2xldCBuZT0kLm1hdGVyaWFsO2lmKG5lKWlmKEFycmF5LmlzQXJyYXkobmUpKWZvcihsZXQgbWU9MDttZTxuZS5sZW5ndGg7bWUrKylleChuZVttZV0sSSwkKTtlbHNlIGV4KG5lLEksJCl9KSxmLnBvcCgpLHA9bnVsbH07bGV0IFplPW51bGw7ZnVuY3Rpb24gTWkoKXtFcy5zdG9wKCl9ZnVuY3Rpb24gVHIoKXtFcy5zdGFydCgpfWxldCBFcz1uZXcga2RlO2Z1bmN0aW9uIEJyKEksWCwkLG5lKXtpZighMT09PUkudmlzaWJsZSlyZXR1cm47aWYoSS5sYXllcnMudGVzdChYLmxheWVycykpaWYoSS5pc0dyb3VwKSQ9SS5yZW5kZXJPcmRlcjtlbHNlIGlmKEkuaXNMT0QpITA9PT1JLmF1dG9VcGRhdGUmJkkudXBkYXRlKFgpO2Vsc2UgaWYoSS5pc0xpZ2h0KXAucHVzaExpZ2h0KEkpLEkuY2FzdFNoYWRvdyYmcC5wdXNoU2hhZG93KEkpO2Vsc2UgaWYoSS5pc1Nwcml0ZSl7aWYoIUkuZnJ1c3R1bUN1bGxlZHx8YWUuaW50ZXJzZWN0c1Nwcml0ZShJKSl7bmUmJm50LnNldEZyb21NYXRyaXhQb3NpdGlvbihJLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRGUpO2xldCBsdD1obi51cGRhdGUoSSksSmU9SS5tYXRlcmlhbDtKZS52aXNpYmxlJiZkLnB1c2goSSxsdCxKZSwkLG50LnosbnVsbCl9fWVsc2UgaWYoKEkuaXNNZXNofHxJLmlzTGluZXx8SS5pc1BvaW50cykmJihJLmlzU2tpbm5lZE1lc2gmJkkuc2tlbGV0b24uZnJhbWUhPT14dC5yZW5kZXIuZnJhbWUmJihJLnNrZWxldG9uLnVwZGF0ZSgpLEkuc2tlbGV0b24uZnJhbWU9eHQucmVuZGVyLmZyYW1lKSwhSS5mcnVzdHVtQ3VsbGVkfHxhZS5pbnRlcnNlY3RzT2JqZWN0KEkpKSl7bmUmJm50LnNldEZyb21NYXRyaXhQb3NpdGlvbihJLm1hdHJpeFdvcmxkKS5hcHBseU1hdHJpeDQoRGUpO2xldCBsdD1obi51cGRhdGUoSSksSmU9SS5tYXRlcmlhbDtpZihBcnJheS5pc0FycmF5KEplKSl7bGV0IGZ0PWx0Lmdyb3Vwcztmb3IobGV0IEN0PTAsSXQ9ZnQubGVuZ3RoO0N0PEl0O0N0Kyspe2xldCBOdD1mdFtDdF0sYm49SmVbTnQubWF0ZXJpYWxJbmRleF07Ym4mJmJuLnZpc2libGUmJmQucHVzaChJLGx0LGJuLCQsbnQueixOdCl9fWVsc2UgSmUudmlzaWJsZSYmZC5wdXNoKEksbHQsSmUsJCxudC56LG51bGwpfWxldCBLZT1JLmNoaWxkcmVuO2ZvcihsZXQgbHQ9MCxKZT1LZS5sZW5ndGg7bHQ8SmU7bHQrKylCcihLZVtsdF0sWCwkLG5lKX1mdW5jdGlvbiBQbChJLFgsJCxuZSl7bGV0IG1lPUkub3BhcXVlLEtlPUkudHJhbnNtaXNzaXZlLGx0PUkudHJhbnNwYXJlbnQ7cC5zZXR1cExpZ2h0c1ZpZXcoJCksS2UubGVuZ3RoPjAmJmZ1bmN0aW9uKEksWCwkKXtudWxsPT09dmUmJih2ZT1uZXcoITA9PT1zJiYhMD09PXd0LmlzV2ViR0wyP1hTOldhKSgxMDI0LDEwMjQse2dlbmVyYXRlTWlwbWFwczohMCx0eXBlOm51bGwhPT13bi5jb252ZXJ0KGxiKT9sYjpfZixtaW5GaWx0ZXI6MTAwOCxtYWdGaWx0ZXI6Wm8sd3JhcFM6RWwsd3JhcFQ6RWwsdXNlUmVuZGVyVG9UZXh0dXJlOnB0LmhhcygiV0VCR0xfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIil9KSk7bGV0IG5lPW0uZ2V0UmVuZGVyVGFyZ2V0KCk7bS5zZXRSZW5kZXJUYXJnZXQodmUpLG0uY2xlYXIoKTtsZXQgbWU9bS50b25lTWFwcGluZzttLnRvbmVNYXBwaW5nPTAsYmMoSSxYLCQpLG0udG9uZU1hcHBpbmc9bWUsY2UudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQodmUpLGNlLnVwZGF0ZVJlbmRlclRhcmdldE1pcG1hcCh2ZSksbS5zZXRSZW5kZXJUYXJnZXQobmUpfShtZSxYLCQpLG5lJiZUZS52aWV3cG9ydChaLmNvcHkobmUpKSxtZS5sZW5ndGg+MCYmYmMobWUsWCwkKSxLZS5sZW5ndGg+MCYmYmMoS2UsWCwkKSxsdC5sZW5ndGg+MCYmYmMobHQsWCwkKX1mdW5jdGlvbiBiYyhJLFgsJCl7bGV0IG5lPSEwPT09WC5pc1NjZW5lP1gub3ZlcnJpZGVNYXRlcmlhbDpudWxsO2ZvcihsZXQgbWU9MCxLZT1JLmxlbmd0aDttZTxLZTttZSsrKXtsZXQgbHQ9SVttZV0sSmU9bHQub2JqZWN0LGZ0PWx0Lmdlb21ldHJ5LEN0PW51bGw9PT1uZT9sdC5tYXRlcmlhbDpuZSxJdD1sdC5ncm91cDtKZS5sYXllcnMudGVzdCgkLmxheWVycykmJmlOKEplLFgsJCxmdCxDdCxJdCl9fWZ1bmN0aW9uIGlOKEksWCwkLG5lLG1lLEtlKXtJLm9uQmVmb3JlUmVuZGVyKG0sWCwkLG5lLG1lLEtlKSxJLm1vZGVsVmlld01hdHJpeC5tdWx0aXBseU1hdHJpY2VzKCQubWF0cml4V29ybGRJbnZlcnNlLEkubWF0cml4V29ybGQpLEkubm9ybWFsTWF0cml4LmdldE5vcm1hbE1hdHJpeChJLm1vZGVsVmlld01hdHJpeCksbWUub25CZWZvcmVSZW5kZXIobSxYLCQsbmUsSSxLZSksITA9PT1tZS50cmFuc3BhcmVudCYmMj09PW1lLnNpZGU/KG1lLnNpZGU9MSxtZS5uZWVkc1VwZGF0ZT0hMCxtLnJlbmRlckJ1ZmZlckRpcmVjdCgkLFgsbmUsbWUsSSxLZSksbWUuc2lkZT0wLG1lLm5lZWRzVXBkYXRlPSEwLG0ucmVuZGVyQnVmZmVyRGlyZWN0KCQsWCxuZSxtZSxJLEtlKSxtZS5zaWRlPTIpOm0ucmVuZGVyQnVmZmVyRGlyZWN0KCQsWCxuZSxtZSxJLEtlKSxJLm9uQWZ0ZXJSZW5kZXIobSxYLCQsbmUsbWUsS2UpfWZ1bmN0aW9uIGV4KEksWCwkKXshMCE9PVguaXNTY2VuZSYmKFg9Z3QpO2xldCBuZT1tdC5nZXQoSSksbWU9cC5zdGF0ZS5saWdodHMsbHQ9bWUuc3RhdGUudmVyc2lvbixKZT1vbi5nZXRQYXJhbWV0ZXJzKEksbWUuc3RhdGUscC5zdGF0ZS5zaGFkb3dzQXJyYXksWCwkKSxmdD1vbi5nZXRQcm9ncmFtQ2FjaGVLZXkoSmUpLEN0PW5lLnByb2dyYW1zO25lLmVudmlyb25tZW50PUkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbD9YLmVudmlyb25tZW50Om51bGwsbmUuZm9nPVguZm9nLG5lLmVudk1hcD0oSS5pc01lc2hTdGFuZGFyZE1hdGVyaWFsP1dlOmR0KS5nZXQoSS5lbnZNYXB8fG5lLmVudmlyb25tZW50KSx2b2lkIDA9PT1DdCYmKEkuYWRkRXZlbnRMaXN0ZW5lcigiZGlzcG9zZSIsZm4pLEN0PW5ldyBNYXAsbmUucHJvZ3JhbXM9Q3QpO2xldCBJdD1DdC5nZXQoZnQpO2lmKHZvaWQgMCE9PUl0KXtpZihuZS5jdXJyZW50UHJvZ3JhbT09PUl0JiZuZS5saWdodHNTdGF0ZVZlcnNpb249PT1sdClyZXR1cm4gRkUoSSxKZSksSXR9ZWxzZSBKZS51bmlmb3Jtcz1vbi5nZXRVbmlmb3JtcyhJKSxJLm9uQnVpbGQoJCxKZSxtKSxJLm9uQmVmb3JlQ29tcGlsZShKZSxtKSxJdD1vbi5hY3F1aXJlUHJvZ3JhbShKZSxmdCksQ3Quc2V0KGZ0LEl0KSxuZS51bmlmb3Jtcz1KZS51bmlmb3JtcztsZXQgTnQ9bmUudW5pZm9ybXM7KCFJLmlzU2hhZGVyTWF0ZXJpYWwmJiFJLmlzUmF3U2hhZGVyTWF0ZXJpYWx8fCEwPT09SS5jbGlwcGluZykmJihOdC5jbGlwcGluZ1BsYW5lcz1lZS51bmlmb3JtKSxGRShJLEplKSxuZS5uZWVkc0xpZ2h0cz1mdW5jdGlvbihJKXtyZXR1cm4gSS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWx8fEkuaXNNZXNoVG9vbk1hdGVyaWFsfHxJLmlzTWVzaFBob25nTWF0ZXJpYWx8fEkuaXNNZXNoU3RhbmRhcmRNYXRlcmlhbHx8SS5pc1NoYWRvd01hdGVyaWFsfHxJLmlzU2hhZGVyTWF0ZXJpYWwmJiEwPT09SS5saWdodHN9KEkpLG5lLmxpZ2h0c1N0YXRlVmVyc2lvbj1sdCxuZS5uZWVkc0xpZ2h0cyYmKE50LmFtYmllbnRMaWdodENvbG9yLnZhbHVlPW1lLnN0YXRlLmFtYmllbnQsTnQubGlnaHRQcm9iZS52YWx1ZT1tZS5zdGF0ZS5wcm9iZSxOdC5kaXJlY3Rpb25hbExpZ2h0cy52YWx1ZT1tZS5zdGF0ZS5kaXJlY3Rpb25hbCxOdC5kaXJlY3Rpb25hbExpZ2h0U2hhZG93cy52YWx1ZT1tZS5zdGF0ZS5kaXJlY3Rpb25hbFNoYWRvdyxOdC5zcG90TGlnaHRzLnZhbHVlPW1lLnN0YXRlLnNwb3QsTnQuc3BvdExpZ2h0U2hhZG93cy52YWx1ZT1tZS5zdGF0ZS5zcG90U2hhZG93LE50LnJlY3RBcmVhTGlnaHRzLnZhbHVlPW1lLnN0YXRlLnJlY3RBcmVhLE50Lmx0Y18xLnZhbHVlPW1lLnN0YXRlLnJlY3RBcmVhTFRDMSxOdC5sdGNfMi52YWx1ZT1tZS5zdGF0ZS5yZWN0QXJlYUxUQzIsTnQucG9pbnRMaWdodHMudmFsdWU9bWUuc3RhdGUucG9pbnQsTnQucG9pbnRMaWdodFNoYWRvd3MudmFsdWU9bWUuc3RhdGUucG9pbnRTaGFkb3csTnQuaGVtaXNwaGVyZUxpZ2h0cy52YWx1ZT1tZS5zdGF0ZS5oZW1pLE50LmRpcmVjdGlvbmFsU2hhZG93TWFwLnZhbHVlPW1lLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWFwLE50LmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LnZhbHVlPW1lLnN0YXRlLmRpcmVjdGlvbmFsU2hhZG93TWF0cml4LE50LnNwb3RTaGFkb3dNYXAudmFsdWU9bWUuc3RhdGUuc3BvdFNoYWRvd01hcCxOdC5zcG90U2hhZG93TWF0cml4LnZhbHVlPW1lLnN0YXRlLnNwb3RTaGFkb3dNYXRyaXgsTnQucG9pbnRTaGFkb3dNYXAudmFsdWU9bWUuc3RhdGUucG9pbnRTaGFkb3dNYXAsTnQucG9pbnRTaGFkb3dNYXRyaXgudmFsdWU9bWUuc3RhdGUucG9pbnRTaGFkb3dNYXRyaXgpO2xldCBibj1JdC5nZXRVbmlmb3JtcygpLHJyPXlmLnNlcVdpdGhWYWx1ZShibi5zZXEsTnQpO3JldHVybiBuZS5jdXJyZW50UHJvZ3JhbT1JdCxuZS51bmlmb3Jtc0xpc3Q9cnIsSXR9ZnVuY3Rpb24gRkUoSSxYKXtsZXQgJD1tdC5nZXQoSSk7JC5vdXRwdXRFbmNvZGluZz1YLm91dHB1dEVuY29kaW5nLCQuaW5zdGFuY2luZz1YLmluc3RhbmNpbmcsJC5za2lubmluZz1YLnNraW5uaW5nLCQubW9ycGhUYXJnZXRzPVgubW9ycGhUYXJnZXRzLCQubW9ycGhOb3JtYWxzPVgubW9ycGhOb3JtYWxzLCQubW9ycGhUYXJnZXRzQ291bnQ9WC5tb3JwaFRhcmdldHNDb3VudCwkLm51bUNsaXBwaW5nUGxhbmVzPVgubnVtQ2xpcHBpbmdQbGFuZXMsJC5udW1JbnRlcnNlY3Rpb249WC5udW1DbGlwSW50ZXJzZWN0aW9uLCQudmVydGV4QWxwaGFzPVgudmVydGV4QWxwaGFzLCQudmVydGV4VGFuZ2VudHM9WC52ZXJ0ZXhUYW5nZW50cywkLnRvbmVNYXBwaW5nPVgudG9uZU1hcHBpbmd9RXMuc2V0QW5pbWF0aW9uTG9vcChmdW5jdGlvbihJKXtaZSYmWmUoSSl9KSx0eXBlb2Ygd2luZG93PCJ1IiYmRXMuc2V0Q29udGV4dCh3aW5kb3cpLHRoaXMuc2V0QW5pbWF0aW9uTG9vcD1mdW5jdGlvbihJKXtaZT1JLFV0LnNldEFuaW1hdGlvbkxvb3AoSSksbnVsbD09PUk/RXMuc3RvcCgpOkVzLnN0YXJ0KCl9LFV0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25zdGFydCIsTWkpLFV0LmFkZEV2ZW50TGlzdGVuZXIoInNlc3Npb25lbmQiLFRyKSx0aGlzLnJlbmRlcj1mdW5jdGlvbihJLFgpe2lmKHZvaWQgMD09PVh8fCEwPT09WC5pc0NhbWVyYSl7aWYoITAhPT14KXtpZighMD09PUkuYXV0b1VwZGF0ZSYmSS51cGRhdGVNYXRyaXhXb3JsZCgpLG51bGw9PT1YLnBhcmVudCYmWC51cGRhdGVNYXRyaXhXb3JsZCgpLCEwPT09VXQuZW5hYmxlZCYmITA9PT1VdC5pc1ByZXNlbnRpbmcmJighMD09PVV0LmNhbWVyYUF1dG9VcGRhdGUmJlV0LnVwZGF0ZUNhbWVyYShYKSxYPVV0LmdldENhbWVyYSgpKSwhMD09PUkuaXNTY2VuZSYmSS5vbkJlZm9yZVJlbmRlcihtLEksWCxEKSxwPXFpLmdldChJLGYubGVuZ3RoKSxwLmluaXQoKSxmLnB1c2gocCksRGUubXVsdGlwbHlNYXRyaWNlcyhYLnByb2plY3Rpb25NYXRyaXgsWC5tYXRyaXhXb3JsZEludmVyc2UpLGFlLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KERlKSxJZT10aGlzLmxvY2FsQ2xpcHBpbmdFbmFibGVkLGxlPWVlLmluaXQodGhpcy5jbGlwcGluZ1BsYW5lcyxJZSxYKSxkPVdpLmdldChJLGgubGVuZ3RoKSxkLmluaXQoKSxoLnB1c2goZCksQnIoSSxYLDAsbS5zb3J0T2JqZWN0cyksZC5maW5pc2goKSwhMD09PW0uc29ydE9iamVjdHMmJmQuc29ydChGLHEpLCEwPT09bGUmJmVlLmJlZ2luU2hhZG93cygpLFcucmVuZGVyKHAuc3RhdGUuc2hhZG93c0FycmF5LEksWCksITA9PT1sZSYmZWUuZW5kU2hhZG93cygpLCEwPT09dGhpcy5pbmZvLmF1dG9SZXNldCYmdGhpcy5pbmZvLnJlc2V0KCksWGUucmVuZGVyKGQsSSkscC5zZXR1cExpZ2h0cyhtLnBoeXNpY2FsbHlDb3JyZWN0TGlnaHRzKSxYLmlzQXJyYXlDYW1lcmEpe2xldCBuZT1YLmNhbWVyYXM7Zm9yKGxldCBtZT0wLEtlPW5lLmxlbmd0aDttZTxLZTttZSsrKXtsZXQgbHQ9bmVbbWVdO1BsKGQsSSxsdCxsdC52aWV3cG9ydCl9fWVsc2UgUGwoZCxJLFgpO251bGwhPT1EJiYoY2UudXBkYXRlTXVsdGlzYW1wbGVSZW5kZXJUYXJnZXQoRCksY2UudXBkYXRlUmVuZGVyVGFyZ2V0TWlwbWFwKEQpKSwhMD09PUkuaXNTY2VuZSYmSS5vbkFmdGVyUmVuZGVyKG0sSSxYKSxUZS5idWZmZXJzLmRlcHRoLnNldFRlc3QoITApLFRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayghMCksVGUuYnVmZmVycy5jb2xvci5zZXRNYXNrKCEwKSxUZS5zZXRQb2x5Z29uT2Zmc2V0KCExKSx5bi5yZXNldERlZmF1bHRTdGF0ZSgpLFQ9LTEsaz1udWxsLGYucG9wKCkscD1mLmxlbmd0aD4wP2ZbZi5sZW5ndGgtMV06bnVsbCxoLnBvcCgpLGQ9aC5sZW5ndGg+MD9oW2gubGVuZ3RoLTFdOm51bGx9fWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZW5kZXI6IGNhbWVyYSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVEhSRUUuQ2FtZXJhLiIpfSx0aGlzLmdldEFjdGl2ZUN1YmVGYWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGd9LHRoaXMuZ2V0QWN0aXZlTWlwbWFwTGV2ZWw9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sdGhpcy5nZXRSZW5kZXJUYXJnZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gRH0sdGhpcy5zZXRSZW5kZXJUYXJnZXRUZXh0dXJlcz1mdW5jdGlvbihJLFgsJCl7bXQuZ2V0KEkudGV4dHVyZSkuX193ZWJnbFRleHR1cmU9WCxtdC5nZXQoSS5kZXB0aFRleHR1cmUpLl9fd2ViZ2xUZXh0dXJlPSQ7bGV0IG5lPW10LmdldChJKTtuZS5fX2hhc0V4dGVybmFsVGV4dHVyZXM9ITAsbmUuX19oYXNFeHRlcm5hbFRleHR1cmVzJiYobmUuX19hdXRvQWxsb2NhdGVEZXB0aEJ1ZmZlcj12b2lkIDA9PT0kLG5lLl9fYXV0b0FsbG9jYXRlRGVwdGhCdWZmZXJ8fEkudXNlUmVuZGVyVG9UZXh0dXJlJiYoY29uc29sZS53YXJuKCJyZW5kZXItdG8tdGV4dHVyZSBleHRlbnNpb24gd2FzIGRpc2FibGVkIGJlY2F1c2UgYW4gZXh0ZXJuYWwgdGV4dHVyZSB3YXMgcHJvdmlkZWQiKSxJLnVzZVJlbmRlclRvVGV4dHVyZT0hMSxJLnVzZVJlbmRlcmJ1ZmZlcj0hMCkpfSx0aGlzLnNldFJlbmRlclRhcmdldEZyYW1lYnVmZmVyPWZ1bmN0aW9uKEksWCl7bGV0ICQ9bXQuZ2V0KEkpOyQuX193ZWJnbEZyYW1lYnVmZmVyPVgsJC5fX3VzZURlZmF1bHRGcmFtZWJ1ZmZlcj12b2lkIDA9PT1YfSx0aGlzLnNldFJlbmRlclRhcmdldD1mdW5jdGlvbihJLFg9MCwkPTApe0Q9SSxnPVgsYj0kO2xldCBuZT0hMDtpZihJKXtsZXQgZnQ9bXQuZ2V0KEkpO3ZvaWQgMCE9PWZ0Ll9fdXNlRGVmYXVsdEZyYW1lYnVmZmVyPyhUZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbnVsbCksbmU9ITEpOnZvaWQgMD09PWZ0Ll9fd2ViZ2xGcmFtZWJ1ZmZlcj9jZS5zZXR1cFJlbmRlclRhcmdldChJKTpmdC5fX2hhc0V4dGVybmFsVGV4dHVyZXMmJmNlLnJlYmluZFRleHR1cmVzKEksbXQuZ2V0KEkudGV4dHVyZSkuX193ZWJnbFRleHR1cmUsbXQuZ2V0KEkuZGVwdGhUZXh0dXJlKS5fX3dlYmdsVGV4dHVyZSl9bGV0IG1lPW51bGwsS2U9ITEsbHQ9ITE7aWYoSSl7bGV0IGZ0PUkudGV4dHVyZTsoZnQuaXNEYXRhVGV4dHVyZTNEfHxmdC5pc0RhdGFUZXh0dXJlMkRBcnJheSkmJihsdD0hMCk7bGV0IEN0PW10LmdldChJKS5fX3dlYmdsRnJhbWVidWZmZXI7SS5pc1dlYkdMQ3ViZVJlbmRlclRhcmdldD8obWU9Q3RbWF0sS2U9ITApOm1lPUkudXNlUmVuZGVyYnVmZmVyP210LmdldChJKS5fX3dlYmdsTXVsdGlzYW1wbGVkRnJhbWVidWZmZXI6Q3QsWi5jb3B5KEkudmlld3BvcnQpLHouY29weShJLnNjaXNzb3IpLGZlPUkuc2Npc3NvclRlc3R9ZWxzZSBaLmNvcHkoSykubXVsdGlwbHlTY2FsYXIodykuZmxvb3IoKSx6LmNvcHkoZGUpLm11bHRpcGx5U2NhbGFyKHcpLmZsb29yKCksZmU9WTtpZihUZS5iaW5kRnJhbWVidWZmZXIoMzYxNjAsbWUpJiZ3dC5kcmF3QnVmZmVycyYmbmUmJlRlLmRyYXdCdWZmZXJzKEksbWUpLFRlLnZpZXdwb3J0KFopLFRlLnNjaXNzb3IoeiksVGUuc2V0U2Npc3NvclRlc3QoZmUpLEtlKXtsZXQgZnQ9bXQuZ2V0KEkudGV4dHVyZSk7QWUuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwNjQsMzQwNjkrWCxmdC5fX3dlYmdsVGV4dHVyZSwkKX1lbHNlIGlmKGx0KXtsZXQgZnQ9bXQuZ2V0KEkudGV4dHVyZSk7QWUuZnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoMzYxNjAsMzYwNjQsZnQuX193ZWJnbFRleHR1cmUsJHx8MCxYfHwwKX1UPS0xfSx0aGlzLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM9ZnVuY3Rpb24oSSxYLCQsbmUsbWUsS2UsbHQpe2lmKCFJfHwhSS5pc1dlYkdMUmVuZGVyVGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBUSFJFRS5XZWJHTFJlbmRlclRhcmdldC4iKTtsZXQgSmU9bXQuZ2V0KEkpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjtpZihJLmlzV2ViR0xDdWJlUmVuZGVyVGFyZ2V0JiZ2b2lkIDAhPT1sdCYmKEplPUplW2x0XSksSmUpe1RlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxKZSk7dHJ5e2xldCBmdD1JLnRleHR1cmUsQ3Q9ZnQuZm9ybWF0LEl0PWZ0LnR5cGU7aWYoQ3QhPT1nYSYmd24uY29udmVydChDdCkhPT1BZS5nZXRQYXJhbWV0ZXIoMzU3MzkpKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXIucmVhZFJlbmRlclRhcmdldFBpeGVsczogcmVuZGVyVGFyZ2V0IGlzIG5vdCBpbiBSR0JBIG9yIGltcGxlbWVudGF0aW9uIGRlZmluZWQgZm9ybWF0LiIpO2xldCBOdD1JdD09PWxiJiYocHQuaGFzKCJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKXx8d3QuaXNXZWJHTDImJnB0LmhhcygiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpKTtpZighKEl0PT09X2Z8fHduLmNvbnZlcnQoSXQpPT09QWUuZ2V0UGFyYW1ldGVyKDM1NzM4KXx8SXQ9PT1VZyYmKHd0LmlzV2ViR0wyfHxwdC5oYXMoIk9FU190ZXh0dXJlX2Zsb2F0Iil8fHB0LmhhcygiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IikpfHxOdCkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuV2ViR0xSZW5kZXJlci5yZWFkUmVuZGVyVGFyZ2V0UGl4ZWxzOiByZW5kZXJUYXJnZXQgaXMgbm90IGluIFVuc2lnbmVkQnl0ZVR5cGUgb3IgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0eXBlLiIpOzM2MDUzPT09QWUuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCk/WD49MCYmWDw9SS53aWR0aC1uZSYmJD49MCYmJDw9SS5oZWlnaHQtbWUmJkFlLnJlYWRQaXhlbHMoWCwkLG5lLG1lLHduLmNvbnZlcnQoQ3QpLHduLmNvbnZlcnQoSXQpLEtlKTpjb25zb2xlLmVycm9yKCJUSFJFRS5XZWJHTFJlbmRlcmVyLnJlYWRSZW5kZXJUYXJnZXRQaXhlbHM6IHJlYWRQaXhlbHMgZnJvbSByZW5kZXJUYXJnZXQgZmFpbGVkLiBGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUuIil9ZmluYWxseXtsZXQgZnQ9bnVsbCE9PUQ/bXQuZ2V0KEQpLl9fd2ViZ2xGcmFtZWJ1ZmZlcjpudWxsO1RlLmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxmdCl9fX0sdGhpcy5jb3B5RnJhbWVidWZmZXJUb1RleHR1cmU9ZnVuY3Rpb24oSSxYLCQ9MCl7aWYoITAhPT1YLmlzRnJhbWVidWZmZXJUZXh0dXJlKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLldlYkdMUmVuZGVyZXI6IGNvcHlGcmFtZWJ1ZmZlclRvVGV4dHVyZSgpIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBGcmFtZWJ1ZmZlclRleHR1cmUuIik7bGV0IG5lPU1hdGgucG93KDIsLSQpLG1lPU1hdGguZmxvb3IoWC5pbWFnZS53aWR0aCpuZSksS2U9TWF0aC5mbG9vcihYLmltYWdlLmhlaWdodCpuZSk7Y2Uuc2V0VGV4dHVyZTJEKFgsMCksQWUuY29weVRleFN1YkltYWdlMkQoMzU1MywkLDAsMCxJLngsSS55LG1lLEtlKSxUZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuY29weVRleHR1cmVUb1RleHR1cmU9ZnVuY3Rpb24oSSxYLCQsbmU9MCl7bGV0IG1lPVguaW1hZ2Uud2lkdGgsS2U9WC5pbWFnZS5oZWlnaHQsbHQ9d24uY29udmVydCgkLmZvcm1hdCksSmU9d24uY29udmVydCgkLnR5cGUpO2NlLnNldFRleHR1cmUyRCgkLDApLEFlLnBpeGVsU3RvcmVpKDM3NDQwLCQuZmxpcFkpLEFlLnBpeGVsU3RvcmVpKDM3NDQxLCQucHJlbXVsdGlwbHlBbHBoYSksQWUucGl4ZWxTdG9yZWkoMzMxNywkLnVucGFja0FsaWdubWVudCksWC5pc0RhdGFUZXh0dXJlP0FlLnRleFN1YkltYWdlMkQoMzU1MyxuZSxJLngsSS55LG1lLEtlLGx0LEplLFguaW1hZ2UuZGF0YSk6WC5pc0NvbXByZXNzZWRUZXh0dXJlP0FlLmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKDM1NTMsbmUsSS54LEkueSxYLm1pcG1hcHNbMF0ud2lkdGgsWC5taXBtYXBzWzBdLmhlaWdodCxsdCxYLm1pcG1hcHNbMF0uZGF0YSk6QWUudGV4U3ViSW1hZ2UyRCgzNTUzLG5lLEkueCxJLnksbHQsSmUsWC5pbWFnZSksMD09PW5lJiYkLmdlbmVyYXRlTWlwbWFwcyYmQWUuZ2VuZXJhdGVNaXBtYXAoMzU1MyksVGUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLmNvcHlUZXh0dXJlVG9UZXh0dXJlM0Q9ZnVuY3Rpb24oSSxYLCQsbmUsbWU9MCl7aWYobS5pc1dlYkdMMVJlbmRlcmVyKXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBjYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wyLiIpO2xldCBJdCxLZT1JLm1heC54LUkubWluLngrMSxsdD1JLm1heC55LUkubWluLnkrMSxKZT1JLm1heC56LUkubWluLnorMSxmdD13bi5jb252ZXJ0KG5lLmZvcm1hdCksQ3Q9d24uY29udmVydChuZS50eXBlKTtpZihuZS5pc0RhdGFUZXh0dXJlM0QpY2Uuc2V0VGV4dHVyZTNEKG5lLDApLEl0PTMyODc5O2Vsc2V7aWYoIW5lLmlzRGF0YVRleHR1cmUyREFycmF5KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiBvbmx5IHN1cHBvcnRzIFRIUkVFLkRhdGFUZXh0dXJlM0QgYW5kIFRIUkVFLkRhdGFUZXh0dXJlMkRBcnJheS4iKTtjZS5zZXRUZXh0dXJlMkRBcnJheShuZSwwKSxJdD0zNTg2Nn1BZS5waXhlbFN0b3JlaSgzNzQ0MCxuZS5mbGlwWSksQWUucGl4ZWxTdG9yZWkoMzc0NDEsbmUucHJlbXVsdGlwbHlBbHBoYSksQWUucGl4ZWxTdG9yZWkoMzMxNyxuZS51bnBhY2tBbGlnbm1lbnQpO2xldCBOdD1BZS5nZXRQYXJhbWV0ZXIoMzMxNCksYm49QWUuZ2V0UGFyYW1ldGVyKDMyODc4KSxycj1BZS5nZXRQYXJhbWV0ZXIoMzMxNiksQWk9QWUuZ2V0UGFyYW1ldGVyKDMzMTUpLE1uPUFlLmdldFBhcmFtZXRlcigzMjg3NyksSG49JC5pc0NvbXByZXNzZWRUZXh0dXJlPyQubWlwbWFwc1swXTokLmltYWdlO0FlLnBpeGVsU3RvcmVpKDMzMTQsSG4ud2lkdGgpLEFlLnBpeGVsU3RvcmVpKDMyODc4LEhuLmhlaWdodCksQWUucGl4ZWxTdG9yZWkoMzMxNixJLm1pbi54KSxBZS5waXhlbFN0b3JlaSgzMzE1LEkubWluLnkpLEFlLnBpeGVsU3RvcmVpKDMyODc3LEkubWluLnopLCQuaXNEYXRhVGV4dHVyZXx8JC5pc0RhdGFUZXh0dXJlM0Q/QWUudGV4U3ViSW1hZ2UzRChJdCxtZSxYLngsWC55LFgueixLZSxsdCxKZSxmdCxDdCxIbi5kYXRhKTokLmlzQ29tcHJlc3NlZFRleHR1cmU/KGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlci5jb3B5VGV4dHVyZVRvVGV4dHVyZTNEOiB1bnRlc3RlZCBzdXBwb3J0IGZvciBjb21wcmVzc2VkIHNyY1RleHR1cmUuIiksQWUuY29tcHJlc3NlZFRleFN1YkltYWdlM0QoSXQsbWUsWC54LFgueSxYLnosS2UsbHQsSmUsZnQsSG4uZGF0YSkpOkFlLnRleFN1YkltYWdlM0QoSXQsbWUsWC54LFgueSxYLnosS2UsbHQsSmUsZnQsQ3QsSG4pLEFlLnBpeGVsU3RvcmVpKDMzMTQsTnQpLEFlLnBpeGVsU3RvcmVpKDMyODc4LGJuKSxBZS5waXhlbFN0b3JlaSgzMzE2LHJyKSxBZS5waXhlbFN0b3JlaSgzMzE1LEFpKSxBZS5waXhlbFN0b3JlaSgzMjg3NyxNbiksMD09PW1lJiZuZS5nZW5lcmF0ZU1pcG1hcHMmJkFlLmdlbmVyYXRlTWlwbWFwKEl0KSxUZS51bmJpbmRUZXh0dXJlKCl9LHRoaXMuaW5pdFRleHR1cmU9ZnVuY3Rpb24oSSl7Y2Uuc2V0VGV4dHVyZTJEKEksMCksVGUudW5iaW5kVGV4dHVyZSgpfSx0aGlzLnJlc2V0U3RhdGU9ZnVuY3Rpb24oKXtnPTAsYj0wLEQ9bnVsbCxUZS5yZXNldCgpLHluLnJlc2V0KCl9LHR5cGVvZiBfX1RIUkVFX0RFVlRPT0xTX188InUiJiZfX1RIUkVFX0RFVlRPT0xTX18uZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIm9ic2VydmUiLHtkZXRhaWw6dGhpc30pKX1pci5wcm90b3R5cGUuaXNXZWJHTFJlbmRlcmVyPSEwLGNsYXNzIGV4dGVuZHMgaXJ7fS5wcm90b3R5cGUuaXNXZWJHTDFSZW5kZXJlcj0hMDt2YXIgZUU9Y2xhc3N7Y29uc3RydWN0b3IodCxlPTI1ZS01KXt0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj1uZXcgdm4odCksdGhpcy5kZW5zaXR5PWV9Y2xvbmUoKXtyZXR1cm4gbmV3IGVFKHRoaXMuY29sb3IsdGhpcy5kZW5zaXR5KX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nRXhwMiIsY29sb3I6dGhpcy5jb2xvci5nZXRIZXgoKSxkZW5zaXR5OnRoaXMuZGVuc2l0eX19fTtlRS5wcm90b3R5cGUuaXNGb2dFeHAyPSEwO3ZhciB0RT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGU9MSxpPTFlMyl7dGhpcy5uYW1lPSIiLHRoaXMuY29sb3I9bmV3IHZuKHQpLHRoaXMubmVhcj1lLHRoaXMuZmFyPWl9Y2xvbmUoKXtyZXR1cm4gbmV3IHRFKHRoaXMuY29sb3IsdGhpcy5uZWFyLHRoaXMuZmFyKX10b0pTT04oKXtyZXR1cm57dHlwZToiRm9nIixjb2xvcjp0aGlzLmNvbG9yLmdldEhleCgpLG5lYXI6dGhpcy5uZWFyLGZhcjp0aGlzLmZhcn19fTt0RS5wcm90b3R5cGUuaXNGb2c9ITA7dmFyIHZiPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMudHlwZT0iU2NlbmUiLHRoaXMuYmFja2dyb3VuZD1udWxsLHRoaXMuZW52aXJvbm1lbnQ9bnVsbCx0aGlzLmZvZz1udWxsLHRoaXMub3ZlcnJpZGVNYXRlcmlhbD1udWxsLHRoaXMuYXV0b1VwZGF0ZT0hMCx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJvYnNlcnZlIix7ZGV0YWlsOnRoaXN9KSl9Y29weSh0LGUpe3JldHVybiBzdXBlci5jb3B5KHQsZSksbnVsbCE9PXQuYmFja2dyb3VuZCYmKHRoaXMuYmFja2dyb3VuZD10LmJhY2tncm91bmQuY2xvbmUoKSksbnVsbCE9PXQuZW52aXJvbm1lbnQmJih0aGlzLmVudmlyb25tZW50PXQuZW52aXJvbm1lbnQuY2xvbmUoKSksbnVsbCE9PXQuZm9nJiYodGhpcy5mb2c9dC5mb2cuY2xvbmUoKSksbnVsbCE9PXQub3ZlcnJpZGVNYXRlcmlhbCYmKHRoaXMub3ZlcnJpZGVNYXRlcmlhbD10Lm92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKSksdGhpcy5hdXRvVXBkYXRlPXQuYXV0b1VwZGF0ZSx0aGlzLm1hdHJpeEF1dG9VcGRhdGU9dC5tYXRyaXhBdXRvVXBkYXRlLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gbnVsbCE9PXRoaXMuZm9nJiYoZS5vYmplY3QuZm9nPXRoaXMuZm9nLnRvSlNPTigpKSxlfX07dmIucHJvdG90eXBlLmlzU2NlbmU9ITA7dmFyIFlnPWNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5hcnJheT10LHRoaXMuc3RyaWRlPWUsdGhpcy5jb3VudD12b2lkIDAhPT10P3QubGVuZ3RoL2U6MCx0aGlzLnVzYWdlPXFTLHRoaXMudXBkYXRlUmFuZ2U9e29mZnNldDowLGNvdW50Oi0xfSx0aGlzLnZlcnNpb249MCx0aGlzLnV1aWQ9ZHUoKX1vblVwbG9hZENhbGxiYWNrKCl7fXNldCBuZWVkc1VwZGF0ZSh0KXshMD09PXQmJnRoaXMudmVyc2lvbisrfXNldFVzYWdlKHQpe3JldHVybiB0aGlzLnVzYWdlPXQsdGhpc31jb3B5KHQpe3JldHVybiB0aGlzLmFycmF5PW5ldyB0LmFycmF5LmNvbnN0cnVjdG9yKHQuYXJyYXkpLHRoaXMuY291bnQ9dC5jb3VudCx0aGlzLnN0cmlkZT10LnN0cmlkZSx0aGlzLnVzYWdlPXQudXNhZ2UsdGhpc31jb3B5QXQodCxlLGkpe3QqPXRoaXMuc3RyaWRlLGkqPWUuc3RyaWRlO2ZvcihsZXQgcj0wLG89dGhpcy5zdHJpZGU7cjxvO3IrKyl0aGlzLmFycmF5W3Qrcl09ZS5hcnJheVtpK3JdO3JldHVybiB0aGlzfXNldCh0LGU9MCl7cmV0dXJuIHRoaXMuYXJyYXkuc2V0KHQsZSksdGhpc31jbG9uZSh0KXt2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPWR1KCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT10aGlzLmFycmF5LnNsaWNlKDApLmJ1ZmZlcik7bGV0IGU9bmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IodC5hcnJheUJ1ZmZlcnNbdGhpcy5hcnJheS5idWZmZXIuX3V1aWRdKSxpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUsdGhpcy5zdHJpZGUpO3JldHVybiBpLnNldFVzYWdlKHRoaXMudXNhZ2UpLGl9b25VcGxvYWQodCl7cmV0dXJuIHRoaXMub25VcGxvYWRDYWxsYmFjaz10LHRoaXN9dG9KU09OKHQpe3JldHVybiB2b2lkIDA9PT10LmFycmF5QnVmZmVycyYmKHQuYXJyYXlCdWZmZXJzPXt9KSx2b2lkIDA9PT10aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCYmKHRoaXMuYXJyYXkuYnVmZmVyLl91dWlkPWR1KCkpLHZvaWQgMD09PXQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXSYmKHQuYXJyYXlCdWZmZXJzW3RoaXMuYXJyYXkuYnVmZmVyLl91dWlkXT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuZXcgVWludDMyQXJyYXkodGhpcy5hcnJheS5idWZmZXIpKSkse3V1aWQ6dGhpcy51dWlkLGJ1ZmZlcjp0aGlzLmFycmF5LmJ1ZmZlci5fdXVpZCx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxzdHJpZGU6dGhpcy5zdHJpZGV9fX07WWcucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIENvPW5ldyBpZSxYZz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyPSExKXt0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPXQsdGhpcy5pdGVtU2l6ZT1lLHRoaXMub2Zmc2V0PWksdGhpcy5ub3JtYWxpemVkPSEwPT09cn1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kYXRhLmNvdW50fWdldCBhcnJheSgpe3JldHVybiB0aGlzLmRhdGEuYXJyYXl9c2V0IG5lZWRzVXBkYXRlKHQpe3RoaXMuZGF0YS5uZWVkc1VwZGF0ZT10fWFwcGx5TWF0cml4NCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuZGF0YS5jb3VudDtlPGk7ZSsrKUNvLng9dGhpcy5nZXRYKGUpLENvLnk9dGhpcy5nZXRZKGUpLENvLno9dGhpcy5nZXRaKGUpLENvLmFwcGx5TWF0cml4NCh0KSx0aGlzLnNldFhZWihlLENvLngsQ28ueSxDby56KTtyZXR1cm4gdGhpc31hcHBseU5vcm1hbE1hdHJpeCh0KXtmb3IobGV0IGU9MCxpPXRoaXMuY291bnQ7ZTxpO2UrKylDby54PXRoaXMuZ2V0WChlKSxDby55PXRoaXMuZ2V0WShlKSxDby56PXRoaXMuZ2V0WihlKSxDby5hcHBseU5vcm1hbE1hdHJpeCh0KSx0aGlzLnNldFhZWihlLENvLngsQ28ueSxDby56KTtyZXR1cm4gdGhpc310cmFuc2Zvcm1EaXJlY3Rpb24odCl7Zm9yKGxldCBlPTAsaT10aGlzLmNvdW50O2U8aTtlKyspQ28ueD10aGlzLmdldFgoZSksQ28ueT10aGlzLmdldFkoZSksQ28uej10aGlzLmdldFooZSksQ28udHJhbnNmb3JtRGlyZWN0aW9uKHQpLHRoaXMuc2V0WFlaKGUsQ28ueCxDby55LENvLnopO3JldHVybiB0aGlzfXNldFgodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldF09ZSx0aGlzfXNldFkodCxlKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsxXT1lLHRoaXN9c2V0Wih0LGUpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzJdPWUsdGhpc31zZXRXKHQsZSl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrM109ZSx0aGlzfWdldFgodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXRdfWdldFkodCl7cmV0dXJuIHRoaXMuZGF0YS5hcnJheVt0KnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQrMV19Z2V0Wih0KXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5W3QqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCsyXX1nZXRXKHQpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbdCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KzNdfXNldFhZKHQsZSxpKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXN9c2V0WFlaKHQsZSxpLHIpe3JldHVybiB0aGlzLmRhdGEuYXJyYXlbKHQ9dCp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0KSswXT1lLHRoaXMuZGF0YS5hcnJheVt0KzFdPWksdGhpcy5kYXRhLmFycmF5W3QrMl09cix0aGlzfXNldFhZWlcodCxlLGkscixvKXtyZXR1cm4gdGhpcy5kYXRhLmFycmF5Wyh0PXQqdGhpcy5kYXRhLnN0cmlkZSt0aGlzLm9mZnNldCkrMF09ZSx0aGlzLmRhdGEuYXJyYXlbdCsxXT1pLHRoaXMuZGF0YS5hcnJheVt0KzJdPXIsdGhpcy5kYXRhLmFycmF5W3QrM109byx0aGlzfWNsb25lKHQpe2lmKHZvaWQgMD09PXQpe2NvbnNvbGUubG9nKCJUSFJFRS5JbnRlcmxlYXZlZEJ1ZmZlckF0dHJpYnV0ZS5jbG9uZSgpOiBDbG9uaW5nIGFuIGludGVybGF2ZWQgYnVmZmVyIGF0dHJpYnV0ZSB3aWxsIGRlaW50ZXJsZWF2ZSBidWZmZXIgZGF0YS4iKTtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY291bnQ7aSsrKXtsZXQgcj1pKnRoaXMuZGF0YS5zdHJpZGUrdGhpcy5vZmZzZXQ7Zm9yKGxldCBvPTA7bzx0aGlzLml0ZW1TaXplO28rKyllLnB1c2godGhpcy5kYXRhLmFycmF5W3Irb10pfXJldHVybiBuZXcgWXIobmV3IHRoaXMuYXJyYXkuY29uc3RydWN0b3IoZSksdGhpcy5pdGVtU2l6ZSx0aGlzLm5vcm1hbGl6ZWQpfXJldHVybiB2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVycyYmKHQuaW50ZXJsZWF2ZWRCdWZmZXJzPXt9KSx2b2lkIDA9PT10LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF0mJih0LmludGVybGVhdmVkQnVmZmVyc1t0aGlzLmRhdGEudXVpZF09dGhpcy5kYXRhLmNsb25lKHQpKSxuZXcgWGcodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdLHRoaXMuaXRlbVNpemUsdGhpcy5vZmZzZXQsdGhpcy5ub3JtYWxpemVkKX10b0pTT04odCl7aWYodm9pZCAwPT09dCl7Y29uc29sZS5sb2coIlRIUkVFLkludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlLnRvSlNPTigpOiBTZXJpYWxpemluZyBhbiBpbnRlcmxhdmVkIGJ1ZmZlciBhdHRyaWJ1dGUgd2lsbCBkZWludGVybGVhdmUgYnVmZmVyIGRhdGEuIik7bGV0IGU9W107Zm9yKGxldCBpPTA7aTx0aGlzLmNvdW50O2krKyl7bGV0IHI9aSp0aGlzLmRhdGEuc3RyaWRlK3RoaXMub2Zmc2V0O2ZvcihsZXQgbz0wO288dGhpcy5pdGVtU2l6ZTtvKyspZS5wdXNoKHRoaXMuZGF0YS5hcnJheVtyK29dKX1yZXR1cm57aXRlbVNpemU6dGhpcy5pdGVtU2l6ZSx0eXBlOnRoaXMuYXJyYXkuY29uc3RydWN0b3IubmFtZSxhcnJheTplLG5vcm1hbGl6ZWQ6dGhpcy5ub3JtYWxpemVkfX1yZXR1cm4gdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnMmJih0LmludGVybGVhdmVkQnVmZmVycz17fSksdm9pZCAwPT09dC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdJiYodC5pbnRlcmxlYXZlZEJ1ZmZlcnNbdGhpcy5kYXRhLnV1aWRdPXRoaXMuZGF0YS50b0pTT04odCkpLHtpc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlOiEwLGl0ZW1TaXplOnRoaXMuaXRlbVNpemUsZGF0YTp0aGlzLmRhdGEudXVpZCxvZmZzZXQ6dGhpcy5vZmZzZXQsbm9ybWFsaXplZDp0aGlzLm5vcm1hbGl6ZWR9fX07WGcucHJvdG90eXBlLmlzSW50ZXJsZWF2ZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIG1rPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNwcml0ZU1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5yb3RhdGlvbj0wLHRoaXMuc2l6ZUF0dGVudWF0aW9uPSEwLHRoaXMudHJhbnNwYXJlbnQ9ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMucm90YXRpb249dC5yb3RhdGlvbix0aGlzLnNpemVBdHRlbnVhdGlvbj10LnNpemVBdHRlbnVhdGlvbix0aGlzfX07bWsucHJvdG90eXBlLmlzU3ByaXRlTWF0ZXJpYWw9ITA7dmFyIGViLE9TPW5ldyBpZSx0Yj1uZXcgaWUsbmI9bmV3IGllLGliPW5ldyBhdCxrUz1uZXcgYXQsV2RlPW5ldyBSbix6Tz1uZXcgaWUsRlM9bmV3IGllLGpPPW5ldyBpZSxuZGU9bmV3IGF0LGU4PW5ldyBhdCxpZGU9bmV3IGF0O2Z1bmN0aW9uIEdPKG4sdCxlLGkscixvKXtpYi5zdWJWZWN0b3JzKG4sZSkuYWRkU2NhbGFyKC41KS5tdWx0aXBseShpKSx2b2lkIDAhPT1yPyhrUy54PW8qaWIueC1yKmliLnksa1MueT1yKmliLngrbyppYi55KTprUy5jb3B5KGliKSxuLmNvcHkodCksbi54Kz1rUy54LG4ueSs9a1MueSxuLmFwcGx5TWF0cml4NChXZGUpfShjbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQpe2lmKHN1cGVyKCksdGhpcy50eXBlPSJTcHJpdGUiLHZvaWQgMD09PWViKXtlYj1uZXcgbnI7bGV0IGU9bmV3IEZsb2F0MzJBcnJheShbLS41LC0uNSwwLDAsMCwuNSwtLjUsMCwxLDAsLjUsLjUsMCwxLDEsLS41LC41LDAsMCwxXSksaT1uZXcgWWcoZSw1KTtlYi5zZXRJbmRleChbMCwxLDIsMCwyLDNdKSxlYi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixuZXcgWGcoaSwzLDAsITEpKSxlYi5zZXRBdHRyaWJ1dGUoInV2IixuZXcgWGcoaSwyLDMsITEpKX10aGlzLmdlb21ldHJ5PWViLHRoaXMubWF0ZXJpYWw9dm9pZCAwIT09dD90Om5ldyBtayx0aGlzLmNlbnRlcj1uZXcgYXQoLjUsLjUpfXJheWNhc3QodCxlKXtudWxsPT09dC5jYW1lcmEmJmNvbnNvbGUuZXJyb3IoJ1RIUkVFLlNwcml0ZTogIlJheWNhc3Rlci5jYW1lcmEiIG5lZWRzIHRvIGJlIHNldCBpbiBvcmRlciB0byByYXljYXN0IGFnYWluc3Qgc3ByaXRlcy4nKSx0Yi5zZXRGcm9tTWF0cml4U2NhbGUodGhpcy5tYXRyaXhXb3JsZCksV2RlLmNvcHkodC5jYW1lcmEubWF0cml4V29ybGQpLHRoaXMubW9kZWxWaWV3TWF0cml4Lm11bHRpcGx5TWF0cmljZXModC5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLHRoaXMubWF0cml4V29ybGQpLG5iLnNldEZyb21NYXRyaXhQb3NpdGlvbih0aGlzLm1vZGVsVmlld01hdHJpeCksdC5jYW1lcmEuaXNQZXJzcGVjdGl2ZUNhbWVyYSYmITE9PT10aGlzLm1hdGVyaWFsLnNpemVBdHRlbnVhdGlvbiYmdGIubXVsdGlwbHlTY2FsYXIoLW5iLnopO2xldCByLG8saT10aGlzLm1hdGVyaWFsLnJvdGF0aW9uOzAhPT1pJiYobz1NYXRoLmNvcyhpKSxyPU1hdGguc2luKGkpKTtsZXQgcz10aGlzLmNlbnRlcjtHTyh6Ty5zZXQoLS41LC0uNSwwKSxuYixzLHRiLHIsbyksR08oRlMuc2V0KC41LC0uNSwwKSxuYixzLHRiLHIsbyksR08oak8uc2V0KC41LC41LDApLG5iLHMsdGIscixvKSxuZGUuc2V0KDAsMCksZTguc2V0KDEsMCksaWRlLnNldCgxLDEpO2xldCBhPXQucmF5LmludGVyc2VjdFRyaWFuZ2xlKHpPLEZTLGpPLCExLE9TKTtpZihudWxsPT09YSYmKEdPKEZTLnNldCgtLjUsLjUsMCksbmIscyx0YixyLG8pLGU4LnNldCgwLDEpLGE9dC5yYXkuaW50ZXJzZWN0VHJpYW5nbGUoek8sak8sRlMsITEsT1MpLG51bGw9PT1hKSlyZXR1cm47bGV0IGw9dC5yYXkub3JpZ2luLmRpc3RhbmNlVG8oT1MpO2w8dC5uZWFyfHxsPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmwscG9pbnQ6T1MuY2xvbmUoKSx1djpsby5nZXRVVihPUyx6TyxGUyxqTyxuZGUsZTgsaWRlLG5ldyBhdCksZmFjZTpudWxsLG9iamVjdDp0aGlzfSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx2b2lkIDAhPT10LmNlbnRlciYmdGhpcy5jZW50ZXIuY29weSh0LmNlbnRlciksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXN9fSkucHJvdG90eXBlLmlzU3ByaXRlPSEwO3ZhciByZGU9bmV3IGllLG9kZT1uZXcgYXIsc2RlPW5ldyBhcix2OWU9bmV3IGllLGFkZT1uZXcgUm4sZ2s9Y2xhc3MgZXh0ZW5kcyBWb3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJTa2lubmVkTWVzaCIsdGhpcy5iaW5kTW9kZT0iYXR0YWNoZWQiLHRoaXMuYmluZE1hdHJpeD1uZXcgUm4sdGhpcy5iaW5kTWF0cml4SW52ZXJzZT1uZXcgUm59Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmJpbmRNb2RlPXQuYmluZE1vZGUsdGhpcy5iaW5kTWF0cml4LmNvcHkodC5iaW5kTWF0cml4KSx0aGlzLmJpbmRNYXRyaXhJbnZlcnNlLmNvcHkodC5iaW5kTWF0cml4SW52ZXJzZSksdGhpcy5za2VsZXRvbj10LnNrZWxldG9uLHRoaXN9YmluZCh0LGUpe3RoaXMuc2tlbGV0b249dCx2b2lkIDA9PT1lJiYodGhpcy51cGRhdGVNYXRyaXhXb3JsZCghMCksdGhpcy5za2VsZXRvbi5jYWxjdWxhdGVJbnZlcnNlcygpLGU9dGhpcy5tYXRyaXhXb3JsZCksdGhpcy5iaW5kTWF0cml4LmNvcHkoZSksdGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KGUpLmludmVydCgpfXBvc2UoKXt0aGlzLnNrZWxldG9uLnBvc2UoKX1ub3JtYWxpemVTa2luV2VpZ2h0cygpe2xldCB0PW5ldyBhcixlPXRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5za2luV2VpZ2h0O2ZvcihsZXQgaT0wLHI9ZS5jb3VudDtpPHI7aSsrKXt0Lng9ZS5nZXRYKGkpLHQueT1lLmdldFkoaSksdC56PWUuZ2V0WihpKSx0Lnc9ZS5nZXRXKGkpO2xldCBvPTEvdC5tYW5oYXR0YW5MZW5ndGgoKTtvIT09MS8wP3QubXVsdGlwbHlTY2FsYXIobyk6dC5zZXQoMSwwLDAsMCksZS5zZXRYWVpXKGksdC54LHQueSx0LnosdC53KX19dXBkYXRlTWF0cml4V29ybGQodCl7c3VwZXIudXBkYXRlTWF0cml4V29ybGQodCksImF0dGFjaGVkIj09PXRoaXMuYmluZE1vZGU/dGhpcy5iaW5kTWF0cml4SW52ZXJzZS5jb3B5KHRoaXMubWF0cml4V29ybGQpLmludmVydCgpOiJkZXRhY2hlZCI9PT10aGlzLmJpbmRNb2RlP3RoaXMuYmluZE1hdHJpeEludmVyc2UuY29weSh0aGlzLmJpbmRNYXRyaXgpLmludmVydCgpOmNvbnNvbGUud2FybigiVEhSRUUuU2tpbm5lZE1lc2g6IFVucmVjb2duaXplZCBiaW5kTW9kZTogIit0aGlzLmJpbmRNb2RlKX1ib25lVHJhbnNmb3JtKHQsZSl7bGV0IGk9dGhpcy5za2VsZXRvbixyPXRoaXMuZ2VvbWV0cnk7b2RlLmZyb21CdWZmZXJBdHRyaWJ1dGUoci5hdHRyaWJ1dGVzLnNraW5JbmRleCx0KSxzZGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShyLmF0dHJpYnV0ZXMuc2tpbldlaWdodCx0KSxyZGUuY29weShlKS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4KSxlLnNldCgwLDAsMCk7Zm9yKGxldCBvPTA7bzw0O28rKyl7bGV0IHM9c2RlLmdldENvbXBvbmVudChvKTtpZigwIT09cyl7bGV0IGE9b2RlLmdldENvbXBvbmVudChvKTthZGUubXVsdGlwbHlNYXRyaWNlcyhpLmJvbmVzW2FdLm1hdHJpeFdvcmxkLGkuYm9uZUludmVyc2VzW2FdKSxlLmFkZFNjYWxlZFZlY3Rvcih2OWUuY29weShyZGUpLmFwcGx5TWF0cml4NChhZGUpLHMpfX1yZXR1cm4gZS5hcHBseU1hdHJpeDQodGhpcy5iaW5kTWF0cml4SW52ZXJzZSl9fTtnay5wcm90b3R5cGUuaXNTa2lubmVkTWVzaD0hMCxjbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnR5cGU9IkJvbmUifX0ucHJvdG90eXBlLmlzQm9uZT0hMCxjbGFzcyBleHRlbmRzIEhve2NvbnN0cnVjdG9yKHQ9bnVsbCxlPTEsaT0xLHIsbyxzLGEsbCxjPVpvLHU9Wm8sZCxwKXtzdXBlcihudWxsLHMsYSxsLGMsdSxyLG8sZCxwKSx0aGlzLmltYWdlPXtkYXRhOnQsd2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5tYWdGaWx0ZXI9Yyx0aGlzLm1pbkZpbHRlcj11LHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMuZmxpcFk9ITEsdGhpcy51bnBhY2tBbGlnbm1lbnQ9MX19LnByb3RvdHlwZS5pc0RhdGFUZXh0dXJlPSEwO3ZhciBuRT1jbGFzcyBleHRlbmRzIFlye2NvbnN0cnVjdG9yKHQsZSxpLHI9MSl7Im51bWJlciI9PXR5cGVvZiBpJiYocj1pLGk9ITEsY29uc29sZS5lcnJvcigiVEhSRUUuSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlOiBUaGUgY29uc3RydWN0b3Igbm93IGV4cGVjdHMgbm9ybWFsaXplZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQuIikpLHN1cGVyKHQsZSxpKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9cn1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSx0LmlzSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlPSEwLHR9fTtuRS5wcm90b3R5cGUuaXNJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGU9ITA7dmFyIGxkZT1uZXcgUm4sY2RlPW5ldyBSbixXTz1bXSxOUz1uZXcgVm87KGNsYXNzIGV4dGVuZHMgVm97Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsZSksdGhpcy5pbnN0YW5jZU1hdHJpeD1uZXcgbkUobmV3IEZsb2F0MzJBcnJheSgxNippKSwxNiksdGhpcy5pbnN0YW5jZUNvbG9yPW51bGwsdGhpcy5jb3VudD1pLHRoaXMuZnJ1c3R1bUN1bGxlZD0hMX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VNYXRyaXguY29weSh0Lmluc3RhbmNlTWF0cml4KSxudWxsIT09dC5pbnN0YW5jZUNvbG9yJiYodGhpcy5pbnN0YW5jZUNvbG9yPXQuaW5zdGFuY2VDb2xvci5jbG9uZSgpKSx0aGlzLmNvdW50PXQuY291bnQsdGhpc31nZXRDb2xvckF0KHQsZSl7ZS5mcm9tQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9Z2V0TWF0cml4QXQodCxlKXtlLmZyb21BcnJheSh0aGlzLmluc3RhbmNlTWF0cml4LmFycmF5LDE2KnQpfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLm1hdHJpeFdvcmxkLHI9dGhpcy5jb3VudDtpZihOUy5nZW9tZXRyeT10aGlzLmdlb21ldHJ5LE5TLm1hdGVyaWFsPXRoaXMubWF0ZXJpYWwsdm9pZCAwIT09TlMubWF0ZXJpYWwpZm9yKGxldCBvPTA7bzxyO28rKyl7dGhpcy5nZXRNYXRyaXhBdChvLGxkZSksY2RlLm11bHRpcGx5TWF0cmljZXMoaSxsZGUpLE5TLm1hdHJpeFdvcmxkPWNkZSxOUy5yYXljYXN0KHQsV08pO2ZvcihsZXQgcz0wLGE9V08ubGVuZ3RoO3M8YTtzKyspe2xldCBsPVdPW3NdO2wuaW5zdGFuY2VJZD1vLGwub2JqZWN0PXRoaXMsZS5wdXNoKGwpfVdPLmxlbmd0aD0wfX1zZXRDb2xvckF0KHQsZSl7bnVsbD09PXRoaXMuaW5zdGFuY2VDb2xvciYmKHRoaXMuaW5zdGFuY2VDb2xvcj1uZXcgbkUobmV3IEZsb2F0MzJBcnJheSgzKnRoaXMuaW5zdGFuY2VNYXRyaXguY291bnQpLDMpKSxlLnRvQXJyYXkodGhpcy5pbnN0YW5jZUNvbG9yLmFycmF5LDMqdCl9c2V0TWF0cml4QXQodCxlKXtlLnRvQXJyYXkodGhpcy5pbnN0YW5jZU1hdHJpeC5hcnJheSwxNip0KX11cGRhdGVNb3JwaFRhcmdldHMoKXt9ZGlzcG9zZSgpe3RoaXMuZGlzcGF0Y2hFdmVudCh7dHlwZToiZGlzcG9zZSJ9KX19KS5wcm90b3R5cGUuaXNJbnN0YW5jZWRNZXNoPSEwO3ZhciBBcD1jbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJMaW5lQmFzaWNNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgdm4oMTY3NzcyMTUpLHRoaXMubGluZXdpZHRoPTEsdGhpcy5saW5lY2FwPSJyb3VuZCIsdGhpcy5saW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubGluZXdpZHRoPXQubGluZXdpZHRoLHRoaXMubGluZWNhcD10LmxpbmVjYXAsdGhpcy5saW5lam9pbj10LmxpbmVqb2luLHRoaXN9fTtBcC5wcm90b3R5cGUuaXNMaW5lQmFzaWNNYXRlcmlhbD0hMDt2YXIgdWRlPW5ldyBpZSxkZGU9bmV3IGllLHBkZT1uZXcgUm4sdDg9bmV3IENmLHFPPW5ldyB4ZixpRT1jbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQ9bmV3IG5yLGU9bmV3IEFwKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZSIsdGhpcy5nZW9tZXRyeT10LHRoaXMubWF0ZXJpYWw9ZSx0aGlzLnVwZGF0ZU1vcnBoVGFyZ2V0cygpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5tYXRlcmlhbD10Lm1hdGVyaWFsLHRoaXMuZ2VvbWV0cnk9dC5nZW9tZXRyeSx0aGlzfWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVswXTtmb3IobGV0IHI9MSxvPWUuY291bnQ7cjxvO3IrKyl1ZGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHItMSksZGRlLmZyb21CdWZmZXJBdHRyaWJ1dGUoZSxyKSxpW3JdPWlbci0xXSxpW3JdKz11ZGUuZGlzdGFuY2VUbyhkZGUpO3Quc2V0QXR0cmlidXRlKCJsaW5lRGlzdGFuY2UiLG5ldyBKcihpLDEpKX1lbHNlIGNvbnNvbGUud2FybigiVEhSRUUuTGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpOiBDb21wdXRhdGlvbiBvbmx5IHBvc3NpYmxlIHdpdGggbm9uLWluZGV4ZWQgQnVmZmVyR2VvbWV0cnkuIik7ZWxzZSB0LmlzR2VvbWV0cnkmJmNvbnNvbGUuZXJyb3IoIlRIUkVFLkxpbmUuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfXJheWNhc3QodCxlKXtsZXQgaT10aGlzLmdlb21ldHJ5LHI9dGhpcy5tYXRyaXhXb3JsZCxvPXQucGFyYW1zLkxpbmUudGhyZXNob2xkLHM9aS5kcmF3UmFuZ2U7aWYobnVsbD09PWkuYm91bmRpbmdTcGhlcmUmJmkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCkscU8uY29weShpLmJvdW5kaW5nU3BoZXJlKSxxTy5hcHBseU1hdHJpeDQocikscU8ucmFkaXVzKz1vLCExPT09dC5yYXkuaW50ZXJzZWN0c1NwaGVyZShxTykpcmV0dXJuO3BkZS5jb3B5KHIpLmludmVydCgpLHQ4LmNvcHkodC5yYXkpLmFwcGx5TWF0cml4NChwZGUpO2xldCBhPW8vKCh0aGlzLnNjYWxlLngrdGhpcy5zY2FsZS55K3RoaXMuc2NhbGUueikvMyksbD1hKmEsYz1uZXcgaWUsdT1uZXcgaWUsZD1uZXcgaWUscD1uZXcgaWUsaD10aGlzLmlzTGluZVNlZ21lbnRzPzI6MTtpZihpLmlzQnVmZmVyR2VvbWV0cnkpe2xldCBmPWkuaW5kZXgseD1pLmF0dHJpYnV0ZXMucG9zaXRpb247aWYobnVsbCE9PWYpZm9yKGxldCBEPU1hdGgubWF4KDAscy5zdGFydCksVD1NYXRoLm1pbihmLmNvdW50LHMuc3RhcnQrcy5jb3VudCktMTtEPFQ7RCs9aCl7bGV0IGs9Zi5nZXRYKEQpLFo9Zi5nZXRYKEQrMSk7aWYoYy5mcm9tQnVmZmVyQXR0cmlidXRlKHgsayksdS5mcm9tQnVmZmVyQXR0cmlidXRlKHgsWiksdDguZGlzdGFuY2VTcVRvU2VnbWVudChjLHUscCxkKT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBmZT10LnJheS5vcmlnaW4uZGlzdGFuY2VUbyhwKTtmZTx0Lm5lYXJ8fGZlPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOmZlLHBvaW50OmQuY2xvbmUoKS5hcHBseU1hdHJpeDQodGhpcy5tYXRyaXhXb3JsZCksaW5kZXg6RCxmYWNlOm51bGwsZmFjZUluZGV4Om51bGwsb2JqZWN0OnRoaXN9KX1lbHNlIGZvcihsZXQgRD1NYXRoLm1heCgwLHMuc3RhcnQpLFQ9TWF0aC5taW4oeC5jb3VudCxzLnN0YXJ0K3MuY291bnQpLTE7RDxUO0QrPWgpe2lmKGMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh4LEQpLHUuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh4LEQrMSksdDguZGlzdGFuY2VTcVRvU2VnbWVudChjLHUscCxkKT5sKWNvbnRpbnVlO3AuYXBwbHlNYXRyaXg0KHRoaXMubWF0cml4V29ybGQpO2xldCBaPXQucmF5Lm9yaWdpbi5kaXN0YW5jZVRvKHApO1o8dC5uZWFyfHxaPnQuZmFyfHxlLnB1c2goe2Rpc3RhbmNlOloscG9pbnQ6ZC5jbG9uZSgpLmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKSxpbmRleDpELGZhY2U6bnVsbCxmYWNlSW5kZXg6bnVsbCxvYmplY3Q6dGhpc30pfX1lbHNlIGkuaXNHZW9tZXRyeSYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS5yYXljYXN0KCkgbm8gbG9uZ2VyIHN1cHBvcnRzIFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX11cGRhdGVNb3JwaFRhcmdldHMoKXtsZXQgdD10aGlzLmdlb21ldHJ5O2lmKHQuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGU9dC5tb3JwaEF0dHJpYnV0ZXMsaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD4wKXtsZXQgcj1lW2lbMF1dO2lmKHZvaWQgMCE9PXIpe3RoaXMubW9ycGhUYXJnZXRJbmZsdWVuY2VzPVtdLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5PXt9O2ZvcihsZXQgbz0wLHM9ci5sZW5ndGg7bzxzO28rKyl7bGV0IGE9cltvXS5uYW1lfHxTdHJpbmcobyk7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXMucHVzaCgwKSx0aGlzLm1vcnBoVGFyZ2V0RGljdGlvbmFyeVthXT1vfX19fWVsc2V7bGV0IGU9dC5tb3JwaFRhcmdldHM7dm9pZCAwIT09ZSYmZS5sZW5ndGg+MCYmY29uc29sZS5lcnJvcigiVEhSRUUuTGluZS51cGRhdGVNb3JwaFRhcmdldHMoKSBkb2VzIG5vdCBzdXBwb3J0IFRIUkVFLkdlb21ldHJ5LiBVc2UgVEhSRUUuQnVmZmVyR2VvbWV0cnkgaW5zdGVhZC4iKX19fTtpRS5wcm90b3R5cGUuaXNMaW5lPSEwO3ZhciBoZGU9bmV3IGllLGZkZT1uZXcgaWUsckU9Y2xhc3MgZXh0ZW5kcyBpRXtjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJMaW5lU2VnbWVudHMifWNvbXB1dGVMaW5lRGlzdGFuY2VzKCl7bGV0IHQ9dGhpcy5nZW9tZXRyeTtpZih0LmlzQnVmZmVyR2VvbWV0cnkpaWYobnVsbD09PXQuaW5kZXgpe2xldCBlPXQuYXR0cmlidXRlcy5wb3NpdGlvbixpPVtdO2ZvcihsZXQgcj0wLG89ZS5jb3VudDtyPG87cis9MiloZGUuZnJvbUJ1ZmZlckF0dHJpYnV0ZShlLHIpLGZkZS5mcm9tQnVmZmVyQXR0cmlidXRlKGUscisxKSxpW3JdPTA9PT1yPzA6aVtyLTFdLGlbcisxXT1pW3JdK2hkZS5kaXN0YW5jZVRvKGZkZSk7dC5zZXRBdHRyaWJ1dGUoImxpbmVEaXN0YW5jZSIsbmV3IEpyKGksMSkpfWVsc2UgY29uc29sZS53YXJuKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKTogQ29tcHV0YXRpb24gb25seSBwb3NzaWJsZSB3aXRoIG5vbi1pbmRleGVkIEJ1ZmZlckdlb21ldHJ5LiIpO2Vsc2UgdC5pc0dlb21ldHJ5JiZjb25zb2xlLmVycm9yKCJUSFJFRS5MaW5lU2VnbWVudHMuY29tcHV0ZUxpbmVEaXN0YW5jZXMoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpO3JldHVybiB0aGlzfX07ckUucHJvdG90eXBlLmlzTGluZVNlZ21lbnRzPSEwLGNsYXNzIGV4dGVuZHMgaUV7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iTGluZUxvb3AifX0ucHJvdG90eXBlLmlzTGluZUxvb3A9ITA7dmFyIF9rPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlBvaW50c01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5tYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5zaXplPTEsdGhpcy5zaXplQXR0ZW51YXRpb249ITAsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuc2l6ZT10LnNpemUsdGhpcy5zaXplQXR0ZW51YXRpb249dC5zaXplQXR0ZW51YXRpb24sdGhpc319O19rLnByb3RvdHlwZS5pc1BvaW50c01hdGVyaWFsPSEwO3ZhciBtZGU9bmV3IFJuLEU4PW5ldyBDZixZTz1uZXcgeGYsWE89bmV3IGllO2Z1bmN0aW9uIGdkZShuLHQsZSxpLHIsbyxzKXtsZXQgYT1FOC5kaXN0YW5jZVNxVG9Qb2ludChuKTtpZihhPGUpe2xldCBsPW5ldyBpZTtFOC5jbG9zZXN0UG9pbnRUb1BvaW50KG4sbCksbC5hcHBseU1hdHJpeDQoaSk7bGV0IGM9ci5yYXkub3JpZ2luLmRpc3RhbmNlVG8obCk7aWYoYzxyLm5lYXJ8fGM+ci5mYXIpcmV0dXJuO28ucHVzaCh7ZGlzdGFuY2U6YyxkaXN0YW5jZVRvUmF5Ok1hdGguc3FydChhKSxwb2ludDpsLGluZGV4OnQsZmFjZTpudWxsLG9iamVjdDpzfSl9fShjbGFzcyBleHRlbmRzIFhpe2NvbnN0cnVjdG9yKHQ9bmV3IG5yLGU9bmV3IF9rKXtzdXBlcigpLHRoaXMudHlwZT0iUG9pbnRzIix0aGlzLmdlb21ldHJ5PXQsdGhpcy5tYXRlcmlhbD1lLHRoaXMudXBkYXRlTW9ycGhUYXJnZXRzKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLm1hdGVyaWFsPXQubWF0ZXJpYWwsdGhpcy5nZW9tZXRyeT10Lmdlb21ldHJ5LHRoaXN9cmF5Y2FzdCh0LGUpe2xldCBpPXRoaXMuZ2VvbWV0cnkscj10aGlzLm1hdHJpeFdvcmxkLG89dC5wYXJhbXMuUG9pbnRzLnRocmVzaG9sZCxzPWkuZHJhd1JhbmdlO2lmKG51bGw9PT1pLmJvdW5kaW5nU3BoZXJlJiZpLmNvbXB1dGVCb3VuZGluZ1NwaGVyZSgpLFlPLmNvcHkoaS5ib3VuZGluZ1NwaGVyZSksWU8uYXBwbHlNYXRyaXg0KHIpLFlPLnJhZGl1cys9bywhMT09PXQucmF5LmludGVyc2VjdHNTcGhlcmUoWU8pKXJldHVybjttZGUuY29weShyKS5pbnZlcnQoKSxFOC5jb3B5KHQucmF5KS5hcHBseU1hdHJpeDQobWRlKTtsZXQgYT1vLygodGhpcy5zY2FsZS54K3RoaXMuc2NhbGUueSt0aGlzLnNjYWxlLnopLzMpLGw9YSphO2lmKGkuaXNCdWZmZXJHZW9tZXRyeSl7bGV0IGM9aS5pbmRleCxkPWkuYXR0cmlidXRlcy5wb3NpdGlvbjtpZihudWxsIT09Yylmb3IobGV0IGY9TWF0aC5tYXgoMCxzLnN0YXJ0KSxtPU1hdGgubWluKGMuY291bnQscy5zdGFydCtzLmNvdW50KTtmPG07ZisrKXtsZXQgeD1jLmdldFgoZik7WE8uZnJvbUJ1ZmZlckF0dHJpYnV0ZShkLHgpLGdkZShYTyx4LGwscix0LGUsdGhpcyl9ZWxzZSBmb3IobGV0IGY9TWF0aC5tYXgoMCxzLnN0YXJ0KSxtPU1hdGgubWluKGQuY291bnQscy5zdGFydCtzLmNvdW50KTtmPG07ZisrKVhPLmZyb21CdWZmZXJBdHRyaWJ1dGUoZCxmKSxnZGUoWE8sZixsLHIsdCxlLHRoaXMpfWVsc2UgY29uc29sZS5lcnJvcigiVEhSRUUuUG9pbnRzLnJheWNhc3QoKSBubyBsb25nZXIgc3VwcG9ydHMgVEhSRUUuR2VvbWV0cnkuIFVzZSBUSFJFRS5CdWZmZXJHZW9tZXRyeSBpbnN0ZWFkLiIpfXVwZGF0ZU1vcnBoVGFyZ2V0cygpe2xldCB0PXRoaXMuZ2VvbWV0cnk7aWYodC5pc0J1ZmZlckdlb21ldHJ5KXtsZXQgZT10Lm1vcnBoQXR0cmlidXRlcyxpPU9iamVjdC5rZXlzKGUpO2lmKGkubGVuZ3RoPjApe2xldCByPWVbaVswXV07aWYodm9pZCAwIT09cil7dGhpcy5tb3JwaFRhcmdldEluZmx1ZW5jZXM9W10sdGhpcy5tb3JwaFRhcmdldERpY3Rpb25hcnk9e307Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvPHM7bysrKXtsZXQgYT1yW29dLm5hbWV8fFN0cmluZyhvKTt0aGlzLm1vcnBoVGFyZ2V0SW5mbHVlbmNlcy5wdXNoKDApLHRoaXMubW9ycGhUYXJnZXREaWN0aW9uYXJ5W2FdPW99fX19ZWxzZXtsZXQgZT10Lm1vcnBoVGFyZ2V0czt2b2lkIDAhPT1lJiZlLmxlbmd0aD4wJiZjb25zb2xlLmVycm9yKCJUSFJFRS5Qb2ludHMudXBkYXRlTW9ycGhUYXJnZXRzKCkgZG9lcyBub3Qgc3VwcG9ydCBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIil9fX0pLnByb3RvdHlwZS5pc1BvaW50cz0hMCxjbGFzcyBleHRlbmRzIEhve2NvbnN0cnVjdG9yKHQsZSxpLHIsbyxzLGEsbCxjKXtzdXBlcih0LGUsaSxyLG8scyxhLGwsYyksdGhpcy5taW5GaWx0ZXI9dm9pZCAwIT09cz9zOkdzLHRoaXMubWFnRmlsdGVyPXZvaWQgMCE9PW8/bzpHcyx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMTtsZXQgdT10aGlzOyJyZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrImluIHQmJnQucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayhmdW5jdGlvbiBkKCl7dS5uZWVkc1VwZGF0ZT0hMCx0LnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2soZCl9KX1jbG9uZSgpe3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLmltYWdlKS5jb3B5KHRoaXMpfXVwZGF0ZSgpe2xldCB0PXRoaXMuaW1hZ2U7InJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2siaW4gdD09MCYmdC5yZWFkeVN0YXRlPj10LkhBVkVfQ1VSUkVOVF9EQVRBJiYodGhpcy5uZWVkc1VwZGF0ZT0hMCl9fS5wcm90b3R5cGUuaXNWaWRlb1RleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSl7c3VwZXIoe3dpZHRoOnQsaGVpZ2h0OmV9KSx0aGlzLmZvcm1hdD1pLHRoaXMubWFnRmlsdGVyPVpvLHRoaXMubWluRmlsdGVyPVpvLHRoaXMuZ2VuZXJhdGVNaXBtYXBzPSExLHRoaXMubmVlZHNVcGRhdGU9ITB9fS5wcm90b3R5cGUuaXNGcmFtZWJ1ZmZlclRleHR1cmU9ITAsY2xhc3MgZXh0ZW5kcyBIb3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyxhLGwsYyx1LGQscCl7c3VwZXIobnVsbCxzLGEsbCxjLHUscixvLGQscCksdGhpcy5pbWFnZT17d2lkdGg6ZSxoZWlnaHQ6aX0sdGhpcy5taXBtYXBzPXQsdGhpcy5mbGlwWT0hMSx0aGlzLmdlbmVyYXRlTWlwbWFwcz0hMX19LnByb3RvdHlwZS5pc0NvbXByZXNzZWRUZXh0dXJlPSEwLGNsYXNzIGV4dGVuZHMgSG97Y29uc3RydWN0b3IodCxlLGkscixvLHMsYSxsLGMpe3N1cGVyKHQsZSxpLHIsbyxzLGEsbCxjKSx0aGlzLm5lZWRzVXBkYXRlPSEwfX0ucHJvdG90eXBlLmlzQ2FudmFzVGV4dHVyZT0hMDt2YXIgeWI9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PTEsZT04LGk9MCxyPTIqTWF0aC5QSSl7c3VwZXIoKSx0aGlzLnR5cGU9IkNpcmNsZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3JhZGl1czp0LHNlZ21lbnRzOmUsdGhldGFTdGFydDppLHRoZXRhTGVuZ3RoOnJ9LGU9TWF0aC5tYXgoMyxlKTtsZXQgbz1bXSxzPVtdLGE9W10sbD1bXSxjPW5ldyBpZSx1PW5ldyBhdDtzLnB1c2goMCwwLDApLGEucHVzaCgwLDAsMSksbC5wdXNoKC41LC41KTtmb3IobGV0IGQ9MCxwPTM7ZDw9ZTtkKysscCs9Myl7bGV0IGg9aStkL2UqcjtjLng9dCpNYXRoLmNvcyhoKSxjLnk9dCpNYXRoLnNpbihoKSxzLnB1c2goYy54LGMueSxjLnopLGEucHVzaCgwLDAsMSksdS54PShzW3BdL3QrMSkvMix1Lnk9KHNbcCsxXS90KzEpLzIsbC5wdXNoKHUueCx1LnkpfWZvcihsZXQgZD0xO2Q8PWU7ZCsrKW8ucHVzaChkLGQrMSwwKTt0aGlzLnNldEluZGV4KG8pLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEpyKHMsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBKcihhLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcihsLDIpKX1zdGF0aWMgZnJvbUpTT04odCl7cmV0dXJuIG5ldyB5Yih0LnJhZGl1cyx0LnNlZ21lbnRzLHQudGhldGFTdGFydCx0LnRoZXRhTGVuZ3RoKX19LHFhPShuZXcgaWUsbmV3IGllLG5ldyBpZSxuZXcgbG8sY2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnR5cGU9IkN1cnZlIix0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz0yMDB9Z2V0UG9pbnQoKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5DdXJ2ZTogLmdldFBvaW50KCkgbm90IGltcGxlbWVudGVkLiIpLG51bGx9Z2V0UG9pbnRBdCh0LGUpe2xldCBpPXRoaXMuZ2V0VXRvVG1hcHBpbmcodCk7cmV0dXJuIHRoaXMuZ2V0UG9pbnQoaSxlKX1nZXRQb2ludHModD01KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gZX1nZXRTcGFjZWRQb2ludHModD01KXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludEF0KGkvdCkpO3JldHVybiBlfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0TGVuZ3RocygpO3JldHVybiB0W3QubGVuZ3RoLTFdfWdldExlbmd0aHModD10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyl7aWYodGhpcy5jYWNoZUFyY0xlbmd0aHMmJnRoaXMuY2FjaGVBcmNMZW5ndGhzLmxlbmd0aD09PXQrMSYmIXRoaXMubmVlZHNVcGRhdGUpcmV0dXJuIHRoaXMuY2FjaGVBcmNMZW5ndGhzO3RoaXMubmVlZHNVcGRhdGU9ITE7bGV0IGksZT1bXSxyPXRoaXMuZ2V0UG9pbnQoMCksbz0wO2UucHVzaCgwKTtmb3IobGV0IHM9MTtzPD10O3MrKylpPXRoaXMuZ2V0UG9pbnQocy90KSxvKz1pLmRpc3RhbmNlVG8ociksZS5wdXNoKG8pLHI9aTtyZXR1cm4gdGhpcy5jYWNoZUFyY0xlbmd0aHM9ZSxlfXVwZGF0ZUFyY0xlbmd0aHMoKXt0aGlzLm5lZWRzVXBkYXRlPSEwLHRoaXMuZ2V0TGVuZ3RocygpfWdldFV0b1RtYXBwaW5nKHQsZSl7bGV0IHMsaT10aGlzLmdldExlbmd0aHMoKSxyPTAsbz1pLmxlbmd0aDtzPWV8fHQqaVtvLTFdO2xldCBjLGE9MCxsPW8tMTtmb3IoO2E8PWw7KWlmKHI9TWF0aC5mbG9vcihhKyhsLWEpLzIpLGM9aVtyXS1zLGM8MClhPXIrMTtlbHNle2lmKCEoYz4wKSl7bD1yO2JyZWFrfWw9ci0xfWlmKHI9bCxpW3JdPT09cylyZXR1cm4gci8oby0xKTtsZXQgdT1pW3JdO3JldHVybihyKyhzLXUpLyhpW3IrMV0tdSkpLyhvLTEpfWdldFRhbmdlbnQodCxlKXtsZXQgcj10LTFlLTQsbz10KzFlLTQ7cjwwJiYocj0wKSxvPjEmJihvPTEpO2xldCBzPXRoaXMuZ2V0UG9pbnQociksYT10aGlzLmdldFBvaW50KG8pLGw9ZXx8KHMuaXNWZWN0b3IyP25ldyBhdDpuZXcgaWUpO3JldHVybiBsLmNvcHkoYSkuc3ViKHMpLm5vcm1hbGl6ZSgpLGx9Z2V0VGFuZ2VudEF0KHQsZSl7bGV0IGk9dGhpcy5nZXRVdG9UbWFwcGluZyh0KTtyZXR1cm4gdGhpcy5nZXRUYW5nZW50KGksZSl9Y29tcHV0ZUZyZW5ldEZyYW1lcyh0LGUpe2xldCBpPW5ldyBpZSxyPVtdLG89W10scz1bXSxhPW5ldyBpZSxsPW5ldyBSbjtmb3IobGV0IGg9MDtoPD10O2grKylyW2hdPXRoaXMuZ2V0VGFuZ2VudEF0KGgvdCxuZXcgaWUpO29bMF09bmV3IGllLHNbMF09bmV3IGllO2xldCBjPU51bWJlci5NQVhfVkFMVUUsdT1NYXRoLmFicyhyWzBdLngpLGQ9TWF0aC5hYnMoclswXS55KSxwPU1hdGguYWJzKHJbMF0ueik7dTw9YyYmKGM9dSxpLnNldCgxLDAsMCkpLGQ8PWMmJihjPWQsaS5zZXQoMCwxLDApKSxwPD1jJiZpLnNldCgwLDAsMSksYS5jcm9zc1ZlY3RvcnMoclswXSxpKS5ub3JtYWxpemUoKSxvWzBdLmNyb3NzVmVjdG9ycyhyWzBdLGEpLHNbMF0uY3Jvc3NWZWN0b3JzKHJbMF0sb1swXSk7Zm9yKGxldCBoPTE7aDw9dDtoKyspe2lmKG9baF09b1toLTFdLmNsb25lKCksc1toXT1zW2gtMV0uY2xvbmUoKSxhLmNyb3NzVmVjdG9ycyhyW2gtMV0scltoXSksYS5sZW5ndGgoKT5OdW1iZXIuRVBTSUxPTil7YS5ub3JtYWxpemUoKTtsZXQgZj1NYXRoLmFjb3MoR2EocltoLTFdLmRvdChyW2hdKSwtMSwxKSk7b1toXS5hcHBseU1hdHJpeDQobC5tYWtlUm90YXRpb25BeGlzKGEsZikpfXNbaF0uY3Jvc3NWZWN0b3JzKHJbaF0sb1toXSl9aWYoITA9PT1lKXtsZXQgaD1NYXRoLmFjb3MoR2Eob1swXS5kb3Qob1t0XSksLTEsMSkpO2gvPXQsclswXS5kb3QoYS5jcm9zc1ZlY3RvcnMob1swXSxvW3RdKSk+MCYmKGg9LWgpO2ZvcihsZXQgZj0xO2Y8PXQ7ZisrKW9bZl0uYXBwbHlNYXRyaXg0KGwubWFrZVJvdGF0aW9uQXhpcyhyW2ZdLGgqZikpLHNbZl0uY3Jvc3NWZWN0b3JzKHJbZl0sb1tmXSl9cmV0dXJue3RhbmdlbnRzOnIsbm9ybWFsczpvLGJpbm9ybWFsczpzfX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLmFyY0xlbmd0aERpdmlzaW9ucz10LmFyY0xlbmd0aERpdmlzaW9ucyx0aGlzfXRvSlNPTigpe2xldCB0PXttZXRhZGF0YTp7dmVyc2lvbjo0LjUsdHlwZToiQ3VydmUiLGdlbmVyYXRvcjoiQ3VydmUudG9KU09OIn19O3JldHVybiB0LmFyY0xlbmd0aERpdmlzaW9ucz10aGlzLmFyY0xlbmd0aERpdmlzaW9ucyx0LnR5cGU9dGhpcy50eXBlLHR9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuYXJjTGVuZ3RoRGl2aXNpb25zPXQuYXJjTGVuZ3RoRGl2aXNpb25zLHRoaXN9fSksYmI9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PTAsZT0wLGk9MSxyPTEsbz0wLHM9MipNYXRoLlBJLGE9ITEsbD0wKXtzdXBlcigpLHRoaXMudHlwZT0iRWxsaXBzZUN1cnZlIix0aGlzLmFYPXQsdGhpcy5hWT1lLHRoaXMueFJhZGl1cz1pLHRoaXMueVJhZGl1cz1yLHRoaXMuYVN0YXJ0QW5nbGU9byx0aGlzLmFFbmRBbmdsZT1zLHRoaXMuYUNsb2Nrd2lzZT1hLHRoaXMuYVJvdGF0aW9uPWx9Z2V0UG9pbnQodCxlKXtsZXQgaT1lfHxuZXcgYXQscj0yKk1hdGguUEksbz10aGlzLmFFbmRBbmdsZS10aGlzLmFTdGFydEFuZ2xlLHM9TWF0aC5hYnMobyk8TnVtYmVyLkVQU0lMT047Zm9yKDtvPDA7KW8rPXI7Zm9yKDtvPnI7KW8tPXI7bzxOdW1iZXIuRVBTSUxPTiYmKG89cz8wOnIpLCEwPT09dGhpcy5hQ2xvY2t3aXNlJiYhcyYmKG89PT1yP289LXI6by09cik7bGV0IGE9dGhpcy5hU3RhcnRBbmdsZSt0Km8sbD10aGlzLmFYK3RoaXMueFJhZGl1cypNYXRoLmNvcyhhKSxjPXRoaXMuYVkrdGhpcy55UmFkaXVzKk1hdGguc2luKGEpO2lmKDAhPT10aGlzLmFSb3RhdGlvbil7bGV0IHU9TWF0aC5jb3ModGhpcy5hUm90YXRpb24pLGQ9TWF0aC5zaW4odGhpcy5hUm90YXRpb24pLHA9bC10aGlzLmFYLGg9Yy10aGlzLmFZO2w9cCp1LWgqZCt0aGlzLmFYLGM9cCpkK2gqdSt0aGlzLmFZfXJldHVybiBpLnNldChsLGMpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc310b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gdC5hWD10aGlzLmFYLHQuYVk9dGhpcy5hWSx0LnhSYWRpdXM9dGhpcy54UmFkaXVzLHQueVJhZGl1cz10aGlzLnlSYWRpdXMsdC5hU3RhcnRBbmdsZT10aGlzLmFTdGFydEFuZ2xlLHQuYUVuZEFuZ2xlPXRoaXMuYUVuZEFuZ2xlLHQuYUNsb2Nrd2lzZT10aGlzLmFDbG9ja3dpc2UsdC5hUm90YXRpb249dGhpcy5hUm90YXRpb24sdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy5hWD10LmFYLHRoaXMuYVk9dC5hWSx0aGlzLnhSYWRpdXM9dC54UmFkaXVzLHRoaXMueVJhZGl1cz10LnlSYWRpdXMsdGhpcy5hU3RhcnRBbmdsZT10LmFTdGFydEFuZ2xlLHRoaXMuYUVuZEFuZ2xlPXQuYUVuZEFuZ2xlLHRoaXMuYUNsb2Nrd2lzZT10LmFDbG9ja3dpc2UsdGhpcy5hUm90YXRpb249dC5hUm90YXRpb24sdGhpc319O2JiLnByb3RvdHlwZS5pc0VsbGlwc2VDdXJ2ZT0hMDt2YXIgdms9Y2xhc3MgZXh0ZW5kcyBiYntjb25zdHJ1Y3Rvcih0LGUsaSxyLG8scyl7c3VwZXIodCxlLGksaSxyLG8scyksdGhpcy50eXBlPSJBcmNDdXJ2ZSJ9fTtmdW5jdGlvbiBTRygpe2xldCBuPTAsdD0wLGU9MCxpPTA7ZnVuY3Rpb24gcihvLHMsYSxsKXtuPW8sdD1hLGU9LTMqbyszKnMtMiphLWwsaT0yKm8tMipzK2ErbH1yZXR1cm57aW5pdENhdG11bGxSb206ZnVuY3Rpb24obyxzLGEsbCxjKXtyKHMsYSxjKihhLW8pLGMqKGwtcykpfSxpbml0Tm9udW5pZm9ybUNhdG11bGxSb206ZnVuY3Rpb24obyxzLGEsbCxjLHUsZCl7bGV0IHA9KHMtbykvYy0oYS1vKS8oYyt1KSsoYS1zKS91LGg9KGEtcykvdS0obC1zKS8odStkKSsobC1hKS9kO3AqPXUsaCo9dSxyKHMsYSxwLGgpfSxjYWxjOmZ1bmN0aW9uKG8pe2xldCBzPW8qbztyZXR1cm4gbit0Km8rZSpzK2kqKHMqbyl9fX12ay5wcm90b3R5cGUuaXNBcmNDdXJ2ZT0hMDt2YXIgUU89bmV3IGllLG44PW5ldyBTRyxpOD1uZXcgU0cscjg9bmV3IFNHLHlrPWNsYXNzIGV4dGVuZHMgcWF7Y29uc3RydWN0b3IodD1bXSxlPSExLGk9ImNlbnRyaXBldGFsIixyPS41KXtzdXBlcigpLHRoaXMudHlwZT0iQ2F0bXVsbFJvbUN1cnZlMyIsdGhpcy5wb2ludHM9dCx0aGlzLmNsb3NlZD1lLHRoaXMuY3VydmVUeXBlPWksdGhpcy50ZW5zaW9uPXJ9Z2V0UG9pbnQodCxlPW5ldyBpZSl7bGV0IGMsdSxpPWUscj10aGlzLnBvaW50cyxvPXIubGVuZ3RoLHM9KG8tKHRoaXMuY2xvc2VkPzA6MSkpKnQsYT1NYXRoLmZsb29yKHMpLGw9cy1hO3RoaXMuY2xvc2VkP2ErPWE+MD8wOihNYXRoLmZsb29yKE1hdGguYWJzKGEpL28pKzEpKm86MD09PWwmJmE9PT1vLTEmJihhPW8tMixsPTEpLHRoaXMuY2xvc2VkfHxhPjA/Yz1yWyhhLTEpJW9dOihRTy5zdWJWZWN0b3JzKHJbMF0sclsxXSkuYWRkKHJbMF0pLGM9UU8pO2xldCBkPXJbYSVvXSxwPXJbKGErMSklb107aWYodGhpcy5jbG9zZWR8fGErMjxvP3U9clsoYSsyKSVvXTooUU8uc3ViVmVjdG9ycyhyW28tMV0scltvLTJdKS5hZGQocltvLTFdKSx1PVFPKSwiY2VudHJpcGV0YWwiPT09dGhpcy5jdXJ2ZVR5cGV8fCJjaG9yZGFsIj09PXRoaXMuY3VydmVUeXBlKXtsZXQgaD0iY2hvcmRhbCI9PT10aGlzLmN1cnZlVHlwZT8uNTouMjUsZj1NYXRoLnBvdyhjLmRpc3RhbmNlVG9TcXVhcmVkKGQpLGgpLG09TWF0aC5wb3coZC5kaXN0YW5jZVRvU3F1YXJlZChwKSxoKSx4PU1hdGgucG93KHAuZGlzdGFuY2VUb1NxdWFyZWQodSksaCk7bTwxZS00JiYobT0xKSxmPDFlLTQmJihmPW0pLHg8MWUtNCYmKHg9bSksbjguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueCxkLngscC54LHUueCxmLG0seCksaTguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueSxkLnkscC55LHUueSxmLG0seCkscjguaW5pdE5vbnVuaWZvcm1DYXRtdWxsUm9tKGMueixkLnoscC56LHUueixmLG0seCl9ZWxzZSJjYXRtdWxscm9tIj09PXRoaXMuY3VydmVUeXBlJiYobjguaW5pdENhdG11bGxSb20oYy54LGQueCxwLngsdS54LHRoaXMudGVuc2lvbiksaTguaW5pdENhdG11bGxSb20oYy55LGQueSxwLnksdS55LHRoaXMudGVuc2lvbikscjguaW5pdENhdG11bGxSb20oYy56LGQueixwLnosdS56LHRoaXMudGVuc2lvbikpO3JldHVybiBpLnNldChuOC5jYWxjKGwpLGk4LmNhbGMobCkscjguY2FsYyhsKSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmNsb3NlZD10LmNsb3NlZCx0aGlzLmN1cnZlVHlwZT10LmN1cnZlVHlwZSx0aGlzLnRlbnNpb249dC50ZW5zaW9uLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7dC5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10aGlzLnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0LnBvaW50cy5wdXNoKHRoaXMucG9pbnRzW2VdLnRvQXJyYXkoKSk7cmV0dXJuIHQuY2xvc2VkPXRoaXMuY2xvc2VkLHQuY3VydmVUeXBlPXRoaXMuY3VydmVUeXBlLHQudGVuc2lvbj10aGlzLnRlbnNpb24sdH1mcm9tSlNPTih0KXtzdXBlci5mcm9tSlNPTih0KSx0aGlzLnBvaW50cz1bXTtmb3IobGV0IGU9MCxpPXQucG9pbnRzLmxlbmd0aDtlPGk7ZSsrKXtsZXQgcj10LnBvaW50c1tlXTt0aGlzLnBvaW50cy5wdXNoKChuZXcgaWUpLmZyb21BcnJheShyKSl9cmV0dXJuIHRoaXMuY2xvc2VkPXQuY2xvc2VkLHRoaXMuY3VydmVUeXBlPXQuY3VydmVUeXBlLHRoaXMudGVuc2lvbj10LnRlbnNpb24sdGhpc319O2Z1bmN0aW9uIF9kZShuLHQsZSxpLHIpe2xldCBvPS41KihpLXQpLHM9LjUqKHItZSksYT1uKm47cmV0dXJuKDIqZS0yKmkrbytzKSoobiphKSsoLTMqZSszKmktMipvLXMpKmErbypuK2V9ZnVuY3Rpb24gelMobix0LGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4sdCl7bGV0IGU9MS1uO3JldHVybiBlKmUqdH0obix0KStmdW5jdGlvbihuLHQpe3JldHVybiAyKigxLW4pKm4qdH0obixlKStmdW5jdGlvbihuLHQpe3JldHVybiBuKm4qdH0obixpKX1mdW5jdGlvbiBqUyhuLHQsZSxpLHIpe3JldHVybiBmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gZSplKmUqdH0obix0KStmdW5jdGlvbihuLHQpe2xldCBlPTEtbjtyZXR1cm4gMyplKmUqbip0fShuLGUpK2Z1bmN0aW9uKG4sdCl7cmV0dXJuIDMqKDEtbikqbipuKnR9KG4saSkrZnVuY3Rpb24obix0KXtyZXR1cm4gbipuKm4qdH0obixyKX15ay5wcm90b3R5cGUuaXNDYXRtdWxsUm9tQ3VydmUzPSEwO3ZhciBvRT1jbGFzcyBleHRlbmRzIHFhe2NvbnN0cnVjdG9yKHQ9bmV3IGF0LGU9bmV3IGF0LGk9bmV3IGF0LHI9bmV3IGF0KXtzdXBlcigpLHRoaXMudHlwZT0iQ3ViaWNCZXppZXJDdXJ2ZSIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgYXQpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldChqUyh0LHIueCxvLngscy54LGEueCksalModCxyLnksby55LHMueSxhLnkpKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MC5jb3B5KHQudjApLHRoaXMudjEuY29weSh0LnYxKSx0aGlzLnYyLmNvcHkodC52MiksdGhpcy52My5jb3B5KHQudjMpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHQudjM9dGhpcy52My50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MC5mcm9tQXJyYXkodC52MCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpcy52My5mcm9tQXJyYXkodC52MyksdGhpc319O29FLnByb3RvdHlwZS5pc0N1YmljQmV6aWVyQ3VydmU9ITA7dmFyIGJrPWNsYXNzIGV4dGVuZHMgcWF7Y29uc3RydWN0b3IodD1uZXcgaWUsZT1uZXcgaWUsaT1uZXcgaWUscj1uZXcgaWUpe3N1cGVyKCksdGhpcy50eXBlPSJDdWJpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWksdGhpcy52Mz1yfWdldFBvaW50KHQsZT1uZXcgaWUpe2xldCBpPWUscj10aGlzLnYwLG89dGhpcy52MSxzPXRoaXMudjIsYT10aGlzLnYzO3JldHVybiBpLnNldChqUyh0LHIueCxvLngscy54LGEueCksalModCxyLnksby55LHMueSxhLnkpLGpTKHQsci56LG8ueixzLnosYS56KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXMudjMuY29weSh0LnYzKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0LnYzPXRoaXMudjMudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXMudjMuZnJvbUFycmF5KHQudjMpLHRoaXN9fTtiay5wcm90b3R5cGUuaXNDdWJpY0JlemllckN1cnZlMz0hMDt2YXIgeGI9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PW5ldyBhdCxlPW5ldyBhdCl7c3VwZXIoKSx0aGlzLnR5cGU9IkxpbmVDdXJ2ZSIsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3IGF0KXtsZXQgaT1lO3JldHVybiAxPT09dD9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Z2V0VGFuZ2VudCh0LGUpe2xldCBpPWV8fG5ldyBhdDtyZXR1cm4gaS5jb3B5KHRoaXMudjIpLnN1Yih0aGlzLnYxKS5ub3JtYWxpemUoKSxpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYxPXRoaXMudjEudG9BcnJheSgpLHQudjI9dGhpcy52Mi50b0FycmF5KCksdH1mcm9tSlNPTih0KXtyZXR1cm4gc3VwZXIuZnJvbUpTT04odCksdGhpcy52MS5mcm9tQXJyYXkodC52MSksdGhpcy52Mi5mcm9tQXJyYXkodC52MiksdGhpc319O3hiLnByb3RvdHlwZS5pc0xpbmVDdXJ2ZT0hMDt2YXIgc0U9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PW5ldyBhdCxlPW5ldyBhdCxpPW5ldyBhdCl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlIix0aGlzLnYwPXQsdGhpcy52MT1lLHRoaXMudjI9aX1nZXRQb2ludCh0LGU9bmV3IGF0KXtsZXQgaT1lLHI9dGhpcy52MCxvPXRoaXMudjEscz10aGlzLnYyO3JldHVybiBpLnNldCh6Uyh0LHIueCxvLngscy54KSx6Uyh0LHIueSxvLnkscy55KSksaX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudjAuY29weSh0LnYwKSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjA9dGhpcy52MC50b0FycmF5KCksdC52MT10aGlzLnYxLnRvQXJyYXkoKSx0LnYyPXRoaXMudjIudG9BcnJheSgpLHR9ZnJvbUpTT04odCl7cmV0dXJuIHN1cGVyLmZyb21KU09OKHQpLHRoaXMudjAuZnJvbUFycmF5KHQudjApLHRoaXMudjEuZnJvbUFycmF5KHQudjEpLHRoaXMudjIuZnJvbUFycmF5KHQudjIpLHRoaXN9fTtzRS5wcm90b3R5cGUuaXNRdWFkcmF0aWNCZXppZXJDdXJ2ZT0hMDt2YXIgeGs9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcih0PW5ldyBpZSxlPW5ldyBpZSxpPW5ldyBpZSl7c3VwZXIoKSx0aGlzLnR5cGU9IlF1YWRyYXRpY0JlemllckN1cnZlMyIsdGhpcy52MD10LHRoaXMudjE9ZSx0aGlzLnYyPWl9Z2V0UG9pbnQodCxlPW5ldyBpZSl7bGV0IGk9ZSxyPXRoaXMudjAsbz10aGlzLnYxLHM9dGhpcy52MjtyZXR1cm4gaS5zZXQoelModCxyLngsby54LHMueCkselModCxyLnksby55LHMueSkselModCxyLnosby56LHMueikpLGl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYwLmNvcHkodC52MCksdGhpcy52MS5jb3B5KHQudjEpLHRoaXMudjIuY29weSh0LnYyKSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3JldHVybiB0LnYwPXRoaXMudjAudG9BcnJheSgpLHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYwLmZyb21BcnJheSh0LnYwKSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX07eGsucHJvdG90eXBlLmlzUXVhZHJhdGljQmV6aWVyQ3VydmUzPSEwO3ZhciBhRT1jbGFzcyBleHRlbmRzIHFhe2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy50eXBlPSJTcGxpbmVDdXJ2ZSIsdGhpcy5wb2ludHM9dH1nZXRQb2ludCh0LGU9bmV3IGF0KXtsZXQgaT1lLHI9dGhpcy5wb2ludHMsbz0oci5sZW5ndGgtMSkqdCxzPU1hdGguZmxvb3IobyksYT1vLXMsbD1yWzA9PT1zP3M6cy0xXSxjPXJbc10sdT1yW3M+ci5sZW5ndGgtMj9yLmxlbmd0aC0xOnMrMV0sZD1yW3M+ci5sZW5ndGgtMz9yLmxlbmd0aC0xOnMrMl07cmV0dXJuIGkuc2V0KF9kZShhLGwueCxjLngsdS54LGQueCksX2RlKGEsbC55LGMueSx1LnksZC55KSksaX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5wb2ludHM9W107Zm9yKGxldCBlPTAsaT10LnBvaW50cy5sZW5ndGg7ZTxpO2UrKyl0aGlzLnBvaW50cy5wdXNoKHQucG9pbnRzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5wb2ludHMubGVuZ3RoO2U8aTtlKyspdC5wb2ludHMucHVzaCh0aGlzLnBvaW50c1tlXS50b0FycmF5KCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMucG9pbnRzPVtdO2ZvcihsZXQgZT0wLGk9dC5wb2ludHMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQucG9pbnRzW2VdO3RoaXMucG9pbnRzLnB1c2goKG5ldyBhdCkuZnJvbUFycmF5KHIpKX1yZXR1cm4gdGhpc319O2FFLnByb3RvdHlwZS5pc1NwbGluZUN1cnZlPSEwO3ZhciBxZGU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQXJjQ3VydmU6dmssQ2F0bXVsbFJvbUN1cnZlMzp5ayxDdWJpY0JlemllckN1cnZlOm9FLEN1YmljQmV6aWVyQ3VydmUzOmJrLEVsbGlwc2VDdXJ2ZTpiYixMaW5lQ3VydmU6eGIsTGluZUN1cnZlMzpjbGFzcyBleHRlbmRzIHFhe2NvbnN0cnVjdG9yKHQ9bmV3IGllLGU9bmV3IGllKXtzdXBlcigpLHRoaXMudHlwZT0iTGluZUN1cnZlMyIsdGhpcy5pc0xpbmVDdXJ2ZTM9ITAsdGhpcy52MT10LHRoaXMudjI9ZX1nZXRQb2ludCh0LGU9bmV3IGllKXtsZXQgaT1lO3JldHVybiAxPT09dD9pLmNvcHkodGhpcy52Mik6KGkuY29weSh0aGlzLnYyKS5zdWIodGhpcy52MSksaS5tdWx0aXBseVNjYWxhcih0KS5hZGQodGhpcy52MSkpLGl9Z2V0UG9pbnRBdCh0LGUpe3JldHVybiB0aGlzLmdldFBvaW50KHQsZSl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLnYxLmNvcHkodC52MSksdGhpcy52Mi5jb3B5KHQudjIpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQudjE9dGhpcy52MS50b0FycmF5KCksdC52Mj10aGlzLnYyLnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLnYxLmZyb21BcnJheSh0LnYxKSx0aGlzLnYyLmZyb21BcnJheSh0LnYyKSx0aGlzfX0sUXVhZHJhdGljQmV6aWVyQ3VydmU6c0UsUXVhZHJhdGljQmV6aWVyQ3VydmUzOnhrLFNwbGluZUN1cnZlOmFFfSksTzg9Y2xhc3MgZXh0ZW5kcyBxYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJDdXJ2ZVBhdGgiLHRoaXMuY3VydmVzPVtdLHRoaXMuYXV0b0Nsb3NlPSExfWFkZCh0KXt0aGlzLmN1cnZlcy5wdXNoKHQpfWNsb3NlUGF0aCgpe2xldCB0PXRoaXMuY3VydmVzWzBdLmdldFBvaW50KDApLGU9dGhpcy5jdXJ2ZXNbdGhpcy5jdXJ2ZXMubGVuZ3RoLTFdLmdldFBvaW50KDEpO3QuZXF1YWxzKGUpfHx0aGlzLmN1cnZlcy5wdXNoKG5ldyB4YihlLHQpKX1nZXRQb2ludCh0LGUpe2xldCBpPXQqdGhpcy5nZXRMZW5ndGgoKSxyPXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCksbz0wO2Zvcig7bzxyLmxlbmd0aDspe2lmKHJbb10+PWkpe2xldCBzPXJbb10taSxhPXRoaXMuY3VydmVzW29dLGw9YS5nZXRMZW5ndGgoKTtyZXR1cm4gYS5nZXRQb2ludEF0KDA9PT1sPzA6MS1zL2wsZSl9bysrfXJldHVybiBudWxsfWdldExlbmd0aCgpe2xldCB0PXRoaXMuZ2V0Q3VydmVMZW5ndGhzKCk7cmV0dXJuIHRbdC5sZW5ndGgtMV19dXBkYXRlQXJjTGVuZ3Rocygpe3RoaXMubmVlZHNVcGRhdGU9ITAsdGhpcy5jYWNoZUxlbmd0aHM9bnVsbCx0aGlzLmdldEN1cnZlTGVuZ3RocygpfWdldEN1cnZlTGVuZ3Rocygpe2lmKHRoaXMuY2FjaGVMZW5ndGhzJiZ0aGlzLmNhY2hlTGVuZ3Rocy5sZW5ndGg9PT10aGlzLmN1cnZlcy5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGVMZW5ndGhzO2xldCB0PVtdLGU9MDtmb3IobGV0IGk9MCxyPXRoaXMuY3VydmVzLmxlbmd0aDtpPHI7aSsrKWUrPXRoaXMuY3VydmVzW2ldLmdldExlbmd0aCgpLHQucHVzaChlKTtyZXR1cm4gdGhpcy5jYWNoZUxlbmd0aHM9dCx0fWdldFNwYWNlZFBvaW50cyh0PTQwKXtsZXQgZT1bXTtmb3IobGV0IGk9MDtpPD10O2krKyllLnB1c2godGhpcy5nZXRQb2ludChpL3QpKTtyZXR1cm4gdGhpcy5hdXRvQ2xvc2UmJmUucHVzaChlWzBdKSxlfWdldFBvaW50cyh0PTEyKXtsZXQgaSxlPVtdO2ZvcihsZXQgcj0wLG89dGhpcy5jdXJ2ZXM7cjxvLmxlbmd0aDtyKyspe2xldCBzPW9bcl0sbD1zLmdldFBvaW50cyhzJiZzLmlzRWxsaXBzZUN1cnZlPzIqdDpzJiYocy5pc0xpbmVDdXJ2ZXx8cy5pc0xpbmVDdXJ2ZTMpPzE6cyYmcy5pc1NwbGluZUN1cnZlP3Qqcy5wb2ludHMubGVuZ3RoOnQpO2ZvcihsZXQgYz0wO2M8bC5sZW5ndGg7YysrKXtsZXQgdT1sW2NdO2kmJmkuZXF1YWxzKHUpfHwoZS5wdXNoKHUpLGk9dSl9fXJldHVybiB0aGlzLmF1dG9DbG9zZSYmZS5sZW5ndGg+MSYmIWVbZS5sZW5ndGgtMV0uZXF1YWxzKGVbMF0pJiZlLnB1c2goZVswXSksZX1jb3B5KHQpe3N1cGVyLmNvcHkodCksdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl0aGlzLmN1cnZlcy5wdXNoKHQuY3VydmVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzLmF1dG9DbG9zZT10LmF1dG9DbG9zZSx0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QuYXV0b0Nsb3NlPXRoaXMuYXV0b0Nsb3NlLHQuY3VydmVzPVtdO2ZvcihsZXQgZT0wLGk9dGhpcy5jdXJ2ZXMubGVuZ3RoO2U8aTtlKyspdC5jdXJ2ZXMucHVzaCh0aGlzLmN1cnZlc1tlXS50b0pTT04oKSk7cmV0dXJuIHR9ZnJvbUpTT04odCl7c3VwZXIuZnJvbUpTT04odCksdGhpcy5hdXRvQ2xvc2U9dC5hdXRvQ2xvc2UsdGhpcy5jdXJ2ZXM9W107Zm9yKGxldCBlPTAsaT10LmN1cnZlcy5sZW5ndGg7ZTxpO2UrKyl7bGV0IHI9dC5jdXJ2ZXNbZV07dGhpcy5jdXJ2ZXMucHVzaCgobmV3IHFkZVtyLnR5cGVdKS5mcm9tSlNPTihyKSl9cmV0dXJuIHRoaXN9fSxsRT1jbGFzcyBleHRlbmRzIE84e2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJQYXRoIix0aGlzLmN1cnJlbnRQb2ludD1uZXcgYXQsdCYmdGhpcy5zZXRGcm9tUG9pbnRzKHQpfXNldEZyb21Qb2ludHModCl7dGhpcy5tb3ZlVG8odFswXS54LHRbMF0ueSk7Zm9yKGxldCBlPTEsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMubGluZVRvKHRbZV0ueCx0W2VdLnkpO3JldHVybiB0aGlzfW1vdmVUbyh0LGUpe3JldHVybiB0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfWxpbmVUbyh0LGUpe2xldCBpPW5ldyB4Yih0aGlzLmN1cnJlbnRQb2ludC5jbG9uZSgpLG5ldyBhdCh0LGUpKTtyZXR1cm4gdGhpcy5jdXJ2ZXMucHVzaChpKSx0aGlzLmN1cnJlbnRQb2ludC5zZXQodCxlKSx0aGlzfXF1YWRyYXRpY0N1cnZlVG8odCxlLGkscil7bGV0IG89bmV3IHNFKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGF0KHQsZSksbmV3IGF0KGkscikpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKG8pLHRoaXMuY3VycmVudFBvaW50LnNldChpLHIpLHRoaXN9YmV6aWVyQ3VydmVUbyh0LGUsaSxyLG8scyl7bGV0IGE9bmV3IG9FKHRoaXMuY3VycmVudFBvaW50LmNsb25lKCksbmV3IGF0KHQsZSksbmV3IGF0KGksciksbmV3IGF0KG8scykpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGEpLHRoaXMuY3VycmVudFBvaW50LnNldChvLHMpLHRoaXN9c3BsaW5lVGhydSh0KXtsZXQgZT1bdGhpcy5jdXJyZW50UG9pbnQuY2xvbmUoKV0uY29uY2F0KHQpLGk9bmV3IGFFKGUpO3JldHVybiB0aGlzLmN1cnZlcy5wdXNoKGkpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodFt0Lmxlbmd0aC0xXSksdGhpc31hcmModCxlLGkscixvLHMpe3JldHVybiB0aGlzLmFic2FyYyh0K3RoaXMuY3VycmVudFBvaW50LngsZSt0aGlzLmN1cnJlbnRQb2ludC55LGkscixvLHMpLHRoaXN9YWJzYXJjKHQsZSxpLHIsbyxzKXtyZXR1cm4gdGhpcy5hYnNlbGxpcHNlKHQsZSxpLGkscixvLHMpLHRoaXN9ZWxsaXBzZSh0LGUsaSxyLG8scyxhLGwpe3JldHVybiB0aGlzLmFic2VsbGlwc2UodCt0aGlzLmN1cnJlbnRQb2ludC54LGUrdGhpcy5jdXJyZW50UG9pbnQueSxpLHIsbyxzLGEsbCksdGhpc31hYnNlbGxpcHNlKHQsZSxpLHIsbyxzLGEsbCl7bGV0IGM9bmV3IGJiKHQsZSxpLHIsbyxzLGEsbCk7aWYodGhpcy5jdXJ2ZXMubGVuZ3RoPjApe2xldCBkPWMuZ2V0UG9pbnQoMCk7ZC5lcXVhbHModGhpcy5jdXJyZW50UG9pbnQpfHx0aGlzLmxpbmVUbyhkLngsZC55KX10aGlzLmN1cnZlcy5wdXNoKGMpO2xldCB1PWMuZ2V0UG9pbnQoMSk7cmV0dXJuIHRoaXMuY3VycmVudFBvaW50LmNvcHkodSksdGhpc31jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuY3VycmVudFBvaW50LmNvcHkodC5jdXJyZW50UG9pbnQpLHRoaXN9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIHQuY3VycmVudFBvaW50PXRoaXMuY3VycmVudFBvaW50LnRvQXJyYXkoKSx0fWZyb21KU09OKHQpe3JldHVybiBzdXBlci5mcm9tSlNPTih0KSx0aGlzLmN1cnJlbnRQb2ludC5mcm9tQXJyYXkodC5jdXJyZW50UG9pbnQpLHRoaXN9fSxJcD1jbGFzcyBleHRlbmRzIGxFe2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMudXVpZD1kdSgpLHRoaXMudHlwZT0iU2hhcGUiLHRoaXMuaG9sZXM9W119Z2V0UG9pbnRzSG9sZXModCl7bGV0IGU9W107Zm9yKGxldCBpPTAscj10aGlzLmhvbGVzLmxlbmd0aDtpPHI7aSsrKWVbaV09dGhpcy5ob2xlc1tpXS5nZXRQb2ludHModCk7cmV0dXJuIGV9ZXh0cmFjdFBvaW50cyh0KXtyZXR1cm57c2hhcGU6dGhpcy5nZXRQb2ludHModCksaG9sZXM6dGhpcy5nZXRQb2ludHNIb2xlcyh0KX19Y29weSh0KXtzdXBlci5jb3B5KHQpLHRoaXMuaG9sZXM9W107Zm9yKGxldCBlPTAsaT10LmhvbGVzLmxlbmd0aDtlPGk7ZSsrKXRoaXMuaG9sZXMucHVzaCh0LmhvbGVzW2VdLmNsb25lKCkpO3JldHVybiB0aGlzfXRvSlNPTigpe2xldCB0PXN1cGVyLnRvSlNPTigpO3QudXVpZD10aGlzLnV1aWQsdC5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXRoaXMuaG9sZXMubGVuZ3RoO2U8aTtlKyspdC5ob2xlcy5wdXNoKHRoaXMuaG9sZXNbZV0udG9KU09OKCkpO3JldHVybiB0fWZyb21KU09OKHQpe3N1cGVyLmZyb21KU09OKHQpLHRoaXMudXVpZD10LnV1aWQsdGhpcy5ob2xlcz1bXTtmb3IobGV0IGU9MCxpPXQuaG9sZXMubGVuZ3RoO2U8aTtlKyspe2xldCByPXQuaG9sZXNbZV07dGhpcy5ob2xlcy5wdXNoKChuZXcgbEUpLmZyb21KU09OKHIpKX1yZXR1cm4gdGhpc319O2Z1bmN0aW9uIFlkZShuLHQsZSxpLHIpe2xldCBvLHM7aWYocj09PWZ1bmN0aW9uKG4sdCxlLGkpe2xldCByPTA7Zm9yKGxldCBvPXQscz1lLWk7bzxlO28rPWkpcis9KG5bc10tbltvXSkqKG5bbysxXStuW3MrMV0pLHM9bztyZXR1cm4gcn0obix0LGUsaSk+MClmb3Iobz10O288ZTtvKz1pKXM9dmRlKG8sbltvXSxuW28rMV0scyk7ZWxzZSBmb3Iobz1lLWk7bz49dDtvLT1pKXM9dmRlKG8sbltvXSxuW28rMV0scyk7cmV0dXJuIHMmJkZrKHMscy5uZXh0KSYmKGRFKHMpLHM9cy5uZXh0KSxzfWZ1bmN0aW9uIHdmKG4sdCl7aWYoIW4pcmV0dXJuIG47dHx8KHQ9bik7bGV0IGksZT1uO2Rve2lmKGk9ITEsZS5zdGVpbmVyfHwhRmsoZSxlLm5leHQpJiYwIT09WnIoZS5wcmV2LGUsZS5uZXh0KSllPWUubmV4dDtlbHNle2lmKGRFKGUpLGU9dD1lLnByZXYsZT09PWUubmV4dClicmVhaztpPSEwfX13aGlsZShpfHxlIT09dCk7cmV0dXJuIHR9ZnVuY3Rpb24gY0Uobix0LGUsaSxyLG8scyl7aWYoIW4pcmV0dXJuOyFzJiZvJiZmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1uO2Rve251bGw9PT1yLnomJihyLno9azgoci54LHIueSx0LGUsaSkpLHIucHJldlo9ci5wcmV2LHIubmV4dFo9ci5uZXh0LHI9ci5uZXh0fXdoaWxlKHIhPT1uKTtyLnByZXZaLm5leHRaPW51bGwsci5wcmV2Wj1udWxsLGZ1bmN0aW9uKG4pe2xldCB0LGUsaSxyLG8scyxhLGwsYz0xO2Rve2ZvcihlPW4sbj1udWxsLG89bnVsbCxzPTA7ZTspe2ZvcihzKyssaT1lLGE9MCx0PTA7dDxjJiYoYSsrLGk9aS5uZXh0WixpKTt0KyspO2ZvcihsPWM7YT4wfHxsPjAmJmk7KTAhPT1hJiYoMD09PWx8fCFpfHxlLno8PWkueik/KHI9ZSxlPWUubmV4dFosYS0tKToocj1pLGk9aS5uZXh0WixsLS0pLG8/by5uZXh0Wj1yOm49cixyLnByZXZaPW8sbz1yO2U9aX1vLm5leHRaPW51bGwsYyo9Mn13aGlsZShzPjEpfShyKX0obixpLHIsbyk7bGV0IGwsYyxhPW47Zm9yKDtuLnByZXYhPT1uLm5leHQ7KWlmKGw9bi5wcmV2LGM9bi5uZXh0LG8/RDllKG4saSxyLG8pOlQ5ZShuKSl0LnB1c2gobC5pL2UpLHQucHVzaChuLmkvZSksdC5wdXNoKGMuaS9lKSxkRShuKSxuPWMubmV4dCxhPWMubmV4dDtlbHNlIGlmKChuPWMpPT09YSl7cz8xPT09cz9jRShuPUE5ZSh3ZihuKSx0LGUpLHQsZSxpLHIsbywyKToyPT09cyYmSTllKG4sdCxlLGkscixvKTpjRSh3ZihuKSx0LGUsaSxyLG8sMSk7YnJlYWt9fWZ1bmN0aW9uIFQ5ZShuKXtsZXQgdD1uLnByZXYsZT1uLGk9bi5uZXh0O2lmKFpyKHQsZSxpKT49MClyZXR1cm4hMTtsZXQgcj1uLm5leHQubmV4dDtmb3IoO3IhPT1uLnByZXY7KXtpZihhYih0LngsdC55LGUueCxlLnksaS54LGkueSxyLngsci55KSYmWnIoci5wcmV2LHIsci5uZXh0KT49MClyZXR1cm4hMTtyPXIubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBEOWUobix0LGUsaSl7bGV0IHI9bi5wcmV2LG89bixzPW4ubmV4dDtpZihacihyLG8scyk+PTApcmV0dXJuITE7bGV0IGM9ci54Pm8ueD9yLng+cy54P3IueDpzLng6by54PnMueD9vLng6cy54LHU9ci55Pm8ueT9yLnk+cy55P3IueTpzLnk6by55PnMueT9vLnk6cy55LGQ9azgoci54PG8ueD9yLng8cy54P3IueDpzLng6by54PHMueD9vLng6cy54LHIueTxvLnk/ci55PHMueT9yLnk6cy55Om8ueTxzLnk/by55OnMueSx0LGUsaSkscD1rOChjLHUsdCxlLGkpLGg9bi5wcmV2WixmPW4ubmV4dFo7Zm9yKDtoJiZoLno+PWQmJmYmJmYuejw9cDspe2lmKGghPT1uLnByZXYmJmghPT1uLm5leHQmJmFiKHIueCxyLnksby54LG8ueSxzLngscy55LGgueCxoLnkpJiZacihoLnByZXYsaCxoLm5leHQpPj0wfHwoaD1oLnByZXZaLGYhPT1uLnByZXYmJmYhPT1uLm5leHQmJmFiKHIueCxyLnksby54LG8ueSxzLngscy55LGYueCxmLnkpJiZacihmLnByZXYsZixmLm5leHQpPj0wKSlyZXR1cm4hMTtmPWYubmV4dFp9Zm9yKDtoJiZoLno+PWQ7KXtpZihoIT09bi5wcmV2JiZoIT09bi5uZXh0JiZhYihyLngsci55LG8ueCxvLnkscy54LHMueSxoLngsaC55KSYmWnIoaC5wcmV2LGgsaC5uZXh0KT49MClyZXR1cm4hMTtoPWgucHJldlp9Zm9yKDtmJiZmLno8PXA7KXtpZihmIT09bi5wcmV2JiZmIT09bi5uZXh0JiZhYihyLngsci55LG8ueCxvLnkscy54LHMueSxmLngsZi55KSYmWnIoZi5wcmV2LGYsZi5uZXh0KT49MClyZXR1cm4hMTtmPWYubmV4dFp9cmV0dXJuITB9ZnVuY3Rpb24gQTllKG4sdCxlKXtsZXQgaT1uO2Rve2xldCByPWkucHJldixvPWkubmV4dC5uZXh0OyFGayhyLG8pJiZYZGUocixpLGkubmV4dCxvKSYmdUUocixvKSYmdUUobyxyKSYmKHQucHVzaChyLmkvZSksdC5wdXNoKGkuaS9lKSx0LnB1c2goby5pL2UpLGRFKGkpLGRFKGkubmV4dCksaT1uPW8pLGk9aS5uZXh0fXdoaWxlKGkhPT1uKTtyZXR1cm4gd2YoaSl9ZnVuY3Rpb24gSTllKG4sdCxlLGkscixvKXtsZXQgcz1uO2Rve2xldCBhPXMubmV4dC5uZXh0O2Zvcig7YSE9PXMucHJldjspe2lmKHMuaSE9PWEuaSYmVjllKHMsYSkpe2xldCBsPVFkZShzLGEpO3JldHVybiBzPXdmKHMscy5uZXh0KSxsPXdmKGwsbC5uZXh0KSxjRShzLHQsZSxpLHIsbyksdm9pZCBjRShsLHQsZSxpLHIsbyl9YT1hLm5leHR9cz1zLm5leHR9d2hpbGUocyE9PW4pfWZ1bmN0aW9uIFI5ZShuLHQpe3JldHVybiBuLngtdC54fWZ1bmN0aW9uIE85ZShuLHQpe2lmKHQ9ZnVuY3Rpb24obix0KXtsZXQgcyxlPXQsaT1uLngscj1uLnksbz0tMS8wO2Rve2lmKHI8PWUueSYmcj49ZS5uZXh0LnkmJmUubmV4dC55IT09ZS55KXtsZXQgcD1lLngrKHItZS55KSooZS5uZXh0LngtZS54KS8oZS5uZXh0LnktZS55KTtpZihwPD1pJiZwPm8pe2lmKG89cCxwPT09aSl7aWYocj09PWUueSlyZXR1cm4gZTtpZihyPT09ZS5uZXh0LnkpcmV0dXJuIGUubmV4dH1zPWUueDxlLm5leHQueD9lOmUubmV4dH19ZT1lLm5leHR9d2hpbGUoZSE9PXQpO2lmKCFzKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiBzO2xldCBkLGE9cyxsPXMueCxjPXMueSx1PTEvMDtlPXM7ZG97aT49ZS54JiZlLng+PWwmJmkhPT1lLngmJmFiKHI8Yz9pOm8scixsLGMscjxjP286aSxyLGUueCxlLnkpJiYoZD1NYXRoLmFicyhyLWUueSkvKGktZS54KSx1RShlLG4pJiYoZDx1fHxkPT09dSYmKGUueD5zLnh8fGUueD09PXMueCYmRjllKHMsZSkpKSYmKHM9ZSx1PWQpKSxlPWUubmV4dH13aGlsZShlIT09YSk7cmV0dXJuIHN9KG4sdCksdCl7bGV0IGU9UWRlKHQsbik7d2YodCx0Lm5leHQpLHdmKGUsZS5uZXh0KX19ZnVuY3Rpb24gRjllKG4sdCl7cmV0dXJuIFpyKG4ucHJldixuLHQucHJldik8MCYmWnIodC5uZXh0LG4sbi5uZXh0KTwwfWZ1bmN0aW9uIGs4KG4sdCxlLGkscil7cmV0dXJuKG49MTQzMTY1NTc2NSYoKG49ODU4OTkzNDU5Jigobj0yNTI2NDUxMzUmKChuPTE2NzExOTM1Jigobj0zMjc2Nyoobi1lKSpyKXxuPDw4KSl8bjw8NCkpfG48PDIpKXxuPDwxKSl8KHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1pKSpyKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSk8PDF9ZnVuY3Rpb24gQjllKG4pe2xldCB0PW4sZT1uO2Rveyh0Lng8ZS54fHx0Lng9PT1lLngmJnQueTxlLnkpJiYoZT10KSx0PXQubmV4dH13aGlsZSh0IT09bik7cmV0dXJuIGV9ZnVuY3Rpb24gYWIobix0LGUsaSxyLG8scyxhKXtyZXR1cm4oci1zKSoodC1hKS0obi1zKSooby1hKT49MCYmKG4tcykqKGktYSktKGUtcykqKHQtYSk+PTAmJihlLXMpKihvLWEpLShyLXMpKihpLWEpPj0wfWZ1bmN0aW9uIFY5ZShuLHQpe3JldHVybiBuLm5leHQuaSE9PXQuaSYmbi5wcmV2LmkhPT10LmkmJiFmdW5jdGlvbihuLHQpe2xldCBlPW47ZG97aWYoZS5pIT09bi5pJiZlLm5leHQuaSE9PW4uaSYmZS5pIT09dC5pJiZlLm5leHQuaSE9PXQuaSYmWGRlKGUsZS5uZXh0LG4sdCkpcmV0dXJuITA7ZT1lLm5leHR9d2hpbGUoZSE9PW4pO3JldHVybiExfShuLHQpJiYodUUobix0KSYmdUUodCxuKSYmZnVuY3Rpb24obix0KXtsZXQgZT1uLGk9ITEscj0obi54K3QueCkvMixvPShuLnkrdC55KS8yO2Rve2UueT5vIT1lLm5leHQueT5vJiZlLm5leHQueSE9PWUueSYmcjwoZS5uZXh0LngtZS54KSooby1lLnkpLyhlLm5leHQueS1lLnkpK2UueCYmKGk9IWkpLGU9ZS5uZXh0fXdoaWxlKGUhPT1uKTtyZXR1cm4gaX0obix0KSYmKFpyKG4ucHJldixuLHQucHJldil8fFpyKG4sdC5wcmV2LHQpKXx8Rmsobix0KSYmWnIobi5wcmV2LG4sbi5uZXh0KT4wJiZacih0LnByZXYsdCx0Lm5leHQpPjApfWZ1bmN0aW9uIFpyKG4sdCxlKXtyZXR1cm4odC55LW4ueSkqKGUueC10LngpLSh0Lngtbi54KSooZS55LXQueSl9ZnVuY3Rpb24gRmsobix0KXtyZXR1cm4gbi54PT09dC54JiZuLnk9PT10Lnl9ZnVuY3Rpb24gWGRlKG4sdCxlLGkpe2xldCByPVpPKFpyKG4sdCxlKSksbz1aTyhacihuLHQsaSkpLHM9Wk8oWnIoZSxpLG4pKSxhPVpPKFpyKGUsaSx0KSk7cmV0dXJuISEociE9PW8mJnMhPT1hfHwwPT09ciYmS08obixlLHQpfHwwPT09byYmS08obixpLHQpfHwwPT09cyYmS08oZSxuLGkpfHwwPT09YSYmS08oZSx0LGkpKX1mdW5jdGlvbiBLTyhuLHQsZSl7cmV0dXJuIHQueDw9TWF0aC5tYXgobi54LGUueCkmJnQueD49TWF0aC5taW4obi54LGUueCkmJnQueTw9TWF0aC5tYXgobi55LGUueSkmJnQueT49TWF0aC5taW4obi55LGUueSl9ZnVuY3Rpb24gWk8obil7cmV0dXJuIG4+MD8xOm48MD8tMTowfWZ1bmN0aW9uIHVFKG4sdCl7cmV0dXJuIFpyKG4ucHJldixuLG4ubmV4dCk8MD9acihuLHQsbi5uZXh0KT49MCYmWnIobixuLnByZXYsdCk+PTA6WnIobix0LG4ucHJldik8MHx8WnIobixuLm5leHQsdCk8MH1mdW5jdGlvbiBRZGUobix0KXtsZXQgZT1uZXcgRjgobi5pLG4ueCxuLnkpLGk9bmV3IEY4KHQuaSx0LngsdC55KSxyPW4ubmV4dCxvPXQucHJldjtyZXR1cm4gbi5uZXh0PXQsdC5wcmV2PW4sZS5uZXh0PXIsci5wcmV2PWUsaS5uZXh0PWUsZS5wcmV2PWksby5uZXh0PWksaS5wcmV2PW8saX1mdW5jdGlvbiB2ZGUobix0LGUsaSl7bGV0IHI9bmV3IEY4KG4sdCxlKTtyZXR1cm4gaT8oci5uZXh0PWkubmV4dCxyLnByZXY9aSxpLm5leHQucHJldj1yLGkubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gZEUobil7bi5uZXh0LnByZXY9bi5wcmV2LG4ucHJldi5uZXh0PW4ubmV4dCxuLnByZXZaJiYobi5wcmV2Wi5uZXh0Wj1uLm5leHRaKSxuLm5leHRaJiYobi5uZXh0Wi5wcmV2Wj1uLnByZXZaKX1mdW5jdGlvbiBGOChuLHQsZSl7dGhpcy5pPW4sdGhpcy54PXQsdGhpcy55PWUsdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy56PW51bGwsdGhpcy5wcmV2Wj1udWxsLHRoaXMubmV4dFo9bnVsbCx0aGlzLnN0ZWluZXI9ITF9dmFyIEVkPWNsYXNze3N0YXRpYyBhcmVhKHQpe2xldCBlPXQubGVuZ3RoLGk9MDtmb3IobGV0IHI9ZS0xLG89MDtvPGU7cj1vKyspaSs9dFtyXS54KnRbb10ueS10W29dLngqdFtyXS55O3JldHVybi41Kml9c3RhdGljIGlzQ2xvY2tXaXNlKHQpe3JldHVybiBFZC5hcmVhKHQpPDB9c3RhdGljIHRyaWFuZ3VsYXRlU2hhcGUodCxlKXtsZXQgaT1bXSxyPVtdLG89W107eWRlKHQpLGJkZShpLHQpO2xldCBzPXQubGVuZ3RoO2UuZm9yRWFjaCh5ZGUpO2ZvcihsZXQgbD0wO2w8ZS5sZW5ndGg7bCsrKXIucHVzaChzKSxzKz1lW2xdLmxlbmd0aCxiZGUoaSxlW2xdKTtsZXQgYT1mdW5jdGlvbihuLHQsZT0yKXtsZXQgYSxsLGMsdSxkLHAsaCxpPXQmJnQubGVuZ3RoLHI9aT90WzBdKmU6bi5sZW5ndGgsbz1ZZGUobiwwLHIsZSwhMCkscz1bXTtpZighb3x8by5uZXh0PT09by5wcmV2KXJldHVybiBzO2lmKGkmJihvPWZ1bmN0aW9uKG4sdCxlLGkpe2xldCBvLHMsYSxsLGMscj1bXTtmb3Iobz0wLHM9dC5sZW5ndGg7bzxzO28rKylhPXRbb10qaSxsPW88cy0xP3RbbysxXSppOm4ubGVuZ3RoLGM9WWRlKG4sYSxsLGksITEpLGM9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLHIucHVzaChCOWUoYykpO2ZvcihyLnNvcnQoUjllKSxvPTA7bzxyLmxlbmd0aDtvKyspTzllKHJbb10sZSksZT13ZihlLGUubmV4dCk7cmV0dXJuIGV9KG4sdCxvLGUpKSxuLmxlbmd0aD44MCplKXthPWM9blswXSxsPXU9blsxXTtmb3IobGV0IGY9ZTtmPHI7Zis9ZSlkPW5bZl0scD1uW2YrMV0sZDxhJiYoYT1kKSxwPGwmJihsPXApLGQ+YyYmKGM9ZCkscD51JiYodT1wKTtoPU1hdGgubWF4KGMtYSx1LWwpLGg9MCE9PWg/MS9oOjB9cmV0dXJuIGNFKG8scyxlLGEsbCxoKSxzfShpLHIpO2ZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9MylvLnB1c2goYS5zbGljZShsLGwrMykpO3JldHVybiBvfX07ZnVuY3Rpb24geWRlKG4pe2xldCB0PW4ubGVuZ3RoO3Q+MiYmblt0LTFdLmVxdWFscyhuWzBdKSYmbi5wb3AoKX1mdW5jdGlvbiBiZGUobix0KXtmb3IobGV0IGU9MDtlPHQubGVuZ3RoO2UrKyluLnB1c2godFtlXS54KSxuLnB1c2godFtlXS55KX12YXIgU2Y9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PW5ldyBJcChbbmV3IGF0KC41LC41KSxuZXcgYXQoLS41LC41KSxuZXcgYXQoLS41LC0uNSksbmV3IGF0KC41LC0uNSldKSxlPXt9KXtzdXBlcigpLHRoaXMudHlwZT0iRXh0cnVkZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LG9wdGlvbnM6ZX0sdD1BcnJheS5pc0FycmF5KHQpP3Q6W3RdO2xldCBpPXRoaXMscj1bXSxvPVtdO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKylzKHRbYV0pO2Z1bmN0aW9uIHMoYSl7bGV0IGw9W10sYz12b2lkIDAhPT1lLmN1cnZlU2VnbWVudHM/ZS5jdXJ2ZVNlZ21lbnRzOjEyLHU9dm9pZCAwIT09ZS5zdGVwcz9lLnN0ZXBzOjEsZD12b2lkIDAhPT1lLmRlcHRoP2UuZGVwdGg6MSxwPXZvaWQgMD09PWUuYmV2ZWxFbmFibGVkfHxlLmJldmVsRW5hYmxlZCxoPXZvaWQgMCE9PWUuYmV2ZWxUaGlja25lc3M/ZS5iZXZlbFRoaWNrbmVzczouMixmPXZvaWQgMCE9PWUuYmV2ZWxTaXplP2UuYmV2ZWxTaXplOmgtLjEsbT12b2lkIDAhPT1lLmJldmVsT2Zmc2V0P2UuYmV2ZWxPZmZzZXQ6MCx4PXZvaWQgMCE9PWUuYmV2ZWxTZWdtZW50cz9lLmJldmVsU2VnbWVudHM6MyxnPWUuZXh0cnVkZVBhdGgsYj12b2lkIDAhPT1lLlVWR2VuZXJhdG9yP2UuVVZHZW5lcmF0b3I6ajllO3ZvaWQgMCE9PWUuYW1vdW50JiYoY29uc29sZS53YXJuKCJUSFJFRS5FeHRydWRlQnVmZmVyR2VvbWV0cnk6IGFtb3VudCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlcHRoLiIpLGQ9ZS5hbW91bnQpO2xldCBELGssWix6LGZlLFQ9ITE7ZyYmKEQ9Zy5nZXRTcGFjZWRQb2ludHModSksVD0hMCxwPSExLGs9Zy5jb21wdXRlRnJlbmV0RnJhbWVzKHUsITEpLFo9bmV3IGllLHo9bmV3IGllLGZlPW5ldyBpZSkscHx8KHg9MCxoPTAsZj0wLG09MCk7bGV0IHVlPWEuZXh0cmFjdFBvaW50cyhjKSxoZT11ZS5zaGFwZSx3PXVlLmhvbGVzO2lmKCFFZC5pc0Nsb2NrV2lzZShoZSkpe2hlPWhlLnJldmVyc2UoKTtmb3IobGV0IGNlPTAsZHQ9dy5sZW5ndGg7Y2U8ZHQ7Y2UrKyl7bGV0IFdlPXdbY2VdO0VkLmlzQ2xvY2tXaXNlKFdlKSYmKHdbY2VdPVdlLnJldmVyc2UoKSl9fWxldCBxPUVkLnRyaWFuZ3VsYXRlU2hhcGUoaGUsdyksSz1oZTtmb3IobGV0IGNlPTAsZHQ9dy5sZW5ndGg7Y2U8ZHQ7Y2UrKyloZT1oZS5jb25jYXQod1tjZV0pO2Z1bmN0aW9uIGRlKGNlLGR0LFdlKXtyZXR1cm4gZHR8fGNvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogdmVjIGRvZXMgbm90IGV4aXN0IiksZHQuY2xvbmUoKS5tdWx0aXBseVNjYWxhcihXZSkuYWRkKGNlKX1sZXQgWT1oZS5sZW5ndGgsYWU9cS5sZW5ndGg7ZnVuY3Rpb24gbGUoY2UsZHQsV2Upe2xldCBNdCxidCxobixvbj1jZS54LWR0LngsZmk9Y2UueS1kdC55LFdpPVdlLngtY2UueCxxaT1XZS55LWNlLnksZWU9b24qb24rZmkqZmk7aWYoTWF0aC5hYnMob24qcWktZmkqV2kpPk51bWJlci5FUFNJTE9OKXtsZXQgWGU9TWF0aC5zcXJ0KGVlKSxUdD1NYXRoLnNxcnQoV2kqV2krcWkqcWkpLG1uPWR0LngtZmkvWGUscWU9ZHQueStvbi9YZSx6dD0oKFdlLngtcWkvVHQtbW4pKnFpLShXZS55K1dpL1R0LXFlKSpXaSkvKG9uKnFpLWZpKldpKTtNdD1tbitvbip6dC1jZS54LGJ0PXFlK2ZpKnp0LWNlLnk7bGV0IFV0PU10Kk10K2J0KmJ0O2lmKFV0PD0yKXJldHVybiBuZXcgYXQoTXQsYnQpO2huPU1hdGguc3FydChVdC8yKX1lbHNle2xldCBYZT0hMTtvbj5OdW1iZXIuRVBTSUxPTj9XaT5OdW1iZXIuRVBTSUxPTiYmKFhlPSEwKTpvbjwtTnVtYmVyLkVQU0lMT04/V2k8LU51bWJlci5FUFNJTE9OJiYoWGU9ITApOk1hdGguc2lnbihmaSk9PT1NYXRoLnNpZ24ocWkpJiYoWGU9ITApLFhlPyhNdD0tZmksYnQ9b24saG49TWF0aC5zcXJ0KGVlKSk6KE10PW9uLGJ0PWZpLGhuPU1hdGguc3FydChlZS8yKSl9cmV0dXJuIG5ldyBhdChNdC9obixidC9obil9bGV0IEllPVtdO2ZvcihsZXQgY2U9MCxkdD1LLmxlbmd0aCxXZT1kdC0xLE10PWNlKzE7Y2U8ZHQ7Y2UrKyxXZSsrLE10KyspV2U9PT1kdCYmKFdlPTApLE10PT09ZHQmJihNdD0wKSxJZVtjZV09bGUoS1tjZV0sS1tXZV0sS1tNdF0pO2xldCBEZSx2ZT1bXSxudD1JZS5jb25jYXQoKTtmb3IobGV0IGNlPTAsZHQ9dy5sZW5ndGg7Y2U8ZHQ7Y2UrKyl7bGV0IFdlPXdbY2VdO0RlPVtdO2ZvcihsZXQgTXQ9MCxidD1XZS5sZW5ndGgsaG49YnQtMSxvbj1NdCsxO010PGJ0O010KyssaG4rKyxvbisrKWhuPT09YnQmJihobj0wKSxvbj09PWJ0JiYob249MCksRGVbTXRdPWxlKFdlW010XSxXZVtobl0sV2Vbb25dKTt2ZS5wdXNoKERlKSxudD1udC5jb25jYXQoRGUpfWZvcihsZXQgY2U9MDtjZTx4O2NlKyspe2xldCBkdD1jZS94LFdlPWgqTWF0aC5jb3MoZHQqTWF0aC5QSS8yKSxNdD1mKk1hdGguc2luKGR0Kk1hdGguUEkvMikrbTtmb3IobGV0IGJ0PTAsaG49Sy5sZW5ndGg7YnQ8aG47YnQrKyl7bGV0IG9uPWRlKEtbYnRdLEllW2J0XSxNdCk7cHQob24ueCxvbi55LC1XZSl9Zm9yKGxldCBidD0wLGhuPXcubGVuZ3RoO2J0PGhuO2J0Kyspe2xldCBvbj13W2J0XTtEZT12ZVtidF07Zm9yKGxldCBmaT0wLFdpPW9uLmxlbmd0aDtmaTxXaTtmaSsrKXtsZXQgcWk9ZGUob25bZmldLERlW2ZpXSxNdCk7cHQocWkueCxxaS55LC1XZSl9fX1sZXQgZ3Q9ZittO2ZvcihsZXQgY2U9MDtjZTxZO2NlKyspe2xldCBkdD1wP2RlKGhlW2NlXSxudFtjZV0sZ3QpOmhlW2NlXTtUPyh6LmNvcHkoay5ub3JtYWxzWzBdKS5tdWx0aXBseVNjYWxhcihkdC54KSxaLmNvcHkoay5iaW5vcm1hbHNbMF0pLm11bHRpcGx5U2NhbGFyKGR0LnkpLGZlLmNvcHkoRFswXSkuYWRkKHopLmFkZChaKSxwdChmZS54LGZlLnksZmUueikpOnB0KGR0LngsZHQueSwwKX1mb3IobGV0IGNlPTE7Y2U8PXU7Y2UrKylmb3IobGV0IGR0PTA7ZHQ8WTtkdCsrKXtsZXQgV2U9cD9kZShoZVtkdF0sbnRbZHRdLGd0KTpoZVtkdF07VD8oei5jb3B5KGsubm9ybWFsc1tjZV0pLm11bHRpcGx5U2NhbGFyKFdlLngpLFouY29weShrLmJpbm9ybWFsc1tjZV0pLm11bHRpcGx5U2NhbGFyKFdlLnkpLGZlLmNvcHkoRFtjZV0pLmFkZCh6KS5hZGQoWikscHQoZmUueCxmZS55LGZlLnopKTpwdChXZS54LFdlLnksZC91KmNlKX1mb3IobGV0IGNlPXgtMTtjZT49MDtjZS0tKXtsZXQgZHQ9Y2UveCxXZT1oKk1hdGguY29zKGR0Kk1hdGguUEkvMiksTXQ9ZipNYXRoLnNpbihkdCpNYXRoLlBJLzIpK207Zm9yKGxldCBidD0wLGhuPUsubGVuZ3RoO2J0PGhuO2J0Kyspe2xldCBvbj1kZShLW2J0XSxJZVtidF0sTXQpO3B0KG9uLngsb24ueSxkK1dlKX1mb3IobGV0IGJ0PTAsaG49dy5sZW5ndGg7YnQ8aG47YnQrKyl7bGV0IG9uPXdbYnRdO0RlPXZlW2J0XTtmb3IobGV0IGZpPTAsV2k9b24ubGVuZ3RoO2ZpPFdpO2ZpKyspe2xldCBxaT1kZShvbltmaV0sRGVbZmldLE10KTtUP3B0KHFpLngscWkueStEW3UtMV0ueSxEW3UtMV0ueCtXZSk6cHQocWkueCxxaS55LGQrV2UpfX19ZnVuY3Rpb24gdG4oY2UsZHQpe2xldCBXZT1jZS5sZW5ndGg7Zm9yKDstLVdlPj0wOyl7bGV0IE10PVdlLGJ0PVdlLTE7YnQ8MCYmKGJ0PWNlLmxlbmd0aC0xKTtmb3IobGV0IGhuPTAsb249dSsyKng7aG48b247aG4rKyl7bGV0IGZpPVkqaG4sV2k9WSooaG4rMSk7VGUoZHQrTXQrZmksZHQrYnQrZmksZHQrYnQrV2ksZHQrTXQrV2kpfX19ZnVuY3Rpb24gcHQoY2UsZHQsV2Upe2wucHVzaChjZSksbC5wdXNoKGR0KSxsLnB1c2goV2UpfWZ1bmN0aW9uIHd0KGNlLGR0LFdlKXt4dChjZSkseHQoZHQpLHh0KFdlKTtsZXQgTXQ9ci5sZW5ndGgvMyxidD1iLmdlbmVyYXRlVG9wVVYoaSxyLE10LTMsTXQtMixNdC0xKTttdChidFswXSksbXQoYnRbMV0pLG10KGJ0WzJdKX1mdW5jdGlvbiBUZShjZSxkdCxXZSxNdCl7eHQoY2UpLHh0KGR0KSx4dChNdCkseHQoZHQpLHh0KFdlKSx4dChNdCk7bGV0IGJ0PXIubGVuZ3RoLzMsaG49Yi5nZW5lcmF0ZVNpZGVXYWxsVVYoaSxyLGJ0LTYsYnQtMyxidC0yLGJ0LTEpO210KGhuWzBdKSxtdChoblsxXSksbXQoaG5bM10pLG10KGhuWzFdKSxtdChoblsyXSksbXQoaG5bM10pfWZ1bmN0aW9uIHh0KGNlKXtyLnB1c2gobFszKmNlKzBdKSxyLnB1c2gobFszKmNlKzFdKSxyLnB1c2gobFszKmNlKzJdKX1mdW5jdGlvbiBtdChjZSl7by5wdXNoKGNlLngpLG8ucHVzaChjZS55KX0oZnVuY3Rpb24oKXtsZXQgY2U9ci5sZW5ndGgvMztpZihwKXtsZXQgZHQ9MCxXZT1ZKmR0O2ZvcihsZXQgTXQ9MDtNdDxhZTtNdCsrKXtsZXQgYnQ9cVtNdF07d3QoYnRbMl0rV2UsYnRbMV0rV2UsYnRbMF0rV2UpfWR0PXUrMip4LFdlPVkqZHQ7Zm9yKGxldCBNdD0wO010PGFlO010Kyspe2xldCBidD1xW010XTt3dChidFswXStXZSxidFsxXStXZSxidFsyXStXZSl9fWVsc2V7Zm9yKGxldCBkdD0wO2R0PGFlO2R0Kyspe2xldCBXZT1xW2R0XTt3dChXZVsyXSxXZVsxXSxXZVswXSl9Zm9yKGxldCBkdD0wO2R0PGFlO2R0Kyspe2xldCBXZT1xW2R0XTt3dChXZVswXStZKnUsV2VbMV0rWSp1LFdlWzJdK1kqdSl9fWkuYWRkR3JvdXAoY2Usci5sZW5ndGgvMy1jZSwwKX0pKCksZnVuY3Rpb24oKXtsZXQgY2U9ci5sZW5ndGgvMyxkdD0wO3RuKEssZHQpLGR0Kz1LLmxlbmd0aDtmb3IobGV0IFdlPTAsTXQ9dy5sZW5ndGg7V2U8TXQ7V2UrKyl7bGV0IGJ0PXdbV2VdO3RuKGJ0LGR0KSxkdCs9YnQubGVuZ3RofWkuYWRkR3JvdXAoY2Usci5sZW5ndGgvMy1jZSwxKX0oKX10aGlzLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihyLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcihvLDIpKSx0aGlzLmNvbXB1dGVWZXJ0ZXhOb3JtYWxzKCl9dG9KU09OKCl7bGV0IHQ9c3VwZXIudG9KU09OKCk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtpZihlLnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgaT0wLHI9bi5sZW5ndGg7aTxyO2krKyllLnNoYXBlcy5wdXNoKG5baV0udXVpZCk7ZWxzZSBlLnNoYXBlcy5wdXNoKG4udXVpZCk7cmV0dXJuIHZvaWQgMCE9PXQuZXh0cnVkZVBhdGgmJihlLm9wdGlvbnMuZXh0cnVkZVBhdGg9dC5leHRydWRlUGF0aC50b0pTT04oKSksZX0odGhpcy5wYXJhbWV0ZXJzLnNoYXBlcyx0aGlzLnBhcmFtZXRlcnMub3B0aW9ucyx0KX1zdGF0aWMgZnJvbUpTT04odCxlKXtsZXQgaT1bXTtmb3IobGV0IG89MCxzPXQuc2hhcGVzLmxlbmd0aDtvPHM7bysrKWkucHVzaChlW3Quc2hhcGVzW29dXSk7bGV0IHI9dC5vcHRpb25zLmV4dHJ1ZGVQYXRoO3JldHVybiB2b2lkIDAhPT1yJiYodC5vcHRpb25zLmV4dHJ1ZGVQYXRoPShuZXcgcWRlW3IudHlwZV0pLmZyb21KU09OKHIpKSxuZXcgU2YoaSx0Lm9wdGlvbnMpfX0sajllPXtnZW5lcmF0ZVRvcFVWOmZ1bmN0aW9uKG4sdCxlLGkscil7bGV0IGE9dFszKmldLGw9dFszKmkrMV0sYz10WzMqcl0sdT10WzMqcisxXTtyZXR1cm5bbmV3IGF0KHRbMyplXSx0WzMqZSsxXSksbmV3IGF0KGEsbCksbmV3IGF0KGMsdSldfSxnZW5lcmF0ZVNpZGVXYWxsVVY6ZnVuY3Rpb24obix0LGUsaSxyLG8pe2xldCBzPXRbMyplXSxhPXRbMyplKzFdLGw9dFszKmUrMl0sYz10WzMqaV0sdT10WzMqaSsxXSxkPXRbMyppKzJdLHA9dFszKnJdLGg9dFszKnIrMV0sZj10WzMqcisyXSxtPXRbMypvXSx4PXRbMypvKzFdLGc9dFszKm8rMl07cmV0dXJuIE1hdGguYWJzKGEtdSk8TWF0aC5hYnMocy1jKT9bbmV3IGF0KHMsMS1sKSxuZXcgYXQoYywxLWQpLG5ldyBhdChwLDEtZiksbmV3IGF0KG0sMS1nKV06W25ldyBhdChhLDEtbCksbmV3IGF0KHUsMS1kKSxuZXcgYXQoaCwxLWYpLG5ldyBhdCh4LDEtZyldfX0sUWc9Y2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcih0PW5ldyBJcChbbmV3IGF0KDAsLjUpLG5ldyBhdCgtLjUsLS41KSxuZXcgYXQoLjUsLS41KV0pLGU9MTIpe3N1cGVyKCksdGhpcy50eXBlPSJTaGFwZUdlb21ldHJ5Iix0aGlzLnBhcmFtZXRlcnM9e3NoYXBlczp0LGN1cnZlU2VnbWVudHM6ZX07bGV0IGk9W10scj1bXSxvPVtdLHM9W10sYT0wLGw9MDtpZighMT09PUFycmF5LmlzQXJyYXkodCkpYyh0KTtlbHNlIGZvcihsZXQgdT0wO3U8dC5sZW5ndGg7dSsrKWModFt1XSksdGhpcy5hZGRHcm91cChhLGwsdSksYSs9bCxsPTA7ZnVuY3Rpb24gYyh1KXtsZXQgZD1yLmxlbmd0aC8zLHA9dS5leHRyYWN0UG9pbnRzKGUpLGg9cC5zaGFwZSxmPXAuaG9sZXM7ITE9PT1FZC5pc0Nsb2NrV2lzZShoKSYmKGg9aC5yZXZlcnNlKCkpO2ZvcihsZXQgeD0wLGc9Zi5sZW5ndGg7eDxnO3grKyl7bGV0IGI9Zlt4XTshMD09PUVkLmlzQ2xvY2tXaXNlKGIpJiYoZlt4XT1iLnJldmVyc2UoKSl9bGV0IG09RWQudHJpYW5ndWxhdGVTaGFwZShoLGYpO2ZvcihsZXQgeD0wLGc9Zi5sZW5ndGg7eDxnO3grKyloPWguY29uY2F0KGZbeF0pO2ZvcihsZXQgeD0wLGc9aC5sZW5ndGg7eDxnO3grKyl7bGV0IGI9aFt4XTtyLnB1c2goYi54LGIueSwwKSxvLnB1c2goMCwwLDEpLHMucHVzaChiLngsYi55KX1mb3IobGV0IHg9MCxnPW0ubGVuZ3RoO3g8Zzt4Kyspe2xldCBiPW1beF07aS5wdXNoKGJbMF0rZCxiWzFdK2QsYlsyXStkKSxsKz0zfX10aGlzLnNldEluZGV4KGkpLHRoaXMuc2V0QXR0cmlidXRlKCJwb3NpdGlvbiIsbmV3IEpyKHIsMykpLHRoaXMuc2V0QXR0cmlidXRlKCJub3JtYWwiLG5ldyBKcihvLDMpKSx0aGlzLnNldEF0dHJpYnV0ZSgidXYiLG5ldyBKcihzLDIpKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04oKTtyZXR1cm4gZnVuY3Rpb24obix0KXtpZih0LnNoYXBlcz1bXSxBcnJheS5pc0FycmF5KG4pKWZvcihsZXQgZT0wLGk9bi5sZW5ndGg7ZTxpO2UrKyl0LnNoYXBlcy5wdXNoKG5bZV0udXVpZCk7ZWxzZSB0LnNoYXBlcy5wdXNoKG4udXVpZCk7cmV0dXJuIHR9KHRoaXMucGFyYW1ldGVycy5zaGFwZXMsdCl9c3RhdGljIGZyb21KU09OKHQsZSl7bGV0IGk9W107Zm9yKGxldCByPTAsbz10LnNoYXBlcy5sZW5ndGg7cjxvO3IrKylpLnB1c2goZVt0LnNoYXBlc1tyXV0pO3JldHVybiBuZXcgUWcoaSx0LmN1cnZlU2VnbWVudHMpfX07KGNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLnR5cGU9IlNoYWRvd01hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigwKSx0aGlzLnRyYW5zcGFyZW50PSEwLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXN9fSkucHJvdG90eXBlLmlzU2hhZG93TWF0ZXJpYWw9ITA7dmFyIENrPWNsYXNzIGV4dGVuZHMgaHN7Y29uc3RydWN0b3IodCl7c3VwZXIoKSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLnR5cGU9Ik1lc2hTdGFuZGFyZE1hdGVyaWFsIix0aGlzLmNvbG9yPW5ldyB2bigxNjc3NzIxNSksdGhpcy5yb3VnaG5lc3M9MSx0aGlzLm1ldGFsbmVzcz0wLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHZuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5idW1wTWFwPW51bGwsdGhpcy5idW1wU2NhbGU9MSx0aGlzLm5vcm1hbE1hcD1udWxsLHRoaXMubm9ybWFsTWFwVHlwZT0wLHRoaXMubm9ybWFsU2NhbGU9bmV3IGF0KDEsMSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9bnVsbCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPTEsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPTAsdGhpcy5yb3VnaG5lc3NNYXA9bnVsbCx0aGlzLm1ldGFsbmVzc01hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuZW52TWFwSW50ZW5zaXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuZmxhdFNoYWRpbmc9ITEsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5yb3VnaG5lc3M9dC5yb3VnaG5lc3MsdGhpcy5tZXRhbG5lc3M9dC5tZXRhbG5lc3MsdGhpcy5tYXA9dC5tYXAsdGhpcy5saWdodE1hcD10LmxpZ2h0TWFwLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9dC5saWdodE1hcEludGVuc2l0eSx0aGlzLmFvTWFwPXQuYW9NYXAsdGhpcy5hb01hcEludGVuc2l0eT10LmFvTWFwSW50ZW5zaXR5LHRoaXMuZW1pc3NpdmUuY29weSh0LmVtaXNzaXZlKSx0aGlzLmVtaXNzaXZlTWFwPXQuZW1pc3NpdmVNYXAsdGhpcy5lbWlzc2l2ZUludGVuc2l0eT10LmVtaXNzaXZlSW50ZW5zaXR5LHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy5yb3VnaG5lc3NNYXA9dC5yb3VnaG5lc3NNYXAsdGhpcy5tZXRhbG5lc3NNYXA9dC5tZXRhbG5lc3NNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuZW52TWFwSW50ZW5zaXR5PXQuZW52TWFwSW50ZW5zaXR5LHRoaXMucmVmcmFjdGlvblJhdGlvPXQucmVmcmFjdGlvblJhdGlvLHRoaXMud2lyZWZyYW1lPXQud2lyZWZyYW1lLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPXQud2lyZWZyYW1lTGluZXdpZHRoLHRoaXMud2lyZWZyYW1lTGluZWNhcD10LndpcmVmcmFtZUxpbmVjYXAsdGhpcy53aXJlZnJhbWVMaW5lam9pbj10LndpcmVmcmFtZUxpbmVqb2luLHRoaXMuZmxhdFNoYWRpbmc9dC5mbGF0U2hhZGluZyx0aGlzfX07Q2sucHJvdG90eXBlLmlzTWVzaFN0YW5kYXJkTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBDa3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17U1RBTkRBUkQ6IiIsUEhZU0lDQUw6IiJ9LHRoaXMudHlwZT0iTWVzaFBoeXNpY2FsTWF0ZXJpYWwiLHRoaXMuY2xlYXJjb2F0TWFwPW51bGwsdGhpcy5jbGVhcmNvYXRSb3VnaG5lc3M9MCx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD1udWxsLHRoaXMuY2xlYXJjb2F0Tm9ybWFsU2NhbGU9bmV3IGF0KDEsMSksdGhpcy5jbGVhcmNvYXROb3JtYWxNYXA9bnVsbCx0aGlzLmlvcj0xLjUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInJlZmxlY3Rpdml0eSIse2dldDpmdW5jdGlvbigpe3JldHVybiBHYSgyLjUqKHRoaXMuaW9yLTEpLyh0aGlzLmlvcisxKSwwLDEpfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5pb3I9KDErLjQqZSkvKDEtLjQqZSl9fSksdGhpcy5zaGVlbkNvbG9yPW5ldyB2bigwKSx0aGlzLnNoZWVuQ29sb3JNYXA9bnVsbCx0aGlzLnNoZWVuUm91Z2huZXNzPTEsdGhpcy5zaGVlblJvdWdobmVzc01hcD1udWxsLHRoaXMudHJhbnNtaXNzaW9uTWFwPW51bGwsdGhpcy50aGlja25lc3M9MCx0aGlzLnRoaWNrbmVzc01hcD1udWxsLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT0wLHRoaXMuYXR0ZW51YXRpb25Db2xvcj1uZXcgdm4oMSwxLDEpLHRoaXMuc3BlY3VsYXJJbnRlbnNpdHk9MSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5TWFwPW51bGwsdGhpcy5zcGVjdWxhckNvbG9yPW5ldyB2bigxLDEsMSksdGhpcy5zcGVjdWxhckNvbG9yTWFwPW51bGwsdGhpcy5fc2hlZW49MCx0aGlzLl9jbGVhcmNvYXQ9MCx0aGlzLl90cmFuc21pc3Npb249MCx0aGlzLnNldFZhbHVlcyh0KX1nZXQgc2hlZW4oKXtyZXR1cm4gdGhpcy5fc2hlZW59c2V0IHNoZWVuKHQpe3RoaXMuX3NoZWVuPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fc2hlZW49dH1nZXQgY2xlYXJjb2F0KCl7cmV0dXJuIHRoaXMuX2NsZWFyY29hdH1zZXQgY2xlYXJjb2F0KHQpe3RoaXMuX2NsZWFyY29hdD4wIT10PjAmJnRoaXMudmVyc2lvbisrLHRoaXMuX2NsZWFyY29hdD10fWdldCB0cmFuc21pc3Npb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNtaXNzaW9ufXNldCB0cmFuc21pc3Npb24odCl7dGhpcy5fdHJhbnNtaXNzaW9uPjAhPXQ+MCYmdGhpcy52ZXJzaW9uKyssdGhpcy5fdHJhbnNtaXNzaW9uPXR9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRlZmluZXM9e1NUQU5EQVJEOiIiLFBIWVNJQ0FMOiIifSx0aGlzLmNsZWFyY29hdD10LmNsZWFyY29hdCx0aGlzLmNsZWFyY29hdE1hcD10LmNsZWFyY29hdE1hcCx0aGlzLmNsZWFyY29hdFJvdWdobmVzcz10LmNsZWFyY29hdFJvdWdobmVzcyx0aGlzLmNsZWFyY29hdFJvdWdobmVzc01hcD10LmNsZWFyY29hdFJvdWdobmVzc01hcCx0aGlzLmNsZWFyY29hdE5vcm1hbE1hcD10LmNsZWFyY29hdE5vcm1hbE1hcCx0aGlzLmNsZWFyY29hdE5vcm1hbFNjYWxlLmNvcHkodC5jbGVhcmNvYXROb3JtYWxTY2FsZSksdGhpcy5pb3I9dC5pb3IsdGhpcy5zaGVlbj10LnNoZWVuLHRoaXMuc2hlZW5Db2xvci5jb3B5KHQuc2hlZW5Db2xvciksdGhpcy5zaGVlbkNvbG9yTWFwPXQuc2hlZW5Db2xvck1hcCx0aGlzLnNoZWVuUm91Z2huZXNzPXQuc2hlZW5Sb3VnaG5lc3MsdGhpcy5zaGVlblJvdWdobmVzc01hcD10LnNoZWVuUm91Z2huZXNzTWFwLHRoaXMudHJhbnNtaXNzaW9uPXQudHJhbnNtaXNzaW9uLHRoaXMudHJhbnNtaXNzaW9uTWFwPXQudHJhbnNtaXNzaW9uTWFwLHRoaXMudGhpY2tuZXNzPXQudGhpY2tuZXNzLHRoaXMudGhpY2tuZXNzTWFwPXQudGhpY2tuZXNzTWFwLHRoaXMuYXR0ZW51YXRpb25EaXN0YW5jZT10LmF0dGVudWF0aW9uRGlzdGFuY2UsdGhpcy5hdHRlbnVhdGlvbkNvbG9yLmNvcHkodC5hdHRlbnVhdGlvbkNvbG9yKSx0aGlzLnNwZWN1bGFySW50ZW5zaXR5PXQuc3BlY3VsYXJJbnRlbnNpdHksdGhpcy5zcGVjdWxhckludGVuc2l0eU1hcD10LnNwZWN1bGFySW50ZW5zaXR5TWFwLHRoaXMuc3BlY3VsYXJDb2xvci5jb3B5KHQuc3BlY3VsYXJDb2xvciksdGhpcy5zcGVjdWxhckNvbG9yTWFwPXQuc3BlY3VsYXJDb2xvck1hcCx0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFBoeXNpY2FsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaFBob25nTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHZuKDE2Nzc3MjE1KSx0aGlzLnNwZWN1bGFyPW5ldyB2bigxMTE4NDgxKSx0aGlzLnNoaW5pbmVzcz0zMCx0aGlzLm1hcD1udWxsLHRoaXMubGlnaHRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PTEsdGhpcy5hb01hcD1udWxsLHRoaXMuYW9NYXBJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlPW5ldyB2bigwKSx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZU1hcD1udWxsLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBhdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMuc3BlY3VsYXJNYXA9bnVsbCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5lbnZNYXA9bnVsbCx0aGlzLmNvbWJpbmU9MCx0aGlzLnJlZmxlY3Rpdml0eT0xLHRoaXMucmVmcmFjdGlvblJhdGlvPS45OCx0aGlzLndpcmVmcmFtZT0hMSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD0xLHRoaXMud2lyZWZyYW1lTGluZWNhcD0icm91bmQiLHRoaXMud2lyZWZyYW1lTGluZWpvaW49InJvdW5kIix0aGlzLmZsYXRTaGFkaW5nPSExLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuc3BlY3VsYXIuY29weSh0LnNwZWN1bGFyKSx0aGlzLnNoaW5pbmVzcz10LnNoaW5pbmVzcyx0aGlzLm1hcD10Lm1hcCx0aGlzLmxpZ2h0TWFwPXQubGlnaHRNYXAsdGhpcy5saWdodE1hcEludGVuc2l0eT10LmxpZ2h0TWFwSW50ZW5zaXR5LHRoaXMuYW9NYXA9dC5hb01hcCx0aGlzLmFvTWFwSW50ZW5zaXR5PXQuYW9NYXBJbnRlbnNpdHksdGhpcy5lbWlzc2l2ZS5jb3B5KHQuZW1pc3NpdmUpLHRoaXMuZW1pc3NpdmVNYXA9dC5lbWlzc2l2ZU1hcCx0aGlzLmVtaXNzaXZlSW50ZW5zaXR5PXQuZW1pc3NpdmVJbnRlbnNpdHksdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoUGhvbmdNYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy5kZWZpbmVzPXtUT09OOiIifSx0aGlzLnR5cGU9Ik1lc2hUb29uTWF0ZXJpYWwiLHRoaXMuY29sb3I9bmV3IHZuKDE2Nzc3MjE1KSx0aGlzLm1hcD1udWxsLHRoaXMuZ3JhZGllbnRNYXA9bnVsbCx0aGlzLmxpZ2h0TWFwPW51bGwsdGhpcy5saWdodE1hcEludGVuc2l0eT0xLHRoaXMuYW9NYXA9bnVsbCx0aGlzLmFvTWFwSW50ZW5zaXR5PTEsdGhpcy5lbWlzc2l2ZT1uZXcgdm4oMCksdGhpcy5lbWlzc2l2ZUludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmVNYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgYXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy53aXJlZnJhbWU9ITEsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9MSx0aGlzLndpcmVmcmFtZUxpbmVjYXA9InJvdW5kIix0aGlzLndpcmVmcmFtZUxpbmVqb2luPSJyb3VuZCIsdGhpcy5zZXRWYWx1ZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXA9dC5tYXAsdGhpcy5ncmFkaWVudE1hcD10LmdyYWRpZW50TWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLmJ1bXBNYXA9dC5idW1wTWFwLHRoaXMuYnVtcFNjYWxlPXQuYnVtcFNjYWxlLHRoaXMubm9ybWFsTWFwPXQubm9ybWFsTWFwLHRoaXMubm9ybWFsTWFwVHlwZT10Lm5vcm1hbE1hcFR5cGUsdGhpcy5ub3JtYWxTY2FsZS5jb3B5KHQubm9ybWFsU2NhbGUpLHRoaXMuZGlzcGxhY2VtZW50TWFwPXQuZGlzcGxhY2VtZW50TWFwLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9dC5kaXNwbGFjZW1lbnRTY2FsZSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9dC5kaXNwbGFjZW1lbnRCaWFzLHRoaXMuYWxwaGFNYXA9dC5hbHBoYU1hcCx0aGlzLndpcmVmcmFtZT10LndpcmVmcmFtZSx0aGlzLndpcmVmcmFtZUxpbmV3aWR0aD10LndpcmVmcmFtZUxpbmV3aWR0aCx0aGlzLndpcmVmcmFtZUxpbmVjYXA9dC53aXJlZnJhbWVMaW5lY2FwLHRoaXMud2lyZWZyYW1lTGluZWpvaW49dC53aXJlZnJhbWVMaW5lam9pbix0aGlzfX0ucHJvdG90eXBlLmlzTWVzaFRvb25NYXRlcmlhbD0hMCxjbGFzcyBleHRlbmRzIGhze2NvbnN0cnVjdG9yKHQpe3N1cGVyKCksdGhpcy50eXBlPSJNZXNoTm9ybWFsTWF0ZXJpYWwiLHRoaXMuYnVtcE1hcD1udWxsLHRoaXMuYnVtcFNjYWxlPTEsdGhpcy5ub3JtYWxNYXA9bnVsbCx0aGlzLm5vcm1hbE1hcFR5cGU9MCx0aGlzLm5vcm1hbFNjYWxlPW5ldyBhdCgxLDEpLHRoaXMuZGlzcGxhY2VtZW50TWFwPW51bGwsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT0xLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz0wLHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy5mb2c9ITEsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuYnVtcE1hcD10LmJ1bXBNYXAsdGhpcy5idW1wU2NhbGU9dC5idW1wU2NhbGUsdGhpcy5ub3JtYWxNYXA9dC5ub3JtYWxNYXAsdGhpcy5ub3JtYWxNYXBUeXBlPXQubm9ybWFsTWFwVHlwZSx0aGlzLm5vcm1hbFNjYWxlLmNvcHkodC5ub3JtYWxTY2FsZSksdGhpcy5kaXNwbGFjZW1lbnRNYXA9dC5kaXNwbGFjZW1lbnRNYXAsdGhpcy5kaXNwbGFjZW1lbnRTY2FsZT10LmRpc3BsYWNlbWVudFNjYWxlLHRoaXMuZGlzcGxhY2VtZW50Qmlhcz10LmRpc3BsYWNlbWVudEJpYXMsdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTm9ybWFsTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTWVzaExhbWJlcnRNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgdm4oMTY3NzcyMTUpLHRoaXMubWFwPW51bGwsdGhpcy5saWdodE1hcD1udWxsLHRoaXMubGlnaHRNYXBJbnRlbnNpdHk9MSx0aGlzLmFvTWFwPW51bGwsdGhpcy5hb01hcEludGVuc2l0eT0xLHRoaXMuZW1pc3NpdmU9bmV3IHZuKDApLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9MSx0aGlzLmVtaXNzaXZlTWFwPW51bGwsdGhpcy5zcGVjdWxhck1hcD1udWxsLHRoaXMuYWxwaGFNYXA9bnVsbCx0aGlzLmVudk1hcD1udWxsLHRoaXMuY29tYmluZT0wLHRoaXMucmVmbGVjdGl2aXR5PTEsdGhpcy5yZWZyYWN0aW9uUmF0aW89Ljk4LHRoaXMud2lyZWZyYW1lPSExLHRoaXMud2lyZWZyYW1lTGluZXdpZHRoPTEsdGhpcy53aXJlZnJhbWVMaW5lY2FwPSJyb3VuZCIsdGhpcy53aXJlZnJhbWVMaW5lam9pbj0icm91bmQiLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMubWFwPXQubWFwLHRoaXMubGlnaHRNYXA9dC5saWdodE1hcCx0aGlzLmxpZ2h0TWFwSW50ZW5zaXR5PXQubGlnaHRNYXBJbnRlbnNpdHksdGhpcy5hb01hcD10LmFvTWFwLHRoaXMuYW9NYXBJbnRlbnNpdHk9dC5hb01hcEludGVuc2l0eSx0aGlzLmVtaXNzaXZlLmNvcHkodC5lbWlzc2l2ZSksdGhpcy5lbWlzc2l2ZU1hcD10LmVtaXNzaXZlTWFwLHRoaXMuZW1pc3NpdmVJbnRlbnNpdHk9dC5lbWlzc2l2ZUludGVuc2l0eSx0aGlzLnNwZWN1bGFyTWFwPXQuc3BlY3VsYXJNYXAsdGhpcy5hbHBoYU1hcD10LmFscGhhTWFwLHRoaXMuZW52TWFwPXQuZW52TWFwLHRoaXMuY29tYmluZT10LmNvbWJpbmUsdGhpcy5yZWZsZWN0aXZpdHk9dC5yZWZsZWN0aXZpdHksdGhpcy5yZWZyYWN0aW9uUmF0aW89dC5yZWZyYWN0aW9uUmF0aW8sdGhpcy53aXJlZnJhbWU9dC53aXJlZnJhbWUsdGhpcy53aXJlZnJhbWVMaW5ld2lkdGg9dC53aXJlZnJhbWVMaW5ld2lkdGgsdGhpcy53aXJlZnJhbWVMaW5lY2FwPXQud2lyZWZyYW1lTGluZWNhcCx0aGlzLndpcmVmcmFtZUxpbmVqb2luPXQud2lyZWZyYW1lTGluZWpvaW4sdGhpc319LnByb3RvdHlwZS5pc01lc2hMYW1iZXJ0TWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBoc3tjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLnR5cGU9Ik1lc2hNYXRjYXBNYXRlcmlhbCIsdGhpcy5jb2xvcj1uZXcgdm4oMTY3NzcyMTUpLHRoaXMubWF0Y2FwPW51bGwsdGhpcy5tYXA9bnVsbCx0aGlzLmJ1bXBNYXA9bnVsbCx0aGlzLmJ1bXBTY2FsZT0xLHRoaXMubm9ybWFsTWFwPW51bGwsdGhpcy5ub3JtYWxNYXBUeXBlPTAsdGhpcy5ub3JtYWxTY2FsZT1uZXcgYXQoMSwxKSx0aGlzLmRpc3BsYWNlbWVudE1hcD1udWxsLHRoaXMuZGlzcGxhY2VtZW50U2NhbGU9MSx0aGlzLmRpc3BsYWNlbWVudEJpYXM9MCx0aGlzLmFscGhhTWFwPW51bGwsdGhpcy5mbGF0U2hhZGluZz0hMSx0aGlzLnNldFZhbHVlcyh0KX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuZGVmaW5lcz17TUFUQ0FQOiIifSx0aGlzLmNvbG9yLmNvcHkodC5jb2xvciksdGhpcy5tYXRjYXA9dC5tYXRjYXAsdGhpcy5tYXA9dC5tYXAsdGhpcy5idW1wTWFwPXQuYnVtcE1hcCx0aGlzLmJ1bXBTY2FsZT10LmJ1bXBTY2FsZSx0aGlzLm5vcm1hbE1hcD10Lm5vcm1hbE1hcCx0aGlzLm5vcm1hbE1hcFR5cGU9dC5ub3JtYWxNYXBUeXBlLHRoaXMubm9ybWFsU2NhbGUuY29weSh0Lm5vcm1hbFNjYWxlKSx0aGlzLmRpc3BsYWNlbWVudE1hcD10LmRpc3BsYWNlbWVudE1hcCx0aGlzLmRpc3BsYWNlbWVudFNjYWxlPXQuZGlzcGxhY2VtZW50U2NhbGUsdGhpcy5kaXNwbGFjZW1lbnRCaWFzPXQuZGlzcGxhY2VtZW50Qmlhcyx0aGlzLmFscGhhTWFwPXQuYWxwaGFNYXAsdGhpcy5mbGF0U2hhZGluZz10LmZsYXRTaGFkaW5nLHRoaXN9fS5wcm90b3R5cGUuaXNNZXNoTWF0Y2FwTWF0ZXJpYWw9ITAsY2xhc3MgZXh0ZW5kcyBBcHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iTGluZURhc2hlZE1hdGVyaWFsIix0aGlzLnNjYWxlPTEsdGhpcy5kYXNoU2l6ZT0zLHRoaXMuZ2FwU2l6ZT0xLHRoaXMuc2V0VmFsdWVzKHQpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zY2FsZT10LnNjYWxlLHRoaXMuZGFzaFNpemU9dC5kYXNoU2l6ZSx0aGlzLmdhcFNpemU9dC5nYXBTaXplLHRoaXN9fS5wcm90b3R5cGUuaXNMaW5lRGFzaGVkTWF0ZXJpYWw9ITA7dmFyIHFyPXthcnJheVNsaWNlOmZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gcXIuaXNUeXBlZEFycmF5KG4pP25ldyBuLmNvbnN0cnVjdG9yKG4uc3ViYXJyYXkodCx2b2lkIDAhPT1lP2U6bi5sZW5ndGgpKTpuLnNsaWNlKHQsZSl9LGNvbnZlcnRBcnJheTpmdW5jdGlvbihuLHQsZSl7cmV0dXJuIW58fCFlJiZuLmNvbnN0cnVjdG9yPT09dD9uOiJudW1iZXIiPT10eXBlb2YgdC5CWVRFU19QRVJfRUxFTUVOVD9uZXcgdChuKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChuKX0saXNUeXBlZEFycmF5OmZ1bmN0aW9uKG4pe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcobikmJiEobiBpbnN0YW5jZW9mIERhdGFWaWV3KX0sZ2V0S2V5ZnJhbWVPcmRlcjpmdW5jdGlvbihuKXtsZXQgZT1uLmxlbmd0aCxpPW5ldyBBcnJheShlKTtmb3IobGV0IHI9MDtyIT09ZTsrK3IpaVtyXT1yO3JldHVybiBpLnNvcnQoZnVuY3Rpb24ocixvKXtyZXR1cm4gbltyXS1uW29dfSksaX0sc29ydGVkQXJyYXk6ZnVuY3Rpb24obix0LGUpe2xldCBpPW4ubGVuZ3RoLHI9bmV3IG4uY29uc3RydWN0b3IoaSk7Zm9yKGxldCBvPTAscz0wO3MhPT1pOysrbyl7bGV0IGE9ZVtvXSp0O2ZvcihsZXQgbD0wO2whPT10OysrbClyW3MrK109blthK2xdfXJldHVybiByfSxmbGF0dGVuSlNPTjpmdW5jdGlvbihuLHQsZSxpKXtsZXQgcj0xLG89blswXTtmb3IoO3ZvaWQgMCE9PW8mJnZvaWQgMD09PW9baV07KW89bltyKytdO2lmKHZvaWQgMD09PW8pcmV0dXJuO2xldCBzPW9baV07aWYodm9pZCAwIT09cylpZihBcnJheS5pc0FycmF5KHMpKWRve3M9b1tpXSx2b2lkIDAhPT1zJiYodC5wdXNoKG8udGltZSksZS5wdXNoLmFwcGx5KGUscykpLG89bltyKytdfXdoaWxlKHZvaWQgMCE9PW8pO2Vsc2UgaWYodm9pZCAwIT09cy50b0FycmF5KWRve3M9b1tpXSx2b2lkIDAhPT1zJiYodC5wdXNoKG8udGltZSkscy50b0FycmF5KGUsZS5sZW5ndGgpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKTtlbHNlIGRve3M9b1tpXSx2b2lkIDAhPT1zJiYodC5wdXNoKG8udGltZSksZS5wdXNoKHMpKSxvPW5bcisrXX13aGlsZSh2b2lkIDAhPT1vKX0sc3ViY2xpcDpmdW5jdGlvbihuLHQsZSxpLHI9MzApe2xldCBvPW4uY2xvbmUoKTtvLm5hbWU9dDtsZXQgcz1bXTtmb3IobGV0IGw9MDtsPG8udHJhY2tzLmxlbmd0aDsrK2wpe2xldCBjPW8udHJhY2tzW2xdLHU9Yy5nZXRWYWx1ZVNpemUoKSxkPVtdLHA9W107Zm9yKGxldCBoPTA7aDxjLnRpbWVzLmxlbmd0aDsrK2gpe2xldCBmPWMudGltZXNbaF0qcjtpZighKGY8ZXx8Zj49aSkpe2QucHVzaChjLnRpbWVzW2hdKTtmb3IobGV0IG09MDttPHU7KyttKXAucHVzaChjLnZhbHVlc1toKnUrbV0pfX0wIT09ZC5sZW5ndGgmJihjLnRpbWVzPXFyLmNvbnZlcnRBcnJheShkLGMudGltZXMuY29uc3RydWN0b3IpLGMudmFsdWVzPXFyLmNvbnZlcnRBcnJheShwLGMudmFsdWVzLmNvbnN0cnVjdG9yKSxzLnB1c2goYykpfW8udHJhY2tzPXM7bGV0IGE9MS8wO2ZvcihsZXQgbD0wO2w8by50cmFja3MubGVuZ3RoOysrbClhPm8udHJhY2tzW2xdLnRpbWVzWzBdJiYoYT1vLnRyYWNrc1tsXS50aW1lc1swXSk7Zm9yKGxldCBsPTA7bDxvLnRyYWNrcy5sZW5ndGg7KytsKW8udHJhY2tzW2xdLnNoaWZ0KC0xKmEpO3JldHVybiBvLnJlc2V0RHVyYXRpb24oKSxvfSxtYWtlQ2xpcEFkZGl0aXZlOmZ1bmN0aW9uKG4sdD0wLGU9bixpPTMwKXtpPD0wJiYoaT0zMCk7bGV0IHI9ZS50cmFja3MubGVuZ3RoLG89dC9pO2ZvcihsZXQgcz0wO3M8cjsrK3Mpe2xldCBhPWUudHJhY2tzW3NdLGw9YS5WYWx1ZVR5cGVOYW1lO2lmKCJib29sIj09PWx8fCJzdHJpbmciPT09bCljb250aW51ZTtsZXQgYz1uLnRyYWNrcy5maW5kKGZ1bmN0aW9uKGcpe3JldHVybiBnLm5hbWU9PT1hLm5hbWUmJmcuVmFsdWVUeXBlTmFtZT09PWx9KTtpZih2b2lkIDA9PT1jKWNvbnRpbnVlO2xldCB1PTAsZD1hLmdldFZhbHVlU2l6ZSgpO2EuY3JlYXRlSW50ZXJwb2xhbnQuaXNJbnRlcnBvbGFudEZhY3RvcnlNZXRob2RHTFRGQ3ViaWNTcGxpbmUmJih1PWQvMyk7bGV0IHA9MCxoPWMuZ2V0VmFsdWVTaXplKCk7Yy5jcmVhdGVJbnRlcnBvbGFudC5pc0ludGVycG9sYW50RmFjdG9yeU1ldGhvZEdMVEZDdWJpY1NwbGluZSYmKHA9aC8zKTtsZXQgbSxmPWEudGltZXMubGVuZ3RoLTE7aWYobzw9YS50aW1lc1swXSltPXFyLmFycmF5U2xpY2UoYS52YWx1ZXMsdSxkLXUpO2Vsc2UgaWYobz49YS50aW1lc1tmXSl7bGV0IGc9ZipkK3U7bT1xci5hcnJheVNsaWNlKGEudmFsdWVzLGcsZytkLXUpfWVsc2V7bGV0IGc9YS5jcmVhdGVJbnRlcnBvbGFudCgpLGI9dSxEPWQtdTtnLmV2YWx1YXRlKG8pLG09cXIuYXJyYXlTbGljZShnLnJlc3VsdEJ1ZmZlcixiLEQpfSJxdWF0ZXJuaW9uIj09PWwmJihuZXcgcXMpLmZyb21BcnJheShtKS5ub3JtYWxpemUoKS5jb25qdWdhdGUoKS50b0FycmF5KG0pO2xldCB4PWMudGltZXMubGVuZ3RoO2ZvcihsZXQgZz0wO2c8eDsrK2cpe2xldCBiPWcqaCtwO2lmKCJxdWF0ZXJuaW9uIj09PWwpcXMubXVsdGlwbHlRdWF0ZXJuaW9uc0ZsYXQoYy52YWx1ZXMsYixtLDAsYy52YWx1ZXMsYik7ZWxzZXtsZXQgRD1oLTIqcDtmb3IobGV0IFQ9MDtUPEQ7KytUKWMudmFsdWVzW2IrVF0tPW1bVF19fX1yZXR1cm4gbi5ibGVuZE1vZGU9MjUwMSxufX0sVGQ9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5wYXJhbWV0ZXJQb3NpdGlvbnM9dCx0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMucmVzdWx0QnVmZmVyPXZvaWQgMCE9PXI/cjpuZXcgZS5jb25zdHJ1Y3RvcihpKSx0aGlzLnNhbXBsZVZhbHVlcz1lLHRoaXMudmFsdWVTaXplPWksdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17fX1ldmFsdWF0ZSh0KXtsZXQgZT10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxpPXRoaXMuX2NhY2hlZEluZGV4LHI9ZVtpXSxvPWVbaS0xXTtlOnt0OntsZXQgcztuOntpOmlmKCEodDxyKSl7Zm9yKGxldCBhPWkrMjs7KXtpZih2b2lkIDA9PT1yKXtpZih0PG8pYnJlYWsgaTtyZXR1cm4gaT1lLmxlbmd0aCx0aGlzLl9jYWNoZWRJbmRleD1pLHRoaXMuYWZ0ZXJFbmRfKGktMSx0LG8pfWlmKGk9PT1hKWJyZWFrO2lmKG89cixyPWVbKytpXSx0PHIpYnJlYWsgdH1zPWUubGVuZ3RoO2JyZWFrIG59aWYodD49bylicmVhayBlO3tsZXQgYT1lWzFdO3Q8YSYmKGk9MixvPWEpO2ZvcihsZXQgbD1pLTI7Oyl7aWYodm9pZCAwPT09bylyZXR1cm4gdGhpcy5fY2FjaGVkSW5kZXg9MCx0aGlzLmJlZm9yZVN0YXJ0XygwLHQscik7aWYoaT09PWwpYnJlYWs7aWYocj1vLG89ZVstLWktMV0sdD49bylicmVhayB0fXM9aSxpPTB9fWZvcig7aTxzOyl7bGV0IGE9aStzPj4+MTt0PGVbYV0/cz1hOmk9YSsxfWlmKHI9ZVtpXSxvPWVbaS0xXSx2b2lkIDA9PT1vKXJldHVybiB0aGlzLl9jYWNoZWRJbmRleD0wLHRoaXMuYmVmb3JlU3RhcnRfKDAsdCxyKTtpZih2b2lkIDA9PT1yKXJldHVybiBpPWUubGVuZ3RoLHRoaXMuX2NhY2hlZEluZGV4PWksdGhpcy5hZnRlckVuZF8oaS0xLG8sdCl9dGhpcy5fY2FjaGVkSW5kZXg9aSx0aGlzLmludGVydmFsQ2hhbmdlZF8oaSxvLHIpfXJldHVybiB0aGlzLmludGVycG9sYXRlXyhpLG8sdCxyKX1nZXRTZXR0aW5nc18oKXtyZXR1cm4gdGhpcy5zZXR0aW5nc3x8dGhpcy5EZWZhdWx0U2V0dGluZ3NffWNvcHlTYW1wbGVWYWx1ZV8odCl7bGV0IGU9dGhpcy5yZXN1bHRCdWZmZXIsaT10aGlzLnNhbXBsZVZhbHVlcyxyPXRoaXMudmFsdWVTaXplLG89dCpyO2ZvcihsZXQgcz0wO3MhPT1yOysrcyllW3NdPWlbbytzXTtyZXR1cm4gZX1pbnRlcnBvbGF0ZV8oKXt0aHJvdyBuZXcgRXJyb3IoImNhbGwgdG8gYWJzdHJhY3QgbWV0aG9kIil9aW50ZXJ2YWxDaGFuZ2VkXygpe319O1RkLnByb3RvdHlwZS5iZWZvcmVTdGFydF89VGQucHJvdG90eXBlLmNvcHlTYW1wbGVWYWx1ZV8sVGQucHJvdG90eXBlLmFmdGVyRW5kXz1UZC5wcm90b3R5cGUuY29weVNhbXBsZVZhbHVlXzt2YXIgRzg9Y2xhc3MgZXh0ZW5kcyBUZHtjb25zdHJ1Y3Rvcih0LGUsaSxyKXtzdXBlcih0LGUsaSxyKSx0aGlzLl93ZWlnaHRQcmV2PS0wLHRoaXMuX29mZnNldFByZXY9LTAsdGhpcy5fd2VpZ2h0TmV4dD0tMCx0aGlzLl9vZmZzZXROZXh0PS0wLHRoaXMuRGVmYXVsdFNldHRpbmdzXz17ZW5kaW5nU3RhcnQ6b2IsZW5kaW5nRW5kOm9ifX1pbnRlcnZhbENoYW5nZWRfKHQsZSxpKXtsZXQgcj10aGlzLnBhcmFtZXRlclBvc2l0aW9ucyxvPXQtMixzPXQrMSxhPXJbb10sbD1yW3NdO2lmKHZvaWQgMD09PWEpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nU3RhcnQpe2Nhc2Ugc2I6bz10LGE9MiplLWk7YnJlYWs7Y2FzZSAyNDAyOm89ci5sZW5ndGgtMixhPWUrcltvXS1yW28rMV07YnJlYWs7ZGVmYXVsdDpvPXQsYT1pfWlmKHZvaWQgMD09PWwpc3dpdGNoKHRoaXMuZ2V0U2V0dGluZ3NfKCkuZW5kaW5nRW5kKXtjYXNlIHNiOnM9dCxsPTIqaS1lO2JyZWFrO2Nhc2UgMjQwMjpzPTEsbD1pK3JbMV0tclswXTticmVhaztkZWZhdWx0OnM9dC0xLGw9ZX1sZXQgYz0uNSooaS1lKSx1PXRoaXMudmFsdWVTaXplO3RoaXMuX3dlaWdodFByZXY9Yy8oZS1hKSx0aGlzLl93ZWlnaHROZXh0PWMvKGwtaSksdGhpcy5fb2Zmc2V0UHJldj1vKnUsdGhpcy5fb2Zmc2V0TmV4dD1zKnV9aW50ZXJwb2xhdGVfKHQsZSxpLHIpe2xldCBvPXRoaXMucmVzdWx0QnVmZmVyLHM9dGhpcy5zYW1wbGVWYWx1ZXMsYT10aGlzLnZhbHVlU2l6ZSxsPXQqYSxjPWwtYSx1PXRoaXMuX29mZnNldFByZXYsZD10aGlzLl9vZmZzZXROZXh0LHA9dGhpcy5fd2VpZ2h0UHJldixoPXRoaXMuX3dlaWdodE5leHQsZj0oaS1lKS8oci1lKSxtPWYqZix4PW0qZixnPS1wKngrMipwKm0tcCpmLGI9KDErcCkqeCsoLTEuNS0yKnApKm0rKC0uNStwKSpmKzEsRD0oLTEtaCkqeCsoMS41K2gpKm0rLjUqZixUPWgqeC1oKm07Zm9yKGxldCBrPTA7ayE9PWE7KytrKW9ba109ZypzW3Ura10rYipzW2Mra10rRCpzW2wra10rVCpzW2Qra107cmV0dXJuIG99fSxNaz1jbGFzcyBleHRlbmRzIFRke2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixzPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD10KmEsYz1sLWEsdT0oaS1lKS8oci1lKSxkPTEtdTtmb3IobGV0IHA9MDtwIT09YTsrK3Apb1twXT1zW2MrcF0qZCtzW2wrcF0qdTtyZXR1cm4gb319LFc4PWNsYXNzIGV4dGVuZHMgVGR7Y29uc3RydWN0b3IodCxlLGkscil7c3VwZXIodCxlLGkscil9aW50ZXJwb2xhdGVfKHQpe3JldHVybiB0aGlzLmNvcHlTYW1wbGVWYWx1ZV8odC0xKX19LGhjPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe2lmKHZvaWQgMD09PXQpdGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiB0cmFjayBuYW1lIGlzIHVuZGVmaW5lZCIpO2lmKHZvaWQgMD09PWV8fDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IG5vIGtleWZyYW1lcyBpbiB0cmFjayBuYW1lZCAiK3QpO3RoaXMubmFtZT10LHRoaXMudGltZXM9cXIuY29udmVydEFycmF5KGUsdGhpcy5UaW1lQnVmZmVyVHlwZSksdGhpcy52YWx1ZXM9cXIuY29udmVydEFycmF5KGksdGhpcy5WYWx1ZUJ1ZmZlclR5cGUpLHRoaXMuc2V0SW50ZXJwb2xhdGlvbihyfHx0aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKX1zdGF0aWMgdG9KU09OKHQpe2xldCBpLGU9dC5jb25zdHJ1Y3RvcjtpZihlLnRvSlNPTiE9PXRoaXMudG9KU09OKWk9ZS50b0pTT04odCk7ZWxzZXtpPXtuYW1lOnQubmFtZSx0aW1lczpxci5jb252ZXJ0QXJyYXkodC50aW1lcyxBcnJheSksdmFsdWVzOnFyLmNvbnZlcnRBcnJheSh0LnZhbHVlcyxBcnJheSl9O2xldCByPXQuZ2V0SW50ZXJwb2xhdGlvbigpO3IhPT10LkRlZmF1bHRJbnRlcnBvbGF0aW9uJiYoaS5pbnRlcnBvbGF0aW9uPXIpfXJldHVybiBpLnR5cGU9dC5WYWx1ZVR5cGVOYW1lLGl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kRGlzY3JldGUodCl7cmV0dXJuIG5ldyBXOCh0aGlzLnRpbWVzLHRoaXMudmFsdWVzLHRoaXMuZ2V0VmFsdWVTaXplKCksdCl9SW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyKHQpe3JldHVybiBuZXcgTWsodGhpcy50aW1lcyx0aGlzLnZhbHVlcyx0aGlzLmdldFZhbHVlU2l6ZSgpLHQpfUludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aCh0KXtyZXR1cm4gbmV3IEc4KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX1zZXRJbnRlcnBvbGF0aW9uKHQpe2xldCBlO3N3aXRjaCh0KXtjYXNlIDIzMDA6ZT10aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlO2JyZWFrO2Nhc2UgMjMwMTplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kTGluZWFyO2JyZWFrO2Nhc2UgMjMwMjplPXRoaXMuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RofWlmKHZvaWQgMD09PWUpe2xldCBpPSJ1bnN1cHBvcnRlZCBpbnRlcnBvbGF0aW9uIGZvciAiK3RoaXMuVmFsdWVUeXBlTmFtZSsiIGtleWZyYW1lIHRyYWNrIG5hbWVkICIrdGhpcy5uYW1lO2lmKHZvaWQgMD09PXRoaXMuY3JlYXRlSW50ZXJwb2xhbnQpe2lmKHQ9PT10aGlzLkRlZmF1bHRJbnRlcnBvbGF0aW9uKXRocm93IG5ldyBFcnJvcihpKTt0aGlzLnNldEludGVycG9sYXRpb24odGhpcy5EZWZhdWx0SW50ZXJwb2xhdGlvbil9cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuS2V5ZnJhbWVUcmFjazoiLGkpLHRoaXN9cmV0dXJuIHRoaXMuY3JlYXRlSW50ZXJwb2xhbnQ9ZSx0aGlzfWdldEludGVycG9sYXRpb24oKXtzd2l0Y2godGhpcy5jcmVhdGVJbnRlcnBvbGFudCl7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZERpc2NyZXRlOnJldHVybiAyMzAwO2Nhc2UgdGhpcy5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI6cmV0dXJuIDIzMDE7Y2FzZSB0aGlzLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aDpyZXR1cm4gMjMwMn19Z2V0VmFsdWVTaXplKCl7cmV0dXJuIHRoaXMudmFsdWVzLmxlbmd0aC90aGlzLnRpbWVzLmxlbmd0aH1zaGlmdCh0KXtpZigwIT09dCl7bGV0IGU9dGhpcy50aW1lcztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSllW2ldKz10fXJldHVybiB0aGlzfXNjYWxlKHQpe2lmKDEhPT10KXtsZXQgZT10aGlzLnRpbWVzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKWVbaV0qPXR9cmV0dXJuIHRoaXN9dHJpbSh0LGUpe2xldCBpPXRoaXMudGltZXMscj1pLmxlbmd0aCxvPTAscz1yLTE7Zm9yKDtvIT09ciYmaVtvXTx0OykrK287Zm9yKDstMSE9PXMmJmlbc10+ZTspLS1zO2lmKCsrcywwIT09b3x8cyE9PXIpe28+PXMmJihzPU1hdGgubWF4KHMsMSksbz1zLTEpO2xldCBhPXRoaXMuZ2V0VmFsdWVTaXplKCk7dGhpcy50aW1lcz1xci5hcnJheVNsaWNlKGksbyxzKSx0aGlzLnZhbHVlcz1xci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLG8qYSxzKmEpfXJldHVybiB0aGlzfXZhbGlkYXRlKCl7bGV0IHQ9ITAsZT10aGlzLmdldFZhbHVlU2l6ZSgpO2UtTWF0aC5mbG9vcihlKSE9MCYmKGNvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IEludmFsaWQgdmFsdWUgc2l6ZSBpbiB0cmFjay4iLHRoaXMpLHQ9ITEpO2xldCBpPXRoaXMudGltZXMscj10aGlzLnZhbHVlcyxvPWkubGVuZ3RoOzA9PT1vJiYoY29uc29sZS5lcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogVHJhY2sgaXMgZW1wdHkuIix0aGlzKSx0PSExKTtsZXQgcz1udWxsO2ZvcihsZXQgYT0wO2EhPT1vO2ErKyl7bGV0IGw9aVthXTtpZigibnVtYmVyIj09dHlwZW9mIGwmJmlzTmFOKGwpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBUaW1lIGlzIG5vdCBhIHZhbGlkIG51bWJlci4iLHRoaXMsYSxsKSx0PSExO2JyZWFrfWlmKG51bGwhPT1zJiZzPmwpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLktleWZyYW1lVHJhY2s6IE91dCBvZiBvcmRlciBrZXlzLiIsdGhpcyxhLGwscyksdD0hMTticmVha31zPWx9aWYodm9pZCAwIT09ciYmcXIuaXNUeXBlZEFycmF5KHIpKWZvcihsZXQgYT0wLGw9ci5sZW5ndGg7YSE9PWw7KythKXtsZXQgYz1yW2FdO2lmKGlzTmFOKGMpKXtjb25zb2xlLmVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBWYWx1ZSBpcyBub3QgYSB2YWxpZCBudW1iZXIuIix0aGlzLGEsYyksdD0hMTticmVha319cmV0dXJuIHR9b3B0aW1pemUoKXtsZXQgdD1xci5hcnJheVNsaWNlKHRoaXMudGltZXMpLGU9cXIuYXJyYXlTbGljZSh0aGlzLnZhbHVlcyksaT10aGlzLmdldFZhbHVlU2l6ZSgpLHI9MjMwMj09PXRoaXMuZ2V0SW50ZXJwb2xhdGlvbigpLG89dC5sZW5ndGgtMSxzPTE7Zm9yKGxldCBhPTE7YTxvOysrYSl7bGV0IGw9ITEsYz10W2FdO2lmKGMhPT10W2ErMV0mJigxIT09YXx8YyE9PXRbMF0pKWlmKHIpbD0hMDtlbHNle2xldCBkPWEqaSxwPWQtaSxoPWQraTtmb3IobGV0IGY9MDtmIT09aTsrK2Ype2xldCBtPWVbZCtmXTtpZihtIT09ZVtwK2ZdfHxtIT09ZVtoK2ZdKXtsPSEwO2JyZWFrfX19aWYobCl7aWYoYSE9PXMpe3Rbc109dFthXTtsZXQgZD1hKmkscD1zKmk7Zm9yKGxldCBoPTA7aCE9PWk7KytoKWVbcCtoXT1lW2QraF19KytzfX1pZihvPjApe3Rbc109dFtvXTtmb3IobGV0IGE9byppLGw9cyppLGM9MDtjIT09aTsrK2MpZVtsK2NdPWVbYStjXTsrK3N9cmV0dXJuIHMhPT10Lmxlbmd0aD8odGhpcy50aW1lcz1xci5hcnJheVNsaWNlKHQsMCxzKSx0aGlzLnZhbHVlcz1xci5hcnJheVNsaWNlKGUsMCxzKmkpKToodGhpcy50aW1lcz10LHRoaXMudmFsdWVzPWUpLHRoaXN9Y2xvbmUoKXtsZXQgdD1xci5hcnJheVNsaWNlKHRoaXMudGltZXMsMCksZT1xci5hcnJheVNsaWNlKHRoaXMudmFsdWVzLDApLHI9bmV3KDAsdGhpcy5jb25zdHJ1Y3RvcikodGhpcy5uYW1lLHQsZSk7cmV0dXJuIHIuY3JlYXRlSW50ZXJwb2xhbnQ9dGhpcy5jcmVhdGVJbnRlcnBvbGFudCxyfX07aGMucHJvdG90eXBlLlRpbWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxoYy5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUZsb2F0MzJBcnJheSxoYy5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMTt2YXIgRWY9Y2xhc3MgZXh0ZW5kcyBoY3t9O0VmLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJib29sIixFZi5wcm90b3R5cGUuVmFsdWVCdWZmZXJUeXBlPUFycmF5LEVmLnByb3RvdHlwZS5EZWZhdWx0SW50ZXJwb2xhdGlvbj0yMzAwLEVmLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RMaW5lYXI9dm9pZCAwLEVmLnByb3RvdHlwZS5JbnRlcnBvbGFudEZhY3RvcnlNZXRob2RTbW9vdGg9dm9pZCAwO3ZhciB3az1jbGFzcyBleHRlbmRzIGhje307d2sucHJvdG90eXBlLlZhbHVlVHlwZU5hbWU9ImNvbG9yIjt2YXIgQ2I9Y2xhc3MgZXh0ZW5kcyBoY3t9O0NiLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJudW1iZXIiO3ZhciBxOD1jbGFzcyBleHRlbmRzIFRke2NvbnN0cnVjdG9yKHQsZSxpLHIpe3N1cGVyKHQsZSxpLHIpfWludGVycG9sYXRlXyh0LGUsaSxyKXtsZXQgbz10aGlzLnJlc3VsdEJ1ZmZlcixzPXRoaXMuc2FtcGxlVmFsdWVzLGE9dGhpcy52YWx1ZVNpemUsbD0oaS1lKS8oci1lKSxjPXQqYTtmb3IobGV0IHU9YythO2MhPT11O2MrPTQpcXMuc2xlcnBGbGF0KG8sMCxzLGMtYSxzLGMsbCk7cmV0dXJuIG99fSxLZz1jbGFzcyBleHRlbmRzIGhje0ludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcih0KXtyZXR1cm4gbmV3IHE4KHRoaXMudGltZXMsdGhpcy52YWx1ZXMsdGhpcy5nZXRWYWx1ZVNpemUoKSx0KX19O0tnLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJxdWF0ZXJuaW9uIixLZy5wcm90b3R5cGUuRGVmYXVsdEludGVycG9sYXRpb249MjMwMSxLZy5wcm90b3R5cGUuSW50ZXJwb2xhbnRGYWN0b3J5TWV0aG9kU21vb3RoPXZvaWQgMDt2YXIgVGY9Y2xhc3MgZXh0ZW5kcyBoY3t9O1RmLnByb3RvdHlwZS5WYWx1ZVR5cGVOYW1lPSJzdHJpbmciLFRmLnByb3RvdHlwZS5WYWx1ZUJ1ZmZlclR5cGU9QXJyYXksVGYucHJvdG90eXBlLkRlZmF1bHRJbnRlcnBvbGF0aW9uPTIzMDAsVGYucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZExpbmVhcj12b2lkIDAsVGYucHJvdG90eXBlLkludGVycG9sYW50RmFjdG9yeU1ldGhvZFNtb290aD12b2lkIDA7dmFyIE1iPWNsYXNzIGV4dGVuZHMgaGN7fTtNYi5wcm90b3R5cGUuVmFsdWVUeXBlTmFtZT0idmVjdG9yIjt2YXIgU2s9Y2xhc3N7Y29uc3RydWN0b3IodCxlPS0xLGkscj0yNTAwKXt0aGlzLm5hbWU9dCx0aGlzLnRyYWNrcz1pLHRoaXMuZHVyYXRpb249ZSx0aGlzLmJsZW5kTW9kZT1yLHRoaXMudXVpZD1kdSgpLHRoaXMuZHVyYXRpb248MCYmdGhpcy5yZXNldER1cmF0aW9uKCl9c3RhdGljIHBhcnNlKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj0xLyh0LmZwc3x8MSk7Zm9yKGxldCBzPTAsYT1pLmxlbmd0aDtzIT09YTsrK3MpZS5wdXNoKFk5ZShpW3NdKS5zY2FsZShyKSk7bGV0IG89bmV3IHRoaXModC5uYW1lLHQuZHVyYXRpb24sZSx0LmJsZW5kTW9kZSk7cmV0dXJuIG8udXVpZD10LnV1aWQsb31zdGF0aWMgdG9KU09OKHQpe2xldCBlPVtdLGk9dC50cmFja3Mscj17bmFtZTp0Lm5hbWUsZHVyYXRpb246dC5kdXJhdGlvbix0cmFja3M6ZSx1dWlkOnQudXVpZCxibGVuZE1vZGU6dC5ibGVuZE1vZGV9O2ZvcihsZXQgbz0wLHM9aS5sZW5ndGg7byE9PXM7KytvKWUucHVzaChoYy50b0pTT04oaVtvXSkpO3JldHVybiByfXN0YXRpYyBDcmVhdGVGcm9tTW9ycGhUYXJnZXRTZXF1ZW5jZSh0LGUsaSxyKXtsZXQgbz1lLmxlbmd0aCxzPVtdO2ZvcihsZXQgYT0wO2E8bzthKyspe2xldCBsPVtdLGM9W107bC5wdXNoKChhK28tMSklbyxhLChhKzEpJW8pLGMucHVzaCgwLDEsMCk7bGV0IHU9cXIuZ2V0S2V5ZnJhbWVPcmRlcihsKTtsPXFyLnNvcnRlZEFycmF5KGwsMSx1KSxjPXFyLnNvcnRlZEFycmF5KGMsMSx1KSwhciYmMD09PWxbMF0mJihsLnB1c2gobyksYy5wdXNoKGNbMF0pKSxzLnB1c2gobmV3IENiKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyIrZVthXS5uYW1lKyJdIixsLGMpLnNjYWxlKDEvaSkpfXJldHVybiBuZXcgdGhpcyh0LC0xLHMpfXN0YXRpYyBmaW5kQnlOYW1lKHQsZSl7bGV0IGk9dDtpZighQXJyYXkuaXNBcnJheSh0KSl7bGV0IHI9dDtpPXIuZ2VvbWV0cnkmJnIuZ2VvbWV0cnkuYW5pbWF0aW9uc3x8ci5hbmltYXRpb25zfWZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKWlmKGlbcl0ubmFtZT09PWUpcmV0dXJuIGlbcl07cmV0dXJuIG51bGx9c3RhdGljIENyZWF0ZUNsaXBzRnJvbU1vcnBoVGFyZ2V0U2VxdWVuY2VzKHQsZSxpKXtsZXQgcj17fSxvPS9eKFtcdy1dKj8pKFtcZF0rKSQvO2ZvcihsZXQgYT0wLGw9dC5sZW5ndGg7YTxsO2ErKyl7bGV0IGM9dFthXSx1PWMubmFtZS5tYXRjaChvKTtpZih1JiZ1Lmxlbmd0aD4xKXtsZXQgZD11WzFdLHA9cltkXTtwfHwocltkXT1wPVtdKSxwLnB1c2goYyl9fWxldCBzPVtdO2ZvcihsZXQgYSBpbiByKXMucHVzaCh0aGlzLkNyZWF0ZUZyb21Nb3JwaFRhcmdldFNlcXVlbmNlKGEsclthXSxlLGkpKTtyZXR1cm4gc31zdGF0aWMgcGFyc2VBbmltYXRpb24odCxlKXtpZighdClyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQW5pbWF0aW9uQ2xpcDogTm8gYW5pbWF0aW9uIGluIEpTT05Mb2FkZXIgZGF0YS4iKSxudWxsO2xldCBpPWZ1bmN0aW9uKGQscCxoLGYsbSl7aWYoMCE9PWgubGVuZ3RoKXtsZXQgeD1bXSxnPVtdO3FyLmZsYXR0ZW5KU09OKGgseCxnLGYpLDAhPT14Lmxlbmd0aCYmbS5wdXNoKG5ldyBkKHAseCxnKSl9fSxyPVtdLG89dC5uYW1lfHwiZGVmYXVsdCIscz10LmZwc3x8MzAsYT10LmJsZW5kTW9kZSxsPXQubGVuZ3RofHwtMSxjPXQuaGllcmFyY2h5fHxbXTtmb3IobGV0IGQ9MDtkPGMubGVuZ3RoO2QrKyl7bGV0IHA9Y1tkXS5rZXlzO2lmKHAmJjAhPT1wLmxlbmd0aClpZihwWzBdLm1vcnBoVGFyZ2V0cyl7bGV0IGYsaD17fTtmb3IoZj0wO2Y8cC5sZW5ndGg7ZisrKWlmKHBbZl0ubW9ycGhUYXJnZXRzKWZvcihsZXQgbT0wO208cFtmXS5tb3JwaFRhcmdldHMubGVuZ3RoO20rKyloW3BbZl0ubW9ycGhUYXJnZXRzW21dXT0tMTtmb3IobGV0IG0gaW4gaCl7bGV0IHg9W10sZz1bXTtmb3IobGV0IGI9MDtiIT09cFtmXS5tb3JwaFRhcmdldHMubGVuZ3RoOysrYil7bGV0IEQ9cFtmXTt4LnB1c2goRC50aW1lKSxnLnB1c2goRC5tb3JwaFRhcmdldD09PW0/MTowKX1yLnB1c2gobmV3IENiKCIubW9ycGhUYXJnZXRJbmZsdWVuY2VbIittKyJdIix4LGcpKX1sPWgubGVuZ3RoKihzfHwxKX1lbHNle2xldCBoPSIuYm9uZXNbIitlW2RdLm5hbWUrIl0iO2koTWIsaCsiLnBvc2l0aW9uIixwLCJwb3MiLHIpLGkoS2csaCsiLnF1YXRlcm5pb24iLHAsInJvdCIsciksaShNYixoKyIuc2NhbGUiLHAsInNjbCIscil9fXJldHVybiAwPT09ci5sZW5ndGg/bnVsbDpuZXcgdGhpcyhvLGwscixhKX1yZXNldER1cmF0aW9uKCl7bGV0IGU9MDtmb3IobGV0IGk9MCxyPXRoaXMudHJhY2tzLmxlbmd0aDtpIT09cjsrK2kpe2xldCBvPXRoaXMudHJhY2tzW2ldO2U9TWF0aC5tYXgoZSxvLnRpbWVzW28udGltZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy5kdXJhdGlvbj1lLHRoaXN9dHJpbSgpe2ZvcihsZXQgdD0wO3Q8dGhpcy50cmFja3MubGVuZ3RoO3QrKyl0aGlzLnRyYWNrc1t0XS50cmltKDAsdGhpcy5kdXJhdGlvbik7cmV0dXJuIHRoaXN9dmFsaWRhdGUoKXtsZXQgdD0hMDtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdD10JiZ0aGlzLnRyYWNrc1tlXS52YWxpZGF0ZSgpO3JldHVybiB0fW9wdGltaXplKCl7Zm9yKGxldCB0PTA7dDx0aGlzLnRyYWNrcy5sZW5ndGg7dCsrKXRoaXMudHJhY2tzW3RdLm9wdGltaXplKCk7cmV0dXJuIHRoaXN9Y2xvbmUoKXtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPHRoaXMudHJhY2tzLmxlbmd0aDtlKyspdC5wdXNoKHRoaXMudHJhY2tzW2VdLmNsb25lKCkpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzLm5hbWUsdGhpcy5kdXJhdGlvbix0LHRoaXMuYmxlbmRNb2RlKX10b0pTT04oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci50b0pTT04odGhpcyl9fTtmdW5jdGlvbiBZOWUobil7aWYodm9pZCAwPT09bi50eXBlKXRocm93IG5ldyBFcnJvcigiVEhSRUUuS2V5ZnJhbWVUcmFjazogdHJhY2sgdHlwZSB1bmRlZmluZWQsIGNhbiBub3QgcGFyc2UiKTtsZXQgdD1mdW5jdGlvbihuKXtzd2l0Y2gobi50b0xvd2VyQ2FzZSgpKXtjYXNlInNjYWxhciI6Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQiOmNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOnJldHVybiBDYjtjYXNlInZlY3RvciI6Y2FzZSJ2ZWN0b3IyIjpjYXNlInZlY3RvcjMiOmNhc2UidmVjdG9yNCI6cmV0dXJuIE1iO2Nhc2UiY29sb3IiOnJldHVybiB3aztjYXNlInF1YXRlcm5pb24iOnJldHVybiBLZztjYXNlImJvb2wiOmNhc2UiYm9vbGVhbiI6cmV0dXJuIEVmO2Nhc2Uic3RyaW5nIjpyZXR1cm4gVGZ9dGhyb3cgbmV3IEVycm9yKCJUSFJFRS5LZXlmcmFtZVRyYWNrOiBVbnN1cHBvcnRlZCB0eXBlTmFtZTogIituKX0obi50eXBlKTtpZih2b2lkIDA9PT1uLnRpbWVzKXtsZXQgZT1bXSxpPVtdO3FyLmZsYXR0ZW5KU09OKG4ua2V5cyxlLGksInZhbHVlIiksbi50aW1lcz1lLG4udmFsdWVzPWl9cmV0dXJuIHZvaWQgMCE9PXQucGFyc2U/dC5wYXJzZShuKTpuZXcgdChuLm5hbWUsbi50aW1lcyxuLnZhbHVlcyxuLmludGVycG9sYXRpb24pfXZhciB3Yj17ZW5hYmxlZDohMSxmaWxlczp7fSxhZGQ6ZnVuY3Rpb24obix0KXshMSE9PXRoaXMuZW5hYmxlZCYmKHRoaXMuZmlsZXNbbl09dCl9LGdldDpmdW5jdGlvbihuKXtpZighMSE9PXRoaXMuZW5hYmxlZClyZXR1cm4gdGhpcy5maWxlc1tuXX0scmVtb3ZlOmZ1bmN0aW9uKG4pe2RlbGV0ZSB0aGlzLmZpbGVzW25dfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuZmlsZXM9e319fSxYOWU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpKXtsZXQgbCxyPXRoaXMsbz0hMSxzPTAsYT0wLGM9W107dGhpcy5vblN0YXJ0PXZvaWQgMCx0aGlzLm9uTG9hZD10LHRoaXMub25Qcm9ncmVzcz1lLHRoaXMub25FcnJvcj1pLHRoaXMuaXRlbVN0YXJ0PWZ1bmN0aW9uKHUpe2ErKywhMT09PW8mJnZvaWQgMCE9PXIub25TdGFydCYmci5vblN0YXJ0KHUscyxhKSxvPSEwfSx0aGlzLml0ZW1FbmQ9ZnVuY3Rpb24odSl7cysrLHZvaWQgMCE9PXIub25Qcm9ncmVzcyYmci5vblByb2dyZXNzKHUscyxhKSxzPT09YSYmKG89ITEsdm9pZCAwIT09ci5vbkxvYWQmJnIub25Mb2FkKCkpfSx0aGlzLml0ZW1FcnJvcj1mdW5jdGlvbih1KXt2b2lkIDAhPT1yLm9uRXJyb3ImJnIub25FcnJvcih1KX0sdGhpcy5yZXNvbHZlVVJMPWZ1bmN0aW9uKHUpe3JldHVybiBsP2wodSk6dX0sdGhpcy5zZXRVUkxNb2RpZmllcj1mdW5jdGlvbih1KXtyZXR1cm4gbD11LHRoaXN9LHRoaXMuYWRkSGFuZGxlcj1mdW5jdGlvbih1LGQpe3JldHVybiBjLnB1c2godSxkKSx0aGlzfSx0aGlzLnJlbW92ZUhhbmRsZXI9ZnVuY3Rpb24odSl7bGV0IGQ9Yy5pbmRleE9mKHUpO3JldHVybi0xIT09ZCYmYy5zcGxpY2UoZCwyKSx0aGlzfSx0aGlzLmdldEhhbmRsZXI9ZnVuY3Rpb24odSl7Zm9yKGxldCBkPTAscD1jLmxlbmd0aDtkPHA7ZCs9Mil7bGV0IGg9Y1tkXSxmPWNbZCsxXTtpZihoLmdsb2JhbCYmKGgubGFzdEluZGV4PTApLGgudGVzdCh1KSlyZXR1cm4gZn1yZXR1cm4gbnVsbH19fSxEZD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLm1hbmFnZXI9dm9pZCAwIT09dD90Olg5ZSx0aGlzLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLHRoaXMud2l0aENyZWRlbnRpYWxzPSExLHRoaXMucGF0aD0iIix0aGlzLnJlc291cmNlUGF0aD0iIix0aGlzLnJlcXVlc3RIZWFkZXI9e319bG9hZCgpe31sb2FkQXN5bmModCxlKXtsZXQgaT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLG8pe2kubG9hZCh0LHIsZSxvKX0pfXBhcnNlKCl7fXNldENyb3NzT3JpZ2luKHQpe3JldHVybiB0aGlzLmNyb3NzT3JpZ2luPXQsdGhpc31zZXRXaXRoQ3JlZGVudGlhbHModCl7cmV0dXJuIHRoaXMud2l0aENyZWRlbnRpYWxzPXQsdGhpc31zZXRQYXRoKHQpe3JldHVybiB0aGlzLnBhdGg9dCx0aGlzfXNldFJlc291cmNlUGF0aCh0KXtyZXR1cm4gdGhpcy5yZXNvdXJjZVBhdGg9dCx0aGlzfXNldFJlcXVlc3RIZWFkZXIodCl7cmV0dXJuIHRoaXMucmVxdWVzdEhlYWRlcj10LHRoaXN9fSxTcD17fSxYOD1jbGFzcyBleHRlbmRzIERke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7dm9pZCAwPT09dCYmKHQ9IiIpLHZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89d2IuZ2V0KHQpO2lmKHZvaWQgMCE9PW8pcmV0dXJuIHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dCgoKT0+e2UmJmUobyksdGhpcy5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLG87aWYodm9pZCAwIT09U3BbdF0pcmV0dXJuIHZvaWQgU3BbdF0ucHVzaCh7b25Mb2FkOmUsb25Qcm9ncmVzczppLG9uRXJyb3I6cn0pO1NwW3RdPVtdLFNwW3RdLnB1c2goe29uTG9hZDplLG9uUHJvZ3Jlc3M6aSxvbkVycm9yOnJ9KTtsZXQgcz1uZXcgUmVxdWVzdCh0LHtoZWFkZXJzOm5ldyBIZWFkZXJzKHRoaXMucmVxdWVzdEhlYWRlciksY3JlZGVudGlhbHM6dGhpcy53aXRoQ3JlZGVudGlhbHM/ImluY2x1ZGUiOiJzYW1lLW9yaWdpbiJ9KSxhPXRoaXMubWltZVR5cGUsbD10aGlzLnJlc3BvbnNlVHlwZTtmZXRjaChzKS50aGVuKGM9PntpZigyMDA9PT1jLnN0YXR1c3x8MD09PWMuc3RhdHVzKXtpZigwPT09Yy5zdGF0dXMmJmNvbnNvbGUud2FybigiVEhSRUUuRmlsZUxvYWRlcjogSFRUUCBTdGF0dXMgMCByZWNlaXZlZC4iKSx0eXBlb2YgUmVhZGFibGVTdHJlYW0+InUifHx2b2lkIDA9PT1jLmJvZHkuZ2V0UmVhZGVyKXJldHVybiBjO2xldCB1PVNwW3RdLGQ9Yy5ib2R5LmdldFJlYWRlcigpLHA9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1MZW5ndGgiKSxoPXA/cGFyc2VJbnQocCk6MCxmPTAhPT1oLG09MCx4PW5ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQoZyl7IWZ1bmN0aW9uIGIoKXtkLnJlYWQoKS50aGVuKCh7ZG9uZTpELHZhbHVlOlR9KT0+e2lmKEQpZy5jbG9zZSgpO2Vsc2V7bSs9VC5ieXRlTGVuZ3RoO2xldCBrPW5ldyBQcm9ncmVzc0V2ZW50KCJwcm9ncmVzcyIse2xlbmd0aENvbXB1dGFibGU6Zixsb2FkZWQ6bSx0b3RhbDpofSk7Zm9yKGxldCBaPTAsej11Lmxlbmd0aDtaPHo7WisrKXtsZXQgZmU9dVtaXTtmZS5vblByb2dyZXNzJiZmZS5vblByb2dyZXNzKGspfWcuZW5xdWV1ZShUKSxiKCl9fSl9KCl9fSk7cmV0dXJuIG5ldyBSZXNwb25zZSh4KX10aHJvdyBFcnJvcihgZmV0Y2ggZm9yICIke2MudXJsfSIgcmVzcG9uZGVkIHdpdGggJHtjLnN0YXR1c306ICR7Yy5zdGF0dXNUZXh0fWApfSkudGhlbihjPT57c3dpdGNoKGwpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBjLmFycmF5QnVmZmVyKCk7Y2FzZSJibG9iIjpyZXR1cm4gYy5ibG9iKCk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIGMudGV4dCgpLnRoZW4odT0+KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh1LGEpKTtjYXNlImpzb24iOnJldHVybiBjLmpzb24oKTtkZWZhdWx0OmlmKHZvaWQgMD09PWEpcmV0dXJuIGMudGV4dCgpO3tsZXQgZD0vY2hhcnNldD0iPyhbXjsiXHNdKikiPy9pLmV4ZWMoYSkscD1kJiZkWzFdP2RbMV0udG9Mb3dlckNhc2UoKTp2b2lkIDAsaD1uZXcgVGV4dERlY29kZXIocCk7cmV0dXJuIGMuYXJyYXlCdWZmZXIoKS50aGVuKGY9PmguZGVjb2RlKGYpKX19fSkudGhlbihjPT57d2IuYWRkKHQsYyk7bGV0IHU9U3BbdF07ZGVsZXRlIFNwW3RdO2ZvcihsZXQgZD0wLHA9dS5sZW5ndGg7ZDxwO2QrKyl7bGV0IGg9dVtkXTtoLm9uTG9hZCYmaC5vbkxvYWQoYyl9fSkuY2F0Y2goYz0+e2xldCB1PVNwW3RdO2lmKHZvaWQgMD09PXUpdGhyb3cgdGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KSxjO2RlbGV0ZSBTcFt0XTtmb3IobGV0IGQ9MCxwPXUubGVuZ3RoO2Q8cDtkKyspe2xldCBoPXVbZF07aC5vbkVycm9yJiZoLm9uRXJyb3IoYyl9dGhpcy5tYW5hZ2VyLml0ZW1FcnJvcih0KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLm1hbmFnZXIuaXRlbUVuZCh0KX0pLHRoaXMubWFuYWdlci5pdGVtU3RhcnQodCl9c2V0UmVzcG9uc2VUeXBlKHQpe3JldHVybiB0aGlzLnJlc3BvbnNlVHlwZT10LHRoaXN9c2V0TWltZVR5cGUodCl7cmV0dXJuIHRoaXMubWltZVR5cGU9dCx0aGlzfX0sRWs9Y2xhc3MgZXh0ZW5kcyBEZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe3ZvaWQgMCE9PXRoaXMucGF0aCYmKHQ9dGhpcy5wYXRoK3QpLHQ9dGhpcy5tYW5hZ2VyLnJlc29sdmVVUkwodCk7bGV0IG89dGhpcyxzPXdiLmdldCh0KTtpZih2b2lkIDAhPT1zKXJldHVybiBvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlJiZlKHMpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSwwKSxzO2xldCBhPVlTKCJpbWciKTtmdW5jdGlvbiBsKCl7dSgpLHdiLmFkZCh0LHRoaXMpLGUmJmUodGhpcyksby5tYW5hZ2VyLml0ZW1FbmQodCl9ZnVuY3Rpb24gYyhkKXt1KCksciYmcihkKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfWZ1bmN0aW9uIHUoKXthLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpfXJldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGwsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGMsITEpLCJkYXRhOiIhPT10LnN1YnN0cigwLDUpJiZ2b2lkIDAhPT10aGlzLmNyb3NzT3JpZ2luJiYoYS5jcm9zc09yaWdpbj10aGlzLmNyb3NzT3JpZ2luKSxvLm1hbmFnZXIuaXRlbVN0YXJ0KHQpLGEuc3JjPXQsYX19LFE4PWNsYXNzIGV4dGVuZHMgRGR7Y29uc3RydWN0b3IodCl7c3VwZXIodCl9bG9hZCh0LGUsaSxyKXtsZXQgbz1uZXcgbWIscz1uZXcgRWsodGhpcy5tYW5hZ2VyKTtzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpO2xldCBhPTA7ZnVuY3Rpb24gbChjKXtzLmxvYWQodFtjXSxmdW5jdGlvbih1KXtvLmltYWdlc1tjXT11LGErKyw2PT09YSYmKG8ubmVlZHNVcGRhdGU9ITAsZSYmZShvKSl9LHZvaWQgMCxyKX1mb3IobGV0IGM9MDtjPHQubGVuZ3RoOysrYylsKGMpO3JldHVybiBvfX0sSzg9Y2xhc3MgZXh0ZW5kcyBEZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KX1sb2FkKHQsZSxpLHIpe2xldCBvPW5ldyBIbyxzPW5ldyBFayh0aGlzLm1hbmFnZXIpO3JldHVybiBzLnNldENyb3NzT3JpZ2luKHRoaXMuY3Jvc3NPcmlnaW4pLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMubG9hZCh0LGZ1bmN0aW9uKGEpe28uaW1hZ2U9YSxvLm5lZWRzVXBkYXRlPSEwLHZvaWQgMCE9PWUmJmUobyl9LGksciksb319LGZjPWNsYXNzIGV4dGVuZHMgWGl7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKCksdGhpcy50eXBlPSJMaWdodCIsdGhpcy5jb2xvcj1uZXcgdm4odCksdGhpcy5pbnRlbnNpdHk9ZX1kaXNwb3NlKCl7fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5jb2xvci5jb3B5KHQuY29sb3IpLHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3QuY29sb3I9dGhpcy5jb2xvci5nZXRIZXgoKSxlLm9iamVjdC5pbnRlbnNpdHk9dGhpcy5pbnRlbnNpdHksdm9pZCAwIT09dGhpcy5ncm91bmRDb2xvciYmKGUub2JqZWN0Lmdyb3VuZENvbG9yPXRoaXMuZ3JvdW5kQ29sb3IuZ2V0SGV4KCkpLHZvaWQgMCE9PXRoaXMuZGlzdGFuY2UmJihlLm9iamVjdC5kaXN0YW5jZT10aGlzLmRpc3RhbmNlKSx2b2lkIDAhPT10aGlzLmFuZ2xlJiYoZS5vYmplY3QuYW5nbGU9dGhpcy5hbmdsZSksdm9pZCAwIT09dGhpcy5kZWNheSYmKGUub2JqZWN0LmRlY2F5PXRoaXMuZGVjYXkpLHZvaWQgMCE9PXRoaXMucGVudW1icmEmJihlLm9iamVjdC5wZW51bWJyYT10aGlzLnBlbnVtYnJhKSx2b2lkIDAhPT10aGlzLnNoYWRvdyYmKGUub2JqZWN0LnNoYWRvdz10aGlzLnNoYWRvdy50b0pTT04oKSksZX19O2ZjLnByb3RvdHlwZS5pc0xpZ2h0PSEwLGNsYXNzIGV4dGVuZHMgZmN7Y29uc3RydWN0b3IodCxlLGkpe3N1cGVyKHQsaSksdGhpcy50eXBlPSJIZW1pc3BoZXJlTGlnaHQiLHRoaXMucG9zaXRpb24uY29weShYaS5EZWZhdWx0VXApLHRoaXMudXBkYXRlTWF0cml4KCksdGhpcy5ncm91bmRDb2xvcj1uZXcgdm4oZSl9Y29weSh0KXtyZXR1cm4gZmMucHJvdG90eXBlLmNvcHkuY2FsbCh0aGlzLHQpLHRoaXMuZ3JvdW5kQ29sb3IuY29weSh0Lmdyb3VuZENvbG9yKSx0aGlzfX0ucHJvdG90eXBlLmlzSGVtaXNwaGVyZUxpZ2h0PSEwO3ZhciB4ZGU9bmV3IFJuLENkZT1uZXcgaWUsTWRlPW5ldyBpZSxwRT1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNhbWVyYT10LHRoaXMuYmlhcz0wLHRoaXMubm9ybWFsQmlhcz0wLHRoaXMucmFkaXVzPTEsdGhpcy5ibHVyU2FtcGxlcz04LHRoaXMubWFwU2l6ZT1uZXcgYXQoNTEyLDUxMiksdGhpcy5tYXA9bnVsbCx0aGlzLm1hcFBhc3M9bnVsbCx0aGlzLm1hdHJpeD1uZXcgUm4sdGhpcy5hdXRvVXBkYXRlPSEwLHRoaXMubmVlZHNVcGRhdGU9ITEsdGhpcy5fZnJ1c3R1bT1uZXcgZ2IsdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBhdCgxLDEpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9MSx0aGlzLl92aWV3cG9ydHM9W25ldyBhcigwLDAsMSwxKV19Z2V0Vmlld3BvcnRDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cG9ydENvdW50fWdldEZydXN0dW0oKXtyZXR1cm4gdGhpcy5fZnJ1c3R1bX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPXRoaXMubWF0cml4O0NkZS5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksZS5wb3NpdGlvbi5jb3B5KENkZSksTWRlLnNldEZyb21NYXRyaXhQb3NpdGlvbih0LnRhcmdldC5tYXRyaXhXb3JsZCksZS5sb29rQXQoTWRlKSxlLnVwZGF0ZU1hdHJpeFdvcmxkKCkseGRlLm11bHRpcGx5TWF0cmljZXMoZS5wcm9qZWN0aW9uTWF0cml4LGUubWF0cml4V29ybGRJbnZlcnNlKSx0aGlzLl9mcnVzdHVtLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KHhkZSksaS5zZXQoLjUsMCwwLC41LDAsLjUsMCwuNSwwLDAsLjUsLjUsMCwwLDAsMSksaS5tdWx0aXBseShlLnByb2plY3Rpb25NYXRyaXgpLGkubXVsdGlwbHkoZS5tYXRyaXhXb3JsZEludmVyc2UpfWdldFZpZXdwb3J0KHQpe3JldHVybiB0aGlzLl92aWV3cG9ydHNbdF19Z2V0RnJhbWVFeHRlbnRzKCl7cmV0dXJuIHRoaXMuX2ZyYW1lRXh0ZW50c31kaXNwb3NlKCl7dGhpcy5tYXAmJnRoaXMubWFwLmRpc3Bvc2UoKSx0aGlzLm1hcFBhc3MmJnRoaXMubWFwUGFzcy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gdGhpcy5jYW1lcmE9dC5jYW1lcmEuY2xvbmUoKSx0aGlzLmJpYXM9dC5iaWFzLHRoaXMucmFkaXVzPXQucmFkaXVzLHRoaXMubWFwU2l6ZS5jb3B5KHQubWFwU2l6ZSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD17fTtyZXR1cm4gMCE9PXRoaXMuYmlhcyYmKHQuYmlhcz10aGlzLmJpYXMpLDAhPT10aGlzLm5vcm1hbEJpYXMmJih0Lm5vcm1hbEJpYXM9dGhpcy5ub3JtYWxCaWFzKSwxIT09dGhpcy5yYWRpdXMmJih0LnJhZGl1cz10aGlzLnJhZGl1cyksKDUxMiE9PXRoaXMubWFwU2l6ZS54fHw1MTIhPT10aGlzLm1hcFNpemUueSkmJih0Lm1hcFNpemU9dGhpcy5tYXBTaXplLnRvQXJyYXkoKSksdC5jYW1lcmE9dGhpcy5jYW1lcmEudG9KU09OKCExKS5vYmplY3QsZGVsZXRlIHQuY2FtZXJhLm1hdHJpeCx0fX0sVGs9Y2xhc3MgZXh0ZW5kcyBwRXtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBXcyg1MCwxLC41LDUwMCkpLHRoaXMuZm9jdXM9MX11cGRhdGVNYXRyaWNlcyh0KXtsZXQgZT10aGlzLmNhbWVyYSxpPTIqaDgqdC5hbmdsZSp0aGlzLmZvY3VzLHI9dGhpcy5tYXBTaXplLndpZHRoL3RoaXMubWFwU2l6ZS5oZWlnaHQsbz10LmRpc3RhbmNlfHxlLmZhcjsoaSE9PWUuZm92fHxyIT09ZS5hc3BlY3R8fG8hPT1lLmZhcikmJihlLmZvdj1pLGUuYXNwZWN0PXIsZS5mYXI9byxlLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSksc3VwZXIudXBkYXRlTWF0cmljZXModCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmZvY3VzPXQuZm9jdXMsdGhpc319O1RrLnByb3RvdHlwZS5pc1Nwb3RMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIGZje2NvbnN0cnVjdG9yKHQsZSxpPTAscj1NYXRoLlBJLzMsbz0wLHM9MSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IlNwb3RMaWdodCIsdGhpcy5wb3NpdGlvbi5jb3B5KFhpLkRlZmF1bHRVcCksdGhpcy51cGRhdGVNYXRyaXgoKSx0aGlzLnRhcmdldD1uZXcgWGksdGhpcy5kaXN0YW5jZT1pLHRoaXMuYW5nbGU9cix0aGlzLnBlbnVtYnJhPW8sdGhpcy5kZWNheT1zLHRoaXMuc2hhZG93PW5ldyBUa31nZXQgcG93ZXIoKXtyZXR1cm4gdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC9NYXRoLlBJfWRpc3Bvc2UoKXt0aGlzLnNoYWRvdy5kaXNwb3NlKCl9Y29weSh0KXtyZXR1cm4gc3VwZXIuY29weSh0KSx0aGlzLmRpc3RhbmNlPXQuZGlzdGFuY2UsdGhpcy5hbmdsZT10LmFuZ2xlLHRoaXMucGVudW1icmE9dC5wZW51bWJyYSx0aGlzLmRlY2F5PXQuZGVjYXksdGhpcy50YXJnZXQ9dC50YXJnZXQuY2xvbmUoKSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNTcG90TGlnaHQ9ITA7dmFyIHdkZT1uZXcgUm4sTFM9bmV3IGllLG84PW5ldyBpZSxEaz1jbGFzcyBleHRlbmRzIHBFe2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFdzKDkwLDEsLjUsNTAwKSksdGhpcy5fZnJhbWVFeHRlbnRzPW5ldyBhdCg0LDIpLHRoaXMuX3ZpZXdwb3J0Q291bnQ9Nix0aGlzLl92aWV3cG9ydHM9W25ldyBhcigyLDEsMSwxKSxuZXcgYXIoMCwxLDEsMSksbmV3IGFyKDMsMSwxLDEpLG5ldyBhcigxLDEsMSwxKSxuZXcgYXIoMywwLDEsMSksbmV3IGFyKDEsMCwxLDEpXSx0aGlzLl9jdWJlRGlyZWN0aW9ucz1bbmV3IGllKDEsMCwwKSxuZXcgaWUoLTEsMCwwKSxuZXcgaWUoMCwwLDEpLG5ldyBpZSgwLDAsLTEpLG5ldyBpZSgwLDEsMCksbmV3IGllKDAsLTEsMCldLHRoaXMuX2N1YmVVcHM9W25ldyBpZSgwLDEsMCksbmV3IGllKDAsMSwwKSxuZXcgaWUoMCwxLDApLG5ldyBpZSgwLDEsMCksbmV3IGllKDAsMCwxKSxuZXcgaWUoMCwwLC0xKV19dXBkYXRlTWF0cmljZXModCxlPTApe2xldCBpPXRoaXMuY2FtZXJhLHI9dGhpcy5tYXRyaXgsbz10LmRpc3RhbmNlfHxpLmZhcjtvIT09aS5mYXImJihpLmZhcj1vLGkudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpKSxMUy5zZXRGcm9tTWF0cml4UG9zaXRpb24odC5tYXRyaXhXb3JsZCksaS5wb3NpdGlvbi5jb3B5KExTKSxvOC5jb3B5KGkucG9zaXRpb24pLG84LmFkZCh0aGlzLl9jdWJlRGlyZWN0aW9uc1tlXSksaS51cC5jb3B5KHRoaXMuX2N1YmVVcHNbZV0pLGkubG9va0F0KG84KSxpLnVwZGF0ZU1hdHJpeFdvcmxkKCksci5tYWtlVHJhbnNsYXRpb24oLUxTLngsLUxTLnksLUxTLnopLHdkZS5tdWx0aXBseU1hdHJpY2VzKGkucHJvamVjdGlvbk1hdHJpeCxpLm1hdHJpeFdvcmxkSW52ZXJzZSksdGhpcy5fZnJ1c3R1bS5zZXRGcm9tUHJvamVjdGlvbk1hdHJpeCh3ZGUpfX07RGsucHJvdG90eXBlLmlzUG9pbnRMaWdodFNoYWRvdz0hMCxjbGFzcyBleHRlbmRzIGZje2NvbnN0cnVjdG9yKHQsZSxpPTAscj0xKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUG9pbnRMaWdodCIsdGhpcy5kaXN0YW5jZT1pLHRoaXMuZGVjYXk9cix0aGlzLnNoYWRvdz1uZXcgRGt9Z2V0IHBvd2VyKCl7cmV0dXJuIDQqdGhpcy5pbnRlbnNpdHkqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8oNCpNYXRoLlBJKX1kaXNwb3NlKCl7dGhpcy5zaGFkb3cuZGlzcG9zZSgpfWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5kaXN0YW5jZT10LmRpc3RhbmNlLHRoaXMuZGVjYXk9dC5kZWNheSx0aGlzLnNoYWRvdz10LnNoYWRvdy5jbG9uZSgpLHRoaXN9fS5wcm90b3R5cGUuaXNQb2ludExpZ2h0PSEwO3ZhciBBaz1jbGFzcyBleHRlbmRzIHBFe2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IHFnKC01LDUsNSwtNSwuNSw1MDApKX19O0FrLnByb3RvdHlwZS5pc0RpcmVjdGlvbmFsTGlnaHRTaGFkb3c9ITAsY2xhc3MgZXh0ZW5kcyBmY3tjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQsZSksdGhpcy50eXBlPSJEaXJlY3Rpb25hbExpZ2h0Iix0aGlzLnBvc2l0aW9uLmNvcHkoWGkuRGVmYXVsdFVwKSx0aGlzLnVwZGF0ZU1hdHJpeCgpLHRoaXMudGFyZ2V0PW5ldyBYaSx0aGlzLnNoYWRvdz1uZXcgQWt9ZGlzcG9zZSgpe3RoaXMuc2hhZG93LmRpc3Bvc2UoKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMudGFyZ2V0PXQudGFyZ2V0LmNsb25lKCksdGhpcy5zaGFkb3c9dC5zaGFkb3cuY2xvbmUoKSx0aGlzfX0ucHJvdG90eXBlLmlzRGlyZWN0aW9uYWxMaWdodD0hMCxjbGFzcyBleHRlbmRzIGZje2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCxlKSx0aGlzLnR5cGU9IkFtYmllbnRMaWdodCJ9fS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHQ9ITAsY2xhc3MgZXh0ZW5kcyBmY3tjb25zdHJ1Y3Rvcih0LGUsaT0xMCxyPTEwKXtzdXBlcih0LGUpLHRoaXMudHlwZT0iUmVjdEFyZWFMaWdodCIsdGhpcy53aWR0aD1pLHRoaXMuaGVpZ2h0PXJ9Z2V0IHBvd2VyKCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5KnRoaXMud2lkdGgqdGhpcy5oZWlnaHQqTWF0aC5QSX1zZXQgcG93ZXIodCl7dGhpcy5pbnRlbnNpdHk9dC8odGhpcy53aWR0aCp0aGlzLmhlaWdodCpNYXRoLlBJKX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMud2lkdGg9dC53aWR0aCx0aGlzLmhlaWdodD10LmhlaWdodCx0aGlzfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUub2JqZWN0LndpZHRoPXRoaXMud2lkdGgsZS5vYmplY3QuaGVpZ2h0PXRoaXMuaGVpZ2h0LGV9fS5wcm90b3R5cGUuaXNSZWN0QXJlYUxpZ2h0PSEwO3ZhciBJaz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29lZmZpY2llbnRzPVtdO2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHMucHVzaChuZXcgaWUpfXNldCh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKXRoaXMuY29lZmZpY2llbnRzW2VdLmNvcHkodFtlXSk7cmV0dXJuIHRoaXN9emVybygpe2ZvcihsZXQgdD0wO3Q8OTt0KyspdGhpcy5jb2VmZmljaWVudHNbdF0uc2V0KDAsMCwwKTtyZXR1cm4gdGhpc31nZXRBdCh0LGUpe2xldCBpPXQueCxyPXQueSxvPXQueixzPXRoaXMuY29lZmZpY2llbnRzO3JldHVybiBlLmNvcHkoc1swXSkubXVsdGlwbHlTY2FsYXIoLjI4MjA5NSksZS5hZGRTY2FsZWRWZWN0b3Ioc1sxXSwuNDg4NjAzKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMl0sLjQ4ODYwMypvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLC40ODg2MDMqaSksZS5hZGRTY2FsZWRWZWN0b3Ioc1s0XSxpKnIqMS4wOTI1NDgpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0scipvKjEuMDkyNTQ4KSxlLmFkZFNjYWxlZFZlY3RvcihzWzZdLC4zMTUzOTIqKDMqbypvLTEpKSxlLmFkZFNjYWxlZFZlY3RvcihzWzddLGkqbyoxLjA5MjU0OCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNTQ2Mjc0KihpKmktcipyKSksZX1nZXRJcnJhZGlhbmNlQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lnoscz10aGlzLmNvZWZmaWNpZW50cztyZXR1cm4gZS5jb3B5KHNbMF0pLm11bHRpcGx5U2NhbGFyKC44ODYyMjcpLGUuYWRkU2NhbGVkVmVjdG9yKHNbMV0sMS4wMjMzMjgqciksZS5hZGRTY2FsZWRWZWN0b3Ioc1syXSwxLjAyMzMyOCpvKSxlLmFkZFNjYWxlZFZlY3RvcihzWzNdLDEuMDIzMzI4KmkpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNF0sLjg1ODA4NippKnIpLGUuYWRkU2NhbGVkVmVjdG9yKHNbNV0sLjg1ODA4NipyKm8pLGUuYWRkU2NhbGVkVmVjdG9yKHNbNl0sLjc0MzEyNSpvKm8tLjI0NzcwOCksZS5hZGRTY2FsZWRWZWN0b3Ioc1s3XSwuODU4MDg2KmkqbyksZS5hZGRTY2FsZWRWZWN0b3Ioc1s4XSwuNDI5MDQzKihpKmktcipyKSksZX1hZGQodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5hZGQodC5jb2VmZmljaWVudHNbZV0pO3JldHVybiB0aGlzfWFkZFNjYWxlZFNIKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5hZGRTY2FsZWRWZWN0b3IodC5jb2VmZmljaWVudHNbaV0sZSk7cmV0dXJuIHRoaXN9c2NhbGUodCl7Zm9yKGxldCBlPTA7ZTw5O2UrKyl0aGlzLmNvZWZmaWNpZW50c1tlXS5tdWx0aXBseVNjYWxhcih0KTtyZXR1cm4gdGhpc31sZXJwKHQsZSl7Zm9yKGxldCBpPTA7aTw5O2krKyl0aGlzLmNvZWZmaWNpZW50c1tpXS5sZXJwKHQuY29lZmZpY2llbnRzW2ldLGUpO3JldHVybiB0aGlzfWVxdWFscyh0KXtmb3IobGV0IGU9MDtlPDk7ZSsrKWlmKCF0aGlzLmNvZWZmaWNpZW50c1tlXS5lcXVhbHModC5jb2VmZmljaWVudHNbZV0pKXJldHVybiExO3JldHVybiEwfWNvcHkodCl7cmV0dXJuIHRoaXMuc2V0KHQuY29lZmZpY2llbnRzKX1jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1mcm9tQXJyYXkodCxlPTApe2xldCBpPXRoaXMuY29lZmZpY2llbnRzO2ZvcihsZXQgcj0wO3I8OTtyKyspaVtyXS5mcm9tQXJyYXkodCxlKzMqcik7cmV0dXJuIHRoaXN9dG9BcnJheSh0PVtdLGU9MCl7bGV0IGk9dGhpcy5jb2VmZmljaWVudHM7Zm9yKGxldCByPTA7cjw5O3IrKylpW3JdLnRvQXJyYXkodCxlKzMqcik7cmV0dXJuIHR9c3RhdGljIGdldEJhc2lzQXQodCxlKXtsZXQgaT10Lngscj10Lnksbz10Lno7ZVswXT0uMjgyMDk1LGVbMV09LjQ4ODYwMypyLGVbMl09LjQ4ODYwMypvLGVbM109LjQ4ODYwMyppLGVbNF09MS4wOTI1NDgqaSpyLGVbNV09MS4wOTI1NDgqcipvLGVbNl09LjMxNTM5MiooMypvKm8tMSksZVs3XT0xLjA5MjU0OCppKm8sZVs4XT0uNTQ2Mjc0KihpKmktcipyKX19O0lrLnByb3RvdHlwZS5pc1NwaGVyaWNhbEhhcm1vbmljczM9ITA7dmFyIGhFPWNsYXNzIGV4dGVuZHMgZmN7Y29uc3RydWN0b3IodD1uZXcgSWssZT0xKXtzdXBlcih2b2lkIDAsZSksdGhpcy5zaD10fWNvcHkodCl7cmV0dXJuIHN1cGVyLmNvcHkodCksdGhpcy5zaC5jb3B5KHQuc2gpLHRoaXN9ZnJvbUpTT04odCl7cmV0dXJuIHRoaXMuaW50ZW5zaXR5PXQuaW50ZW5zaXR5LHRoaXMuc2guZnJvbUFycmF5KHQuc2gpLHRoaXN9dG9KU09OKHQpe2xldCBlPXN1cGVyLnRvSlNPTih0KTtyZXR1cm4gZS5vYmplY3Quc2g9dGhpcy5zaC50b0FycmF5KCksZX19O2hFLnByb3RvdHlwZS5pc0xpZ2h0UHJvYmU9ITA7dmFyIGlHPWNsYXNze3N0YXRpYyBkZWNvZGVUZXh0KHQpe2lmKHR5cGVvZiBUZXh0RGVjb2RlcjwidSIpcmV0dXJuKG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKHQpO2xldCBlPSIiO2ZvcihsZXQgaT0wLHI9dC5sZW5ndGg7aTxyO2krKyllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9Y2F0Y2h7cmV0dXJuIGV9fXN0YXRpYyBleHRyYWN0VXJsQmFzZSh0KXtsZXQgZT10Lmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1lPyIuLyI6dC5zdWJzdHIoMCxlKzEpfXN0YXRpYyByZXNvbHZlVVJMKHQsZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0fHwiIj09PXQ/IiI6KC9eaHR0cHM/OlwvXC8vaS50ZXN0KGUpJiYvXlwvLy50ZXN0KHQpJiYoZT1lLnJlcGxhY2UoLyheaHR0cHM/OlwvXC9bXlwvXSspLiovaSwiJDEiKSksL14oaHR0cHM/Oik/XC9cLy9pLnRlc3QodCl8fC9eZGF0YTouKiwuKiQvaS50ZXN0KHQpfHwvXmJsb2I6LiokL2kudGVzdCh0KT90OmUrdCl9fTsoY2xhc3MgZXh0ZW5kcyBucntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy50eXBlPSJJbnN0YW5jZWRCdWZmZXJHZW9tZXRyeSIsdGhpcy5pbnN0YW5jZUNvdW50PTEvMH1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMuaW5zdGFuY2VDb3VudD10Lmluc3RhbmNlQ291bnQsdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX10b0pTT04oKXtsZXQgdD1zdXBlci50b0pTT04odGhpcyk7cmV0dXJuIHQuaW5zdGFuY2VDb3VudD10aGlzLmluc3RhbmNlQ291bnQsdC5pc0luc3RhbmNlZEJ1ZmZlckdlb21ldHJ5PSEwLHR9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkQnVmZmVyR2VvbWV0cnk9ITAsY2xhc3MgZXh0ZW5kcyBEZHtjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0eXBlb2YgY3JlYXRlSW1hZ2VCaXRtYXA+InUiJiZjb25zb2xlLndhcm4oIlRIUkVFLkltYWdlQml0bWFwTG9hZGVyOiBjcmVhdGVJbWFnZUJpdG1hcCgpIG5vdCBzdXBwb3J0ZWQuIiksdHlwZW9mIGZldGNoPiJ1IiYmY29uc29sZS53YXJuKCJUSFJFRS5JbWFnZUJpdG1hcExvYWRlcjogZmV0Y2goKSBub3Qgc3VwcG9ydGVkLiIpLHRoaXMub3B0aW9ucz17cHJlbXVsdGlwbHlBbHBoYToibm9uZSJ9fXNldE9wdGlvbnModCl7cmV0dXJuIHRoaXMub3B0aW9ucz10LHRoaXN9bG9hZCh0LGUsaSxyKXt2b2lkIDA9PT10JiYodD0iIiksdm9pZCAwIT09dGhpcy5wYXRoJiYodD10aGlzLnBhdGgrdCksdD10aGlzLm1hbmFnZXIucmVzb2x2ZVVSTCh0KTtsZXQgbz10aGlzLHM9d2IuZ2V0KHQpO2lmKHZvaWQgMCE9PXMpcmV0dXJuIG8ubWFuYWdlci5pdGVtU3RhcnQodCksc2V0VGltZW91dChmdW5jdGlvbigpe2UmJmUocyksby5tYW5hZ2VyLml0ZW1FbmQodCl9LDApLHM7bGV0IGE9e307YS5jcmVkZW50aWFscz0iYW5vbnltb3VzIj09PXRoaXMuY3Jvc3NPcmlnaW4/InNhbWUtb3JpZ2luIjoiaW5jbHVkZSIsYS5oZWFkZXJzPXRoaXMucmVxdWVzdEhlYWRlcixmZXRjaCh0LGEpLnRoZW4oZnVuY3Rpb24obCl7cmV0dXJuIGwuYmxvYigpfSkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gY3JlYXRlSW1hZ2VCaXRtYXAobCxPYmplY3QuYXNzaWduKG8ub3B0aW9ucyx7Y29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifSkpfSkudGhlbihmdW5jdGlvbihsKXt3Yi5hZGQodCxsKSxlJiZlKGwpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSkuY2F0Y2goZnVuY3Rpb24obCl7ciYmcihsKSxvLm1hbmFnZXIuaXRlbUVycm9yKHQpLG8ubWFuYWdlci5pdGVtRW5kKHQpfSksby5tYW5hZ2VyLml0ZW1TdGFydCh0KX19LnByb3RvdHlwZS5pc0ltYWdlQml0bWFwTG9hZGVyPSEwO3ZhciBKTyxzRz1jbGFzcyBleHRlbmRzIERke2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpfWxvYWQodCxlLGkscil7bGV0IG89dGhpcyxzPW5ldyBYOCh0aGlzLm1hbmFnZXIpO3Muc2V0UmVzcG9uc2VUeXBlKCJhcnJheWJ1ZmZlciIpLHMuc2V0UGF0aCh0aGlzLnBhdGgpLHMuc2V0UmVxdWVzdEhlYWRlcih0aGlzLnJlcXVlc3RIZWFkZXIpLHMuc2V0V2l0aENyZWRlbnRpYWxzKHRoaXMud2l0aENyZWRlbnRpYWxzKSxzLmxvYWQodCxmdW5jdGlvbihhKXt0cnl7bGV0IGw9YS5zbGljZSgwKTsodm9pZCAwPT09Sk8mJihKTz1uZXcod2luZG93LkF1ZGlvQ29udGV4dHx8d2luZG93LndlYmtpdEF1ZGlvQ29udGV4dCkpLEpPKS5kZWNvZGVBdWRpb0RhdGEobCxmdW5jdGlvbih1KXtlKHUpfSl9Y2F0Y2gobCl7cj9yKGwpOmNvbnNvbGUuZXJyb3IobCksby5tYW5hZ2VyLml0ZW1FcnJvcih0KX19LGkscil9fTsoY2xhc3MgZXh0ZW5kcyBoRXtjb25zdHJ1Y3Rvcih0LGUsaT0xKXtzdXBlcih2b2lkIDAsaSk7bGV0IHI9KG5ldyB2bikuc2V0KHQpLG89KG5ldyB2bikuc2V0KGUpLHM9bmV3IGllKHIucixyLmcsci5iKSxhPW5ldyBpZShvLnIsby5nLG8uYiksbD1NYXRoLnNxcnQoTWF0aC5QSSksYz1sKk1hdGguc3FydCguNzUpO3RoaXMuc2guY29lZmZpY2llbnRzWzBdLmNvcHkocykuYWRkKGEpLm11bHRpcGx5U2NhbGFyKGwpLHRoaXMuc2guY29lZmZpY2llbnRzWzFdLmNvcHkocykuc3ViKGEpLm11bHRpcGx5U2NhbGFyKGMpfX0pLnByb3RvdHlwZS5pc0hlbWlzcGhlcmVMaWdodFByb2JlPSEwLGNsYXNzIGV4dGVuZHMgaEV7Y29uc3RydWN0b3IodCxlPTEpe3N1cGVyKHZvaWQgMCxlKTtsZXQgaT0obmV3IHZuKS5zZXQodCk7dGhpcy5zaC5jb2VmZmljaWVudHNbMF0uc2V0KGkucixpLmcsaS5iKS5tdWx0aXBseVNjYWxhcigyKk1hdGguc3FydChNYXRoLlBJKSl9fS5wcm90b3R5cGUuaXNBbWJpZW50TGlnaHRQcm9iZT0hMDt2YXIgZEc9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkpe2xldCByLG8scztzd2l0Y2godGhpcy5iaW5kaW5nPXQsdGhpcy52YWx1ZVNpemU9aSxlKXtjYXNlInF1YXRlcm5pb24iOnI9dGhpcy5fc2xlcnAsbz10aGlzLl9zbGVycEFkZGl0aXZlLHM9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24sdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg2KmkpLHRoaXMuX3dvcmtJbmRleD01O2JyZWFrO2Nhc2Uic3RyaW5nIjpjYXNlImJvb2wiOnI9dGhpcy5fc2VsZWN0LG89dGhpcy5fc2VsZWN0LHM9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU90aGVyLHRoaXMuYnVmZmVyPW5ldyBBcnJheSg1KmkpO2JyZWFrO2RlZmF1bHQ6cj10aGlzLl9sZXJwLG89dGhpcy5fbGVycEFkZGl0aXZlLHM9dGhpcy5fc2V0QWRkaXRpdmVJZGVudGl0eU51bWVyaWMsdGhpcy5idWZmZXI9bmV3IEZsb2F0NjRBcnJheSg1KmkpfXRoaXMuX21peEJ1ZmZlclJlZ2lvbj1yLHRoaXMuX21peEJ1ZmZlclJlZ2lvbkFkZGl0aXZlPW8sdGhpcy5fc2V0SWRlbnRpdHk9cyx0aGlzLl9vcmlnSW5kZXg9Myx0aGlzLl9hZGRJbmRleD00LHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTAsdGhpcy51c2VDb3VudD0wLHRoaXMucmVmZXJlbmNlQ291bnQ9MH1hY2N1bXVsYXRlKHQsZSl7bGV0IGk9dGhpcy5idWZmZXIscj10aGlzLnZhbHVlU2l6ZSxvPXQqcityLHM9dGhpcy5jdW11bGF0aXZlV2VpZ2h0O2lmKDA9PT1zKXtmb3IobGV0IGE9MDthIT09cjsrK2EpaVtvK2FdPWlbYV07cz1lfWVsc2Ugcys9ZSx0aGlzLl9taXhCdWZmZXJSZWdpb24oaSxvLDAsZS9zLHIpO3RoaXMuY3VtdWxhdGl2ZVdlaWdodD1zfWFjY3VtdWxhdGVBZGRpdGl2ZSh0KXtsZXQgZT10aGlzLmJ1ZmZlcixpPXRoaXMudmFsdWVTaXplLHI9aSp0aGlzLl9hZGRJbmRleDswPT09dGhpcy5jdW11bGF0aXZlV2VpZ2h0QWRkaXRpdmUmJnRoaXMuX3NldElkZW50aXR5KCksdGhpcy5fbWl4QnVmZmVyUmVnaW9uQWRkaXRpdmUoZSxyLDAsdCxpKSx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSs9dH1hcHBseSh0KXtsZXQgZT10aGlzLnZhbHVlU2l6ZSxpPXRoaXMuYnVmZmVyLHI9dCplK2Usbz10aGlzLmN1bXVsYXRpdmVXZWlnaHQscz10aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZSxhPXRoaXMuYmluZGluZzt0aGlzLmN1bXVsYXRpdmVXZWlnaHQ9MCx0aGlzLmN1bXVsYXRpdmVXZWlnaHRBZGRpdGl2ZT0wLG88MSYmdGhpcy5fbWl4QnVmZmVyUmVnaW9uKGkscixlKnRoaXMuX29yaWdJbmRleCwxLW8sZSkscz4wJiZ0aGlzLl9taXhCdWZmZXJSZWdpb25BZGRpdGl2ZShpLHIsdGhpcy5fYWRkSW5kZXgqZSwxLGUpO2ZvcihsZXQgbD1lLGM9ZStlO2whPT1jOysrbClpZihpW2xdIT09aVtsK2VdKXthLnNldFZhbHVlKGkscik7YnJlYWt9fXNhdmVPcmlnaW5hbFN0YXRlKCl7bGV0IGU9dGhpcy5idWZmZXIsaT10aGlzLnZhbHVlU2l6ZSxyPWkqdGhpcy5fb3JpZ0luZGV4O3RoaXMuYmluZGluZy5nZXRWYWx1ZShlLHIpO2ZvcihsZXQgbz1pLHM9cjtvIT09czsrK28pZVtvXT1lW3IrbyVpXTt0aGlzLl9zZXRJZGVudGl0eSgpLHRoaXMuY3VtdWxhdGl2ZVdlaWdodD0wLHRoaXMuY3VtdWxhdGl2ZVdlaWdodEFkZGl0aXZlPTB9cmVzdG9yZU9yaWdpbmFsU3RhdGUoKXt0aGlzLmJpbmRpbmcuc2V0VmFsdWUodGhpcy5idWZmZXIsMyp0aGlzLnZhbHVlU2l6ZSl9X3NldEFkZGl0aXZlSWRlbnRpdHlOdW1lcmljKCl7bGV0IHQ9dGhpcy5fYWRkSW5kZXgqdGhpcy52YWx1ZVNpemUsZT10K3RoaXMudmFsdWVTaXplO2ZvcihsZXQgaT10O2k8ZTtpKyspdGhpcy5idWZmZXJbaV09MH1fc2V0QWRkaXRpdmVJZGVudGl0eVF1YXRlcm5pb24oKXt0aGlzLl9zZXRBZGRpdGl2ZUlkZW50aXR5TnVtZXJpYygpLHRoaXMuYnVmZmVyW3RoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplKzNdPTF9X3NldEFkZGl0aXZlSWRlbnRpdHlPdGhlcigpe2xldCB0PXRoaXMuX29yaWdJbmRleCp0aGlzLnZhbHVlU2l6ZSxlPXRoaXMuX2FkZEluZGV4KnRoaXMudmFsdWVTaXplO2ZvcihsZXQgaT0wO2k8dGhpcy52YWx1ZVNpemU7aSsrKXRoaXMuYnVmZmVyW2UraV09dGhpcy5idWZmZXJbdCtpXX1fc2VsZWN0KHQsZSxpLHIsbyl7aWYocj49LjUpZm9yKGxldCBzPTA7cyE9PW87KytzKXRbZStzXT10W2krc119X3NsZXJwKHQsZSxpLHIpe3FzLnNsZXJwRmxhdCh0LGUsdCxlLHQsaSxyKX1fc2xlcnBBZGRpdGl2ZSh0LGUsaSxyLG8pe2xldCBzPXRoaXMuX3dvcmtJbmRleCpvO3FzLm11bHRpcGx5UXVhdGVybmlvbnNGbGF0KHQscyx0LGUsdCxpKSxxcy5zbGVycEZsYXQodCxlLHQsZSx0LHMscil9X2xlcnAodCxlLGkscixvKXtsZXQgcz0xLXI7Zm9yKGxldCBhPTA7YSE9PW87KythKXtsZXQgbD1lK2E7dFtsXT10W2xdKnMrdFtpK2FdKnJ9fV9sZXJwQWRkaXRpdmUodCxlLGkscixvKXtmb3IobGV0IHM9MDtzIT09bzsrK3Mpe2xldCBhPWUrczt0W2FdPXRbYV0rdFtpK3NdKnJ9fX0sRUc9IlxcW1xcXVxcLjpcXC8iLEs5ZT1uZXcgUmVnRXhwKCJbIitFRysiXSIsImciKSxURz0iW14iK0VHKyJdIixaOWU9IlteIitFRy5yZXBsYWNlKCJcXC4iLCIiKSsiXSIsSjllPS8oKD86V0MrW1wvOl0pKikvLnNvdXJjZS5yZXBsYWNlKCJXQyIsVEcpLCQ5ZT0vKFdDT0QrKT8vLnNvdXJjZS5yZXBsYWNlKCJXQ09EIixaOWUpLGVxZT0vKD86XC4oV0MrKSg/OlxbKC4rKVxdKT8pPy8uc291cmNlLnJlcGxhY2UoIldDIixURyksdHFlPS9cLihXQyspKD86XFsoLispXF0pPy8uc291cmNlLnJlcGxhY2UoIldDIixURyksbnFlPW5ldyBSZWdFeHAoIl4iK0o5ZSskOWUrZXFlK3RxZSsiJCIpLGlxZT1bIm1hdGVyaWFsIiwibWF0ZXJpYWxzIiwiYm9uZXMiXSxwRz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSl7bGV0IHI9aXx8THIucGFyc2VUcmFja05hbWUoZSk7dGhpcy5fdGFyZ2V0R3JvdXA9dCx0aGlzLl9iaW5kaW5ncz10LnN1YnNjcmliZV8oZSxyKX1nZXRWYWx1ZSh0LGUpe3RoaXMuYmluZCgpO2xldCByPXRoaXMuX2JpbmRpbmdzW3RoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzX107dm9pZCAwIT09ciYmci5nZXRWYWx1ZSh0LGUpfXNldFZhbHVlKHQsZSl7bGV0IGk9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCByPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxvPWkubGVuZ3RoO3IhPT1vOysrcilpW3JdLnNldFZhbHVlKHQsZSl9YmluZCgpe2xldCB0PXRoaXMuX2JpbmRpbmdzO2ZvcihsZXQgZT10aGlzLl90YXJnZXRHcm91cC5uQ2FjaGVkT2JqZWN0c18saT10Lmxlbmd0aDtlIT09aTsrK2UpdFtlXS5iaW5kKCl9dW5iaW5kKCl7bGV0IHQ9dGhpcy5fYmluZGluZ3M7Zm9yKGxldCBlPXRoaXMuX3RhcmdldEdyb3VwLm5DYWNoZWRPYmplY3RzXyxpPXQubGVuZ3RoO2UhPT1pOysrZSl0W2VdLnVuYmluZCgpfX0sTHI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5wYXRoPWksdGhpcy5wYXJzZWRQYXRoPXJ8fG4ucGFyc2VUcmFja05hbWUoaSksdGhpcy5ub2RlPW4uZmluZE5vZGUoZSx0aGlzLnBhcnNlZFBhdGgubm9kZU5hbWUpfHxlLHRoaXMucm9vdE5vZGU9ZSx0aGlzLmdldFZhbHVlPXRoaXMuX2dldFZhbHVlX3VuYm91bmQsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmJvdW5kfXN0YXRpYyBjcmVhdGUoZSxpLHIpe3JldHVybiBlJiZlLmlzQW5pbWF0aW9uT2JqZWN0R3JvdXA/bmV3IG4uQ29tcG9zaXRlKGUsaSxyKTpuZXcgbihlLGkscil9c3RhdGljIHNhbml0aXplTm9kZU5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZSgvXHMvZywiXyIpLnJlcGxhY2UoSzllLCIiKX1zdGF0aWMgcGFyc2VUcmFja05hbWUoZSl7bGV0IGk9bnFlLmV4ZWMoZSk7aWYoIWkpdGhyb3cgbmV3IEVycm9yKCJQcm9wZXJ0eUJpbmRpbmc6IENhbm5vdCBwYXJzZSB0cmFja05hbWU6ICIrZSk7bGV0IHI9e25vZGVOYW1lOmlbMl0sb2JqZWN0TmFtZTppWzNdLG9iamVjdEluZGV4OmlbNF0scHJvcGVydHlOYW1lOmlbNV0scHJvcGVydHlJbmRleDppWzZdfSxvPXIubm9kZU5hbWUmJnIubm9kZU5hbWUubGFzdEluZGV4T2YoIi4iKTtpZih2b2lkIDAhPT1vJiYtMSE9PW8pe2xldCBzPXIubm9kZU5hbWUuc3Vic3RyaW5nKG8rMSk7LTEhPT1pcWUuaW5kZXhPZihzKSYmKHIubm9kZU5hbWU9ci5ub2RlTmFtZS5zdWJzdHJpbmcoMCxvKSxyLm9iamVjdE5hbWU9cyl9aWYobnVsbD09PXIucHJvcGVydHlOYW1lfHwwPT09ci5wcm9wZXJ0eU5hbWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiUHJvcGVydHlCaW5kaW5nOiBjYW4gbm90IHBhcnNlIHByb3BlcnR5TmFtZSBmcm9tIHRyYWNrTmFtZTogIitlKTtyZXR1cm4gcn1zdGF0aWMgZmluZE5vZGUoZSxpKXtpZighaXx8IiI9PT1pfHwiLiI9PT1pfHwtMT09PWl8fGk9PT1lLm5hbWV8fGk9PT1lLnV1aWQpcmV0dXJuIGU7aWYoZS5za2VsZXRvbil7bGV0IHI9ZS5za2VsZXRvbi5nZXRCb25lQnlOYW1lKGkpO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHJ9aWYoZS5jaGlsZHJlbil7bGV0IHI9ZnVuY3Rpb24ocyl7Zm9yKGxldCBhPTA7YTxzLmxlbmd0aDthKyspe2xldCBsPXNbYV07aWYobC5uYW1lPT09aXx8bC51dWlkPT09aSlyZXR1cm4gbDtsZXQgYz1yKGwuY2hpbGRyZW4pO2lmKGMpcmV0dXJuIGN9cmV0dXJuIG51bGx9LG89cihlLmNoaWxkcmVuKTtpZihvKXJldHVybiBvfXJldHVybiBudWxsfV9nZXRWYWx1ZV91bmF2YWlsYWJsZSgpe31fc2V0VmFsdWVfdW5hdmFpbGFibGUoKXt9X2dldFZhbHVlX2RpcmVjdChlLGkpe2VbaV09dGhpcy50YXJnZXRPYmplY3RbdGhpcy5wcm9wZXJ0eU5hbWVdfV9nZXRWYWx1ZV9hcnJheShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbyllW2krK109cltvXX1fZ2V0VmFsdWVfYXJyYXlFbGVtZW50KGUsaSl7ZVtpXT10aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XX1fZ2V0VmFsdWVfdG9BcnJheShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS50b0FycmF5KGUsaSl9X3NldFZhbHVlX2RpcmVjdChlLGkpe3RoaXMudGFyZ2V0T2JqZWN0W3RoaXMucHJvcGVydHlOYW1lXT1lW2ldfV9zZXRWYWx1ZV9kaXJlY3Rfc2V0TmVlZHNVcGRhdGUoZSxpKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfZGlyZWN0X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXt0aGlzLnRhcmdldE9iamVjdFt0aGlzLnByb3BlcnR5TmFtZV09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9hcnJheShlLGkpe2xldCByPXRoaXMucmVzb2x2ZWRQcm9wZXJ0eTtmb3IobGV0IG89MCxzPXIubGVuZ3RoO28hPT1zOysrbylyW29dPWVbaSsrXX1fc2V0VmFsdWVfYXJyYXlfc2V0TmVlZHNVcGRhdGUoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pcltvXT1lW2krK107dGhpcy50YXJnZXRPYmplY3QubmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2FycmF5X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXtsZXQgcj10aGlzLnJlc29sdmVkUHJvcGVydHk7Zm9yKGxldCBvPTAscz1yLmxlbmd0aDtvIT09czsrK28pcltvXT1lW2krK107dGhpcy50YXJnZXRPYmplY3QubWF0cml4V29ybGROZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50KGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtpXX1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5W3RoaXMucHJvcGVydHlJbmRleF09ZVtpXSx0aGlzLnRhcmdldE9iamVjdC5uZWVkc1VwZGF0ZT0hMH1fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGUoZSxpKXt0aGlzLnJlc29sdmVkUHJvcGVydHlbdGhpcy5wcm9wZXJ0eUluZGV4XT1lW2ldLHRoaXMudGFyZ2V0T2JqZWN0Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGU9ITB9X3NldFZhbHVlX2Zyb21BcnJheShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoZSxpKX1fc2V0VmFsdWVfZnJvbUFycmF5X3NldE5lZWRzVXBkYXRlKGUsaSl7dGhpcy5yZXNvbHZlZFByb3BlcnR5LmZyb21BcnJheShlLGkpLHRoaXMudGFyZ2V0T2JqZWN0Lm5lZWRzVXBkYXRlPSEwfV9zZXRWYWx1ZV9mcm9tQXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZShlLGkpe3RoaXMucmVzb2x2ZWRQcm9wZXJ0eS5mcm9tQXJyYXkoZSxpKSx0aGlzLnRhcmdldE9iamVjdC5tYXRyaXhXb3JsZE5lZWRzVXBkYXRlPSEwfV9nZXRWYWx1ZV91bmJvdW5kKGUsaSl7dGhpcy5iaW5kKCksdGhpcy5nZXRWYWx1ZShlLGkpfV9zZXRWYWx1ZV91bmJvdW5kKGUsaSl7dGhpcy5iaW5kKCksdGhpcy5zZXRWYWx1ZShlLGkpfWJpbmQoKXtsZXQgZT10aGlzLm5vZGUsaT10aGlzLnBhcnNlZFBhdGgscj1pLm9iamVjdE5hbWUsbz1pLnByb3BlcnR5TmFtZSxzPWkucHJvcGVydHlJbmRleDtpZihlfHwoZT1uLmZpbmROb2RlKHRoaXMucm9vdE5vZGUsaS5ub2RlTmFtZSl8fHRoaXMucm9vdE5vZGUsdGhpcy5ub2RlPWUpLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5hdmFpbGFibGUsdGhpcy5zZXRWYWx1ZT10aGlzLl9zZXRWYWx1ZV91bmF2YWlsYWJsZSwhZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgbm9kZSBmb3IgdHJhY2s6ICIrdGhpcy5wYXRoKyIgYnV0IGl0IHdhc24ndCBmb3VuZC4iKTtpZihyKXtsZXQgdT1pLm9iamVjdEluZGV4O3N3aXRjaChyKXtjYXNlIm1hdGVyaWFscyI6aWYoIWUubWF0ZXJpYWwpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgbWF0ZXJpYWwuIix0aGlzKTtpZighZS5tYXRlcmlhbC5tYXRlcmlhbHMpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbWF0ZXJpYWwubWF0ZXJpYWxzIGFzIG5vZGUubWF0ZXJpYWwgZG9lcyBub3QgaGF2ZSBhIG1hdGVyaWFscyBhcnJheS4iLHRoaXMpO2U9ZS5tYXRlcmlhbC5tYXRlcmlhbHM7YnJlYWs7Y2FzZSJib25lcyI6aWYoIWUuc2tlbGV0b24pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gYm9uZXMgYXMgbm9kZSBkb2VzIG5vdCBoYXZlIGEgc2tlbGV0b24uIix0aGlzKTtlPWUuc2tlbGV0b24uYm9uZXM7Zm9yKGxldCBkPTA7ZDxlLmxlbmd0aDtkKyspaWYoZVtkXS5uYW1lPT09dSl7dT1kO2JyZWFrfWJyZWFrO2RlZmF1bHQ6aWYodm9pZCAwPT09ZVtyXSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IENhbiBub3QgYmluZCB0byBvYmplY3ROYW1lIG9mIG5vZGUgdW5kZWZpbmVkLiIsdGhpcyk7ZT1lW3JdfWlmKHZvaWQgMCE9PXUpe2lmKHZvaWQgMD09PWVbdV0pcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBUcnlpbmcgdG8gYmluZCB0byBvYmplY3RJbmRleCBvZiBvYmplY3ROYW1lLCBidXQgaXMgdW5kZWZpbmVkLiIsdGhpcyxlKTtlPWVbdV19fWxldCBhPWVbb107aWYodm9pZCAwPT09YSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJUSFJFRS5Qcm9wZXJ0eUJpbmRpbmc6IFRyeWluZyB0byB1cGRhdGUgcHJvcGVydHkgZm9yIHRyYWNrOiAiK2kubm9kZU5hbWUrIi4iK28rIiBidXQgaXQgd2Fzbid0IGZvdW5kLiIsZSk7bGV0IGw9dGhpcy5WZXJzaW9uaW5nLk5vbmU7dGhpcy50YXJnZXRPYmplY3Q9ZSx2b2lkIDAhPT1lLm5lZWRzVXBkYXRlP2w9dGhpcy5WZXJzaW9uaW5nLk5lZWRzVXBkYXRlOnZvaWQgMCE9PWUubWF0cml4V29ybGROZWVkc1VwZGF0ZSYmKGw9dGhpcy5WZXJzaW9uaW5nLk1hdHJpeFdvcmxkTmVlZHNVcGRhdGUpO2xldCBjPXRoaXMuQmluZGluZ1R5cGUuRGlyZWN0O2lmKHZvaWQgMCE9PXMpe2lmKCJtb3JwaFRhcmdldEluZmx1ZW5jZXMiPT09byl7aWYoIWUuZ2VvbWV0cnkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkuIix0aGlzKTtpZighZS5nZW9tZXRyeS5pc0J1ZmZlckdlb21ldHJ5KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIlRIUkVFLlByb3BlcnR5QmluZGluZzogQ2FuIG5vdCBiaW5kIHRvIG1vcnBoVGFyZ2V0SW5mbHVlbmNlcyBvbiBUSFJFRS5HZW9tZXRyeS4gVXNlIFRIUkVFLkJ1ZmZlckdlb21ldHJ5IGluc3RlYWQuIix0aGlzKTtpZighZS5nZW9tZXRyeS5tb3JwaEF0dHJpYnV0ZXMpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiVEhSRUUuUHJvcGVydHlCaW5kaW5nOiBDYW4gbm90IGJpbmQgdG8gbW9ycGhUYXJnZXRJbmZsdWVuY2VzIGJlY2F1c2Ugbm9kZSBkb2VzIG5vdCBoYXZlIGEgZ2VvbWV0cnkubW9ycGhBdHRyaWJ1dGVzLiIsdGhpcyk7dm9pZCAwIT09ZS5tb3JwaFRhcmdldERpY3Rpb25hcnlbc10mJihzPWUubW9ycGhUYXJnZXREaWN0aW9uYXJ5W3NdKX1jPXRoaXMuQmluZGluZ1R5cGUuQXJyYXlFbGVtZW50LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hLHRoaXMucHJvcGVydHlJbmRleD1zfWVsc2Ugdm9pZCAwIT09YS5mcm9tQXJyYXkmJnZvaWQgMCE9PWEudG9BcnJheT8oYz10aGlzLkJpbmRpbmdUeXBlLkhhc0Zyb21Ub0FycmF5LHRoaXMucmVzb2x2ZWRQcm9wZXJ0eT1hKTpBcnJheS5pc0FycmF5KGEpPyhjPXRoaXMuQmluZGluZ1R5cGUuRW50aXJlQXJyYXksdGhpcy5yZXNvbHZlZFByb3BlcnR5PWEpOnRoaXMucHJvcGVydHlOYW1lPW87dGhpcy5nZXRWYWx1ZT10aGlzLkdldHRlckJ5QmluZGluZ1R5cGVbY10sdGhpcy5zZXRWYWx1ZT10aGlzLlNldHRlckJ5QmluZGluZ1R5cGVBbmRWZXJzaW9uaW5nW2NdW2xdfXVuYmluZCgpe3RoaXMubm9kZT1udWxsLHRoaXMuZ2V0VmFsdWU9dGhpcy5fZ2V0VmFsdWVfdW5ib3VuZCx0aGlzLnNldFZhbHVlPXRoaXMuX3NldFZhbHVlX3VuYm91bmR9fXJldHVybiBuLkNvbXBvc2l0ZT1wRyxufSkoKTtMci5wcm90b3R5cGUuQmluZGluZ1R5cGU9e0RpcmVjdDowLEVudGlyZUFycmF5OjEsQXJyYXlFbGVtZW50OjIsSGFzRnJvbVRvQXJyYXk6M30sTHIucHJvdG90eXBlLlZlcnNpb25pbmc9e05vbmU6MCxOZWVkc1VwZGF0ZToxLE1hdHJpeFdvcmxkTmVlZHNVcGRhdGU6Mn0sTHIucHJvdG90eXBlLkdldHRlckJ5QmluZGluZ1R5cGU9W0xyLnByb3RvdHlwZS5fZ2V0VmFsdWVfZGlyZWN0LExyLnByb3RvdHlwZS5fZ2V0VmFsdWVfYXJyYXksTHIucHJvdG90eXBlLl9nZXRWYWx1ZV9hcnJheUVsZW1lbnQsTHIucHJvdG90eXBlLl9nZXRWYWx1ZV90b0FycmF5XSxMci5wcm90b3R5cGUuU2V0dGVyQnlCaW5kaW5nVHlwZUFuZFZlcnNpb25pbmc9W1tMci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdCxMci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXROZWVkc1VwZGF0ZSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2RpcmVjdF9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXSxbTHIucHJvdG90eXBlLl9zZXRWYWx1ZV9hcnJheSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2FycmF5X3NldE5lZWRzVXBkYXRlLExyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlfc2V0TWF0cml4V29ybGROZWVkc1VwZGF0ZV0sW0xyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50LExyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE5lZWRzVXBkYXRlLExyLnByb3RvdHlwZS5fc2V0VmFsdWVfYXJyYXlFbGVtZW50X3NldE1hdHJpeFdvcmxkTmVlZHNVcGRhdGVdLFtMci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXROZWVkc1VwZGF0ZSxMci5wcm90b3R5cGUuX3NldFZhbHVlX2Zyb21BcnJheV9zZXRNYXRyaXhXb3JsZE5lZWRzVXBkYXRlXV0sY2xhc3MgZXh0ZW5kcyBFcHtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMuX3Jvb3Q9dCx0aGlzLl9pbml0TWVtb3J5TWFuYWdlcigpLHRoaXMuX2FjY3VJbmRleD0wLHRoaXMudGltZT0wLHRoaXMudGltZVNjYWxlPTF9X2JpbmRBY3Rpb24odCxlKXtsZXQgaT10Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3Qscj10Ll9jbGlwLnRyYWNrcyxvPXIubGVuZ3RoLHM9dC5fcHJvcGVydHlCaW5kaW5ncyxhPXQuX2ludGVycG9sYW50cyxsPWkudXVpZCxjPXRoaXMuX2JpbmRpbmdzQnlSb290QW5kTmFtZSx1PWNbbF07dm9pZCAwPT09dSYmKHU9e30sY1tsXT11KTtmb3IobGV0IGQ9MDtkIT09bzsrK2Qpe2xldCBwPXJbZF0saD1wLm5hbWUsZj11W2hdO2lmKHZvaWQgMCE9PWYpKytmLnJlZmVyZW5jZUNvdW50LHNbZF09ZjtlbHNle2lmKGY9c1tkXSx2b2lkIDAhPT1mKXtudWxsPT09Zi5fY2FjaGVJbmRleCYmKCsrZi5yZWZlcmVuY2VDb3VudCx0aGlzLl9hZGRJbmFjdGl2ZUJpbmRpbmcoZixsLGgpKTtjb250aW51ZX1mPW5ldyBkRyhMci5jcmVhdGUoaSxoLGUmJmUuX3Byb3BlcnR5QmluZGluZ3NbZF0uYmluZGluZy5wYXJzZWRQYXRoKSxwLlZhbHVlVHlwZU5hbWUscC5nZXRWYWx1ZVNpemUoKSksKytmLnJlZmVyZW5jZUNvdW50LHRoaXMuX2FkZEluYWN0aXZlQmluZGluZyhmLGwsaCksc1tkXT1mfWFbZF0ucmVzdWx0QnVmZmVyPWYuYnVmZmVyfX1fYWN0aXZhdGVBY3Rpb24odCl7aWYoIXRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtpZihudWxsPT09dC5fY2FjaGVJbmRleCl7bGV0IGk9KHQuX2xvY2FsUm9vdHx8dGhpcy5fcm9vdCkudXVpZCxyPXQuX2NsaXAudXVpZCxvPXRoaXMuX2FjdGlvbnNCeUNsaXBbcl07dGhpcy5fYmluZEFjdGlvbih0LG8mJm8ua25vd25BY3Rpb25zWzBdKSx0aGlzLl9hZGRJbmFjdGl2ZUFjdGlvbih0LHIsaSl9bGV0IGU9dC5fcHJvcGVydHlCaW5kaW5ncztmb3IobGV0IGk9MCxyPWUubGVuZ3RoO2khPT1yOysraSl7bGV0IG89ZVtpXTswPT1vLnVzZUNvdW50KysmJih0aGlzLl9sZW5kQmluZGluZyhvKSxvLnNhdmVPcmlnaW5hbFN0YXRlKCkpfXRoaXMuX2xlbmRBY3Rpb24odCl9fV9kZWFjdGl2YXRlQWN0aW9uKHQpe2lmKHRoaXMuX2lzQWN0aXZlQWN0aW9uKHQpKXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PS0tby51c2VDb3VudCYmKG8ucmVzdG9yZU9yaWdpbmFsU3RhdGUoKSx0aGlzLl90YWtlQmFja0JpbmRpbmcobykpfXRoaXMuX3Rha2VCYWNrQWN0aW9uKHQpfX1faW5pdE1lbW9yeU1hbmFnZXIoKXt0aGlzLl9hY3Rpb25zPVtdLHRoaXMuX25BY3RpdmVBY3Rpb25zPTAsdGhpcy5fYWN0aW9uc0J5Q2xpcD17fSx0aGlzLl9iaW5kaW5ncz1bXSx0aGlzLl9uQWN0aXZlQmluZGluZ3M9MCx0aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWU9e30sdGhpcy5fY29udHJvbEludGVycG9sYW50cz1bXSx0aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cz0wO2xldCB0PXRoaXM7dGhpcy5zdGF0cz17YWN0aW9uczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2FjdGlvbnMubGVuZ3RofSxnZXQgaW5Vc2UoKXtyZXR1cm4gdC5fbkFjdGl2ZUFjdGlvbnN9fSxiaW5kaW5nczp7Z2V0IHRvdGFsKCl7cmV0dXJuIHQuX2JpbmRpbmdzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVCaW5kaW5nc319LGNvbnRyb2xJbnRlcnBvbGFudHM6e2dldCB0b3RhbCgpe3JldHVybiB0Ll9jb250cm9sSW50ZXJwb2xhbnRzLmxlbmd0aH0sZ2V0IGluVXNlKCl7cmV0dXJuIHQuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzfX19fV9pc0FjdGl2ZUFjdGlvbih0KXtsZXQgZT10Ll9jYWNoZUluZGV4O3JldHVybiBudWxsIT09ZSYmZTx0aGlzLl9uQWN0aXZlQWN0aW9uc31fYWRkSW5hY3RpdmVBY3Rpb24odCxlLGkpe2xldCByPXRoaXMuX2FjdGlvbnMsbz10aGlzLl9hY3Rpb25zQnlDbGlwLHM9b1tlXTtpZih2b2lkIDA9PT1zKXM9e2tub3duQWN0aW9uczpbdF0sYWN0aW9uQnlSb290Ont9fSx0Ll9ieUNsaXBDYWNoZUluZGV4PTAsb1tlXT1zO2Vsc2V7bGV0IGE9cy5rbm93bkFjdGlvbnM7dC5fYnlDbGlwQ2FjaGVJbmRleD1hLmxlbmd0aCxhLnB1c2godCl9dC5fY2FjaGVJbmRleD1yLmxlbmd0aCxyLnB1c2godCkscy5hY3Rpb25CeVJvb3RbaV09dH1fcmVtb3ZlSW5hY3RpdmVBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPWVbZS5sZW5ndGgtMV0scj10Ll9jYWNoZUluZGV4O2kuX2NhY2hlSW5kZXg9cixlW3JdPWksZS5wb3AoKSx0Ll9jYWNoZUluZGV4PW51bGw7bGV0IG89dC5fY2xpcC51dWlkLHM9dGhpcy5fYWN0aW9uc0J5Q2xpcCxhPXNbb10sbD1hLmtub3duQWN0aW9ucyxjPWxbbC5sZW5ndGgtMV0sdT10Ll9ieUNsaXBDYWNoZUluZGV4O2MuX2J5Q2xpcENhY2hlSW5kZXg9dSxsW3VdPWMsbC5wb3AoKSx0Ll9ieUNsaXBDYWNoZUluZGV4PW51bGwsZGVsZXRlIGEuYWN0aW9uQnlSb290Wyh0Ll9sb2NhbFJvb3R8fHRoaXMuX3Jvb3QpLnV1aWRdLDA9PT1sLmxlbmd0aCYmZGVsZXRlIHNbb10sdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KX1fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nc0ZvckFjdGlvbih0KXtsZXQgZT10Ll9wcm9wZXJ0eUJpbmRpbmdzO2ZvcihsZXQgaT0wLHI9ZS5sZW5ndGg7aSE9PXI7KytpKXtsZXQgbz1lW2ldOzA9PS0tby5yZWZlcmVuY2VDb3VudCYmdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKG8pfX1fbGVuZEFjdGlvbih0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dC5fY2FjaGVJbmRleCxyPXRoaXMuX25BY3RpdmVBY3Rpb25zKyssbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fdGFrZUJhY2tBY3Rpb24odCl7bGV0IGU9dGhpcy5fYWN0aW9ucyxpPXQuX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVBY3Rpb25zLG89ZVtyXTt0Ll9jYWNoZUluZGV4PXIsZVtyXT10LG8uX2NhY2hlSW5kZXg9aSxlW2ldPW99X2FkZEluYWN0aXZlQmluZGluZyh0LGUsaSl7bGV0IHI9dGhpcy5fYmluZGluZ3NCeVJvb3RBbmROYW1lLG89dGhpcy5fYmluZGluZ3Mscz1yW2VdO3ZvaWQgMD09PXMmJihzPXt9LHJbZV09cyksc1tpXT10LHQuX2NhY2hlSW5kZXg9by5sZW5ndGgsby5wdXNoKHQpfV9yZW1vdmVJbmFjdGl2ZUJpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10LmJpbmRpbmcscj1pLnJvb3ROb2RlLnV1aWQsbz1pLnBhdGgscz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWUsYT1zW3JdLGw9ZVtlLmxlbmd0aC0xXSxjPXQuX2NhY2hlSW5kZXg7bC5fY2FjaGVJbmRleD1jLGVbY109bCxlLnBvcCgpLGRlbGV0ZSBhW29dLDA9PT1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJmRlbGV0ZSBzW3JdfV9sZW5kQmluZGluZyh0KXtsZXQgZT10aGlzLl9iaW5kaW5ncyxpPXQuX2NhY2hlSW5kZXgscj10aGlzLl9uQWN0aXZlQmluZGluZ3MrKyxvPWVbcl07dC5fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9jYWNoZUluZGV4PWksZVtpXT1vfV90YWtlQmFja0JpbmRpbmcodCl7bGV0IGU9dGhpcy5fYmluZGluZ3MsaT10Ll9jYWNoZUluZGV4LHI9LS10aGlzLl9uQWN0aXZlQmluZGluZ3Msbz1lW3JdO3QuX2NhY2hlSW5kZXg9cixlW3JdPXQsby5fY2FjaGVJbmRleD1pLGVbaV09b31fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpe2xldCB0PXRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHMsZT10aGlzLl9uQWN0aXZlQ29udHJvbEludGVycG9sYW50cysrLGk9dFtlXTtyZXR1cm4gdm9pZCAwPT09aSYmKGk9bmV3IE1rKG5ldyBGbG9hdDMyQXJyYXkoMiksbmV3IEZsb2F0MzJBcnJheSgyKSwxLHRoaXMuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXIpLGkuX19jYWNoZUluZGV4PWUsdFtlXT1pKSxpfV90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KXtsZXQgZT10aGlzLl9jb250cm9sSW50ZXJwb2xhbnRzLGk9dC5fX2NhY2hlSW5kZXgscj0tLXRoaXMuX25BY3RpdmVDb250cm9sSW50ZXJwb2xhbnRzLG89ZVtyXTt0Ll9fY2FjaGVJbmRleD1yLGVbcl09dCxvLl9fY2FjaGVJbmRleD1pLGVbaV09b31jbGlwQWN0aW9uKHQsZSxpKXtsZXQgcj1lfHx0aGlzLl9yb290LG89ci51dWlkLHM9InN0cmluZyI9PXR5cGVvZiB0P1NrLmZpbmRCeU5hbWUocix0KTp0LGE9bnVsbCE9PXM/cy51dWlkOnQsbD10aGlzLl9hY3Rpb25zQnlDbGlwW2FdLGM9bnVsbDtpZih2b2lkIDA9PT1pJiYoaT1udWxsIT09cz9zLmJsZW5kTW9kZToyNTAwKSx2b2lkIDAhPT1sKXtsZXQgZD1sLmFjdGlvbkJ5Um9vdFtvXTtpZih2b2lkIDAhPT1kJiZkLmJsZW5kTW9kZT09PWkpcmV0dXJuIGQ7Yz1sLmtub3duQWN0aW9uc1swXSxudWxsPT09cyYmKHM9Yy5fY2xpcCl9aWYobnVsbD09PXMpcmV0dXJuIG51bGw7bGV0IHU9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSxpPW51bGwscj1lLmJsZW5kTW9kZSl7dGhpcy5fbWl4ZXI9dCx0aGlzLl9jbGlwPWUsdGhpcy5fbG9jYWxSb290PWksdGhpcy5ibGVuZE1vZGU9cjtsZXQgbz1lLnRyYWNrcyxzPW8ubGVuZ3RoLGE9bmV3IEFycmF5KHMpLGw9e2VuZGluZ1N0YXJ0Om9iLGVuZGluZ0VuZDpvYn07Zm9yKGxldCBjPTA7YyE9PXM7KytjKXtsZXQgdT1vW2NdLmNyZWF0ZUludGVycG9sYW50KG51bGwpO2FbY109dSx1LnNldHRpbmdzPWx9dGhpcy5faW50ZXJwb2xhbnRTZXR0aW5ncz1sLHRoaXMuX2ludGVycG9sYW50cz1hLHRoaXMuX3Byb3BlcnR5QmluZGluZ3M9bmV3IEFycmF5KHMpLHRoaXMuX2NhY2hlSW5kZXg9bnVsbCx0aGlzLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsdGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMubG9vcD0yMjAxLHRoaXMuX2xvb3BDb3VudD0tMSx0aGlzLl9zdGFydFRpbWU9bnVsbCx0aGlzLnRpbWU9MCx0aGlzLnRpbWVTY2FsZT0xLHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZT0xLHRoaXMud2VpZ2h0PTEsdGhpcy5fZWZmZWN0aXZlV2VpZ2h0PTEsdGhpcy5yZXBldGl0aW9ucz0xLzAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmFibGVkPSEwLHRoaXMuY2xhbXBXaGVuRmluaXNoZWQ9ITEsdGhpcy56ZXJvU2xvcGVBdFN0YXJ0PSEwLHRoaXMuemVyb1Nsb3BlQXRFbmQ9ITB9cGxheSgpe3JldHVybiB0aGlzLl9taXhlci5fYWN0aXZhdGVBY3Rpb24odGhpcyksdGhpc31zdG9wKCl7cmV0dXJuIHRoaXMuX21peGVyLl9kZWFjdGl2YXRlQWN0aW9uKHRoaXMpLHRoaXMucmVzZXQoKX1yZXNldCgpe3JldHVybiB0aGlzLnBhdXNlZD0hMSx0aGlzLmVuYWJsZWQ9ITAsdGhpcy50aW1lPTAsdGhpcy5fbG9vcENvdW50PS0xLHRoaXMuX3N0YXJ0VGltZT1udWxsLHRoaXMuc3RvcEZhZGluZygpLnN0b3BXYXJwaW5nKCl9aXNSdW5uaW5nKCl7cmV0dXJuIHRoaXMuZW5hYmxlZCYmIXRoaXMucGF1c2VkJiYwIT09dGhpcy50aW1lU2NhbGUmJm51bGw9PT10aGlzLl9zdGFydFRpbWUmJnRoaXMuX21peGVyLl9pc0FjdGl2ZUFjdGlvbih0aGlzKX1pc1NjaGVkdWxlZCgpe3JldHVybiB0aGlzLl9taXhlci5faXNBY3RpdmVBY3Rpb24odGhpcyl9c3RhcnRBdCh0KXtyZXR1cm4gdGhpcy5fc3RhcnRUaW1lPXQsdGhpc31zZXRMb29wKHQsZSl7cmV0dXJuIHRoaXMubG9vcD10LHRoaXMucmVwZXRpdGlvbnM9ZSx0aGlzfXNldEVmZmVjdGl2ZVdlaWdodCh0KXtyZXR1cm4gdGhpcy53ZWlnaHQ9dCx0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9dGhpcy5lbmFibGVkP3Q6MCx0aGlzLnN0b3BGYWRpbmcoKX1nZXRFZmZlY3RpdmVXZWlnaHQoKXtyZXR1cm4gdGhpcy5fZWZmZWN0aXZlV2VpZ2h0fWZhZGVJbih0KXtyZXR1cm4gdGhpcy5fc2NoZWR1bGVGYWRpbmcodCwwLDEpfWZhZGVPdXQodCl7cmV0dXJuIHRoaXMuX3NjaGVkdWxlRmFkaW5nKHQsMSwwKX1jcm9zc0ZhZGVGcm9tKHQsZSxpKXtpZih0LmZhZGVPdXQoZSksdGhpcy5mYWRlSW4oZSksaSl7bGV0IHI9dGhpcy5fY2xpcC5kdXJhdGlvbixvPXQuX2NsaXAuZHVyYXRpb24sYT1yL287dC53YXJwKDEsby9yLGUpLHRoaXMud2FycChhLDEsZSl9cmV0dXJuIHRoaXN9Y3Jvc3NGYWRlVG8odCxlLGkpe3JldHVybiB0LmNyb3NzRmFkZUZyb20odGhpcyxlLGkpfXN0b3BGYWRpbmcoKXtsZXQgdD10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtyZXR1cm4gbnVsbCE9PXQmJih0aGlzLl93ZWlnaHRJbnRlcnBvbGFudD1udWxsLHRoaXMuX21peGVyLl90YWtlQmFja0NvbnRyb2xJbnRlcnBvbGFudCh0KSksdGhpc31zZXRFZmZlY3RpdmVUaW1lU2NhbGUodCl7cmV0dXJuIHRoaXMudGltZVNjYWxlPXQsdGhpcy5fZWZmZWN0aXZlVGltZVNjYWxlPXRoaXMucGF1c2VkPzA6dCx0aGlzLnN0b3BXYXJwaW5nKCl9Z2V0RWZmZWN0aXZlVGltZVNjYWxlKCl7cmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZX1zZXREdXJhdGlvbih0KXtyZXR1cm4gdGhpcy50aW1lU2NhbGU9dGhpcy5fY2xpcC5kdXJhdGlvbi90LHRoaXMuc3RvcFdhcnBpbmcoKX1zeW5jV2l0aCh0KXtyZXR1cm4gdGhpcy50aW1lPXQudGltZSx0aGlzLnRpbWVTY2FsZT10LnRpbWVTY2FsZSx0aGlzLnN0b3BXYXJwaW5nKCl9aGFsdCh0KXtyZXR1cm4gdGhpcy53YXJwKHRoaXMuX2VmZmVjdGl2ZVRpbWVTY2FsZSwwLHQpfXdhcnAodCxlLGkpe2xldCByPXRoaXMuX21peGVyLG89ci50aW1lLHM9dGhpcy50aW1lU2NhbGUsYT10aGlzLl90aW1lU2NhbGVJbnRlcnBvbGFudDtudWxsPT09YSYmKGE9ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3RpbWVTY2FsZUludGVycG9sYW50PWEpO2xldCBsPWEucGFyYW1ldGVyUG9zaXRpb25zLGM9YS5zYW1wbGVWYWx1ZXM7cmV0dXJuIGxbMF09byxsWzFdPW8raSxjWzBdPXQvcyxjWzFdPWUvcyx0aGlzfXN0b3BXYXJwaW5nKCl7bGV0IHQ9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7cmV0dXJuIG51bGwhPT10JiYodGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ9bnVsbCx0aGlzLl9taXhlci5fdGFrZUJhY2tDb250cm9sSW50ZXJwb2xhbnQodCkpLHRoaXN9Z2V0TWl4ZXIoKXtyZXR1cm4gdGhpcy5fbWl4ZXJ9Z2V0Q2xpcCgpe3JldHVybiB0aGlzLl9jbGlwfWdldFJvb3QoKXtyZXR1cm4gdGhpcy5fbG9jYWxSb290fHx0aGlzLl9taXhlci5fcm9vdH1fdXBkYXRlKHQsZSxpLHIpe2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuIHZvaWQgdGhpcy5fdXBkYXRlV2VpZ2h0KHQpO2xldCBvPXRoaXMuX3N0YXJ0VGltZTtpZihudWxsIT09byl7bGV0IGw9KHQtbykqaTtpZihsPDB8fDA9PT1pKXJldHVybjt0aGlzLl9zdGFydFRpbWU9bnVsbCxlPWkqbH1lKj10aGlzLl91cGRhdGVUaW1lU2NhbGUodCk7bGV0IHM9dGhpcy5fdXBkYXRlVGltZShlKSxhPXRoaXMuX3VwZGF0ZVdlaWdodCh0KTtpZihhPjApe2xldCBsPXRoaXMuX2ludGVycG9sYW50cyxjPXRoaXMuX3Byb3BlcnR5QmluZGluZ3M7aWYoMjUwMT09PXRoaXMuYmxlbmRNb2RlKWZvcihsZXQgdT0wLGQ9bC5sZW5ndGg7dSE9PWQ7Kyt1KWxbdV0uZXZhbHVhdGUocyksY1t1XS5hY2N1bXVsYXRlQWRkaXRpdmUoYSk7ZWxzZSBmb3IobGV0IHU9MCxkPWwubGVuZ3RoO3UhPT1kOysrdSlsW3VdLmV2YWx1YXRlKHMpLGNbdV0uYWNjdW11bGF0ZShyLGEpfX1fdXBkYXRlV2VpZ2h0KHQpe2xldCBlPTA7aWYodGhpcy5lbmFibGVkKXtlPXRoaXMud2VpZ2h0O2xldCBpPXRoaXMuX3dlaWdodEludGVycG9sYW50O2lmKG51bGwhPT1pKXtsZXQgcj1pLmV2YWx1YXRlKHQpWzBdO2UqPXIsdD5pLnBhcmFtZXRlclBvc2l0aW9uc1sxXSYmKHRoaXMuc3RvcEZhZGluZygpLDA9PT1yJiYodGhpcy5lbmFibGVkPSExKSl9fXJldHVybiB0aGlzLl9lZmZlY3RpdmVXZWlnaHQ9ZSxlfV91cGRhdGVUaW1lU2NhbGUodCl7bGV0IGU9MDtpZighdGhpcy5wYXVzZWQpe2U9dGhpcy50aW1lU2NhbGU7bGV0IGk9dGhpcy5fdGltZVNjYWxlSW50ZXJwb2xhbnQ7bnVsbCE9PWkmJihlKj1pLmV2YWx1YXRlKHQpWzBdLHQ+aS5wYXJhbWV0ZXJQb3NpdGlvbnNbMV0mJih0aGlzLnN0b3BXYXJwaW5nKCksMD09PWU/dGhpcy5wYXVzZWQ9ITA6dGhpcy50aW1lU2NhbGU9ZSkpfXJldHVybiB0aGlzLl9lZmZlY3RpdmVUaW1lU2NhbGU9ZSxlfV91cGRhdGVUaW1lKHQpe2xldCBlPXRoaXMuX2NsaXAuZHVyYXRpb24saT10aGlzLmxvb3Ascj10aGlzLnRpbWUrdCxvPXRoaXMuX2xvb3BDb3VudCxzPTIyMDI9PT1pO2lmKDA9PT10KXJldHVybi0xPT09bz9yOnMmJjE9PSgxJm8pP2UtcjpyO2lmKDIyMDA9PT1pKXstMT09PW8mJih0aGlzLl9sb29wQ291bnQ9MCx0aGlzLl9zZXRFbmRpbmdzKCEwLCEwLCExKSk7ZTp7aWYocj49ZSlyPWU7ZWxzZXtpZighKHI8MCkpe3RoaXMudGltZT1yO2JyZWFrIGV9cj0wfXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHRoaXMudGltZT1yLHRoaXMuX21peGVyLmRpc3BhdGNoRXZlbnQoe3R5cGU6ImZpbmlzaGVkIixhY3Rpb246dGhpcyxkaXJlY3Rpb246dDwwPy0xOjF9KX19ZWxzZXtpZigtMT09PW8mJih0Pj0wPyhvPTAsdGhpcy5fc2V0RW5kaW5ncyghMCwwPT09dGhpcy5yZXBldGl0aW9ucyxzKSk6dGhpcy5fc2V0RW5kaW5ncygwPT09dGhpcy5yZXBldGl0aW9ucywhMCxzKSkscj49ZXx8cjwwKXtsZXQgYT1NYXRoLmZsb29yKHIvZSk7ci09ZSphLG8rPU1hdGguYWJzKGEpO2xldCBsPXRoaXMucmVwZXRpdGlvbnMtbztpZihsPD0wKXRoaXMuY2xhbXBXaGVuRmluaXNoZWQ/dGhpcy5wYXVzZWQ9ITA6dGhpcy5lbmFibGVkPSExLHI9dD4wP2U6MCx0aGlzLnRpbWU9cix0aGlzLl9taXhlci5kaXNwYXRjaEV2ZW50KHt0eXBlOiJmaW5pc2hlZCIsYWN0aW9uOnRoaXMsZGlyZWN0aW9uOnQ+MD8xOi0xfSk7ZWxzZXtpZigxPT09bCl7bGV0IGM9dDwwO3RoaXMuX3NldEVuZGluZ3MoYywhYyxzKX1lbHNlIHRoaXMuX3NldEVuZGluZ3MoITEsITEscyk7dGhpcy5fbG9vcENvdW50PW8sdGhpcy50aW1lPXIsdGhpcy5fbWl4ZXIuZGlzcGF0Y2hFdmVudCh7dHlwZToibG9vcCIsYWN0aW9uOnRoaXMsbG9vcERlbHRhOmF9KX19ZWxzZSB0aGlzLnRpbWU9cjtpZihzJiYxPT0oMSZvKSlyZXR1cm4gZS1yfXJldHVybiByfV9zZXRFbmRpbmdzKHQsZSxpKXtsZXQgcj10aGlzLl9pbnRlcnBvbGFudFNldHRpbmdzO2k/KHIuZW5kaW5nU3RhcnQ9c2Isci5lbmRpbmdFbmQ9c2IpOihyLmVuZGluZ1N0YXJ0PXQ/dGhpcy56ZXJvU2xvcGVBdFN0YXJ0P3NiOm9iOjI0MDIsci5lbmRpbmdFbmQ9ZT90aGlzLnplcm9TbG9wZUF0RW5kP3NiOm9iOjI0MDIpfV9zY2hlZHVsZUZhZGluZyh0LGUsaSl7bGV0IHI9dGhpcy5fbWl4ZXIsbz1yLnRpbWUscz10aGlzLl93ZWlnaHRJbnRlcnBvbGFudDtudWxsPT09cyYmKHM9ci5fbGVuZENvbnRyb2xJbnRlcnBvbGFudCgpLHRoaXMuX3dlaWdodEludGVycG9sYW50PXMpO2xldCBhPXMucGFyYW1ldGVyUG9zaXRpb25zLGw9cy5zYW1wbGVWYWx1ZXM7cmV0dXJuIGFbMF09byxsWzBdPWUsYVsxXT1vK3QsbFsxXT1pLHRoaXN9fSh0aGlzLHMsZSxpKTtyZXR1cm4gdGhpcy5fYmluZEFjdGlvbih1LGMpLHRoaXMuX2FkZEluYWN0aXZlQWN0aW9uKHUsYSxvKSx1fWV4aXN0aW5nQWN0aW9uKHQsZSl7bGV0IGk9ZXx8dGhpcy5fcm9vdCxyPWkudXVpZCxvPSJzdHJpbmciPT10eXBlb2YgdD9Tay5maW5kQnlOYW1lKGksdCk6dCxhPXRoaXMuX2FjdGlvbnNCeUNsaXBbbz9vLnV1aWQ6dF07cmV0dXJuIHZvaWQgMCE9PWEmJmEuYWN0aW9uQnlSb290W3JdfHxudWxsfXN0b3BBbGxBY3Rpb24oKXtsZXQgdD10aGlzLl9hY3Rpb25zO2ZvcihsZXQgaT10aGlzLl9uQWN0aXZlQWN0aW9ucy0xO2k+PTA7LS1pKXRbaV0uc3RvcCgpO3JldHVybiB0aGlzfXVwZGF0ZSh0KXtsZXQgZT10aGlzLl9hY3Rpb25zLGk9dGhpcy5fbkFjdGl2ZUFjdGlvbnMscj10aGlzLnRpbWUrPXQqPXRoaXMudGltZVNjYWxlLG89TWF0aC5zaWduKHQpLHM9dGhpcy5fYWNjdUluZGV4Xj0xO2ZvcihsZXQgYz0wO2MhPT1pOysrYyllW2NdLl91cGRhdGUocix0LG8scyk7bGV0IGE9dGhpcy5fYmluZGluZ3MsbD10aGlzLl9uQWN0aXZlQmluZGluZ3M7Zm9yKGxldCBjPTA7YyE9PWw7KytjKWFbY10uYXBwbHkocyk7cmV0dXJuIHRoaXN9c2V0VGltZSh0KXt0aGlzLnRpbWU9MDtmb3IobGV0IGU9MDtlPHRoaXMuX2FjdGlvbnMubGVuZ3RoO2UrKyl0aGlzLl9hY3Rpb25zW2VdLnRpbWU9MDtyZXR1cm4gdGhpcy51cGRhdGUodCl9Z2V0Um9vdCgpe3JldHVybiB0aGlzLl9yb290fXVuY2FjaGVDbGlwKHQpe2xldCBlPXRoaXMuX2FjdGlvbnMsaT10LnV1aWQscj10aGlzLl9hY3Rpb25zQnlDbGlwLG89cltpXTtpZih2b2lkIDAhPT1vKXtsZXQgcz1vLmtub3duQWN0aW9ucztmb3IobGV0IGE9MCxsPXMubGVuZ3RoO2EhPT1sOysrYSl7bGV0IGM9c1thXTt0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGMpO2xldCB1PWMuX2NhY2hlSW5kZXgsZD1lW2UubGVuZ3RoLTFdO2MuX2NhY2hlSW5kZXg9bnVsbCxjLl9ieUNsaXBDYWNoZUluZGV4PW51bGwsZC5fY2FjaGVJbmRleD11LGVbdV09ZCxlLnBvcCgpLHRoaXMuX3JlbW92ZUluYWN0aXZlQmluZGluZ3NGb3JBY3Rpb24oYyl9ZGVsZXRlIHJbaV19fXVuY2FjaGVSb290KHQpe2xldCBlPXQudXVpZCxpPXRoaXMuX2FjdGlvbnNCeUNsaXA7Zm9yKGxldCBzIGluIGkpe2xldCBsPWlbc10uYWN0aW9uQnlSb290W2VdO3ZvaWQgMCE9PWwmJih0aGlzLl9kZWFjdGl2YXRlQWN0aW9uKGwpLHRoaXMuX3JlbW92ZUluYWN0aXZlQWN0aW9uKGwpKX1sZXQgbz10aGlzLl9iaW5kaW5nc0J5Um9vdEFuZE5hbWVbZV07aWYodm9pZCAwIT09bylmb3IobGV0IHMgaW4gbyl7bGV0IGE9b1tzXTthLnJlc3RvcmVPcmlnaW5hbFN0YXRlKCksdGhpcy5fcmVtb3ZlSW5hY3RpdmVCaW5kaW5nKGEpfX11bmNhY2hlQWN0aW9uKHQsZSl7bGV0IGk9dGhpcy5leGlzdGluZ0FjdGlvbih0LGUpO251bGwhPT1pJiYodGhpcy5fZGVhY3RpdmF0ZUFjdGlvbihpKSx0aGlzLl9yZW1vdmVJbmFjdGl2ZUFjdGlvbihpKSl9fS5wcm90b3R5cGUuX2NvbnRyb2xJbnRlcnBvbGFudHNSZXN1bHRCdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgxKTt2YXIgZkU9Y2xhc3N7Y29uc3RydWN0b3IodCl7InN0cmluZyI9PXR5cGVvZiB0JiYoY29uc29sZS53YXJuKCJUSFJFRS5Vbmlmb3JtOiBUeXBlIHBhcmFtZXRlciBpcyBubyBsb25nZXIgbmVlZGVkLiIpLHQ9YXJndW1lbnRzWzFdKSx0aGlzLnZhbHVlPXR9Y2xvbmUoKXtyZXR1cm4gbmV3IGZFKHZvaWQgMD09PXRoaXMudmFsdWUuY2xvbmU/dGhpcy52YWx1ZTp0aGlzLnZhbHVlLmNsb25lKCkpfX07KGNsYXNzIGV4dGVuZHMgWWd7Y29uc3RydWN0b3IodCxlLGk9MSl7c3VwZXIodCxlKSx0aGlzLm1lc2hQZXJBdHRyaWJ1dGU9aX1jb3B5KHQpe3JldHVybiBzdXBlci5jb3B5KHQpLHRoaXMubWVzaFBlckF0dHJpYnV0ZT10Lm1lc2hQZXJBdHRyaWJ1dGUsdGhpc31jbG9uZSh0KXtsZXQgZT1zdXBlci5jbG9uZSh0KTtyZXR1cm4gZS5tZXNoUGVyQXR0cmlidXRlPXRoaXMubWVzaFBlckF0dHJpYnV0ZSxlfXRvSlNPTih0KXtsZXQgZT1zdXBlci50b0pTT04odCk7cmV0dXJuIGUuaXNJbnN0YW5jZWRJbnRlcmxlYXZlZEJ1ZmZlcj0hMCxlLm1lc2hQZXJBdHRyaWJ1dGU9dGhpcy5tZXNoUGVyQXR0cmlidXRlLGV9fSkucHJvdG90eXBlLmlzSW5zdGFuY2VkSW50ZXJsZWF2ZWRCdWZmZXI9ITA7dmFyIFNkZT1uZXcgYXQsWmc9Y2xhc3N7Y29uc3RydWN0b3IodD1uZXcgYXQoMS8wLDEvMCksZT1uZXcgYXQoLTEvMCwtMS8wKSl7dGhpcy5taW49dCx0aGlzLm1heD1lfXNldCh0LGUpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQpLHRoaXMubWF4LmNvcHkoZSksdGhpc31zZXRGcm9tUG9pbnRzKHQpe3RoaXMubWFrZUVtcHR5KCk7Zm9yKGxldCBlPTAsaT10Lmxlbmd0aDtlPGk7ZSsrKXRoaXMuZXhwYW5kQnlQb2ludCh0W2VdKTtyZXR1cm4gdGhpc31zZXRGcm9tQ2VudGVyQW5kU2l6ZSh0LGUpe2xldCBpPVNkZS5jb3B5KGUpLm11bHRpcGx5U2NhbGFyKC41KTtyZXR1cm4gdGhpcy5taW4uY29weSh0KS5zdWIoaSksdGhpcy5tYXguY29weSh0KS5hZGQoaSksdGhpc31jbG9uZSgpe3JldHVybihuZXcgdGhpcy5jb25zdHJ1Y3RvcikuY29weSh0aGlzKX1jb3B5KHQpe3JldHVybiB0aGlzLm1pbi5jb3B5KHQubWluKSx0aGlzLm1heC5jb3B5KHQubWF4KSx0aGlzfW1ha2VFbXB0eSgpe3JldHVybiB0aGlzLm1pbi54PXRoaXMubWluLnk9MS8wLHRoaXMubWF4Lng9dGhpcy5tYXgueT0tMS8wLHRoaXN9aXNFbXB0eSgpe3JldHVybiB0aGlzLm1heC54PHRoaXMubWluLnh8fHRoaXMubWF4Lnk8dGhpcy5taW4ueX1nZXRDZW50ZXIodCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3Quc2V0KDAsMCk6dC5hZGRWZWN0b3JzKHRoaXMubWluLHRoaXMubWF4KS5tdWx0aXBseVNjYWxhciguNSl9Z2V0U2l6ZSh0KXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dC5zZXQoMCwwKTp0LnN1YlZlY3RvcnModGhpcy5tYXgsdGhpcy5taW4pfWV4cGFuZEJ5UG9pbnQodCl7cmV0dXJuIHRoaXMubWluLm1pbih0KSx0aGlzLm1heC5tYXgodCksdGhpc31leHBhbmRCeVZlY3Rvcih0KXtyZXR1cm4gdGhpcy5taW4uc3ViKHQpLHRoaXMubWF4LmFkZCh0KSx0aGlzfWV4cGFuZEJ5U2NhbGFyKHQpe3JldHVybiB0aGlzLm1pbi5hZGRTY2FsYXIoLXQpLHRoaXMubWF4LmFkZFNjYWxhcih0KSx0aGlzfWNvbnRhaW5zUG9pbnQodCl7cmV0dXJuISh0Lng8dGhpcy5taW4ueHx8dC54PnRoaXMubWF4Lnh8fHQueTx0aGlzLm1pbi55fHx0Lnk+dGhpcy5tYXgueSl9Y29udGFpbnNCb3godCl7cmV0dXJuIHRoaXMubWluLng8PXQubWluLngmJnQubWF4Lng8PXRoaXMubWF4LngmJnRoaXMubWluLnk8PXQubWluLnkmJnQubWF4Lnk8PXRoaXMubWF4Lnl9Z2V0UGFyYW1ldGVyKHQsZSl7cmV0dXJuIGUuc2V0KCh0LngtdGhpcy5taW4ueCkvKHRoaXMubWF4LngtdGhpcy5taW4ueCksKHQueS10aGlzLm1pbi55KS8odGhpcy5tYXgueS10aGlzLm1pbi55KSl9aW50ZXJzZWN0c0JveCh0KXtyZXR1cm4hKHQubWF4Lng8dGhpcy5taW4ueHx8dC5taW4ueD50aGlzLm1heC54fHx0Lm1heC55PHRoaXMubWluLnl8fHQubWluLnk+dGhpcy5tYXgueSl9Y2xhbXBQb2ludCh0LGUpe3JldHVybiBlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpfWRpc3RhbmNlVG9Qb2ludCh0KXtyZXR1cm4gU2RlLmNvcHkodCkuY2xhbXAodGhpcy5taW4sdGhpcy5tYXgpLnN1Yih0KS5sZW5ndGgoKX1pbnRlcnNlY3QodCl7cmV0dXJuIHRoaXMubWluLm1heCh0Lm1pbiksdGhpcy5tYXgubWluKHQubWF4KSx0aGlzfXVuaW9uKHQpe3JldHVybiB0aGlzLm1pbi5taW4odC5taW4pLHRoaXMubWF4Lm1heCh0Lm1heCksdGhpc310cmFuc2xhdGUodCl7cmV0dXJuIHRoaXMubWluLmFkZCh0KSx0aGlzLm1heC5hZGQodCksdGhpc31lcXVhbHModCl7cmV0dXJuIHQubWluLmVxdWFscyh0aGlzLm1pbikmJnQubWF4LmVxdWFscyh0aGlzLm1heCl9fTtaZy5wcm90b3R5cGUuaXNCb3gyPSEwO3ZhciBmZj1uZXcgaWUsZWs9bmV3IFJuLHM4PW5ldyBSbjtmdW5jdGlvbiBLZGUobil7bGV0IHQ9W107biYmbi5pc0JvbmUmJnQucHVzaChuKTtmb3IobGV0IGU9MDtlPG4uY2hpbGRyZW4ubGVuZ3RoO2UrKyl0LnB1c2guYXBwbHkodCxLZGUobi5jaGlsZHJlbltlXSkpO3JldHVybiB0fXZhciBycWU9bmV3IEZsb2F0MzJBcnJheSgxKTtmdW5jdGlvbiBERyhuLHQsZSl7aWYoMT09PWUpcmV0dXJuIG5ldyB2bih0KTtsZXQgaT12Zyh0KTtpZighaSl0aHJvdyBuZXcgRXJyb3IoYGQzIGZhaWxlZCB0byByZWNvZ25pemUgdGhlIGNvbG9yOiAke3R9YCk7cmV0dXJuIG5ldyB2bihkeihpLG4pKDEtZSkpfW5ldyBJbnQzMkFycmF5KHJxZS5idWZmZXIpLHFhLmNyZWF0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLmxvZygiVEhSRUUuQ3VydmUuY3JlYXRlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCIpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUocWEucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLmdldFBvaW50PXQsbn0sbEUucHJvdG90eXBlLmZyb21Qb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGF0aDogLmZyb21Qb2ludHMoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5zZXRGcm9tUG9pbnRzKCkuIiksdGhpcy5zZXRGcm9tUG9pbnRzKG4pfSxjbGFzcyBleHRlbmRzIHJFe2NvbnN0cnVjdG9yKHQ9MTAsZT0xMCxpPTQ0NzM5MjQscj04OTQ3ODQ4KXtpPW5ldyB2bihpKSxyPW5ldyB2bihyKTtsZXQgbz1lLzIscz10L2UsYT10LzIsbD1bXSxjPVtdO2ZvcihsZXQgcD0wLGg9MCxmPS1hO3A8PWU7cCsrLGYrPXMpe2wucHVzaCgtYSwwLGYsYSwwLGYpLGwucHVzaChmLDAsLWEsZiwwLGEpO2xldCBtPXA9PT1vP2k6cjttLnRvQXJyYXkoYyxoKSxoKz0zLG0udG9BcnJheShjLGgpLGgrPTMsbS50b0FycmF5KGMsaCksaCs9MyxtLnRvQXJyYXkoYyxoKSxoKz0zfWxldCB1PW5ldyBucjt1LnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihsLDMpKSx1LnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKcihjLDMpKSxzdXBlcih1LG5ldyBBcCh7dmVydGV4Q29sb3JzOiEwLHRvbmVNYXBwZWQ6ITF9KSksdGhpcy50eXBlPSJHcmlkSGVscGVyIn19LnByb3RvdHlwZS5zZXRDb2xvcnM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5HcmlkSGVscGVyOiBzZXRDb2xvcnMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLCBwYXNzIHRoZW0gaW4gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQuIil9LGNsYXNzIGV4dGVuZHMgckV7Y29uc3RydWN0b3IodCl7bGV0IGU9S2RlKHQpLGk9bmV3IG5yLHI9W10sbz1bXSxzPW5ldyB2bigwLDAsMSksYT1uZXcgdm4oMCwxLDApO2ZvcihsZXQgYz0wO2M8ZS5sZW5ndGg7YysrKXtsZXQgdT1lW2NdO3UucGFyZW50JiZ1LnBhcmVudC5pc0JvbmUmJihyLnB1c2goMCwwLDApLHIucHVzaCgwLDAsMCksby5wdXNoKHMucixzLmcscy5iKSxvLnB1c2goYS5yLGEuZyxhLmIpKX1pLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLG5ldyBKcihyLDMpKSxpLnNldEF0dHJpYnV0ZSgiY29sb3IiLG5ldyBKcihvLDMpKSxzdXBlcihpLG5ldyBBcCh7dmVydGV4Q29sb3JzOiEwLGRlcHRoVGVzdDohMSxkZXB0aFdyaXRlOiExLHRvbmVNYXBwZWQ6ITEsdHJhbnNwYXJlbnQ6ITB9KSksdGhpcy50eXBlPSJTa2VsZXRvbkhlbHBlciIsdGhpcy5pc1NrZWxldG9uSGVscGVyPSEwLHRoaXMucm9vdD10LHRoaXMuYm9uZXM9ZSx0aGlzLm1hdHJpeD10Lm1hdHJpeFdvcmxkLHRoaXMubWF0cml4QXV0b1VwZGF0ZT0hMX11cGRhdGVNYXRyaXhXb3JsZCh0KXtsZXQgZT10aGlzLmJvbmVzLGk9dGhpcy5nZW9tZXRyeSxyPWkuZ2V0QXR0cmlidXRlKCJwb3NpdGlvbiIpO3M4LmNvcHkodGhpcy5yb290Lm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtmb3IobGV0IG89MCxzPTA7bzxlLmxlbmd0aDtvKyspe2xldCBhPWVbb107YS5wYXJlbnQmJmEucGFyZW50LmlzQm9uZSYmKGVrLm11bHRpcGx5TWF0cmljZXMoczgsYS5tYXRyaXhXb3JsZCksZmYuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGVrKSxyLnNldFhZWihzLGZmLngsZmYueSxmZi56KSxlay5tdWx0aXBseU1hdHJpY2VzKHM4LGEucGFyZW50Lm1hdHJpeFdvcmxkKSxmZi5zZXRGcm9tTWF0cml4UG9zaXRpb24oZWspLHIuc2V0WFlaKHMrMSxmZi54LGZmLnksZmYueikscys9Mil9aS5nZXRBdHRyaWJ1dGUoInBvc2l0aW9uIikubmVlZHNVcGRhdGU9ITAsc3VwZXIudXBkYXRlTWF0cml4V29ybGQodCl9fS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2tlbGV0b25IZWxwZXI6IHVwZGF0ZSgpIG5vIGxvbmdlciBuZWVkcyB0byBiZSBjYWxsZWQuIil9LERkLnByb3RvdHlwZS5leHRyYWN0VXJsQmFzZT1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5Mb2FkZXI6IC5leHRyYWN0VXJsQmFzZSgpIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSBUSFJFRS5Mb2FkZXJVdGlscy5leHRyYWN0VXJsQmFzZSgpIGluc3RlYWQuIiksaUcuZXh0cmFjdFVybEJhc2Uobil9LERkLkhhbmRsZXJzPXthZGQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5Mb2FkZXI6IEhhbmRsZXJzLmFkZCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBMb2FkaW5nTWFuYWdlci5hZGRIYW5kbGVyKCkgaW5zdGVhZC4iKX0sZ2V0OmZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTG9hZGVyOiBIYW5kbGVycy5nZXQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgTG9hZGluZ01hbmFnZXIuZ2V0SGFuZGxlcigpIGluc3RlYWQuIil9fSxaZy5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDI6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0sWmcucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxaZy5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sWmcucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MjogLnNpemUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRTaXplKCkuIiksdGhpcy5nZXRTaXplKG4pfSxUbC5wcm90b3R5cGUuY2VudGVyPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5jZW50ZXIoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRDZW50ZXIoKS4iKSx0aGlzLmdldENlbnRlcihuKX0sVGwucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmVtcHR5KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaXNFbXB0eSgpLiIpLHRoaXMuaXNFbXB0eSgpfSxUbC5wcm90b3R5cGUuaXNJbnRlcnNlY3Rpb25Cb3g9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQm94MzogLmlzSW50ZXJzZWN0aW9uQm94KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c0JveCgpLiIpLHRoaXMuaW50ZXJzZWN0c0JveChuKX0sVGwucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5pc0ludGVyc2VjdGlvblNwaGVyZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNTcGhlcmUoKS4iKSx0aGlzLmludGVyc2VjdHNTcGhlcmUobil9LFRsLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJveDM6IC5zaXplKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0U2l6ZSgpLiIpLHRoaXMuZ2V0U2l6ZShuKX0seGYucHJvdG90eXBlLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU3BoZXJlOiAuZW1wdHkoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pc0VtcHR5KCkuIiksdGhpcy5pc0VtcHR5KCl9LGdiLnByb3RvdHlwZS5zZXRGcm9tTWF0cml4PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkZydXN0dW06IC5zZXRGcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbVByb2plY3Rpb25NYXRyaXgoKS4iKSx0aGlzLnNldEZyb21Qcm9qZWN0aW9uTWF0cml4KG4pfSxKby5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXgzOiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSxKby5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3IzPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5tdWx0aXBseVZlY3RvcjMoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sSm8ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4MzogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sSm8ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4MzogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4MyggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4Myh0aGlzKX0sSm8ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXgzOiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LEpvLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDM6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LFJuLnByb3RvdHlwZS5leHRyYWN0UG9zaXRpb249ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmV4dHJhY3RQb3NpdGlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmNvcHlQb3NpdGlvbigpLiIpLHRoaXMuY29weVBvc2l0aW9uKG4pfSxSbi5wcm90b3R5cGUuZmxhdHRlblRvQXJyYXlPZmZzZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZmxhdHRlblRvQXJyYXlPZmZzZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnRvQXJyYXkoKSBpbnN0ZWFkLiIpLHRoaXMudG9BcnJheShuLHQpfSxSbi5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuZ2V0UG9zaXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVmVjdG9yMy5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG1hdHJpeCApIGluc3RlYWQuIiksKG5ldyBpZSkuc2V0RnJvbU1hdHJpeENvbHVtbih0aGlzLDMpfSxSbi5wcm90b3R5cGUuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAuc2V0Um90YXRpb25Gcm9tUXVhdGVybmlvbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uKCkuIiksdGhpcy5tYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbihuKX0sUm4ucHJvdG90eXBlLm11bHRpcGx5VG9BcnJheT1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VG9BcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxSbi5wcm90b3R5cGUubXVsdGlwbHlWZWN0b3I0PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5tdWx0aXBseVZlY3RvcjQoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdmVjdG9yLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sUm4ucHJvdG90eXBlLm11bHRpcGx5VmVjdG9yM0FycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLm11bHRpcGx5VmVjdG9yM0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUm4ucHJvdG90eXBlLnJvdGF0ZUF4aXM9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQXhpcygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBWZWN0b3IzLnRyYW5zZm9ybURpcmVjdGlvbiggbWF0cml4ICkgaW5zdGVhZC4iKSxuLnRyYW5zZm9ybURpcmVjdGlvbih0aGlzKX0sUm4ucHJvdG90eXBlLmNyb3NzVmVjdG9yPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5jcm9zc1ZlY3RvcigpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB2ZWN0b3IuYXBwbHlNYXRyaXg0KCBtYXRyaXggKSBpbnN0ZWFkLiIpLG4uYXBwbHlNYXRyaXg0KHRoaXMpfSxSbi5wcm90b3R5cGUudHJhbnNsYXRlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5yb3RhdGVYPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuTWF0cml4NDogLnJvdGF0ZVgoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxSbi5wcm90b3R5cGUucm90YXRlWT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1hdHJpeDQ6IC5yb3RhdGVZKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUm4ucHJvdG90eXBlLnJvdGF0ZVo9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlWigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5yb3RhdGVCeUF4aXM9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAucm90YXRlQnlBeGlzKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sUm4ucHJvdG90eXBlLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLmFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYXR0cmlidXRlLmFwcGx5TWF0cml4NCggbWF0cml4ICkgaW5zdGVhZC4iKSxuLmFwcGx5TWF0cml4NCh0aGlzKX0sUm4ucHJvdG90eXBlLmFwcGx5VG9WZWN0b3IzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NYXRyaXg0OiAuYXBwbHlUb1ZlY3RvcjNBcnJheSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFJuLnByb3RvdHlwZS5tYWtlRnJ1c3R1bT1mdW5jdGlvbihuLHQsZSxpLHIsbyl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuTWF0cml4NDogLm1ha2VGcnVzdHVtKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5tYWtlUGVyc3BlY3RpdmUoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkgaW5zdGVhZC4iKSx0aGlzLm1ha2VQZXJzcGVjdGl2ZShuLHQsaSxlLHIsbyl9LFJuLnByb3RvdHlwZS5nZXRJbnZlcnNlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG1hdHJpeEludi5jb3B5KCBtYXRyaXggKS5pbnZlcnQoKTsgaW5zdGVhZC4iKSx0aGlzLmNvcHkobikuaW52ZXJ0KCl9LHV1LnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkxpbmU9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUGxhbmU6IC5pc0ludGVyc2VjdGlvbkxpbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzTGluZSgpLiIpLHRoaXMuaW50ZXJzZWN0c0xpbmUobil9LHFzLnByb3RvdHlwZS5tdWx0aXBseVZlY3RvcjM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLm11bHRpcGx5VmVjdG9yMygpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBpcyBub3cgdmVjdG9yLmFwcGx5UXVhdGVybmlvbiggcXVhdGVybmlvbiApIGluc3RlYWQuIiksbi5hcHBseVF1YXRlcm5pb24odGhpcyl9LHFzLnByb3RvdHlwZS5pbnZlcnNlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuUXVhdGVybmlvbjogLmludmVyc2UoKSBoYXMgYmVlbiByZW5hbWVkIHRvIGludmVydCgpLiIpLHRoaXMuaW52ZXJ0KCl9LENmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvbkJveD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5SYXk6IC5pc0ludGVyc2VjdGlvbkJveCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmludGVyc2VjdHNCb3goKS4iKSx0aGlzLmludGVyc2VjdHNCb3gobil9LENmLnByb3RvdHlwZS5pc0ludGVyc2VjdGlvblBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uUGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5pbnRlcnNlY3RzUGxhbmUoKS4iKSx0aGlzLmludGVyc2VjdHNQbGFuZShuKX0sQ2YucHJvdG90eXBlLmlzSW50ZXJzZWN0aW9uU3BoZXJlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlJheTogLmlzSW50ZXJzZWN0aW9uU3BoZXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuaW50ZXJzZWN0c1NwaGVyZSgpLiIpLHRoaXMuaW50ZXJzZWN0c1NwaGVyZShuKX0sbG8ucHJvdG90eXBlLmFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmFyZWEoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRBcmVhKCkuIiksdGhpcy5nZXRBcmVhKCl9LGxvLnByb3RvdHlwZS5iYXJ5Y29vcmRGcm9tUG9pbnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLmJhcnljb29yZEZyb21Qb2ludCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldEJhcnljb29yZCgpLiIpLHRoaXMuZ2V0QmFyeWNvb3JkKG4sdCl9LGxvLnByb3RvdHlwZS5taWRwb2ludD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm1pZHBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0TWlkcG9pbnQoKS4iKSx0aGlzLmdldE1pZHBvaW50KG4pfSxsby5wcm90b3R5cGVub3JtYWw9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVHJpYW5nbGU6IC5ub3JtYWwoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXROb3JtYWwoKS4iKSx0aGlzLmdldE5vcm1hbChuKX0sbG8ucHJvdG90eXBlLnBsYW5lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAucGxhbmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRQbGFuZSgpLiIpLHRoaXMuZ2V0UGxhbmUobil9LGxvLmJhcnljb29yZEZyb21Qb2ludD1mdW5jdGlvbihuLHQsZSxpLHIpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlRyaWFuZ2xlOiAuYmFyeWNvb3JkRnJvbVBvaW50KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ2V0QmFyeWNvb3JkKCkuIiksbG8uZ2V0QmFyeWNvb3JkKG4sdCxlLGkscil9LGxvLm5vcm1hbD1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5UcmlhbmdsZTogLm5vcm1hbCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdldE5vcm1hbCgpLiIpLGxvLmdldE5vcm1hbChuLHQsZSxpKX0sSXAucHJvdG90eXBlLmV4dHJhY3RBbGxQb2ludHM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhcGU6IC5leHRyYWN0QWxsUG9pbnRzKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIC5leHRyYWN0UG9pbnRzKCkgaW5zdGVhZC4iKSx0aGlzLmV4dHJhY3RQb2ludHMobil9LElwLnByb3RvdHlwZS5leHRydWRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAuZXh0cnVkZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFeHRydWRlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBTZih0aGlzLG4pfSxJcC5wcm90b3R5cGUubWFrZUdlb21ldHJ5PWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlNoYXBlOiAubWFrZUdlb21ldHJ5KCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFNoYXBlR2VvbWV0cnkoKSBpbnN0ZWFkLiIpLG5ldyBRZyh0aGlzLG4pfSxhdC5wcm90b3R5cGUuZnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmZyb21BdHRyaWJ1dGUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5mcm9tQnVmZmVyQXR0cmlidXRlKCkuIiksdGhpcy5mcm9tQnVmZmVyQXR0cmlidXRlKG4sdCxlKX0sYXQucHJvdG90eXBlLmRpc3RhbmNlVG9NYW5oYXR0YW49ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmRpc3RhbmNlVG9NYW5oYXR0YW4oKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5tYW5oYXR0YW5EaXN0YW5jZVRvKCkuIiksdGhpcy5tYW5oYXR0YW5EaXN0YW5jZVRvKG4pfSxhdC5wcm90b3R5cGUubGVuZ3RoTWFuaGF0dGFuPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMjogLmxlbmd0aE1hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkxlbmd0aCgpLiIpLHRoaXMubWFuaGF0dGFuTGVuZ3RoKCl9LGllLnByb3RvdHlwZS5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeD1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21Sb3RhdGlvbk1hdHJpeCgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBFdWxlci5zZXRGcm9tUm90YXRpb25NYXRyaXgoKSBpbnN0ZWFkLiIpfSxpZS5wcm90b3R5cGUuc2V0RXVsZXJGcm9tUXVhdGVybmlvbj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlZlY3RvcjM6IC5zZXRFdWxlckZyb21RdWF0ZXJuaW9uKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEV1bGVyLnNldEZyb21RdWF0ZXJuaW9uKCkgaW5zdGVhZC4iKX0saWUucHJvdG90eXBlLmdldFBvc2l0aW9uRnJvbU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZ2V0UG9zaXRpb25Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCkuIiksdGhpcy5zZXRGcm9tTWF0cml4UG9zaXRpb24obil9LGllLnByb3RvdHlwZS5nZXRTY2FsZUZyb21NYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVmVjdG9yMzogLmdldFNjYWxlRnJvbU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEZyb21NYXRyaXhTY2FsZSgpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeFNjYWxlKG4pfSxpZS5wcm90b3R5cGUuZ2V0Q29sdW1uRnJvbU1hdHJpeD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5nZXRDb2x1bW5Gcm9tTWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0RnJvbU1hdHJpeENvbHVtbigpLiIpLHRoaXMuc2V0RnJvbU1hdHJpeENvbHVtbih0LG4pfSxpZS5wcm90b3R5cGUuYXBwbHlQcm9qZWN0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjM6IC5hcHBseVByb2plY3Rpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmFwcGx5TWF0cml4NCggbSApIGluc3RlYWQuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LGllLnByb3RvdHlwZS5mcm9tQXR0cmlidXRlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZnJvbUF0dHJpYnV0ZSgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmZyb21CdWZmZXJBdHRyaWJ1dGUoKS4iKSx0aGlzLmZyb21CdWZmZXJBdHRyaWJ1dGUobix0LGUpfSxpZS5wcm90b3R5cGUuZGlzdGFuY2VUb01hbmhhdHRhbj1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAuZGlzdGFuY2VUb01hbmhhdHRhbigpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLm1hbmhhdHRhbkRpc3RhbmNlVG8oKS4iKSx0aGlzLm1hbmhhdHRhbkRpc3RhbmNlVG8obil9LGllLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3IzOiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sYXIucHJvdG90eXBlLmZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24obix0LGUpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLlZlY3RvcjQ6IC5mcm9tQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZnJvbUJ1ZmZlckF0dHJpYnV0ZSgpLiIpLHRoaXMuZnJvbUJ1ZmZlckF0dHJpYnV0ZShuLHQsZSl9LGFyLnByb3RvdHlwZS5sZW5ndGhNYW5oYXR0YW49ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5WZWN0b3I0OiAubGVuZ3RoTWFuaGF0dGFuKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAubWFuaGF0dGFuTGVuZ3RoKCkuIiksdGhpcy5tYW5oYXR0YW5MZW5ndGgoKX0sWGkucHJvdG90eXBlLmdldENoaWxkQnlOYW1lPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZ2V0Q2hpbGRCeU5hbWUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIC5nZXRPYmplY3RCeU5hbWUoKS4iKSx0aGlzLmdldE9iamVjdEJ5TmFtZShuKX0sWGkucHJvdG90eXBlLnJlbmRlckRlcHRoPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnJlbmRlckRlcHRoIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAucmVuZGVyT3JkZXIsIGluc3RlYWQuIil9LFhpLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5PYmplY3QzRDogLnRyYW5zbGF0ZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAudHJhbnNsYXRlT25BeGlzKCBheGlzLCBkaXN0YW5jZSApIGluc3RlYWQuIiksdGhpcy50cmFuc2xhdGVPbkF4aXModCxuKX0sWGkucHJvdG90eXBlLmdldFdvcmxkUm90YXRpb249ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5PYmplY3QzRDogLmdldFdvcmxkUm90YXRpb24oKSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuT2JqZWN0M0QuZ2V0V29ybGRRdWF0ZXJuaW9uKCB0YXJnZXQgKSBpbnN0ZWFkLiIpfSxYaS5wcm90b3R5cGUuYXBwbHlNYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC5hcHBseU1hdHJpeCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmFwcGx5TWF0cml4NCgpLiIpLHRoaXMuYXBwbHlNYXRyaXg0KG4pfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhYaS5wcm90b3R5cGUse2V1bGVyT3JkZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXJ9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLk9iamVjdDNEOiAuZXVsZXJPcmRlciBpcyBub3cgLnJvdGF0aW9uLm9yZGVyLiIpLHRoaXMucm90YXRpb24ub3JkZXI9bn19LHVzZVF1YXRlcm5pb246e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuT2JqZWN0M0Q6IC51c2VRdWF0ZXJuaW9uIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSBsaWJyYXJ5IG5vdyB1c2VzIHF1YXRlcm5pb25zIGJ5IGRlZmF1bHQuIil9fX0pLFZvLnByb3RvdHlwZS5zZXREcmF3TW9kZT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLk1lc2g6IC5zZXREcmF3TW9kZSgpIGhhcyBiZWVuIHJlbW92ZWQuIFRoZSByZW5kZXJlciBub3cgYWx3YXlzIGFzc3VtZXMgVEhSRUUuVHJpYW5nbGVzRHJhd01vZGUuIFRyYW5zZm9ybSB5b3VyIGdlb21ldHJ5IHZpYSBCdWZmZXJHZW9tZXRyeVV0aWxzLnRvVHJpYW5nbGVzRHJhd01vZGUoKSBpZiBuZWNlc3NhcnkuIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFZvLnByb3RvdHlwZSx7ZHJhd01vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4iKSwwfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5NZXNoOiAuZHJhd01vZGUgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIHJlbmRlcmVyIG5vdyBhbHdheXMgYXNzdW1lcyBUSFJFRS5UcmlhbmdsZXNEcmF3TW9kZS4gVHJhbnNmb3JtIHlvdXIgZ2VvbWV0cnkgdmlhIEJ1ZmZlckdlb21ldHJ5VXRpbHMudG9UcmlhbmdsZXNEcmF3TW9kZSgpIGlmIG5lY2Vzc2FyeS4iKX19fSksZ2sucHJvdG90eXBlLmluaXRCb25lcz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLlNraW5uZWRNZXNoOiBpbml0Qm9uZXMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxXcy5wcm90b3R5cGUuc2V0TGVucz1mdW5jdGlvbihuLHQpe2NvbnNvbGUud2FybigiVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEuc2V0TGVucyBpcyBkZXByZWNhdGVkLiBVc2UgLnNldEZvY2FsTGVuZ3RoIGFuZCAuZmlsbUdhdWdlIGZvciBhIHBob3RvZ3JhcGhpYyBzZXR1cC4iKSx2b2lkIDAhPT10JiYodGhpcy5maWxtR2F1Z2U9dCksdGhpcy5zZXRGb2NhbExlbmd0aChuKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZmMucHJvdG90eXBlLHtvbmx5U2hhZG93OntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAub25seVNoYWRvdyBoYXMgYmVlbiByZW1vdmVkLiIpfX0sc2hhZG93Q2FtZXJhRm92OntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYUZvdiBpcyBub3cgLnNoYWRvdy5jYW1lcmEuZm92LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5mb3Y9bn19LHNoYWRvd0NhbWVyYUxlZnQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhTGVmdCBpcyBub3cgLnNoYWRvdy5jYW1lcmEubGVmdC4iKSx0aGlzLnNoYWRvdy5jYW1lcmEubGVmdD1ufX0sc2hhZG93Q2FtZXJhUmlnaHQ6e3NldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhUmlnaHQgaXMgbm93IC5zaGFkb3cuY2FtZXJhLnJpZ2h0LiIpLHRoaXMuc2hhZG93LmNhbWVyYS5yaWdodD1ufX0sc2hhZG93Q2FtZXJhVG9wOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYVRvcCBpcyBub3cgLnNoYWRvdy5jYW1lcmEudG9wLiIpLHRoaXMuc2hhZG93LmNhbWVyYS50b3A9bn19LHNoYWRvd0NhbWVyYUJvdHRvbTp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFCb3R0b20gaXMgbm93IC5zaGFkb3cuY2FtZXJhLmJvdHRvbS4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuYm90dG9tPW59fSxzaGFkb3dDYW1lcmFOZWFyOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0NhbWVyYU5lYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLm5lYXIuIiksdGhpcy5zaGFkb3cuY2FtZXJhLm5lYXI9bn19LHNoYWRvd0NhbWVyYUZhcjp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dDYW1lcmFGYXIgaXMgbm93IC5zaGFkb3cuY2FtZXJhLmZhci4iKSx0aGlzLnNoYWRvdy5jYW1lcmEuZmFyPW59fSxzaGFkb3dDYW1lcmFWaXNpYmxlOntzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkxpZ2h0OiAuc2hhZG93Q2FtZXJhVmlzaWJsZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgbmV3IFRIUkVFLkNhbWVyYUhlbHBlciggbGlnaHQuc2hhZG93LmNhbWVyYSApIGluc3RlYWQuIil9fSxzaGFkb3dCaWFzOntzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0JpYXMgaXMgbm93IC5zaGFkb3cuYmlhcy4iKSx0aGlzLnNoYWRvdy5iaWFzPW59fSxzaGFkb3dEYXJrbmVzczp7c2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5MaWdodDogLnNoYWRvd0RhcmtuZXNzIGhhcyBiZWVuIHJlbW92ZWQuIil9fSxzaGFkb3dNYXBXaWR0aDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBXaWR0aCBpcyBub3cgLnNoYWRvdy5tYXBTaXplLndpZHRoLiIpLHRoaXMuc2hhZG93Lm1hcFNpemUud2lkdGg9bn19LHNoYWRvd01hcEhlaWdodDp7c2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuTGlnaHQ6IC5zaGFkb3dNYXBIZWlnaHQgaXMgbm93IC5zaGFkb3cubWFwU2l6ZS5oZWlnaHQuIiksdGhpcy5zaGFkb3cubWFwU2l6ZS5oZWlnaHQ9bn19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWXIucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLmxlbmd0aCBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLmNvdW50IGluc3RlYWQuIiksdGhpcy5hcnJheS5sZW5ndGh9fSxkeW5hbWljOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5keW5hbWljIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSAudXNhZ2UgaW5zdGVhZC4iKSx0aGlzLnVzYWdlPT09b2t9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuZHluYW1pYyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnVzYWdlIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZShvayl9fX0pLFlyLnByb3RvdHlwZS5zZXREeW5hbWljPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckF0dHJpYnV0ZTogLnNldER5bmFtaWMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFVzYWdlKCkgaW5zdGVhZC4iKSx0aGlzLnNldFVzYWdlKCEwPT09bj9vazpxUyksdGhpc30sWXIucHJvdG90eXBlLmNvcHlJbmRpY2VzQXJyYXk9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5CdWZmZXJBdHRyaWJ1dGU6IC5jb3B5SW5kaWNlc0FycmF5KCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sWXIucHJvdG90eXBlLnNldEFycmF5PWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyQXR0cmlidXRlOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sbnIucHJvdG90eXBlLmFkZEluZGV4PWZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGRJbmRleCgpIGhhcyBiZWVuIHJlbmFtZWQgdG8gLnNldEluZGV4KCkuIiksdGhpcy5zZXRJbmRleChuKX0sbnIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuc2V0QXR0cmlidXRlKCkuIiksdCYmdC5pc0J1ZmZlckF0dHJpYnV0ZXx8dCYmdC5pc0ludGVybGVhdmVkQnVmZmVyQXR0cmlidXRlPyJpbmRleCI9PT1uPyhjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5LmFkZEF0dHJpYnV0ZTogVXNlIC5zZXRJbmRleCgpIGZvciBpbmRleCBhdHRyaWJ1dGUuIiksdGhpcy5zZXRJbmRleCh0KSx0aGlzKTp0aGlzLnNldEF0dHJpYnV0ZShuLHQpOihjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkQXR0cmlidXRlKCkgbm93IGV4cGVjdHMgKCBuYW1lLCBhdHRyaWJ1dGUgKS4iKSx0aGlzLnNldEF0dHJpYnV0ZShuLG5ldyBZcihhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKSkpfSxuci5wcm90b3R5cGUuYWRkRHJhd0NhbGw9ZnVuY3Rpb24obix0LGUpe3ZvaWQgMCE9PWUmJmNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5hZGREcmF3Q2FsbCgpIG5vIGxvbmdlciBzdXBwb3J0cyBpbmRleE9mZnNldC4iKSxjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuYWRkRHJhd0NhbGwoKSBpcyBub3cgLmFkZEdyb3VwKCkuIiksdGhpcy5hZGRHcm91cChuLHQpfSxuci5wcm90b3R5cGUuY2xlYXJEcmF3Q2FsbHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY2xlYXJEcmF3Q2FsbHMoKSBpcyBub3cgLmNsZWFyR3JvdXBzKCkuIiksdGhpcy5jbGVhckdyb3VwcygpfSxuci5wcm90b3R5cGUuY29tcHV0ZU9mZnNldHM9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAuY29tcHV0ZU9mZnNldHMoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxuci5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKG4pe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkJ1ZmZlckdlb21ldHJ5OiAucmVtb3ZlQXR0cmlidXRlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuZGVsZXRlQXR0cmlidXRlKCkuIiksdGhpcy5kZWxldGVBdHRyaWJ1dGUobil9LG5yLnByb3RvdHlwZS5hcHBseU1hdHJpeD1mdW5jdGlvbihuKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5CdWZmZXJHZW9tZXRyeTogLmFwcGx5TWF0cml4KCkgaGFzIGJlZW4gcmVuYW1lZCB0byAuYXBwbHlNYXRyaXg0KCkuIiksdGhpcy5hcHBseU1hdHJpeDQobil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5yLnByb3RvdHlwZSx7ZHJhd2NhbGxzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS5lcnJvcigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5kcmF3Y2FsbHMgaGFzIGJlZW4gcmVuYW1lZCB0byAuZ3JvdXBzLiIpLHRoaXMuZ3JvdXBzfX0sb2Zmc2V0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQnVmZmVyR2VvbWV0cnk6IC5vZmZzZXRzIGhhcyBiZWVuIHJlbmFtZWQgdG8gLmdyb3Vwcy4iKSx0aGlzLmdyb3Vwc319fSksWWcucHJvdG90eXBlLnNldER5bmFtaWM9ZnVuY3Rpb24obil7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuSW50ZXJsZWF2ZWRCdWZmZXI6IC5zZXREeW5hbWljKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIC5zZXRVc2FnZSgpIGluc3RlYWQuIiksdGhpcy5zZXRVc2FnZSghMD09PW4/b2s6cVMpLHRoaXN9LFlnLnByb3RvdHlwZS5zZXRBcnJheT1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkludGVybGVhdmVkQnVmZmVyOiAuc2V0QXJyYXkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIEJ1ZmZlckdlb21ldHJ5IC5zZXRBdHRyaWJ1dGUgdG8gcmVwbGFjZS9yZXNpemUgYXR0cmlidXRlIGJ1ZmZlcnMiKX0sU2YucHJvdG90eXBlLmdldEFycmF5cz1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLkV4dHJ1ZGVHZW9tZXRyeTogLmdldEFycmF5cygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LFNmLnByb3RvdHlwZS5hZGRTaGFwZUxpc3Q9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZUxpc3QoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxTZi5wcm90b3R5cGUuYWRkU2hhcGU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5FeHRydWRlR2VvbWV0cnk6IC5hZGRTaGFwZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LHZiLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7Y29uc29sZS5lcnJvcigiVEhSRUUuU2NlbmU6IC5kaXNwb3NlKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sZkUucHJvdG90eXBlLm9uVXBkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuVW5pZm9ybTogLm9uVXBkYXRlKCkgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIG9iamVjdC5vbkJlZm9yZVJlbmRlcigpIGluc3RlYWQuIiksdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaHMucHJvdG90eXBlLHt3cmFwQXJvdW5kOntnZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcEFyb3VuZCBoYXMgYmVlbiByZW1vdmVkLiIpfX0sb3ZlcmRyYXc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuTWF0ZXJpYWw6IC5vdmVyZHJhdyBoYXMgYmVlbiByZW1vdmVkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAub3ZlcmRyYXcgaGFzIGJlZW4gcmVtb3ZlZC4iKX19LHdyYXBSR0I6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLk1hdGVyaWFsOiAud3JhcFJHQiBoYXMgYmVlbiByZW1vdmVkLiIpLG5ldyB2bn19LHNoYWRpbmc6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zaGFkaW5nIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSB0aGUgYm9vbGVhbiAuZmxhdFNoYWRpbmcgaW5zdGVhZC4iKX0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnNoYWRpbmcgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBib29sZWFuIC5mbGF0U2hhZGluZyBpbnN0ZWFkLiIpLHRoaXMuZmxhdFNoYWRpbmc9MT09PW59fSxzdGVuY2lsTWFzazp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuIit0aGlzLnR5cGUrIjogLnN0ZW5jaWxNYXNrIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSAuc3RlbmNpbEZ1bmNNYXNrIGluc3RlYWQuIiksdGhpcy5zdGVuY2lsRnVuY01hc2t9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiIrdGhpcy50eXBlKyI6IC5zdGVuY2lsTWFzayBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLnN0ZW5jaWxGdW5jTWFzayBpbnN0ZWFkLiIpLHRoaXMuc3RlbmNpbEZ1bmNNYXNrPW59fSx2ZXJ0ZXhUYW5nZW50czp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS4iK3RoaXMudHlwZSsiOiAudmVydGV4VGFuZ2VudHMgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRHAucHJvdG90eXBlLHtkZXJpdmF0aXZlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuU2hhZGVyTWF0ZXJpYWw6IC5kZXJpdmF0aXZlcyBoYXMgYmVlbiBtb3ZlZCB0byAuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcy4iKSx0aGlzLmV4dGVuc2lvbnMuZGVyaXZhdGl2ZXN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLiBTaGFkZXJNYXRlcmlhbDogLmRlcml2YXRpdmVzIGhhcyBiZWVuIG1vdmVkIHRvIC5leHRlbnNpb25zLmRlcml2YXRpdmVzLiIpLHRoaXMuZXh0ZW5zaW9ucy5kZXJpdmF0aXZlcz1ufX19KSxpci5wcm90b3R5cGUuY2xlYXJUYXJnZXQ9ZnVuY3Rpb24obix0LGUsaSl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY2xlYXJUYXJnZXQoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgLnNldFJlbmRlclRhcmdldCgpIGFuZCAuY2xlYXIoKSBpbnN0ZWFkLiIpLHRoaXMuc2V0UmVuZGVyVGFyZ2V0KG4pLHRoaXMuY2xlYXIodCxlLGkpfSxpci5wcm90b3R5cGUuYW5pbWF0ZT1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5hbmltYXRlKCkgaXMgbm93IC5zZXRBbmltYXRpb25Mb29wKCkuIiksdGhpcy5zZXRBbmltYXRpb25Mb29wKG4pfSxpci5wcm90b3R5cGUuZ2V0Q3VycmVudFJlbmRlclRhcmdldD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRDdXJyZW50UmVuZGVyVGFyZ2V0KCkgaXMgbm93IC5nZXRSZW5kZXJUYXJnZXQoKS4iKSx0aGlzLmdldFJlbmRlclRhcmdldCgpfSxpci5wcm90b3R5cGUuZ2V0TWF4QW5pc290cm9weT1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRNYXhBbmlzb3Ryb3B5KCkgaXMgbm93IC5jYXBhYmlsaXRpZXMuZ2V0TWF4QW5pc290cm9weSgpLiIpLHRoaXMuY2FwYWJpbGl0aWVzLmdldE1heEFuaXNvdHJvcHkoKX0saXIucHJvdG90eXBlLmdldFByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRQcmVjaXNpb24oKSBpcyBub3cgLmNhcGFiaWxpdGllcy5wcmVjaXNpb24uIiksdGhpcy5jYXBhYmlsaXRpZXMucHJlY2lzaW9ufSxpci5wcm90b3R5cGUucmVzZXRHTFN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnJlc2V0R0xTdGF0ZSgpIGlzIG5vdyAuc3RhdGUucmVzZXQoKS4iKSx0aGlzLnN0YXRlLnJlc2V0KCl9LGlyLnByb3RvdHlwZS5zdXBwb3J0c0Zsb2F0VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU190ZXh0dXJlX2Zsb2F0JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIk9FU190ZXh0dXJlX2Zsb2F0Iil9LGlyLnByb3RvdHlwZS5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnT0VTX3RleHR1cmVfaGFsZl9mbG9hdCcgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iil9LGlyLnByb3RvdHlwZS5zdXBwb3J0c1N0YW5kYXJkRGVyaXZhdGl2ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNTdGFuZGFyZERlcml2YXRpdmVzKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKX0saXIucHJvdG90eXBlLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDPWZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVTM1RDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIil9LGlyLnByb3RvdHlwZS5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlUFZSVEM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZVBWUlRDKCkgaXMgbm93IC5leHRlbnNpb25zLmdldCggJ1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKX0saXIucHJvdG90eXBlLnN1cHBvcnRzQmxlbmRNaW5NYXg9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNCbGVuZE1pbk1heCgpIGlzIG5vdyAuZXh0ZW5zaW9ucy5nZXQoICdFWFRfYmxlbmRfbWlubWF4JyApLiIpLHRoaXMuZXh0ZW5zaW9ucy5nZXQoIkVYVF9ibGVuZF9taW5tYXgiKX0saXIucHJvdG90eXBlLnN1cHBvcnRzVmVydGV4VGV4dHVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNWZXJ0ZXhUZXh0dXJlcygpIGlzIG5vdyAuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzLiIpLHRoaXMuY2FwYWJpbGl0aWVzLnZlcnRleFRleHR1cmVzfSxpci5wcm90b3R5cGUuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXM9ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc3VwcG9ydHNJbnN0YW5jZWRBcnJheXMoKSBpcyBub3cgLmV4dGVuc2lvbnMuZ2V0KCAnQU5HTEVfaW5zdGFuY2VkX2FycmF5cycgKS4iKSx0aGlzLmV4dGVuc2lvbnMuZ2V0KCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIil9LGlyLnByb3RvdHlwZS5lbmFibGVTY2lzc29yVGVzdD1mdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5lbmFibGVTY2lzc29yVGVzdCgpIGlzIG5vdyAuc2V0U2Npc3NvclRlc3QoKS4iKSx0aGlzLnNldFNjaXNzb3JUZXN0KG4pfSxpci5wcm90b3R5cGUuaW5pdE1hdGVyaWFsPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuaW5pdE1hdGVyaWFsKCkgaGFzIGJlZW4gcmVtb3ZlZC4iKX0saXIucHJvdG90eXBlLmFkZFByZVBsdWdpbj1mdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmFkZFByZVBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5hZGRQb3N0UGx1Z2luPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWRkUG9zdFBsdWdpbigpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS51cGRhdGVTaGFkb3dNYXA9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC51cGRhdGVTaGFkb3dNYXAoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxpci5wcm90b3R5cGUuc2V0RmFjZUN1bGxpbmc9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRGYWNlQ3VsbGluZygpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5hbGxvY1RleHR1cmVVbml0PWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuYWxsb2NUZXh0dXJlVW5pdCgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5zZXRUZXh0dXJlPWZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2V0VGV4dHVyZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5zZXRUZXh0dXJlMkQ9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlMkQoKSBoYXMgYmVlbiByZW1vdmVkLiIpfSxpci5wcm90b3R5cGUuc2V0VGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zZXRUZXh0dXJlQ3ViZSgpIGhhcyBiZWVuIHJlbW92ZWQuIil9LGlyLnByb3RvdHlwZS5nZXRBY3RpdmVNaXBNYXBMZXZlbD1mdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nZXRBY3RpdmVNaXBNYXBMZXZlbCgpIGlzIG5vdyAuZ2V0QWN0aXZlTWlwbWFwTGV2ZWwoKS4iKSx0aGlzLmdldEFjdGl2ZU1pcG1hcExldmVsKCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGlyLnByb3RvdHlwZSx7c2hhZG93TWFwRW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLmVuYWJsZWR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBFbmFibGVkIGlzIG5vdyAuc2hhZG93TWFwLmVuYWJsZWQuIiksdGhpcy5zaGFkb3dNYXAuZW5hYmxlZD1ufX0sc2hhZG93TWFwVHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhZG93TWFwLnR5cGV9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXBUeXBlIGlzIG5vdyAuc2hhZG93TWFwLnR5cGUuIiksdGhpcy5zaGFkb3dNYXAudHlwZT1ufX0sc2hhZG93TWFwQ3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcEN1bGxGYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxjb250ZXh0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuY29udGV4dCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgLmdldENvbnRleHQoKSBpbnN0ZWFkLiIpLHRoaXMuZ2V0Q29udGV4dCgpfX0sdnI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC52ciBoYXMgYmVlbiByZW5hbWVkIHRvIC54ciIpLHRoaXMueHJ9fSxnYW1tYUlucHV0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFJbnB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgdGhlIGVuY29kaW5nIGZvciB0ZXh0dXJlcyB2aWEgVGV4dHVyZS5lbmNvZGluZyBpbnN0ZWFkLiIpLCExfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYUlucHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCB0aGUgZW5jb2RpbmcgZm9yIHRleHR1cmVzIHZpYSBUZXh0dXJlLmVuY29kaW5nIGluc3RlYWQuIil9fSxnYW1tYU91dHB1dDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hT3V0cHV0IGhhcyBiZWVuIHJlbW92ZWQuIFNldCBXZWJHTFJlbmRlcmVyLm91dHB1dEVuY29kaW5nIGluc3RlYWQuIiksITF9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5nYW1tYU91dHB1dCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgV2ViR0xSZW5kZXJlci5vdXRwdXRFbmNvZGluZyBpbnN0ZWFkLiIpLHRoaXMub3V0cHV0RW5jb2Rpbmc9ITA9PT1uP1dyOmJmfX0sdG9uZU1hcHBpbmdXaGl0ZVBvaW50OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIiksMX0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAudG9uZU1hcHBpbmdXaGl0ZVBvaW50IGhhcyBiZWVuIHJlbW92ZWQuIil9fSxnYW1tYUZhY3Rvcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLmdhbW1hRmFjdG9yIGhhcyBiZWVuIHJlbW92ZWQuIiksMn0sc2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuZ2FtbWFGYWN0b3IgaGFzIGJlZW4gcmVtb3ZlZC4iKX19fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoR2RlLnByb3RvdHlwZSx7Y3VsbEZhY2U6e2dldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5jdWxsRmFjZSBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAuY3VsbEZhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gU2V0IE1hdGVyaWFsLnNoYWRvd1NpZGUgaW5zdGVhZC4iKX19LHJlbmRlclJldmVyc2VTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclJldmVyc2VTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfSxzZXQ6ZnVuY3Rpb24oKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyZXI6IC5zaGFkb3dNYXAucmVuZGVyUmV2ZXJzZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9fSxyZW5kZXJTaW5nbGVTaWRlZDp7Z2V0OmZ1bmN0aW9uKCl7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlcmVyOiAuc2hhZG93TWFwLnJlbmRlclNpbmdsZVNpZGVkIGhhcyBiZWVuIHJlbW92ZWQuIFNldCBNYXRlcmlhbC5zaGFkb3dTaWRlIGluc3RlYWQuIil9LHNldDpmdW5jdGlvbigpe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJlcjogLnNoYWRvd01hcC5yZW5kZXJTaW5nbGVTaWRlZCBoYXMgYmVlbiByZW1vdmVkLiBTZXQgTWF0ZXJpYWwuc2hhZG93U2lkZSBpbnN0ZWFkLiIpfX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXYS5wcm90b3R5cGUse3dyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLndyYXBTIGlzIG5vdyAudGV4dHVyZS53cmFwUy4iKSx0aGlzLnRleHR1cmUud3JhcFN9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFMgaXMgbm93IC50ZXh0dXJlLndyYXBTLiIpLHRoaXMudGV4dHVyZS53cmFwUz1ufX0sd3JhcFQ6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAud3JhcFQgaXMgbm93IC50ZXh0dXJlLndyYXBULiIpLHRoaXMudGV4dHVyZS53cmFwVH0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC53cmFwVCBpcyBub3cgLnRleHR1cmUud3JhcFQuIiksdGhpcy50ZXh0dXJlLndyYXBUPW59fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWFnRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5tYWdGaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1hZ0ZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5tYWdGaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1hZ0ZpbHRlci4iKSx0aGlzLnRleHR1cmUubWFnRmlsdGVyPW59fSxtaW5GaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAubWluRmlsdGVyIGlzIG5vdyAudGV4dHVyZS5taW5GaWx0ZXIuIiksdGhpcy50ZXh0dXJlLm1pbkZpbHRlcn0sc2V0OmZ1bmN0aW9uKG4pe2NvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5taW5GaWx0ZXIgaXMgbm93IC50ZXh0dXJlLm1pbkZpbHRlci4iKSx0aGlzLnRleHR1cmUubWluRmlsdGVyPW59fSxhbmlzb3Ryb3B5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmFuaXNvdHJvcHkgaXMgbm93IC50ZXh0dXJlLmFuaXNvdHJvcHkuIiksdGhpcy50ZXh0dXJlLmFuaXNvdHJvcHl9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuYW5pc290cm9weSBpcyBub3cgLnRleHR1cmUuYW5pc290cm9weS4iKSx0aGlzLnRleHR1cmUuYW5pc290cm9weT1ufX0sb2Zmc2V0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLm9mZnNldCBpcyBub3cgLnRleHR1cmUub2Zmc2V0LiIpLHRoaXMudGV4dHVyZS5vZmZzZXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAub2Zmc2V0IGlzIG5vdyAudGV4dHVyZS5vZmZzZXQuIiksdGhpcy50ZXh0dXJlLm9mZnNldD1ufX0scmVwZWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnJlcGVhdCBpcyBub3cgLnRleHR1cmUucmVwZWF0LiIpLHRoaXMudGV4dHVyZS5yZXBlYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAucmVwZWF0IGlzIG5vdyAudGV4dHVyZS5yZXBlYXQuIiksdGhpcy50ZXh0dXJlLnJlcGVhdD1ufX0sZm9ybWF0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmZvcm1hdCBpcyBub3cgLnRleHR1cmUuZm9ybWF0LiIpLHRoaXMudGV4dHVyZS5mb3JtYXR9LHNldDpmdW5jdGlvbihuKXtjb25zb2xlLndhcm4oIlRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0OiAuZm9ybWF0IGlzIG5vdyAudGV4dHVyZS5mb3JtYXQuIiksdGhpcy50ZXh0dXJlLmZvcm1hdD1ufX0sdHlwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC50eXBlIGlzIG5vdyAudGV4dHVyZS50eXBlLiIpLHRoaXMudGV4dHVyZS50eXBlfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLnR5cGUgaXMgbm93IC50ZXh0dXJlLnR5cGUuIiksdGhpcy50ZXh0dXJlLnR5cGU9bn19LGdlbmVyYXRlTWlwbWFwczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ6IC5nZW5lcmF0ZU1pcG1hcHMgaXMgbm93IC50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwcy4iKSx0aGlzLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzfSxzZXQ6ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5XZWJHTFJlbmRlclRhcmdldDogLmdlbmVyYXRlTWlwbWFwcyBpcyBub3cgLnRleHR1cmUuZ2VuZXJhdGVNaXBtYXBzLiIpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcHM9bn19fSksY2xhc3MgZXh0ZW5kcyBYaXtjb25zdHJ1Y3Rvcih0KXtzdXBlcigpLHRoaXMudHlwZT0iQXVkaW8iLHRoaXMubGlzdGVuZXI9dCx0aGlzLmNvbnRleHQ9dC5jb250ZXh0LHRoaXMuZ2Fpbj10aGlzLmNvbnRleHQuY3JlYXRlR2FpbigpLHRoaXMuZ2Fpbi5jb25uZWN0KHQuZ2V0SW5wdXQoKSksdGhpcy5hdXRvcGxheT0hMSx0aGlzLmJ1ZmZlcj1udWxsLHRoaXMuZGV0dW5lPTAsdGhpcy5sb29wPSExLHRoaXMubG9vcFN0YXJ0PTAsdGhpcy5sb29wRW5kPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmR1cmF0aW9uPXZvaWQgMCx0aGlzLnBsYXliYWNrUmF0ZT0xLHRoaXMuaXNQbGF5aW5nPSExLHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSEwLHRoaXMuc291cmNlPW51bGwsdGhpcy5zb3VyY2VUeXBlPSJlbXB0eSIsdGhpcy5fc3RhcnRlZEF0PTAsdGhpcy5fcHJvZ3Jlc3M9MCx0aGlzLl9jb25uZWN0ZWQ9ITEsdGhpcy5maWx0ZXJzPVtdfWdldE91dHB1dCgpe3JldHVybiB0aGlzLmdhaW59c2V0Tm9kZVNvdXJjZSh0KXtyZXR1cm4gdGhpcy5oYXNQbGF5YmFja0NvbnRyb2w9ITEsdGhpcy5zb3VyY2VUeXBlPSJhdWRpb05vZGUiLHRoaXMuc291cmNlPXQsdGhpcy5jb25uZWN0KCksdGhpc31zZXRNZWRpYUVsZW1lbnRTb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFOb2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKHQpLHRoaXMuY29ubmVjdCgpLHRoaXN9c2V0TWVkaWFTdHJlYW1Tb3VyY2UodCl7cmV0dXJuIHRoaXMuaGFzUGxheWJhY2tDb250cm9sPSExLHRoaXMuc291cmNlVHlwZT0ibWVkaWFTdHJlYW1Ob2RlIix0aGlzLnNvdXJjZT10aGlzLmNvbnRleHQuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UodCksdGhpcy5jb25uZWN0KCksdGhpc31zZXRCdWZmZXIodCl7cmV0dXJuIHRoaXMuYnVmZmVyPXQsdGhpcy5zb3VyY2VUeXBlPSJidWZmZXIiLHRoaXMuYXV0b3BsYXkmJnRoaXMucGxheSgpLHRoaXN9cGxheSh0PTApe2lmKCEwPT09dGhpcy5pc1BsYXlpbmcpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogQXVkaW8gaXMgYWxyZWFkeSBwbGF5aW5nLiIpO2lmKCExPT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKTt0aGlzLl9zdGFydGVkQXQ9dGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lK3Q7bGV0IGU9dGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpO3JldHVybiBlLmJ1ZmZlcj10aGlzLmJ1ZmZlcixlLmxvb3A9dGhpcy5sb29wLGUubG9vcFN0YXJ0PXRoaXMubG9vcFN0YXJ0LGUubG9vcEVuZD10aGlzLmxvb3BFbmQsZS5vbmVuZGVkPXRoaXMub25FbmRlZC5iaW5kKHRoaXMpLGUuc3RhcnQodGhpcy5fc3RhcnRlZEF0LHRoaXMuX3Byb2dyZXNzK3RoaXMub2Zmc2V0LHRoaXMuZHVyYXRpb24pLHRoaXMuaXNQbGF5aW5nPSEwLHRoaXMuc291cmNlPWUsdGhpcy5zZXREZXR1bmUodGhpcy5kZXR1bmUpLHRoaXMuc2V0UGxheWJhY2tSYXRlKHRoaXMucGxheWJhY2tSYXRlKSx0aGlzLmNvbm5lY3QoKX1wYXVzZSgpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuX3Byb2dyZXNzKz1NYXRoLm1heCh0aGlzLmNvbnRleHQuY3VycmVudFRpbWUtdGhpcy5fc3RhcnRlZEF0LDApKnRoaXMucGxheWJhY2tSYXRlLCEwPT09dGhpcy5sb29wJiYodGhpcy5fcHJvZ3Jlc3M9dGhpcy5fcHJvZ3Jlc3MlKHRoaXMuZHVyYXRpb258fHRoaXMuYnVmZmVyLmR1cmF0aW9uKSksdGhpcy5zb3VyY2Uuc3RvcCgpLHRoaXMuc291cmNlLm9uZW5kZWQ9bnVsbCx0aGlzLmlzUGxheWluZz0hMSksdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfXN0b3AoKXtpZighMSE9PXRoaXMuaGFzUGxheWJhY2tDb250cm9sKXJldHVybiB0aGlzLl9wcm9ncmVzcz0wLHRoaXMuc291cmNlLnN0b3AoKSx0aGlzLnNvdXJjZS5vbmVuZGVkPW51bGwsdGhpcy5pc1BsYXlpbmc9ITEsdGhpcztjb25zb2xlLndhcm4oIlRIUkVFLkF1ZGlvOiB0aGlzIEF1ZGlvIGhhcyBubyBwbGF5YmFjayBjb250cm9sLiIpfWNvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmNvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5jb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmNvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMCx0aGlzfWRpc2Nvbm5lY3QoKXtpZih0aGlzLmZpbHRlcnMubGVuZ3RoPjApe3RoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5maWx0ZXJzWzBdKTtmb3IobGV0IHQ9MSxlPXRoaXMuZmlsdGVycy5sZW5ndGg7dDxlO3QrKyl0aGlzLmZpbHRlcnNbdC0xXS5kaXNjb25uZWN0KHRoaXMuZmlsdGVyc1t0XSk7dGhpcy5maWx0ZXJzW3RoaXMuZmlsdGVycy5sZW5ndGgtMV0uZGlzY29ubmVjdCh0aGlzLmdldE91dHB1dCgpKX1lbHNlIHRoaXMuc291cmNlLmRpc2Nvbm5lY3QodGhpcy5nZXRPdXRwdXQoKSk7cmV0dXJuIHRoaXMuX2Nvbm5lY3RlZD0hMSx0aGlzfWdldEZpbHRlcnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJzfXNldEZpbHRlcnModCl7cmV0dXJuIHR8fCh0PVtdKSwhMD09PXRoaXMuX2Nvbm5lY3RlZD8odGhpcy5kaXNjb25uZWN0KCksdGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzLmNvbm5lY3QoKSk6dGhpcy5maWx0ZXJzPXQuc2xpY2UoKSx0aGlzfXNldERldHVuZSh0KXtpZih0aGlzLmRldHVuZT10LHZvaWQgMCE9PXRoaXMuc291cmNlLmRldHVuZSlyZXR1cm4hMD09PXRoaXMuaXNQbGF5aW5nJiZ0aGlzLnNvdXJjZS5kZXR1bmUuc2V0VGFyZ2V0QXRUaW1lKHRoaXMuZGV0dW5lLHRoaXMuY29udGV4dC5jdXJyZW50VGltZSwuMDEpLHRoaXN9Z2V0RGV0dW5lKCl7cmV0dXJuIHRoaXMuZGV0dW5lfWdldEZpbHRlcigpe3JldHVybiB0aGlzLmdldEZpbHRlcnMoKVswXX1zZXRGaWx0ZXIodCl7cmV0dXJuIHRoaXMuc2V0RmlsdGVycyh0P1t0XTpbXSl9c2V0UGxheWJhY2tSYXRlKHQpe2lmKCExIT09dGhpcy5oYXNQbGF5YmFja0NvbnRyb2wpcmV0dXJuIHRoaXMucGxheWJhY2tSYXRlPXQsITA9PT10aGlzLmlzUGxheWluZyYmdGhpcy5zb3VyY2UucGxheWJhY2tSYXRlLnNldFRhcmdldEF0VGltZSh0aGlzLnBsYXliYWNrUmF0ZSx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9Z2V0UGxheWJhY2tSYXRlKCl7cmV0dXJuIHRoaXMucGxheWJhY2tSYXRlfW9uRW5kZWQoKXt0aGlzLmlzUGxheWluZz0hMX1nZXRMb29wKCl7cmV0dXJuITE9PT10aGlzLmhhc1BsYXliYWNrQ29udHJvbD8oY29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogdGhpcyBBdWRpbyBoYXMgbm8gcGxheWJhY2sgY29udHJvbC4iKSwhMSk6dGhpcy5sb29wfXNldExvb3AodCl7aWYoITEhPT10aGlzLmhhc1BsYXliYWNrQ29udHJvbClyZXR1cm4gdGhpcy5sb29wPXQsITA9PT10aGlzLmlzUGxheWluZyYmKHRoaXMuc291cmNlLmxvb3A9dGhpcy5sb29wKSx0aGlzO2NvbnNvbGUud2FybigiVEhSRUUuQXVkaW86IHRoaXMgQXVkaW8gaGFzIG5vIHBsYXliYWNrIGNvbnRyb2wuIil9c2V0TG9vcFN0YXJ0KHQpe3JldHVybiB0aGlzLmxvb3BTdGFydD10LHRoaXN9c2V0TG9vcEVuZCh0KXtyZXR1cm4gdGhpcy5sb29wRW5kPXQsdGhpc31nZXRWb2x1bWUoKXtyZXR1cm4gdGhpcy5nYWluLmdhaW4udmFsdWV9c2V0Vm9sdW1lKHQpe3JldHVybiB0aGlzLmdhaW4uZ2Fpbi5zZXRUYXJnZXRBdFRpbWUodCx0aGlzLmNvbnRleHQuY3VycmVudFRpbWUsLjAxKSx0aGlzfX0ucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24obil7Y29uc29sZS53YXJuKCJUSFJFRS5BdWRpbzogLmxvYWQgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkF1ZGlvTG9hZGVyIGluc3RlYWQuIik7bGV0IHQ9dGhpcztyZXR1cm4obmV3IHNHKS5sb2FkKG4sZnVuY3Rpb24oaSl7dC5zZXRCdWZmZXIoaSl9KSx0aGlzfSxLUy5wcm90b3R5cGUudXBkYXRlQ3ViZU1hcD1mdW5jdGlvbihuLHQpe3JldHVybiBjb25zb2xlLndhcm4oIlRIUkVFLkN1YmVDYW1lcmE6IC51cGRhdGVDdWJlTWFwKCkgaXMgbm93IC51cGRhdGUoKS4iKSx0aGlzLnVwZGF0ZShuLHQpfSxLUy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24obix0LGUsaSl7cmV0dXJuIGNvbnNvbGUud2FybigiVEhSRUUuQ3ViZUNhbWVyYTogLmNsZWFyKCkgaXMgbm93IC5yZW5kZXJUYXJnZXQuY2xlYXIoKS4iKSx0aGlzLnJlbmRlclRhcmdldC5jbGVhcihuLHQsZSxpKX0sVHAuY3Jvc3NPcmlnaW49dm9pZCAwLFRwLmxvYWRUZXh0dXJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZSBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgVEhSRUUuVGV4dHVyZUxvYWRlcigpIGluc3RlYWQuIik7bGV0IHI9bmV3IEs4O3Iuc2V0Q3Jvc3NPcmlnaW4odGhpcy5jcm9zc09yaWdpbik7bGV0IG89ci5sb2FkKG4sZSx2b2lkIDAsaSk7cmV0dXJuIHQmJihvLm1hcHBpbmc9dCksb30sVHAubG9hZFRleHR1cmVDdWJlPWZ1bmN0aW9uKG4sdCxlLGkpe2NvbnNvbGUud2FybigiVEhSRUUuSW1hZ2VVdGlscy5sb2FkVGV4dHVyZUN1YmUgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIFRIUkVFLkN1YmVUZXh0dXJlTG9hZGVyKCkgaW5zdGVhZC4iKTtsZXQgcj1uZXcgUTg7ci5zZXRDcm9zc09yaWdpbih0aGlzLmNyb3NzT3JpZ2luKTtsZXQgbz1yLmxvYWQobixlLHZvaWQgMCxpKTtyZXR1cm4gdCYmKG8ubWFwcGluZz10KSxvfSxUcC5sb2FkQ29tcHJlc3NlZFRleHR1cmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZSBoYXMgYmVlbiByZW1vdmVkLiBVc2UgVEhSRUUuRERTTG9hZGVyIGluc3RlYWQuIil9LFRwLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmU9ZnVuY3Rpb24oKXtjb25zb2xlLmVycm9yKCJUSFJFRS5JbWFnZVV0aWxzLmxvYWRDb21wcmVzc2VkVGV4dHVyZUN1YmUgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIFRIUkVFLkREU0xvYWRlciBpbnN0ZWFkLiIpfSx0eXBlb2YgX19USFJFRV9ERVZUT09MU19fPCJ1IiYmX19USFJFRV9ERVZUT09MU19fLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJyZWdpc3RlciIse2RldGFpbDp7cmV2aXNpb246IjEzNyJ9fSkpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Ll9fVEhSRUVfXz9jb25zb2xlLndhcm4oIldBUk5JTkc6IE11bHRpcGxlIGluc3RhbmNlcyBvZiBUaHJlZS5qcyBiZWluZyBpbXBvcnRlZC4iKTp3aW5kb3cuX19USFJFRV9fPSIxMzciKTt2YXIgcHU9KCgpPT4oZnVuY3Rpb24obil7bltuLkNJUkNMRT0wXT0iQ0lSQ0xFIixuW24uTElORT0xXT0iTElORSIsbltuLlRSSUFOR0xFPTJdPSJUUklBTkdMRSIsbltuLlRSQVBFWk9JRD0zXT0iVFJBUEVaT0lEIn0ocHV8fChwdT17fSkpLHB1KSkoKTtmdW5jdGlvbiBKZGUobix0KXtsZXQgZT10Lmxlbmd0aC8yLGk9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghaXx8aS5jb3VudCE9PTMqZSkmJihpPW5ldyBZcihuZXcgRmxvYXQzMkFycmF5KDMqZSksMyksbi5zZXRBdHRyaWJ1dGUoInBvc2l0aW9uIixpKSk7bGV0IHI9aS5hcnJheTtmb3IobGV0IG89MDtvPGU7bysrKXJbMypvXT10WzIqb10sclszKm8rMV09dFsyKm8rMV07aS5uZWVkc1VwZGF0ZT0hMCxuLnNldERyYXdSYW5nZSgwLDMqZSksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiAkZGUobix0LGUpe2xldCBpPU1hdGgubWF4KHQubGVuZ3RoLzItMSwwKSxyPTIqaSozLG89MypyLHM9bi5hdHRyaWJ1dGVzLnBvc2l0aW9uOyghc3x8cy5jb3VudCE9PXIpJiYocz1uZXcgWXIobmV3IEZsb2F0MzJBcnJheShvKSwzKSxuLnNldEF0dHJpYnV0ZSgicG9zaXRpb24iLHMpKTtsZXQgYT1zLmFycmF5O2ZvcihsZXQgbD0wO2w8aTtsKyspe2xldFtjLHUsZCxwXT1bdFsyKmxdLHRbMipsKzFdLHRbMipsKzJdLHRbMipsKzNdXSxoPW5ldyBhdChjLHUpLGY9bmV3IGF0KGQscCksbT1uZXcgYXQoZC1jLHAtdSkseD1uZXcgYXQoLW0ueSxtLngpLnNldExlbmd0aChlLzIpLGc9aC5jbG9uZSgpLmFkZCh4KSxiPWguY2xvbmUoKS5zdWIoeCksRD1mLmNsb25lKCkuYWRkKHgpLFQ9Zi5jbG9uZSgpLnN1Yih4KSxrPVtnLngsZy55LDAsYi54LGIueSwwLEQueCxELnksMCxELngsRC55LDAsYi54LGIueSwwLFQueCxULnksMF07YS5zZXQoayxsKmsubGVuZ3RoKX1zLm5lZWRzVXBkYXRlPSEwLG4uc2V0RHJhd1JhbmdlKDAsbyksbi5jb21wdXRlQm91bmRpbmdTcGhlcmUoKX1mdW5jdGlvbiBOayhuLHQsZSxpKXtsZXR7dmlzaWJsZTpyLGNvbG9yOm8sb3BhY2l0eTpzfT1pO2lmKEFycmF5LmlzQXJyYXkodC5tYXRlcmlhbCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IG9ubHkgZXhwZWN0IG9uZSBtYXRlcmlhbCBvbiBhbiBvYmplY3QiKTtsZXQgYT10Lm1hdGVyaWFsO2lmKGEudmlzaWJsZSE9PXImJihhLnZpc2libGU9cixhLm5lZWRzVXBkYXRlPSEwKSwhcilyZXR1cm4hMTtsZXQgbD1ERyhuLG8scz8/MSksYz1lKHQuZ2VvbWV0cnkpO3JldHVybiB0Lmdlb21ldHJ5IT09YyYmKHQuZ2VvbWV0cnk9YyksYS5jb2xvci5lcXVhbHMobCl8fChhLmNvbG9yLnNldChsKSxhLm5lZWRzVXBkYXRlPSEwKSwhMH12YXIgQms9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5yYXdTZXJpZXNEYXRhPVtdLHRoaXMuc2VyaWVzPVtdLHRoaXMucGFpbnREaXJ0eT0hMCx0aGlzLnJlbmRlckNhY2hlPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMucHJldkZyYW1lQ2FjaGU9bmV3IE1hcCx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXB9Z2V0RnJvbVByZXZpb3VzRnJhbWUodCl7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGUuZ2V0KHQpPz9udWxsfXNldFRvQ3VycmVudEZyYW1lKHQsZSl7dGhpcy5jdXJyRnJhbWVDYWNoZS5zZXQodCxlKX1maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpe2xldCB0PVtdO2ZvcihsZXRbZSxpXW9mIHRoaXMucHJldkZyYW1lQ2FjaGUuZW50cmllcygpKXRoaXMuY3VyckZyYW1lQ2FjaGUuaGFzKGUpfHx0LnB1c2goaSk7cmV0dXJuIHRoaXMucHJldkZyYW1lQ2FjaGU9dGhpcy5jdXJyRnJhbWVDYWNoZSx0aGlzLmN1cnJGcmFtZUNhY2hlPW5ldyBNYXAsdH19LHRoaXMuY29vcmRpbmF0ZUlkZW50aWZpZXI9bnVsbCx0aGlzLmxheW91dD17eDowLHdpZHRoOjEseTowLGhlaWdodDoxfSx0aGlzLmdldE1ldGFkYXRhTWFwSW1wbD10LmdldE1ldGFkYXRhTWFwLHRoaXMuY29vcmRpbmF0b3I9dC5jb29yZGluYXRvcix0aGlzLnJlbmRlcmVyPXQucmVuZGVyZXIsdGhpcy5wYWludEJydXNoPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUpe3RoaXMucmVuZGVyQ2FjaGU9dCx0aGlzLnJlbmRlcmVyPWV9c2V0TGluZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkpO3ImJnRoaXMucmVuZGVyQ2FjaGUuc2V0VG9DdXJyZW50RnJhbWUodCxyKX1zZXRUcmlhbmdsZSh0LGUsaSl7bGV0IHI9dGhpcy5yZW5kZXJlci5jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0Q2lyY2xlKHQsZSxpKXtsZXQgcj10aGlzLnJlbmRlcmVyLmNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHRoaXMucmVuZGVyQ2FjaGUuZ2V0RnJvbVByZXZpb3VzRnJhbWUodCksZSxpKTtyJiZ0aGlzLnJlbmRlckNhY2hlLnNldFRvQ3VycmVudEZyYW1lKHQscil9c2V0VHJhcGV6b2lkKHQsZSxpLHIpe2xldCBvPXRoaXMucmVuZGVyZXIuY3JlYXRlT3JVcGRhdGVUcmFwZXpvaWRPYmplY3QodGhpcy5yZW5kZXJDYWNoZS5nZXRGcm9tUHJldmlvdXNGcmFtZSh0KSxlLGkscik7byYmdGhpcy5yZW5kZXJDYWNoZS5zZXRUb0N1cnJlbnRGcmFtZSh0LG8pfX0odGhpcy5yZW5kZXJDYWNoZSx0aGlzLnJlbmRlcmVyKX1zZXRMYXlvdXRSZWN0KHQpeyh0aGlzLmxheW91dC54IT09dC54fHx0aGlzLmxheW91dC53aWR0aCE9PXQud2lkdGh8fHRoaXMubGF5b3V0LnkhPT10Lnl8fHRoaXMubGF5b3V0LmhlaWdodCE9PXQuaGVpZ2h0KSYmKHRoaXMucGFpbnREaXJ0eT0hMCksdGhpcy5sYXlvdXQ9dH1nZXRMYXlvdXRSZWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0fWdldE1ldGFkYXRhTWFwKCl7cmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGFNYXBJbXBsKCl9bWFya0FzUGFpbnREaXJ0eSgpe3RoaXMucGFpbnREaXJ0eT0hMH1yZW5kZXIoKXtpZih0aGlzLnRyYW5zZm9ybUNvb3JkaW5hdGVzSWZTdGFsZSgpLHRoaXMucGFpbnREaXJ0eSl7dGhpcy5yZWRyYXcoKTtmb3IobGV0IHQgb2YgdGhpcy5yZW5kZXJDYWNoZS5maW5hbGl6ZUZyYW1lQW5kR2V0UmVtb3ZlZCgpKXRoaXMucmVuZGVyZXIuZGVzdHJveU9iamVjdCh0KTt0aGlzLnBhaW50RGlydHk9ITF9fWlzQ29vcmRpbmF0ZVVwZGF0ZWQoKXtyZXR1cm4gdGhpcy5jb29yZGluYXRvci5nZXRVcGRhdGVJZGVudGlmaWVyKCkhPT10aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyfWNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKXt0aGlzLmNvb3JkaW5hdGVJZGVudGlmaWVyPW51bGx9c2V0RGF0YSh0KXt0aGlzLmNsZWFyQ29vcmRpbmF0ZUlkZW50aWZpZXIoKSx0aGlzLnJhd1Nlcmllc0RhdGE9dH10cmFuc2Zvcm1Db29yZGluYXRlc0lmU3RhbGUoKXtpZighdGhpcy5pc0Nvb3JkaW5hdGVVcGRhdGVkKCkpcmV0dXJuO2xldCB0PXRoaXMuZ2V0TGF5b3V0UmVjdCgpO3RoaXMuc2VyaWVzPW5ldyBBcnJheSh0aGlzLnJhd1Nlcmllc0RhdGEubGVuZ3RoKTtmb3IobGV0IGU9MDtlPHRoaXMucmF3U2VyaWVzRGF0YS5sZW5ndGg7ZSsrKXtsZXQgaT10aGlzLnJhd1Nlcmllc0RhdGFbZV07dGhpcy5zZXJpZXNbZV09e2lkOmkuaWQscG9seWxpbmU6bmV3IEZsb2F0MzJBcnJheSgyKmkucG9pbnRzLmxlbmd0aCl9O2ZvcihsZXQgcj0wO3I8aS5wb2ludHMubGVuZ3RoO3IrKyl7bGV0W28sc109dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHQsW2kucG9pbnRzW3JdLngsaS5wb2ludHNbcl0ueV0pO3RoaXMuc2VyaWVzW2VdLnBvbHlsaW5lWzIqcl09byx0aGlzLnNlcmllc1tlXS5wb2x5bGluZVsyKnIrMV09c319dGhpcy5jb29yZGluYXRlSWRlbnRpZmllcj10aGlzLmNvb3JkaW5hdG9yLmdldFVwZGF0ZUlkZW50aWZpZXIoKSx0aGlzLm1hcmtBc1BhaW50RGlydHkoKX19LFRiPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OVU1CRVI9MF09Ik5VTUJFUiIsbltuLk5BTj0xXT0iTkFOIn0oVGJ8fChUYj17fSkpLFRiKSkoKSxWaz1jbGFzcyBleHRlbmRzIEJre3JlY29yZFBhcnRpdGlvbih0LGUsaSl7cmV0dXJuIHQ/e3R5cGU6VGIuTlVNQkVSLHBvbHlsaW5lOmV9Ont0eXBlOlRiLk5BTixwb2x5bGluZTplLm1hcCgocixvKT0+aXNOYU4ocik/byUyPT0wP2kueDppLnk6cil9fXBhcnRpdGlvblBvbHlsaW5lKHQpe2xldCBlPVtdLGk9MCxyPSExLG89dGhpcy5jb29yZGluYXRvci50cmFuc2Zvcm1EYXRhVG9VaUNvb3JkKHRoaXMuZ2V0TGF5b3V0UmVjdCgpLFswLDBdKSxzPXt4Om9bMF0seTpvWzFdfSxhPW51bGw7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0yKXtsZXQgYz10W2xdLHU9dFtsKzFdLGQ9aXNOYU4oYyl8fGlzTmFOKHUpO2QhPT1yJiZpIT09bCYmKGUucHVzaCh0aGlzLnJlY29yZFBhcnRpdGlvbighcix0LnNsaWNlKGksbCksbnVsbD09PWE/e3g6Yyx5OnV9OmEpKSxpPWwpLGR8fChhPXt4OmMseTp1fSkscj1kfXJldHVybiBpIT09dC5sZW5ndGgtMSYmZS5wdXNoKHRoaXMucmVjb3JkUGFydGl0aW9uKCFyLHQuc2xpY2UoaSx0Lmxlbmd0aCksYT8/cykpLGV9cmVkcmF3KCl7Zm9yKGxldCB0IG9mIHRoaXMuc2VyaWVzKXtsZXQgaT10aGlzLmdldE1ldGFkYXRhTWFwKClbdC5pZF07aWYoIWkpY29udGludWU7aWYodC5wb2x5bGluZS5sZW5ndGglMiE9MCl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBoYXZlIG9kZCBsZW5ndGgtZWQgcG9seWxpbmU6ICR7dC5wb2x5bGluZS5sZW5ndGh9YCk7bGV0IHI9dGhpcy5wYXJ0aXRpb25Qb2x5bGluZSh0LnBvbHlsaW5lKTtmb3IobGV0W28se3R5cGU6cyxwb2x5bGluZTphfV1vZiByLmVudHJpZXMoKSlpZihzPT09VGIuTlVNQkVSKTI9PT1hLmxlbmd0aD90aGlzLnBhaW50QnJ1c2guc2V0Q2lyY2xlKEpTT04uc3RyaW5naWZ5KFsiY2lyY2xlIix0LmlkLG9dKSx7eDphWzBdLHk6YVsxXX0se2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEscmFkaXVzOjR9KTp0aGlzLnBhaW50QnJ1c2guc2V0TGluZShKU09OLnN0cmluZ2lmeShbImxpbmUiLHQuaWQsb10pLGEse2NvbG9yOmkuY29sb3IsdmlzaWJsZTppLnZpc2libGUsb3BhY2l0eTppLm9wYWNpdHk/PzEsd2lkdGg6Mn0pO2Vsc2UgaWYoIWkuYXV4KWZvcihsZXQgbD0wO2w8YS5sZW5ndGg7bCs9Mil0aGlzLnBhaW50QnJ1c2guc2V0VHJpYW5nbGUoSlNPTi5zdHJpbmdpZnkoWyJOYU4iLHQuaWQsYVtsXSxhW2wrMV1dKSx7eDphW2xdLHk6YVtsKzFdfSx7Y29sb3I6aS5jb2xvcix2aXNpYmxlOmkudmlzaWJsZSxvcGFjaXR5Omkub3BhY2l0eT8/MSxzaXplOjEyfSl9fX0sSGs9Y2xhc3MgZXh0ZW5kcyBCeXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jYW1lcmE9bmV3IHFnKDAsMWUzLDFlMywwLDAsMTAwKX1pc1lBeGlzUG9pbnRlZERvd24oKXtyZXR1cm4hMX1zZXREb21Db250YWluZXJSZWN0KHQpe3N1cGVyLnNldERvbUNvbnRhaW5lclJlY3QodCksdGhpcy5jYW1lcmEubGVmdD10LngsdGhpcy5jYW1lcmEucmlnaHQ9dC54K3Qud2lkdGgsdGhpcy5jYW1lcmEudG9wPXQueSt0LmhlaWdodCx0aGlzLmNhbWVyYS5ib3R0b209dC55LHRoaXMuY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKX1nZXRDYW1lcmEoKXtyZXR1cm4gdGhpcy5jYW1lcmF9fSxVaz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtzd2l0Y2godGhpcy5tZXRhZGF0YU1hcD17fSx0aGlzLnNob3VsZFJlcGFpbnQ9ITEsdGhpcy5jYWxsYmFja3M9dC5jYWxsYmFja3MsdC50eXBlKXtjYXNlIGRyLlNWRzp0aGlzLmNvb3JkaW5hdG9yPW5ldyBCeSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLnN2Zz10fWZsdXNoKCl7fW9uUmVzaXplKHQpe31kZXN0cm95T2JqZWN0KHQpe3RoaXMuc3ZnLnJlbW92ZUNoaWxkKHQuZG9tKX1zZXRVc2VEYXJrTW9kZSh0KXt9Y3JlYXRlUGF0aERTdHJpbmcodCl7aWYoIXQubGVuZ3RoKXJldHVybiIiO2xldCBlPW5ldyBBcnJheSh0Lmxlbmd0aC8yKTtlWzBdPWBNJHt0WzBdfSwke3RbMV19YDtmb3IobGV0IGk9MTtpPHQubGVuZ3RoLzI7aSsrKWVbaV09YEwke3RbMippXX0sJHt0WzIqaSsxXX1gO3JldHVybiBlLmpvaW4oIiIpfWNyZWF0ZU9yVXBkYXRlTGluZU9iamVjdCh0LGUsaSl7bGV0IHI9eE8odD8uZG9tLCgpPT57bGV0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTtvLnN0eWxlLmZpbGw9Im5vbmUiO2xldCBzPXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoZSk7cmV0dXJuIG8uc2V0QXR0cmlidXRlKCJkIixzKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZChvKSxvfSxvPT57aWYoIXQ/LmRhdGF8fCFzdV9hcmVQb2x5bGluZXNFcXVhbChlLHQ/LmRhdGEpKXtsZXQgcz10aGlzLmNyZWF0ZVBhdGhEU3RyaW5nKGUpO28uc2V0QXR0cmlidXRlKCJkIixzKX1yZXR1cm4gb30saSk7cmV0dXJuIG51bGw9PT1yP251bGw6KHIuc3R5bGUuc3Ryb2tlV2lkdGg9U3RyaW5nKGkud2lkdGgpLHtkb206cixkYXRhOmV9KX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyLGNvbG9yOm99PWkscz1yKk1hdGguc3FydCgzKS8yLGE9bmV3IEZsb2F0MzJBcnJheShbZS54LXIvMixlLnkrcy8zLGUueCtyLzIsZS55K3MvMyxlLngsZS55LTIqcy8zXSksbD14Tyh0Py5kb20sKCk9PntsZXQgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO2MuY2xhc3NMaXN0LmFkZCgidHJpYW5nbGUiKSxjLnN0eWxlLmZpbGw9Im5vbmUiO2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoYyksY30sYz0+e2xldCB1PXRoaXMuY3JlYXRlUGF0aERTdHJpbmcoYSk7cmV0dXJuIGMuc2V0QXR0cmlidXRlKCJkIix1KyJaIiksY30saSk7cmV0dXJuIG51bGw9PT1sP251bGw6KGwuc3R5bGUuZmlsbD1vLHtkb206bCxkYXRhOmF9KX1jcmVhdGVPclVwZGF0ZUNpcmNsZU9iamVjdCh0LGUsaSl7bGV0e2NvbG9yOnIscmFkaXVzOm99PWkscz14Tyh0Py5kb20sKCk9PntsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiY2lyY2xlIik7cmV0dXJuIGEuc3R5bGUuZmlsbD1yLGEuc2V0QXR0cmlidXRlKCJjeCIsU3RyaW5nKGUueCkpLGEuc2V0QXR0cmlidXRlKCJjeSIsU3RyaW5nKGUueSkpLGEuc2V0QXR0cmlidXRlKCJyIixTdHJpbmcobykpLHRoaXMuc3ZnLmFwcGVuZENoaWxkKGEpLGF9LGE9PihhLnN0eWxlLmZpbGw9cixhLnNldEF0dHJpYnV0ZSgiY3giLFN0cmluZyhlLngpKSxhLnNldEF0dHJpYnV0ZSgiY3kiLFN0cmluZyhlLnkpKSxhLnNldEF0dHJpYnV0ZSgiciIsU3RyaW5nKG8pKSxhKSxpKTtyZXR1cm4gbnVsbD09PXM/bnVsbDp7ZG9tOnMsZGF0YTplfX1jcmVhdGVPclVwZGF0ZVRyYXBlem9pZE9iamVjdCh0LGUsaSxyKXtpZihlLnkhPT1pLnkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklucHV0IGVycm9yOiBzdGFydC55ICE9IGVuZC55LiIpO2xldHthbHRpdHVkZTpvLGNvbG9yOnN9PXIsYT0yL01hdGguc3FydCgzKSpvLGw9bmV3IEZsb2F0MzJBcnJheShbZS54LWEvMixlLnkrby8yLGUueCxlLnktby8yLGkueCxpLnktby8yLGkueCthLzIsaS55K28vMl0pLGM9eE8odD8uZG9tLCgpPT57bGV0IHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTt1LmNsYXNzTGlzdC5hZGQoInRyYXBlem9pZCIpLHUuc3R5bGUuZmlsbD0ibm9uZSI7bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx0aGlzLnN2Zy5hcHBlbmRDaGlsZCh1KSx1fSx1PT57bGV0IGQ9dGhpcy5jcmVhdGVQYXRoRFN0cmluZyhsKTtyZXR1cm4gdS5zZXRBdHRyaWJ1dGUoImQiLGQrIloiKSx1fSxyKTtyZXR1cm4gbnVsbD09PWM/bnVsbDooYy5zdHlsZS5maWxsPXMse2RvbTpjLGRhdGE6bH0pfWRpc3Bvc2UoKXt9fSh0LmNvbnRhaW5lcik7YnJlYWs7Y2FzZSBkci5XRUJHTDp7bGV0IGU9bmV3IEhrO3RoaXMuY29vcmRpbmF0b3I9ZSx0aGlzLnJlbmRlcmVyPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmNvb3JkaW5hdG9yPWUsdGhpcy5zY2VuZT1uZXcgdmIsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9IiNmZmYiLHN1X2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCkmJnQgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMmJih0LnN0eWxlPXQuc3R5bGV8fHt9KSxyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLHIpLHRoaXMucmVuZGVyZXI9bmV3IGlyKHtjYW52YXM6dCxhbnRpYWxpYXM6ITAsYWxwaGE6ITB9KSx0aGlzLnJlbmRlcmVyLnNldFBpeGVsUmF0aW8oaSl9b25SZXNpemUodCl7dGhpcy5yZW5kZXJlci5zZXRTaXplKHQud2lkdGgsdC5oZWlnaHQpfWRlc3Ryb3lPYmplY3QodCl7bGV0IGU9dC5vYmozZDtpZih0aGlzLnNjZW5lLnJlbW92ZShlKSxlIGluc3RhbmNlb2YgVm8pe2UuZ2VvbWV0cnkuZGlzcG9zZSgpO2xldCBpPUFycmF5LmlzQXJyYXkoZS5tYXRlcmlhbCk/ZS5tYXRlcmlhbDpbZS5tYXRlcmlhbF07Zm9yKGxldCByIG9mIGkpci5kaXNwb3NlKCl9fXNldFVzZURhcmtNb2RlKHQpe3RoaXMuYmFja2dyb3VuZENvbG9yPXQ/IiMzMDMwMzAiOiIjZmZmIn1jcmVhdGVPclVwZGF0ZUxpbmVPYmplY3QodCxlLGkpe2lmKCF0JiYhaS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOnIsd2lkdGg6b309aTtpZighdCl7bGV0IHU9REcodGhpcy5iYWNrZ3JvdW5kQ29sb3IsaS5jb2xvcixpLm9wYWNpdHk/PzEpLGQ9bmV3IG5yLHA9bmV3IEFwKHtjb2xvcjp1fSksaD1uZXcgVm8oZCxwKTtyZXR1cm4gcC52aXNpYmxlPXIsJGRlKGQsZSxvKSx0aGlzLnNjZW5lLmFkZChoKSx7dHlwZTpwdS5MSU5FLGRhdGE6ZSxvYmozZDpoLHdpZHRoOm99fWxldHtkYXRhOnMsb2JqM2Q6YSx3aWR0aDpsfT10O3JldHVybiBOayh0aGlzLmJhY2tncm91bmRDb2xvcixhLHU9PigobyE9PWx8fCFzfHwhc3VfYXJlUG9seWxpbmVzRXF1YWwocyxlKSkmJiRkZSh1LGUsbyksdSksaSk/e3R5cGU6cHUuTElORSxkYXRhOmUsb2JqM2Q6YSx3aWR0aDpvfTp0fWNyZWF0ZU1lc2godCxlKXtpZighZS52aXNpYmxlKXJldHVybiBudWxsO2xldHt2aXNpYmxlOmksY29sb3I6cixvcGFjaXR5Om99PWUscz1ERyh0aGlzLmJhY2tncm91bmRDb2xvcixyLG8/PzEpLGE9bmV3IEdnKHtjb2xvcjpzLHZpc2libGU6aX0pO3JldHVybiBuZXcgVm8odCxhKX1jcmVhdGVPclVwZGF0ZVRyaWFuZ2xlT2JqZWN0KHQsZSxpKXtsZXR7c2l6ZTpyfT1pLG89cipNYXRoLnNxcnQoMykvMixzPW5ldyBGbG9hdDMyQXJyYXkoW2UueC1yLzIsZS55LW8vMyxlLngrci8yLGUueS1vLzMsZS54LGUueSsyKm8vM10pO2lmKCF0KXtsZXQgbD1uZXcgbnI7SmRlKGwscyk7bGV0IGM9dGhpcy5jcmVhdGVNZXNoKGwsaSk7cmV0dXJuIG51bGw9PT1jP251bGw6KHRoaXMuc2NlbmUuYWRkKGMpLHt0eXBlOnB1LlRSSUFOR0xFLGRhdGE6ZSxvYmozZDpjfSl9cmV0dXJuIE5rKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsbD0+KEpkZShsLHMpLGwpLGkpP3t0eXBlOnB1LlRSSUFOR0xFLGRhdGE6ZSxvYmozZDp0Lm9iajNkfTp0fWNyZWF0ZU9yVXBkYXRlQ2lyY2xlT2JqZWN0KHQsZSxpKXtsZXR7cmFkaXVzOnJ9PWksbz1uZXcgeWIoaS5yYWRpdXMpO2lmKCF0KXtsZXQgYT10aGlzLmNyZWF0ZU1lc2gobyxpKTtyZXR1cm4gbnVsbD09PWE/bnVsbDooYS5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx0aGlzLnNjZW5lLmFkZChhKSx7dHlwZTpwdS5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOmF9KX1yZXR1cm4gTmsodGhpcy5iYWNrZ3JvdW5kQ29sb3IsdC5vYmozZCwoKT0+byxpKT8odC5vYmozZC5wb3NpdGlvbi5zZXQoZS54LGUueSwwKSx7dHlwZTpwdS5DSVJDTEUsZGF0YTp7bG9jOmUscmFkaXVzOnJ9LG9iajNkOnQub2JqM2R9KTp0fWNyZWF0ZU9yVXBkYXRlVHJhcGV6b2lkT2JqZWN0KHQsZSxpLHIpe2lmKGUueSE9PWkueSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5wdXQgZXJyb3I6IHN0YXJ0LnkgIT0gZW5kLnkuIik7bGV0e2FsdGl0dWRlOm99PXIscz0yL01hdGguc3FydCgzKSpvLGE9bmV3IElwKFtuZXcgYXQoZS54LXMvMixlLnktby8yKSxuZXcgYXQoZS54LGUueStvLzIpLG5ldyBhdChpLngsaS55K28vMiksbmV3IGF0KGkueCtzLzIsaS55LW8vMildKTthLmF1dG9DbG9zZT0hMDtsZXQgbD1uZXcgUWcoYSk7aWYoIXQpe2xldCB1PXRoaXMuY3JlYXRlTWVzaChsLHIpO3JldHVybiBudWxsPT09dT9udWxsOih0aGlzLnNjZW5lLmFkZCh1KSx7dHlwZTpwdS5UUkFQRVpPSUQsZGF0YTpbZSxpXSxvYmozZDp1fSl9cmV0dXJuIE5rKHRoaXMuYmFja2dyb3VuZENvbG9yLHQub2JqM2QsKCk9Pmwscik/e3R5cGU6cHUuVFJBUEVaT0lELGRhdGE6W2UsaV0sb2JqM2Q6dC5vYmozZH06dH1mbHVzaCgpe3RoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsdGhpcy5jb29yZGluYXRvci5nZXRDYW1lcmEoKSl9ZGlzcG9zZSgpe3RoaXMucmVuZGVyZXIuZGlzcG9zZSgpfX0odC5jb250YWluZXIsZSx0LmRldmljZVBpeGVsUmF0aW8sdC5jYWxsYmFja3Mub25Db250ZXh0TG9zdCk7YnJlYWt9fXRoaXMucmVuZGVyZXIuc2V0VXNlRGFya01vZGUodC51c2VEYXJrTW9kZSksdGhpcy5zZXJpZXNMaW5lVmlldz1uZXcgVmsoe3JlbmRlcmVyOnRoaXMucmVuZGVyZXIsY29vcmRpbmF0b3I6dGhpcy5jb29yZGluYXRvcixnZXRNZXRhZGF0YU1hcDooKT0+dGhpcy5tZXRhZGF0YU1hcH0pLHRoaXMucmVzaXplKHQuZG9tRGltZW5zaW9uKX1kaXNwb3NlKCl7fXNldFhTY2FsZVR5cGUodCl7dGhpcy5jb29yZGluYXRvci5zZXRYU2NhbGUob3UodCkpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0WVNjYWxlVHlwZSh0KXt0aGlzLmNvb3JkaW5hdG9yLnNldFlTY2FsZShvdSh0KSksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1yZXNpemUodCl7dGhpcy5jb29yZGluYXRvci5zZXREb21Db250YWluZXJSZWN0KHt4OjAseTowLC4uLnR9KSx0aGlzLnJlbmRlcmVyLm9uUmVzaXplKHt4OjAseTowLC4uLnR9KSx0aGlzLnNlcmllc0xpbmVWaWV3LnNldExheW91dFJlY3Qoey4uLnQseDowLHk6MH0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0TWV0YWRhdGEodCl7bGV0IGU9ITE7T2JqZWN0LmVudHJpZXModCkuZm9yRWFjaCgoW2kscl0pPT57bGV0IG89dGhpcy5tZXRhZGF0YU1hcFtpXTsoIW98fHIuY29sb3IhPT1vLmNvbG9yfHxyLnZpc2libGUhPT1vLnZpc2libGV8fHIub3BhY2l0eSE9PW8ub3BhY2l0eSkmJihlPSEwKSx0aGlzLm1ldGFkYXRhTWFwW2ldPXJ9KSxlJiZ0aGlzLnNlcmllc0xpbmVWaWV3Lm1hcmtBc1BhaW50RGlydHkoKSx0aGlzLnNjaGVkdWxlUmVwYWludCgpfXNldFZpZXdCb3godCl7dGhpcy5jb29yZGluYXRvci5zZXRWaWV3Qm94UmVjdCh7eDp0LnhbMF0sd2lkdGg6dC54WzFdLXQueFswXSx5OnQueVswXSxoZWlnaHQ6dC55WzFdLXQueVswXX0pLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2V0RGF0YSh0KXt0aGlzLnNlcmllc0xpbmVWaWV3LnNldERhdGEodCksdGhpcy5zY2hlZHVsZVJlcGFpbnQoKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnJlbmRlcmVyLnNldFVzZURhcmtNb2RlKHQpLHRoaXMuc2VyaWVzTGluZVZpZXcubWFya0FzUGFpbnREaXJ0eSgpLHRoaXMuc2NoZWR1bGVSZXBhaW50KCl9c2NoZWR1bGVSZXBhaW50KCl7dGhpcy5zaG91bGRSZXBhaW50fHwodGhpcy5zaG91bGRSZXBhaW50PSEwLChuPT57c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSgoKT0+e3RoaXMucmVwYWludCgpLHRoaXMuc2hvdWxkUmVwYWludD0hMX0pKX1yZXBhaW50KCl7dGhpcy5zZXJpZXNMaW5lVmlldy5yZW5kZXIoKSx0aGlzLnJlbmRlcmVyLmZsdXNoKCksdGhpcy5jYWxsYmFja3Mub25EcmF3RW5kKCl9fSxEbD0oKCk9PihmdW5jdGlvbihuKXtuW24uU0VSSUVTX0RBVEFfVVBEQVRFRD0wXT0iU0VSSUVTX0RBVEFfVVBEQVRFRCIsbltuLlNFUklFU19NRVRBREFUQV9DSEFOR0VEPTFdPSJTRVJJRVNfTUVUQURBVEFfQ0hBTkdFRCIsbltuLlNDQUxFX1VQREFURUQ9Ml09IlNDQUxFX1VQREFURUQiLG5bbi5WSUVXX0JPWF9VUERBVEVEPTNdPSJWSUVXX0JPWF9VUERBVEVEIixuW24uSU5JVD00XT0iSU5JVCIsbltuLkRPTV9SRVNJWkVEPTVdPSJET01fUkVTSVpFRCIsbltuLkRBUktfTU9ERV9VUERBVEVEPTZdPSJEQVJLX01PREVfVVBEQVRFRCIsbltuLkRJU1BPU0VEPTddPSJESVNQT1NFRCJ9KERsfHwoRGw9e30pKSxEbCkpKCksRGI9KCgpPT4oZnVuY3Rpb24obil7bltuLk9OX1JFRFJBV19FTkQ9MF09Ik9OX1JFRFJBV19FTkQiLG5bbi5PTl9DT05URVhUX0xPU1Q9MV09Ik9OX0NPTlRFWFRfTE9TVCJ9KERifHwoRGI9e30pKSxEYikpKCk7ZnVuY3Rpb24gdHBlKG4pe2lmKG4uaW5jbHVkZXMoIi8iKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiV29ya2VyIGZhY3Rvcnkgb25seSBhbGxvd3MgZmlsZSBuYW1lIGFuZCBubyByZXNvdXJjZSBwYXRoLiIpO3JldHVybiBuZXcgV29ya2VyKG4pfXZhciBKZz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtpZih0aGlzLmNhbGxiYWNrcz10LmNhbGxiYWNrcyx0LnR5cGUhPT1kci5XRUJHTCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgQ2Fubm90IHVzZSBub24gV0VCR0wgcmVuZGVyZXIgZm9yIHRoZSBvZmZzY3JlZW4gbGluZSBjaGFydC4gUmVjZWl2ZWQgJHtkclt0LnR5cGVdfSBgKTtsZXQgZT1uZXcgTWVzc2FnZUNoYW5uZWw7ZS5wb3J0MS5vbm1lc3NhZ2U9bz0+e3RoaXMub25NZXNzYWdlRnJvbVdvcmtlcihvLmRhdGEpfSx0aGlzLnR4TWVzc2FnZVBvcnQ9ZS5wb3J0MTtsZXQgaT10LmNvbnRhaW5lci50cmFuc2ZlckNvbnRyb2xUb09mZnNjcmVlbigpO3RoaXMud29ya2VySW5zdGFuY2U9Smcud29ya2VyUG9vbC5nZXROZXh0KCk7bGV0IHI9e3R5cGU6RGwuSU5JVCxjYW52YXM6aSxkZXZpY2VQaXhlbFJhdGlvOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGRpbTp0LmRvbURpbWVuc2lvbixyZW5kZXJlclR5cGU6dC50eXBlLHVzZURhcmtNb2RlOnQudXNlRGFya01vZGV9O3RoaXMud29ya2VySW5zdGFuY2UucG9zdE1lc3NhZ2UocixbaSxlLnBvcnQyXSl9ZGlzcG9zZSgpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuRElTUE9TRUR9KSx0aGlzLndvcmtlckluc3RhbmNlLmZyZWUoKSx0aGlzLnR4TWVzc2FnZVBvcnQuY2xvc2UoKX1zZXRYU2NhbGVUeXBlKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuU0NBTEVfVVBEQVRFRCxheGlzOiJ4IixzY2FsZVR5cGU6dH0pfXNldFlTY2FsZVR5cGUodCl7dGhpcy5zZW5kTWVzc2FnZSh7dHlwZTpEbC5TQ0FMRV9VUERBVEVELGF4aXM6InkiLHNjYWxlVHlwZTp0fSl9cmVzaXplKHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuRE9NX1JFU0laRUQsZGltOnR9KX1zZXRNZXRhZGF0YSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkRsLlNFUklFU19NRVRBREFUQV9DSEFOR0VELG1ldGFkYXRhOnR9KX1zZXRWaWV3Qm94KHQpe3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuVklFV19CT1hfVVBEQVRFRCxleHRlbnQ6dH0pfXNldERhdGEodCl7bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bi5yZWR1Y2UoKG8scyk9Pm8rcy5wb2ludHMubGVuZ3RoLDApLGU9MCxpPW5ldyBGbG9hdDY0QXJyYXkoMip0KSxyPVtdO2ZvcihsZXQgbyBvZiBuKXtyLnB1c2goe2lkOm8uaWQsbGVuZ3RoOm8ucG9pbnRzLmxlbmd0aH0pO2ZvcihsZXQgcz0wO3M8by5wb2ludHMubGVuZ3RoO3MrKylpW2UrK109by5wb2ludHNbc10ueCxpW2UrK109by5wb2ludHNbc10ueX1yZXR1cm57aWRzQW5kTGVuZ3RoczpyLGZsYXR0ZW5lZFNlcmllczppLmJ1ZmZlcn19KHQpO3RoaXMuc2VuZE1lc3NhZ2Uoe3R5cGU6RGwuU0VSSUVTX0RBVEFfVVBEQVRFRCxjb21wYWN0RGF0YVNlcmllczplfSxbZS5mbGF0dGVuZWRTZXJpZXNdKX1zZXRVc2VEYXJrTW9kZSh0KXt0aGlzLnNlbmRNZXNzYWdlKHt0eXBlOkRsLkRBUktfTU9ERV9VUERBVEVELHVzZURhcmtNb2RlOnR9KX1zZW5kTWVzc2FnZSh0LGUpe2U/dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQsZSk6dGhpcy50eE1lc3NhZ2VQb3J0LnBvc3RNZXNzYWdlKHQpfW9uTWVzc2FnZUZyb21Xb3JrZXIodCl7c3dpdGNoKHQudHlwZSl7Y2FzZSBEYi5PTl9SRURSQVdfRU5EOnRoaXMuY2FsbGJhY2tzLm9uRHJhd0VuZCgpO2JyZWFrO2Nhc2UgRGIuT05fQ09OVEVYVF9MT1NUOnRoaXMuY2FsbGJhY2tzLm9uQ29udGV4dExvc3QoKX19fTtmdW5jdGlvbiBBZChuLHQpe3JldHVybiJ4Ij09PXQ/WzAsbi53aWR0aF06W24uaGVpZ2h0LDBdfWZ1bmN0aW9uIHZFKG4sdCl7bGV0IGU9TWF0aC5mbG9vcihuLzUwKTtyZXR1cm4gTWF0aC5taW4oZSx0KX1mdW5jdGlvbiBQRyhuLHQsZSxpKXtyZXR1cm57bWFqb3I6W10sbWlub3I6bi50aWNrcyhpLGUpLm1hcChvPT4oe3ZhbHVlOm8sdGlja0Zvcm1hdHRlZFN0cmluZzp0LmZvcm1hdFRpY2sobyl9KSl9fUpnLndvcmtlclBvb2w9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZT0xMCxpPXRwZSl7dGhpcy53b3JrZXJSZXNvdXJjZVBhdGg9dCx0aGlzLm1heFBvb2xTaXplPWUsdGhpcy53b3JrZXJGYWN0b3J5PWksdGhpcy53b3JrZXJzPVtdfWdldE5leHQoKXtsZXQgdDtpZih0aGlzLndvcmtlcnMuZXZlcnkoKHthY3RpdmVDb3VudDppfSk9Pmk+MCkmJnRoaXMud29ya2Vycy5sZW5ndGg8dGhpcy5tYXhQb29sU2l6ZSl7bGV0IGk9dGhpcy53b3JrZXJGYWN0b3J5KHRoaXMud29ya2VyUmVzb3VyY2VQYXRoKTt0PXthY3RpdmVDb3VudDowLHBvc3RNZXNzYWdlOihyLG8pPT57aS5wb3N0TWVzc2FnZShyLG8pfSxmcmVlOigpPT57dC5hY3RpdmVDb3VudD1NYXRoLm1heCh0LmFjdGl2ZUNvdW50LTEsMCl9fSx0aGlzLndvcmtlcnMucHVzaCh0KX1lbHNle2xldCBpPXRoaXMud29ya2Vycy5tYXAoKHthY3RpdmVDb3VudDpvfSk9Pm8pLHI9aS5pbmRleE9mKE1hdGgubWluKC4uLmkpKTt0PXRoaXMud29ya2Vyc1tyXX1yZXR1cm4gdC5hY3RpdmVDb3VudCsrLHR9fSgiY2hhcnRfd29ya2VyLmpzP19maWxlX2hhc2g9YzQ0MTc2ODEiKTt2YXIgSUc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKSx5RT17Z2V0U3RhbmRhcmRUaWNrczpQRyxnZXRUaWNrc0ZvclRlbXBvcmFsU2NhbGU6ZnVuY3Rpb24obix0LGUsaSl7bGV0W3Isb109aSxzPW4udGlja3MoaSwyKTtpZihvLXI+PTg2NGU1fHxzLmxlbmd0aD4yKXJldHVybiBQRyhuLHQsZSxpKTtsZXQgYT1uLnRpY2tzKGksZSk7cmV0dXJue21ham9yOnMubWFwKGw9Pih7c3RhcnQ6bCx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0U2hvcnQobCl9KSksbWlub3I6YS5tYXAobD0+KHt2YWx1ZTpsLHRpY2tGb3JtYXR0ZWRTdHJpbmc6dC5mb3JtYXRUaWNrKGwpfSkpfX0sZ2V0VGlja3NGb3JMaW5lYXJTY2FsZTpmdW5jdGlvbihuLHQsZSxpKXtsZXRbcixvXT1pLHM9TWF0aC5hYnMoby1yKTtpZihzPi4wMDEpcmV0dXJuIFBHKG4sdCxlLGkpO2xldCBhPW4udGlja3MoW3Isb10sZSksbD1uLnRpY2tzKFtyLG9dLDIpLGM9W10sdT1mdW5jdGlvbihuKXtsZXQgdD1uLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZS0iLDIpO3JldHVybiAyPT09dC5sZW5ndGg/TnVtYmVyKHRbMV0pLTE6MH0ocyk7czwxJiZsLmV2ZXJ5KGg9PntsZXQgZj1NYXRoLmFicyhoKTtyZXR1cm4gZj49MCYmZjwxfSkmJih1Kz0xKTtsZXQgZD1uZXcgTWFwO2ZvcihsZXQgaCBvZiBsKXtsZXRbZixtPSIiXT1TdHJpbmcoaCkuc3BsaXQoIi4iLDIpLHg9TnVtYmVyKGYrIi4iK20uc2xpY2UoMCx1KSk7ZC5zZXQoeCx7c3RhcnQ6eCx0aWNrRm9ybWF0dGVkU3RyaW5nOjA9PT14PyJcdTIwMTQiOnQuZm9ybWF0UmVhZGFibGUoeCl9KX1sZXQgcD0xMCpNYXRoLnBvdygxMCwtdSk7Zm9yKGxldCBoIG9mIGEpZm9yKGxldCBmIG9mWy4uLmQua2V5cygpXS5yZXZlcnNlKCkpe2xldCBtPWgtZjtpZihtPj0wJiZtPHApe2lmKDA9PT1mKWMucHVzaCh7dmFsdWU6aCx0aWNrRm9ybWF0dGVkU3RyaW5nOnQuZm9ybWF0VGljayhoKX0pO2Vsc2V7bGV0IHg9U3RyaW5nKGgpLnNsaWNlKFN0cmluZyhmKS5sZW5ndGgpO2MucHVzaCh7dmFsdWU6aCx0aWNrRm9ybWF0dGVkU3RyaW5nOmBcdTIwMjYke3h8fCIwIn1gfSl9YnJlYWt9fXJldHVybnttYWpvcjpBcnJheS5mcm9tKGQudmFsdWVzKCkpLG1pbm9yOmN9fSxmaWx0ZXJUaWNrc0J5VmlzaWJpbGl0eTpmdW5jdGlvbihuLHQsZSxpLHI9NSl7aWYoIW4ubGVuZ3RofHwhSUcpcmV0dXJuIG47bGV0IG89IngiPT09ZT8xOi0xLHM9bnVsbDtyZXR1cm4gbi5maWx0ZXIoYT0+e2xldCBsPXQoYSk7SUcuZm9udD1pO2xldCBjPUlHLm1lYXN1cmVUZXh0KGEudGlja0Zvcm1hdHRlZFN0cmluZyksdT0ieCI9PT1lP2Mud2lkdGg6Yy5hY3R1YWxCb3VuZGluZ0JveEFzY2VudC1jLmFjdHVhbEJvdW5kaW5nQm94RGVzY2VudDtyZXR1cm4gbnVsbD09PXM/IShsK28qdTwwfHwocz1sK28qdSwwKSk6IShvKihzK28qci1sKT4wfHwocz1sK28qdSwwKSl9KX19O2Z1bmN0aW9uIGRxZShuLHQpe2lmKDEmbiYmKEluKCksXygwLCJnIiwxNykoMSwidGV4dCIpLEEoMiksdigpLF8oMywidGl0bGUiKSxBKDQpLHYoKSgpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO0MoMSksUHQoImZvbnQiLGkuYXhpc0ZvbnQpLHplKCJ4IixpLnRleHRYUG9zaXRpb24oZS52YWx1ZSkpKCJ5IixpLnRleHRZUG9zaXRpb24oZS52YWx1ZSkpLEMoMSksamUoIiAiLGUudGlja0Zvcm1hdHRlZFN0cmluZywiICIpLEMoMikseXQoaS5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUudmFsdWUpKX19ZnVuY3Rpb24gcHFlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyMCkoMSwic3BhbiIpLEEoMiksdigpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT10LmluZGV4LHI9dC5sYXN0LG89UygyKTtQdCgibGVmdCIsby5nZXRNYWpvclhQb3NpdGlvbihlKSwicHgiKSgid2lkdGgiLG8uZ2V0TWFqb3JXaWR0aFN0cmluZyhlLHIsby5tYWpvclRpY2tzW2krMV0pKSgiYm90dG9tIixvLmdldE1ham9yWVBvc2l0aW9uKGUpLCJweCIpKCJoZWlnaHQiLG8uZ2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxyLG8ubWFqb3JUaWNrc1tpKzFdKSkoImZvbnQiLG8uYXhpc0ZvbnQpLGV0KCJtYWpvci1sYWJlbCIsITApKCJsYXN0IixyKSx5KCJ0aXRsZSIsby5nZXRGb3JtYXR0ZXIoKS5mb3JtYXRMb25nKGUuc3RhcnQpKSxDKDIpLHl0KGUudGlja0Zvcm1hdHRlZFN0cmluZyl9fWZ1bmN0aW9uIGhxZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxOCksRSgxLHBxZSwzLDE2LCJzcGFuIiwxOSksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nRm9yT2YiLGUubWFqb3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5TWFqb3JUaWNrKX19dmFyIG9wZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2U9bmV3IEcsdGhpcy5lZGl0TWVudU9wZW5lZD0hMSx0aGlzLm1ham9yVGlja3M9W10sdGhpcy5taW5vclRpY2tzPVtdfW5nT25DaGFuZ2VzKCl7bGV0IGU9bnVsbCxyPXZFKCJ4Ij09PXRoaXMuYXhpcz90aGlzLmRvbURpbS53aWR0aDp0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy5ncmlkQ291bnQpO2U9dGhpcy5zY2FsZSBpbnN0YW5jZW9mIEVTP3lFLmdldFRpY2tzRm9yTGluZWFyU2NhbGUodGhpcy5zY2FsZSx0aGlzLmdldEZvcm1hdHRlcigpLHIsdGhpcy5heGlzRXh0ZW50KTp0aGlzLnNjYWxlIGluc3RhbmNlb2YgVFM/eUUuZ2V0VGlja3NGb3JUZW1wb3JhbFNjYWxlKHRoaXMuc2NhbGUsdGhpcy5nZXRGb3JtYXR0ZXIoKSxyLHRoaXMuYXhpc0V4dGVudCk6eUUuZ2V0U3RhbmRhcmRUaWNrcyh0aGlzLnNjYWxlLHRoaXMuZ2V0Rm9ybWF0dGVyKCkscix0aGlzLmF4aXNFeHRlbnQpLHRoaXMubWFqb3JUaWNrcz1lLm1ham9yLHRoaXMubWlub3JUaWNrcz15RS5maWx0ZXJUaWNrc0J5VmlzaWJpbGl0eShlLm1pbm9yLG89PnRoaXMuZ2V0RG9tUG9zKG8udmFsdWUpLHRoaXMuYXhpcywiMTFweCBSb2JvdG8sIHNhbnMtc2VyaWYiKX1nZXRGb3JtYXR0ZXIoKXtyZXR1cm4gdGhpcy5jdXN0b21Gb3JtYXR0ZXI/P3RoaXMuc2NhbGUuZGVmYXVsdEZvcm1hdHRlcn10cmFja0J5TWlub3JUaWNrKGUpe3JldHVybiBlLnZhbHVlfXRyYWNrQnlNYWpvclRpY2soZSl7cmV0dXJuIGUuc3RhcnR9Z2V0RG9tUG9zKGUpe3JldHVybiB0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5heGlzRXh0ZW50LEFkKHRoaXMuZG9tRGltLHRoaXMuYXhpcyksZSl9dGV4dFhQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKToiMTAwJSJ9dGV4dFlQb3NpdGlvbihlKXtyZXR1cm4ieCI9PT10aGlzLmF4aXM/IiI6U3RyaW5nKHRoaXMuZ2V0RG9tUG9zKGUpKX1nZXRNYWpvclhQb3NpdGlvbihlKXtyZXR1cm4ieSI9PT10aGlzLmF4aXM/MDpNYXRoLm1pbih0aGlzLmRvbURpbS53aWR0aCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JXaWR0aFN0cmluZyhlLGkscil7cmV0dXJuInkiPT09dGhpcy5heGlzPyIiOihpfHwhcj90aGlzLmRvbURpbS53aWR0aDp0aGlzLmdldE1ham9yWFBvc2l0aW9uKHIpKS10aGlzLmdldE1ham9yWFBvc2l0aW9uKGUpKyJweCJ9Z2V0TWFqb3JZUG9zaXRpb24oZSl7cmV0dXJuIngiPT09dGhpcy5heGlzPzA6dGhpcy5kb21EaW0uaGVpZ2h0LU1hdGgubWluKHRoaXMuZG9tRGltLmhlaWdodCxNYXRoLm1heCgwLHRoaXMuZ2V0RG9tUG9zKGUuc3RhcnQpKSl9Z2V0TWFqb3JIZWlnaHRTdHJpbmcoZSxpLHIpe3JldHVybiJ4Ij09PXRoaXMuYXhpcz8iIjooaXx8IXI/dGhpcy5kb21EaW0uaGVpZ2h0OnRoaXMuZ2V0TWFqb3JZUG9zaXRpb24ocikpLXRoaXMuZ2V0TWFqb3JZUG9zaXRpb24oZSkrInB4In1rZXlkb3duUHJldmVudENsb3NlKGUpeyJFc2NhcGUiIT09ZS5rZXkmJmUuc3RvcFByb3BhZ2F0aW9uKCl9ZXh0ZW50Q2hhbmdlZChlLGkpe2xldCByPU51bWJlcihlKSxvPU51bWJlcihpKTtpZihvPHIpe2xldCBzPXI7cj1vLG89c30hTnVtYmVyLmlzRmluaXRlKHIpfHwhTnVtYmVyLmlzRmluaXRlKG8pfHx0aGlzLm9uVmlld0V4dGVudENoYW5nZS5lbWl0KFtyLG9dKX1vbkF4aXNVcGRhdGVNZW51T3BlbihlLGkscil7ZS52YWx1ZT1TdHJpbmcoclswXSksaS52YWx1ZT1TdHJpbmcoclsxXSksZS5mb2N1cygpfXNldEVkaXRNZW51T3BlbmVkKGUpe3RoaXMuZWRpdE1lbnVPcGVuZWQ9ZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1heGlzIl1dLGlucHV0czp7YXhpc0V4dGVudDoiYXhpc0V4dGVudCIsYXhpczoiYXhpcyIsc2NhbGU6InNjYWxlIixncmlkQ291bnQ6ImdyaWRDb3VudCIsZG9tRGltOiJkb21EaW0iLGN1c3RvbUZvcm1hdHRlcjoiY3VzdG9tRm9ybWF0dGVyIn0sb3V0cHV0czp7b25WaWV3RXh0ZW50Q2hhbmdlOiJvblZpZXdFeHRlbnRDaGFuZ2UifSxmZWF0dXJlczpbRnRdLGRlY2xzOjI2LHZhcnM6MTMsY29uc3RzOltbMSwibGluZSJdLFsxLCJtaW5vciJdLFsxLCJ0aWNrcyJdLFsiY2xhc3MiLCJtaW5vci10aWNrLWxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ2xpY2sgdG8gbWFudWFsbHkgc2V0IG1pbiAmIG1heCB2YWx1ZXMiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwibWVudU9wZW5lZCIsIm1lbnVDbG9zZWQiXSxbIm1hdE1lbnVUcmlnZ2VyIiwibWF0TWVudVRyaWdnZXIiXSxbInN2Z0ljb24iLCJlZGl0XzI0cHgiXSxbImNsYXNzIiwibWFqb3IgdGlja3MiLDQsIm5nSWYiXSxbInhQb3NpdGlvbiIsImJlZm9yZSIsMywieVBvc2l0aW9uIl0sWyJtYW51YWxDb250cm9sIiwibWF0TWVudSJdLFsxLCJleHRlbnQtZWRpdC1pbnB1dCIsMywiY2xpY2siLCJrZXlkb3duIl0sWyJ0eXBlIiwibnVtYmVyIiwzLCJ2YWx1ZSJdLFsibWluSW5wdXQiLCIiXSxbIm1heElucHV0IiwiIl0sWzEsImV4dGVudC1lZGl0LWNvbnRyb2wiLDMsImtleWRvd24iXSxbIm1hdC1yYWlzZWQtYnV0dG9uIiwiIiwiY29sb3IiLCJwcmltYXJ5IiwxLCJleHRlbnQtZWRpdC1jaGFuZ2UiLDMsImNsaWNrIl0sWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLDEsImV4dGVudC1lZGl0LWNhbmNlbCIsMywiY2xpY2siXSxbMSwibWlub3ItdGljay1sYWJlbCJdLFsxLCJtYWpvciIsInRpY2tzIl0sWzMsIm1ham9yLWxhYmVsIiwibGFzdCIsImxlZnQiLCJ3aWR0aCIsImJvdHRvbSIsImhlaWdodCIsImZvbnQiLCJ0aXRsZSIsNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzMsInRpdGxlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlKXtsZXQgcj1QZSgpO18oMCwiZGl2IiksTygxLCJkaXYiLDApLF8oMiwiZGl2IiwxKSxJbigpLF8oMywic3ZnIiwyKSxFKDQsZHFlLDUsNiwiZyIsMyksdigpLEpzKCksXyg1LCJidXR0b24iLDQsNSksUCgibWVudU9wZW5lZCIsZnVuY3Rpb24oKXtvZShyKTtsZXQgcz0kZSgxNSksYT0kZSgyMCk7cmV0dXJuIGkub25BeGlzVXBkYXRlTWVudU9wZW4ocyxhLGkuYXhpc0V4dGVudCksc2UoaS5zZXRFZGl0TWVudU9wZW5lZCghMCkpfSkoIm1lbnVDbG9zZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2V0RWRpdE1lbnVPcGVuZWQoITEpfSksTyg3LCJtYXQtaWNvbiIsNiksdigpKCksRSg4LGhxZSwyLDIsImRpdiIsNyksdigpLF8oOSwibWF0LW1lbnUiLDgsOSkoMTEsImRpdiIsMTApLFAoImNsaWNrIixmdW5jdGlvbihzKXtyZXR1cm4gcy5zdG9wUHJvcGFnYXRpb24oKX0pKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksXygxMiwibGFiZWwiKSxBKDEzLCJtaW4iKSx2KCksTygxNCwiaW5wdXQiLDExLDEyKSx2KCksXygxNiwiZGl2IiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKHMpe3JldHVybiBzLnN0b3BQcm9wYWdhdGlvbigpfSkoImtleWRvd24iLGZ1bmN0aW9uKHMpe3JldHVybiBpLmtleWRvd25QcmV2ZW50Q2xvc2Uocyl9KSxfKDE3LCJsYWJlbCIpLEEoMTgsIm1heCIpLHYoKSxPKDE5LCJpbnB1dCIsMTEsMTMpLHYoKSxfKDIxLCJkaXYiLDE0KSxQKCJrZXlkb3duIixmdW5jdGlvbihzKXtyZXR1cm4gaS5rZXlkb3duUHJldmVudENsb3NlKHMpfSksXygyMiwiYnV0dG9uIiwxNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2Uocik7bGV0IHM9JGUoMTUpLGE9JGUoMjApLGw9JGUoNik7cmV0dXJuIGkuZXh0ZW50Q2hhbmdlZChzLnZhbHVlLGEudmFsdWUpLHNlKGwuY2xvc2VNZW51KCkpfSksQSgyMywiIENoYW5nZSAiKSx2KCksXygyNCwiYnV0dG9uIiwxNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKHIpLHNlKCRlKDYpLmNsb3NlTWVudSgpKX0pLEEoMjUsIiBDYW5jZWwgIiksdigpKCkoKX1pZigyJmUpe2xldCByPSRlKDEwKTtEYShpLmF4aXMrIi1heGlzIGF4aXMiKSxDKDQpLHkoIm5nRm9yT2YiLGkubWlub3JUaWNrcykoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5TWlub3JUaWNrKSxDKDEpLGV0KCJleHRlbnQtZWRpdC1idXR0b24iLCEwKSgiZXh0ZW50LWVkaXQtbWVudS1vcGVuZWQiLGkuZWRpdE1lbnVPcGVuZWQpLHkoIm1hdE1lbnVUcmlnZ2VyRm9yIixyKSxDKDMpLHkoIm5nSWYiLGkubWFqb3JUaWNrcy5sZW5ndGgpLEMoMSkseSgieVBvc2l0aW9uIiwieSI9PT1pLmF4aXM/ImFib3ZlIjoiYmVsb3ciKSxDKDUpLHkoInZhbHVlIixpLmF4aXNFeHRlbnRbMF0pLEMoNSkseSgidmFsdWUiLGkuYXhpc0V4dGVudFsxXSl9fSxkZXBlbmRlbmNpZXM6W2RuLEJlLF9uLEd0LGhkLGZkXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW59Lm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZmlsbDpjdXJyZW50Q29sb3I7Zm9udC1zaXplOjExcHg7dXNlci1zZWxlY3Q6bm9uZX0uYXhpc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Lm1ham9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1pbm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMDtvdmVyZmxvdzpoaWRkZW59LmxpbmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2FhYTtmbGV4OjAgMCAxcHg7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9LnRpY2tzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjNweH0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOnRleHQtYmVmb3JlLWVkZ2U7dGV4dC1hbmNob3I6bWlkZGxlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tzW19uZ2NvbnRlbnQtJUNPTVAlXXstd2Via2l0LW1hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSk7bWFzay1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5saW5lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDo1cHh9LnktYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTpjZW50cmFsO3RleHQtYW5jaG9yOmVuZH0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrc1tfbmdjb250ZW50LSVDT01QJV17LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKTttYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMCwgMCwgMCwgMCkgMCUsICMwMDAgMTAlLCAjMDAwIDkwJSwgcmdiYSgwLCAwLCAwLCAwKSAxMDAlKX0uZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Zm9udC1zaXplOjA7aGVpZ2h0OjI0cHg7bGluZS1oZWlnaHQ6MjRweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHg7dG9wOjVweDt2aXNpYmlsaXR5OmhpZGRlbjt3aWR0aDoyNHB4fS5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7bGluZS1oZWlnaHQ6MTZweH0uZXh0ZW50LWVkaXQtaW5wdXRbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtjb2x1bW4tZ2FwOjVweDtkaXNwbGF5OmdyaWQ7Zm9udC1zaXplOjEycHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjMwcHggbWlubWF4KGF1dG8sIDEwMHB4KTtoZWlnaHQ6MzBweDttYXJnaW46MTBweCAyMHB4fS5leHRlbnQtZWRpdC1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1zdHlsZTpzb2xpZDtjb2xvcjppbmhlcml0fS5leHRlbnQtZWRpdC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46MTBweCAyMHB4fS5leHRlbnQtZWRpdC1jb250cm9sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MS40O21hcmdpbi1sZWZ0OjVweDtwYWRkaW5nOjAgMTBweH0uYXhpc1tfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICAuZXh0ZW50LWVkaXQtYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmF4aXNbX25nY29udGVudC0lQ09NUCVdOmZvY3VzLXdpdGhpbiAgIC5leHRlbnQtZWRpdC1idXR0b25bX25nY29udGVudC0lQ09NUCVdLCAuZXh0ZW50LWVkaXQtbWVudS1vcGVuZWRbX25nY29udGVudC0lQ09NUCVde3Zpc2liaWxpdHk6dmlzaWJsZX0ubWFqb3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbjtjb250YWluOnN0cmljdH0ubWFqb3JbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7d2hpdGUtc3BhY2U6bm93cmFwfS5tYWpvcltfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjOWU5ZTllO3BhZGRpbmc6MCA1cHh9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAubWFqb3ItbGFiZWwubGFzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOWU5ZTllO2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4IDA7d2lkdGg6MTAwJX0ueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWpvci1sYWJlbC5sYXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjOWU5ZTllfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLm1ham9yLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTt0cmFuc2Zvcm0tb3JpZ2luOmNlbnRlcn0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIGJFKG4sdCl7bGV0IGU9TWF0aC5taW4oaXUobi5tYXAoKHt4Om99KT0+byksdCksbi5sZW5ndGgtMSksaT1NYXRoLm1heCgwLGUtMSk7cmV0dXJuIE1hdGguYWJzKG5baV0ueC10KS1NYXRoLmFicyhuW2VdLngtdCk8PTA/aTplfWZ1bmN0aW9uIHNwZShuLHQsZSxpLHIsbyl7bGV0IHM7c3dpdGNoKG4uZGVsdGFNb2RlKXtjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX1BJWEVMOnM9MTticmVhaztjYXNlIFdoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU6cz04O2JyZWFrO2Nhc2UgV2hlZWxFdmVudC5ET01fREVMVEFfUEFHRTpzPTIwO2JyZWFrO2RlZmF1bHQ6cz0xLGNvbnNvbGUud2FybihgVW5rbm93biBXaGVlbEV2ZW50IGRlbHRhTW9kZTogJHtuLmRlbHRhTW9kZX0uYCl9bGV0IGE9bi5kZWx0YVkqcyxsPWE8MD9NYXRoLm1heChhKmksLS45NSk6YSppLHt3aWR0aDpjLGhlaWdodDp1fT1lLGQ9W3IucmV2ZXJzZSh0LngsWzAsY10sLW4ub2Zmc2V0WCpsKSxyLnJldmVyc2UodC54LFswLGNdLGMrKGMtbi5vZmZzZXRYKSpsKV0scD1bby5yZXZlcnNlKHQueSxbdSwwXSwtbi5vZmZzZXRZKmwpLG8ucmV2ZXJzZSh0LnksW3UsMF0sdSsodS1uLm9mZnNldFkpKmwpXTtyZXR1cm57eDpkWzFdPGRbMF0/W2RbMV0sZFswXV06ZCx5OnBbMV08cFswXT9bcFsxXSxwWzBdXTpwfX12YXIgZ3FlPVsiZG90cyJdO2Z1bmN0aW9uIF9xZShuLHQpe2lmKDEmbiYmKEluKCksTygwLCJjaXJjbGUiLDEyKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0LGk9UygyKTt6ZSgiY3giLGkuZ2V0RG9tWChlLmRhdGFQb2ludC54KSkoImN5IixpLmdldERvbVkoZS5kYXRhUG9pbnQueSkpKCJmaWxsIixlLm1ldGFkYXRhLmNvbG9yKX19ZnVuY3Rpb24gdnFlKG4sdCl7aWYoMSZuJiYoSW4oKSxzbigwKSxFKDEsX3FlLDEsMywiY2lyY2xlIiwxMSksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7QygxKSx5KCJuZ0lmIixpLnNob3VsZFJlbmRlclRvb2x0aXBQb2ludChlLmRhdGFQb2ludCkpfX1mdW5jdGlvbiB5cWUobix0KXtpZigxJm4mJihJbigpLHNuKDApLEUoMSx2cWUsMiwxLCJuZy1jb250YWluZXIiLDEwKSxhbigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nRm9yT2YiLGUuY3Vyc29yZWREYXRhKSgibmdGb3JUcmFja0J5IixlLnRyYWNrQnlTZXJpZXNOYW1lKX19ZnVuY3Rpb24gYnFlKG4sdCl7aWYoMSZuJiYoSW4oKSxPKDAsInJlY3QiLDEzKSksMiZuKXtsZXQgZT1TKCk7emUoIngiLGUuem9vbUJveEluVWlDb29yZGluYXRlLngpKCJ3aWR0aCIsZS56b29tQm94SW5VaUNvb3JkaW5hdGUud2lkdGgpKCJ5IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS55KSgiaGVpZ2h0IixlLnpvb21Cb3hJblVpQ29vcmRpbmF0ZS5oZWlnaHQpfX12YXIgeHFlPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm57ZGF0YTpuLGN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ6dCxjdXJzb3JMb2NhdGlvbjplfX07ZnVuY3Rpb24gQ3FlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE0KSxOaSgxLDE1KSx2KCkpLDImbil7bGV0IGU9UygpLGk9JGUoMTEpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS50b29sdGlwVGVtcGxhdGU/ZS50b29sdGlwVGVtcGxhdGU6aSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixaeCgyLHhxZSxlLmN1cnNvcmVkRGF0YSxlLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQsZS5jdXJzb3JMb2NhdGlvbikpfX1mdW5jdGlvbiBNcWUobix0KXtpZigxJm4mJihzbigwKSxfKDEsInRyIiwxNykoMiwidGQiLDE4KSxPKDMsInNwYW4iKSx2KCksXyg0LCJ0ZCIsMTkpLEEoNSksdigpLF8oNiwidGQiKSxBKDcpLHYoKSxfKDgsInRkIiksQSg5KSx2KCkoKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O0MoMyksUHQoImJhY2tncm91bmQtY29sb3IiLGUubWV0YWRhdGEuY29sb3IpLEMoMikseXQoZS5tZXRhZGF0YS5kaXNwbGF5TmFtZSksQygyKSx5dChlLmRhdGFQb2ludC55KSxDKDIpLHl0KGUuZGF0YVBvaW50LngpfX1mdW5jdGlvbiB3cWUobix0KXtpZigxJm4mJihfKDAsInRhYmxlIikoMSwidGhlYWQiKSgyLCJ0ciIpLE8oMywidGgiLDE2KSxfKDQsInRoIiksQSg1LCJOYW1lIiksdigpLF8oNiwidGgiKSxBKDcsIlkiKSx2KCksXyg4LCJ0aCIpLEEoOSwiWCIpLHYoKSgpKCksXygxMCwidGJvZHkiKSxFKDExLE1xZSwxMCw1LCJuZy1jb250YWluZXIiLDEwKSx2KCkoKSksMiZuKXtsZXQgZT10LmRhdGEsaT1TKCk7QygxMSkseSgibmdGb3JPZiIsZSkoIm5nRm9yVHJhY2tCeSIsaS50cmFja0J5U2VyaWVzTmFtZSl9fWZ1bmN0aW9uIEVxZShuKXtyZXR1cm4gbi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX12YXIgYXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5zY3JvbGxTdHJhdGVneT1pLHRoaXMub25WaWV3RXh0ZW50Q2hhbmdlPW5ldyBHLHRoaXMub25WaWV3RXh0ZW50UmVzZXQ9bmV3IEcsdGhpcy5vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2U9bmV3IEcsdGhpcy5JbnRlcmFjdGlvblN0YXRlPUdyLHRoaXMuc3RhdGU9bmV3IGhyKEdyLk5PTkUpLHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9ITEsdGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6MCx3aWR0aDowLGhlaWdodDowLHk6MH0sdGhpcy50b29sdGlwUG9zaXRpb25zPVt7b2Zmc2V0WTo1LG9yaWdpblg6InN0YXJ0IixvdmVybGF5WDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVk6InRvcCJ9LHtvZmZzZXRZOjUsb3JpZ2luWDoiZW5kIixvdmVybGF5WDoiZW5kIixvcmlnaW5ZOiJib3R0b20iLG92ZXJsYXlZOiJ0b3AifSx7b2Zmc2V0WTotMTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFk6LTE1LG9yaWdpblg6ImVuZCIsb3ZlcmxheVg6ImVuZCIsb3JpZ2luWToidG9wIixvdmVybGF5WToiYm90dG9tIn0se29mZnNldFg6NSxvcmlnaW5YOiJlbmQiLG92ZXJsYXlYOiJzdGFydCIsb3JpZ2luWToidG9wIixvdmVybGF5WToidG9wIn0se29mZnNldFg6LTUsb3JpZ2luWDoic3RhcnQiLG92ZXJsYXlYOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVk6InRvcCJ9XSx0aGlzLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ9bnVsbCx0aGlzLmN1cnNvckxvY2F0aW9uPW51bGwsdGhpcy5jdXJzb3JlZERhdGE9W10sdGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExLHRoaXMuc2hvd1pvb21JbnN0cnVjdGlvbj0hMSx0aGlzLmRyYWdTdGFydENvb3JkPW51bGwsdGhpcy5pc0N1cnNvckluc2lkZT0hMSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlLnN1YnNjcmliZShlPT57dGhpcy5vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UuZW1pdChlKX0pKSx0aGlzLm5nVW5zdWJzY3JpYmUucGlwZShMKCgpPT57dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goZT0+ZS51bnN1YnNjcmliZSgpKX0pKSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwiZGJsY2xpY2siLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm9uVmlld0V4dGVudFJlc2V0LmVtaXQoKSx0aGlzLnN0YXRlLm5leHQoR3IuTk9ORSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLF9pKHdpbmRvdywia2V5ZG93biIse3Bhc3NpdmU6ITB9KS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5zaG91bGRQYW4oZSk7aSE9PXRoaXMuc3BlY2lhbEtleVByZXNzZWQmJih0aGlzLnNwZWNpYWxLZXlQcmVzc2VkPWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxfaSh3aW5kb3csImtleXVwIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9PntsZXQgaT10aGlzLnNob3VsZFBhbihlKTtpIT09dGhpcy5zcGVjaWFsS2V5UHJlc3NlZCYmKHRoaXMuc3BlY2lhbEtleVByZXNzZWQ9aSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pLF9pKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZWRvd24iLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e2xldCBpPXRoaXMuc3RhdGUuZ2V0VmFsdWUoKSxyPXRoaXMuc2hvdWxkUGFuKGUpP0dyLlBBTk5JTkc6R3IuRFJBR19aT09NSU5HO2k9PT1Hci5OT05FJiZyPT09R3IuRFJBR19aT09NSU5HJiYodGhpcy5kcmFnU3RhcnRDb29yZD17eDplLm9mZnNldFgseTplLm9mZnNldFl9LHRoaXMuem9vbUJveEluVWlDb29yZGluYXRlPXt4OmUub2Zmc2V0WCx3aWR0aDowLHk6ZS5vZmZzZXRZLGhlaWdodDowfSksaSE9PXImJih0aGlzLnN0YXRlLm5leHQociksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2V1cCIse3Bhc3NpdmU6ITB9KS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57bGV0IGk9KGUuYnV0dG9ucyZDbC5MRUZUKT09PUNsLkxFRlQ7dGhpcy5kcmFnU3RhcnRDb29yZD1udWxsO2xldCByPXRoaXMuem9vbUJveEluVWlDb29yZGluYXRlO2lmKCFpJiZ0aGlzLnN0YXRlLmdldFZhbHVlKCk9PT1Hci5EUkFHX1pPT01JTkcmJnIud2lkdGg+MCYmci5oZWlnaHQ+MCl7bGV0IG89dGhpcy5nZXREYXRhWChyLngpLHM9dGhpcy5nZXREYXRhWChyLngrci53aWR0aCksYT10aGlzLmdldERhdGFZKHIueStyLmhlaWdodCksbD10aGlzLmdldERhdGFZKHIueSk7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDp7eDpbbyxzXSx5OlthLGxdfX0pfXRoaXMuc3RhdGUuZ2V0VmFsdWUoKSE9PUdyLk5PTkUmJih0aGlzLnN0YXRlLm5leHQoR3IuTk9ORSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9KSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2VlbnRlciIse3Bhc3NpdmU6ITB9KS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZShlPT57dGhpcy5pc0N1cnNvckluc2lkZT0hMCx0aGlzLnVwZGF0ZVRvb2x0aXAoZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKX0pLF9pKHRoaXMuZG90c0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCJtb3VzZWxlYXZlIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9Pnt0aGlzLmRyYWdTdGFydENvb3JkPW51bGwsdGhpcy5pc0N1cnNvckluc2lkZT0hMSx0aGlzLnVwZGF0ZVRvb2x0aXAoZSksdGhpcy5zdGF0ZS5uZXh0KEdyLk5PTkUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9KSxfaSh0aGlzLmRvdHNDb250YWluZXIubmF0aXZlRWxlbWVudCwibW91c2Vtb3ZlIix7cGFzc2l2ZTohMH0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKGU9Pntzd2l0Y2godGhpcy5zdGF0ZS5nZXRWYWx1ZSgpKXtjYXNlIEdyLlNDUk9MTF9aT09NSU5HOnRoaXMuc3RhdGUubmV4dChHci5OT05FKSx0aGlzLnVwZGF0ZVRvb2x0aXAoZSksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTticmVhaztjYXNlIEdyLk5PTkU6dGhpcy51cGRhdGVUb29sdGlwKGUpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7YnJlYWs7Y2FzZSBHci5QQU5OSU5HOntsZXQgaT0tZS5tb3ZlbWVudFgscj0tZS5tb3ZlbWVudFkse3dpZHRoOm8saGVpZ2h0OnN9PXRoaXMuZG9tRGltLGE9dGhpcy5nZXREYXRhWChpKSxsPXRoaXMuZ2V0RGF0YVgobytpKSxjPXRoaXMuZ2V0RGF0YVkocytyKSx1PXRoaXMuZ2V0RGF0YVkocik7dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDp7eDpbYSxsXSx5OltjLHVdfX0pO2JyZWFrfWNhc2UgR3IuRFJBR19aT09NSU5HOntpZighdGhpcy5kcmFnU3RhcnRDb29yZClicmVhaztsZXQgaT1bdGhpcy5kcmFnU3RhcnRDb29yZC54LGUub2Zmc2V0WF0scj1bdGhpcy5kcmFnU3RhcnRDb29yZC55LGUub2Zmc2V0WV07dGhpcy56b29tQm94SW5VaUNvb3JkaW5hdGU9e3g6TWF0aC5taW4oLi4uaSksd2lkdGg6TWF0aC5tYXgoLi4uaSktTWF0aC5taW4oLi4uaSkseTpNYXRoLm1pbiguLi5yKSxoZWlnaHQ6TWF0aC5tYXgoLi4uciktTWF0aC5taW4oLi4ucil9fXRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9fSksX2kodGhpcy5kb3RzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIndoZWVsIix7cGFzc2l2ZTohMX0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSx1aShlPT57bGV0IGk9IWUuY3RybEtleSYmIWUuc2hpZnRLZXkmJmUuYWx0S2V5O3JldHVybiB0aGlzLnNob3dab29tSW5zdHJ1Y3Rpb249IWksdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSxpPyhlLnByZXZlbnREZWZhdWx0KCksWHQoZSkpOkthKDNlMykucGlwZShrdCgoKT0+e3RoaXMuc2hvd1pvb21JbnN0cnVjdGlvbj0hMSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpfSksTCgoKT0+bnVsbCkpfSksWWUoZT0+Qm9vbGVhbihlKSkpLnN1YnNjcmliZShlPT57dGhpcy5vblZpZXdFeHRlbnRDaGFuZ2UuZW1pdCh7ZGF0YUV4dGVudDpzcGUoZSx0aGlzLnZpZXdFeHRlbnQsdGhpcy5kb21EaW0sLjAxLHRoaXMueFNjYWxlLHRoaXMueVNjYWxlKX0pLHRoaXMuc3RhdGUuZ2V0VmFsdWUoKSE9PUdyLlNDUk9MTF9aT09NSU5HJiYodGhpcy5zdGF0ZS5uZXh0KEdyLlNDUk9MTF9aT09NSU5HKSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpKX0pfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVDdXJzb3JlZERhdGFBbmRUb29sdGlwVmlzaWJpbGl0eSgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1zaG91bGRQYW4oZSl7bGV0IGk9ZS5zaGlmdEtleXx8ZS5hbHRLZXk7aWYoZSBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpcmV0dXJuIGk7bGV0IHI9KGUuYnV0dG9ucyZDbC5MRUZUKT09PUNsLkxFRlQsbz0oZS5idXR0b25zJkNsLk1JRERMRSk9PT1DbC5NSURETEU7cmV0dXJuISghciYmIW8pJiYobyYmIXJ8fGkpfXRyYWNrQnlTZXJpZXNOYW1lKGUsaSl7cmV0dXJuIGkuaWR9Z2V0RG9tWChlKXtyZXR1cm4gdGhpcy54U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueCxBZCh0aGlzLmRvbURpbSwieCIpLGUpfWdldERhdGFYKGUpe3JldHVybiB0aGlzLnhTY2FsZS5yZXZlcnNlKHRoaXMudmlld0V4dGVudC54LEFkKHRoaXMuZG9tRGltLCJ4IiksZSl9Z2V0RG9tWShlKXtyZXR1cm4gdGhpcy55U2NhbGUuZm9yd2FyZCh0aGlzLnZpZXdFeHRlbnQueSxBZCh0aGlzLmRvbURpbSwieSIpLGUpfWdldERhdGFZKGUpe3JldHVybiB0aGlzLnlTY2FsZS5yZXZlcnNlKHRoaXMudmlld0V4dGVudC55LEFkKHRoaXMuZG9tRGltLCJ5IiksZSl9c2hvdWxkUmVuZGVyVG9vbHRpcFBvaW50KGUpe3JldHVybiBudWxsIT09ZSYmIWlzTmFOKGUueCkmJiFpc05hTihlLnkpfXVwZGF0ZVRvb2x0aXAoZSl7dGhpcy5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkPXt4OnRoaXMuZ2V0RGF0YVgoZS5vZmZzZXRYKSx5OnRoaXMuZ2V0RGF0YVkoZS5vZmZzZXRZKX0sdGhpcy5jdXJzb3JMb2NhdGlvbj17eDplLm9mZnNldFgseTplLm9mZnNldFl9LHRoaXMudXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKX1vblRvb2x0aXBEaXNwbGF5RGV0YWNoZWQoKXt0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9ITF9dXBkYXRlQ3Vyc29yZWREYXRhQW5kVG9vbHRpcFZpc2liaWxpdHkoKXtsZXQgZT10aGlzLmN1cnNvckxvY2F0aW9uSW5EYXRhQ29vcmQ7aWYobnVsbD09PWUpcmV0dXJuIHRoaXMuY3Vyc29yZWREYXRhPVtdLHZvaWQodGhpcy50b29sdGlwRGlzcGxheUF0dGFjaGVkPSExKTt0aGlzLmN1cnNvcmVkRGF0YT10aGlzLmlzQ3Vyc29ySW5zaWRlP3RoaXMuc2VyaWVzRGF0YS5tYXAoaT0+KHtzZXJpZXNEYXR1bTppLG1ldGFkYXRhOnRoaXMuc2VyaWVzTWV0YWRhdGFNYXBbaS5pZF19KSkuZmlsdGVyKCh7bWV0YWRhdGE6aX0pPT5pJiZpLnZpc2libGUmJiFCb29sZWFuKGkuYXV4KSkubWFwKCh7c2VyaWVzRGF0dW06aSxtZXRhZGF0YTpyfSk9PntsZXQgbz1iRShpLnBvaW50cyxlLngpLHM9aS5wb2ludHNbb107cmV0dXJue2lkOmkuaWQsY2xvc2VzdFBvaW50SW5kZXg6byxkYXRhUG9pbnQ6cyxkb21Qb2ludDp7eDp0aGlzLmdldERvbVgocy54KSx5OnRoaXMuZ2V0RG9tWShzLnkpfSxtZXRhZGF0YTpyfX0pLmZpbHRlcihpPT5pKTpbXSx0aGlzLnRvb2x0aXBEaXNwbGF5QXR0YWNoZWQ9Qm9vbGVhbih0aGlzLmN1cnNvcmVkRGF0YS5sZW5ndGgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKG5nKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KGdxZSw3LFJlKSxvdChSaCw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5kb3RzQ29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLm92ZXJsYXk9ci5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoInNob3ctem9vbS1pbnN0cnVjdGlvbiIsaS5zaG93Wm9vbUluc3RydWN0aW9uKX0saW5wdXRzOntzZXJpZXNEYXRhOiJzZXJpZXNEYXRhIixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHZpZXdFeHRlbnQ6InZpZXdFeHRlbnQiLHhTY2FsZToieFNjYWxlIix5U2NhbGU6InlTY2FsZSIsZG9tRGltOiJkb21EaW0iLHRvb2x0aXBPcmlnaW5FbDoidG9vbHRpcE9yaWdpbkVsIix0b29sdGlwVGVtcGxhdGU6InRvb2x0aXBUZW1wbGF0ZSJ9LG91dHB1dHM6e29uVmlld0V4dGVudENoYW5nZToib25WaWV3RXh0ZW50Q2hhbmdlIixvblZpZXdFeHRlbnRSZXNldDoib25WaWV3RXh0ZW50UmVzZXQiLG9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZToib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIn0sZmVhdHVyZXM6WyR0KFt7cHJvdmlkZTpuZyx1c2VGYWN0b3J5OkVxZSxkZXBzOlt0cl19XSksRnRdLGRlY2xzOjEyLHZhcnM6MTUsY29uc3RzOltbMSwiZG90cyJdLFsiZG90cyIsIiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsInpvb20tYm94Iiw0LCJuZ0lmIl0sWzEsInpvb20taW5zdHJ1Y3Rpb24iXSxbMSwiaW5zdHJ1Y3Rpb24tY29udGVudCJdLFsiY2RrT3ZlcmxheU9yaWdpbiIsIiIsMSwidG9vbHRpcC1vcmlnaW4iXSxbInRvb2x0aXBPcmlnaW4iLCJjZGtPdmVybGF5T3JpZ2luIl0sWyJjZGtDb25uZWN0ZWRPdmVybGF5IiwiIiwzLCJjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luIiwiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIiwiY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5IiwiY2RrQ29ubmVjdGVkT3ZlcmxheUxvY2tQb3NpdGlvbiIsImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCJjZGtDb25uZWN0ZWRPdmVybGF5R3Jvd0FmdGVyT3BlbiIsImRldGFjaCJdLFsiZGVmYXVsdFRvb2x0aXAiLCIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWyJyIiwiNCIsNCwibmdJZiJdLFsiciIsIjQiXSxbMSwiem9vbS1ib3giXSxbMSwidG9vbHRpcC1jb250YWluZXIiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWzEsImNpcmNsZS1oZWFkZXIiXSxbMSwidG9vbHRpcC1yb3ciXSxbMSwidG9vbHRpcC1yb3ctY2lyY2xlIl0sWzEsIm5hbWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihJbigpLF8oMCwic3ZnIiwwLDEpLEUoMix5cWUsMiwyLCJuZy1jb250YWluZXIiLDIpLEUoMyxicWUsMSw0LCJyZWN0IiwzKSx2KCksSnMoKSxfKDQsImRpdiIsNCkoNSwic3BhbiIsNSksQSg2LCJBbHQgKyBTY3JvbGwgdG8gWm9vbSIpLHYoKSgpLE8oNywiZGl2Iiw2LDcpLEUoOSxDcWUsMiw2LCJuZy10ZW1wbGF0ZSIsOCksUCgiZGV0YWNoIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG9vbHRpcERpc3BsYXlEZXRhY2hlZCgpfSksRSgxMCx3cWUsMTIsMiwibmctdGVtcGxhdGUiLG51bGwsOSxxdCkpLDImZSYmKGV0KCJwYW5uYWJsZSIsaS5zcGVjaWFsS2V5UHJlc3NlZCkoImRyYWdnYWJsZSIsaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkV8fGkuc3RhdGUuZ2V0VmFsdWUoKT09PWkuSW50ZXJhY3Rpb25TdGF0ZS5EUkFHX1pPT01JTkcpKCJwYW5uaW5nIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuUEFOTklORyksQygyKSx5KCJuZ0lmIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuTk9ORSksQygxKSx5KCJuZ0lmIixpLnN0YXRlLmdldFZhbHVlKCk9PT1pLkludGVyYWN0aW9uU3RhdGUuRFJBR19aT09NSU5HKSxDKDYpLHkoImNka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW4iLGkudG9vbHRpcE9yaWdpbkVsKSgiY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW4iLGkudG9vbHRpcERpc3BsYXlBdHRhY2hlZCYmaS5zdGF0ZS5nZXRWYWx1ZSgpPT09aS5JbnRlcmFjdGlvblN0YXRlLk5PTkUpKCJjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zIixpLnRvb2x0aXBQb3NpdGlvbnMpKCJjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3kiLGkuc2Nyb2xsU3RyYXRlZ3kpKCJjZGtDb25uZWN0ZWRPdmVybGF5TG9ja1Bvc2l0aW9uIiwhMSkoImNka0Nvbm5lY3RlZE92ZXJsYXlGbGV4aWJsZURpbWVuc2lvbnMiLCEwKSgiY2RrQ29ubmVjdGVkT3ZlcmxheUdyb3dBZnRlck9wZW4iLCEwKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsb3MsUmgsaWddLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlO3VzZXItc2VsZWN0Om5vbmV9LmRvdHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmRvdHMuZHJhZ2dhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6Y3Jvc3NoYWlyfS5kb3RzLnBhbm5hYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6Z3JhYn0uZG90cy5wYW5uaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6Z3JhYmJpbmd9LnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNik7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcC1vcmlnaW5bX25nY29udGVudC0lQ09NUCVde2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfS50b29sdGlwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC44NSk7Ym9yZGVyLXJhZGl1czo0cHg7Y29sb3I6I2ZmZjtjb250YWluOnBhaW50IHN0eWxlIGxheW91dDtmb250LXNpemU6LjllbTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6NXB4O3BvaW50ZXItZXZlbnRzOm5vbmU7d2lkdGg6MTAwJX10aFtfbmdjb250ZW50LSVDT01QJV0sIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCA1cHg7dGV4dC1hbGlnbjpsZWZ0fXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo1MDA7cGFkZGluZy1ib3R0b206NXB4fS56b29tLWJveFtfbmdjb250ZW50LSVDT01QJV17ZmlsbC1vcGFjaXR5Oi4wMztmaWxsOiMwMDA7c3Ryb2tlOiNjY2N9Lnpvb20taW5zdHJ1Y3Rpb25bX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsZWZ0OjA7b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MTBweDt0cmFuc2l0aW9uOm9wYWNpdHkgLjVzO3otaW5kZXg6MX0uaW5zdHJ1Y3Rpb24tY29udGVudFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC42KTtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojZmZmO3BhZGRpbmc6NXB4IDEwcHg7dXNlci1zZWxlY3Q6bm9uZX0uc2hvdy16b29tLWluc3RydWN0aW9uW19uZ2hvc3QtJUNPTVAlXSAgIC56b29tLWluc3RydWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBEcWUobix0KXtpZigxJm4mJihJbigpLE8oMCwibGluZSIsMikpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7ZXQoInplcm8iLDA9PT1lKSx6ZSgieDEiLGkuZ2V0RG9tWChlKSkoIngyIixpLmdldERvbVgoZSkpKCJ5MiIsaS5kb21EaW0uaGVpZ2h0KX19ZnVuY3Rpb24gQXFlKG4sdCl7aWYoMSZuJiYoSW4oKSxPKDAsImxpbmUiLDMpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO2V0KCJ6ZXJvIiwwPT09ZSksemUoInkxIixpLmdldERvbVkoZSkpKCJ4MiIsaS5kb21EaW0ud2lkdGgpKCJ5MiIsaS5nZXREb21ZKGUpKX19dmFyIGxwZT0oKCk9PntjbGFzcyBue2dldERvbVgoZSl7cmV0dXJuIHRoaXMueFNjYWxlLmZvcndhcmQodGhpcy52aWV3RXh0ZW50LngsQWQodGhpcy5kb21EaW0sIngiKSxlKX1nZXREb21ZKGUpe3JldHVybiB0aGlzLnlTY2FsZS5mb3J3YXJkKHRoaXMudmlld0V4dGVudC55LEFkKHRoaXMuZG9tRGltLCJ5IiksZSl9Z2V0WFRpY2tzKCl7cmV0dXJuIHRoaXMueFNjYWxlLnRpY2tzKHRoaXMudmlld0V4dGVudC54LHZFKHRoaXMuZG9tRGltLndpZHRoLHRoaXMueEdyaWRDb3VudCkpfWdldFlUaWNrcygpe3JldHVybiB0aGlzLnlTY2FsZS50aWNrcyh0aGlzLnZpZXdFeHRlbnQueSx2RSh0aGlzLmRvbURpbS5oZWlnaHQsdGhpcy55R3JpZENvdW50KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQtZ3JpZC12aWV3Il1dLGlucHV0czp7dmlld0V4dGVudDoidmlld0V4dGVudCIseFNjYWxlOiJ4U2NhbGUiLHhHcmlkQ291bnQ6InhHcmlkQ291bnQiLHlTY2FsZToieVNjYWxlIix5R3JpZENvdW50OiJ5R3JpZENvdW50Iixkb21EaW06ImRvbURpbSJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJ5MSIsIjAiLDMsInplcm8iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsieDEiLCIwIiwzLCJ6ZXJvIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInkxIiwiMCJdLFsieDEiLCIwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoSW4oKSxfKDAsInN2ZyIpLEUoMSxEcWUsMSw1LCJsaW5lIiwwKSxFKDIsQXFlLDEsNSwibGluZSIsMSksdigpKSwyJmUmJihDKDEpLHkoIm5nRm9yT2YiLGkuZ2V0WFRpY2tzKCkpLEMoMSkseSgibmdGb3JPZiIsaS5nZXRZVGlja3MoKSkpfSxkZXBlbmRlbmNpZXM6W2RuXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgc3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSB7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIGxpbmVbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgc3Ryb2tlOiAjY2NjO1xuICAgICAgICBzdHJva2Utd2lkdGg6IDFweDtcbiAgICAgIH1cblxuICAgICAgLnplcm9bX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgc3Ryb2tlOiAjYWFhO1xuICAgICAgICBzdHJva2Utd2lkdGg6IDEuNXB4O1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHFlPVsic2VyaWVzVmlldyJdLFJxZT1bInhBeGlzIl0sT3FlPVsieUF4aXMiXSxrcWU9WyJjaGFydEVsIl07ZnVuY3Rpb24gRnFlKG4sdCl7aWYoMSZuJiZPKDAsImxpbmUtY2hhcnQtZ3JpZC12aWV3IiwxNiksMiZuKXtsZXQgZT1TKCk7eSgidmlld0V4dGVudCIsZS52aWV3Qm94KSgieFNjYWxlIixlLnhTY2FsZSkoInlTY2FsZSIsZS55U2NhbGUpKCJ4R3JpZENvdW50IixlLlhfR1JJRF9DT1VOVCkoInlHcmlkQ291bnQiLGUuWV9HUklEX0NPVU5UKSgiZG9tRGltIixlLmRvbURpbWVuc2lvbnMubWFpbil9fWZ1bmN0aW9uIE5xZShuLHQpezEmbiYmKEluKCksTygwLCJzdmciLG51bGwsMTcpKX1mdW5jdGlvbiBMcWUobix0KXsxJm4mJk8oMCwiY2FudmFzIixudWxsLDE3KX1mdW5jdGlvbiBCcWUobix0KXtpZigxJm4mJihzbigwKSxFKDEsTnFlLDIsMCwic3ZnIiw1KSxFKDIsTHFlLDIsMCwiY2FudmFzIiw1KSxhbigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nSWYiLGUuZ2V0UmVuZGVyZXJUeXBlKCk9PT1lLlJlbmRlcmVyVHlwZS5TVkcpLEMoMSkseSgibmdJZiIsZS5nZXRSZW5kZXJlclR5cGUoKT09PWUuUmVuZGVyZXJUeXBlLldFQkdMKX19ZnVuY3Rpb24gVnFlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3IiwxOCksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uVmlld0JveENoYW5nZWQocikpfSkoIm9uVmlld0V4dGVudFJlc2V0IixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkudmlld0JveFJlc2V0KCkpfSkoIm9uSW50ZXJhY3Rpb25TdGF0ZUNoYW5nZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UocikpfSksdigpfWlmKDImbil7bGV0IGU9UygpLGk9JGUoMSk7eSgic2VyaWVzRGF0YSIsZS5zZXJpZXNEYXRhKSgic2VyaWVzTWV0YWRhdGFNYXAiLGUuc2VyaWVzTWV0YWRhdGFNYXApKCJ2aWV3RXh0ZW50IixlLnZpZXdCb3gpKCJ4U2NhbGUiLGUueFNjYWxlKSgieVNjYWxlIixlLnlTY2FsZSkoInRvb2x0aXBPcmlnaW5FbCIsaSkoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLm1haW4pKCJ0b29sdGlwVGVtcGxhdGUiLGUudG9vbHRpcFRlbXBsYXRlKX19dmFyIEhxZT1mdW5jdGlvbihuLHQsZSxpKXtyZXR1cm57eFNjYWxlOm4seVNjYWxlOnQsZG9tRGltZW5zaW9uOmUsdmlld0V4dGVudDppfX07ZnVuY3Rpb24gVXFlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE5KSxOaSgxLDIwKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS5jdXN0b21WaXNUZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixLMygyLEhxZSxlLnhTY2FsZSxlLnlTY2FsZSxlLmRvbURpbWVuc2lvbnMubWFpbixlLnZpZXdCb3gpKX19ZnVuY3Rpb24genFlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibGluZS1jaGFydC1heGlzIiwyMSksUCgib25WaWV3RXh0ZW50Q2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uVmlld0JveENoYW5nZWRGcm9tQXhpcyhyLCJ5IikpfSksdigpfWlmKDImbil7bGV0IGU9UygpO3koImF4aXNFeHRlbnQiLGUudmlld0JveC55KSgiY3VzdG9tRm9ybWF0dGVyIixlLmN1c3RvbVlGb3JtYXR0ZXIpKCJkb21EaW0iLGUuZG9tRGltZW5zaW9ucy55QXhpcykoImdyaWRDb3VudCIsZS5ZX0dSSURfQ09VTlQpKCJzY2FsZSIsZS55U2NhbGUpfX1mdW5jdGlvbiBqcWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJsaW5lLWNoYXJ0LWF4aXMiLDIyKSxQKCJvblZpZXdFeHRlbnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKHIsIngiKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiYXhpc0V4dGVudCIsZS52aWV3Qm94LngpKCJjdXN0b21Gb3JtYXR0ZXIiLGUuY3VzdG9tWEZvcm1hdHRlcikoImRvbURpbSIsZS5kb21EaW1lbnNpb25zLnhBeGlzKSgiZ3JpZENvdW50IixlLlhfR1JJRF9DT1VOVCkoInNjYWxlIixlLnhTY2FsZSl9fWZ1bmN0aW9uIEdxZShuLHQpezEmbiYmKF8oMCwiZGl2IiwyMyksTygxLCJzcGFuIiwyNCksdigpKX12YXIgV3FlPWZ1bmN0aW9uKG4sdCxlLGkscil7cmV0dXJue3hTY2FsZTpuLHlTY2FsZTp0LGRvbURpbWVuc2lvbjplLHZpZXdFeHRlbnQ6aSxpbnRlcmFjdGlvblN0YXRlOnJ9fTtmdW5jdGlvbiBxcWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMjUsMjYpLE5pKDIsMjApLHYoKSksMiZuKXtsZXQgZT1TKCk7QygyKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlLmN1c3RvbUNoYXJ0T3ZlcmxheVRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFozKDIsV3FlLGUueFNjYWxlLGUueVNjYWxlLGUuZG9tRGltZW5zaW9ucy5tYWluLGUudmlld0JveCxlLmludGVyYWN0aW9uU3RhdGUpKX19dmFyIFlxZT1mdW5jdGlvbihuLHQpe3JldHVybntjb250YWluZXI6ITAsImRhcmstbW9kZSI6biwibGluZS1vbmx5LW1vZGUiOnQsImxpbmUtY2hhcnQiOiEwfX0sUkc9e3g6WzAsMV0seTpbMCwxXX0sams9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmNoYW5nZURldGVjdG9yPWUsdGhpcy5SZW5kZXJlclR5cGU9ZHIsdGhpcy51c2VEYXJrTW9kZT0hMSx0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZT1kci5XRUJHTCx0aGlzLnhTY2FsZVR5cGU9TnIuTElORUFSLHRoaXMueVNjYWxlVHlwZT1Oci5MSU5FQVIsdGhpcy5saW5lT25seT0hMSx0aGlzLnZpZXdCb3hDaGFuZ2VkPW5ldyBHLHRoaXMub25WaWV3Qm94T3ZlcnJpZGRlbj1uZXcgTGYoMSksdGhpcy5pZ25vcmVZT3V0bGllcnM9ITEsdGhpcy5ZX0dSSURfQ09VTlQ9Nix0aGlzLlhfR1JJRF9DT1VOVD0xMCx0aGlzLnhTY2FsZT1vdSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMueVNjYWxlPW91KHRoaXMueFNjYWxlVHlwZSksdGhpcy52aWV3Qm94PVJHLHRoaXMuZG9tRGltZW5zaW9ucz17bWFpbjp7d2lkdGg6MCxoZWlnaHQ6MH0seEF4aXM6e3dpZHRoOjAsaGVpZ2h0OjB9LHlBeGlzOnt3aWR0aDowLGhlaWdodDowfX0sdGhpcy5zaG93Q2hhcnRSZW5kZXJlckVsZW1lbnQ9ITAsdGhpcy5pbnRlcmFjdGlvblN0YXRlPUdyLk5PTkUsdGhpcy5saW5lQ2hhcnQ9bnVsbCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITEsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMSx0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZD0hMSx0aGlzLmlzVmlld0JveE92ZXJyaWRkZW49ITEsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuc2NhbGVVcGRhdGVkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMX1uZ09uSW5pdCgpe3RoaXMub25WaWV3Qm94T3ZlcnJpZGRlbi5uZXh0KHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbil9bmdPbkNoYW5nZXMoZSl7ZS54U2NhbGVUeXBlJiYodGhpcy54U2NhbGU9b3UodGhpcy54U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS55U2NhbGVUeXBlJiYodGhpcy55U2NhbGU9b3UodGhpcy55U2NhbGVUeXBlKSx0aGlzLnNjYWxlVXBkYXRlZD0hMCksZS5zZXJpZXNEYXRhJiYodGhpcy5pc0RhdGFVcGRhdGVkPSEwKSxlLmZpeGVkVmlld0JveCYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSEwKSxlLnNlcmllc01ldGFkYXRhTWFwJiYodGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCksZS51c2VEYXJrTW9kZSYmKHRoaXMudXNlRGFya01vZGVVcGRhdGVkPSEwKSx0aGlzLnNjYWxlVXBkYXRlZCYmdGhpcy5zZXRJc1ZpZXdCb3hPdmVycmlkZGVuKCExKSx0aGlzLmlzVmlld0JveENoYW5nZWQ9dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkfHx0aGlzLnNjYWxlVXBkYXRlZHx8IXRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbiYmdGhpcy5zaG91bGRVcGRhdGVEZWZhdWx0Vmlld0JveChlKSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy51cGRhdGVMaW5lQ2hhcnQoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKX1yZWNvdmVyUmVuZGVyZXJJZk5lZWRlZCgpeyF0aGlzLmlzUmVuZGVyaW5nQ29udGV4dExvc3R8fHRoaXMuZGlzYWJsZVVwZGF0ZXx8KHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSExLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2hvd0NoYXJ0UmVuZGVyZXJFbGVtZW50PSEwLHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuaW5pdGlhbGl6ZUNoYXJ0KCksdGhpcy5zY2FsZVVwZGF0ZWQ9ITAsdGhpcy5pc01ldGFkYXRhVXBkYXRlZD0hMCx0aGlzLmlzRGF0YVVwZGF0ZWQ9ITAsdGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITAsdGhpcy5pc0ZpeGVkVmlld0JveFVwZGF0ZWQ9ITAsdGhpcy5pc1ZpZXdCb3hDaGFuZ2VkPSEwLHRoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMSl9b25WaWV3UmVzaXplKCl7IXRoaXMubGluZUNoYXJ0fHwodGhpcy5yZWFkQW5kVXBkYXRlRG9tRGltZW5zaW9ucygpLHRoaXMubGluZUNoYXJ0LnJlc2l6ZSh0aGlzLmRvbURpbWVuc2lvbnMubWFpbiksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfXNob3VsZFVwZGF0ZURlZmF1bHRWaWV3Qm94KGUpe2lmKGUueFNjYWxlVHlwZXx8ZS55U2NhbGVUeXBlfHxlLmlnbm9yZVlPdXRsaWVyc3x8ZS5zZXJpZXNEYXRhKXJldHVybiEwO2xldCByPWUuc2VyaWVzTWV0YWRhdGFNYXA7aWYocil7bGV0IG89ci5wcmV2aW91c1ZhbHVlO2lmKE9iamVjdC5rZXlzKHRoaXMuc2VyaWVzTWV0YWRhdGFNYXApLmxlbmd0aCE9PU9iamVjdC5rZXlzKG8/P3t9KS5sZW5ndGgpcmV0dXJuITA7Zm9yKGxldFtzLGFdb2YgT2JqZWN0LmVudHJpZXModGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpe2xldCBsPW8mJm9bc107aWYoIWx8fGEudmlzaWJsZSE9PWwudmlzaWJsZSlyZXR1cm4hMH19cmV0dXJuITF9b25Db250ZXh0TG9zdCgpe3RoaXMuaXNSZW5kZXJpbmdDb250ZXh0TG9zdD0hMCx0aGlzLmxpbmVDaGFydCYmKHRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKSx0aGlzLmxpbmVDaGFydD1udWxsKX10cmlnZ2VyQ29udGV4dExvc3RGb3JUZXN0KCl7dGhpcy5vbkNvbnRleHRMb3N0KCl9Z2V0TGluZUNoYXJ0Rm9yVGVzdCgpe3JldHVybiB0aGlzLmxpbmVDaGFydH1pbml0aWFsaXplQ2hhcnQoKXt0aGlzLmxpbmVDaGFydCYmdGhpcy5saW5lQ2hhcnQuZGlzcG9zZSgpO2xldCBlPXRoaXMuZ2V0UmVuZGVyZXJUeXBlKCksaT17b25EcmF3RW5kOigpPT57fSxvbkNvbnRleHRMb3N0OnRoaXMub25Db250ZXh0TG9zdC5iaW5kKHRoaXMpfSxyPW51bGw7c3dpdGNoKHRoaXMucmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKSxlKXtjYXNlIGRyLlNWRzpyPXt0eXBlOmRyLlNWRyxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsY2FsbGJhY2tzOmksZG9tRGltZW5zaW9uOnRoaXMuZG9tRGltZW5zaW9ucy5tYWluLHVzZURhcmtNb2RlOnRoaXMudXNlRGFya01vZGV9O2JyZWFrO2Nhc2UgZHIuV0VCR0w6cj17dHlwZTpkci5XRUJHTCxjb250YWluZXI6dGhpcy5jaGFydEVsLm5hdGl2ZUVsZW1lbnQsZGV2aWNlUGl4ZWxSYXRpbzp3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxjYWxsYmFja3M6aSxkb21EaW1lbnNpb246dGhpcy5kb21EaW1lbnNpb25zLm1haW4sdXNlRGFya01vZGU6dGhpcy51c2VEYXJrTW9kZX07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYDxsaW5lLWNoYXJ0PiBkb2VzIG5vdCB5ZXQgc3VwcG9ydCByZW5kZXJlclR5cGU6ICR7ZX1gKX1sZXQgcz1lIT09ZHIuU1ZHJiZzdV9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpP0pnOlVrO3RoaXMubGluZUNoYXJ0PW5ldyBzKHIpfW5nT25EZXN0cm95KCl7dGhpcy5saW5lQ2hhcnQmJnRoaXMubGluZUNoYXJ0LmRpc3Bvc2UoKX1nZXRSZW5kZXJlclR5cGUoKXtyZXR1cm4gZnVuY3Rpb24obil7c3dpdGNoKG4pe2Nhc2UgZHIuU1ZHOnJldHVybiBkci5TVkc7Y2FzZSBkci5XRUJHTDpyZXR1cm4gc3VfaXNXZWJHbDJTdXBwb3J0ZWQoKT9kci5XRUJHTDpkci5TVkc7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVuZGVyZXJUeXBlOiAke259YCl9fSh0aGlzLnByZWZlcnJlZFJlbmRlcmVyVHlwZSl9cmVhZEFuZFVwZGF0ZURvbURpbWVuc2lvbnMoKXt0aGlzLmRvbURpbWVuc2lvbnM9e21haW46e3dpZHRoOnRoaXMuc2VyaWVzVmlldy5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLGhlaWdodDp0aGlzLnNlcmllc1ZpZXcubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHhBeGlzOnt3aWR0aDp0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueEF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9LHlBeGlzOnt3aWR0aDp0aGlzLnlBeGlzLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgsaGVpZ2h0OnRoaXMueUF4aXMubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHR9fX11cGRhdGVMaW5lQ2hhcnQoKXtpZih0aGlzLnJlY292ZXJSZW5kZXJlcklmTmVlZGVkKCksdGhpcy5saW5lQ2hhcnQmJiF0aGlzLmRpc2FibGVVcGRhdGUpe2lmKHRoaXMuc2NhbGVVcGRhdGVkJiYodGhpcy5zY2FsZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0WFNjYWxlVHlwZSh0aGlzLnhTY2FsZVR5cGUpLHRoaXMubGluZUNoYXJ0LnNldFlTY2FsZVR5cGUodGhpcy55U2NhbGVUeXBlKSksdGhpcy5pc01ldGFkYXRhVXBkYXRlZCYmKHRoaXMuaXNNZXRhZGF0YVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0TWV0YWRhdGEodGhpcy5zZXJpZXNNZXRhZGF0YU1hcCkpLHRoaXMuaXNEYXRhVXBkYXRlZCYmKHRoaXMuaXNEYXRhVXBkYXRlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXREYXRhKHRoaXMuc2VyaWVzRGF0YSkpLHRoaXMudXNlRGFya01vZGVVcGRhdGVkJiYodGhpcy51c2VEYXJrTW9kZVVwZGF0ZWQ9ITEsdGhpcy5saW5lQ2hhcnQuc2V0VXNlRGFya01vZGUodGhpcy51c2VEYXJrTW9kZSkpLCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuZml4ZWRWaWV3Qm94KXRoaXMudmlld0JveD10aGlzLmZpeGVkVmlld0JveDtlbHNlIGlmKCF0aGlzLmlzVmlld0JveE92ZXJyaWRkZW4mJnRoaXMuaXNWaWV3Qm94Q2hhbmdlZCl7bGV0IGk9ZnVuY3Rpb24obix0LGUsaSxyKXtsZXQgbz1udWxsLHM9bnVsbCxhPVtdO2ZvcihsZXR7aWQ6ZCxwb2ludHM6cH1vZiBuKXtsZXQgaD10W2RdO2lmKGgmJiFoLmF1eCYmaC52aXNpYmxlKWZvcihsZXQgZj0wO2Y8cC5sZW5ndGg7ZisrKXtsZXR7eDptLHk6eH09cFtmXTtpKG0pJiYobz1udWxsPT09b3x8bTxvP206byxzPW51bGw9PT1zfHxtPnM/bTpzKSxyKHgpJiZhLnB1c2goeCl9fWEuc29ydCh1Yyk7bGV0IGM9YVswXSx1PWFbYS5sZW5ndGgtMV07cmV0dXJuIGUmJmEubGVuZ3RoPjImJihjPWFbTWF0aC5jZWlsKC4wNSooYS5sZW5ndGgtMSkpXSx1PWFbTWF0aC5mbG9vciguOTUqKGEubGVuZ3RoLTEpKV0pLHt4Om51bGwhPT1vJiZudWxsIT09cz9bbyxzXTp2b2lkIDAseTp2b2lkIDAhPT1jJiZ2b2lkIDAhPT11P1tjLHVdOnZvaWQgMH19KHRoaXMuc2VyaWVzRGF0YSx0aGlzLnNlcmllc01ldGFkYXRhTWFwLHRoaXMuaWdub3JlWU91dGxpZXJzLHRoaXMueFNjYWxlLmlzU2FmZU51bWJlcix0aGlzLnlTY2FsZS5pc1NhZmVOdW1iZXIpO3RoaXMudmlld0JveD17eDp0aGlzLnhTY2FsZS5uaWNlRG9tYWluKGkueD8/UkcueCkseTp0aGlzLnlTY2FsZS5uaWNlRG9tYWluKGkueT8/UkcueSl9fSh0aGlzLmlzRml4ZWRWaWV3Qm94VXBkYXRlZHx8dGhpcy5pc1ZpZXdCb3hDaGFuZ2VkKSYmKHRoaXMuaXNGaXhlZFZpZXdCb3hVcGRhdGVkPSExLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMSx0aGlzLmxpbmVDaGFydC5zZXRWaWV3Qm94KHRoaXMudmlld0JveCksdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCkpfX1vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OmV9KXt0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITApLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnZpZXdCb3g9ZSx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpLHRoaXMudmlld0JveENoYW5nZWQuZW1pdChlKX12aWV3Qm94UmVzZXQoKXt0aGlzLnNldElzVmlld0JveE92ZXJyaWRkZW4oITEpLHRoaXMuaXNWaWV3Qm94Q2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUxpbmVDaGFydCgpLHRoaXMudmlld0JveENoYW5nZWQuZW1pdCh0aGlzLnZpZXdCb3gpfXNldElzVmlld0JveE92ZXJyaWRkZW4oZSl7bGV0IGk9dGhpcy5pc1ZpZXdCb3hPdmVycmlkZGVuO3RoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj1lLGkhPT1lJiZ0aGlzLm9uVmlld0JveE92ZXJyaWRkZW4ubmV4dChlKX1vbkludGVyYWN0aW9uU3RhdGVDaGFuZ2UoZSl7dGhpcy5pbnRlcmFjdGlvblN0YXRlPWV9Z2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpe3JldHVybiB0aGlzLm9uVmlld0JveE92ZXJyaWRkZW59b25WaWV3Qm94Q2hhbmdlZEZyb21BeGlzKGUsaSl7bGV0IHI9ey4uLnRoaXMudmlld0JveCxbaV06ZX07dGhpcy5vblZpZXdCb3hDaGFuZ2VkKHtkYXRhRXh0ZW50OnJ9KX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShubikpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImxpbmUtY2hhcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoUHFlLDcsUmUpLG90KFJxZSw3LFJlKSxvdChPcWUsNyxSZSksb3Qoa3FlLDUsUmUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnNlcmllc1ZpZXc9ci5maXJzdCksTmUocj1MZSgpKSYmKGkueEF4aXM9ci5maXJzdCksTmUocj1MZSgpKSYmKGkueUF4aXM9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuY2hhcnRFbD1yLmZpcnN0KX19LGlucHV0czp7Y3VzdG9tVmlzVGVtcGxhdGU6ImN1c3RvbVZpc1RlbXBsYXRlIixjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZToiY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUiLHVzZURhcmtNb2RlOiJ1c2VEYXJrTW9kZSIscHJlZmVycmVkUmVuZGVyZXJUeXBlOiJwcmVmZXJyZWRSZW5kZXJlclR5cGUiLHNlcmllc0RhdGE6InNlcmllc0RhdGEiLGZpeGVkVmlld0JveDoiZml4ZWRWaWV3Qm94IixzZXJpZXNNZXRhZGF0YU1hcDoic2VyaWVzTWV0YWRhdGFNYXAiLHhTY2FsZVR5cGU6InhTY2FsZVR5cGUiLHlTY2FsZVR5cGU6InlTY2FsZVR5cGUiLGN1c3RvbVhGb3JtYXR0ZXI6ImN1c3RvbVhGb3JtYXR0ZXIiLGN1c3RvbVlGb3JtYXR0ZXI6ImN1c3RvbVlGb3JtYXR0ZXIiLHRvb2x0aXBUZW1wbGF0ZToidG9vbHRpcFRlbXBsYXRlIixsaW5lT25seToibGluZU9ubHkiLGRpc2FibGVVcGRhdGU6ImRpc2FibGVVcGRhdGUiLGlnbm9yZVlPdXRsaWVyczoiaWdub3JlWU91dGxpZXJzIn0sb3V0cHV0czp7dmlld0JveENoYW5nZWQ6InZpZXdCb3hDaGFuZ2VkIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxNix2YXJzOjEzLGNvbnN0czpbWyJkZXRlY3RSZXNpemUiLCIiLCJjZGtPdmVybGF5T3JpZ2luIiwiIiwzLCJuZ0NsYXNzIiwicmVzaXplRXZlbnREZWJvdW5jZVBlcmlvZEluTXMiLCJvblJlc2l6ZSJdLFsib3ZlcmxheVRhcmdldCIsImNka092ZXJsYXlPcmlnaW4iXSxbMSwic2VyaWVzLXZpZXciXSxbInNlcmllc1ZpZXciLCIiXSxbMywidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInhHcmlkQ291bnQiLCJ5R3JpZENvdW50IiwiZG9tRGltIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImN1c3RvbS12aXMiLDQsIm5nSWYiXSxbMSwieS1heGlzIl0sWyJ5QXhpcyIsIiJdLFsiYXhpcyIsInkiLDMsImF4aXNFeHRlbnQiLCJjdXN0b21Gb3JtYXR0ZXIiLCJkb21EaW0iLCJncmlkQ291bnQiLCJzY2FsZSIsIm9uVmlld0V4dGVudENoYW5nZSIsNCwibmdJZiJdLFsxLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRvdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjdXN0b20tdmlzIGN1c3RvbS1jaGFydC1vdmVybGF5LXZpcyIsNCwibmdJZiJdLFszLCJ2aWV3RXh0ZW50IiwieFNjYWxlIiwieVNjYWxlIiwieEdyaWRDb3VudCIsInlHcmlkQ291bnQiLCJkb21EaW0iXSxbImNoYXJ0RWwiLCIiXSxbMywic2VyaWVzRGF0YSIsInNlcmllc01ldGFkYXRhTWFwIiwidmlld0V4dGVudCIsInhTY2FsZSIsInlTY2FsZSIsInRvb2x0aXBPcmlnaW5FbCIsImRvbURpbSIsInRvb2x0aXBUZW1wbGF0ZSIsIm9uVmlld0V4dGVudENoYW5nZSIsIm9uVmlld0V4dGVudFJlc2V0Iiwib25JbnRlcmFjdGlvblN0YXRlQ2hhbmdlIl0sWzEsImN1c3RvbS12aXMiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJheGlzIiwieSIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWyJheGlzIiwieCIsMywiYXhpc0V4dGVudCIsImN1c3RvbUZvcm1hdHRlciIsImRvbURpbSIsImdyaWRDb3VudCIsInNjYWxlIiwib25WaWV3RXh0ZW50Q2hhbmdlIl0sWzEsImRvdCJdLFsxLCJyZWN0Il0sWzEsImN1c3RvbS12aXMiLCJjdXN0b20tY2hhcnQtb3ZlcmxheS12aXMiXSxbImN1c3RvbUNoYXJ0T3ZlcmxheSIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwLDEpLFAoIm9uUmVzaXplIixmdW5jdGlvbigpe3JldHVybiBpLm9uVmlld1Jlc2l6ZSgpfSksXygyLCJkaXYiLDIsMyksRSg0LEZxZSwxLDYsImxpbmUtY2hhcnQtZ3JpZC12aWV3Iiw0KSxFKDUsQnFlLDMsMiwibmctY29udGFpbmVyIiw1KSxFKDYsVnFlLDEsOCwibGluZS1jaGFydC1pbnRlcmFjdGl2ZS12aWV3Iiw2KSxFKDcsVXFlLDIsNywiZGl2Iiw3KSx2KCksXyg4LCJkaXYiLDgsOSksRSgxMCx6cWUsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEwKSx2KCksXygxMSwiZGl2IiwxMSwxMiksRSgxMyxqcWUsMSw1LCJsaW5lLWNoYXJ0LWF4aXMiLDEzKSx2KCksRSgxNCxHcWUsMiwwLCJkaXYiLDE0KSxFKDE1LHFxZSwzLDgsImRpdiIsMTUpLHYoKSksMiZlJiYoeSgibmdDbGFzcyIsUXIoMTAsWXFlLGkudXNlRGFya01vZGUsaS5saW5lT25seSkpKCJyZXNpemVFdmVudERlYm91bmNlUGVyaW9kSW5NcyIsMCksQyg0KSx5KCJuZ0lmIiwhaS5saW5lT25seSksQygxKSx5KCJuZ0lmIixpLnNob3dDaGFydFJlbmRlcmVyRWxlbWVudCksQygxKSx5KCJuZ0lmIiwhaS5saW5lT25seSksQygxKSx5KCJuZ0lmIixpLmN1c3RvbVZpc1RlbXBsYXRlKSxDKDMpLHkoIm5nSWYiLCFpLmxpbmVPbmx5KSxDKDMpLHkoIm5nSWYiLCFpLmxpbmVPbmx5KSxDKDEpLHkoIm5nSWYiLCFpLmxpbmVPbmx5KSxDKDEpLHkoIm5nSWYiLGkuY3VzdG9tQ2hhcnRPdmVybGF5VGVtcGxhdGUpKX0sZGVwZW5kZW5jaWVzOltGbixCZSxvcyxpZyxvcGUsYXBlLGxwZSxoZ10sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OmlubGluZS1ibG9ja31bX25naG9zdC0lQ09NUCVdICAgICAubGluZS1jaGFydDpoYXMoLmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYTpob3ZlcikgLngtYXhpcyAuZXh0ZW50LWVkaXQtYnV0dG9ue3Zpc2liaWxpdHk6dmlzaWJsZX1bX25naG9zdC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDppbmhlcml0O2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MTAwJTtncmlkLXRlbXBsYXRlLWFyZWFzOiJ5YXhpcyBzZXJpZXMiICJkb3QgeGF4aXMiICIuIGN1c3RvbUNoYXJ0T3ZlcmxheSI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjUwcHggMWZyO2dyaWQtYXV0by1yb3dzOjFmciAzMHB4IDBweH0uY29udGFpbmVyLmRhcmstbW9kZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn0uY29udGFpbmVyLmxpbmUtb25seS1tb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MCAxZnI7Z3JpZC1hdXRvLXJvd3M6MWZyIDB9LnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6c2VyaWVzO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAuc2VyaWVzLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgY2FudmFzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNlcmllcy12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHN2Z1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWdyaWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5zZXJpZXMtdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWludGVyYWN0aXZlLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLmN1c3RvbS12aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jdXN0b20tdmlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgwLCAwLCAwLCAwKSAwJSwgIzAwMCAxMCUsICMwMDAgOTAlLCByZ2JhKDAsIDAsIDAsIDApIDEwMCUpO21hc2staW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDApIDAlLCAjMDAwIDEwJSwgIzAwMCA5MCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAwJSl9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICBsaW5lLWNoYXJ0LWF4aXNbX25nY29udGVudC0lQ09NUCVdLCAueS1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpbmUtY2hhcnQtYXhpc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LngtYXhpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnhheGlzO3Bvc2l0aW9uOnJlbGF0aXZlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5YXhpc30uZG90W19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2Rpc3BsYXk6ZmxleDtncmlkLWFyZWE6ZG90O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZG90W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZWN0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNhYWF9LmN1c3RvbS1jaGFydC1vdmVybGF5LXZpc1tfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmN1c3RvbUNoYXJ0T3ZlcmxheTtncmlkLXJvdy1lbmQ6MjtncmlkLXJvdy1zdGFydDoxfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gUXFlKG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiwxMCksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKTt5KCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gS3FlKG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiwxMSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKTt5KCJuZ0NsYXNzIixlLnR5cGU9PT1pLnNvcnRpbmdJbmZvLmhlYWRlcj8ic2hvdyI6InNob3ctb24taG92ZXIiKX19ZnVuY3Rpb24gWnFlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwidGgiLDQpLFAoImNsaWNrIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS5oZWFkZXJDbGlja2VkKHIudHlwZSkpfSksXygxLCJkaXYiLDUpLFAoImRyYWdzdGFydCIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKCkuZHJhZ1N0YXJ0KHIpKX0pKCJkcmFnZW5kIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLmRyYWdFbmQoKSl9KSgiZHJhZ2VudGVyIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS5kcmFnRW50ZXIocikpfSksTygyLCJ0Yi1kYXRhLXRhYmxlLWhlYWRlciIsNiksXygzLCJkaXYiLDcpLEUoNCxRcWUsMSwxLCJtYXQtaWNvbiIsOCksRSg1LEtxZSwxLDEsIm1hdC1pY29uIiw5KSx2KCkoKSgpfWlmKDImbil7bGV0IGU9UygpLiRpbXBsaWNpdCxpPVMoKTtDKDEpLHkoImRyYWdnYWJsZSIsaS5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCkoIm5nQ2xhc3MiLGkuZ2V0SGVhZGVySGlnaGxpZ2h0U3R5bGUoZS50eXBlKSksQygxKSx5KCJoZWFkZXIiLGUpLEMoMikseSgibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkFTQ0VORElOR3x8ZS50eXBlIT09aS5zb3J0aW5nSW5mby5oZWFkZXIpLEMoMSkseSgibmdJZiIsaS5zb3J0aW5nSW5mby5vcmRlcj09PWkuU29ydGluZ09yZGVyLkRFU0NFTkRJTkcmJmUudHlwZT09PWkuc29ydGluZ0luZm8uaGVhZGVyKX19ZnVuY3Rpb24gSnFlKG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLFpxZSw2LDUsInRoIiwzKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO0MoMSkseSgibmdJZiIsaS5zaG93Q29sdW1uKGUpKX19ZnVuY3Rpb24gJHFlKG4sdCl7MSZuJiZOaSgwKX12YXIgY3BlPWZ1bmN0aW9uKG4pe3JldHVybnskaW1wbGljaXQ6bn19O2Z1bmN0aW9uIGVZZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwxOCksRSgxLCRxZSwxLDAsIm5nLWNvbnRhaW5lciIsMTkpLEEoMiksdigpKSwyJm4pe2xldCBlPVMoMikuJGltcGxpY2l0LGk9UygpLiRpbXBsaWNpdCxyPVMoKSxvPSRlKDkpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsbykoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixPbigzLGNwZSxpLlZBTFVFX0NIQU5HRSkpLEMoMSksamUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gdFllKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBuWWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTgpLEUoMSx0WWUsMSwwLCJuZy1jb250YWluZXIiLDE5KSxBKDIpLHYoKSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKS4kaW1wbGljaXQscj1TKCksbz0kZSg5KTtDKDEpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLG8pKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsT24oMyxjcGUsaS5QRVJDRU5UQUdFX0NIQU5HRSkpLEMoMSksamUoIiAiLHIuZ2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLnR5cGUsaSksIiAiKX19ZnVuY3Rpb24gaVllKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDIwKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdCxpPVMoKS4kaW1wbGljaXQscj1TKCk7QygxKSxqZSgiICIsci5nZXRGb3JtYXR0ZWREYXRhRm9yQ29sdW1uKGUudHlwZSxpKSwiICIpfX1mdW5jdGlvbiByWWUobix0KXtpZigxJm4mJihfKDAsInRkIiwxNSksRSgxLGVZZSwzLDUsImRpdiIsMTYpLEUoMixuWWUsMyw1LCJkaXYiLDE2KSxFKDMsaVllLDIsMSwiZGl2IiwxNyksdigpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQsaT1TKDIpO3koIm5nU3dpdGNoIixlLnR5cGUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLkNvbHVtbkhlYWRlcnMuVkFMVUVfQ0hBTkdFKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5Db2x1bW5IZWFkZXJzLlBFUkNFTlRBR0VfQ0hBTkdFKX19ZnVuY3Rpb24gb1llKG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLHJZZSw0LDMsInRkIiwxNCksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7QygxKSx5KCJuZ0lmIixpLnNob3dDb2x1bW4oZSkpfX1mdW5jdGlvbiBzWWUobix0KXtpZigxJm4mJihzbigwKSxfKDEsInRyIiwxMikoMiwidGQiLDEzKSxPKDMsInNwYW4iKSx2KCksRSg0LG9ZZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpLGFuKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7QygzKSxQdCgiYmFja2dyb3VuZC1jb2xvciIsZS5DT0xPUiksQygxKSx5KCJuZ0Zvck9mIixpLmhlYWRlcnMpfX1mdW5jdGlvbiBhWWUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDIzKX1mdW5jdGlvbiBsWWUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDI0KX1mdW5jdGlvbiBjWWUobix0KXtpZigxJm4mJihFKDAsYVllLDEsMCwibWF0LWljb24iLDIxKSxFKDEsbFllLDEsMCwibWF0LWljb24iLDIyKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt5KCJuZ0lmIixlPj0wKSxDKDEpLHkoIm5nSWYiLGU8MCl9fXZhciBQcD0oKCk9PihmdW5jdGlvbihuKXtuW24uUklHSFQ9MF09IlJJR0hUIixuW24uTEVGVD0xXT0iTEVGVCJ9KFBwfHwoUHA9e30pKSxQcCkpKCksT0c9ZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpfSx1cGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuc29ydERhdGFCeT1uZXcgRyx0aGlzLm9yZGVyQ29sdW1ucz1uZXcgRyx0aGlzLkNvbHVtbkhlYWRlcnM9S3QsdGhpcy5Tb3J0aW5nT3JkZXI9eGwsdGhpcy5TaWRlPVBwLHRoaXMuaGlnaGxpZ2h0U2lkZT1QcC5SSUdIVH1uZ09uRGVzdHJveSgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIixPRyl9Z2V0Rm9ybWF0dGVkRGF0YUZvckNvbHVtbihlLGkpe3N3aXRjaChlKXtjYXNlIEt0LlJVTjpyZXR1cm4gdm9pZCAwPT09aS5SVU4/IiI6aS5SVU47Y2FzZSBLdC5WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5WQUxVRT8iIjp5cC5mb3JtYXRTaG9ydChpLlZBTFVFKTtjYXNlIEt0LlNURVA6cmV0dXJuIHZvaWQgMD09PWkuU1RFUD8iIjpNZC5mb3JtYXRTaG9ydChpLlNURVApO2Nhc2UgS3QuVElNRTpyZXR1cm4gdm9pZCAwPT09aS5USU1FPyIiOm5ldyBEYXRlKGkuVElNRSkudG9JU09TdHJpbmcoKTtjYXNlIEt0LlJFTEFUSVZFX1RJTUU6cmV0dXJuIHZvaWQgMD09PWkuUkVMQVRJVkVfVElNRT8iIjpTUy5mb3JtYXRSZWFkYWJsZShpLlJFTEFUSVZFX1RJTUUpO2Nhc2UgS3QuU01PT1RIRUQ6cmV0dXJuIHZvaWQgMD09PWkuU01PT1RIRUQ/IiI6eXAuZm9ybWF0U2hvcnQoaS5TTU9PVEhFRCk7Y2FzZSBLdC5WQUxVRV9DSEFOR0U6cmV0dXJuIHZvaWQgMD09PWkuVkFMVUVfQ0hBTkdFPyIiOnlwLmZvcm1hdFNob3J0KE1hdGguYWJzKGkuVkFMVUVfQ0hBTkdFKSk7Y2FzZSBLdC5TVEFSVF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLlNUQVJUX1NURVA/IiI6TWQuZm9ybWF0U2hvcnQoaS5TVEFSVF9TVEVQKTtjYXNlIEt0LkVORF9TVEVQOnJldHVybiB2b2lkIDA9PT1pLkVORF9TVEVQPyIiOk1kLmZvcm1hdFNob3J0KGkuRU5EX1NURVApO2Nhc2UgS3QuU1RBUlRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuU1RBUlRfVkFMVUU/IiI6TWQuZm9ybWF0U2hvcnQoaS5TVEFSVF9WQUxVRSk7Y2FzZSBLdC5FTkRfVkFMVUU6cmV0dXJuIHZvaWQgMD09PWkuRU5EX1ZBTFVFPyIiOk1kLmZvcm1hdFNob3J0KGkuRU5EX1ZBTFVFKTtjYXNlIEt0Lk1JTl9WQUxVRTpyZXR1cm4gdm9pZCAwPT09aS5NSU5fVkFMVUU/IiI6TWQuZm9ybWF0U2hvcnQoaS5NSU5fVkFMVUUpO2Nhc2UgS3QuTUFYX1ZBTFVFOnJldHVybiB2b2lkIDA9PT1pLk1BWF9WQUxVRT8iIjpNZC5mb3JtYXRTaG9ydChpLk1BWF9WQUxVRSk7Y2FzZSBLdC5QRVJDRU5UQUdFX0NIQU5HRTpyZXR1cm4gdm9pZCAwPT09aS5QRVJDRU5UQUdFX0NIQU5HRT8iIjpNYXRoLnJvdW5kKDEwMCppLlBFUkNFTlRBR0VfQ0hBTkdFKS50b1N0cmluZygpKyIlIjtkZWZhdWx0OnJldHVybiIifX1oZWFkZXJDbGlja2VkKGUpe3RoaXMuc29ydERhdGFCeS5lbWl0KHRoaXMuc29ydGluZ0luZm8uaGVhZGVyIT09ZXx8dGhpcy5zb3J0aW5nSW5mby5vcmRlciE9PXhsLkFTQ0VORElORz97aGVhZGVyOmUsb3JkZXI6eGwuQVNDRU5ESU5HfTp7aGVhZGVyOmUsb3JkZXI6eGwuREVTQ0VORElOR30pfWRyYWdTdGFydChlKXt0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZT1lLnR5cGUsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLE9HKX1kcmFnRW5kKCl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwhdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGV8fCh0aGlzLm9yZGVyQ29sdW1ucy5lbWl0KHRoaXMubW92ZUhlYWRlcih0aGlzLmdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZSh0aGlzLmRyYWdnaW5nSGVhZGVyVHlwZSksdGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGUpKSksdGhpcy5kcmFnZ2luZ0hlYWRlclR5cGU9dm9pZCAwLHRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlPXZvaWQgMCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsT0cpKX1kcmFnRW50ZXIoZSl7IXRoaXMuZHJhZ2dpbmdIZWFkZXJUeXBlfHwodGhpcy5oaWdobGlnaHRTaWRlPXRoaXMuZ2V0SW5kZXhPZkhlYWRlcldpdGhUeXBlKGUudHlwZSk8dGhpcy5nZXRJbmRleE9mSGVhZGVyV2l0aFR5cGUodGhpcy5kcmFnZ2luZ0hlYWRlclR5cGUpP1BwLkxFRlQ6UHAuUklHSFQsdGhpcy5oaWdobGlnaHRlZENvbHVtblR5cGU9ZS50eXBlKX1tb3ZlSGVhZGVyKGUsaSl7bGV0IHI9Wy4uLnRoaXMuaGVhZGVyc107cmV0dXJuIHIuc3BsaWNlKGUsMSksci5zcGxpY2UoaSwwLHRoaXMuaGVhZGVyc1tlXSkscn1nZXRIZWFkZXJIaWdobGlnaHRTdHlsZShlKXtyZXR1cm4gZSE9PXRoaXMuaGlnaGxpZ2h0ZWRDb2x1bW5UeXBlP3t9OntoaWdobGlnaHQ6ITAsImhpZ2hsaWdodC1ib3JkZXItcmlnaHQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVBwLlJJR0hULCJoaWdobGlnaHQtYm9yZGVyLWxlZnQiOnRoaXMuaGlnaGxpZ2h0U2lkZT09PVBwLkxFRlR9fXNob3dDb2x1bW4oZSl7cmV0dXJuIGUuZW5hYmxlZCYmKHRoaXMuc21vb3RoaW5nRW5hYmxlZHx8ZS50eXBlIT09S3QuU01PT1RIRUQpfWdldEluZGV4T2ZIZWFkZXJXaXRoVHlwZShlKXtyZXR1cm4gdGhpcy5oZWFkZXJzLmZpbmRJbmRleChpPT5lPT09aS50eXBlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItZGF0YS10YWJsZSJdXSxpbnB1dHM6e2hlYWRlcnM6ImhlYWRlcnMiLGRhdGE6ImRhdGEiLHNvcnRpbmdJbmZvOiJzb3J0aW5nSW5mbyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIn0sb3V0cHV0czp7c29ydERhdGFCeToic29ydERhdGFCeSIsb3JkZXJDb2x1bW5zOiJvcmRlckNvbHVtbnMifSxkZWNsczoxMCx2YXJzOjIsY29uc3RzOltbMSwiZGF0YS10YWJsZSJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFycm93IiwiIl0sWzMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImNlbGwiLDMsImRyYWdnYWJsZSIsIm5nQ2xhc3MiLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiwiZHJhZ2VudGVyIl0sWzMsImhlYWRlciJdLFsxLCJzb3J0aW5nLWljb24tY29udGFpbmVyIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfdXB3YXJkXzI0cHgiLDMsIm5nQ2xhc3MiXSxbInN2Z0ljb24iLCJhcnJvd19kb3dud2FyZF8yNHB4IiwzLCJuZ0NsYXNzIl0sWzEsInJvdyJdLFsxLCJyb3ctY2lyY2xlIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsImNlbGwiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjZWxsIGV4dHJhLXJpZ2h0LXBhZGRpbmciLDQsIm5nU3dpdGNoRGVmYXVsdCJdLFsxLCJjZWxsIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJjZWxsIiwiZXh0cmEtcmlnaHQtcGFkZGluZyJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Iiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImFycm93X3Vwd2FyZF8yNHB4Il0sWyJzdmdJY29uIiwiYXJyb3dfZG93bndhcmRfMjRweCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IikoMSwidGFibGUiLDApKDIsInRoZWFkIikoMywidHIiKSxPKDQsInRoIiksRSg1LEpxZSwyLDEsIm5nLWNvbnRhaW5lciIsMSksdigpKCksXyg2LCJ0Ym9keSIpLEUoNyxzWWUsNSwzLCJuZy1jb250YWluZXIiLDEpLHYoKSgpKCksRSg4LGNZZSwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpKSwyJmUmJihDKDUpLHkoIm5nRm9yT2YiLGkuaGVhZGVycyksQygyKSx5KCJuZ0Zvck9mIixpLmRhdGEpKX0sZGVwZW5kZW5jaWVzOltGbixkbixCZSxvcyxDcixVcixjaCxHdCx2Ul0sc3R5bGVzOlsiLmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1zcGFjaW5nOjRweDtmb250LXNpemU6MTNweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnN0aWNreTt0ZXh0LWFsaWduOmxlZnQ7dG9wOjA7dmVydGljYWwtYWxpZ246Ym90dG9tfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6cG9pbnRlcn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDMwMzB9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmNlbGxbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmV4dHJhLXJpZ2h0LXBhZGRpbmdbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctcmlnaHQ6MXB4fS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yb3dbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAucm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAucm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0gPiBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O3dpZHRoOjEwcHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLmNlbGxbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnNvcnRpbmctaWNvbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7Ym9yZGVyLXJhZGl1czo1cHh9LmRhdGEtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgLnNob3dbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuc2hvdy1vbi1ob3Zlcltfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTowfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5zaG93LW9uLWhvdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi4zfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2VlZX0uZGF0YS10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAuaGlnaGxpZ2h0LWJvcmRlci1yaWdodFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJpZ2h0OjJweCBzb2xpZCAjZmY5ODAwfS5kYXRhLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaWdobGlnaHQtYm9yZGVyLWxlZnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZmY5ODAwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnNvcnREYXRhQnk9bmV3IEcsdGhpcy5vcmRlckNvbHVtbnM9bmV3IEd9Z2V0TWluVmFsdWVJblJhbmdlKGUsaSxyLG89ITEpe2xldCBzPXRoaXMubWF5YmVTbW9vdGhlZFZhbHVlKGVbaV0sbyk7Zm9yKGxldCBhPWk7YTw9cjthKyspcz50aGlzLm1heWJlU21vb3RoZWRWYWx1ZShlW2FdLG8pJiYocz10aGlzLm1heWJlU21vb3RoZWRWYWx1ZShlW2FdLG8pKTtyZXR1cm4gc31nZXRNYXhWYWx1ZUluUmFuZ2UoZSxpLHIsbz0hMSl7bGV0IHM9dGhpcy5tYXliZVNtb290aGVkVmFsdWUoZVtpXSxvKTtmb3IobGV0IGE9aTthPD1yO2ErKylzPHRoaXMubWF5YmVTbW9vdGhlZFZhbHVlKGVbYV0sbykmJihzPXRoaXMubWF5YmVTbW9vdGhlZFZhbHVlKGVbYV0sbykpO3JldHVybiBzfW1heWJlU21vb3RoZWRWYWx1ZShlLGkpe3JldHVybiBpP2UueTplLnZhbHVlfWdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKXtpZihudWxsPT09dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uKXJldHVybltdO2xldCBlPXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5zdGFydC5zdGVwLGk9dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD8uc3RlcCxyPXRoaXMuZGF0YVNlcmllcy5maWx0ZXIobz0+e2xldCBzPXRoaXMuY2hhcnRNZXRhZGF0YU1hcFtvLmlkXTtyZXR1cm4gcyYmcy52aXNpYmxlJiYhQm9vbGVhbihzLmF1eCl9KS5tYXAobz0+e2xldCBzPXRoaXMuY2hhcnRNZXRhZGF0YU1hcFtvLmlkXSxhPWJFKG8ucG9pbnRzLGUpLGw9by5wb2ludHNbYV0sYz1udWxsLHU9bnVsbDtudWxsIT1pJiYodT1iRShvLnBvaW50cyxpKSxjPW8ucG9pbnRzW3VdKTtsZXQgZD17aWQ6by5pZH07ZC5DT0xPUj1zLmNvbG9yO2ZvcihsZXQgcCBvZiB0aGlzLmNvbHVtbkhlYWRlcnMpc3dpdGNoKHAudHlwZSl7Y2FzZSBLdC5SVU46bGV0IGg9IiI7cy5hbGlhcyYmKGg9YCR7cy5hbGlhcy5hbGlhc051bWJlcn0gJHtzLmFsaWFzLmFsaWFzVGV4dH0vYCksZC5SVU49YCR7aH0ke3MuZGlzcGxheU5hbWV9YDtjb250aW51ZTtjYXNlIEt0LlNURVA6ZC5TVEVQPWwuc3RlcDtjb250aW51ZTtjYXNlIEt0LlZBTFVFOmQuVkFMVUU9bC52YWx1ZTtjb250aW51ZTtjYXNlIEt0LlJFTEFUSVZFX1RJTUU6ZC5SRUxBVElWRV9USU1FPWwucmVsYXRpdmVUaW1lSW5Ncztjb250aW51ZTtjYXNlIEt0LlNNT09USEVEOmQuU01PT1RIRUQ9bC55O2NvbnRpbnVlO2Nhc2UgS3QuVkFMVUVfQ0hBTkdFOmlmKCFjKWNvbnRpbnVlO2QuVkFMVUVfQ0hBTkdFPWMueS1sLnk7Y29udGludWU7Y2FzZSBLdC5TVEFSVF9TVEVQOmQuU1RBUlRfU1RFUD1sLnN0ZXA7Y29udGludWU7Y2FzZSBLdC5FTkRfU1RFUDppZighYyljb250aW51ZTtkLkVORF9TVEVQPWMuc3RlcDtjb250aW51ZTtjYXNlIEt0LlNUQVJUX1ZBTFVFOmQuU1RBUlRfVkFMVUU9bC55O2NvbnRpbnVlO2Nhc2UgS3QuRU5EX1ZBTFVFOmlmKCFjKWNvbnRpbnVlO2QuRU5EX1ZBTFVFPWMueTtjb250aW51ZTtjYXNlIEt0Lk1JTl9WQUxVRTppZighdSljb250aW51ZTtkLk1JTl9WQUxVRT10aGlzLmdldE1pblZhbHVlSW5SYW5nZShvLnBvaW50cyxhLHUsITApO2NvbnRpbnVlO2Nhc2UgS3QuTUFYX1ZBTFVFOmlmKCF1KWNvbnRpbnVlO2QuTUFYX1ZBTFVFPXRoaXMuZ2V0TWF4VmFsdWVJblJhbmdlKG8ucG9pbnRzLGEsdSwhMCk7Y29udGludWU7Y2FzZSBLdC5QRVJDRU5UQUdFX0NIQU5HRTppZighYyljb250aW51ZTtkLlBFUkNFTlRBR0VfQ0hBTkdFPShjLnktbC55KS9sLnk7Y29udGludWU7ZGVmYXVsdDpjb250aW51ZX1yZXR1cm4gZH0pO3JldHVybiByLnNvcnQoKG8scyk9PntsZXQgYT10aGlzLmdldFNvcnRhYmxlVmFsdWUobyx0aGlzLnNvcnRpbmdJbmZvLmhlYWRlciksbD10aGlzLmdldFNvcnRhYmxlVmFsdWUocyx0aGlzLnNvcnRpbmdJbmZvLmhlYWRlcik7cmV0dXJuIGE8bD90aGlzLnNvcnRpbmdJbmZvLm9yZGVyPT09eGwuQVNDRU5ESU5HPy0xOjE6YT5sP3RoaXMuc29ydGluZ0luZm8ub3JkZXI9PT14bC5BU0NFTkRJTkc/MTotMTowfSkscn1nZXRTb3J0YWJsZVZhbHVlKGUsaSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBOdW1iZXIuaXNOYU4obil8fCJOYU4iPT09bnx8bnVsbD09bj8tMS8wOm59KGk9PT1LdC5SVU4/dGhpcy5jaGFydE1ldGFkYXRhTWFwW2UuaWRdLmRpc3BsYXlOYW1lOmVbaV0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1kYXRhLXRhYmxlIl1dLGlucHV0czp7Y2hhcnRNZXRhZGF0YU1hcDoiY2hhcnRNZXRhZGF0YU1hcCIsZGF0YVNlcmllczoiZGF0YVNlcmllcyIsc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbjoic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyIsc29ydGluZ0luZm86InNvcnRpbmdJbmZvIixjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZDoiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLHNtb290aGluZ0VuYWJsZWQ6InNtb290aGluZ0VuYWJsZWQifSxvdXRwdXRzOntzb3J0RGF0YUJ5OiJzb3J0RGF0YUJ5IixvcmRlckNvbHVtbnM6Im9yZGVyQ29sdW1ucyJ9LGRlY2xzOjEsdmFyczo1LGNvbnN0czpbWzMsImhlYWRlcnMiLCJkYXRhIiwic29ydGluZ0luZm8iLCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsInNtb290aGluZ0VuYWJsZWQiLCJzb3J0RGF0YUJ5Iiwib3JkZXJDb2x1bW5zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJ0Yi1kYXRhLXRhYmxlIiwwKSxQKCJzb3J0RGF0YUJ5IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zb3J0RGF0YUJ5LmVtaXQobyl9KSgib3JkZXJDb2x1bW5zIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vcmRlckNvbHVtbnMuZW1pdChvKX0pLHYoKSksMiZlJiZ5KCJoZWFkZXJzIixpLmNvbHVtbkhlYWRlcnMpKCJkYXRhIixpLmdldFRpbWVTZWxlY3Rpb25UYWJsZURhdGEoKSkoInNvcnRpbmdJbmZvIixpLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGkuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixpLnNtb290aGluZ0VuYWJsZWQpfSxkZXBlbmRlbmNpZXM6W3VwZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7dmFyIHBZZT1bInN0ZXBTcGFuIl07ZnVuY3Rpb24gaFllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE8oMSwibWF0LWljb24iLDUpLHYoKX19ZnVuY3Rpb24gZlllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLmZvYlJlbW92ZWQuZW1pdCgpKX0pLE8oMSwibWF0LWljb24iLDYpLHYoKX19dmFyIG1ZZT1mdW5jdGlvbihuLHQpe3JldHVybntmb2I6ITAsdW5yZW1vdmFibGU6bixwcm9zcGVjdGl2ZTp0fX0saHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmFsbG93UmVtb3ZhbD0hMCx0aGlzLmlzUHJvc3BlY3RpdmU9ITEsdGhpcy5zdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmZvYlJlbW92ZWQ9bmV3IEd9bmdPbkNoYW5nZXMoZSl7ZS5zdGVwJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09dGhpcy5zdGVwU3Bhbi5uYXRpdmVFbGVtZW50JiZ0aGlzLnN0ZXBTcGFuLm5hdGl2ZUVsZW1lbnQuYmx1cigpfXZhbGlkYXRlU3RlcChlKXtsZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUud2hpY2gpOygiICI9PT1lLmtleXx8aXNOYU4oTnVtYmVyKGkpKSkmJmUucHJldmVudERlZmF1bHQoKX1zdGVwVHlwZWQoZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2xldCBpPWUudGFyZ2V0LmlubmVyVGV4dDt0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoIiIhPT1pP051bWJlcihpKTpudWxsKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC1mb2IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChwWWUsNyxSZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5zdGVwU3Bhbj1yLmZpcnN0KX19LGlucHV0czp7c3RlcDoic3RlcCIsYWxsb3dSZW1vdmFsOiJhbGxvd1JlbW92YWwiLGlzUHJvc3BlY3RpdmU6ImlzUHJvc3BlY3RpdmUifSxvdXRwdXRzOntzdGVwQ2hhbmdlZDoic3RlcENoYW5nZWQiLGZvYlJlbW92ZWQ6ImZvYlJlbW92ZWQifSxmZWF0dXJlczpbRnRdLGRlY2xzOjUsdmFyczo3LGNvbnN0czpbWzMsIm5nQ2xhc3MiXSxbImNvbnRlbnRlZGl0YWJsZSIsIiIsInJvbGUiLCJ0ZXh0Ym94IiwiYXJpYS1sYWJlbCIsIkVkaXQgc3RlcCIsMywiaW5uZXJIVE1MIiwiYmx1ciIsImtleXByZXNzIiwia2V5ZG93bi5lbnRlciIsImtleWRvd24uc2hpZnQuZW50ZXIiXSxbInN0ZXBTcGFuIiwiIl0sWyJhcmlhLWxhYmVsIiwiRGVzZWxlY3QgZm9iIiwzLCJjbGljayIsNCwibmdJZiJdLFsiYXJpYS1sYWJlbCIsIkRlc2VsZWN0IGZvYiIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjbG9zZV8yNHB4Il0sWyJzdmdJY29uIiwia2VlcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsInNwYW4iLDEsMiksUCgiYmx1ciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleXByZXNzIixmdW5jdGlvbihvKXtyZXR1cm4gaS52YWxpZGF0ZVN0ZXAobyl9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc3RlcFR5cGVkKG8pfSkoImtleWRvd24uc2hpZnQuZW50ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBvLnByZXZlbnREZWZhdWx0KCl9KSx2KCksRSgzLGhZZSwyLDAsImJ1dHRvbiIsMyksRSg0LGZZZSwyLDAsImJ1dHRvbiIsMyksdigpKSwyJmUmJih5KCJuZ0NsYXNzIixRcig0LG1ZZSwhaS5hbGxvd1JlbW92YWwsaS5pc1Byb3NwZWN0aXZlKSksQygxKSx5KCJpbm5lckhUTUwiLGkuc3RlcCxBMyksQygyKSx5KCJuZ0lmIixpLmFsbG93UmVtb3ZhbCksQygxKSx5KCJuZ0lmIixpLmlzUHJvc3BlY3RpdmUpKX0sZGVwZW5kZW5jaWVzOltGbixCZSxHdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1mbGV4O2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItcmFkaXVzOjI1cHg7cGFkZGluZzoycHggMnB4IDJweCA0cHg7Zm9udC1zaXplOjExcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6bWluLWNvbnRlbnR9LmZvYltfbmdjb250ZW50LSVDT01QJV0gPiAucHJvc3BlY3RpdmVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctdG9wOjFweH0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6Z3JhYn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlci5wcm9zcGVjdGl2ZXtjdXJzb3I6cG9pbnRlcn0uZm9iW19uZ2NvbnRlbnQtJUNPTVAlXTphY3RpdmV7Y3Vyc29yOmdyYWJiaW5nfS5mb2IudW5yZW1vdmFibGVbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDRweH0uZm9iLnByb3NwZWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjoxcHggZGFzaGVkICM5ZTllOWU7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6MTdweH1zcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O2Rpc3BsYXk6aW5saW5lLWJsb2NrfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MnB4O3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtmb250LXNpemU6MTFweDt3aWR0aDoxMXB4O2hlaWdodDoxMXB4O2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjb2xvcjppbmhlcml0fWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAubWF0LWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjExMCV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxfWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojOWU5ZTllO2NvbG9yOiNlZWU7Y3Vyc29yOnBvaW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM2MTYxNjE7Y29sb3I6I2UwZTBlMH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLF9ZZT1bInN0YXJ0Rm9iV3JhcHBlciJdLHZZZT1bImVuZEZvYldyYXBwZXIiXSx5WWU9WyJwcm9zcGVjdGl2ZUZvYldyYXBwZXIiXTtmdW5jdGlvbiBiWWUobix0KXsxJm4mJk8oMCwiZGl2Iiw3KX1mdW5jdGlvbiB4WWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMyw0KSxFKDIsYlllLDEsMCwiZGl2Iiw1KSxPKDMsImNhcmQtZm9iIiw2KSx2KCkpLDImbil7bGV0IGU9UygyKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yUHJvc3BlY3RpdmVGb2IoKSksQygyKSx5KCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLEMoMSkseSgibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoImFsbG93UmVtb3ZhbCIsITEpKCJpc1Byb3NwZWN0aXZlIiwhMCkoInN0ZXAiLGUucHJvc3BlY3RpdmVTdGVwKX19ZnVuY3Rpb24gQ1llKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLEUoMSx4WWUsNCw3LCJkaXYiLDEpLF8oMiwiZGl2IiwyKSxQKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkubW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKHIpKX0pKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5wcm9zcGVjdGl2ZUZvYkNsaWNrZWQocikpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vblByb3NwZWN0aXZlQXJlYU1vdXNlTGVhdmUoKSl9KSx2KCksYW4oKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nSWYiLG51bGwhPT1lLnByb3NwZWN0aXZlU3RlcCksQygxKSx5KCJuZ0NsYXNzIixlLmlzVmVydGljYWwoKT8idmVydGljYWwtcHJvc3BlY3RpdmUtYXJlYSI6Imhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYSIpfX1mdW5jdGlvbiBNWWUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoMik7cmV0dXJuIHNlKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRVhURU5ERURfTElORSxyKSl9KSx2KCl9fWZ1bmN0aW9uIHdZZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMyw4KSxFKDIsTVllLDEsMCwiZGl2Iiw5KSxfKDMsImNhcmQtZm9iIiwxMCksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCk7cmV0dXJuIHNlKG8uc3RhcnREcmFnKG8uRm9iLlNUQVJULG8uVGltZVNlbGVjdGlvbkFmZm9yZGFuY2UuRk9CLHIpKX0pKCJzdGVwQ2hhbmdlZCIsZnVuY3Rpb24ocil7b2UoZSk7bGV0IG89UygpO3JldHVybiBzZShvLnN0ZXBUeXBlZChvLkZvYi5TVEFSVCxyKSl9KSgiZm9iUmVtb3ZlZCIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCk7cmV0dXJuIHNlKHIub25Gb2JSZW1vdmVkKHIuRm9iLlNUQVJUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yU3RhcnRGb2IoKSksQygyKSx5KCJuZ0lmIixlLnNob3dFeHRlbmRlZExpbmUpLEMoMSkseSgibmdDbGFzcyIsZS5pc1ZlcnRpY2FsKCk/InZlcnRpY2FsLWZvYiI6Imhvcml6b250YWwtZm9iIikoInN0ZXAiLGUudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX19ZnVuY3Rpb24gU1llKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwxMSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKDIpO3JldHVybiBzZShvLnN0YXJ0RHJhZyhvLkZvYi5FTkQsby5UaW1lU2VsZWN0aW9uQWZmb3JkYW5jZS5FWFRFTkRFRF9MSU5FLHIpKX0pLHYoKX19ZnVuY3Rpb24gRVllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwzLDEyKSxFKDIsU1llLDEsMCwiZGl2Iiw5KSxfKDMsImNhcmQtZm9iIiwxMyksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCk7cmV0dXJuIHNlKG8uc3RhcnREcmFnKG8uRm9iLkVORCxvLlRpbWVTZWxlY3Rpb25BZmZvcmRhbmNlLkZPQixyKSl9KSgic3RlcENoYW5nZWQiLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKTtyZXR1cm4gc2Uoby5zdGVwVHlwZWQoby5Gb2IuRU5ELHIpKX0pKCJmb2JSZW1vdmVkIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKTtyZXR1cm4gc2Uoci5vbkZvYlJlbW92ZWQoci5Gb2IuRU5EKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4Rm9yRW5kRm9iKCkpLEMoMikseSgibmdJZiIsZS5zaG93RXh0ZW5kZWRMaW5lKSxDKDEpLHkoIm5nQ2xhc3MiLGUuaXNWZXJ0aWNhbCgpPyJ2ZXJ0aWNhbC1mb2IiOiJob3Jpem9udGFsLWZvYiIpKCJzdGVwIixlLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfX12YXIgWHI9KCgpPT4oZnVuY3Rpb24obil7bltuLk5PTkU9MF09Ik5PTkUiLG5bbi5TVEFSVD0xXT0iU1RBUlQiLG5bbi5FTkQ9Ml09IkVORCJ9KFhyfHwoWHI9e30pKSxYcikpKCksVFllPXtzdGFydDpYci5TVEFSVCxlbmQ6WHIuRU5EfSxHaz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMucm9vdD1lLHRoaXMuc2hvd0V4dGVuZGVkTGluZT0hMSx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZD0hMSx0aGlzLnByb3NwZWN0aXZlU3RlcD1udWxsLHRoaXMucHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uPW51bGwsdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uVG9nZ2xlZD1uZXcgRyx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZD1uZXcgRyx0aGlzLmhhc0ZvYk1vdmVkPSExLHRoaXMuY3VycmVudERyYWdnaW5nRm9iPVhyLk5PTkUsdGhpcy5hZmZvcmRhbmNlPWNzLk5PTkUsdGhpcy5tb3VzZUxpc3RlbmVyPXRoaXMubW91c2VNb3ZlLmJpbmQodGhpcyksdGhpcy5zdG9wTGlzdGVuZXI9dGhpcy5zdG9wRHJhZy5iaW5kKHRoaXMpLHRoaXMuRm9iPVhyLHRoaXMuVGltZVNlbGVjdGlvbkFmZm9yZGFuY2U9Y3N9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JTdGFydEZvYigpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnN0YXJ0U3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9Z2V0Q3NzVHJhbnNsYXRlUHhGb3JFbmRGb2IoKXtyZXR1cm4gbnVsbD09PXRoaXMuZW5kU3RlcEF4aXNQb3NpdGlvbj8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLmVuZFN0ZXBBeGlzUG9zaXRpb259cHgpYDpgdHJhbnNsYXRlKCR7dGhpcy5lbmRTdGVwQXhpc1Bvc2l0aW9ufXB4LCAwcHgpYH1nZXRDc3NUcmFuc2xhdGVQeEZvclByb3NwZWN0aXZlRm9iKCl7cmV0dXJuIG51bGw9PT10aGlzLnByb3NwZWN0aXZlU3RlcD8iIjp0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTD9gdHJhbnNsYXRlKDBweCwgJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weClgOmB0cmFuc2xhdGUoJHt0aGlzLnByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbn1weCwgMHB4KWB9c3RvcEV2ZW50UHJvcGFnYXRpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCl9c3RhcnREcmFnKGUsaSxyKXtpIT09Y3MuRk9CJiZ0aGlzLnN0b3BFdmVudFByb3BhZ2F0aW9uKHIpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9ZSx0aGlzLmFmZm9yZGFuY2U9aX1zdG9wRHJhZygpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5tb3VzZUxpc3RlbmVyKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLnN0b3BMaXN0ZW5lciksdGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9WHIuTk9ORSx0aGlzLmhhc0ZvYk1vdmVkJiZ0aGlzLnRpbWVTZWxlY3Rpb24mJnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHt0aW1lU2VsZWN0aW9uOnRoaXMudGltZVNlbGVjdGlvbixhZmZvcmRhbmNlOnRoaXMuYWZmb3JkYW5jZX0pLHRoaXMuYWZmb3JkYW5jZT1jcy5OT05FLHRoaXMuaGFzRm9iTW92ZWQ9ITF9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmF4aXNEaXJlY3Rpb249PT1wYS5WRVJUSUNBTH1zaG91bGRTd2FwRm9icyhlKXtyZXR1cm4hKCF0aGlzLnRpbWVTZWxlY3Rpb258fCF0aGlzLnRpbWVTZWxlY3Rpb24uZW5kKSYmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuRU5EP2U8dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA6dGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Yci5TVEFSVCYmZT50aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldE5ld1RpbWVTZWxlY3Rpb24oZSxpKXtsZXQgcj17Li4uaX07aWYoIXRoaXMudGltZVNlbGVjdGlvbilyZXR1cm4gcjtpZighdGhpcy50aW1lU2VsZWN0aW9uLmVuZClyZXR1cm4gci5zdGFydD17c3RlcDplfSxyO2lmKHRoaXMuc2hvdWxkU3dhcEZvYnMoZSkpe2xldFtvLHNdPXRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuRU5EP1siZW5kIiwic3RhcnQiXTpbInN0YXJ0IiwiZW5kIl07cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPVRZZVtzXSxyW29dPXRoaXMudGltZVNlbGVjdGlvbltzXSxyW3NdPXtzdGVwOmV9LHJ9cmV0dXJuIHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuRU5EPyhyLmVuZD17c3RlcDplfSxyKTooci5zdGFydD17c3RlcDplfSxyKX1nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSl7bGV0IGk9bnVsbCxyPXRoaXMuZ2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKSxvPXRoaXMuYXhpc0RpcmVjdGlvbj09PXBhLlZFUlRJQ0FMP2UubW92ZW1lbnRZOmUubW92ZW1lbnRYO3JldHVybiB0aGlzLmlzTW92aW5nSGlnaGVyKHIsbyk/aT10aGlzLmNhcmRGb2JIZWxwZXIuZ2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb24ocik6dGhpcy5pc01vdmluZ0xvd2VyKHIsbykmJihpPXRoaXMuY2FyZEZvYkhlbHBlci5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uKHIpKSxudWxsPT09aT9udWxsOml9bW91c2VNb3ZlKGUpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuTk9ORSlyZXR1cm47bGV0IGk9dGhpcy5nZXROZXdTdGVwRnJvbU1vdXNlRXZlbnQoZSk7aWYobnVsbD09PWl8fCF0aGlzLnRpbWVTZWxlY3Rpb24pcmV0dXJuO2xldCByPXRoaXMuZ2V0TmV3VGltZVNlbGVjdGlvbihpLHRoaXMudGltZVNlbGVjdGlvbik7dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cn0pLHRoaXMuaGFzRm9iTW92ZWQ9ITB9bW91c2VPdmVyUHJvc3BlY3RpdmVGb2JBcmVhKGUpe2lmKG51bGwhPXRoaXMudGltZVNlbGVjdGlvbj8uZW5kKXJldHVybjtsZXQgaT10aGlzLmdldE5ld1N0ZXBGcm9tTW91c2VFdmVudChlKTtudWxsIT09aSYmdGhpcy5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQuZW1pdChpKX1pc01vdmluZ0xvd2VyKGUsaSl7aWYodGhpcy5jdXJyZW50RHJhZ2dpbmdGb2I9PT1Yci5OT05FJiZudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXApcmV0dXJuITA7bGV0IHI9dGhpcy5nZXRDdXJyZW50Rm9iU3RlcCgpO3JldHVybiB2b2lkIDAhPT1yJiZlPHRoaXMuZ2V0RHJhZ2dpbmdGb2JDZW50ZXIoKSYmaTwwJiZyPnRoaXMubG93ZXN0U3RlcH1pc01vdmluZ0hpZ2hlcihlLGkpe2lmKHRoaXMuY3VycmVudERyYWdnaW5nRm9iPT09WHIuTk9ORSYmbnVsbD09PXRoaXMucHJvc3BlY3RpdmVTdGVwKXJldHVybiEwO2xldCByPXRoaXMuZ2V0Q3VycmVudEZvYlN0ZXAoKTtyZXR1cm4gdm9pZCAwIT09ciYmZT50aGlzLmdldERyYWdnaW5nRm9iQ2VudGVyKCkmJmk+MCYmcjx0aGlzLmhpZ2hlc3RTdGVwfWdldERyYWdnaW5nRm9iQ2VudGVyKCl7bGV0IGU9dGhpcy5nZXRDdXJyZW50Rm9iKCk/Lm5hdGl2ZUVsZW1lbnQ7aWYoIWUpcmV0dXJuIDA7bGV0IGk9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ascj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7cmV0dXJuIHRoaXMuYXhpc0RpcmVjdGlvbj09PXBhLlZFUlRJQ0FMP2ktdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnItdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1nZXRDdXJyZW50Rm9iKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIFhyLlNUQVJUOnJldHVybiB0aGlzLnN0YXJ0Rm9iV3JhcHBlcjtjYXNlIFhyLkVORDpyZXR1cm4gdGhpcy5lbmRGb2JXcmFwcGVyO2Nhc2UgWHIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZUZvYldyYXBwZXJ9fWdldEN1cnJlbnRGb2JTdGVwKCl7c3dpdGNoKHRoaXMuY3VycmVudERyYWdnaW5nRm9iKXtjYXNlIFhyLlNUQVJUOnJldHVybiB0aGlzLnRpbWVTZWxlY3Rpb24/LnN0YXJ0LnN0ZXA7Y2FzZSBYci5FTkQ6cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj8uZW5kPy5zdGVwO2Nhc2UgWHIuTk9ORTpyZXR1cm4gdGhpcy5wcm9zcGVjdGl2ZVN0ZXA/P3ZvaWQgMH19Z2V0TW91c2VQb3NpdGlvbkZyb21FdmVudChlKXtyZXR1cm4gdGhpcy5heGlzRGlyZWN0aW9uPT09cGEuVkVSVElDQUw/ZS5jbGllbnRZLXRoaXMucm9vdC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDplLmNsaWVudFgtdGhpcy5yb290Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH1zdGVwVHlwZWQoZSxpKXtpZihudWxsPT09aSlyZXR1cm4gdm9pZChudWxsIT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZCYmdGhpcy5vbkZvYlJlbW92ZWQoZSkpO2xldCByPXsuLi50aGlzLnRpbWVTZWxlY3Rpb259O2U9PT1Yci5TVEFSVD9yLnN0YXJ0PXtzdGVwOml9OmU9PT1Yci5FTkQmJihyLmVuZD17c3RlcDppfSksbnVsbCE9PXIuZW5kJiZyLnN0YXJ0LnN0ZXA+ci5lbmQuc3RlcCYmKHI9e3N0YXJ0OnIuZW5kLGVuZDpyLnN0YXJ0fSksdGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246cixhZmZvcmRhbmNlOmNzLkZPQl9URVhUfSl9cHJvc3BlY3RpdmVGb2JDbGlja2VkKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7bGV0IGk9dGhpcy5nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKTshaXx8KHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOmNzLkZPQl9BRERFRCx0aW1lU2VsZWN0aW9uOml9KSx0aGlzLm9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZC5lbWl0KG51bGwpKX1nZXRQcm9zcGVjdGl2ZVRpbWVTZWxlY3Rpb24oKXtpZih0aGlzLnByb3NwZWN0aXZlU3RlcClyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uP3tzdGFydDp7c3RlcDpNYXRoLm1pbih0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9LGVuZDp7c3RlcDpNYXRoLm1heCh0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCx0aGlzLnByb3NwZWN0aXZlU3RlcCl9fTp7c3RhcnQ6e3N0ZXA6dGhpcy5wcm9zcGVjdGl2ZVN0ZXB9LGVuZDpudWxsfX1vbkZvYlJlbW92ZWQoZSl7ZSE9PVhyLkVORD9udWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD90aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpOnRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHthZmZvcmRhbmNlOmNzLkZPQl9SRU1PVkVELHRpbWVTZWxlY3Rpb246e3N0YXJ0OnRoaXMudGltZVNlbGVjdGlvbi5lbmQsZW5kOm51bGx9fSk6dGhpcy5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe2FmZm9yZGFuY2U6Y3MuRk9CX1JFTU9WRUQsdGltZVNlbGVjdGlvbjp7Li4udGhpcy50aW1lU2VsZWN0aW9uLGVuZDpudWxsfX0pfW9uUHJvc3BlY3RpdmVBcmVhTW91c2VMZWF2ZSgpe3RoaXMub25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkLmVtaXQobnVsbCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJjYXJkLWZvYi1jb250cm9sbGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KF9ZZSw1KSxvdCh2WWUsNSksb3QoeVllLDUpKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLnN0YXJ0Rm9iV3JhcHBlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5lbmRGb2JXcmFwcGVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnByb3NwZWN0aXZlRm9iV3JhcHBlcj1yLmZpcnN0KX19LGlucHV0czp7YXhpc0RpcmVjdGlvbjoiYXhpc0RpcmVjdGlvbiIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsY2FyZEZvYkhlbHBlcjoiY2FyZEZvYkhlbHBlciIsc3RhcnRTdGVwQXhpc1Bvc2l0aW9uOiJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLGVuZFN0ZXBBeGlzUG9zaXRpb246ImVuZFN0ZXBBeGlzUG9zaXRpb24iLGhpZ2hlc3RTdGVwOiJoaWdoZXN0U3RlcCIsbG93ZXN0U3RlcDoibG93ZXN0U3RlcCIsc2hvd0V4dGVuZGVkTGluZToic2hvd0V4dGVuZGVkTGluZSIsaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkOiJpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQiLHByb3NwZWN0aXZlU3RlcDoicHJvc3BlY3RpdmVTdGVwIixwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb246InByb3NwZWN0aXZlU3RlcEF4aXNQb3NpdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLG9uUHJvc3BlY3RpdmVTdGVwQ2hhbmdlZDoib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIn0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJ0aW1lLWZvYi13cmFwcGVyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbMSwicHJvc3BlY3RpdmUtZm9iLWFyZWEiLDMsIm5nQ2xhc3MiLCJtb3VzZW1vdmUiLCJjbGljayIsIm1vdXNlbGVhdmUiXSxbMSwidGltZS1mb2Itd3JhcHBlciJdLFsicHJvc3BlY3RpdmVGb2JXcmFwcGVyIiwiIl0sWyJjbGFzcyIsImV4dGVuZGVkLWxpbmUiLDQsIm5nSWYiXSxbMywibmdDbGFzcyIsImFsbG93UmVtb3ZhbCIsImlzUHJvc3BlY3RpdmUiLCJzdGVwIl0sWzEsImV4dGVuZGVkLWxpbmUiXSxbInN0YXJ0Rm9iV3JhcHBlciIsIiJdLFsiY2xhc3MiLCJleHRlbmRlZC1saW5lIiwzLCJtb3VzZWRvd24iLDQsIm5nSWYiXSxbMSwic3RhcnRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl0sWzEsImV4dGVuZGVkLWxpbmUiLDMsIm1vdXNlZG93biJdLFsiZW5kRm9iV3JhcHBlciIsIiJdLFsxLCJlbmRGb2IiLDMsIm5nQ2xhc3MiLCJzdGVwIiwibW91c2Vkb3duIiwic3RlcENoYW5nZWQiLCJmb2JSZW1vdmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiKSxFKDEsQ1llLDMsMiwibmctY29udGFpbmVyIiwwKSxFKDIsd1llLDQsNSwiZGl2IiwxKSxFKDMsRVllLDQsNSwiZGl2IiwxKSx2KCkpLDImZSYmKEMoMSkseSgibmdJZiIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpLEMoMSkseSgibmdJZiIsaS50aW1lU2VsZWN0aW9uKSxDKDEpLHkoIm5nSWYiLGkudGltZVNlbGVjdGlvbiYmaS50aW1lU2VsZWN0aW9uLmVuZCkpfSxkZXBlbmRlbmNpZXM6W0ZuLEJlLGhwZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphbGx9LnRpbWUtZm9iLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjB9LnZlcnRpY2FsLWZvYltfbmdjb250ZW50LSVDT01QJV17dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9Lmhvcml6b250YWwtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKX0uZXh0ZW5kZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXN0eWxlOmRhc2hlZDtib3JkZXItd2lkdGg6MCAxcHg7aGVpZ2h0OmNhbGMoMTAwJSAtIDMwcHgpfS5leHRlbmRlZC1saW5lW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMThweCwgI2NjYyAxOXB4LCAjY2NjIDIxcHgsIHRyYW5zcGFyZW50IDIycHgpO2JvcmRlcjowO2N1cnNvcjpldy1yZXNpemU7bWFyZ2luLWxlZnQ6LTIwcHg7cGFkZGluZzowIDIwcHh9Lmhvcml6b250YWwtcHJvc3BlY3RpdmUtYXJlYVtfbmdjb250ZW50LSVDT01QJV17Ym90dG9tOjA7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjMwcHg7d2lkdGg6Y2FsYygxMDAlIC0gNzRweCl9LnByb3NwZWN0aXZlLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxtcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkPSExLHRoaXMuZGlzYWJsZUludGVyYWN0aW9uPSExLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPXBhLkhPUklaT05UQUwsdGhpcy5jYXJkRm9iSGVscGVyPXtnZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyksZ2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbjp0aGlzLmdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb24uYmluZCh0aGlzKX0sdGhpcy5wcm9zcGVjdGl2ZVN0ZXA9bnVsbH1nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCl7cmV0dXJuIHRoaXMudGltZVNlbGVjdGlvbj90aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCk6IiJ9Z2V0QXhpc1Bvc2l0aW9uRnJvbUVuZFN0ZXAoKXtyZXR1cm4gdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQ/dGhpcy5zY2FsZS5mb3J3YXJkKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sdGhpcy50aW1lU2VsZWN0aW9uPy5lbmQuc3RlcD8/dGhpcy5taW5NYXhTdGVwLm1heFN0ZXApOm51bGx9Z2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy5wcm9zcGVjdGl2ZVN0ZXA/bnVsbDp0aGlzLnNjYWxlLmZvcndhcmQodGhpcy5taW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCxbMCx0aGlzLmF4aXNTaXplXSx0aGlzLnByb3NwZWN0aXZlU3RlcCl9b25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkKGUpe3RoaXMucHJvc3BlY3RpdmVTdGVwPWV9Z2V0SGlnaGVzdFN0ZXAoKXtyZXR1cm4gdGhpcy5taW5NYXhTdGVwLm1heFN0ZXB9Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLm1pbk1heFN0ZXAubWluU3RlcH1nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRTdGVwQXRNb3VzZVBvc3Rpb24oZSl9Z2V0U3RlcEF0TW91c2VQb3N0aW9uKGUpe2xldCBpPU1hdGgucm91bmQodGhpcy5zY2FsZS5yZXZlcnNlKHRoaXMubWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQsWzAsdGhpcy5heGlzU2l6ZV0sZSkpO3JldHVybiBpPnRoaXMuZ2V0SGlnaGVzdFN0ZXAoKT90aGlzLmdldEhpZ2hlc3RTdGVwKCk6aTx0aGlzLmdldExvd2VzdFN0ZXAoKT90aGlzLmdldExvd2VzdFN0ZXAoKTppfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3RpbWVTZWxlY3Rpb246InRpbWVTZWxlY3Rpb24iLHNjYWxlOiJzY2FsZSIsbWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQ6Im1pbk1heEhvcml6b250YWxWaWV3RXh0ZW5kIixtaW5NYXhTdGVwOiJtaW5NYXhTdGVwIixheGlzU2l6ZToiYXhpc1NpemUiLGlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZDoiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixkaXNhYmxlSW50ZXJhY3Rpb246ImRpc2FibGVJbnRlcmFjdGlvbiJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6MTMsY29uc3RzOltbMywiYXhpc0RpcmVjdGlvbiIsInRpbWVTZWxlY3Rpb24iLCJzdGFydFN0ZXBBeGlzUG9zaXRpb24iLCJlbmRTdGVwQXhpc1Bvc2l0aW9uIiwicHJvc3BlY3RpdmVTdGVwQXhpc1Bvc2l0aW9uIiwiaGlnaGVzdFN0ZXAiLCJsb3dlc3RTdGVwIiwicHJvc3BlY3RpdmVTdGVwIiwiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIiwiY2FyZEZvYkhlbHBlciIsInNob3dFeHRlbmRlZExpbmUiLCJvblByb3NwZWN0aXZlU3RlcENoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiY2FyZC1mb2ItY29udHJvbGxlciIsMCksUCgib25Qcm9zcGVjdGl2ZVN0ZXBDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblByb3NwZWN0aXZlU3RlcENoYW5nZWQobyl9KSgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG8pfSkoIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdChvKX0pLHYoKSksMiZlJiYoUHQoInBvaW50ZXItZXZlbnRzIixpLmRpc2FibGVJbnRlcmFjdGlvbj8ibm9uZSI6ImFsbCIpLHkoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJwcm9zcGVjdGl2ZVN0ZXBBeGlzUG9zaXRpb24iLGkuZ2V0QXhpc1Bvc2l0aW9uRnJvbVByb3NwZWN0aXZlU3RlcCgpKSgiaGlnaGVzdFN0ZXAiLGkuZ2V0SGlnaGVzdFN0ZXAoKSkoImxvd2VzdFN0ZXAiLGkuZ2V0TG93ZXN0U3RlcCgpKSgicHJvc3BlY3RpdmVTdGVwIixpLnByb3NwZWN0aXZlU3RlcCkoImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsaS5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpKCJzaG93RXh0ZW5kZWRMaW5lIiwhMCkpfSxkZXBlbmRlbmNpZXM6W0drXSxzdHlsZXM6WyJzY2FsYXItY2FyZC1mb2ItY29udHJvbGxlciAudGltZS1mb2Itd3JhcHBlcntoZWlnaHQ6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEFZZShuLHQpezEmbiYmTygwLCJtYXQtc3Bpbm5lciIsMjUpfWZ1bmN0aW9uIElZZShuLHQpezEmbiYmKF8oMCwidGgiKSxBKDEsIlNtb290aGVkIiksdigpKX1mdW5jdGlvbiBQWWUobix0KXtpZigxJm4mJihzbigwKSxPKDEsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDMxKSxBKDIsIi8iKSxhbigpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7QygxKSx5KCJhbGlhcyIsZS5tZXRhZGF0YS5hbGlhcyl9fWZ1bmN0aW9uIFJZZShuLHQpe2lmKDEmbiYmKF8oMCwidGQiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCkuJGltcGxpY2l0LGk9UygyKTtDKDEpLGplKCIgIixpLnZhbHVlRm9ybWF0dGVyLmZvcm1hdFNob3J0KGUuZGF0YVBvaW50LnkpLCIgIil9fWZ1bmN0aW9uIE9ZZShuLHQpe2lmKDEmbiYmKHNuKDApLF8oMSwidHIiLDI5KSgyLCJ0ZCIsMzApLE8oMywic3BhbiIpLHYoKSxfKDQsInRkIiwyKSxFKDUsUFllLDMsMSwibmctY29udGFpbmVyIiwyMiksQSg2KSx2KCksRSg3LFJZZSwyLDEsInRkIiwyMiksXyg4LCJ0ZCIpLEEoOSksdigpLF8oMTAsInRkIiksQSgxMSksdigpLF8oMTIsInRkIiksQSgxMyksQigxNCwiZGF0ZSIpLHYoKSxfKDE1LCJ0ZCIpLEEoMTYpLHYoKSgpLGFuKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO0MoMSksZXQoImNsb3Nlc3QiLGUubWV0YWRhdGEuY2xvc2VzdCksQygyKSxQdCgiYmFja2dyb3VuZC1jb2xvciIsZS5tZXRhZGF0YS5jb2xvciksQygyKSx5KCJuZ0lmIixlLm1ldGFkYXRhLmFsaWFzKSxDKDEpLGplKCIiLGUubWV0YWRhdGEuZGlzcGxheU5hbWUsIiAiKSxDKDEpLHkoIm5nSWYiLGkuc21vb3RoaW5nRW5hYmxlZCksQygyKSx5dChpLnZhbHVlRm9ybWF0dGVyLmZvcm1hdFNob3J0KGUuZGF0YVBvaW50LnZhbHVlKSksQygyKSx5dChpLnN0ZXBGb3JtYXR0ZXIuZm9ybWF0U2hvcnQoZS5kYXRhUG9pbnQuc3RlcCkpLEMoMikseXQoSmYoMTQsMTEsZS5kYXRhUG9pbnQud2FsbFRpbWUsInNob3J0IikpLEMoMyksamUoIiAiLGkucmVsYXRpdmVYRm9ybWF0dGVyLmZvcm1hdFJlYWRhYmxlKGUuZGF0YVBvaW50LnJlbGF0aXZlVGltZUluTXMpLCIgIil9fWZ1bmN0aW9uIGtZZShuLHQpe2lmKDEmbiYmKF8oMCwidGFibGUiLDI2KSgxLCJ0aGVhZCIpKDIsInRyIiksTygzLCJ0aCIsMjcpLF8oNCwidGgiKSxBKDUsIlJ1biIpLHYoKSxFKDYsSVllLDIsMCwidGgiLDIyKSxfKDcsInRoIiksQSg4LCJWYWx1ZSIpLHYoKSxfKDksInRoIiksQSgxMCwiU3RlcCIpLHYoKSxfKDExLCJ0aCIpLEEoMTIsIlRpbWUiKSx2KCksXygxMywidGgiKSxBKDE0LCJSZWxhdGl2ZSIpLHYoKSgpKCksXygxNSwidGJvZHkiKSxFKDE2LE9ZZSwxNywxNCwibmctY29udGFpbmVyIiwyOCksdigpKCkpLDImbil7bGV0IGU9dC5kYXRhLGk9dC5jdXJzb3JMb2NhdGlvbkluRGF0YUNvb3JkLHI9dC5jdXJzb3JMb2NhdGlvbixvPVMoKTtDKDYpLHkoIm5nSWYiLG8uc21vb3RoaW5nRW5hYmxlZCksQygxMCkseSgibmdGb3JPZiIsby5nZXRDdXJzb3JBd2FyZVRvb2x0aXBEYXRhKGUsaSxyKSkoIm5nRm9yVHJhY2tCeSIsby50cmFja0J5VG9vbHRpcERhdHVtKX19ZnVuY3Rpb24gRlllKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLF8oMSwiZGl2IiwzMikoMiwic2NhbGFyLWNhcmQtZGF0YS10YWJsZSIsMzMpLFAoInNvcnREYXRhQnkiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuc29ydERhdGFCeShyKSl9KSgib3JkZXJDb2x1bW5zIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLnJlb3JkZXJDb2x1bW5IZWFkZXJzLmVtaXQocikpfSksdigpKCksYW4oKX1pZigyJm4pe2xldCBlPVMoKTtDKDIpLHkoImNoYXJ0TWV0YWRhdGFNYXAiLGUuY2hhcnRNZXRhZGF0YU1hcCkoImRhdGFTZXJpZXMiLGUuZGF0YVNlcmllcykoInN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24iLGUuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoImNvbHVtbkhlYWRlcnMiLGUuY29sdW1uSGVhZGVycykoInNvcnRpbmdJbmZvIixlLnNvcnRpbmdJbmZvKSgiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLGUuY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQpKCJzbW9vdGhpbmdFbmFibGVkIixlLnNtb290aGluZ0VuYWJsZWQpfX12YXIgTlllPWZ1bmN0aW9uKG4pe3JldHVyblswLG5dfSxMWWU9ZnVuY3Rpb24oKXtyZXR1cm57Im91dC1vZi1zZWxlY3RlZC10aW1lIjohMCxlbmQ6ITAscmFuZ2U6ITB9fTtmdW5jdGlvbiBCWWUobix0KXtpZigxJm4mJk8oMCwiZGl2IiwzNCksMiZuKXtsZXQgZT1TKDIpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPVMoKTtQdCgibGVmdCIsby5mb3J3YXJkKGkueCxPbigzLE5ZZSxyLndpZHRoKSxudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kP251bGw6cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSsicHgiKSx5KCJuZ0NsYXNzIixRcCg1LExZZSkpfX12YXIgVlllPWZ1bmN0aW9uKG4pe3JldHVybltuLDBdfSxIWWU9ZnVuY3Rpb24obil7cmV0dXJueyJvdXQtb2Ytc2VsZWN0ZWQtdGltZSI6ITAsc3RhcnQ6ITAscmFuZ2U6bn19O2Z1bmN0aW9uIFVZZShuLHQpe2lmKDEmbiYmKHNuKDApLE8oMSwiZGl2IiwzNCksRSgyLEJZZSwxLDYsImRpdiIsMzUpLGFuKCkpLDImbil7bGV0IGU9UygpLGk9ZS52aWV3RXh0ZW50LHI9ZS5kb21EaW1lbnNpb24sbz1lLnhTY2FsZSxzPVMoKTtDKDEpLFB0KCJyaWdodCIsby5mb3J3YXJkKGkueCxPbig0LFZZZSxyLndpZHRoKSxzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCkrInB4IikseSgibmdDbGFzcyIsT24oNixIWWUsIShudWxsPT1zLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24uZW5kfHwhcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZC5zdGVwKSkpLEMoMSkseSgibmdJZiIsbnVsbD09cy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uLmVuZD9udWxsOnMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbi5lbmQuc3RlcCl9fWZ1bmN0aW9uIHpZZShuLHQpezEmbiYmRSgwLFVZZSwzLDgsIm5nLWNvbnRhaW5lciIsMjIpLDImbiYmeSgibmdJZiIsUygpLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24pfWZ1bmN0aW9uIGpZZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtzbigwKSxfKDEsInNjYWxhci1jYXJkLWZvYi1jb250cm9sbGVyIiwzNiksUCgib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25UaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLm9uRm9iUmVtb3ZlZCgpKX0pLHYoKSxhbigpfWlmKDImbil7bGV0IGU9UygpLGk9ZS5pbnRlcmFjdGlvblN0YXRlLHI9ZS54U2NhbGUsbz1lLnZpZXdFeHRlbnQscz1lLmRvbURpbWVuc2lvbixhPVMoKTtDKDEpLHkoImRpc2FibGVJbnRlcmFjdGlvbiIsIk5PTkUiIT09aSkoInRpbWVTZWxlY3Rpb24iLGEuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbikoInNjYWxlIixyKSgibWluTWF4SG9yaXpvbnRhbFZpZXdFeHRlbmQiLG8ueCkoIm1pbk1heFN0ZXAiLGEubWluTWF4U3RlcCkoImF4aXNTaXplIixzLndpZHRoKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixhLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fWZ1bmN0aW9uIEdZZShuLHQpezEmbiYmRSgwLGpZZSwyLDcsIm5nLWNvbnRhaW5lciIsMjIpLDImbiYmeSgibmdJZiIsUygpLnNob3dGb2JDb250cm9sbGVyKCkpfXZhciBncGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMucmVmPWUsdGhpcy5kaWFsb2c9aSx0aGlzLkRhdGFMb2FkU3RhdGU9T2UsdGhpcy5SZW5kZXJlclR5cGU9ZHIsdGhpcy5TY2FsZVR5cGU9TnIsdGhpcy5pc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ9ITEsdGhpcy5vbkZ1bGxTaXplVG9nZ2xlPW5ldyBHLHRoaXMub25QaW5DbGlja2VkPW5ldyBHLHRoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uU3RlcFNlbGVjdG9yVG9nZ2xlZD1uZXcgRyx0aGlzLm9uRGF0YVRhYmxlU29ydGluZz1uZXcgRyx0aGlzLnJlb3JkZXJDb2x1bW5IZWFkZXJzPW5ldyBHLHRoaXMub25MaW5lQ2hhcnRab29tPW5ldyBHLHRoaXMuc29ydGluZ0luZm89e2hlYWRlcjpLdC5SVU4sb3JkZXI6eGwuQVNDRU5ESU5HfSx0aGlzLnlTY2FsZVR5cGU9TnIuTElORUFSLHRoaXMuaXNWaWV3Qm94T3ZlcnJpZGRlbj0hMSx0aGlzLnJlbGF0aXZlWEZvcm1hdHRlcj1TUyx0aGlzLnZhbHVlRm9ybWF0dGVyPXlwLHRoaXMuc3RlcEZvcm1hdHRlcj1NZH10b2dnbGVZU2NhbGVUeXBlKCl7dGhpcy55U2NhbGVUeXBlPXRoaXMueVNjYWxlVHlwZT09PU5yLkxJTkVBUj9Oci5MT0cxMDpOci5MSU5FQVJ9c29ydERhdGFCeShlKXt0aGlzLnNvcnRpbmdJbmZvPWUsdGhpcy5vbkRhdGFUYWJsZVNvcnRpbmcuZW1pdChlKX1yZXNldERvbWFpbigpe3RoaXMubGluZUNoYXJ0JiZ0aGlzLmxpbmVDaGFydC52aWV3Qm94UmVzZXQoKX10cmFja0J5VG9vbHRpcERhdHVtKGUsaSl7cmV0dXJuIGkuaWR9Z2V0Q3VzdG9tWEZvcm1hdHRlcigpe3N3aXRjaCh0aGlzLnhBeGlzVHlwZSl7Y2FzZSBKaS5SRUxBVElWRTpyZXR1cm4gU1M7Y2FzZSBKaS5TVEVQOnJldHVybiBqY2U7ZGVmYXVsdDpyZXR1cm59fWdldEN1cnNvckF3YXJlVG9vbHRpcERhdGEoZSxpLHIpe2xldCBvPWUubWFwKGw9Pih7Li4ubCxtZXRhZGF0YTp7Li4ubC5tZXRhZGF0YSxjbG9zZXN0OiExLGRpc3RUb0N1cnNvclBpeGVsczpNYXRoLmh5cG90KGwuZG9tUG9pbnQueC1yLngsbC5kb21Qb2ludC55LXIueSksZGlzdFRvQ3Vyc29yWDpsLmRhdGFQb2ludC54LWkueCxkaXN0VG9DdXJzb3JZOmwuZGF0YVBvaW50LnktaS55fX0pKSxzPTEvMCxhPTA7Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDtsKyspcz5vW2xdLm1ldGFkYXRhLmRpc3RUb0N1cnNvclBpeGVscyYmKHM9b1tsXS5tZXRhZGF0YS5kaXN0VG9DdXJzb3JQaXhlbHMsYT1sKTtzd2l0Y2goby5sZW5ndGgmJihvW2FdLm1ldGFkYXRhLmNsb3Nlc3Q9ITApLHRoaXMudG9vbHRpcFNvcnQpe2Nhc2UgT28uQVNDRU5ESU5HOnJldHVybiBvLnNvcnQoKGwsYyk9PmwuZGF0YVBvaW50LnktYy5kYXRhUG9pbnQueSk7Y2FzZSBPby5ERVNDRU5ESU5HOnJldHVybiBvLnNvcnQoKGwsYyk9PmMuZGF0YVBvaW50LnktbC5kYXRhUG9pbnQueSk7Y2FzZSBPby5ORUFSRVNUOnJldHVybiBvLnNvcnQoKGwsYyk9PmwubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzLWMubWV0YWRhdGEuZGlzdFRvQ3Vyc29yUGl4ZWxzKTtjYXNlIE9vLk5FQVJFU1RfWTpyZXR1cm4gby5zb3J0KChsLGMpPT5sLm1ldGFkYXRhLmRpc3RUb0N1cnNvclktYy5tZXRhZGF0YS5kaXN0VG9DdXJzb3JZKTtjYXNlIE9vLkRFRkFVTFQ6Y2FzZSBPby5BTFBIQUJFVElDQUw6cmV0dXJuIG8uc29ydCgobCxjKT0+bC5tZXRhZGF0YS5kaXNwbGF5TmFtZTxjLm1ldGFkYXRhLmRpc3BsYXlOYW1lPy0xOmwubWV0YWRhdGEuZGlzcGxheU5hbWU+Yy5tZXRhZGF0YS5kaXNwbGF5TmFtZT8xOjApfX1vcGVuRGF0YURvd25sb2FkRGlhbG9nKCl7dGhpcy5kaWFsb2cub3Blbih0aGlzLkRhdGFEb3dubG9hZENvbXBvbmVudCx7ZGF0YTp7Y2FyZElkOnRoaXMuY2FyZElkfX0pfW9uRm9iUmVtb3ZlZCgpe3RoaXMub25TdGVwU2VsZWN0b3JUb2dnbGVkLmVtaXQoYmwuRk9CX0RFU0VMRUNUKX1zaG93RGF0YVRhYmxlKCl7cmV0dXJuIHRoaXMueEF4aXNUeXBlPT09SmkuU1RFUCYmbnVsbCE9PXRoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbn1zaG93Rm9iQ29udHJvbGxlcigpe3JldHVybiB0aGlzLnhBeGlzVHlwZT09PUppLlNURVAmJihudWxsIT09dGhpcy5zdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9ufHx0aGlzLmlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0odmwpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJzY2FsYXItY2FyZC1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChqayw1KSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmxpbmVDaGFydD1yLmZpcnN0KX19LGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGNoYXJ0TWV0YWRhdGFNYXA6ImNoYXJ0TWV0YWRhdGFNYXAiLERhdGFEb3dubG9hZENvbXBvbmVudDoiRGF0YURvd25sb2FkQ29tcG9uZW50IixkYXRhU2VyaWVzOiJkYXRhU2VyaWVzIixpZ25vcmVPdXRsaWVyczoiaWdub3JlT3V0bGllcnMiLGlzQ2FyZFZpc2libGU6ImlzQ2FyZFZpc2libGUiLGlzUGlubmVkOiJpc1Bpbm5lZCIsbG9hZFN0YXRlOiJsb2FkU3RhdGUiLHNob3dGdWxsU2l6ZToic2hvd0Z1bGxTaXplIixzbW9vdGhpbmdFbmFibGVkOiJzbW9vdGhpbmdFbmFibGVkIix0YWc6InRhZyIsdGl0bGU6InRpdGxlIix0b29sdGlwU29ydDoidG9vbHRpcFNvcnQiLHhBeGlzVHlwZToieEF4aXNUeXBlIix4U2NhbGVUeXBlOiJ4U2NhbGVUeXBlIix1c2VEYXJrTW9kZToidXNlRGFya01vZGUiLGZvcmNlU3ZnOiJmb3JjZVN2ZyIsY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQ6ImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uOiJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixpc1Byb3NwZWN0aXZlRm9iRmVhdHVyZUVuYWJsZWQ6ImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsbWluTWF4U3RlcDoibWluTWF4U3RlcCIsY29sdW1uSGVhZGVyczoiY29sdW1uSGVhZGVycyJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvblRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvblN0ZXBTZWxlY3RvclRvZ2dsZWQ6Im9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsb25EYXRhVGFibGVTb3J0aW5nOiJvbkRhdGFUYWJsZVNvcnRpbmciLHJlb3JkZXJDb2x1bW5IZWFkZXJzOiJyZW9yZGVyQ29sdW1uSGVhZGVycyIsb25MaW5lQ2hhcnRab29tOiJvbkxpbmVDaGFydFpvb20ifSxkZWNsczozNix2YXJzOjI3LGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGUsaSxyLG87cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHJlc2V0cyBsaW5lIGNoYXJ0IGRvbWFpbiB0byB0aGUgZGF0YeKQn2U2OGE1NTI5NDFhYjQyN2E5OWU3NDM3ZTA4NDQzZjMwYWM3MWNjZDbikJ8zODMwNjQ2NTIxMDU4MjY4NTU4OkZpdCBsaW5lIGNoYXJ0IGRvbWFpbnMgdG8gZGF0YWAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIHRvIHBpbiBhIGNhcmQu4pCfZTY2NWRjNzEyYmQ1ZjE4ZDRkZmEzYTI5ZTEyNWQ1NjVjYzUxZTJmNuKQnzcyODQ2MDY0MjYyMzQzNzUzNDQ6UGluIGNhcmRgLGk9JGxvY2FsaXplYDpBIGJ1dHRvbiBvbiBsaW5lIGNoYXJ0IHRoYXQgdG9nZ2xlcyBmdWxsIHNpemUgbW9kZS7ikJ9mYzhmNzY3ZDBiOWY5MzAxODdhMWJhZTM0NDc3YWQyODczNmVjZTMz4pCfOTE1NzIxNTYzNjM4OTI2NTk3OlRvZ2dsZSBmdWxsIHNpemUgbW9kZWAscj0kbG9jYWxpemVgOkFuIG92ZXJmbG93IG1lbnUgYnV0dG9uIHRoYXQgb3BlbnMgbW9yZSBsaW5lIGNoYXJ0IG9wdGlvbnPikJ9iMjYwZmFiOTQ2YTMwNzdjZTIwZmQyOGUzMzY5NzlmNTg2NzIwZThk4pCfODc4MDUzNzQwMjEwMzM2NDM1Ok1vcmUgbGluZSBjaGFydCBvcHRpb25zYCxvPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCB0b2dnbGVzIGxvZyBzY2FsZSBvbiB5LWF4aXMgb24gYSBsaW5lIGNoYXJ04pCfZmU5MWY5NmFiOWIzYmFjYTVhNDg5MTNmMmIwZmFlODQ0ODNkOTNlM+KQnzMzNzQ2NDU2MjA2Mzg4ODM5MjY6VG9nZ2xlIFktYXhpcyBsb2cgc2NhbGUgb24gbGluZSBjaGFydGAsW1sxLCJhbHdheXMtdmlzaWJsZSJdLFsxLCJoZWFkaW5nIl0sWzEsIm5hbWUiXSxbMSwidGFnIiwzLCJ0aXRsZSIsInZhbHVlIl0sWzMsImlzQ2xpcHBlZCJdLFsxLCJjb250cm9scyJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJkaXNhYmxlZCIsInRpdGxlIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc19vdmVyc2Nhbl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGksInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsciwidGl0bGUiLCJNb3JlIGxpbmUgY2hhcnQgb3B0aW9ucyIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJtb3JlX3ZlcnRfMjRweCJdLFsibWVudSIsIm1hdE1lbnUiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJhcmlhLWxhYmVsIixvLDMsImNsaWNrIl0sWyJzdmdJY29uIiwibGluZV93ZWlnaHRfMjRweCJdLFsibWF0LW1lbnUtaXRlbSIsIiIsImFyaWEtbGFiZWwiLCJPcGVuIGRpYWxvZyB0byBkb3dubG9hZCBkYXRhIiwzLCJjbGljayJdLFsic3ZnSWNvbiIsImdldF9hcHBfMjRweCJdLFsxLCJjaGFydC1jb250YWluZXIiXSxbImRpYW1ldGVyIiwiMTgiLDQsIm5nSWYiXSxbMywiZGlzYWJsZVVwZGF0ZSIsInByZWZlcnJlZFJlbmRlcmVyVHlwZSIsInNlcmllc0RhdGEiLCJzZXJpZXNNZXRhZGF0YU1hcCIsInhTY2FsZVR5cGUiLCJ5U2NhbGVUeXBlIiwiY3VzdG9tWEZvcm1hdHRlciIsImlnbm9yZVlPdXRsaWVycyIsInRvb2x0aXBUZW1wbGF0ZSIsInVzZURhcmtNb2RlIiwiY3VzdG9tVmlzVGVtcGxhdGUiLCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsIm9uVmlld0JveE92ZXJyaWRkZW4iLCJ2aWV3Qm94Q2hhbmdlZCJdLFsidG9vbHRpcCIsIiJdLFs0LCJuZ0lmIl0sWyJsaW5lQ2hhcnRDdXN0b21WaXMiLCIiXSxbImxpbmVDaGFydEN1c3RvbVhBeGlzVmlzIiwiIl0sWyJkaWFtZXRlciIsIjE4Il0sWzEsInRvb2x0aXAiXSxbMSwiY2lyY2xlLWhlYWRlciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwidG9vbHRpcC1yb3ciXSxbMSwidG9vbHRpcC1yb3ctY2lyY2xlIl0sWzMsImFsaWFzIl0sWzEsImRhdGEtdGFibGUtY29udGFpbmVyIl0sWzMsImNoYXJ0TWV0YWRhdGFNYXAiLCJkYXRhU2VyaWVzIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImNvbHVtbkhlYWRlcnMiLCJzb3J0aW5nSW5mbyIsImNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkIiwic21vb3RoaW5nRW5hYmxlZCIsInNvcnREYXRhQnkiLCJvcmRlckNvbHVtbnMiXSxbMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIiwibGVmdCIsNCwibmdJZiJdLFszLCJkaXNhYmxlSW50ZXJhY3Rpb24iLCJ0aW1lU2VsZWN0aW9uIiwic2NhbGUiLCJtaW5NYXhIb3Jpem9udGFsVmlld0V4dGVuZCIsIm1pbk1heFN0ZXAiLCJheGlzU2l6ZSIsImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsInNwYW4iLDIpLE8oMywidGItdHJ1bmNhdGVkLXBhdGgiLDMpKDQsInZpcy1saW5rZWQtdGltZS1zZWxlY3Rpb24td2FybmluZyIsNCksdigpLF8oNSwic3BhbiIsNSkoNiwiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5yZXNldERvbWFpbigpfSksQig3LCJhc3luYyIpLEIoOCwiYXN5bmMiKSxPKDksIm1hdC1pY29uIiw3KSx2KCksXygxMCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxPKDExLCJtYXQtaWNvbiIsOSksdigpLF8oMTIsImJ1dHRvbiIsMTApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uRnVsbFNpemVUb2dnbGUuZW1pdCgpfSksTygxMywibWF0LWljb24iLDkpLHYoKSxfKDE0LCJidXR0b24iLDExKSxPKDE1LCJtYXQtaWNvbiIsMTIpLHYoKSxfKDE2LCJtYXQtbWVudSIsbnVsbCwxMykoMTgsImJ1dHRvbiIsMTQpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVlTY2FsZVR5cGUoKX0pLE8oMTksIm1hdC1pY29uIiwxNSksXygyMCwic3BhbiIpLEEoMjEsIlRvZ2dsZSBZLWF4aXMgbG9nIHNjYWxlIiksdigpKCksXygyMiwiYnV0dG9uIiwxNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub3BlbkRhdGFEb3dubG9hZERpYWxvZygpfSksTygyMywibWF0LWljb24iLDE3KSxfKDI0LCJzcGFuIiksQSgyNSwiRG93bmxvYWQgZGF0YSIpLHYoKSgpKCkoKSgpLF8oMjYsImRpdiIsMTgpLEUoMjcsQVllLDEsMCwibWF0LXNwaW5uZXIiLDE5KSxfKDI4LCJsaW5lLWNoYXJ0IiwyMCksUCgib25WaWV3Qm94T3ZlcnJpZGRlbiIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaXNWaWV3Qm94T3ZlcnJpZGRlbj1vfSkoInZpZXdCb3hDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkxpbmVDaGFydFpvb20uZW1pdChvKX0pLHYoKSxFKDI5LGtZZSwxNywzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyMSxxdCksdigpKCksRSgzMSxGWWUsMyw3LCJuZy1jb250YWluZXIiLDIyKSxFKDMyLHpZZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDIzLHF0KSxFKDM0LEdZZSwxLDEsIm5nLXRlbXBsYXRlIixudWxsLDI0LHF0KSksMiZlKXtsZXQgcj0kZSgxNyksbz0kZSgzMCkscz0kZSgzMyksYT0kZSgzNSk7QygzKSxaaSgidGl0bGUiLGkudGFnKSxaaSgidmFsdWUiLGkudGl0bGUpLEMoMSkseSgiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSxDKDIpLHkoImRpc2FibGVkIiwhaS5saW5lQ2hhcnR8fCFVKDcsMjMsaS5saW5lQ2hhcnQuZ2V0SXNWaWV3Qm94T3ZlcnJpZGRlbigpKSkoInRpdGxlIixpLmxpbmVDaGFydCYmVSg4LDI1LGkubGluZUNoYXJ0LmdldElzVmlld0JveE92ZXJyaWRkZW4oKSk/IkxpbmUgY2hhcnQgaXMgYWxyZWFkeSBmaXR0ZWQgdG8gZGF0YS4gV2hlbiBkYXRhIHVwZGF0ZXMsIHRoZSBsaW5lIGNoYXJ0IHdpbGwgYXV0byBmaXQgdG8gaXRzIGRvbWFpbi4iOiJGaXQgbGluZSBjaGFydCBkb21haW5zIHRvIGRhdGEiKSxDKDQpLHplKCJ0aXRsZSIsaS5pc1Bpbm5lZD8iVW5waW4gY2FyZCI6IlBpbiBjYXJkIiksQygxKSx5KCJzdmdJY29uIixpLmlzUGlubmVkPyJrZWVwXzI0cHgiOiJrZWVwX291dGxpbmVfMjRweCIpLEMoMikseSgic3ZnSWNvbiIsaS5zaG93RnVsbFNpemU/ImZ1bGxzY3JlZW5fZXhpdF8yNHB4IjoiZnVsbHNjcmVlbl8yNHB4IiksQygxKSx5KCJtYXRNZW51VHJpZ2dlckZvciIsciksQygxMykseSgibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksQygxKSx5KCJkaXNhYmxlVXBkYXRlIiwhaS5pc0NhcmRWaXNpYmxlKSgicHJlZmVycmVkUmVuZGVyZXJUeXBlIixpLmZvcmNlU3ZnP2kuUmVuZGVyZXJUeXBlLlNWRzppLlJlbmRlcmVyVHlwZS5XRUJHTCkoInNlcmllc0RhdGEiLGkuZGF0YVNlcmllcykoInNlcmllc01ldGFkYXRhTWFwIixpLmNoYXJ0TWV0YWRhdGFNYXApKCJ4U2NhbGVUeXBlIixpLnhTY2FsZVR5cGUpKCJ5U2NhbGVUeXBlIixpLnlTY2FsZVR5cGUpKCJjdXN0b21YRm9ybWF0dGVyIixpLmdldEN1c3RvbVhGb3JtYXR0ZXIoKSkoImlnbm9yZVlPdXRsaWVycyIsaS5pZ25vcmVPdXRsaWVycykoInRvb2x0aXBUZW1wbGF0ZSIsbykoInVzZURhcmtNb2RlIixpLnVzZURhcmtNb2RlKSgiY3VzdG9tVmlzVGVtcGxhdGUiLHMpKCJjdXN0b21DaGFydE92ZXJsYXlUZW1wbGF0ZSIsYSksQygzKSx5KCJuZ0lmIixpLnNob3dEYXRhVGFibGUoKSl9fSxkZXBlbmRlbmNpZXM6W0ZuLGRuLEJlLGN5LGprLF9uLEd0LGhkLG51LGZkLEJvLHV5LGR5LHBwZSxtcGUsR2UsVV9dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5hbHdheXMtdmlzaWJsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6Mjk4cHg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtc2l6ZToxNHB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1ib3R0b206NHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dhcDo1cHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOmF1dG8gYXV0b30uaGVhZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICB2aXMtc2VsZWN0ZWQtdGltZS1jbGlwcGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MS4yZW07bGluZS1oZWlnaHQ6MH0udGFnW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59LnBpbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxOHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7ZmxleC1zaHJpbms6MDttYXJnaW4tcmlnaHQ6LTEycHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWdyb3c6MX0uY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMXB4O3RvcDoxMXB4fS5jaGFydC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgbGluZS1jaGFydFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXNwYWNpbmc6NHB4O2ZvbnQtc2l6ZToxM3B4fS50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnR9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtcm93LWNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7d2lkdGg6MTJweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NTAlO2JvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwcHg7d2lkdGg6MTBweH0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xvc2VzdFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1yb3ctY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IHNwYW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojZmZmO2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgMXB4ICNmZmZ9Lm91dC1vZi1zZWxlY3RlZC10aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZX0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnRbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yaWdodC13aWR0aDoycHg7bWFyZ2luLWxlZnQ6LTFweH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuc3RhcnQucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUuZW5kW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdC13aWR0aDoycHg7bWFyZ2luLXJpZ2h0Oi0xcHg7cmlnaHQ6MH0ub3V0LW9mLXNlbGVjdGVkLXRpbWUucmFuZ2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm91dC1vZi1zZWxlY3RlZC10aW1lLnJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjQpfS5kYXRhLXRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MTAwcHg7b3ZlcmZsb3c6YXV0b30iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGtHPS0xLzAsRkc9MS8wO2Z1bmN0aW9uIHFZZShuLHQpe3JldHVybiBuLmxlbmd0aD09PXQubGVuZ3RoJiZuLmV2ZXJ5KChlLGkpPT57bGV0IHI9dFtpXSxvPWUucG9pbnRzLHM9ci5wb2ludHM7cmV0dXJuIGUucnVuSWQ9PT1yLnJ1bklkJiZvLmxlbmd0aD09PXMubGVuZ3RoJiZvLmV2ZXJ5KChhLGwpPT57bGV0IGM9c1tsXTtyZXR1cm4gYS54PT09Yy54JiZhLnk9PT1jLnl9KX0pfXZhciBfcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5EYXRhRG93bmxvYWRDb21wb25lbnQ9b3NlLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgRyx0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHLHRoaXMuaXNWaXNpYmxlPSExLHRoaXMuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChEJCksdGhpcy5taW5NYXhTdGVwcyQ9bmV3IGhyKHttaW5TdGVwOmtHLG1heFN0ZXA6Rkd9KSx0aGlzLmxpbmVDaGFydFpvb20kPW5ldyBocih7bWluU3RlcDprRyxtYXhTdGVwOkZHfSksdGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJD1uZXcgaHIobnVsbCksdGhpcy51c2VEYXJrTW9kZSQ9dGhpcy5zdG9yZS5zZWxlY3QoUXUpLHRoaXMuaWdub3JlT3V0bGllcnMkPXRoaXMuc3RvcmUuc2VsZWN0KGh2KSx0aGlzLnRvb2x0aXBTb3J0JD10aGlzLnN0b3JlLnNlbGVjdChwdiksdGhpcy54QXhpc1R5cGUkPXRoaXMuc3RvcmUuc2VsZWN0KHRkKSx0aGlzLmZvcmNlU3ZnJD10aGlzLnN0b3JlLnNlbGVjdCh3JCksdGhpcy5jb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCQ9dGhpcy5zdG9yZS5zZWxlY3QocUEpLHRoaXMueFNjYWxlVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QodGQpLnBpcGUoTChpPT57c3dpdGNoKGkpe2Nhc2UgSmkuU1RFUDpjYXNlIEppLlJFTEFUSVZFOnJldHVybiBOci5MSU5FQVI7Y2FzZSBKaS5XQUxMX1RJTUU6cmV0dXJuIE5yLlRJTUU7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgeEF4aXNUeXBlIGZvciBsaW5lIGNoYXJ0LiAke2l9YCl9fSkpLHRoaXMuc2NhbGFyU21vb3RoaW5nJD10aGlzLnN0b3JlLnNlbGVjdChvcCksdGhpcy5zbW9vdGhpbmdFbmFibGVkJD10aGlzLnN0b3JlLnNlbGVjdChvcCkucGlwZShMKGk9Pmk+MCkpLHRoaXMuc2hvd0Z1bGxTaXplPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9b25WaXNpYmlsaXR5Q2hhbmdlKHt2aXNpYmxlOmV9KXt0aGlzLmlzVmlzaWJsZT1lfWlzU2NhbGFyQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXJpLlNDQUxBUlN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc2hvd0Z1bGxTaXplPSF0aGlzLnNob3dGdWxsU2l6ZSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0aGlzLnNob3dGdWxsU2l6ZSksdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KHRjLHRoaXMuY2FyZElkKS5waXBlKFllKGw9PiEhbCYmdGhpcy5pc1NjYWxhckNhcmRNZXRhZGF0YShsKSksTChsPT5sKSk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoWyJzbW9vdGhlZCIsbF0pfWxldCBhPXRoaXMuc3RvcmUuc2VsZWN0KHhoLHRoaXMuY2FyZElkKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksWWUobD0+Qm9vbGVhbihsKSksTChsPT5sKSxNYSgxKSkucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdCh0ZCkpLEwoKFtsLGNdKT0+T2JqZWN0LmtleXMobCkubWFwKHA9Pih7cnVuSWQ6cCxwb2ludHM6dGhpcy5zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGxbcF0sYyl9KSkpLHlpKHFZZSkpLnBpcGUoZnIodGhpcy5zdG9yZS5zZWxlY3QoT0kpKSxzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLEwoKFtsLGNdKT0+Yz9mdW5jdGlvbihuKXtsZXQgdD1bXTtmb3IobGV0IGUgb2Ygbil7bGV0IGk9W10scj1OdW1iZXIuaXNGaW5pdGUoZS5wb2ludHNbMF0/LngpP2UucG9pbnRzWzBdLng6LTEvMCxvPVtdO2ZvcihsZXQgcyBvZiBlLnBvaW50cylOdW1iZXIuaXNGaW5pdGUocy54KT8ocy54PHImJihpLnB1c2goe3Nlcmllc0lkOkpTT04uc3RyaW5naWZ5KFtlLnJ1bklkLGkubGVuZ3RoXSkscnVuSWQ6ZS5ydW5JZCxwb2ludHM6b30pLG89W10pLG8ucHVzaChzKSxyPXMueCk6by5wdXNoKHMpO2kucHVzaCh7c2VyaWVzSWQ6SlNPTi5zdHJpbmdpZnkoW2UucnVuSWQsaS5sZW5ndGhdKSxydW5JZDplLnJ1bklkLHBvaW50czpvfSk7Zm9yKGxldCBzPTA7czxpLmxlbmd0aDtzKyspdC5wdXNoKHsuLi5pW3NdLHBhcnRpdGlvbkluZGV4OnMscGFydGl0aW9uU2l6ZTppLmxlbmd0aH0pfXJldHVybiB0fShsKTpsLm1hcCh1PT4oey4uLnUsc2VyaWVzSWQ6dS5ydW5JZCxwYXJ0aXRpb25JbmRleDowLHBhcnRpdGlvblNpemU6MX0pKSksTChsPT5sLm1hcChjPT57bGV0IHU9Yy5wb2ludHNbMF0/LndhbGxUaW1lO3JldHVybnsuLi5jLHBvaW50czpjLnBvaW50cy5tYXAoZD0+KHsuLi5kLHJlbGF0aXZlVGltZUluTXM6ZC53YWxsVGltZS11fSkpfX0pKSxmcih0aGlzLnN0b3JlLnNlbGVjdCh0ZCkpLEwoKFtsLGNdKT0+bC5tYXAodT0+KHsuLi51LHBvaW50czp1LnBvaW50cy5tYXAoZD0+e2xldCBwO3N3aXRjaChjKXtjYXNlIEppLlJFTEFUSVZFOnA9ZC5yZWxhdGl2ZVRpbWVJbk1zO2JyZWFrO2Nhc2UgSmkuV0FMTF9USU1FOnA9ZC53YWxsVGltZTticmVhaztkZWZhdWx0OnA9ZC5zdGVwfXJldHVybnsuLi5kLHg6cH19KX0pKSksTWEoMSkpO0x0KFthLHRoaXMubGluZUNoYXJ0Wm9vbSRdKS5zdWJzY3JpYmUoKFtsLGNdKT0+e2xldCB1PWwubWFwKCh7cG9pbnRzOm19KT0+bS5tYXAoKHt4Onh9KT0+eCkpLmZsYXQoKSxkPTA9PT11Lmxlbmd0aD9rRzpNYXRoLm1pbiguLi51KSxwPTA9PT11Lmxlbmd0aD9GRzpNYXRoLm1heCguLi51KSxoPU1hdGgubWF4KGQsYy5taW5TdGVwKSxmPU1hdGgubWluKHAsYy5tYXhTdGVwKTt0aGlzLm1pbk1heFN0ZXBzJC5uZXh0KHttaW5TdGVwOmgsbWF4U3RlcDpmfSl9KSx0aGlzLmRhdGFTZXJpZXMkPWEucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdChvcCkpLHVpKChbbCxjXSk9PntsZXQgdT1sLm1hcCgoe3Nlcmllc0lkOmQscG9pbnRzOnB9KT0+KHtpZDpkLHBvaW50czpwfSkpO3JldHVybiBjPD0wP1h0KHUpOkVvKGFzeW5jIGZ1bmN0aW9uKG4sdCl7TnVtYmVyLmlzRmluaXRlKHQpfHwodD0wKSx0PU1hdGgubWF4KDAsTWF0aC5taW4odCwxKSk7bGV0IGU9W107Zm9yKGxldCBpIG9mIG4pe2xldCByPWkucG9pbnRzWzBdPy55O2lmKGkucG9pbnRzLmV2ZXJ5KGM9PmMueT09cikpe2UucHVzaChpKTtjb250aW51ZX1sZXQgcz1pLnBvaW50cy5sZW5ndGg+MD8wOk5hTixhPTAsbD1pLnBvaW50cy5tYXAoYz0+e2xldCB1PWMueTtpZihOdW1iZXIuaXNGaW5pdGUodSkpe3M9cyp0KygxLXQpKnUsYSsrO2xldCBkPTE9PT10PzE6MS1NYXRoLnBvdyh0LGEpO3JldHVybnt4OmMueCx5OnMvZH19cmV0dXJue3g6Yy54LHk6dX19KTtlLnB1c2goe2lkOmkuaWQscG9pbnRzOmx9KX1yZXR1cm4gZX0odSxjKSkucGlwZShMKGQ9PntsZXQgcD11Lm1hcCgoaCxmKT0+KHtpZDpzKGguaWQpLHBvaW50czpkW2ZdLnBvaW50cy5tYXAoKHt5Om19LHgpPT4oey4uLmgucG9pbnRzW3hdLHk6bX0pKX0pKTtyZXR1cm5bLi4udSwuLi5wXX0pKX0pLHpuKFtdKSksdGhpcy5saW5rZWRUaW1lU2VsZWN0aW9uJD1MdChbdGhpcy5taW5NYXhTdGVwcyQsdGhpcy5zdG9yZS5zZWxlY3QoWW0pLHRoaXMuc3RvcmUuc2VsZWN0KFhtKSx0aGlzLnN0b3JlLnNlbGVjdCh0ZCldKS5waXBlKEwoKFt7bWluU3RlcDpsLG1heFN0ZXA6Y30sdSxkLHBdKT0+dSYmcD09PUppLlNURVAmJmQ/UWgoZCxsLGMpOm51bGwpKSx0aGlzLnN0ZXBPckxpbmtlZFRpbWVTZWxlY3Rpb24kPUx0KFt0aGlzLnN0ZXBTZWxlY3RvclRpbWVTZWxlY3Rpb24kLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoWW0pXSkucGlwZShMKChbbCxjLHVdKT0+dSYmYz97c3RhcnQ6e3N0ZXA6Yy5zdGFydFN0ZXB9LGVuZDpudWxsPT09Yy5lbmRTdGVwP251bGw6e3N0ZXA6Yy5lbmRTdGVwfX06bCkpLHRoaXMuY29sdW1uSGVhZGVycyQ9THQoW3RoaXMuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQsdGhpcy5zdG9yZS5zZWxlY3QoQkkpLHRoaXMuc3RvcmUuc2VsZWN0KFZJKV0pLnBpcGUoTCgoW2wsYyx1XSk9Pm51bGw9PT1sfHxudWxsPT09bC5lbmQ/Yzp1KSksdGhpcy5jaGFydE1ldGFkYXRhTWFwJD1hLnBpcGUodWkobD0+THQobC5tYXAoYz0+dGhpcy5nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGMucnVuSWQpLnBpcGUoTCh1PT4oey4uLmMsLi4udX0pKSkpKSksZnIodGhpcy5zdG9yZS5zZWxlY3Qob28pLHRoaXMuc3RvcmUuc2VsZWN0KG5jKSx0aGlzLnN0b3JlLnNlbGVjdChvcCkpLEhyKDApLEwoKFtsLGMsdSxkXSk9PntsZXQgcD17fSxoPWQ+MDtmb3IobGV0IGYgb2YgbCl7bGV0e3Nlcmllc0lkOm0scnVuSWQ6eCxkaXNwbGF5TmFtZTpnLGFsaWFzOmIscGFydGl0aW9uSW5kZXg6RCxwYXJ0aXRpb25TaXplOlR9PWY7cFttXT17dHlwZTpzeS5PUklHSU5BTCxpZDptLGFsaWFzOmIsZGlzcGxheU5hbWU6VD4xP2Ake2d9OiAke0R9YDpnLHZpc2libGU6Qm9vbGVhbihjJiZjLmdldCh4KSksY29sb3I6dVt4XT8/IiNmZmYiLGF1eDohMSxvcGFjaXR5OjF9fWlmKCFoKXJldHVybiBwO2ZvcihsZXRbZixtXW9mIE9iamVjdC5lbnRyaWVzKHApKXtsZXQgeD1zKGYpO3BbeF09ey4uLm0saWQ6eCx0eXBlOnN5LkRFUklWRUQsYXV4OiExLG9yaWdpbmFsU2VyaWVzSWQ6Zn0sbS5hdXg9ITAsbS5vcGFjaXR5PS4yNX1yZXR1cm4gcH0pLHpuKHt9KSksdGhpcy5sb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KGJoLHRoaXMuY2FyZElkKSx0aGlzLnRhZyQ9aS5waXBlKEwobD0+bC50YWcpKSx0aGlzLnRpdGxlJD10aGlzLnRhZyQucGlwZShMKGw9Pmx5KGwsdGhpcy5ncm91cE5hbWUpKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQ2gsdGhpcy5jYXJkSWQpLHRoaXMuc3RvcmUuc2VsZWN0KGZ2KS5waXBlKFd0KHRoaXMubWluTWF4U3RlcHMkKSxzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKFtsLGNdKT0+e2w/bnVsbCE9PXRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQuZ2V0VmFsdWUoKXx8dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5uZXh0KHtzdGFydDp7c3RlcDpjLm1pblN0ZXB9LGVuZDpudWxsfSk6dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5uZXh0KG51bGwpfSksdGhpcy5zdG9yZS5zZWxlY3QobXYpLnBpcGUoV3QodGhpcy5taW5NYXhTdGVwcyQpLHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoW2wsY10pPT57bGV0IHU9dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5nZXRWYWx1ZSgpO251bGwhPT11P2x8fG51bGw9PT11LmVuZD9sJiZudWxsPT09dS5lbmQmJnRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dCh7c3RhcnQ6dS5zdGFydCxlbmQ6e3N0ZXA6Yy5tYXhTdGVwfX0pOnRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dCh7c3RhcnQ6dS5zdGFydCxlbmQ6bnVsbH0pOmwmJnRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dCh7c3RhcnQ6e3N0ZXA6Yy5taW5TdGVwfSxlbmQ6bD97c3RlcDpjLm1heFN0ZXB9Om51bGx9KX0pLHRoaXMubWluTWF4U3RlcHMkLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCh7bWluU3RlcDpsLG1heFN0ZXA6Y30pPT57aWYoIXRoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQuZ2V0VmFsdWUoKSlyZXR1cm47bGV0IHU9dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5nZXRWYWx1ZSgpPy5zdGFydC5zdGVwLGQ9dGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5nZXRWYWx1ZSgpPy5lbmQ/LnN0ZXAscD1mdW5jdGlvbihuLHQsZSl7bGV0IGk9UWgobix0LGUpO3JldHVybntzdGFydDp7c3RlcDppLnN0YXJ0U3RlcH0sZW5kOm51bGw9PT1pLmVuZFN0ZXA/bnVsbDp7c3RlcDppLmVuZFN0ZXB9fX0oe3N0YXJ0OntzdGVwOnU/P2x9LGVuZDp0aGlzLnN0ZXBTZWxlY3RvclRpbWVTZWxlY3Rpb24kLmdldFZhbHVlKCk/LmVuZD97c3RlcDpkPz9jfTpudWxsfSxsLGMpO3RoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQubmV4dChwKX0pfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1nZXRSdW5EaXNwbGF5TmFtZUFuZEFsaWFzKGUpe3JldHVybiBMdChbdGhpcy5zdG9yZS5zZWxlY3QoR0kse3J1bklkOmV9KSx0aGlzLnN0b3JlLnNlbGVjdChZdSksdGhpcy5zdG9yZS5zZWxlY3QoV0kse3J1bklkOmV9KV0pLnBpcGUoTCgoW2kscixvXSk9PntsZXQgcz1udWxsIT09aT9yW2ldPz9udWxsOm51bGw7cmV0dXJue2Rpc3BsYXlOYW1lOm98fHM/bz8ubmFtZT8/Ii4uLiI6ZSxhbGlhczpzfX0pKX1zdGVwU2VyaWVzVG9MaW5lU2VyaWVzKGUsaSl7bGV0IHI9aT09PUppLlNURVA7cmV0dXJuIGUubWFwKG89PntsZXQgcz0xZTMqby53YWxsVGltZTtyZXR1cm57Li4ubyx4OnI/by5zdGVwOnMseTpvLnZhbHVlLHdhbGxUaW1lOnMscmVsYXRpdmVUaW1lSW5NczowfX0pfW9uRGF0YVRhYmxlU29ydGluZyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHlvZShlKSl9b25UaW1lU2VsZWN0aW9uQ2hhbmdlZChlKXtsZXR7bWluU3RlcDppLG1heFN0ZXA6cn09dGhpcy5taW5NYXhTdGVwcyQuZ2V0VmFsdWUoKSx7c3RhcnRTdGVwOm8sZW5kU3RlcDpzfT1RaChlLnRpbWVTZWxlY3Rpb24saSxyKSxhPXtzdGFydDp7c3RlcDpvfSxlbmQ6cz97c3RlcDpzfTpudWxsfTt0aGlzLnN0b3JlLmRpc3BhdGNoKFloKGUpKSx0aGlzLnN0ZXBTZWxlY3RvclRpbWVTZWxlY3Rpb24kLm5leHQoYSl9b25TdGVwU2VsZWN0b3JUb2dnbGVkKGUpe3RoaXMuc3RlcFNlbGVjdG9yVGltZVNlbGVjdGlvbiQuZ2V0VmFsdWUoKSYmdGhpcy5zdGVwU2VsZWN0b3JUaW1lU2VsZWN0aW9uJC5uZXh0KG51bGwpLHRoaXMuc3RvcmUuZGlzcGF0Y2goWGgoe2FmZm9yZGFuY2U6ZX0pKX1vbkxpbmVDaGFydFpvb20oZSl7bGV0IGk9ZS54LHI9e21pblN0ZXA6TWF0aC5jZWlsKE1hdGgubWluKC4uLmkpKSxtYXhTdGVwOk1hdGguZmxvb3IoTWF0aC5tYXgoLi4uaSkpfTt0aGlzLmxpbmVDaGFydFpvb20kLm5leHQocil9cmVvcmRlckNvbHVtbkhlYWRlcnMoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChkUih7bmV3T3JkZXI6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNjYWxhci1jYXJkIl1dLGlucHV0czp7RGF0YURvd25sb2FkQ29tcG9uZW50OiJEYXRhRG93bmxvYWRDb21wb25lbnQiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoyMCx2YXJzOjYxLGNvbnN0czpbWyJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiIiwzLCJjYXJkSWQiLCJjaGFydE1ldGFkYXRhTWFwIiwiRGF0YURvd25sb2FkQ29tcG9uZW50IiwiZGF0YVNlcmllcyIsImlnbm9yZU91dGxpZXJzIiwiaXNDYXJkVmlzaWJsZSIsImlzUGlubmVkIiwibG9hZFN0YXRlIiwic2hvd0Z1bGxTaXplIiwic21vb3RoaW5nRW5hYmxlZCIsInRhZyIsInRpdGxlIiwidG9vbHRpcFNvcnQiLCJ4QXhpc1R5cGUiLCJ4U2NhbGVUeXBlIiwidXNlRGFya01vZGUiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwic3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiIsImlzUHJvc3BlY3RpdmVGb2JGZWF0dXJlRW5hYmxlZCIsImZvcmNlU3ZnIiwiY29sdW1uQ3VzdG9taXphdGlvbkVuYWJsZWQiLCJtaW5NYXhTdGVwIiwiY29sdW1uSGVhZGVycyIsIm9uRnVsbFNpemVUb2dnbGUiLCJvblBpbkNsaWNrZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25TdGVwU2VsZWN0b3JUb2dnbGVkIiwib25EYXRhVGFibGVTb3J0aW5nIiwib25MaW5lQ2hhcnRab29tIiwicmVvcmRlckNvbHVtbkhlYWRlcnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNjYWxhci1jYXJkLWNvbXBvbmVudCIsMCksUCgib25GdWxsU2l6ZVRvZ2dsZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkZ1bGxTaXplVG9nZ2xlKCl9KSgib25QaW5DbGlja2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5waW5TdGF0ZUNoYW5nZWQuZW1pdChvKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pKCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblRpbWVTZWxlY3Rpb25DaGFuZ2VkKG8pfSkoIm9uU3RlcFNlbGVjdG9yVG9nZ2xlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25TdGVwU2VsZWN0b3JUb2dnbGVkKG8pfSkoIm9uRGF0YVRhYmxlU29ydGluZyIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25EYXRhVGFibGVTb3J0aW5nKG8pfSkoIm9uTGluZUNoYXJ0Wm9vbSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5lQ2hhcnRab29tKG8pfSkoInJlb3JkZXJDb2x1bW5IZWFkZXJzIixmdW5jdGlvbihvKXtyZXR1cm4gaS5yZW9yZGVyQ29sdW1uSGVhZGVycyhvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksQigxMSwiYXN5bmMiKSxCKDEyLCJhc3luYyIpLEIoMTMsImFzeW5jIiksQigxNCwiYXN5bmMiKSxCKDE1LCJhc3luYyIpLEIoMTYsImFzeW5jIiksQigxNywiYXN5bmMiKSxCKDE4LCJhc3luYyIpLEIoMTksImFzeW5jIiksdigpKSwyJmUmJnkoImNhcmRJZCIsaS5jYXJkSWQpKCJjaGFydE1ldGFkYXRhTWFwIixVKDEsMjMsaS5jaGFydE1ldGFkYXRhTWFwJCkpKCJEYXRhRG93bmxvYWRDb21wb25lbnQiLGkuRGF0YURvd25sb2FkQ29tcG9uZW50KSgiZGF0YVNlcmllcyIsVSgyLDI1LGkuZGF0YVNlcmllcyQpKSgiaWdub3JlT3V0bGllcnMiLFUoMywyNyxpLmlnbm9yZU91dGxpZXJzJCkpKCJpc0NhcmRWaXNpYmxlIixpLmlzVmlzaWJsZSkoImlzUGlubmVkIixVKDQsMjksaS5pc1Bpbm5lZCQpKSgibG9hZFN0YXRlIixVKDUsMzEsaS5sb2FkU3RhdGUkKSkoInNob3dGdWxsU2l6ZSIsaS5zaG93RnVsbFNpemUpKCJzbW9vdGhpbmdFbmFibGVkIixVKDYsMzMsaS5zbW9vdGhpbmdFbmFibGVkJCkpKCJ0YWciLFUoNywzNSxpLnRhZyQpKSgidGl0bGUiLFUoOCwzNyxpLnRpdGxlJCkpKCJ0b29sdGlwU29ydCIsVSg5LDM5LGkudG9vbHRpcFNvcnQkKSkoInhBeGlzVHlwZSIsVSgxMCw0MSxpLnhBeGlzVHlwZSQpKSgieFNjYWxlVHlwZSIsVSgxMSw0MyxpLnhTY2FsZVR5cGUkKSkoInVzZURhcmtNb2RlIixVKDEyLDQ1LGkudXNlRGFya01vZGUkKSkoImxpbmtlZFRpbWVTZWxlY3Rpb24iLFUoMTMsNDcsaS5saW5rZWRUaW1lU2VsZWN0aW9uJCkpKCJzdGVwT3JMaW5rZWRUaW1lU2VsZWN0aW9uIixVKDE0LDQ5LGkuc3RlcE9yTGlua2VkVGltZVNlbGVjdGlvbiQpKSgiaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkIixVKDE1LDUxLGkuaXNQcm9zcGVjdGl2ZUZvYkZlYXR1cmVFbmFibGVkJCkpKCJmb3JjZVN2ZyIsVSgxNiw1MyxpLmZvcmNlU3ZnJCkpKCJjb2x1bW5DdXN0b21pemF0aW9uRW5hYmxlZCIsVSgxNyw1NSxpLmNvbHVtbkN1c3RvbWl6YXRpb25FbmFibGVkJCkpKCJtaW5NYXhTdGVwIixVKDE4LDU3LGkubWluTWF4U3RlcHMkKSkoImNvbHVtbkhlYWRlcnMiLFUoMTksNTksaS5jb2x1bW5IZWFkZXJzJCkpfSxkZXBlbmRlbmNpZXM6W2F5LGdwZSxHZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBRWWUobix0LGUpe2xldCBpPVtdLHtsZWZ0OnIscmlnaHQ6b309dCxzPShvLXIpL2UsYT0wLGw9MDtmb3IobGV0IGM9MDtjPGU7YysrKXtsZXQgdT1yK2MqcyxkPXUrcyxwPWM9PT1lLTEsaD1sO2ZvcihsPTA7YTxuLmxlbmd0aDspe2xldCBmPW5bYV0sbT1LWWUoZix1LGQsIXApO2lmKGgrPW0uY3VycixsKz1tLm5leHQsZi54K2YuZHg+ZClicmVhazthKyt9aS5wdXNoKHt4OnUsZHg6cyx5Omh9KX1yZXR1cm4gaX1mdW5jdGlvbiBLWWUobix0LGUsaSl7bGV0IHI9bi54LG89bi54K24uZHg7aWYocj5lfHxvPHQpcmV0dXJue2N1cnI6MCxuZXh0OjB9O2lmKDA9PT1uLmR4KXJldHVybiBpJiZvPj1lP3tjdXJyOjAsbmV4dDpuLnl9OntjdXJyOm4ueSxuZXh0OjB9O2xldCBzPU1hdGgubWluKG8sZSktTWF0aC5tYXgocix0KTtyZXR1cm57Y3VycjpuLnkqcy9uLmR4LG5leHQ6MH19dmFyICRZZT14bygiLjJ+cyIpLGVYZT14bygiLjR+ciIpLHRYZT14bygiLjJ+ZSIpO2Z1bmN0aW9uIHlwZShuKXtpZigwPT09bilyZXR1cm4iMCI7bGV0IHQ9TWF0aC5hYnMobik7cmV0dXJuIHQ+PTFlND8kWWUobik6dDwuMDAxP3RYZShuKTplWGUobil9dmFyIG5YZT1bIm1haW4iXSxpWGU9WyJ4QXhpcyJdLHJYZT1bInlBeGlzIl0sb1hlPVsiY29udGVudCJdLHNYZT1bImhpc3RvZ3JhbXMiXTtmdW5jdGlvbiBhWGUobix0KXtpZigxJm4mJihJbigpLF8oMCwiZyIpKDEsInRleHQiKSxBKDIpLHYoKSgpKSwyJm4pe2xldCBlPVMoKTtQdCgidHJhbnNmb3JtIixlLmdldENzc1RyYW5zbGF0ZVB4KGUudG9vbHRpcERhdGEueEF4aXMucG9zaXRpb24sOSkpLEMoMikseXQoZS50b29sdGlwRGF0YS54QXhpcy5sYWJlbCl9fWZ1bmN0aW9uIGxYZShuLHQpe2lmKDEmbiYmKEluKCksXygwLCJnIikoMSwidGV4dCIpLEEoMiksdigpKCkpLDImbil7bGV0IGU9UygpO1B0KCJ0cmFuc2Zvcm0iLGUuZ2V0R3JvdXBUcmFuc2Zvcm0oZS50b29sdGlwRGF0YS5jbG9zZXN0RGF0dW0pKSxDKDEpLHplKCJ5IixlLnRvb2x0aXBEYXRhLnlBeGlzLnBvc2l0aW9uKSxDKDEpLGplKCIgIixlLnRvb2x0aXBEYXRhLnlBeGlzLmxhYmVsLCIgIil9fWZ1bmN0aW9uIGNYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtJbigpLEpzKCksc24oMCksXygxLCJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciIsMTYpLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHIpKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25MaW5rZWRUaW1lVG9nZ2xlZC5lbWl0KCkpfSksdigpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJ0aW1lU2VsZWN0aW9uIixlLnRpbWVTZWxlY3Rpb24pKCJzdGVwcyIsZS5nZXRTdGVwcygpKSgidGVtcG9yYWxTY2FsZSIsZS5zY2FsZXMudGVtcG9yYWxTY2FsZSl9fWZ1bmN0aW9uIHVYZShuLHQpe2lmKDEmbiYmKEluKCksXygwLCJnIiksTygxLCJsaW5lIiwxNyksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O1B0KCJ0cmFuc2Zvcm0iLFMoKS5nZXRDc3NUcmFuc2xhdGVQeCgwLGUpKX19ZnVuY3Rpb24gZFhlKG4sdCl7MSZuJiYoSW4oKSxPKDAsImxpbmUiLDIxKSl9ZnVuY3Rpb24gcFhlKG4sdCl7aWYoMSZuJiYoSW4oKSxPKDAsImNpcmNsZSIsMjIpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQsaT1TKCk7UHQoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeChpLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChpLmdldENsb3Nlc3RCaW5Gcm9tQmluQ29vcmRpbmF0ZShlLGkudG9vbHRpcERhdGEueFBvc2l0aW9uSW5CaW5Db29yZCkpLngsaS5nZXRVaUNvb3JkRnJvbUJpbkZvckNvbnRlbnQoaS5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoZSxpLnRvb2x0aXBEYXRhLnhQb3NpdGlvbkluQmluQ29vcmQpKS55KSl9fWZ1bmN0aW9uIGhYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtJbigpLF8oMCwiZyIsMTgpLFAoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKHIpe2xldCBzPW9lKGUpLiRpbXBsaWNpdDtyZXR1cm4gc2UoUygpLnVwZGF0ZUNvbG9yT25Ib3ZlcihyLHMsITApKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihyKXtsZXQgcz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoKS51cGRhdGVDb2xvck9uSG92ZXIocixzLCExKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89b2UoZSkuJGltcGxpY2l0O3JldHVybiBzZShTKCkub25MaW5rZWRUaW1lUmFuZ2VDaGFuZ2VkKG8pKX0pLEUoMSxkWGUsMSwwLCJsaW5lIiwxOSksTygyLCJwYXRoIiksRSgzLHBYZSwxLDIsImNpcmNsZSIsMjApLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygpO1B0KCJ0cmFuc2Zvcm0iLGkuZ2V0R3JvdXBUcmFuc2Zvcm0oZSkpKCJjb2xvciIsaS5nZXRIaXN0b2dyYW1GaWxsKGUpKSxldCgiaGlzdG9ncmFtIiwhMCkoIm5vLWNvbG9yIiwhaS5pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSkpLEMoMSkseSgibmdJZiIsaS5tb2RlPT09aS5IaXN0b2dyYW1Nb2RlLk9GRlNFVCksQygxKSx6ZSgiZCIsaS5nZXRIaXN0b2dyYW1QYXRoKGUpKSxDKDEpLHkoIm5nSWYiLGkudG9vbHRpcERhdGEpfX1mdW5jdGlvbiBmWGUobix0KXtpZigxJm4mJihJbigpLE8oMCwiY2lyY2xlIiwyMikpLDImbil7bGV0IGU9UygyKTt6ZSgiY3giLGUuZ2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUudG9vbHRpcERhdGEuY2xvc2VzdEJpbikueCkoImN5IixlLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLnkpfX1mdW5jdGlvbiBtWGUobix0KXtpZigxJm4mJihJbigpLF8oMCwiZyIsNCkoMSwiZyIpLE8oMiwicGF0aCIpLEUoMyxmWGUsMSwyLCJjaXJjbGUiLDIzKSx2KCksXyg0LCJnIiwyNCkoNSwidGV4dCIsMjUpLEEoNiksdigpKCkoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxQdCgidHJhbnNmb3JtIixlLmdldEdyb3VwVHJhbnNmb3JtKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksQygxKSx6ZSgiZCIsZS5nZXRIaXN0b2dyYW1QYXRoKGUudG9vbHRpcERhdGEuY2xvc2VzdERhdHVtKSksQygxKSx5KCJuZ0lmIixlLnRvb2x0aXBEYXRhLmNsb3Nlc3RCaW4pLEMoMSksUHQoInRyYW5zZm9ybSIsZS5nZXRDc3NUcmFuc2xhdGVQeChlLnRvb2x0aXBEYXRhLnZhbHVlLnBvc2l0aW9uLngsZS50b29sdGlwRGF0YS52YWx1ZS5wb3NpdGlvbi55KSksQygyKSx5dChlLnRvb2x0aXBEYXRhLnZhbHVlLmxhYmVsKX19dmFyIFdrPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMubW9kZT16ci5PRkZTRVQsdGhpcy50aW1lUHJvcGVydHk9Um8uU1RFUCx0aGlzLnRpbWVTZWxlY3Rpb249bnVsbCx0aGlzLm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVUb2dnbGVkPW5ldyBHLHRoaXMuSGlzdG9ncmFtTW9kZT16cix0aGlzLlRpbWVQcm9wZXJ0eT1Sbyx0aGlzLnRvb2x0aXBEYXRhPW51bGwsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBrZSx0aGlzLmxheW91dD17aGlzdG9ncmFtSGVpZ2h0OjAsY29udGVudENsaWVudFJlY3Q6e2hlaWdodDowLHdpZHRoOjB9fSx0aGlzLnNjYWxlcz1udWxsLHRoaXMuZm9ybWF0dGVycz17YmluTnVtYmVyOnlwZSxjb3VudDp4bygiLjNuIiksd2FsbFRpbWU6SXkoIiVtLyVkICVYIiksc3RlcDp4bygiLjBmIikscmVsYXRpdmU6aT0+eG8oIi4xciIpKGkvMzZlNSkrImgifSx0aGlzLmRvbVZpc2libGU9ITF9bmdPbkNoYW5nZXMoKXt0aGlzLnVwZGF0ZUNoYXJ0SWZWaXNpYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe19pKHRoaXMubWFpbi5uYXRpdmVFbGVtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+dGhpcy5vbk1vdXNlTW92ZShlKSl9Z2V0Q3NzVHJhbnNsYXRlUHgoZSxpKXtyZXR1cm5gdHJhbnNsYXRlKCR7ZX1weCwgJHtpfXB4KWB9Z2V0Q2xvc2VzdEJpbkZyb21CaW5Db29yZGluYXRlKGUsaSl7aWYoIWUuYmlucy5sZW5ndGgpcmV0dXJue3g6MCxkeDowLHk6MH07bGV0IHI9ZS5iaW5zWzBdLG89ZS5iaW5zLnNsaWNlKC0xKVswXTtyZXR1cm4gaTxyLng/cjppPj1vLngrby5keD9vOmUuYmlucy5maW5kKGE9PmEueDw9aSYmaTxhLngrYS5keCl9Z2V0VWlDb29yZEZyb21CaW5Gb3JDb250ZW50KGUpe3JldHVybiB0aGlzLnNjYWxlcz97eDp0aGlzLnNjYWxlcy5iaW5TY2FsZSh4RShlKSkseTp0aGlzLnNjYWxlcy5jb3VudFNjYWxlKGUueSl9Ont4OjAseTowfX1nZXRIaXN0b2dyYW1QYXRoKGUpe2lmKCF0aGlzLnNjYWxlc3x8IWUuYmlucy5sZW5ndGgpcmV0dXJuIiI7bGV0IGk9dGhpcy5zY2FsZXMuYmluU2NhbGUscj10aGlzLnNjYWxlcy5jb3VudFNjYWxlLG89ZS5iaW5zWzBdLHM9ZS5iaW5zLnNsaWNlKC0xKVswXSxhPVtgTSR7aSh4RShvKSl9LCR7cigwKX1gXTtmb3IobGV0IGwgb2YgZS5iaW5zKWEucHVzaChgTCR7aSh4RShsKSl9LCR7cihsLnkpfWApO3JldHVybiBhLnB1c2goYEwke2koeEUocykpfSwke3IoMCl9YCksYS5qb2luKCIiKX10cmFja0J5V2FsbFRpbWUoZSl7cmV0dXJuIGUud2FsbFRpbWV9Z2V0R3JvdXBUcmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMuc2NhbGVzJiZ0aGlzLm1vZGUhPT16ci5PVkVSTEFZP3RoaXMuZ2V0Q3NzVHJhbnNsYXRlUHgoMCx0aGlzLnNjYWxlcy50ZW1wb3JhbFNjYWxlKHRoaXMuZ2V0VGltZVZhbHVlKGUpKSk6IiJ9Z2V0U3RlcHMoKXtyZXR1cm4gdGhpcy5kYXRhLm1hcChlPT5lLnN0ZXApfWlzVGltZVNlbGVjdGlvbkVuYWJsZWQoZSl7cmV0dXJuIEJvb2xlYW4odGhpcy5tb2RlPT09enIuT0ZGU0VUJiZ0aGlzLnRpbWVQcm9wZXJ0eT09PVJvLlNURVAmJnRoaXMuc2NhbGVzJiZlKX1pc0RhdHVtSW5UaW1lU2VsZWN0aW9uUmFuZ2UoZSl7cmV0dXJuIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pfHwobnVsbD09PXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA9PT1lLnN0ZXA6dGhpcy50aW1lU2VsZWN0aW9uLnN0YXJ0LnN0ZXA8PWUuc3RlcCYmdGhpcy50aW1lU2VsZWN0aW9uLmVuZC5zdGVwPj1lLnN0ZXApfWdldEhpc3RvZ3JhbUZpbGwoZSl7cmV0dXJuIHRoaXMuc2NhbGVzP3RoaXMuc2NhbGVzLmQzQ29sb3JTY2FsZSh0aGlzLmdldFRpbWVWYWx1ZShlKSk6IiJ9dXBkYXRlQ29sb3JPbkhvdmVyKGUsaSxyKXshdGhpcy5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKHRoaXMudGltZVNlbGVjdGlvbil8fHRoaXMuaXNEYXR1bUluVGltZVNlbGVjdGlvblJhbmdlKGkpfHwocj9lLnRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKCJuby1jb2xvciIpOmUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm5vLWNvbG9yIikpfWdldEdyaWRUaWNrWUxvY3MoKXtpZighdGhpcy5zY2FsZXN8fHRoaXMubW9kZT09PXpyLk9GRlNFVClyZXR1cm5bXTtsZXQgZT10aGlzLnNjYWxlcy5jb3VudFNjYWxlO3JldHVybiBlLnRpY2tzKCkubWFwKGk9PmUoaSkpfW9uUmVzaXplKCl7dGhpcy51cGRhdGVDbGllbnRSZWN0cygpLHRoaXMudXBkYXRlQ2hhcnRJZlZpc2libGUoKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuZG9tVmlzaWJsZT1lLGUmJih0aGlzLnVwZGF0ZUNsaWVudFJlY3RzKCksdGhpcy51cGRhdGVDaGFydElmVmlzaWJsZSgpKX1vbkxpbmtlZFRpbWVSYW5nZUNoYW5nZWQoZSl7aWYoIXRoaXMuaXNUaW1lU2VsZWN0aW9uRW5hYmxlZCh0aGlzLnRpbWVTZWxlY3Rpb24pKXJldHVybjtsZXQgaT10aGlzLnRpbWVTZWxlY3Rpb24uc3RhcnQuc3RlcCxyPXRoaXMudGltZVNlbGVjdGlvbi5lbmQ/LnN0ZXAsbz1lLnN0ZXA8aT9lLnN0ZXA6aSxzPXI7cz12b2lkIDA9PT1zP2Uuc3RlcD5pP2Uuc3RlcDppOmUuc3RlcD5zP2Uuc3RlcDpzLChvIT09aXx8cyE9PXIpJiZvIT09cyYmdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQoe3RpbWVTZWxlY3Rpb246e3N0YXJ0OntzdGVwOm99LGVuZDp7c3RlcDpzfX0sYWZmb3JkYW5jZTpjcy5ISVNUT0dSQU1fQ0xJQ0tfVE9fUkFOR0V9KX1nZXRUaW1lVmFsdWUoZSl7c3dpdGNoKHRoaXMudGltZVByb3BlcnR5KXtjYXNlIFJvLldBTExfVElNRTpyZXR1cm4gZS53YWxsVGltZTtjYXNlIFJvLlNURVA6cmV0dXJuIGUuc3RlcDtjYXNlIFJvLlJFTEFUSVZFOnJldHVybiBlLndhbGxUaW1lLXRoaXMuZGF0YVswXS53YWxsVGltZX19dXBkYXRlQ2xpZW50UmVjdHMoKXt0aGlzLmNvbnRlbnQmJih0aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdD10aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHQ9dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3QuaGVpZ2h0LzIuNSl9dXBkYXRlQ2hhcnRJZlZpc2libGUoKXshdGhpcy5kb21WaXNpYmxlfHwodGhpcy5zY2FsZXM9dGhpcy5jb21wdXRlU2NhbGVzKHRoaXMuZGF0YSksdGhpcy5yZW5kZXJYQXhpcygpLHRoaXMucmVuZGVyWUF4aXMoKSx0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKSl9Y29tcHV0ZVNjYWxlcyhlKXtsZXR7d2lkdGg6aSxoZWlnaHQ6cn09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qse21pbjpvLG1heDpzfT1icGUoZSxnPT5mdW5jdGlvbihuLHQpe3JldHVybiBuLnJlZHVjZSgoZSxpKT0+TWF0aC5taW4oZSxpLngpLDEvMCl9KGcuYmlucyksZz0+TkcoZy5iaW5zLCh7eDpiLGR4OkR9KT0+YitEKSksYT1ORyhlLGc9Pk5HKGcuYmlucywoe3k6Yn0pPT5iKSksbD1RbygpLmRvbWFpbihbbyxzXSkubmljZSgpLGM9dGhpcy5tb2RlIT09enIuT1ZFUkxBWSYmdGhpcy50aW1lUHJvcGVydHk9PVJvLldBTExfVElNRT9SZygpOlFvKCksdT1lLm1hcChnPT50aGlzLmdldFRpbWVWYWx1ZShnKSkse21pbjpkLG1heDpwfT1icGUodSxnPT5nKSxoPVtkLHBdO2MuZG9tYWluKGgpO2xldCBmPVFvKCk7Zi5kb21haW4oWzAsYV0pO2xldCBtPXlnKHRoaXMuY29sb3J8fCIjMDAwIikseD1RbygpO3JldHVybiB4LmRvbWFpbihoKSxsLnJhbmdlKFswLGldKSx4LnJhbmdlKFttLmJyaWdodGVyKCksbS5kYXJrZXIoKV0pLHguaW50ZXJwb2xhdGUocHopLHRoaXMubW9kZT09PXpyLk9WRVJMQVk/KGMucmFuZ2UoW3Iscl0pLGYucmFuZ2UoW3IsMF0pKTooYy5yYW5nZShbci0odGhpcy5tb2RlPT09enIuT0ZGU0VUP3ItdGhpcy5sYXlvdXQuaGlzdG9ncmFtSGVpZ2h0OjApLHJdKSxmLnJhbmdlKFswLC10aGlzLmxheW91dC5oaXN0b2dyYW1IZWlnaHRdKSkse2JpblNjYWxlOmwsZDNDb2xvclNjYWxlOngsY291bnRTY2FsZTpmLHRlbXBvcmFsU2NhbGU6Y319cmVuZGVyWEF4aXMoKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldHt3aWR0aDplfT10aGlzLmxheW91dC5jb250ZW50Q2xpZW50UmVjdCxpPWp3KHRoaXMuc2NhbGVzLmJpblNjYWxlKS50aWNrcyhNYXRoLm1heCgyLGUvMjApKTtpLnRpY2tGb3JtYXQodGhpcy5mb3JtYXR0ZXJzLmJpbk51bWJlciksaShibyh0aGlzLnhBeGlzLm5hdGl2ZUVsZW1lbnQpKX1nZXRZQXhpc0Zvcm1hdHRlcigpe2lmKHRoaXMubW9kZT09PXpyLk9WRVJMQVkpcmV0dXJuIHRoaXMuZm9ybWF0dGVycy5jb3VudDtzd2l0Y2godGhpcy50aW1lUHJvcGVydHkpe2Nhc2UgUm8uV0FMTF9USU1FOnJldHVybiB0aGlzLmZvcm1hdHRlcnMud2FsbFRpbWU7Y2FzZSBSby5TVEVQOnJldHVybiB0aGlzLmZvcm1hdHRlcnMuc3RlcDtjYXNlIFJvLlJFTEFUSVZFOnJldHVybiB0aGlzLmZvcm1hdHRlcnMucmVsYXRpdmU7ZGVmYXVsdDp0aHJvdyBSYW5nZUVycm9yKGBZIGF4aXMgZm9ybWF0dGVyIGZvciAke3RoaXMudGltZVByb3BlcnR5fSBtdXN0IGJlIGltcGxlbWVudGVkYCl9fWdldE1heFRpY2tzKGUpe2xldHtoZWlnaHQ6aX09dGhpcy5sYXlvdXQuY29udGVudENsaWVudFJlY3Qscj1pLzE1O2lmKHRoaXMudGltZVByb3BlcnR5PT09Um8uU1RFUCl7bGV0W28sc109ZS5kb21haW4oKSxhPU1hdGgubWF4KHMtbysxLDEpO3JldHVybiBNYXRoLm1pbihhLHIpfXJldHVybiByfXJlbmRlcllBeGlzKCl7aWYoIXRoaXMuc2NhbGVzKXJldHVybjtsZXQgZT10aGlzLm1vZGU9PT16ci5PVkVSTEFZP3RoaXMuc2NhbGVzLmNvdW50U2NhbGU6dGhpcy5zY2FsZXMudGVtcG9yYWxTY2FsZSxpPXRoaXMuZ2V0TWF4VGlja3MoZSkscj16dyhlKS50aWNrcyhNYXRoLm1heCgyLGkpKTtyLnRpY2tGb3JtYXQodGhpcy5nZXRZQXhpc0Zvcm1hdHRlcigpKSxyKGJvKHRoaXMueUF4aXMubmF0aXZlRWxlbWVudCkpfWZpbmRDbG9zZXN0RGF0dW1JbmRleChlKXtsZXQgaT1lLnRhcmdldCxyPWk7Zm9yKDtpJiZpIT09dGhpcy5oaXN0b2dyYW1zLm5hdGl2ZUVsZW1lbnQ7KXI9aSxpPWkucGFyZW50RWxlbWVudDtyZXR1cm4gaT9BcnJheS5mcm9tKGkuY2hpbGRyZW4pLmluZGV4T2Yocik6LTF9b25Nb3VzZU1vdmVGb3JUZXN0T25seShlKXtyZXR1cm4gdGhpcy5vbk1vdXNlTW92ZShlKX1vbk1vdXNlTW92ZShlKXtpZighdGhpcy5zY2FsZXMpcmV0dXJuO2xldCBpPWUub2Zmc2V0WCxyPWUub2Zmc2V0WSxvPXRoaXMuZmluZENsb3Nlc3REYXR1bUluZGV4KGUpO2lmKG88MClyZXR1cm47bGV0IHM9dGhpcy5zY2FsZXMuYmluU2NhbGUuaW52ZXJ0KGkpLGE9dGhpcy5kYXRhW29dLGw9dGhpcy5nZXRDbG9zZXN0QmluRnJvbUJpbkNvb3JkaW5hdGUoYSxzKTt0aGlzLnRvb2x0aXBEYXRhPXt2YWx1ZTp7cG9zaXRpb246e3g6aSx5OnJ9LGxhYmVsOnRoaXMubW9kZT09PXpyLk9GRlNFVD90aGlzLmZvcm1hdHRlcnMuY291bnQobC55KTpgU3RlcDogJHt0aGlzLmZvcm1hdHRlcnMuc3RlcChhLnN0ZXApfWB9LHhBeGlzOntwb3NpdGlvbjp0aGlzLmdldFVpQ29vcmRGcm9tQmluRm9yQ29udGVudChsKS54LGxhYmVsOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIoeEUobCkpfSx5QXhpczp7cG9zaXRpb246dGhpcy5zY2FsZXMuY291bnRTY2FsZSh0aGlzLm1vZGU9PT16ci5PRkZTRVQ/MDpsLnkpLGxhYmVsOnRoaXMubW9kZT09PXpyLk9GRlNFVD90aGlzLmdldFlBeGlzRm9ybWF0dGVyKCkodGhpcy5nZXRUaW1lVmFsdWUoYSkpOnRoaXMuZm9ybWF0dGVycy5iaW5OdW1iZXIobC55KX0seFBvc2l0aW9uSW5CaW5Db29yZDpzLGNsb3Nlc3REYXR1bTphLGNsb3Nlc3RCaW46bH0sdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0obm4pKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ0Yi1oaXN0b2dyYW0iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoblhlLDUpLG90KGlYZSw1KSxvdChyWGUsNSksb3Qob1hlLDUpLG90KHNYZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5tYWluPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnhBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnlBeGlzPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNvbnRlbnQ9ci5maXJzdCksTmUocj1MZSgpKSYmKGkuaGlzdG9ncmFtcz1yLmZpcnN0KX19LGlucHV0czp7bW9kZToibW9kZSIsdGltZVByb3BlcnR5OiJ0aW1lUHJvcGVydHkiLGNvbG9yOiJjb2xvciIsZGF0YToiZGF0YSIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiJ9LG91dHB1dHM6e29uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uTGlua2VkVGltZVRvZ2dsZWQ6Im9uTGlua2VkVGltZVRvZ2dsZWQifSxmZWF0dXJlczpbRnRdLGRlY2xzOjIyLHZhcnM6MTUsY29uc3RzOltbImRldGVjdFJlc2l6ZSIsIiIsIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLDMsIm9uUmVzaXplIiwib25WaXNpYmlsaXR5Q2hhbmdlIl0sWyJtYWluIiwiIl0sWzEsImF4aXMiLCJ4LWF4aXMiXSxbInhBeGlzIiwiIl0sWzEsInRvb2x0aXAiXSxbMywidHJhbnNmb3JtIiw0LCJuZ0lmIl0sWzEsImF4aXMiLCJ5LWF4aXMiXSxbInlBeGlzIiwiIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudCJdLFsiY29udGVudCIsIiJdLFsxLCJncmlkIl0sWzMsInRyYW5zZm9ybSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJoaXN0b2dyYW1zIiwiIl0sWzMsInRyYW5zZm9ybSIsImhpc3RvZ3JhbSIsIm5vLWNvbG9yIiwiY29sb3IiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbImNsYXNzIiwidG9vbHRpcCIsNCwibmdJZiJdLFsxLCJoaXN0b2dyYW0tY2FyZC1mb2IiLDMsInRpbWVTZWxlY3Rpb24iLCJzdGVwcyIsInRlbXBvcmFsU2NhbGUiLCJvblRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25UaW1lU2VsZWN0aW9uVG9nZ2xlZCJdLFsieDIiLCIxMDAlIiwxLCJ0aWNrIl0sWzMsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwiY2xpY2siXSxbImNsYXNzIiwiYmFzZWxpbmUiLCJ4MiIsIjEwMCUiLDQsIm5nSWYiXSxbInIiLCIyIiwzLCJ0cmFuc2Zvcm0iLDQsIm5nSWYiXSxbIngyIiwiMTAwJSIsMSwiYmFzZWxpbmUiXSxbInIiLCIyIl0sWyJyIiwiMiIsNCwibmdJZiJdLFsxLCJ2YWx1ZS1sYWJlbCJdLFsieCIsIjMiLCJ5IiwiLTMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCwxKSxQKCJvblJlc2l6ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZSgpfSkoIm9uVmlzaWJpbGl0eUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25WaXNpYmlsaXR5Q2hhbmdlKG8pfSksSW4oKSxfKDIsInN2ZyIsMiksTygzLCJnIixudWxsLDMpLF8oNSwiZyIsNCksRSg2LGFYZSwzLDMsImciLDUpLHYoKSgpLEpzKCksXyg3LCJkaXYiLDYpLEluKCksXyg4LCJzdmciKSxPKDksImciLG51bGwsNyksXygxMSwiZyIsNCksRSgxMixsWGUsMyw0LCJnIiw1KSx2KCkoKSxFKDEzLGNYZSwyLDMsIm5nLWNvbnRhaW5lciIsOCksdigpLF8oMTQsInN2ZyIsOSwxMCkoMTYsImciLDExKSxFKDE3LHVYZSwyLDIsImciLDEyKSx2KCksXygxOCwiZyIsbnVsbCwxMyksRSgyMCxoWGUsNCwxMSwiZyIsMTQpLHYoKSxFKDIxLG1YZSw3LDcsImciLDE1KSx2KCkoKSksMiZlJiYoRGEoIm1haW4gIitpLm1vZGUrIiAiK2kudGltZVByb3BlcnR5KSxDKDYpLHkoIm5nSWYiLGkudG9vbHRpcERhdGEpLEMoNSksUHQoInRyYW5zZm9ybSIsaS5nZXRDc3NUcmFuc2xhdGVQeCg5LDApKSxDKDEpLHkoIm5nSWYiLGkudG9vbHRpcERhdGEpLEMoMSkseSgibmdJZiIsaS5pc1RpbWVTZWxlY3Rpb25FbmFibGVkKGkudGltZVNlbGVjdGlvbikpLEMoNCkseSgibmdGb3JPZiIsaS5nZXRHcmlkVGlja1lMb2NzKCkpLEMoMSksZXQoImhpc3RvZ3JhbXMiLCEwKSgibGlua2VkLXRpbWUtc2luZ2xlLXN0ZXAiLGkudGltZVNlbGVjdGlvbiYmIWkudGltZVNlbGVjdGlvbi5lbmQpLEMoMikseSgibmdGb3JPZiIsaS5kYXRhKSgibmdGb3JUcmFja0J5IixpLnRyYWNrQnlXYWxsVGltZSksQygxKSx5KCJuZ0lmIixpLnRvb2x0aXBEYXRhKSl9LHN0eWxlczpbJ1tfbmdob3N0LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfVtfbmdob3N0LSVDT01QJV17Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MTBweH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImNvbnRlbnQgeS1heGlzIiAieC1heGlzIC4iO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgNTBweDtncmlkLXRlbXBsYXRlLXJvd3M6MWZyIDMwcHh9Lm1haW4ud2FsbF90aW1lW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDc1cHh9LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9LmxpbmtlZC10aW1lLWZvYltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgdGV4dFtfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTBweH0ubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAubGlua2VkLXRpbWUtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yfS5saW5rZWQtdGltZS1mb2JbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtkb21pbmFudC1iYXNlbGluZTppZGVvZ3JhcGhpYzt0ZXh0LWFuY2hvcjpzdGFydH0uYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAge2NvbG9yOiM2MTYxNjE7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVufWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICB7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmF4aXNbX25nY29udGVudC0lQ09NUCVdICAgICAuZG9tYWluLCAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIHRleHR7ZGlzcGxheTpub25lfS5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2s6bnRoLWNoaWxkKDJuKzEpIHRleHR7ZGlzcGxheTppbml0aWFsfXN2Z1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb2ludGVyLWV2ZW50czp2aXNpYmxlUGFpbnRlZH1zdmdbX25nY29udGVudC0lQ09NUCVdICAgbGluZVtfbmdjb250ZW50LSVDT01QJV0sIHN2Z1tfbmdjb250ZW50LSVDT01QJV0gICBjaXJjbGVbX25nY29udGVudC0lQ09NUCVdLCBzdmdbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOm5vbmV9c3ZnW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGdbX25nY29udGVudC0lQ09NUCVde3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0ueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWFyZWE6eC1heGlzfS54LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOmhhbmdpbmc7dGV4dC1hbmNob3I6bWlkZGxlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVde2dyaWQtYXJlYTp5LWF4aXM7b3ZlcmZsb3c6Y2xpcCB2aXNpYmxlfS55LWF4aXNbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVde2RvbWluYW50LWJhc2VsaW5lOm1pZGRsZTt0ZXh0LWFuY2hvcjpzdGFydH0uaGlzdG9ncmFtLWNhcmQtZm9iW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjlweDtwb3NpdGlvbjphYnNvbHV0ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6I2RkZH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAudGlja1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6IzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuYXhpc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC50aWNrIGxpbmUsIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtzdHJva2U6IzU1NX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmNvbnRlbnQ7b3ZlcmZsb3c6dmlzaWJsZTt6LWluZGV4OjF9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLnRpY2tbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlLWRhc2hhcnJheToyfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde2ZpbGw6Y3VycmVudENvbG9yO3N0cm9rZS1vcGFjaXR5Oi42O3N0cm9rZS13aWR0aDoxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgY2lyY2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuNikpO3N0cm9rZTojZmZmO3dpbGwtY2hhbmdlOnRyYW5zZm9ybX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuYmFzZWxpbmVbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5Oi4xO3N0cm9rZS13aWR0aDoxcHg7c3Ryb2tlOmN1cnJlbnRDb2xvcjt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZS1vcGFjaXR5OjE7c3Ryb2tlOmN1cnJlbnRDb2xvcjtmaWxsOnJnYmEoMCwwLDAsMCl9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLm5vLWNvbG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDIyMSwyMjEsMjIxLC40KSAhaW1wb3J0YW50fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1jb2xvcltfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2Utb3BhY2l0eTouMn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoNTEsNTEsNTEsLjQpICFpbXBvcnRhbnR9Lm9mZnNldFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuaGlzdG9ncmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6I2ZmZn1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojNTU1fS5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVde3N0cm9rZTojMDAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5vZmZzZXRbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmhpc3RvZ3JhbXMubGlua2VkLXRpbWUtc2luZ2xlLXN0ZXBbX25nY29udGVudC0lQ09NUCVdICAgW19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLm5vLWNvbG9yKSAgIHBhdGhbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAub2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oaXN0b2dyYW1zLmxpbmtlZC10aW1lLXNpbmdsZS1zdGVwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtfbmdjb250ZW50LSVDT01QJV06bm90KC5uby1jb2xvcikgICBwYXRoW19uZ2NvbnRlbnQtJUNPTVAlXXtzdHJva2U6I2ZmZn0ub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV0gICAueC1heGlzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRpY2sgbGluZXtkaXNwbGF5Om5vbmV9Lm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcGF0aFtfbmdjb250ZW50LSVDT01QJV17ZmlsbC1vcGFjaXR5OjA7c3Ryb2tlOmN1cnJlbnRDb2xvcn0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNpcmNsZVtfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gTkcobix0KXtyZXR1cm4gbi5yZWR1Y2UoKGUsaSk9Pk1hdGgubWF4KGUsdChpKSksLTEvMCl9ZnVuY3Rpb24gYnBlKG4sdCxlKXtlfHwoZT10KTtsZXQgaT0xLzAscj0tMS8wO2ZvcihsZXQgbyBvZiBuKWk9TWF0aC5taW4oaSx0KG8pKSxyPU1hdGgubWF4KHIsZShvKSk7cmV0dXJue21pbjppLG1heDpyfX1mdW5jdGlvbiB4RShuKXtyZXR1cm4gbi54Ky41Km4uZHh9ZnVuY3Rpb24gdlhlKG4sdCl7MSZuJiYoXygwLCJzcGFuIiwxNCksTygxLCJtYXQtc3Bpbm5lciIsMTUpLHYoKSl9ZnVuY3Rpb24geVhlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwidGItaGlzdG9ncmFtIiwxNiksUCgib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkLmVtaXQocikpfSkoIm9uTGlua2VkVGltZVRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkxpbmtlZFRpbWVUb2dnbGVkLmVtaXQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiZGF0YSIsZS5kYXRhKSgibW9kZSIsZS5tb2RlKSgidGltZVByb3BlcnR5IixlLnRpbWVQcm9wZXJ0eShlLnhBeGlzVHlwZSkpKCJjb2xvciIsZS5ydW5Db2xvclNjYWxlKGUucnVuSWQpKSgidGltZVNlbGVjdGlvbiIsZS5jb252ZXJ0VG9UaW1lU2VsZWN0aW9uKGUubGlua2VkVGltZVNlbGVjdGlvbikpfX1mdW5jdGlvbiBiWGUobix0KXsxJm4mJihfKDAsImRpdiIsMTgpLEEoMSwiIERhdGEgZmFpbGVkIHRvIGxvYWQuICIpLHYoKSl9ZnVuY3Rpb24geFhlKG4sdCl7aWYoMSZuJiZFKDAsYlhlLDIsMCwiZGl2IiwxNyksMiZuKXtsZXQgZT1TKCk7eSgibmdJZiIsZS5sb2FkU3RhdGU9PT1lLkRhdGFMb2FkU3RhdGUuRkFJTEVEKX19dmFyIENYZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fSx4cGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuRGF0YUxvYWRTdGF0ZT1PZSx0aGlzLm9uRnVsbFNpemVUb2dnbGU9bmV3IEcsdGhpcy5vblBpbkNsaWNrZWQ9bmV3IEcsdGhpcy5vbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkPW5ldyBHLHRoaXMub25MaW5rZWRUaW1lVG9nZ2xlZD1uZXcgR310aW1lUHJvcGVydHkoZSl7c3dpdGNoKGUpe2Nhc2UgSmkuU1RFUDpyZXR1cm4gUm8uU1RFUDtjYXNlIEppLldBTExfVElNRTpyZXR1cm4gUm8uV0FMTF9USU1FO2Nhc2UgSmkuUkVMQVRJVkU6cmV0dXJuIFJvLlJFTEFUSVZFO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHhBeGlzVHlwZSBmb3IgaGlzdG9ncmFtIHRpbWUgcHJvcGVydHkuIil9fWNvbnZlcnRUb1RpbWVTZWxlY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lP251bGw6e3N0YXJ0OntzdGVwOmUuc3RhcnRTdGVwfSxlbmQ6ZS5lbmRTdGVwP3tzdGVwOmUuZW5kU3RlcH06bnVsbH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImhpc3RvZ3JhbS1jYXJkLWNvbXBvbmVudCJdXSxpbnB1dHM6e2xvYWRTdGF0ZToibG9hZFN0YXRlIix0aXRsZToidGl0bGUiLHRhZzoidGFnIixydW5JZDoicnVuSWQiLGRhdGE6ImRhdGEiLG1vZGU6Im1vZGUiLHhBeGlzVHlwZToieEF4aXNUeXBlIixydW5Db2xvclNjYWxlOiJydW5Db2xvclNjYWxlIixzaG93RnVsbFNpemU6InNob3dGdWxsU2l6ZSIsaXNQaW5uZWQ6ImlzUGlubmVkIixsaW5rZWRUaW1lU2VsZWN0aW9uOiJsaW5rZWRUaW1lU2VsZWN0aW9uIixpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQ6ImlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCJ9LG91dHB1dHM6e29uRnVsbFNpemVUb2dnbGU6Im9uRnVsbFNpemVUb2dnbGUiLG9uUGluQ2xpY2tlZDoib25QaW5DbGlja2VkIixvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkOiJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIixvbkxpbmtlZFRpbWVUb2dnbGVkOiJvbkxpbmtlZFRpbWVUb2dnbGVkIn0sZGVjbHM6MTYsdmFyczoxNCxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6QSBidXR0b24gdG8gcGluIGEgY2FyZC7ikJ9lNjY1ZGM3MTJiZDVmMThkNGRmYTNhMjllMTI1ZDU2NWNjNTFlMmY24pCfNzI4NDYwNjQyNjIzNDM3NTM0NDpQaW4gY2FyZGAsZT0kbG9jYWxpemVgOkEgYnV0dG9uIG9uIGEgaGlzdG9ncmFtIGNhcmQgdGhhdCB0b2dnbGVzIGZ1bGwgc2l6ZSBtb2RlLuKQn2ZjOGY3NjdkMGI5ZjkzMDE4N2ExYmFlMzQ0NzdhZDI4NzM2ZWNlMzPikJ85MTU3MjE1NjM2Mzg5MjY1OTc6VG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlYCxbWzEsImhlYWRpbmciXSxbMSwidGFnIl0sWzMsInRpdGxlIiwidmFsdWUiXSxbMywiaXNDbGlwcGVkIiwiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIl0sWzEsInJ1biJdLFsxLCJkb3QiLDMsIm5nU3R5bGUiXSxbMSwicnVuLXRleHQiLDMsInJ1bklkIl0sWzEsImNvbnRyb2xzIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInBpbi1idXR0b24iLDMsImNsaWNrIl0sWzMsInN2Z0ljb24iXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLGUsInRpdGxlIiwiVG9nZ2xlIGZ1bGwgc2l6ZSBtb2RlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzMsImRhdGEiLCJtb2RlIiwidGltZVByb3BlcnR5IiwiY29sb3IiLCJ0aW1lU2VsZWN0aW9uIiwib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uTGlua2VkVGltZVRvZ2dsZWQiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsibm9EYXRhIiwiIl0sWzEsInNwaW5uZXIiXSxbImRpYW1ldGVyIiwiMTgiXSxbMywiZGF0YSIsIm1vZGUiLCJ0aW1lUHJvcGVydHkiLCJjb2xvciIsInRpbWVTZWxlY3Rpb24iLCJvbkxpbmtlZFRpbWVTZWxlY3Rpb25DaGFuZ2VkIiwib25MaW5rZWRUaW1lVG9nZ2xlZCJdLFsiY2xhc3MiLCJlbXB0eS1tZXNzYWdlIiw0LCJuZ0lmIl0sWzEsImVtcHR5LW1lc3NhZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSksTygyLCJ0Yi10cnVuY2F0ZWQtcGF0aCIsMikoMywidmlzLWxpbmtlZC10aW1lLXNlbGVjdGlvbi13YXJuaW5nIiwzKSx2KCksXyg0LCJkaXYiLDQpLE8oNSwic3BhbiIsNSkoNiwiY2FyZC1ydW4tbmFtZSIsNiksdigpLF8oNywic3BhbiIsNykoOCwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBpbkNsaWNrZWQuZW1pdCghaS5pc1Bpbm5lZCl9KSxPKDksIm1hdC1pY29uIiw5KSx2KCksXygxMCwiYnV0dG9uIiwxMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZS5lbWl0KCl9KSxPKDExLCJtYXQtaWNvbiIsOSksdigpKCksRSgxMix2WGUsMiwwLCJzcGFuIiwxMSksdigpLEUoMTMseVhlLDEsNSwidGItaGlzdG9ncmFtIiwxMiksRSgxNCx4WGUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxxdCkpLDImZSl7bGV0IHI9JGUoMTUpO0MoMikseSgidGl0bGUiLGkudGFnKSgidmFsdWUiLGkudGl0bGUpLEMoMSkseSgiaXNDbGlwcGVkIixpLmxpbmtlZFRpbWVTZWxlY3Rpb24mJmkubGlua2VkVGltZVNlbGVjdGlvbi5jbGlwcGVkKSgiaXNDbG9zZXN0U3RlcEhpZ2hsaWdodGVkIixpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCksQygyKSx5KCJuZ1N0eWxlIixPbigxMixDWGUsaS5ydW5Db2xvclNjYWxlKGkucnVuSWQpKSksQygxKSx5KCJydW5JZCIsaS5ydW5JZCksQygyKSx6ZSgidGl0bGUiLGkuaXNQaW5uZWQ/IlVucGluIGNhcmQiOiJQaW4gY2FyZCIpLEMoMSkseSgic3ZnSWNvbiIsaS5pc1Bpbm5lZD8ia2VlcF8yNHB4Ijoia2VlcF9vdXRsaW5lXzI0cHgiKSxDKDIpLHkoInN2Z0ljb24iLGkuc2hvd0Z1bGxTaXplPyJmdWxsc2NyZWVuX2V4aXRfMjRweCI6ImZ1bGxzY3JlZW5fMjRweCIpLEMoMSkseSgibmdJZiIsaS5sb2FkU3RhdGU9PT1pLkRhdGFMb2FkU3RhdGUuTE9BRElORyksQygxKSx5KCJuZ0lmIixpLmRhdGEmJmkuZGF0YS5sZW5ndGgpKCJuZ0lmRWxzZSIscil9fSxkZXBlbmRlbmNpZXM6W0JlLHp1LFdrLF9uLEd0LEJvLHlSLHV5LGR5XSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1iYXNpczozMThweDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1ncm93OjE7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztwYWRkaW5nOjE2cHg7cGFkZGluZy10b3A6NHB4fS5oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtYXJlYXM6InRhZyBjb250cm9scyIgInJ1biBzcGlubmVyIjtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbTo0cHh9LnRhZ1tfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtnYXA6NXB4O2dyaWQtYXJlYTp0YWc7b3ZlcmZsb3c6aGlkZGVufS50YWdbX25nY29udGVudC0lQ09NUCVdICAgdmlzLXNlbGVjdGVkLXRpbWUtY2xpcHBlZFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MH0ucGluLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE4cHh9LnJ1bltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnJ1bjtkaXNwbGF5OmZsZXg7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxM3B4fS5ydW5bX25nY29udGVudC0lQ09NUCVdICAgLmRvdFtfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7Ym9yZGVyLXJhZGl1czo1MCU7bWFyZ2luLXJpZ2h0OjRweH0ucnVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5ydW4tdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7bWF4LXdpZHRoOjEyMHB4fS5jb250cm9sc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTt3aGl0ZS1zcGFjZTpub3dyYXA7Z3JpZC1hcmVhOmNvbnRyb2xzO2p1c3RpZnktc2VsZjpmbGV4LWVuZDtmbGV4LXNocmluazowO21hcmdpbi1yaWdodDotMTJweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuY29udHJvbHNbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Z3JpZC1hcmVhOnNwaW5uZXI7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1tYXQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dG9wOjA7cmlnaHQ6MDtwb3NpdGlvbjphYnNvbHV0ZX10Yi1oaXN0b2dyYW1bX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS5lbXB0eS1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjFlbTtmb250LXNpemU6MTNweH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLENwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnBpblN0YXRlQ2hhbmdlZD1uZXcgRyx0aGlzLm1vZGUkPXRoaXMuc3RvcmUuc2VsZWN0KFJJKSx0aGlzLnhBeGlzVHlwZSQ9dGhpcy5zdG9yZS5zZWxlY3QodGQpLHRoaXMuc2hvd0Z1bGxTaXplPSExfWlzSGlzdG9ncmFtQ2FyZE1ldGFkYXRhKGUpe2xldHtwbHVnaW46aX09ZTtyZXR1cm4gaT09PXJpLkhJU1RPR1JBTVN9b25GdWxsU2l6ZVRvZ2dsZSgpe3RoaXMuc2hvd0Z1bGxTaXplPSF0aGlzLnNob3dGdWxsU2l6ZSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdCh0aGlzLnNob3dGdWxsU2l6ZSksdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KHRoaXMuc2hvd0Z1bGxTaXplKX1uZ09uSW5pdCgpe2xldCBpPXRoaXMuc3RvcmUuc2VsZWN0KHRjLHRoaXMuY2FyZElkKS5waXBlKFllKG89PiEhbyYmdGhpcy5pc0hpc3RvZ3JhbUNhcmRNZXRhZGF0YShvKSksTChvPT5vKSkscj1MdChbaSx0aGlzLnN0b3JlLnNlbGVjdCh4aCx0aGlzLmNhcmRJZCldKTt0aGlzLmRhdGEkPXIucGlwZShMKChbbyxzXSk9PntsZXQgYT1vLnJ1bklkO3JldHVybiBzJiZzLmhhc093blByb3BlcnR5KGEpP2Z1bmN0aW9uKG4sdD0zMCl7aWYoIW4ubGVuZ3RofHx0PDEpcmV0dXJuW107bGV0IGU9ZnVuY3Rpb24obil7bGV0IHQ9bnVsbCxlPW51bGw7Zm9yKGxldHtiaW5zOml9b2Ygbil7aWYoIWkubGVuZ3RoKWNvbnRpbnVlO2xldCByPWlbaS5sZW5ndGgtMV0sbz1pWzBdLngscz1yLngrci5keDsobnVsbD09PXR8fG88dCkmJih0PW8pLChudWxsPT09ZXx8cz5lKSYmKGU9cyl9cmV0dXJuIG51bGw9PT10fHxudWxsPT09ZT9udWxsOntsZWZ0OnQscmlnaHQ6ZX19KG4pO3JldHVybiBlJiZlLmxlZnQ9PT1lLnJpZ2h0JiYoZS5yaWdodD0xLjEqZS5yaWdodCsxLGUubGVmdD1lLmxlZnQvMS4xLTEpLG4ubWFwKGk9Pih7c3RlcDppLnN0ZXAsd2FsbFRpbWU6aS53YWxsVGltZSxiaW5zOmU/UVllKGkuYmlucyxlLHQpOltdfSkpfShzW2FdLm1hcCh1PT57bGV0e3dhbGxUaW1lOmQsc3RlcDpwfT11O3JldHVybnt3YWxsVGltZTpkLHN0ZXA6cCxiaW5zOnUuYmlucy5tYXAoZj0+KHt4OmYubWluLGR4OmYubWF4LWYubWluLHk6Zi5jb3VudH0pKX19KSk6W119KSksdGhpcy5zdGVwcyQ9dGhpcy5kYXRhJC5waXBlKEwobz0+by5tYXAocz0+cy5zdGVwKSkpLHRoaXMubGlua2VkVGltZVNlbGVjdGlvbiQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFhtKSx0aGlzLnN0ZXBzJF0pLnBpcGUoTCgoW28sc10pPT57aWYoIW8pcmV0dXJuIG51bGw7bGV0IGE9MS8wLGw9LTEvMDtmb3IobGV0IHUgb2YgcylhPU1hdGgubWluKHUsYSksbD1NYXRoLm1heCh1LGwpO3JldHVybiBmdW5jdGlvbihuLHQpe2lmKG51bGwhPT1uLmVuZFN0ZXApcmV0dXJuIG47bGV0IGU9ZnVuY3Rpb24obix0KXtsZXQgZT0xLzAsaT1udWxsO2ZvcihsZXQgciBvZiB0KXtsZXQgbz1NYXRoLmFicyhuLXIpO288ZSYmKGU9byxpPXIpfXJldHVybiBpfShuLnN0YXJ0U3RlcCx0KTtyZXR1cm4gbnVsbCE9PWU/ey4uLm4sc3RhcnRTdGVwOmV9Om59KFFoKG8sYSxsKSxzKX0pKSx0aGlzLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFhtKSx0aGlzLmxpbmtlZFRpbWVTZWxlY3Rpb24kXSkucGlwZShMKChbbyxzXSk9Pm8mJnMmJiFzLmNsaXBwZWQmJm51bGw9PT1vLmVuZCYmby5zdGFydC5zdGVwIT09cy5zdGFydFN0ZXApKSx0aGlzLmxvYWRTdGF0ZSQ9dGhpcy5zdG9yZS5zZWxlY3QoYmgsdGhpcy5jYXJkSWQpLHRoaXMudGFnJD1pLnBpcGUoTChvPT5vLnRhZykpLHRoaXMudGl0bGUkPXRoaXMudGFnJC5waXBlKEwobz0+bHkobyx0aGlzLmdyb3VwTmFtZSkpKSx0aGlzLnJ1bklkJD1pLnBpcGUoTChvPT5vLnJ1bklkKSksdGhpcy5pc1Bpbm5lZCQ9dGhpcy5zdG9yZS5zZWxlY3QoQ2gsdGhpcy5jYXJkSWQpfW9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChZaChlKSl9b25MaW5rZWRUaW1lVG9nZ2xlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWGgoe2FmZm9yZGFuY2U6YmwuRk9CX0RFU0VMRUNUfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siaGlzdG9ncmFtLWNhcmQiXV0saW5wdXRzOntjYXJkSWQ6ImNhcmRJZCIsZ3JvdXBOYW1lOiJncm91cE5hbWUiLHJ1bkNvbG9yU2NhbGU6InJ1bkNvbG9yU2NhbGUifSxvdXRwdXRzOntmdWxsV2lkdGhDaGFuZ2VkOiJmdWxsV2lkdGhDaGFuZ2VkIixmdWxsSGVpZ2h0Q2hhbmdlZDoiZnVsbEhlaWdodENoYW5nZWQiLHBpblN0YXRlQ2hhbmdlZDoicGluU3RhdGVDaGFuZ2VkIn0sZGVjbHM6MTEsdmFyczozMixjb25zdHM6W1szLCJsb2FkU3RhdGUiLCJ0aXRsZSIsInRhZyIsInJ1bklkIiwiZGF0YSIsIm1vZGUiLCJ4QXhpc1R5cGUiLCJydW5Db2xvclNjYWxlIiwic2hvd0Z1bGxTaXplIiwiaXNQaW5uZWQiLCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLCJsaW5rZWRUaW1lU2VsZWN0aW9uIiwib25GdWxsU2l6ZVRvZ2dsZSIsIm9uUGluQ2xpY2tlZCIsIm9uTGlua2VkVGltZVNlbGVjdGlvbkNoYW5nZWQiLCJvbkxpbmtlZFRpbWVUb2dnbGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJoaXN0b2dyYW0tY2FyZC1jb21wb25lbnQiLDApLFAoIm9uRnVsbFNpemVUb2dnbGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25GdWxsU2l6ZVRvZ2dsZSgpfSkoIm9uUGluQ2xpY2tlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkucGluU3RhdGVDaGFuZ2VkLmVtaXQobyl9KSgib25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25MaW5rZWRUaW1lU2VsZWN0aW9uQ2hhbmdlZChvKX0pKCJvbkxpbmtlZFRpbWVUb2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uTGlua2VkVGltZVRvZ2dsZWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksdigpKSwyJmUmJnkoImxvYWRTdGF0ZSIsVSgxLDEyLGkubG9hZFN0YXRlJCkpKCJ0aXRsZSIsVSgyLDE0LGkudGl0bGUkKSkoInRhZyIsVSgzLDE2LGkudGFnJCkpKCJydW5JZCIsVSg0LDE4LGkucnVuSWQkKSkoImRhdGEiLFUoNSwyMCxpLmRhdGEkKSkoIm1vZGUiLFUoNiwyMixpLm1vZGUkKSkoInhBeGlzVHlwZSIsVSg3LDI0LGkueEF4aXNUeXBlJCkpKCJydW5Db2xvclNjYWxlIixpLnJ1bkNvbG9yU2NhbGUpKCJzaG93RnVsbFNpemUiLGkuc2hvd0Z1bGxTaXplKSgiaXNQaW5uZWQiLFUoOCwyNixpLmlzUGlubmVkJCkpKCJpc0Nsb3Nlc3RTdGVwSGlnaGxpZ2h0ZWQiLFUoOSwyOCxpLmlzQ2xvc2VzdFN0ZXBIaWdobGlnaHRlZCQpKSgibGlua2VkVGltZVNlbGVjdGlvbiIsVSgxMCwzMCxpLmxpbmtlZFRpbWVTZWxlY3Rpb24kKSl9LGRlcGVuZGVuY2llczpbeHBlLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gU1hlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiaW1hZ2UtY2FyZCIsNiksUCgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25GdWxsV2lkdGhDaGFuZ2VkKHIpKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoMikub25QaW5TdGF0ZUNoYW5nZWQoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKDIpO3koImNhcmRJZCIsZS5jYXJkSWQpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKSgicnVuQ29sb3JTY2FsZSIsZS5ydW5Db2xvclNjYWxlKX19ZnVuY3Rpb24gRVhlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic2NhbGFyLWNhcmQiLDcpLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uRnVsbFdpZHRoQ2hhbmdlZChyKSl9KSgiZnVsbEhlaWdodENoYW5nZWQiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocikpfSkoInBpblN0YXRlQ2hhbmdlZCIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vblBpblN0YXRlQ2hhbmdlZCgpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoMik7eSgiY2FyZElkIixlLmNhcmRJZCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpfX1mdW5jdGlvbiBUWGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJoaXN0b2dyYW0tY2FyZCIsOCksUCgiZnVsbFdpZHRoQ2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25GdWxsV2lkdGhDaGFuZ2VkKHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25GdWxsSGVpZ2h0Q2hhbmdlZChyKSl9KSgicGluU3RhdGVDaGFuZ2VkIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDIpLm9uUGluU3RhdGVDaGFuZ2VkKCkpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixlLmdyb3VwTmFtZSkoInJ1bkNvbG9yU2NhbGUiLGUucnVuQ29sb3JTY2FsZSl9fWZ1bmN0aW9uIERYZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTtDKDEpLGplKCJQbGFjZWhvbGRlciBlcnJvciBmb3I6ICIsZS5jYXJkSWQsIiIpfX1mdW5jdGlvbiBBWGUobix0KXtpZigxJm4mJihzbigwLDEpLEUoMSxTWGUsMSwzLCJpbWFnZS1jYXJkIiwyKSxFKDIsRVhlLDEsMiwic2NhbGFyLWNhcmQiLDMpLEUoMyxUWGUsMSwzLCJoaXN0b2dyYW0tY2FyZCIsNCksRSg0LERYZSwyLDEsImRpdiIsNSksYW4oKSksMiZuKXtsZXQgZT1TKCk7eSgibmdTd2l0Y2giLGUucGx1Z2luVHlwZSksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5JTUFHRVMpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpblR5cGUuU0NBTEFSUyksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luVHlwZS5ISVNUT0dSQU1TKX19dmFyIE1wZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPXJpLHRoaXMuZnVsbFdpZHRoQ2hhbmdlZD1uZXcgRyx0aGlzLmZ1bGxIZWlnaHRDaGFuZ2VkPW5ldyBHLHRoaXMucGluU3RhdGVDaGFuZ2VkPW5ldyBHfW9uRnVsbFdpZHRoQ2hhbmdlZChlKXt0aGlzLmZ1bGxXaWR0aENoYW5nZWQuZW1pdChlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUpe3RoaXMuZnVsbEhlaWdodENoYW5nZWQuZW1pdChlKX1vblBpblN0YXRlQ2hhbmdlZCgpe3RoaXMucGluU3RhdGVDaGFuZ2VkLmVtaXQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3LWNvbXBvbmVudCJdXSxpbnB1dHM6e2lzRXZlclZpc2libGU6ImlzRXZlclZpc2libGUiLGNhcmRJZDoiY2FyZElkIixncm91cE5hbWU6Imdyb3VwTmFtZSIscGx1Z2luVHlwZToicGx1Z2luVHlwZSIscnVuQ29sb3JTY2FsZToicnVuQ29sb3JTY2FsZSJ9LG91dHB1dHM6e2Z1bGxXaWR0aENoYW5nZWQ6ImZ1bGxXaWR0aENoYW5nZWQiLGZ1bGxIZWlnaHRDaGFuZ2VkOiJmdWxsSGVpZ2h0Q2hhbmdlZCIscGluU3RhdGVDaGFuZ2VkOiJwaW5TdGF0ZUNoYW5nZWQifSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1szLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFszLCJjYXJkSWQiLCJncm91cE5hbWUiLCJydW5Db2xvclNjYWxlIiwiZnVsbFdpZHRoQ2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCIsInBpblN0YXRlQ2hhbmdlZCIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1N3aXRjaERlZmF1bHQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwicnVuQ29sb3JTY2FsZSIsImZ1bGxXaWR0aENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXSxbMywiY2FyZElkIiwiZ3JvdXBOYW1lIiwiZnVsbFdpZHRoQ2hhbmdlZCIsImZ1bGxIZWlnaHRDaGFuZ2VkIiwicGluU3RhdGVDaGFuZ2VkIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkUoMCxBWGUsNSw0LCJuZy1jb250YWluZXIiLDApLDImZSYmeSgibmdJZiIsaS5pc0V2ZXJWaXNpYmxlKX0sZGVwZW5kZW5jaWVzOltCZSxDcixVcixjaCxuc2UsX3BlLENwZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksd3BlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuaXNFdmVyVmlzaWJsZT0hMSx0aGlzLmZ1bGxXaWR0aENoYW5nZWQ9bmV3IEcsdGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZD1uZXcgRyx0aGlzLnJ1bkNvbG9yU2NhbGUkPXRoaXMuc3RvcmUuc2VsZWN0KG5jKS5waXBlKGIwKDM1MCx2b2lkIDAse2xlYWRpbmc6ITAsdHJhaWxpbmc6ITB9KSxMKGk9PnI9PmkuaGFzT3duUHJvcGVydHkocik/aVtyXToiI2ZmZiIpKX1vblZpc2liaWxpdHlDaGFuZ2Uoe3Zpc2libGU6ZX0pe3RoaXMuaXNFdmVyVmlzaWJsZT10aGlzLmlzRXZlclZpc2libGV8fGV9b25GdWxsV2lkdGhDaGFuZ2VkKGUpe3RoaXMuZnVsbFdpZHRoQ2hhbmdlZC5lbWl0KGUpfW9uRnVsbEhlaWdodENoYW5nZWQoZSl7dGhpcy5mdWxsSGVpZ2h0Q2hhbmdlZC5lbWl0KGUpfW9uUGluU3RhdGVDaGFuZ2VkKCl7dGhpcy5zdG9yZS5zZWxlY3QoQ2gsdGhpcy5jYXJkSWQpLnBpcGUoUXQoMSksV3QodGhpcy5zdG9yZS5zZWxlY3QoeWVlKSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5zdG9yZS5kaXNwYXRjaChyeSh7Y2FyZElkOnRoaXMuY2FyZElkLGNhbkNyZWF0ZU5ld1BpbnM6aSx3YXNQaW5uZWQ6ZX0pKX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siY2FyZC12aWV3Il1dLGlucHV0czp7Y2FyZElkOiJjYXJkSWQiLGdyb3VwTmFtZToiZ3JvdXBOYW1lIixwbHVnaW5UeXBlOiJwbHVnaW5UeXBlIn0sb3V0cHV0czp7ZnVsbFdpZHRoQ2hhbmdlZDoiZnVsbFdpZHRoQ2hhbmdlZCIsZnVsbEhlaWdodENoYW5nZWQ6ImZ1bGxIZWlnaHRDaGFuZ2VkIn0sZGVjbHM6Mix2YXJzOjcsY29uc3RzOltbIm9ic2VydmVJbnRlcnNlY3Rpb24iLCIiLCJpbnRlcnNlY3Rpb25PYnNlcnZlck1hcmdpbiIsIjIwMHB4IDIwMHB4IDIwMHB4IDIwMHB4IiwzLCJpc0V2ZXJWaXNpYmxlIiwiY2FyZElkIiwiZ3JvdXBOYW1lIiwicGx1Z2luVHlwZSIsInJ1bkNvbG9yU2NhbGUiLCJmdWxsV2lkdGhDaGFuZ2VkIiwiZnVsbEhlaWdodENoYW5nZWQiLCJwaW5TdGF0ZUNoYW5nZWQiLCJvblZpc2liaWxpdHlDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImNhcmQtdmlldy1jb21wb25lbnQiLDApLFAoImZ1bGxXaWR0aENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRnVsbFdpZHRoQ2hhbmdlZChvKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25GdWxsSGVpZ2h0Q2hhbmdlZChvKX0pKCJwaW5TdGF0ZUNoYW5nZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QaW5TdGF0ZUNoYW5nZWQoKX0pKCJvblZpc2liaWxpdHlDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmlzaWJpbGl0eUNoYW5nZShvKX0pLEIoMSwiYXN5bmMiKSx2KCkpLDImZSYmeSgiaXNFdmVyVmlzaWJsZSIsaS5pc0V2ZXJWaXNpYmxlKSgiY2FyZElkIixpLmNhcmRJZCkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpKCJwbHVnaW5UeXBlIixpLnBsdWdpblR5cGUpKCJydW5Db2xvclNjYWxlIixVKDEsNSxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbYXksTXBlLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZn1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gT1hlKG4sdCl7MSZuJiZOaSgwKX12YXIga1hlPWZ1bmN0aW9uKG4sdCl7cmV0dXJueyJmdWxsLXdpZHRoIjpuLCJmdWxsLWhlaWdodCI6dH19O2Z1bmN0aW9uIEZYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNSkoMSwiY2FyZC12aWV3Iiw2KSxQKCJmdWxsV2lkdGhDaGFuZ2VkIixmdW5jdGlvbihyKXtsZXQgcz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikub25GdWxsV2lkdGhDaGFuZ2VkKHMuY2FyZElkLHIpKX0pKCJmdWxsSGVpZ2h0Q2hhbmdlZCIsZnVuY3Rpb24ocil7bGV0IHM9b2UoZSkuJGltcGxpY2l0O3JldHVybiBzZShTKDIpLm9uRnVsbEhlaWdodENoYW5nZWQocy5jYXJkSWQscikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7eSgibmdDbGFzcyIsUXIoNixrWGUsaS5jYXJkc0F0RnVsbFdpZHRoLmhhcyhlLmNhcmRJZCksaS5jYXJkc0F0RnVsbEhlaWdodC5oYXMoZS5jYXJkSWQpKSksQygxKSx5KCJjYXJkSWQiLGUuY2FyZElkKSgiZ3JvdXBOYW1lIixpLmdyb3VwTmFtZSkoInBsdWdpblR5cGUiLGUucGx1Z2luKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcikoImNhcmRMYXp5TG9hZGVyIixlLmNhcmRJZCl9fWZ1bmN0aW9uIE5YZShuLHQpezEmbiYmTmkoMCl9dmFyIExYZT1mdW5jdGlvbigpe3JldHVybntpc0JvdHRvbUNvbnRyb2w6ITF9fSxCWGU9ZnVuY3Rpb24oKXtyZXR1cm57aXNCb3R0b21Db250cm9sOiEwfX07ZnVuY3Rpb24gVlhlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiKSxFKDEsT1hlLDEsMCwibmctY29udGFpbmVyIiwyKSxfKDIsImRpdiIsMyksRSgzLEZYZSwyLDksImRpdiIsNCksdigpLEUoNCxOWGUsMSwwLCJuZy1jb250YWluZXIiLDIpLHYoKSksMiZuKXtsZXQgZT1TKCksaT0kZSgyKTtDKDEpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLGkpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsUXAoOCxMWGUpKSxDKDEpLFB0KCJncmlkLXRlbXBsYXRlLWNvbHVtbnMiLGUuZ3JpZFRlbXBsYXRlQ29sdW1uKSxDKDEpLHkoIm5nRm9yT2YiLGUuY2FyZElkc1dpdGhNZXRhZGF0YSkoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5Q2FyZHMpLEMoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsaSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRcCg5LEJYZSkpfX1mdW5jdGlvbiBIWGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDEyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7b2UoZSk7bGV0IG89UygzKTtyZXR1cm4gc2Uoby5oYW5kbGVQYWdlQ2hhbmdlKG8ucGFnZUluZGV4LTEsci50YXJnZXQpKX0pLEEoMSwiIFByZXZpb3VzICIpLHYoKX0yJm4mJnkoImRpc2FibGVkIiwwPT09UygzKS5wYWdlSW5kZXgpfWZ1bmN0aW9uIFVYZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsInNwYW4iLDE1KSgxLCJpbnB1dCIsMTYpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUyg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShyKSl9KSgiY2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUyg0KS5vblBhZ2luYXRpb25JbnB1dENoYW5nZShyKSl9KSx2KCksQSgyKSx2KCl9aWYoMiZuKXtsZXQgZT1TKDQpO0MoMSkseSgidmFsdWUiLGUucGFnZUluZGV4KzEpKCJtYXgiLGUubnVtUGFnZXMpLEMoMSksamUoIiBvZiAiLGUubnVtUGFnZXMsIiIpfX1mdW5jdGlvbiB6WGUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJzcGFuIiksRSgxLFVYZSwzLDMsInNwYW4iLDEzKSxfKDIsImJ1dHRvbiIsMTQpLFAoImNsaWNrIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKDMpO3JldHVybiBzZShvLmhhbmRsZVBhZ2VDaGFuZ2Uoby5wYWdlSW5kZXgrMSxyLnRhcmdldCkpfSksQSgzLCIgTmV4dCAiKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMikuaXNCb3R0b21Db250cm9sLGk9UygpO0MoMSkseSgibmdJZiIsaS5zaG93UGFnaW5hdGlvbklucHV0KGUpKSxDKDEpLHkoImRpc2FibGVkIixpLnBhZ2VJbmRleCsxPj1pLm51bVBhZ2VzKX19ZnVuY3Rpb24galhlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDgpKDEsInNwYW4iLDkpLEUoMixIWGUsMiwxLCJidXR0b24iLDEwKSx2KCksXygzLCJzcGFuIiwxMSksRSg0LHpYZSw0LDIsInNwYW4iLDApLHYoKSgpKSwyJm4pe2xldCBlPVMoMik7QygyKSx5KCJuZ0lmIixlLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpLEMoMikseSgibmdJZiIsZS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKX19ZnVuY3Rpb24gR1hlKG4sdCl7MSZuJiZFKDAsalhlLDUsMiwiZGl2Iiw3KSwyJm4mJnkoIm5nSWYiLFMoKS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKX12YXIgU3BlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jZGtTY3JvbGxhYmxlPWUsdGhpcy5QbHVnaW5UeXBlPXJpLHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPSIiLHRoaXMuY2FyZHNBdEZ1bGxXaWR0aD1uZXcgU2V0LHRoaXMuY2FyZHNBdEZ1bGxIZWlnaHQ9bmV3IFNldCx0aGlzLnBhZ2VJbmRleENoYW5nZWQ9bmV3IEd9bmdPbkluaXQoKXt0aGlzLmlzQ2FyZFdpZHRoVmFsaWQodGhpcy5jYXJkTWluV2lkdGgpJiYodGhpcy5ncmlkVGVtcGxhdGVDb2x1bW49YHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgke3RoaXMuY2FyZE1pbldpZHRofXB4LCAxZnIpKWApfW5nT25DaGFuZ2VzKGUpe2lmKGUuY2FyZE1pbldpZHRoKXtsZXQgaT1lLmNhcmRNaW5XaWR0aC5jdXJyZW50VmFsdWU7dGhpcy5pc0NhcmRXaWR0aFZhbGlkKGkpPyh0aGlzLmNhcmRNaW5XaWR0aD1pLHRoaXMuZ3JpZFRlbXBsYXRlQ29sdW1uPWByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoJHt0aGlzLmNhcmRNaW5XaWR0aH1weCwgMWZyKSlgKTp0aGlzLmdyaWRUZW1wbGF0ZUNvbHVtbj0iIn19aXNDYXJkV2lkdGhWYWxpZChlKXtyZXR1cm4gZSYmZT49MzM1JiZlPD03MzV9c2hvd1BhZ2luYXRpb25JbnB1dChlKXtyZXR1cm4gZX1oYW5kbGVQYWdlQ2hhbmdlKGUsaSl7bGV0IHI9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7c2V0VGltZW91dCgoKT0+e3RoaXMuc2Nyb2xsVG9LZWVwVGFyZ2V0UG9zaXRpb24oaSxyKX0sMCksdGhpcy5wYWdlSW5kZXhDaGFuZ2VkLmVtaXQoZSl9c2Nyb2xsVG9LZWVwVGFyZ2V0UG9zaXRpb24oZSxpKXtsZXQgcj10aGlzLmNka1Njcm9sbGFibGU/LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O3ImJnIuc2Nyb2xsVG8oMCxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1pK3Iuc2Nyb2xsVG9wKX10cmFja0J5Q2FyZHMoZSxpKXtyZXR1cm4gaS5jYXJkSWR9b25QYWdpbmF0aW9uSW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQ7aWYoImlucHV0Ij09PWUudHlwZSYmIiI9PT1pLnZhbHVlKXJldHVybjtsZXQgcj1OdW1iZXIoaS52YWx1ZSktMSxvPU1hdGgubWluKE1hdGgubWF4KDAsciksdGhpcy5udW1QYWdlcy0xKTtpLnZhbHVlIT09U3RyaW5nKG8rMSkmJihpLnZhbHVlPVN0cmluZyhvKzEpKSx0aGlzLmhhbmRsZVBhZ2VDaGFuZ2UobyxpKX1vbkZ1bGxXaWR0aENoYW5nZWQoZSxpKXtpP3RoaXMuY2FyZHNBdEZ1bGxXaWR0aC5hZGQoZSk6dGhpcy5jYXJkc0F0RnVsbFdpZHRoLmRlbGV0ZShlKX1vbkZ1bGxIZWlnaHRDaGFuZ2VkKGUsaSl7aT90aGlzLmNhcmRzQXRGdWxsSGVpZ2h0LmFkZChlKTp0aGlzLmNhcmRzQXRGdWxsSGVpZ2h0LmRlbGV0ZShlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShJaCw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyaWQtY29tcG9uZW50Il1dLGlucHV0czp7aXNHcm91cEV4cGFuZGVkOiJpc0dyb3VwRXhwYW5kZWQiLHBhZ2VJbmRleDoicGFnZUluZGV4IixudW1QYWdlczoibnVtUGFnZXMiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLGNhcmRNaW5XaWR0aDoiY2FyZE1pbldpZHRoIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciIsc2hvd1BhZ2luYXRpb25Db250cm9sczoic2hvd1BhZ2luYXRpb25Db250cm9scyJ9LG91dHB1dHM6e3BhZ2VJbmRleENoYW5nZWQ6InBhZ2VJbmRleENoYW5nZWQifSxmZWF0dXJlczpbRnRdLGRlY2xzOjMsdmFyczoxLGNvbnN0czpmdW5jdGlvbigpe2xldCB0LGU7cmV0dXJuIHQ9JGxvY2FsaXplYDpBIGJ1dHRvbiB0aGF0IHNldHMgYSBncm91cCB0byB0aGUgcHJldmlvdXMgcGFnZS7ikJ81NzVlNzgyZmQyN2YyZWU3MGEwMzRhNzc1ZWZlOWFkMTYyNDcyMjUw4pCfMzYyOTk2MDU0NDg3NTM2MDA0NjpQcmV2aW91cyBwYWdlYCxlPSRsb2NhbGl6ZWA6QSBidXR0b24gdGhhdCBzZXRzIGEgZ3JvdXAgdG8gdGhlIG5leHQgcGFnZS7ikJ9jZTNjZWZiMWNkMDA5OWFhNTAwM2RkYTE2ZWM5ZWIyMWZkOGJhNzg54pCfMzMzNzMwMTY5NDIxMDI4NzU5NTpOZXh0IHBhZ2VgLFtbNCwibmdJZiJdLFsiZ3JvdXBDb250cm9scyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwiY2FyZC1ncmlkIl0sWyJjbGFzcyIsImNhcmQtc3BhY2UiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLXNwYWNlIiwzLCJuZ0NsYXNzIl0sWzMsImNhcmRJZCIsImdyb3VwTmFtZSIsInBsdWdpblR5cGUiLCJjYXJkT2JzZXJ2ZXIiLCJjYXJkTGF6eUxvYWRlciIsImZ1bGxXaWR0aENoYW5nZWQiLCJmdWxsSGVpZ2h0Q2hhbmdlZCJdLFsiY2xhc3MiLCJncm91cC1jb250cm9scyIsNCwibmdJZiJdLFsxLCJncm91cC1jb250cm9scyJdLFsxLCJwcmV2LWNvbnRhaW5lciJdLFsiY2xhc3MiLCJwcmV2IHBhZ2luYXRpb24tYnV0dG9uIiwibWF0LWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJpbnB1dC1hbmQtbmV4dC1jb250YWluZXIiXSxbIm1hdC1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDEsInByZXYiLCJwYWdpbmF0aW9uLWJ1dHRvbiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWlucHV0Iiw0LCJuZ0lmIl0sWyJtYXQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsZSwxLCJuZXh0IiwicGFnaW5hdGlvbi1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwicGFnaW5hdGlvbi1pbnB1dCJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLDMsInZhbHVlIiwibWF4IiwiaW5wdXQiLCJjaGFuZ2UiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoRSgwLFZYZSw1LDEwLCJkaXYiLDApLEUoMSxHWGUsMSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLHF0KSksMiZlJiZ5KCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCl9LGRlcGVuZGVuY2llczpbT29lLHdwZSxGbixkbixCZSxvcyxfbl0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtjb250YWluOmNvbnRlbnR9LmNhcmQtZ3JpZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMzM1cHgsIDFmcikpO2dhcDoxNnB4O3BhZGRpbmc6MTZweH0uY2FyZC1zcGFjZS5mdWxsLXdpZHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtncmlkLWNvbHVtbi1zdGFydDoxO2dyaWQtY29sdW1uLWVuZDotMX0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo0ODBweH0uY2FyZC1zcGFjZS5mdWxsLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV0gICBjYXJkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfWNhcmQtdmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6NHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250YWluOmxheW91dCBwYWludDtkaXNwbGF5OmJsb2NrO21pbi1oZWlnaHQ6MzIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgY2FyZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICM1NTV9Lmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjE2MTYxO2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpjZW50ZXI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Z2FwOjE2cHg7cGFkZGluZzowIDE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRyb2xzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LW9mLXR5cGV7cGFkZGluZy10b3A6MTZweH0uZ3JvdXAtY29udHJvbHNbX25nY29udGVudC0lQ09NUCVdOmxhc3Qtb2YtdHlwZXtwYWRkaW5nLWJvdHRvbToxNnB4fS5wcmV2LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtc3RhcnR9LmlucHV0LWFuZC1uZXh0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1zZWxmOmZsZXgtZW5kfS5wYWdpbmF0aW9uLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MTZweH0ucGFnaW5hdGlvbi1pbnB1dFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDApO2JvcmRlcjoxcHggc29saWQgY3VycmVudENvbG9yO2NvbG9yOmluaGVyaXQ7Zm9udDppbmhlcml0fS5wYWdpbmF0aW9uLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0ucGFnaW5hdGlvbi1idXR0b25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM3NTc1NzV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZCwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnBhZ2luYXRpb24tYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTpkaXNhYmxlZHtjb2xvcjojNjE2MTYxfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQWI9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ncm91cE5hbWU9bnVsbCx0aGlzLmdyb3VwTmFtZSQ9bmV3IGhyKG51bGwpLHRoaXMucGFnZUluZGV4JD1uZXcgaHIoMCksdGhpcy5pdGVtcyQ9bmV3IGhyKFtdKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlLHRoaXMubnVtUGFnZXMkPUx0KFt0aGlzLml0ZW1zJCx0aGlzLnN0b3JlLnNlbGVjdChOYS5nZXRQYWdlU2l6ZSldKS5waXBlKEwoKFtpLHJdKT0+TWF0aC5jZWlsKGkubGVuZ3RoL3IpKSksdGhpcy5pc0dyb3VwRXhwYW5kZWQkPXRoaXMuZ3JvdXBOYW1lJC5waXBlKHVpKGk9Pm51bGwhPT1pP3RoaXMuc3RvcmUuc2VsZWN0KExJLGkpOlh0KCEwKSkpLHRoaXMuc2hvd1BhZ2luYXRpb25Db250cm9scyQ9dGhpcy5udW1QYWdlcyQucGlwZShMKGk9Pmk+MSkpLHRoaXMubm9ybWFsaXplZFBhZ2VJbmRleCQ9THQoW3RoaXMucGFnZUluZGV4JCx0aGlzLm51bVBhZ2VzJF0pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxrdCgoW2kscl0pPT57MCE9PXImJihpPj1yP3RoaXMucGFnZUluZGV4JC5uZXh0KHItMSk6aTwwJiZ0aGlzLnBhZ2VJbmRleCQubmV4dCgwKSl9KSxMKChbaSxyXSk9Pk1hdGgubWluKE1hdGgubWF4KGksMCksci0xKSksTWEoMSkpLHRoaXMucGFnZWRJdGVtcyQ9THQoW3RoaXMuaXRlbXMkLHRoaXMuc3RvcmUuc2VsZWN0KE5hLmdldFBhZ2VTaXplKSx0aGlzLm5vcm1hbGl6ZWRQYWdlSW5kZXgkLHRoaXMuaXNHcm91cEV4cGFuZGVkJF0pLnBpcGUoTCgoW2kscixvLHNdKT0+aS5zbGljZShyKm8scipvKyhzP3I6MCkpKSksdGhpcy5jYXJkTWluV2lkdGgkPXRoaXMuc3RvcmUuc2VsZWN0KGR2KX1uZ09uQ2hhbmdlcyhlKXtlLmNhcmRJZHNXaXRoTWV0YWRhdGEmJnRoaXMuaXRlbXMkLm5leHQodGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhKSxlLmdyb3VwTmFtZSYmdGhpcy5ncm91cE5hbWUkLm5leHQodGhpcy5ncm91cE5hbWUpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1vblBhZ2VJbmRleENoYW5nZWQoZSl7dGhpcy5wYWdlSW5kZXgkLm5leHQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWNhcmQtZ3JpZCJdXSxpbnB1dHM6e2dyb3VwTmFtZToiZ3JvdXBOYW1lIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6Nyx2YXJzOjE5LGNvbnN0czpbWzMsImlzR3JvdXBFeHBhbmRlZCIsInBhZ2VJbmRleCIsIm51bVBhZ2VzIiwic2hvd1BhZ2luYXRpb25Db250cm9scyIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkTWluV2lkdGgiLCJjYXJkT2JzZXJ2ZXIiLCJwYWdlSW5kZXhDaGFuZ2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtZXRyaWNzLWNhcmQtZ3JpZC1jb21wb25lbnQiLDApLFAoInBhZ2VJbmRleENoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnZUluZGV4Q2hhbmdlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJpc0dyb3VwRXhwYW5kZWQiLFUoMSw3LGkuaXNHcm91cEV4cGFuZGVkJCkpKCJwYWdlSW5kZXgiLFUoMiw5LGkubm9ybWFsaXplZFBhZ2VJbmRleCQpKSgibnVtUGFnZXMiLFUoMywxMSxpLm51bVBhZ2VzJCkpKCJzaG93UGFnaW5hdGlvbkNvbnRyb2xzIixVKDQsMTMsaS5zaG93UGFnaW5hdGlvbkNvbnRyb2xzJCkpKCJjYXJkSWRzV2l0aE1ldGFkYXRhIixVKDUsMTUsaS5wYWdlZEl0ZW1zJCkpKCJjYXJkTWluV2lkdGgiLFUoNiwxNyxpLmNhcmRNaW5XaWR0aCQpKSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlcil9LGRlcGVuZGVuY2llczpbU3BlLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBYWGUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDcpLEEoMSksQigyLCJudW1iZXIiKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiIsVSgyLDEsZS5udW1iZXJPZkNhcmRzKSwiIGNhcmRzIil9fWZ1bmN0aW9uIFFYZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsOCl9ZnVuY3Rpb24gS1hlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiw5KX12YXIgRXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmdyb3VwRXhwYW5zaW9uVG9nZ2xlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7Z3JvdXBOYW1lOiJncm91cE5hbWUiLG51bWJlck9mQ2FyZHM6Im51bWJlck9mQ2FyZHMiLGlzR3JvdXBFeHBhbmRlZDoiaXNHcm91cEV4cGFuZGVkIn0sb3V0cHV0czp7Z3JvdXBFeHBhbnNpb25Ub2dnbGVkOiJncm91cEV4cGFuc2lvblRvZ2dsZWQifSxkZWNsczo5LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkEgYnV0dG9uIHRoYXQgYWxsb3dzIHVzZXIgdG8gZXhwYW5kIGEgdGFnIGdyb3VwLuKQn2ZmYWExMTQ3MWI4NzhhNmRmZmUyZTY4YzZmMzcwNjRhOWUwNzQ4NTPikJ81Mzg2MDU0MzI1Mjc0Nzc5MjU4OkV4cGFuZCBncm91cGAsW1siYXJpYS1sYWJlbCIsdCwxLCJncm91cC10b29sYmFyIiwzLCJjbGljayJdLFsxLCJncm91cC10aXRsZS13cmFwcGVyIl0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIiwzLCJ0aXRsZSJdLFsiY2xhc3MiLCJncm91cC1jYXJkLWNvdW50Iiw0LCJuZ0lmIl0sWzEsImV4cGFuZC1ncm91cC1pY29uIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJleHBhbmRNb3JlIiwiIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbInN2Z0ljb24iLCJleHBhbmRfbGVzc18yNHB4Il0sWyJzdmdJY29uIiwiZXhwYW5kX21vcmVfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImJ1dHRvbiIsMCksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZ3JvdXBFeHBhbnNpb25Ub2dnbGVkLmVtaXQoKX0pLF8oMSwic3BhbiIsMSkoMiwic3BhbiIsMiksQSgzKSx2KCksRSg0LFhYZSwzLDMsInNwYW4iLDMpLHYoKSxfKDUsInNwYW4iLDQpLEUoNixRWGUsMSwwLCJtYXQtaWNvbiIsNSksRSg3LEtYZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDYscXQpLHYoKSgpKSwyJmUpe2xldCByPSRlKDgpO0MoMiksWmkoInRpdGxlIixpLmdyb3VwTmFtZSksQygxKSx5dChpLmdyb3VwTmFtZSksQygxKSx5KCJuZ0lmIixpLm51bWJlck9mQ2FyZHM+MSksQygyKSx5KCJuZ0lmIixpLmlzR3JvdXBFeHBhbmRlZCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbQmUsR3QsUWxdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9W19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWJlYmViO2NvbG9yOiMyMTIxMjE7dG9wOi0xcHg7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7Zm9udDppbmhlcml0fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmfS5jYXJkLWdyb3VwOmZpcnN0LW9mLXR5cGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MH1bX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5leHBhbmQtZ3JvdXAtaWNvbltfbmdjb250ZW50LSVDT01QJV06ZGlzYWJsZWR7Y29sb3I6Izc1NzU3NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhwYW5kLWdyb3VwLWljb25bX25nY29udGVudC0lQ09NUCVdOmRpc2FibGVke2NvbG9yOiM2MTYxNjF9Lmdyb3VwLXRpdGxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxO3RleHQtYWxpZ246bGVmdH0uZ3JvdXAtdGl0bGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMH0uZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MTYxNjE7bWFyZ2luLWxlZnQ6NnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZ3JvdXBOYW1lPW51bGwsdGhpcy5pc0dyb3VwRXhwYW5kZWQkPVh0KCExKX1uZ09uSW5pdCgpe3RoaXMuaXNHcm91cEV4cGFuZGVkJD1udWxsIT09dGhpcy5ncm91cE5hbWU/dGhpcy5zdG9yZS5zZWxlY3QoTEksdGhpcy5ncm91cE5hbWUpOlh0KCExKX1vbkdyb3VwRXhwYW5zaW9uVG9nZ2xlZCgpe2lmKG51bGw9PT10aGlzLmdyb3VwTmFtZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiBleHBhbnNpb24gY2Fubm90IGJlIHRvZ2dsZWQgd2hlbiBncm91cE5hbWUgaXMgbnVsbCIpO3RoaXMuc3RvcmUuZGlzcGF0Y2goYVIoe3RhZ0dyb3VwOnRoaXMuZ3JvdXBOYW1lfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiXV0saW5wdXRzOntncm91cE5hbWU6Imdyb3VwTmFtZSIsbnVtYmVyT2ZDYXJkczoibnVtYmVyT2ZDYXJkcyJ9LGRlY2xzOjIsdmFyczo1LGNvbnN0czpbWzMsIm51bWJlck9mQ2FyZHMiLCJpc0dyb3VwRXhwYW5kZWQiLCJncm91cE5hbWUiLCJncm91cEV4cGFuc2lvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpY3MtY2FyZC1ncm91cC10b29sYmFyLWNvbXBvbmVudCIsMCksUCgiZ3JvdXBFeHBhbnNpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uR3JvdXBFeHBhbnNpb25Ub2dnbGVkKCl9KSxCKDEsImFzeW5jIiksdigpKSwyJmUmJnkoIm51bWJlck9mQ2FyZHMiLGkubnVtYmVyT2ZDYXJkcykoImlzR3JvdXBFeHBhbmRlZCIsVSgxLDMsaS5pc0dyb3VwRXhwYW5kZWQkKSkoImdyb3VwTmFtZSIsaS5ncm91cE5hbWUpfSxkZXBlbmRlbmNpZXM6W0VwZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gJFhlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDEpLE8oMSwibWV0cmljcy1jYXJkLWdyb3VwLXRvb2xiYXIiLDIpKDIsIm1ldHJpY3MtY2FyZC1ncmlkIiwzKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7QygxKSx5KCJudW1iZXJPZkNhcmRzIixlLml0ZW1zLmxlbmd0aCkoImdyb3VwTmFtZSIsZS5ncm91cE5hbWUpLEMoMSkseSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsZS5pdGVtcykoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpKCJncm91cE5hbWUiLGUuZ3JvdXBOYW1lKX19dmFyIERwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5QbHVnaW5UeXBlPXJpfXRyYWNrQnlHcm91cChlLGkpe3JldHVybiBpLmdyb3VwTmFtZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiXV0saW5wdXRzOntjYXJkR3JvdXBzOiJjYXJkR3JvdXBzIixjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjEsdmFyczoyLGNvbnN0czpbWyJjbGFzcyIsImNhcmQtZ3JvdXAiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjYXJkLWdyb3VwIl0sWzMsIm51bWJlck9mQ2FyZHMiLCJncm91cE5hbWUiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsImdyb3VwTmFtZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmRSgwLCRYZSwzLDUsImRpdiIsMCksMiZlJiZ5KCJuZ0Zvck9mIixpLmNhcmRHcm91cHMpKCJuZ0ZvclRyYWNrQnkiLGkudHJhY2tCeUdyb3VwKX0sZGVwZW5kZW5jaWVzOltkbixBYixUcGVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxBcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkR3JvdXBzJD10aGlzLnN0b3JlLnNlbGVjdChtZykucGlwZShmcih0aGlzLnN0b3JlLnNlbGVjdChuZCkpLEwoKFtpLHJdKT0+ci5zaXplP2kuZmlsdGVyKG89PnIuaGFzKG8ucGx1Z2luKSk6aSksTChpPT5mUihpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1jYXJkLWdyb3VwcyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbMywiY2FyZEdyb3VwcyIsImNhcmRPYnNlcnZlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwibWV0cmljcy1jYXJkLWdyb3Vwcy1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSksMiZlJiZ5KCJjYXJkR3JvdXBzIixVKDEsMixpLmNhcmRHcm91cHMkKSkoImNhcmRPYnNlcnZlciIsaS5jYXJkT2JzZXJ2ZXIpfSxkZXBlbmRlbmNpZXM6W0RwZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gblFlKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiBhbmQgIixlLmdldFBsdWdpblR5cGVGaWx0ZXJTdHJpbmcoZS5wbHVnaW5UeXBlcyksIiB2aXN1YWxpemF0aW9uIGZpbHRlciIpfX12YXIgSXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLlBsdWdpblR5cGU9cmksdGhpcy5saXN0Rm9ybWF0dGVyPW5ldyBJbnRsLkxpc3RGb3JtYXQodm9pZCAwLHtzdHlsZToibG9uZyIsdHlwZToiZGlzanVuY3Rpb24ifSl9Z2V0UGx1Z2luVHlwZUZpbHRlclN0cmluZyhlKXtsZXQgaT1bLi4uZV0ubWFwKHI9Pntzd2l0Y2gocil7Y2FzZSByaS5TQ0FMQVJTOnJldHVybiJzY2FsYXIiO2Nhc2UgcmkuSU1BR0VTOnJldHVybiJpbWFnZSI7Y2FzZSByaS5ISVNUT0dSQU1TOnJldHVybiJoaXN0b2dyYW0iO2RlZmF1bHQ6dGhyb3cgbmV3IFJhbmdlRXJyb3IoYFBsZWFzZSBpbXBsZW1lbnQgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3IgcGx1Z2luIHR5cGU6ICR7cn1gKX19KTtyZXR1cm4gdGhpcy5saXN0Rm9ybWF0dGVyLmZvcm1hdChpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1lbXB0eS10YWctbWF0Y2gtY29tcG9uZW50Il1dLGlucHV0czp7cGx1Z2luVHlwZXM6InBsdWdpblR5cGVzIix0YWdGaWx0ZXJSZWdleDoidGFnRmlsdGVyUmVnZXgiLHRhZ0NvdW50czoidGFnQ291bnRzIn0sZGVjbHM6Nix2YXJzOjUsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEEoMCwiTm8gbWF0Y2hlcyBmb3IgdGFnIGZpbHRlciAiKSxfKDEsImNvZGUiKSxBKDIpLHYoKSxFKDMsblFlLDIsMSwic3BhbiIsMCksQSg0KSxCKDUsIm51bWJlciIpKSwyJmUmJihDKDIpLGplKCIvIixpLnRhZ0ZpbHRlclJlZ2V4LCIvIiksQygxKSx5KCJuZ0lmIixpLnBsdWdpblR5cGVzLnNpemUpLEMoMSksamUoIiBvdXQgb2YgIixVKDUsMyxpLnRhZ0NvdW50cyksIiB0YWdzLiIpKX0sZGVwZW5kZW5jaWVzOltCZSxRbF0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksUHBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KG5kKSx0aGlzLnRhZ0ZpbHRlclJlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdChYYyksdGhpcy50YWdDb3VudHMkPXRoaXMuc3RvcmUuc2VsZWN0KG1nKS5waXBlKEwoaT0+bmV3IFNldChpLm1hcCgoe3RhZzpyfSk9PnIpKS5zaXplKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJwbHVnaW5UeXBlcyIsInRhZ0ZpbHRlclJlZ2V4IiwidGFnQ291bnRzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaC1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpKSwyJmUmJnkoInBsdWdpblR5cGVzIixVKDEsMyxpLnBsdWdpblR5cGVzJCkpKCJ0YWdGaWx0ZXJSZWdleCIsVSgyLDUsaS50YWdGaWx0ZXJSZWdleCQpKSgidGFnQ291bnRzIixVKDMsNyxpLnRhZ0NvdW50cyQpKX0sZGVwZW5kZW5jaWVzOltJcGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIG9RZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsNiksQSgxKSxCKDIsIm51bWJlciIpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiIixVKDIsMSxlLmNhcmRJZHNXaXRoTWV0YWRhdGEubGVuZ3RoKSwiIGNhcmRzIil9fWZ1bmN0aW9uIHNRZShuLHQpezEmbiYmTygwLCJtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaCIsNyl9dmFyIFJwZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7aXNFbXB0eU1hdGNoOiJpc0VtcHR5TWF0Y2giLGNhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIixjYXJkSWRzV2l0aE1ldGFkYXRhOiJjYXJkSWRzV2l0aE1ldGFkYXRhIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwid2FybiIsNCwibmdJZiJdLFszLCJjYXJkSWRzV2l0aE1ldGFkYXRhIiwiY2FyZE9ic2VydmVyIl0sWzEsImdyb3VwLWNhcmQtY291bnQiXSxbMSwid2FybiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJzcGFuIiwxKSgyLCJzcGFuIiwyKSxBKDMsIlRhZ3MgbWF0Y2hpbmcgZmlsdGVyIiksdigpLEUoNCxvUWUsMywzLCJzcGFuIiwzKSx2KCkoKSxFKDUsc1FlLDEsMCwibWV0cmljcy1lbXB0eS10YWctbWF0Y2giLDQpLE8oNiwibWV0cmljcy1jYXJkLWdyaWQiLDUpKSwyJmUmJihDKDQpLHkoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSksQygxKSx5KCJuZ0lmIixpLmlzRW1wdHlNYXRjaCksQygxKSx5KCJjYXJkSWRzV2l0aE1ldGFkYXRhIixpLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKSl9LGRlcGVuZGVuY2llczpbQmUsQWIsUHBlLFFsXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7ZGlzcGxheTpmbGV4O2ZsZXg6bm9uZTtoZWlnaHQ6NDJweDttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZzowIDE2cHg7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MTtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDAsMCwwLC4xNSl9Ym9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLXRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzowcHggMnB4IDRweCAwcHggcmdiYSgyNTUsMjU1LDI1NSwuMTUpfS5ncm91cC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmV9Lmdyb3VwLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9Lmdyb3VwLWNhcmQtY291bnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjE2MTYxO21hcmdpbi1sZWZ0OjZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX1tZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9ja31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtZXRyaWNzLWVtcHR5LXRhZy1tYXRjaFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG1ldHJpY3MtZW1wdHktdGFnLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE9wZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmNhcmRJZHNXaXRoTWV0YWRhdGEkPXRoaXMuc3RvcmUuc2VsZWN0KG1nKS5waXBlKGZyKHRoaXMuc3RvcmUuc2VsZWN0KG5kKSksTCgoW2kscl0pPT5yLnNpemU/aS5maWx0ZXIobz0+ci5oYXMoby5wbHVnaW4pKTppKSxmcih0aGlzLnN0b3JlLnNlbGVjdChYYykpLEhyKDIwMCksTCgoW2kscl0pPT57dHJ5e3JldHVybntjYXJkTGlzdDppLHJlZ2V4Om5ldyBSZWdFeHAociwiaSIpfX1jYXRjaHtyZXR1cm57Y2FyZExpc3Q6aSxyZWdleDpudWxsfX19KSxZZSgoe3JlZ2V4Oml9KT0+bnVsbCE9PWkpLEwoKHtjYXJkTGlzdDppLHJlZ2V4OnJ9KT0+aS5maWx0ZXIoKHt0YWc6b30pPT5yLnRlc3QobykpKSx5aSgoaSxyKT0+aS5sZW5ndGg9PT1yLmxlbmd0aCYmaS5ldmVyeSgobyxzKT0+by5jYXJkSWQ9PT1yW3NdLmNhcmRJZCkpLFRzKCksem4oW10pKSx0aGlzLmlzRW1wdHlNYXRjaCQ9dGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJC5waXBlKGZyKHRoaXMuc3RvcmUuc2VsZWN0KG1nKSksTCgoW2kscl0pPT5Cb29sZWFuKHIubGVuZ3RoKSYmMD09PWkubGVuZ3RoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLWZpbHRlcmVkLXZpZXciXV0saW5wdXRzOntjYXJkT2JzZXJ2ZXI6ImNhcmRPYnNlcnZlciJ9LGRlY2xzOjMsdmFyczo3LGNvbnN0czpbWzMsImlzRW1wdHlNYXRjaCIsImNhcmRJZHNXaXRoTWV0YWRhdGEiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsIm1ldHJpY3MtZmlsdGVyZWQtdmlldy1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIikpLDImZSYmeSgiaXNFbXB0eU1hdGNoIixVKDEsMyxpLmlzRW1wdHlNYXRjaCQpKSgiY2FyZElkc1dpdGhNZXRhZGF0YSIsVSgyLDUsaS5jYXJkSWRzV2l0aE1ldGFkYXRhJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltScGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHVRZT1bInBhbmVsIl07ZnVuY3Rpb24gZFFlKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDAsMSksVm4oMiksdigpKSwyJm4pe2xldCBlPXQuaWQsaT1TKCk7eSgiaWQiLGkuaWQpKCJuZ0NsYXNzIixpLl9jbGFzc0xpc3QpLHplKCJhcmlhLWxhYmVsIixpLmFyaWFMYWJlbHx8bnVsbCkoImFyaWEtbGFiZWxsZWRieSIsaS5fZ2V0UGFuZWxBcmlhTGFiZWxsZWRieShlKSl9fXZhciBwUWU9WyIqIl0saFFlPTAsZlFlPXFvKGNsYXNze30pLGtwZT1uZXcgcGUoIm1hdC1hdXRvY29tcGxldGUtZGVmYXVsdC1vcHRpb25zIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybnthdXRvQWN0aXZlRmlyc3RPcHRpb246ITEsYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbjohMX19fSksZ1FlPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBmUWV7Y29uc3RydWN0b3IoZSxpLHIsbyl7c3VwZXIoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1lLHRoaXMuX2VsZW1lbnRSZWY9aSx0aGlzLl9hY3RpdmVPcHRpb25DaGFuZ2VzPVNuLkVNUFRZLHRoaXMuc2hvd1BhbmVsPSExLHRoaXMuX2lzT3Blbj0hMSx0aGlzLmRpc3BsYXlXaXRoPW51bGwsdGhpcy5vcHRpb25TZWxlY3RlZD1uZXcgRyx0aGlzLm9wZW5lZD1uZXcgRyx0aGlzLmNsb3NlZD1uZXcgRyx0aGlzLm9wdGlvbkFjdGl2YXRlZD1uZXcgRyx0aGlzLl9jbGFzc0xpc3Q9e30sdGhpcy5pZD0ibWF0LWF1dG9jb21wbGV0ZS0iK2hRZSsrLHRoaXMuaW5lcnRHcm91cHM9bz8uU0FGQVJJfHwhMSx0aGlzLl9hdXRvQWN0aXZlRmlyc3RPcHRpb249ISFyLmF1dG9BY3RpdmVGaXJzdE9wdGlvbix0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9uPSEhci5hdXRvU2VsZWN0QWN0aXZlT3B0aW9ufWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVuJiZ0aGlzLnNob3dQYW5lbH1nZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbn1zZXQgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uKGUpe3RoaXMuX2F1dG9BY3RpdmVGaXJzdE9wdGlvbj1SdChlKX1nZXQgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbigpe3JldHVybiB0aGlzLl9hdXRvU2VsZWN0QWN0aXZlT3B0aW9ufXNldCBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uKGUpe3RoaXMuX2F1dG9TZWxlY3RBY3RpdmVPcHRpb249UnQoZSl9c2V0IGNsYXNzTGlzdChlKXt0aGlzLl9jbGFzc0xpc3Q9ZSYmZS5sZW5ndGg/ZnVuY3Rpb24obix0PS9ccysvKXtsZXQgZT1bXTtpZihudWxsIT1uKXtsZXQgaT1BcnJheS5pc0FycmF5KG4pP246YCR7bn1gLnNwbGl0KHQpO2ZvcihsZXQgciBvZiBpKXtsZXQgbz1gJHtyfWAudHJpbSgpO28mJmUucHVzaChvKX19cmV0dXJuIGV9KGUpLnJlZHVjZSgoaSxyKT0+KGlbcl09ITAsaSkse30pOnt9LHRoaXMuX3NldFZpc2liaWxpdHlDbGFzc2VzKHRoaXMuX2NsYXNzTGlzdCksdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTmFtZT0iIn1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLl9rZXlNYW5hZ2VyPW5ldyB3dih0aGlzLm9wdGlvbnMpLndpdGhXcmFwKCksdGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcz10aGlzLl9rZXlNYW5hZ2VyLmNoYW5nZS5zdWJzY3JpYmUoZT0+e3RoaXMuaXNPcGVuJiZ0aGlzLm9wdGlvbkFjdGl2YXRlZC5lbWl0KHtzb3VyY2U6dGhpcyxvcHRpb246dGhpcy5vcHRpb25zLnRvQXJyYXkoKVtlXXx8bnVsbH0pfSksdGhpcy5fc2V0VmlzaWJpbGl0eSgpfW5nT25EZXN0cm95KCl7dGhpcy5fYWN0aXZlT3B0aW9uQ2hhbmdlcy51bnN1YnNjcmliZSgpfV9zZXRTY3JvbGxUb3AoZSl7dGhpcy5wYW5lbCYmKHRoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A9ZSl9X2dldFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLnBhbmVsP3RoaXMucGFuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A6MH1fc2V0VmlzaWJpbGl0eSgpe3RoaXMuc2hvd1BhbmVsPSEhdGhpcy5vcHRpb25zLmxlbmd0aCx0aGlzLl9zZXRWaXNpYmlsaXR5Q2xhc3Nlcyh0aGlzLl9jbGFzc0xpc3QpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfV9lbWl0U2VsZWN0RXZlbnQoZSl7bGV0IGk9bmV3IGNsYXNze2NvbnN0cnVjdG9yKHQsZSl7dGhpcy5zb3VyY2U9dCx0aGlzLm9wdGlvbj1lfX0odGhpcyxlKTt0aGlzLm9wdGlvblNlbGVjdGVkLmVtaXQoaSl9X2dldFBhbmVsQXJpYUxhYmVsbGVkYnkoZSl7cmV0dXJuIHRoaXMuYXJpYUxhYmVsP251bGw6dGhpcy5hcmlhTGFiZWxsZWRieT8oZT9lKyIgIjoiIikrdGhpcy5hcmlhTGFiZWxsZWRieTplfV9zZXRWaXNpYmlsaXR5Q2xhc3NlcyhlKXtlW3RoaXMuX3Zpc2libGVDbGFzc109dGhpcy5zaG93UGFuZWwsZVt0aGlzLl9oaWRkZW5DbGFzc109IXRoaXMuc2hvd1BhbmVsfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKFJlKSxNKGtwZSksTShvaSkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KFZpLDcpLG90KHVRZSw1KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS50ZW1wbGF0ZT1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5wYW5lbD1yLmZpcnN0KX19LGlucHV0czp7YXJpYUxhYmVsOlsiYXJpYS1sYWJlbCIsImFyaWFMYWJlbCJdLGFyaWFMYWJlbGxlZGJ5OlsiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYUxhYmVsbGVkYnkiXSxkaXNwbGF5V2l0aDoiZGlzcGxheVdpdGgiLGF1dG9BY3RpdmVGaXJzdE9wdGlvbjoiYXV0b0FjdGl2ZUZpcnN0T3B0aW9uIixhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiJhdXRvU2VsZWN0QWN0aXZlT3B0aW9uIixwYW5lbFdpZHRoOiJwYW5lbFdpZHRoIixjbGFzc0xpc3Q6WyJjbGFzcyIsImNsYXNzTGlzdCJdfSxvdXRwdXRzOntvcHRpb25TZWxlY3RlZDoib3B0aW9uU2VsZWN0ZWQiLG9wZW5lZDoib3BlbmVkIixjbG9zZWQ6ImNsb3NlZCIsb3B0aW9uQWN0aXZhdGVkOiJvcHRpb25BY3RpdmF0ZWQifSxmZWF0dXJlczpbdHRdfSksbn0pKCkscWs9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGdRZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fdmlzaWJsZUNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLXZpc2libGUiLHRoaXMuX2hpZGRlbkNsYXNzPSJtYXQtYXV0b2NvbXBsZXRlLWhpZGRlbiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYXV0b2NvbXBsZXRlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGUsaSxyKXtpZigxJmUmJihFaShyLHJ3LDUpLEVpKHIsT3MsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkub3B0aW9uR3JvdXBzPW8pLE5lKG89TGUoKSkmJihpLm9wdGlvbnM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUiXSxpbnB1dHM6e2Rpc2FibGVSaXBwbGU6ImRpc2FibGVSaXBwbGUifSxleHBvcnRBczpbIm1hdEF1dG9jb21wbGV0ZSJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6aXcsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOnBRZSxkZWNsczoxLHZhcnM6MCxjb25zdHM6W1sicm9sZSIsImxpc3Rib3giLDEsIm1hdC1hdXRvY29tcGxldGUtcGFuZWwiLDMsImlkIiwibmdDbGFzcyJdLFsicGFuZWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLEUoMCxkUWUsMyw0LCJuZy10ZW1wbGF0ZSIpKX0sZGVwZW5kZW5jaWVzOltGbl0sc3R5bGVzOlsiLm1hdC1hdXRvY29tcGxldGUtcGFuZWx7bWluLXdpZHRoOjExMnB4O21heC13aWR0aDoyODBweDtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Zpc2liaWxpdHk6aGlkZGVuO21heC13aWR0aDpub25lO21heC1oZWlnaHQ6MjU2cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9Lm1hdC1hdXRvY29tcGxldGUtcGFuZWwubWF0LWF1dG9jb21wbGV0ZS12aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC5tYXQtYXV0b2NvbXBsZXRlLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0ubWF0LWF1dG9jb21wbGV0ZS1wYW5lbC1hYm92ZSAubWF0LWF1dG9jb21wbGV0ZS1wYW5lbHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS5tYXQtYXV0b2NvbXBsZXRlLXBhbmVsIC5tYXQtZGl2aWRlci1ob3Jpem9udGFse21hcmdpbi10b3A6LTFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtYXV0b2NvbXBsZXRlLXBhbmVse291dGxpbmU6c29saWQgMXB4fW1hdC1hdXRvY29tcGxldGV7ZGlzcGxheTpub25lfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEZwZT1uZXcgcGUoIm1hdC1hdXRvY29tcGxldGUtc2Nyb2xsLXN0cmF0ZWd5IiksdlFlPXtwcm92aWRlOkZwZSxkZXBzOlt0cl0sdXNlRmFjdG9yeTpmdW5jdGlvbihuKXtyZXR1cm4oKT0+bi5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKX19LHlRZT17cHJvdmlkZTpObyx1c2VFeGlzdGluZzpKbigoKT0+JGcpLG11bHRpOiEwfSxiUWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMsdSxkLHApe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vdmVybGF5PWksdGhpcy5fdmlld0NvbnRhaW5lclJlZj1yLHRoaXMuX3pvbmU9byx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2Rpcj1sLHRoaXMuX2Zvcm1GaWVsZD1jLHRoaXMuX2RvY3VtZW50PXUsdGhpcy5fdmlld3BvcnRSdWxlcj1kLHRoaXMuX2RlZmF1bHRzPXAsdGhpcy5fY29tcG9uZW50RGVzdHJveWVkPSExLHRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkPSExLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbj1Tbi5FTVBUWSx0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9ITAsdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbT1uZXcga2UsdGhpcy5fd2luZG93Qmx1ckhhbmRsZXI9KCk9Pnt0aGlzLl9jYW5PcGVuT25OZXh0Rm9jdXM9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudHx8dGhpcy5wYW5lbE9wZW59LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMucG9zaXRpb249ImF1dG8iLHRoaXMuYXV0b2NvbXBsZXRlQXR0cmlidXRlPSJvZmYiLHRoaXMuX292ZXJsYXlBdHRhY2hlZD0hMSx0aGlzLm9wdGlvblNlbGVjdGlvbnM9UWEoKCk9PntsZXQgaD10aGlzLmF1dG9jb21wbGV0ZT90aGlzLmF1dG9jb21wbGV0ZS5vcHRpb25zOm51bGw7cmV0dXJuIGg/aC5jaGFuZ2VzLnBpcGUoem4oaCksdWkoKCk9Pkp0KC4uLmgubWFwKGY9PmYub25TZWxlY3Rpb25DaGFuZ2UpKSkpOnRoaXMuX3pvbmUub25TdGFibGUucGlwZShRdCgxKSx1aSgoKT0+dGhpcy5vcHRpb25TZWxlY3Rpb25zKSl9KSx0aGlzLl9zY3JvbGxTdHJhdGVneT1hfWdldCBhdXRvY29tcGxldGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLl9hdXRvY29tcGxldGVEaXNhYmxlZH1zZXQgYXV0b2NvbXBsZXRlRGlzYWJsZWQoZSl7dGhpcy5fYXV0b2NvbXBsZXRlRGlzYWJsZWQ9UnQoZSl9bmdBZnRlclZpZXdJbml0KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5lLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSl9bmdPbkNoYW5nZXMoZSl7ZS5wb3NpdGlvbiYmdGhpcy5fcG9zaXRpb25TdHJhdGVneSYmKHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3kpLHRoaXMucGFuZWxPcGVuJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpfW5nT25EZXN0cm95KCl7bGV0IGU9dGhpcy5fZ2V0V2luZG93KCk7dHlwZW9mIGU8InUiJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRoaXMuX3dpbmRvd0JsdXJIYW5kbGVyKSx0aGlzLl92aWV3cG9ydFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZD0hMCx0aGlzLl9kZXN0cm95UGFuZWwoKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLmNvbXBsZXRlKCl9Z2V0IHBhbmVsT3Blbigpe3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJnRoaXMuYXV0b2NvbXBsZXRlLnNob3dQYW5lbH1vcGVuUGFuZWwoKXt0aGlzLl9hdHRhY2hPdmVybGF5KCksdGhpcy5fZmxvYXRMYWJlbCgpfWNsb3NlUGFuZWwoKXt0aGlzLl9yZXNldExhYmVsKCksdGhpcy5fb3ZlcmxheUF0dGFjaGVkJiYodGhpcy5wYW5lbE9wZW4mJnRoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKX0pLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSExLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJih0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpLHRoaXMuX2Nsb3NpbmdBY3Rpb25zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpLHRoaXMuX2NvbXBvbmVudERlc3Ryb3llZHx8dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKX11cGRhdGVQb3NpdGlvbigpe3RoaXMuX292ZXJsYXlBdHRhY2hlZCYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpfWdldCBwYW5lbENsb3NpbmdBY3Rpb25zKCl7cmV0dXJuIEp0KHRoaXMub3B0aW9uU2VsZWN0aW9ucyx0aGlzLmF1dG9jb21wbGV0ZS5fa2V5TWFuYWdlci50YWJPdXQucGlwZShZZSgoKT0+dGhpcy5fb3ZlcmxheUF0dGFjaGVkKSksdGhpcy5fY2xvc2VLZXlFdmVudFN0cmVhbSx0aGlzLl9nZXRPdXRzaWRlQ2xpY2tTdHJlYW0oKSx0aGlzLl9vdmVybGF5UmVmP3RoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKFllKCgpPT50aGlzLl9vdmVybGF5QXR0YWNoZWQpKTpYdCgpKS5waXBlKEwoZT0+ZSBpbnN0YW5jZW9mIG53P2U6bnVsbCkpfWdldCBhY3RpdmVPcHRpb24oKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyP3RoaXMuYXV0b2NvbXBsZXRlLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW06bnVsbH1fZ2V0T3V0c2lkZUNsaWNrU3RyZWFtKCl7cmV0dXJuIEp0KF9pKHRoaXMuX2RvY3VtZW50LCJjbGljayIpLF9pKHRoaXMuX2RvY3VtZW50LCJhdXhjbGljayIpLF9pKHRoaXMuX2RvY3VtZW50LCJ0b3VjaGVuZCIpKS5waXBlKFllKGU9PntsZXQgaT1RYyhlKSxyPXRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsLG89dGhpcy5jb25uZWN0ZWRUbz90aGlzLmNvbm5lY3RlZFRvLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDpudWxsO3JldHVybiB0aGlzLl9vdmVybGF5QXR0YWNoZWQmJmkhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQmJighcnx8IXIuY29udGFpbnMoaSkpJiYoIW98fCFvLmNvbnRhaW5zKGkpKSYmISF0aGlzLl9vdmVybGF5UmVmJiYhdGhpcy5fb3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhpKX0pKX13cml0ZVZhbHVlKGUpe1Byb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpPT50aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShlKSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLl9vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMuX29uVG91Y2hlZD1lfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc2FibGVkPWV9X2hhbmRsZUtleWRvd24oZSl7bGV0IGk9ZS5rZXlDb2RlLHI9a3IoZSk7aWYoMjc9PT1pJiYhciYmZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlT3B0aW9uJiYxMz09PWkmJnRoaXMucGFuZWxPcGVuJiYhcil0aGlzLmFjdGl2ZU9wdGlvbi5fc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBpZih0aGlzLmF1dG9jb21wbGV0ZSl7bGV0IG89dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSxzPTM4PT09aXx8NDA9PT1pOzk9PT1pfHxzJiYhciYmdGhpcy5wYW5lbE9wZW4/dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIub25LZXlkb3duKGUpOnMmJnRoaXMuX2Nhbk9wZW4oKSYmdGhpcy5vcGVuUGFuZWwoKSwoc3x8dGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbSE9PW8pJiYodGhpcy5fc2Nyb2xsVG9PcHRpb24odGhpcy5hdXRvY29tcGxldGUuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4fHwwKSx0aGlzLmF1dG9jb21wbGV0ZS5hdXRvU2VsZWN0QWN0aXZlT3B0aW9uJiZ0aGlzLmFjdGl2ZU9wdGlvbiYmKHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb258fCh0aGlzLl92YWx1ZUJlZm9yZUF1dG9TZWxlY3Rpb249dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlKSx0aGlzLl9wZW5kaW5nQXV0b3NlbGVjdGVkT3B0aW9uPXRoaXMuYWN0aXZlT3B0aW9uLHRoaXMuX2Fzc2lnbk9wdGlvblZhbHVlKHRoaXMuYWN0aXZlT3B0aW9uLnZhbHVlKSkpfX1faGFuZGxlSW5wdXQoZSl7bGV0IGk9ZS50YXJnZXQscj1pLnZhbHVlOyJudW1iZXIiPT09aS50eXBlJiYocj0iIj09cj9udWxsOnBhcnNlRmxvYXQocikpLHRoaXMuX3ByZXZpb3VzVmFsdWUhPT1yJiYodGhpcy5fcHJldmlvdXNWYWx1ZT1yLHRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb249bnVsbCx0aGlzLl9vbkNoYW5nZShyKSx0aGlzLl9jYW5PcGVuKCkmJnRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1lLnRhcmdldCYmdGhpcy5vcGVuUGFuZWwoKSl9X2hhbmRsZUZvY3VzKCl7dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzP3RoaXMuX2Nhbk9wZW4oKSYmKHRoaXMuX3ByZXZpb3VzVmFsdWU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLHRoaXMuX2F0dGFjaE92ZXJsYXkoKSx0aGlzLl9mbG9hdExhYmVsKCEwKSk6dGhpcy5fY2FuT3Blbk9uTmV4dEZvY3VzPSEwfV9oYW5kbGVDbGljaygpe3RoaXMuX2Nhbk9wZW4oKSYmIXRoaXMucGFuZWxPcGVuJiZ0aGlzLm9wZW5QYW5lbCgpfV9mbG9hdExhYmVsKGU9ITEpe3RoaXMuX2Zvcm1GaWVsZCYmImF1dG8iPT09dGhpcy5fZm9ybUZpZWxkLmZsb2F0TGFiZWwmJihlP3RoaXMuX2Zvcm1GaWVsZC5fYW5pbWF0ZUFuZExvY2tMYWJlbCgpOnRoaXMuX2Zvcm1GaWVsZC5mbG9hdExhYmVsPSJhbHdheXMiLHRoaXMuX21hbnVhbGx5RmxvYXRpbmdMYWJlbD0hMCl9X3Jlc2V0TGFiZWwoKXt0aGlzLl9tYW51YWxseUZsb2F0aW5nTGFiZWwmJih0aGlzLl9mb3JtRmllbGQuZmxvYXRMYWJlbD0iYXV0byIsdGhpcy5fbWFudWFsbHlGbG9hdGluZ0xhYmVsPSExKX1fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpe3JldHVybiBKdCh0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUoUXQoMSkpLHRoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuY2hhbmdlcy5waXBlKGt0KCgpPT50aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnJlYXBwbHlMYXN0UG9zaXRpb24oKSksT2woMCkpKS5waXBlKHVpKCgpPT4odGhpcy5fem9uZS5ydW4oKCk9PntsZXQgcj10aGlzLnBhbmVsT3Blbjt0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSx0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSx0aGlzLnBhbmVsT3BlbiYmdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpLHIhPT10aGlzLnBhbmVsT3BlbiYmKHRoaXMucGFuZWxPcGVuP3RoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCk6dGhpcy5hdXRvY29tcGxldGUuY2xvc2VkLmVtaXQoKSl9KSx0aGlzLnBhbmVsQ2xvc2luZ0FjdGlvbnMpKSxRdCgxKSkuc3Vic2NyaWJlKHI9PnRoaXMuX3NldFZhbHVlQW5kQ2xvc2UocikpfV9kZXN0cm95UGFuZWwoKXt0aGlzLl9vdmVybGF5UmVmJiYodGhpcy5jbG9zZVBhbmVsKCksdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCksdGhpcy5fb3ZlcmxheVJlZj1udWxsKX1fYXNzaWduT3B0aW9uVmFsdWUoZSl7bGV0IGk9dGhpcy5hdXRvY29tcGxldGUmJnRoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoP3RoaXMuYXV0b2NvbXBsZXRlLmRpc3BsYXlXaXRoKGUpOmU7dGhpcy5fdXBkYXRlTmF0aXZlSW5wdXRWYWx1ZShpPz8iIil9X3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUoZSl7dGhpcy5fZm9ybUZpZWxkP3RoaXMuX2Zvcm1GaWVsZC5fY29udHJvbC52YWx1ZT1lOnRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT1lLHRoaXMuX3ByZXZpb3VzVmFsdWU9ZX1fc2V0VmFsdWVBbmRDbG9zZShlKXtsZXQgaT1lP2Uuc291cmNlOnRoaXMuX3BlbmRpbmdBdXRvc2VsZWN0ZWRPcHRpb247aSYmKHRoaXMuX2NsZWFyUHJldmlvdXNTZWxlY3RlZE9wdGlvbihpKSx0aGlzLl9hc3NpZ25PcHRpb25WYWx1ZShpLnZhbHVlKSx0aGlzLl9vbkNoYW5nZShpLnZhbHVlKSx0aGlzLmF1dG9jb21wbGV0ZS5fZW1pdFNlbGVjdEV2ZW50KGkpLHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKSx0aGlzLmNsb3NlUGFuZWwoKX1fY2xlYXJQcmV2aW91c1NlbGVjdGVkT3B0aW9uKGUpe3RoaXMuYXV0b2NvbXBsZXRlLm9wdGlvbnMuZm9yRWFjaChpPT57aSE9PWUmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pfV9hdHRhY2hPdmVybGF5KCl7bGV0IGU9dGhpcy5fb3ZlcmxheVJlZjtlPyh0aGlzLl9wb3NpdGlvblN0cmF0ZWd5LnNldE9yaWdpbih0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkpLGUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSkpOih0aGlzLl9wb3J0YWw9bmV3IGtzKHRoaXMuYXV0b2NvbXBsZXRlLnRlbXBsYXRlLHRoaXMuX3ZpZXdDb250YWluZXJSZWYse2lkOnRoaXMuX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpfSksZT10aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpLHRoaXMuX292ZXJsYXlSZWY9ZSx0aGlzLl9oYW5kbGVPdmVybGF5RXZlbnRzKGUpLHRoaXMuX3ZpZXdwb3J0U3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdwb3J0UnVsZXIuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5wYW5lbE9wZW4mJmUmJmUudXBkYXRlU2l6ZSh7d2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpfSl9KSksZSYmIWUuaGFzQXR0YWNoZWQoKSYmKGUuYXR0YWNoKHRoaXMuX3BvcnRhbCksdGhpcy5fY2xvc2luZ0FjdGlvbnNTdWJzY3JpcHRpb249dGhpcy5fc3Vic2NyaWJlVG9DbG9zaW5nQWN0aW9ucygpKTtsZXQgaT10aGlzLnBhbmVsT3Blbjt0aGlzLmF1dG9jb21wbGV0ZS5fc2V0VmlzaWJpbGl0eSgpLHRoaXMuYXV0b2NvbXBsZXRlLl9pc09wZW49dGhpcy5fb3ZlcmxheUF0dGFjaGVkPSEwLHRoaXMucGFuZWxPcGVuJiZpIT09dGhpcy5wYW5lbE9wZW4mJnRoaXMuYXV0b2NvbXBsZXRlLm9wZW5lZC5lbWl0KCl9X2dldE92ZXJsYXlDb25maWcoKXtyZXR1cm4gbmV3IHNjKHtwb3NpdGlvblN0cmF0ZWd5OnRoaXMuX2dldE92ZXJsYXlQb3NpdGlvbigpLHNjcm9sbFN0cmF0ZWd5OnRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksd2lkdGg6dGhpcy5fZ2V0UGFuZWxXaWR0aCgpLGRpcmVjdGlvbjp0aGlzLl9kaXIscGFuZWxDbGFzczp0aGlzLl9kZWZhdWx0cz8ub3ZlcmxheVBhbmVsQ2xhc3N9KX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IGU9dGhpcy5fb3ZlcmxheS5wb3NpdGlvbigpLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZ2V0Q29ubmVjdGVkRWxlbWVudCgpKS53aXRoRmxleGlibGVEaW1lbnNpb25zKCExKS53aXRoUHVzaCghMSk7cmV0dXJuIHRoaXMuX3NldFN0cmF0ZWd5UG9zaXRpb25zKGUpLHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3k9ZSxlfV9zZXRTdHJhdGVneVBvc2l0aW9ucyhlKXtsZXQgcyxpPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6ImJvdHRvbSIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToidG9wIn0se29yaWdpblg6ImVuZCIsb3JpZ2luWToiYm90dG9tIixvdmVybGF5WDoiZW5kIixvdmVybGF5WToidG9wIn1dLHI9dGhpcy5fYWJvdmVDbGFzcyxvPVt7b3JpZ2luWDoic3RhcnQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiYm90dG9tIixwYW5lbENsYXNzOnJ9LHtvcmlnaW5YOiJlbmQiLG9yaWdpblk6InRvcCIsb3ZlcmxheVg6ImVuZCIsb3ZlcmxheVk6ImJvdHRvbSIscGFuZWxDbGFzczpyfV07cz0iYWJvdmUiPT09dGhpcy5wb3NpdGlvbj9vOiJiZWxvdyI9PT10aGlzLnBvc2l0aW9uP2k6Wy4uLmksLi4ub10sZS53aXRoUG9zaXRpb25zKHMpfV9nZXRDb25uZWN0ZWRFbGVtZW50KCl7cmV0dXJuIHRoaXMuY29ubmVjdGVkVG8/dGhpcy5jb25uZWN0ZWRUby5lbGVtZW50UmVmOnRoaXMuX2Zvcm1GaWVsZD90aGlzLl9mb3JtRmllbGQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOnRoaXMuX2VsZW1lbnR9X2dldFBhbmVsV2lkdGgoKXtyZXR1cm4gdGhpcy5hdXRvY29tcGxldGUucGFuZWxXaWR0aHx8dGhpcy5fZ2V0SG9zdFdpZHRoKCl9X2dldEhvc3RXaWR0aCgpe3JldHVybiB0aGlzLl9nZXRDb25uZWN0ZWRFbGVtZW50KCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aH1fcmVzZXRBY3RpdmVJdGVtKCl7bGV0IGU9dGhpcy5hdXRvY29tcGxldGU7ZS5hdXRvQWN0aXZlRmlyc3RPcHRpb24/ZS5fa2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTplLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpfV9jYW5PcGVuKCl7bGV0IGU9dGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O3JldHVybiFlLnJlYWRPbmx5JiYhZS5kaXNhYmxlZCYmIXRoaXMuX2F1dG9jb21wbGV0ZURpc2FibGVkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQ/LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbFRvT3B0aW9uKGUpe2xldCBpPXRoaXMuYXV0b2NvbXBsZXRlLHI9b3coZSxpLm9wdGlvbnMsaS5vcHRpb25Hcm91cHMpO2lmKDA9PT1lJiYxPT09cilpLl9zZXRTY3JvbGxUb3AoMCk7ZWxzZSBpZihpLnBhbmVsKXtsZXQgbz1pLm9wdGlvbnMudG9BcnJheSgpW2VdO2lmKG8pe2xldCBzPW8uX2dldEhvc3RFbGVtZW50KCksYT1fMihzLm9mZnNldFRvcCxzLm9mZnNldEhlaWdodCxpLl9nZXRTY3JvbGxUb3AoKSxpLnBhbmVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtpLl9zZXRTY3JvbGxUb3AoYSl9fX1faGFuZGxlT3ZlcmxheUV2ZW50cyhlKXtlLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoaT0+eygyNz09PWkua2V5Q29kZSYmIWtyKGkpfHwzOD09PWkua2V5Q29kZSYma3IoaSwiYWx0S2V5IikpJiYodGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbiYmKHRoaXMuX3VwZGF0ZU5hdGl2ZUlucHV0VmFsdWUodGhpcy5fdmFsdWVCZWZvcmVBdXRvU2VsZWN0aW9uPz8iIiksdGhpcy5fcGVuZGluZ0F1dG9zZWxlY3RlZE9wdGlvbj1udWxsKSx0aGlzLl9jbG9zZUtleUV2ZW50U3RyZWFtLm5leHQoKSx0aGlzLl9yZXNldEFjdGl2ZUl0ZW0oKSxpLnN0b3BQcm9wYWdhdGlvbigpLGkucHJldmVudERlZmF1bHQoKSl9KSxlLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpLE0odHIpLE0oT2kpLE0oX3QpLE0obm4pLE0oRnBlKSxNKCRpLDgpLE0oc2csOSksTShIdCw4KSxNKFZhKSxNKGtwZSw4KSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4saW5wdXRzOnthdXRvY29tcGxldGU6WyJtYXRBdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGUiXSxwb3NpdGlvbjpbIm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIiwicG9zaXRpb24iXSxjb25uZWN0ZWRUbzpbIm1hdEF1dG9jb21wbGV0ZUNvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxhdXRvY29tcGxldGVBdHRyaWJ1dGU6WyJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVBdHRyaWJ1dGUiXSxhdXRvY29tcGxldGVEaXNhYmxlZDpbIm1hdEF1dG9jb21wbGV0ZURpc2FibGVkIiwiYXV0b2NvbXBsZXRlRGlzYWJsZWQiXX0sZmVhdHVyZXM6W0Z0XX0pLG59KSgpLCRnPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBiUWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Fib3ZlQ2xhc3M9Im1hdC1hdXRvY29tcGxldGUtcGFuZWwtYWJvdmUifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuKHR8fCh0PXBpKG4pKSkoaXx8bil9fSgpLG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbImlucHV0IiwibWF0QXV0b2NvbXBsZXRlIiwiIl0sWyJ0ZXh0YXJlYSIsIm1hdEF1dG9jb21wbGV0ZSIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1hdXRvY29tcGxldGUtdHJpZ2dlciJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJmb2N1c2luIixmdW5jdGlvbigpe3JldHVybiBpLl9oYW5kbGVGb2N1cygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX29uVG91Y2hlZCgpfSkoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlSW5wdXQobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKCl9KSwyJmUmJnplKCJhdXRvY29tcGxldGUiLGkuYXV0b2NvbXBsZXRlQXR0cmlidXRlKSgicm9sZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJjb21ib2JveCIpKCJhcmlhLWF1dG9jb21wbGV0ZSIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0IikoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsaS5wYW5lbE9wZW4mJmkuYWN0aXZlT3B0aW9uP2kuYWN0aXZlT3B0aW9uLmlkOm51bGwpKCJhcmlhLWV4cGFuZGVkIixpLmF1dG9jb21wbGV0ZURpc2FibGVkP251bGw6aS5wYW5lbE9wZW4udG9TdHJpbmcoKSkoImFyaWEtb3ducyIsaS5hdXRvY29tcGxldGVEaXNhYmxlZHx8IWkucGFuZWxPcGVufHxudWxsPT1pLmF1dG9jb21wbGV0ZT9udWxsOmkuYXV0b2NvbXBsZXRlLmlkKSgiYXJpYS1oYXNwb3B1cCIsaS5hdXRvY29tcGxldGVEaXNhYmxlZD9udWxsOiJsaXN0Ym94Iil9LGV4cG9ydEFzOlsibWF0QXV0b2NvbXBsZXRlVHJpZ2dlciJdLGZlYXR1cmVzOlskdChbeVFlXSksdHRdfSksbn0pKCksSWI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbdlFlXSxpbXBvcnRzOltzcyxBdixsbixNZSx1ZCxBdixsbl19KSxufSkoKSxZaz0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy52YWx1ZT0iIix0aGlzLnBsYWNlaG9sZGVyPSIifW9uSW5wdXRLZXlVcChlKXsiRW50ZXIiPT09ZS5rZXkmJnRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlci5jbG9zZVBhbmVsKCl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInRiLWZpbHRlci1pbnB1dCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KCRnLDUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuYXV0b2NvbXBsZXRlVHJpZ2dlcj1yLmZpcnN0KX19LGlucHV0czp7dmFsdWU6InZhbHVlIixtYXRBdXRvY29tcGxldGU6Im1hdEF1dG9jb21wbGV0ZSIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIn0sZGVjbHM6Mix2YXJzOjQsY29uc3RzOltbInN2Z0ljb24iLCJzZWFyY2hfMjRweCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsInBsYWNlaG9sZGVyIiwibWF0QXV0b2NvbXBsZXRlIiwibWF0QXV0b2NvbXBsZXRlRGlzYWJsZWQiLCJ2YWx1ZSIsImtleXVwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJtYXQtaWNvbiIsMCksXygxLCJpbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSW5wdXRLZXlVcChvKX0pLHYoKSksMiZlJiYoQygxKSx5KCJwbGFjZWhvbGRlciIsaS5wbGFjZWhvbGRlcikoIm1hdEF1dG9jb21wbGV0ZSIsaS5tYXRBdXRvY29tcGxldGUpKCJtYXRBdXRvY29tcGxldGVEaXNhYmxlZCIsIWkubWF0QXV0b2NvbXBsZXRlKSgidmFsdWUiLGkudmFsdWUpKX0sZGVwZW5kZW5jaWVzOlskZyxHdF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHh9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6aW5oZXJpdDtjYXJldC1jb2xvcjpjdXJyZW50Q29sb3I7Y29sb3I6Y3VycmVudENvbG9yO2ZvbnQ6aW5oZXJpdDtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmU7cGFkZGluZzowO2ZsZXgtZ3JvdzoxfSJdfSksbn0pKCk7ZnVuY3Rpb24geFFlKG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiw3KX1mdW5jdGlvbiBDUWUobix0KXtpZigxJm4mJihfKDAsIm1hdC1vcHRpb24iLDgpLEEoMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O3koInZhbHVlIixlKSx6ZSgidGl0bGUiLGUpLEMoMSkseXQoZSl9fWZ1bmN0aW9uIE1RZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2Iiw5KSgxLCJlbSIpLEEoMiksQigzLCJudW1iZXIiKSx2KCkoKSksMiZuKXtsZXQgZT1TKCk7QygyKSxqZSgiYW5kICIsVSgzLDEsZS5jb21wbGV0aW9ucy5sZW5ndGgtMjUpLCIgbW9yZSB0YWdzIG1hdGNoZWQiKX19dmFyIExwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9b25Db21wbGV0aW9uQWNjZXB0ZWQoZSl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXBsYWNlKE9PZSwiXFwkJiIpfShlKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtdGFnLWZpbHRlci1jb21wb25lbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsyJmUmJmV0KCJ2YWxpZCIsaS5pc1JlZ2V4RmlsdGVyVmFsaWQpfSxpbnB1dHM6e3JlZ2V4RmlsdGVyVmFsdWU6InJlZ2V4RmlsdGVyVmFsdWUiLGlzUmVnZXhGaWx0ZXJWYWxpZDoiaXNSZWdleEZpbHRlclZhbGlkIixjb21wbGV0aW9uczoiY29tcGxldGlvbnMifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjcsdmFyczo1LGNvbnN0czpbWzEsInRhZy1maWx0ZXIiXSxbInBsYWNlaG9sZGVyIiwiRmlsdGVyIHRhZ3MgKHJlZ2V4KSIsMywidmFsdWUiLCJtYXRBdXRvY29tcGxldGUiLCJpbnB1dCJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJjbGFzcyIsImVycm9yLWljb24iLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDQsIm5nSWYiXSxbMSwidGFnLW9wdGlvbnMiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWyJjbGFzcyIsIm9wdGlvbiIsMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJhbmQtbW9yZSIsNCwibmdJZiJdLFsic3ZnSWNvbiIsImVycm9yXzI0cHgiLCJ0aXRsZSIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMSwib3B0aW9uIiwzLCJ2YWx1ZSJdLFsxLCJhbmQtbW9yZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJ0Yi1maWx0ZXItaW5wdXQiLDEpLFAoImlucHV0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChvLnRhcmdldC52YWx1ZSl9KSx2KCksRSgyLHhRZSwxLDAsIm1hdC1pY29uIiwyKSx2KCksXygzLCJtYXQtYXV0b2NvbXBsZXRlIiwzLDQpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkNvbXBsZXRpb25BY2NlcHRlZChvLm9wdGlvbi52YWx1ZSl9KSxFKDUsQ1FlLDIsMywibWF0LW9wdGlvbiIsNSksRSg2LE1RZSw0LDMsImRpdiIsNiksdigpKSwyJmUpe2xldCByPSRlKDQpO0MoMSkseSgidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIsciksQygxKSx5KCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLEMoMykseSgibmdGb3JPZiIsbnVsbD09aS5jb21wbGV0aW9ucz9udWxsOmkuY29tcGxldGlvbnMuc2xpY2UoMCwyNSkpLEMoMSkseSgibmdJZiIsKG51bGw9PWkuY29tcGxldGlvbnM/bnVsbDppLmNvbXBsZXRpb25zLmxlbmd0aCk+MjUpfX0sZGVwZW5kZW5jaWVzOltkbixCZSxZayxxayxPcyxHdCxRbF0sc3R5bGVzOlsiLnRhZy1maWx0ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX10Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfVtfbmdob3N0LSVDT01QJV17Y29sb3I6IzIxMjEyMX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV17Y29sb3I6I2ZmZn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpe2NvbG9yOiNjNjI4Mjh9W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKSAgIC5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojYzYyODI4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjB9ICAudGFnLW9wdGlvbnMgLm9wdGlvbiwgICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jley13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWxpbmUtY2xhbXA6MztkaXNwbGF5Oi13ZWJraXQtYm94O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjEuNDtwYWRkaW5nOjhweCAxNnB4fSAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZXtjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnRhZy1vcHRpb25zIC5hbmQtbW9yZSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAudGFnLW9wdGlvbnMgLmFuZC1tb3Jle2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksQnBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMudGFnRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChYYyksdGhpcy5pc1RhZ0ZpbHRlclJlZ2V4VmFsaWQkPXRoaXMudGFnRmlsdGVyJC5waXBlKEwoaT0+e3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChpKSwhMH1jYXRjaHtyZXR1cm4hMX19KSksdGhpcy5jb21wbGV0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoUEkpLnBpcGUoZnIodGhpcy5zdG9yZS5zZWxlY3QobmQpKSxMKChbaSxyXSk9PmkuZmlsdGVyKCh7cGx1Z2luOm99KT0+IXIuc2l6ZXx8ci5oYXMobykpLm1hcCgoe3RhZzpvfSk9Pm8pKSxMKGk9PlsuLi5uZXcgU2V0KGkpXSksTChpPT5pLnNvcnQoRncpKSxmcih0aGlzLnN0b3JlLnNlbGVjdChYYykpLEwoKFtpLHJdKT0+e3RyeXtyZXR1cm5baSxuZXcgUmVnRXhwKHIsImkiKV19Y2F0Y2h7cmV0dXJuW2ksbnVsbF19fSksWWUoKFssaV0pPT5udWxsIT09aSksTCgoW2kscl0pPT5pLmZpbHRlcihvPT5yLnRlc3QobykpKSl9b25UYWdGaWx0ZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChzUih7dGFnRmlsdGVyOmV9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLXRhZy1maWx0ZXIiXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicmVnZXhGaWx0ZXJWYWx1ZSIsImlzUmVnZXhGaWx0ZXJWYWxpZCIsImNvbXBsZXRpb25zIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtZXRyaWNzLXRhZy1maWx0ZXItY29tcG9uZW50IiwwKSxQKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGFnRmlsdGVyQ2hhbmdlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoInJlZ2V4RmlsdGVyVmFsdWUiLFUoMSwzLGkudGFnRmlsdGVyJCkpKCJpc1JlZ2V4RmlsdGVyVmFsaWQiLFUoMiw1LGkuaXNUYWdGaWx0ZXJSZWdleFZhbGlkJCkpKCJjb21wbGV0aW9ucyIsVSgzLDcsaS5jb21wbGV0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOltMcGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEVRZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsOCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSksamUoIiIsZS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aCwiIGNhcmRzIil9fWZ1bmN0aW9uIFRRZShuLHQpezEmbiYmKF8oMCwic3BhbiIsOSksQSgxLCJOZXcgY2FyZCBwaW5uZWQiKSx2KCkpLDImbiYmemUoImRhdGEtaWQiLHQuJGltcGxpY2l0KX1mdW5jdGlvbiBEUWUobix0KXtpZigxJm4mJk8oMCwibWV0cmljcy1jYXJkLWdyaWQiLDEwKSwyJm4pe2xldCBlPVMoKTt5KCJjYXJkSWRzV2l0aE1ldGFkYXRhIixlLmNhcmRJZHNXaXRoTWV0YWRhdGEpKCJjYXJkT2JzZXJ2ZXIiLGUuY2FyZE9ic2VydmVyKX19ZnVuY3Rpb24gQVFlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDExKSxBKDEsIlBpbiBjYXJkcyBmb3IgYSBxdWljayB2aWV3IGFuZCBjb21wYXJpc29uIiksdigpKX12YXIgVnBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50Il1dLGlucHV0czp7Y2FyZE9ic2VydmVyOiJjYXJkT2JzZXJ2ZXIiLGNhcmRJZHNXaXRoTWV0YWRhdGE6ImNhcmRJZHNXaXRoTWV0YWRhdGEiLG5ld0NhcmRQaW5uZWRJZHM6Im5ld0NhcmRQaW5uZWRJZHMifSxkZWNsczoxMCx2YXJzOjQsY29uc3RzOltbMSwiZ3JvdXAtdG9vbGJhciJdLFsic3ZnSWNvbiIsImtlZXBfMjRweCJdLFsxLCJncm91cC10ZXh0Il0sWyJhcmlhLXJvbGUiLCJoZWFkaW5nIiwiYXJpYS1sZXZlbCIsIjMiLDEsImdyb3VwLXRpdGxlIl0sWyJjbGFzcyIsImdyb3VwLWNhcmQtY291bnQiLDQsIm5nSWYiXSxbImNsYXNzIiwibmV3LWNhcmQtcGlubmVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eVBpbm5lZFZpZXciLCIiXSxbMSwiZ3JvdXAtY2FyZC1jb3VudCJdLFsxLCJuZXctY2FyZC1waW5uZWQiXSxbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsImNhcmRPYnNlcnZlciJdLFsxLCJlbXB0eS1tZXNzYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApLE8oMSwibWF0LWljb24iLDEpLF8oMiwic3BhbiIsMikoMywic3BhbiIsMyksQSg0LCJQaW5uZWQiKSx2KCksRSg1LEVRZSwyLDEsInNwYW4iLDQpLEUoNixUUWUsMiwxLCJzcGFuIiw1KSx2KCkoKSxFKDcsRFFlLDEsMiwibWV0cmljcy1jYXJkLWdyaWQiLDYpLEUoOCxBUWUsMiwwLCJuZy10ZW1wbGF0ZSIsbnVsbCw3LHF0KSksMiZlKXtsZXQgcj0kZSg5KTtDKDUpLHkoIm5nSWYiLGkuY2FyZElkc1dpdGhNZXRhZGF0YS5sZW5ndGg+MSksQygxKSx5KCJuZ0Zvck9mIixpLm5ld0NhcmRQaW5uZWRJZHMpLEMoMSkseSgibmdJZiIsaS5jYXJkSWRzV2l0aE1ldGFkYXRhLmxlbmd0aCkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbZG4sQmUsR3QsQWJdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6I2ZmZjtkaXNwbGF5OmZsZXg7ZmxleDpub25lO2hlaWdodDo0MnB4O21hcmdpbi1ib3R0b206LTFweDtwYWRkaW5nOjAgMTZweDtwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRleDoxO2JveC1zaGFkb3c6MHB4IDJweCA0cHggMHB4IHJnYmEoMCwwLDAsLjE1KX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93OjBweCAycHggNHB4IDBweCByZ2JhKDI1NSwyNTUsMjU1LC4xNSl9bWF0LWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICBtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lmdyb3VwLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpiYXNlbGluZTtnYXA6NnB4fS5ncm91cC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYxNjE2MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXAtY2FyZC1jb3VudFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jYXJkLWNvdW50W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0uZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtmb250LXNpemU6MTNweDtmb250LXN0eWxlOml0YWxpYztwYWRkaW5nOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmVtcHR5LW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZW1wdHktbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9Lm5ldy1jYXJkLXBpbm5lZFtfbmdjb250ZW50LSVDT01QJV17YW5pbWF0aW9uOnBpbm5lZC12aWV3LWZhZGUtb3V0IDNzIGxpbmVhcjtiYWNrZ3JvdW5kOiNmNDQzMzY7Ym9yZGVyLXJhZGl1czo1cHg7Y29sb3I6I2ZmZjtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6MTNweDtvcGFjaXR5OjA7cGFkZGluZzozcHggNXB4fUBrZXlmcmFtZXMgcGlubmVkLXZpZXctZmFkZS1vdXR7ZnJvbXtvcGFjaXR5OjF9NjYle29wYWNpdHk6Ljk5fXRve29wYWNpdHk6MH19Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxIcGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5jYXJkSWRzV2l0aE1ldGFkYXRhJD10aGlzLnN0b3JlLnNlbGVjdCh6TSkucGlwZSh6bihbXSkpLHRoaXMubmV3Q2FyZFBpbm5lZElkcyQ9dGhpcy5zdG9yZS5zZWxlY3Qoek0pLnBpcGUoWmEoMSksTChpPT5pLm1hcChyPT5yLmNhcmRJZCkpLHkwKCksTCgoW2kscl0pPT57bGV0IG89bmV3IFNldChpKSxzPW5ldyBTZXQocik7Zm9yKGxldCBhIG9mIHMpaWYoIW8uaGFzKGEpKXJldHVybiBEYXRlLm5vdygpO3JldHVybiBudWxsfSksem4obnVsbCkseTAoKSxMKChbaSxyXSk9Pm51bGw9PT1pJiZudWxsPT09cj9udWxsOm51bGw9PT1yP1tpXTpbcl0pLFllKGk9Pm51bGwhPT1pKSxMKGk9PltpWzBdXSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1waW5uZWQtdmlldyJdXSxpbnB1dHM6e2NhcmRPYnNlcnZlcjoiY2FyZE9ic2VydmVyIn0sZGVjbHM6Myx2YXJzOjcsY29uc3RzOltbMywiY2FyZElkc1dpdGhNZXRhZGF0YSIsIm5ld0NhcmRQaW5uZWRJZHMiLCJjYXJkT2JzZXJ2ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsIm1ldHJpY3MtcGlubmVkLXZpZXctY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpKSwyJmUmJnkoImNhcmRJZHNXaXRoTWV0YWRhdGEiLFUoMSwzLGkuY2FyZElkc1dpdGhNZXRhZGF0YSQpKSgibmV3Q2FyZFBpbm5lZElkcyIsVSgyLDUsaS5uZXdDYXJkUGlubmVkSWRzJCkpKCJjYXJkT2JzZXJ2ZXIiLGkuY2FyZE9ic2VydmVyKX0sZGVwZW5kZW5jaWVzOltWcGUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFJRZShuLHQpezEmbiYmTygwLCJtZXRyaWNzLWZpbHRlcmVkLXZpZXciLDEyKSwyJm4mJnkoImNhcmRPYnNlcnZlciIsUygpLmNhcmRPYnNlcnZlcil9ZnVuY3Rpb24gT1FlKG4sdCl7MSZuJiYoXygwLCJkaXYiLDE2KSxPKDEsIm1hdC1zcGlubmVyIiwxNyksdigpKX12YXIga1FlPWZ1bmN0aW9uKG4pe3JldHVybnsic2xpZGUtb3V0LW1lbnUtZXhwYW5kZWQiOm59fTtmdW5jdGlvbiBGUWUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTgpLE8oMSwibWV0cmljcy1zY2FsYXItY29sdW1uLWVkaXRvciIpLHYoKSksMiZuKXtsZXQgZT1TKCk7eSgibmdDbGFzcyIsT24oMSxrUWUsZS5zbGlkZU91dE1lbnVPcGVuKSl9fWZ1bmN0aW9uIE5RZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMTkpKDEsImRpdiIsMjApKDIsImgyIiwyMSksQSgzLCJTZXR0aW5ncyIpLHYoKSxfKDQsImJ1dHRvbiIsMjIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25DbG9zZVNpZGVwYW5lQnV0dG9uQ2xpY2tlZC5lbWl0KCkpfSksTyg1LCJtYXQtaWNvbiIsMjMpLHYoKSgpLE8oNiwibWV0cmljcy1kYXNoYm9hcmQtcmlnaHQtcGFuZSIpLHYoKX19dmFyIExRZT1mdW5jdGlvbihuKXtyZXR1cm57Y2hlY2tlZDpuLCJzZXR0aW5ncy1idXR0b24iOiEwfX0sVXBlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5ob3N0PWUsdGhpcy5vblNldHRpbmdzQnV0dG9uQ2xpY2tlZD1uZXcgRyx0aGlzLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQ9bmV3IEcsdGhpcy5vblBsdWdpblR5cGVUb2dnbGVkPW5ldyBHLHRoaXMub25QbHVnaW5UeXBlQWxsVG9nZ2xlZD1uZXcgRyx0aGlzLlBsdWdpblR5cGU9cmksdGhpcy5jYXJkT2JzZXJ2ZXI9bmV3IE53KHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCI2MDBweCAwcHggNjAwcHggMHB4Iil9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWNzLW1haW4tdmlldy1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RmlsdGVyZWRWaWV3OiJzaG93RmlsdGVyZWRWaWV3Iixpc1NpZGVwYW5lT3BlbjoiaXNTaWRlcGFuZU9wZW4iLGZpbHRlcmVkUGx1Z2luVHlwZXM6ImZpbHRlcmVkUGx1Z2luVHlwZXMiLGluaXRpYWxUYWdzTG9hZGluZzoiaW5pdGlhbFRhZ3NMb2FkaW5nIixzbGlkZU91dE1lbnVPcGVuOiJzbGlkZU91dE1lbnVPcGVuIn0sb3V0cHV0czp7b25TZXR0aW5nc0J1dHRvbkNsaWNrZWQ6Im9uU2V0dGluZ3NCdXR0b25DbGlja2VkIixvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkOiJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIixvblBsdWdpblR5cGVUb2dnbGVkOiJvblBsdWdpblR5cGVUb2dnbGVkIixvblBsdWdpblR5cGVBbGxUb2dnbGVkOiJvblBsdWdpblR5cGVBbGxUb2dnbGVkIn0sZGVjbHM6MjMsdmFyczoyMixjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdCxlO3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgb24gYSB0b29sYmFyIGJ1dHRvbiB0byB0b2dnbGUgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ9kMzUxNmRiNmJiZTY4NjBhNTViZWFiNjZlNDk2OWRhYzYyNWI4ZDcy4pCfNzY1OTI4NTQ0NTU4MDgzODkyNTpUb2dnbGUgc2V0dGluZ3Mgc2lkZSBwYW5lYCxlPSRsb2NhbGl6ZWA6TGFiZWwgb24gYSBidXR0b24gdG8gY2xvc2UgdGhlIHNldHRpbmdzIHNpZGUgcGFuZS7ikJ8wNDUyMWRjMGI2YTY1Y2Y1YzM4Mjk0NGM5YThiNGI4NDRhM2U5NTk44pCfODE1Njc2Njk5Nzc0NzE2NTg3MTpDbG9zZSBzaWRlIHBhbmVgLFtbMSwidG9vbGJhciJdLFsibXVsdGlwbGUiLCIiLCJhcHBlYXJhbmNlIiwic3RhbmRhcmQiLDEsImZpbHRlci12aWV3Il0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImFsbCIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsibWF0LWJ1dHRvbiIsIiIsInJvbGUiLCJjaGVja2JveCIsImRhdGEtdmFsdWUiLCJzY2FsYXJzIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImltYWdlIiwxLCJmaWx0ZXItdmlldy1idXR0b24iLDMsImNsaWNrIl0sWyJtYXQtYnV0dG9uIiwiIiwicm9sZSIsImNoZWNrYm94IiwiZGF0YS12YWx1ZSIsImhpc3RvZ3JhbSIsMSwiZmlsdGVyLXZpZXctYnV0dG9uIiwzLCJjbGljayJdLFsxLCJyaWdodC1pdGVtcyJdLFsibWF0LXN0cm9rZWQtYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbInN2Z0ljb24iLCJzZXR0aW5nc18yNHB4Il0sWzEsInNwbGl0LWNvbnRlbnQiXSxbImNka1Njcm9sbGFibGUiLCIiXSxbMywiY2FyZE9ic2VydmVyIiw0LCJuZ0lmIl0sWzMsImNhcmRPYnNlcnZlciJdLFsiY2xhc3MiLCJsb2FkaW5nLWNvbnRhaW5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzbGlkZS1vdXQtbWVudSIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaWRlYmFyIiw0LCJuZ0lmIl0sWzEsImxvYWRpbmctY29udGFpbmVyIl0sWyJkaWFtZXRlciIsIjM2Il0sWzEsInNsaWRlLW91dC1tZW51IiwzLCJuZ0NsYXNzIl0sWzEsInNpZGViYXIiXSxbMSwiaGVhZGVyIl0sWzEsInRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xvc2VfMjRweCJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCksTygxLCJtZXRyaWNzLXRhZy1maWx0ZXIiKSxfKDIsIm1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIiwxKSgzLCJidXR0b24iLDIpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQuZW1pdCgpfSksQSg0LCIgQWxsICIpLHYoKSxfKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25QbHVnaW5UeXBlVG9nZ2xlZC5lbWl0KGkuUGx1Z2luVHlwZS5TQ0FMQVJTKX0pLEEoNiwiIFNjYWxhcnMgIiksdigpLF8oNywiYnV0dG9uIiw0KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblBsdWdpblR5cGVUb2dnbGVkLmVtaXQoaS5QbHVnaW5UeXBlLklNQUdFUyl9KSxBKDgsIiBJbWFnZSAiKSx2KCksXyg5LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUGx1Z2luVHlwZVRvZ2dsZWQuZW1pdChpLlBsdWdpblR5cGUuSElTVE9HUkFNUyl9KSxBKDEwLCIgSGlzdG9ncmFtICIpLHYoKSgpLF8oMTEsImRpdiIsNikoMTIsImJ1dHRvbiIsNyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQuZW1pdCgpfSksTygxMywibWF0LWljb24iLDgpLEEoMTQsIiBTZXR0aW5ncyAiKSx2KCkoKSgpLF8oMTUsImRpdiIsOSkoMTYsImRpdiIsMTApLEUoMTcsUlFlLDEsMSwibWV0cmljcy1maWx0ZXJlZC12aWV3IiwxMSksTygxOCwibWV0cmljcy1waW5uZWQtdmlldyIsMTIpLEUoMTksT1FlLDIsMCwiZGl2IiwxMyksTygyMCwibWV0cmljcy1jYXJkLWdyb3VwcyIsMTIpLHYoKSxFKDIxLEZRZSwyLDMsImRpdiIsMTQpLEUoMjIsTlFlLDcsMCwiZGl2IiwxNSksdigpKSwyJmUmJihDKDMpLHplKCJhcmlhLWNoZWNrZWQiLDA9PT1pLmZpbHRlcmVkUGx1Z2luVHlwZXMuc2l6ZSksQygyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5TQ0FMQVJTKSksQygyKSx6ZSgiYXJpYS1jaGVja2VkIixpLmZpbHRlcmVkUGx1Z2luVHlwZXMuaGFzKGkuUGx1Z2luVHlwZS5JTUFHRVMpKSxDKDIpLHplKCJhcmlhLWNoZWNrZWQiLGkuZmlsdGVyZWRQbHVnaW5UeXBlcy5oYXMoaS5QbHVnaW5UeXBlLkhJU1RPR1JBTVMpKSxDKDMpLHkoIm5nQ2xhc3MiLE9uKDIwLExRZSxpLmlzU2lkZXBhbmVPcGVuKSksemUoImFyaWEtcHJlc3NlZCIsaS5pc1NpZGVwYW5lT3BlbiksQyg0KSxldCgibWFpbiIsITApKCJmaWx0ZXItdmlldyIsaS5zaG93RmlsdGVyZWRWaWV3KSxDKDEpLHkoIm5nSWYiLGkuc2hvd0ZpbHRlcmVkVmlldyksQygxKSxQdCgiZGlzcGxheSIsaS5zaG93RmlsdGVyZWRWaWV3PyJub25lIjoiIikseSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlciksQygxKSx5KCJuZ0lmIixpLmluaXRpYWxUYWdzTG9hZGluZyksQygxKSxQdCgiZGlzcGxheSIsaS5zaG93RmlsdGVyZWRWaWV3PyJub25lIjoiIikseSgiY2FyZE9ic2VydmVyIixpLmNhcmRPYnNlcnZlciksQygxKSx5KCJuZ0lmIixpLmlzU2lkZXBhbmVPcGVuKSxDKDEpLHkoIm5nSWYiLGkuaXNTaWRlcGFuZU9wZW4pKX0sZGVwZW5kZW5jaWVzOltGbixCZSxJaCxfbixFVSxHdCxCbyxVb2UsV29lLEFwZSxPcGUsQnBlLEhwZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2hlaWdodDo0OHB4O3BhZGRpbmc6MCAxNnB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC50b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9LnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy10YWctZmlsdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMSAxMDBweH0udG9vbGJhcltfbmdjb250ZW50LSVDT01QJV0gICAucmlnaHQtaXRlbXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO21hcmdpbi1sZWZ0OjE2cHg7cGFkZGluZy1sZWZ0OjE2cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRvb2xiYXJbX25nY29udGVudC0lQ09NUCVdICAgLnJpZ2h0LWl0ZW1zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX0uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6NHB4O2ZsZXg6bm9uZTttYXJnaW4tcmlnaHQ6NXB4fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MDtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7aGVpZ2h0OjI1cHg7bGluZS1oZWlnaHQ6MjVweDttaW4td2lkdGg6dW5zZXQ7cGFkZGluZzowIDEycHh9LmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmVifWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdICsgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gKyBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5maWx0ZXItdmlld1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bYXJpYS1jaGVja2VkPXRydWVdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvblthcmlhLWNoZWNrZWQ9dHJ1ZV1bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW2FyaWEtY2hlY2tlZD10cnVlXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMjEyMTIxfS5zcGxpdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7b3ZlcmZsb3cteTphdXRvO2ZsZXg6MX0ubWFpbltfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7b3ZlcmZsb3cteDpoaWRkZW47b3ZlcmZsb3cteTphdXRvO3dpbGwtY2hhbmdlOnRyYW5zZm9ybSxzY3JvbGwtcG9zaXRpb259Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0ubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjVmNmY3O2ZsZXg6MSAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojM2EzYTNhfS5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtZmlsdGVyZWQtdmlld1tfbmdjb250ZW50LSVDT01QJV0sIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLm1haW5bX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1ldHJpY3MtcGlubmVkLXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubWFpbltfbmdjb250ZW50LSVDT01QJV0gICBtZXRyaWNzLXBpbm5lZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5tYWluLmZpbHRlci12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW59Lm1haW4uZmlsdGVyLXZpZXdbX25nY29udGVudC0lQ09NUCVdICAgbWV0cmljcy1maWx0ZXJlZC12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOmNvbnRlbnQ7b3ZlcmZsb3c6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5sb2FkaW5nLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoyMHB4IDB9LnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZWJlYmViO2ZsZXg6MCAwIDI1MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjNTU1fS5zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICAuaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE4cHg7Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0Om5vcm1hbDttYXJnaW46MH1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTtkaXNwbGF5OmlubGluZS1mbGV4fWJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfVtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtib3JkZXItY29sb3I6I2UwZTBlMH1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2V0dGluZ3MtYnV0dG9uLmNoZWNrZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzIxMjEyMX1bX25naG9zdC0lQ09NUCVdICAgLnNldHRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtYnV0dG9uLXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9W19uZ2hvc3QtJUNPTVAlXSAgIC5zZXR0aW5ncy1idXR0b25bX25nY29udGVudC0lQ09NUCVdICAgbWF0LWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDo0cHh9LnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NTBweDt0b3A6NDlweDt0cmFuc2l0aW9uOmFsbCAuNzVzIGVhc2U7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MjAwcHg7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlYmViZWJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlLW91dC1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGUtb3V0LW1lbnVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMH0uc2xpZGUtb3V0LW1lbnUtZXhwYW5kZWRbX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjI1MHB4O3Zpc2liaWxpdHk6dmlzaWJsZX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHpwZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmlzU2lkZXBhbmVPcGVuJD10aGlzLnN0b3JlLnNlbGVjdChISSksdGhpcy5pbml0aWFsVGFnc0xvYWRpbmckPXRoaXMuc3RvcmUuc2VsZWN0KFVNKS5waXBlKGN4KGk9Pm51bGw9PT1pLmxhc3RMb2FkZWRUaW1lSW5NcywhMCksTChpPT5pLnN0YXRlPT09T2UuTE9BRElORyYmbnVsbD09PWkubGFzdExvYWRlZFRpbWVJbk1zKSksdGhpcy5zaG93RmlsdGVyZWRWaWV3JD10aGlzLnN0b3JlLnNlbGVjdChYYykucGlwZShMKGk9PmkubGVuZ3RoPjApKSx0aGlzLmZpbHRlcmVkUGx1Z2luVHlwZXMkPXRoaXMuc3RvcmUuc2VsZWN0KG5kKSx0aGlzLmlzU2xpZGVvdXRNZW51T3BlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoVUkpfW9uU2V0dGluZ3NCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChCUCgpKX1vbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChMUCgpKX1vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gobFIoe3BsdWdpbjplfSkpfW9uU2hvd0FsbFBsdWdpbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGNSKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljcy1tYWluLXZpZXciXV0sZGVjbHM6Nix2YXJzOjE1LGNvbnN0czpbWzMsInNob3dGaWx0ZXJlZFZpZXciLCJpc1NpZGVwYW5lT3BlbiIsImluaXRpYWxUYWdzTG9hZGluZyIsImZpbHRlcmVkUGx1Z2luVHlwZXMiLCJzbGlkZU91dE1lbnVPcGVuIiwib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIiwib25QbHVnaW5UeXBlVG9nZ2xlZCIsIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpY3MtbWFpbi12aWV3LWNvbXBvbmVudCIsMCksUCgib25TZXR0aW5nc0J1dHRvbkNsaWNrZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TZXR0aW5nc0J1dHRvbkNsaWNrZWQoKX0pKCJvbkNsb3NlU2lkZXBhbmVCdXR0b25DbGlja2VkIixmdW5jdGlvbigpe3JldHVybiBpLm9uQ2xvc2VTaWRlcGFuZUJ1dHRvbkNsaWNrZWQoKX0pKCJvblBsdWdpblR5cGVUb2dnbGVkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblBsdWdpblZpc2liaWxpdHlUb2dnbGVkKG8pfSkoIm9uUGx1Z2luVHlwZUFsbFRvZ2dsZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25TaG93QWxsUGx1Z2lucygpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLEIoNSwiYXN5bmMiKSx2KCkpLDImZSYmeSgic2hvd0ZpbHRlcmVkVmlldyIsVSgxLDUsaS5zaG93RmlsdGVyZWRWaWV3JCkpKCJpc1NpZGVwYW5lT3BlbiIsVSgyLDcsaS5pc1NpZGVwYW5lT3BlbiQpKSgiaW5pdGlhbFRhZ3NMb2FkaW5nIixVKDMsOSxpLmluaXRpYWxUYWdzTG9hZGluZyQpKSgiZmlsdGVyZWRQbHVnaW5UeXBlcyIsVSg0LDExLGkuZmlsdGVyZWRQbHVnaW5UeXBlcyQpKSgic2xpZGVPdXRNZW51T3BlbiIsVSg1LDEzLGkuaXNTbGlkZW91dE1lbnVPcGVuJCkpfSxkZXBlbmRlbmNpZXM6W1VwZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdmE9KCgpPT4oZnVuY3Rpb24obil7bi5DSEVDS0JPWD0iY2hlY2tib3giLG4uUlVOX05BTUU9InJ1bl9uYW1lIixuLkVYUEVSSU1FTlRfTkFNRT0iZXhwZXJpbWVudF9uYW1lIixuLlJVTl9DT0xPUj0icnVuX2NvbG9yIn0odmF8fCh2YT17fSkpLHZhKSkoKSxEZj17fTtCRShEZix7Z2V0RXhwZXJpbWVudHNIcGFyYW1zQW5kTWV0cmljc1NwZWNzOigpPT5HUWUsZ2V0SHBhcmFtRmlsdGVyTWFwOigpPT5VUWUsZ2V0TWV0cmljRmlsdGVyTWFwOigpPT5qUWV9KTt2YXIgQ0U9TXIoZkkpLEhRZT1KKENFLChuLHQpPT57bGV0IGU9W107Zm9yKGxldCBpIG9mIHQpIW4uc3BlY3NbaV18fGUucHVzaChuLnNwZWNzW2ldLmhwYXJhbS5kZWZhdWx0RmlsdGVycyk7cmV0dXJuIExNKGUpfSksVVFlPUooSFFlLENFLChuLHQsZSk9PntsZXQgaT1XbShlKTtyZXR1cm4gbmV3IE1hcChbLi4ubiwuLi50LmZpbHRlcnNbaV0/LmhwYXJhbXM/P1tdXSl9KSx6UWU9SihDRSwobix0KT0+e2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KSFuLnNwZWNzW2ldfHxlLnB1c2gobi5zcGVjc1tpXS5tZXRyaWMuZGVmYXVsdEZpbHRlcnMpO3JldHVybiBoSShlKX0pLGpRZT1KKHpRZSxDRSwobix0LGUpPT57bGV0IGk9V20oZSk7cmV0dXJuIG5ldyBNYXAoWy4uLm4sLi4udC5maWx0ZXJzW2ldPy5tZXRyaWNzPz9bXV0pfSksR1FlPUooQ0UsKG4sdCk9PmZ1bmN0aW9uKC4uLm4pe2xldCB0PW5ldyBNYXAsZT1uZXcgTWFwLGk9bmV3IE1hcCxyPW5ldyBNYXAsbz1bXTtmb3IobGV0IHMgb2Ygbil7Zm9yKGxldCBhIG9mIHMuaHBhcmFtcylpZihlLmhhcyhhLm5hbWUpfHxlLnNldChhLm5hbWUsbmV3IFNldCksZS5nZXQoYS5uYW1lKS5hZGQoYS5kaXNwbGF5TmFtZSksdC5oYXMoYS5uYW1lKSl7bGV0IGw9dC5nZXQoYS5uYW1lKSxjPWE7aWYobC50eXBlIT09Yy50eXBlJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCB0eXBlcyBoYXZlIHRvIG1hdGNoLiBHb3Q6ICR7bC50eXBlfSB2cy4gJHtjLnR5cGV9YCksbC5kb21haW4udHlwZT09PUNpLklOVEVSVkFMJiZjLmRvbWFpbi50eXBlPT09Q2kuSU5URVJWQUwpKGwuZG9tYWluLm1pblZhbHVlIT09Yy5kb21haW4ubWluVmFsdWV8fGwuZG9tYWluLm1heFZhbHVlIT09Yy5kb21haW4ubWF4VmFsdWUpJiZvLnB1c2goYEhwYXJhbSwgJHtjLm5hbWV9LCBkb21haW5zIGhhdmUgdG8gbWF0Y2guIEdvdDogJHtsLmRvbWFpbn0gdnMuICR7Yy5kb21haW59YCk7ZWxzZSBpZihsLmRvbWFpbi50eXBlPT09Q2kuRElTQ1JFVEUmJmMuZG9tYWluLnR5cGU9PT1DaS5ESVNDUkVURSl7bGV0IHU9bmV3IFNldChbLi4ubC5kb21haW4udmFsdWVzLC4uLmMuZG9tYWluLnZhbHVlc10pOyhsLmRvbWFpbi52YWx1ZXMubGVuZ3RoIT09Yy5kb21haW4udmFsdWVzLmxlbmd0aHx8bC5kb21haW4udmFsdWVzLmxlbmd0aCE9PXUuc2l6ZSkmJm8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIG8ucHVzaChgSHBhcmFtLCAke2MubmFtZX0sIGRvbWFpbnMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZG9tYWlufSB2cy4gJHtjLmRvbWFpbn1gKX1lbHNlIHQuc2V0KGEubmFtZSx7Li4uYX0pO2ZvcihsZXQgYSBvZiBzLm1ldHJpY3MpaWYoci5oYXMoYS50YWcpfHxyLnNldChhLnRhZyxuZXcgU2V0KSxyLmdldChhLnRhZykuYWRkKGEuZGlzcGxheU5hbWUpLGkuaGFzKGEudGFnKSl7bGV0IGw9aS5nZXQoYS50YWcpLGM9YTtsLmRhdGFzZXRUeXBlIT09Yy5kYXRhc2V0VHlwZSYmby5wdXNoKGBNZXRyaWMsICR7Yy50YWd9LCBkYXRhc2V0VHlwZXMgaGF2ZSB0byBtYXRjaC4gR290OiAke2wuZGF0YXNldFR5cGV9IHZzLiAke2MuZGF0YXNldFR5cGV9YCl9ZWxzZSBpLnNldChhLnRhZyx7Li4uYX0pfWlmKG8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVmFsaWRhdGlvbiBlcnJvcjpcbiR7by5qb2luKCJcbiIpfWApO3JldHVybntocGFyYW1zOlsuLi50XS5tYXAoKFtzLGFdKT0+KHsuLi5hLGRpc3BsYXlOYW1lOlsuLi5lLmdldChzKV0uam9pbigiIG9yICIpfSkpLG1ldHJpY3M6Wy4uLmldLm1hcCgoW3MsYV0pPT4oey4uLmEsZGlzcGxheU5hbWU6Wy4uLnIuZ2V0KHMpXS5qb2luKCIgb3IgIil9KSl9fSguLi50LmV4cGVyaW1lbnRJZHMubWFwKGU9PntsZXQgaT1uLnNwZWNzW2VdO3JldHVybiBpP3tocGFyYW1zOmkuaHBhcmFtLnNwZWNzLG1ldHJpY3M6aS5tZXRyaWMuc3BlY3N9Om51bGx9KS5maWx0ZXIoQm9vbGVhbikpKSxXUWU9WyJ0b29sdGlwIl0sR3BlPSJ0b29sdGlwLXBhbmVsIixXcGU9bGEoe3Bhc3NpdmU6ITB9KSxxcGU9bmV3IHBlKCJtYXQtdG9vbHRpcC1zY3JvbGwtc3RyYXRlZ3kiKSxRUWU9e3Byb3ZpZGU6cXBlLGRlcHM6W3RyXSx1c2VGYWN0b3J5OmZ1bmN0aW9uKG4pe3JldHVybigpPT5uLnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7c2Nyb2xsVGhyb3R0bGU6MjB9KX19LEtRZT1uZXcgcGUoIm1hdC10b29sdGlwLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm57c2hvd0RlbGF5OjAsaGlkZURlbGF5OjAsdG91Y2hlbmRIaWRlRGVsYXk6MTUwMH19fSksSlFlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe3RoaXMuX292ZXJsYXk9ZSx0aGlzLl9lbGVtZW50UmVmPWksdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1yLHRoaXMuX3ZpZXdDb250YWluZXJSZWY9byx0aGlzLl9uZ1pvbmU9cyx0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2FyaWFEZXNjcmliZXI9bCx0aGlzLl9mb2N1c01vbml0b3I9Yyx0aGlzLl9kaXI9ZCx0aGlzLl9kZWZhdWx0T3B0aW9ucz1wLHRoaXMuX3Bvc2l0aW9uPSJiZWxvdyIsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fdmlld0luaXRpYWxpemVkPSExLHRoaXMuX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQ9ITEsdGhpcy5fdmlld3BvcnRNYXJnaW49OCx0aGlzLl9jc3NDbGFzc1ByZWZpeD0ibWF0Iix0aGlzLl9zaG93RGVsYXk9dGhpcy5fZGVmYXVsdE9wdGlvbnMuc2hvd0RlbGF5LHRoaXMuX2hpZGVEZWxheT10aGlzLl9kZWZhdWx0T3B0aW9ucy5oaWRlRGVsYXksdGhpcy50b3VjaEdlc3R1cmVzPSJhdXRvIix0aGlzLl9tZXNzYWdlPSIiLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveWVkPW5ldyBrZSx0aGlzLl9zY3JvbGxTdHJhdGVneT11LHRoaXMuX2RvY3VtZW50PWgscCYmKHAucG9zaXRpb24mJih0aGlzLnBvc2l0aW9uPXAucG9zaXRpb24pLHAudG91Y2hHZXN0dXJlcyYmKHRoaXMudG91Y2hHZXN0dXJlcz1wLnRvdWNoR2VzdHVyZXMpKSxkLmNoYW5nZS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX292ZXJsYXlSZWYmJnRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpfSl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihlKXtlIT09dGhpcy5fcG9zaXRpb24mJih0aGlzLl9wb3NpdGlvbj1lLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl91cGRhdGVQb3NpdGlvbih0aGlzLl9vdmVybGF5UmVmKSx0aGlzLl90b29sdGlwSW5zdGFuY2U/LnNob3coMCksdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpKSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLl9kaXNhYmxlZD90aGlzLmhpZGUoMCk6dGhpcy5fc2V0dXBQb2ludGVyRW50ZXJFdmVudHNJZk5lZWRlZCgpfWdldCBzaG93RGVsYXkoKXtyZXR1cm4gdGhpcy5fc2hvd0RlbGF5fXNldCBzaG93RGVsYXkoZSl7dGhpcy5fc2hvd0RlbGF5PUJpKGUpfWdldCBoaWRlRGVsYXkoKXtyZXR1cm4gdGhpcy5faGlkZURlbGF5fXNldCBoaWRlRGVsYXkoZSl7dGhpcy5faGlkZURlbGF5PUJpKGUpLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5fbW91c2VMZWF2ZUhpZGVEZWxheT10aGlzLl9oaWRlRGVsYXkpfWdldCBtZXNzYWdlKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2V9c2V0IG1lc3NhZ2UoZSl7dGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5fbWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX21lc3NhZ2U9bnVsbCE9ZT9TdHJpbmcoZSkudHJpbSgpOiIiLCF0aGlzLl9tZXNzYWdlJiZ0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCk/dGhpcy5oaWRlKDApOih0aGlzLl9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fYXJpYURlc2NyaWJlci5kZXNjcmliZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsdGhpcy5tZXNzYWdlLCJ0b29sdGlwIil9KX0pKX1nZXQgdG9vbHRpcENsYXNzKCl7cmV0dXJuIHRoaXMuX3Rvb2x0aXBDbGFzc31zZXQgdG9vbHRpcENsYXNzKGUpe3RoaXMuX3Rvb2x0aXBDbGFzcz1lLHRoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmdGhpcy5fc2V0VG9vbHRpcENsYXNzKHRoaXMuX3Rvb2x0aXBDbGFzcyl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fdmlld0luaXRpYWxpemVkPSEwLHRoaXMuX3NldHVwUG9pbnRlckVudGVyRXZlbnRzSWZOZWVkZWQoKSx0aGlzLl9mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLl9lbGVtZW50UmVmKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShlPT57ZT8ia2V5Ym9hcmQiPT09ZSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5zaG93KCkpOnRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuaGlkZSgwKSl9KX1uZ09uRGVzdHJveSgpe2xldCBlPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuX292ZXJsYXlSZWYmJih0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKSx0aGlzLl90b29sdGlwSW5zdGFuY2U9bnVsbCksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5mb3JFYWNoKChbaSxyXSk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxyLFdwZSl9KSx0aGlzLl9wYXNzaXZlTGlzdGVuZXJzLmxlbmd0aD0wLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fYXJpYURlc2NyaWJlci5yZW1vdmVEZXNjcmlwdGlvbihlLHRoaXMubWVzc2FnZSwidG9vbHRpcCIpLHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyhlKX1zaG93KGU9dGhpcy5zaG93RGVsYXkpe2lmKHRoaXMuZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fHRoaXMuX2lzVG9vbHRpcFZpc2libGUoKSlyZXR1cm4gdm9pZCB0aGlzLl90b29sdGlwSW5zdGFuY2U/Ll9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpO2xldCBpPXRoaXMuX2NyZWF0ZU92ZXJsYXkoKTt0aGlzLl9kZXRhY2goKSx0aGlzLl9wb3J0YWw9dGhpcy5fcG9ydGFsfHxuZXcgJGModGhpcy5fdG9vbHRpcENvbXBvbmVudCx0aGlzLl92aWV3Q29udGFpbmVyUmVmKTtsZXQgcj10aGlzLl90b29sdGlwSW5zdGFuY2U9aS5hdHRhY2godGhpcy5fcG9ydGFsKS5pbnN0YW5jZTtyLl90cmlnZ2VyRWxlbWVudD10aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsci5fbW91c2VMZWF2ZUhpZGVEZWxheT10aGlzLl9oaWRlRGVsYXksci5hZnRlckhpZGRlbigpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9kZXRhY2goKSksdGhpcy5fc2V0VG9vbHRpcENsYXNzKHRoaXMuX3Rvb2x0aXBDbGFzcyksdGhpcy5fdXBkYXRlVG9vbHRpcE1lc3NhZ2UoKSxyLnNob3coZSl9aGlkZShlPXRoaXMuaGlkZURlbGF5KXtsZXQgaT10aGlzLl90b29sdGlwSW5zdGFuY2U7aSYmKGkuaXNWaXNpYmxlKCk/aS5oaWRlKGUpOihpLl9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpLHRoaXMuX2RldGFjaCgpKSl9dG9nZ2xlKCl7dGhpcy5faXNUb29sdGlwVmlzaWJsZSgpP3RoaXMuaGlkZSgpOnRoaXMuc2hvdygpfV9pc1Rvb2x0aXBWaXNpYmxlKCl7cmV0dXJuISF0aGlzLl90b29sdGlwSW5zdGFuY2UmJnRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKX1fY3JlYXRlT3ZlcmxheSgpe2lmKHRoaXMuX292ZXJsYXlSZWYpcmV0dXJuIHRoaXMuX292ZXJsYXlSZWY7bGV0IGU9dGhpcy5fc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5fZWxlbWVudFJlZiksaT10aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50UmVmKS53aXRoVHJhbnNmb3JtT3JpZ2luT24oYC4ke3RoaXMuX2Nzc0NsYXNzUHJlZml4fS10b29sdGlwYCkud2l0aEZsZXhpYmxlRGltZW5zaW9ucyghMSkud2l0aFZpZXdwb3J0TWFyZ2luKHRoaXMuX3ZpZXdwb3J0TWFyZ2luKS53aXRoU2Nyb2xsYWJsZUNvbnRhaW5lcnMoZSk7cmV0dXJuIGkucG9zaXRpb25DaGFuZ2VzLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHI9Pnt0aGlzLl91cGRhdGVDdXJyZW50UG9zaXRpb25DbGFzcyhyLmNvbm5lY3Rpb25QYWlyKSx0aGlzLl90b29sdGlwSW5zdGFuY2UmJnIuc2Nyb2xsYWJsZVZpZXdQcm9wZXJ0aWVzLmlzT3ZlcmxheUNsaXBwZWQmJnRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5pc1Zpc2libGUoKSYmdGhpcy5fbmdab25lLnJ1bigoKT0+dGhpcy5oaWRlKDApKX0pLHRoaXMuX292ZXJsYXlSZWY9dGhpcy5fb3ZlcmxheS5jcmVhdGUoe2RpcmVjdGlvbjp0aGlzLl9kaXIscG9zaXRpb25TdHJhdGVneTppLHBhbmVsQ2xhc3M6YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7R3BlfWAsc2Nyb2xsU3RyYXRlZ3k6dGhpcy5fc2Nyb2xsU3RyYXRlZ3koKX0pLHRoaXMuX3VwZGF0ZVBvc2l0aW9uKHRoaXMuX292ZXJsYXlSZWYpLHRoaXMuX292ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fZGV0YWNoKCkpLHRoaXMuX292ZXJsYXlSZWYub3V0c2lkZVBvaW50ZXJFdmVudHMoKS5waXBlKHN0KHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+dGhpcy5fdG9vbHRpcEluc3RhbmNlPy5faGFuZGxlQm9keUludGVyYWN0aW9uKCkpLHRoaXMuX292ZXJsYXlSZWYua2V5ZG93bkV2ZW50cygpLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKHI9Pnt0aGlzLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJjI3PT09ci5rZXlDb2RlJiYha3IocikmJihyLnByZXZlbnREZWZhdWx0KCksci5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLmhpZGUoMCkpKX0pLHRoaXMuX2RlZmF1bHRPcHRpb25zPy5kaXNhYmxlVG9vbHRpcEludGVyYWN0aXZpdHkmJnRoaXMuX292ZXJsYXlSZWYuYWRkUGFuZWxDbGFzcyhgJHt0aGlzLl9jc3NDbGFzc1ByZWZpeH0tdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmVgKSx0aGlzLl9vdmVybGF5UmVmfV9kZXRhY2goKXt0aGlzLl9vdmVybGF5UmVmJiZ0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkmJnRoaXMuX292ZXJsYXlSZWYuZGV0YWNoKCksdGhpcy5fdG9vbHRpcEluc3RhbmNlPW51bGx9X3VwZGF0ZVBvc2l0aW9uKGUpe2xldCBpPWUuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSxyPXRoaXMuX2dldE9yaWdpbigpLG89dGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9uKCk7aS53aXRoUG9zaXRpb25zKFt0aGlzLl9hZGRPZmZzZXQoey4uLnIubWFpbiwuLi5vLm1haW59KSx0aGlzLl9hZGRPZmZzZXQoey4uLnIuZmFsbGJhY2ssLi4uby5mYWxsYmFja30pXSl9X2FkZE9mZnNldChlKXtyZXR1cm4gZX1fZ2V0T3JpZ2luKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pfHwiYmVsb3ciPT1pP3I9e29yaWdpblg6ImNlbnRlciIsb3JpZ2luWToiYWJvdmUiPT1pPyJ0b3AiOiJib3R0b20ifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvcmlnaW5YOiJzdGFydCIsb3JpZ2luWToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3JpZ2luWDoiZW5kIixvcmlnaW5ZOiJjZW50ZXIifSk7bGV0e3g6byx5OnN9PXRoaXMuX2ludmVydFBvc2l0aW9uKHIub3JpZ2luWCxyLm9yaWdpblkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e29yaWdpblg6byxvcmlnaW5ZOnN9fX1fZ2V0T3ZlcmxheVBvc2l0aW9uKCl7bGV0IHIsZT0hdGhpcy5fZGlyfHwibHRyIj09dGhpcy5fZGlyLnZhbHVlLGk9dGhpcy5wb3NpdGlvbjsiYWJvdmUiPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJib3R0b20ifToiYmVsb3ciPT1pP3I9e292ZXJsYXlYOiJjZW50ZXIiLG92ZXJsYXlZOiJ0b3AifToiYmVmb3JlIj09aXx8ImxlZnQiPT1pJiZlfHwicmlnaHQiPT1pJiYhZT9yPXtvdmVybGF5WDoiZW5kIixvdmVybGF5WToiY2VudGVyIn06KCJhZnRlciI9PWl8fCJyaWdodCI9PWkmJmV8fCJsZWZ0Ij09aSYmIWUpJiYocj17b3ZlcmxheVg6InN0YXJ0IixvdmVybGF5WToiY2VudGVyIn0pO2xldHt4Om8seTpzfT10aGlzLl9pbnZlcnRQb3NpdGlvbihyLm92ZXJsYXlYLHIub3ZlcmxheVkpO3JldHVybnttYWluOnIsZmFsbGJhY2s6e292ZXJsYXlYOm8sb3ZlcmxheVk6c319fV91cGRhdGVUb29sdGlwTWVzc2FnZSgpe3RoaXMuX3Rvb2x0aXBJbnN0YW5jZSYmKHRoaXMuX3Rvb2x0aXBJbnN0YW5jZS5tZXNzYWdlPXRoaXMubWVzc2FnZSx0aGlzLl90b29sdGlwSW5zdGFuY2UuX21hcmtGb3JDaGVjaygpLHRoaXMuX25nWm9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUoUXQoMSksc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdG9vbHRpcEluc3RhbmNlJiZ0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCl9KSl9X3NldFRvb2x0aXBDbGFzcyhlKXt0aGlzLl90b29sdGlwSW5zdGFuY2UmJih0aGlzLl90b29sdGlwSW5zdGFuY2UudG9vbHRpcENsYXNzPWUsdGhpcy5fdG9vbHRpcEluc3RhbmNlLl9tYXJrRm9yQ2hlY2soKSl9X2ludmVydFBvc2l0aW9uKGUsaSl7cmV0dXJuImFib3ZlIj09PXRoaXMucG9zaXRpb258fCJiZWxvdyI9PT10aGlzLnBvc2l0aW9uPyJ0b3AiPT09aT9pPSJib3R0b20iOiJib3R0b20iPT09aSYmKGk9InRvcCIpOiJlbmQiPT09ZT9lPSJzdGFydCI6InN0YXJ0Ij09PWUmJihlPSJlbmQiKSx7eDplLHk6aX19X3VwZGF0ZUN1cnJlbnRQb3NpdGlvbkNsYXNzKGUpe2xldCBzLHtvdmVybGF5WTppLG9yaWdpblg6cixvcmlnaW5ZOm99PWU7aWYocz0iY2VudGVyIj09PWk/dGhpcy5fZGlyJiYicnRsIj09PXRoaXMuX2Rpci52YWx1ZT8iZW5kIj09PXI/ImxlZnQiOiJyaWdodCI6InN0YXJ0Ij09PXI/ImxlZnQiOiJyaWdodCI6ImJvdHRvbSI9PT1pJiYidG9wIj09PW8/ImFib3ZlIjoiYmVsb3ciLHMhPT10aGlzLl9jdXJyZW50UG9zaXRpb24pe2xldCBhPXRoaXMuX292ZXJsYXlSZWY7aWYoYSl7bGV0IGw9YCR7dGhpcy5fY3NzQ2xhc3NQcmVmaXh9LSR7R3BlfS1gO2EucmVtb3ZlUGFuZWxDbGFzcyhsK3RoaXMuX2N1cnJlbnRQb3NpdGlvbiksYS5hZGRQYW5lbENsYXNzKGwrcyl9dGhpcy5fY3VycmVudFBvc2l0aW9uPXN9fV9zZXR1cFBvaW50ZXJFbnRlckV2ZW50c0lmTmVlZGVkKCl7dGhpcy5fZGlzYWJsZWR8fCF0aGlzLm1lc3NhZ2V8fCF0aGlzLl92aWV3SW5pdGlhbGl6ZWR8fHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMubGVuZ3RofHwodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCk/dGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsibW91c2VlbnRlciIsKCk9Pnt0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKSx0aGlzLnNob3coKX1dKToib2ZmIiE9PXRoaXMudG91Y2hHZXN0dXJlcyYmKHRoaXMuX2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCksdGhpcy5fcGFzc2l2ZUxpc3RlbmVycy5wdXNoKFsidG91Y2hzdGFydCIsKCk9Pnt0aGlzLl9zZXR1cFBvaW50ZXJFeGl0RXZlbnRzSWZOZWVkZWQoKSxjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuX3RvdWNoc3RhcnRUaW1lb3V0PXNldFRpbWVvdXQoKCk9PnRoaXMuc2hvdygpLDUwMCl9XSkpLHRoaXMuX2FkZExpc3RlbmVycyh0aGlzLl9wYXNzaXZlTGlzdGVuZXJzKSl9X3NldHVwUG9pbnRlckV4aXRFdmVudHNJZk5lZWRlZCgpe2lmKHRoaXMuX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuX3BvaW50ZXJFeGl0RXZlbnRzSW5pdGlhbGl6ZWQ9ITA7bGV0IGU9W107aWYodGhpcy5fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCkpZS5wdXNoKFsibW91c2VsZWF2ZSIsaT0+e2xldCByPWkucmVsYXRlZFRhcmdldDsoIXJ8fCF0aGlzLl9vdmVybGF5UmVmPy5vdmVybGF5RWxlbWVudC5jb250YWlucyhyKSkmJnRoaXMuaGlkZSgpfV0sWyJ3aGVlbCIsaT0+dGhpcy5fd2hlZWxMaXN0ZW5lcihpKV0pO2Vsc2UgaWYoIm9mZiIhPT10aGlzLnRvdWNoR2VzdHVyZXMpe3RoaXMuX2Rpc2FibGVOYXRpdmVHZXN0dXJlc0lmTmVjZXNzYXJ5KCk7bGV0IGk9KCk9PntjbGVhclRpbWVvdXQodGhpcy5fdG91Y2hzdGFydFRpbWVvdXQpLHRoaXMuaGlkZSh0aGlzLl9kZWZhdWx0T3B0aW9ucy50b3VjaGVuZEhpZGVEZWxheSl9O2UucHVzaChbInRvdWNoZW5kIixpXSxbInRvdWNoY2FuY2VsIixpXSl9dGhpcy5fYWRkTGlzdGVuZXJzKGUpLHRoaXMuX3Bhc3NpdmVMaXN0ZW5lcnMucHVzaCguLi5lKX1fYWRkTGlzdGVuZXJzKGUpe2UuZm9yRWFjaCgoW2kscl0pPT57dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoaSxyLFdwZSl9KX1fcGxhdGZvcm1TdXBwb3J0c01vdXNlRXZlbnRzKCl7cmV0dXJuIXRoaXMuX3BsYXRmb3JtLklPUyYmIXRoaXMuX3BsYXRmb3JtLkFORFJPSUR9X3doZWVsTGlzdGVuZXIoZSl7aWYodGhpcy5faXNUb29sdGlwVmlzaWJsZSgpKXtsZXQgaT10aGlzLl9kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCxlLmNsaWVudFkpLHI9dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2khPT1yJiYhci5jb250YWlucyhpKSYmdGhpcy5oaWRlKCl9fV9kaXNhYmxlTmF0aXZlR2VzdHVyZXNJZk5lY2Vzc2FyeSgpe2xldCBlPXRoaXMudG91Y2hHZXN0dXJlcztpZigib2ZmIiE9PWUpe2xldCBpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxyPWkuc3R5bGU7KCJvbiI9PT1lfHwiSU5QVVQiIT09aS5ub2RlTmFtZSYmIlRFWFRBUkVBIiE9PWkubm9kZU5hbWUpJiYoci51c2VyU2VsZWN0PXIubXNVc2VyU2VsZWN0PXIud2Via2l0VXNlclNlbGVjdD1yLk1velVzZXJTZWxlY3Q9Im5vbmUiKSwoIm9uIj09PWV8fCFpLmRyYWdnYWJsZSkmJihyLndlYmtpdFVzZXJEcmFnPSJub25lIiksci50b3VjaEFjdGlvbj0ibm9uZSIsci53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQifX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe25sKCl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4saW5wdXRzOntwb3NpdGlvbjpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsInBvc2l0aW9uIl0sZGlzYWJsZWQ6WyJtYXRUb29sdGlwRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHNob3dEZWxheTpbIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJzaG93RGVsYXkiXSxoaWRlRGVsYXk6WyJtYXRUb29sdGlwSGlkZURlbGF5IiwiaGlkZURlbGF5Il0sdG91Y2hHZXN0dXJlczpbIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwidG91Y2hHZXN0dXJlcyJdLG1lc3NhZ2U6WyJtYXRUb29sdGlwIiwibWVzc2FnZSJdLHRvb2x0aXBDbGFzczpbIm1hdFRvb2x0aXBDbGFzcyIsInRvb2x0aXBDbGFzcyJdfX0pLG59KSgpLFhrPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBKUWV7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgpe3N1cGVyKGUsaSxyLG8scyxhLGwsYyx1LGQscCxoKSx0aGlzLl90b29sdGlwQ29tcG9uZW50PWVLZX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTSh0ciksTShSZSksTSgkbSksTShPaSksTShfdCksTShvaSksTShmMiksTShGciksTShxcGUpLE0oJGksOCksTShLUWUsOCksTShIdCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRUb29sdGlwIiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXRvb2x0aXAtdHJpZ2dlciJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdLGZlYXR1cmVzOlt0dF19KSxufSkoKSwkUWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmPWUsdGhpcy5fY2xvc2VPbkludGVyYWN0aW9uPSExLHRoaXMuX2lzVmlzaWJsZT0hMSx0aGlzLl9vbkhpZGU9bmV3IGtlLHRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZD0iTm9vcEFuaW1hdGlvbnMiPT09aX1zaG93KGUpe2NsZWFyVGltZW91dCh0aGlzLl9oaWRlVGltZW91dElkKSx0aGlzLl9zaG93VGltZW91dElkPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl90b2dnbGVWaXNpYmlsaXR5KCEwKSx0aGlzLl9zaG93VGltZW91dElkPXZvaWQgMH0sZSl9aGlkZShlKXtjbGVhclRpbWVvdXQodGhpcy5fc2hvd1RpbWVvdXRJZCksdGhpcy5faGlkZVRpbWVvdXRJZD1zZXRUaW1lb3V0KCgpPT57dGhpcy5fdG9nZ2xlVmlzaWJpbGl0eSghMSksdGhpcy5faGlkZVRpbWVvdXRJZD12b2lkIDB9LGUpfWFmdGVySGlkZGVuKCl7cmV0dXJuIHRoaXMuX29uSGlkZX1pc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5faXNWaXNpYmxlfW5nT25EZXN0cm95KCl7dGhpcy5fY2FuY2VsUGVuZGluZ0FuaW1hdGlvbnMoKSx0aGlzLl9vbkhpZGUuY29tcGxldGUoKSx0aGlzLl90cmlnZ2VyRWxlbWVudD1udWxsfV9oYW5kbGVCb2R5SW50ZXJhY3Rpb24oKXt0aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb24mJnRoaXMuaGlkZSgwKX1fbWFya0ZvckNoZWNrKCl7dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9X2hhbmRsZU1vdXNlTGVhdmUoe3JlbGF0ZWRUYXJnZXQ6ZX0peyghZXx8IXRoaXMuX3RyaWdnZXJFbGVtZW50LmNvbnRhaW5zKGUpKSYmKHRoaXMuaXNWaXNpYmxlKCk/dGhpcy5oaWRlKHRoaXMuX21vdXNlTGVhdmVIaWRlRGVsYXkpOnRoaXMuX2ZpbmFsaXplQW5pbWF0aW9uKCExKSl9X29uU2hvdygpe31faGFuZGxlQW5pbWF0aW9uRW5kKHthbmltYXRpb25OYW1lOmV9KXsoZT09PXRoaXMuX3Nob3dBbmltYXRpb258fGU9PT10aGlzLl9oaWRlQW5pbWF0aW9uKSYmdGhpcy5fZmluYWxpemVBbmltYXRpb24oZT09PXRoaXMuX3Nob3dBbmltYXRpb24pfV9jYW5jZWxQZW5kaW5nQW5pbWF0aW9ucygpe2NsZWFyVGltZW91dCh0aGlzLl9zaG93VGltZW91dElkKSxjbGVhclRpbWVvdXQodGhpcy5faGlkZVRpbWVvdXRJZCksdGhpcy5fc2hvd1RpbWVvdXRJZD10aGlzLl9oaWRlVGltZW91dElkPXZvaWQgMH1fZmluYWxpemVBbmltYXRpb24oZSl7ZT90aGlzLl9jbG9zZU9uSW50ZXJhY3Rpb249ITA6dGhpcy5pc1Zpc2libGUoKXx8dGhpcy5fb25IaWRlLm5leHQoKX1fdG9nZ2xlVmlzaWJpbGl0eShlKXtsZXQgaT10aGlzLl90b29sdGlwLm5hdGl2ZUVsZW1lbnQscj10aGlzLl9zaG93QW5pbWF0aW9uLG89dGhpcy5faGlkZUFuaW1hdGlvbjtpZihpLmNsYXNzTGlzdC5yZW1vdmUoZT9vOnIpLGkuY2xhc3NMaXN0LmFkZChlP3I6byksdGhpcy5faXNWaXNpYmxlPWUsZSYmIXRoaXMuX2FuaW1hdGlvbnNEaXNhYmxlZCYmImZ1bmN0aW9uIj09dHlwZW9mIGdldENvbXB1dGVkU3R5bGUpe2xldCBzPWdldENvbXB1dGVkU3R5bGUoaSk7KCIwcyI9PT1zLmdldFByb3BlcnR5VmFsdWUoImFuaW1hdGlvbi1kdXJhdGlvbiIpfHwibm9uZSI9PT1zLmdldFByb3BlcnR5VmFsdWUoImFuaW1hdGlvbi1uYW1lIikpJiYodGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkPSEwKX1lJiZ0aGlzLl9vblNob3coKSx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQmJihpLmNsYXNzTGlzdC5hZGQoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIiksdGhpcy5fZmluYWxpemVBbmltYXRpb24oZSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSxNKFBpLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bn0pLG59KSgpLGVLZT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgJFFle2NvbnN0cnVjdG9yKGUsaSxyKXtzdXBlcihlLHIpLHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlcj1pLHRoaXMuX2lzSGFuZHNldD10aGlzLl9icmVha3BvaW50T2JzZXJ2ZXIub2JzZXJ2ZSgiKG1heC13aWR0aDogNTk5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KSwgKG1heC13aWR0aDogOTU5Ljk4cHgpIGFuZCAob3JpZW50YXRpb246IGxhbmRzY2FwZSkiKSx0aGlzLl9zaG93QW5pbWF0aW9uPSJtYXQtdG9vbHRpcC1zaG93Iix0aGlzLl9oaWRlQW5pbWF0aW9uPSJtYXQtdG9vbHRpcC1oaWRlIn19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShubiksTShKbSksTShQaSw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXRvb2x0aXAtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoV1FlLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuX3Rvb2x0aXA9ci5maXJzdCl9fSxob3N0QXR0cnM6WyJhcmlhLWhpZGRlbiIsInRydWUiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2VsZWF2ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZU1vdXNlTGVhdmUobyl9KSwyJmUmJlB0KCJ6b29tIixpLmlzVmlzaWJsZSgpPzE6bnVsbCl9LGZlYXR1cmVzOlt0dF0sZGVjbHM6NCx2YXJzOjYsY29uc3RzOltbMSwibWF0LXRvb2x0aXAiLDMsIm5nQ2xhc3MiLCJhbmltYXRpb25lbmQiXSxbInRvb2x0aXAiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIsMCwxKSxQKCJhbmltYXRpb25lbmQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9oYW5kbGVBbmltYXRpb25FbmQobyl9KSxCKDIsImFzeW5jIiksQSgzKSx2KCkpLDImZSl7bGV0IHI7ZXQoIm1hdC10b29sdGlwLWhhbmRzZXQiLG51bGw9PShyPVUoMiw0LGkuX2lzSGFuZHNldCkpP251bGw6ci5tYXRjaGVzKSx5KCJuZ0NsYXNzIixpLnRvb2x0aXBDbGFzcyksQygzKSx5dChpLm1lc3NhZ2UpfX0sZGVwZW5kZW5jaWVzOltGbixHZV0sc3R5bGVzOlsiLm1hdC10b29sdGlwe2NvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czo0cHg7bWFyZ2luOjE0cHg7bWF4LXdpZHRoOjI1MHB4O3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHg7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7dHJhbnNmb3JtOnNjYWxlKDApfS5tYXQtdG9vbHRpcC5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZXthbmltYXRpb246bm9uZTt0cmFuc2Zvcm06c2NhbGUoMSl9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXRvb2x0aXB7b3V0bGluZTpzb2xpZCAxcHh9Lm1hdC10b29sdGlwLWhhbmRzZXR7bWFyZ2luOjI0cHg7cGFkZGluZy1sZWZ0OjE2cHg7cGFkZGluZy1yaWdodDoxNnB4fS5tYXQtdG9vbHRpcC1wYW5lbC1ub24taW50ZXJhY3RpdmV7cG9pbnRlci1ldmVudHM6bm9uZX1Aa2V5ZnJhbWVzIG1hdC10b29sdGlwLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSgwKX01MCV7b3BhY2l0eTouNTt0cmFuc2Zvcm06c2NhbGUoMC45OSl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIG1hdC10b29sdGlwLWhpZGV7MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX0xMDAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoMSl9fS5tYXQtdG9vbHRpcC1zaG93e2FuaW1hdGlvbjptYXQtdG9vbHRpcC1zaG93IDIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIGZvcndhcmRzfS5tYXQtdG9vbHRpcC1oaWRle2FuaW1hdGlvbjptYXQtdG9vbHRpcC1oaWRlIDEwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIGZvcndhcmRzfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFFrPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W1FRZV0saW1wb3J0czpbRXYsTWUsc3MsbG4sbG4sdWRdfSksbn0pKCk7ZnVuY3Rpb24gdEtlKG4sdCl7aWYoMSZuJiYoXygwLCJtYXQtb3B0aW9uIiwxOSksQSgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7eSgidmFsdWUiLGUpLEMoMSksamUoIiAiLGUsIiAiKX19ZnVuY3Rpb24gbktlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LWZvcm0tZmllbGQiLDE2KSgxLCJtYXQtc2VsZWN0IiwxNyksUCgic2VsZWN0aW9uQ2hhbmdlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5fY2hhbmdlUGFnZVNpemUoci52YWx1ZSkpfSksRSgyLHRLZSwyLDIsIm1hdC1vcHRpb24iLDE4KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMik7eSgiYXBwZWFyYW5jZSIsZS5fZm9ybUZpZWxkQXBwZWFyYW5jZSkoImNvbG9yIixlLmNvbG9yKSxDKDEpLHkoInZhbHVlIixlLnBhZ2VTaXplKSgiZGlzYWJsZWQiLGUuZGlzYWJsZWQpKCJwYW5lbENsYXNzIixlLnNlbGVjdENvbmZpZy5wYW5lbENsYXNzfHwiIikoImRpc2FibGVPcHRpb25DZW50ZXJpbmciLGUuc2VsZWN0Q29uZmlnLmRpc2FibGVPcHRpb25DZW50ZXJpbmcpKCJhcmlhLWxhYmVsIixlLl9pbnRsLml0ZW1zUGVyUGFnZUxhYmVsKSxDKDEpLHkoIm5nRm9yT2YiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucyl9fWZ1bmN0aW9uIGlLZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiwyMCksQSgxKSx2KCkpLDImbil7bGV0IGU9UygyKTtDKDEpLHl0KGUucGFnZVNpemUpfX1mdW5jdGlvbiByS2Uobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLEEoMiksdigpLEUoMyxuS2UsMyw4LCJtYXQtZm9ybS1maWVsZCIsMTQpLEUoNCxpS2UsMiwxLCJkaXYiLDE1KSx2KCkpLDImbil7bGV0IGU9UygpO0MoMiksamUoIiAiLGUuX2ludGwuaXRlbXNQZXJQYWdlTGFiZWwsIiAiKSxDKDEpLHkoIm5nSWYiLGUuX2Rpc3BsYXllZFBhZ2VTaXplT3B0aW9ucy5sZW5ndGg+MSksQygxKSx5KCJuZ0lmIixlLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoPD0xKX19ZnVuY3Rpb24gb0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiwyMSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5maXJzdFBhZ2UoKSl9KSxJbigpLF8oMSwic3ZnIiw3KSxPKDIsInBhdGgiLDIyKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJtYXRUb29sdGlwIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixlLl9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpKSgibWF0VG9vbHRpcFBvc2l0aW9uIiwiYWJvdmUiKSgiZGlzYWJsZWQiLGUuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmZpcnN0UGFnZUxhYmVsKX19ZnVuY3Rpb24gc0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO0luKCksSnMoKSxfKDAsImJ1dHRvbiIsMjMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkubGFzdFBhZ2UoKSl9KSxJbigpLF8oMSwic3ZnIiw3KSxPKDIsInBhdGgiLDI0KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJtYXRUb29sdGlwIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGUuX25leHRCdXR0b25zRGlzYWJsZWQoKSkoIm1hdFRvb2x0aXBQb3NpdGlvbiIsImFib3ZlIikoImRpc2FibGVkIixlLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpLHplKCJhcmlhLWxhYmVsIixlLl9pbnRsLmxhc3RQYWdlTGFiZWwpfX1Lcigic3RhdGUiLFtraSgiaW5pdGlhbCwgdm9pZCwgaGlkZGVuIixnbih7b3BhY2l0eTowLHRyYW5zZm9ybToic2NhbGUoMCkifSkpLGtpKCJ2aXNpYmxlIixnbih7dHJhbnNmb3JtOiJzY2FsZSgxKSJ9KSksTGkoIiogPT4gdmlzaWJsZSIsamkoIjIwMG1zIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpIixEbShbZ24oe29wYWNpdHk6MCx0cmFuc2Zvcm06InNjYWxlKDApIixvZmZzZXQ6MH0pLGduKHtvcGFjaXR5Oi41LHRyYW5zZm9ybToic2NhbGUoMC45OSkiLG9mZnNldDouNX0pLGduKHtvcGFjaXR5OjEsdHJhbnNmb3JtOiJzY2FsZSgxKSIsb2Zmc2V0OjF9KV0pKSksTGkoIiogPT4gaGlkZGVuIixqaSgiMTAwbXMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSkiLGduKHtvcGFjaXR5OjB9KSkpXSk7dmFyIGUwPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLmNoYW5nZXM9bmV3IGtlLHRoaXMuaXRlbXNQZXJQYWdlTGFiZWw9Ikl0ZW1zIHBlciBwYWdlOiIsdGhpcy5uZXh0UGFnZUxhYmVsPSJOZXh0IHBhZ2UiLHRoaXMucHJldmlvdXNQYWdlTGFiZWw9IlByZXZpb3VzIHBhZ2UiLHRoaXMuZmlyc3RQYWdlTGFiZWw9IkZpcnN0IHBhZ2UiLHRoaXMubGFzdFBhZ2VMYWJlbD0iTGFzdCBwYWdlIix0aGlzLmdldFJhbmdlTGFiZWw9KGUsaSxyKT0+e2lmKDA9PXJ8fDA9PWkpcmV0dXJuYDAgb2YgJHtyfWA7bGV0IG89ZSppO3JldHVybmAke28rMX0gXHUyMDEzICR7bzwocj1NYXRoLm1heChyLDApKT9NYXRoLm1pbihvK2kscik6bytpfSBvZiAke3J9YH19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGxLZT17cHJvdmlkZTplMCxkZXBzOltbbmV3IG5zLG5ldyB0bCxlMF1dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBlMH19LHVLZT1uZXcgcGUoIk1BVF9QQUdJTkFUT1JfREVGQVVMVF9PUFRJT05TIiksZEtlPXNvKG0yKGNsYXNze30pKSxwS2U9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGRLZXtjb25zdHJ1Y3RvcihlLGkscil7aWYoc3VwZXIoKSx0aGlzLl9pbnRsPWUsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aSx0aGlzLl9wYWdlSW5kZXg9MCx0aGlzLl9sZW5ndGg9MCx0aGlzLl9wYWdlU2l6ZU9wdGlvbnM9W10sdGhpcy5faGlkZVBhZ2VTaXplPSExLHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zPSExLHRoaXMuc2VsZWN0Q29uZmlnPXt9LHRoaXMucGFnZT1uZXcgRyx0aGlzLl9pbnRsQ2hhbmdlcz1lLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSkscil7bGV0e3BhZ2VTaXplOm8scGFnZVNpemVPcHRpb25zOnMsaGlkZVBhZ2VTaXplOmEsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6bH09cjtudWxsIT1vJiYodGhpcy5fcGFnZVNpemU9byksbnVsbCE9cyYmKHRoaXMuX3BhZ2VTaXplT3B0aW9ucz1zKSxudWxsIT1hJiYodGhpcy5faGlkZVBhZ2VTaXplPWEpLG51bGwhPWwmJih0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1sKX19Z2V0IHBhZ2VJbmRleCgpe3JldHVybiB0aGlzLl9wYWdlSW5kZXh9c2V0IHBhZ2VJbmRleChlKXt0aGlzLl9wYWdlSW5kZXg9TWF0aC5tYXgoQmkoZSksMCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sZW5ndGh9c2V0IGxlbmd0aChlKXt0aGlzLl9sZW5ndGg9QmkoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IHBhZ2VTaXplKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplfXNldCBwYWdlU2l6ZShlKXt0aGlzLl9wYWdlU2l6ZT1NYXRoLm1heChCaShlKSwwKSx0aGlzLl91cGRhdGVEaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMoKX1nZXQgcGFnZVNpemVPcHRpb25zKCl7cmV0dXJuIHRoaXMuX3BhZ2VTaXplT3B0aW9uc31zZXQgcGFnZVNpemVPcHRpb25zKGUpe3RoaXMuX3BhZ2VTaXplT3B0aW9ucz0oZXx8W10pLm1hcChpPT5CaShpKSksdGhpcy5fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl9Z2V0IGhpZGVQYWdlU2l6ZSgpe3JldHVybiB0aGlzLl9oaWRlUGFnZVNpemV9c2V0IGhpZGVQYWdlU2l6ZShlKXt0aGlzLl9oaWRlUGFnZVNpemU9UnQoZSl9Z2V0IHNob3dGaXJzdExhc3RCdXR0b25zKCl7cmV0dXJuIHRoaXMuX3Nob3dGaXJzdExhc3RCdXR0b25zfXNldCBzaG93Rmlyc3RMYXN0QnV0dG9ucyhlKXt0aGlzLl9zaG93Rmlyc3RMYXN0QnV0dG9ucz1SdChlKX1uZ09uSW5pdCgpe3RoaXMuX2luaXRpYWxpemVkPSEwLHRoaXMuX3VwZGF0ZURpc3BsYXllZFBhZ2VTaXplT3B0aW9ucygpLHRoaXMuX21hcmtJbml0aWFsaXplZCgpfW5nT25EZXN0cm95KCl7dGhpcy5faW50bENoYW5nZXMudW5zdWJzY3JpYmUoKX1uZXh0UGFnZSgpe2lmKCF0aGlzLmhhc05leHRQYWdlKCkpcmV0dXJuO2xldCBlPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4KzEsdGhpcy5fZW1pdFBhZ2VFdmVudChlKX1wcmV2aW91c1BhZ2UoKXtpZighdGhpcy5oYXNQcmV2aW91c1BhZ2UoKSlyZXR1cm47bGV0IGU9dGhpcy5wYWdlSW5kZXg7dGhpcy5wYWdlSW5kZXg9dGhpcy5wYWdlSW5kZXgtMSx0aGlzLl9lbWl0UGFnZUV2ZW50KGUpfWZpcnN0UGFnZSgpe2lmKCF0aGlzLmhhc1ByZXZpb3VzUGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD0wLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9bGFzdFBhZ2UoKXtpZighdGhpcy5oYXNOZXh0UGFnZSgpKXJldHVybjtsZXQgZT10aGlzLnBhZ2VJbmRleDt0aGlzLnBhZ2VJbmRleD10aGlzLmdldE51bWJlck9mUGFnZXMoKS0xLHRoaXMuX2VtaXRQYWdlRXZlbnQoZSl9aGFzUHJldmlvdXNQYWdlKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4Pj0xJiYwIT10aGlzLnBhZ2VTaXplfWhhc05leHRQYWdlKCl7bGV0IGU9dGhpcy5nZXROdW1iZXJPZlBhZ2VzKCktMTtyZXR1cm4gdGhpcy5wYWdlSW5kZXg8ZSYmMCE9dGhpcy5wYWdlU2l6ZX1nZXROdW1iZXJPZlBhZ2VzKCl7cmV0dXJuIHRoaXMucGFnZVNpemU/TWF0aC5jZWlsKHRoaXMubGVuZ3RoL3RoaXMucGFnZVNpemUpOjB9X2NoYW5nZVBhZ2VTaXplKGUpe2xldCByPXRoaXMucGFnZUluZGV4O3RoaXMucGFnZUluZGV4PU1hdGguZmxvb3IodGhpcy5wYWdlSW5kZXgqdGhpcy5wYWdlU2l6ZS9lKXx8MCx0aGlzLnBhZ2VTaXplPWUsdGhpcy5fZW1pdFBhZ2VFdmVudChyKX1fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNOZXh0UGFnZSgpfV9wcmV2aW91c0J1dHRvbnNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfHwhdGhpcy5oYXNQcmV2aW91c1BhZ2UoKX1fdXBkYXRlRGlzcGxheWVkUGFnZVNpemVPcHRpb25zKCl7IXRoaXMuX2luaXRpYWxpemVkfHwodGhpcy5wYWdlU2l6ZXx8KHRoaXMuX3BhZ2VTaXplPTAhPXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aD90aGlzLnBhZ2VTaXplT3B0aW9uc1swXTo1MCksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zPXRoaXMucGFnZVNpemVPcHRpb25zLnNsaWNlKCksLTE9PT10aGlzLl9kaXNwbGF5ZWRQYWdlU2l6ZU9wdGlvbnMuaW5kZXhPZih0aGlzLnBhZ2VTaXplKSYmdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnB1c2godGhpcy5wYWdlU2l6ZSksdGhpcy5fZGlzcGxheWVkUGFnZVNpemVPcHRpb25zLnNvcnQoKGUsaSk9PmUtaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfV9lbWl0UGFnZUV2ZW50KGUpe3RoaXMucGFnZS5lbWl0KHtwcmV2aW91c1BhZ2VJbmRleDplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxwYWdlU2l6ZTp0aGlzLnBhZ2VTaXplLGxlbmd0aDp0aGlzLmxlbmd0aH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7bmwoKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixpbnB1dHM6e2NvbG9yOiJjb2xvciIscGFnZUluZGV4OiJwYWdlSW5kZXgiLGxlbmd0aDoibGVuZ3RoIixwYWdlU2l6ZToicGFnZVNpemUiLHBhZ2VTaXplT3B0aW9uczoicGFnZVNpemVPcHRpb25zIixoaWRlUGFnZVNpemU6ImhpZGVQYWdlU2l6ZSIsc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6InNob3dGaXJzdExhc3RCdXR0b25zIixzZWxlY3RDb25maWc6InNlbGVjdENvbmZpZyJ9LG91dHB1dHM6e3BhZ2U6InBhZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksS2s9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHBLZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpLHIpLHImJm51bGwhPXIuZm9ybUZpZWxkQXBwZWFyYW5jZSYmKHRoaXMuX2Zvcm1GaWVsZEFwcGVhcmFuY2U9ci5mb3JtRmllbGRBcHBlYXJhbmNlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShlMCksTShubiksTSh1S2UsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1wYWdpbmF0b3IiXV0saG9zdEF0dHJzOlsicm9sZSIsImdyb3VwIiwxLCJtYXQtcGFnaW5hdG9yIl0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxleHBvcnRBczpbIm1hdFBhZ2luYXRvciJdLGZlYXR1cmVzOlt0dF0sZGVjbHM6MTQsdmFyczoxNCxjb25zdHM6W1sxLCJtYXQtcGFnaW5hdG9yLW91dGVyLWNvbnRhaW5lciJdLFsxLCJtYXQtcGFnaW5hdG9yLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnMiXSxbMSwibWF0LXBhZ2luYXRvci1yYW5nZS1sYWJlbCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLWZpcnN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwibWF0LXBhZ2luYXRvci1uYXZpZ2F0aW9uLXByZXZpb3VzIiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsidmlld0JveCIsIjAgMCAyNCAyNCIsImZvY3VzYWJsZSIsImZhbHNlIiwxLCJtYXQtcGFnaW5hdG9yLWljb24iXSxbImQiLCJNMTUuNDEgNy40MUwxNCA2bC02IDYgNiA2IDEuNDEtMS40MUwxMC44MyAxMnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1uZXh0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayJdLFsiZCIsIk0xMCA2TDguNTkgNy40MSAxMy4xNyAxMmwtNC41OCA0LjU5TDEwIDE4bDYtNnoiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1sYXN0IiwzLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFBvc2l0aW9uIiwiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZSJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1sYWJlbCJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS12YWx1ZSIsNCwibmdJZiJdLFsxLCJtYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZS1zZWxlY3QiLDMsImFwcGVhcmFuY2UiLCJjb2xvciJdLFszLCJ2YWx1ZSIsImRpc2FibGVkIiwicGFuZWxDbGFzcyIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJhcmlhLWxhYmVsIiwic2VsZWN0aW9uQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwibWF0LXBhZ2luYXRvci1wYWdlLXNpemUtdmFsdWUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsIm1hdC1wYWdpbmF0b3ItbmF2aWdhdGlvbi1maXJzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNMTguNDEgMTYuNTlMMTMuODIgMTJsNC41OS00LjU5TDE3IDZsLTYgNiA2IDZ6TTYgNmgydjEySDZ6Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJtYXQtcGFnaW5hdG9yLW5hdmlnYXRpb24tbGFzdCIsMywibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBQb3NpdGlvbiIsImRpc2FibGVkIiwiY2xpY2siXSxbImQiLCJNNS41OSA3LjQxTDEwLjE4IDEybC00LjU5IDQuNTlMNyAxOGw2LTYtNi02ek0xNiA2aDJ2MTJoLTJ6Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImRpdiIsMSksRSgyLHJLZSw1LDMsImRpdiIsMiksXygzLCJkaXYiLDMpKDQsImRpdiIsNCksQSg1KSx2KCksRSg2LG9LZSwzLDUsImJ1dHRvbiIsNSksXyg3LCJidXR0b24iLDYpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnByZXZpb3VzUGFnZSgpfSksSW4oKSxfKDgsInN2ZyIsNyksTyg5LCJwYXRoIiw4KSx2KCkoKSxKcygpLF8oMTAsImJ1dHRvbiIsOSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkubmV4dFBhZ2UoKX0pLEluKCksXygxMSwic3ZnIiw3KSxPKDEyLCJwYXRoIiwxMCksdigpKCksRSgxMyxzS2UsMyw1LCJidXR0b24iLDExKSx2KCkoKSgpKSwyJmUmJihDKDIpLHkoIm5nSWYiLCFpLmhpZGVQYWdlU2l6ZSksQygzKSxqZSgiICIsaS5faW50bC5nZXRSYW5nZUxhYmVsKGkucGFnZUluZGV4LGkucGFnZVNpemUsaS5sZW5ndGgpLCIgIiksQygxKSx5KCJuZ0lmIixpLnNob3dGaXJzdExhc3RCdXR0b25zKSxDKDEpLHkoIm1hdFRvb2x0aXAiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpKCJtYXRUb29sdGlwRGlzYWJsZWQiLGkuX3ByZXZpb3VzQnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fcHJldmlvdXNCdXR0b25zRGlzYWJsZWQoKSksemUoImFyaWEtbGFiZWwiLGkuX2ludGwucHJldmlvdXNQYWdlTGFiZWwpLEMoMykseSgibWF0VG9vbHRpcCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSgibWF0VG9vbHRpcERpc2FibGVkIixpLl9uZXh0QnV0dG9uc0Rpc2FibGVkKCkpKCJtYXRUb29sdGlwUG9zaXRpb24iLCJhYm92ZSIpKCJkaXNhYmxlZCIsaS5fbmV4dEJ1dHRvbnNEaXNhYmxlZCgpKSx6ZSgiYXJpYS1sYWJlbCIsaS5faW50bC5uZXh0UGFnZUxhYmVsKSxDKDMpLHkoIm5nSWYiLGkuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMpKX0sZGVwZW5kZW5jaWVzOltkbixCZSxfbixwZCxIaCxPcyxYa10sc3R5bGVzOlsiLm1hdC1wYWdpbmF0b3J7ZGlzcGxheTpibG9ja30ubWF0LXBhZ2luYXRvci1vdXRlci1jb250YWluZXJ7ZGlzcGxheTpmbGV4fS5tYXQtcGFnaW5hdG9yLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtwYWRkaW5nOjAgOHB4O2ZsZXgtd3JhcDp3cmFwLXJldmVyc2U7d2lkdGg6MTAwJX0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemV7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO21hcmdpbi1yaWdodDo4cHh9W2Rpcj1ydGxdIC5tYXQtcGFnaW5hdG9yLXBhZ2Utc2l6ZXttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDo4cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLWxhYmVse21hcmdpbjowIDRweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0e21hcmdpbjo2cHggNHB4IDAgNHB4O3dpZHRoOjU2cHh9Lm1hdC1wYWdpbmF0b3ItcGFnZS1zaXplLXNlbGVjdC5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmV7d2lkdGg6NjRweH0ubWF0LXBhZ2luYXRvci1wYWdlLXNpemUtc2VsZWN0Lm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbHt3aWR0aDo2NHB4fS5tYXQtcGFnaW5hdG9yLXJhbmdlLWxhYmVse21hcmdpbjowIDMycHggMCAyNHB4fS5tYXQtcGFnaW5hdG9yLXJhbmdlLWFjdGlvbnN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWF0LXBhZ2luYXRvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjI4cHg7ZmlsbDpjdXJyZW50Q29sb3J9W2Rpcj1ydGxdIC5tYXQtcGFnaW5hdG9yLWljb257dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1wYWdpbmF0b3ItaWNvbntmaWxsOkNhbnZhc1RleHR9Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksWHBlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W2xLZV0saW1wb3J0czpbTWUsUG4sbGMsUWssbG5dfSksbn0pKCksZktlPVsibWF0LXNvcnQtaGVhZGVyIiwiIl07ZnVuY3Rpb24gbUtlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2IiwzKSxQKCJAYXJyb3dQb3NpdGlvbi5zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLl9kaXNhYmxlVmlld1N0YXRlQW5pbWF0aW9uPSEwKX0pKCJAYXJyb3dQb3NpdGlvbi5kb25lIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEpfSksTygxLCJkaXYiLDQpLF8oMiwiZGl2Iiw1KSxPKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJkaXYiLDgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO3koIkBhcnJvd09wYWNpdHkiLGUuX2dldEFycm93Vmlld1N0YXRlKCkpKCJAYXJyb3dQb3NpdGlvbiIsZS5fZ2V0QXJyb3dWaWV3U3RhdGUoKSkoIkBhbGxvd0NoaWxkcmVuIixlLl9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCkpLEMoMikseSgiQGluZGljYXRvciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxDKDEpLHkoIkBsZWZ0UG9pbnRlciIsZS5fZ2V0QXJyb3dEaXJlY3Rpb25TdGF0ZSgpKSxDKDEpLHkoIkByaWdodFBvaW50ZXIiLGUuX2dldEFycm93RGlyZWN0aW9uU3RhdGUoKSl9fXZhciBnS2U9WyIqIl0sUXBlPW5ldyBwZSgiTUFUX1NPUlRfREVGQVVMVF9PUFRJT05TIiksX0tlPW0yKHNvKGNsYXNze30pKSxNRT0oKCk9PntjbGFzcyBuIGV4dGVuZHMgX0tle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fZGVmYXVsdE9wdGlvbnM9ZSx0aGlzLnNvcnRhYmxlcz1uZXcgTWFwLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcga2UsdGhpcy5zdGFydD0iYXNjIix0aGlzLl9kaXJlY3Rpb249IiIsdGhpcy5zb3J0Q2hhbmdlPW5ldyBHfWdldCBkaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9ufXNldCBkaXJlY3Rpb24oZSl7dGhpcy5fZGlyZWN0aW9uPWV9Z2V0IGRpc2FibGVDbGVhcigpe3JldHVybiB0aGlzLl9kaXNhYmxlQ2xlYXJ9c2V0IGRpc2FibGVDbGVhcihlKXt0aGlzLl9kaXNhYmxlQ2xlYXI9UnQoZSl9cmVnaXN0ZXIoZSl7dGhpcy5zb3J0YWJsZXMuc2V0KGUuaWQsZSl9ZGVyZWdpc3RlcihlKXt0aGlzLnNvcnRhYmxlcy5kZWxldGUoZS5pZCl9c29ydChlKXt0aGlzLmFjdGl2ZSE9ZS5pZD8odGhpcy5hY3RpdmU9ZS5pZCx0aGlzLmRpcmVjdGlvbj1lLnN0YXJ0P2Uuc3RhcnQ6dGhpcy5zdGFydCk6dGhpcy5kaXJlY3Rpb249dGhpcy5nZXROZXh0U29ydERpcmVjdGlvbihlKSx0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7YWN0aXZlOnRoaXMuYWN0aXZlLGRpcmVjdGlvbjp0aGlzLmRpcmVjdGlvbn0pfWdldE5leHRTb3J0RGlyZWN0aW9uKGUpe2lmKCFlKXJldHVybiIiO2xldCByPWZ1bmN0aW9uKG4sdCl7bGV0IGU9WyJhc2MiLCJkZXNjIl07cmV0dXJuImRlc2MiPT1uJiZlLnJldmVyc2UoKSx0fHxlLnB1c2goIiIpLGV9KGUuc3RhcnR8fHRoaXMuc3RhcnQsZT8uZGlzYWJsZUNsZWFyPz90aGlzLmRpc2FibGVDbGVhcj8/ISF0aGlzLl9kZWZhdWx0T3B0aW9ucz8uZGlzYWJsZUNsZWFyKSxvPXIuaW5kZXhPZih0aGlzLmRpcmVjdGlvbikrMTtyZXR1cm4gbz49ci5sZW5ndGgmJihvPTApLHJbb119bmdPbkluaXQoKXt0aGlzLl9tYXJrSW5pdGlhbGl6ZWQoKX1uZ09uQ2hhbmdlcygpe3RoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShRcGUsOCkpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJtYXRTb3J0IiwiIl1dLGhvc3RBdHRyczpbMSwibWF0LXNvcnQiXSxpbnB1dHM6e2Rpc2FibGVkOlsibWF0U29ydERpc2FibGVkIiwiZGlzYWJsZWQiXSxhY3RpdmU6WyJtYXRTb3J0QWN0aXZlIiwiYWN0aXZlIl0sc3RhcnQ6WyJtYXRTb3J0U3RhcnQiLCJzdGFydCJdLGRpcmVjdGlvbjpbIm1hdFNvcnREaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxkaXNhYmxlQ2xlYXI6WyJtYXRTb3J0RGlzYWJsZUNsZWFyIiwiZGlzYWJsZUNsZWFyIl19LG91dHB1dHM6e3NvcnRDaGFuZ2U6Im1hdFNvcnRDaGFuZ2UifSxleHBvcnRBczpbIm1hdFNvcnQiXSxmZWF0dXJlczpbdHQsRnRdfSksbn0pKCksQWY9YXRlLkVOVEVSSU5HKyIgIitzdGUuU1RBTkRBUkRfQ1VSVkUsUGI9e2luZGljYXRvcjpLcigiaW5kaWNhdG9yIixba2koImFjdGl2ZS1hc2MsIGFzYyIsZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwcHgpIn0pKSxraSgiYWN0aXZlLWRlc2MsIGRlc2MiLGduKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMTBweCkifSkpLExpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsamkoQWYpKV0pLGxlZnRQb2ludGVyOktyKCJsZWZ0UG9pbnRlciIsW2tpKCJhY3RpdmUtYXNjLCBhc2MiLGduKHt0cmFuc2Zvcm06InJvdGF0ZSgtNDVkZWcpIn0pKSxraSgiYWN0aXZlLWRlc2MsIGRlc2MiLGduKHt0cmFuc2Zvcm06InJvdGF0ZSg0NWRlZykifSkpLExpKCJhY3RpdmUtYXNjIDw9PiBhY3RpdmUtZGVzYyIsamkoQWYpKV0pLHJpZ2h0UG9pbnRlcjpLcigicmlnaHRQb2ludGVyIixba2koImFjdGl2ZS1hc2MsIGFzYyIsZ24oe3RyYW5zZm9ybToicm90YXRlKDQ1ZGVnKSJ9KSksa2koImFjdGl2ZS1kZXNjLCBkZXNjIixnbih7dHJhbnNmb3JtOiJyb3RhdGUoLTQ1ZGVnKSJ9KSksTGkoImFjdGl2ZS1hc2MgPD0+IGFjdGl2ZS1kZXNjIixqaShBZikpXSksYXJyb3dPcGFjaXR5OktyKCJhcnJvd09wYWNpdHkiLFtraSgiZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIsZ24oe29wYWNpdHk6MX0pKSxraSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCIsZ24oe29wYWNpdHk6LjU0fSkpLGtpKCJoaW50LXRvLWRlc2MsIGFjdGl2ZS10by1kZXNjLCBkZXNjLCBoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjLCB2b2lkIixnbih7b3BhY2l0eTowfSkpLExpKCIqID0+IGFzYywgKiA9PiBkZXNjLCAqID0+IGFjdGl2ZSwgKiA9PiBoaW50LCAqID0+IHZvaWQiLGppKCIwbXMiKSksTGkoIiogPD0+ICoiLGppKEFmKSldKSxhcnJvd1Bvc2l0aW9uOktyKCJhcnJvd1Bvc2l0aW9uIixbTGkoIiogPT4gZGVzYy10by1oaW50LCAqID0+IGRlc2MtdG8tYWN0aXZlIixqaShBZixEbShbZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgtMjUlKSJ9KSxnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxMaSgiKiA9PiBoaW50LXRvLWRlc2MsICogPT4gYWN0aXZlLXRvLWRlc2MiLGppKEFmLERtKFtnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pLGduKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KV0pKSksTGkoIiogPT4gYXNjLXRvLWhpbnQsICogPT4gYXNjLXRvLWFjdGl2ZSIsamkoQWYsRG0oW2duKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoMjUlKSJ9KSxnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDApIn0pXSkpKSxMaSgiKiA9PiBoaW50LXRvLWFzYywgKiA9PiBhY3RpdmUtdG8tYXNjIixqaShBZixEbShbZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSxnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC0yNSUpIn0pXSkpKSxraSgiZGVzYy10by1oaW50LCBhc2MtdG8taGludCwgaGludCwgZGVzYy10by1hY3RpdmUsIGFzYy10by1hY3RpdmUsIGFjdGl2ZSIsZ24oe3RyYW5zZm9ybToidHJhbnNsYXRlWSgwKSJ9KSksa2koImhpbnQtdG8tZGVzYywgYWN0aXZlLXRvLWRlc2MsIGRlc2MiLGduKHt0cmFuc2Zvcm06InRyYW5zbGF0ZVkoLTI1JSkifSkpLGtpKCJoaW50LXRvLWFzYywgYWN0aXZlLXRvLWFzYywgYXNjIixnbih7dHJhbnNmb3JtOiJ0cmFuc2xhdGVZKDI1JSkifSkpXSksYWxsb3dDaGlsZHJlbjpLcigiYWxsb3dDaGlsZHJlbiIsW0xpKCIqIDw9PiAqIixbSW0oIkAqIixBbSgpLHtvcHRpb25hbDohMH0pXSldKX0sWms9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuY2hhbmdlcz1uZXcga2V9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLG59KSgpLGJLZT17cHJvdmlkZTpaayxkZXBzOltbbmV3IG5zLG5ldyB0bCxaa11dLHVzZUZhY3Rvcnk6ZnVuY3Rpb24obil7cmV0dXJuIG58fG5ldyBaa319LHhLZT1zbyhjbGFzc3t9KSxLcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHhLZXtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsLGMpe3N1cGVyKCksdGhpcy5faW50bD1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fc29ydD1yLHRoaXMuX2NvbHVtbkRlZj1vLHRoaXMuX2ZvY3VzTW9uaXRvcj1zLHRoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9hcmlhRGVzY3JpYmVyPWwsdGhpcy5fc2hvd0luZGljYXRvckhpbnQ9ITEsdGhpcy5fdmlld1N0YXRlPXt9LHRoaXMuX2Fycm93RGlyZWN0aW9uPSIiLHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITEsdGhpcy5hcnJvd1Bvc2l0aW9uPSJhZnRlciIsdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPSJTb3J0IixjPy5hcnJvd1Bvc2l0aW9uJiYodGhpcy5hcnJvd1Bvc2l0aW9uPWM/LmFycm93UG9zaXRpb24pLHRoaXMuX2hhbmRsZVN0YXRlQ2hhbmdlcygpfWdldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oKXtyZXR1cm4gdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9ufXNldCBzb3J0QWN0aW9uRGVzY3JpcHRpb24oZSl7dGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpfWdldCBkaXNhYmxlQ2xlYXIoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZUNsZWFyfXNldCBkaXNhYmxlQ2xlYXIoZSl7dGhpcy5fZGlzYWJsZUNsZWFyPVJ0KGUpfW5nT25Jbml0KCl7IXRoaXMuaWQmJnRoaXMuX2NvbHVtbkRlZiYmKHRoaXMuaWQ9dGhpcy5fY29sdW1uRGVmLm5hbWUpLHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHt0b1N0YXRlOnRoaXMuX2lzU29ydGVkKCk/ImFjdGl2ZSI6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSx0aGlzLl9zb3J0LnJlZ2lzdGVyKHRoaXMpLHRoaXMuX3NvcnRCdXR0b249dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5tYXQtc29ydC1oZWFkZXItY29udGFpbmVyIiksdGhpcy5fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbil9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwhMCkuc3Vic2NyaWJlKGU9PntsZXQgaT0hIWU7aSE9PXRoaXMuX3Nob3dJbmRpY2F0b3JIaW50JiYodGhpcy5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoaSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZiksdGhpcy5fc29ydC5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X3NldEluZGljYXRvckhpbnRWaXNpYmxlKGUpe3RoaXMuX2lzRGlzYWJsZWQoKSYmZXx8KHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PWUsdGhpcy5faXNTb3J0ZWQoKXx8KHRoaXMuX3VwZGF0ZUFycm93RGlyZWN0aW9uKCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50P3tmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiaGludCJ9Ontmcm9tU3RhdGU6ImhpbnQiLHRvU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb259KSkpfV9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoZSl7dGhpcy5fdmlld1N0YXRlPWV8fHt9LHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb24mJih0aGlzLl92aWV3U3RhdGU9e3RvU3RhdGU6ZS50b1N0YXRlfSl9X3RvZ2dsZU9uSW50ZXJhY3Rpb24oKXt0aGlzLl9zb3J0LnNvcnQodGhpcyksKCJoaW50Ij09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlfHwiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlKSYmKHRoaXMuX2Rpc2FibGVWaWV3U3RhdGVBbmltYXRpb249ITApfV9oYW5kbGVDbGljaygpe3RoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5fc29ydC5zb3J0KHRoaXMpfV9oYW5kbGVLZXlkb3duKGUpeyF0aGlzLl9pc0Rpc2FibGVkKCkmJigzMj09PWUua2V5Q29kZXx8MTM9PT1lLmtleUNvZGUpJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX3RvZ2dsZU9uSW50ZXJhY3Rpb24oKSl9X2lzU29ydGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuYWN0aXZlPT10aGlzLmlkJiYoImFzYyI9PT10aGlzLl9zb3J0LmRpcmVjdGlvbnx8ImRlc2MiPT09dGhpcy5fc29ydC5kaXJlY3Rpb24pfV9nZXRBcnJvd0RpcmVjdGlvblN0YXRlKCl7cmV0dXJuYCR7dGhpcy5faXNTb3J0ZWQoKT8iYWN0aXZlLSI6IiJ9JHt0aGlzLl9hcnJvd0RpcmVjdGlvbn1gfV9nZXRBcnJvd1ZpZXdTdGF0ZSgpe2xldCBlPXRoaXMuX3ZpZXdTdGF0ZS5mcm9tU3RhdGU7cmV0dXJuKGU/YCR7ZX0tdG8tYDoiIikrdGhpcy5fdmlld1N0YXRlLnRvU3RhdGV9X3VwZGF0ZUFycm93RGlyZWN0aW9uKCl7dGhpcy5fYXJyb3dEaXJlY3Rpb249dGhpcy5faXNTb3J0ZWQoKT90aGlzLl9zb3J0LmRpcmVjdGlvbjp0aGlzLnN0YXJ0fHx0aGlzLl9zb3J0LnN0YXJ0fV9pc0Rpc2FibGVkKCl7cmV0dXJuIHRoaXMuX3NvcnQuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZWR9X2dldEFyaWFTb3J0QXR0cmlidXRlKCl7cmV0dXJuIHRoaXMuX2lzU29ydGVkKCk/ImFzYyI9PXRoaXMuX3NvcnQuZGlyZWN0aW9uPyJhc2NlbmRpbmciOiJkZXNjZW5kaW5nIjoibm9uZSJ9X3JlbmRlckFycm93KCl7cmV0dXJuIXRoaXMuX2lzRGlzYWJsZWQoKXx8dGhpcy5faXNTb3J0ZWQoKX1fdXBkYXRlU29ydEFjdGlvbkRlc2NyaXB0aW9uKGUpe3RoaXMuX3NvcnRCdXR0b24mJih0aGlzLl9hcmlhRGVzY3JpYmVyPy5yZW1vdmVEZXNjcmlwdGlvbih0aGlzLl9zb3J0QnV0dG9uLHRoaXMuX3NvcnRBY3Rpb25EZXNjcmlwdGlvbiksdGhpcy5fYXJpYURlc2NyaWJlcj8uZGVzY3JpYmUodGhpcy5fc29ydEJ1dHRvbixlKSksdGhpcy5fc29ydEFjdGlvbkRlc2NyaXB0aW9uPWV9X2hhbmRsZVN0YXRlQ2hhbmdlcygpe3RoaXMuX3JlcmVuZGVyU3Vic2NyaXB0aW9uPUp0KHRoaXMuX3NvcnQuc29ydENoYW5nZSx0aGlzLl9zb3J0Ll9zdGF0ZUNoYW5nZXMsdGhpcy5faW50bC5jaGFuZ2VzKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9pc1NvcnRlZCgpJiYodGhpcy5fdXBkYXRlQXJyb3dEaXJlY3Rpb24oKSwoImhpbnQiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGV8fCJhY3RpdmUiPT09dGhpcy5fdmlld1N0YXRlLnRvU3RhdGUpJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMCksdGhpcy5fc2V0QW5pbWF0aW9uVHJhbnNpdGlvblN0YXRlKHtmcm9tU3RhdGU6dGhpcy5fYXJyb3dEaXJlY3Rpb24sdG9TdGF0ZToiYWN0aXZlIn0pLHRoaXMuX3Nob3dJbmRpY2F0b3JIaW50PSExKSwhdGhpcy5faXNTb3J0ZWQoKSYmdGhpcy5fdmlld1N0YXRlJiYiYWN0aXZlIj09PXRoaXMuX3ZpZXdTdGF0ZS50b1N0YXRlJiYodGhpcy5fZGlzYWJsZVZpZXdTdGF0ZUFuaW1hdGlvbj0hMSx0aGlzLl9zZXRBbmltYXRpb25UcmFuc2l0aW9uU3RhdGUoe2Zyb21TdGF0ZToiYWN0aXZlIix0b1N0YXRlOnRoaXMuX2Fycm93RGlyZWN0aW9ufSkpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oWmspLE0obm4pLE0oTUUsOCksTSgiTUFUX1NPUlRfSEVBREVSX0NPTFVNTl9ERUYiLDgpLE0oRnIpLE0oUmUpLE0oZjIsOCksTShRcGUsOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdC1zb3J0LWhlYWRlciIsIiJdXSxob3N0QXR0cnM6WzEsIm1hdC1zb3J0LWhlYWRlciJdLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2soKX0pKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlS2V5ZG93bihvKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBpLl9zZXRJbmRpY2F0b3JIaW50VmlzaWJsZSghMCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fc2V0SW5kaWNhdG9ySGludFZpc2libGUoITEpfSksMiZlJiYoemUoImFyaWEtc29ydCIsaS5fZ2V0QXJpYVNvcnRBdHRyaWJ1dGUoKSksZXQoIm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCIsaS5faXNEaXNhYmxlZCgpKSl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIixpZDpbIm1hdC1zb3J0LWhlYWRlciIsImlkIl0sYXJyb3dQb3NpdGlvbjoiYXJyb3dQb3NpdGlvbiIsc3RhcnQ6InN0YXJ0Iixzb3J0QWN0aW9uRGVzY3JpcHRpb246InNvcnRBY3Rpb25EZXNjcmlwdGlvbiIsZGlzYWJsZUNsZWFyOiJkaXNhYmxlQ2xlYXIifSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXSxmZWF0dXJlczpbdHRdLGF0dHJzOmZLZSxuZ0NvbnRlbnRTZWxlY3RvcnM6Z0tlLGRlY2xzOjQsdmFyczo3LGNvbnN0czpbWzEsIm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIiLCJtYXQtZm9jdXMtaW5kaWNhdG9yIl0sWzEsIm1hdC1zb3J0LWhlYWRlci1jb250ZW50Il0sWyJjbGFzcyIsIm1hdC1zb3J0LWhlYWRlci1hcnJvdyIsNCwibmdJZiJdLFsxLCJtYXQtc29ydC1oZWFkZXItYXJyb3ciXSxbMSwibWF0LXNvcnQtaGVhZGVyLXN0ZW0iXSxbMSwibWF0LXNvcnQtaGVhZGVyLWluZGljYXRvciJdLFsxLCJtYXQtc29ydC1oZWFkZXItcG9pbnRlci1sZWZ0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLXJpZ2h0Il0sWzEsIm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKHhpKCksXygwLCJkaXYiLDApKDEsImRpdiIsMSksVm4oMiksdigpLEUoMyxtS2UsNiw2LCJkaXYiLDIpLHYoKSksMiZlJiYoZXQoIm1hdC1zb3J0LWhlYWRlci1zb3J0ZWQiLGkuX2lzU29ydGVkKCkpKCJtYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIiwiYmVmb3JlIj09PWkuYXJyb3dQb3NpdGlvbiksemUoInRhYmluZGV4IixpLl9pc0Rpc2FibGVkKCk/bnVsbDowKSgicm9sZSIsaS5faXNEaXNhYmxlZCgpP251bGw6ImJ1dHRvbiIpLEMoMykseSgibmdJZiIsaS5fcmVuZGVyQXJyb3coKSkpfSxkZXBlbmRlbmNpZXM6W0JlXSxzdHlsZXM6WyIubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7Y3Vyc29yOnBvaW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2xldHRlci1zcGFjaW5nOm5vcm1hbDtvdXRsaW5lOjB9W21hdC1zb3J0LWhlYWRlcl0uY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zb3J0LWhlYWRlci1jb250YWluZXIsW21hdC1zb3J0LWhlYWRlcl0uY2RrLXByb2dyYW0tZm9jdXNlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntib3JkZXItYm90dG9tOnNvbGlkIDFweCBjdXJyZW50Q29sb3J9Lm1hdC1zb3J0LWhlYWRlci1kaXNhYmxlZCAubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcntjdXJzb3I6ZGVmYXVsdH0ubWF0LXNvcnQtaGVhZGVyLWNvbnRhaW5lcjo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc29ydC1oZWFkZXItY29udGVudHt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3Jle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfS5tYXQtc29ydC1oZWFkZXItYXJyb3d7aGVpZ2h0OjEycHg7d2lkdGg6MTJweDttaW4td2lkdGg6MTJweDtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7b3BhY2l0eTowfS5tYXQtc29ydC1oZWFkZXItYXJyb3csW2Rpcj1ydGxdIC5tYXQtc29ydC1oZWFkZXItcG9zaXRpb24tYmVmb3JlIC5tYXQtc29ydC1oZWFkZXItYXJyb3d7bWFyZ2luOjAgMCAwIDZweH0ubWF0LXNvcnQtaGVhZGVyLXBvc2l0aW9uLWJlZm9yZSAubWF0LXNvcnQtaGVhZGVyLWFycm93LFtkaXI9cnRsXSAubWF0LXNvcnQtaGVhZGVyLWFycm93e21hcmdpbjowIDZweCAwIDB9Lm1hdC1zb3J0LWhlYWRlci1zdGVte2JhY2tncm91bmQ6Y3VycmVudENvbG9yO2hlaWdodDoxMHB4O3dpZHRoOjJweDttYXJnaW46YXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1zdGVte3dpZHRoOjA7Ym9yZGVyLWxlZnQ6c29saWQgMnB4fS5tYXQtc29ydC1oZWFkZXItaW5kaWNhdG9ye3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbWlkZGxle21hcmdpbjphdXRvO2hlaWdodDoycHg7d2lkdGg6MnB4O2JhY2tncm91bmQ6Y3VycmVudENvbG9yO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zb3J0LWhlYWRlci1wb2ludGVyLW1pZGRsZXt3aWR0aDowO2hlaWdodDowO2JvcmRlci10b3A6c29saWQgMnB4O2JvcmRlci1sZWZ0OnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7YmFja2dyb3VuZDpjdXJyZW50Q29sb3I7d2lkdGg6NnB4O2hlaWdodDoycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdCwuY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc29ydC1oZWFkZXItcG9pbnRlci1yaWdodHt3aWR0aDowO2hlaWdodDowO2JvcmRlci1sZWZ0OnNvbGlkIDZweDtib3JkZXItdG9wOnNvbGlkIDJweH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItbGVmdHt0cmFuc2Zvcm0tb3JpZ2luOnJpZ2h0O2xlZnQ6MH0ubWF0LXNvcnQtaGVhZGVyLXBvaW50ZXItcmlnaHR7dHJhbnNmb3JtLW9yaWdpbjpsZWZ0O3JpZ2h0OjB9Il0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbUGIuaW5kaWNhdG9yLFBiLmxlZnRQb2ludGVyLFBiLnJpZ2h0UG9pbnRlcixQYi5hcnJvd09wYWNpdHksUGIuYXJyb3dQb3NpdGlvbixQYi5hbGxvd0NoaWxkcmVuXX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxacGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbYktlXSxpbXBvcnRzOltNZSxsbl19KSxufSkoKTtmdW5jdGlvbiBqRyhuKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKC4uLnQpe3N1cGVyKC4uLnQpLHRoaXMuX3N0aWNreT0hMSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfWdldCBzdGlja3koKXtyZXR1cm4gdGhpcy5fc3RpY2t5fXNldCBzdGlja3kodCl7bGV0IGU9dGhpcy5fc3RpY2t5O3RoaXMuX3N0aWNreT1SdCh0KSx0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPWUhPT10aGlzLl9zdGlja3l9aGFzU3RpY2t5Q2hhbmdlZCgpe2xldCB0PXRoaXMuX2hhc1N0aWNreUNoYW5nZWQ7cmV0dXJuIHRoaXMuX2hhc1N0aWNreUNoYW5nZWQ9ITEsdH1yZXNldFN0aWNreUNoYW5nZWQoKXt0aGlzLl9oYXNTdGlja3lDaGFuZ2VkPSExfX19dmFyIEdHPW5ldyBwZSgiQ0RLX1RBQkxFIiksSnBlPShuZXcgcGUoInRleHQtY29sdW1uLW9wdGlvbnMiKSxqRyhjbGFzc3t9KSxuZXcgcGUoIl9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIiksKCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkpe3RoaXMudGVtcGxhdGU9ZSx0aGlzLl9kaWZmZXJzPWl9bmdPbkNoYW5nZXMoZSl7aWYoIXRoaXMuX2NvbHVtbnNEaWZmZXIpe2xldCBpPWUuY29sdW1ucyYmZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZXx8W107dGhpcy5fY29sdW1uc0RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoaSkuY3JlYXRlKCksdGhpcy5fY29sdW1uc0RpZmZlci5kaWZmKGkpfX1nZXRDb2x1bW5zRGlmZigpe3JldHVybiB0aGlzLl9jb2x1bW5zRGlmZmVyLmRpZmYodGhpcy5jb2x1bW5zKX1leHRyYWN0Q2VsbFRlbXBsYXRlKGUpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgJHBlP2UuaGVhZGVyQ2VsbC50ZW1wbGF0ZTp0aGlzIGluc3RhbmNlb2YgZWhlP2UuZm9vdGVyQ2VsbC50ZW1wbGF0ZTplLmNlbGwudGVtcGxhdGV9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oVmkpLE0oa2MpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixmZWF0dXJlczpbRnRdfSksbn0pKCkpLHdLZT1qRyhjbGFzcyBleHRlbmRzIEpwZXt9KSwkcGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHdLZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZpKSxNKGtjKSxNKEdHLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrSGVhZGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0hlYWRlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtIZWFkZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LEZ0XX0pLG59KSgpLFNLZT1qRyhjbGFzcyBleHRlbmRzIEpwZXt9KSxlaGU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFNLZXtjb25zdHJ1Y3RvcihlLGkscil7c3VwZXIoZSxpKSx0aGlzLl90YWJsZT1yfW5nT25DaGFuZ2VzKGUpe3N1cGVyLm5nT25DaGFuZ2VzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFZpKSxNKGtjKSxNKEdHLDgpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY2RrRm9vdGVyUm93RGVmIiwiIl1dLGlucHV0czp7Y29sdW1uczpbImNka0Zvb3RlclJvd0RlZiIsImNvbHVtbnMiXSxzdGlja3k6WyJjZGtGb290ZXJSb3dEZWZTdGlja3kiLCJzdGlja3kiXX0sZmVhdHVyZXM6W3R0LEZ0XX0pLG59KSgpLHRoZT0obmV3IHBlKCJDREtfU1BMIiksKCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W1pjXX0pLG59KSgpKSxuaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W3RoZSxsbixsbl19KSxufSkoKSxXRz1jbGFzcyBleHRlbmRzIFB2e2NvbnN0cnVjdG9yKHQ9W10pe3N1cGVyKCksdGhpcy5fcmVuZGVyRGF0YT1uZXcgaHIoW10pLHRoaXMuX2ZpbHRlcj1uZXcgaHIoIiIpLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXM9bmV3IGtlLHRoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb249bnVsbCx0aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3I9KGUsaSk9PntsZXQgcj1lW2ldO2lmKGhIKHIpKXtsZXQgbz1OdW1iZXIocik7cmV0dXJuIG88OTAwNzE5OTI1NDc0MDk5MT9vOnJ9cmV0dXJuIHJ9LHRoaXMuc29ydERhdGE9KGUsaSk9PntsZXQgcj1pLmFjdGl2ZSxvPWkuZGlyZWN0aW9uO3JldHVybiByJiYiIiE9bz9lLnNvcnQoKHMsYSk9PntsZXQgbD10aGlzLnNvcnRpbmdEYXRhQWNjZXNzb3IocyxyKSxjPXRoaXMuc29ydGluZ0RhdGFBY2Nlc3NvcihhLHIpLHU9dHlwZW9mIGwsZD10eXBlb2YgYzt1IT09ZCYmKCJudW1iZXIiPT09dSYmKGwrPSIiKSwibnVtYmVyIj09PWQmJihjKz0iIikpO2xldCBwPTA7cmV0dXJuIG51bGwhPWwmJm51bGwhPWM/bD5jP3A9MTpsPGMmJihwPS0xKTpudWxsIT1sP3A9MTpudWxsIT1jJiYocD0tMSkscCooImFzYyI9PW8/MTotMSl9KTplfSx0aGlzLmZpbHRlclByZWRpY2F0ZT0oZSxpKT0+e2xldCByPU9iamVjdC5rZXlzKGUpLnJlZHVjZSgocyxhKT0+cytlW2FdKyJcdTI1ZWMiLCIiKS50b0xvd2VyQ2FzZSgpLG89aS50cmltKCkudG9Mb3dlckNhc2UoKTtyZXR1cm4tMSE9ci5pbmRleE9mKG8pfSx0aGlzLl9kYXRhPW5ldyBocih0KSx0aGlzLl91cGRhdGVDaGFuZ2VTdWJzY3JpcHRpb24oKX1nZXQgZGF0YSgpe3JldHVybiB0aGlzLl9kYXRhLnZhbHVlfXNldCBkYXRhKHQpe3Q9QXJyYXkuaXNBcnJheSh0KT90OltdLHRoaXMuX2RhdGEubmV4dCh0KSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9ufHx0aGlzLl9maWx0ZXJEYXRhKHQpfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5fZmlsdGVyLnZhbHVlfXNldCBmaWx0ZXIodCl7dGhpcy5fZmlsdGVyLm5leHQodCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fZmlsdGVyRGF0YSh0aGlzLmRhdGEpfWdldCBzb3J0KCl7cmV0dXJuIHRoaXMuX3NvcnR9c2V0IHNvcnQodCl7dGhpcy5fc29ydD10LHRoaXMuX3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpfWdldCBwYWdpbmF0b3IoKXtyZXR1cm4gdGhpcy5fcGFnaW5hdG9yfXNldCBwYWdpbmF0b3IodCl7dGhpcy5fcGFnaW5hdG9yPXQsdGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCl9X3VwZGF0ZUNoYW5nZVN1YnNjcmlwdGlvbigpe2xldCB0PXRoaXMuX3NvcnQ/SnQodGhpcy5fc29ydC5zb3J0Q2hhbmdlLHRoaXMuX3NvcnQuaW5pdGlhbGl6ZWQpOlh0KG51bGwpLGU9dGhpcy5fcGFnaW5hdG9yP0p0KHRoaXMuX3BhZ2luYXRvci5wYWdlLHRoaXMuX2ludGVybmFsUGFnZUNoYW5nZXMsdGhpcy5fcGFnaW5hdG9yLmluaXRpYWxpemVkKTpYdChudWxsKSxyPUx0KFt0aGlzLl9kYXRhLHRoaXMuX2ZpbHRlcl0pLnBpcGUoTCgoW2FdKT0+dGhpcy5fZmlsdGVyRGF0YShhKSkpLG89THQoW3IsdF0pLnBpcGUoTCgoW2FdKT0+dGhpcy5fb3JkZXJEYXRhKGEpKSkscz1MdChbbyxlXSkucGlwZShMKChbYV0pPT50aGlzLl9wYWdlRGF0YShhKSkpO3RoaXMuX3JlbmRlckNoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj1zLnN1YnNjcmliZShhPT50aGlzLl9yZW5kZXJEYXRhLm5leHQoYSkpfV9maWx0ZXJEYXRhKHQpe3JldHVybiB0aGlzLmZpbHRlcmVkRGF0YT1udWxsPT10aGlzLmZpbHRlcnx8IiI9PT10aGlzLmZpbHRlcj90OnQuZmlsdGVyKGU9PnRoaXMuZmlsdGVyUHJlZGljYXRlKGUsdGhpcy5maWx0ZXIpKSx0aGlzLnBhZ2luYXRvciYmdGhpcy5fdXBkYXRlUGFnaW5hdG9yKHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCksdGhpcy5maWx0ZXJlZERhdGF9X29yZGVyRGF0YSh0KXtyZXR1cm4gdGhpcy5zb3J0P3RoaXMuc29ydERhdGEodC5zbGljZSgpLHRoaXMuc29ydCk6dH1fcGFnZURhdGEodCl7aWYoIXRoaXMucGFnaW5hdG9yKXJldHVybiB0O2xldCBlPXRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCp0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZTtyZXR1cm4gdC5zbGljZShlLGUrdGhpcy5wYWdpbmF0b3IucGFnZVNpemUpfV91cGRhdGVQYWdpbmF0b3IodCl7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+e2xldCBlPXRoaXMucGFnaW5hdG9yO2lmKGUmJihlLmxlbmd0aD10LGUucGFnZUluZGV4PjApKXtsZXQgaT1NYXRoLmNlaWwoZS5sZW5ndGgvZS5wYWdlU2l6ZSktMXx8MCxyPU1hdGgubWluKGUucGFnZUluZGV4LGkpO3IhPT1lLnBhZ2VJbmRleCYmKGUucGFnZUluZGV4PXIsdGhpcy5faW50ZXJuYWxQYWdlQ2hhbmdlcy5uZXh0KCkpfX0pfWNvbm5lY3QoKXtyZXR1cm4gdGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbnx8dGhpcy5fdXBkYXRlQ2hhbmdlU3Vic2NyaXB0aW9uKCksdGhpcy5fcmVuZGVyRGF0YX1kaXNjb25uZWN0KCl7dGhpcy5fcmVuZGVyQ2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl9yZW5kZXJDaGFuZ2VzU3Vic2NyaXB0aW9uPW51bGx9fSxKaz1jbGFzcyBleHRlbmRzIFdHe30sREtlPVsiZGlhbG9nUG9wdXAiXSxBS2U9WyJodWVTbGlkZXIiXSxJS2U9WyJhbHBoYVNsaWRlciJdO2Z1bmN0aW9uIFBLZShuLHQpe2lmKDEmbiYmTygwLCJkaXYiKSwyJm4pe2xldCBlPVMoKTtReCgiYXJyb3cgYXJyb3ctIixlLmNwVXNlUG9zaXRpb24sIiIpLFB0KCJ0b3AiLGUuYXJyb3dUb3AsInB4Iil9fWZ1bmN0aW9uIFJLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMjgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQ29sb3JDaGFuZ2UocikpfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uRHJhZ1N0YXJ0KCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25EcmFnRW5kKCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIpKX0pLE8oMSwiZGl2IiwxNCksdigpfWlmKDImbil7bGV0IGU9UygpO1B0KCJiYWNrZ3JvdW5kLWNvbG9yIixlLmh1ZVNsaWRlckNvbG9yKSx5KCJyZ1giLDEpKCJyZ1kiLDEpLEMoMSksUHQoInRvcCIsbnVsbD09ZS5zbGlkZXI/bnVsbDplLnNsaWRlci52LCJweCIpKCJsZWZ0IixudWxsPT1lLnNsaWRlcj9udWxsOmUuc2xpZGVyLnMsInB4Iil9fWZ1bmN0aW9uIE9LZShuLHQpezEmbiYmKEluKCksXygwLCJzdmciLDI5KSxPKDEsInBhdGgiLDMwKSgyLCJwYXRoIiwzMSksdigpKX1mdW5jdGlvbiBrS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7b2UoZSk7bGV0IG89UygpO3JldHVybiBzZShvLm9uQWRkUHJlc2V0Q29sb3IocixvLnNlbGVjdGVkQ29sb3IpKX0pLEEoMSksdigpfWlmKDImbil7bGV0IGU9UygpO0RhKGUuY3BBZGRDb2xvckJ1dHRvbkNsYXNzKSx5KCJkaXNhYmxlZCIsZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGg+PWUuY3BNYXhQcmVzZXRDb2xvcnNMZW5ndGgpLEMoMSksamUoIiAiLGUuY3BBZGRDb2xvckJ1dHRvblRleHQsIiAiKX19ZnVuY3Rpb24gRktlKG4sdCl7MSZuJiZPKDAsImRpdiIsMzMpfWZ1bmN0aW9uIE5LZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5hKX19ZnVuY3Rpb24gTEtlKG4sdCl7MSZuJiYoXygwLCJkaXYiKSxBKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEJLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMzQpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25DeWFuSW5wdXQocikpfSksdigpLF8oMywiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbk1hZ2VudGFJbnB1dChyKSl9KSx2KCksXyg0LCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uWWVsbG93SW5wdXQocikpfSksdigpLF8oNSwiaW5wdXQiLDM2KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoKS5vbkJsYWNrSW5wdXQocikpfSksdigpLEUoNixOS2UsMSwyLCJpbnB1dCIsMzcpLHYoKSxfKDcsImRpdiIsMzUpKDgsImRpdiIpLEEoOSwiQyIpLHYoKSxfKDEwLCJkaXYiKSxBKDExLCJNIiksdigpLF8oMTIsImRpdiIpLEEoMTMsIlkiKSx2KCksXygxNCwiZGl2IiksQSgxNSwiSyIpLHYoKSxFKDE2LExLZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO1B0KCJkaXNwbGF5IiwzIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLEMoMikseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5jKSxDKDEpLHkoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5jbXlrVGV4dD9udWxsOmUuY215a1RleHQubSksQygxKSx5KCJyZyIsMTAwKSgidmFsdWUiLG51bGw9PWUuY215a1RleHQ/bnVsbDplLmNteWtUZXh0LnkpLEMoMSkseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmNteWtUZXh0P251bGw6ZS5jbXlrVGV4dC5rKSxDKDEpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSxDKDEwKSx5KCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIFZLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJyZyIsMSkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5hKX19ZnVuY3Rpb24gSEtlKG4sdCl7MSZuJiYoXygwLCJkaXYiKSxBKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIFVLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNDApKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25IdWVJbnB1dChyKSl9KSx2KCksXygzLCJpbnB1dCIsMzYpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uU2F0dXJhdGlvbklucHV0KHIpKX0pLHYoKSxfKDQsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25MaWdodG5lc3NJbnB1dChyKSl9KSx2KCksRSg1LFZLZSwxLDIsImlucHV0IiwzNyksdigpLF8oNiwiZGl2IiwzNSkoNywiZGl2IiksQSg4LCJIIiksdigpLF8oOSwiZGl2IiksQSgxMCwiUyIpLHYoKSxfKDExLCJkaXYiKSxBKDEyLCJMIiksdigpLEUoMTMsSEtlLDIsMCwiZGl2IiwzOCksdigpKCl9aWYoMiZuKXtsZXQgZT1TKCk7UHQoImRpc3BsYXkiLDIhPT1lLmZvcm1hdD8ibm9uZSI6ImJsb2NrIiksQygyKSx5KCJyZyIsMzYwKSgidmFsdWUiLG51bGw9PWUuaHNsYVRleHQ/bnVsbDplLmhzbGFUZXh0LmgpLEMoMSkseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5zKSxDKDEpLHkoInJnIiwxMDApKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQubCksQygxKSx5KCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCksQyg4KSx5KCJuZ0lmIiwiZGlzYWJsZWQiIT09ZS5jcEFscGhhQ2hhbm5lbCl9fWZ1bmN0aW9uIHpLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImlucHV0IiwzOSksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFscGhhSW5wdXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygyKTt5KCJyZyIsMSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5hKX19ZnVuY3Rpb24gaktlKG4sdCl7MSZuJiYoXygwLCJkaXYiKSxBKDEsIkEiKSx2KCkpfWZ1bmN0aW9uIEdLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNDIpKDEsImRpdiIsMzUpKDIsImlucHV0Iiw0MyksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25SZWRJbnB1dChyKSl9KSx2KCksXygzLCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uR3JlZW5JbnB1dChyKSl9KSx2KCksXyg0LCJpbnB1dCIsNDMpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQWNjZXB0Q29sb3IocikpfSkoIm5ld1ZhbHVlIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uQmx1ZUlucHV0KHIpKX0pLHYoKSxFKDUsektlLDEsMiwiaW5wdXQiLDM3KSx2KCksXyg2LCJkaXYiLDM1KSg3LCJkaXYiKSxBKDgsIlIiKSx2KCksXyg5LCJkaXYiKSxBKDEwLCJHIiksdigpLF8oMTEsImRpdiIpLEEoMTIsIkIiKSx2KCksRSgxMyxqS2UsMiwwLCJkaXYiLDM4KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtQdCgiZGlzcGxheSIsMSE9PWUuZm9ybWF0PyJub25lIjoiYmxvY2siKSxDKDIpLHkoInJnIiwyNTUpKCJ2YWx1ZSIsbnVsbD09ZS5yZ2JhVGV4dD9udWxsOmUucmdiYVRleHQuciksQygxKSx5KCJyZyIsMjU1KSgidmFsdWUiLG51bGw9PWUucmdiYVRleHQ/bnVsbDplLnJnYmFUZXh0LmcpLEMoMSkseSgicmciLDI1NSkoInZhbHVlIixudWxsPT1lLnJnYmFUZXh0P251bGw6ZS5yZ2JhVGV4dC5iKSxDKDEpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKSxDKDgpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gV0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiaW5wdXQiLDM5KSxQKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWxwaGFJbnB1dChyKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKDIpO3koInJnIiwxKSgidmFsdWUiLGUuaGV4QWxwaGEpfX1mdW5jdGlvbiBxS2Uobix0KXsxJm4mJihfKDAsImRpdiIpLEEoMSwiQSIpLHYoKSl9ZnVuY3Rpb24gWUtlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw0NCkoMSwiZGl2IiwzNSkoMiwiaW5wdXQiLDQ1KSxQKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25IZXhJbnB1dChudWxsKSl9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25IZXhJbnB1dChyKSl9KSx2KCksRSgzLFdLZSwxLDIsImlucHV0IiwzNyksdigpLF8oNCwiZGl2IiwzNSkoNSwiZGl2IiksQSg2LCJIZXgiKSx2KCksRSg3LHFLZSwyLDAsImRpdiIsMzgpLHYoKSgpfWlmKDImbil7bGV0IGU9UygpO1B0KCJkaXNwbGF5IiwwIT09ZS5mb3JtYXQ/Im5vbmUiOiJibG9jayIpLGV0KCJoZXgtYWxwaGEiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksQygyKSx5KCJ2YWx1ZSIsZS5oZXhUZXh0KSxDKDEpLHkoIm5nSWYiLCJmb3JjZWQiPT09ZS5jcEFscGhhQ2hhbm5lbCksQyg0KSx5KCJuZ0lmIiwiZm9yY2VkIj09PWUuY3BBbHBoYUNoYW5uZWwpfX1mdW5jdGlvbiBYS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJpbnB1dCIsMzkpLFAoImtleXVwLmVudGVyIixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygyKS5vbkFjY2VwdENvbG9yKHIpKX0pKCJuZXdWYWx1ZSIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25BbHBoYUlucHV0KHIpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoMik7eSgicmciLDEpKCJ2YWx1ZSIsbnVsbD09ZS5oc2xhVGV4dD9udWxsOmUuaHNsYVRleHQuYSl9fWZ1bmN0aW9uIFFLZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsNDYpKDEsImRpdiIsMzUpKDIsImlucHV0IiwzNiksUCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25BY2NlcHRDb2xvcihyKSl9KSgibmV3VmFsdWUiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25WYWx1ZUlucHV0KHIpKX0pLHYoKSxFKDMsWEtlLDEsMiwiaW5wdXQiLDM3KSx2KCksXyg0LCJkaXYiLDM1KSg1LCJkaXYiKSxBKDYsIlYiKSx2KCksXyg3LCJkaXYiKSxBKDgsIkEiKSx2KCkoKSgpfWlmKDImbil7bGV0IGU9UygpO0MoMikseSgicmciLDEwMCkoInZhbHVlIixudWxsPT1lLmhzbGFUZXh0P251bGw6ZS5oc2xhVGV4dC5sKSxDKDEpLHkoIm5nSWYiLCJkaXNhYmxlZCIhPT1lLmNwQWxwaGFDaGFubmVsKX19ZnVuY3Rpb24gS0tlKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw0NykoMSwic3BhbiIsNDgpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25Gb3JtYXRUb2dnbGUoLTEpKX0pLHYoKSxfKDIsInNwYW4iLDQ4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLm9uRm9ybWF0VG9nZ2xlKDEpKX0pLHYoKSgpfX1mdW5jdGlvbiBaS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJzcGFuIiw1NSksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMykub25SZW1vdmVQcmVzZXRDb2xvcihyLG8pKX0pLHYoKX0yJm4mJkRhKFMoNCkuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzKX1mdW5jdGlvbiBKS2Uobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDUzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMykuc2V0Q29sb3JGcm9tU3RyaW5nKG8pKX0pLEUoMSxaS2UsMSwzLCJzcGFuIiw1NCksdigpfWlmKDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDMpO1B0KCJiYWNrZ3JvdW5kLWNvbG9yIixlKSxDKDEpLHkoIm5nSWYiLGkuY3BBZGRDb2xvckJ1dHRvbil9fWZ1bmN0aW9uICRLZShuLHQpe2lmKDEmbiYmKF8oMCwiZGl2IiksRSgxLEpLZSwyLDMsImRpdiIsNTIpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0RhKGUuY3BQcmVzZXRDb2xvcnNDbGFzcyksQygxKSx5KCJuZ0Zvck9mIixlLmNwUHJlc2V0Q29sb3JzKX19ZnVuY3Rpb24gZVplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0RhKGUuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyksQygxKSx5dChlLmNwUHJlc2V0RW1wdHlNZXNzYWdlKX19ZnVuY3Rpb24gdFplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDQ5KSxPKDEsImhyIiksXygyLCJkaXYiLDUwKSxBKDMpLHYoKSxFKDQsJEtlLDIsNCwiZGl2Iiw1MSksRSg1LGVaZSwyLDQsImRpdiIsNTEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygzKSx5dChlLmNwUHJlc2V0TGFiZWwpLEMoMSkseSgibmdJZiIsbnVsbD09ZS5jcFByZXNldENvbG9ycz9udWxsOmUuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKSxDKDEpLHkoIm5nSWYiLCEobnVsbCE9ZS5jcFByZXNldENvbG9ycyYmZS5jcFByZXNldENvbG9ycy5sZW5ndGgpJiZlLmNwQWRkQ29sb3JCdXR0b24pfX1mdW5jdGlvbiBuWmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDU4KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIG9lKGUpLHNlKFMoMikub25DYW5jZWxDb2xvcihyKSl9KSxBKDEpLHYoKX1pZigyJm4pe2xldCBlPVMoMik7RGEoZS5jcENhbmNlbEJ1dHRvbkNsYXNzKSxDKDEpLHl0KGUuY3BDYW5jZWxCdXR0b25UZXh0KX19ZnVuY3Rpb24gaVplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiYnV0dG9uIiw1OCksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKDIpLm9uQWNjZXB0Q29sb3IocikpfSksQSgxKSx2KCl9aWYoMiZuKXtsZXQgZT1TKDIpO0RhKGUuY3BPS0J1dHRvbkNsYXNzKSxDKDEpLHl0KGUuY3BPS0J1dHRvblRleHQpfX1mdW5jdGlvbiByWmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsNTYpLEUoMSxuWmUsMiw0LCJidXR0b24iLDU3KSxFKDIsaVplLDIsNCwiYnV0dG9uIiw1NyksdigpKSwyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm5nSWYiLGUuY3BDYW5jZWxCdXR0b24pLEMoMSkseSgibmdJZiIsZS5jcE9LQnV0dG9uKX19ZnVuY3Rpb24gb1plKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBzWmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsNTkpLEUoMSxvWmUsMSwwLCJuZy1jb250YWluZXIiLDYwKSx2KCkpLDImbil7bGV0IGU9UygpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS5jcEV4dHJhVGVtcGxhdGUpfX12YXIgd3M9KCgpPT4oZnVuY3Rpb24obil7bltuLkhFWD0wXT0iSEVYIixuW24uUkdCQT0xXT0iUkdCQSIsbltuLkhTTEE9Ml09IkhTTEEiLG5bbi5DTVlLPTNdPSJDTVlLIn0od3N8fCh3cz17fSkpLHdzKSkoKSxodT1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLnI9dCx0aGlzLmc9ZSx0aGlzLmI9aSx0aGlzLmE9cn19LFJiPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0sUnA9Y2xhc3N7Y29uc3RydWN0b3IodCxlLGkscil7dGhpcy5oPXQsdGhpcy5zPWUsdGhpcy5sPWksdGhpcy5hPXJ9fSx0MD1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyLG89MSl7dGhpcy5jPXQsdGhpcy5tPWUsdGhpcy55PWksdGhpcy5rPXIsdGhpcy5hPW99fSxjWmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMubmV3VmFsdWU9bmV3IEd9aW5wdXRDaGFuZ2UoZSl7bGV0IGk9ZS50YXJnZXQudmFsdWU7aWYodm9pZCAwPT09dGhpcy5yZyl0aGlzLm5ld1ZhbHVlLmVtaXQoaSk7ZWxzZXtsZXQgcj1wYXJzZUZsb2F0KGkpO3RoaXMubmV3VmFsdWUuZW1pdCh7djpyLHJnOnRoaXMucmd9KX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyIiLCJ0ZXh0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmlucHV0Q2hhbmdlKG8pfSl9LGlucHV0czp7cmc6InJnIix0ZXh0OiJ0ZXh0In0sb3V0cHV0czp7bmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSx1WmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLmVsUmVmPWUsdGhpcy5kcmFnRW5kPW5ldyBHLHRoaXMuZHJhZ1N0YXJ0PW5ldyBHLHRoaXMubmV3VmFsdWU9bmV3IEcsdGhpcy5saXN0ZW5lck1vdmU9aT0+dGhpcy5tb3ZlKGkpLHRoaXMubGlzdGVuZXJTdG9wPSgpPT50aGlzLnN0b3AoKX1tb3VzZURvd24oZSl7dGhpcy5zdGFydChlKX10b3VjaFN0YXJ0KGUpe3RoaXMuc3RhcnQoZSl9bW92ZShlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDdXJzb3IoZSl9c3RhcnQoZSl7dGhpcy5zZXRDdXJzb3IoZSksZS5zdG9wUHJvcGFnYXRpb24oKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIix0aGlzLmxpc3RlbmVyU3RvcCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMubGlzdGVuZXJNb3ZlKSx0aGlzLmRyYWdTdGFydC5lbWl0KCl9c3RvcCgpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHRoaXMubGlzdGVuZXJTdG9wKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsdGhpcy5saXN0ZW5lclN0b3ApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5saXN0ZW5lck1vdmUpLHRoaXMuZHJhZ0VuZC5lbWl0KCl9Z2V0WChlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVg/ZS5wYWdlWDplLnRvdWNoZXNbMF0ucGFnZVgpLWkubGVmdC13aW5kb3cucGFnZVhPZmZzZXR9Z2V0WShlKXtsZXQgaT10aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuKHZvaWQgMCE9PWUucGFnZVk/ZS5wYWdlWTplLnRvdWNoZXNbMF0ucGFnZVkpLWkudG9wLXdpbmRvdy5wYWdlWU9mZnNldH1zZXRDdXJzb3IoZSl7bGV0IGk9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoLHI9dGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxvPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRYKGUpLGkpKSxzPU1hdGgubWF4KDAsTWF0aC5taW4odGhpcy5nZXRZKGUpLHIpKTt2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHtzOm8vaSx2OjEtcy9yLHJnWDp0aGlzLnJnWCxyZ1k6dGhpcy5yZ1l9KTp2b2lkIDA9PT10aGlzLnJnWCYmdm9pZCAwIT09dGhpcy5yZ1k/dGhpcy5uZXdWYWx1ZS5lbWl0KHt2OnMvcixyZ1k6dGhpcy5yZ1l9KTp2b2lkIDAhPT10aGlzLnJnWCYmdm9pZCAwPT09dGhpcy5yZ1kmJnRoaXMubmV3VmFsdWUuZW1pdCh7djpvL2kscmdYOnRoaXMucmdYfSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oUmUpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwic2xpZGVyIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgibW91c2Vkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gaS5tb3VzZURvd24obyl9KSgidG91Y2hzdGFydCIsZnVuY3Rpb24obyl7cmV0dXJuIGkudG91Y2hTdGFydChvKX0pfSxpbnB1dHM6e3JnWDoicmdYIixyZ1k6InJnWSIsc2xpZGVyOiJzbGlkZXIifSxvdXRwdXRzOntkcmFnRW5kOiJkcmFnRW5kIixkcmFnU3RhcnQ6ImRyYWdTdGFydCIsbmV3VmFsdWU6Im5ld1ZhbHVlIn19KSxufSkoKSwkaz1jbGFzc3tjb25zdHJ1Y3Rvcih0LGUsaSxyKXt0aGlzLmg9dCx0aGlzLnM9ZSx0aGlzLnY9aSx0aGlzLmE9cn19LGVGPWNsYXNze2NvbnN0cnVjdG9yKHQsZSxpLHIpe3RoaXMuaD10LHRoaXMucz1lLHRoaXMudj1pLHRoaXMuYT1yfX0scUc9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuYWN0aXZlPW51bGx9c2V0QWN0aXZlKGUpe3RoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZSE9PWUmJiJpbmxpbmUiIT09dGhpcy5hY3RpdmUuY3BEaWFsb2dEaXNwbGF5JiZ0aGlzLmFjdGl2ZS5jbG9zZURpYWxvZygpLHRoaXMuYWN0aXZlPWV9aHN2YTJoc2xhKGUpe2xldCBpPWUuaCxyPWUucyxvPWUudixzPWUuYTtpZigwPT09bylyZXR1cm4gbmV3IFJwKGksMCwwLHMpO2lmKDA9PT1yJiYxPT09bylyZXR1cm4gbmV3IFJwKGksMSwxLHMpO3tsZXQgYT1vKigyLXIpLzI7cmV0dXJuIG5ldyBScChpLG8qci8oMS1NYXRoLmFicygyKmEtMSkpLGEscyl9fWhzbGEyaHN2YShlKXtsZXQgaT1NYXRoLm1pbihlLmgsMSkscj1NYXRoLm1pbihlLnMsMSksbz1NYXRoLm1pbihlLmwsMSkscz1NYXRoLm1pbihlLmEsMSk7aWYoMD09PW8pcmV0dXJuIG5ldyBSYihpLDAsMCxzKTt7bGV0IGE9bytyKigxLU1hdGguYWJzKDIqby0xKSkvMjtyZXR1cm4gbmV3IFJiKGksMiooYS1vKS9hLGEscyl9fWhzdmFUb1JnYmEoZSl7bGV0IGkscixvLHM9ZS5oLGE9ZS5zLGw9ZS52LGM9ZS5hLHU9TWF0aC5mbG9vcig2KnMpLGQ9NipzLXUscD1sKigxLWEpLGg9bCooMS1kKmEpLGY9bCooMS0oMS1kKSphKTtzd2l0Y2godSU2KXtjYXNlIDA6aT1sLHI9ZixvPXA7YnJlYWs7Y2FzZSAxOmk9aCxyPWwsbz1wO2JyZWFrO2Nhc2UgMjppPXAscj1sLG89ZjticmVhaztjYXNlIDM6aT1wLHI9aCxvPWw7YnJlYWs7Y2FzZSA0Omk9ZixyPXAsbz1sO2JyZWFrO2Nhc2UgNTppPWwscj1wLG89aDticmVhaztkZWZhdWx0Omk9MCxyPTAsbz0wfXJldHVybiBuZXcgaHUoaSxyLG8sYyl9Y215a1RvUmdiKGUpe3JldHVybiBuZXcgaHUoKDEtZS5jKSooMS1lLmspLCgxLWUubSkqKDEtZS5rKSwoMS1lLnkpKigxLWUuayksZS5hKX1yZ2JhVG9DbXlrKGUpe2xldCBpPTEtTWF0aC5tYXgoZS5yLGUuZyxlLmIpO3JldHVybiAxPT09aT9uZXcgdDAoMCwwLDAsMSxlLmEpOm5ldyB0MCgoMS1lLnItaSkvKDEtaSksKDEtZS5nLWkpLygxLWkpLCgxLWUuYi1pKS8oMS1pKSxpLGUuYSl9cmdiYVRvSHN2YShlKXtsZXQgaSxyLG89TWF0aC5taW4oZS5yLDEpLHM9TWF0aC5taW4oZS5nLDEpLGE9TWF0aC5taW4oZS5iLDEpLGw9TWF0aC5taW4oZS5hLDEpLGM9TWF0aC5tYXgobyxzLGEpLHU9TWF0aC5taW4obyxzLGEpLGQ9YyxwPWMtdTtpZihyPTA9PT1jPzA6cC9jLGM9PT11KWk9MDtlbHNle3N3aXRjaChjKXtjYXNlIG86aT0ocy1hKS9wKyhzPGE/NjowKTticmVhaztjYXNlIHM6aT0oYS1vKS9wKzI7YnJlYWs7Y2FzZSBhOmk9KG8tcykvcCs0O2JyZWFrO2RlZmF1bHQ6aT0wfWkvPTZ9cmV0dXJuIG5ldyBSYihpLHIsZCxsKX1yZ2JhVG9IZXgoZSxpKXtsZXQgcj0iIyIrKDE2Nzc3MjE2fGUucjw8MTZ8ZS5nPDw4fGUuYikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtyZXR1cm4gaSYmKHIrPSgyNTZ8TWF0aC5yb3VuZCgyNTUqZS5hKSkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSkscn1ub3JtYWxpemVDTVlLKGUpe3JldHVybiBuZXcgdDAoZS5jLzEwMCxlLm0vMTAwLGUueS8xMDAsZS5rLzEwMCxlLmEpfWRlbm9ybWFsaXplQ01ZSyhlKXtyZXR1cm4gbmV3IHQwKE1hdGguZmxvb3IoMTAwKmUuYyksTWF0aC5mbG9vcigxMDAqZS5tKSxNYXRoLmZsb29yKDEwMCplLnkpLE1hdGguZmxvb3IoMTAwKmUuayksZS5hKX1kZW5vcm1hbGl6ZVJHQkEoZSl7cmV0dXJuIG5ldyBodShNYXRoLnJvdW5kKDI1NSplLnIpLE1hdGgucm91bmQoMjU1KmUuZyksTWF0aC5yb3VuZCgyNTUqZS5iKSxlLmEpfXN0cmluZ1RvSHN2YShlPSIiLGk9ITEpe2xldCByPW51bGw7ZT0oZXx8IiIpLnRvTG93ZXJDYXNlKCk7bGV0IG89W3tyZTovKHJnYilhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKiU/LFxzKihcZHsxLDN9KVxzKiU/KD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHMpe3JldHVybiBuZXcgaHUocGFyc2VJbnQoc1syXSwxMCkvMjU1LHBhcnNlSW50KHNbM10sMTApLzI1NSxwYXJzZUludChzWzRdLDEwKS8yNTUsaXNOYU4ocGFyc2VGbG9hdChzWzVdKSk/MTpwYXJzZUZsb2F0KHNbNV0pKX19LHtyZTovKGhzbClhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KSVccyosXHMqKFxkezEsM30pJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IFJwKHBhcnNlSW50KHNbMl0sMTApLzM2MCxwYXJzZUludChzWzNdLDEwKS8xMDAscGFyc2VJbnQoc1s0XSwxMCkvMTAwLGlzTmFOKHBhcnNlRmxvYXQoc1s1XSkpPzE6cGFyc2VGbG9hdChzWzVdKSl9fV07by5wdXNoKGk/e3JlOi8jKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KT8kLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IGh1KHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LHBhcnNlSW50KHNbNF18fCJGRiIsMTYpLzI1NSl9fTp7cmU6LyMoW2EtZkEtRjAtOV17Mn0pKFthLWZBLUYwLTldezJ9KShbYS1mQS1GMC05XXsyfSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IGh1KHBhcnNlSW50KHNbMV0sMTYpLzI1NSxwYXJzZUludChzWzJdLDE2KS8yNTUscGFyc2VJbnQoc1szXSwxNikvMjU1LDEpfX0pLG8ucHVzaCh7cmU6LyMoW2EtZkEtRjAtOV0pKFthLWZBLUYwLTldKShbYS1mQS1GMC05XSkkLyxwYXJzZTpmdW5jdGlvbihzKXtyZXR1cm4gbmV3IGh1KHBhcnNlSW50KHNbMV0rc1sxXSwxNikvMjU1LHBhcnNlSW50KHNbMl0rc1syXSwxNikvMjU1LHBhcnNlSW50KHNbM10rc1szXSwxNikvMjU1LDEpfX0pO2ZvcihsZXQgcyBpbiBvKWlmKG8uaGFzT3duUHJvcGVydHkocykpe2xldCBhPW9bc10sbD1hLnJlLmV4ZWMoZSksYz1sJiZhLnBhcnNlKGwpO2lmKGMpcmV0dXJuIGMgaW5zdGFuY2VvZiBodT9yPXRoaXMucmdiYVRvSHN2YShjKTpjIGluc3RhbmNlb2YgUnAmJihyPXRoaXMuaHNsYTJoc3ZhKGMpKSxyfXJldHVybiByfW91dHB1dEZvcm1hdChlLGkscil7c3dpdGNoKCJhdXRvIj09PWkmJihpPWUuYTwxPyJyZ2JhIjoiaGV4IiksaSl7Y2FzZSJoc2xhIjpsZXQgbz10aGlzLmhzdmEyaHNsYShlKSxzPW5ldyBScChNYXRoLnJvdW5kKDM2MCpvLmgpLE1hdGgucm91bmQoMTAwKm8ucyksTWF0aC5yb3VuZCgxMDAqby5sKSxNYXRoLnJvdW5kKDEwMCpvLmEpLzEwMCk7cmV0dXJuIGUuYTwxfHwiYWx3YXlzIj09PXI/ImhzbGEoIitzLmgrIiwiK3MucysiJSwiK3MubCsiJSwiK3MuYSsiKSI6ImhzbCgiK3MuaCsiLCIrcy5zKyIlLCIrcy5sKyIlKSI7Y2FzZSJyZ2JhIjpsZXQgYT10aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpO3JldHVybiBlLmE8MXx8ImFsd2F5cyI9PT1yPyJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIrTWF0aC5yb3VuZCgxMDAqYS5hKS8xMDArIikiOiJyZ2IoIithLnIrIiwiK2EuZysiLCIrYS5iKyIpIjtkZWZhdWx0OmxldCBsPSJhbHdheXMiPT09cnx8ImZvcmNlZCI9PT1yO3JldHVybiB0aGlzLnJnYmFUb0hleCh0aGlzLmRlbm9ybWFsaXplUkdCQSh0aGlzLmhzdmFUb1JnYmEoZSkpLGwpfX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksaWhlPXR5cGVvZiB3aW5kb3c8InUiJiYib250b3VjaHN0YXJ0ImluIHdpbmRvdyxkWmU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5uZ1pvbmU9ZSx0aGlzLmVsUmVmPWksdGhpcy5jZFJlZj1yLHRoaXMuZG9jdW1lbnQ9byx0aGlzLnBsYXRmb3JtSWQ9cyx0aGlzLnNlcnZpY2U9YSx0aGlzLmlzSUUxMD0hMSx0aGlzLmRpYWxvZ0Fycm93U2l6ZT0xMCx0aGlzLmRpYWxvZ0Fycm93T2Zmc2V0PTE1LHRoaXMuZGlhbG9nSW5wdXRGaWVsZHM9W3dzLkhFWCx3cy5SR0JBLHdzLkhTTEEsd3MuQ01ZS10sdGhpcy51c2VSb290Vmlld0NvbnRhaW5lcj0hMSx0aGlzLmV5ZURyb3BwZXJTdXBwb3J0ZWQ9WEQodGhpcy5wbGF0Zm9ybUlkKSYmIkV5ZURyb3BwZXIiaW4gdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlld31oYW5kbGVFc2MoZSl7dGhpcy5zaG93JiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMub25DYW5jZWxDb2xvcihlKX1oYW5kbGVFbnRlcihlKXt0aGlzLnNob3cmJiJwb3B1cCI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5vbkFjY2VwdENvbG9yKGUpfW5nT25Jbml0KCl7dGhpcy5zbGlkZXI9bmV3ICRrKDAsMCwwLDApLHRoaXMuc2xpZGVyRGltTWF4PW5ldyBlRih0aGlzLmh1ZVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDAsdGhpcy5jcFdpZHRoLDEzMCx0aGlzLmFscGhhU2xpZGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGh8fDE0MCksdGhpcy5mb3JtYXQ9dGhpcy5jcENteWtFbmFibGVkP3dzLkNNWUs6InJnYmEiPT09dGhpcy5jcE91dHB1dEZvcm1hdD93cy5SR0JBOiJoc2xhIj09PXRoaXMuY3BPdXRwdXRGb3JtYXQ/d3MuSFNMQTp3cy5IRVgsdGhpcy5saXN0ZW5lck1vdXNlRG93bj1yPT57dGhpcy5vbk1vdXNlRG93bihyKX0sdGhpcy5saXN0ZW5lclJlc2l6ZT0oKT0+e3RoaXMub25SZXNpemUoKX0sdGhpcy5vcGVuRGlhbG9nKHRoaXMuaW5pdGlhbENvbG9yLCExKX1uZ09uRGVzdHJveSgpe3RoaXMuY2xvc2VEaWFsb2coKX1uZ0FmdGVyVmlld0luaXQoKXsyMzA9PT10aGlzLmNwV2lkdGgmJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXl8fCh0aGlzLnNsaWRlckRpbU1heD1uZXcgZUYodGhpcy5odWVTbGlkZXIubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aHx8MTQwLHRoaXMuY3BXaWR0aCwxMzAsdGhpcy5hbHBoYVNsaWRlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRofHwxNDApLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEpLHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX1vcGVuRGlhbG9nKGUsaT0hMCl7dGhpcy5zZXJ2aWNlLnNldEFjdGl2ZSh0aGlzKSx0aGlzLndpZHRofHwodGhpcy5jcFdpZHRoPXRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKSx0aGlzLmhlaWdodHx8KHRoaXMuaGVpZ2h0PTMyMCksdGhpcy5zZXRJbml0aWFsQ29sb3IoZSksdGhpcy5zZXRDb2xvckZyb21TdHJpbmcoZSxpKSx0aGlzLm9wZW5Db2xvclBpY2tlcigpfWNsb3NlRGlhbG9nKCl7dGhpcy5jbG9zZUNvbG9yUGlja2VyKCl9c2V0dXBEaWFsb2coZSxpLHIsbyxzLGEsbCxjLHUsZCxwLGgsZixtLHgsZyxiLEQsVCxrLFoseixmZSx1ZSxoZSx3LEYscSxLLGRlLFksYWUsbGUsSWUsdmUsRGUsbnQsZ3Qpe3RoaXMuc2V0SW5pdGlhbENvbG9yKHIpLHRoaXMuc2V0Q29sb3JNb2RlKGMpLHRoaXMuaXNJRTEwPTEwPT09ZnVuY3Rpb24oKXtsZXQgbj0iIjt0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmKG49bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKTtsZXQgdD1uLmluZGV4T2YoIm1zaWUgIik7cmV0dXJuIHQ+MCYmcGFyc2VJbnQobi5zdWJzdHJpbmcodCs1LG4uaW5kZXhPZigiLiIsdCkpLDEwKX0oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlPWUsdGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmPWksdGhpcy5jcERpc2FibGVJbnB1dD1oLHRoaXMuY3BDbXlrRW5hYmxlZD11LHRoaXMuY3BBbHBoYUNoYW5uZWw9ZCx0aGlzLmNwT3V0cHV0Rm9ybWF0PXAsdGhpcy5jcERpYWxvZ0Rpc3BsYXk9YSx0aGlzLmNwSWdub3JlZEVsZW1lbnRzPWYsdGhpcy5jcFNhdmVDbGlja091dHNpZGU9bSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGU9eCx0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyPWcsdGhpcy53aWR0aD10aGlzLmNwV2lkdGg9cGFyc2VJbnQobywxMCksdGhpcy5oZWlnaHQ9dGhpcy5jcEhlaWdodD1wYXJzZUludChzLDEwKSx0aGlzLmNwUG9zaXRpb249Yix0aGlzLmNwUG9zaXRpb25PZmZzZXQ9cGFyc2VJbnQoRCwxMCksdGhpcy5jcE9LQnV0dG9uPXcsdGhpcy5jcE9LQnV0dG9uVGV4dD1xLHRoaXMuY3BPS0J1dHRvbkNsYXNzPUYsdGhpcy5jcENhbmNlbEJ1dHRvbj1LLHRoaXMuY3BDYW5jZWxCdXR0b25UZXh0PVksdGhpcy5jcENhbmNlbEJ1dHRvbkNsYXNzPWRlLHRoaXMuY3BFeWVEcm9wcGVyPURlLHRoaXMuZmFsbGJhY2tDb2xvcj1sfHwiI2ZmZiIsdGhpcy5zZXRQcmVzZXRDb25maWcoayxaKSx0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3M9eix0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoPWZlLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2U9dWUsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzPWhlLHRoaXMuY3BBZGRDb2xvckJ1dHRvbj1hZSx0aGlzLmNwQWRkQ29sb3JCdXR0b25UZXh0PUllLHRoaXMuY3BBZGRDb2xvckJ1dHRvbkNsYXNzPWxlLHRoaXMuY3BSZW1vdmVDb2xvckJ1dHRvbkNsYXNzPXZlLHRoaXMuY3BUcmlnZ2VyRWxlbWVudD1udCx0aGlzLmNwRXh0cmFUZW1wbGF0ZT1ndCxUfHwodGhpcy5kaWFsb2dBcnJvd09mZnNldD0wKSwiaW5saW5lIj09PWEmJih0aGlzLmRpYWxvZ0Fycm93U2l6ZT0wLHRoaXMuZGlhbG9nQXJyb3dPZmZzZXQ9MCksImhleCI9PT1wJiYiYWx3YXlzIiE9PWQmJiJmb3JjZWQiIT09ZCYmKHRoaXMuY3BBbHBoYUNoYW5uZWw9ImRpc2FibGVkIil9c2V0Q29sb3JNb2RlKGUpe3N3aXRjaChlLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKSl7Y2FzZSIxIjpjYXNlIkMiOmNhc2UiQ09MT1IiOmRlZmF1bHQ6dGhpcy5jcENvbG9yTW9kZT0xO2JyZWFrO2Nhc2UiMiI6Y2FzZSJHIjpjYXNlIkdSQVlTQ0FMRSI6dGhpcy5jcENvbG9yTW9kZT0yO2JyZWFrO2Nhc2UiMyI6Y2FzZSJQIjpjYXNlIlBSRVNFVFMiOnRoaXMuY3BDb2xvck1vZGU9M319c2V0SW5pdGlhbENvbG9yKGUpe3RoaXMuaW5pdGlhbENvbG9yPWV9c2V0UHJlc2V0Q29uZmlnKGUsaSl7dGhpcy5jcFByZXNldExhYmVsPWUsdGhpcy5jcFByZXNldENvbG9ycz1pfXNldENvbG9yRnJvbVN0cmluZyhlLGk9ITAscj0hMCl7bGV0IG87ImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWw/KG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCEwKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSkpOm89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YShlLCExKSwhbyYmIXRoaXMuaHN2YSYmKG89dGhpcy5zZXJ2aWNlLnN0cmluZ1RvSHN2YSh0aGlzLmZhbGxiYWNrQ29sb3IsITEpKSxvJiYodGhpcy5oc3ZhPW8sdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLCJoZXgiPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmImRpc2FibGVkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJih0aGlzLmhzdmEuYT0xKSx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKGkscikpfW9uUmVzaXplKCl7ImZpeGVkIj09PXRoaXMucG9zaXRpb24/dGhpcy5zZXREaWFsb2dQb3NpdGlvbigpOiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uRHJhZ0VuZChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdFbmQoe3NsaWRlcjplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkRyYWdTdGFydChlKXt0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckRyYWdTdGFydCh7c2xpZGVyOmUsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uTW91c2VEb3duKGUpe3RoaXMuc2hvdyYmIXRoaXMuaXNJRTEwJiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJmUudGFyZ2V0IT09dGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQmJiF0aGlzLmlzRGVzY2VuZGFudCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYhdGhpcy5pc0Rlc2NlbmRhbnQodGhpcy5kaXJlY3RpdmVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsZS50YXJnZXQpJiYwPT09dGhpcy5jcElnbm9yZWRFbGVtZW50cy5maWx0ZXIoaT0+aT09PWUudGFyZ2V0KS5sZW5ndGgmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY3BTYXZlQ2xpY2tPdXRzaWRlP3RoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKToodGhpcy5oc3ZhPW51bGwsdGhpcy5zZXRDb2xvckZyb21TdHJpbmcodGhpcy5pbml0aWFsQ29sb3IsITEpLHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5pbml0aWFsQ29sb3IpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JDYW5jZWxlZCgpKSx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGUmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfSl9b25BY2NlcHRDb2xvcihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMub3V0cHV0Q29sb3ImJnRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuY29sb3JTZWxlY3RlZCh0aGlzLm91dHB1dENvbG9yKSwicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuY2xvc2VDb2xvclBpY2tlcigpfW9uQ2FuY2VsQ29sb3IoZSl7dGhpcy5oc3ZhPW51bGwsZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2FuY2VsZWQoKSx0aGlzLnNldENvbG9yRnJvbVN0cmluZyh0aGlzLmluaXRpYWxDb2xvciwhMCksInBvcHVwIj09PXRoaXMuY3BEaWFsb2dEaXNwbGF5JiYodGhpcy5jcENteWtFbmFibGVkJiZ0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNteWtDaGFuZ2VkKHRoaXMuY215a0NvbG9yKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmNvbG9yQ2hhbmdlZCh0aGlzLmluaXRpYWxDb2xvciwhMCksdGhpcy5jbG9zZUNvbG9yUGlja2VyKCkpfW9uRXllRHJvcHBlcigpe3RoaXMuZXllRHJvcHBlclN1cHBvcnRlZCYmKG5ldyB3aW5kb3cuRXllRHJvcHBlcikub3BlbigpLnRoZW4oaT0+e3RoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGkuc1JHQkhleCwhMCl9KX1vbkZvcm1hdFRvZ2dsZShlKXtsZXQgaT10aGlzLmRpYWxvZ0lucHV0RmllbGRzLmxlbmd0aC0odGhpcy5jcENteWtFbmFibGVkPzA6MSkscj0oKHRoaXMuZGlhbG9nSW5wdXRGaWVsZHMuaW5kZXhPZih0aGlzLmZvcm1hdCkrZSklaStpKSVpO3RoaXMuZm9ybWF0PXRoaXMuZGlhbG9nSW5wdXRGaWVsZHNbcl19b25Db2xvckNoYW5nZShlKXt0aGlzLmhzdmEucz1lLnMvZS5yZ1gsdGhpcy5oc3ZhLnY9ZS52L2UucmdZLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoibGlnaHRuZXNzIix2YWx1ZTp0aGlzLmhzdmEudixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5zbGlkZXJDaGFuZ2VkKHtzbGlkZXI6InNhdHVyYXRpb24iLHZhbHVlOnRoaXMuaHN2YS5zLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkh1ZUNoYW5nZShlKXt0aGlzLmhzdmEuaD1lLnYvZS5yZ1gsdGhpcy5zbGlkZXJIPXRoaXMuaHN2YS5oLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiaHVlIix2YWx1ZTp0aGlzLmhzdmEuaCxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25WYWx1ZUNoYW5nZShlKXt0aGlzLmhzdmEudj1lLnYvZS5yZ1gsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc2xpZGVyQ2hhbmdlZCh7c2xpZGVyOiJ2YWx1ZSIsdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFDaGFuZ2UoZSl7dGhpcy5oc3ZhLmE9ZS52L2UucmdYLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnNsaWRlckNoYW5nZWQoe3NsaWRlcjoiYWxwaGEiLHZhbHVlOnRoaXMuaHN2YS5hLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkhleElucHV0KGUpe2lmKG51bGw9PT1lKXRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKTtlbHNle2UmJiIjIiE9PWVbMF0mJihlPSIjIitlKTtsZXQgaT0vXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn0pJC9naTsiYWx3YXlzIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwmJihpPS9eIyhbYS1mMC05XXszfXxbYS1mMC05XXs2fXxbYS1mMC05XXs4fSkkL2dpKTtsZXQgcj1pLnRlc3QoZSk7ciYmKGUubGVuZ3RoPDUmJihlPSIjIitlLnN1YnN0cmluZygxKS5zcGxpdCgiIikubWFwKG89Pm8rbykuam9pbigiIikpLCJmb3JjZWQiPT09dGhpcy5jcEFscGhhQ2hhbm5lbCYmKGUrPU1hdGgucm91bmQoMjU1KnRoaXMuaHN2YS5hKS50b1N0cmluZygxNikpLHRoaXMuc2V0Q29sb3JGcm9tU3RyaW5nKGUsITAsITEpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImhleCIsdmFsaWQ6cix2YWx1ZTplLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX19b25SZWRJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpLHI9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO3ImJihpLnI9ZS52L2UucmcsdGhpcy5oc3ZhPXRoaXMuc2VydmljZS5yZ2JhVG9Ic3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoicmVkIix2YWxpZDpyLHZhbHVlOmkucixjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25CbHVlSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5iPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsdWUiLHZhbGlkOnIsdmFsdWU6aS5iLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkdyZWVuSW5wdXQoZSl7bGV0IGk9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5nPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImdyZWVuIix2YWxpZDpyLHZhbHVlOmkuZyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25IdWVJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5oPWUudi9lLnJnLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoiaHVlIix2YWxpZDppLHZhbHVlOnRoaXMuaHN2YS5oLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblZhbHVlSW5wdXQoZSl7bGV0IGk9IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnO2kmJih0aGlzLmhzdmEudj1lLnYvZS5yZyx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoidmFsdWUiLHZhbGlkOmksdmFsdWU6dGhpcy5oc3ZhLnYsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQWxwaGFJbnB1dChlKXtsZXQgaT0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7aSYmKHRoaXMuaHN2YS5hPWUudi9lLnJnLHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJhbHBoYSIsdmFsaWQ6aSx2YWx1ZTp0aGlzLmhzdmEuYSxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25MaWdodG5lc3NJbnB1dChlKXtsZXQgaT10aGlzLnNlcnZpY2UuaHN2YTJoc2xhKHRoaXMuaHN2YSkscj0haXNOYU4oZS52KSYmZS52Pj0wJiZlLnY8PWUucmc7ciYmKGkubD1lLnYvZS5yZyx0aGlzLmhzdmE9dGhpcy5zZXJ2aWNlLmhzbGEyaHN2YShpKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgsdGhpcy51cGRhdGVDb2xvclBpY2tlcigpKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImxpZ2h0bmVzcyIsdmFsaWQ6cix2YWx1ZTppLmwsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uU2F0dXJhdGlvbklucHV0KGUpe2xldCBpPXRoaXMuc2VydmljZS5oc3ZhMmhzbGEodGhpcy5oc3ZhKSxyPSFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZztyJiYoaS5zPWUudi9lLnJnLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UuaHNsYTJoc3ZhKGkpLHRoaXMuc2xpZGVySD10aGlzLmhzdmEuaCx0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCkpLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2UuaW5wdXRDaGFuZ2VkKHtpbnB1dDoic2F0dXJhdGlvbiIsdmFsaWQ6cix2YWx1ZTppLnMsY29sb3I6dGhpcy5vdXRwdXRDb2xvcn0pfW9uQ3lhbklucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay5jPWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJjeWFuIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuYyxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25NYWdlbnRhSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLm09ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6Im1hZ2VudGEiLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay5tLGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vblllbGxvd0lucHV0KGUpeyFpc05hTihlLnYpJiZlLnY+PTAmJmUudjw9ZS5yZyYmKHRoaXMuY215ay55PWUudix0aGlzLnVwZGF0ZUNvbG9yUGlja2VyKCExLCEwLCEwKSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5pbnB1dENoYW5nZWQoe2lucHV0OiJ5ZWxsb3ciLHZhbGlkOiEwLHZhbHVlOnRoaXMuY215ay55LGNvbG9yOnRoaXMub3V0cHV0Q29sb3J9KX1vbkJsYWNrSW5wdXQoZSl7IWlzTmFOKGUudikmJmUudj49MCYmZS52PD1lLnJnJiYodGhpcy5jbXlrLms9ZS52LHRoaXMudXBkYXRlQ29sb3JQaWNrZXIoITEsITAsITApKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLmlucHV0Q2hhbmdlZCh7aW5wdXQ6ImJsYWNrIix2YWxpZDohMCx2YWx1ZTp0aGlzLmNteWsuayxjb2xvcjp0aGlzLm91dHB1dENvbG9yfSl9b25BZGRQcmVzZXRDb2xvcihlLGkpe2Uuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5jcFByZXNldENvbG9ycy5maWx0ZXIocj0+cj09PWkpLmxlbmd0aHx8KHRoaXMuY3BQcmVzZXRDb2xvcnM9dGhpcy5jcFByZXNldENvbG9ycy5jb25jYXQoaSksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5wcmVzZXRDb2xvcnNDaGFuZ2VkKHRoaXMuY3BQcmVzZXRDb2xvcnMpKX1vblJlbW92ZVByZXNldENvbG9yKGUsaSl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNwUHJlc2V0Q29sb3JzPXRoaXMuY3BQcmVzZXRDb2xvcnMuZmlsdGVyKHI9PnIhPT1pKSx0aGlzLmRpcmVjdGl2ZUluc3RhbmNlLnByZXNldENvbG9yc0NoYW5nZWQodGhpcy5jcFByZXNldENvbG9ycyl9b3BlbkNvbG9yUGlja2VyKCl7dGhpcy5zaG93fHwodGhpcy5zaG93PSEwLHRoaXMuaGlkZGVuPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmhpZGRlbj0hMSx0aGlzLnNldERpYWxvZ1Bvc2l0aW9uKCksdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCl9LDApLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCEwKSx0aGlzLmlzSUUxMHx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpaGU/ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5saXN0ZW5lck1vdXNlRG93bik6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLmxpc3RlbmVyTW91c2VEb3duKX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMubGlzdGVuZXJSZXNpemUpKX1jbG9zZUNvbG9yUGlja2VyKCl7dGhpcy5zaG93JiYodGhpcy5zaG93PSExLHRoaXMuZGlyZWN0aXZlSW5zdGFuY2Uuc3RhdGVDaGFuZ2VkKCExKSx0aGlzLmlzSUUxMHx8KGloZT9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLmxpc3RlbmVyTW91c2VEb3duKTpkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMubGlzdGVuZXJNb3VzZURvd24pKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLmxpc3RlbmVyUmVzaXplKSx0aGlzLmNkUmVmLmRlc3Ryb3llZHx8dGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCkpfXVwZGF0ZUNvbG9yUGlja2VyKGU9ITAsaT0hMCxyPSExKXtpZih0aGlzLnNsaWRlckRpbU1heCl7Mj09PXRoaXMuY3BDb2xvck1vZGUmJih0aGlzLmhzdmEucz0wKTtsZXQgbyxzLGEsbD10aGlzLm91dHB1dENvbG9yO2lmKHM9dGhpcy5zZXJ2aWNlLmhzdmEyaHNsYSh0aGlzLmhzdmEpLHRoaXMuY3BDbXlrRW5hYmxlZD8ocj8oYT10aGlzLnNlcnZpY2UuY215a1RvUmdiKHRoaXMuc2VydmljZS5ub3JtYWxpemVDTVlLKHRoaXMuY215aykpLHRoaXMuaHN2YT10aGlzLnNlcnZpY2UucmdiYVRvSHN2YShhKSk6KGE9dGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEodGhpcy5oc3ZhKSx0aGlzLmNteWs9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplQ01ZSyh0aGlzLnNlcnZpY2UucmdiYVRvQ215ayhhKSkpLGE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQShhKSx0aGlzLnNsaWRlckg9dGhpcy5oc3ZhLmgpOmE9dGhpcy5zZXJ2aWNlLmRlbm9ybWFsaXplUkdCQSh0aGlzLnNlcnZpY2UuaHN2YVRvUmdiYSh0aGlzLmhzdmEpKSxvPXRoaXMuc2VydmljZS5kZW5vcm1hbGl6ZVJHQkEodGhpcy5zZXJ2aWNlLmhzdmFUb1JnYmEobmV3IFJiKHRoaXMuc2xpZGVySHx8dGhpcy5oc3ZhLmgsMSwxLDEpKSksaSYmKHRoaXMuaHNsYVRleHQ9bmV3IFJwKE1hdGgucm91bmQoMzYwKnMuaCksTWF0aC5yb3VuZCgxMDAqcy5zKSxNYXRoLnJvdW5kKDEwMCpzLmwpLE1hdGgucm91bmQoMTAwKnMuYSkvMTAwKSx0aGlzLnJnYmFUZXh0PW5ldyBodShhLnIsYS5nLGEuYixNYXRoLnJvdW5kKDEwMCphLmEpLzEwMCksdGhpcy5jcENteWtFbmFibGVkJiYodGhpcy5jbXlrVGV4dD1uZXcgdDAodGhpcy5jbXlrLmMsdGhpcy5jbXlrLm0sdGhpcy5jbXlrLnksdGhpcy5jbXlrLmssTWF0aC5yb3VuZCgxMDAqdGhpcy5jbXlrLmEpLzEwMCkpLHRoaXMuaGV4VGV4dD10aGlzLnNlcnZpY2UucmdiYVRvSGV4KGEsImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsKSx0aGlzLmhleEFscGhhPXRoaXMucmdiYVRleHQuYSksImF1dG8iPT09dGhpcy5jcE91dHB1dEZvcm1hdCYmdGhpcy5mb3JtYXQhPT13cy5SR0JBJiZ0aGlzLmZvcm1hdCE9PXdzLkNNWUsmJnRoaXMuZm9ybWF0IT09d3MuSFNMQSYmdGhpcy5oc3ZhLmE8MSYmKHRoaXMuZm9ybWF0PXRoaXMuaHN2YS5hPDE/d3MuUkdCQTp3cy5IRVgpLHRoaXMuaHVlU2xpZGVyQ29sb3I9InJnYigiK28ucisiLCIrby5nKyIsIitvLmIrIikiLHRoaXMuYWxwaGFTbGlkZXJDb2xvcj0icmdiKCIrYS5yKyIsIithLmcrIiwiK2EuYisiKSIsdGhpcy5vdXRwdXRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSx0aGlzLmNwT3V0cHV0Rm9ybWF0LHRoaXMuY3BBbHBoYUNoYW5uZWwpLHRoaXMuc2VsZWN0ZWRDb2xvcj10aGlzLnNlcnZpY2Uub3V0cHV0Rm9ybWF0KHRoaXMuaHN2YSwicmdiYSIsbnVsbCksdGhpcy5mb3JtYXQhPT13cy5DTVlLKXRoaXMuY215a0NvbG9yPSIiO2Vsc2UgaWYoImFsd2F5cyI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZW5hYmxlZCI9PT10aGlzLmNwQWxwaGFDaGFubmVsfHwiZm9yY2VkIj09PXRoaXMuY3BBbHBoYUNoYW5uZWwpe2xldCBjPU1hdGgucm91bmQoMTAwKnRoaXMuY215ay5hKS8xMDA7dGhpcy5jbXlrQ29sb3I9YGNteWthKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9LCR7Y30pYH1lbHNlIHRoaXMuY215a0NvbG9yPWBjbXlrKCR7dGhpcy5jbXlrLmN9LCR7dGhpcy5jbXlrLm19LCR7dGhpcy5jbXlrLnl9LCR7dGhpcy5jbXlrLmt9KWA7dGhpcy5zbGlkZXI9bmV3ICRrKCh0aGlzLnNsaWRlckh8fHRoaXMuaHN2YS5oKSp0aGlzLnNsaWRlckRpbU1heC5oLTgsdGhpcy5oc3ZhLnMqdGhpcy5zbGlkZXJEaW1NYXgucy04LCgxLXRoaXMuaHN2YS52KSp0aGlzLnNsaWRlckRpbU1heC52LTgsdGhpcy5oc3ZhLmEqdGhpcy5zbGlkZXJEaW1NYXguYS04KSxlJiZsIT09dGhpcy5vdXRwdXRDb2xvciYmKHRoaXMuY3BDbXlrRW5hYmxlZCYmdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jbXlrQ2hhbmdlZCh0aGlzLmNteWtDb2xvciksdGhpcy5kaXJlY3RpdmVJbnN0YW5jZS5jb2xvckNoYW5nZWQodGhpcy5vdXRwdXRDb2xvcikpfX1zZXREaWFsb2dQb3NpdGlvbigpe2lmKCJpbmxpbmUiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkpdGhpcy5wb3NpdGlvbj0icmVsYXRpdmUiO2Vsc2V7bGV0IHIsZT0ic3RhdGljIixpPSIiLG89bnVsbCxzPW51bGwsYT10aGlzLmRpcmVjdGl2ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlLGw9dGhpcy5kaWFsb2dFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O2Zvcig7bnVsbCE9PWEmJiJIVE1MIiE9PWEudGFnTmFtZTspe2lmKHI9d2luZG93LmdldENvbXB1dGVkU3R5bGUoYSksZT1yLmdldFByb3BlcnR5VmFsdWUoInBvc2l0aW9uIiksaT1yLmdldFByb3BlcnR5VmFsdWUoInRyYW5zZm9ybSIpLCJzdGF0aWMiIT09ZSYmbnVsbD09PW8mJihvPWEpLGkmJiJub25lIiE9PWkmJm51bGw9PT1zJiYocz1hKSwiZml4ZWQiPT09ZSl7bz1zO2JyZWFrfWE9YS5wYXJlbnROb2RlfWxldCBjPXRoaXMuY3JlYXRlRGlhbG9nQm94KHRoaXMuZGlyZWN0aXZlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJmaXhlZCIhPT1lKTtpZih0aGlzLnVzZVJvb3RWaWV3Q29udGFpbmVyfHwiZml4ZWQiPT09ZSYmKCFvfHxvIGluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50KSl0aGlzLnRvcD1jLnRvcCx0aGlzLmxlZnQ9Yy5sZWZ0O2Vsc2V7bnVsbD09PW8mJihvPWEpO2xldCBkPXRoaXMuY3JlYXRlRGlhbG9nQm94KG8sImZpeGVkIiE9PWUpO3RoaXMudG9wPWMudG9wLWQudG9wLHRoaXMubGVmdD1jLmxlZnQtZC5sZWZ0fSJmaXhlZCI9PT1lJiYodGhpcy5wb3NpdGlvbj0iZml4ZWQiKTtsZXQgdT10aGlzLmNwUG9zaXRpb247ImF1dG8iPT09dGhpcy5jcFBvc2l0aW9uJiYodT1mdW5jdGlvbihuLHQpe2xldCBlPSJyaWdodCIsaT0iYm90dG9tIix7aGVpZ2h0OnIsd2lkdGg6b309bix7dG9wOnMsbGVmdDphfT10LGw9cyt0LmhlaWdodCxjPWErdC53aWR0aCx1PXMtcjwwLGQ9bCtyPih3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpLHA9YS1vPDAsaD1jK28+KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpO3JldHVybiBkJiYoaT0idG9wIiksdSYmKGk9ImJvdHRvbSIpLHAmJihlPSJyaWdodCIpLGgmJihlPSJsZWZ0IiksdSYmZCYmcCYmaD9bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLnJlZHVjZSgoeCxnKT0+blt4XT5uW2ddP3g6Zyk6cCYmaD91PyJib3R0b20iOmR8fHM+bD8idG9wIjoiYm90dG9tIjp1JiZkP3A/InJpZ2h0IjpofHxhPmM/ImxlZnQiOiJyaWdodCI6YCR7aX0tJHtlfWB9KHRoaXMuZGlhbG9nRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3BUcmlnZ2VyRWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSksInRvcCI9PT11Pyh0aGlzLmFycm93VG9wPWwtMSx0aGlzLnRvcC09bCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToiYm90dG9tIj09PXU/KHRoaXMudG9wKz1jLmhlaWdodCt0aGlzLmRpYWxvZ0Fycm93U2l6ZSx0aGlzLmxlZnQrPXRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAqYy53aWR0aC10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLWxlZnQiPT09dXx8ImxlZnQtdG9wIj09PXU/KHRoaXMudG9wLT1sLWMuaGVpZ2h0K2MuaGVpZ2h0KnRoaXMuY3BQb3NpdGlvbk9mZnNldC8xMDAsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToidG9wLXJpZ2h0Ij09PXV8fCJyaWdodC10b3AiPT09dT8odGhpcy50b3AtPWwtYy5oZWlnaHQrYy5oZWlnaHQqdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LzEwMCx0aGlzLmxlZnQrPWMud2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMi10aGlzLmRpYWxvZ0Fycm93T2Zmc2V0KToibGVmdCI9PT11fHwiYm90dG9tLWxlZnQiPT09dXx8ImxlZnQtYm90dG9tIj09PXU/KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0LT10aGlzLmNwV2lkdGgrdGhpcy5kaWFsb2dBcnJvd1NpemUtMik6KHRoaXMudG9wKz1jLmhlaWdodCp0aGlzLmNwUG9zaXRpb25PZmZzZXQvMTAwLXRoaXMuZGlhbG9nQXJyb3dPZmZzZXQsdGhpcy5sZWZ0Kz1jLndpZHRoK3RoaXMuZGlhbG9nQXJyb3dTaXplLTIpLHRoaXMuY3BVc2VQb3NpdGlvbj11fX1pc0Rlc2NlbmRhbnQoZSxpKXtsZXQgcj1pLnBhcmVudE5vZGU7Zm9yKDtudWxsIT09cjspe2lmKHI9PT1lKXJldHVybiEwO3I9ci5wYXJlbnROb2RlfXJldHVybiExfWNyZWF0ZURpYWxvZ0JveChlLGkpe2xldHt0b3A6cixsZWZ0Om99PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpyKyhpP3dpbmRvdy5wYWdlWU9mZnNldDowKSxsZWZ0Om8rKGk/d2luZG93LnBhZ2VYT2Zmc2V0OjApLHdpZHRoOmUub2Zmc2V0V2lkdGgsaGVpZ2h0OmUub2Zmc2V0SGVpZ2h0fX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShfdCksTShSZSksTShubiksTShIdCksTShHZCksTShxRykpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbImNvbG9yLXBpY2tlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihvdChES2UsNyksb3QoQUtlLDcpLG90KElLZSw3KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5kaWFsb2dFbGVtZW50PXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmh1ZVNsaWRlcj1yLmZpcnN0KSxOZShyPUxlKCkpJiYoaS5hbHBoYVNsaWRlcj1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgia2V5dXAuZXNjIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVFc2Mobyl9LDAsX1QpKCJrZXl1cC5lbnRlciIsZnVuY3Rpb24obyl7cmV0dXJuIGkuaGFuZGxlRW50ZXIobyl9LCExLF9UKX0sZGVjbHM6MzAsdmFyczo1MSxjb25zdHM6W1sxLCJjb2xvci1waWNrZXIiLDMsImNsaWNrIl0sWyJkaWFsb2dQb3B1cCIsIiJdLFszLCJjbGFzcyIsInRvcCIsNCwibmdJZiJdLFsiY2xhc3MiLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwiYmFja2dyb3VuZC1jb2xvciIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCIsNCwibmdJZiJdLFsxLCJodWUtYWxwaGEiLCJib3giXSxbMSwibGVmdCJdLFsxLCJzZWxlY3RlZC1jb2xvci1iYWNrZ3JvdW5kIl0sWzEsInNlbGVjdGVkLWNvbG9yIiwzLCJjbGljayJdLFsiY2xhc3MiLCJleWVkcm9wcGVyLWljb24iLCJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMywiY2xhc3MiLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInJpZ2h0Il0sWyJzdHlsZSIsImhlaWdodDogMTZweDsiLDQsIm5nSWYiXSxbMSwiaHVlIiwzLCJzbGlkZXIiLCJyZ1giLCJuZXdWYWx1ZSIsImRyYWdTdGFydCIsImRyYWdFbmQiXSxbImh1ZVNsaWRlciIsIiJdLFsxLCJjdXJzb3IiXSxbMSwidmFsdWUiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsidmFsdWVTbGlkZXIiLCIiXSxbMSwiYWxwaGEiLDMsInNsaWRlciIsInJnWCIsIm5ld1ZhbHVlIiwiZHJhZ1N0YXJ0IiwiZHJhZ0VuZCJdLFsiYWxwaGFTbGlkZXIiLCIiXSxbImNsYXNzIiwiY215ay10ZXh0IiwzLCJkaXNwbGF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImhzbGEtdGV4dCIsMywiZGlzcGxheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJyZ2JhLXRleHQiLDMsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiaGV4LXRleHQiLDMsImhleC1hbHBoYSIsImRpc3BsYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwidmFsdWUtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0eXBlLXBvbGljeSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJidXR0b24tYXJlYSIsNCwibmdJZiJdLFsiY2xhc3MiLCJleHRyYS10ZW1wbGF0ZSIsNCwibmdJZiJdLFsxLCJzYXR1cmF0aW9uLWxpZ2h0bmVzcyIsMywic2xpZGVyIiwicmdYIiwicmdZIiwibmV3VmFsdWUiLCJkcmFnU3RhcnQiLCJkcmFnRW5kIl0sWyJ4bWxucyIsImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiaGVpZ2h0IiwiMjRweCIsInZpZXdCb3giLCIwIDAgMjQgMjQiLCJ3aWR0aCIsIjI0cHgiLCJmaWxsIiwiIzAwMDAwMCIsMSwiZXllZHJvcHBlci1pY29uIl0sWyJkIiwiTTAgMGgyNHYyNEgwVjB6IiwiZmlsbCIsIm5vbmUiXSxbImQiLCJNMTcuNjYgNS40MWwuOTIuOTItMi42OSAyLjY5LS45Mi0uOTIgMi42OS0yLjY5TTE3LjY3IDNjLS4yNiAwLS41MS4xLS43MS4yOWwtMy4xMiAzLjEyLTEuOTMtMS45MS0xLjQxIDEuNDEgMS40MiAxLjQyTDMgMTYuMjVWMjFoNC43NWw4LjkyLTguOTIgMS40MiAxLjQyIDEuNDEtMS40MS0xLjkyLTEuOTIgMy4xMi0zLjEyYy40LS40LjQtMS4wMy4wMS0xLjQybC0yLjM0LTIuMzRjLS4yLS4xOS0uNDUtLjI5LS43LS4yOXpNNi45MiAxOUw1IDE3LjA4bDguMDYtOC4wNiAxLjkyIDEuOTJMNi45MiAxOXoiXSxbInR5cGUiLCJidXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMiwiaGVpZ2h0IiwiMTZweCJdLFsxLCJjbXlrLXRleHQiXSxbMSwiYm94Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIxMDAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsidHlwZSIsIm51bWJlciIsInBhdHRlcm4iLCJbMC05XSsoW1xcLixdWzAtOV17MSwyfSk/IiwibWluIiwiMCIsIm1heCIsIjEiLCJzdGVwIiwiMC4xIiwzLCJ0ZXh0IiwicmciLCJ2YWx1ZSIsImtleXVwLmVudGVyIiwibmV3VmFsdWUiXSxbMSwiaHNsYS10ZXh0Il0sWyJ0eXBlIiwibnVtYmVyIiwicGF0dGVybiIsIlswLTldKiIsIm1pbiIsIjAiLCJtYXgiLCIzNjAiLDMsInRleHQiLCJyZyIsInZhbHVlIiwia2V5dXAuZW50ZXIiLCJuZXdWYWx1ZSJdLFsxLCJyZ2JhLXRleHQiXSxbInR5cGUiLCJudW1iZXIiLCJwYXR0ZXJuIiwiWzAtOV0qIiwibWluIiwiMCIsIm1heCIsIjI1NSIsMywidGV4dCIsInJnIiwidmFsdWUiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsImhleC10ZXh0Il0sWzMsInRleHQiLCJ2YWx1ZSIsImJsdXIiLCJrZXl1cC5lbnRlciIsIm5ld1ZhbHVlIl0sWzEsInZhbHVlLXRleHQiXSxbMSwidHlwZS1wb2xpY3kiXSxbMSwidHlwZS1wb2xpY3ktYXJyb3ciLDMsImNsaWNrIl0sWzEsInByZXNldC1hcmVhIl0sWzEsInByZXNldC1sYWJlbCJdLFszLCJjbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmVzZXQtY29sb3IiLDMsImJhY2tncm91bmRDb2xvciIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwicHJlc2V0LWNvbG9yIiwzLCJjbGljayJdLFszLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsImJ1dHRvbi1hcmVhIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayJdLFsxLCJleHRyYS10ZW1wbGF0ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDAsMSksUCgiY2xpY2siLGZ1bmN0aW9uKG8pe3JldHVybiBvLnN0b3BQcm9wYWdhdGlvbigpfSksRSgyLFBLZSwxLDUsImRpdiIsMiksRSgzLFJLZSwyLDgsImRpdiIsMyksXyg0LCJkaXYiLDQpKDUsImRpdiIsNSksTyg2LCJkaXYiLDYpLF8oNywiZGl2Iiw3KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciYmaS5vbkV5ZURyb3BwZXIoKX0pLEUoOCxPS2UsMywwLCJzdmciLDgpLHYoKSxFKDksa0tlLDIsNSwiYnV0dG9uIiw5KSx2KCksXygxMCwiZGl2IiwxMCksRSgxMSxGS2UsMSwwLCJkaXYiLDExKSxfKDEyLCJkaXYiLDEyLDEzKSxQKCJuZXdWYWx1ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25IdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJodWUiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiaHVlIil9KSxPKDE0LCJkaXYiLDE0KSx2KCksXygxNSwiZGl2IiwxNSwxNiksUCgibmV3VmFsdWUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVmFsdWVDaGFuZ2Uobyl9KSgiZHJhZ1N0YXJ0IixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ1N0YXJ0KCJ2YWx1ZSIpfSkoImRyYWdFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25EcmFnRW5kKCJ2YWx1ZSIpfSksTygxNywiZGl2IiwxNCksdigpLF8oMTgsImRpdiIsMTcsMTgpLFAoIm5ld1ZhbHVlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkFscGhhQ2hhbmdlKG8pfSkoImRyYWdTdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkRyYWdTdGFydCgiYWxwaGEiKX0pKCJkcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBpLm9uRHJhZ0VuZCgiYWxwaGEiKX0pLE8oMjAsImRpdiIsMTQpLHYoKSgpKCksRSgyMSxCS2UsMTcsMTIsImRpdiIsMTkpLEUoMjIsVUtlLDE0LDEwLCJkaXYiLDIwKSxFKDIzLEdLZSwxNCwxMCwiZGl2IiwyMSksRSgyNCxZS2UsOCw3LCJkaXYiLDIyKSxFKDI1LFFLZSw5LDMsImRpdiIsMjMpLEUoMjYsS0tlLDMsMCwiZGl2IiwyNCksRSgyNyx0WmUsNiwzLCJkaXYiLDI1KSxFKDI4LHJaZSwzLDIsImRpdiIsMjYpLEUoMjksc1plLDIsMSwiZGl2IiwyNyksdigpKSwyJmUmJihQdCgiZGlzcGxheSIsaS5zaG93PyJibG9jayI6Im5vbmUiKSgidmlzaWJpbGl0eSIsaS5oaWRkZW4/ImhpZGRlbiI6InZpc2libGUiKSgidG9wIixpLnRvcCwicHgiKSgibGVmdCIsaS5sZWZ0LCJweCIpKCJwb3NpdGlvbiIsaS5wb3NpdGlvbikoImhlaWdodCIsaS5jcEhlaWdodCwicHgiKSgid2lkdGgiLGkuY3BXaWR0aCwicHgiKSxldCgib3BlbiIsaS5zaG93KSxDKDIpLHkoIm5nSWYiLCJwb3B1cCI9PT1pLmNwRGlhbG9nRGlzcGxheSksQygxKSx5KCJuZ0lmIiwxPT09KGkuY3BDb2xvck1vZGV8fDEpKSxDKDQpLFB0KCJiYWNrZ3JvdW5kLWNvbG9yIixpLnNlbGVjdGVkQ29sb3IpKCJjdXJzb3IiLGkuZXllRHJvcHBlclN1cHBvcnRlZCYmaS5jcEV5ZURyb3BwZXI/InBvaW50ZXIiOm51bGwpLEMoMSkseSgibmdJZiIsaS5leWVEcm9wcGVyU3VwcG9ydGVkJiZpLmNwRXllRHJvcHBlciksQygxKSx5KCJuZ0lmIixpLmNwQWRkQ29sb3JCdXR0b24pLEMoMikseSgibmdJZiIsImRpc2FibGVkIj09PWkuY3BBbHBoYUNoYW5uZWwpLEMoMSksUHQoImRpc3BsYXkiLDE9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHkoInJnWCIsMSksQygyKSxQdCgibGVmdCIsbnVsbD09aS5zbGlkZXI/bnVsbDppLnNsaWRlci5oLCJweCIpLEMoMSksUHQoImRpc3BsYXkiLDI9PT0oaS5jcENvbG9yTW9kZXx8MSk/ImJsb2NrIjoibm9uZSIpLHkoInJnWCIsMSksQygyKSxQdCgicmlnaHQiLG51bGw9PWkuc2xpZGVyP251bGw6aS5zbGlkZXIudiwicHgiKSxDKDEpLFB0KCJkaXNwbGF5IiwiZGlzYWJsZWQiPT09aS5jcEFscGhhQ2hhbm5lbD8ibm9uZSI6ImJsb2NrIikoImJhY2tncm91bmQtY29sb3IiLGkuYWxwaGFTbGlkZXJDb2xvcikseSgicmdYIiwxKSxDKDIpLFB0KCJsZWZ0IixudWxsPT1pLnNsaWRlcj9udWxsOmkuc2xpZGVyLmEsInB4IiksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMj09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwhaS5jcERpc2FibGVJbnB1dCYmMT09PShpLmNwQ29sb3JNb2RlfHwxKSksQygxKSx5KCJuZ0lmIiwobnVsbD09aS5jcFByZXNldENvbG9ycz9udWxsOmkuY3BQcmVzZXRDb2xvcnMubGVuZ3RoKXx8aS5jcEFkZENvbG9yQnV0dG9uKSxDKDEpLHkoIm5nSWYiLGkuY3BPS0J1dHRvbnx8aS5jcENhbmNlbEJ1dHRvbiksQygxKSx5KCJuZ0lmIixpLmNwRXh0cmFUZW1wbGF0ZSkpfSxkZXBlbmRlbmNpZXM6W2RuLEJlLG9zLGNaZSx1WmVdLHN0eWxlczpbJy5jb2xvci1waWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO3dpZHRoOjIzMHB4O2hlaWdodDphdXRvO2JvcmRlcjojNzc3IHNvbGlkIDFweDtjdXJzb3I6ZGVmYXVsdDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmNvbG9yLXBpY2tlciAqe2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtmb250LXNpemU6MTFweH0uY29sb3ItcGlja2VyIGlucHV0e3dpZHRoOjA7aGVpZ2h0OjI2cHg7bWluLXdpZHRoOjA7Zm9udC1zaXplOjEzcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6IzAwMH0uY29sb3ItcGlja2VyIGlucHV0OmludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXVpLWludmFsaWQsLmNvbG9yLXBpY2tlciBpbnB1dDotbW96LXN1Ym1pdC1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX0uY29sb3ItcGlja2VyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLC5jb2xvci1waWNrZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmNvbG9yLXBpY2tlciAuYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTk5OTk7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItc3R5bGU6c29saWR9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctdG9we2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6Izc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b217dG9wOi0yMHB4O2xlZnQ6OHB4O2JvcmRlci13aWR0aDoxMHB4IDVweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApICM3NzcgcmdiYSgwLDAsMCwwKX0uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LXRvcHtyaWdodDotMjFweDtib3R0b206OHB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy10b3AtcmlnaHQsLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctcmlnaHQtdG9we2JvdHRvbTo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctbGVmdCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1sZWZ0LWJvdHRvbSwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1ib3R0b20tbGVmdHt0b3A6OHB4O3JpZ2h0Oi0yMXB4O2JvcmRlci13aWR0aDo1cHggMTBweDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgIzc3N30uY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodCwuY29sb3ItcGlja2VyIC5hcnJvdy5hcnJvdy1yaWdodC1ib3R0b20sLmNvbG9yLXBpY2tlciAuYXJyb3cuYXJyb3ctYm90dG9tLXJpZ2h0e3RvcDo4cHg7bGVmdDotMjBweDtib3JkZXItd2lkdGg6NXB4IDEwcHg7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMCkgIzc3NyByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCl9LmNvbG9yLXBpY2tlciAuY3Vyc29ye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Ym9yZGVyOiMyMjIgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpkZWZhdWx0fS5jb2xvci1waWNrZXIgLmJveHtkaXNwbGF5OmZsZXg7cGFkZGluZzo0cHggOHB4fS5jb2xvci1waWNrZXIgLmxlZnR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNnB4IDhweH0uY29sb3ItcGlja2VyIC5yaWdodHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MTJweCA4cHh9LmNvbG9yLXBpY2tlciAuYnV0dG9uLWFyZWF7cGFkZGluZzowIDE2cHggMTZweDt0ZXh0LWFsaWduOnJpZ2h0fS5jb2xvci1waWNrZXIgLmJ1dHRvbi1hcmVhIGJ1dHRvbnttYXJnaW4tbGVmdDo4cHh9LmNvbG9yLXBpY2tlciAucHJlc2V0LWFyZWF7cGFkZGluZzo0cHggMTVweH0uY29sb3ItcGlja2VyIC5wcmVzZXQtYXJlYSAucHJlc2V0LWxhYmVse292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO3BhZGRpbmc6NHB4O2ZvbnQtc2l6ZToxMXB4O3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmxlZnQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjojNTU1fS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtY29sb3J7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW46NHB4IDZweCA4cHg7Ym9yZGVyOiNhOWE5YTkgc29saWQgMXB4O2JvcmRlci1yYWRpdXM6MjUlO2N1cnNvcjpwb2ludGVyfS5jb2xvci1waWNrZXIgLnByZXNldC1hcmVhIC5wcmVzZXQtZW1wdHktbWVzc2FnZXttaW4taGVpZ2h0OjE4cHg7bWFyZ2luLXRvcDo0cHg7bWFyZ2luLWJvdHRvbTo4cHg7Zm9udC1zdHlsZTppdGFsaWM7dGV4dC1hbGlnbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAuaGV4LXRleHR7d2lkdGg6MTAwJTtwYWRkaW5nOjRweCA4cHg7Zm9udC1zaXplOjExcHh9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveHtwYWRkaW5nOjAgMjRweCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmhleC10ZXh0IC5ib3ggZGl2e2Zsb2F0OmxlZnQ7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojNTU1O2NsZWFyOmxlZnR9LmNvbG9yLXBpY2tlciAuaGV4LXRleHQgLmJveCBpbnB1dHtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MXB4O2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5oZXgtYWxwaGEgLmJveCBkaXY6Zmlyc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaGV4LWFscGhhIC5ib3ggaW5wdXQ6Zmlyc3QtY2hpbGR7ZmxleC1ncm93OjM7bWFyZ2luLXJpZ2h0OjhweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0e3dpZHRoOjEwMCU7cGFkZGluZzo0cHggOHB4O2ZvbnQtc2l6ZToxMXB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94e3BhZGRpbmc6MCAyNHB4IDhweCA4cHh9LmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94e3BhZGRpbmc6MCA4cHggOHB4fS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGRpdiwuY29sb3ItcGlja2VyIC5oc2xhLXRleHQgLmJveCBkaXYsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBkaXZ7ZmxleDoxIDEgYXV0bzttYXJnaW4tcmlnaHQ6OHB4O3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM1NTV9LmNvbG9yLXBpY2tlciAuY215ay10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAuaHNsYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggZGl2Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAudmFsdWUtdGV4dCAuYm94IGRpdjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowfS5jb2xvci1waWNrZXIgLmNteWstdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnJnYmEtdGV4dCAuYm94IGlucHV0LC5jb2xvci1waWNrZXIgLnZhbHVlLXRleHQgLmJveCBpbnB1dHtmbG9hdDpsZWZ0O2ZsZXg6MTtwYWRkaW5nOjFweDttYXJnaW46MCA4cHggMCAwO2JvcmRlcjojYTlhOWE5IHNvbGlkIDFweH0uY29sb3ItcGlja2VyIC5jbXlrLXRleHQgLmJveCBpbnB1dDpsYXN0LWNoaWxkLC5jb2xvci1waWNrZXIgLmhzbGEtdGV4dCAuYm94IGlucHV0Omxhc3QtY2hpbGQsLmNvbG9yLXBpY2tlciAucmdiYS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZCwuY29sb3ItcGlja2VyIC52YWx1ZS10ZXh0IC5ib3ggaW5wdXQ6bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uY29sb3ItcGlja2VyIC5odWUtYWxwaGF7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206M3B4fS5jb2xvci1waWNrZXIgLmh1ZXtkaXJlY3Rpb246bHRyO3dpZHRoOjEwMCU7aGVpZ2h0OjE2cHg7bWFyZ2luLWJvdHRvbToxNnB4O2JvcmRlcjpub25lO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKWUFBQUFRQ0FZQUFBRDA2SVluQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tVRldiQ0NBQUFBRnhKUkVGVWFON3Qwa0VLZzBBUUFNRTJ4ODMvbjJxdTVxQ2dEMWlEaENvWWRwbmJRQzliYlkxcVZPL2p2YzZrM2FkOTFzNy83RjEvY3NnUHJ1anVRMTdCRFlTRnNCQVd3Z0poSVN5RUJjSkNXQWdMaElXd0VCWUlpMmY3QXIvMVRDZ0ZIMlg5QUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAudmFsdWV7ZGlyZWN0aW9uOnJ0bDt3aWR0aDoxMDAlO2hlaWdodDoxNnB4O21hcmdpbi1ib3R0b206MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUNUa2xFUVZSNDJ1M1NZVWNyQUJoQTRVMlNrbVJKTW1XU0prbEtKaVdaWnBLVUpKc2tLVW1hVEZJbUtaT1V6TXlTcEdSbWxpUk5KaWxKU3BLU0pFdG1TcElwbVdtU2RPNzM2LzZEK3g3T1AzZ1VDb1dDdjFjcWxTUWxKWkdjbkV4S1NncXBxYW1rcGFXUm5wNU9Sa1lHbVptWnFGUXFzckt5eU03T0ppY25oOXpjWE5ScU5YbDVlZVRuNTZQUmFDZ29LS0N3c0pDaW9pSzBXaTNGeGNXVWxKUlFXbHBLV1ZrWjVlWGxWRlJVVUZsWmlVNm5vNnFxaXVycWFtcHFhcWl0cmFXdXJnNjlYazk5ZlQwR2d3R2owVWhEUXdPTmpZMDBOVFhSM054TVMwc0xyYTJ0dExXMTBkN2Vqc2xrd213MjA5SFJRV2RuSjExZFhYUjNkOVBUMDBOdmJ5OTlmWDMwOS9jek1EREE0T0FnRm91Rm9hRWhyRllydzhQRGpJeU1NRG82eXRqWUdEYWJqZkh4Y1NZbUpwaWNuR1JxYWdxNzNjNzA5RFF6TXpQTXpzNHlOemZIL1B3OERvY0RwOU9KeStYQzdYYXpzTERBNHVJaVMwdExMQzh2czdLeXd1cnFLbXRyYTNnOEhyeGVMejZmRDcvZnovcjZPaHNiRzJ4dWJySzF0Y1gyOWphQlFJQ2RuUjJDd1NDN3U3dnM3ZTJ4djcvUHdjRUJoNGVISEIwZGNYeDh6TW5KQ2FlbnA1eWRuWEYrZnM3RnhRV1hsNWRjWFYxeGZYM056YzBOdDdlMzNOM2RFUXFGdUwrLzUrSGhnWEE0VENRUzRmSHhrYWVuSjU2Zm4zbDVlZUgxOVpWb05NcmIyeHZ2Nys5OGZId1FpOFdJeCtOOGZuNlNTQ1Q0K3ZyaSsvdWJuNThmZm45LytWY0tnU1d3QkpiQUVsZ0NTMkFKTElFbHNBU1d3QkpZQWt0Z0NTeUJKYkFFbHNBU1dBSkxZQWtzZ1NXd0JKYkFFbGdDUzJBSkxJRWxzUDQvV0g4QW1KNVo2akhTNGg4QUFBQUFTVVZPUks1Q1lJST0pfS5jb2xvci1waWNrZXIgLmFscGhhe2RpcmVjdGlvbjpsdHI7d2lkdGg6MTAwJTtoZWlnaHQ6MTZweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBSllBQUFBUUNBWUFBQUQwNklZbkFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0QUlXRHdZUWxaTWEzZ0FBQVdWSlJFRlVhTjd0bUVHTzZqQVFSQ3NPQXJIZ0JweUFKWUdqY0dvY3hBbTRBMklIcG1vV0UwZUJIK2V6bUZsTnZVMDZzaEozVzZWRWVsV01VUUFJSUY5ZjZxWnBpbXNBMUxZdFMydUY1MS91MjdZVkFGWlZSVWtFb0dIZFBWL3NJY2JJRUlJa1VkSS85WGE3bmV5djYxK1NXRlVWQVZDU2N0MDBUV24yZnY2dTMrRWNmZDN0WHp5LzArbkVVdStTUGpvL2txenJtaVFwU2NONnY5OFhld2ZBOC9sTWtpTEoyV3hHU1VvcGNUNmZNNlUwTlg5L2ZyZmJqZXYxV3RmcmxaZkxoWWZEUVFIRy9BSU9sbkd3aklObEhDeGpIQ3pqWUptL1RKV2RDd3F1SlhzZUZGekd3RE5OZWlLTU9KVE84eFFkRFFhZUIyOStLOWVmZUxhQm85Sjd2ZHZ0SmoxUmpGRmpmaXY3cXY5NXRqeC83bGVTUWdoOTNlMWZmTWVJcDZPK1lRamhvL043OTF0MVhWT1NTSTdOLy9LKzQvR294V0xCeCtQQjUvT3A1WExKKy8zT2xKSldxeFUzbTgzb3Z2NWlHZjhLallObEhDeGpIQ3pqWUJrSHk1Z2Y1Z3VzdlFVN1UzN2pUQUFBQUFCSlJVNUVya0pnZ2c9PSl9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3l7cG9zaXRpb246YWJzb2x1dGU7dG9wOjIxOHB4O3JpZ2h0OjEycHg7d2lkdGg6MTZweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kLXNpemU6OHB4IDE2cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCSUFBQUFnQ0FZQUFBQWZmQ2p4QUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFDZXdBQUFuc0IwMUNPM0FBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBSUFTVVJCVkVpSjdaWTlheFJSRklhZnN4TVN0ckxRSnBBZ3BCRmhpK0M5dzFZU28wMEk2UlovZzl2WnBCZi9RT3I0R3lSZ2tTS05TckFhZHNacVFHd0NrdUFXeVJaSnN5U3d2aFo3Ti92aHpyZ2JMSDNMZDg1OTdqbHp6NTB6Sm9reXhYSDhEcURWYXIwcWk2djhCYkl0cVNHcEVjZnhkbG1zRldYa3ZYOEFmQVZXZzNVS1BFblQ5R0t1ak16c0FGZ1pzVmFDTjFWVFFkNzdYVW5yZ0Uxa3YrNjkzNTI2OFdScHpybkhadllSV0M3WXZDM3BSWlpsM3dvenF0VnFpeUg5SWdqQXNwa2QxR3ExeFVKUXRWcmRCOVpLSUFPdGhkZy9RYzY1TFVrN3dOSU1vQ1ZKTzg2NXJZRmhrcWpYNi9kN3ZWNEdQSndCTXFvZlVSUzVKRWs2RllCZXIvZWVZYi9NbzlXd0ZuUE92UWJlQXZmdUFBSzRCTjRzQUp0QUcvZ0pJRWxtTnVpSnliYTNFR05tWmlQZVp1RVZtVmVsbC9ZLzZOK0N6RG4zQVhoRU9PbzdIdi8zQmVBejhJelFrTVBuSmJ1UHgxd0MreVlKNy8wbllJUDVTLzBGSEtkcCtyd0NFRVhSUy9yZjVIbDFHdGIyTTBpU3BDT3BDWnpQQVRtWDFFeVNwSE1MQXNpeTdNak1Eb0hyR1NEWFpuYVlaZG5Sd0JoN0o5MXV0d21jekFBNkNiRzNHZ1BsZVg0anFVSC9hMUNrdHFSR251YzNoU0NBTUIzMmdLc3BrQ3RnYjNLQ1FNbWtqZVA0V05KVGhyTk5admFsMVdwdFRJc3Y3SnRRNHRtSWRSYThxU29FcFdsNllXWk5vQU4wekt4Wk5QZWhwTFNCWnYydCtRMENKOWxMbkFSUUxBQUFBQUJKUlU1RXJrSmdnZz09KTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXJ9LmNvbG9yLXBpY2tlciAudHlwZS1wb2xpY3kgLnR5cGUtcG9saWN5LWFycm93e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9ye3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNnB4O2xlZnQ6OHB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyOjFweCBzb2xpZCAjYTlhOWE5O2JvcmRlci1yYWRpdXM6NTAlfS5jb2xvci1waWNrZXIgLnNlbGVjdGVkLWNvbG9yLWJhY2tncm91bmR7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNnQUFBQW9DQVlBQUFDTS9yaHRBQUFBaDBsRVFWUllSKzJXMFFsQU1RZ0Q2MHpkZndPZHFhOFRtSS93UU1yNUswSTViWkxJekxPYTJudDM3VlZWYmQrZER4NW9iZ0NDM0tCTHdKMmZmNFBuVmlka2YrdWNJaHc4MEhRYUNMbzNETUgzQ1JLM2lGc21BV1ZsNmhQTkR3dDhFdk5FNXErWXVFWGNNZ2tvblZNNlNkeUNvRXZBblo4djFIang4MTdNaWxteFNVQjVyZExKRHljWmdVQVpVY2gvQUFBQUFFbEZUa1N1UW1DQyl9LmNvbG9yLXBpY2tlciAuc2F0dXJhdGlvbi1saWdodG5lc3N7ZGlyZWN0aW9uOmx0cjt3aWR0aDoxMDAlO2hlaWdodDoxMzBweDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0b3VjaC1hY3Rpb246bWFuaXB1bGF0aW9uO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFPWUFBQUNDQ0FZQUFBQlNEN1QzQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRBSVdEd2tzUFdSNmxnQUFJQUJKUkVGVWVOcnRuVnVUNDdnUnJBSE4rUC8vT3IvNjFZNXdPTlo3bVoxdTNYQWVMTWpKWkdaVmdkS3NmYzV4UjNTMFJJSVVXK0NIekNwYzJNY1lvN1hHdjNleDdVaVpkNTdyanl6enYrdiszM1gvUi8rM3IvZjd2UjM4NlkrVHZLTmNmL3dkaFRMUGN2OXFVMndaZDc0dXRoMHQxODIxamtJWkxQY3NJLzZuV2E0WHZ1dHF1VTBaODVtbng4MFMvWnpncG5Mbk90SE50Ny9vZngxVEtYY1NOek4vN3FiTVEzanU3ck5RbU1ZWWQvNHMyajlhYStQK2dHYU1jWnJiMU0vdGRydmY3L2Qydjk5UDkvdDkzTy8zY2J2ZHh1MTJHOWZyZFZ3dWwzRStuOGMvLy9uUCsyKy8vWGI2NmFlZnhsLy8rdGZ4NXovLzJZSzVBbDJyZ3ZmNFVzYnBkR3JCNTJiQXZBclhwdXpqbWlxQVZTR3o1ZURtR1lYemhiQVptQ3JubXpkZHBVVSs4WTFkQU9ZZVhDdERVd1Z3VjdZQ0dINnVBbXlNY1o5bDV2a1VhQlBHTVVaNy9KNXcvNzkyL2Z2djlYcTkzMjYzZHIvZlR4UEVDZU1FOG5LNWpNL1B6L0hUVHovZHYzMzdkdnJsbDEvR1AvN3hqL0czdi8xdC9PVXZmd2tWc3dvbmdqZE9wOVB6SDNVM0Qzem1XR25aVlhuNGpDcXM3d0MyQktQNC84dEF6a1pzb1d4NlhycWVIWnltdnA0QUJDQkpoVFF3S2ZEVDhnenJaQ0lxaTVBaGlBQ2pCZkVCMnJQOC9YNjNNTTdmNi9WNnY5L3Y3WGE3YllDODNXN2pjcmxzVkhJcTVmZnYzMCsvL2ZiYitPV1hYOFpQUC8wMC92NzN2NCtmZi83NUpTdmJldStiTDJXTU1hRmJBbHBCTk04NVFYK2N0NnFvU3FrUEF3dVFsQlZLcUdORlNVT0FBM0JtdTdnQzVoTk9kMTVuU3d2QU9VVzdDNGdpVUNWOFNnbjVMOWhORklxVHNwMEd4STB5c2lveWpBamtZL3RHSlZFcHorZnorT1dYWCs3ZnYzOC8vZjc3NytQYnQyL2oxMTkvSFQvLy9QUDQ5ZGRmeDhmSFJ3cm1UalY3NzlFWHUycHgyeGhqd3RkSlpRY0FXUUlQTFBJU3NNSmFTd2lEOGd6SUtyd1N5QVRFNWo1bkFiUjVjMWRCVXdCbHNFV1cwaDZMcWlZc3FGUEFReEN5Ulozd09TQVJ4bWxYTVg1azY0cFFmdnYyN2Y3NStkaytQajVPSHg4ZjQvdjM3K1BidDIvanQ5OStHOSsrZlJzZkh4L2pjcm1VRkxPMzFnWURXYmx4UklzL1RxZlQ3b3VzeEpzQXhYQTJHYzdUQTlYZGdmZG9IYkZzajc2WDIrMVdBcmdJMWFnZUd3QTNxdXBxb0hzbWNiSTZGdTkzcXVnZ0ZhOWQ3TGVEdGdLZkFGSEJKK05FQnlJa2NKNUtlcnZkVG1oaEdjZ0pKU1o1dm4vL2ZqK2Z6KzE4UHA4K1B6L0g1K2ZubUdEKy92dnY0L3YzNytQajQyTjhmbjZPMisxV3M3SmpqUDZ3cmFNSTVFNFJaOHgydlY1VFN3a3F1b3RWNy9kN1R6NkhGV3NEL3FOY2R3MENRM3EvMzIxYzY4NlR3RFZJZGJ1eTczek5sZGhTSGI4STJrbFp6bm0rSW5CUzRVNm4wMzAyYUJGc0xoSERBS0pWSlZnbGZJOWpodnU1M1c1M3NMQU5ZTnhBaURBNk1DZVVIeDhmOSt2MTJpNlhTN3RjTHFjWlc1N1A1eWVZOC9mejgzT2N6K2Zuc1NtWVV5a25XRUc4NVdCc3Q5c3R6U0x5TWRmcjlRaTA4aVkxNVVaMExsREdMaFIzbzV6SzJqN09QVVREMEUrblUzdGs3WGIvMTZORmJobG9BTXVZMXpqTFVPTzNCS2VJRGUrWjhzMy9KNGdGbzRUTTVqUG11UmcyOGZvVUtLVlN3bzE2VGdBNW5weXdjV0xIZ1lsL1B6OC83My82MDUvYWI3LzkxbTYzVzd0Y0xpZTBzWmo0bWFvNWdUeWZ6ODhFMGYxK2o4RWNZendUUEVHMmNxanlmSE5GME04ZnVxRWlhT1ZuUnpaWlFOaDVmd1F5SGcvSERHZkpvODlRMXpiL3F1dTVYQzY3NzNJMlhLZlRxZC92OStkM3d1cVd2YS9ZVGRVZEVWM2ZoSXYvVml5cHM2WUUzeDNyNDNLNWJKUVM2NnpheFZHRnN2ZCsvL2o0YUYrL2ZtM2Z2Mzl2dDl1dGZmMzZ0ZjMrKysvdGRydWR2bjM3WnVOTEJhYUNNZ1V6QytyWlJpRm93eFV1Skk4WU1xY0NwOU9wcTV2YWdhWVU2bEdKQTFYUXFlamNodzZDajBHdzVuWUJyR3cwMUEyTzIwNm4wNEJHb3VOTnlUZnAvRndFbGhVZXk2blhySUt3N1FRV2RkeHVOMmxkTDVmTDgzOWdTUEY4YWh1L0p2Qk80OENQU3VxTWY4VnA5L1A1M0w1OCtkTHU5M3M3bjgvdGZyOC8zOS92OS9iNStUa2hQSjNQNTZtUTQzNi9qKy9mdisvaVNnYnplcjArQVp4LzUrODhidjZPTWRhNlM1ejZrZDIxZllDOWR4djdjSUpKMmQ5QU9TMzBmUE16eUhpVE04QjRERjZYVWxZSHA0S1FXM1crMXQ3N01OQjF2R0h4V3E3WGE3dmY3OCt5NS9ONUErSDFldDI5eHVQNWRiWXR5YVJ1NEFrc2JQcTY5MzZmalJ6WFJ4QmJQci9iK2IxOCtmS2xqVEhhQkJCZm44L24wLzErSDErK2ZCbm44em0wc0I4Zkg1dTRjcjVHdUJoTVZrMEVFbjlSc2N0Z1ZoTStpeGxKdE1BMjNSOEI2eXlzQXN0Qk9nRlhJS0tDTUlnVG9NcU5FdTJmWU1IN3p0YzczMmRRS2tDajF5dEFadFkwS3g4cElyOEdHSitBVDNWKzJIaXJobCsrZkJtWHkyV3o3M3crYjE3UDhwK2ZuOC90VXdHVmxlVmtUeVViNjhEa2ZheVdZNHp4TlJpaFU0RXBMSlBaVnJLK3U3SjQvbWdmS3FlTFc5WDJSRVdsSXRMMWRpeW5iRERiMytqWGdZalFxbjBycnhXYytOa0lMUDdGN3hJYk12eDd2VjUzeDQweG5sYldKRjEyWlNhZy9OMHBXNnQrWnptT016SGphakt3RGZvbmQ3OHpZVGRmcTE4dXA5N3pyMnE4djNJaW9CcHJSdEJsMEVaOW9nNVdCUkdPZE9IaklqWEY3VW90RmJnT1duWHpJSnl6WXZqRzVJWWdzbU1PeEhrejhPc01TclZOV2VxNVQ4RGFPY2JFdjFPZDVyYnM5YU83WXZNZXQ2M0VrRisrZk1FeHErTVJsNC9MNWJMWk4vK2V6K2ZuWjZLYXp1TXFYU1FWTzVzcEpYZmxIQUl6ZXMveEpzZWNrUkppRE1vZzlkNlZmUnJxWE1yNktwVlYyN2pSd0phY0dvdk9BTTF6TWRRTW53SzFBdWJLNjNrZENDaHZJMUM3ZzB6OW5mL0QrWHplMlZqOEg3R3g0UDlkdVFsc1lDcnF5TjhYcUczSG0vMTBPajNqdy9uK2NybHN0dU0ralBtbXhUMmRUdVB6ODNQenQycG4xWHNFSFgvYm5QYVZxVm1oMHh3T3QwbzZYTExBSGVQVVUyMDN3SGZjcnNwQ3dtVjNUcnlCNXMwTXNlZWc5N3gvQnd6Q2pCbGJCK3BSQVBsYTBCVlF1VDZWNlFIZEJsajNkMEtHMTQ3YitEcXhRZVV5bURPNDNXNGRRYXIrVElqd21BZDB6OC9oNjV2ZjAveUx2M1BiNVhMcHJ1L3lkRG85czdFVDBJK1BqNmRLSzlWVUVJZUtXUVdQQU9ySjhMS2Q0dkUrdDkxWTNlN1VGbFdhdGcyVndKbmIrSFBtdHZtL3NmSzU5L09hV0YzeC9lUDFVUEh2QTVERFlEcFlYZmIwZHJ2MVYyRGtCa3h0dy90RVdWVmxYV2RDOXBGWXM1L2pmaDlkUy8xNnZXN3M2bFRHK1RmcXN4U0pIeGtYWHEvWGRyMWV1NExzZkQ2UDN2c1QzTjc3RGtMK3pQbTVqU2RLTDR6UjNBeFFkNnJIa0xrWWxTb3dzcnE3em56dTZ3U3dkc01KT1htQTVmQmNqeHRnTUdCWUhscjV6b2todHNNQ1RnWExRT1c0WEM2ZEV5RU1wckw4bUFRelhSZ2R1aXgyeVp6b3J4a1lzRG4zaEIxVmVNTEdzWHNWdGdsMnBXOFMzc3ZrMHZ3N1I0aE5hSHZ2NGNBQ2w1SEZ6d0lIMEtjNnp1NFhqRFBSL2pwQVZ4V3pPMVhrMkREYjN2VGN4ZUdVMWlXWkhrbUlEV3ppV0t2aXJDSjREcmF2czZJSi9HRzZjVHFXZFhEeStmQXJRRFZWa0xxa1ZqQW9aSUlUZG1tSXFYd3FhOTVOMytNR1lvWlFkUlZOTzUzWTF4UmtoTzE2dlk3ZXU1MDdDYTlsSm5iR3B4T2VtUWhTdy9BUXNtbXA1elU5QmlVOEc2d3ZYNzZNNi9VNlBqNCtkbzBCejRDcGdpa25UVWVEcXdsS0JtZzN1NE9WanJaMUErckFjZ2FlaldxNmVKQ3ZDWUZET05Td09nSFg0RVFSdzhseGJ6RE9kRUs2Z1ozSGsxYis4ZzJvMUpGdEtYeXYvZkVkVFh1V2pXWGRBWmlCcDZBRGVEckNGaWltN0I2WkZuZWVJN0d2bS9QTWtVRFg2N1c3eEk4YjBENy92OGRBOXFmTjVvYUNmNzRXWmpIMG1mMWNtZlkxWTBKVUZtVnJUV3U4dXprTmNMdEVqN3U1RlhCVGtmQzZHT0E1cThZTXhPOEtWdkY2c0FWR2RjclVic0tPRGNRS2tMTU9NZG1seHVtNjQyWXJQbTI2QWxoWlcxWUIxUityckdzd0U4VGFZQVdlVU14ZGYrV2p3U3ZaMkVmM3l0T3lmbjUrUHBWUEFhcU9uNDNNdE5CcXZtamp4YmpNNGxaalpZNGdxTk1JNWt0YVcvc1lLTndTKzlsRlF6R2lobU1DS1BhNytaMFY2RWIwR1Jtb2J0cFg4SmxqV3U1Rk1MTjVqYTZoRzlrd1FnWnFmNSsxTkg1VXh6a0ZSZUNkV2hKOFhkbEdVa3hPN0hSbFlSbTRtVk80M1c3dGVyMTJUUEpFdy9ybUVOM0w1U0tISVdaZzlteitwVW9LT1lxNWJKVEpkWDJnbWUxVWN4TVpRRmFFUUlsSGN0MzJNK1kxQnpHa0d1emZpeUFOOXordWdwbFoxc3ltQ3JEQ1lZa0d4RFRwSTlSekJ5MHJIeWVEVUMxbldhZVVhRDluNHhrTnlZTUJEWnR6WjNCKytmSmxZMjFYRkRPY0FSSmxhYk95aVMzdUNwTEk5anJaakNEa2FWdmNDQ2p3b2duS1NoV2R6WFpXbFpNdlZUZ0Q4THBxbENMcnFnYmNCK3FZd3JnS1lwVDBjY0NxYkt5Q1ZhbGtFYWJuL0Z5bm9nQ3JQS2ZxZjUxeEo3c0dCMlpYY1pteG9TT3p0angzMDBEWmk3YTAvMkFJUjBVbEJhZzlTdUR3NktjQXpsYUI3dkhadldwaks5MGR5cnE2Ykt5RFVaUWJSMEIwNWJpTFFrSEljU1VtZ0lLK1N3dXFnSENub2lvMlJRVTF5aitCbkJ5OXBwaFZLTEd5QzdaekZLMXB4V0srRThJaFZDV0xOL3VMdG5VVTRheW9ZTG9hQU56OEZkdGFTdlk0cFYwQkVXMmxzNjFjenFsbEJLcFR5S2dNQWhyWjFjZGMxUlJPdFBtdldOa2RjS1o3Wkt4YVdqaVBMSk1wcDdPWkt4QStycUcvb0pManhmMHBuSmxxTG9EWm8zZ3lVMG1LR3lzMnRhS2Vjai9kMUMrckpTcGxCcWxUeUFxZ1IrRDhLaktsbVJMMmd0VWNBZEN0c0wraWpDTlQxb3FxcWtIMk9IRWJHNXNERm5VZzVBYSt5TG91MlZVMXB0ajFTMlpRcXYxT1JaTjlJV3pSZmdhUkJ4S29CRThVV3lxbEpGdHJJYzBBeE5qU2plZDk5Q1RZL1hEZlN6Q3o1TTBJWm9WRXNXblBGTlRzbDhvb1ZDMVR6YkdncUZaTkRTZ1Z3S0srMXNHRE1LcXhaQ1dHVk1EeXNpRXIxalZTUUpVWXdqNWlIT2xUaGRIdDQ0U1FnOUNOK25sOEQ5ME5NSWdBZGdyNDZKcVJpUjlJOHZSZEZ2YnIxN20veXhVTUtqTkxNaVZVQUR3dTJDV0doaGkrRjU1VFdNOU05Y29nem1zMWRuTTR1T0YvTEFFWVdkY3FuTTd5Rm15cTNJZndtT1JPZDdZMWlGV3RPam9ZOFRvNDFtVFY1SXlzZ0ZGdVJ6c2JXRkdiTklJSkNEdjFkT280bFpHN2pXQndSRnRWVEt1V3llQ0J5SktPYW44b1ozZXA5WGRkTmwwdER1YXl3THo5Y1hQWWVEQUEwU3BrQk85c2JWY1RPVldsZFB2NHV5ekVrenhIdGp2b25Ib1NrRkVXTm9vMWQ4RGhjUXB1dGQycHBOb240QnpvQWlKMWhCRlFnMGRWdGRiR0hIRFFXdXNobU5FUXVrTE0yUU8xRzJZOGJnVFhxRmhjQkpqN0VqUGdjUHRzOFVTOHFQcFBCL2RYem5PaDVaNDM4dHpINWVjNlFnck9LclJSZktteXNCbVVEQitQaFlhYk1sVlBFUitHQ1NJVFR6cjdhbTJ0QXJIM2JnY0V6UEptK2NyNWpKNE5uSE5GRFZyRlhjSTVMZTlrNUpudytiZWRiVitGZlJ6WklIYU9PYU9zTFkwLzdVR3M1OERqckd3S01JTUZJR3pPRVcxL2pHc2RBdENONmhFQUk0aEJlOVlYZVJST0JTVlBBVlBBcXZJTTVieDVoVktXQU1QNnpCUnkzaWVzY3JpZFZkRkJpbkJ4WERuRzJHUlkyWGJDdnAxbGh2R3RPOUJ4dTVoOTA4WFF1NDJsblNBck1GZGl6TWltOHV3UkN4UEdubk9TOGx3cG5iT2lEcVRBanNyUk4vUGNvQVNjQ2JhQUNxVk00MHlsbmpqVEJzK2J3V2xBRzIzL1VLYmRraXdLV0lRUEd6V2FjenBvU2x4UEVqODIyY05Xa3BTN0Z5enNEcnFwZmdwRzNqYWh3MnZnYmFTUUF4dUxXWll0N0p6eU5lOEpvWnBOQWN2REZPZHcwd3FZVDlBSzFyWnovRGRiU2xMUHAwcnlJeGdRSmxLOUFabEVxN0lPWHBvaGc5UElockNuZzg4SnNPeGlWNFpXQVlmZzRzaWt4LzhreTJaOWw4NjJ1cXdyZnNjSUg4K3VnVG1WR3lpZGRlVllVZ0VNbjRHWnpnMTRFd0lzaDlzeDJjS0tpV1hSZXVPRTVnekdPUWdkbFJLVlZkbGV2cWIyNzlYcTBRbnN0czJWRGFCTzBjb2V6c3J1V3RIQXB1NnNLRzRJQmhOMGFHVTJrTHJNS0dSVE4zSG1iQ0R3S1YxNHp2a01FREc0UWZaVnNwVmxhTlUybWhjNVRFWjNOMWgvenFUaGV1THBXMDVaV1RHVmpiM2Ribk5teEtaQm5OOEpxaWRhVkxLQU95QVJOTFMrTUI1NFoyK1ZhcW9NTEtyb1ZCbG5nZWZuVFBBY29ITldDU3ZsZkE4Q0kwSEVtQk5CbkJsWHlNcnpVN0E3V1ZtOTRQUHFRMmdtcUt4K1dER3NudmlsbWNTT0JKcU9LMW5ZeUFJenVBeWVzcTNVZFNLM0tmV2NZS0Q5NUhtZllPVTNxc2VyMkN0WUVVQStGcGZxZE52Z1BCWlVCaERyR09OUlZsUXNoOHJMY2FVQ3lrSEcwT09Vd1RsTEJyc2g1c29FTUdlemkxRTRIUlZ0MWljcDV3WkVGWGRpYkNrRzhZOHZYNzVzYk80RTBpb205eitoalNpT2Z5M0RocFhJdHBWaEUrVUdRZHZvV2p0Q2htckdIZjRZQXpLZ0JObkd0dUp4RkNlR2RoVUFmUUxMSzhrQllBUDZndkZKWmFqTUczWGt5Y3k4S3VDMHE0RXl5bXd0d2R4ZHYyTTBtSUJ0SzBMS25mNjQwajAwQXVxNGdVa2RXR2xoczIycUpjNmRaQ3NMMTlveG5sVEpHNFNZVlJJR3BEOFRQRkJ1TTZPRWxiUzFwbGRpZDRtR0F5TjZaSXVwYkM1YlhKTjlmZHBiVGhTeExVYUk4SUcxWElZQnhXM1RqczZLUW9zS2N4ZnhjUW1kbndSR00xMEduRmNDeTJYWXVuTE15QWtkZ2s0bWVQaWN6c0x5Z3RoY0J1dDZnb09xUzdZVkZYQURMamFvc0I2czZvZmNaV0FaU0lSWXFTVWtpell3dHRZYWIzdlVPUTl3MkhSeElJZzhXd1JWZUU2OHhpNFV0TDN6UnBoeHBsend1WnJjcVlDcTFJM2pQSTVkbkpJeWdFb2hNYlBxVkpTenJ3enhCSlRzNXpOK1JlVVNneGlrUFFWRjNKVkJlTlF4YkhFTnJFTU52RWRGWlZWOWxIOStPUkdFc05aUXB5VE5jNEMzQUc3WEY0bmd6cStEck8yemJ1YWFPWGdkYUZjZGtFb3RvU0ZCVlgycUowQzhPV1plRzRLR2xwZ2hBMFhmVE9QQ3FWMnFxd1EyNlFXZkYyUE1MaEkydzFsVkFhMmFQc1lkMHphMjVNUVJ3Z2NaTjZ1UURDaStaeGlENFhFTTJrWnhPVDQxRm5abmFSbGNwWm91emxScXFkYlFWV29wUW9TQjU4UlY1MGxCTnJIaS9Bd1hTNUxyd0RWbHBZM0ZjM0J5aVlHYzUyVHJpc3Q2a09YZHdJbkFRdEpwcDVRY2h5YXF1WU9WN1N1K2Z4Vk1hVjNkYzBSRTJTNm1VWTBnTHQycE1jWXFyS0lROXcybDFncFFVTXRRWWNtbWJ0NURUTnhkaG5VQ2pRcXRiSzlTVVN6dnJDMG1taGhFMWUyRlMyK294eXB5L1pBU3V0a210angzdmNCQzI0UFg2NW5icWtCQ1JoZmpTOWtJWVBuZWU4Y01hZ1ZPaEkvM1QxZkFtZHRBV1pzQ3N3VEpDa1FWTmEwcVdLU0tQT3BIQVVoRDlEcmJWY3lvWWt3cWh2aDE3dllBYXlYTFF5S0dZZHhsVURGcDQ5NHJCWFJqWWdPMTdERFlldE5JVWovZXpwNlMwbG5scEV3c1dtSk1rT3dzS1hlWktFQWpJSG4wRVFKSVNhUkJjTzZVTUlOejdwL2JFampudzRmdCt4bUR2a3N4WDRHMnJJcmlzN3FhZUt3QUZNUDJPaTduNGNyaXVad3RwU1V3cGZMeFNuT1JTcklxdXNjNVpGYVh5c3FSV2ppWjJEeUFXRUlMMzV0VlNvUUVsRkFDak9lR0dTRTdBSEVRZ2RvL0xTdkNPZ0dCdmt4c21EYnZsUzNGcDV2aGFCMlRBR3FSS3JLS01yaExWcGFHekVWalowT1F4RGhhQ1RBK1F5UlIxZDE1YVF6ckpudEwzUmlic2lwakc2amxnTDR5cWJTMHNOWWcxZTg0dmhiQlZyRWxLNjRDVWNXWVhEZkt4aHBJdXhpVkpaVXhzYk15L3VSQktUTlJRNGtRM0xkUllMUzBySmpSUGxUUHFZNmdkSnNFRGMrYVFYQW4rSGdzTlVDYlJ1RjBPajB6d25BN2JXRGtiaE81RW5zMDBxZVFoUzFsYUJNbDVNL2NBYXhzTEY4ckt5cWwrVGY3RUxMRUd1L2l4aWltZEN2bzBUamZwakt3YWdnZW40ZWg1djdMb2tMS2JMdXl2SGhjWkc4ZGhHckVEeDdIZzkzWnBwSkY3cUJxTzNpVnZlWEVEUU5Jbnplb2U4WXE2ZVBhWkJaMkp2aU0zVzJVQUdvdGVrUkNBR3E0RWtGMVgzRE9uUjExeVJzQkwxdFJhMFBWY1ppTkZYWjJjMzRGc2t2b21JblFRNmx6cEpvWmJKeGs0M053S0pGQnF1SlNzckJ5SHlkeEtPblR4UUFTQm1TM2orSk1uc0hTbGEzRWM2SzlWV29KVm45emZqd09NN2hxWUFBcUpRd0UyYTNuQTQ4SjJRR2VnUmtwWk5pdlNZK3lzM0VrS2Q0b0pJd3N2SUhsM2NXZ0x0NWs0Tkg2T210TFdkcHVyT2t3RU11cFljN2VNdERSaE9jSTJ1aTVKaFZJelh6THl0by9HQVB1Wm95bzh3a29kdVZnSmdsQ3Q3T2hHYmdJRDRNcTRzaSs2M3pVUzFGdUZGWEZscXlhajJlbUhsTE1jQnFZdTBGTXVSMjhCYkI3bE94Uk1TaUNRWEZoQ0t1d2toWitwWURpR1NnYnNLS1Y4TWlTUnN1SFNJV005cmtsUmlJbFpadXFYanNRSzhvb1lKTWdxM0pLV1ZraEhiaHNWeEZVenRoT1dQa1lpamNieDU0SUtzU2RUK3VMcjNjckdLeW9ZZ0ZpR1I5aUJrNGtmbG9VWCtKSWxRUlFxYWJtcGduaHF0cFFwYjZSVlExV0g1RG5yUzRoRW9HWnFhZXJRMmRoRmJ6OFhlUHhTaG1EYm83MGVJU2pvb3JPMnZLOFNKWEk0U1VtRVU0eldLRHpVRHRXVFl3N3hYbGJTVEVqNEZSZzd6S25Lb0dSQUx2MEdzOVRnYzFCcEN5d0daUlFBdHFWejJ4ckJjQU16RXBmWndGU2EyRzVXMFFCRmpTTWFwV0FFRmEzSGNHTjdDeER6RUN5SWtKOTdxd3JxV05UV1ZvODc2UFBzalBrajJ3dmdyb001bExaS01FVEtWcWwvQ3ZuV1ZGaUZhL1N6SlVRd2tvWnNyNjdZNnZsU1JWMy8ydG1OVE9ZM3ZuYXhZd011b1BLcWR6UjF3N0lxSHltbFB4YUFUaGZVN0tvMlpYWWo0QVlKSEwra05kS3dSUVlFU1RSYTVmc1VaL3JWQzFUTVR5V1Z5WW9xTnR1emFIc015djJ0dm9hcnhkZnF3WWdVMWF4Rm8vY25xbDFGR3NxSyt1QVJPVjhCWDRHVThXY1pUQVRpMnE3UWN5aTBPMFYrR2hXQk1OUlVrbjhIMVNzV1ZFNUJ5M0dpMEVDcVVlSm9CZkF0RGE0YW1rZFhHMzdBR1A1R2dlYjg0cDdVYXpwb0tSemRGemVROEhrb0hHeHByS3kvSHBtNXQxMnA0N0o2eFRZREV6N3VJTkVYU3V4WVh2RnNrWUFjK3lTeEg5c2Y1ZnRLelU2SWJ3VkJjVUdnNWU1Rk1DRVhTRXJaUjB3R2F5VjE5d29NOWd1UGpUcUpkVlRxUjR1RTRuSm5MbGRXVmtFQ0NaTGQyVkxGK3h0YW1leDdJcGlyaVNEVXB2cnBuOWxyd0dNQ0h5cHBNSCtwczZMSUxzdUZHVWoxWEVPWGlxYnFTSFBVS25DbHBXVjY4a3F0VVJWTkRZNFROYW9jeWtvWWVUVTVuZ0dFUWEvUzFEbm5FNEFlWE1jS2pIUEFtRlZqQ0JFTmFleUxWTkhmcjNweDh4VXN0Sjk0aElwZkg0SEtFL2VEYUFySzZsU3lWVkZiZHQxZ3hUSVZrM3BwcFZsRlhpNHBFaFZCVE9icXVvaFU4NU1MWG4xaWFodlVrSEpqU0NNYzAxdExGdmVWVkJ4MERvZE02amZ0Q3U3RE90SXpZeHJjMHFwMUpHUDJheVlGejJHYjZIdk1yTzhjbkd0VjZHam0zdUltU2ZEMkdwV0s2dW93YlpHTXhGS1FDbzFwT010Y01YRnBSc3QraFhHb0FvbUYzc1NUQkdnVGdsYkJLV3dzUTN0WnFhWVNwMFoxQ2ltUkRXRmNDSlVQWUowMEJJNUZrS1lOb2lmdVF4bU44OFNXVlhXTE1hVXFxcWdDMEJtUUpSNnNrM3U5TkNmNmpZTFh4QWZxc1lFZ1ZMQWhSWTJBdGd0ZmxaTkZtRnloeGRyTGtBZFdsazREODhNMml4SHllcElkaE1IckcvaVIxWkd0cTBNR3BiRGJSUFlPWGVTWTFNNk55NFpzdHZHU2t0SytYYkZQQVRqMkQzNzFzYVBFc0FNWGhYcnNaMGttL1hTdGtoaE15QmZzYTZ1WEZaZTJWQ2UrWU1yMStHS2d3clF5TllxMVZSckIrRWl6QW93Nk5zZE5LY3lWRWtZZU03M3lzNnE0a0FIcDZCaUZrbFRrSXJWQzVvWVY3dXp3T0dDejRVSjBTdHEybFdNSnk0d3RiK1JldEw2dFpGaWNuSm1CdzVVakN2WFhNWlZKWDJNUWtiZitYTjVFV2Q3OFZ6OC9KRXNNWlRCaUtOenNtMWluTFJVUTc0SDROaWRhcUk2OGo1c0FGZ3hjUnZlQzdpZUxKWGZRWXhqWloyQ3NpV0Zld1pYSm1CSWxaMXRkdHJYNGhTdWF0ZUtzby9SWk90T0tXMm5tcTFvVHplSzZkUldBV3UyTlJWYjRocTBTWG0xR3Z0dWdIcmJyNUlYcW1Ta3RnNUN1REUyTVNsUHdzWTVrTkUyV3AzQXFpWmJXVkxBeGlCRisyaUJaYnVOajZNQjZyc01MQzdGeWFzYVlEeW83S2tvUHlFdHczcEVNWGZQdnhBSmkyakFRUWdqcnowckxJWlNXWmxJb05od2Q1eEs0QVI5bVlOaldBYUxybnVJbUplQlZOOXpCT1JPYlZ2YnIrbVRUZkZTRUpMU1JuSG83aEVKb0lpOE1GcWp4bXZnbUY1VVJaejR6TEZnWlo4Q3R1Mlg3Z2dWY2NLbTlnVnhJc09IcXhYZ05NS25GV1pZbmYxZEJuT2hheVhxMTdRd0ZsV1cwOWVOS3lWSkZtWHFhT05HQTVhQ2VnTWJKM1VVa0dZMWljM25LV2dqcThxZlZZR1FHMWdSdDZyczYyYTZIaXFxVU9xZGVzSzVObVg0bkdvZkpvaUUxZDBkRjlsVlZrdlQxL2tFRWFhQ29ZT3dGcGNWY29MTSs3NjY5UHhDOXJXcWt0SDBzV1VZbGQwVkNwdUJaL3N0VlJjR2d5OVdYMitVMVF0aGk5U3pBcVN4elpzeStPaUZ6QllueVNHVjZHa3U0NHJEOEJDT1pCVjNCdkQ1K0FLUkhOd01Fc0I2RXpIbkpwa1RBZWlVbEVHa2NFQ2VCNkdEWlRwNVlFSlRsdmRya254WWpUbGxNa2ZOdFh3RGpNN3VWaks1SlhVVW40M3JycXBLMmp5dGF4SFcwTTVHOERDOHJ0SE1ZczdLU2dkdVZRTUdUWUZxRnZWUzZya0Qzc0RKNDZhZmRZRndvcTExQU9LQ0JMaHZ3b1VnYzhJR0FOeWNSNmtuWnJkSlBkc3V4bnlqZmQzRm92VGxSTWRFZHRPbDVDTVY1RUhzWFFCaXM3VE93dklEWmFHajJWbnBiaDdjcEs2M1Z3WUVNTHdxYmp6eWw2OTlzYXdGRmtGMXlxalVVMzFIZkM2c1cxWkZWRnVYVlhWZ3o5a2VFYXcweXMxbFdmbSthelFBUVNXQStoS1lWZnNaalBuY0FjVUI5b0lheXkvVVpYUk5ja0RHamk3N0dzV2J2Qm82dFByV1BxT3lWa0JVcStJTmVxcHpOZFlzL3UwaWZoNXFtcHFJVyszM0pWU1Vjd1k3MEtMNFU5bFlkVTZsanRTbHM3bG1maTlnM1l6ZVFmVmthR0ZhVjNPRENuYUQyTjh3c0VERmtsRTNSek0zWmdoZFlrV0hzc3pxNzBGSWVjbktrVmt0OGV6TXpScTlia0d1S29qUkxCVlNvZDNZMXlQcUtnWVc3SlJRVFBWeXk1eElZTGpPZ3hnVDUyUktKVVkxZE9ySWlSZDRmdXRReC9BNUFjU21FanowdkZXcmtMenZiV0F1OUhPV2JHZ3hGazFWTlRwbkJLazZUZ3dpc0kvSGN4WVhQMXVBV083MlVMRmxCVHErYVN1MlZUVXM2aHJ4TTJDRitoRW9yMVZJQTlabUZVYWFiMWxTU2dac1ZzNHN4ekhsVkxvSkhyOUg0RGhPTlRrSTFYQzAvd2lZMk5vV0FHNVJsbkhGbnE2b0xjY3BRZGRNdUovTzE3SlZBNU9ITGkwQnFDenRxN1kxKyt1Y0NkOThxTEk4TUlIQlYvY0tqeFFUbWUzaEZCUzNNeUNxbkRzdXltMm84MEhqdkZGVHRyVVJtTmFHSnNtVmFoSW1qVHNVWEt0UVpUQVZzN012djgvK2Z6VXJaQVhjTEo2TTRrb2U2WFAwYjZTbVdXTkR6eVVwUThibCtMdFd4NHR1cVozNmNSWVYzeXVWeFBOd3ZJaXFpUUNTbXU3c3JnVHpSNm5reWhwQ2FyWHdGeTF2R2Q1aVAyY1kwNmxGcjVOamhoZzFZNitOQjI4ZnRiSzgzczhyZjdrTEpiS3dERlBiTGcyNWEwQWRaSkVpcXI1cGhpeEtNRGxSVXRjc3NxMWhyaUxxR29IK3plTmdWbTlPZW1qc0VUVjhKZEYwTkhua0lGeFdZMU9CNFlycDdydFdKN05nQUFBUFhrbEVRVlEzb05zNW5wbHlWZjh1MkZvTHUxSnJIdmVhWldRanFBa3NodEZhMmd6c1NHM1pwa2J2ZzNIYWZGOXNsUFBsbGRqRmxLODBHeXNtOE1yNE1QaG5lTldFTlBHakFJcG1pbFRQQVRkVFJUWGxDQllIWUFRdVB3QTM2eElwV3RHTjRxM1kyTWhpR3NVcHVTU25sRUpSRDhQb3JDN0NGWVZ3K0Y1MXFUaGdhYnhzVHhXekNHWTBaU3NiM2xmcUF5ME9QTmpOeTh4aVFRS3NIWUZRMkhCWlZ2VmJCdXEzbTFvV0thanFhb25zTTZ1WlVyNkNqWFdOWjBsNUUzaDNqVVJtYTZrUDNNSklpeTFMbStrYWhRcTQxTjJpWmphNXNqdGxMWU5aSFpySDZxVUdtNHZNYkRwNlJ3MkNGbXZ1eUZrckJjQ3lNdEZxQmFFQ21zSG9LOUJaMkxBL2xKY1JxU2FEcW5hV2JyWmRHYXozRExnSXZCbG40d29HenRieUpHcXNsd3hraGhIclRqVFlGWEN0T29LUzh1TGRvZlZkQWJPeWxHVTZubFlwWFdadHM0blhCcTZXeEppdE1Ob2tIVUpuYm5KcGxRbSthR3BZMmE1R01WMlFEMWhSdWJCUEZLZHVtZjVPSGtMSHowRjlsdUU1a2pCalJhMG5GRTVDVUdxSHczMk1talo2eGtnSU5WblNuWjFWWlN0SzJxS2xSYUxsUWdLN3VUcTdKRlhKd00rM1NPRUt5aFpOSSt0SjBJNXFNWXk5azJxSkQ3ZFZXZHFLWGEwQ0tOUjBDY2pnK0IySVl1MmZjQlpKWmtNRmdNMTFyMFg5MndpbGdoRkdnelZuZXhscUI3eEw5bVMyOVNpWVVWWTJuWE9aak5CUnN5RHNRUFJXVzVoclo0WGNkQzRIVldSYmpnSnI0c0ZvZks1U3pqUTdyaEkxVWViZFBkRWJqNnNxSXZUWlFaNXZhMDhyQUJzQVcwVXhlV3l0QWs3QTJLSjlacHh6Q2lvQjI0WEZ0WUFlWFl4cjZhblNxaExncHBFcVdiR3dMdW5UZ3JWK0lqV2xMMjlsamFBbDRFUU1Hc0VycDRhcGVaaXF1d1JYTFhBcU9DZXJ1MzJtbXlkYzZvV1RTV3BGQUdkemVUQjhSVEhWTUV0bE05MENiYlFDWWhQanEzZWdZcjFGR2RZSVFqaXVER1o1elovQXpvYktHT3lMeHRpNmM0Und0djJhbnlXbExJQ25sTGh4SlJYdDZBNWViREJXRk5PTmJ4V1oyZDAybW51NFM5WUVDcGVwcFYxelNXUkJXeEhZelZJdjFDWFNvdXdxcVgzakJCQkRaZFlRYnBUUVc0WlFsUzhyNWtINHN1U1JtZzIrKzNKTjEweDFQYUFtRWttdFlsRWRlR3BKRU02a091Q3FDUjIyb1N1amo1SVYySGRUMHpqNXByTEtUalhGQVBqZFFseXE3eElCeEFRUDV5TWN6RzRWeEFLdzBuNmlsWjJRQmNlMnBMdWxrdXh4cW5vSXpGZmdxeXFqaWw5UzFWTndCckZtZXllb3BzOHlPalpVeWJaZGZTOEN1YVRJSnVtenM1dE9EYU50THBGRFEvUGNKR3dlTGhtZUwxbkIwS3FpVURTY3NpVVZEODlEaTNIdHJLdFNVTHczUkxpeWdaRCs3c0Y4SlRPYmdZc3JHdkROVUZSR2wxaXkwTGwxWWtVYzJhSllNb2c5MjBJOHFXNllEQ2cxTXFrMEpISkZLWGtiZ2JScmVJK3FwWU5PWkhyVmNEVWJhN3Bqc3BoU0pOdEs2dXBnUk5BVm9PUzBtdWdCZU40YklaZ0hodVBaL3MxRU5hWDZLc1ZyK1lOcmgxTmI3aXBSMFBFNXpiTlJlZ0NickhSVXc2WWYwN2RMQkpsMWY4S0I5YXMyVjFuTnFBc2w2MkxCQmhlaHdhbGVya0htQjFKRklFWktTRXVzZGw1SlFqMW5KbEhYU0NGMzQyZ0o5Q1lHclhlbGtuSklYcVZQOHNEK3F0cGxDUjNYSDJxZktxMHlnTXArS25Wa0t4TmxaOG0yWWtJbFZNaUNuWFV3bDdxem5CS1N2UXozbTNQdDZvUWJYTzViNUZpeENoL2ZIeFVRVy9BRWNLNnpDTnFLUW5MOXN5d3FtS3V3dnFTWXpUL2FQVk5OcFZ5aHZSVzIxYXFjaUNzamRXdkJ3SUxVdmg1VnlDemJXb0MxcEpqSjY4MENXc2wrdWRLQjZUNVJ3RzFtbG9obmxwYmc0N2l6NVU5aGEwRkd0bVJMRllCdE85OXk5N0FwMHorWkRUQW9nNmtTTFpzTUhnL0lGa2tncDZDcHZVMlUwY1lWU2RubWtqd0JkT21YYnhUV05XenVJYmlwTWlvVnhFY2taRW9haFNPaXkyTTNLMGpjQzFMaFZEd2FxRzBadmtjV3FDbnJHNEdJeHlrcnFsYldkdzZMUXlCYVpSOEhtTFJJaFFXc0hzd0Q0MlpYVkxOa2Y5bCtGbFcwSFZRMmx3RnNDL1oxRmR6bFFSMEthUGZvK0ZkZnUrL2R3VlJJQ3UxQ0dSN0FFSWlBaGMrQVpVRjBrT0JhUHhtVXFnNGk2NHZRblU0bkZEWUo5TnorMWZWWHZlSDlxbXIra1BJTHg4b0tjUlYvQkZieGJFMEpNVDBrU0Q0dzZML2xOWThvY3NxYWdWZFUzQTNNanhoeGNHdXF6c1BINGlycGFvdzFxNk95clZqdnA5TnBjNTlFOTFMbGRib1lWekpXZGltV2ZBVzJTTkVLY0RhWDJGbUJMTEEvdUt4bG1oaDYxM0lzMVVSUUFwYktmdHR3eEwwMnE2T254NXBReFNiUG9qQWcrdjVoQW5ONkxIVlJEWElzdkt0UmppUzBxSlV5WlRBWFZiQUs4MkVsRkpXYVFkVm9xVUMxVW50N0JWYVRRdWRNNlN1cWV4alFKTjQrMGljYXh2L3V0Ykt2ODNFVGJUOEg4Z2pjT0t4T0ptYlVhNk9PVlhodDNkRlk2ckh2OVhvTnpGTGNlRUExbzgrcEttMExBSFBIWjJyWUtqRnEwaGZaRml4c3FISmdEM2VENW4rVTBrYjFtRmpYa24ybHZNU1NPc05FL0NkSUFLRjBTeXRxNnVyT0hVTjVnd2c0R1pvc2dibWdnTTV1Y3JhMnFyUzJJZzFjYmlCQmN4WXpnelVETkxDdkw4R2JaWE5wNk9SeTNMbVMrS2s4M3pSSUFLNkExaW9LYTJJOU5hcEl1aVVGZGZDOTc2NlBGWlV0cVVyNktiV2srelpVMWEvWnJJWEV6dHJqVE9mejdod0t6aUNlWElhcmFIdGJaSU16KzJwR2dhekNtdzRxV0FGdkVkaG9kWXAwWHEwcFY3RzFZV1lXYk80cWhHcTQyK1o4Qll0ckxXdmx1TlBwWkFlYUZGUzF2dWJQZ2JneHNxY3BuQWFzekJvdkthRm9EUThCR3RqZlVPbDROQUcybm1RVjA0ZmVKZ3VtdlgyZnNyUUVXWmdoTDBKblZkWWtuM0RPWkllUk44NlJxUFdDbXN2R1ZxRU1Sbnd4UUF4d1M4RU1ZbzNJem1ZMitCQ2NMcDRNS2l1eXVoSW1hbWxiWkZjTm9ObDd0cCtSSGQxOFpqUUlSS3lYZEZSaE45OC9oeUtxd1hXTm83TzF3aWFYb0hOMTA4UkVaWldFcTZncm5JZmp6ZWc4amRSZjFYRUw0a2tYYTViQmpLeG9LYWxqQmplSGxWeFE0R2F5Y3BXNGxET0FLdG5UeEhBdE9mek90WndIQU03c3FWWGtWNnl1NmthcDFuSGtYS3FXRi80WEhxamVuTktxQmpwUjNsMWNoM0VqZzErRXNnZFFoc2RHMEI0Rk05c1dBVldwdUF5aXdUUGxlWnh0OVZ5WlZTMnFYZlJlV3FUQWlscHI5QXBvV1RqeHltaXQ3TndWNEpUcmlaeU9BOUIwazdIRmZVTG91cm1LWUhWblJRdnFHTDVITUhkcUZjUjJxV3BtY0s2ZVR3eDJkaXBXcnZpRGlscitmS1dxM09XUldkSEt3QTRldTh3amNoYmVSekZpbHFqalpOM3VmQ3Bma0owL3NjVnBuWWs2TDBQSTc3bHhkV0NaODdXaVdtN0IvQUdxdVFTbnVqR0tzQjhDSm1pSnE4cTFwS0lWV3lxT2lUSzY2cjE4Qk44cjc0L0FFNzFmZEMzeVBTMk14ZE9wbkUxdGxWeEQ5Sm1WT29nZ04rcjRQakFYVkZQYTNFZzVqVkpHRlZVR05vbEgyMEdWclVCN0JPeVNXcTZXcVlRZFdSOTJwY0ZNWU13Y2tiU2dDS0NxRDY3RGlpV3UxZzhNUUM5QnlmY0ZxVzFMK2pMNzE0cU5DdXpub1N4dDBkYTJndFdOMUc4RjBCSzBOTjBudWltZWxVRjlkSWRBZmpPNDRVVDNDalFMb1VlTEhKRlRPM2dtcFJ1SUlPdndCUUNicU5lbzNxdFo5aUY2eFZLMTNHUmxvNHpxaW1xK0NHZFRpUjF1Ulk4b3FnRTAyaFpCYTc5a1pYUE1xdXhSSEtsYTJzYVpXTjRtUnFaVWowdkxDS2hraktucU9RSE51U1pWSm9LdkFxUzF3cEVxdXZXREMxQjJ5cHdyQ1BzUk1FUFZUT0RNTEpNRHY2cWVLWHdpMkpZVjVTcTRxS3l2Z0dzSENMaXVqMmpSNTlWOGdNcVNKMkZKWlJYRUhWUkhqM3NGUHJjdDZPcHFsVzFHcGF0UWR0MEd2d2ZNNm42M0luc0dWRmhKR2FCcWdxcUlWNklzWGxsWmd5U1BxNFIzYm50M3dpNWN2K2NOMnlxUUxXMVQ5NUtZVnNXV3RLazRjQjlXNTNXUVFmbFFZUjZXbDRIYUpaanZWRTBENXl2cStSS2daQ3M1cWRCRVA1c0Q5NGNBdlFMbFNnTmFTTUF0SHg4OEJ1TlE0MXpkRnNYMzB6S2JjczBNTEQvaWhrcFF6bDB3aVRxS0xUZmJLbUNteVlJQ25LMEliYWllQzRDRzlpU3lMUTdjSU1HUXdhdTZUS29xNjBBcGwzV040MExacGNhMUNLS0s5VlF5eUlFbjh3MEY4RjZDTDJoOG8zaXhHd0M3czdFV3pDT3FtY0FwWXhZRDRqc0F6VlMwc2wydDk4cEE3dnJLb3BoQ1ZTb25iWXBnSDZtdlNuMjRwVEJWNHNkdFYzQnRNcTVrODJ5K0lBRHZVSjB1QWxrQ1ZUeElhUG0rVU51L3FrVjRGMVR6SFhDR3JYSUFxSXRCS3lwcUs5OVZ0QU9WczY0TzRPYlg3cEhMVkNwWUhjUm13dkxSN1R2WUFLQkJONThMR1Z6RHVGeitoUWJXZ25jUXlDWkFrK1Zic1BTb3VmOTMyNjFpWmdtZkNwd1JiQXZxbVNxcmlVMlB3aGphb095WXF0SWVnVlhWaVRzbXl0YTZiR3lTcFkzZ3lScnBJeUFlYVdERHh0cHNYd0t5YWxNREtOUDdZQlhNcUVza1VzaTJ1QzhGTkFQeEFLVFZmVDFvNlZ6TTBFMGpGKzFyV2NVdUh2ZHlnN3Znb0ZwbFg4SHB2SHBNQ09NUlVQSHpaa0luc3FsRktOWC9FSU81MkUwU3hTek93b2IyVm1STFc1RDFYSVUwcmJnTTFBeldneUM3ZmU4Rzd4VUFLL3RhRUJhdDdsdXF0eVA3RW1zYUpRT2o1Rittcm5aZkN1WUNmQlVBV3dTaHlkNnBNWS92QUhHMVVxT1lwYkkvZ3k1VDBDTUttK1VPM2dGdUM4NWRnZkRWZWd1UERmSVRySUJMc0xyY2dkaDNDRmdGWmphS0o0SXYzRjhBTkVxdnV4UjF0VktPZ0xvQ2Exanhib0JBa2o2djdqL2ljRmJBN2Y0cmZSblFETFJWaUcxM2kwdnFCUXJZVnFCYkFEWlQwWnBpSG9TenZRcG9wS0lGUzNzRTFIZkJXbEhYZDBIN0xuQXJxdm91Z010bGpIQmdabmgzRW96L0JLakxNTDRaMkFxMCtoRUpyOWphVlVCYnZOekNJVWlyb0M3QVdtbUZ3NG81QUszTXRCNVZ5cFpNU0ZnczA1SnlHVndsd0Jxc0VHQUFhMlpVMUNqVWV4WEdzRTRyS3JpaWxCdkZ6T0tLbzNBdUFyb0U2UUZRVTN1OFlwTlh3UzVrKzFUWnQ1VXJ3b3VONEtpVUV3K2szWldEcDFSWEhOUnFYYjIxVHMzOTk0NXlaU2czVm5aRk5ROUNGM1hlWnlyNURnQlhLaXdDTWEyTXhlVERZWGdQMUZzZjlRTktaYzBrODFSSmszcjZFUTNyQ21CVnlMTDc1RWpaMXBJVkRIb0Z0aU9BSG9CMEJkVFZ5bHFCc0tLS1MrQWVCWEpWTFkrQ1hBU3VHdk8vQXVxN0d1RWpEZkdLZzFvS2Exei9kbW1pOUk5U1VHTmhsMEF0ZnVsSEFhd29Zcm5Ta21OWEFWdUdFaHJFVlh2VUYrQTVDdDJQcU5PakRldHluYTRDbWVVb2xtZVhMTjRBcTdDNVNqMTBRN3lqZ2wrdDZDTnhTUkhtSTVYK0Nwd3JlWUIzUWZkcW5hNHEyMUtkQnVjNEdvWnNuNDlaT09pVmlud0hxSzlXemp2Z2V3ZUVoMkFVNSt2dHhaOUNkOVdxa2g0OVYxOEU1b2o2dlZ5bjBSU3RBeUdJTzVlZFhSS2Q1QjBWR1ZYcTJ5cjN4WXArNVV0K0M0UUo0UDFOMzM5cFFNalJlamo0dmIvRGNyNnJRYzNPLzByam10WnBlWUNCaUNIZkNlbVJiTmhiSy9wTlVQYzN3Zkt5NWYyRDdPbEwzL3VQaHZlL29VNFQwRjhmK1ZOTTJ2eW9pdjBqSytLSFFmZEhxKzBibmN6NG96NzMvK1k2TGJLdzFvLzVCN2VPZjFSbC8wZHU5Qjl0bi85YnZyZi9qK3YwaDZ0dG4ydHAvci80ODE5eTQvenY1MzkxdXZ6emZ3RGlmejZwaFQxTVBnQUFBQUJKUlU1RXJrSmdnZz09KX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNze3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6MDttYXJnaW46M3B4IC0zcHg7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmhvdmVye3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmNvbG9yLXBpY2tlciAuY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzczpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6Izk5OX0uY29sb3ItcGlja2VyIC5jcC1hZGQtY29sb3ItYnV0dG9uLWNsYXNzOmRpc2FibGVkOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5jb2xvci1waWNrZXIgLmNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3N7cG9zaXRpb246YWJzb2x1dGU7dG9wOi01cHg7cmlnaHQ6LTVweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6MXB4IDFweCA1cHggIzMzM30uY29sb3ItcGlja2VyIC5jcC1yZW1vdmUtY29sb3ItYnV0dG9uLWNsYXNzOmJlZm9yZXtjb250ZW50OiJ4Ijtwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206My41cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEwcHh9LmNvbG9yLXBpY2tlciAuZXllZHJvcHBlci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2ZpbGw6I2ZmZjttaXgtYmxlbmQtbW9kZTpleGNsdXNpb259XG4nXSxlbmNhcHN1bGF0aW9uOjJ9KSxufSkoKSxyaGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7dGhpcy5pbmplY3Rvcj1lLHRoaXMuY2ZyPWksdGhpcy5hcHBSZWY9cix0aGlzLnZjUmVmPW8sdGhpcy5lbFJlZj1zLHRoaXMuX3NlcnZpY2U9YSx0aGlzLmRpYWxvZ0NyZWF0ZWQ9ITEsdGhpcy5pZ25vcmVDaGFuZ2VzPSExLHRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWY9ITEsdGhpcy5jcFdpZHRoPSIyMzBweCIsdGhpcy5jcEhlaWdodD0iYXV0byIsdGhpcy5jcFRvZ2dsZT0hMSx0aGlzLmNwRGlzYWJsZWQ9ITEsdGhpcy5jcElnbm9yZWRFbGVtZW50cz1bXSx0aGlzLmNwRmFsbGJhY2tDb2xvcj0iIix0aGlzLmNwQ29sb3JNb2RlPSJjb2xvciIsdGhpcy5jcENteWtFbmFibGVkPSExLHRoaXMuY3BPdXRwdXRGb3JtYXQ9ImF1dG8iLHRoaXMuY3BBbHBoYUNoYW5uZWw9ImVuYWJsZWQiLHRoaXMuY3BEaXNhYmxlSW5wdXQ9ITEsdGhpcy5jcERpYWxvZ0Rpc3BsYXk9InBvcHVwIix0aGlzLmNwU2F2ZUNsaWNrT3V0c2lkZT0hMCx0aGlzLmNwQ2xvc2VDbGlja091dHNpZGU9ITAsdGhpcy5jcFVzZVJvb3RWaWV3Q29udGFpbmVyPSExLHRoaXMuY3BQb3NpdGlvbj0iYXV0byIsdGhpcy5jcFBvc2l0aW9uT2Zmc2V0PSIwJSIsdGhpcy5jcFBvc2l0aW9uUmVsYXRpdmVUb0Fycm93PSExLHRoaXMuY3BPS0J1dHRvbj0hMSx0aGlzLmNwT0tCdXR0b25UZXh0PSJPSyIsdGhpcy5jcE9LQnV0dG9uQ2xhc3M9ImNwLW9rLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcENhbmNlbEJ1dHRvbj0hMSx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dD0iQ2FuY2VsIix0aGlzLmNwQ2FuY2VsQnV0dG9uQ2xhc3M9ImNwLWNhbmNlbC1idXR0b24tY2xhc3MiLHRoaXMuY3BFeWVEcm9wcGVyPSExLHRoaXMuY3BQcmVzZXRMYWJlbD0iUHJlc2V0IGNvbG9ycyIsdGhpcy5jcFByZXNldENvbG9yc0NsYXNzPSJjcC1wcmVzZXQtY29sb3JzLWNsYXNzIix0aGlzLmNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoPTYsdGhpcy5jcFByZXNldEVtcHR5TWVzc2FnZT0iTm8gY29sb3JzIGFkZGVkIix0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlQ2xhc3M9InByZXNldC1lbXB0eS1tZXNzYWdlIix0aGlzLmNwQWRkQ29sb3JCdXR0b249ITEsdGhpcy5jcEFkZENvbG9yQnV0dG9uVGV4dD0iQWRkIGNvbG9yIix0aGlzLmNwQWRkQ29sb3JCdXR0b25DbGFzcz0iY3AtYWRkLWNvbG9yLWJ1dHRvbi1jbGFzcyIsdGhpcy5jcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M9ImNwLXJlbW92ZS1jb2xvci1idXR0b24tY2xhc3MiLHRoaXMuY3BJbnB1dENoYW5nZT1uZXcgRyghMCksdGhpcy5jcFRvZ2dsZUNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFNsaWRlckNoYW5nZT1uZXcgRyghMCksdGhpcy5jcFNsaWRlckRyYWdFbmQ9bmV3IEcoITApLHRoaXMuY3BTbGlkZXJEcmFnU3RhcnQ9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJPcGVuPW5ldyBHKCEwKSx0aGlzLmNvbG9yUGlja2VyQ2xvc2U9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDYW5jZWw9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJTZWxlY3Q9bmV3IEcoITApLHRoaXMuY29sb3JQaWNrZXJDaGFuZ2U9bmV3IEcoITEpLHRoaXMuY3BDbXlrQ29sb3JDaGFuZ2U9bmV3IEcoITApLHRoaXMuY3BQcmVzZXRDb2xvcnNDaGFuZ2U9bmV3IEcoITApfWhhbmRsZUNsaWNrKCl7dGhpcy5pbnB1dEZvY3VzKCl9aGFuZGxlRm9jdXMoKXt0aGlzLmlucHV0Rm9jdXMoKX1oYW5kbGVJbnB1dChlKXt0aGlzLmlucHV0Q2hhbmdlKGUpfW5nT25EZXN0cm95KCl7bnVsbCE9dGhpcy5jbXBSZWYmJih0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmJiZ0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHRoaXMuY21wUmVmLmhvc3RWaWV3KSx0aGlzLmNtcFJlZi5kZXN0cm95KCksdGhpcy5jbXBSZWY9bnVsbCx0aGlzLmRpYWxvZz1udWxsKX1uZ09uQ2hhbmdlcyhlKXtlLmNwVG9nZ2xlJiYhdGhpcy5jcERpc2FibGVkJiYoZS5jcFRvZ2dsZS5jdXJyZW50VmFsdWU/dGhpcy5vcGVuRGlhbG9nKCk6ZS5jcFRvZ2dsZS5jdXJyZW50VmFsdWV8fHRoaXMuY2xvc2VEaWFsb2coKSksZS5jb2xvclBpY2tlciYmKHRoaXMuZGlhbG9nJiYhdGhpcy5pZ25vcmVDaGFuZ2VzJiYoImlubGluZSI9PT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5kaWFsb2cuc2V0SW5pdGlhbENvbG9yKGUuY29sb3JQaWNrZXIuY3VycmVudFZhbHVlKSx0aGlzLmRpYWxvZy5zZXRDb2xvckZyb21TdHJpbmcoZS5jb2xvclBpY2tlci5jdXJyZW50VmFsdWUsITEpLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lciYmImlubGluZSIhPT10aGlzLmNwRGlhbG9nRGlzcGxheSYmdGhpcy5jbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpKSx0aGlzLmlnbm9yZUNoYW5nZXM9ITEpLChlLmNwUHJlc2V0TGFiZWx8fGUuY3BQcmVzZXRDb2xvcnMpJiZ0aGlzLmRpYWxvZyYmdGhpcy5kaWFsb2cuc2V0UHJlc2V0Q29uZmlnKHRoaXMuY3BQcmVzZXRMYWJlbCx0aGlzLmNwUHJlc2V0Q29sb3JzKX1vcGVuRGlhbG9nKCl7aWYodGhpcy5kaWFsb2dDcmVhdGVkKXRoaXMuZGlhbG9nJiZ0aGlzLmRpYWxvZy5vcGVuRGlhbG9nKHRoaXMuY29sb3JQaWNrZXIpO2Vsc2V7bGV0IGU9dGhpcy52Y1JlZjtpZih0aGlzLmRpYWxvZ0NyZWF0ZWQ9ITAsdGhpcy52aWV3QXR0YWNoZWRUb0FwcFJlZj0hMSx0aGlzLmNwVXNlUm9vdFZpZXdDb250YWluZXImJiJpbmxpbmUiIT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkpe2xldCBvPXRoaXMuaW5qZWN0b3IuZ2V0KHRoaXMuYXBwUmVmLmNvbXBvbmVudFR5cGVzWzBdLFhuLk5VTEwpO28hPT1Ybi5OVUxMP2U9by52Y1JlZnx8by52aWV3Q29udGFpbmVyUmVmfHx0aGlzLnZjUmVmOnRoaXMudmlld0F0dGFjaGVkVG9BcHBSZWY9ITB9bGV0IGk9dGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoZFplKTtpZih0aGlzLnZpZXdBdHRhY2hlZFRvQXBwUmVmKXRoaXMuY21wUmVmPWkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpLHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jbXBSZWYuaG9zdFZpZXcpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jbXBSZWYuaG9zdFZpZXcucm9vdE5vZGVzWzBdKTtlbHNle2xldCByPVhuLmNyZWF0ZSh7cHJvdmlkZXJzOltdLHBhcmVudDplLmluamVjdG9yfSk7dGhpcy5jbXBSZWY9ZS5jcmVhdGVDb21wb25lbnQoaSwwLHIsW10pfXRoaXMuY21wUmVmLmluc3RhbmNlLnNldHVwRGlhbG9nKHRoaXMsdGhpcy5lbFJlZix0aGlzLmNvbG9yUGlja2VyLHRoaXMuY3BXaWR0aCx0aGlzLmNwSGVpZ2h0LHRoaXMuY3BEaWFsb2dEaXNwbGF5LHRoaXMuY3BGYWxsYmFja0NvbG9yLHRoaXMuY3BDb2xvck1vZGUsdGhpcy5jcENteWtFbmFibGVkLHRoaXMuY3BBbHBoYUNoYW5uZWwsdGhpcy5jcE91dHB1dEZvcm1hdCx0aGlzLmNwRGlzYWJsZUlucHV0LHRoaXMuY3BJZ25vcmVkRWxlbWVudHMsdGhpcy5jcFNhdmVDbGlja091dHNpZGUsdGhpcy5jcENsb3NlQ2xpY2tPdXRzaWRlLHRoaXMuY3BVc2VSb290Vmlld0NvbnRhaW5lcix0aGlzLmNwUG9zaXRpb24sdGhpcy5jcFBvc2l0aW9uT2Zmc2V0LHRoaXMuY3BQb3NpdGlvblJlbGF0aXZlVG9BcnJvdyx0aGlzLmNwUHJlc2V0TGFiZWwsdGhpcy5jcFByZXNldENvbG9ycyx0aGlzLmNwUHJlc2V0Q29sb3JzQ2xhc3MsdGhpcy5jcE1heFByZXNldENvbG9yc0xlbmd0aCx0aGlzLmNwUHJlc2V0RW1wdHlNZXNzYWdlLHRoaXMuY3BQcmVzZXRFbXB0eU1lc3NhZ2VDbGFzcyx0aGlzLmNwT0tCdXR0b24sdGhpcy5jcE9LQnV0dG9uQ2xhc3MsdGhpcy5jcE9LQnV0dG9uVGV4dCx0aGlzLmNwQ2FuY2VsQnV0dG9uLHRoaXMuY3BDYW5jZWxCdXR0b25DbGFzcyx0aGlzLmNwQ2FuY2VsQnV0dG9uVGV4dCx0aGlzLmNwQWRkQ29sb3JCdXR0b24sdGhpcy5jcEFkZENvbG9yQnV0dG9uQ2xhc3MsdGhpcy5jcEFkZENvbG9yQnV0dG9uVGV4dCx0aGlzLmNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcyx0aGlzLmNwRXllRHJvcHBlcix0aGlzLmVsUmVmLHRoaXMuY3BFeHRyYVRlbXBsYXRlKSx0aGlzLmRpYWxvZz10aGlzLmNtcFJlZi5pbnN0YW5jZSx0aGlzLnZjUmVmIT09ZSYmdGhpcy5jbXBSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpfX1jbG9zZURpYWxvZygpe3RoaXMuZGlhbG9nJiYicG9wdXAiPT09dGhpcy5jcERpYWxvZ0Rpc3BsYXkmJnRoaXMuZGlhbG9nLmNsb3NlRGlhbG9nKCl9Y215a0NoYW5nZWQoZSl7dGhpcy5jcENteWtDb2xvckNoYW5nZS5lbWl0KGUpfXN0YXRlQ2hhbmdlZChlKXt0aGlzLmNwVG9nZ2xlQ2hhbmdlLmVtaXQoZSksZT90aGlzLmNvbG9yUGlja2VyT3Blbi5lbWl0KHRoaXMuY29sb3JQaWNrZXIpOnRoaXMuY29sb3JQaWNrZXJDbG9zZS5lbWl0KHRoaXMuY29sb3JQaWNrZXIpfWNvbG9yQ2hhbmdlZChlLGk9ITApe3RoaXMuaWdub3JlQ2hhbmdlcz1pLHRoaXMuY29sb3JQaWNrZXJDaGFuZ2UuZW1pdChlKX1jb2xvclNlbGVjdGVkKGUpe3RoaXMuY29sb3JQaWNrZXJTZWxlY3QuZW1pdChlKX1jb2xvckNhbmNlbGVkKCl7dGhpcy5jb2xvclBpY2tlckNhbmNlbC5lbWl0KCl9aW5wdXRGb2N1cygpe2xldCBlPXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCxpPXRoaXMuY3BJZ25vcmVkRWxlbWVudHMuZmlsdGVyKHI9PnI9PT1lKTshdGhpcy5jcERpc2FibGVkJiYhaS5sZW5ndGgmJih0eXBlb2YgZG9jdW1lbnQ8InUiJiZlPT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudD90aGlzLm9wZW5EaWFsb2coKTp0aGlzLmRpYWxvZyYmdGhpcy5kaWFsb2cuc2hvdz90aGlzLmNsb3NlRGlhbG9nKCk6dGhpcy5vcGVuRGlhbG9nKCkpfWlucHV0Q2hhbmdlKGUpe3RoaXMuZGlhbG9nP3RoaXMuZGlhbG9nLnNldENvbG9yRnJvbVN0cmluZyhlLnRhcmdldC52YWx1ZSwhMCk6KHRoaXMuY29sb3JQaWNrZXI9ZS50YXJnZXQudmFsdWUsdGhpcy5jb2xvclBpY2tlckNoYW5nZS5lbWl0KHRoaXMuY29sb3JQaWNrZXIpKX1pbnB1dENoYW5nZWQoZSl7dGhpcy5jcElucHV0Q2hhbmdlLmVtaXQoZSl9c2xpZGVyQ2hhbmdlZChlKXt0aGlzLmNwU2xpZGVyQ2hhbmdlLmVtaXQoZSl9c2xpZGVyRHJhZ0VuZChlKXt0aGlzLmNwU2xpZGVyRHJhZ0VuZC5lbWl0KGUpfXNsaWRlckRyYWdTdGFydChlKXt0aGlzLmNwU2xpZGVyRHJhZ1N0YXJ0LmVtaXQoZSl9cHJlc2V0Q29sb3JzQ2hhbmdlZChlKXt0aGlzLmNwUHJlc2V0Q29sb3JzQ2hhbmdlLmVtaXQoZSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oWG4pLE0oZ3MpLE0oSXUpLE0oT2kpLE0oUmUpLE0ocUcpKX0sbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1siIiwiY29sb3JQaWNrZXIiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5oYW5kbGVDbGljaygpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUZvY3VzKCl9KSgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmhhbmRsZUlucHV0KG8pfSl9LGlucHV0czp7Y29sb3JQaWNrZXI6ImNvbG9yUGlja2VyIixjcFdpZHRoOiJjcFdpZHRoIixjcEhlaWdodDoiY3BIZWlnaHQiLGNwVG9nZ2xlOiJjcFRvZ2dsZSIsY3BEaXNhYmxlZDoiY3BEaXNhYmxlZCIsY3BJZ25vcmVkRWxlbWVudHM6ImNwSWdub3JlZEVsZW1lbnRzIixjcEZhbGxiYWNrQ29sb3I6ImNwRmFsbGJhY2tDb2xvciIsY3BDb2xvck1vZGU6ImNwQ29sb3JNb2RlIixjcENteWtFbmFibGVkOiJjcENteWtFbmFibGVkIixjcE91dHB1dEZvcm1hdDoiY3BPdXRwdXRGb3JtYXQiLGNwQWxwaGFDaGFubmVsOiJjcEFscGhhQ2hhbm5lbCIsY3BEaXNhYmxlSW5wdXQ6ImNwRGlzYWJsZUlucHV0IixjcERpYWxvZ0Rpc3BsYXk6ImNwRGlhbG9nRGlzcGxheSIsY3BTYXZlQ2xpY2tPdXRzaWRlOiJjcFNhdmVDbGlja091dHNpZGUiLGNwQ2xvc2VDbGlja091dHNpZGU6ImNwQ2xvc2VDbGlja091dHNpZGUiLGNwVXNlUm9vdFZpZXdDb250YWluZXI6ImNwVXNlUm9vdFZpZXdDb250YWluZXIiLGNwUG9zaXRpb246ImNwUG9zaXRpb24iLGNwUG9zaXRpb25PZmZzZXQ6ImNwUG9zaXRpb25PZmZzZXQiLGNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3c6ImNwUG9zaXRpb25SZWxhdGl2ZVRvQXJyb3ciLGNwT0tCdXR0b246ImNwT0tCdXR0b24iLGNwT0tCdXR0b25UZXh0OiJjcE9LQnV0dG9uVGV4dCIsY3BPS0J1dHRvbkNsYXNzOiJjcE9LQnV0dG9uQ2xhc3MiLGNwQ2FuY2VsQnV0dG9uOiJjcENhbmNlbEJ1dHRvbiIsY3BDYW5jZWxCdXR0b25UZXh0OiJjcENhbmNlbEJ1dHRvblRleHQiLGNwQ2FuY2VsQnV0dG9uQ2xhc3M6ImNwQ2FuY2VsQnV0dG9uQ2xhc3MiLGNwRXllRHJvcHBlcjoiY3BFeWVEcm9wcGVyIixjcFByZXNldExhYmVsOiJjcFByZXNldExhYmVsIixjcFByZXNldENvbG9yczoiY3BQcmVzZXRDb2xvcnMiLGNwUHJlc2V0Q29sb3JzQ2xhc3M6ImNwUHJlc2V0Q29sb3JzQ2xhc3MiLGNwTWF4UHJlc2V0Q29sb3JzTGVuZ3RoOiJjcE1heFByZXNldENvbG9yc0xlbmd0aCIsY3BQcmVzZXRFbXB0eU1lc3NhZ2U6ImNwUHJlc2V0RW1wdHlNZXNzYWdlIixjcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzOiJjcFByZXNldEVtcHR5TWVzc2FnZUNsYXNzIixjcEFkZENvbG9yQnV0dG9uOiJjcEFkZENvbG9yQnV0dG9uIixjcEFkZENvbG9yQnV0dG9uVGV4dDoiY3BBZGRDb2xvckJ1dHRvblRleHQiLGNwQWRkQ29sb3JCdXR0b25DbGFzczoiY3BBZGRDb2xvckJ1dHRvbkNsYXNzIixjcFJlbW92ZUNvbG9yQnV0dG9uQ2xhc3M6ImNwUmVtb3ZlQ29sb3JCdXR0b25DbGFzcyIsY3BFeHRyYVRlbXBsYXRlOiJjcEV4dHJhVGVtcGxhdGUifSxvdXRwdXRzOntjcElucHV0Q2hhbmdlOiJjcElucHV0Q2hhbmdlIixjcFRvZ2dsZUNoYW5nZToiY3BUb2dnbGVDaGFuZ2UiLGNwU2xpZGVyQ2hhbmdlOiJjcFNsaWRlckNoYW5nZSIsY3BTbGlkZXJEcmFnRW5kOiJjcFNsaWRlckRyYWdFbmQiLGNwU2xpZGVyRHJhZ1N0YXJ0OiJjcFNsaWRlckRyYWdTdGFydCIsY29sb3JQaWNrZXJPcGVuOiJjb2xvclBpY2tlck9wZW4iLGNvbG9yUGlja2VyQ2xvc2U6ImNvbG9yUGlja2VyQ2xvc2UiLGNvbG9yUGlja2VyQ2FuY2VsOiJjb2xvclBpY2tlckNhbmNlbCIsY29sb3JQaWNrZXJTZWxlY3Q6ImNvbG9yUGlja2VyU2VsZWN0Iixjb2xvclBpY2tlckNoYW5nZToiY29sb3JQaWNrZXJDaGFuZ2UiLGNwQ215a0NvbG9yQ2hhbmdlOiJjcENteWtDb2xvckNoYW5nZSIsY3BQcmVzZXRDb2xvcnNDaGFuZ2U6ImNwUHJlc2V0Q29sb3JzQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ3hDb2xvclBpY2tlciJdLGZlYXR1cmVzOltGdF19KSxufSkoKSxvaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbcUddLGltcG9ydHM6W01lXX0pLG59KSgpLGZaZT1bImNvbnRhaW5lciJdO2Z1bmN0aW9uIG1aZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsIm1hdC1zbGlkZXIiLDQpLFAoImlucHV0IixmdW5jdGlvbihyKXtyZXR1cm4gb2UoZSksc2UoUygpLmhhbmRsZVNpbmdsZVNsaWRlckNoYW5nZShyLnZhbHVlKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKCk7eSgiZGlzYWJsZWQiLCFlLmVuYWJsZWQpKCJtaW4iLGUubWluKSgibWF4IixlLm1heCkoInN0ZXAiLDEpKCJ2YWx1ZSIsZS5sb3dlclZhbHVlKX19ZnVuY3Rpb24gZ1plKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic3BhbiIsNSw2KSxPKDIsInNwYW4iLDcpKDMsInNwYW4iLDgpLF8oNCwic3BhbiIsOSksUCgibW91c2Vkb3duIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKCk7cmV0dXJuIHNlKG8uaGFuZGxlTW91c2VEb3duKHIsby5Qb3NpdGlvbi5MRUZUKSl9KSx2KCksXyg1LCJzcGFuIiw5KSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKTtyZXR1cm4gc2Uoby5oYW5kbGVNb3VzZURvd24ocixvLlBvc2l0aW9uLlJJR0hUKSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtDKDMpLFB0KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS5sb3dlclZhbHVlKSkoIndpZHRoIixlLmdldFRyYWNrV2lkdGgoKSksQygxKSxQdCgibGVmdCIsZS5nZXRUaHVtYlBvc2l0aW9uKGUubG93ZXJWYWx1ZSkpLGV0KCJhY3RpdmUiLGUuaXNUaHVtYkFjdGl2ZShlLlBvc2l0aW9uLkxFRlQpKSxDKDEpLFB0KCJsZWZ0IixlLmdldFRodW1iUG9zaXRpb24oZS51cHBlclZhbHVlKSksZXQoImFjdGl2ZSIsZS5pc1RodW1iQWN0aXZlKGUuUG9zaXRpb24uUklHSFQpKX19dmFyIG1jPSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5OT05FPTBdPSJOT05FIixuW24uTEVGVD0xXT0iTEVGVCIsbltuLlJJR0hUPTJdPSJSSUdIVCJ9KG1jfHwobWM9e30pKSxtYykpKCksc2hlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5jaGFuZ2VEZXRlY3Rvcj1lLHRoaXMudGlja0NvdW50PTIwLHRoaXMuZW5hYmxlZD0hMCx0aGlzLnJldHVybkludGVnZXJzPSExLHRoaXMucmFuZ2VWYWx1ZXNDaGFuZ2VkPW5ldyBHLHRoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkPW5ldyBHLHRoaXMuUG9zaXRpb249bWMsdGhpcy5hY3RpdmVUaHVtYj1tYy5OT05FLHRoaXMub2Zmc2V0WEZyb21PcmlnaW5PZkFjdGl2ZVRodW1iPTAsdGhpcy5uZ1Vuc3Vic2NyaWJlPW5ldyBrZX1nZXRUaHVtYlBvc2l0aW9uKGUpe2xldCBpPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKGUpLHI9dGhpcy5tYXgtdGhpcy5taW47cmV0dXJuIHI8PTA/IjUwJSI6KGktdGhpcy5taW4pL3IqMTAwKyIlIn1nZXRUcmFja1dpZHRoKCl7aWYobnVsbD09PXRoaXMudXBwZXJWYWx1ZSlyZXR1cm4iMCUiO2xldCBlPXRoaXMubWF4LXRoaXMubWluO3JldHVybiBlPD0wPyIwJSI6KHRoaXMuZ2V0Q2xpcHBlZFZhbHVlKHRoaXMudXBwZXJWYWx1ZSktdGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5sb3dlclZhbHVlKSkvZSoxMDArIiUifWdldENsaXBwZWRWYWx1ZShlKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZSx0aGlzLm1pbiksdGhpcy5tYXgpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX1uZ09uSW5pdCgpe19pKGRvY3VtZW50LCJtb3VzZW1vdmUiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VNb3ZlKGUpfSksX2koZG9jdW1lbnQsIm1vdXNldXAiLHtwYXNzaXZlOiEwfSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoZT0+e3RoaXMuaGFuZGxlTW91c2VPdXQoZSl9KX1oYW5kbGVNb3VzZURvd24oZSxpKXtlLnN0b3BQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZVRodW1iPWksdGhpcy5vZmZzZXRYRnJvbU9yaWdpbk9mQWN0aXZlVGh1bWI9Ni1lLm9mZnNldFh9Y2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKXtsZXQgYSx7bGVmdDppLHJpZ2h0OnJ9PXRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1lLmNsaWVudFgtaSt0aGlzLm9mZnNldFhGcm9tT3JpZ2luT2ZBY3RpdmVUaHVtYjtpZihudWxsIT09dGhpcy50aWNrQ291bnQmJnRoaXMudGlja0NvdW50PjApe2xldCBjPShyLWkpL3RoaXMudGlja0NvdW50O2E9TWF0aC5yb3VuZChzL2MpKmMvKHItaSl9ZWxzZSBhPXMvKHItaSk7bGV0IGw9dGhpcy5nZXRDbGlwcGVkVmFsdWUodGhpcy5taW4rKHRoaXMubWF4LXRoaXMubWluKSphKTtyZXR1cm4gdGhpcy5yZXR1cm5JbnRlZ2Vycz9NYXRoLnJvdW5kKGwpOk51bWJlcihsLnRvRml4ZWQoMTApKX1oYW5kbGVNb3VzZU1vdmUoZSl7aWYodGhpcy5hY3RpdmVUaHVtYj09PW1jLk5PTkV8fG51bGw9PT10aGlzLnVwcGVyVmFsdWUpcmV0dXJuO2xldCBpPXRoaXMuY2FsY3VsYXRlVmFsdWVGcm9tTW91c2VFdmVudChlKSxyPVt0aGlzLmxvd2VyVmFsdWUsdGhpcy51cHBlclZhbHVlXTt0aGlzLmFjdGl2ZVRodW1iPT09bWMuTEVGVD8oaT50aGlzLnVwcGVyVmFsdWUmJih0aGlzLmFjdGl2ZVRodW1iPW1jLlJJR0hUKSxyPVtpLHRoaXMudXBwZXJWYWx1ZV0pOihpPHRoaXMubG93ZXJWYWx1ZSYmKHRoaXMuYWN0aXZlVGh1bWI9bWMuTEVGVCkscj1bdGhpcy5sb3dlclZhbHVlLGldKSx0aGlzLm1heWJlTm90aWZ5TmV4dFJhbmdlVmFsdWVzKHIsIlNMSURFUiIpLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCl9bWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoZSxpKXtsZXRbcixvXT1lLnNvcnQoKHMsYSk9PnMtYSk7KHRoaXMubG93ZXJWYWx1ZSE9PXJ8fHRoaXMudXBwZXJWYWx1ZSE9PW8pJiZ0aGlzLnJhbmdlVmFsdWVzQ2hhbmdlZC5lbWl0KHtsb3dlclZhbHVlOnIsdXBwZXJWYWx1ZTpvLHNvdXJjZTppfSl9aGFuZGxlTW91c2VPdXQoZSl7dGhpcy5hY3RpdmVUaHVtYiE9PW1jLk5PTkUmJih0aGlzLmFjdGl2ZVRodW1iPW1jLk5PTkUsdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSl9aGFuZGxlU2luZ2xlU2xpZGVyQ2hhbmdlKGUpe3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOmUsc291cmNlOiJTTElERVIifSl9aGFuZGxlSW5wdXRDaGFuZ2UoZSxpKXtsZXQgcj1lLnRhcmdldCxvPXRoaXMuZ2V0Q2xpcHBlZFZhbHVlKE51bWJlcihyLnZhbHVlKSk7aXNOYU4obyl8fChpPT09bWMuTEVGVD9udWxsPT09dGhpcy51cHBlclZhbHVlP3RoaXMuc2luZ2xlVmFsdWVDaGFuZ2VkLmVtaXQoe3ZhbHVlOm8sc291cmNlOiJURVhUIn0pOnRoaXMubWF5YmVOb3RpZnlOZXh0UmFuZ2VWYWx1ZXMoW28sdGhpcy51cHBlclZhbHVlXSwiVEVYVCIpOiIiPT09ci52YWx1ZT90aGlzLnNpbmdsZVZhbHVlQ2hhbmdlZC5lbWl0KHt2YWx1ZTp0aGlzLmxvd2VyVmFsdWUsc291cmNlOiJURVhUX0RFTEVURUQifSk6dGhpcy5tYXliZU5vdGlmeU5leHRSYW5nZVZhbHVlcyhbdGhpcy5sb3dlclZhbHVlLG9dLCJURVhUIikpfWlzVGh1bWJBY3RpdmUoZSl7cmV0dXJuIHRoaXMuYWN0aXZlVGh1bWI9PT1lfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKG5uKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGItcmFuZ2UtaW5wdXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChmWmUsNSxSZSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5jb250YWluZXI9ci5maXJzdCl9fSxpbnB1dHM6e21pbjoibWluIixtYXg6Im1heCIsbG93ZXJWYWx1ZToibG93ZXJWYWx1ZSIsdXBwZXJWYWx1ZToidXBwZXJWYWx1ZSIsdGlja0NvdW50OiJ0aWNrQ291bnQiLGVuYWJsZWQ6ImVuYWJsZWQiLHJldHVybkludGVnZXJzOiJyZXR1cm5JbnRlZ2VycyJ9LG91dHB1dHM6e3JhbmdlVmFsdWVzQ2hhbmdlZDoicmFuZ2VWYWx1ZXNDaGFuZ2VkIixzaW5nbGVWYWx1ZUNoYW5nZWQ6InNpbmdsZVZhbHVlQ2hhbmdlZCJ9LGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWyJ0eXBlIiwibnVtYmVyIiwxLCJsb3dlci1pbnB1dCIsMywiZGlzYWJsZWQiLCJ2YWx1ZSIsImNoYW5nZSJdLFsidHlwZSIsIm51bWJlciIsMSwidXBwZXItaW5wdXQiLDMsImRpc2FibGVkIiwidmFsdWUiLCJjaGFuZ2UiXSxbImNsYXNzIiwic2luZ2xlLXNsaWRlciIsImNvbG9yIiwicHJpbWFyeSIsMywiZGlzYWJsZWQiLCJtaW4iLCJtYXgiLCJzdGVwIiwidmFsdWUiLCJpbnB1dCIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJyYW5nZSIsIiJdLFsiY29sb3IiLCJwcmltYXJ5IiwxLCJzaW5nbGUtc2xpZGVyIiwzLCJkaXNhYmxlZCIsIm1pbiIsIm1heCIsInN0ZXAiLCJ2YWx1ZSIsImlucHV0Il0sWzEsImNvbnRhaW5lciJdLFsiY29udGFpbmVyIiwiIl0sWzEsInNsaWRlci10cmFjayJdLFsxLCJzbGlkZXItdHJhY2stZmlsbCJdLFsxLCJ0aHVtYiIsMywibW91c2Vkb3duIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJpbnB1dCIsMCksUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uTEVGVCl9KSx2KCksXygxLCJpbnB1dCIsMSksUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oYW5kbGVJbnB1dENoYW5nZShvLGkuUG9zaXRpb24uUklHSFQpfSksdigpLEUoMixtWmUsMSw1LCJtYXQtc2xpZGVyIiwyKSxFKDMsZ1plLDYsMTIsIm5nLXRlbXBsYXRlIixudWxsLDMscXQpKSwyJmUpe2xldCByPSRlKDQpO3koImRpc2FibGVkIiwhaS5lbmFibGVkKSgidmFsdWUiLGkubG93ZXJWYWx1ZSksQygxKSx5KCJkaXNhYmxlZCIsIWkuZW5hYmxlZCkoInZhbHVlIixudWxsIT09aS51cHBlclZhbHVlP2kudXBwZXJWYWx1ZToiIiksQygxKSx5KCJuZ0lmIixudWxsPT09aS51cHBlclZhbHVlKSgibmdJZkVsc2UiLHIpfX0sZGVwZW5kZW5jaWVzOltCZSx1cF0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTppbmxpbmUtZ3JpZDtncmlkLWdhcDoxMHB4O2dyaWQtdGVtcGxhdGUtYXJlYXM6Imxvd2VyLWlucHV0IHVwcGVyLWlucHV0IiAic2xpZGVyIHNsaWRlciI7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7Zm9udC1zaXplOjA7bWluLXdpZHRoOjEwMHB4O3BhZGRpbmc6NnB4fWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQ7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjppbmhlcml0O292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlfS5sb3dlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOmxvd2VyLWlucHV0fS51cHBlci1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnVwcGVyLWlucHV0O2p1c3RpZnktc2VsZjpmbGV4LWVuZH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjtwYWRkaW5nOjBweH0uc2luZ2xlLXNsaWRlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5tYXQtc2xpZGVyLXdyYXBwZXJ7dG9wOjVweDtsZWZ0OjBweDtyaWdodDowcHh9ICAuc2luZ2xlLXNsaWRlci5tYXQtc2xpZGVyLWhvcml6b250YWx7aGVpZ2h0OjEycHh9LmNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Z3JpZC1hcmVhOnNsaWRlcjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWZsZXg7aGVpZ2h0OjEycHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5zbGlkZXItdHJhY2tbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMjYpO2hlaWdodDoycHg7d2lkdGg6MTAwJX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnNsaWRlci10cmFja1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoycHh9LnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDAsMCwwLC4yNik7Ym9yZGVyLXJhZGl1czoxMDAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2U7d2lkdGg6MTJweDt3aWxsLWNoYW5nZTp0cmFuc2Zvcm19Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLnRodW1iW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2FkaG93OjAgMCAwIDFweCByZ2JhKDI1NSwyNTUsMjU1LC4zKX0udGh1bWJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpncmFifS50aHVtYltfbmdjb250ZW50LSVDT01QJV06YWN0aXZle2N1cnNvcjpncmFiYmluZ30udGh1bWIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Y1N2MwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuc2xpZGVyLXRyYWNrLWZpbGxbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAudGh1bWJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2VmNmMwMH0nXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHlaZT1bInJlZ2V4U3RyaW5nSW5wdXQiXTtmdW5jdGlvbiBiWmUobix0KXtpZigxJm4mJihzbigwKSxfKDEsImxpIiwyMiksQSgyKSx2KCksYW4oKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDtDKDEpLHkoInRpdGxlIixlLm5hbWUpLEMoMSkseXQoZS5uYW1lKX19ZnVuY3Rpb24geFplKG4sdCl7aWYoMSZuJiYoXygwLCJsaSIsMjMpKDEsImVtIiksQSgyKSxCKDMsIm51bWJlciIpLHYoKSgpKSwyJm4pe2xldCBlPVMoKS4kaW1wbGljaXQ7QygyKSxqZSgiYW5kICIsVSgzLDEsZS5ydW5zLmxlbmd0aC01KSwiIG1vcmUiKX19ZnVuY3Rpb24gQ1plKG4sdCl7MSZuJiYoXygwLCJsaSIsMjQpKDEsImVtIiksQSgyLCJObyBydW5zIGFyZSBpbiB0aGUgZ3JvdXAiKSx2KCkoKSl9dmFyIE1aZT1mdW5jdGlvbihuKXtyZXR1cm57Ym9yZGVyQ29sb3I6bn19LHdaZT1mdW5jdGlvbihuKXtyZXR1cm57YmFja2dyb3VuZENvbG9yOm59fTtmdW5jdGlvbiBTWmUobix0KXtpZigxJm4mJihfKDAsInVsIiwxNikoMSwibGkiKSgyLCJsYWJlbCIpLE8oMywic3BhbiIsMTcpLF8oNCwiY29kZSIsMTgpLEEoNSksdigpKCksXyg2LCJ1bCIpLEUoNyxiWmUsMywyLCJuZy1jb250YWluZXIiLDE5KSxCKDgsInNsaWNlIiksRSg5LHhaZSw0LDMsImxpIiwyMCksRSgxMCxDWmUsMywwLCJsaSIsMjEpLHYoKSgpKCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQ7eSgibmdTdHlsZSIsT24oMTEsTVplLGUuY29sb3IpKSxDKDMpLHkoIm5nU3R5bGUiLE9uKDEzLHdaZSxlLmNvbG9yKSksQygxKSx5KCJ0aXRsZSIsZS5ncm91cElkKSxDKDEpLHl0KGUuZ3JvdXBJZCksQygyKSx5KCJuZ0Zvck9mIixKMyg4LDcsZS5ydW5zLDAsNSkpLEMoMikseSgibmdJZiIsZS5ydW5zLmxlbmd0aD41KSxDKDEpLHkoIm5nSWYiLDA9PT1lLnJ1bnMubGVuZ3RoKX19ZnVuY3Rpb24gRVplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE0KSxFKDEsU1plLDExLDE1LCJ1bCIsMTUpLHYoKSksMiZuKXtsZXQgZT1TKDIpO0MoMSkseSgibmdGb3JPZiIsZS5jb2xvclJ1blBhaXJMaXN0KX19ZnVuY3Rpb24gVFplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDI1KSxBKDEsIiBUaGVyZSBhcmUgbm8gcnVucyBtYXRjaGluZyB0aGUgcmVnZXgsICIpLF8oMiwiY29kZSIpLEEoMyksdigpLEEoNCwiLiBQbGVhc2UgY2hlY2sgaWYgeW91ciByZWdleCBzdHJpbmcgaXMgY29ycmVjdC4gIiksdigpKSwyJm4pe2xldCBlPVMoMik7QygzKSxqZSgiLyIsZS5yZWdleFN0cmluZywiLyIpfX1mdW5jdGlvbiBEWmUobix0KXtpZigxJm4mJihfKDAsImRpdiIsMTApKDEsImg0IiksQSgyLCJDb2xvciBncm91cCBwcmV2aWV3IiksdigpLF8oMywiZGl2IiwxMSksRSg0LEVaZSwyLDEsImRpdiIsMTIpLEUoNSxUWmUsNSwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxMyxxdCksdigpKCkpLDImbil7bGV0IGU9JGUoNiksaT1TKCk7Qyg0KSx5KCJuZ0lmIixpLmNvbG9yUnVuUGFpckxpc3QubGVuZ3RoKSgibmdJZkVsc2UiLGUpfX12YXIgYWhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLmRpYWxvZ1JlZj1lLHRoaXMuaG9zdEVsUmVmPWksdGhpcy5vblNhdmU9bmV3IEcsdGhpcy5yZWdleElucHV0T25DaGFuZ2U9bmV3IEcsdGhpcy50aW1lT3V0SWQ9MH1yZXNldEZvY3VzKCl7dGhpcy5ob3N0RWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dGhpcy5yZWdleFN0cmluZ0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1vbkVudGVyKGUpe3RoaXMub25TYXZlQ2xpY2soZSksdGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1vblNhdmVDbGljayhlKXt0aGlzLm9uU2F2ZS5lbWl0KGUpfWZpbGxFeGFtcGxlKGUpe3RoaXMucmVnZXhTdHJpbmc9ZSx0aGlzLnJlZ2V4SW5wdXRDaGFuZ2UoZSl9cmVnZXhJbnB1dENoYW5nZShlKXt0aGlzLnJlZ2V4SW5wdXRPbkNoYW5nZS5lbWl0KGUpfWhhbmRsZUZvY3VzT3V0KCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZU91dElkKSx0aGlzLnRpbWVPdXRJZD1zZXRUaW1lb3V0KHRoaXMucmVzZXRGb2N1cy5iaW5kKHRoaXMpLDApfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHR1KSxNKFJlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoeVplLDcpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkucmVnZXhTdHJpbmdJbnB1dD1yLmZpcnN0KX19LGlucHV0czp7cmVnZXhTdHJpbmc6InJlZ2V4U3RyaW5nIixjb2xvclJ1blBhaXJMaXN0OiJjb2xvclJ1blBhaXJMaXN0In0sb3V0cHV0czp7b25TYXZlOiJvblNhdmUiLHJlZ2V4SW5wdXRPbkNoYW5nZToicmVnZXhJbnB1dE9uQ2hhbmdlIn0sZGVjbHM6MzAsdmFyczoyLGNvbnN0czpmdW5jdGlvbigpe2xldCB0O3JldHVybiB0PSRsb2NhbGl6ZWA6Q29sb3IgUnVucyBieSBSZWdleCBRdWVyeeKQnzE1ZWQ5ZjZmZDJkNDkwNmE0ODAzZmMxMjU1ZGUzYzVkYjJjNTY1MzDikJ85MDg4OTg1MTEzOTYwMzEyODA4OkNvbG9yIFJ1bnMgYnkgUmVnZXggUXVlcnlgLFtbMSwicmVnZXgtZWRpdC1kaWFsb2ciLDMsImZvY3Vzb3V0Il0sWyJtYXQtZGlhbG9nLXRpdGxlIiwiIl0sWyJtYXRJbnB1dCIsIiIsImFyaWEtbGFiZWwiLHQsImNka0ZvY3VzSW5pdGlhbCIsIiIsMywidmFsdWUiLCJrZXlkb3duLmVudGVyIiwiaW5wdXQiXSxbInJlZ2V4U3RyaW5nSW5wdXQiLCIiXSxbMSwiZXhhbXBsZS1kZXRhaWxzIl0sWzMsImNsaWNrIl0sWyJjbGFzcyIsImdyb3VwLWNvbnRhaW5lciIsNCwibmdJZiJdLFsibWF0LWRpYWxvZy1hY3Rpb25zIiwiIiwiYWxpZ24iLCJlbmQiXSxbIm1hdC1idXR0b24iLCIiLCJtYXQtZGlhbG9nLWNsb3NlIiwiIl0sWyJtYXQtcmFpc2VkLWJ1dHRvbiIsIiIsImNvbG9yIiwicHJpbWFyeSIsIm1hdC1kaWFsb2ctY2xvc2UiLCIiLDMsImNsaWNrIl0sWzEsImdyb3VwLWNvbnRhaW5lciJdLFsxLCJncm91cGluZy1wcmV2aWV3Il0sWyJjbGFzcyIsIm1hdGNoLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJlbXB0eSIsIiJdLFsxLCJtYXRjaC1jb250YWluZXIiXSxbImNsYXNzIiwiZ3JvdXAiLDMsIm5nU3R5bGUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJncm91cCIsMywibmdTdHlsZSJdLFsxLCJjb2xvci1zd2F0Y2giLDMsIm5nU3R5bGUiXSxbMSwiZ3JvdXAtaWQiLDMsInRpdGxlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb3JlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLW1hdGNoIiw0LCJuZ0lmIl0sWzMsInRpdGxlIl0sWzEsIm1vcmUiXSxbMSwibm8tbWF0Y2giXSxbMSwid2FybmluZyJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPVBlKCk7XygwLCJkaXYiLDApLFAoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBpLmhhbmRsZUZvY3VzT3V0KCl9KSxfKDEsImgxIiwxKSxBKDIsIkNvbG9yIHJ1bnMgYnkgcmVnZXgiKSx2KCksXygzLCJtYXQtZGlhbG9nLWNvbnRlbnQiKSg0LCJwIiksQSg1LCJFbnRlciBhIHJlZ2V4IHdpdGggY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhZ2FpbnN0IHJ1biBuYW1lczoiKSx2KCksXyg2LCJtYXQtZm9ybS1maWVsZCIpKDcsImlucHV0IiwyLDMpLFAoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKHMpe3JldHVybiBpLm9uRW50ZXIocy50YXJnZXQudmFsdWUpfSkoImlucHV0IixmdW5jdGlvbihzKXtyZXR1cm4gaS5yZWdleElucHV0Q2hhbmdlKHMudGFyZ2V0LnZhbHVlKX0pLHYoKSgpKCksXyg5LCJkaXYiLDQpKDEwLCJwIiksQSgxMSwnIEVhY2ggbWF0Y2hpbmcgcnVuIHdpbGwgYmUgYXNzaWduZWQgYSBjb2xvciBiYXNlZCBvbiB0aGUgImtleSIgZm9ybWVkIGJ5IGl0cyBtYXRjaGVzIHRvIHRoZSBjYXB0dXJpbmcgZ3JvdXBzLiAnKSxPKDEyLCJiciIpLF8oMTMsImJ1dHRvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZmlsbEV4YW1wbGUoIih0cmFpbnxldmFsKSIpfSksQSgxNCwiIFRyeSAiKSxfKDE1LCJjb2RlIiksQSgxNiwiKHRyYWlufGV2YWwpIiksdigpKCksQSgxNywiIHRvIGFzc2lnbiBhbGwgcnVucyBjb250YWluaW5nICIpLF8oMTgsImNvZGUiKSxBKDE5LCJ0cmFpbiIpLHYoKSxBKDIwLCIgdG8gb25lIGNvbG9yIGFuZCBhbGwgcnVucyBjb250YWluaW5nICIpLF8oMjEsImNvZGUiKSxBKDIyLCJldmFsIiksdigpLEEoMjMsIiB0byBhbm90aGVyIGNvbG9yLiAiKSx2KCkoKSxFKDI0LERaZSw3LDIsImRpdiIsNiksXygyNSwiZGl2Iiw3KSgyNiwiYnV0dG9uIiw4KSxBKDI3LCJDYW5jZWwiKSx2KCksXygyOCwiYnV0dG9uIiw5KSxQKCJjbGljayIsZnVuY3Rpb24oKXtvZShyKTtsZXQgcz0kZSg4KTtyZXR1cm4gc2UoaS5vblNhdmVDbGljayhzLnZhbHVlKSl9KSxBKDI5LCIgU2F2ZSAiKSx2KCkoKSgpfTImZSYmKEMoNyksWmkoInZhbHVlIixpLnJlZ2V4U3RyaW5nKSxDKDE3KSx5KCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsenUscGQsX24sVDIsRnRlLEQyLEEyLFVoLG5aLFFsXSxzdHlsZXM6WyIuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO3BhZGRpbmc6MDtib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2NvbG9yOiMxOTc2ZDJ9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmV4YW1wbGUtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzQyYTVmNX0uZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojN2IxZmEyfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5leGFtcGxlLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXTp2aXNpdGVkLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZXhhbXBsZS1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV06dmlzaXRlZHtjb2xvcjojYmE2OGM4fS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxMHB4IDB9Lmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxMHB4fS5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MTYxNjE7Zm9udC1zaXplOi45ZW19Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfS5ncm91cGluZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7bWF4LWhlaWdodDo1MHZoO292ZXJmbG93LXk6YXV0bztwYWRkaW5nOjIwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmdyb3VwaW5nLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBpbmctcHJldmlld1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjNTU1fS5tYXRjaC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7ZGlzcGxheTpncmlkO2ZsZXgtd3JhcDp3cmFwO2dhcDoxMHB4O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMiwgbWlubWF4KDUwJSwgMWZyKSl9LmNvbG9yLXN3YXRjaFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNoYWRvdzowIDAgMnB4ICMwMDA7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE1cHg7d2lkdGg6MTVweH11bFtfbmdjb250ZW50LSVDT01QJV17bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZzowfW1hdC1mb3JtLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjowO3BhZGRpbmc6MTBweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6Z3JpZDtnYXA6MTBweDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWF4LWNvbnRlbnQgYXV0bztwYWRkaW5nOjVweCAwfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICBsYWJlbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgbGFiZWxbX25nY29udGVudC0lQ09NUCVdICAgLmdyb3VwLWlkW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6Ljk1ZW07b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICB1bFtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOi45ZW19Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHVsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGxpW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9Lmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uby1tYXRjaFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYxNjE2MTttYXJnaW4tdG9wOjVweH1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm1vcmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC5ncm91cFtfbmdjb250ZW50LSVDT01QJV0gICAubm8tbWF0Y2hbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZ3JvdXBbX25nY29udGVudC0lQ09NUCVdICAgLm5vLW1hdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC43KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLGxoZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLnN0b3JlPWUsdGhpcy5kaWFsb2dSZWY9aSx0aGlzLnRlbnRhdGl2ZVJlZ2V4U3RyaW5nJD1uZXcga2UsdGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckPVFhKCgpPT5KdCh0aGlzLnN0b3JlLnNlbGVjdChZSSkucGlwZShRdCgxKSksdGhpcy50ZW50YXRpdmVSZWdleFN0cmluZyQpKS5waXBlKHpuKCIiKSksdGhpcy5jb2xvclJ1blBhaXJMaXN0JD1RYSgoKT0+dGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckLnBpcGUoSHIoNTAwKSxZZShvPT57dHJ5e2xldCBzPW5ldyBSZWdFeHAobyk7cmV0dXJuIEJvb2xlYW4ocyl9Y2F0Y2h7cmV0dXJuITF9fSksZnIodGhpcy5hbGxSdW5zJCx0aGlzLnJ1bklkVG9FaWQkLHRoaXMuc3RvcmUuc2VsZWN0KE5hLmdldENvbG9yUGFsZXR0ZSksdGhpcy5zdG9yZS5zZWxlY3QoUXUpKSxMKChbbyxzLGEsbCxjXSk9PntsZXQgZD1HTSh7a2V5OnNyLlJFR0VYLHJlZ2V4U3RyaW5nOm99LHMsYSkscD1uZXcgTWFwLGg9W107Zm9yKGxldFtmLG1db2YgT2JqZWN0LmVudHJpZXMoZC5tYXRjaGVzKSl7bGV0IHg9cC5nZXQoZik7aWYoIXgpe2xldCBnPWwuY29sb3JzW3Auc2l6ZSVsLmNvbG9ycy5sZW5ndGhdO3g9Yz9nLmRhcmtIZXg6Zy5saWdodEhleCxwLnNldChmLHgpfWgucHVzaCh7Z3JvdXBJZDpmLGNvbG9yOngscnVuczptfSl9cmV0dXJuIGh9KSkpLnBpcGUoem4oW10pKSx0aGlzLmV4cGVyaW1lbnRJZHM9ci5leHBlcmltZW50SWRzLHRoaXMucnVuSWRUb0VpZCQ9THQodGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChTZWUse2V4cGVyaW1lbnRJZDpvfSkucGlwZShMKHM9Pih7ZXhwZXJpbWVudElkOm8scnVuSWRzOnN9KSkpKSkucGlwZShMKG89PntsZXQgcz17fTtmb3IobGV0e3J1bklkczphLGV4cGVyaW1lbnRJZDpsfW9mIG8pZm9yKGxldCBjIG9mIGEpc1tjXT1sO3JldHVybiBzfSkpLHRoaXMuYWxsUnVucyQ9THQodGhpcy5leHBlcmltZW50SWRzLm1hcChvPT50aGlzLnN0b3JlLnNlbGVjdChyZCx7ZXhwZXJpbWVudElkOm99KSkpLnBpcGUoTChvPT5vLmZsYXQoKSkpfW9uUmVnZXhJbnB1dE9uQ2hhbmdlKGUpe3RoaXMudGVudGF0aXZlUmVnZXhTdHJpbmckLm5leHQoZSl9b25TYXZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYXYoe2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzLGdyb3VwQnk6e2tleTpzci5SRUdFWCxyZWdleFN0cmluZzplfX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTSh0dSksTShjdykpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlZ2V4LWVkaXQtZGlhbG9nIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4U3RyaW5nIiwiY29sb3JSdW5QYWlyTGlzdCIsIm9uU2F2ZSIsInJlZ2V4SW5wdXRPbkNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwicmVnZXgtZWRpdC1kaWFsb2ctY29tcG9uZW50IiwwKSxQKCJvblNhdmUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uU2F2ZShvKX0pKCJyZWdleElucHV0T25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhJbnB1dE9uQ2hhbmdlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSx2KCkpLDImZSYmeSgicmVnZXhTdHJpbmciLFUoMSwyLGkuZ3JvdXBCeVJlZ2V4U3RyaW5nJCkpKCJjb2xvclJ1blBhaXJMaXN0IixVKDIsNCxpLmNvbG9yUnVuUGFpckxpc3QkKSl9LGRlcGVuZGVuY2llczpbYWhlLEdlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVdLCByZWdleC1lZGl0LWRpYWxvZy1jb21wb25lbnRbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9Il19KSxufSkoKTtmdW5jdGlvbiBQWmUobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDE0KX1mdW5jdGlvbiBSWmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJidXR0b24iLDEzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCk7cmV0dXJuIHNlKHIub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpyLkdyb3VwQnlLZXkuRVhQRVJJTUVOVH0pKX0pLF8oMSwic3BhbiIpLEUoMixQWmUsMSwwLCJtYXQtaWNvbiIsNyksdigpLF8oMywibGFiZWwiKSxBKDQsIkV4cGVyaW1lbnQiKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTt6ZSgiYXJpYS1jaGVja2VkIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCksQygyKSx5KCJuZ0lmIixlLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1lLkdyb3VwQnlLZXkuRVhQRVJJTUVOVCl9fWZ1bmN0aW9uIE9aZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIGtaZShuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTQpfWZ1bmN0aW9uIEZaZShuLHQpe2lmKDEmbiYmKF8oMCwibGFiZWwiKSxBKDEpLHYoKSksMiZuKXtsZXQgZT1TKCk7QygxKSx5dChlLnJlZ2V4U3RyaW5nKX19ZnVuY3Rpb24gTlplKG4sdCl7MSZuJiYoXygwLCJsYWJlbCIsMTUpLEEoMSwiKG5vbmUgc2V0KSIpLHYoKSl9dmFyIGNoZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlhbG9nPWUsdGhpcy5Hcm91cEJ5S2V5PXNyLHRoaXMub25Hcm91cEJ5Q2hhbmdlPW5ldyBHfW9uUmVnZXhTdHJpbmdFZGl0KCl7dGhpcy5kaWFsb2cub3BlbihsaGUse21heEhlaWdodDoiOTV2aCIsbWF4V2lkdGg6IjgwdnciLGRhdGE6e2V4cGVyaW1lbnRJZHM6dGhpcy5leHBlcmltZW50SWRzfX0pfW9uR3JvdXBCeVJlZ2V4Q2xpY2soKXt0aGlzLnJlZ2V4U3RyaW5nP3RoaXMub25Hcm91cEJ5Q2hhbmdlLmVtaXQoe2tleTpzci5SRUdFWCxyZWdleFN0cmluZzp0aGlzLnJlZ2V4U3RyaW5nfSk6dGhpcy5vblJlZ2V4U3RyaW5nRWRpdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKHZsKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaG93RXhwZXJpbWVudHNHcm91cEJ5OiJzaG93RXhwZXJpbWVudHNHcm91cEJ5IixleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixyZWdleFN0cmluZzoicmVnZXhTdHJpbmciLHNlbGVjdGVkR3JvdXBCeToic2VsZWN0ZWRHcm91cEJ5In0sb3V0cHV0czp7b25Hcm91cEJ5Q2hhbmdlOiJvbkdyb3VwQnlDaGFuZ2UifSxkZWNsczoyMix2YXJzOjgsY29uc3RzOltbIm1hdC1pY29uLWJ1dHRvbiIsIiIsInRpdGxlIiwiQ29sb3IgcnVucyBieS4uLiIsMywibWF0TWVudVRyaWdnZXJGb3IiXSxbInN2Z0ljb24iLCJwYWxldHRlXzI0cHgiXSxbMSwicnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5Il0sWyJncm91cEJ5TWVudSIsIm1hdE1lbnUiXSxbMSwibGFiZWwiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJleHBlcmltZW50IiwzLCJjbGljayIsNCwibmdJZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbXJhZGlvIiwiZGF0YS12YWx1ZSIsInJ1biIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiLDQsIm5nSWYiXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW1yYWRpbyIsImRhdGEtdmFsdWUiLCJyZWdleCIsMywiY2xpY2siXSxbIm1hdC1tZW51LWl0ZW0iLCIiLCJyb2xlIiwibWVudWl0ZW0iLCJkYXRhLXZhbHVlIiwicmVnZXgtZWRpdCIsMSwiZGlzcGxheS1yZWdleC1zdHJpbmciLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZWRpdF8yNHB4Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibm9uZS1zZXQtc3RyaW5nIiw0LCJuZ0lmIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtcmFkaW8iLCJkYXRhLXZhbHVlIiwiZXhwZXJpbWVudCIsMywiY2xpY2siXSxbInN2Z0ljb24iLCJkb25lXzI0cHgiXSxbMSwibm9uZS1zZXQtc3RyaW5nIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLE8oMSwibWF0LWljb24iLDEpLHYoKSxfKDIsIm1hdC1tZW51IiwyLDMpKDQsImRpdiIsNCksQSg1LCJDb2xvciBydW5zIGJ5IiksdigpLEUoNixSWmUsNSwyLCJidXR0b24iLDUpLF8oNywiYnV0dG9uIiw2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlDaGFuZ2UuZW1pdCh7a2V5OmkuR3JvdXBCeUtleS5SVU59KX0pLF8oOCwic3BhbiIpLEUoOSxPWmUsMSwwLCJtYXQtaWNvbiIsNyksdigpLF8oMTAsImxhYmVsIiksQSgxMSwiUnVuIiksdigpKCksXygxMiwiYnV0dG9uIiw4KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkdyb3VwQnlSZWdleENsaWNrKCl9KSxfKDEzLCJzcGFuIiksRSgxNCxrWmUsMSwwLCJtYXQtaWNvbiIsNyksdigpLF8oMTUsImxhYmVsIiksQSgxNiwiUmVnZXgiKSx2KCkoKSxfKDE3LCJidXR0b24iLDkpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVnZXhTdHJpbmdFZGl0KCl9KSxfKDE4LCJzcGFuIiksTygxOSwibWF0LWljb24iLDEwKSx2KCksRSgyMCxGWmUsMiwxLCJsYWJlbCIsMTEpLEUoMjEsTlplLDIsMCwibGFiZWwiLDEyKSx2KCkoKSksMiZlJiYoeSgibWF0TWVudVRyaWdnZXJGb3IiLCRlKDMpKSxDKDYpLHkoIm5nSWYiLGkuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSksQygxKSx6ZSgiYXJpYS1jaGVja2VkIixpLnNlbGVjdGVkR3JvdXBCeS5rZXk9PT1pLkdyb3VwQnlLZXkuUlVOKSxDKDIpLHkoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SVU4pLEMoMyksemUoImFyaWEtY2hlY2tlZCIsaS5zZWxlY3RlZEdyb3VwQnkua2V5PT09aS5Hcm91cEJ5S2V5LlJFR0VYKSxDKDIpLHkoIm5nSWYiLGkuc2VsZWN0ZWRHcm91cEJ5LmtleT09PWkuR3JvdXBCeUtleS5SRUdFWCksQyg2KSx5KCJuZ0lmIixpLnJlZ2V4U3RyaW5nKSxDKDEpLHkoIm5nSWYiLCFpLnJlZ2V4U3RyaW5nKSl9LGRlcGVuZGVuY2llczpbQmUsX24sR3QsaGQsbnUsZmRdLHN0eWxlczpbIi5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnl7Zm9udC1zaXplOjE2cHh9ICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5sYWJlbHtjb2xvcjojNjE2MTYxO2ZvbnQtc2l6ZTouOWVtO21hcmdpbjoxMHB4IDA7cGFkZGluZzowIDE2cHg7cG9pbnRlci1ldmVudHM6bm9uZX0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgYnV0dG9ue2Rpc3BsYXk6Z3JpZDtnYXA6MnB4IDEwcHg7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjIwcHggYXV0b30gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgbWF0LWljb257aGVpZ2h0OjIwcHg7d2lkdGg6MjBweH0gIC5ydW4tdGFibGUtY29sb3ItZ3JvdXAtYnkgLmRpc3BsYXktcmVnZXgtc3RyaW5ne3BhZGRpbmctbGVmdDo0MHB4fSAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZ3tjb2xvcjojNjE2MTYxfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgICAgLnJ1bi10YWJsZS1jb2xvci1ncm91cC1ieSAuZGlzcGxheS1yZWdleC1zdHJpbmcgLm5vbmUtc2V0LXN0cmluZywgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgICAucnVuLXRhYmxlLWNvbG9yLWdyb3VwLWJ5IC5kaXNwbGF5LXJlZ2V4LXN0cmluZyAubm9uZS1zZXQtc3RyaW5ne2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdWhlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2hvd0V4cGVyaW1lbnRzR3JvdXBCeSQ9dGhpcy5zdG9yZS5zZWxlY3QoZSQpLnBpcGUoTChpPT5pLmhhcyhoaS5DT01QQVJFX0VYUEVSSU1FTlQpKSksdGhpcy5zZWxlY3RlZEdyb3VwQnkkPXRoaXMuc3RvcmUuc2VsZWN0KEVlZSksdGhpcy5ncm91cEJ5UmVnZXhTdHJpbmckPXRoaXMuc3RvcmUuc2VsZWN0KFlJKX1vbkdyb3VwQnlDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChhdih7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsZ3JvdXBCeTplfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicnVucy1ncm91cC1tZW51LWJ1dHRvbiJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMifSxkZWNsczo0LHZhcnM6MTAsY29uc3RzOltbMywicmVnZXhTdHJpbmciLCJzZWxlY3RlZEdyb3VwQnkiLCJzaG93RXhwZXJpbWVudHNHcm91cEJ5IiwiZXhwZXJpbWVudElkcyIsIm9uR3JvdXBCeUNoYW5nZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwicnVucy1ncm91cC1tZW51LWJ1dHRvbi1jb21wb25lbnQiLDApLFAoIm9uR3JvdXBCeUNoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Hcm91cEJ5Q2hhbmdlKG8pfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoInJlZ2V4U3RyaW5nIixVKDEsNCxpLmdyb3VwQnlSZWdleFN0cmluZyQpKSgic2VsZWN0ZWRHcm91cEJ5IixVKDIsNixpLnNlbGVjdGVkR3JvdXBCeSQpKSgic2hvd0V4cGVyaW1lbnRzR3JvdXBCeSIsVSgzLDgsaS5zaG93RXhwZXJpbWVudHNHcm91cEJ5JCkpKCJleHBlcmltZW50SWRzIixpLmV4cGVyaW1lbnRJZHMpfSxkZXBlbmRlbmNpZXM6W2NoZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksVlplPVsiZmlsdGVyIl07ZnVuY3Rpb24gSFplKG4sdCl7MSZuJiZOaSgwKX1mdW5jdGlvbiBVWmUobix0KXsxJm4mJk5pKDApfXZhciB6WmU9ZnVuY3Rpb24obil7cmV0dXJue2l0ZW06bn19O2Z1bmN0aW9uIGpaZShuLHQpe2lmKDEmbiYmKHNuKDApLEUoMSxVWmUsMSwwLCJuZy1jb250YWluZXIiLDEyKSxhbigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0O1MoKTtsZXQgaT0kZSgxNCk7QygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixpKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLE9uKDIselplLGUpKX19ZnVuY3Rpb24gR1plKG4sdCl7MSZuJiYoXygwLCJkaXYiLDEzKSxPKDEsIm1hdC1zcGlubmVyIiwxNCksdigpKX1mdW5jdGlvbiBXWmUobix0KXsxJm4mJihfKDAsImRpdiIsMTUpLEEoMSwiTm8gUnVucyIpLHYoKSl9ZnVuY3Rpb24gcVplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDE1KSgxLCJzcGFuIiksQSgyLCdObyBydW5zIG1hdGNoICInKSxfKDMsImNvZGUiKSxBKDQpLHYoKSxBKDUsJyInKSx2KCkoKSksMiZuKXtsZXQgZT1TKCk7Qyg0KSx5dChlLnJlZ2V4RmlsdGVyKX19dmFyIFlaZT1mdW5jdGlvbigpe3JldHVybls1LDEwLDIwXX07ZnVuY3Rpb24gWFplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LXBhZ2luYXRvciIsMTYpLFAoInBhZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkub25QYWdpbmF0aW9uQ2hhbmdlLmVtaXQocikpfSksdigpfWlmKDImbil7bGV0IGU9UygpO3koInBhZ2VTaXplT3B0aW9ucyIsUXAoNCxZWmUpKSgicGFnZUluZGV4IixlLnBhZ2luYXRpb25PcHRpb24ucGFnZUluZGV4KSgicGFnZVNpemUiLGUucGFnaW5hdGlvbk9wdGlvbi5wYWdlU2l6ZSkoImxlbmd0aCIsZS5maWx0ZXJlZEl0ZW1zTGVuZ3RoKX19ZnVuY3Rpb24gUVplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwibWF0LWNoZWNrYm94IiwyNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKDMpLmhhbmRsZVBhZ2VUb2dnbGUoKSl9KSx2KCl9aWYoMiZuKXtsZXQgZT1TKDMpO3koImNoZWNrZWQiLGUuYWxsUGFnZUl0ZW1zU2VsZWN0ZWQoKSkoImluZGV0ZXJtaW5hdGUiLCFlLmFsbFBhZ2VJdGVtc1NlbGVjdGVkKCkmJmUuc29tZVBhZ2VJdGVtc1NlbGVjdGVkKCkpfX12YXIgZGhlPWZ1bmN0aW9uKG4pe3JldHVybnt0eXBlOm59fTtmdW5jdGlvbiBLWmUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDI3KSxBKDEsIkV4cGVyaW1lbnQiKSx2KCkpLDImbil7bGV0IGU9UygzKTt5KCJtYXQtc29ydC1oZWFkZXIiLE9uKDEsZGhlLGUuU29ydFR5cGUuRVhQRVJJTUVOVF9OQU1FKSl9fWZ1bmN0aW9uIFpaZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMjcpLEEoMSwiUnVuIiksdigpKSwyJm4pe2xldCBlPVMoMyk7eSgibWF0LXNvcnQtaGVhZGVyIixPbigxLGRoZSxlLlNvcnRUeXBlLlJVTl9OQU1FKSl9fWZ1bmN0aW9uIEpaZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIpLE8oMSwicnVucy1ncm91cC1tZW51LWJ1dHRvbiIsMjgpLHYoKSksMiZuKXtsZXQgZT1TKDMpO0MoMSkseSgiZXhwZXJpbWVudElkcyIsZS5leHBlcmltZW50SWRzKX19dmFyIHBoZT1mdW5jdGlvbihuKXtyZXR1cm5bImNvbHVtbiIsbl19O2Z1bmN0aW9uICRaZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMjEpLHNuKDEsMjIpLEUoMixRWmUsMSwyLCJtYXQtY2hlY2tib3giLDIzKSxFKDMsS1plLDIsMywic3BhbiIsMjQpLEUoNCxaWmUsMiwzLCJzcGFuIiwyNCksRSg1LEpaZSwyLDEsInNwYW4iLDI1KSxhbigpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMik7eSgibmdDbGFzcyIsT24oNixwaGUsInRiLWNvbHVtbi0iK2UpKSxDKDEpLHkoIm5nU3dpdGNoIixlKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uQ0hFQ0tCT1gpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5FWFBFUklNRU5UX05BTUUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fTkFNRSksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLlJVTl9DT0xPUil9fWZ1bmN0aW9uIGVKZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtzbigwKSxfKDEsImRpdiIsMzcpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLF8oMiwidGItcmFuZ2UtaW5wdXQiLDM4KSxQKCJyYW5nZVZhbHVlc0NoYW5nZWQiLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoMikuJGltcGxpY2l0O3JldHVybiBzZShTKDIpLmhhbmRsZUhwYXJhbUludGVydmFsQ2hhbmdlZChvLHIpKX0pLHYoKSgpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdDtDKDIpLHkoIm1pbiIsZS5maWx0ZXIubWluVmFsdWUpKCJtYXgiLGUuZmlsdGVyLm1heFZhbHVlKSgibG93ZXJWYWx1ZSIsZS5maWx0ZXIuZmlsdGVyTG93ZXJWYWx1ZSkoInVwcGVyVmFsdWUiLGUuZmlsdGVyLmZpbHRlclVwcGVyVmFsdWUpfX1mdW5jdGlvbiB0SmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDQwKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxfKDEsIm1hdC1jaGVja2JveCIsMzYpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtsZXQgbz1vZShlKS4kaW1wbGljaXQscz1TKDMpLiRpbXBsaWNpdDtyZXR1cm4gc2UoUygyKS5oYW5kbGVIcGFyYW1EaXNjcmV0ZUNoYW5nZWQocyxvKSl9KSxfKDIsInNwYW4iKSxBKDMpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoMykuJGltcGxpY2l0O0MoMSkseSgiY2hlY2tlZCIsaS5maWx0ZXIuZmlsdGVyVmFsdWVzLmluY2x1ZGVzKGUpKSxDKDIpLHl0KGUpfX1mdW5jdGlvbiBuSmUobix0KXtpZigxJm4mJihzbigwKSxFKDEsdEplLDQsMiwiZGl2IiwzOSksYW4oKSksMiZuKXtsZXQgZT1TKDIpLiRpbXBsaWNpdDtDKDEpLHkoIm5nRm9yT2YiLGUuZmlsdGVyLnBvc3NpYmxlVmFsdWVzKX19ZnVuY3Rpb24gaUplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLF8oMSwiYnV0dG9uIiwzMiksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksTygyLCJtYXQtaWNvbiIsMzMpLHYoKSxfKDMsIm1hdC1tZW51IixudWxsLDM0KSg1LCJkaXYiLDM1KSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxfKDYsIm1hdC1jaGVja2JveCIsMzYpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCkuJGltcGxpY2l0O3JldHVybiBzZShTKDIpLmhhbmRsZUhwYXJhbUluY2x1ZGVVbmRlZmluZWRUb2dnbGVkKHIpKX0pLF8oNywic3BhbiIpLEEoOCwiKHNob3cgZW1wdHkgdmFsdWUpIiksdigpKCkoKSxFKDksZUplLDMsNCwibmctY29udGFpbmVyIiwzMSksRSgxMCxuSmUsMiwxLCJuZy1jb250YWluZXIiLDMxKSx2KCksYW4oKX1pZigyJm4pe2xldCBlPSRlKDQpLGk9UygpLiRpbXBsaWNpdCxyPVMoMik7QygxKSx5KCJtYXRNZW51VHJpZ2dlckZvciIsZSksemUoImFyaWEtbGFiZWwiLCJGaWx0ZXIgaHBhcmFtICIrKGkuZGlzcGxheU5hbWV8fGkubmFtZSkpLEMoNSkseSgiY2hlY2tlZCIsaS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCksQygzKSx5KCJuZ0lmIixpLmZpbHRlci50eXBlPT09ci5Eb21haW5UeXBlLklOVEVSVkFMKSxDKDEpLHkoIm5nSWYiLGkuZmlsdGVyLnR5cGU9PT1yLkRvbWFpblR5cGUuRElTQ1JFVEUpfX12YXIgckplPWZ1bmN0aW9uKG4sdCl7cmV0dXJue3R5cGU6bixuYW1lOnR9fTtmdW5jdGlvbiBvSmUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDI5KSgxLCJzcGFuIiwzMCksQSgyKSx2KCksRSgzLGlKZSwxMSw1LCJuZy1jb250YWluZXIiLDMxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO3koIm1hdC1zb3J0LWhlYWRlciIsUXIoMyxySmUsaS5Tb3J0VHlwZS5IUEFSQU0sZS5uYW1lKSksQygyKSx5dChlLmRpc3BsYXlOYW1lfHxlLm5hbWUpLEMoMSkseSgibmdJZiIsZS5maWx0ZXIpfX1mdW5jdGlvbiBzSmUobix0KXtpZigxJm4pe2xldCBlPVBlKCk7c24oMCksXygxLCJidXR0b24iLDMyKSxQKCJjbGljayIsZnVuY3Rpb24ocil7cmV0dXJuIHIuc3RvcFByb3BhZ2F0aW9uKCl9KSxPKDIsIm1hdC1pY29uIiwzMyksdigpLF8oMywibWF0LW1lbnUiLG51bGwsMzQpKDUsImRpdiIsMzUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtyZXR1cm4gci5zdG9wUHJvcGFnYXRpb24oKX0pLF8oNiwibWF0LWNoZWNrYm94IiwzNiksUCgiY2hhbmdlIixmdW5jdGlvbigpe29lKGUpO2xldCByPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikuaGFuZGxlTWV0cmljSW5jbHVkZVVuZGVmaW5lZENoYW5nZWQocikpfSksXyg3LCJzcGFuIiksQSg4LCIoc2hvdyBlbXB0eSB2YWx1ZSkiKSx2KCkoKSgpLF8oOSwiZGl2IiwzNyksUCgiY2xpY2siLGZ1bmN0aW9uKHIpe3JldHVybiByLnN0b3BQcm9wYWdhdGlvbigpfSksXygxMCwidGItcmFuZ2UtaW5wdXQiLDM4KSxQKCJyYW5nZVZhbHVlc0NoYW5nZWQiLGZ1bmN0aW9uKHIpe29lKGUpO2xldCBvPVMoKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikuaGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChvLHIpKX0pLHYoKSgpKCksYW4oKX1pZigyJm4pe2xldCBlPSRlKDQpLGk9UygpLiRpbXBsaWNpdDtDKDEpLHkoIm1hdE1lbnVUcmlnZ2VyRm9yIixlKSx6ZSgiYXJpYS1sYWJlbCIsIkZpbHRlciBtZXRyaWMgIisoaS5kaXNwbGF5TmFtZXx8aS50YWcpKSxDKDUpLHkoImNoZWNrZWQiLGkuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQpLEMoNCkseSgibWluIixpLmZpbHRlci5taW5WYWx1ZSkoIm1heCIsaS5maWx0ZXIubWF4VmFsdWUpKCJsb3dlclZhbHVlIixpLmZpbHRlci5maWx0ZXJMb3dlclZhbHVlKSgidXBwZXJWYWx1ZSIsaS5maWx0ZXIuZmlsdGVyVXBwZXJWYWx1ZSl9fXZhciBhSmU9ZnVuY3Rpb24obix0KXtyZXR1cm57dHlwZTpuLHRhZzp0fX07ZnVuY3Rpb24gbEplKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwyOSkoMSwic3BhbiIsMzApLEEoMiksdigpLEUoMyxzSmUsMTEsNywibmctY29udGFpbmVyIiwzMSksdigpKSwyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygyKTt5KCJtYXQtc29ydC1oZWFkZXIiLFFyKDMsYUplLGkuU29ydFR5cGUuTUVUUklDLGUudGFnKSksQygyKSx5dChlLmRpc3BsYXlOYW1lfHxlLnRhZyksQygxKSx5KCJuZ0lmIixlLmZpbHRlcil9fWZ1bmN0aW9uIGNKZShuLHQpe2lmKDEmbil7bGV0IGU9UGUoKTtfKDAsImRpdiIsMTcpKDEsImRpdiIsMTgpLFAoIm1hdFNvcnRDaGFuZ2UiLGZ1bmN0aW9uKHIpe3JldHVybiBvZShlKSxzZShTKCkuaGFuZGxlU29ydENoYW5nZShyKSl9KSxFKDIsJFplLDYsOCwic3BhbiIsMTkpLEUoMyxvSmUsNCw2LCJzcGFuIiwyMCksRSg0LGxKZSw0LDYsInNwYW4iLDIwKSx2KCkoKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLHkoIm1hdFNvcnRBY3RpdmUiLGUuc29ydE9wdGlvbi5jb2x1bW4pLEMoMSkseSgibmdGb3JPZiIsZS5jb2x1bW5zKSxDKDEpLHkoIm5nRm9yT2YiLGUuaHBhcmFtQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5SHBhcmFtQ29sdW1uKSxDKDEpLHkoIm5nRm9yT2YiLGUubWV0cmljQ29sdW1ucykoIm5nRm9yVHJhY2tCeSIsZS50cmFja0J5TWV0cmljQ29sdW1uKX19ZnVuY3Rpb24gdUplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic3BhbiIpKDEsIm1hdC1jaGVja2JveCIsNDcpLFAoImNoYW5nZSIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKDIpLml0ZW07cmV0dXJuIHNlKFMoKS5vblNlbGVjdGlvblRvZ2dsZS5lbWl0KHIpKX0pKCJkYmxjbGljayIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKDIpLml0ZW07cmV0dXJuIHNlKFMoKS5vblNlbGVjdGlvbkRibENsaWNrLmVtaXQocikpfSksdigpKCl9aWYoMiZuKXtsZXQgZT1TKDIpLml0ZW07QygxKSx5KCJjaGVja2VkIixlLnNlbGVjdGVkKX19ZnVuY3Rpb24gZEplKG4sdCl7aWYoMSZuJiZPKDAsInRiLWV4cGVyaW1lbnQtYWxpYXMiLDQ4KSwyJm4pe2xldCBlPVMoMikuaXRlbTt5KCJhbGlhcyIsZS5leHBlcmltZW50QWxpYXMpKCJ0aXRsZSIsZS5leHBlcmltZW50TmFtZSl9fWZ1bmN0aW9uIHBKZShuLHQpe2lmKDEmbiYmKF8oMCwic3BhbiIsMzApLEEoMSksdigpKSwyJm4pe2xldCBlPVMoMikuaXRlbTtDKDEpLHl0KGUucnVuLm5hbWUpfX12YXIgaEplPWZ1bmN0aW9uKG4pe3JldHVybnsicnVuLWNvbG9yLXN3YXRjaCI6ITAsIm5vLWNvbG9yIjpufX07ZnVuY3Rpb24gZkplKG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwic3BhbiIpKDEsImJ1dHRvbiIsNDkpLFAoImNvbG9yUGlja2VyQ2hhbmdlIixmdW5jdGlvbihyKXtvZShlKTtsZXQgbz1TKDIpLml0ZW07cmV0dXJuIHNlKFMoKS5vblJ1bkNvbG9yQ2hhbmdlLmVtaXQoe3J1bklkOm8ucnVuLmlkLG5ld0NvbG9yOnJ9KSl9KSx2KCkoKX1pZigyJm4pe2xldCBlPVMoMikuaXRlbTtDKDEpLFB0KCJiYWNrZ3JvdW5kIixlLnJ1bkNvbG9yKSx5KCJuZ0NsYXNzIixPbig4LGhKZSwhZS5ydW5Db2xvcikpKCJjb2xvclBpY2tlciIsZS5ydW5Db2xvcikoImNwRGlhbG9nRGlzcGxheSIsInBvcHVwIikoImNwUG9zaXRpb25PZmZzZXQiLC0yMCkoImNwVXNlUm9vdFZpZXdDb250YWluZXIiLCEwKSgiY3BPdXRwdXRGb3JtYXQiLCJoZXgiKX19ZnVuY3Rpb24gbUplKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiw0NCksc24oMSwyMiksRSgyLHVKZSwyLDEsInNwYW4iLDI1KSxFKDMsZEplLDEsMiwidGItZXhwZXJpbWVudC1hbGlhcyIsNDUpLEUoNCxwSmUsMiwxLCJzcGFuIiw0NiksRSg1LGZKZSwyLDEwLCJzcGFuIiwyNSksYW4oKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKDIpO3koIm5nQ2xhc3MiLE9uKDYscGhlLCJ0Yi1jb2x1bW4tIitlKSksQygxKSx5KCJuZ1N3aXRjaCIsZSksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGkuUnVuc1RhYmxlQ29sdW1uLkNIRUNLQk9YKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uRVhQRVJJTUVOVF9OQU1FKSxDKDEpLHkoIm5nU3dpdGNoQ2FzZSIsaS5SdW5zVGFibGVDb2x1bW4uUlVOX05BTUUpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixpLlJ1bnNUYWJsZUNvbHVtbi5SVU5fQ09MT1IpfX1mdW5jdGlvbiBnSmUobix0KXtpZigxJm4mJihfKDAsInNwYW4iLDUwKSxBKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoKS5pdGVtO0MoMSkseXQoaS5ocGFyYW1zLmdldChlLm5hbWUpKX19ZnVuY3Rpb24gX0plKG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiw1MCksQSgxKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCkuaXRlbTtDKDEpLHl0KGkubWV0cmljcy5nZXQoZS50YWcpKX19ZnVuY3Rpb24gdkplKG4sdCl7aWYoMSZuJiYoXygwLCJkaXYiLDQxKSxFKDEsbUplLDYsOCwic3BhbiIsNDIpLEUoMixnSmUsMiwxLCJzcGFuIiw0MyksRSgzLF9KZSwyLDEsInNwYW4iLDQzKSx2KCkpLDImbil7bGV0IGU9dC5pdGVtLGk9UygpO3plKCJkYXRhLWlkIixlLnJ1bi5pZCksQygxKSx5KCJuZ0Zvck9mIixpLmNvbHVtbnMpLEMoMSkseSgibmdGb3JPZiIsaS5ocGFyYW1Db2x1bW5zKSxDKDEpLHkoIm5nRm9yT2YiLGkubWV0cmljQ29sdW1ucyl9fXZhciB5SmU9KCgpPT57Y2xhc3MgbiBleHRlbmRzIGUwe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLml0ZW1zUGVyUGFnZUxhYmVsPSJTaG93IHJ1bnM6In19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybih0fHwodD1waShuKSkpKGl8fG4pfX0oKSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGhoZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhU291cmNlPW5ldyBKayx0aGlzLkRvbWFpblR5cGU9Q2ksdGhpcy5SdW5zVGFibGVDb2x1bW49dmEsdGhpcy5Tb3J0VHlwZT1pZCx0aGlzLm9uUmVnZXhGaWx0ZXJDaGFuZ2U9bmV3IEcsdGhpcy5vblNlbGVjdGlvblRvZ2dsZT1uZXcgRyx0aGlzLm9uU2VsZWN0aW9uRGJsQ2xpY2s9bmV3IEcsdGhpcy5vblBhZ2VTZWxlY3Rpb25Ub2dnbGU9bmV3IEcsdGhpcy5vblBhZ2luYXRpb25DaGFuZ2U9bmV3IEcsdGhpcy5vblNvcnRDaGFuZ2U9bmV3IEcsdGhpcy5vblJ1bkNvbG9yQ2hhbmdlPW5ldyBHLHRoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQ9bmV3IEcsdGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZD1uZXcgRyx0aGlzLm9uTWV0cmljRmlsdGVyQ2hhbmdlZD1uZXcgR31uZ09uQ2hhbmdlcygpe3RoaXMuZGF0YVNvdXJjZS5kYXRhPXRoaXMucGFnZUl0ZW1zfWdldEhwYXJhbUNvbHVtbklkKGUpe3JldHVybmBoOiR7ZS5uYW1lfWB9Z2V0TWV0cmljQ29sdW1uSWQoZSl7cmV0dXJuYG06JHtlLnRhZ31gfWdldENvbHVtbklkcygpe3JldHVyblsuLi50aGlzLmNvbHVtbnMsLi4udGhpcy5ocGFyYW1Db2x1bW5zLm1hcCh0aGlzLmdldEhwYXJhbUNvbHVtbklkKSwuLi50aGlzLm1ldHJpY0NvbHVtbnMubWFwKHRoaXMuZ2V0TWV0cmljQ29sdW1uSWQpXX1hbGxQYWdlSXRlbXNTZWxlY3RlZCgpe3JldHVybiBCb29sZWFuKHRoaXMucGFnZUl0ZW1zLmxlbmd0aCkmJnRoaXMucGFnZUl0ZW1zLmV2ZXJ5KGU9PmUuc2VsZWN0ZWQpfXNvbWVQYWdlSXRlbXNTZWxlY3RlZCgpe3JldHVybiB0aGlzLnBhZ2VJdGVtcy5zb21lKGU9PmUuc2VsZWN0ZWQpfWhhbmRsZVBhZ2VUb2dnbGUoKXt0aGlzLm9uUGFnZVNlbGVjdGlvblRvZ2dsZS5lbWl0KHtpdGVtczp0aGlzLnBhZ2VJdGVtc30pfWhhbmRsZVNvcnRDaGFuZ2UoZSl7bGV0IGk7c3dpdGNoKGUuZGlyZWN0aW9uKXtjYXNlImFzYyI6aT1pYy5BU0M7YnJlYWs7Y2FzZSJkZXNjIjppPWljLkRFU0M7YnJlYWs7ZGVmYXVsdDppPWljLlVOU0VUfXRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoe2tleTplLmFjdGl2ZSxkaXJlY3Rpb246aX0pfW9uRmlsdGVyS2V5VXAoZSl7dGhpcy5vblJlZ2V4RmlsdGVyQ2hhbmdlLmVtaXQoZS50YXJnZXQudmFsdWUpfXRhYmxlVHJhY2tCeShlLGkpe3JldHVybiBpLnJ1bi5pZH1oYW5kbGVIcGFyYW1JbmNsdWRlVW5kZWZpbmVkVG9nZ2xlZChlKXtsZXR7bmFtZTppLGZpbHRlcjpyfT1lO2lmKCFyKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTtyLnR5cGU9PT1DaS5ESVNDUkVURT90aGlzLm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkLmVtaXQoe2hwYXJhbU5hbWU6aSxpbmNsdWRlVW5kZWZpbmVkOiFyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyVmFsdWVzOnIuZmlsdGVyVmFsdWVzfSk6dGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOmksaW5jbHVkZVVuZGVmaW5lZDohci5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlckxvd2VyVmFsdWU6ci5maWx0ZXJMb3dlclZhbHVlLGZpbHRlclVwcGVyVmFsdWU6ci5maWx0ZXJVcHBlclZhbHVlfSl9aGFuZGxlSHBhcmFtSW50ZXJ2YWxDaGFuZ2VkKGUsaSl7bGV0e25hbWU6cixmaWx0ZXI6b309ZTtpZighbyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbkhwYXJhbUludGVydmFsRmlsdGVyQ2hhbmdlZC5lbWl0KHtuYW1lOnIsaW5jbHVkZVVuZGVmaW5lZDpvLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTppLmxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTppLnVwcGVyVmFsdWV9KX1oYW5kbGVIcGFyYW1EaXNjcmV0ZUNoYW5nZWQoZSxpKXtsZXR7bmFtZTpyLGZpbHRlcjpvfT1lO2lmKCFvKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhcmlhbnQgZXJyb3I6IHJlcXVpcmUgZmlsdGVyIHRvIGV4aXN0IGZvciBpdCB0byBjaGFuZ2UiKTtpZihvLnR5cGUhPT1DaS5ESVNDUkVURSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YXJpYW50IGVycm9yOiBleHBlY3RlZCBkaXNjcmV0ZSBkb21haW4gZm9yICR7cn1gKTtsZXQgcz1uZXcgU2V0KFsuLi5vLmZpbHRlclZhbHVlc10pO3MuaGFzKGkpP3MuZGVsZXRlKGkpOnMuYWRkKGkpLHRoaXMub25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQuZW1pdCh7aHBhcmFtTmFtZTpyLGluY2x1ZGVVbmRlZmluZWQ6by5pbmNsdWRlVW5kZWZpbmVkLGZpbHRlclZhbHVlczpbLi4uc119KX1oYW5kbGVNZXRyaWNJbmNsdWRlVW5kZWZpbmVkQ2hhbmdlZChlKXtpZighZS5maWx0ZXIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFyaWFudCBlcnJvcjogcmVxdWlyZSBmaWx0ZXIgdG8gZXhpc3QgZm9yIGl0IHRvIGNoYW5nZSIpO3RoaXMub25NZXRyaWNGaWx0ZXJDaGFuZ2VkLmVtaXQoe25hbWU6ZS50YWcsaW5jbHVkZVVuZGVmaW5lZDohZS5maWx0ZXIuaW5jbHVkZVVuZGVmaW5lZCxmaWx0ZXJMb3dlclZhbHVlOmUuZmlsdGVyLmZpbHRlckxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTplLmZpbHRlci5maWx0ZXJVcHBlclZhbHVlfSl9aGFuZGxlTWV0cmljRmlsdGVyQ2hhbmdlZChlLGkpe2lmKCFlLmZpbHRlcil0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YXJpYW50IGVycm9yOiByZXF1aXJlIGZpbHRlciB0byBleGlzdCBmb3IgaXQgdG8gY2hhbmdlIik7dGhpcy5vbk1ldHJpY0ZpbHRlckNoYW5nZWQuZW1pdCh7bmFtZTplLnRhZyxpbmNsdWRlVW5kZWZpbmVkOmUuZmlsdGVyLmluY2x1ZGVVbmRlZmluZWQsZmlsdGVyTG93ZXJWYWx1ZTppLmxvd2VyVmFsdWUsZmlsdGVyVXBwZXJWYWx1ZTppLnVwcGVyVmFsdWV9KX10cmFja0J5SHBhcmFtQ29sdW1uKGUpe3JldHVybiBlLm5hbWV9dHJhY2tCeU1ldHJpY0NvbHVtbihlKXtyZXR1cm4gZS50YWd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJ1bnMtdGFibGUtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKG90KFZaZSw3LFJlKSxvdChLayw3KSxvdChNRSw3KSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5maWx0ZXI9ci5maXJzdCksTmUocj1MZSgpKSYmKGkucGFnaW5hdG9yPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLnNvcnQ9ci5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoImZsZXgtbGF5b3V0IixpLnVzZUZsZXhpYmxlTGF5b3V0KX0saW5wdXRzOntleHBlcmltZW50SWRzOiJleHBlcmltZW50SWRzIixzaG93RXhwZXJpbWVudE5hbWU6InNob3dFeHBlcmltZW50TmFtZSIsY29sdW1uczoiY29sdW1ucyIsaHBhcmFtQ29sdW1uczoiaHBhcmFtQ29sdW1ucyIsbWV0cmljQ29sdW1uczoibWV0cmljQ29sdW1ucyIsYWxsSXRlbXNMZW5ndGg6ImFsbEl0ZW1zTGVuZ3RoIixmaWx0ZXJlZEl0ZW1zTGVuZ3RoOiJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIix1c2VGbGV4aWJsZUxheW91dDoidXNlRmxleGlibGVMYXlvdXQiLHVzZVBhZ2luYXRpb246InVzZVBhZ2luYXRpb24iLHBhZ2VJdGVtczoicGFnZUl0ZW1zIixsb2FkaW5nOiJsb2FkaW5nIixudW1TZWxlY3RlZEl0ZW1zOiJudW1TZWxlY3RlZEl0ZW1zIixzb3J0T3B0aW9uOiJzb3J0T3B0aW9uIixwYWdpbmF0aW9uT3B0aW9uOiJwYWdpbmF0aW9uT3B0aW9uIixyZWdleEZpbHRlcjoicmVnZXhGaWx0ZXIifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyQ2hhbmdlOiJvblJlZ2V4RmlsdGVyQ2hhbmdlIixvblNlbGVjdGlvblRvZ2dsZToib25TZWxlY3Rpb25Ub2dnbGUiLG9uU2VsZWN0aW9uRGJsQ2xpY2s6Im9uU2VsZWN0aW9uRGJsQ2xpY2siLG9uUGFnZVNlbGVjdGlvblRvZ2dsZToib25QYWdlU2VsZWN0aW9uVG9nZ2xlIixvblBhZ2luYXRpb25DaGFuZ2U6Im9uUGFnaW5hdGlvbkNoYW5nZSIsb25Tb3J0Q2hhbmdlOiJvblNvcnRDaGFuZ2UiLG9uUnVuQ29sb3JDaGFuZ2U6Im9uUnVuQ29sb3JDaGFuZ2UiLG9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkOiJvbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZCIsb25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQ6Im9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIixvbk1ldHJpY0ZpbHRlckNoYW5nZWQ6Im9uTWV0cmljRmlsdGVyQ2hhbmdlZCJ9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6ZTAsdXNlQ2xhc3M6eUplfV0pLEZ0XSxkZWNsczoxNSx2YXJzOjgsY29uc3RzOltbMSwiZmlsdGVyLXJvdyJdLFsicGxhY2Vob2xkZXIiLCJGaWx0ZXIgcnVucyAocmVnZXgpIiwxLCJydW4tZmlsdGVyIiwzLCJ2YWx1ZSIsImtleXVwIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsicm9sZSIsInRhYmxlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJyb3dncm91cCIsMSwicm93cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbImNsYXNzIiwibG9hZGluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby1ydW5zIiw0LCJuZ0lmIl0sWyJzaG93Rmlyc3RMYXN0QnV0dG9ucyIsIiIsMywicGFnZVNpemVPcHRpb25zIiwicGFnZUluZGV4IiwicGFnZVNpemUiLCJsZW5ndGgiLCJwYWdlIiw0LCJuZ0lmIl0sWyJoZWFkZXIiLCIiXSxbInJvdyIsIiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXSxbMSwibG9hZGluZyJdLFsibW9kZSIsImluZGV0ZXJtaW5hdGUiLCJkaWFtZXRlciIsIjI4Il0sWzEsIm5vLXJ1bnMiXSxbInNob3dGaXJzdExhc3RCdXR0b25zIiwiIiwzLCJwYWdlU2l6ZU9wdGlvbnMiLCJwYWdlSW5kZXgiLCJwYWdlU2l6ZSIsImxlbmd0aCIsInBhZ2UiXSxbInJvbGUiLCJyb3dncm91cCIsMSwiaGVhZGVyIl0sWyJtYXRTb3J0IiwiIiwicm9sZSIsInJvdyIsMywibWF0U29ydEFjdGl2ZSIsIm1hdFNvcnRDaGFuZ2UiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiY29sdW1uIiwzLCJtYXQtc29ydC1oZWFkZXIiLDQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMywibmdDbGFzcyJdLFszLCJuZ1N3aXRjaCJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1hdC1zb3J0LWhlYWRlciIsNCwibmdTd2l0Y2hDYXNlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFszLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSJdLFszLCJtYXQtc29ydC1oZWFkZXIiXSxbMywiZXhwZXJpbWVudElkcyJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiY29sdW1uIiwzLCJtYXQtc29ydC1oZWFkZXIiXSxbMSwibmFtZSJdLFs0LCJuZ0lmIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLDMsIm1hdE1lbnVUcmlnZ2VyRm9yIiwiY2xpY2siXSxbInN2Z0ljb24iLCJmaWx0ZXJfYWx0XzI0cHgiXSxbImZpbHRlck1lbnUiLCJtYXRNZW51Il0sWyJtYXQtbWVudS1pdGVtIiwiIiwicm9sZSIsIm1lbnVpdGVtY2hlY2tib3giLCJkaXNhYmxlUmlwcGxlIiwiIiwxLCJmaWx0ZXItbWVudS1jaGVja2JveC1yb3ciLDMsImNsaWNrIl0sWzMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbImRpc2FibGVSaXBwbGUiLCIiLCJtYXQtbWVudS1pdGVtIiwiIiwxLCJyYW5nZS1pbnB1dC1jb250YWluZXIiLDMsImNsaWNrIl0sWzMsIm1pbiIsIm1heCIsImxvd2VyVmFsdWUiLCJ1cHBlclZhbHVlIiwicmFuZ2VWYWx1ZXNDaGFuZ2VkIl0sWyJtYXQtbWVudS1pdGVtIiwiIiwiY2xhc3MiLCJmaWx0ZXItbWVudS1jaGVja2JveC1yb3ciLCJyb2xlIiwibWVudWl0ZW1jaGVja2JveCIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsibWF0LW1lbnUtaXRlbSIsIiIsInJvbGUiLCJtZW51aXRlbWNoZWNrYm94IiwxLCJmaWx0ZXItbWVudS1jaGVja2JveC1yb3ciLDMsImNsaWNrIl0sWyJyb2xlIiwicm93Il0sWyJyb2xlIiwiY2VsbCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJyb2xlIiwiY2VsbCIsImNsYXNzIiwiY29sdW1uIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInJvbGUiLCJjZWxsIiwzLCJuZ0NsYXNzIl0sWzMsImFsaWFzIiwidGl0bGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJuYW1lIiw0LCJuZ1N3aXRjaENhc2UiXSxbInRpdGxlIiwiQ2xpY2sgdG8gdG9nZ2xlIHJ1biBzZWxlY3Rpb24gb3IgZG91YmxlIGNsaWNrIHRvIHNlbGVjdCBvbmx5IHRoaXMgcnVuLiIsMywiY2hlY2tlZCIsImNoYW5nZSIsImRibGNsaWNrIl0sWzMsImFsaWFzIiwidGl0bGUiXSxbMywibmdDbGFzcyIsImNvbG9yUGlja2VyIiwiY3BEaWFsb2dEaXNwbGF5IiwiY3BQb3NpdGlvbk9mZnNldCIsImNwVXNlUm9vdFZpZXdDb250YWluZXIiLCJjcE91dHB1dEZvcm1hdCIsImNvbG9yUGlja2VyQ2hhbmdlIl0sWyJyb2xlIiwiY2VsbCIsMSwiY29sdW1uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoXygwLCJkaXYiLDApKDEsInRiLWZpbHRlci1pbnB1dCIsMSksUCgia2V5dXAiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmlsdGVyS2V5VXAobyl9KSx2KCkoKSxfKDIsImRpdiIsMikoMywiZGl2IiwzKSxFKDQsSFplLDEsMCwibmctY29udGFpbmVyIiw0KSxfKDUsImRpdiIsNSksRSg2LGpaZSwyLDQsIm5nLWNvbnRhaW5lciIsNiksdigpKCksRSg3LEdaZSwyLDAsImRpdiIsNyksRSg4LFdaZSwyLDAsImRpdiIsOCksRSg5LHFaZSw2LDEsImRpdiIsOCksdigpLEUoMTAsWFplLDEsNSwibWF0LXBhZ2luYXRvciIsOSksRSgxMSxjSmUsNSw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMCxxdCksRSgxMyx2SmUsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxMSxxdCkpLDImZSl7bGV0IHI9JGUoMTIpO0MoMSksWmkoInZhbHVlIixpLnJlZ2V4RmlsdGVyKSxDKDMpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLHIpLEMoMikseSgibmdGb3JPZiIsaS5wYWdlSXRlbXMpKCJuZ0ZvclRyYWNrQnkiLGkudGFibGVUcmFja0J5KSxDKDEpLHkoIm5nSWYiLGkubG9hZGluZyksQygxKSx5KCJuZ0lmIiwhaS5sb2FkaW5nJiYwPT09aS5hbGxJdGVtc0xlbmd0aCksQygxKSx5KCJuZ0lmIiwhaS5sb2FkaW5nJiZpLmFsbEl0ZW1zTGVuZ3RoPjAmJjA9PT1pLmZpbHRlcmVkSXRlbXNMZW5ndGgpLEMoMSkseSgibmdJZiIsaS51c2VQYWdpbmF0aW9uKX19LGRlcGVuZGVuY2llczpbcmhlLEZuLGRuLEJlLG9zLENyLFVyLGN5LFlrLF9uLHlsLEd0LGhkLG51LGZkLEtrLEJvLE1FLEtwZSxzaGUsdWhlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Zm9udC1zaXplOjEzcHg7b3ZlcmZsb3c6aGlkZGVufS5maWx0ZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4Om5vbmV9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17Y29udGFpbjpsYXlvdXQgcGFpbnQ7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3cteDphdXRvO292ZXJmbG93LXk6YXV0bzt3aWxsLWNoYW5nZTp0cmFuc2Zvcm0sc2Nyb2xsLXBvc2l0aW9ufS5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAubmFtZVtfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0uZmxleC1sYXlvdXRbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2ViZWJlYjtwYWRkaW5nLWJvdHRvbToxMnB4fWJvZHkuZGFyay1tb2RlICAgLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSAgIG1hdC1wYWdpbmF0b3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkICM1NTV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlO3dpZHRoOjEwMCV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7cG9zaXRpb246c3RpY2t5O3RvcDowO3otaW5kZXg6MX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBbcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1jb2x1bW5oZWFkZXJdW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9Y29sdW1uaGVhZGVyXVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfVtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXXtjb250YWluOnN0cmljdDtkaXNwbGF5OnRhYmxlLXJvdztoZWlnaHQ6NDNweH1bcm9sZT10YWJsZV1bX25nY29udGVudC0lQ09NUCVdICAgW3JvbGU9cm93XVtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6dGFibGUtY2VsbDtwYWRkaW5nOjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgW3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIFtyb2xlPXRhYmxlXVtfbmdjb250ZW50LSVDT01QJV0gICBbcm9sZT1yb3ddW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW5bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM1NTV9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0OjI0cHh9W3JvbGU9dGFibGVdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIFtyb2xlPXJvd11bX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbltfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjI0cHh9W3JvbGU9cm93Z3JvdXBdW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLXJvdy1ncm91cH1bcm9sZT1yb3dncm91cF0uaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH0ubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0sIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQ4cHg7cGFkZGluZzowIDI0cHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAubG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX1ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICAubm8tcnVuc1tfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC5uby1ydW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNTU1fS5sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5zZWxlY3QtYWxsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMnB4O3BhZGRpbmctdG9wOjEycHh9LnNlbGVjdC1hbGwtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC5zZWxlY3QtYWxsLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246bGVmdH0uc2VsZWN0LWFsbC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MCA0cHh9LmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6NDhweDtwYWRkaW5nOjAgMTZweCAwIDIxcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLmZpbHRlci1yb3dbX25nY29udGVudC0lQ09NUCVdLCBib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAuZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzU1NX0uZmlsdGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICB0Yi1maWx0ZXItaW5wdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZ3JvdzoxfS50Yi1jb2x1bW4tY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdLCAudGItY29sdW1uLXJ1bl9jb2xvcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MjBweH0udGItY29sdW1uLXJ1bl9jb2xvcltfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnJ1bi1jb2xvci1zd2F0Y2hbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1yYWRpdXM6MTAwJTtib3JkZXI6MXB4IHNvbGlkICNlYmViZWI7aGVpZ2h0OjIwcHg7d2lkdGg6MjBweDtvdXRsaW5lOm5vbmV9LnJ1bi1jb2xvci1zd2F0Y2gubm8tY29sb3JbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xvcjojYzZjYWQxO2JvcmRlci13aWR0aDoycHh9LnJhbmdlLWlucHV0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmF1dG99W19uZ2hvc3QtJUNPTVAlXSAgICAgbWF0LXBhZ2luYXRvciBtYXQtZm9ybS1maWVsZHttYXJnaW46MH0uZmlsdGVyLW1lbnUtY2hlY2tib3gtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIG1hdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV0gICAgIGxhYmVse2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXJ9LmZpbHRlci1tZW51LWNoZWNrYm94LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBtYXQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVdICAgICBsYWJlbCAubWF0LWNoZWNrYm94LWlubmVyLWNvbnRhaW5lcnttYXJnaW4tbGVmdDowfS5maWx0ZXItbWVudS1jaGVja2JveC1yb3dbX25nY29udGVudC0lQ09NUCVdICAgbWF0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgbGFiZWwgLm1hdC1jaGVja2JveC1sYWJlbHtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc31ib2R5LmRhcmstbW9kZVtfbmdob3N0LSVDT01QJV0gICBtYXQtcGFnaW5hdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgbWF0LXBhZ2luYXRvcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseEplPUooV00sbj0+bi5zdGF0ZT09PU9lLkxPQURJTkcpO2Z1bmN0aW9uIGZoZShuLHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgaWQuRVhQRVJJTUVOVF9OQU1FOnJldHVybltuLmV4cGVyaW1lbnRBbGlhcyxuLnJ1bi5uYW1lLG4ucnVuLmlkXTtjYXNlIGlkLlJVTl9OQU1FOnJldHVybltuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtjYXNlIGlkLkhQQVJBTTpyZXR1cm5bbi5ocGFyYW1zLmdldCh0Lm5hbWUpLG4ucnVuLm5hbWUsbi5leHBlcmltZW50QWxpYXMsbi5ydW4uaWRdO2Nhc2UgaWQuTUVUUklDOnJldHVybltuLm1ldHJpY3MuZ2V0KHQudGFnKSxuLnJ1bi5uYW1lLG4uZXhwZXJpbWVudEFsaWFzLG4ucnVuLmlkXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZDogJHt0fWApfX1mdW5jdGlvbiBtaGUobix0KXtyZXR1cm4gdm9pZCAwPT09dD9uLmluY2x1ZGVVbmRlZmluZWQ6bi50eXBlPT09Q2kuRElTQ1JFVEU/bi5maWx0ZXJWYWx1ZXMuaW5jbHVkZXModCk6bi50eXBlPT09Q2kuSU5URVJWQUwmJm4uZmlsdGVyTG93ZXJWYWx1ZTw9dCYmdDw9bi5maWx0ZXJVcHBlclZhbHVlfXZhciBnaGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5sb2FkaW5nJD1udWxsLHRoaXMuaHBhcmFtQ29sdW1ucyQ9WHQoW10pLHRoaXMubWV0cmljQ29sdW1ucyQ9WHQoW10pLHRoaXMudXNlRmxleGlibGVMYXlvdXQ9ITEsdGhpcy51c2VQYWdpbmF0aW9uPSExLHRoaXMuY29sdW1ucz1bdmEuUlVOX05BTUVdLHRoaXMuc2hvd0hwYXJhbXNBbmRNZXRyaWNzPSExLHRoaXMuc29ydE9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3QoYUgpLHRoaXMucGFnaW5hdGlvbk9wdGlvbiQ9dGhpcy5zdG9yZS5zZWxlY3Qoc0gpLHRoaXMucmVnZXhGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KFFtKSx0aGlzLm5nVW5zdWJzY3JpYmU9bmV3IGtlfWlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5zb21lKGU9PmU9PT12YS5FWFBFUklNRU5UX05BTUUpfW5nT25Jbml0KCl7bGV0IGk9THQodGhpcy5leHBlcmltZW50SWRzLm1hcChzPT50aGlzLmdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KHMpKSkucGlwZShMKHM9PltdLmNvbmNhdCguLi5zKSkpO3RoaXMuYWxsVW5zb3J0ZWRSdW5UYWJsZUl0ZW1zJD1pLnBpcGUoc3QodGhpcy5uZ1Vuc3Vic2NyaWJlKSxNYSgxKSksdGhpcy5hbGxJdGVtc0xlbmd0aCQ9dGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkLnBpcGUoTChzPT5zLmxlbmd0aCkpO2xldCByPXRoaXMuZ2V0RmlsdGVyZWRJdGVtcyQodGhpcy5hbGxVbnNvcnRlZFJ1blRhYmxlSXRlbXMkKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSksTWEoMSkpO3RoaXMuZmlsdGVyZWRJdGVtc0xlbmd0aCQ9ci5waXBlKEwocz0+cy5sZW5ndGgpKSx0aGlzLnBhZ2VJdGVtcyQ9dGhpcy5zb3J0ZWRBbmRTbGljZWRJdGVtcyQociksdGhpcy5udW1TZWxlY3RlZEl0ZW1zJD10aGlzLmFsbFVuc29ydGVkUnVuVGFibGVJdGVtcyQucGlwZShMKHM9PnMucmVkdWNlKChhLGwpPT5hK051bWJlcihsLnNlbGVjdGVkKSwwKSkpO2xldCBvPXRoaXMuZXhwZXJpbWVudElkcy5tYXAocz0+dGhpcy5zdG9yZS5zZWxlY3QoeEplLHtleHBlcmltZW50SWQ6c30pKTtpZih0aGlzLmxvYWRpbmckPUx0KG8pLnBpcGUoTChzPT5zLnNvbWUoYT0+YSkpKSx0aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcyl7bGV0IHM9dGhpcy5zdG9yZS5zZWxlY3QoRGYuZ2V0RXhwZXJpbWVudHNIcGFyYW1zQW5kTWV0cmljc1NwZWNzLHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkc30pO3RoaXMuaHBhcmFtQ29sdW1ucyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KERmLmdldEhwYXJhbUZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHNdKS5waXBlKEwoKFthLHtocGFyYW1zOmx9XSk9PmwubWFwKCh7bmFtZTpjLGRpc3BsYXlOYW1lOnV9KT0+e2xldCBwPWEuZ2V0KGMpO2lmKCFwKXRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhcmlhbnQgZXJyb3I6IGEgZmlsdGVyIGZvciAke2N9IG11c3QgZXhpc3Qgd2hlbiB0aGUgaHBhcmFtIGV4aXN0c2ApO3JldHVybntkaXNwbGF5TmFtZTp1LG5hbWU6YyxmaWx0ZXI6cH19KSkpLHRoaXMubWV0cmljQ29sdW1ucyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KERmLmdldE1ldHJpY0ZpbHRlck1hcCx0aGlzLmV4cGVyaW1lbnRJZHMpLHNdKS5waXBlKEwoKFthLHttZXRyaWNzOmx9XSk9PmwubWFwKCh7dGFnOmMsZGlzcGxheU5hbWU6dX0pPT57bGV0IGQ9YS5nZXQoYyk7aWYoIWQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBmaWx0ZXIgZm9yICR7Y30gbXVzdCBleGlzdCB3aGVuIHRoZSBtZXRyaWMgZXhpc3RzYCk7cmV0dXJue2Rpc3BsYXlOYW1lOnUsdGFnOmMsZmlsdGVyOmR9fSkpKX10aGlzLmNvbHVtbnMuaW5jbHVkZXModmEuQ0hFQ0tCT1gpJiZ0aGlzLnN0b3JlLnNlbGVjdChSYSkucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpLHlpKChhLGwpPT5QcyhhLGwpKSx1aSgoKT0+aS5waXBlKFllKGE9PmEubGVuZ3RoPjUwMCksUXQoMSkpKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zdG9yZS5kaXNwYXRjaCh2dih7bG9jYWxpemVkTWVzc2FnZToiVGhlIG51bWJlciBvZiBydW5zIGV4Y2VlZHMgNTAwLiBOZXcgcnVucyBhcmUgdW5zZWxlY3RlZCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4ifSkpfSksdGhpcy5zdG9yZS5kaXNwYXRjaChkSSh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpLHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpfWdldEZpbHRlcmVkSXRlbXMkKGUpe3JldHVybiBMdChbZSx0aGlzLnN0b3JlLnNlbGVjdChRbSldKS5waXBlKEwoKFtpLHJdKT0+e2lmKCFyKXJldHVybiBpO2xldCBvPXRoaXMuY29sdW1ucy5pbmNsdWRlcyh2YS5FWFBFUklNRU5UX05BTUUpO3JldHVybiBpLmZpbHRlcihzPT5KSSh7cnVuTmFtZTpzLnJ1bi5uYW1lLGV4cGVyaW1lbnRBbGlhczpzLmV4cGVyaW1lbnRBbGlhc30scixvKSl9KSx1aShpPT50aGlzLnNob3dIcGFyYW1zQW5kTWV0cmljcz9MdCh0aGlzLnN0b3JlLnNlbGVjdChEZi5nZXRIcGFyYW1GaWx0ZXJNYXAsdGhpcy5leHBlcmltZW50SWRzKSx0aGlzLnN0b3JlLnNlbGVjdChEZi5nZXRNZXRyaWNGaWx0ZXJNYXAsdGhpcy5leHBlcmltZW50SWRzKSkucGlwZShMKChbcixvXSk9PmkuZmlsdGVyKCh7aHBhcmFtczpzLG1ldHJpY3M6YX0pPT5bLi4uci5lbnRyaWVzKCldLmV2ZXJ5KChbYyx1XSk9Pm1oZSh1LHMuZ2V0KGMpKSkmJlsuLi5vLmVudHJpZXMoKV0uZXZlcnkoKFtjLHVdKT0+bWhlKHUsYS5nZXQoYykpKSkpKTpYdChpKSkpfXNvcnRlZEFuZFNsaWNlZEl0ZW1zJChlKXtsZXQgaT1MdChbZSx0aGlzLnN0b3JlLnNlbGVjdChhSCldKS5waXBlKEwoKFtvLHNdKT0+ZnVuY3Rpb24obix0KXtsZXQgZT10LmtleSxpPVsuLi5uXTtyZXR1cm4gbnVsbD09PWV8fHQuZGlyZWN0aW9uPT09aWMuVU5TRVR8fGkuc29ydCgocixvKT0+e2xldCBzPWZoZShyLGUpLGE9ZmhlKG8sZSk7aWYocy5sZW5ndGghPT1hLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYEludmFyaWFudCBlcnJvcjogYSBnaXZlbiBzb3J0IHNob3VsZCByZXN1bHQgaW4gc2FtZSBudW1iZXIgb2YgaXRlbXM6ICR7dH1gKTtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7bGV0IGM9c1tsXSx1PWFbbF07aWYoYyE9PXUpe2lmKHZvaWQgMD09PWN8fHZvaWQgMD09PXUpcmV0dXJuIHZvaWQgMD09PXU/LTE6MTtpZih0eXBlb2YgYyE9dHlwZW9mIHUpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29tcGFyZSB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzOiAke3R5cGVvZiBjfSB2cy4gJHt0eXBlb2YgdX1gKTtyZXR1cm4gYzx1PT0odC5kaXJlY3Rpb249PT1pYy5BU0MpPy0xOjF9fXJldHVybiAwfSksaX0obyxzKSkpO3JldHVybiBMdChbaSx0aGlzLnN0b3JlLnNlbGVjdChzSCldKS5waXBlKEwoKFtvLHNdKT0+e2lmKCF0aGlzLnVzZVBhZ2luYXRpb24pcmV0dXJuIG8uc2xpY2UoKTtsZXR7cGFnZVNpemU6YSxwYWdlSW5kZXg6bH09cztyZXR1cm4gby5zbGljZShsKmEsKGwrMSkqYSl9KSx6bihbXSkpfWdldFJ1blRhYmxlSXRlbXNGb3JFeHBlcmltZW50KGUpe3JldHVybiBMdChbdGhpcy5zdG9yZS5zZWxlY3QocmQse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3Qodkkse2V4cGVyaW1lbnRJZDplfSksdGhpcy5zdG9yZS5zZWxlY3Qob28pLHRoaXMuc3RvcmUuc2VsZWN0KG5jKSx0aGlzLnN0b3JlLnNlbGVjdChZdSldKS5waXBlKEwoKFtpLHIsbyxzLGFdKT0+aS5tYXAobD0+e2xldCBjPW5ldyBNYXA7KGwuaHBhcmFtc3x8W10pLmZvckVhY2goZD0+e2Muc2V0KGQubmFtZSxkLnZhbHVlKX0pO2xldCB1PW5ldyBNYXA7cmV0dXJuKGwubWV0cmljc3x8W10pLmZvckVhY2goZD0+e3Uuc2V0KGQudGFnLGQudmFsdWUpfSkse3J1bjpsLGV4cGVyaW1lbnROYW1lOnI/Lm5hbWV8fCIiLGV4cGVyaW1lbnRBbGlhczphW2VdLHNlbGVjdGVkOkJvb2xlYW4obyYmby5nZXQobC5pZCkpLHJ1bkNvbG9yOnNbbC5pZF0saHBhcmFtczpjLG1ldHJpY3M6dX19KSkpfW9uUnVuU2VsZWN0aW9uVG9nZ2xlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2gob0koe3J1bklkOmUucnVuLmlkfSkpfW9uUnVuU2VsZWN0aW9uRGJsQ2xpY2soZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChzSSh7cnVuSWQ6ZS5ydW4uaWR9KSl9b25QYWdlU2VsZWN0aW9uVG9nZ2xlKGUpe2xldHtpdGVtczppfT1lLHI9aS5tYXAoKHtydW46b30pPT5vLmlkKTt0aGlzLnN0b3JlLmRpc3BhdGNoKGFJKHtydW5JZHM6cn0pKX1vblBhZ2luYXRpb25DaGFuZ2UoZSl7aWYoIXRoaXMudXNlUGFnaW5hdGlvbil0aHJvdyBuZXcgRXJyb3IoIlBhZ2luYXRpb24gZXZlbnRzIGNhbm5vdCBiZSBkaXNwYXRjaGVkIHdoZW4gcGFnaW5hdGlvbiBpcyBkaXNhYmxlZCIpO2xldHtwYWdlSW5kZXg6aSxwYWdlU2l6ZTpyfT1lO3RoaXMuc3RvcmUuZGlzcGF0Y2gobEkoe3BhZ2VJbmRleDppLHBhZ2VTaXplOnJ9KSl9b25Tb3J0Q2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goY0koZSkpfW9uUmVnZXhGaWx0ZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChOTSh7cmVnZXhTdHJpbmc6ZX0pKX1vblJ1bkNvbG9yQ2hhbmdlKHtydW5JZDplLG5ld0NvbG9yOml9KXt0aGlzLnN0b3JlLmRpc3BhdGNoKHVJKHtydW5JZDplLG5ld0NvbG9yOml9KSl9b25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQoZSl7bGV0e2hwYXJhbU5hbWU6aSxmaWx0ZXJWYWx1ZXM6cixpbmNsdWRlVW5kZWZpbmVkOm99PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChHbS5ocGFyYW1zRGlzY3JldGVIcGFyYW1GaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxocGFyYW1OYW1lOmksZmlsdGVyVmFsdWVzOnIsaW5jbHVkZVVuZGVmaW5lZDpvfSkpfW9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKGUpe2xldHtuYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChHbS5ocGFyYW1zSW50ZXJ2YWxIcGFyYW1GaWx0ZXJDaGFuZ2VkKHtleHBlcmltZW50SWRzOnRoaXMuZXhwZXJpbWVudElkcyxocGFyYW1OYW1lOmksZmlsdGVyTG93ZXJWYWx1ZTpyLGZpbHRlclVwcGVyVmFsdWU6byxpbmNsdWRlVW5kZWZpbmVkOnN9KSl9b25NZXRyaWNGaWx0ZXJDaGFuZ2VkKGUpe2xldHtuYW1lOmksaW5jbHVkZVVuZGVmaW5lZDpyLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOnN9PWU7dGhpcy5zdG9yZS5kaXNwYXRjaChHbS5ocGFyYW1zTWV0cmljRmlsdGVyQ2hhbmdlZCh7ZXhwZXJpbWVudElkczp0aGlzLmV4cGVyaW1lbnRJZHMsbWV0cmljVGFnOmksaW5jbHVkZVVuZGVmaW5lZDpyLGZpbHRlckxvd2VyVmFsdWU6byxmaWx0ZXJVcHBlclZhbHVlOnN9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXRhYmxlIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiZldCgiZmxleC1sYXlvdXQiLGkudXNlRmxleGlibGVMYXlvdXQpfSxpbnB1dHM6e3VzZUZsZXhpYmxlTGF5b3V0OiJ1c2VGbGV4aWJsZUxheW91dCIsdXNlUGFnaW5hdGlvbjoidXNlUGFnaW5hdGlvbiIsY29sdW1uczoiY29sdW1ucyIsZXhwZXJpbWVudElkczoiZXhwZXJpbWVudElkcyIsc2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczoxMSx2YXJzOjM1LGNvbnN0czpbWzMsImV4cGVyaW1lbnRJZHMiLCJ1c2VGbGV4aWJsZUxheW91dCIsIm51bVNlbGVjdGVkSXRlbXMiLCJjb2x1bW5zIiwiaHBhcmFtQ29sdW1ucyIsIm1ldHJpY0NvbHVtbnMiLCJzaG93RXhwZXJpbWVudE5hbWUiLCJwYWdlSXRlbXMiLCJmaWx0ZXJlZEl0ZW1zTGVuZ3RoIiwiYWxsSXRlbXNMZW5ndGgiLCJsb2FkaW5nIiwicGFnaW5hdGlvbk9wdGlvbiIsInJlZ2V4RmlsdGVyIiwic29ydE9wdGlvbiIsInVzZVBhZ2luYXRpb24iLCJvblNlbGVjdGlvblRvZ2dsZSIsIm9uU2VsZWN0aW9uRGJsQ2xpY2siLCJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLCJvblBhZ2luYXRpb25DaGFuZ2UiLCJvblJlZ2V4RmlsdGVyQ2hhbmdlIiwib25Tb3J0Q2hhbmdlIiwib25SdW5Db2xvckNoYW5nZSIsIm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkIiwib25IcGFyYW1EaXNjcmV0ZUZpbHRlckNoYW5nZWQiLCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInJ1bnMtdGFibGUtY29tcG9uZW50IiwwKSxQKCJvblNlbGVjdGlvblRvZ2dsZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5TZWxlY3Rpb25Ub2dnbGUobyl9KSgib25TZWxlY3Rpb25EYmxDbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SdW5TZWxlY3Rpb25EYmxDbGljayhvKX0pKCJvblBhZ2VTZWxlY3Rpb25Ub2dnbGUiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnZVNlbGVjdGlvblRvZ2dsZShvKX0pKCJvblBhZ2luYXRpb25DaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUGFnaW5hdGlvbkNoYW5nZShvKX0pKCJvblJlZ2V4RmlsdGVyQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlZ2V4RmlsdGVyQ2hhbmdlKG8pfSkoIm9uU29ydENoYW5nZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25Tb3J0Q2hhbmdlKG8pfSkoIm9uUnVuQ29sb3JDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUnVuQ29sb3JDaGFuZ2Uobyl9KSgib25IcGFyYW1JbnRlcnZhbEZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uSHBhcmFtSW50ZXJ2YWxGaWx0ZXJDaGFuZ2VkKG8pfSkoIm9uSHBhcmFtRGlzY3JldGVGaWx0ZXJDaGFuZ2VkIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkhwYXJhbURpc2NyZXRlRmlsdGVyQ2hhbmdlZChvKX0pKCJvbk1ldHJpY0ZpbHRlckNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uTWV0cmljRmlsdGVyQ2hhbmdlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLEIoMTAsImFzeW5jIiksdigpKSwyJmUmJnkoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcykoInVzZUZsZXhpYmxlTGF5b3V0IixpLnVzZUZsZXhpYmxlTGF5b3V0KSgibnVtU2VsZWN0ZWRJdGVtcyIsVSgxLDE1LGkubnVtU2VsZWN0ZWRJdGVtcyQpKSgiY29sdW1ucyIsaS5jb2x1bW5zKSgiaHBhcmFtQ29sdW1ucyIsVSgyLDE3LGkuaHBhcmFtQ29sdW1ucyQpKSgibWV0cmljQ29sdW1ucyIsVSgzLDE5LGkubWV0cmljQ29sdW1ucyQpKSgic2hvd0V4cGVyaW1lbnROYW1lIixpLmlzRXhwZXJpbWVudE5hbWVWaXNpYmxlKCkpKCJwYWdlSXRlbXMiLFUoNCwyMSxpLnBhZ2VJdGVtcyQpKSgiZmlsdGVyZWRJdGVtc0xlbmd0aCIsVSg1LDIzLGkuZmlsdGVyZWRJdGVtc0xlbmd0aCQpKSgiYWxsSXRlbXNMZW5ndGgiLFUoNiwyNSxpLmFsbEl0ZW1zTGVuZ3RoJCkpKCJsb2FkaW5nIixVKDcsMjcsaS5sb2FkaW5nJCkpKCJwYWdpbmF0aW9uT3B0aW9uIixVKDgsMjksaS5wYWdpbmF0aW9uT3B0aW9uJCkpKCJyZWdleEZpbHRlciIsVSg5LDMxLGkucmVnZXhGaWx0ZXIkKSkoInNvcnRPcHRpb24iLFUoMTAsMzMsaS5zb3J0T3B0aW9uJCkpKCJ1c2VQYWdpbmF0aW9uIixpLnVzZVBhZ2luYXRpb24pfSxkZXBlbmRlbmNpZXM6W2hoZSxHZV0sc3R5bGVzOlsiLmZsZXgtbGF5b3V0W19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB9XG5cbiAgICAgIC5mbGV4LWxheW91dFtfbmdob3N0LSVDT01QJV0gICAgPiBydW5zLXRhYmxlLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLF9oZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yLWNvbXBvbmVudCJdXSxpbnB1dHM6e2V4cGVyaW1lbnRJZHM6ImV4cGVyaW1lbnRJZHMiLHNob3dIcGFyYW1zQW5kTWV0cmljczoic2hvd0hwYXJhbXNBbmRNZXRyaWNzIixjb2x1bW5zOiJjb2x1bW5zIn0sZGVjbHM6MSx2YXJzOjQsY29uc3RzOltbMywidXNlRmxleGlibGVMYXlvdXQiLCJjb2x1bW5zIiwiZXhwZXJpbWVudElkcyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTygwLCJydW5zLXRhYmxlIiwwKSwyJmUmJnkoInVzZUZsZXhpYmxlTGF5b3V0IiwhMCkoImNvbHVtbnMiLGkuY29sdW1ucykoImV4cGVyaW1lbnRJZHMiLGkuZXhwZXJpbWVudElkcykoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W2doZV0sc3R5bGVzOlsicnVucy10YWJsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxPYj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmV4cGVyaW1lbnRJZHMkPXRoaXMuc3RvcmUuc2VsZWN0KFdvKS5waXBlKEwoaT0+aT8/W10pKSx0aGlzLmNvbHVtbnMkPXRoaXMuc3RvcmUuc2VsZWN0KFdvKS5waXBlKEwoaT0+W3ZhLkNIRUNLQk9YLHZhLlJVTl9OQU1FLGkmJmkubGVuZ3RoPjE/dmEuRVhQRVJJTUVOVF9OQU1FOm51bGwsdmEuUlVOX0NPTE9SXS5maWx0ZXIocj0+bnVsbCE9PXIpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJydW5zLXNlbGVjdG9yIl1dLGlucHV0czp7c2hvd0hwYXJhbXNBbmRNZXRyaWNzOiJzaG93SHBhcmFtc0FuZE1ldHJpY3MifSxkZWNsczozLHZhcnM6Nyxjb25zdHM6W1szLCJleHBlcmltZW50SWRzIiwiY29sdW1ucyIsInNob3dIcGFyYW1zQW5kTWV0cmljcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwicnVucy1zZWxlY3Rvci1jb21wb25lbnQiLDApLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIikpLDImZSYmeSgiZXhwZXJpbWVudElkcyIsVSgxLDMsaS5leHBlcmltZW50SWRzJCkpKCJjb2x1bW5zIixVKDIsNSxpLmNvbHVtbnMkKSkoInNob3dIcGFyYW1zQW5kTWV0cmljcyIsaS5zaG93SHBhcmFtc0FuZE1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W19oZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksdmhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpY3MtZGFzaGJvYXJkIl1dLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWyJzaWRlYmFyIiwiIl0sWyJtYWluIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJ0Yi1kYXNoYm9hcmQtbGF5b3V0IiksTygxLCJydW5zLXNlbGVjdG9yIiwwKSgyLCJtZXRyaWNzLW1haW4tdmlldyIsMSksdigpKX0sZGVwZW5kZW5jaWVzOltSb2UsenBlLE9iXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7b3ZlcmZsb3c6aGlkZGVufS5ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjQ1LDE1NywuODUpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmViM2I7Y29sb3I6IzIxMjEyMTtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwfXRiLWRhc2hib2FyZC1sYXlvdXRbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MSAxO292ZXJmbG93OmhpZGRlbn1uYXZbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlYmViZWI7ZmxleDpub25lO3dpZHRoOjM0MHB4fWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIG5hdltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojMzAzMDMwO2JvcmRlci1yaWdodC1jb2xvcjojNTU1fW1ldHJpY3MtbWFpbi12aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFhHPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbixQbl19KSxufSkoKSx5aGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLGJoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksa2I9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGJoZV19KSxufSkoKSx0Rj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsSWIscG5dfSksbn0pKCksbkY9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFdoXX0pLG59KSgpLHhoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbb2hlLE1lLGtiLHRGLGFnLFBuLExzLE9oLEhhLHBuLHpoLFhwZSxfZCxacGUsbmhlLG5GLEUyXX0pLG59KSgpLEZiPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSx4aGVdfSksbn0pKCksTmI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLGlGPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbl19KSxufSkoKSxDaGU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25UaW1lU2VsZWN0aW9uQ2hhbmdlZD1uZXcgRyx0aGlzLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQ9bmV3IEcsdGhpcy5heGlzRGlyZWN0aW9uPXBhLlZFUlRJQ0FMLHRoaXMuY2FyZEZvYkhlbHBlcj17Z2V0U3RlcEhpZ2hlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwSGlnaGVyVGhhbkF4aXNQb3NpdGlvbi5iaW5kKHRoaXMpLGdldFN0ZXBMb3dlclRoYW5BeGlzUG9zaXRpb246dGhpcy5nZXRTdGVwTG93ZXJUaGFuQXhpc1Bvc2l0aW9uLmJpbmQodGhpcyl9fWdldEF4aXNQb3NpdGlvbkZyb21TdGFydFN0ZXAoKXtyZXR1cm4gdGhpcy50ZW1wb3JhbFNjYWxlKHRoaXMudGltZVNlbGVjdGlvbi5zdGFydC5zdGVwKX1nZXRBeGlzUG9zaXRpb25Gcm9tRW5kU3RlcCgpe3JldHVybiBudWxsPT09dGhpcy50aW1lU2VsZWN0aW9uLmVuZD9udWxsOnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnRpbWVTZWxlY3Rpb24uZW5kLnN0ZXApfWdldEhpZ2hlc3RTdGVwKCl7cmV0dXJuIHRoaXMuc3RlcHNbdGhpcy5zdGVwcy5sZW5ndGgtMV19Z2V0TG93ZXN0U3RlcCgpe3JldHVybiB0aGlzLnN0ZXBzWzBdfWdldFN0ZXBIaWdoZXJUaGFuQXhpc1Bvc2l0aW9uKGUpe2xldCBpPTA7Zm9yKDtlPnRoaXMudGVtcG9yYWxTY2FsZSh0aGlzLnN0ZXBzW2ldKSYmaTx0aGlzLnN0ZXBzLmxlbmd0aC0xOylpKys7cmV0dXJuIHRoaXMuc3RlcHNbaV19Z2V0U3RlcExvd2VyVGhhbkF4aXNQb3NpdGlvbihlKXtsZXQgaT10aGlzLnN0ZXBzLmxlbmd0aC0xO2Zvcig7ZTx0aGlzLnRlbXBvcmFsU2NhbGUodGhpcy5zdGVwc1tpXSkmJmk+MDspaS0tO3JldHVybiB0aGlzLnN0ZXBzW2ldfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJoaXN0b2dyYW0tY2FyZC1mb2ItY29udHJvbGxlciJdXSxpbnB1dHM6e3N0ZXBzOiJzdGVwcyIsdGltZVNlbGVjdGlvbjoidGltZVNlbGVjdGlvbiIsdGVtcG9yYWxTY2FsZToidGVtcG9yYWxTY2FsZSJ9LG91dHB1dHM6e29uVGltZVNlbGVjdGlvbkNoYW5nZWQ6Im9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLG9uVGltZVNlbGVjdGlvblRvZ2dsZWQ6Im9uVGltZVNlbGVjdGlvblRvZ2dsZWQifSxkZWNsczoxLHZhcnM6Nyxjb25zdHM6W1szLCJheGlzRGlyZWN0aW9uIiwidGltZVNlbGVjdGlvbiIsInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsImVuZFN0ZXBBeGlzUG9zaXRpb24iLCJoaWdoZXN0U3RlcCIsImxvd2VzdFN0ZXAiLCJjYXJkRm9iSGVscGVyIiwib25UaW1lU2VsZWN0aW9uQ2hhbmdlZCIsIm9uVGltZVNlbGVjdGlvblRvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImNhcmQtZm9iLWNvbnRyb2xsZXIiLDApLFAoIm9uVGltZVNlbGVjdGlvbkNoYW5nZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uVGltZVNlbGVjdGlvbkNoYW5nZWQuZW1pdChvKX0pKCJvblRpbWVTZWxlY3Rpb25Ub2dnbGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVGltZVNlbGVjdGlvblRvZ2dsZWQuZW1pdCgpfSksdigpKSwyJmUmJnkoImF4aXNEaXJlY3Rpb24iLGkuYXhpc0RpcmVjdGlvbikoInRpbWVTZWxlY3Rpb24iLGkudGltZVNlbGVjdGlvbikoInN0YXJ0U3RlcEF4aXNQb3NpdGlvbiIsaS5nZXRBeGlzUG9zaXRpb25Gcm9tU3RhcnRTdGVwKCkpKCJlbmRTdGVwQXhpc1Bvc2l0aW9uIixpLmdldEF4aXNQb3NpdGlvbkZyb21FbmRTdGVwKCkpKCJoaWdoZXN0U3RlcCIsaS5nZXRIaWdoZXN0U3RlcCgpKSgibG93ZXN0U3RlcCIsaS5nZXRMb3dlc3RTdGVwKCkpKCJjYXJkRm9iSGVscGVyIixpLmNhcmRGb2JIZWxwZXIpfSxkZXBlbmRlbmNpZXM6W0drXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxNaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W2lGLE1lLHFoLE5iXX0pLG59KSgpO054KFdrLFtkbixCZSxoZyxheSxDaGVdLFtdKTt2YXIgTGI9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLHJGPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxrYl19KSxufSkoKSxCYj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG5dfSksbn0pKCksd2hlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxNaGUsUG4scG4sX2QsckYsTGIsQmJdfSksbn0pKCksU2hlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxQbixwbixfZCxXaCxyRixMYixCYl19KSxufSkoKSxvRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG5dfSksbn0pKCksRWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbixvRl19KSxufSkoKSxUaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLHNzLFBuLHBuLEhhLHpoXX0pLG59KSgpLERoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsc3MsVGhlLHFoXX0pLG59KSgpLEFoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsUG4sT2gsSGEsbGMsU0ldfSksbn0pKCksSWhlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltpRixNZSxBaGUsRWhlLGtiLE5iLERoZSxQbixwbix6aCxfZCxxaCxMYixCYl19KSxufSkoKSxQaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFNoZSxJaGUsd2hlLE5iXX0pLG59KSgpLFJoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsbGNdfSksbn0pKCksc0Y9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLFJoZSxQbixnUixMcyxwbixsYyxXaCxjdixuRl19KSxufSkoKSxPaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLG9GLExzLEoyXX0pLG59KSgpLGtoZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbUGhlLE1lLHRGLEliLFBuLGdSLHBuLEhhLF9kLHNGLE9oZSxaY119KSxufSkoKSxGaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLHloZSxYRyxraGUscG4sc0YsRmJdfSksbn0pKCk7ZnVuY3Rpb24gRUplKCl7cmV0dXJuW3thY3Rpb25DcmVhdG9yOnJ5LGFsZXJ0RnJvbUFjdGlvbjpuPT57bGV0e3dhc1Bpbm5lZDp0LGNhbkNyZWF0ZU5ld1BpbnM6ZX09bjtyZXR1cm4gdHx8ZT9udWxsOntsb2NhbGl6ZWRNZXNzYWdlOiJNYXggcGluIGxpbWl0IGV4Y2VlZGVkLiBSZW1vdmUgZXhpc3RpbmcgcGlucyBiZWZvcmUgYWRkaW5nIG1vcmUuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9pc3N1ZXMvNDI0MiJ9fX1dfWZ1bmN0aW9uIFRKZSgpe3JldHVybiBKKG9wLG49Pih7c2NhbGFyU21vb3RoaW5nOm59KSl9ZnVuY3Rpb24gREplKCl7cmV0dXJuIEooaHYsbj0+KHtpZ25vcmVPdXRsaWVyczpufSkpfWZ1bmN0aW9uIEFKZSgpe3JldHVybiBKKHB2LG49Pih7dG9vbHRpcFNvcnQ6U3RyaW5nKG4pfSkpfWZ1bmN0aW9uIElKZSgpe3JldHVybiBKKEhJLG49Pih7dGltZVNlcmllc1NldHRpbmdzUGFuZU9wZW5lZDpufSkpfWZ1bmN0aW9uIFBKZSgpe3JldHVybiBKKGR2LG49Pih7dGltZVNlcmllc0NhcmRNaW5XaWR0aDpufSkpfWZ1bmN0aW9uIFJKZSgpe3JldHVybiBKKGZ2LG49Pih7c3RlcFNlbGVjdG9yRW5hYmxlZDpufSkpfWZ1bmN0aW9uIE9KZSgpe3JldHVybiBKKG12LG49Pih7cmFuZ2VTZWxlY3Rpb25FbmFibGVkOm59KSl9ZnVuY3Rpb24ga0plKCl7cmV0dXJuIEooWW0sbj0+KHtsaW5rZWRUaW1lRW5hYmxlZDpufSkpfXZhciBOaGU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6TVUsdXNlRmFjdG9yeTpBb2UsZGVwczpbd1VdfSx7cHJvdmlkZTp3VSx1c2VWYWx1ZTpJSX1dLGltcG9ydHM6W01lLEpfLGVjLEJzLmZvclBsdWdpbihCTSx2aGUpLFNJLEZoZSx3ci5mb3JGZWF0dXJlKEFJLEVvZSxNVSkscm8uZm9yRmVhdHVyZShbRG9lXSksSnUucmVnaXN0ZXJBbGVydEFjdGlvbnMoRUplKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKFRKZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhESmUpLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoQUplKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKElKZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhQSmUpLFNyLmRlZmluZUdsb2JhbFNldHRpbmcoUkplKSxTci5kZWZpbmVHbG9iYWxTZXR0aW5nKE9KZSksU3IuZGVmaW5lR2xvYmFsU2V0dGluZyhrSmUpXX0pLG59KSgpO2Z1bmN0aW9uIExoZShuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCJjb3VudEAiKX1mdW5jdGlvbiBhRihuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCJuUE1JQCIpfHxuLnN0YXJ0c1dpdGgoIm5QTUlfZGlmZkAiKX1mdW5jdGlvbiBWYihuKXtyZXR1cm4gbi5zdGFydHNXaXRoKCJuUE1JQCIpfWZ1bmN0aW9uIFNzKG4pe3JldHVybiBuLnNwbGl0KCJAIiwyKVsxXX1mdW5jdGlvbiBxJGUobil7bGV0IGUsaSx0PW4ubGVuZ3RoO2Zvcig7dDspaT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdC0tKSxlPW5bdF0sblt0XT1uW2ldLG5baV09ZTtyZXR1cm4gbn1mdW5jdGlvbiBZJGUobil7cmV0dXJuWy4uLm5ldyBBcnJheShuKV0ubWFwKCh0LGUpPT5lKX1mdW5jdGlvbiB2RihuLHQpe3JldHVybmAke3R9LyR7bn1gfW9OKCRmZSgpLDEpO3ZhciB5Rj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL25wbWkifWZldGNoRGF0YShlKXtyZXR1cm4gbHIodGhpcy5mZXRjaEFubm90YXRpb25zKGUpLHRoaXMuZmV0Y2hNZXRyaWNzKGUpLHRoaXMuZmV0Y2hWYWx1ZXMoZSksdGhpcy5mZXRjaEVtYmVkZGluZ3MoZSkpLnBpcGUoTCgoW2kscixvLHNdKT0+e2xldCBjLGE9e30sbD17fSx1PTA7Zm9yKGxldCBkIG9mIE9iamVjdC5rZXlzKGkpKWZvcihsZXQgcCBpbiBpW2RdKXtsZXQgaD1pW2RdW3BdO09iamVjdC5rZXlzKHMpLmxlbmd0aCYmIWxbaF0mJnNbZF1bcF0mJnNbZF1bcF0uc29tZSh4PT4wIT09eCkmJihsW2hdPXt2ZWN0b3I6c1tkXVtwXSxpbmRleDp1LG5hbWU6aH0sdSs9MSk7bGV0IGY9bmV3IE1hcDtmb3IobGV0IHggaW4gcltkXSl7bGV0IGc9cltkXVt4XSxiPVNzKGcpLEQ9Zi5nZXQoYik7RHx8KEQ9e25QTUlWYWx1ZTpudWxsLGNvdW50VmFsdWU6bnVsbCxhbm5vdGF0aW9uOmgsbWV0cmljOmIscnVuOmR9LGYuc2V0KGIsRCkpLExoZShnKT9ELmNvdW50VmFsdWU9b1tkXVtwXVt4XTphRihnKSYmKEQublBNSVZhbHVlPW9bZF1bcF1beF0pfWFbaF09Wy4uLmFbaF0/YVtoXTpbXSwuLi5mLnZhbHVlcygpXX1yZXR1cm4gT2JqZWN0LmtleXMobCkubGVuZ3RoJiYoYz1mdW5jdGlvbihuKXtsZXQgdD1PYmplY3Qua2V5cyhuKTtyZXR1cm57cG9pbnRzOm4scG9pbnRLZXlzOnQsc2h1ZmZsZWREYXRhSW5kaWNlczpxJGUoWSRlKHQubGVuZ3RoKSksaGFzVW1hcFJ1bjohMX19KGwpKSx7YW5ub3RhdGlvbkRhdGE6YSxtZXRyaWNzOnIsZW1iZWRkaW5nRGF0YVNldDpjfX0pLGZvKGk9PmkgaW5zdGFuY2VvZiBucCYmNDAwPD1pLnN0YXR1cyYmaS5zdGF0dXM8NTAwP1h0KHthbm5vdGF0aW9uRGF0YTp7fSxtZXRyaWNzOnt9LGVtYmVkZGluZ0RhdGFTZXQ6dm9pZCAwfSk6d2MoaSkpKX1mZXRjaEFubm90YXRpb25zKGUpe2xldCBpPWUubWFwKHI9PnRoaXMuaHR0cC5nZXQoYC9leHBlcmltZW50LyR7cn0vJHt0aGlzLmh0dHBQYXRoUHJlZml4fS9hbm5vdGF0aW9uc2ApLnBpcGUoTChzPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobikubWFwKChbZSxpXSk9Plt2RihlLHQpLGldKSl9KHMscikpKSk7cmV0dXJuIGxyKGkpLnBpcGUoTChyPT57bGV0IG89e307Zm9yKGxldCBzIG9mIHIpbz17Li4ubywuLi5zfTtyZXR1cm4gb30pKX1mZXRjaE1ldHJpY3MoZSl7bGV0IGk9ZS5tYXAocj0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtyfS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L21ldHJpY3NgKS5waXBlKEwocz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT5bdkYoZSx0KSxpXSkpfShzLHIpKSkpO3JldHVybiBscihpKS5waXBlKEwocj0+e2xldCBvPXt9O2ZvcihsZXQgcyBvZiByKW89ey4uLm8sLi4uc307cmV0dXJuIG99KSl9ZmV0Y2hWYWx1ZXMoZSl7bGV0IGk9ZS5tYXAocj0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtyfS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L3ZhbHVlc2ApLnBpcGUoTChzPT5mdW5jdGlvbihuLHQpe3JldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobikubWFwKChbZSxpXSk9Plt2RihlLHQpLGldKSl9KHMscikpKSk7cmV0dXJuIGxyKGkpLnBpcGUoTChyPT57bGV0IG89e307Zm9yKGxldCBzIG9mIHIpbz17Li4ubywuLi5zfTtyZXR1cm4gb30pKX1mZXRjaEVtYmVkZGluZ3MoZSl7bGV0IGk9ZS5tYXAocj0+dGhpcy5odHRwLmdldChgL2V4cGVyaW1lbnQvJHtyfS8ke3RoaXMuaHR0cFBhdGhQcmVmaXh9L2VtYmVkZGluZ3NgKS5waXBlKEwocz0+ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2UsaV0pPT5bdkYoZSx0KSxpXSkpfShzLHIpKSkpO3JldHVybiBscihpKS5waXBlKEwocj0+e2xldCBvPXt9O2ZvcihsZXQgcyBvZiByKW89ey4uLm8sLi4uc307cmV0dXJuIG99KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooa2EpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx0bWU9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbeUZdLGltcG9ydHM6W0t1XX0pLG59KSgpLGJGPWJlKCJbTlBNSV0gblBNSSBMb2FkZWQiKSx4Rj1iZSgiW05QTUldIG5QTUkgUGx1Z2luIERhdGEgUmVxdWVzdGVkIiksQ0Y9YmUoIltOUE1JXSBuUE1JIFBsdWdpbiBEYXRhIExvYWRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE1GPWJlKCJbTlBNSV0gblBNSSBQbHVnaW4gRGF0YSBSZXF1ZXN0IEZhaWxlZCIpLHdGPWJlKCJbTlBNSV0gQWRkaW5nL1JlbW92aW5nIEFubm90YXRpb25zIHRvL2Zyb20gU2VsZWN0ZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxSRT1iZSgiW05QTUldIEFubm90YXRpb25zIFNldCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFNGPWJlKCJbTlBNSV0gQ2xlYXJpbmcgdGhlIEFubm90YXRpb24gU2VsZWN0aW9uIiksRUY9YmUoIltOUE1JXSBBZGRpbmcvUmVtb3ZpbmcgQW5ub3RhdGlvbnMgdG8vZnJvbSBGbGFnZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksVEY9YmUoIltOUE1JXSBBZGRpbmcvUmVtb3ZpbmcgQW5ub3RhdGlvbnMgdG8vZnJvbSBIaWRkZW4iLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxqYj1iZSgiW05QTUldIEFubm90YXRpb25zIFJlZ2V4IENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxPRT1iZSgiW05QTUldIE1ldHJpY3MgUmVnZXggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLERGPWJlKCJbTlBNSV0gTWV0cmljIEZpbHRlciBBZGRlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLEdiPWJlKCJbTlBNSV0gTWV0cmljIEZpbHRlciBSZW1vdmVkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksV2I9YmUoIltOUE1JXSBNZXRyaWMgRmlsdGVyIENoYW5nZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxBRj1iZSgiW05QTUldIEFubm90YXRpb24gU29ydCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksSUY9YmUoIltOUE1JXSBTaW1pbGFyaXR5IFNvcnQgQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFBGPWJlKCJbTlBNSV0gVG9nZ2xlIFBDIEV4cGFuZGVkIiksUkY9YmUoIltOUE1JXSBUb2dnbGUgQW5ub3RhdGlvbnMgRXhwYW5kZWQiKSxxYj1iZSgiW05QTUldIFRvZ2dsZSBTaWRlYmFyIEV4cGFuZGVkIiksT0Y9YmUoIltOUE1JXSBTaG93IENvdW50cyBUb2dnbGVkIiksa0Y9YmUoIltOUE1JXSBTaG93IEhpZGRlbiBBbm5vdGF0aW9ucyBUb2dnbGVkIiksRkY9YmUoIltOUE1JXSBFbWJlZGRpbmdzIFZpZXcgVG9nZ2xlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLE5GPWJlKCJbTlBNSV0gU2lkZWJhciBXaWR0aCBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksTEY9YmUoIltOUE1JXSBFbWJlZGRpbmdzIFNpZGViYXIgV2lkdGggQ2hhbmdlZCIse19hczoicHJvcHMiLF9wOnZvaWQgMH0pLFliPWJlKCJbTlBNSV0gRW1iZWRkaW5ncyBTaWRlYmFyIEV4cGFuZGVkIFRvZ2dsZWQiKSxubWU9YmUoIltOUE1JXSBDaGFuZ2UgRW1iZWRkaW5nIERhdGFTZXQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxzMD0oKCk9PihmdW5jdGlvbihuKXtuW24uQU5EPTBdPSJBTkQifShzMHx8KHMwPXt9KSksczApKSgpLG11PSgoKT0+KGZ1bmN0aW9uKG4pe25bbi5NRVRSSUM9MF09Ik1FVFJJQyIsbltuLk9QRVJBVE9SPTFdPSJPUEVSQVRPUiJ9KG11fHwobXU9e30pKSxtdSkpKCksa3A9KCgpPT4oZnVuY3Rpb24obil7bltuLkRFRkFVTFQ9MF09IkRFRkFVTFQiLG5bbi5FTUJFRERJTkdTPTFdPSJFTUJFRERJTkdTIn0oa3B8fChrcD17fSkpLGtwKSkoKSwkcj0oKCk9PihmdW5jdGlvbihuKXtuW24uREVTQ0VORElORz0wXT0iREVTQ0VORElORyIsbltuLkFTQ0VORE5HPTFdPSJBU0NFTkRORyIsbltuLlNJTUlMQVI9Ml09IlNJTUlMQVIiLG5bbi5ESVNTSU1JTEFSPTNdPSJESVNTSU1JTEFSIn0oJHJ8fCgkcj17fSkpLCRyKSkoKSx1bz1NcigibnBtaSIpLGltZT1KKHVvLG49Pm4ucGx1Z2luRGF0YUxvYWRlZC5zdGF0ZSksUGY9Sih1byxuPT5uLmFubm90YXRpb25EYXRhKSxSZj1KKHVvLG49Pm4ucnVuVG9NZXRyaWNzKSxCRj1KKHVvLG49Pm4uZW1iZWRkaW5nRGF0YVNldCksdmM9Sih1byxuPT5uLnNlbGVjdGVkQW5ub3RhdGlvbnMpLFZGPUoodW8sbj0+bi5mbGFnZ2VkQW5ub3RhdGlvbnMpLFhiPUoodW8sbj0+bi5oaWRkZW5Bbm5vdGF0aW9ucyksUWI9Sih1byxuPT5uLmFubm90YXRpb25zUmVnZXgpLHJtZT1KKHVvLG49Pm4ubWV0cmljc1JlZ2V4KSxIRj1KKHVvLG49Pm4ubWV0cmljQXJpdGhtZXRpYyksSWw9Sih1byxuPT5uLm1ldHJpY0ZpbHRlcnMpLEtiPUoodW8sbj0+bi5zb3J0KSxvbWU9Sih1byxuPT5uLnBjRXhwYW5kZWQpLFVGPUoodW8sbj0+bi5hbm5vdGF0aW9uc0V4cGFuZGVkKSx6Rj1KKHVvLG49Pm4uc2lkZWJhckV4cGFuZGVkKSxqRj1KKHVvLG49Pm4uc2hvd0NvdW50cyksWmI9Sih1byxuPT5uLnNob3dIaWRkZW5Bbm5vdGF0aW9ucyksc21lPUoodW8sbj0+bi52aWV3QWN0aXZlKSxPZj1KKHVvLG49Pm4uc2lkZWJhcldpZHRoKSxhbWU9Sih1byxuPT5uLmVtYmVkZGluZ3NNZXRyaWMpLGxtZT1KKHVvLG49Pm4uZW1iZWRkaW5nc1NpZGViYXJXaWR0aCksR0Y9Sih1byxuPT5uLmVtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWQpLGNtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSxyKXt0aGlzLmFjdGlvbnMkPWUsdGhpcy5zdG9yZT1pLHRoaXMuZGF0YVNvdXJjZT1yLHRoaXMubG9hZERhdGEkPWNyKCgpPT5KdCh0aGlzLmxvYWRQbHVnaW5EYXRhKCkpLnBpcGUoTCgoKT0+KHt9KSkpLHtkaXNwYXRjaDohMX0pfWxvYWRQbHVnaW5EYXRhKCl7cmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShpaShiRiksV3QodGhpcy5zdG9yZS5zZWxlY3QoaW1lKSx0aGlzLnN0b3JlLnNlbGVjdChXbykpLFllKChbLGUsaV0pPT5lIT09T2UuTE9BRElORyYmbnVsbCE9PWkpLGt0KCgpPT50aGlzLnN0b3JlLmRpc3BhdGNoKHhGKCkpKSx4bigoWywsZV0pPT50aGlzLmRhdGFTb3VyY2UuZmV0Y2hEYXRhKGUpLnBpcGUoa3QoaT0+e3RoaXMuc3RvcmUuZGlzcGF0Y2goQ0YoaSkpfSksTCgoKT0+e30pLGZvKCgpPT4odGhpcy5zdG9yZS5kaXNwYXRjaChNRigpKSxlbykpKSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShqKFBvKSxqKENlKSxqKHlGKSl9LG4uXHUwMjc1cHJvdj15ZSh7dG9rZW46bixmYWN0b3J5Om4uXHUwMjc1ZmFjfSksbn0pKCksdW1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktaW5hY3RpdmUtdmlldyJdXSxkZWNsczo2LHZhcnM6MCxjb25zdHM6W1sxLCJjb250YWluZXIiXSxbMSwidGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIpKDEsImRpdiIsMCkoMiwiZGl2IiwxKSxBKDMsIm5QTUkgaXMgaW5hY3RpdmUgYmVjYXVzZSBubyBkYXRhIGlzIGF2YWlsYWJsZS4iKSx2KCksXyg0LCJkaXYiKSxBKDUsIiBUbyB1c2UgdGhlIG5QTUksIGNhbGN1bGF0ZSBuUE1JIHZhbHVlcywgYW5kIGxvZyB0aGVtIHVzaW5nIHRoZSBzdW1tYXJ5IHdyaXRlci4gIiksdigpKCkoKSl9LHN0eWxlczpbIi5jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdIHtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIHBhZGRpbmc6IDUwcHg7XG59XG5cbi50aXRsZVtfbmdjb250ZW50LSVDT01QJV0ge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufSJdfSksbn0pKCksdGV0PXZyKHtwbHVnaW5EYXRhTG9hZGVkOntzdGF0ZTpPZS5OT1RfTE9BREVELGxhc3RMb2FkZWRUaW1lSW5NczpudWxsfSxhbm5vdGF0aW9uRGF0YTp7fSxlbWJlZGRpbmdEYXRhU2V0OnZvaWQgMCxydW5Ub01ldHJpY3M6e30sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXSxmbGFnZ2VkQW5ub3RhdGlvbnM6W10saGlkZGVuQW5ub3RhdGlvbnM6W10sYW5ub3RhdGlvbnNSZWdleDoiIixtZXRyaWNzUmVnZXg6IiIsbWV0cmljQXJpdGhtZXRpYzpbXSxtZXRyaWNGaWx0ZXJzOnt9LHNvcnQ6e21ldHJpYzoiIixvcmRlcjokci5ERVNDRU5ESU5HfSxwY0V4cGFuZGVkOiEwLGFubm90YXRpb25zRXhwYW5kZWQ6ITAsc2lkZWJhckV4cGFuZGVkOiEwLHNob3dDb3VudHM6ITAsc2hvd0hpZGRlbkFubm90YXRpb25zOiExLHNpZGViYXJXaWR0aDozMDAsdmlld0FjdGl2ZTprcC5ERUZBVUxULGVtYmVkZGluZ3NNZXRyaWM6IiIsZW1iZWRkaW5nc1NpZGViYXJXaWR0aDo1MDAsZW1iZWRkaW5nc1NpZGViYXJFeHBhbmRlZDohMH0sU2UoeEYsbj0+KHsuLi5uLHBsdWdpbkRhdGFMb2FkZWQ6ey4uLm4ucGx1Z2luRGF0YUxvYWRlZCxzdGF0ZTpPZS5MT0FESU5HfX0pKSxTZShNRixuPT4oey4uLm4scGx1Z2luRGF0YUxvYWRlZDp7Li4ubi5wbHVnaW5EYXRhTG9hZGVkLHN0YXRlOk9lLkZBSUxFRH19KSksU2UoQ0YsKG4se2Fubm90YXRpb25EYXRhOnQsbWV0cmljczplLGVtYmVkZGluZ0RhdGFTZXQ6aX0pPT57bGV0IHI9e307Zm9yKGxldCBvIGluIGUpe3Jbb109W107Zm9yKGxldCBzIG9mIGVbb10pYUYocykmJnJbb10ucHVzaChzKX1yZXR1cm57Li4ubixydW5Ub01ldHJpY3M6cixhbm5vdGF0aW9uRGF0YTp0LGVtYmVkZGluZ0RhdGFTZXQ6aSxwbHVnaW5EYXRhTG9hZGVkOntzdGF0ZTpPZS5MT0FERUQsbGFzdExvYWRlZFRpbWVJbk1zOkRhdGUubm93KCl9fX0pLFNlKHdGLChuLHthbm5vdGF0aW9uczp0fSk9PntsZXQgZT1uZXcgU2V0KFsuLi5uLnNlbGVjdGVkQW5ub3RhdGlvbnMsLi4udF0pO2lmKGUuc2l6ZT09PW4uc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpZm9yKGxldCBpIG9mIHQpZS5kZWxldGUoaSk7cmV0dXJuey4uLm4sc2VsZWN0ZWRBbm5vdGF0aW9uczpbLi4uZV19fSksU2UoUkUsKG4se2Fubm90YXRpb25zOnR9KT0+KHsuLi5uLHNlbGVjdGVkQW5ub3RhdGlvbnM6dH0pKSxTZShTRixuPT4oey4uLm4sc2VsZWN0ZWRBbm5vdGF0aW9uczpbXX0pKSxTZShFRiwobix7YW5ub3RhdGlvbnM6dH0pPT57bGV0IGU9bmV3IFNldChbLi4ubi5mbGFnZ2VkQW5ub3RhdGlvbnMsLi4udF0pO2lmKGUuc2l6ZT09PW4uZmxhZ2dlZEFubm90YXRpb25zLmxlbmd0aClmb3IobGV0IGkgb2YgdCllLmRlbGV0ZShpKTtyZXR1cm57Li4ubixmbGFnZ2VkQW5ub3RhdGlvbnM6Wy4uLmVdLHNlbGVjdGVkQW5ub3RhdGlvbnM6W119fSksU2UoVEYsKG4se2Fubm90YXRpb25zOnR9KT0+e2xldCBlPW5ldyBTZXQoWy4uLm4uaGlkZGVuQW5ub3RhdGlvbnMsLi4udF0pO2lmKGUuc2l6ZT09PW4uaGlkZGVuQW5ub3RhdGlvbnMubGVuZ3RoKWZvcihsZXQgaSBvZiB0KWUuZGVsZXRlKGkpO3JldHVybnsuLi5uLGhpZGRlbkFubm90YXRpb25zOlsuLi5lXSxzZWxlY3RlZEFubm90YXRpb25zOltdfX0pLFNlKGpiLChuLHtyZWdleDp0fSk9Pih7Li4ubixhbm5vdGF0aW9uc1JlZ2V4OnR9KSksU2UoT0UsKG4se3JlZ2V4OnR9KT0+KHsuLi5uLG1ldHJpY3NSZWdleDp0fSkpLFNlKERGLChuLHttZXRyaWM6dH0pPT57aWYobi5tZXRyaWNGaWx0ZXJzW3RdKXJldHVybiBuO2xldCBlPVtdO3JldHVybiAwIT09bi5tZXRyaWNBcml0aG1ldGljLmxlbmd0aCYmZS5wdXNoKHtraW5kOm11Lk9QRVJBVE9SLG9wZXJhdG9yOnMwLkFORH0pLGUucHVzaCh7a2luZDptdS5NRVRSSUMsbWV0cmljOnR9KSx7Li4ubixtZXRyaWNBcml0aG1ldGljOlsuLi5uLm1ldHJpY0FyaXRobWV0aWMsLi4uZV0sbWV0cmljRmlsdGVyczp7Li4ubi5tZXRyaWNGaWx0ZXJzLFt0XTp7bWF4OjEsbWluOi0xLGluY2x1ZGVOYU46ITF9fSxzb3J0OnttZXRyaWM6dCxvcmRlcjokci5ERVNDRU5ESU5HfX19KSxTZShHYiwobix7bWV0cmljOnR9KT0+e2lmKCFuLm1ldHJpY0ZpbHRlcnNbdF0pcmV0dXJuIG47bGV0IGU9MCxpPTAscj0yLHtbdF06bywuLi5zfT1uLm1ldHJpY0ZpbHRlcnM7Zm9yKGxldCBhIGluIG4ubWV0cmljQXJpdGhtZXRpYyl7bGV0IGw9bi5tZXRyaWNBcml0aG1ldGljW2FdO2wua2luZD09PW11Lk1FVFJJQyYmbC5tZXRyaWM9PT10JiYoZT1wYXJzZUludChhKSl9cmV0dXJuIDAhPT1lJiYoaT1lLTEscj1lKzEpLHsuLi5uLG1ldHJpY0FyaXRobWV0aWM6Wy4uLm4ubWV0cmljQXJpdGhtZXRpYy5zbGljZSgwLGkpLC4uLm4ubWV0cmljQXJpdGhtZXRpYy5zbGljZShyKV0sbWV0cmljRmlsdGVyczpzfX0pLFNlKFdiLChuLHttZXRyaWM6dCxtYXg6ZSxtaW46aSxpbmNsdWRlTmFOOnJ9KT0+bi5tZXRyaWNGaWx0ZXJzW3RdP3suLi5uLG1ldHJpY0ZpbHRlcnM6ey4uLm4ubWV0cmljRmlsdGVycyxbdF06e21heDplLG1pbjppLGluY2x1ZGVOYU46cn19fTpuKSxTZShBRiwobix7bWV0cmljOnR9KT0+e2xldCBlPXttZXRyaWM6dCxvcmRlcjokci5ERVNDRU5ESU5HfTtyZXR1cm4gbi5zb3J0Lm1ldHJpYz09PXQmJm4uc29ydC5vcmRlcj09PSRyLkRFU0NFTkRJTkcmJihlLm9yZGVyPSRyLkFTQ0VORE5HKSx7Li4ubixzb3J0OmV9fSksU2UoSUYsKG4se2Fubm90YXRpb246dH0pPT57bGV0IGU9e21ldHJpYzp0LG9yZGVyOiRyLlNJTUlMQVJ9O3JldHVybiBuLnNvcnQubWV0cmljPT09dCYmbi5zb3J0Lm9yZGVyPT09JHIuU0lNSUxBUiYmKGUub3JkZXI9JHIuRElTU0lNSUxBUiksey4uLm4sc29ydDplfX0pLFNlKFBGLG49Pih7Li4ubixwY0V4cGFuZGVkOiFuLnBjRXhwYW5kZWR9KSksU2UoUkYsbj0+KHsuLi5uLGFubm90YXRpb25zRXhwYW5kZWQ6IW4uYW5ub3RhdGlvbnNFeHBhbmRlZH0pKSxTZShxYixuPT4oey4uLm4sc2lkZWJhckV4cGFuZGVkOiFuLnNpZGViYXJFeHBhbmRlZH0pKSxTZShPRixuPT4oey4uLm4sc2hvd0NvdW50czohbi5zaG93Q291bnRzfSkpLFNlKGtGLG49Pih7Li4ubixzaG93SGlkZGVuQW5ub3RhdGlvbnM6IW4uc2hvd0hpZGRlbkFubm90YXRpb25zfSkpLFNlKEZGLChuLHttZXRyaWM6dH0pPT57bGV0IGU9a3AuRU1CRURESU5HUyxpPXQ7cmV0dXJuIHQ9PT1uLmVtYmVkZGluZ3NNZXRyaWMmJihlPWtwLkRFRkFVTFQsaT0iIiksey4uLm4sdmlld0FjdGl2ZTplLGVtYmVkZGluZ3NNZXRyaWM6aX19KSxTZShORiwobix7c2lkZWJhcldpZHRoOnR9KT0+KHsuLi5uLHNpZGViYXJXaWR0aDp0fSkpLFNlKExGLChuLHtzaWRlYmFyV2lkdGg6dH0pPT4oey4uLm4sZW1iZWRkaW5nc1NpZGViYXJXaWR0aDp0fSkpLFNlKFliLG49Pih7Li4ubixlbWJlZGRpbmdzU2lkZWJhckV4cGFuZGVkOiFuLmVtYmVkZGluZ3NTaWRlYmFyRXhwYW5kZWR9KSksU2Uobm1lLChuLHtkYXRhU2V0OnR9KT0+KHsuLi5uLGVtYmVkZGluZ0RhdGFTZXQ6dH0pKSk7ZnVuY3Rpb24gZG1lKG4sdCl7cmV0dXJuIHRldChuLHQpfWZ1bmN0aW9uIG5ldChuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsNyl9ZnVuY3Rpb24gaWV0KG4sdCl7aWYoMSZuJiYoXygwLCJtYXQtb3B0aW9uIiw4KSxBKDEpLHYoKSksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt5KCJ2YWx1ZSIsZSksQygxKSx5dChlKX19dmFyIHBtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEcsdGhpcy5vbkFkZEZpbHRlcj1uZXcgR31vbk9wdGlvblNlbGVjdGVkKGUsaSl7dGhpcy5vbkFkZEZpbHRlci5lbWl0KGUub3B0aW9uLnZhbHVlKSxpLnZhbHVlPSIifX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJtZXRyaWMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoInZhbGlkIixpLmlzUmVnZXhGaWx0ZXJWYWxpZCl9LGlucHV0czp7Y29tcGxldGlvbnM6ImNvbXBsZXRpb25zIixyZWdleEZpbHRlclZhbHVlOiJyZWdleEZpbHRlclZhbHVlIixpc1JlZ2V4RmlsdGVyVmFsaWQ6ImlzUmVnZXhGaWx0ZXJWYWxpZCJ9LG91dHB1dHM6e29uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZToib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixvbkFkZEZpbHRlcjoib25BZGRGaWx0ZXIifSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic3ZnSWNvbiIsInNlYXJjaF8yNHB4Il0sWyJtYXRJbnB1dCIsIiIsImF1dG9jb21wbGV0ZSIsIm9mZiIsInBsYWNlaG9sZGVyIiwiQWRkIE1ldHJpYyBGaWx0ZXIiLDMsInZhbHVlIiwibWF0QXV0b2NvbXBsZXRlIiwiaW5wdXQiXSxbIm1hdElucHV0IiwiIl0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsImNsYXNzIiwiZXJyb3ItaWNvbiIsIm1hdFRvb2x0aXAiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWyJhdXRvQWN0aXZlRmlyc3RPcHRpb24iLCIiLDMsIm9wdGlvblNlbGVjdGVkIl0sWyJmaWx0ZXJNYXRjaGVzIiwibWF0QXV0b2NvbXBsZXRlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInN2Z0ljb24iLCJlcnJvcl8yNHB4IiwibWF0VG9vbHRpcCIsIkludmFsaWQgcmVnZXggZmlsdGVyLiBUaGUgcmVzdWx0IG1heSBiZSBzdGFsZS4iLDEsImVycm9yLWljb24iXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUpe2xldCByPVBlKCk7TygwLCJtYXQtaWNvbiIsMCksXygxLCJpbnB1dCIsMSwyKSxQKCJpbnB1dCIsZnVuY3Rpb24ocyl7cmV0dXJuIGkub25SZWdleEZpbHRlclZhbHVlQ2hhbmdlLmVtaXQocy50YXJnZXQudmFsdWUpfSksdigpLEUoMyxuZXQsMSwwLCJtYXQtaWNvbiIsMyksXyg0LCJtYXQtYXV0b2NvbXBsZXRlIiw0LDUpLFAoIm9wdGlvblNlbGVjdGVkIixmdW5jdGlvbihzKXtvZShyKTtsZXQgYT0kZSgyKTtyZXR1cm4gc2UoaS5vbk9wdGlvblNlbGVjdGVkKHMsYSkpfSksRSg2LGlldCwyLDIsIm1hdC1vcHRpb24iLDYpLHYoKX1pZigyJmUpe2xldCByPSRlKDUpO0MoMSkseSgidmFsdWUiLGkucmVnZXhGaWx0ZXJWYWx1ZSkoIm1hdEF1dG9jb21wbGV0ZSIsciksQygyKSx5KCJuZ0lmIiwhaS5pc1JlZ2V4RmlsdGVyVmFsaWQpLEMoMykseSgibmdGb3JPZiIsaS5jb21wbGV0aW9ucyl9fSxkZXBlbmRlbmNpZXM6W2RuLEJlLEd0LFVoLHFrLCRnLE9zXSxzdHlsZXM6WyJtYXQtaWNvbltfbmdjb250ZW50LSVDT01QJV17ZmxleDpub25lO21hcmdpbi1yaWdodDo1cHh9W19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDEwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOi45ZW19W19uZ2hvc3QtJUNPTVAlXTpub3QoLnZhbGlkKXtjb2xvcjojYzYyODI4fVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCkgICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17Y2FyZXQtY29sb3I6Y3VycmVudENvbG9yfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaG1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMubWV0cmljc1JlZ2V4JD10aGlzLnN0b3JlLnNlbGVjdChybWUpLHRoaXMuYWN0aXZlUnVucyQ9dGhpcy5zdG9yZS5waXBlKHZ0KG9vKSkucGlwZShMKGk9Pmk/QXJyYXkuZnJvbShpLmVudHJpZXMoKSkuZmlsdGVyKHI9PnJbMV0pLm1hcChyPT5yWzBdKTpbXSkpLHRoaXMubWV0cmljc0ZvckFjdGl2ZVJ1bnMkPUx0KHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoUmYpKS5waXBlKEwoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQ7Zm9yKGxldCBzIG9mIGkpaWYocltzXSlmb3IobGV0IGEgb2YgcltzXSlvLmFkZChhKTtyZXR1cm5bLi4ub119KSksdGhpcy5pc01ldHJpY3NGaWx0ZXJWYWxpZCQ9dGhpcy5tZXRyaWNzUmVnZXgkLnBpcGUoTChpPT57dHJ5e3JldHVybiBCb29sZWFuKG5ldyBSZWdFeHAoaSkpfWNhdGNoe3JldHVybiExfX0pKSx0aGlzLm1ldHJpY0ZpbHRlcktleXMkPXRoaXMuc3RvcmUucGlwZSh2dChJbCkpLnBpcGUoTChpPT5PYmplY3Qua2V5cyhpKSkpLHRoaXMuY29tcGxldGlvbnMkPUx0KHRoaXMubWV0cmljc0ZvckFjdGl2ZVJ1bnMkLHRoaXMubWV0cmljc1JlZ2V4JCx0aGlzLm1ldHJpY0ZpbHRlcktleXMkKS5waXBlKEwoKFtpLHIsb10pPT57bGV0IHM9aS5maWx0ZXIoYT0+IW8uaW5jbHVkZXMoYSkpO3RyeXtsZXQgYT1uZXcgUmVnRXhwKHIsImkiKTtyZXR1cm4gcy5maWx0ZXIobD0+YS50ZXN0KGwpKS5zb3J0KCl9Y2F0Y2h7cmV0dXJuW119fSkpfW9uRmlsdGVyQ2hhbmdlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goT0Uoe3JlZ2V4OmV9KSl9b25BZGRGaWx0ZXIoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChERih7bWV0cmljOmV9KSksdGhpcy5zdG9yZS5kaXNwYXRjaChPRSh7cmVnZXg6IiJ9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLW1ldHJpYy1zZWFyY2giXV0sZGVjbHM6NCx2YXJzOjksY29uc3RzOltbMywicmVnZXhGaWx0ZXJWYWx1ZSIsImNvbXBsZXRpb25zIiwiaXNSZWdleEZpbHRlclZhbGlkIiwib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIiwib25BZGRGaWx0ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpYy1zZWFyY2gtY29tcG9uZW50IiwwKSxQKCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uRmlsdGVyQ2hhbmdlKG8pfSkoIm9uQWRkRmlsdGVyIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vbkFkZEZpbHRlcihvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJyZWdleEZpbHRlclZhbHVlIixVKDEsMyxpLm1ldHJpY3NSZWdleCQpKSgiY29tcGxldGlvbnMiLFUoMiw1LGkuY29tcGxldGlvbnMkKSkoImlzUmVnZXhGaWx0ZXJWYWxpZCIsVSgzLDcsaS5pc01ldHJpY3NGaWx0ZXJWYWxpZCQpKX0sZGVwZW5kZW5jaWVzOltwbWUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHNldD1bIioiXSxmbWU9bmV3IHBlKCJNYXRDaGlwUmVtb3ZlIiksYWV0PW5ldyBwZSgiTWF0Q2hpcEF2YXRhciIpLGNldD1uZXcgcGUoIk1hdENoaXBUcmFpbGluZ0ljb24iKSx1ZXQ9b2Moa28ocW8oY2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5fZWxlbWVudFJlZj10fX0pLCJwcmltYXJ5IiksLTEpLEpiPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyB1ZXR7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCxjKXtzdXBlcihlKSx0aGlzLl9uZ1pvbmU9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1zLHRoaXMuX2hhc0ZvY3VzPSExLHRoaXMuY2hpcExpc3RTZWxlY3RhYmxlPSEwLHRoaXMuX2NoaXBMaXN0TXVsdGlwbGU9ITEsdGhpcy5fY2hpcExpc3REaXNhYmxlZD0hMSx0aGlzLnJvbGU9Im9wdGlvbiIsdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fc2VsZWN0YWJsZT0hMCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLl9yZW1vdmFibGU9ITAsdGhpcy5fb25Gb2N1cz1uZXcga2UsdGhpcy5fb25CbHVyPW5ldyBrZSx0aGlzLnNlbGVjdGlvbkNoYW5nZT1uZXcgRyx0aGlzLmRlc3Ryb3llZD1uZXcgRyx0aGlzLnJlbW92ZWQ9bmV3IEcsdGhpcy5fYWRkSG9zdENsYXNzTmFtZSgpLHRoaXMuX2NoaXBSaXBwbGVUYXJnZXQ9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLl9jaGlwUmlwcGxlVGFyZ2V0LmNsYXNzTGlzdC5hZGQoIm1hdC1jaGlwLXJpcHBsZSIpLHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9jaGlwUmlwcGxlVGFyZ2V0KSx0aGlzLl9jaGlwUmlwcGxlPW5ldyBUdih0aGlzLGksdGhpcy5fY2hpcFJpcHBsZVRhcmdldCxyKSx0aGlzLl9jaGlwUmlwcGxlLnNldHVwVHJpZ2dlckV2ZW50cyhlKSx0aGlzLnJpcHBsZUNvbmZpZz1vfHx7fSx0aGlzLl9hbmltYXRpb25zRGlzYWJsZWQ9Ik5vb3BBbmltYXRpb25zIj09PWwsdGhpcy50YWJJbmRleD1udWxsIT1jJiZwYXJzZUludChjKXx8LTF9Z2V0IHJpcHBsZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGlzYWJsZWR8fHRoaXMuZGlzYWJsZVJpcHBsZXx8dGhpcy5fYW5pbWF0aW9uc0Rpc2FibGVkfHwhIXRoaXMucmlwcGxlQ29uZmlnLmRpc2FibGVkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9zZWxlY3RlZH1zZXQgc2VsZWN0ZWQoZSl7bGV0IGk9UnQoZSk7aSE9PXRoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9aSx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpKX1nZXQgdmFsdWUoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fdmFsdWU/dGhpcy5fdmFsdWU6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fXNldCB2YWx1ZShlKXt0aGlzLl92YWx1ZT1lfWdldCBzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGUmJnRoaXMuY2hpcExpc3RTZWxlY3RhYmxlfXNldCBzZWxlY3RhYmxlKGUpe3RoaXMuX3NlbGVjdGFibGU9UnQoZSl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2NoaXBMaXN0RGlzYWJsZWR8fHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKX1nZXQgcmVtb3ZhYmxlKCl7cmV0dXJuIHRoaXMuX3JlbW92YWJsZX1zZXQgcmVtb3ZhYmxlKGUpe3RoaXMuX3JlbW92YWJsZT1SdChlKX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0YWJsZSYmKHRoaXMuX2NoaXBMaXN0TXVsdGlwbGV8fHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQudG9TdHJpbmcoKTpudWxsfV9hZGRIb3N0Q2xhc3NOYW1lKCl7bGV0IGU9Im1hdC1iYXNpYy1jaGlwIixpPXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpLmhhc0F0dHJpYnV0ZShlKXx8aS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PT1lP2kuY2xhc3NMaXN0LmFkZChlKTppLmNsYXNzTGlzdC5hZGQoIm1hdC1zdGFuZGFyZC1jaGlwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZC5lbWl0KHtjaGlwOnRoaXN9KSx0aGlzLl9jaGlwUmlwcGxlLl9yZW1vdmVUcmlnZ2VyRXZlbnRzKCl9c2VsZWN0KCl7dGhpcy5fc2VsZWN0ZWR8fCh0aGlzLl9zZWxlY3RlZD0hMCx0aGlzLl9kaXNwYXRjaFNlbGVjdGlvbkNoYW5nZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1kZXNlbGVjdCgpe3RoaXMuX3NlbGVjdGVkJiYodGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9c2VsZWN0VmlhSW50ZXJhY3Rpb24oKXt0aGlzLl9zZWxlY3RlZHx8KHRoaXMuX3NlbGVjdGVkPSEwLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKCEwKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9dG9nZ2xlU2VsZWN0ZWQoZT0hMSl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkPSF0aGlzLnNlbGVjdGVkLHRoaXMuX2Rpc3BhdGNoU2VsZWN0aW9uQ2hhbmdlKGUpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc2VsZWN0ZWR9Zm9jdXMoKXt0aGlzLl9oYXNGb2N1c3x8KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29uRm9jdXMubmV4dCh7Y2hpcDp0aGlzfSkpLHRoaXMuX2hhc0ZvY3VzPSEwfXJlbW92ZSgpe3RoaXMucmVtb3ZhYmxlJiZ0aGlzLnJlbW92ZWQuZW1pdCh7Y2hpcDp0aGlzfSl9X2hhbmRsZUNsaWNrKGUpe3RoaXMuZGlzYWJsZWQmJmUucHJldmVudERlZmF1bHQoKX1faGFuZGxlS2V5ZG93bihlKXtpZighdGhpcy5kaXNhYmxlZClzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDQ2OmNhc2UgODp0aGlzLnJlbW92ZSgpLGUucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIDMyOnRoaXMuc2VsZWN0YWJsZSYmdGhpcy50b2dnbGVTZWxlY3RlZCghMCksZS5wcmV2ZW50RGVmYXVsdCgpfX1fYmx1cigpe3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKFF0KDEpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5faGFzRm9jdXM9ITEsdGhpcy5fb25CbHVyLm5leHQoe2NoaXA6dGhpc30pfSl9KX1fZGlzcGF0Y2hTZWxlY3Rpb25DaGFuZ2UoZT0hMSl7dGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7c291cmNlOnRoaXMsaXNVc2VySW5wdXQ6ZSxzZWxlY3RlZDp0aGlzLl9zZWxlY3RlZH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKF90KSxNKG9pKSxNKGcyLDgpLE0obm4pLE0oSHQpLE0oUGksOCksdm8oInRhYmluZGV4IikpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLHNlbGVjdG9yczpbWyJtYXQtYmFzaWMtY2hpcCJdLFsiIiwibWF0LWJhc2ljLWNoaXAiLCIiXSxbIm1hdC1jaGlwIl0sWyIiLCJtYXQtY2hpcCIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiYoRWkocixhZXQsNSksRWkocixjZXQsNSksRWkocixmbWUsNSkpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuYXZhdGFyPW8uZmlyc3QpLE5lKG89TGUoKSkmJihpLnRyYWlsaW5nSWNvbj1vLmZpcnN0KSxOZShvPUxlKCkpJiYoaS5yZW1vdmVJY29uPW8uZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtY2hpcCIsIm1hdC1mb2N1cy1pbmRpY2F0b3IiXSxob3N0VmFyczoxNSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gaS5faGFuZGxlQ2xpY2sobyl9KSgia2V5ZG93biIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUtleWRvd24obyl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBpLl9ibHVyKCl9KSwyJmUmJih6ZSgidGFiaW5kZXgiLGkuZGlzYWJsZWQ/bnVsbDppLnRhYkluZGV4KSgicm9sZSIsaS5yb2xlKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWR8fG51bGwpKCJhcmlhLWRpc2FibGVkIixpLmRpc2FibGVkLnRvU3RyaW5nKCkpKCJhcmlhLXNlbGVjdGVkIixpLmFyaWFTZWxlY3RlZCksZXQoIm1hdC1jaGlwLXNlbGVjdGVkIixpLnNlbGVjdGVkKSgibWF0LWNoaXAtd2l0aC1hdmF0YXIiLGkuYXZhdGFyKSgibWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29uIixpLnRyYWlsaW5nSWNvbnx8aS5yZW1vdmVJY29uKSgibWF0LWNoaXAtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJfbWF0LWFuaW1hdGlvbi1ub29wYWJsZSIsaS5fYW5pbWF0aW9uc0Rpc2FibGVkKSl9LGlucHV0czp7Y29sb3I6ImNvbG9yIixkaXNhYmxlUmlwcGxlOiJkaXNhYmxlUmlwcGxlIix0YWJJbmRleDoidGFiSW5kZXgiLHJvbGU6InJvbGUiLHNlbGVjdGVkOiJzZWxlY3RlZCIsdmFsdWU6InZhbHVlIixzZWxlY3RhYmxlOiJzZWxlY3RhYmxlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHJlbW92YWJsZToicmVtb3ZhYmxlIn0sb3V0cHV0czp7c2VsZWN0aW9uQ2hhbmdlOiJzZWxlY3Rpb25DaGFuZ2UiLGRlc3Ryb3llZDoiZGVzdHJveWVkIixyZW1vdmVkOiJyZW1vdmVkIn0sZXhwb3J0QXM6WyJtYXRDaGlwIl0sZmVhdHVyZXM6W3R0XX0pLG59KSgpLG1tZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUsaSl7dGhpcy5fcGFyZW50Q2hpcD1lLCJCVVRUT04iPT09aS5uYXRpdmVFbGVtZW50Lm5vZGVOYW1lJiZpLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIil9X2hhbmRsZUNsaWNrKGUpe2xldCBpPXRoaXMuX3BhcmVudENoaXA7aS5yZW1vdmFibGUmJiFpLmRpc2FibGVkJiZpLnJlbW92ZSgpLGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKEpiKSxNKFJlKSl9LG4uXHUwMjc1ZGlyPUhlKHt0eXBlOm4sc2VsZWN0b3JzOltbIiIsIm1hdENoaXBSZW1vdmUiLCIiXV0saG9zdEF0dHJzOlsxLCJtYXQtY2hpcC1yZW1vdmUiLCJtYXQtY2hpcC10cmFpbGluZy1pY29uIl0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX2hhbmRsZUNsaWNrKG8pfSl9LGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6Zm1lLHVzZUV4aXN0aW5nOm59XSldfSksbn0pKCksZGV0PW5ldyBwZSgibWF0LWNoaXBzLWRlZmF1bHQtb3B0aW9ucyIpLHBldD1EdihjbGFzc3tjb25zdHJ1Y3RvcihuLHQsZSxpKXt0aGlzLl9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI9bix0aGlzLl9wYXJlbnRGb3JtPXQsdGhpcy5fcGFyZW50Rm9ybUdyb3VwPWUsdGhpcy5uZ0NvbnRyb2w9aSx0aGlzLnN0YXRlQ2hhbmdlcz1uZXcga2V9fSksaGV0PTAsZ21lPSgoKT0+e2NsYXNzIG4gZXh0ZW5kcyBwZXR7Y29uc3RydWN0b3IoZSxpLHIsbyxzLGEsbCl7c3VwZXIoYSxvLHMsbCksdGhpcy5fZWxlbWVudFJlZj1lLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWksdGhpcy5fZGlyPXIsdGhpcy5jb250cm9sVHlwZT0ibWF0LWNoaXAtbGlzdCIsdGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsLHRoaXMuX2Rlc3Ryb3llZD1uZXcga2UsdGhpcy5fdWlkPSJtYXQtY2hpcC1saXN0LSIraGV0KyssdGhpcy5fdGFiSW5kZXg9MCx0aGlzLl91c2VyVGFiSW5kZXg9bnVsbCx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX29uQ2hhbmdlPSgpPT57fSx0aGlzLl9tdWx0aXBsZT0hMSx0aGlzLl9jb21wYXJlV2l0aD0oYyx1KT0+Yz09PXUsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5hcmlhT3JpZW50YXRpb249Imhvcml6b250YWwiLHRoaXMuX3NlbGVjdGFibGU9ITAsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRyx0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdDb250cm9sLnZhbHVlQWNjZXNzb3I9dGhpcyl9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMubXVsdGlwbGU/dGhpcy5fc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkfHxbXTp0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF19Z2V0IHJvbGUoKXtyZXR1cm4gdGhpcy5fZXhwbGljaXRSb2xlP3RoaXMuX2V4cGxpY2l0Um9sZTp0aGlzLmVtcHR5P251bGw6Imxpc3Rib3gifXNldCByb2xlKGUpe3RoaXMuX2V4cGxpY2l0Um9sZT1lfWdldCBtdWx0aXBsZSgpe3JldHVybiB0aGlzLl9tdWx0aXBsZX1zZXQgbXVsdGlwbGUoZSl7dGhpcy5fbXVsdGlwbGU9UnQoZSksdGhpcy5fc3luY0NoaXBzU3RhdGUoKX1nZXQgY29tcGFyZVdpdGgoKXtyZXR1cm4gdGhpcy5fY29tcGFyZVdpdGh9c2V0IGNvbXBhcmVXaXRoKGUpe3RoaXMuX2NvbXBhcmVXaXRoPWUsdGhpcy5fc2VsZWN0aW9uTW9kZWwmJnRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMud3JpdGVWYWx1ZShlKSx0aGlzLl92YWx1ZT1lfWdldCBpZCgpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQ/dGhpcy5fY2hpcElucHV0LmlkOnRoaXMuX3VpZH1nZXQgcmVxdWlyZWQoKXtyZXR1cm4gdGhpcy5fcmVxdWlyZWQ/P3RoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoRm8ucmVxdWlyZWQpPz8hMX1zZXQgcmVxdWlyZWQoZSl7dGhpcy5fcmVxdWlyZWQ9UnQoZSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfWdldCBwbGFjZWhvbGRlcigpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQ/dGhpcy5fY2hpcElucHV0LnBsYWNlaG9sZGVyOnRoaXMuX3BsYWNlaG9sZGVyfXNldCBwbGFjZWhvbGRlcihlKXt0aGlzLl9wbGFjZWhvbGRlcj1lLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX1nZXQgZm9jdXNlZCgpe3JldHVybiB0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1c2VkfHx0aGlzLl9oYXNGb2N1c2VkQ2hpcCgpfWdldCBlbXB0eSgpe3JldHVybighdGhpcy5fY2hpcElucHV0fHx0aGlzLl9jaGlwSW5wdXQuZW1wdHkpJiYoIXRoaXMuY2hpcHN8fDA9PT10aGlzLmNoaXBzLmxlbmd0aCl9Z2V0IHNob3VsZExhYmVsRmxvYXQoKXtyZXR1cm4hdGhpcy5lbXB0eXx8dGhpcy5mb2N1c2VkfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLm5nQ29udHJvbD8hIXRoaXMubmdDb250cm9sLmRpc2FibGVkOnRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChlKXt0aGlzLl9kaXNhYmxlZD1SdChlKSx0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfWdldCBzZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGFibGV9c2V0IHNlbGVjdGFibGUoZSl7dGhpcy5fc2VsZWN0YWJsZT1SdChlKSx0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfXNldCB0YWJJbmRleChlKXt0aGlzLl91c2VyVGFiSW5kZXg9ZSx0aGlzLl90YWJJbmRleD1lfWdldCBjaGlwU2VsZWN0aW9uQ2hhbmdlcygpe3JldHVybiBKdCguLi50aGlzLmNoaXBzLm1hcChlPT5lLnNlbGVjdGlvbkNoYW5nZSkpfWdldCBjaGlwRm9jdXNDaGFuZ2VzKCl7cmV0dXJuIEp0KC4uLnRoaXMuY2hpcHMubWFwKGU9PmUuX29uRm9jdXMpKX1nZXQgY2hpcEJsdXJDaGFuZ2VzKCl7cmV0dXJuIEp0KC4uLnRoaXMuY2hpcHMubWFwKGU9PmUuX29uQmx1cikpfWdldCBjaGlwUmVtb3ZlQ2hhbmdlcygpe3JldHVybiBKdCguLi50aGlzLmNoaXBzLm1hcChlPT5lLmRlc3Ryb3llZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2tleU1hbmFnZXI9bmV3IFNoKHRoaXMuY2hpcHMpLndpdGhXcmFwKCkud2l0aFZlcnRpY2FsT3JpZW50YXRpb24oKS53aXRoSG9tZUFuZEVuZCgpLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyP3RoaXMuX2Rpci52YWx1ZToibHRyIiksdGhpcy5fZGlyJiZ0aGlzLl9kaXIuY2hhbmdlLnBpcGUoc3QodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGU9PnRoaXMuX2tleU1hbmFnZXIud2l0aEhvcml6b250YWxPcmllbnRhdGlvbihlKSksdGhpcy5fa2V5TWFuYWdlci50YWJPdXQucGlwZShzdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9hbGxvd0ZvY3VzRXNjYXBlKCl9KSx0aGlzLmNoaXBzLmNoYW5nZXMucGlwZSh6bihudWxsKSxzdCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnsodGhpcy5kaXNhYmxlZHx8IXRoaXMuc2VsZWN0YWJsZSkmJlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpfSksdGhpcy5fcmVzZXRDaGlwcygpLHRoaXMuX2luaXRpYWxpemVTZWxlY3Rpb24oKSx0aGlzLl91cGRhdGVUYWJJbmRleCgpLHRoaXMuX3VwZGF0ZUZvY3VzRm9yRGVzdHJveWVkQ2hpcHMoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX1uZ09uSW5pdCgpe3RoaXMuX3NlbGVjdGlvbk1vZGVsPW5ldyBBaCh0aGlzLm11bHRpcGxlLHZvaWQgMCwhMSksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW5nRG9DaGVjaygpe3RoaXMubmdDb250cm9sJiYodGhpcy51cGRhdGVFcnJvclN0YXRlKCksdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQhPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuZGlzYWJsZWQ9ISF0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCkpfW5nT25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2Ryb3BTdWJzY3JpcHRpb25zKCl9cmVnaXN0ZXJJbnB1dChlKXt0aGlzLl9jaGlwSW5wdXQ9ZSx0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLW1hdC1jaGlwLWlucHV0IixlLmlkKX1zZXREZXNjcmliZWRCeUlkcyhlKXtlLmxlbmd0aD90aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWRlc2NyaWJlZGJ5IixlLmpvaW4oIiAiKSk6dGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1kZXNjcmliZWRieSIpfXdyaXRlVmFsdWUoZSl7dGhpcy5jaGlwcyYmdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZShlLCExKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMuX29uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5fb25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfW9uQ29udGFpbmVyQ2xpY2soZSl7dGhpcy5fb3JpZ2luYXRlc0Zyb21DaGlwKGUpfHx0aGlzLmZvY3VzKCl9Zm9jdXMoZSl7dGhpcy5kaXNhYmxlZHx8dGhpcy5fY2hpcElucHV0JiZ0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZHx8KHRoaXMuY2hpcHMubGVuZ3RoPjA/KHRoaXMuX2tleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpKToodGhpcy5fZm9jdXNJbnB1dChlKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpKX1fZm9jdXNJbnB1dChlKXt0aGlzLl9jaGlwSW5wdXQmJnRoaXMuX2NoaXBJbnB1dC5mb2N1cyhlKX1fa2V5ZG93bihlKXtsZXQgaT1lLnRhcmdldDtpJiZpLmNsYXNzTGlzdC5jb250YWlucygibWF0LWNoaXAiKSYmKHRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGUpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9X3VwZGF0ZVRhYkluZGV4KCl7dGhpcy5fdGFiSW5kZXg9dGhpcy5fdXNlclRhYkluZGV4fHwoMD09PXRoaXMuY2hpcHMubGVuZ3RoPy0xOjApfV91cGRhdGVGb2N1c0ZvckRlc3Ryb3llZENoaXBzKCl7aWYobnVsbCE9dGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleClpZih0aGlzLmNoaXBzLmxlbmd0aCl7bGV0IGU9TWF0aC5taW4odGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleCx0aGlzLmNoaXBzLmxlbmd0aC0xKTt0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oZSl9ZWxzZSB0aGlzLmZvY3VzKCk7dGhpcy5fbGFzdERlc3Ryb3llZENoaXBJbmRleD1udWxsfV9pc1ZhbGlkSW5kZXgoZSl7cmV0dXJuIGU+PTAmJmU8dGhpcy5jaGlwcy5sZW5ndGh9X3NldFNlbGVjdGlvbkJ5VmFsdWUoZSxpPSEwKXtpZih0aGlzLl9jbGVhclNlbGVjdGlvbigpLHRoaXMuY2hpcHMuZm9yRWFjaChyPT5yLmRlc2VsZWN0KCkpLEFycmF5LmlzQXJyYXkoZSkpZS5mb3JFYWNoKHI9PnRoaXMuX3NlbGVjdFZhbHVlKHIsaSkpLHRoaXMuX3NvcnRWYWx1ZXMoKTtlbHNle2xldCByPXRoaXMuX3NlbGVjdFZhbHVlKGUsaSk7ciYmaSYmdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHIpfX1fc2VsZWN0VmFsdWUoZSxpPSEwKXtsZXQgcj10aGlzLmNoaXBzLmZpbmQobz0+bnVsbCE9by52YWx1ZSYmdGhpcy5fY29tcGFyZVdpdGgoby52YWx1ZSxlKSk7cmV0dXJuIHImJihpP3Iuc2VsZWN0VmlhSW50ZXJhY3Rpb24oKTpyLnNlbGVjdCgpLHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChyKSkscn1faW5pdGlhbGl6ZVNlbGVjdGlvbigpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnsodGhpcy5uZ0NvbnRyb2x8fHRoaXMuX3ZhbHVlKSYmKHRoaXMuX3NldFNlbGVjdGlvbkJ5VmFsdWUodGhpcy5uZ0NvbnRyb2w/dGhpcy5uZ0NvbnRyb2wudmFsdWU6dGhpcy5fdmFsdWUsITEpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSl9KX1fY2xlYXJTZWxlY3Rpb24oZSl7dGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKSx0aGlzLmNoaXBzLmZvckVhY2goaT0+e2khPT1lJiZpLmRlc2VsZWN0KCl9KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9X3NvcnRWYWx1ZXMoKXt0aGlzLl9tdWx0aXBsZSYmKHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCksdGhpcy5jaGlwcy5mb3JFYWNoKGU9PntlLnNlbGVjdGVkJiZ0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoZSl9KSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpfV9wcm9wYWdhdGVDaGFuZ2VzKGUpe2xldCBpPW51bGw7aT1BcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWQpP3RoaXMuc2VsZWN0ZWQubWFwKHI9PnIudmFsdWUpOnRoaXMuc2VsZWN0ZWQ/dGhpcy5zZWxlY3RlZC52YWx1ZTplLHRoaXMuX3ZhbHVlPWksdGhpcy5jaGFuZ2UuZW1pdChuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMudmFsdWU9ZX19KHRoaXMsaSkpLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChpKSx0aGlzLl9vbkNoYW5nZShpKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX1fYmx1cigpe3RoaXMuX2hhc0ZvY3VzZWRDaGlwKCl8fHRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSksdGhpcy5kaXNhYmxlZHx8KHRoaXMuX2NoaXBJbnB1dD9zZXRUaW1lb3V0KCgpPT57dGhpcy5mb2N1c2VkfHx0aGlzLl9tYXJrQXNUb3VjaGVkKCl9KTp0aGlzLl9tYXJrQXNUb3VjaGVkKCkpfV9tYXJrQXNUb3VjaGVkKCl7dGhpcy5fb25Ub3VjaGVkKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpfV9hbGxvd0ZvY3VzRXNjYXBlKCl7LTEhPT10aGlzLl90YWJJbmRleCYmKHRoaXMuX3RhYkluZGV4PS0xLHNldFRpbWVvdXQoKCk9Pnt0aGlzLl90YWJJbmRleD10aGlzLl91c2VyVGFiSW5kZXh8fDAsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSl9X3Jlc2V0Q2hpcHMoKXt0aGlzLl9kcm9wU3Vic2NyaXB0aW9ucygpLHRoaXMuX2xpc3RlblRvQ2hpcHNGb2N1cygpLHRoaXMuX2xpc3RlblRvQ2hpcHNTZWxlY3Rpb24oKSx0aGlzLl9saXN0ZW5Ub0NoaXBzUmVtb3ZlZCgpfV9kcm9wU3Vic2NyaXB0aW9ucygpe3RoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbj1udWxsKSx0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb249bnVsbCksdGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uPW51bGwpLHRoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb24mJih0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbj1udWxsKX1fbGlzdGVuVG9DaGlwc1NlbGVjdGlvbigpe3RoaXMuX2NoaXBTZWxlY3Rpb25TdWJzY3JpcHRpb249dGhpcy5jaGlwU2VsZWN0aW9uQ2hhbmdlcy5zdWJzY3JpYmUoZT0+e2Uuc291cmNlLnNlbGVjdGVkP3RoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChlLnNvdXJjZSk6dGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZS5zb3VyY2UpLHRoaXMubXVsdGlwbGV8fHRoaXMuY2hpcHMuZm9yRWFjaChpPT57IXRoaXMuX3NlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQoaSkmJmkuc2VsZWN0ZWQmJmkuZGVzZWxlY3QoKX0pLGUuaXNVc2VySW5wdXQmJnRoaXMuX3Byb3BhZ2F0ZUNoYW5nZXMoKX0pfV9saXN0ZW5Ub0NoaXBzRm9jdXMoKXt0aGlzLl9jaGlwRm9jdXNTdWJzY3JpcHRpb249dGhpcy5jaGlwRm9jdXNDaGFuZ2VzLnN1YnNjcmliZShlPT57bGV0IGk9dGhpcy5jaGlwcy50b0FycmF5KCkuaW5kZXhPZihlLmNoaXApO3RoaXMuX2lzVmFsaWRJbmRleChpKSYmdGhpcy5fa2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGkpLHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKX0pLHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uPXRoaXMuY2hpcEJsdXJDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuX2JsdXIoKSx0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCl9KX1fbGlzdGVuVG9DaGlwc1JlbW92ZWQoKXt0aGlzLl9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uPXRoaXMuY2hpcFJlbW92ZUNoYW5nZXMuc3Vic2NyaWJlKGU9PntsZXQgaT1lLmNoaXAscj10aGlzLmNoaXBzLnRvQXJyYXkoKS5pbmRleE9mKGUuY2hpcCk7dGhpcy5faXNWYWxpZEluZGV4KHIpJiZpLl9oYXNGb2N1cyYmKHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXg9cil9KX1fb3JpZ2luYXRlc0Zyb21DaGlwKGUpe2xldCBpPWUudGFyZ2V0O2Zvcig7aSYmaSE9PXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDspe2lmKGkuY2xhc3NMaXN0LmNvbnRhaW5zKCJtYXQtY2hpcCIpKXJldHVybiEwO2k9aS5wYXJlbnRFbGVtZW50fXJldHVybiExfV9oYXNGb2N1c2VkQ2hpcCgpe3JldHVybiB0aGlzLmNoaXBzJiZ0aGlzLmNoaXBzLnNvbWUoZT0+ZS5faGFzRm9jdXMpfV9zeW5jQ2hpcHNTdGF0ZSgpe3RoaXMuY2hpcHMmJnRoaXMuY2hpcHMuZm9yRWFjaChlPT57ZS5fY2hpcExpc3REaXNhYmxlZD10aGlzLl9kaXNhYmxlZCxlLl9jaGlwTGlzdE11bHRpcGxlPXRoaXMubXVsdGlwbGUsZS5jaGlwTGlzdFNlbGVjdGFibGU9dGhpcy5fc2VsZWN0YWJsZX0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKFJlKSxNKG5uKSxNKCRpLDgpLE0oTGgsOCksTShWaCw4KSxNKGNkKSxNKE5zLDEwKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LWNoaXAtbGlzdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihlLGkscil7aWYoMSZlJiZFaShyLEpiLDUpLDImZSl7bGV0IG87TmUobz1MZSgpKSYmKGkuY2hpcHM9byl9fSxob3N0QXR0cnM6WzEsIm1hdC1jaGlwLWxpc3QiXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZSxpKXsxJmUmJlAoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBpLmZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fYmx1cigpfSkoImtleWRvd24iLGZ1bmN0aW9uKG8pe3JldHVybiBpLl9rZXlkb3duKG8pfSksMiZlJiYoX3MoImlkIixpLl91aWQpLHplKCJ0YWJpbmRleCIsaS5kaXNhYmxlZD9udWxsOmkuX3RhYkluZGV4KSgiYXJpYS1yZXF1aXJlZCIsaS5yb2xlP2kucmVxdWlyZWQ6bnVsbCkoImFyaWEtZGlzYWJsZWQiLGkuZGlzYWJsZWQudG9TdHJpbmcoKSkoImFyaWEtaW52YWxpZCIsaS5lcnJvclN0YXRlKSgiYXJpYS1tdWx0aXNlbGVjdGFibGUiLGkubXVsdGlwbGUpKCJyb2xlIixpLnJvbGUpKCJhcmlhLW9yaWVudGF0aW9uIixpLmFyaWFPcmllbnRhdGlvbiksZXQoIm1hdC1jaGlwLWxpc3QtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtY2hpcC1saXN0LWludmFsaWQiLGkuZXJyb3JTdGF0ZSkoIm1hdC1jaGlwLWxpc3QtcmVxdWlyZWQiLGkucmVxdWlyZWQpKX0saW5wdXRzOntyb2xlOiJyb2xlIix1c2VyQXJpYURlc2NyaWJlZEJ5OlsiYXJpYS1kZXNjcmliZWRieSIsInVzZXJBcmlhRGVzY3JpYmVkQnkiXSxlcnJvclN0YXRlTWF0Y2hlcjoiZXJyb3JTdGF0ZU1hdGNoZXIiLG11bHRpcGxlOiJtdWx0aXBsZSIsY29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIix2YWx1ZToidmFsdWUiLHJlcXVpcmVkOiJyZXF1aXJlZCIscGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixkaXNhYmxlZDoiZGlzYWJsZWQiLGFyaWFPcmllbnRhdGlvbjpbImFyaWEtb3JpZW50YXRpb24iLCJhcmlhT3JpZW50YXRpb24iXSxzZWxlY3RhYmxlOiJzZWxlY3RhYmxlIix0YWJJbmRleDoidGFiSW5kZXgifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIn0sZXhwb3J0QXM6WyJtYXRDaGlwTGlzdCJdLGZlYXR1cmVzOlskdChbe3Byb3ZpZGU6a2gsdXNlRXhpc3Rpbmc6bn1dKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOnNldCxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1sxLCJtYXQtY2hpcC1saXN0LXdyYXBwZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJih4aSgpLF8oMCwiZGl2IiwwKSxWbigxKSx2KCkpfSxzdHlsZXM6WycubWF0LWNoaXB7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlcjpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lfS5tYXQtY2hpcDo6YmVmb3Jle21hcmdpbjpjYWxjKGNhbGModmFyKC0tbWF0LWZvY3VzLWluZGljYXRvci1ib3JkZXItd2lkdGgsIDNweCkgKyAycHgpICogLTEpfS5tYXQtc3RhbmRhcmQtY2hpcHt0cmFuc2l0aW9uOmJveC1zaGFkb3cgMjgwbXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTtkaXNwbGF5OmlubGluZS1mbGV4O3BhZGRpbmc6N3B4IDEycHg7Ym9yZGVyLXJhZGl1czoxNnB4O2FsaWduLWl0ZW1zOmNlbnRlcjtjdXJzb3I6ZGVmYXVsdDttaW4taGVpZ2h0OjMycHg7aGVpZ2h0OjFweH0ubWF0LXN0YW5kYXJkLWNoaXAuX21hdC1hbmltYXRpb24tbm9vcGFibGV7dHJhbnNpdGlvbjpub25lICFpbXBvcnRhbnQ7YW5pbWF0aW9uOm5vbmUgIWltcG9ydGFudH0ubWF0LXN0YW5kYXJkLWNoaXAgLm1hdC1jaGlwLXJlbW92ZXtib3JkZXI6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTtwYWRkaW5nOjA7YmFja2dyb3VuZDpub25lfS5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlLm1hdC1pY29uLC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtcmVtb3ZlIC5tYXQtaWNvbnt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2ZvbnQtc2l6ZToxOHB4fS5tYXQtc3RhbmRhcmQtY2hpcDo6YWZ0ZXJ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLXJhZGl1czppbmhlcml0O29wYWNpdHk6MDtjb250ZW50OiIiO3BvaW50ZXItZXZlbnRzOm5vbmU7dHJhbnNpdGlvbjpvcGFjaXR5IDIwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKX0ubWF0LXN0YW5kYXJkLWNoaXA6aG92ZXI6OmFmdGVye29wYWNpdHk6LjEyfS5tYXQtc3RhbmRhcmQtY2hpcDpmb2N1c3tvdXRsaW5lOm5vbmV9Lm1hdC1zdGFuZGFyZC1jaGlwOmZvY3VzOjphZnRlcntvcGFjaXR5Oi4xNn0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcHtvdXRsaW5lOnNvbGlkIDFweH0uY2RrLWhpZ2gtY29udHJhc3QtYWN0aXZlIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC1zZWxlY3RlZHtvdXRsaW5lLXdpZHRoOjNweH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQ6OmFmdGVye29wYWNpdHk6MH0ubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQgLm1hdC1jaGlwLXJlbW92ZSwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtZGlzYWJsZWQgLm1hdC1jaGlwLXRyYWlsaW5nLWljb257Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbi5tYXQtY2hpcC13aXRoLWF2YXRhciwubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTowfS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1yaWdodDo4cHg7cGFkZGluZy1sZWZ0OjB9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLXRyYWlsaW5nLWljb24ubWF0LWNoaXAtd2l0aC1hdmF0YXJ7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjB9Lm1hdC1zdGFuZGFyZC1jaGlwLm1hdC1jaGlwLXdpdGgtdHJhaWxpbmctaWNvbntwYWRkaW5nLXRvcDo3cHg7cGFkZGluZy1ib3R0b206N3B4O3BhZGRpbmctcmlnaHQ6OHB4O3BhZGRpbmctbGVmdDoxMnB4fVtkaXI9cnRsXSAubWF0LXN0YW5kYXJkLWNoaXAubWF0LWNoaXAtd2l0aC10cmFpbGluZy1pY29ue3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDoxMnB4fS5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjEycHh9W2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcC5tYXQtY2hpcC13aXRoLWF2YXRhcntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjEycHh9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1hdmF0YXJ7d2lkdGg6MjRweDtoZWlnaHQ6MjRweDttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjRweH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1hdmF0YXJ7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi1yaWdodDo0cHh9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7Y3Vyc29yOnBvaW50ZXJ9Lm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC10cmFpbGluZy1pY29ue21hcmdpbi1sZWZ0OjhweDttYXJnaW4tcmlnaHQ6MH1bZGlyPXJ0bF0gLm1hdC1zdGFuZGFyZC1jaGlwIC5tYXQtY2hpcC1yZW1vdmUsW2Rpcj1ydGxdIC5tYXQtc3RhbmRhcmQtY2hpcCAubWF0LWNoaXAtdHJhaWxpbmctaWNvbnttYXJnaW4tcmlnaHQ6OHB4O21hcmdpbi1sZWZ0OjB9Lm1hdC1jaGlwLXJpcHBsZXt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MDtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2JvcmRlci1yYWRpdXM6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dHJhbnNmb3JtOnRyYW5zbGF0ZVooMCl9Lm1hdC1jaGlwLWxpc3Qtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW46LTRweH0ubWF0LWNoaXAtbGlzdC13cmFwcGVyIGlucHV0Lm1hdC1pbnB1dC1lbGVtZW50LC5tYXQtY2hpcC1saXN0LXdyYXBwZXIgLm1hdC1zdGFuZGFyZC1jaGlwe21hcmdpbjo0cHh9Lm1hdC1jaGlwLWxpc3Qtc3RhY2tlZCAubWF0LWNoaXAtbGlzdC13cmFwcGVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tYXQtY2hpcC1saXN0LXN0YWNrZWQgLm1hdC1jaGlwLWxpc3Qtd3JhcHBlciAubWF0LXN0YW5kYXJkLWNoaXB7d2lkdGg6MTAwJX0ubWF0LWNoaXAtYXZhdGFye2JvcmRlci1yYWRpdXM6NTAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW47b2JqZWN0LWZpdDpjb3Zlcn1pbnB1dC5tYXQtY2hpcC1pbnB1dHt3aWR0aDoxNTBweDttYXJnaW46NHB4O2ZsZXg6MSAwIDE1MHB4fSddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLCRiPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtwcm92aWRlcnM6W2NkLHtwcm92aWRlOmRldCx1c2VWYWx1ZTp7c2VwYXJhdG9yS2V5Q29kZXM6WzEzXX19XSxpbXBvcnRzOltsbl19KSxufSkoKSxmZXQ9ZnVuY3Rpb24obix0KXtyZXR1cm57ImVtYmVkZGluZy1zZWxlY3RlZCI6biwiZW1iZWRkaW5nLXVuc2VsZWN0ZWQiOnR9fTtmdW5jdGlvbiBtZXQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJtYXQtaWNvbiIsNSksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2UoZSk7bGV0IHI9UygpO3JldHVybiBzZShyLm9uU2VsZWN0LmVtaXQoci5tZXRyaWMpKX0pLHYoKX1pZigyJm4pe2xldCBlPVMoKTt5KCJuZ0NsYXNzIixRcigxLGZldCxlLmVtYmVkZGluZ3NNZXRyaWM9PT1lLm1ldHJpYyxlLmVtYmVkZGluZ3NNZXRyaWMhPT1lLm1ldHJpYykpfX12YXIgX21lPWZ1bmN0aW9uKG4pe3JldHVybnt3aWR0aDpufX0sdm1lPWZ1bmN0aW9uKG4pe3JldHVybnsidmFsdWUtaW52YWxpZCI6bn19LHltZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlbW92ZT1uZXcgRyx0aGlzLm9uU2VsZWN0PW5ldyBHLHRoaXMub25GaWx0ZXJDaGFuZ2U9bmV3IEcsdGhpcy5mb2N1c01pbj0hMSx0aGlzLmZvY3VzTWF4PSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9bmdPbkluaXQoKXt0aGlzLm1pbkZvcm1Db250cm9sPW5ldyBCaCh0aGlzLmZpbHRlclZhbHVlcy5taW4sW0ZvLnJlcXVpcmVkLEZvLm1pbigtMSksRm8ubWF4KDEpLHRoaXMubWluVmFsdWVWYWxpZGF0b3IuYmluZCh0aGlzKV0pLHRoaXMubWF4Rm9ybUNvbnRyb2w9bmV3IEJoKHRoaXMuZmlsdGVyVmFsdWVzLm1heCxbRm8ucmVxdWlyZWQsRm8ubWluKC0xKSxGby5tYXgoMSksdGhpcy5tYXhWYWx1ZVZhbGlkYXRvci5iaW5kKHRoaXMpXSksdGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShzdCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1pbkZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm1heEZvcm1Db250cm9sLnZhbGlkJiZ0aGlzLm9uRmlsdGVyQ2hhbmdlLmVtaXQoe21pbjpwYXJzZUZsb2F0KHRoaXMubWluRm9ybUNvbnRyb2wudmFsdWUpLG1heDpwYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpfSl9KSx0aGlzLm1heEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKT0+e3RoaXMubWluRm9ybUNvbnRyb2wudmFsaWQmJnRoaXMubWF4Rm9ybUNvbnRyb2wudmFsaWQmJnRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdCh7bWluOnBhcnNlRmxvYXQodGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZSksbWF4OnBhcnNlRmxvYXQodGhpcy5tYXhGb3JtQ29udHJvbC52YWx1ZSl9KX0pfW5nT25DaGFuZ2VzKGUpe3RoaXMubWluRm9ybUNvbnRyb2wmJnRoaXMubWF4Rm9ybUNvbnRyb2wmJih0aGlzLm1pbkZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZmlsdGVyVmFsdWVzLm1pbix7ZW1pdEV2ZW50OiExfSksdGhpcy5tYXhGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmZpbHRlclZhbHVlcy5tYXgse2VtaXRFdmVudDohMX0pKX1uZ09uRGVzdHJveSgpe3RoaXMubmdVbnN1YnNjcmliZS5uZXh0KCksdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCl9bWluVmFsdWVWYWxpZGF0b3IoZSl7cmV0dXJuIHRoaXMubWF4Rm9ybUNvbnRyb2wmJiJOYU4iIT09ZS52YWx1ZT9pc05hTihwYXJzZUZsb2F0KGUudmFsdWUpKT97dmFsdWU6InRoZSBzdHJpbmcgeW91IGVudGVyZWQgaXMgbmVpdGhlciBOYU4gbm9yIGEgbnVtYmVyIn06cGFyc2VGbG9hdChlLnZhbHVlKT5wYXJzZUZsb2F0KHRoaXMubWF4Rm9ybUNvbnRyb2wudmFsdWUpP3t2YWx1ZToidGhlIG51bWJlciB5b3UgZW50ZXJlZCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4IHZhbHVlIn06bnVsbDpudWxsfW1heFZhbHVlVmFsaWRhdG9yKGUpe3JldHVybiB0aGlzLm1pbkZvcm1Db250cm9sPyJOYU4iPT09dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZSYmIk5hTiI9PT1lLnZhbHVlP251bGw6aXNOYU4ocGFyc2VGbG9hdChlLnZhbHVlKSk/e3ZhbHVlOiJ0aGUgc3RyaW5nIHlvdSBlbnRlcmVkIGlzIG5laXRoZXIgTmFOIG5vciBhIG51bWJlciJ9OmUudmFsdWU8dGhpcy5taW5Gb3JtQ29udHJvbC52YWx1ZT97dmFsdWU6InRoZSBudW1iZXIgeW91IGVudGVyZWQgaXMgc21hbGxlciB0aGFuIHRoZSBtaW4gdmFsdWUifTpudWxsOm51bGx9Z2V0RXJyb3JEZXNjcmlwdGlvbihlKXtpZihlKXtsZXQgaT1PYmplY3Qua2V5cyhlKVswXTtyZXR1cm4icmVxdWlyZWQiPT09aT8ieW91IGRpZCBub3QgZW50ZXIgYW55dGhpbmciOiJtaW4iPT09aT8idGhlIG51bWJlciBtdXN0IGJlIGF0IGxlYXN0IC0xLjAiOiJtYXgiPT09aT8idGhlIG51bWJlciBpcyBiaWdnZXIgdGhhbiAxLjAiOmVbaV19cmV0dXJuIiJ9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50Il1dLGlucHV0czp7bWV0cmljOiJtZXRyaWMiLGZpbHRlclZhbHVlczoiZmlsdGVyVmFsdWVzIixoYXNFbWJlZGRpbmdzRGF0YToiaGFzRW1iZWRkaW5nc0RhdGEiLGVtYmVkZGluZ3NNZXRyaWM6ImVtYmVkZGluZ3NNZXRyaWMifSxvdXRwdXRzOntvblJlbW92ZToib25SZW1vdmUiLG9uU2VsZWN0OiJvblNlbGVjdCIsb25GaWx0ZXJDaGFuZ2U6Im9uRmlsdGVyQ2hhbmdlIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxMCx2YXJzOjIyLGNvbnN0czpbWzEsImZpbHRlci1jaGlwIiwzLCJyZW1vdmVkIl0sWyJjbGFzcyIsImVtYmVkZGluZ3MtYnV0dG9uIiwic3ZnSWNvbiIsImdyb3VwX3dvcmtfMjRweCIsMywibmdDbGFzcyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtcmFuZ2UiLDMsImtleWRvd24iXSxbIm1hdElucHV0IiwiIiwxLCJpbnB1dC1maWVsZCIsMywidmFsdWUiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcERpc2FibGVkIiwibmdTdHlsZSIsIm5nQ2xhc3MiLCJmb3JtQ29udHJvbCIsImZvY3VzIiwiZm9jdXNvdXQiXSxbIm1hdENoaXBSZW1vdmUiLCIiLCJzdmdJY29uIiwiY2FuY2VsXzI0cHgiXSxbInN2Z0ljb24iLCJncm91cF93b3JrXzI0cHgiLDEsImVtYmVkZGluZ3MtYnV0dG9uIiwzLCJuZ0NsYXNzIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC1jaGlwIiwwKSxQKCJyZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVtb3ZlLmVtaXQoaS5tZXRyaWMpfSksRSgxLG1ldCwxLDQsIm1hdC1pY29uIiwxKSxBKDIpLF8oMywiZGl2IiwyKSxQKCJrZXlkb3duIixmdW5jdGlvbihvKXtyZXR1cm4gby5zdG9wUHJvcGFnYXRpb24oKX0pLEEoNCwiIFsgIiksXyg1LCJpbnB1dCIsMyksUCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXNNaW49ITB9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZm9jdXNNaW49ITF9KSx2KCksQSg2LCIgOyAiKSxfKDcsImlucHV0IiwzKSxQKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS5mb2N1c01heD0hMH0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5mb2N1c01heD0hMX0pLHYoKSxBKDgsIiBdICIpLHYoKSxPKDksIm1hdC1pY29uIiw0KSx2KCkpLDImZSYmKEMoMSkseSgibmdJZiIsaS5oYXNFbWJlZGRpbmdzRGF0YSksQygxKSxqZSgiICIsaS5tZXRyaWMsIiAiKSxDKDMpLHkoInZhbHVlIixpLmZpbHRlclZhbHVlcy5taW4pKCJtYXRUb29sdGlwIixpLmdldEVycm9yRGVzY3JpcHRpb24oaS5taW5Gb3JtQ29udHJvbC5lcnJvcnMpKSgibWF0VG9vbHRpcERpc2FibGVkIiwhaS5taW5Gb3JtQ29udHJvbC5pbnZhbGlkKSgibmdTdHlsZSIsT24oMTQsX21lLGkuZm9jdXNNaW4/IjEwMHB4IjppLm1pbkZvcm1Db250cm9sLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKyJjaCIpKSgibmdDbGFzcyIsT24oMTYsdm1lLCFpLm1pbkZvcm1Db250cm9sLnZhbGlkKSkoImZvcm1Db250cm9sIixpLm1pbkZvcm1Db250cm9sKSxDKDIpLHkoInZhbHVlIixpLmZpbHRlclZhbHVlcy5tYXgpKCJtYXRUb29sdGlwIixpLmdldEVycm9yRGVzY3JpcHRpb24oaS5tYXhGb3JtQ29udHJvbC5lcnJvcnMpKSgibWF0VG9vbHRpcERpc2FibGVkIiwhaS5tYXhGb3JtQ29udHJvbC5pbnZhbGlkKSgibmdTdHlsZSIsT24oMTgsX21lLGkuZm9jdXNNYXg/IjEwMHB4IjppLm1heEZvcm1Db250cm9sLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKyJjaCIpKSgibmdDbGFzcyIsT24oMjAsdm1lLCFpLm1heEZvcm1Db250cm9sLnZhbGlkKSkoImZvcm1Db250cm9sIixpLm1heEZvcm1Db250cm9sKSl9LGRlcGVuZGVuY2llczpbRm4sQmUsenUsQnYsVjIsbXcsR3QsSmIsbW1lLFhrXSxzdHlsZXM6WyIuZmlsdGVyLWNoaXBbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7bWFyZ2luLWxlZnQ6NXB4fS5tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50LXJhbmdlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2ZvbnQtc2l6ZTouOGVtO2hlaWdodDozMHB4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgNXB4O21hcmdpbi1sZWZ0OjVweH0uaW5wdXQtZmllbGRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXI6bm9uZTtmb250LWZhbWlseTptb25vc3BhY2U7Zm9udC1zaXplOjEuMWVtO3RyYW5zaXRpb246d2lkdGggMXN9LmlucHV0LWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjEyKTtib3JkZXI6bm9uZTtvdXRsaW5lOm5vbmV9LnZhbHVlLWludmFsaWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmNDQzMzZ9LmVtYmVkZGluZy1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y1N2MwMDtvcGFjaXR5OjF9LmVtYmVkZGluZy11bnNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi40fS5lbWJlZGRpbmdzLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MThweDtoZWlnaHQ6MThweDttYXJnaW4tcmlnaHQ6OHB4O2N1cnNvcjpwb2ludGVyfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksYm1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZmlsdGVyVmFsdWVzJD10aGlzLnN0b3JlLnBpcGUodnQoSWwpKS5waXBlKEwoaT0+e2xldCByPWlbdGhpcy5tZXRyaWNdO3JldHVybiByP3ttaW46ci5pbmNsdWRlTmFOPyJOYU4iOnRoaXMucm91bmRUb1RocmVlRGVjaW1hbFBvaW50cyhyLm1pbiksbWF4OnIubWF4PHIubWluPyJOYU4iOnRoaXMucm91bmRUb1RocmVlRGVjaW1hbFBvaW50cyhyLm1heCl9OnttaW46LTEsbWF4OjF9fSkpLHRoaXMuaGFzRW1iZWRkaW5nc0RhdGEkPXRoaXMuc3RvcmUucGlwZSh2dChCRikpLnBpcGUoTChpPT52b2lkIDAhPT1pKSksdGhpcy5lbWJlZGRpbmdzTWV0cmljJD10aGlzLnN0b3JlLnBpcGUodnQoYW1lKSl9cmVtb3ZlKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR2Ioe21ldHJpYzplfSkpfXNlbGVjdChlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEZGKHttZXRyaWM6ZX0pKX1maWx0ZXJDaGFuZ2UoZSl7bGV0IGk9aXNOYU4oZS5taW4pPy0xOmUubWluLHI9aXNOYU4oZS5tYXgpPy0yOmUubWF4LG89aXNOYU4oZS5taW4pO3RoaXMuc3RvcmUuZGlzcGF0Y2goV2Ioe21ldHJpYzp0aGlzLm1ldHJpYyxtYXg6cixtaW46aSxpbmNsdWRlTmFOOm99KSl9cm91bmRUb1RocmVlRGVjaW1hbFBvaW50cyhlKXtyZXR1cm4gTWF0aC5yb3VuZCgxZTMqKGUrTnVtYmVyLkVQU0lMT04pKS8xZTN9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLW1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQiXV0saW5wdXRzOnttZXRyaWM6Im1ldHJpYyJ9LGRlY2xzOjQsdmFyczoxMCxjb25zdHM6W1szLCJtZXRyaWMiLCJmaWx0ZXJWYWx1ZXMiLCJoYXNFbWJlZGRpbmdzRGF0YSIsImVtYmVkZGluZ3NNZXRyaWMiLCJvblJlbW92ZSIsIm9uU2VsZWN0Iiwib25GaWx0ZXJDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQtY29tcG9uZW50IiwwKSxQKCJvblJlbW92ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVtb3ZlKG8pfSkoIm9uU2VsZWN0IixmdW5jdGlvbihvKXtyZXR1cm4gaS5zZWxlY3Qobyl9KSgib25GaWx0ZXJDaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmZpbHRlckNoYW5nZShvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJtZXRyaWMiLGkubWV0cmljKSgiZmlsdGVyVmFsdWVzIixVKDEsNCxpLmZpbHRlclZhbHVlcyQpKSgiaGFzRW1iZWRkaW5nc0RhdGEiLFUoMiw2LGkuaGFzRW1iZWRkaW5nc0RhdGEkKSkoImVtYmVkZGluZ3NNZXRyaWMiLFUoMyw4LGkuZW1iZWRkaW5nc01ldHJpYyQpKX0sZGVwZW5kZW5jaWVzOlt5bWUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHhtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5PcGVyYXRvcj1zMH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1vcGVyYXRvciJdXSxpbnB1dHM6e29wZXJhdG9yOiJvcGVyYXRvciJ9LGRlY2xzOjIsdmFyczoxLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJtYXQtY2hpcCIpLEEoMSksdigpKSwyJmUmJihDKDEpLGplKCIgIixpLm9wZXJhdG9yPT09aS5PcGVyYXRvci5BTkQ/IiYiOiIiLCIgIikpfSxkZXBlbmRlbmNpZXM6W0piXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB5ZXQobix0KXsxJm4mJk8oMCwibnBtaS1tZXRyaWMtYXJpdGhtZXRpYy1lbGVtZW50Iiw0KSwyJm4mJnkoIm1ldHJpYyIsUygpLiRpbXBsaWNpdC5tZXRyaWMpfWZ1bmN0aW9uIGJldChuLHQpezEmbiYmTygwLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIiw1KSwyJm4mJnkoIm9wZXJhdG9yIixTKCkuJGltcGxpY2l0Lm9wZXJhdG9yKX1mdW5jdGlvbiB4ZXQobix0KXtpZigxJm4mJihfKDAsImRpdiIpLEUoMSx5ZXQsMSwxLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLWVsZW1lbnQiLDIpLEUoMixiZXQsMSwxLCJucG1pLW1ldHJpYy1hcml0aG1ldGljLW9wZXJhdG9yIiwzKSx2KCkpLDImbil7bGV0IGU9dC4kaW1wbGljaXQsaT1TKCk7QygxKSx5KCJuZ0lmIixlLmtpbmQ9PT1pLkFyaXRobWV0aWNLaW5kLk1FVFJJQyksQygxKSx5KCJuZ0lmIixlLmtpbmQ9PT1pLkFyaXRobWV0aWNLaW5kLk9QRVJBVE9SKX19dmFyIENtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5Bcml0aG1ldGljS2luZD1tdX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50Il1dLGlucHV0czp7bWV0cmljQXJpdGhtZXRpYzoibWV0cmljQXJpdGhtZXRpYyJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWzMsInNlbGVjdGFibGUiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm1ldHJpYyIsNCwibmdJZiJdLFszLCJvcGVyYXRvciIsNCwibmdJZiJdLFszLCJtZXRyaWMiXSxbMywib3BlcmF0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1hdC1jaGlwLWxpc3QiLDApLEUoMSx4ZXQsMywyLCJkaXYiLDEpLHYoKSksMiZlJiYoeSgic2VsZWN0YWJsZSIsITEpLEMoMSkseSgibmdGb3JPZiIsaS5tZXRyaWNBcml0aG1ldGljKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsZ21lLGJtZSx4bWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXB9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxNbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5tZXRyaWNBcml0aG1ldGljJD10aGlzLnN0b3JlLnBpcGUodnQoSEYpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktbWV0cmljLWFyaXRobWV0aWMiXV0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbMywibWV0cmljQXJpdGhtZXRpYyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKE8oMCwibWV0cmljLWFyaXRobWV0aWMtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIikpLDImZSYmeSgibWV0cmljQXJpdGhtZXRpYyIsVSgxLDEsaS5tZXRyaWNBcml0aG1ldGljJCkpfSxkZXBlbmRlbmNpZXM6W0NtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gd21lKG4sdCxlKXtsZXQgaT1bW3QsLi4uZV1dO2lmKCFlLmxlbmd0aHx8IW4ubGVuZ3RoKXJldHVybiJkYXRhOnRleHQvY3N2O2NoYXJzZXQ9dXRmLTgsIitpLm1hcChhPT5hLmpvaW4oIiwiKSkuam9pbigiXG4iKTtsZXQgcj1lLm1hcChzPT5TcyhzKSk7Zm9yKGxldFtzLGFdb2Ygbil7bGV0IGw9YS5maWx0ZXIoYz0+Yy5ydW49PT10KTtpZihsLmxlbmd0aCl7bGV0IGM9W3NdO2ZvcihsZXQgdSBvZiByKXtsZXQgZD1sLmZpbmQocD0+cC5tZXRyaWM9PT11KTtjLnB1c2godm9pZCAwPT09ZD8ibnVsbCI6YCR7ZC5uUE1JVmFsdWV9YCl9aS5wdXNoKGMpfX1yZXR1cm4iZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCIraS5tYXAocz0+cy5qb2luKCIsIikpLmpvaW4oIlxuIil9dmFyIHdldD1mdW5jdGlvbihuKXtyZXR1cm57ImFjdGl2ZS1idXR0b24iOm59fSxTbWU9KCgpPT57Y2xhc3Mgbntkb3dubG9hZFJlc3VsdHMoKXtmb3IobGV0IGUgb2YgdGhpcy5ydW5zKXtsZXQgaT13bWUodGhpcy5mbGFnZ2VkRGF0YSxlLHRoaXMubWV0cmljcykscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7ci5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHIuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYHJlcG9ydF8ke2V9LmNzdmApLHIuY2xpY2soKX19fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlc3VsdHMtZG93bmxvYWQtY29tcG9uZW50Il1dLGlucHV0czp7bnVtRmxhZ2dlZEFubm90YXRpb25zOiJudW1GbGFnZ2VkQW5ub3RhdGlvbnMiLHJ1bnM6InJ1bnMiLGZsYWdnZWREYXRhOiJmbGFnZ2VkRGF0YSIsbWV0cmljczoibWV0cmljcyJ9LGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWyJtYXQtc3Ryb2tlZC1idXR0b24iLCIiLCJ0aXRsZSIsIkV4cG9ydCBDU1YgcmVwb3J0cyBvZiBhbGwgZmxhZ2dlZCBhbm5vdGF0aW9ucy4gV2lsbCBnZW5lcmF0ZSBvbmUgQ1NWIHBlciBhY3RpdmUgcnVuLiIsMywiZGlzYWJsZWQiLCJuZ0NsYXNzIiwiY2xpY2siXSxbMSwiYnV0dG9uLWNvbnRlbnRzIl0sWyJzdmdJY29uIiwiZ2V0X2FwcF8yNHB4Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJidXR0b24iLDApLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLmRvd25sb2FkUmVzdWx0cygpfSksXygxLCJzcGFuIiwxKSxPKDIsIm1hdC1pY29uIiwyKSxBKDMpLHYoKSgpKSwyJmUmJih5KCJkaXNhYmxlZCIsMD09PWkubnVtRmxhZ2dlZEFubm90YXRpb25zKSgibmdDbGFzcyIsT24oMyx3ZXQsaS5udW1GbGFnZ2VkQW5ub3RhdGlvbnM+MCkpLEMoMyksamUoIiBGbGFnZ2VkIFJvd3MgKCIsaS5udW1GbGFnZ2VkQW5ub3RhdGlvbnMsIikgIikpfSxkZXBlbmRlbmNpZXM6W0ZuLEd0LF9uXSxzdHlsZXM6WyIuYWN0aXZlLWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmY5ODAwO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtjb2xvcjojZmZmfS5idXR0b24tY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfW1hdC1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NnB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksRW1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuZmxhZ2dlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChWRiksdGhpcy5udW1GbGFnZ2VkQW5ub3RhdGlvbnMkPXRoaXMuZmxhZ2dlZEFubm90YXRpb25zJC5waXBlKEwoaT0+aS5sZW5ndGgpKSx0aGlzLmFjdGl2ZVJ1bnMkPXRoaXMuc3RvcmUuc2VsZWN0KG9vKS5waXBlKEwoaT0+aT9BcnJheS5mcm9tKGkuZW50cmllcygpKS5maWx0ZXIocj0+clsxXSkubWFwKHI9PnJbMF0pOltdKSksdGhpcy5mbGFnZ2VkRGF0YSQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFBmKSx0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucyRdKS5waXBlKEwoKFtpLHJdKT0+e2xldCBvPW5ldyBTZXQocik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGkpLmZpbHRlcihhPT5vLmhhcyhhWzBdKSl9KSksdGhpcy5tZXRyaWNzJD1MdChbdGhpcy5zdG9yZS5zZWxlY3QoUmYpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoSWwpXSkucGlwZShMKChbaSxyLG9dKT0+e2xldCBzPU9iamVjdC5rZXlzKG8pO2ZvcihsZXQgYSBvZiByKWlbYV0mJihzPXMuY29uY2F0KGlbYV0uZmlsdGVyKGw9PlZiKGwpKSkpO3JldHVybiBzPVsuLi5uZXcgU2V0KHMpXSxzfSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1yZXN1bHRzLWRvd25sb2FkIl1dLGRlY2xzOjUsdmFyczoxMixjb25zdHM6W1szLCJudW1GbGFnZ2VkQW5ub3RhdGlvbnMiLCJydW5zIiwiZmxhZ2dlZERhdGEiLCJtZXRyaWNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJyZXN1bHRzLWRvd25sb2FkLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpKSwyJmUmJnkoIm51bUZsYWdnZWRBbm5vdGF0aW9ucyIsVSgxLDQsaS5udW1GbGFnZ2VkQW5ub3RhdGlvbnMkKSkoInJ1bnMiLFUoMiw2LGkuYWN0aXZlUnVucyQpKSgiZmxhZ2dlZERhdGEiLFUoMyw4LGkuZmxhZ2dlZERhdGEkKSkoIm1ldHJpY3MiLFUoNCwxMCxpLm1ldHJpY3MkKSl9LGRlcGVuZGVuY2llczpbU21lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxXRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLWRhdGEtc2VsZWN0aW9uIl1dLGRlY2xzOjQsdmFyczowLGNvbnN0czpbWzEsImRhdGEtc2VsZWN0aW9uIl0sWzEsIm1ldHJpY3Mtc2VsZWN0b3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCksTygxLCJucG1pLW1ldHJpYy1zZWFyY2giLDEpKDIsIm5wbWktcmVzdWx0cy1kb3dubG9hZCIpLHYoKSxPKDMsIm5wbWktbWV0cmljLWFyaXRobWV0aWMiKSl9LGRlcGVuZGVuY2llczpbaG1lLE1tZSxFbWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO3BhZGRpbmc6MTBweCAyMHB4fS5kYXRhLXNlbGVjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ubWV0cmljcy1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBxRihuLHQsZSl7aWYoZSlyZXR1cm4gbjtsZXQgaT17Li4ubn07cmV0dXJuIHQuZm9yRWFjaChyPT5kZWxldGUgaVtyXSksaX12YXIgQWV0PVsiY2hhcnQiXSxJbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25SZW1vdmU9bmV3IEcsdGhpcy5vblVwZGF0ZUZpbHRlcj1uZXcgRyx0aGlzLmhlaWdodD0zMDAsdGhpcy5jaGFydFdpZHRoPTAsdGhpcy5jaGFydEhlaWdodD0wLHRoaXMuZHJhd0hlaWdodD0wLHRoaXMuZHJhd1dpZHRoPTAsdGhpcy5tYXJnaW49e3RvcDoyMCxyaWdodDoxMCxib3R0b206MjAsbGVmdDoxMH0sdGhpcy5kcmF3TWFyZ2luPXt0b3A6MCxyaWdodDowLGJvdHRvbToyMCxsZWZ0OjIwfSx0aGlzLmJydXNoPWZ1bmN0aW9uKG4pe3ZhciBhLHQ9VFVlLGU9RVVlLGk9RFVlLHI9ITAsbz1Hdygic3RhcnQiLCJicnVzaCIsImVuZCIpLHM9NjtmdW5jdGlvbiBsKHgpe3ZhciBnPXgucHJvcGVydHkoIl9fYnJ1c2giLG0pLnNlbGVjdEFsbCgiLm92ZXJsYXkiKS5kYXRhKFtvUygib3ZlcmxheSIpXSk7Zy5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwib3ZlcmxheSIpLmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigiY3Vyc29yIixtcC5vdmVybGF5KS5tZXJnZShnKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIEQ9YnoodGhpcykuZXh0ZW50O2JvKHRoaXMpLmF0dHIoIngiLERbMF1bMF0pLmF0dHIoInkiLERbMF1bMV0pLmF0dHIoIndpZHRoIixEWzFdWzBdLURbMF1bMF0pLmF0dHIoImhlaWdodCIsRFsxXVsxXS1EWzBdWzFdKX0pLHguc2VsZWN0QWxsKCIuc2VsZWN0aW9uIikuZGF0YShbb1MoInNlbGVjdGlvbiIpXSkuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsInNlbGVjdGlvbiIpLmF0dHIoImN1cnNvciIsbXAuc2VsZWN0aW9uKS5hdHRyKCJmaWxsIiwiIzc3NyIpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjMpLmF0dHIoInN0cm9rZSIsIiNmZmYiKS5hdHRyKCJzaGFwZS1yZW5kZXJpbmciLCJjcmlzcEVkZ2VzIik7dmFyIGI9eC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5kYXRhKG4uaGFuZGxlcyxmdW5jdGlvbihEKXtyZXR1cm4gRC50eXBlfSk7Yi5leGl0KCkucmVtb3ZlKCksYi5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihEKXtyZXR1cm4iaGFuZGxlIGhhbmRsZS0tIitELnR5cGV9KS5hdHRyKCJjdXJzb3IiLGZ1bmN0aW9uKEQpe3JldHVybiBtcFtELnR5cGVdfSkseC5lYWNoKGMpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJhbGwiKS5vbigibW91c2Vkb3duLmJydXNoIixwKS5maWx0ZXIoaSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHApLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLGgpLm9uKCJ0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaCIsZikuc3R5bGUoInRvdWNoLWFjdGlvbiIsIm5vbmUiKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIGMoKXt2YXIgeD1ibyh0aGlzKSxnPWJ6KHRoaXMpLnNlbGVjdGlvbjtnPyh4LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiIpLnN0eWxlKCJkaXNwbGF5IixudWxsKS5hdHRyKCJ4IixnWzBdWzBdKS5hdHRyKCJ5IixnWzBdWzFdKS5hdHRyKCJ3aWR0aCIsZ1sxXVswXS1nWzBdWzBdKS5hdHRyKCJoZWlnaHQiLGdbMV1bMV0tZ1swXVsxXSkseC5zZWxlY3RBbGwoIi5oYW5kbGUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cigieCIsZnVuY3Rpb24oYil7cmV0dXJuImUiPT09Yi50eXBlW2IudHlwZS5sZW5ndGgtMV0/Z1sxXVswXS1zLzI6Z1swXVswXS1zLzJ9KS5hdHRyKCJ5IixmdW5jdGlvbihiKXtyZXR1cm4icyI9PT1iLnR5cGVbMF0/Z1sxXVsxXS1zLzI6Z1swXVsxXS1zLzJ9KS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24oYil7cmV0dXJuIm4iPT09Yi50eXBlfHwicyI9PT1iLnR5cGU/Z1sxXVswXS1nWzBdWzBdK3M6c30pLmF0dHIoImhlaWdodCIsZnVuY3Rpb24oYil7cmV0dXJuImUiPT09Yi50eXBlfHwidyI9PT1iLnR5cGU/Z1sxXVsxXS1nWzBdWzFdK3M6c30pKTp4LnNlbGVjdEFsbCgiLnNlbGVjdGlvbiwuaGFuZGxlIikuc3R5bGUoImRpc3BsYXkiLCJub25lIikuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigid2lkdGgiLG51bGwpLmF0dHIoImhlaWdodCIsbnVsbCl9ZnVuY3Rpb24gdSh4LGcsYil7dmFyIEQ9eC5fX2JydXNoLmVtaXR0ZXI7cmV0dXJuIUR8fGImJkQuY2xlYW4/bmV3IGQoeCxnLGIpOkR9ZnVuY3Rpb24gZCh4LGcsYil7dGhpcy50aGF0PXgsdGhpcy5hcmdzPWcsdGhpcy5zdGF0ZT14Ll9fYnJ1c2gsdGhpcy5hY3RpdmU9MCx0aGlzLmNsZWFuPWJ9ZnVuY3Rpb24gcCgpe2lmKCghYXx8c2kudG91Y2hlcykmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgdWUsaGUsRixxLGRlLFksbGUsSWUsbnQsVWUsQWUseD10aGlzLGc9c2kudGFyZ2V0Ll9fZGF0YV9fLnR5cGUsYj0ic2VsZWN0aW9uIj09PShyJiZzaS5tZXRhS2V5P2c9Im92ZXJsYXkiOmcpP3BsZTpyJiZzaS5hbHRLZXk/TXk6Q3ksRD1uPT09JFI/bnVsbDp3VWVbZ10sVD1uPT09eXo/bnVsbDpTVWVbZ10saz1ieih4KSxaPWsuZXh0ZW50LHo9ay5zZWxlY3Rpb24sZmU9WlswXVswXSx3PVpbMF1bMV0sSz1aWzFdWzBdLGFlPVpbMV1bMV0sdmU9MCxEZT0wLGd0PUQmJlQmJnImJnNpLnNoaWZ0S2V5LHRuPXNpLnRvdWNoZXM/TVVlKHNpLmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIpOkdVLHB0PXRuKHgpLHd0PXB0LFRlPXUoeCxhcmd1bWVudHMsITApLmJlZm9yZXN0YXJ0KCk7Im92ZXJsYXkiPT09Zz8oeiYmKG50PSEwKSxrLnNlbGVjdGlvbj16PVtbdWU9bj09PSRSP2ZlOnB0WzBdLEY9bj09PXl6P3c6cHRbMV1dLFtkZT1uPT09JFI/Szp1ZSxsZT1uPT09eXo/YWU6Rl1dKToodWU9elswXVswXSxGPXpbMF1bMV0sZGU9elsxXVswXSxsZT16WzFdWzFdKSxoZT11ZSxxPUYsWT1kZSxJZT1sZTt2YXIgeHQ9Ym8oeCkuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksbXQ9eHQuc2VsZWN0QWxsKCIub3ZlcmxheSIpLmF0dHIoImN1cnNvciIsbXBbZ10pO2lmKHNpLnRvdWNoZXMpVGUubW92ZWQ9ZHQsVGUuZW5kZWQ9TXQ7ZWxzZXt2YXIgY2U9Ym8oc2kudmlldykub24oIm1vdXNlbW92ZS5icnVzaCIsZHQsITApLm9uKCJtb3VzZXVwLmJydXNoIixNdCwhMCk7ciYmY2Uub24oImtleWRvd24uYnJ1c2giLGJ0LCEwKS5vbigia2V5dXAuYnJ1c2giLGhuLCEwKSxxVShzaS52aWV3KX1feigpLENnKHgpLGMuY2FsbCh4KSxUZS5zdGFydCgpfWZ1bmN0aW9uIGR0KCl7dmFyIG9uPXRuKHgpO2d0JiYhVWUmJiFBZSYmKE1hdGguYWJzKG9uWzBdLXd0WzBdKT5NYXRoLmFicyhvblsxXS13dFsxXSk/QWU9ITA6VWU9ITApLHd0PW9uLG50PSEwLEpSKCksV2UoKX1mdW5jdGlvbiBXZSgpe3ZhciBvbjtzd2l0Y2godmU9d3RbMF0tcHRbMF0sRGU9d3RbMV0tcHRbMV0sYil7Y2FzZSB2ejpjYXNlIHBsZTpEJiYodmU9TWF0aC5tYXgoZmUtdWUsTWF0aC5taW4oSy1kZSx2ZSkpLGhlPXVlK3ZlLFk9ZGUrdmUpLFQmJihEZT1NYXRoLm1heCh3LUYsTWF0aC5taW4oYWUtbGUsRGUpKSxxPUYrRGUsSWU9bGUrRGUpO2JyZWFrO2Nhc2UgQ3k6RDwwPyh2ZT1NYXRoLm1heChmZS11ZSxNYXRoLm1pbihLLXVlLHZlKSksaGU9dWUrdmUsWT1kZSk6RD4wJiYodmU9TWF0aC5tYXgoZmUtZGUsTWF0aC5taW4oSy1kZSx2ZSkpLGhlPXVlLFk9ZGUrdmUpLFQ8MD8oRGU9TWF0aC5tYXgody1GLE1hdGgubWluKGFlLUYsRGUpKSxxPUYrRGUsSWU9bGUpOlQ+MCYmKERlPU1hdGgubWF4KHctbGUsTWF0aC5taW4oYWUtbGUsRGUpKSxxPUYsSWU9bGUrRGUpO2JyZWFrO2Nhc2UgTXk6RCYmKGhlPU1hdGgubWF4KGZlLE1hdGgubWluKEssdWUtdmUqRCkpLFk9TWF0aC5tYXgoZmUsTWF0aC5taW4oSyxkZSt2ZSpEKSkpLFQmJihxPU1hdGgubWF4KHcsTWF0aC5taW4oYWUsRi1EZSpUKSksSWU9TWF0aC5tYXgodyxNYXRoLm1pbihhZSxsZStEZSpUKSkpfVk8aGUmJihEKj0tMSxvbj11ZSx1ZT1kZSxkZT1vbixvbj1oZSxoZT1ZLFk9b24sZyBpbiBmbGUmJm10LmF0dHIoImN1cnNvciIsbXBbZz1mbGVbZ11dKSksSWU8cSYmKFQqPS0xLG9uPUYsRj1sZSxsZT1vbixvbj1xLHE9SWUsSWU9b24sZyBpbiBtbGUmJm10LmF0dHIoImN1cnNvciIsbXBbZz1tbGVbZ11dKSksay5zZWxlY3Rpb24mJih6PWsuc2VsZWN0aW9uKSxVZSYmKGhlPXpbMF1bMF0sWT16WzFdWzBdKSxBZSYmKHE9elswXVsxXSxJZT16WzFdWzFdKSwoelswXVswXSE9PWhlfHx6WzBdWzFdIT09cXx8elsxXVswXSE9PVl8fHpbMV1bMV0hPT1JZSkmJihrLnNlbGVjdGlvbj1bW2hlLHFdLFtZLEllXV0sYy5jYWxsKHgpLFRlLmJydXNoKCkpfWZ1bmN0aW9uIE10KCl7aWYoX3ooKSxzaS50b3VjaGVzKXtpZihzaS50b3VjaGVzLmxlbmd0aClyZXR1cm47YSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dChmdW5jdGlvbigpe2E9bnVsbH0sNTAwKX1lbHNlIFlVKHNpLnZpZXcsbnQpLGNlLm9uKCJrZXlkb3duLmJydXNoIGtleXVwLmJydXNoIG1vdXNlbW92ZS5icnVzaCBtb3VzZXVwLmJydXNoIixudWxsKTt4dC5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLG10LmF0dHIoImN1cnNvciIsbXAub3ZlcmxheSksay5zZWxlY3Rpb24mJih6PWsuc2VsZWN0aW9uKSxBVWUoeikmJihrLnNlbGVjdGlvbj1udWxsLGMuY2FsbCh4KSksVGUuZW5kKCl9ZnVuY3Rpb24gYnQoKXtzd2l0Y2goc2kua2V5Q29kZSl7Y2FzZSAxNjpndD1EJiZUO2JyZWFrO2Nhc2UgMTg6Yj09PUN5JiYoRCYmKGRlPVktdmUqRCx1ZT1oZSt2ZSpEKSxUJiYobGU9SWUtRGUqVCxGPXErRGUqVCksYj1NeSxXZSgpKTticmVhaztjYXNlIDMyOihiPT09Q3l8fGI9PT1NeSkmJihEPDA/ZGU9WS12ZTpEPjAmJih1ZT1oZS12ZSksVDwwP2xlPUllLURlOlQ+MCYmKEY9cS1EZSksYj12eixtdC5hdHRyKCJjdXJzb3IiLG1wLnNlbGVjdGlvbiksV2UoKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59SlIoKX1mdW5jdGlvbiBobigpe3N3aXRjaChzaS5rZXlDb2RlKXtjYXNlIDE2Omd0JiYoVWU9QWU9Z3Q9ITEsV2UoKSk7YnJlYWs7Y2FzZSAxODpiPT09TXkmJihEPDA/ZGU9WTpEPjAmJih1ZT1oZSksVDwwP2xlPUllOlQ+MCYmKEY9cSksYj1DeSxXZSgpKTticmVhaztjYXNlIDMyOmI9PT12eiYmKHNpLmFsdEtleT8oRCYmKGRlPVktdmUqRCx1ZT1oZSt2ZSpEKSxUJiYobGU9SWUtRGUqVCxGPXErRGUqVCksYj1NeSk6KEQ8MD9kZT1ZOkQ+MCYmKHVlPWhlKSxUPDA/bGU9SWU6VD4wJiYoRj1xKSxiPUN5KSxtdC5hdHRyKCJjdXJzb3IiLG1wW2ddKSxXZSgpKTticmVhaztkZWZhdWx0OnJldHVybn1KUigpfX1mdW5jdGlvbiBoKCl7dSh0aGlzLGFyZ3VtZW50cykubW92ZWQoKX1mdW5jdGlvbiBmKCl7dSh0aGlzLGFyZ3VtZW50cykuZW5kZWQoKX1mdW5jdGlvbiBtKCl7dmFyIHg9dGhpcy5fX2JydXNofHx7c2VsZWN0aW9uOm51bGx9O3JldHVybiB4LmV4dGVudD14eih0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSkseC5kaW09bix4fXJldHVybiBsLm1vdmU9ZnVuY3Rpb24oeCxnKXt4LnNlbGVjdGlvbj94Lm9uKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaCIsZnVuY3Rpb24oKXt1KHRoaXMsYXJndW1lbnRzKS5lbmQoKX0pLnR3ZWVuKCJicnVzaCIsZnVuY3Rpb24oKXt2YXIgYj10aGlzLEQ9Yi5fX2JydXNoLFQ9dShiLGFyZ3VtZW50cyksaz1ELnNlbGVjdGlvbixaPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGc/Zy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZyxELmV4dGVudCksej1mcChrLFopO2Z1bmN0aW9uIGZlKHVlKXtELnNlbGVjdGlvbj0xPT09dWUmJm51bGw9PT1aP251bGw6eih1ZSksYy5jYWxsKGIpLFQuYnJ1c2goKX1yZXR1cm4gbnVsbCE9PWsmJm51bGwhPT1aP2ZlOmZlKDEpfSk6eC5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxEPWFyZ3VtZW50cyxUPWIuX19icnVzaCxrPW4uaW5wdXQoImZ1bmN0aW9uIj09dHlwZW9mIGc/Zy5hcHBseShiLEQpOmcsVC5leHRlbnQpLFo9dShiLEQpLmJlZm9yZXN0YXJ0KCk7Q2coYiksVC5zZWxlY3Rpb249bnVsbD09PWs/bnVsbDprLGMuY2FsbChiKSxaLnN0YXJ0KCkuYnJ1c2goKS5lbmQoKX0pfSxsLmNsZWFyPWZ1bmN0aW9uKHgpe2wubW92ZSh4LG51bGwpfSxkLnByb3RvdHlwZT17YmVmb3Jlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMuc3RhdGUuZW1pdHRlcj10aGlzLHRoaXMuc3RhcnRpbmc9ITApLHRoaXN9LHN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RhcnRpbmc/KHRoaXMuc3RhcnRpbmc9ITEsdGhpcy5lbWl0KCJzdGFydCIpKTp0aGlzLmVtaXQoImJydXNoIiksdGhpc30sYnJ1c2g6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KCJicnVzaCIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlcix0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKHgpeyFmdW5jdGlvbihuLHQsZSxpKXt2YXIgcj1zaTtuLnNvdXJjZUV2ZW50PXNpLHNpPW47dHJ5e3QuYXBwbHkoZSxpKX1maW5hbGx5e3NpPXJ9fShuZXcgZGxlKGwseCxuLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLG8uYXBwbHksbyxbeCx0aGlzLnRoYXQsdGhpcy5hcmdzXSl9fSxsLmV4dGVudD1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgeD94OlpSKHh6KHgpKSxsKTp0fSxsLmZpbHRlcj1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgeD94OlpSKCEheCksbCk6ZX0sbC50b3VjaGFibGU9ZnVuY3Rpb24oeCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHg/eDpaUighIXgpLGwpOml9LGwuaGFuZGxlU2l6ZT1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0reCxsKTpzfSxsLmtleU1vZGlmaWVycz1mdW5jdGlvbih4KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0hIXgsbCk6cn0sbC5vbj1mdW5jdGlvbigpe3ZhciB4PW8ub24uYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiB4PT09bz9sOnh9LGx9KCRSKSx0aGlzLm1heEJpblNpemU9MCx0aGlzLmFyZWE9ZnVuY3Rpb24oKXt2YXIgbj1oTyx0PW51bGwsZT1mYSgwKSxpPWZPLHI9ZmEoITApLG89bnVsbCxzPXBPLGE9bnVsbDtmdW5jdGlvbiBsKHUpe3ZhciBkLHAsaCxtLGcsZj11Lmxlbmd0aCx4PSExLGI9bmV3IEFycmF5KGYpLEQ9bmV3IEFycmF5KGYpO2ZvcihudWxsPT1vJiYoYT1zKGc9c1MoKSkpLGQ9MDtkPD1mOysrZCl7aWYoIShkPGYmJnIobT11W2RdLGQsdSkpPT09eClpZih4PSF4KXA9ZCxhLmFyZWFTdGFydCgpLGEubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYS5saW5lRW5kKCksYS5saW5lU3RhcnQoKSxoPWQtMTtoPj1wOy0taClhLnBvaW50KGJbaF0sRFtoXSk7YS5saW5lRW5kKCksYS5hcmVhRW5kKCl9eCYmKGJbZF09K24obSxkLHUpLERbZF09K2UobSxkLHUpLGEucG9pbnQodD8rdChtLGQsdSk6YltkXSxpPytpKG0sZCx1KTpEW2RdKSl9aWYoZylyZXR1cm4gYT1udWxsLGcrIiJ8fG51bGx9ZnVuY3Rpb24gYygpe3JldHVybiB4UygpLmRlZmluZWQocikuY3VydmUocykuY29udGV4dChvKX1yZXR1cm4gbC54PWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB1P3U6ZmEoK3UpLHQ9bnVsbCxsKTpufSxsLngwPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB1P3U6ZmEoK3UpLGwpOm59LGwueDE9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bnVsbD09dT9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB1P3U6ZmEoK3UpLGwpOnR9LGwueT1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdT91OmZhKCt1KSxpPW51bGwsbCk6ZX0sbC55MD1mdW5jdGlvbih1KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdT91OmZhKCt1KSxsKTplfSxsLnkxPWZ1bmN0aW9uKHUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PXU/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdT91OmZhKCt1KSxsKTppfSxsLmxpbmVYMD1sLmxpbmVZMD1mdW5jdGlvbigpe3JldHVybiBjKCkueChuKS55KGUpfSxsLmxpbmVZMT1mdW5jdGlvbigpe3JldHVybiBjKCkueChuKS55KGkpfSxsLmxpbmVYMT1mdW5jdGlvbigpe3JldHVybiBjKCkueCh0KS55KGUpfSxsLmRlZmluZWQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9ImZ1bmN0aW9uIj09dHlwZW9mIHU/dTpmYSghIXUpLGwpOnJ9LGwuY3VydmU9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dSxudWxsIT1vJiYoYT1zKG8pKSxsKTpzfSxsLmNvbnRleHQ9ZnVuY3Rpb24odSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXU/bz1hPW51bGw6YT1zKG89dSksbCk6b30sbH0oKS54MChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy54U2NhbGVOdW0oLWUubGVuZ3RoKX0uYmluZCh0aGlzKSkueDEoZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMueFNjYWxlTnVtKGUubGVuZ3RoKX0uYmluZCh0aGlzKSkueShmdW5jdGlvbihlKXtyZXR1cm4gZS54MD09PS0xLzA/dGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wOnRoaXMueVNjYWxlKChlLngxK2UueDApLzIpfS5iaW5kKHRoaXMpKS5jdXJ2ZShzail9bmdBZnRlclZpZXdJbml0KCl7dGhpcy51cGRhdGVEaW1lbnNpb25zKCksdGhpcy5zdmc9Ym8odGhpcy5jaGFydENvbnRhaW5lci5uYXRpdmVFbGVtZW50KS5zZWxlY3QoInN2ZyIpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuZHJhd0NvbnRhaW5lcj10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5kcmF3TWFyZ2luLmxlZnR9LCAke3RoaXMuZHJhd01hcmdpbi50b3B9KWApLHRoaXMuZG90c0dyb3VwPXRoaXMuZHJhd0NvbnRhaW5lci5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImRvdHNHcm91cCIpLHRoaXMueUF4aXNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGlzIGF4aXMtLXkiKSx0aGlzLnhBeGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiYXhpcyBheGlzLS14IiksdGhpcy5taXNjR3JvdXA9dGhpcy5kcmF3Q29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMueFNjYWxlPXd5KCkucGFkZGluZyguMDUpLHRoaXMueEF4aXM9ancodGhpcy54U2NhbGUpLHRoaXMueVNjYWxlPVFvKCkucmFuZ2UoW3RoaXMuZHJhd0hlaWdodCwwXSksdGhpcy55QXhpcz1mdW5jdGlvbihuKXtyZXR1cm4gQlUoNCxuKX0odGhpcy55U2NhbGUpLHRoaXMueFNjYWxlTnVtPVFvKCksdGhpcy5pbml0aWFsaXplQnJ1c2goKSx0aGlzLmRyYXdNaXNjKCksdGhpcy5yZWRyYXcoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLnN2ZyYmdGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKSx0aGlzLnNldE1heEJpblNpemUoKSx0aGlzLnVwZGF0ZUF4ZXMoKSx0aGlzLmRyYXcoKX11cGRhdGVEaW1lbnNpb25zKCl7dGhpcy5jaGFydFdpZHRoPXRoaXMud2lkdGgtdGhpcy5tYXJnaW4ubGVmdC10aGlzLm1hcmdpbi5yaWdodCx0aGlzLmRyYXdXaWR0aD10aGlzLmNoYXJ0V2lkdGgtdGhpcy5kcmF3TWFyZ2luLmxlZnQtdGhpcy5kcmF3TWFyZ2luLnJpZ2h0LHRoaXMuY2hhcnRIZWlnaHQ9dGhpcy5oZWlnaHQtdGhpcy5tYXJnaW4udG9wLXRoaXMubWFyZ2luLmJvdHRvbSx0aGlzLmRyYXdIZWlnaHQ9dGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wLXRoaXMuZHJhd01hcmdpbi5ib3R0b219c2V0TWF4QmluU2l6ZSgpe09iamVjdC52YWx1ZXModGhpcy5jaGFydERhdGEudmlvbGluRGF0YSkuZm9yRWFjaChlPT57bGV0IGk9ZS5tYXAobz0+by5sZW5ndGgpLHI9TWF0aC5tYXgoLi4uaSk7dGhpcy5tYXhCaW5TaXplPU1hdGgubWF4KHIsdGhpcy5tYXhCaW5TaXplKX0pfXVwZGF0ZUF4ZXMoKXt0aGlzLnhTY2FsZS5yYW5nZShbMCx0aGlzLmRyYXdXaWR0aF0pLmRvbWFpbihPYmplY3Qua2V5cyh0aGlzLmNoYXJ0RGF0YS52aW9saW5EYXRhKSksdGhpcy55U2NhbGUuZG9tYWluKFt0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4sdGhpcy5jaGFydERhdGEuZXh0cmVtZXMubWF4XSksdGhpcy54U2NhbGVOdW0ucmFuZ2UoWzAsdGhpcy54U2NhbGUuYmFuZHdpZHRoKCldKS5kb21haW4oWy10aGlzLm1heEJpblNpemUsdGhpcy5tYXhCaW5TaXplXSl9aW5pdGlhbGl6ZUJydXNoKCl7dGhpcy5icnVzaC5vbigiZW5kIix0aGlzLmJydXNoTW92ZWQuYmluZCh0aGlzKSl9ZHJhdygpe3RoaXMuZHJhd0F4ZXMoKSx0aGlzLmRyYXdQbG90KCksdGhpcy5yZWZyZXNoTWlzYygpLHRoaXMucmVmcmVzaEJydXNoKCl9ZHJhd0F4ZXMoKXt0aGlzLnlBeGlzR3JvdXAuYXR0cigidHJhbnNmb3JtIixgdHJhbnNsYXRlKCR7dGhpcy5kcmF3TWFyZ2luLmxlZnR9LFxuICAgICAgJHt0aGlzLmRyYXdNYXJnaW4udG9wfSlgKS5jYWxsKHRoaXMueUF4aXMpLHRoaXMueEF4aXNHcm91cC5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLmRyYXdNYXJnaW4ubGVmdH0sXG4gICAgICAke3RoaXMuZHJhd01hcmdpbi50b3ArdGhpcy5jaGFydEhlaWdodH0pYCkuY2FsbCh0aGlzLnhBeGlzKX1kcmF3UGxvdCgpe2xldCBlPXRoaXMuZG90c0dyb3VwLnNlbGVjdEFsbCgiLnZpb2xpbi1wbG90IikuZGF0YShPYmplY3QuZW50cmllcyh0aGlzLmNoYXJ0RGF0YS52aW9saW5EYXRhKSk7ZS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwidmlvbGluLXBsb3QiKS5zdHlsZSgic3Ryb2tlIixmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5jb2xvclNjYWxlKGlbMF0pfS5iaW5kKHRoaXMpKS5zdHlsZSgiZmlsbCIsZnVuY3Rpb24oaSl7cmV0dXJuYCR7dGhpcy5jb2xvclNjYWxlKGlbMF0pfTMzYH0uYmluZCh0aGlzKSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihpKXtyZXR1cm5gdHJhbnNsYXRlKCR7dGhpcy54U2NhbGUoaVswXSl9LCAwKWB9LmJpbmQodGhpcykpLmRhdHVtKGZ1bmN0aW9uKGkpe3JldHVybiBpWzFdfSkuYXR0cigiZCIsdGhpcy5hcmVhKSxlLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24oaSl7cmV0dXJuYHRyYW5zbGF0ZSgke3RoaXMueFNjYWxlKGlbMF0pfSwgMClgfS5iaW5kKHRoaXMpKS5kYXR1bShmdW5jdGlvbihpKXtyZXR1cm4gaVsxXX0pLmF0dHIoImQiLHRoaXMuYXJlYSksZS5leGl0KCkucmVtb3ZlKCl9ZHJhd01pc2MoKXt0aGlzLnplcm9MaW5lPXRoaXMubWlzY0dyb3VwLmFwcGVuZCgibGluZSIpLnN0eWxlKCJzdHJva2UiLCJibGFjayIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsdGhpcy55U2NhbGUoMCkpLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMueVNjYWxlKDApKSx0aGlzLm5hblRleHQ9dGhpcy5taXNjR3JvdXAuYXBwZW5kKCJ0ZXh0Iikuc3R5bGUoImZpbGwiLCJibGFjayIpLnRleHQoIk5hTiIpLmF0dHIoImZvbnQtc2l6ZSIsIjEwcHgiKS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLmF0dHIoIngiLC01KS5hdHRyKCJ5Iix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApLHRoaXMubmFuTGluZT10aGlzLm1pc2NHcm91cC5hcHBlbmQoImxpbmUiKS5zdHlsZSgic3Ryb2tlIiwiZ3JleSIpLnN0eWxlKCJzdHJva2UtZGFzaGFycmF5IiwiMywgMyIpLmF0dHIoIngxIiwwKS5hdHRyKCJ5MSIsdGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wKS5hdHRyKCJ4MiIsdGhpcy5kcmF3V2lkdGgpLmF0dHIoInkyIix0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMuZHJhd01hcmdpbi50b3ApfXJlZnJlc2hNaXNjKCl7dGhpcy56ZXJvTGluZS5hdHRyKCJ5MSIsdGhpcy55U2NhbGUoMCkpLmF0dHIoIngyIix0aGlzLmRyYXdXaWR0aCkuYXR0cigieTIiLHRoaXMueVNjYWxlKDApKSx0aGlzLm5hblRleHQuYXR0cigieSIsdGhpcy5jaGFydEhlaWdodC10aGlzLmRyYXdNYXJnaW4udG9wKSx0aGlzLm5hbkxpbmUuYXR0cigieTEiLHRoaXMuZHJhd0hlaWdodCt0aGlzLmRyYXdNYXJnaW4udG9wKS5hdHRyKCJ4MiIsdGhpcy5kcmF3V2lkdGgpLmF0dHIoInkyIix0aGlzLmRyYXdIZWlnaHQrdGhpcy5kcmF3TWFyZ2luLnRvcCl9cmVmcmVzaEJydXNoKCl7dGhpcy5icnVzaC5leHRlbnQoW1swLDBdLFt0aGlzLmRyYXdXaWR0aCx0aGlzLmRyYXdIZWlnaHQrdGhpcy5tYXJnaW4udG9wXV0pO2xldCBlPVswLHRoaXMuZHJhd0hlaWdodCt0aGlzLm1hcmdpbi50b3BdO2lmKHRoaXMuZmlsdGVyLm1heDx0aGlzLmZpbHRlci5taW4pZVswXT10aGlzLmZpbHRlci5pbmNsdWRlTmFOP3RoaXMueVNjYWxlKHRoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1pbik6ZVsxXTtlbHNle2lmKCF0aGlzLmZpbHRlci5pbmNsdWRlTmFOKXtsZXQgcj1NYXRoLm1heCh0aGlzLmNoYXJ0RGF0YS5leHRyZW1lcy5taW4sdGhpcy5maWx0ZXIubWluKTtlWzFdPXRoaXMueVNjYWxlKHIpfWxldCBpPU1hdGgubWluKHRoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1heCx0aGlzLmZpbHRlci5tYXgpO2VbMF09dGhpcy55U2NhbGUoaSl9dGhpcy5kcmF3Q29udGFpbmVyLmNhbGwodGhpcy5icnVzaCkuY2FsbCh0aGlzLmJydXNoLm1vdmUsZSl9YnJ1c2hNb3ZlZCgpe2lmKCFzaXx8IXNpLnNvdXJjZUV2ZW50KXJldHVybjtsZXQgZT1zaS5zZWxlY3Rpb247aWYoZSl7bGV0IGk9ITEscj0tMixvPXRoaXMuY2hhcnREYXRhLmV4dHJlbWVzLm1pbjtlWzBdPD10aGlzLmRyYXdIZWlnaHQrdGhpcy5tYXJnaW4udG9wJiZlWzFdPj10aGlzLmRyYXdIZWlnaHQmJihpPSEwKSxlWzBdPHRoaXMuZHJhd0hlaWdodCYmKHI9dGhpcy55U2NhbGUuaW52ZXJ0KGVbMF0pKSxlWzFdPHRoaXMuZHJhd0hlaWdodCYmKG89dGhpcy55U2NhbGUuaW52ZXJ0KGVbMV0pKSx0aGlzLm9uVXBkYXRlRmlsdGVyLmVtaXQoe21heDpyLG1pbjpvLGluY2x1ZGVOYU46aX0pfWVsc2UgdGhpcy5vblVwZGF0ZUZpbHRlci5lbWl0KHttYXg6MSxtaW46LTEsaW5jbHVkZU5hTjohMH0pfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KEFldCw3LFJlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmNoYXJ0Q29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnttZXRyaWNOYW1lOiJtZXRyaWNOYW1lIixmaWx0ZXI6ImZpbHRlciIsY2hhcnREYXRhOiJjaGFydERhdGEiLHdpZHRoOiJ3aWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSJ9LG91dHB1dHM6e29uUmVtb3ZlOiJvblJlbW92ZSIsb25VcGRhdGVGaWx0ZXI6Im9uVXBkYXRlRmlsdGVyIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczo5LHZhcnM6MSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHJlbW92ZXMgYSBtZXRyaWMgZmlsdGVyLuKQn2E2YmZhZDU4YmIzNjNkNWM4OTFkMGE1NDc0YjFkNzdlZjkwYTM0ZGHikJ84NDU0OTYxNzk3NzYyOTA3NjI0OlJlbW92ZSBGaWx0ZXJgLFtbMSwiY2hhcnQtY29udGFpbmVyIl0sWyJ0aXRsZSIsIlNob3dzIHRoZSBuUE1JIHZhbHVlIGRpc3RyaWJ1dGlvbiBwZXIgcnVuLiBSYW5nZXMgb2Ygc2VsZWN0ZWQgdmFsdWVzIGNhbiBiZSBtYW5pcHVsYXRlZCBieSBtb2RpZnlpbmcgdGhlIGdyZXkgYm94LiIsMSwiY2hhcnQtaGVhZCJdLFsxLCJjaGFydC1oZWFkaW5nIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LDMsImNsaWNrIl0sWyJzdmdJY29uIiwiY2xlYXJfMjRweCJdLFsxLCJjaGFydCJdLFsiY2hhcnQiLCIiXSxbMSwiZHJhdy1hcmVhIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImRpdiIsMiksQSgzKSx2KCksXyg0LCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uUmVtb3ZlLmVtaXQoKX0pLE8oNSwibWF0LWljb24iLDQpLHYoKSgpLF8oNiwiZGl2Iiw1LDYpLEluKCksTyg4LCJzdmciLDcpLHYoKSgpKSwyJmUmJihDKDMpLHl0KGkubWV0cmljTmFtZSkpfSxkZXBlbmRlbmNpZXM6W19uLEd0XSxzdHlsZXM6WyIuY2hhcnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO292ZXJmbG93OmhpZGRlbn0uY2hhcnRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDozMDBweDt3aWR0aDoxMDAlfS5jaGFydC1oZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jaGFydC1oZWFkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTNweDtwYWRkaW5nLWxlZnQ6MTBweDtwYWRkaW5nLXRvcDoxMHB4fS5kcmF3LWFyZWFbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnN0cm9rZWQtbGluZVtfbmdjb250ZW50LSVDT01QJV17c3Ryb2tlOnJnYmEoMCwwLDAsLjEyKTtzdHJva2UtZGFzaGFycmF5OjMgM30iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFBtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFjdGl2ZVJ1bnMkPXRoaXMuc3RvcmUucGlwZSh2dChvbykpLnBpcGUoTChpPT5pP0FycmF5LmZyb20oaS5lbnRyaWVzKCkpLmZpbHRlcihyPT5yWzFdKS5tYXAocj0+clswXSk6W10pKSx0aGlzLnZpc2libGVBbm5vdGF0aW9ucyQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFBmKSx0aGlzLnN0b3JlLnNlbGVjdChYYiksdGhpcy5zdG9yZS5zZWxlY3QoWmIpXSkucGlwZShMKChbaSxyLG9dKT0+cUYoaSxyLG8pKSksdGhpcy5jaGFydFdpZHRoJD10aGlzLnN0b3JlLnBpcGUodnQoT2YpKS5waXBlKEwoaT0+TWF0aC5tYXgoMTUwLGkpKSksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChuYykucGlwZShMKGk9PnI9PntpZighaS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtyfS5gKTtyZXR1cm4gaVtyXX0pKX1uZ09uSW5pdCgpe3RoaXMuY2hhcnREYXRhJD1MdChbdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkLHRoaXMuYWN0aXZlUnVucyRdKS5waXBlKEwoKFtlLGldKT0+ZnVuY3Rpb24obix0LGUpe2xldCBpPXt9LHI9e30sbz1uZXcgU2V0KHQpLHM9U3MoZSksYT17bWF4Oi0xLG1pbjoxfTtPYmplY3QudmFsdWVzKG4pLmZvckVhY2goZD0+e2QuZm9yRWFjaChwPT57bGV0IGg9cC5ydW47aWYoby5oYXMoaCkmJnAubWV0cmljPT09cylpZihudWxsPT09cC5uUE1JVmFsdWUpcltoXT9yW2hdLnB1c2gobnVsbCk6cltoXT1bbnVsbF07ZWxzZXtsZXQgZj1wLm5QTUlWYWx1ZTthLm1heD1hLm1heDxmP2Y6YS5tYXgsYS5taW49YS5taW4+Zj9mOmEubWluLGlbcC5ydW5dP2lbaF0ucHVzaChmKTppW2hdPVtmXX19KX0pO2xldCBsPXt9LGM9TVIoKS5kb21haW4oW2EubWluLGEubWF4XSkudmFsdWUoZD0+ZCksdT1NUigpLmRvbWFpbihbLTEvMCwxLzBdKS50aHJlc2hvbGRzKDApLnZhbHVlKGQ9PmQpO2ZvcihsZXQgZCBvZiBvKWlmKGxbZF09YyhpW2RdKSxyW2RdKXtsZXQgcD11KHJbZF0pO2xbZF0udW5zaGlmdChwWzBdKX1yZXR1cm57dmlvbGluRGF0YTpsLGV4dHJlbWVzOmF9fShlLGksdGhpcy5tZXRyaWNOYW1lKSkpfXJlbW92ZU1ldHJpYygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goR2Ioe21ldHJpYzp0aGlzLm1ldHJpY05hbWV9KSl9dXBkYXRlRmlsdGVyKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goV2Ioe21ldHJpYzp0aGlzLm1ldHJpY05hbWUsLi4uZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktdmlvbGluLWZpbHRlciJdXSxpbnB1dHM6e21ldHJpY05hbWU6Im1ldHJpY05hbWUiLGZpbHRlcjoiZmlsdGVyIn0sZGVjbHM6NCx2YXJzOjExLGNvbnN0czpbWzMsIm1ldHJpY05hbWUiLCJmaWx0ZXIiLCJjaGFydERhdGEiLCJ3aWR0aCIsImNvbG9yU2NhbGUiLCJvblJlbW92ZSIsIm9uVXBkYXRlRmlsdGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJ2aW9saW4tZmlsdGVyLWNvbXBvbmVudCIsMCksUCgib25SZW1vdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVtb3ZlTWV0cmljKCl9KSgib25VcGRhdGVGaWx0ZXIiLGZ1bmN0aW9uKG8pe3JldHVybiBpLnVwZGF0ZUZpbHRlcihvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJtZXRyaWNOYW1lIixpLm1ldHJpY05hbWUpKCJmaWx0ZXIiLGkuZmlsdGVyKSgiY2hhcnREYXRhIixVKDEsNSxpLmNoYXJ0RGF0YSQpKSgid2lkdGgiLFUoMiw3LGkuY2hhcnRXaWR0aCQpKSgiY29sb3JTY2FsZSIsVSgzLDksaS5ydW5Db2xvclNjYWxlJCkpfSxkZXBlbmRlbmNpZXM6W0ltZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gUmV0KG4sdCl7aWYoMSZuJiZPKDAsIm5wbWktdmlvbGluLWZpbHRlciIsOCksMiZuKXtsZXQgZT10LiRpbXBsaWNpdDt5KCJtZXRyaWNOYW1lIixlWzBdKSgiZmlsdGVyIixlWzFdKX19ZnVuY3Rpb24gT2V0KG4sdCl7MSZuJiYoXygwLCJkaXYiLDkpKDEsInNwYW4iLDEwKSxBKDIsIiBZb3UgY2FuIGFkZCBtb3JlIGZpbHRlcnMgYXQgdGhlIHRvcC4gIiksdigpKCkpfXZhciBSbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJ2aW9saW4tZmlsdGVycy1jb21wb25lbnQiXV0saW5wdXRzOntzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCIsbWV0cmljRmlsdGVyczoibWV0cmljRmlsdGVycyJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIn0sZGVjbHM6OSx2YXJzOjIsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzL2hpZGVzIHRoZSBzaWRlYmFyLuKQnzQ4YzI5OTAzY2U4ODFhYjYxMDg4ZjhkNDlkODI3MjAzNzE2YWFlZDTikJ80NjU4NjAyOTkxOTcwMjYwMjE1OkV4cGFuZC9IaWRlIFNpZGViYXJgLFtbMSwiZmlsdGVycy10b29sYmFyIl0sWzEsImZpbHRlcnMtdGl0bGUiXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX2xlZnRfMjRweCJdLFsxLCJmaWx0ZXJzIl0sWzMsIm1ldHJpY05hbWUiLCJmaWx0ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJmaWx0ZXJzLWhpbnQiLDQsIm5nSWYiXSxbMywibWV0cmljTmFtZSIsImZpbHRlciJdLFsxLCJmaWx0ZXJzLWhpbnQiXSxbMSwiZmlsdGVycy1oaW50LXRleHQiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImgzIiwxKSxBKDIsIkFjdGl2ZSBGaWx0ZXJzIiksdigpLF8oMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSxPKDUsIm1hdC1pY29uIiw0KSx2KCkoKSgpLF8oNiwiZGl2Iiw1KSxFKDcsUmV0LDEsMiwibnBtaS12aW9saW4tZmlsdGVyIiw2KSx2KCksRSg4LE9ldCwzLDAsImRpdiIsNykpLDImZSYmKEMoNykseSgibmdGb3JPZiIsaS5tZXRyaWNGaWx0ZXJzKSxDKDEpLHkoIm5nSWYiLDA9PT1pLm1ldHJpY0ZpbHRlcnMubGVuZ3RoKSl9LGRlcGVuZGVuY2llczpbZG4sQmUsR3QsX24sUG1lXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LmZpbHRlcnMtdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MCAxMHB4fS5maWx0ZXJzLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDozMHB4fS5maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LmZpbHRlcnMtaGludFtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDJweDtwYWRkaW5nOjAgMTZweH0uZmlsdGVycy1oaW50LXRleHRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnJnYmEoMCwwLDAsLjM4KX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLE9tZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnNpZGViYXJFeHBhbmRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoekYpLHRoaXMubWV0cmljRmlsdGVycyQ9dGhpcy5zdG9yZS5zZWxlY3QoSWwpLnBpcGUoTChpPT5PYmplY3QuZW50cmllcyhpKSkpfW9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChxYigpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktdmlvbGluLWZpbHRlcnMiXV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbMywic2lkZWJhckV4cGFuZGVkIiwibWV0cmljRmlsdGVycyIsInRvZ2dsZVNpZGViYXJFeHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwidmlvbGluLWZpbHRlcnMtY29tcG9uZW50IiwwKSxQKCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoInNpZGViYXJFeHBhbmRlZCIsVSgxLDIsaS5zaWRlYmFyRXhwYW5kZWQkKSkoIm1ldHJpY0ZpbHRlcnMiLFUoMiw0LGkubWV0cmljRmlsdGVycyQpKX0sZGVwZW5kZW5jaWVzOltSbWUsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIFZldChuLHQsZSl7cmV0dXJuIG4ubGVuZ3RoIT10Lmxlbmd0aD9lOnQubWFwKChvLHMpPT5vLW5bc10pLm1hcChvPT5NYXRoLnBvdyhvLDIpKS5yZWR1Y2UoKG8scyk9Pm8rcywwKX12YXIgSGV0PVsiaW5wdXQiXSxVZXQ9ZnVuY3Rpb24obil7cmV0dXJue2VudGVyRHVyYXRpb246bn19LHpldD1bIioiXSxqZXQ9bmV3IHBlKCJtYXQtc2xpZGUtdG9nZ2xlLWRlZmF1bHQtb3B0aW9ucyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7ZGlzYWJsZVRvZ2dsZVZhbHVlOiExfSl9KSxHZXQ9MCxXZXQ9e3Byb3ZpZGU6Tm8sdXNlRXhpc3Rpbmc6Sm4oKCk9Pl82KSxtdWx0aTohMH0scWV0PW9jKGtvKHFvKHNvKGNsYXNze2NvbnN0cnVjdG9yKG4pe3RoaXMuX2VsZW1lbnRSZWY9bn19KSkpKSxZZXQ9KCgpPT57Y2xhc3MgbiBleHRlbmRzIHFldHtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSxsKXtzdXBlcihlKSx0aGlzLl9mb2N1c01vbml0b3I9aSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1yLHRoaXMuZGVmYXVsdHM9cyx0aGlzLl9vbkNoYW5nZT1jPT57fSx0aGlzLl9vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuX3JlcXVpcmVkPSExLHRoaXMuX2NoZWNrZWQ9ITEsdGhpcy5uYW1lPW51bGwsdGhpcy5sYWJlbFBvc2l0aW9uPSJhZnRlciIsdGhpcy5hcmlhTGFiZWw9bnVsbCx0aGlzLmFyaWFMYWJlbGxlZGJ5PW51bGwsdGhpcy5jaGFuZ2U9bmV3IEcsdGhpcy50b2dnbGVDaGFuZ2U9bmV3IEcsdGhpcy50YWJJbmRleD1wYXJzZUludChvKXx8MCx0aGlzLmNvbG9yPXRoaXMuZGVmYXVsdENvbG9yPXMuY29sb3J8fCJhY2NlbnQiLHRoaXMuX25vb3BBbmltYXRpb25zPSJOb29wQW5pbWF0aW9ucyI9PT1hLHRoaXMuaWQ9dGhpcy5fdW5pcXVlSWQ9YCR7bH0keysrR2V0fWB9Z2V0IHJlcXVpcmVkKCl7cmV0dXJuIHRoaXMuX3JlcXVpcmVkfXNldCByZXF1aXJlZChlKXt0aGlzLl9yZXF1aXJlZD1SdChlKX1nZXQgY2hlY2tlZCgpe3JldHVybiB0aGlzLl9jaGVja2VkfXNldCBjaGVja2VkKGUpe3RoaXMuX2NoZWNrZWQ9UnQoZSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGlucHV0SWQoKXtyZXR1cm5gJHt0aGlzLmlkfHx0aGlzLl91bmlxdWVJZH0taW5wdXRgfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsITApLnN1YnNjcmliZShlPT57ImtleWJvYXJkIj09PWV8fCJwcm9ncmFtIj09PWU/dGhpcy5fZm9jdXNlZD0hMDplfHxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fZm9jdXNlZD0hMSx0aGlzLl9vblRvdWNoZWQoKSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9mb2N1c01vbml0b3Iuc3RvcE1vbml0b3JpbmcodGhpcy5fZWxlbWVudFJlZil9d3JpdGVWYWx1ZShlKXt0aGlzLmNoZWNrZWQ9ISFlfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5fb25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLl9vblRvdWNoZWQ9ZX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX10b2dnbGUoKXt0aGlzLmNoZWNrZWQ9IXRoaXMuY2hlY2tlZCx0aGlzLl9vbkNoYW5nZSh0aGlzLmNoZWNrZWQpfV9lbWl0Q2hhbmdlRXZlbnQoKXt0aGlzLl9vbkNoYW5nZSh0aGlzLmNoZWNrZWQpLHRoaXMuY2hhbmdlLmVtaXQodGhpcy5fY3JlYXRlQ2hhbmdlRXZlbnQodGhpcy5jaGVja2VkKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtubCgpfSxuLlx1MDI3NWRpcj1IZSh7dHlwZTpuLGlucHV0czp7bmFtZToibmFtZSIsaWQ6ImlkIixsYWJlbFBvc2l0aW9uOiJsYWJlbFBvc2l0aW9uIixhcmlhTGFiZWw6WyJhcmlhLWxhYmVsIiwiYXJpYUxhYmVsIl0sYXJpYUxhYmVsbGVkYnk6WyJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhTGFiZWxsZWRieSJdLGFyaWFEZXNjcmliZWRieTpbImFyaWEtZGVzY3JpYmVkYnkiLCJhcmlhRGVzY3JpYmVkYnkiXSxyZXF1aXJlZDoicmVxdWlyZWQiLGNoZWNrZWQ6ImNoZWNrZWQifSxvdXRwdXRzOntjaGFuZ2U6ImNoYW5nZSIsdG9nZ2xlQ2hhbmdlOiJ0b2dnbGVDaGFuZ2UifSxmZWF0dXJlczpbdHRdfSksbn0pKCksXzY9KCgpPT57Y2xhc3MgbiBleHRlbmRzIFlldHtjb25zdHJ1Y3RvcihlLGkscixvLHMsYSl7c3VwZXIoZSxpLHIsbyxzLGEsIm1hdC1zbGlkZS10b2dnbGUtIil9X2NyZWF0ZUNoYW5nZUV2ZW50KGUpe3JldHVybiBuZXcgY2xhc3N7Y29uc3RydWN0b3IodCxlKXt0aGlzLnNvdXJjZT10LHRoaXMuY2hlY2tlZD1lfX0odGhpcyxlKX1fb25DaGFuZ2VFdmVudChlKXtlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMudG9nZ2xlQ2hhbmdlLmVtaXQoKSx0aGlzLmRlZmF1bHRzLmRpc2FibGVUb2dnbGVWYWx1ZT90aGlzLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5jaGVja2VkPXRoaXMuY2hlY2tlZDoodGhpcy5jaGVja2VkPXRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNoZWNrZWQsdGhpcy5fZW1pdENoYW5nZUV2ZW50KCkpfV9vbklucHV0Q2xpY2soZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX1mb2N1cyhlLGkpe2k/dGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2lucHV0RWxlbWVudCxpLGUpOnRoaXMuX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKGUpfV9vbkxhYmVsVGV4dENoYW5nZSgpe3RoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShSZSksTShGciksTShubiksdm8oInRhYmluZGV4IiksTShqZXQpLE0oUGksOCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm1hdC1zbGlkZS10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiZvdChIZXQsNSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5faW5wdXRFbGVtZW50PXIuZmlyc3QpfX0saG9zdEF0dHJzOlsxLCJtYXQtc2xpZGUtdG9nZ2xlIl0saG9zdFZhcnM6MTMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MiZlJiYoX3MoImlkIixpLmlkKSx6ZSgidGFiaW5kZXgiLG51bGwpKCJhcmlhLWxhYmVsIixudWxsKSgiYXJpYS1sYWJlbGxlZGJ5IixudWxsKSgibmFtZSIsbnVsbCksZXQoIm1hdC1jaGVja2VkIixpLmNoZWNrZWQpKCJtYXQtZGlzYWJsZWQiLGkuZGlzYWJsZWQpKCJtYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSIsImJlZm9yZSI9PWkubGFiZWxQb3NpdGlvbikoIl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIixpLl9ub29wQW5pbWF0aW9ucykpfSxpbnB1dHM6e2Rpc2FibGVkOiJkaXNhYmxlZCIsZGlzYWJsZVJpcHBsZToiZGlzYWJsZVJpcHBsZSIsY29sb3I6ImNvbG9yIix0YWJJbmRleDoidGFiSW5kZXgifSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl0sZmVhdHVyZXM6WyR0KFtXZXRdKSx0dF0sbmdDb250ZW50U2VsZWN0b3JzOnpldCxkZWNsczoxNCx2YXJzOjIwLGNvbnN0czpbWzEsIm1hdC1zbGlkZS10b2dnbGUtbGFiZWwiXSxbImxhYmVsIiwiIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtYmFyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJyb2xlIiwic3dpdGNoIiwxLCJtYXQtc2xpZGUtdG9nZ2xlLWlucHV0IiwiY2RrLXZpc3VhbGx5LWhpZGRlbiIsMywiaWQiLCJyZXF1aXJlZCIsInRhYkluZGV4IiwiY2hlY2tlZCIsImRpc2FibGVkIiwiY2hhbmdlIiwiY2xpY2siXSxbImlucHV0IiwiIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVyIl0sWzEsIm1hdC1zbGlkZS10b2dnbGUtdGh1bWIiXSxbIm1hdC1yaXBwbGUiLCIiLDEsIm1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIiwibWF0LWZvY3VzLWluZGljYXRvciIsMywibWF0UmlwcGxlVHJpZ2dlciIsIm1hdFJpcHBsZURpc2FibGVkIiwibWF0UmlwcGxlQ2VudGVyZWQiLCJtYXRSaXBwbGVSYWRpdXMiLCJtYXRSaXBwbGVBbmltYXRpb24iXSxbMSwibWF0LXJpcHBsZS1lbGVtZW50IiwibWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZSJdLFsxLCJtYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnQiLDMsImNka09ic2VydmVDb250ZW50Il0sWyJsYWJlbENvbnRlbnQiLCIiXSxbMiwiZGlzcGxheSIsIm5vbmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJih4aSgpLF8oMCwibGFiZWwiLDAsMSkoMiwic3BhbiIsMikoMywiaW5wdXQiLDMsNCksUCgiY2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5fb25DaGFuZ2VFdmVudChvKX0pKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuX29uSW5wdXRDbGljayhvKX0pLHYoKSxfKDUsInNwYW4iLDUpLE8oNiwic3BhbiIsNiksXyg3LCJzcGFuIiw3KSxPKDgsInNwYW4iLDgpLHYoKSgpKCksXyg5LCJzcGFuIiw5LDEwKSxQKCJjZGtPYnNlcnZlQ29udGVudCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5fb25MYWJlbFRleHRDaGFuZ2UoKX0pLF8oMTEsInNwYW4iLDExKSxBKDEyLCJceGEwIiksdigpLFZuKDEzKSx2KCkoKSksMiZlKXtsZXQgcj0kZSgxKSxvPSRlKDEwKTt6ZSgiZm9yIixpLmlucHV0SWQpLEMoMiksZXQoIm1hdC1zbGlkZS10b2dnbGUtYmFyLW5vLXNpZGUtbWFyZ2luIiwhby50ZXh0Q29udGVudHx8IW8udGV4dENvbnRlbnQudHJpbSgpKSxDKDEpLHkoImlkIixpLmlucHV0SWQpKCJyZXF1aXJlZCIsaS5yZXF1aXJlZCkoInRhYkluZGV4IixpLnRhYkluZGV4KSgiY2hlY2tlZCIsaS5jaGVja2VkKSgiZGlzYWJsZWQiLGkuZGlzYWJsZWQpLHplKCJuYW1lIixpLm5hbWUpKCJhcmlhLWNoZWNrZWQiLGkuY2hlY2tlZCkoImFyaWEtbGFiZWwiLGkuYXJpYUxhYmVsKSgiYXJpYS1sYWJlbGxlZGJ5IixpLmFyaWFMYWJlbGxlZGJ5KSgiYXJpYS1kZXNjcmliZWRieSIsaS5hcmlhRGVzY3JpYmVkYnkpLEMoNCkseSgibWF0UmlwcGxlVHJpZ2dlciIscikoIm1hdFJpcHBsZURpc2FibGVkIixpLmRpc2FibGVSaXBwbGV8fGkuZGlzYWJsZWQpKCJtYXRSaXBwbGVDZW50ZXJlZCIsITApKCJtYXRSaXBwbGVSYWRpdXMiLDIwKSgibWF0UmlwcGxlQW5pbWF0aW9uIixPbigxOCxVZXQsaS5fbm9vcEFuaW1hdGlvbnM/MDoxNTApKX19LGRlcGVuZGVuY2llczpbWW8sd2hdLHN0eWxlczpbJy5tYXQtc2xpZGUtdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyNHB4O21heC13aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjI0cHg7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6bm9uZTstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDE2cHgsIDAsIDApfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS5tYXQtY2hlY2tlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC0xNnB4LCAwLCAwKX0ubWF0LXNsaWRlLXRvZ2dsZS5tYXQtZGlzYWJsZWR7b3BhY2l0eTouMzh9Lm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLC5tYXQtc2xpZGUtdG9nZ2xlLm1hdC1kaXNhYmxlZCAubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXJ7Y3Vyc29yOmRlZmF1bHR9Lm1hdC1zbGlkZS10b2dnbGUtbGFiZWx7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7ZGlzcGxheTpmbGV4O2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDppbmhlcml0O2N1cnNvcjpwb2ludGVyfS5tYXQtc2xpZGUtdG9nZ2xlLWNvbnRlbnR7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1sYWJlbHtvcmRlcjoxfS5tYXQtc2xpZGUtdG9nZ2xlLWxhYmVsLWJlZm9yZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7b3JkZXI6Mn1bZGlyPXJ0bF0gLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7bWFyZ2luLXJpZ2h0OjhweDttYXJnaW4tbGVmdDowfVtkaXI9cnRsXSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLm1hdC1zbGlkZS10b2dnbGUtbGFiZWwtYmVmb3JlIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcnttYXJnaW4tbGVmdDo4cHg7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtYmFyLW5vLXNpZGUtbWFyZ2lue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjB9Lm1hdC1zbGlkZS10b2dnbGUtdGh1bWItY29udGFpbmVye3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt3aWR0aDoyMHB4O2hlaWdodDoyMHB4O3RvcDotM3B4O2xlZnQ6MDt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNpdGlvbjphbGwgODBtcyBsaW5lYXI7dHJhbnNpdGlvbi1wcm9wZXJ0eTp0cmFuc2Zvcm19Ll9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcnt0cmFuc2l0aW9uOm5vbmV9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1iLWNvbnRhaW5lcntsZWZ0OmF1dG87cmlnaHQ6MH0ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYntoZWlnaHQ6MjBweDt3aWR0aDoyMHB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6YmxvY2t9Lm1hdC1zbGlkZS10b2dnbGUtYmFye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjM2cHg7aGVpZ2h0OjE0cHg7ZmxleC1zaHJpbms6MDtib3JkZXItcmFkaXVzOjhweH0ubWF0LXNsaWRlLXRvZ2dsZS1pbnB1dHtib3R0b206MDtsZWZ0OjEwcHh9W2Rpcj1ydGxdIC5tYXQtc2xpZGUtdG9nZ2xlLWlucHV0e2xlZnQ6YXV0bztyaWdodDoxMHB4fS5tYXQtc2xpZGUtdG9nZ2xlLWJhciwubWF0LXNsaWRlLXRvZ2dsZS10aHVtYnt0cmFuc2l0aW9uOmFsbCA4MG1zIGxpbmVhcjt0cmFuc2l0aW9uLXByb3BlcnR5OmJhY2tncm91bmQtY29sb3I7dHJhbnNpdGlvbi1kZWxheTo1MG1zfS5fbWF0LWFuaW1hdGlvbi1ub29wYWJsZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXIsLl9tYXQtYW5pbWF0aW9uLW5vb3BhYmxlIC5tYXQtc2xpZGUtdG9nZ2xlLXRodW1ie3RyYW5zaXRpb246bm9uZX0ubWF0LXNsaWRlLXRvZ2dsZSAubWF0LXNsaWRlLXRvZ2dsZS1yaXBwbGV7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoNTAlIC0gMjBweCk7bGVmdDpjYWxjKDUwJSAtIDIwcHgpO2hlaWdodDo0MHB4O3dpZHRoOjQwcHg7ei1pbmRleDoxO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1hdC1zbGlkZS10b2dnbGUgLm1hdC1zbGlkZS10b2dnbGUtcmlwcGxlIC5tYXQtcmlwcGxlLWVsZW1lbnQ6bm90KC5tYXQtc2xpZGUtdG9nZ2xlLXBlcnNpc3RlbnQtcmlwcGxlKXtvcGFjaXR5Oi4xMn0ubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RyYW5zZm9ybTpub25lfS5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5Oi4wNH0ubWF0LXNsaWRlLXRvZ2dsZTpub3QoLm1hdC1kaXNhYmxlZCkuY2RrLWtleWJvYXJkLWZvY3VzZWQgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7b3BhY2l0eTouMTJ9Lm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGUsLm1hdC1zbGlkZS10b2dnbGUubWF0LWRpc2FibGVkIC5tYXQtc2xpZGUtdG9nZ2xlLWJhcjpob3ZlciAubWF0LXNsaWRlLXRvZ2dsZS1wZXJzaXN0ZW50LXJpcHBsZXtvcGFjaXR5OjB9QG1lZGlhKGhvdmVyOiBub25lKXsubWF0LXNsaWRlLXRvZ2dsZS1iYXI6aG92ZXIgLm1hdC1zbGlkZS10b2dnbGUtcGVyc2lzdGVudC1yaXBwbGV7ZGlzcGxheTpub25lfX0ubWF0LXNsaWRlLXRvZ2dsZS1pbnB1dDpmb2N1c34ubWF0LXNsaWRlLXRvZ2dsZS10aHVtYi1jb250YWluZXIgLm1hdC1mb2N1cy1pbmRpY2F0b3I6OmJlZm9yZXtjb250ZW50OiIifS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLm1hdC1zbGlkZS10b2dnbGUtdGh1bWIsLmNkay1oaWdoLWNvbnRyYXN0LWFjdGl2ZSAubWF0LXNsaWRlLXRvZ2dsZS1iYXJ7Ym9yZGVyOjFweCBzb2xpZH0nXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYZXQ9e3Byb3ZpZGU6TG8sdXNlRXhpc3Rpbmc6Sm4oKCk9PlFldCksbXVsdGk6ITB9LFFldD0oKCk9PntjbGFzcyBuIGV4dGVuZHMgZ3d7fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCB0O3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4odHx8KHQ9cGkobikpKShpfHxuKX19KCksbi5cdTAyNzVkaXI9SGUoe3R5cGU6bixzZWxlY3RvcnM6W1sibWF0LXNsaWRlLXRvZ2dsZSIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJtYXQtc2xpZGUtdG9nZ2xlIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsibWF0LXNsaWRlLXRvZ2dsZSIsInJlcXVpcmVkIiwiIiwibmdNb2RlbCIsIiJdXSxmZWF0dXJlczpbJHQoW1hldF0pLHR0XX0pLG59KSgpLEZtZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksTm1lPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltGbWUsX2wsbG4sb2QsRm1lLGxuXX0pLG59KSgpO2Z1bmN0aW9uIFpldChuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMyl9dmFyIExtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezImZSYmZXQoInZhbGlkIixpLmlzUmVnZXhGaWx0ZXJWYWxpZCl9LGlucHV0czp7cmVnZXhGaWx0ZXJWYWx1ZToicmVnZXhGaWx0ZXJWYWx1ZSIsaXNSZWdleEZpbHRlclZhbGlkOiJpc1JlZ2V4RmlsdGVyVmFsaWQifSxvdXRwdXRzOntvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2U6Im9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJzdmdJY29uIiwic2VhcmNoXzI0cHgiXSxbImF1dG9jb21wbGV0ZSIsIm9mZiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIEFubm90YXRpb25zIiwzLCJ2YWx1ZSIsImlucHV0Il0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsImNsYXNzIiwiZXJyb3ItaWNvbiIsIm1hdFRvb2x0aXAiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiw0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXJyb3JfMjRweCIsIm1hdFRvb2x0aXAiLCJJbnZhbGlkIHJlZ2V4IGZpbHRlci4gVGhlIHJlc3VsdCBtYXkgYmUgc3RhbGUuIiwxLCJlcnJvci1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJtYXQtaWNvbiIsMCksXygxLCJpbnB1dCIsMSksUCgiaW5wdXQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVnZXhGaWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KG8udGFyZ2V0LnZhbHVlKX0pLHYoKSxFKDIsWmV0LDEsMCwibWF0LWljb24iLDIpKSwyJmUmJihDKDEpLHkoInZhbHVlIixpLnJlZ2V4RmlsdGVyVmFsdWUpLEMoMSkseSgibmdJZiIsIWkuaXNSZWdleEZpbHRlclZhbGlkKSl9LGRlcGVuZGVuY2llczpbQmUsR3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O3Bvc2l0aW9uOnJlbGF0aXZlfVtfbmdob3N0LSVDT01QJV06bm90KC52YWxpZCl7Y29sb3I6I2M2MjgyOH1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NhcmV0LWNvbG9yOmN1cnJlbnRDb2xvcn1bX25naG9zdC0lQ09NUCVdOm5vdCgudmFsaWQpICAgLmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjNjI4Mjg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEJtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLmFubm90YXRpb25zRmlsdGVyJD10aGlzLnN0b3JlLnNlbGVjdChRYiksdGhpcy5pc0Fubm90YXRpb25zRmlsdGVyVmFsaWQkPXRoaXMuYW5ub3RhdGlvbnNGaWx0ZXIkLnBpcGUoTChpPT57dHJ5e3JldHVybiBuZXcgUmVnRXhwKGkpLCEwfWNhdGNoe3JldHVybiExfX0pKX1maWx0ZXJDaGFuZ2UoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChqYih7cmVnZXg6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJlZ2V4RmlsdGVyVmFsdWUiLCJpc1JlZ2V4RmlsdGVyVmFsaWQiLCJvblJlZ2V4RmlsdGVyVmFsdWVDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm5wbWktYW5ub3RhdGlvbnMtc2VhcmNoLWNvbXBvbmVudCIsMCksUCgib25SZWdleEZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihvKXtyZXR1cm4gaS5maWx0ZXJDaGFuZ2Uobyl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLHYoKSksMiZlJiZ5KCJyZWdleEZpbHRlclZhbHVlIixVKDEsMixpLmFubm90YXRpb25zRmlsdGVyJCkpKCJpc1JlZ2V4RmlsdGVyVmFsaWQiLFUoMiw0LGkuaXNBbm5vdGF0aW9uc0ZpbHRlclZhbGlkJCkpfSxkZXBlbmRlbmNpZXM6W0xtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gZXR0KG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO3NuKDApLF8oMSwiYnV0dG9uIiw1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtvZShlKTtsZXQgcj1TKCk7cmV0dXJuIHNlKHIub25GbGFnQW5ub3RhdGlvbnMuZW1pdChyLnNlbGVjdGVkQW5ub3RhdGlvbnMpKX0pLE8oMiwibWF0LWljb24iLDYpLHYoKSxfKDMsImJ1dHRvbiIsNyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7b2UoZSk7bGV0IHI9UygpO3JldHVybiBzZShyLm9uSGlkZUFubm90YXRpb25zLmVtaXQoci5zZWxlY3RlZEFubm90YXRpb25zKSl9KSxPKDQsIm1hdC1pY29uIiw4KSx2KCksYW4oKX1pZigyJm4pe2xldCBlPVMoKTtDKDEpLHkoImRpc2FibGVkIiwwPT09ZS5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCksQygyKSx5KCJkaXNhYmxlZCIsMD09PWUuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpfX1mdW5jdGlvbiB0dHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7c24oMCksXygxLCJtYXQtc2xpZGUtdG9nZ2xlIiw5KSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5vblRvZ2dsZVNob3dDb3VudHMuZW1pdCgpKX0pLEEoMiwiIFNhbXBsZSBDb3VudCAiKSx2KCksXygzLCJtYXQtc2xpZGUtdG9nZ2xlIiwxMCksUCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBvZShlKSxzZShTKCkub25Ub2dnbGVTaG93SGlkZGVuLmVtaXQoKSl9KSxBKDQsIiBTaG93IEhpZGRlbiAiKSx2KCksTyg1LCJucG1pLWFubm90YXRpb25zLXNlYXJjaCIpLGFuKCl9aWYoMiZuKXtsZXQgZT1TKCk7QygxKSx5KCJjaGVja2VkIixlLnNob3dDb3VudHMpLEMoMikseSgiY2hlY2tlZCIsZS5zaG93SGlkZGVuKX19dmFyIFZtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbkZsYWdBbm5vdGF0aW9ucz1uZXcgRyx0aGlzLm9uSGlkZUFubm90YXRpb25zPW5ldyBHLHRoaXMub25Ub2dnbGVFeHBhbmRlZD1uZXcgRyx0aGlzLm9uVG9nZ2xlU2hvd0NvdW50cz1uZXcgRyx0aGlzLm9uVG9nZ2xlU2hvd0hpZGRlbj1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50Il1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLHNob3dDb3VudHM6InNob3dDb3VudHMiLHNob3dIaWRkZW46InNob3dIaWRkZW4ifSxvdXRwdXRzOntvbkZsYWdBbm5vdGF0aW9uczoib25GbGFnQW5ub3RhdGlvbnMiLG9uSGlkZUFubm90YXRpb25zOiJvbkhpZGVBbm5vdGF0aW9ucyIsb25Ub2dnbGVFeHBhbmRlZDoib25Ub2dnbGVFeHBhbmRlZCIsb25Ub2dnbGVTaG93Q291bnRzOiJvblRvZ2dsZVNob3dDb3VudHMiLG9uVG9nZ2xlU2hvd0hpZGRlbjoib25Ub2dnbGVTaG93SGlkZGVuIn0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZSxpO3JldHVybiB0PSRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgaGlkZXMvc2hvd3MgdGhlIGFubm90YXRpb25zIGxpc3Qu4pCfYjM2MDNiYTMzZTUzMDhkZDhjNWU4MDVlNTA4YjJmNzIzM2RmODlkNOKQnzczMzYzNzQ0MTMwNTYzNDI0OTI6SGlkZXMvU2hvd3MgdGhlIEFubm90YXRpb25zIExpc3RgLGU9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBmbGFncyBzZWxlY3RlZCBhbm5vdGF0aW9ucy7ikJ81NjkyYWQ4ODMxMDM4YTkwYzU4NjNhMWU5YWRmOTc0OGNhYzNjYWQ44pCfMjI0NDA5OTg5MTMxMzMzNjU5NTpGbGFnIFNlbGVjdGVkIEFubm90YXRpb25zYCxpPSRsb2NhbGl6ZWA6TGFiZWwgZm9yIGEgYnV0dG9uIHRoYXQgaGlkZXMgc2VsZWN0ZWQgYW5ub3RhdGlvbnMu4pCfMDM0MmNkYjMzNThmYThlM2ZhMjcyMjBhODI1OGE3Mjg3NDMwYjcwZuKQnzU0NjI4MzIzOTEwOTIwODc0ODU6SGlkZSBTZWxlY3RlZCBBbm5vdGF0aW9uc2AsW1sxLCJhbm5vdGF0aW9ucy10aXRsZS1jb250YWluZXIiXSxbMSwiYW5ub3RhdGlvbnMtdGl0bGUiXSxbNCwibmdJZiJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwxLCJleHBhbmQtYnV0dG9uIiwzLCJjbGljayJdLFszLCJzdmdJY29uIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLCJ0aXRsZSIsIkZsYWdnaW5nIGFubm90YXRpb25zIGFkZHMgdGhlbSB0byB5b3VyIGludmVzdGlnYXRpb24gcmVzdWx0cywgd2hpY2ggY2FuIGxhdGVyIGJlIGV4cG9ydGVkLiIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic3ZnSWNvbiIsImZsYWdfMjRweCJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsaSwidGl0bGUiLCJSZW1vdmluZyBub24tY3JpdGljYWwgYW5ub3RhdGlvbnMgdW5jbHV0dGVycyB0aGUgdmlldy4gUmVtb3ZlZCBhbm5vdGF0aW9ucyBhcmUgcmVtb3ZlZCBmcm9tIGFsbCB2aXN1YWxpemF0aW9ucy4iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJ2aXNpYmlsaXR5X29mZl8yNHB4Il0sWyJ0aXRsZSIsIkhpZGVzIGFuZCBzaG93cyB0aGUgc2FtcGxlIGNvdW50IHdoZXJlIGFwcGxpY2FibGUgKGhvdyBtYW55IHNhbXBsZXMgYmVsb25nIHRvIGEgY2F0ZWdvcnkpLiIsMSwic2hvdy10b2dnbGUiLDMsImNoZWNrZWQiLCJjaGFuZ2UiXSxbInRpdGxlIiwiSGlkZXMgYW5kIHNob3dzIGhpZGRlbiBhbm5vdGF0aW9ucyBpbiBhbGwgdmlzdWFsaXphdGlvbnMuIiwxLCJzaG93LXRvZ2dsZSIsMywiY2hlY2tlZCIsImNoYW5nZSJdXX0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwiaDMiLDEpLEEoMiksdigpLEUoMyxldHQsNSwyLCJuZy1jb250YWluZXIiLDIpLHYoKSxFKDQsdHR0LDYsMiwibmctY29udGFpbmVyIiwyKSxfKDUsImJ1dHRvbiIsMyksUCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub2dnbGVFeHBhbmRlZC5lbWl0KCl9KSxPKDYsIm1hdC1pY29uIiw0KSx2KCkpLDImZSYmKEMoMiksamUoIkFubm90YXRpb25zICgiLGkubnVtQW5ub3RhdGlvbnMsIikiKSxDKDEpLHkoIm5nSWYiLGkuZXhwYW5kZWQpLEMoMSkseSgibmdJZiIsaS5leHBhbmRlZCksQygyKSx5KCJzdmdJY29uIixpLmV4cGFuZGVkPyJleHBhbmRfbGVzc18yNHB4IjoiZXhwYW5kX21vcmVfMjRweCIpKX0sZGVwZW5kZW5jaWVzOltCZSxHdCxfbixfNixCbWVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCAxNnB4O3dpZHRoOjEwMCV9LmFubm90YXRpb25zLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6LjllbTtmb250LXdlaWdodDo1MDA7cGFkZGluZy1yaWdodDoxMHB4fS5hbm5vdGF0aW9ucy10aXRsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOm5vd3JhcDtmbGV4OjEgMTtoZWlnaHQ6NDJweH0uc2hvdy10b2dnbGVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouOWVtO21hcmdpbi1yaWdodDouOGVtfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksSG1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QodmMpLHRoaXMuYW5ub3RhdGlvbnNFeHBhbmRlZCQ9dGhpcy5zdG9yZS5zZWxlY3QoVUYpLHRoaXMuc2hvd0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoakYpLHRoaXMuc2hvd0hpZGRlbiQ9dGhpcy5zdG9yZS5zZWxlY3QoWmIpLHRoaXMuYW5ub3RhdGlvbnNGaWx0ZXIkPXRoaXMuc3RvcmUuc2VsZWN0KFFiKSx0aGlzLmlzQW5ub3RhdGlvbnNGaWx0ZXJWYWxpZCQ9dGhpcy5hbm5vdGF0aW9uc0ZpbHRlciQucGlwZShMKGk9Pnt0cnl7cmV0dXJuIEJvb2xlYW4obmV3IFJlZ0V4cChpKSl9Y2F0Y2h7cmV0dXJuITF9fSkpfWZpbHRlckNoYW5nZShlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKGpiKHtyZWdleDplfSkpfWZsYWdBbm5vdGF0aW9ucyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKEVGKHthbm5vdGF0aW9uczplfSkpfWhpZGVBbm5vdGF0aW9ucyhlKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFRGKHthbm5vdGF0aW9uczplfSkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChSRigpKX10b2dnbGVTaG93Q291bnRzKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChPRigpKX10b2dnbGVTaG93SGlkZGVuKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChrRigpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIl1dLGlucHV0czp7bnVtQW5ub3RhdGlvbnM6Im51bUFubm90YXRpb25zIixleHBhbmRlZDoiZXhwYW5kZWQifSxkZWNsczo1LHZhcnM6MTQsY29uc3RzOltbMywibnVtQW5ub3RhdGlvbnMiLCJleHBhbmRlZCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9uc0V4cGFuZGVkIiwic2hvd0NvdW50cyIsInNob3dIaWRkZW4iLCJvbkZsYWdBbm5vdGF0aW9ucyIsIm9uSGlkZUFubm90YXRpb25zIiwib25Ub2dnbGVFeHBhbmRlZCIsIm9uVG9nZ2xlU2hvd0NvdW50cyIsIm9uVG9nZ2xlU2hvd0hpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwibnBtaS1hbm5vdGF0aW9ucy1saXN0LXRvb2xiYXItY29tcG9uZW50IiwwKSxQKCJvbkZsYWdBbm5vdGF0aW9ucyIsZnVuY3Rpb24obyl7cmV0dXJuIGkuZmxhZ0Fubm90YXRpb25zKG8pfSkoIm9uSGlkZUFubm90YXRpb25zIixmdW5jdGlvbihvKXtyZXR1cm4gaS5oaWRlQW5ub3RhdGlvbnMobyl9KSgib25Ub2dnbGVFeHBhbmRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVFeHBhbmRlZCgpfSkoIm9uVG9nZ2xlU2hvd0NvdW50cyIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVTaG93Q291bnRzKCl9KSgib25Ub2dnbGVTaG93SGlkZGVuIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVNob3dIaWRkZW4oKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSx2KCkpLDImZSYmeSgibnVtQW5ub3RhdGlvbnMiLGkubnVtQW5ub3RhdGlvbnMpKCJleHBhbmRlZCIsaS5leHBhbmRlZCkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFUoMSw2LGkuc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKSgiYW5ub3RhdGlvbnNFeHBhbmRlZCIsVSgyLDgsaS5hbm5vdGF0aW9uc0V4cGFuZGVkJCkpKCJzaG93Q291bnRzIixVKDMsMTAsaS5zaG93Q291bnRzJCkpKCJzaG93SGlkZGVuIixVKDQsMTIsaS5zaG93SGlkZGVuJCkpfSxkZXBlbmRlbmNpZXM6W1ZtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCk7ZnVuY3Rpb24gcnR0KG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiw4KSwyJm4pe2xldCBlPVMoMik7eSgic3ZnSWNvbiIsZS5zb3J0Lm9yZGVyPT09ZS5Tb3J0T3JkZXIuREVTQ0VORElORz8iYXJyb3dfZG93bndhcmRfMjRweCI6ImFycm93X3Vwd2FyZF8yNHB4IikoIm5nQ2xhc3MiLGUuc29ydC5vcmRlcj09PWUuU29ydE9yZGVyLkRFU0NFTkRJTkc/ImRvd24taWNvbiI6InVwLWljb24iKX19ZnVuY3Rpb24gb3R0KG4sdCl7aWYoMSZuKXtsZXQgZT1QZSgpO18oMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImRpdiIsNiksUCgiY2xpY2siLGZ1bmN0aW9uKCl7bGV0IG89b2UoZSkuJGltcGxpY2l0O3JldHVybiBzZShTKCkub25DaGFuZ2VTb3J0LmVtaXQobykpfSksQSgzKSxFKDQscnR0LDEsMiwibWF0LWljb24iLDcpLHYoKSgpKCl9aWYoMiZuKXtsZXQgZT10LiRpbXBsaWNpdCxpPVMoKTtDKDMpLGplKCIgIixpLnN0cmlwTWV0cmljKGUpLCIgIiksQygxKSx5KCJuZ0lmIixlPT09aS5zb3J0Lm1ldHJpYyl9fXZhciBVbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMub25DaGFuZ2VTb3J0PW5ldyBHLHRoaXMub25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQ9bmV3IEcsdGhpcy5Tb3J0T3JkZXI9JHJ9c3RyaXBNZXRyaWMoZSl7cmV0dXJuIFNzKGUpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyLWNvbXBvbmVudCJdXSxpbnB1dHM6e251bUFubm90YXRpb25zOiJudW1Bbm5vdGF0aW9ucyIsc2VsZWN0ZWRBbm5vdGF0aW9uczoic2VsZWN0ZWRBbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsc29ydDoic29ydCJ9LG91dHB1dHM6e29uQ2hhbmdlU29ydDoib25DaGFuZ2VTb3J0IixvbkFsbEFubm90YXRpb25zVG9nZ2xlZDoib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQifSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJ0b2dnbGUtYWxsLWNvbnRhaW5lciJdLFszLCJjaGVja2VkIiwiY2hhbmdlIl0sWzEsImFubm90YXRpb25zLWhlYWRlci1jb250YWluZXJzIl0sWyJjbGFzcyIsImhlYWRlci1jb2x1bW4iLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJoZWFkZXItY29sdW1uIl0sWzEsImhlYWRlci1jb250YWluZXIiXSxbInRhYmluZGV4IiwiMCIsInJvbGUiLCJidXR0b24iLCJ0aXRsZSIsIkNoYW5nZSB0aGUgc29ydCBieSBjbGlja2luZyBhbnkgb2YgdGhlIG1ldHJpY3MuIiwxLCJoZWFkZXItY2xpY2thYmxlIiwzLCJjbGljayJdLFsiY2xhc3MiLCJzb3J0LWljb24iLDMsInN2Z0ljb24iLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWzEsInNvcnQtaWNvbiIsMywic3ZnSWNvbiIsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCkoMSwibWF0LWNoZWNrYm94IiwxKSxQKCJjaGFuZ2UiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uQWxsQW5ub3RhdGlvbnNUb2dnbGVkLmVtaXQoby5jaGVja2VkKX0pLHYoKSgpLF8oMiwiZGl2IiwyKSxFKDMsb3R0LDUsMiwiZGl2IiwzKSx2KCkpLDImZSYmKEMoMSkseSgiY2hlY2tlZCIsaS5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aD09PWkubnVtQW5ub3RhdGlvbnMpLEMoMikseSgibmdGb3JPZiIsaS5hY3RpdmVNZXRyaWNzKSl9LGRlcGVuZGVuY2llczpbRm4sZG4sQmUseWwsR3RdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjI4cHg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7bWFyZ2luLXRvcDo4cHh9LmFubm90YXRpb25zLWhlYWRlci1jb250YWluZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOi45ZW07Zm9udC13ZWlnaHQ6NTAwO2ZsZXgtZ3JvdzoxfS5oZWFkZXItY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMX0uaGVhZGVyLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhlYWRlci1jbGlja2FibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtvdXRsaW5lOm5vbmV9LnRvZ2dsZS1hbGwtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMHB4O3dpZHRoOjkwcHh9LnNvcnQtaWNvbltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjE2cHh9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx6bWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5zZWxlY3RlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdCh2YyksdGhpcy5hbm5vdGF0aW9uU29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoS2IpfWNoYW5nZVNvcnQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaChBRih7bWV0cmljOmV9KSl9YWxsQW5ub3RhdGlvbnNUb2dnbGVkKGUpe3RoaXMuc3RvcmUuZGlzcGF0Y2goUkUoZT97YW5ub3RhdGlvbnM6T2JqZWN0LmtleXModGhpcy5hbm5vdGF0aW9ucyl9Onthbm5vdGF0aW9uczpbXX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXIiXV0saW5wdXRzOntudW1Bbm5vdGF0aW9uczoibnVtQW5ub3RhdGlvbnMiLGFubm90YXRpb25zOiJhbm5vdGF0aW9ucyIsYWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyJ9LGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWzMsIm51bUFubm90YXRpb25zIiwic2VsZWN0ZWRBbm5vdGF0aW9ucyIsInNvcnQiLCJhY3RpdmVNZXRyaWNzIiwib25DaGFuZ2VTb3J0Iiwib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1oZWFkZXItY29tcG9uZW50IiwwKSxQKCJvbkNoYW5nZVNvcnQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmNoYW5nZVNvcnQobyl9KSgib25BbGxBbm5vdGF0aW9uc1RvZ2dsZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLmFsbEFubm90YXRpb25zVG9nZ2xlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksdigpKSwyJmUmJnkoIm51bUFubm90YXRpb25zIixpLm51bUFubm90YXRpb25zKSgic2VsZWN0ZWRBbm5vdGF0aW9ucyIsVSgxLDQsaS5zZWxlY3RlZEFubm90YXRpb25zJCkpKCJzb3J0IixVKDIsNixpLmFubm90YXRpb25Tb3J0JCkpKCJhY3RpdmVNZXRyaWNzIixpLmFjdGl2ZU1ldHJpY3MpfSxkZXBlbmRlbmNpZXM6W1VtZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksbHR0PVsiZ2x5cGgiXSxqbWU9KCgpPT57Y2xhc3MgbntuZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN2Zz1ibyh0aGlzLmdseXBoU1ZHLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKSx0aGlzLmRyYXcoKX1kcmF3KCl7ImNpcmNsZSI9PXRoaXMuc2hhcGU/dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiY2lyY2xlIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJjeCIsNSkuYXR0cigiY3kiLDUpLmF0dHIoInIiLDUpOiJiYXIiPT10aGlzLnNoYXBlP3RoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoInJlY3QiKS5hdHRyKCJmaWxsIix0aGlzLmNvbG9yKS5hdHRyKCJ4IiwwKS5hdHRyKCJ5IiwwKS5hdHRyKCJ3aWR0aCIsMTApLmF0dHIoImhlaWdodCIsMTApOiJydW5JbmRpY2F0b3IiPT10aGlzLnNoYXBlJiZ0aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIikuYXBwZW5kKCJwYXRoIikuYXR0cigiZmlsbCIsdGhpcy5jb2xvcikuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJkIiwiTSAyIDAgTCAxMCAwIEwgNyA1IEwgMTAgMTAgTCAyIDEwIFoiKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1sZWdlbmQtZWxlbWVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJm90KGx0dCw3LFJlKSwyJmUpe2xldCByO05lKHI9TGUoKSkmJihpLmdseXBoU1ZHPXIuZmlyc3QpfX0saW5wdXRzOnt0ZXh0OiJ0ZXh0Iixjb2xvcjoiY29sb3IiLHNoYXBlOiJzaGFwZSJ9LGRlY2xzOjQsdmFyczoxLGNvbnN0czpbWzEsImdseXBoIl0sWyJnbHlwaCIsIiJdLFsxLCJsZWdlbmQtZWxlbWVudC10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKEluKCksTygwLCJzdmciLDAsMSksSnMoKSxfKDIsImRpdiIsMiksQSgzKSx2KCkpLDImZSYmKEMoMykseXQoaS50ZXh0KSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmxlZ2VuZC1lbGVtZW50LXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjhlbTtwYWRkaW5nLWxlZnQ6NXB4fS5nbHlwaFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTBweDtoZWlnaHQ6MTBweH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLEdtZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pLWFubm90YXRpb25zLWxpc3QtbGVnZW5kIl1dLGRlY2xzOjQsdmFyczowLGNvbnN0czpbWyJ0ZXh0IiwicnVuIGluZGljYXRvciIsImNvbG9yIiwicmdiKDAsMCwwKSIsInNoYXBlIiwicnVuSW5kaWNhdG9yIl0sWyJ0ZXh0IiwicG9zaXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigxMDksIDE3NCwgMjEzKSIsInNoYXBlIiwiYmFyIl0sWyJ0ZXh0IiwibmVnYXRpdmUgY29ycmVsYXRpb24iLCJjb2xvciIsInJnYigyNDksIDEwNSwgNzYpIiwic2hhcGUiLCJiYXIiXSxbInRleHQiLCJzYW1wbGUgY291bnQiLCJjb2xvciIsInJnYigxNTEsIDE1MSwgMTUxKSIsInNoYXBlIiwiY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiZPKDAsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDApKDEsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDEpKDIsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDIpKDMsIm5wbWktbGVnZW5kLWVsZW1lbnQiLDMpfSxkZXBlbmRlbmNpZXM6W2ptZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7cGFkZGluZzowIDE2cHh9Il19KSxufSkoKSxkdHQ9WyJjaGFydCJdLHB0dD1bImhpbnRDbGlwIl07ZnVuY3Rpb24gaHR0KG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwxMil9ZnVuY3Rpb24gZnR0KG4sdCl7MSZuJiZPKDAsIm1hdC1pY29uIiwxMyl9ZnVuY3Rpb24gbXR0KG4sdCl7aWYoMSZuJiZPKDAsIm1hdC1pY29uIiwxNCksMiZuKXtsZXQgZT1TKCk7eSgic3ZnSWNvbiIsZS5zb3J0Lm9yZGVyPT09ZS5Tb3J0T3JkZXIuU0lNSUxBUj8iYXJyb3dfZG93bndhcmRfMjRweCI6ImFycm93X3Vwd2FyZF8yNHB4IikoIm5nQ2xhc3MiLGUuc29ydC5vcmRlcj09PWUuU29ydE9yZGVyLlNJTUlMQVI/ImRvd24taWNvbiI6InVwLWljb24iKX19dmFyIFdtZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RlZD0hMSx0aGlzLm9uU2hvd1NpbWlsYXJBbm5vdGF0aW9ucz1uZXcgRyx0aGlzLlNvcnRPcmRlcj0kcix0aGlzLndpZHRoPTEwLHRoaXMuY2hhcnRXaWR0aD0xMCx0aGlzLmNoYXJ0SGVpZ2h0PTEwLHRoaXMubWF4RG90UmFkaXVzPTEwLHRoaXMuY291bnREb3RPZmZzZXQ9NzAsdGhpcy5jb3VudFRleHRQYWRkaW5nPTIsdGhpcy5tYXJnaW49e3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDoxMDB9LHRoaXMuc3Ryb2tlQ29sb3I9IiNmZmYiLHRoaXMudGV4dENsYXNzPSJkZWZhdWx0LXRleHQiLHRoaXMucnVucz1bXX1vblJlc2l6ZShlKXt0aGlzLnJlZHJhdygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3ZnPWJvKHRoaXMuYW5ub3RhdGlvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50KS5zZWxlY3QoInN2ZyIpLHRoaXMueFNjYWxlPVN5KCkucGFkZGluZygwKSx0aGlzLnlTY2FsZT1TeSgpLnBhZGRpbmcoMCksdGhpcy5zaXplU2NhbGU9UW8oKS5kb21haW4oWzAsMV0pLHRoaXMuY291bnRTaXplU2NhbGU9UW8oKS5yYW5nZShbMix0aGlzLm1heERvdFJhZGl1c10pLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuYmFyc0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLmNvdW50RG90c0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLnRleHRzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMuY291bnRUZXh0c0dyb3VwPXRoaXMubWFpbkNvbnRhaW5lci5hcHBlbmQoImciKSx0aGlzLnJ1bkhpbnRHcm91cD10aGlzLnN2Zy5hcHBlbmQoImciKSx0aGlzLnJlZHJhdygpfW5nT25DaGFuZ2VzKGUpe3RoaXMuc3ZnJiZ0aGlzLnJlZHJhdygpfXJlZHJhdygpe3RoaXMuc2VsZWN0ZWQ9dGhpcy5zZWxlY3RlZEFubm90YXRpb25zLmluY2x1ZGVzKHRoaXMuYW5ub3RhdGlvbiksdGhpcy51cGRhdGVEaW1lbnNpb25zKCksdGhpcy5zZXRUZXh0Q2xhc3MoKSx0aGlzLnVwZGF0ZUF4ZXMoKSx0aGlzLmRyYXcoKX11cGRhdGVEaW1lbnNpb25zKCl7bGV0IGU9bmV3IFNldDt0aGlzLmRhdGEuZm9yRWFjaChpPT57ZS5hZGQoaS5ydW4pfSksdGhpcy5ydW5zPVsuLi5lXSx0aGlzLnN2Zy5zdHlsZSgiaGVpZ2h0Iix0aGlzLm51bUFjdGl2ZVJ1bnMqdGhpcy5ydW5IZWlnaHQrInB4IiksdGhpcy5jaGFydEhlaWdodD10aGlzLnJ1bnMubGVuZ3RoKnRoaXMucnVuSGVpZ2h0LXRoaXMubWFyZ2luLnRvcC10aGlzLm1hcmdpbi5ib3R0b20sdGhpcy53aWR0aD10aGlzLmFubm90YXRpb25Db250YWluZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aHx8MTAsdGhpcy5jaGFydFdpZHRoPXRoaXMud2lkdGgtdGhpcy5tYXJnaW4ubGVmdC10aGlzLm1hcmdpbi5yaWdodH1zZXRUZXh0Q2xhc3MoKXt0aGlzLnRleHRDbGFzcz0iZGVmYXVsdC10ZXh0Iix0aGlzLmZsYWdnZWRBbm5vdGF0aW9ucy5pbmNsdWRlcyh0aGlzLmFubm90YXRpb24pP3RoaXMudGV4dENsYXNzPSJmbGFnLXRleHQiOnRoaXMuaGlkZGVuQW5ub3RhdGlvbnMuaW5jbHVkZXModGhpcy5hbm5vdGF0aW9uKSYmKHRoaXMudGV4dENsYXNzPSJoaWRkZW4tdGV4dCIpfXVwZGF0ZUF4ZXMoKXt0aGlzLnhTY2FsZS5yYW5nZVJvdW5kKFswLHRoaXMuY2hhcnRXaWR0aC10aGlzLmNoYXJ0V2lkdGgvdGhpcy5hY3RpdmVNZXRyaWNzLmxlbmd0aF0pLmRvbWFpbih0aGlzLmFjdGl2ZU1ldHJpY3MubWFwKGU9PlNzKGUpKSksdGhpcy55U2NhbGUucmFuZ2VSb3VuZChbMCx0aGlzLmNoYXJ0SGVpZ2h0LXRoaXMucnVuSGVpZ2h0XSkuZG9tYWluKHRoaXMucnVucyksdGhpcy5zaXplU2NhbGUucmFuZ2UoWzAsdGhpcy5jaGFydFdpZHRoL3RoaXMuYWN0aXZlTWV0cmljcy5sZW5ndGhdKSx0aGlzLmNvdW50U2l6ZVNjYWxlLmRvbWFpbihbMCx0aGlzLm1heENvdW50XSl9ZHJhdygpe3RoaXMuZHJhd1J1bkluZGljYXRvcnMoKSx0aGlzLmRyYXdSdW5IaW50VGV4dHMoKSx0aGlzLmRyYXdCYXJzKCksdGhpcy5kcmF3VGV4dHMoKSx0aGlzLnNob3dDb3VudHM/KHRoaXMuZHJhd0NvdW50RG90cygpLHRoaXMuZHJhd0NvdW50VGV4dHMoKSk6KHRoaXMuY291bnREb3RzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtZG90IikucmVtb3ZlKCksdGhpcy5jb3VudFRleHRzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtYmFja2dyb3VuZC10ZXh0IikucmVtb3ZlKCksdGhpcy5jb3VudFRleHRzR3JvdXAuc2VsZWN0QWxsKCIuY291bnQtdGV4dCIpLnJlbW92ZSgpKX1kcmF3UnVuSW5kaWNhdG9ycygpe2JvKHRoaXMuY2xpcFBhdGhFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLnNlbGVjdCgicmVjdCIpLmF0dHIoIndpZHRoIix0aGlzLm1hcmdpbi5sZWZ0LTMwKS5hdHRyKCJoZWlnaHQiLHRoaXMuY2hhcnRIZWlnaHQpO2xldCBlPXRoaXMucnVuSGludEdyb3VwLnNlbGVjdEFsbCgiLmhpbnQiKS5kYXRhKHRoaXMucnVucyksaT1lLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJoaW50Iik7aS5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIiwiTSAwIDAgTCAxNSAwIEwgMTAgMTAgTCAxNSAyMCBMIDAgMjAgWiIpLGkubWVyZ2UoZSkuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihyKXtyZXR1cm5gdHJhbnNsYXRlKDEwLCAke3RoaXMueVNjYWxlKHIpKzV9KWB9LmJpbmQodGhpcykpLmF0dHIoImZpbGwiLGZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUocil9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfWRyYXdSdW5IaW50VGV4dHMoKXtsZXQgZT10aGlzLnJ1bkhpbnRHcm91cC5zZWxlY3RBbGwoIi5oaW50LXRleHQiKS5kYXRhKHRoaXMucnVucyk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoIngiLDI1KS5hdHRyKCJmb250LXNpemUiLCIxMHB4IikuYXR0cigiYWxpZ25tZW50LWJhc2VsaW5lIiwibWlkZGxlIikuYXR0cigiY2xpcC1wYXRoIiwidXJsKCNoaW50LWNsaXApIikubWVyZ2UoZSkuYXR0cigieSIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueVNjYWxlKHIpKzE1fS5iaW5kKHRoaXMpKS5hdHRyKCJjbGFzcyIsYGhpbnQtdGV4dCAke3RoaXMudGV4dENsYXNzfWApLnRleHQocj0+dGhpcy5ydW5JZFRvUnVucy5nZXQocik/Lm5hbWV8fCIiKSxlLmV4aXQoKS5yZW1vdmUoKX1kcmF3QmFycygpe2xldCBlPXRoaXMuYmFyc0dyb3VwLnNlbGVjdEFsbCgiLmJhciIpLmRhdGEodGhpcy5kYXRhKTtlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYXIiKS5hdHRyKCJoZWlnaHQiLDIwKS5tZXJnZShlKS5hdHRyKCJmaWxsIixyPT5udWxsPT09ci5uUE1JVmFsdWU/IiI6ci5uUE1JVmFsdWU+PTA/dGooci5uUE1JVmFsdWUpOmlqKC0xKnIublBNSVZhbHVlKSkuYXR0cigieCIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueFNjYWxlKHIubWV0cmljKX0uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueVNjYWxlKHIucnVuKSs1fS5iaW5kKHRoaXMpKS5hdHRyKCJ3aWR0aCIsZnVuY3Rpb24ocil7cmV0dXJuIG51bGw9PT1yLm5QTUlWYWx1ZT8wOnRoaXMuc2l6ZVNjYWxlKE1hdGguYWJzKHIublBNSVZhbHVlKSl9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpfWRyYXdDb3VudERvdHMoKXtsZXQgZT10aGlzLmNvdW50RG90c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LWRvdCIpLmRhdGEodGhpcy5kYXRhKTtlLmVudGVyKCkuYXBwZW5kKCJjaXJjbGUiKS5hdHRyKCJjbGFzcyIsImNvdW50LWRvdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikubWVyZ2UoZSkuYXR0cigiZmlsbCIsZnVuY3Rpb24ocil7cmV0dXJuIG51bGw9PT1yLmNvdW50VmFsdWU/IiI6bmooci5jb3VudFZhbHVlL3RoaXMubWF4Q291bnQpfS5iaW5kKHRoaXMpKS5hdHRyKCJjeCIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueFNjYWxlKHIubWV0cmljKSt0aGlzLmNvdW50RG90T2Zmc2V0fS5iaW5kKHRoaXMpKS5hdHRyKCJjeSIsZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMueVNjYWxlKHIucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS5hdHRyKCJyIixmdW5jdGlvbihyKXtyZXR1cm4gbnVsbD09PXIuY291bnRWYWx1ZT8wOnRoaXMuY291bnRTaXplU2NhbGUoci5jb3VudFZhbHVlKX0uYmluZCh0aGlzKSksZS5leGl0KCkucmVtb3ZlKCl9ZHJhd1RleHRzKCl7bGV0IGU9dGhpcy50ZXh0c0dyb3VwLnNlbGVjdEFsbCgiLm5wbWktYmFja2dyb3VuZC10ZXh0IikuZGF0YSh0aGlzLmRhdGEpO2UuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm5wbWktYmFja2dyb3VuZC10ZXh0IikuYXR0cigic3Ryb2tlLXdpZHRoIiwzKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsdGhpcy5zdHJva2VDb2xvcikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKGUpLmF0dHIoIngiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnhTY2FsZShzLm1ldHJpYykrNX0uYmluZCh0aGlzKSkuYXR0cigieSIsZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMueVNjYWxlKHMucnVuKSt0aGlzLnJ1bkhlaWdodC8yfS5iaW5kKHRoaXMpKS50ZXh0KHM9Pm51bGw9PT1zLm5QTUlWYWx1ZT8ibnVsbCI6TWF0aC5yb3VuZCgxZTMqKHMublBNSVZhbHVlK051bWJlci5FUFNJTE9OKSkvMWUzKSxlLmV4aXQoKS5yZW1vdmUoKTtsZXQgcj10aGlzLnRleHRzR3JvdXAuc2VsZWN0QWxsKCIubnBtaS10ZXh0IikuZGF0YSh0aGlzLmRhdGEpO3IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsIm5wbWktdGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEzcHgiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5tZXJnZShyKS5hdHRyKCJ4IixmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy54U2NhbGUocy5tZXRyaWMpKzV9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnlTY2FsZShzLnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkudGV4dChzPT5udWxsPT09cy5uUE1JVmFsdWU/Im51bGwiOk1hdGgucm91bmQoMWUzKihzLm5QTUlWYWx1ZStOdW1iZXIuRVBTSUxPTikpLzFlMyksci5leGl0KCkucmVtb3ZlKCl9ZHJhd0NvdW50VGV4dHMoKXtsZXQgZT10aGlzLmNvdW50VGV4dHNHcm91cC5zZWxlY3RBbGwoIi5jb3VudC1iYWNrZ3JvdW5kLXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7ZS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY291bnQtYmFja2dyb3VuZC10ZXh0IikuYXR0cigic3Ryb2tlLXdpZHRoIiwzKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsdGhpcy5zdHJva2VDb2xvcikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLm1lcmdlKGUpLmF0dHIoIngiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnhTY2FsZShzLm1ldHJpYykrdGhpcy5jb3VudERvdE9mZnNldCt0aGlzLmNvdW50VGV4dFBhZGRpbmcrdGhpcy5tYXhEb3RSYWRpdXN9LmJpbmQodGhpcykpLmF0dHIoInkiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLnlTY2FsZShzLnJ1bikrdGhpcy5ydW5IZWlnaHQvMn0uYmluZCh0aGlzKSkudGV4dChzPT5udWxsPT09cy5jb3VudFZhbHVlPyIiOkludGwuTnVtYmVyRm9ybWF0KCkuZm9ybWF0KHMuY291bnRWYWx1ZSkpLGUuZXhpdCgpLnJlbW92ZSgpO2xldCByPXRoaXMuY291bnRUZXh0c0dyb3VwLnNlbGVjdEFsbCgiLmNvdW50LXRleHQiKS5kYXRhKHRoaXMuZGF0YSk7ci5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmF0dHIoImNsYXNzIiwiY291bnQtdGV4dCIpLmF0dHIoImZvbnQtc2l6ZSIsIjEwcHgiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJtaWRkbGUiKS5tZXJnZShyKS5hdHRyKCJ4IixmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy54U2NhbGUocy5tZXRyaWMpK3RoaXMuY291bnREb3RPZmZzZXQrdGhpcy5jb3VudFRleHRQYWRkaW5nK3RoaXMubWF4RG90UmFkaXVzfS5iaW5kKHRoaXMpKS5hdHRyKCJ5IixmdW5jdGlvbihzKXtyZXR1cm4gdGhpcy55U2NhbGUocy5ydW4pK3RoaXMucnVuSGVpZ2h0LzJ9LmJpbmQodGhpcykpLnRleHQocz0+bnVsbD09PXMuY291bnRWYWx1ZT8iIjpJbnRsLk51bWJlckZvcm1hdCgpLmZvcm1hdChzLmNvdW50VmFsdWUpKSxyLmV4aXQoKS5yZW1vdmUoKX1zaW1pbGFyaXR5U29ydChlKXt0aGlzLmhhc0VtYmVkZGluZyYmKGUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5vblNob3dTaW1pbGFyQW5ub3RhdGlvbnMuZW1pdCgpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYW5ub3RhdGlvbi1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoZHR0LDcsUmUpLG90KHB0dCw3LFJlKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5hbm5vdGF0aW9uQ29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLmNsaXBQYXRoRWxlbWVudD1yLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGUsaSl7MSZlJiZQKCJyZXNpemUiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemUoKX0sMCxXeCksMiZlJiZldCgic2VsZWN0ZWQtcm93IixpLnNlbGVjdGVkKX0saW5wdXRzOntkYXRhOiJkYXRhIixtYXhDb3VudDoibWF4Q291bnQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLGZsYWdnZWRBbm5vdGF0aW9uczoiZmxhZ2dlZEFubm90YXRpb25zIixoaWRkZW5Bbm5vdGF0aW9uczoiaGlkZGVuQW5ub3RhdGlvbnMiLGFjdGl2ZU1ldHJpY3M6ImFjdGl2ZU1ldHJpY3MiLG51bUFjdGl2ZVJ1bnM6Im51bUFjdGl2ZVJ1bnMiLHNob3dDb3VudHM6InNob3dDb3VudHMiLGFubm90YXRpb246ImFubm90YXRpb24iLHJ1bkhlaWdodDoicnVuSGVpZ2h0IixoYXNFbWJlZGRpbmc6Imhhc0VtYmVkZGluZyIsc29ydDoic29ydCIsc2lkZWJhcldpZHRoOiJzaWRlYmFyV2lkdGgiLGNvbG9yU2NhbGU6ImNvbG9yU2NhbGUiLHJ1bklkVG9SdW5zOiJydW5JZFRvUnVucyJ9LG91dHB1dHM6e29uU2hvd1NpbWlsYXJBbm5vdGF0aW9uczoib25TaG93U2ltaWxhckFubm90YXRpb25zIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczoxNCx2YXJzOjEwLGNvbnN0czpbWzEsImFubm90YXRpb24tdGl0bGUiXSxbMSwiYW5ub3RhdGlvbi1jaGVja2JveCIsMywiY2hlY2tlZCIsImNsaWNrIl0sWzEsImFubm90YXRpb24tYnV0dG9uIiwzLCJuZ0NsYXNzIiwiY2xpY2siXSxbImNsYXNzIiwiZmxhZ2dlZC1pY29uIiwic3ZnSWNvbiIsImZsYWdfMjRweCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoaWRkZW4taWNvbiIsInN2Z0ljb24iLCJ2aXNpYmlsaXR5X29mZl8yNHB4Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFubm90YXRpb24taWNvbiIsMywic3ZnSWNvbiIsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbMSwiY2hhcnQtZGl2Il0sWyJjaGFydCIsIiJdLFsxLCJjaGFydC1zdmciXSxbImlkIiwiaGludC1jbGlwIl0sWyJoaW50Q2xpcCIsIiJdLFsieCIsIjAiLCJ5IiwiMCJdLFsic3ZnSWNvbiIsImZsYWdfMjRweCIsMSwiZmxhZ2dlZC1pY29uIl0sWyJzdmdJY29uIiwidmlzaWJpbGl0eV9vZmZfMjRweCIsMSwiaGlkZGVuLWljb24iXSxbMSwiYW5ub3RhdGlvbi1pY29uIiwzLCJzdmdJY29uIiwibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZGl2IiwwKSgxLCJtYXQtY2hlY2tib3giLDEpLFAoImNsaWNrIixmdW5jdGlvbihvKXtyZXR1cm4gby5wcmV2ZW50RGVmYXVsdCgpfSksdigpLF8oMiwiYnV0dG9uIiwyKSxQKCJjbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkuc2ltaWxhcml0eVNvcnQobyl9KSxBKDMpLHYoKSxFKDQsaHR0LDEsMCwibWF0LWljb24iLDMpLEUoNSxmdHQsMSwwLCJtYXQtaWNvbiIsNCksRSg2LG10dCwxLDIsIm1hdC1pY29uIiw1KSx2KCksXyg3LCJkaXYiLDYsNyksSW4oKSxfKDksInN2ZyIsOCkoMTAsImRlZnMiKSgxMSwiY2xpcFBhdGgiLDksMTApLE8oMTMsInJlY3QiLDExKSx2KCkoKSgpKCkpLDImZSYmKGV0KCJmbGFnZ2VkLWFubm90YXRpb24iLGkuZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKGkuYW5ub3RhdGlvbikpKCJoaWRkZW4tYW5ub3RhdGlvbiIsaS5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhpLmFubm90YXRpb24pJiYhaS5mbGFnZ2VkQW5ub3RhdGlvbnMuaW5jbHVkZXMoaS5hbm5vdGF0aW9uKSksQygxKSx5KCJjaGVja2VkIixpLnNlbGVjdGVkQW5ub3RhdGlvbnMuaW5jbHVkZXMoaS5hbm5vdGF0aW9uKSksQygxKSx5KCJuZ0NsYXNzIixpLmhhc0VtYmVkZGluZz8iY2xpY2thYmxlLWFubm90YXRpb24iOiIiKSxDKDEpLGplKCIgIixpLmFubm90YXRpb24sIiAiKSxDKDEpLHkoIm5nSWYiLGkuZmxhZ2dlZEFubm90YXRpb25zLmluY2x1ZGVzKGkuYW5ub3RhdGlvbikpLEMoMSkseSgibmdJZiIsaS5oaWRkZW5Bbm5vdGF0aW9ucy5pbmNsdWRlcyhpLmFubm90YXRpb24pKSxDKDEpLHkoIm5nSWYiLGkuYW5ub3RhdGlvbj09PWkuc29ydC5tZXRyaWMpKX0sZGVwZW5kZW5jaWVzOltGbixCZSx5bCxHdF0sc3R5bGVzOlsiOmhvc3R7cGFkZGluZy10b3A6NXB4fS5hbm5vdGF0aW9uLXRpdGxle2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEzcHg7aGVpZ2h0OjIwcHg7cGFkZGluZzowIDEwcHg7dXNlci1zZWxlY3Q6bm9uZX0uc2VsZWN0ZWQtcm93e2JhY2tncm91bmQtY29sb3I6I2UwZTBlMDtkaXNwbGF5OmJsb2NrfS5mbGFnZ2VkLWFubm90YXRpb257Y29sb3I6I2Y1N2MwMH0uaGlkZGVuLWFubm90YXRpb257Y29sb3I6Izc1NzU3NX0uYW5ub3RhdGlvbi1jaGVja2JveHtwYWRkaW5nLXJpZ2h0OjVweH0uZmxhZ2dlZC1pY29ue3RyYW5zZm9ybTpzY2FsZSgwLjYpfS5oaWRkZW4taWNvbnt0cmFuc2Zvcm06c2NhbGUoMC42KX0uYW5ub3RhdGlvbi1pY29ue3RyYW5zZm9ybTpzY2FsZSgwLjYpfS5jaGFydC1kaXZ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYn0uY2hhcnQtc3Zne3dpZHRoOjEwMCU7dXNlci1zZWxlY3Q6bm9uZX0uZGVmYXVsdC10ZXh0e2ZpbGw6IzAwMH0uZmxhZy10ZXh0e2ZpbGw6I2Y1N2MwMH0uaGlkZGVuLXRleHR7ZmlsbDojNzU3NTc1fS5jbGlja2FibGUtYW5ub3RhdGlvbntjdXJzb3I6cG9pbnRlcn1idXR0b257YWxsOnVuc2V0fVxuIl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkscW1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc29ydCQ9dGhpcy5zdG9yZS5zZWxlY3QoS2IpLHRoaXMuZmxhZ2dlZEFubm90YXRpb25zJD10aGlzLnN0b3JlLnNlbGVjdChWRiksdGhpcy5oaWRkZW5Bbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QoWGIpLHRoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucyQ9dGhpcy5zdG9yZS5zZWxlY3QodmMpLHRoaXMuc2hvd0NvdW50cyQ9dGhpcy5zdG9yZS5zZWxlY3QoakYpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChPZiksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChuYykucGlwZShMKGk9PnI9PntpZighaS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtyfS5gKTtyZXR1cm4gaVtyXX0pKSx0aGlzLnJ1bklkVG9SdW5zJD10aGlzLnN0b3JlLnNlbGVjdChxSSl9c2hvd1NpbWlsYXJBbm5vdGF0aW9ucygpe3RoaXMuc3RvcmUuZGlzcGF0Y2goSUYoe2Fubm90YXRpb246dGhpcy5hbm5vdGF0aW9ufSkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1hbm5vdGF0aW9uIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsbWF4Q291bnQ6Im1heENvdW50IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixhbm5vdGF0aW9uOiJhbm5vdGF0aW9uIixydW5IZWlnaHQ6InJ1bkhlaWdodCIsaGFzRW1iZWRkaW5nOiJoYXNFbWJlZGRpbmcifSxkZWNsczo5LHZhcnM6MzEsY29uc3RzOltbMywiZGF0YSIsIm1heENvdW50IiwiYWN0aXZlTWV0cmljcyIsIm51bUFjdGl2ZVJ1bnMiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwic29ydCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJmbGFnZ2VkQW5ub3RhdGlvbnMiLCJoaWRkZW5Bbm5vdGF0aW9ucyIsInNob3dDb3VudHMiLCJzaWRlYmFyV2lkdGgiLCJjb2xvclNjYWxlIiwicnVuSWRUb1J1bnMiLCJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImFubm90YXRpb24tY29tcG9uZW50IiwwKSxQKCJvblNob3dTaW1pbGFyQW5ub3RhdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuc2hvd1NpbWlsYXJBbm5vdGF0aW9ucygpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpLEIoNSwiYXN5bmMiKSxCKDYsImFzeW5jIiksQig3LCJhc3luYyIpLEIoOCwiYXN5bmMiKSx2KCkpLDImZSYmeSgiZGF0YSIsaS5kYXRhKSgibWF4Q291bnQiLGkubWF4Q291bnQpKCJhY3RpdmVNZXRyaWNzIixpLmFjdGl2ZU1ldHJpY3MpKCJudW1BY3RpdmVSdW5zIixpLm51bUFjdGl2ZVJ1bnMpKCJhbm5vdGF0aW9uIixpLmFubm90YXRpb24pKCJydW5IZWlnaHQiLGkucnVuSGVpZ2h0KSgiaGFzRW1iZWRkaW5nIixpLmhhc0VtYmVkZGluZykoInNvcnQiLFUoMSwxNSxpLnNvcnQkKSkoInNlbGVjdGVkQW5ub3RhdGlvbnMiLFUoMiwxNyxpLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSkoImZsYWdnZWRBbm5vdGF0aW9ucyIsVSgzLDE5LGkuZmxhZ2dlZEFubm90YXRpb25zJCkpKCJoaWRkZW5Bbm5vdGF0aW9ucyIsVSg0LDIxLGkuaGlkZGVuQW5ub3RhdGlvbnMkKSkoInNob3dDb3VudHMiLFUoNSwyMyxpLnNob3dDb3VudHMkKSkoInNpZGViYXJXaWR0aCIsVSg2LDI1LGkuc2lkZWJhcldpZHRoJCkpKCJjb2xvclNjYWxlIixVKDcsMjcsaS5ydW5Db2xvclNjYWxlJCkpKCJydW5JZFRvUnVucyIsVSg4LDI5LGkucnVuSWRUb1J1bnMkKSl9LGRlcGVuZGVuY2llczpbV21lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB2dHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJucG1pLWFubm90YXRpb24iLDUpLFAoImNsaWNrIixmdW5jdGlvbihyKXtsZXQgcz1vZShlKS4kaW1wbGljaXQ7cmV0dXJuIHNlKFMoMikucm93Q2xpY2tlZChyLHMpKX0pLHYoKX1pZigyJm4pe2xldCBlPXQuJGltcGxpY2l0LGk9UygyKTt5KCJkYXRhIixpLmFubm90YXRpb25zW2VdKSgiYWN0aXZlTWV0cmljcyIsaS5hY3RpdmVNZXRyaWNzKSgibnVtQWN0aXZlUnVucyIsaS5udW1BY3RpdmVSdW5zKSgibWF4Q291bnQiLGkubWF4Q291bnQpKCJhbm5vdGF0aW9uIixlKSgicnVuSGVpZ2h0IixpLnJ1bkhlaWdodCkoImhhc0VtYmVkZGluZyIsaS5lbWJlZGRpbmdEYXRhJiZ2b2lkIDAhPT1pLmVtYmVkZGluZ0RhdGFbZV0pfX1mdW5jdGlvbiB5dHQobix0KXtpZigxJm4mJihzbigwKSxPKDEsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC1sZWdlbmQiKSgyLCJucG1pLWFubm90YXRpb25zLWxpc3QtaGVhZGVyIiwyKSxfKDMsImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCIsMyksRSg0LHZ0dCwxLDcsIm5wbWktYW5ub3RhdGlvbiIsNCksdigpLGFuKCkpLDImbil7bGV0IGU9UygpO0MoMikseSgiYW5ub3RhdGlvbnMiLGUuYW5ub3RhdGlvbnMpKCJudW1Bbm5vdGF0aW9ucyIsZS5udW1Bbm5vdGF0aW9ucykoImFjdGl2ZU1ldHJpY3MiLGUuYWN0aXZlTWV0cmljcyksQygxKSxaaSgiaXRlbVNpemUiLGUubnVtQWN0aXZlUnVucyplLnJ1bkhlaWdodCsyNSksQygxKSx5KCJjZGtWaXJ0dWFsRm9yT2YiLGUuc29ydGVkQW5ub3RhdGlvbnMpfX12YXIgWW1lPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLm9uUm93Q2xpY2s9bmV3IEcsdGhpcy5ydW5IZWlnaHQ9MzB9cm93Q2xpY2tlZChlLGkpe2lmKGUuc2hpZnRLZXkpe2xldCByPXRoaXMuc29ydGVkQW5ub3RhdGlvbnMuaW5kZXhPZihpKTtpZigwPT09dGhpcy5zZWxlY3RlZEFubm90YXRpb25zLmxlbmd0aCl0aGlzLm9uUm93Q2xpY2suZW1pdCh0aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKDAscisxKSk7ZWxzZXtsZXQgcz10aGlzLnNvcnRlZEFubm90YXRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZEFubm90YXRpb25zW3RoaXMuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgtMV0pO3RoaXMub25Sb3dDbGljay5lbWl0KHM8cj90aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKHMscisxKTp0aGlzLnNvcnRlZEFubm90YXRpb25zLnNsaWNlKHIscysxKSl9fWVsc2UgdGhpcy5vblJvd0NsaWNrLmVtaXQoW2ldKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siYW5ub3RhdGlvbnMtbGlzdC1jb21wb25lbnQiXV0saW5wdXRzOnthbm5vdGF0aW9uczoiYW5ub3RhdGlvbnMiLGVtYmVkZGluZ0RhdGE6ImVtYmVkZGluZ0RhdGEiLGFubm90YXRpb25zRXhwYW5kZWQ6ImFubm90YXRpb25zRXhwYW5kZWQiLG51bUFubm90YXRpb25zOiJudW1Bbm5vdGF0aW9ucyIsYW5ub3RhdGlvblNvcnQ6ImFubm90YXRpb25Tb3J0IixhY3RpdmVNZXRyaWNzOiJhY3RpdmVNZXRyaWNzIixudW1BY3RpdmVSdW5zOiJudW1BY3RpdmVSdW5zIixzb3J0ZWRBbm5vdGF0aW9uczoic29ydGVkQW5ub3RhdGlvbnMiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMiLG1heENvdW50OiJtYXhDb3VudCJ9LG91dHB1dHM6e29uUm93Q2xpY2s6Im9uUm93Q2xpY2sifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJudW1Bbm5vdGF0aW9ucyIsImV4cGFuZGVkIl0sWzQsIm5nSWYiXSxbMywiYW5ub3RhdGlvbnMiLCJudW1Bbm5vdGF0aW9ucyIsImFjdGl2ZU1ldHJpY3MiXSxbIm1pbkJ1ZmZlclB4IiwiMzAwIiwibWF4QnVmZmVyUHgiLCI2MDAiLDEsImFubm90YXRpb24tcm93cyIsMywiaXRlbVNpemUiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siLDQsImNka1ZpcnR1YWxGb3IiLCJjZGtWaXJ0dWFsRm9yT2YiXSxbMywiZGF0YSIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwibWF4Q291bnQiLCJhbm5vdGF0aW9uIiwicnVuSGVpZ2h0IiwiaGFzRW1iZWRkaW5nIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsIm5wbWktYW5ub3RhdGlvbnMtbGlzdC10b29sYmFyIiwwKSxFKDEseXR0LDUsNSwibmctY29udGFpbmVyIiwxKSksMiZlJiYoeSgibnVtQW5ub3RhdGlvbnMiLGkubnVtQW5ub3RhdGlvbnMpKCJleHBhbmRlZCIsaS5hbm5vdGF0aW9uc0V4cGFuZGVkKSxDKDEpLHkoIm5nSWYiLGkuYW5ub3RhdGlvbnNFeHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W0JlLEhtZSx6bWUsR21lLGIyLHgyLGVnLHFtZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OmNhbGMoMTAwJSAtIDJweCk7d2lkdGg6Y2FsYygxMDAlIC0gMnB4KX0uYW5ub3RhdGlvbi1yb3dzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MSAxO292ZXJmbG93LXk6YXV0b30iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLFlGPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYW5ub3RhdGlvbnNFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKHZ0KFVGKSksdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUodnQob28pKS5waXBlKEwoaT0+aT9BcnJheS5mcm9tKGkuZW50cmllcygpKS5maWx0ZXIocj0+clsxXSkubWFwKHI9PnJbMF0pOltdKSksdGhpcy5lbWJlZGRpbmdEYXRhJD10aGlzLnN0b3JlLnBpcGUodnQoQkYpKSx0aGlzLm51bUFjdGl2ZVJ1bnMkPXRoaXMuYWN0aXZlUnVucyQucGlwZShMKGk9PmkubGVuZ3RoKSksdGhpcy5hY3RpdmVNZXRyaWNzJD1MdChbdGhpcy5zdG9yZS5zZWxlY3QoUmYpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5zdG9yZS5zZWxlY3QoSWwpXSkucGlwZShMKChbaSxyLG9dKT0+e2xldCBzPVtdO2ZvcihsZXQgYSBvZiByKWlbYV0mJihzPXMuY29uY2F0KGlbYV0uZmlsdGVyKGw9PlZiKGwpKSkpO3JldHVybiBzPVsuLi5uZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhvKSwuLi5zXSldLHN9KSksdGhpcy52aXNpYmxlQW5ub3RhdGlvbnMkPUx0KFt0aGlzLnN0b3JlLnNlbGVjdChQZiksdGhpcy5zdG9yZS5zZWxlY3QoWGIpLHRoaXMuc3RvcmUuc2VsZWN0KFpiKV0pLnBpcGUoTCgoW2kscixvXSk9PnFGKGkscixvKSkpLHRoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQ9THQoW3RoaXMudmlzaWJsZUFubm90YXRpb25zJCx0aGlzLnN0b3JlLnNlbGVjdChIRiksdGhpcy5zdG9yZS5zZWxlY3QoSWwpLHRoaXMuYWN0aXZlUnVucyQsdGhpcy5hY3RpdmVNZXRyaWNzJCx0aGlzLnN0b3JlLnNlbGVjdChRYildKS5waXBlKEwoKFtpLHIsbyxzLGEsbF0pPT5mdW5jdGlvbihuLHQsZSxpLHIsbyl7bGV0IHM9e30sYT1uZXcgU2V0KHQpLGw9bmV3IFNldChyLm1hcCh1PT5Tcyh1KSkpLGM9bmV3IFJlZ0V4cChvLCJpIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2godT0+e2lmKCFjLnRlc3QodVswXSkpcmV0dXJuO2xldCBkPXVbMV07ZD1kLmZpbHRlcihwPT5hLmhhcyhwLnJ1bikmJmwuaGFzKHAubWV0cmljKSksZnVuY3Rpb24obix0LGUpe3JldHVybiBuLmV2ZXJ5KGk9PntpZihpLmtpbmQ9PT1tdS5PUEVSQVRPUilyZXR1cm4hMDtsZXQgcj10W2kubWV0cmljXTtyZXR1cm4gdm9pZCAwPT09cnx8ZS5zb21lKG89Pm8ubWV0cmljPT09U3MoaS5tZXRyaWMpJiYobnVsbD09PW8ublBNSVZhbHVlP3IuaW5jbHVkZU5hTjpvLm5QTUlWYWx1ZTw9ci5tYXgmJm8ublBNSVZhbHVlPj1yLm1pbikpfSl9KGUsaSxkKSYmMCE9PWQubGVuZ3RoJiYoc1t1WzBdXT1kKX0pLHN9KGkscyxyLG8sYSxsKSkpLnBpcGUoVHMoKSksdGhpcy5udW1Bbm5vdGF0aW9ucyQ9dGhpcy5maWx0ZXJlZEFubm90YXRpb25zJC5waXBlKEwoaT0+T2JqZWN0LmtleXMoaSkubGVuZ3RoKSksdGhpcy5zb3J0ZWRBbm5vdGF0aW9ucyQ9THQoW3RoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQsdGhpcy5zdG9yZS5waXBlKHZ0KEtiKSksdGhpcy5lbWJlZGRpbmdEYXRhJF0pLnBpcGUoTCgoW2kscixvXSk9PmZ1bmN0aW9uKG4sdCxlKXtsZXQgaT1PYmplY3Qua2V5cyhuKSxyPXQub3JkZXI9PT0kci5ESVNTSU1JTEFSfHx0Lm9yZGVyPT09JHIuU0lNSUxBUjtpZigiIj09PXQubWV0cmljfHwodm9pZCAwPT09ZXx8dm9pZCAwPT09ZS5wb2ludHNbdC5tZXRyaWNdKSYmcilyZXR1cm4gaTtsZXQgbz1yP2Z1bmN0aW9uKG4sdCxlKXtsZXQgaT17fSxyPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtlLm9yZGVyPT09JHIuU0lNSUxBUiYmKHI9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG89TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtmb3IobGV0IHMgb2YgbilpW3NdPXM9PT1lLm1ldHJpYz9yOnZvaWQgMD09PXQucG9pbnRzW3NdP286dC5wb2ludHNbc10udmVjdG9yP1ZldCh0LnBvaW50c1tlLm1ldHJpY10udmVjdG9yLHQucG9pbnRzW3NdLnZlY3RvcixvKTpvO3JldHVybiBpfShpLGUsdCk6ZnVuY3Rpb24obix0LGUpe2xldCBpPVNzKGUubWV0cmljKSxyPXt9O2lmKGUub3JkZXI9PT0kci5ERVNDRU5ESU5HKWZvcihsZXQgbyBvZiBuKXJbb109TWF0aC5tYXgoLi4udFtvXS5maWx0ZXIocz0+cy5tZXRyaWM9PT1pKS5tYXAocz0+bnVsbD09PXMublBNSVZhbHVlPy0xLzA6cy5uUE1JVmFsdWUpKTtlbHNlIGZvcihsZXQgbyBvZiBuKXJbb109TWF0aC5taW4oLi4udFtvXS5maWx0ZXIocz0+cy5tZXRyaWM9PT1pKS5tYXAocz0+bnVsbD09PXMublBNSVZhbHVlPzEvMDpzLm5QTUlWYWx1ZSkpO3JldHVybiByfShpLG4sdCk7cmV0dXJuIGZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gbi5zb3J0KGU/KGkscik9PnRbaV0tdFtyXTooaSxyKT0+dFtyXS10W2ldKX0oaSxvLHQub3JkZXI9PT0kci5BU0NFTkROR3x8dC5vcmRlcj09PSRyLlNJTUlMQVIpfShpLHIsbykpKSx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUucGlwZSh2dCh2YykpLHRoaXMubWF4Q291bnQkPXRoaXMuZmlsdGVyZWRBbm5vdGF0aW9ucyQucGlwZShMKGk9PntsZXQgcj0wO3JldHVybiBPYmplY3QudmFsdWVzKGkpLmZvckVhY2gobz0+e28uZm9yRWFjaChzPT57cy5jb3VudFZhbHVlJiYocj1NYXRoLm1heChyLHMuY291bnRWYWx1ZSkpfSl9KSxyfSkpfXJvd0NsaWNrZWQoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh3Rih7YW5ub3RhdGlvbnM6ZX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktYW5ub3RhdGlvbnMtbGlzdCJdXSxkZWNsczoxMCx2YXJzOjI3LGNvbnN0czpbWzMsImFubm90YXRpb25zIiwiZW1iZWRkaW5nRGF0YSIsImFubm90YXRpb25zRXhwYW5kZWQiLCJudW1Bbm5vdGF0aW9ucyIsImFjdGl2ZU1ldHJpY3MiLCJudW1BY3RpdmVSdW5zIiwic29ydGVkQW5ub3RhdGlvbnMiLCJzZWxlY3RlZEFubm90YXRpb25zIiwibWF4Q291bnQiLCJvblJvd0NsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJhbm5vdGF0aW9ucy1saXN0LWNvbXBvbmVudCIsMCksUCgib25Sb3dDbGljayIsZnVuY3Rpb24obyl7cmV0dXJuIGkucm93Q2xpY2tlZChvKX0pLEIoMSwiYXN5bmMiKSxCKDIsImFzeW5jIiksQigzLCJhc3luYyIpLEIoNCwiYXN5bmMiKSxCKDUsImFzeW5jIiksQig2LCJhc3luYyIpLEIoNywiYXN5bmMiKSxCKDgsImFzeW5jIiksQig5LCJhc3luYyIpLHYoKSksMiZlJiZ5KCJhbm5vdGF0aW9ucyIsVSgxLDksaS5maWx0ZXJlZEFubm90YXRpb25zJCkpKCJlbWJlZGRpbmdEYXRhIixVKDIsMTEsaS5lbWJlZGRpbmdEYXRhJCkpKCJhbm5vdGF0aW9uc0V4cGFuZGVkIixVKDMsMTMsaS5hbm5vdGF0aW9uc0V4cGFuZGVkJCkpKCJudW1Bbm5vdGF0aW9ucyIsVSg0LDE1LGkubnVtQW5ub3RhdGlvbnMkKSkoImFjdGl2ZU1ldHJpY3MiLFUoNSwxNyxpLmFjdGl2ZU1ldHJpY3MkKSkoIm51bUFjdGl2ZVJ1bnMiLFUoNiwxOSxpLm51bUFjdGl2ZVJ1bnMkKSkoInNvcnRlZEFubm90YXRpb25zIixVKDcsMjEsaS5zb3J0ZWRBbm5vdGF0aW9ucyQpKSgic2VsZWN0ZWRBbm5vdGF0aW9ucyIsVSg4LDIzLGkuc2VsZWN0ZWRBbm5vdGF0aW9ucyQpKSgibWF4Q291bnQiLFUoOSwyNSxpLm1heENvdW50JCkpfSxkZXBlbmRlbmNpZXM6W1ltZSxHZV0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCkseHR0PVsiY2hhcnQiXSxLbWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MCx0aGlzLmNoYXJ0V2lkdGg9MCx0aGlzLmhlaWdodD0zMDAsdGhpcy5tYXJnaW49e3RvcDoyMCxyaWdodDo0MCxib3R0b206MjAsbGVmdDo0MH0sdGhpcy5jaGFydEhlaWdodD10aGlzLmhlaWdodC10aGlzLm1hcmdpbi50b3AtdGhpcy5tYXJnaW4uYm90dG9tfW9uUmVzaXplKGUpe3RoaXMucmVkcmF3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdmc9Ym8odGhpcy5zdmdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFpbkNvbnRhaW5lcj10aGlzLnN2Zy5hcHBlbmQoImciKS5hdHRyKCJ0cmFuc2Zvcm0iLGB0cmFuc2xhdGUoJHt0aGlzLm1hcmdpbi5sZWZ0fSwgJHt0aGlzLm1hcmdpbi50b3B9KWApLHRoaXMuY29vcmRpbmF0ZXNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5sYWJlbHNHcm91cD10aGlzLm1haW5Db250YWluZXIuYXBwZW5kKCJnIiksdGhpcy5heGlzR3JvdXA9dGhpcy5tYWluQ29udGFpbmVyLmFwcGVuZCgiZyIpLHRoaXMueFNjYWxlPVN5KCkucGFkZGluZyguMSksdGhpcy55U2NhbGU9UW8oKS5yYW5nZShbdGhpcy5jaGFydEhlaWdodCwwXSksdGhpcy55QXhpcz16dyh0aGlzLnlTY2FsZSksdGhpcy5yZWRyYXcoKX1uZ09uQ2hhbmdlcyhlKXt0aGlzLnN2ZyYmdGhpcy5yZWRyYXcoKX1yZWRyYXcoKXt0aGlzLnVwZGF0ZURpbWVuc2lvbnMoKSx0aGlzLnVwZGF0ZUF4ZXMoKSx0aGlzLmRyYXcoKX11cGRhdGVEaW1lbnNpb25zKCl7dGhpcy53aWR0aD10aGlzLnN2Z0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aHx8MTAsdGhpcy5jaGFydFdpZHRoPXRoaXMud2lkdGgtdGhpcy5tYXJnaW4ubGVmdC10aGlzLm1hcmdpbi5yaWdodH11cGRhdGVBeGVzKCl7dGhpcy54U2NhbGUucmFuZ2VSb3VuZChbMCx0aGlzLmNoYXJ0V2lkdGhdKS5kb21haW4odGhpcy5hY3RpdmVNZXRyaWNzKSx0aGlzLnlTY2FsZS5kb21haW4oW3RoaXMuY29vcmRpbmF0ZURhdGEuZXh0cmVtZXMubWluLHRoaXMuY29vcmRpbmF0ZURhdGEuZXh0cmVtZXMubWF4XSl9ZHJhdygpe3RoaXMuZHJhd0F4ZXMoKSx0aGlzLmRyYXdBeGlzTGFiZWxzKCksdGhpcy5kcmF3Q29vcmRpbmF0ZXMoKSx0aGlzLmRyYXdMYWJlbHMoKX1kcmF3QXhlcygpe2xldCBlPXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMteSIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTtlLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJheGlzLXkiKS5tZXJnZShlKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHIpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZShyKX0sIDApYH0uYmluZCh0aGlzKSkuY2FsbCh0aGlzLnlBeGlzKSxlLmV4aXQoKS5yZW1vdmUoKX1kcmF3QXhpc0xhYmVscygpe2xldCBlPXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMtYmctdGV4dCIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTtlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJheGlzLWJnLXRleHQiKS5hdHRyKCJmb250LXNpemUiLCIxM3B4IikuYXR0cigic3Ryb2tlLXdpZHRoIiwyKS5hdHRyKCJzdHJva2UtbGluZWpvaW4iLCJyb3VuZCIpLmF0dHIoInN0cm9rZSIsIndoaXRlIikubWVyZ2UoZSkudGV4dChzPT5zKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHMpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZShzKS01fSwgJHt0aGlzLnlTY2FsZSh0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1pbil9KSByb3RhdGUoLTkwKWB9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpO2xldCByPXRoaXMuYXhpc0dyb3VwLnNlbGVjdEFsbCgiLmF4aXMtdGV4dCIpLmRhdGEodGhpcy5hY3RpdmVNZXRyaWNzKTtyLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZm9udC1zaXplIiwiMTNweCIpLmF0dHIoImNsYXNzIiwiYXhpcy10ZXh0IikubWVyZ2UocikudGV4dChzPT5zKS5hdHRyKCJ0cmFuc2Zvcm0iLGZ1bmN0aW9uKHMpe3JldHVybmB0cmFuc2xhdGUoJHt0aGlzLnhTY2FsZShzKS01fSwgJHt0aGlzLnlTY2FsZSh0aGlzLmNvb3JkaW5hdGVEYXRhLmV4dHJlbWVzLm1pbil9KSByb3RhdGUoLTkwKWB9LmJpbmQodGhpcykpLHIuZXhpdCgpLnJlbW92ZSgpfWRyYXdDb29yZGluYXRlcygpe2xldCBlPXRoaXMuY29vcmRpbmF0ZXNHcm91cC5zZWxlY3RBbGwoIi5jb29yZCIpLmRhdGEodGhpcy5jb29yZGluYXRlRGF0YS5jb29yZGluYXRlcyk7ZS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiY29vcmQiKS5hdHRyKCJmaWxsIiwibm9uZSIpLm1lcmdlKGUpLmF0dHIoImQiLHRoaXMucGF0aC5iaW5kKHRoaXMpKS5hdHRyKCJzdHJva2UiLGZ1bmN0aW9uKHMpe3JldHVybiB0aGlzLmNvbG9yU2NhbGUocy5ydW5JZCl9LmJpbmQodGhpcykpLGUuZXhpdCgpLnJlbW92ZSgpO2xldCByPXRoaXMuY29vcmRpbmF0ZXNHcm91cC5zZWxlY3RBbGwoIi5oaWRkZW5Db29yZCIpLmRhdGEodGhpcy5jb29yZGluYXRlRGF0YS5jb29yZGluYXRlcyk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiaGlkZGVuQ29vcmQiKS5hdHRyKCJzdHJva2Utd2lkdGgiLCIxMHB4IikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJyZ2JhKDAsIDAsIDAsIDAuMCkiKS5vbigibW91c2VvdmVyIix0aGlzLmhhbmRsZUNvb3JkaW5hdGVNb3VzZU92ZXIuYmluZCh0aGlzKSkub24oIm1vdXNlb3V0Iix0aGlzLmhhbmRsZUNvb3JkaW5hdGVNb3VzZU91dC5iaW5kKHRoaXMpKS5tZXJnZShyKS5hdHRyKCJkIix0aGlzLnBhdGguYmluZCh0aGlzKSksci5leGl0KCkucmVtb3ZlKCl9cGF0aChlKXtyZXR1cm4gZS52YWx1ZXMuc29ydCgocixvKT0+dGhpcy5hY3RpdmVNZXRyaWNzLmluZGV4T2Yoci5tZXRyaWMpLXRoaXMuYWN0aXZlTWV0cmljcy5pbmRleE9mKG8ubWV0cmljKSkseFMoKShlLnZhbHVlcy5tYXAoZnVuY3Rpb24ocil7bGV0IG89dGhpcy55U2NhbGUoci5uUE1JVmFsdWUpO3JldHVyblt0aGlzLnhTY2FsZShyLm1ldHJpYyksb119LmJpbmQodGhpcykpKX1oYW5kbGVDb29yZGluYXRlTW91c2VPdmVyKGUsaSl7dGhpcy5sYWJlbHNHcm91cC5zZWxlY3RBbGwoIi5jb29yZGluYXRlLWxhYmVsIikuZmlsdGVyKGZ1bmN0aW9uKHIpe3JldHVybiByLmFubm90YXRpb24hPT1lLmFubm90YXRpb259KS5zdHlsZSgib3BhY2l0eSIsLjEpLHRoaXMuY29vcmRpbmF0ZXNHcm91cC5zZWxlY3RBbGwoIi5jb29yZCIpLmZpbHRlcihmdW5jdGlvbihyKXtyZXR1cm4gci5hbm5vdGF0aW9uIT09ZS5hbm5vdGF0aW9ufSkuc3R5bGUoIm9wYWNpdHkiLC4xKX1oYW5kbGVDb29yZGluYXRlTW91c2VPdXQoKXt0aGlzLmxhYmVsc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkaW5hdGUtbGFiZWwiKS5zdHlsZSgib3BhY2l0eSIsMSksdGhpcy5jb29yZGluYXRlc0dyb3VwLnNlbGVjdEFsbCgiLmNvb3JkIikuc3R5bGUoIm9wYWNpdHkiLDEpfWRyYXdMYWJlbHMoKXtsZXQgZT0zMC90aGlzLnhTY2FsZS5zdGVwKCksaT10aGlzLmNvb3JkaW5hdGVEYXRhLmNvb3JkaW5hdGVzLmxlbmd0aDwzMD90aGlzLmNvb3JkaW5hdGVEYXRhLmNvb3JkaW5hdGVzOltdLHI9dGhpcy5sYWJlbHNHcm91cC5zZWxlY3RBbGwoIi5jb29yZGluYXRlLWxhYmVsIikuZGF0YShpKTtyLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJjb29yZGluYXRlLWxhYmVsIikuYXR0cigiZm9udC1zaXplIiwiMTBweCIpLm1lcmdlKHIpLnRleHQoZnVuY3Rpb24ocyl7cmV0dXJuIHMuYW5ub3RhdGlvbn0pLmF0dHIoIngiLHRoaXMueFNjYWxlKHRoaXMuYWN0aXZlTWV0cmljc1swXSkrMzApLmF0dHIoInkiLGZ1bmN0aW9uKHMpe2xldCBhPXRoaXMueVNjYWxlKHMudmFsdWVzWzBdLm5QTUlWYWx1ZT9zLnZhbHVlc1swXS5uUE1JVmFsdWU6MCksbD10aGlzLnlTY2FsZShzLnZhbHVlc1sxXS5uUE1JVmFsdWU/cy52YWx1ZXNbMV0ublBNSVZhbHVlOjApO3JldHVybigxLWUpKmErZSpsfS5iaW5kKHRoaXMpKSxyLmV4aXQoKS5yZW1vdmUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGFyYWxsZWwtY29vcmRpbmF0ZXMtY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmb3QoeHR0LDcsUmUpLDImZSl7bGV0IHI7TmUocj1MZSgpKSYmKGkuc3ZnRWxlbWVudD1yLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihlLGkpezEmZSYmUCgicmVzaXplIixmdW5jdGlvbihvKXtyZXR1cm4gaS5vblJlc2l6ZShvKX0sMCxXeCl9LGlucHV0czp7YWN0aXZlTWV0cmljczoiYWN0aXZlTWV0cmljcyIsY29vcmRpbmF0ZURhdGE6ImNvb3JkaW5hdGVEYXRhIixzaWRlYmFyV2lkdGg6InNpZGViYXJXaWR0aCIsY29sb3JTY2FsZToiY29sb3JTY2FsZSJ9LGZlYXR1cmVzOltGdF0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGMtY2hhcnQiXSxbImNoYXJ0IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoSW4oKSxPKDAsInN2ZyIsMCwxKSl9LHN0eWxlczpbIi5wYy1jaGFydFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjMwMHB4O3dpZHRoOjEwMCV9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxabWU9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5hY3RpdmVSdW5zJD10aGlzLnN0b3JlLnBpcGUodnQob28pKS5waXBlKEwoaT0+aT9BcnJheS5mcm9tKGkuZW50cmllcygpKS5maWx0ZXIocj0+clsxXSkubWFwKHI9PnJbMF0pOltdKSksdGhpcy5hY3RpdmVNZXRyaWNzJD1MdCh0aGlzLnN0b3JlLnNlbGVjdChSZiksdGhpcy5hY3RpdmVSdW5zJCx0aGlzLnN0b3JlLnNlbGVjdChJbCkpLnBpcGUoTCgoW2kscixvXSk9PntsZXQgcz1bXTtmb3IobGV0IGEgb2YgcilpW2FdJiYocz1zLmNvbmNhdChpW2FdLmZpbHRlcihsPT5WYihsKSkpKTtyZXR1cm4gcz1bLi4ubmV3IFNldChbLi4uT2JqZWN0LmtleXMobyksLi4uc10pXSxzLm1hcChhPT5TcyhhKSl9KSksdGhpcy5jb29yZGluYXRlRGF0YSQ9THQoW3RoaXMuc3RvcmUuc2VsZWN0KFBmKSx0aGlzLnN0b3JlLnNlbGVjdCh2YyksdGhpcy5hY3RpdmVSdW5zJCx0aGlzLmFjdGl2ZU1ldHJpY3MkXSkucGlwZShMKChbaSxyLG8sc10pPT5mdW5jdGlvbihuLHQsZSxpKXtsZXQgcj1bXSxvPXttYXg6LTEsbWluOjF9LHM9bmV3IFNldChlKSxhPW5ldyBTZXQoaSk7cmV0dXJuIDA9PT1zLnNpemV8fDA9PT1hLnNpemV8fDA9PT1PYmplY3Qua2V5cyhuKS5sZW5ndGg/e2Nvb3JkaW5hdGVzOltdLGV4dHJlbWVzOnttaW46LTEsbWF4OjF9fToodC5mb3JFYWNoKGw9PntsZXQgdT17fTtuW2xdLmZvckVhY2goZD0+eyFzLmhhcyhkLnJ1bil8fCFhLmhhcyhkLm1ldHJpYyl8fCh1W2QucnVuXT91W2QucnVuXS5wdXNoKGQpOnVbZC5ydW5dPVtkXSxudWxsIT09ZC5uUE1JVmFsdWU/KG8ubWF4PU1hdGgubWF4KG8ubWF4LGQublBNSVZhbHVlKSxvLm1pbj1NYXRoLm1pbihvLm1pbixkLm5QTUlWYWx1ZSkpOihvLm1heD1NYXRoLm1heChvLm1heCwwKSxvLm1pbj1NYXRoLm1pbihvLm1pbiwwKSkpfSk7Zm9yKGxldCBkIG9mIE9iamVjdC5rZXlzKHUpKXIucHVzaCh7YW5ub3RhdGlvbjpsLHJ1bklkOmQsdmFsdWVzOnVbZF19KX0pLG8ubWF4PG8ubWluJiYoby5tYXg9MSxvLm1pbj0tMSkse2Nvb3JkaW5hdGVzOnIsZXh0cmVtZXM6b30pfShpLHIsbyxzKSkpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnNlbGVjdChPZiksdGhpcy5ydW5Db2xvclNjYWxlJD10aGlzLnN0b3JlLnNlbGVjdChuYykucGlwZShMKGk9PnI9PntpZighaS5oYXNPd25Qcm9wZXJ0eShyKSl0aHJvdyBuZXcgRXJyb3IoYFtDb2xvciBzY2FsZV0gdW5rbm93biBydW5JZDogJHtyfS5gKTtyZXR1cm4gaVtyXX0pKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktcGFyYWxsZWwtY29vcmRpbmF0ZXMiXV0sZGVjbHM6NSx2YXJzOjEyLGNvbnN0czpbWzMsImFjdGl2ZU1ldHJpY3MiLCJjb29yZGluYXRlRGF0YSIsInNpZGViYXJXaWR0aCIsImNvbG9yU2NhbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInBhcmFsbGVsLWNvb3JkaW5hdGVzLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksQig0LCJhc3luYyIpKSwyJmUmJnkoImFjdGl2ZU1ldHJpY3MiLFUoMSw0LGkuYWN0aXZlTWV0cmljcyQpKSgiY29vcmRpbmF0ZURhdGEiLFUoMiw2LGkuY29vcmRpbmF0ZURhdGEkKSkoInNpZGViYXJXaWR0aCIsVSgzLDgsaS5zaWRlYmFyV2lkdGgkKSkoImNvbG9yU2NhbGUiLFUoNCwxMCxpLnJ1bkNvbG9yU2NhbGUkKSl9LGRlcGVuZGVuY2llczpbS21lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiB3dHQobix0KXsxJm4mJk8oMCwibWF0LWljb24iLDkpfWZ1bmN0aW9uIFN0dChuLHQpezEmbiYmTygwLCJtYXQtaWNvbiIsMTApfWZ1bmN0aW9uIEV0dChuLHQpezEmbiYmTygwLCJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIil9dmFyIEptZT0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKCl7dGhpcy5vbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucz1uZXcgRyx0aGlzLm9uVG9nZ2xlRXhwYW5kZWQ9bmV3IEd9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInNlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudCJdXSxpbnB1dHM6e3BjRXhwYW5kZWQ6InBjRXhwYW5kZWQiLHNlbGVjdGVkQW5ub3RhdGlvbnM6InNlbGVjdGVkQW5ub3RhdGlvbnMifSxvdXRwdXRzOntvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9uczoib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLG9uVG9nZ2xlRXhwYW5kZWQ6Im9uVG9nZ2xlRXhwYW5kZWQifSxkZWNsczoxMSx2YXJzOjQsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQsZTtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IGNsZWFycyB0aGUgYW5ub3RhdGlvbiBzZWxlY3Rpb24u4pCfMmI1MjI4OWYyYzRiN2Y1YjE4MmVkMjNjOTE1NDcyMmVjZDQ2YTJkNOKQnzI0OTQ2NjA1MjAzNDEzMDg4MzA6Q2xlYXIgQW5ub3RhdGlvbiBTZWxlY3Rpb25gLGU9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzIG9yIGhpZGVzIHNlbGVjdGVkIGFubm90YXRpb25zLuKQnzhmNGFkMzA1YzE5ZTM2NTVmMzE4OWUzZTI2NGU4M2ZiNzZmN2JiOTXikJ81NjcwNzk3Nzg0MDcwOTUyMDk1OkV4cGFuZC9IaWRlIFNlbGVjdGVkIEFubm90YXRpb25zYCxbWzEsInBjLWNvbnRhaW5lciJdLFsxLCJwYy10b29sYmFyIl0sWzEsInBjLXRpdGxlIl0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIix0LCJ0aXRsZSIsIkRlc2VsZWN0cyBhbGwgc2VsZWN0ZWQgYW5ub3RhdGlvbnMuIiwxLCJjbGVhci1idXR0b24iLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInN2Z0ljb24iLCJjbGVhcl8yNHB4Il0sWyJtYXQtaWNvbi1idXR0b24iLCIiLCJhcmlhLWxhYmVsIixlLDEsImV4cGFuZC1idXR0b24iLDMsImNsaWNrIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsImNsYXNzIiwiZXhwYW5kLWxlc3MtaWNvbiIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub3RFeHBhbmRlZCIsIiJdLFs0LCJuZ0lmIl0sWyJzdmdJY29uIiwiZXhwYW5kX2xlc3NfMjRweCIsMSwiZXhwYW5kLWxlc3MtaWNvbiJdLFsic3ZnSWNvbiIsImV4cGFuZF9tb3JlXzI0cHgiLDEsImV4cGFuZC1pY29uIl1dfSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpe2lmKDEmZSYmKF8oMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImgzIiwyKSxBKDMsIlNlbGVjdGVkIEFubm90YXRpb25zIiksdigpLF8oNCwiYnV0dG9uIiwzKSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucy5lbWl0KCl9KSxPKDUsIm1hdC1pY29uIiw0KSx2KCksXyg2LCJidXR0b24iLDUpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG9nZ2xlRXhwYW5kZWQuZW1pdCgpfSksRSg3LHd0dCwxLDAsIm1hdC1pY29uIiw2KSxFKDgsU3R0LDEsMCwibmctdGVtcGxhdGUiLG51bGwsNyxxdCksdigpKCksRSgxMCxFdHQsMSwwLCJucG1pLXBhcmFsbGVsLWNvb3JkaW5hdGVzIiw4KSx2KCkpLDImZSl7bGV0IHI9JGUoOSk7Qyg0KSx5KCJkaXNhYmxlZCIsMD09PWkuc2VsZWN0ZWRBbm5vdGF0aW9ucy5sZW5ndGgpLEMoMykseSgibmdJZiIsaS5wY0V4cGFuZGVkKSgibmdJZkVsc2UiLHIpLEMoMykseSgibmdJZiIsaS5wY0V4cGFuZGVkKX19LGRlcGVuZGVuY2llczpbQmUsR3QsX24sWm1lXSxzdHlsZXM6WyIucGMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmVifS5wYy10b29sYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjQycHg7cGFkZGluZzowIDE2cHh9LnBjLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDA7ZGlzcGxheTppbmxpbmU7ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxYRj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RvcmU9ZSx0aGlzLnBjRXhwYW5kZWQkPXRoaXMuc3RvcmUucGlwZSh2dChvbWUpKSx0aGlzLnNlbGVjdGVkQW5ub3RhdGlvbnMkPXRoaXMuc3RvcmUuc2VsZWN0KHZjKX1jbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFNGKCkpfXRvZ2dsZUV4cGFuZGVkKCl7dGhpcy5zdG9yZS5kaXNwYXRjaChQRigpKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktc2VsZWN0ZWQtYW5ub3RhdGlvbnMiXV0sZGVjbHM6Myx2YXJzOjYsY29uc3RzOltbMywicGNFeHBhbmRlZCIsInNlbGVjdGVkQW5ub3RhdGlvbnMiLCJvbkNsZWFyU2VsZWN0ZWRBbm5vdGF0aW9ucyIsIm9uVG9nZ2xlRXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsInNlbGVjdGVkLWFubm90YXRpb25zLWNvbXBvbmVudCIsMCksUCgib25DbGVhclNlbGVjdGVkQW5ub3RhdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGkuY2xlYXJTZWxlY3RlZEFubm90YXRpb25zKCl9KSgib25Ub2dnbGVFeHBhbmRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS50b2dnbGVFeHBhbmRlZCgpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSx2KCkpLDImZSYmeSgicGNFeHBhbmRlZCIsVSgxLDIsaS5wY0V4cGFuZGVkJCkpKCJzZWxlY3RlZEFubm90YXRpb25zIixVKDIsNCxpLnNlbGVjdGVkQW5ub3RhdGlvbnMkKSl9LGRlcGVuZGVuY2llczpbSm1lLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBEdHQobix0KXsxJm4mJihfKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxPKDIsIm5wbWktdmlvbGluLWZpbHRlcnMiLDgpLF8oMywiZGl2Iiw5KSxPKDQsInJ1bnMtc2VsZWN0b3IiKSx2KCkoKSgpKSwyJm4mJlB0KCJ3aWR0aCIsUygpLnNpZGViYXJXaWR0aCwicHgiKX1mdW5jdGlvbiBBdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDEwKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5yZXNpemVHcmFiYmVkLmVtaXQoKSl9KSx2KCl9fWZ1bmN0aW9uIEl0dChuLHQpezEmbiYmKF8oMCwiZGl2IiwxMSksTygxLCJucG1pLWFubm90YXRpb25zLWxpc3QiLDEyKSgyLCJucG1pLXNlbGVjdGVkLWFubm90YXRpb25zIiksdigpKX1mdW5jdGlvbiBQdHQobix0KXsxJm4mJihfKDAsImRpdiIsMTMpLEEoMSwiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBydW4uIiksdigpKX1mdW5jdGlvbiBSdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDE0KSgxLCJidXR0b24iLDE1KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCkpfSksTygyLCJtYXQtaWNvbiIsMTYpLHYoKSgpfX12YXIgZWdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRvZ2dsZVNpZGViYXJFeHBhbmRlZD1uZXcgRyx0aGlzLnJlc2l6ZVRyaWdnZXJlZD1uZXcgRyx0aGlzLnJlc2l6ZUdyYWJiZWQ9bmV3IEcsdGhpcy5yZXNpemVSZWxlYXNlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibWFpbi1jb21wb25lbnQiXV0saW5wdXRzOntydW5BY3RpdmU6InJ1bkFjdGl2ZSIsc2lkZWJhckV4cGFuZGVkOiJzaWRlYmFyRXhwYW5kZWQiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIn0sb3V0cHV0czp7dG9nZ2xlU2lkZWJhckV4cGFuZGVkOiJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLHJlc2l6ZVRyaWdnZXJlZDoicmVzaXplVHJpZ2dlcmVkIixyZXNpemVHcmFiYmVkOiJyZXNpemVHcmFiYmVkIixyZXNpemVSZWxlYXNlZDoicmVzaXplUmVsZWFzZWQifSxkZWNsczo4LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgdGhlIHNpZGViYXIu4pCfZjYzYjU3OTMyZDE3OWNjYTYyYWM5ZmNhZTYzZGQ3ZjVlNmZhMzg5ZuKQnzQ0ODUwMDkzNDc0NDQ3MDQ4Nzg6VG9nZ2xlIFNpZGViYXJgLFtbMSwiY29udGVudCIsMywibW91c2V1cCIsIm1vdXNlbW92ZSJdLFsiY2xhc3MiLCJzaWRlYmFyLWNvbnRhaW5lciIsMywid2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwiZ3JhYmJlciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFuYWx5c2lzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1J1biIsIiJdLFsiY2xhc3MiLCJzaWRlLXRvZ2dsZSIsNCwibmdJZiJdLFsxLCJzaWRlYmFyLWNvbnRhaW5lciJdLFsxLCJzaWRlYmFyLWNvbnRlbnRzIl0sWzEsInZpb2xpbi1maWx0ZXJzIl0sWzEsInJ1bi1zZWxlY3RvciJdLFsxLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iXSxbMSwiYW5hbHlzaXMtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLWxpc3QiXSxbMSwibm9SdW4iXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX3JpZ2h0XzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoTygwLCJucG1pLWRhdGEtc2VsZWN0aW9uIiksXygxLCJkaXYiLDApLFAoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzaXplUmVsZWFzZWQuZW1pdCgpfSkoIm1vdXNlbW92ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVzaXplVHJpZ2dlcmVkLmVtaXQobyl9KSxFKDIsRHR0LDUsMiwiZGl2IiwxKSxFKDMsQXR0LDEsMCwiZGl2IiwyKSxFKDQsSXR0LDMsMCwiZGl2IiwzKSxFKDUsUHR0LDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxxdCksdigpLEUoNyxSdHQsMywwLCJkaXYiLDUpKSwyJmUpe2xldCByPSRlKDYpO0MoMikseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsITA9PT1pLnJ1bkFjdGl2ZSkoIm5nSWZFbHNlIixyKSxDKDMpLHkoIm5nSWYiLCFpLnNpZGViYXJFeHBhbmRlZCl9fSxkZXBlbmRlbmNpZXM6W0JlLEd0LE9iLFdGLF9uLE9tZSxZRixYRl0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7ZmxleDoxIDF9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LnZpb2xpbi1maWx0ZXJzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5zaWRlLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7Ym90dG9tOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZWJlYmViO2JvcmRlci1yYWRpdXM6M3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uZ3JhYmJlcltfbmdjb250ZW50LSVDT01QJV17Y29udGVudDoiIjtjdXJzb3I6ZXctcmVzaXplO2hlaWdodDoxMDAlO3dpZHRoOjNweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLC4xMil9LmFubm90YXRpb25zLWxpc3RbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWluLWhlaWdodDowcHg7ZmxleDoxIDF9J10sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx0Z2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5BY3RpdmUkPXRoaXMuc3RvcmUucGlwZSh2dChvbykpLnBpcGUoTChpPT4hIWkmJlsuLi5pLnZhbHVlcygpXS5pbmNsdWRlcyghMCkpKSx0aGlzLnNpZGViYXJFeHBhbmRlZCQ9dGhpcy5zdG9yZS5waXBlKHZ0KHpGKSksdGhpcy5zaWRlYmFyV2lkdGgkPXRoaXMuc3RvcmUucGlwZSh2dChPZikpLHRoaXMucmVzaXppbmc9ITF9b25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKHFiKCkpfW9uUmVzaXplVHJpZ2dlcmVkKGUpe3RoaXMucmVzaXppbmcmJnRoaXMuc3RvcmUuZGlzcGF0Y2goTkYoe3NpZGViYXJXaWR0aDplLmNsaWVudFh9KSl9b25SZXNpemVHcmFiYmVkKCl7dGhpcy5yZXNpemluZz0hMH1vblJlc2l6ZVJlbGVhc2VkKCl7dGhpcy5yZXNpemluZz0hMX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbIm5wbWktbWFpbiJdXSxkZWNsczo0LHZhcnM6OSxjb25zdHM6W1szLCJydW5BY3RpdmUiLCJzaWRlYmFyRXhwYW5kZWQiLCJzaWRlYmFyV2lkdGgiLCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLCJyZXNpemVUcmlnZ2VyZWQiLCJyZXNpemVHcmFiYmVkIiwicmVzaXplUmVsZWFzZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsIm1haW4tY29tcG9uZW50IiwwKSxQKCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKX0pKCJyZXNpemVUcmlnZ2VyZWQiLGZ1bmN0aW9uKG8pe3JldHVybiBpLm9uUmVzaXplVHJpZ2dlcmVkKG8pfSkoInJlc2l6ZUdyYWJiZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemVHcmFiYmVkKCl9KSgicmVzaXplUmVsZWFzZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIGkub25SZXNpemVSZWxlYXNlZCgpfSksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSxCKDMsImFzeW5jIiksdigpKSwyJmUmJnkoInJ1bkFjdGl2ZSIsVSgxLDMsaS5ydW5BY3RpdmUkKSkoInNpZGViYXJFeHBhbmRlZCIsVSgyLDUsaS5zaWRlYmFyRXhwYW5kZWQkKSkoInNpZGViYXJXaWR0aCIsVSgzLDcsaS5zaWRlYmFyV2lkdGgkKSl9LGRlcGVuZGVuY2llczpbZWdlLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxuZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU2lkZWJhckV4cGFuZGVkPW5ldyBHfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJlbWJlZGRpbmctcHJvamVjdGlvbi1jb21wb25lbnQiXV0saW5wdXRzOntzaWRlYmFyRXhwYW5kZWQ6InNpZGViYXJFeHBhbmRlZCJ9LG91dHB1dHM6e3RvZ2dsZVNpZGViYXJFeHBhbmRlZDoidG9nZ2xlU2lkZWJhckV4cGFuZGVkIn0sZGVjbHM6Nyx2YXJzOjAsY29uc3RzOmZ1bmN0aW9uKCl7bGV0IHQ7cmV0dXJuIHQ9JGxvY2FsaXplYDpMYWJlbCBmb3IgYSBidXR0b24gdGhhdCBleHBhbmRzL2hpZGVzIHRoZSBzaWRlYmFyLuKQnzQ4YzI5OTAzY2U4ODFhYjYxMDg4ZjhkNDlkODI3MjAzNzE2YWFlZDTikJ80NjU4NjAyOTkxOTcwMjYwMjE1OkV4cGFuZC9IaWRlIFNpZGViYXJgLFtbMSwiZW1iZWRkaW5nLXByb2plY3Rpb24tdG9vbGJhciJdLFsxLCJlbWJlZGRpbmctcHJvamVjdGlvbi10aXRsZSJdLFsxLCJzaWRlLXRvZ2dsZSJdLFsibWF0LWljb24tYnV0dG9uIiwiIiwiYXJpYS1sYWJlbCIsdCwzLCJjbGljayJdLFsic3ZnSWNvbiIsImNoZXZyb25fbGVmdF8yNHB4Il0sWzEsInByb2plY3Rpb24iXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoXygwLCJkaXYiLDApKDEsImgzIiwxKSxBKDIsIkVtYmVkZGluZ3MgUHJvamVjdGVkIiksdigpLF8oMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLFAoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCl9KSxPKDUsIm1hdC1pY29uIiw0KSx2KCkoKSgpLE8oNiwiZGl2Iiw1KSl9LGRlcGVuZGVuY2llczpbR3QsX25dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJX0uZW1iZWRkaW5nLXByb2plY3Rpb24tdG9vbGJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlYmViZWI7ZGlzcGxheTpmbGV4O2hlaWdodDo0MnB4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MCAxMHB4fS5lbWJlZGRpbmctcHJvamVjdGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwfS5wcm9qZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OmF1dG99LnNpZGUtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjt3aWR0aDozMHB4fSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksaWdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuc2lkZWJhckV4cGFuZGVkJD10aGlzLnN0b3JlLnNlbGVjdChHRil9b25Ub2dnbGVTaWRlYmFyRXhwYW5kZWQoKXt0aGlzLnN0b3JlLmRpc3BhdGNoKFliKCkpfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1lbWJlZGRpbmctcHJvamVjdGlvbiJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1szLCJzaWRlYmFyRXhwYW5kZWQiLCJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImVtYmVkZGluZy1wcm9qZWN0aW9uLWNvbXBvbmVudCIsMCksUCgidG9nZ2xlU2lkZWJhckV4cGFuZGVkIixmdW5jdGlvbigpe3JldHVybiBpLm9uVG9nZ2xlU2lkZWJhckV4cGFuZGVkKCl9KSxCKDEsImFzeW5jIiksdigpKSwyJmUmJnkoInNpZGViYXJFeHBhbmRlZCIsVSgxLDEsaS5zaWRlYmFyRXhwYW5kZWQkKSl9LGRlcGVuZGVuY2llczpbbmdlLEdlXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKTtmdW5jdGlvbiBMdHQobix0KXsxJm4mJihfKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxPKDIsIm5wbWktZW1iZWRkaW5nLXByb2plY3Rpb24iLDgpKDMsImRpdiIsOSksXyg0LCJkaXYiLDEwKSxPKDUsInJ1bnMtc2VsZWN0b3IiKSx2KCkoKSgpKSwyJm4mJlB0KCJ3aWR0aCIsUygpLnNpZGViYXJXaWR0aCwicHgiKX1mdW5jdGlvbiBCdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDExKSxQKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIG9lKGUpLHNlKFMoKS5yZXNpemVHcmFiYmVkLmVtaXQoKSl9KSx2KCl9fWZ1bmN0aW9uIFZ0dChuLHQpezEmbiYmKF8oMCwiZGl2IiwxMiksTygxLCJucG1pLWFubm90YXRpb25zLWxpc3QiLDEzKSgyLCJucG1pLXNlbGVjdGVkLWFubm90YXRpb25zIiksdigpKX1mdW5jdGlvbiBIdHQobix0KXsxJm4mJihfKDAsImRpdiIsMTQpLEEoMSwiWW91IG5lZWQgdG8gc2VsZWN0IGF0IGxlYXN0IG9uZSBydW4uIiksdigpKX1mdW5jdGlvbiBVdHQobix0KXtpZigxJm4pe2xldCBlPVBlKCk7XygwLCJkaXYiLDE1KSgxLCJidXR0b24iLDE2KSxQKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gb2UoZSksc2UoUygpLnRvZ2dsZVNpZGViYXJFeHBhbmRlZC5lbWl0KCkpfSksTygyLCJtYXQtaWNvbiIsMTcpLHYoKSgpfX12YXIgcmdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoKXt0aGlzLnRvZ2dsZVNpZGViYXJFeHBhbmRlZD1uZXcgRyx0aGlzLnJlc2l6ZVRyaWdnZXJlZD1uZXcgRyx0aGlzLnJlc2l6ZUdyYWJiZWQ9bmV3IEcsdGhpcy5yZXNpemVSZWxlYXNlZD1uZXcgR319cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1siZW1iZWRkaW5ncy1jb21wb25lbnQiXV0saW5wdXRzOntydW5BY3RpdmU6InJ1bkFjdGl2ZSIsc2lkZWJhckV4cGFuZGVkOiJzaWRlYmFyRXhwYW5kZWQiLHNpZGViYXJXaWR0aDoic2lkZWJhcldpZHRoIn0sb3V0cHV0czp7dG9nZ2xlU2lkZWJhckV4cGFuZGVkOiJ0b2dnbGVTaWRlYmFyRXhwYW5kZWQiLHJlc2l6ZVRyaWdnZXJlZDoicmVzaXplVHJpZ2dlcmVkIixyZXNpemVHcmFiYmVkOiJyZXNpemVHcmFiYmVkIixyZXNpemVSZWxlYXNlZDoicmVzaXplUmVsZWFzZWQifSxkZWNsczo4LHZhcnM6NSxjb25zdHM6ZnVuY3Rpb24oKXtsZXQgdDtyZXR1cm4gdD0kbG9jYWxpemVgOkxhYmVsIGZvciBhIGJ1dHRvbiB0aGF0IHRvZ2dsZXMgdGhlIHNpZGViYXIu4pCfZjYzYjU3OTMyZDE3OWNjYTYyYWM5ZmNhZTYzZGQ3ZjVlNmZhMzg5ZuKQnzQ0ODUwMDkzNDc0NDQ3MDQ4Nzg6VG9nZ2xlIFNpZGViYXJgLFtbMSwiY29udGVudCIsMywibW91c2V1cCIsIm1vdXNlbW92ZSJdLFsiY2xhc3MiLCJzaWRlYmFyLWNvbnRhaW5lciIsMywid2lkdGgiLDQsIm5nSWYiXSxbImNsYXNzIiwiZ3JhYmJlciIsMywibW91c2Vkb3duIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFuYWx5c2lzLWNvbnRhaW5lciIsNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJub1J1biIsIiJdLFsiY2xhc3MiLCJzaWRlLXRvZ2dsZSIsNCwibmdJZiJdLFsxLCJzaWRlYmFyLWNvbnRhaW5lciJdLFsxLCJzaWRlYmFyLWNvbnRlbnRzIl0sWzEsImVtYmVkZGluZy1wcm9qZWN0aW9uIl0sWzEsInJ1bi1kaXZpZGVyIl0sWzEsInJ1bi1zZWxlY3RvciJdLFsxLCJncmFiYmVyIiwzLCJtb3VzZWRvd24iXSxbMSwiYW5hbHlzaXMtY29udGFpbmVyIl0sWzEsImFubm90YXRpb25zLWxpc3QiXSxbMSwibm9SdW4iXSxbMSwic2lkZS10b2dnbGUiXSxbIm1hdC1pY29uLWJ1dHRvbiIsIiIsImFyaWEtbGFiZWwiLHQsMywiY2xpY2siXSxbInN2Z0ljb24iLCJjaGV2cm9uX3JpZ2h0XzI0cHgiXV19LHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYoTygwLCJucG1pLWRhdGEtc2VsZWN0aW9uIiksXygxLCJkaXYiLDApLFAoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIGkucmVzaXplUmVsZWFzZWQuZW1pdCgpfSkoIm1vdXNlbW92ZSIsZnVuY3Rpb24obyl7cmV0dXJuIGkucmVzaXplVHJpZ2dlcmVkLmVtaXQobyl9KSxFKDIsTHR0LDYsMiwiZGl2IiwxKSxFKDMsQnR0LDEsMCwiZGl2IiwyKSxFKDQsVnR0LDMsMCwiZGl2IiwzKSxFKDUsSHR0LDIsMCwibmctdGVtcGxhdGUiLG51bGwsNCxxdCksdigpLEUoNyxVdHQsMywwLCJkaXYiLDUpKSwyJmUpe2xldCByPSRlKDYpO0MoMikseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsaS5zaWRlYmFyRXhwYW5kZWQpLEMoMSkseSgibmdJZiIsITA9PT1pLnJ1bkFjdGl2ZSkoIm5nSWZFbHNlIixyKSxDKDMpLHkoIm5nSWYiLCFpLnNpZGViYXJFeHBhbmRlZCl9fSxkZXBlbmRlbmNpZXM6W0JlLEd0LE9iLFdGLF9uLFlGLFhGLGlnZV0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleDoxO21pbi1oZWlnaHQ6MHB4O3dpZHRoOjEwMCV9LnNpZGViYXItY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59LnNpZGViYXItY29udGVudHNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCU7bWluLXdpZHRoOjE1MHB4fS5hbmFseXNpcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4OjEgMTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMCV9LnJ1bi1zZWxlY3Rvcltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmVtYmVkZGluZy1wcm9qZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjBweDt3aWR0aDoxMDAlfS5zaWRlLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlcjoxcHggc29saWQgI2ViZWJlYjtib3JkZXItcmFkaXVzOjNweDtib3R0b206MTBweDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjMwcHg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsZWZ0OjEwcHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzBweH0ucnVuLWRpdmlkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2NvbnRlbnQ6IiI7aGVpZ2h0OjFweDtvdmVyZmxvdzpoaWRkZW59LmdyYWJiZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuMTIpO2NvbnRlbnQ6IiI7Y3Vyc29yOmV3LXJlc2l6ZTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW47d2lkdGg6M3B4fS5hbm5vdGF0aW9ucy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjEgMTttaW4taGVpZ2h0OjBweDt3aWR0aDoxMDAlfSddLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksb2dlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMucnVuQWN0aXZlJD10aGlzLnN0b3JlLnBpcGUodnQob28pKS5waXBlKEwoaT0+ISFpJiZbLi4uaS52YWx1ZXMoKV0uaW5jbHVkZXMoITApKSksdGhpcy5zaWRlYmFyRXhwYW5kZWQkPXRoaXMuc3RvcmUucGlwZSh2dChHRikpLHRoaXMuc2lkZWJhcldpZHRoJD10aGlzLnN0b3JlLnBpcGUodnQobG1lKSksdGhpcy5yZXNpemluZz0hMX1vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goWWIoKSl9b25SZXNpemVUcmlnZ2VyZWQoZSl7dGhpcy5yZXNpemluZyYmdGhpcy5zdG9yZS5kaXNwYXRjaChMRih7c2lkZWJhcldpZHRoOmUuY2xpZW50WH0pKX1vblJlc2l6ZUdyYWJiZWQoKXt0aGlzLnJlc2l6aW5nPSEwfW9uUmVzaXplUmVsZWFzZWQoKXt0aGlzLnJlc2l6aW5nPSExfX1yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKShNKENlKSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1lbWJlZGRpbmdzIl1dLGRlY2xzOjQsdmFyczo5LGNvbnN0czpbWzMsInJ1bkFjdGl2ZSIsInNpZGViYXJFeHBhbmRlZCIsInNpZGViYXJXaWR0aCIsInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsInJlc2l6ZVRyaWdnZXJlZCIsInJlc2l6ZUdyYWJiZWQiLCJyZXNpemVSZWxlYXNlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmKF8oMCwiZW1iZWRkaW5ncy1jb21wb25lbnQiLDApLFAoInRvZ2dsZVNpZGViYXJFeHBhbmRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblRvZ2dsZVNpZGViYXJFeHBhbmRlZCgpfSkoInJlc2l6ZVRyaWdnZXJlZCIsZnVuY3Rpb24obyl7cmV0dXJuIGkub25SZXNpemVUcmlnZ2VyZWQobyl9KSgicmVzaXplR3JhYmJlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZUdyYWJiZWQoKX0pKCJyZXNpemVSZWxlYXNlZCIsZnVuY3Rpb24oKXtyZXR1cm4gaS5vblJlc2l6ZVJlbGVhc2VkKCl9KSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSx2KCkpLDImZSYmeSgicnVuQWN0aXZlIixVKDEsMyxpLnJ1bkFjdGl2ZSQpKSgic2lkZWJhckV4cGFuZGVkIixVKDIsNSxpLnNpZGViYXJFeHBhbmRlZCQpKSgic2lkZWJhcldpZHRoIixVKDMsNyxpLnNpZGViYXJXaWR0aCQpKX0sZGVwZW5kZW5jaWVzOltyZ2UsR2VdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpO2Z1bmN0aW9uIEd0dChuLHQpezEmbiYmTygwLCJucG1pLWluYWN0aXZlLXZpZXciKX1mdW5jdGlvbiBXdHQobix0KXsxJm4mJk8oMCwibnBtaS1tYWluIil9ZnVuY3Rpb24gcXR0KG4sdCl7MSZuJiZPKDAsIm5wbWktZW1iZWRkaW5ncyIpfWZ1bmN0aW9uIFl0dChuLHQpe2lmKDEmbiYmKEUoMCxXdHQsMSwwLCJucG1pLW1haW4iLDMpLEUoMSxxdHQsMSwwLCJucG1pLWVtYmVkZGluZ3MiLDMpKSwyJm4pe2xldCBlPVMoKTt5KCJuZ0lmIixlLmFjdGl2ZVZpZXc9PT1lLlZpZXdBY3RpdmUuREVGQVVMVCksQygxKSx5KCJuZ0lmIixlLmFjdGl2ZVZpZXc9PT1lLlZpZXdBY3RpdmUuRU1CRURESU5HUyl9fXZhciBzZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3Rvcigpe3RoaXMuVmlld0FjdGl2ZT1rcH19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sibnBtaS1jb21wb25lbnQiXV0saW5wdXRzOntydW5zOiJydW5zIixhY3RpdmVWaWV3OiJhY3RpdmVWaWV3In0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwibnBtaS1jb250YWluZXIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJkYXRhQXZhaWxhYmxlIiwiIl0sWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXtpZigxJmUmJihfKDAsImRpdiIsMCksRSgxLEd0dCwxLDAsIm5wbWktaW5hY3RpdmUtdmlldyIsMSksRSgyLFl0dCwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIscXQpLHYoKSksMiZlKXtsZXQgcj0kZSgzKTtDKDEpLHkoIm5nSWYiLDA9PT1pLnJ1bnMuc2l6ZSkoIm5nSWZFbHNlIixyKX19LGRlcGVuZGVuY2llczpbQmUsdW1lLHRnZSxvZ2VdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlfS5ucG1pLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxIDF9Il0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxhZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlKXt0aGlzLnN0b3JlPWUsdGhpcy5ydW5zJD10aGlzLnN0b3JlLnBpcGUodnQob28pKSx0aGlzLmFjdGl2ZVZpZXckPXRoaXMuc3RvcmUucGlwZSh2dChzbWUpKX1uZ09uSW5pdCgpe3RoaXMuc3RvcmUuZGlzcGF0Y2goYkYoKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKE0oQ2UpKX0sbi5cdTAyNzVjbXA9Uih7dHlwZTpuLHNlbGVjdG9yczpbWyJucG1pIl1dLGRlY2xzOjMsdmFyczo2LGNvbnN0czpbWzMsInJ1bnMiLCJhY3RpdmVWaWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7MSZlJiYoTygwLCJucG1pLWNvbXBvbmVudCIsMCksQigxLCJhc3luYyIpLEIoMiwiYXN5bmMiKSksMiZlJiZ5KCJydW5zIixVKDEsMixpLnJ1bnMkKSkoImFjdGl2ZVZpZXciLFUoMiw0LGkuYWN0aXZlVmlldyQpKX0sZGVwZW5kZW5jaWVzOltzZ2UsR2VdLGVuY2Fwc3VsYXRpb246Mn0pLG59KSgpLGxnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsTHMscG4sUG5dfSksbn0pKCksY2dlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixwbixIYV19KSxufSkoKSx1Z2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLHBuLFBuLE5tZSxjZ2VdfSksbn0pKCksZGdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixMcyxwbl19KSxufSkoKSxwZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lXX0pLG59KSgpLGhnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbcGdlXX0pLG59KSgpLFFGPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSx1Z2UsZGdlLGhnZSxaYyxsZ2VdfSksbn0pKCksZmdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixwbixQbl19KSxufSkoKSxtZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLHoyLHBuLCRiLFFrXX0pLG59KSgpLGdnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsJGJdfSksbn0pKCksX2dlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSwkYixtZ2UsZ2dlXX0pLG59KSgpLHZnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG4sSGEsSWJdfSksbn0pKCkseWdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxwbixQbl19KSxufSkoKSxLRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsdmdlLF9nZSx5Z2VdfSksbn0pKCksYmdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZV19KSxufSkoKSxaRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUscG4sUG4sYmdlXX0pLG59KSgpLHhnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsanIsTHMscG4sRmIsS0YsUG4sUUYsWkYsZmdlXX0pLG59KSgpLENnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7fSksbn0pKCksTWdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltNZSxqcixQbixwbl19KSxufSkoKSx3Z2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLHBuLFBuLE1nZV19KSxufSkoKSxTZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLGpyLExzLHBuLEZiLEtGLFBuLHdnZSxRRixaRl19KSxufSkoKSxFZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W01lLENnZSxTZ2UseGdlLHRtZSx3ci5mb3JGZWF0dXJlKCJucG1pIixkbWUpLHJvLmZvckZlYXR1cmUoW2NtZV0pLEJzLmZvclBsdWdpbigibnBtaSIsYWdlKV19KSxufSkoKSxKRj0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSx2Nj0oKCk9PntjbGFzcyBue2NvbnN0cnVjdG9yKGUpe3RoaXMuaHR0cD1lLHRoaXMuaHR0cFBhdGhQcmVmaXg9ImRhdGEvcGx1Z2luL3RleHRfdjIifWZldGNoUnVuVG9UYWcoKXtyZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmh0dHBQYXRoUHJlZml4KyIvdGFncyIpLnBpcGUoTChlPT57bGV0IGk9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZm9yRWFjaCgoW3Isb10pPT57aS5zZXQocixvKX0pLGl9KSl9ZmV0Y2hUZXh0RGF0YShlLGkpe2xldCByPW5ldyBVUkxTZWFyY2hQYXJhbXMoe3J1bjplLHRhZzppfSk7cmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5odHRwUGF0aFByZWZpeCtgL3RleHQ/JHtyLnRvU3RyaW5nKCl9YCkucGlwZShMKG89Pm8ubWFwKHM9Pih7b3JpZ2luYWxTaGFwZTpzLm9yaWdpbmFsX3NoYXBlLHN0ZXA6cy5zdGVwLHN0cmluZ0FycmF5OnMuc3RyaW5nX2FycmF5LHdhbGxUaW1lSW5NczoxZTMqcy53YWxsX3RpbWUsdHJ1bmNhdGVkOnMudHJ1bmNhdGVkfSkpKSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooa2EpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSxUZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbdjYse3Byb3ZpZGU6SkYsdXNlRXhpc3Rpbmc6djZ9XSxpbXBvcnRzOltLdV19KSxufSkoKSxEZ2U9YmUoIltUZXh0XSBUZXh0IFBsdWdpbiBMb2FkZWQiKSxBZ2U9YmUoIltUZXh0XSBSdW5zIFRvIFRhZyBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSxJZ2U9YmUoIltUZXh0XSBUYWcgR3JvdXAgVmlzaWJpbGl0eSBDaGFuZ2VkIix7X2FzOiJwcm9wcyIsX3A6dm9pZCAwfSksUGdlPWJlKCJbVGV4dF0gVGV4dCBEYXRhIExvYWRlZCBMb2FkZWQiLHtfYXM6InByb3BzIixfcDp2b2lkIDB9KSx5Nj1NcigidGV4dCIpLFJnZT0oSih5NixuPT5uLnJ1blRvVGFncyksSih5NixuPT57bGV0IHQ9bmV3IFNldCxlPW5ldyBTZXQ7Zm9yKGxldCBpIG9mIG4udmlzaWJsZVJ1blRhZ3MudmFsdWVzKCkpZm9yKGxldCByIG9mIGkpe2xldCBvPUpTT04uc3RyaW5naWZ5KHIpO3QuaGFzKG8pfHwodC5hZGQobyksZS5hZGQocikpfXJldHVyblsuLi5lXX0pKSxPZ2U9Sih5Niwobix0KT0+e2xldCBlPW4uZGF0YS5nZXQodC5ydW4pO3JldHVybiBlJiZlLmdldCh0LnRhZyl8fG51bGx9KSxrZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5hY3Rpb25zJD1lLHRoaXMuc3RvcmU9aSx0aGlzLmRhdGFTb3VyY2U9cix0aGlzLmxvYWRSdW5Ub1RhZ3MkPWNyKCgpPT50aGlzLmFjdGlvbnMkLnBpcGUoaWkoRGdlKSx1aSgoKT0+dGhpcy5kYXRhU291cmNlLmZldGNoUnVuVG9UYWcoKS5waXBlKGt0KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKEFnZSh7cnVuVG9UYWdzOm99KSl9KSxMKCgpPT57fSkpKSkse2Rpc3BhdGNoOiExfSksdGhpcy5sb2FkRGF0YSQ9Y3IoKCk9PntsZXQgbz10aGlzLmFjdGlvbnMkLnBpcGUoaWkoSWdlKSx1aSgoe3Zpc2libGVUZXh0Q2FyZHM6YX0pPT57bGV0IGw9YS5tYXAoKHtydW46Yyx0YWc6dX0pPT50aGlzLnN0b3JlLnNlbGVjdChPZ2Use3J1bjpjLHRhZzp1fSkucGlwZShmdW5jdGlvbihuLHQpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGk9PmkucGlwZShuP1llKChyLG8pPT5uKHIsbyxpKSk6bXMsUFcoMSksZT9fMSh0KTp2MSgoKT0+bmV3IF8wKSl9KCksTChkPT4oe3J1bjpjLHRhZzp1LHRleHREYXRhOmR9KSkpKTtyZXR1cm4gbHIobCkucGlwZShMKGM9PmMuZmlsdGVyKCh7dGV4dERhdGE6dX0pPT5udWxsPT09dSkubWFwKCh7cnVuOnUsdGFnOmR9KT0+KHtydW46dSx0YWc6ZH0pKSkpfSkpO3JldHVybiBKdChvLHRoaXMuYWN0aW9ucyQucGlwZShpaShGYSxhYSksV3QodGhpcy5zdG9yZS5zZWxlY3QoUmdlKSksTCgoWyxhXSk9PmEpKSkucGlwZSh4bihhPT5scihhLm1hcChsPT50aGlzLmZldGNoVGV4dERhdGEobCkpKSkpfSx7ZGlzcGF0Y2g6ITF9KX1mZXRjaFRleHREYXRhKGUpe2xldHtydW46aSx0YWc6cn09ZTtyZXR1cm4gdGhpcy5kYXRhU291cmNlLmZldGNoVGV4dERhdGEoaSxyKS5waXBlKGt0KG89Pnt0aGlzLnN0b3JlLmRpc3BhdGNoKFBnZSh7cnVuOmksdGFnOnIsc3RlcERhdGE6b30pKX0pLEwoKCk9Pnt9KSl9fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pKGooUG8pLGooQ2UpLGooSkYpKX0sbi5cdTAyNzVwcm92PXllKHt0b2tlbjpuLGZhY3Rvcnk6bi5cdTAyNzVmYWN9KSxufSkoKSwkdHQ9dnIoe3J1blRvVGFnczpuZXcgTWFwKFtbInJ1bjEiLFsiYS9iIiwiYS9jIl1dLFsicnVuMiIsWyJhL2IiLCJhL2QiXV0sWyJydW4zIixbImMiLCJhL2IiXV1dKSxkYXRhOm5ldyBNYXAoW1sicnVuMSIsbmV3IE1hcChbWyJhL2IiLFt7b3JpZ2luYWxTaGFwZTpbM10sc3RlcDowLHN0cmluZ0FycmF5OltbImZvbyIsImJhciIsImJheiJdXSx3YWxsVGltZUluTXM6MTU3Nzg2NTZlNSx0cnVuY2F0ZWQ6ITF9LHtvcmlnaW5hbFNoYXBlOlszXSxzdGVwOjEsc3RyaW5nQXJyYXk6W1siZm9vIiwiYmF6Il1dLHdhbGxUaW1lSW5NczoxNTc3ODY1NjAxZTMsdHJ1bmNhdGVkOiExfV1dLFsiYS9jIixbe29yaWdpbmFsU2hhcGU6WzNdLHN0ZXA6MCxzdHJpbmdBcnJheTpbWyJXZSBjb25kdWN0ZWQgYW4gZXhwZXJpbWVudCBhbmQgZm91bmQgdGhlIGZvbGxvd2luZyBkYXRhOlxuXG5Qb3VuZHMgb2YgY2hvY29sYXRlIHwgSGFwcGluZXNzXG4tLS18LS0tXG4wIHwgMVxuMSB8IDRcbjIgfCA5XG4zIHwgMTZcbjQgfCAyNVxuNSB8IDM2XG42IHwgNDlcbjcgfCA2NFxuOCB8IDgxXG45IHwgMTAwXG4xMCB8IDEyMSJdXSx3YWxsVGltZUluTXM6MTU3Nzg2NTZlNSx0cnVuY2F0ZWQ6ITF9LHtvcmlnaW5hbFNoYXBlOlszXSxzdGVwOjEsc3RyaW5nQXJyYXk6W1siXHhkNyIsIioqMCoqIiwiKioxKioiLCIqKjIqKiIsIioqMyoqIiwiKio0KioiLCIqKjUqKiJdLFsiKiowKioiLCIwIiwiMCIsIjAiLCIwIiwiMCIsIjAiXSxbIioqMSoqIiwiMCIsIjEiLCIyIiwiMyIsIjQiLCI1Il0sWyIqKjIqKiIsIjAiLCIyIiwiNCIsIjYiLCI4IiwiMTAiXSxbIioqMyoqIiwiMCIsIjMiLCI2IiwiOSIsIjEyIiwiMTUiXSxbIioqNCoqIiwiMCIsIjQiLCI4IiwiMTIiLCIxNiIsIjIwIl0sWyIqKjUqKiIsIjAiLCI1IiwiMTAiLCIxNSIsIjIwIiwiMjUiXV0sd2FsbFRpbWVJbk1zOjE1Nzc4NjU2MDFlMyx0cnVuY2F0ZWQ6ITF9XV1dKV1dKSx2aXNpYmxlUnVuVGFnczpuZXcgTWFwfSk7ZnVuY3Rpb24gRmdlKG4sdCl7cmV0dXJuICR0dChuLHQpfXZhciBOZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGV4dC1kYXNoYm9hcmQiXV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJkEoMCwiIFRoaXMgaXMgdGhlIHRleHQgZGFzaGJvYXJkICIpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSxMZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLEJnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsTGdlLEJzLmZvclBsdWdpbigidGV4dF92MiIsTmdlKSxUZ2Usd3IuZm9yRmVhdHVyZSgidGV4dCIsRmdlKSxyby5mb3JGZWF0dXJlKFtrZ2VdKV19KSxufSkoKSxWZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe2ltcG9ydHM6W19vZSxOaGUsRWdlLEJnZV19KSxufSkoKSxGcD0oKCk9PihmdW5jdGlvbihuKXtuLkNVU1RPTV9FTEVNRU5UPSJDVVNUT01fRUxFTUVOVCIsbi5JRlJBTUU9IklGUkFNRSIsbi5OR19DT01QT05FTlQ9Ik5HX0NPTVBPTkVOVCIsbi5OT05FPSJOT05FIn0oRnB8fChGcD17fSkpLEZwKSkoKSxlbnQ9WyJwbHVnaW5Db250YWluZXIiXSx0bnQ9WyJuZ1BsdWdpbkNvbnRhaW5lciJdO2Z1bmN0aW9uIG5udChuLHQpezEmbiYmTmkoMCl9ZnVuY3Rpb24gaW50KG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLG5udCwxLDAsIm5nLWNvbnRhaW5lciIsOSksYW4oKSksMiZuKXtsZXQgZT1TKDIpLGk9JGUoNik7QygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOmkpfX1mdW5jdGlvbiBybnQobix0KXsxJm4mJk5pKDApfWZ1bmN0aW9uIG9udChuLHQpe2lmKDEmbiYmKHNuKDApLEUoMSxybnQsMSwwLCJuZy1jb250YWluZXIiLDkpLGFuKCkpLDImbil7bGV0IGU9UygyKSxpPSRlKDYpO0MoMSkseSgibmdUZW1wbGF0ZU91dGxldCIsZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU/ZS5lbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6aSl9fWZ1bmN0aW9uIHNudChuLHQpezEmbiYmTmkoMCl9ZnVuY3Rpb24gYW50KG4sdCl7aWYoMSZuJiYoc24oMCksRSgxLHNudCwxLDAsIm5nLWNvbnRhaW5lciIsOSksYW4oKSksMiZuKXtsZXQgZT1TKDIpLGk9JGUoNik7QygxKSx5KCJuZ1RlbXBsYXRlT3V0bGV0IixlLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZT9lLmVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZTppKX19ZnVuY3Rpb24gbG50KG4sdCl7aWYoMSZuJiYoc24oMCksXygxLCJoMyIsMTApLEEoMiwiIFRoZXJlXHUyMDE5cyBubyBkYXNoYm9hcmQgYnkgdGhlIG5hbWUgb2YgXHUyMDFjIiksXygzLCJjb2RlIiksQSg0KSx2KCksQSg1LCJcdTIwMWQuICIpLHYoKSxfKDYsInAiKSxBKDcsIllvdSBjYW4gc2VsZWN0IGEgZGFzaGJvYXJkIGZyb20gdGhlIGxpc3QgYWJvdmUuIiksdigpLF8oOCwicCIpLE5pKDksMTEpLHYoKSxhbigpKSwyJm4pe2xldCBlPVMoMiksaT0kZSg4KTtDKDQpLHl0KGUuYWN0aXZlUGx1Z2luSWQpLEMoNSkseSgibmdUZW1wbGF0ZU91dGxldCIsaSl9fWZ1bmN0aW9uIGNudChuLHQpe2lmKDEmbiYmKHNuKDApLF8oMSwiaDMiLDEyKSxBKDIsIiBObyBkYXNoYm9hcmRzIGFyZSBhY3RpdmUgZm9yIHRoZSBjdXJyZW50IGRhdGEgc2V0LiAiKSx2KCksXygzLCJwIiksQSg0LCJQcm9iYWJsZSBjYXVzZXM6IiksdigpLF8oNSwidWwiKSg2LCJsaSIpLEEoNywiWW91IGhhdmVuXHUyMDE5dCB3cml0dGVuIGFueSBkYXRhIHRvIHlvdXIgZXZlbnQgZmlsZXMuIiksdigpLF8oOCwibGkiKSxBKDksIlRlbnNvckJvYXJkIGNhblx1MjAxOXQgZmluZCB5b3VyIGV2ZW50IGZpbGVzLiIpLHYoKSgpLEEoMTAsIiBJZiB5b3VcdTIwMTlyZSBuZXcgdG8gdXNpbmcgVGVuc29yQm9hcmQsIGFuZCB3YW50IHRvIGZpbmQgb3V0IGhvdyB0byBhZGQgZGF0YSBhbmQgc2V0IHVwIHlvdXIgZXZlbnQgZmlsZXMsIGNoZWNrIG91dCB0aGUgIiksXygxMSwiYSIsMTMpLEEoMTIsIlJFQURNRSIpLHYoKSxBKDEzLCIgYW5kIHBlcmhhcHMgdGhlICIpLF8oMTQsImEiLDE0KSxBKDE1LCJUZW5zb3JCb2FyZCB0dXRvcmlhbCIpLHYoKSxBKDE2LCIuICIpLF8oMTcsInAiKSxBKDE4LCIgSWYgeW91IHRoaW5rIFRlbnNvckJvYXJkIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHksIHBsZWFzZSBzZWUgIiksXygxOSwiYSIsMTUpLEEoMjAsInRoZSBzZWN0aW9uIG9mIHRoZSBSRUFETUUgZGV2b3RlZCB0byBtaXNzaW5nIGRhdGEgcHJvYmxlbXMiKSx2KCksQSgyMSwiIGFuZCBjb25zaWRlciBmaWxpbmcgYW4gaXNzdWUgb24gR2l0SHViLiAiKSx2KCksXygyMiwicCIpLE5pKDIzLDExKSx2KCksYW4oKSksMiZuKXtTKDIpO2xldCBlPSRlKDgpO0MoMjMpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiB1bnQobix0KXtpZigxJm4mJihfKDAsImRpdiIsNikoMSwiZGl2Iiw3KSxFKDIsaW50LDIsMSwibmctY29udGFpbmVyIiw4KSxFKDMsb250LDIsMSwibmctY29udGFpbmVyIiw4KSxFKDQsYW50LDIsMSwibmctY29udGFpbmVyIiw4KSxFKDUsbG50LDEwLDIsIm5nLWNvbnRhaW5lciIsOCksRSg2LGNudCwyNCwxLCJuZy1jb250YWluZXIiLDgpLHYoKSgpKSwyJm4pe2xldCBlPVMoKTt5KCJuZ1N3aXRjaCIsZS5wbHVnaW5Mb2FkU3RhdGUpLEMoMikseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQpLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV04pLEMoMSkseSgibmdTd2l0Y2hDYXNlIixlLlBsdWdpbkxvYWRTdGF0ZS5VTktOT1dOX1BMVUdJTl9JRCksQygxKSx5KCJuZ1N3aXRjaENhc2UiLGUuUGx1Z2luTG9hZFN0YXRlLk5PX0VOQUJMRURfUExVR0lOUyl9fWZ1bmN0aW9uIGRudChuLHQpe2lmKDEmbiYmKF8oMCwiaDMiLDE2KSxBKDEsIkRhdGEgY291bGQgbm90IGJlIGxvYWRlZC4iKSx2KCksXygyLCJwIiksQSgzLCJUaGUgVGVuc29yQm9hcmQgc2VydmVyIG1heSBiZSBkb3duIG9yIGluYWNjZXNzaWJsZS4iKSx2KCksXyg0LCJwIiksTmkoNSwxMSksdigpKSwyJm4pe1MoKTtsZXQgZT0kZSg4KTtDKDUpLHkoIm5nVGVtcGxhdGVPdXRsZXQiLGUpfX1mdW5jdGlvbiBwbnQobix0KXtpZigxJm4mJihfKDAsInAiLDE5KSgxLCJpIiksQSgyLCJMb2cgZGlyZWN0b3J5OiAiKSxfKDMsInNwYW4iKSxBKDQpLHYoKSgpKCkpLDImbil7bGV0IGU9UygyKTtDKDQpLHl0KGUuZGF0YUxvY2F0aW9uKX19ZnVuY3Rpb24gaG50KG4sdCl7aWYoMSZuJiYoXygwLCJzcGFuIiwxNyksQSgxKSxCKDIsImRhdGUiKSx2KCksRSgzLHBudCw1LDEsInAiLDE4KSksMiZuKXtsZXQgZT1TKCk7QygxKSxqZSgiTGFzdCByZWxvYWQ6ICIsSmYoMiwyLGUubGFzdFVwZGF0ZWQsIm1lZGl1bSIpLCIiKSxDKDIpLHkoIm5nSWYiLGUuZGF0YUxvY2F0aW9uKX19dmFyIGZudD1mdW5jdGlvbihuKXtyZXR1cm57cGx1Z2luczohMCwiaXMtZmlyc3QtcGFydHktcGx1Z2luIjpufX0seWM9KCgpPT4oZnVuY3Rpb24obil7bltuLkVOVklST05NRU5UX0ZBSUxVUkVfTk9UX0ZPVU5EPTBdPSJFTlZJUk9OTUVOVF9GQUlMVVJFX05PVF9GT1VORCIsbltuLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ9MV09IkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQiLG5bbi5FTlZJUk9OTUVOVF9GQUlMVVJFX1VOS05PV049Ml09IkVOVklST05NRU5UX0ZBSUxVUkVfVU5LTk9XTiIsbltuLk5PX0VOQUJMRURfUExVR0lOUz0zXT0iTk9fRU5BQkxFRF9QTFVHSU5TIixuW24uVU5LTk9XTl9QTFVHSU5fSUQ9NF09IlVOS05PV05fUExVR0lOX0lEIixuW24uTE9BREVEPTVdPSJMT0FERUQiLG5bbi5MT0FESU5HPTZdPSJMT0FESU5HIn0oeWN8fCh5Yz17fSkpLHljKSkoKSxIZ2U9KCgpPT57Y2xhc3Mgbntjb25zdHJ1Y3RvcihlLGkscil7dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9ZSx0aGlzLnBsdWdpblJlZ2lzdHJ5PWksdGhpcy5wbHVnaW5BcGlIb3N0PXIsdGhpcy5QbHVnaW5Mb2FkU3RhdGU9eWMsdGhpcy5Mb2FkaW5nTWVjaGFuaXNtVHlwZT1GcCx0aGlzLnBsdWdpbkluc3RhbmNlcz1uZXcgTWFwfW5nT25DaGFuZ2VzKGUpe2lmKCF0aGlzLmlzRmVhdHVyZUZsYWdzTG9hZGVkfHwhdGhpcy5hY3RpdmVLbm93blBsdWdpbnx8dGhpcy5zZXR0aW5nc0xvYWRTdGF0ZT09PU9lLk5PVF9MT0FERUR8fHRoaXMuc2V0dGluZ3NMb2FkU3RhdGU9PT1PZS5MT0FESU5HKXJldHVybjtsZXQgaT1Cb29sZWFuKHRoaXMuYWN0aXZlS25vd25QbHVnaW4mJiF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXModGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCkpO2lmKGUuYWN0aXZlS25vd25QbHVnaW58fGUuaXNGZWF0dXJlRmxhZ3NMb2FkZWR8fGUuc2V0dGluZ3NMb2FkU3RhdGUpe2xldCByPWUuYWN0aXZlS25vd25QbHVnaW4/LnByZXZpb3VzVmFsdWU7aWYociYmci5pZCE9PXRoaXMuYWN0aXZlS25vd25QbHVnaW4uaWQmJnRoaXMuaGlkZVBsdWdpbihyKSxpKXtsZXQgbz10aGlzLmNyZWF0ZVBsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKTtvJiZ0aGlzLnBsdWdpbkluc3RhbmNlcy5zZXQodGhpcy5hY3RpdmVLbm93blBsdWdpbi5pZCxvKX1lbHNlIHRoaXMuc2hvd1BsdWdpbih0aGlzLmFjdGl2ZUtub3duUGx1Z2luKX0oaXx8ZS5sYXN0VXBkYXRlZCkmJnRoaXMucmVsb2FkKHRoaXMuYWN0aXZlS25vd25QbHVnaW4saSl9aGlkZVBsdWdpbihlKXtpZighdGhpcy5wbHVnaW5JbnN0YW5jZXMuaGFzKGUuaWQpKXJldHVybjtsZXQgaT10aGlzLnBsdWdpbkluc3RhbmNlcy5nZXQoZS5pZCk7T2JqZWN0LmFzc2lnbihpLnN0eWxlLHttYXhIZWlnaHQ6MCxvdmVyZmxvdzoiaGlkZGVuIix2aXNpYmlsaXR5OiJoaWRkZW4iLHBvc2l0aW9uOiJhYnNvbHV0ZSJ9KX1zaG93UGx1Z2luKGUpe2lmKCF0aGlzLnBsdWdpbkluc3RhbmNlcy5oYXMoZS5pZCkpcmV0dXJuO2xldCBpPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtPYmplY3QuYXNzaWduKGkuc3R5bGUse21heEhlaWdodDpudWxsLG92ZXJmbG93Om51bGwsdmlzaWJpbGl0eTpudWxsLHBvc2l0aW9uOm51bGx9KX1jcmVhdGVQbHVnaW4oZSl7bGV0IGk9bnVsbDtzd2l0Y2goZS5sb2FkaW5nX21lY2hhbmlzbS50eXBlKXtjYXNlIEZwLkNVU1RPTV9FTEVNRU5UOmk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlLmxvYWRpbmdfbWVjaGFuaXNtLmVsZW1lbnRfbmFtZSksaS5yZWxvYWRPblJlYWR5PSExLGkuZmVhdHVyZUZsYWdzPXRoaXMuZmVhdHVyZUZsYWdzLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgRnAuSUZSQU1FOmlmKCF0aGlzLnBsdWdpbkFwaUhvc3QpdGhyb3cgRXJyb3IoYElGUkFNRS1iYXNlZCBwbHVnaW5zIG5vdCBzdXBwb3J0ZWQ6ICR7ZS5pZH1gKTtpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGkuc2V0QXR0cmlidXRlKCJzcmMiLGBkYXRhL3BsdWdpbl9lbnRyeS5odG1sP25hbWU9JHtlLmlkfWApLHRoaXMucGx1Z2luQXBpSG9zdC5yZWdpc3RlclBsdWdpbklmcmFtZShpLGUuaWQpLHRoaXMucGx1Z2luc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGkpO2JyZWFrO2Nhc2UgRnAuTkdfQ09NUE9ORU5UOmxldCByPXRoaXMucGx1Z2luUmVnaXN0cnkuZ2V0Q29tcG9uZW50KGUuaWQpO2lmKHIpe2xldCBvPXRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHIpO2k9dGhpcy5uZ1BsdWdpbkNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQobykubG9jYXRpb24ubmF0aXZlRWxlbWVudH1lbHNlIGNvbnNvbGUuZXJyb3IoYE5vIHJlZ2lzdGVyZWQgQW5ndWxhciBjb21wb25lbnQgZm9yIHBsdWdpbjogJHtlLmlkfWApO2JyZWFrO2Nhc2UgRnAuTk9ORTpicmVhaztkZWZhdWx0OmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgcGx1Z2luIil9cmV0dXJuIGl9cmVsb2FkKGUsaSl7aWYoIWkmJmUuZGlzYWJsZV9yZWxvYWQpcmV0dXJuO2xldCByPXRoaXMucGx1Z2luSW5zdGFuY2VzLmdldChlLmlkKTtyJiZyLnJlbG9hZCYmci5yZWxvYWQoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShncyksTShCcyksTShyMiw4KSl9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sicGx1Z2lucy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGUsaSl7aWYoMSZlJiYob3QoZW50LDcsUmUpLG90KHRudCw3LE9pKSksMiZlKXtsZXQgcjtOZShyPUxlKCkpJiYoaS5wbHVnaW5zQ29udGFpbmVyPXIuZmlyc3QpLE5lKHI9TGUoKSkmJihpLm5nUGx1Z2luQ29udGFpbmVyPXIuZmlyc3QpfX0saW5wdXRzOnthY3RpdmVQbHVnaW5JZDoiYWN0aXZlUGx1Z2luSWQiLGFjdGl2ZUtub3duUGx1Z2luOiJhY3RpdmVLbm93blBsdWdpbiIscGx1Z2luTG9hZFN0YXRlOiJwbHVnaW5Mb2FkU3RhdGUiLGRhdGFMb2NhdGlvbjoiZGF0YUxvY2F0aW9uIixpc0ZlYXR1cmVGbGFnc0xvYWRlZDoiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLHNldHRpbmdzTG9hZFN0YXRlOiJzZXR0aW5nc0xvYWRTdGF0ZSIsZmVhdHVyZUZsYWdzOiJmZWF0dXJlRmxhZ3MiLGxhc3RVcGRhdGVkOiJsYXN0VXBkYXRlZCIsZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLGVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZToiZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlIn0sZmVhdHVyZXM6W0Z0XSxkZWNsczo5LHZhcnM6NCxjb25zdHM6W1szLCJuZ0NsYXNzIl0sWyJwbHVnaW5Db250YWluZXIiLCIiXSxbIm5nUGx1Z2luQ29udGFpbmVyIiwiIl0sWyJjbGFzcyIsIndhcm5pbmciLDMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJlbnZpcm9ubWVudEZhaWx1cmVEZWZhdWx0VGVtcGxhdGUiLCIiXSxbImRhdGVBbmREYXRhTG9jYXRpb24iLCIiXSxbMSwid2FybmluZyIsMywibmdTd2l0Y2giXSxbMSwid2FybmluZy1tZXNzYWdlIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsInVua25vd24tcGx1Z2luIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwibm8tYWN0aXZlLXBsdWdpbiJdLFsiaHJlZiIsImh0dHBzOi8vZ2l0aHViLmNvbS90ZW5zb3JmbG93L3RlbnNvcmJvYXJkL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCJdLFsiaHJlZiIsImh0dHBzOi8vd3d3LnRlbnNvcmZsb3cub3JnL2dldF9zdGFydGVkL3N1bW1hcmllc19hbmRfdGVuc29yYm9hcmQiXSxbImhyZWYiLCJodHRwczovL2dpdGh1Yi5jb20vdGVuc29yZmxvdy90ZW5zb3Jib2FyZC9ibG9iL21hc3Rlci9SRUFETUUubWQjbXktdGVuc29yYm9hcmQtaXNudC1zaG93aW5nLWFueS1kYXRhLXdoYXRzLXdyb25nIl0sWzEsImVudmlyb25tZW50LW5vdC1sb2FkZWQiXSxbMSwibGFzdC1yZWxvYWQtdGltZSJdLFsiY2xhc3MiLCJkYXRhLWxvY2F0aW9uIiw0LCJuZ0lmIl0sWzEsImRhdGEtbG9jYXRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihfKDAsImRpdiIsMCwxKSxOaSgyLG51bGwsMiksdigpLEUoNCx1bnQsNyw2LCJkaXYiLDMpLEUoNSxkbnQsNiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCw0LHF0KSxFKDcsaG50LDQsNSwibmctdGVtcGxhdGUiLG51bGwsNSxxdCkpLDImZSYmKHkoIm5nQ2xhc3MiLE9uKDIsZm50LChudWxsPT1pLmFjdGl2ZUtub3duUGx1Z2luP251bGw6aS5hY3RpdmVLbm93blBsdWdpbi5sb2FkaW5nX21lY2hhbmlzbS50eXBlKSE9PWkuTG9hZGluZ01lY2hhbmlzbVR5cGUuSUZSQU1FKSksQyg0KSx5KCJuZ0lmIixpLnBsdWdpbkxvYWRTdGF0ZSE9PWkuUGx1Z2luTG9hZFN0YXRlLkxPQURFRCYmaS5wbHVnaW5Mb2FkU3RhdGUhPT1pLlBsdWdpbkxvYWRTdGF0ZS5MT0FESU5HKSl9LGRlcGVuZGVuY2llczpbRm4sQmUsb3MsQ3IsVXIsVV9dLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiMyMTIxMjE7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5LmRhcmstbW9kZSAgIFtfbmdob3N0LSVDT01QJV0gICAucGx1Z2lucy5pcy1maXJzdC1wYXJ0eS1wbHVnaW5bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6IzMwMzAzMDtjb2xvcjojZmZmfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0ud2FybmluZ1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmZmO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfWJvZHkuZGFyay1tb2RlW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSwgYm9keS5kYXJrLW1vZGUgICBbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmdbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMwMzAzMH0ud2FybmluZy1tZXNzYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMjEyMTIxO21hcmdpbjo4MHB4IGF1dG8gMDttYXgtd2lkdGg6NTQwcHh9Ym9keS5kYXJrLW1vZGVbX25naG9zdC0lQ09NUCVdICAgLndhcm5pbmctbWVzc2FnZVtfbmdjb250ZW50LSVDT01QJV0sIGJvZHkuZGFyay1tb2RlICAgW19uZ2hvc3QtJUNPTVAlXSAgIC53YXJuaW5nLW1lc3NhZ2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmZmZ9Lmxhc3QtcmVsb2FkLXRpbWVbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc3R5bGU6aXRhbGljfS5wbHVnaW5zW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaWZyYW1le2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLG1udD1KKHJ2LFJzLChuLHQpPT50JiZuW3RdP09iamVjdC5hc3NpZ24oe2lkOnR9LG5bdF0pOm51bGwpLGVOPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSl7dGhpcy5zdG9yZT1lLHRoaXMuYWN0aXZlS25vd25QbHVnaW4kPXRoaXMuc3RvcmUuc2VsZWN0KG1udCksdGhpcy5hY3RpdmVQbHVnaW5JZCQ9dGhpcy5zdG9yZS5zZWxlY3QoUnMpLHRoaXMucGx1Z2luTG9hZFN0YXRlJD1MdCh0aGlzLmFjdGl2ZUtub3duUGx1Z2luJCx0aGlzLmFjdGl2ZVBsdWdpbklkJCx0aGlzLnN0b3JlLnNlbGVjdChuSSkpLnBpcGUoTCgoW2kscixvXSk9Pm51bGwhPT1vLmZhaWx1cmVDb2RlP28uZmFpbHVyZUNvZGU9PT0kbC5OT1RfRk9VTkQ/eWMuRU5WSVJPTk1FTlRfRkFJTFVSRV9OT1RfRk9VTkQ6by5mYWlsdXJlQ29kZT09PSRsLlBFUk1JU1NJT05fREVOSUVEP3ljLkVOVklST05NRU5UX0ZBSUxVUkVfUEVSTUlTU0lPTl9ERU5JRUQ6eWMuRU5WSVJPTk1FTlRfRkFJTFVSRV9VTktOT1dOOm51bGwhPT1pP3ljLkxPQURFRDpudWxsPT09by5sYXN0TG9hZGVkVGltZUluTXMmJm8uc3RhdGU9PT1PZS5MT0FESU5HP3ljLkxPQURJTkc6cj95Yy5VTktOT1dOX1BMVUdJTl9JRDp5Yy5OT19FTkFCTEVEX1BMVUdJTlMpKSx0aGlzLmxhc3RMb2FkZWRUaW1lSW5NcyQ9dGhpcy5zdG9yZS5zZWxlY3QoaXYpLHRoaXMuZGF0YUxvY2F0aW9uJD10aGlzLnN0b3JlLnNlbGVjdChvdikucGlwZShMKGk9PmkuZGF0YV9sb2NhdGlvbikpLHRoaXMuaXNGZWF0dXJlRmxhZ3NMb2FkZWQkPXRoaXMuc3RvcmUuc2VsZWN0KGdoKSx0aGlzLmZlYXR1cmVGbGFncyQ9dGhpcy5zdG9yZS5zZWxlY3QoYnMpLHRoaXMuc2V0dGluZ3NMb2FkU3RhdGUkPXRoaXMuc3RvcmUuc2VsZWN0KE5hLmdldFNldHRpbmdzTG9hZFN0YXRlKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInBsdWdpbnMiXV0saW5wdXRzOntlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlIixlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGU6ImVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSIsZW52aXJvbm1lbnRGYWlsdXJlVW5rbm93blRlbXBsYXRlOiJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUifSxkZWNsczo5LHZhcnM6MjcsY29uc3RzOltbMywiYWN0aXZlS25vd25QbHVnaW4iLCJhY3RpdmVQbHVnaW5JZCIsImRhdGFMb2NhdGlvbiIsImxhc3RVcGRhdGVkIiwicGx1Z2luTG9hZFN0YXRlIiwiaXNGZWF0dXJlRmxhZ3NMb2FkZWQiLCJzZXR0aW5nc0xvYWRTdGF0ZSIsImZlYXR1cmVGbGFncyIsImVudmlyb25tZW50RmFpbHVyZU5vdEZvdW5kVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVQZXJtaXNzaW9uRGVuaWVkVGVtcGxhdGUiLCJlbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZSxpKXsxJmUmJihPKDAsInBsdWdpbnMtY29tcG9uZW50IiwwKSxCKDEsImFzeW5jIiksQigyLCJhc3luYyIpLEIoMywiYXN5bmMiKSxCKDQsImFzeW5jIiksQig1LCJhc3luYyIpLEIoNiwiYXN5bmMiKSxCKDcsImFzeW5jIiksQig4LCJhc3luYyIpKSwyJmUmJnkoImFjdGl2ZUtub3duUGx1Z2luIixVKDEsMTEsaS5hY3RpdmVLbm93blBsdWdpbiQpKSgiYWN0aXZlUGx1Z2luSWQiLFUoMiwxMyxpLmFjdGl2ZVBsdWdpbklkJCkpKCJkYXRhTG9jYXRpb24iLFUoMywxNSxpLmRhdGFMb2NhdGlvbiQpKSgibGFzdFVwZGF0ZWQiLFUoNCwxNyxpLmxhc3RMb2FkZWRUaW1lSW5NcyQpKSgicGx1Z2luTG9hZFN0YXRlIixVKDUsMTksaS5wbHVnaW5Mb2FkU3RhdGUkKSkoImlzRmVhdHVyZUZsYWdzTG9hZGVkIixVKDYsMjEsaS5pc0ZlYXR1cmVGbGFnc0xvYWRlZCQpKSgic2V0dGluZ3NMb2FkU3RhdGUiLFUoNywyMyxpLnNldHRpbmdzTG9hZFN0YXRlJCkpKCJmZWF0dXJlRmxhZ3MiLFUoOCwyNSxpLmZlYXR1cmVGbGFncyQpKSgiZW52aXJvbm1lbnRGYWlsdXJlTm90Rm91bmRUZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVOb3RGb3VuZFRlbXBsYXRlKSgiZW52aXJvbm1lbnRGYWlsdXJlUGVybWlzc2lvbkRlbmllZFRlbXBsYXRlIixpLmVudmlyb25tZW50RmFpbHVyZVBlcm1pc3Npb25EZW5pZWRUZW1wbGF0ZSkoImVudmlyb25tZW50RmFpbHVyZVVua25vd25UZW1wbGF0ZSIsaS5lbnZpcm9ubWVudEZhaWx1cmVVbmtub3duVGVtcGxhdGUpfSxzdHlsZXM6WyJwbHVnaW5zLWNvbXBvbmVudFtfbmdjb250ZW50LSVDT01QJV0geyBoZWlnaHQ6IDEwMCU7IH0iXSxjaGFuZ2VEZXRlY3Rpb246MH0pLG59KSgpLHROPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm59KSxuLlx1MDI3NWluaj1WKHtpbXBvcnRzOltlYyxNZSxCc119KSxufSkoKTtOeChlTixbSGdlXSxbR2VdKTt2YXIgVWdlPSgoKT0+e2NsYXNzIG57Y29uc3RydWN0b3IoZSxpKXt0aGlzLnN0b3JlPWUsdGhpcy5kb2N1bWVudD1pLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlPXRoaXMub25WaXNpYmlsaXR5Q2hhbmdlSW1wbC5iaW5kKHRoaXMpLHRoaXMucmVsb2FkRW5hYmxlZCQ9dGhpcy5zdG9yZS5waXBlKHZ0KE5hLmdldFJlbG9hZEVuYWJsZWQpKSx0aGlzLnJlbG9hZFBlcmlvZEluTXMkPXRoaXMuc3RvcmUucGlwZSh2dChOYS5nZXRSZWxvYWRQZXJpb2RJbk1zKSksdGhpcy5yZWxvYWRUaW1lcklkPW51bGwsdGhpcy5taXNzZWRBdXRvUmVsb2FkPSExLHRoaXMubmdVbnN1YnNjcmliZT1uZXcga2V9bmdPbkluaXQoKXt0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlKSxMdCh0aGlzLnJlbG9hZEVuYWJsZWQkLnBpcGUoeWkoKSksdGhpcy5yZWxvYWRQZXJpb2RJbk1zJC5waXBlKHlpKCkpKS5waXBlKHN0KHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoW2UsaV0pPT57dGhpcy5jYW5jZWxMb2FkKCksZSYmdGhpcy5sb2FkKGkpfSl9b25WaXNpYmlsaXR5Q2hhbmdlSW1wbCgpeyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZ0aGlzLm1pc3NlZEF1dG9SZWxvYWQmJih0aGlzLm1pc3NlZEF1dG9SZWxvYWQ9ITEsdGhpcy5zdG9yZS5kaXNwYXRjaChhYSgpKSl9bG9hZChlKXt0aGlzLnJlbG9hZFRpbWVySWQ9c2V0VGltZW91dCgoKT0+eyJ2aXNpYmxlIj09PXRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlP3RoaXMuc3RvcmUuZGlzcGF0Y2goYWEoKSk6dGhpcy5taXNzZWRBdXRvUmVsb2FkPSEwLHRoaXMubG9hZChlKX0sZSl9Y2FuY2VsTG9hZCgpe251bGwhPT10aGlzLnJlbG9hZFRpbWVySWQmJmNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFRpbWVySWQpLHRoaXMucmVsb2FkVGltZXJJZD1udWxsfW5nT25EZXN0cm95KCl7dGhpcy5jYW5jZWxMb2FkKCksdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLm9uVmlzaWJpbGl0eUNoYW5nZSksdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKSx0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKX19cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bikoTShDZSksTShIdCkpfSxuLlx1MDI3NWNtcD1SKHt0eXBlOm4sc2VsZWN0b3JzOltbInJlbG9hZGVyIl1dLGRlY2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGUsaSl7fSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxufSkoKSx6Z2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1Y21wPVIoe3R5cGU6bixzZWxlY3RvcnM6W1sidGVuc29yYm9hcmQtd3JhcHBlci1jb21wb25lbnQiXV0sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbMSwicGx1Z2lucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihlLGkpezEmZSYmTygwLCJwbHVnaW5zIiwwKSgxLCJyZWxvYWRlciIpfSxkZXBlbmRlbmNpZXM6W2VOLFVnZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnBsdWdpbnNbX25nY29udGVudC0lQ09NUCVdIHtcbiAgICAgICAgZmxleDogMSAxO1xuICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgfSJdLGNoYW5nZURldGVjdGlvbjowfSksbn0pKCksamdlPSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NXByb3Y9eWUoe3Rva2VuOm4sZmFjdG9yeTpuLlx1MDI3NWZhY30pLG59KSgpLGI2PSJzbW9vdGhpbmciLHg2PSJydW5Db2xvckdyb3VwIixDNj0idGFnRmlsdGVyIixNNj0icnVuRmlsdGVyIix3Nj0icmVnZXg6IixuTj1jbGFzcyBleHRlbmRzIGpnZXtnZXRNZXRyaWNzUGlubmVkQ2FyZHModCl7cmV0dXJuIEx0KFt0LnNlbGVjdCh6TSksdC5zZWxlY3QodmVlKV0pLnBpcGUoTCgoW2UsaV0pPT57aWYoIWUubGVuZ3RoJiYhaS5sZW5ndGgpcmV0dXJuW107bGV0IG89Wy4uLmUubWFwKCh7cGx1Z2luOnMsdGFnOmEsc2FtcGxlOmwscnVuSWQ6Y30pPT57bGV0IHU9e3BsdWdpbjpzLHRhZzphfTtyZXR1cm4gbWwocykmJih1LnJ1bklkPWMpLGZsKHMpJiYodS5zYW1wbGU9bCksdX0pLC4uLmldO3JldHVyblt7a2V5OiJwaW5uZWRDYXJkcyIsdmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9XX0pKX1zZXJpYWxpemVTdGF0ZVRvUXVlcnlQYXJhbXModCl7cmV0dXJuIEx0KFt0aGlzLmdldE1ldHJpY3NQaW5uZWRDYXJkcyh0KSx0LnNlbGVjdChYYykucGlwZShMKGU9PmU/W3trZXk6QzYsdmFsdWU6ZX1dOltdKSksTHQoW3Quc2VsZWN0KHpBKSx0LnNlbGVjdChIbSldKS5waXBlKEwoKFtlLGldKT0+ZnVuY3Rpb24obix0KXtyZXR1cm4gT2JqZWN0LmVudHJpZXMobikubWFwKChbZSxpXSk9PntpZih2b2lkIDA9PT1pKXJldHVybnt9O2xldCByPXRbZV07cmV0dXJuIHImJnIucXVlcnlQYXJhbU92ZXJyaWRlP3trZXk6ci5xdWVyeVBhcmFtT3ZlcnJpZGUsdmFsdWU6aT8udG9TdHJpbmcoKX06e319KS5maWx0ZXIoKHtrZXk6ZSx2YWx1ZTppfSk9PmUmJnZvaWQgMCE9PWkpfShlLGkpKSksdC5zZWxlY3QoYmVlKS5waXBlKEwoZT0+TnVtYmVyLmlzRmluaXRlKGUuc2NhbGFyU21vb3RoaW5nKT9be2tleTpiNix2YWx1ZTpTdHJpbmcoZS5zY2FsYXJTbW9vdGhpbmcpfV06W10pKSx0LnNlbGVjdChySCkucGlwZShMKGU9PntpZighZSlyZXR1cm5bXTtsZXQgaTtzd2l0Y2goZS5rZXkpe2Nhc2Ugc3IuRVhQRVJJTUVOVDppPSJleHBlcmltZW50IjticmVhaztjYXNlIHNyLlJVTjppPSJydW4iO2JyZWFrO2Nhc2Ugc3IuUkVHRVg6aT1gJHt3Nn0ke2UucmVnZXhTdHJpbmd9YDticmVhaztkZWZhdWx0OnRocm93IG5ldyBSYW5nZUVycm9yKCJTZXJpYWxpemF0aW9uIG5vdCBpbXBsZW1lbnRlZCIpfXJldHVyblt7a2V5Ong2LHZhbHVlOml9XX0pKSx0LnNlbGVjdChRbSkucGlwZShMKGU9PmU/W3trZXk6TTYsdmFsdWU6ZX1dOltdKSldKS5waXBlKEwoZT0+ZS5mbGF0KCkpKX1kZXNlcmlhbGl6ZVF1ZXJ5UGFyYW1zKHQpe2xldCBlPW51bGwsaT1udWxsLHI9bnVsbCxvPW51bGwscz1udWxsO2ZvcihsZXR7a2V5OmEsdmFsdWU6bH1vZiB0KXN3aXRjaChhKXtjYXNlInBpbm5lZENhcmRzIjplPXZudChsKTticmVhaztjYXNlIGI2Omk9TnVtYmVyKGwpO2JyZWFrO2Nhc2UgeDY6c3dpdGNoKGwpe2Nhc2UiZXhwZXJpbWVudCI6bz17a2V5OnNyLkVYUEVSSU1FTlR9O2JyZWFrO2Nhc2UicnVuIjpvPXtrZXk6c3IuUlVOfX1pZihsLnN0YXJ0c1dpdGgodzYpKXtsZXQgYz1sLnNsaWNlKHc2Lmxlbmd0aCk7bz17a2V5OnNyLlJFR0VYLHJlZ2V4U3RyaW5nOmN9fWJyZWFrO2Nhc2UgQzY6cj1sO2JyZWFrO2Nhc2UgTTY6cz1sfXJldHVybnttZXRyaWNzOntwaW5uZWRDYXJkczplfHxbXSxzbW9vdGhpbmc6aSx0YWdGaWx0ZXI6cn0scnVuczp7Z3JvdXBCeTpvLHJlZ2V4RmlsdGVyOnN9fX19O2Z1bmN0aW9uIHZudChuKXtsZXQgdDt0cnl7dD1KU09OLnBhcnNlKG4pfWNhdGNoe3JldHVybiBudWxsfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBudWxsO2xldCBlPVtdO2ZvcihsZXQgaSBvZiB0KXtsZXQgbz0ic3RyaW5nIj09dHlwZW9mIGkucnVuSWQscz0ibnVtYmVyIj09dHlwZW9mIGkuc2FtcGxlLGE9InN0cmluZyI9PXR5cGVvZiBpLnRhZyxsPW98fHR5cGVvZiBpLnJ1bklkPiJ1IixjPXN8fHR5cGVvZiBpLnNhbXBsZT4idSI7aWYoISgic3RyaW5nIj09dHlwZW9mIGkucGx1Z2luJiZhJiZsJiZjJiZYJChpLnBsdWdpbikmJmkudGFnKSljb250aW51ZTtpZihtbChpLnBsdWdpbikpe2lmKCFpLnJ1bklkKWNvbnRpbnVlfWVsc2UgaWYoaS5ydW5JZCljb250aW51ZTtpZihzJiYoIWZsKGkucGx1Z2luKXx8IU51bWJlci5pc0ludGVnZXIoaS5zYW1wbGUpfHxpLnNhbXBsZTwwKSljb250aW51ZTtsZXQgdT17cGx1Z2luOmkucGx1Z2luLHRhZzppLnRhZ307byYmKHUucnVuSWQ9aS5ydW5JZCkscyYmKHUuc2FtcGxlPWkuc2FtcGxlKSxlLnB1c2godSl9cmV0dXJuIGV9ZnVuY3Rpb24gV2dlKCl7cmV0dXJuW3tyb3V0ZUtpbmQ6aGkuRVhQRVJJTUVOVCxwYXRoOiIvIixuZ0NvbXBvbmVudDp6Z2UsZGVmYXVsdFJvdXRlOiEwLGRlZXBMaW5rUHJvdmlkZXI6bmV3IG5OfSx7cm91dGVLaW5kOmhpLkZMQUdTLHBhdGg6Ii9mbGFncy8iLG5nQ29tcG9uZW50OlcyfV19ZnVuY3Rpb24geW50KG4pe3JldHVybih0LGUpPT57bGV0IGk9bih0LGUpO3JldHVybiBjb25zb2xlLmdyb3VwQ29sbGFwc2VkKGUudHlwZSksY29uc29sZS5sb2coInByZXYgc3RhdGUiLHQpLGNvbnNvbGUubG9nKCJhY3Rpb24iLGUpLGNvbnNvbGUubG9nKCJuZXh0IHN0YXRlIixpKSxjb25zb2xlLmdyb3VwRW5kKCksaX19ZnVuY3Rpb24gcWdlKCl7cmV0dXJuIHRDKCk/eW50Om49Pih0LGUpPT5uKHQsZSl9bk49cFcoW3JxKCldLG5OKTt2YXIgWWdlPW5ldyBwZSgiUm9vdCByZWR1Y2VycyB0b2tlbiIse2ZhY3Rvcnk6KCk9Pih7fSl9KSxYZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe3Byb3ZpZGVyczpbe3Byb3ZpZGU6V18sdXNlRmFjdG9yeTpxZ2UsbXVsdGk6ITB9XSxpbXBvcnRzOlt3ci5mb3JSb290KFlnZSx7cnVudGltZUNoZWNrczp7c3RyaWN0U3RhdGVJbW11dGFiaWxpdHk6ITAsc3RyaWN0QWN0aW9uSW1tdXRhYmlsaXR5OiEwLHN0cmljdEFjdGlvblNlcmlhbGl6YWJpbGl0eTohMSxzdHJpY3RTdGF0ZVNlcmlhbGl6YWJpbGl0eTohMX19KSxyby5mb3JSb290KFtdKV19KSxufSkoKSxRZ2U9KCgpPT57Y2xhc3Mgbnt9cmV0dXJuIG4uXHUwMjc1ZmFjPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcoZXx8bil9LG4uXHUwMjc1bW9kPUgoe3R5cGU6bn0pLG4uXHUwMjc1aW5qPVYoe30pLG59KSgpLEtnZT0oKCk9PntjbGFzcyBue31yZXR1cm4gbi5cdTAyNzVmYWM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyhlfHxuKX0sbi5cdTAyNzVtb2Q9SCh7dHlwZTpufSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbTWUsdE4sUWdlXX0pLG59KSgpLFM2PSgoKT0+e2NsYXNzIG57fXJldHVybiBuLlx1MDI3NWZhYz1mdW5jdGlvbihlKXtyZXR1cm4gbmV3KGV8fG4pfSxuLlx1MDI3NW1vZD1IKHt0eXBlOm4sYm9vdHN0cmFwOltVaWVdfSksbi5cdTAyNzVpbmo9Vih7aW1wb3J0czpbY3YsWmllLHRBLGVKLEpfLHppZSxxYy5yZWdpc3RlclJvdXRlcyhXZ2UpLEUyLFMyLGppZSxLZ2UsZWMsUWllLFdpZSxlcmUsbUksdHJlLHFpZSxUNCxyMix0TiwkSSwkMixYZ2UsVmdlXX0pLG59KSgpOyJsb2FkaW5nIiE9PWRvY3VtZW50LnJlYWR5U3RhdGU/eTUoKS5ib290c3RyYXBNb2R1bGUoUzYpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwoKT0+e3k1KCkuYm9vdHN0cmFwTW9kdWxlKFM2KX0pLGZ1bmN0aW9uKCl7aWYoYVgpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5hYmxlIHByb2QgbW9kZSBhZnRlciBwbGF0Zm9ybSBzZXR1cC4iKTtzWD0hMX0oKX0pKCk7Ci8qKiB2aW06IGV0OnRzPTQ6c3c9NDpzdHM9NAogKiBAbGljZW5zZSBSZXF1aXJlSlMgMi4zLjYgQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMuCiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBodHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9ibG9iL21hc3Rlci9MSUNFTlNFCiAqLwovL05vdCB1c2luZyBzdHJpY3Q6IHVuZXZlbiBzdHJpY3Qgc3VwcG9ydCBpbiBicm93c2VycywgIzM5MiwgYW5kIGNhdXNlcwovL3Byb2JsZW1zIHdpdGggcmVxdWlyZWpzLmV4ZWMoKS90cmFuc3BpbGVyIHBsdWdpbnMgdGhhdCBtYXkgbm90IGJlIHN0cmljdC4KLypqc2xpbnQgcmVnZXhwOiB0cnVlLCBub21lbjogdHJ1ZSwgc2xvcHB5OiB0cnVlICovCi8qZ2xvYmFsIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgaW1wb3J0U2NyaXB0cywgc2V0VGltZW91dCwgb3BlcmEgKi8KCnZhciByZXF1aXJlanMsIHJlcXVpcmUsIGRlZmluZTsKKGZ1bmN0aW9uIChnbG9iYWwsIHNldFRpbWVvdXQpIHsKICAgIHZhciByZXEsIHMsIGhlYWQsIGJhc2VFbGVtZW50LCBkYXRhTWFpbiwgc3JjLAogICAgICAgIGludGVyYWN0aXZlU2NyaXB0LCBjdXJyZW50bHlBZGRpbmdTY3JpcHQsIG1haW5TY3JpcHQsIHN1YlBhdGgsCiAgICAgICAgdmVyc2lvbiA9ICcyLjMuNicsCiAgICAgICAgY29tbWVudFJlZ0V4cCA9IC9cL1wqW1xzXFNdKj9cKlwvfChbXjoiJz1dfF4pXC9cLy4qJC9tZywKICAgICAgICBjanNSZXF1aXJlUmVnRXhwID0gL1teLl1ccypyZXF1aXJlXHMqXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLAogICAgICAgIGpzU3VmZml4UmVnRXhwID0gL1wuanMkLywKICAgICAgICBjdXJyRGlyUmVnRXhwID0gL15cLlwvLywKICAgICAgICBvcCA9IE9iamVjdC5wcm90b3R5cGUsCiAgICAgICAgb3N0cmluZyA9IG9wLnRvU3RyaW5nLAogICAgICAgIGhhc093biA9IG9wLmhhc093blByb3BlcnR5LAogICAgICAgIGlzQnJvd3NlciA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCksCiAgICAgICAgaXNXZWJXb3JrZXIgPSAhaXNCcm93c2VyICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzICE9PSAndW5kZWZpbmVkJywKICAgICAgICAvL1BTMyBpbmRpY2F0ZXMgbG9hZGVkIGFuZCBjb21wbGV0ZSwgYnV0IG5lZWQgdG8gd2FpdCBmb3IgY29tcGxldGUKICAgICAgICAvL3NwZWNpZmljYWxseS4gU2VxdWVuY2UgaXMgJ2xvYWRpbmcnLCAnbG9hZGVkJywgZXhlY3V0aW9uLAogICAgICAgIC8vIHRoZW4gJ2NvbXBsZXRlJy4gVGhlIFVBIGNoZWNrIGlzIHVuZm9ydHVuYXRlLCBidXQgbm90IHN1cmUgaG93CiAgICAgICAgLy90byBmZWF0dXJlIHRlc3Qgdy9vIGNhdXNpbmcgcGVyZiBpc3N1ZXMuCiAgICAgICAgcmVhZHlSZWdFeHAgPSBpc0Jyb3dzZXIgJiYgbmF2aWdhdG9yLnBsYXRmb3JtID09PSAnUExBWVNUQVRJT04gMycgPwogICAgICAgICAgICAgICAgICAgICAgL15jb21wbGV0ZSQvIDogL14oY29tcGxldGV8bG9hZGVkKSQvLAogICAgICAgIGRlZkNvbnRleHROYW1lID0gJ18nLAogICAgICAgIC8vT2ggdGhlIHRyYWdlZHksIGRldGVjdGluZyBvcGVyYS4gU2VlIHRoZSB1c2FnZSBvZiBpc09wZXJhIGZvciByZWFzb24uCiAgICAgICAgaXNPcGVyYSA9IHR5cGVvZiBvcGVyYSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BlcmEudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgT3BlcmFdJywKICAgICAgICBjb250ZXh0cyA9IHt9LAogICAgICAgIGNmZyA9IHt9LAogICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW10sCiAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSBmYWxzZTsKCiAgICAvL0NvdWxkIG1hdGNoIHNvbWV0aGluZyBsaWtlICcpLy9jb21tZW50JywgZG8gbm90IGxvc2UgdGhlIHByZWZpeCB0byBjb21tZW50LgogICAgZnVuY3Rpb24gY29tbWVudFJlcGxhY2UobWF0Y2gsIHNpbmdsZVByZWZpeCkgewogICAgICAgIHJldHVybiBzaW5nbGVQcmVmaXggfHwgJyc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzQXJyYXkoaXQpIHsKICAgICAgICByZXR1cm4gb3N0cmluZy5jYWxsKGl0KSA9PT0gJ1tvYmplY3QgQXJyYXldJzsKICAgIH0KCiAgICAvKioKICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgaXRlcmF0aW5nIG92ZXIgYW4gYXJyYXkuIElmIHRoZSBmdW5jIHJldHVybnMKICAgICAqIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2goYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyeS5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSBiYWNrd2FyZHMuIElmIHRoZSBmdW5jCiAgICAgKiByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgaXQgd2lsbCBicmVhayBvdXQgb2YgdGhlIGxvb3AuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hSZXZlcnNlKGFyeSwgZnVuYykgewogICAgICAgIGlmIChhcnkpIHsKICAgICAgICAgICAgdmFyIGk7CiAgICAgICAgICAgIGZvciAoaSA9IGFyeS5sZW5ndGggLSAxOyBpID4gLTE7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgaWYgKGFyeVtpXSAmJiBmdW5jKGFyeVtpXSwgaSwgYXJ5KSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhc1Byb3Aob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwgcHJvcCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0T3duKG9iaiwgcHJvcCkgewogICAgICAgIHJldHVybiBoYXNQcm9wKG9iaiwgcHJvcCkgJiYgb2JqW3Byb3BdOwogICAgfQoKICAgIC8qKgogICAgICogQ3ljbGVzIG92ZXIgcHJvcGVydGllcyBpbiBhbiBvYmplY3QgYW5kIGNhbGxzIGEgZnVuY3Rpb24gZm9yIGVhY2gKICAgICAqIHByb3BlcnR5IHZhbHVlLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIHRydXRoeSB2YWx1ZSwgdGhlbiB0aGUKICAgICAqIGl0ZXJhdGlvbiBpcyBzdG9wcGVkLgogICAgICovCiAgICBmdW5jdGlvbiBlYWNoUHJvcChvYmosIGZ1bmMpIHsKICAgICAgICB2YXIgcHJvcDsKICAgICAgICBmb3IgKHByb3AgaW4gb2JqKSB7CiAgICAgICAgICAgIGlmIChoYXNQcm9wKG9iaiwgcHJvcCkpIHsKICAgICAgICAgICAgICAgIGlmIChmdW5jKG9ialtwcm9wXSwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNpbXBsZSBmdW5jdGlvbiB0byBtaXggaW4gcHJvcGVydGllcyBmcm9tIHNvdXJjZSBpbnRvIHRhcmdldCwKICAgICAqIGJ1dCBvbmx5IGlmIHRhcmdldCBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2FtZSBuYW1lLgogICAgICovCiAgICBmdW5jdGlvbiBtaXhpbih0YXJnZXQsIHNvdXJjZSwgZm9yY2UsIGRlZXBTdHJpbmdNaXhpbikgewogICAgICAgIGlmIChzb3VyY2UpIHsKICAgICAgICAgICAgZWFjaFByb3Aoc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgIGlmIChmb3JjZSB8fCAhaGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZXBTdHJpbmdNaXhpbiAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICFpc0FycmF5KHZhbHVlKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0W3Byb3BdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtaXhpbih0YXJnZXRbcHJvcF0sIHZhbHVlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIC8vU2ltaWxhciB0byBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCwgYnV0IHRoZSAndGhpcycgb2JqZWN0IGlzIHNwZWNpZmllZAogICAgLy9maXJzdCwgc2luY2UgaXQgaXMgZWFzaWVyIHRvIHJlYWQvZmlndXJlIG91dCB3aGF0ICd0aGlzJyB3aWxsIGJlLgogICAgZnVuY3Rpb24gYmluZChvYmosIGZuKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG9iaiwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcmlwdHMoKSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWZhdWx0T25FcnJvcihlcnIpIHsKICAgICAgICB0aHJvdyBlcnI7CiAgICB9CgogICAgLy9BbGxvdyBnZXR0aW5nIGEgZ2xvYmFsIHRoYXQgaXMgZXhwcmVzc2VkIGluCiAgICAvL2RvdCBub3RhdGlvbiwgbGlrZSAnYS5iLmMnLgogICAgZnVuY3Rpb24gZ2V0R2xvYmFsKHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQogICAgICAgIHZhciBnID0gZ2xvYmFsOwogICAgICAgIGVhY2godmFsdWUuc3BsaXQoJy4nKSwgZnVuY3Rpb24gKHBhcnQpIHsKICAgICAgICAgICAgZyA9IGdbcGFydF07CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25zdHJ1Y3RzIGFuIGVycm9yIHdpdGggYSBwb2ludGVyIHRvIGFuIFVSTCB3aXRoIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaWQgdGhlIGVycm9yIElEIHRoYXQgbWFwcyB0byBhbiBJRCBvbiBhIHdlYiBwYWdlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgaHVtYW4gcmVhZGFibGUgZXJyb3IuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBbZXJyXSB0aGUgb3JpZ2luYWwgZXJyb3IsIGlmIHRoZXJlIGlzIG9uZS4KICAgICAqCiAgICAgKiBAcmV0dXJucyB7RXJyb3J9CiAgICAgKi8KICAgIGZ1bmN0aW9uIG1ha2VFcnJvcihpZCwgbXNnLCBlcnIsIHJlcXVpcmVNb2R1bGVzKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobXNnICsgJ1xuaHR0cHM6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjJyArIGlkKTsKICAgICAgICBlLnJlcXVpcmVUeXBlID0gaWQ7CiAgICAgICAgZS5yZXF1aXJlTW9kdWxlcyA9IHJlcXVpcmVNb2R1bGVzOwogICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgZS5vcmlnaW5hbEVycm9yID0gZXJyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZTsKICAgIH0KCiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvL0lmIGEgZGVmaW5lIGlzIGFscmVhZHkgaW4gcGxheSB2aWEgYW5vdGhlciBBTUQgbG9hZGVyLAogICAgICAgIC8vZG8gbm90IG92ZXJ3cml0ZS4KICAgICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHR5cGVvZiByZXF1aXJlanMgIT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVxdWlyZWpzKSkgewogICAgICAgICAgICAvL0RvIG5vdCBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgcmVxdWlyZWpzIGluc3RhbmNlLgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNmZyA9IHJlcXVpcmVqczsKICAgICAgICByZXF1aXJlanMgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgLy9BbGxvdyBmb3IgYSByZXF1aXJlIGNvbmZpZyBvYmplY3QKICAgIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRnVuY3Rpb24ocmVxdWlyZSkpIHsKICAgICAgICAvL2Fzc3VtZSBpdCBpcyBhIGNvbmZpZyBvYmplY3QuCiAgICAgICAgY2ZnID0gcmVxdWlyZTsKICAgICAgICByZXF1aXJlID0gdW5kZWZpbmVkOwogICAgfQoKICAgIGZ1bmN0aW9uIG5ld0NvbnRleHQoY29udGV4dE5hbWUpIHsKICAgICAgICB2YXIgaW5DaGVja0xvYWRlZCwgTW9kdWxlLCBjb250ZXh0LCBoYW5kbGVycywKICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQsCiAgICAgICAgICAgIGNvbmZpZyA9IHsKICAgICAgICAgICAgICAgIC8vRGVmYXVsdHMuIERvIG5vdCBzZXQgYSBkZWZhdWx0IGZvciBtYXAKICAgICAgICAgICAgICAgIC8vY29uZmlnIHRvIHNwZWVkIHVwIG5vcm1hbGl6ZSgpLCB3aGljaAogICAgICAgICAgICAgICAgLy93aWxsIHJ1biBmYXN0ZXIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KICAgICAgICAgICAgICAgIHdhaXRTZWNvbmRzOiA3LAogICAgICAgICAgICAgICAgYmFzZVVybDogJy4vJywKICAgICAgICAgICAgICAgIHBhdGhzOiB7fSwKICAgICAgICAgICAgICAgIGJ1bmRsZXM6IHt9LAogICAgICAgICAgICAgICAgcGtnczoge30sCiAgICAgICAgICAgICAgICBzaGltOiB7fSwKICAgICAgICAgICAgICAgIGNvbmZpZzoge30KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgLy9yZWdpc3RyeSBvZiBqdXN0IGVuYWJsZWQgbW9kdWxlcywgdG8gc3BlZWQKICAgICAgICAgICAgLy9jeWNsZSBicmVha2luZyBjb2RlIHdoZW4gbG90cyBvZiBtb2R1bGVzCiAgICAgICAgICAgIC8vYXJlIHJlZ2lzdGVyZWQsIGJ1dCBub3QgYWN0aXZhdGVkLgogICAgICAgICAgICBlbmFibGVkUmVnaXN0cnkgPSB7fSwKICAgICAgICAgICAgdW5kZWZFdmVudHMgPSB7fSwKICAgICAgICAgICAgZGVmUXVldWUgPSBbXSwKICAgICAgICAgICAgZGVmaW5lZCA9IHt9LAogICAgICAgICAgICB1cmxGZXRjaGVkID0ge30sCiAgICAgICAgICAgIGJ1bmRsZXNNYXAgPSB7fSwKICAgICAgICAgICAgcmVxdWlyZUNvdW50ZXIgPSAxLAogICAgICAgICAgICB1bm5vcm1hbGl6ZWRDb3VudGVyID0gMTsKCiAgICAgICAgLyoqCiAgICAgICAgICogVHJpbXMgdGhlIC4gYW5kIC4uIGZyb20gYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKiBJdCB3aWxsIGtlZXAgYSBsZWFkaW5nIHBhdGggc2VnbWVudCBpZiBhIC4uIHdpbGwgYmVjb21lCiAgICAgICAgICogdGhlIGZpcnN0IHBhdGggc2VnbWVudCwgdG8gaGVscCB3aXRoIG1vZHVsZSBuYW1lIGxvb2t1cHMsCiAgICAgICAgICogd2hpY2ggYWN0IGxpa2UgcGF0aHMsIGJ1dCBjYW4gYmUgcmVtYXBwZWQuIEJ1dCB0aGUgZW5kIHJlc3VsdCwKICAgICAgICAgKiBhbGwgcGF0aHMgdGhhdCB1c2UgdGhpcyBmdW5jdGlvbiBzaG91bGQgbG9vayBub3JtYWxpemVkLgogICAgICAgICAqIE5PVEU6IHRoaXMgbWV0aG9kIE1PRElGSUVTIHRoZSBpbnB1dCBhcnJheS4KICAgICAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnkgdGhlIGFycmF5IG9mIHBhdGggc2VnbWVudHMuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdHJpbURvdHMoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpLCBwYXJ0OwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBwYXJ0ID0gYXJ5W2ldOwogICAgICAgICAgICAgICAgaWYgKHBhcnQgPT09ICcuJykgewogICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgaSAtPSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXQgdGhlIHN0YXJ0LCBvciBwcmV2aW91cyB2YWx1ZSBpcyBzdGlsbCAuLiwKICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIHRoZW0gc28gdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGggaXQgbWF5CiAgICAgICAgICAgICAgICAgICAgLy8gc3RpbGwgd29yayB3aGVuIGNvbnZlcnRlZCB0byBhIHBhdGgsIGV2ZW4gdGhvdWdoCiAgICAgICAgICAgICAgICAgICAgLy8gYXMgYW4gSUQgaXQgaXMgbGVzcyB0aGFuIGlkZWFsLiBJbiBsYXJnZXIgcG9pbnQKICAgICAgICAgICAgICAgICAgICAvLyByZWxlYXNlcywgbWF5IGJlIGJldHRlciB0byBqdXN0IGtpY2sgb3V0IGFuIGVycm9yLgogICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwIHx8IChpID09PSAxICYmIGFyeVsyXSA9PT0gJy4uJykgfHwgYXJ5W2kgLSAxXSA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyeS5zcGxpY2UoaSAtIDEsIDIpOwogICAgICAgICAgICAgICAgICAgICAgICBpIC09IDI7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBHaXZlbiBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lLCBsaWtlIC4vc29tZXRoaW5nLCBub3JtYWxpemUgaXQgdG8KICAgICAgICAgKiBhIHJlYWwgbmFtZSB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBwYXRoLgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSByZWxhdGl2ZSBuYW1lCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IGJhc2VOYW1lIGEgcmVhbCBuYW1lIHRoYXQgdGhlIG5hbWUgYXJnIGlzIHJlbGF0aXZlCiAgICAgICAgICogdG8uCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBhcHBseU1hcCBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgdmFsdWUuIFNob3VsZAogICAgICAgICAqIG9ubHkgYmUgZG9uZSBpZiB0aGlzIG5vcm1hbGl6YXRpb24gaXMgZm9yIGEgZGVwZW5kZW5jeSBJRC4KICAgICAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBub3JtYWxpemVkIG5hbWUKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBub3JtYWxpemUobmFtZSwgYmFzZU5hbWUsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciBwa2dNYWluLCBtYXBWYWx1ZSwgbmFtZVBhcnRzLCBpLCBqLCBuYW1lU2VnbWVudCwgbGFzdEluZGV4LAogICAgICAgICAgICAgICAgZm91bmRNYXAsIGZvdW5kSSwgZm91bmRTdGFyTWFwLCBzdGFySSwgbm9ybWFsaXplZEJhc2VQYXJ0cywKICAgICAgICAgICAgICAgIGJhc2VQYXJ0cyA9IChiYXNlTmFtZSAmJiBiYXNlTmFtZS5zcGxpdCgnLycpKSwKICAgICAgICAgICAgICAgIG1hcCA9IGNvbmZpZy5tYXAsCiAgICAgICAgICAgICAgICBzdGFyTWFwID0gbWFwICYmIG1hcFsnKiddOwoKICAgICAgICAgICAgLy9BZGp1c3QgYW55IHJlbGF0aXZlIHBhdGhzLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9IG5hbWUubGVuZ3RoIC0gMTsKCiAgICAgICAgICAgICAgICAvLyBJZiB3YW50aW5nIG5vZGUgSUQgY29tcGF0aWJpbGl0eSwgc3RyaXAgLmpzIGZyb20gZW5kCiAgICAgICAgICAgICAgICAvLyBvZiBJRHMuIEhhdmUgdG8gZG8gdGhpcyBoZXJlLCBhbmQgbm90IGluIG5hbWVUb1VybAogICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBub2RlIGFsbG93cyBlaXRoZXIgLmpzIG9yIG5vbiAuanMgdG8gbWFwCiAgICAgICAgICAgICAgICAvLyB0byBzYW1lIGZpbGUuCiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLm5vZGVJZENvbXBhdCAmJiBqc1N1ZmZpeFJlZ0V4cC50ZXN0KG5hbWVbbGFzdEluZGV4XSkpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lW2xhc3RJbmRleF0gPSBuYW1lW2xhc3RJbmRleF0ucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIFN0YXJ0cyB3aXRoIGEgJy4nIHNvIG5lZWQgdGhlIGJhc2VOYW1lCiAgICAgICAgICAgICAgICBpZiAobmFtZVswXS5jaGFyQXQoMCkgPT09ICcuJyAmJiBiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAvL0NvbnZlcnQgYmFzZU5hbWUgdG8gYXJyYXksIGFuZCBsb3Agb2ZmIHRoZSBsYXN0IHBhcnQsCiAgICAgICAgICAgICAgICAgICAgLy9zbyB0aGF0IC4gbWF0Y2hlcyB0aGF0ICdkaXJlY3RvcnknIGFuZCBub3QgbmFtZSBvZiB0aGUgYmFzZU5hbWUncwogICAgICAgICAgICAgICAgICAgIC8vbW9kdWxlLiBGb3IgaW5zdGFuY2UsIGJhc2VOYW1lIG9mICdvbmUvdHdvL3RocmVlJywgbWFwcyB0bwogICAgICAgICAgICAgICAgICAgIC8vJ29uZS90d28vdGhyZWUuanMnLCBidXQgd2Ugd2FudCB0aGUgZGlyZWN0b3J5LCAnb25lL3R3bycgZm9yCiAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5vcm1hbGl6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZEJhc2VQYXJ0cyA9IGJhc2VQYXJ0cy5zbGljZSgwLCBiYXNlUGFydHMubGVuZ3RoIC0gMSk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vcm1hbGl6ZWRCYXNlUGFydHMuY29uY2F0KG5hbWUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyaW1Eb3RzKG5hbWUpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuam9pbignLycpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FwcGx5IG1hcCBjb25maWcgaWYgYXZhaWxhYmxlLgogICAgICAgICAgICBpZiAoYXBwbHlNYXAgJiYgbWFwICYmIChiYXNlUGFydHMgfHwgc3Rhck1hcCkpIHsKICAgICAgICAgICAgICAgIG5hbWVQYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTsKCiAgICAgICAgICAgICAgICBvdXRlckxvb3A6IGZvciAoaSA9IG5hbWVQYXJ0cy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICBuYW1lU2VnbWVudCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBsb25nZXN0IGJhc2VOYW1lIHNlZ21lbnQgbWF0Y2ggaW4gdGhlIGNvbmZpZy4KICAgICAgICAgICAgICAgICAgICAgICAgLy9TbywgZG8gam9pbnMgb24gdGhlIGJpZ2dlc3QgdG8gc21hbGxlc3QgbGVuZ3RocyBvZiBiYXNlUGFydHMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGJhc2VQYXJ0cy5sZW5ndGg7IGogPiAwOyBqIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFZhbHVlID0gZ2V0T3duKG1hcCwgYmFzZVBhcnRzLnNsaWNlKDAsIGopLmpvaW4oJy8nKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iYXNlTmFtZSBzZWdtZW50IGhhcyBjb25maWcsIGZpbmQgaWYgaXQgaGFzIG9uZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwVmFsdWUsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXRjaCwgdXBkYXRlIG5hbWUgdG8gdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNYXAgPSBtYXBWYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJID0gaTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJMb29wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9DaGVjayBmb3IgYSBzdGFyIG1hcCBtYXRjaCwgYnV0IGp1c3QgaG9sZCBvbiB0byBpdCwKICAgICAgICAgICAgICAgICAgICAvL2lmIHRoZXJlIGlzIGEgc2hvcnRlciBzZWdtZW50IG1hdGNoIGxhdGVyIGluIGEgbWF0Y2hpbmcKICAgICAgICAgICAgICAgICAgICAvL2NvbmZpZywgdGhlbiBmYXZvciBvdmVyIHRoaXMgc3RhciBtYXAuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFN0YXJNYXAgJiYgc3Rhck1hcCAmJiBnZXRPd24oc3Rhck1hcCwgbmFtZVNlZ21lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kU3Rhck1hcCA9IGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJJID0gaTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZE1hcCAmJiBmb3VuZFN0YXJNYXApIHsKICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IGZvdW5kU3Rhck1hcDsKICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBzdGFySTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZm91bmRNYXApIHsKICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMuc3BsaWNlKDAsIGZvdW5kSSwgZm91bmRNYXApOwogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHMuam9pbignLycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmFtZSBwb2ludHMgdG8gYSBwYWNrYWdlJ3MgbmFtZSwgdXNlCiAgICAgICAgICAgIC8vIHRoZSBwYWNrYWdlIG1haW4gaW5zdGVhZC4KICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbmFtZSk7CgogICAgICAgICAgICByZXR1cm4gcGtnTWFpbiA/IHBrZ01haW4gOiBuYW1lOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gcmVtb3ZlU2NyaXB0KG5hbWUpIHsKICAgICAgICAgICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgICAgICAgICAgZWFjaChzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKSA9PT0gbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnKSA9PT0gY29udGV4dC5jb250ZXh0TmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0Tm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBoYXNQYXRoRmFsbGJhY2soaWQpIHsKICAgICAgICAgICAgdmFyIHBhdGhDb25maWcgPSBnZXRPd24oY29uZmlnLnBhdGhzLCBpZCk7CiAgICAgICAgICAgIGlmIChwYXRoQ29uZmlnICYmIGlzQXJyYXkocGF0aENvbmZpZykgJiYgcGF0aENvbmZpZy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvL1BvcCBvZmYgdGhlIGZpcnN0IGFycmF5IHZhbHVlLCBzaW5jZSBpdCBmYWlsZWQsIGFuZAogICAgICAgICAgICAgICAgLy9yZXRyeQogICAgICAgICAgICAgICAgcGF0aENvbmZpZy5zaGlmdCgpOwogICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlLnVuZGVmKGlkKTsKCiAgICAgICAgICAgICAgICAvL0N1c3RvbSByZXF1aXJlIHRoYXQgZG9lcyBub3QgZG8gbWFwIHRyYW5zbGF0aW9uLCBzaW5jZQogICAgICAgICAgICAgICAgLy9JRCBpcyAiYWJzb2x1dGUiLCBhbHJlYWR5IG1hcHBlZC9yZXNvbHZlZC4KICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUobnVsbCwgewogICAgICAgICAgICAgICAgICAgIHNraXBNYXA6IHRydWUKICAgICAgICAgICAgICAgIH0pKFtpZF0pOwoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvL1R1cm5zIGEgcGx1Z2luIXJlc291cmNlIHRvIFtwbHVnaW4sIHJlc291cmNlXQogICAgICAgIC8vd2l0aCB0aGUgcGx1Z2luIGJlaW5nIHVuZGVmaW5lZCBpZiB0aGUgbmFtZQogICAgICAgIC8vZGlkIG5vdCBoYXZlIGEgcGx1Z2luIHByZWZpeC4KICAgICAgICBmdW5jdGlvbiBzcGxpdFByZWZpeChuYW1lKSB7CiAgICAgICAgICAgIHZhciBwcmVmaXgsCiAgICAgICAgICAgICAgICBpbmRleCA9IG5hbWUgPyBuYW1lLmluZGV4T2YoJyEnKSA6IC0xOwogICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwogICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGluZGV4ICsgMSwgbmFtZS5sZW5ndGgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBbcHJlZml4LCBuYW1lXTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENyZWF0ZXMgYSBtb2R1bGUgbWFwcGluZyB0aGF0IGluY2x1ZGVzIHBsdWdpbiBwcmVmaXgsIG1vZHVsZQogICAgICAgICAqIG5hbWUsIGFuZCBwYXRoLiBJZiBwYXJlbnRNb2R1bGVNYXAgaXMgcHJvdmlkZWQgaXQgd2lsbAogICAgICAgICAqIGFsc28gbm9ybWFsaXplIHRoZSBuYW1lIHZpYSByZXF1aXJlLm5vcm1hbGl6ZSgpCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSB0aGUgbW9kdWxlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BhcmVudE1vZHVsZU1hcF0gcGFyZW50IG1vZHVsZSBtYXAKICAgICAgICAgKiBmb3IgdGhlIG1vZHVsZSBuYW1lLCB1c2VkIHRvIHJlc29sdmUgcmVsYXRpdmUgbmFtZXMuCiAgICAgICAgICogQHBhcmFtIHtCb29sZWFufSBpc05vcm1hbGl6ZWQ6IGlzIHRoZSBJRCBhbHJlYWR5IG5vcm1hbGl6ZWQuCiAgICAgICAgICogVGhpcyBpcyB0cnVlIGlmIHRoaXMgY2FsbCBpcyBkb25lIGZvciBhIGRlZmluZSgpIG1vZHVsZSBJRC4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwOiBhcHBseSB0aGUgbWFwIGNvbmZpZyB0byB0aGUgSUQuCiAgICAgICAgICogU2hvdWxkIG9ubHkgYmUgdHJ1ZSBpZiB0aGlzIG1hcCBpcyBmb3IgYSBkZXBlbmRlbmN5LgogICAgICAgICAqCiAgICAgICAgICogQHJldHVybnMge09iamVjdH0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBtYWtlTW9kdWxlTWFwKG5hbWUsIHBhcmVudE1vZHVsZU1hcCwgaXNOb3JtYWxpemVkLCBhcHBseU1hcCkgewogICAgICAgICAgICB2YXIgdXJsLCBwbHVnaW5Nb2R1bGUsIHN1ZmZpeCwgbmFtZVBhcnRzLAogICAgICAgICAgICAgICAgcHJlZml4ID0gbnVsbCwKICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSBwYXJlbnRNb2R1bGVNYXAgPyBwYXJlbnRNb2R1bGVNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSB0cnVlLAogICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSAnJzsKCiAgICAgICAgICAgIC8vSWYgbm8gbmFtZSwgdGhlbiBpdCBtZWFucyBpdCBpcyBhIHJlcXVpcmUgY2FsbCwgZ2VuZXJhdGUgYW4KICAgICAgICAgICAgLy9pbnRlcm5hbCBuYW1lLgogICAgICAgICAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgICAgICAgIGlzRGVmaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICBuYW1lID0gJ19AcicgKyAocmVxdWlyZUNvdW50ZXIgKz0gMSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG5hbWVQYXJ0cyA9IHNwbGl0UHJlZml4KG5hbWUpOwogICAgICAgICAgICBwcmVmaXggPSBuYW1lUGFydHNbMF07CiAgICAgICAgICAgIG5hbWUgPSBuYW1lUGFydHNbMV07CgogICAgICAgICAgICBpZiAocHJlZml4KSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBub3JtYWxpemUocHJlZml4LCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICBwbHVnaW5Nb2R1bGUgPSBnZXRPd24oZGVmaW5lZCwgcHJlZml4KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9BY2NvdW50IGZvciByZWxhdGl2ZSBwYXRocyBpZiB0aGVyZSBpcyBhIGJhc2UgbmFtZS4KICAgICAgICAgICAgaWYgKG5hbWUpIHsKICAgICAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdpbk1vZHVsZSAmJiBwbHVnaW5Nb2R1bGUubm9ybWFsaXplKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vUGx1Z2luIGlzIGxvYWRlZCwgdXNlIGl0cyBub3JtYWxpemUgbWV0aG9kLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IHBsdWdpbk1vZHVsZS5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXN0ZWQgcGx1Z2luIHJlZmVyZW5jZXMsIHRoZW4gZG8gbm90IHRyeSB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyBub3JtYWxpemUsIGFzIGl0IHdpbGwgbm90IG5vcm1hbGl6ZSBjb3JyZWN0bHkuIFRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGxhY2VzIGEgcmVzdHJpY3Rpb24gb24gcmVzb3VyY2VJZHMsIGFuZCB0aGUgbG9uZ2VyCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm0gc29sdXRpb24gaXMgbm90IHRvIG5vcm1hbGl6ZSB1bnRpbCBwbHVnaW5zIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkZWQgYW5kIGFsbCBub3JtYWxpemF0aW9ucyB0byBhbGxvdyBmb3IgYXN5bmMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9hZGluZyBvZiBhIGxvYWRlciBwbHVnaW4uIEJ1dCBmb3Igbm93LCBmaXhlcyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbW9uIHVzZXMuIERldGFpbHMgaW4gIzExMzEKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lLmluZGV4T2YoJyEnKSA9PT0gLTEgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgcmVndWxhciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBub3JtYWxpemUobmFtZSwgcGFyZW50TmFtZSwgYXBwbHlNYXApOwoKICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZWQgbmFtZSBtYXkgYmUgYSBwbHVnaW4gSUQgZHVlIHRvIG1hcCBjb25maWcKICAgICAgICAgICAgICAgICAgICAvL2FwcGxpY2F0aW9uIGluIG5vcm1hbGl6ZS4gVGhlIG1hcCBjb25maWcgdmFsdWVzIG11c3QKICAgICAgICAgICAgICAgICAgICAvL2FscmVhZHkgYmUgbm9ybWFsaXplZCwgc28gZG8gbm90IG5lZWQgdG8gcmVkbyB0aGF0IHBhcnQuCiAgICAgICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobm9ybWFsaXplZE5hbWUpOwogICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKICAgICAgICAgICAgICAgICAgICBpc05vcm1hbGl6ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICB1cmwgPSBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgdGhlIGlkIGlzIGEgcGx1Z2luIGlkIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgaWYgaXQgbmVlZHMKICAgICAgICAgICAgLy9ub3JtYWxpemF0aW9uLCBzdGFtcCBpdCB3aXRoIGEgdW5pcXVlIElEIHNvIHR3byBtYXRjaGluZyByZWxhdGl2ZQogICAgICAgICAgICAvL2lkcyB0aGF0IG1heSBjb25mbGljdCBjYW4gYmUgc2VwYXJhdGUuCiAgICAgICAgICAgIHN1ZmZpeCA9IHByZWZpeCAmJiAhcGx1Z2luTW9kdWxlICYmICFpc05vcm1hbGl6ZWQgPwogICAgICAgICAgICAgICAgICAgICAnX3Vubm9ybWFsaXplZCcgKyAodW5ub3JtYWxpemVkQ291bnRlciArPSAxKSA6CiAgICAgICAgICAgICAgICAgICAgICcnOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIHByZWZpeDogcHJlZml4LAogICAgICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWUsCiAgICAgICAgICAgICAgICBwYXJlbnRNYXA6IHBhcmVudE1vZHVsZU1hcCwKICAgICAgICAgICAgICAgIHVubm9ybWFsaXplZDogISFzdWZmaXgsCiAgICAgICAgICAgICAgICB1cmw6IHVybCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZTogb3JpZ2luYWxOYW1lLAogICAgICAgICAgICAgICAgaXNEZWZpbmU6IGlzRGVmaW5lLAogICAgICAgICAgICAgICAgaWQ6IChwcmVmaXggPwogICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggKyAnIScgKyBub3JtYWxpemVkTmFtZSA6CiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lKSArIHN1ZmZpeAogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gZ2V0TW9kdWxlKGRlcE1hcCkgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmICghbW9kKSB7CiAgICAgICAgICAgICAgICBtb2QgPSByZWdpc3RyeVtpZF0gPSBuZXcgY29udGV4dC5Nb2R1bGUoZGVwTWFwKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG1vZDsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIG9uKGRlcE1hcCwgbmFtZSwgZm4pIHsKICAgICAgICAgICAgdmFyIGlkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICBpZiAoaGFzUHJvcChkZWZpbmVkLCBpZCkgJiYKICAgICAgICAgICAgICAgICAgICAoIW1vZCB8fCBtb2QuZGVmaW5lRW1pdENvbXBsZXRlKSkgewogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZpbmVkJykgewogICAgICAgICAgICAgICAgICAgIGZuKGRlZmluZWRbaWRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1vZCA9IGdldE1vZHVsZShkZXBNYXApOwogICAgICAgICAgICAgICAgaWYgKG1vZC5lcnJvciAmJiBuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgZm4obW9kLmVycm9yKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbW9kLm9uKG5hbWUsIGZuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb25FcnJvcihlcnIsIGVycmJhY2spIHsKICAgICAgICAgICAgdmFyIGlkcyA9IGVyci5yZXF1aXJlTW9kdWxlcywKICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgZXJyYmFjayhlcnIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZWFjaChpZHMsIGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IGVycm9yIG9uIG1vZHVsZSwgc28gaXQgc2tpcHMgdGltZW91dCBjaGVja3MuCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBpZiAoIW5vdGlmaWVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxLm9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogSW50ZXJuYWwgbWV0aG9kIHRvIHRyYW5zZmVyIGdsb2JhbFF1ZXVlIGl0ZW1zIHRvIHRoaXMgY29udGV4dCdzCiAgICAgICAgICogZGVmUXVldWUuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gdGFrZUdsb2JhbFF1ZXVlKCkgewogICAgICAgICAgICAvL1B1c2ggYWxsIHRoZSBnbG9iYWxEZWZRdWV1ZSBpdGVtcyBpbnRvIHRoZSBjb250ZXh0J3MgZGVmUXVldWUKICAgICAgICAgICAgaWYgKGdsb2JhbERlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgZWFjaChnbG9iYWxEZWZRdWV1ZSwgZnVuY3Rpb24ocXVldWVJdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gcXVldWVJdGVtWzBdOwogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUucHVzaChxdWV1ZUl0ZW0pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZSA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBoYW5kbGVycyA9IHsKICAgICAgICAgICAgJ3JlcXVpcmUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLnJlcXVpcmUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kLnJlcXVpcmU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1vZC5tYXApKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2V4cG9ydHMnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBtb2QudXNpbmdFeHBvcnRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGlmIChtb2QubWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5leHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGVmaW5lZFttb2QubWFwLmlkXSA9IG1vZC5leHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5leHBvcnRzID0gZGVmaW5lZFttb2QubWFwLmlkXSA9IHt9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdtb2R1bGUnOiBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kLm1vZHVsZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QubW9kdWxlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1vZC5tb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtb2QubWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICB1cmk6IG1vZC5tYXAudXJsLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRPd24oY29uZmlnLmNvbmZpZywgbW9kLm1hcC5pZCkgfHwge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IG1vZC5leHBvcnRzIHx8IChtb2QuZXhwb3J0cyA9IHt9KQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgZnVuY3Rpb24gY2xlYW5SZWdpc3RyeShpZCkgewogICAgICAgICAgICAvL0NsZWFuIHVwIG1hY2hpbmVyeSB1c2VkIGZvciB3YWl0aW5nIG1vZHVsZXMuCiAgICAgICAgICAgIGRlbGV0ZSByZWdpc3RyeVtpZF07CiAgICAgICAgICAgIGRlbGV0ZSBlbmFibGVkUmVnaXN0cnlbaWRdOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gYnJlYWtDeWNsZShtb2QsIHRyYWNlZCwgcHJvY2Vzc2VkKSB7CiAgICAgICAgICAgIHZhciBpZCA9IG1vZC5tYXAuaWQ7CgogICAgICAgICAgICBpZiAobW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICBtb2QuZW1pdCgnZXJyb3InLCBtb2QuZXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdHJhY2VkW2lkXSA9IHRydWU7CiAgICAgICAgICAgICAgICBlYWNoKG1vZC5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGRlcElkID0gZGVwTWFwLmlkLAogICAgICAgICAgICAgICAgICAgICAgICBkZXAgPSBnZXRPd24ocmVnaXN0cnksIGRlcElkKTsKCiAgICAgICAgICAgICAgICAgICAgLy9Pbmx5IGZvcmNlIHRoaW5ncyB0aGF0IGhhdmUgbm90IGNvbXBsZXRlZAogICAgICAgICAgICAgICAgICAgIC8vYmVpbmcgZGVmaW5lZCwgc28gc3RpbGwgaW4gdGhlIHJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgIC8vYW5kIG9ubHkgaWYgaXQgaGFzIG5vdCBiZWVuIG1hdGNoZWQgdXAKICAgICAgICAgICAgICAgICAgICAvL2luIHRoZSBtb2R1bGUgYWxyZWFkeS4KICAgICAgICAgICAgICAgICAgICBpZiAoZGVwICYmICFtb2QuZGVwTWF0Y2hlZFtpXSAmJiAhcHJvY2Vzc2VkW2RlcElkXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0T3duKHRyYWNlZCwgZGVwSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QuZGVmaW5lRGVwKGksIGRlZmluZWRbZGVwSWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5jaGVjaygpOyAvL3Bhc3MgZmFsc2U/CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha0N5Y2xlKGRlcCwgdHJhY2VkLCBwcm9jZXNzZWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBwcm9jZXNzZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gY2hlY2tMb2FkZWQoKSB7CiAgICAgICAgICAgIHZhciBlcnIsIHVzaW5nUGF0aEZhbGxiYWNrLAogICAgICAgICAgICAgICAgd2FpdEludGVydmFsID0gY29uZmlnLndhaXRTZWNvbmRzICogMTAwMCwKICAgICAgICAgICAgICAgIC8vSXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgd2FpdCBpbnRlcnZhbCBieSB1c2luZyB3YWl0U2Vjb25kcyBvZiAwLgogICAgICAgICAgICAgICAgZXhwaXJlZCA9IHdhaXRJbnRlcnZhbCAmJiAoY29udGV4dC5zdGFydFRpbWUgKyB3YWl0SW50ZXJ2YWwpIDwgbmV3IERhdGUoKS5nZXRUaW1lKCksCiAgICAgICAgICAgICAgICBub0xvYWRzID0gW10sCiAgICAgICAgICAgICAgICByZXFDYWxscyA9IFtdLAogICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gZmFsc2UsCiAgICAgICAgICAgICAgICBuZWVkQ3ljbGVDaGVjayA9IHRydWU7CgogICAgICAgICAgICAvL0RvIG5vdCBib3RoZXIgaWYgdGhpcyBjYWxsIHdhcyBhIHJlc3VsdCBvZiBhIGN5Y2xlIGJyZWFrLgogICAgICAgICAgICBpZiAoaW5DaGVja0xvYWRlZCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRmlndXJlIG91dCB0aGUgc3RhdGUgb2YgYWxsIHRoZSBtb2R1bGVzLgogICAgICAgICAgICBlYWNoUHJvcChlbmFibGVkUmVnaXN0cnksIGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtb2QubWFwLAogICAgICAgICAgICAgICAgICAgIG1vZElkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgIC8vU2tpcCB0aGluZ3MgdGhhdCBhcmUgbm90IGVuYWJsZWQgb3IgaW4gZXJyb3Igc3RhdGUuCiAgICAgICAgICAgICAgICBpZiAoIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbWFwLmlzRGVmaW5lKSB7CiAgICAgICAgICAgICAgICAgICAgcmVxQ2FsbHMucHVzaChtb2QpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICghbW9kLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGUgbW9kdWxlIHNob3VsZCBiZSBleGVjdXRlZCwgYW5kIGl0IGhhcyBub3QKICAgICAgICAgICAgICAgICAgICAvL2JlZW4gaW5pdGVkIGFuZCB0aW1lIGlzIHVwLCByZW1lbWJlciBpdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgZXhwaXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZElkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdQYXRoRmFsbGJhY2sgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vTG9hZHMucHVzaChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVTY3JpcHQobW9kSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbW9kLmluaXRlZCAmJiBtb2QuZmV0Y2hlZCAmJiBtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGxMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXAucHJlZml4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL05vIHJlYXNvbiB0byBrZWVwIGxvb2tpbmcgZm9yIHVuZmluaXNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbG9hZGluZy4gSWYgdGhlIG9ubHkgc3RpbGxMb2FkaW5nIGlzIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcGx1Z2luIHJlc291cmNlIHRob3VnaCwga2VlcCBnb2luZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmVjYXVzZSBpdCBtYXkgYmUgdGhhdCBhIHBsdWdpbiByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyB3YWl0aW5nIG9uIGEgbm9uLXBsdWdpbiBjeWNsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobmVlZEN5Y2xlQ2hlY2sgPSBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKGV4cGlyZWQgJiYgbm9Mb2Fkcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIC8vSWYgd2FpdCB0aW1lIGV4cGlyZWQsIHRocm93IGVycm9yIG9mIHVubG9hZGVkIG1vZHVsZXMuCiAgICAgICAgICAgICAgICBlcnIgPSBtYWtlRXJyb3IoJ3RpbWVvdXQnLCAnTG9hZCB0aW1lb3V0IGZvciBtb2R1bGVzOiAnICsgbm9Mb2FkcywgbnVsbCwgbm9Mb2Fkcyk7CiAgICAgICAgICAgICAgICBlcnIuY29udGV4dE5hbWUgPSBjb250ZXh0LmNvbnRleHROYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Ob3QgZXhwaXJlZCwgY2hlY2sgZm9yIGEgY3ljbGUuCiAgICAgICAgICAgIGlmIChuZWVkQ3ljbGVDaGVjaykgewogICAgICAgICAgICAgICAgZWFjaChyZXFDYWxscywgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUobW9kLCB7fSwge30pOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vSWYgc3RpbGwgd2FpdGluZyBvbiBsb2FkcywgYW5kIHRoZSB3YWl0aW5nIGxvYWQgaXMgc29tZXRoaW5nCiAgICAgICAgICAgIC8vb3RoZXIgdGhhbiBhIHBsdWdpbiByZXNvdXJjZSwgb3IgdGhlcmUgYXJlIHN0aWxsIG91dHN0YW5kaW5nCiAgICAgICAgICAgIC8vc2NyaXB0cywgdGhlbiBqdXN0IHRyeSBiYWNrIGxhdGVyLgogICAgICAgICAgICBpZiAoKCFleHBpcmVkIHx8IHVzaW5nUGF0aEZhbGxiYWNrKSAmJiBzdGlsbExvYWRpbmcpIHsKICAgICAgICAgICAgICAgIC8vU29tZXRoaW5nIGlzIHN0aWxsIHdhaXRpbmcgdG8gbG9hZC4gV2FpdCBmb3IgaXQsIGJ1dCBvbmx5CiAgICAgICAgICAgICAgICAvL2lmIGEgdGltZW91dCBpcyBub3QgYWxyZWFkeSBpbiBlZmZlY3QuCiAgICAgICAgICAgICAgICBpZiAoKGlzQnJvd3NlciB8fCBpc1dlYldvcmtlcikgJiYgIWNoZWNrTG9hZGVkVGltZW91dElkKSB7CiAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWRUaW1lb3V0SWQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0sIDUwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5DaGVja0xvYWRlZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgTW9kdWxlID0gZnVuY3Rpb24gKG1hcCkgewogICAgICAgICAgICB0aGlzLmV2ZW50cyA9IGdldE93bih1bmRlZkV2ZW50cywgbWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgdGhpcy5tYXAgPSBtYXA7CiAgICAgICAgICAgIHRoaXMuc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbWFwLmlkKTsKICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdOwogICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWQgPSBbXTsKICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzID0ge307CiAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgPSAwOwoKICAgICAgICAgICAgLyogdGhpcy5leHBvcnRzIHRoaXMuZmFjdG9yeQogICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBbXSwKICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkLCB0aGlzLmZldGNoZWQKICAgICAgICAgICAgKi8KICAgICAgICB9OwoKICAgICAgICBNb2R1bGUucHJvdG90eXBlID0gewogICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoZGVwTWFwcywgZmFjdG9yeSwgZXJyYmFjaywgb3B0aW9ucykgewogICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgogICAgICAgICAgICAgICAgLy9EbyBub3QgZG8gbW9yZSBpbml0cyBpZiBhbHJlYWR5IGRvbmUuIENhbiBoYXBwZW4gaWYgdGhlcmUKICAgICAgICAgICAgICAgIC8vYXJlIG11bHRpcGxlIGRlZmluZSBjYWxscyBmb3IgdGhlIHNhbWUgbW9kdWxlLiBUaGF0IGlzIG5vdAogICAgICAgICAgICAgICAgLy9hIG5vcm1hbCwgY29tbW9uIGNhc2UsIGJ1dCBpdCBpcyBhbHNvIG5vdCB1bmV4cGVjdGVkLgogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7CgogICAgICAgICAgICAgICAgaWYgKGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ2lzdGVyIGZvciBlcnJvcnMgb24gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbignZXJyb3InLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG5vIGVycmJhY2sgYWxyZWFkeSwgYnV0IHRoZXJlIGFyZSBlcnJvciBsaXN0ZW5lcnMKICAgICAgICAgICAgICAgICAgICAvL29uIHRoaXMgbW9kdWxlLCBzZXQgdXAgYW4gZXJyYmFjayB0byBwYXNzIHRvIHRoZSBkZXBzLgogICAgICAgICAgICAgICAgICAgIGVycmJhY2sgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9EbyBhIGNvcHkgb2YgdGhlIGRlcGVuZGVuY3kgYXJyYXksIHNvIHRoYXQKICAgICAgICAgICAgICAgIC8vc291cmNlIGlucHV0cyBhcmUgbm90IG1vZGlmaWVkLiBGb3IgZXhhbXBsZQogICAgICAgICAgICAgICAgLy8ic2hpbSIgZGVwcyBhcmUgcGFzc2VkIGluIGhlcmUgZGlyZWN0bHksIGFuZAogICAgICAgICAgICAgICAgLy9kb2luZyBhIGRpcmVjdCBtb2RpZmljYXRpb24gb2YgdGhlIGRlcE1hcHMgYXJyYXkKICAgICAgICAgICAgICAgIC8vd291bGQgYWZmZWN0IHRoYXQgY29uZmlnLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gZGVwTWFwcyAmJiBkZXBNYXBzLnNsaWNlKDApOwoKICAgICAgICAgICAgICAgIHRoaXMuZXJyYmFjayA9IGVycmJhY2s7CgogICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB0aGlzIG1vZHVsZSBoYXMgYmUgaW5pdGlhbGl6ZWQKICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICB0aGlzLmlnbm9yZSA9IG9wdGlvbnMuaWdub3JlOwoKICAgICAgICAgICAgICAgIC8vQ291bGQgaGF2ZSBvcHRpb24gdG8gaW5pdCB0aGlzIG1vZHVsZSBpbiBlbmFibGVkIG1vZGUsCiAgICAgICAgICAgICAgICAvL29yIGNvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IG1hcmtlZCBhcyBlbmFibGVkLiBIb3dldmVyLAogICAgICAgICAgICAgICAgLy90aGUgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdW50aWwgaW5pdCBpcyBjYWxsZWQuIFNvCiAgICAgICAgICAgICAgICAvL2lmIGVuYWJsZWQgcHJldmlvdXNseSwgbm93IHRyaWdnZXIgZGVwZW5kZW5jaWVzIGFzIGVuYWJsZWQuCiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkIHx8IHRoaXMuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgIC8vRW5hYmxlIHRoaXMgbW9kdWxlIGFuZCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICAgICAgICAgLy9XaWxsIGNhbGwgdGhpcy5jaGVjaygpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZGVmaW5lRGVwOiBmdW5jdGlvbiAoaSwgZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgLy9CZWNhdXNlIG9mIGN5Y2xlcywgZGVmaW5lZCBjYWxsYmFjayBmb3IgYSBnaXZlbgogICAgICAgICAgICAgICAgLy9leHBvcnQgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZS4KICAgICAgICAgICAgICAgIGlmICghdGhpcy5kZXBNYXRjaGVkW2ldKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXRjaGVkW2ldID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50IC09IDE7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gZGVwRXhwb3J0czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGZldGNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5mZXRjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5mZXRjaGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LnN0YXJ0VGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CgogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwOwoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIG1hbmFnZXIgaXMgZm9yIGEgcGx1Z2luIG1hbmFnZWQgcmVzb3VyY2UsCiAgICAgICAgICAgICAgICAvL2FzayB0aGUgcGx1Z2luIHRvIGxvYWQgaXQgbm93LgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpbSkgewogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWFrZVJlcXVpcmUodGhpcy5tYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH0pKHRoaXMuc2hpbS5kZXBzIHx8IFtdLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZWd1bGFyIGRlcGVuZGVuY3kuCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5wcmVmaXggPyB0aGlzLmNhbGxQbHVnaW4oKSA6IHRoaXMubG9hZCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIHVybCA9IHRoaXMubWFwLnVybDsKCiAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgIGlmICghdXJsRmV0Y2hlZFt1cmxdKSB7CiAgICAgICAgICAgICAgICAgICAgdXJsRmV0Y2hlZFt1cmxdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWQodGhpcy5tYXAuaWQsIHVybCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2hlY2tzIGlmIHRoZSBtb2R1bGUgaXMgcmVhZHkgdG8gZGVmaW5lIGl0c2VsZiwgYW5kIGlmIHNvLAogICAgICAgICAgICAgKiBkZWZpbmUgaXQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjaGVjazogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQgfHwgdGhpcy5lbmFibGluZykgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB2YXIgZXJyLCBjanNNb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgaWQgPSB0aGlzLm1hcC5pZCwKICAgICAgICAgICAgICAgICAgICBkZXBFeHBvcnRzID0gdGhpcy5kZXBFeHBvcnRzLAogICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IHRoaXMuZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCBpZiBub3QgYWxyZWFkeSBpbiB0aGUgZGVmUXVldWUuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGNvbnRleHQuZGVmUXVldWVNYXAsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIHRoaXMuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5kZWZpbmluZykgewogICAgICAgICAgICAgICAgICAgIC8vVGhlIGZhY3RvcnkgY291bGQgdHJpZ2dlciBhbm90aGVyIHJlcXVpcmUgY2FsbAogICAgICAgICAgICAgICAgICAgIC8vdGhhdCB3b3VsZCByZXN1bHQgaW4gY2hlY2tpbmcgdGhpcyBtb2R1bGUgdG8KICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSBpdHNlbGYgYWdhaW4uIElmIGFscmVhZHkgaW4gdGhlIHByb2Nlc3MKICAgICAgICAgICAgICAgICAgICAvL29mIGRvaW5nIHRoYXQsIHNraXAgdGhpcyB3b3JrLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXBDb3VudCA8IDEgJiYgIXRoaXMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihmYWN0b3J5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBpcyBhbiBlcnJvciBsaXN0ZW5lciwgZmF2b3IgcGFzc2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byB0aGF0IGluc3RlYWQgb2YgdGhyb3dpbmcgYW4gZXJyb3IuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL29ubHkgZG8gaXQgZm9yIGRlZmluZSgpJ2QgIG1vZHVsZXMuIHJlcXVpcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJyYmFja3Mgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZm9yIGZhaWx1cmVzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZWlyIGNhbGxiYWNrcyAoIzY5OSkuIEhvd2V2ZXIgaWYgYSBnbG9iYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25FcnJvciBpcyBzZXQsIHVzZSB0aGF0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmV2ZW50cy5lcnJvciAmJiB0aGlzLm1hcC5pc0RlZmluZSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvciAhPT0gZGVmYXVsdE9uRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY29udGV4dC5leGVjQ2IoaWQsIGZhY3RvcnksIGRlcEV4cG9ydHMsIGV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmF2b3IgcmV0dXJuIHZhbHVlIG92ZXIgZXhwb3J0cy4gSWYgbm9kZS9janMgaW4gcGxheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZW4gd2lsbCBub3QgaGF2ZSBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIEZhdm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb2R1bGUuZXhwb3J0cyBhc3NpZ25tZW50IG92ZXIgZXhwb3J0cyBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgZXhwb3J0cyA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2pzTW9kdWxlID0gdGhpcy5tb2R1bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNqc01vZHVsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzID0gY2pzTW9kdWxlLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVzaW5nRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4cG9ydHMgYWxyZWFkeSBzZXQgdGhlIGRlZmluZWQgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSB0aGlzLmV4cG9ydHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1hcCA9IHRoaXMubWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTW9kdWxlcyA9IHRoaXMubWFwLmlzRGVmaW5lID8gW3RoaXMubWFwLmlkXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVUeXBlID0gdGhpcy5tYXAuaXNEZWZpbmUgPyAnZGVmaW5lJyA6ICdyZXF1aXJlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcigodGhpcy5lcnJvciA9IGVycikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIGxpdGVyYWwgdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBmYWN0b3J5OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydHMgPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWFwLmlzRGVmaW5lICYmICF0aGlzLmlnbm9yZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZFtpZF0gPSBleHBvcnRzOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEub25SZXNvdXJjZUxvYWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzTG9hZE1hcHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNMb2FkTWFwcy5wdXNoKGRlcE1hcC5ub3JtYWxpemVkTWFwIHx8IGRlcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLm9uUmVzb3VyY2VMb2FkKGNvbnRleHQsIHRoaXMubWFwLCByZXNMb2FkTWFwcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2xlYW4gdXAKICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9GaW5pc2hlZCB0aGUgZGVmaW5lIHN0YWdlLiBBbGxvdyBjYWxsaW5nIGNoZWNrIGFnYWluCiAgICAgICAgICAgICAgICAgICAgLy90byBhbGxvdyBkZWZpbmUgbm90aWZpY2F0aW9ucyBiZWxvdyBpbiB0aGUgY2FzZSBvZiBhCiAgICAgICAgICAgICAgICAgICAgLy9jeWNsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlZmluZWQgJiYgIXRoaXMuZGVmaW5lRW1pdHRlZCkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXR0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2RlZmluZWQnLCB0aGlzLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZUVtaXRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGNhbGxQbHVnaW46IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLm1hcCwKICAgICAgICAgICAgICAgICAgICBpZCA9IG1hcC5pZCwKICAgICAgICAgICAgICAgICAgICAvL01hcCBhbHJlYWR5IG5vcm1hbGl6ZWQgdGhlIHByZWZpeC4KICAgICAgICAgICAgICAgICAgICBwbHVnaW5NYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXgpOwoKICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKHBsdWdpbk1hcCk7CgogICAgICAgICAgICAgICAgb24ocGx1Z2luTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkLCBub3JtYWxpemVkTWFwLCBub3JtYWxpemVkTW9kLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCB0aGlzLm1hcC5pZCksCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLm1hcC5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gdGhpcy5tYXAucGFyZW50TWFwID8gdGhpcy5tYXAucGFyZW50TWFwLm5hbWUgOiBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKG1hcC5wYXJlbnRNYXAsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ1aWxkQ2FsbGJhY2s6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIC8vSWYgY3VycmVudCBtYXAgaXMgbm90IG5vcm1hbGl6ZWQsIHdhaXQgZm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAvL25vcm1hbGl6ZWQgbmFtZSB0byBsb2FkIGluc3RlYWQgb2YgY29udGludWluZy4KICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIHRoZSBJRCBpZiB0aGUgcGx1Z2luIGFsbG93cyBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsdWdpbi5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwbHVnaW4ubm9ybWFsaXplKG5hbWUsIGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIHx8ICcnOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL3ByZWZpeCBhbmQgbmFtZSBzaG91bGQgYWxyZWFkeSBiZSBub3JtYWxpemVkLCBubyBuZWVkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZm9yIGFwcGx5aW5nIG1hcCBjb25maWcgYWdhaW4gZWl0aGVyLgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTWFwID0gbWFrZU1vZHVsZU1hcChtYXAucHJlZml4ICsgJyEnICsgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAucGFyZW50TWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgb24obm9ybWFsaXplZE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5ub3JtYWxpemVkTWFwID0gbm9ybWFsaXplZE1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZTogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE1vZCA9IGdldE93bihyZWdpc3RyeSwgbm9ybWFsaXplZE1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkTW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgcGx1Z2luLCBzbyBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jYW4gYmUgdHJhY2VkIGZvciBjeWNsZXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChub3JtYWxpemVkTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLm9uKCdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0lmIGEgcGF0aHMgY29uZmlnLCB0aGVuIGp1c3QgbG9hZCB0aGF0IGZpbGUgaW5zdGVhZCB0bwogICAgICAgICAgICAgICAgICAgIC8vcmVzb2x2ZSB0aGUgcGx1Z2luLCBhcyBpdCBpcyBidWlsdCBpbnRvIHRoYXQgcGF0aHMgbGF5ZXIuCiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLnVybCA9IGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGxvYWQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXQoW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9LCBudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICBsb2FkLmVycm9yID0gYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycjsKICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gW2lkXTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIHRlbXAgdW5ub3JtYWxpemVkIG1vZHVsZXMgZm9yIHRoaXMgbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgd2lsbCBuZXZlciBiZSByZXNvbHZlZCBvdGhlcndpc2Ugbm93LgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaWQuaW5kZXhPZihpZCArICdfdW5ub3JtYWxpemVkJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KG1vZC5tYXAuaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9BbGxvdyBwbHVnaW5zIHRvIGxvYWQgb3RoZXIgY29kZSB3aXRob3V0IGhhdmluZyB0byBrbm93IHRoZQogICAgICAgICAgICAgICAgICAgIC8vY29udGV4dCBvciBob3cgdG8gJ2NvbXBsZXRlJyB0aGUgbG9hZC4KICAgICAgICAgICAgICAgICAgICBsb2FkLmZyb21UZXh0ID0gYmluZCh0aGlzLCBmdW5jdGlvbiAodGV4dCwgdGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2R1bGVOYW1lID0gbWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVNYXAgPSBtYWtlTW9kdWxlTWFwKG1vZHVsZU5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW50ZXJhY3RpdmUgPSB1c2VJbnRlcmFjdGl2ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgb2YgMi4xLjAsIHN1cHBvcnQganVzdCBwYXNzaW5nIHRoZSB0ZXh0LCB0byByZWluZm9yY2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9mcm9tVGV4dCBvbmx5IGJlaW5nIGNhbGxlZCBvbmNlIHBlciByZXNvdXJjZS4gU3RpbGwKICAgICAgICAgICAgICAgICAgICAgICAgLy9zdXBwb3J0IG9sZCBzdHlsZSBvZiBwYXNzaW5nIG1vZHVsZU5hbWUgYnV0IGRpc2NhcmQKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IG1vZHVsZU5hbWUgaW4gZmF2b3Igb2YgdGhlIGludGVybmFsIHJlZi4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRBbHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0QWx0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1R1cm4gb2ZmIGludGVyYWN0aXZlIHNjcmlwdCBtYXRjaGluZyBmb3IgSUUgZm9yIGFueSBkZWZpbmUKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxscyBpbiB0aGUgdGV4dCwgdGhlbiB0dXJuIGl0IGJhY2sgb24gYXQgdGhlIGVuZC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1ByaW1lIHRoZSBzeXN0ZW0gYnkgY3JlYXRpbmcgYSBtb2R1bGUgaW5zdGFuY2UgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9UcmFuc2ZlciBhbnkgY29uZmlnIHRvIHRoaXMgb3RoZXIgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcChjb25maWcuY29uZmlnLCBpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5jb25maWdbbW9kdWxlTmFtZV0gPSBjb25maWcuY29uZmlnW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5leGVjKHRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ2Zyb210ZXh0ZXZhbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tVGV4dCBldmFsIGZvciAnICsgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgZmFpbGVkOiAnICsgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgcGx1Z2luCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gobW9kdWxlTWFwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3VwcG9ydCBhbm9ueW1vdXMgbW9kdWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIHZhbHVlIG9mIHRoYXQgbW9kdWxlIHRvIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvL3Jlc291cmNlIElELgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFJlcXVpcmUoW21vZHVsZU5hbWVdLCBsb2FkKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9Vc2UgcGFyZW50TmFtZSBoZXJlIHNpbmNlIHRoZSBwbHVnaW4ncyBuYW1lIGlzIG5vdCByZWxpYWJsZSwKICAgICAgICAgICAgICAgICAgICAvL2NvdWxkIGJlIHNvbWUgd2VpcmQgc3RyaW5nIHdpdGggbm8gcGF0aCB0aGF0IGFjdHVhbGx5IHdhbnRzIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZWZlcmVuY2UgdGhlIHBhcmVudE5hbWUncyBwYXRoLgogICAgICAgICAgICAgICAgICAgIHBsdWdpbi5sb2FkKG1hcC5uYW1lLCBsb2NhbFJlcXVpcmUsIGxvYWQsIGNvbmZpZyk7CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luTWFwc1twbHVnaW5NYXAuaWRdID0gcGx1Z2luTWFwOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBlbmFibGVkUmVnaXN0cnlbdGhpcy5tYXAuaWRdID0gdGhpczsKICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9TZXQgZmxhZyBtZW50aW9uaW5nIHRoYXQgdGhlIG1vZHVsZSBpcyBlbmFibGluZywKICAgICAgICAgICAgICAgIC8vc28gdGhhdCBpbW1lZGlhdGUgY2FsbHMgdG8gdGhlIGRlZmluZWQgY2FsbGJhY2tzCiAgICAgICAgICAgICAgICAvL2ZvciBkZXBlbmRlbmNpZXMgZG8gbm90IHRyaWdnZXIgaW5hZHZlcnRlbnQgbG9hZAogICAgICAgICAgICAgICAgLy93aXRoIHRoZSBkZXBDb3VudCBzdGlsbCBiZWluZyB6ZXJvLgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgLy9FbmFibGUgZWFjaCBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoKHRoaXMuZGVwTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwTWFwLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlkLCBtb2QsIGhhbmRsZXI7CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwTWFwID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0RlcGVuZGVuY3kgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgZGVwTWFwCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHdpcmVkIHVwIHRvIHRoaXMgbW9kdWxlLgogICAgICAgICAgICAgICAgICAgICAgICBkZXBNYXAgPSBtYWtlTW9kdWxlTWFwKGRlcE1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5tYXAuaXNEZWZpbmUgPyB0aGlzLm1hcCA6IHRoaXMubWFwLnBhcmVudE1hcCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuc2tpcE1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwc1tpXSA9IGRlcE1hcDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBnZXRPd24oaGFuZGxlcnMsIGRlcE1hcC5pZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBFeHBvcnRzW2ldID0gaGFuZGxlcih0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBDb3VudCArPSAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZGVmaW5lZCcsIGJpbmQodGhpcywgZnVuY3Rpb24gKGRlcEV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuZGVmZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURlcChpLCBkZXBFeHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb24oZGVwTWFwLCAnZXJyb3InLCBiaW5kKHRoaXMsIHRoaXMuZXJyYmFjaykpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXZlbnRzLmVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBkaXJlY3QgZXJyYmFjayBvbiB0aGlzIG1vZHVsZSwgYnV0IHNvbWV0aGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxzZSBpcyBsaXN0ZW5pbmcgZm9yIGVycm9ycywgc28gYmUgc3VyZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIHRoZSBlcnJvciBjb3JyZWN0bHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlkID0gZGVwTWFwLmlkOwogICAgICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXTsKCiAgICAgICAgICAgICAgICAgICAgLy9Ta2lwIHNwZWNpYWwgbW9kdWxlcyBsaWtlICdyZXF1aXJlJywgJ2V4cG9ydHMnLCAnbW9kdWxlJwogICAgICAgICAgICAgICAgICAgIC8vQWxzbywgZG9uJ3QgY2FsbCBlbmFibGUgaWYgaXQgaXMgYWxyZWFkeSBlbmFibGVkLAogICAgICAgICAgICAgICAgICAgIC8vaW1wb3J0YW50IGluIGNpcmN1bGFyIGRlcGVuZGVuY3kgY2FzZXMuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGhhbmRsZXJzLCBpZCkgJiYgbW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShkZXBNYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIHBsdWdpbiB0aGF0IGlzIHVzZWQgaW4KICAgICAgICAgICAgICAgIC8vYSBkZXBlbmRlbmN5CiAgICAgICAgICAgICAgICBlYWNoUHJvcCh0aGlzLnBsdWdpbk1hcHMsIGJpbmQodGhpcywgZnVuY3Rpb24gKHBsdWdpbk1hcCkgewogICAgICAgICAgICAgICAgICAgIHZhciBtb2QgPSBnZXRPd24ocmVnaXN0cnksIHBsdWdpbk1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCAmJiAhbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5lbmFibGUocGx1Z2luTWFwLCB0aGlzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgdGhpcy5lbmFibGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIHRoaXMuY2hlY2soKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG9uOiBmdW5jdGlvbiAobmFtZSwgY2IpIHsKICAgICAgICAgICAgICAgIHZhciBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIGlmICghY2JzKSB7CiAgICAgICAgICAgICAgICAgICAgY2JzID0gdGhpcy5ldmVudHNbbmFtZV0gPSBbXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNicy5wdXNoKGNiKTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIGVtaXQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHsKICAgICAgICAgICAgICAgIGVhY2godGhpcy5ldmVudHNbbmFtZV0sIGZ1bmN0aW9uIChjYikgewogICAgICAgICAgICAgICAgICAgIGNiKGV2dCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnZXJyb3InKSB7CiAgICAgICAgICAgICAgICAgICAgLy9Ob3cgdGhhdCB0aGUgZXJyb3IgaGFuZGxlciB3YXMgdHJpZ2dlcmVkLCByZW1vdmUKICAgICAgICAgICAgICAgICAgICAvL3RoZSBsaXN0ZW5lcnMsIHNpbmNlIHRoaXMgYnJva2VuIE1vZHVsZSBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgIC8vY2FuIHN0YXkgYXJvdW5kIGZvciBhIHdoaWxlIGluIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudHNbbmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjYWxsR2V0TW9kdWxlKGFyZ3MpIHsKICAgICAgICAgICAgLy9Ta2lwIG1vZHVsZXMgYWxyZWFkeSBkZWZpbmVkLgogICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgYXJnc1swXSkpIHsKICAgICAgICAgICAgICAgIGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKGFyZ3NbMF0sIG51bGwsIHRydWUpKS5pbml0KGFyZ3NbMV0sIGFyZ3NbMl0pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihub2RlLCBmdW5jLCBuYW1lLCBpZU5hbWUpIHsKICAgICAgICAgICAgLy9GYXZvciBkZXRhY2hFdmVudCBiZWNhdXNlIG9mIElFOQogICAgICAgICAgICAvL2lzc3VlLCBzZWUgYXR0YWNoRXZlbnQvYWRkRXZlbnRMaXN0ZW5lciBjb21tZW50IGVsc2V3aGVyZQogICAgICAgICAgICAvL2luIHRoaXMgZmlsZS4KICAgICAgICAgICAgaWYgKG5vZGUuZGV0YWNoRXZlbnQgJiYgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElmIG5vdCBpdCB3aWxsIHRocm93IGFuIGVycm9yLCB3aGljaCB3aWxsIGJlCiAgICAgICAgICAgICAgICAvL3VzZWZ1bCB0byBrbm93LgogICAgICAgICAgICAgICAgaWYgKGllTmFtZSkgewogICAgICAgICAgICAgICAgICAgIG5vZGUuZGV0YWNoRXZlbnQoaWVOYW1lLCBmdW5jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGFuIGV2ZW50IGZyb20gYSBzY3JpcHQgbm9kZSwgZ2V0IHRoZSByZXF1aXJlanMgaW5mbyBmcm9tIGl0LAogICAgICAgICAqIGFuZCB0aGVuIHJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBvbiB0aGUgbm9kZS4KICAgICAgICAgKiBAcGFyYW0ge0V2ZW50fSBldnQKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldFNjcmlwdERhdGEoZXZ0KSB7CiAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgIC8vdG8gc3VwcG9ydCBhbmQgc3RpbGwgbWFrZXMgc2Vuc2UuCiAgICAgICAgICAgIHZhciBub2RlID0gZXZ0LmN1cnJlbnRUYXJnZXQgfHwgZXZ0LnNyY0VsZW1lbnQ7CgogICAgICAgICAgICAvL1JlbW92ZSB0aGUgbGlzdGVuZXJzIG9uY2UgaGVyZS4KICAgICAgICAgICAgcmVtb3ZlTGlzdGVuZXIobm9kZSwgY29udGV4dC5vblNjcmlwdExvYWQsICdsb2FkJywgJ29ucmVhZHlzdGF0ZWNoYW5nZScpOwogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsICdlcnJvcicpOwoKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsCiAgICAgICAgICAgICAgICBpZDogbm9kZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJykKICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGludGFrZURlZmluZXMoKSB7CiAgICAgICAgICAgIHZhciBhcmdzOwoKICAgICAgICAgICAgLy9BbnkgZGVmaW5lZCBtb2R1bGVzIGluIHRoZSBnbG9iYWwgcXVldWUsIGludGFrZSB0aGVtIG5vdy4KICAgICAgICAgICAgdGFrZUdsb2JhbFF1ZXVlKCk7CgogICAgICAgICAgICAvL01ha2Ugc3VyZSBhbnkgcmVtYWluaW5nIGRlZlF1ZXVlIGl0ZW1zIGdldCBwcm9wZXJseSBwcm9jZXNzZWQuCiAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGFyZ3MgPSBkZWZRdWV1ZS5zaGlmdCgpOwogICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ21pc21hdGNoJywgJ01pc21hdGNoZWQgYW5vbnltb3VzIGRlZmluZSgpIG1vZHVsZTogJyArCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL2FyZ3MgYXJlIGlkLCBkZXBzLCBmYWN0b3J5LiBTaG91bGQgYmUgbm9ybWFsaXplZCBieSB0aGUKICAgICAgICAgICAgICAgICAgICAvL2RlZmluZSgpIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoYXJncyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwogICAgICAgIH0KCiAgICAgICAgY29udGV4dCA9IHsKICAgICAgICAgICAgY29uZmlnOiBjb25maWcsCiAgICAgICAgICAgIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSwKICAgICAgICAgICAgcmVnaXN0cnk6IHJlZ2lzdHJ5LAogICAgICAgICAgICBkZWZpbmVkOiBkZWZpbmVkLAogICAgICAgICAgICB1cmxGZXRjaGVkOiB1cmxGZXRjaGVkLAogICAgICAgICAgICBkZWZRdWV1ZTogZGVmUXVldWUsCiAgICAgICAgICAgIGRlZlF1ZXVlTWFwOiB7fSwKICAgICAgICAgICAgTW9kdWxlOiBNb2R1bGUsCiAgICAgICAgICAgIG1ha2VNb2R1bGVNYXA6IG1ha2VNb2R1bGVNYXAsCiAgICAgICAgICAgIG5leHRUaWNrOiByZXEubmV4dFRpY2ssCiAgICAgICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogU2V0IGEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlnIG9iamVjdCB0byBpbnRlZ3JhdGUuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBjb25maWd1cmU6IGZ1bmN0aW9uIChjZmcpIHsKICAgICAgICAgICAgICAgIC8vTWFrZSBzdXJlIHRoZSBiYXNlVXJsIGVuZHMgaW4gYSBzbGFzaC4KICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybCkgewogICAgICAgICAgICAgICAgICAgIGlmIChjZmcuYmFzZVVybC5jaGFyQXQoY2ZnLmJhc2VVcmwubGVuZ3RoIC0gMSkgIT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICBjZmcuYmFzZVVybCArPSAnLyc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgb2xkIHN0eWxlIHVybEFyZ3Mgc3RyaW5nIHRvIGEgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNmZy51cmxBcmdzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgIHZhciB1cmxBcmdzID0gY2ZnLnVybEFyZ3M7CiAgICAgICAgICAgICAgICAgICAgY2ZnLnVybEFyZ3MgPSBmdW5jdGlvbihpZCwgdXJsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgdXJsQXJnczsKICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU2F2ZSBvZmYgdGhlIHBhdGhzIHNpbmNlIHRoZXkgcmVxdWlyZSBzcGVjaWFsIHByb2Nlc3NpbmcsCiAgICAgICAgICAgICAgICAvL3RoZXkgYXJlIGFkZGl0aXZlLgogICAgICAgICAgICAgICAgdmFyIHNoaW0gPSBjb25maWcuc2hpbSwKICAgICAgICAgICAgICAgICAgICBvYmpzID0gewogICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlczogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBtYXA6IHRydWUKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZywgZnVuY3Rpb24gKHZhbHVlLCBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9ianNbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKGNvbmZpZ1twcm9wXSwgdmFsdWUsIHRydWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1twcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIC8vUmV2ZXJzZSBtYXAgdGhlIGJ1bmRsZXMKICAgICAgICAgICAgICAgIGlmIChjZmcuYnVuZGxlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKGNmZy5idW5kbGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCh2YWx1ZSwgZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlc01hcFt2XSA9IHByb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vTWVyZ2Ugc2hpbQogICAgICAgICAgICAgICAgaWYgKGNmZy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLnNoaW0sIGZ1bmN0aW9uICh2YWx1ZSwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIHN0cnVjdHVyZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsdWUuZXhwb3J0cyB8fCB2YWx1ZS5pbml0KSAmJiAhdmFsdWUuZXhwb3J0c0ZuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5leHBvcnRzRm4gPSBjb250ZXh0Lm1ha2VTaGltRXhwb3J0cyh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgc2hpbVtpZF0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICBjb25maWcuc2hpbSA9IHNoaW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9BZGp1c3QgcGFja2FnZXMgaWYgbmVjZXNzYXJ5LgogICAgICAgICAgICAgICAgaWYgKGNmZy5wYWNrYWdlcykgewogICAgICAgICAgICAgICAgICAgIGVhY2goY2ZnLnBhY2thZ2VzLCBmdW5jdGlvbiAocGtnT2JqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiwgbmFtZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBrZ09iaiA9IHR5cGVvZiBwa2dPYmogPT09ICdzdHJpbmcnID8ge25hbWU6IHBrZ09ian0gOiBwa2dPYmo7CgogICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGtnT2JqLm5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wYXRoc1tuYW1lXSA9IHBrZ09iai5sb2NhdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TYXZlIHBvaW50ZXIgdG8gbWFpbiBtb2R1bGUgSUQgZm9yIHBrZyBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICAvL1JlbW92ZSBsZWFkaW5nIGRvdCBpbiBtYWluLCBzbyBtYWluIHBhdGhzIGFyZSBub3JtYWxpemVkLAogICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCByZW1vdmUgYW55IHRyYWlsaW5nIC5qcywgc2luY2UgZGlmZmVyZW50IHBhY2thZ2UKICAgICAgICAgICAgICAgICAgICAgICAgLy9lbnZzIGhhdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zOiBzb21lIHVzZSBhIG1vZHVsZSBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAvL3NvbWUgdXNlIGEgZmlsZSBuYW1lLgogICAgICAgICAgICAgICAgICAgICAgICBjb25maWcucGtnc1tuYW1lXSA9IHBrZ09iai5uYW1lICsgJy8nICsgKHBrZ09iai5tYWluIHx8ICdtYWluJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKGN1cnJEaXJSZWdFeHAsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGFyZSBhbnkgIndhaXRpbmcgdG8gZXhlY3V0ZSIgbW9kdWxlcyBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAvL3VwZGF0ZSB0aGUgbWFwcyBmb3IgdGhlbSwgc2luY2UgdGhlaXIgaW5mbywgbGlrZSBVUkxzIHRvIGxvYWQsCiAgICAgICAgICAgICAgICAvL21heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCwgaWQpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIG1vZHVsZSBhbHJlYWR5IGhhcyBpbml0IGNhbGxlZCwgc2luY2UgaXQgaXMgdG9vCiAgICAgICAgICAgICAgICAgICAgLy9sYXRlIHRvIG1vZGlmeSB0aGVtLCBhbmQgaWdub3JlIHVubm9ybWFsaXplZCBvbmVzCiAgICAgICAgICAgICAgICAgICAgLy9zaW5jZSB0aGV5IGFyZSB0cmFuc2llbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2QuaW5pdGVkICYmICFtb2QubWFwLnVubm9ybWFsaXplZCkgewogICAgICAgICAgICAgICAgICAgICAgICBtb2QubWFwID0gbWFrZU1vZHVsZU1hcChpZCwgbnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9JZiBhIGRlcHMgYXJyYXkgb3IgYSBjb25maWcgY2FsbGJhY2sgaXMgc3BlY2lmaWVkLCB0aGVuIGNhbGwKICAgICAgICAgICAgICAgIC8vcmVxdWlyZSB3aXRoIHRob3NlIGFyZ3MuIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmVxdWlyZSBpcyBkZWZpbmVkIGFzIGEKICAgICAgICAgICAgICAgIC8vY29uZmlnIG9iamVjdCBiZWZvcmUgcmVxdWlyZS5qcyBpcyBsb2FkZWQuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLmRlcHMgfHwgY2ZnLmNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXF1aXJlKGNmZy5kZXBzIHx8IFtdLCBjZmcuY2FsbGJhY2spOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVNoaW1FeHBvcnRzOiBmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuKCkgewogICAgICAgICAgICAgICAgICAgIHZhciByZXQ7CiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmluaXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdmFsdWUuaW5pdC5hcHBseShnbG9iYWwsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQgfHwgKHZhbHVlLmV4cG9ydHMgJiYgZ2V0R2xvYmFsKHZhbHVlLmV4cG9ydHMpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmbjsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIG1ha2VSZXF1aXJlOiBmdW5jdGlvbiAocmVsTWFwLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2NhbFJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1hcCwgcmVxdWlyZU1vZDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlQnVpbGRDYWxsYmFjayAmJiBjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5fX3JlcXVpcmVKc0J1aWxkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwcyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ludmFsaWQgY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdyZXF1aXJlYXJncycsICdJbnZhbGlkIHJlcXVpcmUgY2FsbCcpLCBlcnJiYWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiByZXF1aXJlfGV4cG9ydHN8bW9kdWxlIGFyZSByZXF1ZXN0ZWQsIGdldCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy92YWx1ZSBmb3IgdGhlbSBmcm9tIHRoZSBzcGVjaWFsIGhhbmRsZXJzLiBDYXZlYXQ6CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBvbmx5IHdvcmtzIHdoaWxlIG1vZHVsZSBpcyBiZWluZyBkZWZpbmVkLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsTWFwICYmIGhhc1Byb3AoaGFuZGxlcnMsIGRlcHMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlcnNbZGVwc10ocmVnaXN0cnlbcmVsTWFwLmlkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vU3luY2hyb25vdXMgYWNjZXNzIHRvIG9uZSBtb2R1bGUuIElmIHJlcXVpcmUuZ2V0IGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYXZhaWxhYmxlIChhcyBpbiB0aGUgTm9kZSBhZGFwdGVyKSwgcHJlZmVyIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXEuZ2V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxLmdldChjb250ZXh0LCBkZXBzLCByZWxNYXAsIGxvY2FsUmVxdWlyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplIG1vZHVsZSBuYW1lLCBpZiBpdCBjb250YWlucyAuIG9yIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwcywgcmVsTWFwLCBmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wKGRlZmluZWQsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub3Rsb2FkZWQnLCAnTW9kdWxlIG5hbWUgIicgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQgZm9yIGNvbnRleHQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbE1hcCA/ICcnIDogJy4gVXNlIHJlcXVpcmUoW10pJykpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0dyYWIgZGVmaW5lcyB3YWl0aW5nIGluIHRoZSBnbG9iYWwgcXVldWUuCiAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAvL01hcmsgYWxsIHRoZSBkZXBlbmRlbmNpZXMgYXMgbmVlZGluZyB0byBiZSBsb2FkZWQuCiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5uZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vU29tZSBkZWZpbmVzIGNvdWxkIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlIGNhbGwsIGNvbGxlY3QgdGhlbS4KICAgICAgICAgICAgICAgICAgICAgICAgaW50YWtlRGVmaW5lcygpOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZCA9IGdldE1vZHVsZShtYWtlTW9kdWxlTWFwKG51bGwsIHJlbE1hcCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdG9yZSBpZiBtYXAgY29uZmlnIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoaXMgcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGwgZm9yIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5za2lwTWFwID0gb3B0aW9ucy5za2lwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZU1vZC5pbml0KGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tMb2FkZWQoKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBtaXhpbihsb2NhbFJlcXVpcmUsIHsKICAgICAgICAgICAgICAgICAgICBpc0Jyb3dzZXI6IGlzQnJvd3NlciwKCiAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSArIC5leHRlbnNpb24gaW50byBhbiBVUkwgcGF0aC4KICAgICAgICAgICAgICAgICAgICAgKiAqUmVxdWlyZXMqIHRoZSB1c2Ugb2YgYSBtb2R1bGUgbmFtZS4gSXQgZG9lcyBub3Qgc3VwcG9ydCB1c2luZwogICAgICAgICAgICAgICAgICAgICAqIHBsYWluIFVSTHMgbGlrZSBuYW1lVG9VcmwuCiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgdG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lUGx1c0V4dCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBtb2R1bGVOYW1lUGx1c0V4dC5sYXN0SW5kZXhPZignLicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudCA9IG1vZHVsZU5hbWVQbHVzRXh0LnNwbGl0KCcvJylbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlbGF0aXZlID0gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQgPT09ICcuLic7CgogICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgYSBmaWxlIGV4dGVuc2lvbiBhbGlhcywgYW5kIGl0IGlzIG5vdCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy9kb3RzIGZyb20gYSByZWxhdGl2ZSBwYXRoLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xICYmICghaXNSZWxhdGl2ZSB8fCBpbmRleCA+IDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHQgPSBtb2R1bGVOYW1lUGx1c0V4dC5zdWJzdHJpbmcoaW5kZXgsIG1vZHVsZU5hbWVQbHVzRXh0Lmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lUGx1c0V4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0Lm5hbWVUb1VybChub3JtYWxpemUobW9kdWxlTmFtZVBsdXNFeHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbE1hcCAmJiByZWxNYXAuaWQsIHRydWUpLCBleHQsICB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9LAoKICAgICAgICAgICAgICAgICAgICBkZWZpbmVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZDogZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gbWFrZU1vZHVsZU1hcChpZCwgcmVsTWFwLCBmYWxzZSwgdHJ1ZSkuaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNQcm9wKGRlZmluZWQsIGlkKSB8fCBoYXNQcm9wKHJlZ2lzdHJ5LCBpZCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9Pbmx5IGFsbG93IHVuZGVmIG9uIHRvcCBsZXZlbCByZXF1aXJlIGNhbGxzCiAgICAgICAgICAgICAgICBpZiAoIXJlbE1hcCkgewogICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZS51bmRlZiA9IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgYW55IHdhaXRpbmcgZGVmaW5lKCkgY2FsbHMgdG8gdGhpcyBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAvL2ZpeCBmb3IgIzQwOAogICAgICAgICAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIHRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBtb2QudW5kZWZlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChpZCk7CgogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgZGVmaW5lZFtpZF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1cmxGZXRjaGVkW21hcC51cmxdOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdW5kZWZFdmVudHNbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiBxdWV1ZWQgZGVmaW5lcyB0b28uIEdvIGJhY2t3YXJkcwogICAgICAgICAgICAgICAgICAgICAgICAvL2luIGFycmF5IHNvIHRoYXQgdGhlIHNwbGljZXMgZG8gbm90CiAgICAgICAgICAgICAgICAgICAgICAgIC8vbWVzcyB1cCB0aGUgaXRlcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICBlYWNoUmV2ZXJzZShkZWZRdWV1ZSwgZnVuY3Rpb24oYXJncywgaSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmUXVldWUuc3BsaWNlKGksIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbnRleHQuZGVmUXVldWVNYXBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ib2xkIG9uIHRvIGxpc3RlbmVycyBpbiBjYXNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUgd2lsbCBiZSBhdHRlbXB0ZWQgdG8gYmUgcmVsb2FkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdXNpbmcgYSBkaWZmZXJlbnQgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZC5ldmVudHMuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmRXZlbnRzW2lkXSA9IG1vZC5ldmVudHM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5SZWdpc3RyeShpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbFJlcXVpcmU7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGVkIHRvIGVuYWJsZSBhIG1vZHVsZSBpZiBpdCBpcyBzdGlsbCBpbiB0aGUgcmVnaXN0cnkKICAgICAgICAgICAgICogYXdhaXRpbmcgZW5hYmxlbWVudC4gQSBzZWNvbmQgYXJnLCBwYXJlbnQsIHRoZSBwYXJlbnQgbW9kdWxlLAogICAgICAgICAgICAgKiBpcyBwYXNzZWQgaW4gZm9yIGNvbnRleHQsIHdoZW4gdGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieQogICAgICAgICAgICAgKiB0aGUgb3B0aW1pemVyLiBOb3Qgc2hvd24gaGVyZSB0byBrZWVwIGNvZGUgY29tcGFjdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGVuYWJsZTogZnVuY3Rpb24gKGRlcE1hcCkgewogICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgZGVwTWFwLmlkKTsKICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICBnZXRNb2R1bGUoZGVwTWFwKS5lbmFibGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdXNlZCBieSBlbnZpcm9ubWVudCBhZGFwdGVycyB0byBjb21wbGV0ZSBhIGxvYWQgZXZlbnQuCiAgICAgICAgICAgICAqIEEgbG9hZCBldmVudCBjb3VsZCBiZSBhIHNjcmlwdCBsb2FkIG9yIGp1c3QgYSBsb2FkIHBhc3MgZnJvbSBhIHN5bmNocm9ub3VzCiAgICAgICAgICAgICAqIGxvYWQgY2FsbC4KICAgICAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBwb3RlbnRpYWxseSBjb21wbGV0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbXBsZXRlTG9hZDogZnVuY3Rpb24gKG1vZHVsZU5hbWUpIHsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCwgYXJncywgbW9kLAogICAgICAgICAgICAgICAgICAgIHNoaW0gPSBnZXRPd24oY29uZmlnLnNoaW0sIG1vZHVsZU5hbWUpIHx8IHt9LAogICAgICAgICAgICAgICAgICAgIHNoRXhwb3J0cyA9IHNoaW0uZXhwb3J0czsKCiAgICAgICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoZGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IG1vZHVsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgYWxyZWFkeSBmb3VuZCBhbiBhbm9ueW1vdXMgbW9kdWxlIGFuZCBib3VuZCBpdAogICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoaXMgbmFtZSwgdGhlbiB0aGlzIGlzIHNvbWUgb3RoZXIgYW5vbiBtb2R1bGUKICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0aW5nIGZvciBpdHMgY29tcGxldGVMb2FkIHRvIGZpcmUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJnc1swXSA9PT0gbW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZvdW5kIG1hdGNoaW5nIGRlZmluZSBjYWxsIGZvciB0aGlzIHNjcmlwdCEKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQuZGVmUXVldWVNYXAgPSB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIHRoaXMgYWZ0ZXIgdGhlIGN5Y2xlIG9mIGNhbGxHZXRNb2R1bGUgaW4gY2FzZSB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICAvL29mIHRob3NlIGNhbGxzL2luaXQgY2FsbHMgY2hhbmdlcyB0aGUgcmVnaXN0cnkuCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmICghZm91bmQgJiYgIWhhc1Byb3AoZGVmaW5lZCwgbW9kdWxlTmFtZSkgJiYgbW9kICYmICFtb2QuaW5pdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lbmZvcmNlRGVmaW5lICYmICghc2hFeHBvcnRzIHx8ICFnZXRHbG9iYWwoc2hFeHBvcnRzKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1BhdGhGYWxsYmFjayhtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdub2RlZmluZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyBkZWZpbmUgY2FsbCBmb3IgJyArIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9BIHNjcmlwdCB0aGF0IGRvZXMgbm90IGNhbGwgZGVmaW5lKCksIHNvIGp1c3Qgc2ltdWxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGUgY2FsbCBmb3IgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxHZXRNb2R1bGUoW21vZHVsZU5hbWUsIChzaGltLmRlcHMgfHwgW10pLCBzaGltLmV4cG9ydHNGbl0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIENvbnZlcnRzIGEgbW9kdWxlIG5hbWUgdG8gYSBmaWxlIHBhdGguIFN1cHBvcnRzIGNhc2VzIHdoZXJlCiAgICAgICAgICAgICAqIG1vZHVsZU5hbWUgbWF5IGFjdHVhbGx5IGJlIGp1c3QgYW4gVVJMLgogICAgICAgICAgICAgKiBOb3RlIHRoYXQgaXQgKipkb2VzIG5vdCoqIGNhbGwgbm9ybWFsaXplIG9uIHRoZSBtb2R1bGVOYW1lLAogICAgICAgICAgICAgKiBpdCBpcyBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQuIFRoaXMgaXMgYW4KICAgICAgICAgICAgICogaW50ZXJuYWwgQVBJLCBub3QgYSBwdWJsaWMgb25lLiBVc2UgdG9VcmwgZm9yIHRoZSBwdWJsaWMgQVBJLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgbmFtZVRvVXJsOiBmdW5jdGlvbiAobW9kdWxlTmFtZSwgZXh0LCBza2lwRXh0KSB7CiAgICAgICAgICAgICAgICB2YXIgcGF0aHMsIHN5bXMsIGksIHBhcmVudE1vZHVsZSwgdXJsLAogICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGgsIGJ1bmRsZUlkLAogICAgICAgICAgICAgICAgICAgIHBrZ01haW4gPSBnZXRPd24oY29uZmlnLnBrZ3MsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgICAgIGlmIChwa2dNYWluKSB7CiAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSA9IHBrZ01haW47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYnVuZGxlSWQgPSBnZXRPd24oYnVuZGxlc01hcCwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKGJ1bmRsZUlkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKGJ1bmRsZUlkLCBleHQsIHNraXBFeHQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgYSBjb2xvbiBpcyBpbiB0aGUgVVJMLCBpdCBpbmRpY2F0ZXMgYSBwcm90b2NvbCBpcyB1c2VkIGFuZCBpdCBpcyBqdXN0CiAgICAgICAgICAgICAgICAvL2FuIFVSTCB0byBhIGZpbGUsIG9yIGlmIGl0IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIGNvbnRhaW5zIGEgcXVlcnkgYXJnIChpLmUuID8pCiAgICAgICAgICAgICAgICAvL29yIGVuZHMgd2l0aCAuanMsIHRoZW4gYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvIHVzZSBhbiB1cmwgYW5kIG5vdCBhIG1vZHVsZSBpZC4KICAgICAgICAgICAgICAgIC8vVGhlIHNsYXNoIGlzIGltcG9ydGFudCBmb3IgcHJvdG9jb2wtbGVzcyBVUkxzIGFzIHdlbGwgYXMgZnVsbCBwYXRocy4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtb2R1bGVOYW1lKSkgewogICAgICAgICAgICAgICAgICAgIC8vSnVzdCBhIHBsYWluIHBhdGgsIG5vdCBtb2R1bGUgbmFtZSBsb29rdXAsIHNvIGp1c3QgcmV0dXJuIGl0LgogICAgICAgICAgICAgICAgICAgIC8vQWRkIGV4dGVuc2lvbiBpZiBpdCBpcyBpbmNsdWRlZC4gVGhpcyBpcyBhIGJpdCB3b25reSwgb25seSBub24tLmpzIHRoaW5ncyBwYXNzCiAgICAgICAgICAgICAgICAgICAgLy9hbiBleHRlbnNpb24sIHRoaXMgbWV0aG9kIHByb2JhYmx5IG5lZWRzIHRvIGJlIHJld29ya2VkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IG1vZHVsZU5hbWUgKyAoZXh0IHx8ICcnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy9BIG1vZHVsZSB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBhIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBjb25maWcucGF0aHM7CgogICAgICAgICAgICAgICAgICAgIHN5bXMgPSBtb2R1bGVOYW1lLnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgLy9Gb3IgZWFjaCBtb2R1bGUgbmFtZSBzZWdtZW50LCBzZWUgaWYgdGhlcmUgaXMgYSBwYXRoCiAgICAgICAgICAgICAgICAgICAgLy9yZWdpc3RlcmVkIGZvciBpdC4gU3RhcnQgd2l0aCBtb3N0IHNwZWNpZmljIG5hbWUKICAgICAgICAgICAgICAgICAgICAvL2FuZCB3b3JrIHVwIGZyb20gaXQuCiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gc3ltcy5sZW5ndGg7IGkgPiAwOyBpIC09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kdWxlID0gc3ltcy5zbGljZSgwLCBpKS5qb2luKCcvJyk7CgogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gZ2V0T3duKHBhdGhzLCBwYXJlbnRNb2R1bGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbiBhcnJheSwgaXQgbWVhbnMgdGhlcmUgYXJlIGEgZmV3IGNob2ljZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nob29zZSB0aGUgb25lIHRoYXQgaXMgZGVzaXJlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50UGF0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRQYXRoID0gcGFyZW50UGF0aFswXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bXMuc3BsaWNlKDAsIGksIHBhcmVudFBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSm9pbiB0aGUgcGF0aCBwYXJ0cyB0b2dldGhlciwgdGhlbiBmaWd1cmUgb3V0IGlmIGJhc2VVcmwgaXMgbmVlZGVkLgogICAgICAgICAgICAgICAgICAgIHVybCA9IHN5bXMuam9pbignLycpOwogICAgICAgICAgICAgICAgICAgIHVybCArPSAoZXh0IHx8ICgvXmRhdGFcOnxeYmxvYlw6fFw/Ly50ZXN0KHVybCkgfHwgc2tpcEV4dCA/ICcnIDogJy5qcycpKTsKICAgICAgICAgICAgICAgICAgICB1cmwgPSAodXJsLmNoYXJBdCgwKSA9PT0gJy8nIHx8IHVybC5tYXRjaCgvXltcd1wrXC5cLV0rOi8pID8gJycgOiBjb25maWcuYmFzZVVybCkgKyB1cmw7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmxBcmdzICYmICEvXmJsb2JcOi8udGVzdCh1cmwpID8KICAgICAgICAgICAgICAgICAgICAgICB1cmwgKyBjb25maWcudXJsQXJncyhtb2R1bGVOYW1lLCB1cmwpIDogdXJsOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLy9EZWxlZ2F0ZXMgdG8gcmVxLmxvYWQuIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0bwogICAgICAgICAgICAvL2FsbG93IG92ZXJyaWRpbmcgaW4gdGhlIG9wdGltaXplci4KICAgICAgICAgICAgbG9hZDogZnVuY3Rpb24gKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgIHJlcS5sb2FkKGNvbnRleHQsIGlkLCB1cmwpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEV4ZWN1dGVzIGEgbW9kdWxlIGNhbGxiYWNrIGZ1bmN0aW9uLiBCcm9rZW4gb3V0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24KICAgICAgICAgICAgICogc29sZWx5IHRvIGFsbG93IHRoZSBidWlsZCBzeXN0ZW0gdG8gc2VxdWVuY2UgdGhlIGZpbGVzIGluIHRoZSBidWlsdAogICAgICAgICAgICAgKiBsYXllciBpbiB0aGUgcmlnaHQgc2VxdWVuY2UuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwcml2YXRlCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBleGVjQ2I6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgYXJncywgZXhwb3J0cykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KGV4cG9ydHMsIGFyZ3MpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIGNhbGxiYWNrIGZvciBzY3JpcHQgbG9hZHMsIHVzZWQgdG8gY2hlY2sgc3RhdHVzIG9mIGxvYWRpbmcuCiAgICAgICAgICAgICAqCiAgICAgICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dCB0aGUgZXZlbnQgZnJvbSB0aGUgYnJvd3NlciBmb3IgdGhlIHNjcmlwdAogICAgICAgICAgICAgKiB0aGF0IHdhcyBsb2FkZWQuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdExvYWQ6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIC8vVXNpbmcgY3VycmVudFRhcmdldCBpbnN0ZWFkIG9mIHRhcmdldCBmb3IgRmlyZWZveCAyLjAncyBzYWtlLiBOb3QKICAgICAgICAgICAgICAgIC8vYWxsIG9sZCBicm93c2VycyB3aWxsIGJlIHN1cHBvcnRlZCwgYnV0IHRoaXMgb25lIHdhcyBlYXN5IGVub3VnaAogICAgICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgICAgIGlmIChldnQudHlwZSA9PT0gJ2xvYWQnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkeVJlZ0V4cC50ZXN0KChldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudCkucmVhZHlTdGF0ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9SZXNldCBpbnRlcmFjdGl2ZSBzY3JpcHQgc28gYSBzY3JpcHQgbm9kZSBpcyBub3QgaGVsZCBvbnRvIGZvcgogICAgICAgICAgICAgICAgICAgIC8vdG8gbG9uZy4KICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZVNjcmlwdCA9IG51bGw7CgogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvdXQgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBhbmQgdGhlIGNvbnRleHQuCiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRTY3JpcHREYXRhKGV2dCk7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQoZGF0YS5pZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ2FsbGJhY2sgZm9yIHNjcmlwdCBlcnJvcnMuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBvblNjcmlwdEVycm9yOiBmdW5jdGlvbiAoZXZ0KSB7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgIGlmICghaGFzUGF0aEZhbGxiYWNrKGRhdGEuaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudHMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChyZWdpc3RyeSwgZnVuY3Rpb24odmFsdWUsIGtleSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19AcicpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLmRlcE1hcHMsIGZ1bmN0aW9uKGRlcE1hcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBNYXAuaWQgPT09IGRhdGEuaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uRXJyb3IobWFrZUVycm9yKCdzY3JpcHRlcnJvcicsICdTY3JpcHQgZXJyb3IgZm9yICInICsgZGF0YS5pZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJlbnRzLmxlbmd0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciLCBuZWVkZWQgYnk6ICcgKyBwYXJlbnRzLmpvaW4oJywgJykgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIicpLCBldnQsIFtkYXRhLmlkXSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgY29udGV4dC5yZXF1aXJlID0gY29udGV4dC5tYWtlUmVxdWlyZSgpOwogICAgICAgIHJldHVybiBjb250ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogTWFpbiBlbnRyeSBwb2ludC4KICAgICAqCiAgICAgKiBJZiB0aGUgb25seSBhcmd1bWVudCB0byByZXF1aXJlIGlzIGEgc3RyaW5nLCB0aGVuIHRoZSBtb2R1bGUgdGhhdAogICAgICogaXMgcmVwcmVzZW50ZWQgYnkgdGhhdCBzdHJpbmcgaXMgZmV0Y2hlZCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCiAgICAgKgogICAgICogSWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGFuIGFycmF5LCB0aGVuIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBhbiBhcnJheQogICAgICogb2YgZGVwZW5kZW5jeSBzdHJpbmcgbmFtZXMgdG8gZmV0Y2guIEFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxiYWNrIGNhbgogICAgICogYmUgc3BlY2lmaWVkIHRvIGV4ZWN1dGUgd2hlbiBhbGwgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUuCiAgICAgKgogICAgICogTWFrZSBhIGxvY2FsIHJlcSB2YXJpYWJsZSB0byBoZWxwIENhamEgY29tcGxpYW5jZSAoaXQgYXNzdW1lcyB0aGluZ3MKICAgICAqIG9uIGEgcmVxdWlyZSB0aGF0IGFyZSBub3Qgc3RhbmRhcmRpemVkKSwgYW5kIHRvIGdpdmUgYSBzaG9ydAogICAgICogbmFtZSBmb3IgbWluaWZpY2F0aW9uL2xvY2FsIHNjb3BlIHVzZS4KICAgICAqLwogICAgcmVxID0gcmVxdWlyZWpzID0gZnVuY3Rpb24gKGRlcHMsIGNhbGxiYWNrLCBlcnJiYWNrLCBvcHRpb25hbCkgewoKICAgICAgICAvL0ZpbmQgdGhlIHJpZ2h0IGNvbnRleHQsIHVzZSBkZWZhdWx0CiAgICAgICAgdmFyIGNvbnRleHQsIGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBkZWZDb250ZXh0TmFtZTsKCiAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIGhhdmUgY29uZmlnIG9iamVjdCBpbiB0aGUgY2FsbC4KICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykgJiYgdHlwZW9mIGRlcHMgIT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgIC8vIGRlcHMgaXMgYSBjb25maWcgb2JqZWN0CiAgICAgICAgICAgIGNvbmZpZyA9IGRlcHM7CiAgICAgICAgICAgIGlmIChpc0FycmF5KGNhbGxiYWNrKSkgewogICAgICAgICAgICAgICAgLy8gQWRqdXN0IGFyZ3MgaWYgdGhlcmUgYXJlIGRlcGVuZGVuY2llcwogICAgICAgICAgICAgICAgZGVwcyA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBlcnJiYWNrOwogICAgICAgICAgICAgICAgZXJyYmFjayA9IG9wdGlvbmFsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHROYW1lID0gY29uZmlnLmNvbnRleHQ7CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gZ2V0T3duKGNvbnRleHRzLCBjb250ZXh0TmFtZSk7CiAgICAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tjb250ZXh0TmFtZV0gPSByZXEucy5uZXdDb250ZXh0KGNvbnRleHROYW1lKTsKICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcpIHsKICAgICAgICAgICAgY29udGV4dC5jb25maWd1cmUoY29uZmlnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb250ZXh0LnJlcXVpcmUoZGVwcywgY2FsbGJhY2ssIGVycmJhY2spOwogICAgfTsKCiAgICAvKioKICAgICAqIFN1cHBvcnQgcmVxdWlyZS5jb25maWcoKSB0byBtYWtlIGl0IGVhc2llciB0byBjb29wZXJhdGUgd2l0aCBvdGhlcgogICAgICogQU1EIGxvYWRlcnMgb24gZ2xvYmFsbHkgYWdyZWVkIG5hbWVzLgogICAgICovCiAgICByZXEuY29uZmlnID0gZnVuY3Rpb24gKGNvbmZpZykgewogICAgICAgIHJldHVybiByZXEoY29uZmlnKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlIHNvbWV0aGluZyBhZnRlciB0aGUgY3VycmVudCB0aWNrCiAgICAgKiBvZiB0aGUgZXZlbnQgbG9vcC4gT3ZlcnJpZGUgZm9yIG90aGVyIGVudnMKICAgICAqIHRoYXQgaGF2ZSBhIGJldHRlciBzb2x1dGlvbiB0aGFuIHNldFRpbWVvdXQuCiAgICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZm4gZnVuY3Rpb24gdG8gZXhlY3V0ZSBsYXRlci4KICAgICAqLwogICAgcmVxLm5leHRUaWNrID0gdHlwZW9mIHNldFRpbWVvdXQgIT09ICd1bmRlZmluZWQnID8gZnVuY3Rpb24gKGZuKSB7CiAgICAgICAgc2V0VGltZW91dChmbiwgNCk7CiAgICB9IDogZnVuY3Rpb24gKGZuKSB7IGZuKCk7IH07CgogICAgLyoqCiAgICAgKiBFeHBvcnQgcmVxdWlyZSBhcyBhIGdsb2JhbCwgYnV0IG9ubHkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAqLwogICAgaWYgKCFyZXF1aXJlKSB7CiAgICAgICAgcmVxdWlyZSA9IHJlcTsKICAgIH0KCiAgICByZXEudmVyc2lvbiA9IHZlcnNpb247CgogICAgLy9Vc2VkIHRvIGZpbHRlciBvdXQgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIGFscmVhZHkgcGF0aHMuCiAgICByZXEuanNFeHRSZWdFeHAgPSAvXlwvfDp8XD98XC5qcyQvOwogICAgcmVxLmlzQnJvd3NlciA9IGlzQnJvd3NlcjsKICAgIHMgPSByZXEucyA9IHsKICAgICAgICBjb250ZXh0czogY29udGV4dHMsCiAgICAgICAgbmV3Q29udGV4dDogbmV3Q29udGV4dAogICAgfTsKCiAgICAvL0NyZWF0ZSBkZWZhdWx0IGNvbnRleHQuCiAgICByZXEoe30pOwoKICAgIC8vRXhwb3J0cyBzb21lIGNvbnRleHQtc2Vuc2l0aXZlIG1ldGhvZHMgb24gZ2xvYmFsIHJlcXVpcmUuCiAgICBlYWNoKFsKICAgICAgICAndG9VcmwnLAogICAgICAgICd1bmRlZicsCiAgICAgICAgJ2RlZmluZWQnLAogICAgICAgICdzcGVjaWZpZWQnCiAgICBdLCBmdW5jdGlvbiAocHJvcCkgewogICAgICAgIC8vUmVmZXJlbmNlIGZyb20gY29udGV4dHMgaW5zdGVhZCBvZiBlYXJseSBiaW5kaW5nIHRvIGRlZmF1bHQgY29udGV4dCwKICAgICAgICAvL3NvIHRoYXQgZHVyaW5nIGJ1aWxkcywgdGhlIGxhdGVzdCBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBjb250ZXh0CiAgICAgICAgLy93aXRoIGl0cyBjb25maWcgZ2V0cyB1c2VkLgogICAgICAgIHJlcVtwcm9wXSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IGNvbnRleHRzW2RlZkNvbnRleHROYW1lXTsKICAgICAgICAgICAgcmV0dXJuIGN0eC5yZXF1aXJlW3Byb3BdLmFwcGx5KGN0eCwgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgfSk7CgogICAgaWYgKGlzQnJvd3NlcikgewogICAgICAgIGhlYWQgPSBzLmhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwogICAgICAgIC8vSWYgQkFTRSB0YWcgaXMgaW4gcGxheSwgdXNpbmcgYXBwZW5kQ2hpbGQgaXMgYSBwcm9ibGVtIGZvciBJRTYuCiAgICAgICAgLy9XaGVuIHRoYXQgYnJvd3NlciBkaWVzLCB0aGlzIGNhbiBiZSByZW1vdmVkLiBEZXRhaWxzIGluIHRoaXMgalF1ZXJ5IGJ1ZzoKICAgICAgICAvL2h0dHA6Ly9kZXYuanF1ZXJ5LmNvbS90aWNrZXQvMjcwOQogICAgICAgIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2Jhc2UnKVswXTsKICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGJhc2VFbGVtZW50LnBhcmVudE5vZGU7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQW55IGVycm9ycyB0aGF0IHJlcXVpcmUgZXhwbGljaXRseSBnZW5lcmF0ZXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhpcwogICAgICogZnVuY3Rpb24uIEludGVyY2VwdC9vdmVycmlkZSBpdCBpZiB5b3Ugd2FudCBjdXN0b20gZXJyb3IgaGFuZGxpbmcuCiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIgdGhlIGVycm9yIG9iamVjdC4KICAgICAqLwogICAgcmVxLm9uRXJyb3IgPSBkZWZhdWx0T25FcnJvcjsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgdGhlIG5vZGUgZm9yIHRoZSBsb2FkIGNvbW1hbmQuIE9ubHkgdXNlZCBpbiBicm93c2VyIGVudnMuCiAgICAgKi8KICAgIHJlcS5jcmVhdGVOb2RlID0gZnVuY3Rpb24gKGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIG5vZGUgPSBjb25maWcueGh0bWwgPwogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywgJ2h0bWw6c2NyaXB0JykgOgogICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICAgICAgbm9kZS50eXBlID0gY29uZmlnLnNjcmlwdFR5cGUgfHwgJ3RleHQvamF2YXNjcmlwdCc7CiAgICAgICAgbm9kZS5jaGFyc2V0ID0gJ3V0Zi04JzsKICAgICAgICBub2RlLmFzeW5jID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgIH07CgogICAgLyoqCiAgICAgKiBEb2VzIHRoZSByZXF1ZXN0IHRvIGxvYWQgYSBtb2R1bGUgZm9yIHRoZSBicm93c2VyIGNhc2UuCiAgICAgKiBNYWtlIHRoaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBhbGxvdyBvdGhlciBlbnZpcm9ubWVudHMKICAgICAqIHRvIG92ZXJyaWRlIGl0LgogICAgICoKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0IHRoZSByZXF1aXJlIGNvbnRleHQgdG8gZmluZCBzdGF0ZS4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtb2R1bGVOYW1lIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gdXJsIHRoZSBVUkwgdG8gdGhlIG1vZHVsZS4KICAgICAqLwogICAgcmVxLmxvYWQgPSBmdW5jdGlvbiAoY29udGV4dCwgbW9kdWxlTmFtZSwgdXJsKSB7CiAgICAgICAgdmFyIGNvbmZpZyA9IChjb250ZXh0ICYmIGNvbnRleHQuY29uZmlnKSB8fCB7fSwKICAgICAgICAgICAgbm9kZTsKICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgIC8vSW4gdGhlIGJyb3dzZXIgc28gdXNlIGEgc2NyaXB0IHRhZwogICAgICAgICAgICBub2RlID0gcmVxLmNyZWF0ZU5vZGUoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpOwoKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWNvbnRleHQnLCBjb250ZXh0LmNvbnRleHROYW1lKTsKICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScsIG1vZHVsZU5hbWUpOwoKICAgICAgICAgICAgLy9TZXQgdXAgbG9hZCBsaXN0ZW5lci4gVGVzdCBhdHRhY2hFdmVudCBmaXJzdCBiZWNhdXNlIElFOSBoYXMKICAgICAgICAgICAgLy9hIHN1YnRsZSBpc3N1ZSBpbiBpdHMgYWRkRXZlbnRMaXN0ZW5lciBhbmQgc2NyaXB0IG9ubG9hZCBmaXJpbmdzCiAgICAgICAgICAgIC8vdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGFsbCBvdGhlciBicm93c2VycyB3aXRoCiAgICAgICAgICAgIC8vYWRkRXZlbnRMaXN0ZW5lciBzdXBwb3J0LCB3aGljaCBmaXJlIHRoZSBvbmxvYWQgZXZlbnQgZm9yIGEKICAgICAgICAgICAgLy9zY3JpcHQgcmlnaHQgYWZ0ZXIgdGhlIHNjcmlwdCBleGVjdXRpb24uIFNlZToKICAgICAgICAgICAgLy9odHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzY0ODA1Ny9zY3JpcHQtb25sb2FkLWV2ZW50LWlzLW5vdC1maXJlZC1pbW1lZGlhdGVseS1hZnRlci1zY3JpcHQtZXhlY3V0aW9uCiAgICAgICAgICAgIC8vVU5GT1JUVU5BVEVMWSBPcGVyYSBpbXBsZW1lbnRzIGF0dGFjaEV2ZW50IGJ1dCBkb2VzIG5vdCBmb2xsb3cgdGhlIHNjcmlwdAogICAgICAgICAgICAvL3NjcmlwdCBleGVjdXRpb24gbW9kZS4KICAgICAgICAgICAgaWYgKG5vZGUuYXR0YWNoRXZlbnQgJiYKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGlmIG5vZGUuYXR0YWNoRXZlbnQgaXMgYXJ0aWZpY2lhbGx5IGFkZGVkIGJ5IGN1c3RvbSBzY3JpcHQgb3IKICAgICAgICAgICAgICAgICAgICAvL25hdGl2ZWx5IHN1cHBvcnRlZCBieSBicm93c2VyCiAgICAgICAgICAgICAgICAgICAgLy9yZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8xODcKICAgICAgICAgICAgICAgICAgICAvL2lmIHdlIGNhbiBOT1QgZmluZCBbbmF0aXZlIGNvZGVdIHRoZW4gaXQgbXVzdCBOT1QgbmF0aXZlbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgICAgICAgIC8vaW4gSUU4LCBub2RlLmF0dGFjaEV2ZW50IGRvZXMgbm90IGhhdmUgdG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIC8vTm90ZSB0aGUgdGVzdCBmb3IgIltuYXRpdmUgY29kZSIgd2l0aCBubyBjbG9zaW5nIGJyYWNlLCBzZWU6CiAgICAgICAgICAgICAgICAgICAgLy9odHRwczovL2dpdGh1Yi5jb20vcmVxdWlyZWpzL3JlcXVpcmVqcy9pc3N1ZXMvMjczCiAgICAgICAgICAgICAgICAgICAgIShub2RlLmF0dGFjaEV2ZW50LnRvU3RyaW5nICYmIG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSA8IDApICYmCiAgICAgICAgICAgICAgICAgICAgIWlzT3BlcmEpIHsKICAgICAgICAgICAgICAgIC8vUHJvYmFibHkgSUUuIElFIChhdCBsZWFzdCA2LTgpIGRvIG5vdCBmaXJlCiAgICAgICAgICAgICAgICAvL3NjcmlwdCBvbmxvYWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBzY3JpcHQsIHNvCiAgICAgICAgICAgICAgICAvL3dlIGNhbm5vdCB0aWUgdGhlIGFub255bW91cyBkZWZpbmUgY2FsbCB0byBhIG5hbWUuCiAgICAgICAgICAgICAgICAvL0hvd2V2ZXIsIElFIHJlcG9ydHMgdGhlIHNjcmlwdCBhcyBiZWluZyBpbiAnaW50ZXJhY3RpdmUnCiAgICAgICAgICAgICAgICAvL3JlYWR5U3RhdGUgYXQgdGhlIHRpbWUgb2YgdGhlIGRlZmluZSBjYWxsLgogICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwoKICAgICAgICAgICAgICAgIG5vZGUuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGNvbnRleHQub25TY3JpcHRMb2FkKTsKICAgICAgICAgICAgICAgIC8vSXQgd291bGQgYmUgZ3JlYXQgdG8gYWRkIGFuIGVycm9yIGhhbmRsZXIgaGVyZSB0byBjYXRjaAogICAgICAgICAgICAgICAgLy80MDRzIGluIElFOSsuIEhvd2V2ZXIsIG9ucmVhZHlzdGF0ZWNoYW5nZSB3aWxsIGZpcmUgYmVmb3JlCiAgICAgICAgICAgICAgICAvL3RoZSBlcnJvciBoYW5kbGVyLCBzbyB0aGF0IGRvZXMgbm90IGhlbHAuIElmIGFkZEV2ZW50TGlzdGVuZXIKICAgICAgICAgICAgICAgIC8vaXMgdXNlZCwgdGhlbiBJRSB3aWxsIGZpcmUgZXJyb3IgYmVmb3JlIGxvYWQsIGJ1dCB3ZSBjYW5ub3QKICAgICAgICAgICAgICAgIC8vdXNlIHRoYXQgcGF0aHdheSBnaXZlbiB0aGUgY29ubmVjdC5taWNyb3NvZnQuY29tIGlzc3VlCiAgICAgICAgICAgICAgICAvL21lbnRpb25lZCBhYm92ZSBhYm91dCBub3QgZG9pbmcgdGhlICdzY3JpcHQgZXhlY3V0ZSwKICAgICAgICAgICAgICAgIC8vdGhlbiBmaXJlIHRoZSBzY3JpcHQgbG9hZCBldmVudCBsaXN0ZW5lciBiZWZvcmUgZXhlY3V0ZQogICAgICAgICAgICAgICAgLy9uZXh0IHNjcmlwdCcgdGhhdCBvdGhlciBicm93c2VycyBkby4KICAgICAgICAgICAgICAgIC8vQmVzdCBob3BlOiBJRTEwIGZpeGVzIHRoZSBpc3N1ZXMsCiAgICAgICAgICAgICAgICAvL2FuZCB0aGVuIGRlc3Ryb3lzIGFsbCBpbnN0YWxscyBvZiBJRSA2LTkuCiAgICAgICAgICAgICAgICAvL25vZGUuYXR0YWNoRXZlbnQoJ29uZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY29udGV4dC5vblNjcmlwdExvYWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBjb250ZXh0Lm9uU2NyaXB0RXJyb3IsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBub2RlLnNyYyA9IHVybDsKCiAgICAgICAgICAgIC8vQ2FsbGluZyBvbk5vZGVDcmVhdGVkIGFmdGVyIGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBub2RlIGhhdmUgYmVlbgogICAgICAgICAgICAvL3NldCwgYnV0IGJlZm9yZSBpdCBpcyBwbGFjZWQgaW4gdGhlIERPTS4KICAgICAgICAgICAgaWYgKGNvbmZpZy5vbk5vZGVDcmVhdGVkKSB7CiAgICAgICAgICAgICAgICBjb25maWcub25Ob2RlQ3JlYXRlZChub2RlLCBjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vRm9yIHNvbWUgY2FjaGUgY2FzZXMgaW4gSUUgNi04LCB0aGUgc2NyaXB0IGV4ZWN1dGVzIGJlZm9yZSB0aGUgZW5kCiAgICAgICAgICAgIC8vb2YgdGhlIGFwcGVuZENoaWxkIGV4ZWN1dGlvbiwgc28gdG8gdGllIGFuIGFub255bW91cyBkZWZpbmUKICAgICAgICAgICAgLy9jYWxsIHRvIHRoZSBtb2R1bGUgbmFtZSAod2hpY2ggaXMgc3RvcmVkIG9uIHRoZSBub2RlKSwgaG9sZCBvbgogICAgICAgICAgICAvL3RvIGEgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZSwgYnV0IGNsZWFyIGFmdGVyIHRoZSBET00gaW5zZXJ0aW9uLgogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBub2RlOwogICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKG5vZGUsIGJhc2VFbGVtZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VycmVudGx5QWRkaW5nU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSBpZiAoaXNXZWJXb3JrZXIpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vSW4gYSB3ZWIgd29ya2VyLCB1c2UgaW1wb3J0U2NyaXB0cy4gVGhpcyBpcyBub3QgYSB2ZXJ5CiAgICAgICAgICAgICAgICAvL2VmZmljaWVudCB1c2Ugb2YgaW1wb3J0U2NyaXB0cywgaW1wb3J0U2NyaXB0cyB3aWxsIGJsb2NrIHVudGlsCiAgICAgICAgICAgICAgICAvL2l0cyBzY3JpcHQgaXMgZG93bmxvYWRlZCBhbmQgZXZhbHVhdGVkLiBIb3dldmVyLCBpZiB3ZWIgd29ya2VycwogICAgICAgICAgICAgICAgLy9hcmUgaW4gcGxheSwgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgYSBidWlsZCBoYXMgYmVlbiBkb25lIHNvCiAgICAgICAgICAgICAgICAvL3RoYXQgb25seSBvbmUgc2NyaXB0IG5lZWRzIHRvIGJlIGxvYWRlZCBhbnl3YXkuIFRoaXMgbWF5IG5lZWQKICAgICAgICAgICAgICAgIC8vdG8gYmUgcmVldmFsdWF0ZWQgaWYgb3RoZXIgdXNlIGNhc2VzIGJlY29tZSBjb21tb24uCgogICAgICAgICAgICAgICAgLy8gUG9zdCBhIHRhc2sgdG8gdGhlIGV2ZW50IGxvb3AgdG8gd29yayBhcm91bmQgYSBidWcgaW4gV2ViS2l0CiAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgd29ya2VyIGdldHMgZ2FyYmFnZS1jb2xsZWN0ZWQgYWZ0ZXIgY2FsbGluZwogICAgICAgICAgICAgICAgLy8gaW1wb3J0U2NyaXB0cygpOiBodHRwczovL3dlYmtpdC5vcmcvYi8xNTMzMTcKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7fSwgMCk7CiAgICAgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHVybCk7CgogICAgICAgICAgICAgICAgLy9BY2NvdW50IGZvciBhbm9ueW1vdXMgbW9kdWxlcwogICAgICAgICAgICAgICAgY29udGV4dC5jb21wbGV0ZUxvYWQobW9kdWxlTmFtZSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQub25FcnJvcihtYWtlRXJyb3IoJ2ltcG9ydHNjcmlwdHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnRTY3JpcHRzIGZhaWxlZCBmb3IgJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWUgKyAnIGF0ICcgKyB1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV0pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVTY3JpcHQoKSB7CiAgICAgICAgaWYgKGludGVyYWN0aXZlU2NyaXB0ICYmIGludGVyYWN0aXZlU2NyaXB0LnJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScpIHsKICAgICAgICAgICAgcmV0dXJuIGludGVyYWN0aXZlU2NyaXB0OwogICAgICAgIH0KCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICAgICAgcmV0dXJuIChpbnRlcmFjdGl2ZVNjcmlwdCA9IHNjcmlwdCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICB9CgogICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBzY3JpcHQgYXR0cmlidXRlLCB3aGljaCBjb3VsZCBhbHNvIGFkanVzdCB0aGUgYmFzZVVybC4KICAgIGlmIChpc0Jyb3dzZXIgJiYgIWNmZy5za2lwRGF0YU1haW4pIHsKICAgICAgICAvL0ZpZ3VyZSBvdXQgYmFzZVVybC4gR2V0IGl0IGZyb20gdGhlIHNjcmlwdCB0YWcgd2l0aCByZXF1aXJlLmpzIGluIGl0LgogICAgICAgIGVhY2hSZXZlcnNlKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdCkgewogICAgICAgICAgICAvL1NldCB0aGUgJ2hlYWQnIHdoZXJlIHdlIGNhbiBhcHBlbmQgY2hpbGRyZW4gYnkKICAgICAgICAgICAgLy91c2luZyB0aGUgc2NyaXB0J3MgcGFyZW50LgogICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgIGhlYWQgPSBzY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Mb29rIGZvciBhIGRhdGEtbWFpbiBhdHRyaWJ1dGUgdG8gc2V0IG1haW4gc2NyaXB0IGZvciB0aGUgcGFnZQogICAgICAgICAgICAvL3RvIGxvYWQuIElmIGl0IGlzIHRoZXJlLCB0aGUgcGF0aCB0byBkYXRhIG1haW4gYmVjb21lcyB0aGUKICAgICAgICAgICAgLy9iYXNlVXJsLCBpZiBpdCBpcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGRhdGFNYWluID0gc2NyaXB0LmdldEF0dHJpYnV0ZSgnZGF0YS1tYWluJyk7CiAgICAgICAgICAgIGlmIChkYXRhTWFpbikgewogICAgICAgICAgICAgICAgLy9QcmVzZXJ2ZSBkYXRhTWFpbiBpbiBjYXNlIGl0IGlzIGEgcGF0aCAoaS5lLiBjb250YWlucyAnPycpCiAgICAgICAgICAgICAgICBtYWluU2NyaXB0ID0gZGF0YU1haW47CgogICAgICAgICAgICAgICAgLy9TZXQgZmluYWwgYmFzZVVybCBpZiB0aGVyZSBpcyBub3QgYWxyZWFkeSBhbiBleHBsaWNpdCBvbmUsCiAgICAgICAgICAgICAgICAvL2J1dCBvbmx5IGRvIHNvIGlmIHRoZSBkYXRhLW1haW4gdmFsdWUgaXMgbm90IGEgbG9hZGVyIHBsdWdpbgogICAgICAgICAgICAgICAgLy9tb2R1bGUgSUQuCiAgICAgICAgICAgICAgICBpZiAoIWNmZy5iYXNlVXJsICYmIG1haW5TY3JpcHQuaW5kZXhPZignIScpID09PSAtMSkgewogICAgICAgICAgICAgICAgICAgIC8vUHVsbCBvZmYgdGhlIGRpcmVjdG9yeSBvZiBkYXRhLW1haW4gZm9yIHVzZSBhcyB0aGUKICAgICAgICAgICAgICAgICAgICAvL2Jhc2VVcmwuCiAgICAgICAgICAgICAgICAgICAgc3JjID0gbWFpblNjcmlwdC5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBzcmMucG9wKCk7CiAgICAgICAgICAgICAgICAgICAgc3ViUGF0aCA9IHNyYy5sZW5ndGggPyBzcmMuam9pbignLycpICArICcvJyA6ICcuLyc7CgogICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsID0gc3ViUGF0aDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1N0cmlwIG9mZiBhbnkgdHJhaWxpbmcgLmpzIHNpbmNlIG1haW5TY3JpcHQgaXMgbm93CiAgICAgICAgICAgICAgICAvL2xpa2UgYSBtb2R1bGUgbmFtZS4KICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBtYWluU2NyaXB0LnJlcGxhY2UoanNTdWZmaXhSZWdFeHAsICcnKTsKCiAgICAgICAgICAgICAgICAvL0lmIG1haW5TY3JpcHQgaXMgc3RpbGwgYSBwYXRoLCBmYWxsIGJhY2sgdG8gZGF0YU1haW4KICAgICAgICAgICAgICAgIGlmIChyZXEuanNFeHRSZWdFeHAudGVzdChtYWluU2NyaXB0KSkgewogICAgICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL1B1dCB0aGUgZGF0YS1tYWluIHNjcmlwdCBpbiB0aGUgZmlsZXMgdG8gbG9hZC4KICAgICAgICAgICAgICAgIGNmZy5kZXBzID0gY2ZnLmRlcHMgPyBjZmcuZGVwcy5jb25jYXQobWFpblNjcmlwdCkgOiBbbWFpblNjcmlwdF07CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgZGVmaW5pdGlvbnMgb2YgbW9kdWxlcy4gRGlmZmVycyBmcm9tCiAgICAgKiByZXF1aXJlKCkgaW4gdGhhdCBhIHN0cmluZyBmb3IgdGhlIG1vZHVsZSBzaG91bGQgYmUgdGhlIGZpcnN0IGFyZ3VtZW50LAogICAgICogYW5kIHRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIGRlcGVuZGVuY2llcyBhcmUgbG9hZGVkIHNob3VsZAogICAgICogcmV0dXJuIGEgdmFsdWUgdG8gZGVmaW5lIHRoZSBtb2R1bGUgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgYXJndW1lbnQncwogICAgICogbmFtZS4KICAgICAqLwogICAgZGVmaW5lID0gZnVuY3Rpb24gKG5hbWUsIGRlcHMsIGNhbGxiYWNrKSB7CiAgICAgICAgdmFyIG5vZGUsIGNvbnRleHQ7CgogICAgICAgIC8vQWxsb3cgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgewogICAgICAgICAgICAvL0FkanVzdCBhcmdzIGFwcHJvcHJpYXRlbHkKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbmFtZTsKICAgICAgICAgICAgbmFtZSA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICAvL1RoaXMgbW9kdWxlIG1heSBub3QgaGF2ZSBkZXBlbmRlbmNpZXMKICAgICAgICBpZiAoIWlzQXJyYXkoZGVwcykpIHsKICAgICAgICAgICAgY2FsbGJhY2sgPSBkZXBzOwogICAgICAgICAgICBkZXBzID0gbnVsbDsKICAgICAgICB9CgogICAgICAgIC8vSWYgbm8gbmFtZSwgYW5kIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24sIHRoZW4gZmlndXJlIG91dCBpZiBpdCBhCiAgICAgICAgLy9Db21tb25KUyB0aGluZyB3aXRoIGRlcGVuZGVuY2llcy4KICAgICAgICBpZiAoIWRlcHMgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgZGVwcyA9IFtdOwogICAgICAgICAgICAvL1JlbW92ZSBjb21tZW50cyBmcm9tIHRoZSBjYWxsYmFjayBzdHJpbmcsCiAgICAgICAgICAgIC8vbG9vayBmb3IgcmVxdWlyZSBjYWxscywgYW5kIHB1bGwgdGhlbSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIC8vYnV0IG9ubHkgaWYgdGhlcmUgYXJlIGZ1bmN0aW9uIGFyZ3MuCiAgICAgICAgICAgIGlmIChjYWxsYmFjay5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgLnRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjb21tZW50UmVnRXhwLCBjb21tZW50UmVwbGFjZSkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShjanNSZXF1aXJlUmVnRXhwLCBmdW5jdGlvbiAobWF0Y2gsIGRlcCkgewogICAgICAgICAgICAgICAgICAgICAgICBkZXBzLnB1c2goZGVwKTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL01heSBiZSBhIENvbW1vbkpTIHRoaW5nIGV2ZW4gd2l0aG91dCByZXF1aXJlIGNhbGxzLCBidXQgc3RpbGwKICAgICAgICAgICAgICAgIC8vY291bGQgdXNlIGV4cG9ydHMsIGFuZCBtb2R1bGUuIEF2b2lkIGRvaW5nIGV4cG9ydHMgYW5kIG1vZHVsZQogICAgICAgICAgICAgICAgLy93b3JrIHRob3VnaCBpZiBpdCBqdXN0IG5lZWRzIHJlcXVpcmUuCiAgICAgICAgICAgICAgICAvL1JFUVVJUkVTIHRoZSBmdW5jdGlvbiB0byBleHBlY3QgdGhlIENvbW1vbkpTIHZhcmlhYmxlcyBpbiB0aGUKICAgICAgICAgICAgICAgIC8vb3JkZXIgbGlzdGVkIGJlbG93LgogICAgICAgICAgICAgICAgZGVwcyA9IChjYWxsYmFjay5sZW5ndGggPT09IDEgPyBbJ3JlcXVpcmUnXSA6IFsncmVxdWlyZScsICdleHBvcnRzJywgJ21vZHVsZSddKS5jb25jYXQoZGVwcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vSWYgaW4gSUUgNi04IGFuZCBoaXQgYW4gYW5vbnltb3VzIGRlZmluZSgpIGNhbGwsIGRvIHRoZSBpbnRlcmFjdGl2ZQogICAgICAgIC8vd29yay4KICAgICAgICBpZiAodXNlSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgbm9kZSA9IGN1cnJlbnRseUFkZGluZ1NjcmlwdCB8fCBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpOwogICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0c1tub2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9BbHdheXMgc2F2ZSBvZmYgZXZhbHVhdGluZyB0aGUgZGVmIGNhbGwgdW50aWwgdGhlIHNjcmlwdCBvbmxvYWQgaGFuZGxlci4KICAgICAgICAvL1RoaXMgYWxsb3dzIG11bHRpcGxlIG1vZHVsZXMgdG8gYmUgaW4gYSBmaWxlIHdpdGhvdXQgcHJlbWF0dXJlbHkKICAgICAgICAvL3RyYWNpbmcgZGVwZW5kZW5jaWVzLCBhbmQgYWxsb3dzIGZvciBhbm9ueW1vdXMgbW9kdWxlIHN1cHBvcnQsCiAgICAgICAgLy93aGVyZSB0aGUgbW9kdWxlIG5hbWUgaXMgbm90IGtub3duIHVudGlsIHRoZSBzY3JpcHQgb25sb2FkIGV2ZW50CiAgICAgICAgLy9vY2N1cnMuIElmIG5vIGNvbnRleHQsIHVzZSB0aGUgZ2xvYmFsIHF1ZXVlLCBhbmQgZ2V0IGl0IHByb2Nlc3NlZAogICAgICAgIC8vaW4gdGhlIG9uc2NyaXB0IGxvYWQgY2FsbGJhY2suCiAgICAgICAgaWYgKGNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwW25hbWVdID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnbG9iYWxEZWZRdWV1ZS5wdXNoKFtuYW1lLCBkZXBzLCBjYWxsYmFja10pOwogICAgICAgIH0KICAgIH07CgogICAgZGVmaW5lLmFtZCA9IHsKICAgICAgICBqUXVlcnk6IHRydWUKICAgIH07CgogICAgLyoqCiAgICAgKiBFeGVjdXRlcyB0aGUgdGV4dC4gTm9ybWFsbHkganVzdCB1c2VzIGV2YWwsIGJ1dCBjYW4gYmUgbW9kaWZpZWQKICAgICAqIHRvIHVzZSBhIGJldHRlciwgZW52aXJvbm1lbnQtc3BlY2lmaWMgY2FsbC4gT25seSB1c2VkIGZvciB0cmFuc3BpbGluZwogICAgICogbG9hZGVyIHBsdWdpbnMsIG5vdCBmb3IgcGxhaW4gSlMgbW9kdWxlcy4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IHRoZSB0ZXh0IHRvIGV4ZWN1dGUvZXZhbHVhdGUuCiAgICAgKi8KICAgIHJlcS5leGVjID0gZnVuY3Rpb24gKHRleHQpIHsKICAgICAgICAvKmpzbGludCBldmlsOiB0cnVlICovCiAgICAgICAgcmV0dXJuIGV2YWwodGV4dCk7CiAgICB9OwoKICAgIC8vU2V0IHVwIHdpdGggY29uZmlnIGluZm8uCiAgICByZXEoY2ZnKTsKfSh0aGlzLCAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogc2V0VGltZW91dCkpKTsKCg==",
"headers": [
[
"content-type",
- "application/json"
+ "text/javascript; charset=utf-8"
]
],
"ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/font-roboto/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2": {
- "data": "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",
- "headers": [
- [
- "content-type",
- "font/woff2"
- ]
- ],
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_75%22%7D%5D": {
+ "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfNzUiLCAicnVuVG9TZXJpZXMiOiB7InJ0bWRldF90aW55XzF4YjQtMjBlX2JhbGxvb24vMjAyMzA0MTdfMTAyODM1L3Zpc19kYXRhIjogW3sid2FsbFRpbWUiOiAxNjgxNzI3MzM1LjQ0MjQ4NjMsICJzdGVwIjogMSwgInZhbHVlIjogMC4wNTA5OTk5OTkwNDYzMjU2ODR9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM0NS42MzkxMzkyLCAic3RlcCI6IDIsICJ2YWx1ZSI6IDAuMTQ2OTk5OTk5ODgwNzkwN30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODg0NywgInN0ZXAiOiAzLCAidmFsdWUiOiAwLjM1NjAwMDAwNjE5ODg4MzA2fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNjIuNDkxNDgxOCwgInN0ZXAiOiA0LCAidmFsdWUiOiAwLjQ0OTAwMDAwMDk1MzY3NDN9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA2NjE3LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuNDc2MDAwMDEwOTY3MjU0NjR9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4MS40MjcxMjQ1LCAic3RlcCI6IDYsICJ2YWx1ZSI6IDAuNDkyMDAwMDEzNTg5ODU5fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODkuNTM3NTgyNCwgInN0ZXAiOiA3LCAidmFsdWUiOiAwLjU1ODAwMDAyODEzMzM5MjN9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM5Ny42ODUxMiwgInN0ZXAiOiA4LCAidmFsdWUiOiAwLjYyMDAwMDAwNDc2ODM3MTZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQwNy4wMzMzNDkzLCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNjg5MDAwMDEwNDkwNDE3NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDE2LjAzOTQ5MzYsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNjk4MDAwMDEzODI4Mjc3Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDI1LjY1NTM4MzMsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNzA4OTk5OTkxNDE2OTMxMn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDMzLjAwNDM3MjEsICJzdGVwIjogMTIsICJ2YWx1ZSI6IDAuNjk1OTk5OTc5OTcyODM5NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQyLjA0OTg1ODYsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuNzE3OTk5OTk0NzU0NzkxM30sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQ3LjkzNDg2MjksICJzdGVwIjogMTQsICJ2YWx1ZSI6IDAuNzA4MDAwMDA0MjkxNTM0NH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDU3Ljk3NTQzNDMsICJzdGVwIjogMTUsICJ2YWx1ZSI6IDAuNzAwOTk5OTc1MjA0NDY3OH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDYzLjgyNjA1NDgsICJzdGVwIjogMTYsICJ2YWx1ZSI6IDAuNzQwOTk5OTk2NjYyMTM5OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDczLjQ2ODgzNjgsICJzdGVwIjogMTcsICJ2YWx1ZSI6IDAuNzM2MDAwMDAxNDMwNTExNX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDgwLjc5MDA2NjcsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuNzIwMDAwMDI4NjEwMjI5NX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyNDA1OTQsICJzdGVwIjogMTksICJ2YWx1ZSI6IDAuNzEzOTk5OTg2NjQ4NTU5Nn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDk0LjU2OTU2ODQsICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuNzV9XX19XQ==",
"ok": true,
- "status": 200,
- "status_text": ""
- },
- "https://localhost:6006/font-roboto/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2": {
- "data": "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",
"headers": [
[
"content-type",
- "font/woff2"
+ "application/json"
]
],
- "ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/font-roboto/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2": {
- "data": "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",
- "headers": [
- [
- "content-type",
- "font/woff2"
- ]
- ],
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_l%22%7D%5D": {
+ "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfbCIsICJydW5Ub1NlcmllcyI6IHsicnRtZGV0X3RpbnlfMXhiNC0yMGVfYmFsbG9vbi8yMDIzMDQxN18xMDI4MzUvdmlzX2RhdGEiOiBbeyJ3YWxsVGltZSI6IDE2ODE3MjczMzUuNDQyNTc2NiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjA1NDAwMDAwMTQwMDcwOTE1fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNDUuNjM5MTk1MiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjE2NDAwMDAwNDUyOTk1M30sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzUyLjk2ODkwMzgsICJzdGVwIjogMywgInZhbHVlIjogMC40MDkwMDAwMDkyOTgzMjQ2fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNjIuNDkxNTcxLCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuNTI0OTk5OTc2MTU4MTQyMX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3MzcxLjY1MDc2MzMsICJzdGVwIjogNSwgInZhbHVlIjogMC41NTU5OTk5OTQyNzc5NTQxfSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczODEuNDI3MTg0NiwgInN0ZXAiOiA2LCAidmFsdWUiOiAwLjU4Mzk5OTk5MTQxNjkzMTJ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4OS41Mzc2ODA0LCAic3RlcCI6IDcsICJ2YWx1ZSI6IDAuNjEyOTk5OTc1NjgxMzA0OX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3Mzk3LjY4NTIxMzgsICJzdGVwIjogOCwgInZhbHVlIjogMC42NjYwMDAwMDg1ODMwNjg4fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MDcuMDMzNDQ5LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuNzUwOTk5OTg3MTI1Mzk2N30sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDE2LjAzOTU3NjMsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuNzYwOTk5OTc3NTg4NjUzNn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDI1LjY1NTQzOTYsICJzdGVwIjogMTEsICJ2YWx1ZSI6IDAuNzc3OTk5OTk3MTM4OTc3fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MzMuMDA0NDI5LCAic3RlcCI6IDEyLCAidmFsdWUiOiAwLjc1fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NDIuMDQ5OTE4MiwgInN0ZXAiOiAxMywgInZhbHVlIjogMC43NzEwMDAwMjc2NTY1NTUyfSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NDcuOTM0OTE4OSwgInN0ZXAiOiAxNCwgInZhbHVlIjogMC43ODIwMDAwMDUyNDUyMDg3fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NTcuOTc1NDg5NiwgInN0ZXAiOiAxNSwgInZhbHVlIjogMC43ODc5OTk5ODc2MDIyMzM5fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NjMuODI2MTEwNCwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC44MDAwMDAwMTE5MjA5Mjl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ3My40Njg4OTIzLCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjgxMDk5OTk4OTUwOTU4MjV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ4MC43OTAxMjMsICJzdGVwIjogMTgsICJ2YWx1ZSI6IDAuODAxOTk5OTg2MTcxNzIyNH0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDg4LjkyNDEyLCAic3RlcCI6IDE5LCAidmFsdWUiOiAwLjc4NjAwMDAxMzM1MTQ0MDR9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ5NC41Njk2Mjc4LCAic3RlcCI6IDIwLCAidmFsdWUiOiAwLjc4NTAwMDAyNjIyNjA0Mzd9XX19XQ==",
"ok": true,
- "status": 200,
- "status_text": ""
- },
- "https://localhost:6006/font-roboto/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2": {
- "data": "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",
"headers": [
[
"content-type",
- "font/woff2"
+ "application/json"
]
],
- "ok": true,
"status": 200,
"status_text": ""
},
- "https://localhost:6006/icon_bundle.svg": {
- "data": "PD94bWwgdmVyc2lvbj0iMS4wIiA/Pjxzdmc+PGRlZnM+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iYXJyb3dfZG93bndhcmRfMjRweCI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZD0iTTIwIDEybC0xLjQxLTEuNDFMMTMgMTYuMTdWNGgtMnYxMi4xN2wtNS41OC01LjU5TDQgMTJsOCA4IDgtOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJhcnJvd191cHdhcmRfMjRweCI+PHBhdGggZD0iTTQgMTJsMS40MSAxLjQxTDExIDcuODNWMjBoMlY3LjgzbDUuNTggNS41OUwyMCAxMmwtOC04LTggOHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJicmlnaHRuZXNzXzZfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yMCAxNS4zMUwyMy4zMSAxMiAyMCA4LjY5VjRoLTQuNjlMMTIgLjY5IDguNjkgNEg0djQuNjlMLjY5IDEyIDQgMTUuMzFWMjBoNC42OUwxMiAyMy4zMSAxNS4zMSAyMEgyMHYtNC42OXpNMTIgMThWNmMzLjMxIDAgNiAyLjY5IDYgNnMtMi42OSA2LTYgNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJidWdfcmVwb3J0XzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMjAgOGgtMi44MWMtLjQ1LS43OC0xLjA3LTEuNDUtMS44Mi0xLjk2TDE3IDQuNDEgMTUuNTkgM2wtMi4xNyAyLjE3QzEyLjk2IDUuMDYgMTIuNDkgNSAxMiA1Yy0uNDkgMC0uOTYuMDYtMS40MS4xN0w4LjQxIDMgNyA0LjQxbDEuNjIgMS42M0M3Ljg4IDYuNTUgNy4yNiA3LjIyIDYuODEgOEg0djJoMi4wOWMtLjA1LjMzLS4wOS42Ni0uMDkgMXYxSDR2MmgydjFjMCAuMzQuMDQuNjcuMDkgMUg0djJoMi44MWMxLjA0IDEuNzkgMi45NyAzIDUuMTkgM3M0LjE1LTEuMjEgNS4xOS0zSDIwdi0yaC0yLjA5Yy4wNS0uMzMuMDktLjY2LjA5LTF2LTFoMnYtMmgtMnYtMWMwLS4zNC0uMDQtLjY3LS4wOS0xSDIwVjh6bS02IDhoLTR2LTJoNHYyem0wLTRoLTR2LTJoNHYyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNhbmNlbF8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ3IDIgMiA2LjQ3IDIgMTJzNC40NyAxMCAxMCAxMCAxMC00LjQ3IDEwLTEwUzE3LjUzIDIgMTIgMnptNSAxMy41OUwxNS41OSAxNyAxMiAxMy40MSA4LjQxIDE3IDcgMTUuNTkgMTAuNTkgMTIgNyA4LjQxIDguNDEgNyAxMiAxMC41OSAxNS41OSA3IDE3IDguNDEgMTMuNDEgMTIgMTcgMTUuNTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY2hldnJvbl9sZWZ0XzI0cHgiPjxwYXRoIGQ9Ik0xNS40MSA3LjQxTDE0IDZsLTYgNiA2IDYgMS40MS0xLjQxTDEwLjgzIDEyeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNoZXZyb25fcmlnaHRfMjRweCI+PHBhdGggZD0iTTEwIDZMOC41OSA3LjQxIDEzLjE3IDEybC00LjU4IDQuNTlMMTAgMThsNi02eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImNsZWFyXzI0cHgiPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iY2xvc2VfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xOSA2LjQxTDE3LjU5IDUgMTIgMTAuNTkgNi40MSA1IDUgNi40MSAxMC41OSAxMiA1IDE3LjU5IDYuNDEgMTkgMTIgMTMuNDEgMTcuNTkgMTkgMTkgMTcuNTkgMTMuNDEgMTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iY29udGVudF9jb3B5XzI0cHgiPjxwYXRoIGQ9Ik0xNiAxSDRjLTEuMSAwLTIgLjktMiAydjE0aDJWM2gxMlYxem0zIDRIOGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxMWMxLjEgMCAyLS45IDItMlY3YzAtMS4xLS45LTItMi0yem0wIDE2SDhWN2gxMXYxNHoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZGFya19tb2RlXzI0cHgiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0xMiwzYy00Ljk3LDAtOSw0LjAzLTksOXM0LjAzLDksOSw5czktNC4wMyw5LTljMC0wLjQ2LTAuMDQtMC45Mi0wLjEtMS4zNmMtMC45OCwxLjM3LTIuNTgsMi4yNi00LjQsMi4yNiBjLTIuOTgsMC01LjQtMi40Mi01LjQtNS40YzAtMS44MSwwLjg5LTMuNDIsMi4yNi00LjRDMTIuOTIsMy4wNCwxMi40NiwzLDEyLDNMMTIsM3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJkb25lXzI0cHgiPjxwYXRoIGQ9Ik05IDE2LjJMNC44IDEybC0xLjQgMS40TDkgMTkgMjEgN2wtMS40LTEuNEw5IDE2LjJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZHJhZ19pbmRpY2F0b3JfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTExIDE4YzAgMS4xLS45IDItMiAycy0yLS45LTItMiAuOS0yIDItMiAyIC45IDIgMnptLTItOGMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAtNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTYgNGMxLjEgMCAyLS45IDItMnMtLjktMi0yLTItMiAuOS0yIDIgLjkgMiAyIDJ6bTAgMmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6bTAgNmMtMS4xIDAtMiAuOS0yIDJzLjkgMiAyIDIgMi0uOSAyLTItLjktMi0yLTJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZWRpdF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGMuMzktLjM5LjM5LTEuMDIgMC0xLjQxbC0yLjM0LTIuMzRjLS4zOS0uMzktMS4wMi0uMzktMS40MSAwbC0xLjgzIDEuODMgMy43NSAzLjc1IDEuODMtMS44M3oiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJlcnJvcl8yNHB4Ij48cGF0aCBkPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMC00LjQ4IDEwLTEwUzE3LjUyIDIgMTIgMnptMSAxNWgtMnYtMmgydjJ6bTAtNGgtMlY3aDJ2NnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJleHBhbmRfbGVzc18yNHB4Ij48cGF0aCBkPSJNMTIgOGwtNiA2IDEuNDEgMS40MUwxMiAxMC44M2w0LjU5IDQuNThMMTggMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZXhwYW5kX21vcmVfMjRweCI+PHBhdGggZD0iTTE2LjU5IDguNTlMMTIgMTMuMTcgNy40MSA4LjU5IDYgMTBsNiA2IDYtNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0iZmlsdGVyX2FsdF8yNHB4Ij48Zz48cGF0aCBkPSJNMCwwaDI0IE0yNCwyNEgwIiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQuMjUsNS42MUM2LjI3LDguMiwxMCwxMywxMCwxM3Y2YzAsMC41NSwwLjQ1LDEsMSwxaDJjMC41NSwwLDEtMC40NSwxLTF2LTZjMCwwLDMuNzItNC44LDUuNzQtNy4zOSBDMjAuMjUsNC45NSwxOS43OCw0LDE4Ljk1LDRINS4wNEM0LjIxLDQsMy43NCw0Ljk1LDQuMjUsNS42MXoiLz48cGF0aCBkPSJNMCwwaDI0djI0SDBWMHoiIGZpbGw9Im5vbmUiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZmxhZ18yNHB4Ij48cGF0aCBkPSJNMTQuNCA2TDE0IDRINXYxN2gydi03aDUuNmwuNCAyaDdWNnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuXzI0cHgiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNyAxNEg1djVoNXYtMkg3di0zem0tMi00aDJWN2gzVjVINXY1em0xMiA3aC0zdjJoNXYtNWgtMnYzek0xNCA1djJoM3YzaDJWNWgtNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJmdWxsc2NyZWVuX2V4aXRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik01IDE2aDN2M2gydi01SDV2MnptMy04SDV2Mmg1VjVIOHYzem02IDExaDJ2LTNoM3YtMmgtNXY1em0yLTExVjVoLTJ2NWg1VjhoLTN6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iZ2V0X2FwcF8yNHB4Ij48cGF0aCBkPSJNMTkgOWgtNFYzSDl2Nkg1bDcgNyA3LTd6TTUgMTh2MmgxNHYtMkg1eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9Imdyb3VwX3dvcmtfMjRweCI+PHBhdGggZD0iTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6TTggMTcuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6TTkuNSA4YzAtMS4zOCAxLjEyLTIuNSAyLjUtMi41czIuNSAxLjEyIDIuNSAyLjUtMS4xMiAyLjUtMi41IDIuNVM5LjUgOS4zOCA5LjUgOHptNi41IDkuNWMtMS4zOCAwLTIuNS0xLjEyLTIuNS0yLjVzMS4xMi0yLjUgMi41LTIuNSAyLjUgMS4xMiAyLjUgMi41LTEuMTIgMi41LTIuNSAyLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0iaGVscF9vdXRsaW5lXzI0cHgiPjxwYXRoIGQ9Ik0xMSAxOGgydi0yaC0ydjJ6bTEtMTZDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTAgMThjLTQuNDEgMC04LTMuNTktOC04czMuNTktOCA4LTggOCAzLjU5IDggOC0zLjU5IDgtOCA4em0wLTE0Yy0yLjIxIDAtNCAxLjc5LTQgNGgyYzAtMS4xLjktMiAyLTJzMiAuOSAyIDJjMCAyLTMgMS43NS0zIDVoMmMwLTIuMjUgMy0yLjUgMy01IDAtMi4yMS0xLjc5LTQtNC00eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImltYWdlX3NlYXJjaF8yNHB4Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTE4IDEzdjdINFY2aDUuMDJjLjA1LS43MS4yMi0xLjM4LjQ4LTJINGMtMS4xIDAtMiAuOS0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMnYtNWwtMi0yem0tMS41IDVoLTExbDIuNzUtMy41MyAxLjk2IDIuMzYgMi43NS0zLjU0em0yLjgtOS4xMWMuNDQtLjcuNy0xLjUxLjctMi4zOUMyMCA0LjAxIDE3Ljk5IDIgMTUuNSAyUzExIDQuMDEgMTEgNi41czIuMDEgNC41IDQuNDkgNC41Yy44OCAwIDEuNy0uMjYgMi4zOS0uN0wyMSAxMy40MiAyMi40MiAxMiAxOS4zIDguODl6TTE1LjUgOUMxNC4xMiA5IDEzIDcuODggMTMgNi41UzE0LjEyIDQgMTUuNSA0IDE4IDUuMTIgMTggNi41IDE2Ljg4IDkgMTUuNSA5eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9ImluZm9fb3V0bGluZV8yNHB4Ij48cGF0aCBkPSJNMTEgMTdoMnYtNmgtMnY2em0xLTE1QzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLTQuNDggMTAtMTBTMTcuNTIgMiAxMiAyem0wIDE4Yy00LjQxIDAtOC0zLjU5LTgtOHMzLjU5LTggOC04IDggMy41OSA4IDgtMy41OSA4LTggOHpNMTEgOWgyVjdoLTJ2MnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjQgMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ia2VlcF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE2LDlWNGwxLDBjMC41NSwwLDEtMC40NSwxLTF2MGMwLTAuNTUtMC40NS0xLTEtMUg3QzYuNDUsMiw2LDIuNDUsNiwzdjAgYzAsMC41NSwwLjQ1LDEsMSwxbDEsMHY1YzAsMS42Ni0xLjM0LDMtMywzaDB2Mmg1Ljk3djdsMSwxbDEtMXYtN0gxOXYtMmgwQzE3LjM0LDEyLDE2LDEwLjY2LDE2LDl6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImtlZXBfb3V0bGluZV8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiLz48L2c+PGc+PHBhdGggZD0iTTE0LDR2NWMwLDEuMTIsMC4zNywyLjE2LDEsM0g5YzAuNjUtMC44NiwxLTEuOSwxLTNWNEgxNCBNMTcsMkg3QzYuNDUsMiw2LDIuNDUsNiwzYzAsMC41NSwwLjQ1LDEsMSwxYzAsMCwwLDAsMCwwbDEsMHY1IGMwLDEuNjYtMS4zNCwzLTMsM3YyaDUuOTd2N2wxLDFsMS0xdi03SDE5di0yYzAsMCwwLDAsMCwwYy0xLjY2LDAtMy0xLjM0LTMtM1Y0bDEsMGMwLDAsMCwwLDAsMGMwLjU1LDAsMS0wLjQ1LDEtMSBDMTgsMi40NSwxNy41NSwyLDE3LDJMMTcsMnoiLz48L2c+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9ImxpZ2h0X21vZGVfMjRweCI+PHJlY3QgZmlsbD0ibm9uZSIgaGVpZ2h0PSIyNCIgd2lkdGg9IjI0Ii8+PHBhdGggZD0iTTEyLDdjLTIuNzYsMC01LDIuMjQtNSw1czIuMjQsNSw1LDVzNS0yLjI0LDUtNVMxNC43Niw3LDEyLDdMMTIsN3ogTTIsMTNsMiwwYzAuNTUsMCwxLTAuNDUsMS0xcy0wLjQ1LTEtMS0xbC0yLDAgYy0wLjU1LDAtMSwwLjQ1LTEsMVMxLjQ1LDEzLDIsMTN6IE0yMCwxM2wyLDBjMC41NSwwLDEtMC40NSwxLTFzLTAuNDUtMS0xLTFsLTIsMGMtMC41NSwwLTEsMC40NS0xLDFTMTkuNDUsMTMsMjAsMTN6IE0xMSwydjIgYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTFWMmMwLTAuNTUtMC40NS0xLTEtMVMxMSwxLjQ1LDExLDJ6IE0xMSwyMHYyYzAsMC41NSwwLjQ1LDEsMSwxczEtMC40NSwxLTF2LTJjMC0wLjU1LTAuNDUtMS0xLTEgQzExLjQ1LDE5LDExLDE5LjQ1LDExLDIweiBNNS45OSw0LjU4Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFsMS4wNiwxLjA2IGMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMHMwLjM5LTEuMDMsMC0xLjQxTDUuOTksNC41OHogTTE4LjM2LDE2Ljk1Yy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDEgbDEuMDYsMS4wNmMwLjM5LDAuMzksMS4wMywwLjM5LDEuNDEsMGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MUwxOC4zNiwxNi45NXogTTE5LjQyLDUuOTljMC4zOS0wLjM5LDAuMzktMS4wMywwLTEuNDEgYy0wLjM5LTAuMzktMS4wMy0wLjM5LTEuNDEsMGwtMS4wNiwxLjA2Yy0wLjM5LDAuMzktMC4zOSwxLjAzLDAsMS40MXMxLjAzLDAuMzksMS40MSwwTDE5LjQyLDUuOTl6IE03LjA1LDE4LjM2IGMwLjM5LTAuMzksMC4zOS0xLjAzLDAtMS40MWMtMC4zOS0wLjM5LTEuMDMtMC4zOS0xLjQxLDBsLTEuMDYsMS4wNmMtMC4zOSwwLjM5LTAuMzksMS4wMywwLDEuNDFzMS4wMywwLjM5LDEuNDEsMEw3LjA1LDE4LjM2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAyNCAyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJsaW5lX3dlaWdodF8yNHB4Ij48Zz48cmVjdCBmaWxsPSJub25lIiBoZWlnaHQ9IjI0IiB3aWR0aD0iMjQiIHg9IjAiLz48L2c+PGc+PGc+PGc+PHBhdGggZD0iTTMsMTdoMTh2LTJIM1YxN3ogTTMsMjBoMTh2LTFIM1YyMHogTTMsMTNoMTh2LTNIM1YxM3ogTTMsNHY0aDE4VjRIM3oiLz48L2c+PC9nPjwvZz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJtb3JlX3ZlcnRfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiA4YzEuMSAwIDItLjkgMi0ycy0uOS0yLTItMi0yIC45LTIgMiAuOSAyIDIgMnptMCAyYy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnptMCA2Yy0xLjEgMC0yIC45LTIgMnMuOSAyIDIgMiAyLS45IDItMi0uOS0yLTItMnoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjQiIGlkPSJub3RpZmljYXRpb25zX25vbmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMiAyMmMxLjEgMCAyLS45IDItMmgtNGMwIDEuMS45IDIgMiAyem02LTZ2LTVjMC0zLjA3LTEuNjMtNS42NC00LjUtNi4zMlY0YzAtLjgzLS42Ny0xLjUtMS41LTEuNXMtMS41LjY3LTEuNSAxLjV2LjY4QzcuNjQgNS4zNiA2IDcuOTIgNiAxMXY1bC0yIDJ2MWgxNnYtMWwtMi0yem0tMiAxSDh2LTZjMC0yLjQ4IDEuNTEtNC41IDQtNC41czQgMi4wMiA0IDQuNXY2eiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgaWQ9InBhbGV0dGVfMjRweCI+PHBhdGggZD0iTTEyIDNjLTQuOTcgMC05IDQuMDMtOSA5czQuMDMgOSA5IDljLjgzIDAgMS41LS42NyAxLjUtMS41IDAtLjM5LS4xNS0uNzQtLjM5LTEuMDEtLjIzLS4yNi0uMzgtLjYxLS4zOC0uOTkgMC0uODMuNjctMS41IDEuNS0xLjVIMTZjMi43NiAwIDUtMi4yNCA1LTUgMC00LjQyLTQuMDMtOC05LTh6bS01LjUgOWMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzUuNjcgOSA2LjUgOSA4IDkuNjcgOCAxMC41IDcuMzMgMTIgNi41IDEyem0zLTRDOC42NyA4IDggNy4zMyA4IDYuNVM4LjY3IDUgOS41IDVzMS41LjY3IDEuNSAxLjVTMTAuMzMgOCA5LjUgOHptNSAwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjVTMTMuNjcgNSAxNC41IDVzMS41LjY3IDEuNSAxLjVTMTUuMzMgOCAxNC41IDh6bTMgNGMtLjgzIDAtMS41LS42Ny0xLjUtMS41UzE2LjY3IDkgMTcuNSA5czEuNS42NyAxLjUgMS41LS42NyAxLjUtMS41IDEuNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJyZWZyZXNoXzI0cHgiPjxwYXRoIGQ9Ik0xNy42NSA2LjM1QzE2LjIgNC45IDE0LjIxIDQgMTIgNGMtNC40MiAwLTcuOTkgMy41OC03Ljk5IDhzMy41NyA4IDcuOTkgOGMzLjczIDAgNi44NC0yLjU1IDcuNzMtNmgtMi4wOGMtLjgyIDIuMzMtMy4wNCA0LTUuNjUgNC0zLjMxIDAtNi0yLjY5LTYtNnMyLjY5LTYgNi02YzEuNjYgMCAzLjE0LjY5IDQuMjIgMS43OEwxMyAxMWg3VjRsLTIuMzUgMi4zNXoiLz48L3N2Zz48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGlkPSJzZWFyY2hfMjRweCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0MxNS40MSAxMi41OSAxNiAxMS4xMSAxNiA5LjUgMTYgNS45MSAxMy4wOSAzIDkuNSAzUzMgNS45MSAzIDkuNSA1LjkxIDE2IDkuNSAxNmMxLjYxIDAgMy4wOS0uNTkgNC4yMy0xLjU3bC4yNy4yOHYuNzlsNSA0Ljk5TDIwLjQ5IDE5bC00Ljk5LTV6bS02IDBDNy4wMSAxNCA1IDExLjk5IDUgOS41UzcuMDEgNSA5LjUgNSAxNCA3LjAxIDE0IDkuNSAxMS45OSAxNCA5LjUgMTR6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0ic2V0dGluZ3NfMjRweCI+PHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OHMtLjAzLS42Ni0uMDctLjk4bDIuMTEtMS42NWMuMTktLjE1LjI0LS40Mi4xMi0uNjRsLTItMy40NmMtLjEyLS4yMi0uMzktLjMtLjYxLS4yMmwtMi40OSAxYy0uNTItLjQtMS4wOC0uNzMtMS42OS0uOThsLS4zOC0yLjY1QzE0LjQ2IDIuMTggMTQuMjUgMiAxNCAyaC00Yy0uMjUgMC0uNDYuMTgtLjQ5LjQybC0uMzggMi42NWMtLjYxLjI1LTEuMTcuNTktMS42OS45OGwtMi40OS0xYy0uMjMtLjA5LS40OSAwLS42MS4yMmwtMiAzLjQ2Yy0uMTMuMjItLjA3LjQ5LjEyLjY0bDIuMTEgMS42NWMtLjA0LjMyLS4wNy42NS0uMDcuOThzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMTIuMjIuMzkuMy42MS4yMmwyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4yMy4wOS40OSAwIC42MS0uMjJsMi0zLjQ2Yy4xMi0uMjIuMDctLjQ5LS4xMi0uNjRsLTIuMTEtMS42NXpNMTIgMTUuNWMtMS45MyAwLTMuNS0xLjU3LTMuNS0zLjVzMS41Ny0zLjUgMy41LTMuNSAzLjUgMS41NyAzLjUgMy41LTEuNTcgMy41LTMuNSAzLjV6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3NfYmFja3VwX3Jlc3RvcmVfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xNCAxMmMwLTEuMS0uOS0yLTItMnMtMiAuOS0yIDIgLjkgMiAyIDIgMi0uOSAyLTJ6bS0yLTljLTQuOTcgMC05IDQuMDMtOSA5SDBsNCA0IDQtNEg1YzAtMy44NyAzLjEzLTcgNy03czcgMy4xMyA3IDctMy4xMyA3LTcgN2MtMS41MSAwLTIuOTEtLjQ5LTQuMDYtMS4zbC0xLjQyIDEuNDRDOC4wNCAyMC4zIDkuOTQgMjEgMTIgMjFjNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjI0IiBpZD0ic2V0dGluZ3Nfb3ZlcnNjYW5fMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xMi4wMSA1LjVMMTAgOGg0bC0xLjk5LTIuNXpNMTggMTB2NGwyLjUtMS45OUwxOCAxMHpNNiAxMGwtMi41IDIuMDFMNiAxNHYtNHptOCA2aC00bDIuMDEgMi41TDE0IDE2em03LTEzSDNjLTEuMSAwLTIgLjktMiAydjE0YzAgMS4xLjkgMiAyIDJoMThjMS4xIDAgMi0uOSAyLTJWNWMwLTEuMS0uOS0yLTItMnptMCAxNi4wMUgzVjQuOTloMTh2MTQuMDJ6Ii8+PC9zdmc+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBpZD0idmlzaWJpbGl0eV9vZmZfMjRweCI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZDMy4wOCA4LjMgMS43OCAxMC4wMiAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiIvPjwvc3ZnPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgaWQ9Indhcm5pbmdfMjRweCI+PHBhdGggZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0xIDIxaDIyTDEyIDIgMSAyMXptMTItM2gtMnYtMmgydjJ6bTAtNGgtMnYtNGgydjR6Ii8+PC9zdmc+PC9kZWZzPjwvc3ZnPgo=",
- "headers": [
- [
- "content-type",
- "image/svg+xml; charset=utf-8"
- ]
- ],
+ "https://localhost:6006/experiment/defaultExperimentId/data/plugin/timeseries/timeSeries?requests=%5B%7B%22plugin%22:%22scalars%22,%22tag%22:%22coco/bbox_mAP_m%22%7D%5D": {
+ "data": "W3sicGx1Z2luIjogInNjYWxhcnMiLCAidGFnIjogImNvY28vYmJveF9tQVBfbSIsICJydW5Ub1NlcmllcyI6IHsicnRtZGV0X3RpbnlfMXhiNC0yMGVfYmFsbG9vbi8yMDIzMDQxN18xMDI4MzUvdmlzX2RhdGEiOiBbeyJ3YWxsVGltZSI6IDE2ODE3MjczMzUuNDQyNTQ5MiwgInN0ZXAiOiAxLCAidmFsdWUiOiAwLjA3NTk5OTk5NzU1NjIwOTU2fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNDUuNjM5MTc3NiwgInN0ZXAiOiAyLCAidmFsdWUiOiAwLjA4MTAwMDAwMDIzODQxODU4fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczNTIuOTY4ODg2LCAic3RlcCI6IDMsICJ2YWx1ZSI6IDAuMDk3OTk5OTk3NDM3MDAwMjd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM2Mi40OTE1NDA3LCAic3RlcCI6IDQsICJ2YWx1ZSI6IDAuMTE1OTk5OTk2NjYyMTM5ODl9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM3MS42NTA3MzA4LCAic3RlcCI6IDUsICJ2YWx1ZSI6IDAuMTA5OTk5OTk5NDAzOTUzNTV9LCB7IndhbGxUaW1lIjogMTY4MTcyNzM4MS40MjcxNjYsICJzdGVwIjogNiwgInZhbHVlIjogMC4xNzI5OTk5OTI5NjY2NTE5Mn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3Mzg5LjUzNzY0MjcsICJzdGVwIjogNywgInZhbHVlIjogMC4xODYwMDAwMDQ0MTA3NDM3fSwgeyJ3YWxsVGltZSI6IDE2ODE3MjczOTcuNjg1MTg3LCAic3RlcCI6IDgsICJ2YWx1ZSI6IDAuMjMxMDAwMDA2MTk4ODgzMDZ9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQwNy4wMzM0MTY1LCAic3RlcCI6IDksICJ2YWx1ZSI6IDAuMjI2OTk5OTk4MDkyNjUxMzd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQxNi4wMzk1NTUsICJzdGVwIjogMTAsICJ2YWx1ZSI6IDAuMjczMDAwMDAxOTA3MzQ4NjN9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQyNS42NTU0MjE3LCAic3RlcCI6IDExLCAidmFsdWUiOiAwLjIzMTAwMDAwNjE5ODg4MzA2fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0MzMuMDA0NDExNSwgInN0ZXAiOiAxMiwgInZhbHVlIjogMC4yMTc5OTk5OTQ3NTQ3OTEyNn0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDQyLjA0OTg5OTgsICJzdGVwIjogMTMsICJ2YWx1ZSI6IDAuMjQxOTk5OTk4Njg4Njk3ODF9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ0Ny45MzQ5MDE1LCAic3RlcCI6IDE0LCAidmFsdWUiOiAwLjIxOTk5OTk5ODgwNzkwNzF9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ1Ny45NzU0NzI1LCAic3RlcCI6IDE1LCAidmFsdWUiOiAwLjIzMTk5OTk5MzMyNDI3OTc5fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NjMuODI2MDkyNSwgInN0ZXAiOiAxNiwgInZhbHVlIjogMC4yNjM5OTk5OTg1Njk0ODg1fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0NzMuNDY4ODc1LCAic3RlcCI6IDE3LCAidmFsdWUiOiAwLjI2MTk5OTk5NDUxNjM3Mjd9LCB7IndhbGxUaW1lIjogMTY4MTcyNzQ4MC43OTAxMDUzLCAic3RlcCI6IDE4LCAidmFsdWUiOiAwLjI0MzAwMDAwMDcxNTI1NTc0fSwgeyJ3YWxsVGltZSI6IDE2ODE3Mjc0ODguOTI0MTAxNCwgInN0ZXAiOiAxOSwgInZhbHVlIjogMC4yNzc5OTk5OTcxMzg5NzcwNX0sIHsid2FsbFRpbWUiOiAxNjgxNzI3NDk0LjU2OTYwOTksICJzdGVwIjogMjAsICJ2YWx1ZSI6IDAuMjQwOTk5OTk2NjYyMTM5OX1dfX1d",
"ok": true,
- "status": 200,
- "status_text": ""
- },
- "https://localhost:6006/index.js?_file_hash=29a7d03a": {
- "data": "dmFyIENMT1NVUkVfTk9fREVQUyA9IHRydWU7CndpbmRvdy5wb2x5bWVyU2tpcExvYWRpbmdGb250Um9ib3RvID0gdHJ1ZTsKLyoqIHZpbTogZXQ6dHM9NDpzdz00OnN0cz00CiAqIEBsaWNlbnNlIFJlcXVpcmVKUyAyLjMuNiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4KICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UsIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2Jsb2IvbWFzdGVyL0xJQ0VOU0UKICovCi8vTm90IHVzaW5nIHN0cmljdDogdW5ldmVuIHN0cmljdCBzdXBwb3J0IGluIGJyb3dzZXJzLCAjMzkyLCBhbmQgY2F1c2VzCi8vcHJvYmxlbXMgd2l0aCByZXF1aXJlanMuZXhlYygpL3RyYW5zcGlsZXIgcGx1Z2lucyB0aGF0IG1heSBub3QgYmUgc3RyaWN0LgovKmpzbGludCByZWdleHA6IHRydWUsIG5vbWVuOiB0cnVlLCBzbG9wcHk6IHRydWUgKi8KLypnbG9iYWwgd2luZG93LCBuYXZpZ2F0b3IsIGRvY3VtZW50LCBpbXBvcnRTY3JpcHRzLCBzZXRUaW1lb3V0LCBvcGVyYSAqLwoKdmFyIHJlcXVpcmVqcywgcmVxdWlyZSwgZGVmaW5lOwooZnVuY3Rpb24gKGdsb2JhbCwgc2V0VGltZW91dCkgewogICAgdmFyIHJlcSwgcywgaGVhZCwgYmFzZUVsZW1lbnQsIGRhdGFNYWluLCBzcmMsCiAgICAgICAgaW50ZXJhY3RpdmVTY3JpcHQsIGN1cnJlbnRseUFkZGluZ1NjcmlwdCwgbWFpblNjcmlwdCwgc3ViUGF0aCwKICAgICAgICB2ZXJzaW9uID0gJzIuMy42JywKICAgICAgICBjb21tZW50UmVnRXhwID0gL1wvXCpbXHNcU10qP1wqXC98KFteOiInPV18XilcL1wvLiokL21nLAogICAgICAgIGNqc1JlcXVpcmVSZWdFeHAgPSAvW14uXVxzKnJlcXVpcmVccypcKFxzKlsiJ10oW14nIlxzXSspWyInXVxzKlwpL2csCiAgICAgICAganNTdWZmaXhSZWdFeHAgPSAvXC5qcyQvLAogICAgICAgIGN1cnJEaXJSZWdFeHAgPSAvXlwuXC8vLAogICAgICAgIG9wID0gT2JqZWN0LnByb3RvdHlwZSwKICAgICAgICBvc3RyaW5nID0gb3AudG9TdHJpbmcsCiAgICAgICAgaGFzT3duID0gb3AuaGFzT3duUHJvcGVydHksCiAgICAgICAgaXNCcm93c2VyID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50KSwKICAgICAgICBpc1dlYldvcmtlciA9ICFpc0Jyb3dzZXIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgIT09ICd1bmRlZmluZWQnLAogICAgICAgIC8vUFMzIGluZGljYXRlcyBsb2FkZWQgYW5kIGNvbXBsZXRlLCBidXQgbmVlZCB0byB3YWl0IGZvciBjb21wbGV0ZQogICAgICAgIC8vc3BlY2lmaWNhbGx5LiBTZXF1ZW5jZSBpcyAnbG9hZGluZycsICdsb2FkZWQnLCBleGVjdXRpb24sCiAgICAgICAgLy8gdGhlbiAnY29tcGxldGUnLiBUaGUgVUEgY2hlY2sgaXMgdW5mb3J0dW5hdGUsIGJ1dCBub3Qgc3VyZSBob3cKICAgICAgICAvL3RvIGZlYXR1cmUgdGVzdCB3L28gY2F1c2luZyBwZXJmIGlzc3Vlcy4KICAgICAgICByZWFkeVJlZ0V4cCA9IGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICdQTEFZU1RBVElPTiAzJyA/CiAgICAgICAgICAgICAgICAgICAgICAvXmNvbXBsZXRlJC8gOiAvXihjb21wbGV0ZXxsb2FkZWQpJC8sCiAgICAgICAgZGVmQ29udGV4dE5hbWUgPSAnXycsCiAgICAgICAgLy9PaCB0aGUgdHJhZ2VkeSwgZGV0ZWN0aW5nIG9wZXJhLiBTZWUgdGhlIHVzYWdlIG9mIGlzT3BlcmEgZm9yIHJlYXNvbi4KICAgICAgICBpc09wZXJhID0gdHlwZW9mIG9wZXJhICE9PSAndW5kZWZpbmVkJyAmJiBvcGVyYS50b1N0cmluZygpID09PSAnW29iamVjdCBPcGVyYV0nLAogICAgICAgIGNvbnRleHRzID0ge30sCiAgICAgICAgY2ZnID0ge30sCiAgICAgICAgZ2xvYmFsRGVmUXVldWUgPSBbXSwKICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IGZhbHNlOwoKICAgIC8vQ291bGQgbWF0Y2ggc29tZXRoaW5nIGxpa2UgJykvL2NvbW1lbnQnLCBkbyBub3QgbG9zZSB0aGUgcHJlZml4IHRvIGNvbW1lbnQuCiAgICBmdW5jdGlvbiBjb21tZW50UmVwbGFjZShtYXRjaCwgc2luZ2xlUHJlZml4KSB7CiAgICAgICAgcmV0dXJuIHNpbmdsZVByZWZpeCB8fCAnJzsKICAgIH0KCiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGl0KSB7CiAgICAgICAgcmV0dXJuIG9zdHJpbmcuY2FsbChpdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7CiAgICB9CgogICAgZnVuY3Rpb24gaXNBcnJheShpdCkgewogICAgICAgIHJldHVybiBvc3RyaW5nLmNhbGwoaXQpID09PSAnW29iamVjdCBBcnJheV0nOwogICAgfQoKICAgIC8qKgogICAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheS4gSWYgdGhlIGZ1bmMgcmV0dXJucwogICAgICogYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaChhcnksIGZ1bmMpIHsKICAgICAgICBpZiAoYXJ5KSB7CiAgICAgICAgICAgIHZhciBpOwogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJ5Lmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGl0ZXJhdGluZyBvdmVyIGFuIGFycmF5IGJhY2t3YXJkcy4gSWYgdGhlIGZ1bmMKICAgICAqIHJldHVybnMgYSB0cnVlIHZhbHVlLCBpdCB3aWxsIGJyZWFrIG91dCBvZiB0aGUgbG9vcC4KICAgICAqLwogICAgZnVuY3Rpb24gZWFjaFJldmVyc2UoYXJ5LCBmdW5jKSB7CiAgICAgICAgaWYgKGFyeSkgewogICAgICAgICAgICB2YXIgaTsKICAgICAgICAgICAgZm9yIChpID0gYXJ5Lmxlbmd0aCAtIDE7IGkgPiAtMTsgaSAtPSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoYXJ5W2ldICYmIGZ1bmMoYXJ5W2ldLCBpLCBhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFzUHJvcChvYmosIHByb3ApIHsKICAgICAgICByZXR1cm4gaGFzT3duLmNhbGwob2JqLCBwcm9wKTsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRPd24ob2JqLCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGhhc1Byb3Aob2JqLCBwcm9wKSAmJiBvYmpbcHJvcF07CiAgICB9CgogICAgLyoqCiAgICAgKiBDeWNsZXMgb3ZlciBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdCBhbmQgY2FsbHMgYSBmdW5jdGlvbiBmb3IgZWFjaAogICAgICogcHJvcGVydHkgdmFsdWUuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlLCB0aGVuIHRoZQogICAgICogaXRlcmF0aW9uIGlzIHN0b3BwZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGVhY2hQcm9wKG9iaiwgZnVuYykgewogICAgICAgIHZhciBwcm9wOwogICAgICAgIGZvciAocHJvcCBpbiBvYmopIHsKICAgICAgICAgICAgaWYgKGhhc1Byb3Aob2JqLCBwcm9wKSkgewogICAgICAgICAgICAgICAgaWYgKGZ1bmMob2JqW3Byb3BdLCBwcm9wKSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2ltcGxlIGZ1bmN0aW9uIHRvIG1peCBpbiBwcm9wZXJ0aWVzIGZyb20gc291cmNlIGludG8gdGFyZ2V0LAogICAgICogYnV0IG9ubHkgaWYgdGFyZ2V0IGRvZXMgbm90IGFscmVhZHkgaGF2ZSBhIHByb3BlcnR5IG9mIHRoZSBzYW1lIG5hbWUuCiAgICAgKi8KICAgIGZ1bmN0aW9uIG1peGluKHRhcmdldCwgc291cmNlLCBmb3JjZSwgZGVlcFN0cmluZ01peGluKSB7CiAgICAgICAgaWYgKHNvdXJjZSkgewogICAgICAgICAgICBlYWNoUHJvcChzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgaWYgKGZvcmNlIHx8ICFoYXNQcm9wKHRhcmdldCwgcHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoZGVlcFN0cmluZ01peGluICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIWlzQXJyYXkodmFsdWUpICYmICFpc0Z1bmN0aW9uKHZhbHVlKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAhKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXRbcHJvcF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluKHRhcmdldFtwcm9wXSwgdmFsdWUsIGZvcmNlLCBkZWVwU3RyaW5nTWl4aW4pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtwcm9wXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgLy9TaW1pbGFyIHRvIEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLCBidXQgdGhlICd0aGlzJyBvYmplY3QgaXMgc3BlY2lmaWVkCiAgICAvL2ZpcnN0LCBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gcmVhZC9maWd1cmUgb3V0IHdoYXQgJ3RoaXMnIHdpbGwgYmUuCiAgICBmdW5jdGlvbiBiaW5kKG9iaiwgZm4pIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkob2JqLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gc2NyaXB0cygpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGVycikgewogICAgICAgIHRocm93IGVycjsKICAgIH0KCiAgICAvL0FsbG93IGdldHRpbmcgYSBnbG9iYWwgdGhhdCBpcyBleHByZXNzZWQgaW4KICAgIC8vZG90IG5vdGF0aW9uLCBsaWtlICdhLmIuYycuCiAgICBmdW5jdGlvbiBnZXRHbG9iYWwodmFsdWUpIHsKICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGcgPSBnbG9iYWw7CiAgICAgICAgZWFjaCh2YWx1ZS5zcGxpdCgnLicpLCBmdW5jdGlvbiAocGFydCkgewogICAgICAgICAgICBnID0gZ1twYXJ0XTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZzsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnN0cnVjdHMgYW4gZXJyb3Igd2l0aCBhIHBvaW50ZXIgdG8gYW4gVVJMIHdpdGggbW9yZSBpbmZvcm1hdGlvbi4KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpZCB0aGUgZXJyb3IgSUQgdGhhdCBtYXBzIHRvIGFuIElEIG9uIGEgd2ViIHBhZ2UuCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBodW1hbiByZWFkYWJsZSBlcnJvci4KICAgICAqIEBwYXJhbSB7RXJyb3J9IFtlcnJdIHRoZSBvcmlnaW5hbCBlcnJvciwgaWYgdGhlcmUgaXMgb25lLgogICAgICoKICAgICAqIEByZXR1cm5zIHtFcnJvcn0KICAgICAqLwogICAgZnVuY3Rpb24gbWFrZUVycm9yKGlkLCBtc2csIGVyciwgcmVxdWlyZU1vZHVsZXMpIHsKICAgICAgICB2YXIgZSA9IG5ldyBFcnJvcihtc2cgKyAnXG5odHRwczovL3JlcXVpcmVqcy5vcmcvZG9jcy9lcnJvcnMuaHRtbCMnICsgaWQpOwogICAgICAgIGUucmVxdWlyZVR5cGUgPSBpZDsKICAgICAgICBlLnJlcXVpcmVNb2R1bGVzID0gcmVxdWlyZU1vZHVsZXM7CiAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICBlLm9yaWdpbmFsRXJyb3IgPSBlcnI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlOwogICAgfQoKICAgIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJykgewogICAgICAgIC8vSWYgYSBkZWZpbmUgaXMgYWxyZWFkeSBpbiBwbGF5IHZpYSBhbm90aGVyIEFNRCBsb2FkZXIsCiAgICAgICAgLy9kbyBub3Qgb3ZlcndyaXRlLgogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXF1aXJlanMpKSB7CiAgICAgICAgICAgIC8vRG8gbm90IG92ZXJ3cml0ZSBhbiBleGlzdGluZyByZXF1aXJlanMgaW5zdGFuY2UuCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2ZnID0gcmVxdWlyZWpzOwogICAgICAgIHJlcXVpcmVqcyA9IHVuZGVmaW5lZDsKICAgIH0KCiAgICAvL0FsbG93IGZvciBhIHJlcXVpcmUgY29uZmlnIG9iamVjdAogICAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJyAmJiAhaXNGdW5jdGlvbihyZXF1aXJlKSkgewogICAgICAgIC8vYXNzdW1lIGl0IGlzIGEgY29uZmlnIG9iamVjdC4KICAgICAgICBjZmcgPSByZXF1aXJlOwogICAgICAgIHJlcXVpcmUgPSB1bmRlZmluZWQ7CiAgICB9CgogICAgZnVuY3Rpb24gbmV3Q29udGV4dChjb250ZXh0TmFtZSkgewogICAgICAgIHZhciBpbkNoZWNrTG9hZGVkLCBNb2R1bGUsIGNvbnRleHQsIGhhbmRsZXJzLAogICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCwKICAgICAgICAgICAgY29uZmlnID0gewogICAgICAgICAgICAgICAgLy9EZWZhdWx0cy4gRG8gbm90IHNldCBhIGRlZmF1bHQgZm9yIG1hcAogICAgICAgICAgICAgICAgLy9jb25maWcgdG8gc3BlZWQgdXAgbm9ybWFsaXplKCksIHdoaWNoCiAgICAgICAgICAgICAgICAvL3dpbGwgcnVuIGZhc3RlciBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgogICAgICAgICAgICAgICAgd2FpdFNlY29uZHM6IDcsCiAgICAgICAgICAgICAgICBiYXNlVXJsOiAnLi8nLAogICAgICAgICAgICAgICAgcGF0aHM6IHt9LAogICAgICAgICAgICAgICAgYnVuZGxlczoge30sCiAgICAgICAgICAgICAgICBwa2dzOiB7fSwKICAgICAgICAgICAgICAgIHNoaW06IHt9LAogICAgICAgICAgICAgICAgY29uZmlnOiB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICByZWdpc3RyeSA9IHt9LAogICAgICAgICAgICAvL3JlZ2lzdHJ5IG9mIGp1c3QgZW5hYmxlZCBtb2R1bGVzLCB0byBzcGVlZAogICAgICAgICAgICAvL2N5Y2xlIGJyZWFraW5nIGNvZGUgd2hlbiBsb3RzIG9mIG1vZHVsZXMKICAgICAgICAgICAgLy9hcmUgcmVnaXN0ZXJlZCwgYnV0IG5vdCBhY3RpdmF0ZWQuCiAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeSA9IHt9LAogICAgICAgICAgICB1bmRlZkV2ZW50cyA9IHt9LAogICAgICAgICAgICBkZWZRdWV1ZSA9IFtdLAogICAgICAgICAgICBkZWZpbmVkID0ge30sCiAgICAgICAgICAgIHVybEZldGNoZWQgPSB7fSwKICAgICAgICAgICAgYnVuZGxlc01hcCA9IHt9LAogICAgICAgICAgICByZXF1aXJlQ291bnRlciA9IDEsCiAgICAgICAgICAgIHVubm9ybWFsaXplZENvdW50ZXIgPSAxOwoKICAgICAgICAvKioKICAgICAgICAgKiBUcmltcyB0aGUgLiBhbmQgLi4gZnJvbSBhbiBhcnJheSBvZiBwYXRoIHNlZ21lbnRzLgogICAgICAgICAqIEl0IHdpbGwga2VlcCBhIGxlYWRpbmcgcGF0aCBzZWdtZW50IGlmIGEgLi4gd2lsbCBiZWNvbWUKICAgICAgICAgKiB0aGUgZmlyc3QgcGF0aCBzZWdtZW50LCB0byBoZWxwIHdpdGggbW9kdWxlIG5hbWUgbG9va3VwcywKICAgICAgICAgKiB3aGljaCBhY3QgbGlrZSBwYXRocywgYnV0IGNhbiBiZSByZW1hcHBlZC4gQnV0IHRoZSBlbmQgcmVzdWx0LAogICAgICAgICAqIGFsbCBwYXRocyB0aGF0IHVzZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29rIG5vcm1hbGl6ZWQuCiAgICAgICAgICogTk9URTogdGhpcyBtZXRob2QgTU9ESUZJRVMgdGhlIGlucHV0IGFycmF5LgogICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyeSB0aGUgYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0cmltRG90cyhhcnkpIHsKICAgICAgICAgICAgdmFyIGksIHBhcnQ7CiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnkubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHBhcnQgPSBhcnlbaV07CiAgICAgICAgICAgICAgICBpZiAocGFydCA9PT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICBpIC09IDE7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiBhdCB0aGUgc3RhcnQsIG9yIHByZXZpb3VzIHZhbHVlIGlzIHN0aWxsIC4uLAogICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgdGhlbSBzbyB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCBpdCBtYXkKICAgICAgICAgICAgICAgICAgICAvLyBzdGlsbCB3b3JrIHdoZW4gY29udmVydGVkIHRvIGEgcGF0aCwgZXZlbiB0aG91Z2gKICAgICAgICAgICAgICAgICAgICAvLyBhcyBhbiBJRCBpdCBpcyBsZXNzIHRoYW4gaWRlYWwuIEluIGxhcmdlciBwb2ludAogICAgICAgICAgICAgICAgICAgIC8vIHJlbGVhc2VzLCBtYXkgYmUgYmV0dGVyIHRvIGp1c3Qga2ljayBvdXQgYW4gZXJyb3IuCiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgfHwgKGkgPT09IDEgJiYgYXJ5WzJdID09PSAnLi4nKSB8fCBhcnlbaSAtIDFdID09PSAnLi4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJ5LnNwbGljZShpIC0gMSwgMik7CiAgICAgICAgICAgICAgICAgICAgICAgIGkgLT0gMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIEdpdmVuIGEgcmVsYXRpdmUgbW9kdWxlIG5hbWUsIGxpa2UgLi9zb21ldGhpbmcsIG5vcm1hbGl6ZSBpdCB0bwogICAgICAgICAqIGEgcmVhbCBuYW1lIHRoYXQgY2FuIGJlIG1hcHBlZCB0byBhIHBhdGguCiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgdGhlIHJlbGF0aXZlIG5hbWUKICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZU5hbWUgYSByZWFsIG5hbWUgdGhhdCB0aGUgbmFtZSBhcmcgaXMgcmVsYXRpdmUKICAgICAgICAgKiB0by4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFwcGx5TWFwIGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSB2YWx1ZS4gU2hvdWxkCiAgICAgICAgICogb25seSBiZSBkb25lIGlmIHRoaXMgbm9ybWFsaXphdGlvbiBpcyBmb3IgYSBkZXBlbmRlbmN5IElELgogICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IG5vcm1hbGl6ZWQgbmFtZQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCBiYXNlTmFtZSwgYXBwbHlNYXApIHsKICAgICAgICAgICAgdmFyIHBrZ01haW4sIG1hcFZhbHVlLCBuYW1lUGFydHMsIGksIGosIG5hbWVTZWdtZW50LCBsYXN0SW5kZXgsCiAgICAgICAgICAgICAgICBmb3VuZE1hcCwgZm91bmRJLCBmb3VuZFN0YXJNYXAsIHN0YXJJLCBub3JtYWxpemVkQmFzZVBhcnRzLAogICAgICAgICAgICAgICAgYmFzZVBhcnRzID0gKGJhc2VOYW1lICYmIGJhc2VOYW1lLnNwbGl0KCcvJykpLAogICAgICAgICAgICAgICAgbWFwID0gY29uZmlnLm1hcCwKICAgICAgICAgICAgICAgIHN0YXJNYXAgPSBtYXAgJiYgbWFwWycqJ107CgogICAgICAgICAgICAvL0FkanVzdCBhbnkgcmVsYXRpdmUgcGF0aHMuCiAgICAgICAgICAgIGlmIChuYW1lKSB7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnLycpOwogICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gbmFtZS5sZW5ndGggLSAxOwoKICAgICAgICAgICAgICAgIC8vIElmIHdhbnRpbmcgbm9kZSBJRCBjb21wYXRpYmlsaXR5LCBzdHJpcCAuanMgZnJvbSBlbmQKICAgICAgICAgICAgICAgIC8vIG9mIElEcy4gSGF2ZSB0byBkbyB0aGlzIGhlcmUsIGFuZCBub3QgaW4gbmFtZVRvVXJsCiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIG5vZGUgYWxsb3dzIGVpdGhlciAuanMgb3Igbm9uIC5qcyB0byBtYXAKICAgICAgICAgICAgICAgIC8vIHRvIHNhbWUgZmlsZS4KICAgICAgICAgICAgICAgIGlmIChjb25maWcubm9kZUlkQ29tcGF0ICYmIGpzU3VmZml4UmVnRXhwLnRlc3QobmFtZVtsYXN0SW5kZXhdKSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVbbGFzdEluZGV4XSA9IG5hbWVbbGFzdEluZGV4XS5yZXBsYWNlKGpzU3VmZml4UmVnRXhwLCAnJyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gU3RhcnRzIHdpdGggYSAnLicgc28gbmVlZCB0aGUgYmFzZU5hbWUKICAgICAgICAgICAgICAgIGlmIChuYW1lWzBdLmNoYXJBdCgwKSA9PT0gJy4nICYmIGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgIC8vQ29udmVydCBiYXNlTmFtZSB0byBhcnJheSwgYW5kIGxvcCBvZmYgdGhlIGxhc3QgcGFydCwKICAgICAgICAgICAgICAgICAgICAvL3NvIHRoYXQgLiBtYXRjaGVzIHRoYXQgJ2RpcmVjdG9yeScgYW5kIG5vdCBuYW1lIG9mIHRoZSBiYXNlTmFtZSdzCiAgICAgICAgICAgICAgICAgICAgLy9tb2R1bGUuIEZvciBpbnN0YW5jZSwgYmFzZU5hbWUgb2YgJ29uZS90d28vdGhyZWUnLCBtYXBzIHRvCiAgICAgICAgICAgICAgICAgICAgLy8nb25lL3R3by90aHJlZS5qcycsIGJ1dCB3ZSB3YW50IHRoZSBkaXJlY3RvcnksICdvbmUvdHdvJyBmb3IKICAgICAgICAgICAgICAgICAgICAvL3RoaXMgbm9ybWFsaXphdGlvbi4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkQmFzZVBhcnRzID0gYmFzZVBhcnRzLnNsaWNlKDAsIGJhc2VQYXJ0cy5sZW5ndGggLSAxKTsKICAgICAgICAgICAgICAgICAgICBuYW1lID0gbm9ybWFsaXplZEJhc2VQYXJ0cy5jb25jYXQobmFtZSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJpbURvdHMobmFtZSk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5qb2luKCcvJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vQXBwbHkgbWFwIGNvbmZpZyBpZiBhdmFpbGFibGUuCiAgICAgICAgICAgIGlmIChhcHBseU1hcCAmJiBtYXAgJiYgKGJhc2VQYXJ0cyB8fCBzdGFyTWFwKSkgewogICAgICAgICAgICAgICAgbmFtZVBhcnRzID0gbmFtZS5zcGxpdCgnLycpOwoKICAgICAgICAgICAgICAgIG91dGVyTG9vcDogZm9yIChpID0gbmFtZVBhcnRzLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgIG5hbWVTZWdtZW50ID0gbmFtZVBhcnRzLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXJ0cykgewogICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIGxvbmdlc3QgYmFzZU5hbWUgc2VnbWVudCBtYXRjaCBpbiB0aGUgY29uZmlnLgogICAgICAgICAgICAgICAgICAgICAgICAvL1NvLCBkbyBqb2lucyBvbiB0aGUgYmlnZ2VzdCB0byBzbWFsbGVzdCBsZW5ndGhzIG9mIGJhc2VQYXJ0cy4KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYmFzZVBhcnRzLmxlbmd0aDsgaiA+IDA7IGogLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwVmFsdWUgPSBnZXRPd24obWFwLCBiYXNlUGFydHMuc2xpY2UoMCwgaikuam9pbignLycpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jhc2VOYW1lIHNlZ21lbnQgaGFzIGNvbmZpZywgZmluZCBpZiBpdCBoYXMgb25lIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBWYWx1ZSA9IGdldE93bihtYXBWYWx1ZSwgbmFtZVNlZ21lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBWYWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL01hdGNoLCB1cGRhdGUgbmFtZSB0byB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE1hcCA9IG1hcFZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEkgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlckxvb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0NoZWNrIGZvciBhIHN0YXIgbWFwIG1hdGNoLCBidXQganVzdCBob2xkIG9uIHRvIGl0LAogICAgICAgICAgICAgICAgICAgIC8vaWYgdGhlcmUgaXMgYSBzaG9ydGVyIHNlZ21lbnQgbWF0Y2ggbGF0ZXIgaW4gYSBtYXRjaGluZwogICAgICAgICAgICAgICAgICAgIC8vY29uZmlnLCB0aGVuIGZhdm9yIG92ZXIgdGhpcyBzdGFyIG1hcC4KICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kU3Rhck1hcCAmJiBzdGFyTWFwICYmIGdldE93bihzdGFyTWFwLCBuYW1lU2VnbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTdGFyTWFwID0gZ2V0T3duKHN0YXJNYXAsIG5hbWVTZWdtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhckkgPSBpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoIWZvdW5kTWFwICYmIGZvdW5kU3Rhck1hcCkgewogICAgICAgICAgICAgICAgICAgIGZvdW5kTWFwID0gZm91bmRTdGFyTWFwOwogICAgICAgICAgICAgICAgICAgIGZvdW5kSSA9IHN0YXJJOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChmb3VuZE1hcCkgewogICAgICAgICAgICAgICAgICAgIG5hbWVQYXJ0cy5zcGxpY2UoMCwgZm91bmRJLCBmb3VuZE1hcCk7CiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0cy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIElmIHRoZSBuYW1lIHBvaW50cyB0byBhIHBhY2thZ2UncyBuYW1lLCB1c2UKICAgICAgICAgICAgLy8gdGhlIHBhY2thZ2UgbWFpbiBpbnN0ZWFkLgogICAgICAgICAgICBwa2dNYWluID0gZ2V0T3duKGNvbmZpZy5wa2dzLCBuYW1lKTsKCiAgICAgICAgICAgIHJldHVybiBwa2dNYWluID8gcGtnTWFpbiA6IG5hbWU7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiByZW1vdmVTY3JpcHQobmFtZSkgewogICAgICAgICAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgICAgICAgICBlYWNoKHNjcmlwdHMoKSwgZnVuY3Rpb24gKHNjcmlwdE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0Tm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZW1vZHVsZScpID09PSBuYW1lICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHROb2RlLmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcpID09PSBjb250ZXh0LmNvbnRleHROYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdE5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzY3JpcHROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGhhc1BhdGhGYWxsYmFjayhpZCkgewogICAgICAgICAgICB2YXIgcGF0aENvbmZpZyA9IGdldE93bihjb25maWcucGF0aHMsIGlkKTsKICAgICAgICAgICAgaWYgKHBhdGhDb25maWcgJiYgaXNBcnJheShwYXRoQ29uZmlnKSAmJiBwYXRoQ29uZmlnLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIC8vUG9wIG9mZiB0aGUgZmlyc3QgYXJyYXkgdmFsdWUsIHNpbmNlIGl0IGZhaWxlZCwgYW5kCiAgICAgICAgICAgICAgICAvL3JldHJ5CiAgICAgICAgICAgICAgICBwYXRoQ29uZmlnLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUudW5kZWYoaWQpOwoKICAgICAgICAgICAgICAgIC8vQ3VzdG9tIHJlcXVpcmUgdGhhdCBkb2VzIG5vdCBkbyBtYXAgdHJhbnNsYXRpb24sIHNpbmNlCiAgICAgICAgICAgICAgICAvL0lEIGlzICJhYnNvbHV0ZSIsIGFscmVhZHkgbWFwcGVkL3Jlc29sdmVkLgogICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZShudWxsLCB7CiAgICAgICAgICAgICAgICAgICAgc2tpcE1hcDogdHJ1ZQogICAgICAgICAgICAgICAgfSkoW2lkXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vVHVybnMgYSBwbHVnaW4hcmVzb3VyY2UgdG8gW3BsdWdpbiwgcmVzb3VyY2VdCiAgICAgICAgLy93aXRoIHRoZSBwbHVnaW4gYmVpbmcgdW5kZWZpbmVkIGlmIHRoZSBuYW1lCiAgICAgICAgLy9kaWQgbm90IGhhdmUgYSBwbHVnaW4gcHJlZml4LgogICAgICAgIGZ1bmN0aW9uIHNwbGl0UHJlZml4KG5hbWUpIHsKICAgICAgICAgICAgdmFyIHByZWZpeCwKICAgICAgICAgICAgICAgIGluZGV4ID0gbmFtZSA/IG5hbWUuaW5kZXhPZignIScpIDogLTE7CiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7CiAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lLnN1YnN0cmluZygwLCBpbmRleCk7CiAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxLCBuYW1lLmxlbmd0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFtwcmVmaXgsIG5hbWVdOwogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlcyBhIG1vZHVsZSBtYXBwaW5nIHRoYXQgaW5jbHVkZXMgcGx1Z2luIHByZWZpeCwgbW9kdWxlCiAgICAgICAgICogbmFtZSwgYW5kIHBhdGguIElmIHBhcmVudE1vZHVsZU1hcCBpcyBwcm92aWRlZCBpdCB3aWxsCiAgICAgICAgICogYWxzbyBub3JtYWxpemUgdGhlIG5hbWUgdmlhIHJlcXVpcmUubm9ybWFsaXplKCkKICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIHRoZSBtb2R1bGUgbmFtZQogICAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcGFyZW50TW9kdWxlTWFwXSBwYXJlbnQgbW9kdWxlIG1hcAogICAgICAgICAqIGZvciB0aGUgbW9kdWxlIG5hbWUsIHVzZWQgdG8gcmVzb2x2ZSByZWxhdGl2ZSBuYW1lcy4KICAgICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGlzTm9ybWFsaXplZDogaXMgdGhlIElEIGFscmVhZHkgbm9ybWFsaXplZC4KICAgICAgICAgKiBUaGlzIGlzIHRydWUgaWYgdGhpcyBjYWxsIGlzIGRvbmUgZm9yIGEgZGVmaW5lKCkgbW9kdWxlIElELgogICAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gYXBwbHlNYXA6IGFwcGx5IHRoZSBtYXAgY29uZmlnIHRvIHRoZSBJRC4KICAgICAgICAgKiBTaG91bGQgb25seSBiZSB0cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBhIGRlcGVuZGVuY3kuCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJucyB7T2JqZWN0fQogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIG1ha2VNb2R1bGVNYXAobmFtZSwgcGFyZW50TW9kdWxlTWFwLCBpc05vcm1hbGl6ZWQsIGFwcGx5TWFwKSB7CiAgICAgICAgICAgIHZhciB1cmwsIHBsdWdpbk1vZHVsZSwgc3VmZml4LCBuYW1lUGFydHMsCiAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsLAogICAgICAgICAgICAgICAgcGFyZW50TmFtZSA9IHBhcmVudE1vZHVsZU1hcCA/IHBhcmVudE1vZHVsZU1hcC5uYW1lIDogbnVsbCwKICAgICAgICAgICAgICAgIG9yaWdpbmFsTmFtZSA9IG5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZSA9IHRydWUsCiAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9ICcnOwoKICAgICAgICAgICAgLy9JZiBubyBuYW1lLCB0aGVuIGl0IG1lYW5zIGl0IGlzIGEgcmVxdWlyZSBjYWxsLCBnZW5lcmF0ZSBhbgogICAgICAgICAgICAvL2ludGVybmFsIG5hbWUuCiAgICAgICAgICAgIGlmICghbmFtZSkgewogICAgICAgICAgICAgICAgaXNEZWZpbmUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIG5hbWUgPSAnX0ByJyArIChyZXF1aXJlQ291bnRlciArPSAxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbmFtZVBhcnRzID0gc3BsaXRQcmVmaXgobmFtZSk7CiAgICAgICAgICAgIHByZWZpeCA9IG5hbWVQYXJ0c1swXTsKICAgICAgICAgICAgbmFtZSA9IG5hbWVQYXJ0c1sxXTsKCiAgICAgICAgICAgIGlmIChwcmVmaXgpIHsKICAgICAgICAgICAgICAgIHByZWZpeCA9IG5vcm1hbGl6ZShwcmVmaXgsIHBhcmVudE5hbWUsIGFwcGx5TWFwKTsKICAgICAgICAgICAgICAgIHBsdWdpbk1vZHVsZSA9IGdldE93bihkZWZpbmVkLCBwcmVmaXgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0FjY291bnQgZm9yIHJlbGF0aXZlIHBhdGhzIGlmIHRoZXJlIGlzIGEgYmFzZSBuYW1lLgogICAgICAgICAgICBpZiAobmFtZSkgewogICAgICAgICAgICAgICAgaWYgKHByZWZpeCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc05vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUgPSBuYW1lOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z2luTW9kdWxlICYmIHBsdWdpbk1vZHVsZS5ub3JtYWxpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9QbHVnaW4gaXMgbG9hZGVkLCB1c2UgaXRzIG5vcm1hbGl6ZSBtZXRob2QuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gcGx1Z2luTW9kdWxlLm5vcm1hbGl6ZShuYW1lLCBmdW5jdGlvbiAobmFtZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIG5lc3RlZCBwbHVnaW4gcmVmZXJlbmNlcywgdGhlbiBkbyBub3QgdHJ5IHRvCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSwgYXMgaXQgd2lsbCBub3Qgbm9ybWFsaXplIGNvcnJlY3RseS4gVGhpcwogICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFjZXMgYSByZXN0cmljdGlvbiBvbiByZXNvdXJjZUlkcywgYW5kIHRoZSBsb25nZXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGVybSBzb2x1dGlvbiBpcyBub3QgdG8gbm9ybWFsaXplIHVudGlsIHBsdWdpbnMgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvYWRlZCBhbmQgYWxsIG5vcm1hbGl6YXRpb25zIHRvIGFsbG93IGZvciBhc3luYwogICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2FkaW5nIG9mIGEgbG9hZGVyIHBsdWdpbi4gQnV0IGZvciBub3csIGZpeGVzIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21tb24gdXNlcy4gRGV0YWlscyBpbiAjMTEzMQogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5hbWUuaW5kZXhPZignIScpID09PSAtMSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIGFwcGx5TWFwKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vQSByZWd1bGFyIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZShuYW1lLCBwYXJlbnROYW1lLCBhcHBseU1hcCk7CgogICAgICAgICAgICAgICAgICAgIC8vTm9ybWFsaXplZCBuYW1lIG1heSBiZSBhIHBsdWdpbiBJRCBkdWUgdG8gbWFwIGNvbmZpZwogICAgICAgICAgICAgICAgICAgIC8vYXBwbGljYXRpb24gaW4gbm9ybWFsaXplLiBUaGUgbWFwIGNvbmZpZyB2YWx1ZXMgbXVzdAogICAgICAgICAgICAgICAgICAgIC8vYWxyZWFkeSBiZSBub3JtYWxpemVkLCBzbyBkbyBub3QgbmVlZCB0byByZWRvIHRoYXQgcGFydC4KICAgICAgICAgICAgICAgICAgICBuYW1lUGFydHMgPSBzcGxpdFByZWZpeChub3JtYWxpemVkTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gbmFtZVBhcnRzWzBdOwogICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWROYW1lID0gbmFtZVBhcnRzWzFdOwogICAgICAgICAgICAgICAgICAgIGlzTm9ybWFsaXplZCA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIHVybCA9IGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZWROYW1lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiB0aGUgaWQgaXMgYSBwbHVnaW4gaWQgdGhhdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpZiBpdCBuZWVkcwogICAgICAgICAgICAvL25vcm1hbGl6YXRpb24sIHN0YW1wIGl0IHdpdGggYSB1bmlxdWUgSUQgc28gdHdvIG1hdGNoaW5nIHJlbGF0aXZlCiAgICAgICAgICAgIC8vaWRzIHRoYXQgbWF5IGNvbmZsaWN0IGNhbiBiZSBzZXBhcmF0ZS4KICAgICAgICAgICAgc3VmZml4ID0gcHJlZml4ICYmICFwbHVnaW5Nb2R1bGUgJiYgIWlzTm9ybWFsaXplZCA/CiAgICAgICAgICAgICAgICAgICAgICdfdW5ub3JtYWxpemVkJyArICh1bm5vcm1hbGl6ZWRDb3VudGVyICs9IDEpIDoKICAgICAgICAgICAgICAgICAgICAgJyc7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgcHJlZml4OiBwcmVmaXgsCiAgICAgICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZSwKICAgICAgICAgICAgICAgIHBhcmVudE1hcDogcGFyZW50TW9kdWxlTWFwLAogICAgICAgICAgICAgICAgdW5ub3JtYWxpemVkOiAhIXN1ZmZpeCwKICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgb3JpZ2luYWxOYW1lOiBvcmlnaW5hbE5hbWUsCiAgICAgICAgICAgICAgICBpc0RlZmluZTogaXNEZWZpbmUsCiAgICAgICAgICAgICAgICBpZDogKHByZWZpeCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCArICchJyArIG5vcm1hbGl6ZWROYW1lIDoKICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZE5hbWUpICsgc3VmZml4CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRNb2R1bGUoZGVwTWFwKSB7CiAgICAgICAgICAgIHZhciBpZCA9IGRlcE1hcC5pZCwKICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwoKICAgICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgICAgIG1vZCA9IHJlZ2lzdHJ5W2lkXSA9IG5ldyBjb250ZXh0Lk1vZHVsZShkZXBNYXApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gbW9kOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gb24oZGVwTWFwLCBuYW1lLCBmbikgewogICAgICAgICAgICB2YXIgaWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgIGlmIChoYXNQcm9wKGRlZmluZWQsIGlkKSAmJgogICAgICAgICAgICAgICAgICAgICghbW9kIHx8IG1vZC5kZWZpbmVFbWl0Q29tcGxldGUpKSB7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2RlZmluZWQnKSB7CiAgICAgICAgICAgICAgICAgICAgZm4oZGVmaW5lZFtpZF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbW9kID0gZ2V0TW9kdWxlKGRlcE1hcCk7CiAgICAgICAgICAgICAgICBpZiAobW9kLmVycm9yICYmIG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICBmbihtb2QuZXJyb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtb2Qub24obmFtZSwgZm4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBvbkVycm9yKGVyciwgZXJyYmFjaykgewogICAgICAgICAgICB2YXIgaWRzID0gZXJyLnJlcXVpcmVNb2R1bGVzLAogICAgICAgICAgICAgICAgbm90aWZpZWQgPSBmYWxzZTsKCiAgICAgICAgICAgIGlmIChlcnJiYWNrKSB7CiAgICAgICAgICAgICAgICBlcnJiYWNrKGVycik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlYWNoKGlkcywgZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgaWQpOwogICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9TZXQgZXJyb3Igb24gbW9kdWxlLCBzbyBpdCBza2lwcyB0aW1lb3V0IGNoZWNrcy4KICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIGlmICghbm90aWZpZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXEub25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBJbnRlcm5hbCBtZXRob2QgdG8gdHJhbnNmZXIgZ2xvYmFsUXVldWUgaXRlbXMgdG8gdGhpcyBjb250ZXh0J3MKICAgICAgICAgKiBkZWZRdWV1ZS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB0YWtlR2xvYmFsUXVldWUoKSB7CiAgICAgICAgICAgIC8vUHVzaCBhbGwgdGhlIGdsb2JhbERlZlF1ZXVlIGl0ZW1zIGludG8gdGhlIGNvbnRleHQncyBkZWZRdWV1ZQogICAgICAgICAgICBpZiAoZ2xvYmFsRGVmUXVldWUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBlYWNoKGdsb2JhbERlZlF1ZXVlLCBmdW5jdGlvbihxdWV1ZUl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBxdWV1ZUl0ZW1bMF07CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGdsb2JhbERlZlF1ZXVlID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGhhbmRsZXJzID0gewogICAgICAgICAgICAncmVxdWlyZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QucmVxdWlyZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2QucmVxdWlyZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChtb2QucmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobW9kLm1hcCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAnZXhwb3J0cyc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIG1vZC51c2luZ0V4cG9ydHMgPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKG1vZC5tYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV4cG9ydHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkZWZpbmVkW21vZC5tYXAuaWRdID0gbW9kLmV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLmV4cG9ydHMgPSBkZWZpbmVkW21vZC5tYXAuaWRdID0ge30pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ21vZHVsZSc6IGZ1bmN0aW9uIChtb2QpIHsKICAgICAgICAgICAgICAgIGlmIChtb2QubW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZC5tb2R1bGU7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAobW9kLm1vZHVsZSA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1vZC5tYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogbW9kLm1hcC51cmwsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldE93bihjb25maWcuY29uZmlnLCBtb2QubWFwLmlkKSB8fCB7fTsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czogbW9kLmV4cG9ydHMgfHwgKG1vZC5leHBvcnRzID0ge30pCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBmdW5jdGlvbiBjbGVhblJlZ2lzdHJ5KGlkKSB7CiAgICAgICAgICAgIC8vQ2xlYW4gdXAgbWFjaGluZXJ5IHVzZWQgZm9yIHdhaXRpbmcgbW9kdWxlcy4KICAgICAgICAgICAgZGVsZXRlIHJlZ2lzdHJ5W2lkXTsKICAgICAgICAgICAgZGVsZXRlIGVuYWJsZWRSZWdpc3RyeVtpZF07CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBicmVha0N5Y2xlKG1vZCwgdHJhY2VkLCBwcm9jZXNzZWQpIHsKICAgICAgICAgICAgdmFyIGlkID0gbW9kLm1hcC5pZDsKCiAgICAgICAgICAgIGlmIChtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgIG1vZC5lbWl0KCdlcnJvcicsIG1vZC5lcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0cmFjZWRbaWRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGVhY2gobW9kLmRlcE1hcHMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZGVwSWQgPSBkZXBNYXAuaWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9IGdldE93bihyZWdpc3RyeSwgZGVwSWQpOwoKICAgICAgICAgICAgICAgICAgICAvL09ubHkgZm9yY2UgdGhpbmdzIHRoYXQgaGF2ZSBub3QgY29tcGxldGVkCiAgICAgICAgICAgICAgICAgICAgLy9iZWluZyBkZWZpbmVkLCBzbyBzdGlsbCBpbiB0aGUgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAgICAgLy9hbmQgb25seSBpZiBpdCBoYXMgbm90IGJlZW4gbWF0Y2hlZCB1cAogICAgICAgICAgICAgICAgICAgIC8vaW4gdGhlIG1vZHVsZSBhbHJlYWR5LgogICAgICAgICAgICAgICAgICAgIGlmIChkZXAgJiYgIW1vZC5kZXBNYXRjaGVkW2ldICYmICFwcm9jZXNzZWRbZGVwSWRdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRPd24odHJhY2VkLCBkZXBJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5kZWZpbmVEZXAoaSwgZGVmaW5lZFtkZXBJZF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLmNoZWNrKCk7IC8vcGFzcyBmYWxzZT8KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrQ3ljbGUoZGVwLCB0cmFjZWQsIHByb2Nlc3NlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHByb2Nlc3NlZFtpZF0gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBjaGVja0xvYWRlZCgpIHsKICAgICAgICAgICAgdmFyIGVyciwgdXNpbmdQYXRoRmFsbGJhY2ssCiAgICAgICAgICAgICAgICB3YWl0SW50ZXJ2YWwgPSBjb25maWcud2FpdFNlY29uZHMgKiAxMDAwLAogICAgICAgICAgICAgICAgLy9JdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSB3YWl0IGludGVydmFsIGJ5IHVzaW5nIHdhaXRTZWNvbmRzIG9mIDAuCiAgICAgICAgICAgICAgICBleHBpcmVkID0gd2FpdEludGVydmFsICYmIChjb250ZXh0LnN0YXJ0VGltZSArIHdhaXRJbnRlcnZhbCkgPCBuZXcgRGF0ZSgpLmdldFRpbWUoKSwKICAgICAgICAgICAgICAgIG5vTG9hZHMgPSBbXSwKICAgICAgICAgICAgICAgIHJlcUNhbGxzID0gW10sCiAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSBmYWxzZSwKICAgICAgICAgICAgICAgIG5lZWRDeWNsZUNoZWNrID0gdHJ1ZTsKCiAgICAgICAgICAgIC8vRG8gbm90IGJvdGhlciBpZiB0aGlzIGNhbGwgd2FzIGEgcmVzdWx0IG9mIGEgY3ljbGUgYnJlYWsuCiAgICAgICAgICAgIGlmIChpbkNoZWNrTG9hZGVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGluQ2hlY2tMb2FkZWQgPSB0cnVlOwoKICAgICAgICAgICAgLy9GaWd1cmUgb3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIG1vZHVsZXMuCiAgICAgICAgICAgIGVhY2hQcm9wKGVuYWJsZWRSZWdpc3RyeSwgZnVuY3Rpb24gKG1vZCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1vZC5tYXAsCiAgICAgICAgICAgICAgICAgICAgbW9kSWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgLy9Ta2lwIHRoaW5ncyB0aGF0IGFyZSBub3QgZW5hYmxlZCBvciBpbiBlcnJvciBzdGF0ZS4KICAgICAgICAgICAgICAgIGlmICghbW9kLmVuYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtYXAuaXNEZWZpbmUpIHsKICAgICAgICAgICAgICAgICAgICByZXFDYWxscy5wdXNoKG1vZCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFtb2QuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGV4ZWN1dGVkLCBhbmQgaXQgaGFzIG5vdAogICAgICAgICAgICAgICAgICAgIC8vYmVlbiBpbml0ZWQgYW5kIHRpbWUgaXMgdXAsIHJlbWVtYmVyIGl0LgogICAgICAgICAgICAgICAgICAgIGlmICghbW9kLmluaXRlZCAmJiBleHBpcmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQYXRoRmFsbGJhY2sobW9kSWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZ1BhdGhGYWxsYmFjayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9Mb2Fkcy5wdXNoKG1vZElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVNjcmlwdChtb2RJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtb2QuaW5pdGVkICYmIG1vZC5mZXRjaGVkICYmIG1hcC5pc0RlZmluZSkgewogICAgICAgICAgICAgICAgICAgICAgICBzdGlsbExvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcC5wcmVmaXgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTm8gcmVhc29uIHRvIGtlZXAgbG9va2luZyBmb3IgdW5maW5pc2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sb2FkaW5nLiBJZiB0aGUgb25seSBzdGlsbExvYWRpbmcgaXMgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wbHVnaW4gcmVzb3VyY2UgdGhvdWdoLCBrZWVwIGdvaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9iZWNhdXNlIGl0IG1heSBiZSB0aGF0IGEgcGx1Z2luIHJlc291cmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lzIHdhaXRpbmcgb24gYSBub24tcGx1Z2luIGN5Y2xlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChuZWVkQ3ljbGVDaGVjayA9IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAoZXhwaXJlZCAmJiBub0xvYWRzLmxlbmd0aCkgewogICAgICAgICAgICAgICAgLy9JZiB3YWl0IHRpbWUgZXhwaXJlZCwgdGhyb3cgZXJyb3Igb2YgdW5sb2FkZWQgbW9kdWxlcy4KICAgICAgICAgICAgICAgIGVyciA9IG1ha2VFcnJvcigndGltZW91dCcsICdMb2FkIHRpbWVvdXQgZm9yIG1vZHVsZXM6ICcgKyBub0xvYWRzLCBudWxsLCBub0xvYWRzKTsKICAgICAgICAgICAgICAgIGVyci5jb250ZXh0TmFtZSA9IGNvbnRleHQuY29udGV4dE5hbWU7CiAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihlcnIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL05vdCBleHBpcmVkLCBjaGVjayBmb3IgYSBjeWNsZS4KICAgICAgICAgICAgaWYgKG5lZWRDeWNsZUNoZWNrKSB7CiAgICAgICAgICAgICAgICBlYWNoKHJlcUNhbGxzLCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWtDeWNsZShtb2QsIHt9LCB7fSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9JZiBzdGlsbCB3YWl0aW5nIG9uIGxvYWRzLCBhbmQgdGhlIHdhaXRpbmcgbG9hZCBpcyBzb21ldGhpbmcKICAgICAgICAgICAgLy9vdGhlciB0aGFuIGEgcGx1Z2luIHJlc291cmNlLCBvciB0aGVyZSBhcmUgc3RpbGwgb3V0c3RhbmRpbmcKICAgICAgICAgICAgLy9zY3JpcHRzLCB0aGVuIGp1c3QgdHJ5IGJhY2sgbGF0ZXIuCiAgICAgICAgICAgIGlmICgoIWV4cGlyZWQgfHwgdXNpbmdQYXRoRmFsbGJhY2spICYmIHN0aWxsTG9hZGluZykgewogICAgICAgICAgICAgICAgLy9Tb21ldGhpbmcgaXMgc3RpbGwgd2FpdGluZyB0byBsb2FkLiBXYWl0IGZvciBpdCwgYnV0IG9ubHkKICAgICAgICAgICAgICAgIC8vaWYgYSB0aW1lb3V0IGlzIG5vdCBhbHJlYWR5IGluIGVmZmVjdC4KICAgICAgICAgICAgICAgIGlmICgoaXNCcm93c2VyIHx8IGlzV2ViV29ya2VyKSAmJiAhY2hlY2tMb2FkZWRUaW1lb3V0SWQpIHsKICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZFRpbWVvdXRJZCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfSwgNTApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpbkNoZWNrTG9hZGVkID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBNb2R1bGUgPSBmdW5jdGlvbiAobWFwKSB7CiAgICAgICAgICAgIHRoaXMuZXZlbnRzID0gZ2V0T3duKHVuZGVmRXZlbnRzLCBtYXAuaWQpIHx8IHt9OwogICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDsKICAgICAgICAgICAgdGhpcy5zaGltID0gZ2V0T3duKGNvbmZpZy5zaGltLCBtYXAuaWQpOwogICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHMgPSBbXTsKICAgICAgICAgICAgdGhpcy5kZXBNYXBzID0gW107CiAgICAgICAgICAgIHRoaXMuZGVwTWF0Y2hlZCA9IFtdOwogICAgICAgICAgICB0aGlzLnBsdWdpbk1hcHMgPSB7fTsKICAgICAgICAgICAgdGhpcy5kZXBDb3VudCA9IDA7CgogICAgICAgICAgICAvKiB0aGlzLmV4cG9ydHMgdGhpcy5mYWN0b3J5CiAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcyA9IFtdLAogICAgICAgICAgICAgICB0aGlzLmVuYWJsZWQsIHRoaXMuZmV0Y2hlZAogICAgICAgICAgICAqLwogICAgICAgIH07CgogICAgICAgIE1vZHVsZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChkZXBNYXBzLCBmYWN0b3J5LCBlcnJiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKCiAgICAgICAgICAgICAgICAvL0RvIG5vdCBkbyBtb3JlIGluaXRzIGlmIGFscmVhZHkgZG9uZS4gQ2FuIGhhcHBlbiBpZiB0aGVyZQogICAgICAgICAgICAgICAgLy9hcmUgbXVsdGlwbGUgZGVmaW5lIGNhbGxzIGZvciB0aGUgc2FtZSBtb2R1bGUuIFRoYXQgaXMgbm90CiAgICAgICAgICAgICAgICAvL2Egbm9ybWFsLCBjb21tb24gY2FzZSwgYnV0IGl0IGlzIGFsc28gbm90IHVuZXhwZWN0ZWQuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTsKCiAgICAgICAgICAgICAgICBpZiAoZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIC8vUmVnaXN0ZXIgZm9yIGVycm9ycyBvbiB0aGlzIG1vZHVsZS4KICAgICAgICAgICAgICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGVycmJhY2spOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbm8gZXJyYmFjayBhbHJlYWR5LCBidXQgdGhlcmUgYXJlIGVycm9yIGxpc3RlbmVycwogICAgICAgICAgICAgICAgICAgIC8vb24gdGhpcyBtb2R1bGUsIHNldCB1cCBhbiBlcnJiYWNrIHRvIHBhc3MgdG8gdGhlIGRlcHMuCiAgICAgICAgICAgICAgICAgICAgZXJyYmFjayA9IGJpbmQodGhpcywgZnVuY3Rpb24gKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0RvIGEgY29weSBvZiB0aGUgZGVwZW5kZW5jeSBhcnJheSwgc28gdGhhdAogICAgICAgICAgICAgICAgLy9zb3VyY2UgaW5wdXRzIGFyZSBub3QgbW9kaWZpZWQuIEZvciBleGFtcGxlCiAgICAgICAgICAgICAgICAvLyJzaGltIiBkZXBzIGFyZSBwYXNzZWQgaW4gaGVyZSBkaXJlY3RseSwgYW5kCiAgICAgICAgICAgICAgICAvL2RvaW5nIGEgZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgZGVwTWFwcyBhcnJheQogICAgICAgICAgICAgICAgLy93b3VsZCBhZmZlY3QgdGhhdCBjb25maWcuCiAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMgPSBkZXBNYXBzICYmIGRlcE1hcHMuc2xpY2UoMCk7CgogICAgICAgICAgICAgICAgdGhpcy5lcnJiYWNrID0gZXJyYmFjazsKCiAgICAgICAgICAgICAgICAvL0luZGljYXRlIHRoaXMgbW9kdWxlIGhhcyBiZSBpbml0aWFsaXplZAogICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlID0gb3B0aW9ucy5pZ25vcmU7CgogICAgICAgICAgICAgICAgLy9Db3VsZCBoYXZlIG9wdGlvbiB0byBpbml0IHRoaXMgbW9kdWxlIGluIGVuYWJsZWQgbW9kZSwKICAgICAgICAgICAgICAgIC8vb3IgY291bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgbWFya2VkIGFzIGVuYWJsZWQuIEhvd2V2ZXIsCiAgICAgICAgICAgICAgICAvL3RoZSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB1bnRpbCBpbml0IGlzIGNhbGxlZC4gU28KICAgICAgICAgICAgICAgIC8vaWYgZW5hYmxlZCBwcmV2aW91c2x5LCBub3cgdHJpZ2dlciBkZXBlbmRlbmNpZXMgYXMgZW5hYmxlZC4KICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVuYWJsZWQgfHwgdGhpcy5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgLy9FbmFibGUgdGhpcyBtb2R1bGUgYW5kIGRlcGVuZGVuY2llcy4KICAgICAgICAgICAgICAgICAgICAvL1dpbGwgY2FsbCB0aGlzLmNoZWNrKCkKICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBkZWZpbmVEZXA6IGZ1bmN0aW9uIChpLCBkZXBFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAvL0JlY2F1c2Ugb2YgY3ljbGVzLCBkZWZpbmVkIGNhbGxiYWNrIGZvciBhIGdpdmVuCiAgICAgICAgICAgICAgICAvL2V4cG9ydCBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlcE1hdGNoZWRbaV0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hdGNoZWRbaV0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwQ291bnQgLT0gMTsKICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBkZXBFeHBvcnRzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmZldGNoZWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmZldGNoZWQgPSB0cnVlOwoKICAgICAgICAgICAgICAgIGNvbnRleHQuc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKCiAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5tYXA7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgbWFuYWdlciBpcyBmb3IgYSBwbHVnaW4gbWFuYWdlZCByZXNvdXJjZSwKICAgICAgICAgICAgICAgIC8vYXNrIHRoZSBwbHVnaW4gdG8gbG9hZCBpdCBub3cuCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGltKSB7CiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWtlUmVxdWlyZSh0aGlzLm1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdWlsZENhbGxiYWNrOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfSkodGhpcy5zaGltLmRlcHMgfHwgW10sIGJpbmQodGhpcywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL1JlZ3VsYXIgZGVwZW5kZW5jeS4KICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLnByZWZpeCA/IHRoaXMuY2FsbFBsdWdpbigpIDogdGhpcy5sb2FkKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgdXJsID0gdGhpcy5tYXAudXJsOwoKICAgICAgICAgICAgICAgIC8vUmVndWxhciBkZXBlbmRlbmN5LgogICAgICAgICAgICAgICAgaWYgKCF1cmxGZXRjaGVkW3VybF0pIHsKICAgICAgICAgICAgICAgICAgICB1cmxGZXRjaGVkW3VybF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZCh0aGlzLm1hcC5pZCwgdXJsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDaGVja3MgaWYgdGhlIG1vZHVsZSBpcyByZWFkeSB0byBkZWZpbmUgaXRzZWxmLCBhbmQgaWYgc28sCiAgICAgICAgICAgICAqIGRlZmluZSBpdC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmVuYWJsaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBlcnIsIGNqc01vZHVsZSwKICAgICAgICAgICAgICAgICAgICBpZCA9IHRoaXMubWFwLmlkLAogICAgICAgICAgICAgICAgICAgIGRlcEV4cG9ydHMgPSB0aGlzLmRlcEV4cG9ydHMsCiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0cywKICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gdGhpcy5mYWN0b3J5OwoKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGZldGNoIGlmIG5vdCBhbHJlYWR5IGluIHRoZSBkZWZRdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoY29udGV4dC5kZWZRdWV1ZU1hcCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2goKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgdGhpcy5lcnJvcik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRlZmluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgLy9UaGUgZmFjdG9yeSBjb3VsZCB0cmlnZ2VyIGFub3RoZXIgcmVxdWlyZSBjYWxsCiAgICAgICAgICAgICAgICAgICAgLy90aGF0IHdvdWxkIHJlc3VsdCBpbiBjaGVja2luZyB0aGlzIG1vZHVsZSB0bwogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lIGl0c2VsZiBhZ2Fpbi4gSWYgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcwogICAgICAgICAgICAgICAgICAgIC8vb2YgZG9pbmcgdGhhdCwgc2tpcCB0aGlzIHdvcmsuCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZpbmluZyA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlcENvdW50IDwgMSAmJiAhdGhpcy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGZhY3RvcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHRoZXJlIGlzIGFuIGVycm9yIGxpc3RlbmVyLCBmYXZvciBwYXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHRoYXQgaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvci4gSG93ZXZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vb25seSBkbyBpdCBmb3IgZGVmaW5lKCknZCAgbW9kdWxlcy4gcmVxdWlyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcnJiYWNrcyBzaG91bGQgbm90IGJlIGNhbGxlZCBmb3IgZmFpbHVyZXMgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlaXIgY2FsbGJhY2tzICgjNjk5KS4gSG93ZXZlciBpZiBhIGdsb2JhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9vbkVycm9yIGlzIHNldCwgdXNlIHRoYXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZXZlbnRzLmVycm9yICYmIHRoaXMubWFwLmlzRGVmaW5lKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS5vbkVycm9yICE9PSBkZWZhdWx0T25FcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjb250ZXh0LmV4ZWNDYihpZCwgZmFjdG9yeSwgZGVwRXhwb3J0cywgZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGNvbnRleHQuZXhlY0NiKGlkLCBmYWN0b3J5LCBkZXBFeHBvcnRzLCBleHBvcnRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYXZvciByZXR1cm4gdmFsdWUgb3ZlciBleHBvcnRzLiBJZiBub2RlL2NqcyBpbiBwbGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB3aWxsIG5vdCBoYXZlIGEgcmV0dXJuIHZhbHVlIGFueXdheS4gRmF2b3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vZHVsZS5leHBvcnRzIGFzc2lnbm1lbnQgb3ZlciBleHBvcnRzIG9iamVjdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC5pc0RlZmluZSAmJiBleHBvcnRzID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjanNNb2R1bGUgPSB0aGlzLm1vZHVsZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2pzTW9kdWxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMgPSBjanNNb2R1bGUuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXNpbmdFeHBvcnRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhwb3J0cyBhbHJlYWR5IHNldCB0aGUgZGVmaW5lZCB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IHRoaXMuZXhwb3J0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5yZXF1aXJlTWFwID0gdGhpcy5tYXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLnJlcXVpcmVNb2R1bGVzID0gdGhpcy5tYXAuaXNEZWZpbmUgPyBbdGhpcy5tYXAuaWRdIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZVR5cGUgPSB0aGlzLm1hcC5pc0RlZmluZSA/ICdkZWZpbmUnIDogJ3JlcXVpcmUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKCh0aGlzLmVycm9yID0gZXJyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgbGl0ZXJhbCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cyA9IGZhY3Rvcnk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0cyA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXAuaXNEZWZpbmUgJiYgIXRoaXMuaWdub3JlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkW2lkXSA9IGV4cG9ydHM7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5vblJlc291cmNlTG9hZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNMb2FkTWFwcyA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc0xvYWRNYXBzLnB1c2goZGVwTWFwLm5vcm1hbGl6ZWRNYXAgfHwgZGVwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEub25SZXNvdXJjZUxvYWQoY29udGV4dCwgdGhpcy5tYXAsIHJlc0xvYWRNYXBzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9DbGVhbiB1cAogICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvL0ZpbmlzaGVkIHRoZSBkZWZpbmUgc3RhZ2UuIEFsbG93IGNhbGxpbmcgY2hlY2sgYWdhaW4KICAgICAgICAgICAgICAgICAgICAvL3RvIGFsbG93IGRlZmluZSBub3RpZmljYXRpb25zIGJlbG93IGluIHRoZSBjYXNlIG9mIGEKICAgICAgICAgICAgICAgICAgICAvL2N5Y2xlLgogICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5pbmcgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVmaW5lZCAmJiAhdGhpcy5kZWZpbmVFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdHRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZGVmaW5lZCcsIHRoaXMuZXhwb3J0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRW1pdENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgY2FsbFBsdWdpbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIG1hcCA9IHRoaXMubWFwLAogICAgICAgICAgICAgICAgICAgIGlkID0gbWFwLmlkLAogICAgICAgICAgICAgICAgICAgIC8vTWFwIGFscmVhZHkgbm9ybWFsaXplZCB0aGUgcHJlZml4LgogICAgICAgICAgICAgICAgICAgIHBsdWdpbk1hcCA9IG1ha2VNb2R1bGVNYXAobWFwLnByZWZpeCk7CgogICAgICAgICAgICAgICAgLy9NYXJrIHRoaXMgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBsdWdpbiwgc28gaXQKICAgICAgICAgICAgICAgIC8vY2FuIGJlIHRyYWNlZCBmb3IgY3ljbGVzLgogICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzLnB1c2gocGx1Z2luTWFwKTsKCiAgICAgICAgICAgICAgICBvbihwbHVnaW5NYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWQsIG5vcm1hbGl6ZWRNYXAsIG5vcm1hbGl6ZWRNb2QsCiAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZUlkID0gZ2V0T3duKGJ1bmRsZXNNYXAsIHRoaXMubWFwLmlkKSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHRoaXMubWFwLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWUgPSB0aGlzLm1hcC5wYXJlbnRNYXAgPyB0aGlzLm1hcC5wYXJlbnRNYXAubmFtZSA6IG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZSA9IGNvbnRleHQubWFrZVJlcXVpcmUobWFwLnBhcmVudE1hcCwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnVpbGRDYWxsYmFjazogdHJ1ZQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy9JZiBjdXJyZW50IG1hcCBpcyBub3Qgbm9ybWFsaXplZCwgd2FpdCBmb3IgdGhhdAogICAgICAgICAgICAgICAgICAgIC8vbm9ybWFsaXplZCBuYW1lIHRvIGxvYWQgaW5zdGVhZCBvZiBjb250aW51aW5nLgogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hcC51bm5vcm1hbGl6ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgdGhlIElEIGlmIHRoZSBwbHVnaW4gYWxsb3dzIGl0LgogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGx1Z2luLm5vcm1hbGl6ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBsdWdpbi5ub3JtYWxpemUobmFtZSwgZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKG5hbWUsIHBhcmVudE5hbWUsIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJlZml4IGFuZCBuYW1lIHNob3VsZCBhbHJlYWR5IGJlIG5vcm1hbGl6ZWQsIG5vIG5lZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy9mb3IgYXBwbHlpbmcgbWFwIGNvbmZpZyBhZ2FpbiBlaXRoZXIuCiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXAgPSBtYWtlTW9kdWxlTWFwKG1hcC5wcmVmaXggKyAnIScgKyBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5wYXJlbnRNYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICBvbihub3JtYWxpemVkTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmluZWQnLCBiaW5kKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwLm5vcm1hbGl6ZWRNYXAgPSBub3JtYWxpemVkTWFwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkTW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBub3JtYWxpemVkTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRNb2QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayB0aGlzIGFzIGEgZGVwZW5kZW5jeSBmb3IgdGhpcyBwbHVnaW4sIHNvIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NhbiBiZSB0cmFjZWQgZm9yIGN5Y2xlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwTWFwcy5wdXNoKG5vcm1hbGl6ZWRNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50cy5lcnJvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2Qub24oJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRNb2QuZW5hYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vSWYgYSBwYXRocyBjb25maWcsIHRoZW4ganVzdCBsb2FkIHRoYXQgZmlsZSBpbnN0ZWFkIHRvCiAgICAgICAgICAgICAgICAgICAgLy9yZXNvbHZlIHRoZSBwbHVnaW4sIGFzIGl0IGlzIGJ1aWx0IGludG8gdGhhdCBwYXRocyBsYXllci4KICAgICAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAudXJsID0gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbG9hZCA9IGJpbmQodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdChbXSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0sIG51bGwsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIGxvYWQuZXJyb3IgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyOwogICAgICAgICAgICAgICAgICAgICAgICBlcnIucmVxdWlyZU1vZHVsZXMgPSBbaWRdOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgdGVtcCB1bm5vcm1hbGl6ZWQgbW9kdWxlcyBmb3IgdGhpcyBtb2R1bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHJlc29sdmVkIG90aGVyd2lzZSBub3cuCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLm1hcC5pZC5pbmRleE9mKGlkICsgJ191bm5vcm1hbGl6ZWQnKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFuUmVnaXN0cnkobW9kLm1hcC5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgb25FcnJvcihlcnIpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL0FsbG93IHBsdWdpbnMgdG8gbG9hZCBvdGhlciBjb2RlIHdpdGhvdXQgaGF2aW5nIHRvIGtub3cgdGhlCiAgICAgICAgICAgICAgICAgICAgLy9jb250ZXh0IG9yIGhvdyB0byAnY29tcGxldGUnIHRoZSBsb2FkLgogICAgICAgICAgICAgICAgICAgIGxvYWQuZnJvbVRleHQgPSBiaW5kKHRoaXMsIGZ1bmN0aW9uICh0ZXh0LCB0ZXh0QWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qanNsaW50IGV2aWw6IHRydWUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZU5hbWUgPSBtYXAubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU1hcCA9IG1ha2VNb2R1bGVNYXAobW9kdWxlTmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNJbnRlcmFjdGl2ZSA9IHVzZUludGVyYWN0aXZlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9BcyBvZiAyLjEuMCwgc3VwcG9ydCBqdXN0IHBhc3NpbmcgdGhlIHRleHQsIHRvIHJlaW5mb3JjZQogICAgICAgICAgICAgICAgICAgICAgICAvL2Zyb21UZXh0IG9ubHkgYmVpbmcgY2FsbGVkIG9uY2UgcGVyIHJlc291cmNlLiBTdGlsbAogICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnQgb2xkIHN0eWxlIG9mIHBhc3NpbmcgbW9kdWxlTmFtZSBidXQgZGlzY2FyZAogICAgICAgICAgICAgICAgICAgICAgICAvL3RoYXQgbW9kdWxlTmFtZSBpbiBmYXZvciBvZiB0aGUgaW50ZXJuYWwgcmVmLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEFsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHRBbHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vVHVybiBvZmYgaW50ZXJhY3RpdmUgc2NyaXB0IG1hdGNoaW5nIGZvciBJRSBmb3IgYW55IGRlZmluZQogICAgICAgICAgICAgICAgICAgICAgICAvL2NhbGxzIGluIHRoZSB0ZXh0LCB0aGVuIHR1cm4gaXQgYmFjayBvbiBhdCB0aGUgZW5kLgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzSW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUludGVyYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUHJpbWUgdGhlIHN5c3RlbSBieSBjcmVhdGluZyBhIG1vZHVsZSBpbnN0YW5jZSBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgLy9pdC4KICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1vZHVsZU1hcCk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1RyYW5zZmVyIGFueSBjb25maWcgdG8gdGhpcyBvdGhlciBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNQcm9wKGNvbmZpZy5jb25maWcsIGlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLmNvbmZpZ1ttb2R1bGVOYW1lXSA9IGNvbmZpZy5jb25maWdbaWRdOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLmV4ZWModGV4dCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignZnJvbXRleHRldmFsJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zyb21UZXh0IGV2YWwgZm9yICcgKyBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBmYWlsZWQ6ICcgKyBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbnRlcmFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlSW50ZXJhY3RpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL01hcmsgdGhpcyBhcyBhIGRlcGVuZGVuY3kgZm9yIHRoZSBwbHVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcE1hcHMucHVzaChtb2R1bGVNYXApOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TdXBwb3J0IGFub255bW91cyBtb2R1bGVzLgogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCB0aGUgdmFsdWUgb2YgdGhhdCBtb2R1bGUgdG8gdGhlIHZhbHVlIGZvciB0aGlzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vcmVzb3VyY2UgSUQuCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsUmVxdWlyZShbbW9kdWxlTmFtZV0sIGxvYWQpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAvL1VzZSBwYXJlbnROYW1lIGhlcmUgc2luY2UgdGhlIHBsdWdpbidzIG5hbWUgaXMgbm90IHJlbGlhYmxlLAogICAgICAgICAgICAgICAgICAgIC8vY291bGQgYmUgc29tZSB3ZWlyZCBzdHJpbmcgd2l0aCBubyBwYXRoIHRoYXQgYWN0dWFsbHkgd2FudHMgdG8KICAgICAgICAgICAgICAgICAgICAvL3JlZmVyZW5jZSB0aGUgcGFyZW50TmFtZSdzIHBhdGguCiAgICAgICAgICAgICAgICAgICAgcGx1Z2luLmxvYWQobWFwLm5hbWUsIGxvY2FsUmVxdWlyZSwgbG9hZCwgY29uZmlnKTsKICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5NYXBzW3BsdWdpbk1hcC5pZF0gPSBwbHVnaW5NYXA7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBlbmFibGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGVuYWJsZWRSZWdpc3RyeVt0aGlzLm1hcC5pZF0gPSB0aGlzOwogICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL1NldCBmbGFnIG1lbnRpb25pbmcgdGhhdCB0aGUgbW9kdWxlIGlzIGVuYWJsaW5nLAogICAgICAgICAgICAgICAgLy9zbyB0aGF0IGltbWVkaWF0ZSBjYWxscyB0byB0aGUgZGVmaW5lZCBjYWxsYmFja3MKICAgICAgICAgICAgICAgIC8vZm9yIGRlcGVuZGVuY2llcyBkbyBub3QgdHJpZ2dlciBpbmFkdmVydGVudCBsb2FkCiAgICAgICAgICAgICAgICAvL3dpdGggdGhlIGRlcENvdW50IHN0aWxsIGJlaW5nIHplcm8uCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAvL0VuYWJsZSBlYWNoIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2godGhpcy5kZXBNYXBzLCBiaW5kKHRoaXMsIGZ1bmN0aW9uIChkZXBNYXAsIGkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgaWQsIG1vZCwgaGFuZGxlcjsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBNYXAgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRGVwZW5kZW5jeSBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBkZXBNYXAKICAgICAgICAgICAgICAgICAgICAgICAgLy9hbmQgd2lyZWQgdXAgdG8gdGhpcyBtb2R1bGUuCiAgICAgICAgICAgICAgICAgICAgICAgIGRlcE1hcCA9IG1ha2VNb2R1bGVNYXAoZGVwTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1hcC5pc0RlZmluZSA/IHRoaXMubWFwIDogdGhpcy5tYXAucGFyZW50TWFwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5za2lwTWFwKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBNYXBzW2ldID0gZGVwTWFwOwoKICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGdldE93bihoYW5kbGVycywgZGVwTWFwLmlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcEV4cG9ydHNbaV0gPSBoYW5kbGVyKHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcENvdW50ICs9IDE7CgogICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdkZWZpbmVkJywgYmluZCh0aGlzLCBmdW5jdGlvbiAoZGVwRXhwb3J0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudW5kZWZlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmaW5lRGVwKGksIGRlcEV4cG9ydHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICAgICAgICAgICAgICB9KSk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lcnJiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbihkZXBNYXAsICdlcnJvcicsIGJpbmQodGhpcywgdGhpcy5lcnJiYWNrKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ldmVudHMuZXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGRpcmVjdCBlcnJiYWNrIG9uIHRoaXMgbW9kdWxlLCBidXQgc29tZXRoaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIGlzIGxpc3RlbmluZyBmb3IgZXJyb3JzLCBzbyBiZSBzdXJlIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wYWdhdGUgdGhlIGVycm9yIGNvcnJlY3RseS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uKGRlcE1hcCwgJ2Vycm9yJywgYmluZCh0aGlzLCBmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWQgPSBkZXBNYXAuaWQ7CiAgICAgICAgICAgICAgICAgICAgbW9kID0gcmVnaXN0cnlbaWRdOwoKICAgICAgICAgICAgICAgICAgICAvL1NraXAgc3BlY2lhbCBtb2R1bGVzIGxpa2UgJ3JlcXVpcmUnLCAnZXhwb3J0cycsICdtb2R1bGUnCiAgICAgICAgICAgICAgICAgICAgLy9BbHNvLCBkb24ndCBjYWxsIGVuYWJsZSBpZiBpdCBpcyBhbHJlYWR5IGVuYWJsZWQsCiAgICAgICAgICAgICAgICAgICAgLy9pbXBvcnRhbnQgaW4gY2lyY3VsYXIgZGVwZW5kZW5jeSBjYXNlcy4KICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoaGFuZGxlcnMsIGlkKSAmJiBtb2QgJiYgIW1vZC5lbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZW5hYmxlKGRlcE1hcCwgdGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgICAgIC8vRW5hYmxlIGVhY2ggcGx1Z2luIHRoYXQgaXMgdXNlZCBpbgogICAgICAgICAgICAgICAgLy9hIGRlcGVuZGVuY3kKICAgICAgICAgICAgICAgIGVhY2hQcm9wKHRoaXMucGx1Z2luTWFwcywgYmluZCh0aGlzLCBmdW5jdGlvbiAocGx1Z2luTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIG1vZCA9IGdldE93bihyZWdpc3RyeSwgcGx1Z2luTWFwLmlkKTsKICAgICAgICAgICAgICAgICAgICBpZiAobW9kICYmICFtb2QuZW5hYmxlZCkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmVuYWJsZShwbHVnaW5NYXAsIHRoaXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsaW5nID0gZmFsc2U7CgogICAgICAgICAgICAgICAgdGhpcy5jaGVjaygpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgb246IGZ1bmN0aW9uIChuYW1lLCBjYikgewogICAgICAgICAgICAgICAgdmFyIGNicyA9IHRoaXMuZXZlbnRzW25hbWVdOwogICAgICAgICAgICAgICAgaWYgKCFjYnMpIHsKICAgICAgICAgICAgICAgICAgICBjYnMgPSB0aGlzLmV2ZW50c1tuYW1lXSA9IFtdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2JzLnB1c2goY2IpOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZW1pdDogZnVuY3Rpb24gKG5hbWUsIGV2dCkgewogICAgICAgICAgICAgICAgZWFjaCh0aGlzLmV2ZW50c1tuYW1lXSwgZnVuY3Rpb24gKGNiKSB7CiAgICAgICAgICAgICAgICAgICAgY2IoZXZ0KTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdlcnJvcicpIHsKICAgICAgICAgICAgICAgICAgICAvL05vdyB0aGF0IHRoZSBlcnJvciBoYW5kbGVyIHdhcyB0cmlnZ2VyZWQsIHJlbW92ZQogICAgICAgICAgICAgICAgICAgIC8vdGhlIGxpc3RlbmVycywgc2luY2UgdGhpcyBicm9rZW4gTW9kdWxlIGluc3RhbmNlCiAgICAgICAgICAgICAgICAgICAgLy9jYW4gc3RheSBhcm91bmQgZm9yIGEgd2hpbGUgaW4gdGhlIHJlZ2lzdHJ5LgogICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50c1tuYW1lXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIGNhbGxHZXRNb2R1bGUoYXJncykgewogICAgICAgICAgICAvL1NraXAgbW9kdWxlcyBhbHJlYWR5IGRlZmluZWQuCiAgICAgICAgICAgIGlmICghaGFzUHJvcChkZWZpbmVkLCBhcmdzWzBdKSkgewogICAgICAgICAgICAgICAgZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAoYXJnc1swXSwgbnVsbCwgdHJ1ZSkpLmluaXQoYXJnc1sxXSwgYXJnc1syXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGZ1bmMsIG5hbWUsIGllTmFtZSkgewogICAgICAgICAgICAvL0Zhdm9yIGRldGFjaEV2ZW50IGJlY2F1c2Ugb2YgSUU5CiAgICAgICAgICAgIC8vaXNzdWUsIHNlZSBhdHRhY2hFdmVudC9hZGRFdmVudExpc3RlbmVyIGNvbW1lbnQgZWxzZXdoZXJlCiAgICAgICAgICAgIC8vaW4gdGhpcyBmaWxlLgogICAgICAgICAgICBpZiAobm9kZS5kZXRhY2hFdmVudCAmJiAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSWYgbm90IGl0IHdpbGwgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUKICAgICAgICAgICAgICAgIC8vdXNlZnVsIHRvIGtub3cuCiAgICAgICAgICAgICAgICBpZiAoaWVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgbm9kZS5kZXRhY2hFdmVudChpZU5hbWUsIGZ1bmMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmMsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLyoqCiAgICAgICAgICogR2l2ZW4gYW4gZXZlbnQgZnJvbSBhIHNjcmlwdCBub2RlLCBnZXQgdGhlIHJlcXVpcmVqcyBpbmZvIGZyb20gaXQsCiAgICAgICAgICogYW5kIHRoZW4gcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIG9uIHRoZSBub2RlLgogICAgICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2dAogICAgICAgICAqIEByZXR1cm5zIHtPYmplY3R9CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZ2V0U2NyaXB0RGF0YShldnQpIHsKICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAvL2FsbCBvbGQgYnJvd3NlcnMgd2lsbCBiZSBzdXBwb3J0ZWQsIGJ1dCB0aGlzIG9uZSB3YXMgZWFzeSBlbm91Z2gKICAgICAgICAgICAgLy90byBzdXBwb3J0IGFuZCBzdGlsbCBtYWtlcyBzZW5zZS4KICAgICAgICAgICAgdmFyIG5vZGUgPSBldnQuY3VycmVudFRhcmdldCB8fCBldnQuc3JjRWxlbWVudDsKCiAgICAgICAgICAgIC8vUmVtb3ZlIHRoZSBsaXN0ZW5lcnMgb25jZSBoZXJlLgogICAgICAgICAgICByZW1vdmVMaXN0ZW5lcihub2RlLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgJ2xvYWQnLCAnb25yZWFkeXN0YXRlY2hhbmdlJyk7CiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVyKG5vZGUsIGNvbnRleHQub25TY3JpcHRFcnJvciwgJ2Vycm9yJyk7CgogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgbm9kZTogbm9kZSwKICAgICAgICAgICAgICAgIGlkOiBub2RlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXJlcXVpcmVtb2R1bGUnKQogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gaW50YWtlRGVmaW5lcygpIHsKICAgICAgICAgICAgdmFyIGFyZ3M7CgogICAgICAgICAgICAvL0FueSBkZWZpbmVkIG1vZHVsZXMgaW4gdGhlIGdsb2JhbCBxdWV1ZSwgaW50YWtlIHRoZW0gbm93LgogICAgICAgICAgICB0YWtlR2xvYmFsUXVldWUoKTsKCiAgICAgICAgICAgIC8vTWFrZSBzdXJlIGFueSByZW1haW5pbmcgZGVmUXVldWUgaXRlbXMgZ2V0IHByb3Blcmx5IHByb2Nlc3NlZC4KICAgICAgICAgICAgd2hpbGUgKGRlZlF1ZXVlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgYXJncyA9IGRlZlF1ZXVlLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBvbkVycm9yKG1ha2VFcnJvcignbWlzbWF0Y2gnLCAnTWlzbWF0Y2hlZCBhbm9ueW1vdXMgZGVmaW5lKCkgbW9kdWxlOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vYXJncyBhcmUgaWQsIGRlcHMsIGZhY3RvcnkuIFNob3VsZCBiZSBub3JtYWxpemVkIGJ5IHRoZQogICAgICAgICAgICAgICAgICAgIC8vZGVmaW5lKCkgZnVuY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShhcmdzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBjb250ZXh0LmRlZlF1ZXVlTWFwID0ge307CiAgICAgICAgfQoKICAgICAgICBjb250ZXh0ID0gewogICAgICAgICAgICBjb25maWc6IGNvbmZpZywKICAgICAgICAgICAgY29udGV4dE5hbWU6IGNvbnRleHROYW1lLAogICAgICAgICAgICByZWdpc3RyeTogcmVnaXN0cnksCiAgICAgICAgICAgIGRlZmluZWQ6IGRlZmluZWQsCiAgICAgICAgICAgIHVybEZldGNoZWQ6IHVybEZldGNoZWQsCiAgICAgICAgICAgIGRlZlF1ZXVlOiBkZWZRdWV1ZSwKICAgICAgICAgICAgZGVmUXVldWVNYXA6IHt9LAogICAgICAgICAgICBNb2R1bGU6IE1vZHVsZSwKICAgICAgICAgICAgbWFrZU1vZHVsZU1hcDogbWFrZU1vZHVsZU1hcCwKICAgICAgICAgICAgbmV4dFRpY2s6IHJlcS5uZXh0VGljaywKICAgICAgICAgICAgb25FcnJvcjogb25FcnJvciwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBTZXQgYSBjb25maWd1cmF0aW9uIGZvciB0aGUgY29udGV4dC4KICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWcgb2JqZWN0IHRvIGludGVncmF0ZS4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGNvbmZpZ3VyZTogZnVuY3Rpb24gKGNmZykgewogICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGJhc2VVcmwgZW5kcyBpbiBhIHNsYXNoLgogICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNmZy5iYXNlVXJsLmNoYXJBdChjZmcuYmFzZVVybC5sZW5ndGggLSAxKSAhPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNmZy5iYXNlVXJsICs9ICcvJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBvbGQgc3R5bGUgdXJsQXJncyBzdHJpbmcgdG8gYSBmdW5jdGlvbi4KICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2ZnLnVybEFyZ3MgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybEFyZ3MgPSBjZmcudXJsQXJnczsKICAgICAgICAgICAgICAgICAgICBjZmcudXJsQXJncyA9IGZ1bmN0aW9uKGlkLCB1cmwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyB1cmxBcmdzOwogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9TYXZlIG9mZiB0aGUgcGF0aHMgc2luY2UgdGhleSByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZywKICAgICAgICAgICAgICAgIC8vdGhleSBhcmUgYWRkaXRpdmUuCiAgICAgICAgICAgICAgICB2YXIgc2hpbSA9IGNvbmZpZy5zaGltLAogICAgICAgICAgICAgICAgICAgIG9ianMgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hcDogdHJ1ZQogICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHsKICAgICAgICAgICAgICAgICAgICBpZiAob2Jqc1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ1twcm9wXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW4oY29uZmlnW3Byb3BdLCB2YWx1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnW3Byb3BdID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgLy9SZXZlcnNlIG1hcCB0aGUgYnVuZGxlcwogICAgICAgICAgICAgICAgaWYgKGNmZy5idW5kbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaFByb3AoY2ZnLmJ1bmRsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkgewogICAgICAgICAgICAgICAgICAgICAgICBlYWNoKHZhbHVlLCBmdW5jdGlvbiAodikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHByb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVzTWFwW3ZdID0gcHJvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9NZXJnZSBzaGltCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnNoaW0pIHsKICAgICAgICAgICAgICAgICAgICBlYWNoUHJvcChjZmcuc2hpbSwgZnVuY3Rpb24gKHZhbHVlLCBpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAvL05vcm1hbGl6ZSB0aGUgc3RydWN0dXJlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwczogdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh2YWx1ZS5leHBvcnRzIHx8IHZhbHVlLmluaXQpICYmICF2YWx1ZS5leHBvcnRzRm4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmV4cG9ydHNGbiA9IGNvbnRleHQubWFrZVNoaW1FeHBvcnRzKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzaGltW2lkXSA9IHZhbHVlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaGltID0gc2hpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0FkanVzdCBwYWNrYWdlcyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICBpZiAoY2ZnLnBhY2thZ2VzKSB7CiAgICAgICAgICAgICAgICAgICAgZWFjaChjZmcucGFja2FnZXMsIGZ1bmN0aW9uIChwa2dPYmopIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvY2F0aW9uLCBuYW1lOwoKICAgICAgICAgICAgICAgICAgICAgICAgcGtnT2JqID0gdHlwZW9mIHBrZ09iaiA9PT0gJ3N0cmluZycgPyB7bmFtZTogcGtnT2JqfSA6IHBrZ09iajsKCiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwa2dPYmoubmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBwa2dPYmoubG9jYXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLnBhdGhzW25hbWVdID0gcGtnT2JqLmxvY2F0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL1NhdmUgcG9pbnRlciB0byBtYWluIG1vZHVsZSBJRCBmb3IgcGtnIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVtb3ZlIGxlYWRpbmcgZG90IGluIG1haW4sIHNvIG1haW4gcGF0aHMgYXJlIG5vcm1hbGl6ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vYW5kIHJlbW92ZSBhbnkgdHJhaWxpbmcgLmpzLCBzaW5jZSBkaWZmZXJlbnQgcGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAvL2VudnMgaGF2ZSBkaWZmZXJlbnQgY29udmVudGlvbnM6IHNvbWUgdXNlIGEgbW9kdWxlIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vc29tZSB1c2UgYSBmaWxlIG5hbWUuCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wa2dzW25hbWVdID0gcGtnT2JqLm5hbWUgKyAnLycgKyAocGtnT2JqLm1haW4gfHwgJ21haW4nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoY3VyckRpclJlZ0V4cCwgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUgYXJlIGFueSAid2FpdGluZyB0byBleGVjdXRlIiBtb2R1bGVzIGluIHRoZSByZWdpc3RyeSwKICAgICAgICAgICAgICAgIC8vdXBkYXRlIHRoZSBtYXBzIGZvciB0aGVtLCBzaW5jZSB0aGVpciBpbmZvLCBsaWtlIFVSTHMgdG8gbG9hZCwKICAgICAgICAgICAgICAgIC8vbWF5IGhhdmUgY2hhbmdlZC4KICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbiAobW9kLCBpZCkgewogICAgICAgICAgICAgICAgICAgIC8vSWYgbW9kdWxlIGFscmVhZHkgaGFzIGluaXQgY2FsbGVkLCBzaW5jZSBpdCBpcyB0b28KICAgICAgICAgICAgICAgICAgICAvL2xhdGUgdG8gbW9kaWZ5IHRoZW0sIGFuZCBpZ25vcmUgdW5ub3JtYWxpemVkIG9uZXMKICAgICAgICAgICAgICAgICAgICAvL3NpbmNlIHRoZXkgYXJlIHRyYW5zaWVudC4KICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZC5pbml0ZWQgJiYgIW1vZC5tYXAudW5ub3JtYWxpemVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5tYXAgPSBtYWtlTW9kdWxlTWFwKGlkLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL0lmIGEgZGVwcyBhcnJheSBvciBhIGNvbmZpZyBjYWxsYmFjayBpcyBzcGVjaWZpZWQsIHRoZW4gY2FsbAogICAgICAgICAgICAgICAgLy9yZXF1aXJlIHdpdGggdGhvc2UgYXJncy4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZXF1aXJlIGlzIGRlZmluZWQgYXMgYQogICAgICAgICAgICAgICAgLy9jb25maWcgb2JqZWN0IGJlZm9yZSByZXF1aXJlLmpzIGlzIGxvYWRlZC4KICAgICAgICAgICAgICAgIGlmIChjZmcuZGVwcyB8fCBjZmcuY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVpcmUoY2ZnLmRlcHMgfHwgW10sIGNmZy5jYWxsYmFjayk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICBtYWtlU2hpbUV4cG9ydHM6IGZ1bmN0aW9uICh2YWx1ZSkgewogICAgICAgICAgICAgICAgZnVuY3Rpb24gZm4oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHJldDsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaW5pdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSB2YWx1ZS5pbml0LmFwcGx5KGdsb2JhbCwgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldCB8fCAodmFsdWUuZXhwb3J0cyAmJiBnZXRHbG9iYWwodmFsdWUuZXhwb3J0cykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZuOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgbWFrZVJlcXVpcmU6IGZ1bmN0aW9uIChyZWxNYXAsIG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwoKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvY2FsUmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCwgbWFwLCByZXF1aXJlTW9kOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVCdWlsZENhbGxiYWNrICYmIGNhbGxiYWNrICYmIGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLl9fcmVxdWlyZUpzQnVpbGQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkZXBzID09PSAnc3RyaW5nJykgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBjYWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3JlcXVpcmVhcmdzJywgJ0ludmFsaWQgcmVxdWlyZSBjYWxsJyksIGVycmJhY2spOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHJlcXVpcmV8ZXhwb3J0c3xtb2R1bGUgYXJlIHJlcXVlc3RlZCwgZ2V0IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3ZhbHVlIGZvciB0aGVtIGZyb20gdGhlIHNwZWNpYWwgaGFuZGxlcnMuIENhdmVhdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIG9ubHkgd29ya3Mgd2hpbGUgbW9kdWxlIGlzIGJlaW5nIGRlZmluZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxNYXAgJiYgaGFzUHJvcChoYW5kbGVycywgZGVwcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyc1tkZXBzXShyZWdpc3RyeVtyZWxNYXAuaWRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9TeW5jaHJvbm91cyBhY2Nlc3MgdG8gb25lIG1vZHVsZS4gSWYgcmVxdWlyZS5nZXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgLy9hdmFpbGFibGUgKGFzIGluIHRoZSBOb2RlIGFkYXB0ZXIpLCBwcmVmZXIgdGhhdC4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcS5nZXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXEuZ2V0KGNvbnRleHQsIGRlcHMsIHJlbE1hcCwgbG9jYWxSZXF1aXJlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy9Ob3JtYWxpemUgbW9kdWxlIG5hbWUsIGlmIGl0IGNvbnRhaW5zIC4gb3IgLi4KICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0gbWFrZU1vZHVsZU1hcChkZXBzLCByZWxNYXAsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYXAuaWQ7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AoZGVmaW5lZCwgaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vdGxvYWRlZCcsICdNb2R1bGUgbmFtZSAiJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBoYXMgbm90IGJlZW4gbG9hZGVkIHlldCBmb3IgY29udGV4dDogJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVsTWFwID8gJycgOiAnLiBVc2UgcmVxdWlyZShbXSknKSkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vR3JhYiBkZWZpbmVzIHdhaXRpbmcgaW4gdGhlIGdsb2JhbCBxdWV1ZS4KICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgIC8vTWFyayBhbGwgdGhlIGRlcGVuZGVuY2llcyBhcyBuZWVkaW5nIHRvIGJlIGxvYWRlZC4KICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy9Tb21lIGRlZmluZXMgY291bGQgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL3JlcXVpcmUgY2FsbCwgY29sbGVjdCB0aGVtLgogICAgICAgICAgICAgICAgICAgICAgICBpbnRha2VEZWZpbmVzKCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kID0gZ2V0TW9kdWxlKG1ha2VNb2R1bGVNYXAobnVsbCwgcmVsTWFwKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAvL1N0b3JlIGlmIG1hcCBjb25maWcgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyByZXF1aXJlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vY2FsbCBmb3IgZGVwZW5kZW5jaWVzLgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLnNraXBNYXAgPSBvcHRpb25zLnNraXBNYXA7CgogICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlTW9kLmluaXQoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICBjaGVja0xvYWRlZCgpOwogICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxSZXF1aXJlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG1peGluKGxvY2FsUmVxdWlyZSwgewogICAgICAgICAgICAgICAgICAgIGlzQnJvd3NlcjogaXNCcm93c2VyLAoKICAgICAgICAgICAgICAgICAgICAvKioKICAgICAgICAgICAgICAgICAgICAgKiBDb252ZXJ0cyBhIG1vZHVsZSBuYW1lICsgLmV4dGVuc2lvbiBpbnRvIGFuIFVSTCBwYXRoLgogICAgICAgICAgICAgICAgICAgICAqICpSZXF1aXJlcyogdGhlIHVzZSBvZiBhIG1vZHVsZSBuYW1lLiBJdCBkb2VzIG5vdCBzdXBwb3J0IHVzaW5nCiAgICAgICAgICAgICAgICAgICAgICogcGxhaW4gVVJMcyBsaWtlIG5hbWVUb1VybC4KICAgICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICAgICB0b1VybDogZnVuY3Rpb24gKG1vZHVsZU5hbWVQbHVzRXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG1vZHVsZU5hbWVQbHVzRXh0Lmxhc3RJbmRleE9mKCcuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3BsaXQoJy8nKVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVsYXRpdmUgPSBzZWdtZW50ID09PSAnLicgfHwgc2VnbWVudCA9PT0gJy4uJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vSGF2ZSBhIGZpbGUgZXh0ZW5zaW9uIGFsaWFzLCBhbmQgaXQgaXMgbm90IHRoZQogICAgICAgICAgICAgICAgICAgICAgICAvL2RvdHMgZnJvbSBhIHJlbGF0aXZlIHBhdGguCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgKCFpc1JlbGF0aXZlIHx8IGluZGV4ID4gMSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dCA9IG1vZHVsZU5hbWVQbHVzRXh0LnN1YnN0cmluZyhpbmRleCwgbW9kdWxlTmFtZVBsdXNFeHQubGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZU5hbWVQbHVzRXh0ID0gbW9kdWxlTmFtZVBsdXNFeHQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQubmFtZVRvVXJsKG5vcm1hbGl6ZShtb2R1bGVOYW1lUGx1c0V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsTWFwICYmIHJlbE1hcC5pZCwgdHJ1ZSksIGV4dCwgIHRydWUpOwogICAgICAgICAgICAgICAgICAgIH0sCgogICAgICAgICAgICAgICAgICAgIGRlZmluZWQ6IGZ1bmN0aW9uIChpZCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzUHJvcChkZWZpbmVkLCBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZCk7CiAgICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkOiBmdW5jdGlvbiAoaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBtYWtlTW9kdWxlTWFwKGlkLCByZWxNYXAsIGZhbHNlLCB0cnVlKS5pZDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc1Byb3AoZGVmaW5lZCwgaWQpIHx8IGhhc1Byb3AocmVnaXN0cnksIGlkKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvL09ubHkgYWxsb3cgdW5kZWYgb24gdG9wIGxldmVsIHJlcXVpcmUgY2FsbHMKICAgICAgICAgICAgICAgIGlmICghcmVsTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgbG9jYWxSZXF1aXJlLnVuZGVmID0gZnVuY3Rpb24gKGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZCBhbnkgd2FpdGluZyBkZWZpbmUoKSBjYWxscyB0byB0aGlzIGNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgIC8vZml4IGZvciAjNDA4CiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IG1ha2VNb2R1bGVNYXAoaWQsIHJlbE1hcCwgdHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2QgPSBnZXRPd24ocmVnaXN0cnksIGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIG1vZC51bmRlZmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2NyaXB0KGlkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkZWZpbmVkW2lkXTsKICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHVybEZldGNoZWRbbWFwLnVybF07CiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB1bmRlZkV2ZW50c1tpZF07CgogICAgICAgICAgICAgICAgICAgICAgICAvL0NsZWFuIHF1ZXVlZCBkZWZpbmVzIHRvby4gR28gYmFja3dhcmRzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vaW4gYXJyYXkgc28gdGhhdCB0aGUgc3BsaWNlcyBkbyBub3QKICAgICAgICAgICAgICAgICAgICAgICAgLy9tZXNzIHVwIHRoZSBpdGVyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgIGVhY2hSZXZlcnNlKGRlZlF1ZXVlLCBmdW5jdGlvbihhcmdzLCBpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZRdWV1ZS5zcGxpY2UoaSwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29udGV4dC5kZWZRdWV1ZU1hcFtpZF07CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hvbGQgb24gdG8gbGlzdGVuZXJzIGluIGNhc2UgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21vZHVsZSB3aWxsIGJlIGF0dGVtcHRlZCB0byBiZSByZWxvYWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy91c2luZyBhIGRpZmZlcmVudCBjb25maWcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kLmV2ZW50cy5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZFdmVudHNbaWRdID0gbW9kLmV2ZW50czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhblJlZ2lzdHJ5KGlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsUmVxdWlyZTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsZWQgdG8gZW5hYmxlIGEgbW9kdWxlIGlmIGl0IGlzIHN0aWxsIGluIHRoZSByZWdpc3RyeQogICAgICAgICAgICAgKiBhd2FpdGluZyBlbmFibGVtZW50LiBBIHNlY29uZCBhcmcsIHBhcmVudCwgdGhlIHBhcmVudCBtb2R1bGUsCiAgICAgICAgICAgICAqIGlzIHBhc3NlZCBpbiBmb3IgY29udGV4dCwgd2hlbiB0aGlzIG1ldGhvZCBpcyBvdmVycmlkZGVuIGJ5CiAgICAgICAgICAgICAqIHRoZSBvcHRpbWl6ZXIuIE5vdCBzaG93biBoZXJlIHRvIGtlZXAgY29kZSBjb21wYWN0LgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZW5hYmxlOiBmdW5jdGlvbiAoZGVwTWFwKSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kID0gZ2V0T3duKHJlZ2lzdHJ5LCBkZXBNYXAuaWQpOwogICAgICAgICAgICAgICAgaWYgKG1vZCkgewogICAgICAgICAgICAgICAgICAgIGdldE1vZHVsZShkZXBNYXApLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAoKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEludGVybmFsIG1ldGhvZCB1c2VkIGJ5IGVudmlyb25tZW50IGFkYXB0ZXJzIHRvIGNvbXBsZXRlIGEgbG9hZCBldmVudC4KICAgICAgICAgICAgICogQSBsb2FkIGV2ZW50IGNvdWxkIGJlIGEgc2NyaXB0IGxvYWQgb3IganVzdCBhIGxvYWQgcGFzcyBmcm9tIGEgc3luY2hyb25vdXMKICAgICAgICAgICAgICogbG9hZCBjYWxsLgogICAgICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gbW9kdWxlTmFtZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIHBvdGVudGlhbGx5IGNvbXBsZXRlLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgY29tcGxldGVMb2FkOiBmdW5jdGlvbiAobW9kdWxlTmFtZSkgewogICAgICAgICAgICAgICAgdmFyIGZvdW5kLCBhcmdzLCBtb2QsCiAgICAgICAgICAgICAgICAgICAgc2hpbSA9IGdldE93bihjb25maWcuc2hpbSwgbW9kdWxlTmFtZSkgfHwge30sCiAgICAgICAgICAgICAgICAgICAgc2hFeHBvcnRzID0gc2hpbS5leHBvcnRzOwoKICAgICAgICAgICAgICAgIHRha2VHbG9iYWxRdWV1ZSgpOwoKICAgICAgICAgICAgICAgIHdoaWxlIChkZWZRdWV1ZS5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBhcmdzID0gZGVmUXVldWUuc2hpZnQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1swXSA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gbW9kdWxlTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBhbHJlYWR5IGZvdW5kIGFuIGFub255bW91cyBtb2R1bGUgYW5kIGJvdW5kIGl0CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG8gdGhpcyBuYW1lLCB0aGVuIHRoaXMgaXMgc29tZSBvdGhlciBhbm9uIG1vZHVsZQogICAgICAgICAgICAgICAgICAgICAgICAvL3dhaXRpbmcgZm9yIGl0cyBjb21wbGV0ZUxvYWQgdG8gZmlyZS4KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdzWzBdID09PSBtb2R1bGVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vRm91bmQgbWF0Y2hpbmcgZGVmaW5lIGNhbGwgZm9yIHRoaXMgc2NyaXB0IQogICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBjYWxsR2V0TW9kdWxlKGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY29udGV4dC5kZWZRdWV1ZU1hcCA9IHt9OwoKICAgICAgICAgICAgICAgIC8vRG8gdGhpcyBhZnRlciB0aGUgY3ljbGUgb2YgY2FsbEdldE1vZHVsZSBpbiBjYXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgIC8vb2YgdGhvc2UgY2FsbHMvaW5pdCBjYWxscyBjaGFuZ2VzIHRoZSByZWdpc3RyeS4KICAgICAgICAgICAgICAgIG1vZCA9IGdldE93bihyZWdpc3RyeSwgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiAhaGFzUHJvcChkZWZpbmVkLCBtb2R1bGVOYW1lKSAmJiBtb2QgJiYgIW1vZC5pbml0ZWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmVuZm9yY2VEZWZpbmUgJiYgKCFzaEV4cG9ydHMgfHwgIWdldEdsb2JhbChzaEV4cG9ydHMpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUGF0aEZhbGxiYWNrKG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ25vZGVmaW5lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05vIGRlZmluZSBjYWxsIGZvciAnICsgbW9kdWxlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvL0Egc2NyaXB0IHRoYXQgZG9lcyBub3QgY2FsbCBkZWZpbmUoKSwgc28ganVzdCBzaW11bGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBjYWxsIGZvciBpdC4KICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEdldE1vZHVsZShbbW9kdWxlTmFtZSwgKHNoaW0uZGVwcyB8fCBbXSksIHNoaW0uZXhwb3J0c0ZuXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGNoZWNrTG9hZGVkKCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQ29udmVydHMgYSBtb2R1bGUgbmFtZSB0byBhIGZpbGUgcGF0aC4gU3VwcG9ydHMgY2FzZXMgd2hlcmUKICAgICAgICAgICAgICogbW9kdWxlTmFtZSBtYXkgYWN0dWFsbHkgYmUganVzdCBhbiBVUkwuCiAgICAgICAgICAgICAqIE5vdGUgdGhhdCBpdCAqKmRvZXMgbm90KiogY2FsbCBub3JtYWxpemUgb24gdGhlIG1vZHVsZU5hbWUsCiAgICAgICAgICAgICAqIGl0IGlzIGFzc3VtZWQgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4gVGhpcyBpcyBhbgogICAgICAgICAgICAgKiBpbnRlcm5hbCBBUEksIG5vdCBhIHB1YmxpYyBvbmUuIFVzZSB0b1VybCBmb3IgdGhlIHB1YmxpYyBBUEkuCiAgICAgICAgICAgICAqLwogICAgICAgICAgICBuYW1lVG9Vcmw6IGZ1bmN0aW9uIChtb2R1bGVOYW1lLCBleHQsIHNraXBFeHQpIHsKICAgICAgICAgICAgICAgIHZhciBwYXRocywgc3ltcywgaSwgcGFyZW50TW9kdWxlLCB1cmwsCiAgICAgICAgICAgICAgICAgICAgcGFyZW50UGF0aCwgYnVuZGxlSWQsCiAgICAgICAgICAgICAgICAgICAgcGtnTWFpbiA9IGdldE93bihjb25maWcucGtncywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAgICAgaWYgKHBrZ01haW4pIHsKICAgICAgICAgICAgICAgICAgICBtb2R1bGVOYW1lID0gcGtnTWFpbjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBidW5kbGVJZCA9IGdldE93bihidW5kbGVzTWFwLCBtb2R1bGVOYW1lKTsKCiAgICAgICAgICAgICAgICBpZiAoYnVuZGxlSWQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5uYW1lVG9VcmwoYnVuZGxlSWQsIGV4dCwgc2tpcEV4dCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy9JZiBhIGNvbG9uIGlzIGluIHRoZSBVUkwsIGl0IGluZGljYXRlcyBhIHByb3RvY29sIGlzIHVzZWQgYW5kIGl0IGlzIGp1c3QKICAgICAgICAgICAgICAgIC8vYW4gVVJMIHRvIGEgZmlsZSwgb3IgaWYgaXQgc3RhcnRzIHdpdGggYSBzbGFzaCwgY29udGFpbnMgYSBxdWVyeSBhcmcgKGkuZS4gPykKICAgICAgICAgICAgICAgIC8vb3IgZW5kcyB3aXRoIC5qcywgdGhlbiBhc3N1bWUgdGhlIHVzZXIgbWVhbnQgdG8gdXNlIGFuIHVybCBhbmQgbm90IGEgbW9kdWxlIGlkLgogICAgICAgICAgICAgICAgLy9UaGUgc2xhc2ggaXMgaW1wb3J0YW50IGZvciBwcm90b2NvbC1sZXNzIFVSTHMgYXMgd2VsbCBhcyBmdWxsIHBhdGhzLgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1vZHVsZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgLy9KdXN0IGEgcGxhaW4gcGF0aCwgbm90IG1vZHVsZSBuYW1lIGxvb2t1cCwgc28ganVzdCByZXR1cm4gaXQuCiAgICAgICAgICAgICAgICAgICAgLy9BZGQgZXh0ZW5zaW9uIGlmIGl0IGlzIGluY2x1ZGVkLiBUaGlzIGlzIGEgYml0IHdvbmt5LCBvbmx5IG5vbi0uanMgdGhpbmdzIHBhc3MKICAgICAgICAgICAgICAgICAgICAvL2FuIGV4dGVuc2lvbiwgdGhpcyBtZXRob2QgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmV3b3JrZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gbW9kdWxlTmFtZSArIChleHQgfHwgJycpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvL0EgbW9kdWxlIHRoYXQgbmVlZHMgdG8gYmUgY29udmVydGVkIHRvIGEgcGF0aC4KICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGNvbmZpZy5wYXRoczsKCiAgICAgICAgICAgICAgICAgICAgc3ltcyA9IG1vZHVsZU5hbWUuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICAgICAgICAvL0ZvciBlYWNoIG1vZHVsZSBuYW1lIHNlZ21lbnQsIHNlZSBpZiB0aGVyZSBpcyBhIHBhdGgKICAgICAgICAgICAgICAgICAgICAvL3JlZ2lzdGVyZWQgZm9yIGl0LiBTdGFydCB3aXRoIG1vc3Qgc3BlY2lmaWMgbmFtZQogICAgICAgICAgICAgICAgICAgIC8vYW5kIHdvcmsgdXAgZnJvbSBpdC4KICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBzeW1zLmxlbmd0aDsgaSA+IDA7IGkgLT0gMSkgewogICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2R1bGUgPSBzeW1zLnNsaWNlKDAsIGkpLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBnZXRPd24ocGF0aHMsIHBhcmVudE1vZHVsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRQYXRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGFuIGFycmF5LCBpdCBtZWFucyB0aGVyZSBhcmUgYSBmZXcgY2hvaWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hvb3NlIHRoZSBvbmUgdGhhdCBpcyBkZXNpcmVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheShwYXJlbnRQYXRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFBhdGggPSBwYXJlbnRQYXRoWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltcy5zcGxpY2UoMCwgaSwgcGFyZW50UGF0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgLy9Kb2luIHRoZSBwYXRoIHBhcnRzIHRvZ2V0aGVyLCB0aGVuIGZpZ3VyZSBvdXQgaWYgYmFzZVVybCBpcyBuZWVkZWQuCiAgICAgICAgICAgICAgICAgICAgdXJsID0gc3ltcy5qb2luKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgdXJsICs9IChleHQgfHwgKC9eZGF0YVw6fF5ibG9iXDp8XD8vLnRlc3QodXJsKSB8fCBza2lwRXh0ID8gJycgOiAnLmpzJykpOwogICAgICAgICAgICAgICAgICAgIHVybCA9ICh1cmwuY2hhckF0KDApID09PSAnLycgfHwgdXJsLm1hdGNoKC9eW1x3XCtcLlwtXSs6LykgPyAnJyA6IGNvbmZpZy5iYXNlVXJsKSArIHVybDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybEFyZ3MgJiYgIS9eYmxvYlw6Ly50ZXN0KHVybCkgPwogICAgICAgICAgICAgICAgICAgICAgIHVybCArIGNvbmZpZy51cmxBcmdzKG1vZHVsZU5hbWUsIHVybCkgOiB1cmw7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvL0RlbGVnYXRlcyB0byByZXEubG9hZC4gQnJva2VuIG91dCBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvCiAgICAgICAgICAgIC8vYWxsb3cgb3ZlcnJpZGluZyBpbiB0aGUgb3B0aW1pemVyLgogICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoaWQsIHVybCkgewogICAgICAgICAgICAgICAgcmVxLmxvYWQoY29udGV4dCwgaWQsIHVybCk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogRXhlY3V0ZXMgYSBtb2R1bGUgY2FsbGJhY2sgZnVuY3Rpb24uIEJyb2tlbiBvdXQgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbgogICAgICAgICAgICAgKiBzb2xlbHkgdG8gYWxsb3cgdGhlIGJ1aWxkIHN5c3RlbSB0byBzZXF1ZW5jZSB0aGUgZmlsZXMgaW4gdGhlIGJ1aWx0CiAgICAgICAgICAgICAqIGxheWVyIGluIHRoZSByaWdodCBzZXF1ZW5jZS4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHByaXZhdGUKICAgICAgICAgICAgICovCiAgICAgICAgICAgIGV4ZWNDYjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBhcmdzLCBleHBvcnRzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkoZXhwb3J0cywgYXJncyk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogY2FsbGJhY2sgZm9yIHNjcmlwdCBsb2FkcywgdXNlZCB0byBjaGVjayBzdGF0dXMgb2YgbG9hZGluZy4KICAgICAgICAgICAgICoKICAgICAgICAgICAgICogQHBhcmFtIHtFdmVudH0gZXZ0IHRoZSBldmVudCBmcm9tIHRoZSBicm93c2VyIGZvciB0aGUgc2NyaXB0CiAgICAgICAgICAgICAqIHRoYXQgd2FzIGxvYWRlZC4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0TG9hZDogZnVuY3Rpb24gKGV2dCkgewogICAgICAgICAgICAgICAgLy9Vc2luZyBjdXJyZW50VGFyZ2V0IGluc3RlYWQgb2YgdGFyZ2V0IGZvciBGaXJlZm94IDIuMCdzIHNha2UuIE5vdAogICAgICAgICAgICAgICAgLy9hbGwgb2xkIGJyb3dzZXJzIHdpbGwgYmUgc3VwcG9ydGVkLCBidXQgdGhpcyBvbmUgd2FzIGVhc3kgZW5vdWdoCiAgICAgICAgICAgICAgICAvL3RvIHN1cHBvcnQgYW5kIHN0aWxsIG1ha2VzIHNlbnNlLgogICAgICAgICAgICAgICAgaWYgKGV2dC50eXBlID09PSAnbG9hZCcgfHwKICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWR5UmVnRXhwLnRlc3QoKGV2dC5jdXJyZW50VGFyZ2V0IHx8IGV2dC5zcmNFbGVtZW50KS5yZWFkeVN0YXRlKSkpIHsKICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0IGludGVyYWN0aXZlIHNjcmlwdCBzbyBhIHNjcmlwdCBub2RlIGlzIG5vdCBoZWxkIG9udG8gZm9yCiAgICAgICAgICAgICAgICAgICAgLy90byBsb25nLgogICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlU2NyaXB0ID0gbnVsbDsKCiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG91dCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGFuZCB0aGUgY29udGV4dC4KICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFNjcmlwdERhdGEoZXZ0KTsKICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChkYXRhLmlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBDYWxsYmFjayBmb3Igc2NyaXB0IGVycm9ycy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIG9uU2NyaXB0RXJyb3I6IGZ1bmN0aW9uIChldnQpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0U2NyaXB0RGF0YShldnQpOwogICAgICAgICAgICAgICAgaWYgKCFoYXNQYXRoRmFsbGJhY2soZGF0YS5pZCkpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50cyA9IFtdOwogICAgICAgICAgICAgICAgICAgIGVhY2hQcm9wKHJlZ2lzdHJ5LCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX0ByJykgIT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2godmFsdWUuZGVwTWFwcywgZnVuY3Rpb24oZGVwTWFwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcE1hcC5pZCA9PT0gZGF0YS5pZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzLnB1c2goa2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25FcnJvcihtYWtlRXJyb3IoJ3NjcmlwdGVycm9yJywgJ1NjcmlwdCBlcnJvciBmb3IgIicgKyBkYXRhLmlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcmVudHMubGVuZ3RoID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyIsIG5lZWRlZCBieTogJyArIHBhcmVudHMuam9pbignLCAnKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksIGV2dCwgW2RhdGEuaWRdKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBjb250ZXh0LnJlcXVpcmUgPSBjb250ZXh0Lm1ha2VSZXF1aXJlKCk7CiAgICAgICAgcmV0dXJuIGNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYWluIGVudHJ5IHBvaW50LgogICAgICoKICAgICAqIElmIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHJlcXVpcmUgaXMgYSBzdHJpbmcsIHRoZW4gdGhlIG1vZHVsZSB0aGF0CiAgICAgKiBpcyByZXByZXNlbnRlZCBieSB0aGF0IHN0cmluZyBpcyBmZXRjaGVkIGZvciB0aGUgYXBwcm9wcmlhdGUgY29udGV4dC4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIHRoZW4gaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGFuIGFycmF5CiAgICAgKiBvZiBkZXBlbmRlbmN5IHN0cmluZyBuYW1lcyB0byBmZXRjaC4gQW4gb3B0aW9uYWwgZnVuY3Rpb24gY2FsbGJhY2sgY2FuCiAgICAgKiBiZSBzcGVjaWZpZWQgdG8gZXhlY3V0ZSB3aGVuIGFsbCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGF2YWlsYWJsZS4KICAgICAqCiAgICAgKiBNYWtlIGEgbG9jYWwgcmVxIHZhcmlhYmxlIHRvIGhlbHAgQ2FqYSBjb21wbGlhbmNlIChpdCBhc3N1bWVzIHRoaW5ncwogICAgICogb24gYSByZXF1aXJlIHRoYXQgYXJlIG5vdCBzdGFuZGFyZGl6ZWQpLCBhbmQgdG8gZ2l2ZSBhIHNob3J0CiAgICAgKiBuYW1lIGZvciBtaW5pZmljYXRpb24vbG9jYWwgc2NvcGUgdXNlLgogICAgICovCiAgICByZXEgPSByZXF1aXJlanMgPSBmdW5jdGlvbiAoZGVwcywgY2FsbGJhY2ssIGVycmJhY2ssIG9wdGlvbmFsKSB7CgogICAgICAgIC8vRmluZCB0aGUgcmlnaHQgY29udGV4dCwgdXNlIGRlZmF1bHQKICAgICAgICB2YXIgY29udGV4dCwgY29uZmlnLAogICAgICAgICAgICBjb250ZXh0TmFtZSA9IGRlZkNvbnRleHROYW1lOwoKICAgICAgICAvLyBEZXRlcm1pbmUgaWYgaGF2ZSBjb25maWcgb2JqZWN0IGluIHRoZSBjYWxsLgogICAgICAgIGlmICghaXNBcnJheShkZXBzKSAmJiB0eXBlb2YgZGVwcyAhPT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgLy8gZGVwcyBpcyBhIGNvbmZpZyBvYmplY3QKICAgICAgICAgICAgY29uZmlnID0gZGVwczsKICAgICAgICAgICAgaWYgKGlzQXJyYXkoY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAvLyBBZGp1c3QgYXJncyBpZiB0aGVyZSBhcmUgZGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgICBkZXBzID0gY2FsbGJhY2s7CiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGVycmJhY2s7CiAgICAgICAgICAgICAgICBlcnJiYWNrID0gb3B0aW9uYWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXBzID0gW107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLmNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dE5hbWUgPSBjb25maWcuY29udGV4dDsKICAgICAgICB9CgogICAgICAgIGNvbnRleHQgPSBnZXRPd24oY29udGV4dHMsIGNvbnRleHROYW1lKTsKICAgICAgICBpZiAoIWNvbnRleHQpIHsKICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRzW2NvbnRleHROYW1lXSA9IHJlcS5zLm5ld0NvbnRleHQoY29udGV4dE5hbWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNvbmZpZykgewogICAgICAgICAgICBjb250ZXh0LmNvbmZpZ3VyZShjb25maWcpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNvbnRleHQucmVxdWlyZShkZXBzLCBjYWxsYmFjaywgZXJyYmFjayk7CiAgICB9OwoKICAgIC8qKgogICAgICogU3VwcG9ydCByZXF1aXJlLmNvbmZpZygpIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvb3BlcmF0ZSB3aXRoIG90aGVyCiAgICAgKiBBTUQgbG9hZGVycyBvbiBnbG9iYWxseSBhZ3JlZWQgbmFtZXMuCiAgICAgKi8KICAgIHJlcS5jb25maWcgPSBmdW5jdGlvbiAoY29uZmlnKSB7CiAgICAgICAgcmV0dXJuIHJlcShjb25maWcpOwogICAgfTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgc29tZXRoaW5nIGFmdGVyIHRoZSBjdXJyZW50IHRpY2sKICAgICAqIG9mIHRoZSBldmVudCBsb29wLiBPdmVycmlkZSBmb3Igb3RoZXIgZW52cwogICAgICogdGhhdCBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uIHRoYW4gc2V0VGltZW91dC4KICAgICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBmbiBmdW5jdGlvbiB0byBleGVjdXRlIGxhdGVyLgogICAgICovCiAgICByZXEubmV4dFRpY2sgPSB0eXBlb2Ygc2V0VGltZW91dCAhPT0gJ3VuZGVmaW5lZCcgPyBmdW5jdGlvbiAoZm4pIHsKICAgICAgICBzZXRUaW1lb3V0KGZuLCA0KTsKICAgIH0gOiBmdW5jdGlvbiAoZm4pIHsgZm4oKTsgfTsKCiAgICAvKioKICAgICAqIEV4cG9ydCByZXF1aXJlIGFzIGEgZ2xvYmFsLCBidXQgb25seSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgogICAgICovCiAgICBpZiAoIXJlcXVpcmUpIHsKICAgICAgICByZXF1aXJlID0gcmVxOwogICAgfQoKICAgIHJlcS52ZXJzaW9uID0gdmVyc2lvbjsKCiAgICAvL1VzZWQgdG8gZmlsdGVyIG91dCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgYWxyZWFkeSBwYXRocy4KICAgIHJlcS5qc0V4dFJlZ0V4cCA9IC9eXC98OnxcP3xcLmpzJC87CiAgICByZXEuaXNCcm93c2VyID0gaXNCcm93c2VyOwogICAgcyA9IHJlcS5zID0gewogICAgICAgIGNvbnRleHRzOiBjb250ZXh0cywKICAgICAgICBuZXdDb250ZXh0OiBuZXdDb250ZXh0CiAgICB9OwoKICAgIC8vQ3JlYXRlIGRlZmF1bHQgY29udGV4dC4KICAgIHJlcSh7fSk7CgogICAgLy9FeHBvcnRzIHNvbWUgY29udGV4dC1zZW5zaXRpdmUgbWV0aG9kcyBvbiBnbG9iYWwgcmVxdWlyZS4KICAgIGVhY2goWwogICAgICAgICd0b1VybCcsCiAgICAgICAgJ3VuZGVmJywKICAgICAgICAnZGVmaW5lZCcsCiAgICAgICAgJ3NwZWNpZmllZCcKICAgIF0sIGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgLy9SZWZlcmVuY2UgZnJvbSBjb250ZXh0cyBpbnN0ZWFkIG9mIGVhcmx5IGJpbmRpbmcgdG8gZGVmYXVsdCBjb250ZXh0LAogICAgICAgIC8vc28gdGhhdCBkdXJpbmcgYnVpbGRzLCB0aGUgbGF0ZXN0IGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGNvbnRleHQKICAgICAgICAvL3dpdGggaXRzIGNvbmZpZyBnZXRzIHVzZWQuCiAgICAgICAgcmVxW3Byb3BdID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgY3R4ID0gY29udGV4dHNbZGVmQ29udGV4dE5hbWVdOwogICAgICAgICAgICByZXR1cm4gY3R4LnJlcXVpcmVbcHJvcF0uYXBwbHkoY3R4LCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICB9KTsKCiAgICBpZiAoaXNCcm93c2VyKSB7CiAgICAgICAgaGVhZCA9IHMuaGVhZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07CiAgICAgICAgLy9JZiBCQVNFIHRhZyBpcyBpbiBwbGF5LCB1c2luZyBhcHBlbmRDaGlsZCBpcyBhIHByb2JsZW0gZm9yIElFNi4KICAgICAgICAvL1doZW4gdGhhdCBicm93c2VyIGRpZXMsIHRoaXMgY2FuIGJlIHJlbW92ZWQuIERldGFpbHMgaW4gdGhpcyBqUXVlcnkgYnVnOgogICAgICAgIC8vaHR0cDovL2Rldi5qcXVlcnkuY29tL3RpY2tldC8yNzA5CiAgICAgICAgYmFzZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYmFzZScpWzBdOwogICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICBoZWFkID0gcy5oZWFkID0gYmFzZUVsZW1lbnQucGFyZW50Tm9kZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBbnkgZXJyb3JzIHRoYXQgcmVxdWlyZSBleHBsaWNpdGx5IGdlbmVyYXRlcyB3aWxsIGJlIHBhc3NlZCB0byB0aGlzCiAgICAgKiBmdW5jdGlvbi4gSW50ZXJjZXB0L292ZXJyaWRlIGl0IGlmIHlvdSB3YW50IGN1c3RvbSBlcnJvciBoYW5kbGluZy4KICAgICAqIEBwYXJhbSB7RXJyb3J9IGVyciB0aGUgZXJyb3Igb2JqZWN0LgogICAgICovCiAgICByZXEub25FcnJvciA9IGRlZmF1bHRPbkVycm9yOwoKICAgIC8qKgogICAgICogQ3JlYXRlcyB0aGUgbm9kZSBmb3IgdGhlIGxvYWQgY29tbWFuZC4gT25seSB1c2VkIGluIGJyb3dzZXIgZW52cy4KICAgICAqLwogICAgcmVxLmNyZWF0ZU5vZGUgPSBmdW5jdGlvbiAoY29uZmlnLCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgbm9kZSA9IGNvbmZpZy54aHRtbCA/CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLCAnaHRtbDpzY3JpcHQnKSA6CiAgICAgICAgICAgICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBub2RlLnR5cGUgPSBjb25maWcuc2NyaXB0VHlwZSB8fCAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBub2RlLmNoYXJzZXQgPSAndXRmLTgnOwogICAgICAgIG5vZGUuYXN5bmMgPSB0cnVlOwogICAgICAgIHJldHVybiBub2RlOwogICAgfTsKCiAgICAvKioKICAgICAqIERvZXMgdGhlIHJlcXVlc3QgdG8gbG9hZCBhIG1vZHVsZSBmb3IgdGhlIGJyb3dzZXIgY2FzZS4KICAgICAqIE1ha2UgdGhpcyBhIHNlcGFyYXRlIGZ1bmN0aW9uIHRvIGFsbG93IG90aGVyIGVudmlyb25tZW50cwogICAgICogdG8gb3ZlcnJpZGUgaXQuCiAgICAgKgogICAgICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHQgdGhlIHJlcXVpcmUgY29udGV4dCB0byBmaW5kIHN0YXRlLgogICAgICogQHBhcmFtIHtTdHJpbmd9IG1vZHVsZU5hbWUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSB1cmwgdGhlIFVSTCB0byB0aGUgbW9kdWxlLgogICAgICovCiAgICByZXEubG9hZCA9IGZ1bmN0aW9uIChjb250ZXh0LCBtb2R1bGVOYW1lLCB1cmwpIHsKICAgICAgICB2YXIgY29uZmlnID0gKGNvbnRleHQgJiYgY29udGV4dC5jb25maWcpIHx8IHt9LAogICAgICAgICAgICBub2RlOwogICAgICAgIGlmIChpc0Jyb3dzZXIpIHsKICAgICAgICAgICAgLy9JbiB0aGUgYnJvd3NlciBzbyB1c2UgYSBzY3JpcHQgdGFnCiAgICAgICAgICAgIG5vZGUgPSByZXEuY3JlYXRlTm9kZShjb25maWcsIG1vZHVsZU5hbWUsIHVybCk7CgogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlY29udGV4dCcsIGNvbnRleHQuY29udGV4dE5hbWUpOwogICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlbW9kdWxlJywgbW9kdWxlTmFtZSk7CgogICAgICAgICAgICAvL1NldCB1cCBsb2FkIGxpc3RlbmVyLiBUZXN0IGF0dGFjaEV2ZW50IGZpcnN0IGJlY2F1c2UgSUU5IGhhcwogICAgICAgICAgICAvL2Egc3VidGxlIGlzc3VlIGluIGl0cyBhZGRFdmVudExpc3RlbmVyIGFuZCBzY3JpcHQgb25sb2FkIGZpcmluZ3MKICAgICAgICAgICAgLy90aGF0IGRvIG5vdCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgYWxsIG90aGVyIGJyb3dzZXJzIHdpdGgKICAgICAgICAgICAgLy9hZGRFdmVudExpc3RlbmVyIHN1cHBvcnQsIHdoaWNoIGZpcmUgdGhlIG9ubG9hZCBldmVudCBmb3IgYQogICAgICAgICAgICAvL3NjcmlwdCByaWdodCBhZnRlciB0aGUgc2NyaXB0IGV4ZWN1dGlvbi4gU2VlOgogICAgICAgICAgICAvL2h0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNjQ4MDU3L3NjcmlwdC1vbmxvYWQtZXZlbnQtaXMtbm90LWZpcmVkLWltbWVkaWF0ZWx5LWFmdGVyLXNjcmlwdC1leGVjdXRpb24KICAgICAgICAgICAgLy9VTkZPUlRVTkFURUxZIE9wZXJhIGltcGxlbWVudHMgYXR0YWNoRXZlbnQgYnV0IGRvZXMgbm90IGZvbGxvdyB0aGUgc2NyaXB0CiAgICAgICAgICAgIC8vc2NyaXB0IGV4ZWN1dGlvbiBtb2RlLgogICAgICAgICAgICBpZiAobm9kZS5hdHRhY2hFdmVudCAmJgogICAgICAgICAgICAgICAgICAgIC8vQ2hlY2sgaWYgbm9kZS5hdHRhY2hFdmVudCBpcyBhcnRpZmljaWFsbHkgYWRkZWQgYnkgY3VzdG9tIHNjcmlwdCBvcgogICAgICAgICAgICAgICAgICAgIC8vbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IGJyb3dzZXIKICAgICAgICAgICAgICAgICAgICAvL3JlYWQgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVpcmVqcy9yZXF1aXJlanMvaXNzdWVzLzE4NwogICAgICAgICAgICAgICAgICAgIC8vaWYgd2UgY2FuIE5PVCBmaW5kIFtuYXRpdmUgY29kZV0gdGhlbiBpdCBtdXN0IE5PVCBuYXRpdmVseSBzdXBwb3J0ZWQuCiAgICAgICAgICAgICAgICAgICAgLy9pbiBJRTgsIG5vZGUuYXR0YWNoRXZlbnQgZG9lcyBub3QgaGF2ZSB0b1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgLy9Ob3RlIHRoZSB0ZXN0IGZvciAiW25hdGl2ZSBjb2RlIiB3aXRoIG5vIGNsb3NpbmcgYnJhY2UsIHNlZToKICAgICAgICAgICAgICAgICAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9yZXF1aXJlanMvcmVxdWlyZWpzL2lzc3Vlcy8yNzMKICAgICAgICAgICAgICAgICAgICAhKG5vZGUuYXR0YWNoRXZlbnQudG9TdHJpbmcgJiYgbm9kZS5hdHRhY2hFdmVudC50b1N0cmluZygpLmluZGV4T2YoJ1tuYXRpdmUgY29kZScpIDwgMCkgJiYKICAgICAgICAgICAgICAgICAgICAhaXNPcGVyYSkgewogICAgICAgICAgICAgICAgLy9Qcm9iYWJseSBJRS4gSUUgKGF0IGxlYXN0IDYtOCkgZG8gbm90IGZpcmUKICAgICAgICAgICAgICAgIC8vc2NyaXB0IG9ubG9hZCByaWdodCBhZnRlciBleGVjdXRpbmcgdGhlIHNjcmlwdCwgc28KICAgICAgICAgICAgICAgIC8vd2UgY2Fubm90IHRpZSB0aGUgYW5vbnltb3VzIGRlZmluZSBjYWxsIHRvIGEgbmFtZS4KICAgICAgICAgICAgICAgIC8vSG93ZXZlciwgSUUgcmVwb3J0cyB0aGUgc2NyaXB0IGFzIGJlaW5nIGluICdpbnRlcmFjdGl2ZScKICAgICAgICAgICAgICAgIC8vcmVhZHlTdGF0ZSBhdCB0aGUgdGltZSBvZiB0aGUgZGVmaW5lIGNhbGwuCiAgICAgICAgICAgICAgICB1c2VJbnRlcmFjdGl2ZSA9IHRydWU7CgogICAgICAgICAgICAgICAgbm9kZS5hdHRhY2hFdmVudCgnb25yZWFkeXN0YXRlY2hhbmdlJywgY29udGV4dC5vblNjcmlwdExvYWQpOwogICAgICAgICAgICAgICAgLy9JdCB3b3VsZCBiZSBncmVhdCB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciBoZXJlIHRvIGNhdGNoCiAgICAgICAgICAgICAgICAvLzQwNHMgaW4gSUU5Ky4gSG93ZXZlciwgb25yZWFkeXN0YXRlY2hhbmdlIHdpbGwgZmlyZSBiZWZvcmUKICAgICAgICAgICAgICAgIC8vdGhlIGVycm9yIGhhbmRsZXIsIHNvIHRoYXQgZG9lcyBub3QgaGVscC4gSWYgYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAgICAgLy9pcyB1c2VkLCB0aGVuIElFIHdpbGwgZmlyZSBlcnJvciBiZWZvcmUgbG9hZCwgYnV0IHdlIGNhbm5vdAogICAgICAgICAgICAgICAgLy91c2UgdGhhdCBwYXRod2F5IGdpdmVuIHRoZSBjb25uZWN0Lm1pY3Jvc29mdC5jb20gaXNzdWUKICAgICAgICAgICAgICAgIC8vbWVudGlvbmVkIGFib3ZlIGFib3V0IG5vdCBkb2luZyB0aGUgJ3NjcmlwdCBleGVjdXRlLAogICAgICAgICAgICAgICAgLy90aGVuIGZpcmUgdGhlIHNjcmlwdCBsb2FkIGV2ZW50IGxpc3RlbmVyIGJlZm9yZSBleGVjdXRlCiAgICAgICAgICAgICAgICAvL25leHQgc2NyaXB0JyB0aGF0IG90aGVyIGJyb3dzZXJzIGRvLgogICAgICAgICAgICAgICAgLy9CZXN0IGhvcGU6IElFMTAgZml4ZXMgdGhlIGlzc3VlcywKICAgICAgICAgICAgICAgIC8vYW5kIHRoZW4gZGVzdHJveXMgYWxsIGluc3RhbGxzIG9mIElFIDYtOS4KICAgICAgICAgICAgICAgIC8vbm9kZS5hdHRhY2hFdmVudCgnb25lcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjb250ZXh0Lm9uU2NyaXB0TG9hZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNvbnRleHQub25TY3JpcHRFcnJvciwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUuc3JjID0gdXJsOwoKICAgICAgICAgICAgLy9DYWxsaW5nIG9uTm9kZUNyZWF0ZWQgYWZ0ZXIgYWxsIHByb3BlcnRpZXMgb24gdGhlIG5vZGUgaGF2ZSBiZWVuCiAgICAgICAgICAgIC8vc2V0LCBidXQgYmVmb3JlIGl0IGlzIHBsYWNlZCBpbiB0aGUgRE9NLgogICAgICAgICAgICBpZiAoY29uZmlnLm9uTm9kZUNyZWF0ZWQpIHsKICAgICAgICAgICAgICAgIGNvbmZpZy5vbk5vZGVDcmVhdGVkKG5vZGUsIGNvbmZpZywgbW9kdWxlTmFtZSwgdXJsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy9Gb3Igc29tZSBjYWNoZSBjYXNlcyBpbiBJRSA2LTgsIHRoZSBzY3JpcHQgZXhlY3V0ZXMgYmVmb3JlIHRoZSBlbmQKICAgICAgICAgICAgLy9vZiB0aGUgYXBwZW5kQ2hpbGQgZXhlY3V0aW9uLCBzbyB0byB0aWUgYW4gYW5vbnltb3VzIGRlZmluZQogICAgICAgICAgICAvL2NhbGwgdG8gdGhlIG1vZHVsZSBuYW1lICh3aGljaCBpcyBzdG9yZWQgb24gdGhlIG5vZGUpLCBob2xkIG9uCiAgICAgICAgICAgIC8vdG8gYSByZWZlcmVuY2UgdG8gdGhpcyBub2RlLCBidXQgY2xlYXIgYWZ0ZXIgdGhlIERPTSBpbnNlcnRpb24uCiAgICAgICAgICAgIGN1cnJlbnRseUFkZGluZ1NjcmlwdCA9IG5vZGU7CiAgICAgICAgICAgIGlmIChiYXNlRWxlbWVudCkgewogICAgICAgICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUobm9kZSwgYmFzZUVsZW1lbnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaGVhZC5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdXJyZW50bHlBZGRpbmdTY3JpcHQgPSBudWxsOwoKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfSBlbHNlIGlmIChpc1dlYldvcmtlcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy9JbiBhIHdlYiB3b3JrZXIsIHVzZSBpbXBvcnRTY3JpcHRzLiBUaGlzIGlzIG5vdCBhIHZlcnkKICAgICAgICAgICAgICAgIC8vZWZmaWNpZW50IHVzZSBvZiBpbXBvcnRTY3JpcHRzLCBpbXBvcnRTY3JpcHRzIHdpbGwgYmxvY2sgdW50aWwKICAgICAgICAgICAgICAgIC8vaXRzIHNjcmlwdCBpcyBkb3dubG9hZGVkIGFuZCBldmFsdWF0ZWQuIEhvd2V2ZXIsIGlmIHdlYiB3b3JrZXJzCiAgICAgICAgICAgICAgICAvL2FyZSBpbiBwbGF5LCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCBhIGJ1aWxkIGhhcyBiZWVuIGRvbmUgc28KICAgICAgICAgICAgICAgIC8vdGhhdCBvbmx5IG9uZSBzY3JpcHQgbmVlZHMgdG8gYmUgbG9hZGVkIGFueXdheS4gVGhpcyBtYXkgbmVlZAogICAgICAgICAgICAgICAgLy90byBiZSByZWV2YWx1YXRlZCBpZiBvdGhlciB1c2UgY2FzZXMgYmVjb21lIGNvbW1vbi4KCiAgICAgICAgICAgICAgICAvLyBQb3N0IGEgdGFzayB0byB0aGUgZXZlbnQgbG9vcCB0byB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBXZWJLaXQKICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSB3b3JrZXIgZ2V0cyBnYXJiYWdlLWNvbGxlY3RlZCBhZnRlciBjYWxsaW5nCiAgICAgICAgICAgICAgICAvLyBpbXBvcnRTY3JpcHRzKCk6IGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE1MzMxNwogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHt9LCAwKTsKICAgICAgICAgICAgICAgIGltcG9ydFNjcmlwdHModXJsKTsKCiAgICAgICAgICAgICAgICAvL0FjY291bnQgZm9yIGFub255bW91cyBtb2R1bGVzCiAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBsZXRlTG9hZChtb2R1bGVOYW1lKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29udGV4dC5vbkVycm9yKG1ha2VFcnJvcignaW1wb3J0c2NyaXB0cycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydFNjcmlwdHMgZmFpbGVkIGZvciAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlTmFtZSArICcgYXQgJyArIHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBnZXRJbnRlcmFjdGl2ZVNjcmlwdCgpIHsKICAgICAgICBpZiAoaW50ZXJhY3RpdmVTY3JpcHQgJiYgaW50ZXJhY3RpdmVTY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgICAgICAgICByZXR1cm4gaW50ZXJhY3RpdmVTY3JpcHQ7CiAgICAgICAgfQoKICAgICAgICBlYWNoUmV2ZXJzZShzY3JpcHRzKCksIGZ1bmN0aW9uIChzY3JpcHQpIHsKICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gKGludGVyYWN0aXZlU2NyaXB0ID0gc2NyaXB0KTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmFjdGl2ZVNjcmlwdDsKICAgIH0KCiAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIHNjcmlwdCBhdHRyaWJ1dGUsIHdoaWNoIGNvdWxkIGFsc28gYWRqdXN0IHRoZSBiYXNlVXJsLgogICAgaWYgKGlzQnJvd3NlciAmJiAhY2ZnLnNraXBEYXRhTWFpbikgewogICAgICAgIC8vRmlndXJlIG91dCBiYXNlVXJsLiBHZXQgaXQgZnJvbSB0aGUgc2NyaXB0IHRhZyB3aXRoIHJlcXVpcmUuanMgaW4gaXQuCiAgICAgICAgZWFjaFJldmVyc2Uoc2NyaXB0cygpLCBmdW5jdGlvbiAoc2NyaXB0KSB7CiAgICAgICAgICAgIC8vU2V0IHRoZSAnaGVhZCcgd2hlcmUgd2UgY2FuIGFwcGVuZCBjaGlsZHJlbiBieQogICAgICAgICAgICAvL3VzaW5nIHRoZSBzY3JpcHQncyBwYXJlbnQuCiAgICAgICAgICAgIGlmICghaGVhZCkgewogICAgICAgICAgICAgICAgaGVhZCA9IHNjcmlwdC5wYXJlbnROb2RlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0xvb2sgZm9yIGEgZGF0YS1tYWluIGF0dHJpYnV0ZSB0byBzZXQgbWFpbiBzY3JpcHQgZm9yIHRoZSBwYWdlCiAgICAgICAgICAgIC8vdG8gbG9hZC4gSWYgaXQgaXMgdGhlcmUsIHRoZSBwYXRoIHRvIGRhdGEgbWFpbiBiZWNvbWVzIHRoZQogICAgICAgICAgICAvL2Jhc2VVcmwsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHNldC4KICAgICAgICAgICAgZGF0YU1haW4gPSBzY3JpcHQuZ2V0QXR0cmlidXRlKCdkYXRhLW1haW4nKTsKICAgICAgICAgICAgaWYgKGRhdGFNYWluKSB7CiAgICAgICAgICAgICAgICAvL1ByZXNlcnZlIGRhdGFNYWluIGluIGNhc2UgaXQgaXMgYSBwYXRoIChpLmUuIGNvbnRhaW5zICc/JykKICAgICAgICAgICAgICAgIG1haW5TY3JpcHQgPSBkYXRhTWFpbjsKCiAgICAgICAgICAgICAgICAvL1NldCBmaW5hbCBiYXNlVXJsIGlmIHRoZXJlIGlzIG5vdCBhbHJlYWR5IGFuIGV4cGxpY2l0IG9uZSwKICAgICAgICAgICAgICAgIC8vYnV0IG9ubHkgZG8gc28gaWYgdGhlIGRhdGEtbWFpbiB2YWx1ZSBpcyBub3QgYSBsb2FkZXIgcGx1Z2luCiAgICAgICAgICAgICAgICAvL21vZHVsZSBJRC4KICAgICAgICAgICAgICAgIGlmICghY2ZnLmJhc2VVcmwgJiYgbWFpblNjcmlwdC5pbmRleE9mKCchJykgPT09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgLy9QdWxsIG9mZiB0aGUgZGlyZWN0b3J5IG9mIGRhdGEtbWFpbiBmb3IgdXNlIGFzIHRoZQogICAgICAgICAgICAgICAgICAgIC8vYmFzZVVybC4KICAgICAgICAgICAgICAgICAgICBzcmMgPSBtYWluU2NyaXB0LnNwbGl0KCcvJyk7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IHNyYy5wb3AoKTsKICAgICAgICAgICAgICAgICAgICBzdWJQYXRoID0gc3JjLmxlbmd0aCA/IHNyYy5qb2luKCcvJykgICsgJy8nIDogJy4vJzsKCiAgICAgICAgICAgICAgICAgICAgY2ZnLmJhc2VVcmwgPSBzdWJQYXRoOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vU3RyaXAgb2ZmIGFueSB0cmFpbGluZyAuanMgc2luY2UgbWFpblNjcmlwdCBpcyBub3cKICAgICAgICAgICAgICAgIC8vbGlrZSBhIG1vZHVsZSBuYW1lLgogICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IG1haW5TY3JpcHQucmVwbGFjZShqc1N1ZmZpeFJlZ0V4cCwgJycpOwoKICAgICAgICAgICAgICAgIC8vSWYgbWFpblNjcmlwdCBpcyBzdGlsbCBhIHBhdGgsIGZhbGwgYmFjayB0byBkYXRhTWFpbgogICAgICAgICAgICAgICAgaWYgKHJlcS5qc0V4dFJlZ0V4cC50ZXN0KG1haW5TY3JpcHQpKSB7CiAgICAgICAgICAgICAgICAgICAgbWFpblNjcmlwdCA9IGRhdGFNYWluOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vUHV0IHRoZSBkYXRhLW1haW4gc2NyaXB0IGluIHRoZSBmaWxlcyB0byBsb2FkLgogICAgICAgICAgICAgICAgY2ZnLmRlcHMgPSBjZmcuZGVwcyA/IGNmZy5kZXBzLmNvbmNhdChtYWluU2NyaXB0KSA6IFttYWluU2NyaXB0XTsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogVGhlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBkZWZpbml0aW9ucyBvZiBtb2R1bGVzLiBEaWZmZXJzIGZyb20KICAgICAqIHJlcXVpcmUoKSBpbiB0aGF0IGEgc3RyaW5nIGZvciB0aGUgbW9kdWxlIHNob3VsZCBiZSB0aGUgZmlyc3QgYXJndW1lbnQsCiAgICAgKiBhbmQgdGhlIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgZGVwZW5kZW5jaWVzIGFyZSBsb2FkZWQgc2hvdWxkCiAgICAgKiByZXR1cm4gYSB2YWx1ZSB0byBkZWZpbmUgdGhlIG1vZHVsZSBjb3JyZXNwb25kaW5